From 4aed2c8219774f5d797760606b8489a92ddc5163 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- AUTHORS | 3 + COPYING | 346 + COPYING-DOCS | 397 + INSTALL | 184 + Mainpage.dox | 12 + Makefile.am.in | 21 + Makefile.cvs | 15 + README | 312 + README.pam | 72 + applnk/.directory | 81 + applnk/Makefile.am | 70 + applnk/compat/Makefile.am | 7 + applnk/compat/battery.desktop | 74 + applnk/compat/bwarning.desktop | 74 + applnk/compat/cwarning.desktop | 74 + applnk/compat/email.desktop | 238 + applnk/compat/kcmkonq.desktop | 91 + applnk/compat/kcmkxmlrpcd.desktop | 80 + applnk/compat/konqhtml.desktop | 83 + applnk/compat/passwords.desktop | 246 + applnk/compat/power.desktop | 75 + applnk/compat/socks.desktop | 23 + applnk/compat/userinfo.desktop | 227 + applnk/compat/virtualdesktops.desktop | 84 + applnk/hidden.directory | 72 + applnk/kde-development-translation.directory | 72 + applnk/kde-development-webdevelopment.directory | 71 + applnk/kde-development.directory | 89 + applnk/kde-editors.directory | 85 + applnk/kde-edutainment.directory | 86 + applnk/kde-essential.menu | 27 + applnk/kde-games-arcade.directory | 74 + applnk/kde-games-board.directory | 81 + applnk/kde-games-card.directory | 81 + applnk/kde-games-kids.directory | 88 + applnk/kde-games-roguelikes.directory | 84 + applnk/kde-games-strategy.directory | 87 + applnk/kde-games.directory | 89 + applnk/kde-graphics.directory | 89 + applnk/kde-information.directory | 87 + applnk/kde-information.menu | 10 + applnk/kde-internet-terminal.directory | 88 + applnk/kde-internet.directory | 48 + applnk/kde-main.directory | 80 + applnk/kde-more.directory | 79 + applnk/kde-multimedia.directory | 65 + applnk/kde-office.directory | 86 + applnk/kde-science.directory | 80 + applnk/kde-screensavers.menu | 10 + applnk/kde-settings-accessibility.directory | 85 + applnk/kde-settings-components.directory | 85 + applnk/kde-settings-desktop.directory | 80 + applnk/kde-settings-hardware.directory | 59 + applnk/kde-settings-looknfeel.directory | 86 + applnk/kde-settings-network.directory | 86 + applnk/kde-settings-peripherals.directory | 87 + applnk/kde-settings-power.directory | 88 + applnk/kde-settings-security.directory | 86 + applnk/kde-settings-sound.directory | 85 + applnk/kde-settings-system.directory | 84 + applnk/kde-settings-webbrowsing.directory | 85 + applnk/kde-settings.directory | 88 + applnk/kde-settings.menu | 84 + applnk/kde-settingsmenu.directory | 78 + applnk/kde-system-screensavers.directory | 171 + applnk/kde-system-terminal.directory | 88 + applnk/kde-system.directory | 81 + applnk/kde-toys.directory | 88 + applnk/kde-unknown.directory | 76 + applnk/kde-utilities-accessibility.directory | 148 + applnk/kde-utilities-desktop.directory | 141 + applnk/kde-utilities-file.directory | 139 + applnk/kde-utilities-peripherals.directory | 149 + applnk/kde-utilities-pim.directory | 45 + applnk/kde-utilities-xutils.directory | 166 + applnk/kde-utilities.directory | 170 + applnk/old_desktop_files | 4 + configure.in.bot | 25 + configure.in.in | 276 + doc/Makefile.am | 5 + doc/faq/Makefile.am | 4 + doc/faq/TODO | 35 + doc/faq/about.docbook | 72 + doc/faq/configkde.docbook | 250 + doc/faq/contrib.docbook | 164 + doc/faq/desktop.docbook | 97 + doc/faq/filemng.docbook | 207 + doc/faq/getkde.docbook | 79 + doc/faq/index.docbook | 136 + doc/faq/install.docbook | 726 + doc/faq/intro.docbook | 93 + doc/faq/kdeapps.docbook | 158 + doc/faq/misc.docbook | 219 + doc/faq/moreinfo.docbook | 154 + doc/faq/nonkdeapps.docbook | 106 + doc/faq/notrelated.docbook | 232 + doc/faq/panel.docbook | 193 + doc/faq/qt.docbook | 76 + doc/faq/questions.docbook | 160 + doc/faq/sound.docbook | 55 + doc/faq/tips.docbook | 137 + doc/faq/webbrowse.docbook | 222 + doc/faq/winmng.docbook | 134 + doc/glossary/Makefile.am | 2 + doc/glossary/checkxrefs | 10 + doc/glossary/index.docbook | 296 + doc/glossary/kdeprintingglossary.docbook | 1387 + doc/kappfinder/Makefile.am | 5 + doc/kappfinder/man-kappfinder.1.docbook | 81 + doc/kate/Makefile.am | 3 + doc/kate/TODO | 6 + doc/kate/advanced.docbook | 1242 + doc/kate/configdialog01.png | Bin 0 -> 44641 bytes doc/kate/configdialog02.png | Bin 0 -> 25384 bytes doc/kate/configuring.docbook | 1595 + doc/kate/fundamentals.docbook | 621 + doc/kate/highlighted.png | Bin 0 -> 4797 bytes doc/kate/highlighting.docbook | 931 + doc/kate/index.docbook | 293 + doc/kate/kate.png | Bin 0 -> 81016 bytes doc/kate/man-kate.1.docbook | 165 + doc/kate/mdi.docbook | 266 + doc/kate/menus.docbook | 1438 + doc/kate/mimetypechooser.png | Bin 0 -> 15823 bytes doc/kate/part.docbook | 671 + doc/kate/plugins.docbook | 28 + doc/kate/regular-expressions.docbook | 664 + doc/kate/unhighlighted.png | Bin 0 -> 3471 bytes doc/kcontrol/Makefile.am | 6 + doc/kcontrol/arts/Makefile.am | 2 + doc/kcontrol/arts/index.docbook | 201 + doc/kcontrol/arts/midi.docbook | 24 + doc/kcontrol/background/Makefile.am | 2 + doc/kcontrol/background/index.docbook | 383 + doc/kcontrol/bell/Makefile.am | 2 + doc/kcontrol/bell/index.docbook | 74 + doc/kcontrol/cache/Makefile.am | 2 + doc/kcontrol/cache/index.docbook | 69 + doc/kcontrol/clock/Makefile.am | 2 + doc/kcontrol/clock/index.docbook | 74 + doc/kcontrol/colors/Makefile.am | 2 + doc/kcontrol/colors/index.docbook | 132 + doc/kcontrol/cookies/Makefile.am | 2 + doc/kcontrol/cookies/index.docbook | 211 + doc/kcontrol/crypto/Makefile.am | 2 + doc/kcontrol/crypto/index.docbook | 205 + doc/kcontrol/desktop/Makefile.am | 2 + doc/kcontrol/desktop/index.docbook | 84 + doc/kcontrol/desktopbehavior/Makefile.am | 2 + doc/kcontrol/desktopbehavior/index.docbook | 198 + doc/kcontrol/ebrowsing/Makefile.am | 2 + doc/kcontrol/ebrowsing/index.docbook | 156 + doc/kcontrol/email/Makefile.am | 2 + doc/kcontrol/email/index.docbook | 103 + doc/kcontrol/energy/Makefile.am | 2 + doc/kcontrol/energy/index.docbook | 110 + doc/kcontrol/filemanager/Makefile.am | 2 + doc/kcontrol/filemanager/index.docbook | 297 + doc/kcontrol/filemanager/kfileman1.png | Bin 0 -> 7883 bytes doc/kcontrol/filemanager/kfileman2.png | Bin 0 -> 9224 bytes doc/kcontrol/filetypes/Makefile.am | 2 + doc/kcontrol/filetypes/index.docbook | 338 + doc/kcontrol/fonts/Makefile.am | 2 + doc/kcontrol/fonts/index.docbook | 121 + doc/kcontrol/helpindex/Makefile.am | 2 + doc/kcontrol/helpindex/index.docbook | 144 + doc/kcontrol/icons/Makefile.am | 2 + doc/kcontrol/icons/index.docbook | 233 + doc/kcontrol/index.docbook | 637 + doc/kcontrol/kcmaccess/Makefile.am | 4 + doc/kcontrol/kcmaccess/index.docbook | 179 + doc/kcontrol/kcmcss/Makefile.am | 2 + doc/kcontrol/kcmcss/index.docbook | 257 + doc/kcontrol/kcmfontinst/Makefile.am | 2 + doc/kcontrol/kcmfontinst/index.docbook | 76 + doc/kcontrol/kcmkonsole/Makefile.am | 2 + doc/kcontrol/kcmkonsole/index.docbook | 177 + doc/kcontrol/kcmlaunch/Makefile.am | 2 + doc/kcontrol/kcmlaunch/index.docbook | 70 + doc/kcontrol/kcmnotify/Makefile.am | 2 + doc/kcontrol/kcmnotify/index.docbook | 151 + doc/kcontrol/kcmsmserver/Makefile.am | 2 + doc/kcontrol/kcmsmserver/index.docbook | 109 + doc/kcontrol/kcmstyle/Makefile.am | 2 + doc/kcontrol/kcmstyle/index.docbook | 189 + doc/kcontrol/kcmtaskbar/Makefile.am | 2 + doc/kcontrol/kcmtaskbar/index.docbook | 142 + doc/kcontrol/kdm/Makefile.am | 2 + doc/kcontrol/kdm/index.docbook | 518 + doc/kcontrol/keyboard/Makefile.am | 2 + doc/kcontrol/keyboard/index.docbook | 90 + doc/kcontrol/keys/Makefile.am | 2 + doc/kcontrol/keys/index.docbook | 191 + doc/kcontrol/khtml/Makefile.am | 2 + doc/kcontrol/khtml/index.docbook | 352 + doc/kcontrol/khtml/nsplugin.docbook | 91 + doc/kcontrol/kwindecoration/Makefile.am | 2 + doc/kcontrol/kwindecoration/index.docbook | 98 + doc/kcontrol/language/Makefile.am | 2 + doc/kcontrol/language/index.docbook | 218 + doc/kcontrol/mouse/Makefile.am | 2 + doc/kcontrol/mouse/index.docbook | 493 + doc/kcontrol/netpref/Makefile.am | 2 + doc/kcontrol/netpref/index.docbook | 109 + doc/kcontrol/panel/Makefile.am | 2 + doc/kcontrol/panel/index.docbook | 244 + doc/kcontrol/panelappearance/Makefile.am | 3 + doc/kcontrol/panelappearance/index.docbook | 122 + doc/kcontrol/passwords/Makefile.am | 2 + doc/kcontrol/passwords/index.docbook | 84 + doc/kcontrol/performance/Makefile.am | 2 + doc/kcontrol/performance/index.docbook | 102 + doc/kcontrol/proxy/Makefile.am | 2 + doc/kcontrol/proxy/index.docbook | 197 + doc/kcontrol/proxy/socks.docbook | 56 + doc/kcontrol/screensaver/Makefile.am | 2 + doc/kcontrol/screensaver/index.docbook | 203 + doc/kcontrol/screenshot.png | Bin 0 -> 103581 bytes doc/kcontrol/smb/Makefile.am | 2 + doc/kcontrol/smb/index.docbook | 106 + doc/kcontrol/spellchecking/Makefile.am | 2 + doc/kcontrol/spellchecking/index.docbook | 88 + doc/kcontrol/useragent/Makefile.am | 2 + doc/kcontrol/useragent/index.docbook | 117 + doc/kcontrol/windowmanagement/Makefile.am | 2 + doc/kcontrol/windowmanagement/index.docbook | 63 + doc/kdcop/Makefile.am | 4 + doc/kdcop/index.docbook | 78 + doc/kdebugdialog/Makefile.am | 3 + doc/kdebugdialog/index.docbook | 134 + doc/kdeprint/Makefile.am | 3 + doc/kdeprint/add-printer-wiz.docbook | 290 + doc/kdeprint/cr32-action-wizard.png | Bin 0 -> 606 bytes doc/kdeprint/cups-config.docbook | 2072 + ...s-filterarchitecture-kivio-70Percent-scaled.png | Bin 0 -> 100464 bytes doc/kdeprint/cupsaddprinterwizard1.png | Bin 0 -> 70554 bytes .../cupsaddprinterwizard2_backendselection.png | Bin 0 -> 76444 bytes doc/kdeprint/cupsaddprinterwizard3_networkscan.png | Bin 0 -> 70820 bytes .../cupsaddprinterwizard3_networkscan_results.png | Bin 0 -> 90883 bytes .../cupsaddprinterwizard4_networkscan_config.png | Bin 0 -> 10607 bytes doc/kdeprint/cupsoptions.docbook | 602 + .../cupsserverconfig_browse_relay_add_button.png | Bin 0 -> 2562 bytes .../cupsserverconfig_browsingmasks_add_button.png | Bin 0 -> 2294 bytes .../cupsserverconfiguration10_browsinggeneral.png | Bin 0 -> 14678 bytes ...psserverconfiguration11_browsingconnections.png | Bin 0 -> 15433 bytes .../cupsserverconfiguration11_browsingmasks.png | Bin 0 -> 15493 bytes .../cupsserverconfiguration12_browsingtimeouts.png | Bin 0 -> 14109 bytes .../cupsserverconfiguration14_browsingrelay.png | Bin 0 -> 14903 bytes ...uration15a_resourceallprinters_defineaccess.png | Bin 0 -> 15822 bytes ...uration15b_resourceallprinters_defineaccess.png | Bin 0 -> 5870 bytes ...uration15c_resourceallprinters_defineaccess.png | Bin 0 -> 5470 bytes doc/kdeprint/cupsserverconfiguration1_welcome.png | Bin 0 -> 31316 bytes doc/kdeprint/cupsserverconfiguration2_general.png | Bin 0 -> 15870 bytes doc/kdeprint/cupsserverconfiguration3_logging.png | Bin 0 -> 16490 bytes .../cupsserverconfiguration4_directories.png | Bin 0 -> 17728 bytes doc/kdeprint/cupsserverconfiguration5_HTTP.png | Bin 0 -> 15010 bytes .../cupsserverconfiguration6_encryption.png | Bin 0 -> 15083 bytes .../cupsserverconfiguration7_miscellanious.png | Bin 0 -> 15943 bytes .../cupsserverconfiguration8_networkgeneral.png | Bin 0 -> 15538 bytes .../cupsserverconfiguration9_networkclients.png | Bin 0 -> 14998 bytes ...erverconfiguration_resourceadminaccessmasks.png | Bin 0 -> 47480 bytes ...erverconfiguration_resourceadminaddprinters.png | Bin 0 -> 30334 bytes ...ation_resourceadminaddprinters_defineaccess.png | Bin 0 -> 43890 bytes ...verconfiguration_resourceadminauthorization.png | Bin 0 -> 30503 bytes .../cupsserverconfiguration_securityoverview.png | Bin 0 -> 16804 bytes doc/kdeprint/extensions.docbook | 57 + doc/kdeprint/external-command.docbook | 25 + doc/kdeprint/final-word.docbook | 117 + doc/kdeprint/getting-started.docbook | 143 + doc/kdeprint/highlights.docbook | 518 + doc/kdeprint/index.docbook | 200 + doc/kdeprint/kcontrol-icon.png | Bin 0 -> 1202 bytes .../kcontrolcenter-printmanager-jobcontrol-2.png | Bin 0 -> 10761 bytes doc/kdeprint/kcron_to_be_printed.png | Bin 0 -> 10637 bytes doc/kdeprint/kdeprint-jobviewer.png | Bin 0 -> 11220 bytes doc/kdeprint/kprinter-as-netscape-printcommand.png | Bin 0 -> 8210 bytes doc/kdeprint/kprinter-kivio.png | Bin 0 -> 11149 bytes doc/kdeprint/kprinter.png | Bin 0 -> 12568 bytes doc/kdeprint/kprinter_called_from_run_command.png | Bin 0 -> 6068 bytes .../kprinter_with_kcron_developer_special.png | Bin 0 -> 11245 bytes doc/kdeprint/lpd.docbook | 18 + doc/kdeprint/lpr-bsd.docbook | 25 + doc/kdeprint/lprng.docbook | 7 + doc/kdeprint/ps-boxes.png | Bin 0 -> 441 bytes doc/kdeprint/rlpr.docbook | 18 + doc/kdeprint/steinbruch_scaled.png | Bin 0 -> 116567 bytes doc/kdeprint/tech-overview.docbook | 280 + doc/kdeprint/theory.docbook | 690 + doc/kdesu/Makefile.am | 5 + doc/kdesu/index.docbook | 320 + doc/kdesu/man-kdesu.1.docbook | 179 + doc/kdm/Makefile.am | 6 + doc/kdm/index.docbook | 1472 + doc/kdm/kdmrc-ref.docbook | 2316 + doc/kfind/Makefile.am | 4 + doc/kfind/index.docbook | 363 + doc/kfind/man-kfind.1.docbook | 79 + doc/khelpcenter/Makefile.am | 6 + doc/khelpcenter/background.png | Bin 0 -> 128431 bytes doc/khelpcenter/bgtable.png | Bin 0 -> 25929 bytes doc/khelpcenter/contact.docbook | 138 + doc/khelpcenter/help.docbook | 740 + doc/khelpcenter/index.docbook | 82 + doc/khelpcenter/kdelogo2.png | Bin 0 -> 6833 bytes doc/khelpcenter/khelpcenter.png | Bin 0 -> 1687 bytes doc/khelpcenter/konq.css | 68 + doc/khelpcenter/lines.png | Bin 0 -> 259 bytes doc/khelpcenter/lines2.png | Bin 0 -> 198 bytes doc/khelpcenter/pointers.png | Bin 0 -> 268 bytes doc/khelpcenter/shadow1.png | Bin 0 -> 184 bytes doc/khelpcenter/support.docbook | 102 + doc/khelpcenter/welcome.docbook | 60 + doc/khelpcenter/whatiskde.docbook | 129 + doc/kicker/Makefile.am | 5 + doc/kicker/bookmarks_icon.png | Bin 0 -> 2272 bytes doc/kicker/desktop_icon.png | Bin 0 -> 6881 bytes doc/kicker/index.docbook | 2434 + doc/kicker/k_menu_icon.png | Bin 0 -> 5340 bytes doc/kicker/man-appletproxy.1.docbook | 101 + doc/kicker/man-kicker.1.docbook | 88 + doc/kicker/printsys_icon.png | Bin 0 -> 2588 bytes doc/kicker/quickbrowser_icon.png | Bin 0 -> 3482 bytes doc/kicker/recent_docs_icon.png | Bin 0 -> 3271 bytes doc/kicker/screenshot_left.png | Bin 0 -> 18674 bytes doc/kicker/screenshot_right.png | Bin 0 -> 11764 bytes doc/kicker/taskbar_group.png | Bin 0 -> 4496 bytes doc/kicker/terminals_icon.png | Bin 0 -> 2009 bytes doc/kicker/windowlist_icon.png | Bin 0 -> 2801 bytes doc/kinfocenter/Makefile.am | 6 + doc/kinfocenter/cdinfo/Makefile.am | 3 + doc/kinfocenter/cdinfo/index.docbook | 51 + doc/kinfocenter/devices/Makefile.am | 3 + doc/kinfocenter/devices/index.docbook | 60 + doc/kinfocenter/dma/Makefile.am | 3 + doc/kinfocenter/dma/index.docbook | 64 + doc/kinfocenter/index.docbook | 341 + doc/kinfocenter/interrupts/Makefile.am | 3 + doc/kinfocenter/interrupts/index.docbook | 70 + doc/kinfocenter/ioports/Makefile.am | 3 + doc/kinfocenter/ioports/index.docbook | 64 + doc/kinfocenter/memory/Makefile.am | 3 + doc/kinfocenter/memory/index.docbook | 108 + doc/kinfocenter/nics/Makefile.am | 3 + doc/kinfocenter/nics/index.docbook | 45 + doc/kinfocenter/opengl/Makefile.am | 2 + doc/kinfocenter/opengl/index.docbook | 47 + doc/kinfocenter/partitions/Makefile.am | 3 + doc/kinfocenter/partitions/index.docbook | 56 + doc/kinfocenter/pci/Makefile.am | 3 + doc/kinfocenter/pci/index.docbook | 57 + doc/kinfocenter/pcmcia/Makefile.am | 3 + doc/kinfocenter/pcmcia/index.docbook | 38 + doc/kinfocenter/processor/Makefile.am | 3 + doc/kinfocenter/processor/index.docbook | 56 + doc/kinfocenter/protocols/Makefile.am | 3 + doc/kinfocenter/protocols/index.docbook | 39 + doc/kinfocenter/samba/Makefile.am | 4 + doc/kinfocenter/samba/index.docbook | 207 + doc/kinfocenter/scsi/Makefile.am | 3 + doc/kinfocenter/scsi/index.docbook | 56 + doc/kinfocenter/sound/Makefile.am | 3 + doc/kinfocenter/sound/index.docbook | 51 + doc/kinfocenter/usb/Makefile.am | 3 + doc/kinfocenter/usb/index.docbook | 43 + doc/kinfocenter/xserver/Makefile.am | 3 + doc/kinfocenter/xserver/index.docbook | 56 + doc/kioslave/Makefile.am | 4 + doc/kioslave/bzip.docbook | 29 + doc/kioslave/bzip2.docbook | 29 + doc/kioslave/cgi.docbook | 24 + doc/kioslave/data.docbook | 47 + doc/kioslave/file.docbook | 20 + doc/kioslave/finger.docbook | 33 + doc/kioslave/fish.docbook | 66 + doc/kioslave/floppy.docbook | 51 + doc/kioslave/ftp.docbook | 43 + doc/kioslave/gopher.docbook | 39 + doc/kioslave/gzip.docbook | 30 + doc/kioslave/help.docbook | 17 + doc/kioslave/http.docbook | 25 + doc/kioslave/https.docbook | 21 + doc/kioslave/imap.docbook | 31 + doc/kioslave/imaps.docbook | 17 + doc/kioslave/index.docbook | 93 + doc/kioslave/info.docbook | 36 + doc/kioslave/lan.docbook | 23 + doc/kioslave/ldap.docbook | 23 + doc/kioslave/mac.docbook | 53 + doc/kioslave/mailto.docbook | 17 + doc/kioslave/man.docbook | 86 + doc/kioslave/mrml.docbook | 26 + doc/kioslave/news.docbook | 20 + doc/kioslave/nfs.docbook | 39 + doc/kioslave/nntp.docbook | 41 + doc/kioslave/pop3.docbook | 13 + doc/kioslave/pop3s.docbook | 14 + doc/kioslave/print.docbook | 170 + doc/kioslave/rlan.docbook | 11 + doc/kioslave/rlogin.docbook | 31 + doc/kioslave/sftp.docbook | 19 + doc/kioslave/smb.docbook | 56 + doc/kioslave/smtp.docbook | 16 + doc/kioslave/tar.docbook | 18 + doc/kioslave/telnet.docbook | 17 + doc/kioslave/thumbnail.docbook | 28 + doc/kioslave/webdav.docbook | 65 + doc/kioslave/webdavs.docbook | 17 + doc/klipper/Makefile.am | 4 + doc/klipper/index.docbook | 511 + doc/klipper/screenshot.png | Bin 0 -> 967 bytes doc/kmenuedit/Makefile.am | 3 + doc/kmenuedit/done.png | Bin 0 -> 47674 bytes doc/kmenuedit/index.docbook | 521 + doc/kmenuedit/itemname.png | Bin 0 -> 7163 bytes doc/kmenuedit/kmenueditmain.png | Bin 0 -> 40179 bytes doc/kmenuedit/new.png | Bin 0 -> 9348 bytes doc/kmenuedit/selecticon.png | Bin 0 -> 45475 bytes doc/kmenuedit/selectinternet.png | Bin 0 -> 17293 bytes doc/knetattach/Makefile.am | 2 + doc/knetattach/index.docbook | 349 + doc/knetattach/screenshot.png | Bin 0 -> 25179 bytes doc/knetattach/screenshot1.png | Bin 0 -> 41777 bytes doc/knetattach/screenshot2.png | Bin 0 -> 30550 bytes doc/knetattach/screenshot3.png | Bin 0 -> 66693 bytes doc/knetattach/screenshot4.png | Bin 0 -> 43020 bytes doc/kompmgr/Makefile.am | 3 + doc/kompmgr/index.docbook | 433 + doc/konqueror/Makefile.am | 4 + doc/konqueror/basics.docbook | 386 + doc/konqueror/bookmarks.docbook | 129 + doc/konqueror/browser.docbook | 482 + doc/konqueror/cmndline.png | Bin 0 -> 52222 bytes doc/konqueror/commands.docbook | 1210 + doc/konqueror/config.docbook | 137 + doc/konqueror/credits.docbook | 182 + doc/konqueror/dirtree.png | Bin 0 -> 50215 bytes doc/konqueror/dragdrop.png | Bin 0 -> 47960 bytes doc/konqueror/faq.docbook | 169 + doc/konqueror/filemanager.docbook | 898 + doc/konqueror/index.docbook | 110 + doc/konqueror/introduction.docbook | 64 + doc/konqueror/konqorg.png | Bin 0 -> 86855 bytes doc/konqueror/man-kbookmarkmerger.1.docbook | 112 + doc/konqueror/parts.png | Bin 0 -> 34160 bytes doc/konqueror/path-complete.docbook | 82 + doc/konqueror/plugins.docbook | 162 + doc/konqueror/save-settings.docbook | 92 + doc/konqueror/shortcut1.png | Bin 0 -> 30880 bytes doc/konqueror/shortcut2.png | Bin 0 -> 14159 bytes doc/konqueror/sidebar.docbook | 201 + doc/konsole/Makefile.am | 3 + doc/konsole/index.docbook | 1465 + doc/konsole/konsole.png | Bin 0 -> 8848 bytes doc/konsole/tabbar.png | Bin 0 -> 3641 bytes doc/kpager/Makefile.am | 3 + doc/kpager/index.docbook | 381 + doc/kpager/screenshot.png | Bin 0 -> 7604 bytes doc/kpager/settings.png | Bin 0 -> 8917 bytes doc/ksplashml/Makefile.am | 4 + doc/ksplashml/index.docbook | 1354 + doc/ksysguard/Makefile.am | 4 + doc/ksysguard/index.docbook | 496 + doc/kwrite/Makefile.am | 4 + doc/kwrite/index.docbook | 2952 + doc/kxkb/Makefile.am | 4 + doc/kxkb/index.docbook | 358 + doc/kxkb/layout.png | Bin 0 -> 27006 bytes doc/kxkb/switching.png | Bin 0 -> 13163 bytes doc/kxkb/xkb.png | Bin 0 -> 20695 bytes doc/quickstart/Makefile.am | 3 + doc/quickstart/index.docbook | 1340 + doc/userguide/Makefile.am | 4 + doc/userguide/a-window.png | Bin 0 -> 86896 bytes doc/userguide/accessibility.docbook | 168 + doc/userguide/amarok-icon.png | Bin 0 -> 2647 bytes doc/userguide/amarok.png | Bin 0 -> 14673 bytes doc/userguide/base-kde-applications.docbook | 441 + doc/userguide/browser-fine-tuning.docbook | 71 + doc/userguide/burning-cds.docbook | 38 + doc/userguide/control-center.docbook | 922 + doc/userguide/creating-graphics.docbook | 48 + doc/userguide/credits-and-license.docbook | 315 + doc/userguide/customizing-desktop.docbook | 365 + doc/userguide/desktop.png | Bin 0 -> 38608 bytes doc/userguide/email.docbook | 254 + doc/userguide/extragear-applications.docbook | 199 + doc/userguide/file-sharing.docbook | 109 + doc/userguide/font-installation.docbook | 79 + doc/userguide/getting-help.docbook | 213 + doc/userguide/glossary.docbook | 38 + doc/userguide/groupware-kontact.docbook | 614 + doc/userguide/index.docbook | 611 + doc/userguide/internet-shortcuts.docbook | 80 + doc/userguide/juk-icon.png | Bin 0 -> 2599 bytes doc/userguide/juk.png | Bin 0 -> 74846 bytes doc/userguide/kaboodle-icon.png | Bin 0 -> 2070 bytes doc/userguide/kaboodle.png | Bin 0 -> 21032 bytes doc/userguide/kcalc-systray.png | Bin 0 -> 5311 bytes doc/userguide/kcontrol.png | Bin 0 -> 84846 bytes doc/userguide/kde-as-root.docbook | 52 + doc/userguide/kde-edutainment.docbook | 342 + doc/userguide/kde-for-admins.docbook | 2747 + doc/userguide/kde-office.docbook | 321 + doc/userguide/kmag.png | Bin 0 -> 24008 bytes doc/userguide/kmousetool.png | Bin 0 -> 30666 bytes doc/userguide/kmouth.png | Bin 0 -> 17835 bytes doc/userguide/kmouth2.png | Bin 0 -> 21497 bytes doc/userguide/kmouth3.png | Bin 0 -> 45978 bytes doc/userguide/knode-identity.png | Bin 0 -> 49777 bytes doc/userguide/knode-mail-account.png | Bin 0 -> 43215 bytes doc/userguide/knode-news-account.png | Bin 0 -> 25150 bytes doc/userguide/knode-start.png | Bin 0 -> 27701 bytes doc/userguide/konq-sidebar.png | Bin 0 -> 30404 bytes doc/userguide/konq-simple.png | Bin 0 -> 94848 bytes doc/userguide/konsole-intro.docbook | 126 + doc/userguide/kopete.png | Bin 0 -> 18060 bytes doc/userguide/kppp-dialer-tab.png | Bin 0 -> 13648 bytes doc/userguide/kppp-wizard.png | Bin 0 -> 22471 bytes doc/userguide/messaging-intro.docbook | 188 + doc/userguide/migrator-applications.docbook | 272 + doc/userguide/migrator-dictionary.docbook | 38 + doc/userguide/net-connection-setup.docbook | 238 + doc/userguide/networking-with-windows.docbook | 128 + doc/userguide/noatun-icon.png | Bin 0 -> 2767 bytes doc/userguide/noatun.png | Bin 0 -> 16375 bytes doc/userguide/oggfolder.png | Bin 0 -> 88475 bytes doc/userguide/open-file-dialog.png | Bin 0 -> 71366 bytes doc/userguide/panel-and-desktop.docbook | 325 + doc/userguide/pdf-files.docbook | 40 + doc/userguide/playing-audiocds.docbook | 142 + doc/userguide/playing-movies.docbook | 48 + doc/userguide/playing-music.docbook | 150 + doc/userguide/printer-setup.docbook | 47 + doc/userguide/printing-from-apps.docbook | 40 + doc/userguide/programs-and-documents.docbook | 565 + doc/userguide/programs-controlling.docbook | 39 + doc/userguide/removable-disks.docbook | 140 + doc/userguide/rip.png | Bin 0 -> 20916 bytes doc/userguide/ripsettings.png | Bin 0 -> 52908 bytes doc/userguide/screen-captures.docbook | 38 + doc/userguide/services.png | Bin 0 -> 77067 bytes doc/userguide/shared-sessions.docbook | 46 + doc/userguide/splash-screen.png | Bin 0 -> 42044 bytes doc/userguide/standard-menu-entries.docbook | 319 + doc/userguide/switching-sessions.docbook | 92 + doc/userguide/the-filemanager.docbook | 291 + doc/userguide/titlebar-menu.png | Bin 0 -> 45043 bytes doc/userguide/troubleshooting-network-x.docbook | 41 + doc/userguide/troubleshooting-no-open.docbook | 49 + doc/userguide/under-the-hood.docbook | 521 + doc/userguide/usenet.docbook | 251 + doc/userguide/where-next.docbook | 40 + doc/userguide/windows-how-to.docbook | 559 + doc/userguide/your-kde-account.docbook | 79 + doc/visualdict/Makefile.am | 4 + doc/visualdict/index.docbook | 349 + doc/visualdict/pict1.png | Bin 0 -> 1170 bytes doc/visualdict/pict10.png | Bin 0 -> 2673 bytes doc/visualdict/pict11.png | Bin 0 -> 994 bytes doc/visualdict/pict12.png | Bin 0 -> 1525 bytes doc/visualdict/pict13.png | Bin 0 -> 3952 bytes doc/visualdict/pict14.png | Bin 0 -> 2950 bytes doc/visualdict/pict15.png | Bin 0 -> 523 bytes doc/visualdict/pict16.png | Bin 0 -> 9268 bytes doc/visualdict/pict17.png | Bin 0 -> 956 bytes doc/visualdict/pict18.png | Bin 0 -> 558 bytes doc/visualdict/pict19.png | Bin 0 -> 19326 bytes doc/visualdict/pict2.png | Bin 0 -> 926 bytes doc/visualdict/pict20.png | Bin 0 -> 1562 bytes doc/visualdict/pict21.png | Bin 0 -> 30371 bytes doc/visualdict/pict22.png | Bin 0 -> 1241 bytes doc/visualdict/pict23.png | Bin 0 -> 19677 bytes doc/visualdict/pict3.png | Bin 0 -> 10710 bytes doc/visualdict/pict4.png | Bin 0 -> 2493 bytes doc/visualdict/pict5.png | Bin 0 -> 4428 bytes doc/visualdict/pict6.png | Bin 0 -> 46304 bytes doc/visualdict/pict7.png | Bin 0 -> 5969 bytes doc/visualdict/pict8.png | Bin 0 -> 2178 bytes doc/visualdict/pict9.png | Bin 0 -> 5850 bytes drkonqi/AUTHORS | 1 + drkonqi/LICENSE | 20 + drkonqi/Makefile.am | 26 + drkonqi/README | 6 + drkonqi/backtrace.cpp | 181 + drkonqi/backtrace.h | 66 + drkonqi/crashtest.cpp | 92 + drkonqi/debugger.cpp | 219 + drkonqi/debugger.h | 72 + drkonqi/debuggers/Makefile.am | 2 + drkonqi/debuggers/gdbrc | 166 + drkonqi/drbugreport.cpp | 61 + drkonqi/drbugreport.h | 62 + drkonqi/krashconf.cpp | 165 + drkonqi/krashconf.h | 113 + drkonqi/krashdcopinterface.h | 67 + drkonqi/main.cpp | 91 + drkonqi/pics/Makefile.am | 2 + drkonqi/pics/konqi.png | Bin 0 -> 41465 bytes drkonqi/presets/Makefile.am | 2 + drkonqi/presets/developerrc | 846 + drkonqi/presets/enduserrc | 828 + drkonqi/toplevel.cpp | 222 + drkonqi/toplevel.h | 66 + kappfinder/Makefile.am | 34 + kappfinder/README.apps | 12 + kappfinder/apps/Development/Forte.desktop | 68 + kappfinder/apps/Development/Makefile.am | 6 + kappfinder/apps/Development/assistant.desktop | 147 + kappfinder/apps/Development/ddd.desktop | 73 + kappfinder/apps/Development/designer.desktop | 143 + kappfinder/apps/Development/dlgedit.desktop | 114 + kappfinder/apps/Development/eclipse.desktop | 66 + kappfinder/apps/Development/fdesign.desktop | 55 + kappfinder/apps/Development/j2mewtk.desktop | 84 + kappfinder/apps/Development/linguist.desktop | 141 + kappfinder/apps/Development/pose.desktop | 99 + kappfinder/apps/Development/sced.desktop | 79 + kappfinder/apps/Games/Arcade/ClanBomber.desktop | 108 + kappfinder/apps/Games/Arcade/FrozenBubble.desktop | 116 + kappfinder/apps/Games/Arcade/Gnibbles.desktop | 97 + kappfinder/apps/Games/Arcade/GnobotsII.desktop | 98 + kappfinder/apps/Games/Arcade/Makefile.am | 8 + kappfinder/apps/Games/Arcade/Mures.desktop | 103 + .../apps/Games/Arcade/SuperMethaneBrothers.desktop | 127 + kappfinder/apps/Games/Arcade/Trophy.desktop | 119 + kappfinder/apps/Games/Arcade/TuxRacer.desktop | 108 + kappfinder/apps/Games/Arcade/XKobo.desktop | 102 + kappfinder/apps/Games/Arcade/XSoldier.desktop | 109 + kappfinder/apps/Games/Arcade/alephone-nogl.desktop | 95 + kappfinder/apps/Games/Arcade/alephone.desktop | 155 + kappfinder/apps/Games/Arcade/battalion.desktop | 117 + kappfinder/apps/Games/Arcade/battleball.desktop | 105 + kappfinder/apps/Games/Arcade/cxhextris.desktop | 97 + .../apps/Games/Arcade/rocksndiamonds.desktop | 128 + kappfinder/apps/Games/Arcade/scavenger.desktop | 107 + kappfinder/apps/Games/Board/Gataxx.desktop | 95 + kappfinder/apps/Games/Board/Gchess.desktop | 72 + kappfinder/apps/Games/Board/Glines.desktop | 110 + kappfinder/apps/Games/Board/Gmahjongg.desktop | 122 + kappfinder/apps/Games/Board/Gmines.desktop | 146 + kappfinder/apps/Games/Board/Gnotravex.desktop | 96 + kappfinder/apps/Games/Board/Gnotski.desktop | 92 + kappfinder/apps/Games/Board/Gstones.desktop | 54 + kappfinder/apps/Games/Board/Iagno.desktop | 96 + kappfinder/apps/Games/Board/Makefile.am | 7 + kappfinder/apps/Games/Board/SameGnome.desktop | 123 + kappfinder/apps/Games/Board/Xgammon.desktop | 100 + kappfinder/apps/Games/Board/xboard.desktop | 110 + kappfinder/apps/Games/Card/AisleRiot.desktop | 99 + kappfinder/apps/Games/Card/FreeCell.desktop | 104 + kappfinder/apps/Games/Card/Makefile.am | 5 + kappfinder/apps/Games/Card/PySol.desktop | 97 + kappfinder/apps/Games/Card/XPat2.desktop | 99 + kappfinder/apps/Games/Clanbomber.desktop | 25 + kappfinder/apps/Games/Emulators/Makefile.am | 5 + kappfinder/apps/Games/Emulators/cmail.desktop | 109 + kappfinder/apps/Games/Emulators/qmamecat.desktop | 96 + kappfinder/apps/Games/GTali.desktop | 96 + kappfinder/apps/Games/Makefile.am | 8 + kappfinder/apps/Games/Roguelikes/Makefile.am | 9 + kappfinder/apps/Games/Roguelikes/angband.desktop | 91 + kappfinder/apps/Games/Roguelikes/moria.desktop | 98 + kappfinder/apps/Games/Roguelikes/nethack.desktop | 95 + kappfinder/apps/Games/Roguelikes/rogue.desktop | 92 + kappfinder/apps/Games/Roguelikes/tome.desktop | 95 + kappfinder/apps/Games/Roguelikes/zangband.desktop | 91 + kappfinder/apps/Games/TacticStrategy/Makefile.am | 5 + .../apps/Games/TacticStrategy/freeciv.desktop | 105 + .../Games/TacticStrategy/freecivserver.desktop | 160 + .../apps/Games/TacticStrategy/xscorch.desktop | 93 + kappfinder/apps/Games/Toys/Makefile.am | 5 + kappfinder/apps/Games/Toys/xeyes.desktop | 54 + kappfinder/apps/Games/Toys/xpinguin.desktop | 90 + kappfinder/apps/Games/defendguin.desktop | 102 + kappfinder/apps/Games/penguin-command.desktop | 124 + kappfinder/apps/Games/xshipwars.desktop | 110 + kappfinder/apps/Graphics/ElectricEyes.desktop | 126 + kappfinder/apps/Graphics/GPhoto.desktop | 102 + .../apps/Graphics/GnomeColorSelector.desktop | 83 + kappfinder/apps/Graphics/GnomeIconEditor.desktop | 82 + kappfinder/apps/Graphics/Gqview.desktop | 98 + kappfinder/apps/Graphics/Makefile.am | 10 + kappfinder/apps/Graphics/Sketch.desktop | 105 + kappfinder/apps/Graphics/Xpcd.desktop | 83 + kappfinder/apps/Graphics/Xwpick.desktop | 92 + kappfinder/apps/Graphics/bitmap.desktop | 111 + kappfinder/apps/Graphics/blender.desktop | 91 + kappfinder/apps/Graphics/ghostview.desktop | 107 + kappfinder/apps/Graphics/gimp.desktop | 102 + kappfinder/apps/Graphics/gv.desktop | 97 + kappfinder/apps/Graphics/inkscape.desktop | 98 + kappfinder/apps/Graphics/sodipodi.desktop | 97 + kappfinder/apps/Graphics/tgif.desktop | 93 + kappfinder/apps/Graphics/xdvi.desktop | 102 + kappfinder/apps/Graphics/xfig.desktop | 97 + kappfinder/apps/Graphics/xpaint.desktop | 117 + kappfinder/apps/Graphics/xv.desktop | 95 + kappfinder/apps/Internet/BlueFish.desktop | 101 + kappfinder/apps/Internet/Dpsftp.desktop | 79 + kappfinder/apps/Internet/DrakSync.desktop | 81 + kappfinder/apps/Internet/Evolution.desktop | 106 + kappfinder/apps/Internet/Faces.desktop | 110 + kappfinder/apps/Internet/Fetchmailconf.desktop | 102 + kappfinder/apps/Internet/Gabber.desktop | 84 + kappfinder/apps/Internet/Galeon.desktop | 96 + kappfinder/apps/Internet/GnomeICU.desktop | 79 + kappfinder/apps/Internet/Makefile.am | 18 + kappfinder/apps/Internet/Netscapemessenger.desktop | 120 + kappfinder/apps/Internet/Nmapfe.desktop | 87 + kappfinder/apps/Internet/Pan.desktop | 95 + kappfinder/apps/Internet/Sylpheed.desktop | 96 + kappfinder/apps/Internet/Terminal/Links.desktop | 107 + kappfinder/apps/Internet/Terminal/Lynx.desktop | 92 + kappfinder/apps/Internet/Terminal/Makefile.am | 7 + .../Internet/Terminal/btdownloadcurses.desktop | 106 + kappfinder/apps/Internet/Terminal/lftp.desktop | 92 + kappfinder/apps/Internet/Terminal/mutt.desktop | 95 + kappfinder/apps/Internet/Terminal/ncftp.desktop | 95 + kappfinder/apps/Internet/Terminal/pine.desktop | 100 + kappfinder/apps/Internet/Terminal/silc.desktop | 92 + kappfinder/apps/Internet/Terminal/slrn.desktop | 92 + kappfinder/apps/Internet/Terminal/w3m.desktop | 93 + kappfinder/apps/Internet/arena.desktop | 99 + kappfinder/apps/Internet/balsa.desktop | 97 + kappfinder/apps/Internet/btdownloadgui.desktop | 105 + kappfinder/apps/Internet/coolmail.desktop | 101 + kappfinder/apps/Internet/dc_gui.desktop | 114 + kappfinder/apps/Internet/ed2k_gui.desktop | 114 + kappfinder/apps/Internet/epiphany.desktop | 98 + kappfinder/apps/Internet/ethereal.desktop | 98 + kappfinder/apps/Internet/gFTP.desktop | 79 + kappfinder/apps/Internet/gaim.desktop | 83 + kappfinder/apps/Internet/gnomemeeting.desktop | 94 + kappfinder/apps/Internet/gnometalk.desktop | 38 + kappfinder/apps/Internet/gtelnet.desktop | 104 + kappfinder/apps/Internet/ickle.desktop | 78 + kappfinder/apps/Internet/javaws.desktop | 33 + kappfinder/apps/Internet/knews.desktop | 107 + kappfinder/apps/Internet/licq.desktop | 74 + kappfinder/apps/Internet/mldonkey_gui.desktop | 102 + kappfinder/apps/Internet/mozilla-firefox.desktop | 98 + .../apps/Internet/mozilla-thunderbird.desktop | 100 + kappfinder/apps/Internet/mozilla.desktop | 98 + kappfinder/apps/Internet/netscape.desktop | 99 + kappfinder/apps/Internet/netscape6.desktop | 108 + kappfinder/apps/Internet/opera.desktop | 98 + kappfinder/apps/Internet/wireshark.desktop | 93 + kappfinder/apps/Internet/xbiff.desktop | 101 + kappfinder/apps/Internet/xchat.desktop | 82 + kappfinder/apps/Internet/xfmail.desktop | 100 + kappfinder/apps/Internet/xftp.desktop | 88 + kappfinder/apps/Makefile.am | 2 + kappfinder/apps/Multimedia/Aumix.desktop | 91 + kappfinder/apps/Multimedia/Grip.desktop | 98 + kappfinder/apps/Multimedia/MP3info.desktop | 66 + kappfinder/apps/Multimedia/Makefile.am | 30 + kappfinder/apps/Multimedia/XMovie.desktop | 100 + kappfinder/apps/Multimedia/alevt.desktop | 88 + kappfinder/apps/Multimedia/alsamixergui.desktop | 96 + kappfinder/apps/Multimedia/audacity.desktop | 89 + kappfinder/apps/Multimedia/aviplay.desktop | 98 + kappfinder/apps/Multimedia/bcast2000.desktop | 99 + kappfinder/apps/Multimedia/enjoympeg.desktop | 99 + kappfinder/apps/Multimedia/gtv.desktop | 92 + kappfinder/apps/Multimedia/jazz.desktop | 93 + kappfinder/apps/Multimedia/mplayer.desktop | 101 + kappfinder/apps/Multimedia/mtv.desktop | 94 + kappfinder/apps/Multimedia/ogle.desktop | 97 + kappfinder/apps/Multimedia/oqtplayer.desktop | 105 + kappfinder/apps/Multimedia/realplayer.desktop | 107 + kappfinder/apps/Multimedia/rezound.desktop | 84 + kappfinder/apps/Multimedia/slab.desktop | 94 + kappfinder/apps/Multimedia/sweep.desktop | 94 + kappfinder/apps/Multimedia/xawtv.desktop | 92 + kappfinder/apps/Multimedia/xcam.desktop | 93 + kappfinder/apps/Multimedia/xine.desktop | 93 + kappfinder/apps/Multimedia/xmms-enqueue.desktop | 156 + kappfinder/apps/Multimedia/xmms.desktop | 94 + kappfinder/apps/Office/Applix.desktop | 90 + kappfinder/apps/Office/Dia.desktop | 93 + kappfinder/apps/Office/Gnome-Cal.desktop | 113 + kappfinder/apps/Office/Gnome-Card.desktop | 121 + kappfinder/apps/Office/GnomeTimeTracker.desktop | 57 + kappfinder/apps/Office/Gnumeric.desktop | 92 + kappfinder/apps/Office/Guppi.desktop | 92 + kappfinder/apps/Office/Ical.desktop | 92 + kappfinder/apps/Office/Makefile.am | 11 + kappfinder/apps/Office/WordPerfect.desktop | 103 + kappfinder/apps/Office/WordPerfect2000.desktop | 103 + kappfinder/apps/Office/XAcc.desktop | 92 + kappfinder/apps/Office/XsLite.desktop | 95 + kappfinder/apps/Office/abiword.desktop | 97 + kappfinder/apps/Office/acroread.desktop | 118 + kappfinder/apps/Office/gnucash.desktop | 96 + kappfinder/apps/Office/lyx.desktop | 91 + kappfinder/apps/Office/mrproject.desktop | 100 + kappfinder/apps/Office/netscapeaddressbook.desktop | 78 + kappfinder/apps/Office/plan.desktop | 113 + kappfinder/apps/Office/pybliographic.desktop | 101 + kappfinder/apps/Office/scribus.desktop | 79 + kappfinder/apps/Office/xpdf.desktop | 100 + kappfinder/apps/System/Makefile.am | 8 + kappfinder/apps/System/Terminal/Makefile.am | 5 + kappfinder/apps/System/Terminal/aterm.desktop | 132 + kappfinder/apps/System/Terminal/procinfo.desktop | 97 + kappfinder/apps/System/Terminal/rxvt.desktop | 64 + kappfinder/apps/System/Terminal/vmstat.desktop | 92 + kappfinder/apps/System/citrix_ica.desktop | 161 + kappfinder/apps/System/editres.desktop | 97 + kappfinder/apps/System/sam.desktop | 88 + kappfinder/apps/System/wine.desktop | 97 + kappfinder/apps/System/xosview.desktop | 108 + kappfinder/apps/Utilities/Editors/Makefile.am | 7 + kappfinder/apps/Utilities/Editors/emacs.desktop | 96 + kappfinder/apps/Utilities/Editors/gedit.desktop | 100 + kappfinder/apps/Utilities/Editors/gvim.desktop | 124 + kappfinder/apps/Utilities/Editors/lemacs.desktop | 100 + kappfinder/apps/Utilities/Editors/nano.desktop | 94 + kappfinder/apps/Utilities/Editors/nedit.desktop | 99 + kappfinder/apps/Utilities/Editors/pico.desktop | 95 + kappfinder/apps/Utilities/Editors/xedit.desktop | 145 + kappfinder/apps/Utilities/Editors/xemacs.desktop | 104 + kappfinder/apps/Utilities/GKrellM.desktop | 70 + kappfinder/apps/Utilities/GnomeWho.desktop | 111 + kappfinder/apps/Utilities/Makefile.am | 7 + kappfinder/apps/Utilities/SystemInfo.desktop | 76 + kappfinder/apps/Utilities/SystemLogViewer.desktop | 83 + kappfinder/apps/Utilities/calctool.desktop | 109 + kappfinder/apps/Utilities/e-notes.desktop | 111 + kappfinder/apps/Utilities/oclock.desktop | 106 + kappfinder/apps/Utilities/xgnokii.desktop | 87 + kappfinder/apps/Utilities/xutils/Makefile.am | 7 + kappfinder/apps/Utilities/xutils/Xkill.desktop | 98 + kappfinder/apps/Utilities/xutils/Xrefresh.desktop | 106 + .../apps/Utilities/xutils/Xtraceroute.desktop | 100 + kappfinder/apps/Utilities/xutils/xcalc.desktop | 124 + .../apps/Utilities/xutils/xclipboard.desktop | 146 + kappfinder/apps/Utilities/xutils/xclock.desktop | 152 + kappfinder/apps/Utilities/xutils/xconsole.desktop | 142 + kappfinder/apps/Utilities/xutils/xload.desktop | 130 + kappfinder/apps/Utilities/xutils/xmag.desktop | 144 + kappfinder/apps/Utilities/xutils/xterm.desktop | 150 + kappfinder/common.cpp | 158 + kappfinder/common.h | 43 + kappfinder/configure.in.in | 4 + kappfinder/hi128-app-kappfinder.png | Bin 0 -> 13706 bytes kappfinder/hi16-app-kappfinder.png | Bin 0 -> 891 bytes kappfinder/hi22-app-kappfinder.png | Bin 0 -> 3933 bytes kappfinder/hi32-app-kappfinder.png | Bin 0 -> 4523 bytes kappfinder/hi48-app-kappfinder.png | Bin 0 -> 5963 bytes kappfinder/hi64-app-kappfinder.png | Bin 0 -> 7340 bytes kappfinder/kappfinder.desktop | 81 + kappfinder/main.cpp | 52 + kappfinder/main_install.cpp | 64 + kappfinder/toplevel.cpp | 292 + kappfinder/toplevel.h | 70 + kappfinder/uninstall.desktop | 2 + kate/AUTHORS | 33 + kate/COPYING.LIB | 481 + kate/ChangeLog | 286 + kate/DESIGN | 13 + kate/Mainpage.dox | 9 + kate/Makefile.am | 12 + kate/NEWS | 23 + kate/README | 24 + kate/TODO | 1 + kate/app/Makefile.am | 29 + kate/app/kateapp.cpp | 399 + kate/app/kateapp.h | 243 + kate/app/kateappIface.cpp | 104 + kate/app/kateappIface.h | 94 + kate/app/kateconfigdialog.cpp | 441 + kate/app/kateconfigdialog.h | 82 + kate/app/kateconfigplugindialogpage.cpp | 121 + kate/app/kateconfigplugindialogpage.h | 69 + kate/app/kateconsole.cpp | 143 + kate/app/kateconsole.h | 116 + kate/app/katedocmanager.cpp | 611 + kate/app/katedocmanager.h | 156 + kate/app/katedocmanageriface.cpp | 131 + kate/app/katedocmanageriface.h | 62 + kate/app/kateexternaltools.cpp | 873 + kate/app/kateexternaltools.h | 229 + kate/app/katefilelist.cpp | 652 + kate/app/katefilelist.h | 191 + kate/app/katefileselector.cpp | 722 + kate/app/katefileselector.h | 172 + kate/app/kategrepdialog.cpp | 544 + kate/app/kategrepdialog.h | 97 + kate/app/katemailfilesdialog.cpp | 112 + kate/app/katemailfilesdialog.h | 59 + kate/app/katemain.cpp | 256 + kate/app/katemain.h | 70 + kate/app/katemainwindow.cpp | 854 + kate/app/katemainwindow.h | 216 + kate/app/katemainwindowiface.cpp | 27 + kate/app/katemainwindowiface.h | 41 + kate/app/katemdi.cpp | 969 + kate/app/katemdi.h | 442 + kate/app/katemwmodonhddialog.cpp | 281 + kate/app/katemwmodonhddialog.h | 61 + kate/app/katepluginmanager.cpp | 221 + kate/app/katepluginmanager.h | 90 + kate/app/katesavemodifieddialog.cpp | 226 + kate/app/katesavemodifieddialog.h | 48 + kate/app/katesession.cpp | 920 + kate/app/katesession.h | 418 + kate/app/katetabwidget.cpp | 161 + kate/app/katetabwidget.h | 69 + kate/app/kateviewmanager.cpp | 514 + kate/app/kateviewmanager.h | 154 + kate/app/kateviewspace.cpp | 422 + kate/app/kateviewspace.h | 121 + kate/app/kateviewspacecontainer.cpp | 758 + kate/app/kateviewspacecontainer.h | 161 + kate/app/kbookmarkhandler.cpp | 98 + kate/app/kbookmarkhandler.h | 72 + kate/app/kwritemain.cpp | 712 + kate/app/kwritemain.h | 138 + kate/data/Makefile.am | 18 + kate/data/externaltools | 77 + kate/data/kate-2.4.upd | 7 + kate/data/kate.desktop | 95 + kate/data/kateplugin.desktop | 89 + kate/data/katerc | 2 + kate/data/kateui.rc | 168 + kate/data/kwrite.desktop | 111 + kate/data/kwriteui.rc | 95 + kate/data/tips | 122 + kate/interfaces/Makefile.am | 14 + kate/interfaces/application.cpp | 97 + kate/interfaces/application.h | 79 + kate/interfaces/documentmanager.cpp | 120 + kate/interfaces/documentmanager.h | 111 + kate/interfaces/mainwindow.cpp | 82 + kate/interfaces/mainwindow.h | 65 + kate/interfaces/plugin.cpp | 106 + kate/interfaces/plugin.h | 87 + kate/interfaces/pluginconfiginterface.cpp | 63 + kate/interfaces/pluginconfiginterface.h | 63 + kate/interfaces/pluginconfiginterfaceextension.cpp | 68 + kate/interfaces/pluginconfiginterfaceextension.h | 104 + kate/interfaces/pluginmanager.cpp | 78 + kate/interfaces/pluginmanager.h | 70 + kate/interfaces/toolviewmanager.cpp | 85 + kate/interfaces/toolviewmanager.h | 96 + kate/interfaces/viewmanager.cpp | 73 + kate/interfaces/viewmanager.h | 89 + kate/pics/Makefile.am | 6 + kate/pics/actions/Makefile.am | 2 + kate/pics/actions/cr16-action-curfiledir.png | Bin 0 -> 656 bytes kate/pics/actions/cr16-action-highlighting.png | Bin 0 -> 845 bytes kate/pics/actions/cr16-action-modified.png | Bin 0 -> 838 bytes kate/pics/actions/cr16-action-modmod.png | Bin 0 -> 784 bytes kate/pics/actions/cr16-action-modonhd.png | Bin 0 -> 748 bytes kate/pics/actions/cr16-action-null.png | Bin 0 -> 85 bytes kate/pics/actions/cr32-action-highlighting.png | Bin 0 -> 1618 bytes kate/pics/actions/lo16-action-curfiledir.png | Bin 0 -> 214 bytes kate/pics/actions/lo16-action-indent.png | Bin 0 -> 381 bytes kate/pics/actions/lo16-action-modified.png | Bin 0 -> 313 bytes kate/pics/actions/lo16-action-modmod.png | Bin 0 -> 313 bytes kate/pics/actions/lo16-action-modonhd.png | Bin 0 -> 324 bytes kate/pics/actions/lo16-action-null.png | Bin 0 -> 85 bytes kate/pics/actions/lo16-action-unindent.png | Bin 0 -> 381 bytes kate/pics/actions/lo22-action-indent.png | Bin 0 -> 510 bytes kate/pics/actions/lo22-action-unindent.png | Bin 0 -> 511 bytes kate/pics/hi128-app-kate.png | Bin 0 -> 20365 bytes kate/pics/hi128-app-kwrite.png | Bin 0 -> 20365 bytes kate/pics/hi16-app-kate.png | Bin 0 -> 976 bytes kate/pics/hi16-app-kwrite.png | Bin 0 -> 976 bytes kate/pics/hi22-app-kate.png | Bin 0 -> 1661 bytes kate/pics/hi22-app-kwrite.png | Bin 0 -> 1661 bytes kate/pics/hi32-app-kate.png | Bin 0 -> 2693 bytes kate/pics/hi32-app-kwrite.png | Bin 0 -> 2693 bytes kate/pics/hi48-app-kate.png | Bin 0 -> 5434 bytes kate/pics/hi48-app-kwrite.png | Bin 0 -> 5434 bytes kate/pics/hi64-app-kate.png | Bin 0 -> 8202 bytes kate/pics/hi64-app-kwrite.png | Bin 0 -> 8202 bytes kate/pics/hisc-app-kate2.svgz | Bin 0 -> 10519 bytes kate/pics/hisc-app-kwrite2.svgz | Bin 0 -> 10519 bytes kate/pics/sessionchooser.png | Bin 0 -> 21732 bytes kate/pics/sessionchooser.xcf | Bin 0 -> 56795 bytes kate/utils/Makefile.am | 16 + kate/utils/README | 29 + kate/utils/dockviewbase.cpp | 102 + kate/utils/dockviewbase.h | 102 + kate/utils/listboxview.cpp | 57 + kate/utils/listboxview.h | 44 + kate/utils/messageview.cpp | 46 + kate/utils/messageview.h | 72 + kcheckpass/Makefile.am | 26 + kcheckpass/README | 51 + kcheckpass/checkpass_aix.c | 95 + kcheckpass/checkpass_etcpasswd.c | 60 + kcheckpass/checkpass_osfc2passwd.c | 203 + kcheckpass/checkpass_pam.c | 200 + kcheckpass/checkpass_shadow.c | 86 + kcheckpass/kcheckpass.c | 448 + kcheckpass/kcheckpass.h | 142 + kcminit/Makefile.am | 33 + kcminit/main.cpp | 251 + kcminit/main.h | 45 + kcontrol/Makefile.am | 39 + kcontrol/TODO | 168 + kcontrol/access/Makefile.am | 30 + kcontrol/access/configure.in.in | 7 + kcontrol/access/eventsrc | 1072 + kcontrol/access/kaccess.cpp | 896 + kcontrol/access/kaccess.desktop | 78 + kcontrol/access/kaccess.h | 114 + kcontrol/access/kcmaccess.cpp | 805 + kcontrol/access/kcmaccess.desktop | 240 + kcontrol/access/kcmaccess.h | 111 + kcontrol/access/main.cpp | 49 + kcontrol/accessibility/Makefile.am | 15 + kcontrol/accessibility/accessibility.cpp | 141 + kcontrol/accessibility/accessibility.desktop | 239 + kcontrol/accessibility/accessibility.h | 71 + .../accessibility/accessibilityconfigwidget.ui | 1630 + .../accessibility/accessibilityconfigwidget.ui.h | 22 + kcontrol/accessibility/configure.in.in | 3 + kcontrol/accessibility/kcm_accessibility.kcfg | 67 + kcontrol/accessibility/settings.kcfgc | 5 + kcontrol/arts/Makefile.am | 15 + kcontrol/arts/arts.cpp | 730 + kcontrol/arts/arts.desktop | 240 + kcontrol/arts/arts.h | 135 + kcontrol/arts/generaltab.ui | 330 + kcontrol/arts/hardwaretab.ui | 358 + kcontrol/arts/krichtextlabel.cpp | 115 + kcontrol/arts/krichtextlabel.h | 65 + kcontrol/background/Makefile.am | 27 + kcontrol/background/background.desktop | 240 + kcontrol/background/bgadvanced.cpp | 507 + kcontrol/background/bgadvanced.h | 121 + kcontrol/background/bgadvanced_ui.ui | 462 + kcontrol/background/bgdefaults.h | 38 + kcontrol/background/bgdialog.cpp | 1279 + kcontrol/background/bgdialog.h | 109 + kcontrol/background/bgdialog_ui.ui | 722 + kcontrol/background/bghash.h | 22 + kcontrol/background/bgmonitor.cpp | 220 + kcontrol/background/bgmonitor.h | 111 + kcontrol/background/bgrender.cpp | 1359 + kcontrol/background/bgrender.h | 182 + kcontrol/background/bgsettings.cpp | 1267 + kcontrol/background/bgsettings.h | 372 + kcontrol/background/bgwallpaper.cpp | 238 + kcontrol/background/bgwallpaper.h | 66 + kcontrol/background/bgwallpaper_ui.ui | 167 + kcontrol/background/main.cpp | 123 + kcontrol/background/main.h | 40 + kcontrol/background/pics/Makefile.am | 5 + kcontrol/background/pics/monitor.png | Bin 0 -> 7542 bytes kcontrol/bell/Makefile.am | 15 + kcontrol/bell/bell.cpp | 256 + kcontrol/bell/bell.desktop | 251 + kcontrol/bell/bell.h | 54 + kcontrol/clock/Makefile.am | 15 + kcontrol/clock/clock.desktop | 250 + kcontrol/clock/dtime.cpp | 449 + kcontrol/clock/dtime.h | 125 + kcontrol/clock/main.cpp | 95 + kcontrol/clock/main.h | 47 + kcontrol/clock/tzone.cpp | 200 + kcontrol/clock/tzone.h | 55 + kcontrol/clock/xpm/kcmclock.xpm | 47 + kcontrol/clock/xpm/world.xpm | 190 + kcontrol/colors/Makefile.am | 15 + kcontrol/colors/colors.desktop | 252 + kcontrol/colors/colorscm.cpp | 980 + kcontrol/colors/colorscm.h | 90 + kcontrol/colors/stdclient_bitmaps.h | 128 + kcontrol/colors/widgetcanvas.cpp | 596 + kcontrol/colors/widgetcanvas.h | 121 + kcontrol/componentchooser/EXAMPLE.desktop | 159 + kcontrol/componentchooser/Makefile.am | 15 + kcontrol/componentchooser/browserconfig_ui.ui | 174 + kcontrol/componentchooser/componentchooser.cpp | 530 + kcontrol/componentchooser/componentchooser.desktop | 237 + kcontrol/componentchooser/componentchooser.h | 154 + kcontrol/componentchooser/componentchooser_ui.ui | 133 + kcontrol/componentchooser/componentconfig_ui.ui | 63 + .../componentchooser/componentservices/Makefile.am | 3 + .../componentservices/kcm_browser.desktop | 149 + .../componentservices/kcm_kemail.desktop | 158 + .../componentservices/kcm_terminal.desktop | 157 + kcontrol/componentchooser/emailclientconfig_ui.ui | 236 + kcontrol/componentchooser/kcm_componentchooser.cpp | 64 + kcontrol/componentchooser/kcm_componentchooser.h | 39 + .../componentchooser/terminalemulatorconfig_ui.ui | 194 + kcontrol/crypto/Makefile.am | 19 + kcontrol/crypto/README | 2 + kcontrol/crypto/certexport.cpp | 148 + kcontrol/crypto/certexport.h | 55 + kcontrol/crypto/certgen.ui | 513 + kcontrol/crypto/configure.in.in | 1 + kcontrol/crypto/crypto.cpp | 2458 + kcontrol/crypto/crypto.desktop | 229 + kcontrol/crypto/crypto.h | 362 + kcontrol/crypto/kdatetimedlg.cpp | 118 + kcontrol/crypto/kdatetimedlg.h | 60 + kcontrol/css/Makefile.am | 16 + kcontrol/css/cssconfig.ui | 242 + kcontrol/css/csscustom.ui | 554 + kcontrol/css/kcmcss.cpp | 385 + kcontrol/css/kcmcss.desktop | 233 + kcontrol/css/kcmcss.h | 60 + kcontrol/css/preview.ui | 95 + kcontrol/css/template.cpp | 45 + kcontrol/css/template.css | 77 + kcontrol/css/template.h | 21 + kcontrol/display/Makefile.am | 16 + kcontrol/display/display.cpp | 110 + kcontrol/display/display.desktop | 154 + kcontrol/display/display.h | 48 + kcontrol/dnssd/Makefile.am | 12 + kcontrol/dnssd/configdialog.ui | 304 + kcontrol/dnssd/kcm_kdnssd.desktop | 154 + kcontrol/dnssd/kcmdnssd.cpp | 142 + kcontrol/dnssd/kcmdnssd.h | 49 + kcontrol/ebrowsing/Makefile.am | 21 + kcontrol/ebrowsing/ebrowsing.desktop | 237 + kcontrol/ebrowsing/filteropts.cpp | 62 + kcontrol/ebrowsing/filteropts.h | 49 + kcontrol/ebrowsing/main.cpp | 131 + kcontrol/ebrowsing/main.h | 51 + kcontrol/ebrowsing/plugins/Makefile.am | 3 + kcontrol/ebrowsing/plugins/ikws/Makefile.am | 31 + kcontrol/ebrowsing/plugins/ikws/ikwsopts.cpp | 492 + kcontrol/ebrowsing/plugins/ikws/ikwsopts.h | 73 + kcontrol/ebrowsing/plugins/ikws/ikwsopts_ui.ui | 258 + kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.cpp | 81 + .../ebrowsing/plugins/ikws/kuriikwsfilter.desktop | 70 + kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.h | 48 + kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.upd | 7 + .../ebrowsing/plugins/ikws/kuriikwsfiltereng.cpp | 540 + .../ebrowsing/plugins/ikws/kuriikwsfiltereng.h | 77 + .../ebrowsing/plugins/ikws/kurisearchfilter.cpp | 90 + .../plugins/ikws/kurisearchfilter.desktop | 68 + kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.h | 50 + kcontrol/ebrowsing/plugins/ikws/searchprovider.cpp | 78 + .../ebrowsing/plugins/ikws/searchprovider.desktop | 91 + kcontrol/ebrowsing/plugins/ikws/searchprovider.h | 55 + .../ebrowsing/plugins/ikws/searchproviderdlg.cpp | 101 + .../ebrowsing/plugins/ikws/searchproviderdlg.h | 46 + .../ebrowsing/plugins/ikws/searchproviderdlg_ui.ui | 137 + .../plugins/ikws/searchproviders/Makefile.am | 91 + .../plugins/ikws/searchproviders/acronym.desktop | 83 + .../plugins/ikws/searchproviders/alexa.desktop | 14 + .../plugins/ikws/searchproviders/alexa_url.desktop | 43 + .../plugins/ikws/searchproviders/alltheweb.desktop | 45 + .../plugins/ikws/searchproviders/altavista.desktop | 23 + .../plugins/ikws/searchproviders/amg.desktop | 49 + .../plugins/ikws/searchproviders/appsy.desktop | 84 + .../ikws/searchproviders/austronaut.desktop | 18 + .../plugins/ikws/searchproviders/backports.desktop | 66 + .../plugins/ikws/searchproviders/bugft.desktop | 81 + .../plugins/ikws/searchproviders/bugno.desktop | 82 + .../plugins/ikws/searchproviders/call.desktop | 70 + .../plugins/ikws/searchproviders/cia.desktop | 45 + .../plugins/ikws/searchproviders/citeseer.desktop | 72 + .../plugins/ikws/searchproviders/cpan.desktop | 53 + .../plugins/ikws/searchproviders/ctan.desktop | 54 + .../plugins/ikws/searchproviders/ctan_cat.desktop | 77 + .../plugins/ikws/searchproviders/dbug.desktop | 67 + .../plugins/ikws/searchproviders/de2en.desktop | 69 + .../plugins/ikws/searchproviders/de2fr.desktop | 72 + .../plugins/ikws/searchproviders/deb.desktop | 72 + .../plugins/ikws/searchproviders/dmoz.desktop | 51 + .../plugins/ikws/searchproviders/docbook.desktop | 72 + .../plugins/ikws/searchproviders/doi.desktop | 63 + .../plugins/ikws/searchproviders/en2de.desktop | 73 + .../plugins/ikws/searchproviders/en2es.desktop | 76 + .../plugins/ikws/searchproviders/en2fr.desktop | 76 + .../plugins/ikws/searchproviders/en2it.desktop | 76 + .../plugins/ikws/searchproviders/es2en.desktop | 76 + .../plugins/ikws/searchproviders/excite.desktop | 22 + .../plugins/ikws/searchproviders/feedster.desktop | 18 + .../plugins/ikws/searchproviders/foldoc.desktop | 72 + .../plugins/ikws/searchproviders/fr2de.desktop | 72 + .../plugins/ikws/searchproviders/fr2en.desktop | 76 + .../plugins/ikws/searchproviders/freedb.desktop | 15 + .../plugins/ikws/searchproviders/freshmeat.desktop | 19 + .../plugins/ikws/searchproviders/froogle.desktop | 17 + .../plugins/ikws/searchproviders/fsd.desktop | 66 + .../plugins/ikws/searchproviders/google.desktop | 31 + .../ikws/searchproviders/google_advanced.desktop | 95 + .../ikws/searchproviders/google_groups.desktop | 89 + .../ikws/searchproviders/google_images.desktop | 94 + .../ikws/searchproviders/google_lucky.desktop | 94 + .../ikws/searchproviders/google_movie.desktop | 76 + .../ikws/searchproviders/google_news.desktop | 85 + .../plugins/ikws/searchproviders/gracenote.desktop | 17 + .../plugins/ikws/searchproviders/grec.desktop | 65 + .../plugins/ikws/searchproviders/hotbot.desktop | 18 + .../ikws/searchproviders/hyperdictionary.desktop | 12 + .../hyperdictionary_thesaurus.desktop | 65 + .../plugins/ikws/searchproviders/imdb.desktop | 74 + .../plugins/ikws/searchproviders/it2en.desktop | 75 + .../plugins/ikws/searchproviders/jeeves.desktop | 30 + .../plugins/ikws/searchproviders/katatudo.desktop | 15 + .../plugins/ikws/searchproviders/kde.desktop | 80 + .../ikws/searchproviders/kde_websvn.desktop | 32 + .../plugins/ikws/searchproviders/leo.desktop | 49 + .../plugins/ikws/searchproviders/lycos.desktop | 17 + .../plugins/ikws/searchproviders/mamma.desktop | 76 + .../ikws/searchproviders/metacrawler.desktop | 20 + .../plugins/ikws/searchproviders/msdn.desktop | 74 + .../plugins/ikws/searchproviders/netcraft.desktop | 17 + .../ikws/searchproviders/nl-telephone.desktop | 71 + .../ikws/searchproviders/nl-teletekst.desktop | 74 + .../plugins/ikws/searchproviders/pgpkeys.desktop | 83 + .../plugins/ikws/searchproviders/php.desktop | 81 + .../plugins/ikws/searchproviders/python.desktop | 84 + .../plugins/ikws/searchproviders/qt.desktop | 78 + .../plugins/ikws/searchproviders/qt3.desktop | 71 + .../plugins/ikws/searchproviders/rae.desktop | 77 + .../plugins/ikws/searchproviders/rfc.desktop | 57 + .../plugins/ikws/searchproviders/rpmfind.desktop | 44 + .../ruby_application_archive.desktop | 76 + .../plugins/ikws/searchproviders/seek.desktop | 11 + .../ikws/searchproviders/sourceforge.desktop | 19 + .../ikws/searchproviders/technorati.desktop | 14 + .../ikws/searchproviders/technoratitags.desktop | 55 + .../plugins/ikws/searchproviders/thesaurus.desktop | 63 + .../plugins/ikws/searchproviders/tvtome.desktop | 24 + .../plugins/ikws/searchproviders/uspto.desktop | 74 + .../plugins/ikws/searchproviders/vivisimo.desktop | 14 + .../plugins/ikws/searchproviders/voila.desktop | 17 + .../plugins/ikws/searchproviders/webster.desktop | 73 + .../plugins/ikws/searchproviders/whatis.desktop | 71 + .../plugins/ikws/searchproviders/wikipedia.desktop | 94 + .../ikws/searchproviders/wiktionary.desktop | 85 + .../plugins/ikws/searchproviders/wordref.desktop | 78 + kcontrol/ebrowsing/plugins/localdomain/Makefile.am | 20 + .../localdomain/klocaldomainurifilterhelper.c | 60 + .../plugins/localdomain/localdomainurifilter.cpp | 117 + .../localdomain/localdomainurifilter.desktop | 48 + .../plugins/localdomain/localdomainurifilter.h | 65 + kcontrol/ebrowsing/plugins/shorturi/Makefile.am | 18 + .../ebrowsing/plugins/shorturi/kshorturifilter.cpp | 554 + .../plugins/shorturi/kshorturifilter.desktop | 54 + .../ebrowsing/plugins/shorturi/kshorturifilter.h | 111 + .../ebrowsing/plugins/shorturi/kshorturifilterrc | 7 + kcontrol/energy/Makefile.am | 18 + kcontrol/energy/configure.in.in | 1 + kcontrol/energy/energy.cpp | 442 + kcontrol/energy/energy.desktop | 242 + kcontrol/energy/energy.h | 68 + kcontrol/energy/pics/Makefile.am | 5 + kcontrol/energy/pics/energybig.png | Bin 0 -> 24161 bytes kcontrol/energy/pics/lo-energy.png | Bin 0 -> 1977 bytes kcontrol/filetypes/Makefile.am | 29 + kcontrol/filetypes/control.cpp | 11 + kcontrol/filetypes/filegroupdetails.cpp | 65 + kcontrol/filetypes/filegroupdetails.h | 50 + kcontrol/filetypes/filetypedetails.cpp | 299 + kcontrol/filetypes/filetypedetails.h | 64 + kcontrol/filetypes/filetypes.desktop | 235 + kcontrol/filetypes/filetypesview.cpp | 440 + kcontrol/filetypes/filetypesview.h | 73 + kcontrol/filetypes/keditfiletype.cpp | 182 + kcontrol/filetypes/keditfiletype.h | 54 + kcontrol/filetypes/kservicelistwidget.cpp | 444 + kcontrol/filetypes/kservicelistwidget.h | 77 + kcontrol/filetypes/kserviceselectdlg.cpp | 66 + kcontrol/filetypes/kserviceselectdlg.h | 47 + kcontrol/filetypes/newtypedlg.cpp | 57 + kcontrol/filetypes/newtypedlg.h | 28 + kcontrol/filetypes/typeslistitem.cpp | 579 + kcontrol/filetypes/typeslistitem.h | 118 + kcontrol/fonts/Makefile.am | 21 + kcontrol/fonts/configure.in.in | 57 + kcontrol/fonts/fonts.cpp | 802 + kcontrol/fonts/fonts.desktop | 239 + kcontrol/fonts/fonts.h | 124 + kcontrol/fonts/kxftconfig.cpp | 1544 + kcontrol/fonts/kxftconfig.h | 277 + kcontrol/icons/Makefile.am | 25 + kcontrol/icons/icons.cpp | 666 + kcontrol/icons/icons.desktop | 249 + kcontrol/icons/icons.h | 152 + kcontrol/icons/iconthemes.cpp | 452 + kcontrol/icons/iconthemes.h | 72 + kcontrol/icons/main.cpp | 105 + kcontrol/icons/main.h | 55 + kcontrol/icons/testicons.cpp | 13 + kcontrol/icons/uninstall.desktop | 2 + kcontrol/info/AUTHORS | 32 + kcontrol/info/ChangeLog | 27 + kcontrol/info/Makefile.am | 22 + kcontrol/info/cdinfo.desktop | 166 + kcontrol/info/configure.in.bot | 13 + kcontrol/info/configure.in.in | 22 + kcontrol/info/devices.desktop | 246 + kcontrol/info/dma.desktop | 248 + kcontrol/info/info.cpp | 495 + kcontrol/info/info.h | 53 + kcontrol/info/info_aix.cpp | 486 + kcontrol/info/info_fbsd.cpp | 457 + kcontrol/info/info_generic.cpp | 88 + kcontrol/info/info_hpux.cpp | 785 + kcontrol/info/info_linux.cpp | 595 + kcontrol/info/info_netbsd.cpp | 353 + kcontrol/info/info_openbsd.cpp | 313 + kcontrol/info/info_osx.cpp | 176 + kcontrol/info/info_sgi.cpp | 82 + kcontrol/info/info_solaris.cpp | 705 + kcontrol/info/info_svr4.cpp | 132 + kcontrol/info/interrupts.desktop | 240 + kcontrol/info/ioports.desktop | 242 + kcontrol/info/main.cpp | 151 + kcontrol/info/memory.cpp | 480 + kcontrol/info/memory.desktop | 248 + kcontrol/info/memory.h | 67 + kcontrol/info/memory_fbsd.cpp | 89 + kcontrol/info/memory_hpux.cpp | 92 + kcontrol/info/memory_linux.cpp | 39 + kcontrol/info/memory_netbsd.cpp | 114 + kcontrol/info/memory_osx.cpp | 93 + kcontrol/info/memory_sgi.cpp | 75 + kcontrol/info/memory_solaris.cpp | 94 + kcontrol/info/memory_tru64.cpp | 83 + kcontrol/info/opengl.cpp | 673 + kcontrol/info/opengl.desktop | 147 + kcontrol/info/partitions.desktop | 246 + kcontrol/info/pci.desktop | 180 + kcontrol/info/processor.desktop | 249 + kcontrol/info/scsi.desktop | 177 + kcontrol/info/sound.desktop | 243 + kcontrol/info/xserver.desktop | 227 + kcontrol/input/AUTHORS | 7 + kcontrol/input/ChangeLog | 11 + kcontrol/input/Makefile.am | 47 + kcontrol/input/configure.in.bot | 5 + kcontrol/input/configure.in.in | 26 + kcontrol/input/consoleUserPerms | 42 + kcontrol/input/core/Makefile.am | 7 + kcontrol/input/core/bitmaps.h | 146 + kcontrol/input/core/themepage.cpp | 212 + kcontrol/input/core/themepage.h | 55 + kcontrol/input/cursor_large.bdf | 4447 + kcontrol/input/cursor_large_black.pcf.gz | Bin 0 -> 3636 bytes kcontrol/input/cursor_large_white.pcf.gz | Bin 0 -> 3784 bytes kcontrol/input/cursor_small_white.pcf.gz | Bin 0 -> 3770 bytes kcontrol/input/kapplymousetheme.cpp | 92 + kcontrol/input/kmousedlg.ui | 378 + kcontrol/input/logitechmouse.cpp | 417 + kcontrol/input/logitechmouse.h | 102 + kcontrol/input/logitechmouse.usermap | 35 + kcontrol/input/logitechmouse_base.ui | 153 + kcontrol/input/main.cpp | 96 + kcontrol/input/mouse.cpp | 838 + kcontrol/input/mouse.desktop | 242 + kcontrol/input/mouse.h | 156 + kcontrol/input/mouse_cursor_theme.upd | 5 + kcontrol/input/pics/Makefile.am | 3 + kcontrol/input/pics/mouse_lh.png | Bin 0 -> 12981 bytes kcontrol/input/pics/mouse_lh.svgz | Bin 0 -> 4814 bytes kcontrol/input/pics/mouse_rh.png | Bin 0 -> 13053 bytes kcontrol/input/pics/mouse_rh.svgz | Bin 0 -> 4709 bytes kcontrol/input/xcursor/Makefile.am | 7 + kcontrol/input/xcursor/previewwidget.cpp | 353 + kcontrol/input/xcursor/previewwidget.h | 47 + kcontrol/input/xcursor/themepage.cpp | 637 + kcontrol/input/xcursor/themepage.h | 76 + kcontrol/ioslaveinfo/Makefile.am | 21 + kcontrol/ioslaveinfo/ioslaveinfo.desktop | 237 + kcontrol/ioslaveinfo/kcmioslaveinfo.cpp | 148 + kcontrol/ioslaveinfo/kcmioslaveinfo.h | 61 + kcontrol/ioslaveinfo/uninstall.desktop | 2 + kcontrol/joystick/Makefile.am | 17 + kcontrol/joystick/caldialog.cpp | 193 + kcontrol/joystick/caldialog.h | 54 + kcontrol/joystick/configure.in.in | 7 + kcontrol/joystick/joydevice.cpp | 397 + kcontrol/joystick/joydevice.h | 110 + kcontrol/joystick/joystick.cpp | 123 + kcontrol/joystick/joystick.desktop | 177 + kcontrol/joystick/joystick.h | 42 + kcontrol/joystick/joywidget.cpp | 379 + kcontrol/joystick/joywidget.h | 79 + kcontrol/joystick/poswidget.cpp | 138 + kcontrol/joystick/poswidget.h | 55 + kcontrol/kcontrol/KControl.desktop | 93 + kcontrol/kcontrol/KControl_NoDisplay.desktop | 93 + kcontrol/kcontrol/Makefile.am | 53 + kcontrol/kcontrol/about/Makefile.am | 6 + kcontrol/kcontrol/about/kcontrol.css | 54 + kcontrol/kcontrol/about/main.html | 64 + kcontrol/kcontrol/about/top-right-kcontrol.png | Bin 0 -> 13794 bytes kcontrol/kcontrol/aboutwidget.cpp | 204 + kcontrol/kcontrol/aboutwidget.h | 68 + kcontrol/kcontrol/cr128-app-kcontrol.png | Bin 0 -> 12149 bytes kcontrol/kcontrol/cr16-app-kcontrol.png | Bin 0 -> 887 bytes kcontrol/kcontrol/cr32-app-kcontrol.png | Bin 0 -> 2375 bytes kcontrol/kcontrol/cr48-app-kcontrol.png | Bin 0 -> 4134 bytes kcontrol/kcontrol/cr64-app-kcontrol.png | Bin 0 -> 5941 bytes kcontrol/kcontrol/dockcontainer.cpp | 257 + kcontrol/kcontrol/dockcontainer.h | 86 + kcontrol/kcontrol/global.cpp | 116 + kcontrol/kcontrol/global.h | 76 + kcontrol/kcontrol/helpwidget.cpp | 96 + kcontrol/kcontrol/helpwidget.h | 43 + kcontrol/kcontrol/indexwidget.cpp | 142 + kcontrol/kcontrol/indexwidget.h | 64 + kcontrol/kcontrol/kcontrolui.rc | 20 + kcontrol/kcontrol/kcrootonly.cpp | 38 + kcontrol/kcontrol/kcrootonly.h | 12 + kcontrol/kcontrol/kinfocenter.desktop | 109 + kcontrol/kcontrol/kinfocenterui.rc | 20 + kcontrol/kcontrol/main.cpp | 153 + kcontrol/kcontrol/main.h | 42 + kcontrol/kcontrol/moduleIface.cpp | 58 + kcontrol/kcontrol/moduleIface.h | 54 + kcontrol/kcontrol/moduleiconview.cpp | 170 + kcontrol/kcontrol/moduleiconview.h | 86 + kcontrol/kcontrol/modulemenu.cpp | 105 + kcontrol/kcontrol/modulemenu.h | 65 + kcontrol/kcontrol/modules.cpp | 345 + kcontrol/kcontrol/modules.h | 136 + kcontrol/kcontrol/moduletreeview.cpp | 377 + kcontrol/kcontrol/moduletreeview.h | 95 + kcontrol/kcontrol/proxywidget.cpp | 323 + kcontrol/kcontrol/proxywidget.h | 82 + kcontrol/kcontrol/searchwidget.cpp | 205 + kcontrol/kcontrol/searchwidget.h | 78 + kcontrol/kcontrol/toplevel.cpp | 526 + kcontrol/kcontrol/toplevel.h | 106 + kcontrol/kcontrol/version.h | 2 + kcontrol/kded/Makefile.am | 15 + kcontrol/kded/kcmkded.cpp | 363 + kcontrol/kded/kcmkded.desktop | 236 + kcontrol/kded/kcmkded.h | 78 + kcontrol/kdm/AUTHORS | 6 + kcontrol/kdm/ChangeLog | 16 + kcontrol/kdm/Makefile.am | 19 + kcontrol/kdm/background.cpp | 111 + kcontrol/kdm/background.h | 50 + kcontrol/kdm/kbackedcombobox.cpp | 40 + kcontrol/kdm/kbackedcombobox.h | 38 + kcontrol/kdm/kdm-appear.cpp | 516 + kcontrol/kdm/kdm-appear.h | 95 + kcontrol/kdm/kdm-conv.cpp | 362 + kcontrol/kdm/kdm-conv.h | 84 + kcontrol/kdm/kdm-font.cpp | 134 + kcontrol/kdm/kdm-font.h | 57 + kcontrol/kdm/kdm-shut.cpp | 227 + kcontrol/kdm/kdm-shut.h | 64 + kcontrol/kdm/kdm-users.cpp | 500 + kcontrol/kdm/kdm-users.h | 106 + kcontrol/kdm/kdm.desktop | 243 + kcontrol/kdm/main.cpp | 336 + kcontrol/kdm/main.h | 83 + kcontrol/keys/ChangeLog | 26 + kcontrol/keys/Makefile.am | 22 + kcontrol/keys/README | 7 + kcontrol/keys/commandShortcuts.cpp | 243 + kcontrol/keys/commandShortcuts.h | 75 + kcontrol/keys/convertShortcuts.pl | 58 + kcontrol/keys/kaccel.upd | 3 + kcontrol/keys/kaccelaction.h | 205 + kcontrol/keys/kde3.kksrc | 192 + kcontrol/keys/kde4.kksrc | 192 + kcontrol/keys/keyconfig.cpp | 545 + kcontrol/keys/keyconfig.h | 90 + kcontrol/keys/keys.desktop | 239 + kcontrol/keys/khotkeys.cpp | 121 + kcontrol/keys/khotkeys.h | 41 + kcontrol/keys/mac4.kksrc | 197 + kcontrol/keys/main.cpp | 203 + kcontrol/keys/main.h | 57 + kcontrol/keys/modifiers.cpp | 354 + kcontrol/keys/modifiers.h | 49 + kcontrol/keys/shortcuts.cpp | 435 + kcontrol/keys/shortcuts.h | 77 + kcontrol/keys/treeview.cpp | 282 + kcontrol/keys/treeview.h | 84 + kcontrol/keys/unix3.kksrc | 198 + kcontrol/keys/win3.kksrc | 198 + kcontrol/keys/win4.kksrc | 198 + kcontrol/keys/wm3.kksrc | 188 + kcontrol/kfontinst/AUTHORS | 1 + kcontrol/kfontinst/ChangeLog | 490 + kcontrol/kfontinst/Makefile.am | 14 + kcontrol/kfontinst/TODO | 1 + kcontrol/kfontinst/configure.in.bot | 12 + kcontrol/kfontinst/configure.in.in | 155 + kcontrol/kfontinst/installfont.desktop | 79 + kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp | 647 + kcontrol/kfontinst/kcmfontinst/KCmFontInst.h | 116 + .../kfontinst/kcmfontinst/KFileFontIconView.cpp | 88 + kcontrol/kfontinst/kcmfontinst/KFileFontIconView.h | 55 + kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp | 645 + kcontrol/kfontinst/kcmfontinst/KFileFontView.h | 219 + kcontrol/kfontinst/kcmfontinst/Makefile.am | 31 + kcontrol/kfontinst/kcmfontinst/PrintDialog.cpp | 74 + kcontrol/kfontinst/kcmfontinst/PrintDialog.h | 56 + kcontrol/kfontinst/kcmfontinst/SettingsDialog.cpp | 99 + kcontrol/kfontinst/kcmfontinst/SettingsDialog.h | 57 + .../kfontinst/kcmfontinst/cr16-action-newfont.png | Bin 0 -> 613 bytes .../kfontinst/kcmfontinst/cr22-action-newfont.png | Bin 0 -> 951 bytes .../kfontinst/kcmfontinst/cr32-action-newfont.png | Bin 0 -> 1821 bytes kcontrol/kfontinst/kcmfontinst/kcmfontinst.desktop | 235 + kcontrol/kfontinst/kfile-plugin/KFileFont.cpp | 422 + kcontrol/kfontinst/kfile-plugin/KFileFont.h | 58 + kcontrol/kfontinst/kfile-plugin/Makefile.am | 13 + kcontrol/kfontinst/kfile-plugin/kfile_font.desktop | 86 + kcontrol/kfontinst/kfontinst/FontEngine.cpp | 376 + kcontrol/kfontinst/kfontinst/FontEngine.h | 142 + kcontrol/kfontinst/kfontinst/Fontmap.cpp | 596 + kcontrol/kfontinst/kfontinst/Fontmap.h | 79 + kcontrol/kfontinst/kfontinst/GetPid.c | 519 + kcontrol/kfontinst/kfontinst/Main.cpp | 335 + kcontrol/kfontinst/kfontinst/Makefile.am | 16 + kcontrol/kfontinst/kfontinst/XConfig.cpp | 760 + kcontrol/kfontinst/kfontinst/XConfig.h | 114 + kcontrol/kfontinst/kio/KioFonts.cpp | 2534 + kcontrol/kfontinst/kio/KioFonts.h | 161 + kcontrol/kfontinst/kio/Makefile.am | 20 + kcontrol/kfontinst/kio/folder.desktop | 80 + kcontrol/kfontinst/kio/fonts.desktop | 85 + kcontrol/kfontinst/kio/fonts.protocol | 18 + kcontrol/kfontinst/kio/package.desktop | 74 + kcontrol/kfontinst/kio/system-folder.desktop | 79 + kcontrol/kfontinst/lib/FcEngine.cpp | 1179 + kcontrol/kfontinst/lib/FcEngine.h | 118 + kcontrol/kfontinst/lib/KfiConstants.h | 73 + kcontrol/kfontinst/lib/Makefile.am | 14 + kcontrol/kfontinst/lib/Misc.cpp | 238 + kcontrol/kfontinst/lib/Misc.h | 76 + kcontrol/kfontinst/thumbnail/FontThumbnail.cpp | 73 + kcontrol/kfontinst/thumbnail/FontThumbnail.h | 55 + kcontrol/kfontinst/thumbnail/Makefile.am | 14 + kcontrol/kfontinst/thumbnail/fontthumbnail.desktop | 85 + kcontrol/kfontinst/viewpart/FontPreview.cpp | 118 + kcontrol/kfontinst/viewpart/FontPreview.h | 83 + kcontrol/kfontinst/viewpart/FontViewPart.cpp | 282 + kcontrol/kfontinst/viewpart/FontViewPart.h | 85 + .../kfontinst/viewpart/FontViewPartFactory.cpp | 86 + kcontrol/kfontinst/viewpart/FontViewPartFactory.h | 60 + kcontrol/kfontinst/viewpart/FontViewerApp.cpp | 130 + kcontrol/kfontinst/viewpart/FontViewerApp.h | 68 + kcontrol/kfontinst/viewpart/KfiPrint.cpp | 193 + kcontrol/kfontinst/viewpart/KfiPrint.h | 49 + kcontrol/kfontinst/viewpart/Makefile.am | 30 + kcontrol/kfontinst/viewpart/kfontview.desktop | 100 + kcontrol/kfontinst/viewpart/kfontviewpart.desktop | 86 + kcontrol/kfontinst/viewpart/kfontviewpart.rc | 9 + kcontrol/kfontinst/viewpart/kfontviewui.rc | 4 + kcontrol/kicker/Makefile.am | 40 + kcontrol/kicker/advancedDialog.cpp | 163 + kcontrol/kicker/advancedDialog.h | 44 + kcontrol/kicker/advancedOptions.ui | 321 + kcontrol/kicker/applettab.ui | 227 + kcontrol/kicker/applettab_impl.cpp | 239 + kcontrol/kicker/applettab_impl.h | 68 + kcontrol/kicker/extensionInfo.cpp | 259 + kcontrol/kicker/extensionInfo.h | 85 + kcontrol/kicker/hidingconfig.cpp | 94 + kcontrol/kicker/hidingconfig.h | 44 + kcontrol/kicker/hidingtab.ui | 761 + kcontrol/kicker/hidingtab_impl.cpp | 280 + kcontrol/kicker/hidingtab_impl.h | 64 + kcontrol/kicker/kicker_config.desktop | 223 + kcontrol/kicker/kicker_config_appearance.desktop | 229 + kcontrol/kicker/kicker_config_arrangement.desktop | 212 + kcontrol/kicker/kicker_config_hiding.desktop | 202 + kcontrol/kicker/kicker_config_menus.desktop | 199 + kcontrol/kicker/lookandfeelconfig.cpp | 94 + kcontrol/kicker/lookandfeelconfig.h | 44 + kcontrol/kicker/lookandfeeltab.ui | 635 + kcontrol/kicker/lookandfeeltab_impl.cpp | 384 + kcontrol/kicker/lookandfeeltab_impl.h | 70 + kcontrol/kicker/lookandfeeltab_kcm.cpp | 94 + kcontrol/kicker/lookandfeeltab_kcm.h | 44 + kcontrol/kicker/main.cpp | 398 + kcontrol/kicker/main.h | 84 + kcontrol/kicker/menuconfig.cpp | 94 + kcontrol/kicker/menuconfig.h | 44 + kcontrol/kicker/menutab.ui | 407 + kcontrol/kicker/menutab_impl.cpp | 181 + kcontrol/kicker/menutab_impl.h | 72 + kcontrol/kicker/panel.desktop | 224 + kcontrol/kicker/positionconfig.cpp | 94 + kcontrol/kicker/positionconfig.h | 44 + kcontrol/kicker/positiontab.ui | 1129 + kcontrol/kicker/positiontab_impl.cpp | 742 + kcontrol/kicker/positiontab_impl.h | 77 + kcontrol/kicker/uninstall.desktop | 11 + kcontrol/kio/Makefile.am | 39 + kcontrol/kio/UA-DESKTOP-FILE-HOWTO | 135 + kcontrol/kio/cache.cpp | 127 + kcontrol/kio/cache.desktop | 220 + kcontrol/kio/cache.h | 50 + kcontrol/kio/cache_ui.ui | 187 + kcontrol/kio/cookies.desktop | 215 + kcontrol/kio/envvarproxy_ui.ui | 175 + kcontrol/kio/fakeuaprovider.cpp | 176 + kcontrol/kio/fakeuaprovider.h | 57 + kcontrol/kio/kcookiesmain.cpp | 99 + kcontrol/kio/kcookiesmain.h | 37 + kcontrol/kio/kcookiesmanagement.cpp | 489 + kcontrol/kio/kcookiesmanagement.h | 101 + kcontrol/kio/kcookiesmanagementdlg_ui.ui | 323 + kcontrol/kio/kcookiespolicies.cpp | 474 + kcontrol/kio/kcookiespolicies.h | 81 + kcontrol/kio/kcookiespoliciesdlg_ui.ui | 323 + kcontrol/kio/kenvvarproxydlg.cpp | 303 + kcontrol/kio/kenvvarproxydlg.h | 57 + kcontrol/kio/kio_ftprc.kcfg | 22 + kcontrol/kio/kio_ftprc.kcfgc | 5 + kcontrol/kio/kioslave.kcfg | 44 + kcontrol/kio/kioslave.kcfgc | 5 + kcontrol/kio/kmanualproxydlg.cpp | 498 + kcontrol/kio/kmanualproxydlg.h | 77 + kcontrol/kio/kproxydlg.cpp | 375 + kcontrol/kio/kproxydlg.h | 82 + kcontrol/kio/kproxydlg_ui.ui | 441 + kcontrol/kio/kproxydlgbase.cpp | 74 + kcontrol/kio/kproxydlgbase.h | 68 + kcontrol/kio/ksaveioconfig.cpp | 260 + kcontrol/kio/ksaveioconfig.h | 96 + kcontrol/kio/lanbrowser.desktop | 226 + kcontrol/kio/main.cpp | 158 + kcontrol/kio/main.h | 46 + kcontrol/kio/manualproxy_ui.ui | 317 + kcontrol/kio/netpref.cpp | 138 + kcontrol/kio/netpref.desktop | 205 + kcontrol/kio/netpref.h | 44 + kcontrol/kio/policydlg.cpp | 107 + kcontrol/kio/policydlg.h | 87 + kcontrol/kio/policydlg_ui.ui | 106 + kcontrol/kio/proxy.desktop | 209 + kcontrol/kio/smb.desktop | 233 + kcontrol/kio/smbrodlg.cpp | 191 + kcontrol/kio/smbrodlg.h | 55 + kcontrol/kio/socks.cpp | 279 + kcontrol/kio/socks.h | 73 + kcontrol/kio/socks.upd | 8 + kcontrol/kio/socksbase.ui | 335 + kcontrol/kio/uagentproviderdlg.cpp | 149 + kcontrol/kio/uagentproviderdlg.h | 68 + kcontrol/kio/uagentproviderdlg_ui.ui | 207 + kcontrol/kio/uasprovider.desktop | 98 + kcontrol/kio/uasproviders/Makefile.am | 14 + .../kio/uasproviders/firefox10oncurrent.desktop | 70 + .../kio/uasproviders/firefox15oncurrent.desktop | 58 + kcontrol/kio/uasproviders/googlebot.desktop | 44 + kcontrol/kio/uasproviders/ie401onwinnt4.desktop | 80 + kcontrol/kio/uasproviders/ie45onwinnt5.desktop | 80 + kcontrol/kio/uasproviders/ie501onwinnt5.desktop | 79 + kcontrol/kio/uasproviders/ie50onppc.desktop | 79 + kcontrol/kio/uasproviders/ie55onwin98.desktop | 79 + kcontrol/kio/uasproviders/ie55onwinnt5.desktop | 79 + kcontrol/kio/uasproviders/ie60oncurrent.desktop | 69 + kcontrol/kio/uasproviders/ie60onwinnt51.desktop | 81 + kcontrol/kio/uasproviders/lynxoncurrent.desktop | 51 + kcontrol/kio/uasproviders/mozoncurrent.desktop | 70 + kcontrol/kio/uasproviders/mozoncurrent12.desktop | 76 + kcontrol/kio/uasproviders/mozoncurrent16.desktop | 75 + kcontrol/kio/uasproviders/mozonwin2000.desktop | 73 + kcontrol/kio/uasproviders/mozonwinxp.desktop | 74 + kcontrol/kio/uasproviders/nn301oncurrent.desktop | 78 + kcontrol/kio/uasproviders/nn475oncurrent.desktop | 78 + kcontrol/kio/uasproviders/nn475onwin95.desktop | 81 + kcontrol/kio/uasproviders/nn476onppc.desktop | 82 + kcontrol/kio/uasproviders/ns71oncurrent.desktop | 72 + kcontrol/kio/uasproviders/ns71onwinnt51.desktop | 74 + kcontrol/kio/uasproviders/op403onwinnt4.desktop | 80 + kcontrol/kio/uasproviders/op75oncurrent.desktop | 69 + kcontrol/kio/uasproviders/safari12.desktop | 73 + kcontrol/kio/uasproviders/safari20.desktop | 59 + kcontrol/kio/uasproviders/w3moncurrent.desktop | 50 + kcontrol/kio/uasproviders/wgetoncurrent.desktop | 50 + kcontrol/kio/uninstall.desktop | 2 + kcontrol/kio/useragent.desktop | 232 + kcontrol/kio/useragentdlg.cpp | 403 + kcontrol/kio/useragentdlg.h | 83 + kcontrol/kio/useragentdlg_ui.ui | 355 + kcontrol/knotify/CHANGES | 0 kcontrol/knotify/Makefile.am | 27 + kcontrol/knotify/README | 2 + kcontrol/knotify/kcmnotify.desktop | 243 + kcontrol/knotify/knotify.cpp | 328 + kcontrol/knotify/knotify.h | 96 + kcontrol/knotify/play.png | Bin 0 -> 277 bytes kcontrol/knotify/playersettings.ui | 330 + kcontrol/knotify/sounds/KDE_Beep.ogg | Bin 0 -> 4146 bytes kcontrol/knotify/sounds/KDE_Beep_Ahem.wav | Bin 0 -> 11180 bytes kcontrol/knotify/sounds/KDE_Beep_Beep.wav | Bin 0 -> 1078 bytes kcontrol/knotify/sounds/KDE_Beep_Bottles.wav | Bin 0 -> 4972 bytes kcontrol/knotify/sounds/KDE_Beep_Car.ogg | Bin 0 -> 5829 bytes kcontrol/knotify/sounds/KDE_Beep_Classic.ogg | Bin 0 -> 5433 bytes kcontrol/knotify/sounds/KDE_Beep_ClassicBeep.wav | Bin 0 -> 2480 bytes kcontrol/knotify/sounds/KDE_Beep_ClockChime.wav | Bin 0 -> 4022 bytes kcontrol/knotify/sounds/KDE_Beep_Connect.ogg | Bin 0 -> 14392 bytes kcontrol/knotify/sounds/KDE_Beep_Connect.wav | Bin 0 -> 12384 bytes kcontrol/knotify/sounds/KDE_Beep_Digital_1.ogg | Bin 0 -> 4569 bytes kcontrol/knotify/sounds/KDE_Beep_Digital_2.ogg | Bin 0 -> 5316 bytes kcontrol/knotify/sounds/KDE_Beep_Door.wav | Bin 0 -> 7470 bytes kcontrol/knotify/sounds/KDE_Beep_Double.ogg | Bin 0 -> 4613 bytes kcontrol/knotify/sounds/KDE_Beep_Harsh.ogg | Bin 0 -> 4747 bytes kcontrol/knotify/sounds/KDE_Beep_Honk.wav | Bin 0 -> 2802 bytes kcontrol/knotify/sounds/KDE_Beep_Lightning.wav | Bin 0 -> 10220 bytes kcontrol/knotify/sounds/KDE_Beep_Phone_1.ogg | Bin 0 -> 5517 bytes kcontrol/knotify/sounds/KDE_Beep_Phone_2.ogg | Bin 0 -> 7067 bytes kcontrol/knotify/sounds/KDE_Beep_Pop.wav | Bin 0 -> 414 bytes kcontrol/knotify/sounds/KDE_Beep_RimShot.wav | Bin 0 -> 13996 bytes kcontrol/knotify/sounds/KDE_Beep_RingRing.wav | Bin 0 -> 5932 bytes kcontrol/knotify/sounds/KDE_Beep_ShortBeep.wav | Bin 0 -> 2270 bytes kcontrol/knotify/sounds/KDE_Beep_Yo.wav | Bin 0 -> 4538 bytes kcontrol/knotify/sounds/KDE_Bottles.ogg | Bin 0 -> 13853 bytes kcontrol/knotify/sounds/KDE_Chimes_1.ogg | Bin 0 -> 29944 bytes kcontrol/knotify/sounds/KDE_Chimes_2.ogg | Bin 0 -> 23635 bytes kcontrol/knotify/sounds/KDE_Chimes_3.ogg | Bin 0 -> 31716 bytes kcontrol/knotify/sounds/KDE_Click.wav | Bin 0 -> 1824 bytes kcontrol/knotify/sounds/KDE_Click_1.ogg | Bin 0 -> 4715 bytes kcontrol/knotify/sounds/KDE_Click_2.ogg | Bin 0 -> 5316 bytes kcontrol/knotify/sounds/KDE_Click_3.ogg | Bin 0 -> 4032 bytes kcontrol/knotify/sounds/KDE_Close_Window.wav | Bin 0 -> 26270 bytes kcontrol/knotify/sounds/KDE_Critical_Error.wav | Bin 0 -> 183496 bytes kcontrol/knotify/sounds/KDE_Desktop1.wav | Bin 0 -> 4794 bytes kcontrol/knotify/sounds/KDE_Desktop2.wav | Bin 0 -> 5178 bytes kcontrol/knotify/sounds/KDE_Desktop3.wav | Bin 0 -> 5106 bytes kcontrol/knotify/sounds/KDE_Desktop4.wav | Bin 0 -> 4962 bytes kcontrol/knotify/sounds/KDE_Desktop5.wav | Bin 0 -> 5026 bytes kcontrol/knotify/sounds/KDE_Desktop6.wav | Bin 0 -> 5122 bytes kcontrol/knotify/sounds/KDE_Desktop7.wav | Bin 0 -> 5250 bytes kcontrol/knotify/sounds/KDE_Desktop8.wav | Bin 0 -> 5218 bytes kcontrol/knotify/sounds/KDE_Desktop_1.ogg | Bin 0 -> 32355 bytes kcontrol/knotify/sounds/KDE_Desktop_2.ogg | Bin 0 -> 37561 bytes kcontrol/knotify/sounds/KDE_Desktop_3.ogg | Bin 0 -> 36602 bytes kcontrol/knotify/sounds/KDE_Desktop_4.ogg | Bin 0 -> 37532 bytes kcontrol/knotify/sounds/KDE_Desktop_5.ogg | Bin 0 -> 36807 bytes kcontrol/knotify/sounds/KDE_Desktop_6.ogg | Bin 0 -> 36079 bytes kcontrol/knotify/sounds/KDE_Desktop_7.ogg | Bin 0 -> 38732 bytes kcontrol/knotify/sounds/KDE_Desktop_8.ogg | Bin 0 -> 37169 bytes kcontrol/knotify/sounds/KDE_Dialog_Appear.ogg | Bin 0 -> 25042 bytes kcontrol/knotify/sounds/KDE_Dialog_Appear.wav | Bin 0 -> 61084 bytes kcontrol/knotify/sounds/KDE_Dialog_Disappear.ogg | Bin 0 -> 26129 bytes kcontrol/knotify/sounds/KDE_Dialog_Disappear.wav | Bin 0 -> 81506 bytes kcontrol/knotify/sounds/KDE_Door.ogg | Bin 0 -> 9694 bytes kcontrol/knotify/sounds/KDE_Drum_Break.ogg | Bin 0 -> 21007 bytes kcontrol/knotify/sounds/KDE_Error.wav | Bin 0 -> 24970 bytes kcontrol/knotify/sounds/KDE_Error_1.ogg | Bin 0 -> 28249 bytes kcontrol/knotify/sounds/KDE_Error_2.ogg | Bin 0 -> 4933 bytes kcontrol/knotify/sounds/KDE_Error_3.ogg | Bin 0 -> 7124 bytes kcontrol/knotify/sounds/KDE_Event_1.ogg | Bin 0 -> 25813 bytes kcontrol/knotify/sounds/KDE_Event_2.ogg | Bin 0 -> 27085 bytes kcontrol/knotify/sounds/KDE_Event_3.ogg | Bin 0 -> 15743 bytes kcontrol/knotify/sounds/KDE_Event_4.ogg | Bin 0 -> 14400 bytes kcontrol/knotify/sounds/KDE_Event_5.ogg | Bin 0 -> 19325 bytes kcontrol/knotify/sounds/KDE_Glass_Break.ogg | Bin 0 -> 11005 bytes kcontrol/knotify/sounds/KDE_Keyboard_Key_1.ogg | Bin 0 -> 4672 bytes kcontrol/knotify/sounds/KDE_Logout.wav | Bin 0 -> 132744 bytes kcontrol/knotify/sounds/KDE_Logout_1.ogg | Bin 0 -> 77261 bytes kcontrol/knotify/sounds/KDE_Logout_2.ogg | Bin 0 -> 43763 bytes kcontrol/knotify/sounds/KDE_Logout_3.ogg | Bin 0 -> 36215 bytes kcontrol/knotify/sounds/KDE_Notify.wav | Bin 0 -> 90464 bytes kcontrol/knotify/sounds/KDE_Pop.ogg | Bin 0 -> 4305 bytes kcontrol/knotify/sounds/KDE_Star_Ship_1.ogg | Bin 0 -> 44075 bytes kcontrol/knotify/sounds/KDE_Startup.wav | Bin 0 -> 365228 bytes kcontrol/knotify/sounds/KDE_Startup_1.ogg | Bin 0 -> 124445 bytes kcontrol/knotify/sounds/KDE_Startup_2.ogg | Bin 0 -> 141189 bytes kcontrol/knotify/sounds/KDE_Startup_3.ogg | Bin 0 -> 109393 bytes kcontrol/knotify/sounds/KDE_TypeWriter_Bell.ogg | Bin 0 -> 9660 bytes .../knotify/sounds/KDE_TypeWriter_End_Of_Line.ogg | Bin 0 -> 11187 bytes kcontrol/knotify/sounds/KDE_TypeWriter_Key_1.ogg | Bin 0 -> 5701 bytes kcontrol/knotify/sounds/KDE_TypeWriter_Key_2.ogg | Bin 0 -> 5428 bytes kcontrol/knotify/sounds/KDE_TypeWriter_Reload.ogg | Bin 0 -> 11372 bytes kcontrol/knotify/sounds/KDE_TypeWriter_Scroll.ogg | Bin 0 -> 6772 bytes kcontrol/knotify/sounds/KDE_Vox_Ahem.ogg | Bin 0 -> 13701 bytes kcontrol/knotify/sounds/KDE_Vox_Yo.ogg | Bin 0 -> 14071 bytes kcontrol/knotify/sounds/KDE_Warp.ogg | Bin 0 -> 3894 bytes kcontrol/knotify/sounds/KDE_Water_Drop.ogg | Bin 0 -> 8139 bytes kcontrol/knotify/sounds/KDE_Window_Close.ogg | Bin 0 -> 9230 bytes kcontrol/knotify/sounds/KDE_Window_Close.wav | Bin 0 -> 202848 bytes kcontrol/knotify/sounds/KDE_Window_DeIconify.ogg | Bin 0 -> 13322 bytes kcontrol/knotify/sounds/KDE_Window_DeIconify.wav | Bin 0 -> 26698 bytes kcontrol/knotify/sounds/KDE_Window_Hide.ogg | Bin 0 -> 22658 bytes kcontrol/knotify/sounds/KDE_Window_Iconify.ogg | Bin 0 -> 14211 bytes kcontrol/knotify/sounds/KDE_Window_Iconify.wav | Bin 0 -> 26134 bytes kcontrol/knotify/sounds/KDE_Window_Maximize.wav | Bin 0 -> 26402 bytes kcontrol/knotify/sounds/KDE_Window_Open.ogg | Bin 0 -> 9481 bytes kcontrol/knotify/sounds/KDE_Window_Open.wav | Bin 0 -> 305432 bytes kcontrol/knotify/sounds/KDE_Window_Shade_Down.ogg | Bin 0 -> 26114 bytes kcontrol/knotify/sounds/KDE_Window_Shade_Down.wav | Bin 0 -> 20522 bytes kcontrol/knotify/sounds/KDE_Window_Shade_Up.ogg | Bin 0 -> 27328 bytes kcontrol/knotify/sounds/KDE_Window_Shade_Up.wav | Bin 0 -> 20578 bytes kcontrol/knotify/sounds/KDE_Window_Sticky.ogg | Bin 0 -> 7594 bytes kcontrol/knotify/sounds/KDE_Window_Sticky.wav | Bin 0 -> 17706 bytes kcontrol/knotify/sounds/KDE_Window_UnHide.ogg | Bin 0 -> 23615 bytes kcontrol/knotify/sounds/KDE_Window_UnMaximize.wav | Bin 0 -> 42092 bytes kcontrol/knotify/sounds/KDE_Window_UnSticky.ogg | Bin 0 -> 12300 bytes kcontrol/knotify/sounds/KDE_Window_UnSticky.wav | Bin 0 -> 20522 bytes kcontrol/knotify/sounds/Makefile.am | 113 + kcontrol/konq/Makefile.am | 30 + kcontrol/konq/README | 19 + kcontrol/konq/behaviour.cpp | 285 + kcontrol/konq/behaviour.h | 75 + kcontrol/konq/browser.cpp | 109 + kcontrol/konq/browser.h | 50 + kcontrol/konq/desktop.cpp | 246 + kcontrol/konq/desktop.desktop | 236 + kcontrol/konq/desktop.h | 57 + kcontrol/konq/desktopbehavior.desktop | 236 + kcontrol/konq/desktopbehavior.ui | 426 + kcontrol/konq/desktopbehavior_impl.cpp | 466 + kcontrol/konq/desktopbehavior_impl.h | 79 + kcontrol/konq/desktoppath.desktop | 226 + kcontrol/konq/fileappearance.desktop | 234 + kcontrol/konq/filebehavior.desktop | 225 + kcontrol/konq/filebrowser.desktop | 239 + kcontrol/konq/filepreviews.desktop | 220 + kcontrol/konq/fontopts.cpp | 387 + kcontrol/konq/fontopts.h | 112 + kcontrol/konq/main.cpp | 98 + kcontrol/konq/onlyone.png | Bin 0 -> 7540 bytes kcontrol/konq/overlapping.png | Bin 0 -> 10965 bytes kcontrol/konq/previews.cpp | 219 + kcontrol/konq/previews.h | 65 + kcontrol/konq/rootopts.cpp | 345 + kcontrol/konq/rootopts.h | 64 + kcontrol/konq/webappearance.desktop | 234 + kcontrol/konq/webbehavior.desktop | 234 + kcontrol/konqhtml/Makefile.am | 26 + kcontrol/konqhtml/advancedTabDialog.cpp | 121 + kcontrol/konqhtml/advancedTabDialog.h | 45 + kcontrol/konqhtml/advancedTabOptions.ui | 155 + kcontrol/konqhtml/appearance.cpp | 417 + kcontrol/konqhtml/appearance.h | 70 + kcontrol/konqhtml/domainlistview.cpp | 230 + kcontrol/konqhtml/domainlistview.h | 209 + kcontrol/konqhtml/filteropts.cpp | 327 + kcontrol/konqhtml/filteropts.h | 74 + kcontrol/konqhtml/htmlopts.cpp | 365 + kcontrol/konqhtml/htmlopts.h | 68 + kcontrol/konqhtml/javaopts.cpp | 337 + kcontrol/konqhtml/javaopts.h | 126 + kcontrol/konqhtml/jsopts.cpp | 231 + kcontrol/konqhtml/jsopts.h | 90 + kcontrol/konqhtml/jspolicies.cpp | 407 + kcontrol/konqhtml/jspolicies.h | 270 + kcontrol/konqhtml/khtml_behavior.desktop | 231 + kcontrol/konqhtml/khtml_filter.desktop | 145 + kcontrol/konqhtml/khtml_fonts.desktop | 230 + kcontrol/konqhtml/khtml_java_js.desktop | 211 + kcontrol/konqhtml/khttpoptdlg.cpp | 81 + kcontrol/konqhtml/khttpoptdlg.h | 49 + kcontrol/konqhtml/main.cpp | 171 + kcontrol/konqhtml/main.h | 60 + kcontrol/konqhtml/nsconfigwidget.ui | 273 + kcontrol/konqhtml/pluginopts.cpp | 659 + kcontrol/konqhtml/pluginopts.h | 163 + kcontrol/konqhtml/policies.cpp | 74 + kcontrol/konqhtml/policies.h | 134 + kcontrol/konqhtml/policydlg.cpp | 128 + kcontrol/konqhtml/policydlg.h | 130 + kcontrol/konqhtml/uninstall.desktop | 2 + kcontrol/konsole/AUTHORS | 2 + kcontrol/konsole/Makefile.am | 18 + kcontrol/konsole/kcmkonsole.cpp | 191 + kcontrol/konsole/kcmkonsole.desktop | 185 + kcontrol/konsole/kcmkonsole.h | 46 + kcontrol/konsole/kcmkonsoledialog.ui | 390 + kcontrol/konsole/schemadialog.ui | 631 + kcontrol/konsole/schemaeditor.cpp | 708 + kcontrol/konsole/schemaeditor.h | 84 + kcontrol/konsole/sessiondialog.ui | 446 + kcontrol/konsole/sessioneditor.cpp | 383 + kcontrol/konsole/sessioneditor.h | 68 + kcontrol/krdb/AUTHORS | 9 + kcontrol/krdb/Makefile.am | 15 + kcontrol/krdb/ad/AAAAAAGeneral.ad | 2 + kcontrol/krdb/ad/AAAMotif.ad | 74 + kcontrol/krdb/ad/AAATk.ad | 107 + kcontrol/krdb/ad/AAAXaw.ad | 36 + kcontrol/krdb/ad/AcroRead.ad | 8 + kcontrol/krdb/ad/Editres.ad | 5 + kcontrol/krdb/ad/Emacs.ad | 17 + kcontrol/krdb/ad/GV.ad | 1 + kcontrol/krdb/ad/ML.ad | 36 + kcontrol/krdb/ad/Makefile.am | 13 + kcontrol/krdb/ad/Nedit.ad | 2 + kcontrol/krdb/ad/Netscape.ad | 25 + kcontrol/krdb/ad/README | 63 + kcontrol/krdb/ad/RVPlayer.ad | 40 + kcontrol/krdb/ad/WPerfect.ad | 69 + kcontrol/krdb/ad/XCalc.ad | 7 + kcontrol/krdb/ad/XOsview.ad | 5 + kcontrol/krdb/ad/XTerm.ad | 4 + kcontrol/krdb/ad/XV.ad | 2 + kcontrol/krdb/ad/Xawtv.ad | 10 + kcontrol/krdb/ad/Xdvi.ad | 1 + kcontrol/krdb/ad/Xpdf.ad | 3 + kcontrol/krdb/ad/krdb | 4 + kcontrol/krdb/kcmdisplayrc.upd | 7 + kcontrol/krdb/kcs/AtlasGreen.kcsrc | 83 + kcontrol/krdb/kcs/BeOS.kcsrc | 26 + kcontrol/krdb/kcs/BlackOnWhite.kcsrc | 89 + kcontrol/krdb/kcs/BlueSlate.kcsrc | 87 + kcontrol/krdb/kcs/CDE.kcsrc | 26 + kcontrol/krdb/kcs/DarkBlue.kcsrc | 98 + kcontrol/krdb/kcs/DesertRed.kcsrc | 89 + kcontrol/krdb/kcs/DigitalCDE.kcsrc | 69 + kcontrol/krdb/kcs/EveX.kcsrc | 27 + kcontrol/krdb/kcs/KDEOne.kcsrc | 30 + kcontrol/krdb/kcs/KDETwo.kcsrc | 28 + kcontrol/krdb/kcs/Keramik.kcsrc | 49 + kcontrol/krdb/kcs/KeramikEmerald.kcsrc | 73 + kcontrol/krdb/kcs/KeramikWhite.kcsrc | 91 + kcontrol/krdb/kcs/Makefile.am | 12 + kcontrol/krdb/kcs/MediaPeach.kcsrc | 60 + kcontrol/krdb/kcs/Next.kcsrc | 53 + kcontrol/krdb/kcs/PaleGray.kcsrc | 90 + kcontrol/krdb/kcs/Plastik.kcsrc | 55 + kcontrol/krdb/kcs/PointReyesGreen.kcsrc | 75 + kcontrol/krdb/kcs/Pumpkin.kcsrc | 87 + kcontrol/krdb/kcs/SolarisCDE.kcsrc | 38 + kcontrol/krdb/kcs/Storm.kcsrc | 84 + kcontrol/krdb/kcs/System.kcsrc | 99 + kcontrol/krdb/kcs/WhiteOnBlack.kcsrc | 88 + kcontrol/krdb/kcs/Windows2000.kcsrc | 36 + kcontrol/krdb/kcs/Windows95.kcsrc | 33 + kcontrol/krdb/kcs/WindowsXP.kcsrc | 36 + kcontrol/krdb/kcs/YellowOnBlue.kcsrc | 89 + kcontrol/krdb/krdb.cpp | 612 + kcontrol/krdb/krdb.h | 33 + kcontrol/krdb/pics/Makefile.am | 6 + kcontrol/krdb/pics/lo-energy.png | Bin 0 -> 2253 bytes kcontrol/krdb/pics/logo.png | Bin 0 -> 950 bytes kcontrol/krdb/pics/mini-world.png | Bin 0 -> 1036 bytes .../HighContrastDark-big.preview.png | Bin 0 -> 8114 bytes .../HighContrastDark-big/HighContrastDark-big.xml | 158 + .../krdb/themes/HighContrastDark-big/Makefile.am | 6 + .../HighContrastDark/HighContrastDark.preview.png | Bin 0 -> 6458 bytes .../themes/HighContrastDark/HighContrastDark.xml | 158 + kcontrol/krdb/themes/HighContrastDark/Makefile.am | 6 + .../HighContrastLight-big.preview.png | Bin 0 -> 50340 bytes .../HighContrastLight-big.xml | 158 + .../krdb/themes/HighContrastLight-big/Makefile.am | 6 + .../HighContrastLight.preview.png | Bin 0 -> 48622 bytes .../themes/HighContrastLight/HighContrastLight.xml | 158 + kcontrol/krdb/themes/HighContrastLight/Makefile.am | 6 + .../themes/KDE_Classic/KDE_Classic.preview.png | Bin 0 -> 41158 bytes kcontrol/krdb/themes/KDE_Classic/KDE_Classic.xml | 124 + kcontrol/krdb/themes/KDE_Classic/Makefile.am | 6 + kcontrol/krdb/themes/Keramik/Keramik.preview.png | Bin 0 -> 44723 bytes kcontrol/krdb/themes/Keramik/Keramik.xml | 124 + kcontrol/krdb/themes/Keramik/Makefile.am | 6 + kcontrol/krdb/themes/Makefile.am | 4 + kcontrol/krdb/themes/Plastik/Makefile.am | 6 + kcontrol/krdb/themes/Plastik/Plastik.preview.png | Bin 0 -> 40876 bytes kcontrol/krdb/themes/Plastik/Plastik.xml | 124 + kcontrol/krdb/themes/Platinum/Makefile.am | 6 + kcontrol/krdb/themes/Platinum/Platinum.preview.png | Bin 0 -> 35500 bytes kcontrol/krdb/themes/Platinum/Platinum.xml | 124 + kcontrol/krdb/themes/Redmond/Makefile.am | 6 + kcontrol/krdb/themes/Redmond/Redmond.preview.png | Bin 0 -> 34212 bytes kcontrol/krdb/themes/Redmond/Redmond.xml | 124 + kcontrol/krdb/themes/Sunshine/Makefile.am | 6 + kcontrol/krdb/themes/Sunshine/Sunshine.preview.png | Bin 0 -> 32852 bytes kcontrol/krdb/themes/Sunshine/Sunshine.xml | 124 + kcontrol/krdb/themes/YellowOnBlue-big/Makefile.am | 6 + .../YellowOnBlue-big/YellowOnBlue-big.preview.png | Bin 0 -> 60912 bytes .../themes/YellowOnBlue-big/YellowOnBlue-big.xml | 158 + kcontrol/krdb/themes/YellowOnBlue/Makefile.am | 6 + .../themes/YellowOnBlue/YellowOnBlue.preview.png | Bin 0 -> 58587 bytes kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.xml | 158 + kcontrol/kthememanager/Makefile.am | 21 + kcontrol/kthememanager/NEWS | 26 + kcontrol/kthememanager/README | 99 + kcontrol/kthememanager/TODO | 9 + kcontrol/kthememanager/installktheme.desktop | 78 + kcontrol/kthememanager/kdeinstallktheme | 14 + kcontrol/kthememanager/knewthemedlg.cpp | 96 + kcontrol/kthememanager/knewthemedlg.h | 58 + kcontrol/kthememanager/ktheme.cpp | 897 + kcontrol/kthememanager/ktheme.h | 224 + kcontrol/kthememanager/kthemedlg.ui | 518 + kcontrol/kthememanager/kthemedlg.ui.h | 49 + kcontrol/kthememanager/kthememanager.cpp | 425 + kcontrol/kthememanager/kthememanager.desktop | 220 + kcontrol/kthememanager/kthememanager.h | 157 + kcontrol/kthememanager/newthemewidget.ui | 130 + kcontrol/kthememanager/x-ktheme.desktop | 84 + kcontrol/launch/Makefile.am | 13 + kcontrol/launch/kcmlaunch.cpp | 275 + kcontrol/launch/kcmlaunch.desktop | 225 + kcontrol/launch/kcmlaunch.h | 72 + kcontrol/locale/AUTHORS | 2 + kcontrol/locale/Makefile.am | 32 + kcontrol/locale/TIMEZONES | 392 + kcontrol/locale/default/Makefile.am | 2 + kcontrol/locale/default/entry.desktop | 72 + kcontrol/locale/kcmlocale.cpp | 473 + kcontrol/locale/kcmlocale.h | 95 + kcontrol/locale/klocalesample.cpp | 132 + kcontrol/locale/klocalesample.h | 58 + kcontrol/locale/language.desktop | 236 + kcontrol/locale/localemon.cpp | 330 + kcontrol/locale/localemon.h | 93 + kcontrol/locale/localenum.cpp | 194 + kcontrol/locale/localenum.h | 82 + kcontrol/locale/localeother.cpp | 142 + kcontrol/locale/localeother.h | 70 + kcontrol/locale/localetime.cpp | 556 + kcontrol/locale/localetime.h | 102 + kcontrol/locale/main.cpp | 38 + kcontrol/locale/pics/Makefile.am | 2 + kcontrol/locale/pics/background.png | Bin 0 -> 28823 bytes kcontrol/locale/toplevel.cpp | 276 + kcontrol/locale/toplevel.h | 87 + kcontrol/nics/AUTHORS | 2 + kcontrol/nics/Makefile.am | 15 + kcontrol/nics/configure.in.in | 4 + kcontrol/nics/nic.cpp | 323 + kcontrol/nics/nic.desktop | 173 + kcontrol/nics/nic.h | 45 + kcontrol/performance/Makefile.am | 20 + kcontrol/performance/kcmkonqyperformance.desktop | 207 + kcontrol/performance/kcmperformance.cpp | 126 + kcontrol/performance/kcmperformance.desktop | 215 + kcontrol/performance/kcmperformance.h | 61 + kcontrol/performance/konqueror.cpp | 147 + kcontrol/performance/konqueror.h | 46 + kcontrol/performance/konqueror_ui.ui | 155 + kcontrol/performance/system.cpp | 80 + kcontrol/performance/system.h | 44 + kcontrol/performance/system_ui.ui | 69 + kcontrol/pics/Makefile.am | 1 + kcontrol/pics/cr128-app-access.png | Bin 0 -> 7576 bytes kcontrol/pics/cr128-app-arts.png | Bin 0 -> 10542 bytes kcontrol/pics/cr128-app-background.png | Bin 0 -> 10885 bytes kcontrol/pics/cr128-app-bell.png | Bin 0 -> 7039 bytes kcontrol/pics/cr128-app-cache.png | Bin 0 -> 9342 bytes kcontrol/pics/cr128-app-clock.png | Bin 0 -> 17753 bytes kcontrol/pics/cr128-app-colors.png | Bin 0 -> 14715 bytes kcontrol/pics/cr128-app-date.png | Bin 0 -> 14176 bytes kcontrol/pics/cr128-app-energy.png | Bin 0 -> 13774 bytes kcontrol/pics/cr128-app-energy_star.png | Bin 0 -> 11541 bytes kcontrol/pics/cr128-app-filetypes.png | Bin 0 -> 10583 bytes kcontrol/pics/cr128-app-fonts.png | Bin 0 -> 4531 bytes kcontrol/pics/cr128-app-help_index.png | Bin 0 -> 12683 bytes kcontrol/pics/cr128-app-hwinfo.png | Bin 0 -> 8659 bytes kcontrol/pics/cr128-app-kcmdevices.png | Bin 0 -> 10903 bytes kcontrol/pics/cr128-app-kcmdf.png | Bin 0 -> 11838 bytes kcontrol/pics/cr128-app-kcmkwm.png | Bin 0 -> 6787 bytes kcontrol/pics/cr128-app-kcmmemory.png | Bin 0 -> 14318 bytes kcontrol/pics/cr128-app-kcmpartitions.png | Bin 0 -> 16732 bytes kcontrol/pics/cr128-app-kcmpci.png | Bin 0 -> 5796 bytes kcontrol/pics/cr128-app-kdmconfig.png | Bin 0 -> 15977 bytes kcontrol/pics/cr128-app-key_bindings.png | Bin 0 -> 6037 bytes kcontrol/pics/cr128-app-kscreensaver.png | Bin 0 -> 7140 bytes kcontrol/pics/cr128-app-kthememgr.png | Bin 0 -> 10328 bytes kcontrol/pics/cr128-app-locale.png | Bin 0 -> 12910 bytes kcontrol/pics/cr128-app-looknfeel.png | Bin 0 -> 12473 bytes kcontrol/pics/cr128-app-multimedia.png | Bin 0 -> 12886 bytes kcontrol/pics/cr128-app-personal.png | Bin 0 -> 13247 bytes kcontrol/pics/cr128-app-proxy.png | Bin 0 -> 12824 bytes kcontrol/pics/cr128-app-samba.png | Bin 0 -> 7617 bytes kcontrol/pics/cr128-app-stylesheet.png | Bin 0 -> 6513 bytes kcontrol/pics/cr128-device-laptop.png | Bin 0 -> 13375 bytes kcontrol/pics/cr16-app-access.png | Bin 0 -> 1022 bytes kcontrol/pics/cr16-app-agent.png | Bin 0 -> 828 bytes kcontrol/pics/cr16-app-arts.png | Bin 0 -> 898 bytes kcontrol/pics/cr16-app-background.png | Bin 0 -> 733 bytes kcontrol/pics/cr16-app-bell.png | Bin 0 -> 639 bytes kcontrol/pics/cr16-app-cache.png | Bin 0 -> 823 bytes kcontrol/pics/cr16-app-clock.png | Bin 0 -> 875 bytes kcontrol/pics/cr16-app-colors.png | Bin 0 -> 857 bytes kcontrol/pics/cr16-app-cookie.png | Bin 0 -> 840 bytes kcontrol/pics/cr16-app-date.png | Bin 0 -> 871 bytes kcontrol/pics/cr16-app-energy.png | Bin 0 -> 869 bytes kcontrol/pics/cr16-app-energy_star.png | Bin 0 -> 708 bytes kcontrol/pics/cr16-app-enhanced_browsing.png | Bin 0 -> 726 bytes kcontrol/pics/cr16-app-filetypes.png | Bin 0 -> 954 bytes kcontrol/pics/cr16-app-fonts.png | Bin 0 -> 718 bytes kcontrol/pics/cr16-app-help_index.png | Bin 0 -> 975 bytes kcontrol/pics/cr16-app-hwinfo.png | Bin 0 -> 1092 bytes kcontrol/pics/cr16-app-icons.png | Bin 0 -> 927 bytes kcontrol/pics/cr16-app-iconthemes.png | Bin 0 -> 828 bytes kcontrol/pics/cr16-app-ieee1394.png | Bin 0 -> 668 bytes kcontrol/pics/cr16-app-input_devices_settings.png | Bin 0 -> 1035 bytes kcontrol/pics/cr16-app-kcmdevices.png | Bin 0 -> 879 bytes kcontrol/pics/cr16-app-kcmkicker.png | Bin 0 -> 805 bytes kcontrol/pics/cr16-app-kcmkwm.png | Bin 0 -> 714 bytes kcontrol/pics/cr16-app-kcmmemory.png | Bin 0 -> 931 bytes kcontrol/pics/cr16-app-kcmmidi.png | Bin 0 -> 582 bytes kcontrol/pics/cr16-app-kcmpartitions.png | Bin 0 -> 882 bytes kcontrol/pics/cr16-app-kcmpci.png | Bin 0 -> 836 bytes kcontrol/pics/cr16-app-kcmprocessor.png | Bin 0 -> 400 bytes kcontrol/pics/cr16-app-kcmscsi.png | Bin 0 -> 976 bytes kcontrol/pics/cr16-app-kcmsound.png | Bin 0 -> 988 bytes kcontrol/pics/cr16-app-kcmsystem.png | Bin 0 -> 903 bytes kcontrol/pics/cr16-app-kcmx.png | Bin 0 -> 790 bytes kcontrol/pics/cr16-app-kdmconfig.png | Bin 0 -> 868 bytes kcontrol/pics/cr16-app-key_bindings.png | Bin 0 -> 710 bytes kcontrol/pics/cr16-app-keyboard.png | Bin 0 -> 661 bytes kcontrol/pics/cr16-app-keyboard_layout.png | Bin 0 -> 871 bytes kcontrol/pics/cr16-app-knotify.png | Bin 0 -> 657 bytes kcontrol/pics/cr16-app-kscreensaver.png | Bin 0 -> 707 bytes kcontrol/pics/cr16-app-kthememgr.png | Bin 0 -> 939 bytes kcontrol/pics/cr16-app-locale.png | Bin 0 -> 811 bytes kcontrol/pics/cr16-app-looknfeel.png | Bin 0 -> 842 bytes kcontrol/pics/cr16-app-multimedia.png | Bin 0 -> 830 bytes kcontrol/pics/cr16-app-panel_settings.png | Bin 0 -> 933 bytes kcontrol/pics/cr16-app-personal.png | Bin 0 -> 753 bytes kcontrol/pics/cr16-app-proxy.png | Bin 0 -> 866 bytes kcontrol/pics/cr16-app-samba.png | Bin 0 -> 652 bytes kcontrol/pics/cr16-app-style.png | Bin 0 -> 907 bytes kcontrol/pics/cr16-app-stylesheet.png | Bin 0 -> 810 bytes kcontrol/pics/cr16-app-usb.png | Bin 0 -> 695 bytes kcontrol/pics/cr16-device-laptop.png | Bin 0 -> 883 bytes kcontrol/pics/cr22-app-access.png | Bin 0 -> 1030 bytes kcontrol/pics/cr22-app-agent.png | Bin 0 -> 1241 bytes kcontrol/pics/cr22-app-arts.png | Bin 0 -> 1244 bytes kcontrol/pics/cr22-app-background.png | Bin 0 -> 980 bytes kcontrol/pics/cr22-app-bell.png | Bin 0 -> 824 bytes kcontrol/pics/cr22-app-cache.png | Bin 0 -> 1192 bytes kcontrol/pics/cr22-app-colors.png | Bin 0 -> 1304 bytes kcontrol/pics/cr22-app-cookie.png | Bin 0 -> 1157 bytes kcontrol/pics/cr22-app-date.png | Bin 0 -> 1385 bytes kcontrol/pics/cr22-app-energy.png | Bin 0 -> 1316 bytes kcontrol/pics/cr22-app-enhanced_browsing.png | Bin 0 -> 948 bytes kcontrol/pics/cr22-app-filetypes.png | Bin 0 -> 1163 bytes kcontrol/pics/cr22-app-fonts.png | Bin 0 -> 952 bytes kcontrol/pics/cr22-app-hwinfo.png | Bin 0 -> 1288 bytes kcontrol/pics/cr22-app-icons.png | Bin 0 -> 1459 bytes kcontrol/pics/cr22-app-iconthemes.png | Bin 0 -> 1164 bytes kcontrol/pics/cr22-app-ieee1394.png | Bin 0 -> 953 bytes kcontrol/pics/cr22-app-kcmdevices.png | Bin 0 -> 1110 bytes kcontrol/pics/cr22-app-kcmkicker.png | Bin 0 -> 1017 bytes kcontrol/pics/cr22-app-kcmkwm.png | Bin 0 -> 969 bytes kcontrol/pics/cr22-app-kcmx.png | Bin 0 -> 1096 bytes kcontrol/pics/cr22-app-kdmconfig.png | Bin 0 -> 1363 bytes kcontrol/pics/cr22-app-key_bindings.png | Bin 0 -> 978 bytes kcontrol/pics/cr22-app-keyboard.png | Bin 0 -> 914 bytes kcontrol/pics/cr22-app-kscreensaver.png | Bin 0 -> 1058 bytes kcontrol/pics/cr22-app-kthememgr.png | Bin 0 -> 1104 bytes kcontrol/pics/cr22-app-locale.png | Bin 0 -> 1319 bytes kcontrol/pics/cr22-app-personal.png | Bin 0 -> 1238 bytes kcontrol/pics/cr22-app-proxy.png | Bin 0 -> 1500 bytes kcontrol/pics/cr22-app-samba.png | Bin 0 -> 928 bytes kcontrol/pics/cr22-app-style.png | Bin 0 -> 1098 bytes kcontrol/pics/cr22-app-stylesheet.png | Bin 0 -> 1059 bytes kcontrol/pics/cr22-device-laptop.png | Bin 0 -> 1383 bytes kcontrol/pics/cr32-app-access.png | Bin 0 -> 1619 bytes kcontrol/pics/cr32-app-agent.png | Bin 0 -> 2606 bytes kcontrol/pics/cr32-app-arts.png | Bin 0 -> 2164 bytes kcontrol/pics/cr32-app-background.png | Bin 0 -> 1787 bytes kcontrol/pics/cr32-app-bell.png | Bin 0 -> 1496 bytes kcontrol/pics/cr32-app-cache.png | Bin 0 -> 2063 bytes kcontrol/pics/cr32-app-clock.png | Bin 0 -> 2458 bytes kcontrol/pics/cr32-app-colors.png | Bin 0 -> 2295 bytes kcontrol/pics/cr32-app-cookie.png | Bin 0 -> 2524 bytes kcontrol/pics/cr32-app-date.png | Bin 0 -> 2478 bytes kcontrol/pics/cr32-app-energy.png | Bin 0 -> 2218 bytes kcontrol/pics/cr32-app-energy_star.png | Bin 0 -> 1935 bytes kcontrol/pics/cr32-app-enhanced_browsing.png | Bin 0 -> 1706 bytes kcontrol/pics/cr32-app-filetypes.png | Bin 0 -> 2130 bytes kcontrol/pics/cr32-app-fonts.png | Bin 0 -> 1336 bytes kcontrol/pics/cr32-app-help_index.png | Bin 0 -> 2130 bytes kcontrol/pics/cr32-app-hwinfo.png | Bin 0 -> 1838 bytes kcontrol/pics/cr32-app-icons.png | Bin 0 -> 2853 bytes kcontrol/pics/cr32-app-iconthemes.png | Bin 0 -> 2386 bytes kcontrol/pics/cr32-app-ieee1394.png | Bin 0 -> 1414 bytes kcontrol/pics/cr32-app-input_devices_settings.png | Bin 0 -> 2815 bytes kcontrol/pics/cr32-app-kcmdevices.png | Bin 0 -> 1825 bytes kcontrol/pics/cr32-app-kcmdrkonqi.png | Bin 0 -> 1834 bytes kcontrol/pics/cr32-app-kcmkicker.png | Bin 0 -> 1921 bytes kcontrol/pics/cr32-app-kcmkwm.png | Bin 0 -> 1405 bytes kcontrol/pics/cr32-app-kcmmemory.png | Bin 0 -> 2205 bytes kcontrol/pics/cr32-app-kcmmidi.png | Bin 0 -> 1160 bytes kcontrol/pics/cr32-app-kcmpartitions.png | Bin 0 -> 2481 bytes kcontrol/pics/cr32-app-kcmpci.png | Bin 0 -> 1319 bytes kcontrol/pics/cr32-app-kcmprocessor.png | Bin 0 -> 636 bytes kcontrol/pics/cr32-app-kcmscsi.png | Bin 0 -> 2538 bytes kcontrol/pics/cr32-app-kcmsound.png | Bin 0 -> 2465 bytes kcontrol/pics/cr32-app-kcmsystem.png | Bin 0 -> 2381 bytes kcontrol/pics/cr32-app-kcmx.png | Bin 0 -> 2169 bytes kcontrol/pics/cr32-app-kdmconfig.png | Bin 0 -> 2280 bytes kcontrol/pics/cr32-app-key_bindings.png | Bin 0 -> 1605 bytes kcontrol/pics/cr32-app-keyboard.png | Bin 0 -> 1372 bytes kcontrol/pics/cr32-app-keyboard_layout.png | Bin 0 -> 2413 bytes kcontrol/pics/cr32-app-knotify.png | Bin 0 -> 1488 bytes kcontrol/pics/cr32-app-kscreensaver.png | Bin 0 -> 1663 bytes kcontrol/pics/cr32-app-kthememgr.png | Bin 0 -> 1966 bytes kcontrol/pics/cr32-app-locale.png | Bin 0 -> 2252 bytes kcontrol/pics/cr32-app-looknfeel.png | Bin 0 -> 2135 bytes kcontrol/pics/cr32-app-multimedia.png | Bin 0 -> 1988 bytes kcontrol/pics/cr32-app-personal.png | Bin 0 -> 1914 bytes kcontrol/pics/cr32-app-proxy.png | Bin 0 -> 2225 bytes kcontrol/pics/cr32-app-samba.png | Bin 0 -> 1521 bytes kcontrol/pics/cr32-app-style.png | Bin 0 -> 1883 bytes kcontrol/pics/cr32-app-stylesheet.png | Bin 0 -> 1837 bytes kcontrol/pics/cr32-app-usb.png | Bin 0 -> 1889 bytes kcontrol/pics/cr32-device-laptop.png | Bin 0 -> 2473 bytes kcontrol/pics/cr48-app-access.png | Bin 0 -> 2605 bytes kcontrol/pics/cr48-app-agent.png | Bin 0 -> 4149 bytes kcontrol/pics/cr48-app-arts.png | Bin 0 -> 3746 bytes kcontrol/pics/cr48-app-background.png | Bin 0 -> 3242 bytes kcontrol/pics/cr48-app-bell.png | Bin 0 -> 2287 bytes kcontrol/pics/cr48-app-cache.png | Bin 0 -> 3350 bytes kcontrol/pics/cr48-app-clock.png | Bin 0 -> 4736 bytes kcontrol/pics/cr48-app-colors.png | Bin 0 -> 4226 bytes kcontrol/pics/cr48-app-cookie.png | Bin 0 -> 4296 bytes kcontrol/pics/cr48-app-date.png | Bin 0 -> 4593 bytes kcontrol/pics/cr48-app-energy.png | Bin 0 -> 3913 bytes kcontrol/pics/cr48-app-energy_star.png | Bin 0 -> 3573 bytes kcontrol/pics/cr48-app-enhanced_browsing.png | Bin 0 -> 2844 bytes kcontrol/pics/cr48-app-filetypes.png | Bin 0 -> 3368 bytes kcontrol/pics/cr48-app-fonts.png | Bin 0 -> 1833 bytes kcontrol/pics/cr48-app-help_index.png | Bin 0 -> 3812 bytes kcontrol/pics/cr48-app-hwinfo.png | Bin 0 -> 2955 bytes kcontrol/pics/cr48-app-icons.png | Bin 0 -> 4794 bytes kcontrol/pics/cr48-app-iconthemes.png | Bin 0 -> 3371 bytes kcontrol/pics/cr48-app-ieee1394.png | Bin 0 -> 2158 bytes kcontrol/pics/cr48-app-input_devices_settings.png | Bin 0 -> 3451 bytes kcontrol/pics/cr48-app-kcmdevices.png | Bin 0 -> 3452 bytes kcontrol/pics/cr48-app-kcmdf.png | Bin 0 -> 3510 bytes kcontrol/pics/cr48-app-kcmdrkonqi.png | Bin 0 -> 2647 bytes kcontrol/pics/cr48-app-kcmkwm.png | Bin 0 -> 2253 bytes kcontrol/pics/cr48-app-kcmmemory.png | Bin 0 -> 4100 bytes kcontrol/pics/cr48-app-kcmmidi.png | Bin 0 -> 1639 bytes kcontrol/pics/cr48-app-kcmopengl.png | Bin 0 -> 1129 bytes kcontrol/pics/cr48-app-kcmpartitions.png | Bin 0 -> 4689 bytes kcontrol/pics/cr48-app-kcmpci.png | Bin 0 -> 2140 bytes kcontrol/pics/cr48-app-kcmprocessor.png | Bin 0 -> 966 bytes kcontrol/pics/cr48-app-kcmscsi.png | Bin 0 -> 3977 bytes kcontrol/pics/cr48-app-kcmsystem.png | Bin 0 -> 4135 bytes kcontrol/pics/cr48-app-kcmx.png | Bin 0 -> 3747 bytes kcontrol/pics/cr48-app-kdmconfig.png | Bin 0 -> 4151 bytes kcontrol/pics/cr48-app-key_bindings.png | Bin 0 -> 2569 bytes kcontrol/pics/cr48-app-keyboard.png | Bin 0 -> 2195 bytes kcontrol/pics/cr48-app-keyboard_layout.png | Bin 0 -> 4266 bytes kcontrol/pics/cr48-app-knotify.png | Bin 0 -> 2357 bytes kcontrol/pics/cr48-app-kscreensaver.png | Bin 0 -> 2777 bytes kcontrol/pics/cr48-app-kthememgr.png | Bin 0 -> 3115 bytes kcontrol/pics/cr48-app-locale.png | Bin 0 -> 4018 bytes kcontrol/pics/cr48-app-looknfeel.png | Bin 0 -> 3829 bytes kcontrol/pics/cr48-app-multimedia.png | Bin 0 -> 3703 bytes kcontrol/pics/cr48-app-personal.png | Bin 0 -> 3404 bytes kcontrol/pics/cr48-app-proxy.png | Bin 0 -> 3921 bytes kcontrol/pics/cr48-app-samba.png | Bin 0 -> 2401 bytes kcontrol/pics/cr48-app-style.png | Bin 0 -> 3110 bytes kcontrol/pics/cr48-app-stylesheet.png | Bin 0 -> 3179 bytes kcontrol/pics/cr48-app-usb.png | Bin 0 -> 3134 bytes kcontrol/pics/cr48-device-laptop.png | Bin 0 -> 4220 bytes kcontrol/pics/cr64-app-access.png | Bin 0 -> 3637 bytes kcontrol/pics/cr64-app-arts.png | Bin 0 -> 5198 bytes kcontrol/pics/cr64-app-background.png | Bin 0 -> 4447 bytes kcontrol/pics/cr64-app-bell.png | Bin 0 -> 3238 bytes kcontrol/pics/cr64-app-cache.png | Bin 0 -> 4681 bytes kcontrol/pics/cr64-app-clock.png | Bin 0 -> 7240 bytes kcontrol/pics/cr64-app-colors.png | Bin 0 -> 5874 bytes kcontrol/pics/cr64-app-cookie.png | Bin 0 -> 5950 bytes kcontrol/pics/cr64-app-date.png | Bin 0 -> 6801 bytes kcontrol/pics/cr64-app-energy.png | Bin 0 -> 5681 bytes kcontrol/pics/cr64-app-energy_star.png | Bin 0 -> 5336 bytes kcontrol/pics/cr64-app-enhanced_browsing.png | Bin 0 -> 4165 bytes kcontrol/pics/cr64-app-filetypes.png | Bin 0 -> 4782 bytes kcontrol/pics/cr64-app-fonts.png | Bin 0 -> 2896 bytes kcontrol/pics/cr64-app-help_index.png | Bin 0 -> 5648 bytes kcontrol/pics/cr64-app-hwinfo.png | Bin 0 -> 4142 bytes kcontrol/pics/cr64-app-icons.png | Bin 0 -> 7051 bytes kcontrol/pics/cr64-app-ieee1394.png | Bin 0 -> 2891 bytes kcontrol/pics/cr64-app-kcmdevices.png | Bin 0 -> 4255 bytes kcontrol/pics/cr64-app-kcmdf.png | Bin 0 -> 5185 bytes kcontrol/pics/cr64-app-kcmkwm.png | Bin 0 -> 3091 bytes kcontrol/pics/cr64-app-kcmmemory.png | Bin 0 -> 6001 bytes kcontrol/pics/cr64-app-kcmpartitions.png | Bin 0 -> 6844 bytes kcontrol/pics/cr64-app-kcmpci.png | Bin 0 -> 2743 bytes kcontrol/pics/cr64-app-kcmx.png | Bin 0 -> 5495 bytes kcontrol/pics/cr64-app-kdmconfig.png | Bin 0 -> 6154 bytes kcontrol/pics/cr64-app-key_bindings.png | Bin 0 -> 3430 bytes kcontrol/pics/cr64-app-knotify.png | Bin 0 -> 3285 bytes kcontrol/pics/cr64-app-kscreensaver.png | Bin 0 -> 3703 bytes kcontrol/pics/cr64-app-kthememgr.png | Bin 0 -> 4511 bytes kcontrol/pics/cr64-app-locale.png | Bin 0 -> 5906 bytes kcontrol/pics/cr64-app-looknfeel.png | Bin 0 -> 5513 bytes kcontrol/pics/cr64-app-multimedia.png | Bin 0 -> 5049 bytes kcontrol/pics/cr64-app-personal.png | Bin 0 -> 5046 bytes kcontrol/pics/cr64-app-proxy.png | Bin 0 -> 5870 bytes kcontrol/pics/cr64-app-samba.png | Bin 0 -> 3319 bytes kcontrol/pics/cr64-app-style.png | Bin 0 -> 5292 bytes kcontrol/pics/cr64-app-stylesheet.png | Bin 0 -> 4585 bytes kcontrol/pics/cr64-device-laptop.png | Bin 0 -> 5504 bytes kcontrol/pics/crsc-app-access.svgz | Bin 0 -> 2559 bytes kcontrol/pics/crsc-app-arts.svgz | Bin 0 -> 2884 bytes kcontrol/pics/crsc-app-background.svgz | Bin 0 -> 9032 bytes kcontrol/pics/crsc-app-bell.svgz | Bin 0 -> 3516 bytes kcontrol/pics/crsc-app-cache.svgz | Bin 0 -> 2696 bytes kcontrol/pics/crsc-app-colors.svgz | Bin 0 -> 7567 bytes kcontrol/pics/crsc-app-date.svgz | Bin 0 -> 12432 bytes kcontrol/pics/crsc-app-energy.svgz | Bin 0 -> 9841 bytes kcontrol/pics/crsc-app-filetypes.svgz | Bin 0 -> 3124 bytes kcontrol/pics/crsc-app-fonts.svgz | Bin 0 -> 4054 bytes kcontrol/pics/crsc-app-hwinfo.svgz | Bin 0 -> 5097 bytes kcontrol/pics/crsc-app-ieee1394.svgz | Bin 0 -> 3273 bytes kcontrol/pics/crsc-app-kcmdevices.svgz | Bin 0 -> 3194 bytes kcontrol/pics/crsc-app-kcmkwm.svgz | Bin 0 -> 3078 bytes kcontrol/pics/crsc-app-kcmx.svgz | Bin 0 -> 2005 bytes kcontrol/pics/crsc-app-locale.svgz | Bin 0 -> 5561 bytes kcontrol/pics/crsc-app-samba.svgz | Bin 0 -> 4802 bytes kcontrol/pics/crsc-app-stylesheet.svgz | Bin 0 -> 3348 bytes kcontrol/pics/crsc-device-laptop.svgz | Bin 0 -> 4418 bytes kcontrol/privacy/Makefile.am | 16 + kcontrol/privacy/kcmprivacydialog.ui | 201 + kcontrol/privacy/kprivacymanager.cpp | 169 + kcontrol/privacy/kprivacymanager.h | 55 + kcontrol/privacy/kprivacysettings.ui | 308 + kcontrol/privacy/privacy.cpp | 319 + kcontrol/privacy/privacy.desktop | 204 + kcontrol/privacy/privacy.h | 74 + kcontrol/randr/Makefile.am | 36 + kcontrol/randr/TODO | 14 + kcontrol/randr/configure.in.in | 18 + kcontrol/randr/krandrapp.cpp | 40 + kcontrol/randr/krandrapp.h | 39 + kcontrol/randr/krandrinithack.cpp | 0 kcontrol/randr/krandrmodule.cpp | 364 + kcontrol/randr/krandrmodule.h | 68 + kcontrol/randr/krandrpassivepopup.cpp | 118 + kcontrol/randr/krandrpassivepopup.h | 47 + kcontrol/randr/krandrtray.cpp | 253 + kcontrol/randr/krandrtray.desktop | 141 + kcontrol/randr/krandrtray.h | 60 + kcontrol/randr/ktimerdialog.cpp | 205 + kcontrol/randr/ktimerdialog.h | 170 + kcontrol/randr/main.cpp | 51 + kcontrol/randr/randr.cpp | 703 + kcontrol/randr/randr.desktop | 216 + kcontrol/randr/randr.h | 235 + kcontrol/samba/AUTHORS | 32 + kcontrol/samba/Makefile.am | 15 + kcontrol/samba/kcmsambaimports.cpp | 95 + kcontrol/samba/kcmsambaimports.h | 47 + kcontrol/samba/kcmsambalog.cpp | 253 + kcontrol/samba/kcmsambalog.h | 86 + kcontrol/samba/kcmsambastatistics.cpp | 289 + kcontrol/samba/kcmsambastatistics.h | 106 + kcontrol/samba/ksmbstatus.cpp | 225 + kcontrol/samba/ksmbstatus.h | 65 + kcontrol/samba/main.cpp | 119 + kcontrol/samba/smbstatus.desktop | 241 + kcontrol/screensaver/Makefile.am | 20 + kcontrol/screensaver/advanceddialog.cpp | 174 + kcontrol/screensaver/advanceddialog.h | 61 + kcontrol/screensaver/advanceddialogimpl.ui | 397 + kcontrol/screensaver/category_list | 16 + kcontrol/screensaver/configure.in.in | 8 + kcontrol/screensaver/kssmonitor.h | 15 + kcontrol/screensaver/kswidget.cpp | 71 + kcontrol/screensaver/kswidget.h | 17 + kcontrol/screensaver/saverconfig.cpp | 38 + kcontrol/screensaver/saverconfig.h | 29 + kcontrol/screensaver/saverlist.cpp | 13 + kcontrol/screensaver/saverlist.h | 14 + kcontrol/screensaver/screensaver.desktop | 240 + kcontrol/screensaver/scrnsave.cpp | 862 + kcontrol/screensaver/scrnsave.h | 113 + kcontrol/screensaver/testwin.cpp | 13 + kcontrol/screensaver/testwin.h | 14 + kcontrol/smartcard/Makefile.am | 17 + kcontrol/smartcard/configure.in.in | 3 + kcontrol/smartcard/nosmartcardbase.ui | 81 + kcontrol/smartcard/smartcard.cpp | 400 + kcontrol/smartcard/smartcard.desktop | 212 + kcontrol/smartcard/smartcard.h | 89 + kcontrol/smartcard/smartcardbase.ui | 310 + kcontrol/smserver/Makefile.am | 17 + kcontrol/smserver/kcmsmserver.cpp | 134 + kcontrol/smserver/kcmsmserver.desktop | 236 + kcontrol/smserver/kcmsmserver.h | 46 + kcontrol/smserver/smserverconfigdlg.ui | 248 + kcontrol/smserver/smserverconfigimpl.cpp | 31 + kcontrol/smserver/smserverconfigimpl.h | 41 + kcontrol/spellchecking/Makefile.am | 16 + kcontrol/spellchecking/spellchecking.cpp | 74 + kcontrol/spellchecking/spellchecking.desktop | 232 + kcontrol/spellchecking/spellchecking.h | 41 + kcontrol/structure | 21 + kcontrol/style/Makefile.am | 18 + kcontrol/style/kcmstyle.cpp | 1070 + kcontrol/style/kcmstyle.h | 163 + kcontrol/style/keramik/Makefile.am | 12 + kcontrol/style/keramik/keramikconf.cpp | 103 + kcontrol/style/keramik/keramikconf.h | 62 + kcontrol/style/main.cpp | 16 + kcontrol/style/menupreview.cpp | 166 + kcontrol/style/menupreview.h | 61 + kcontrol/style/style.desktop | 234 + kcontrol/style/styleconfdialog.cpp | 46 + kcontrol/style/styleconfdialog.h | 46 + kcontrol/style/stylepreview.ui | 285 + kcontrol/style/stylepreview.ui.h | 69 + kcontrol/taskbar/Makefile.am | 21 + kcontrol/taskbar/kcmtaskbar.cpp | 291 + kcontrol/taskbar/kcmtaskbar.desktop | 229 + kcontrol/taskbar/kcmtaskbar.h | 79 + kcontrol/taskbar/kcmtaskbarui.ui | 482 + kcontrol/taskbar/uninstall.desktop | 2 + kcontrol/usbview/Makefile.am | 21 + kcontrol/usbview/classes.i18n | 48 + kcontrol/usbview/configure.in.in | 16 + kcontrol/usbview/kcmusb.cpp | 192 + kcontrol/usbview/kcmusb.desktop | 240 + kcontrol/usbview/kcmusb.h | 47 + kcontrol/usbview/usb.ids | 6430 ++ kcontrol/usbview/usbdb.cpp | 150 + kcontrol/usbview/usbdb.h | 39 + kcontrol/usbview/usbdevices.cpp | 431 + kcontrol/usbview/usbdevices.h | 75 + kcontrol/view1394/Makefile.am | 19 + kcontrol/view1394/README | 13 + kcontrol/view1394/configure.in.in | 15 + kcontrol/view1394/kcmview1394.desktop | 219 + kcontrol/view1394/oui.db | 7965 ++ kcontrol/view1394/view1394.cpp | 334 + kcontrol/view1394/view1394.h | 67 + kcontrol/view1394/view1394widget.ui | 186 + kcontrol/xinerama/Makefile.am | 18 + kcontrol/xinerama/kcmxinerama.cpp | 254 + kcontrol/xinerama/kcmxinerama.h | 62 + kcontrol/xinerama/xinerama.desktop | 202 + kcontrol/xinerama/xineramawidget.ui | 326 + kcontrol/xinerama/xineramawidget.ui.h | 14 + kdcop/Makefile.am | 23 + kdcop/README | 11 + kdcop/kdcop.cpp | 37 + kdcop/kdcoplistview.cpp | 157 + kdcop/kdcoplistview.h | 133 + kdcop/kdcopui.rc | 15 + kdcop/kdcopview.ui | 149 + kdcop/kdcopwindow.cpp | 1238 + kdcop/kdcopwindow.h | 64 + kde.pamd | 7 + kde3 | 9 + kdebase.lsm | 11 + kdebugdialog/Makefile.am | 16 + kdebugdialog/README | 12 + kdebugdialog/kabstractdebugdialog.cpp | 85 + kdebugdialog/kabstractdebugdialog.h | 54 + kdebugdialog/kdebugdialog.cpp | 260 + kdebugdialog/kdebugdialog.h | 93 + kdebugdialog/klistdebugdialog.cpp | 193 + kdebugdialog/klistdebugdialog.h | 65 + kdebugdialog/main.cpp | 124 + kdeeject/Makefile.am | 1 + kdeeject/kdeeject | 40 + kdepasswd/LICENSE.readme | 124 + kdepasswd/Makefile.am | 17 + kdepasswd/README | 3 + kdepasswd/kcm/Makefile.am | 20 + kdepasswd/kcm/README | 27 + kdepasswd/kcm/chfacedlg.cpp | 188 + kdepasswd/kcm/chfacedlg.h | 69 + kdepasswd/kcm/chfnprocess.cpp | 100 + kdepasswd/kcm/chfnprocess.h | 33 + kdepasswd/kcm/kcm_useraccount.desktop | 203 + kdepasswd/kcm/kcm_useraccount.kcfg | 44 + kdepasswd/kcm/kcm_useraccount_pass.kcfg | 21 + kdepasswd/kcm/main.cpp | 344 + kdepasswd/kcm/main.h | 79 + kdepasswd/kcm/main_widget.ui | 294 + kdepasswd/kcm/pass.kcfgc | 5 + kdepasswd/kcm/pics/Apple.png | Bin 0 -> 3749 bytes kdepasswd/kcm/pics/BeachBall.png | Bin 0 -> 4104 bytes kdepasswd/kcm/pics/Blowfish.png | Bin 0 -> 5031 bytes kdepasswd/kcm/pics/Bug.png | Bin 0 -> 4304 bytes kdepasswd/kcm/pics/Butterfly.png | Bin 0 -> 4952 bytes kdepasswd/kcm/pics/CREDITS | 21 + kdepasswd/kcm/pics/Car.png | Bin 0 -> 4602 bytes kdepasswd/kcm/pics/Cow.png | Bin 0 -> 6275 bytes kdepasswd/kcm/pics/Daemon.png | Bin 0 -> 5642 bytes kdepasswd/kcm/pics/Dog.png | Bin 0 -> 5637 bytes kdepasswd/kcm/pics/Elephant.png | Bin 0 -> 6384 bytes kdepasswd/kcm/pics/Flower.png | Bin 0 -> 4423 bytes kdepasswd/kcm/pics/Frog.png | Bin 0 -> 4511 bytes kdepasswd/kcm/pics/Ghost.png | Bin 0 -> 4752 bytes kdepasswd/kcm/pics/Guitar.png | Bin 0 -> 4622 bytes kdepasswd/kcm/pics/Heart.png | Bin 0 -> 3778 bytes kdepasswd/kcm/pics/Konqui.png | Bin 0 -> 5652 bytes kdepasswd/kcm/pics/Lion.png | Bin 0 -> 7820 bytes kdepasswd/kcm/pics/Makefile.am | 10 + kdepasswd/kcm/pics/Monkey.png | Bin 0 -> 5479 bytes kdepasswd/kcm/pics/Penguin.png | Bin 0 -> 4829 bytes kdepasswd/kcm/pics/Pig.png | Bin 0 -> 6057 bytes kdepasswd/kcm/pics/Rabbit.png | Bin 0 -> 4834 bytes kdepasswd/kcm/pics/Ring.png | Bin 0 -> 5143 bytes kdepasswd/kcm/pics/Scream.png | Bin 0 -> 5543 bytes kdepasswd/kcm/pics/Shark.png | Bin 0 -> 4224 bytes kdepasswd/kcm/pics/Splash.png | Bin 0 -> 4847 bytes kdepasswd/kcm/pics/Star.png | Bin 0 -> 2991 bytes kdepasswd/kcm/pics/Teddybear.png | Bin 0 -> 5580 bytes kdepasswd/kcm/pics/Turtle.png | Bin 0 -> 5208 bytes kdepasswd/kcm/settings.kcfgc | 5 + kdepasswd/kdepasswd.cpp | 79 + kdepasswd/kdepasswd.desktop | 80 + kdepasswd/passwd.cpp | 284 + kdepasswd/passwd.h | 43 + kdepasswd/passwddlg.cpp | 169 + kdepasswd/passwddlg.h | 49 + kdeprint/Makefile.am | 1 + kdeprint/configure.in.in | 1 + kdeprint/descriptions/Makefile.am | 24 + kdeprint/descriptions/printers.cpp | 7084 ++ kdeprint/descriptions/readppd | 83 + kdeprint/descriptions/sortthem.cpp | 28 + kdeprint/kdeprint_part/Makefile.am | 24 + kdeprint/kdeprint_part/kdeprint_part.desktop | 85 + kdeprint/kdeprint_part/kdeprint_part.rc | 28 + kdeprint/kdeprint_part/printpart.cpp | 81 + kdeprint/kdeprint_part/printpart.h | 59 + kdeprint/kdeprintfax/Makefile.am | 23 + kdeprint/kdeprintfax/anytops | 98 + kdeprint/kdeprintfax/conffax.cpp | 80 + kdeprint/kdeprintfax/conffax.h | 40 + kdeprint/kdeprintfax/conffilters.cpp | 192 + kdeprint/kdeprintfax/conffilters.h | 48 + kdeprint/kdeprintfax/confgeneral.cpp | 90 + kdeprint/kdeprintfax/confgeneral.h | 43 + kdeprint/kdeprintfax/configdlg.cpp | 75 + kdeprint/kdeprintfax/configdlg.h | 48 + kdeprint/kdeprintfax/confsystem.cpp | 199 + kdeprint/kdeprintfax/confsystem.h | 50 + kdeprint/kdeprintfax/cr16-action-abentry.png | Bin 0 -> 864 bytes kdeprint/kdeprintfax/defcmds.cpp | 38 + kdeprint/kdeprintfax/defcmds.h | 32 + kdeprint/kdeprintfax/faxab.cpp | 212 + kdeprint/kdeprintfax/faxab.h | 64 + kdeprint/kdeprintfax/faxctrl.cpp | 669 + kdeprint/kdeprintfax/faxctrl.h | 73 + kdeprint/kdeprintfax/faxfilters | 3 + kdeprint/kdeprintfax/filterdlg.cpp | 72 + kdeprint/kdeprintfax/filterdlg.h | 41 + kdeprint/kdeprintfax/hi128-app-kdeprintfax.png | Bin 0 -> 10612 bytes kdeprint/kdeprintfax/hi16-app-kdeprintfax.png | Bin 0 -> 787 bytes kdeprint/kdeprintfax/hi22-app-kdeprintfax.png | Bin 0 -> 1241 bytes kdeprint/kdeprintfax/hi32-app-kdeprintfax.png | Bin 0 -> 1928 bytes kdeprint/kdeprintfax/hi48-app-kdeprintfax.png | Bin 0 -> 3352 bytes kdeprint/kdeprintfax/hi64-app-kdeprintfax.png | Bin 0 -> 4669 bytes kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz | Bin 0 -> 11876 bytes kdeprint/kdeprintfax/kdeprintfax.cpp | 607 + kdeprint/kdeprintfax/kdeprintfax.desktop | 97 + kdeprint/kdeprintfax/kdeprintfax.h | 115 + kdeprint/kdeprintfax/kdeprintfaxui.rc | 31 + kdeprint/kdeprintfax/main.cpp | 78 + kdeprint/kjobviewer/Makefile.am | 24 + kdeprint/kjobviewer/hi128-app-kjobviewer.png | Bin 0 -> 8472 bytes kdeprint/kjobviewer/hi16-app-kjobviewer.png | Bin 0 -> 684 bytes kdeprint/kjobviewer/hi22-app-kjobviewer.png | Bin 0 -> 1003 bytes kdeprint/kjobviewer/hi32-app-kjobviewer.png | Bin 0 -> 1633 bytes kdeprint/kjobviewer/hi48-app-kjobviewer.png | Bin 0 -> 2588 bytes kdeprint/kjobviewer/hi64-app-kjobviewer.png | Bin 0 -> 3720 bytes kdeprint/kjobviewer/hisc-app-kjobviewer.svgz | Bin 0 -> 17679 bytes kdeprint/kjobviewer/kjobviewer.cpp | 233 + kdeprint/kjobviewer/kjobviewer.desktop | 92 + kdeprint/kjobviewer/kjobviewer.h | 57 + kdeprint/kjobviewer/kjobviewerui.rc | 35 + kdeprint/kjobviewer/main.cpp | 49 + kdeprint/kprinter/Makefile.am | 18 + kdeprint/kprinter/configure.in.in | 1 + kdeprint/kprinter/kprinter.desktop | 107 + kdeprint/kprinter/main.cpp | 58 + kdeprint/kprinter/printwrapper.cpp | 403 + kdeprint/kprinter/printwrapper.h | 49 + kdeprint/printmgr/Makefile.am | 18 + kdeprint/printmgr/hi128-app-printmgr.png | Bin 0 -> 8472 bytes kdeprint/printmgr/hi16-app-printmgr.png | Bin 0 -> 684 bytes kdeprint/printmgr/hi22-app-printmgr.png | Bin 0 -> 1003 bytes kdeprint/printmgr/hi32-app-printmgr.png | Bin 0 -> 1633 bytes kdeprint/printmgr/hi48-app-printmgr.png | Bin 0 -> 2588 bytes kdeprint/printmgr/hi64-app-printmgr.png | Bin 0 -> 3720 bytes kdeprint/printmgr/hisc-app-printmgr.svgz | Bin 0 -> 17679 bytes kdeprint/printmgr/kcmprintmgr.cpp | 73 + kdeprint/printmgr/kcmprintmgr.h | 39 + kdeprint/printmgr/printers.desktop | 235 + kdeprint/slave/Makefile.am | 22 + kdeprint/slave/kio_print.cpp | 920 + kdeprint/slave/kio_print.h | 70 + kdeprint/slave/mimetypes/Makefile.am | 3 + kdeprint/slave/mimetypes/class.desktop | 75 + kdeprint/slave/mimetypes/driver.desktop | 76 + kdeprint/slave/mimetypes/folder.desktop | 76 + kdeprint/slave/mimetypes/jobs.desktop | 85 + kdeprint/slave/mimetypes/manager.desktop | 87 + kdeprint/slave/mimetypes/printer.desktop | 79 + kdeprint/slave/mimetypes/printermodel.desktop | 78 + kdeprint/slave/print.protocol | 15 + kdeprint/slave/printdb.protocol | 14 + kdeprint/slave/templates/Makefile.am | 31 + kdeprint/slave/templates/bar-bottom-left.png | Bin 0 -> 369 bytes kdeprint/slave/templates/bar-bottom-middle.png | Bin 0 -> 160 bytes kdeprint/slave/templates/bar-bottom-right.png | Bin 0 -> 346 bytes kdeprint/slave/templates/bar-middle-left.png | Bin 0 -> 126 bytes kdeprint/slave/templates/bar-middle-right.png | Bin 0 -> 141 bytes kdeprint/slave/templates/bar-top-left.png | Bin 0 -> 358 bytes kdeprint/slave/templates/bar-top-middle.png | Bin 0 -> 145 bytes kdeprint/slave/templates/bar-top-right.png | Bin 0 -> 359 bytes kdeprint/slave/templates/bottom-left.png | Bin 0 -> 665 bytes kdeprint/slave/templates/bottom-middle.png | Bin 0 -> 174 bytes kdeprint/slave/templates/bottom-right.png | Bin 0 -> 4922 bytes kdeprint/slave/templates/box-bottom-left.png | Bin 0 -> 616 bytes kdeprint/slave/templates/box-bottom-middle.png | Bin 0 -> 171 bytes kdeprint/slave/templates/box-bottom-right.png | Bin 0 -> 578 bytes kdeprint/slave/templates/box-centre-kdeprint.png | Bin 0 -> 9633 bytes kdeprint/slave/templates/box-middle-left.png | Bin 0 -> 157 bytes kdeprint/slave/templates/box-middle-right.png | Bin 0 -> 161 bytes kdeprint/slave/templates/box-top-left.png | Bin 0 -> 673 bytes kdeprint/slave/templates/box-top-middle.png | Bin 0 -> 181 bytes kdeprint/slave/templates/box-top-right.png | Bin 0 -> 679 bytes kdeprint/slave/templates/class.template | 188 + kdeprint/slave/templates/driver.template | 133 + kdeprint/slave/templates/htmlstyles.css | 38 + kdeprint/slave/templates/jobs.template | 140 + kdeprint/slave/templates/printer.template | 205 + kdeprint/slave/templates/pseudo.template | 188 + kdeprint/slave/templates/top-left.png | Bin 0 -> 15484 bytes kdeprint/slave/templates/top-middle.png | Bin 0 -> 233 bytes kdeprint/slave/templates/top-right-kdeprint.png | Bin 0 -> 13466 bytes kdesktop/AUTHORS | 4 + kdesktop/DESIGN | 94 + kdesktop/KBackgroundIface.h | 75 + kdesktop/KDesktopIface.h | 113 + kdesktop/KScreensaverIface.h | 49 + kdesktop/Makefile.am | 71 + kdesktop/bgmanager.cc | 811 + kdesktop/bgmanager.h | 126 + kdesktop/configure.in.in | 39 + kdesktop/desktop.cc | 986 + kdesktop/desktop.h | 212 + kdesktop/init.cc | 247 + kdesktop/init.h | 30 + kdesktop/init/Home.desktop | 166 + kdesktop/init/Makefile.am | 8 + kdesktop/init/System.desktop | 149 + kdesktop/init/Templates/CAMERA-Device.desktop | 7 + kdesktop/init/Templates/CDROM-Device.desktop | 92 + kdesktop/init/Templates/CDWRITER-Device.desktop | 92 + kdesktop/init/Templates/DVDROM-Device.desktop | 92 + kdesktop/init/Templates/Directory.desktop | 146 + kdesktop/init/Templates/Floppy.desktop | 78 + kdesktop/init/Templates/HD.desktop | 7 + kdesktop/init/Templates/HTMLFile.desktop | 148 + kdesktop/init/Templates/HTMLFile.html | 8 + kdesktop/init/Templates/MO-Device.desktop | 7 + kdesktop/init/Templates/Makefile.am | 21 + kdesktop/init/Templates/NFS.desktop | 7 + kdesktop/init/Templates/Program.desktop | 6 + kdesktop/init/Templates/TextFile.desktop | 148 + kdesktop/init/Templates/TextFile.txt | 1 + kdesktop/init/Templates/URL.desktop | 3 + kdesktop/init/Templates/ZIP-Device.desktop | 92 + kdesktop/init/Templates/linkCAMERA.desktop | 150 + kdesktop/init/Templates/linkCDROM.desktop | 150 + kdesktop/init/Templates/linkCDWRITER.desktop | 150 + kdesktop/init/Templates/linkDVDROM.desktop | 150 + kdesktop/init/Templates/linkFloppy.desktop | 158 + kdesktop/init/Templates/linkHD.desktop | 157 + kdesktop/init/Templates/linkMO.desktop | 150 + kdesktop/init/Templates/linkNFS.desktop | 91 + kdesktop/init/Templates/linkProgram.desktop | 153 + kdesktop/init/Templates/linkURL.desktop | 153 + kdesktop/init/Templates/linkZIP.desktop | 150 + kdesktop/init/directory.autostart | 68 + kdesktop/init/directory.desktop | 81 + kdesktop/init/directory.templates | 78 + kdesktop/init/directory.trash | 160 + kdesktop/kcheckrunning.cpp | 29 + kdesktop/kcustommenu.cc | 111 + kdesktop/kcustommenu.h | 56 + kdesktop/kdesktop.desktop | 85 + kdesktop/kdesktop.kcfg | 370 + kdesktop/kdesktopSetAsBackground.desktop | 210 + kdesktop/kdesktop_custom_menu1 | 2 + kdesktop/kdesktop_custom_menu2 | 2 + kdesktop/kdesktopbindings.cpp | 47 + kdesktop/kdesktopsettings.kcfgc | 4 + kdesktop/kdesktopshadowsettings.cpp | 92 + kdesktop/kdesktopshadowsettings.h | 117 + kdesktop/kdiconview.cc | 1668 + kdesktop/kdiconview.h | 256 + kdesktop/kfileividesktop.cpp | 255 + kdesktop/kfileividesktop.h | 127 + kdesktop/klaunch.kcfg | 40 + kdesktop/klaunchsettings.kcfgc | 4 + kdesktop/krootwm.cc | 859 + kdesktop/krootwm.h | 175 + kdesktop/kshadowengine.cpp | 194 + kdesktop/kshadowengine.h | 113 + kdesktop/kshadowsettings.cpp | 182 + kdesktop/kshadowsettings.h | 234 + kdesktop/kwebdesktop/Makefile.am | 15 + kdesktop/kwebdesktop/kwebdesktop.cpp | 191 + kdesktop/kwebdesktop/kwebdesktop.desktop | 80 + kdesktop/kwebdesktop/kwebdesktop.h | 70 + kdesktop/kwebdesktop/kwebdesktop.kcfg | 19 + kdesktop/kwebdesktop/kwebdesktopsettings.kcfgc | 4 + kdesktop/lock/Makefile.am | 24 + kdesktop/lock/autologout.cc | 115 + kdesktop/lock/autologout.h | 51 + kdesktop/lock/configure.in.in | 37 + kdesktop/lock/lockdlg.cc | 720 + kdesktop/lock/lockdlg.h | 92 + kdesktop/lock/lockprocess.cc | 1172 + kdesktop/lock/lockprocess.h | 131 + kdesktop/lock/main.cc | 174 + kdesktop/lock/main.h | 39 + kdesktop/lockeng.cc | 371 + kdesktop/lockeng.h | 113 + kdesktop/main.cc | 215 + kdesktop/minicli.cpp | 886 + kdesktop/minicli.h | 112 + kdesktop/minicli_ui.ui | 624 + kdesktop/patterns/Makefile.am | 5 + kdesktop/patterns/fish.desktop | 74 + kdesktop/patterns/fish.png | Bin 0 -> 246 bytes kdesktop/patterns/flowers.desktop | 79 + kdesktop/patterns/flowers.png | Bin 0 -> 246 bytes kdesktop/patterns/night-rock.desktop | 75 + kdesktop/patterns/night-rock.jpg | Bin 0 -> 30425 bytes kdesktop/patterns/pavement.desktop | 75 + kdesktop/patterns/pavement.png | Bin 0 -> 241 bytes kdesktop/patterns/rattan.desktop | 40 + kdesktop/patterns/rattan.png | Bin 0 -> 245 bytes kdesktop/patterns/stonewall2.desktop | 76 + kdesktop/patterns/stonewall2.png | Bin 0 -> 42047 bytes kdesktop/patterns/triangles.desktop | 76 + kdesktop/patterns/triangles.png | Bin 0 -> 246 bytes kdesktop/pics/Makefile.am | 9 + kdesktop/pics/cr32-app-error.png | Bin 0 -> 1591 bytes kdesktop/pics/kde2.xbm | 38 + kdesktop/pics/ksslogo.png | Bin 0 -> 6357 bytes kdesktop/pics/splash.png | Bin 0 -> 98647 bytes kdesktop/pics/splash2.png | Bin 0 -> 211370 bytes kdesktop/pixmapserver.cc | 254 + kdesktop/pixmapserver.h | 124 + kdesktop/programs/Makefile.am | 2 + kdesktop/programs/xearth.desktop | 81 + kdesktop/programs/xglobe.desktop | 81 + kdesktop/programs/xplanet.desktop | 80 + kdesktop/startupid.cpp | 301 + kdesktop/startupid.h | 66 + kdesktop/xautolock.cc | 289 + kdesktop/xautolock.h | 77 + kdesktop/xautolock_c.h | 76 + kdesktop/xautolock_diy.c | 289 + kdesktop/xautolock_engine.c | 419 + kdesu/AUTHORS | 2 + kdesu/ChangeLog | 128 + kdesu/FAQ | 46 + kdesu/LICENSE.readme | 125 + kdesu/Makefile.am | 1 + kdesu/README | 34 + kdesu/TODO | 3 + kdesu/configure.in.in | 62 + kdesu/kdesu/Makefile.am | 15 + kdesu/kdesu/kdesu.cpp | 430 + kdesu/kdesu/sudlg.cpp | 103 + kdesu/kdesu/sudlg.h | 32 + kdesu/kdesud/Makefile.am | 31 + kdesu/kdesud/handler.cpp | 512 + kdesu/kdesud/handler.h | 52 + kdesu/kdesud/kdesud.cpp | 415 + kdesu/kdesud/lexer.cpp | 134 + kdesu/kdesud/lexer.h | 42 + kdesu/kdesud/repo.cpp | 188 + kdesu/kdesud/repo.h | 68 + kdesu/kdesud/secure.cpp | 80 + kdesu/kdesud/secure.h | 52 + kdialog/Makefile.am | 13 + kdialog/README | 14 + kdialog/kdialog.cpp | 687 + kdialog/klistboxdialog.cpp | 60 + kdialog/klistboxdialog.h | 49 + kdialog/progresscanceldemo | 11 + kdialog/progressdemo | 18 + kdialog/progressdialog.cpp | 92 + kdialog/progressdialog.h | 50 + kdialog/progressdialogiface.h | 28 + kdialog/test | 74 + kdialog/widgets.cpp | 282 + kdialog/widgets.h | 43 + kdm/ChangeLog | 540 + kdm/Makefile.am | 20 + kdm/README | 454 + kdm/TODO | 243 + kdm/backend/Imakefile | 203 + kdm/backend/Makefile.am | 46 + kdm/backend/access.c | 468 + kdm/backend/auth.c | 1247 + kdm/backend/bootman.c | 282 + kdm/backend/choose.c | 1051 + kdm/backend/client.c | 1760 + kdm/backend/ctrl.c | 955 + kdm/backend/daemon.c | 78 + kdm/backend/dm.c | 1652 + kdm/backend/dm.h | 620 + kdm/backend/dm_auth.h | 99 + kdm/backend/dm_error.h | 58 + kdm/backend/dm_socket.h | 72 + kdm/backend/dpylist.c | 294 + kdm/backend/error.c | 130 + kdm/backend/genauth.c | 490 + kdm/backend/greet.h | 278 + kdm/backend/inifile.c | 255 + kdm/backend/krb5auth.c | 248 + kdm/backend/mitauth.c | 87 + kdm/backend/netaddr.c | 219 + kdm/backend/policy.c | 278 + kdm/backend/printf.c | 872 + kdm/backend/process.c | 761 + kdm/backend/protodpy.c | 141 + kdm/backend/reset.c | 111 + kdm/backend/resource.c | 486 + kdm/backend/rpcauth.c | 89 + kdm/backend/server.c | 360 + kdm/backend/session.c | 792 + kdm/backend/sessreg.c | 307 + kdm/backend/socket.c | 418 + kdm/backend/streams.c | 127 + kdm/backend/util.c | 621 + kdm/backend/xdmauth.c | 267 + kdm/backend/xdmcp.c | 1160 + kdm/config.def | 2615 + kdm/configure.in.bot | 8 + kdm/configure.in.in | 243 + kdm/confproc.pl | 838 + kdm/kfrontend/Makefile.am | 66 + kdm/kfrontend/genkdmconf.c | 2899 + kdm/kfrontend/kchooser.cpp | 227 + kdm/kfrontend/kchooser.h | 59 + kdm/kfrontend/kconsole.cpp | 183 + kdm/kfrontend/kconsole.h | 53 + kdm/kfrontend/kdm_config.c | 1470 + kdm/kfrontend/kdm_greet.c | 787 + kdm/kfrontend/kdm_greet.h | 91 + kdm/kfrontend/kdmclock.cpp | 176 + kdm/kfrontend/kdmclock.h | 52 + kdm/kfrontend/kdmconfig.cpp | 177 + kdm/kfrontend/kdmconfig.h | 55 + kdm/kfrontend/kdmctl.c | 236 + kdm/kfrontend/kdmshutdown.cpp | 714 + kdm/kfrontend/kdmshutdown.h | 196 + kdm/kfrontend/kfdialog.cpp | 149 + kdm/kfrontend/kfdialog.h | 63 + kdm/kfrontend/kgapp.cpp | 253 + kdm/kfrontend/kgapp.h | 49 + kdm/kfrontend/kgdialog.cpp | 238 + kdm/kfrontend/kgdialog.h | 87 + kdm/kfrontend/kgreeter.cpp | 998 + kdm/kfrontend/kgreeter.h | 164 + kdm/kfrontend/kgverify.cpp | 1211 + kdm/kfrontend/kgverify.h | 248 + kdm/kfrontend/krootimage.cpp | 122 + kdm/kfrontend/krootimage.h | 48 + kdm/kfrontend/pics/Makefile.am | 9 + kdm/kfrontend/pics/default1.png | Bin 0 -> 2622 bytes kdm/kfrontend/pics/default2.png | Bin 0 -> 5663 bytes kdm/kfrontend/pics/default3.png | Bin 0 -> 4260 bytes kdm/kfrontend/pics/kdelogo-crystal.png | Bin 0 -> 11375 bytes kdm/kfrontend/pics/kdelogo.png | Bin 0 -> 16480 bytes kdm/kfrontend/pics/root1.png | Bin 0 -> 3070 bytes kdm/kfrontend/pics/shutdown.jpg | Bin 0 -> 2536 bytes kdm/kfrontend/sessions/9wm.desktop | 76 + kdm/kfrontend/sessions/Makefile.am | 49 + kdm/kfrontend/sessions/aewm++.desktop | 74 + kdm/kfrontend/sessions/aewm.desktop | 76 + kdm/kfrontend/sessions/afterstep.desktop | 83 + kdm/kfrontend/sessions/amaterus.desktop | 75 + kdm/kfrontend/sessions/amiwm.desktop | 78 + kdm/kfrontend/sessions/asclassic.desktop | 81 + kdm/kfrontend/sessions/blackbox.desktop | 88 + kdm/kfrontend/sessions/cde.desktop | 74 + kdm/kfrontend/sessions/ctwm.desktop | 72 + kdm/kfrontend/sessions/cwwm.desktop | 74 + kdm/kfrontend/sessions/enlightenment.desktop | 86 + kdm/kfrontend/sessions/evilwm.desktop | 77 + kdm/kfrontend/sessions/fluxbox.desktop | 81 + kdm/kfrontend/sessions/flwm.desktop | 77 + kdm/kfrontend/sessions/fvwm.desktop | 71 + kdm/kfrontend/sessions/fvwm2.desktop | 70 + kdm/kfrontend/sessions/fvwm95.desktop | 76 + kdm/kfrontend/sessions/gnome.desktop | 81 + kdm/kfrontend/sessions/golem.desktop | 81 + kdm/kfrontend/sessions/icewm.desktop | 81 + kdm/kfrontend/sessions/ion.desktop | 77 + kdm/kfrontend/sessions/kde.desktop.in | 45 + kdm/kfrontend/sessions/larswm.desktop | 72 + kdm/kfrontend/sessions/lwm.desktop | 76 + kdm/kfrontend/sessions/matchbox.desktop | 82 + kdm/kfrontend/sessions/metacity.desktop | 83 + kdm/kfrontend/sessions/mwm.desktop | 78 + kdm/kfrontend/sessions/olvwm.desktop | 71 + kdm/kfrontend/sessions/olwm.desktop | 76 + kdm/kfrontend/sessions/openbox.desktop | 84 + kdm/kfrontend/sessions/oroborus.desktop | 76 + kdm/kfrontend/sessions/phluid.desktop | 80 + kdm/kfrontend/sessions/pwm.desktop | 72 + kdm/kfrontend/sessions/qvwm.desktop | 80 + kdm/kfrontend/sessions/ratpoison.desktop | 82 + kdm/kfrontend/sessions/sapphire.desktop | 84 + kdm/kfrontend/sessions/sawfish.desktop | 74 + kdm/kfrontend/sessions/twm.desktop | 71 + kdm/kfrontend/sessions/ude.desktop | 75 + kdm/kfrontend/sessions/vtwm.desktop | 72 + kdm/kfrontend/sessions/w9wm.desktop | 74 + kdm/kfrontend/sessions/waimea.desktop | 77 + kdm/kfrontend/sessions/wm2.desktop | 77 + kdm/kfrontend/sessions/wmaker.desktop | 82 + kdm/kfrontend/sessions/xfce.desktop | 73 + kdm/kfrontend/sessions/xfce4.desktop | 72 + kdm/kfrontend/themer/Makefile.am | 16 + kdm/kfrontend/themer/kdmitem.cpp | 532 + kdm/kfrontend/themer/kdmitem.h | 263 + kdm/kfrontend/themer/kdmlabel.cpp | 231 + kdm/kfrontend/themer/kdmlabel.h | 81 + kdm/kfrontend/themer/kdmlayout.cpp | 167 + kdm/kfrontend/themer/kdmlayout.h | 98 + kdm/kfrontend/themer/kdmpixmap.cpp | 242 + kdm/kfrontend/themer/kdmpixmap.h | 69 + kdm/kfrontend/themer/kdmrect.cpp | 154 + kdm/kfrontend/themer/kdmrect.h | 65 + kdm/kfrontend/themer/kdmthemer.cpp | 329 + kdm/kfrontend/themer/kdmthemer.h | 123 + kdm/kfrontend/themes/Makefile.am | 1 + .../themes/circles/GdmGreeterTheme.desktop | 135 + kdm/kfrontend/themes/circles/Makefile.am | 11 + kdm/kfrontend/themes/circles/background.svg | 39 + kdm/kfrontend/themes/circles/circles.xml | 207 + kdm/kfrontend/themes/circles/flower.png | Bin 0 -> 120376 bytes kdm/kfrontend/themes/circles/help.png | Bin 0 -> 2138 bytes kdm/kfrontend/themes/circles/options.png | Bin 0 -> 2297 bytes kdm/kfrontend/themes/circles/screenshot.png | Bin 0 -> 16847 bytes kdmlib/Makefile.am | 26 + kdmlib/dmctl.cpp | 442 + kdmlib/dmctl.h | 93 + kdmlib/kgreet_classic.cpp | 505 + kdmlib/kgreet_classic.h | 87 + kdmlib/kgreet_winbind.cpp | 671 + kdmlib/kgreet_winbind.h | 100 + kdmlib/kgreeterplugin.h | 401 + kfind/AUTHORS | 18 + kfind/ChangeLog | 141 + kfind/Kfind.desktop | 79 + kfind/Makefile.am | 36 + kfind/README | 24 + kfind/TODO | 13 + kfind/findpart.desktop | 82 + kfind/hi16-app-kfind.png | Bin 0 -> 996 bytes kfind/hi22-app-kfind.png | Bin 0 -> 1417 bytes kfind/hi32-app-kfind.png | Bin 0 -> 2247 bytes kfind/hi48-app-kfind.png | Bin 0 -> 4298 bytes kfind/hi64-app-kfind.png | Bin 0 -> 6131 bytes kfind/kdatecombo.cpp | 131 + kfind/kdatecombo.h | 49 + kfind/kfind.cpp | 192 + kfind/kfind.h | 64 + kfind/kfinddlg.cpp | 293 + kfind/kfinddlg.h | 69 + kfind/kfindpart.cpp | 213 + kfind/kfindpart.desktop | 87 + kfind/kfindpart.h | 104 + kfind/kfindpart.kdevprj | 178 + kfind/kfindpart.kdevses | 20 + kfind/kftabdlg.cpp | 871 + kfind/kftabdlg.h | 136 + kfind/kfwin.cpp | 434 + kfind/kfwin.h | 75 + kfind/kquery.cpp | 527 + kfind/kquery.h | 102 + kfind/main.cpp | 65 + kfind/pics/Makefile.am | 2 + kfind/pics/lo22-action-archive.png | Bin 0 -> 508 bytes kfind/pics/lo22-action-delete.png | Bin 0 -> 473 bytes kfind/pics/lo22-action-idea.png | Bin 0 -> 407 bytes kfind/pics/lo22-action-info.png | Bin 0 -> 420 bytes kfind/pics/lo22-action-openfile.png | Bin 0 -> 328 bytes kfind/pics/lo22-action-save.png | Bin 0 -> 360 bytes kfind/pics/lo22-action-search.png | Bin 0 -> 365 bytes kfind/version.h | 3 + khelpcenter/COPYING | 339 + khelpcenter/DESIGN | 433 + khelpcenter/Help.desktop | 86 + khelpcenter/Makefile.am | 57 + khelpcenter/README.htdig | 14 + khelpcenter/README.metadata | 129 + khelpcenter/application.cpp | 89 + khelpcenter/application.h | 45 + khelpcenter/configure.in.in | 2 + khelpcenter/docentry.cpp | 348 + khelpcenter/docentry.h | 117 + khelpcenter/docentrytraverser.cpp | 49 + khelpcenter/docentrytraverser.h | 44 + khelpcenter/docmetainfo.cpp | 287 + khelpcenter/docmetainfo.h | 80 + khelpcenter/fontdialog.cpp | 212 + khelpcenter/fontdialog.h | 66 + khelpcenter/formatter.cpp | 222 + khelpcenter/formatter.h | 55 + khelpcenter/glossary.cpp | 322 + khelpcenter/glossary.h | 146 + khelpcenter/glossary.html.in | 95 + khelpcenter/glossary.xslt | 34 + khelpcenter/history.cpp | 351 + khelpcenter/history.h | 107 + khelpcenter/htmlsearch.cpp | 61 + khelpcenter/htmlsearch.h | 33 + khelpcenter/htmlsearch/Makefile.am | 39 + khelpcenter/htmlsearch/checked.xpm | 23 + khelpcenter/htmlsearch/htmlsearch.cpp | 487 + khelpcenter/htmlsearch/htmlsearch.desktop | 239 + khelpcenter/htmlsearch/htmlsearch.h | 64 + khelpcenter/htmlsearch/index.cpp | 31 + khelpcenter/htmlsearch/kcmhtmlsearch.cpp | 370 + khelpcenter/htmlsearch/kcmhtmlsearch.h | 81 + khelpcenter/htmlsearch/klangcombo.cpp | 52 + khelpcenter/htmlsearch/klangcombo.h | 47 + khelpcenter/htmlsearch/ktagcombobox.cpp | 252 + khelpcenter/htmlsearch/ktagcombobox.h | 92 + khelpcenter/htmlsearch/long.html | 6 + khelpcenter/htmlsearch/meinproc_wrapper | 4 + khelpcenter/htmlsearch/nomatch.html | 21 + khelpcenter/htmlsearch/progressdialog.cpp | 76 + khelpcenter/htmlsearch/progressdialog.h | 35 + khelpcenter/htmlsearch/short.html | 1 + khelpcenter/htmlsearch/star.png | Bin 0 -> 690 bytes khelpcenter/htmlsearch/star_blank.png | Bin 0 -> 151 bytes khelpcenter/htmlsearch/syntax.html | 19 + khelpcenter/htmlsearch/unchecked.xpm | 22 + khelpcenter/htmlsearch/wrapper.html | 16 + khelpcenter/htmlsearchconfig.cpp | 151 + khelpcenter/htmlsearchconfig.h | 58 + khelpcenter/index.html.in | 42 + khelpcenter/infotree.cpp | 184 + khelpcenter/infotree.h | 48 + khelpcenter/intro.html.in | 141 + khelpcenter/kcmhelpcenter.cpp | 680 + khelpcenter/kcmhelpcenter.desktop | 236 + khelpcenter/kcmhelpcenter.h | 180 + khelpcenter/khc_indexbuilder.cpp | 221 + khelpcenter/khc_indexbuilder.h | 61 + khelpcenter/khelpcenter.desktop | 133 + khelpcenter/khelpcenter.kcfg | 36 + khelpcenter/khelpcenterui.rc | 53 + khelpcenter/mainwindow.cpp | 467 + khelpcenter/mainwindow.h | 108 + khelpcenter/navigator.cpp | 672 + khelpcenter/navigator.h | 153 + khelpcenter/navigatorappitem.cpp | 147 + khelpcenter/navigatorappitem.h | 58 + khelpcenter/navigatoritem.cpp | 105 + khelpcenter/navigatoritem.h | 68 + khelpcenter/pics/Makefile.am | 6 + khelpcenter/pics/hi128-app-khelpcenter.png | Bin 0 -> 13735 bytes khelpcenter/pics/hi16-app-khelpcenter.png | Bin 0 -> 1076 bytes khelpcenter/pics/hi22-app-khelpcenter.png | Bin 0 -> 1533 bytes khelpcenter/pics/hi32-app-khelpcenter.png | Bin 0 -> 2012 bytes khelpcenter/pics/hi48-app-khelpcenter.png | Bin 0 -> 4107 bytes khelpcenter/pics/hi64-app-khelpcenter.png | Bin 0 -> 5653 bytes khelpcenter/pics/hisc-app-khelpcenter.svgz | Bin 0 -> 75390 bytes khelpcenter/plugins/Applications/.directory | 60 + khelpcenter/plugins/Applications/Makefile.am | 3 + khelpcenter/plugins/Makefile.am | 9 + khelpcenter/plugins/Manpages/.directory | 60 + khelpcenter/plugins/Manpages/Makefile.am | 4 + khelpcenter/plugins/Manpages/man1.desktop | 74 + khelpcenter/plugins/Manpages/man2.desktop | 75 + khelpcenter/plugins/Manpages/man3.desktop | 76 + khelpcenter/plugins/Manpages/man4.desktop | 81 + khelpcenter/plugins/Manpages/man5.desktop | 81 + khelpcenter/plugins/Manpages/man6.desktop | 82 + khelpcenter/plugins/Manpages/man7.desktop | 80 + khelpcenter/plugins/Manpages/man8.desktop | 79 + khelpcenter/plugins/Manpages/man9.desktop | 62 + khelpcenter/plugins/Manpages/mann.desktop | 81 + khelpcenter/plugins/Scrollkeeper/.directory | 9 + khelpcenter/plugins/Scrollkeeper/Makefile.am | 3 + .../plugins/Scrollkeeper/scrollkeeper.desktop | 2 + khelpcenter/plugins/Tutorials/.directory | 108 + khelpcenter/plugins/Tutorials/Makefile.am | 5 + khelpcenter/plugins/Tutorials/quickstart.desktop | 153 + khelpcenter/plugins/Tutorials/visualdict.desktop | 155 + khelpcenter/plugins/applets.desktop | 85 + khelpcenter/plugins/contact.desktop | 83 + khelpcenter/plugins/faq.desktop | 80 + khelpcenter/plugins/info.desktop | 80 + khelpcenter/plugins/kcontrolmodules.desktop | 87 + khelpcenter/plugins/kicmodules.desktop | 87 + khelpcenter/plugins/kioslaves.desktop | 35 + khelpcenter/plugins/konqplugins.desktop | 85 + khelpcenter/plugins/links.desktop | 77 + khelpcenter/plugins/support.desktop | 83 + khelpcenter/plugins/userguide.desktop | 78 + khelpcenter/plugins/welcome.desktop | 83 + khelpcenter/plugintraverser.cpp | 117 + khelpcenter/plugintraverser.h | 52 + khelpcenter/prefs.kcfgc | 6 + khelpcenter/scopeitem.h | 50 + khelpcenter/scrollkeepertreebuilder.cpp | 200 + khelpcenter/scrollkeepertreebuilder.h | 59 + khelpcenter/searchengine.cpp | 502 + khelpcenter/searchengine.h | 151 + khelpcenter/searchhandler.cpp | 249 + khelpcenter/searchhandler.h | 97 + khelpcenter/searchhandlers/Makefile.am | 10 + khelpcenter/searchhandlers/README.searchhandlers | 61 + khelpcenter/searchhandlers/docbook.desktop | 6 + khelpcenter/searchhandlers/htdig.desktop | 6 + khelpcenter/searchhandlers/htdig_long.html | 2 + khelpcenter/searchhandlers/khc_docbookdig.pl.in | 221 + khelpcenter/searchhandlers/khc_htdig.pl.in | 148 + khelpcenter/searchhandlers/khc_htsearch.pl | 117 + khelpcenter/searchhandlers/khc_mansearch.pl | 84 + khelpcenter/searchhandlers/man.desktop | 5 + khelpcenter/searchwidget.cpp | 392 + khelpcenter/searchwidget.h | 107 + khelpcenter/table-of-contents.xslt | 26 + khelpcenter/testmetainfo.cpp | 119 + khelpcenter/toc.cpp | 271 + khelpcenter/toc.h | 72 + khelpcenter/treebuilder.cpp | 35 + khelpcenter/treebuilder.h | 49 + khelpcenter/version.h | 7 + khelpcenter/view.cpp | 387 + khelpcenter/view.h | 94 + khotkeys/AUTHORS | 1 + khotkeys/Makefile.am | 10 + khotkeys/README | 130 + khotkeys/TODO | 82 + khotkeys/app/Makefile.am | 21 + khotkeys/app/app.cpp | 158 + khotkeys/app/app.h | 43 + khotkeys/app/kded.cpp | 103 + khotkeys/app/kded.h | 44 + khotkeys/app/khotkeys.desktop | 43 + khotkeys/arts/Makefile.am | 11 + khotkeys/arts/soundrecorder_arts.cpp | 141 + khotkeys/arts/soundrecorder_arts.h | 63 + khotkeys/arts/voicerecorder_arts.cpp | 40 + khotkeys/configure.in.in | 68 + khotkeys/data/Makefile.am | 7 + khotkeys/data/kde32b1.khotkeys | 1746 + khotkeys/data/khotkeys_32b1_update.upd | 8 + khotkeys/data/khotkeys_printscreen.upd | 8 + khotkeys/data/konqueror_gestures_kde321.khotkeys | 2042 + khotkeys/data/konqueror_gestures_kde321_update.upd | 8 + khotkeys/data/printscreen.khotkeys | 198 + khotkeys/kcontrol/Makefile.am | 40 + khotkeys/kcontrol/action_group_tab.cpp | 94 + khotkeys/kcontrol/action_group_tab.h | 46 + khotkeys/kcontrol/action_list_widget.cpp | 354 + khotkeys/kcontrol/action_list_widget.h | 205 + khotkeys/kcontrol/actions_listview_widget.cpp | 189 + khotkeys/kcontrol/actions_listview_widget.h | 151 + khotkeys/kcontrol/activate_window_widget.h | 28 + khotkeys/kcontrol/command_url_widget.cpp | 70 + khotkeys/kcontrol/command_url_widget.h | 44 + khotkeys/kcontrol/condition_list_widget.cpp | 395 + khotkeys/kcontrol/condition_list_widget.h | 165 + khotkeys/kcontrol/dcop_widget.cpp | 95 + khotkeys/kcontrol/dcop_widget.h | 45 + khotkeys/kcontrol/general_settings_tab.cpp | 56 + khotkeys/kcontrol/general_settings_tab.h | 39 + khotkeys/kcontrol/general_tab.cpp | 136 + khotkeys/kcontrol/general_tab.h | 47 + khotkeys/kcontrol/gesture_triggers_tab.cpp | 161 + khotkeys/kcontrol/gesture_triggers_tab.h | 66 + khotkeys/kcontrol/gesturedrawer.cpp | 161 + khotkeys/kcontrol/gesturedrawer.h | 50 + khotkeys/kcontrol/gesturerecorder.cpp | 67 + khotkeys/kcontrol/gesturerecorder.h | 48 + khotkeys/kcontrol/gesturerecordpage.cpp | 147 + khotkeys/kcontrol/gesturerecordpage.h | 61 + khotkeys/kcontrol/gestures_settings_tab.cpp | 76 + khotkeys/kcontrol/gestures_settings_tab.h | 37 + khotkeys/kcontrol/hi16-app-khotkeys.png | Bin 0 -> 486 bytes khotkeys/kcontrol/hi32-app-khotkeys.png | Bin 0 -> 1333 bytes khotkeys/kcontrol/info_tab.cpp | 40 + khotkeys/kcontrol/info_tab.h | 35 + khotkeys/kcontrol/init.cpp | 47 + khotkeys/kcontrol/kcmkhotkeys.cpp | 318 + khotkeys/kcontrol/kcmkhotkeys.h | 170 + khotkeys/kcontrol/keyboard_input_widget.cpp | 101 + khotkeys/kcontrol/keyboard_input_widget.h | 44 + khotkeys/kcontrol/khotkeys.desktop | 208 + khotkeys/kcontrol/main_buttons_widget.cpp | 51 + khotkeys/kcontrol/main_buttons_widget.h | 39 + khotkeys/kcontrol/menuedit.cpp | 359 + khotkeys/kcontrol/menuedit.h | 44 + khotkeys/kcontrol/menuentry_widget.cpp | 70 + khotkeys/kcontrol/menuentry_widget.h | 44 + khotkeys/kcontrol/tab_widget.cpp | 484 + khotkeys/kcontrol/tab_widget.h | 136 + khotkeys/kcontrol/triggers_tab.cpp | 366 + khotkeys/kcontrol/triggers_tab.h | 206 + khotkeys/kcontrol/ui/Makefile.am | 21 + khotkeys/kcontrol/ui/action_group_tab_ui.ui | 108 + khotkeys/kcontrol/ui/action_list_widget_ui.ui | 171 + khotkeys/kcontrol/ui/actions_listview_widget_ui.ui | 83 + khotkeys/kcontrol/ui/command_url_widget_ui.ui | 66 + khotkeys/kcontrol/ui/condition_list_widget_ui.ui | 170 + khotkeys/kcontrol/ui/dcop_widget_ui.ui | 273 + khotkeys/kcontrol/ui/general_settings_tab_ui.ui | 117 + khotkeys/kcontrol/ui/general_tab_ui.ui | 148 + khotkeys/kcontrol/ui/gesture_triggers_tab_ui.ui | 519 + khotkeys/kcontrol/ui/gestures_settings_tab_ui.ui | 160 + khotkeys/kcontrol/ui/info_tab_ui.ui | 64 + khotkeys/kcontrol/ui/keyboard_input_widget_ui.ui | 193 + khotkeys/kcontrol/ui/main_buttons_widget_ui.ui | 86 + khotkeys/kcontrol/ui/menuentry_widget_ui.ui | 100 + khotkeys/kcontrol/ui/triggers_tab_ui.ui | 171 + khotkeys/kcontrol/ui/voice_input_widget_ui.ui | 104 + khotkeys/kcontrol/ui/voice_settings_tab_ui.ui | 107 + khotkeys/kcontrol/ui/window_trigger_widget_ui.ui | 131 + khotkeys/kcontrol/ui/windowdef_list_widget_ui.ui | 170 + khotkeys/kcontrol/ui/windowdef_simple_widget_ui.ui | 493 + khotkeys/kcontrol/voice_settings_tab.cpp | 68 + khotkeys/kcontrol/voice_settings_tab.h | 41 + khotkeys/kcontrol/voicerecorder.cpp | 203 + khotkeys/kcontrol/voicerecorder.h | 73 + khotkeys/kcontrol/voicerecordpage.cpp | 124 + khotkeys/kcontrol/voicerecordpage.h | 64 + khotkeys/kcontrol/window_trigger_widget.cpp | 84 + khotkeys/kcontrol/window_trigger_widget.h | 41 + khotkeys/kcontrol/windowdef_list_widget.cpp | 239 + khotkeys/kcontrol/windowdef_list_widget.h | 160 + khotkeys/kcontrol/windowdef_simple_widget.cpp | 183 + khotkeys/kcontrol/windowdef_simple_widget.h | 51 + khotkeys/kcontrol/windowselector.cpp | 92 + khotkeys/kcontrol/windowselector.h | 40 + khotkeys/khotkeys.desktop | 2 + khotkeys/shared/Makefile.am | 15 + khotkeys/shared/action_data.cpp | 378 + khotkeys/shared/action_data.h | 446 + khotkeys/shared/actions.cpp | 450 + khotkeys/shared/actions.h | 305 + khotkeys/shared/conditions.cpp | 504 + khotkeys/shared/conditions.h | 296 + khotkeys/shared/gestures.cpp | 449 + khotkeys/shared/gestures.h | 122 + khotkeys/shared/input.cpp | 253 + khotkeys/shared/input.h | 87 + khotkeys/shared/khlistbox.cpp | 103 + khotkeys/shared/khlistbox.h | 64 + khotkeys/shared/khlistview.cpp | 122 + khotkeys/shared/khlistview.h | 69 + khotkeys/shared/khotkeysglobal.cpp | 100 + khotkeys/shared/khotkeysglobal.h | 59 + khotkeys/shared/settings.cpp | 265 + khotkeys/shared/settings.h | 61 + khotkeys/shared/sound.cpp | 343 + khotkeys/shared/sound.h | 58 + khotkeys/shared/soundrecorder.cpp | 86 + khotkeys/shared/soundrecorder.h | 62 + khotkeys/shared/triggers.cpp | 435 + khotkeys/shared/triggers.h | 260 + khotkeys/shared/voices.cpp | 303 + khotkeys/shared/voices.h | 83 + khotkeys/shared/voicesignature.cpp | 422 + khotkeys/shared/voicesignature.h | 101 + khotkeys/shared/windows.cpp | 376 + khotkeys/shared/windows.h | 264 + khotkeys/update/Makefile.am | 11 + khotkeys/update/update.cpp | 62 + khotkeys/wrk/cpp_template | 20 + khotkeys/wrk/header_template | 23 + khotkeys/wrk/new | 14 + kicker/AUTHORS | 17 + kicker/ChangeLog | 25 + kicker/DESIGN | 180 + kicker/HACKING | 261 + kicker/Makefile.am | 2 + kicker/TODO | 119 + kicker/applets/Makefile.am | 1 + kicker/applets/clock/Makefile.am | 29 + kicker/applets/clock/analog.ui | 344 + kicker/applets/clock/clock.cpp | 1871 + kicker/applets/clock/clock.h | 348 + kicker/applets/clock/clockapplet.desktop | 151 + kicker/applets/clock/clockapplet.kcfg | 191 + kicker/applets/clock/datepicker.cpp | 87 + kicker/applets/clock/datepicker.h | 49 + kicker/applets/clock/digital.ui | 305 + kicker/applets/clock/fuzzy.ui | 287 + kicker/applets/clock/lcd.png | Bin 0 -> 237 bytes kicker/applets/clock/prefs.kcfgc | 6 + kicker/applets/clock/settings.ui | 515 + kicker/applets/clock/zone.cpp | 180 + kicker/applets/clock/zone.h | 62 + kicker/applets/launcher/ChangeLog | 40 + kicker/applets/launcher/Makefile.am | 27 + kicker/applets/launcher/ToDo | 8 + kicker/applets/launcher/configdlg.cpp | 101 + kicker/applets/launcher/configdlg.h | 55 + kicker/applets/launcher/configdlgbase.ui | 273 + kicker/applets/launcher/easyvector.h | 147 + kicker/applets/launcher/flowgridmanager.cpp | 316 + kicker/applets/launcher/flowgridmanager.h | 99 + kicker/applets/launcher/launcherapplet.kcfg | 77 + kicker/applets/launcher/popularity.cpp | 424 + kicker/applets/launcher/popularity.h | 127 + kicker/applets/launcher/prefs.kcfgc | 6 + kicker/applets/launcher/quickaddappsmenu.cpp | 67 + kicker/applets/launcher/quickaddappsmenu.h | 51 + kicker/applets/launcher/quickbutton.cpp | 322 + kicker/applets/launcher/quickbutton.h | 124 + kicker/applets/launcher/quickbuttongroup.h | 60 + kicker/applets/launcher/quicklauncher.cpp | 1093 + kicker/applets/launcher/quicklauncher.desktop | 140 + kicker/applets/launcher/quicklauncher.h | 138 + kicker/applets/lockout/Makefile.am | 18 + kicker/applets/lockout/README | 4 + kicker/applets/lockout/lockout.cpp | 278 + kicker/applets/lockout/lockout.desktop | 125 + kicker/applets/lockout/lockout.h | 52 + kicker/applets/media/Makefile.am | 20 + kicker/applets/media/mediaapplet.cpp | 444 + kicker/applets/media/mediaapplet.desktop | 130 + kicker/applets/media/mediaapplet.h | 79 + kicker/applets/media/mediumbutton.cpp | 202 + kicker/applets/media/mediumbutton.h | 66 + kicker/applets/media/preferencesdialog.cpp | 167 + kicker/applets/media/preferencesdialog.h | 53 + kicker/applets/menu/Makefile.am | 20 + kicker/applets/menu/menuapplet.cpp | 511 + kicker/applets/menu/menuapplet.desktop | 128 + kicker/applets/menu/menuapplet.h | 258 + kicker/applets/minipager/Makefile.am | 25 + kicker/applets/minipager/minipagerapplet.desktop | 122 + kicker/applets/minipager/pagerapplet.cpp | 906 + kicker/applets/minipager/pagerapplet.h | 138 + kicker/applets/minipager/pagerbutton.cpp | 824 + kicker/applets/minipager/pagerbutton.h | 111 + kicker/applets/minipager/pagersettings.kcfg | 58 + kicker/applets/minipager/pagersettings.kcfgc | 4 + kicker/applets/naughty/Makefile.am | 30 + kicker/applets/naughty/NaughtyApplet.cpp | 223 + kicker/applets/naughty/NaughtyApplet.h | 76 + kicker/applets/naughty/NaughtyConfigDialog.cpp | 98 + kicker/applets/naughty/NaughtyConfigDialog.h | 58 + kicker/applets/naughty/NaughtyProcessMonitor.cpp | 475 + kicker/applets/naughty/NaughtyProcessMonitor.h | 76 + kicker/applets/naughty/configure.in.in | 5 + kicker/applets/naughty/naughty-happy.png | Bin 0 -> 457 bytes kicker/applets/naughty/naughty-sad.png | Bin 0 -> 440 bytes kicker/applets/naughty/naughtyapplet.desktop | 131 + kicker/applets/run/Makefile.am | 19 + kicker/applets/run/runapplet.cpp | 294 + kicker/applets/run/runapplet.desktop | 130 + kicker/applets/run/runapplet.h | 65 + kicker/applets/swallow/Makefile.am | 18 + kicker/applets/swallow/prefwidget.cpp | 39 + kicker/applets/swallow/prefwidget.h | 34 + kicker/applets/swallow/prefwidgetbase.ui | 134 + kicker/applets/swallow/swallow.cpp | 348 + kicker/applets/swallow/swallow.h | 114 + kicker/applets/swallow/swallowapplet.desktop | 142 + kicker/applets/systemtray/Makefile.am | 24 + kicker/applets/systemtray/systemtrayapplet.cpp | 1013 + kicker/applets/systemtray/systemtrayapplet.desktop | 158 + kicker/applets/systemtray/systemtrayapplet.h | 126 + kicker/applets/taskbar/Makefile.am | 22 + kicker/applets/taskbar/taskbarapplet.cpp | 126 + kicker/applets/taskbar/taskbarapplet.desktop | 138 + kicker/applets/taskbar/taskbarapplet.h | 56 + kicker/applets/trash/Makefile.am | 21 + kicker/applets/trash/trashapplet.cpp | 165 + kicker/applets/trash/trashapplet.desktop | 138 + kicker/applets/trash/trashapplet.h | 62 + kicker/applets/trash/trashbutton.cpp | 154 + kicker/applets/trash/trashbutton.h | 60 + kicker/data/Makefile.am | 1 + kicker/data/app_start_anim/Makefile.am | 7 + kicker/data/app_start_anim/disk1.png | Bin 0 -> 357 bytes kicker/data/app_start_anim/disk10.png | Bin 0 -> 376 bytes kicker/data/app_start_anim/disk2.png | Bin 0 -> 360 bytes kicker/data/app_start_anim/disk3.png | Bin 0 -> 364 bytes kicker/data/app_start_anim/disk4.png | Bin 0 -> 368 bytes kicker/data/app_start_anim/disk5.png | Bin 0 -> 365 bytes kicker/data/app_start_anim/disk6.png | Bin 0 -> 368 bytes kicker/data/app_start_anim/disk7.png | Bin 0 -> 362 bytes kicker/data/app_start_anim/disk8.png | Bin 0 -> 359 bytes kicker/data/app_start_anim/disk9.png | Bin 0 -> 382 bytes kicker/data/icons/Makefile.am | 3 + kicker/data/icons/actions/Makefile.am | 3 + kicker/data/icons/actions/cr16-action-modified.png | Bin 0 -> 838 bytes kicker/data/icons/actions/lo16-action-modified.png | Bin 0 -> 313 bytes kicker/data/icons/cr16-app-kdisknav.png | Bin 0 -> 835 bytes kicker/data/icons/cr16-app-kicker.png | Bin 0 -> 933 bytes kicker/data/icons/cr16-app-panel.png | Bin 0 -> 933 bytes kicker/data/icons/cr16-app-window_list.png | Bin 0 -> 914 bytes kicker/data/icons/cr32-app-kdisknav.png | Bin 0 -> 1776 bytes kicker/data/icons/cr32-app-window_list.png | Bin 0 -> 2105 bytes kicker/data/icons/cr48-app-kdisknav.png | Bin 0 -> 3482 bytes kicker/data/icons/cr48-app-window_list.png | Bin 0 -> 2801 bytes kicker/data/kmenu_side/Makefile.am | 6 + kicker/data/kmenu_side/kside.png | Bin 0 -> 5436 bytes kicker/data/kmenu_side/kside_tile.png | Bin 0 -> 151 bytes kicker/data/tiles/KDE_button_large_down.png | Bin 0 -> 216 bytes kicker/data/tiles/KDE_button_large_up.png | Bin 0 -> 212 bytes kicker/data/tiles/KDE_button_normal_down.png | Bin 0 -> 205 bytes kicker/data/tiles/KDE_button_normal_up.png | Bin 0 -> 211 bytes kicker/data/tiles/KDE_button_tiny_down.png | Bin 0 -> 200 bytes kicker/data/tiles/KDE_button_tiny_up.png | Bin 0 -> 202 bytes kicker/data/tiles/Makefile.am | 57 + kicker/data/tiles/blue_wood_large_down.png | Bin 0 -> 5113 bytes kicker/data/tiles/blue_wood_large_up.png | Bin 0 -> 4968 bytes kicker/data/tiles/blue_wood_normal_down.png | Bin 0 -> 3160 bytes kicker/data/tiles/blue_wood_normal_up.png | Bin 0 -> 3272 bytes kicker/data/tiles/blue_wood_tiny_down.png | Bin 0 -> 1179 bytes kicker/data/tiles/blue_wood_tiny_up.png | Bin 0 -> 1196 bytes kicker/data/tiles/green_wood_large_down.png | Bin 0 -> 5245 bytes kicker/data/tiles/green_wood_large_up.png | Bin 0 -> 4746 bytes kicker/data/tiles/green_wood_normal_down.png | Bin 0 -> 3200 bytes kicker/data/tiles/green_wood_normal_up.png | Bin 0 -> 3250 bytes kicker/data/tiles/green_wood_tiny_down.png | Bin 0 -> 1362 bytes kicker/data/tiles/green_wood_tiny_up.png | Bin 0 -> 1180 bytes kicker/data/tiles/light_gray_large_down.png | Bin 0 -> 2594 bytes kicker/data/tiles/light_gray_large_up.png | Bin 0 -> 2531 bytes kicker/data/tiles/light_gray_normal_up.png | Bin 0 -> 2593 bytes kicker/data/tiles/light_gray_tiny_down.png | Bin 0 -> 1253 bytes kicker/data/tiles/light_gray_tiny_up.png | Bin 0 -> 1256 bytes kicker/data/tiles/light_green_large_down.png | Bin 0 -> 3476 bytes kicker/data/tiles/light_green_large_up.png | Bin 0 -> 3443 bytes kicker/data/tiles/light_green_normal_down.png | Bin 0 -> 2845 bytes kicker/data/tiles/light_green_normal_up.png | Bin 0 -> 2849 bytes kicker/data/tiles/light_green_tiny_down.png | Bin 0 -> 1618 bytes kicker/data/tiles/light_green_tiny_up.png | Bin 0 -> 1611 bytes kicker/data/tiles/light_pastel_large_down.png | Bin 0 -> 2721 bytes kicker/data/tiles/light_pastel_large_up.png | Bin 0 -> 3489 bytes kicker/data/tiles/light_pastel_normal_up.png | Bin 0 -> 2734 bytes kicker/data/tiles/light_pastel_tiny_down.png | Bin 0 -> 1418 bytes kicker/data/tiles/light_pastel_tiny_up.png | Bin 0 -> 1419 bytes kicker/data/tiles/light_purple_large_down.png | Bin 0 -> 3445 bytes kicker/data/tiles/light_purple_large_up.png | Bin 0 -> 3425 bytes kicker/data/tiles/light_purple_normal_down.png | Bin 0 -> 2823 bytes kicker/data/tiles/light_purple_normal_up.png | Bin 0 -> 2834 bytes kicker/data/tiles/light_purple_tiny_down.png | Bin 0 -> 1334 bytes kicker/data/tiles/light_purple_tiny_up.png | Bin 0 -> 1335 bytes kicker/data/tiles/nuts_and_bolts_large_down.png | Bin 0 -> 2199 bytes kicker/data/tiles/nuts_and_bolts_large_up.png | Bin 0 -> 1968 bytes kicker/data/tiles/nuts_and_bolts_normal_down.png | Bin 0 -> 3170 bytes kicker/data/tiles/nuts_and_bolts_normal_up.png | Bin 0 -> 3068 bytes kicker/data/tiles/nuts_and_bolts_tiny_down.png | Bin 0 -> 1332 bytes kicker/data/tiles/nuts_and_bolts_tiny_up.png | Bin 0 -> 1165 bytes kicker/data/tiles/red_wood_large_down.png | Bin 0 -> 5183 bytes kicker/data/tiles/red_wood_large_up.png | Bin 0 -> 4976 bytes kicker/data/tiles/red_wood_normal_down.png | Bin 0 -> 3218 bytes kicker/data/tiles/red_wood_normal_up.png | Bin 0 -> 3280 bytes kicker/data/tiles/red_wood_tiny_down.png | Bin 0 -> 1369 bytes kicker/data/tiles/red_wood_tiny_up.png | Bin 0 -> 1175 bytes kicker/data/tiles/solid_blue_large_down.png | Bin 0 -> 5182 bytes kicker/data/tiles/solid_blue_large_up.png | Bin 0 -> 5259 bytes kicker/data/tiles/solid_blue_normal_down.png | Bin 0 -> 3300 bytes kicker/data/tiles/solid_blue_normal_up.png | Bin 0 -> 3291 bytes kicker/data/tiles/solid_blue_tiny_down.png | Bin 0 -> 1214 bytes kicker/data/tiles/solid_blue_tiny_up.png | Bin 0 -> 1208 bytes kicker/data/tiles/solid_gray_large_down.png | Bin 0 -> 3736 bytes kicker/data/tiles/solid_gray_large_up.png | Bin 0 -> 3744 bytes kicker/data/tiles/solid_gray_normal_down.png | Bin 0 -> 2266 bytes kicker/data/tiles/solid_gray_normal_up.png | Bin 0 -> 2259 bytes kicker/data/tiles/solid_gray_tiny_down.png | Bin 0 -> 983 bytes kicker/data/tiles/solid_gray_tiny_up.png | Bin 0 -> 976 bytes kicker/data/tiles/solid_green_large_down.png | Bin 0 -> 5544 bytes kicker/data/tiles/solid_green_large_up.png | Bin 0 -> 5588 bytes kicker/data/tiles/solid_green_normal_down.png | Bin 0 -> 970 bytes kicker/data/tiles/solid_green_normal_up.png | Bin 0 -> 1016 bytes kicker/data/tiles/solid_green_tiny_down.png | Bin 0 -> 1210 bytes kicker/data/tiles/solid_green_tiny_up.png | Bin 0 -> 1219 bytes kicker/data/tiles/solid_orange_large_down.png | Bin 0 -> 5489 bytes kicker/data/tiles/solid_orange_large_up.png | Bin 0 -> 5508 bytes kicker/data/tiles/solid_orange_normal_down.png | Bin 0 -> 3335 bytes kicker/data/tiles/solid_orange_normal_up.png | Bin 0 -> 3356 bytes kicker/data/tiles/solid_orange_tiny_down.png | Bin 0 -> 1215 bytes kicker/data/tiles/solid_orange_tiny_up.png | Bin 0 -> 1216 bytes kicker/data/tiles/solid_pastel_large_down.png | Bin 0 -> 3536 bytes kicker/data/tiles/solid_pastel_large_up.png | Bin 0 -> 3557 bytes kicker/data/tiles/solid_pastel_normal_down.png | Bin 0 -> 2741 bytes kicker/data/tiles/solid_pastel_normal_up.png | Bin 0 -> 2748 bytes kicker/data/tiles/solid_pastel_tiny_down.png | Bin 0 -> 1497 bytes kicker/data/tiles/solid_pastel_tiny_up.png | Bin 0 -> 1502 bytes kicker/data/tiles/solid_purple_large_down.png | Bin 0 -> 3466 bytes kicker/data/tiles/solid_purple_large_up.png | Bin 0 -> 3443 bytes kicker/data/tiles/solid_purple_normal_down.png | Bin 0 -> 2832 bytes kicker/data/tiles/solid_purple_normal_up.png | Bin 0 -> 2841 bytes kicker/data/tiles/solid_purple_tiny_down.png | Bin 0 -> 1370 bytes kicker/data/tiles/solid_purple_tiny_up.png | Bin 0 -> 1376 bytes kicker/data/tiles/solid_red_large_down.png | Bin 0 -> 5543 bytes kicker/data/tiles/solid_red_large_up.png | Bin 0 -> 5558 bytes kicker/data/tiles/solid_red_normal_down.png | Bin 0 -> 3300 bytes kicker/data/tiles/solid_red_normal_up.png | Bin 0 -> 3322 bytes kicker/data/tiles/solid_red_tiny_down.png | Bin 0 -> 1195 bytes kicker/data/tiles/solid_red_tiny_up.png | Bin 0 -> 1201 bytes kicker/data/tiles/solid_tigereye_large_down.png | Bin 0 -> 1852 bytes kicker/data/tiles/solid_tigereye_large_up.png | Bin 0 -> 2606 bytes kicker/data/tiles/solid_tigereye_normal_down.png | Bin 0 -> 2044 bytes kicker/data/tiles/solid_tigereye_normal_up.png | Bin 0 -> 2562 bytes kicker/data/tiles/solid_tigereye_tiny_down.png | Bin 0 -> 1261 bytes kicker/data/tiles/solid_tigereye_tiny_up.png | Bin 0 -> 1311 bytes kicker/data/wallpaper/Makefile.am | 7 + kicker/data/wallpaper/deck_plate.png | Bin 0 -> 837 bytes kicker/data/wallpaper/default.png | Bin 0 -> 200 bytes kicker/data/wallpaper/green_line.png | Bin 0 -> 310 bytes kicker/data/wallpaper/rail.png | Bin 0 -> 306 bytes kicker/extensions/Makefile.am | 1 + kicker/extensions/dockbar/Makefile.am | 18 + kicker/extensions/dockbar/dockbarextension.cpp | 423 + kicker/extensions/dockbar/dockbarextension.desktop | 148 + kicker/extensions/dockbar/dockbarextension.h | 73 + kicker/extensions/dockbar/dockcontainer.cpp | 198 + kicker/extensions/dockbar/dockcontainer.h | 90 + kicker/extensions/kasbar/ChangeLog | 954 + kicker/extensions/kasbar/DESIGN | 42 + kicker/extensions/kasbar/Doxyfile | 1101 + kicker/extensions/kasbar/Makefile.am | 55 + kicker/extensions/kasbar/TODO | 29 + kicker/extensions/kasbar/configure.in.in | 1 + kicker/extensions/kasbar/docs.h | 69 + kicker/extensions/kasbar/kasaboutdlg.cpp | 264 + kicker/extensions/kasbar/kasaboutdlg.h | 86 + kicker/extensions/kasbar/kasbar.cpp | 728 + kicker/extensions/kasbar/kasbar.h | 318 + kicker/extensions/kasbar/kasbarapp.cpp | 125 + kicker/extensions/kasbar/kasbarextension.cpp | 189 + kicker/extensions/kasbar/kasbarextension.desktop | 109 + kicker/extensions/kasbar/kasbarextension.h | 101 + kicker/extensions/kasbar/kasclockitem.cpp | 120 + kicker/extensions/kasbar/kasclockitem.h | 37 + kicker/extensions/kasbar/kasgrouper.cpp | 156 + kicker/extensions/kasbar/kasgrouper.h | 85 + kicker/extensions/kasbar/kasgroupitem.cpp | 305 + kicker/extensions/kasbar/kasgroupitem.h | 124 + kicker/extensions/kasbar/kasitem.cpp | 566 + kicker/extensions/kasbar/kasitem.h | 284 + kicker/extensions/kasbar/kasloaditem.cpp | 130 + kicker/extensions/kasbar/kasloaditem.h | 36 + kicker/extensions/kasbar/kaspopup.cpp | 121 + kicker/extensions/kasbar/kaspopup.h | 107 + kicker/extensions/kasbar/kasprefsdlg.cpp | 468 + kicker/extensions/kasbar/kasprefsdlg.h | 142 + kicker/extensions/kasbar/kasresources.cpp | 329 + kicker/extensions/kasbar/kasresources.h | 171 + kicker/extensions/kasbar/kasstartupitem.cpp | 161 + kicker/extensions/kasbar/kasstartupitem.h | 97 + kicker/extensions/kasbar/kastasker.cpp | 745 + kicker/extensions/kasbar/kastasker.h | 280 + kicker/extensions/kasbar/kastaskitem.cpp | 510 + kicker/extensions/kasbar/kastaskitem.h | 135 + kicker/extensions/kasbar/kastaskpopup.cpp | 139 + kicker/extensions/kasbar/kastaskpopup.h | 90 + kicker/extensions/kasbar/version.h | 3 + kicker/extensions/sidebar/Makefile.am | 16 + kicker/extensions/sidebar/sidebarextension.cpp | 181 + kicker/extensions/sidebar/sidebarextension.desktop | 147 + kicker/extensions/sidebar/sidebarextension.h | 63 + kicker/extensions/taskbar/Makefile.am | 23 + kicker/extensions/taskbar/taskbarextension.cpp | 235 + kicker/extensions/taskbar/taskbarextension.desktop | 147 + kicker/extensions/taskbar/taskbarextension.h | 72 + kicker/kicker/Makefile.am | 40 + kicker/kicker/buttons/Makefile.am | 24 + kicker/kicker/buttons/bookmarks.desktop | 133 + kicker/kicker/buttons/bookmarksbutton.cpp | 72 + kicker/kicker/buttons/bookmarksbutton.h | 58 + kicker/kicker/buttons/browser.desktop | 125 + kicker/kicker/buttons/browserbutton.cpp | 147 + kicker/kicker/buttons/browserbutton.h | 66 + kicker/kicker/buttons/desktop.desktop | 129 + kicker/kicker/buttons/desktopbutton.cpp | 84 + kicker/kicker/buttons/desktopbutton.h | 49 + kicker/kicker/buttons/exec.desktop | 125 + kicker/kicker/buttons/extensionbutton.cpp | 79 + kicker/kicker/buttons/extensionbutton.h | 52 + kicker/kicker/buttons/kbutton.cpp | 78 + kicker/kicker/buttons/kbutton.h | 50 + kicker/kicker/buttons/kmenu.desktop | 132 + kicker/kicker/buttons/nonkdeappbutton.cpp | 287 + kicker/kicker/buttons/nonkdeappbutton.h | 92 + kicker/kicker/buttons/servicebutton.cpp | 262 + kicker/kicker/buttons/servicebutton.h | 66 + kicker/kicker/buttons/servicemenubutton.cpp | 96 + kicker/kicker/buttons/servicemenubutton.h | 54 + kicker/kicker/buttons/urlbutton.cpp | 201 + kicker/kicker/buttons/urlbutton.h | 65 + kicker/kicker/buttons/windowlist.desktop | 130 + kicker/kicker/buttons/windowlistbutton.cpp | 47 + kicker/kicker/buttons/windowlistbutton.h | 48 + kicker/kicker/core/Makefile.am | 33 + kicker/kicker/core/applethandle.cpp | 402 + kicker/kicker/core/applethandle.h | 126 + kicker/kicker/core/childpanelextension.desktop | 145 + kicker/kicker/core/container_applet.cpp | 478 + kicker/kicker/core/container_applet.h | 113 + kicker/kicker/core/container_base.cpp | 139 + kicker/kicker/core/container_base.h | 134 + kicker/kicker/core/container_button.cpp | 542 + kicker/kicker/core/container_button.h | 195 + kicker/kicker/core/container_extension.cpp | 2067 + kicker/kicker/core/container_extension.h | 215 + kicker/kicker/core/containerarea.cpp | 1939 + kicker/kicker/core/containerarea.h | 195 + kicker/kicker/core/containerarealayout.cpp | 803 + kicker/kicker/core/containerarealayout.h | 120 + kicker/kicker/core/default-apps | 2 + kicker/kicker/core/extensionSettings.kcfg | 114 + kicker/kicker/core/extensionSettings.kcfgc | 5 + kicker/kicker/core/extensionmanager.cpp | 773 + kicker/kicker/core/extensionmanager.h | 92 + kicker/kicker/core/kicker.cpp | 401 + kicker/kicker/core/kicker.h | 131 + kicker/kicker/core/kickerbindings.cpp | 50 + kicker/kicker/core/main.cpp | 154 + kicker/kicker/core/menumanager.cpp | 272 + kicker/kicker/core/menumanager.h | 81 + kicker/kicker/core/panelextension.cpp | 445 + kicker/kicker/core/panelextension.h | 126 + kicker/kicker/core/pluginmanager.cpp | 378 + kicker/kicker/core/pluginmanager.h | 106 + kicker/kicker/core/showdesktop.cpp | 198 + kicker/kicker/core/showdesktop.h | 64 + kicker/kicker/core/unhidetrigger.cpp | 137 + kicker/kicker/core/unhidetrigger.h | 62 + kicker/kicker/core/userrectsel.cpp | 147 + kicker/kicker/core/userrectsel.h | 99 + kicker/kicker/kcmkicker.desktop | 80 + kicker/kicker/kicker-3.1-properSizeSetting.pl | 34 + kicker/kicker/kicker-3.4-reverseLayout.cpp | 152 + kicker/kicker/kicker-3.5-kconfigXTize.pl | 37 + kicker/kicker/kicker-3.5-taskbarEnums.pl | 54 + kicker/kicker/kickerrc.upd | 22 + kicker/kicker/panel.desktop | 86 + kicker/kicker/ui/Makefile.am | 41 + kicker/kicker/ui/addapplet.cpp | 542 + kicker/kicker/ui/addapplet.h | 82 + kicker/kicker/ui/addapplet_mnu.cpp | 75 + kicker/kicker/ui/addapplet_mnu.h | 50 + kicker/kicker/ui/addappletvisualfeedback.cpp | 230 + kicker/kicker/ui/addappletvisualfeedback.h | 80 + kicker/kicker/ui/addbutton_mnu.cpp | 73 + kicker/kicker/ui/addbutton_mnu.h | 51 + kicker/kicker/ui/addextension_mnu.cpp | 58 + kicker/kicker/ui/addextension_mnu.h | 47 + kicker/kicker/ui/appletitem.ui | 129 + kicker/kicker/ui/appletop_mnu.cpp | 208 + kicker/kicker/ui/appletop_mnu.h | 55 + kicker/kicker/ui/appletview.ui | 204 + kicker/kicker/ui/appletwidget.h | 72 + kicker/kicker/ui/browser_dlg.cpp | 114 + kicker/kicker/ui/browser_dlg.h | 53 + kicker/kicker/ui/browser_mnu.cpp | 552 + kicker/kicker/ui/browser_mnu.h | 81 + kicker/kicker/ui/client_mnu.cpp | 139 + kicker/kicker/ui/client_mnu.h | 81 + kicker/kicker/ui/dirdrop_mnu.cpp | 39 + kicker/kicker/ui/dirdrop_mnu.h | 37 + kicker/kicker/ui/exe_dlg.cpp | 204 + kicker/kicker/ui/exe_dlg.h | 65 + kicker/kicker/ui/extensionop_mnu.cpp | 66 + kicker/kicker/ui/extensionop_mnu.h | 36 + kicker/kicker/ui/hidebutton.cpp | 202 + kicker/kicker/ui/hidebutton.h | 56 + kicker/kicker/ui/k_mnu.cpp | 739 + kicker/kicker/ui/k_mnu.h | 106 + kicker/kicker/ui/nonKDEButtonSettings.ui | 221 + kicker/kicker/ui/panelmenuiteminfo.h | 103 + kicker/kicker/ui/popupmenutitle.cpp | 33 + kicker/kicker/ui/popupmenutitle.h | 85 + kicker/kicker/ui/quickbrowser_mnu.cpp | 60 + kicker/kicker/ui/quickbrowser_mnu.h | 43 + kicker/kicker/ui/recentapps.cpp | 172 + kicker/kicker/ui/recentapps.h | 99 + kicker/kicker/ui/removeapplet_mnu.cpp | 99 + kicker/kicker/ui/removeapplet_mnu.h | 52 + kicker/kicker/ui/removebutton_mnu.cpp | 111 + kicker/kicker/ui/removebutton_mnu.h | 55 + kicker/kicker/ui/removecontainer_mnu.cpp | 61 + kicker/kicker/ui/removecontainer_mnu.h | 47 + kicker/kicker/ui/removeextension_mnu.cpp | 108 + kicker/kicker/ui/removeextension_mnu.h | 48 + kicker/kicker/ui/service_mnu.cpp | 823 + kicker/kicker/ui/service_mnu.h | 129 + kicker/libkicker/Makefile.am | 19 + kicker/libkicker/appletinfo.cpp | 112 + kicker/libkicker/appletinfo.h | 92 + kicker/libkicker/global.cpp | 477 + kicker/libkicker/global.h | 112 + kicker/libkicker/kickerSettings.kcfg | 342 + kicker/libkicker/kickerSettings.kcfgc | 8 + kicker/libkicker/kickertip.cpp | 557 + kicker/libkicker/kickertip.h | 121 + kicker/libkicker/kshadowengine.cpp | 251 + kicker/libkicker/kshadowengine.h | 123 + kicker/libkicker/kshadowsettings.cpp | 182 + kicker/libkicker/kshadowsettings.h | 236 + kicker/libkicker/menuinfo.cpp | 68 + kicker/libkicker/menuinfo.h | 52 + kicker/libkicker/panelbutton.cpp | 985 + kicker/libkicker/panelbutton.h | 471 + kicker/libkicker/paneldrag.cpp | 180 + kicker/libkicker/paneldrag.h | 68 + kicker/libkicker/panner.cpp | 396 + kicker/libkicker/panner.h | 115 + kicker/libkicker/simplebutton.cpp | 258 + kicker/libkicker/simplebutton.h | 89 + kicker/menuext/Makefile.am | 2 + kicker/menuext/find/Makefile.am | 18 + kicker/menuext/find/find.desktop | 133 + kicker/menuext/find/findmenu.cpp | 84 + kicker/menuext/find/findmenu.h | 47 + kicker/menuext/find/kfind.desktop | 89 + kicker/menuext/find/websearch.desktop | 80 + kicker/menuext/kate/Makefile.am | 15 + kicker/menuext/kate/katesessionmenu.cpp | 150 + kicker/menuext/kate/katesessionmenu.desktop | 98 + kicker/menuext/kate/katesessionmenu.h | 45 + kicker/menuext/kdeprint/Makefile.am | 15 + kicker/menuext/kdeprint/print_mnu.cpp | 139 + kicker/menuext/kdeprint/print_mnu.h | 46 + kicker/menuext/kdeprint/printmenu.desktop | 144 + kicker/menuext/konq-profiles/Makefile.am | 15 + kicker/menuext/konq-profiles/konquerormenu.desktop | 136 + kicker/menuext/konq-profiles/konqy_menu.cpp | 102 + kicker/menuext/konq-profiles/konqy_menu.h | 50 + kicker/menuext/konsole/Makefile.am | 15 + kicker/menuext/konsole/konsole_mnu.cpp | 318 + kicker/menuext/konsole/konsole_mnu.h | 64 + kicker/menuext/konsole/konsolebookmarkhandler.cpp | 117 + kicker/menuext/konsole/konsolebookmarkhandler.h | 60 + kicker/menuext/konsole/konsolebookmarkmenu.cpp | 187 + kicker/menuext/konsole/konsolebookmarkmenu.h | 58 + kicker/menuext/konsole/konsolemenu.desktop | 137 + kicker/menuext/prefmenu/Makefile.am | 17 + kicker/menuext/prefmenu/prefmenu.cpp | 394 + kicker/menuext/prefmenu/prefmenu.desktop | 135 + kicker/menuext/prefmenu/prefmenu.h | 74 + kicker/menuext/recentdocs/Makefile.am | 15 + kicker/menuext/recentdocs/recentdocs.desktop | 140 + kicker/menuext/recentdocs/recentdocsmenu.cpp | 139 + kicker/menuext/recentdocs/recentdocsmenu.h | 55 + kicker/menuext/remote/Makefile.am | 17 + kicker/menuext/remote/remotemenu.cpp | 164 + kicker/menuext/remote/remotemenu.desktop | 133 + kicker/menuext/remote/remotemenu.h | 53 + kicker/menuext/system/Makefile.am | 15 + kicker/menuext/system/systemmenu.cpp | 91 + kicker/menuext/system/systemmenu.desktop | 127 + kicker/menuext/system/systemmenu.h | 50 + kicker/menuext/tom/Makefile.am | 19 + kicker/menuext/tom/README | 65 + kicker/menuext/tom/TASKGROUPS | 49 + kicker/menuext/tom/destinations | 18 + kicker/menuext/tom/tom.cc | 855 + kicker/menuext/tom/tom.desktop | 75 + kicker/menuext/tom/tom.h | 110 + kicker/proxy/Makefile.am | 24 + kicker/proxy/appletproxy.cpp | 516 + kicker/proxy/appletproxy.h | 67 + kicker/proxy/extensiondebugger.cpp | 160 + kicker/proxy/extensiondebugger.h | 47 + kicker/proxy/extensionproxy.cpp | 401 + kicker/proxy/extensionproxy.h | 61 + kicker/rich-ideas.txt | 62 + kicker/taskbar/Makefile.am | 20 + kicker/taskbar/taskbar.cpp | 1231 + kicker/taskbar/taskbar.h | 135 + kicker/taskbar/taskbar.kcfg | 173 + kicker/taskbar/taskbarbindings.cpp | 37 + kicker/taskbar/taskbarcontainer.cpp | 292 + kicker/taskbar/taskbarcontainer.h | 75 + kicker/taskbar/taskbarsettings.kcfgc | 7 + kicker/taskbar/taskcontainer.cpp | 1643 + kicker/taskbar/taskcontainer.h | 153 + kicker/taskmanager/Makefile.am | 11 + kicker/taskmanager/configure.in.in | 25 + kicker/taskmanager/tasklmbmenu.cpp | 281 + kicker/taskmanager/tasklmbmenu.h | 85 + kicker/taskmanager/taskmanager.cpp | 1521 + kicker/taskmanager/taskmanager.h | 713 + kicker/taskmanager/taskrmbmenu.cpp | 328 + kicker/taskmanager/taskrmbmenu.h | 59 + kioslave/DEBUG.howto | 89 + kioslave/DESIGN | 43 + kioslave/Makefile.am | 11 + kioslave/about/Makefile.am | 21 + kioslave/about/about.protocol | 9 + kioslave/about/kio_about.cpp | 76 + kioslave/about/kio_about.h | 39 + kioslave/cgi/Makefile.am | 16 + kioslave/cgi/README | 15 + kioslave/cgi/cgi.cpp | 273 + kioslave/cgi/cgi.h | 48 + kioslave/cgi/cgi.protocol | 8 + kioslave/cgi/kcmcgi/Makefile.am | 17 + kioslave/cgi/kcmcgi/kcmcgi.cpp | 151 + kioslave/cgi/kcmcgi/kcmcgi.desktop | 231 + kioslave/cgi/kcmcgi/kcmcgi.h | 55 + kioslave/configure.in.bot | 7 + kioslave/configure.in.in | 15 + kioslave/filter/Makefile.am | 21 + kioslave/filter/bzip.protocol | 10 + kioslave/filter/bzip2.protocol | 10 + kioslave/filter/configure.in.in | 1 + kioslave/filter/filter.cc | 167 + kioslave/filter/filter.h | 46 + kioslave/filter/gzip.protocol | 10 + kioslave/finger/Makefile.am | 27 + kioslave/finger/finger.protocol | 9 + kioslave/finger/kio_finger.cpp | 266 + kioslave/finger/kio_finger.css | 69 + kioslave/finger/kio_finger.h | 64 + kioslave/finger/kio_finger.pl | 175 + kioslave/fish/AUTHORS | 1 + kioslave/fish/COPYING | 340 + kioslave/fish/ChangeLog | 71 + kioslave/fish/FAQ | 37 + kioslave/fish/INSTALL | 167 + kioslave/fish/Makefile.am | 33 + kioslave/fish/README | 258 + kioslave/fish/TODO | 10 + kioslave/fish/configure.in.in | 9 + kioslave/fish/fish.cpp | 1661 + kioslave/fish/fish.h | 211 + kioslave/fish/fish.pl | 369 + kioslave/fish/fish.protocol | 81 + kioslave/fish/nxfish.protocol | 74 + kioslave/floppy/AUTHORS | 2 + kioslave/floppy/Makefile.am | 20 + kioslave/floppy/README | 7 + kioslave/floppy/TODO | 3 + kioslave/floppy/floppy.protocol | 14 + kioslave/floppy/kio_floppy.cpp | 1169 + kioslave/floppy/kio_floppy.h | 78 + kioslave/floppy/program.cpp | 201 + kioslave/floppy/program.h | 53 + kioslave/home/Makefile.am | 32 + kioslave/home/dummy.cpp | 1 + kioslave/home/home.protocol | 19 + kioslave/home/homeimpl.cpp | 228 + kioslave/home/homeimpl.h | 57 + kioslave/home/kdedmodule/Makefile.am | 13 + kioslave/home/kdedmodule/homedirnotify.cpp | 185 + kioslave/home/kdedmodule/homedirnotify.desktop | 60 + kioslave/home/kdedmodule/homedirnotify.h | 48 + kioslave/home/kdedmodule/homedirnotifymodule.cpp | 37 + kioslave/home/kdedmodule/homedirnotifymodule.h | 36 + kioslave/home/kio_home.cpp | 186 + kioslave/home/kio_home.h | 44 + kioslave/home/testhome.cpp | 69 + kioslave/home/testhome.h | 34 + kioslave/info/LICENSE | 22 + kioslave/info/Makefile.am | 21 + kioslave/info/info.cc | 261 + kioslave/info/info.h | 36 + kioslave/info/info.protocol | 11 + kioslave/info/kde-info2html | 1031 + kioslave/info/kde-info2html.conf | 43 + kioslave/ldap/LICENSE | 16 + kioslave/ldap/Makefile.am | 22 + kioslave/ldap/configure.in.in | 111 + kioslave/ldap/kio_ldap.cpp | 1154 + kioslave/ldap/kio_ldap.h | 65 + kioslave/ldap/ldap.protocol | 17 + kioslave/ldap/ldaps.protocol | 17 + kioslave/mac/AUTHORS | 1 + kioslave/mac/ChangeLog | 39 + kioslave/mac/Makefile.am | 23 + kioslave/mac/README | 65 + kioslave/mac/TODO | 14 + kioslave/mac/cr16-app-mac.png | Bin 0 -> 679 bytes kioslave/mac/cr32-app-mac.png | Bin 0 -> 1342 bytes kioslave/mac/kio_mac.cpp | 561 + kioslave/mac/kio_mac.h | 55 + kioslave/mac/mac.protocol | 73 + kioslave/man/LICENSE | 16 + kioslave/man/Makefile.am | 51 + kioslave/man/kio_man.cpp | 1532 + kioslave/man/kio_man.css | 21 + kioslave/man/kio_man.h | 99 + kioslave/man/kio_man_test.cpp | 38 + kioslave/man/kmanpart.cpp | 115 + kioslave/man/kmanpart.desktop | 91 + kioslave/man/kmanpart.h | 79 + kioslave/man/man.protocol | 12 + kioslave/man/man2html.cpp | 5683 ++ kioslave/man/man2html.h | 34 + kioslave/media/Makefile.am | 36 + kioslave/media/configure.in.in | 184 + kioslave/media/contrib/README | 18 + kioslave/media/contrib/mediamanager_usbstorage.dev | 108 + kioslave/media/contrib/usbcam | 82 + kioslave/media/dummy.cpp | 1 + kioslave/media/kcmodule/Makefile.am | 21 + kioslave/media/kcmodule/main.cpp | 103 + kioslave/media/kcmodule/main.h | 45 + kioslave/media/kcmodule/managermodule.cpp | 74 + kioslave/media/kcmodule/managermodule.h | 34 + kioslave/media/kcmodule/managermoduleview.ui | 72 + kioslave/media/kcmodule/media.desktop | 197 + kioslave/media/kcmodule/mimetypelistboxitem.cpp | 35 + kioslave/media/kcmodule/mimetypelistboxitem.h | 37 + kioslave/media/kcmodule/notifiermodule.cpp | 230 + kioslave/media/kcmodule/notifiermodule.h | 57 + kioslave/media/kcmodule/notifiermoduleview.ui | 171 + kioslave/media/kcmodule/serviceconfigdialog.cpp | 151 + kioslave/media/kcmodule/serviceconfigdialog.h | 48 + kioslave/media/kcmodule/serviceview.ui | 248 + kioslave/media/kfile-plugin/Makefile.am | 13 + kioslave/media/kfile-plugin/kfile_media.desktop | 75 + kioslave/media/kfile-plugin/kfilemediaplugin.cpp | 197 + kioslave/media/kfile-plugin/kfilemediaplugin.h | 47 + kioslave/media/kio_media.cpp | 275 + kioslave/media/kio_media.h | 54 + kioslave/media/libmediacommon/Makefile.am | 11 + .../media/libmediacommon/actionlistboxitem.cpp | 47 + kioslave/media/libmediacommon/actionlistboxitem.h | 40 + .../media/libmediacommon/mediamanagersettings.kcfg | 23 + .../libmediacommon/mediamanagersettings.kcfgc | 4 + kioslave/media/libmediacommon/medium.cpp | 228 + kioslave/media/libmediacommon/medium.h | 110 + kioslave/media/libmediacommon/notifieraction.cpp | 97 + kioslave/media/libmediacommon/notifieraction.h | 60 + .../media/libmediacommon/notifiernothingaction.cpp | 39 + .../media/libmediacommon/notifiernothingaction.h | 34 + .../media/libmediacommon/notifieropenaction.cpp | 45 + kioslave/media/libmediacommon/notifieropenaction.h | 34 + .../media/libmediacommon/notifierserviceaction.cpp | 166 + .../media/libmediacommon/notifierserviceaction.h | 61 + kioslave/media/libmediacommon/notifiersettings.cpp | 379 + kioslave/media/libmediacommon/notifiersettings.h | 63 + kioslave/media/media.protocol | 18 + kioslave/media/mediaimpl.cpp | 429 + kioslave/media/mediaimpl.h | 81 + kioslave/media/mediamanager/Makefile.am | 32 + kioslave/media/mediamanager/backendbase.cpp | 26 + kioslave/media/mediamanager/backendbase.h | 35 + kioslave/media/mediamanager/fstabbackend.cpp | 483 + kioslave/media/mediamanager/fstabbackend.h | 68 + kioslave/media/mediamanager/halbackend.cpp | 1345 + kioslave/media/mediamanager/halbackend.h | 228 + kioslave/media/mediamanager/linuxcdpolling.cpp | 585 + kioslave/media/mediamanager/linuxcdpolling.h | 86 + kioslave/media/mediamanager/mediadirnotify.cpp | 124 + kioslave/media/mediamanager/mediadirnotify.h | 47 + kioslave/media/mediamanager/medialist.cpp | 288 + kioslave/media/mediamanager/medialist.h | 79 + kioslave/media/mediamanager/mediamanager.cpp | 342 + kioslave/media/mediamanager/mediamanager.desktop | 141 + kioslave/media/mediamanager/mediamanager.h | 90 + kioslave/media/mediamanager/removablebackend.cpp | 180 + kioslave/media/mediamanager/removablebackend.h | 52 + kioslave/media/medianotifier/Makefile.am | 18 + kioslave/media/medianotifier/medianotifier.cpp | 312 + kioslave/media/medianotifier/medianotifier.desktop | 122 + kioslave/media/medianotifier/medianotifier.h | 57 + .../media/medianotifier/notificationdialog.cpp | 147 + kioslave/media/medianotifier/notificationdialog.h | 56 + .../media/medianotifier/notificationdialogview.ui | 117 + kioslave/media/mimetypes/Makefile.am | 22 + kioslave/media/mimetypes/audiocd.desktop | 66 + kioslave/media/mimetypes/blankcd.desktop | 73 + kioslave/media/mimetypes/blankdvd.desktop | 73 + kioslave/media/mimetypes/camera_mounted.desktop | 69 + kioslave/media/mimetypes/camera_unmounted.desktop | 69 + kioslave/media/mimetypes/cdrom_mounted.desktop | 85 + kioslave/media/mimetypes/cdrom_unmounted.desktop | 86 + kioslave/media/mimetypes/cdwriter_mounted.desktop | 86 + .../media/mimetypes/cdwriter_unmounted.desktop | 86 + kioslave/media/mimetypes/dvd_mounted.desktop | 81 + kioslave/media/mimetypes/dvd_unmounted.desktop | 81 + kioslave/media/mimetypes/dvdvideo.desktop | 73 + kioslave/media/mimetypes/floppy5_mounted.desktop | 85 + kioslave/media/mimetypes/floppy5_unmounted.desktop | 85 + kioslave/media/mimetypes/floppy_mounted.desktop | 85 + kioslave/media/mimetypes/floppy_unmounted.desktop | 85 + kioslave/media/mimetypes/gphoto2camera.desktop | 76 + kioslave/media/mimetypes/hdd_mounted.desktop | 77 + kioslave/media/mimetypes/hdd_unmounted.desktop | 77 + kioslave/media/mimetypes/nfs_mounted.desktop | 77 + kioslave/media/mimetypes/nfs_unmounted.desktop | 77 + kioslave/media/mimetypes/removable_mounted.desktop | 77 + .../media/mimetypes/removable_unmounted.desktop | 77 + kioslave/media/mimetypes/smb_mounted.desktop | 83 + kioslave/media/mimetypes/smb_unmounted.desktop | 84 + kioslave/media/mimetypes/svcd.desktop | 50 + kioslave/media/mimetypes/vcd.desktop | 50 + kioslave/media/mimetypes/zip_mounted.desktop | 85 + kioslave/media/mimetypes/zip_unmounted.desktop | 85 + kioslave/media/mounthelper/Makefile.am | 12 + .../media/mounthelper/kio_media_mounthelper.cpp | 209 + kioslave/media/mounthelper/kio_media_mounthelper.h | 49 + kioslave/media/propsdlgplugin/Makefile.am | 12 + .../propsdlgplugin/media_propsdlgplugin.desktop | 102 + kioslave/media/propsdlgplugin/propertiespage.cpp | 217 + kioslave/media/propsdlgplugin/propertiespage.h | 46 + kioslave/media/propsdlgplugin/propertiespagegui.ui | 387 + .../media/propsdlgplugin/propertiespagegui.ui.h | 22 + .../media/propsdlgplugin/propsdlgshareplugin.cpp | 100 + .../media/propsdlgplugin/propsdlgshareplugin.h | 44 + kioslave/media/services/Makefile.am | 3 + kioslave/media/services/media_eject.desktop | 90 + kioslave/media/services/media_mount.desktop | 87 + kioslave/media/services/media_safelyremove.desktop | 75 + kioslave/media/services/media_unmount.desktop | 87 + kioslave/media/testmedia.cpp | 69 + kioslave/media/testmedia.h | 34 + kioslave/nfs/AUTHORS | 2 + kioslave/nfs/Makefile.am | 28 + kioslave/nfs/README | 3 + kioslave/nfs/TODO | 7 + kioslave/nfs/kio_nfs.cpp | 1615 + kioslave/nfs/kio_nfs.h | 109 + kioslave/nfs/mount.h | 325 + kioslave/nfs/mount.x | 255 + kioslave/nfs/mount_xdr.c | 335 + kioslave/nfs/nfs.protocol | 14 + kioslave/nfs/nfs_prot.h | 699 + kioslave/nfs/nfs_prot.x | 365 + kioslave/nfs/nfs_prot_xdr.c | 886 + kioslave/nntp/LICENSE | 16 + kioslave/nntp/Makefile.am | 19 + kioslave/nntp/nntp.cpp | 896 + kioslave/nntp/nntp.h | 130 + kioslave/nntp/nntp.protocol | 11 + kioslave/nntp/nntps.protocol | 11 + kioslave/pop3/Makefile.am | 17 + kioslave/pop3/pop3.cc | 1263 + kioslave/pop3/pop3.h | 133 + kioslave/pop3/pop3.protocol | 16 + kioslave/pop3/pop3s.protocol | 16 + kioslave/remote/Makefile.am | 32 + kioslave/remote/dummy.cpp | 1 + kioslave/remote/kdedmodule/Makefile.am | 13 + kioslave/remote/kdedmodule/remotedirnotify.cpp | 143 + kioslave/remote/kdedmodule/remotedirnotify.desktop | 64 + kioslave/remote/kdedmodule/remotedirnotify.h | 43 + .../remote/kdedmodule/remotedirnotifymodule.cpp | 37 + kioslave/remote/kdedmodule/remotedirnotifymodule.h | 36 + kioslave/remote/kio_remote.cpp | 234 + kioslave/remote/kio_remote.h | 45 + kioslave/remote/remote.protocol | 17 + kioslave/remote/remoteimpl.cpp | 298 + kioslave/remote/remoteimpl.h | 54 + kioslave/remote/testremote.cpp | 69 + kioslave/remote/testremote.h | 34 + kioslave/settings/Makefile.am | 21 + kioslave/settings/applications.protocol | 15 + kioslave/settings/kio_settings.cc | 298 + kioslave/settings/kio_settings.h | 0 kioslave/settings/programs.protocol | 15 + kioslave/settings/settings.protocol | 15 + kioslave/sftp/AUTHORS | 3 + kioslave/sftp/CHANGELOG | 59 + kioslave/sftp/DEBUGGING | 12 + kioslave/sftp/Makefile.am | 25 + kioslave/sftp/TODO | 5 + kioslave/sftp/atomicio.cpp | 67 + kioslave/sftp/atomicio.h | 39 + kioslave/sftp/kio_sftp.cpp | 2286 + kioslave/sftp/kio_sftp.h | 149 + kioslave/sftp/ksshprocess.cpp | 1104 + kioslave/sftp/ksshprocess.h | 623 + kioslave/sftp/ksshprocesstest.cpp | 98 + kioslave/sftp/process.cpp | 493 + kioslave/sftp/process.h | 148 + kioslave/sftp/sftp.h | 91 + kioslave/sftp/sftp.protocol | 84 + kioslave/sftp/sftpfileattr.cpp | 346 + kioslave/sftp/sftpfileattr.h | 261 + kioslave/smb/Makefile.am | 37 + kioslave/smb/configure.in.bot | 9 + kioslave/smb/configure.in.in | 34 + kioslave/smb/kio_smb.cpp | 77 + kioslave/smb/kio_smb.h | 301 + kioslave/smb/kio_smb_auth.cpp | 206 + kioslave/smb/kio_smb_browse.cpp | 476 + kioslave/smb/kio_smb_config.cpp | 66 + kioslave/smb/kio_smb_dir.cpp | 345 + kioslave/smb/kio_smb_file.cpp | 279 + kioslave/smb/kio_smb_internal.cpp | 135 + kioslave/smb/kio_smb_internal.h | 118 + kioslave/smb/kio_smb_mount.cpp | 211 + kioslave/smb/libsmbclient-HOWTO.txt | 11 + kioslave/smb/smb-network.desktop | 80 + kioslave/smb/smb.protocol | 12 + kioslave/smb/x-smb-server.desktop | 76 + kioslave/smb/x-smb-workgroup.desktop | 74 + kioslave/smtp/Makefile.am | 37 + kioslave/smtp/TODO | 11 + kioslave/smtp/capabilities.cc | 143 + kioslave/smtp/capabilities.h | 77 + kioslave/smtp/command.cc | 606 + kioslave/smtp/command.h | 283 + kioslave/smtp/compliance.txt | 33 + kioslave/smtp/interactivesmtpserver.cc | 127 + kioslave/smtp/interactivesmtpserver.h | 121 + kioslave/smtp/request.cc | 189 + kioslave/smtp/request.h | 100 + kioslave/smtp/response.cc | 160 + kioslave/smtp/response.h | 125 + kioslave/smtp/smtp.cc | 647 + kioslave/smtp/smtp.h | 146 + kioslave/smtp/smtp.protocol | 16 + kioslave/smtp/smtps.protocol | 15 + kioslave/smtp/test_commands.cc | 728 + kioslave/smtp/test_headergeneration.cc | 86 + kioslave/smtp/test_responseparser.cc | 107 + kioslave/smtp/transactionstate.cc | 114 + kioslave/smtp/transactionstate.h | 185 + kioslave/system/Makefile.am | 31 + kioslave/system/dummy.cpp | 1 + kioslave/system/entries/Makefile.am | 5 + kioslave/system/entries/documents.desktop | 68 + kioslave/system/entries/home.desktop | 78 + kioslave/system/entries/kio_system_documenthelper | 14 + kioslave/system/entries/media.desktop | 71 + kioslave/system/entries/remote.desktop | 73 + kioslave/system/entries/trash.desktop | 84 + kioslave/system/entries/users.desktop | 67 + kioslave/system/kdedmodule/Makefile.am | 13 + kioslave/system/kdedmodule/systemdirnotify.cpp | 184 + kioslave/system/kdedmodule/systemdirnotify.desktop | 64 + kioslave/system/kdedmodule/systemdirnotify.h | 47 + .../system/kdedmodule/systemdirnotifymodule.cpp | 37 + kioslave/system/kdedmodule/systemdirnotifymodule.h | 36 + kioslave/system/kio_system.cpp | 189 + kioslave/system/kio_system.h | 45 + kioslave/system/mimetypes/Makefile.am | 6 + kioslave/system/mimetypes/system_directory.desktop | 76 + kioslave/system/system.protocol | 19 + kioslave/system/systemimpl.cpp | 276 + kioslave/system/systemimpl.h | 65 + kioslave/system/testsystem.cpp | 69 + kioslave/system/testsystem.h | 34 + kioslave/tar/Makefile.am | 24 + kioslave/tar/ar.protocol | 12 + kioslave/tar/ktartest.cpp | 201 + kioslave/tar/tar.cc | 623 + kioslave/tar/tar.h | 55 + kioslave/tar/tar.protocol | 12 + kioslave/tar/zip.protocol | 12 + kioslave/thumbnail/Makefile.am | 69 + kioslave/thumbnail/configure.in.in | 14 + kioslave/thumbnail/cursorcreator.cpp | 69 + kioslave/thumbnail/cursorcreator.h | 33 + kioslave/thumbnail/cursorthumbnail.desktop | 80 + kioslave/thumbnail/djvucreator.cpp | 139 + kioslave/thumbnail/djvucreator.h | 35 + kioslave/thumbnail/djvuthumbnail.desktop | 81 + kioslave/thumbnail/exrcreator.cpp | 85 + kioslave/thumbnail/exrcreator.h | 33 + kioslave/thumbnail/exrthumbnail.desktop | 79 + kioslave/thumbnail/htmlcreator.cpp | 118 + kioslave/thumbnail/htmlcreator.h | 47 + kioslave/thumbnail/htmlthumbnail.desktop | 86 + kioslave/thumbnail/imagecreator.cpp | 51 + kioslave/thumbnail/imagecreator.h | 33 + kioslave/thumbnail/imagethumbnail.desktop | 85 + kioslave/thumbnail/textcreator.cpp | 195 + kioslave/thumbnail/textcreator.h | 43 + kioslave/thumbnail/textthumbnail.desktop | 87 + kioslave/thumbnail/thumbcreator.desktop | 86 + kioslave/thumbnail/thumbnail.cpp | 440 + kioslave/thumbnail/thumbnail.h | 54 + kioslave/thumbnail/thumbnail.protocol | 9 + kioslave/trash/DESIGN | 53 + kioslave/trash/Makefile.am | 31 + kioslave/trash/kfile-plugin/Makefile.am | 14 + kioslave/trash/kfile-plugin/RETURNED_ITEMS | 4 + kioslave/trash/kfile-plugin/kfile_trash.cpp | 93 + kioslave/trash/kfile-plugin/kfile_trash.desktop | 79 + kioslave/trash/kfile-plugin/kfile_trash.h | 42 + .../trash/kfile-plugin/kfile_trash_system.desktop | 79 + kioslave/trash/kio_trash.cpp | 596 + kioslave/trash/kio_trash.h | 71 + kioslave/trash/ktrash.cpp | 102 + kioslave/trash/testtrash.cpp | 1198 + kioslave/trash/testtrash.h | 118 + kioslave/trash/trash.protocol | 89 + kioslave/trash/trashimpl.cpp | 962 + kioslave/trash/trashimpl.h | 182 + klipper/Makefile.am | 51 + klipper/applet.cpp | 141 + klipper/applet.h | 66 + klipper/clipboardpoll.cpp | 336 + klipper/clipboardpoll.h | 66 + klipper/configdialog.cpp | 465 + klipper/configdialog.h | 263 + klipper/configure.in.in | 11 + klipper/hi128-app-klipper.png | Bin 0 -> 6589 bytes klipper/hi16-app-klipper.png | Bin 0 -> 967 bytes klipper/hi22-app-klipper.png | Bin 0 -> 1051 bytes klipper/hi32-app-klipper.png | Bin 0 -> 1673 bytes klipper/hi48-app-klipper.png | Bin 0 -> 2575 bytes klipper/hi64-app-klipper.png | Bin 0 -> 3224 bytes klipper/hisc-app-klipper.svgz | Bin 0 -> 3091 bytes klipper/history.cpp | 132 + klipper/history.h | 169 + klipper/historyimageitem.cpp | 46 + klipper/historyimageitem.h | 61 + klipper/historyitem.cpp | 101 + klipper/historyitem.h | 95 + klipper/historystringitem.cpp | 31 + klipper/historystringitem.h | 57 + klipper/historyurlitem.cpp | 63 + klipper/historyurlitem.h | 49 + klipper/klipper-1-2.pl | 63 + klipper/klipper-kde31.sh | 8 + klipper/klipper.desktop | 165 + klipper/klipperbindings.cpp | 36 + klipper/klipperpopup.cpp | 304 + klipper/klipperpopup.h | 127 + klipper/klipperrc.desktop | 2066 + klipper/klipperrc.upd | 7 + klipper/klippershortcuts.upd | 5 + klipper/main.cpp | 67 + klipper/popupproxy.cpp | 163 + klipper/popupproxy.h | 93 + klipper/toplevel.cpp | 1174 + klipper/toplevel.h | 221 + klipper/urlgrabber.cpp | 497 + klipper/urlgrabber.h | 159 + klipper/version.h | 26 + kmenuedit/Makefile.am | 52 + kmenuedit/basictab.cpp | 500 + kmenuedit/basictab.h | 87 + kmenuedit/hi16-app-kmenuedit.png | Bin 0 -> 679 bytes kmenuedit/hi22-app-kmenuedit.png | Bin 0 -> 1485 bytes kmenuedit/hi32-app-kmenuedit.png | Bin 0 -> 2481 bytes kmenuedit/hi48-app-kmenuedit.png | Bin 0 -> 1963 bytes kmenuedit/kcontrol_main.cpp | 58 + kmenuedit/kcontroleditui.rc | 40 + kmenuedit/khotkeys.cpp | 148 + kmenuedit/khotkeys.h | 44 + kmenuedit/kmenuedit.cpp | 186 + kmenuedit/kmenuedit.desktop | 92 + kmenuedit/kmenuedit.h | 62 + kmenuedit/kmenueditui.rc | 44 + kmenuedit/main.cpp | 88 + kmenuedit/menufile.cpp | 552 + kmenuedit/menufile.h | 114 + kmenuedit/menuinfo.cpp | 502 + kmenuedit/menuinfo.h | 192 + kmenuedit/pixmaps/Makefile.am | 5 + kmenuedit/pixmaps/cr22-action-menu_new.png | Bin 0 -> 1247 bytes kmenuedit/pixmaps/cr22-action-menu_new_sep.png | Bin 0 -> 162 bytes kmenuedit/pixmaps/cr32-action-menu_new.png | Bin 0 -> 2481 bytes kmenuedit/pixmaps/cr32-action-menu_new_sep.png | Bin 0 -> 596 bytes kmenuedit/pixmaps/lo16-action-menu_new.png | Bin 0 -> 679 bytes kmenuedit/treeview.cpp | 1581 + kmenuedit/treeview.h | 179 + kmenuedit/uninstall.desktop | 2 + knetattach/Makefile.am | 14 + knetattach/TODO | 4 + knetattach/hi128-app-knetattach.png | Bin 0 -> 14284 bytes knetattach/hi16-app-knetattach.png | Bin 0 -> 894 bytes knetattach/hi22-app-knetattach.png | Bin 0 -> 1396 bytes knetattach/hi32-app-knetattach.png | Bin 0 -> 2350 bytes knetattach/hi48-app-knetattach.png | Bin 0 -> 4204 bytes knetattach/hi64-app-knetattach.png | Bin 0 -> 6115 bytes knetattach/hisc-app-knetattach.svgz | Bin 0 -> 6038 bytes knetattach/knetattach.desktop | 82 + knetattach/knetattach.ui | 440 + knetattach/knetattach.ui.h | 288 + knetattach/main.cpp | 46 + konqueror/AUTHORS | 16 + konqueror/ChangeLog | 433 + konqueror/DESIGN | 99 + konqueror/DESIGN_config | 43 + konqueror/Home.desktop | 170 + konqueror/IDEAS | 223 + konqueror/KonqMainWindowIface.cc | 175 + konqueror/KonqMainWindowIface.h | 95 + konqueror/KonqViewIface.cc | 141 + konqueror/KonqViewIface.h | 136 + konqueror/KonquerorIface.cc | 295 + konqueror/KonquerorIface.h | 189 + konqueror/Makefile.am | 105 + konqueror/TODO | 49 + konqueror/about/Makefile.am | 17 + konqueror/about/box-centre-konqueror.png | Bin 0 -> 34202 bytes konqueror/about/intro.html | 89 + konqueror/about/konq.css | 21 + konqueror/about/konq_aboutpage.cc | 518 + konqueror/about/konq_aboutpage.desktop | 86 + konqueror/about/konq_aboutpage.h | 63 + konqueror/about/konqaboutpage.desktop | 4 + konqueror/about/launch.html | 119 + konqueror/about/lightning.png | Bin 0 -> 203 bytes konqueror/about/plugins.html | 48 + konqueror/about/plugins_rtl.html | 51 + konqueror/about/specs.html | 206 + konqueror/about/tips.html | 126 + konqueror/about/top-right-konqueror.png | Bin 0 -> 16195 bytes konqueror/client/ChangeLog | 14 + konqueror/client/Makefile.am | 23 + konqueror/client/kfmclient.cc | 643 + konqueror/client/kfmclient.h | 51 + konqueror/client/kfmclient_3_2.upd | 4 + konqueror/client/kfmclient_3_2_update.sh | 21 + konqueror/convert_kdelnk.sh | 27 + konqueror/delayedinitializer.cc | 55 + konqueror/delayedinitializer.h | 45 + konqueror/iconview/Makefile.am | 17 + konqueror/iconview/konq_iconview.cc | 1539 + konqueror/iconview/konq_iconview.desktop | 92 + konqueror/iconview/konq_iconview.h | 299 + konqueror/iconview/konq_iconview.rc | 51 + konqueror/iconview/konq_multicolumnview.desktop | 92 + konqueror/iconview/konq_multicolumnview.rc | 47 + konqueror/keditbookmarks/DESIGN | 20 + konqueror/keditbookmarks/Makefile.am | 34 + konqueror/keditbookmarks/TODO | 120 + konqueror/keditbookmarks/actionsimpl.cpp | 638 + konqueror/keditbookmarks/actionsimpl.h | 83 + konqueror/keditbookmarks/bookmarkinfo.cpp | 293 + konqueror/keditbookmarks/bookmarkinfo.h | 111 + konqueror/keditbookmarks/bookmarkiterator.cpp | 105 + konqueror/keditbookmarks/bookmarkiterator.h | 74 + konqueror/keditbookmarks/commands.cpp | 745 + konqueror/keditbookmarks/commands.h | 256 + .../keditbookmarks/cr16-app-keditbookmarks.png | Bin 0 -> 916 bytes .../keditbookmarks/cr32-app-keditbookmarks.png | Bin 0 -> 1636 bytes .../keditbookmarks/cr48-app-keditbookmarks.png | Bin 0 -> 2663 bytes .../keditbookmarks/cr64-app-keditbookmarks.png | Bin 0 -> 5042 bytes konqueror/keditbookmarks/dcop.cpp | 67 + konqueror/keditbookmarks/dcop.h | 36 + konqueror/keditbookmarks/exporters.cpp | 90 + konqueror/keditbookmarks/exporters.h | 39 + konqueror/keditbookmarks/favicons.cpp | 100 + konqueror/keditbookmarks/favicons.h | 69 + konqueror/keditbookmarks/importers.cpp | 293 + konqueror/keditbookmarks/importers.h | 192 + konqueror/keditbookmarks/kbookmarkmerger.cpp | 138 + konqueror/keditbookmarks/kebsearchline.cpp | 82 + konqueror/keditbookmarks/kebsearchline.h | 52 + konqueror/keditbookmarks/keditbookmarks-genui.rc | 146 + konqueror/keditbookmarks/keditbookmarks.kcfg | 42 + konqueror/keditbookmarks/keditbookmarksui.rc | 218 + konqueror/keditbookmarks/kinsertionsort.h | 59 + konqueror/keditbookmarks/listview.cpp | 968 + konqueror/keditbookmarks/listview.h | 217 + konqueror/keditbookmarks/main.cpp | 199 + konqueror/keditbookmarks/settings.kcfgc | 4 + konqueror/keditbookmarks/testlink.cpp | 395 + konqueror/keditbookmarks/testlink.h | 75 + konqueror/keditbookmarks/toplevel.cpp | 356 + konqueror/keditbookmarks/toplevel.h | 175 + konqueror/keditbookmarks/uninstall.desktop | 2 + konqueror/keditbookmarks/updater.cpp | 180 + konqueror/keditbookmarks/updater.h | 91 + konqueror/kfmclient.desktop | 22 + konqueror/kfmclient_dir.desktop | 20 + konqueror/kfmclient_html.desktop | 21 + konqueror/kfmclient_war.desktop | 21 + konqueror/konq-simplebrowser.rc | 99 + konqueror/konq_actions.cc | 504 + konqueror/konq_actions.h | 158 + konqueror/konq_browseriface.cc | 22 + konqueror/konq_browseriface.h | 24 + konqueror/konq_combo.cc | 892 + konqueror/konq_combo.h | 115 + konqueror/konq_extensionmanager.cc | 147 + konqueror/konq_extensionmanager.h | 57 + konqueror/konq_factory.cc | 263 + konqueror/konq_factory.h | 86 + konqueror/konq_frame.cc | 670 + konqueror/konq_frame.h | 410 + konqueror/konq_guiclients.cc | 358 + konqueror/konq_guiclients.h | 97 + konqueror/konq_main.cc | 222 + konqueror/konq_main.h | 27 + konqueror/konq_mainwindow.cc | 5907 ++ konqueror/konq_mainwindow.h | 771 + konqueror/konq_mainwindow_p.h | 40 + konqueror/konq_misc.cc | 281 + konqueror/konq_misc.h | 135 + konqueror/konq_openurlrequest.h | 64 + konqueror/konq_profiledlg.cc | 266 + konqueror/konq_profiledlg.h | 83 + konqueror/konq_run.cc | 195 + konqueror/konq_run.h | 73 + konqueror/konq_settingsxt.kcfgc | 4 + konqueror/konq_tabs.cc | 539 + konqueror/konq_tabs.h | 130 + konqueror/konq_view.cc | 1398 + konqueror/konq_view.h | 479 + konqueror/konq_viewmgr.cc | 1831 + konqueror/konq_viewmgr.h | 367 + konqueror/konqbrowser.desktop | 98 + konqueror/konqfilemgr.desktop | 90 + konqueror/konqueror.desktop | 100 + konqueror/konqueror.kcfg | 620 + konqueror/konqueror.rc | 152 + konqueror/konquerorsu.desktop | 90 + konqueror/kttsplugin/Makefile.am | 16 + konqueror/kttsplugin/khtmlkttsd.cpp | 138 + konqueror/kttsplugin/khtmlkttsd.desktop | 75 + konqueror/kttsplugin/khtmlkttsd.h | 46 + konqueror/kttsplugin/khtmlkttsd.rc | 13 + konqueror/listview/Makefile.am | 30 + konqueror/listview/konq_detailedlistview.desktop | 89 + konqueror/listview/konq_detailedlistview.rc | 52 + konqueror/listview/konq_infolistview.desktop | 87 + konqueror/listview/konq_infolistview.rc | 39 + konqueror/listview/konq_infolistviewitem.cc | 281 + konqueror/listview/konq_infolistviewitem.h | 79 + konqueror/listview/konq_infolistviewwidget.cc | 383 + konqueror/listview/konq_infolistviewwidget.h | 89 + konqueror/listview/konq_listview.cc | 691 + konqueror/listview/konq_listview.h | 210 + konqueror/listview/konq_listview.kcfg | 37 + konqueror/listview/konq_listviewitems.cc | 449 + konqueror/listview/konq_listviewitems.h | 123 + konqueror/listview/konq_listviewsettings.kcfgc | 4 + konqueror/listview/konq_listviewwidget.cc | 1416 + konqueror/listview/konq_listviewwidget.h | 270 + konqueror/listview/konq_textview.desktop | 90 + konqueror/listview/konq_textview.rc | 35 + konqueror/listview/konq_textviewitem.cc | 232 + konqueror/listview/konq_textviewitem.h | 75 + konqueror/listview/konq_textviewwidget.cc | 223 + konqueror/listview/konq_textviewwidget.h | 54 + konqueror/listview/konq_treeview.desktop | 90 + konqueror/listview/konq_treeview.rc | 52 + konqueror/listview/konq_treeviewitem.cc | 96 + konqueror/listview/konq_treeviewitem.h | 79 + konqueror/listview/konq_treeviewwidget.cc | 307 + konqueror/listview/konq_treeviewwidget.h | 67 + konqueror/pics/Makefile.am | 3 + konqueror/pics/actions/Makefile.am | 3 + konqueror/pics/actions/cr16-action-kde1.png | Bin 0 -> 880 bytes konqueror/pics/actions/cr16-action-kde2.png | Bin 0 -> 867 bytes konqueror/pics/actions/cr16-action-kde3.png | Bin 0 -> 880 bytes konqueror/pics/actions/cr16-action-kde4.png | Bin 0 -> 867 bytes konqueror/pics/actions/cr16-action-kde5.png | Bin 0 -> 880 bytes konqueror/pics/actions/cr16-action-kde6.png | Bin 0 -> 867 bytes konqueror/pics/hi128-app-konqueror.png | Bin 0 -> 19548 bytes konqueror/pics/hi16-app-kfm.png | Bin 0 -> 995 bytes konqueror/pics/hi16-app-konqueror.png | Bin 0 -> 959 bytes konqueror/pics/hi22-app-kfm.png | Bin 0 -> 1411 bytes konqueror/pics/hi22-app-konqueror.png | Bin 0 -> 1663 bytes konqueror/pics/hi32-app-kfm.png | Bin 0 -> 2691 bytes konqueror/pics/hi32-app-konqueror.png | Bin 0 -> 2680 bytes konqueror/pics/hi48-app-kfm.png | Bin 0 -> 4693 bytes konqueror/pics/hi48-app-konqueror.png | Bin 0 -> 5009 bytes konqueror/pics/hi64-app-kfm.png | Bin 0 -> 6521 bytes konqueror/pics/hi64-app-konqueror.png | Bin 0 -> 7776 bytes konqueror/pics/hisc-app-konqueror.svgz | Bin 0 -> 12489 bytes konqueror/pics/indicators/Makefile.am | 4 + konqueror/pics/indicators/indicator_connect.png | Bin 0 -> 496 bytes konqueror/pics/indicators/indicator_empty.png | Bin 0 -> 591 bytes konqueror/pics/indicators/indicator_noconnect.png | Bin 0 -> 233 bytes konqueror/pics/indicators/indicator_viewactive.png | Bin 0 -> 654 bytes konqueror/pics/tiles/Makefile.am | 3 + konqueror/pics/tiles/bluemorning.png | Bin 0 -> 13747 bytes konqueror/pics/tiles/canvas.png | Bin 0 -> 35031 bytes konqueror/pics/tiles/kde4ever.png | Bin 0 -> 15428 bytes konqueror/pics/tiles/kenwimer.png | Bin 0 -> 422 bytes konqueror/pics/tiles/noise.png | Bin 0 -> 44973 bytes konqueror/pics/tiles/paper_flieder.png | Bin 0 -> 60601 bytes konqueror/pics/tiles/redfiber.png | Bin 0 -> 72488 bytes konqueror/preloader/Makefile.am | 21 + konqueror/preloader/configure.in.in | 151 + konqueror/preloader/konqy_preload.desktop | 75 + konqueror/preloader/konqy_preloader.desktop | 146 + konqueror/preloader/preloader.cc | 151 + konqueror/preloader/preloader.h | 58 + konqueror/profile_filemanagement.desktop | 95 + konqueror/profile_filepreview.desktop | 110 + konqueror/profile_kde_devel.desktop | 112 + konqueror/profile_midnightcommander.desktop | 45 + konqueror/profile_simplebrowser.desktop | 79 + konqueror/profile_tabbedbrowsing.desktop | 106 + konqueror/profile_webbrowsing.desktop | 86 + konqueror/quickprint/Makefile.am | 7 + konqueror/quickprint/TODO | 18 + konqueror/quickprint/text-ada-print.desktop | 79 + konqueror/quickprint/text-c++-print.desktop | 79 + konqueror/quickprint/text-c++h-print.desktop | 79 + konqueror/quickprint/text-c-print.desktop | 79 + konqueror/quickprint/text-ch-print.desktop | 79 + konqueror/quickprint/text-css-print.desktop | 79 + konqueror/quickprint/text-diff-print.desktop | 79 + konqueror/quickprint/text-html-print.desktop | 79 + konqueror/quickprint/text-java-print.desktop | 79 + konqueror/quickprint/text-log-print.desktop | 79 + konqueror/quickprint/text-makefile-print.desktop | 79 + konqueror/quickprint/text-pas-print.desktop | 79 + konqueror/quickprint/text-perl-print.desktop | 79 + konqueror/quickprint/text-print.desktop | 79 + konqueror/quickprint/text-python-print.desktop | 79 + konqueror/quickprint/text-tcl-print.desktop | 79 + konqueror/quickprint/text-tex-print.desktop | 79 + konqueror/quickprint/text-xml-print.desktop | 79 + konqueror/quickprint/text-xslt-print.desktop | 79 + konqueror/remoteencodingplugin/Makefile.am | 13 + .../remoteencodingplugin/kremoteencodingplugin.cpp | 266 + .../kremoteencodingplugin.desktop | 135 + .../remoteencodingplugin/kremoteencodingplugin.h | 63 + .../remoteencodingplugin/kremoteencodingplugin.rc | 8 + konqueror/shellcmdplugin/Makefile.am | 14 + konqueror/shellcmdplugin/kshellcmddialog.cpp | 90 + konqueror/shellcmdplugin/kshellcmddialog.h | 48 + konqueror/shellcmdplugin/kshellcmdexecutor.cpp | 156 + konqueror/shellcmdplugin/kshellcmdexecutor.h | 50 + konqueror/shellcmdplugin/kshellcmdplugin.cpp | 90 + konqueror/shellcmdplugin/kshellcmdplugin.desktop | 135 + konqueror/shellcmdplugin/kshellcmdplugin.h | 36 + konqueror/shellcmdplugin/kshellcmdplugin.rc | 8 + konqueror/sidebar/.version | 1 + konqueror/sidebar/Makefile.am | 44 + konqueror/sidebar/konq_sidebartng.desktop | 93 + konqueror/sidebar/konqsidebar.cpp | 127 + konqueror/sidebar/konqsidebar.h | 126 + konqueror/sidebar/konqsidebariface_p.h | 9 + konqueror/sidebar/konqsidebarplugin.cpp | 59 + konqueror/sidebar/konqsidebarplugin.h | 97 + konqueror/sidebar/konqsidebartng.rc | 7 + konqueror/sidebar/konqsidebartng.upd | 12 + konqueror/sidebar/move_konqsidebartng_entries.sh | 18 + konqueror/sidebar/sidebar_widget.cpp | 1310 + konqueror/sidebar/sidebar_widget.h | 225 + konqueror/sidebar/test/Makefile.am | 23 + konqueror/sidebar/test/konqsidebartest.cpp | 26 + konqueror/sidebar/test/konqsidebartest.h | 43 + konqueror/sidebar/test/test.desktop | 68 + konqueror/sidebar/trees/Makefile.am | 17 + .../sidebar/trees/bookmark_module/Makefile.am | 10 + .../trees/bookmark_module/bookmark_item.cpp | 81 + .../sidebar/trees/bookmark_module/bookmark_item.h | 62 + .../trees/bookmark_module/bookmark_module.cpp | 583 + .../trees/bookmark_module/bookmark_module.h | 98 + konqueror/sidebar/trees/dirtree_module/Makefile.am | 10 + .../sidebar/trees/dirtree_module/dirtree_item.cpp | 245 + .../sidebar/trees/dirtree_module/dirtree_item.h | 73 + .../trees/dirtree_module/dirtree_module.cpp | 649 + .../sidebar/trees/dirtree_module/dirtree_module.h | 82 + konqueror/sidebar/trees/history_module/Makefile.am | 16 + .../sidebar/trees/history_module/history_dlg.ui | 239 + .../sidebar/trees/history_module/history_item.cpp | 246 + .../sidebar/trees/history_module/history_item.h | 111 + .../trees/history_module/history_module.cpp | 369 + .../sidebar/trees/history_module/history_module.h | 108 + .../trees/history_module/history_settings.cpp | 111 + .../trees/history_module/history_settings.h | 66 + .../sidebar/trees/history_module/kcmhistory.cpp | 272 + .../trees/history_module/kcmhistory.desktop | 233 + .../sidebar/trees/history_module/kcmhistory.h | 64 + konqueror/sidebar/trees/init/Makefile.am | 16 + konqueror/sidebar/trees/init/README | 6 + konqueror/sidebar/trees/init/bookmarks.desktop | 165 + .../sidebar/trees/init/bookmarks_module.desktop | 166 + .../sidebar/trees/init/dirtree_module.desktop | 82 + konqueror/sidebar/trees/init/history.desktop | 164 + .../sidebar/trees/init/history_module.desktop | 165 + konqueror/sidebar/trees/init/home.desktop | 158 + konqueror/sidebar/trees/init/remote.desktop | 87 + konqueror/sidebar/trees/init/remote/.directory | 84 + konqueror/sidebar/trees/init/remote/Makefile.am | 4 + konqueror/sidebar/trees/init/remote/ftp/.directory | 56 + .../sidebar/trees/init/remote/ftp/Makefile.am | 3 + .../sidebar/trees/init/remote/ftp/kde_ftp.desktop | 88 + konqueror/sidebar/trees/init/remote/web/.directory | 56 + .../sidebar/trees/init/remote/web/Makefile.am | 2 + .../sidebar/trees/init/remote/web/apps_web.desktop | 87 + .../sidebar/trees/init/remote/web/dot_web.desktop | 86 + .../sidebar/trees/init/remote/web/kde_web.desktop | 88 + .../sidebar/trees/init/remote/web/look_web.desktop | 54 + konqueror/sidebar/trees/init/root.desktop | 158 + konqueror/sidebar/trees/init/services.desktop | 85 + konqueror/sidebar/trees/init/services/.directory | 81 + konqueror/sidebar/trees/init/services/Makefile.am | 2 + .../trees/init/services/applications.desktop | 79 + .../sidebar/trees/init/services/audiocd.desktop | 85 + .../sidebar/trees/init/services/media.desktop | 74 + .../trees/init/services/printsystem.desktop | 85 + .../sidebar/trees/init/services/settings.desktop | 81 + konqueror/sidebar/trees/init/system.desktop | 139 + .../sidebar/trees/init/virtualfolderadd.desktop | 81 + konqueror/sidebar/trees/konq_sidebartree.cpp | 1048 + konqueror/sidebar/trees/konq_sidebartree.h | 225 + konqueror/sidebar/trees/konq_sidebartreeitem.cpp | 65 + konqueror/sidebar/trees/konq_sidebartreeitem.h | 116 + konqueror/sidebar/trees/konq_sidebartreemodule.h | 65 + .../sidebar/trees/konq_sidebartreetoplevelitem.cpp | 208 + .../sidebar/trees/konq_sidebartreetoplevelitem.h | 101 + konqueror/sidebar/trees/konqsidebar_tree.cpp | 167 + konqueror/sidebar/trees/konqsidebar_tree.h | 47 + konqueror/sidebar/web_module/Makefile.am | 19 + konqueror/sidebar/web_module/TODO | 6 + konqueror/sidebar/web_module/web_module.cpp | 220 + konqueror/sidebar/web_module/web_module.h | 202 + konqueror/sidebar/web_module/webmodule_add.desktop | 79 + konqueror/sidebar/web_module/websidebar.desktop | 78 + konqueror/sidebar/web_module/websidebar.html | 11 + konqueror/uninstall.desktop | 2 + konqueror/version.h | 3 + konsole/COPYING | 346 + konsole/ChangeLog | 322 + konsole/Makefile.am | 25 + konsole/NEWS | 107 + konsole/README | 4 + konsole/README.fonts | 121 + konsole/README.keyboard | 44 + konsole/README.konsole_kiosk | 68 + konsole/README.linux.console | 88 + konsole/README.moreColors | 98 + konsole/README.ports | 28 + konsole/README.unicode | 84 + konsole/configure.in.in | 41 + konsole/doc/Konsole2.Requirements | 141 + konsole/doc/Makefile.am | 5 + konsole/doc/More/Ansi_esc.txt | 77 + konsole/doc/More/Eterm.ref | 508 + konsole/doc/More/ansi.sys.txt | 355 + konsole/doc/More/ansix364.txt | 322 + konsole/doc/More/dec_vt100_codes.txt | 166 + konsole/doc/More/iowa_vt100_news.txt | 255 + konsole/doc/More/k95vtnttn.html | 184 + konsole/doc/More/rxvt-ref.html | 1281 + konsole/doc/More/swedish_vt102_codes.txt | 413 + konsole/doc/More/villanova-vt100-esc-codes.txt | 389 + konsole/doc/More/vt100_codes_news.txt | 970 + konsole/doc/More/vt100_colorized_termcap.txt | 438 + konsole/doc/More/vt100_numeric_keypad.txt | 202 + konsole/doc/More/vt100_reference_card.txt | 215 + konsole/doc/More/vt100_scroll_region.txt | 124 + konsole/doc/More/vt100_setup.txt | 170 + konsole/doc/More/vttest.html | 205 + konsole/doc/More/xterm.codes | 206 + konsole/doc/README.first | 4 + konsole/doc/VT100/Makefile.am | 3 + konsole/doc/VT100/MoreText | 98 + konsole/doc/VT100/Table.Codes | 1879 + konsole/doc/VT100/Table.Graphic | 32 + konsole/doc/VT100/Table.VT52 | 40 + konsole/doc/VT100/awk.table.graphic | 30 + konsole/doc/VT100/cmds.pro | 61 + konsole/doc/VT100/db.trans | 190 + konsole/doc/VT100/db2.pl | 49 + konsole/doc/VT100/genDocument | 257 + konsole/doc/VT100/genPl.pl | 300 + konsole/doc/VT100/genTC.pl | 434 + konsole/doc/VT100/konsole1.gif | Bin 0 -> 1582 bytes konsole/doc/VT100/konsole2.gif | Bin 0 -> 1813 bytes konsole/doc/VT100/t.pl | 17 + konsole/doc/VT100/techref.html | 4681 + konsole/doc/VT100/vt100.gif | 401 + konsole/doc/color-schema | 114 + konsole/doc/framework | 33 + konsole/doc/histBuffer | 24 + konsole/doc/konsole.Doxyfile | 10 + konsole/doc/missing.codes | 89 + konsole/doc/missing.keys | 124 + konsole/doc/mkDocs | 6 + konsole/eventsrc | 736 + konsole/fonts/9x15.bdf | 99671 +++++++++++++++++++ konsole/fonts/Makefile.am | 16 + konsole/fonts/console8x16.bdf | 15095 +++ konsole/fonts/cp437.charmap | 264 + konsole/kcmkonsole.desktop | 230 + konsole/konsole-script.desktop | 128 + konsole/konsole.desktop | 128 + konsole/konsole.upd | 13 + konsole/konsole/BlockArray.cpp | 327 + konsole/konsole/BlockArray.h | 119 + konsole/konsole/MakeDefaults | 7 + konsole/konsole/Makefile.am | 80 + konsole/konsole/TECommon.h | 234 + konsole/konsole/TEHistory.cpp | 626 + konsole/konsole/TEHistory.h | 273 + konsole/konsole/TEPty.cpp | 262 + konsole/konsole/TEPty.h | 123 + konsole/konsole/TEScreen.cpp | 1570 + konsole/konsole/TEScreen.h | 279 + konsole/konsole/TEWidget.cpp | 2326 + konsole/konsole/TEWidget.h | 335 + konsole/konsole/TEmuVt102.cpp | 1430 + konsole/konsole/TEmuVt102.h | 146 + konsole/konsole/TEmulation.cpp | 550 + konsole/konsole/TEmulation.h | 149 + konsole/konsole/default.keytab.h | 76 + konsole/konsole/fontembedder.cpp | 119 + konsole/konsole/keytrans.cpp | 755 + konsole/konsole/keytrans.h | 100 + konsole/konsole/konsole.cpp | 4341 + konsole/konsole/konsole.h | 501 + konsole/konsole/konsole_part.cpp | 1133 + konsole/konsole/konsole_part.h | 241 + konsole/konsole/konsole_wcwidth.cpp | 216 + konsole/konsole/konsole_wcwidth.h | 19 + konsole/konsole/konsolebookmarkhandler.cpp | 104 + konsole/konsole/konsolebookmarkhandler.h | 62 + konsole/konsole/konsolebookmarkmenu.cpp | 156 + konsole/konsole/konsolebookmarkmenu.h | 72 + konsole/konsole/konsoleiface.h | 49 + konsole/konsole/kwrited.cpp | 143 + konsole/konsole/kwrited.h | 56 + konsole/konsole/linefont.h | 21 + konsole/konsole/linefont.src | 786 + konsole/konsole/main.cpp | 671 + konsole/konsole/printsettings.cpp | 66 + konsole/konsole/printsettings.h | 44 + konsole/konsole/schema.cpp | 634 + konsole/konsole/schema.h | 243 + konsole/konsole/session.cpp | 838 + konsole/konsole/session.h | 232 + konsole/konsole/sessioniface.h | 51 + konsole/konsole/x-konsole.desktop | 74 + konsole/konsole/zmodem_dialog.cpp | 56 + konsole/konsole/zmodem_dialog.h | 49 + konsole/konsolehere.desktop | 125 + konsole/konsolepart.desktop | 95 + konsole/konsolesu.desktop | 83 + konsole/kwrited.desktop | 145 + konsole/other/2shells | 11 + konsole/other/3shells | 12 + konsole/other/4shells | 13 + konsole/other/5shells | 14 + konsole/other/BlackOnLightColor.schema | 42 + konsole/other/BlackOnLightYellow.schema | 42 + konsole/other/BlackOnWhite.schema | 42 + konsole/other/DarkPicture.schema | 44 + konsole/other/Example.Schema | 47 + konsole/other/GreenOnBlack.schema | 42 + konsole/other/GreenTint.schema | 49 + konsole/other/GreenTint_MC.schema | 49 + konsole/other/LightPaper.schema | 44 + konsole/other/LightPicture.schema | 44 + konsole/other/Linux.schema | 47 + konsole/other/Makefile.am | 20 + konsole/other/README | 15 + konsole/other/README.Desktop | 6 + konsole/other/README.KeyTab | 72 + konsole/other/README.Schema | 132 + konsole/other/README.default.Keytab | 137 + konsole/other/README.default.Schema | 44 + konsole/other/Transparent.schema | 49 + konsole/other/Transparent_MC.schema | 51 + konsole/other/Transparent_darkbg.schema | 42 + konsole/other/Transparent_lightbg.schema | 51 + konsole/other/WhiteOnBlack.schema | 42 + konsole/other/XTerm.schema | 46 + konsole/other/hi128-app-konsole.png | Bin 0 -> 7666 bytes konsole/other/hi16-app-konsole.png | Bin 0 -> 826 bytes konsole/other/hi22-app-konsole.png | Bin 0 -> 1186 bytes konsole/other/hi32-app-konsole.png | Bin 0 -> 1734 bytes konsole/other/hi48-app-konsole.png | Bin 0 -> 2761 bytes konsole/other/hi64-app-konsole.png | Bin 0 -> 3800 bytes konsole/other/hisc-app-konsole.svgz | Bin 0 -> 3864 bytes konsole/other/icons/Makefile.am | 3 + konsole/other/icons/cr16-action-activity.png | Bin 0 -> 829 bytes konsole/other/icons/cr16-action-konsoleblue.png | Bin 0 -> 728 bytes konsole/other/icons/cr16-action-konsolered.png | Bin 0 -> 727 bytes konsole/other/icons/cr16-action-opentermblue.png | Bin 0 -> 645 bytes konsole/other/icons/cr16-action-opentermred.png | Bin 0 -> 639 bytes konsole/other/icons/cr16-action-silence.png | Bin 0 -> 722 bytes konsole/other/icons/cr22-action-konsoleblue.png | Bin 0 -> 1142 bytes konsole/other/icons/cr22-action-konsolered.png | Bin 0 -> 1145 bytes konsole/other/icons/cr22-action-opentermblue.png | Bin 0 -> 942 bytes konsole/other/icons/cr22-action-opentermred.png | Bin 0 -> 939 bytes konsole/other/icons/cr32-action-konsoleblue.png | Bin 0 -> 1663 bytes konsole/other/icons/cr32-action-konsolered.png | Bin 0 -> 1667 bytes konsole/other/icons/cr32-action-opentermblue.png | Bin 0 -> 1205 bytes konsole/other/icons/cr32-action-opentermred.png | Bin 0 -> 1254 bytes konsole/other/linux.desktop | 161 + konsole/other/linux.keytab | 133 + konsole/other/mc.desktop | 103 + konsole/other/screen.desktop | 155 + konsole/other/shell.desktop | 145 + konsole/other/solaris.keytab | 108 + konsole/other/su.desktop | 132 + konsole/other/sumc.desktop | 147 + konsole/other/syscolor.schema | 44 + konsole/other/vim.schema | 40 + konsole/other/vt100.keytab | 133 + konsole/other/vt420pc.keytab | 163 + konsole/other/wallpapers/Blkmarble.jpg | Bin 0 -> 5514 bytes konsole/other/wallpapers/Makefile.am | 7 + konsole/other/wallpapers/Metric-Monospace-14.png | Bin 0 -> 160 bytes konsole/other/wallpapers/Paper01.jpg | Bin 0 -> 1667 bytes konsole/other/wallpapers/gray02.jpg | Bin 0 -> 1932 bytes konsole/other/x11r5.keytab | 71 + konsole/schemaStrip.pl | 8 + konsole/terminalemulator.desktop | 86 + konsole/tests/9x15.repertoire-utf8 | 219 + konsole/tests/Makefile | 15 + konsole/tests/README.vttest | 57 + konsole/tests/audit.c | 53 + konsole/tests/bulktest.sh | 2 + konsole/tests/color-spaces.pl | 67 + konsole/tests/colortest.sh | 31 + konsole/tests/ct2 | 20 + konsole/tests/esc.c | 398 + konsole/tests/header.h | 54 + konsole/tests/main.c | 2083 + konsole/tests/quote.c | 50 + konsole/tests/ripple.c | 29 + konsole/tests/sesstest | 2 + konsole/tests/titletest.sh | 5 + konsole/tests/utf8.sh | 11 + konsole/tests/vttest.1 | 13 + konsole/tips | 240 + kpager/Makefile.am | 22 + kpager/TODO | 1 + kpager/config.cpp | 180 + kpager/config.h | 78 + kpager/desktop.cpp | 688 + kpager/desktop.h | 130 + kpager/hi16-app-kpager.png | Bin 0 -> 288 bytes kpager/hi22-app-kpager.png | Bin 0 -> 1059 bytes kpager/hi32-app-kpager.png | Bin 0 -> 784 bytes kpager/hi48-app-kpager.png | Bin 0 -> 1081 bytes kpager/kpager.cpp | 674 + kpager/kpager.desktop | 106 + kpager/kpager.h | 139 + kpager/kpagerIface.h | 22 + kpager/main.cpp | 107 + kpager/uninstall.desktop | 2 + kpager/windowdrag.cpp | 60 + kpager/windowdrag.h | 41 + kpersonalizer/Makefile.am | 53 + kpersonalizer/README | 230 + kpersonalizer/TODO | 28 + kpersonalizer/cr16-app-kpersonalizer.png | Bin 0 -> 903 bytes kpersonalizer/cr32-app-kpersonalizer.png | Bin 0 -> 2208 bytes kpersonalizer/kcountrypage.cpp | 209 + kpersonalizer/kcountrypage.h | 57 + kpersonalizer/kcountrypagedlg.ui | 242 + kpersonalizer/keyecandypage.cpp | 853 + kpersonalizer/keyecandypage.h | 227 + kpersonalizer/keyecandypagedlg.ui | 263 + kpersonalizer/kfindlanguage.cpp | 151 + kpersonalizer/kfindlanguage.h | 38 + kpersonalizer/kospage.cpp | 508 + kpersonalizer/kospage.h | 72 + kpersonalizer/kospagedlg.ui | 221 + kpersonalizer/kpersonalizer.cpp | 266 + kpersonalizer/kpersonalizer.desktop | 88 + kpersonalizer/kpersonalizer.h | 96 + kpersonalizer/krefinepage.cpp | 45 + kpersonalizer/krefinepage.h | 38 + kpersonalizer/krefinepagedlg.ui | 249 + kpersonalizer/kstylepage.cpp | 584 + kpersonalizer/kstylepage.h | 128 + kpersonalizer/kstylepagedlg.ui | 127 + kpersonalizer/ksysinfo.cpp | 261 + kpersonalizer/ksysinfo.h | 60 + kpersonalizer/main.cpp | 74 + kpersonalizer/pics/Makefile.am | 3 + kpersonalizer/pics/step1.png | Bin 0 -> 72865 bytes kpersonalizer/pics/step2.png | Bin 0 -> 59732 bytes kpersonalizer/pics/step3.png | Bin 0 -> 70284 bytes kpersonalizer/pics/step4.png | Bin 0 -> 90132 bytes kpersonalizer/pics/step5.png | Bin 0 -> 81274 bytes kpersonalizer/stylepreview.ui | 186 + kpersonalizer/stylepreview.ui.h | 77 + kpersonalizer/uninstall.desktop | 2 + kreadconfig/Makefile.am | 13 + kreadconfig/kreadconfig.cpp | 105 + kreadconfig/kwriteconfig.cpp | 75 + kscreensaver.pamd | 4 + kscreensaver/AUTHORS | 23 + kscreensaver/ChangeLog | 93 + kscreensaver/KBlankscreen.desktop | 323 + kscreensaver/KRandom.desktop | 321 + kscreensaver/Makefile.am | 27 + kscreensaver/blankscrn.cpp | 135 + kscreensaver/blankscrn.h | 56 + kscreensaver/random.cpp | 246 + kscreensaver/random.h | 38 + ksmserver/KSMServerInterface.h | 27 + ksmserver/LICENSE | 16 + ksmserver/Makefile.am | 50 + ksmserver/README | 177 + ksmserver/client.cpp | 190 + ksmserver/client.h | 60 + ksmserver/configure.in.in | 4 + ksmserver/global.h | 13 + ksmserver/ksmserver.upd | 6 + ksmserver/legacy.cpp | 402 + ksmserver/main.cpp | 247 + ksmserver/move_session_config.sh | 32 + ksmserver/server.cpp | 922 + ksmserver/server.h | 219 + ksmserver/server2.h | 16 + ksmserver/shutdown.cpp | 563 + ksmserver/shutdowndlg.cpp | 278 + ksmserver/shutdowndlg.h | 88 + ksmserver/shutdownkonq.png | Bin 0 -> 38334 bytes ksmserver/startup.cpp | 442 + ksmserver/test.cpp | 27 + ksplashml/Makefile.am | 18 + ksplashml/kcmksplash/Makefile.am | 18 + ksplashml/kcmksplash/installer.cpp | 484 + ksplashml/kcmksplash/installer.h | 87 + ksplashml/kcmksplash/ksplashthememgr.desktop | 216 + ksplashml/kcmksplash/main.cpp | 105 + ksplashml/kcmksplash/pics/Makefile.am | 1 + ksplashml/kcmksplash/pics/hi128-app-ksplash.png | Bin 0 -> 15013 bytes ksplashml/kcmksplash/pics/hi16-app-ksplash.png | Bin 0 -> 1027 bytes ksplashml/kcmksplash/pics/hi22-app-ksplash.png | Bin 0 -> 1475 bytes ksplashml/kcmksplash/pics/hi32-app-ksplash.png | Bin 0 -> 2423 bytes ksplashml/kcmksplash/pics/hi48-app-ksplash.png | Bin 0 -> 4168 bytes ksplashml/kcmksplash/pics/hi64-app-ksplash.png | Bin 0 -> 6103 bytes ksplashml/ksplash.desktop | 17 + ksplashml/ksplashiface.h | 38 + ksplashml/main.cpp | 81 + ksplashml/pics/Makefile.am | 5 + ksplashml/pics/splash.png | Bin 0 -> 39971 bytes ksplashml/pics/themes/Makefile.am | 2 + ksplashml/pics/themes/blue-bend/Makefile.am | 4 + ksplashml/pics/themes/blue-bend/Preview.png | Bin 0 -> 65886 bytes ksplashml/pics/themes/blue-bend/Theme.rc | 23 + .../pics/themes/blue-bend/splash_active_bar.png | Bin 0 -> 25509 bytes ksplashml/pics/themes/blue-bend/splash_bottom.png | Bin 0 -> 204 bytes .../pics/themes/blue-bend/splash_inactive_bar.png | Bin 0 -> 13909 bytes ksplashml/pics/themes/blue-bend/splash_top.png | Bin 0 -> 67597 bytes ksplashml/pics/themes/default/Makefile.am | 5 + ksplashml/pics/themes/default/Preview.png | Bin 0 -> 31945 bytes ksplashml/pics/themes/default/Theme.rc | 19 + ksplashml/pics/themes/default/locolor/Makefile.am | 4 + ksplashml/pics/themes/default/locolor/Preview.png | Bin 0 -> 31341 bytes ksplashml/pics/themes/default/locolor/Theme.rc | 19 + .../themes/default/locolor/splash_active_bar.png | Bin 0 -> 8902 bytes .../pics/themes/default/locolor/splash_bottom.png | Bin 0 -> 264 bytes .../themes/default/locolor/splash_inactive_bar.png | Bin 0 -> 9012 bytes .../pics/themes/default/locolor/splash_top.png | Bin 0 -> 8958 bytes ksplashml/pics/themes/default/splash.xcf.bz2 | Bin 0 -> 28730 bytes .../pics/themes/default/splash_active_bar.png | Bin 0 -> 23346 bytes ksplashml/pics/themes/default/splash_bottom.png | Bin 0 -> 282 bytes .../pics/themes/default/splash_inactive_bar.png | Bin 0 -> 19766 bytes ksplashml/pics/themes/default/splash_top.png | Bin 0 -> 17514 bytes ksplashml/pics/themes/none/Makefile.am | 4 + ksplashml/pics/themes/none/Theme.rc | 6 + ksplashml/pics/themes/simple/Makefile.am | 4 + ksplashml/pics/themes/simple/Preview.png | Bin 0 -> 53363 bytes ksplashml/pics/themes/simple/Theme.rc | 7 + ksplashml/themeengine/Makefile.am | 18 + ksplashml/themeengine/default/Makefile.am | 17 + .../themeengine/default/ksplashdefault.desktop | 97 + ksplashml/themeengine/default/main.cpp | 17 + ksplashml/themeengine/default/themelegacy.cpp | 310 + ksplashml/themeengine/default/themelegacy.h | 103 + ksplashml/themeengine/ksplashplugins.desktop | 12 + ksplashml/themeengine/objkstheme.cpp | 168 + ksplashml/themeengine/objkstheme.h | 70 + ksplashml/themeengine/redmond/Makefile.am | 18 + ksplashml/themeengine/redmond/Theme.rc | 2 + .../themeengine/redmond/ksplashredmond.desktop | 96 + ksplashml/themeengine/redmond/main.cpp | 38 + ksplashml/themeengine/redmond/pics/Background.png | Bin 0 -> 32680 bytes ksplashml/themeengine/redmond/pics/Makefile.am | 4 + ksplashml/themeengine/redmond/pics/Preview.png | Bin 0 -> 10541 bytes ksplashml/themeengine/redmond/previewredmond.cpp | 113 + ksplashml/themeengine/redmond/previewredmond.h | 104 + ksplashml/themeengine/redmond/themeredmond.cpp | 365 + ksplashml/themeengine/redmond/themeredmond.h | 103 + ksplashml/themeengine/simple/Makefile.am | 7 + ksplashml/themeengine/simple/configure.in.in | 27 + ksplashml/themeengine/simple/main.cpp | 182 + ksplashml/themeengine/standard/Makefile.am | 23 + ksplashml/themeengine/standard/Preview.png | Bin 0 -> 290009 bytes ksplashml/themeengine/standard/Theme.rc | 2 + .../themeengine/standard/ksplashstandard.desktop | 97 + ksplashml/themeengine/standard/pics/Makefile.am | 4 + ksplashml/themeengine/standard/pics/Preview.png | Bin 0 -> 51462 bytes ksplashml/themeengine/standard/themestandard.cpp | 167 + ksplashml/themeengine/standard/themestandard.h | 93 + .../themeengine/standard/themestandardlib.cpp | 15 + ksplashml/themeengine/standard/wndicon.cpp | 310 + ksplashml/themeengine/standard/wndicon.h | 70 + ksplashml/themeengine/standard/wndstatus.cpp | 101 + ksplashml/themeengine/standard/wndstatus.h | 50 + ksplashml/themeengine/themeengine.cpp | 136 + ksplashml/themeengine/themeengine.h | 82 + ksplashml/wndmain.cpp | 426 + ksplashml/wndmain.h | 109 + kstart/LICENSE.readme | 124 + kstart/Makefile.am | 21 + kstart/kstart.cpp | 404 + kstart/kstart.h | 36 + kstart/version.h | 1 + ksysguard/CContLib/Makefile.am | 6 + ksysguard/CContLib/ccont.c | 364 + ksysguard/CContLib/ccont.h | 161 + ksysguard/Makefile.am | 9 + ksysguard/Makefile.in.temp | 99 + ksysguard/README | 26 + ksysguard/configure.in.in | 50 + ksysguard/cr128-app-ksysguard.png | Bin 0 -> 15389 bytes ksysguard/cr16-app-ksysguard.png | Bin 0 -> 913 bytes ksysguard/cr32-app-ksysguard.png | Bin 0 -> 2575 bytes ksysguard/cr48-app-ksysguard.png | Bin 0 -> 4804 bytes ksysguard/cr64-app-ksysguard.png | Bin 0 -> 6598 bytes ksysguard/example/Makefile.am | 5 + ksysguard/example/eventsrc | 305 + ksysguard/example/ksysguarddrc | 19 + ksysguard/gui/KSGAppletSettings.cc | 106 + ksysguard/gui/KSGAppletSettings.h | 49 + ksysguard/gui/KSysGuardApplet.cc | 495 + ksysguard/gui/KSysGuardApplet.h | 85 + ksysguard/gui/KSysGuardApplet.xml | 15 + ksysguard/gui/Makefile.am | 63 + ksysguard/gui/ProcessTable.sgrd | 20 + ksysguard/gui/SensorBrowser.cc | 412 + ksysguard/gui/SensorBrowser.h | 193 + ksysguard/gui/SensorDisplayLib/BarGraph.cc | 177 + ksysguard/gui/SensorDisplayLib/BarGraph.h | 94 + ksysguard/gui/SensorDisplayLib/DancingBars.cc | 353 + ksysguard/gui/SensorDisplayLib/DancingBars.h | 90 + .../gui/SensorDisplayLib/DancingBarsSettings.cc | 398 + .../gui/SensorDisplayLib/DancingBarsSettings.h | 106 + ksysguard/gui/SensorDisplayLib/DummyDisplay.cc | 58 + ksysguard/gui/SensorDisplayLib/DummyDisplay.h | 44 + ksysguard/gui/SensorDisplayLib/FancyPlotter.cc | 457 + ksysguard/gui/SensorDisplayLib/FancyPlotter.h | 103 + .../gui/SensorDisplayLib/FancyPlotterSettings.cc | 637 + .../gui/SensorDisplayLib/FancyPlotterSettings.h | 143 + ksysguard/gui/SensorDisplayLib/ListView.cc | 371 + ksysguard/gui/SensorDisplayLib/ListView.h | 112 + ksysguard/gui/SensorDisplayLib/ListViewSettings.cc | 77 + ksysguard/gui/SensorDisplayLib/ListViewSettings.h | 57 + .../gui/SensorDisplayLib/ListViewSettingsWidget.ui | 178 + .../SensorDisplayLib/ListViewSettingsWidget.ui.h | 56 + ksysguard/gui/SensorDisplayLib/LogFile.cc | 285 + ksysguard/gui/SensorDisplayLib/LogFile.h | 85 + ksysguard/gui/SensorDisplayLib/LogFileSettings.ui | 345 + ksysguard/gui/SensorDisplayLib/Makefile.am | 39 + ksysguard/gui/SensorDisplayLib/MultiMeter.cc | 258 + ksysguard/gui/SensorDisplayLib/MultiMeter.h | 79 + .../gui/SensorDisplayLib/MultiMeterSettings.cc | 127 + .../gui/SensorDisplayLib/MultiMeterSettings.h | 68 + .../SensorDisplayLib/MultiMeterSettingsWidget.ui | 475 + .../SensorDisplayLib/MultiMeterSettingsWidget.ui.h | 123 + .../gui/SensorDisplayLib/ProcessController.cc | 472 + ksysguard/gui/SensorDisplayLib/ProcessController.h | 154 + ksysguard/gui/SensorDisplayLib/ProcessList.cc | 941 + ksysguard/gui/SensorDisplayLib/ProcessList.h | 270 + ksysguard/gui/SensorDisplayLib/ReniceDlg.cc | 66 + ksysguard/gui/SensorDisplayLib/ReniceDlg.h | 61 + ksysguard/gui/SensorDisplayLib/SensorDisplay.cc | 611 + ksysguard/gui/SensorDisplayLib/SensorDisplay.h | 331 + ksysguard/gui/SensorDisplayLib/SensorLogger.cc | 437 + ksysguard/gui/SensorDisplayLib/SensorLogger.h | 184 + ksysguard/gui/SensorDisplayLib/SensorLoggerDlg.cc | 106 + ksysguard/gui/SensorDisplayLib/SensorLoggerDlg.h | 62 + .../gui/SensorDisplayLib/SensorLoggerDlgWidget.ui | 263 + .../SensorDisplayLib/SensorLoggerDlgWidget.ui.h | 89 + .../gui/SensorDisplayLib/SensorLoggerSettings.cc | 77 + .../gui/SensorDisplayLib/SensorLoggerSettings.h | 57 + .../SensorDisplayLib/SensorLoggerSettingsWidget.ui | 180 + .../SensorLoggerSettingsWidget.ui.h | 56 + ksysguard/gui/SensorDisplayLib/SignalPlotter.cc | 648 + ksysguard/gui/SensorDisplayLib/SignalPlotter.h | 147 + ksysguard/gui/SignalIDs.h | 52 + ksysguard/gui/SystemLoad.sgrd | 27 + ksysguard/gui/Taskmanager.ktop | 6 + ksysguard/gui/WorkSheet.cc | 698 + ksysguard/gui/WorkSheet.h | 135 + ksysguard/gui/WorkSheetSettings.cc | 153 + ksysguard/gui/WorkSheetSettings.h | 60 + ksysguard/gui/Workspace.cc | 463 + ksysguard/gui/Workspace.h | 84 + ksysguard/gui/kpm.c | 8 + ksysguard/gui/ksgrd/HostConnector.cc | 217 + ksysguard/gui/ksgrd/HostConnector.h | 74 + ksysguard/gui/ksgrd/Makefile.am | 34 + ksysguard/gui/ksgrd/SensorAgent.cc | 260 + ksysguard/gui/ksgrd/SensorAgent.h | 137 + ksysguard/gui/ksgrd/SensorClient.h | 209 + ksysguard/gui/ksgrd/SensorManager.cc | 432 + ksysguard/gui/ksgrd/SensorManager.h | 126 + ksysguard/gui/ksgrd/SensorShellAgent.cc | 141 + ksysguard/gui/ksgrd/SensorShellAgent.h | 77 + ksysguard/gui/ksgrd/SensorSocketAgent.cc | 137 + ksysguard/gui/ksgrd/SensorSocketAgent.h | 71 + ksysguard/gui/ksgrd/StyleEngine.cc | 176 + ksysguard/gui/ksgrd/StyleEngine.h | 86 + ksysguard/gui/ksgrd/StyleSettings.cc | 201 + ksysguard/gui/ksgrd/StyleSettings.h | 78 + ksysguard/gui/ksgrd/TimerSettings.cc | 94 + ksysguard/gui/ksgrd/TimerSettings.h | 56 + ksysguard/gui/ksysguard.cc | 650 + ksysguard/gui/ksysguard.desktop | 102 + ksysguard/gui/ksysguard.h | 124 + ksysguard/gui/ksysguardapplet.desktop | 120 + ksysguard/gui/ksysguardui.rc | 50 + ksysguard/gui/x-ksysguard.desktop | 86 + ksysguard/ksysguardd/Command.c | 261 + ksysguard/ksysguardd/Command.h | 103 + ksysguard/ksysguardd/FreeBSD/CPU.c | 263 + ksysguard/ksysguardd/FreeBSD/CPU.h | 49 + ksysguard/ksysguardd/FreeBSD/Makefile.am | 8 + ksysguard/ksysguardd/FreeBSD/Memory.c | 209 + ksysguard/ksysguardd/FreeBSD/Memory.h | 45 + ksysguard/ksysguardd/FreeBSD/ProcessList.c | 556 + ksysguard/ksysguardd/FreeBSD/ProcessList.h | 38 + ksysguard/ksysguardd/FreeBSD/apm.c | 102 + ksysguard/ksysguardd/FreeBSD/apm.h | 34 + ksysguard/ksysguardd/FreeBSD/diskstat.c | 256 + ksysguard/ksysguardd/FreeBSD/diskstat.h | 40 + ksysguard/ksysguardd/FreeBSD/loadavg.c | 96 + ksysguard/ksysguardd/FreeBSD/loadavg.h | 36 + ksysguard/ksysguardd/FreeBSD/logfile.c | 175 + ksysguard/ksysguardd/FreeBSD/logfile.h | 36 + ksysguard/ksysguardd/FreeBSD/netdev.c | 353 + ksysguard/ksysguardd/FreeBSD/netdev.h | 35 + ksysguard/ksysguardd/Irix/LoadAvg.c | 78 + ksysguard/ksysguardd/Irix/LoadAvg.h | 41 + ksysguard/ksysguardd/Irix/Makefile.am | 4 + ksysguard/ksysguardd/Irix/Memory.c | 128 + ksysguard/ksysguardd/Irix/Memory.h | 46 + ksysguard/ksysguardd/Irix/NetDev.c | 343 + ksysguard/ksysguardd/Irix/NetDev.h | 35 + ksysguard/ksysguardd/Irix/ProcessList.c | 462 + ksysguard/ksysguardd/Irix/ProcessList.h | 43 + ksysguard/ksysguardd/Irix/cpu.c | 262 + ksysguard/ksysguardd/Irix/cpu.h | 43 + ksysguard/ksysguardd/Linux/Makefile.am | 14 + ksysguard/ksysguardd/Linux/Memory.c | 293 + ksysguard/ksysguardd/Linux/Memory.h | 45 + ksysguard/ksysguardd/Linux/ProcessList.c | 554 + ksysguard/ksysguardd/Linux/ProcessList.h | 38 + ksysguard/ksysguardd/Linux/acpi.c | 418 + ksysguard/ksysguardd/Linux/acpi.h | 45 + ksysguard/ksysguardd/Linux/apm.c | 126 + ksysguard/ksysguardd/Linux/apm.h | 34 + ksysguard/ksysguardd/Linux/cpuinfo.c | 179 + ksysguard/ksysguardd/Linux/cpuinfo.h | 32 + ksysguard/ksysguardd/Linux/diskstat.c | 265 + ksysguard/ksysguardd/Linux/diskstat.h | 40 + ksysguard/ksysguardd/Linux/i8k.c | 150 + ksysguard/ksysguardd/Linux/i8k.h | 36 + ksysguard/ksysguardd/Linux/lmsensors.c | 309 + ksysguard/ksysguardd/Linux/lmsensors.h | 30 + ksysguard/ksysguardd/Linux/loadavg.c | 143 + ksysguard/ksysguardd/Linux/loadavg.h | 36 + ksysguard/ksysguardd/Linux/logfile.c | 172 + ksysguard/ksysguardd/Linux/logfile.h | 36 + ksysguard/ksysguardd/Linux/netdev.c | 367 + ksysguard/ksysguardd/Linux/netdev.h | 35 + ksysguard/ksysguardd/Linux/netstat.c | 495 + ksysguard/ksysguardd/Linux/netstat.h | 39 + ksysguard/ksysguardd/Linux/stat.c | 1184 + ksysguard/ksysguardd/Linux/stat.h | 66 + ksysguard/ksysguardd/Makefile.am | 35 + ksysguard/ksysguardd/NetBSD/CPU.c | 206 + ksysguard/ksysguardd/NetBSD/CPU.h | 49 + ksysguard/ksysguardd/NetBSD/Makefile.am | 8 + ksysguard/ksysguardd/NetBSD/Memory.c | 202 + ksysguard/ksysguardd/NetBSD/Memory.h | 43 + ksysguard/ksysguardd/NetBSD/ProcessList.c | 457 + ksysguard/ksysguardd/NetBSD/ProcessList.h | 38 + ksysguard/ksysguardd/NetBSD/apm.c | 100 + ksysguard/ksysguardd/NetBSD/apm.h | 34 + ksysguard/ksysguardd/NetBSD/diskstat.c | 249 + ksysguard/ksysguardd/NetBSD/diskstat.h | 40 + ksysguard/ksysguardd/NetBSD/loadavg.c | 96 + ksysguard/ksysguardd/NetBSD/loadavg.h | 36 + ksysguard/ksysguardd/NetBSD/logfile.c | 175 + ksysguard/ksysguardd/NetBSD/logfile.h | 36 + ksysguard/ksysguardd/NetBSD/netdev.c | 304 + ksysguard/ksysguardd/NetBSD/netdev.h | 35 + ksysguard/ksysguardd/OpenBSD/Makefile.am | 6 + ksysguard/ksysguardd/OpenBSD/cpu.c | 209 + ksysguard/ksysguardd/OpenBSD/cpu.h | 51 + ksysguard/ksysguardd/OpenBSD/memory.c | 207 + ksysguard/ksysguardd/OpenBSD/memory.h | 43 + ksysguard/ksysguardd/PWUIDCache.c | 114 + ksysguard/ksysguardd/PWUIDCache.h | 36 + ksysguard/ksysguardd/Porting-HOWTO | 133 + ksysguard/ksysguardd/Solaris/LoadAvg.c | 120 + ksysguard/ksysguardd/Solaris/LoadAvg.h | 41 + ksysguard/ksysguardd/Solaris/Makefile.am | 10 + ksysguard/ksysguardd/Solaris/Memory.c | 223 + ksysguard/ksysguardd/Solaris/Memory.h | 46 + ksysguard/ksysguardd/Solaris/NetDev.c | 679 + ksysguard/ksysguardd/Solaris/NetDev.h | 59 + ksysguard/ksysguardd/Solaris/ProcessList.c | 436 + ksysguard/ksysguardd/Solaris/ProcessList.h | 43 + ksysguard/ksysguardd/Tru64/LoadAvg.c | 121 + ksysguard/ksysguardd/Tru64/LoadAvg.h | 41 + ksysguard/ksysguardd/Tru64/Makefile.am | 8 + ksysguard/ksysguardd/Tru64/Memory.c | 237 + ksysguard/ksysguardd/Tru64/Memory.h | 46 + ksysguard/ksysguardd/Tru64/NetDev.c | 678 + ksysguard/ksysguardd/Tru64/NetDev.h | 59 + ksysguard/ksysguardd/conf.c | 137 + ksysguard/ksysguardd/conf.h | 38 + ksysguard/ksysguardd/configure.in.in | 45 + ksysguard/ksysguardd/ksysguardd.c | 633 + ksysguard/ksysguardd/ksysguardd.h | 52 + ksysguard/ksysguardd/modules.h | 151 + ksysguard/pics/Makefile.am | 5 + ksysguard/pics/X.png | Bin 0 -> 965 bytes ksysguard/pics/computer.png | Bin 0 -> 913 bytes ksysguard/pics/daemon.png | Bin 0 -> 226 bytes ksysguard/pics/kdeapp.png | Bin 0 -> 1134 bytes ksysguard/pics/kernel.png | Bin 0 -> 329 bytes ksysguard/pics/ksysguardd.png | Bin 0 -> 1080 bytes ksysguard/pics/running.png | Bin 0 -> 661 bytes ksysguard/pics/shell.png | Bin 0 -> 1070 bytes ksysguard/pics/tools.png | Bin 0 -> 1055 bytes ksysguard/pics/unknownapp.png | Bin 0 -> 1059 bytes ksysguard/pics/waiting.png | Bin 0 -> 963 bytes ksysguard/version.h | 1 + ksystraycmd/Makefile.am | 18 + ksystraycmd/README | 29 + ksystraycmd/ksystraycmd.cpp | 341 + ksystraycmd/ksystraycmd.h | 89 + ksystraycmd/main.cpp | 143 + ktip/Makefile.am | 29 + ktip/hi128-app-ktip.png | Bin 0 -> 6059 bytes ktip/hi16-app-ktip.png | Bin 0 -> 669 bytes ktip/hi22-app-ktip.png | Bin 0 -> 1133 bytes ktip/hi32-app-ktip.png | Bin 0 -> 1665 bytes ktip/hi48-app-ktip.png | Bin 0 -> 2595 bytes ktip/hi64-app-ktip.png | Bin 0 -> 3606 bytes ktip/hisc-app-ktip.svgz | Bin 0 -> 2533 bytes ktip/ktip.desktop | 93 + ktip/ktipwindow.cpp | 61 + ktip/pics/Makefile.am | 2 + ktip/pics/wizard_small.png | Bin 0 -> 24750 bytes ktip/tips | 1176 + ktip/uninstall.desktop | 2 + kwin/COMPLIANCE | 247 + kwin/CONFIGURING | 73 + kwin/HACKING | 174 + kwin/KWinInterface.h | 42 + kwin/LICENSE | 21 + kwin/Makefile.am | 38 + kwin/NEWCOLORSCHEME.README | 44 + kwin/README | 206 + kwin/activation.cpp | 922 + kwin/atoms.cpp | 108 + kwin/atoms.h | 56 + kwin/bridge.cpp | 206 + kwin/bridge.h | 75 + kwin/client.cpp | 2165 + kwin/client.h | 946 + kwin/clients/Makefile.am | 8 + kwin/clients/PORTING | 159 + kwin/clients/REQUIREMENTS_FOR_CVS | 20 + kwin/clients/b2/Makefile.am | 23 + kwin/clients/b2/b2.desktop | 7 + kwin/clients/b2/b2client.cpp | 1433 + kwin/clients/b2/b2client.h | 166 + kwin/clients/b2/bitmaps.h | 98 + kwin/clients/b2/config/Makefile.am | 16 + kwin/clients/b2/config/config.cpp | 165 + kwin/clients/b2/config/config.h | 50 + kwin/clients/default/Makefile.am | 14 + kwin/clients/default/config/Makefile.am | 16 + kwin/clients/default/config/config.cpp | 131 + kwin/clients/default/config/config.h | 49 + kwin/clients/default/kdedefault.cpp | 1069 + kwin/clients/default/kdedefault.h | 103 + kwin/clients/keramik/Makefile.am | 44 + kwin/clients/keramik/config/Makefile.am | 13 + kwin/clients/keramik/config/config.cpp | 110 + kwin/clients/keramik/config/config.h | 57 + kwin/clients/keramik/config/keramikconfig.ui | 76 + kwin/clients/keramik/embedtool.cpp | 230 + kwin/clients/keramik/keramik.cpp | 1834 + kwin/clients/keramik/keramik.desktop | 31 + kwin/clients/keramik/keramik.h | 201 + kwin/clients/keramik/pics/border-left.png | Bin 0 -> 139 bytes kwin/clients/keramik/pics/border-right.png | Bin 0 -> 142 bytes kwin/clients/keramik/pics/bottom-center.png | Bin 0 -> 149 bytes kwin/clients/keramik/pics/bottom-left.png | Bin 0 -> 158 bytes kwin/clients/keramik/pics/bottom-right.png | Bin 0 -> 160 bytes kwin/clients/keramik/pics/caption-large-center.png | Bin 0 -> 176 bytes kwin/clients/keramik/pics/caption-large-left.png | Bin 0 -> 394 bytes kwin/clients/keramik/pics/caption-large-right.png | Bin 0 -> 498 bytes kwin/clients/keramik/pics/caption-small-center.png | Bin 0 -> 177 bytes kwin/clients/keramik/pics/caption-small-left.png | Bin 0 -> 425 bytes kwin/clients/keramik/pics/caption-small-right.png | Bin 0 -> 504 bytes kwin/clients/keramik/pics/grabbar-center.png | Bin 0 -> 167 bytes kwin/clients/keramik/pics/grabbar-left.png | Bin 0 -> 211 bytes kwin/clients/keramik/pics/grabbar-right.png | Bin 0 -> 208 bytes kwin/clients/keramik/pics/titlebar-center.png | Bin 0 -> 160 bytes kwin/clients/keramik/pics/titlebar-left.png | Bin 0 -> 240 bytes kwin/clients/keramik/pics/titlebar-right.png | Bin 0 -> 288 bytes .../keramik/pics/titlebutton-round-huge.png | Bin 0 -> 7868 bytes .../keramik/pics/titlebutton-round-large.png | Bin 0 -> 4380 bytes kwin/clients/keramik/pics/titlebutton-round.png | Bin 0 -> 1789 bytes .../keramik/pics/titlebutton-square-huge.png | Bin 0 -> 4656 bytes .../keramik/pics/titlebutton-square-large.png | Bin 0 -> 2725 bytes kwin/clients/keramik/pics/titlebutton-square.png | Bin 0 -> 1082 bytes kwin/clients/kwmtheme/Makefile.am | 15 + kwin/clients/kwmtheme/cli_installer/Makefile.am | 18 + kwin/clients/kwmtheme/cli_installer/main.cpp | 166 + kwin/clients/kwmtheme/kwmtheme.desktop | 81 + kwin/clients/kwmtheme/kwmthemeclient.cpp | 936 + kwin/clients/kwmtheme/kwmthemeclient.h | 74 + kwin/clients/laptop/Makefile.am | 17 + kwin/clients/laptop/laptop.desktop | 69 + kwin/clients/laptop/laptopclient.cpp | 761 + kwin/clients/laptop/laptopclient.h | 76 + kwin/clients/modernsystem/Makefile.am | 19 + kwin/clients/modernsystem/btnhighcolor.h | 93 + kwin/clients/modernsystem/buttondata.h | 42 + kwin/clients/modernsystem/config/Makefile.am | 14 + kwin/clients/modernsystem/config/config.cpp | 130 + kwin/clients/modernsystem/config/config.h | 50 + kwin/clients/modernsystem/modernsys.cpp | 739 + kwin/clients/modernsystem/modernsys.h | 72 + kwin/clients/modernsystem/modernsystem.desktop | 69 + kwin/clients/plastik/Makefile.am | 19 + kwin/clients/plastik/config/Makefile.am | 14 + kwin/clients/plastik/config/config.cpp | 123 + kwin/clients/plastik/config/config.h | 53 + kwin/clients/plastik/config/configdialog.ui | 119 + kwin/clients/plastik/misc.cpp | 85 + kwin/clients/plastik/misc.h | 30 + kwin/clients/plastik/plastik.cpp | 598 + kwin/clients/plastik/plastik.desktop | 37 + kwin/clients/plastik/plastik.h | 127 + kwin/clients/plastik/plastikbutton.cpp | 629 + kwin/clients/plastik/plastikbutton.h | 90 + kwin/clients/plastik/plastikclient.cpp | 529 + kwin/clients/plastik/plastikclient.h | 73 + kwin/clients/quartz/Makefile.am | 23 + kwin/clients/quartz/config/Makefile.am | 16 + kwin/clients/quartz/config/config.cpp | 104 + kwin/clients/quartz/config/config.h | 47 + kwin/clients/quartz/quartz.cpp | 797 + kwin/clients/quartz/quartz.desktop | 39 + kwin/clients/quartz/quartz.h | 95 + kwin/clients/redmond/Makefile.am | 17 + kwin/clients/redmond/redmond.cpp | 689 + kwin/clients/redmond/redmond.desktop | 19 + kwin/clients/redmond/redmond.h | 91 + kwin/clients/test/Makefile.am | 15 + kwin/clients/test/test.cpp | 343 + kwin/clients/test/test.desktop | 67 + kwin/clients/test/test.h | 49 + kwin/clients/web/Makefile.am | 15 + kwin/clients/web/Web.cpp | 385 + kwin/clients/web/Web.h | 87 + kwin/clients/web/WebButton.cpp | 287 + kwin/clients/web/WebButton.h | 70 + kwin/clients/web/web.desktop | 47 + kwin/cr16-app-kwin.png | Bin 0 -> 760 bytes kwin/cr32-app-kwin.png | Bin 0 -> 1686 bytes kwin/cr48-app-kwin.png | Bin 0 -> 2728 bytes kwin/data/Makefile.am | 25 + kwin/data/fsp_workarounds_1.kwinrules | 41 + kwin/data/kwin.upd | 14 + kwin/data/kwin3_plugin.pl | 8 + kwin/data/kwin3_plugin.upd | 4 + kwin/data/kwin_focus1.sh | 13 + kwin/data/kwin_focus1.upd | 5 + kwin/data/kwin_focus2.sh | 8 + kwin/data/kwin_focus2.upd | 5 + kwin/data/kwin_fsp_workarounds_1.upd | 8 + kwin/data/kwiniconify.upd | 8 + kwin/data/kwinsticky.upd | 8 + kwin/data/kwinupdatewindowsettings.upd | 7 + kwin/data/pluginlibFix.pl | 8 + kwin/data/pop.wav | Bin 0 -> 4068 bytes kwin/data/update_default_rules.cpp | 56 + kwin/data/update_window_settings.cpp | 168 + kwin/events.cpp | 1571 + kwin/eventsrc | 5918 ++ kwin/geometry.cpp | 2589 + kwin/geometrytip.cpp | 63 + kwin/geometrytip.h | 34 + kwin/group.cpp | 1118 + kwin/group.h | 90 + kwin/kcmkwin/Makefile.am | 1 + kwin/kcmkwin/kwindecoration/Makefile.am | 18 + kwin/kcmkwin/kwindecoration/buttons.cpp | 883 + kwin/kcmkwin/kwindecoration/buttons.h | 227 + kwin/kcmkwin/kwindecoration/kwindecoration.cpp | 613 + kwin/kcmkwin/kwindecoration/kwindecoration.desktop | 231 + kwin/kcmkwin/kwindecoration/kwindecoration.h | 135 + kwin/kcmkwin/kwindecoration/kwindecorationIface.h | 44 + kwin/kcmkwin/kwindecoration/pixmaps.h | 110 + kwin/kcmkwin/kwindecoration/preview.cpp | 507 + kwin/kcmkwin/kwindecoration/preview.h | 150 + kwin/kcmkwin/kwinoptions/AUTHORS | 12 + kwin/kcmkwin/kwinoptions/ChangeLog | 51 + kwin/kcmkwin/kwinoptions/Makefile.am | 18 + kwin/kcmkwin/kwinoptions/kwinactions.desktop | 233 + kwin/kcmkwin/kwinoptions/kwinadvanced.desktop | 232 + kwin/kcmkwin/kwinoptions/kwinfocus.desktop | 222 + kwin/kcmkwin/kwinoptions/kwinmoving.desktop | 229 + kwin/kcmkwin/kwinoptions/kwinoptions.desktop | 225 + kwin/kcmkwin/kwinoptions/kwintranslucency.desktop | 195 + kwin/kcmkwin/kwinoptions/main.cpp | 262 + kwin/kcmkwin/kwinoptions/main.h | 100 + kwin/kcmkwin/kwinoptions/mouse.cpp | 856 + kwin/kcmkwin/kwinoptions/mouse.h | 137 + kwin/kcmkwin/kwinoptions/windows.cpp | 1627 + kwin/kcmkwin/kwinoptions/windows.h | 289 + kwin/kcmkwin/kwinrules/Makefile.am | 29 + kwin/kcmkwin/kwinrules/detectwidget.cpp | 223 + kwin/kcmkwin/kwinrules/detectwidget.h | 86 + kwin/kcmkwin/kwinrules/detectwidgetbase.ui | 218 + kwin/kcmkwin/kwinrules/editshortcutbase.ui | 164 + kwin/kcmkwin/kwinrules/kcm.cpp | 103 + kwin/kcmkwin/kwinrules/kcm.h | 53 + kwin/kcmkwin/kwinrules/kwinrules.desktop | 209 + kwin/kcmkwin/kwinrules/kwinsrc.cpp | 8 + kwin/kcmkwin/kwinrules/main.cpp | 294 + kwin/kcmkwin/kwinrules/ruleslist.cpp | 200 + kwin/kcmkwin/kwinrules/ruleslist.h | 59 + kwin/kcmkwin/kwinrules/ruleslistbase.ui | 91 + kwin/kcmkwin/kwinrules/ruleswidget.cpp | 803 + kwin/kcmkwin/kwinrules/ruleswidget.h | 148 + kwin/kcmkwin/kwinrules/ruleswidgetbase.ui | 2597 + kwin/killer/Makefile.am | 9 + kwin/killer/killer.cpp | 88 + kwin/killwindow.cpp | 112 + kwin/killwindow.h | 35 + kwin/kompmgr/Makefile.am | 6 + kwin/kompmgr/configure.in.in | 8 + kwin/kompmgr/kompmgr.c | 3005 + kwin/kwin.kcfg | 83 + kwin/kwinbindings.cpp | 178 + kwin/layers.cpp | 773 + kwin/lib/Makefile.am | 20 + kwin/lib/kcommondecoration.cpp | 966 + kwin/lib/kcommondecoration.h | 367 + kwin/lib/kdecoration.cpp | 444 + kwin/lib/kdecoration.h | 887 + kwin/lib/kdecoration_p.cpp | 235 + kwin/lib/kdecoration_p.h | 111 + kwin/lib/kdecoration_plugins_p.cpp | 199 + kwin/lib/kdecoration_plugins_p.h | 77 + kwin/lib/kdecorationfactory.cpp | 85 + kwin/lib/kdecorationfactory.h | 120 + kwin/main.cpp | 301 + kwin/main.h | 40 + kwin/manage.cpp | 596 + kwin/notifications.cpp | 147 + kwin/notifications.h | 69 + kwin/oldheaders/Makefile.am | 2 + kwin/oldheaders/client.h | 4 + kwin/oldheaders/kwinbutton.h | 4 + kwin/oldheaders/options.h | 4 + kwin/oldheaders/workspace.h | 4 + kwin/options.cpp | 331 + kwin/options.h | 341 + kwin/pics/Makefile.am | 9 + kwin/pics/bluesun.png | Bin 0 -> 2787 bytes kwin/pics/close.png | Bin 0 -> 306 bytes kwin/pics/fog-grey.png | Bin 0 -> 4608 bytes kwin/pics/fog.png | Bin 0 -> 8192 bytes kwin/pics/greenie.dim.png | Bin 0 -> 10027 bytes kwin/pics/greenie.light.png | Bin 0 -> 11672 bytes kwin/pics/iconify.png | Bin 0 -> 277 bytes kwin/pics/maximize.png | Bin 0 -> 283 bytes kwin/pics/maximizedown.png | Bin 0 -> 283 bytes kwin/pics/menu.png | Bin 0 -> 278 bytes kwin/pics/pindown.png | Bin 0 -> 322 bytes kwin/pics/pinup.png | Bin 0 -> 320 bytes kwin/pics/unknown.png | Bin 0 -> 708 bytes kwin/placement.cpp | 812 + kwin/placement.h | 92 + kwin/plugins.cpp | 42 + kwin/plugins.h | 32 + kwin/popupinfo.cpp | 148 + kwin/popupinfo.h | 50 + kwin/rules.cpp | 1077 + kwin/rules.h | 311 + kwin/sm.cpp | 444 + kwin/sm.h | 88 + kwin/tabbox.cpp | 1338 + kwin/tabbox.h | 102 + kwin/tools/Makefile.am | 11 + kwin/tools/decobenchmark/Makefile.am | 9 + kwin/tools/decobenchmark/main.cpp | 138 + kwin/tools/decobenchmark/main.h | 51 + kwin/tools/decobenchmark/preview.cpp | 412 + kwin/tools/decobenchmark/preview.h | 137 + kwin/tools/test_gravity.cpp | 99 + kwin/tools/xreply/Makefile | 2 + kwin/tools/xreply/xreply.c | 197 + kwin/useractions.cpp | 1119 + kwin/utils.cpp | 386 + kwin/utils.h | 273 + kwin/wm-spec/index.html | 243 + kwin/wm-spec/x107.html | 627 + kwin/wm-spec/x208.html | 225 + kwin/wm-spec/x225.html | 720 + kwin/wm-spec/x24.html | 496 + kwin/wm-spec/x340.html | 182 + kwin/wm-spec/x351.html | 648 + kwin/wm-spec/x479.html | 143 + kwin/wm-spec/x483.html | 166 + kwin/wm-spec/x489.html | 178 + kwin/wm-spec/x512.html | 763 + kwin/workspace.cpp | 2732 + kwin/workspace.h | 836 + kxkb/LICENSE | 16 + kxkb/Makefile.am | 41 + kxkb/TODO | 23 + kxkb/configure.in.in | 15 + kxkb/extension.cpp | 326 + kxkb/extension.h | 37 + kxkb/kcmlayout.cpp | 976 + kxkb/kcmlayout.h | 62 + kxkb/kcmlayoutwidget.ui | 715 + kxkb/kcmmisc.cpp | 516 + kxkb/kcmmisc.h | 76 + kxkb/kcmmiscwidget.ui | 344 + kxkb/keyboard.desktop | 243 + kxkb/keyboard_layout.desktop | 239 + kxkb/kxkb.cpp | 390 + kxkb/kxkb.desktop | 82 + kxkb/kxkb.h | 99 + kxkb/kxkb_groups | 43 + kxkb/kxkbbindings.cpp | 12 + kxkb/kxkbconfig.cpp | 340 + kxkb/kxkbconfig.h | 122 + kxkb/kxkbtraywindow.cpp | 130 + kxkb/kxkbtraywindow.h | 92 + kxkb/layoutmap.cpp | 132 + kxkb/layoutmap.h | 75 + kxkb/pics/Makefile.am | 1 + kxkb/pics/hi16-app-kxkb.png | Bin 0 -> 343 bytes kxkb/pics/hi32-app-kxkb.png | Bin 0 -> 1279 bytes kxkb/pics/hi48-app-kxkb.png | Bin 0 -> 1821 bytes kxkb/pixmap.cpp | 357 + kxkb/pixmap.h | 31 + kxkb/rules.cpp | 156 + kxkb/rules.h | 46 + kxkb/x11helper.cpp | 320 + kxkb/x11helper.h | 41 + l10n/AUTHORS | 4 + l10n/C/entry.desktop | 83 + l10n/C/flag.png | Bin 0 -> 307 bytes l10n/Makefile.am | 22 + l10n/README | 231 + l10n/ad/entry.desktop | 61 + l10n/ad/flag.png | Bin 0 -> 613 bytes l10n/ae/entry.desktop | 83 + l10n/ae/flag.png | Bin 0 -> 184 bytes l10n/af/entry.desktop | 81 + l10n/af/flag.png | Bin 0 -> 498 bytes l10n/ag/entry.desktop | 101 + l10n/ag/flag.png | Bin 0 -> 889 bytes l10n/ai/entry.desktop | 61 + l10n/ai/flag.png | Bin 0 -> 932 bytes l10n/al/entry.desktop | 83 + l10n/al/flag.png | Bin 0 -> 627 bytes l10n/am/entry.desktop | 83 + l10n/am/flag.png | Bin 0 -> 284 bytes l10n/an/entry.desktop | 92 + l10n/an/flag.png | Bin 0 -> 482 bytes l10n/ao/entry.desktop | 54 + l10n/ao/flag.png | Bin 0 -> 516 bytes l10n/ar/entry.desktop | 75 + l10n/ar/flag.png | Bin 0 -> 527 bytes l10n/as/entry.desktop | 94 + l10n/as/flag.png | Bin 0 -> 822 bytes l10n/at/entry.desktop | 94 + l10n/at/flag.png | Bin 0 -> 443 bytes l10n/au/entry.desktop | 96 + l10n/au/flag.png | Bin 0 -> 257 bytes l10n/aw/entry.desktop | 55 + l10n/aw/flag.png | Bin 0 -> 401 bytes l10n/ax/entry.desktop | 86 + l10n/ax/flag.png | Bin 0 -> 943 bytes l10n/az/entry.desktop | 89 + l10n/az/flag.png | Bin 0 -> 148 bytes l10n/ba/entry.desktop | 101 + l10n/ba/flag.png | Bin 0 -> 622 bytes l10n/bb/entry.desktop | 58 + l10n/bb/flag.png | Bin 0 -> 655 bytes l10n/bd/entry.desktop | 63 + l10n/bd/flag.png | Bin 0 -> 255 bytes l10n/be/entry.desktop | 102 + l10n/be/flag.png | Bin 0 -> 206 bytes l10n/bf/entry.desktop | 58 + l10n/bf/flag.png | Bin 0 -> 418 bytes l10n/bg/entry.desktop | 88 + l10n/bg/flag.png | Bin 0 -> 203 bytes l10n/bh/entry.desktop | 64 + l10n/bh/flag.png | Bin 0 -> 214 bytes l10n/bi/entry.desktop | 56 + l10n/bi/flag.png | Bin 0 -> 663 bytes l10n/bj/entry.desktop | 58 + l10n/bj/flag.png | Bin 0 -> 350 bytes l10n/bm/entry.desktop | 69 + l10n/bm/flag.png | Bin 0 -> 760 bytes l10n/bn/entry.desktop | 76 + l10n/bn/flag.png | Bin 0 -> 853 bytes l10n/bo/entry.desktop | 80 + l10n/bo/flag.png | Bin 0 -> 744 bytes l10n/br/entry.desktop | 92 + l10n/br/flag.png | Bin 0 -> 380 bytes l10n/bs/entry.desktop | 71 + l10n/bs/flag.png | Bin 0 -> 421 bytes l10n/bt/entry.desktop | 77 + l10n/bt/flag.png | Bin 0 -> 856 bytes l10n/bw/entry.desktop | 64 + l10n/bw/flag.png | Bin 0 -> 276 bytes l10n/by/entry.desktop | 90 + l10n/by/flag.png | Bin 0 -> 1169 bytes l10n/bz/entry.desktop | 61 + l10n/bz/flag.png | Bin 0 -> 858 bytes l10n/ca/entry.desktop | 105 + l10n/ca/flag.png | Bin 0 -> 310 bytes l10n/caribbean.desktop | 77 + l10n/cc/entry.desktop | 89 + l10n/cc/flag.png | Bin 0 -> 779 bytes l10n/cd/entry.desktop | 93 + l10n/cd/flag.png | Bin 0 -> 602 bytes l10n/centralafrica.desktop | 72 + l10n/centralamerica.desktop | 75 + l10n/centralasia.desktop | 72 + l10n/centraleurope.desktop | 83 + l10n/cf/entry.desktop | 94 + l10n/cf/flag.png | Bin 0 -> 760 bytes l10n/cg/entry.desktop | 82 + l10n/cg/flag.png | Bin 0 -> 391 bytes l10n/ch/entry.desktop | 109 + l10n/ch/flag.png | Bin 0 -> 352 bytes l10n/ci/entry.desktop | 82 + l10n/ci/flag.png | Bin 0 -> 272 bytes l10n/ck/entry.desktop | 93 + l10n/ck/flag.png | Bin 0 -> 782 bytes l10n/cl/entry.desktop | 77 + l10n/cl/flag.png | Bin 0 -> 626 bytes l10n/cm/entry.desktop | 94 + l10n/cm/flag.png | Bin 0 -> 440 bytes l10n/cn/entry.desktop | 93 + l10n/cn/flag.png | Bin 0 -> 357 bytes l10n/co/entry.desktop | 87 + l10n/co/flag.png | Bin 0 -> 399 bytes l10n/country.template | 27 + l10n/cr/entry.desktop | 71 + l10n/cr/flag.png | Bin 0 -> 148 bytes l10n/cu/entry.desktop | 81 + l10n/cu/flag.png | Bin 0 -> 276 bytes l10n/cv/entry.desktop | 87 + l10n/cv/flag.png | Bin 0 -> 704 bytes l10n/cx/entry.desktop | 91 + l10n/cx/flag.png | Bin 0 -> 851 bytes l10n/cy/entry.desktop | 91 + l10n/cy/flag.png | Bin 0 -> 511 bytes l10n/cz/entry.desktop | 95 + l10n/cz/flag.png | Bin 0 -> 386 bytes l10n/de/entry.desktop | 104 + l10n/de/flag.png | Bin 0 -> 357 bytes l10n/dj/entry.desktop | 63 + l10n/dj/flag.png | Bin 0 -> 252 bytes l10n/dk/entry.desktop | 102 + l10n/dk/flag.png | Bin 0 -> 224 bytes l10n/dm/entry.desktop | 75 + l10n/dm/flag.png | Bin 0 -> 598 bytes l10n/do/entry.desktop | 98 + l10n/do/flag.png | Bin 0 -> 891 bytes l10n/dz/entry.desktop | 73 + l10n/dz/flag.png | Bin 0 -> 187 bytes l10n/eastasia.desktop | 73 + l10n/easteurope.desktop | 83 + l10n/ec/entry.desktop | 83 + l10n/ec/flag.png | Bin 0 -> 658 bytes l10n/ee/entry.desktop | 85 + l10n/ee/flag.png | Bin 0 -> 381 bytes l10n/eg/entry.desktop | 83 + l10n/eg/flag.png | Bin 0 -> 326 bytes l10n/eh/entry.desktop | 94 + l10n/eh/flag.png | Bin 0 -> 716 bytes l10n/er/entry.desktop | 69 + l10n/er/flag.png | Bin 0 -> 882 bytes l10n/es/entry.desktop | 104 + l10n/es/flag.png | Bin 0 -> 348 bytes l10n/et/entry.desktop | 93 + l10n/et/flag.png | Bin 0 -> 486 bytes l10n/fi/entry.desktop | 99 + l10n/fi/flag.png | Bin 0 -> 368 bytes l10n/fj/entry.desktop | 72 + l10n/fj/flag.png | Bin 0 -> 855 bytes l10n/fk/entry.desktop | 92 + l10n/fk/flag.png | Bin 0 -> 841 bytes l10n/fm/entry.desktop | 90 + l10n/fm/flag.png | Bin 0 -> 352 bytes l10n/fo/entry.desktop | 94 + l10n/fo/flag.png | Bin 0 -> 321 bytes l10n/fr/entry.desktop | 105 + l10n/fr/flag.png | Bin 0 -> 331 bytes l10n/ga/entry.desktop | 62 + l10n/ga/flag.png | Bin 0 -> 291 bytes l10n/gb/entry.desktop | 92 + l10n/gb/flag.png | Bin 0 -> 419 bytes l10n/gd/entry.desktop | 63 + l10n/gd/flag.png | Bin 0 -> 1267 bytes l10n/ge/entry.desktop | 84 + l10n/ge/flag.png | Bin 0 -> 227 bytes l10n/gh/entry.desktop | 66 + l10n/gh/flag.png | Bin 0 -> 290 bytes l10n/gi/entry.desktop | 63 + l10n/gi/flag.png | Bin 0 -> 525 bytes l10n/gl/entry.desktop | 86 + l10n/gl/flag.png | Bin 0 -> 423 bytes l10n/gm/entry.desktop | 72 + l10n/gm/flag.png | Bin 0 -> 306 bytes l10n/gn/entry.desktop | 73 + l10n/gn/flag.png | Bin 0 -> 268 bytes l10n/gp/entry.desktop | 72 + l10n/gp/flag.png | Bin 0 -> 471 bytes l10n/gq/entry.desktop | 93 + l10n/gq/flag.png | Bin 0 -> 643 bytes l10n/gr/entry.desktop | 96 + l10n/gr/flag.png | Bin 0 -> 377 bytes l10n/gt/entry.desktop | 67 + l10n/gt/flag.png | Bin 0 -> 682 bytes l10n/gu/entry.desktop | 58 + l10n/gu/flag.png | Bin 0 -> 626 bytes l10n/gw/entry.desktop | 70 + l10n/gw/flag.png | Bin 0 -> 464 bytes l10n/gy/entry.desktop | 72 + l10n/gy/flag.png | Bin 0 -> 837 bytes l10n/hk/entry.desktop | 80 + l10n/hk/flag.png | Bin 0 -> 561 bytes l10n/hn/entry.desktop | 61 + l10n/hn/flag.png | Bin 0 -> 533 bytes l10n/hr/entry.desktop | 95 + l10n/hr/flag.png | Bin 0 -> 383 bytes l10n/ht/entry.desktop | 62 + l10n/ht/flag.png | Bin 0 -> 278 bytes l10n/hu/entry.desktop | 99 + l10n/hu/flag.png | Bin 0 -> 218 bytes l10n/id/entry.desktop | 84 + l10n/id/flag.png | Bin 0 -> 117 bytes l10n/ie/entry.desktop | 97 + l10n/ie/flag.png | Bin 0 -> 333 bytes l10n/il/entry.desktop | 84 + l10n/il/flag.png | Bin 0 -> 166 bytes l10n/in/entry.desktop | 74 + l10n/in/flag.png | Bin 0 -> 222 bytes l10n/iq/entry.desktop | 79 + l10n/iq/flag.png | Bin 0 -> 405 bytes l10n/ir/entry.desktop | 69 + l10n/ir/flag.png | Bin 0 -> 150 bytes l10n/is/entry.desktop | 97 + l10n/is/flag.png | Bin 0 -> 207 bytes l10n/it/entry.desktop | 98 + l10n/it/flag.png | Bin 0 -> 332 bytes l10n/jm/entry.desktop | 82 + l10n/jm/flag.png | Bin 0 -> 759 bytes l10n/jo/entry.desktop | 76 + l10n/jo/flag.png | Bin 0 -> 350 bytes l10n/jp/entry.desktop | 89 + l10n/jp/flag.png | Bin 0 -> 316 bytes l10n/ke/entry.desktop | 77 + l10n/ke/flag.png | Bin 0 -> 769 bytes l10n/kg/entry.desktop | 90 + l10n/kg/flag.png | Bin 0 -> 465 bytes l10n/kh/entry.desktop | 96 + l10n/kh/flag.png | Bin 0 -> 568 bytes l10n/ki/entry.desktop | 54 + l10n/ki/flag.png | Bin 0 -> 831 bytes l10n/km/entry.desktop | 82 + l10n/km/flag.png | Bin 0 -> 623 bytes l10n/kn/entry.desktop | 99 + l10n/kn/flag.png | Bin 0 -> 858 bytes l10n/kp/entry.desktop | 90 + l10n/kp/flag.png | Bin 0 -> 595 bytes l10n/kr/entry.desktop | 100 + l10n/kr/flag.png | Bin 0 -> 272 bytes l10n/kw/entry.desktop | 64 + l10n/kw/flag.png | Bin 0 -> 203 bytes l10n/ky/entry.desktop | 94 + l10n/ky/flag.png | Bin 0 -> 957 bytes l10n/kz/entry.desktop | 89 + l10n/kz/flag.png | Bin 0 -> 649 bytes l10n/la/entry.desktop | 59 + l10n/la/flag.png | Bin 0 -> 512 bytes l10n/lb/entry.desktop | 80 + l10n/lb/flag.png | Bin 0 -> 541 bytes l10n/lc/entry.desktop | 75 + l10n/lc/flag.png | Bin 0 -> 621 bytes l10n/li/entry.desktop | 68 + l10n/li/flag.png | Bin 0 -> 482 bytes l10n/lk/entry.desktop | 65 + l10n/lk/flag.png | Bin 0 -> 873 bytes l10n/lr/entry.desktop | 73 + l10n/lr/flag.png | Bin 0 -> 519 bytes l10n/ls/entry.desktop | 71 + l10n/ls/flag.png | Bin 0 -> 833 bytes l10n/lt/entry.desktop | 92 + l10n/lt/flag.png | Bin 0 -> 96 bytes l10n/lu/entry.desktop | 92 + l10n/lu/flag.png | Bin 0 -> 457 bytes l10n/lv/entry.desktop | 85 + l10n/lv/flag.png | Bin 0 -> 266 bytes l10n/ly/entry.desktop | 75 + l10n/ly/flag.png | Bin 0 -> 162 bytes l10n/ma/entry.desktop | 82 + l10n/ma/flag.png | Bin 0 -> 179 bytes l10n/mc/entry.desktop | 76 + l10n/mc/flag.png | Bin 0 -> 264 bytes l10n/md/entry.desktop | 75 + l10n/md/flag.png | Bin 0 -> 531 bytes l10n/me/entry.desktop | 56 + l10n/me/flag.png | Bin 0 -> 359 bytes l10n/mg/entry.desktop | 80 + l10n/mg/flag.png | Bin 0 -> 360 bytes l10n/mh/entry.desktop | 93 + l10n/mh/flag.png | Bin 0 -> 845 bytes l10n/middleeast.desktop | 70 + l10n/mk/entry.desktop | 91 + l10n/mk/flag.png | Bin 0 -> 449 bytes l10n/ml/entry.desktop | 53 + l10n/ml/flag.png | Bin 0 -> 268 bytes l10n/mm/entry.desktop | 70 + l10n/mm/flag.png | Bin 0 -> 488 bytes l10n/mn/entry.desktop | 86 + l10n/mn/flag.png | Bin 0 -> 457 bytes l10n/mo/entry.desktop | 82 + l10n/mo/flag.png | Bin 0 -> 623 bytes l10n/mq/entry.desktop | 78 + l10n/mq/flag.png | Bin 0 -> 863 bytes l10n/mr/entry.desktop | 84 + l10n/mr/flag.png | Bin 0 -> 597 bytes l10n/ms/entry.desktop | 58 + l10n/ms/flag.png | Bin 0 -> 748 bytes l10n/mt/entry.desktop | 59 + l10n/mt/flag.png | Bin 0 -> 326 bytes l10n/mu/entry.desktop | 75 + l10n/mu/flag.png | Bin 0 -> 321 bytes l10n/mv/entry.desktop | 89 + l10n/mv/flag.png | Bin 0 -> 641 bytes l10n/mw/entry.desktop | 60 + l10n/mw/flag.png | Bin 0 -> 504 bytes l10n/mx/entry.desktop | 90 + l10n/mx/flag.png | Bin 0 -> 653 bytes l10n/my/entry.desktop | 84 + l10n/my/flag.png | Bin 0 -> 670 bytes l10n/mz/entry.desktop | 86 + l10n/mz/flag.png | Bin 0 -> 681 bytes l10n/na/entry.desktop | 81 + l10n/na/flag.png | Bin 0 -> 773 bytes l10n/nc/entry.desktop | 94 + l10n/nc/flag.png | Bin 0 -> 672 bytes l10n/ne/entry.desktop | 65 + l10n/ne/flag.png | Bin 0 -> 476 bytes l10n/nf/entry.desktop | 93 + l10n/nf/flag.png | Bin 0 -> 472 bytes l10n/ng/entry.desktop | 76 + l10n/ng/flag.png | Bin 0 -> 255 bytes l10n/ni/entry.desktop | 80 + l10n/ni/flag.png | Bin 0 -> 177 bytes l10n/nl/README | 30 + l10n/nl/entry.desktop | 102 + l10n/nl/flag.png | Bin 0 -> 135 bytes l10n/no/entry.desktop | 106 + l10n/no/flag.png | Bin 0 -> 196 bytes l10n/northafrica.desktop | 73 + l10n/northamerica.desktop | 83 + l10n/northeurope.desktop | 83 + l10n/np/entry.desktop | 59 + l10n/np/flag.png | Bin 0 -> 721 bytes l10n/nr/entry.desktop | 59 + l10n/nr/flag.png | Bin 0 -> 406 bytes l10n/nu/entry.desktop | 57 + l10n/nu/flag.png | Bin 0 -> 595 bytes l10n/nz/entry.desktop | 98 + l10n/nz/flag.png | Bin 0 -> 367 bytes l10n/oceania.desktop | 65 + l10n/om/entry.desktop | 54 + l10n/om/flag.png | Bin 0 -> 832 bytes l10n/pa/entry.desktop | 55 + l10n/pa/flag.png | Bin 0 -> 906 bytes l10n/pe/entry.desktop | 62 + l10n/pe/flag.png | Bin 0 -> 404 bytes l10n/pf/entry.desktop | 94 + l10n/pf/flag.png | Bin 0 -> 587 bytes l10n/pg/entry.desktop | 92 + l10n/pg/flag.png | Bin 0 -> 714 bytes l10n/ph/entry.desktop | 94 + l10n/ph/flag.png | Bin 0 -> 578 bytes l10n/pk/entry.desktop | 55 + l10n/pk/flag.png | Bin 0 -> 205 bytes l10n/pl/entry.desktop | 99 + l10n/pl/flag.png | Bin 0 -> 153 bytes l10n/pm/entry.desktop | 93 + l10n/pm/flag.png | Bin 0 -> 1083 bytes l10n/pn/entry.desktop | 54 + l10n/pn/flag.png | Bin 0 -> 1001 bytes l10n/pr/entry.desktop | 74 + l10n/pr/flag.png | Bin 0 -> 786 bytes l10n/ps/entry.desktop | 100 + l10n/ps/flag.png | Bin 0 -> 198 bytes l10n/pt/entry.desktop | 75 + l10n/pt/flag.png | Bin 0 -> 386 bytes l10n/pw/entry.desktop | 56 + l10n/pw/flag.png | Bin 0 -> 560 bytes l10n/py/entry.desktop | 76 + l10n/py/flag.png | Bin 0 -> 650 bytes l10n/qa/entry.desktop | 60 + l10n/qa/flag.png | Bin 0 -> 213 bytes l10n/ro/entry.desktop | 89 + l10n/ro/flag.png | Bin 0 -> 152 bytes l10n/rs/entry.desktop | 69 + l10n/rs/flag.png | Bin 0 -> 399 bytes l10n/ru/entry.desktop | 101 + l10n/ru/flag.png | Bin 0 -> 346 bytes l10n/rw/entry.desktop | 76 + l10n/rw/flag.png | Bin 0 -> 583 bytes l10n/sa/entry.desktop | 83 + l10n/sa/flag.png | Bin 0 -> 231 bytes l10n/sb/entry.desktop | 95 + l10n/sb/flag.png | Bin 0 -> 788 bytes l10n/sc/entry.desktop | 81 + l10n/sc/flag.png | Bin 0 -> 816 bytes l10n/sd/entry.desktop | 57 + l10n/sd/flag.png | Bin 0 -> 322 bytes l10n/se/entry.desktop | 102 + l10n/se/flag.png | Bin 0 -> 173 bytes l10n/sg/entry.desktop | 83 + l10n/sg/flag.png | Bin 0 -> 458 bytes l10n/sh/entry.desktop | 85 + l10n/sh/flag.png | Bin 0 -> 748 bytes l10n/si/entry.desktop | 89 + l10n/si/flag.png | Bin 0 -> 134 bytes l10n/sk/entry.desktop | 91 + l10n/sk/flag.png | Bin 0 -> 398 bytes l10n/sm/entry.desktop | 61 + l10n/sm/flag.png | Bin 0 -> 574 bytes l10n/sn/entry.desktop | 61 + l10n/sn/flag.png | Bin 0 -> 439 bytes l10n/so/entry.desktop | 68 + l10n/so/flag.png | Bin 0 -> 228 bytes l10n/southafrica.desktop | 74 + l10n/southamerica.desktop | 82 + l10n/southasia.desktop | 74 + l10n/southeastasia.desktop | 74 + l10n/southeurope.desktop | 83 + l10n/sr/entry.desktop | 82 + l10n/sr/flag.png | Bin 0 -> 489 bytes l10n/st/entry.desktop | 93 + l10n/st/flag.png | Bin 0 -> 550 bytes l10n/sv/entry.desktop | 67 + l10n/sv/flag.png | Bin 0 -> 594 bytes l10n/sy/entry.desktop | 76 + l10n/sy/flag.png | Bin 0 -> 227 bytes l10n/sz/entry.desktop | 80 + l10n/sz/flag.png | Bin 0 -> 842 bytes l10n/tc/entry.desktop | 93 + l10n/tc/flag.png | Bin 0 -> 824 bytes l10n/td/entry.desktop | 89 + l10n/td/flag.png | Bin 0 -> 268 bytes l10n/tg/entry.desktop | 53 + l10n/tg/flag.png | Bin 0 -> 571 bytes l10n/th/entry.desktop | 86 + l10n/th/flag.png | Bin 0 -> 104 bytes l10n/tj/entry.desktop | 88 + l10n/tj/flag.png | Bin 0 -> 451 bytes l10n/tk/entry.desktop | 58 + l10n/tk/flag.png | Bin 0 -> 637 bytes l10n/tm/entry.desktop | 72 + l10n/tm/flag.png | Bin 0 -> 571 bytes l10n/tn/entry.desktop | 74 + l10n/tn/flag.png | Bin 0 -> 182 bytes l10n/to/entry.desktop | 53 + l10n/to/flag.png | Bin 0 -> 413 bytes l10n/tp/entry.desktop | 97 + l10n/tp/flag.png | Bin 0 -> 540 bytes l10n/tr/entry.desktop | 99 + l10n/tr/flag.png | Bin 0 -> 310 bytes l10n/tt/entry.desktop | 104 + l10n/tt/flag.png | Bin 0 -> 749 bytes l10n/tv/entry.desktop | 55 + l10n/tv/flag.png | Bin 0 -> 769 bytes l10n/tw/entry.desktop | 63 + l10n/tw/flag.png | Bin 0 -> 235 bytes l10n/tz/entry.desktop | 97 + l10n/tz/flag.png | Bin 0 -> 689 bytes l10n/ua/entry.desktop | 98 + l10n/ua/flag.png | Bin 0 -> 201 bytes l10n/ug/entry.desktop | 57 + l10n/ug/flag.png | Bin 0 -> 516 bytes l10n/us/entry.desktop | 105 + l10n/us/flag.png | Bin 0 -> 311 bytes l10n/uy/entry.desktop | 74 + l10n/uy/flag.png | Bin 0 -> 775 bytes l10n/uz/entry.desktop | 77 + l10n/uz/flag.png | Bin 0 -> 306 bytes l10n/va/entry.desktop | 95 + l10n/va/flag.png | Bin 0 -> 535 bytes l10n/vc/entry.desktop | 104 + l10n/vc/flag.png | Bin 0 -> 659 bytes l10n/ve/entry.desktop | 69 + l10n/ve/flag.png | Bin 0 -> 888 bytes l10n/vg/entry.desktop | 90 + l10n/vg/flag.png | Bin 0 -> 816 bytes l10n/vi/entry.desktop | 91 + l10n/vi/flag.png | Bin 0 -> 1031 bytes l10n/vn/entry.desktop | 70 + l10n/vn/flag.png | Bin 0 -> 203 bytes l10n/vu/entry.desktop | 56 + l10n/vu/flag.png | Bin 0 -> 739 bytes l10n/westafrica.desktop | 74 + l10n/westeurope.desktop | 84 + l10n/wf/entry.desktop | 95 + l10n/wf/flag.png | Bin 0 -> 604 bytes l10n/ws/entry.desktop | 58 + l10n/ws/flag.png | Bin 0 -> 496 bytes l10n/ye/entry.desktop | 73 + l10n/ye/flag.png | Bin 0 -> 217 bytes l10n/za/entry.desktop | 108 + l10n/za/flag.png | Bin 0 -> 1056 bytes l10n/zm/entry.desktop | 76 + l10n/zm/flag.png | Bin 0 -> 535 bytes l10n/zw/entry.desktop | 67 + l10n/zw/flag.png | Bin 0 -> 555 bytes libkonq/AUTHORS | 7 + libkonq/DESIGN | 46 + libkonq/Makefile.am | 72 + libkonq/PLUGINS | 13 + libkonq/SERVICEMENUS | 52 + libkonq/directory_bookmarkbar.desktop | 83 + libkonq/favicons/Makefile.am | 15 + libkonq/favicons/favicons.cpp | 275 + libkonq/favicons/favicons.desktop | 148 + libkonq/favicons/favicons.h | 105 + libkonq/favicons/favicons.upd | 3 + libkonq/favicons/move_favicons.sh | 41 + libkonq/kfileivi.cc | 477 + libkonq/kfileivi.h | 239 + libkonq/kivdirectoryoverlay.cc | 141 + libkonq/kivdirectoryoverlay.h | 58 + libkonq/knewmenu.cc | 621 + libkonq/knewmenu.h | 224 + libkonq/konq_bgnddlg.cc | 211 + libkonq/konq_bgnddlg.h | 74 + libkonq/konq_defaults.h | 48 + libkonq/konq_dirpart.cc | 746 + libkonq/konq_dirpart.h | 351 + libkonq/konq_drag.cc | 284 + libkonq/konq_drag.h | 122 + libkonq/konq_events.cc | 8 + libkonq/konq_events.h | 70 + libkonq/konq_faviconmgr.cc | 57 + libkonq/konq_faviconmgr.h | 70 + libkonq/konq_filetip.cc | 300 + libkonq/konq_filetip.h | 97 + libkonq/konq_historycomm.cc | 41 + libkonq/konq_historycomm.h | 77 + libkonq/konq_historymgr.cc | 733 + libkonq/konq_historymgr.h | 385 + libkonq/konq_iconviewwidget.cc | 1927 + libkonq/konq_iconviewwidget.h | 370 + libkonq/konq_operations.cc | 817 + libkonq/konq_operations.h | 215 + libkonq/konq_pixmapprovider.cc | 201 + libkonq/konq_pixmapprovider.h | 81 + libkonq/konq_popupmenu.cc | 1205 + libkonq/konq_popupmenu.h | 221 + libkonq/konq_propsview.cc | 584 + libkonq/konq_propsview.h | 185 + libkonq/konq_settings.cc | 184 + libkonq/konq_settings.h | 141 + libkonq/konq_sound.cc | 137 + libkonq/konq_sound.h | 35 + libkonq/konq_undo.cc | 667 + libkonq/konq_undo.h | 162 + libkonq/konq_xmlguiclient.cc | 157 + libkonq/konq_xmlguiclient.h | 70 + libkonq/konqbookmarkmanager.h | 24 + libkonq/konqpopupmenuplugin.desktop | 76 + libkonq/libkonq_export.h | 39 + libkonq/pics/Makefile.am | 2 + libkonq/pics/arrow_bottomleft.png | Bin 0 -> 163 bytes libkonq/pics/arrow_bottomright.png | Bin 0 -> 163 bytes libkonq/pics/arrow_topleft.png | Bin 0 -> 163 bytes libkonq/pics/arrow_topright.png | Bin 0 -> 161 bytes libkonq/pics/thumbnailfont_7x4.png | Bin 0 -> 965 bytes libkonq/tests/Makefile.am | 6 + libkonq/tests/konqdragtest.cpp | 62 + mkpamserv | 71 + nsplugins/HOWTO.DEBUG | 22 + nsplugins/Makefile.am | 37 + nsplugins/NSPluginCallbackIface.h | 46 + nsplugins/README | 255 + nsplugins/TESTCASES | 40 + nsplugins/TODO | 2 + nsplugins/kcm_nsplugins.cpp | 130 + nsplugins/khtml_plugins.desktop | 233 + nsplugins/nspluginloader.cpp | 528 + nsplugins/nspluginloader.h | 126 + nsplugins/nspluginpart.rc | 9 + nsplugins/plugin_part.cpp | 419 + nsplugins/plugin_part.h | 159 + nsplugins/plugin_paths.cpp | 74 + nsplugins/plugin_paths.h | 8 + nsplugins/pluginscan.cpp | 654 + nsplugins/sdk/jni.h | 1810 + nsplugins/sdk/jni_md.h | 199 + nsplugins/sdk/jri.h | 689 + nsplugins/sdk/jri_md.h | 565 + nsplugins/sdk/jritypes.h | 243 + nsplugins/sdk/npapi.h | 705 + nsplugins/sdk/npruntime.h | 399 + nsplugins/sdk/npupp.h | 1889 + nsplugins/sdk/obsolete/protypes.h | 251 + nsplugins/sdk/prcpucfg.h | 663 + nsplugins/sdk/prtypes.h | 543 + nsplugins/test/Makefile.am | 11 + nsplugins/test/testnsplugin.cpp | 143 + nsplugins/test/testnsplugin.h | 56 + nsplugins/test/testnsplugin.rc | 15 + nsplugins/viewer/Makefile.am | 11 + nsplugins/viewer/NSPluginClassIface.h | 83 + nsplugins/viewer/glibevents.cpp | 43 + nsplugins/viewer/glibevents.h | 41 + nsplugins/viewer/kxt.cpp | 629 + nsplugins/viewer/kxt.h | 99 + nsplugins/viewer/nsplugin.cpp | 1980 + nsplugins/viewer/nsplugin.h | 339 + nsplugins/viewer/qxteventloop.cpp | 472 + nsplugins/viewer/qxteventloop.h | 80 + nsplugins/viewer/resolve.h | 46 + nsplugins/viewer/viewer.cpp | 312 + nsplugins/wrapper/Makefile.am | 4 + nsplugins/wrapper/wrapper.c | 749 + pics/Makefile.am | 1 + pics/crystalsvg/Makefile.am | 1 + pics/crystalsvg/cr128-app-acroread.png | Bin 0 -> 9349 bytes pics/crystalsvg/cr128-app-applixware.png | Bin 0 -> 4974 bytes pics/crystalsvg/cr128-app-clanbomber.png | Bin 0 -> 6450 bytes pics/crystalsvg/cr128-app-email.png | Bin 0 -> 14113 bytes pics/crystalsvg/cr128-app-gimp.png | Bin 0 -> 23401 bytes pics/crystalsvg/cr128-app-kfm_home.png | Bin 0 -> 11267 bytes pics/crystalsvg/cr128-app-licq.png | Bin 0 -> 13389 bytes pics/crystalsvg/cr128-app-linuxconf.png | Bin 0 -> 15242 bytes pics/crystalsvg/cr128-app-netscape.png | Bin 0 -> 7762 bytes pics/crystalsvg/cr128-app-package.png | Bin 0 -> 12803 bytes pics/crystalsvg/cr128-app-package_applications.png | Bin 0 -> 15170 bytes pics/crystalsvg/cr128-app-package_development.png | Bin 0 -> 8370 bytes pics/crystalsvg/cr128-app-package_favourite.png | Bin 0 -> 16553 bytes pics/crystalsvg/cr128-app-package_games.png | Bin 0 -> 13000 bytes pics/crystalsvg/cr128-app-package_multimedia.png | Bin 0 -> 12789 bytes pics/crystalsvg/cr128-app-package_network.png | Bin 0 -> 16916 bytes pics/crystalsvg/cr128-app-package_settings.png | Bin 0 -> 10179 bytes pics/crystalsvg/cr128-app-package_toys.png | Bin 0 -> 16017 bytes pics/crystalsvg/cr128-app-package_utilities.png | Bin 0 -> 11665 bytes pics/crystalsvg/cr128-app-penguin.png | Bin 0 -> 16139 bytes pics/crystalsvg/cr128-app-phppg.png | Bin 0 -> 14337 bytes pics/crystalsvg/cr128-app-pysol.png | Bin 0 -> 8595 bytes pics/crystalsvg/cr128-app-randr.png | Bin 0 -> 7059 bytes pics/crystalsvg/cr128-app-staroffice.png | Bin 0 -> 23182 bytes pics/crystalsvg/cr128-app-systemtray.png | Bin 0 -> 13894 bytes pics/crystalsvg/cr128-app-taskbar.png | Bin 0 -> 8465 bytes pics/crystalsvg/cr128-app-terminal.png | Bin 0 -> 5284 bytes pics/crystalsvg/cr128-app-tux.png | Bin 0 -> 9438 bytes pics/crystalsvg/cr128-app-wp.png | Bin 0 -> 21496 bytes pics/crystalsvg/cr128-app-xclock.png | Bin 0 -> 20970 bytes pics/crystalsvg/cr128-app-xfmail.png | Bin 0 -> 20619 bytes pics/crystalsvg/cr128-app-xmag.png | Bin 0 -> 12589 bytes pics/crystalsvg/cr16-app-abiword.png | Bin 0 -> 835 bytes pics/crystalsvg/cr16-app-acroread.png | Bin 0 -> 944 bytes pics/crystalsvg/cr16-app-alevt.png | Bin 0 -> 265 bytes pics/crystalsvg/cr16-app-applixware.png | Bin 0 -> 551 bytes pics/crystalsvg/cr16-app-assistant.png | Bin 0 -> 875 bytes pics/crystalsvg/cr16-app-blender.png | Bin 0 -> 787 bytes pics/crystalsvg/cr16-app-bluefish.png | Bin 0 -> 823 bytes pics/crystalsvg/cr16-app-clanbomber.png | Bin 0 -> 846 bytes pics/crystalsvg/cr16-app-designer.png | Bin 0 -> 271 bytes pics/crystalsvg/cr16-app-dia.png | Bin 0 -> 622 bytes pics/crystalsvg/cr16-app-dlgedit.png | Bin 0 -> 250 bytes pics/crystalsvg/cr16-app-eclipse.png | Bin 0 -> 812 bytes pics/crystalsvg/cr16-app-edu_languages.png | Bin 0 -> 971 bytes pics/crystalsvg/cr16-app-edu_mathematics.png | Bin 0 -> 730 bytes pics/crystalsvg/cr16-app-edu_miscellaneous.png | Bin 0 -> 950 bytes pics/crystalsvg/cr16-app-edu_science.png | Bin 0 -> 993 bytes pics/crystalsvg/cr16-app-emacs.png | Bin 0 -> 272 bytes pics/crystalsvg/cr16-app-email.png | Bin 0 -> 1015 bytes pics/crystalsvg/cr16-app-evolution.png | Bin 0 -> 866 bytes pics/crystalsvg/cr16-app-fifteenpieces.png | Bin 0 -> 811 bytes pics/crystalsvg/cr16-app-gabber.png | Bin 0 -> 737 bytes pics/crystalsvg/cr16-app-gaim.png | Bin 0 -> 691 bytes pics/crystalsvg/cr16-app-gimp.png | Bin 0 -> 894 bytes pics/crystalsvg/cr16-app-gnome_apps.png | Bin 0 -> 1118 bytes pics/crystalsvg/cr16-app-gnomemeeting.png | Bin 0 -> 899 bytes pics/crystalsvg/cr16-app-gnucash.png | Bin 0 -> 771 bytes pics/crystalsvg/cr16-app-gnumeric.png | Bin 0 -> 784 bytes pics/crystalsvg/cr16-app-gv.png | Bin 0 -> 226 bytes pics/crystalsvg/cr16-app-gvim.png | Bin 0 -> 904 bytes pics/crystalsvg/cr16-app-kbinaryclock.png | Bin 0 -> 840 bytes pics/crystalsvg/cr16-app-kfm_home.png | Bin 0 -> 713 bytes pics/crystalsvg/cr16-app-kvirc.png | Bin 0 -> 836 bytes pics/crystalsvg/cr16-app-licq.png | Bin 0 -> 1043 bytes pics/crystalsvg/cr16-app-linguist.png | Bin 0 -> 752 bytes pics/crystalsvg/cr16-app-linuxconf.png | Bin 0 -> 1097 bytes pics/crystalsvg/cr16-app-lyx.png | Bin 0 -> 307 bytes pics/crystalsvg/cr16-app-mathematica.png | Bin 0 -> 315 bytes pics/crystalsvg/cr16-app-nedit.png | Bin 0 -> 927 bytes pics/crystalsvg/cr16-app-netscape.png | Bin 0 -> 1013 bytes pics/crystalsvg/cr16-app-opera.png | Bin 0 -> 904 bytes pics/crystalsvg/cr16-app-package.png | Bin 0 -> 1029 bytes pics/crystalsvg/cr16-app-package_application.png | Bin 0 -> 551 bytes pics/crystalsvg/cr16-app-package_applications.png | Bin 0 -> 959 bytes pics/crystalsvg/cr16-app-package_development.png | Bin 0 -> 961 bytes pics/crystalsvg/cr16-app-package_editors.png | Bin 0 -> 834 bytes pics/crystalsvg/cr16-app-package_edutainment.png | Bin 0 -> 1031 bytes pics/crystalsvg/cr16-app-package_favourite.png | Bin 0 -> 1114 bytes pics/crystalsvg/cr16-app-package_games.png | Bin 0 -> 991 bytes pics/crystalsvg/cr16-app-package_games_arcade.png | Bin 0 -> 841 bytes pics/crystalsvg/cr16-app-package_games_board.png | Bin 0 -> 1053 bytes pics/crystalsvg/cr16-app-package_games_card.png | Bin 0 -> 1013 bytes .../crystalsvg/cr16-app-package_games_strategy.png | Bin 0 -> 359 bytes pics/crystalsvg/cr16-app-package_graphics.png | Bin 0 -> 638 bytes pics/crystalsvg/cr16-app-package_multimedia.png | Bin 0 -> 781 bytes pics/crystalsvg/cr16-app-package_network.png | Bin 0 -> 918 bytes pics/crystalsvg/cr16-app-package_settings.png | Bin 0 -> 807 bytes pics/crystalsvg/cr16-app-package_system.png | Bin 0 -> 903 bytes pics/crystalsvg/cr16-app-package_toys.png | Bin 0 -> 894 bytes pics/crystalsvg/cr16-app-package_utilities.png | Bin 0 -> 843 bytes .../crystalsvg/cr16-app-package_wordprocessing.png | Bin 0 -> 991 bytes pics/crystalsvg/cr16-app-pan.png | Bin 0 -> 1005 bytes pics/crystalsvg/cr16-app-penguin.png | Bin 0 -> 964 bytes pics/crystalsvg/cr16-app-phppg.png | Bin 0 -> 962 bytes pics/crystalsvg/cr16-app-plan.png | Bin 0 -> 294 bytes pics/crystalsvg/cr16-app-planner.png | Bin 0 -> 603 bytes pics/crystalsvg/cr16-app-pybliographic.png | Bin 0 -> 545 bytes pics/crystalsvg/cr16-app-randr.png | Bin 0 -> 724 bytes pics/crystalsvg/cr16-app-realplayer.png | Bin 0 -> 710 bytes pics/crystalsvg/cr16-app-remote.png | Bin 0 -> 957 bytes pics/crystalsvg/cr16-app-runprocesscatcher.png | Bin 0 -> 416 bytes pics/crystalsvg/cr16-app-scribus.png | Bin 0 -> 1003 bytes pics/crystalsvg/cr16-app-sodipodi.png | Bin 0 -> 756 bytes pics/crystalsvg/cr16-app-systemtray.png | Bin 0 -> 793 bytes pics/crystalsvg/cr16-app-taskbar.png | Bin 0 -> 327 bytes pics/crystalsvg/cr16-app-terminal.png | Bin 0 -> 666 bytes pics/crystalsvg/cr16-app-tux.png | Bin 0 -> 687 bytes pics/crystalsvg/cr16-app-vnc.png | Bin 0 -> 786 bytes pics/crystalsvg/cr16-app-wabi.png | Bin 0 -> 944 bytes pics/crystalsvg/cr16-app-wine.png | Bin 0 -> 979 bytes pics/crystalsvg/cr16-app-wp.png | Bin 0 -> 1149 bytes pics/crystalsvg/cr16-app-xcalc.png | Bin 0 -> 944 bytes pics/crystalsvg/cr16-app-xchat.png | Bin 0 -> 842 bytes pics/crystalsvg/cr16-app-xclipboard.png | Bin 0 -> 263 bytes pics/crystalsvg/cr16-app-xclock.png | Bin 0 -> 992 bytes pics/crystalsvg/cr16-app-xconsole.png | Bin 0 -> 205 bytes pics/crystalsvg/cr16-app-xedit.png | Bin 0 -> 787 bytes pics/crystalsvg/cr16-app-xemacs.png | Bin 0 -> 272 bytes pics/crystalsvg/cr16-app-xeyes.png | Bin 0 -> 724 bytes pics/crystalsvg/cr16-app-xfig.png | Bin 0 -> 788 bytes pics/crystalsvg/cr16-app-xfmail.png | Bin 0 -> 922 bytes pics/crystalsvg/cr16-app-xload.png | Bin 0 -> 191 bytes pics/crystalsvg/cr16-app-xmag.png | Bin 0 -> 859 bytes pics/crystalsvg/cr16-app-xmms.png | Bin 0 -> 889 bytes pics/crystalsvg/cr16-app-xosview.png | Bin 0 -> 250 bytes pics/crystalsvg/cr16-app-xpaint.png | Bin 0 -> 825 bytes pics/crystalsvg/cr16-app-xv.png | Bin 0 -> 245 bytes pics/crystalsvg/cr22-app-email.png | Bin 0 -> 1200 bytes pics/crystalsvg/cr22-app-fifteenpieces.png | Bin 0 -> 1139 bytes pics/crystalsvg/cr22-app-kbinaryclock.png | Bin 0 -> 1283 bytes pics/crystalsvg/cr22-app-kvirc.png | Bin 0 -> 1330 bytes pics/crystalsvg/cr22-app-nedit.png | Bin 0 -> 1457 bytes pics/crystalsvg/cr22-app-package_development.png | Bin 0 -> 935 bytes pics/crystalsvg/cr22-app-randr.png | Bin 0 -> 1009 bytes pics/crystalsvg/cr22-app-runprocesscatcher.png | Bin 0 -> 896 bytes pics/crystalsvg/cr22-app-systemtray.png | Bin 0 -> 1235 bytes pics/crystalsvg/cr22-app-taskbar.png | Bin 0 -> 1066 bytes pics/crystalsvg/cr32-app-abiword.png | Bin 0 -> 2346 bytes pics/crystalsvg/cr32-app-acroread.png | Bin 0 -> 1787 bytes pics/crystalsvg/cr32-app-alevt.png | Bin 0 -> 390 bytes pics/crystalsvg/cr32-app-applixware.png | Bin 0 -> 1236 bytes pics/crystalsvg/cr32-app-assistant.png | Bin 0 -> 2353 bytes pics/crystalsvg/cr32-app-blender.png | Bin 0 -> 2007 bytes pics/crystalsvg/cr32-app-bluefish.png | Bin 0 -> 2092 bytes pics/crystalsvg/cr32-app-clanbomber.png | Bin 0 -> 1416 bytes pics/crystalsvg/cr32-app-designer.png | Bin 0 -> 324 bytes pics/crystalsvg/cr32-app-dia.png | Bin 0 -> 1532 bytes pics/crystalsvg/cr32-app-dlgedit.png | Bin 0 -> 342 bytes pics/crystalsvg/cr32-app-eclipse.png | Bin 0 -> 2296 bytes pics/crystalsvg/cr32-app-edu_languages.png | Bin 0 -> 2710 bytes pics/crystalsvg/cr32-app-edu_mathematics.png | Bin 0 -> 1615 bytes pics/crystalsvg/cr32-app-edu_miscellaneous.png | Bin 0 -> 2433 bytes pics/crystalsvg/cr32-app-edu_science.png | Bin 0 -> 2650 bytes pics/crystalsvg/cr32-app-emacs.png | Bin 0 -> 2152 bytes pics/crystalsvg/cr32-app-email.png | Bin 0 -> 2460 bytes pics/crystalsvg/cr32-app-evolution.png | Bin 0 -> 2541 bytes pics/crystalsvg/cr32-app-fifteenpieces.png | Bin 0 -> 1629 bytes pics/crystalsvg/cr32-app-gabber.png | Bin 0 -> 1812 bytes pics/crystalsvg/cr32-app-gaim.png | Bin 0 -> 1712 bytes pics/crystalsvg/cr32-app-galeon.png | Bin 0 -> 3166 bytes pics/crystalsvg/cr32-app-gimp.png | Bin 0 -> 2592 bytes pics/crystalsvg/cr32-app-gnome_apps.png | Bin 0 -> 3000 bytes pics/crystalsvg/cr32-app-gnomemeeting.png | Bin 0 -> 2299 bytes pics/crystalsvg/cr32-app-gnucash.png | Bin 0 -> 2143 bytes pics/crystalsvg/cr32-app-gnumeric.png | Bin 0 -> 1835 bytes pics/crystalsvg/cr32-app-gv.png | Bin 0 -> 344 bytes pics/crystalsvg/cr32-app-gvim.png | Bin 0 -> 2453 bytes pics/crystalsvg/cr32-app-kbinaryclock.png | Bin 0 -> 2058 bytes pics/crystalsvg/cr32-app-kfm_home.png | Bin 0 -> 2539 bytes pics/crystalsvg/cr32-app-kvirc.png | Bin 0 -> 2078 bytes pics/crystalsvg/cr32-app-licq.png | Bin 0 -> 2413 bytes pics/crystalsvg/cr32-app-linguist.png | Bin 0 -> 1936 bytes pics/crystalsvg/cr32-app-linuxconf.png | Bin 0 -> 2310 bytes pics/crystalsvg/cr32-app-lyx.png | Bin 0 -> 528 bytes pics/crystalsvg/cr32-app-mathematica.png | Bin 0 -> 522 bytes pics/crystalsvg/cr32-app-nedit.png | Bin 0 -> 2424 bytes pics/crystalsvg/cr32-app-netscape.png | Bin 0 -> 1895 bytes pics/crystalsvg/cr32-app-opera.png | Bin 0 -> 2218 bytes pics/crystalsvg/cr32-app-package.png | Bin 0 -> 2379 bytes pics/crystalsvg/cr32-app-package_applications.png | Bin 0 -> 2358 bytes pics/crystalsvg/cr32-app-package_development.png | Bin 0 -> 1406 bytes pics/crystalsvg/cr32-app-package_editors.png | Bin 0 -> 2299 bytes pics/crystalsvg/cr32-app-package_edutainment.png | Bin 0 -> 2437 bytes pics/crystalsvg/cr32-app-package_favourite.png | Bin 0 -> 2639 bytes pics/crystalsvg/cr32-app-package_games.png | Bin 0 -> 2307 bytes pics/crystalsvg/cr32-app-package_games_arcade.png | Bin 0 -> 1874 bytes pics/crystalsvg/cr32-app-package_games_board.png | Bin 0 -> 2996 bytes pics/crystalsvg/cr32-app-package_games_card.png | Bin 0 -> 2253 bytes .../crystalsvg/cr32-app-package_games_strategy.png | Bin 0 -> 1649 bytes pics/crystalsvg/cr32-app-package_graphics.png | Bin 0 -> 1688 bytes pics/crystalsvg/cr32-app-package_multimedia.png | Bin 0 -> 2186 bytes pics/crystalsvg/cr32-app-package_network.png | Bin 0 -> 2637 bytes pics/crystalsvg/cr32-app-package_settings.png | Bin 0 -> 1806 bytes pics/crystalsvg/cr32-app-package_system.png | Bin 0 -> 2381 bytes pics/crystalsvg/cr32-app-package_toys.png | Bin 0 -> 2604 bytes pics/crystalsvg/cr32-app-package_utilities.png | Bin 0 -> 2057 bytes .../crystalsvg/cr32-app-package_wordprocessing.png | Bin 0 -> 2935 bytes pics/crystalsvg/cr32-app-pan.png | Bin 0 -> 3083 bytes pics/crystalsvg/cr32-app-penguin.png | Bin 0 -> 2016 bytes pics/crystalsvg/cr32-app-phppg.png | Bin 0 -> 2381 bytes pics/crystalsvg/cr32-app-pinguin.png | Bin 0 -> 682 bytes pics/crystalsvg/cr32-app-plan.png | Bin 0 -> 456 bytes pics/crystalsvg/cr32-app-planner.png | Bin 0 -> 1254 bytes pics/crystalsvg/cr32-app-pybliographic.png | Bin 0 -> 1388 bytes pics/crystalsvg/cr32-app-pysol.png | Bin 0 -> 1686 bytes pics/crystalsvg/cr32-app-randr.png | Bin 0 -> 1475 bytes pics/crystalsvg/cr32-app-realplayer.png | Bin 0 -> 1850 bytes pics/crystalsvg/cr32-app-runprocesscatcher.png | Bin 0 -> 1183 bytes pics/crystalsvg/cr32-app-scribus.png | Bin 0 -> 2687 bytes pics/crystalsvg/cr32-app-sodipodi.png | Bin 0 -> 2081 bytes pics/crystalsvg/cr32-app-systemtray.png | Bin 0 -> 1996 bytes pics/crystalsvg/cr32-app-taskbar.png | Bin 0 -> 1673 bytes pics/crystalsvg/cr32-app-terminal.png | Bin 0 -> 1239 bytes pics/crystalsvg/cr32-app-tux.png | Bin 0 -> 1790 bytes pics/crystalsvg/cr32-app-vnc.png | Bin 0 -> 1817 bytes pics/crystalsvg/cr32-app-wabi.png | Bin 0 -> 2157 bytes pics/crystalsvg/cr32-app-wine.png | Bin 0 -> 1226 bytes pics/crystalsvg/cr32-app-wp.png | Bin 0 -> 3181 bytes pics/crystalsvg/cr32-app-x.png | Bin 0 -> 1232 bytes pics/crystalsvg/cr32-app-xapp.png | Bin 0 -> 1232 bytes pics/crystalsvg/cr32-app-xawtv.png | Bin 0 -> 526 bytes pics/crystalsvg/cr32-app-xcalc.png | Bin 0 -> 2342 bytes pics/crystalsvg/cr32-app-xchat.png | Bin 0 -> 2181 bytes pics/crystalsvg/cr32-app-xclipboard.png | Bin 0 -> 363 bytes pics/crystalsvg/cr32-app-xclock.png | Bin 0 -> 2735 bytes pics/crystalsvg/cr32-app-xconsole.png | Bin 0 -> 1239 bytes pics/crystalsvg/cr32-app-xedit.png | Bin 0 -> 1926 bytes pics/crystalsvg/cr32-app-xemacs.png | Bin 0 -> 2152 bytes pics/crystalsvg/cr32-app-xeyes.png | Bin 0 -> 2074 bytes pics/crystalsvg/cr32-app-xfig.png | Bin 0 -> 2491 bytes pics/crystalsvg/cr32-app-xfmail.png | Bin 0 -> 2571 bytes pics/crystalsvg/cr32-app-xload.png | Bin 0 -> 226 bytes pics/crystalsvg/cr32-app-xmag.png | Bin 0 -> 1964 bytes pics/crystalsvg/cr32-app-xmms.png | Bin 0 -> 2507 bytes pics/crystalsvg/cr32-app-xosview.png | Bin 0 -> 356 bytes pics/crystalsvg/cr32-app-xpaint.png | Bin 0 -> 2308 bytes pics/crystalsvg/cr32-app-xv.png | Bin 0 -> 875 bytes pics/crystalsvg/cr48-app-abiword.png | Bin 0 -> 3949 bytes pics/crystalsvg/cr48-app-acroread.png | Bin 0 -> 2916 bytes pics/crystalsvg/cr48-app-applixware.png | Bin 0 -> 1983 bytes pics/crystalsvg/cr48-app-blender.png | Bin 0 -> 3563 bytes pics/crystalsvg/cr48-app-bluefish.png | Bin 0 -> 3463 bytes pics/crystalsvg/cr48-app-clanbomber.png | Bin 0 -> 2232 bytes pics/crystalsvg/cr48-app-designer.png | Bin 0 -> 1169 bytes pics/crystalsvg/cr48-app-dia.png | Bin 0 -> 2565 bytes pics/crystalsvg/cr48-app-eclipse.png | Bin 0 -> 3821 bytes pics/crystalsvg/cr48-app-edu_languages.png | Bin 0 -> 4740 bytes pics/crystalsvg/cr48-app-edu_mathematics.png | Bin 0 -> 2660 bytes pics/crystalsvg/cr48-app-edu_miscellaneous.png | Bin 0 -> 4237 bytes pics/crystalsvg/cr48-app-edu_science.png | Bin 0 -> 4390 bytes pics/crystalsvg/cr48-app-emacs.png | Bin 0 -> 2752 bytes pics/crystalsvg/cr48-app-email.png | Bin 0 -> 4142 bytes pics/crystalsvg/cr48-app-evolution.png | Bin 0 -> 5182 bytes pics/crystalsvg/cr48-app-fifteenpieces.png | Bin 0 -> 2461 bytes pics/crystalsvg/cr48-app-gabber.png | Bin 0 -> 2916 bytes pics/crystalsvg/cr48-app-gaim.png | Bin 0 -> 3671 bytes pics/crystalsvg/cr48-app-galeon.png | Bin 0 -> 5754 bytes pics/crystalsvg/cr48-app-gimp.png | Bin 0 -> 4929 bytes pics/crystalsvg/cr48-app-gnome_apps.png | Bin 0 -> 5471 bytes pics/crystalsvg/cr48-app-gnomemeeting.png | Bin 0 -> 3771 bytes pics/crystalsvg/cr48-app-gnucash.png | Bin 0 -> 3826 bytes pics/crystalsvg/cr48-app-gnumeric.png | Bin 0 -> 2712 bytes pics/crystalsvg/cr48-app-gvim.png | Bin 0 -> 3689 bytes pics/crystalsvg/cr48-app-kbinaryclock.png | Bin 0 -> 3586 bytes pics/crystalsvg/cr48-app-kfm_home.png | Bin 0 -> 3719 bytes pics/crystalsvg/cr48-app-kvirc.png | Bin 0 -> 3747 bytes pics/crystalsvg/cr48-app-licq.png | Bin 0 -> 4129 bytes pics/crystalsvg/cr48-app-linuxconf.png | Bin 0 -> 4520 bytes pics/crystalsvg/cr48-app-nedit.png | Bin 0 -> 4859 bytes pics/crystalsvg/cr48-app-netscape.png | Bin 0 -> 4973 bytes pics/crystalsvg/cr48-app-opera.png | Bin 0 -> 4032 bytes pics/crystalsvg/cr48-app-package.png | Bin 0 -> 4253 bytes pics/crystalsvg/cr48-app-package_applications.png | Bin 0 -> 3839 bytes pics/crystalsvg/cr48-app-package_development.png | Bin 0 -> 2362 bytes pics/crystalsvg/cr48-app-package_editors.png | Bin 0 -> 4047 bytes pics/crystalsvg/cr48-app-package_edutainment.png | Bin 0 -> 4237 bytes pics/crystalsvg/cr48-app-package_favourite.png | Bin 0 -> 4728 bytes pics/crystalsvg/cr48-app-package_games.png | Bin 0 -> 3752 bytes pics/crystalsvg/cr48-app-package_games_arcade.png | Bin 0 -> 3060 bytes pics/crystalsvg/cr48-app-package_games_board.png | Bin 0 -> 5401 bytes pics/crystalsvg/cr48-app-package_games_card.png | Bin 0 -> 3576 bytes .../crystalsvg/cr48-app-package_games_strategy.png | Bin 0 -> 2996 bytes pics/crystalsvg/cr48-app-package_graphics.png | Bin 0 -> 3136 bytes pics/crystalsvg/cr48-app-package_multimedia.png | Bin 0 -> 4183 bytes pics/crystalsvg/cr48-app-package_network.png | Bin 0 -> 4737 bytes pics/crystalsvg/cr48-app-package_settings.png | Bin 0 -> 3570 bytes pics/crystalsvg/cr48-app-package_system.png | Bin 0 -> 4135 bytes pics/crystalsvg/cr48-app-package_toys.png | Bin 0 -> 4840 bytes pics/crystalsvg/cr48-app-package_utilities.png | Bin 0 -> 3982 bytes .../crystalsvg/cr48-app-package_wordprocessing.png | Bin 0 -> 5563 bytes pics/crystalsvg/cr48-app-pan.png | Bin 0 -> 4909 bytes pics/crystalsvg/cr48-app-penguin.png | Bin 0 -> 4083 bytes pics/crystalsvg/cr48-app-phppg.png | Bin 0 -> 3810 bytes pics/crystalsvg/cr48-app-planner.png | Bin 0 -> 1805 bytes pics/crystalsvg/cr48-app-pysol.png | Bin 0 -> 2696 bytes pics/crystalsvg/cr48-app-randr.png | Bin 0 -> 2440 bytes pics/crystalsvg/cr48-app-remote.png | Bin 0 -> 1921 bytes pics/crystalsvg/cr48-app-scribus.png | Bin 0 -> 5253 bytes pics/crystalsvg/cr48-app-sodipodi.png | Bin 0 -> 3814 bytes pics/crystalsvg/cr48-app-staroffice.png | Bin 0 -> 5344 bytes pics/crystalsvg/cr48-app-systemtray.png | Bin 0 -> 3431 bytes pics/crystalsvg/cr48-app-taskbar.png | Bin 0 -> 2672 bytes pics/crystalsvg/cr48-app-terminal.png | Bin 0 -> 2009 bytes pics/crystalsvg/cr48-app-tux.png | Bin 0 -> 3076 bytes pics/crystalsvg/cr48-app-vnc.png | Bin 0 -> 2457 bytes pics/crystalsvg/cr48-app-wine.png | Bin 0 -> 1581 bytes pics/crystalsvg/cr48-app-wmaker_apps.png | Bin 0 -> 3216 bytes pics/crystalsvg/cr48-app-wp.png | Bin 0 -> 5736 bytes pics/crystalsvg/cr48-app-xchat.png | Bin 0 -> 3144 bytes pics/crystalsvg/cr48-app-xclock.png | Bin 0 -> 5107 bytes pics/crystalsvg/cr48-app-xedit.png | Bin 0 -> 3507 bytes pics/crystalsvg/cr48-app-xemacs.png | Bin 0 -> 2752 bytes pics/crystalsvg/cr48-app-xfmail.png | Bin 0 -> 5244 bytes pics/crystalsvg/cr48-app-xmag.png | Bin 0 -> 3086 bytes pics/crystalsvg/cr48-app-xv.png | Bin 0 -> 867 bytes pics/crystalsvg/cr64-app-acroread.png | Bin 0 -> 4025 bytes pics/crystalsvg/cr64-app-applixware.png | Bin 0 -> 2747 bytes pics/crystalsvg/cr64-app-clanbomber.png | Bin 0 -> 2990 bytes pics/crystalsvg/cr64-app-email.png | Bin 0 -> 6267 bytes pics/crystalsvg/cr64-app-gimp.png | Bin 0 -> 7735 bytes pics/crystalsvg/cr64-app-gvim.png | Bin 0 -> 8249 bytes pics/crystalsvg/cr64-app-kfm_home.png | Bin 0 -> 5212 bytes pics/crystalsvg/cr64-app-kvirc.png | Bin 0 -> 4772 bytes pics/crystalsvg/cr64-app-licq.png | Bin 0 -> 5770 bytes pics/crystalsvg/cr64-app-linuxconf.png | Bin 0 -> 6269 bytes pics/crystalsvg/cr64-app-nedit.png | Bin 0 -> 6921 bytes pics/crystalsvg/cr64-app-netscape.png | Bin 0 -> 3787 bytes pics/crystalsvg/cr64-app-package.png | Bin 0 -> 5972 bytes pics/crystalsvg/cr64-app-package_applications.png | Bin 0 -> 6179 bytes pics/crystalsvg/cr64-app-package_development.png | Bin 0 -> 3419 bytes pics/crystalsvg/cr64-app-package_favourite.png | Bin 0 -> 6739 bytes pics/crystalsvg/cr64-app-package_games.png | Bin 0 -> 5444 bytes pics/crystalsvg/cr64-app-package_multimedia.png | Bin 0 -> 5920 bytes pics/crystalsvg/cr64-app-package_network.png | Bin 0 -> 7129 bytes pics/crystalsvg/cr64-app-package_settings.png | Bin 0 -> 4711 bytes pics/crystalsvg/cr64-app-package_toys.png | Bin 0 -> 7265 bytes pics/crystalsvg/cr64-app-package_utilities.png | Bin 0 -> 5104 bytes pics/crystalsvg/cr64-app-penguin.png | Bin 0 -> 6775 bytes pics/crystalsvg/cr64-app-phppg.png | Bin 0 -> 5755 bytes pics/crystalsvg/cr64-app-pysol.png | Bin 0 -> 3647 bytes pics/crystalsvg/cr64-app-qtella.png | Bin 0 -> 6047 bytes pics/crystalsvg/cr64-app-randr.png | Bin 0 -> 3222 bytes pics/crystalsvg/cr64-app-staroffice.png | Bin 0 -> 8316 bytes pics/crystalsvg/cr64-app-systemtray.png | Bin 0 -> 4864 bytes pics/crystalsvg/cr64-app-taskbar.png | Bin 0 -> 3462 bytes pics/crystalsvg/cr64-app-terminal.png | Bin 0 -> 2706 bytes pics/crystalsvg/cr64-app-tux.png | Bin 0 -> 4382 bytes pics/crystalsvg/cr64-app-wp.png | Bin 0 -> 9481 bytes pics/crystalsvg/cr64-app-xclock.png | Bin 0 -> 7839 bytes pics/crystalsvg/cr64-app-xfmail.png | Bin 0 -> 7745 bytes pics/crystalsvg/cr64-app-xmag.png | Bin 0 -> 5006 bytes pics/crystalsvg/crsc-app-acroread.svgz | Bin 0 -> 2820 bytes pics/crystalsvg/crsc-app-aim.svgz | Bin 0 -> 4606 bytes pics/crystalsvg/crsc-app-aktion.svgz | Bin 0 -> 2080 bytes pics/crystalsvg/crsc-app-antivirus.svgz | Bin 0 -> 9590 bytes pics/crystalsvg/crsc-app-applixware.svgz | Bin 0 -> 863 bytes pics/crystalsvg/crsc-app-browser.svgz | Bin 0 -> 6394 bytes pics/crystalsvg/crsc-app-camera.svgz | Bin 0 -> 4326 bytes pics/crystalsvg/crsc-app-clanbomber.svgz | Bin 0 -> 1859 bytes pics/crystalsvg/crsc-app-clock.svgz | Bin 0 -> 9336 bytes pics/crystalsvg/crsc-app-core.svgz | Bin 0 -> 1859 bytes pics/crystalsvg/crsc-app-display.svgz | Bin 0 -> 2542 bytes pics/crystalsvg/crsc-app-download_manager.svgz | Bin 0 -> 7507 bytes pics/crystalsvg/crsc-app-email.svgz | Bin 0 -> 11246 bytes pics/crystalsvg/crsc-app-error.svgz | Bin 0 -> 1734 bytes pics/crystalsvg/crsc-app-fifteenpieces.svgz | Bin 0 -> 2794 bytes pics/crystalsvg/crsc-app-galeon.svgz | Bin 0 -> 11071 bytes pics/crystalsvg/crsc-app-gnome_apps.svgz | Bin 0 -> 2627 bytes pics/crystalsvg/crsc-app-hardware.svgz | Bin 0 -> 3158 bytes pics/crystalsvg/crsc-app-kbinaryclock.svgz | Bin 0 -> 4324 bytes pics/crystalsvg/crsc-app-kfm_home.svgz | Bin 0 -> 6499 bytes pics/crystalsvg/crsc-app-my_mac.svgz | Bin 0 -> 5087 bytes pics/crystalsvg/crsc-app-netscape.svgz | Bin 0 -> 2637 bytes pics/crystalsvg/crsc-app-openoffice.svgz | Bin 0 -> 1808 bytes pics/crystalsvg/crsc-app-package_development.svgz | Bin 0 -> 8025 bytes pics/crystalsvg/crsc-app-package_toys.svgz | Bin 0 -> 5305 bytes pics/crystalsvg/crsc-app-penguin.svgz | Bin 0 -> 4782 bytes pics/crystalsvg/crsc-app-personal.svgz | Bin 0 -> 4679 bytes pics/crystalsvg/crsc-app-quicktime.svgz | Bin 0 -> 3941 bytes pics/crystalsvg/crsc-app-realplayer.svgz | Bin 0 -> 2800 bytes pics/crystalsvg/crsc-app-shell.svgz | Bin 0 -> 47934 bytes pics/crystalsvg/crsc-app-staroffice.svgz | Bin 0 -> 35297 bytes pics/crystalsvg/crsc-app-systemtray.svgz | Bin 0 -> 6963 bytes pics/crystalsvg/crsc-app-terminal.svgz | Bin 0 -> 1805 bytes pics/crystalsvg/crsc-app-tux.svgz | Bin 0 -> 4565 bytes pics/crystalsvg/crsc-app-wine.svgz | Bin 0 -> 1615 bytes pics/crystalsvg/crsc-app-x.svgz | Bin 0 -> 2066 bytes pics/crystalsvg/crsc-app-xapp.svgz | Bin 0 -> 2005 bytes pics/crystalsvg/crsc-app-xcalc.svgz | Bin 0 -> 5272 bytes pics/crystalsvg/crsc-app-xchat.svgz | Bin 0 -> 5685 bytes pics/crystalsvg/crsc-app-xclock.svgz | Bin 0 -> 9336 bytes pics/crystalsvg/crsc-app-xeyes.svgz | Bin 0 -> 2059 bytes pics/crystalsvg/crsc-app-xpaint.svgz | Bin 0 -> 6030 bytes pics/wallpapers/All-Good-People-1.jpg | Bin 0 -> 50280 bytes pics/wallpapers/All-Good-People-1.jpg.desktop | 61 + pics/wallpapers/CREDITS | 15 + pics/wallpapers/Chicken-Songs-2.jpg | Bin 0 -> 20123 bytes pics/wallpapers/Chicken-Songs-2.jpg.desktop | 62 + pics/wallpapers/KDE34.png | Bin 0 -> 77853 bytes pics/wallpapers/KDE34.png.desktop | 63 + pics/wallpapers/Makefile.am | 55 + pics/wallpapers/No-Ones-Laughing-3.jpg | Bin 0 -> 30730 bytes pics/wallpapers/No-Ones-Laughing-3.jpg.desktop | 63 + pics/wallpapers/Time-For-Lunch-2.jpg | Bin 0 -> 32471 bytes pics/wallpapers/Time-For-Lunch-2.jpg.desktop | 64 + pics/wallpapers/Totally-New-Product-1.jpg | Bin 0 -> 61832 bytes pics/wallpapers/Totally-New-Product-1.jpg.desktop | 67 + pics/wallpapers/Won-Ton-Soup-3.jpg | Bin 0 -> 40432 bytes pics/wallpapers/Won-Ton-Soup-3.jpg.desktop | 56 + pics/wallpapers/alta-badia.jpg | Bin 0 -> 237290 bytes pics/wallpapers/alta-badia.jpg.desktop | 21 + pics/wallpapers/andes-venezolanos.svgz | Bin 0 -> 29481 bytes pics/wallpapers/andes-venezolanos.svgz.desktop | 34 + pics/wallpapers/aurora.svgz | Bin 0 -> 261462 bytes pics/wallpapers/aurora.svgz.desktop | 36 + pics/wallpapers/blue-bend.jpg | Bin 0 -> 160312 bytes pics/wallpapers/blue-bend.jpg.desktop | 61 + pics/wallpapers/celtic.svgz | Bin 0 -> 106718 bytes pics/wallpapers/celtic.svgz.desktop | 55 + pics/wallpapers/default_blue.jpg | Bin 0 -> 133918 bytes pics/wallpapers/default_blue.jpg.desktop | 67 + pics/wallpapers/default_gears.jpg | Bin 0 -> 52118 bytes pics/wallpapers/default_gears.jpg.desktop | 62 + pics/wallpapers/floating-leaves.jpg | Bin 0 -> 400999 bytes pics/wallpapers/floating-leaves.jpg.desktop | 55 + pics/wallpapers/globe.svgz | Bin 0 -> 12990 bytes pics/wallpapers/globe.svgz.desktop | 54 + pics/wallpapers/here-gear.svgz | Bin 0 -> 28516 bytes pics/wallpapers/here-gear.svgz.desktop | 52 + pics/wallpapers/konqui.svgz | Bin 0 -> 23959 bytes pics/wallpapers/konqui.svgz.desktop | 20 + pics/wallpapers/lineart.svgz | Bin 0 -> 18334 bytes pics/wallpapers/lineart.svgz.desktop | 54 + pics/wallpapers/moon.svgz | Bin 0 -> 72882 bytes pics/wallpapers/moon.svgz.desktop | 67 + pics/wallpapers/seaofconero.jpg | Bin 0 -> 196193 bytes pics/wallpapers/seaofconero.jpg.desktop | 65 + pics/wallpapers/soft-green.jpg | Bin 0 -> 203894 bytes pics/wallpapers/soft-green.jpg.desktop | 60 + pics/wallpapers/stelvio.jpg | Bin 0 -> 277508 bytes pics/wallpapers/stelvio.jpg.desktop | 19 + pics/wallpapers/sunshine-after-the-rain.jpg | Bin 0 -> 224116 bytes .../wallpapers/sunshine-after-the-rain.jpg.desktop | 59 + pics/wallpapers/triplegears.jpg | Bin 0 -> 117600 bytes pics/wallpapers/triplegears.jpg.desktop | 60 + startkde | 406 + 6578 files changed, 964513 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 COPYING-DOCS create mode 100644 INSTALL create mode 100644 Mainpage.dox create mode 100644 Makefile.am.in create mode 100644 Makefile.cvs create mode 100644 README create mode 100644 README.pam create mode 100644 applnk/.directory create mode 100644 applnk/Makefile.am create mode 100644 applnk/compat/Makefile.am create mode 100644 applnk/compat/battery.desktop create mode 100644 applnk/compat/bwarning.desktop create mode 100644 applnk/compat/cwarning.desktop create mode 100644 applnk/compat/email.desktop create mode 100644 applnk/compat/kcmkonq.desktop create mode 100644 applnk/compat/kcmkxmlrpcd.desktop create mode 100644 applnk/compat/konqhtml.desktop create mode 100644 applnk/compat/passwords.desktop create mode 100644 applnk/compat/power.desktop create mode 100644 applnk/compat/socks.desktop create mode 100644 applnk/compat/userinfo.desktop create mode 100644 applnk/compat/virtualdesktops.desktop create mode 100644 applnk/hidden.directory create mode 100644 applnk/kde-development-translation.directory create mode 100644 applnk/kde-development-webdevelopment.directory create mode 100644 applnk/kde-development.directory create mode 100644 applnk/kde-editors.directory create mode 100644 applnk/kde-edutainment.directory create mode 100644 applnk/kde-essential.menu create mode 100644 applnk/kde-games-arcade.directory create mode 100644 applnk/kde-games-board.directory create mode 100644 applnk/kde-games-card.directory create mode 100644 applnk/kde-games-kids.directory create mode 100644 applnk/kde-games-roguelikes.directory create mode 100644 applnk/kde-games-strategy.directory create mode 100644 applnk/kde-games.directory create mode 100644 applnk/kde-graphics.directory create mode 100644 applnk/kde-information.directory create mode 100644 applnk/kde-information.menu create mode 100644 applnk/kde-internet-terminal.directory create mode 100644 applnk/kde-internet.directory create mode 100644 applnk/kde-main.directory create mode 100644 applnk/kde-more.directory create mode 100644 applnk/kde-multimedia.directory create mode 100644 applnk/kde-office.directory create mode 100644 applnk/kde-science.directory create mode 100644 applnk/kde-screensavers.menu create mode 100644 applnk/kde-settings-accessibility.directory create mode 100644 applnk/kde-settings-components.directory create mode 100644 applnk/kde-settings-desktop.directory create mode 100644 applnk/kde-settings-hardware.directory create mode 100644 applnk/kde-settings-looknfeel.directory create mode 100644 applnk/kde-settings-network.directory create mode 100644 applnk/kde-settings-peripherals.directory create mode 100644 applnk/kde-settings-power.directory create mode 100644 applnk/kde-settings-security.directory create mode 100644 applnk/kde-settings-sound.directory create mode 100644 applnk/kde-settings-system.directory create mode 100644 applnk/kde-settings-webbrowsing.directory create mode 100644 applnk/kde-settings.directory create mode 100644 applnk/kde-settings.menu create mode 100644 applnk/kde-settingsmenu.directory create mode 100644 applnk/kde-system-screensavers.directory create mode 100644 applnk/kde-system-terminal.directory create mode 100644 applnk/kde-system.directory create mode 100644 applnk/kde-toys.directory create mode 100644 applnk/kde-unknown.directory create mode 100644 applnk/kde-utilities-accessibility.directory create mode 100644 applnk/kde-utilities-desktop.directory create mode 100644 applnk/kde-utilities-file.directory create mode 100644 applnk/kde-utilities-peripherals.directory create mode 100644 applnk/kde-utilities-pim.directory create mode 100644 applnk/kde-utilities-xutils.directory create mode 100644 applnk/kde-utilities.directory create mode 100644 applnk/old_desktop_files create mode 100644 configure.in.bot create mode 100644 configure.in.in create mode 100644 doc/Makefile.am create mode 100644 doc/faq/Makefile.am create mode 100644 doc/faq/TODO create mode 100644 doc/faq/about.docbook create mode 100644 doc/faq/configkde.docbook create mode 100644 doc/faq/contrib.docbook create mode 100644 doc/faq/desktop.docbook create mode 100644 doc/faq/filemng.docbook create mode 100644 doc/faq/getkde.docbook create mode 100644 doc/faq/index.docbook create mode 100644 doc/faq/install.docbook create mode 100644 doc/faq/intro.docbook create mode 100644 doc/faq/kdeapps.docbook create mode 100644 doc/faq/misc.docbook create mode 100644 doc/faq/moreinfo.docbook create mode 100644 doc/faq/nonkdeapps.docbook create mode 100644 doc/faq/notrelated.docbook create mode 100644 doc/faq/panel.docbook create mode 100644 doc/faq/qt.docbook create mode 100644 doc/faq/questions.docbook create mode 100644 doc/faq/sound.docbook create mode 100644 doc/faq/tips.docbook create mode 100644 doc/faq/webbrowse.docbook create mode 100644 doc/faq/winmng.docbook create mode 100644 doc/glossary/Makefile.am create mode 100755 doc/glossary/checkxrefs create mode 100644 doc/glossary/index.docbook create mode 100644 doc/glossary/kdeprintingglossary.docbook create mode 100644 doc/kappfinder/Makefile.am create mode 100644 doc/kappfinder/man-kappfinder.1.docbook create mode 100644 doc/kate/Makefile.am create mode 100644 doc/kate/TODO create mode 100644 doc/kate/advanced.docbook create mode 100644 doc/kate/configdialog01.png create mode 100644 doc/kate/configdialog02.png create mode 100644 doc/kate/configuring.docbook create mode 100644 doc/kate/fundamentals.docbook create mode 100644 doc/kate/highlighted.png create mode 100644 doc/kate/highlighting.docbook create mode 100644 doc/kate/index.docbook create mode 100644 doc/kate/kate.png create mode 100644 doc/kate/man-kate.1.docbook create mode 100644 doc/kate/mdi.docbook create mode 100644 doc/kate/menus.docbook create mode 100644 doc/kate/mimetypechooser.png create mode 100644 doc/kate/part.docbook create mode 100644 doc/kate/plugins.docbook create mode 100644 doc/kate/regular-expressions.docbook create mode 100644 doc/kate/unhighlighted.png create mode 100644 doc/kcontrol/Makefile.am create mode 100644 doc/kcontrol/arts/Makefile.am create mode 100644 doc/kcontrol/arts/index.docbook create mode 100644 doc/kcontrol/arts/midi.docbook create mode 100644 doc/kcontrol/background/Makefile.am create mode 100644 doc/kcontrol/background/index.docbook create mode 100644 doc/kcontrol/bell/Makefile.am create mode 100644 doc/kcontrol/bell/index.docbook create mode 100644 doc/kcontrol/cache/Makefile.am create mode 100644 doc/kcontrol/cache/index.docbook create mode 100644 doc/kcontrol/clock/Makefile.am create mode 100644 doc/kcontrol/clock/index.docbook create mode 100644 doc/kcontrol/colors/Makefile.am create mode 100644 doc/kcontrol/colors/index.docbook create mode 100644 doc/kcontrol/cookies/Makefile.am create mode 100644 doc/kcontrol/cookies/index.docbook create mode 100644 doc/kcontrol/crypto/Makefile.am create mode 100644 doc/kcontrol/crypto/index.docbook create mode 100644 doc/kcontrol/desktop/Makefile.am create mode 100644 doc/kcontrol/desktop/index.docbook create mode 100644 doc/kcontrol/desktopbehavior/Makefile.am create mode 100644 doc/kcontrol/desktopbehavior/index.docbook create mode 100644 doc/kcontrol/ebrowsing/Makefile.am create mode 100644 doc/kcontrol/ebrowsing/index.docbook create mode 100644 doc/kcontrol/email/Makefile.am create mode 100644 doc/kcontrol/email/index.docbook create mode 100644 doc/kcontrol/energy/Makefile.am create mode 100644 doc/kcontrol/energy/index.docbook create mode 100644 doc/kcontrol/filemanager/Makefile.am create mode 100644 doc/kcontrol/filemanager/index.docbook create mode 100644 doc/kcontrol/filemanager/kfileman1.png create mode 100644 doc/kcontrol/filemanager/kfileman2.png create mode 100644 doc/kcontrol/filetypes/Makefile.am create mode 100644 doc/kcontrol/filetypes/index.docbook create mode 100644 doc/kcontrol/fonts/Makefile.am create mode 100644 doc/kcontrol/fonts/index.docbook create mode 100644 doc/kcontrol/helpindex/Makefile.am create mode 100644 doc/kcontrol/helpindex/index.docbook create mode 100644 doc/kcontrol/icons/Makefile.am create mode 100644 doc/kcontrol/icons/index.docbook create mode 100644 doc/kcontrol/index.docbook create mode 100644 doc/kcontrol/kcmaccess/Makefile.am create mode 100644 doc/kcontrol/kcmaccess/index.docbook create mode 100644 doc/kcontrol/kcmcss/Makefile.am create mode 100644 doc/kcontrol/kcmcss/index.docbook create mode 100644 doc/kcontrol/kcmfontinst/Makefile.am create mode 100644 doc/kcontrol/kcmfontinst/index.docbook create mode 100644 doc/kcontrol/kcmkonsole/Makefile.am create mode 100644 doc/kcontrol/kcmkonsole/index.docbook create mode 100644 doc/kcontrol/kcmlaunch/Makefile.am create mode 100644 doc/kcontrol/kcmlaunch/index.docbook create mode 100644 doc/kcontrol/kcmnotify/Makefile.am create mode 100644 doc/kcontrol/kcmnotify/index.docbook create mode 100644 doc/kcontrol/kcmsmserver/Makefile.am create mode 100644 doc/kcontrol/kcmsmserver/index.docbook create mode 100644 doc/kcontrol/kcmstyle/Makefile.am create mode 100644 doc/kcontrol/kcmstyle/index.docbook create mode 100644 doc/kcontrol/kcmtaskbar/Makefile.am create mode 100644 doc/kcontrol/kcmtaskbar/index.docbook create mode 100644 doc/kcontrol/kdm/Makefile.am create mode 100644 doc/kcontrol/kdm/index.docbook create mode 100644 doc/kcontrol/keyboard/Makefile.am create mode 100644 doc/kcontrol/keyboard/index.docbook create mode 100644 doc/kcontrol/keys/Makefile.am create mode 100644 doc/kcontrol/keys/index.docbook create mode 100644 doc/kcontrol/khtml/Makefile.am create mode 100644 doc/kcontrol/khtml/index.docbook create mode 100644 doc/kcontrol/khtml/nsplugin.docbook create mode 100644 doc/kcontrol/kwindecoration/Makefile.am create mode 100644 doc/kcontrol/kwindecoration/index.docbook create mode 100644 doc/kcontrol/language/Makefile.am create mode 100644 doc/kcontrol/language/index.docbook create mode 100644 doc/kcontrol/mouse/Makefile.am create mode 100644 doc/kcontrol/mouse/index.docbook create mode 100644 doc/kcontrol/netpref/Makefile.am create mode 100644 doc/kcontrol/netpref/index.docbook create mode 100644 doc/kcontrol/panel/Makefile.am create mode 100644 doc/kcontrol/panel/index.docbook create mode 100644 doc/kcontrol/panelappearance/Makefile.am create mode 100644 doc/kcontrol/panelappearance/index.docbook create mode 100644 doc/kcontrol/passwords/Makefile.am create mode 100644 doc/kcontrol/passwords/index.docbook create mode 100644 doc/kcontrol/performance/Makefile.am create mode 100644 doc/kcontrol/performance/index.docbook create mode 100644 doc/kcontrol/proxy/Makefile.am create mode 100644 doc/kcontrol/proxy/index.docbook create mode 100644 doc/kcontrol/proxy/socks.docbook create mode 100644 doc/kcontrol/screensaver/Makefile.am create mode 100644 doc/kcontrol/screensaver/index.docbook create mode 100644 doc/kcontrol/screenshot.png create mode 100644 doc/kcontrol/smb/Makefile.am create mode 100644 doc/kcontrol/smb/index.docbook create mode 100644 doc/kcontrol/spellchecking/Makefile.am create mode 100644 doc/kcontrol/spellchecking/index.docbook create mode 100644 doc/kcontrol/useragent/Makefile.am create mode 100644 doc/kcontrol/useragent/index.docbook create mode 100644 doc/kcontrol/windowmanagement/Makefile.am create mode 100644 doc/kcontrol/windowmanagement/index.docbook create mode 100644 doc/kdcop/Makefile.am create mode 100644 doc/kdcop/index.docbook create mode 100644 doc/kdebugdialog/Makefile.am create mode 100644 doc/kdebugdialog/index.docbook create mode 100644 doc/kdeprint/Makefile.am create mode 100644 doc/kdeprint/add-printer-wiz.docbook create mode 100644 doc/kdeprint/cr32-action-wizard.png create mode 100644 doc/kdeprint/cups-config.docbook create mode 100644 doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png create mode 100644 doc/kdeprint/cupsaddprinterwizard1.png create mode 100644 doc/kdeprint/cupsaddprinterwizard2_backendselection.png create mode 100644 doc/kdeprint/cupsaddprinterwizard3_networkscan.png create mode 100644 doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png create mode 100644 doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png create mode 100644 doc/kdeprint/cupsoptions.docbook create mode 100644 doc/kdeprint/cupsserverconfig_browse_relay_add_button.png create mode 100644 doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png create mode 100644 doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png create mode 100644 doc/kdeprint/cupsserverconfiguration11_browsingconnections.png create mode 100644 doc/kdeprint/cupsserverconfiguration11_browsingmasks.png create mode 100644 doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png create mode 100644 doc/kdeprint/cupsserverconfiguration14_browsingrelay.png create mode 100644 doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png create mode 100644 doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png create mode 100644 doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png create mode 100644 doc/kdeprint/cupsserverconfiguration1_welcome.png create mode 100644 doc/kdeprint/cupsserverconfiguration2_general.png create mode 100644 doc/kdeprint/cupsserverconfiguration3_logging.png create mode 100644 doc/kdeprint/cupsserverconfiguration4_directories.png create mode 100644 doc/kdeprint/cupsserverconfiguration5_HTTP.png create mode 100644 doc/kdeprint/cupsserverconfiguration6_encryption.png create mode 100644 doc/kdeprint/cupsserverconfiguration7_miscellanious.png create mode 100644 doc/kdeprint/cupsserverconfiguration8_networkgeneral.png create mode 100644 doc/kdeprint/cupsserverconfiguration9_networkclients.png create mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png create mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png create mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png create mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png create mode 100644 doc/kdeprint/cupsserverconfiguration_securityoverview.png create mode 100644 doc/kdeprint/extensions.docbook create mode 100644 doc/kdeprint/external-command.docbook create mode 100644 doc/kdeprint/final-word.docbook create mode 100644 doc/kdeprint/getting-started.docbook create mode 100644 doc/kdeprint/highlights.docbook create mode 100644 doc/kdeprint/index.docbook create mode 100644 doc/kdeprint/kcontrol-icon.png create mode 100644 doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png create mode 100644 doc/kdeprint/kcron_to_be_printed.png create mode 100644 doc/kdeprint/kdeprint-jobviewer.png create mode 100644 doc/kdeprint/kprinter-as-netscape-printcommand.png create mode 100644 doc/kdeprint/kprinter-kivio.png create mode 100644 doc/kdeprint/kprinter.png create mode 100644 doc/kdeprint/kprinter_called_from_run_command.png create mode 100644 doc/kdeprint/kprinter_with_kcron_developer_special.png create mode 100644 doc/kdeprint/lpd.docbook create mode 100644 doc/kdeprint/lpr-bsd.docbook create mode 100644 doc/kdeprint/lprng.docbook create mode 100644 doc/kdeprint/ps-boxes.png create mode 100644 doc/kdeprint/rlpr.docbook create mode 100644 doc/kdeprint/steinbruch_scaled.png create mode 100644 doc/kdeprint/tech-overview.docbook create mode 100644 doc/kdeprint/theory.docbook create mode 100644 doc/kdesu/Makefile.am create mode 100644 doc/kdesu/index.docbook create mode 100644 doc/kdesu/man-kdesu.1.docbook create mode 100644 doc/kdm/Makefile.am create mode 100644 doc/kdm/index.docbook create mode 100644 doc/kdm/kdmrc-ref.docbook create mode 100644 doc/kfind/Makefile.am create mode 100644 doc/kfind/index.docbook create mode 100644 doc/kfind/man-kfind.1.docbook create mode 100644 doc/khelpcenter/Makefile.am create mode 100644 doc/khelpcenter/background.png create mode 100644 doc/khelpcenter/bgtable.png create mode 100644 doc/khelpcenter/contact.docbook create mode 100644 doc/khelpcenter/help.docbook create mode 100644 doc/khelpcenter/index.docbook create mode 100644 doc/khelpcenter/kdelogo2.png create mode 100644 doc/khelpcenter/khelpcenter.png create mode 100644 doc/khelpcenter/konq.css create mode 100644 doc/khelpcenter/lines.png create mode 100644 doc/khelpcenter/lines2.png create mode 100644 doc/khelpcenter/pointers.png create mode 100644 doc/khelpcenter/shadow1.png create mode 100644 doc/khelpcenter/support.docbook create mode 100644 doc/khelpcenter/welcome.docbook create mode 100644 doc/khelpcenter/whatiskde.docbook create mode 100644 doc/kicker/Makefile.am create mode 100644 doc/kicker/bookmarks_icon.png create mode 100644 doc/kicker/desktop_icon.png create mode 100644 doc/kicker/index.docbook create mode 100644 doc/kicker/k_menu_icon.png create mode 100644 doc/kicker/man-appletproxy.1.docbook create mode 100644 doc/kicker/man-kicker.1.docbook create mode 100644 doc/kicker/printsys_icon.png create mode 100644 doc/kicker/quickbrowser_icon.png create mode 100644 doc/kicker/recent_docs_icon.png create mode 100644 doc/kicker/screenshot_left.png create mode 100644 doc/kicker/screenshot_right.png create mode 100644 doc/kicker/taskbar_group.png create mode 100644 doc/kicker/terminals_icon.png create mode 100644 doc/kicker/windowlist_icon.png create mode 100644 doc/kinfocenter/Makefile.am create mode 100644 doc/kinfocenter/cdinfo/Makefile.am create mode 100644 doc/kinfocenter/cdinfo/index.docbook create mode 100644 doc/kinfocenter/devices/Makefile.am create mode 100644 doc/kinfocenter/devices/index.docbook create mode 100644 doc/kinfocenter/dma/Makefile.am create mode 100644 doc/kinfocenter/dma/index.docbook create mode 100644 doc/kinfocenter/index.docbook create mode 100644 doc/kinfocenter/interrupts/Makefile.am create mode 100644 doc/kinfocenter/interrupts/index.docbook create mode 100644 doc/kinfocenter/ioports/Makefile.am create mode 100644 doc/kinfocenter/ioports/index.docbook create mode 100644 doc/kinfocenter/memory/Makefile.am create mode 100644 doc/kinfocenter/memory/index.docbook create mode 100644 doc/kinfocenter/nics/Makefile.am create mode 100644 doc/kinfocenter/nics/index.docbook create mode 100644 doc/kinfocenter/opengl/Makefile.am create mode 100644 doc/kinfocenter/opengl/index.docbook create mode 100644 doc/kinfocenter/partitions/Makefile.am create mode 100644 doc/kinfocenter/partitions/index.docbook create mode 100644 doc/kinfocenter/pci/Makefile.am create mode 100644 doc/kinfocenter/pci/index.docbook create mode 100644 doc/kinfocenter/pcmcia/Makefile.am create mode 100644 doc/kinfocenter/pcmcia/index.docbook create mode 100644 doc/kinfocenter/processor/Makefile.am create mode 100644 doc/kinfocenter/processor/index.docbook create mode 100644 doc/kinfocenter/protocols/Makefile.am create mode 100644 doc/kinfocenter/protocols/index.docbook create mode 100644 doc/kinfocenter/samba/Makefile.am create mode 100644 doc/kinfocenter/samba/index.docbook create mode 100644 doc/kinfocenter/scsi/Makefile.am create mode 100644 doc/kinfocenter/scsi/index.docbook create mode 100644 doc/kinfocenter/sound/Makefile.am create mode 100644 doc/kinfocenter/sound/index.docbook create mode 100644 doc/kinfocenter/usb/Makefile.am create mode 100644 doc/kinfocenter/usb/index.docbook create mode 100644 doc/kinfocenter/xserver/Makefile.am create mode 100644 doc/kinfocenter/xserver/index.docbook create mode 100644 doc/kioslave/Makefile.am create mode 100644 doc/kioslave/bzip.docbook create mode 100644 doc/kioslave/bzip2.docbook create mode 100644 doc/kioslave/cgi.docbook create mode 100644 doc/kioslave/data.docbook create mode 100644 doc/kioslave/file.docbook create mode 100644 doc/kioslave/finger.docbook create mode 100644 doc/kioslave/fish.docbook create mode 100644 doc/kioslave/floppy.docbook create mode 100644 doc/kioslave/ftp.docbook create mode 100644 doc/kioslave/gopher.docbook create mode 100644 doc/kioslave/gzip.docbook create mode 100644 doc/kioslave/help.docbook create mode 100644 doc/kioslave/http.docbook create mode 100644 doc/kioslave/https.docbook create mode 100644 doc/kioslave/imap.docbook create mode 100644 doc/kioslave/imaps.docbook create mode 100644 doc/kioslave/index.docbook create mode 100644 doc/kioslave/info.docbook create mode 100644 doc/kioslave/lan.docbook create mode 100644 doc/kioslave/ldap.docbook create mode 100644 doc/kioslave/mac.docbook create mode 100644 doc/kioslave/mailto.docbook create mode 100644 doc/kioslave/man.docbook create mode 100644 doc/kioslave/mrml.docbook create mode 100644 doc/kioslave/news.docbook create mode 100644 doc/kioslave/nfs.docbook create mode 100644 doc/kioslave/nntp.docbook create mode 100644 doc/kioslave/pop3.docbook create mode 100644 doc/kioslave/pop3s.docbook create mode 100644 doc/kioslave/print.docbook create mode 100644 doc/kioslave/rlan.docbook create mode 100644 doc/kioslave/rlogin.docbook create mode 100644 doc/kioslave/sftp.docbook create mode 100644 doc/kioslave/smb.docbook create mode 100644 doc/kioslave/smtp.docbook create mode 100644 doc/kioslave/tar.docbook create mode 100644 doc/kioslave/telnet.docbook create mode 100644 doc/kioslave/thumbnail.docbook create mode 100644 doc/kioslave/webdav.docbook create mode 100644 doc/kioslave/webdavs.docbook create mode 100644 doc/klipper/Makefile.am create mode 100644 doc/klipper/index.docbook create mode 100644 doc/klipper/screenshot.png create mode 100644 doc/kmenuedit/Makefile.am create mode 100644 doc/kmenuedit/done.png create mode 100644 doc/kmenuedit/index.docbook create mode 100644 doc/kmenuedit/itemname.png create mode 100644 doc/kmenuedit/kmenueditmain.png create mode 100644 doc/kmenuedit/new.png create mode 100644 doc/kmenuedit/selecticon.png create mode 100644 doc/kmenuedit/selectinternet.png create mode 100644 doc/knetattach/Makefile.am create mode 100644 doc/knetattach/index.docbook create mode 100644 doc/knetattach/screenshot.png create mode 100644 doc/knetattach/screenshot1.png create mode 100644 doc/knetattach/screenshot2.png create mode 100644 doc/knetattach/screenshot3.png create mode 100644 doc/knetattach/screenshot4.png create mode 100644 doc/kompmgr/Makefile.am create mode 100644 doc/kompmgr/index.docbook create mode 100644 doc/konqueror/Makefile.am create mode 100644 doc/konqueror/basics.docbook create mode 100644 doc/konqueror/bookmarks.docbook create mode 100644 doc/konqueror/browser.docbook create mode 100644 doc/konqueror/cmndline.png create mode 100644 doc/konqueror/commands.docbook create mode 100644 doc/konqueror/config.docbook create mode 100644 doc/konqueror/credits.docbook create mode 100644 doc/konqueror/dirtree.png create mode 100644 doc/konqueror/dragdrop.png create mode 100644 doc/konqueror/faq.docbook create mode 100644 doc/konqueror/filemanager.docbook create mode 100644 doc/konqueror/index.docbook create mode 100644 doc/konqueror/introduction.docbook create mode 100644 doc/konqueror/konqorg.png create mode 100644 doc/konqueror/man-kbookmarkmerger.1.docbook create mode 100644 doc/konqueror/parts.png create mode 100644 doc/konqueror/path-complete.docbook create mode 100644 doc/konqueror/plugins.docbook create mode 100644 doc/konqueror/save-settings.docbook create mode 100644 doc/konqueror/shortcut1.png create mode 100644 doc/konqueror/shortcut2.png create mode 100644 doc/konqueror/sidebar.docbook create mode 100644 doc/konsole/Makefile.am create mode 100644 doc/konsole/index.docbook create mode 100644 doc/konsole/konsole.png create mode 100644 doc/konsole/tabbar.png create mode 100644 doc/kpager/Makefile.am create mode 100644 doc/kpager/index.docbook create mode 100644 doc/kpager/screenshot.png create mode 100644 doc/kpager/settings.png create mode 100644 doc/ksplashml/Makefile.am create mode 100644 doc/ksplashml/index.docbook create mode 100644 doc/ksysguard/Makefile.am create mode 100644 doc/ksysguard/index.docbook create mode 100644 doc/kwrite/Makefile.am create mode 100644 doc/kwrite/index.docbook create mode 100644 doc/kxkb/Makefile.am create mode 100644 doc/kxkb/index.docbook create mode 100644 doc/kxkb/layout.png create mode 100644 doc/kxkb/switching.png create mode 100644 doc/kxkb/xkb.png create mode 100644 doc/quickstart/Makefile.am create mode 100644 doc/quickstart/index.docbook create mode 100644 doc/userguide/Makefile.am create mode 100644 doc/userguide/a-window.png create mode 100644 doc/userguide/accessibility.docbook create mode 100644 doc/userguide/amarok-icon.png create mode 100644 doc/userguide/amarok.png create mode 100644 doc/userguide/base-kde-applications.docbook create mode 100644 doc/userguide/browser-fine-tuning.docbook create mode 100644 doc/userguide/burning-cds.docbook create mode 100644 doc/userguide/control-center.docbook create mode 100644 doc/userguide/creating-graphics.docbook create mode 100644 doc/userguide/credits-and-license.docbook create mode 100644 doc/userguide/customizing-desktop.docbook create mode 100644 doc/userguide/desktop.png create mode 100644 doc/userguide/email.docbook create mode 100644 doc/userguide/extragear-applications.docbook create mode 100644 doc/userguide/file-sharing.docbook create mode 100644 doc/userguide/font-installation.docbook create mode 100644 doc/userguide/getting-help.docbook create mode 100644 doc/userguide/glossary.docbook create mode 100644 doc/userguide/groupware-kontact.docbook create mode 100644 doc/userguide/index.docbook create mode 100644 doc/userguide/internet-shortcuts.docbook create mode 100644 doc/userguide/juk-icon.png create mode 100644 doc/userguide/juk.png create mode 100644 doc/userguide/kaboodle-icon.png create mode 100644 doc/userguide/kaboodle.png create mode 100644 doc/userguide/kcalc-systray.png create mode 100644 doc/userguide/kcontrol.png create mode 100644 doc/userguide/kde-as-root.docbook create mode 100644 doc/userguide/kde-edutainment.docbook create mode 100644 doc/userguide/kde-for-admins.docbook create mode 100644 doc/userguide/kde-office.docbook create mode 100644 doc/userguide/kmag.png create mode 100644 doc/userguide/kmousetool.png create mode 100644 doc/userguide/kmouth.png create mode 100644 doc/userguide/kmouth2.png create mode 100644 doc/userguide/kmouth3.png create mode 100644 doc/userguide/knode-identity.png create mode 100644 doc/userguide/knode-mail-account.png create mode 100644 doc/userguide/knode-news-account.png create mode 100644 doc/userguide/knode-start.png create mode 100644 doc/userguide/konq-sidebar.png create mode 100644 doc/userguide/konq-simple.png create mode 100644 doc/userguide/konsole-intro.docbook create mode 100644 doc/userguide/kopete.png create mode 100644 doc/userguide/kppp-dialer-tab.png create mode 100644 doc/userguide/kppp-wizard.png create mode 100644 doc/userguide/messaging-intro.docbook create mode 100644 doc/userguide/migrator-applications.docbook create mode 100644 doc/userguide/migrator-dictionary.docbook create mode 100644 doc/userguide/net-connection-setup.docbook create mode 100644 doc/userguide/networking-with-windows.docbook create mode 100644 doc/userguide/noatun-icon.png create mode 100644 doc/userguide/noatun.png create mode 100644 doc/userguide/oggfolder.png create mode 100644 doc/userguide/open-file-dialog.png create mode 100644 doc/userguide/panel-and-desktop.docbook create mode 100644 doc/userguide/pdf-files.docbook create mode 100644 doc/userguide/playing-audiocds.docbook create mode 100644 doc/userguide/playing-movies.docbook create mode 100644 doc/userguide/playing-music.docbook create mode 100644 doc/userguide/printer-setup.docbook create mode 100644 doc/userguide/printing-from-apps.docbook create mode 100644 doc/userguide/programs-and-documents.docbook create mode 100644 doc/userguide/programs-controlling.docbook create mode 100644 doc/userguide/removable-disks.docbook create mode 100644 doc/userguide/rip.png create mode 100644 doc/userguide/ripsettings.png create mode 100644 doc/userguide/screen-captures.docbook create mode 100644 doc/userguide/services.png create mode 100644 doc/userguide/shared-sessions.docbook create mode 100644 doc/userguide/splash-screen.png create mode 100644 doc/userguide/standard-menu-entries.docbook create mode 100644 doc/userguide/switching-sessions.docbook create mode 100644 doc/userguide/the-filemanager.docbook create mode 100644 doc/userguide/titlebar-menu.png create mode 100644 doc/userguide/troubleshooting-network-x.docbook create mode 100644 doc/userguide/troubleshooting-no-open.docbook create mode 100644 doc/userguide/under-the-hood.docbook create mode 100644 doc/userguide/usenet.docbook create mode 100644 doc/userguide/where-next.docbook create mode 100644 doc/userguide/windows-how-to.docbook create mode 100644 doc/userguide/your-kde-account.docbook create mode 100644 doc/visualdict/Makefile.am create mode 100644 doc/visualdict/index.docbook create mode 100644 doc/visualdict/pict1.png create mode 100644 doc/visualdict/pict10.png create mode 100644 doc/visualdict/pict11.png create mode 100644 doc/visualdict/pict12.png create mode 100644 doc/visualdict/pict13.png create mode 100644 doc/visualdict/pict14.png create mode 100644 doc/visualdict/pict15.png create mode 100644 doc/visualdict/pict16.png create mode 100644 doc/visualdict/pict17.png create mode 100644 doc/visualdict/pict18.png create mode 100644 doc/visualdict/pict19.png create mode 100644 doc/visualdict/pict2.png create mode 100644 doc/visualdict/pict20.png create mode 100644 doc/visualdict/pict21.png create mode 100644 doc/visualdict/pict22.png create mode 100644 doc/visualdict/pict23.png create mode 100644 doc/visualdict/pict3.png create mode 100644 doc/visualdict/pict4.png create mode 100644 doc/visualdict/pict5.png create mode 100644 doc/visualdict/pict6.png create mode 100644 doc/visualdict/pict7.png create mode 100644 doc/visualdict/pict8.png create mode 100644 doc/visualdict/pict9.png create mode 100644 drkonqi/AUTHORS create mode 100644 drkonqi/LICENSE create mode 100644 drkonqi/Makefile.am create mode 100644 drkonqi/README create mode 100644 drkonqi/backtrace.cpp create mode 100644 drkonqi/backtrace.h create mode 100644 drkonqi/crashtest.cpp create mode 100644 drkonqi/debugger.cpp create mode 100644 drkonqi/debugger.h create mode 100644 drkonqi/debuggers/Makefile.am create mode 100644 drkonqi/debuggers/gdbrc create mode 100644 drkonqi/drbugreport.cpp create mode 100644 drkonqi/drbugreport.h create mode 100644 drkonqi/krashconf.cpp create mode 100644 drkonqi/krashconf.h create mode 100644 drkonqi/krashdcopinterface.h create mode 100644 drkonqi/main.cpp create mode 100644 drkonqi/pics/Makefile.am create mode 100644 drkonqi/pics/konqi.png create mode 100644 drkonqi/presets/Makefile.am create mode 100644 drkonqi/presets/developerrc create mode 100644 drkonqi/presets/enduserrc create mode 100644 drkonqi/toplevel.cpp create mode 100644 drkonqi/toplevel.h create mode 100644 kappfinder/Makefile.am create mode 100644 kappfinder/README.apps create mode 100644 kappfinder/apps/Development/Forte.desktop create mode 100644 kappfinder/apps/Development/Makefile.am create mode 100644 kappfinder/apps/Development/assistant.desktop create mode 100644 kappfinder/apps/Development/ddd.desktop create mode 100644 kappfinder/apps/Development/designer.desktop create mode 100644 kappfinder/apps/Development/dlgedit.desktop create mode 100644 kappfinder/apps/Development/eclipse.desktop create mode 100644 kappfinder/apps/Development/fdesign.desktop create mode 100644 kappfinder/apps/Development/j2mewtk.desktop create mode 100644 kappfinder/apps/Development/linguist.desktop create mode 100644 kappfinder/apps/Development/pose.desktop create mode 100644 kappfinder/apps/Development/sced.desktop create mode 100644 kappfinder/apps/Games/Arcade/ClanBomber.desktop create mode 100644 kappfinder/apps/Games/Arcade/FrozenBubble.desktop create mode 100644 kappfinder/apps/Games/Arcade/Gnibbles.desktop create mode 100644 kappfinder/apps/Games/Arcade/GnobotsII.desktop create mode 100644 kappfinder/apps/Games/Arcade/Makefile.am create mode 100644 kappfinder/apps/Games/Arcade/Mures.desktop create mode 100644 kappfinder/apps/Games/Arcade/SuperMethaneBrothers.desktop create mode 100644 kappfinder/apps/Games/Arcade/Trophy.desktop create mode 100644 kappfinder/apps/Games/Arcade/TuxRacer.desktop create mode 100644 kappfinder/apps/Games/Arcade/XKobo.desktop create mode 100644 kappfinder/apps/Games/Arcade/XSoldier.desktop create mode 100644 kappfinder/apps/Games/Arcade/alephone-nogl.desktop create mode 100644 kappfinder/apps/Games/Arcade/alephone.desktop create mode 100644 kappfinder/apps/Games/Arcade/battalion.desktop create mode 100644 kappfinder/apps/Games/Arcade/battleball.desktop create mode 100644 kappfinder/apps/Games/Arcade/cxhextris.desktop create mode 100644 kappfinder/apps/Games/Arcade/rocksndiamonds.desktop create mode 100644 kappfinder/apps/Games/Arcade/scavenger.desktop create mode 100644 kappfinder/apps/Games/Board/Gataxx.desktop create mode 100644 kappfinder/apps/Games/Board/Gchess.desktop create mode 100644 kappfinder/apps/Games/Board/Glines.desktop create mode 100644 kappfinder/apps/Games/Board/Gmahjongg.desktop create mode 100644 kappfinder/apps/Games/Board/Gmines.desktop create mode 100644 kappfinder/apps/Games/Board/Gnotravex.desktop create mode 100644 kappfinder/apps/Games/Board/Gnotski.desktop create mode 100644 kappfinder/apps/Games/Board/Gstones.desktop create mode 100644 kappfinder/apps/Games/Board/Iagno.desktop create mode 100644 kappfinder/apps/Games/Board/Makefile.am create mode 100644 kappfinder/apps/Games/Board/SameGnome.desktop create mode 100644 kappfinder/apps/Games/Board/Xgammon.desktop create mode 100644 kappfinder/apps/Games/Board/xboard.desktop create mode 100644 kappfinder/apps/Games/Card/AisleRiot.desktop create mode 100644 kappfinder/apps/Games/Card/FreeCell.desktop create mode 100644 kappfinder/apps/Games/Card/Makefile.am create mode 100644 kappfinder/apps/Games/Card/PySol.desktop create mode 100644 kappfinder/apps/Games/Card/XPat2.desktop create mode 100644 kappfinder/apps/Games/Clanbomber.desktop create mode 100644 kappfinder/apps/Games/Emulators/Makefile.am create mode 100644 kappfinder/apps/Games/Emulators/cmail.desktop create mode 100644 kappfinder/apps/Games/Emulators/qmamecat.desktop create mode 100644 kappfinder/apps/Games/GTali.desktop create mode 100644 kappfinder/apps/Games/Makefile.am create mode 100644 kappfinder/apps/Games/Roguelikes/Makefile.am create mode 100644 kappfinder/apps/Games/Roguelikes/angband.desktop create mode 100644 kappfinder/apps/Games/Roguelikes/moria.desktop create mode 100644 kappfinder/apps/Games/Roguelikes/nethack.desktop create mode 100644 kappfinder/apps/Games/Roguelikes/rogue.desktop create mode 100644 kappfinder/apps/Games/Roguelikes/tome.desktop create mode 100644 kappfinder/apps/Games/Roguelikes/zangband.desktop create mode 100644 kappfinder/apps/Games/TacticStrategy/Makefile.am create mode 100644 kappfinder/apps/Games/TacticStrategy/freeciv.desktop create mode 100644 kappfinder/apps/Games/TacticStrategy/freecivserver.desktop create mode 100644 kappfinder/apps/Games/TacticStrategy/xscorch.desktop create mode 100644 kappfinder/apps/Games/Toys/Makefile.am create mode 100644 kappfinder/apps/Games/Toys/xeyes.desktop create mode 100644 kappfinder/apps/Games/Toys/xpinguin.desktop create mode 100644 kappfinder/apps/Games/defendguin.desktop create mode 100644 kappfinder/apps/Games/penguin-command.desktop create mode 100644 kappfinder/apps/Games/xshipwars.desktop create mode 100644 kappfinder/apps/Graphics/ElectricEyes.desktop create mode 100644 kappfinder/apps/Graphics/GPhoto.desktop create mode 100644 kappfinder/apps/Graphics/GnomeColorSelector.desktop create mode 100644 kappfinder/apps/Graphics/GnomeIconEditor.desktop create mode 100644 kappfinder/apps/Graphics/Gqview.desktop create mode 100644 kappfinder/apps/Graphics/Makefile.am create mode 100644 kappfinder/apps/Graphics/Sketch.desktop create mode 100644 kappfinder/apps/Graphics/Xpcd.desktop create mode 100644 kappfinder/apps/Graphics/Xwpick.desktop create mode 100644 kappfinder/apps/Graphics/bitmap.desktop create mode 100644 kappfinder/apps/Graphics/blender.desktop create mode 100644 kappfinder/apps/Graphics/ghostview.desktop create mode 100644 kappfinder/apps/Graphics/gimp.desktop create mode 100644 kappfinder/apps/Graphics/gv.desktop create mode 100644 kappfinder/apps/Graphics/inkscape.desktop create mode 100644 kappfinder/apps/Graphics/sodipodi.desktop create mode 100644 kappfinder/apps/Graphics/tgif.desktop create mode 100644 kappfinder/apps/Graphics/xdvi.desktop create mode 100644 kappfinder/apps/Graphics/xfig.desktop create mode 100644 kappfinder/apps/Graphics/xpaint.desktop create mode 100644 kappfinder/apps/Graphics/xv.desktop create mode 100644 kappfinder/apps/Internet/BlueFish.desktop create mode 100644 kappfinder/apps/Internet/Dpsftp.desktop create mode 100644 kappfinder/apps/Internet/DrakSync.desktop create mode 100644 kappfinder/apps/Internet/Evolution.desktop create mode 100644 kappfinder/apps/Internet/Faces.desktop create mode 100644 kappfinder/apps/Internet/Fetchmailconf.desktop create mode 100644 kappfinder/apps/Internet/Gabber.desktop create mode 100644 kappfinder/apps/Internet/Galeon.desktop create mode 100644 kappfinder/apps/Internet/GnomeICU.desktop create mode 100644 kappfinder/apps/Internet/Makefile.am create mode 100644 kappfinder/apps/Internet/Netscapemessenger.desktop create mode 100644 kappfinder/apps/Internet/Nmapfe.desktop create mode 100644 kappfinder/apps/Internet/Pan.desktop create mode 100644 kappfinder/apps/Internet/Sylpheed.desktop create mode 100644 kappfinder/apps/Internet/Terminal/Links.desktop create mode 100644 kappfinder/apps/Internet/Terminal/Lynx.desktop create mode 100644 kappfinder/apps/Internet/Terminal/Makefile.am create mode 100644 kappfinder/apps/Internet/Terminal/btdownloadcurses.desktop create mode 100644 kappfinder/apps/Internet/Terminal/lftp.desktop create mode 100644 kappfinder/apps/Internet/Terminal/mutt.desktop create mode 100644 kappfinder/apps/Internet/Terminal/ncftp.desktop create mode 100644 kappfinder/apps/Internet/Terminal/pine.desktop create mode 100644 kappfinder/apps/Internet/Terminal/silc.desktop create mode 100644 kappfinder/apps/Internet/Terminal/slrn.desktop create mode 100644 kappfinder/apps/Internet/Terminal/w3m.desktop create mode 100644 kappfinder/apps/Internet/arena.desktop create mode 100644 kappfinder/apps/Internet/balsa.desktop create mode 100644 kappfinder/apps/Internet/btdownloadgui.desktop create mode 100644 kappfinder/apps/Internet/coolmail.desktop create mode 100644 kappfinder/apps/Internet/dc_gui.desktop create mode 100644 kappfinder/apps/Internet/ed2k_gui.desktop create mode 100644 kappfinder/apps/Internet/epiphany.desktop create mode 100644 kappfinder/apps/Internet/ethereal.desktop create mode 100644 kappfinder/apps/Internet/gFTP.desktop create mode 100644 kappfinder/apps/Internet/gaim.desktop create mode 100644 kappfinder/apps/Internet/gnomemeeting.desktop create mode 100644 kappfinder/apps/Internet/gnometalk.desktop create mode 100644 kappfinder/apps/Internet/gtelnet.desktop create mode 100644 kappfinder/apps/Internet/ickle.desktop create mode 100644 kappfinder/apps/Internet/javaws.desktop create mode 100644 kappfinder/apps/Internet/knews.desktop create mode 100644 kappfinder/apps/Internet/licq.desktop create mode 100644 kappfinder/apps/Internet/mldonkey_gui.desktop create mode 100644 kappfinder/apps/Internet/mozilla-firefox.desktop create mode 100644 kappfinder/apps/Internet/mozilla-thunderbird.desktop create mode 100644 kappfinder/apps/Internet/mozilla.desktop create mode 100644 kappfinder/apps/Internet/netscape.desktop create mode 100644 kappfinder/apps/Internet/netscape6.desktop create mode 100644 kappfinder/apps/Internet/opera.desktop create mode 100644 kappfinder/apps/Internet/wireshark.desktop create mode 100644 kappfinder/apps/Internet/xbiff.desktop create mode 100644 kappfinder/apps/Internet/xchat.desktop create mode 100644 kappfinder/apps/Internet/xfmail.desktop create mode 100644 kappfinder/apps/Internet/xftp.desktop create mode 100644 kappfinder/apps/Makefile.am create mode 100644 kappfinder/apps/Multimedia/Aumix.desktop create mode 100644 kappfinder/apps/Multimedia/Grip.desktop create mode 100644 kappfinder/apps/Multimedia/MP3info.desktop create mode 100644 kappfinder/apps/Multimedia/Makefile.am create mode 100644 kappfinder/apps/Multimedia/XMovie.desktop create mode 100644 kappfinder/apps/Multimedia/alevt.desktop create mode 100644 kappfinder/apps/Multimedia/alsamixergui.desktop create mode 100644 kappfinder/apps/Multimedia/audacity.desktop create mode 100644 kappfinder/apps/Multimedia/aviplay.desktop create mode 100644 kappfinder/apps/Multimedia/bcast2000.desktop create mode 100644 kappfinder/apps/Multimedia/enjoympeg.desktop create mode 100644 kappfinder/apps/Multimedia/gtv.desktop create mode 100644 kappfinder/apps/Multimedia/jazz.desktop create mode 100644 kappfinder/apps/Multimedia/mplayer.desktop create mode 100644 kappfinder/apps/Multimedia/mtv.desktop create mode 100644 kappfinder/apps/Multimedia/ogle.desktop create mode 100644 kappfinder/apps/Multimedia/oqtplayer.desktop create mode 100644 kappfinder/apps/Multimedia/realplayer.desktop create mode 100644 kappfinder/apps/Multimedia/rezound.desktop create mode 100644 kappfinder/apps/Multimedia/slab.desktop create mode 100644 kappfinder/apps/Multimedia/sweep.desktop create mode 100644 kappfinder/apps/Multimedia/xawtv.desktop create mode 100644 kappfinder/apps/Multimedia/xcam.desktop create mode 100644 kappfinder/apps/Multimedia/xine.desktop create mode 100644 kappfinder/apps/Multimedia/xmms-enqueue.desktop create mode 100644 kappfinder/apps/Multimedia/xmms.desktop create mode 100644 kappfinder/apps/Office/Applix.desktop create mode 100644 kappfinder/apps/Office/Dia.desktop create mode 100644 kappfinder/apps/Office/Gnome-Cal.desktop create mode 100644 kappfinder/apps/Office/Gnome-Card.desktop create mode 100644 kappfinder/apps/Office/GnomeTimeTracker.desktop create mode 100644 kappfinder/apps/Office/Gnumeric.desktop create mode 100644 kappfinder/apps/Office/Guppi.desktop create mode 100644 kappfinder/apps/Office/Ical.desktop create mode 100644 kappfinder/apps/Office/Makefile.am create mode 100644 kappfinder/apps/Office/WordPerfect.desktop create mode 100644 kappfinder/apps/Office/WordPerfect2000.desktop create mode 100644 kappfinder/apps/Office/XAcc.desktop create mode 100644 kappfinder/apps/Office/XsLite.desktop create mode 100644 kappfinder/apps/Office/abiword.desktop create mode 100644 kappfinder/apps/Office/acroread.desktop create mode 100644 kappfinder/apps/Office/gnucash.desktop create mode 100644 kappfinder/apps/Office/lyx.desktop create mode 100644 kappfinder/apps/Office/mrproject.desktop create mode 100644 kappfinder/apps/Office/netscapeaddressbook.desktop create mode 100644 kappfinder/apps/Office/plan.desktop create mode 100644 kappfinder/apps/Office/pybliographic.desktop create mode 100644 kappfinder/apps/Office/scribus.desktop create mode 100644 kappfinder/apps/Office/xpdf.desktop create mode 100644 kappfinder/apps/System/Makefile.am create mode 100644 kappfinder/apps/System/Terminal/Makefile.am create mode 100644 kappfinder/apps/System/Terminal/aterm.desktop create mode 100644 kappfinder/apps/System/Terminal/procinfo.desktop create mode 100644 kappfinder/apps/System/Terminal/rxvt.desktop create mode 100644 kappfinder/apps/System/Terminal/vmstat.desktop create mode 100644 kappfinder/apps/System/citrix_ica.desktop create mode 100644 kappfinder/apps/System/editres.desktop create mode 100644 kappfinder/apps/System/sam.desktop create mode 100644 kappfinder/apps/System/wine.desktop create mode 100644 kappfinder/apps/System/xosview.desktop create mode 100644 kappfinder/apps/Utilities/Editors/Makefile.am create mode 100644 kappfinder/apps/Utilities/Editors/emacs.desktop create mode 100644 kappfinder/apps/Utilities/Editors/gedit.desktop create mode 100644 kappfinder/apps/Utilities/Editors/gvim.desktop create mode 100644 kappfinder/apps/Utilities/Editors/lemacs.desktop create mode 100644 kappfinder/apps/Utilities/Editors/nano.desktop create mode 100644 kappfinder/apps/Utilities/Editors/nedit.desktop create mode 100644 kappfinder/apps/Utilities/Editors/pico.desktop create mode 100644 kappfinder/apps/Utilities/Editors/xedit.desktop create mode 100644 kappfinder/apps/Utilities/Editors/xemacs.desktop create mode 100644 kappfinder/apps/Utilities/GKrellM.desktop create mode 100644 kappfinder/apps/Utilities/GnomeWho.desktop create mode 100644 kappfinder/apps/Utilities/Makefile.am create mode 100644 kappfinder/apps/Utilities/SystemInfo.desktop create mode 100644 kappfinder/apps/Utilities/SystemLogViewer.desktop create mode 100644 kappfinder/apps/Utilities/calctool.desktop create mode 100644 kappfinder/apps/Utilities/e-notes.desktop create mode 100644 kappfinder/apps/Utilities/oclock.desktop create mode 100644 kappfinder/apps/Utilities/xgnokii.desktop create mode 100644 kappfinder/apps/Utilities/xutils/Makefile.am create mode 100644 kappfinder/apps/Utilities/xutils/Xkill.desktop create mode 100644 kappfinder/apps/Utilities/xutils/Xrefresh.desktop create mode 100644 kappfinder/apps/Utilities/xutils/Xtraceroute.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xcalc.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xclipboard.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xclock.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xconsole.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xload.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xmag.desktop create mode 100644 kappfinder/apps/Utilities/xutils/xterm.desktop create mode 100644 kappfinder/common.cpp create mode 100644 kappfinder/common.h create mode 100644 kappfinder/configure.in.in create mode 100644 kappfinder/hi128-app-kappfinder.png create mode 100644 kappfinder/hi16-app-kappfinder.png create mode 100644 kappfinder/hi22-app-kappfinder.png create mode 100644 kappfinder/hi32-app-kappfinder.png create mode 100644 kappfinder/hi48-app-kappfinder.png create mode 100644 kappfinder/hi64-app-kappfinder.png create mode 100644 kappfinder/kappfinder.desktop create mode 100644 kappfinder/main.cpp create mode 100644 kappfinder/main_install.cpp create mode 100644 kappfinder/toplevel.cpp create mode 100644 kappfinder/toplevel.h create mode 100644 kappfinder/uninstall.desktop create mode 100644 kate/AUTHORS create mode 100644 kate/COPYING.LIB create mode 100644 kate/ChangeLog create mode 100644 kate/DESIGN create mode 100644 kate/Mainpage.dox create mode 100644 kate/Makefile.am create mode 100644 kate/NEWS create mode 100644 kate/README create mode 100644 kate/TODO create mode 100644 kate/app/Makefile.am create mode 100644 kate/app/kateapp.cpp create mode 100644 kate/app/kateapp.h create mode 100644 kate/app/kateappIface.cpp create mode 100644 kate/app/kateappIface.h create mode 100644 kate/app/kateconfigdialog.cpp create mode 100644 kate/app/kateconfigdialog.h create mode 100644 kate/app/kateconfigplugindialogpage.cpp create mode 100644 kate/app/kateconfigplugindialogpage.h create mode 100644 kate/app/kateconsole.cpp create mode 100644 kate/app/kateconsole.h create mode 100644 kate/app/katedocmanager.cpp create mode 100644 kate/app/katedocmanager.h create mode 100644 kate/app/katedocmanageriface.cpp create mode 100644 kate/app/katedocmanageriface.h create mode 100644 kate/app/kateexternaltools.cpp create mode 100644 kate/app/kateexternaltools.h create mode 100644 kate/app/katefilelist.cpp create mode 100644 kate/app/katefilelist.h create mode 100644 kate/app/katefileselector.cpp create mode 100644 kate/app/katefileselector.h create mode 100644 kate/app/kategrepdialog.cpp create mode 100644 kate/app/kategrepdialog.h create mode 100644 kate/app/katemailfilesdialog.cpp create mode 100644 kate/app/katemailfilesdialog.h create mode 100644 kate/app/katemain.cpp create mode 100644 kate/app/katemain.h create mode 100644 kate/app/katemainwindow.cpp create mode 100644 kate/app/katemainwindow.h create mode 100644 kate/app/katemainwindowiface.cpp create mode 100644 kate/app/katemainwindowiface.h create mode 100644 kate/app/katemdi.cpp create mode 100644 kate/app/katemdi.h create mode 100644 kate/app/katemwmodonhddialog.cpp create mode 100644 kate/app/katemwmodonhddialog.h create mode 100644 kate/app/katepluginmanager.cpp create mode 100644 kate/app/katepluginmanager.h create mode 100644 kate/app/katesavemodifieddialog.cpp create mode 100644 kate/app/katesavemodifieddialog.h create mode 100644 kate/app/katesession.cpp create mode 100644 kate/app/katesession.h create mode 100644 kate/app/katetabwidget.cpp create mode 100644 kate/app/katetabwidget.h create mode 100644 kate/app/kateviewmanager.cpp create mode 100644 kate/app/kateviewmanager.h create mode 100644 kate/app/kateviewspace.cpp create mode 100644 kate/app/kateviewspace.h create mode 100644 kate/app/kateviewspacecontainer.cpp create mode 100644 kate/app/kateviewspacecontainer.h create mode 100644 kate/app/kbookmarkhandler.cpp create mode 100644 kate/app/kbookmarkhandler.h create mode 100644 kate/app/kwritemain.cpp create mode 100644 kate/app/kwritemain.h create mode 100644 kate/data/Makefile.am create mode 100644 kate/data/externaltools create mode 100644 kate/data/kate-2.4.upd create mode 100644 kate/data/kate.desktop create mode 100644 kate/data/kateplugin.desktop create mode 100644 kate/data/katerc create mode 100644 kate/data/kateui.rc create mode 100644 kate/data/kwrite.desktop create mode 100644 kate/data/kwriteui.rc create mode 100644 kate/data/tips create mode 100644 kate/interfaces/Makefile.am create mode 100644 kate/interfaces/application.cpp create mode 100644 kate/interfaces/application.h create mode 100644 kate/interfaces/documentmanager.cpp create mode 100644 kate/interfaces/documentmanager.h create mode 100644 kate/interfaces/mainwindow.cpp create mode 100644 kate/interfaces/mainwindow.h create mode 100644 kate/interfaces/plugin.cpp create mode 100644 kate/interfaces/plugin.h create mode 100644 kate/interfaces/pluginconfiginterface.cpp create mode 100644 kate/interfaces/pluginconfiginterface.h create mode 100644 kate/interfaces/pluginconfiginterfaceextension.cpp create mode 100644 kate/interfaces/pluginconfiginterfaceextension.h create mode 100644 kate/interfaces/pluginmanager.cpp create mode 100644 kate/interfaces/pluginmanager.h create mode 100644 kate/interfaces/toolviewmanager.cpp create mode 100644 kate/interfaces/toolviewmanager.h create mode 100644 kate/interfaces/viewmanager.cpp create mode 100644 kate/interfaces/viewmanager.h create mode 100644 kate/pics/Makefile.am create mode 100644 kate/pics/actions/Makefile.am create mode 100644 kate/pics/actions/cr16-action-curfiledir.png create mode 100644 kate/pics/actions/cr16-action-highlighting.png create mode 100644 kate/pics/actions/cr16-action-modified.png create mode 100644 kate/pics/actions/cr16-action-modmod.png create mode 100644 kate/pics/actions/cr16-action-modonhd.png create mode 100644 kate/pics/actions/cr16-action-null.png create mode 100644 kate/pics/actions/cr32-action-highlighting.png create mode 100644 kate/pics/actions/lo16-action-curfiledir.png create mode 100644 kate/pics/actions/lo16-action-indent.png create mode 100644 kate/pics/actions/lo16-action-modified.png create mode 100644 kate/pics/actions/lo16-action-modmod.png create mode 100644 kate/pics/actions/lo16-action-modonhd.png create mode 100644 kate/pics/actions/lo16-action-null.png create mode 100644 kate/pics/actions/lo16-action-unindent.png create mode 100644 kate/pics/actions/lo22-action-indent.png create mode 100644 kate/pics/actions/lo22-action-unindent.png create mode 100644 kate/pics/hi128-app-kate.png create mode 100644 kate/pics/hi128-app-kwrite.png create mode 100644 kate/pics/hi16-app-kate.png create mode 100644 kate/pics/hi16-app-kwrite.png create mode 100644 kate/pics/hi22-app-kate.png create mode 100644 kate/pics/hi22-app-kwrite.png create mode 100644 kate/pics/hi32-app-kate.png create mode 100644 kate/pics/hi32-app-kwrite.png create mode 100644 kate/pics/hi48-app-kate.png create mode 100644 kate/pics/hi48-app-kwrite.png create mode 100644 kate/pics/hi64-app-kate.png create mode 100644 kate/pics/hi64-app-kwrite.png create mode 100644 kate/pics/hisc-app-kate2.svgz create mode 100644 kate/pics/hisc-app-kwrite2.svgz create mode 100644 kate/pics/sessionchooser.png create mode 100644 kate/pics/sessionchooser.xcf create mode 100644 kate/utils/Makefile.am create mode 100644 kate/utils/README create mode 100644 kate/utils/dockviewbase.cpp create mode 100644 kate/utils/dockviewbase.h create mode 100644 kate/utils/listboxview.cpp create mode 100644 kate/utils/listboxview.h create mode 100644 kate/utils/messageview.cpp create mode 100644 kate/utils/messageview.h create mode 100644 kcheckpass/Makefile.am create mode 100644 kcheckpass/README create mode 100644 kcheckpass/checkpass_aix.c create mode 100644 kcheckpass/checkpass_etcpasswd.c create mode 100644 kcheckpass/checkpass_osfc2passwd.c create mode 100644 kcheckpass/checkpass_pam.c create mode 100644 kcheckpass/checkpass_shadow.c create mode 100644 kcheckpass/kcheckpass.c create mode 100644 kcheckpass/kcheckpass.h create mode 100644 kcminit/Makefile.am create mode 100644 kcminit/main.cpp create mode 100644 kcminit/main.h create mode 100644 kcontrol/Makefile.am create mode 100644 kcontrol/TODO create mode 100644 kcontrol/access/Makefile.am create mode 100644 kcontrol/access/configure.in.in create mode 100644 kcontrol/access/eventsrc create mode 100644 kcontrol/access/kaccess.cpp create mode 100644 kcontrol/access/kaccess.desktop create mode 100644 kcontrol/access/kaccess.h create mode 100644 kcontrol/access/kcmaccess.cpp create mode 100644 kcontrol/access/kcmaccess.desktop create mode 100644 kcontrol/access/kcmaccess.h create mode 100644 kcontrol/access/main.cpp create mode 100644 kcontrol/accessibility/Makefile.am create mode 100644 kcontrol/accessibility/accessibility.cpp create mode 100644 kcontrol/accessibility/accessibility.desktop create mode 100644 kcontrol/accessibility/accessibility.h create mode 100644 kcontrol/accessibility/accessibilityconfigwidget.ui create mode 100644 kcontrol/accessibility/accessibilityconfigwidget.ui.h create mode 100644 kcontrol/accessibility/configure.in.in create mode 100644 kcontrol/accessibility/kcm_accessibility.kcfg create mode 100644 kcontrol/accessibility/settings.kcfgc create mode 100644 kcontrol/arts/Makefile.am create mode 100644 kcontrol/arts/arts.cpp create mode 100644 kcontrol/arts/arts.desktop create mode 100644 kcontrol/arts/arts.h create mode 100644 kcontrol/arts/generaltab.ui create mode 100644 kcontrol/arts/hardwaretab.ui create mode 100644 kcontrol/arts/krichtextlabel.cpp create mode 100644 kcontrol/arts/krichtextlabel.h create mode 100644 kcontrol/background/Makefile.am create mode 100644 kcontrol/background/background.desktop create mode 100644 kcontrol/background/bgadvanced.cpp create mode 100644 kcontrol/background/bgadvanced.h create mode 100644 kcontrol/background/bgadvanced_ui.ui create mode 100644 kcontrol/background/bgdefaults.h create mode 100644 kcontrol/background/bgdialog.cpp create mode 100644 kcontrol/background/bgdialog.h create mode 100644 kcontrol/background/bgdialog_ui.ui create mode 100644 kcontrol/background/bghash.h create mode 100644 kcontrol/background/bgmonitor.cpp create mode 100644 kcontrol/background/bgmonitor.h create mode 100644 kcontrol/background/bgrender.cpp create mode 100644 kcontrol/background/bgrender.h create mode 100644 kcontrol/background/bgsettings.cpp create mode 100644 kcontrol/background/bgsettings.h create mode 100644 kcontrol/background/bgwallpaper.cpp create mode 100644 kcontrol/background/bgwallpaper.h create mode 100644 kcontrol/background/bgwallpaper_ui.ui create mode 100644 kcontrol/background/main.cpp create mode 100644 kcontrol/background/main.h create mode 100644 kcontrol/background/pics/Makefile.am create mode 100644 kcontrol/background/pics/monitor.png create mode 100644 kcontrol/bell/Makefile.am create mode 100644 kcontrol/bell/bell.cpp create mode 100644 kcontrol/bell/bell.desktop create mode 100644 kcontrol/bell/bell.h create mode 100644 kcontrol/clock/Makefile.am create mode 100644 kcontrol/clock/clock.desktop create mode 100644 kcontrol/clock/dtime.cpp create mode 100644 kcontrol/clock/dtime.h create mode 100644 kcontrol/clock/main.cpp create mode 100644 kcontrol/clock/main.h create mode 100644 kcontrol/clock/tzone.cpp create mode 100644 kcontrol/clock/tzone.h create mode 100644 kcontrol/clock/xpm/kcmclock.xpm create mode 100644 kcontrol/clock/xpm/world.xpm create mode 100644 kcontrol/colors/Makefile.am create mode 100644 kcontrol/colors/colors.desktop create mode 100644 kcontrol/colors/colorscm.cpp create mode 100644 kcontrol/colors/colorscm.h create mode 100644 kcontrol/colors/stdclient_bitmaps.h create mode 100644 kcontrol/colors/widgetcanvas.cpp create mode 100644 kcontrol/colors/widgetcanvas.h create mode 100644 kcontrol/componentchooser/EXAMPLE.desktop create mode 100644 kcontrol/componentchooser/Makefile.am create mode 100644 kcontrol/componentchooser/browserconfig_ui.ui create mode 100644 kcontrol/componentchooser/componentchooser.cpp create mode 100644 kcontrol/componentchooser/componentchooser.desktop create mode 100644 kcontrol/componentchooser/componentchooser.h create mode 100644 kcontrol/componentchooser/componentchooser_ui.ui create mode 100644 kcontrol/componentchooser/componentconfig_ui.ui create mode 100644 kcontrol/componentchooser/componentservices/Makefile.am create mode 100644 kcontrol/componentchooser/componentservices/kcm_browser.desktop create mode 100644 kcontrol/componentchooser/componentservices/kcm_kemail.desktop create mode 100644 kcontrol/componentchooser/componentservices/kcm_terminal.desktop create mode 100644 kcontrol/componentchooser/emailclientconfig_ui.ui create mode 100644 kcontrol/componentchooser/kcm_componentchooser.cpp create mode 100644 kcontrol/componentchooser/kcm_componentchooser.h create mode 100644 kcontrol/componentchooser/terminalemulatorconfig_ui.ui create mode 100644 kcontrol/crypto/Makefile.am create mode 100644 kcontrol/crypto/README create mode 100644 kcontrol/crypto/certexport.cpp create mode 100644 kcontrol/crypto/certexport.h create mode 100644 kcontrol/crypto/certgen.ui create mode 100644 kcontrol/crypto/configure.in.in create mode 100644 kcontrol/crypto/crypto.cpp create mode 100644 kcontrol/crypto/crypto.desktop create mode 100644 kcontrol/crypto/crypto.h create mode 100644 kcontrol/crypto/kdatetimedlg.cpp create mode 100644 kcontrol/crypto/kdatetimedlg.h create mode 100644 kcontrol/css/Makefile.am create mode 100644 kcontrol/css/cssconfig.ui create mode 100644 kcontrol/css/csscustom.ui create mode 100644 kcontrol/css/kcmcss.cpp create mode 100644 kcontrol/css/kcmcss.desktop create mode 100644 kcontrol/css/kcmcss.h create mode 100644 kcontrol/css/preview.ui create mode 100644 kcontrol/css/template.cpp create mode 100644 kcontrol/css/template.css create mode 100644 kcontrol/css/template.h create mode 100644 kcontrol/display/Makefile.am create mode 100644 kcontrol/display/display.cpp create mode 100644 kcontrol/display/display.desktop create mode 100644 kcontrol/display/display.h create mode 100644 kcontrol/dnssd/Makefile.am create mode 100644 kcontrol/dnssd/configdialog.ui create mode 100644 kcontrol/dnssd/kcm_kdnssd.desktop create mode 100644 kcontrol/dnssd/kcmdnssd.cpp create mode 100644 kcontrol/dnssd/kcmdnssd.h create mode 100644 kcontrol/ebrowsing/Makefile.am create mode 100644 kcontrol/ebrowsing/ebrowsing.desktop create mode 100644 kcontrol/ebrowsing/filteropts.cpp create mode 100644 kcontrol/ebrowsing/filteropts.h create mode 100644 kcontrol/ebrowsing/main.cpp create mode 100644 kcontrol/ebrowsing/main.h create mode 100644 kcontrol/ebrowsing/plugins/Makefile.am create mode 100644 kcontrol/ebrowsing/plugins/ikws/Makefile.am create mode 100644 kcontrol/ebrowsing/plugins/ikws/ikwsopts.cpp create mode 100644 kcontrol/ebrowsing/plugins/ikws/ikwsopts.h create mode 100644 kcontrol/ebrowsing/plugins/ikws/ikwsopts_ui.ui create mode 100644 kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.cpp create mode 100644 kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.h create mode 100644 kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.upd create mode 100644 kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.cpp create mode 100644 kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.h create mode 100644 kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.cpp create mode 100644 kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.h create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchprovider.cpp create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchprovider.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchprovider.h create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.cpp create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.h create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviderdlg_ui.ui create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/Makefile.am create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/acronym.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa_url.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/alltheweb.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/altavista.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/amg.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/appsy.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/austronaut.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/backports.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/bugft.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/bugno.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/call.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/cia.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/citeseer.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/cpan.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan_cat.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/dbug.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/de2en.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/de2fr.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/deb.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/dmoz.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/docbook.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/doi.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/en2de.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/en2es.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/en2fr.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/en2it.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/es2en.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/excite.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/feedster.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/foldoc.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2de.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2en.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/freedb.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/freshmeat.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/froogle.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/fsd.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google_advanced.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google_groups.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google_images.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google_lucky.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google_movie.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/google_news.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/gracenote.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/grec.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/hotbot.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary_thesaurus.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/imdb.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/it2en.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/jeeves.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/katatudo.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/kde.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/kde_websvn.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/leo.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/lycos.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/mamma.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/metacrawler.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/msdn.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/netcraft.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-telephone.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-teletekst.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/pgpkeys.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/php.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/python.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/qt.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/qt3.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/rae.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/rfc.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/rpmfind.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/ruby_application_archive.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/seek.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/sourceforge.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/technorati.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/technoratitags.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/thesaurus.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/tvtome.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/uspto.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/vivisimo.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/voila.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/webster.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/whatis.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/wikipedia.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/wiktionary.desktop create mode 100644 kcontrol/ebrowsing/plugins/ikws/searchproviders/wordref.desktop create mode 100644 kcontrol/ebrowsing/plugins/localdomain/Makefile.am create mode 100644 kcontrol/ebrowsing/plugins/localdomain/klocaldomainurifilterhelper.c create mode 100644 kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.cpp create mode 100644 kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.desktop create mode 100644 kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.h create mode 100644 kcontrol/ebrowsing/plugins/shorturi/Makefile.am create mode 100644 kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.cpp create mode 100644 kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.desktop create mode 100644 kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.h create mode 100644 kcontrol/ebrowsing/plugins/shorturi/kshorturifilterrc create mode 100644 kcontrol/energy/Makefile.am create mode 100644 kcontrol/energy/configure.in.in create mode 100644 kcontrol/energy/energy.cpp create mode 100644 kcontrol/energy/energy.desktop create mode 100644 kcontrol/energy/energy.h create mode 100644 kcontrol/energy/pics/Makefile.am create mode 100644 kcontrol/energy/pics/energybig.png create mode 100644 kcontrol/energy/pics/lo-energy.png create mode 100644 kcontrol/filetypes/Makefile.am create mode 100644 kcontrol/filetypes/control.cpp create mode 100644 kcontrol/filetypes/filegroupdetails.cpp create mode 100644 kcontrol/filetypes/filegroupdetails.h create mode 100644 kcontrol/filetypes/filetypedetails.cpp create mode 100644 kcontrol/filetypes/filetypedetails.h create mode 100644 kcontrol/filetypes/filetypes.desktop create mode 100644 kcontrol/filetypes/filetypesview.cpp create mode 100644 kcontrol/filetypes/filetypesview.h create mode 100644 kcontrol/filetypes/keditfiletype.cpp create mode 100644 kcontrol/filetypes/keditfiletype.h create mode 100644 kcontrol/filetypes/kservicelistwidget.cpp create mode 100644 kcontrol/filetypes/kservicelistwidget.h create mode 100644 kcontrol/filetypes/kserviceselectdlg.cpp create mode 100644 kcontrol/filetypes/kserviceselectdlg.h create mode 100644 kcontrol/filetypes/newtypedlg.cpp create mode 100644 kcontrol/filetypes/newtypedlg.h create mode 100644 kcontrol/filetypes/typeslistitem.cpp create mode 100644 kcontrol/filetypes/typeslistitem.h create mode 100644 kcontrol/fonts/Makefile.am create mode 100644 kcontrol/fonts/configure.in.in create mode 100644 kcontrol/fonts/fonts.cpp create mode 100644 kcontrol/fonts/fonts.desktop create mode 100644 kcontrol/fonts/fonts.h create mode 100644 kcontrol/fonts/kxftconfig.cpp create mode 100644 kcontrol/fonts/kxftconfig.h create mode 100644 kcontrol/icons/Makefile.am create mode 100644 kcontrol/icons/icons.cpp create mode 100644 kcontrol/icons/icons.desktop create mode 100644 kcontrol/icons/icons.h create mode 100644 kcontrol/icons/iconthemes.cpp create mode 100644 kcontrol/icons/iconthemes.h create mode 100644 kcontrol/icons/main.cpp create mode 100644 kcontrol/icons/main.h create mode 100644 kcontrol/icons/testicons.cpp create mode 100644 kcontrol/icons/uninstall.desktop create mode 100644 kcontrol/info/AUTHORS create mode 100644 kcontrol/info/ChangeLog create mode 100644 kcontrol/info/Makefile.am create mode 100644 kcontrol/info/cdinfo.desktop create mode 100644 kcontrol/info/configure.in.bot create mode 100644 kcontrol/info/configure.in.in create mode 100644 kcontrol/info/devices.desktop create mode 100644 kcontrol/info/dma.desktop create mode 100644 kcontrol/info/info.cpp create mode 100644 kcontrol/info/info.h create mode 100644 kcontrol/info/info_aix.cpp create mode 100644 kcontrol/info/info_fbsd.cpp create mode 100644 kcontrol/info/info_generic.cpp create mode 100644 kcontrol/info/info_hpux.cpp create mode 100644 kcontrol/info/info_linux.cpp create mode 100644 kcontrol/info/info_netbsd.cpp create mode 100644 kcontrol/info/info_openbsd.cpp create mode 100644 kcontrol/info/info_osx.cpp create mode 100644 kcontrol/info/info_sgi.cpp create mode 100644 kcontrol/info/info_solaris.cpp create mode 100644 kcontrol/info/info_svr4.cpp create mode 100644 kcontrol/info/interrupts.desktop create mode 100644 kcontrol/info/ioports.desktop create mode 100644 kcontrol/info/main.cpp create mode 100644 kcontrol/info/memory.cpp create mode 100644 kcontrol/info/memory.desktop create mode 100644 kcontrol/info/memory.h create mode 100644 kcontrol/info/memory_fbsd.cpp create mode 100644 kcontrol/info/memory_hpux.cpp create mode 100644 kcontrol/info/memory_linux.cpp create mode 100644 kcontrol/info/memory_netbsd.cpp create mode 100644 kcontrol/info/memory_osx.cpp create mode 100644 kcontrol/info/memory_sgi.cpp create mode 100644 kcontrol/info/memory_solaris.cpp create mode 100644 kcontrol/info/memory_tru64.cpp create mode 100644 kcontrol/info/opengl.cpp create mode 100644 kcontrol/info/opengl.desktop create mode 100644 kcontrol/info/partitions.desktop create mode 100644 kcontrol/info/pci.desktop create mode 100644 kcontrol/info/processor.desktop create mode 100644 kcontrol/info/scsi.desktop create mode 100644 kcontrol/info/sound.desktop create mode 100644 kcontrol/info/xserver.desktop create mode 100644 kcontrol/input/AUTHORS create mode 100644 kcontrol/input/ChangeLog create mode 100644 kcontrol/input/Makefile.am create mode 100644 kcontrol/input/configure.in.bot create mode 100644 kcontrol/input/configure.in.in create mode 100755 kcontrol/input/consoleUserPerms create mode 100644 kcontrol/input/core/Makefile.am create mode 100644 kcontrol/input/core/bitmaps.h create mode 100644 kcontrol/input/core/themepage.cpp create mode 100644 kcontrol/input/core/themepage.h create mode 100644 kcontrol/input/cursor_large.bdf create mode 100644 kcontrol/input/cursor_large_black.pcf.gz create mode 100644 kcontrol/input/cursor_large_white.pcf.gz create mode 100644 kcontrol/input/cursor_small_white.pcf.gz create mode 100644 kcontrol/input/kapplymousetheme.cpp create mode 100644 kcontrol/input/kmousedlg.ui create mode 100644 kcontrol/input/logitechmouse.cpp create mode 100644 kcontrol/input/logitechmouse.h create mode 100644 kcontrol/input/logitechmouse.usermap create mode 100644 kcontrol/input/logitechmouse_base.ui create mode 100644 kcontrol/input/main.cpp create mode 100644 kcontrol/input/mouse.cpp create mode 100644 kcontrol/input/mouse.desktop create mode 100644 kcontrol/input/mouse.h create mode 100644 kcontrol/input/mouse_cursor_theme.upd create mode 100644 kcontrol/input/pics/Makefile.am create mode 100644 kcontrol/input/pics/mouse_lh.png create mode 100644 kcontrol/input/pics/mouse_lh.svgz create mode 100644 kcontrol/input/pics/mouse_rh.png create mode 100644 kcontrol/input/pics/mouse_rh.svgz create mode 100644 kcontrol/input/xcursor/Makefile.am create mode 100644 kcontrol/input/xcursor/previewwidget.cpp create mode 100644 kcontrol/input/xcursor/previewwidget.h create mode 100644 kcontrol/input/xcursor/themepage.cpp create mode 100644 kcontrol/input/xcursor/themepage.h create mode 100644 kcontrol/ioslaveinfo/Makefile.am create mode 100644 kcontrol/ioslaveinfo/ioslaveinfo.desktop create mode 100644 kcontrol/ioslaveinfo/kcmioslaveinfo.cpp create mode 100644 kcontrol/ioslaveinfo/kcmioslaveinfo.h create mode 100644 kcontrol/ioslaveinfo/uninstall.desktop create mode 100644 kcontrol/joystick/Makefile.am create mode 100644 kcontrol/joystick/caldialog.cpp create mode 100644 kcontrol/joystick/caldialog.h create mode 100644 kcontrol/joystick/configure.in.in create mode 100644 kcontrol/joystick/joydevice.cpp create mode 100644 kcontrol/joystick/joydevice.h create mode 100644 kcontrol/joystick/joystick.cpp create mode 100644 kcontrol/joystick/joystick.desktop create mode 100644 kcontrol/joystick/joystick.h create mode 100644 kcontrol/joystick/joywidget.cpp create mode 100644 kcontrol/joystick/joywidget.h create mode 100644 kcontrol/joystick/poswidget.cpp create mode 100644 kcontrol/joystick/poswidget.h create mode 100644 kcontrol/kcontrol/KControl.desktop create mode 100644 kcontrol/kcontrol/KControl_NoDisplay.desktop create mode 100644 kcontrol/kcontrol/Makefile.am create mode 100644 kcontrol/kcontrol/about/Makefile.am create mode 100644 kcontrol/kcontrol/about/kcontrol.css create mode 100644 kcontrol/kcontrol/about/main.html create mode 100644 kcontrol/kcontrol/about/top-right-kcontrol.png create mode 100644 kcontrol/kcontrol/aboutwidget.cpp create mode 100644 kcontrol/kcontrol/aboutwidget.h create mode 100644 kcontrol/kcontrol/cr128-app-kcontrol.png create mode 100644 kcontrol/kcontrol/cr16-app-kcontrol.png create mode 100644 kcontrol/kcontrol/cr32-app-kcontrol.png create mode 100644 kcontrol/kcontrol/cr48-app-kcontrol.png create mode 100644 kcontrol/kcontrol/cr64-app-kcontrol.png create mode 100644 kcontrol/kcontrol/dockcontainer.cpp create mode 100644 kcontrol/kcontrol/dockcontainer.h create mode 100644 kcontrol/kcontrol/global.cpp create mode 100644 kcontrol/kcontrol/global.h create mode 100644 kcontrol/kcontrol/helpwidget.cpp create mode 100644 kcontrol/kcontrol/helpwidget.h create mode 100644 kcontrol/kcontrol/indexwidget.cpp create mode 100644 kcontrol/kcontrol/indexwidget.h create mode 100644 kcontrol/kcontrol/kcontrolui.rc create mode 100644 kcontrol/kcontrol/kcrootonly.cpp create mode 100644 kcontrol/kcontrol/kcrootonly.h create mode 100644 kcontrol/kcontrol/kinfocenter.desktop create mode 100644 kcontrol/kcontrol/kinfocenterui.rc create mode 100644 kcontrol/kcontrol/main.cpp create mode 100644 kcontrol/kcontrol/main.h create mode 100644 kcontrol/kcontrol/moduleIface.cpp create mode 100644 kcontrol/kcontrol/moduleIface.h create mode 100644 kcontrol/kcontrol/moduleiconview.cpp create mode 100644 kcontrol/kcontrol/moduleiconview.h create mode 100644 kcontrol/kcontrol/modulemenu.cpp create mode 100644 kcontrol/kcontrol/modulemenu.h create mode 100644 kcontrol/kcontrol/modules.cpp create mode 100644 kcontrol/kcontrol/modules.h create mode 100644 kcontrol/kcontrol/moduletreeview.cpp create mode 100644 kcontrol/kcontrol/moduletreeview.h create mode 100644 kcontrol/kcontrol/proxywidget.cpp create mode 100644 kcontrol/kcontrol/proxywidget.h create mode 100644 kcontrol/kcontrol/searchwidget.cpp create mode 100644 kcontrol/kcontrol/searchwidget.h create mode 100644 kcontrol/kcontrol/toplevel.cpp create mode 100644 kcontrol/kcontrol/toplevel.h create mode 100644 kcontrol/kcontrol/version.h create mode 100644 kcontrol/kded/Makefile.am create mode 100644 kcontrol/kded/kcmkded.cpp create mode 100644 kcontrol/kded/kcmkded.desktop create mode 100644 kcontrol/kded/kcmkded.h create mode 100644 kcontrol/kdm/AUTHORS create mode 100644 kcontrol/kdm/ChangeLog create mode 100644 kcontrol/kdm/Makefile.am create mode 100644 kcontrol/kdm/background.cpp create mode 100644 kcontrol/kdm/background.h create mode 100644 kcontrol/kdm/kbackedcombobox.cpp create mode 100644 kcontrol/kdm/kbackedcombobox.h create mode 100644 kcontrol/kdm/kdm-appear.cpp create mode 100644 kcontrol/kdm/kdm-appear.h create mode 100644 kcontrol/kdm/kdm-conv.cpp create mode 100644 kcontrol/kdm/kdm-conv.h create mode 100644 kcontrol/kdm/kdm-font.cpp create mode 100644 kcontrol/kdm/kdm-font.h create mode 100644 kcontrol/kdm/kdm-shut.cpp create mode 100644 kcontrol/kdm/kdm-shut.h create mode 100644 kcontrol/kdm/kdm-users.cpp create mode 100644 kcontrol/kdm/kdm-users.h create mode 100644 kcontrol/kdm/kdm.desktop create mode 100644 kcontrol/kdm/main.cpp create mode 100644 kcontrol/kdm/main.h create mode 100644 kcontrol/keys/ChangeLog create mode 100644 kcontrol/keys/Makefile.am create mode 100644 kcontrol/keys/README create mode 100644 kcontrol/keys/commandShortcuts.cpp create mode 100644 kcontrol/keys/commandShortcuts.h create mode 100755 kcontrol/keys/convertShortcuts.pl create mode 100644 kcontrol/keys/kaccel.upd create mode 100644 kcontrol/keys/kaccelaction.h create mode 100644 kcontrol/keys/kde3.kksrc create mode 100644 kcontrol/keys/kde4.kksrc create mode 100644 kcontrol/keys/keyconfig.cpp create mode 100644 kcontrol/keys/keyconfig.h create mode 100644 kcontrol/keys/keys.desktop create mode 100644 kcontrol/keys/khotkeys.cpp create mode 100644 kcontrol/keys/khotkeys.h create mode 100644 kcontrol/keys/mac4.kksrc create mode 100644 kcontrol/keys/main.cpp create mode 100644 kcontrol/keys/main.h create mode 100644 kcontrol/keys/modifiers.cpp create mode 100644 kcontrol/keys/modifiers.h create mode 100644 kcontrol/keys/shortcuts.cpp create mode 100644 kcontrol/keys/shortcuts.h create mode 100644 kcontrol/keys/treeview.cpp create mode 100644 kcontrol/keys/treeview.h create mode 100644 kcontrol/keys/unix3.kksrc create mode 100644 kcontrol/keys/win3.kksrc create mode 100644 kcontrol/keys/win4.kksrc create mode 100644 kcontrol/keys/wm3.kksrc create mode 100644 kcontrol/kfontinst/AUTHORS create mode 100644 kcontrol/kfontinst/ChangeLog create mode 100644 kcontrol/kfontinst/Makefile.am create mode 100644 kcontrol/kfontinst/TODO create mode 100644 kcontrol/kfontinst/configure.in.bot create mode 100644 kcontrol/kfontinst/configure.in.in create mode 100644 kcontrol/kfontinst/installfont.desktop create mode 100644 kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp create mode 100644 kcontrol/kfontinst/kcmfontinst/KCmFontInst.h create mode 100644 kcontrol/kfontinst/kcmfontinst/KFileFontIconView.cpp create mode 100644 kcontrol/kfontinst/kcmfontinst/KFileFontIconView.h create mode 100644 kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp create mode 100644 kcontrol/kfontinst/kcmfontinst/KFileFontView.h create mode 100644 kcontrol/kfontinst/kcmfontinst/Makefile.am create mode 100644 kcontrol/kfontinst/kcmfontinst/PrintDialog.cpp create mode 100644 kcontrol/kfontinst/kcmfontinst/PrintDialog.h create mode 100644 kcontrol/kfontinst/kcmfontinst/SettingsDialog.cpp create mode 100644 kcontrol/kfontinst/kcmfontinst/SettingsDialog.h create mode 100644 kcontrol/kfontinst/kcmfontinst/cr16-action-newfont.png create mode 100644 kcontrol/kfontinst/kcmfontinst/cr22-action-newfont.png create mode 100644 kcontrol/kfontinst/kcmfontinst/cr32-action-newfont.png create mode 100644 kcontrol/kfontinst/kcmfontinst/kcmfontinst.desktop create mode 100644 kcontrol/kfontinst/kfile-plugin/KFileFont.cpp create mode 100644 kcontrol/kfontinst/kfile-plugin/KFileFont.h create mode 100644 kcontrol/kfontinst/kfile-plugin/Makefile.am create mode 100644 kcontrol/kfontinst/kfile-plugin/kfile_font.desktop create mode 100644 kcontrol/kfontinst/kfontinst/FontEngine.cpp create mode 100644 kcontrol/kfontinst/kfontinst/FontEngine.h create mode 100644 kcontrol/kfontinst/kfontinst/Fontmap.cpp create mode 100644 kcontrol/kfontinst/kfontinst/Fontmap.h create mode 100644 kcontrol/kfontinst/kfontinst/GetPid.c create mode 100644 kcontrol/kfontinst/kfontinst/Main.cpp create mode 100644 kcontrol/kfontinst/kfontinst/Makefile.am create mode 100644 kcontrol/kfontinst/kfontinst/XConfig.cpp create mode 100644 kcontrol/kfontinst/kfontinst/XConfig.h create mode 100644 kcontrol/kfontinst/kio/KioFonts.cpp create mode 100644 kcontrol/kfontinst/kio/KioFonts.h create mode 100644 kcontrol/kfontinst/kio/Makefile.am create mode 100644 kcontrol/kfontinst/kio/folder.desktop create mode 100644 kcontrol/kfontinst/kio/fonts.desktop create mode 100644 kcontrol/kfontinst/kio/fonts.protocol create mode 100644 kcontrol/kfontinst/kio/package.desktop create mode 100644 kcontrol/kfontinst/kio/system-folder.desktop create mode 100644 kcontrol/kfontinst/lib/FcEngine.cpp create mode 100644 kcontrol/kfontinst/lib/FcEngine.h create mode 100644 kcontrol/kfontinst/lib/KfiConstants.h create mode 100644 kcontrol/kfontinst/lib/Makefile.am create mode 100644 kcontrol/kfontinst/lib/Misc.cpp create mode 100644 kcontrol/kfontinst/lib/Misc.h create mode 100644 kcontrol/kfontinst/thumbnail/FontThumbnail.cpp create mode 100644 kcontrol/kfontinst/thumbnail/FontThumbnail.h create mode 100644 kcontrol/kfontinst/thumbnail/Makefile.am create mode 100644 kcontrol/kfontinst/thumbnail/fontthumbnail.desktop create mode 100644 kcontrol/kfontinst/viewpart/FontPreview.cpp create mode 100644 kcontrol/kfontinst/viewpart/FontPreview.h create mode 100644 kcontrol/kfontinst/viewpart/FontViewPart.cpp create mode 100644 kcontrol/kfontinst/viewpart/FontViewPart.h create mode 100644 kcontrol/kfontinst/viewpart/FontViewPartFactory.cpp create mode 100644 kcontrol/kfontinst/viewpart/FontViewPartFactory.h create mode 100644 kcontrol/kfontinst/viewpart/FontViewerApp.cpp create mode 100644 kcontrol/kfontinst/viewpart/FontViewerApp.h create mode 100644 kcontrol/kfontinst/viewpart/KfiPrint.cpp create mode 100644 kcontrol/kfontinst/viewpart/KfiPrint.h create mode 100644 kcontrol/kfontinst/viewpart/Makefile.am create mode 100644 kcontrol/kfontinst/viewpart/kfontview.desktop create mode 100644 kcontrol/kfontinst/viewpart/kfontviewpart.desktop create mode 100644 kcontrol/kfontinst/viewpart/kfontviewpart.rc create mode 100644 kcontrol/kfontinst/viewpart/kfontviewui.rc create mode 100644 kcontrol/kicker/Makefile.am create mode 100644 kcontrol/kicker/advancedDialog.cpp create mode 100644 kcontrol/kicker/advancedDialog.h create mode 100644 kcontrol/kicker/advancedOptions.ui create mode 100644 kcontrol/kicker/applettab.ui create mode 100644 kcontrol/kicker/applettab_impl.cpp create mode 100644 kcontrol/kicker/applettab_impl.h create mode 100644 kcontrol/kicker/extensionInfo.cpp create mode 100644 kcontrol/kicker/extensionInfo.h create mode 100644 kcontrol/kicker/hidingconfig.cpp create mode 100644 kcontrol/kicker/hidingconfig.h create mode 100644 kcontrol/kicker/hidingtab.ui create mode 100644 kcontrol/kicker/hidingtab_impl.cpp create mode 100644 kcontrol/kicker/hidingtab_impl.h create mode 100644 kcontrol/kicker/kicker_config.desktop create mode 100644 kcontrol/kicker/kicker_config_appearance.desktop create mode 100644 kcontrol/kicker/kicker_config_arrangement.desktop create mode 100644 kcontrol/kicker/kicker_config_hiding.desktop create mode 100644 kcontrol/kicker/kicker_config_menus.desktop create mode 100644 kcontrol/kicker/lookandfeelconfig.cpp create mode 100644 kcontrol/kicker/lookandfeelconfig.h create mode 100644 kcontrol/kicker/lookandfeeltab.ui create mode 100644 kcontrol/kicker/lookandfeeltab_impl.cpp create mode 100644 kcontrol/kicker/lookandfeeltab_impl.h create mode 100644 kcontrol/kicker/lookandfeeltab_kcm.cpp create mode 100644 kcontrol/kicker/lookandfeeltab_kcm.h create mode 100644 kcontrol/kicker/main.cpp create mode 100644 kcontrol/kicker/main.h create mode 100644 kcontrol/kicker/menuconfig.cpp create mode 100644 kcontrol/kicker/menuconfig.h create mode 100644 kcontrol/kicker/menutab.ui create mode 100644 kcontrol/kicker/menutab_impl.cpp create mode 100644 kcontrol/kicker/menutab_impl.h create mode 100644 kcontrol/kicker/panel.desktop create mode 100644 kcontrol/kicker/positionconfig.cpp create mode 100644 kcontrol/kicker/positionconfig.h create mode 100644 kcontrol/kicker/positiontab.ui create mode 100644 kcontrol/kicker/positiontab_impl.cpp create mode 100644 kcontrol/kicker/positiontab_impl.h create mode 100644 kcontrol/kicker/uninstall.desktop create mode 100644 kcontrol/kio/Makefile.am create mode 100644 kcontrol/kio/UA-DESKTOP-FILE-HOWTO create mode 100644 kcontrol/kio/cache.cpp create mode 100644 kcontrol/kio/cache.desktop create mode 100644 kcontrol/kio/cache.h create mode 100644 kcontrol/kio/cache_ui.ui create mode 100644 kcontrol/kio/cookies.desktop create mode 100644 kcontrol/kio/envvarproxy_ui.ui create mode 100644 kcontrol/kio/fakeuaprovider.cpp create mode 100644 kcontrol/kio/fakeuaprovider.h create mode 100644 kcontrol/kio/kcookiesmain.cpp create mode 100644 kcontrol/kio/kcookiesmain.h create mode 100644 kcontrol/kio/kcookiesmanagement.cpp create mode 100644 kcontrol/kio/kcookiesmanagement.h create mode 100644 kcontrol/kio/kcookiesmanagementdlg_ui.ui create mode 100644 kcontrol/kio/kcookiespolicies.cpp create mode 100644 kcontrol/kio/kcookiespolicies.h create mode 100644 kcontrol/kio/kcookiespoliciesdlg_ui.ui create mode 100644 kcontrol/kio/kenvvarproxydlg.cpp create mode 100644 kcontrol/kio/kenvvarproxydlg.h create mode 100644 kcontrol/kio/kio_ftprc.kcfg create mode 100644 kcontrol/kio/kio_ftprc.kcfgc create mode 100644 kcontrol/kio/kioslave.kcfg create mode 100644 kcontrol/kio/kioslave.kcfgc create mode 100644 kcontrol/kio/kmanualproxydlg.cpp create mode 100644 kcontrol/kio/kmanualproxydlg.h create mode 100644 kcontrol/kio/kproxydlg.cpp create mode 100644 kcontrol/kio/kproxydlg.h create mode 100644 kcontrol/kio/kproxydlg_ui.ui create mode 100644 kcontrol/kio/kproxydlgbase.cpp create mode 100644 kcontrol/kio/kproxydlgbase.h create mode 100644 kcontrol/kio/ksaveioconfig.cpp create mode 100644 kcontrol/kio/ksaveioconfig.h create mode 100644 kcontrol/kio/lanbrowser.desktop create mode 100644 kcontrol/kio/main.cpp create mode 100644 kcontrol/kio/main.h create mode 100644 kcontrol/kio/manualproxy_ui.ui create mode 100644 kcontrol/kio/netpref.cpp create mode 100644 kcontrol/kio/netpref.desktop create mode 100644 kcontrol/kio/netpref.h create mode 100644 kcontrol/kio/policydlg.cpp create mode 100644 kcontrol/kio/policydlg.h create mode 100644 kcontrol/kio/policydlg_ui.ui create mode 100644 kcontrol/kio/proxy.desktop create mode 100644 kcontrol/kio/smb.desktop create mode 100644 kcontrol/kio/smbrodlg.cpp create mode 100644 kcontrol/kio/smbrodlg.h create mode 100644 kcontrol/kio/socks.cpp create mode 100644 kcontrol/kio/socks.h create mode 100644 kcontrol/kio/socks.upd create mode 100644 kcontrol/kio/socksbase.ui create mode 100644 kcontrol/kio/uagentproviderdlg.cpp create mode 100644 kcontrol/kio/uagentproviderdlg.h create mode 100644 kcontrol/kio/uagentproviderdlg_ui.ui create mode 100644 kcontrol/kio/uasprovider.desktop create mode 100644 kcontrol/kio/uasproviders/Makefile.am create mode 100644 kcontrol/kio/uasproviders/firefox10oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/firefox15oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/googlebot.desktop create mode 100644 kcontrol/kio/uasproviders/ie401onwinnt4.desktop create mode 100644 kcontrol/kio/uasproviders/ie45onwinnt5.desktop create mode 100644 kcontrol/kio/uasproviders/ie501onwinnt5.desktop create mode 100644 kcontrol/kio/uasproviders/ie50onppc.desktop create mode 100644 kcontrol/kio/uasproviders/ie55onwin98.desktop create mode 100644 kcontrol/kio/uasproviders/ie55onwinnt5.desktop create mode 100644 kcontrol/kio/uasproviders/ie60oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/ie60onwinnt51.desktop create mode 100644 kcontrol/kio/uasproviders/lynxoncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/mozoncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/mozoncurrent12.desktop create mode 100644 kcontrol/kio/uasproviders/mozoncurrent16.desktop create mode 100644 kcontrol/kio/uasproviders/mozonwin2000.desktop create mode 100644 kcontrol/kio/uasproviders/mozonwinxp.desktop create mode 100644 kcontrol/kio/uasproviders/nn301oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/nn475oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/nn475onwin95.desktop create mode 100644 kcontrol/kio/uasproviders/nn476onppc.desktop create mode 100644 kcontrol/kio/uasproviders/ns71oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/ns71onwinnt51.desktop create mode 100644 kcontrol/kio/uasproviders/op403onwinnt4.desktop create mode 100644 kcontrol/kio/uasproviders/op75oncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/safari12.desktop create mode 100644 kcontrol/kio/uasproviders/safari20.desktop create mode 100644 kcontrol/kio/uasproviders/w3moncurrent.desktop create mode 100644 kcontrol/kio/uasproviders/wgetoncurrent.desktop create mode 100644 kcontrol/kio/uninstall.desktop create mode 100644 kcontrol/kio/useragent.desktop create mode 100644 kcontrol/kio/useragentdlg.cpp create mode 100644 kcontrol/kio/useragentdlg.h create mode 100644 kcontrol/kio/useragentdlg_ui.ui create mode 100644 kcontrol/knotify/CHANGES create mode 100644 kcontrol/knotify/Makefile.am create mode 100644 kcontrol/knotify/README create mode 100644 kcontrol/knotify/kcmnotify.desktop create mode 100644 kcontrol/knotify/knotify.cpp create mode 100644 kcontrol/knotify/knotify.h create mode 100644 kcontrol/knotify/play.png create mode 100644 kcontrol/knotify/playersettings.ui create mode 100644 kcontrol/knotify/sounds/KDE_Beep.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Ahem.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Beep.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Bottles.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Car.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Classic.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_ClassicBeep.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_ClockChime.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Connect.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Connect.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Digital_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Digital_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Door.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Double.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Harsh.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Honk.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Lightning.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Phone_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Phone_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Pop.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_RimShot.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_RingRing.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_ShortBeep.wav create mode 100644 kcontrol/knotify/sounds/KDE_Beep_Yo.wav create mode 100644 kcontrol/knotify/sounds/KDE_Bottles.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Chimes_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Chimes_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Chimes_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Click.wav create mode 100644 kcontrol/knotify/sounds/KDE_Click_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Click_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Click_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Close_Window.wav create mode 100644 kcontrol/knotify/sounds/KDE_Critical_Error.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop1.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop2.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop3.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop4.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop5.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop6.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop7.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop8.wav create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_4.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_5.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_6.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_7.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Desktop_8.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Dialog_Appear.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Dialog_Appear.wav create mode 100644 kcontrol/knotify/sounds/KDE_Dialog_Disappear.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Dialog_Disappear.wav create mode 100644 kcontrol/knotify/sounds/KDE_Door.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Drum_Break.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Error.wav create mode 100644 kcontrol/knotify/sounds/KDE_Error_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Error_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Error_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Event_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Event_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Event_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Event_4.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Event_5.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Glass_Break.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Keyboard_Key_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Logout.wav create mode 100644 kcontrol/knotify/sounds/KDE_Logout_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Logout_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Logout_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Notify.wav create mode 100644 kcontrol/knotify/sounds/KDE_Pop.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Star_Ship_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Startup.wav create mode 100644 kcontrol/knotify/sounds/KDE_Startup_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Startup_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Startup_3.ogg create mode 100644 kcontrol/knotify/sounds/KDE_TypeWriter_Bell.ogg create mode 100644 kcontrol/knotify/sounds/KDE_TypeWriter_End_Of_Line.ogg create mode 100644 kcontrol/knotify/sounds/KDE_TypeWriter_Key_1.ogg create mode 100644 kcontrol/knotify/sounds/KDE_TypeWriter_Key_2.ogg create mode 100644 kcontrol/knotify/sounds/KDE_TypeWriter_Reload.ogg create mode 100644 kcontrol/knotify/sounds/KDE_TypeWriter_Scroll.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Vox_Ahem.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Vox_Yo.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Warp.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Water_Drop.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Close.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Close.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_DeIconify.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_DeIconify.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_Hide.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Iconify.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Iconify.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_Maximize.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_Open.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Open.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_Shade_Down.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Shade_Down.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_Shade_Up.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Shade_Up.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_Sticky.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_Sticky.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_UnHide.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_UnMaximize.wav create mode 100644 kcontrol/knotify/sounds/KDE_Window_UnSticky.ogg create mode 100644 kcontrol/knotify/sounds/KDE_Window_UnSticky.wav create mode 100644 kcontrol/knotify/sounds/Makefile.am create mode 100644 kcontrol/konq/Makefile.am create mode 100644 kcontrol/konq/README create mode 100644 kcontrol/konq/behaviour.cpp create mode 100644 kcontrol/konq/behaviour.h create mode 100644 kcontrol/konq/browser.cpp create mode 100644 kcontrol/konq/browser.h create mode 100644 kcontrol/konq/desktop.cpp create mode 100644 kcontrol/konq/desktop.desktop create mode 100644 kcontrol/konq/desktop.h create mode 100644 kcontrol/konq/desktopbehavior.desktop create mode 100644 kcontrol/konq/desktopbehavior.ui create mode 100644 kcontrol/konq/desktopbehavior_impl.cpp create mode 100644 kcontrol/konq/desktopbehavior_impl.h create mode 100644 kcontrol/konq/desktoppath.desktop create mode 100644 kcontrol/konq/fileappearance.desktop create mode 100644 kcontrol/konq/filebehavior.desktop create mode 100644 kcontrol/konq/filebrowser.desktop create mode 100644 kcontrol/konq/filepreviews.desktop create mode 100644 kcontrol/konq/fontopts.cpp create mode 100644 kcontrol/konq/fontopts.h create mode 100644 kcontrol/konq/main.cpp create mode 100644 kcontrol/konq/onlyone.png create mode 100644 kcontrol/konq/overlapping.png create mode 100644 kcontrol/konq/previews.cpp create mode 100644 kcontrol/konq/previews.h create mode 100644 kcontrol/konq/rootopts.cpp create mode 100644 kcontrol/konq/rootopts.h create mode 100644 kcontrol/konq/webappearance.desktop create mode 100644 kcontrol/konq/webbehavior.desktop create mode 100644 kcontrol/konqhtml/Makefile.am create mode 100644 kcontrol/konqhtml/advancedTabDialog.cpp create mode 100644 kcontrol/konqhtml/advancedTabDialog.h create mode 100644 kcontrol/konqhtml/advancedTabOptions.ui create mode 100644 kcontrol/konqhtml/appearance.cpp create mode 100644 kcontrol/konqhtml/appearance.h create mode 100644 kcontrol/konqhtml/domainlistview.cpp create mode 100644 kcontrol/konqhtml/domainlistview.h create mode 100644 kcontrol/konqhtml/filteropts.cpp create mode 100644 kcontrol/konqhtml/filteropts.h create mode 100644 kcontrol/konqhtml/htmlopts.cpp create mode 100644 kcontrol/konqhtml/htmlopts.h create mode 100644 kcontrol/konqhtml/javaopts.cpp create mode 100644 kcontrol/konqhtml/javaopts.h create mode 100644 kcontrol/konqhtml/jsopts.cpp create mode 100644 kcontrol/konqhtml/jsopts.h create mode 100644 kcontrol/konqhtml/jspolicies.cpp create mode 100644 kcontrol/konqhtml/jspolicies.h create mode 100644 kcontrol/konqhtml/khtml_behavior.desktop create mode 100644 kcontrol/konqhtml/khtml_filter.desktop create mode 100644 kcontrol/konqhtml/khtml_fonts.desktop create mode 100644 kcontrol/konqhtml/khtml_java_js.desktop create mode 100644 kcontrol/konqhtml/khttpoptdlg.cpp create mode 100644 kcontrol/konqhtml/khttpoptdlg.h create mode 100644 kcontrol/konqhtml/main.cpp create mode 100644 kcontrol/konqhtml/main.h create mode 100644 kcontrol/konqhtml/nsconfigwidget.ui create mode 100644 kcontrol/konqhtml/pluginopts.cpp create mode 100644 kcontrol/konqhtml/pluginopts.h create mode 100644 kcontrol/konqhtml/policies.cpp create mode 100644 kcontrol/konqhtml/policies.h create mode 100644 kcontrol/konqhtml/policydlg.cpp create mode 100644 kcontrol/konqhtml/policydlg.h create mode 100644 kcontrol/konqhtml/uninstall.desktop create mode 100644 kcontrol/konsole/AUTHORS create mode 100644 kcontrol/konsole/Makefile.am create mode 100644 kcontrol/konsole/kcmkonsole.cpp create mode 100644 kcontrol/konsole/kcmkonsole.desktop create mode 100644 kcontrol/konsole/kcmkonsole.h create mode 100644 kcontrol/konsole/kcmkonsoledialog.ui create mode 100644 kcontrol/konsole/schemadialog.ui create mode 100644 kcontrol/konsole/schemaeditor.cpp create mode 100644 kcontrol/konsole/schemaeditor.h create mode 100644 kcontrol/konsole/sessiondialog.ui create mode 100644 kcontrol/konsole/sessioneditor.cpp create mode 100644 kcontrol/konsole/sessioneditor.h create mode 100644 kcontrol/krdb/AUTHORS create mode 100644 kcontrol/krdb/Makefile.am create mode 100644 kcontrol/krdb/ad/AAAAAAGeneral.ad create mode 100644 kcontrol/krdb/ad/AAAMotif.ad create mode 100644 kcontrol/krdb/ad/AAATk.ad create mode 100644 kcontrol/krdb/ad/AAAXaw.ad create mode 100644 kcontrol/krdb/ad/AcroRead.ad create mode 100644 kcontrol/krdb/ad/Editres.ad create mode 100644 kcontrol/krdb/ad/Emacs.ad create mode 100644 kcontrol/krdb/ad/GV.ad create mode 100644 kcontrol/krdb/ad/ML.ad create mode 100644 kcontrol/krdb/ad/Makefile.am create mode 100644 kcontrol/krdb/ad/Nedit.ad create mode 100644 kcontrol/krdb/ad/Netscape.ad create mode 100644 kcontrol/krdb/ad/README create mode 100644 kcontrol/krdb/ad/RVPlayer.ad create mode 100644 kcontrol/krdb/ad/WPerfect.ad create mode 100644 kcontrol/krdb/ad/XCalc.ad create mode 100644 kcontrol/krdb/ad/XOsview.ad create mode 100644 kcontrol/krdb/ad/XTerm.ad create mode 100644 kcontrol/krdb/ad/XV.ad create mode 100644 kcontrol/krdb/ad/Xawtv.ad create mode 100644 kcontrol/krdb/ad/Xdvi.ad create mode 100644 kcontrol/krdb/ad/Xpdf.ad create mode 100755 kcontrol/krdb/ad/krdb create mode 100644 kcontrol/krdb/kcmdisplayrc.upd create mode 100644 kcontrol/krdb/kcs/AtlasGreen.kcsrc create mode 100644 kcontrol/krdb/kcs/BeOS.kcsrc create mode 100644 kcontrol/krdb/kcs/BlackOnWhite.kcsrc create mode 100644 kcontrol/krdb/kcs/BlueSlate.kcsrc create mode 100644 kcontrol/krdb/kcs/CDE.kcsrc create mode 100644 kcontrol/krdb/kcs/DarkBlue.kcsrc create mode 100644 kcontrol/krdb/kcs/DesertRed.kcsrc create mode 100644 kcontrol/krdb/kcs/DigitalCDE.kcsrc create mode 100644 kcontrol/krdb/kcs/EveX.kcsrc create mode 100644 kcontrol/krdb/kcs/KDEOne.kcsrc create mode 100644 kcontrol/krdb/kcs/KDETwo.kcsrc create mode 100644 kcontrol/krdb/kcs/Keramik.kcsrc create mode 100644 kcontrol/krdb/kcs/KeramikEmerald.kcsrc create mode 100644 kcontrol/krdb/kcs/KeramikWhite.kcsrc create mode 100644 kcontrol/krdb/kcs/Makefile.am create mode 100644 kcontrol/krdb/kcs/MediaPeach.kcsrc create mode 100644 kcontrol/krdb/kcs/Next.kcsrc create mode 100644 kcontrol/krdb/kcs/PaleGray.kcsrc create mode 100644 kcontrol/krdb/kcs/Plastik.kcsrc create mode 100644 kcontrol/krdb/kcs/PointReyesGreen.kcsrc create mode 100644 kcontrol/krdb/kcs/Pumpkin.kcsrc create mode 100644 kcontrol/krdb/kcs/SolarisCDE.kcsrc create mode 100644 kcontrol/krdb/kcs/Storm.kcsrc create mode 100644 kcontrol/krdb/kcs/System.kcsrc create mode 100644 kcontrol/krdb/kcs/WhiteOnBlack.kcsrc create mode 100644 kcontrol/krdb/kcs/Windows2000.kcsrc create mode 100644 kcontrol/krdb/kcs/Windows95.kcsrc create mode 100644 kcontrol/krdb/kcs/WindowsXP.kcsrc create mode 100644 kcontrol/krdb/kcs/YellowOnBlue.kcsrc create mode 100644 kcontrol/krdb/krdb.cpp create mode 100644 kcontrol/krdb/krdb.h create mode 100644 kcontrol/krdb/pics/Makefile.am create mode 100644 kcontrol/krdb/pics/lo-energy.png create mode 100644 kcontrol/krdb/pics/logo.png create mode 100644 kcontrol/krdb/pics/mini-world.png create mode 100644 kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png create mode 100644 kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.xml create mode 100644 kcontrol/krdb/themes/HighContrastDark-big/Makefile.am create mode 100644 kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png create mode 100644 kcontrol/krdb/themes/HighContrastDark/HighContrastDark.xml create mode 100644 kcontrol/krdb/themes/HighContrastDark/Makefile.am create mode 100644 kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png create mode 100644 kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.xml create mode 100644 kcontrol/krdb/themes/HighContrastLight-big/Makefile.am create mode 100644 kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png create mode 100644 kcontrol/krdb/themes/HighContrastLight/HighContrastLight.xml create mode 100644 kcontrol/krdb/themes/HighContrastLight/Makefile.am create mode 100644 kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png create mode 100644 kcontrol/krdb/themes/KDE_Classic/KDE_Classic.xml create mode 100644 kcontrol/krdb/themes/KDE_Classic/Makefile.am create mode 100644 kcontrol/krdb/themes/Keramik/Keramik.preview.png create mode 100644 kcontrol/krdb/themes/Keramik/Keramik.xml create mode 100644 kcontrol/krdb/themes/Keramik/Makefile.am create mode 100644 kcontrol/krdb/themes/Makefile.am create mode 100644 kcontrol/krdb/themes/Plastik/Makefile.am create mode 100644 kcontrol/krdb/themes/Plastik/Plastik.preview.png create mode 100644 kcontrol/krdb/themes/Plastik/Plastik.xml create mode 100644 kcontrol/krdb/themes/Platinum/Makefile.am create mode 100644 kcontrol/krdb/themes/Platinum/Platinum.preview.png create mode 100644 kcontrol/krdb/themes/Platinum/Platinum.xml create mode 100644 kcontrol/krdb/themes/Redmond/Makefile.am create mode 100644 kcontrol/krdb/themes/Redmond/Redmond.preview.png create mode 100644 kcontrol/krdb/themes/Redmond/Redmond.xml create mode 100644 kcontrol/krdb/themes/Sunshine/Makefile.am create mode 100644 kcontrol/krdb/themes/Sunshine/Sunshine.preview.png create mode 100644 kcontrol/krdb/themes/Sunshine/Sunshine.xml create mode 100644 kcontrol/krdb/themes/YellowOnBlue-big/Makefile.am create mode 100644 kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png create mode 100644 kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.xml create mode 100644 kcontrol/krdb/themes/YellowOnBlue/Makefile.am create mode 100644 kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png create mode 100644 kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.xml create mode 100644 kcontrol/kthememanager/Makefile.am create mode 100644 kcontrol/kthememanager/NEWS create mode 100644 kcontrol/kthememanager/README create mode 100644 kcontrol/kthememanager/TODO create mode 100644 kcontrol/kthememanager/installktheme.desktop create mode 100755 kcontrol/kthememanager/kdeinstallktheme create mode 100644 kcontrol/kthememanager/knewthemedlg.cpp create mode 100644 kcontrol/kthememanager/knewthemedlg.h create mode 100644 kcontrol/kthememanager/ktheme.cpp create mode 100644 kcontrol/kthememanager/ktheme.h create mode 100644 kcontrol/kthememanager/kthemedlg.ui create mode 100644 kcontrol/kthememanager/kthemedlg.ui.h create mode 100644 kcontrol/kthememanager/kthememanager.cpp create mode 100644 kcontrol/kthememanager/kthememanager.desktop create mode 100644 kcontrol/kthememanager/kthememanager.h create mode 100644 kcontrol/kthememanager/newthemewidget.ui create mode 100644 kcontrol/kthememanager/x-ktheme.desktop create mode 100644 kcontrol/launch/Makefile.am create mode 100644 kcontrol/launch/kcmlaunch.cpp create mode 100644 kcontrol/launch/kcmlaunch.desktop create mode 100644 kcontrol/launch/kcmlaunch.h create mode 100644 kcontrol/locale/AUTHORS create mode 100644 kcontrol/locale/Makefile.am create mode 100644 kcontrol/locale/TIMEZONES create mode 100644 kcontrol/locale/default/Makefile.am create mode 100644 kcontrol/locale/default/entry.desktop create mode 100644 kcontrol/locale/kcmlocale.cpp create mode 100644 kcontrol/locale/kcmlocale.h create mode 100644 kcontrol/locale/klocalesample.cpp create mode 100644 kcontrol/locale/klocalesample.h create mode 100644 kcontrol/locale/language.desktop create mode 100644 kcontrol/locale/localemon.cpp create mode 100644 kcontrol/locale/localemon.h create mode 100644 kcontrol/locale/localenum.cpp create mode 100644 kcontrol/locale/localenum.h create mode 100644 kcontrol/locale/localeother.cpp create mode 100644 kcontrol/locale/localeother.h create mode 100644 kcontrol/locale/localetime.cpp create mode 100644 kcontrol/locale/localetime.h create mode 100644 kcontrol/locale/main.cpp create mode 100644 kcontrol/locale/pics/Makefile.am create mode 100644 kcontrol/locale/pics/background.png create mode 100644 kcontrol/locale/toplevel.cpp create mode 100644 kcontrol/locale/toplevel.h create mode 100644 kcontrol/nics/AUTHORS create mode 100644 kcontrol/nics/Makefile.am create mode 100644 kcontrol/nics/configure.in.in create mode 100644 kcontrol/nics/nic.cpp create mode 100644 kcontrol/nics/nic.desktop create mode 100644 kcontrol/nics/nic.h create mode 100644 kcontrol/performance/Makefile.am create mode 100644 kcontrol/performance/kcmkonqyperformance.desktop create mode 100644 kcontrol/performance/kcmperformance.cpp create mode 100644 kcontrol/performance/kcmperformance.desktop create mode 100644 kcontrol/performance/kcmperformance.h create mode 100644 kcontrol/performance/konqueror.cpp create mode 100644 kcontrol/performance/konqueror.h create mode 100644 kcontrol/performance/konqueror_ui.ui create mode 100644 kcontrol/performance/system.cpp create mode 100644 kcontrol/performance/system.h create mode 100644 kcontrol/performance/system_ui.ui create mode 100644 kcontrol/pics/Makefile.am create mode 100644 kcontrol/pics/cr128-app-access.png create mode 100644 kcontrol/pics/cr128-app-arts.png create mode 100644 kcontrol/pics/cr128-app-background.png create mode 100644 kcontrol/pics/cr128-app-bell.png create mode 100644 kcontrol/pics/cr128-app-cache.png create mode 100644 kcontrol/pics/cr128-app-clock.png create mode 100644 kcontrol/pics/cr128-app-colors.png create mode 100644 kcontrol/pics/cr128-app-date.png create mode 100644 kcontrol/pics/cr128-app-energy.png create mode 100644 kcontrol/pics/cr128-app-energy_star.png create mode 100644 kcontrol/pics/cr128-app-filetypes.png create mode 100644 kcontrol/pics/cr128-app-fonts.png create mode 100644 kcontrol/pics/cr128-app-help_index.png create mode 100644 kcontrol/pics/cr128-app-hwinfo.png create mode 100644 kcontrol/pics/cr128-app-kcmdevices.png create mode 100644 kcontrol/pics/cr128-app-kcmdf.png create mode 100644 kcontrol/pics/cr128-app-kcmkwm.png create mode 100644 kcontrol/pics/cr128-app-kcmmemory.png create mode 100644 kcontrol/pics/cr128-app-kcmpartitions.png create mode 100644 kcontrol/pics/cr128-app-kcmpci.png create mode 100644 kcontrol/pics/cr128-app-kdmconfig.png create mode 100644 kcontrol/pics/cr128-app-key_bindings.png create mode 100644 kcontrol/pics/cr128-app-kscreensaver.png create mode 100644 kcontrol/pics/cr128-app-kthememgr.png create mode 100644 kcontrol/pics/cr128-app-locale.png create mode 100644 kcontrol/pics/cr128-app-looknfeel.png create mode 100644 kcontrol/pics/cr128-app-multimedia.png create mode 100644 kcontrol/pics/cr128-app-personal.png create mode 100644 kcontrol/pics/cr128-app-proxy.png create mode 100644 kcontrol/pics/cr128-app-samba.png create mode 100644 kcontrol/pics/cr128-app-stylesheet.png create mode 100644 kcontrol/pics/cr128-device-laptop.png create mode 100644 kcontrol/pics/cr16-app-access.png create mode 100644 kcontrol/pics/cr16-app-agent.png create mode 100644 kcontrol/pics/cr16-app-arts.png create mode 100644 kcontrol/pics/cr16-app-background.png create mode 100644 kcontrol/pics/cr16-app-bell.png create mode 100644 kcontrol/pics/cr16-app-cache.png create mode 100644 kcontrol/pics/cr16-app-clock.png create mode 100644 kcontrol/pics/cr16-app-colors.png create mode 100644 kcontrol/pics/cr16-app-cookie.png create mode 100644 kcontrol/pics/cr16-app-date.png create mode 100644 kcontrol/pics/cr16-app-energy.png create mode 100644 kcontrol/pics/cr16-app-energy_star.png create mode 100644 kcontrol/pics/cr16-app-enhanced_browsing.png create mode 100644 kcontrol/pics/cr16-app-filetypes.png create mode 100644 kcontrol/pics/cr16-app-fonts.png create mode 100644 kcontrol/pics/cr16-app-help_index.png create mode 100644 kcontrol/pics/cr16-app-hwinfo.png create mode 100644 kcontrol/pics/cr16-app-icons.png create mode 100644 kcontrol/pics/cr16-app-iconthemes.png create mode 100644 kcontrol/pics/cr16-app-ieee1394.png create mode 100644 kcontrol/pics/cr16-app-input_devices_settings.png create mode 100644 kcontrol/pics/cr16-app-kcmdevices.png create mode 100644 kcontrol/pics/cr16-app-kcmkicker.png create mode 100644 kcontrol/pics/cr16-app-kcmkwm.png create mode 100644 kcontrol/pics/cr16-app-kcmmemory.png create mode 100644 kcontrol/pics/cr16-app-kcmmidi.png create mode 100644 kcontrol/pics/cr16-app-kcmpartitions.png create mode 100644 kcontrol/pics/cr16-app-kcmpci.png create mode 100644 kcontrol/pics/cr16-app-kcmprocessor.png create mode 100644 kcontrol/pics/cr16-app-kcmscsi.png create mode 100644 kcontrol/pics/cr16-app-kcmsound.png create mode 100644 kcontrol/pics/cr16-app-kcmsystem.png create mode 100644 kcontrol/pics/cr16-app-kcmx.png create mode 100644 kcontrol/pics/cr16-app-kdmconfig.png create mode 100644 kcontrol/pics/cr16-app-key_bindings.png create mode 100644 kcontrol/pics/cr16-app-keyboard.png create mode 100644 kcontrol/pics/cr16-app-keyboard_layout.png create mode 100644 kcontrol/pics/cr16-app-knotify.png create mode 100644 kcontrol/pics/cr16-app-kscreensaver.png create mode 100644 kcontrol/pics/cr16-app-kthememgr.png create mode 100644 kcontrol/pics/cr16-app-locale.png create mode 100644 kcontrol/pics/cr16-app-looknfeel.png create mode 100644 kcontrol/pics/cr16-app-multimedia.png create mode 100644 kcontrol/pics/cr16-app-panel_settings.png create mode 100644 kcontrol/pics/cr16-app-personal.png create mode 100644 kcontrol/pics/cr16-app-proxy.png create mode 100644 kcontrol/pics/cr16-app-samba.png create mode 100644 kcontrol/pics/cr16-app-style.png create mode 100644 kcontrol/pics/cr16-app-stylesheet.png create mode 100644 kcontrol/pics/cr16-app-usb.png create mode 100644 kcontrol/pics/cr16-device-laptop.png create mode 100644 kcontrol/pics/cr22-app-access.png create mode 100644 kcontrol/pics/cr22-app-agent.png create mode 100644 kcontrol/pics/cr22-app-arts.png create mode 100644 kcontrol/pics/cr22-app-background.png create mode 100644 kcontrol/pics/cr22-app-bell.png create mode 100644 kcontrol/pics/cr22-app-cache.png create mode 100644 kcontrol/pics/cr22-app-colors.png create mode 100644 kcontrol/pics/cr22-app-cookie.png create mode 100644 kcontrol/pics/cr22-app-date.png create mode 100644 kcontrol/pics/cr22-app-energy.png create mode 100644 kcontrol/pics/cr22-app-enhanced_browsing.png create mode 100644 kcontrol/pics/cr22-app-filetypes.png create mode 100644 kcontrol/pics/cr22-app-fonts.png create mode 100644 kcontrol/pics/cr22-app-hwinfo.png create mode 100644 kcontrol/pics/cr22-app-icons.png create mode 100644 kcontrol/pics/cr22-app-iconthemes.png create mode 100644 kcontrol/pics/cr22-app-ieee1394.png create mode 100644 kcontrol/pics/cr22-app-kcmdevices.png create mode 100644 kcontrol/pics/cr22-app-kcmkicker.png create mode 100644 kcontrol/pics/cr22-app-kcmkwm.png create mode 100644 kcontrol/pics/cr22-app-kcmx.png create mode 100644 kcontrol/pics/cr22-app-kdmconfig.png create mode 100644 kcontrol/pics/cr22-app-key_bindings.png create mode 100644 kcontrol/pics/cr22-app-keyboard.png create mode 100644 kcontrol/pics/cr22-app-kscreensaver.png create mode 100644 kcontrol/pics/cr22-app-kthememgr.png create mode 100644 kcontrol/pics/cr22-app-locale.png create mode 100644 kcontrol/pics/cr22-app-personal.png create mode 100644 kcontrol/pics/cr22-app-proxy.png create mode 100644 kcontrol/pics/cr22-app-samba.png create mode 100644 kcontrol/pics/cr22-app-style.png create mode 100644 kcontrol/pics/cr22-app-stylesheet.png create mode 100644 kcontrol/pics/cr22-device-laptop.png create mode 100644 kcontrol/pics/cr32-app-access.png create mode 100644 kcontrol/pics/cr32-app-agent.png create mode 100644 kcontrol/pics/cr32-app-arts.png create mode 100644 kcontrol/pics/cr32-app-background.png create mode 100644 kcontrol/pics/cr32-app-bell.png create mode 100644 kcontrol/pics/cr32-app-cache.png create mode 100644 kcontrol/pics/cr32-app-clock.png create mode 100644 kcontrol/pics/cr32-app-colors.png create mode 100644 kcontrol/pics/cr32-app-cookie.png create mode 100644 kcontrol/pics/cr32-app-date.png create mode 100644 kcontrol/pics/cr32-app-energy.png create mode 100644 kcontrol/pics/cr32-app-energy_star.png create mode 100644 kcontrol/pics/cr32-app-enhanced_browsing.png create mode 100644 kcontrol/pics/cr32-app-filetypes.png create mode 100644 kcontrol/pics/cr32-app-fonts.png create mode 100644 kcontrol/pics/cr32-app-help_index.png create mode 100644 kcontrol/pics/cr32-app-hwinfo.png create mode 100644 kcontrol/pics/cr32-app-icons.png create mode 100644 kcontrol/pics/cr32-app-iconthemes.png create mode 100644 kcontrol/pics/cr32-app-ieee1394.png create mode 100644 kcontrol/pics/cr32-app-input_devices_settings.png create mode 100644 kcontrol/pics/cr32-app-kcmdevices.png create mode 100644 kcontrol/pics/cr32-app-kcmdrkonqi.png create mode 100644 kcontrol/pics/cr32-app-kcmkicker.png create mode 100644 kcontrol/pics/cr32-app-kcmkwm.png create mode 100644 kcontrol/pics/cr32-app-kcmmemory.png create mode 100644 kcontrol/pics/cr32-app-kcmmidi.png create mode 100644 kcontrol/pics/cr32-app-kcmpartitions.png create mode 100644 kcontrol/pics/cr32-app-kcmpci.png create mode 100644 kcontrol/pics/cr32-app-kcmprocessor.png create mode 100644 kcontrol/pics/cr32-app-kcmscsi.png create mode 100644 kcontrol/pics/cr32-app-kcmsound.png create mode 100644 kcontrol/pics/cr32-app-kcmsystem.png create mode 100644 kcontrol/pics/cr32-app-kcmx.png create mode 100644 kcontrol/pics/cr32-app-kdmconfig.png create mode 100644 kcontrol/pics/cr32-app-key_bindings.png create mode 100644 kcontrol/pics/cr32-app-keyboard.png create mode 100644 kcontrol/pics/cr32-app-keyboard_layout.png create mode 100644 kcontrol/pics/cr32-app-knotify.png create mode 100644 kcontrol/pics/cr32-app-kscreensaver.png create mode 100644 kcontrol/pics/cr32-app-kthememgr.png create mode 100644 kcontrol/pics/cr32-app-locale.png create mode 100644 kcontrol/pics/cr32-app-looknfeel.png create mode 100644 kcontrol/pics/cr32-app-multimedia.png create mode 100644 kcontrol/pics/cr32-app-personal.png create mode 100644 kcontrol/pics/cr32-app-proxy.png create mode 100644 kcontrol/pics/cr32-app-samba.png create mode 100644 kcontrol/pics/cr32-app-style.png create mode 100644 kcontrol/pics/cr32-app-stylesheet.png create mode 100644 kcontrol/pics/cr32-app-usb.png create mode 100644 kcontrol/pics/cr32-device-laptop.png create mode 100644 kcontrol/pics/cr48-app-access.png create mode 100644 kcontrol/pics/cr48-app-agent.png create mode 100644 kcontrol/pics/cr48-app-arts.png create mode 100644 kcontrol/pics/cr48-app-background.png create mode 100644 kcontrol/pics/cr48-app-bell.png create mode 100644 kcontrol/pics/cr48-app-cache.png create mode 100644 kcontrol/pics/cr48-app-clock.png create mode 100644 kcontrol/pics/cr48-app-colors.png create mode 100644 kcontrol/pics/cr48-app-cookie.png create mode 100644 kcontrol/pics/cr48-app-date.png create mode 100644 kcontrol/pics/cr48-app-energy.png create mode 100644 kcontrol/pics/cr48-app-energy_star.png create mode 100644 kcontrol/pics/cr48-app-enhanced_browsing.png create mode 100644 kcontrol/pics/cr48-app-filetypes.png create mode 100644 kcontrol/pics/cr48-app-fonts.png create mode 100644 kcontrol/pics/cr48-app-help_index.png create mode 100644 kcontrol/pics/cr48-app-hwinfo.png create mode 100644 kcontrol/pics/cr48-app-icons.png create mode 100644 kcontrol/pics/cr48-app-iconthemes.png create mode 100644 kcontrol/pics/cr48-app-ieee1394.png create mode 100644 kcontrol/pics/cr48-app-input_devices_settings.png create mode 100644 kcontrol/pics/cr48-app-kcmdevices.png create mode 100644 kcontrol/pics/cr48-app-kcmdf.png create mode 100644 kcontrol/pics/cr48-app-kcmdrkonqi.png create mode 100644 kcontrol/pics/cr48-app-kcmkwm.png create mode 100644 kcontrol/pics/cr48-app-kcmmemory.png create mode 100644 kcontrol/pics/cr48-app-kcmmidi.png create mode 100644 kcontrol/pics/cr48-app-kcmopengl.png create mode 100644 kcontrol/pics/cr48-app-kcmpartitions.png create mode 100644 kcontrol/pics/cr48-app-kcmpci.png create mode 100644 kcontrol/pics/cr48-app-kcmprocessor.png create mode 100644 kcontrol/pics/cr48-app-kcmscsi.png create mode 100644 kcontrol/pics/cr48-app-kcmsystem.png create mode 100644 kcontrol/pics/cr48-app-kcmx.png create mode 100644 kcontrol/pics/cr48-app-kdmconfig.png create mode 100644 kcontrol/pics/cr48-app-key_bindings.png create mode 100644 kcontrol/pics/cr48-app-keyboard.png create mode 100644 kcontrol/pics/cr48-app-keyboard_layout.png create mode 100644 kcontrol/pics/cr48-app-knotify.png create mode 100644 kcontrol/pics/cr48-app-kscreensaver.png create mode 100644 kcontrol/pics/cr48-app-kthememgr.png create mode 100644 kcontrol/pics/cr48-app-locale.png create mode 100644 kcontrol/pics/cr48-app-looknfeel.png create mode 100644 kcontrol/pics/cr48-app-multimedia.png create mode 100644 kcontrol/pics/cr48-app-personal.png create mode 100644 kcontrol/pics/cr48-app-proxy.png create mode 100644 kcontrol/pics/cr48-app-samba.png create mode 100644 kcontrol/pics/cr48-app-style.png create mode 100644 kcontrol/pics/cr48-app-stylesheet.png create mode 100644 kcontrol/pics/cr48-app-usb.png create mode 100644 kcontrol/pics/cr48-device-laptop.png create mode 100644 kcontrol/pics/cr64-app-access.png create mode 100644 kcontrol/pics/cr64-app-arts.png create mode 100644 kcontrol/pics/cr64-app-background.png create mode 100644 kcontrol/pics/cr64-app-bell.png create mode 100644 kcontrol/pics/cr64-app-cache.png create mode 100644 kcontrol/pics/cr64-app-clock.png create mode 100644 kcontrol/pics/cr64-app-colors.png create mode 100644 kcontrol/pics/cr64-app-cookie.png create mode 100644 kcontrol/pics/cr64-app-date.png create mode 100644 kcontrol/pics/cr64-app-energy.png create mode 100644 kcontrol/pics/cr64-app-energy_star.png create mode 100644 kcontrol/pics/cr64-app-enhanced_browsing.png create mode 100644 kcontrol/pics/cr64-app-filetypes.png create mode 100644 kcontrol/pics/cr64-app-fonts.png create mode 100644 kcontrol/pics/cr64-app-help_index.png create mode 100644 kcontrol/pics/cr64-app-hwinfo.png create mode 100644 kcontrol/pics/cr64-app-icons.png create mode 100644 kcontrol/pics/cr64-app-ieee1394.png create mode 100644 kcontrol/pics/cr64-app-kcmdevices.png create mode 100644 kcontrol/pics/cr64-app-kcmdf.png create mode 100644 kcontrol/pics/cr64-app-kcmkwm.png create mode 100644 kcontrol/pics/cr64-app-kcmmemory.png create mode 100644 kcontrol/pics/cr64-app-kcmpartitions.png create mode 100644 kcontrol/pics/cr64-app-kcmpci.png create mode 100644 kcontrol/pics/cr64-app-kcmx.png create mode 100644 kcontrol/pics/cr64-app-kdmconfig.png create mode 100644 kcontrol/pics/cr64-app-key_bindings.png create mode 100644 kcontrol/pics/cr64-app-knotify.png create mode 100644 kcontrol/pics/cr64-app-kscreensaver.png create mode 100644 kcontrol/pics/cr64-app-kthememgr.png create mode 100644 kcontrol/pics/cr64-app-locale.png create mode 100644 kcontrol/pics/cr64-app-looknfeel.png create mode 100644 kcontrol/pics/cr64-app-multimedia.png create mode 100644 kcontrol/pics/cr64-app-personal.png create mode 100644 kcontrol/pics/cr64-app-proxy.png create mode 100644 kcontrol/pics/cr64-app-samba.png create mode 100644 kcontrol/pics/cr64-app-style.png create mode 100644 kcontrol/pics/cr64-app-stylesheet.png create mode 100644 kcontrol/pics/cr64-device-laptop.png create mode 100644 kcontrol/pics/crsc-app-access.svgz create mode 100644 kcontrol/pics/crsc-app-arts.svgz create mode 100644 kcontrol/pics/crsc-app-background.svgz create mode 100644 kcontrol/pics/crsc-app-bell.svgz create mode 100644 kcontrol/pics/crsc-app-cache.svgz create mode 100644 kcontrol/pics/crsc-app-colors.svgz create mode 100644 kcontrol/pics/crsc-app-date.svgz create mode 100644 kcontrol/pics/crsc-app-energy.svgz create mode 100644 kcontrol/pics/crsc-app-filetypes.svgz create mode 100644 kcontrol/pics/crsc-app-fonts.svgz create mode 100644 kcontrol/pics/crsc-app-hwinfo.svgz create mode 100644 kcontrol/pics/crsc-app-ieee1394.svgz create mode 100644 kcontrol/pics/crsc-app-kcmdevices.svgz create mode 100644 kcontrol/pics/crsc-app-kcmkwm.svgz create mode 100644 kcontrol/pics/crsc-app-kcmx.svgz create mode 100644 kcontrol/pics/crsc-app-locale.svgz create mode 100644 kcontrol/pics/crsc-app-samba.svgz create mode 100644 kcontrol/pics/crsc-app-stylesheet.svgz create mode 100644 kcontrol/pics/crsc-device-laptop.svgz create mode 100644 kcontrol/privacy/Makefile.am create mode 100644 kcontrol/privacy/kcmprivacydialog.ui create mode 100644 kcontrol/privacy/kprivacymanager.cpp create mode 100644 kcontrol/privacy/kprivacymanager.h create mode 100644 kcontrol/privacy/kprivacysettings.ui create mode 100644 kcontrol/privacy/privacy.cpp create mode 100644 kcontrol/privacy/privacy.desktop create mode 100644 kcontrol/privacy/privacy.h create mode 100644 kcontrol/randr/Makefile.am create mode 100644 kcontrol/randr/TODO create mode 100644 kcontrol/randr/configure.in.in create mode 100644 kcontrol/randr/krandrapp.cpp create mode 100644 kcontrol/randr/krandrapp.h create mode 100644 kcontrol/randr/krandrinithack.cpp create mode 100644 kcontrol/randr/krandrmodule.cpp create mode 100644 kcontrol/randr/krandrmodule.h create mode 100644 kcontrol/randr/krandrpassivepopup.cpp create mode 100644 kcontrol/randr/krandrpassivepopup.h create mode 100644 kcontrol/randr/krandrtray.cpp create mode 100644 kcontrol/randr/krandrtray.desktop create mode 100644 kcontrol/randr/krandrtray.h create mode 100644 kcontrol/randr/ktimerdialog.cpp create mode 100644 kcontrol/randr/ktimerdialog.h create mode 100644 kcontrol/randr/main.cpp create mode 100644 kcontrol/randr/randr.cpp create mode 100644 kcontrol/randr/randr.desktop create mode 100644 kcontrol/randr/randr.h create mode 100644 kcontrol/samba/AUTHORS create mode 100644 kcontrol/samba/Makefile.am create mode 100644 kcontrol/samba/kcmsambaimports.cpp create mode 100644 kcontrol/samba/kcmsambaimports.h create mode 100644 kcontrol/samba/kcmsambalog.cpp create mode 100644 kcontrol/samba/kcmsambalog.h create mode 100644 kcontrol/samba/kcmsambastatistics.cpp create mode 100644 kcontrol/samba/kcmsambastatistics.h create mode 100644 kcontrol/samba/ksmbstatus.cpp create mode 100644 kcontrol/samba/ksmbstatus.h create mode 100644 kcontrol/samba/main.cpp create mode 100644 kcontrol/samba/smbstatus.desktop create mode 100644 kcontrol/screensaver/Makefile.am create mode 100644 kcontrol/screensaver/advanceddialog.cpp create mode 100644 kcontrol/screensaver/advanceddialog.h create mode 100644 kcontrol/screensaver/advanceddialogimpl.ui create mode 100644 kcontrol/screensaver/category_list create mode 100644 kcontrol/screensaver/configure.in.in create mode 100644 kcontrol/screensaver/kssmonitor.h create mode 100644 kcontrol/screensaver/kswidget.cpp create mode 100644 kcontrol/screensaver/kswidget.h create mode 100644 kcontrol/screensaver/saverconfig.cpp create mode 100644 kcontrol/screensaver/saverconfig.h create mode 100644 kcontrol/screensaver/saverlist.cpp create mode 100644 kcontrol/screensaver/saverlist.h create mode 100644 kcontrol/screensaver/screensaver.desktop create mode 100644 kcontrol/screensaver/scrnsave.cpp create mode 100644 kcontrol/screensaver/scrnsave.h create mode 100644 kcontrol/screensaver/testwin.cpp create mode 100644 kcontrol/screensaver/testwin.h create mode 100644 kcontrol/smartcard/Makefile.am create mode 100644 kcontrol/smartcard/configure.in.in create mode 100644 kcontrol/smartcard/nosmartcardbase.ui create mode 100644 kcontrol/smartcard/smartcard.cpp create mode 100644 kcontrol/smartcard/smartcard.desktop create mode 100644 kcontrol/smartcard/smartcard.h create mode 100644 kcontrol/smartcard/smartcardbase.ui create mode 100644 kcontrol/smserver/Makefile.am create mode 100644 kcontrol/smserver/kcmsmserver.cpp create mode 100644 kcontrol/smserver/kcmsmserver.desktop create mode 100644 kcontrol/smserver/kcmsmserver.h create mode 100644 kcontrol/smserver/smserverconfigdlg.ui create mode 100644 kcontrol/smserver/smserverconfigimpl.cpp create mode 100644 kcontrol/smserver/smserverconfigimpl.h create mode 100644 kcontrol/spellchecking/Makefile.am create mode 100644 kcontrol/spellchecking/spellchecking.cpp create mode 100644 kcontrol/spellchecking/spellchecking.desktop create mode 100644 kcontrol/spellchecking/spellchecking.h create mode 100644 kcontrol/structure create mode 100644 kcontrol/style/Makefile.am create mode 100644 kcontrol/style/kcmstyle.cpp create mode 100644 kcontrol/style/kcmstyle.h create mode 100644 kcontrol/style/keramik/Makefile.am create mode 100644 kcontrol/style/keramik/keramikconf.cpp create mode 100644 kcontrol/style/keramik/keramikconf.h create mode 100644 kcontrol/style/main.cpp create mode 100644 kcontrol/style/menupreview.cpp create mode 100644 kcontrol/style/menupreview.h create mode 100644 kcontrol/style/style.desktop create mode 100644 kcontrol/style/styleconfdialog.cpp create mode 100644 kcontrol/style/styleconfdialog.h create mode 100644 kcontrol/style/stylepreview.ui create mode 100644 kcontrol/style/stylepreview.ui.h create mode 100644 kcontrol/taskbar/Makefile.am create mode 100644 kcontrol/taskbar/kcmtaskbar.cpp create mode 100644 kcontrol/taskbar/kcmtaskbar.desktop create mode 100644 kcontrol/taskbar/kcmtaskbar.h create mode 100644 kcontrol/taskbar/kcmtaskbarui.ui create mode 100644 kcontrol/taskbar/uninstall.desktop create mode 100644 kcontrol/usbview/Makefile.am create mode 100644 kcontrol/usbview/classes.i18n create mode 100644 kcontrol/usbview/configure.in.in create mode 100644 kcontrol/usbview/kcmusb.cpp create mode 100644 kcontrol/usbview/kcmusb.desktop create mode 100644 kcontrol/usbview/kcmusb.h create mode 100644 kcontrol/usbview/usb.ids create mode 100644 kcontrol/usbview/usbdb.cpp create mode 100644 kcontrol/usbview/usbdb.h create mode 100644 kcontrol/usbview/usbdevices.cpp create mode 100644 kcontrol/usbview/usbdevices.h create mode 100644 kcontrol/view1394/Makefile.am create mode 100644 kcontrol/view1394/README create mode 100644 kcontrol/view1394/configure.in.in create mode 100644 kcontrol/view1394/kcmview1394.desktop create mode 100644 kcontrol/view1394/oui.db create mode 100644 kcontrol/view1394/view1394.cpp create mode 100644 kcontrol/view1394/view1394.h create mode 100644 kcontrol/view1394/view1394widget.ui create mode 100644 kcontrol/xinerama/Makefile.am create mode 100644 kcontrol/xinerama/kcmxinerama.cpp create mode 100644 kcontrol/xinerama/kcmxinerama.h create mode 100644 kcontrol/xinerama/xinerama.desktop create mode 100644 kcontrol/xinerama/xineramawidget.ui create mode 100644 kcontrol/xinerama/xineramawidget.ui.h create mode 100644 kdcop/Makefile.am create mode 100644 kdcop/README create mode 100644 kdcop/kdcop.cpp create mode 100644 kdcop/kdcoplistview.cpp create mode 100644 kdcop/kdcoplistview.h create mode 100644 kdcop/kdcopui.rc create mode 100644 kdcop/kdcopview.ui create mode 100644 kdcop/kdcopwindow.cpp create mode 100644 kdcop/kdcopwindow.h create mode 100644 kde.pamd create mode 100644 kde3 create mode 100644 kdebase.lsm create mode 100644 kdebugdialog/Makefile.am create mode 100644 kdebugdialog/README create mode 100644 kdebugdialog/kabstractdebugdialog.cpp create mode 100644 kdebugdialog/kabstractdebugdialog.h create mode 100644 kdebugdialog/kdebugdialog.cpp create mode 100644 kdebugdialog/kdebugdialog.h create mode 100644 kdebugdialog/klistdebugdialog.cpp create mode 100644 kdebugdialog/klistdebugdialog.h create mode 100644 kdebugdialog/main.cpp create mode 100644 kdeeject/Makefile.am create mode 100755 kdeeject/kdeeject create mode 100644 kdepasswd/LICENSE.readme create mode 100644 kdepasswd/Makefile.am create mode 100644 kdepasswd/README create mode 100644 kdepasswd/kcm/Makefile.am create mode 100644 kdepasswd/kcm/README create mode 100644 kdepasswd/kcm/chfacedlg.cpp create mode 100644 kdepasswd/kcm/chfacedlg.h create mode 100644 kdepasswd/kcm/chfnprocess.cpp create mode 100644 kdepasswd/kcm/chfnprocess.h create mode 100644 kdepasswd/kcm/kcm_useraccount.desktop create mode 100644 kdepasswd/kcm/kcm_useraccount.kcfg create mode 100644 kdepasswd/kcm/kcm_useraccount_pass.kcfg create mode 100644 kdepasswd/kcm/main.cpp create mode 100644 kdepasswd/kcm/main.h create mode 100644 kdepasswd/kcm/main_widget.ui create mode 100644 kdepasswd/kcm/pass.kcfgc create mode 100644 kdepasswd/kcm/pics/Apple.png create mode 100644 kdepasswd/kcm/pics/BeachBall.png create mode 100644 kdepasswd/kcm/pics/Blowfish.png create mode 100644 kdepasswd/kcm/pics/Bug.png create mode 100644 kdepasswd/kcm/pics/Butterfly.png create mode 100644 kdepasswd/kcm/pics/CREDITS create mode 100644 kdepasswd/kcm/pics/Car.png create mode 100644 kdepasswd/kcm/pics/Cow.png create mode 100644 kdepasswd/kcm/pics/Daemon.png create mode 100644 kdepasswd/kcm/pics/Dog.png create mode 100644 kdepasswd/kcm/pics/Elephant.png create mode 100644 kdepasswd/kcm/pics/Flower.png create mode 100644 kdepasswd/kcm/pics/Frog.png create mode 100644 kdepasswd/kcm/pics/Ghost.png create mode 100644 kdepasswd/kcm/pics/Guitar.png create mode 100644 kdepasswd/kcm/pics/Heart.png create mode 100644 kdepasswd/kcm/pics/Konqui.png create mode 100644 kdepasswd/kcm/pics/Lion.png create mode 100644 kdepasswd/kcm/pics/Makefile.am create mode 100644 kdepasswd/kcm/pics/Monkey.png create mode 100644 kdepasswd/kcm/pics/Penguin.png create mode 100644 kdepasswd/kcm/pics/Pig.png create mode 100644 kdepasswd/kcm/pics/Rabbit.png create mode 100644 kdepasswd/kcm/pics/Ring.png create mode 100644 kdepasswd/kcm/pics/Scream.png create mode 100644 kdepasswd/kcm/pics/Shark.png create mode 100644 kdepasswd/kcm/pics/Splash.png create mode 100644 kdepasswd/kcm/pics/Star.png create mode 100644 kdepasswd/kcm/pics/Teddybear.png create mode 100644 kdepasswd/kcm/pics/Turtle.png create mode 100644 kdepasswd/kcm/settings.kcfgc create mode 100644 kdepasswd/kdepasswd.cpp create mode 100644 kdepasswd/kdepasswd.desktop create mode 100644 kdepasswd/passwd.cpp create mode 100644 kdepasswd/passwd.h create mode 100644 kdepasswd/passwddlg.cpp create mode 100644 kdepasswd/passwddlg.h create mode 100644 kdeprint/Makefile.am create mode 100644 kdeprint/configure.in.in create mode 100644 kdeprint/descriptions/Makefile.am create mode 100644 kdeprint/descriptions/printers.cpp create mode 100755 kdeprint/descriptions/readppd create mode 100644 kdeprint/descriptions/sortthem.cpp create mode 100644 kdeprint/kdeprint_part/Makefile.am create mode 100644 kdeprint/kdeprint_part/kdeprint_part.desktop create mode 100644 kdeprint/kdeprint_part/kdeprint_part.rc create mode 100644 kdeprint/kdeprint_part/printpart.cpp create mode 100644 kdeprint/kdeprint_part/printpart.h create mode 100644 kdeprint/kdeprintfax/Makefile.am create mode 100755 kdeprint/kdeprintfax/anytops create mode 100644 kdeprint/kdeprintfax/conffax.cpp create mode 100644 kdeprint/kdeprintfax/conffax.h create mode 100644 kdeprint/kdeprintfax/conffilters.cpp create mode 100644 kdeprint/kdeprintfax/conffilters.h create mode 100644 kdeprint/kdeprintfax/confgeneral.cpp create mode 100644 kdeprint/kdeprintfax/confgeneral.h create mode 100644 kdeprint/kdeprintfax/configdlg.cpp create mode 100644 kdeprint/kdeprintfax/configdlg.h create mode 100644 kdeprint/kdeprintfax/confsystem.cpp create mode 100644 kdeprint/kdeprintfax/confsystem.h create mode 100644 kdeprint/kdeprintfax/cr16-action-abentry.png create mode 100644 kdeprint/kdeprintfax/defcmds.cpp create mode 100644 kdeprint/kdeprintfax/defcmds.h create mode 100644 kdeprint/kdeprintfax/faxab.cpp create mode 100644 kdeprint/kdeprintfax/faxab.h create mode 100644 kdeprint/kdeprintfax/faxctrl.cpp create mode 100644 kdeprint/kdeprintfax/faxctrl.h create mode 100644 kdeprint/kdeprintfax/faxfilters create mode 100644 kdeprint/kdeprintfax/filterdlg.cpp create mode 100644 kdeprint/kdeprintfax/filterdlg.h create mode 100644 kdeprint/kdeprintfax/hi128-app-kdeprintfax.png create mode 100644 kdeprint/kdeprintfax/hi16-app-kdeprintfax.png create mode 100644 kdeprint/kdeprintfax/hi22-app-kdeprintfax.png create mode 100644 kdeprint/kdeprintfax/hi32-app-kdeprintfax.png create mode 100644 kdeprint/kdeprintfax/hi48-app-kdeprintfax.png create mode 100644 kdeprint/kdeprintfax/hi64-app-kdeprintfax.png create mode 100644 kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz create mode 100644 kdeprint/kdeprintfax/kdeprintfax.cpp create mode 100644 kdeprint/kdeprintfax/kdeprintfax.desktop create mode 100644 kdeprint/kdeprintfax/kdeprintfax.h create mode 100644 kdeprint/kdeprintfax/kdeprintfaxui.rc create mode 100644 kdeprint/kdeprintfax/main.cpp create mode 100644 kdeprint/kjobviewer/Makefile.am create mode 100644 kdeprint/kjobviewer/hi128-app-kjobviewer.png create mode 100644 kdeprint/kjobviewer/hi16-app-kjobviewer.png create mode 100644 kdeprint/kjobviewer/hi22-app-kjobviewer.png create mode 100644 kdeprint/kjobviewer/hi32-app-kjobviewer.png create mode 100644 kdeprint/kjobviewer/hi48-app-kjobviewer.png create mode 100644 kdeprint/kjobviewer/hi64-app-kjobviewer.png create mode 100644 kdeprint/kjobviewer/hisc-app-kjobviewer.svgz create mode 100644 kdeprint/kjobviewer/kjobviewer.cpp create mode 100644 kdeprint/kjobviewer/kjobviewer.desktop create mode 100644 kdeprint/kjobviewer/kjobviewer.h create mode 100644 kdeprint/kjobviewer/kjobviewerui.rc create mode 100644 kdeprint/kjobviewer/main.cpp create mode 100644 kdeprint/kprinter/Makefile.am create mode 100644 kdeprint/kprinter/configure.in.in create mode 100644 kdeprint/kprinter/kprinter.desktop create mode 100644 kdeprint/kprinter/main.cpp create mode 100644 kdeprint/kprinter/printwrapper.cpp create mode 100644 kdeprint/kprinter/printwrapper.h create mode 100644 kdeprint/printmgr/Makefile.am create mode 100644 kdeprint/printmgr/hi128-app-printmgr.png create mode 100644 kdeprint/printmgr/hi16-app-printmgr.png create mode 100644 kdeprint/printmgr/hi22-app-printmgr.png create mode 100644 kdeprint/printmgr/hi32-app-printmgr.png create mode 100644 kdeprint/printmgr/hi48-app-printmgr.png create mode 100644 kdeprint/printmgr/hi64-app-printmgr.png create mode 100644 kdeprint/printmgr/hisc-app-printmgr.svgz create mode 100644 kdeprint/printmgr/kcmprintmgr.cpp create mode 100644 kdeprint/printmgr/kcmprintmgr.h create mode 100644 kdeprint/printmgr/printers.desktop create mode 100644 kdeprint/slave/Makefile.am create mode 100644 kdeprint/slave/kio_print.cpp create mode 100644 kdeprint/slave/kio_print.h create mode 100644 kdeprint/slave/mimetypes/Makefile.am create mode 100644 kdeprint/slave/mimetypes/class.desktop create mode 100644 kdeprint/slave/mimetypes/driver.desktop create mode 100644 kdeprint/slave/mimetypes/folder.desktop create mode 100644 kdeprint/slave/mimetypes/jobs.desktop create mode 100644 kdeprint/slave/mimetypes/manager.desktop create mode 100644 kdeprint/slave/mimetypes/printer.desktop create mode 100644 kdeprint/slave/mimetypes/printermodel.desktop create mode 100644 kdeprint/slave/print.protocol create mode 100644 kdeprint/slave/printdb.protocol create mode 100644 kdeprint/slave/templates/Makefile.am create mode 100644 kdeprint/slave/templates/bar-bottom-left.png create mode 100644 kdeprint/slave/templates/bar-bottom-middle.png create mode 100644 kdeprint/slave/templates/bar-bottom-right.png create mode 100644 kdeprint/slave/templates/bar-middle-left.png create mode 100644 kdeprint/slave/templates/bar-middle-right.png create mode 100644 kdeprint/slave/templates/bar-top-left.png create mode 100644 kdeprint/slave/templates/bar-top-middle.png create mode 100644 kdeprint/slave/templates/bar-top-right.png create mode 100644 kdeprint/slave/templates/bottom-left.png create mode 100644 kdeprint/slave/templates/bottom-middle.png create mode 100644 kdeprint/slave/templates/bottom-right.png create mode 100644 kdeprint/slave/templates/box-bottom-left.png create mode 100644 kdeprint/slave/templates/box-bottom-middle.png create mode 100644 kdeprint/slave/templates/box-bottom-right.png create mode 100644 kdeprint/slave/templates/box-centre-kdeprint.png create mode 100644 kdeprint/slave/templates/box-middle-left.png create mode 100644 kdeprint/slave/templates/box-middle-right.png create mode 100644 kdeprint/slave/templates/box-top-left.png create mode 100644 kdeprint/slave/templates/box-top-middle.png create mode 100644 kdeprint/slave/templates/box-top-right.png create mode 100644 kdeprint/slave/templates/class.template create mode 100644 kdeprint/slave/templates/driver.template create mode 100644 kdeprint/slave/templates/htmlstyles.css create mode 100644 kdeprint/slave/templates/jobs.template create mode 100644 kdeprint/slave/templates/printer.template create mode 100644 kdeprint/slave/templates/pseudo.template create mode 100644 kdeprint/slave/templates/top-left.png create mode 100644 kdeprint/slave/templates/top-middle.png create mode 100644 kdeprint/slave/templates/top-right-kdeprint.png create mode 100644 kdesktop/AUTHORS create mode 100644 kdesktop/DESIGN create mode 100644 kdesktop/KBackgroundIface.h create mode 100644 kdesktop/KDesktopIface.h create mode 100644 kdesktop/KScreensaverIface.h create mode 100644 kdesktop/Makefile.am create mode 100644 kdesktop/bgmanager.cc create mode 100644 kdesktop/bgmanager.h create mode 100644 kdesktop/configure.in.in create mode 100644 kdesktop/desktop.cc create mode 100644 kdesktop/desktop.h create mode 100644 kdesktop/init.cc create mode 100644 kdesktop/init.h create mode 100644 kdesktop/init/Home.desktop create mode 100644 kdesktop/init/Makefile.am create mode 100644 kdesktop/init/System.desktop create mode 100644 kdesktop/init/Templates/CAMERA-Device.desktop create mode 100644 kdesktop/init/Templates/CDROM-Device.desktop create mode 100644 kdesktop/init/Templates/CDWRITER-Device.desktop create mode 100644 kdesktop/init/Templates/DVDROM-Device.desktop create mode 100644 kdesktop/init/Templates/Directory.desktop create mode 100644 kdesktop/init/Templates/Floppy.desktop create mode 100644 kdesktop/init/Templates/HD.desktop create mode 100644 kdesktop/init/Templates/HTMLFile.desktop create mode 100644 kdesktop/init/Templates/HTMLFile.html create mode 100644 kdesktop/init/Templates/MO-Device.desktop create mode 100644 kdesktop/init/Templates/Makefile.am create mode 100644 kdesktop/init/Templates/NFS.desktop create mode 100644 kdesktop/init/Templates/Program.desktop create mode 100644 kdesktop/init/Templates/TextFile.desktop create mode 100644 kdesktop/init/Templates/TextFile.txt create mode 100644 kdesktop/init/Templates/URL.desktop create mode 100644 kdesktop/init/Templates/ZIP-Device.desktop create mode 100644 kdesktop/init/Templates/linkCAMERA.desktop create mode 100644 kdesktop/init/Templates/linkCDROM.desktop create mode 100644 kdesktop/init/Templates/linkCDWRITER.desktop create mode 100644 kdesktop/init/Templates/linkDVDROM.desktop create mode 100644 kdesktop/init/Templates/linkFloppy.desktop create mode 100644 kdesktop/init/Templates/linkHD.desktop create mode 100644 kdesktop/init/Templates/linkMO.desktop create mode 100644 kdesktop/init/Templates/linkNFS.desktop create mode 100644 kdesktop/init/Templates/linkProgram.desktop create mode 100644 kdesktop/init/Templates/linkURL.desktop create mode 100644 kdesktop/init/Templates/linkZIP.desktop create mode 100644 kdesktop/init/directory.autostart create mode 100644 kdesktop/init/directory.desktop create mode 100644 kdesktop/init/directory.templates create mode 100644 kdesktop/init/directory.trash create mode 100644 kdesktop/kcheckrunning.cpp create mode 100644 kdesktop/kcustommenu.cc create mode 100644 kdesktop/kcustommenu.h create mode 100644 kdesktop/kdesktop.desktop create mode 100644 kdesktop/kdesktop.kcfg create mode 100644 kdesktop/kdesktopSetAsBackground.desktop create mode 100644 kdesktop/kdesktop_custom_menu1 create mode 100644 kdesktop/kdesktop_custom_menu2 create mode 100644 kdesktop/kdesktopbindings.cpp create mode 100644 kdesktop/kdesktopsettings.kcfgc create mode 100644 kdesktop/kdesktopshadowsettings.cpp create mode 100644 kdesktop/kdesktopshadowsettings.h create mode 100644 kdesktop/kdiconview.cc create mode 100644 kdesktop/kdiconview.h create mode 100644 kdesktop/kfileividesktop.cpp create mode 100644 kdesktop/kfileividesktop.h create mode 100644 kdesktop/klaunch.kcfg create mode 100644 kdesktop/klaunchsettings.kcfgc create mode 100644 kdesktop/krootwm.cc create mode 100644 kdesktop/krootwm.h create mode 100644 kdesktop/kshadowengine.cpp create mode 100644 kdesktop/kshadowengine.h create mode 100644 kdesktop/kshadowsettings.cpp create mode 100644 kdesktop/kshadowsettings.h create mode 100644 kdesktop/kwebdesktop/Makefile.am create mode 100644 kdesktop/kwebdesktop/kwebdesktop.cpp create mode 100644 kdesktop/kwebdesktop/kwebdesktop.desktop create mode 100644 kdesktop/kwebdesktop/kwebdesktop.h create mode 100644 kdesktop/kwebdesktop/kwebdesktop.kcfg create mode 100644 kdesktop/kwebdesktop/kwebdesktopsettings.kcfgc create mode 100644 kdesktop/lock/Makefile.am create mode 100644 kdesktop/lock/autologout.cc create mode 100644 kdesktop/lock/autologout.h create mode 100644 kdesktop/lock/configure.in.in create mode 100644 kdesktop/lock/lockdlg.cc create mode 100644 kdesktop/lock/lockdlg.h create mode 100644 kdesktop/lock/lockprocess.cc create mode 100644 kdesktop/lock/lockprocess.h create mode 100644 kdesktop/lock/main.cc create mode 100644 kdesktop/lock/main.h create mode 100644 kdesktop/lockeng.cc create mode 100644 kdesktop/lockeng.h create mode 100644 kdesktop/main.cc create mode 100644 kdesktop/minicli.cpp create mode 100644 kdesktop/minicli.h create mode 100644 kdesktop/minicli_ui.ui create mode 100644 kdesktop/patterns/Makefile.am create mode 100644 kdesktop/patterns/fish.desktop create mode 100644 kdesktop/patterns/fish.png create mode 100644 kdesktop/patterns/flowers.desktop create mode 100644 kdesktop/patterns/flowers.png create mode 100644 kdesktop/patterns/night-rock.desktop create mode 100644 kdesktop/patterns/night-rock.jpg create mode 100644 kdesktop/patterns/pavement.desktop create mode 100644 kdesktop/patterns/pavement.png create mode 100644 kdesktop/patterns/rattan.desktop create mode 100644 kdesktop/patterns/rattan.png create mode 100644 kdesktop/patterns/stonewall2.desktop create mode 100644 kdesktop/patterns/stonewall2.png create mode 100644 kdesktop/patterns/triangles.desktop create mode 100644 kdesktop/patterns/triangles.png create mode 100644 kdesktop/pics/Makefile.am create mode 100644 kdesktop/pics/cr32-app-error.png create mode 100644 kdesktop/pics/kde2.xbm create mode 100644 kdesktop/pics/ksslogo.png create mode 100644 kdesktop/pics/splash.png create mode 100644 kdesktop/pics/splash2.png create mode 100644 kdesktop/pixmapserver.cc create mode 100644 kdesktop/pixmapserver.h create mode 100644 kdesktop/programs/Makefile.am create mode 100644 kdesktop/programs/xearth.desktop create mode 100644 kdesktop/programs/xglobe.desktop create mode 100644 kdesktop/programs/xplanet.desktop create mode 100644 kdesktop/startupid.cpp create mode 100644 kdesktop/startupid.h create mode 100644 kdesktop/xautolock.cc create mode 100644 kdesktop/xautolock.h create mode 100644 kdesktop/xautolock_c.h create mode 100644 kdesktop/xautolock_diy.c create mode 100644 kdesktop/xautolock_engine.c create mode 100644 kdesu/AUTHORS create mode 100644 kdesu/ChangeLog create mode 100644 kdesu/FAQ create mode 100644 kdesu/LICENSE.readme create mode 100644 kdesu/Makefile.am create mode 100644 kdesu/README create mode 100644 kdesu/TODO create mode 100644 kdesu/configure.in.in create mode 100644 kdesu/kdesu/Makefile.am create mode 100644 kdesu/kdesu/kdesu.cpp create mode 100644 kdesu/kdesu/sudlg.cpp create mode 100644 kdesu/kdesu/sudlg.h create mode 100644 kdesu/kdesud/Makefile.am create mode 100644 kdesu/kdesud/handler.cpp create mode 100644 kdesu/kdesud/handler.h create mode 100644 kdesu/kdesud/kdesud.cpp create mode 100644 kdesu/kdesud/lexer.cpp create mode 100644 kdesu/kdesud/lexer.h create mode 100644 kdesu/kdesud/repo.cpp create mode 100644 kdesu/kdesud/repo.h create mode 100644 kdesu/kdesud/secure.cpp create mode 100644 kdesu/kdesud/secure.h create mode 100644 kdialog/Makefile.am create mode 100644 kdialog/README create mode 100644 kdialog/kdialog.cpp create mode 100644 kdialog/klistboxdialog.cpp create mode 100644 kdialog/klistboxdialog.h create mode 100755 kdialog/progresscanceldemo create mode 100755 kdialog/progressdemo create mode 100644 kdialog/progressdialog.cpp create mode 100644 kdialog/progressdialog.h create mode 100644 kdialog/progressdialogiface.h create mode 100755 kdialog/test create mode 100644 kdialog/widgets.cpp create mode 100644 kdialog/widgets.h create mode 100644 kdm/ChangeLog create mode 100644 kdm/Makefile.am create mode 100644 kdm/README create mode 100644 kdm/TODO create mode 100644 kdm/backend/Imakefile create mode 100644 kdm/backend/Makefile.am create mode 100644 kdm/backend/access.c create mode 100644 kdm/backend/auth.c create mode 100644 kdm/backend/bootman.c create mode 100644 kdm/backend/choose.c create mode 100644 kdm/backend/client.c create mode 100644 kdm/backend/ctrl.c create mode 100644 kdm/backend/daemon.c create mode 100644 kdm/backend/dm.c create mode 100644 kdm/backend/dm.h create mode 100644 kdm/backend/dm_auth.h create mode 100644 kdm/backend/dm_error.h create mode 100644 kdm/backend/dm_socket.h create mode 100644 kdm/backend/dpylist.c create mode 100644 kdm/backend/error.c create mode 100644 kdm/backend/genauth.c create mode 100644 kdm/backend/greet.h create mode 100644 kdm/backend/inifile.c create mode 100644 kdm/backend/krb5auth.c create mode 100644 kdm/backend/mitauth.c create mode 100644 kdm/backend/netaddr.c create mode 100644 kdm/backend/policy.c create mode 100644 kdm/backend/printf.c create mode 100644 kdm/backend/process.c create mode 100644 kdm/backend/protodpy.c create mode 100644 kdm/backend/reset.c create mode 100644 kdm/backend/resource.c create mode 100644 kdm/backend/rpcauth.c create mode 100644 kdm/backend/server.c create mode 100644 kdm/backend/session.c create mode 100644 kdm/backend/sessreg.c create mode 100644 kdm/backend/socket.c create mode 100644 kdm/backend/streams.c create mode 100644 kdm/backend/util.c create mode 100644 kdm/backend/xdmauth.c create mode 100644 kdm/backend/xdmcp.c create mode 100644 kdm/config.def create mode 100644 kdm/configure.in.bot create mode 100644 kdm/configure.in.in create mode 100755 kdm/confproc.pl create mode 100644 kdm/kfrontend/Makefile.am create mode 100644 kdm/kfrontend/genkdmconf.c create mode 100644 kdm/kfrontend/kchooser.cpp create mode 100644 kdm/kfrontend/kchooser.h create mode 100644 kdm/kfrontend/kconsole.cpp create mode 100644 kdm/kfrontend/kconsole.h create mode 100644 kdm/kfrontend/kdm_config.c create mode 100644 kdm/kfrontend/kdm_greet.c create mode 100644 kdm/kfrontend/kdm_greet.h create mode 100644 kdm/kfrontend/kdmclock.cpp create mode 100644 kdm/kfrontend/kdmclock.h create mode 100644 kdm/kfrontend/kdmconfig.cpp create mode 100644 kdm/kfrontend/kdmconfig.h create mode 100644 kdm/kfrontend/kdmctl.c create mode 100644 kdm/kfrontend/kdmshutdown.cpp create mode 100644 kdm/kfrontend/kdmshutdown.h create mode 100644 kdm/kfrontend/kfdialog.cpp create mode 100644 kdm/kfrontend/kfdialog.h create mode 100644 kdm/kfrontend/kgapp.cpp create mode 100644 kdm/kfrontend/kgapp.h create mode 100644 kdm/kfrontend/kgdialog.cpp create mode 100644 kdm/kfrontend/kgdialog.h create mode 100644 kdm/kfrontend/kgreeter.cpp create mode 100644 kdm/kfrontend/kgreeter.h create mode 100644 kdm/kfrontend/kgverify.cpp create mode 100644 kdm/kfrontend/kgverify.h create mode 100644 kdm/kfrontend/krootimage.cpp create mode 100644 kdm/kfrontend/krootimage.h create mode 100644 kdm/kfrontend/pics/Makefile.am create mode 100644 kdm/kfrontend/pics/default1.png create mode 100644 kdm/kfrontend/pics/default2.png create mode 100644 kdm/kfrontend/pics/default3.png create mode 100644 kdm/kfrontend/pics/kdelogo-crystal.png create mode 100644 kdm/kfrontend/pics/kdelogo.png create mode 100644 kdm/kfrontend/pics/root1.png create mode 100644 kdm/kfrontend/pics/shutdown.jpg create mode 100644 kdm/kfrontend/sessions/9wm.desktop create mode 100644 kdm/kfrontend/sessions/Makefile.am create mode 100644 kdm/kfrontend/sessions/aewm++.desktop create mode 100644 kdm/kfrontend/sessions/aewm.desktop create mode 100644 kdm/kfrontend/sessions/afterstep.desktop create mode 100644 kdm/kfrontend/sessions/amaterus.desktop create mode 100644 kdm/kfrontend/sessions/amiwm.desktop create mode 100644 kdm/kfrontend/sessions/asclassic.desktop create mode 100644 kdm/kfrontend/sessions/blackbox.desktop create mode 100644 kdm/kfrontend/sessions/cde.desktop create mode 100644 kdm/kfrontend/sessions/ctwm.desktop create mode 100644 kdm/kfrontend/sessions/cwwm.desktop create mode 100644 kdm/kfrontend/sessions/enlightenment.desktop create mode 100644 kdm/kfrontend/sessions/evilwm.desktop create mode 100644 kdm/kfrontend/sessions/fluxbox.desktop create mode 100644 kdm/kfrontend/sessions/flwm.desktop create mode 100644 kdm/kfrontend/sessions/fvwm.desktop create mode 100644 kdm/kfrontend/sessions/fvwm2.desktop create mode 100644 kdm/kfrontend/sessions/fvwm95.desktop create mode 100644 kdm/kfrontend/sessions/gnome.desktop create mode 100644 kdm/kfrontend/sessions/golem.desktop create mode 100644 kdm/kfrontend/sessions/icewm.desktop create mode 100644 kdm/kfrontend/sessions/ion.desktop create mode 100644 kdm/kfrontend/sessions/kde.desktop.in create mode 100644 kdm/kfrontend/sessions/larswm.desktop create mode 100644 kdm/kfrontend/sessions/lwm.desktop create mode 100644 kdm/kfrontend/sessions/matchbox.desktop create mode 100644 kdm/kfrontend/sessions/metacity.desktop create mode 100644 kdm/kfrontend/sessions/mwm.desktop create mode 100644 kdm/kfrontend/sessions/olvwm.desktop create mode 100644 kdm/kfrontend/sessions/olwm.desktop create mode 100644 kdm/kfrontend/sessions/openbox.desktop create mode 100644 kdm/kfrontend/sessions/oroborus.desktop create mode 100644 kdm/kfrontend/sessions/phluid.desktop create mode 100644 kdm/kfrontend/sessions/pwm.desktop create mode 100644 kdm/kfrontend/sessions/qvwm.desktop create mode 100644 kdm/kfrontend/sessions/ratpoison.desktop create mode 100644 kdm/kfrontend/sessions/sapphire.desktop create mode 100644 kdm/kfrontend/sessions/sawfish.desktop create mode 100644 kdm/kfrontend/sessions/twm.desktop create mode 100644 kdm/kfrontend/sessions/ude.desktop create mode 100644 kdm/kfrontend/sessions/vtwm.desktop create mode 100644 kdm/kfrontend/sessions/w9wm.desktop create mode 100644 kdm/kfrontend/sessions/waimea.desktop create mode 100644 kdm/kfrontend/sessions/wm2.desktop create mode 100644 kdm/kfrontend/sessions/wmaker.desktop create mode 100644 kdm/kfrontend/sessions/xfce.desktop create mode 100644 kdm/kfrontend/sessions/xfce4.desktop create mode 100644 kdm/kfrontend/themer/Makefile.am create mode 100644 kdm/kfrontend/themer/kdmitem.cpp create mode 100644 kdm/kfrontend/themer/kdmitem.h create mode 100644 kdm/kfrontend/themer/kdmlabel.cpp create mode 100644 kdm/kfrontend/themer/kdmlabel.h create mode 100644 kdm/kfrontend/themer/kdmlayout.cpp create mode 100644 kdm/kfrontend/themer/kdmlayout.h create mode 100644 kdm/kfrontend/themer/kdmpixmap.cpp create mode 100644 kdm/kfrontend/themer/kdmpixmap.h create mode 100644 kdm/kfrontend/themer/kdmrect.cpp create mode 100644 kdm/kfrontend/themer/kdmrect.h create mode 100644 kdm/kfrontend/themer/kdmthemer.cpp create mode 100644 kdm/kfrontend/themer/kdmthemer.h create mode 100644 kdm/kfrontend/themes/Makefile.am create mode 100644 kdm/kfrontend/themes/circles/GdmGreeterTheme.desktop create mode 100644 kdm/kfrontend/themes/circles/Makefile.am create mode 100644 kdm/kfrontend/themes/circles/background.svg create mode 100644 kdm/kfrontend/themes/circles/circles.xml create mode 100644 kdm/kfrontend/themes/circles/flower.png create mode 100644 kdm/kfrontend/themes/circles/help.png create mode 100644 kdm/kfrontend/themes/circles/options.png create mode 100644 kdm/kfrontend/themes/circles/screenshot.png create mode 100644 kdmlib/Makefile.am create mode 100644 kdmlib/dmctl.cpp create mode 100644 kdmlib/dmctl.h create mode 100644 kdmlib/kgreet_classic.cpp create mode 100644 kdmlib/kgreet_classic.h create mode 100644 kdmlib/kgreet_winbind.cpp create mode 100644 kdmlib/kgreet_winbind.h create mode 100644 kdmlib/kgreeterplugin.h create mode 100644 kfind/AUTHORS create mode 100644 kfind/ChangeLog create mode 100644 kfind/Kfind.desktop create mode 100644 kfind/Makefile.am create mode 100644 kfind/README create mode 100644 kfind/TODO create mode 100644 kfind/findpart.desktop create mode 100644 kfind/hi16-app-kfind.png create mode 100644 kfind/hi22-app-kfind.png create mode 100644 kfind/hi32-app-kfind.png create mode 100644 kfind/hi48-app-kfind.png create mode 100644 kfind/hi64-app-kfind.png create mode 100644 kfind/kdatecombo.cpp create mode 100644 kfind/kdatecombo.h create mode 100644 kfind/kfind.cpp create mode 100644 kfind/kfind.h create mode 100644 kfind/kfinddlg.cpp create mode 100644 kfind/kfinddlg.h create mode 100644 kfind/kfindpart.cpp create mode 100644 kfind/kfindpart.desktop create mode 100644 kfind/kfindpart.h create mode 100644 kfind/kfindpart.kdevprj create mode 100644 kfind/kfindpart.kdevses create mode 100644 kfind/kftabdlg.cpp create mode 100644 kfind/kftabdlg.h create mode 100644 kfind/kfwin.cpp create mode 100644 kfind/kfwin.h create mode 100644 kfind/kquery.cpp create mode 100644 kfind/kquery.h create mode 100644 kfind/main.cpp create mode 100644 kfind/pics/Makefile.am create mode 100644 kfind/pics/lo22-action-archive.png create mode 100644 kfind/pics/lo22-action-delete.png create mode 100644 kfind/pics/lo22-action-idea.png create mode 100644 kfind/pics/lo22-action-info.png create mode 100644 kfind/pics/lo22-action-openfile.png create mode 100644 kfind/pics/lo22-action-save.png create mode 100644 kfind/pics/lo22-action-search.png create mode 100644 kfind/version.h create mode 100644 khelpcenter/COPYING create mode 100644 khelpcenter/DESIGN create mode 100644 khelpcenter/Help.desktop create mode 100644 khelpcenter/Makefile.am create mode 100644 khelpcenter/README.htdig create mode 100644 khelpcenter/README.metadata create mode 100644 khelpcenter/application.cpp create mode 100644 khelpcenter/application.h create mode 100644 khelpcenter/configure.in.in create mode 100644 khelpcenter/docentry.cpp create mode 100644 khelpcenter/docentry.h create mode 100644 khelpcenter/docentrytraverser.cpp create mode 100644 khelpcenter/docentrytraverser.h create mode 100644 khelpcenter/docmetainfo.cpp create mode 100644 khelpcenter/docmetainfo.h create mode 100644 khelpcenter/fontdialog.cpp create mode 100644 khelpcenter/fontdialog.h create mode 100644 khelpcenter/formatter.cpp create mode 100644 khelpcenter/formatter.h create mode 100644 khelpcenter/glossary.cpp create mode 100644 khelpcenter/glossary.h create mode 100644 khelpcenter/glossary.html.in create mode 100644 khelpcenter/glossary.xslt create mode 100644 khelpcenter/history.cpp create mode 100644 khelpcenter/history.h create mode 100644 khelpcenter/htmlsearch.cpp create mode 100644 khelpcenter/htmlsearch.h create mode 100644 khelpcenter/htmlsearch/Makefile.am create mode 100644 khelpcenter/htmlsearch/checked.xpm create mode 100644 khelpcenter/htmlsearch/htmlsearch.cpp create mode 100644 khelpcenter/htmlsearch/htmlsearch.desktop create mode 100644 khelpcenter/htmlsearch/htmlsearch.h create mode 100644 khelpcenter/htmlsearch/index.cpp create mode 100644 khelpcenter/htmlsearch/kcmhtmlsearch.cpp create mode 100644 khelpcenter/htmlsearch/kcmhtmlsearch.h create mode 100644 khelpcenter/htmlsearch/klangcombo.cpp create mode 100644 khelpcenter/htmlsearch/klangcombo.h create mode 100644 khelpcenter/htmlsearch/ktagcombobox.cpp create mode 100644 khelpcenter/htmlsearch/ktagcombobox.h create mode 100644 khelpcenter/htmlsearch/long.html create mode 100644 khelpcenter/htmlsearch/meinproc_wrapper create mode 100644 khelpcenter/htmlsearch/nomatch.html create mode 100644 khelpcenter/htmlsearch/progressdialog.cpp create mode 100644 khelpcenter/htmlsearch/progressdialog.h create mode 100644 khelpcenter/htmlsearch/short.html create mode 100644 khelpcenter/htmlsearch/star.png create mode 100644 khelpcenter/htmlsearch/star_blank.png create mode 100644 khelpcenter/htmlsearch/syntax.html create mode 100644 khelpcenter/htmlsearch/unchecked.xpm create mode 100644 khelpcenter/htmlsearch/wrapper.html create mode 100644 khelpcenter/htmlsearchconfig.cpp create mode 100644 khelpcenter/htmlsearchconfig.h create mode 100644 khelpcenter/index.html.in create mode 100644 khelpcenter/infotree.cpp create mode 100644 khelpcenter/infotree.h create mode 100644 khelpcenter/intro.html.in create mode 100644 khelpcenter/kcmhelpcenter.cpp create mode 100644 khelpcenter/kcmhelpcenter.desktop create mode 100644 khelpcenter/kcmhelpcenter.h create mode 100644 khelpcenter/khc_indexbuilder.cpp create mode 100644 khelpcenter/khc_indexbuilder.h create mode 100644 khelpcenter/khelpcenter.desktop create mode 100644 khelpcenter/khelpcenter.kcfg create mode 100644 khelpcenter/khelpcenterui.rc create mode 100644 khelpcenter/mainwindow.cpp create mode 100644 khelpcenter/mainwindow.h create mode 100644 khelpcenter/navigator.cpp create mode 100644 khelpcenter/navigator.h create mode 100644 khelpcenter/navigatorappitem.cpp create mode 100644 khelpcenter/navigatorappitem.h create mode 100644 khelpcenter/navigatoritem.cpp create mode 100644 khelpcenter/navigatoritem.h create mode 100644 khelpcenter/pics/Makefile.am create mode 100644 khelpcenter/pics/hi128-app-khelpcenter.png create mode 100644 khelpcenter/pics/hi16-app-khelpcenter.png create mode 100644 khelpcenter/pics/hi22-app-khelpcenter.png create mode 100644 khelpcenter/pics/hi32-app-khelpcenter.png create mode 100644 khelpcenter/pics/hi48-app-khelpcenter.png create mode 100644 khelpcenter/pics/hi64-app-khelpcenter.png create mode 100644 khelpcenter/pics/hisc-app-khelpcenter.svgz create mode 100644 khelpcenter/plugins/Applications/.directory create mode 100644 khelpcenter/plugins/Applications/Makefile.am create mode 100644 khelpcenter/plugins/Makefile.am create mode 100644 khelpcenter/plugins/Manpages/.directory create mode 100644 khelpcenter/plugins/Manpages/Makefile.am create mode 100644 khelpcenter/plugins/Manpages/man1.desktop create mode 100644 khelpcenter/plugins/Manpages/man2.desktop create mode 100644 khelpcenter/plugins/Manpages/man3.desktop create mode 100644 khelpcenter/plugins/Manpages/man4.desktop create mode 100644 khelpcenter/plugins/Manpages/man5.desktop create mode 100644 khelpcenter/plugins/Manpages/man6.desktop create mode 100644 khelpcenter/plugins/Manpages/man7.desktop create mode 100644 khelpcenter/plugins/Manpages/man8.desktop create mode 100644 khelpcenter/plugins/Manpages/man9.desktop create mode 100644 khelpcenter/plugins/Manpages/mann.desktop create mode 100644 khelpcenter/plugins/Scrollkeeper/.directory create mode 100644 khelpcenter/plugins/Scrollkeeper/Makefile.am create mode 100644 khelpcenter/plugins/Scrollkeeper/scrollkeeper.desktop create mode 100644 khelpcenter/plugins/Tutorials/.directory create mode 100644 khelpcenter/plugins/Tutorials/Makefile.am create mode 100644 khelpcenter/plugins/Tutorials/quickstart.desktop create mode 100644 khelpcenter/plugins/Tutorials/visualdict.desktop create mode 100644 khelpcenter/plugins/applets.desktop create mode 100644 khelpcenter/plugins/contact.desktop create mode 100644 khelpcenter/plugins/faq.desktop create mode 100644 khelpcenter/plugins/info.desktop create mode 100644 khelpcenter/plugins/kcontrolmodules.desktop create mode 100644 khelpcenter/plugins/kicmodules.desktop create mode 100644 khelpcenter/plugins/kioslaves.desktop create mode 100644 khelpcenter/plugins/konqplugins.desktop create mode 100644 khelpcenter/plugins/links.desktop create mode 100644 khelpcenter/plugins/support.desktop create mode 100644 khelpcenter/plugins/userguide.desktop create mode 100644 khelpcenter/plugins/welcome.desktop create mode 100644 khelpcenter/plugintraverser.cpp create mode 100644 khelpcenter/plugintraverser.h create mode 100644 khelpcenter/prefs.kcfgc create mode 100644 khelpcenter/scopeitem.h create mode 100644 khelpcenter/scrollkeepertreebuilder.cpp create mode 100644 khelpcenter/scrollkeepertreebuilder.h create mode 100644 khelpcenter/searchengine.cpp create mode 100644 khelpcenter/searchengine.h create mode 100644 khelpcenter/searchhandler.cpp create mode 100644 khelpcenter/searchhandler.h create mode 100644 khelpcenter/searchhandlers/Makefile.am create mode 100644 khelpcenter/searchhandlers/README.searchhandlers create mode 100644 khelpcenter/searchhandlers/docbook.desktop create mode 100644 khelpcenter/searchhandlers/htdig.desktop create mode 100644 khelpcenter/searchhandlers/htdig_long.html create mode 100755 khelpcenter/searchhandlers/khc_docbookdig.pl.in create mode 100755 khelpcenter/searchhandlers/khc_htdig.pl.in create mode 100755 khelpcenter/searchhandlers/khc_htsearch.pl create mode 100755 khelpcenter/searchhandlers/khc_mansearch.pl create mode 100644 khelpcenter/searchhandlers/man.desktop create mode 100644 khelpcenter/searchwidget.cpp create mode 100644 khelpcenter/searchwidget.h create mode 100644 khelpcenter/table-of-contents.xslt create mode 100644 khelpcenter/testmetainfo.cpp create mode 100644 khelpcenter/toc.cpp create mode 100644 khelpcenter/toc.h create mode 100644 khelpcenter/treebuilder.cpp create mode 100644 khelpcenter/treebuilder.h create mode 100644 khelpcenter/version.h create mode 100644 khelpcenter/view.cpp create mode 100644 khelpcenter/view.h create mode 100644 khotkeys/AUTHORS create mode 100644 khotkeys/Makefile.am create mode 100644 khotkeys/README create mode 100644 khotkeys/TODO create mode 100644 khotkeys/app/Makefile.am create mode 100644 khotkeys/app/app.cpp create mode 100644 khotkeys/app/app.h create mode 100644 khotkeys/app/kded.cpp create mode 100644 khotkeys/app/kded.h create mode 100644 khotkeys/app/khotkeys.desktop create mode 100644 khotkeys/arts/Makefile.am create mode 100644 khotkeys/arts/soundrecorder_arts.cpp create mode 100644 khotkeys/arts/soundrecorder_arts.h create mode 100644 khotkeys/arts/voicerecorder_arts.cpp create mode 100644 khotkeys/configure.in.in create mode 100644 khotkeys/data/Makefile.am create mode 100644 khotkeys/data/kde32b1.khotkeys create mode 100644 khotkeys/data/khotkeys_32b1_update.upd create mode 100644 khotkeys/data/khotkeys_printscreen.upd create mode 100644 khotkeys/data/konqueror_gestures_kde321.khotkeys create mode 100644 khotkeys/data/konqueror_gestures_kde321_update.upd create mode 100644 khotkeys/data/printscreen.khotkeys create mode 100644 khotkeys/kcontrol/Makefile.am create mode 100644 khotkeys/kcontrol/action_group_tab.cpp create mode 100644 khotkeys/kcontrol/action_group_tab.h create mode 100644 khotkeys/kcontrol/action_list_widget.cpp create mode 100644 khotkeys/kcontrol/action_list_widget.h create mode 100644 khotkeys/kcontrol/actions_listview_widget.cpp create mode 100644 khotkeys/kcontrol/actions_listview_widget.h create mode 100644 khotkeys/kcontrol/activate_window_widget.h create mode 100644 khotkeys/kcontrol/command_url_widget.cpp create mode 100644 khotkeys/kcontrol/command_url_widget.h create mode 100644 khotkeys/kcontrol/condition_list_widget.cpp create mode 100644 khotkeys/kcontrol/condition_list_widget.h create mode 100644 khotkeys/kcontrol/dcop_widget.cpp create mode 100644 khotkeys/kcontrol/dcop_widget.h create mode 100644 khotkeys/kcontrol/general_settings_tab.cpp create mode 100644 khotkeys/kcontrol/general_settings_tab.h create mode 100644 khotkeys/kcontrol/general_tab.cpp create mode 100644 khotkeys/kcontrol/general_tab.h create mode 100644 khotkeys/kcontrol/gesture_triggers_tab.cpp create mode 100644 khotkeys/kcontrol/gesture_triggers_tab.h create mode 100644 khotkeys/kcontrol/gesturedrawer.cpp create mode 100644 khotkeys/kcontrol/gesturedrawer.h create mode 100644 khotkeys/kcontrol/gesturerecorder.cpp create mode 100644 khotkeys/kcontrol/gesturerecorder.h create mode 100644 khotkeys/kcontrol/gesturerecordpage.cpp create mode 100644 khotkeys/kcontrol/gesturerecordpage.h create mode 100644 khotkeys/kcontrol/gestures_settings_tab.cpp create mode 100644 khotkeys/kcontrol/gestures_settings_tab.h create mode 100644 khotkeys/kcontrol/hi16-app-khotkeys.png create mode 100644 khotkeys/kcontrol/hi32-app-khotkeys.png create mode 100644 khotkeys/kcontrol/info_tab.cpp create mode 100644 khotkeys/kcontrol/info_tab.h create mode 100644 khotkeys/kcontrol/init.cpp create mode 100644 khotkeys/kcontrol/kcmkhotkeys.cpp create mode 100644 khotkeys/kcontrol/kcmkhotkeys.h create mode 100644 khotkeys/kcontrol/keyboard_input_widget.cpp create mode 100644 khotkeys/kcontrol/keyboard_input_widget.h create mode 100644 khotkeys/kcontrol/khotkeys.desktop create mode 100644 khotkeys/kcontrol/main_buttons_widget.cpp create mode 100644 khotkeys/kcontrol/main_buttons_widget.h create mode 100644 khotkeys/kcontrol/menuedit.cpp create mode 100644 khotkeys/kcontrol/menuedit.h create mode 100644 khotkeys/kcontrol/menuentry_widget.cpp create mode 100644 khotkeys/kcontrol/menuentry_widget.h create mode 100644 khotkeys/kcontrol/tab_widget.cpp create mode 100644 khotkeys/kcontrol/tab_widget.h create mode 100644 khotkeys/kcontrol/triggers_tab.cpp create mode 100644 khotkeys/kcontrol/triggers_tab.h create mode 100644 khotkeys/kcontrol/ui/Makefile.am create mode 100644 khotkeys/kcontrol/ui/action_group_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/action_list_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/actions_listview_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/command_url_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/condition_list_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/dcop_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/general_settings_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/general_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/gesture_triggers_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/gestures_settings_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/info_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/keyboard_input_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/main_buttons_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/menuentry_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/triggers_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/voice_input_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/voice_settings_tab_ui.ui create mode 100644 khotkeys/kcontrol/ui/window_trigger_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/windowdef_list_widget_ui.ui create mode 100644 khotkeys/kcontrol/ui/windowdef_simple_widget_ui.ui create mode 100644 khotkeys/kcontrol/voice_settings_tab.cpp create mode 100644 khotkeys/kcontrol/voice_settings_tab.h create mode 100644 khotkeys/kcontrol/voicerecorder.cpp create mode 100644 khotkeys/kcontrol/voicerecorder.h create mode 100644 khotkeys/kcontrol/voicerecordpage.cpp create mode 100644 khotkeys/kcontrol/voicerecordpage.h create mode 100644 khotkeys/kcontrol/window_trigger_widget.cpp create mode 100644 khotkeys/kcontrol/window_trigger_widget.h create mode 100644 khotkeys/kcontrol/windowdef_list_widget.cpp create mode 100644 khotkeys/kcontrol/windowdef_list_widget.h create mode 100644 khotkeys/kcontrol/windowdef_simple_widget.cpp create mode 100644 khotkeys/kcontrol/windowdef_simple_widget.h create mode 100644 khotkeys/kcontrol/windowselector.cpp create mode 100644 khotkeys/kcontrol/windowselector.h create mode 100644 khotkeys/khotkeys.desktop create mode 100644 khotkeys/shared/Makefile.am create mode 100644 khotkeys/shared/action_data.cpp create mode 100644 khotkeys/shared/action_data.h create mode 100644 khotkeys/shared/actions.cpp create mode 100644 khotkeys/shared/actions.h create mode 100644 khotkeys/shared/conditions.cpp create mode 100644 khotkeys/shared/conditions.h create mode 100644 khotkeys/shared/gestures.cpp create mode 100644 khotkeys/shared/gestures.h create mode 100644 khotkeys/shared/input.cpp create mode 100644 khotkeys/shared/input.h create mode 100644 khotkeys/shared/khlistbox.cpp create mode 100644 khotkeys/shared/khlistbox.h create mode 100644 khotkeys/shared/khlistview.cpp create mode 100644 khotkeys/shared/khlistview.h create mode 100644 khotkeys/shared/khotkeysglobal.cpp create mode 100644 khotkeys/shared/khotkeysglobal.h create mode 100644 khotkeys/shared/settings.cpp create mode 100644 khotkeys/shared/settings.h create mode 100644 khotkeys/shared/sound.cpp create mode 100644 khotkeys/shared/sound.h create mode 100644 khotkeys/shared/soundrecorder.cpp create mode 100644 khotkeys/shared/soundrecorder.h create mode 100644 khotkeys/shared/triggers.cpp create mode 100644 khotkeys/shared/triggers.h create mode 100644 khotkeys/shared/voices.cpp create mode 100644 khotkeys/shared/voices.h create mode 100644 khotkeys/shared/voicesignature.cpp create mode 100644 khotkeys/shared/voicesignature.h create mode 100644 khotkeys/shared/windows.cpp create mode 100644 khotkeys/shared/windows.h create mode 100644 khotkeys/update/Makefile.am create mode 100644 khotkeys/update/update.cpp create mode 100644 khotkeys/wrk/cpp_template create mode 100644 khotkeys/wrk/header_template create mode 100755 khotkeys/wrk/new create mode 100644 kicker/AUTHORS create mode 100644 kicker/ChangeLog create mode 100644 kicker/DESIGN create mode 100644 kicker/HACKING create mode 100644 kicker/Makefile.am create mode 100644 kicker/TODO create mode 100644 kicker/applets/Makefile.am create mode 100644 kicker/applets/clock/Makefile.am create mode 100644 kicker/applets/clock/analog.ui create mode 100644 kicker/applets/clock/clock.cpp create mode 100644 kicker/applets/clock/clock.h create mode 100644 kicker/applets/clock/clockapplet.desktop create mode 100644 kicker/applets/clock/clockapplet.kcfg create mode 100644 kicker/applets/clock/datepicker.cpp create mode 100644 kicker/applets/clock/datepicker.h create mode 100644 kicker/applets/clock/digital.ui create mode 100644 kicker/applets/clock/fuzzy.ui create mode 100644 kicker/applets/clock/lcd.png create mode 100644 kicker/applets/clock/prefs.kcfgc create mode 100644 kicker/applets/clock/settings.ui create mode 100644 kicker/applets/clock/zone.cpp create mode 100644 kicker/applets/clock/zone.h create mode 100644 kicker/applets/launcher/ChangeLog create mode 100644 kicker/applets/launcher/Makefile.am create mode 100644 kicker/applets/launcher/ToDo create mode 100644 kicker/applets/launcher/configdlg.cpp create mode 100644 kicker/applets/launcher/configdlg.h create mode 100644 kicker/applets/launcher/configdlgbase.ui create mode 100644 kicker/applets/launcher/easyvector.h create mode 100644 kicker/applets/launcher/flowgridmanager.cpp create mode 100644 kicker/applets/launcher/flowgridmanager.h create mode 100644 kicker/applets/launcher/launcherapplet.kcfg create mode 100644 kicker/applets/launcher/popularity.cpp create mode 100644 kicker/applets/launcher/popularity.h create mode 100644 kicker/applets/launcher/prefs.kcfgc create mode 100644 kicker/applets/launcher/quickaddappsmenu.cpp create mode 100644 kicker/applets/launcher/quickaddappsmenu.h create mode 100644 kicker/applets/launcher/quickbutton.cpp create mode 100644 kicker/applets/launcher/quickbutton.h create mode 100644 kicker/applets/launcher/quickbuttongroup.h create mode 100644 kicker/applets/launcher/quicklauncher.cpp create mode 100644 kicker/applets/launcher/quicklauncher.desktop create mode 100644 kicker/applets/launcher/quicklauncher.h create mode 100644 kicker/applets/lockout/Makefile.am create mode 100644 kicker/applets/lockout/README create mode 100644 kicker/applets/lockout/lockout.cpp create mode 100644 kicker/applets/lockout/lockout.desktop create mode 100644 kicker/applets/lockout/lockout.h create mode 100644 kicker/applets/media/Makefile.am create mode 100644 kicker/applets/media/mediaapplet.cpp create mode 100644 kicker/applets/media/mediaapplet.desktop create mode 100644 kicker/applets/media/mediaapplet.h create mode 100644 kicker/applets/media/mediumbutton.cpp create mode 100644 kicker/applets/media/mediumbutton.h create mode 100644 kicker/applets/media/preferencesdialog.cpp create mode 100644 kicker/applets/media/preferencesdialog.h create mode 100644 kicker/applets/menu/Makefile.am create mode 100644 kicker/applets/menu/menuapplet.cpp create mode 100644 kicker/applets/menu/menuapplet.desktop create mode 100644 kicker/applets/menu/menuapplet.h create mode 100644 kicker/applets/minipager/Makefile.am create mode 100644 kicker/applets/minipager/minipagerapplet.desktop create mode 100644 kicker/applets/minipager/pagerapplet.cpp create mode 100644 kicker/applets/minipager/pagerapplet.h create mode 100644 kicker/applets/minipager/pagerbutton.cpp create mode 100644 kicker/applets/minipager/pagerbutton.h create mode 100644 kicker/applets/minipager/pagersettings.kcfg create mode 100644 kicker/applets/minipager/pagersettings.kcfgc create mode 100644 kicker/applets/naughty/Makefile.am create mode 100644 kicker/applets/naughty/NaughtyApplet.cpp create mode 100644 kicker/applets/naughty/NaughtyApplet.h create mode 100644 kicker/applets/naughty/NaughtyConfigDialog.cpp create mode 100644 kicker/applets/naughty/NaughtyConfigDialog.h create mode 100644 kicker/applets/naughty/NaughtyProcessMonitor.cpp create mode 100644 kicker/applets/naughty/NaughtyProcessMonitor.h create mode 100644 kicker/applets/naughty/configure.in.in create mode 100644 kicker/applets/naughty/naughty-happy.png create mode 100644 kicker/applets/naughty/naughty-sad.png create mode 100644 kicker/applets/naughty/naughtyapplet.desktop create mode 100644 kicker/applets/run/Makefile.am create mode 100644 kicker/applets/run/runapplet.cpp create mode 100644 kicker/applets/run/runapplet.desktop create mode 100644 kicker/applets/run/runapplet.h create mode 100644 kicker/applets/swallow/Makefile.am create mode 100644 kicker/applets/swallow/prefwidget.cpp create mode 100644 kicker/applets/swallow/prefwidget.h create mode 100644 kicker/applets/swallow/prefwidgetbase.ui create mode 100644 kicker/applets/swallow/swallow.cpp create mode 100644 kicker/applets/swallow/swallow.h create mode 100644 kicker/applets/swallow/swallowapplet.desktop create mode 100644 kicker/applets/systemtray/Makefile.am create mode 100644 kicker/applets/systemtray/systemtrayapplet.cpp create mode 100644 kicker/applets/systemtray/systemtrayapplet.desktop create mode 100644 kicker/applets/systemtray/systemtrayapplet.h create mode 100644 kicker/applets/taskbar/Makefile.am create mode 100644 kicker/applets/taskbar/taskbarapplet.cpp create mode 100644 kicker/applets/taskbar/taskbarapplet.desktop create mode 100644 kicker/applets/taskbar/taskbarapplet.h create mode 100644 kicker/applets/trash/Makefile.am create mode 100644 kicker/applets/trash/trashapplet.cpp create mode 100644 kicker/applets/trash/trashapplet.desktop create mode 100644 kicker/applets/trash/trashapplet.h create mode 100644 kicker/applets/trash/trashbutton.cpp create mode 100644 kicker/applets/trash/trashbutton.h create mode 100644 kicker/data/Makefile.am create mode 100644 kicker/data/app_start_anim/Makefile.am create mode 100644 kicker/data/app_start_anim/disk1.png create mode 100644 kicker/data/app_start_anim/disk10.png create mode 100644 kicker/data/app_start_anim/disk2.png create mode 100644 kicker/data/app_start_anim/disk3.png create mode 100644 kicker/data/app_start_anim/disk4.png create mode 100644 kicker/data/app_start_anim/disk5.png create mode 100644 kicker/data/app_start_anim/disk6.png create mode 100644 kicker/data/app_start_anim/disk7.png create mode 100644 kicker/data/app_start_anim/disk8.png create mode 100644 kicker/data/app_start_anim/disk9.png create mode 100644 kicker/data/icons/Makefile.am create mode 100644 kicker/data/icons/actions/Makefile.am create mode 100644 kicker/data/icons/actions/cr16-action-modified.png create mode 100644 kicker/data/icons/actions/lo16-action-modified.png create mode 100644 kicker/data/icons/cr16-app-kdisknav.png create mode 100644 kicker/data/icons/cr16-app-kicker.png create mode 100644 kicker/data/icons/cr16-app-panel.png create mode 100644 kicker/data/icons/cr16-app-window_list.png create mode 100644 kicker/data/icons/cr32-app-kdisknav.png create mode 100644 kicker/data/icons/cr32-app-window_list.png create mode 100644 kicker/data/icons/cr48-app-kdisknav.png create mode 100644 kicker/data/icons/cr48-app-window_list.png create mode 100644 kicker/data/kmenu_side/Makefile.am create mode 100644 kicker/data/kmenu_side/kside.png create mode 100644 kicker/data/kmenu_side/kside_tile.png create mode 100644 kicker/data/tiles/KDE_button_large_down.png create mode 100644 kicker/data/tiles/KDE_button_large_up.png create mode 100644 kicker/data/tiles/KDE_button_normal_down.png create mode 100644 kicker/data/tiles/KDE_button_normal_up.png create mode 100644 kicker/data/tiles/KDE_button_tiny_down.png create mode 100644 kicker/data/tiles/KDE_button_tiny_up.png create mode 100644 kicker/data/tiles/Makefile.am create mode 100644 kicker/data/tiles/blue_wood_large_down.png create mode 100644 kicker/data/tiles/blue_wood_large_up.png create mode 100644 kicker/data/tiles/blue_wood_normal_down.png create mode 100644 kicker/data/tiles/blue_wood_normal_up.png create mode 100644 kicker/data/tiles/blue_wood_tiny_down.png create mode 100644 kicker/data/tiles/blue_wood_tiny_up.png create mode 100644 kicker/data/tiles/green_wood_large_down.png create mode 100644 kicker/data/tiles/green_wood_large_up.png create mode 100644 kicker/data/tiles/green_wood_normal_down.png create mode 100644 kicker/data/tiles/green_wood_normal_up.png create mode 100644 kicker/data/tiles/green_wood_tiny_down.png create mode 100644 kicker/data/tiles/green_wood_tiny_up.png create mode 100644 kicker/data/tiles/light_gray_large_down.png create mode 100644 kicker/data/tiles/light_gray_large_up.png create mode 100644 kicker/data/tiles/light_gray_normal_up.png create mode 100644 kicker/data/tiles/light_gray_tiny_down.png create mode 100644 kicker/data/tiles/light_gray_tiny_up.png create mode 100644 kicker/data/tiles/light_green_large_down.png create mode 100644 kicker/data/tiles/light_green_large_up.png create mode 100644 kicker/data/tiles/light_green_normal_down.png create mode 100644 kicker/data/tiles/light_green_normal_up.png create mode 100644 kicker/data/tiles/light_green_tiny_down.png create mode 100644 kicker/data/tiles/light_green_tiny_up.png create mode 100644 kicker/data/tiles/light_pastel_large_down.png create mode 100644 kicker/data/tiles/light_pastel_large_up.png create mode 100644 kicker/data/tiles/light_pastel_normal_up.png create mode 100644 kicker/data/tiles/light_pastel_tiny_down.png create mode 100644 kicker/data/tiles/light_pastel_tiny_up.png create mode 100644 kicker/data/tiles/light_purple_large_down.png create mode 100644 kicker/data/tiles/light_purple_large_up.png create mode 100644 kicker/data/tiles/light_purple_normal_down.png create mode 100644 kicker/data/tiles/light_purple_normal_up.png create mode 100644 kicker/data/tiles/light_purple_tiny_down.png create mode 100644 kicker/data/tiles/light_purple_tiny_up.png create mode 100644 kicker/data/tiles/nuts_and_bolts_large_down.png create mode 100644 kicker/data/tiles/nuts_and_bolts_large_up.png create mode 100644 kicker/data/tiles/nuts_and_bolts_normal_down.png create mode 100644 kicker/data/tiles/nuts_and_bolts_normal_up.png create mode 100644 kicker/data/tiles/nuts_and_bolts_tiny_down.png create mode 100644 kicker/data/tiles/nuts_and_bolts_tiny_up.png create mode 100644 kicker/data/tiles/red_wood_large_down.png create mode 100644 kicker/data/tiles/red_wood_large_up.png create mode 100644 kicker/data/tiles/red_wood_normal_down.png create mode 100644 kicker/data/tiles/red_wood_normal_up.png create mode 100644 kicker/data/tiles/red_wood_tiny_down.png create mode 100644 kicker/data/tiles/red_wood_tiny_up.png create mode 100644 kicker/data/tiles/solid_blue_large_down.png create mode 100644 kicker/data/tiles/solid_blue_large_up.png create mode 100644 kicker/data/tiles/solid_blue_normal_down.png create mode 100644 kicker/data/tiles/solid_blue_normal_up.png create mode 100644 kicker/data/tiles/solid_blue_tiny_down.png create mode 100644 kicker/data/tiles/solid_blue_tiny_up.png create mode 100644 kicker/data/tiles/solid_gray_large_down.png create mode 100644 kicker/data/tiles/solid_gray_large_up.png create mode 100644 kicker/data/tiles/solid_gray_normal_down.png create mode 100644 kicker/data/tiles/solid_gray_normal_up.png create mode 100644 kicker/data/tiles/solid_gray_tiny_down.png create mode 100644 kicker/data/tiles/solid_gray_tiny_up.png create mode 100644 kicker/data/tiles/solid_green_large_down.png create mode 100644 kicker/data/tiles/solid_green_large_up.png create mode 100644 kicker/data/tiles/solid_green_normal_down.png create mode 100644 kicker/data/tiles/solid_green_normal_up.png create mode 100644 kicker/data/tiles/solid_green_tiny_down.png create mode 100644 kicker/data/tiles/solid_green_tiny_up.png create mode 100644 kicker/data/tiles/solid_orange_large_down.png create mode 100644 kicker/data/tiles/solid_orange_large_up.png create mode 100644 kicker/data/tiles/solid_orange_normal_down.png create mode 100644 kicker/data/tiles/solid_orange_normal_up.png create mode 100644 kicker/data/tiles/solid_orange_tiny_down.png create mode 100644 kicker/data/tiles/solid_orange_tiny_up.png create mode 100644 kicker/data/tiles/solid_pastel_large_down.png create mode 100644 kicker/data/tiles/solid_pastel_large_up.png create mode 100644 kicker/data/tiles/solid_pastel_normal_down.png create mode 100644 kicker/data/tiles/solid_pastel_normal_up.png create mode 100644 kicker/data/tiles/solid_pastel_tiny_down.png create mode 100644 kicker/data/tiles/solid_pastel_tiny_up.png create mode 100644 kicker/data/tiles/solid_purple_large_down.png create mode 100644 kicker/data/tiles/solid_purple_large_up.png create mode 100644 kicker/data/tiles/solid_purple_normal_down.png create mode 100644 kicker/data/tiles/solid_purple_normal_up.png create mode 100644 kicker/data/tiles/solid_purple_tiny_down.png create mode 100644 kicker/data/tiles/solid_purple_tiny_up.png create mode 100644 kicker/data/tiles/solid_red_large_down.png create mode 100644 kicker/data/tiles/solid_red_large_up.png create mode 100644 kicker/data/tiles/solid_red_normal_down.png create mode 100644 kicker/data/tiles/solid_red_normal_up.png create mode 100644 kicker/data/tiles/solid_red_tiny_down.png create mode 100644 kicker/data/tiles/solid_red_tiny_up.png create mode 100644 kicker/data/tiles/solid_tigereye_large_down.png create mode 100644 kicker/data/tiles/solid_tigereye_large_up.png create mode 100644 kicker/data/tiles/solid_tigereye_normal_down.png create mode 100644 kicker/data/tiles/solid_tigereye_normal_up.png create mode 100644 kicker/data/tiles/solid_tigereye_tiny_down.png create mode 100644 kicker/data/tiles/solid_tigereye_tiny_up.png create mode 100644 kicker/data/wallpaper/Makefile.am create mode 100644 kicker/data/wallpaper/deck_plate.png create mode 100644 kicker/data/wallpaper/default.png create mode 100644 kicker/data/wallpaper/green_line.png create mode 100644 kicker/data/wallpaper/rail.png create mode 100644 kicker/extensions/Makefile.am create mode 100644 kicker/extensions/dockbar/Makefile.am create mode 100644 kicker/extensions/dockbar/dockbarextension.cpp create mode 100644 kicker/extensions/dockbar/dockbarextension.desktop create mode 100644 kicker/extensions/dockbar/dockbarextension.h create mode 100644 kicker/extensions/dockbar/dockcontainer.cpp create mode 100644 kicker/extensions/dockbar/dockcontainer.h create mode 100644 kicker/extensions/kasbar/ChangeLog create mode 100644 kicker/extensions/kasbar/DESIGN create mode 100644 kicker/extensions/kasbar/Doxyfile create mode 100644 kicker/extensions/kasbar/Makefile.am create mode 100644 kicker/extensions/kasbar/TODO create mode 100644 kicker/extensions/kasbar/configure.in.in create mode 100644 kicker/extensions/kasbar/docs.h create mode 100644 kicker/extensions/kasbar/kasaboutdlg.cpp create mode 100644 kicker/extensions/kasbar/kasaboutdlg.h create mode 100644 kicker/extensions/kasbar/kasbar.cpp create mode 100644 kicker/extensions/kasbar/kasbar.h create mode 100644 kicker/extensions/kasbar/kasbarapp.cpp create mode 100644 kicker/extensions/kasbar/kasbarextension.cpp create mode 100644 kicker/extensions/kasbar/kasbarextension.desktop create mode 100644 kicker/extensions/kasbar/kasbarextension.h create mode 100644 kicker/extensions/kasbar/kasclockitem.cpp create mode 100644 kicker/extensions/kasbar/kasclockitem.h create mode 100644 kicker/extensions/kasbar/kasgrouper.cpp create mode 100644 kicker/extensions/kasbar/kasgrouper.h create mode 100644 kicker/extensions/kasbar/kasgroupitem.cpp create mode 100644 kicker/extensions/kasbar/kasgroupitem.h create mode 100644 kicker/extensions/kasbar/kasitem.cpp create mode 100644 kicker/extensions/kasbar/kasitem.h create mode 100644 kicker/extensions/kasbar/kasloaditem.cpp create mode 100644 kicker/extensions/kasbar/kasloaditem.h create mode 100644 kicker/extensions/kasbar/kaspopup.cpp create mode 100644 kicker/extensions/kasbar/kaspopup.h create mode 100644 kicker/extensions/kasbar/kasprefsdlg.cpp create mode 100644 kicker/extensions/kasbar/kasprefsdlg.h create mode 100644 kicker/extensions/kasbar/kasresources.cpp create mode 100644 kicker/extensions/kasbar/kasresources.h create mode 100644 kicker/extensions/kasbar/kasstartupitem.cpp create mode 100644 kicker/extensions/kasbar/kasstartupitem.h create mode 100644 kicker/extensions/kasbar/kastasker.cpp create mode 100644 kicker/extensions/kasbar/kastasker.h create mode 100644 kicker/extensions/kasbar/kastaskitem.cpp create mode 100644 kicker/extensions/kasbar/kastaskitem.h create mode 100644 kicker/extensions/kasbar/kastaskpopup.cpp create mode 100644 kicker/extensions/kasbar/kastaskpopup.h create mode 100644 kicker/extensions/kasbar/version.h create mode 100644 kicker/extensions/sidebar/Makefile.am create mode 100644 kicker/extensions/sidebar/sidebarextension.cpp create mode 100644 kicker/extensions/sidebar/sidebarextension.desktop create mode 100644 kicker/extensions/sidebar/sidebarextension.h create mode 100644 kicker/extensions/taskbar/Makefile.am create mode 100644 kicker/extensions/taskbar/taskbarextension.cpp create mode 100644 kicker/extensions/taskbar/taskbarextension.desktop create mode 100644 kicker/extensions/taskbar/taskbarextension.h create mode 100644 kicker/kicker/Makefile.am create mode 100644 kicker/kicker/buttons/Makefile.am create mode 100644 kicker/kicker/buttons/bookmarks.desktop create mode 100644 kicker/kicker/buttons/bookmarksbutton.cpp create mode 100644 kicker/kicker/buttons/bookmarksbutton.h create mode 100644 kicker/kicker/buttons/browser.desktop create mode 100644 kicker/kicker/buttons/browserbutton.cpp create mode 100644 kicker/kicker/buttons/browserbutton.h create mode 100644 kicker/kicker/buttons/desktop.desktop create mode 100644 kicker/kicker/buttons/desktopbutton.cpp create mode 100644 kicker/kicker/buttons/desktopbutton.h create mode 100644 kicker/kicker/buttons/exec.desktop create mode 100644 kicker/kicker/buttons/extensionbutton.cpp create mode 100644 kicker/kicker/buttons/extensionbutton.h create mode 100644 kicker/kicker/buttons/kbutton.cpp create mode 100644 kicker/kicker/buttons/kbutton.h create mode 100644 kicker/kicker/buttons/kmenu.desktop create mode 100644 kicker/kicker/buttons/nonkdeappbutton.cpp create mode 100644 kicker/kicker/buttons/nonkdeappbutton.h create mode 100644 kicker/kicker/buttons/servicebutton.cpp create mode 100644 kicker/kicker/buttons/servicebutton.h create mode 100644 kicker/kicker/buttons/servicemenubutton.cpp create mode 100644 kicker/kicker/buttons/servicemenubutton.h create mode 100644 kicker/kicker/buttons/urlbutton.cpp create mode 100644 kicker/kicker/buttons/urlbutton.h create mode 100644 kicker/kicker/buttons/windowlist.desktop create mode 100644 kicker/kicker/buttons/windowlistbutton.cpp create mode 100644 kicker/kicker/buttons/windowlistbutton.h create mode 100644 kicker/kicker/core/Makefile.am create mode 100644 kicker/kicker/core/applethandle.cpp create mode 100644 kicker/kicker/core/applethandle.h create mode 100644 kicker/kicker/core/childpanelextension.desktop create mode 100644 kicker/kicker/core/container_applet.cpp create mode 100644 kicker/kicker/core/container_applet.h create mode 100644 kicker/kicker/core/container_base.cpp create mode 100644 kicker/kicker/core/container_base.h create mode 100644 kicker/kicker/core/container_button.cpp create mode 100644 kicker/kicker/core/container_button.h create mode 100644 kicker/kicker/core/container_extension.cpp create mode 100644 kicker/kicker/core/container_extension.h create mode 100644 kicker/kicker/core/containerarea.cpp create mode 100644 kicker/kicker/core/containerarea.h create mode 100644 kicker/kicker/core/containerarealayout.cpp create mode 100644 kicker/kicker/core/containerarealayout.h create mode 100644 kicker/kicker/core/default-apps create mode 100644 kicker/kicker/core/extensionSettings.kcfg create mode 100644 kicker/kicker/core/extensionSettings.kcfgc create mode 100644 kicker/kicker/core/extensionmanager.cpp create mode 100644 kicker/kicker/core/extensionmanager.h create mode 100644 kicker/kicker/core/kicker.cpp create mode 100644 kicker/kicker/core/kicker.h create mode 100644 kicker/kicker/core/kickerbindings.cpp create mode 100644 kicker/kicker/core/main.cpp create mode 100644 kicker/kicker/core/menumanager.cpp create mode 100644 kicker/kicker/core/menumanager.h create mode 100644 kicker/kicker/core/panelextension.cpp create mode 100644 kicker/kicker/core/panelextension.h create mode 100644 kicker/kicker/core/pluginmanager.cpp create mode 100644 kicker/kicker/core/pluginmanager.h create mode 100644 kicker/kicker/core/showdesktop.cpp create mode 100644 kicker/kicker/core/showdesktop.h create mode 100644 kicker/kicker/core/unhidetrigger.cpp create mode 100644 kicker/kicker/core/unhidetrigger.h create mode 100644 kicker/kicker/core/userrectsel.cpp create mode 100644 kicker/kicker/core/userrectsel.h create mode 100644 kicker/kicker/kcmkicker.desktop create mode 100644 kicker/kicker/kicker-3.1-properSizeSetting.pl create mode 100644 kicker/kicker/kicker-3.4-reverseLayout.cpp create mode 100755 kicker/kicker/kicker-3.5-kconfigXTize.pl create mode 100755 kicker/kicker/kicker-3.5-taskbarEnums.pl create mode 100644 kicker/kicker/kickerrc.upd create mode 100644 kicker/kicker/panel.desktop create mode 100644 kicker/kicker/ui/Makefile.am create mode 100644 kicker/kicker/ui/addapplet.cpp create mode 100644 kicker/kicker/ui/addapplet.h create mode 100644 kicker/kicker/ui/addapplet_mnu.cpp create mode 100644 kicker/kicker/ui/addapplet_mnu.h create mode 100644 kicker/kicker/ui/addappletvisualfeedback.cpp create mode 100644 kicker/kicker/ui/addappletvisualfeedback.h create mode 100644 kicker/kicker/ui/addbutton_mnu.cpp create mode 100644 kicker/kicker/ui/addbutton_mnu.h create mode 100644 kicker/kicker/ui/addextension_mnu.cpp create mode 100644 kicker/kicker/ui/addextension_mnu.h create mode 100644 kicker/kicker/ui/appletitem.ui create mode 100644 kicker/kicker/ui/appletop_mnu.cpp create mode 100644 kicker/kicker/ui/appletop_mnu.h create mode 100644 kicker/kicker/ui/appletview.ui create mode 100644 kicker/kicker/ui/appletwidget.h create mode 100644 kicker/kicker/ui/browser_dlg.cpp create mode 100644 kicker/kicker/ui/browser_dlg.h create mode 100644 kicker/kicker/ui/browser_mnu.cpp create mode 100644 kicker/kicker/ui/browser_mnu.h create mode 100644 kicker/kicker/ui/client_mnu.cpp create mode 100644 kicker/kicker/ui/client_mnu.h create mode 100644 kicker/kicker/ui/dirdrop_mnu.cpp create mode 100644 kicker/kicker/ui/dirdrop_mnu.h create mode 100644 kicker/kicker/ui/exe_dlg.cpp create mode 100644 kicker/kicker/ui/exe_dlg.h create mode 100644 kicker/kicker/ui/extensionop_mnu.cpp create mode 100644 kicker/kicker/ui/extensionop_mnu.h create mode 100644 kicker/kicker/ui/hidebutton.cpp create mode 100644 kicker/kicker/ui/hidebutton.h create mode 100644 kicker/kicker/ui/k_mnu.cpp create mode 100644 kicker/kicker/ui/k_mnu.h create mode 100644 kicker/kicker/ui/nonKDEButtonSettings.ui create mode 100644 kicker/kicker/ui/panelmenuiteminfo.h create mode 100644 kicker/kicker/ui/popupmenutitle.cpp create mode 100644 kicker/kicker/ui/popupmenutitle.h create mode 100644 kicker/kicker/ui/quickbrowser_mnu.cpp create mode 100644 kicker/kicker/ui/quickbrowser_mnu.h create mode 100644 kicker/kicker/ui/recentapps.cpp create mode 100644 kicker/kicker/ui/recentapps.h create mode 100644 kicker/kicker/ui/removeapplet_mnu.cpp create mode 100644 kicker/kicker/ui/removeapplet_mnu.h create mode 100644 kicker/kicker/ui/removebutton_mnu.cpp create mode 100644 kicker/kicker/ui/removebutton_mnu.h create mode 100644 kicker/kicker/ui/removecontainer_mnu.cpp create mode 100644 kicker/kicker/ui/removecontainer_mnu.h create mode 100644 kicker/kicker/ui/removeextension_mnu.cpp create mode 100644 kicker/kicker/ui/removeextension_mnu.h create mode 100644 kicker/kicker/ui/service_mnu.cpp create mode 100644 kicker/kicker/ui/service_mnu.h create mode 100644 kicker/libkicker/Makefile.am create mode 100644 kicker/libkicker/appletinfo.cpp create mode 100644 kicker/libkicker/appletinfo.h create mode 100644 kicker/libkicker/global.cpp create mode 100644 kicker/libkicker/global.h create mode 100644 kicker/libkicker/kickerSettings.kcfg create mode 100644 kicker/libkicker/kickerSettings.kcfgc create mode 100644 kicker/libkicker/kickertip.cpp create mode 100644 kicker/libkicker/kickertip.h create mode 100644 kicker/libkicker/kshadowengine.cpp create mode 100644 kicker/libkicker/kshadowengine.h create mode 100644 kicker/libkicker/kshadowsettings.cpp create mode 100644 kicker/libkicker/kshadowsettings.h create mode 100644 kicker/libkicker/menuinfo.cpp create mode 100644 kicker/libkicker/menuinfo.h create mode 100644 kicker/libkicker/panelbutton.cpp create mode 100644 kicker/libkicker/panelbutton.h create mode 100644 kicker/libkicker/paneldrag.cpp create mode 100644 kicker/libkicker/paneldrag.h create mode 100644 kicker/libkicker/panner.cpp create mode 100644 kicker/libkicker/panner.h create mode 100644 kicker/libkicker/simplebutton.cpp create mode 100644 kicker/libkicker/simplebutton.h create mode 100644 kicker/menuext/Makefile.am create mode 100644 kicker/menuext/find/Makefile.am create mode 100644 kicker/menuext/find/find.desktop create mode 100644 kicker/menuext/find/findmenu.cpp create mode 100644 kicker/menuext/find/findmenu.h create mode 100644 kicker/menuext/find/kfind.desktop create mode 100644 kicker/menuext/find/websearch.desktop create mode 100644 kicker/menuext/kate/Makefile.am create mode 100644 kicker/menuext/kate/katesessionmenu.cpp create mode 100644 kicker/menuext/kate/katesessionmenu.desktop create mode 100644 kicker/menuext/kate/katesessionmenu.h create mode 100644 kicker/menuext/kdeprint/Makefile.am create mode 100644 kicker/menuext/kdeprint/print_mnu.cpp create mode 100644 kicker/menuext/kdeprint/print_mnu.h create mode 100644 kicker/menuext/kdeprint/printmenu.desktop create mode 100644 kicker/menuext/konq-profiles/Makefile.am create mode 100644 kicker/menuext/konq-profiles/konquerormenu.desktop create mode 100644 kicker/menuext/konq-profiles/konqy_menu.cpp create mode 100644 kicker/menuext/konq-profiles/konqy_menu.h create mode 100644 kicker/menuext/konsole/Makefile.am create mode 100644 kicker/menuext/konsole/konsole_mnu.cpp create mode 100644 kicker/menuext/konsole/konsole_mnu.h create mode 100644 kicker/menuext/konsole/konsolebookmarkhandler.cpp create mode 100644 kicker/menuext/konsole/konsolebookmarkhandler.h create mode 100644 kicker/menuext/konsole/konsolebookmarkmenu.cpp create mode 100644 kicker/menuext/konsole/konsolebookmarkmenu.h create mode 100644 kicker/menuext/konsole/konsolemenu.desktop create mode 100644 kicker/menuext/prefmenu/Makefile.am create mode 100644 kicker/menuext/prefmenu/prefmenu.cpp create mode 100644 kicker/menuext/prefmenu/prefmenu.desktop create mode 100644 kicker/menuext/prefmenu/prefmenu.h create mode 100644 kicker/menuext/recentdocs/Makefile.am create mode 100644 kicker/menuext/recentdocs/recentdocs.desktop create mode 100644 kicker/menuext/recentdocs/recentdocsmenu.cpp create mode 100644 kicker/menuext/recentdocs/recentdocsmenu.h create mode 100644 kicker/menuext/remote/Makefile.am create mode 100644 kicker/menuext/remote/remotemenu.cpp create mode 100644 kicker/menuext/remote/remotemenu.desktop create mode 100644 kicker/menuext/remote/remotemenu.h create mode 100644 kicker/menuext/system/Makefile.am create mode 100644 kicker/menuext/system/systemmenu.cpp create mode 100644 kicker/menuext/system/systemmenu.desktop create mode 100644 kicker/menuext/system/systemmenu.h create mode 100644 kicker/menuext/tom/Makefile.am create mode 100644 kicker/menuext/tom/README create mode 100644 kicker/menuext/tom/TASKGROUPS create mode 100644 kicker/menuext/tom/destinations create mode 100644 kicker/menuext/tom/tom.cc create mode 100644 kicker/menuext/tom/tom.desktop create mode 100644 kicker/menuext/tom/tom.h create mode 100644 kicker/proxy/Makefile.am create mode 100644 kicker/proxy/appletproxy.cpp create mode 100644 kicker/proxy/appletproxy.h create mode 100644 kicker/proxy/extensiondebugger.cpp create mode 100644 kicker/proxy/extensiondebugger.h create mode 100644 kicker/proxy/extensionproxy.cpp create mode 100644 kicker/proxy/extensionproxy.h create mode 100644 kicker/rich-ideas.txt create mode 100644 kicker/taskbar/Makefile.am create mode 100644 kicker/taskbar/taskbar.cpp create mode 100644 kicker/taskbar/taskbar.h create mode 100644 kicker/taskbar/taskbar.kcfg create mode 100644 kicker/taskbar/taskbarbindings.cpp create mode 100644 kicker/taskbar/taskbarcontainer.cpp create mode 100644 kicker/taskbar/taskbarcontainer.h create mode 100644 kicker/taskbar/taskbarsettings.kcfgc create mode 100644 kicker/taskbar/taskcontainer.cpp create mode 100644 kicker/taskbar/taskcontainer.h create mode 100644 kicker/taskmanager/Makefile.am create mode 100644 kicker/taskmanager/configure.in.in create mode 100644 kicker/taskmanager/tasklmbmenu.cpp create mode 100644 kicker/taskmanager/tasklmbmenu.h create mode 100644 kicker/taskmanager/taskmanager.cpp create mode 100644 kicker/taskmanager/taskmanager.h create mode 100644 kicker/taskmanager/taskrmbmenu.cpp create mode 100644 kicker/taskmanager/taskrmbmenu.h create mode 100644 kioslave/DEBUG.howto create mode 100644 kioslave/DESIGN create mode 100644 kioslave/Makefile.am create mode 100644 kioslave/about/Makefile.am create mode 100644 kioslave/about/about.protocol create mode 100644 kioslave/about/kio_about.cpp create mode 100644 kioslave/about/kio_about.h create mode 100644 kioslave/cgi/Makefile.am create mode 100644 kioslave/cgi/README create mode 100644 kioslave/cgi/cgi.cpp create mode 100644 kioslave/cgi/cgi.h create mode 100644 kioslave/cgi/cgi.protocol create mode 100644 kioslave/cgi/kcmcgi/Makefile.am create mode 100644 kioslave/cgi/kcmcgi/kcmcgi.cpp create mode 100644 kioslave/cgi/kcmcgi/kcmcgi.desktop create mode 100644 kioslave/cgi/kcmcgi/kcmcgi.h create mode 100644 kioslave/configure.in.bot create mode 100644 kioslave/configure.in.in create mode 100644 kioslave/filter/Makefile.am create mode 100644 kioslave/filter/bzip.protocol create mode 100644 kioslave/filter/bzip2.protocol create mode 100644 kioslave/filter/configure.in.in create mode 100644 kioslave/filter/filter.cc create mode 100644 kioslave/filter/filter.h create mode 100644 kioslave/filter/gzip.protocol create mode 100644 kioslave/finger/Makefile.am create mode 100644 kioslave/finger/finger.protocol create mode 100644 kioslave/finger/kio_finger.cpp create mode 100644 kioslave/finger/kio_finger.css create mode 100644 kioslave/finger/kio_finger.h create mode 100644 kioslave/finger/kio_finger.pl create mode 100644 kioslave/fish/AUTHORS create mode 100644 kioslave/fish/COPYING create mode 100644 kioslave/fish/ChangeLog create mode 100644 kioslave/fish/FAQ create mode 100644 kioslave/fish/INSTALL create mode 100644 kioslave/fish/Makefile.am create mode 100644 kioslave/fish/README create mode 100644 kioslave/fish/TODO create mode 100644 kioslave/fish/configure.in.in create mode 100644 kioslave/fish/fish.cpp create mode 100644 kioslave/fish/fish.h create mode 100755 kioslave/fish/fish.pl create mode 100644 kioslave/fish/fish.protocol create mode 100644 kioslave/fish/nxfish.protocol create mode 100644 kioslave/floppy/AUTHORS create mode 100644 kioslave/floppy/Makefile.am create mode 100644 kioslave/floppy/README create mode 100644 kioslave/floppy/TODO create mode 100644 kioslave/floppy/floppy.protocol create mode 100644 kioslave/floppy/kio_floppy.cpp create mode 100644 kioslave/floppy/kio_floppy.h create mode 100644 kioslave/floppy/program.cpp create mode 100644 kioslave/floppy/program.h create mode 100644 kioslave/home/Makefile.am create mode 100644 kioslave/home/dummy.cpp create mode 100644 kioslave/home/home.protocol create mode 100644 kioslave/home/homeimpl.cpp create mode 100644 kioslave/home/homeimpl.h create mode 100644 kioslave/home/kdedmodule/Makefile.am create mode 100644 kioslave/home/kdedmodule/homedirnotify.cpp create mode 100644 kioslave/home/kdedmodule/homedirnotify.desktop create mode 100644 kioslave/home/kdedmodule/homedirnotify.h create mode 100644 kioslave/home/kdedmodule/homedirnotifymodule.cpp create mode 100644 kioslave/home/kdedmodule/homedirnotifymodule.h create mode 100644 kioslave/home/kio_home.cpp create mode 100644 kioslave/home/kio_home.h create mode 100644 kioslave/home/testhome.cpp create mode 100644 kioslave/home/testhome.h create mode 100644 kioslave/info/LICENSE create mode 100644 kioslave/info/Makefile.am create mode 100644 kioslave/info/info.cc create mode 100644 kioslave/info/info.h create mode 100644 kioslave/info/info.protocol create mode 100755 kioslave/info/kde-info2html create mode 100644 kioslave/info/kde-info2html.conf create mode 100644 kioslave/ldap/LICENSE create mode 100644 kioslave/ldap/Makefile.am create mode 100644 kioslave/ldap/configure.in.in create mode 100644 kioslave/ldap/kio_ldap.cpp create mode 100644 kioslave/ldap/kio_ldap.h create mode 100644 kioslave/ldap/ldap.protocol create mode 100644 kioslave/ldap/ldaps.protocol create mode 100644 kioslave/mac/AUTHORS create mode 100644 kioslave/mac/ChangeLog create mode 100644 kioslave/mac/Makefile.am create mode 100644 kioslave/mac/README create mode 100644 kioslave/mac/TODO create mode 100644 kioslave/mac/cr16-app-mac.png create mode 100644 kioslave/mac/cr32-app-mac.png create mode 100644 kioslave/mac/kio_mac.cpp create mode 100644 kioslave/mac/kio_mac.h create mode 100644 kioslave/mac/mac.protocol create mode 100644 kioslave/man/LICENSE create mode 100644 kioslave/man/Makefile.am create mode 100644 kioslave/man/kio_man.cpp create mode 100644 kioslave/man/kio_man.css create mode 100644 kioslave/man/kio_man.h create mode 100644 kioslave/man/kio_man_test.cpp create mode 100644 kioslave/man/kmanpart.cpp create mode 100644 kioslave/man/kmanpart.desktop create mode 100644 kioslave/man/kmanpart.h create mode 100644 kioslave/man/man.protocol create mode 100644 kioslave/man/man2html.cpp create mode 100644 kioslave/man/man2html.h create mode 100644 kioslave/media/Makefile.am create mode 100644 kioslave/media/configure.in.in create mode 100644 kioslave/media/contrib/README create mode 100755 kioslave/media/contrib/mediamanager_usbstorage.dev create mode 100755 kioslave/media/contrib/usbcam create mode 100644 kioslave/media/dummy.cpp create mode 100644 kioslave/media/kcmodule/Makefile.am create mode 100644 kioslave/media/kcmodule/main.cpp create mode 100644 kioslave/media/kcmodule/main.h create mode 100644 kioslave/media/kcmodule/managermodule.cpp create mode 100644 kioslave/media/kcmodule/managermodule.h create mode 100644 kioslave/media/kcmodule/managermoduleview.ui create mode 100644 kioslave/media/kcmodule/media.desktop create mode 100644 kioslave/media/kcmodule/mimetypelistboxitem.cpp create mode 100644 kioslave/media/kcmodule/mimetypelistboxitem.h create mode 100644 kioslave/media/kcmodule/notifiermodule.cpp create mode 100644 kioslave/media/kcmodule/notifiermodule.h create mode 100644 kioslave/media/kcmodule/notifiermoduleview.ui create mode 100644 kioslave/media/kcmodule/serviceconfigdialog.cpp create mode 100644 kioslave/media/kcmodule/serviceconfigdialog.h create mode 100644 kioslave/media/kcmodule/serviceview.ui create mode 100644 kioslave/media/kfile-plugin/Makefile.am create mode 100644 kioslave/media/kfile-plugin/kfile_media.desktop create mode 100644 kioslave/media/kfile-plugin/kfilemediaplugin.cpp create mode 100644 kioslave/media/kfile-plugin/kfilemediaplugin.h create mode 100644 kioslave/media/kio_media.cpp create mode 100644 kioslave/media/kio_media.h create mode 100644 kioslave/media/libmediacommon/Makefile.am create mode 100644 kioslave/media/libmediacommon/actionlistboxitem.cpp create mode 100644 kioslave/media/libmediacommon/actionlistboxitem.h create mode 100644 kioslave/media/libmediacommon/mediamanagersettings.kcfg create mode 100644 kioslave/media/libmediacommon/mediamanagersettings.kcfgc create mode 100644 kioslave/media/libmediacommon/medium.cpp create mode 100644 kioslave/media/libmediacommon/medium.h create mode 100644 kioslave/media/libmediacommon/notifieraction.cpp create mode 100644 kioslave/media/libmediacommon/notifieraction.h create mode 100644 kioslave/media/libmediacommon/notifiernothingaction.cpp create mode 100644 kioslave/media/libmediacommon/notifiernothingaction.h create mode 100644 kioslave/media/libmediacommon/notifieropenaction.cpp create mode 100644 kioslave/media/libmediacommon/notifieropenaction.h create mode 100644 kioslave/media/libmediacommon/notifierserviceaction.cpp create mode 100644 kioslave/media/libmediacommon/notifierserviceaction.h create mode 100644 kioslave/media/libmediacommon/notifiersettings.cpp create mode 100644 kioslave/media/libmediacommon/notifiersettings.h create mode 100644 kioslave/media/media.protocol create mode 100644 kioslave/media/mediaimpl.cpp create mode 100644 kioslave/media/mediaimpl.h create mode 100644 kioslave/media/mediamanager/Makefile.am create mode 100644 kioslave/media/mediamanager/backendbase.cpp create mode 100644 kioslave/media/mediamanager/backendbase.h create mode 100644 kioslave/media/mediamanager/fstabbackend.cpp create mode 100644 kioslave/media/mediamanager/fstabbackend.h create mode 100644 kioslave/media/mediamanager/halbackend.cpp create mode 100644 kioslave/media/mediamanager/halbackend.h create mode 100644 kioslave/media/mediamanager/linuxcdpolling.cpp create mode 100644 kioslave/media/mediamanager/linuxcdpolling.h create mode 100644 kioslave/media/mediamanager/mediadirnotify.cpp create mode 100644 kioslave/media/mediamanager/mediadirnotify.h create mode 100644 kioslave/media/mediamanager/medialist.cpp create mode 100644 kioslave/media/mediamanager/medialist.h create mode 100644 kioslave/media/mediamanager/mediamanager.cpp create mode 100644 kioslave/media/mediamanager/mediamanager.desktop create mode 100644 kioslave/media/mediamanager/mediamanager.h create mode 100644 kioslave/media/mediamanager/removablebackend.cpp create mode 100644 kioslave/media/mediamanager/removablebackend.h create mode 100644 kioslave/media/medianotifier/Makefile.am create mode 100644 kioslave/media/medianotifier/medianotifier.cpp create mode 100644 kioslave/media/medianotifier/medianotifier.desktop create mode 100644 kioslave/media/medianotifier/medianotifier.h create mode 100644 kioslave/media/medianotifier/notificationdialog.cpp create mode 100644 kioslave/media/medianotifier/notificationdialog.h create mode 100644 kioslave/media/medianotifier/notificationdialogview.ui create mode 100644 kioslave/media/mimetypes/Makefile.am create mode 100644 kioslave/media/mimetypes/audiocd.desktop create mode 100644 kioslave/media/mimetypes/blankcd.desktop create mode 100644 kioslave/media/mimetypes/blankdvd.desktop create mode 100644 kioslave/media/mimetypes/camera_mounted.desktop create mode 100644 kioslave/media/mimetypes/camera_unmounted.desktop create mode 100644 kioslave/media/mimetypes/cdrom_mounted.desktop create mode 100644 kioslave/media/mimetypes/cdrom_unmounted.desktop create mode 100644 kioslave/media/mimetypes/cdwriter_mounted.desktop create mode 100644 kioslave/media/mimetypes/cdwriter_unmounted.desktop create mode 100644 kioslave/media/mimetypes/dvd_mounted.desktop create mode 100644 kioslave/media/mimetypes/dvd_unmounted.desktop create mode 100644 kioslave/media/mimetypes/dvdvideo.desktop create mode 100644 kioslave/media/mimetypes/floppy5_mounted.desktop create mode 100644 kioslave/media/mimetypes/floppy5_unmounted.desktop create mode 100644 kioslave/media/mimetypes/floppy_mounted.desktop create mode 100644 kioslave/media/mimetypes/floppy_unmounted.desktop create mode 100644 kioslave/media/mimetypes/gphoto2camera.desktop create mode 100644 kioslave/media/mimetypes/hdd_mounted.desktop create mode 100644 kioslave/media/mimetypes/hdd_unmounted.desktop create mode 100644 kioslave/media/mimetypes/nfs_mounted.desktop create mode 100644 kioslave/media/mimetypes/nfs_unmounted.desktop create mode 100644 kioslave/media/mimetypes/removable_mounted.desktop create mode 100644 kioslave/media/mimetypes/removable_unmounted.desktop create mode 100644 kioslave/media/mimetypes/smb_mounted.desktop create mode 100644 kioslave/media/mimetypes/smb_unmounted.desktop create mode 100644 kioslave/media/mimetypes/svcd.desktop create mode 100644 kioslave/media/mimetypes/vcd.desktop create mode 100644 kioslave/media/mimetypes/zip_mounted.desktop create mode 100644 kioslave/media/mimetypes/zip_unmounted.desktop create mode 100644 kioslave/media/mounthelper/Makefile.am create mode 100644 kioslave/media/mounthelper/kio_media_mounthelper.cpp create mode 100644 kioslave/media/mounthelper/kio_media_mounthelper.h create mode 100644 kioslave/media/propsdlgplugin/Makefile.am create mode 100644 kioslave/media/propsdlgplugin/media_propsdlgplugin.desktop create mode 100644 kioslave/media/propsdlgplugin/propertiespage.cpp create mode 100644 kioslave/media/propsdlgplugin/propertiespage.h create mode 100644 kioslave/media/propsdlgplugin/propertiespagegui.ui create mode 100644 kioslave/media/propsdlgplugin/propertiespagegui.ui.h create mode 100644 kioslave/media/propsdlgplugin/propsdlgshareplugin.cpp create mode 100644 kioslave/media/propsdlgplugin/propsdlgshareplugin.h create mode 100644 kioslave/media/services/Makefile.am create mode 100644 kioslave/media/services/media_eject.desktop create mode 100644 kioslave/media/services/media_mount.desktop create mode 100644 kioslave/media/services/media_safelyremove.desktop create mode 100644 kioslave/media/services/media_unmount.desktop create mode 100644 kioslave/media/testmedia.cpp create mode 100644 kioslave/media/testmedia.h create mode 100644 kioslave/nfs/AUTHORS create mode 100644 kioslave/nfs/Makefile.am create mode 100644 kioslave/nfs/README create mode 100644 kioslave/nfs/TODO create mode 100644 kioslave/nfs/kio_nfs.cpp create mode 100644 kioslave/nfs/kio_nfs.h create mode 100644 kioslave/nfs/mount.h create mode 100644 kioslave/nfs/mount.x create mode 100644 kioslave/nfs/mount_xdr.c create mode 100644 kioslave/nfs/nfs.protocol create mode 100644 kioslave/nfs/nfs_prot.h create mode 100644 kioslave/nfs/nfs_prot.x create mode 100644 kioslave/nfs/nfs_prot_xdr.c create mode 100644 kioslave/nntp/LICENSE create mode 100644 kioslave/nntp/Makefile.am create mode 100644 kioslave/nntp/nntp.cpp create mode 100644 kioslave/nntp/nntp.h create mode 100644 kioslave/nntp/nntp.protocol create mode 100644 kioslave/nntp/nntps.protocol create mode 100644 kioslave/pop3/Makefile.am create mode 100644 kioslave/pop3/pop3.cc create mode 100644 kioslave/pop3/pop3.h create mode 100644 kioslave/pop3/pop3.protocol create mode 100644 kioslave/pop3/pop3s.protocol create mode 100644 kioslave/remote/Makefile.am create mode 100644 kioslave/remote/dummy.cpp create mode 100644 kioslave/remote/kdedmodule/Makefile.am create mode 100644 kioslave/remote/kdedmodule/remotedirnotify.cpp create mode 100644 kioslave/remote/kdedmodule/remotedirnotify.desktop create mode 100644 kioslave/remote/kdedmodule/remotedirnotify.h create mode 100644 kioslave/remote/kdedmodule/remotedirnotifymodule.cpp create mode 100644 kioslave/remote/kdedmodule/remotedirnotifymodule.h create mode 100644 kioslave/remote/kio_remote.cpp create mode 100644 kioslave/remote/kio_remote.h create mode 100644 kioslave/remote/remote.protocol create mode 100644 kioslave/remote/remoteimpl.cpp create mode 100644 kioslave/remote/remoteimpl.h create mode 100644 kioslave/remote/testremote.cpp create mode 100644 kioslave/remote/testremote.h create mode 100644 kioslave/settings/Makefile.am create mode 100644 kioslave/settings/applications.protocol create mode 100644 kioslave/settings/kio_settings.cc create mode 100644 kioslave/settings/kio_settings.h create mode 100644 kioslave/settings/programs.protocol create mode 100644 kioslave/settings/settings.protocol create mode 100644 kioslave/sftp/AUTHORS create mode 100644 kioslave/sftp/CHANGELOG create mode 100644 kioslave/sftp/DEBUGGING create mode 100644 kioslave/sftp/Makefile.am create mode 100644 kioslave/sftp/TODO create mode 100644 kioslave/sftp/atomicio.cpp create mode 100644 kioslave/sftp/atomicio.h create mode 100644 kioslave/sftp/kio_sftp.cpp create mode 100644 kioslave/sftp/kio_sftp.h create mode 100644 kioslave/sftp/ksshprocess.cpp create mode 100644 kioslave/sftp/ksshprocess.h create mode 100644 kioslave/sftp/ksshprocesstest.cpp create mode 100644 kioslave/sftp/process.cpp create mode 100644 kioslave/sftp/process.h create mode 100644 kioslave/sftp/sftp.h create mode 100644 kioslave/sftp/sftp.protocol create mode 100644 kioslave/sftp/sftpfileattr.cpp create mode 100644 kioslave/sftp/sftpfileattr.h create mode 100644 kioslave/smb/Makefile.am create mode 100644 kioslave/smb/configure.in.bot create mode 100644 kioslave/smb/configure.in.in create mode 100644 kioslave/smb/kio_smb.cpp create mode 100644 kioslave/smb/kio_smb.h create mode 100644 kioslave/smb/kio_smb_auth.cpp create mode 100644 kioslave/smb/kio_smb_browse.cpp create mode 100644 kioslave/smb/kio_smb_config.cpp create mode 100644 kioslave/smb/kio_smb_dir.cpp create mode 100644 kioslave/smb/kio_smb_file.cpp create mode 100644 kioslave/smb/kio_smb_internal.cpp create mode 100644 kioslave/smb/kio_smb_internal.h create mode 100644 kioslave/smb/kio_smb_mount.cpp create mode 100644 kioslave/smb/libsmbclient-HOWTO.txt create mode 100644 kioslave/smb/smb-network.desktop create mode 100644 kioslave/smb/smb.protocol create mode 100644 kioslave/smb/x-smb-server.desktop create mode 100644 kioslave/smb/x-smb-workgroup.desktop create mode 100644 kioslave/smtp/Makefile.am create mode 100644 kioslave/smtp/TODO create mode 100644 kioslave/smtp/capabilities.cc create mode 100644 kioslave/smtp/capabilities.h create mode 100644 kioslave/smtp/command.cc create mode 100644 kioslave/smtp/command.h create mode 100644 kioslave/smtp/compliance.txt create mode 100644 kioslave/smtp/interactivesmtpserver.cc create mode 100644 kioslave/smtp/interactivesmtpserver.h create mode 100644 kioslave/smtp/request.cc create mode 100644 kioslave/smtp/request.h create mode 100644 kioslave/smtp/response.cc create mode 100644 kioslave/smtp/response.h create mode 100644 kioslave/smtp/smtp.cc create mode 100644 kioslave/smtp/smtp.h create mode 100644 kioslave/smtp/smtp.protocol create mode 100644 kioslave/smtp/smtps.protocol create mode 100644 kioslave/smtp/test_commands.cc create mode 100644 kioslave/smtp/test_headergeneration.cc create mode 100644 kioslave/smtp/test_responseparser.cc create mode 100644 kioslave/smtp/transactionstate.cc create mode 100644 kioslave/smtp/transactionstate.h create mode 100644 kioslave/system/Makefile.am create mode 100644 kioslave/system/dummy.cpp create mode 100644 kioslave/system/entries/Makefile.am create mode 100644 kioslave/system/entries/documents.desktop create mode 100644 kioslave/system/entries/home.desktop create mode 100755 kioslave/system/entries/kio_system_documenthelper create mode 100644 kioslave/system/entries/media.desktop create mode 100644 kioslave/system/entries/remote.desktop create mode 100644 kioslave/system/entries/trash.desktop create mode 100644 kioslave/system/entries/users.desktop create mode 100644 kioslave/system/kdedmodule/Makefile.am create mode 100644 kioslave/system/kdedmodule/systemdirnotify.cpp create mode 100644 kioslave/system/kdedmodule/systemdirnotify.desktop create mode 100644 kioslave/system/kdedmodule/systemdirnotify.h create mode 100644 kioslave/system/kdedmodule/systemdirnotifymodule.cpp create mode 100644 kioslave/system/kdedmodule/systemdirnotifymodule.h create mode 100644 kioslave/system/kio_system.cpp create mode 100644 kioslave/system/kio_system.h create mode 100644 kioslave/system/mimetypes/Makefile.am create mode 100644 kioslave/system/mimetypes/system_directory.desktop create mode 100644 kioslave/system/system.protocol create mode 100644 kioslave/system/systemimpl.cpp create mode 100644 kioslave/system/systemimpl.h create mode 100644 kioslave/system/testsystem.cpp create mode 100644 kioslave/system/testsystem.h create mode 100644 kioslave/tar/Makefile.am create mode 100644 kioslave/tar/ar.protocol create mode 100644 kioslave/tar/ktartest.cpp create mode 100644 kioslave/tar/tar.cc create mode 100644 kioslave/tar/tar.h create mode 100644 kioslave/tar/tar.protocol create mode 100644 kioslave/tar/zip.protocol create mode 100644 kioslave/thumbnail/Makefile.am create mode 100644 kioslave/thumbnail/configure.in.in create mode 100644 kioslave/thumbnail/cursorcreator.cpp create mode 100644 kioslave/thumbnail/cursorcreator.h create mode 100644 kioslave/thumbnail/cursorthumbnail.desktop create mode 100644 kioslave/thumbnail/djvucreator.cpp create mode 100644 kioslave/thumbnail/djvucreator.h create mode 100644 kioslave/thumbnail/djvuthumbnail.desktop create mode 100644 kioslave/thumbnail/exrcreator.cpp create mode 100644 kioslave/thumbnail/exrcreator.h create mode 100644 kioslave/thumbnail/exrthumbnail.desktop create mode 100644 kioslave/thumbnail/htmlcreator.cpp create mode 100644 kioslave/thumbnail/htmlcreator.h create mode 100644 kioslave/thumbnail/htmlthumbnail.desktop create mode 100644 kioslave/thumbnail/imagecreator.cpp create mode 100644 kioslave/thumbnail/imagecreator.h create mode 100644 kioslave/thumbnail/imagethumbnail.desktop create mode 100644 kioslave/thumbnail/textcreator.cpp create mode 100644 kioslave/thumbnail/textcreator.h create mode 100644 kioslave/thumbnail/textthumbnail.desktop create mode 100644 kioslave/thumbnail/thumbcreator.desktop create mode 100644 kioslave/thumbnail/thumbnail.cpp create mode 100644 kioslave/thumbnail/thumbnail.h create mode 100644 kioslave/thumbnail/thumbnail.protocol create mode 100644 kioslave/trash/DESIGN create mode 100644 kioslave/trash/Makefile.am create mode 100644 kioslave/trash/kfile-plugin/Makefile.am create mode 100644 kioslave/trash/kfile-plugin/RETURNED_ITEMS create mode 100644 kioslave/trash/kfile-plugin/kfile_trash.cpp create mode 100644 kioslave/trash/kfile-plugin/kfile_trash.desktop create mode 100644 kioslave/trash/kfile-plugin/kfile_trash.h create mode 100644 kioslave/trash/kfile-plugin/kfile_trash_system.desktop create mode 100644 kioslave/trash/kio_trash.cpp create mode 100644 kioslave/trash/kio_trash.h create mode 100644 kioslave/trash/ktrash.cpp create mode 100644 kioslave/trash/testtrash.cpp create mode 100644 kioslave/trash/testtrash.h create mode 100644 kioslave/trash/trash.protocol create mode 100644 kioslave/trash/trashimpl.cpp create mode 100644 kioslave/trash/trashimpl.h create mode 100644 klipper/Makefile.am create mode 100644 klipper/applet.cpp create mode 100644 klipper/applet.h create mode 100644 klipper/clipboardpoll.cpp create mode 100644 klipper/clipboardpoll.h create mode 100644 klipper/configdialog.cpp create mode 100644 klipper/configdialog.h create mode 100644 klipper/configure.in.in create mode 100644 klipper/hi128-app-klipper.png create mode 100644 klipper/hi16-app-klipper.png create mode 100644 klipper/hi22-app-klipper.png create mode 100644 klipper/hi32-app-klipper.png create mode 100644 klipper/hi48-app-klipper.png create mode 100644 klipper/hi64-app-klipper.png create mode 100644 klipper/hisc-app-klipper.svgz create mode 100644 klipper/history.cpp create mode 100644 klipper/history.h create mode 100644 klipper/historyimageitem.cpp create mode 100644 klipper/historyimageitem.h create mode 100644 klipper/historyitem.cpp create mode 100644 klipper/historyitem.h create mode 100644 klipper/historystringitem.cpp create mode 100644 klipper/historystringitem.h create mode 100644 klipper/historyurlitem.cpp create mode 100644 klipper/historyurlitem.h create mode 100644 klipper/klipper-1-2.pl create mode 100644 klipper/klipper-kde31.sh create mode 100644 klipper/klipper.desktop create mode 100644 klipper/klipperbindings.cpp create mode 100644 klipper/klipperpopup.cpp create mode 100644 klipper/klipperpopup.h create mode 100644 klipper/klipperrc.desktop create mode 100644 klipper/klipperrc.upd create mode 100644 klipper/klippershortcuts.upd create mode 100644 klipper/main.cpp create mode 100644 klipper/popupproxy.cpp create mode 100644 klipper/popupproxy.h create mode 100644 klipper/toplevel.cpp create mode 100644 klipper/toplevel.h create mode 100644 klipper/urlgrabber.cpp create mode 100644 klipper/urlgrabber.h create mode 100644 klipper/version.h create mode 100644 kmenuedit/Makefile.am create mode 100644 kmenuedit/basictab.cpp create mode 100644 kmenuedit/basictab.h create mode 100644 kmenuedit/hi16-app-kmenuedit.png create mode 100644 kmenuedit/hi22-app-kmenuedit.png create mode 100644 kmenuedit/hi32-app-kmenuedit.png create mode 100644 kmenuedit/hi48-app-kmenuedit.png create mode 100644 kmenuedit/kcontrol_main.cpp create mode 100644 kmenuedit/kcontroleditui.rc create mode 100644 kmenuedit/khotkeys.cpp create mode 100644 kmenuedit/khotkeys.h create mode 100644 kmenuedit/kmenuedit.cpp create mode 100644 kmenuedit/kmenuedit.desktop create mode 100644 kmenuedit/kmenuedit.h create mode 100644 kmenuedit/kmenueditui.rc create mode 100644 kmenuedit/main.cpp create mode 100644 kmenuedit/menufile.cpp create mode 100644 kmenuedit/menufile.h create mode 100644 kmenuedit/menuinfo.cpp create mode 100644 kmenuedit/menuinfo.h create mode 100644 kmenuedit/pixmaps/Makefile.am create mode 100644 kmenuedit/pixmaps/cr22-action-menu_new.png create mode 100644 kmenuedit/pixmaps/cr22-action-menu_new_sep.png create mode 100644 kmenuedit/pixmaps/cr32-action-menu_new.png create mode 100644 kmenuedit/pixmaps/cr32-action-menu_new_sep.png create mode 100644 kmenuedit/pixmaps/lo16-action-menu_new.png create mode 100644 kmenuedit/treeview.cpp create mode 100644 kmenuedit/treeview.h create mode 100644 kmenuedit/uninstall.desktop create mode 100644 knetattach/Makefile.am create mode 100644 knetattach/TODO create mode 100644 knetattach/hi128-app-knetattach.png create mode 100644 knetattach/hi16-app-knetattach.png create mode 100644 knetattach/hi22-app-knetattach.png create mode 100644 knetattach/hi32-app-knetattach.png create mode 100644 knetattach/hi48-app-knetattach.png create mode 100644 knetattach/hi64-app-knetattach.png create mode 100644 knetattach/hisc-app-knetattach.svgz create mode 100644 knetattach/knetattach.desktop create mode 100644 knetattach/knetattach.ui create mode 100644 knetattach/knetattach.ui.h create mode 100644 knetattach/main.cpp create mode 100644 konqueror/AUTHORS create mode 100644 konqueror/ChangeLog create mode 100644 konqueror/DESIGN create mode 100644 konqueror/DESIGN_config create mode 100644 konqueror/Home.desktop create mode 100644 konqueror/IDEAS create mode 100644 konqueror/KonqMainWindowIface.cc create mode 100644 konqueror/KonqMainWindowIface.h create mode 100644 konqueror/KonqViewIface.cc create mode 100644 konqueror/KonqViewIface.h create mode 100644 konqueror/KonquerorIface.cc create mode 100644 konqueror/KonquerorIface.h create mode 100644 konqueror/Makefile.am create mode 100644 konqueror/TODO create mode 100644 konqueror/about/Makefile.am create mode 100644 konqueror/about/box-centre-konqueror.png create mode 100644 konqueror/about/intro.html create mode 100644 konqueror/about/konq.css create mode 100644 konqueror/about/konq_aboutpage.cc create mode 100644 konqueror/about/konq_aboutpage.desktop create mode 100644 konqueror/about/konq_aboutpage.h create mode 100644 konqueror/about/konqaboutpage.desktop create mode 100644 konqueror/about/launch.html create mode 100644 konqueror/about/lightning.png create mode 100644 konqueror/about/plugins.html create mode 100644 konqueror/about/plugins_rtl.html create mode 100644 konqueror/about/specs.html create mode 100644 konqueror/about/tips.html create mode 100644 konqueror/about/top-right-konqueror.png create mode 100644 konqueror/client/ChangeLog create mode 100644 konqueror/client/Makefile.am create mode 100644 konqueror/client/kfmclient.cc create mode 100644 konqueror/client/kfmclient.h create mode 100644 konqueror/client/kfmclient_3_2.upd create mode 100644 konqueror/client/kfmclient_3_2_update.sh create mode 100755 konqueror/convert_kdelnk.sh create mode 100644 konqueror/delayedinitializer.cc create mode 100644 konqueror/delayedinitializer.h create mode 100644 konqueror/iconview/Makefile.am create mode 100644 konqueror/iconview/konq_iconview.cc create mode 100644 konqueror/iconview/konq_iconview.desktop create mode 100644 konqueror/iconview/konq_iconview.h create mode 100644 konqueror/iconview/konq_iconview.rc create mode 100644 konqueror/iconview/konq_multicolumnview.desktop create mode 100644 konqueror/iconview/konq_multicolumnview.rc create mode 100644 konqueror/keditbookmarks/DESIGN create mode 100644 konqueror/keditbookmarks/Makefile.am create mode 100644 konqueror/keditbookmarks/TODO create mode 100644 konqueror/keditbookmarks/actionsimpl.cpp create mode 100644 konqueror/keditbookmarks/actionsimpl.h create mode 100644 konqueror/keditbookmarks/bookmarkinfo.cpp create mode 100644 konqueror/keditbookmarks/bookmarkinfo.h create mode 100644 konqueror/keditbookmarks/bookmarkiterator.cpp create mode 100644 konqueror/keditbookmarks/bookmarkiterator.h create mode 100644 konqueror/keditbookmarks/commands.cpp create mode 100644 konqueror/keditbookmarks/commands.h create mode 100644 konqueror/keditbookmarks/cr16-app-keditbookmarks.png create mode 100644 konqueror/keditbookmarks/cr32-app-keditbookmarks.png create mode 100644 konqueror/keditbookmarks/cr48-app-keditbookmarks.png create mode 100644 konqueror/keditbookmarks/cr64-app-keditbookmarks.png create mode 100644 konqueror/keditbookmarks/dcop.cpp create mode 100644 konqueror/keditbookmarks/dcop.h create mode 100644 konqueror/keditbookmarks/exporters.cpp create mode 100644 konqueror/keditbookmarks/exporters.h create mode 100644 konqueror/keditbookmarks/favicons.cpp create mode 100644 konqueror/keditbookmarks/favicons.h create mode 100644 konqueror/keditbookmarks/importers.cpp create mode 100644 konqueror/keditbookmarks/importers.h create mode 100644 konqueror/keditbookmarks/kbookmarkmerger.cpp create mode 100644 konqueror/keditbookmarks/kebsearchline.cpp create mode 100644 konqueror/keditbookmarks/kebsearchline.h create mode 100644 konqueror/keditbookmarks/keditbookmarks-genui.rc create mode 100644 konqueror/keditbookmarks/keditbookmarks.kcfg create mode 100644 konqueror/keditbookmarks/keditbookmarksui.rc create mode 100644 konqueror/keditbookmarks/kinsertionsort.h create mode 100644 konqueror/keditbookmarks/listview.cpp create mode 100644 konqueror/keditbookmarks/listview.h create mode 100644 konqueror/keditbookmarks/main.cpp create mode 100644 konqueror/keditbookmarks/settings.kcfgc create mode 100644 konqueror/keditbookmarks/testlink.cpp create mode 100644 konqueror/keditbookmarks/testlink.h create mode 100644 konqueror/keditbookmarks/toplevel.cpp create mode 100644 konqueror/keditbookmarks/toplevel.h create mode 100644 konqueror/keditbookmarks/uninstall.desktop create mode 100644 konqueror/keditbookmarks/updater.cpp create mode 100644 konqueror/keditbookmarks/updater.h create mode 100644 konqueror/kfmclient.desktop create mode 100644 konqueror/kfmclient_dir.desktop create mode 100644 konqueror/kfmclient_html.desktop create mode 100644 konqueror/kfmclient_war.desktop create mode 100644 konqueror/konq-simplebrowser.rc create mode 100644 konqueror/konq_actions.cc create mode 100644 konqueror/konq_actions.h create mode 100644 konqueror/konq_browseriface.cc create mode 100644 konqueror/konq_browseriface.h create mode 100644 konqueror/konq_combo.cc create mode 100644 konqueror/konq_combo.h create mode 100644 konqueror/konq_extensionmanager.cc create mode 100644 konqueror/konq_extensionmanager.h create mode 100644 konqueror/konq_factory.cc create mode 100644 konqueror/konq_factory.h create mode 100644 konqueror/konq_frame.cc create mode 100644 konqueror/konq_frame.h create mode 100644 konqueror/konq_guiclients.cc create mode 100644 konqueror/konq_guiclients.h create mode 100644 konqueror/konq_main.cc create mode 100644 konqueror/konq_main.h create mode 100644 konqueror/konq_mainwindow.cc create mode 100644 konqueror/konq_mainwindow.h create mode 100644 konqueror/konq_mainwindow_p.h create mode 100644 konqueror/konq_misc.cc create mode 100644 konqueror/konq_misc.h create mode 100644 konqueror/konq_openurlrequest.h create mode 100644 konqueror/konq_profiledlg.cc create mode 100644 konqueror/konq_profiledlg.h create mode 100644 konqueror/konq_run.cc create mode 100644 konqueror/konq_run.h create mode 100644 konqueror/konq_settingsxt.kcfgc create mode 100644 konqueror/konq_tabs.cc create mode 100644 konqueror/konq_tabs.h create mode 100644 konqueror/konq_view.cc create mode 100644 konqueror/konq_view.h create mode 100644 konqueror/konq_viewmgr.cc create mode 100644 konqueror/konq_viewmgr.h create mode 100644 konqueror/konqbrowser.desktop create mode 100644 konqueror/konqfilemgr.desktop create mode 100644 konqueror/konqueror.desktop create mode 100644 konqueror/konqueror.kcfg create mode 100644 konqueror/konqueror.rc create mode 100644 konqueror/konquerorsu.desktop create mode 100644 konqueror/kttsplugin/Makefile.am create mode 100644 konqueror/kttsplugin/khtmlkttsd.cpp create mode 100644 konqueror/kttsplugin/khtmlkttsd.desktop create mode 100644 konqueror/kttsplugin/khtmlkttsd.h create mode 100644 konqueror/kttsplugin/khtmlkttsd.rc create mode 100644 konqueror/listview/Makefile.am create mode 100644 konqueror/listview/konq_detailedlistview.desktop create mode 100644 konqueror/listview/konq_detailedlistview.rc create mode 100644 konqueror/listview/konq_infolistview.desktop create mode 100644 konqueror/listview/konq_infolistview.rc create mode 100644 konqueror/listview/konq_infolistviewitem.cc create mode 100644 konqueror/listview/konq_infolistviewitem.h create mode 100644 konqueror/listview/konq_infolistviewwidget.cc create mode 100644 konqueror/listview/konq_infolistviewwidget.h create mode 100644 konqueror/listview/konq_listview.cc create mode 100644 konqueror/listview/konq_listview.h create mode 100644 konqueror/listview/konq_listview.kcfg create mode 100644 konqueror/listview/konq_listviewitems.cc create mode 100644 konqueror/listview/konq_listviewitems.h create mode 100644 konqueror/listview/konq_listviewsettings.kcfgc create mode 100644 konqueror/listview/konq_listviewwidget.cc create mode 100644 konqueror/listview/konq_listviewwidget.h create mode 100644 konqueror/listview/konq_textview.desktop create mode 100644 konqueror/listview/konq_textview.rc create mode 100644 konqueror/listview/konq_textviewitem.cc create mode 100644 konqueror/listview/konq_textviewitem.h create mode 100644 konqueror/listview/konq_textviewwidget.cc create mode 100644 konqueror/listview/konq_textviewwidget.h create mode 100644 konqueror/listview/konq_treeview.desktop create mode 100644 konqueror/listview/konq_treeview.rc create mode 100644 konqueror/listview/konq_treeviewitem.cc create mode 100644 konqueror/listview/konq_treeviewitem.h create mode 100644 konqueror/listview/konq_treeviewwidget.cc create mode 100644 konqueror/listview/konq_treeviewwidget.h create mode 100644 konqueror/pics/Makefile.am create mode 100644 konqueror/pics/actions/Makefile.am create mode 100644 konqueror/pics/actions/cr16-action-kde1.png create mode 100644 konqueror/pics/actions/cr16-action-kde2.png create mode 100644 konqueror/pics/actions/cr16-action-kde3.png create mode 100644 konqueror/pics/actions/cr16-action-kde4.png create mode 100644 konqueror/pics/actions/cr16-action-kde5.png create mode 100644 konqueror/pics/actions/cr16-action-kde6.png create mode 100644 konqueror/pics/hi128-app-konqueror.png create mode 100644 konqueror/pics/hi16-app-kfm.png create mode 100644 konqueror/pics/hi16-app-konqueror.png create mode 100644 konqueror/pics/hi22-app-kfm.png create mode 100644 konqueror/pics/hi22-app-konqueror.png create mode 100644 konqueror/pics/hi32-app-kfm.png create mode 100644 konqueror/pics/hi32-app-konqueror.png create mode 100644 konqueror/pics/hi48-app-kfm.png create mode 100644 konqueror/pics/hi48-app-konqueror.png create mode 100644 konqueror/pics/hi64-app-kfm.png create mode 100644 konqueror/pics/hi64-app-konqueror.png create mode 100644 konqueror/pics/hisc-app-konqueror.svgz create mode 100644 konqueror/pics/indicators/Makefile.am create mode 100644 konqueror/pics/indicators/indicator_connect.png create mode 100644 konqueror/pics/indicators/indicator_empty.png create mode 100644 konqueror/pics/indicators/indicator_noconnect.png create mode 100644 konqueror/pics/indicators/indicator_viewactive.png create mode 100644 konqueror/pics/tiles/Makefile.am create mode 100644 konqueror/pics/tiles/bluemorning.png create mode 100644 konqueror/pics/tiles/canvas.png create mode 100644 konqueror/pics/tiles/kde4ever.png create mode 100644 konqueror/pics/tiles/kenwimer.png create mode 100644 konqueror/pics/tiles/noise.png create mode 100644 konqueror/pics/tiles/paper_flieder.png create mode 100644 konqueror/pics/tiles/redfiber.png create mode 100644 konqueror/preloader/Makefile.am create mode 100644 konqueror/preloader/configure.in.in create mode 100644 konqueror/preloader/konqy_preload.desktop create mode 100644 konqueror/preloader/konqy_preloader.desktop create mode 100644 konqueror/preloader/preloader.cc create mode 100644 konqueror/preloader/preloader.h create mode 100644 konqueror/profile_filemanagement.desktop create mode 100644 konqueror/profile_filepreview.desktop create mode 100644 konqueror/profile_kde_devel.desktop create mode 100644 konqueror/profile_midnightcommander.desktop create mode 100644 konqueror/profile_simplebrowser.desktop create mode 100644 konqueror/profile_tabbedbrowsing.desktop create mode 100644 konqueror/profile_webbrowsing.desktop create mode 100644 konqueror/quickprint/Makefile.am create mode 100644 konqueror/quickprint/TODO create mode 100644 konqueror/quickprint/text-ada-print.desktop create mode 100644 konqueror/quickprint/text-c++-print.desktop create mode 100644 konqueror/quickprint/text-c++h-print.desktop create mode 100644 konqueror/quickprint/text-c-print.desktop create mode 100644 konqueror/quickprint/text-ch-print.desktop create mode 100644 konqueror/quickprint/text-css-print.desktop create mode 100644 konqueror/quickprint/text-diff-print.desktop create mode 100644 konqueror/quickprint/text-html-print.desktop create mode 100644 konqueror/quickprint/text-java-print.desktop create mode 100644 konqueror/quickprint/text-log-print.desktop create mode 100644 konqueror/quickprint/text-makefile-print.desktop create mode 100644 konqueror/quickprint/text-pas-print.desktop create mode 100644 konqueror/quickprint/text-perl-print.desktop create mode 100644 konqueror/quickprint/text-print.desktop create mode 100644 konqueror/quickprint/text-python-print.desktop create mode 100644 konqueror/quickprint/text-tcl-print.desktop create mode 100644 konqueror/quickprint/text-tex-print.desktop create mode 100644 konqueror/quickprint/text-xml-print.desktop create mode 100644 konqueror/quickprint/text-xslt-print.desktop create mode 100644 konqueror/remoteencodingplugin/Makefile.am create mode 100644 konqueror/remoteencodingplugin/kremoteencodingplugin.cpp create mode 100644 konqueror/remoteencodingplugin/kremoteencodingplugin.desktop create mode 100644 konqueror/remoteencodingplugin/kremoteencodingplugin.h create mode 100644 konqueror/remoteencodingplugin/kremoteencodingplugin.rc create mode 100644 konqueror/shellcmdplugin/Makefile.am create mode 100644 konqueror/shellcmdplugin/kshellcmddialog.cpp create mode 100644 konqueror/shellcmdplugin/kshellcmddialog.h create mode 100644 konqueror/shellcmdplugin/kshellcmdexecutor.cpp create mode 100644 konqueror/shellcmdplugin/kshellcmdexecutor.h create mode 100644 konqueror/shellcmdplugin/kshellcmdplugin.cpp create mode 100644 konqueror/shellcmdplugin/kshellcmdplugin.desktop create mode 100644 konqueror/shellcmdplugin/kshellcmdplugin.h create mode 100644 konqueror/shellcmdplugin/kshellcmdplugin.rc create mode 100644 konqueror/sidebar/.version create mode 100644 konqueror/sidebar/Makefile.am create mode 100644 konqueror/sidebar/konq_sidebartng.desktop create mode 100644 konqueror/sidebar/konqsidebar.cpp create mode 100644 konqueror/sidebar/konqsidebar.h create mode 100644 konqueror/sidebar/konqsidebariface_p.h create mode 100644 konqueror/sidebar/konqsidebarplugin.cpp create mode 100644 konqueror/sidebar/konqsidebarplugin.h create mode 100644 konqueror/sidebar/konqsidebartng.rc create mode 100644 konqueror/sidebar/konqsidebartng.upd create mode 100644 konqueror/sidebar/move_konqsidebartng_entries.sh create mode 100644 konqueror/sidebar/sidebar_widget.cpp create mode 100644 konqueror/sidebar/sidebar_widget.h create mode 100644 konqueror/sidebar/test/Makefile.am create mode 100644 konqueror/sidebar/test/konqsidebartest.cpp create mode 100644 konqueror/sidebar/test/konqsidebartest.h create mode 100644 konqueror/sidebar/test/test.desktop create mode 100644 konqueror/sidebar/trees/Makefile.am create mode 100644 konqueror/sidebar/trees/bookmark_module/Makefile.am create mode 100644 konqueror/sidebar/trees/bookmark_module/bookmark_item.cpp create mode 100644 konqueror/sidebar/trees/bookmark_module/bookmark_item.h create mode 100644 konqueror/sidebar/trees/bookmark_module/bookmark_module.cpp create mode 100644 konqueror/sidebar/trees/bookmark_module/bookmark_module.h create mode 100644 konqueror/sidebar/trees/dirtree_module/Makefile.am create mode 100644 konqueror/sidebar/trees/dirtree_module/dirtree_item.cpp create mode 100644 konqueror/sidebar/trees/dirtree_module/dirtree_item.h create mode 100644 konqueror/sidebar/trees/dirtree_module/dirtree_module.cpp create mode 100644 konqueror/sidebar/trees/dirtree_module/dirtree_module.h create mode 100644 konqueror/sidebar/trees/history_module/Makefile.am create mode 100644 konqueror/sidebar/trees/history_module/history_dlg.ui create mode 100644 konqueror/sidebar/trees/history_module/history_item.cpp create mode 100644 konqueror/sidebar/trees/history_module/history_item.h create mode 100644 konqueror/sidebar/trees/history_module/history_module.cpp create mode 100644 konqueror/sidebar/trees/history_module/history_module.h create mode 100644 konqueror/sidebar/trees/history_module/history_settings.cpp create mode 100644 konqueror/sidebar/trees/history_module/history_settings.h create mode 100644 konqueror/sidebar/trees/history_module/kcmhistory.cpp create mode 100644 konqueror/sidebar/trees/history_module/kcmhistory.desktop create mode 100644 konqueror/sidebar/trees/history_module/kcmhistory.h create mode 100644 konqueror/sidebar/trees/init/Makefile.am create mode 100644 konqueror/sidebar/trees/init/README create mode 100644 konqueror/sidebar/trees/init/bookmarks.desktop create mode 100644 konqueror/sidebar/trees/init/bookmarks_module.desktop create mode 100644 konqueror/sidebar/trees/init/dirtree_module.desktop create mode 100644 konqueror/sidebar/trees/init/history.desktop create mode 100644 konqueror/sidebar/trees/init/history_module.desktop create mode 100644 konqueror/sidebar/trees/init/home.desktop create mode 100644 konqueror/sidebar/trees/init/remote.desktop create mode 100644 konqueror/sidebar/trees/init/remote/.directory create mode 100644 konqueror/sidebar/trees/init/remote/Makefile.am create mode 100644 konqueror/sidebar/trees/init/remote/ftp/.directory create mode 100644 konqueror/sidebar/trees/init/remote/ftp/Makefile.am create mode 100644 konqueror/sidebar/trees/init/remote/ftp/kde_ftp.desktop create mode 100644 konqueror/sidebar/trees/init/remote/web/.directory create mode 100644 konqueror/sidebar/trees/init/remote/web/Makefile.am create mode 100644 konqueror/sidebar/trees/init/remote/web/apps_web.desktop create mode 100644 konqueror/sidebar/trees/init/remote/web/dot_web.desktop create mode 100644 konqueror/sidebar/trees/init/remote/web/kde_web.desktop create mode 100644 konqueror/sidebar/trees/init/remote/web/look_web.desktop create mode 100644 konqueror/sidebar/trees/init/root.desktop create mode 100644 konqueror/sidebar/trees/init/services.desktop create mode 100644 konqueror/sidebar/trees/init/services/.directory create mode 100644 konqueror/sidebar/trees/init/services/Makefile.am create mode 100644 konqueror/sidebar/trees/init/services/applications.desktop create mode 100644 konqueror/sidebar/trees/init/services/audiocd.desktop create mode 100644 konqueror/sidebar/trees/init/services/media.desktop create mode 100644 konqueror/sidebar/trees/init/services/printsystem.desktop create mode 100644 konqueror/sidebar/trees/init/services/settings.desktop create mode 100644 konqueror/sidebar/trees/init/system.desktop create mode 100644 konqueror/sidebar/trees/init/virtualfolderadd.desktop create mode 100644 konqueror/sidebar/trees/konq_sidebartree.cpp create mode 100644 konqueror/sidebar/trees/konq_sidebartree.h create mode 100644 konqueror/sidebar/trees/konq_sidebartreeitem.cpp create mode 100644 konqueror/sidebar/trees/konq_sidebartreeitem.h create mode 100644 konqueror/sidebar/trees/konq_sidebartreemodule.h create mode 100644 konqueror/sidebar/trees/konq_sidebartreetoplevelitem.cpp create mode 100644 konqueror/sidebar/trees/konq_sidebartreetoplevelitem.h create mode 100644 konqueror/sidebar/trees/konqsidebar_tree.cpp create mode 100644 konqueror/sidebar/trees/konqsidebar_tree.h create mode 100644 konqueror/sidebar/web_module/Makefile.am create mode 100644 konqueror/sidebar/web_module/TODO create mode 100644 konqueror/sidebar/web_module/web_module.cpp create mode 100644 konqueror/sidebar/web_module/web_module.h create mode 100644 konqueror/sidebar/web_module/webmodule_add.desktop create mode 100644 konqueror/sidebar/web_module/websidebar.desktop create mode 100644 konqueror/sidebar/web_module/websidebar.html create mode 100644 konqueror/uninstall.desktop create mode 100644 konqueror/version.h create mode 100644 konsole/COPYING create mode 100644 konsole/ChangeLog create mode 100644 konsole/Makefile.am create mode 100644 konsole/NEWS create mode 100644 konsole/README create mode 100644 konsole/README.fonts create mode 100644 konsole/README.keyboard create mode 100644 konsole/README.konsole_kiosk create mode 100644 konsole/README.linux.console create mode 100644 konsole/README.moreColors create mode 100644 konsole/README.ports create mode 100644 konsole/README.unicode create mode 100644 konsole/configure.in.in create mode 100644 konsole/doc/Konsole2.Requirements create mode 100644 konsole/doc/Makefile.am create mode 100644 konsole/doc/More/Ansi_esc.txt create mode 100644 konsole/doc/More/Eterm.ref create mode 100644 konsole/doc/More/ansi.sys.txt create mode 100644 konsole/doc/More/ansix364.txt create mode 100644 konsole/doc/More/dec_vt100_codes.txt create mode 100644 konsole/doc/More/iowa_vt100_news.txt create mode 100644 konsole/doc/More/k95vtnttn.html create mode 100644 konsole/doc/More/rxvt-ref.html create mode 100644 konsole/doc/More/swedish_vt102_codes.txt create mode 100644 konsole/doc/More/villanova-vt100-esc-codes.txt create mode 100644 konsole/doc/More/vt100_codes_news.txt create mode 100644 konsole/doc/More/vt100_colorized_termcap.txt create mode 100644 konsole/doc/More/vt100_numeric_keypad.txt create mode 100644 konsole/doc/More/vt100_reference_card.txt create mode 100644 konsole/doc/More/vt100_scroll_region.txt create mode 100644 konsole/doc/More/vt100_setup.txt create mode 100644 konsole/doc/More/vttest.html create mode 100644 konsole/doc/More/xterm.codes create mode 100644 konsole/doc/README.first create mode 100644 konsole/doc/VT100/Makefile.am create mode 100644 konsole/doc/VT100/MoreText create mode 100644 konsole/doc/VT100/Table.Codes create mode 100644 konsole/doc/VT100/Table.Graphic create mode 100644 konsole/doc/VT100/Table.VT52 create mode 100644 konsole/doc/VT100/awk.table.graphic create mode 100644 konsole/doc/VT100/cmds.pro create mode 100644 konsole/doc/VT100/db.trans create mode 100755 konsole/doc/VT100/db2.pl create mode 100755 konsole/doc/VT100/genDocument create mode 100755 konsole/doc/VT100/genPl.pl create mode 100755 konsole/doc/VT100/genTC.pl create mode 100644 konsole/doc/VT100/konsole1.gif create mode 100644 konsole/doc/VT100/konsole2.gif create mode 100755 konsole/doc/VT100/t.pl create mode 100644 konsole/doc/VT100/techref.html create mode 100644 konsole/doc/VT100/vt100.gif create mode 100644 konsole/doc/color-schema create mode 100644 konsole/doc/framework create mode 100644 konsole/doc/histBuffer create mode 100644 konsole/doc/konsole.Doxyfile create mode 100644 konsole/doc/missing.codes create mode 100644 konsole/doc/missing.keys create mode 100755 konsole/doc/mkDocs create mode 100644 konsole/eventsrc create mode 100644 konsole/fonts/9x15.bdf create mode 100644 konsole/fonts/Makefile.am create mode 100644 konsole/fonts/console8x16.bdf create mode 100644 konsole/fonts/cp437.charmap create mode 100644 konsole/kcmkonsole.desktop create mode 100644 konsole/konsole-script.desktop create mode 100644 konsole/konsole.desktop create mode 100644 konsole/konsole.upd create mode 100644 konsole/konsole/BlockArray.cpp create mode 100644 konsole/konsole/BlockArray.h create mode 100755 konsole/konsole/MakeDefaults create mode 100644 konsole/konsole/Makefile.am create mode 100644 konsole/konsole/TECommon.h create mode 100644 konsole/konsole/TEHistory.cpp create mode 100644 konsole/konsole/TEHistory.h create mode 100644 konsole/konsole/TEPty.cpp create mode 100644 konsole/konsole/TEPty.h create mode 100644 konsole/konsole/TEScreen.cpp create mode 100644 konsole/konsole/TEScreen.h create mode 100644 konsole/konsole/TEWidget.cpp create mode 100644 konsole/konsole/TEWidget.h create mode 100644 konsole/konsole/TEmuVt102.cpp create mode 100644 konsole/konsole/TEmuVt102.h create mode 100644 konsole/konsole/TEmulation.cpp create mode 100644 konsole/konsole/TEmulation.h create mode 100644 konsole/konsole/default.keytab.h create mode 100644 konsole/konsole/fontembedder.cpp create mode 100644 konsole/konsole/keytrans.cpp create mode 100644 konsole/konsole/keytrans.h create mode 100644 konsole/konsole/konsole.cpp create mode 100644 konsole/konsole/konsole.h create mode 100644 konsole/konsole/konsole_part.cpp create mode 100644 konsole/konsole/konsole_part.h create mode 100644 konsole/konsole/konsole_wcwidth.cpp create mode 100644 konsole/konsole/konsole_wcwidth.h create mode 100644 konsole/konsole/konsolebookmarkhandler.cpp create mode 100644 konsole/konsole/konsolebookmarkhandler.h create mode 100644 konsole/konsole/konsolebookmarkmenu.cpp create mode 100644 konsole/konsole/konsolebookmarkmenu.h create mode 100644 konsole/konsole/konsoleiface.h create mode 100644 konsole/konsole/kwrited.cpp create mode 100644 konsole/konsole/kwrited.h create mode 100644 konsole/konsole/linefont.h create mode 100644 konsole/konsole/linefont.src create mode 100644 konsole/konsole/main.cpp create mode 100644 konsole/konsole/printsettings.cpp create mode 100644 konsole/konsole/printsettings.h create mode 100644 konsole/konsole/schema.cpp create mode 100644 konsole/konsole/schema.h create mode 100644 konsole/konsole/session.cpp create mode 100644 konsole/konsole/session.h create mode 100644 konsole/konsole/sessioniface.h create mode 100644 konsole/konsole/x-konsole.desktop create mode 100644 konsole/konsole/zmodem_dialog.cpp create mode 100644 konsole/konsole/zmodem_dialog.h create mode 100644 konsole/konsolehere.desktop create mode 100644 konsole/konsolepart.desktop create mode 100644 konsole/konsolesu.desktop create mode 100644 konsole/kwrited.desktop create mode 100644 konsole/other/2shells create mode 100644 konsole/other/3shells create mode 100644 konsole/other/4shells create mode 100644 konsole/other/5shells create mode 100644 konsole/other/BlackOnLightColor.schema create mode 100644 konsole/other/BlackOnLightYellow.schema create mode 100644 konsole/other/BlackOnWhite.schema create mode 100644 konsole/other/DarkPicture.schema create mode 100644 konsole/other/Example.Schema create mode 100644 konsole/other/GreenOnBlack.schema create mode 100644 konsole/other/GreenTint.schema create mode 100644 konsole/other/GreenTint_MC.schema create mode 100644 konsole/other/LightPaper.schema create mode 100644 konsole/other/LightPicture.schema create mode 100644 konsole/other/Linux.schema create mode 100644 konsole/other/Makefile.am create mode 100644 konsole/other/README create mode 100644 konsole/other/README.Desktop create mode 100644 konsole/other/README.KeyTab create mode 100644 konsole/other/README.Schema create mode 100644 konsole/other/README.default.Keytab create mode 100644 konsole/other/README.default.Schema create mode 100644 konsole/other/Transparent.schema create mode 100644 konsole/other/Transparent_MC.schema create mode 100644 konsole/other/Transparent_darkbg.schema create mode 100644 konsole/other/Transparent_lightbg.schema create mode 100644 konsole/other/WhiteOnBlack.schema create mode 100644 konsole/other/XTerm.schema create mode 100644 konsole/other/hi128-app-konsole.png create mode 100644 konsole/other/hi16-app-konsole.png create mode 100644 konsole/other/hi22-app-konsole.png create mode 100644 konsole/other/hi32-app-konsole.png create mode 100644 konsole/other/hi48-app-konsole.png create mode 100644 konsole/other/hi64-app-konsole.png create mode 100644 konsole/other/hisc-app-konsole.svgz create mode 100644 konsole/other/icons/Makefile.am create mode 100644 konsole/other/icons/cr16-action-activity.png create mode 100644 konsole/other/icons/cr16-action-konsoleblue.png create mode 100644 konsole/other/icons/cr16-action-konsolered.png create mode 100644 konsole/other/icons/cr16-action-opentermblue.png create mode 100644 konsole/other/icons/cr16-action-opentermred.png create mode 100644 konsole/other/icons/cr16-action-silence.png create mode 100644 konsole/other/icons/cr22-action-konsoleblue.png create mode 100644 konsole/other/icons/cr22-action-konsolered.png create mode 100644 konsole/other/icons/cr22-action-opentermblue.png create mode 100644 konsole/other/icons/cr22-action-opentermred.png create mode 100644 konsole/other/icons/cr32-action-konsoleblue.png create mode 100644 konsole/other/icons/cr32-action-konsolered.png create mode 100644 konsole/other/icons/cr32-action-opentermblue.png create mode 100644 konsole/other/icons/cr32-action-opentermred.png create mode 100644 konsole/other/linux.desktop create mode 100644 konsole/other/linux.keytab create mode 100644 konsole/other/mc.desktop create mode 100644 konsole/other/screen.desktop create mode 100644 konsole/other/shell.desktop create mode 100644 konsole/other/solaris.keytab create mode 100644 konsole/other/su.desktop create mode 100644 konsole/other/sumc.desktop create mode 100644 konsole/other/syscolor.schema create mode 100644 konsole/other/vim.schema create mode 100644 konsole/other/vt100.keytab create mode 100644 konsole/other/vt420pc.keytab create mode 100644 konsole/other/wallpapers/Blkmarble.jpg create mode 100644 konsole/other/wallpapers/Makefile.am create mode 100644 konsole/other/wallpapers/Metric-Monospace-14.png create mode 100644 konsole/other/wallpapers/Paper01.jpg create mode 100644 konsole/other/wallpapers/gray02.jpg create mode 100644 konsole/other/x11r5.keytab create mode 100755 konsole/schemaStrip.pl create mode 100644 konsole/terminalemulator.desktop create mode 100644 konsole/tests/9x15.repertoire-utf8 create mode 100644 konsole/tests/Makefile create mode 100644 konsole/tests/README.vttest create mode 100644 konsole/tests/audit.c create mode 100755 konsole/tests/bulktest.sh create mode 100644 konsole/tests/color-spaces.pl create mode 100755 konsole/tests/colortest.sh create mode 100755 konsole/tests/ct2 create mode 100644 konsole/tests/esc.c create mode 100644 konsole/tests/header.h create mode 100644 konsole/tests/main.c create mode 100644 konsole/tests/quote.c create mode 100644 konsole/tests/ripple.c create mode 100755 konsole/tests/sesstest create mode 100755 konsole/tests/titletest.sh create mode 100755 konsole/tests/utf8.sh create mode 100644 konsole/tests/vttest.1 create mode 100644 konsole/tips create mode 100644 kpager/Makefile.am create mode 100644 kpager/TODO create mode 100644 kpager/config.cpp create mode 100644 kpager/config.h create mode 100644 kpager/desktop.cpp create mode 100644 kpager/desktop.h create mode 100644 kpager/hi16-app-kpager.png create mode 100644 kpager/hi22-app-kpager.png create mode 100644 kpager/hi32-app-kpager.png create mode 100644 kpager/hi48-app-kpager.png create mode 100644 kpager/kpager.cpp create mode 100644 kpager/kpager.desktop create mode 100644 kpager/kpager.h create mode 100644 kpager/kpagerIface.h create mode 100644 kpager/main.cpp create mode 100644 kpager/uninstall.desktop create mode 100644 kpager/windowdrag.cpp create mode 100644 kpager/windowdrag.h create mode 100644 kpersonalizer/Makefile.am create mode 100644 kpersonalizer/README create mode 100644 kpersonalizer/TODO create mode 100644 kpersonalizer/cr16-app-kpersonalizer.png create mode 100644 kpersonalizer/cr32-app-kpersonalizer.png create mode 100644 kpersonalizer/kcountrypage.cpp create mode 100644 kpersonalizer/kcountrypage.h create mode 100644 kpersonalizer/kcountrypagedlg.ui create mode 100644 kpersonalizer/keyecandypage.cpp create mode 100644 kpersonalizer/keyecandypage.h create mode 100644 kpersonalizer/keyecandypagedlg.ui create mode 100644 kpersonalizer/kfindlanguage.cpp create mode 100644 kpersonalizer/kfindlanguage.h create mode 100644 kpersonalizer/kospage.cpp create mode 100644 kpersonalizer/kospage.h create mode 100644 kpersonalizer/kospagedlg.ui create mode 100644 kpersonalizer/kpersonalizer.cpp create mode 100644 kpersonalizer/kpersonalizer.desktop create mode 100644 kpersonalizer/kpersonalizer.h create mode 100644 kpersonalizer/krefinepage.cpp create mode 100644 kpersonalizer/krefinepage.h create mode 100644 kpersonalizer/krefinepagedlg.ui create mode 100644 kpersonalizer/kstylepage.cpp create mode 100644 kpersonalizer/kstylepage.h create mode 100644 kpersonalizer/kstylepagedlg.ui create mode 100644 kpersonalizer/ksysinfo.cpp create mode 100644 kpersonalizer/ksysinfo.h create mode 100644 kpersonalizer/main.cpp create mode 100644 kpersonalizer/pics/Makefile.am create mode 100644 kpersonalizer/pics/step1.png create mode 100644 kpersonalizer/pics/step2.png create mode 100644 kpersonalizer/pics/step3.png create mode 100644 kpersonalizer/pics/step4.png create mode 100644 kpersonalizer/pics/step5.png create mode 100644 kpersonalizer/stylepreview.ui create mode 100644 kpersonalizer/stylepreview.ui.h create mode 100644 kpersonalizer/uninstall.desktop create mode 100644 kreadconfig/Makefile.am create mode 100644 kreadconfig/kreadconfig.cpp create mode 100644 kreadconfig/kwriteconfig.cpp create mode 100644 kscreensaver.pamd create mode 100644 kscreensaver/AUTHORS create mode 100644 kscreensaver/ChangeLog create mode 100644 kscreensaver/KBlankscreen.desktop create mode 100644 kscreensaver/KRandom.desktop create mode 100644 kscreensaver/Makefile.am create mode 100644 kscreensaver/blankscrn.cpp create mode 100644 kscreensaver/blankscrn.h create mode 100644 kscreensaver/random.cpp create mode 100644 kscreensaver/random.h create mode 100644 ksmserver/KSMServerInterface.h create mode 100644 ksmserver/LICENSE create mode 100644 ksmserver/Makefile.am create mode 100644 ksmserver/README create mode 100644 ksmserver/client.cpp create mode 100644 ksmserver/client.h create mode 100644 ksmserver/configure.in.in create mode 100644 ksmserver/global.h create mode 100644 ksmserver/ksmserver.upd create mode 100644 ksmserver/legacy.cpp create mode 100644 ksmserver/main.cpp create mode 100755 ksmserver/move_session_config.sh create mode 100644 ksmserver/server.cpp create mode 100644 ksmserver/server.h create mode 100644 ksmserver/server2.h create mode 100644 ksmserver/shutdown.cpp create mode 100644 ksmserver/shutdowndlg.cpp create mode 100644 ksmserver/shutdowndlg.h create mode 100644 ksmserver/shutdownkonq.png create mode 100644 ksmserver/startup.cpp create mode 100644 ksmserver/test.cpp create mode 100644 ksplashml/Makefile.am create mode 100644 ksplashml/kcmksplash/Makefile.am create mode 100644 ksplashml/kcmksplash/installer.cpp create mode 100644 ksplashml/kcmksplash/installer.h create mode 100644 ksplashml/kcmksplash/ksplashthememgr.desktop create mode 100644 ksplashml/kcmksplash/main.cpp create mode 100644 ksplashml/kcmksplash/pics/Makefile.am create mode 100644 ksplashml/kcmksplash/pics/hi128-app-ksplash.png create mode 100644 ksplashml/kcmksplash/pics/hi16-app-ksplash.png create mode 100644 ksplashml/kcmksplash/pics/hi22-app-ksplash.png create mode 100644 ksplashml/kcmksplash/pics/hi32-app-ksplash.png create mode 100644 ksplashml/kcmksplash/pics/hi48-app-ksplash.png create mode 100644 ksplashml/kcmksplash/pics/hi64-app-ksplash.png create mode 100644 ksplashml/ksplash.desktop create mode 100644 ksplashml/ksplashiface.h create mode 100644 ksplashml/main.cpp create mode 100644 ksplashml/pics/Makefile.am create mode 100644 ksplashml/pics/splash.png create mode 100644 ksplashml/pics/themes/Makefile.am create mode 100644 ksplashml/pics/themes/blue-bend/Makefile.am create mode 100644 ksplashml/pics/themes/blue-bend/Preview.png create mode 100644 ksplashml/pics/themes/blue-bend/Theme.rc create mode 100644 ksplashml/pics/themes/blue-bend/splash_active_bar.png create mode 100644 ksplashml/pics/themes/blue-bend/splash_bottom.png create mode 100644 ksplashml/pics/themes/blue-bend/splash_inactive_bar.png create mode 100644 ksplashml/pics/themes/blue-bend/splash_top.png create mode 100644 ksplashml/pics/themes/default/Makefile.am create mode 100644 ksplashml/pics/themes/default/Preview.png create mode 100644 ksplashml/pics/themes/default/Theme.rc create mode 100644 ksplashml/pics/themes/default/locolor/Makefile.am create mode 100644 ksplashml/pics/themes/default/locolor/Preview.png create mode 100644 ksplashml/pics/themes/default/locolor/Theme.rc create mode 100644 ksplashml/pics/themes/default/locolor/splash_active_bar.png create mode 100644 ksplashml/pics/themes/default/locolor/splash_bottom.png create mode 100644 ksplashml/pics/themes/default/locolor/splash_inactive_bar.png create mode 100644 ksplashml/pics/themes/default/locolor/splash_top.png create mode 100644 ksplashml/pics/themes/default/splash.xcf.bz2 create mode 100644 ksplashml/pics/themes/default/splash_active_bar.png create mode 100644 ksplashml/pics/themes/default/splash_bottom.png create mode 100644 ksplashml/pics/themes/default/splash_inactive_bar.png create mode 100644 ksplashml/pics/themes/default/splash_top.png create mode 100644 ksplashml/pics/themes/none/Makefile.am create mode 100644 ksplashml/pics/themes/none/Theme.rc create mode 100644 ksplashml/pics/themes/simple/Makefile.am create mode 100644 ksplashml/pics/themes/simple/Preview.png create mode 100644 ksplashml/pics/themes/simple/Theme.rc create mode 100644 ksplashml/themeengine/Makefile.am create mode 100644 ksplashml/themeengine/default/Makefile.am create mode 100644 ksplashml/themeengine/default/ksplashdefault.desktop create mode 100644 ksplashml/themeengine/default/main.cpp create mode 100644 ksplashml/themeengine/default/themelegacy.cpp create mode 100644 ksplashml/themeengine/default/themelegacy.h create mode 100644 ksplashml/themeengine/ksplashplugins.desktop create mode 100644 ksplashml/themeengine/objkstheme.cpp create mode 100644 ksplashml/themeengine/objkstheme.h create mode 100644 ksplashml/themeengine/redmond/Makefile.am create mode 100644 ksplashml/themeengine/redmond/Theme.rc create mode 100644 ksplashml/themeengine/redmond/ksplashredmond.desktop create mode 100644 ksplashml/themeengine/redmond/main.cpp create mode 100644 ksplashml/themeengine/redmond/pics/Background.png create mode 100644 ksplashml/themeengine/redmond/pics/Makefile.am create mode 100644 ksplashml/themeengine/redmond/pics/Preview.png create mode 100644 ksplashml/themeengine/redmond/previewredmond.cpp create mode 100644 ksplashml/themeengine/redmond/previewredmond.h create mode 100644 ksplashml/themeengine/redmond/themeredmond.cpp create mode 100644 ksplashml/themeengine/redmond/themeredmond.h create mode 100644 ksplashml/themeengine/simple/Makefile.am create mode 100644 ksplashml/themeengine/simple/configure.in.in create mode 100644 ksplashml/themeengine/simple/main.cpp create mode 100644 ksplashml/themeengine/standard/Makefile.am create mode 100644 ksplashml/themeengine/standard/Preview.png create mode 100644 ksplashml/themeengine/standard/Theme.rc create mode 100644 ksplashml/themeengine/standard/ksplashstandard.desktop create mode 100644 ksplashml/themeengine/standard/pics/Makefile.am create mode 100644 ksplashml/themeengine/standard/pics/Preview.png create mode 100644 ksplashml/themeengine/standard/themestandard.cpp create mode 100644 ksplashml/themeengine/standard/themestandard.h create mode 100644 ksplashml/themeengine/standard/themestandardlib.cpp create mode 100644 ksplashml/themeengine/standard/wndicon.cpp create mode 100644 ksplashml/themeengine/standard/wndicon.h create mode 100644 ksplashml/themeengine/standard/wndstatus.cpp create mode 100644 ksplashml/themeengine/standard/wndstatus.h create mode 100644 ksplashml/themeengine/themeengine.cpp create mode 100644 ksplashml/themeengine/themeengine.h create mode 100644 ksplashml/wndmain.cpp create mode 100644 ksplashml/wndmain.h create mode 100644 kstart/LICENSE.readme create mode 100644 kstart/Makefile.am create mode 100644 kstart/kstart.cpp create mode 100644 kstart/kstart.h create mode 100644 kstart/version.h create mode 100644 ksysguard/CContLib/Makefile.am create mode 100644 ksysguard/CContLib/ccont.c create mode 100644 ksysguard/CContLib/ccont.h create mode 100644 ksysguard/Makefile.am create mode 100644 ksysguard/Makefile.in.temp create mode 100644 ksysguard/README create mode 100644 ksysguard/configure.in.in create mode 100644 ksysguard/cr128-app-ksysguard.png create mode 100644 ksysguard/cr16-app-ksysguard.png create mode 100644 ksysguard/cr32-app-ksysguard.png create mode 100644 ksysguard/cr48-app-ksysguard.png create mode 100644 ksysguard/cr64-app-ksysguard.png create mode 100644 ksysguard/example/Makefile.am create mode 100644 ksysguard/example/eventsrc create mode 100644 ksysguard/example/ksysguarddrc create mode 100644 ksysguard/gui/KSGAppletSettings.cc create mode 100644 ksysguard/gui/KSGAppletSettings.h create mode 100644 ksysguard/gui/KSysGuardApplet.cc create mode 100644 ksysguard/gui/KSysGuardApplet.h create mode 100644 ksysguard/gui/KSysGuardApplet.xml create mode 100644 ksysguard/gui/Makefile.am create mode 100644 ksysguard/gui/ProcessTable.sgrd create mode 100644 ksysguard/gui/SensorBrowser.cc create mode 100644 ksysguard/gui/SensorBrowser.h create mode 100644 ksysguard/gui/SensorDisplayLib/BarGraph.cc create mode 100644 ksysguard/gui/SensorDisplayLib/BarGraph.h create mode 100644 ksysguard/gui/SensorDisplayLib/DancingBars.cc create mode 100644 ksysguard/gui/SensorDisplayLib/DancingBars.h create mode 100644 ksysguard/gui/SensorDisplayLib/DancingBarsSettings.cc create mode 100644 ksysguard/gui/SensorDisplayLib/DancingBarsSettings.h create mode 100644 ksysguard/gui/SensorDisplayLib/DummyDisplay.cc create mode 100644 ksysguard/gui/SensorDisplayLib/DummyDisplay.h create mode 100644 ksysguard/gui/SensorDisplayLib/FancyPlotter.cc create mode 100644 ksysguard/gui/SensorDisplayLib/FancyPlotter.h create mode 100644 ksysguard/gui/SensorDisplayLib/FancyPlotterSettings.cc create mode 100644 ksysguard/gui/SensorDisplayLib/FancyPlotterSettings.h create mode 100644 ksysguard/gui/SensorDisplayLib/ListView.cc create mode 100644 ksysguard/gui/SensorDisplayLib/ListView.h create mode 100644 ksysguard/gui/SensorDisplayLib/ListViewSettings.cc create mode 100644 ksysguard/gui/SensorDisplayLib/ListViewSettings.h create mode 100644 ksysguard/gui/SensorDisplayLib/ListViewSettingsWidget.ui create mode 100644 ksysguard/gui/SensorDisplayLib/ListViewSettingsWidget.ui.h create mode 100644 ksysguard/gui/SensorDisplayLib/LogFile.cc create mode 100644 ksysguard/gui/SensorDisplayLib/LogFile.h create mode 100644 ksysguard/gui/SensorDisplayLib/LogFileSettings.ui create mode 100644 ksysguard/gui/SensorDisplayLib/Makefile.am create mode 100644 ksysguard/gui/SensorDisplayLib/MultiMeter.cc create mode 100644 ksysguard/gui/SensorDisplayLib/MultiMeter.h create mode 100644 ksysguard/gui/SensorDisplayLib/MultiMeterSettings.cc create mode 100644 ksysguard/gui/SensorDisplayLib/MultiMeterSettings.h create mode 100644 ksysguard/gui/SensorDisplayLib/MultiMeterSettingsWidget.ui create mode 100644 ksysguard/gui/SensorDisplayLib/MultiMeterSettingsWidget.ui.h create mode 100644 ksysguard/gui/SensorDisplayLib/ProcessController.cc create mode 100644 ksysguard/gui/SensorDisplayLib/ProcessController.h create mode 100644 ksysguard/gui/SensorDisplayLib/ProcessList.cc create mode 100644 ksysguard/gui/SensorDisplayLib/ProcessList.h create mode 100644 ksysguard/gui/SensorDisplayLib/ReniceDlg.cc create mode 100644 ksysguard/gui/SensorDisplayLib/ReniceDlg.h create mode 100644 ksysguard/gui/SensorDisplayLib/SensorDisplay.cc create mode 100644 ksysguard/gui/SensorDisplayLib/SensorDisplay.h create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLogger.cc create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLogger.h create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerDlg.cc create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerDlg.h create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerDlgWidget.ui create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerDlgWidget.ui.h create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerSettings.cc create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerSettings.h create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerSettingsWidget.ui create mode 100644 ksysguard/gui/SensorDisplayLib/SensorLoggerSettingsWidget.ui.h create mode 100644 ksysguard/gui/SensorDisplayLib/SignalPlotter.cc create mode 100644 ksysguard/gui/SensorDisplayLib/SignalPlotter.h create mode 100644 ksysguard/gui/SignalIDs.h create mode 100644 ksysguard/gui/SystemLoad.sgrd create mode 100644 ksysguard/gui/Taskmanager.ktop create mode 100644 ksysguard/gui/WorkSheet.cc create mode 100644 ksysguard/gui/WorkSheet.h create mode 100644 ksysguard/gui/WorkSheetSettings.cc create mode 100644 ksysguard/gui/WorkSheetSettings.h create mode 100644 ksysguard/gui/Workspace.cc create mode 100644 ksysguard/gui/Workspace.h create mode 100644 ksysguard/gui/kpm.c create mode 100644 ksysguard/gui/ksgrd/HostConnector.cc create mode 100644 ksysguard/gui/ksgrd/HostConnector.h create mode 100644 ksysguard/gui/ksgrd/Makefile.am create mode 100644 ksysguard/gui/ksgrd/SensorAgent.cc create mode 100644 ksysguard/gui/ksgrd/SensorAgent.h create mode 100644 ksysguard/gui/ksgrd/SensorClient.h create mode 100644 ksysguard/gui/ksgrd/SensorManager.cc create mode 100644 ksysguard/gui/ksgrd/SensorManager.h create mode 100644 ksysguard/gui/ksgrd/SensorShellAgent.cc create mode 100644 ksysguard/gui/ksgrd/SensorShellAgent.h create mode 100644 ksysguard/gui/ksgrd/SensorSocketAgent.cc create mode 100644 ksysguard/gui/ksgrd/SensorSocketAgent.h create mode 100644 ksysguard/gui/ksgrd/StyleEngine.cc create mode 100644 ksysguard/gui/ksgrd/StyleEngine.h create mode 100644 ksysguard/gui/ksgrd/StyleSettings.cc create mode 100644 ksysguard/gui/ksgrd/StyleSettings.h create mode 100644 ksysguard/gui/ksgrd/TimerSettings.cc create mode 100644 ksysguard/gui/ksgrd/TimerSettings.h create mode 100644 ksysguard/gui/ksysguard.cc create mode 100644 ksysguard/gui/ksysguard.desktop create mode 100644 ksysguard/gui/ksysguard.h create mode 100644 ksysguard/gui/ksysguardapplet.desktop create mode 100644 ksysguard/gui/ksysguardui.rc create mode 100644 ksysguard/gui/x-ksysguard.desktop create mode 100644 ksysguard/ksysguardd/Command.c create mode 100644 ksysguard/ksysguardd/Command.h create mode 100644 ksysguard/ksysguardd/FreeBSD/CPU.c create mode 100644 ksysguard/ksysguardd/FreeBSD/CPU.h create mode 100644 ksysguard/ksysguardd/FreeBSD/Makefile.am create mode 100644 ksysguard/ksysguardd/FreeBSD/Memory.c create mode 100644 ksysguard/ksysguardd/FreeBSD/Memory.h create mode 100644 ksysguard/ksysguardd/FreeBSD/ProcessList.c create mode 100644 ksysguard/ksysguardd/FreeBSD/ProcessList.h create mode 100644 ksysguard/ksysguardd/FreeBSD/apm.c create mode 100644 ksysguard/ksysguardd/FreeBSD/apm.h create mode 100644 ksysguard/ksysguardd/FreeBSD/diskstat.c create mode 100644 ksysguard/ksysguardd/FreeBSD/diskstat.h create mode 100644 ksysguard/ksysguardd/FreeBSD/loadavg.c create mode 100644 ksysguard/ksysguardd/FreeBSD/loadavg.h create mode 100644 ksysguard/ksysguardd/FreeBSD/logfile.c create mode 100644 ksysguard/ksysguardd/FreeBSD/logfile.h create mode 100644 ksysguard/ksysguardd/FreeBSD/netdev.c create mode 100644 ksysguard/ksysguardd/FreeBSD/netdev.h create mode 100644 ksysguard/ksysguardd/Irix/LoadAvg.c create mode 100644 ksysguard/ksysguardd/Irix/LoadAvg.h create mode 100644 ksysguard/ksysguardd/Irix/Makefile.am create mode 100644 ksysguard/ksysguardd/Irix/Memory.c create mode 100644 ksysguard/ksysguardd/Irix/Memory.h create mode 100644 ksysguard/ksysguardd/Irix/NetDev.c create mode 100644 ksysguard/ksysguardd/Irix/NetDev.h create mode 100644 ksysguard/ksysguardd/Irix/ProcessList.c create mode 100644 ksysguard/ksysguardd/Irix/ProcessList.h create mode 100644 ksysguard/ksysguardd/Irix/cpu.c create mode 100644 ksysguard/ksysguardd/Irix/cpu.h create mode 100644 ksysguard/ksysguardd/Linux/Makefile.am create mode 100644 ksysguard/ksysguardd/Linux/Memory.c create mode 100644 ksysguard/ksysguardd/Linux/Memory.h create mode 100644 ksysguard/ksysguardd/Linux/ProcessList.c create mode 100644 ksysguard/ksysguardd/Linux/ProcessList.h create mode 100644 ksysguard/ksysguardd/Linux/acpi.c create mode 100644 ksysguard/ksysguardd/Linux/acpi.h create mode 100644 ksysguard/ksysguardd/Linux/apm.c create mode 100644 ksysguard/ksysguardd/Linux/apm.h create mode 100644 ksysguard/ksysguardd/Linux/cpuinfo.c create mode 100644 ksysguard/ksysguardd/Linux/cpuinfo.h create mode 100644 ksysguard/ksysguardd/Linux/diskstat.c create mode 100644 ksysguard/ksysguardd/Linux/diskstat.h create mode 100644 ksysguard/ksysguardd/Linux/i8k.c create mode 100644 ksysguard/ksysguardd/Linux/i8k.h create mode 100644 ksysguard/ksysguardd/Linux/lmsensors.c create mode 100644 ksysguard/ksysguardd/Linux/lmsensors.h create mode 100644 ksysguard/ksysguardd/Linux/loadavg.c create mode 100644 ksysguard/ksysguardd/Linux/loadavg.h create mode 100644 ksysguard/ksysguardd/Linux/logfile.c create mode 100644 ksysguard/ksysguardd/Linux/logfile.h create mode 100644 ksysguard/ksysguardd/Linux/netdev.c create mode 100644 ksysguard/ksysguardd/Linux/netdev.h create mode 100644 ksysguard/ksysguardd/Linux/netstat.c create mode 100644 ksysguard/ksysguardd/Linux/netstat.h create mode 100644 ksysguard/ksysguardd/Linux/stat.c create mode 100644 ksysguard/ksysguardd/Linux/stat.h create mode 100644 ksysguard/ksysguardd/Makefile.am create mode 100644 ksysguard/ksysguardd/NetBSD/CPU.c create mode 100644 ksysguard/ksysguardd/NetBSD/CPU.h create mode 100644 ksysguard/ksysguardd/NetBSD/Makefile.am create mode 100644 ksysguard/ksysguardd/NetBSD/Memory.c create mode 100644 ksysguard/ksysguardd/NetBSD/Memory.h create mode 100644 ksysguard/ksysguardd/NetBSD/ProcessList.c create mode 100644 ksysguard/ksysguardd/NetBSD/ProcessList.h create mode 100644 ksysguard/ksysguardd/NetBSD/apm.c create mode 100644 ksysguard/ksysguardd/NetBSD/apm.h create mode 100644 ksysguard/ksysguardd/NetBSD/diskstat.c create mode 100644 ksysguard/ksysguardd/NetBSD/diskstat.h create mode 100644 ksysguard/ksysguardd/NetBSD/loadavg.c create mode 100644 ksysguard/ksysguardd/NetBSD/loadavg.h create mode 100644 ksysguard/ksysguardd/NetBSD/logfile.c create mode 100644 ksysguard/ksysguardd/NetBSD/logfile.h create mode 100644 ksysguard/ksysguardd/NetBSD/netdev.c create mode 100644 ksysguard/ksysguardd/NetBSD/netdev.h create mode 100644 ksysguard/ksysguardd/OpenBSD/Makefile.am create mode 100644 ksysguard/ksysguardd/OpenBSD/cpu.c create mode 100644 ksysguard/ksysguardd/OpenBSD/cpu.h create mode 100644 ksysguard/ksysguardd/OpenBSD/memory.c create mode 100644 ksysguard/ksysguardd/OpenBSD/memory.h create mode 100644 ksysguard/ksysguardd/PWUIDCache.c create mode 100644 ksysguard/ksysguardd/PWUIDCache.h create mode 100644 ksysguard/ksysguardd/Porting-HOWTO create mode 100644 ksysguard/ksysguardd/Solaris/LoadAvg.c create mode 100644 ksysguard/ksysguardd/Solaris/LoadAvg.h create mode 100644 ksysguard/ksysguardd/Solaris/Makefile.am create mode 100644 ksysguard/ksysguardd/Solaris/Memory.c create mode 100644 ksysguard/ksysguardd/Solaris/Memory.h create mode 100644 ksysguard/ksysguardd/Solaris/NetDev.c create mode 100644 ksysguard/ksysguardd/Solaris/NetDev.h create mode 100644 ksysguard/ksysguardd/Solaris/ProcessList.c create mode 100644 ksysguard/ksysguardd/Solaris/ProcessList.h create mode 100644 ksysguard/ksysguardd/Tru64/LoadAvg.c create mode 100644 ksysguard/ksysguardd/Tru64/LoadAvg.h create mode 100644 ksysguard/ksysguardd/Tru64/Makefile.am create mode 100644 ksysguard/ksysguardd/Tru64/Memory.c create mode 100644 ksysguard/ksysguardd/Tru64/Memory.h create mode 100644 ksysguard/ksysguardd/Tru64/NetDev.c create mode 100644 ksysguard/ksysguardd/Tru64/NetDev.h create mode 100644 ksysguard/ksysguardd/conf.c create mode 100644 ksysguard/ksysguardd/conf.h create mode 100644 ksysguard/ksysguardd/configure.in.in create mode 100644 ksysguard/ksysguardd/ksysguardd.c create mode 100644 ksysguard/ksysguardd/ksysguardd.h create mode 100644 ksysguard/ksysguardd/modules.h create mode 100644 ksysguard/pics/Makefile.am create mode 100644 ksysguard/pics/X.png create mode 100644 ksysguard/pics/computer.png create mode 100644 ksysguard/pics/daemon.png create mode 100644 ksysguard/pics/kdeapp.png create mode 100644 ksysguard/pics/kernel.png create mode 100644 ksysguard/pics/ksysguardd.png create mode 100644 ksysguard/pics/running.png create mode 100644 ksysguard/pics/shell.png create mode 100644 ksysguard/pics/tools.png create mode 100644 ksysguard/pics/unknownapp.png create mode 100644 ksysguard/pics/waiting.png create mode 100644 ksysguard/version.h create mode 100644 ksystraycmd/Makefile.am create mode 100644 ksystraycmd/README create mode 100644 ksystraycmd/ksystraycmd.cpp create mode 100644 ksystraycmd/ksystraycmd.h create mode 100644 ksystraycmd/main.cpp create mode 100644 ktip/Makefile.am create mode 100644 ktip/hi128-app-ktip.png create mode 100644 ktip/hi16-app-ktip.png create mode 100644 ktip/hi22-app-ktip.png create mode 100644 ktip/hi32-app-ktip.png create mode 100644 ktip/hi48-app-ktip.png create mode 100644 ktip/hi64-app-ktip.png create mode 100644 ktip/hisc-app-ktip.svgz create mode 100644 ktip/ktip.desktop create mode 100644 ktip/ktipwindow.cpp create mode 100644 ktip/pics/Makefile.am create mode 100644 ktip/pics/wizard_small.png create mode 100644 ktip/tips create mode 100644 ktip/uninstall.desktop create mode 100644 kwin/COMPLIANCE create mode 100644 kwin/CONFIGURING create mode 100644 kwin/HACKING create mode 100644 kwin/KWinInterface.h create mode 100644 kwin/LICENSE create mode 100644 kwin/Makefile.am create mode 100644 kwin/NEWCOLORSCHEME.README create mode 100644 kwin/README create mode 100644 kwin/activation.cpp create mode 100644 kwin/atoms.cpp create mode 100644 kwin/atoms.h create mode 100644 kwin/bridge.cpp create mode 100644 kwin/bridge.h create mode 100644 kwin/client.cpp create mode 100644 kwin/client.h create mode 100644 kwin/clients/Makefile.am create mode 100644 kwin/clients/PORTING create mode 100644 kwin/clients/REQUIREMENTS_FOR_CVS create mode 100644 kwin/clients/b2/Makefile.am create mode 100644 kwin/clients/b2/b2.desktop create mode 100644 kwin/clients/b2/b2client.cpp create mode 100644 kwin/clients/b2/b2client.h create mode 100644 kwin/clients/b2/bitmaps.h create mode 100644 kwin/clients/b2/config/Makefile.am create mode 100644 kwin/clients/b2/config/config.cpp create mode 100644 kwin/clients/b2/config/config.h create mode 100644 kwin/clients/default/Makefile.am create mode 100644 kwin/clients/default/config/Makefile.am create mode 100644 kwin/clients/default/config/config.cpp create mode 100644 kwin/clients/default/config/config.h create mode 100644 kwin/clients/default/kdedefault.cpp create mode 100644 kwin/clients/default/kdedefault.h create mode 100644 kwin/clients/keramik/Makefile.am create mode 100644 kwin/clients/keramik/config/Makefile.am create mode 100644 kwin/clients/keramik/config/config.cpp create mode 100644 kwin/clients/keramik/config/config.h create mode 100644 kwin/clients/keramik/config/keramikconfig.ui create mode 100644 kwin/clients/keramik/embedtool.cpp create mode 100644 kwin/clients/keramik/keramik.cpp create mode 100644 kwin/clients/keramik/keramik.desktop create mode 100644 kwin/clients/keramik/keramik.h create mode 100644 kwin/clients/keramik/pics/border-left.png create mode 100644 kwin/clients/keramik/pics/border-right.png create mode 100644 kwin/clients/keramik/pics/bottom-center.png create mode 100644 kwin/clients/keramik/pics/bottom-left.png create mode 100644 kwin/clients/keramik/pics/bottom-right.png create mode 100644 kwin/clients/keramik/pics/caption-large-center.png create mode 100644 kwin/clients/keramik/pics/caption-large-left.png create mode 100644 kwin/clients/keramik/pics/caption-large-right.png create mode 100644 kwin/clients/keramik/pics/caption-small-center.png create mode 100644 kwin/clients/keramik/pics/caption-small-left.png create mode 100644 kwin/clients/keramik/pics/caption-small-right.png create mode 100644 kwin/clients/keramik/pics/grabbar-center.png create mode 100644 kwin/clients/keramik/pics/grabbar-left.png create mode 100644 kwin/clients/keramik/pics/grabbar-right.png create mode 100644 kwin/clients/keramik/pics/titlebar-center.png create mode 100644 kwin/clients/keramik/pics/titlebar-left.png create mode 100644 kwin/clients/keramik/pics/titlebar-right.png create mode 100644 kwin/clients/keramik/pics/titlebutton-round-huge.png create mode 100644 kwin/clients/keramik/pics/titlebutton-round-large.png create mode 100644 kwin/clients/keramik/pics/titlebutton-round.png create mode 100644 kwin/clients/keramik/pics/titlebutton-square-huge.png create mode 100644 kwin/clients/keramik/pics/titlebutton-square-large.png create mode 100644 kwin/clients/keramik/pics/titlebutton-square.png create mode 100644 kwin/clients/kwmtheme/Makefile.am create mode 100644 kwin/clients/kwmtheme/cli_installer/Makefile.am create mode 100644 kwin/clients/kwmtheme/cli_installer/main.cpp create mode 100644 kwin/clients/kwmtheme/kwmtheme.desktop create mode 100644 kwin/clients/kwmtheme/kwmthemeclient.cpp create mode 100644 kwin/clients/kwmtheme/kwmthemeclient.h create mode 100644 kwin/clients/laptop/Makefile.am create mode 100644 kwin/clients/laptop/laptop.desktop create mode 100644 kwin/clients/laptop/laptopclient.cpp create mode 100644 kwin/clients/laptop/laptopclient.h create mode 100644 kwin/clients/modernsystem/Makefile.am create mode 100644 kwin/clients/modernsystem/btnhighcolor.h create mode 100644 kwin/clients/modernsystem/buttondata.h create mode 100644 kwin/clients/modernsystem/config/Makefile.am create mode 100644 kwin/clients/modernsystem/config/config.cpp create mode 100644 kwin/clients/modernsystem/config/config.h create mode 100644 kwin/clients/modernsystem/modernsys.cpp create mode 100644 kwin/clients/modernsystem/modernsys.h create mode 100644 kwin/clients/modernsystem/modernsystem.desktop create mode 100644 kwin/clients/plastik/Makefile.am create mode 100644 kwin/clients/plastik/config/Makefile.am create mode 100644 kwin/clients/plastik/config/config.cpp create mode 100644 kwin/clients/plastik/config/config.h create mode 100644 kwin/clients/plastik/config/configdialog.ui create mode 100644 kwin/clients/plastik/misc.cpp create mode 100644 kwin/clients/plastik/misc.h create mode 100644 kwin/clients/plastik/plastik.cpp create mode 100644 kwin/clients/plastik/plastik.desktop create mode 100644 kwin/clients/plastik/plastik.h create mode 100644 kwin/clients/plastik/plastikbutton.cpp create mode 100644 kwin/clients/plastik/plastikbutton.h create mode 100644 kwin/clients/plastik/plastikclient.cpp create mode 100644 kwin/clients/plastik/plastikclient.h create mode 100644 kwin/clients/quartz/Makefile.am create mode 100644 kwin/clients/quartz/config/Makefile.am create mode 100644 kwin/clients/quartz/config/config.cpp create mode 100644 kwin/clients/quartz/config/config.h create mode 100644 kwin/clients/quartz/quartz.cpp create mode 100644 kwin/clients/quartz/quartz.desktop create mode 100644 kwin/clients/quartz/quartz.h create mode 100644 kwin/clients/redmond/Makefile.am create mode 100644 kwin/clients/redmond/redmond.cpp create mode 100644 kwin/clients/redmond/redmond.desktop create mode 100644 kwin/clients/redmond/redmond.h create mode 100644 kwin/clients/test/Makefile.am create mode 100644 kwin/clients/test/test.cpp create mode 100644 kwin/clients/test/test.desktop create mode 100644 kwin/clients/test/test.h create mode 100644 kwin/clients/web/Makefile.am create mode 100644 kwin/clients/web/Web.cpp create mode 100644 kwin/clients/web/Web.h create mode 100644 kwin/clients/web/WebButton.cpp create mode 100644 kwin/clients/web/WebButton.h create mode 100644 kwin/clients/web/web.desktop create mode 100644 kwin/cr16-app-kwin.png create mode 100644 kwin/cr32-app-kwin.png create mode 100644 kwin/cr48-app-kwin.png create mode 100644 kwin/data/Makefile.am create mode 100644 kwin/data/fsp_workarounds_1.kwinrules create mode 100644 kwin/data/kwin.upd create mode 100644 kwin/data/kwin3_plugin.pl create mode 100644 kwin/data/kwin3_plugin.upd create mode 100644 kwin/data/kwin_focus1.sh create mode 100644 kwin/data/kwin_focus1.upd create mode 100644 kwin/data/kwin_focus2.sh create mode 100644 kwin/data/kwin_focus2.upd create mode 100644 kwin/data/kwin_fsp_workarounds_1.upd create mode 100644 kwin/data/kwiniconify.upd create mode 100644 kwin/data/kwinsticky.upd create mode 100644 kwin/data/kwinupdatewindowsettings.upd create mode 100755 kwin/data/pluginlibFix.pl create mode 100644 kwin/data/pop.wav create mode 100644 kwin/data/update_default_rules.cpp create mode 100644 kwin/data/update_window_settings.cpp create mode 100644 kwin/events.cpp create mode 100644 kwin/eventsrc create mode 100644 kwin/geometry.cpp create mode 100644 kwin/geometrytip.cpp create mode 100644 kwin/geometrytip.h create mode 100644 kwin/group.cpp create mode 100644 kwin/group.h create mode 100644 kwin/kcmkwin/Makefile.am create mode 100644 kwin/kcmkwin/kwindecoration/Makefile.am create mode 100644 kwin/kcmkwin/kwindecoration/buttons.cpp create mode 100644 kwin/kcmkwin/kwindecoration/buttons.h create mode 100644 kwin/kcmkwin/kwindecoration/kwindecoration.cpp create mode 100644 kwin/kcmkwin/kwindecoration/kwindecoration.desktop create mode 100644 kwin/kcmkwin/kwindecoration/kwindecoration.h create mode 100644 kwin/kcmkwin/kwindecoration/kwindecorationIface.h create mode 100644 kwin/kcmkwin/kwindecoration/pixmaps.h create mode 100644 kwin/kcmkwin/kwindecoration/preview.cpp create mode 100644 kwin/kcmkwin/kwindecoration/preview.h create mode 100644 kwin/kcmkwin/kwinoptions/AUTHORS create mode 100644 kwin/kcmkwin/kwinoptions/ChangeLog create mode 100644 kwin/kcmkwin/kwinoptions/Makefile.am create mode 100644 kwin/kcmkwin/kwinoptions/kwinactions.desktop create mode 100644 kwin/kcmkwin/kwinoptions/kwinadvanced.desktop create mode 100644 kwin/kcmkwin/kwinoptions/kwinfocus.desktop create mode 100644 kwin/kcmkwin/kwinoptions/kwinmoving.desktop create mode 100644 kwin/kcmkwin/kwinoptions/kwinoptions.desktop create mode 100644 kwin/kcmkwin/kwinoptions/kwintranslucency.desktop create mode 100644 kwin/kcmkwin/kwinoptions/main.cpp create mode 100644 kwin/kcmkwin/kwinoptions/main.h create mode 100644 kwin/kcmkwin/kwinoptions/mouse.cpp create mode 100644 kwin/kcmkwin/kwinoptions/mouse.h create mode 100644 kwin/kcmkwin/kwinoptions/windows.cpp create mode 100644 kwin/kcmkwin/kwinoptions/windows.h create mode 100644 kwin/kcmkwin/kwinrules/Makefile.am create mode 100644 kwin/kcmkwin/kwinrules/detectwidget.cpp create mode 100644 kwin/kcmkwin/kwinrules/detectwidget.h create mode 100644 kwin/kcmkwin/kwinrules/detectwidgetbase.ui create mode 100644 kwin/kcmkwin/kwinrules/editshortcutbase.ui create mode 100644 kwin/kcmkwin/kwinrules/kcm.cpp create mode 100644 kwin/kcmkwin/kwinrules/kcm.h create mode 100644 kwin/kcmkwin/kwinrules/kwinrules.desktop create mode 100644 kwin/kcmkwin/kwinrules/kwinsrc.cpp create mode 100644 kwin/kcmkwin/kwinrules/main.cpp create mode 100644 kwin/kcmkwin/kwinrules/ruleslist.cpp create mode 100644 kwin/kcmkwin/kwinrules/ruleslist.h create mode 100644 kwin/kcmkwin/kwinrules/ruleslistbase.ui create mode 100644 kwin/kcmkwin/kwinrules/ruleswidget.cpp create mode 100644 kwin/kcmkwin/kwinrules/ruleswidget.h create mode 100644 kwin/kcmkwin/kwinrules/ruleswidgetbase.ui create mode 100644 kwin/killer/Makefile.am create mode 100644 kwin/killer/killer.cpp create mode 100644 kwin/killwindow.cpp create mode 100644 kwin/killwindow.h create mode 100644 kwin/kompmgr/Makefile.am create mode 100644 kwin/kompmgr/configure.in.in create mode 100644 kwin/kompmgr/kompmgr.c create mode 100644 kwin/kwin.kcfg create mode 100644 kwin/kwinbindings.cpp create mode 100644 kwin/layers.cpp create mode 100644 kwin/lib/Makefile.am create mode 100644 kwin/lib/kcommondecoration.cpp create mode 100644 kwin/lib/kcommondecoration.h create mode 100644 kwin/lib/kdecoration.cpp create mode 100644 kwin/lib/kdecoration.h create mode 100644 kwin/lib/kdecoration_p.cpp create mode 100644 kwin/lib/kdecoration_p.h create mode 100644 kwin/lib/kdecoration_plugins_p.cpp create mode 100644 kwin/lib/kdecoration_plugins_p.h create mode 100644 kwin/lib/kdecorationfactory.cpp create mode 100644 kwin/lib/kdecorationfactory.h create mode 100644 kwin/main.cpp create mode 100644 kwin/main.h create mode 100644 kwin/manage.cpp create mode 100644 kwin/notifications.cpp create mode 100644 kwin/notifications.h create mode 100644 kwin/oldheaders/Makefile.am create mode 100644 kwin/oldheaders/client.h create mode 100644 kwin/oldheaders/kwinbutton.h create mode 100644 kwin/oldheaders/options.h create mode 100644 kwin/oldheaders/workspace.h create mode 100644 kwin/options.cpp create mode 100644 kwin/options.h create mode 100644 kwin/pics/Makefile.am create mode 100644 kwin/pics/bluesun.png create mode 100644 kwin/pics/close.png create mode 100644 kwin/pics/fog-grey.png create mode 100644 kwin/pics/fog.png create mode 100644 kwin/pics/greenie.dim.png create mode 100644 kwin/pics/greenie.light.png create mode 100644 kwin/pics/iconify.png create mode 100644 kwin/pics/maximize.png create mode 100644 kwin/pics/maximizedown.png create mode 100644 kwin/pics/menu.png create mode 100644 kwin/pics/pindown.png create mode 100644 kwin/pics/pinup.png create mode 100644 kwin/pics/unknown.png create mode 100644 kwin/placement.cpp create mode 100644 kwin/placement.h create mode 100644 kwin/plugins.cpp create mode 100644 kwin/plugins.h create mode 100644 kwin/popupinfo.cpp create mode 100644 kwin/popupinfo.h create mode 100644 kwin/rules.cpp create mode 100644 kwin/rules.h create mode 100644 kwin/sm.cpp create mode 100644 kwin/sm.h create mode 100644 kwin/tabbox.cpp create mode 100644 kwin/tabbox.h create mode 100644 kwin/tools/Makefile.am create mode 100644 kwin/tools/decobenchmark/Makefile.am create mode 100644 kwin/tools/decobenchmark/main.cpp create mode 100644 kwin/tools/decobenchmark/main.h create mode 100644 kwin/tools/decobenchmark/preview.cpp create mode 100644 kwin/tools/decobenchmark/preview.h create mode 100644 kwin/tools/test_gravity.cpp create mode 100644 kwin/tools/xreply/Makefile create mode 100644 kwin/tools/xreply/xreply.c create mode 100644 kwin/useractions.cpp create mode 100644 kwin/utils.cpp create mode 100644 kwin/utils.h create mode 100644 kwin/wm-spec/index.html create mode 100644 kwin/wm-spec/x107.html create mode 100644 kwin/wm-spec/x208.html create mode 100644 kwin/wm-spec/x225.html create mode 100644 kwin/wm-spec/x24.html create mode 100644 kwin/wm-spec/x340.html create mode 100644 kwin/wm-spec/x351.html create mode 100644 kwin/wm-spec/x479.html create mode 100644 kwin/wm-spec/x483.html create mode 100644 kwin/wm-spec/x489.html create mode 100644 kwin/wm-spec/x512.html create mode 100644 kwin/workspace.cpp create mode 100644 kwin/workspace.h create mode 100644 kxkb/LICENSE create mode 100644 kxkb/Makefile.am create mode 100644 kxkb/TODO create mode 100644 kxkb/configure.in.in create mode 100644 kxkb/extension.cpp create mode 100644 kxkb/extension.h create mode 100644 kxkb/kcmlayout.cpp create mode 100644 kxkb/kcmlayout.h create mode 100644 kxkb/kcmlayoutwidget.ui create mode 100644 kxkb/kcmmisc.cpp create mode 100644 kxkb/kcmmisc.h create mode 100644 kxkb/kcmmiscwidget.ui create mode 100644 kxkb/keyboard.desktop create mode 100644 kxkb/keyboard_layout.desktop create mode 100644 kxkb/kxkb.cpp create mode 100644 kxkb/kxkb.desktop create mode 100644 kxkb/kxkb.h create mode 100644 kxkb/kxkb_groups create mode 100644 kxkb/kxkbbindings.cpp create mode 100644 kxkb/kxkbconfig.cpp create mode 100644 kxkb/kxkbconfig.h create mode 100644 kxkb/kxkbtraywindow.cpp create mode 100644 kxkb/kxkbtraywindow.h create mode 100644 kxkb/layoutmap.cpp create mode 100644 kxkb/layoutmap.h create mode 100644 kxkb/pics/Makefile.am create mode 100644 kxkb/pics/hi16-app-kxkb.png create mode 100644 kxkb/pics/hi32-app-kxkb.png create mode 100644 kxkb/pics/hi48-app-kxkb.png create mode 100644 kxkb/pixmap.cpp create mode 100644 kxkb/pixmap.h create mode 100644 kxkb/rules.cpp create mode 100644 kxkb/rules.h create mode 100644 kxkb/x11helper.cpp create mode 100644 kxkb/x11helper.h create mode 100644 l10n/AUTHORS create mode 100644 l10n/C/entry.desktop create mode 100644 l10n/C/flag.png create mode 100644 l10n/Makefile.am create mode 100644 l10n/README create mode 100644 l10n/ad/entry.desktop create mode 100644 l10n/ad/flag.png create mode 100644 l10n/ae/entry.desktop create mode 100644 l10n/ae/flag.png create mode 100644 l10n/af/entry.desktop create mode 100644 l10n/af/flag.png create mode 100644 l10n/ag/entry.desktop create mode 100644 l10n/ag/flag.png create mode 100644 l10n/ai/entry.desktop create mode 100644 l10n/ai/flag.png create mode 100644 l10n/al/entry.desktop create mode 100644 l10n/al/flag.png create mode 100644 l10n/am/entry.desktop create mode 100644 l10n/am/flag.png create mode 100644 l10n/an/entry.desktop create mode 100644 l10n/an/flag.png create mode 100644 l10n/ao/entry.desktop create mode 100644 l10n/ao/flag.png create mode 100644 l10n/ar/entry.desktop create mode 100644 l10n/ar/flag.png create mode 100644 l10n/as/entry.desktop create mode 100644 l10n/as/flag.png create mode 100644 l10n/at/entry.desktop create mode 100644 l10n/at/flag.png create mode 100644 l10n/au/entry.desktop create mode 100644 l10n/au/flag.png create mode 100644 l10n/aw/entry.desktop create mode 100644 l10n/aw/flag.png create mode 100644 l10n/ax/entry.desktop create mode 100644 l10n/ax/flag.png create mode 100644 l10n/az/entry.desktop create mode 100644 l10n/az/flag.png create mode 100644 l10n/ba/entry.desktop create mode 100644 l10n/ba/flag.png create mode 100644 l10n/bb/entry.desktop create mode 100644 l10n/bb/flag.png create mode 100644 l10n/bd/entry.desktop create mode 100644 l10n/bd/flag.png create mode 100644 l10n/be/entry.desktop create mode 100644 l10n/be/flag.png create mode 100644 l10n/bf/entry.desktop create mode 100644 l10n/bf/flag.png create mode 100644 l10n/bg/entry.desktop create mode 100644 l10n/bg/flag.png create mode 100644 l10n/bh/entry.desktop create mode 100644 l10n/bh/flag.png create mode 100644 l10n/bi/entry.desktop create mode 100644 l10n/bi/flag.png create mode 100644 l10n/bj/entry.desktop create mode 100644 l10n/bj/flag.png create mode 100644 l10n/bm/entry.desktop create mode 100644 l10n/bm/flag.png create mode 100644 l10n/bn/entry.desktop create mode 100644 l10n/bn/flag.png create mode 100644 l10n/bo/entry.desktop create mode 100644 l10n/bo/flag.png create mode 100644 l10n/br/entry.desktop create mode 100644 l10n/br/flag.png create mode 100644 l10n/bs/entry.desktop create mode 100644 l10n/bs/flag.png create mode 100644 l10n/bt/entry.desktop create mode 100644 l10n/bt/flag.png create mode 100644 l10n/bw/entry.desktop create mode 100644 l10n/bw/flag.png create mode 100644 l10n/by/entry.desktop create mode 100644 l10n/by/flag.png create mode 100644 l10n/bz/entry.desktop create mode 100644 l10n/bz/flag.png create mode 100644 l10n/ca/entry.desktop create mode 100644 l10n/ca/flag.png create mode 100644 l10n/caribbean.desktop create mode 100644 l10n/cc/entry.desktop create mode 100644 l10n/cc/flag.png create mode 100644 l10n/cd/entry.desktop create mode 100644 l10n/cd/flag.png create mode 100644 l10n/centralafrica.desktop create mode 100644 l10n/centralamerica.desktop create mode 100644 l10n/centralasia.desktop create mode 100644 l10n/centraleurope.desktop create mode 100644 l10n/cf/entry.desktop create mode 100644 l10n/cf/flag.png create mode 100644 l10n/cg/entry.desktop create mode 100644 l10n/cg/flag.png create mode 100644 l10n/ch/entry.desktop create mode 100644 l10n/ch/flag.png create mode 100644 l10n/ci/entry.desktop create mode 100644 l10n/ci/flag.png create mode 100644 l10n/ck/entry.desktop create mode 100644 l10n/ck/flag.png create mode 100644 l10n/cl/entry.desktop create mode 100644 l10n/cl/flag.png create mode 100644 l10n/cm/entry.desktop create mode 100644 l10n/cm/flag.png create mode 100644 l10n/cn/entry.desktop create mode 100644 l10n/cn/flag.png create mode 100644 l10n/co/entry.desktop create mode 100644 l10n/co/flag.png create mode 100644 l10n/country.template create mode 100644 l10n/cr/entry.desktop create mode 100644 l10n/cr/flag.png create mode 100644 l10n/cu/entry.desktop create mode 100644 l10n/cu/flag.png create mode 100644 l10n/cv/entry.desktop create mode 100644 l10n/cv/flag.png create mode 100644 l10n/cx/entry.desktop create mode 100644 l10n/cx/flag.png create mode 100644 l10n/cy/entry.desktop create mode 100644 l10n/cy/flag.png create mode 100644 l10n/cz/entry.desktop create mode 100644 l10n/cz/flag.png create mode 100644 l10n/de/entry.desktop create mode 100644 l10n/de/flag.png create mode 100644 l10n/dj/entry.desktop create mode 100644 l10n/dj/flag.png create mode 100644 l10n/dk/entry.desktop create mode 100644 l10n/dk/flag.png create mode 100644 l10n/dm/entry.desktop create mode 100644 l10n/dm/flag.png create mode 100644 l10n/do/entry.desktop create mode 100644 l10n/do/flag.png create mode 100644 l10n/dz/entry.desktop create mode 100644 l10n/dz/flag.png create mode 100644 l10n/eastasia.desktop create mode 100644 l10n/easteurope.desktop create mode 100644 l10n/ec/entry.desktop create mode 100644 l10n/ec/flag.png create mode 100644 l10n/ee/entry.desktop create mode 100644 l10n/ee/flag.png create mode 100644 l10n/eg/entry.desktop create mode 100644 l10n/eg/flag.png create mode 100644 l10n/eh/entry.desktop create mode 100644 l10n/eh/flag.png create mode 100644 l10n/er/entry.desktop create mode 100644 l10n/er/flag.png create mode 100644 l10n/es/entry.desktop create mode 100644 l10n/es/flag.png create mode 100644 l10n/et/entry.desktop create mode 100644 l10n/et/flag.png create mode 100644 l10n/fi/entry.desktop create mode 100644 l10n/fi/flag.png create mode 100644 l10n/fj/entry.desktop create mode 100644 l10n/fj/flag.png create mode 100644 l10n/fk/entry.desktop create mode 100644 l10n/fk/flag.png create mode 100644 l10n/fm/entry.desktop create mode 100644 l10n/fm/flag.png create mode 100644 l10n/fo/entry.desktop create mode 100644 l10n/fo/flag.png create mode 100644 l10n/fr/entry.desktop create mode 100644 l10n/fr/flag.png create mode 100644 l10n/ga/entry.desktop create mode 100644 l10n/ga/flag.png create mode 100644 l10n/gb/entry.desktop create mode 100644 l10n/gb/flag.png create mode 100644 l10n/gd/entry.desktop create mode 100644 l10n/gd/flag.png create mode 100644 l10n/ge/entry.desktop create mode 100644 l10n/ge/flag.png create mode 100644 l10n/gh/entry.desktop create mode 100644 l10n/gh/flag.png create mode 100644 l10n/gi/entry.desktop create mode 100644 l10n/gi/flag.png create mode 100644 l10n/gl/entry.desktop create mode 100644 l10n/gl/flag.png create mode 100644 l10n/gm/entry.desktop create mode 100644 l10n/gm/flag.png create mode 100644 l10n/gn/entry.desktop create mode 100644 l10n/gn/flag.png create mode 100644 l10n/gp/entry.desktop create mode 100644 l10n/gp/flag.png create mode 100644 l10n/gq/entry.desktop create mode 100644 l10n/gq/flag.png create mode 100644 l10n/gr/entry.desktop create mode 100644 l10n/gr/flag.png create mode 100644 l10n/gt/entry.desktop create mode 100644 l10n/gt/flag.png create mode 100644 l10n/gu/entry.desktop create mode 100644 l10n/gu/flag.png create mode 100644 l10n/gw/entry.desktop create mode 100644 l10n/gw/flag.png create mode 100644 l10n/gy/entry.desktop create mode 100644 l10n/gy/flag.png create mode 100644 l10n/hk/entry.desktop create mode 100644 l10n/hk/flag.png create mode 100644 l10n/hn/entry.desktop create mode 100644 l10n/hn/flag.png create mode 100644 l10n/hr/entry.desktop create mode 100644 l10n/hr/flag.png create mode 100644 l10n/ht/entry.desktop create mode 100644 l10n/ht/flag.png create mode 100644 l10n/hu/entry.desktop create mode 100644 l10n/hu/flag.png create mode 100644 l10n/id/entry.desktop create mode 100644 l10n/id/flag.png create mode 100644 l10n/ie/entry.desktop create mode 100644 l10n/ie/flag.png create mode 100644 l10n/il/entry.desktop create mode 100644 l10n/il/flag.png create mode 100644 l10n/in/entry.desktop create mode 100644 l10n/in/flag.png create mode 100644 l10n/iq/entry.desktop create mode 100644 l10n/iq/flag.png create mode 100644 l10n/ir/entry.desktop create mode 100644 l10n/ir/flag.png create mode 100644 l10n/is/entry.desktop create mode 100644 l10n/is/flag.png create mode 100644 l10n/it/entry.desktop create mode 100644 l10n/it/flag.png create mode 100644 l10n/jm/entry.desktop create mode 100644 l10n/jm/flag.png create mode 100644 l10n/jo/entry.desktop create mode 100644 l10n/jo/flag.png create mode 100644 l10n/jp/entry.desktop create mode 100644 l10n/jp/flag.png create mode 100644 l10n/ke/entry.desktop create mode 100644 l10n/ke/flag.png create mode 100644 l10n/kg/entry.desktop create mode 100644 l10n/kg/flag.png create mode 100644 l10n/kh/entry.desktop create mode 100644 l10n/kh/flag.png create mode 100644 l10n/ki/entry.desktop create mode 100644 l10n/ki/flag.png create mode 100644 l10n/km/entry.desktop create mode 100644 l10n/km/flag.png create mode 100644 l10n/kn/entry.desktop create mode 100644 l10n/kn/flag.png create mode 100644 l10n/kp/entry.desktop create mode 100644 l10n/kp/flag.png create mode 100644 l10n/kr/entry.desktop create mode 100644 l10n/kr/flag.png create mode 100644 l10n/kw/entry.desktop create mode 100644 l10n/kw/flag.png create mode 100644 l10n/ky/entry.desktop create mode 100644 l10n/ky/flag.png create mode 100644 l10n/kz/entry.desktop create mode 100644 l10n/kz/flag.png create mode 100644 l10n/la/entry.desktop create mode 100644 l10n/la/flag.png create mode 100644 l10n/lb/entry.desktop create mode 100644 l10n/lb/flag.png create mode 100644 l10n/lc/entry.desktop create mode 100644 l10n/lc/flag.png create mode 100644 l10n/li/entry.desktop create mode 100644 l10n/li/flag.png create mode 100644 l10n/lk/entry.desktop create mode 100644 l10n/lk/flag.png create mode 100644 l10n/lr/entry.desktop create mode 100644 l10n/lr/flag.png create mode 100644 l10n/ls/entry.desktop create mode 100644 l10n/ls/flag.png create mode 100644 l10n/lt/entry.desktop create mode 100644 l10n/lt/flag.png create mode 100644 l10n/lu/entry.desktop create mode 100644 l10n/lu/flag.png create mode 100644 l10n/lv/entry.desktop create mode 100644 l10n/lv/flag.png create mode 100644 l10n/ly/entry.desktop create mode 100644 l10n/ly/flag.png create mode 100644 l10n/ma/entry.desktop create mode 100644 l10n/ma/flag.png create mode 100644 l10n/mc/entry.desktop create mode 100644 l10n/mc/flag.png create mode 100644 l10n/md/entry.desktop create mode 100644 l10n/md/flag.png create mode 100644 l10n/me/entry.desktop create mode 100644 l10n/me/flag.png create mode 100644 l10n/mg/entry.desktop create mode 100644 l10n/mg/flag.png create mode 100644 l10n/mh/entry.desktop create mode 100644 l10n/mh/flag.png create mode 100644 l10n/middleeast.desktop create mode 100644 l10n/mk/entry.desktop create mode 100644 l10n/mk/flag.png create mode 100644 l10n/ml/entry.desktop create mode 100644 l10n/ml/flag.png create mode 100644 l10n/mm/entry.desktop create mode 100644 l10n/mm/flag.png create mode 100644 l10n/mn/entry.desktop create mode 100644 l10n/mn/flag.png create mode 100644 l10n/mo/entry.desktop create mode 100644 l10n/mo/flag.png create mode 100644 l10n/mq/entry.desktop create mode 100644 l10n/mq/flag.png create mode 100644 l10n/mr/entry.desktop create mode 100644 l10n/mr/flag.png create mode 100644 l10n/ms/entry.desktop create mode 100644 l10n/ms/flag.png create mode 100644 l10n/mt/entry.desktop create mode 100644 l10n/mt/flag.png create mode 100644 l10n/mu/entry.desktop create mode 100644 l10n/mu/flag.png create mode 100644 l10n/mv/entry.desktop create mode 100644 l10n/mv/flag.png create mode 100644 l10n/mw/entry.desktop create mode 100644 l10n/mw/flag.png create mode 100644 l10n/mx/entry.desktop create mode 100644 l10n/mx/flag.png create mode 100644 l10n/my/entry.desktop create mode 100644 l10n/my/flag.png create mode 100644 l10n/mz/entry.desktop create mode 100644 l10n/mz/flag.png create mode 100644 l10n/na/entry.desktop create mode 100644 l10n/na/flag.png create mode 100644 l10n/nc/entry.desktop create mode 100644 l10n/nc/flag.png create mode 100644 l10n/ne/entry.desktop create mode 100644 l10n/ne/flag.png create mode 100644 l10n/nf/entry.desktop create mode 100644 l10n/nf/flag.png create mode 100644 l10n/ng/entry.desktop create mode 100644 l10n/ng/flag.png create mode 100644 l10n/ni/entry.desktop create mode 100644 l10n/ni/flag.png create mode 100644 l10n/nl/README create mode 100644 l10n/nl/entry.desktop create mode 100644 l10n/nl/flag.png create mode 100644 l10n/no/entry.desktop create mode 100644 l10n/no/flag.png create mode 100644 l10n/northafrica.desktop create mode 100644 l10n/northamerica.desktop create mode 100644 l10n/northeurope.desktop create mode 100644 l10n/np/entry.desktop create mode 100644 l10n/np/flag.png create mode 100644 l10n/nr/entry.desktop create mode 100644 l10n/nr/flag.png create mode 100644 l10n/nu/entry.desktop create mode 100644 l10n/nu/flag.png create mode 100644 l10n/nz/entry.desktop create mode 100644 l10n/nz/flag.png create mode 100644 l10n/oceania.desktop create mode 100644 l10n/om/entry.desktop create mode 100644 l10n/om/flag.png create mode 100644 l10n/pa/entry.desktop create mode 100644 l10n/pa/flag.png create mode 100644 l10n/pe/entry.desktop create mode 100644 l10n/pe/flag.png create mode 100644 l10n/pf/entry.desktop create mode 100644 l10n/pf/flag.png create mode 100644 l10n/pg/entry.desktop create mode 100644 l10n/pg/flag.png create mode 100644 l10n/ph/entry.desktop create mode 100644 l10n/ph/flag.png create mode 100644 l10n/pk/entry.desktop create mode 100644 l10n/pk/flag.png create mode 100644 l10n/pl/entry.desktop create mode 100644 l10n/pl/flag.png create mode 100644 l10n/pm/entry.desktop create mode 100644 l10n/pm/flag.png create mode 100644 l10n/pn/entry.desktop create mode 100644 l10n/pn/flag.png create mode 100644 l10n/pr/entry.desktop create mode 100644 l10n/pr/flag.png create mode 100644 l10n/ps/entry.desktop create mode 100644 l10n/ps/flag.png create mode 100644 l10n/pt/entry.desktop create mode 100644 l10n/pt/flag.png create mode 100644 l10n/pw/entry.desktop create mode 100644 l10n/pw/flag.png create mode 100644 l10n/py/entry.desktop create mode 100644 l10n/py/flag.png create mode 100644 l10n/qa/entry.desktop create mode 100644 l10n/qa/flag.png create mode 100644 l10n/ro/entry.desktop create mode 100644 l10n/ro/flag.png create mode 100644 l10n/rs/entry.desktop create mode 100644 l10n/rs/flag.png create mode 100644 l10n/ru/entry.desktop create mode 100644 l10n/ru/flag.png create mode 100644 l10n/rw/entry.desktop create mode 100644 l10n/rw/flag.png create mode 100644 l10n/sa/entry.desktop create mode 100644 l10n/sa/flag.png create mode 100644 l10n/sb/entry.desktop create mode 100644 l10n/sb/flag.png create mode 100644 l10n/sc/entry.desktop create mode 100644 l10n/sc/flag.png create mode 100644 l10n/sd/entry.desktop create mode 100644 l10n/sd/flag.png create mode 100644 l10n/se/entry.desktop create mode 100644 l10n/se/flag.png create mode 100644 l10n/sg/entry.desktop create mode 100644 l10n/sg/flag.png create mode 100644 l10n/sh/entry.desktop create mode 100644 l10n/sh/flag.png create mode 100644 l10n/si/entry.desktop create mode 100644 l10n/si/flag.png create mode 100644 l10n/sk/entry.desktop create mode 100644 l10n/sk/flag.png create mode 100644 l10n/sm/entry.desktop create mode 100644 l10n/sm/flag.png create mode 100644 l10n/sn/entry.desktop create mode 100644 l10n/sn/flag.png create mode 100644 l10n/so/entry.desktop create mode 100644 l10n/so/flag.png create mode 100644 l10n/southafrica.desktop create mode 100644 l10n/southamerica.desktop create mode 100644 l10n/southasia.desktop create mode 100644 l10n/southeastasia.desktop create mode 100644 l10n/southeurope.desktop create mode 100644 l10n/sr/entry.desktop create mode 100644 l10n/sr/flag.png create mode 100644 l10n/st/entry.desktop create mode 100644 l10n/st/flag.png create mode 100644 l10n/sv/entry.desktop create mode 100644 l10n/sv/flag.png create mode 100644 l10n/sy/entry.desktop create mode 100644 l10n/sy/flag.png create mode 100644 l10n/sz/entry.desktop create mode 100644 l10n/sz/flag.png create mode 100644 l10n/tc/entry.desktop create mode 100644 l10n/tc/flag.png create mode 100644 l10n/td/entry.desktop create mode 100644 l10n/td/flag.png create mode 100644 l10n/tg/entry.desktop create mode 100644 l10n/tg/flag.png create mode 100644 l10n/th/entry.desktop create mode 100644 l10n/th/flag.png create mode 100644 l10n/tj/entry.desktop create mode 100644 l10n/tj/flag.png create mode 100644 l10n/tk/entry.desktop create mode 100644 l10n/tk/flag.png create mode 100644 l10n/tm/entry.desktop create mode 100644 l10n/tm/flag.png create mode 100644 l10n/tn/entry.desktop create mode 100644 l10n/tn/flag.png create mode 100644 l10n/to/entry.desktop create mode 100644 l10n/to/flag.png create mode 100644 l10n/tp/entry.desktop create mode 100644 l10n/tp/flag.png create mode 100644 l10n/tr/entry.desktop create mode 100644 l10n/tr/flag.png create mode 100644 l10n/tt/entry.desktop create mode 100644 l10n/tt/flag.png create mode 100644 l10n/tv/entry.desktop create mode 100644 l10n/tv/flag.png create mode 100644 l10n/tw/entry.desktop create mode 100644 l10n/tw/flag.png create mode 100644 l10n/tz/entry.desktop create mode 100644 l10n/tz/flag.png create mode 100644 l10n/ua/entry.desktop create mode 100644 l10n/ua/flag.png create mode 100644 l10n/ug/entry.desktop create mode 100644 l10n/ug/flag.png create mode 100644 l10n/us/entry.desktop create mode 100644 l10n/us/flag.png create mode 100644 l10n/uy/entry.desktop create mode 100644 l10n/uy/flag.png create mode 100644 l10n/uz/entry.desktop create mode 100644 l10n/uz/flag.png create mode 100644 l10n/va/entry.desktop create mode 100644 l10n/va/flag.png create mode 100644 l10n/vc/entry.desktop create mode 100644 l10n/vc/flag.png create mode 100644 l10n/ve/entry.desktop create mode 100644 l10n/ve/flag.png create mode 100644 l10n/vg/entry.desktop create mode 100644 l10n/vg/flag.png create mode 100644 l10n/vi/entry.desktop create mode 100644 l10n/vi/flag.png create mode 100644 l10n/vn/entry.desktop create mode 100644 l10n/vn/flag.png create mode 100644 l10n/vu/entry.desktop create mode 100644 l10n/vu/flag.png create mode 100644 l10n/westafrica.desktop create mode 100644 l10n/westeurope.desktop create mode 100644 l10n/wf/entry.desktop create mode 100644 l10n/wf/flag.png create mode 100644 l10n/ws/entry.desktop create mode 100644 l10n/ws/flag.png create mode 100644 l10n/ye/entry.desktop create mode 100644 l10n/ye/flag.png create mode 100644 l10n/za/entry.desktop create mode 100644 l10n/za/flag.png create mode 100644 l10n/zm/entry.desktop create mode 100644 l10n/zm/flag.png create mode 100644 l10n/zw/entry.desktop create mode 100644 l10n/zw/flag.png create mode 100644 libkonq/AUTHORS create mode 100644 libkonq/DESIGN create mode 100644 libkonq/Makefile.am create mode 100644 libkonq/PLUGINS create mode 100644 libkonq/SERVICEMENUS create mode 100644 libkonq/directory_bookmarkbar.desktop create mode 100644 libkonq/favicons/Makefile.am create mode 100644 libkonq/favicons/favicons.cpp create mode 100644 libkonq/favicons/favicons.desktop create mode 100644 libkonq/favicons/favicons.h create mode 100644 libkonq/favicons/favicons.upd create mode 100755 libkonq/favicons/move_favicons.sh create mode 100644 libkonq/kfileivi.cc create mode 100644 libkonq/kfileivi.h create mode 100644 libkonq/kivdirectoryoverlay.cc create mode 100644 libkonq/kivdirectoryoverlay.h create mode 100644 libkonq/knewmenu.cc create mode 100644 libkonq/knewmenu.h create mode 100644 libkonq/konq_bgnddlg.cc create mode 100644 libkonq/konq_bgnddlg.h create mode 100644 libkonq/konq_defaults.h create mode 100644 libkonq/konq_dirpart.cc create mode 100644 libkonq/konq_dirpart.h create mode 100644 libkonq/konq_drag.cc create mode 100644 libkonq/konq_drag.h create mode 100644 libkonq/konq_events.cc create mode 100644 libkonq/konq_events.h create mode 100644 libkonq/konq_faviconmgr.cc create mode 100644 libkonq/konq_faviconmgr.h create mode 100644 libkonq/konq_filetip.cc create mode 100644 libkonq/konq_filetip.h create mode 100644 libkonq/konq_historycomm.cc create mode 100644 libkonq/konq_historycomm.h create mode 100644 libkonq/konq_historymgr.cc create mode 100644 libkonq/konq_historymgr.h create mode 100644 libkonq/konq_iconviewwidget.cc create mode 100644 libkonq/konq_iconviewwidget.h create mode 100644 libkonq/konq_operations.cc create mode 100644 libkonq/konq_operations.h create mode 100644 libkonq/konq_pixmapprovider.cc create mode 100644 libkonq/konq_pixmapprovider.h create mode 100644 libkonq/konq_popupmenu.cc create mode 100644 libkonq/konq_popupmenu.h create mode 100644 libkonq/konq_propsview.cc create mode 100644 libkonq/konq_propsview.h create mode 100644 libkonq/konq_settings.cc create mode 100644 libkonq/konq_settings.h create mode 100644 libkonq/konq_sound.cc create mode 100644 libkonq/konq_sound.h create mode 100644 libkonq/konq_undo.cc create mode 100644 libkonq/konq_undo.h create mode 100644 libkonq/konq_xmlguiclient.cc create mode 100644 libkonq/konq_xmlguiclient.h create mode 100644 libkonq/konqbookmarkmanager.h create mode 100644 libkonq/konqpopupmenuplugin.desktop create mode 100644 libkonq/libkonq_export.h create mode 100644 libkonq/pics/Makefile.am create mode 100644 libkonq/pics/arrow_bottomleft.png create mode 100644 libkonq/pics/arrow_bottomright.png create mode 100644 libkonq/pics/arrow_topleft.png create mode 100644 libkonq/pics/arrow_topright.png create mode 100644 libkonq/pics/thumbnailfont_7x4.png create mode 100644 libkonq/tests/Makefile.am create mode 100644 libkonq/tests/konqdragtest.cpp create mode 100755 mkpamserv create mode 100644 nsplugins/HOWTO.DEBUG create mode 100644 nsplugins/Makefile.am create mode 100644 nsplugins/NSPluginCallbackIface.h create mode 100644 nsplugins/README create mode 100644 nsplugins/TESTCASES create mode 100644 nsplugins/TODO create mode 100644 nsplugins/kcm_nsplugins.cpp create mode 100644 nsplugins/khtml_plugins.desktop create mode 100644 nsplugins/nspluginloader.cpp create mode 100644 nsplugins/nspluginloader.h create mode 100644 nsplugins/nspluginpart.rc create mode 100644 nsplugins/plugin_part.cpp create mode 100644 nsplugins/plugin_part.h create mode 100644 nsplugins/plugin_paths.cpp create mode 100644 nsplugins/plugin_paths.h create mode 100644 nsplugins/pluginscan.cpp create mode 100644 nsplugins/sdk/jni.h create mode 100644 nsplugins/sdk/jni_md.h create mode 100644 nsplugins/sdk/jri.h create mode 100644 nsplugins/sdk/jri_md.h create mode 100644 nsplugins/sdk/jritypes.h create mode 100644 nsplugins/sdk/npapi.h create mode 100644 nsplugins/sdk/npruntime.h create mode 100644 nsplugins/sdk/npupp.h create mode 100644 nsplugins/sdk/obsolete/protypes.h create mode 100644 nsplugins/sdk/prcpucfg.h create mode 100644 nsplugins/sdk/prtypes.h create mode 100644 nsplugins/test/Makefile.am create mode 100644 nsplugins/test/testnsplugin.cpp create mode 100644 nsplugins/test/testnsplugin.h create mode 100644 nsplugins/test/testnsplugin.rc create mode 100644 nsplugins/viewer/Makefile.am create mode 100644 nsplugins/viewer/NSPluginClassIface.h create mode 100644 nsplugins/viewer/glibevents.cpp create mode 100644 nsplugins/viewer/glibevents.h create mode 100644 nsplugins/viewer/kxt.cpp create mode 100644 nsplugins/viewer/kxt.h create mode 100644 nsplugins/viewer/nsplugin.cpp create mode 100644 nsplugins/viewer/nsplugin.h create mode 100644 nsplugins/viewer/qxteventloop.cpp create mode 100644 nsplugins/viewer/qxteventloop.h create mode 100644 nsplugins/viewer/resolve.h create mode 100644 nsplugins/viewer/viewer.cpp create mode 100644 nsplugins/wrapper/Makefile.am create mode 100644 nsplugins/wrapper/wrapper.c create mode 100644 pics/Makefile.am create mode 100644 pics/crystalsvg/Makefile.am create mode 100644 pics/crystalsvg/cr128-app-acroread.png create mode 100644 pics/crystalsvg/cr128-app-applixware.png create mode 100644 pics/crystalsvg/cr128-app-clanbomber.png create mode 100644 pics/crystalsvg/cr128-app-email.png create mode 100644 pics/crystalsvg/cr128-app-gimp.png create mode 100644 pics/crystalsvg/cr128-app-kfm_home.png create mode 100644 pics/crystalsvg/cr128-app-licq.png create mode 100644 pics/crystalsvg/cr128-app-linuxconf.png create mode 100644 pics/crystalsvg/cr128-app-netscape.png create mode 100644 pics/crystalsvg/cr128-app-package.png create mode 100644 pics/crystalsvg/cr128-app-package_applications.png create mode 100644 pics/crystalsvg/cr128-app-package_development.png create mode 100644 pics/crystalsvg/cr128-app-package_favourite.png create mode 100644 pics/crystalsvg/cr128-app-package_games.png create mode 100644 pics/crystalsvg/cr128-app-package_multimedia.png create mode 100644 pics/crystalsvg/cr128-app-package_network.png create mode 100644 pics/crystalsvg/cr128-app-package_settings.png create mode 100644 pics/crystalsvg/cr128-app-package_toys.png create mode 100644 pics/crystalsvg/cr128-app-package_utilities.png create mode 100644 pics/crystalsvg/cr128-app-penguin.png create mode 100644 pics/crystalsvg/cr128-app-phppg.png create mode 100644 pics/crystalsvg/cr128-app-pysol.png create mode 100644 pics/crystalsvg/cr128-app-randr.png create mode 100644 pics/crystalsvg/cr128-app-staroffice.png create mode 100644 pics/crystalsvg/cr128-app-systemtray.png create mode 100644 pics/crystalsvg/cr128-app-taskbar.png create mode 100644 pics/crystalsvg/cr128-app-terminal.png create mode 100644 pics/crystalsvg/cr128-app-tux.png create mode 100644 pics/crystalsvg/cr128-app-wp.png create mode 100644 pics/crystalsvg/cr128-app-xclock.png create mode 100644 pics/crystalsvg/cr128-app-xfmail.png create mode 100644 pics/crystalsvg/cr128-app-xmag.png create mode 100644 pics/crystalsvg/cr16-app-abiword.png create mode 100644 pics/crystalsvg/cr16-app-acroread.png create mode 100644 pics/crystalsvg/cr16-app-alevt.png create mode 100644 pics/crystalsvg/cr16-app-applixware.png create mode 100644 pics/crystalsvg/cr16-app-assistant.png create mode 100644 pics/crystalsvg/cr16-app-blender.png create mode 100644 pics/crystalsvg/cr16-app-bluefish.png create mode 100644 pics/crystalsvg/cr16-app-clanbomber.png create mode 100644 pics/crystalsvg/cr16-app-designer.png create mode 100644 pics/crystalsvg/cr16-app-dia.png create mode 100644 pics/crystalsvg/cr16-app-dlgedit.png create mode 100644 pics/crystalsvg/cr16-app-eclipse.png create mode 100644 pics/crystalsvg/cr16-app-edu_languages.png create mode 100644 pics/crystalsvg/cr16-app-edu_mathematics.png create mode 100644 pics/crystalsvg/cr16-app-edu_miscellaneous.png create mode 100644 pics/crystalsvg/cr16-app-edu_science.png create mode 100644 pics/crystalsvg/cr16-app-emacs.png create mode 100644 pics/crystalsvg/cr16-app-email.png create mode 100644 pics/crystalsvg/cr16-app-evolution.png create mode 100644 pics/crystalsvg/cr16-app-fifteenpieces.png create mode 100644 pics/crystalsvg/cr16-app-gabber.png create mode 100644 pics/crystalsvg/cr16-app-gaim.png create mode 100644 pics/crystalsvg/cr16-app-gimp.png create mode 100644 pics/crystalsvg/cr16-app-gnome_apps.png create mode 100644 pics/crystalsvg/cr16-app-gnomemeeting.png create mode 100644 pics/crystalsvg/cr16-app-gnucash.png create mode 100644 pics/crystalsvg/cr16-app-gnumeric.png create mode 100644 pics/crystalsvg/cr16-app-gv.png create mode 100644 pics/crystalsvg/cr16-app-gvim.png create mode 100644 pics/crystalsvg/cr16-app-kbinaryclock.png create mode 100644 pics/crystalsvg/cr16-app-kfm_home.png create mode 100644 pics/crystalsvg/cr16-app-kvirc.png create mode 100644 pics/crystalsvg/cr16-app-licq.png create mode 100644 pics/crystalsvg/cr16-app-linguist.png create mode 100644 pics/crystalsvg/cr16-app-linuxconf.png create mode 100644 pics/crystalsvg/cr16-app-lyx.png create mode 100644 pics/crystalsvg/cr16-app-mathematica.png create mode 100644 pics/crystalsvg/cr16-app-nedit.png create mode 100644 pics/crystalsvg/cr16-app-netscape.png create mode 100644 pics/crystalsvg/cr16-app-opera.png create mode 100644 pics/crystalsvg/cr16-app-package.png create mode 100644 pics/crystalsvg/cr16-app-package_application.png create mode 100644 pics/crystalsvg/cr16-app-package_applications.png create mode 100644 pics/crystalsvg/cr16-app-package_development.png create mode 100644 pics/crystalsvg/cr16-app-package_editors.png create mode 100644 pics/crystalsvg/cr16-app-package_edutainment.png create mode 100644 pics/crystalsvg/cr16-app-package_favourite.png create mode 100644 pics/crystalsvg/cr16-app-package_games.png create mode 100644 pics/crystalsvg/cr16-app-package_games_arcade.png create mode 100644 pics/crystalsvg/cr16-app-package_games_board.png create mode 100644 pics/crystalsvg/cr16-app-package_games_card.png create mode 100644 pics/crystalsvg/cr16-app-package_games_strategy.png create mode 100644 pics/crystalsvg/cr16-app-package_graphics.png create mode 100644 pics/crystalsvg/cr16-app-package_multimedia.png create mode 100644 pics/crystalsvg/cr16-app-package_network.png create mode 100644 pics/crystalsvg/cr16-app-package_settings.png create mode 100644 pics/crystalsvg/cr16-app-package_system.png create mode 100644 pics/crystalsvg/cr16-app-package_toys.png create mode 100644 pics/crystalsvg/cr16-app-package_utilities.png create mode 100644 pics/crystalsvg/cr16-app-package_wordprocessing.png create mode 100644 pics/crystalsvg/cr16-app-pan.png create mode 100644 pics/crystalsvg/cr16-app-penguin.png create mode 100644 pics/crystalsvg/cr16-app-phppg.png create mode 100644 pics/crystalsvg/cr16-app-plan.png create mode 100644 pics/crystalsvg/cr16-app-planner.png create mode 100644 pics/crystalsvg/cr16-app-pybliographic.png create mode 100644 pics/crystalsvg/cr16-app-randr.png create mode 100644 pics/crystalsvg/cr16-app-realplayer.png create mode 100644 pics/crystalsvg/cr16-app-remote.png create mode 100644 pics/crystalsvg/cr16-app-runprocesscatcher.png create mode 100644 pics/crystalsvg/cr16-app-scribus.png create mode 100644 pics/crystalsvg/cr16-app-sodipodi.png create mode 100644 pics/crystalsvg/cr16-app-systemtray.png create mode 100644 pics/crystalsvg/cr16-app-taskbar.png create mode 100644 pics/crystalsvg/cr16-app-terminal.png create mode 100644 pics/crystalsvg/cr16-app-tux.png create mode 100644 pics/crystalsvg/cr16-app-vnc.png create mode 100644 pics/crystalsvg/cr16-app-wabi.png create mode 100644 pics/crystalsvg/cr16-app-wine.png create mode 100644 pics/crystalsvg/cr16-app-wp.png create mode 100644 pics/crystalsvg/cr16-app-xcalc.png create mode 100644 pics/crystalsvg/cr16-app-xchat.png create mode 100644 pics/crystalsvg/cr16-app-xclipboard.png create mode 100644 pics/crystalsvg/cr16-app-xclock.png create mode 100644 pics/crystalsvg/cr16-app-xconsole.png create mode 100644 pics/crystalsvg/cr16-app-xedit.png create mode 100644 pics/crystalsvg/cr16-app-xemacs.png create mode 100644 pics/crystalsvg/cr16-app-xeyes.png create mode 100644 pics/crystalsvg/cr16-app-xfig.png create mode 100644 pics/crystalsvg/cr16-app-xfmail.png create mode 100644 pics/crystalsvg/cr16-app-xload.png create mode 100644 pics/crystalsvg/cr16-app-xmag.png create mode 100644 pics/crystalsvg/cr16-app-xmms.png create mode 100644 pics/crystalsvg/cr16-app-xosview.png create mode 100644 pics/crystalsvg/cr16-app-xpaint.png create mode 100644 pics/crystalsvg/cr16-app-xv.png create mode 100644 pics/crystalsvg/cr22-app-email.png create mode 100644 pics/crystalsvg/cr22-app-fifteenpieces.png create mode 100644 pics/crystalsvg/cr22-app-kbinaryclock.png create mode 100644 pics/crystalsvg/cr22-app-kvirc.png create mode 100644 pics/crystalsvg/cr22-app-nedit.png create mode 100644 pics/crystalsvg/cr22-app-package_development.png create mode 100644 pics/crystalsvg/cr22-app-randr.png create mode 100644 pics/crystalsvg/cr22-app-runprocesscatcher.png create mode 100644 pics/crystalsvg/cr22-app-systemtray.png create mode 100644 pics/crystalsvg/cr22-app-taskbar.png create mode 100644 pics/crystalsvg/cr32-app-abiword.png create mode 100644 pics/crystalsvg/cr32-app-acroread.png create mode 100644 pics/crystalsvg/cr32-app-alevt.png create mode 100644 pics/crystalsvg/cr32-app-applixware.png create mode 100644 pics/crystalsvg/cr32-app-assistant.png create mode 100644 pics/crystalsvg/cr32-app-blender.png create mode 100644 pics/crystalsvg/cr32-app-bluefish.png create mode 100644 pics/crystalsvg/cr32-app-clanbomber.png create mode 100644 pics/crystalsvg/cr32-app-designer.png create mode 100644 pics/crystalsvg/cr32-app-dia.png create mode 100644 pics/crystalsvg/cr32-app-dlgedit.png create mode 100644 pics/crystalsvg/cr32-app-eclipse.png create mode 100644 pics/crystalsvg/cr32-app-edu_languages.png create mode 100644 pics/crystalsvg/cr32-app-edu_mathematics.png create mode 100644 pics/crystalsvg/cr32-app-edu_miscellaneous.png create mode 100644 pics/crystalsvg/cr32-app-edu_science.png create mode 100644 pics/crystalsvg/cr32-app-emacs.png create mode 100644 pics/crystalsvg/cr32-app-email.png create mode 100644 pics/crystalsvg/cr32-app-evolution.png create mode 100644 pics/crystalsvg/cr32-app-fifteenpieces.png create mode 100644 pics/crystalsvg/cr32-app-gabber.png create mode 100644 pics/crystalsvg/cr32-app-gaim.png create mode 100644 pics/crystalsvg/cr32-app-galeon.png create mode 100644 pics/crystalsvg/cr32-app-gimp.png create mode 100644 pics/crystalsvg/cr32-app-gnome_apps.png create mode 100644 pics/crystalsvg/cr32-app-gnomemeeting.png create mode 100644 pics/crystalsvg/cr32-app-gnucash.png create mode 100644 pics/crystalsvg/cr32-app-gnumeric.png create mode 100644 pics/crystalsvg/cr32-app-gv.png create mode 100644 pics/crystalsvg/cr32-app-gvim.png create mode 100644 pics/crystalsvg/cr32-app-kbinaryclock.png create mode 100644 pics/crystalsvg/cr32-app-kfm_home.png create mode 100644 pics/crystalsvg/cr32-app-kvirc.png create mode 100644 pics/crystalsvg/cr32-app-licq.png create mode 100644 pics/crystalsvg/cr32-app-linguist.png create mode 100644 pics/crystalsvg/cr32-app-linuxconf.png create mode 100644 pics/crystalsvg/cr32-app-lyx.png create mode 100644 pics/crystalsvg/cr32-app-mathematica.png create mode 100644 pics/crystalsvg/cr32-app-nedit.png create mode 100644 pics/crystalsvg/cr32-app-netscape.png create mode 100644 pics/crystalsvg/cr32-app-opera.png create mode 100644 pics/crystalsvg/cr32-app-package.png create mode 100644 pics/crystalsvg/cr32-app-package_applications.png create mode 100644 pics/crystalsvg/cr32-app-package_development.png create mode 100644 pics/crystalsvg/cr32-app-package_editors.png create mode 100644 pics/crystalsvg/cr32-app-package_edutainment.png create mode 100644 pics/crystalsvg/cr32-app-package_favourite.png create mode 100644 pics/crystalsvg/cr32-app-package_games.png create mode 100644 pics/crystalsvg/cr32-app-package_games_arcade.png create mode 100644 pics/crystalsvg/cr32-app-package_games_board.png create mode 100644 pics/crystalsvg/cr32-app-package_games_card.png create mode 100644 pics/crystalsvg/cr32-app-package_games_strategy.png create mode 100644 pics/crystalsvg/cr32-app-package_graphics.png create mode 100644 pics/crystalsvg/cr32-app-package_multimedia.png create mode 100644 pics/crystalsvg/cr32-app-package_network.png create mode 100644 pics/crystalsvg/cr32-app-package_settings.png create mode 100644 pics/crystalsvg/cr32-app-package_system.png create mode 100644 pics/crystalsvg/cr32-app-package_toys.png create mode 100644 pics/crystalsvg/cr32-app-package_utilities.png create mode 100644 pics/crystalsvg/cr32-app-package_wordprocessing.png create mode 100644 pics/crystalsvg/cr32-app-pan.png create mode 100644 pics/crystalsvg/cr32-app-penguin.png create mode 100644 pics/crystalsvg/cr32-app-phppg.png create mode 100644 pics/crystalsvg/cr32-app-pinguin.png create mode 100644 pics/crystalsvg/cr32-app-plan.png create mode 100644 pics/crystalsvg/cr32-app-planner.png create mode 100644 pics/crystalsvg/cr32-app-pybliographic.png create mode 100644 pics/crystalsvg/cr32-app-pysol.png create mode 100644 pics/crystalsvg/cr32-app-randr.png create mode 100644 pics/crystalsvg/cr32-app-realplayer.png create mode 100644 pics/crystalsvg/cr32-app-runprocesscatcher.png create mode 100644 pics/crystalsvg/cr32-app-scribus.png create mode 100644 pics/crystalsvg/cr32-app-sodipodi.png create mode 100644 pics/crystalsvg/cr32-app-systemtray.png create mode 100644 pics/crystalsvg/cr32-app-taskbar.png create mode 100644 pics/crystalsvg/cr32-app-terminal.png create mode 100644 pics/crystalsvg/cr32-app-tux.png create mode 100644 pics/crystalsvg/cr32-app-vnc.png create mode 100644 pics/crystalsvg/cr32-app-wabi.png create mode 100644 pics/crystalsvg/cr32-app-wine.png create mode 100644 pics/crystalsvg/cr32-app-wp.png create mode 100644 pics/crystalsvg/cr32-app-x.png create mode 100644 pics/crystalsvg/cr32-app-xapp.png create mode 100644 pics/crystalsvg/cr32-app-xawtv.png create mode 100644 pics/crystalsvg/cr32-app-xcalc.png create mode 100644 pics/crystalsvg/cr32-app-xchat.png create mode 100644 pics/crystalsvg/cr32-app-xclipboard.png create mode 100644 pics/crystalsvg/cr32-app-xclock.png create mode 100644 pics/crystalsvg/cr32-app-xconsole.png create mode 100644 pics/crystalsvg/cr32-app-xedit.png create mode 100644 pics/crystalsvg/cr32-app-xemacs.png create mode 100644 pics/crystalsvg/cr32-app-xeyes.png create mode 100644 pics/crystalsvg/cr32-app-xfig.png create mode 100644 pics/crystalsvg/cr32-app-xfmail.png create mode 100644 pics/crystalsvg/cr32-app-xload.png create mode 100644 pics/crystalsvg/cr32-app-xmag.png create mode 100644 pics/crystalsvg/cr32-app-xmms.png create mode 100644 pics/crystalsvg/cr32-app-xosview.png create mode 100644 pics/crystalsvg/cr32-app-xpaint.png create mode 100644 pics/crystalsvg/cr32-app-xv.png create mode 100644 pics/crystalsvg/cr48-app-abiword.png create mode 100644 pics/crystalsvg/cr48-app-acroread.png create mode 100644 pics/crystalsvg/cr48-app-applixware.png create mode 100644 pics/crystalsvg/cr48-app-blender.png create mode 100644 pics/crystalsvg/cr48-app-bluefish.png create mode 100644 pics/crystalsvg/cr48-app-clanbomber.png create mode 100644 pics/crystalsvg/cr48-app-designer.png create mode 100644 pics/crystalsvg/cr48-app-dia.png create mode 100644 pics/crystalsvg/cr48-app-eclipse.png create mode 100644 pics/crystalsvg/cr48-app-edu_languages.png create mode 100644 pics/crystalsvg/cr48-app-edu_mathematics.png create mode 100644 pics/crystalsvg/cr48-app-edu_miscellaneous.png create mode 100644 pics/crystalsvg/cr48-app-edu_science.png create mode 100644 pics/crystalsvg/cr48-app-emacs.png create mode 100644 pics/crystalsvg/cr48-app-email.png create mode 100644 pics/crystalsvg/cr48-app-evolution.png create mode 100644 pics/crystalsvg/cr48-app-fifteenpieces.png create mode 100644 pics/crystalsvg/cr48-app-gabber.png create mode 100644 pics/crystalsvg/cr48-app-gaim.png create mode 100644 pics/crystalsvg/cr48-app-galeon.png create mode 100644 pics/crystalsvg/cr48-app-gimp.png create mode 100644 pics/crystalsvg/cr48-app-gnome_apps.png create mode 100644 pics/crystalsvg/cr48-app-gnomemeeting.png create mode 100644 pics/crystalsvg/cr48-app-gnucash.png create mode 100644 pics/crystalsvg/cr48-app-gnumeric.png create mode 100644 pics/crystalsvg/cr48-app-gvim.png create mode 100644 pics/crystalsvg/cr48-app-kbinaryclock.png create mode 100644 pics/crystalsvg/cr48-app-kfm_home.png create mode 100644 pics/crystalsvg/cr48-app-kvirc.png create mode 100644 pics/crystalsvg/cr48-app-licq.png create mode 100644 pics/crystalsvg/cr48-app-linuxconf.png create mode 100644 pics/crystalsvg/cr48-app-nedit.png create mode 100644 pics/crystalsvg/cr48-app-netscape.png create mode 100644 pics/crystalsvg/cr48-app-opera.png create mode 100644 pics/crystalsvg/cr48-app-package.png create mode 100644 pics/crystalsvg/cr48-app-package_applications.png create mode 100644 pics/crystalsvg/cr48-app-package_development.png create mode 100644 pics/crystalsvg/cr48-app-package_editors.png create mode 100644 pics/crystalsvg/cr48-app-package_edutainment.png create mode 100644 pics/crystalsvg/cr48-app-package_favourite.png create mode 100644 pics/crystalsvg/cr48-app-package_games.png create mode 100644 pics/crystalsvg/cr48-app-package_games_arcade.png create mode 100644 pics/crystalsvg/cr48-app-package_games_board.png create mode 100644 pics/crystalsvg/cr48-app-package_games_card.png create mode 100644 pics/crystalsvg/cr48-app-package_games_strategy.png create mode 100644 pics/crystalsvg/cr48-app-package_graphics.png create mode 100644 pics/crystalsvg/cr48-app-package_multimedia.png create mode 100644 pics/crystalsvg/cr48-app-package_network.png create mode 100644 pics/crystalsvg/cr48-app-package_settings.png create mode 100644 pics/crystalsvg/cr48-app-package_system.png create mode 100644 pics/crystalsvg/cr48-app-package_toys.png create mode 100644 pics/crystalsvg/cr48-app-package_utilities.png create mode 100644 pics/crystalsvg/cr48-app-package_wordprocessing.png create mode 100644 pics/crystalsvg/cr48-app-pan.png create mode 100644 pics/crystalsvg/cr48-app-penguin.png create mode 100644 pics/crystalsvg/cr48-app-phppg.png create mode 100644 pics/crystalsvg/cr48-app-planner.png create mode 100644 pics/crystalsvg/cr48-app-pysol.png create mode 100644 pics/crystalsvg/cr48-app-randr.png create mode 100644 pics/crystalsvg/cr48-app-remote.png create mode 100644 pics/crystalsvg/cr48-app-scribus.png create mode 100644 pics/crystalsvg/cr48-app-sodipodi.png create mode 100644 pics/crystalsvg/cr48-app-staroffice.png create mode 100644 pics/crystalsvg/cr48-app-systemtray.png create mode 100644 pics/crystalsvg/cr48-app-taskbar.png create mode 100644 pics/crystalsvg/cr48-app-terminal.png create mode 100644 pics/crystalsvg/cr48-app-tux.png create mode 100644 pics/crystalsvg/cr48-app-vnc.png create mode 100644 pics/crystalsvg/cr48-app-wine.png create mode 100644 pics/crystalsvg/cr48-app-wmaker_apps.png create mode 100644 pics/crystalsvg/cr48-app-wp.png create mode 100644 pics/crystalsvg/cr48-app-xchat.png create mode 100644 pics/crystalsvg/cr48-app-xclock.png create mode 100644 pics/crystalsvg/cr48-app-xedit.png create mode 100644 pics/crystalsvg/cr48-app-xemacs.png create mode 100644 pics/crystalsvg/cr48-app-xfmail.png create mode 100644 pics/crystalsvg/cr48-app-xmag.png create mode 100644 pics/crystalsvg/cr48-app-xv.png create mode 100644 pics/crystalsvg/cr64-app-acroread.png create mode 100644 pics/crystalsvg/cr64-app-applixware.png create mode 100644 pics/crystalsvg/cr64-app-clanbomber.png create mode 100644 pics/crystalsvg/cr64-app-email.png create mode 100644 pics/crystalsvg/cr64-app-gimp.png create mode 100644 pics/crystalsvg/cr64-app-gvim.png create mode 100644 pics/crystalsvg/cr64-app-kfm_home.png create mode 100644 pics/crystalsvg/cr64-app-kvirc.png create mode 100644 pics/crystalsvg/cr64-app-licq.png create mode 100644 pics/crystalsvg/cr64-app-linuxconf.png create mode 100644 pics/crystalsvg/cr64-app-nedit.png create mode 100644 pics/crystalsvg/cr64-app-netscape.png create mode 100644 pics/crystalsvg/cr64-app-package.png create mode 100644 pics/crystalsvg/cr64-app-package_applications.png create mode 100644 pics/crystalsvg/cr64-app-package_development.png create mode 100644 pics/crystalsvg/cr64-app-package_favourite.png create mode 100644 pics/crystalsvg/cr64-app-package_games.png create mode 100644 pics/crystalsvg/cr64-app-package_multimedia.png create mode 100644 pics/crystalsvg/cr64-app-package_network.png create mode 100644 pics/crystalsvg/cr64-app-package_settings.png create mode 100644 pics/crystalsvg/cr64-app-package_toys.png create mode 100644 pics/crystalsvg/cr64-app-package_utilities.png create mode 100644 pics/crystalsvg/cr64-app-penguin.png create mode 100644 pics/crystalsvg/cr64-app-phppg.png create mode 100644 pics/crystalsvg/cr64-app-pysol.png create mode 100644 pics/crystalsvg/cr64-app-qtella.png create mode 100644 pics/crystalsvg/cr64-app-randr.png create mode 100644 pics/crystalsvg/cr64-app-staroffice.png create mode 100644 pics/crystalsvg/cr64-app-systemtray.png create mode 100644 pics/crystalsvg/cr64-app-taskbar.png create mode 100644 pics/crystalsvg/cr64-app-terminal.png create mode 100644 pics/crystalsvg/cr64-app-tux.png create mode 100644 pics/crystalsvg/cr64-app-wp.png create mode 100644 pics/crystalsvg/cr64-app-xclock.png create mode 100644 pics/crystalsvg/cr64-app-xfmail.png create mode 100644 pics/crystalsvg/cr64-app-xmag.png create mode 100644 pics/crystalsvg/crsc-app-acroread.svgz create mode 100644 pics/crystalsvg/crsc-app-aim.svgz create mode 100644 pics/crystalsvg/crsc-app-aktion.svgz create mode 100644 pics/crystalsvg/crsc-app-antivirus.svgz create mode 100644 pics/crystalsvg/crsc-app-applixware.svgz create mode 100644 pics/crystalsvg/crsc-app-browser.svgz create mode 100644 pics/crystalsvg/crsc-app-camera.svgz create mode 100644 pics/crystalsvg/crsc-app-clanbomber.svgz create mode 100644 pics/crystalsvg/crsc-app-clock.svgz create mode 100644 pics/crystalsvg/crsc-app-core.svgz create mode 100644 pics/crystalsvg/crsc-app-display.svgz create mode 100644 pics/crystalsvg/crsc-app-download_manager.svgz create mode 100644 pics/crystalsvg/crsc-app-email.svgz create mode 100644 pics/crystalsvg/crsc-app-error.svgz create mode 100644 pics/crystalsvg/crsc-app-fifteenpieces.svgz create mode 100644 pics/crystalsvg/crsc-app-galeon.svgz create mode 100644 pics/crystalsvg/crsc-app-gnome_apps.svgz create mode 100644 pics/crystalsvg/crsc-app-hardware.svgz create mode 100644 pics/crystalsvg/crsc-app-kbinaryclock.svgz create mode 100644 pics/crystalsvg/crsc-app-kfm_home.svgz create mode 100644 pics/crystalsvg/crsc-app-my_mac.svgz create mode 100644 pics/crystalsvg/crsc-app-netscape.svgz create mode 100644 pics/crystalsvg/crsc-app-openoffice.svgz create mode 100644 pics/crystalsvg/crsc-app-package_development.svgz create mode 100644 pics/crystalsvg/crsc-app-package_toys.svgz create mode 100644 pics/crystalsvg/crsc-app-penguin.svgz create mode 100644 pics/crystalsvg/crsc-app-personal.svgz create mode 100644 pics/crystalsvg/crsc-app-quicktime.svgz create mode 100644 pics/crystalsvg/crsc-app-realplayer.svgz create mode 100644 pics/crystalsvg/crsc-app-shell.svgz create mode 100644 pics/crystalsvg/crsc-app-staroffice.svgz create mode 100644 pics/crystalsvg/crsc-app-systemtray.svgz create mode 100644 pics/crystalsvg/crsc-app-terminal.svgz create mode 100644 pics/crystalsvg/crsc-app-tux.svgz create mode 100644 pics/crystalsvg/crsc-app-wine.svgz create mode 100644 pics/crystalsvg/crsc-app-x.svgz create mode 100644 pics/crystalsvg/crsc-app-xapp.svgz create mode 100644 pics/crystalsvg/crsc-app-xcalc.svgz create mode 100644 pics/crystalsvg/crsc-app-xchat.svgz create mode 100644 pics/crystalsvg/crsc-app-xclock.svgz create mode 100644 pics/crystalsvg/crsc-app-xeyes.svgz create mode 100644 pics/crystalsvg/crsc-app-xpaint.svgz create mode 100644 pics/wallpapers/All-Good-People-1.jpg create mode 100644 pics/wallpapers/All-Good-People-1.jpg.desktop create mode 100644 pics/wallpapers/CREDITS create mode 100644 pics/wallpapers/Chicken-Songs-2.jpg create mode 100644 pics/wallpapers/Chicken-Songs-2.jpg.desktop create mode 100644 pics/wallpapers/KDE34.png create mode 100644 pics/wallpapers/KDE34.png.desktop create mode 100644 pics/wallpapers/Makefile.am create mode 100644 pics/wallpapers/No-Ones-Laughing-3.jpg create mode 100644 pics/wallpapers/No-Ones-Laughing-3.jpg.desktop create mode 100644 pics/wallpapers/Time-For-Lunch-2.jpg create mode 100644 pics/wallpapers/Time-For-Lunch-2.jpg.desktop create mode 100644 pics/wallpapers/Totally-New-Product-1.jpg create mode 100644 pics/wallpapers/Totally-New-Product-1.jpg.desktop create mode 100644 pics/wallpapers/Won-Ton-Soup-3.jpg create mode 100644 pics/wallpapers/Won-Ton-Soup-3.jpg.desktop create mode 100644 pics/wallpapers/alta-badia.jpg create mode 100644 pics/wallpapers/alta-badia.jpg.desktop create mode 100644 pics/wallpapers/andes-venezolanos.svgz create mode 100644 pics/wallpapers/andes-venezolanos.svgz.desktop create mode 100644 pics/wallpapers/aurora.svgz create mode 100644 pics/wallpapers/aurora.svgz.desktop create mode 100644 pics/wallpapers/blue-bend.jpg create mode 100644 pics/wallpapers/blue-bend.jpg.desktop create mode 100644 pics/wallpapers/celtic.svgz create mode 100644 pics/wallpapers/celtic.svgz.desktop create mode 100644 pics/wallpapers/default_blue.jpg create mode 100644 pics/wallpapers/default_blue.jpg.desktop create mode 100644 pics/wallpapers/default_gears.jpg create mode 100644 pics/wallpapers/default_gears.jpg.desktop create mode 100644 pics/wallpapers/floating-leaves.jpg create mode 100644 pics/wallpapers/floating-leaves.jpg.desktop create mode 100644 pics/wallpapers/globe.svgz create mode 100644 pics/wallpapers/globe.svgz.desktop create mode 100644 pics/wallpapers/here-gear.svgz create mode 100644 pics/wallpapers/here-gear.svgz.desktop create mode 100644 pics/wallpapers/konqui.svgz create mode 100644 pics/wallpapers/konqui.svgz.desktop create mode 100644 pics/wallpapers/lineart.svgz create mode 100644 pics/wallpapers/lineart.svgz.desktop create mode 100644 pics/wallpapers/moon.svgz create mode 100644 pics/wallpapers/moon.svgz.desktop create mode 100644 pics/wallpapers/seaofconero.jpg create mode 100644 pics/wallpapers/seaofconero.jpg.desktop create mode 100644 pics/wallpapers/soft-green.jpg create mode 100644 pics/wallpapers/soft-green.jpg.desktop create mode 100644 pics/wallpapers/stelvio.jpg create mode 100644 pics/wallpapers/stelvio.jpg.desktop create mode 100644 pics/wallpapers/sunshine-after-the-rain.jpg create mode 100644 pics/wallpapers/sunshine-after-the-rain.jpg.desktop create mode 100644 pics/wallpapers/triplegears.jpg create mode 100644 pics/wallpapers/triplegears.jpg.desktop create mode 100644 startkde diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..932df8950 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ +Look in the subdirs to get info about the authors. + +The package is maintained by Stephan Kulow diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..5185fd3f3 --- /dev/null +++ b/COPYING @@ -0,0 +1,346 @@ +NOTE! The GPL below is copyrighted by the Free Software Foundation, but +the instance of code that it refers to (the kde programs) are copyrighted +by the authors who actually wrote it. + +--------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/COPYING-DOCS b/COPYING-DOCS new file mode 100644 index 000000000..4a0fe1c8d --- /dev/null +++ b/COPYING-DOCS @@ -0,0 +1,397 @@ + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..26aac1d0a --- /dev/null +++ b/INSTALL @@ -0,0 +1,184 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `gmake' to compile the package. Or if you're using a Linux + powered machine, or if make is GNU make, type `make'. You can + check with make --version. KDE requires GNU make to build, if + gmake is appropriate, replace any instance below of make with gmake. + It will give output similar to: + #make --version + GNU Make version 3.78.1, by Richard Stallman and Roland McGrath. + Built for i386--freebsd4.0 + Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 + ... + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/kde/bin', `/usr/local/kde/lib', etc. You can specify an +installation prefix other than `/usr/local/kde' by giving `configure' +the option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/Mainpage.dox b/Mainpage.dox new file mode 100644 index 000000000..044568fbe --- /dev/null +++ b/Mainpage.dox @@ -0,0 +1,12 @@ +/** @mainpage +* KDE Base API Dox. +* +* KDEBase is the SVN module with the "basic applications" needed +* for KDE. These include startkde (a shell script to start the whole +* desktop), kdesktop (the desktop), konqueror (the browser and file- +* manager) and lots of other things. Nearly none of it has dox. +* +* KWin -- the window manager -- does have dox, as do some of +* kate's -- the text editor part -- libraries. +* +*/ diff --git a/Makefile.am.in b/Makefile.am.in new file mode 100644 index 000000000..18f8f9f0e --- /dev/null +++ b/Makefile.am.in @@ -0,0 +1,21 @@ +## kdebase/Makefile.am +## (C) 1997 Stephan Kulow + +COMPILE_FIRST = libkonq +COMPILE_AFTER_kdmlib = kdesktop kicker ksmserver +COMPILE_BEFORE_konqueror = kate +COMPILE_BEFORE_kcontrol = kicker +COMPILE_AFTER_kcontrol = kdm kdesktop + +AUTOMAKE_OPTIONS = foreign 1.6.1 + +bin_SCRIPTS = startkde kde3 + +EXTRA_DIST = admin bsd-port debian kdebase.spec.in README.pam kde.pamd kscreensaver.pamd mkpamserv + +dist-hook: + cd $(top_distdir) && perl $(top_srcdir)/admin/am_edit -padmin + +include admin/Doxyfile.am +include admin/deps.am + diff --git a/Makefile.cvs b/Makefile.cvs new file mode 100644 index 000000000..d5c4a7b2c --- /dev/null +++ b/Makefile.cvs @@ -0,0 +1,15 @@ + +all: + @echo "This Makefile is only for the CVS repository" + @echo "This will be deleted before making the distribution" + @echo "" + @if test ! -d admin; then \ + echo "Please recheckout this module!" ;\ + echo "for cvs: use checkout once and after that update again" ;\ + echo "for cvsup: checkout kde-common from cvsup and" ;\ + echo " link kde-common/admin to ./admin" ;\ + exit 1 ;\ + fi + $(MAKE) -f admin/Makefile.common cvs + +.SILENT: diff --git a/README b/README new file mode 100644 index 000000000..60059d876 --- /dev/null +++ b/README @@ -0,0 +1,312 @@ +In this file: + +* About kdebase +* Thank you +* Common Mistakes +* Configuring +* Debugging +* Upgrading +* Removal/Uninstallation +* More Info + + +About kdebase +------------- +kdebase is the second mandatory package (besides kdelibs) for the K Desktop +Environment. Here we have various applications and infrastructure files and +libraries. Here is an overview of the directories: + +* applnk + Files to create the icons for the K menu button + +* debian + Needed to create a Debian package. + +* doc + XML formatted documentation files for the apps + +* drkonqi + If ever an app crashes (heaven forbid!) then Dr.Konqi will be so kind + and make a stack trace. This is a great help for the developers to fix + the bug. + +* kappfinder + Searches for non-KDE applications, e.g. Acrobat Reader (tm) and installs + those apps under the K start button. + +* kate + A fast and advanced text editor, extensible with nice plugins. + +* kcheckpass + Small program to enter and check passwords, to be used by other + programs. + +* kcontrol + The KDE Control Center allows you to tweak the KDE settings. + +* kdcop + GUI app to browse for DCOP interfaces, can also execute them. + +* kdebugdialog + Allows you to specify which debug messages you want to see. + +* kdeprint + The KDE printing system. + +* kdesktop + You guessed it: the desktop above the panel. + +* kdesu + A graphical front end to "su". + +* kdialog + Allows to display menu boxes from shell scripts. + +* kdm + Replacement for XDM, for those people that like graphical logins. + +* kfind + File find utility (standalone and in Konqueror's file manager). + +* khelpcenter + Used to to read all great documentation about KDE, unix man pages, + info pages etc. + +* khotkeys + Intercepts keys and can call applications. + +* kicker + The panel at the botton with the K start button and the taskbar etc. + +* kioslave + Infrastructure that helps make every application internet enabled + e.g. to directly save a file to ftp://place.org/dir/file.txt + +* klipper + Taskbar applet that enhances and extenses the X clipboard. + +* kmenuedit + Edit for the menu below the K start button. + +* konqueror + The file manager and web browser you get easily used to. + +* konsole + A shell program similar to xterm. + +* kpager + Applet to show the contents of the virtual desktops. + +* kpersonalizer + The customization wizard you get when you first start KDE. + +* kreadconfig + A tool for shell scripts to get info from KDE's config files. + +* krichtexteditor + A embeddable rich text editor and a wrapper application for it. + +* kscreensaver + The KDE screensaver environment and some basic screensavers. More + of them are in the kdeartwork package. + +* ksmserver + The KDE session manager (saves program status on login, restarts + those program at the next login). + +* kdepasswd + A KDE frontend for passwd. Also contains the "Password & User Information" KCM. + +* ksplashml + The screen displayed while KDE starts. + +* kstart + Launches applications with special window properties such as iconified, + etc. + +* ksysguard + Task manager and system monitor, can work with remote systems. + +* ksystraycmd + Allows to run any application in the system tray. + +* ktip + Gives you tips how to use KDE. + +* kwin + The KDE window manager (moves, resizes and decorates windows). + +* kxkb + A keyboard map tool. + +* l10n + l-10letters-n: localization. Mostly country flags. + +* libkonq + Some libraries needed by Konqueror. + +* nsplugins + Together with OSF/Motif or Lesstif allows you to use Netscape (tm) + plugins in Konqueror. + +* pics + Various icons and wallpapers. + + +Thanks! +------- +Thank you Steven M. Scotten and Kuno Raffi (weave) for creating artwork +specifically for the K Desktop Environment. Your efforts are much +appreciated. + +Mr. Scotten has created: blue_angle_swirl, bluecheck, bluegreencrisscross, +bluegreensilver, candystripe_chainlink, charcoal_sunset, fadedpaint, +garden_lattice, ghost_lightning, glassywarpcheck, gold_crinkle, greenish, +heavens_hex, latte, lime_vibration, liquid_canvas, northbeach, +orange_stacks, purple_swirl, string_theory, sunday_brunch, +toothofthehoundthatbitcha, vegetative_fog, wavetron, woodcheck + + +Common Mistakes +--------------- +IMPORTANT: most applications need KDEDIR as the directory where KDE is +installed. Please set this in your login file. + +If XPM support wasn't configured, it may be that configure has no idea where +your XPM libraries are. If so, set XPM_INCLUDE and XPM_LDFLAGS to the paths +where configure should look for XPM. But if you haven't installed XPM or it +didn't come with your system, that's no problem. You will only miss a few +screensavers. The same thing applies with OPENGL support. Here you have to +set GL_INCLUDE and GL_LDFLAGS. + +If configure claims Qt cannot be found, have a look at +ftp://ftp.trolltech.com and download the latest Qt 3.3.x release. + +Be advised, if you're using FreeBSD, then please do not use the Qt port that +comes along with it. + +Configuring +----------- +kdebase's configure script supports all the standard GNU autoconf options +(you can have the various options listed for you by specifying the --help +switch), plus the following options are also supported. Note: the *non* +default variation is listed, so if you see --enable-debug, the default is +--disable debug. + +`--x-includes=DIR' + use X include files in DIR + +`--x-libraries=DIR' + use X library files in DIR + +`--enable-debug' + creates debugging code [default=no] + +`--enable-strict' + Add strict[er] compiler options (may not work!) to the CFLAGS and + CXXFLAGS. This is GNU CC specific for the time being. + +`--with-gnu-ld' + assume the C compiler uses GNU ld [default=no] + +`--disable-libtool-lock' + force libtool not to do file locking + +`--disable-nls' + do not use Native Language Support (i18n) + +`--with-qt-dir' + where the root of qt is installed + +`--with-qt-includes=DIR' + look for the Qt header files in DIR + +`--with-qt-libraries=DIR' + look for the Qt library in DIR + +`--with-extra-includes=DIR' + look for include files in DIR in addition to any other + `standard' paths + +`--with-extra-libs=DIR' + look for [extra] libraries in DIR too + +`--disable-path-check' + don't try to make sure that kdebase is installed into the same + base KDE directory as the rest of KDE + +`--with-install-root=DIR' + the root to install to [default=/] (i.e. make / == DIR, so /usr + becomes DIR/usr) + +`--disable-rpath' + do not use the rpath feature of ld + +`--with-xdmdir=DIR' + use xdm (and config files) from DIR if the xdm config dir can't be + found automaticly + +`--with-pam[=ARG]' + enable support for PAM: ARG=[yes|no|service name] + +`--with-shadow' + if you want to check for and use shadow password support if it's present + +`--without-gl' + disable any software which depends on OpenGL + +`--without-xpm' + disable color pixmap XPM tests + +`--with-xinerama' + enable Xinerama support + +Please check ./configure --help for a more current list of options and what +they do. + + +Debugging +--------- +You can use --enable-debug with the configure script, if you want to have +debug code in your KDE apps and libs. If you experience problems and want to +report problems to the KDE Bugs database, it is recommended to recompile +with this switch enabled to make the backtraces more verbose (and thus +giving the developer more information about the cause of the bug). + + +Removal/Uninstallation +---------------------- +You can use 'make uninstall' if you want to remove the kde from the dirs. +This feature has not been tested completely, and is depreciated. On a system +where KDEDIR is specific to KDE (i.e. not /usr), rm -rf $KDEDIR does it as +well. + + +More Info +--------- +If your system does not have XPM installed, and you cannot locate a package +of it, you may obtain it from ftp://avahi.inria.fr/pub/xpm, or you may find +it in ftp://ftp.freebsd.org/pub/FreeBSD/distfiles + +If you are running a FreeBSD system, you will need to make sure that LIBS is +set to "-Wl,-export-dynamic". The easiest way to do this is to prefix +configure with it, i.e.: LIBS="-Wl,-export-dynamic" ./configure. Thanks to +Will Andrews and Arun Sharma +for identifying what needed to be done, and how to do it, and such. + +If your system supports PAM (Plugable Authentication Modules), please see +the README.pam file in this directory for more information about using KDE +with PAM. + +Have a look at the individual subdirectories, if you would like to find out +more about a specific application included in kdebase. + +More FAQs on http://www.kde.org/info/faq.html + +If you have problems compiling and installing this package, please check the +kde-devel@kde.org mailing list archive (see http://lists.kde.org) to see if +somebody had a similiar problem already. If not, try posting a message to +the list with detailed information about the compile problem. + +General KDE discussions should go to the KDE mailing list (kde@kde.org). + diff --git a/README.pam b/README.pam new file mode 100644 index 000000000..544b4e83f --- /dev/null +++ b/README.pam @@ -0,0 +1,72 @@ +KDE can be configured to support the PAM ("Pluggable Authentication +Modules") system for password checking by the display manager kdm and +by the screen saver kscreensaver (for unlocking the display). + +PAM is a flexible application-transparent configurable user-authentication +system found on FreeBSD, Solaris, and Linux (and maybe other unixes). + +Information about PAM may be found on its homepage + http://www.kernel.org/pub/linux/libs/pam/ +(Despite the location, this information is NOT Linux-specific.) + + +Known Solaris Issues: +-------------------- + +For compiling PAM support on Solaris, PAM_MESSAGE_NONCONST must +be defined. This should now be handled automatically by the +configure script. + + +Using PAM +--------- + +By default, PAM is automatically used, if it is found. Use +./configure --without-pam to disable it. + +If PAM is found, KDE usually uses the PAM service "kde". You may +override it for all KDE programs by using --with-pam= and/or +individually by using --with--pam=, where is +one of kdm, kcp and kss (for kdm, kcheckpass and kscreensaver). + +"make install" will attempt to create suitable service definitions; either +by putting files into /etc/pam.d/ or by adding text to /etc/pam.conf. The +services are just copies of the "login" service. +You may want to edit these definitions to meet your needs. +There are also two example service definitions in this directory - +kde.pamd and kscreensaver.pamd - but don't just copy them! +If the services are misconfigured, you will NOT be able to login via KDM +and/or unlock a locked screen! + +If there is ever any doubt about which PAM service a program was +compiled with, it can be determined by examining the PAM-generated +entries in the system log associated with kdm logins or kscreensaver +authentication failures. + + +PAM configuration files have four types of entries for each service: + +type used by kdm used by kscreensaver +---- ----------- -------------------- +auth x x +account x +password x +session x + +There may be more than one entry of each type. Check existing PAM +configuration files and PAM documentation on your system for guidance as +to what entries to make. If you call a PAM service that is not +configured, the default action of PAM is likely to be denial of service. + +Note: kdm implements PAM "session" support, which is not implemented in +certain PAM-aware xdm's that it may be replacing (e.g., the Red Hat +Linux 5.x xdm did not implement it). This may be configured to carry out +actions when a user opens or closes an kdm session, if a suitable PAM +module is available (e.g., mount and unmount user-specific filesystems). + +Note 2: Screensavers typically only authenticate a user to allow her to +continue working. They may also renew tokens etc., where supported. +See the Linux PAM Administrators guide, which is part of the PAM +distribution, for more details. + + diff --git a/applnk/.directory b/applnk/.directory new file mode 100644 index 000000000..4657d1458 --- /dev/null +++ b/applnk/.directory @@ -0,0 +1,81 @@ +[Desktop Entry] +Name=Default +Name[af]=Standaard +Name[ar]=إفتراضي +Name[az]=Ön Qurğulu +Name[be]=Стандартна +Name[bg]=По подразбиране +Name[bn]=ডিফল্ট +Name[br]=Dre ziouer +Name[ca]=Omissió +Name[cs]=Výchozí +Name[csb]=Domëslno +Name[cy]=Rhagosodedig +Name[da]=Standard +Name[de]=Standard +Name[el]=Προκαθορισμένο +Name[eo]=Defaŭlta +Name[es]=Predeterminado +Name[et]=Vaikimisi +Name[eu]=Lehenetsia +Name[fa]=پیش‌فرض +Name[fi]=Oletus +Name[fo]=Forsettur +Name[fr]=Par défaut +Name[fy]=Standert +Name[ga]=Réamhshocrú +Name[gl]=Por Omisión +Name[he]=ברירת מחדל +Name[hi]=डिफ़ॉल्ट +Name[hr]=Zadano +Name[hsb]=Standard +Name[hu]=Alapértelmezett +Name[id]=Standar +Name[is]=Sjálfgefið +Name[it]=Predefinito +Name[ja]=標準 +Name[ka]=ნაგულისხმევი +Name[kk]=Әдетті +Name[km]=លំនាំដើម +Name[ko]=기본 +Name[lo]=ຄ່າປະລິຍາຍ +Name[lt]=Numatyta +Name[lv]=Noklusētais +Name[mk]=Стандардно +Name[mn]=Стандарт +Name[mt]=Normali +Name[nb]=Standard +Name[nds]=Standard +Name[ne]=पूर्वनिर्धारित +Name[nl]=Standaard +Name[nn]=Standard +Name[nso]=Thuso ya Tshoganetso +Name[oc]=Omission +Name[pa]=ਮੂਲ +Name[pl]=Domyślnie +Name[pt]=Por Omissão +Name[pt_BR]=Padrão +Name[ro]=Implicit +Name[ru]=По умолчанию +Name[rw]=Mburabuzi +Name[se]=Standárda +Name[sk]=Štandardný +Name[sl]=Privzeto +Name[sr]=Подразумевано +Name[sr@Latn]=Podrazumevano +Name[sv]=Förval +Name[ta]=முன்னிருப்பு +Name[te]=అప్రమెయం +Name[tg]=Стандартӣ +Name[th]=ค่าปริยาย +Name[tr]=Öntanımlı +Name[tt]=Ğädäti +Name[uk]=Типовий +Name[uz]=Andoza +Name[uz@cyrillic]=Андоза +Name[vi]=Mặc định +Name[wa]=Prémetou +Name[xh]=Okwendalo +Name[zh_CN]=默认 +Name[zh_TW]=預設 +Name[zu]=Okwendalo diff --git a/applnk/Makefile.am b/applnk/Makefile.am new file mode 100644 index 000000000..512192ce4 --- /dev/null +++ b/applnk/Makefile.am @@ -0,0 +1,70 @@ +SUBDIRS = compat + +xdg_menu_DATA = kde-settings.menu kde-information.menu kde-screensavers.menu + +xdg_mergedmenu_DATA = kde-essential.menu +xdg_mergedmenudir = $(xdg_menudir)/applications-merged + +xdg_directory_DATA = \ +kde-main.directory \ +kde-development.directory \ +kde-editors.directory \ +kde-edutainment.directory \ +kde-games-arcade.directory \ +kde-games-board.directory \ +kde-games-card.directory \ +kde-games-kids.directory \ +kde-games-roguelikes.directory \ +kde-games-strategy.directory \ +kde-games.directory \ +kde-graphics.directory \ +kde-information.directory \ +kde-internet-terminal.directory \ +kde-internet.directory \ +kde-more.directory \ +kde-multimedia.directory \ +kde-office.directory \ +kde-science.directory \ +kde-settings-accessibility.directory \ +kde-settings-components.directory \ +kde-settings-desktop.directory \ +kde-settings-looknfeel.directory \ +kde-settings-network.directory \ +kde-settings-peripherals.directory \ +kde-settings-hardware.directory \ +kde-settings-power.directory \ +kde-settings-security.directory \ +kde-settings-sound.directory \ +kde-settings-system.directory \ +kde-settings-webbrowsing.directory \ +kde-settings.directory \ +kde-settingsmenu.directory \ +kde-system-screensavers.directory \ +kde-system-terminal.directory \ +kde-system.directory \ +kde-toys.directory \ +kde-unknown.directory \ +kde-utilities-xutils.directory \ +kde-utilities.directory \ +kde-utilities-accessibility.directory \ +kde-utilities-desktop.directory \ +kde-utilities-peripherals.directory \ +kde-utilities-file.directory \ +kde-utilities-pim.directory \ +kde-development-translation.directory \ +kde-development-webdevelopment.directory + +install-data-local: + for file in `cat $(srcdir)/old_desktop_files` ; do \ + if test -f $(DESTDIR)$(xdg_appsdir)/$${file} ; then \ + rm $(DESTDIR)$(xdg_appsdir)/$${file} ; \ + echo Deleting $(DESTDIR)$(xdg_appsdir)/$${file} ; \ + fi; \ + done; + + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir) + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/.hidden + $(INSTALL_DATA) $(srcdir)/hidden.directory $(DESTDIR)$(kde_appsdir)/.hidden/.directory + +uninstall-local: + -rm -f $(DESTDIR)$(kde_appsdir)/.hidden/.directory diff --git a/applnk/compat/Makefile.am b/applnk/compat/Makefile.am new file mode 100644 index 000000000..9825bd4aa --- /dev/null +++ b/applnk/compat/Makefile.am @@ -0,0 +1,7 @@ +#Desktop files provided for backwards compatibility + +applnk_compat_data_DATA = battery.desktop bwarning.desktop cwarning.desktop \ + power.desktop kcmkonq.desktop kcmkxmlrpcd.desktop \ + konqhtml.desktop socks.desktop virtualdesktops.desktop \ + email.desktop userinfo.desktop passwords.desktop +applnk_compat_datadir = $(kde_appsdir)/.hidden diff --git a/applnk/compat/battery.desktop b/applnk/compat/battery.desktop new file mode 100644 index 000000000..8684502d3 --- /dev/null +++ b/applnk/compat/battery.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Name=Laptop +Name[af]=Draagbare rekenaar +Name[ar]=الحاسوب النقّال +Name[az]=Dizüstü Kompüter +Name[be]=Ноўтбук +Name[bg]=Лаптоп +Name[bn]=ল্যাপটপ +Name[br]=Hezoug +Name[ca]=Portàtil +Name[cs]=Notebook +Name[cy]=Gluniadur +Name[da]=Bærbar +Name[el]=Φορητό +Name[eo]=Tekokomputilo +Name[es]=Portátil +Name[eu]=Ordenagailu eramangarria +Name[fa]=رایانۀ کیفی +Name[fi]=Kannettava +Name[fr]=Ordinateur portable +Name[fy]=Skoatkompjûter +Name[ga]=Ríomhaire Glúine +Name[gl]=Portátil +Name[he]=מחשב נייד +Name[hi]=लैपटॉप +Name[hsb]=laptop +Name[hu]=Noteszgép +Name[is]=Ferðavél +Name[it]=Portatile +Name[ja]=ラップトップ +Name[ka]=ლეპტოპი +Name[kk]=Ноутбук +Name[km]=កុំព្យូទ័រ​យួរ​ដៃ +Name[ko]=랩탑 +Name[lo]=ແລບທອບ +Name[lt]=Nešiojamas kompiuteris +Name[lv]=Laptops +Name[mk]=Лаптоп +Name[mn]=Лаптоп +Name[ms]=Komputer riba +Name[nb]=Bærbar +Name[nds]=Klappreekner +Name[ne]=ल्यापटप +Name[nn]=Berbar +Name[oc]=Portatil +Name[pa]=ਲੈਪਟਾਪ +Name[pt]=Portátil +Name[ru]=Ноутбук +Name[rw]=Mudasobwa Igendanwa +Name[se]=Mátkedihtor +Name[sl]=Prenosnik +Name[sr]=Лаптоп +Name[sv]=Bärbar dator +Name[ta]=மடிக்கணினி +Name[te]=లాప్ టాప్ +Name[tg]=Ноутбук +Name[th]=แลปทอป +Name[tr]=Dizüstü +Name[tt]=Qulsanaq +Name[uk]=Мобільний комп'ютер (лептоп) +Name[uz@cyrillic]=Лаптоп +Name[ven]=Khomupwutha pfarwa +Name[vi]=Máy xách tay +Name[wa]=Poirtåve +Name[xh]=Umphezulu osongiweyo +Name[zh_CN]=笔记本电脑 +Name[zh_TW]=筆記型電腦 +Name[zu]=Ikhomputha ephathwayo eyisicaba +X-KDE-ModuleType=Library +X-KDE-Library=laptop +X-KDE-FactoryName=battery +Exec=kcmshell laptop +Icon=laptop_battery +Type=Application diff --git a/applnk/compat/bwarning.desktop b/applnk/compat/bwarning.desktop new file mode 100644 index 000000000..abac31dc9 --- /dev/null +++ b/applnk/compat/bwarning.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Name=Laptop +Name[af]=Draagbare rekenaar +Name[ar]=الحاسوب النقّال +Name[az]=Dizüstü Kompüter +Name[be]=Ноўтбук +Name[bg]=Лаптоп +Name[bn]=ল্যাপটপ +Name[br]=Hezoug +Name[ca]=Portàtil +Name[cs]=Notebook +Name[cy]=Gluniadur +Name[da]=Bærbar +Name[el]=Φορητό +Name[eo]=Tekokomputilo +Name[es]=Portátil +Name[eu]=Ordenagailu eramangarria +Name[fa]=رایانۀ کیفی +Name[fi]=Kannettava +Name[fr]=Ordinateur portable +Name[fy]=Skoatkompjûter +Name[ga]=Ríomhaire Glúine +Name[gl]=Portátil +Name[he]=מחשב נייד +Name[hi]=लैपटॉप +Name[hsb]=laptop +Name[hu]=Noteszgép +Name[is]=Ferðavél +Name[it]=Portatile +Name[ja]=ラップトップ +Name[ka]=ლეპტოპი +Name[kk]=Ноутбук +Name[km]=កុំព្យូទ័រ​យួរ​ដៃ +Name[ko]=랩탑 +Name[lo]=ແລບທອບ +Name[lt]=Nešiojamas kompiuteris +Name[lv]=Laptops +Name[mk]=Лаптоп +Name[mn]=Лаптоп +Name[ms]=Komputer riba +Name[nb]=Bærbar +Name[nds]=Klappreekner +Name[ne]=ल्यापटप +Name[nn]=Berbar +Name[oc]=Portatil +Name[pa]=ਲੈਪਟਾਪ +Name[pt]=Portátil +Name[ru]=Ноутбук +Name[rw]=Mudasobwa Igendanwa +Name[se]=Mátkedihtor +Name[sl]=Prenosnik +Name[sr]=Лаптоп +Name[sv]=Bärbar dator +Name[ta]=மடிக்கணினி +Name[te]=లాప్ టాప్ +Name[tg]=Ноутбук +Name[th]=แลปทอป +Name[tr]=Dizüstü +Name[tt]=Qulsanaq +Name[uk]=Мобільний комп'ютер (лептоп) +Name[uz@cyrillic]=Лаптоп +Name[ven]=Khomupwutha pfarwa +Name[vi]=Máy xách tay +Name[wa]=Poirtåve +Name[xh]=Umphezulu osongiweyo +Name[zh_CN]=笔记本电脑 +Name[zh_TW]=筆記型電腦 +Name[zu]=Ikhomputha ephathwayo eyisicaba +X-KDE-ModuleType=Library +X-KDE-Library=laptop +X-KDE-FactoryName=bwarning +Exec=kcmshell laptop +Icon=laptop_battery +Type=Application diff --git a/applnk/compat/cwarning.desktop b/applnk/compat/cwarning.desktop new file mode 100644 index 000000000..985827400 --- /dev/null +++ b/applnk/compat/cwarning.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Name=Laptop +Name[af]=Draagbare rekenaar +Name[ar]=الحاسوب النقّال +Name[az]=Dizüstü Kompüter +Name[be]=Ноўтбук +Name[bg]=Лаптоп +Name[bn]=ল্যাপটপ +Name[br]=Hezoug +Name[ca]=Portàtil +Name[cs]=Notebook +Name[cy]=Gluniadur +Name[da]=Bærbar +Name[el]=Φορητό +Name[eo]=Tekokomputilo +Name[es]=Portátil +Name[eu]=Ordenagailu eramangarria +Name[fa]=رایانۀ کیفی +Name[fi]=Kannettava +Name[fr]=Ordinateur portable +Name[fy]=Skoatkompjûter +Name[ga]=Ríomhaire Glúine +Name[gl]=Portátil +Name[he]=מחשב נייד +Name[hi]=लैपटॉप +Name[hsb]=laptop +Name[hu]=Noteszgép +Name[is]=Ferðavél +Name[it]=Portatile +Name[ja]=ラップトップ +Name[ka]=ლეპტოპი +Name[kk]=Ноутбук +Name[km]=កុំព្យូទ័រ​យួរ​ដៃ +Name[ko]=랩탑 +Name[lo]=ແລບທອບ +Name[lt]=Nešiojamas kompiuteris +Name[lv]=Laptops +Name[mk]=Лаптоп +Name[mn]=Лаптоп +Name[ms]=Komputer riba +Name[nb]=Bærbar +Name[nds]=Klappreekner +Name[ne]=ल्यापटप +Name[nn]=Berbar +Name[oc]=Portatil +Name[pa]=ਲੈਪਟਾਪ +Name[pt]=Portátil +Name[ru]=Ноутбук +Name[rw]=Mudasobwa Igendanwa +Name[se]=Mátkedihtor +Name[sl]=Prenosnik +Name[sr]=Лаптоп +Name[sv]=Bärbar dator +Name[ta]=மடிக்கணினி +Name[te]=లాప్ టాప్ +Name[tg]=Ноутбук +Name[th]=แลปทอป +Name[tr]=Dizüstü +Name[tt]=Qulsanaq +Name[uk]=Мобільний комп'ютер (лептоп) +Name[uz@cyrillic]=Лаптоп +Name[ven]=Khomupwutha pfarwa +Name[vi]=Máy xách tay +Name[wa]=Poirtåve +Name[xh]=Umphezulu osongiweyo +Name[zh_CN]=笔记本电脑 +Name[zh_TW]=筆記型電腦 +Name[zu]=Ikhomputha ephathwayo eyisicaba +X-KDE-ModuleType=Library +X-KDE-Library=laptop +X-KDE-FactoryName=cwarning +Exec=kcmshell laptop +Icon=laptop_battery +Type=Application diff --git a/applnk/compat/email.desktop b/applnk/compat/email.desktop new file mode 100644 index 000000000..4842f3d03 --- /dev/null +++ b/applnk/compat/email.desktop @@ -0,0 +1,238 @@ +[Desktop Entry] +Icon=email +Type=Application +Exec=kcmshell kcm_useraccount +DocPath=kcontrol/email/index.html +X-KDE-ModuleType=Library +X-KDE-Library=useraccount +X-KDE-ParentApp=kcontrol + +Name=Email +Name[af]=E-pos +Name[ar]=البريد الإلكتروني +Name[az]=Poçt +Name[be]=Электронная пошта +Name[bg]=Е-поща +Name[bn]=ই-মেইল +Name[br]=Lizher elektronek +Name[ca]=Correu electrònic +Name[csb]=E-maila +Name[cy]=Ebost +Name[da]=E-mail +Name[de]=E-Mail +Name[eo]=Retpoŝto +Name[es]=Correo electrónico +Name[et]=E-post +Name[eu]=Posta elektronikoa +Name[fa]=رایانامه +Name[fi]=Sähköposti +Name[fo]=Teldupostur +Name[fr]=Courrier électronique +Name[fy]=E-post +Name[ga]=Ríomhphost +Name[gl]=Correo-e +Name[he]=דוא"ל +Name[hi]=ईमेल +Name[hr]=E-pošta +Name[hu]=E-mail +Name[is]=Tölvupóstur +Name[it]=Posta elettronica +Name[ja]=E メール +Name[ka]=ელფოსტა +Name[kk]=Эл.пошта +Name[km]=អ៊ីមែល +Name[ko]=전자 우편 +Name[lo]=ຈົດຫມາຍເອເລັກທຣໍນິກສ์ +Name[lt]=E. paštas +Name[lv]=E-pasts +Name[mk]=Е-пошта +Name[mn]=Э-Захиа +Name[ms]=Emel +Name[mt]=Imejl +Name[nb]=E-post +Name[nds]=Nettpost +Name[ne]=इमेल +Name[nl]=E-mail +Name[nn]=E-post +Name[nso]=E-poso +Name[pa]=ਈ-ਮੇਲ +Name[pl]=E-mail +Name[pt]=Correio Electrónico +Name[pt_BR]=E-Mail +Name[ru]=Электронная почта +Name[rw]=Imeli +Name[se]=E-boasta +Name[sk]=E-Mail +Name[sl]=E-pošta +Name[sr]=Е-пошта +Name[sr@Latn]=E-pošta +Name[sv]=E-post +Name[ta]=மின்னஞ்சல் +Name[te]=ఈ మెయిల్ +Name[tg]=Почтаи электронӣ +Name[th]=จดหมายอิเล็กทรอนิกส์ +Name[tr]=E-Posta +Name[uk]=Ел. пошта +Name[uz]=Elektron pochta +Name[uz@cyrillic]=Электрон почта +Name[ven]=Imeili +Name[vi]=Thư điện tử +Name[wa]=Emilaedje +Name[zh_CN]=电子邮件 +Name[zh_TW]=電子郵件 +Name[zu]=Iposi lekhomputha +Comment=Configure your identity, email addresses, mail servers, etc. +Comment[af]=Konfigureer jou identiteit, e-pos adresse, pos bedieners, etc. +Comment[ar]=اعدادت هويتك ،عناوين بريدك الألكتروني ، خوادِم البريد ، و الخ. +Comment[az]=Kimlik, ePoçt ünvanları, poçt vericiləri vb. buradan qurula bilər +Comment[be]=Настаўленне вашага ўвасаблення, адрасоў электроннай пошты, паштовых сервераў і г. д. +Comment[bg]=Настройване на самоличност, е-поща, пощенски сървър и др. +Comment[bn]=আপনার পরিচয়, ই-মেইল অ্যাড্রেস, মেইল সার্ভার ইত্যাদি কনফিগার করুন। +Comment[br]=Kefluniañ hoc'h anvelezh, chomlec'h postel, servijerien post h.a. +Comment[bs]=Podesite vaš identitet, e-mail addresu, mail servere, itd. +Comment[ca]=Aquí podeu configurar la vostra identitat, adreces, servidors de correu, etc. +Comment[cs]=Nastavení vaší identity, emailových adres, poštovních serverů atd. +Comment[csb]=Kònfigùracëjô òsobòwëch pòdôwków, pòcztowi adresë, serwera pòcztë, ëtd. +Comment[cy]=Ffurfweddu eich dynodiad, cyfeiriadau ebost, gweinyddion ebost, etc +Comment[da]=Indstil din identitet, e-mail-adresser, postservere, osv. +Comment[de]=Richten Sie Ihre Identität, E-Mail-Adressen, Mail-Server und anderes ein +Comment[el]=Ρύθμιση της ταυτότητάς σας, διευθύνσεις email, διακομιστές mail, κλπ. +Comment[eo]=Via identeco, retpoŝtadreso, retpoŝtserviloj ktp. +Comment[es]=Configuración de su identidad, direcciones de correo, servidores de correo, etc. +Comment[et]=Nime, e-posti aadressi, e-posti serverite jms. seadistamine +Comment[eu]=Konfigura itzazu zure identitatea, posta elektronikoaren helbidea, posta zerbitzariak, e.a. +Comment[fa]=هویت ،نشانیهای رایانامه، کارسازهای نامه و غیرۀ خود را پیکربندی کنید. +Comment[fi]=Määrittele sähköpostiosoiteet, sähköpostipalvelimet, jne. +Comment[fo]=Set upp samleiki tína (teldupostadressa, postambætari og so framvegis). +Comment[fr]=Configuration de votre identité, de vos adresses électroniques, des serveurs associés, etc. +Comment[fy]=Ynfier fan jo identiteit, e-(post)adresen, e-(post) tsjinners, enz. +Comment[ga]=Cumraigh d'aitheantas, seoltaí ríomhphoist, freastalaithe poist, srl. +Comment[gl]=Configurar a sua identidade, enderezo de correo electrónico, servidores de correo, etc. +Comment[he]=שינוי הגדרות הזהות שלך, כתובות דוא"ל, שרתי דואר וכו' +Comment[hi]=अपना परिचय, ईमेल पता, मेल सर्वर्स इत्यादि कॉन्फ़िगर करे +Comment[hr]=Konfigurirajte svoj identitet, adresu e-pošte, poslužitelje, itd. +Comment[hsb]=Identitu, emailowe adresy, serwery, atd. nastajić +Comment[hu]=A levelezési azonosító, e-mail cím, levelezőkiszolgálók, stb. beállítása +Comment[id]=Konfigurasi identitas anda, alamat e-mail, server mail dsb. +Comment[is]=Stilltu nafn, netfang, póstþjóna o.þ.h. hér. +Comment[it]=Configura la tua identità, l'indirizzo di posta elettronica, i server della posta, ecc. +Comment[ja]=あなたの個人情報,E メールアドレス,メールサーバなど +Comment[ka]=თქვენი ვინაობის, ელფოსტის მისამართის, ელფოსტის სერვერების, და ა.ს. შეყვანა +Comment[kk]=Сіз туралы мәліметті, электрондық пошта, пошта серверлерді, т.б.с.с. баптау. +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​អត្តសញ្ញាណ, អាសយដ្ឋាន​អ៊ីមែល, ម៉ាស៊ីន​បម្រើ​របស់​អ្នក ។ល។ +Comment[ko]=개인 정보, 전자 우편 주소, 메일 서버 등 설정 +Comment[lo]=ປັບແຕ່ງສິ່ງທີ່ບົ່ງເຖິງທ່ານ, ທີ່ຢູ່ອີເມລ, ເຊີບເວີຈົດຫມາຍເປັນຕົ້ນ +Comment[lt]=Jūsų identifikavimo, e. pašto adresų, pašto serverių ir t.t. derinimas +Comment[lv]=Konfigurē jūsu identitāti, epasta adreses, pasta serverus, u.t.t. +Comment[mk]=Конфигурирајте го вашиот идентитет, е-пошт. адреси, е-пошт. сервери, итн. +Comment[mn]=Өөрийн биеийн байцаалт, Э-Захианы хаяг, Захиа-Сервер болонбусад зүйлсээ тохируулах +Comment[ms]=Tetapkan identiti, alamat emel, pelayan mel, dan sebagainya. +Comment[mt]=Issettja l-identità, indirizzi tal-imejl tiegħek, eċċ. +Comment[nb]=Tilpass egen identitet, e-postadresse, e-posttjener osv. +Comment[nds]=Richt diene Identiteet, de Nettpostadress, Nettpost-Server usw. in. +Comment[ne]= तपाईँको परिचय, इमेल ठेगाना, मेल सर्भर इत्यादि कन्फिगर गर्नुहोस् । +Comment[nl]=Voer uw identiteit, e-mailadressen, e-mailservers, enz. in +Comment[nn]=Set opp identitet, e-postadresse, e-posttenarar osv. +Comment[nso]=Beakanya boitsibiso bja gago, diaterese tsa e-poso, baabi ba poso, le tsedingwe. +Comment[pa]=ਆਪਣੀ ਪਛਾਣ, ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ, ਮੇਲ ਸਰਵਰ ਦੀ ਸੰਰਚਨਾ ਦਿਉ। +Comment[pl]=Konfiguracja danych osobowych, adresu pocztowego, serwera poczty, itd. +Comment[pt]=Configuração da sua identidade, endereços de correio electrónico, servidores, etc. +Comment[pt_BR]=Configure sua identidade, endereços de e-mail, servidores de e-mail, etc. +Comment[ro]=Configurați identitatea dvs, adrese de email, servere de email, etc. +Comment[ru]=Настройка вашего имени, адреса электронной почты, почтовых серверов, и т. д. +Comment[rw]=Boneza Ikikuranga , amaderesi imeli, Amaseriveri y'ubutumwa, n'ibindi. +Comment[se]=Heivet identitehtat, e-boastačujuhusat, e-boastabálvát jna. +Comment[sk]=Nastavte svoju identitu, e-mailovú adresu, mail server, atď. +Comment[sl]=Nastavite svojo identiteto, e-naslove, poštne strežnike, itd. +Comment[sr]=Подесите ваш идентитет, е-адресе, сервере и сл. +Comment[sr@Latn]=Podesite vaš identitet, e-adrese, servere i sl. +Comment[sv]=Anpassa din identitet, dina e-postadresser, e-postservrar, etc. +Comment[ta]=அடையாளத்தை வடிவமை,மின்னஞ்சல் முகவரிகள்,அஞ்சல் சேவகன்கள், போன்றவை +Comment[te]=మీ ఐడెంటిటి, ఈమెయిల్ అడ్రస్, మెయిల్ సర్వర్లని రరూూపకరణ చేయండి +Comment[tg]=Танзими номи худ, почтаи электронӣ, серверҳои почтавӣ ва ғайра. +Comment[th]=ปรับแต่งสิ่งระบุตัว, ที่อยู่อีเมล, เซิร์ฟเวอร์จดหมาย และอื่นๆ ของคุณ +Comment[tr]=Kimlik, e-posta adresleri, posta sunucuları vb. yapılandır. +Comment[tt]=İsemeñne, email adreslarnı, xat serverlärne w.b. caylaw. +Comment[uk]=Налаштуйте ваше ім'я, адресу електронної пошти, поштові сервери і т.і. +Comment[uz]= Shaxsiyat, elektron pochta, xat-xabar serverlari va hokazolarni moslash. +Comment[uz@cyrillic]= Шахсият, электрон почта, хат-хабар серверлари ва ҳоказоларни мослаш. +Comment[ven]=Khonifigarani vhuvha hanu, Dzidiresi dza Imeili, poso ya dzisiva +Comment[vi]=Cấu hình thông tin cá nhân, địa chỉ thư điện tử, máy phục vụ thư... +Comment[wa]=Apontyî voste idintité, adresses emile, sierveus d' emilaedje, evnd. +Comment[xh]=Qwalasela isiqinisekiso sakho, iidilesi ze email, abancedisi beposi, njalo-njalo. +Comment[zh_CN]=配置您的身份、电子邮件地址、邮件服务等。 +Comment[zh_TW]=設定您的身份認證、電子郵件地址、郵件伺服器等。 +Comment[zu]=Hlanganisa umazisi wakho,ikheli leposi lekhomputha,umlekeleli weposi,etc. + +Keywords=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client +Keywords[af]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Kliënt +Keywords[ar]=البريد الإلكتروني ، البريد ، العنوان ، خادم البريد الإلكتروني ، IMAP ، POP3 ، صندوق البريد المحلّي ، صندوق البريد ، معلومات عن المستخدِم ، عنوان الإجابة ، معلومات عن الخادِم ، إسم المستخدم ، كلمات المرور ، المضيف ، المواصفات الشخصية الحالية ، المنظمة/ الشركة ، مضيف الواردات ، مضيف الصادرات ، زبون البريد الإلكتروني +Keywords[az]=ePoçt,Poçt,E-Poçt,Ünvan,ePoçt vericisi,IMAP,POP,yerli poçt qutusu,poçt qutusu,ePoçt Alıcısı,Quruluş,Şəxsi Mə'lumatlar,Maşın,İstifadəçi Mə'lumatları,Verici mə'lumatlar,İstifadəçi Adı +Keywords[be]=Электронная пошта,Пошта,Адрас,Паштовы сервер,Інфармацыя аб карыстальніку,Адрас для адказу,Інфармацыя аб серверы,Імя карыстальніка,Паролі,Вузел,Профіль,Арганізацыя,Кліент электроннай пошты,EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client +Keywords[bg]=е-поща, поща, сървър, ел, EMail, Mail, E-Mail, Address, Email server, IMAP, POP3, Local mailbox, mailbox, User Information, Reply Address, Server information, User Name, Passwords, Host, Current Profile, Profile, Organization, Incoming Host, Outgoing Host, Email Client +Keywords[ca]=Correu electrònic,Correu,E-mail,Adreça,Servidor de correu,IMAP,POP3,Bústia local,Bústia,Informació d'usuari,Adreça de resposta,Informació de servidor,Nom d'usuari,Contrasenyes,Remot,Perfil actual,Perfil,Organització,remot d'entrada,remot de sortida,Client de correu +Keywords[cs]=Email,Pošta,E-mail,Adresa,Poštovní server,IMAP,POP3,Lokální poštovní schránka,Schránka,IMAP,POP3,Mailbox,Lokální mailbox,Uživatelské jméno,Hesla,Hostitel,Profil,Organizace,Příchozí pošta,Odchozí pošta,Emailový klient +Keywords[csb]=emaila,e-maila,elektronicznô pòczta,adresa,lëst,pòcztowi serwer,IMAP,POP3,lokalnô skrzinka,pòcztowô skrzinka,wëdowiédzô ò brëkòwnikù,wëdowiédzô ò serwerze,adresa òdpòwiesce,miono brëkòwnika,parole,miono kòmpùtra,biéżny profil,profil,òrganizacëjô, przëchôdôjącô pòczta,wëchôdôjącô pòczta,pòcztowô programa +Keywords[cy]=EBost,Post,E-Bost,Cyfeiriad,Gweinydd ebost,IMAP,POP3,Blwch e-bost lleol,blwch e-bost,Gwybodaeth Defnyddiwr,Cyfeiriad Ateb,Gwybodaeth gweinydd,Enw Defnyddiwr,Cyfrineiriau,Gwesteiwr,Proffil Cyffredol,Proffil,Corff,Gwesteiwr Mewn,Gwesteiwr Allan,Dibynnydd Ebost +Keywords[da]=E-mail,Post,Adresse,Postserver,IMAP,POP3,Lokal postkasse,postkasse,Brugerinformation,Svaradresse,Serverinformation,Brugernavn,Kodeord,Vært, Denne profil,Profil,Organisation,Indkommende vært,Udgående vært, E-mail-klient +Keywords[de]=Email,Mail,E-Mail,Adresse,E-Mail-Server,IMAP,POP3,Lokale Mailbox,Mailbox,Postfach,Benutzerinformationen,Antwortadresse,Serverinformation,Benutzername,Passwörter,Rechner,Profil,Organisation,Posteingang,Postausgang,E-Mail-Programm +Keywords[el]=EMail,Mail,E-Mail,Διεύθυνση,Διακομιστής email,IMAP,POP3,Τοπική θυρίδα,θυρίδα,Πληροφορίες χρήστη,Διεύθυνση απάντησης,Πληροφορίες διακομιστή,Όνομα χρήστη,Κωδικοί πρόσβασης,Υπολογιστής,Τρέχον προφίλ,Προφίλ,Οργανισμός,Υπολογιστής εισερχομένων,Υπολογιστής εξερχομένων,Πελάτης email +Keywords[en_GB]=EMail,Mail,E-Mail,email,e-mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organisation,Organization,Incoming Host,Outgoing Host,Email Client +Keywords[eo]=retpoŝto,poŝto,adreso,servilo,IMAP,POP3,poŝtkesto,uzanto, respondadreso,servilo,uzantnomo,pasvorto,gastigo,agordo,organizaĵo,ricevo,sendo,retpoŝtprogramo +Keywords[es]=Correo electrónico,Correo,E-Mail,Dirección,Servidor de correo,IMAP,POP3,Buzón local,buzón,Información del usuario,Dirección de respuesta,Información del servidor,Nombre de usuario,Contraseñas,Máquina,Perfil actual,Perfil,Organización,Máquina entrante,Máquina saliente,Cliente de correo +Keywords[et]=e-mail,e-post,meil,mail,aadress,meiliserver,IMAP,POP3,kohalik postkast,postkast,kasutajainfo,vastamise aadress,serveri info,kasutajanimi,paroolid,host,aktiivne profiil,profiil,organisatsioon,sissetulev post,väljaminev post,meiliklient +Keywords[eu]=Posta elektronikoa,Posta,E-Mail,Helbidea,Posta zerbitzaria,IMAP,POP3, Posta kutxa lokala,posta kutxa,Erabiltzailearen informazioa,Reply Address, Zerbitzariaren informazioa,Erabiltzailearen izena,Pasahitzak,Ostalaria,Uneko profila,Profila,Erakundea,Sarrera hostalaria,Irteera hostalaria,Posta elektroniko bezeroa +Keywords[fa]=رایانامه، نامه، رایانامه، کارساز‌نامه، IMAP،POP3، نامه‌دان محلی، نامه‌دان اطلاعات کاربر، نشانی پاسخ، اطلاعات کارساز، نام کاربر، اسم رمزها، میزبان، شرح وضعیت جاری، شرح وضعیت، سازمان، میزبان واردشونده، میزبان خارج‌شونده، کارخواه‌نامه +Keywords[fi]=Sähköposti,E-Mail,Osoite,Sähköpostipalvelin,IMAP,POP3,Postilaatikko,Käyttäjätiedot,Vastausosoite,Osoite,Palvelimen tiedot,Käyttäjänimi,Salasanat,Palvelin,Nykyinen profiili,Profiili,Organisaatio,Lähtevä palvelin,Tuleva palvelin,Sähköpostiohjelma +Keywords[fo]=adressa,teldupostur,upplýsingar,navn,vertur,IMAP,POP3,samleiki,ambætari +Keywords[fr]=courrier électronique,email,e-mail,adresse,serveur de courrier,serveur de mail,IMAP,POP3,boîte aux lettres locale,boîte aux lettres,pop3,imap,mail,messagerie,message,message électronique,adresse électronique,utilisateur,profil,organisation,serveur entrant,serveur sortant,serveur de réception,serveur d'envoi,réception,envoi,informations sur l'utilisateur,adresse de réponse,reply,mot de passe,serveur,hôte,client de mail,client de messagerie +Keywords[fy]=e-post,post,e-post,berjochten,adres,e-post-tsjinner,imap,pop3,lokale postbus,postboks,postbus,brûkersynformaasje,antwurdadres,tsjinnerynformaasje,brûkersnamme,wachtwurden,host,aktyf profiel,organisaasje,ynkommende host,útgeande host,e-postklant +Keywords[ga]=R-phost,Post,Rphost,Ríomhphost,Seoladh, Freastalaí Poist,IMAP,POP3,Bosca Poist Logánta,bosca poist,eolas úsáideora,Seoladh Freagra,Eolas Freastalaí,Ainm úsáideora,Focail Faire,Óstríomhaire,Próifíl Reatha,Próifíl,Eagraíocht,Cliant R-phoist +Keywords[gl]=Correo-e,Correo,E-Mail,Enderezo,Servidor de correo,IMAP,POP3,Cartafol local,mailbox,Información de usuario,Enderezo de Resposta,Información do servidor,Nome de usuario,Contrasinais,Servidor,Perfil actual,perfil,Organización,Servidor Entrante,Servidor saínte,Cliente de Correo +Keywords[he]=תיבת דואר מקומית,תיבת דואר,פרטי משתמש,כתובת תשובה,פרטי שרת,שם משתמש,ססמאות,שרת,פרופיל נוכחי,פרופיל,ארגון,מארח דואר נכנס,מארח דואר יוצא,תוכנית דוא"ל,POP3,IMAP,דוא"ל,דואר,דואר אלקטרוני,כתובת,שרת דוא"ל,EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client +Keywords[hi]=ईमेल,डाक,ई-मेल,पता,ईमेल सर्वर्स,आईमेप,पॉप3,स्थानीय डाक डब्बा, डाक डब्बा, उपयोक्ता जानकारी,जवाबी पता,सर्वर जानकारी,उपयोक्ता नाम,पासवर्ड,होस्ट,मौज़ूदा प्रोफ़ाइल,प्रोफ़ाइल,संस्था,आवक होस्ट,जावक होस्ट,ईमेल क्लाएंट +Keywords[hsb]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client wužiwar, hesło, mailka, adresa, serwer, póštowy kašćik, póstowy kašćik +Keywords[hu]=email,e-mail,mail,üzenet,cím,levél,levelezési kiszolgáló,IMAP,POP3,helyi postaláda,postaláda,felhasználójellemzők,válaszcím,kiszolgálóinformáció,felhasználónév,jelszavak,gépnév,jelenlegi profil,szervezet,bemeneti kiszolgáló,kimeneti kiszolgáló,e-mail kliens +Keywords[is]=Tölvupóstur,póstur,netfang,heimilisfang,póstþjónn,IMAP,POP3, pósthólf,notendaupplýsingar,svarpóstfang,póstfang,notandanafn, lykilorð,þjónn,póstforrit +Keywords[it]=email,mail,e-mail,posta,posta elettronica,indirizzo,server di posta elettronica,IMAP,POP3,casella di posta locale,casella di posta,informazioni utente,reply address,indirizzo di risposta,informazioni server,password,host,profilo attuale,profilo,organizzazione,posta in arrivo,server posta in arrivo,server posta in uscita,client di posta,Reply Address +Keywords[ja]=E メール,メール,E-メール,アドレス,E メールサーバ,IMAP,POP3 ,ローカルメールボックス,ユーザ情報,返信アドレス,サーバ情報,ユーザ名,パスワード,ホスト,現在のプロファイル,プロファイル,組織,着信ホスト,送信ホスト,E メールクライアント +Keywords[ka]=ელ-ფოსტა, ფოსტა, ელფოსტა, მისამართი, საფოსტო სერვერი, IMAP, POP3, ლოკალური საფოსტო ყუთი, საფოსტო ყუთი, ინფორმაცია მომხმარებლის შესახებ, მიმღების მისამართი, ინფორმაცია სერველის შესახებ, მომხმარებლის სახელი, პაროლები, ჰოსტი, ახლანდელი პროფილი, პროფილი, ორგანიზაცია, შემომავალი ჰოსტი, გამავალი ჰოსტი, საფოსტო კლიენტი +Keywords[km]=អ៊ីមែល,សំបុត្រ,អាសយដ្ឋាន,ម៉ាស៊ីន​បម្រើ​អ៊ីមែល,IMAP,POP3,ប្រអប់​សំបុត្រ​មូលដ្ឋាន,ប្រអប់​សំបុត្រ,ព័ត៌មាន​អ្នក​ប្រើ,អាសយដ្ឋាន​ឆ្លើយតប,ព័ត៌មាន​ម៉ាស៊ីន​បម្រើ,ឈ្មោះ​អ្នក​ប្រើ,ពាក្យ​សម្ងាត់,ម៉ាស៊ីន,ទម្រង់​បច្ចុប្បន្ន,ទម្រង់,អង្គការ,កុំព្យូទ័រ​ផ្ញើ​ចូល,កុំព្យូទ័រ​ផ្ញើ​ចេញ,កម្មវិធី​អ៊ីមែល +Keywords[lt]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,e. paštas,paštas,el.paštas,e. pašto serveris,IMAP,POP3,pašto dėžutė,naudotojo informacija,naudotojo vardas,slaptaždžiai,mazgas,e. pašto klientas +Keywords[lv]=EPasts,Pasts,E-Pasts,Adrese,Epasta serveris,IMAP,POP3,Lokālā pastkastīte,pastkastīte,Lietotāja Informācija,Atbildes Adrese,Servera informācija,Lietotāja Vārds,Paroles,ResursDators,Tekošais Profils,Profils,Organizācija,Ienākošais Resursdators,Izejošais Resursdators,Epasta Klients +Keywords[mk]=EMail,Mail,E-Mail,е-пошта,пошта,Адреса,Email сервер,IMAP,POP3, Локално сандаче,сандаче,Информации за корисникот,Reply адреса, Информации за серверот,Корисничко име,Лозинки,Сервер,Моментален профил, Профил,Организација,Сервер на пристигање,Сервер на испраќање,е-пошт клиент +Keywords[mn]=Эзахиа,Захиа,Э-Захиа,Хаяг,Э-Захиа-Сервер,IMAP,POP3,Дотоод шуудан,Шуудан,Хэрэглэгчийн мэдээлэл,Буцах-Хаяг,Сервер-мэдээлэл, Хэрэглэгчийн нэр,Нууц үгс,Хост,Profil,Байгууллага,Ирэх хост,Гараххост,Э-Захиа-програм +Keywords[ms]=EMel,Mel,E-Mel,Alamat,Pelayan emel,IMAP,POP3,Kotak mel lokal,kotak mel,Maklumat Pengguna,Balas Alamat, Informasi Pelayan, Pengguna Nama,Kata laluan,Hos, Profil semasa,Profil,Organisasi,Hos masuk, Hos keluar, Klien Emel +Keywords[mt]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,Imejl +Keywords[nb]=E-post,post,e-post,adresse,e-posttjener,IMAP,POP3,Lokal postboks,postboks,brukerinformasjon,svaradresse,brukernavn,passord,tjener,vert,profil,organisasjon,inngående tjener,utgående tjener,e-postprogram +Keywords[nds]=EMail,Mail,Nettpost,Nettbreef,Adress,Email Server,Nettpost-Server,IMAP,POP3,lokaal Breefkasten,Breefkasten,Brukerinformatschoon,Antwoortadress,Serverinformatschoon,Brukernaam,Passwöör,Host,aktuelle Profil,Profil,Organisatschoon,ankamen,Incoming Host,weggahn,Outgoing Host,Email Client,Nettpost-Programm +Keywords[ne]=इमेल, मेल, इ-मेल, ठेगाना, इमेल सर्भर, आई म्याप ,पप ३, स्थानीय पत्र बाकस, पत्र बाकस, प्रयोगकर्ताको सूचना, फिर्ता पठाउने ठेगाना, सर्भर सूचना, प्रयोगकर्ता नाम, पासवर्ड, होस्ट, हालको प्रोफाइल, प्रोफाइल, सङ्गठन, आगमन होस्ट, निर्गमन होस्ट, इमेल क्लाइन्ट +Keywords[nl]=e-mail,post,e-mail,berichten,adres,e-mailserver,imap,pop3,lokale postbus,mailbox,postbus,gebruikersinformatie,antwoordadres,serverinformatie,gebruikersnaam,wachtwoorden,host,huidig profiel,organisatie,inkomende host,uitgaande host,e-mailclient +Keywords[nn]=e-post,adresse,e-posttenar,IMAP,POP3,lokal postboks,postboks,brukarinformasjon,svaradresse,tenarinformasjon,brukarnamn,passord,vert,profil,organisasjon,innkomande vert,utgåande vert,e-postklient +Keywords[nso]=E-Poso,Poso,E-Poso,Aterese,Moabi wa E-poso,IMAP,POP3, Lepokisi la selegae la poso,lepokisi la poso,Tshedimoso ya Modirisi,Aterese ya Phetolo, Tshedimoso ya Moabi,Leina la Modirisi,Mantsuphetiso,Moswari,Faelekgolo ya Bjale,Faelekgolo,Mokgahlo,Moswari wa tseo di Tsenago,Moswari wa tseo di Tswago, Morekiwa E-poso +Keywords[pa]=ਈ-ਮੇਲ, ਈਮੇਲ, ਈਮੇਲ ਸਰਵਰ,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,ਮੇਜ਼ਬਾਨ,ਮੌਜੂਦਾ ਪਰੋਫਾਇਲ,ਸੰਗਠਨ +Keywords[pl]=email,e-mail,poczta elektroniczna,adres,list,serwer pocztowy,IMAP,POP3,lokalna skrzynka,skrzynka pocztowa,informacja o użytkowniku,informacja o serwerze,adres odpowiedzi,nazwa użytkownika,hasła,nazwa komputera,bieżący profil,profil,organizacja,poczta przychodząca,poczta wychodząca,program pocztowy +Keywords[pt]=e-mail,mail,e-mail,correio electrónico,endereço,servidor de e-mail,IMAP,POP3,caixa de correio local,caixa de correio,informação do utilizador,endereço de resposta,informação do servidor,utilizador,senhas,máquina,perfil actual,perfil,organização,máquina de recepção,máquina de envio,cliente de e-mail +Keywords[pt_BR]=E-mail,Correio,Mensagem,endereço de e-mail,endereço,servidor de e-mail,IMAP,POP3,Caixa de correio local,caixa de correio,informações do usuário,endereço de resposta,informações de servidor,nome do usuário,senhas,máquina,perfil atual,perfil,organização,máquina de entrada,máquina de saída,cliente de e-mail +Keywords[ro]=EMail,Mail,E-Mail,adresă,server email,IMAP,POP3,căsuță poștală locală,căsuță poștală,informații utilizator,adresă de răspuns,informații server,nume utilizator,parole,gazdă,profil curent,profil,organizație,gazdă sursă,gazdă destinație,client de email +Keywords[rw]=Imeli,Ubutumwa,Imeli, Aderesi, Seriveri Imeli,IMAP,POP3,Agasanduku-ubutumwa ka hafi,Agasanduku-ubutumwa,Amakuru y'Ukoresha,Aderesi yo Gusubirizaho,Amakuru ya Seriveri,Izina ry'Ukoresha, Amagambobanga,Ubuturo,Ibijyana bigezweho,Ibijyana,Ikigo,Ubuturo buzana, Ubuturo Bwohereza, Umukiriya Imeli +Keywords[se]=e-boasta,čujuhus,e-boastabálvát,IMAP,POP3,báikkálaš boastaboksa, boastaboksa,geavaheaddjidieđut,vástidančujuhus,bálvádieđut,geavaheaddjinamma, beassansátni,guossoheaddji,profiila,organisašuvdna,boahtti guossoheaddji, manni guossoheaddji,e-boastaprográmma,e-boastaklienta +Keywords[sk]=Email,Mail,E-mail,Adresa,Email server,IMAP,POP3,lokálny mailbox,priečinok,mailbox,Informácia o používateľovi,Informácia o používateľovi,Adresa Reply,Reply,Odpoveď,Informácia o serveri,Uživateľské meno,Heslá,Hostiteľ,Aktuálny profil,profil,organizácia,hostiteľ pre novú poštu,hostiteľ pre odosielanie,e-mailový klient +Keywords[sl]=epošta,e-pošta,pošta,EMail,E-Mail,naslov,e-poštni strežnik,IMAP,POP3,lokalni poštni predal,poštni predal,uporabniško ime,gesla,gostitelj,trenutni profil,profil,organizacija,sprejemni gostitelj,izhodni gostitelj,e-poštni odjemnik +Keywords[sr]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,е-пошта,адреса,сервер,лозинке,долазећи, одлазећи,профил,клијент,организација,адреса за одговоре +Keywords[sr@Latn]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,e-pošta,adresa,server,lozinke,dolazeći, odlazeći,profil,klijent,organizacija,adresa za odgovore +Keywords[sv]=EPost,Post,E-post,Adress,E-postserver,IMAP,POP3,Lokal brevlåda,brevlåda,Användarinformation,Svarsadress,Serverinformation, Användarnamn,Lösenord,Värddator,Aktuell profil,Profil,Organisation,Inkommande värddator,Utgående värddator,E-postklient +Keywords[ta]=மின்னஞ்சல்,அஞ்சல்,மின்னஞ்சல்,முகவரி,மின்னஞ்சல் சேவகன்,IMAP,POP3,உள் அஞ்சல்பெட்டி,அஞ்சல்பெட்டி,பயன்படுத்துபவர் தகவல்,பதில் முகவரி,சேவகன் தகவல்,பயன்படுத்துபவர் பெயர்,கடவுச்சொற்கள்,புரவலர்,நடப்பு வடிவுருவம்,வடிவுருவம்,நிறுவனம்,உள்வரும் புரவலர்,வெளிசெல்லும் புரவலர்,மின்னஞ்சல் உறுப்பினர் +Keywords[te]=ఈమెయిల్, మెయిల్, తపాలా, ఈ-మెయిల్, చిరునామా, ఈమెయిల్ సర్వర్, ఐమేప్, పాప్3, స్థానిక మెయిల్ డబ్బా, మెయిల్ డబ్బా, యూజర్ సమాచారం, ప్రత్యుత్తర చిరునామ, సెర్వర్ సమచారం, యూజర్ సమచారం, పాస్ వర్డులు, హొస్ట్, ప్రస్తుత ప్రొఫైల్, ప్రొఫైల్, సంస్థ, వచ్చే హోస్ట్, పంపించే హోస్ట్, ఈమెయిల్ క్లైంట్ +Keywords[th]=อีเมล,จดหมาย,อี-เมล,ที่อยู่,เซิร์ฟเวอร์ของอีเมล,IMAP,POP3,กล่องจดหมายบนเครื่อง,กล่องจดหมาย,ข้อมูลผู้ใช้,ที่อยู่สำหรับตอบกลับ,ข้อมูลเซิร์ฟเวอร์,ชื่อผู้ใช้,รหัสผ่าน, โฮสต์,โปรไฟล์ปัจจุบัน,โพรไฟล์,องค์กร,โฮสต์ขาเข้า,โอสต์ขาออก,โปรแกรมรับส่งอีเมล +Keywords[tr]=Eposta,Posta,E-Posta,Adres,Eposta sunucusu,IMAP,POP,yerel posta kutusu,posta kutusu,E-posta İstemcisi,Organizasyon,Kişisel Bilgiler,Makine,Kullanıcı Bilgileri,Sunucu bilgileri,Kullanıcı Adı +Keywords[uk]=email,електронна пошта,ел. пошта,e-mail,адреса,сервер електронної пошти,email-server,IMAP,POP3,локальна поштова скринька,поштова скринька,mailbox,інформація про користувача,адреса відповіді,інформація про сервер,ім'я користувача,паролі,вузол,поточний профіль,профіль,установа,вхідний вузол,вихідний вузол,клієнт ел. пошти +Keywords[uz]=Elektron pochta,Xat,Xat-xabar,Manzil,Xat-xabar serveri,Lokal meylboks,meylboks,Foydalanuvchi haqida maʼlumot,Javob berish manzili,Server haqida maʼlumot,Foydalanuvchining ismi,Maxfiy soʻzlar,Kompyuter,Joriy profil,Profil,Tashkilot,Xat-xabar klienti,Incoming Host,Outgoing Host +Keywords[uz@cyrillic]=Электрон почта,Хат,Хат-хабар,Манзил,Хат-хабар сервери,Локал мейлбокс,мейлбокс,Фойдаланувчи ҳақида маълумот,Жавоб бериш манзили,Сервер ҳақида маълумот,Фойдаланувчининг исми,Махфий сўзлар,Компьютер,Жорий профил,Профил,Ташкилот,Хат-хабар клиенти,Incoming Host,Outgoing Host +Keywords[vi]=Thư điện tử,Thư,Email,địa chỉ,Máy phục vụ thư điện tử,IMAP,POP3,Hộp thư địa phương, hộp thư,Thông tin về người dùng,Địa chỉ Trả lời,Thông tin về máy phục vụ,Tên người sử dụng,Mật mã,Máy chủ,Lý lịch hiện tại,Lý lịch,Tổ chức,Máy chủ nhận thư,Máy chủ gửi thư,Trình quản lý thư điện tử +Keywords[wa]=EMail,Emile,Mail,Corî,E-Mail,Adresse,sierveu emile,IMAP,POP3,locåle boesse ås letes,boesse ås letes,Informåcion d' uzeu,Adresse di response,informåcion d' uzeu,no d' uzeu,sicrets, mots di passe,lodjeu,Host,Profil,Soce,intrant lodjeu,rexhant lodjeu,cliyint emile +Keywords[xh]=EMail,Iposi,E-Mail,Idilesi,Umncedisi we Email,IMAP,POP3,Ibhokisi yobulali yeposi,ibhokisi yeposi,Umsebenzisi wolwazi,Idilesi yempendulo,Ulwazi lomncedisi,Igama lomsebenzisi, Igama eligqithisiweyo,Inginginya,Umxhasi we Email +Keywords[zh_CN]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,电子邮件,邮件服务器,本地邮箱,邮箱,用户信息,回复地址,服务器信息,用户名,密码,主机,组织,接收服务器,发送服务器,邮件程序 +Keywords[zh_TW]=EMail,Mail,E-Mail,Address,Email server,IMAP,POP3,Local mailbox,mailbox,User Information,Reply Address,Server information,User Name,Passwords,Host,Current Profile,Profile,Organization,Incoming Host,Outgoing Host,Email Client,電子郵件,信件,位址,郵件伺服器,本地信箱,信箱,使用者資訊,回信位址,郵件主機資訊,帳號,密碼,主機,組織,收信主機,送信主機,郵件程式 +Keywords[zu]=Iposi lekhomputha,Iposi,Iposi lekhomputha,Ikheli, Umlekeleli weposi lekhomputha,IMAP,POP3,Ibhokisi leposi eliseduze, ibhokisi leposi,Ulwazi lomsebenzisi,Ikheli Lokuphendula,Ulwazi lomlekeleli,Igama Lomsebenzisi,Amagama-okudlula,Isiteshi sekhomputha, Iprofayela lamanje,Iprofayela,Inhlangano,Isiteshi sekhomputha sokungenayo, Isiteshi sekhomputha sokuphumayo, Umxhasi weposi lekhomputha +NoDisplay=true diff --git a/applnk/compat/kcmkonq.desktop b/applnk/compat/kcmkonq.desktop new file mode 100644 index 000000000..9b48bf5b2 --- /dev/null +++ b/applnk/compat/kcmkonq.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=File Manager +Name[af]=Lêer Bestuurder +Name[ar]=مدبّر الملفات +Name[az]=Fayl İdarəcisi +Name[be]=Кіраўнік файлаў +Name[bg]=Файлов браузър +Name[bn]=ফাইল ম্যানেজার +Name[br]=Merour restroù +Name[bs]=Upravitelj datotekama +Name[ca]=Gestor de fitxers +Name[cs]=Správce souborů +Name[csb]=Menedżer lopków +Name[cy]=Rheolydd Ffeiliau +Name[da]=Filhåndtering +Name[de]=Dateimanager +Name[el]=Διαχειριστής αρχείων +Name[eo]=Dosieradministrilo +Name[es]=Gestor de archivos +Name[et]=Failihaldur +Name[eu]=Fitxategi kudeatzailea +Name[fa]=مدیر پرونده +Name[fi]=Tiedostonhallinta +Name[fo]=Fíluhandfarari +Name[fr]=Gestionnaire de fichiers +Name[fy]=Triembehearder +Name[ga]=Bainisteoir Comhad +Name[gl]=Xestor de Ficheiros +Name[he]=מנהל הקבצים +Name[hi]=फ़ाइल प्रबंधक +Name[hr]=Upravitelj datotekama +Name[hsb]=Datajowy manager +Name[hu]=Fájlkezelő +Name[id]=Manajer File +Name[is]=Skráastjóri +Name[it]=File manager +Name[ja]=ファイルマネージャ +Name[ka]=ფაილთა მენჯერი +Name[kk]=Файл менеджері +Name[km]=កម្មវិធី​គ្រប់គ្រង​ឯកសារ +Name[ko]=파일 관리자 +Name[lo]=ເຄື່ອງມືການຈັດການແຟ້ມ +Name[lt]=Bylų tvarkyklė +Name[lv]=Failu Menedžeris +Name[mk]=Менаџер на датотеки +Name[mn]=Файл удирдагч +Name[ms]=Pengurus Fail +Name[mt]=Manager tal-Fajls +Name[nb]=Filbehandler +Name[nds]=Dateipleger +Name[ne]=फाइल प्रबन्धक +Name[nl]=Bestandsbeheerder +Name[nn]=Filhandsamar +Name[nso]=Molaodi wa Faele +Name[oc]=Gestionari de fiquièrs +Name[pa]=ਫਾਇਲ ਮੈਨੇਜਰ +Name[pl]=Menedżer plików +Name[pt]=Gestor de Ficheiros +Name[pt_BR]=Gerenciador de Arquivos +Name[ro]=Manager de fișiere +Name[ru]=Файловый менеджер +Name[rw]= Mucungamadosiye +Name[se]=Fiilagieđahalli +Name[sk]=Správca súborov +Name[sl]=Upravitelj datotek +Name[sr]=Менаџер фајлова +Name[sr@Latn]=Menadžer fajlova +Name[ss]=Siphatsi selifayela +Name[sv]=Filhanterare +Name[ta]=கோப்பு மேலாளர் +Name[te]=దస్త్రాల అభికర్త +Name[tg]=Мудири файл +Name[th]=เครื่องมือจัดการแฟ้ม +Name[tr]=Dosya Yöneticisi +Name[tt]=Birem İdäräçe +Name[uk]=Менеджер файлів +Name[uz]=Fayl boshqaruvchisi +Name[uz@cyrillic]=Файл бошқарувчиси +Name[ven]=Mulanguli wa faela +Name[vi]=Trình quản lí tập tin +Name[wa]=Manaedjeu di fitchîs +Name[xh]=Umphathi Wefayile +Name[zh_CN]=文件管理器 +Name[zh_TW]=檔案管理程式 +Name[zu]=imenenja yamafayela +X-KDE-ModuleType=Library +X-KDE-Library=konq +X-KDE-FactoryName=browser +Type=Application +Icon=kfm +Exec=kcmshell filebrowser diff --git a/applnk/compat/kcmkxmlrpcd.desktop b/applnk/compat/kcmkxmlrpcd.desktop new file mode 100644 index 000000000..12d45d7fc --- /dev/null +++ b/applnk/compat/kcmkxmlrpcd.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Name=XML RPC Daemon +Name[af]=XML RPC Bediener +Name[ar]=مراقب XML RPC +Name[az]=XML RPC Demonu +Name[be]=Дэман XML RPC +Name[bn]=এক্স-এম-এল আর-পি-সি ডিমন +Name[br]=Diaoul XML RPC +Name[bs]=XML RPC demon +Name[ca]=Dimoni RPC XML +Name[cs]=KDE XML RPC démon +Name[csb]=Ùsłëżnota XML RPC +Name[cy]=Ellyll RPC XML +Name[da]=XML RPC-Dæmon +Name[de]=XML-RPC-Dienst +Name[el]=XML RPC δαίμονας +Name[eo]=XML-RPC-demono +Name[es]=Demonio XML RPC +Name[et]=XML RPC deemon +Name[eu]=XML RPC daemon-a +Name[fa]=شبح XML RPC +Name[fi]=XML RPC-palvelin +Name[fr]=Démon XML RPC +Name[ga]=Deamhan RPC XML +Name[gl]=Demo XML RPC +Name[he]=תהליך רקע XML RPC +Name[hi]=एक्सएमएल आरपीसी डीमॉन +Name[hr]=XML RPC demon +Name[hu]=XML RPC szolgáltatás +Name[id]=Daemon KDE XML RPC +Name[is]=XML RPC þjónn +Name[it]=Demone XML RPC +Name[ja]=XML RPC デーモン +Name[ka]=XML RPC–ის გუშაგი +Name[kk]=XML RPC қызметі +Name[ko]=XML RPC 데몬 +Name[lo]=เซิร์ฟเวอร์ XML RPC +Name[lt]=XML RPC tarnyba +Name[lv]=XML RPC Dēmons +Name[mk]=XML RPC даемон +Name[mn]=XML-RPC-Хэвтүүл +Name[ms]=Daemon XML RPC +Name[mt]=Daemon XML RPC +Name[nb]=XML RPC-nisse +Name[nds]=Dämoon för XML-RPC +Name[ne]=XML RPC डेइमन +Name[nn]=XML RPC-nisse +Name[pa]=XML RPC ਡਾਇਮੋਨ +Name[pl]=Usługa XML RPC +Name[pt]=Servidor de XML RPC +Name[pt_BR]=Serviço RPC XML +Name[ro]=Demon RPC XML +Name[ru]=Служба XML RPC +Name[rw]=Dayimoni XML RPC +Name[se]=XML RPC-duogášprográmma +Name[sk]=XML RPC démon +Name[sl]=Demon XML RPC +Name[sr]=XML RPC Демон +Name[sr@Latn]=XML RPC Demon +Name[sv]=XML RPC-demon +Name[ta]=XML RPC டெமொன் +Name[te]=ఎక్స్ ఎం ఎల్ ఆర్ పి సి డేమన్ +Name[tg]=Даймони XML RPC +Name[th]=แดมอน XML RPC +Name[tr]=XML RPC programı +Name[tt]=XML RPC Xezmäte +Name[uk]=Демон XML RPC +Name[uz]=XML RPC xizmati +Name[uz@cyrillic]=XML RPC хизмати +Name[vi]=Trình nền XML RPC +Name[wa]=Demon XML RPC +Name[zh_CN]=XML RPC 守护程序 +Name[zh_TW]=XML RPC 伺服程式 +Name[zu]=KDE XML RPC Daemon +X-KDE-ModuleType=Library +X-KDE-Library=kded +X-KDE-Factoryname=kded +Exec=kcmshell kcmkded +Icon=kded +Type=Application diff --git a/applnk/compat/konqhtml.desktop b/applnk/compat/konqhtml.desktop new file mode 100644 index 000000000..b893d3118 --- /dev/null +++ b/applnk/compat/konqhtml.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Name=Konqueror Browser +Name[af]=Konqueror Web Blaaier +Name[ar]=متصفح Konqueror +Name[az]=Konqueror Səyyahı +Name[be]=Вандроўнік Konqueror +Name[bg]=Браузър Konqueror +Name[bn]=কংকারার ব্রাউজার +Name[br]=Furcher Konqueror +Name[bs]=Konqueror web preglednik +Name[ca]=Fullejador Konqueror +Name[cs]=Prohlížeč Konqueror +Name[csb]=Przezérnik Konqueror +Name[cy]=Porydd Gwe Konqueror +Name[da]=Konqueror browser +Name[de]=Webbrowser Konqueror +Name[el]=Περιηγητής Konqueror +Name[eo]=Konkeranto +Name[es]=Navegador Konqueror +Name[et]=Veebilehitseja Konqueror +Name[eu]=Konqueror akatzailea +Name[fa]=مرورگر Konqueror +Name[fi]=Konqueror +Name[fr]=Navigateur Konqueror +Name[fy]=Konqueror blêder +Name[ga]=Brabhsálaí Konqueror +Name[gl]=Navegador Konqueror +Name[he]=דפדפן Konqueror +Name[hi]=कॉन्करर ब्राउज़र +Name[hr]=Konqueror preglednik +Name[hu]=Konqueror webböngésző +Name[id]=Browser Konqueror +Name[is]=Konqueror vafrari +Name[it]=Browser Konqueror +Name[ja]=Konqueror ブラウザ +Name[ka]=Konqueror +Name[kk]=Konqueror +Name[km]=កម្មវិធី​រុករក Konqueror +Name[ko]=Konqueror 탐색기 +Name[lt]=Konqueror naršyklė +Name[lv]=Iekarotāja Pārlūks +Name[mk]=Прелистувачот Konqueror +Name[mn]=Конкюрор веб-хөтөч +Name[ms]=Pelayar Konqueror +Name[mt]=Browser Konqueror +Name[nb]=Nettleseren Konqueror +Name[nds]=Nettkieker Konqueror +Name[ne]=कन्क्वेरर ब्राउजर +Name[nl]=Konquerorbrowser +Name[nn]=Nettlesaren Konqueror +Name[oc]=Navigador Konqueror +Name[pa]=ਕੋਨਕਿਉਰਰ ਝਲਕਾਰਾ +Name[pl]=Przeglądarka Konqueror +Name[pt]=Navegador Konqueror +Name[pt_BR]=Navegador Konqueror +Name[ro]=Navigator Konqueror +Name[ru]=Konqueror +Name[rw]=Mucukumbuzi Konqueror +Name[se]=Fierpmádatlogan Konqueror +Name[sk]=Web priehliadač Konqueror +Name[sl]=Brskalnik Konqueror +Name[sr]=Прегледач Konqueror +Name[sr@Latn]=Pregledač Konqueror +Name[sv]=Webbläsaren Konqueror +Name[ta]=கான்கொரர் வலை உலாவி +Name[te]=కాంకెరర్ బ్రౌజర్ +Name[tg]=Намоишгари Интернет +Name[th]=เบราว์เซอร์ Konqueror +Name[tr]=Konqueror Tarayıcısı +Name[uk]=Навігатор Konqueror +Name[uz]=Konqueror brauzeri +Name[uz@cyrillic]=Konqueror браузери +Name[ven]=Buronza ya Konqueror +Name[vi]=Trình duyệt Konqueror +Name[wa]=Betchteu Konqueror +Name[zh_CN]=Konqueror 浏览器 +Name[zh_TW]=Konqueror 網頁瀏覽器 +Type=Application +Icon=fonts +Exec=kcmshell khtml_fonts +X-KDE-ModuleType=Library +X-KDE-Library=konqhtml +X-KDE-FactoryName=khtml_fonts diff --git a/applnk/compat/passwords.desktop b/applnk/compat/passwords.desktop new file mode 100644 index 000000000..e7b016d6b --- /dev/null +++ b/applnk/compat/passwords.desktop @@ -0,0 +1,246 @@ +[Desktop Entry] +Type=Application +Exec=kcmshell kcm_useraccount +Icon=password +DocPath=kcontrol/passwords/index.html +NoDisplay=true +X-KDE-ModuleType=Library +X-KDE-Library=useraccount +X-KDE-ParentApp=kcontrol + +Name=Passwords +Name[af]=Wagwoorde +Name[ar]=كلمات المرور +Name[az]=Şifrələr +Name[be]=Паролі +Name[bg]=Парола +Name[bn]=পাসওয়ার্ড +Name[br]=Tremengerioù +Name[bs]=Šifre +Name[ca]=Contrasenyes +Name[cs]=Hesla +Name[csb]=Parole +Name[cy]=Cyfrineiriau +Name[da]=Kodeord +Name[de]=Passwörter +Name[el]=Κωδικοί πρόσβασης +Name[eo]=Pasvortoj +Name[es]=Contraseñas +Name[et]=Paroolid +Name[eu]=Pasahitzak +Name[fa]=اسم رمزها +Name[fi]=Salasanat +Name[fr]=Mots de passe +Name[fy]=Wachtwurden +Name[ga]=Focail Fhaire +Name[gl]=Contrasinais +Name[he]=ססמאות +Name[hi]=पासवर्ड +Name[hr]=Lozinke +Name[hsb]=Hesła +Name[hu]=Kdesu-jelszókezelés +Name[id]=Katakunci +Name[is]=Lykilorð +Name[it]=Password +Name[ja]=パスワード +Name[ka]=პაროლები +Name[kk]=Парольдер +Name[km]=ពាក្យ​សម្ងាត់ +Name[ko]=비밀번호 +Name[lo]=ລະຫັດຜ່ານ +Name[lt]=Slaptažodžiai +Name[lv]=Paroles +Name[mk]=Лозинки +Name[mn]=Нууц үгс +Name[ms]=Kata laluan +Name[nb]=Passord +Name[nds]=Passwöör +Name[ne]=पासवर्ड +Name[nl]=Wachtwoorden +Name[nn]=Passord +Name[nso]=Mantsuphetiso +Name[oc]=Contrasenyes +Name[pa]=ਗੁਪਤ-ਕੋਡ +Name[pl]=Hasła +Name[pt]=Senhas +Name[pt_BR]=Senhas +Name[ro]=Parole +Name[ru]=Пароли +Name[rw]=Amagambobanga +Name[se]=Beassansánit +Name[sk]=Heslá +Name[sl]=Gesla +Name[sr]=Лозинке +Name[sr@Latn]=Lozinke +Name[ss]=Emabitomfihlo +Name[sv]=Lösenord +Name[ta]=கடவுச்சொற்கள் +Name[te]=పాస్ వర్డులు +Name[tg]=Гузарвожаҳо +Name[th]=รหัสผ่าน +Name[tr]=Parolalar +Name[tt]=Sersüzlär +Name[uk]=Паролі +Name[uz]=Maxfiy soʻzlar +Name[uz@cyrillic]=Махфий сўзлар +Name[ven]=Phasiwede +Name[vi]=Mật khẩu +Name[wa]=Sicrets +Name[xh]=Amagama okugqitha +Name[zh_CN]=密码 +Name[zh_TW]=密碼 +Name[zu]=Amagama-okudlula + +Comment=Configure password settings +Comment[af]=Konfigureer wagwoord instellings +Comment[ar]=إعدادات تعيين كلمات المرور +Comment[az]=Şifrə qurğuları +Comment[be]=Настаўленні пароляў +Comment[bg]=Настройване на паролата +Comment[bn]=পাসওয়ার্ড সেটিংস কনফিগার করুন +Comment[br]=Kefluniañ dibarzhoù an tremengerioù +Comment[bs]=Podesite opcije šifre +Comment[ca]=Arranjaments de la contrasenya +Comment[cs]=Nastavení hesel +Comment[csb]=Ùstôw parolów +Comment[cy]=Ffurfweddu gosodiadau cyfrineiriau +Comment[da]=Kodeordsindstillinger +Comment[de]=Passwort-Einstellungen vornehmen +Comment[el]=Ρυθμίσεις για τους κωδικούς πρόσβασης +Comment[eo]=Agordo de pasvortoj +Comment[es]=Configurar las opciones de las contraseñas +Comment[et]=Parooli seadistused +Comment[eu]=Konfiguratu pasahitzen ezarpenak +Comment[fa]=پیکربندی تنظیمات اسم رمز +Comment[fi]=Salasanojen asetukset +Comment[fr]=Configurer les réglages des mots de passe +Comment[fy]=Hjirre kinne jo de wachtwurd ynstellings ynstelle +Comment[ga]=Cumraigh socruithe focail faire +Comment[gl]=Configuración das opcións dos contrasinais +Comment[he]=שינוי הגדרות הססמאות +Comment[hi]=कॉन्फ़िगर पासवर्ड विन्यास +Comment[hr]=Konfigurirajte postavke lozinki +Comment[hsb]=Nastajenja hesłow připrawić +Comment[hu]=A jelszókezelés beállításai +Comment[id]=Konfigurasi pengaturan katasandi +Comment[is]=Stillingar lykilorða +Comment[it]=Impostazioni delle password +Comment[ja]=パスワードの設定 +Comment[ka]=პაროლების კონფიგურაცია +Comment[kk]=Парольдерді орнату +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​កំណត់​ពាក្យ​សម្ងាត់ +Comment[ko]=비밀번호 설정 변경 +Comment[lo]=ຕັ້ງຄ່າລະຫັດຜ່ານ +Comment[lt]=Konfigūruoti slaptažodžių parinktis +Comment[lv]=Konfigurēt paroļu parametrus +Comment[mk]=Конфигурирајте ги поставувањата за лозинките +Comment[mn]=Нууц үгийн тохируулга хийх +Comment[ms]=Konfigurasikan tetapan kata laluan +Comment[mt]=Konfigurazzjoni tal-password +Comment[nb]=Passordinnstillinger +Comment[nds]=Passwoortinstellen fastleggen +Comment[ne]=पासवर्ड सेटिङ कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de wachtwoordinstellingen instellen +Comment[nn]=Passordinnstillingar +Comment[nso]=Beakanya dipeakanyo tsa mantsuphetiso +Comment[pa]=ਆਪਣੇ ਗੁਪਤ-ਕੋਡ ਸੈਟਿੰਗ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Ustawienia haseł +Comment[pt]=Configurar as opções das senhas +Comment[pt_BR]=Configura definições para as senhas +Comment[ro]=Configurează setările pentru parolă +Comment[ru]=Настройка паролей +Comment[rw]=Kuboneza amagenamiterere Ijambobanga +Comment[se]=Beassansátneheivehusat +Comment[sk]=Nastavenia hesiel +Comment[sl]=Nastavitve gesel +Comment[sr]=Подешавање поставки везаних за лозинке +Comment[sr@Latn]=Podešavanje postavki vezanih za lozinke +Comment[sv]=Anpassa lösenordsinställningar +Comment[ta]=கடவுச்சொல் அமைப்புகளை அமை +Comment[te]=పాస్ వర్డ్ అమరికను మార్చు +Comment[tg]=Танзимоти гузарвожаҳо +Comment[th]=ตั้งค่ารหัสผ่าน +Comment[tr]=Parola ayarlarını yapar +Comment[tt]=Sersüzlär caylaw +Comment[uk]=Налаштування параметрів пароля +Comment[uz]=Maxfiy soʻz moslamalarini moslash +Comment[uz@cyrillic]=Махфий сўз мосламаларини мослаш +Comment[ven]=Dzudzanyani Mavhekanyele a phasiwede +Comment[vi]=Thiết lập mật khẩu +Comment[wa]=Apontiaedjes po les screts +Comment[xh]=Qwalasela izicwangciso zegama lokugqitha +Comment[zh_CN]=配置密码设置 +Comment[zh_TW]=設定密碼 +Comment[zu]=Hlanganisela izilungiselelo zamagama-okudlula + +Keywords=Passwords,kdesu,Echo characters,Remember passwords,Timeout +Keywords[ar]=كلمات المرور ، kdesu ، رموز الصدى ، تذكّر كلمات المرور ، الفترات الزمنية +Keywords[az]=Şifrələr,kdesu,Əks etmə Xarakterləri,şifrələri yadda saxla,vaxt dolması +Keywords[be]=Паролі,Запамінанне пароляў,Тэрмін чакання,Passwords,kdesu,Echo characters,Remember passwords,Timeout +Keywords[bg]=парола, потребителска, знаци, Passwords, kdesu, Echo characters, Remember passwords, Timeout +Keywords[ca]=Contrasenyes,kdesu,Caràcters amb eco,Recordar contrasenyes,Temps d'expiració +Keywords[cs]=Heslo,kdesu,Zapamatování hesla,Prodleva +Keywords[csb]=Parole,kdesu,pòwtôrzanié znaków,pòmión znaków,pamiãtanié parolów,limit czasu +Keywords[cy]=Cyfrineiriau,kdesu,Nodau atsain,Cofio cyfrineiriau,Goramser +Keywords[da]=Kodeord,kdesu,Ekko-tegn,Husk kodeord,Timeout,Udløb +Keywords[de]=Passwörter,Kdesu,Timeout,Zeitlimit +Keywords[el]=Κωδικοί πρόσβασης,kdesu,Εμφάνιση χαρακτήρων,διατήρηση στη μνήμη κωδικών πρόσβασης,Χρονικό όριο +Keywords[eo]=pasvorto,kdesu,eĥosigno,memoru pasvorton,tempolimo +Keywords[es]=Contraseñas,kdesu,Caracteres con eco,Recordar contraseñas,Tiempo de expiración +Keywords[et]=paroolid,kdesu,tagasiside,paroolide meeldejätmine,taimaut,aegumine +Keywords[eu]=Pasahitzak,kdesu,Echo karaktereak,Gogoratu pasahitzak,Denbora-muga +Keywords[fa]=اسم رمز‌ها، kdesu، پژواک نویسه‌ها، یادآوری اسم رمزها، اتمام وقت +Keywords[fi]=Salasanat,kdesu,Kaiutettavat merkit,Muista salasanat,Aikavalvonta +Keywords[fr]=mot de passe,mots de passe,kdesu,caractères d'affichage,mémoriser les mots de passe,mémorisation des mots de passe,enregistrement des mots de passe,enregistrer les mots de passe,délai,sécurité +Keywords[fy]=wachtwurden,kdesu,wachtwurden ûnthâlden,timeout,tiidslimyt,asterisken +Keywords[ga]=Focail fhaire,kdesu,Carachtair macalla,Meabhraigh focail fhaire,Teorainn ama +Keywords[gl]=Contrasinais,kdesu,carácteres eco,Lembrar contrasinais,Tempo de espera +Keywords[he]=הצגת תווים,שמירת ססמאות,זמן מוקצב,kdesu,ססמאות, Passwords,kdesu,Echo characters,Remember passwords,Timeout +Keywords[hi]=पासवर्ड,केडीईएसयू,अक्षरों को ऐसे दिखाएँ,पासवर्ड याद रखें,समय बीता +Keywords[hr]=Passwords,kdesu,Echo characters,Remember passwords,Timeout, šifre,zapamti šifre, prekoračenje vremena +Keywords[hsb]=Passwords,kdesu,Echo characters,Remember passwords,Timeout, maksimalny čas, spomjatkować, hesło +Keywords[hu]=jelszavak,kdesu,karakterkijelzés,jelszómentés,időtúllépés +Keywords[is]=Lykilorð,kdesu,muna lykilorð,útrunninn,tími +Keywords[it]=Password,kdesu,caratteri password,ricorda password,tempo massimo +Keywords[ja]=パスワード,kdesu,エコー文字,パスワードを保存,タイムアウト +Keywords[ka]=პაროლები, kdesu, Echo სიმბოლოები, პაროლების დამახსოვრება, დრო ამოიწურა +Keywords[km]=ពាក្យ​សម្ងាត់,kdesu,បង្ហាញ​តួអក្សរ,ចងចាំ​ពាក្យ​សម្ងាត់,អស់​ពេល +Keywords[lo]=ລະຫັດຜ່ານ,kdesu,ສະແດງອັກສອນ, ຈື່ລະຫັດຜ່ານ,ຫມົດເວລາ +Keywords[lt]=Slaptažodžiai,kdesu,Echo simboliai,Įsiminti slaptažodžius,Galiojimo laikas +Keywords[lv]=Paroles,kdesu,Eho simboli,Atcerēties paroles,Noildze +Keywords[mk]=Passwords,kdesu,Echo characters,Remember passwords,Timeout,Лозинки,Ехо на знаци,памти лозинки,истек на време +Keywords[mn]=Нууц үгс,Kdesu,Хугацааны хязгаар,Хугацааны хязгаар +Keywords[ms]=Katalaluan,kdesu,Gema aksara,Ingat katalaluan,Masa Tamat +Keywords[nb]=Passord,kdesu,tegnekko,husk passord,tidsavbrudd +Keywords[nds]=Passwöör,kdesu,Teken wiesen,Passwöör marken,Timeout,Tietgrenz +Keywords[ne]=पासवर्ड, केडीई एस यू, इको क्यारेक्टर, पासवर्ड स्मरण, समय समाप्ति +Keywords[nl]=wachtwoorden,kdesu,wachtwoorden onthouden,timeout,tijdslimiet,asterisken +Keywords[nn]=passord,kdesu,teiknekko,hugs passord,ekko,tidsgrense +Keywords[nso]=Mantsuphetiso,kdesu,dihlaka ts a Echo,Gopola mantsuphetiso,Phelelo ya Nako +Keywords[pa]=Passwords,kdesu,Echo characters,Remember passwords,Timeout,ਗੁਪਤ-ਕੋਡ +Keywords[pl]=Hasła,kdesu,powtarzanie znaków,echo znaków,pamiętanie haseł,limit czasu +Keywords[pt]=Senhas,kdesu,caracteres de eco,lembrar a senha,tempo limite +Keywords[pt_BR]=senhas,kdesu,ecoar caracteres,lembrar senhas,tempo limite, timeout +Keywords[ro]=parole,kdesu,ecou caractere,amintește parole,limită de timp +Keywords[rw]=Amagambobanga,kdesu,Inyuguti Echo,Kwibuka amagambobanga, Igihecyarenze +Keywords[se]=beassansánit,kdesu,mearaskádja,muitte beassansániid,áigemearri +Keywords[sk]=Heslá,kdesu,zobrazované znaky,zapamätanie hesiel,Timeout +Keywords[sl]=gesla,kdesu,zapomni si gesla,zakasnitev +Keywords[sr]=Passwords,kdesu,Echo characters,Remember passwords,Timeout,лозинке, запамти лозинке,прекорачење времена +Keywords[sr@Latn]=Passwords,kdesu,Echo characters,Remember passwords,Timeout,lozinke, zapamti lozinke,prekoračenje vremena +Keywords[sv]=Lösenord,kdesu,Eka tecken,Kom ihåg lösenord,Tidsgräns +Keywords[ta]=கடவுச்சொற்கள்,kdesu,எதிரொலிக்கும் எழுத்துகள்,கடவுச்சொற்களை நினைவில் கொள்,நேரமுடிவு +Keywords[te]=పాస్ వర్డులు, కెడిఈఎస్ యూ, చూపించే అక్షరాలు, పాస్ వర్డులు గుర్తుపెట్టుకో, సమయం అయిపోయింది +Keywords[th]=รหัสผ่าน,kdesu,แสดงอักขระ,จำรหัสผ่าน,หมดเวลา +Keywords[tr]=Paralolar,kdesu,Yankı karakterleri,paraloları hatırla,zaman aşımı +Keywords[uk]=паролі,kdesu,символ луни,запам'ятати паролі,тайм-аут +Keywords[uz]=Maxfiy soʻzlar,kdesu,Echo characters,Maxfiy soʻzlarni eslab qolish,Taymaut +Keywords[uz@cyrillic]=Махфий сўзлар,kdesu,Echo characters,Махфий сўзларни эслаб қолиш,Таймаут +Keywords[ven]=Phasiwede,kdesu,vhaanewa vha Echo,Humbula phasiwede,U fhela ha tshifhinga +Keywords[vi]=Mật khẩu,kdesu,Ký tự vọng,Nhớ mật khẩu,Giới hạn thời gian +Keywords[wa]=Sicrets, mots di passe,kdesu,caracteres echo,si sovni des screts, si sovni des mots d' passe,Timeout +Keywords[xh]=Amagama okugqitha,kdesu,iimpawu zesandi somkhwazo,Khumbula amagama okugqitha,Ixesha lokuphuma +Keywords[zh_CN]=Passwords,kdesu,Echo characters,Remember passwords,Timeout,密码,超时,密码,回显字符,记住密码 +Keywords[zh_TW]=Passwords,kdesu,Echo characters,Remember passwords,Timeout,密碼,回應字元,記住密碼,作業逾時 +Keywords[zu]=Amagama-okudlula,kdesu,Izimpawu zomsindo wokumemeza,Khumbula amagama-okudlula,Isikhathi sokuphuma + diff --git a/applnk/compat/power.desktop b/applnk/compat/power.desktop new file mode 100644 index 000000000..e9b2bb4f2 --- /dev/null +++ b/applnk/compat/power.desktop @@ -0,0 +1,75 @@ +[Desktop Entry] +Name=Laptop +Name[af]=Draagbare rekenaar +Name[ar]=الحاسوب النقّال +Name[az]=Dizüstü Kompüter +Name[be]=Ноўтбук +Name[bg]=Лаптоп +Name[bn]=ল্যাপটপ +Name[br]=Hezoug +Name[ca]=Portàtil +Name[cs]=Notebook +Name[cy]=Gluniadur +Name[da]=Bærbar +Name[el]=Φορητό +Name[eo]=Tekokomputilo +Name[es]=Portátil +Name[eu]=Ordenagailu eramangarria +Name[fa]=رایانۀ کیفی +Name[fi]=Kannettava +Name[fr]=Ordinateur portable +Name[fy]=Skoatkompjûter +Name[ga]=Ríomhaire Glúine +Name[gl]=Portátil +Name[he]=מחשב נייד +Name[hi]=लैपटॉप +Name[hsb]=laptop +Name[hu]=Noteszgép +Name[is]=Ferðavél +Name[it]=Portatile +Name[ja]=ラップトップ +Name[ka]=ლეპტოპი +Name[kk]=Ноутбук +Name[km]=កុំព្យូទ័រ​យួរ​ដៃ +Name[ko]=랩탑 +Name[lo]=ແລບທອບ +Name[lt]=Nešiojamas kompiuteris +Name[lv]=Laptops +Name[mk]=Лаптоп +Name[mn]=Лаптоп +Name[ms]=Komputer riba +Name[nb]=Bærbar +Name[nds]=Klappreekner +Name[ne]=ल्यापटप +Name[nn]=Berbar +Name[oc]=Portatil +Name[pa]=ਲੈਪਟਾਪ +Name[pt]=Portátil +Name[ru]=Ноутбук +Name[rw]=Mudasobwa Igendanwa +Name[se]=Mátkedihtor +Name[sl]=Prenosnik +Name[sr]=Лаптоп +Name[sv]=Bärbar dator +Name[ta]=மடிக்கணினி +Name[te]=లాప్ టాప్ +Name[tg]=Ноутбук +Name[th]=แลปทอป +Name[tr]=Dizüstü +Name[tt]=Qulsanaq +Name[uk]=Мобільний комп'ютер (лептоп) +Name[uz@cyrillic]=Лаптоп +Name[ven]=Khomupwutha pfarwa +Name[vi]=Máy xách tay +Name[wa]=Poirtåve +Name[xh]=Umphezulu osongiweyo +Name[zh_CN]=笔记本电脑 +Name[zh_TW]=筆記型電腦 +Name[zu]=Ikhomputha ephathwayo eyisicaba +X-KDE-ModuleType=Library +X-KDE-Library=laptop +X-KDE-FactoryName=power +Exec=kcmshell laptop +NoDisplay=true +Icon=laptop_battery +Type=Application diff --git a/applnk/compat/socks.desktop b/applnk/compat/socks.desktop new file mode 100644 index 000000000..04de99f48 --- /dev/null +++ b/applnk/compat/socks.desktop @@ -0,0 +1,23 @@ +[Desktop Entry] +Name=Socks +Name[af]=Socks' +Name[bn]=সকস (Socks) +Name[da]=Sokler +Name[et]=Pesad +Name[eu]=Sock-ak +Name[hi]=सॉक्स +Name[hr]=Priključci +Name[hu]=SOCKS +Name[km]=រន្ធ +Name[mn]=Нүхнүүд +Name[ne]=सक्स +Name[pa]=ਸਾਕਸ +Name[rw]=Sokisi +Name[ta]=துளைகள் +Name[te]=సాక్స్ +Type=Application +Icon=proxy +Exec=kcmshell proxy +X-KDE-ModuleType=Library +X-KDE-Library=kio +X-KDE-FactoryName=proxy diff --git a/applnk/compat/userinfo.desktop b/applnk/compat/userinfo.desktop new file mode 100644 index 000000000..79d1df1f2 --- /dev/null +++ b/applnk/compat/userinfo.desktop @@ -0,0 +1,227 @@ +[Desktop Entry] +Type=Application +Exec=kcmshell kcm_useraccount +Icon=kdmconfig +DocPath=kcontrol/userinfo/index.html + +X-KDE-ModuleType=Library +X-KDE-Library=useraccount +X-KDE-FactoryName=userinfo +X-KDE-HasReadOnlyMode=false +X-KDE-ParentApp=kcontrol + +Name=User Account +Name[af]=Gebruiker Rekening +Name[ar]=حساب المستخدم +Name[az]=İstifadəçi Hesabı +Name[be]=Уліковы запіс +Name[bg]=Потребител +Name[bn]=ব্যবহারকারী অ্যাকাউন্ট +Name[br]=Kont an arveriad +Name[bs]=Korisnički račun +Name[ca]=Compte d'usuari +Name[cs]=Uživatelský účet +Name[csb]=Kònto brëkòwnika +Name[cy]=Cyfrif Defnyddiwr +Name[da]=Brugerkonto +Name[de]=Benutzerzugang +Name[el]=Λογαριασμός χρήστη +Name[eo]=Uzantkonto +Name[es]=Cuenta de usuario +Name[et]=Kasutajakonto +Name[eu]=Erabiltzaile kontua +Name[fa]=حساب کاربر +Name[fi]=Käyttäjätili +Name[fr]=Compte de l'utilisateur +Name[fy]=Brûkers akkount +Name[ga]=Cuntas Úsáideora +Name[gl]=Conta de Usuario +Name[he]=חשבון משתמש +Name[hi]=उपयोक्ता खाता +Name[hr]=Korisnički nalog +Name[hsb]=Konto wužiwarja +Name[hu]=Felhasználóazonosító +Name[id]=Akun Pengguna +Name[is]=Notandaaðgangur +Name[it]=Account utente +Name[ja]=ユーザアカウント +Name[ka]=მომხმარებლის ანგარიში +Name[kk]=Тіркелгі +Name[km]=គណនី​អ្នក​ប្រើ +Name[ko]=사용자 계정 +Name[lt]=Naudotojo paskyra +Name[lv]=Lietotāja konts +Name[mk]=Корисничка сметка +Name[ms]=Akaun Pengguna +Name[mt]=Kont tal-User +Name[nb]=Brukerkonto +Name[nds]=Brukerkonto +Name[ne]=प्रयोगकर्ता खाता +Name[nl]=Gebruikeraccount +Name[nn]=Brukarkonto +Name[pa]=ਉਪਭੋਗੀ ਖਾਤਾ +Name[pl]=Konto użytkownika +Name[pt]=Conta do Utilizador +Name[pt_BR]=Conta do Usuário +Name[ro]=Cont utilizator +Name[ru]=Учётная запись +Name[rw]=Konti y'Ukoresha +Name[se]=Geavaheaddjekontu +Name[sk]=Používateľský účet +Name[sl]=Uporabniški račun +Name[sr]=Кориснички налог +Name[sr@Latn]=Korisnički nalog +Name[sv]=Användarkonto +Name[ta]=பயனர் கணக்கு +Name[te]=యూజర్ ఖాతా +Name[tg]=Истифодабарандагон +Name[th]=บัญชีผู้ใช้ +Name[tr]=Kullanıcı Hesabı +Name[tt]=Qullanuçı Xísabı +Name[uk]=Рахунок користувача +Name[uz]=Foydalanuvchining hisobi +Name[uz@cyrillic]=Фойдаланувчининг ҳисоби +Name[vi]=Tài khoản Người dùng +Name[wa]=Conte uzeu +Name[zh_CN]=用户账户 +Name[zh_TW]=使用者帳號 +Comment=Change your account information +Comment[af]=Verander jou rekening informasie +Comment[ar]=غيير معلومات حسابك كمستخدم +Comment[az]=İstifadəçi mə'lumatınızı dəyişdirin +Comment[be]=Змяніць інфармацыю аб вашым уліковым запісе +Comment[bg]=Настройване на вашата сметка +Comment[bn]=আপনার অ্যাকাউন্ট সংক্রান্ত তথ্য পাল্টান +Comment[br]=Kemmañ titouroù diwar-benn ho gont +Comment[bs]=Izmijenite informacije o vašem računu +Comment[ca]=Canvia la informació del vostre compte +Comment[cs]=Změna informací o uživatelském účtu +Comment[csb]=Zmieni ùstôw swòjegò kònta +Comment[cy]=Newid Gwybodaeth eich Cyfrif +Comment[da]=Ændr din konto-information +Comment[de]=Info für Ihren Benutzerzugang ändern +Comment[el]=Αλλάξτε τις πληροφορίες του λογαριασμού σας +Comment[eo]=Ŝanĝu viajn kontajn informojn +Comment[es]=Cambiar la información de su cuenta +Comment[et]=Oma kontoinfo muutmine +Comment[eu]=Alda ezazu zure kontuaren informazioa +Comment[fa]=اطلاعات حساب خود را تغییر دهید +Comment[fi]=Käyttäjätiedot +Comment[fr]=Modifier les informations de votre compte +Comment[fy]=Feroarje jo akkountynformaasje +Comment[ga]=Athraigh sonruithe do chuntais +Comment[gl]=Cambiar a información da sua conta +Comment[he]=שנה את המידע של החשבון משתמש שלך +Comment[hi]=अपना खाता जानकारी बदलें +Comment[hr]=Promijenite podatke vašeg naloga +Comment[hsb]=Informaciju wo wužiwarskim konće změnić +Comment[hu]=A felhasználóazonosító jellemzőinek megváltoztatása +Comment[id]=Ubah informasi akun Anda +Comment[is]=Breyta stillingum notandaaðgangs þíns +Comment[it]=Modifica le informazioni del tuo account +Comment[ja]=アカウント情報を変更 +Comment[ka]=თქვენი ანგარიშის ინფორმაციის შეცვლა +Comment[kk]=Тіркелгіңізді өзгерту +Comment[km]=ផ្លាស់ប្តូរព័ត៌មាន​គណនី​របស់​អ្នក +Comment[ko]=계정 정보 바꾸기 +Comment[lt]=Pakeiskite savo paskyros informaciją +Comment[lv]=Mainīt Jūsu konta informāciju +Comment[mk]=Сменете ја информацијата за вашата сметка +Comment[ms]=Ubah maklumat akaun anda +Comment[mt]=Ibdel l-informazzjoni tal-kont tiegħek +Comment[nb]=Endre opplysninger om konto +Comment[nds]=De Konto-Informatschonen ännern +Comment[ne]=तपाईँको खाता सूचना परिवर्तन गर्नुहोस् +Comment[nl]=Wijzig uw accountinformatie +Comment[nn]=Endra opplysningar om konto +Comment[pa]=ਆਪਣੇ ਖਾਤੇ ਦੀ ਜਾਣਕਾਰੀ ਤਬਦੀਲ ਕਰੋ +Comment[pl]=Zmień ustawienia swojego konta +Comment[pt]=Mudar as informações da sua conta +Comment[pt_BR]=Modifica as informações sobre sua conta +Comment[ro]=Modificați informațiile contului dumneavoastră +Comment[ru]=Изменить вашу учётную запись +Comment[rw]=Hindura ibirebana na konti yawe +Comment[se]=Rievdat kontodieđuid +Comment[sk]=Nastavenie informácií o vašom účte +Comment[sl]=Spremenite podatke o vašem računu +Comment[sr]=Измена података о вашем налогу +Comment[sr@Latn]=Izmena podataka o vašem nalogu +Comment[sv]=Ändra din kontoinformation +Comment[ta]=உங்கள் கணக்கு தகவலை மாற்று +Comment[te]=మీ ఖాతా సమాచారాన్ని మార్చండి +Comment[tg]=Тағйири маълумоти худ +Comment[th]=เปลี่ยนข้อมูลบัญชีผู้ใช้ของคุณ +Comment[tr]=Hesabınızla ilgili bilgileri değiştirin +Comment[tt]=Xisap eçtälegen üzgärtü +Comment[uk]=Зміна інформації про ваш рахунок +Comment[uz]=Hisobingiz haqida maʼlumotni oʻzgartirish +Comment[uz@cyrillic]=Ҳисобингиз ҳақида маълумотни ўзгартириш +Comment[vi]=Thay đổi thông tin tài khoản +Comment[wa]=Candjî l' informåcion do conte uzeu da vosse +Comment[zh_CN]=更改您的账户信息 +Comment[zh_TW]=更改帳號資訊 +Keywords=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account +Keywords[ar]=كلمات المرور,كلمة المرور,غيير كلمة المرور,أيقونة,وجه,kdm,إسم المستخدم,الإسم,الحساب +Keywords[az]=şifrələr,şifrə,dəyişdir,dəyişdirmək,timsal,şəkil,sifət,kdm,istifadəçi,ad,hesab +Keywords[be]=Паролі,Пароль,Змена паролю,Значка,твар,Імя карыстальніка,Уліковы рахунак,Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account +Keywords[bg]=парола, сметка, промяна на парола, име, потребител, Passwords, Password, Change Password, Icon, face, kdm, User Name, Name, Account +Keywords[bs]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,Šifre,Šifra,Promijenite šifru,Ikona,lice,Korisničko ime,Ime,login,Račun +Keywords[ca]=Contrasenyes,Contrasenya,Canvia contrasenya,Icona,aspecte,kdm,Nom d'usuari,Nom,Compte +Keywords[cs]=hesla,heslo,změnit heslo,ikona,obličej,kdm,jméno, uživatelské jméno,účet +Keywords[csb]=parola,parole,zmieni parolã,ikòna,kdm,brëkòwnik,miono,nôzwëskò,kònto +Keywords[cy]=Cyfrinair,Cyfrineiriau,Newid Cyfrinair,Eicon,wyneb,kdm,Defnydd-enw, Enw Defnyddiwr,Enw,Cyfrif +Keywords[da]=Kodeord,Adgangskode,Ændr kodeord,Ikon,ansigt,kdm,Brugernavn,Navn,Konto +Keywords[de]=Passwörter,Passwort,Passwort ändern,Symbol,Schriftart,kdm,User,Benutzername,Name,Account,Zugang,Konto +Keywords[el]=Κωδικοί πρόσβασης,Κωδικός πρόσβασης,Αλλαγή κωδικού πρόσβασης,Εικονίδιο,πρόσωπο,kdm,Όνομα χρήστη,Όνομα,Λογαριασμός +Keywords[eo]=Pasvortoj,Pasvorto,Ŝanĝu la pasvorton,Piktogramo,vizaĝo,kdm,Uzantnomo,Nomo,Konto +Keywords[es]=Contraseñas,Contraseña,Cambiar contraseña,Icono,cara,kdm,Nombre de usuario,Nombre,Cuenta +Keywords[et]=Paroolid,Parool,Parooli muutmine,Ikoon,nägu,kdm,Kasutajanimi,Nimi,Konto +Keywords[eu]=Pasahitzak,Pasahitza,Aldatu pasahitza,Ikonoa,aurpegia,kdm,Erabiltzaile izena,Izena,Kontua +Keywords[fa]=اسم رمزها، اسم رمز، تغییر اسم رمز، شمایل، سطح، kdm ، نام کاربر، نام، حساب +Keywords[fi]=salasanat,salasana,muuta salasanaa,vaihda salasana,kuvake,kasvot,käyttäjän nimi,käyttäjätili,käyttäjätunnus +Keywords[fr]=mots de passe,mot de passe,changer le mot de passe,modifier le mot de passe,icône,visage,kdm,nom d'utilisateur,nom,compte +Keywords[fy]=Wachtwurden,Wachtwurd,Wachtwurd feroarje,ikoan,face,kdm,Brûkersnamme,Namme,Akkount +Keywords[ga]=Focail Fhaire,Focal Faire,Athraigh focal faire,Deilbhín,aghaidh, kdm,Ainm Úsáideora,Ainm +Keywords[gl]=Contrasinais,Contrasinal,Trocar contrasinal,icona,aspeito,kdm,Nome de Usuario,Nome,Conta +Keywords[he]=ססמאות, ססמה, שנה ססמה, סמל, פרצות, KDM,שם משתמש, שם,חשבון,Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account +Keywords[hi]=पासवर्ड,पासवर्ड्स,पासवर्ड बदलें,प्रतीक,चेहरा,केडीएम,उपयोक्ता नाम,नाम,खाता +Keywords[hr]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,Lozinke,Lozinka,Promjena lozinke,Ikona,lice,Korisničko ime,Naziv,Ime,Nalog +Keywords[is]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,lykilorð,Breyta lykilorði,andlit,mynd,nafn +Keywords[it]=Password,CambiaPassword,Icona,faccia,kdm,Utente,Nome utente,Nome,Account +Keywords[ja]=パスワード,パスワード変更,アイコン,顔,kdm,ユーザ名,名前,アカウント +Keywords[ka]=პაროლები, პაროლი, პაროლის შეცვლა, ხატულა, სახე, kdm, მომხმარებლის სახელი, სახელი,ანგარიში +Keywords[km]=ពាក្យ​សម្ងាត់,ផ្លាស់ប្ដូរ​ពាក្យ​សម្ងាត់,រូបតំណាង,មុខ,kdm,ឈ្មោះ​អ្នក​ប្រើ,ឈ្មោះ,គណនី +Keywords[ko]=암호,비밀번호,아이콘,얼굴,사용자 이름,계정,kdm +Keywords[lt]=Slaptažodžiai,Slaptažodis,pakeisti slaptažodį, ženklelis,veidas,kdm,naudotojo vardas,Vardas,Paskyra,Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account +Keywords[lv]=Paroles,Parole,Mainīt paroli,Ikona,seja,kdm,Lietotāja vārds,Vārds,Konts +Keywords[mk]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,Лозинки,Лозинка,Смени лозинка,Икона,лице,Корисничко Име,Име,Сметка +Keywords[ms]=Kata laluan, Kata laluan, Tukar kata laluan,Ikon,face,kdm,Nama Pengguna,Nama,Akaun +Keywords[mt]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,Kont,Ibdel Password,Ikona,Isem +Keywords[nb]=Passord,Passord,Endre passord,Ikon,utseende,kdm,brukernavn,navn,konto +Keywords[nds]=Passwöör,Passwoort,Passwoort ännern,Lüttbild,icon,Gesicht,kdm,User Name,Brukernaam,Naam,Konto +Keywords[ne]=पासवर्डहरू, पासवर्ड, पासवर्ड परिवर्तन, प्रतिमा, मोहडा, के डी एम, प्रयोगकर्ता नाम, नाम, खाता +Keywords[nl]=wachtwoorden,passwords,wachtwoord,password,password wijzigen,wachtwoord wijzigen,pictogram,face,kdm,gebruikersnaam,naam,account +Keywords[nn]=passord,endra passord,ikon,fjes,bilete,kdm,brukarnamn,namn,konto +Keywords[pa]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,ਖਾਤਾ,ਗੁਪਤ-ਕੋਡ,ਆਈਕਾਨ,ਉਪਭੋਗੀ ਨਾਂ,ਨਾਂ +Keywords[pl]=hasło,hasła,zmień hasło,ikona,kdm,użytkownik,imię,nazwisko,konto +Keywords[pt]=senhas,senha,mudar a senha,ícone,face,kdm,nome de utilizador,nome,conta +Keywords[pt_BR]=senhas,senhas,mudar senha,ícone,cara,kdm,nome do usuário, nome,conta +Keywords[ro]=parole,parolă,schimbă parolă,iconiță,față,kdm,nume utilizator,nume,cont +Keywords[ru]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,пользователь,пароль +Keywords[rw]=Amagambobanga,Ijambobanga,Guhindura Ijambobanga, Agashushondanga,isura,kdm,Izina ry'Ukoresha,Izina, Konti +Keywords[se]=beassanasánit,beassansátni,rievdat beassansáni,govaš,amadádju,kdm,geavaheaddjenamma,namma,kontu +Keywords[sk]=heslá,heslo,zmena hesla,ikona,obrázok,foto,kdm,používateľ,meno,účet +Keywords[sl]=gesla,geslo,spremeni geslo,ikona,obraz,kdm,uporabniško ime, ime,račun +Keywords[sr]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,Лозинке,Лозинка,Икона,лице,Име,Налог,Кориснички налог +Keywords[sr@Latn]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,Lozinke,Lozinka,Ikona,lice,Ime,Nalog,Korisnički nalog +Keywords[sv]=lösenord,ändra lösenord,ikon,bild,KDM,användarnamn,namn,konto +Keywords[ta]=கடவுச்சொற்கள்,கடவுச்சொல்,கடவுச்சொலை மாற்று,சின்னம்,முகம்,kdm,பயனர் பெயர்,பெயர்,கணக்கு +Keywords[te]=పాస్ వర్డులు, పాస్ వర్డ్, పాస్ వర్డ్ ను మార్చు, ప్రతిమ, ముఖము, కెడిఎం, యూజర్ పేరు, పేరు, ఖాతా +Keywords[tr]=Parolalar,Parola,Parola Değişimi,Simge,yüz,kdm,Kullanıcı Adı,İsim,Ad,Hesap +Keywords[uk]=паролі,пароль,зміна пароля,піктограма,обличчя,kdm,ім'я користувача,ім'я,рахунок +Keywords[uz]=Foydalanuvchining ismi,Maxfiy soʻzlar,Maxfiy soʻz,Maxfiy soʻzni oʻzgartirish,Nishoncha,Foydalanuvchi,Hisob,kdm +Keywords[uz@cyrillic]=Фойдаланувчининг исми,Махфий сўзлар,Махфий сўз,Махфий сўзни ўзгартириш,Нишонча,Фойдаланувчи,Ҳисоб,kdm +Keywords[vi]=Các mật khẩu,Mật khẩu,Đổi mật khẩu,Biểu tượng,mặt,kdm,Tên Người dùng,Tên,Tài khoản +Keywords[wa]=Sicrets,Sicret,Candjî l' sicret,imådjete,kdm,No d' uzeu,No d' elodjaedje,No,Conte +Keywords[zh_CN]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,密码,更改密码,图标,头像,用户名,姓名,账户 +Keywords[zh_TW]=Passwords,Password,Change Password,Icon,face,kdm,User Name,Name,Account,密碼,改變密碼,圖示,外觀,使用者名稱,名稱,帳號 diff --git a/applnk/compat/virtualdesktops.desktop b/applnk/compat/virtualdesktops.desktop new file mode 100644 index 000000000..71de92ce8 --- /dev/null +++ b/applnk/compat/virtualdesktops.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +Name=Virtual Desktops +Name[af]=Virtuele Werkskerms +Name[ar]=أسطح المكتب الوهمية +Name[az]=Virtual Masa Üstləri +Name[be]=Віртуальныя працоўныя сталы +Name[bg]=Работни плотове +Name[bn]=ভার্চুয়াল ডেস্কটপ +Name[br]=Burevioù galloudel +Name[bs]=Virtuelni desktopi +Name[ca]=Escriptoris virtuals +Name[cs]=Virtuální plochy +Name[csb]=Wirtualné pùltë +Name[cy]=Penbyrddau Rhith +Name[da]=Virtuelle desktoppe +Name[de]=Virtuelle Arbeitsflächen +Name[el]=Εικονικές επιφάνειες εργασίας +Name[eo]=Virtualaj Tabuloj +Name[es]=Escritorios virtuales +Name[et]=Virtuaalsed töölauad +Name[eu]=Mahaigain birtualak +Name[fa]=رومیزیهای مجازی +Name[fi]=Virtuaalityöpöydät +Name[fr]=Bureaux virtuels +Name[fy]=Firtuele buroblêden +Name[ga]=Deasca Fíorúla +Name[gl]=Escritorios Virtuais +Name[he]=שולחנות עבודה וירטואליים +Name[hi]=आभासी डेस्कटॉप +Name[hr]=Virtualne radne površine +Name[hsb]=Wirtuelne dźěłowe powjerchi +Name[hu]=Virtuális munkaasztalok +Name[id]=Desktop Virtual +Name[is]=Sýndarskjáborð +Name[it]=Desktop virtuali +Name[ja]=仮想デスクトップ +Name[ka]=ვირტუალური სამუშაო დაფა +Name[kk]=Виртуалды үстелдер +Name[km]=ផ្ទៃតុ​និម្មិត +Name[ko]=가상 데스크톱 +Name[lt]=Menami darbastaliai +Name[lv]=Virtuālās Darbvirsmas +Name[mk]=Виртуелни површини +Name[mn]=Виртуал ажлын талбар +Name[ms]=Ruang Kerja Maya +Name[mt]=Desktops Virtwali +Name[nb]=Virtuelle skrivebord +Name[nds]=Virtuelle Schriefdischen +Name[ne]=अवास्तविक डेस्कटप +Name[nl]=Virtuele bureaubladen +Name[nn]=Virtuelle skrivebord +Name[pa]=ਫ਼ਰਜ਼ੀ ਵੇਹੜੇ +Name[pl]=Wirtualne pulpity +Name[pt]=Ecrãs Virtuais +Name[pt_BR]=Áreas de Trabalho Virtuais +Name[ro]=Desktop-uri virtuale +Name[ru]=Виртуальные рабочие столы +Name[rw]=Ibiro Bitagaragara +Name[se]=Virtuella čállinbeavddit +Name[sk]=Virtuálne pracovné plochy +Name[sl]=Navidezna namizja +Name[sr]=Виртуелне радне површине +Name[sr@Latn]=Virtuelne radne površine +Name[sv]=Flera skrivbord +Name[ta]=மாய மேசைகள் +Name[te]=మిధ్యా రంగస్థలాలు +Name[tg]=Мизи кориҳои виртуалӣ +Name[th]=พื้นที่ทำงานเสมือน +Name[tr]=Sanal Masaüstleri +Name[tt]=Xıyalí Östäl +Name[uk]=Віртуальні стільниці +Name[uz]=Virtual ish stollari +Name[uz@cyrillic]=Виртуал иш столлари +Name[vi]=Màn hình nền ảo +Name[wa]=Forveyous scribannes +Name[zh_CN]=虚拟桌面 +Name[zh_TW]=多重桌面 +Type=Application +Icon=desktop +Exec=kcmshell desktop +X-KDE-ModuleType=Library +X-KDE-Library=konq +X-KDE-FactoryName=ddesktop + diff --git a/applnk/hidden.directory b/applnk/hidden.directory new file mode 100644 index 000000000..833c9d97f --- /dev/null +++ b/applnk/hidden.directory @@ -0,0 +1,72 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Internal Services +Name[af]=Interne Dienste +Name[ar]=الخدمات الداخلية +Name[be]=Сервісы Інтэрнэт +Name[bg]=Вътрешни услуги +Name[bn]=অভ্যন্তরীণ সেবা +Name[br]=Servijoù diabarzh +Name[bs]=Interni servisi +Name[ca]=Serveis interns +Name[cs]=Interní služby +Name[csb]=Bënowé ùsłëżnotë +Name[da]=Interne tjenester +Name[de]=Interne Dienste +Name[el]=Εσωτερικές υπηρεσίες +Name[eo]=Internaj servoj +Name[es]=Servicios internos +Name[et]=Seesmised teenused +Name[eu]=Barne zerbitzuak +Name[fa]=خدمات درونی +Name[fi]=Sisäiset palvelut +Name[fr]=Services internes +Name[fy]=Ynterne funksjes +Name[ga]=Seirbhísí Inmheánacha +Name[gl]=Servizos Internos +Name[he]=שירותים פנימיים +Name[hr]=Interne usluge +Name[hu]=Belső szolgáltatások +Name[id]=Layanan Internal +Name[is]=Innri þjónustur +Name[it]=Servizi interni +Name[ja]=内部サービス +Name[ka]= შიდა სერვისები +Name[kk]=Ішкі қызметтер +Name[km]=សេវា​ខាង​ក្នុង +Name[ko]=내부 서비스 +Name[lt]=Vidinės tarnybos +Name[mk]=Внатрешни сервиси +Name[ms]=Servis Dalaman +Name[nb]=Interne tjenester +Name[nds]=Interne Deensten +Name[ne]=आन्तरिक सेवा +Name[nl]=Interne diensten +Name[nn]=Interne tenester +Name[pa]=ਅੰਦਰੂਨੀ ਸੇਵਾ +Name[pl]=Usługi wewnętrzne +Name[pt]=Serviços Internos +Name[pt_BR]=Serviços Internos +Name[ro]=Servicii interne +Name[ru]=Внутренние службы +Name[rw]=Amaserivise y'Imbere +Name[se]=Siskkildas bálvalusat +Name[sk]=Vnútorné služby +Name[sl]=Notranje storitve +Name[sr]=Унутрашњи сервиси +Name[sr@Latn]=Unutrašnji servisi +Name[sv]=Interna tjänster +Name[ta]=உள்ளார்ந்தச் சேவைகள் +Name[te]=అంతర్గత సేవలు +Name[tg]=Хадамоти дохилӣ +Name[th]=บริการภายใน +Name[tr]=İç Servisler +Name[tt]=Eçke Xezmätlär +Name[uk]=Внутрішні служби +Name[uz]=Ichki xizmatlar +Name[uz@cyrillic]=Ички хизматлар +Name[vi]=Dịch vụ Internet +Name[wa]=Divintrins Siervices +Name[zh_CN]=内部服务 +NoDisplay=true diff --git a/applnk/kde-development-translation.directory b/applnk/kde-development-translation.directory new file mode 100644 index 000000000..09b240174 --- /dev/null +++ b/applnk/kde-development-translation.directory @@ -0,0 +1,72 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Translation +Name[af]=Vertaling +Name[ar]=ترجمة +Name[be]=Пераклад +Name[bg]=Превод +Name[bn]=অনুবাদ +Name[br]=Troidigezh +Name[bs]=Prevođenje +Name[ca]=Traducció +Name[cs]=Překlad +Name[csb]=Dolmaczënk +Name[cy]=Cyfieithiad +Name[da]=Oversættelse +Name[de]=Übersetzung +Name[el]=Μετάφραση +Name[eo]=Traduko +Name[es]=Traducción +Name[et]=Tõlkimine +Name[eu]=Itzulpengintza +Name[fa]=ترجمه +Name[fi]=Käännös +Name[fr]=Traduction +Name[fy]=Oersetting +Name[ga]=Aistriúchán +Name[gl]=Tradución +Name[he]=תרגום +Name[hr]=Prijevod +Name[hu]=Fordítás +Name[id]=Terjemahan +Name[is]=Þýðing +Name[it]=Traduzione +Name[ja]=翻訳 +Name[ka]=თარგმნა +Name[kk]=Аудару +Name[km]=ការបកប្រែ +Name[ko]=번역 +Name[lt]=Vertimas +Name[mk]=Превод +Name[ms]=Terjemahan +Name[nb]=Oversettelse +Name[nds]=Översetten +Name[ne]=अनुवाद +Name[nl]=Vertaling +Name[nn]=Omsetjing +Name[pa]=ਅਨੁਵਾਦ +Name[pl]=Tłumaczenie +Name[pt]=Tradução +Name[pt_BR]=Tradução +Name[ro]=Traducere +Name[ru]=Локализация +Name[se]=Jorgalus +Name[sk]=Preklad +Name[sl]=Prevajanje +Name[sr]=Превод +Name[sr@Latn]=Prevod +Name[sv]=Översättning +Name[te]=అనువాదం +Name[tg]=Тарҷума +Name[th]=เครื่องมือแปลภาษา +Name[tr]=Çeviri +Name[uk]=Переклад +Name[uz]=Tarjima +Name[uz@cyrillic]=Таржима +Name[vi]=Dịch +Name[wa]=Ratournaedje +Name[zh_CN]=翻译 +Name[zh_TW]=翻譯 +Icon=locale + diff --git a/applnk/kde-development-webdevelopment.directory b/applnk/kde-development-webdevelopment.directory new file mode 100644 index 000000000..bd580f423 --- /dev/null +++ b/applnk/kde-development-webdevelopment.directory @@ -0,0 +1,71 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Web Development +Name[af]=Web Ontwikkeling +Name[ar]=تطوير برامج للشبكة +Name[be]=Web-распрацоўка +Name[bg]=Уеб разработка +Name[bn]=ওয়েব ডেভেলপমেন্ট +Name[br]=Diorren gwiad +Name[bs]=Web programiranje +Name[ca]=Desenvolupament Web +Name[cs]=Webový vývoj +Name[csb]=Programòwanié WWW +Name[da]=Internet-udvikling +Name[de]=Web-Entwicklung +Name[el]=Δικτυακή ανάπτυξη +Name[eo]=Reta Programado +Name[es]=Desarrollo web +Name[et]=Veebiarendus +Name[eu]=Web garapena +Name[fa]=توسعۀ وب +Name[fi]=Webin kehitys +Name[fr]=Développement Internet +Name[fy]=Webûntwikkeling +Name[ga]=Forbairt Ghréasáin +Name[gl]=Desenvolvemento Web +Name[he]=פיתוח WEB +Name[hr]=Web razvoj +Name[hu]=Webes fejlesztőeszközök +Name[id]=Pengembangan Web +Name[is]=Vefhönnun +Name[it]=Sviluppo web +Name[ja]=ウェブ開発 +Name[ka]=ვებ პროგრამირება +Name[kk]=Веб жобалау +Name[km]=ការបង្កើត​ទំព័រ​បណ្តាញ +Name[ko]=웹 개발 +Name[lt]=Žiniatinklio programavimas +Name[mk]=Веб-развој +Name[ms]=Pembangunan Web +Name[nb]=Nettutvikling +Name[nds]=Nett-Utwickeln +Name[ne]=वेब विकास +Name[nl]=Webontwikkeling +Name[nn]=Nettutvikling +Name[pa]=ਵੈਬ ਵਿਕਾਸ +Name[pl]=Programowanie WWW +Name[pt]=Desenvolvimento Web +Name[pt_BR]=Desenvolvimento Web +Name[ro]=Dezvoltare web +Name[ru]=Веб-разработка +Name[se]=Fierpmádatovdánahttin +Name[sk]=Vývoj pre Web +Name[sl]=Spletni razvoj +Name[sr]=Веб развој +Name[sr@Latn]=Veb razvoj +Name[sv]=Webbutveckling +Name[te]=వెబ్ డెవలప్మెంట్ +Name[tg]=Такомули Вэб +Name[th]=พัฒนาเว็บ +Name[tr]=Web Geliştirme +Name[uk]=Розробка веб-сторінок +Name[uz]=Veb uchun tuzish +Name[uz@cyrillic]=Веб учун тузиш +Name[vi]=Phát triển Mạng +Name[wa]=Programaedje waibe +Name[zh_CN]=Web 开发 +Name[zh_TW]=網頁開發 +Icon=package_network + diff --git a/applnk/kde-development.directory b/applnk/kde-development.directory new file mode 100644 index 000000000..f9ba17a99 --- /dev/null +++ b/applnk/kde-development.directory @@ -0,0 +1,89 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Development +Name[af]=Ontwikkeling +Name[ar]=تطوير +Name[az]=İnkişaf +Name[be]=Распрацоўка +Name[bg]=Разработка +Name[bn]=ডেভেলপমেন্ট +Name[br]=Diorren +Name[bs]=Programiranje +Name[ca]=Desenvolupament +Name[cs]=Vývoj +Name[csb]=Nôrzãdza programistów +Name[cy]=Datblygu +Name[da]=Udvikling +Name[de]=Entwicklung +Name[el]=Ανάπτυξη +Name[eo]=Programado +Name[es]=Desarrollo +Name[et]=Arendus +Name[eu]=Garapena +Name[fa]=توسعه +Name[fi]=Kehitystyökalut +Name[fo]=Menning +Name[fr]=Développement +Name[fy]=Untwikkelje +Name[ga]=Forbairt +Name[gl]=Desenvolvemento +Name[he]=פיתוח +Name[hi]=विकास +Name[hr]=Razvoj +Name[hsb]=Wuwiwanje +Name[hu]=Fejlesztőeszközök +Name[id]=Pembangun +Name[is]=Þróun +Name[it]=Sviluppo +Name[ja]=開発 +Name[ka]=განვითარება +Name[kk]=Жетілдіру +Name[km]=ការ​អភិវឌ្ឍន៍ +Name[ko]=개발 +Name[lo]=ພັດທະນາໂປຣແກຣມ +Name[lt]=Programavimas +Name[lv]=Izstrāde +Name[mk]=Развој +Name[mn]=Хөгжүүлэл +Name[ms]=Pemaju +Name[mt]=Żvilupp +Name[nb]=Utvikling +Name[nds]=Utwickeln +Name[ne]=विकास +Name[nl]=Ontwikkeling +Name[nn]=Utvikling +Name[nso]=Thlabollogo +Name[oc]=Desvelopament +Name[pa]=ਵਿਕਾਸ +Name[pl]=Narzędzia programistów +Name[pt]=Desenvolvimento +Name[pt_BR]=Desenvolvimento +Name[ro]=Dezvoltare +Name[ru]=Разработка +Name[rw]=Iterambere +Name[se]=Ovdánahttin +Name[sk]=Vývoj +Name[sl]=Razvoj +Name[sr]=Развој +Name[sr@Latn]=Razvoj +Name[ss]=Kundlondlobala +Name[sv]=Utveckling +Name[ta]=உருவாக்கம் +Name[te]=డెవలప్మెంట్ +Name[tg]=Такомул +Name[th]=พัฒนาโปรแกรม +Name[tr]=Geliştirme +Name[tt]=Citeşterü +Name[uk]=Розробка +Name[uz]=Tuzish +Name[uz@cyrillic]=Тузиш +Name[ven]=Nyaluwo +Name[vi]=Phát triển +Name[wa]=Programaedje +Name[xh]=Ubhekiso phambili +Name[zh_CN]=开发 +Name[zh_TW]=程式開發 +Name[zu]=Intuthuko +Icon=package_development + diff --git a/applnk/kde-editors.directory b/applnk/kde-editors.directory new file mode 100644 index 000000000..892308b5c --- /dev/null +++ b/applnk/kde-editors.directory @@ -0,0 +1,85 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Editors +Name[af]=Redigeerders +Name[ar]=محرري النصوص +Name[az]=Editorlar +Name[be]=Рэдактары +Name[bg]=Редактори +Name[bn]=সম্পাদক +Name[br]=Aozerien +Name[bs]=Editori +Name[cs]=Editory +Name[csb]=Editorë +Name[cy]=Golygyddion +Name[da]=Editorer +Name[de]=Editoren +Name[el]=Επεξεργαστές +Name[eo]=Redaktiloj +Name[es]=Editores +Name[et]=Redaktorid +Name[eu]=Editoreak +Name[fa]=ویرایشگرها +Name[fi]=Editorit +Name[fo]=Ritlar +Name[fr]=Éditeurs de texte +Name[fy]=Bewurkers +Name[ga]=Eagarthóirí +Name[gl]=Editores +Name[he]=עורכים +Name[hi]=संपादक +Name[hr]=Uređivači +Name[hsb]=Wobdźěłanje teksta +Name[hu]=Szövegszerkesztők +Name[id]=Editor +Name[is]=Ritlar +Name[it]=Editor +Name[ja]=エディタ +Name[ka]=რედაქტორი +Name[kk]=Редакторлар +Name[km]=កម្មវិធី​និពន្ធ +Name[ko]=편집기 +Name[lo]=ແກ້ໄຂແຟ້ມຂໍ້ຄວາມ +Name[lt]=Redaktoriai +Name[lv]=Redaktori +Name[mk]=Уредувачи +Name[mn]=Боловсруулагч +Name[ms]=Penyunting +Name[mt]=Edituri +Name[nb]=Skriveprogrammer +Name[nds]=Editoren +Name[ne]=सम्पादक +Name[nn]=Skriveprogram +Name[nso]=Bafetosi +Name[pa]=ਸੰਪਾਦਕ +Name[pl]=Edytory +Name[pt]=Editores +Name[pt_BR]=Editores +Name[ro]=Editoare +Name[ru]=Редакторы +Name[rw]=Muhinduzi +Name[se]=Čállinprográmmat +Name[sk]=Editory +Name[sl]=Urejevalniki +Name[sr]=Уређивачи +Name[sr@Latn]=Uređivači +Name[ss]=Bahleli +Name[sv]=Editorer +Name[ta]=தொகுப்பாளர்கள் +Name[te]=ఎడిటర్లు +Name[tg]=Таҳриргарон +Name[th]=โปรแกรมแก้ไขข้อความ +Name[tr]=Düzenleyiciler +Name[tt]=Tözätkeç +Name[uk]=Редактори +Name[uz]=Tahrirchilar +Name[uz@cyrillic]=Таҳрирчилар +Name[ven]=Vhasengulusi +Name[vi]=Trình biên tập +Name[wa]=Aspougneus d' tecse +Name[xh]=Abahleli +Name[zh_CN]=编辑器 +Name[zh_TW]=編輯器 +Name[zu]=Abalungisi +Icon=package_editors diff --git a/applnk/kde-edutainment.directory b/applnk/kde-edutainment.directory new file mode 100644 index 000000000..027d2c872 --- /dev/null +++ b/applnk/kde-edutainment.directory @@ -0,0 +1,86 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Edutainment +Name[af]=Opvoedkundig +Name[ar]=التعليم الترفيهي +Name[az]=Təhsil +Name[be]=Адукацыя +Name[bg]=Образование +Name[bn]=শিক্ষামূলক মনোরঞ্জন +Name[br]=Deskadurezh +Name[bs]=Zabava i obrazovanje +Name[ca]=Educació +Name[cs]=Škola hrou +Name[csb]=Ùczba ë edukacëjô +Name[cy]=Addifyrwch +Name[da]=Uddannelse +Name[de]=Lernprogramme +Name[el]=Εκπαίδευση +Name[eo]=Amuzedukado +Name[es]=Entretenimientos educativos +Name[et]=Haridus +Name[eu]=Jolastu eta ikasi +Name[fa]=سرگرمی آموزشی +Name[fi]=Opetusviihde +Name[fo]=Undirvísing og -hald +Name[fr]=Éducatif +Name[fy]=Edukatyf +Name[ga]=Oideachluichí +Name[gl]=Educación +Name[he]=לומדות +Name[hi]=खेल-खेल में सीखें +Name[hr]=Obrazovna zabava +Name[hsb]=Wuknjenje a hrajkanje +Name[hu]=Oktatóprogramok +Name[is]=Kennsluleikir +Name[it]=Istruzione divertente +Name[ja]=エデュテインメント +Name[ka]=სასწავლო +Name[kk]=Оқыту +Name[km]=ល្បែង​កំសាន្ត​បង្កើន​ចំណេះដឹង +Name[ko]=교육 +Name[lo]=ການສຶກສາແສນມ່ວນຊື່ນ +Name[lt]=Mokomosios programos +Name[lv]=Izglītošana +Name[mk]=Едукација и забава +Name[mn]=Боловсролын програм +Name[ms]=Hiburan Mendidik +Name[mt]=Edukazzjoni u Divertiment +Name[nb]=Lek og lær +Name[nds]=Spelen & Lehren +Name[ne]=शिक्षा मनोरञ्जन +Name[nl]=Educatief +Name[nn]=Underhaldningslæring +Name[nso]=Boithabiso bja Thuto +Name[pa]=ਸਿੱਖਿਆ +Name[pl]=Nauka i rozrywka +Name[pt]=Educação/Entretenimento +Name[pt_BR]=Educativo +Name[ro]=Educațional +Name[ru]=Образование +Name[se]=Stoahkan ja oahppan +Name[sk]=Škola hrou +Name[sl]=Zabava in učenje +Name[sr]=Образовање +Name[sr@Latn]=Obrazovanje +Name[ss]=Infundvo-tfokotisa +Name[sv]=Utbildning +Name[ta]=கல்வி +Name[te]=ఎడ్యూటెన్మెంట్ +Name[tg]=Омӯзиш +Name[th]=การศึกษาแสนสนุก +Name[tr]=Eğitim ve Eğlence +Name[tt]=Öyränü & Yal itü +Name[uk]=Освітні +Name[uz]=Oʻynab oʻrganish +Name[uz@cyrillic]=Ўйнаб ўрганиш +Name[ven]=Pfunzotakadza +Name[vi]=Học vui +Name[wa]=Sicole avou plaijhi +Name[xh]=Ufundiso +Name[zh_CN]=寓教于乐 +Name[zh_TW]=教育和娛樂 +Name[zu]=Ezemfundo +Icon=package_edutainment + diff --git a/applnk/kde-essential.menu b/applnk/kde-essential.menu new file mode 100644 index 000000000..cc4048083 --- /dev/null +++ b/applnk/kde-essential.menu @@ -0,0 +1,27 @@ + + + + + + Settings + kde-settings.directory + ../kde-settings.menu + + + Information + kde-information.directory + ../kde-information.menu + + + Settings/InformationInformation + + + System + + ScreenSavers + kde-system-screensavers.directory + ../kde-screensavers.menu + + + diff --git a/applnk/kde-games-arcade.directory b/applnk/kde-games-arcade.directory new file mode 100644 index 000000000..359d83dff --- /dev/null +++ b/applnk/kde-games-arcade.directory @@ -0,0 +1,74 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Arcade +Name[af]=Arkade +Name[ar]=ألعاب الــ Arcade +Name[az]=Əyləncə +Name[be]=Аркады +Name[bg]=Аркадни +Name[bn]=আর্কেড +Name[br]=C'hoarioù tavarn +Name[bs]=Arkade +Name[cs]=Arkády +Name[csb]=Chwatkòwé grë +Name[cy]=Arcêd +Name[da]=Arkade +Name[de]=Arkade +Name[eo]=Arkado +Name[et]=Võitlusmängud +Name[fa]=گذرگاه تاقدار +Name[fo]=Arkaduspøl +Name[fr]=Jeux d'arcade +Name[fy]=Arkade +Name[ga]=Stuara Siamsa +Name[he]=משחקי Arcade +Name[hi]=ऑर्केड +Name[hr]=Arkada +Name[hu]=Ügyességi játékok +Name[is]=Spilasalur +Name[ja]=アーケード +Name[kk]=Аркад ойындары +Name[km]=ធ្វើ​ដំណើរ +Name[ko]=아케이드 +Name[lo]=ເກມອາເຄດ +Name[lt]=Arkada +Name[lv]=Arkāde +Name[mk]=Аркадни игри +Name[mn]=Сансар +Name[ms]=Arked +Name[mt]=Logħob tal-Arcades +Name[nb]=Arkade +Name[nds]=Speelhall +Name[ne]=आर्केड +Name[nn]=Arkade +Name[pa]=ਅਰਕਾਡੀ +Name[pl]=Gry zręcznościowe +Name[pt]=Arcada +Name[ro]=Aventuri +Name[ru]=Аркады +Name[rw]=Ikirongozi +Name[se]=Fearán +Name[sk]=Akčné hry +Name[sl]=Arkade +Name[sr]=Аркадне +Name[sr@Latn]=Arkadne +Name[sv]=Arkad +Name[ta]=ஆர்கேட் +Name[te]=ఆర్కేడ్ +Name[tg]=Силсилаи бозиҳо +Name[th]=เกมอาเขต +Name[tr]=Oyun Makinesi +Name[tt]=Arkad +Name[uk]=Аркади +Name[uz]=Arkada +Name[uz@cyrillic]=Аркада +Name[ven]=Petea +Name[vi]=Mái vòm +Name[wa]=Årcåde +Name[xh]=Umqolo wesakhiwo esiphatha ubunzima bento +Name[zh_CN]=街机 +Name[zh_TW]=大型遊戲機遊戲 +Name[zu]=Umhhume +Icon=package_games_arcade +X-KDE-SuppressGenericNames=Game,Arcade Game diff --git a/applnk/kde-games-board.directory b/applnk/kde-games-board.directory new file mode 100644 index 000000000..7e489b1c9 --- /dev/null +++ b/applnk/kde-games-board.directory @@ -0,0 +1,81 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Board Games +Name[af]=Bord Speletjies +Name[ar]=ألعاب الألواح +Name[az]=Lüvhə Oyunları +Name[be]=Настольныя гульні +Name[bg]=Игри на дъска +Name[bn]=বোর্ডের খেলা +Name[br]=C'hoarioù taolenn +Name[bs]=Igre na ploči +Name[ca]=Jocs de taula +Name[cs]=Deskové hry +Name[csb]=Planszowé grë +Name[cy]=Gemau Bwrdd +Name[da]=Brætspil +Name[de]=Brettspiele +Name[el]=Επιτραπέζια παιχνίδια +Name[eo]=Tabuloludoj +Name[es]=Juegos de tablero +Name[et]=Lauamängud +Name[eu]=Mahai jokoak +Name[fa]=بازیهای تخته +Name[fi]=Lautapelit +Name[fr]=Jeux de plateau +Name[fy]=Boardspultsjes +Name[ga]=Cluichí Cláir +Name[gl]=Xogos de Taboleiro +Name[he]=משחקי לוח +Name[hi]=बिसात के खेल +Name[hr]=Igre na ploči +Name[hsb]=Deskowe hry +Name[hu]=Táblajátékok +Name[id]=Permainan Papan +Name[is]=Borðleikir +Name[it]=Giochi da tavolo +Name[ja]=ボードゲーム +Name[ka]=მაგიდის თამაშები +Name[kk]=Үстел ойындары +Name[km]=ល្បែង​ក្ដារ +Name[ko]=보드 게임 +Name[lt]=Stalo žaidimai +Name[lv]=Galda spēles +Name[mk]=Игри на табла +Name[mn]=Хөлөгт тоглоом +Name[ms]=Permainan 'Board' +Name[mt]=Logħob tal-boards +Name[nb]=Brettspill +Name[nds]=Brettspelen +Name[ne]=बोर्ड खेल +Name[nl]=Bordspellen +Name[nn]=Brettspel +Name[pa]=ਬੋਰਡ ਖੇਡਾਂ +Name[pl]=Gry planszowe +Name[pt]=Jogos de Tabuleiro +Name[pt_BR]=Jogos de Tabuleiro +Name[ro]=Jocuri de table +Name[ru]=Настольные игры +Name[rw]=Imikino y'Umuryango +Name[se]=Duolbbášspealut +Name[sk]=Stolové hry +Name[sl]=Namizne igre +Name[sr]=Игре на табли +Name[sr@Latn]=Igre na tabli +Name[sv]=Brädspel +Name[ta]=மேசை விளையாட்டுகள் +Name[te]=పలక ఆటలు +Name[tg]=Бозиҳои рӯимизӣ +Name[th]=เกมกระดาน +Name[tr]=Masaüstü Oyunları +Name[tt]=Östäl Uyını +Name[uk]=Ігри на дошці +Name[uz]=Stol oʻyinlari +Name[uz@cyrillic]=Стол ўйинлари +Name[vi]=Trò chơi bảng +Name[wa]=Djeus d' platea +Name[zh_CN]=棋类游戏 +Name[zh_TW]=棋盤遊戲 +Icon=package_games_board +X-KDE-SuppressGenericNames=Game,Board Game diff --git a/applnk/kde-games-card.directory b/applnk/kde-games-card.directory new file mode 100644 index 000000000..f332eb240 --- /dev/null +++ b/applnk/kde-games-card.directory @@ -0,0 +1,81 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Card Games +Name[af]=Kaart Speletjies +Name[ar]=ألعاب الورق +Name[az]=Kart Oyunları +Name[be]=Картавыя гульні +Name[bg]=Игри с карти +Name[bn]=তাসের খেলা +Name[br]=C'hoarioù Kartennoù +Name[bs]=Igre sa kartama +Name[ca]=Jocs de cartes +Name[cs]=Karetní hry +Name[csb]=Kartowé grë +Name[cy]=Gemau Cardiau +Name[da]=Kortspil +Name[de]=Kartenspiele +Name[el]=Παιχνίδια καρτών +Name[eo]=Kartludoj +Name[es]=Juegos de cartas +Name[et]=Kaardimängud +Name[eu]=Karta jokoak +Name[fa]=بازیهای کارت +Name[fi]=Korttipelit +Name[fr]=Jeux de cartes +Name[fy]=Kaartspultsjes +Name[ga]=Cluichí Cártaí +Name[gl]=Xogos de Cartas +Name[he]=משחקי קלפים +Name[hi]=ताश के खेल +Name[hr]=Igre s kartama +Name[hsb]=Kartowe hry +Name[hu]=Kártyajátékok +Name[id]=Permainan Kartu +Name[is]=Spilaleikir +Name[it]=Giochi di carte +Name[ja]=カードゲーム +Name[ka]=ბანქოს თამაშები +Name[kk]=Карта ойындары +Name[km]=ល្បែង​បៀរ +Name[ko]=카드 게임 +Name[lt]=Kortų žaidimai +Name[lv]=Kāršu spēles +Name[mk]=Игри со карти +Name[mn]=Хөзрийн тоглоом +Name[ms]=Permainan Kad +Name[mt]=Logħob tal-Karti +Name[nb]=Kortspill +Name[nds]=Koortspelen +Name[ne]=कार्ड खेल +Name[nl]=Kaartspellen +Name[nn]=Kortspel +Name[pa]=ਤਾਸ਼ ਖੇਡਾਂ +Name[pl]=Gry karciane +Name[pt]=Jogos de Cartas +Name[pt_BR]=Jogos de Cartas +Name[ro]=Jocuri de cărți +Name[ru]=Карточные игры +Name[rw]=Imikino y'Ikarita +Name[se]=Goartaspealut +Name[sk]=Kartové hry +Name[sl]=Igre s kartami +Name[sr]=Игре са картама +Name[sr@Latn]=Igre sa kartama +Name[sv]=Kortspel +Name[ta]=சீட்டு விளையாட்டுகள் +Name[te]=పేక ఆటలు +Name[tg]=Бозиҳои корт +Name[th]=เกมไพ่ต่าง ๆ +Name[tr]=Kart Oyunları +Name[tt]=Kard Uyını +Name[uk]=Карткові ігри +Name[uz]=Qarta oʻyinlari +Name[uz@cyrillic]=Қарта ўйинлари +Name[vi]=Trò chơi thẻ +Name[wa]=Cwårdjeus +Name[zh_CN]=牌类游戏 +Name[zh_TW]=紙牌遊戲 +Icon=package_games_card +X-KDE-SuppressGenericNames=Game,Card Game diff --git a/applnk/kde-games-kids.directory b/applnk/kde-games-kids.directory new file mode 100644 index 000000000..ed1e4bbdf --- /dev/null +++ b/applnk/kde-games-kids.directory @@ -0,0 +1,88 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Games for Kids +Name[af]=Kinder Speletjies +Name[ar]= ألعاب للأطفال +Name[az]=Uşaxlar Üçün Oyunlar +Name[be]=Дзіцячыя гульні +Name[bg]=Игри за деца +Name[bn]=বাচ্চাদের খেলা +Name[br]=C'hoarioù evit ar Bugale +Name[bs]=Igre za djecu +Name[ca]=Jocs per a nens +Name[cs]=Hry pro děti +Name[csb]=Grë dlô dzecë +Name[cy]=Gêmau ar gyfer Plant +Name[da]=Spil for børn +Name[de]=Spiele für Kinder +Name[el]=Παιχνίδια για παιδιά +Name[eo]=Ludoj por infanoj +Name[es]=Juegos para niños +Name[et]=Laste mängud +Name[eu]=Haur jokoak +Name[fa]=بازیهایی برای بچه‌ها +Name[fi]=Lasten pelit +Name[fo]=Spøl fyri børn +Name[fr]=Jeux pour les enfants +Name[fy]=Spultsjes foar bêrn +Name[ga]=Cluichí do Pháistí +Name[gl]=Xogos para Nenos +Name[he]=משחקים לילדים +Name[hi]=बच्चों के लिए खेल +Name[hr]=Igre za djecu +Name[hsb]=Hry za dźěći +Name[hu]=Játékok kicsiknek +Name[id]=Permainan Kanak-kanak +Name[is]=Leikir fyrir krakka +Name[it]=Giochi per bambini +Name[ja]=子供向けゲーム +Name[ka]=საბავშვო თამაშები +Name[kk]=Балалар ойындары +Name[km]=ល្បែង​សម្រាប់​កូន​ក្មេង +Name[ko]=어린이용 게임 +Name[lo]=ເກມສຳລັບເດັກ +Name[lt]=Žaidimai vaikams +Name[lv]=Spēles bērniem +Name[mk]=Игри за деца +Name[mn]=Хүүхдийн тоглоом +Name[ms]=Permainan Kanak-kanak +Name[mt]=Logħob għat-tfal +Name[nb]=Spill for barn +Name[nds]=Spelen för Kinners +Name[ne]=केटाकेटीका लागि खेल +Name[nl]=spelletjes voor kinderen +Name[nn]=Barnespel +Name[nso]=Dipapadi tsa Bana +Name[pa]=ਬੱਚਿਆਂ ਲਈ ਖੇਡਾਂ +Name[pl]=Gry dla dzieci +Name[pt]=Jogos para Crianças +Name[pt_BR]=Jogos para Crianças +Name[ro]=Jocuri pentru copii +Name[ru]=Детские игры +Name[rw]=Imikino y'Abana +Name[se]=Mánáidspealut +Name[sk]=Hry pre deti +Name[sl]=Igre za otroke +Name[sr]=Игре за децу +Name[sr@Latn]=Igre za decu +Name[ss]=Imidlalo yebantfwana +Name[sv]=Spel för barn +Name[ta]=குழந்தைகளுக்கான விளையாட்டுகள் +Name[te]=పిల్లల ఆటలు +Name[tg]=Бозиҳои кӯдакона +Name[th]=เกมส์สำหรับเด็ก +Name[tr]=Çocuklar için Oyunlar +Name[tt]=Bala Uyını +Name[uk]=Ігри для дітей +Name[uz]=Kichkintoylar uchun oʻyinlar +Name[uz@cyrillic]=Кичкинтойлар учун ўйинлар +Name[ven]=Mitambo ya vhana +Name[vi]=Trò chơi cho Trẻ +Name[wa]=Djeus po ls efants +Name[xh]=Imidlalo Yabantwana +Name[zh_CN]=儿童游戏 +Name[zh_TW]=小孩的遊戲 +Name[zu]=Imidlalo yabantwana +Icon=package_games_kids +X-KDE-SuppressGenericNames=Game,Game for Children diff --git a/applnk/kde-games-roguelikes.directory b/applnk/kde-games-roguelikes.directory new file mode 100644 index 000000000..450fc0af9 --- /dev/null +++ b/applnk/kde-games-roguelikes.directory @@ -0,0 +1,84 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Rogue-like Games +Name[af]=Rogue-tipe Speletjies +Name[ar]=ألعاب شبه Rogue +Name[az]=Rogue Bənzəri Oyunlar +Name[be]=Гульны Rogue +Name[bg]=Хазартни игри +Name[bn]=রোগ্ (Rogue)-এর মত খেলা +Name[br]=Ur c'hoari a seurt gant Rogue +Name[bs]=Rogue-like igre +Name[ca]=Jocs com el Rogue +Name[cs]=Hry podobné Rogue +Name[csb]=Gré z familëji Rogue +Name[cy]=Gemau sy'n debyg i Rogue +Name[da]=Rogue-lignende spil +Name[de]=Rogue-ähnliche Spiele +Name[el]=Παιχνίδια τύπου Rogue +Name[eo]=Filudoj +Name[es]=Juegos tipo Rogue +Name[et]=Rogue-laadsed mängud +Name[eu]=Rogue motako jokoak +Name[fa]=بازیهای شبیه Rogue +Name[fi]=Rogue-tyyliset pelit +Name[fo]=Rogue-lík spøl +Name[fr]=Jeux à la Rogue +Name[fy]=Soarte mei rogue spulstjes +Name[ga]=Cluichí cosúil le Rogue +Name[gl]=Xogos do estilo de Rogue +Name[he]=משחקים נוסח Rogue +Name[hi]=छलिया जैसे खेल +Name[hr]=Igre kao Rogue +Name[hsb]=Hry, podobne na Rogue +Name[hu]=Rogue-szerű játékok +Name[id]=Permainan ala Rogue +Name[is]=Skotleikir +Name[it]=Giochi in stile Rogue +Name[ja]=Rogue 風のゲーム +Name[ka]= Rogue ტიპის თამაშები +Name[kk]=Rogue-секілді ойындар +Name[lo]=ເກມຄ້າຍ Rogue +Name[lt]=Išdykėlio tipo žaidimai +Name[lv]=Rogue līdzīgas spēles +Name[mk]=Игри како Rogue +Name[mn]=Rogue-тоглоом +Name[ms]=Permainan ala Rogue +Name[mt]=Logħob bħal Rogue +Name[nb]=Rollespill +Name[nds]=Spelen so as Rogue +Name[ne]=रग-प्रकारको खेल +Name[nl]=Rogue-achtige spellen +Name[nn]=Rogue-aktige spel +Name[nso]=Dipapadi tsa Bokalatsane +Name[pa]=ਠੱਗ-ਵਰਗੀਆਂ ਖੇਡਾਂ +Name[pl]=Gry z rodziny Rogue +Name[pt]=Jogos tipo Rogue +Name[pt_BR]=Jogos parecidos com Rogue +Name[ro]=Jocuri violente +Name[ru]=Ролевые игры в стиле Rogue +Name[rw]=Imikino Ingunge-nka +Name[se]=Rogue-lágána spealut +Name[sk]=Hry v štýle Rogue +Name[sl]=Igre kot Rogue +Name[sr]=Игре налик на Rogue +Name[sr@Latn]=Igre nalik na Rogue +Name[ss]=I-Rogue-lefana nemidlalo +Name[sv]=Spel som liknar Rogue +Name[ta]=முரட்டுதனமான விளையாட்டுகள் +Name[te]=రోగ్ లాంటి ఆటలు +Name[tg]=Бозиҳои шабиявии Rogue +Name[th]=เกมส์คล้าย Rogue +Name[tr]=Rogue benzeri oyunlar +Name[tt]=Gizeş Uyını +Name[uk]=Ігри на кшталт Rogue +Name[uz]=Rogue oʻyiniga oʻxshash oʻyinlar +Name[uz@cyrillic]=Rogue ўйинига ўхшаш ўйинлар +Name[ven]=U fhura-sa Mitambo +Name[vi]=Trò chơi giống Rogue +Name[wa]=Djeus ki rshonnèt-st a «rogue» +Name[xh]=Imidlalo efana ne Rogue +Name[zh_CN]=恶作剧游戏 +Name[zh_TW]=冒險類遊戲 +Name[zu]=Imidlalo enjenge-Rogue diff --git a/applnk/kde-games-strategy.directory b/applnk/kde-games-strategy.directory new file mode 100644 index 000000000..2bb956715 --- /dev/null +++ b/applnk/kde-games-strategy.directory @@ -0,0 +1,87 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Tactics & Strategy +Name[af]=Strategie & Taktiek +Name[ar]=الألعاب الميدانية و الإستراتجية +Name[az]=Strategiya & Taktika +Name[be]=Тактыка і стратэгія +Name[bg]=Стратегически игри +Name[bn]=কৌশল এবং পরিকল্পনা +Name[br]=Brezelekaouriezh ha kadouriezh +Name[bs]=Taktika i strategija +Name[ca]=Tàctiques i estratègia +Name[cs]=Taktické a strategické +Name[csb]=Takticzné ë strategiczné grë +Name[cy]=Tactegau & Strategaeth +Name[da]=Taktik & Strategi +Name[de]=Strategie & Taktik +Name[el]=Τακτική & Στρατηγική +Name[eo]=Taktikoj & Strategioj +Name[es]=Táctica y estrategia +Name[et]=Taktika ja strateegia +Name[eu]=Taktika eta estrategia +Name[fa]=راهکارها و راهبردها +Name[fi]=Taktiikka ja strategia +Name[fo]=Taktikkur og strategi +Name[fr]=Tactique et stratégie +Name[fy]=Taktysk en strategysk +Name[ga]=Beartaíocht agus Straitéisí +Name[gl]=Tácticas e Estratexia +Name[he]=טקטיקה ואסטרטגיה +Name[hi]=रणनीतिक और कौशल +Name[hr]=Taktika i strategija +Name[hsb]=Strategiske hry +Name[hu]=Taktikai és stratégiai +Name[id]=Taktik dan Strategi +Name[is]=Kænska & áræði +Name[it]=Tattica e strategia +Name[ja]=戦略 & 戦術 +Name[ka]=ტაქტიკა & სტრატეგია +Name[kk]=Тактика және стратегия +Name[km]=ក្បួន & យុទ្ធសាស្ត្រ +Name[ko]=전략 및 전술 +Name[lo]=ເກມກົນລະຍຸດແລະວາງແຜນ +Name[lt]=Taktika ir strategija +Name[lv]=Taktika & Stratēģija +Name[mk]=Тактика и стратегија +Name[mn]=Тактик & стратеги +Name[ms]=Strategi dan Taktik +Name[mt]=Tattika u Strateġija +Name[nb]=Taktikk og strategi +Name[nds]=Taktik & Strategie +Name[ne]=कौशल र रणनीति +Name[nl]=Tactiek en Strategie +Name[nn]=Taktikk og strategi +Name[nso]=Mekgwanakgwana & Tselathwii +Name[pa]=ਤਕਨੀਕੀ ਤੇ ਗਿਆਨ +Name[pl]=Gry taktyczne i strategiczne +Name[pt]=Tácticas e Estratégia +Name[pt_BR]=Táticas & Estratégias +Name[ro]=Tactică și strategie +Name[ru]=Стратегия +Name[rw]=Imigabo & Imigambi +Name[se]=Taktihkka ja strategiija +Name[sk]=Taktické a strategické +Name[sl]=Taktika in strategija +Name[sr]=Тактика и стратегија +Name[sr@Latn]=Taktika i strategija +Name[ss]=Masu & indlela yekwenta +Name[sv]=Taktik och strategi +Name[ta]=உத்திகளும் தந்திரங்களும் +Name[te]=యుక్తి & తంత్రాలు +Name[tg]=Бозиҳои стратегӣ +Name[th]=เกมกลยุทธ์และวางแผน +Name[tr]=Taktik ve Strateji +Name[tt]=Taktik & Strategi +Name[uk]=Тактика та стратегія +Name[uz]=Taktika va strategiya +Name[uz@cyrillic]=Тактика ва стратегия +Name[ven]=Madzhenele & Maitele +Name[vi]=Chiến thuật và Chiến lược +Name[wa]=Tactike eyet stratedjeye +Name[xh]=Amacebo okufumana iinjongo & Amacebo okuzoba +Name[zh_CN]=策略游戏 +Name[zh_TW]=戰略及策略 +Name[zu]=Amaqhinga & Iplani +Icon=package_games_strategy diff --git a/applnk/kde-games.directory b/applnk/kde-games.directory new file mode 100644 index 000000000..8f17e822d --- /dev/null +++ b/applnk/kde-games.directory @@ -0,0 +1,89 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Games +Name[af]=Speletjies +Name[ar]=ألعاب +Name[az]=Oyunlar +Name[be]=Гульні +Name[bg]=Игри +Name[bn]=খেলা +Name[br]=C'hoarioù +Name[bs]=Igre +Name[ca]=Jocs +Name[cs]=Hry +Name[csb]=Grë +Name[cy]=Gemau +Name[da]=Spil +Name[de]=Spiele +Name[el]=Παιχνίδια +Name[eo]=Ludoj +Name[es]=Juegos +Name[et]=Mängud +Name[eu]=Jokoak +Name[fa]=بازیها +Name[fi]=Pelit +Name[fo]=Spøl +Name[fr]=Jeux +Name[fy]=Amusemint +Name[ga]=Cluichí +Name[gl]=Xogos +Name[he]=משחקים +Name[hi]=खेल +Name[hr]=Igre +Name[hsb]=Hry +Name[hu]=Játékok +Name[id]=Permainan +Name[is]=Leikir +Name[it]=Giochi +Name[ja]=ゲーム +Name[ka]=თამაშები +Name[kk]=Ойындар +Name[km]=ល្បែង +Name[ko]=게임 +Name[lo]=ເກມ +Name[lt]=Žaidimai +Name[lv]=Spēles +Name[mk]=Игри +Name[mn]=Тоглоом +Name[ms]=Permainan +Name[mt]=Logħob +Name[nb]=Spill +Name[nds]=Spelen +Name[ne]=खेल +Name[nl]=Amusement +Name[nn]=Spel +Name[nso]=Dipapadi +Name[oc]=Jogs +Name[pa]=ਖੇਡਾਂ +Name[pl]=Gry +Name[pt]=Jogos +Name[pt_BR]=Jogos +Name[ro]=Jocuri +Name[ru]=Игры +Name[rw]=Imikino +Name[se]=Spealut +Name[sk]=Hry +Name[sl]=Igre +Name[sr]=Игре +Name[sr@Latn]=Igre +Name[ss]=Imidlalo +Name[sv]=Spel +Name[ta]=விளையாட்டுகள் +Name[te]=ఆటలు +Name[tg]=Бозиҳо +Name[th]=เกมส์ +Name[tr]=Oyunlar +Name[tt]=Uyınnar +Name[uk]=Ігри +Name[uz]=Oʻyinlar +Name[uz@cyrillic]=Ўйинлар +Name[ven]=Mitambo +Name[vi]=Trò chơi +Name[wa]=Djeus +Name[xh]=Imidlalo +Name[zh_CN]=游戏 +Name[zh_TW]=遊戲 +Name[zu]=Imidlalo +Icon=package_games + diff --git a/applnk/kde-graphics.directory b/applnk/kde-graphics.directory new file mode 100644 index 000000000..6723618f9 --- /dev/null +++ b/applnk/kde-graphics.directory @@ -0,0 +1,89 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Graphics +Name[af]=Grafieka +Name[ar]=برامج رسم +Name[az]=Qrafika +Name[be]=Графіка +Name[bg]=Графика +Name[bn]=গ্রাফিক্স +Name[br]=Grafikoù +Name[bs]=Grafika +Name[ca]=Gràfics +Name[cs]=Grafika +Name[csb]=Grafika +Name[cy]=Graffeg +Name[da]=Grafik +Name[de]=Graphik +Name[el]=Γραφικά +Name[eo]=Grafiko +Name[es]=Gráficos +Name[et]=Graafika +Name[eu]=Grafikoak +Name[fa]=نگاره‌ها +Name[fi]=Grafiikka +Name[fo]=Teknindi +Name[fr]=Graphisme +Name[fy]=Grafysk +Name[ga]=Grafaic +Name[gl]=Gráficos +Name[he]=גרפיקה +Name[hi]=चित्रकारी +Name[hr]=Grafika +Name[hsb]=Grafika +Name[hu]=Grafikai programok +Name[id]=Grafis +Name[is]=Myndvinnsla +Name[it]=Grafica +Name[ja]=グラフィックス +Name[ka]=გრაფიკა +Name[kk]=Графика +Name[km]=ក្រាហ្វិក +Name[ko]=그래픽 +Name[lo]=ກຣາບຟິກ +Name[lt]=Grafika +Name[lv]=Grafika +Name[mk]=Графика +Name[mn]=График +Name[ms]=Grafik +Name[mt]=Grafika +Name[nb]=Bilde +Name[nds]=Grafik +Name[ne]=ग्राफिक्स +Name[nl]=Grafisch +Name[nn]=Grafikk +Name[nso]=Di-Graphics +Name[oc]=Grafics +Name[pa]=ਚਿੱਤਰਕਲਾ +Name[pl]=Grafika +Name[pt]=Gráficos +Name[pt_BR]=Gráficos +Name[ro]=Grafică +Name[ru]=Графика +Name[rw]=Ibishushanyo +Name[se]=Grafihkka +Name[sk]=Grafika +Name[sl]=Grafika +Name[sr]=Графика +Name[sr@Latn]=Grafika +Name[ss]=Titfombe-mdvwebo +Name[sv]=Grafik +Name[ta]=சித்திரங்கள் +Name[te]=గ్రాఫిక్స్ +Name[tg]=Графика +Name[th]=กราฟิก +Name[tr]=Grafik Programları +Name[tt]=Sızım +Name[uk]=Графіка +Name[uz]=Grafika +Name[uz@cyrillic]=Графика +Name[ven]=Dzigirafu +Name[vi]=Đồ hoạ +Name[wa]=Grafikes +Name[xh]=Imizobo +Name[zh_CN]=图像 +Name[zh_TW]=圖形 +Name[zu]=Imidwebo +Icon=package_graphics + diff --git a/applnk/kde-information.directory b/applnk/kde-information.directory new file mode 100644 index 000000000..75f73e25d --- /dev/null +++ b/applnk/kde-information.directory @@ -0,0 +1,87 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Information +Name[af]=Informasie +Name[ar]=معلومات +Name[az]=Mə'lumat +Name[be]=Інфармацыя +Name[bg]=Информация +Name[bn]=তথ্য +Name[br]=Titouroù +Name[bs]=Informacije +Name[ca]=Informació +Name[cs]=Informace +Name[csb]=Wëdowiédzô +Name[cy]=Gwybodaeth +Name[el]=Πληροφορίες +Name[eo]=Informoj +Name[es]=Información +Name[et]=Info +Name[eu]=Informazioa +Name[fa]=اطلاعات +Name[fi]=Järjestelmätiedot +Name[fo]=Upplýsingar +Name[fr]=Informations +Name[fy]=Ynformaasje +Name[ga]=Eolas +Name[gl]=Información +Name[he]=מידע +Name[hi]=जानकारी +Name[hr]=Podaci +Name[hsb]=Informacija +Name[hu]=Információ +Name[id]=Informasi +Name[is]=Upplýsingar +Name[it]=Informazioni +Name[ja]=情報 +Name[ka]=ინფორმაცია +Name[kk]=Мәлімет +Name[km]=ព័ត៌មាន +Name[ko]=정보 +Name[lo]=ຂໍ້ມູນຕ່າງໆ +Name[lt]=Informacija +Name[lv]=Informācija +Name[mk]=Информации +Name[mn]=Мэдээлэл +Name[ms]=Maklumat +Name[mt]=Informazzjoni +Name[nb]=Informasjon +Name[nds]=Informatschoon +Name[ne]=सूचना +Name[nl]=Informatie +Name[nn]=Informasjon +Name[nso]=Tshedimoso +Name[oc]=Infòrmacion +Name[pa]=ਜਾਣਕਾਰੀ +Name[pl]=Informacje +Name[pt]=Informação +Name[pt_BR]=Informação +Name[ro]=Informații +Name[ru]=Сведения +Name[rw]=Amakuru +Name[se]=Diehtu +Name[sk]=Informácie +Name[sl]=Informacije +Name[sr]=Информације +Name[sr@Latn]=Informacije +Name[ss]=Imininingwane +Name[ta]=தகவல் +Name[te]=సమాచారం +Name[tg]=Иттилоот +Name[th]=ข้อมูลต่างๆ +Name[tr]=Bilgi +Name[tt]=Beldermä +Name[uk]=Інформація +Name[uz]=Maʼlumot +Name[uz@cyrillic]=Маълумот +Name[ven]=Mafhungo +Name[vi]=Thông tin +Name[wa]=Informåcions +Name[xh]=Ulwazi +Name[zh_CN]=信息 +Name[zh_TW]=資訊 +Name[zu]=Ulwazi +Icon=hwinfo +X-KDE-BaseGroup=info +NoDisplay=true diff --git a/applnk/kde-information.menu b/applnk/kde-information.menu new file mode 100644 index 000000000..296bf530a --- /dev/null +++ b/applnk/kde-information.menu @@ -0,0 +1,10 @@ + + + + Information + kde-information.directory + + X-KDE-information + + diff --git a/applnk/kde-internet-terminal.directory b/applnk/kde-internet-terminal.directory new file mode 100644 index 000000000..e6d9977ea --- /dev/null +++ b/applnk/kde-internet-terminal.directory @@ -0,0 +1,88 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Terminal Applications +Name[af]=Terminaal Programme +Name[ar]=تطبيقات مطرافية +Name[az]=Terminal Proqramları +Name[be]=Тэрмінальныя праграмы +Name[bg]=Конзолни програми +Name[bn]=টার্মিনাল অ্যাপলিকেশন +Name[br]=Arloadoù an termenell +Name[bs]=Tekstualni programi +Name[ca]=Aplicacions de terminal +Name[cs]=Terminálové aplikace +Name[csb]=Programë terminala +Name[cy]=Cymhwysiadau Terfynell +Name[da]=Terminalprogrammer +Name[de]=Terminalprogramme +Name[el]=Εφαρμογές τερματικού +Name[eo]=Terminal-Aplikaĵoj +Name[es]=Aplicaciones de terminal +Name[et]=Terminali rakendused +Name[eu]=Terminaleko aplikazioak +Name[fa]=کاربردهای پایانه +Name[fi]=Päätesovellukset +Name[fo]=Tekstforrit +Name[fr]=Applications pour terminal +Name[fy]=Terminal-tapassingen +Name[ga]=Feidhmchláir Teirminéil +Name[gl]=Aplicacións de Terminal +Name[he]=יישומי מסוף +Name[hi]=टर्मिनल अनुप्रयोग +Name[hr]=Terminalske aplikacije +Name[hsb]=Programy za terminal +Name[hu]=Parancsértelmezők +Name[id]=Aplikasi Terminal +Name[is]=Skjáhermiforrit +Name[it]=Applicazioni terminale +Name[ja]=ターミナルアプリケーション +Name[ka]=კონსოლის პროგრამები +Name[kk]=Консоль қолданбалары +Name[km]=កម្មវិធី​ស្ថានីយ +Name[ko]=터미널 프로그램 +Name[lo]=ໂປຣແກຣມເທີມີນໍ +Name[lt]=Terminalinės programos +Name[lv]=Termināla Aplikācijas +Name[mk]=Терминалски апликации +Name[mn]=Терминал-Програм +Name[ms]=Aplikasi Terminal +Name[mt]=Programmi tat-Terminal +Name[nb]=Terminalprogrammer +Name[nds]=Terminalprogrammen +Name[ne]=टर्मिनल अनुप्रयोग +Name[nl]=Terminal-toepassingen +Name[nn]=Terminalprogram +Name[nso]=Ditshumiso tsa Terminal +Name[pa]=ਟਰਮੀਨਲ ਕਾਰਜ +Name[pl]=Programy terminala +Name[pt]=Aplicações de Terminal +Name[pt_BR]=Aplicativos de terminal +Name[ro]=Aplicații de terminal +Name[ru]=Консольные приложения +Name[rw]=Amaporogaramu Nkiriya +Name[se]=Terminálprográmmat +Name[sk]=Terminálové aplikácie +Name[sl]=Terminalski programi +Name[sr]=Терминалски програми +Name[sr@Latn]=Terminalski programi +Name[ss]=Ticelo tesikhungo +Name[sv]=Terminalprogram +Name[ta]=முனைய பயன்பாடுகள் +Name[te]=టర్మినల్ కార్యక్రమములు +Name[tg]=Барномаҳои консол +Name[th]=โปรแกรมเทอร์มินัล +Name[tr]=Uçbirim Uygulamaları +Name[tt]=Terminal Yazılımnarı +Name[uk]=Термінальні програми +Name[uz]=Terminal uchun dasturlar +Name[uz@cyrillic]=Терминал учун дастурлар +Name[ven]=Apulikhesheni ya Theminala +Name[vi]=Trình đầu cuối +Name[wa]=Programes terminås +Name[xh]=Izicelo Zesiphelo sendlela +Name[zh_CN]=终端应用程序 +Name[zh_TW]=終端機程式 +Name[zu]=Abayaleli bangaphandle +Icon=konsole +Version=1.0 diff --git a/applnk/kde-internet.directory b/applnk/kde-internet.directory new file mode 100644 index 000000000..dd0265757 --- /dev/null +++ b/applnk/kde-internet.directory @@ -0,0 +1,48 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Internet +Name[ar]=الإنترنت +Name[az]=İnternet +Name[be]=Інтэрнэт +Name[bg]=Интернет +Name[bn]=ইন্টারনেট +Name[br]=Kenrouedad +Name[cy]=Rhyngrwyd +Name[el]=Διαδίκτυο +Name[eo]=Interreto +Name[fa]=اینترنت +Name[fy]=Ynternet +Name[ga]=Idirlíon +Name[he]=אינטרנט +Name[hi]=इंटरनेट +Name[is]=Internetið +Name[ja]=インターネット +Name[ka]=ინტერნეტი +Name[kk]=Интернет +Name[km]=អ៊ិនធឺណិត +Name[ko]=인터넷 +Name[lt]=Internetas +Name[lv]=Internets +Name[mk]=Интернет +Name[mn]=Интернэт +Name[nb]=Internett +Name[ne]=इन्टरनेट +Name[nn]=Internett +Name[pa]=ਇੰਟਰਨੈੱਟ +Name[ru]=Интернет +Name[rw]=Interineti +Name[se]=Interneahtta +Name[sr]=Интернет +Name[ta]=இணையம் +Name[te]=ఇంటర్నెట్ +Name[tg]=Интернет +Name[th]=อินเทอร์เน็ต +Name[tr]=İnternet +Name[tt]=Päräwez +Name[uk]=Інтернет +Name[uz@cyrillic]=Интернет +Name[wa]=Daegntoele +Name[zh_TW]=網際網路 +Icon=package_network + diff --git a/applnk/kde-main.directory b/applnk/kde-main.directory new file mode 100644 index 000000000..9e1015b29 --- /dev/null +++ b/applnk/kde-main.directory @@ -0,0 +1,80 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Icon=package +Name=KDE Menu +Name[af]=KDE Kieslys +Name[ar]=قائمة KDE +Name[az]=KDE Meyusu +Name[be]=Меню KDE +Name[bg]=Главно меню +Name[bn]=কে.ডি.ই. মেনু +Name[br]=Meuziad KDE +Name[bs]=KDE meni +Name[ca]=Menú de KDE +Name[cs]=Nabídka KDE +Name[csb]=KDE menu +Name[cy]=Dewislen KDE +Name[da]=KDE-Menu +Name[de]=KDE-Menü +Name[el]=Μενού KDE +Name[eo]=KDEa Menuo +Name[es]=Menú de KDE +Name[et]=KDE menüü +Name[eu]=KDE menua +Name[fa]=گزینگان KDE +Name[fi]=Valikko +Name[fr]=Menu de KDE +Name[fy]=KDE-menu +Name[ga]=Roghchlár KDE +Name[gl]=Menú de KDE +Name[he]=תפריט KDE +Name[hi]=केडीई मेन्यू +Name[hr]=KDE izbornik +Name[hsb]=KDE meni +Name[hu]=KDE menü +Name[id]=Menu KDE +Name[is]=KDE valmynd +Name[it]=Menu KDE +Name[ja]=KDE メニュー +Name[ka]=KDE მენიუ +Name[kk]=KDE мәзірі +Name[km]=ម៉ឺនុយ KDE +Name[ko]=KDE 메뉴 +Name[lt]=KDE meniu +Name[lv]=KDE izvēlne +Name[mk]=KDE-мени +Name[mn]=КДЭ цэс +Name[ms]=Menu KDE +Name[mt]=Menu KDE +Name[nb]=KDE-meny +Name[nds]=KDE-Menü +Name[ne]=केडीई मेनु +Name[nl]=KDE-menu +Name[nn]=KDE-meny +Name[pa]=KDE ਮੇਨੂ +Name[pl]=Menu KDE +Name[pt]=Menu KDE +Name[pt_BR]=Menu do KDE +Name[ro]=Meniu KDE +Name[ru]=Меню KDE +Name[rw]=Ibikubiyemo bya KDE +Name[se]=KDE-fállu +Name[sk]=Menu KDE +Name[sl]=Meni KDE +Name[sr]=KDE мени +Name[sr@Latn]=KDE meni +Name[sv]=KDE-meny +Name[ta]=கேடியி பட்டி +Name[te]=కెడిఈ పట్టీ +Name[tg]=Менюи KDE +Name[th]=เมนู KDE +Name[tr]=KDE Menüsü +Name[tt]=KDE Saylağı +Name[uk]=Меню KDE +Name[uz]=KDE menyu +Name[uz@cyrillic]=KDE меню +Name[vi]=Thực đơn KDE +Name[wa]=Dressêye KDE +Name[zh_CN]=KDE 菜单 +Name[zh_TW]=KDE 選單 diff --git a/applnk/kde-more.directory b/applnk/kde-more.directory new file mode 100644 index 000000000..f6f6f4773 --- /dev/null +++ b/applnk/kde-more.directory @@ -0,0 +1,79 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Icon=package +Name=More Applications +Name[af]=Meer Programme +Name[ar]=المزيد من التطبيقات +Name[az]=Daha Çox Proqram +Name[be]=Яшчэ праграмы +Name[bg]=Още програми +Name[bn]=আরো অ্যাপলিকেশন +Name[br]=Ar re all +Name[bs]=Još programa +Name[ca]=Més aplicacions +Name[cs]=Více aplikací +Name[csb]=Wicy programów +Name[cy]=Rhagor o Gymhwysiadau +Name[da]=Flere programmer +Name[de]=Weitere Programme +Name[el]=Περισσότερες εφαρμογές +Name[eo]=Pluaj aplikaĵoj +Name[es]=Más aplicaciones +Name[et]=Muud rakendused +Name[eu]=Aplikazio gehiago +Name[fa]=کاربردهای بیشتر +Name[fi]=Lisää sovelluksia +Name[fr]=Autres applications +Name[fy]=Mear programma's +Name[ga]=Feidhmchláir Breise +Name[gl]=Máis Aplicacións +Name[he]=עוד יישומים +Name[hi]=और अधिक अनुप्रयोग +Name[hr]=Više aplikacija +Name[hsb]=Wjace programow +Name[hu]=További alkalmazások +Name[id]=Aplikasi Lain +Name[is]=Fleiri forrit +Name[it]=Altri programmi +Name[ja]=その他のアプリケーション +Name[ka]=დამატებითი პროგრამები +Name[kk]=Басқа қолданбалар +Name[km]=កម្មវិធីបន្ថែម​ទៀត +Name[ko]=더 많은 프로그램 +Name[lt]=Daugiau programų +Name[lv]=Vairāk aplikāciju +Name[mk]=Уште апликации +Name[ms]=Aplikasi Lain +Name[mt]=Programmi KDE +Name[nb]=Flere programmer +Name[nds]=Mehr Programmen +Name[ne]=धेरै अनुप्रयोग +Name[nl]=Meer programma's +Name[nn]=Fleire program +Name[pa]=ਹੋਰ ਕਾਰਜ +Name[pl]=Więcej programów +Name[pt]=Mais Aplicações +Name[pt_BR]=Mais Aplicativos +Name[ro]=Alte aplicații +Name[ru]=Дополнительные приложения +Name[rw]=Amaporogaramu Arenze +Name[se]=Eanet prográmmat +Name[sk]=Ďalšie aplikácie +Name[sl]=Več programov +Name[sr]=Још програма +Name[sr@Latn]=Još programa +Name[sv]=Fler program +Name[ta]=அதிக பயன்பாடுகள் +Name[te]=మరికొన్ని కార్యక్రమములు +Name[tg]=Барномаҳои иловагӣ +Name[th]=แอพพลิเคชันอื่นๆ +Name[tr]=Daha Fazla Uygulama +Name[tt]=Başqa Yazılımnar +Name[uk]=Інші програми +Name[uz]=Boshqa dasturlar +Name[uz@cyrillic]=Бошқа дастурлар +Name[vi]=Ứng dụng Thêm nữa +Name[wa]=Co ds ôtes programes +Name[zh_CN]=更多应用程序 +Name[zh_TW]=更多應用程式 diff --git a/applnk/kde-multimedia.directory b/applnk/kde-multimedia.directory new file mode 100644 index 000000000..1561c32d4 --- /dev/null +++ b/applnk/kde-multimedia.directory @@ -0,0 +1,65 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Multimedia +Name[ar]=الوسائط المتعددة +Name[az]=Multimediya +Name[be]=Мультымедыя +Name[bg]=Мултимедия +Name[bn]=মাল্টিমিডিয়া +Name[br]=Liesvedia +Name[bs]=Multimedija +Name[ca]=Multimèdia +Name[cs]=Multimédia +Name[csb]=Mùltimedia +Name[cy]=Amlgyfryngau +Name[da]=Multimedie +Name[el]=Πολυμέσα +Name[eo]=Plurmedio +Name[et]=Multimeedia +Name[fa]=چند رسانه‌ای +Name[fo]=Fleirmiðla +Name[fr]=Multimédia +Name[ga]=Ilmheáin +Name[he]=מולטימדיה +Name[hi]=मल्टीमीडिया +Name[hr]=Multimedija +Name[hsb]=Multimedije +Name[hu]=Multimédia +Name[is]=Margmiðlun +Name[ja]=マルチメディア +Name[ka]=მულტიმედია +Name[kk]=Мультимедиа +Name[km]=ពហុព័ត៌មាន +Name[ko]=멀티미디어 +Name[lo]=ເມົາຕິມີເດຍ +Name[lv]=Multimēdija +Name[mk]=Мултимедија +Name[mn]=Мултимедиа +Name[ne]=मल्टिमिडिया +Name[nso]=Media wa Bontshi +Name[pa]=ਮਲਟੀਮੀਡਿਆ +Name[pt]=Multimédia +Name[pt_BR]=Multimídia +Name[ru]=Мультимедиа +Name[rw]=Mutwaramakuru +Name[sk]=Multimédiá +Name[sl]=Večpredstavnost +Name[sr]=Мултимедија +Name[sr@Latn]=Multimedija +Name[ss]=Tinhlobonhlobo-tetindzaba +Name[ta]=பல்லூடகம் +Name[te]=బహుళ మాద్యమం +Name[tg]=Мултимедия +Name[th]=มัลติมีเดีย +Name[tr]=Çokluortam +Name[uk]=Мультимедіа +Name[uz@cyrillic]=Мултимедиа +Name[ven]=Zwimwumwusi +Name[vi]=Đa phương tiện +Name[xh]=Iindlela ezininzi zokwenza +Name[zh_CN]=多媒体 +Name[zh_TW]=多媒體 +Name[zu]=Onozindaba abaningi +Icon=package_multimedia + diff --git a/applnk/kde-office.directory b/applnk/kde-office.directory new file mode 100644 index 000000000..f47eb91fc --- /dev/null +++ b/applnk/kde-office.directory @@ -0,0 +1,86 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Office +Name[af]=Kantoor +Name[ar]=المكتب +Name[az]=Offis +Name[be]=Офіс +Name[bg]=Офис +Name[bn]=অফিস +Name[br]=Burev +Name[bs]=Uredske aplikacije +Name[ca]=Oficina +Name[cs]=Kancelář +Name[csb]=Biuro +Name[cy]=Swyddfa +Name[da]=Kontor +Name[de]=Büroprogramme +Name[el]=Γραφείο +Name[eo]=Laborejo +Name[es]=Oficina +Name[et]=Kontoritöö +Name[eu]=Bulegoa +Name[fa]=اداره +Name[fi]=Toimisto-ohjelmat +Name[fo]=Skrivstova +Name[fr]=Bureautique +Name[fy]=Kantoartapassingen +Name[ga]=Oifig +Name[gl]=Ofimática +Name[he]=יישומים משרדיים +Name[hi]=कार्यालय +Name[hr]=Ured +Name[hsb]=Běrowowe programy +Name[hu]=Irodai alkalmazások +Name[is]=Skrifstofuforrit +Name[it]=Ufficio +Name[ja]=オフィス +Name[ka]=ოფისი +Name[kk]=Офис +Name[km]=ការិយាល័យ +Name[ko]=사무용 도구 +Name[lo]=ໂປຣແກຣມຊຸດສຳນັກງານ +Name[lt]=Biuro programos +Name[lv]=Birojs +Name[mk]=Канцеларија +Name[mn]=Албан програм +Name[ms]=Pejabat +Name[mt]=Uffiċċju +Name[nb]=Kontor +Name[nds]=Kontoor +Name[ne]=कार्यालय +Name[nl]=Kantoortoepassingen +Name[nn]=Kontor +Name[nso]=Ofisi +Name[oc]=Burèu +Name[pa]=ਦਫ਼ਤਰ +Name[pl]=Biuro +Name[pt]=Escritório +Name[pt_BR]=Escritório +Name[ro]=Aplicații birotică +Name[ru]=Офис +Name[rw]=Ofise +Name[se]=Kántuvra +Name[sk]=Kancelária +Name[sl]=Pisarna +Name[ss]=Lihhovisi +Name[sv]=Kontorsprogram +Name[ta]=அலுவலகம் +Name[te]=కార్యాలయము +Name[tg]=Офис +Name[th]=โปรแกรมชุดสำนักงาน +Name[tr]=Ofis +Name[tt]=Eşxänä +Name[uk]=Офіс +Name[uz]=Idora uchun dasturlar +Name[uz@cyrillic]=Идора учун дастурлар +Name[ven]=Ofisi +Name[vi]=Văn phòng +Name[wa]=Buro +Name[xh]=Ofisi +Name[zh_CN]=办公 +Name[zh_TW]=辦公軟體 +Name[zu]=Ihhofisi +Icon=package_wordprocessing +SortOrder=koshell.desktop,kword.desktop,kspread.desktop,kpresenter.desktop diff --git a/applnk/kde-science.directory b/applnk/kde-science.directory new file mode 100644 index 000000000..63d17fcf6 --- /dev/null +++ b/applnk/kde-science.directory @@ -0,0 +1,80 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Icon=kcmdf +Name=Science & Math +Name[af]=Wetenskap & Wiskunde +Name[ar]=العلوم و الرياضيات +Name[az]=Elm və Riyaziyyat +Name[be]=Навука і матэматыка +Name[bg]=Математика +Name[bn]=বিজ্ঞান এবং গণিত +Name[br]=Skiant ha Jedoniel +Name[bs]=Nauka i matematika +Name[ca]=Ciència i Matemàtiques +Name[cs]=Věda a matematika +Name[csb]=Ùczbòwé +Name[cy]=Gwyddoniaeth a Mathemateg +Name[da]=Naturvidenskab & matematik +Name[de]=Wissenschaft & Mathematik +Name[el]=Επιστήμη & Μαθηματικά +Name[en_GB]=Science & Maths +Name[eo]=Scienco kaj Matematiko +Name[es]=Ciencia y matemáticas +Name[et]=Teadus +Name[eu]=Zientzia eta matematikaa +Name[fa]=علوم و ریاضی +Name[fi]=Tiede ja matematiikka +Name[fr]=Science et mathématiques +Name[fy]=Wittenskiplik en wiskunde +Name[ga]=Eolaíocht & Matamaitic +Name[gl]=Ciencia e Matemáticas +Name[he]=מדע ומתמטיקה +Name[hi]=विज्ञान और गणित +Name[hr]=Znanost i matematika +Name[hsb]=Matematika & Wědomosć +Name[hu]=Tudományok, matematika +Name[id]=Ilmu Pengetahuan & Matematika +Name[is]=Vísindi og stærðfræði +Name[it]=Scienza e matematica +Name[ja]=サイエンス & 数学 +Name[ka]=მეცნიერება და მათემატიკა +Name[kk]=Ғылыми және математикалық +Name[km]=វិទ្យាសាស្ត្រ & គណិតវិទ្យា +Name[ko]=과학과 수학 +Name[lt]=Mokslas ir matematika +Name[lv]=Zinātne un Matemātika +Name[mk]=Наука и математика +Name[ms]=Matematik & Sains +Name[mt]=Xjenza u Matematika +Name[nb]=Vitenskap og matematikk +Name[nds]=Wetenschap & Mathematik +Name[ne]=विज्ञान र गणीत +Name[nl]=Wetenschap en wiskunde +Name[nn]=Vitskap og matematikk +Name[pa]=ਵਿਗਿਆਨ ਤੇ ਗਣਿਤ +Name[pl]=Naukowe +Name[pt]=Ciência e Matemática +Name[pt_BR]=Ciências & Matemática +Name[ro]=Știință și matematică +Name[ru]=Наука +Name[rw]=Ikoranabuhanga & Imibare +Name[se]=Dieđa ja matematihkka +Name[sk]=Veda +Name[sl]=Znanost in matematika +Name[sr]=Наука и математика +Name[sr@Latn]=Nauka i matematika +Name[sv]=Vetenskap och matematik +Name[ta]=அறிவியல் & கணிதம் +Name[te]=విజ్ఞానం & గణితం +Name[tg]=Илм ва математика +Name[th]=วิทยาศาสตร์และคณิตศาสตร์ +Name[tr]=Bilim ve Matematik +Name[tt]=Fän & Sanaw +Name[uk]=Наука і математика +Name[uz]=Fan va Matematika +Name[uz@cyrillic]=Фан ва Математика +Name[vi]=Khoa học & Toán học +Name[wa]=Siyinces et matematikes +Name[zh_CN]=科学和数学 +Name[zh_TW]=科學與數學 diff --git a/applnk/kde-screensavers.menu b/applnk/kde-screensavers.menu new file mode 100644 index 000000000..c52bf830d --- /dev/null +++ b/applnk/kde-screensavers.menu @@ -0,0 +1,10 @@ + + + + ScreenSavers + kde-system-screensavers.directory + + X-KDE-ScreenSaver + + diff --git a/applnk/kde-settings-accessibility.directory b/applnk/kde-settings-accessibility.directory new file mode 100644 index 000000000..97ff1ab6b --- /dev/null +++ b/applnk/kde-settings-accessibility.directory @@ -0,0 +1,85 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Regional & Accessibility +Name[af]=Streek & Toeganklikheid +Name[ar]=الإقليمي وتسهيل الوصول +Name[az]=Regional Qurğular & Yetişmə Qabiliyyəti +Name[be]=Рэгіянальныя настаўленні і даступнасць +Name[bg]=Локализация +Name[bn]=আঞ্চলিক এবং সহায়ক প্রযুক্তি +Name[br]=Rannvro hag Haezadusted +Name[bs]=Regionalno i pristupačnost +Name[ca]=Regional i accessibilitat +Name[cs]=Místní zvyklosti a zpřístupnění +Name[csb]=Òbéńdowé ë przistãpnosc +Name[cy]=Rhanbarthol & Hygyrchedd +Name[da]=Region & Tilgængelighed +Name[de]=Regionaleinstellungen & Zugangshilfen +Name[el]=Περιοχή & Προσιτότητα +Name[eo]=Regiono & Alirebleco +Name[es]=Regional y accesibilidad +Name[et]=Hõlbustus +Name[eu]=Eskualdea eta erabilerraztasuna +Name[fa]=منطقه‌ای و دستیابی‌پذیری +Name[fi]=Alueellisuus ja käytettävyys +Name[fr]=Régionalisation et accessibilité +Name[fy]=Regio en tagonklikens +Name[ga]=Réigiúnach agus Insroichteacht +Name[gl]=Rexional e Acesibilidade +Name[he]=הגדרות אזוריות ונגישות +Name[hi]=क्षेत्रीय व भाषायी पहुँच +Name[hr]=Regionalnost i pristupačnost +Name[hsb]=Kraj & Přistupnosć +Name[hu]=Nyelv, kezelési segítség +Name[is]=Svæðisbundnar stillingar og aðgengi +Name[it]=Regionali e Accesso facilitato +Name[ja]=地域 & アクセシビリティ +Name[ka]=რეგიონალური და სეპციალური შესაძლებლობები +Name[kk]=Жергілікті және Арнаулы мүмкіндіктер +Name[km]=តំបន់ & មធ្យោបាយ​ងាយស្រួល +Name[ko]=지역과 내게 필요한 설정 +Name[lo]=ຄວາມສາມາດໃນການໃຊ້ງານ +Name[lt]=Regionai bei prieinamumas +Name[lv]=Reģionāls un Pieejamība +Name[mk]=Регионалност и пристапливост +Name[mn]=Бүслүүр-тохируулга & Хэрэглэх тохь +Name[ms]=Pemudahcapai & Tetapan Tempatan +Name[mt]=Reġjonali u Aċċessibiltà +Name[nb]=Regionalt og tilgjengelighet +Name[nds]=Regioon & Behinnertenhülp +Name[ne]=क्षेत्रीय र पहुँचयोग्य +Name[nl]=Regio en toegankelijkheid +Name[nn]=Regional og tilgjenge +Name[nso]=Ya Naga & Tsenelo +Name[pa]=ਖੇਤਰੀ ਅਤੇ ਸਹੂਲਤਾਂ +Name[pl]=Regionalne i dostępność +Name[pt]=Regional e Acessibilidade +Name[pt_BR]=Regional & Acessibilidade +Name[ro]=Regional și accesibilitate +Name[ru]=Региональные и специальные возможности +Name[rw]=By'agace & Ukugerwaho +Name[se]=Báikkálaš ja álkkibut geavaheapmi +Name[sk]=Prístupnosť a regionálne nastavenie +Name[sl]=Regionalnost in dostopnost +Name[sr]=Регија и приступачност +Name[sr@Latn]=Regija i pristupačnost +Name[ss]=Kutfolakala kalula & kwesifundza +Name[sv]=Region och handikappstöd +Name[ta]=நாடும் & அணுகலும் +Name[te]=ప్రాంతియతా & అందుబాటు +Name[tg]=Имкониятҳои минтақавӣ +Name[th]=เขตพื้นที่และการใช้งาน +Name[tr]=Bölgesel ve Erişilebilirlik +Name[tt]=Cirläşterü & İreşülek +Name[uk]=Локалізація та доступність +Name[uz]=Regional va qulayliklar +Name[uz@cyrillic]=Регионал ва қулайликлар +Name[ven]=U Dzhenea ha vhupo +Name[vi]=Hỗ trợ quốc tế & Hỗ trợ người tàn tật +Name[wa]=Redjonå & Accessibilité +Name[xh]=Ummandla & Nofumaneko +Name[zh_CN]=区域和辅助功能 +Name[zh_TW]=區域性與易用性 +Name[zu]=Okwesifunda & Igunya lokungena +Icon=locale diff --git a/applnk/kde-settings-components.directory b/applnk/kde-settings-components.directory new file mode 100644 index 000000000..4c5e37281 --- /dev/null +++ b/applnk/kde-settings-components.directory @@ -0,0 +1,85 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=KDE Components +Name[af]=KDE Komponente +Name[ar]=مكوّنات KDE +Name[az]=KDE Tərkib Hissələri +Name[be]=Кампаненты KDE +Name[bg]=Компоненти +Name[bn]=কে.ডি.ই-র বিভিন্ন উপাদান +Name[br]=Parzhioù KDE +Name[bs]=KDE komponente +Name[ca]=Components del KDE +Name[cs]=Komponenty KDE +Name[csb]=Dzéle KDE +Name[cy]= Cydrannau KDE +Name[da]=KDE-komponenter +Name[de]=KDE-Komponenten +Name[el]=Συστατικά του KDE +Name[eo]=KDEaj komponentoj +Name[es]=Componentes de KDE +Name[et]=KDE komponendid +Name[eu]=KDE osagaiak +Name[fa]=مؤلفه‌های KDE +Name[fi]=KDE-komponentit +Name[fr]=Composants de KDE +Name[fy]=KDE-compeninten +Name[ga]=Comhpháirteanna KDE +Name[gl]=Compoñentes de KDE +Name[he]=רכיבי KDE +Name[hi]=केडीई के घटक +Name[hr]=KDE komponente +Name[hsb]=KDE-komponenty +Name[hu]=KDE-komponensek +Name[id]=Komponen KDE +Name[is]=KDE einingar +Name[it]=Componenti di KDE +Name[ja]=KDE コンポーネント +Name[ka]=KDE კომპონენტები +Name[kk]=KDE компоненттер +Name[km]=សមាសភាគ KDE +Name[ko]=KDE 구성요소 +Name[lo]=ຄອມໂພເນນຂອງ KDE +Name[lt]=KDE komponentai +Name[lv]=KDE Komponentes +Name[mk]=Компоненти на KDE +Name[mn]=КДЭ-Бүрэлдхүүнүүд +Name[ms]=Komponen KDE +Name[nb]=KDE-komponenter +Name[nds]=KDE-Komponenten +Name[ne]=KDE अवयव +Name[nl]=KDE-componenten +Name[nn]=KDE-komponent +Name[nso]=Dikagare tsa KDE +Name[pa]=KDE ਭਾਗ +Name[pl]=Składniki KDE +Name[pt]=Componentes do KDE +Name[pt_BR]=Componentes do KDE +Name[ro]=Componente KDE +Name[ru]=Компоненты +Name[rw]=Inyangingo za KDE +Name[se]=KDE-oasit +Name[sk]=Komponenty KDE +Name[sl]=Komponente KDE +Name[sr]=KDE компоненте +Name[sr@Latn]=KDE komponente +Name[ss]=Tincenye te KDE +Name[sv]=KDE-komponenter +Name[ta]=KDE கூறுகள் +Name[te]=కెడిఈ అంశాలు +Name[tg]=Қисматҳои KDE +Name[th]=ส่วนประกอบของ KDE +Name[tr]=KDE Bileşenleri +Name[tt]=KDE Öleşläre +Name[uk]=Компоненти KDE +Name[uz]=KDE komponentlari +Name[uz@cyrillic]=KDE компонентлари +Name[ven]=Zwipida zwa KDE +Name[vi]=Thành phần của KDE +Name[wa]=Componints di KDE +Name[xh]=Izinto ze KDE +Name[zh_CN]=KDE 组件 +Name[zh_TW]=KDE 元件 +Name[zu]= Amalunga e-KDE +Icon=blockdevice diff --git a/applnk/kde-settings-desktop.directory b/applnk/kde-settings-desktop.directory new file mode 100644 index 000000000..e961bb763 --- /dev/null +++ b/applnk/kde-settings-desktop.directory @@ -0,0 +1,80 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Desktop +Name[af]=Werkskerm +Name[ar]=سطح المكتب +Name[az]=Masa Üstü +Name[be]=Працоўны стол +Name[bg]=Работен плот +Name[bn]=ডেস্কটপ +Name[br]=Gorretaol +Name[bs]=Radna površina +Name[ca]=Escriptori +Name[cs]=Pracovní plocha +Name[csb]=Pùlt +Name[cy]=Penbwrdd +Name[de]=Arbeitsfläche +Name[el]=Επιφάνεια εργασίας +Name[eo]=Tabulo +Name[es]=Escritorio +Name[et]=Töölaud +Name[eu]=Mahaigaina +Name[fa]=رومیزی +Name[fi]=Työpöytä +Name[fo]=Skriviborð +Name[fr]=Bureau +Name[fy]=Buroblêd +Name[ga]=Deasc +Name[gl]=Escritorio +Name[he]=שולחן עבודה +Name[hi]=डेस्कटॉप +Name[hr]=Radna površina +Name[hsb]=Dźěłowy powjerch +Name[hu]=Munkaasztal +Name[is]=Skjáborð +Name[ja]=デスクトップ +Name[ka]=სამუშაო დაფა +Name[kk]=Жұмыс үстелі +Name[km]=ផ្ទៃតុ +Name[ko]=데스크톱 +Name[lo]=ພື້ນທີ່ເຮັດວງກ +Name[lt]=Darbastalis +Name[lv]=Darbvirsma +Name[mk]=Работна површина +Name[mn]=Ажлын тавцан +Name[ms]=Ruang Kerja +Name[nb]=Skrivebord +Name[nds]=Schriefdisch +Name[ne]=डेस्कटप +Name[nl]=Bureaublad +Name[nn]=Skrivebord +Name[oc]=BurèU +Name[pa]=ਵੇਹੜਾ +Name[pl]=Pulpit +Name[pt]=Ambiente de Trabalho +Name[pt_BR]=Área de Trabalho +Name[ru]=Рабочий стол +Name[rw]=Ibiro +Name[se]=Čállinbeavdi +Name[sk]=Plocha +Name[sl]=Namizje +Name[sr]=Радна површина +Name[sr@Latn]=Radna površina +Name[ss]=Desktop +Name[sv]=Skrivbord +Name[ta]=மேல்மேசை +Name[te]=రంగస్ఠలం +Name[tg]=Мизи корӣ +Name[th]=พื้นที่ทำงาน +Name[tr]=Masaüstü +Name[tt]=Östäl +Name[uk]=Стільниця +Name[uz]=Ish stoli +Name[uz@cyrillic]=Иш столи +Name[ven]=Desikithopo +Name[vi]=Màn hình nền +Name[wa]=Sicribanne +Name[zh_CN]=桌面 +Name[zh_TW]=桌面 +Icon=desktop diff --git a/applnk/kde-settings-hardware.directory b/applnk/kde-settings-hardware.directory new file mode 100644 index 000000000..2941d4e4f --- /dev/null +++ b/applnk/kde-settings-hardware.directory @@ -0,0 +1,59 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Hardware +Name[af]=Hardeware +Name[ar]=العتاد +Name[be]=Апаратнае забеспячэнне +Name[bg]=Хардуер +Name[bn]=হার্ডওয়্যার +Name[br]=Periantel +Name[bs]=Hardver +Name[csb]=Nôrzãdza +Name[cy]=Caledwedd +Name[el]=Υλικό +Name[eo]=Aparataro +Name[et]=Riistvara +Name[fa]=سخت‌افزار +Name[fi]=Laitteisto +Name[fr]=Matériel +Name[ga]=Crua-Earraí +Name[he]=חומרה +Name[hr]=Hardver +Name[hu]=Hardver +Name[id]=Perangkat Keras +Name[is]=Vélbúnaður +Name[ja]=ハードウェア +Name[ka]=მოწყობილობები +Name[kk]=Жабдықтар +Name[km]=ផ្នែក​រឹង +Name[ko]=하드웨어 +Name[lt]=Aparatinė įranga +Name[mk]=Хардвер +Name[ms]=Perkakasan +Name[nb]=Maskinvare +Name[ne]=हार्डवेयर +Name[nn]=Maskinvare +Name[pa]=ਜੰਤਰ +Name[pl]=Sprzęt +Name[ru]=Оборудование +Name[rw]=Icyuma +Name[se]=Mašiidnagálvu +Name[sl]=Strojna oprema +Name[sr]=Хардвер +Name[sr@Latn]=Hardver +Name[sv]=Hårdvara +Name[ta]=வன்பொருள் +Name[te]=హార్డ్ వేర్ +Name[tg]=Сахтафзор +Name[th]=อุปกรณ์ภายในเครื่อง +Name[tr]=Donanım +Name[tt]=Cıhazlar +Name[uk]=Обладнання +Name[uz]=Asbob-uskunalar +Name[uz@cyrillic]=Асбоб-ускуналар +Name[vi]=Phần cứng +Name[wa]=Éndjolreye +Name[zh_CN]=硬件 +Name[zh_TW]=硬體 +Icon=input_devices_settings diff --git a/applnk/kde-settings-looknfeel.directory b/applnk/kde-settings-looknfeel.directory new file mode 100644 index 000000000..713a575e7 --- /dev/null +++ b/applnk/kde-settings-looknfeel.directory @@ -0,0 +1,86 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Appearance & Themes +Name[af]=Voorkoms & Temas +Name[ar]=المظهر و السمات +Name[az]=Görünüş & Örtüklər +Name[be]=Вонкавы выгляд і тэмы +Name[bg]=Външен вид +Name[bn]=চেহারা এবং থীম +Name[br]=Neuziadur ha gizioù +Name[bs]=Izgled i teme +Name[ca]=Aparença i temes +Name[cs]=Vzhled a motivy +Name[csb]=Wëzdrzatk ë témë +Name[cy]=Golwg a Themau +Name[da]=Udseende & Temaer +Name[de]=Erscheinungsbild +Name[el]=Εμφάνιση & Θέματα +Name[eo]=Aspekto & Etosoj +Name[es]=Aspecto y temas +Name[et]=Välimus ja teemad +Name[eu]=Itxura eta gaiak +Name[fa]=ظاهر و چهره‌ها +Name[fi]=Ulkonäkö ja teemat +Name[fr]=Apparence et thèmes +Name[fy]=Uterlik en tema's +Name[ga]=Cuma agus Téamaí +Name[gl]=Apariencia e Temas +Name[he]=מראה וערכות נושא +Name[hi]=शक्ल-सूरत एवं प्रसंग +Name[hr]=Izgled i teme +Name[hsb]=Napohlad & Temy +Name[hu]=Megjelenés, témák +Name[id]=Penampilan dan Tema +Name[is]=Viðmót og útlit +Name[it]=Aspetto e Temi +Name[ja]=外観 & テーマ +Name[ka]=გარეგნობა და თემები +Name[kk]=Көрініс пен нақыштар +Name[km]=រូបរាង & ស្បែក +Name[ko]=모양과 테마 +Name[lo]=ຝັຣງເສດສ໌ +Name[lt]=Išvaizda ir temos +Name[lv]=Izskats un Tēmas +Name[mk]=Изглед и теми +Name[mn]=Харагдалт & хэлбэр +Name[ms]=Tema dan Penampilan +Name[mt]=Apparenza u Temi +Name[nb]=Utseende og temaer +Name[nds]=Utsehn & Muster +Name[ne]=दृश्य र विषयवस्तु +Name[nl]=Uiterlijk en thema's +Name[nn]=Utsjånad og tema +Name[nso]=Ponagalo & Melaetsa +Name[pa]=ਦਿੱਖ ਅਤੇ ਸਰੂਪ +Name[pl]=Wygląd i motywy +Name[pt]=Aparência e Temas +Name[pt_BR]=Aparência & Temas +Name[ro]=Aspect și tematici +Name[ru]=Внешний вид и темы +Name[rw]=Imigaragarire & Insanganyamatsiko +Name[se]=Fárda ja fáttát +Name[sk]=Vzhľad a témy +Name[sl]=Videz in teme +Name[sr]=Изглед и теме +Name[sr@Latn]=Izgled i teme +Name[ss]=Kubukeka & kwendzikimba +Name[sv]=Utseende och teman +Name[ta]=தோற்றம் & உருக்கரு +Name[te]=రూపం ఇంకా వైవిద్యాంశాలు +Name[tg]=Намуди зоҳирӣ ва услуб +Name[th]=รูปแบบและชุดตกแต่ง +Name[tr]=Görünüm ve Temalar +Name[tt]=Küreneş & Tışlaw +Name[uk]=Вигляд та теми +Name[uz]=Tashqi koʻrinishi va mavzular +Name[uz@cyrillic]=Ташқи кўриниши ва мавзулар +Name[ven]=Mbonalelo & Dzithero +Name[vi]=Diện mạo & Sắc thái +Name[wa]=Rivnance & Tinmes +Name[xh]=Ubonakalo Nemixholo +Name[zh_CN]=外观和主题 +Name[zh_TW]=外觀與主題 +Name[zu]=Ukubukeka & Izingqikithi +Icon=looknfeel diff --git a/applnk/kde-settings-network.directory b/applnk/kde-settings-network.directory new file mode 100644 index 000000000..df310163f --- /dev/null +++ b/applnk/kde-settings-network.directory @@ -0,0 +1,86 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Internet & Network +Name[af]=Internet & Netwerk +Name[ar]=الإنترنت و الشبكة +Name[az]=İnternet & Şəbəkə +Name[be]=Інтэрнэт і сетка +Name[bg]=Интернет и мрежа +Name[bn]=ইন্টারনেট এবং নেটওয়ার্ক +Name[br]=Kenrouedad ha Rouedad +Name[bs]=Internet i mreža +Name[ca]=Internet i xarxa +Name[cs]=Internet a síť +Name[csb]=Internet ë séc +Name[cy]=Rhyngrwyd & Rhwydwaith +Name[da]=Internet & Netværk +Name[de]=Internet & Netzwerk +Name[el]=Διαδίκτυο & Δίκτυο +Name[eo]=Reto & Interreto +Name[es]=Internet y Red +Name[et]=Internet ja võrk +Name[eu]=Internet eta sarea +Name[fa]=اینترنت و شبکه +Name[fi]=Internet ja verkko +Name[fr]=Internet et réseau +Name[fy]=Ynternet en netwurk +Name[ga]=Idirlíon agus Líonra +Name[gl]=Internet e Rede +Name[he]=אינטרנט ורשתות +Name[hi]=इंटरनेट तथा नेटवर्क +Name[hr]=Internet i mreža +Name[hsb]=Internet & Syć +Name[hu]=Hálózat, internet +Name[id]=Internet dan Jaringan +Name[is]=Staðarnet og Internetið +Name[it]=Internet e Rete +Name[ja]=インターネット & ネットワーク +Name[ka]=ქსელი და ინტერნეტი +Name[kk]=Интернет және желі +Name[km]=អ៊ិនធឺណិត & បណ្ដាញ +Name[ko]=인터넷과 네트워크 +Name[lo]=ອີນເຕີເນັດ +Name[lt]=Internetas ir tinklas +Name[lv]=Internets un Tīkli +Name[mk]=Интернет и мрежи +Name[mn]=Интернэт & Сүлжээ +Name[ms]=Internet & Jaringan +Name[mt]=Internet u Network +Name[nb]=Internett og nettverk +Name[nds]=Internet & Nettwark +Name[ne]=इन्टरनेट र सञ्जाल +Name[nl]=Internet en netwerk +Name[nn]=Internett og nettverk +Name[nso]=Internet & Kgokagano +Name[pa]=ਇੰਟਰਨੈੱਟ ਅਤੇ ਨੈੱਟਵਰਕ +Name[pl]=Internet i sieć +Name[pt]=Internet e Rede +Name[pt_BR]=Internet & Rede +Name[ro]=Internet și rețea +Name[ru]=Сеть и Интернет +Name[rw]=Interineti & Urusobemiyoboro +Name[se]=Interneahtta ja fierpmádat +Name[sk]=Internet a sieť +Name[sl]=Internet in omrežje +Name[sr]=Интернет и мрежа +Name[sr@Latn]=Internet i mreža +Name[ss]=Internet & luchungechunge +Name[sv]=Internet och nätverk +Name[ta]=இணையம் & வலையமைப்பு +Name[te]=ఇంటర్నెట్ & నెట్వర్క్ +Name[tg]=Интернет ва шабақа +Name[th]=อินเทอร์เน็ตและเครือข่าย +Name[tr]=İnternet ve Ağ Ayarları +Name[tt]=Päräwez & Çeltär +Name[uk]=Інтернет та мережа +Name[uz]=Internet va tarmoq +Name[uz@cyrillic]=Интернет ва тармоқ +Name[ven]=Inthanete & Vhukwamani +Name[vi]=Internet & Mạng +Name[wa]=Rantoele & Daegntoele +Name[xh]=Internet & Nomsebenzi womnatha +Name[zh_CN]=Internet 和网络 +Name[zh_TW]=網路 +Name[zu]=Internet & Uxhumano olusakazekile +Icon=network diff --git a/applnk/kde-settings-peripherals.directory b/applnk/kde-settings-peripherals.directory new file mode 100644 index 000000000..01bb7623f --- /dev/null +++ b/applnk/kde-settings-peripherals.directory @@ -0,0 +1,87 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Peripherals +Name[af]=Randapperatuur +Name[ar]=الأجهزة المحيطية +Name[az]=Avadanlıq +Name[be]=Перыферыя +Name[bg]=Периферия +Name[bn]=পেরিফেরাল +Name[br]=Trobarzhelloù +Name[bs]=Vanjski uređaji +Name[ca]=Perifèrics +Name[cs]=Periférie +Name[csb]=Periferëjné ùrzãdzenia +Name[cy]=Perifferolion +Name[da]=Tilkoblinger +Name[de]=Angeschlossene Geräte +Name[el]=Περιφερειακά +Name[eo]=Periferaĵoj +Name[es]=Periféricos +Name[et]=Välisseadmed +Name[eu]=Periferikoak +Name[fa]=وسایل جانبی +Name[fi]=Laitteet +Name[fo]=Úteindir +Name[fr]=Périphériques +Name[fy]=Râneapparaten +Name[ga]=Forimeallaigh +Name[gl]=Periféricos +Name[he]=ציוד היקפי +Name[hi]=सहायक पुरजे +Name[hr]=Periferni uređaji +Name[hsb]=Periferija +Name[hu]=Perifériák +Name[is]=Jaðartæki +Name[it]=Periferiche +Name[ja]=周辺機器 +Name[ka]=პერიფერიული +Name[kk]=Периферия +Name[km]=គ្រឿង​កុំព្យូទ័រ +Name[ko]=주변 장치 +Name[lo]=ອຸປະກອນຕໍ່ພວງ +Name[lt]=Periferija +Name[lv]=Perifērija +Name[mk]=Периферни уреди +Name[mn]=Залгаатай төхөөрөмжүүд +Name[ms]=Perkakasan +Name[mt]=Apparat +Name[nb]=Tilleggsenheter +Name[nds]=Reedschappen +Name[ne]=परिवृत्तीय +Name[nl]=Randapparaten +Name[nn]=Tilleggseiningar +Name[nso]=Ditswelantle +Name[oc]=Periferics +Name[pa]=ਸਹਾਇਕ ਜੰਤਰ +Name[pl]=Urządzenia peryferyjne +Name[pt]=Periféricos +Name[pt_BR]=Periféricos +Name[ro]=Periferice +Name[ru]=Периферия +Name[rw]=Ibyinyuma +Name[se]=Ovttadagat +Name[sk]=Periférie +Name[sl]=Strojni dodatki +Name[sr]=Периферије +Name[sr@Latn]=Periferije +Name[ss]=Ema-peripherals +Name[sv]=Kringutrustning +Name[ta]=கருவிகள் +Name[te]=పరికరాలు +Name[tg]=Дастгоҳҳои лозимӣ +Name[th]=อุปกรณ์ต่อพ่วง +Name[tr]=Çevre Birimleri +Name[tt]=Cıhazlar +Name[uk]=Периферійні пристрої +Name[uz]=Ulangan uskunalar +Name[uz@cyrillic]=Уланган ускуналар +Name[ven]=Dzipheriferala +Name[vi]=Thiết bị ngoại vi +Name[wa]=Periferikes +Name[xh]=Iilayini zomda +Name[zh_CN]=外设 +Name[zh_TW]=週邊設備 +Name[zu]=Imixhantela +Icon=input_devices_settings diff --git a/applnk/kde-settings-power.directory b/applnk/kde-settings-power.directory new file mode 100644 index 000000000..34220a95a --- /dev/null +++ b/applnk/kde-settings-power.directory @@ -0,0 +1,88 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Power Control +Name[af]=Krag Beheer +Name[ar]=التحكّم بالطّاقة +Name[az]=Güc İdarəsi +Name[be]=Кіраванне сілкаваннем +Name[bg]=Електрозахранване +Name[bn]=পাওয়ার নিয়ন্ত্রণ +Name[br]=Renadur ar gremm +Name[bs]=Ušteda energije +Name[ca]=Control d'energia +Name[cs]=Správa napájení +Name[csb]=Kòntrola sëłë +Name[cy]=Rheoli Pŵer +Name[da]=Strømstyring +Name[de]=Energiekontrolle +Name[el]=Έλεγχος ισχύος +Name[eo]=Elektrostirilo +Name[es]=Control de energía +Name[et]=Voolutarve +Name[eu]=Energia kontrola +Name[fa]=کنترل توان +Name[fi]=Virranhallinta +Name[fo]=Orkustýring +Name[fr]=Contrôle de l'énergie +Name[fy]=Enerzjybehear +Name[ga]=Rialú Cumhachta +Name[gl]=Control da Enerxéa +Name[he]=צריכת חשמל +Name[hi]=बिज़ली नियंत्रण +Name[hr]=Ušteda energije +Name[hsb]=Milina +Name[hu]=Energiakezelés +Name[id]=Kontrol Power +Name[is]=Orkustilling +Name[it]=Controllo energia +Name[ja]=電源管理 +Name[ka]=კვების კონტროლი +Name[kk]=Қуаттандыруды бақылау +Name[km]=ការ​ត្រួត​ពិនិត្យ​ថាមពល +Name[ko]=전원 관리 +Name[lo]=ຄວບຄຸມການໃຊ້ພະລັງງານ +Name[lt]=Energijos kontrolė +Name[lv]=Energo Kontrole +Name[mk]=Контрола на енергија +Name[mn]=Энергийн удирдлага +Name[ms]=Kawalan Kuasa +Name[mt]=Kontroll tal-konsum +Name[nb]=Strømkontroll +Name[nds]=Stroomkuntrull +Name[ne]=शक्ति नियन्त्रण +Name[nl]=Energiebeheer +Name[nn]=Straumkontroll +Name[nso]=Taolo ya Matla +Name[oc]=Contròle d'alimentacion +Name[pa]=ਊਰਜਾ ਕੰਟਰੋਲ +Name[pl]=Zasilanie +Name[pt]=Controlo de Energia +Name[pt_BR]=Controle de Energia +Name[ro]=Control energie +Name[ru]=Управление питанием +Name[rw]=Igenzura ry'Umuriro +Name[se]=El-rávdnje stivren +Name[sk]=Ovládanie spotreby +Name[sl]=Nadzor energije +Name[sr]=Контрола енергије +Name[sr@Latn]=Kontrola energije +Name[ss]=Kulawulwa kwemlilo +Name[sv]=Strömsparfunktion +Name[ta]=மின்னோட்ட கட்டுப்பாடு +Name[te]=విద్యుత్ నియంత్రణ +Name[tg]=Идораи қувваи барқ +Name[th]=ควบคุมการใช้พลังงาน +Name[tr]=Güç Denetimi +Name[tt]=Qüät İdäräse +Name[uk]=Керування живленням +Name[uz]=Elektr taʼminotni boshqarish +Name[uz@cyrillic]=Электр таъминотни бошқариш +Name[ven]=Ndanguli ya maanda +Name[vi]=Điều khiển Nguồn điện +Name[wa]=Controle di l' alimintåcion +Name[xh]=Ulawulo Lwamandla +Name[zh_CN]=电源控制 +Name[zh_TW]=電源控制 +Name[zu]=Ukulawulwa kwamandla +Icon=energy diff --git a/applnk/kde-settings-security.directory b/applnk/kde-settings-security.directory new file mode 100644 index 000000000..758cb7333 --- /dev/null +++ b/applnk/kde-settings-security.directory @@ -0,0 +1,86 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Security & Privacy +Name[af]=Sekuriteit & Privaatheid +Name[ar]=الأمن و السرية +Name[az]=Təhlükəsizlik & Gizlilik +Name[be]=Бяспека і прыватнасць +Name[bg]=Поверителност +Name[bn]=নিরাপত্তা এবং গোপনীয়তা +Name[br]=Surentez ha buhez prevez +Name[bs]=Sigurnost i privatnost +Name[ca]=Seguretat i privacitat +Name[cs]=Bezpečnost a soukromí +Name[csb]=Bezpiek ë priwatnosc +Name[cy]=Diogelwch & Preifatrwydd +Name[da]=Sikkerhed & Private data +Name[de]=Sicherheit & Privatsphäre +Name[el]=Ασφάλεια & Προσωπικό απόρρητο +Name[eo]=Sekureco & Privateco +Name[es]=Seguridad y privacidad +Name[et]=Turvalisus ja privaatsus +Name[eu]=Segurtasuna eta pribatutasuna +Name[fa]=امنیت و محرمانگی +Name[fi]=Turvallisuus ja yksityisyys +Name[fr]=Sécurité et confidentialité +Name[fy]=Privacy en befeiliging +Name[ga]=Slándáil agus Príobháideachas +Name[gl]=Seguridade e Privacidade +Name[he]=אבטחה ופרטיות +Name[hi]=सुरक्षा तथा गोपनीयता +Name[hr]=Sigurnost i privatnost +Name[hsb]=Wěstosć & Anonymnosć +Name[hu]=Adatvédelem +Name[id]=Keamanan & Privasi +Name[is]=Öryggi og einkamál +Name[it]=Sicurezza e Privacy +Name[ja]=セキュリティ & プライバシー +Name[ka]=დაცვა და კონფიდენციალურობა +Name[kk]=Қауіпсіздік +Name[km]=សុវត្ថិភាព & ភាព​ឯកជន +Name[ko]=보안과 사생활 +Name[lo]=ຄວາມປອດໄພ & ຄວາມເປັນສ່ວນຕົວ +Name[lt]=Saugumas ir privatumas +Name[lv]=Drošība un Privātums +Name[mk]=Безбедност и приватност +Name[mn]=Хамгаалалт & Амгалан +Name[ms]=Sekuriti dan Privasi +Name[mt]=Sigurtà u Privatezza +Name[nb]=Sikkerhet og personvern +Name[nds]=Sekerheit & Privaatrebeet +Name[ne]=सुरक्षा र गोपनीयता +Name[nl]=Privacy en beveiliging +Name[nn]=Tryggleik og privatliv +Name[nso]=Tshireletso & Bosephiri +Name[pa]=ਸੁਰੱਖਿਆ ਅਤੇ ਰਹੱਸ +Name[pl]=Bezpieczeństwo i prywatność +Name[pt]=Segurança e Privacidade +Name[pt_BR]=Segurança & Privacidade +Name[ro]=Securitate și confidențialitate +Name[ru]=Безопасность и конфиденциальность +Name[rw]=Umutekano & Umwihariko +Name[se]=Sihkkarvuohta ja iežassuodjaleapmi +Name[sk]=Zabezpečenie a súkromie +Name[sl]=Varnost in zasebnost +Name[sr]=Безбедност и приватност +Name[sr@Latn]=Bezbednost i privatnost +Name[ss]=Kuphepha & ngasese +Name[sv]=Säkerhet och integritet +Name[ta]=பாதுகாப்பு & தனித்துவம் +Name[te]=భద్రత & ప్రైవసి +Name[tg]=Амният ва махфинокӣ +Name[th]=ความปลอดภัยและความเป็นส่วนตัว +Name[tr]=Güvenlik ve Gizlilik +Name[tt]=İminlek & Xosusílıq +Name[uk]=Безпека та приватність +Name[uz]=Xavfsizlik va shaxsiy maʼlumot +Name[uz@cyrillic]=Хавфсизлик ва шахсий маълумот +Name[ven]=Vhutsireledzi & Tshiphiri +Name[vi]=Bảo mật & Sự riêng tư +Name[wa]=Såvrité & Privaceye +Name[xh]=Ukhuseleko & Nobunikazi +Name[zh_CN]=安全和隐私 +Name[zh_TW]=安全性與私密性 +Name[zu]=Ukuvikeleka & Ingasese +Icon=password diff --git a/applnk/kde-settings-sound.directory b/applnk/kde-settings-sound.directory new file mode 100644 index 000000000..b4dbe2aaf --- /dev/null +++ b/applnk/kde-settings-sound.directory @@ -0,0 +1,85 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Sound & Multimedia +Name[af]=Klank & Multimedia +Name[ar]=الصوت و الوسائط المتعددة +Name[az]=Səs & Multimediya +Name[be]=Гук і мультымедыя +Name[bg]=Мултимедия +Name[bn]=শব্দ ও মাল্টিমিডিয়া +Name[br]=Son & Liesvedia +Name[bs]=Zvuk i multimedija +Name[ca]=So i multimèdia +Name[cs]=Zvuk a multimédia +Name[csb]=Zwãk ë mùltimedia +Name[cy]=Sain & Amlgyfryngau +Name[da]=Lyd & Multimedie +Name[el]=Ήχος & Πολυμέσα +Name[eo]=Sono & Plurmedio +Name[es]=Sonidos y multimedia +Name[et]=Heli ja multimeedia +Name[eu]=Soinua eta multimedia +Name[fa]=صوت و چند رسانه‌ای +Name[fi]=Ääni ja multimedia +Name[fr]=Son et multimédia +Name[fy]=Lûd en multimedia +Name[ga]=Fuaim agus Ilmheáin +Name[gl]=Son e Multimedia +Name[he]=צליל ומולטימדיה +Name[hi]=ध्वनि व मल्टीमीडिया +Name[hr]=Zvuk i multimedija +Name[hsb]=Zwuk & Multimedia +Name[hu]=Hang, multimédia +Name[id]=Efek Suara & Multimedia +Name[is]=Hljóð og margmiðlun +Name[it]=Suono e Multimedia +Name[ja]=サウンド & マルチメディア +Name[ka]=ხმა და მეულტიმედია +Name[kk]=Дыбыс пен мультимедиа +Name[km]=សំឡេង & ពហុព័ត៌មាន +Name[ko]=소리와 멀티미디어 +Name[lo]=ເມົາຕິມີເດຍ +Name[lt]=Garsas ir daugialypė terpė +Name[lv]=Skaņa un Multimēdija +Name[mk]=Звук и мултимедија +Name[mn]=Дуу & Мултимедиа +Name[ms]=Bunyi & Multimedia +Name[mt]=Ħsejjes u Multimedia +Name[nb]=Lyd og multimedia +Name[nds]=Kläng & Multimedia +Name[ne]=ध्वनि र मल्टिमिडिया +Name[nl]=Geluid en multimedia +Name[nn]=Lyd og multimedia +Name[nso]=Modumo & Media wa Bontshi +Name[pa]=ਅਵਾਜ਼ ਅਤੇ ਮਲਟੀਮੀਡਿਆ +Name[pl]=Dźwięk i multimedia +Name[pt]=Som e Multimédia +Name[pt_BR]=Som & Multimídia +Name[ro]=Sunet și multimedia +Name[ru]=Звук и мультимедиа +Name[rw]=Ijwi & Mutwaramakuru +Name[se]=Jietna ja multimedia +Name[sk]=Zvuk a multimédiá +Name[sl]=Zvok in večpredstavnost +Name[sr]=Звук и мултимедија +Name[sr@Latn]=Zvuk i multimedija +Name[ss]=Umsindvo & tinhlobonhlobo-tetindzaba +Name[sv]=Ljud och multimedia +Name[ta]=ஒலி & பல்லூடகம் +Name[te]=శబ్దం & మల్టీ మీడియా +Name[tg]=Садо ва мултимедия +Name[th]=เสียงและมัลติมีเดีย +Name[tr]=Ses ve Çokluortam +Name[tt]=Tawış & Multimedia +Name[uk]=Звук та мультимедіа +Name[uz]=Tovush va multimedia +Name[uz@cyrillic]=Товуш ва мултимедиа +Name[ven]=Mubvumo & Zwimwumwusi +Name[vi]=Âm nhạc & Đa phương tiện +Name[wa]=Son & Multimedia +Name[xh]=Isandi & Multimedia +Name[zh_CN]=声音和多媒体 +Name[zh_TW]=聲音與多媒體 +Name[zu]=Umsindo & Onozindaba abaningi +Icon=multimedia diff --git a/applnk/kde-settings-system.directory b/applnk/kde-settings-system.directory new file mode 100644 index 000000000..d40f9a066 --- /dev/null +++ b/applnk/kde-settings-system.directory @@ -0,0 +1,84 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=System Administration +Name[af]=Stelsel Administrasie +Name[ar]=إدارة النّظام +Name[az]=Sistem İdarəsi +Name[be]=Сістэмнае адміністраванне +Name[bg]=Администрация +Name[bn]=সিস্টেম অ্যাডমিনস্ট্রেশন +Name[br]=Melestradur ar Reizhiad +Name[bs]=Administracija sistema +Name[ca]=Administració del sistema +Name[cs]=Správa systému +Name[csb]=Sprôwianié systemã +Name[cy]=Gweinyddiaith Cysawd +Name[da]=Systemadministration +Name[de]=Systemverwaltung +Name[el]=Διαχείριση συστήματος +Name[eo]=Sistemadministrado +Name[es]=Administración del sistema +Name[et]=Süsteemi administreerimine +Name[eu]=Sistemaren kudeaketa +Name[fa]=سرپرستی سیستم +Name[fi]=Järjestelmänhallinta +Name[fr]=Administration du système +Name[fy]=Systeembehear +Name[ga]=Riarachán Córais +Name[gl]=Administración do Sistema +Name[he]=מנהל המערכת +Name[hi]=तंत्र प्रशासन +Name[hr]=Administracija sustava +Name[hsb]=Zarjadowanje systema +Name[hu]=Rendszeradminisztráció +Name[id]=Administrasi Sistem +Name[is]=Kerfisstjórnun +Name[it]=Amministrazione di sistema +Name[ja]=システム管理 +Name[ka]=სისტემის ადმინისტრირება +Name[kk]=Жүйе әкімшілігі +Name[km]=ការ​គ្រប់គ្រង​ប្រព័ន្ធ +Name[ko]=시스템 관리 +Name[lo]=SAM -ສຳລັບຜູ້ເບິ່ງແຍງລະບົບ +Name[lt]=Sistemos administravimas +Name[lv]=Sistēmas Administrācija +Name[mk]=Системска администрација +Name[mn]=Систем-Зохион байгуулалт +Name[ms]= Pengurusan Sistem +Name[mt]=Amministrazzjoni tas-Sistema +Name[nb]=Systemadministrasjon +Name[nds]=Systeempleeg +Name[ne]=प्रणाली प्रशासक +Name[nl]=Systeembeheer +Name[nn]=Systemadministrasjon +Name[pa]=ਸਿਸਟਮ ਪਰਸ਼ਾਸ਼ਨ +Name[pl]=Administracja systemu +Name[pt]=Administração do Sistema +Name[pt_BR]=Administração do Sistema +Name[ro]=Administrare sistem +Name[ru]=Системное администрирование +Name[rw]=Ubuyobozi bwa Sisitemu +Name[se]=Vuogádathálddašeapmi +Name[sk]=Správa systému +Name[sl]=Sistemsko upravljanje +Name[sr]=Администрација система +Name[sr@Latn]=Administracija sistema +Name[sv]=Systemadministration +Name[ta]=கணினி-நிர்வாகம் +Name[te]=వ్యవస్థ నిర్వహణ +Name[tg]=Идоракунии система +Name[th]=การดูแลระบบ +Name[tr]=Sistem Yönetimi +Name[tt]=Sanaq İdäräse +Name[uk]=Адміністрування системи +Name[uz]=Tizimni boshqarish +Name[uz@cyrillic]=Тизимни бошқариш +Name[ven]=Kulangulele kwa Maitele +Name[vi]=Quản lý Hệ thống +Name[wa]=Manaedjmint do sistinme +Name[xh]=Umphathi Wendlela yokusebenza +Name[zh_CN]=系统管理 +Name[zh_TW]=系統管理 +Name[zu]=Ukugcinwa kwe-sistimu +Icon=kcmsystem diff --git a/applnk/kde-settings-webbrowsing.directory b/applnk/kde-settings-webbrowsing.directory new file mode 100644 index 000000000..3d0666d38 --- /dev/null +++ b/applnk/kde-settings-webbrowsing.directory @@ -0,0 +1,85 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Web Browser +Name[af]=Web Blaaier +Name[ar]=متصفح الشبكة +Name[az]=Veb Səyyahı +Name[be]=Вандроўнік па Сеціве +Name[bg]=Уеб браузър +Name[bn]=ওয়েব ব্রাউজার +Name[br]=Furcher an Internet +Name[bs]=Web preglednik +Name[ca]=Navegació Web +Name[cs]=Prohlížeč Webu +Name[csb]=Przezérnik WWW +Name[cy]=Porydd Gwê +Name[da]=Browser +Name[de]=Webbrowser +Name[el]=Περιηγητής ιστού +Name[eo]=TTT-legilo +Name[es]=Navegador Web +Name[et]=Veebilehitseja +Name[eu]=Web arakatzailea +Name[fa]=مرورگر وب‌‌ +Name[fi]=WWW-selain +Name[fo]=Vevlesari +Name[fr]=Navigateur web +Name[fy]=Webblêder +Name[ga]=Brabhsálaí Lín +Name[gl]=Navegador Web +Name[he]=דפדפן +Name[hi]=वेब ब्राउज़र +Name[hr]=Web preglednik +Name[hsb]=Web-browser +Name[hu]=Webböngésző +Name[id]=Peselancar Web +Name[is]=Vafri +Name[it]=Navigazione Web +Name[ja]=ウェブブラウザ +Name[ka]=ვებ ბრაუზერი +Name[kk]=Веб шолғыш +Name[km]=កម្មវិធី​រុករក​បណ្ដាញ +Name[ko]=웹 브라우저 +Name[lo]=ຮງກເບິ່ງຖານເບິ່ງຂໍ້ມູນ +Name[lt]=Žiniatinklio naršyklė +Name[lv]=Tīmekļa Pārlūks +Name[mk]=Веб-прелистувач +Name[mn]=Вэб-Хөтөч +Name[ms]=Pelayar Web +Name[nb]=Nettleser +Name[nds]=Nettkieker +Name[ne]=वेब ब्राउजर +Name[nl]=Webbrowser +Name[nn]=Nettlesar +Name[nso]=Seinyakisi sa Web +Name[pa]=ਵੈਬ ਝਲਕਾਰਾ +Name[pl]=Przeglądarka WWW +Name[pt]=Navegação Web +Name[pt_BR]=Navegador Web +Name[ro]=Navigator de web +Name[ru]=Браузер +Name[rw]=Mucukumbuzi Rubuga +Name[se]=Fierpmádatlogan +Name[sk]=Webový prehliadač +Name[sl]=Spletni brskalnik +Name[sr]=Веб прегледач +Name[sr@Latn]=Veb pregledač +Name[ss]=Ibrawuza ye-Web +Name[sv]=Webbläsning +Name[ta]=வலை உலாவி +Name[te]=వెబ్ బ్రౌజర్ +Name[tg]=Намоишгари Веб +Name[th]=เว็บเบราว์เซอร์ +Name[tr]=Web Tarayıcı +Name[uk]=Навігатор Тенет +Name[uz]=Veb-brauzer +Name[uz@cyrillic]=Веб-браузер +Name[ven]=Burausa ya Web +Name[vi]=Trình duyệt Mạng +Name[wa]=Betchteu waibe +Name[xh]=Umkhangeli zincwadi we Web +Name[zh_CN]=Web 浏览器 +Name[zh_TW]=網頁瀏覽器 +Name[zu]=Umcingi we-Web +Icon=konqueror diff --git a/applnk/kde-settings.directory b/applnk/kde-settings.directory new file mode 100644 index 000000000..4621125c9 --- /dev/null +++ b/applnk/kde-settings.directory @@ -0,0 +1,88 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Settings-Modules +Name[af]=Instel-Modules +Name[ar]=الوحدات النمطية للتعيينات +Name[az]=Qurğu Modulları +Name[be]=Модулі настаўлення +Name[bg]=Контролен център +Name[bn]=সেটিংস-মডিউল +Name[br]=Kefluniadur-molladoù +Name[bs]=Postavke-Moduli +Name[ca]=Mòduls de paràmetres +Name[cs]=Moduly nastavení +Name[csb]=Ùstôw - mòdułë +Name[cy]=Modiwlau Gosodiadau +Name[da]=Indstillingsmoduler +Name[de]=Einstellungsmodule +Name[el]=Ρυθμίσεις-Αρθρώματα +Name[eo]=Agordomoduloj +Name[es]=Módulos de preferencias +Name[et]=Seadistuste moodulid +Name[eu]=Ezarpenak-moduluak +Name[fa]=پیمانه‌های تنظیمات +Name[fi]=Asetusmoduulit +Name[fo]=Uppsetingarpartar +Name[fr]=Modules de configuration +Name[fy]=Ynstellingsmodules +Name[ga]=Modúil Socraithe +Name[gl]=Módulos de Opcións +Name[he]=מודולי הגדרות +Name[hi]=विन्यास-मॉड्यूल्स +Name[hr]=Postavke-Moduli +Name[hsb]=Nastajenja -module +Name[hu]=Beállítómodulok +Name[is]=Stillingareiningar +Name[it]=Moduli impostazioni +Name[ja]=設定モジュール +Name[ka]=მოდულები +Name[kk]=Модульдер +Name[km]=ការ​កំណត់​ម៉ូឌុល +Name[ko]=설정-모듈 +Name[lo]=ຕັ້ງຄ່າໂມດູນ +Name[lt]=Parinkčių moduliai +Name[lv]=Parametru moduļi +Name[mk]=Модули за поставувања +Name[mn]=Тохируулга-горим +Name[ms]=Tetapan Modul +Name[mt]=Moduli tas-settings +Name[nb]=Innstillingsmoduler +Name[nds]=Instellen-Modulen +Name[ne]=सेटिङ-मोड्युल +Name[nl]=Configuratiemodules +Name[nn]=Innstillingsmodular +Name[nso]=Diripa tsa Dipeakanyo +Name[pa]=ਸੈਟਿੰਗ-ਮੋਡੀਊਲ +Name[pl]=Ustawienia - moduły +Name[pt]=Módulos de Preferências +Name[pt_BR]=Módulos de Configuração +Name[ro]=Module de configurare +Name[ru]=Модули +Name[rw]=Amagenamiterere-Ibice +Name[se]=Heivehusmoduvllat +Name[sk]=Moduly nastavenia +Name[sl]=Nastavitveni moduli +Name[sr]=Поставке-модули +Name[sr@Latn]=Postavke-moduli +Name[ss]=Kuhleleka kwetahluko +Name[sv]=Inställningsmoduler +Name[ta]=அமைப்புகள்-பகுதிகள் +Name[te]=అమరికలు-మాడ్యూళ్లు +Name[tg]=Модулҳо +Name[th]=โมดูลการตั้งค่า +Name[tr]=Modül Ayarları +Name[tt]=Caylaw-Modullar +Name[uk]=Модулі параметрів +Name[uz]=Mslamalar modullari +Name[uz@cyrillic]=Мсламалар модуллари +Name[ven]=Modulu wa mavhekanyele +Name[vi]=Thiết lập Mô đun +Name[wa]=Apontiaedjes des modules +Name[xh]=Izicwangciso-Iminqongo wokulinganisela +Name[zh_CN]=设置模块 +Name[zh_TW]=設定模組 +Name[zu]=Izingxenye-zezilungiselelo +NoDisplay=true +Icon=package_settings +X-KDE-BaseGroup=settings diff --git a/applnk/kde-settings.menu b/applnk/kde-settings.menu new file mode 100644 index 000000000..e32d722fa --- /dev/null +++ b/applnk/kde-settings.menu @@ -0,0 +1,84 @@ + + + + Settings + + Accessibility + kde-settings-accessibility.directory + + X-KDE-settings-accessibility + + + + Components + kde-settings-components.directory + + X-KDE-settings-components + + + + Desktop + kde-settings-desktop.directory + + X-KDE-settings-desktop + + + + LookNFeel + kde-settings-looknfeel.directory + + X-KDE-settings-looknfeel + + + + Network + kde-settings-network.directory + + X-KDE-settings-network + + + WebBrowsing + kde-settings-webbrowsing.directory + + X-KDE-settings-webbrowsing + + + + + Peripherals + kde-settings-peripherals.directory + + X-KDE-settings-peripherals + X-KDE-settings-hardware + + + + PowerControl + kde-settings-power.directory + + X-KDE-settings-power + + + + Security + kde-settings-security.directory + + X-KDE-settings-security + + + + Sound + kde-settings-sound.directory + + X-KDE-settings-sound + + + + System + kde-settings-system.directory + + X-KDE-settings-system + + + diff --git a/applnk/kde-settingsmenu.directory b/applnk/kde-settingsmenu.directory new file mode 100644 index 000000000..b760fe4c6 --- /dev/null +++ b/applnk/kde-settingsmenu.directory @@ -0,0 +1,78 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Settings +Name[af]=Instellings +Name[ar]=التعيينات +Name[az]=Qurğular +Name[be]=Настаўленні +Name[bg]=Настройки +Name[bn]=সেটিংস +Name[br]=Dibarzhoù +Name[bs]=Postavke +Name[ca]=Preferències +Name[cs]=Nastavení +Name[csb]=Ùstôw +Name[cy]=Gosodiadau +Name[da]=Opsætning +Name[de]=Einstellungen +Name[el]=Ρυθμίσεις +Name[eo]=Agordo +Name[es]=Preferencias +Name[et]=Seadistused +Name[eu]=Ezarpenak +Name[fa]=تنظیمات +Name[fi]=Asetukset +Name[fr]=Configuration +Name[fy]=Ynstellings +Name[ga]=Socruithe +Name[gl]=Opcións +Name[he]=הגדרות +Name[hi]=विन्यास +Name[hr]=Postavke +Name[hsb]=Nastajenja +Name[hu]=Beállítások +Name[is]=Stillingar +Name[it]=Impostazioni +Name[ja]=設定 +Name[ka]=პარამეტრები +Name[kk]=Параметрлері +Name[km]=ការ​កំណត់ +Name[ko]=설정 +Name[lt]=Parinktys +Name[lv]=Parametri +Name[mk]=Поставувања +Name[mn]=Тохируулга +Name[ms]=Tempatan +Name[nb]=Innstillinger +Name[nds]=Instellen +Name[ne]=सेटिङ +Name[nl]=Instellingen +Name[nn]=Innstillingar +Name[pa]=ਸੈਟਿੰਗ +Name[pl]=Ustawienia +Name[pt]=Configuração +Name[pt_BR]=Configurações +Name[ro]=Setări +Name[ru]=Настройка +Name[rw]=Amagenamiterere +Name[se]=Heivehusat +Name[sk]=Nastavenia +Name[sl]=Nastavitve +Name[sr]=Поставке +Name[sr@Latn]=Postavke +Name[sv]=Inställningar +Name[ta]=அமைப்புகள் +Name[te]=అమరికలు +Name[tg]=Танзимот +Name[th]=ตั้งค่าต่างๆ +Name[tr]=Ayarlar +Name[tt]=Caylaw +Name[uk]=Параметри +Name[uz]=Moslamalar +Name[uz@cyrillic]=Мосламалар +Name[vi]=Thiết lập +Name[wa]=Apontiaedjes +Name[zh_CN]=设置 +Name[zh_TW]=設定 +Icon=package_settings diff --git a/applnk/kde-system-screensavers.directory b/applnk/kde-system-screensavers.directory new file mode 100644 index 000000000..e6ff90105 --- /dev/null +++ b/applnk/kde-system-screensavers.directory @@ -0,0 +1,171 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Screen Savers +Name[af]=Skerm Bewaarders +Name[ar]=مدخري الشاشة +Name[az]=Ekran Qoruyucuları +Name[be]=Зберагальнікі экрана +Name[bg]=Предпазители на екрана +Name[bn]=স্ক্রীন সেভার +Name[br]=Damanterien Skramm +Name[bs]=Zaštita ekrana (screensaver) +Name[ca]=Salvapantalles +Name[cs]=Šetřiče obrazovky +Name[csb]=Wëgaszôcz ekranu +Name[cy]=Arbedyddion Sgrîn +Name[da]=Pauseskærme +Name[de]=Bildschirmschoner +Name[el]=Προφύλαξη οθόνης +Name[eo]=Ekrankurtenoj +Name[es]=Salvapantallas +Name[et]=Ekraanisäästjad +Name[eu]=Pantaila babesleak +Name[fa]=محافظهای صفحه نمایش +Name[fi]=Näytönsäästäjät +Name[fo]=Skíggjaspararir +Name[fr]=Écrans de veille +Name[fy]=Skermbefeiliging +Name[ga]=Spárálaithe Scáileáin +Name[gl]=Protectores de Pantalla +Name[he]=שומרי מסך +Name[hi]=स्क्रीन सेवर +Name[hr]=Zaštita zaslona +Name[hsb]=Škitaki za wobrazowku +Name[hu]=Képernyővédő +Name[is]=Skjásvæfur +Name[it]=Salvaschermi +Name[ja]=スクリーンセーバー +Name[kk]=Экран сақтаушылары +Name[km]=ធាតុ​សង្គ្រោះ​អេក្រង់ +Name[ko]=화면 보호기 +Name[lo]=ໂປຣແກຣມຮັກສາຫນ້າຈໍ +Name[lt]=Ekrano Užsklandos +Name[lv]=Ekrāna saudzetāji +Name[mk]=Екрански чувари +Name[mn]=Дэлгэц гамнагч +Name[ms]=Penghias Skrin +Name[nb]=Pauseskjerme +Name[nds]=Pausschirm +Name[ne]=स्क्रिनसेभर +Name[nl]=Schermbeveiliging +Name[nn]=Pauseskjermar +Name[nso]=Diboloki tsa Pontsho +Name[oc]=Salvador d'ecrans +Name[pa]=ਸਕਰੀਨ-ਸੇਵਰ +Name[pl]=Wygaszacze ekranu +Name[pt]=Protectores de Ecrã +Name[pt_BR]=Protetores de tela +Name[ro]=Protecții de ecran +Name[ru]=Хранители экрана +Name[rw]=Mugaragaza Ukubamaso +Name[se]=Šearbmasiestejeaddjit +Name[sk]=Šetriče obrazovky +Name[sl]=Ohranjevalniki zaslona +Name[sr]=Чувари екрана +Name[sr@Latn]=Čuvari ekrana +Name[ss]=Sigcini-skrini +Name[sv]=Skärmsläckare +Name[ta]=திரை காப்பாளர்கள் +Name[te]= స్క్రీన్ సేవర్లు +Name[tg]=Пардаи экран +Name[th]=โปรแกรมรักษาหน้าจอ +Name[tr]=Ekran Koruyucular +Name[tt]=Küräk Saqlağıçı +Name[uk]=Зберігачі екрана +Name[uz]=Ekran saqlovchilari +Name[uz@cyrillic]=Экран сақловчилари +Name[ven]=Tshivhulungi tsha Tshikirini +Name[vi]=Trình bảo vệ màn hình +Name[wa]=Sipårgneus di waitroûle +Name[xh]=Abagcini Bekhusi +Name[zh_CN]=屏幕保护程序 +Name[zh_TW]=螢幕保護程式 +Name[zu]=Abagcini Besikrini +Icon=kscreensaver +X-KDE-BaseGroup=screensavers + +Comment=Screen saver demos +Comment[af]=Skerm bewaarder demonstrasies +Comment[ar]=عروض توضيحية لمدخر الشاشة +Comment[az]=Ekran Qoruyucu Demoları +Comment[be]=Дэманстрацыі зберагальніка экрана +Comment[bg]=Демо на предпазителите на екрана +Comment[bn]=স্ক্রীন সেভার ডেমো +Comment[br]=Diskouezadur damanterien skramm +Comment[bs]=Demonstracije zaštite ekrana +Comment[ca]=Demos de salvapantalles +Comment[cs]=Ukázky šetřičů obrazovky +Comment[csb]=Pòdzérk wëgaszôcza ekranu +Comment[cy]=Arddangosfeydd arbedyddion sgrîn +Comment[da]=Pauseskærm-demoer +Comment[de]=Demos zu Bildschirmschonern +Comment[el]=Επίδειξη προφύλαξης οθόνης +Comment[eo]=Demonstro de la ekrankurtenoj +Comment[es]=Demostraciones del salvapantallas +Comment[et]=Ekraanisäästjate demod +Comment[eu]=Pantaila babesle demoak +Comment[fa]=نمایشهای صفحه کلید +Comment[fi]=Näytönsäästäjien mallit +Comment[fo]=Skíggjaspararadømi +Comment[fr]=Démonstrations d'écrans de veille +Comment[fy]=Skermbefeiligingdemo's +Comment[ga]=Taispeántais na spárálaithe scáileáin +Comment[gl]=Demostracións dos protectores de pantalla +Comment[he]=הדגמות של שומרי מסך +Comment[hi]=स्क्रीन सेवर डेमोस +Comment[hr]=Demonstracije zaštite zaslona +Comment[hsb]=demonstrowanje škitakow za wobrazowku +Comment[hu]=Képernyővédő-demók +Comment[id]=Demo screen saver +Comment[is]=Skjásvæfukynningar +Comment[it]=Anteprime dei salvaschermi +Comment[ja]=スクリーンセーバーのデモ +Comment[kk]=Экран сақтаушыны таңдау +Comment[km]=បង្ហាញ​ធាតុ​សង្គ្រោះ​អេក្រង់​សាក​មើល +Comment[ko]=화면 보호기 데모 +Comment[lo]=ຕົວຢ່າງໂປຣແກຣມຮັກສາຫນ້າຈໍ +Comment[lt]=Ekrano užsklandos demonstracija +Comment[lv]=Ekrāna saudzētāja demoversijas +Comment[mk]=Демоа на екрански чувари +Comment[mn]=Дэлгэц гамнагчийн үзүүлэн +Comment[ms]=Contoh penghias skrin +Comment[mt]=Wirjiet ta' screen savers +Comment[nb]=Pauseskjerm-demoer +Comment[nds]=Pausschirmen utproberen +Comment[ne]=स्क्रिनसेभर डेमो +Comment[nl]=Schermbeveiligingdemo's +Comment[nn]=Pauseskjerm-demoar +Comment[nso]=Di-demo tsa seboloki sa pontsho +Comment[oc]=Demonstracions dèu salvador d'ecran +Comment[pa]=ਸਕਰੀਨ-ਸੇਵਰ ਝਲਕ +Comment[pl]=Podgląd wygaszacza ekranu +Comment[pt]=Demonstrações de protectores de ecrã +Comment[pt_BR]=Amostras de protetores de tela +Comment[ro]=Demonstrații pentru protecții de ecran +Comment[ru]=Просмотр хранителей экрана +Comment[rw]=Amayerekana ya Mugaragaza Ukubamaso +Comment[se]=Šearbmasiestejeaddji demonstrašuvnnat. +Comment[sk]=Demo šetričov obrazovky +Comment[sl]=Predstavitve ohranjevalnikov zaslona +Comment[sr]=Демои чуварâ екрана +Comment[sr@Latn]=Demoi čuvarâ ekrana +Comment[ss]=Kukhonjiswa kwesigcini skrini +Comment[sv]=Demonstration av skärmsläckare +Comment[ta]=திரை காத்தலின் விளக்கக் காட்சிகள் +Comment[te]=స్క్రీన్ సేవర్ డెమొలు +Comment[tg]=Намоиши пардаи экран +Comment[th]=ตัวอย่างโปรแกรมรักษาหน้าจอ +Comment[tr]=Ekran koruyucu tanıtımları +Comment[tt]=Küräksaqçı sınawları +Comment[uk]=Демонстрації зберігачів екрана +Comment[uz]=Ekran saqlovchilar namunalari +Comment[uz@cyrillic]=Экран сақловчилар намуналари +Comment[ven]=Demo ya tshivhulungi tsha tshikirini +Comment[vi]=Thử trình bảo vệ màn hình +Comment[wa]=Sipårgneus di waitroûle di saye +Comment[xh]=Demos zomgcini wekhusi +Comment[zh_CN]=屏幕保护程序演示 +Comment[zh_TW]=螢幕保護程式展示 +Comment[zu]=Imiboniso yezigcini zikrini +NoDisplay=true diff --git a/applnk/kde-system-terminal.directory b/applnk/kde-system-terminal.directory new file mode 100644 index 000000000..e6d9977ea --- /dev/null +++ b/applnk/kde-system-terminal.directory @@ -0,0 +1,88 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Terminal Applications +Name[af]=Terminaal Programme +Name[ar]=تطبيقات مطرافية +Name[az]=Terminal Proqramları +Name[be]=Тэрмінальныя праграмы +Name[bg]=Конзолни програми +Name[bn]=টার্মিনাল অ্যাপলিকেশন +Name[br]=Arloadoù an termenell +Name[bs]=Tekstualni programi +Name[ca]=Aplicacions de terminal +Name[cs]=Terminálové aplikace +Name[csb]=Programë terminala +Name[cy]=Cymhwysiadau Terfynell +Name[da]=Terminalprogrammer +Name[de]=Terminalprogramme +Name[el]=Εφαρμογές τερματικού +Name[eo]=Terminal-Aplikaĵoj +Name[es]=Aplicaciones de terminal +Name[et]=Terminali rakendused +Name[eu]=Terminaleko aplikazioak +Name[fa]=کاربردهای پایانه +Name[fi]=Päätesovellukset +Name[fo]=Tekstforrit +Name[fr]=Applications pour terminal +Name[fy]=Terminal-tapassingen +Name[ga]=Feidhmchláir Teirminéil +Name[gl]=Aplicacións de Terminal +Name[he]=יישומי מסוף +Name[hi]=टर्मिनल अनुप्रयोग +Name[hr]=Terminalske aplikacije +Name[hsb]=Programy za terminal +Name[hu]=Parancsértelmezők +Name[id]=Aplikasi Terminal +Name[is]=Skjáhermiforrit +Name[it]=Applicazioni terminale +Name[ja]=ターミナルアプリケーション +Name[ka]=კონსოლის პროგრამები +Name[kk]=Консоль қолданбалары +Name[km]=កម្មវិធី​ស្ថានីយ +Name[ko]=터미널 프로그램 +Name[lo]=ໂປຣແກຣມເທີມີນໍ +Name[lt]=Terminalinės programos +Name[lv]=Termināla Aplikācijas +Name[mk]=Терминалски апликации +Name[mn]=Терминал-Програм +Name[ms]=Aplikasi Terminal +Name[mt]=Programmi tat-Terminal +Name[nb]=Terminalprogrammer +Name[nds]=Terminalprogrammen +Name[ne]=टर्मिनल अनुप्रयोग +Name[nl]=Terminal-toepassingen +Name[nn]=Terminalprogram +Name[nso]=Ditshumiso tsa Terminal +Name[pa]=ਟਰਮੀਨਲ ਕਾਰਜ +Name[pl]=Programy terminala +Name[pt]=Aplicações de Terminal +Name[pt_BR]=Aplicativos de terminal +Name[ro]=Aplicații de terminal +Name[ru]=Консольные приложения +Name[rw]=Amaporogaramu Nkiriya +Name[se]=Terminálprográmmat +Name[sk]=Terminálové aplikácie +Name[sl]=Terminalski programi +Name[sr]=Терминалски програми +Name[sr@Latn]=Terminalski programi +Name[ss]=Ticelo tesikhungo +Name[sv]=Terminalprogram +Name[ta]=முனைய பயன்பாடுகள் +Name[te]=టర్మినల్ కార్యక్రమములు +Name[tg]=Барномаҳои консол +Name[th]=โปรแกรมเทอร์มินัล +Name[tr]=Uçbirim Uygulamaları +Name[tt]=Terminal Yazılımnarı +Name[uk]=Термінальні програми +Name[uz]=Terminal uchun dasturlar +Name[uz@cyrillic]=Терминал учун дастурлар +Name[ven]=Apulikhesheni ya Theminala +Name[vi]=Trình đầu cuối +Name[wa]=Programes terminås +Name[xh]=Izicelo Zesiphelo sendlela +Name[zh_CN]=终端应用程序 +Name[zh_TW]=終端機程式 +Name[zu]=Abayaleli bangaphandle +Icon=konsole +Version=1.0 diff --git a/applnk/kde-system.directory b/applnk/kde-system.directory new file mode 100644 index 000000000..18582b8b0 --- /dev/null +++ b/applnk/kde-system.directory @@ -0,0 +1,81 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=System +Name[af]=Stelsel +Name[ar]=النظام +Name[az]=Sistem +Name[be]=Сістэма +Name[bg]=Система +Name[bn]=সিস্টেম +Name[br]=Reizhiad +Name[bs]=Sistem +Name[ca]=Sistema +Name[cs]=Systém +Name[csb]=Systema +Name[cy]=Cysawd +Name[el]=Σύστημα +Name[eo]=Sistemo +Name[es]=Sistema +Name[et]=Süsteem +Name[eu]=Sistema +Name[fa]=سیستم +Name[fi]=Järjestelmä +Name[fo]=Kervi +Name[fr]=Système +Name[fy]=Systeem +Name[ga]=Córas +Name[gl]=Sistema +Name[he]=מערכת +Name[hi]=तंत्र +Name[hr]=Sustav +Name[hu]=Rendszer +Name[id]=Sistem +Name[is]=Kerfi +Name[it]=Sistema +Name[ja]=システム +Name[ka]=სისტემა +Name[kk]=Жүйелік +Name[km]=ប្រព័ន្ធ +Name[ko]=시스템 +Name[lo]=ຈັດການລະບົບ +Name[lt]=Sistema +Name[lv]=Sistēma +Name[mk]=Систем +Name[mn]=Систем +Name[ms]=Sistem +Name[mt]=Sistema +Name[nds]=Systeem +Name[ne]=प्रणाली +Name[nl]=Systeem +Name[oc]=Sistemo +Name[pa]=ਸਿਸਟਮ +Name[pt]=Sistema +Name[pt_BR]=Sistema +Name[ro]=Sistem +Name[ru]=Система +Name[rw]=Sisitemu +Name[se]=Vuogádat +Name[sk]=Systém +Name[sl]=Sistem +Name[sr]=Систем +Name[sr@Latn]=Sistem +Name[ss]=Umshini +Name[ta]=அமைப்பு +Name[te]=వ్యవస్థ +Name[tg]=Система +Name[th]=ระบบ +Name[tr]=Sistem +Name[tt]=Sistem +Name[uk]=Система +Name[uz]=Tizim +Name[uz@cyrillic]=Тизим +Name[ven]=Maitele +Name[vi]=Hệ thống +Name[wa]=Sistinme +Name[xh]=Indlela esestyenziswayo +Name[zh_CN]=系统 +Name[zh_TW]=系統 +Name[zu]=Isistimu +Icon=package_system + diff --git a/applnk/kde-toys.directory b/applnk/kde-toys.directory new file mode 100644 index 000000000..f1e3bb78e --- /dev/null +++ b/applnk/kde-toys.directory @@ -0,0 +1,88 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Toys +Name[af]=Speelgoed +Name[ar]=الألعاب +Name[az]=Oyuncaqlar +Name[be]=Цацкі +Name[bg]=Играчки +Name[bn]=খেলনা +Name[br]=C'hoarielloù +Name[bs]=Igračke +Name[ca]=Joguines +Name[cs]=Hračky +Name[csb]=Zôbôwczi +Name[cy]=Tegannau +Name[da]=Legetøj +Name[de]=Kleinigkeiten +Name[el]=Παιχνιδάκια +Name[eo]=Amuzaĵoj +Name[es]=Ocio +Name[et]=Mänguasjad +Name[eu]=Jolasak +Name[fa]=سرگرمیها +Name[fi]=Lelut +Name[fo]=Leiku +Name[fr]=Petits outils +Name[fy]=Boartersguod +Name[ga]=Áilleagáin +Name[gl]=Entretementos +Name[he]=צעצועים +Name[hi]=खिलौने +Name[hr]=Igračke +Name[hsb]=Hrajki +Name[hu]=Mütyürkék +Name[id]=Mainan +Name[is]=Leikföng +Name[it]=Giochini +Name[ja]=アクセサリ +Name[ka]=სათამაშოები +Name[kk]=Ойын-сауықтар +Name[km]=ប្រដាប់​ក្មេង​លេង +Name[ko]=장난감 +Name[lo]=ຂອງເຫລັ້ນ +Name[lt]=Žaislai +Name[lv]=Rotaļlietas +Name[mk]=Играчки +Name[mn]=Наадгай +Name[ms]=Permainan +Name[mt]=Ġugarelli +Name[nb]=Leketøy +Name[nds]=Speelkraam +Name[ne]=खेलौना +Name[nl]=Speelgoed +Name[nn]=Leiker +Name[nso]=Dibapadisane +Name[oc]=Joguines +Name[pa]=ਖਿਡੌਣੇ +Name[pl]=Zabawa +Name[pt]=Diversão +Name[pt_BR]=Brinquedos +Name[ro]=Jucării +Name[ru]=Развлечения +Name[rw]=Ibikinisho +Name[se]=Stohkosat +Name[sk]=Hračky +Name[sl]=Igrače +Name[sr]=Играчке +Name[sr@Latn]=Igračke +Name[ss]=Kwekudlalisa +Name[sv]=Leksaker +Name[ta]=பொம்மைகள் +Name[te]=ఆట వస్తువులు +Name[tg]=Бозичаҳои шавқовар +Name[th]=ของเล่นสนุกๆ +Name[tr]=Eğlence +Name[tt]=Uyınnar +Name[uk]=Іграшки +Name[uz]=Oʻyinchoqlar +Name[uz@cyrillic]=Ўйинчоқлар +Name[ven]=Zwautambisa vhana +Name[vi]=Đồ chơi +Name[wa]=Amuzmints +Name[xh]=Izinto zokudlala +Name[zh_CN]=玩具 +Name[zh_TW]=玩具 +Name[zu]=Amathoyizi +Icon=package_toys diff --git a/applnk/kde-unknown.directory b/applnk/kde-unknown.directory new file mode 100644 index 000000000..36f49f683 --- /dev/null +++ b/applnk/kde-unknown.directory @@ -0,0 +1,76 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Lost & Found +Name[af]=Verlore & Gevind +Name[ar]=فُقد ووُجد +Name[az]=İtirdim və Tapdım +Name[be]=Згубленыя і знойдзеныя +Name[bg]=Разни +Name[bn]=হারানো প্রাপ্তি +Name[br]=Kollet & kavet +Name[bs]=Izgubljeno/nađeno +Name[ca]=Perdut i trobat +Name[cs]=Ztráty a nálezy +Name[csb]=Zgùbione ë nalazłé +Name[cy]=Colledig a Chanfyddedig +Name[da]=Glemte sager +Name[de]=Nicht zuzuordnen +Name[el]=Χάθηκαν & Βρέθηκαν +Name[eo]=Perdita kaj trovita +Name[es]=Objetos perdidos +Name[et]=Tundmatud +Name[eu]=Galdu eta aurkitutakoak +Name[fa]=گم‌شده و یافته‌شده +Name[fi]=Hävinneet ja löydetyt +Name[fr]=Objets trouvés +Name[fy]=Wat oer is +Name[ga]=Caillte agus Aimsithe +Name[gl]=Outros +Name[he]=אבדות +Name[hi]=खोया/पाया +Name[hr]=Izgubljeno-nađeno +Name[hsb]=Pytane & Namakane +Name[hu]=Ismeretlen +Name[is]=Tapað & fundið +Name[it]=Oggetti smarriti +Name[kk]=Жоғалып табылғандар +Name[km]=បាត់ & រកឃើញ +Name[ko]=기타 프로그램 +Name[lt]=Pamesta ir rasta +Name[lv]=Pazudis & Atrasts +Name[mk]=Изгубено-најдено +Name[mn]=Алдагдал & Олдолт +Name[ms]=Hilang & Jumpa +Name[mt]=Mitlufin u Misjuba +Name[nb]=Tapt og funnet +Name[nds]=Passt narms sünst +Name[ne]=हराएका र फेला परेका +Name[nl]=Overig +Name[nn]=Tapt og funne +Name[pa]=ਗੁਆਚੇ ਤੇ ਲੱਭੇ +Name[pl]=Zgubione i znalezione +Name[pt]=Perdidos e Achados +Name[pt_BR]=Achados & Perdidos +Name[ro]=Pierdute și regăsite +Name[ru]=Камера хранения +Name[rw]=Byabuze & Byabonetse +Name[se]=Láhppon ja gávdnon +Name[sk]=Straty a nálezy +Name[sl]=Izgubljeno in najdeno +Name[sr]=Изгубљено-нађено +Name[sr@Latn]=Izgubljeno-nađeno +Name[sv]=Hittegods +Name[ta]=இழந்த & கிடைத்த +Name[te]=పోయినవి & దొరికినవి +Name[tg]=Ҷустуҷӯй +Name[th]=หาไม่เจอดูที่นี่ +Name[tr]=Kayıplar ve Bulunanlar +Name[tt]=Yuğaltu & Tabu +Name[uk]=Загублено та знайдено +Name[uz]=Nomaʼlum +Name[uz@cyrillic]=Номаълум +Name[vi]=Mất & Tìm +Name[wa]=Pierdous & rtrovés +Name[zh_CN]=未知类别 +Icon=help diff --git a/applnk/kde-utilities-accessibility.directory b/applnk/kde-utilities-accessibility.directory new file mode 100644 index 000000000..a39ff7490 --- /dev/null +++ b/applnk/kde-utilities-accessibility.directory @@ -0,0 +1,148 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Accessibility +Name[af]=Toeganklikheid +Name[ar]=تسهيل الوصول +Name[az]=Yetişmə Qabiliyyəti +Name[be]=Даступнасць +Name[bg]=Равностоен достъп +Name[bn]=সহায়ক প্রযুক্তি +Name[br]=Haezadusted +Name[bs]=Pristupačnost +Name[ca]=Accessibilitat +Name[cs]=Zpřístupnění +Name[csb]=Pòmòce przistãpù +Name[cy]=Hygyrchedd +Name[da]=Tilgængelighed +Name[de]=Zugangshilfen +Name[el]=Προσιτότητα +Name[eo]=Alirebleco +Name[es]=Accesibilidad +Name[et]=Hõlbustus +Name[eu]=Erabilerraztasuna +Name[fa]=دستیابی‌پذیری +Name[fi]=Helppokäyttötoiminnot +Name[fr]=Accessibilité +Name[fy]=Tagonklikens +Name[ga]=Inrochtaineacht +Name[gl]=Accesibilidade +Name[he]=נגישות +Name[hi]=पहुँच +Name[hr]=Pristupačnost +Name[hu]=Kezelési segítség +Name[id]=Aksesibiliti +Name[is]=Aðgengi +Name[it]=Accessibilità +Name[ja]=アクセシビリティ +Name[ka]=სპეციალური შესაძლბლობები +Name[kk]=Арнайы мүмкіндіктер +Name[km]=ភាព​អាច​ចូល​ដំណើរការ​បាន +Name[ko]=내게 필요한 설정 +Name[lo]=ຄວາມສາມາດໃນການໃຊ້ງານ +Name[lt]=Prieinamumas +Name[lv]=Pieejamība +Name[mk]=Пристапливост +Name[mn]=Хэрэглэх тохь +Name[ms]=Kebolehcapaian +Name[mt]=Aċċessibiltà +Name[nb]=Tilgjengelighet +Name[nds]=Behinnertenhülp +Name[ne]=पहुँचता +Name[nl]=Toegankelijkheid +Name[nn]=Tilgjenge +Name[nso]=Botsenelo +Name[oc]=Accessibilitat +Name[pa]=ਸਹੂਲਤਾਂ +Name[pl]=Dostępność +Name[pt]=Acessibilidade +Name[pt_BR]=Acessibilidade +Name[ro]=Accesibilitate +Name[ru]=Специальные возможности +Name[rw]=Ukugerwaho +Name[se]=Álkkibut geavaheapmi +Name[sk]=Prístupnosť +Name[sl]=Dostopnost +Name[sr]=Приступачност +Name[sr@Latn]=Pristupačnost +Name[ss]=Kutfolakala kalula +Name[sv]=Handikappstöd +Name[ta]=அணுகல் +Name[te]=అందుబాటు +Name[tg]=Имконпазирӣ +Name[th]=ตัวช่วยในการใช้งาน +Name[tr]=Erişilebilirlik +Name[tt]=Qulaylıq +Name[uk]=Доступність +Name[uz]=Qulayliklar +Name[uz@cyrillic]=Қулайликлар +Name[ven]=Dzheneaho +Name[vi]=Hỗ trợ người tàn tật +Name[wa]=Accessibilité +Name[xh]=Unikezelo +Name[zh_CN]=辅助 +Name[zh_TW]=無障礙輔助 +Name[zu]=Ukungena +Icon=access +Comment=Accessibility +Comment[af]=Toeganklikheid +Comment[be]=Даступнасць +Comment[bg]=Равностоен достъп +Comment[bn]=সহায়ক প্রযুক্তি +Comment[br]=Haezadusted +Comment[bs]=Pristupačnost +Comment[ca]=Accessibilitat +Comment[cs]=Zpřístupnění +Comment[csb]=Pòmòce przistãpù +Comment[cy]=Hygyrchedd +Comment[da]=Tilgængelighed +Comment[de]=Zugangshilfen +Comment[el]=Προσβασιμότητα +Comment[eo]=Alirebleco +Comment[es]=Accesibilidad +Comment[et]=Hõlbustus +Comment[eu]=Erabilerraztasuna +Comment[fa]=دستیابی‌پذیری +Comment[fi]=Helppokäyttöisyys +Comment[fr]=Accessibilité +Comment[fy]=Tagonklikens +Comment[ga]=Inrochtaineacht +Comment[gl]=Accesibilidade +Comment[he]=נגישות +Comment[hr]=Pristupačnost +Comment[hu]=Kezelési segítség +Comment[is]=Aðgengi +Comment[it]=Accessibilità +Comment[ja]=アクセシビリティ +Comment[kk]=Арнайы мүмкіндіктер +Comment[km]=មធ្យោបាយ​ងាយស្រួល +Comment[ko]=내게 필요한 설정 +Comment[mk]=Пристапливост +Comment[ms]=Kebolehcapaian +Comment[nb]=Tilgjengelighet +Comment[nds]=Behinnertenhülp +Comment[ne]=पहुँचता +Comment[nl]=Toegankelijkheid +Comment[nn]=Tilgjenge +Comment[pa]=ਸਹੂਲਤਾਂ +Comment[pl]=Dostępność +Comment[pt]=Acessibilidade +Comment[pt_BR]=Acessibilidade +Comment[ro]=Accesibilitate +Comment[ru]=Специальные возможности +Comment[sk]=Prístupnosť +Comment[sl]=Dostopnost +Comment[sr]=Приступачност +Comment[sr@Latn]=Pristupačnost +Comment[sv]=Handikappstöd +Comment[te]=అందుబాటు +Comment[tg]=Имконпазирӣ +Comment[th]=ตัวช่วยให้ใช้งานสะดวกขึ้น +Comment[tr]=Erişilebilirlik +Comment[uk]=Доступність +Comment[uz]=Qulayliklar +Comment[uz@cyrillic]=Қулайликлар +Comment[vi]=Hỗ trợ người tàn tật +Comment[wa]=Accessibilité +Comment[zh_CN]=辅助 +Comment[zh_TW]=無障礙輔助 diff --git a/applnk/kde-utilities-desktop.directory b/applnk/kde-utilities-desktop.directory new file mode 100644 index 000000000..a838dc9a8 --- /dev/null +++ b/applnk/kde-utilities-desktop.directory @@ -0,0 +1,141 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Desktop +Name[af]=Werkskerm +Name[ar]=سطح المكتب +Name[az]=Masa Üstü +Name[be]=Працоўны стол +Name[bg]=Работен плот +Name[bn]=ডেস্কটপ +Name[br]=Gorretaol +Name[bs]=Radna površina +Name[ca]=Escriptori +Name[cs]=Pracovní plocha +Name[csb]=Pùlt +Name[cy]=Penbwrdd +Name[de]=Arbeitsfläche +Name[el]=Επιφάνεια εργασίας +Name[eo]=Tabulo +Name[es]=Escritorio +Name[et]=Töölaud +Name[eu]=Mahaigaina +Name[fa]=رومیزی +Name[fi]=Työpöytä +Name[fo]=Skriviborð +Name[fr]=Bureau +Name[fy]=Buroblêd +Name[ga]=Deasc +Name[gl]=Escritorio +Name[he]=שולחן עבודה +Name[hi]=डेस्कटॉप +Name[hr]=Radna površina +Name[hsb]=Dźěłowy powjerch +Name[hu]=Munkaasztal +Name[is]=Skjáborð +Name[ja]=デスクトップ +Name[ka]=სამუშაო დაფა +Name[kk]=Жұмыс үстелі +Name[km]=ផ្ទៃតុ +Name[ko]=데스크톱 +Name[lo]=ພື້ນທີ່ເຮັດວງກ +Name[lt]=Darbastalis +Name[lv]=Darbvirsma +Name[mk]=Работна површина +Name[mn]=Ажлын тавцан +Name[ms]=Ruang Kerja +Name[nb]=Skrivebord +Name[nds]=Schriefdisch +Name[ne]=डेस्कटप +Name[nl]=Bureaublad +Name[nn]=Skrivebord +Name[oc]=BurèU +Name[pa]=ਵੇਹੜਾ +Name[pl]=Pulpit +Name[pt]=Ambiente de Trabalho +Name[pt_BR]=Área de Trabalho +Name[ru]=Рабочий стол +Name[rw]=Ibiro +Name[se]=Čállinbeavdi +Name[sk]=Plocha +Name[sl]=Namizje +Name[sr]=Радна површина +Name[sr@Latn]=Radna površina +Name[ss]=Desktop +Name[sv]=Skrivbord +Name[ta]=மேல்மேசை +Name[te]=రంగస్ఠలం +Name[tg]=Мизи корӣ +Name[th]=พื้นที่ทำงาน +Name[tr]=Masaüstü +Name[tt]=Östäl +Name[uk]=Стільниця +Name[uz]=Ish stoli +Name[uz@cyrillic]=Иш столи +Name[ven]=Desikithopo +Name[vi]=Màn hình nền +Name[wa]=Sicribanne +Name[zh_CN]=桌面 +Name[zh_TW]=桌面 +Icon=desktop +Comment=Desktop +Comment[af]=Werkskerm +Comment[ar]=سطح المكتب +Comment[be]=Працоўны стол +Comment[bg]=Работен плот +Comment[bn]=ডেস্কটপ +Comment[br]=Burev +Comment[ca]=Escriptori +Comment[cs]=Pracovní plocha +Comment[csb]=Pùlt +Comment[cy]=Penbwrdd +Comment[de]=KDE-Arbeitsfläche +Comment[el]=Επιφάνεια εργασίας +Comment[eo]=KDEa labortablo +Comment[es]=Escritorio +Comment[et]=Töölaud +Comment[eu]=Mahaigaina +Comment[fa]=رومیزی +Comment[fi]=Työpöytä +Comment[fr]=Bureau +Comment[fy]=Buroblêd +Comment[ga]=Deasc +Comment[gl]=Escritorio +Comment[he]=שולחן העבודה +Comment[hr]=Radna površina +Comment[hu]=Munkaasztal +Comment[is]=Skjáborð +Comment[ja]=デスクトップ +Comment[ka]=სამუშაო დაფა +Comment[kk]=Үстел +Comment[km]=ផ្ទៃតុ +Comment[ko]=데스크톱 +Comment[lt]=Darbastalis +Comment[mk]=Работна површина +Comment[nb]=Skrivebord +Comment[nds]=Schriefdisch +Comment[ne]=डेस्कटप +Comment[nl]=Bureaublad +Comment[nn]=Skrivebord +Comment[pa]=ਵੇਹੜਾ +Comment[pl]=Pulpit +Comment[pt]=Ecrã +Comment[pt_BR]=Área de Trabalho +Comment[ru]=Рабочий стол +Comment[se]=Čállinbeavdi +Comment[sk]=Pracovná plocha +Comment[sl]=Namizje +Comment[sr]=Радна површина +Comment[sr@Latn]=Radna površina +Comment[sv]=Skrivbord +Comment[te]=రంగస్థలం +Comment[tg]=Мизи корӣ +Comment[th]=พื้นที่หน้าจอ +Comment[tr]=Masaüstü +Comment[uk]=Стільниця +Comment[uz]=Ish stoli +Comment[uz@cyrillic]=Иш столи +Comment[vi]=Màn hình nền +Comment[wa]=Sicribanne +Comment[zh_CN]=桌面 +Comment[zh_TW]=桌面 diff --git a/applnk/kde-utilities-file.directory b/applnk/kde-utilities-file.directory new file mode 100644 index 000000000..fc20ea670 --- /dev/null +++ b/applnk/kde-utilities-file.directory @@ -0,0 +1,139 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=File +Name[af]=Lêer +Name[ar]=الملف +Name[be]=Файл +Name[bg]=Файл +Name[bn]=ফাইল +Name[br]=Restr +Name[bs]=Datoteka +Name[ca]=Fitxer +Name[cs]=Soubor +Name[csb]=Lopk +Name[cy]=Ffeil +Name[da]=Fil +Name[de]=Datei +Name[el]=Αρχείο +Name[eo]=Dosiero +Name[es]=Archivo +Name[et]=Fail +Name[eu]=Fitxategia +Name[fa]=پرونده +Name[fi]=Tiedosto +Name[fr]=Fichier +Name[fy]=Triem +Name[ga]=Comhad +Name[gl]=Ficheiro +Name[he]=קובץ +Name[hr]=Datoteka +Name[hu]=Fájl +Name[id]=Berkas +Name[is]=Skrá +Name[ja]=ファイル +Name[ka]=ფაილი +Name[kk]=Файл +Name[km]=ឯកសារ +Name[ko]=파일 +Name[ku]=Pel +Name[lt]=Byla +Name[mk]=Датотека +Name[ms]=Fail +Name[nb]=Fil +Name[nds]=Datei +Name[ne]=फाइल +Name[nl]=Bestand +Name[nn]=Fil +Name[pa]=ਫਾਇਲ +Name[pl]=Plik +Name[pt]=Ficheiro +Name[pt_BR]=Arquivo +Name[ro]=Fișier +Name[ru]=Работа с файлами +Name[rw]=Idosiye +Name[se]=Fiila +Name[sk]=Súbor +Name[sl]=Datoteke +Name[sr]=Фајл +Name[sr@Latn]=Fajl +Name[sv]=Fil +Name[te]=దస్త్రం +Name[tg]=Файл +Name[th]=แฟ้ม +Name[tr]=Dosya +Name[uk]=Файл +Name[uz]=Fayl +Name[uz@cyrillic]=Файл +Name[vi]=Tập tin +Name[wa]=Fitchî +Name[zh_CN]=文件 +Name[zh_TW]=檔案 +Icon=kfm +Comment=File +Comment[af]=Lêer +Comment[ar]=الملف +Comment[be]=Файл +Comment[bg]=Файл +Comment[bn]=ফাইল +Comment[br]=Restr +Comment[bs]=Datoteka +Comment[ca]=Fitxer +Comment[cs]=Soubor +Comment[csb]=Lopk +Comment[cy]=Ffeil +Comment[da]=Fil +Comment[de]=Datei +Comment[el]=Αρχείο +Comment[eo]=Dosiero +Comment[es]=Archivo +Comment[et]=Fail +Comment[eu]=Fitxategia +Comment[fa]=پرونده +Comment[fi]=Tiedosto +Comment[fr]=Fichier +Comment[fy]=Triem +Comment[ga]=Comhad +Comment[gl]=Ficheiro +Comment[he]=קובץ +Comment[hr]=Datoteka +Comment[hu]=Fájl +Comment[id]=Berkas +Comment[is]=Skrá +Comment[ja]=ファイル +Comment[ka]=ფაილი +Comment[kk]=Файл +Comment[km]=ឯកសារ +Comment[ko]=글꼴 파일 +Comment[ku]=Pel +Comment[lt]=Byla +Comment[mk]=Датотека +Comment[ms]=Fail +Comment[nb]=Fil +Comment[nds]=Datei +Comment[ne]=फाइल +Comment[nl]=Bestand +Comment[nn]=Fil +Comment[pa]=ਫਾਇਲ +Comment[pl]=Plik +Comment[pt]=Ficheiro +Comment[pt_BR]=Arquivo +Comment[ro]=Fișier +Comment[ru]=Работа с файлами +Comment[se]=Fiila +Comment[sk]=Súbor +Comment[sl]=Datoteke +Comment[sr]=Фајл +Comment[sr@Latn]=Fajl +Comment[sv]=Fil +Comment[te]=దస్త్రం +Comment[tg]=Файл +Comment[th]=แฟ้ม +Comment[tr]=Dosya +Comment[uk]=Файл +Comment[uz]=Fayl +Comment[uz@cyrillic]=Файл +Comment[vi]=Tập tin +Comment[wa]=Fitchî +Comment[zh_CN]=文件 +Comment[zh_TW]=檔案 diff --git a/applnk/kde-utilities-peripherals.directory b/applnk/kde-utilities-peripherals.directory new file mode 100644 index 000000000..03e07a423 --- /dev/null +++ b/applnk/kde-utilities-peripherals.directory @@ -0,0 +1,149 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Peripherals +Name[af]=Randapperatuur +Name[ar]=الأجهزة المحيطية +Name[az]=Avadanlıq +Name[be]=Перыферыя +Name[bg]=Периферия +Name[bn]=পেরিফেরাল +Name[br]=Trobarzhelloù +Name[bs]=Vanjski uređaji +Name[ca]=Perifèrics +Name[cs]=Periférie +Name[csb]=Periferëjné ùrzãdzenia +Name[cy]=Perifferolion +Name[da]=Tilkoblinger +Name[de]=Angeschlossene Geräte +Name[el]=Περιφερειακά +Name[eo]=Periferaĵoj +Name[es]=Periféricos +Name[et]=Välisseadmed +Name[eu]=Periferikoak +Name[fa]=وسایل جانبی +Name[fi]=Laitteet +Name[fo]=Úteindir +Name[fr]=Périphériques +Name[fy]=Râneapparaten +Name[ga]=Forimeallaigh +Name[gl]=Periféricos +Name[he]=ציוד היקפי +Name[hi]=सहायक पुरजे +Name[hr]=Periferni uređaji +Name[hsb]=Periferija +Name[hu]=Perifériák +Name[is]=Jaðartæki +Name[it]=Periferiche +Name[ja]=周辺機器 +Name[ka]=პერიფერიული +Name[kk]=Периферия +Name[km]=គ្រឿង​កុំព្យូទ័រ +Name[ko]=주변 장치 +Name[lo]=ອຸປະກອນຕໍ່ພວງ +Name[lt]=Periferija +Name[lv]=Perifērija +Name[mk]=Периферни уреди +Name[mn]=Залгаатай төхөөрөмжүүд +Name[ms]=Perkakasan +Name[mt]=Apparat +Name[nb]=Tilleggsenheter +Name[nds]=Reedschappen +Name[ne]=परिवृत्तीय +Name[nl]=Randapparaten +Name[nn]=Tilleggseiningar +Name[nso]=Ditswelantle +Name[oc]=Periferics +Name[pa]=ਸਹਾਇਕ ਜੰਤਰ +Name[pl]=Urządzenia peryferyjne +Name[pt]=Periféricos +Name[pt_BR]=Periféricos +Name[ro]=Periferice +Name[ru]=Периферия +Name[rw]=Ibyinyuma +Name[se]=Ovttadagat +Name[sk]=Periférie +Name[sl]=Strojni dodatki +Name[sr]=Периферије +Name[sr@Latn]=Periferije +Name[ss]=Ema-peripherals +Name[sv]=Kringutrustning +Name[ta]=கருவிகள் +Name[te]=పరికరాలు +Name[tg]=Дастгоҳҳои лозимӣ +Name[th]=อุปกรณ์ต่อพ่วง +Name[tr]=Çevre Birimleri +Name[tt]=Cıhazlar +Name[uk]=Периферійні пристрої +Name[uz]=Ulangan uskunalar +Name[uz@cyrillic]=Уланган ускуналар +Name[ven]=Dzipheriferala +Name[vi]=Thiết bị ngoại vi +Name[wa]=Periferikes +Name[xh]=Iilayini zomda +Name[zh_CN]=外设 +Name[zh_TW]=週邊設備 +Name[zu]=Imixhantela +Icon=input_devices_settings +Comment=Peripherals +Comment[af]=Randapparatuur +Comment[be]=Перыферыя +Comment[bg]=Периферия +Comment[bn]=পেরিফেরাল +Comment[br]=Trobarzhelloù +Comment[bs]=Vanjski uređaji +Comment[ca]=Perifèrics +Comment[cs]=Periférie +Comment[csb]=Periferëjné ùrzãdzenia +Comment[cy]=Perifferolion +Comment[da]=Tilkoblinger +Comment[de]=Angeschlossene Geräte +Comment[el]=Περιφερειακά +Comment[eo]=Periferaĵoj +Comment[es]=Periféricos +Comment[et]=Välisseadmed +Comment[eu]=Periferikoak +Comment[fa]=وسایل جانبی +Comment[fi]=Oheislaitteet +Comment[fr]=Périphériques +Comment[fy]=Râneapparaten +Comment[ga]=Forimeallaigh +Comment[gl]=Periféricos +Comment[he]=ציוד היקפי +Comment[hr]=Periferni uređaji +Comment[hu]=Perifériák +Comment[is]=Jaðartæki +Comment[it]=Periferiche +Comment[ja]=周辺機器 +Comment[kk]=Периферия +Comment[km]=គ្រឿង​កុំព្យូទ័រ +Comment[ko]=주변 장치 +Comment[mk]=Периферни уреди +Comment[ms]=Persisian +Comment[nb]=Tikoblede enheter +Comment[nds]=Reedschappen +Comment[ne]=परिवृतिय +Comment[nl]=Randapparaten +Comment[nn]=Tilleggseiningar +Comment[pa]=ਜੰਤਰ +Comment[pl]=Urządzenia peryferyjne +Comment[pt]=Periféricos +Comment[pt_BR]=Periféricos +Comment[ro]=Periferice +Comment[ru]=Периферия +Comment[sk]=Periférie +Comment[sl]=Strojni dodatki +Comment[sr]=Периферије +Comment[sr@Latn]=Periferije +Comment[sv]=Kringutrustning +Comment[te]=పరికరాలు +Comment[tg]=Дастгоҳҳои лозимӣ +Comment[th]=อุปกรณ์ต่อพ่วง +Comment[tr]=Çevre Birimleri +Comment[uk]=Периферійні +Comment[uz]=Ulangan uskunalar +Comment[uz@cyrillic]=Уланган ускуналар +Comment[vi]=Thiết bị ngoại vi +Comment[wa]=Éndjins +Comment[zh_CN]=外设 +Comment[zh_TW]=週邊設備 diff --git a/applnk/kde-utilities-pim.directory b/applnk/kde-utilities-pim.directory new file mode 100644 index 000000000..f2a7ee39a --- /dev/null +++ b/applnk/kde-utilities-pim.directory @@ -0,0 +1,45 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=PIM +Name[ar]=مدبِر المعلومات الشخصي +Name[be]=Кіраўнік персанальнай інфармацыі +Name[bn]=পি-আই-এম +Name[csb]=Priwatnô wëdowiédzô +Name[eo]=PCI +Name[he]=ניהול מידע אישי +Name[ne]=पी आई एम +Name[pl]=Informacje osobiste +Name[ro]=Manager de Informații Personale +Name[ru]=Персональная информация +Name[se]=Peršuvnnalaš diehtogieđahalli +Name[sl]=Osebni podatki +Name[sv]=Personlig information +Name[te]=పిఐఎం +Name[th]=ตัวจัดการข้อมูลส่วนตัว +Name[uk]=Керування інформацією +Name[zh_CN]=个人信息管理 +Icon=korganizer +Comment=PIM +Comment[af]=Persoonlike Informasie Bestuurder +Comment[ar]=مدبر المعلومات الشخصي +Comment[be]=Кіраўнік персанальнай інфармацыі +Comment[bn]=পি-আই-এম +Comment[csb]=Sprôwianie priwatną wëdowiédzą +Comment[de]=Persönliches Informationsmanagement +Comment[eo]=PCI +Comment[fy]=Persoanlike Ynformaasje Behear +Comment[he]=ניהול מידע אישי +Comment[kk]=Дербес ақпарат менеджері +Comment[ne]=पी आई एम +Comment[nl]=Persoonlijke Informatie Management +Comment[pl]=Zarządzanie informacjami osobistymi +Comment[ro]=Manager de Informații Personale +Comment[ru]=Управление личной информацией (PIM) +Comment[se]=Peršuvnnalaš diehtogieđahalli +Comment[sl]=Osebni podatki +Comment[sv]=Personlig informationshantering +Comment[te]=పిఐఎం +Comment[th]=สำหรับจัดการข้อมูลส่วนตัว เช่น เบอร์โทรศัพท์, ที่อยู่ +Comment[uk]=Керування особистою інформацією (PIM) +Comment[zh_CN]=个人信息管理 diff --git a/applnk/kde-utilities-xutils.directory b/applnk/kde-utilities-xutils.directory new file mode 100644 index 000000000..ca0e44eef --- /dev/null +++ b/applnk/kde-utilities-xutils.directory @@ -0,0 +1,166 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=X-Utilities +Name[ar]=عدة X +Name[az]=X Tə'minatları +Name[be]=Службовыя праграмы X +Name[bg]=Инструменти за X +Name[bn]=এক্স-উইটিলিটি +Name[br]=Mavegoù X +Name[ca]=Utilitats de X +Name[cs]=Nástroje X +Name[csb]=X - nôrzãdza +Name[cy]=Defnyddioldebau-X +Name[da]=X-Redskaber +Name[de]=X-Dienstprogramme +Name[el]=Εργαλεία-X +Name[eo]=X-Utilaĵoj +Name[es]=Utilidades-X +Name[et]=X'i utiliidid +Name[eu]=X-tresnak +Name[fa]=برنامه‌های سودمند X +Name[fi]=X-Apuohjelmat +Name[fo]=Hentleikar til X +Name[fr]=Utilitaires X +Name[fy]=Grafyske helpprogramma's +Name[ga]=Uirlisí X +Name[gl]=Utilidades das X +Name[he]=כלי X +Name[hi]=एक्स-यूटिलिटीज़ +Name[hr]=X-alati +Name[hsb]=Pomocniki za X +Name[hu]=X segédprogramok +Name[is]=X Tól +Name[it]=Programmi di X +Name[ja]=X-ユーティリティ +Name[ka]= X-ხელსაწყოები +Name[kk]=X-утилиталар +Name[km]=ឧបករណ៍-X +Name[ko]=X 유틸리티 +Name[lo]=ໃຊ້ປະໂຫຍດ์ X +Name[lt]=X pagalbininkai +Name[lv]=X Utilītas +Name[mk]=X-алатки +Name[mn]=X-Хэрэгслүүд +Name[ms]=Utiliti X +Name[mt]=Utilitajiet tal-X +Name[nb]=X-verktøy +Name[nds]=X-Warktüüch +Name[ne]=X-युटिलिटी +Name[nl]=Grafische hulpprogramma's +Name[nn]=X-verktøy +Name[nso]=X-Didiriswa +Name[pa]=X-ਸਹੂਲਤ +Name[pl]=Narzędzia dla X +Name[pt]=Utilitários do X +Name[pt_BR]=Utilitários X +Name[ro]=Utilitare X +Name[ru]=Утилиты X +Name[rw]=X-Nkemurabibazo +Name[se]=X-reaiddut +Name[sk]=Nastroje pre X +Name[sl]=Potrebščine za X +Name[sr]=X-алати +Name[sr@Latn]=X-alati +Name[ss]=Kwekusetjentiswa-X +Name[sv]=X-verktyg +Name[ta]=X-கருவிகள் +Name[te]=ఎక్స్-సౌలభ్యాలు +Name[tg]=Лавозимотҳои X +Name[th]=โปรแกรมอรรถประโยชน์ X +Name[tr]=X Yardımcı Programları +Name[tt]=X-Faydalıq +Name[uk]=Утиліти X Window +Name[uz]=X uchun vositalar +Name[uz@cyrillic]=X учун воситалар +Name[ven]=Zwishumiswa-X +Name[vi]=Tiện ích X +Name[wa]=Usteyes X +Name[xh]=Izinto eziluncedo ze-X +Name[zh_CN]=X 实用工具 +Name[zh_TW]=X-實用工具 +Name[zu]=Izisebenzi ze-X +Icon=xapp +Comment=X Window Utilities +Comment[af]=X Window Nutsprogramme +Comment[ar]=عدة نوافذ X +Comment[az]=X Window Tə'minatları +Comment[be]=Службовыя праграмы X Window +Comment[bg]=Помощни програми за сървъра X +Comment[bn]=এক্স উইণ্ডো সিস্টেম সম্বন্ধিত নানা প্রোগ্রাম +Comment[br]=Mavegoù X Window +Comment[bs]=Korisni X Window programi +Comment[ca]=Utilitats de X Window System +Comment[cs]=Nástroje X Window +Comment[csb]=Nôrzãdza dlô systemë X Window +Comment[cy]=Defnyddioldebau Ffenestr X +Comment[da]=X-Window redskaber +Comment[de]=X-Window-Dienstprogramme +Comment[el]=Εργαλεία των X Windows +Comment[eo]=Utilaĵoj por la X-Fenestrosistemo +Comment[es]=Utilidades X Window +Comment[et]=X Window utiliidid +Comment[eu]=X Window tresnak +Comment[fa]=برنامه‌های سودمند پنجرۀ X +Comment[fi]=X Window -apuohjelmat +Comment[fo]=Hentleikar til X +Comment[fr]=Utilitaires X-Window +Comment[fy]=X Window-helpprogramma's +Comment[ga]=Uirlisí Fuinneoga X +Comment[gl]=Utilidades das X Window +Comment[he]=כלים של X Window +Comment[hi]=एक्स विंडो यूटिलिटीज़ +Comment[hr]=Alati X prozora +Comment[hsb]=Pomocne programy za X11 +Comment[hu]=X Window segédprogramok +Comment[is]=X gluggatól +Comment[it]=Programmi di X Window +Comment[ja]=X ウィンドウユーティリティ +Comment[ka]=X Window–ს ხელსაწყოები +Comment[kk]=X Window утилиталары +Comment[km]=ឧបករណ៍ X Window +Comment[ko]=X 윈도 유틸리티 +Comment[lo]=ໂປຣແກຣມໃຊ້ໂຫຍດຂອງ X +Comment[lt]=X Window pagalbininkai +Comment[lv]=X logu utilītas +Comment[mk]=Алатки за X Window +Comment[mn]=X-Виндов-хэрэгсэл програмууд +Comment[ms]=Utiliti Tetingkap X +Comment[mt]=Utilitajiet tal-XWindows +Comment[nb]=Verktøy for X-window +Comment[nds]=Hülpprogrammen för X-Finstern +Comment[ne]=X सञ्झ्याल युटिलिटी +Comment[nl]=X Window-hulpprogramma's +Comment[nn]=X Window-verktøy +Comment[nso]=Didiriswa tsa X Window +Comment[pa]=X Window ਸਹੂਲਤਾਂ +Comment[pl]=Narzędzia dla systemu XWindow +Comment[pt]=Utilitários do X Window +Comment[pt_BR]=Utilitários do X Window +Comment[ro]=Utilitare X Window +Comment[ru]=Утилиты X Window +Comment[rw]=Nkemurabibazo Idirishya X +Comment[se]=X Window-reaiddut +Comment[sk]=Nástroje pre X Window +Comment[sl]=Potrebščine za X Window +Comment[sr]=X Window алати +Comment[sr@Latn]=X Window alati +Comment[ss]=X kwekusetjentiswa kweliwindi +Comment[sv]=X-window-verktyg +Comment[ta]=X-சாளர கருவிகள் +Comment[te]=ఎక్స్ విండో సౌలభ్యాలు +Comment[tg]=Лавозимотҳои Х Window +Comment[th]=โปรแกรมอรรถประโยชน์ของ X +Comment[tr]=X Yardımcı Programları +Comment[tt]=X Window Faydalığı +Comment[uk]=Утиліти системи X Window +Comment[uz]=X Windows vositalari +Comment[uz@cyrillic]=X Windows воситалари +Comment[ven]=Zwishumiswa zwa X window +Comment[vi]=Các tiện ích của X window +Comment[wa]=Usteyes pol sistinme grafike X11 +Comment[xh]=X Windows Izinto eziluncedo +Comment[zh_CN]=X Window 实用工具 +Comment[zh_TW]=X 視窗實用工具 +Comment[zu]=Izisebenzi ze-X Window diff --git a/applnk/kde-utilities.directory b/applnk/kde-utilities.directory new file mode 100644 index 000000000..edb9d8757 --- /dev/null +++ b/applnk/kde-utilities.directory @@ -0,0 +1,170 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Utilities +Name[af]=Nutsprogramme +Name[ar]=عدة التشغيل +Name[az]=Tə'minatlar +Name[be]=Службовыя праграмы +Name[bg]=Инструменти +Name[bn]=আনুষঙ্গিক +Name[br]=Mavegoù +Name[bs]=Korisni programi +Name[ca]=Utilitats +Name[cs]=Nástroje +Name[csb]=Nôrzãdza +Name[cy]=Defnyddioldebau +Name[da]=Redskaber +Name[de]=Dienstprogramme +Name[el]=Εργαλεία +Name[eo]=Utilaĵoj +Name[es]=Utilidades +Name[et]=Utiliidid +Name[eu]=Tresnak +Name[fa]=برنامه‌های سودمند +Name[fi]=Apuohjelmat +Name[fo]=Hentleikar +Name[fr]=Utilitaires +Name[fy]=Helpmiddelen +Name[ga]=Uirlisí +Name[gl]=Utilidades +Name[he]=כלים +Name[hi]=यूटिलिटीज़ +Name[hr]=Alati +Name[hsb]=Pomocniki +Name[hu]=Segédprogramok +Name[is]=Nytjatól +Name[it]=Accessori +Name[ja]=ユーティリティ +Name[ka]=ხელსაწყოები +Name[kk]=Утилиталары +Name[km]=ឧបករណ៍ +Name[ko]=유틸리티 +Name[lo]=ໃຊ້ປະໂຫຍດ +Name[lt]=Pagalbininkai +Name[lv]=Utilītas +Name[mk]=Алатки +Name[mn]=Хэрэгсэл програмууд +Name[ms]=Utiliti +Name[mt]=Utilitajiet +Name[nb]=Verktøy +Name[nds]=Warktüüch +Name[ne]=युटिलिटी +Name[nl]=Hulpmiddelen +Name[nn]=Verktøy +Name[nso]=Didiriswa +Name[oc]=Utilitats +Name[pa]=ਸਹੂਲਤ +Name[pl]=Narzędzia +Name[pt]=Utilitários +Name[pt_BR]=Utilitários +Name[ro]=Utilitare +Name[ru]=Служебные +Name[rw]=Nkemurabibazo +Name[se]=Reaiddut +Name[sk]=Nástroje +Name[sl]=Potrebščine +Name[sr]=Алати +Name[sr@Latn]=Alati +Name[ss]=Kwekusetjentiswa +Name[sv]=Verktyg +Name[ta]=கருவிகள் +Name[te]=సౌలభ్యాలు +Name[tg]=Лавозимот +Name[th]=โปรแกรมอรรถประโยชน์ +Name[tr]=Yardımcı Programlar +Name[tt]=Faydalıq +Name[uk]=Утиліти +Name[uz]=Vositalar +Name[uz@cyrillic]=Воситалар +Name[ven]=Zwishumiswa +Name[vi]=Các tiện ích +Name[wa]=Usteyes +Name[xh]=Izinto eziluncedo +Name[zh_CN]=实用工具 +Name[zh_TW]=實用工具 +Name[zu]=Izisebenzi +Icon=package_utilities +Comment=Utilities +Comment[af]=Nutsprogramme +Comment[ar]=عدّة التشغيل +Comment[az]=Tə'minatlar +Comment[be]=Службовыя праграмы +Comment[bg]=Помощни програми +Comment[bn]=প্রায়শই কাজে লাগে এমন কিছু প্রোগ্রাম +Comment[br]=Mavegoù +Comment[bs]=Korisni programi +Comment[ca]=Utilitats +Comment[cs]=Nástroje +Comment[csb]=Nôrzãdza +Comment[cy]= Defnyddioldebau +Comment[da]=Redskaber +Comment[de]=Dienstprogramme +Comment[el]=Εργαλεία +Comment[eo]=Utilaĵoj +Comment[es]=Utilidades +Comment[et]=Utiliidid +Comment[eu]=Tresnak +Comment[fa]=برنامه‌های سودمند +Comment[fi]=Apuohjelmat +Comment[fo]=Hentleikar +Comment[fr]=Utilitaires +Comment[fy]=Helpmiddelen +Comment[ga]=Uirlisí +Comment[gl]=Utilidades +Comment[he]=כלים +Comment[hi]=यूटिलिटीज़ +Comment[hr]=Alati +Comment[hsb]=Pomocne programy +Comment[hu]=Segédprogramok +Comment[is]=Ýmis nytsamleg áhöld +Comment[it]=Accessori +Comment[ja]=ユーティリティ +Comment[ka]=ხელსაწყოები +Comment[kk]=Утилиталары +Comment[km]=ឧបករណ៍ +Comment[ko]=유틸리티 +Comment[lo]=ໂປຣແກຣມໃຊ້ໃຫ້ເປັນປະໂຫຍດ +Comment[lt]=Pagalbininkai +Comment[lv]=Utilītas +Comment[mk]=Алатки +Comment[mn]=Хэрэгсэл програмууд +Comment[ms]=Utiliti +Comment[mt]=Utilitajiet +Comment[nb]=Verktøy +Comment[nds]=Hülpprogrammen +Comment[ne]=युटिलिटी +Comment[nl]=Hulpmiddelen +Comment[nn]=Verktøy +Comment[nso]=Didiriswa +Comment[oc]=Utilitats +Comment[pa]=ਸਹੂਲਤ +Comment[pl]=Narzędzia +Comment[pt]=Utilitários +Comment[pt_BR]=Utilitários +Comment[ro]=Utilitare +Comment[ru]=Различные утилиты +Comment[rw]=Nkemurabibazo +Comment[se]=Reaiddut +Comment[sk]=Nástroje +Comment[sl]=Potrebščine +Comment[sr]=Алати +Comment[sr@Latn]=Alati +Comment[ss]=Kwekusetjentiswa +Comment[sv]=Verktyg +Comment[ta]=கருவிகள் +Comment[te]=సౌలభ్యాలు +Comment[tg]=Лавозимоти гуногун +Comment[th]=โปรแกรมอรรถประโยชน์ +Comment[tr]=Yardımcı Programlar +Comment[tt]=Faydalıqlar +Comment[uk]=Утиліти +Comment[uz]=Vositalar +Comment[uz@cyrillic]=Воситалар +Comment[ven]=Zwishumiswa +Comment[vi]=Các tiện ích +Comment[wa]=Usteyes +Comment[xh]=Izinto eziluncedo +Comment[zh_CN]=实用工具 +Comment[zh_TW]=實用工具 +Comment[zu]=Izisebenzi diff --git a/applnk/old_desktop_files b/applnk/old_desktop_files new file mode 100644 index 000000000..197a2ede2 --- /dev/null +++ b/applnk/old_desktop_files @@ -0,0 +1,4 @@ +kgamma.desktop +randr.desktop +xinerama.desktop +energy.desktop diff --git a/configure.in.bot b/configure.in.bot new file mode 100644 index 000000000..3655e9eb7 --- /dev/null +++ b/configure.in.bot @@ -0,0 +1,25 @@ +dnl put here things which have to be done as very last part of configure + +if test "d58a0606ed616820de291d594602665d" '!=' `echo fnord | $MD5SUM | cut -d ' ' $MD5SUM_CUT` ; then + echo "" + echo "Your md5 program ( $MD5SUM | cut -d ' ' $MD5SUM_CUT ) produces broken output." + echo "The fish:// IOSlave may not function correctly." + echo "" +fi + +if test "$EXRSTATUS" = "no"; then + echo "" + echo "No OpenEXR Libraries were found" + echo "Install the OpenEXR package (from http://www.openexr.org)" + echo "if you want EXR image format support" + echo "" +fi + +if test "$EXRSTATUS" = "old"; then + echo "" + echo "OpenEXR libraries were found, but at least version 1.1.0 is required" + echo "Install a newer OpenEXR package (from http://www.openexr.org)" + echo "if you want EXR image format support" + echo "" +fi + diff --git a/configure.in.in b/configure.in.in new file mode 100644 index 000000000..14401a5e7 --- /dev/null +++ b/configure.in.in @@ -0,0 +1,276 @@ +#MIN_CONFIG + +KDE_ENABLE_HIDDEN_VISIBILITY + +dnl PAM, shadow passwords, libcrypt +KDE_PASSWDLIBS + +DEF_PAM_SERVICE(kdm, kdm, KDM) +DEF_PAM_SERVICE(kcp, kcheckpass, KCHECKPASS) +DEF_PAM_SERVICE(kss, kscreensaver, KSCREENSAVER) + +dnl Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS(sys/time.h crypt.h \ + sys/select.h sys/ioctl.h sys/stropts.h stropts.h termio.h termios.h sys/termios.h \ + lastlog.h sys/socket.h sys/sockio.h \ + sys/m_wait.h ncurses.h paths.h login_cap.h syslog.h \ + sys/wait.h sys/ucred.h sys/mount.h floatingpoint.h fstab.h mntent.h \ + Alib.h libutil.h util.h time.h limits.h vfork.h string.h float.h \ + math.h nan.h ieeefp.h +) +AC_CHECK_HEADER(pty.h) +AC_CHECK_FUNC(ptsname,,) + + +dnl Checks for Alib on HP-UX (added by deller, Apr 29 1999) +AC_CHECK_LIB(Alib, main, [LIBALIB="-lAlib"]) dnl HP-UX network audio server +AC_SUBST(LIBALIB) + +dnl Checks for RPC functions +AC_CHECK_FUNC(clnttcp_create, , [ + AC_CHECK_LIB(nsl, clnttcp_create, [LIBRPC="-lnsl"])]) +AC_SUBST(LIBRPC) + +dnl Check for ossaudio on NetBSD +AC_CHECK_LIB(ossaudio, main, [LIBOSSAUDIO="-lossaudio"]) +AC_SUBST(LIBOSSAUDIO) + +dnl Check for AIX stuff +AC_CHECK_LIB(cfg, main, [LIBCFG="-lcfg"]) dnl for AIX +AC_SUBST(LIBCFG) +AC_CHECK_LIB(odm, main, [LIBODM="-lodm"]) dnl for AIX +AC_SUBST(LIBODM) + +dnl SMB checks moved to their own configure.in.in + +kde_have_setupterm=yes +AC_CHECK_LIB(curses, setupterm, [LIBCURSES=-lcurses], + AC_CHECK_LIB(ncurses, setupterm, [LIBCURSES=-lncurses], + AC_CHECK_LIB(mytinfo, setupterm, [LIBCURSES=-lmytinfo], + kde_have_setupterm=no))) + +AC_SUBST(LIBCURSES) + +if test "$kde_have_setupterm" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_SETUPTERM, 1, [Define if you have setupterm in -l(n)curses]) +fi + +AC_CHECK_FUNC(res_init, , + AC_CHECK_LIB(resolv, res_init, [LIBRESOLV="-lresolv"], , $LIBSOCKET)) dnl for Sun + +AC_SUBST(LIBRESOLV) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_LANG_CPLUSPLUS +AC_HEADER_TIME + +dnl check if the compiler has bool +AC_CHECK_BOOL +AC_LANG_C +AC_C_LONG_DOUBLE +AC_TYPE_GETGROUPS + +dnl for libsmb +AC_CHECK_SIZEOF(char,1) +AC_CHECK_SIZEOF(short,2) +AC_CHECK_SIZEOF(int,4) +AC_CHECK_SIZEOF(long,4) +AC_C_BIGENDIAN + +AC_CHECK_FUNCS(socket powl sqrtl strdup getdtablesize setpgid nice seteuid vsyslog initgroups setgroups getgroups grantpt pw_encrypt setpriority getpt unlockpt ptsname waitpid getpassphrase) +AC_CHECK_MKSTEMPS +AC_CHECK_SETENV +AC_CHECK_UNSETENV +AC_CHECK_GETDOMAINNAME +AC_CHECK_GETHOSTNAME +AC_CHECK_USLEEP +AC_CHECK_RANDOM +AC_CHECK_S_ISSOCK +AC_CHECK_KDEMAXPATHLEN +AC_MSG_CHECKING([if it's safe to enable UTMP]) + +case "$host_os" in +linux*) utmp_support=yes; + ;; +freebsd*) utmp_support=yes; + ;; +kfreebsd*-gnu) utmp_support=yes; + ;; +*) utmp_support=no; +esac + +AC_MSG_RESULT($utmp_support) + +if test "$utmp_support" = yes; then + AC_DEFINE_UNQUOTED(UTMP_SUPPORT, 1, [Define if you want to use utmp entries]) +fi + +AC_CHECK_UTMP_FILE + +dnl Checks for Solaris' libkstat +kde_have_kstat=yes +AC_CHECK_LIB(kstat, kstat_open, [LIBKSTAT=-lkstat], kde_have_kstat=no) +AC_SUBST(LIBKSTAT) +if test "$kde_have_kstat" = "yes"; then + AC_DEFINE(HAVE_KSTAT, 1, [Defines if you have Solaris' libkstat]) +fi + +dnl Checks for libdevinfo (Solaris 7 and later) +dnl since the library is available on earlier Solaris releases (but +dnl with a completely different and undocumented interface), +dnl we have to verfy that the required header is present as well +AC_CHECK_HEADER(libdevinfo.h, + kde_have_libdevinfo_h=yes, + kde_have_libdevinfo_h=no) +if test "$kde_have_libdevinfo_h" = "yes"; then + kde_have_libdevinfo_lib=yes + AC_CHECK_LIB(devinfo, di_init, [LIBDEVINFO=-ldevinfo], kde_have_libdevinfo_lib=no) + if test "$kde_have_libdevinfo_lib" = "yes"; then + AC_DEFINE(HAVE_LIBDEVINFO_H, 1, [Defines if you have libdevinfo of Solaris 7 or later]) + AC_SUBST(LIBDEVINFO) + fi +fi + +dnl check for java +KDE_CHECK_JAVA_DIR + +dnl check for an md5sum implementation. the GNU versions +dnl produce different output from the FreeBSD / Solaris +dnl versions, so MD5SUM_CUT shows how to retrieve the +dnl checksum from the output. +MD5SUM_CUT="-f 1" +AC_PATH_PROGS(MD5SUM, [md5sum gmd5sum], []) +if test -z "$MD5SUM" ; then + AC_PATH_PROG(MD5SUM, [md5], []) + if test -z "$MD5SUM" ; then + AC_PATH_PROG(MD5SUM, [md5], [], [/sbin]) + fi + if test -z "$MD5SUM" ; then + AC_MSG_WARN([No md5sum, gmd5sum, or md5 was found. The fish IOSlave cannot be compiled.]) + # Will fail anyway, but in a better way than a blank command. + MD5SUM="md5sum" + MD5SUM_CUT="-f 1" + else + MD5SUM_CUT="-f 4" + fi +fi +AC_SUBST(MD5SUM_CUT) + +dnl ----- Checks for X11 extensions ----- +ac_save_ldflags="$LDFLAGS" +LDFLAGS="$X_LDFLAGS" + +dnl --- XTEST check +XTESTLIB= +KDE_CHECK_HEADER(X11/extensions/XTest.h, + [AC_CHECK_LIB( Xtst, XTestFakeKeyEvent, + [AC_DEFINE(HAVE_XTEST, 1, [Define if you have the XTest extension]) + XTESTLIB=-lXtst], + , [ $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS ]) + ]) +AC_SUBST(XTESTLIB) + +dnl --- XKB check +KDE_CHECK_HEADER(X11/XKBlib.h, + [AC_CHECK_LIB( X11, XkbLockModifiers, + [AC_DEFINE(HAVE_XKB, 1, [Define if you have the XKB extension])], + , [ $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS ]) + AC_CHECK_LIB( X11, XkbSetPerClientControls, + [AC_DEFINE(HAVE_XKBSETPERCLIENTCONTROLS, 1, [Define if you have XkbSetPerClientControls])], + , [ $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS ]) + ], [], [#include ]) + +dnl --- Xcursor check (not technically an extension) +KDE_CHECK_HEADERS(X11/Xcursor/Xcursor.h, + [KDE_CHECK_LIB(Xcursor, XcursorSupportsARGB, [ + LIB_XCURSOR=-lXcursor + AC_DEFINE_UNQUOTED(HAVE_XCURSOR, 1, [Define to 1 if you have Xcursor]) + ], [ LIB_XCURSOR= ], [ $X_PRE_LIBS -lX11 $X_EXTRA_LIBS ])], + [ LIB_XCURSOR= ], [#include ]) +AC_SUBST(LIB_XCURSOR) +AM_CONDITIONAL(have_xcursor, test "$LIB_XCURSOR" = -lXcursor) + +dnl XRender check +KDE_CHECK_HEADER(X11/extensions/Xrender.h, [xrender_h=yes], [xrender_h=no]) +if test "$xrender_h" = yes; then + KDE_CHECK_LIB(Xrender, XRenderComposite, [ + LIB_XRENDER=-lXrender + AC_DEFINE_UNQUOTED(HAVE_XRENDER, 1, [Defined if your system has XRender support]) + ], [], -lXext -lX11 $X_EXTRA_LIBS) +else + LIB_XRENDER= +fi +AC_SUBST(LIB_XRENDER) + +LDFLAGS="$ac_save_ldflags" +dnl ----- end of X11 extension checks ----- + + +CXXFLAGS="$CXXFLAGS $KDE_DEFAULT_CXXFLAGS" + +KDE_INIT_DOXYGEN([KDE base API Reference], [Version $VERSION]) + +dnl Ok, kdebase has _sooo_ many Makefiles, that the check for uniqueness +dnl of those filenames in the list of the files (done by autoconf macros +dnl itself) is taking more that nine minutes (!). For kdebase only we take +dnl out that test. (matz@kde.org) +m4_define([_AC_CONFIG_UNIQUE], [])dnl + +AH_VERBATIM(_osf_stuff, [ +#if !defined(HAVE_SETEUID) +#define seteuid(_eu) setresuid(-1, _eu, -1) +#endif +]) + +AH_VERBATIM(_broken_xkb, [ +#if defined(__osf__) || defined(__APPLE__) +#define AVOID_XKB /* for konsole to avoid XKB and XTEST */ +#endif +]) + +dnl this is for kdm and kcontrol +KDE_EXPAND_MAKEVAR(KDE_CONFDIR, kde_confdir) +AC_DEFINE_UNQUOTED(KDE_CONFDIR, "$KDE_CONFDIR", [KDE's configuration directory]) +KDE_EXPAND_MAKEVAR(KDE_DATADIR, kde_datadir) +AC_DEFINE_UNQUOTED(KDE_DATADIR, "$KDE_DATADIR", [KDE's static data directory]) +KDE_EXPAND_MAKEVAR(KDE_BINDIR, kde_bindir) +AC_DEFINE_UNQUOTED(KDE_BINDIR, "$KDE_BINDIR", [KDE's binaries directory]) +AC_SUBST(KDE_BINDIR) + +dnl libart is used by kdm, kcontrol and thumbnails code in kioslaves +KDE_FIND_PATH(libart2-config, LIBART_CONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/local/bin /opt/local/bin], [ + AC_MSG_WARN([Could not find libart anywhere, check http://www.levien.com/libart/]) +]) + +if test -n "$LIBART_CONFIG"; then + vers=`$LIBART_CONFIG --version 2>/dev/null | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` + if test -n "$vers" && test "$vers" -ge 2003008 + then + LIBART_LIBS="`$LIBART_CONFIG --libs`" + LIBART_RPATH= + for args in $LIBART_LIBS; do + case $args in + -L*) + LIBART_RPATH="$LIBART_RPATH $args" + ;; + esac + done + LIBART_RPATH=`echo $LIBART_RPATH | sed -e "s/-L/-R/g"` + LIBART_CFLAGS="`$LIBART_CONFIG --cflags`" + + AC_DEFINE_UNQUOTED(HAVE_LIBART, 1, [Defines if your system has the libart library]) + else + AC_MSG_WARN([You need at least libart 2.3.8]) + fi +fi + + +AC_SUBST(LIBART_LIBS) +AC_SUBST(LIBART_CFLAGS) +AC_SUBST(LIBART_RPATH) + +AC_ARG_WITH([composite], + AC_HELP_STRING([--without-composite], [Disable Xcomposite support (default: check)]) ) + diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 000000000..6812bd2d1 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,5 @@ + +KDE_LANG = en +KDE_DOCS = AUTO +SUBDIRS = $(AUTODIRS) + diff --git a/doc/faq/Makefile.am b/doc/faq/Makefile.am new file mode 100644 index 000000000..9c7a6607a --- /dev/null +++ b/doc/faq/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = khelpcenter/faq + diff --git a/doc/faq/TODO b/doc/faq/TODO new file mode 100644 index 000000000..42a37ca29 --- /dev/null +++ b/doc/faq/TODO @@ -0,0 +1,35 @@ +TODO: + +- Cull any questions that are specific to KDE =< 3.4 +- Look into reorganising sections to make finding things much easier. + + + +I'm keeping this in here for the amusement factor. Every time I look at it I rememeber that while I'm not a very good FAQ maintainer, physos wasn't much better ;) + +Last modified by physos 2002-12-27 + +Before 3.2 release +_________________________________________________ + +- Split up the monolith docbook (done) +- Get rid of 1.1.2 stuff (confusion) +- check if things are still working + * compile tutorials for the various OS's + * workarounds still needed? + * workarounds still working? + * answers are still valid? + * easier solutions? +- complete revision ? +- New structure ? +- Find maintiners for single parts +- what needs to be added ? + +[22:15:47] 1: move the faq (and other kdebase docs) up to kdebase/doc/ +so that docs.kde.org will pick them up and generate them +[22:16:05] then remove the copies on www.kde.org, put in redirects to the new +location, and have one, autogenerated and searchable copy all the time +[22:16:17] sounds nice +[22:16:24] will look into it + + diff --git a/doc/faq/about.docbook b/doc/faq/about.docbook new file mode 100644 index 000000000..89c7b6033 --- /dev/null +++ b/doc/faq/about.docbook @@ -0,0 +1,72 @@ + + + +About this <acronym>FAQ</acronym> + + + + +What can I do to help out with this FAQ? + + + + +First, send us any errors that you may find. Also, any +suggestions that you might have, are appreciated. Better yet, send us +everything that you think is unclear, and if possible, send us what +you think would be a clearer solution. The email address of the current maintainer is jhall@kde.org. + + +Second, send us your solutions of those frequently-asked +questions which are still not in this FAQ. We will +put them in as soon as possible. + +Last but not least, please make full use of this +FAQ. Read this FAQ (and other +relevant documentation) well before asking questions on the various +&kde; mailing lists or newsgroups. + + You might also want to consider becoming a +FAQ maintainer. Please refer to for more details. + + + + + + +How do I become a FAQ maintainer? + + + +Actually, it is very easy to become an FAQ +maintainer, and we are always in need of fresh blood. :-) Just send +us an email at kde-doc-english@kde.org. + + + + + + + + diff --git a/doc/faq/configkde.docbook b/doc/faq/configkde.docbook new file mode 100644 index 000000000..f0cb4d2be --- /dev/null +++ b/doc/faq/configkde.docbook @@ -0,0 +1,250 @@ + + +Configuring &kde; + + + + +How do I set the language used by &kde;? + + + +There are two ways to set the language &kde; uses in the +messages it will display: + + +Using the &kde; Control Center +Fire up the &kde; Control Center and select +Regional & Accessibility followed by +Country/Region & Language. You can select your language and location +here. If &kde; cannot find a translation in the first language +chosen, it will fall back on the default language. This is usually +(American) English by default. +Using the &kde; Control Center is the preferred way of choosing +languages in &kde;. + +Using the LANG environment variable +The second method uses the standard locale setting on +your system. To change the language, simply set the environment +variable LANG accordingly. For example, if your shell +is bash, execute +export LANG=de +to set German as the language used. + + + + + + + +Is there any keyboard switcher for international keyboards for +&kde;? + + + +Yes, you can configure it using the &kde; Control Center +Regional & Accessibility +Keyboard Layout + configuration page. + + + + + + +How do I replace the standard text login screen with the +&kde; login screen? + + +Your distribution/&UNIX; flavor may have its own setup tools to +change this (⪚ YaST on &SuSE; &Linux;). This will +be the safest way to enable the &kde; login screen. However, if for some reason +you do not wish to use these tools, the following instructions may be useful. +First, you need to change to the xdm runlevel (runlevel 5 on +&RedHat; and &SuSE; systems) by editing your +/etc/inittab file. In the file, you should have +a line saying id:3:initdefault:. Change it to +id:5:initdefault:. Now, at the end of the file, +comment out the following line: +x:5:respawn:/usr/bin/X11/xdm -nodaemon and +replace it with +x:5:respawn:/opt/kde/bin/kdm +-nodaemon. +The location of &kdm; may differ on your +system. +For changes to take effect immediately, type init +5 (for &RedHat; systems) at the shell prompt. +It is risky to initiate a graphical login without +checking beforehand whether it works. If it fails to work, you would +be in for a hard time getting back.... + + + +For FreeBSD, you should edit the file /etc/ttys +and change one of the lines that look like +ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure +to instead say ttyv8 "/usr/local/bin/kdm -nodaemon" xterm +off secure. + + + + + + +I would like to click the &LMB; anywhere on the +desktop and have the K menu displayed. + + +Open the &kde; Control Center and +choose Desktop +Behavior. You +can now choose the behavior of mouse clicks on the desktop. To have +the K menu open from a single &LMB; click, change +the entry labeled Left button to say +Application Menu. + + + + + +Where do I find information regarding &kde; themes? + + +Go to http://kde.themes.org/ or http://www.kde-look.org. + + + + + +How do I change &MIME; Types? + + +If you are using &konqueror;, do this instead: first, open a +&konqueror; window and choose +SettingsConfigure +Konqueror, then File Associations. Find the type you want to change +(⪚ text/english or +image/gif), and set the application preference order +to whatever you want. + + + + + +&kde; (&kdm;) does not read my +.bash_profile! + + +The login managersxdm and &kdm; do +not run a login shell, so .profile, +.bash_profile, &etc; are not +sourced. When the user logs in, xdm runs +Xstartup as root and then +Xsession as user. So the normal practice is to add +statements in Xsession to source the user +profile. Please edit your Xsession and +.xsession files. + + + + + +How do I use &TrueType; fonts in &kde;? + + + +You need to install &TrueType; font support into your &X-Window; configuration. +Please take a look at x.themes.org for the fonts, and +xfsft: +&TrueType; Font Support For X11 or X-&TrueType; Server Project Home +Page for the font servers. + +If you have a bunch of &TrueType; fonts from &Microsoft; +&Windows;, edit the XF86Config file to get the +fonts from the font folder. Then just tell &kde; to use these new +fonts with the font administrator utility. + + + + + + +Is it possible to enter, show and work with the Euro Symbol in +&kde;? + + +Yes and no. For details, look here: http://www.koffice.org/kword/euro.php. + + + + +How do I run a program at &kde; startup? + +There are many ways to do that. If what you want to do +is to run some scripts that would set some environment variables (for +example, to start gpg-agent, ssh-agent and others), you can put +these scripts into $KDEHOME/env/ and make sure their names end in +.sh. $KDEHOME is +usually a folder named .kde +(note the period at the beginning) in your home +folder. If you want scripts to be executed for all &kde; users, you can +put them under $KDEDIR/env/, where $KDEDIR is the prefix &kde; was +installed to (you can find this out using the command +kde-config --prefix). +If you wish to start a program after &kde; has started, you may want to use the +Autostart folder. To add +entries to the Autostart folder: + +Open &konqueror;. + +Select GoAutostart + from the menubar. + +Right-click in the window view area and select Create NewFileLink to +Application + + +Click on the Application tab in +the window that appears and enter the name of the command to run in +the Command text box. + + + + + + + + + +How can I allow more than one user to be logged in a at a time? Can &kde; do fast user switching? + + + +To enable more than one user to log in at one time on the same +computer (sometimes referred to as fast user switching) you +need to tell the program that logs you in that it can use more than one +session (or, in &X-Window; terms, display) at a time. + +In &kde;, this program is called &kdm; which stands for &kde; +Display Manager. If you are not using &kdm; as your login screen +then you will need to consult the documentation for the software you are using on how to +accomplish multiple sessions. + +By default, this will be configured at installation time automatically +if &kdm; supports virtual terminals on your system (currently Linux only). +If it was not configured automatically, consult the &kdm; manual, section +Specifying permanent &X-Server;s. +After modifying kdmrc, you will have to let &kdm; know about it; just +invoke killall -HUP kdm. + + + + diff --git a/doc/faq/contrib.docbook b/doc/faq/contrib.docbook new file mode 100644 index 000000000..807050ba7 --- /dev/null +++ b/doc/faq/contrib.docbook @@ -0,0 +1,164 @@ + + + + +Contributing + + + + +How can I contribute to &kde;? + + +&kde; is a free software project that lives from voluntary +contributions. Everybody is encouraged to contribute to &kde;. Not +only programmers are welcome. There are many ways in which you can +help to improve &kde;: + +Test the software. +Send in bug reports. For more information on this, +see How do I submit a bug +report?. +Write documentation or help files. You can get some +information by visiting the &kde; Editorial Team +Home Page. +Translate programs, documentation, and help files. +For more information on this, you should visit The &kde; Translators' and Documenters' Web +Site. +Draw nice icons or compose sound effects. You can +visit the &kde; +artists page to find out more. +Write articles and books about &kde;. If you want to +help spread the word about &kde;, simply send an email to +kde-pr@kde.org. This will get you in touch +with the &kde; public relations volunteers. +Program new &kde; applications. Please refer to for more information. + Of course, sponsors are also +welcome. :-) + +There are several places to look for more information if you +want to get involved in the development. The first step is to +subscribe to some of the mailing +lists. You will soon see something +that can be improved or added. + + + + + +How do I submit a bug report? + + +There is a bug tracking system available at http://bugs.kde.org. The +system features a wizard to submit new bug reports and a +list of all known bugs. +The easiest way to submit a bug is to select +HelpReport +Bug... from the menu bar of the application +with the bug. This will open a small dialog box with a link +to the bug tracking system. Please make sure to follow the +instructions of the bug reporting wizard. + + + + + +I want to program for &kde;. What should I do first? + + +Everybody is encouraged to develop software for &kde;. What you +should do first depends strongly on your experience, ⪚ whether you have +already learned C++ or have experience with the &Qt; toolkit and so +on. +To get into &kde; programming, you will need some basic tools: +automake, +autoconf, and +egcs. You should look to http://developer.kde.org/ +for more tips. +Another excellent resource for learning &kde; +programming is the &Qt; +online tutorials. These are installed along with &Qt;. To view them, +open $QTDIR/doc/html/index.html in +&konqueror; and bookmark it. The tutorials +can be found under "Using +Qt". The source code for each lesson can be found in the $QTDIR/tutorial +directory. +There is, however, one thing that everybody interested in +programming for &kde; should do: subscribe to the developers +mailing list. To subscribe, you have to send an email to +kde-devel-request@kde.org +with the subject subscribe +your_email_address. +Please read How to +subscribe/unsubscribe to these lists carefully. Everything +said there applies to the development list as +well. + + + + + +How do I get access to &kde; SVN? + + +The &kde; project uses SVN to develop the +core parts of the software. Usually, when you have changed one of the +parts (⪚ fixed a bug), and you want to commit this change, the best +way is to create a patch against a current snapshot and send this +patch to the developer/maintainer of the respective program. +If you are doing this more or less regularly, there are instructions here on how to get write access to the SVN repository: +http://developer.kde.org/documentation/other/developer-faq.html#q1.8. But be aware that more users will slow +down SVN access for all developers, so we want to +keep the number of people with direct SVN access +reasonably small. But feel free to ask! + + + + + +Can I have read-only access to the SVN repository? + + +Yes. Instructions on how to get anonymous, read-only SVN access are here: +http://developer.kde.org/source/anonsvn.html + + + + + + +Are there any SVN mirror sites for &kde;? + + +No, there are currently no anonymous SVN mirror sites for &kde;. If you're interested in setting one up, please contact sysadmin@kde.org + + + + + + +How do I go about translating &kde; programs into my native +language? + + +Look at the The &kde; +Translators' and Documenters' Web Site to see whether your +program is already translated (most are). Otherwise you will find +information there on how to do it yourself. + + + + + + diff --git a/doc/faq/desktop.docbook b/doc/faq/desktop.docbook new file mode 100644 index 000000000..da3de1608 --- /dev/null +++ b/doc/faq/desktop.docbook @@ -0,0 +1,97 @@ + + + +The desktop + + + + +How do I add an application to the desktop? + + + +Just choose the desired application from the K menu and drag and drop it to the Desktop. + +For applications not listed in the K menu, +use the &RMB; on the desktop and choose Create NewFile +Link to Application... and fill in the configuration for the application you want to link to. + + + + + + + +How do I mount/unmount a device from the desktop? + + + +First, make sure you are allowed to mount/umount the relevant device as a user. + +Then you can add any device via &RMB; on the desktop and then choosing Create NewLink to Device and then selecting the device of the type you wish to control from the desktop. Fill in the settings for the device in the dialog that appears and click OK. You can use the resulting desktop icon to mount/unmount the device from the desktop. + + + + + + + + +Where are the icons kept? + + +The icons can be found only in $KDEDIRS/share/icons or $HOME/.kde/share/icons or +$HOME/.kde2/share/icons. To use icons +stored in other locations, you must either copy them into one of the +above-mentioned fixed &kde; locations or make symlinks. + + + + + +How do I use the mouse scroll wheel in &kde;? + + +Mouse wheel support comes with &Qt; 2.0 and above, so &kde; based on +that will automatically support the use of the mouse scroll wheel if your system is configured correctly. Check your &X-Server; settings support the use of a scrollwheel if it is not working. + + + + + +How do I launch applications in a particular desktop? + + +&kde; comes with a program called &kstart;. +To start an xterm on the second desktop and then activate it use: + +kstart xterm. +Note that the option is important. It takes an +argument which is a regular expression matching the title of the window to +apply the settings to. +Please read kstart for more magic +available with &kstart; (and there is an abundance). + + + + + + +Where do I save my files if I want them to appear directly on +the desktop? + + +$HOME/Desktop. You might +need to refresh your desktop after you have saved your files. + + + + diff --git a/doc/faq/filemng.docbook b/doc/faq/filemng.docbook new file mode 100644 index 000000000..bfe6d1e98 --- /dev/null +++ b/doc/faq/filemng.docbook @@ -0,0 +1,207 @@ + + + +The File Manager + +&kde;'s file manager is &konqueror;. The +&konqueror; home page is located at http://www.konqueror.org where a +&konqueror; specific FAQ can be found. + + + + + + +How can I change the appearance of a folder in +&konqueror;? + + +Right-click the folder, select Properties, +click on the large icon in the dialog which appears, and choose another +icon. To change the icon displayed for entries in the +K Menu, use the Menu Editor, +located at SettingsMenu +Editor. + + + + + + +How can I do non-anonymous &FTP; transfers with &konqueror;? + + +Normally, if you enter a &URL; like +ftp://ftp.somehost.com, +&konqueror; will attempt an anonymous login to the &FTP; server. If you +want to login as a particular user, enter a &URL; like +ftp://username@ftp.somehost.com +instead. &konqueror; will ask for your password and connect to the +server. + + + + + + +How do I specify the startup folder for &konqueror;? + + + +Using the &RMB;, click on the Home icon and choose +Properties. Under the +Application tab you will probably find something like +kfmclient openProfile filemanagement; just append +file:/whereever/you/want with the +folder you would like &konqueror; to start in. + + + + + + +How do I rename files? + + +Simply right click on the file and select +Rename or press the keyboard shortcut F2 with a file selected. + + + + + +Where did the delete entry from my right-click context menu go? + + +In &kde; 3.4 the delete context menu entries that bypass the +trashcan are no longer displayed by default. To enable them, go to +SettingsConfigure +&konqueror; and select +Behaviour in the iconbar to the left. Tick the checkbox +Show 'Delete' context menu entries which bypass the +trashcan. + + + + + +How do I configure the programs that &konqueror; uses to +open different types of files? + +In order to configure file associations, you should go to the +&kcontrolcenter; and choose the item File +Associations under the category KDE +Components. + +Suppose the default PDF viewer is now &kghostview; and +you would prefer to use KPDF as a viewer. You +would simply type pdf in the search box at the top of +the dialog, choose pdf in the +application group and move +KPDF up. In the Embedding +tab you can also choose which component other applications will use to +display files (for example, when viewing files in &konqueror; or using +&ark;'s embedded viewer). + + + + + +When I try to click on a folder in &konqueror;, I get the +message: There appears to be a configuration error. You have +associated Konqueror with inode/directory, but it cannot handle this file +type. + + +You need to make sure that the embedding settings for inode/directory +are correct: + +In &konqueror;, go to +SettingsConfigure +Konqueror and then to the File +Associations page. Open +inode->directory in the tree view. Click on +the +Embedding tab. Make sure that Left Click +Action is set to Show file in embedded +viewer, and by default Icon View (konq_iconview) +is at the top +of Services Preference Order. + + + + + + What are and + in the Execute line? +They are used by all &kde; applications (since they are implemented in +KApplication and all good &kde; programs create a +KApplication object before they even look at the +command line arguments). A standard line for a &kde; +application looks like this: foo +. Pretty confusing, +-but it has been designed in that way so that it can integrate legacy, +non-&kde; applications as smoothly as possible. &konqueror;, when executing +the line above, will extend the command to +foo . Both the icon and the mini-icon as well as "The +Foo" are properties defined in the .desktop file. If +the icons are not defined, they simply default to the executable name +foo. + +This way a user can change these things in &kmenuedit; for his or her +applications. The option is important, because no +user will accept that the menu item Editor starts +something called kedit-0.9pl4-build47. Instead, he +expects a window called Editor. Furthermore these +names are localized, i.e. an American user launches +CD-Player and gets a window called +CD-Player while a German user launches +CD-Spieler and gets a window called +CD-Spieler. + + + + + +How do I make &konqueror; start up without a menu bar? +I can't save a view profile when the menu bar is invisible! + + +The easiest way to do this is to edit &konqueror;'s +configuration file manually. Add the following lines to +~/.kde/share/config/konquerorrc: + +[KonqMainWindow] +MenuBar=Disabled + + + +On restarting &konqueror;, the menubar should be hidden. + + + + + + + + diff --git a/doc/faq/getkde.docbook b/doc/faq/getkde.docbook new file mode 100644 index 000000000..ceabb2561 --- /dev/null +++ b/doc/faq/getkde.docbook @@ -0,0 +1,79 @@ + + + +Getting &kde; + + + + +Where do I get &kde;? + + + +The easiest way to get &kde; is to install a &Linux; distribution or another UNIX-like OS that ships with &kde;. +You can find an up-to-date list of distributions that ship +with &kde; here. For alternative methods of +trying &kde; that do not require you to be running &Linux;, please see +Try &kde; + +The main distribution site for &kde; is +ftp.kde.org. However, this site is +often under heavy load, so you might prefer to use +download.kde.org which automatically +redirects you to the mirror nearest to you. +You can also have a look at the list of &kde; mirror sites. + + + + + +What is the current version? + + + +Currently, the latest stable version is 3.5.5 + +The &kde; 3.5.5 Info +Page contains a lot of information specific to this +release. + + + + + +Where do I find &kde; snapshots? + + +You can get the latest snapshots from ftp://ftp.kde.org/pub/kde/unstable/snapshots. +You might also want to consider setting up your own SVN client in order to +maintain the latest snapshot at all times. Please refer to Anonymous SVN and &kde; for further +information. + + + + + + + +Where do I get &Qt;? + + +&Qt; is a product of the Norwegian company Trolltech. You can +always get the latest &Qt; version from their +&FTP; server. + +And with most up-to-date &Linux; distributions, &Qt; is already +included. Please see for the version +of &Qt; you need. + + + + + + diff --git a/doc/faq/index.docbook b/doc/faq/index.docbook new file mode 100644 index 000000000..f114e3993 --- /dev/null +++ b/doc/faq/index.docbook @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + +&kde; Frequently Asked Questions + + + +The &kde; Team + + + + + + +1997 +1998 +1999 +2000 +2001 +2003 +2004 +2005 +The &kde; Team + + +&FDLNotice; + +2005-01-19 +3.4 + + This is a compilation of the most frequently asked +questions about the K Desktop Environment. Please report any bugs, +inconsistencies, or omissions you find in this &FAQ; to +kde-doc-english@kde.org. Please do not mail your questions +to this list. Post them to the &kde; mailing lists and newsgroups +instead. They are monitored for this &FAQ;. + + +KDE +FAQ +question +answer + + + +&faq-about; +&faq-intro; +&faq-getkde; +&faq-install; +&faq-panel; +&faq-desktop; +&faq-winmng; +&faq-filemng; +&faq-webbrowse; +&faq-configkde; +&faq-kdeapps; +&faq-sound; +&faq-nonkdeapps; +&faq-tips; +&faq-misc; +&faq-qt; +&faq-moreinfo; +&faq-questions; +&faq-contrib; + + +Credits and License + +The current &FAQ; maintainers are: + + +J Hall +jes.hall@kdemail.net + + +Many of the answers in this &FAQ; are taken +from the various &kde; mailing lists and newsgroups. Here is a +big thank you to all of you who have contributed +answers that eventually appear in this &FAQ;. + +Special thanks go to the former &FAQ; +maintainers, Rainer Endres and Mr. Lee Wee Tiong + + + + +&underFDL; + + +&documentation.index; + + + diff --git a/doc/faq/install.docbook b/doc/faq/install.docbook new file mode 100644 index 000000000..6ab33ef78 --- /dev/null +++ b/doc/faq/install.docbook @@ -0,0 +1,726 @@ + + + +Installation instructions + +These are the generic installation instructions for the K +Desktop Environment. Please complement your reading with the +READMEs and INSTALLs that +come along with the package. Please read them carefully and try to +help yourself out if anything goes wrong. If you need further +assistance, consider joining the &kde; mailing lists +(see our web site instructions for joining the &kde; +mailing +lists) or newsgroups. + + + + + + + +To the would-be converts + + + +So you have heard the rumors. Or you have seen the screenshots. +And you are dying to get hold of &kde;. But you know next to nothing +about this whole alternative OS business. Don't worry! +You only need to do some (well, maybe not some) reading, that's +all! + +&kde; does not run on any version of &Microsoft; &Windows; or OS/2 (yet). To run +&kde;, you need to have a &UNIX; system. Please refer to for more details. + +Decide on a platform and set it up for your system. This +FAQ can not help you with this, since &kde; runs on many &UNIX; platforms. + + + +Finally, you are ready to commence the &kde; installation. +Please start reading from the next section. To get &kde;, please +refer to . Last but not least, if +you encounter any problems while installing &kde;, please do not +hesitate to make use of the &kde; mailing lists and newsgroups. But do bear this in mind: no +question is too silly to ask, but some are too silly to answer, +especially when they are already answered in this FAQ. +Good luck and have fun! + + + + + + +What kind of hardware do I need to run &kde; ? + + +To run &kde; it is recommended that you have at least a pentium II processor, 64MB of memory and 500MB of free disk space for a basic installation. While &kde; may run on slower configurations than this, performance can be severely impaired. Generally, if your computer runs an &X-Server; already with other desktop environments or window managers it's probably fast enough to run &kde;. + + + + + +Available package formats + + + + +You can find several kinds of binary and source packages for +different distributions and operating systems on the &kde-ftp;. The +binary packages are not made by the &kde; Team, but by the +distributors themselves, or some dedicated individuals. Please refer to +&kde; Package Policy +Explained for information about the &kde; Package Policy. The +only official release is the source tar.bz2 +packages. Please refer to the READMEs and +INSTALLs in the several binaries folders. For +a list of the available packages for a release, refer to the relevant +info page. For the latest release this is the &kde; 3.4.1 Info +Page. + + + + + + +Prerequisites + + + + + +For &kde; 3.4.1, you need the &Qt; library version 3.3 or greater. +Please make sure you download the correct &Qt;. You will +also need the header files, if you want to compile &kde; +yourself. They are all available, at no cost, from http://www.trolltech.com/download. +In addition, there are optional libraries that might improve &kde; if +installed on your system. An example is OpenSSL which will enable +&konqueror; to browse web pages securely and is needed in a version +>=0.9.6. These should be provided by your distributor; if not, ask +for an update. + + + + + + +Description of the base packages + + +The base distribution currently consists of twenty +packages. Some are required, while others are optional. Each package +is available in each of the aforementioned package formats. + + +kdelibs + +Required +This package contains shared libraries that are needed by all +&kde; applications. + + + +kdebase + +Required +This package contains the base applications that form the core +of the K Desktop Environment like the window manager, the terminal +emulator, the control center, the file manager, and the panel. + + + +&arts; + +Required +The &arts; sound server. A powerful, network transparent sound +server. + + + +kdeaddons + +Optional +Various plugins for &kate;, &kicker;, &knewsticker;, &konqueror; and &noatun; + + + +kdeartwork + +Optional +Additional wallpapers, themes, styles, sounds ... + + + +kdebindings + +Optional +Various bindings for other languages, including &Java;, Perl, Python, ... + + + +kdegames + +Optional +Various games like &kmahjongg;, &ksnake;, &kasteroids;, and +&kpatience;. + + + +kdegraphics + +Optional +Various graphics-related programs like &PostScript; previewer, +&DVI; previewer, and a drawing program. + + + +kdeutils + +Optional +Various desktop tools like a calculator, an editor and other +nifty stuff. + + + +kdemultimedia + +Optional +Multimedia applications like a &CD; player and a mixer. + + + +kdenetwork + +Optional +Network applications. Currently contains the instant messaging client &kopete;, the +download manager &kget;, and several other network-related programs. + + + +kdepim + +Optional +Personal information management tools. Contains the email client &kmail;, the newsreader &knode; and other related programs. + + + +kdeadmin + +Optional +System administration programs. + + + +kdeedu + +Optional + +Educational and entertaining applications for &kde;'s younger users. + + + + +kdeaccessibility + +Optional + +KDE accessibility programs such as a screen magnifier and speech synthesizer front end. + + + + +kdetoys + +Optional +Toys! + + + +kdevelop + +Optional +A complete Integrated Development Environment for &kde; and Qt + + + +kdewebdev + +Optional +Web development applications. Contains such applications as &quanta;, an integrated web development environment and other applications useful in web development + + + +kdesdk + +Optional +KDE Software Development Kit. Contains a collection of applications and tools used by KDE Developers. + + + + +&arts; and then kdelibs should be installed before everything +else, and kdeaddons last. The other packages can be installed in any +arbitrary order. + +Most package management tools will let you put all these +packages in one folder and install them all at once, figuring out +the dependencies as they go. + + + + + + +Installation instructions for the different package +formats + + + +Please do not forget to read the README and INSTALL files if they are available. + + + +Installation of the Debian packages + +The Debian packages install in accordance with the upcoming FHS (File +Hierarchy Standard). + +become superuser +run dpkg for +every package you want to install. + + + + +Installation of the RPM packages + + +To install binary <acronym>RPM</acronym>s +become superuser +execute rpm + + + + +Installation of the source .tar.bz2 files + +Since there are always changes and updates to the way &kde; is compiled, please +refer to Download and Install from Source for the most up to date installation instructions for the source packages. + +The general approach should work in most cases though. + +The source .tar.bz2 package installs into /usr/local/kde by default. You can +override this setting by using the option of +the configure script. + +unpack the packages with tar +change folder to the package folder: cd +packagename +configure the package: ./configure +Some packages (notably kdebase) have special configuration +options that might be applicable to your installation. Type +./configure to see the +available options. +build the package: make +install the package: su (if you aren't already root). If you +already are, just type make +. + + + + + + + + + +Post-installation procedures + + +First of all, please make sure that you have added &kde;'s binary +installation folder (⪚ /usr/local/kde/bin) to your PATH +and &kde;'s +library installation folder to your LD_LIBRARY_PATH (only +necessary on systems that do not support rpath; on &Linux; &ELF;, it +should work without). This environment variable may be called +differently on some systems, ⪚ it is called +SHLIB_PATH on &IRIX;. Then set the environment variable +KDEDIR to the base of your &kde; tree, ⪚ /usr/local/kde. + +Please bear in mind that it is unwise to set +LD_LIBRARY_PATH blindly. In the vast majority of cases it is +unnecessary and can do more harm than good. There is a web page +written by Dave +Barr explaining the evils of LD_LIBRARY_PATH and it can be +found at http://www.cis.ohio-state.edu/~barr/ldpath.html. + + +Even though you can use most of the &kde; applications simply by +calling them, you can only benefit fully from &kde;'s advanced +features if you use the &kde; window manager and its helper +programs. +In order to make it easy for you, we have provided a simple +script called startkde which gets installed in $KDEDIR/bin and is therefore in your +path. +Edit the file .xinitrc in your home folder (make a backup +copy first!), remove everything that looks like calling a window +manager, and insert startkde instead. Restart the &X-Server;. If you use +&kdm;/xdm, you will have to edit the file .xsession instead of +.xinitrc. And if there is no .xinitrc or .xsession in your home +folder, simply create a new one with just one line containing +startkde. + +Some systems (notably &RedHat; &Linux;) use .Xclients +instead. + +This should present you with a new shining &kde; desktop. You +can now start to explore the wonderful world of &kde;. In case you +want to read some documentation first, there is a highly recommended +Quick Start +guide available. Furthermore, every application has an online +help that is available via the help menu. + + + + + + +Should I remove old version xyz before installing a new +one? + + +In principle, this is not necessary. RPM and Debian packages +should take care of all dependencies. +If you compile the source code yourself, you should take more care. +Instructions for running two different versions of &kde; on the same system are +given at http://developer.kde.org/build/kde2-and-kde3.html. +However, please note that running two different versions of &kde; from source +can lead to problems if you are not careful. + + + + + +How do I start &kde;? + + +The most comfortable method to start &kde; is to use the +startkde script. Simply put the line +startkde at the end of your .xsession +file (or your .xinitrc or .Xclients +file if you are not using &kdm; or xdm). Please +also remove the lines that start your previous window manager. If there is no +.xsession, .xinitrc, or +.Xclients in your home folder, simply create a new one +that contains just one line: startkde. + + + + + +Is it possible to install &kde; in my home directory? + + +Yes, you can install &kde; in any folder you want. What you +have to do depends on the kind of packages you want to install: +Source packages +Configure and install the package using configure +; +make; make install to install into /home/me. Replace /home/me with your home directory, generally defined in $HOME +Add the following to your init files. Please note that if +it is not necessary for you to set LD_LIBRARY_PATH, it +is better to leave it out. + +For csh or tcsh: + +setenv KDEDIR /home/me + +if ( $?LD_LIBRARY_PATH ) then + setenv LD_LIBRARY_PATH $KDEDIR/lib:$LD_LIBRARY_PATH +else + setenv LD_LIBRARY_PATH $KDEDIR/lib +endif + +if ( ! $?LIBRARY_PATH ) then + setenv LIBRARY_PATH $LD_LIBRARY_PATH +endif + +For bash: + +KDEDIR=/home/me +PATH=$KDEDIR/bin:$PATH +LD_LIBRARY_PATH=$KDEDIR/lib:$LD_LIBRARY_PATH +LIBRARY_PATH=$LD_LIBRARY_PATH +export KDEDIR PATH LD_LIBRARY_PATH LIBRARY_PATH + + +<acronym>RPM</acronym> packages +rpm allows you to use the + option to select the folder you want to +install to. For example, executing rpm will install the package +to /home/me. + + +Although &kde; will run from a user folder, there are some +problems with programs that require suid root, ⪚ the programs in +the kdeadmin package. But since they are not meant to be run by users +in the first place, this is nothing to worry about. +However, on systems using shadow passwords, the screensavers +have to be suid root to enable password access for unlocking the +screen, so this option will not work. + + + + + + +startkde fails with can not connect to X +server. What is wrong? + + +You probably tried to start the X server with startkde. The X +server is started with startx. +startkde is the +script that should be run from your .xinitrc, .xsession, or +.Xclients to activate the window manager and the necessary server +daemons for &kde;. See also . + + + + + +&kde; on &AIX;? + + + + +IBM now officially support &kde; on &AIX;. You can find +details at http://www.ibm.com/servers/aix/products/aixos/linux/index.html. +There is also some older information at http://space.twc.de/~stefan/kde/aix.html. + + + + + +&kde; on a laptop? + + +If you can get &X-Window; to run on your laptop, you should not have any problem +getting &kde; to run on it. In addition, you might find the following +links helpful: + + +http://www.linux-laptop.net/ + + +http://www.sanpei.org/Laptop-X/note-list.html + + + + + + + +I do not like the default &kde; folder after installation. How +do I move it without breaking anything? + + +Assuming the default is /opt/kde and you want to move it to +/usr/local/kde, here's what +you have to do: + +change to superuser if you aren't already +mv /opt/kde /usr/local/kde +ln -s /usr/local/kde +/opt/kde + +This will put all your &kde; files in /usr/local/kde but everything is +still accessible from /opt/kde. + + + + + +What files can I delete from my &kde; install folder? Can all the +*.h, *.c and *.o +files be safely removed? + + +There should not be any need to keep the .c and +.o files, but you might want to keep the +.h files, as they are used by includes if you ever want to +compile your own &kde; programs. But if you wish to add patches to the source +programs as they become available (rather than downloading everything again), +then they should stay. + + + + + +Will I lose my current settings when I upgrade &kde;? + + + +No. In most cases &kde; will be able to transport your settings +intact. You may need to reenter passwords in some applications (such +as &kmail; or &knode;) but most other settings will be safe. + +There were mixed reports of results between some previous +versions of &kde;. To be safe, you may like to back up your entire +&kde; configuration. + +Settings are kept in the $HOME/.kde or $HOME/.kde2 subfolder in your home +folder. Copy your +old .kde/.kde2 folder to a backup location, +install &kde; 3.2, and then copy back any necessary mail and news +settings. That said, most people can make a direct upgrade, without +removing the old .kde folder, + without a hitch. +You can override the use of $HOME/.kde by setting the +$KDEHOME variable. + + + + + +I upgraded &kde; and it seemed to go fine, but when I start it, +I get a blank gray screen, and nothing happens. There are errors in +the console about DCOPserver. What's going on? + + + + +&kde; uses several temporary files during its operation. +These are usually to be found in the following locations: + +~/.DCOPserver-* (there are usually two of these; one is a symlink to the other) +~/.kde/socket-hostname +~/.kde/tmp-hostname which is normally a symlink to the next file: +/tmp/tmp-kde-USER +~/.kde/socket-hostname which is also normally a symlink to: +/tmp/ksocket-USER + + +If the symlinks get broken, usually because a +cron or shutdown script is emptying out the +/tmp folder, then strange +things will happen. These files, and the symlinks, will all be +created automatically at the start of &kde; so you can safely remove +them while &kde; is not running. + +If you are only getting a gray screen when you start &kde;, or if you get an error message telling you to Check your installation, then shut down X and delete all the files listed above, then try to restart X. + +Normally (&ie; when not upgrading between &kde; versions) it's +quite safe to leave these files intact, and you may shave a few +seconds off your &kde; startup time by doing so. + + + + + +Compiling kdebase gives me a bin/sh: msgfmt: command +not found error! + + +You need the &GNU; msgfmt which is +part of the &GNU; i18n package gettext. +You should be able to download it from any +&GNU; mirror. + + + + + +How do I uninstall &kde; applications compiled from +source? + + +You can uninstall your programs by typing make +uninstall in the folder where you did make +install. If you have already deleted that folder, +then there is only one way, and it is not good: go to $KDEDIR/bin and start deleting files +one by one. +If you expect to find yourself in this situation, you might want to +consider a program such as &GNU; stow, found at +http://www.gnu.org/software/stow/stow.html. + + + + + +What is up with &GIF; support? + + +This has to do with issues with Unisys' &LZW; patent. &GIF; +support is turned off from &Qt; 1.44 onwards by default. When you want to use +&GIF;s and have the relevant license, recompile &Qt; with &GIF; support. +./configure . + + + + diff --git a/doc/faq/intro.docbook b/doc/faq/intro.docbook new file mode 100644 index 000000000..6f9546791 --- /dev/null +++ b/doc/faq/intro.docbook @@ -0,0 +1,93 @@ + + + +Introduction + + + + +What is &kde;? + + +&kde; is the K Desktop Environment. It is a project initiated +by Matthias Ettrich in +1996. The aim of the &kde; project is to connect the +power of the &UNIX; operating systems with the comfort of a modern user +interface. +In short, &kde; will bring &UNIX; to the desktop! +If you want further information about &kde;, have a look at +What is +&kde;? + + + + + +On which platforms can I expect &kde; to work? + + +&kde; is a Desktop Environment for all flavors of &UNIX;. While +it is true that most &kde; developers use &Linux;, &kde; runs smoothly +on a wide range of systems. You may, however, need to tweak the +source code a bit to get &kde; to compile on a not-so-popular variant +of &UNIX;, or if you are not using the &GNU; development tools, in +particular the &gcc; compiler. + + + + + +Is &kde; a window manager? + + +No, &kde; is not a window manager. While &kde; includes a very +sophisticated window manager (&kwin;), &kde; is much more than that. +It is a full-blown Integrated Desktop Environment. +&kde; provides a complete desktop environment, including a web +browser, a file manager, a window manager, a help system, a +configuration system, uncountable tools and utilities, and an ever +increasing number of applications, including but not limited to mail +and news clients, drawing programs, a &PostScript; and a &DVI; viewer +and so forth. + + + + + +Is &kde; a CDE, &Windows; or &Mac; +OS clone? + + +No, &kde; is not a clone. Specifically &kde; is not a +CDE or &Windows; clone. While the &kde; developers +have and will continue to glean the best features from all existing +desktop environments, &kde; is a truly unique environment that has and +will continue to go its own way. + + + + + +Is &kde; free software? + + +Yes, &kde; is free software according to the &GNU; General +Public License. All &kde; libraries are available under the +LGPL making commercial software development for the +&kde; desktop possible, but all &kde; applications are licensed under +the GPL. +&kde; uses the &Qt; C++ crossplatform +toolkit, which is also released (since version 2.2) under the +GPL. +It is absolutely legal to make &kde; and &Qt; available on +&CD-ROM; free of charge. No runtime fees of any kind are +incurred. + + + + + diff --git a/doc/faq/kdeapps.docbook b/doc/faq/kdeapps.docbook new file mode 100644 index 000000000..95ff1355b --- /dev/null +++ b/doc/faq/kdeapps.docbook @@ -0,0 +1,158 @@ + + + +&kde; applications + + + + +&kppp; + + + +Many &kde; users report problems using &kppp;. But before you +complain about &kppp;, make sure you have already checked the +following: + + +Can you dialup to your ISP without using &kppp;? If you cannot, then perhaps &kppp; is not the culprit after +all. +Have you gone through the &kppp; documentation at +least three times and followed its instructions and trouble-shooting +suggestions? + +The &kppp; documentation can be accessed through the +&kde; Help Center. + Last, but not least, the &kppp; homepage is at http://ktown.kde.org/~kppp/. +Now, if you still encounter problems, here's what might help you +solve them: + +How do I change the &MTU; setting in &kppp;? +Open up the &kppp; dialog box and select +Setup. Choose an existing account and click +Edit, or New to create a +new dialup account. Select the Dial tab and +click Arguments. Type what you want to change +in the Argument textbox (⪚ mtu 296) and +click Add. When you are satisfied, click +Close. +To check whether the options took, do one of the following: + + +In a terminal window, run +/sbin/ifconfig ppp0 and look +at the reported &MTU; in the output. It should match your +request. + +Add and +(each on a separate line) to your +/etc/ppp/options file and restart your +&PPP; session. You will find debugging messages in +/var/log/messages, including &MRU; and &MTU; +settings. + +If you want, the &MRU; and &MTU; settings can be added to the +options file, one complete setting per line, no +quotes or dashes. + + +&kppp; connects at a slower speed than +normal. +The following might do the trick: + +Try executing setserial +spd_hi. +The default &MTU; value is 1500, +which maybe too large +for a dialup connection. Try changing it to a smaller value like +296 +or 576. +Check in your $HOME/.kde/share/config for the +kppprc. Ensure the correct modem speed is +actually defined there. + + + + + + + + +&konsole; + + + + + +How do I page-up or page-down? +Use +ShiftPage Up +and ShiftPg +Dn. + + + + +How do I perform a simple copy from &konsole; to +anything else? +When I do a ls, first I select with +the mouse the desired text, press +&Ctrl;C, +then I make the target application active, point the mouse to the +relevant part and press &Ctrl;V. +Alternatively, highlight the text by dragging with the &LMB; down and +paste by clicking with the &MMB; (or both buttons if you are using a +2 button mouse with 3 button emulation). + + + + +Why can't &konsole; find the 9x15 and the 2 +console bitmap fonts installed with &kde;? + + +FontConfig must find the three fonts +installed in: $KDEDIR/share/fonts. + If +the &kde; install does not install these fonts in a directory that +already exists (⪚ /usr/share/fonts) then you must add this +directory to the configuration file /etc/fonts/local.conf. This should be +the first line after <fontconfig>. For example: + +<fontconfig> +<dir>/usr/kde3/share/fonts</dir> +</fontconfig> + +After adding the directory, run (as root): +fc-cache -v and check that +it found the directory. + + + + + + + + + +&kmail; + + +&kmail; has its own home page at http://kmail.kde.org where an +FAQ is available. + + + + + diff --git a/doc/faq/misc.docbook b/doc/faq/misc.docbook new file mode 100644 index 000000000..61d2950f3 --- /dev/null +++ b/doc/faq/misc.docbook @@ -0,0 +1,219 @@ + + + +Miscellaneous questions + + + + + + +Does &kde; support transparency and other visual effects provided by the new composite extension to X.org? + + + Yes! An exciting new feature for &kde; 3.4 is support for the new X composite extension. This allows for effects such as translucency and drop shadows for all windows, easily configurable through &kwin;'s configuration dialog. This requires you to be using X.org version 6.8.0 or newer and have: + + +Section "Extensions" +Option "Composite" "Enable" +EndSection + + +In your xorg.conf. If you have an nvidia graphics card and use the nvidia driver you can improve the performance of these effects by also adding the RenderAccel option to the Device section for your graphics card: + + +Section "Device" + Identifier "nvidia-fx5200" + Driver "nvidia" + Option "RenderAccel" "true" + +Once you have configured X.org correctly, transparency and other effects can be enabled through the DesktopWindow Behavior &kcontrolcenter; module, under the Translucency tab. + + + + + + +What about &kde; programs that do not have icons? How do I get +them into the menu? + + +Use &kmenuedit;. To access it use the &RMB; on the +K button and select Menu Editor. + + + + + +Does &kde; have a graphical &FTP; client? + + +Yes, and it is none other than your favorite file +manager, &konqueror;. You can drag and drop remote files into local +folders. + + + + + +How do I exit &kde;? + + +Simply click on the K button and select +Logout. In addition, if you +right click on an +empty area of the desktop, you will be presented with a menu +containing logout as one of the options. +Depending on your configuration of the &X-Window;, &Ctrl;&Alt;&Backspace; +might also do the trick by killing the X server, but its use prevents +session management and cannot be recommended. + + + + + +Is there a program that checks for new mails at my +ISP if and only if I am online? + + +&korn; will do the job. If you are not +connected, it will just sit there (idling). + + + + + +Is it really necessary to upgrade to the latest version? + + +We recommend to always use the latest stable release. If you +don't, it will probably be difficult to get answers to your +questions. If you have a problem with an old version, the answer will +probably be Please upgrade and try again. Note that +new versions also sometimes fix security problems. + + + + + +How do I copy and paste in &kde;? + + +The simplest method is to use your mouse: + +Highlight the text you want to copy by holding down the +&LMB; and dragging across the text. This adds the selected text to the clipboard. +Go to the destination area; depending on your configuration, +you might need to click it using the &LMB; to give it +focus. +Click the &MMB; to paste. If you have a two +button mouse and are emulating a three button mouse, push both buttons +simultaneously. + + +For more information about using the clipboard in &kde; please see the &klipper; hand book, accessed by typing help:/klipper +into the &konqueror; address bar. + + + + + + +How do I convert the default &RedHat; menus into a menu in the +K menu? + + +Click on the K button and select +SystemAppfinder. + + + + + +What is CVS? + + +It stands for Concurrent Versions System. It is a version +control system and is based on RCS (Revision +Control System), but +offers more functionality. It is used to maintain source code under +development. It will keep multiple versions of things (handy if you +broke something and have to back up and get a clean old version), and +allows people remote access over the Net to pick up the latest source +code and even to check in new files if they have permission. It is +also open source (you pay for support if you want it), and since it is +free it is the system of choice for people writing more free products, +such as &kde;. + + + + + +Does &kde; support dual screen (Xinerama)? + + +Yes, you need to have a multi-headed X server +(⪚ MetroX or XFree86 4.0 and above) and a &kde; >= 2.2.1 + + + + + + +Why does Drag and Drop not work with Xinerama? + + +You should upgrade to XFree86 4.2.0 for this to work properly. + + + + + + +How do I check which version of &kde; I am using? + + +Fire up your &kde; Control +Center. It comes up with an Info Screen including the version of &kde; +The &kde; version is also included in the application's +About dialog. + + + + + + + + +How do I go about creating themes and icons? + + +Go see http://artist.kde.org. +There is also a more informal community of &kde; related artists and +artwork at http://kde-look.org. + + + + + + + +How can I get to know about development updates? + + +You might want to subscribe to the various &kde; mailing lists +available, especially kde-cvs, which lists all commits done to the +&kde; CVS repository. Check http://lists.kde.org if you want to +read without subscribing. + + + + + diff --git a/doc/faq/moreinfo.docbook b/doc/faq/moreinfo.docbook new file mode 100644 index 000000000..9b28db3a2 --- /dev/null +++ b/doc/faq/moreinfo.docbook @@ -0,0 +1,154 @@ + + + +Getting more information + + + + +Where is the &kde; homepage? + + +The &kde; homepage is located at http://www.kde.org. If you prefer a +local mirror, there are several to choose from. For a current list of +web site mirrors sorted by location, please visit http://www.kde.org/mirrors/web.php. + + + + + +Is there a &kde; mailing list? + + +There are several &kde; mailing lists. Each focuses on a different +aspect of &kde;. Some are for developers, so they are not +discussed in detail. Some of the more important lists that users +might be interested in are: + +kde +This is the main &kde; mailing list for general +discussions. + +kde-announce +This list is used to announce new versions of &kde; as +well as new tools and applications. + +kde-look +This is the list that deals with questions about look and +feel, and general user interface considerations. + + +For the complete list of mailing lists available, please refer +to http://www.kde.org/mailinglists/. +Please note that it is not a good idea to ask questions which are +already answered in this &FAQ;. + + + + + +How do I subscribe/unsubscribe to these lists? + + +To subscribe, send an email to list-request, that is: + +kde-request@kde.org +kde-announce-request@kde.org +kde-look-request@kde.org + +The email must contain subscribe +your_email_address in the +subject. +To unsubscribe, send an email to list-request, that is: + +kde-request@kde.org +kde-announce-request@kde.org +kde-look-request@kde.org + +The email must contain unsubscribe +your_email_address in the +subject. +Never send subscribe/unsubscribe request to the +mailing lists directly! Use the list-request +instead. +There is also a complete list of all &kde;-related mailing +lists, and a web interface for subscribing and unsubscribing located +at http://master.kde.org/mailman/listinfo. + + + + + +Is there a mailing list archive? + + + +Yes, there is a searchable mailing list archive hosted by Progressive Computer +Concepts. The &URL; is http://lists.kde.org. There you +will see a folder listing of the mailing lists. Note that you can +only do a subject/author search at this level. You probably will not +find what you want doing this kind of search. + +To do a body search, you have to enter one of the mailing lists. +Just click on the folder you want to search (⪚ kde +or kde-devel) and then the pull-down menu by the search +box will default to Body searches. To be thorough, you +should probably search the kde, kde-linux, and kde-devel folders. + + + + + + +Is there a newsgroup about &kde;? + + +Yes, there is! It is at comp.windows.x.kde. +In addition, there is also a German newsgroup at +de.alt.comp.kde. Please note that it is not a good +idea to ask questions which are already answered in this +&FAQ;. + + + + + +Are there any other &kde;-related +&FAQ;s? + + +Yes. Here is a list of them: + +&kde; &FAQ; +&konqueror; +&FAQ; +aRts +sound server documentation + + + + + + + + + + + diff --git a/doc/faq/nonkdeapps.docbook b/doc/faq/nonkdeapps.docbook new file mode 100644 index 000000000..e0e732548 --- /dev/null +++ b/doc/faq/nonkdeapps.docbook @@ -0,0 +1,106 @@ + + + +&kde; with non-&kde; applications + + + + + + + +My non-&kde; applications like &Emacs; and +kterm are running amok with strange +colors! + + +Start the &kde; Control Center and in +Appearance & Themes +Colors uncheck the Apply colors to +non-KDE applications checkbox and click +Apply. + + + + +How can I set my default web browser to be something other +than &konqueror;? + +If you are using &kde; 3.3 or later, open up the &kcontrolcenter; and +navigate to the KDE +ComponentsComponent +Chooser panel. Select Web +Browser from the list on the left, then select Open +http and https URLs in the following browser: and type in the +name of the browser (⪚ mozilla, +firefox, opera, &etc;) +in the textbox. + + + + + +How can I configure the style and fonts of GTK +applications within &kde; ? + + + + +The simplest way to achieve this is to download and compile the +gtk-qt theme engine from +http://www.freedesktop.org/Software/gtk-qt. This theme engine makes +your GTK applications look like your &kde; widget style +by calling functions from &Qt; instead of drawing the styles itself. Once +the theme engine has been installed, there will be a &kcontrolcenter; module +under Appearance & ThemesGTK +Styles and Fonts. + + + + + + +I have been hearing about this gecko kpart or &Qt; Mozilla, how do I +get these? + + + +Good luck! The &Qt; Mozilla code is in Mozilla cvs, and not very stable as +of yet. In order to use it, you'll have to check out Mozilla from cvs +according to these instructions: + +http://www.mozilla.org/cvs.html. Then, configure either the Mozilla +suite or the Firefox browser with the option +--enable-default-toolkit=qt in addition to any other +options you would like to enable. More instructions on building Mozilla can +be found here. + + + + + + + + \ No newline at end of file diff --git a/doc/faq/notrelated.docbook b/doc/faq/notrelated.docbook new file mode 100644 index 000000000..fd66e1a6c --- /dev/null +++ b/doc/faq/notrelated.docbook @@ -0,0 +1,232 @@ + + + +Not really &kde;-related, but frequently asked nevertheless. + + + + +How do I change the screen resolution? + + +Use &Ctrl;&Alt;+ and &Ctrl;&Alt;- to cycle through +the resolutions you have defined in XF86Config (maybe under +/etc/X11; poke around first). +If you prefer to get your hands dirty, you can always edit the file +directly. By placing your favorite resolution at the beginning (or +making it the only one listed), &X-Window; will always start up with that +resolution. +Always make a backup copy of your XF86Config file +before you start editing it. Errors in this file +can render &X-Window; unusable. +These instructions are only valid if you are running +version 3.3.x of the XFree86 server. If you are running XFree86 4.x, +you must consult with the XFree86(TM): +Home Page. + + + + + +How do I change the color depth? + + +There is no way you can do this on the fly. You can either +start &X-Window; using startx where +number can be 8, 16, 24 or 32, depending on +the depth you want. Alternatively, if you are using +xdm/&kdm;, you +need to edit +/etc/X11/xdm/Xservers (may vary) and enter +:0 local /usr/X11R6/bin/X -bpp 16 for 16 bit color +depth. +You can also edit the XF86Config file and add a line +like DefaultColorDepth +number to Section "Screen". +The next time you start X, it will run with the newly-configured color +depth. + + + + + +What can I do if I am using a 2-button mouse? + + +Go buy a 3-button one, or use third button emulation. The third +button is emulated by pressing both the &LMB; and the &RMB; +together. You would need to enable +in your XF86Config file. + + + + + +What is a "sticky" window? + + +In a virtual desktop environment with multiple virtual desktops, a +"sticky" window will stay put on the screen when you switch between +desktops, as if sticking to the glass of the screen. +Xclock is a typical candidate for sticking, +as you need to run only one instance of it, and it always stays with +you. + + + + + +How do I replace the "X" mouse pointer with an arrow? + + +The various types of cursor available in X are defined in +X11/cursorfont.h. You can +change it using xsetroot -cursor_name +name_of_cursor. For example, I +have the following in my .Xclients: + +xsetroot -cursor_name left_ptr + +This will create the common left-angled pointer. To see other +alternatives, type xfd -fn cursor. And of course, +do not forget that man xsetroot is your +friend. + + + + + +How do I extract/install diff files? + + +To generate a context-diff suitable for patching, use +diff -u old-file new-file > +patchfile. To apply the diff to +a file (i.e. "patch the file"), execute +patch < patchfile. + + + + + +How do I get &Linux; to mount the floppy device for use with both +DOS and ext2 formatted floppies? + + +Just specify the filesystem type as auto in +/etc/fstab. Auto detection works fine for DOS and +ext2. + + + + + +How do I start &kde; with the Num Lock on? + + +Have you tried man setleds? In addition, you +might want to edit your +$HOME/.Xmodmap and put the +following lines in: + +! redefines numeric keypad to be used without NumLock +keycode 79 = 7 +keycode 80 = 8 +keycode 81 = 9 + +keycode 83 = 4 +keycode 84 = 5 +keycode 85 = 6 + +keycode 87 = 1 +keycode 88 = 2 +keycode 89 = 3 + +keycode 90 = 0 +keycode 91 = comma +keycode 86 = plus + +! deactivates NumLock key +keycode 77 = + +Other possible alternatives: + +xkeycaps: +right clicking should allow edits. You may +have to do this as root. +man XF86Config and look under +section Keyboard. +Install NumLockX, which is +available from http://dforce.sh.cvut.cz/~seli/en/numlockx. + + + + + + +How do I take window or desktop screenshots? + + +Use &ksnapshot;. + + + + + +Is there a tool to make webpages? + + +Yes, and there are a lot of them out there, including +StarOffice, &Netscape; Composer, and +XEmacs. +There are also many &kde; applications. To find the most current +list, go to kde-apps.org: The +Latest in &kde; Applications and search for web +development. Try as many as possible and choose the one +most suitable to your needs. + + + + + +What do all those acronyms like AFAIK mean? + + + +AAMOF: as a matter of fact +AFAIK: as far as I know +AISE: as I see it +BFN: bye for now +BION: believe it or not +BRB: be right back +BTW: by the way +CMIIW: correct me if I am wrong +FUD: fear, uncertainty, and doubt +FWIW: for what it's worth +FYI: for your information +HTH: hope this helps +IIRC: if I recall correctly +IMHO: in my humble opinion +LOL: laughing out loud +MYOB: mind your own business +PITA: pain in the ass +ROTFL: rolling on the floor laughing +RTFM: read the fine manual +SOP: standard operating procedure +TIA: thanks in advance +YMMV: your mileage may vary + + + + + diff --git a/doc/faq/panel.docbook b/doc/faq/panel.docbook new file mode 100644 index 000000000..5814dc613 --- /dev/null +++ b/doc/faq/panel.docbook @@ -0,0 +1,193 @@ + + + + +The panel + + + + + +How do I add applications to the &kde; panel (&kicker;)? + + +There are several ways to add an application to the panel, of +which the easiest is to right-click on the panel, and from the context +menu which appears, select Panel +MenuAdd to +PanelApplication +Button and then the application for which +you want to add a link. For more ways of adding buttons +to the panel, refer to the &kicker; Handbook. + + + + + + + +Is it possible to change the K button of +the panel to another picture? + + +The simplest way is to download a new icon theme with a &kmenu; icon +you prefer from +http://www.kde-look.org and +install it using the &kcontrolcenter;. +In order to change only the &kmenu; icon you can overwrite the +kmenu.png image for every size in an icon theme set. +So, for &kde; default icons this would be $KDEDIR/share/icons/default.kde/size/apps/kmenu.png, +where size is one of the sizes included in the +&kde; icon theme. + + + + + + + +After an upgrade my &kmenu; appears to be empty! How can I get my menu back? + + + + +In &kde; 3.2 and later local modifications to the &kmenu; are stored +in +$HOME/.config/menus/applications-kmenuedit.menu +. Try moving this file out of the way and then issuing the +command kbuildsycoca +. This should restore you to the +default system menus. + + + + + +My desktop panel has disappeared. How can I get it +back? + + + + +The panel disappearing is usually due to it crashing. This is +most often caused by loading an applet that has a fatal bug or due to +a bad installation of &kde; and/or the panel. + +The easiest way to get the panel back is to launch the +Run Command window by pressing &Alt;F2 and entering +kicker and then pressing the +OK button. + +If the panel continues to disappear, you may wish to either +remove or edit by hand your +$KDEHOME/share/config/kickerrc +file, where $KDEHOME is usually +~/.kde. If you choose to edit +it by hand, start by removing the applet entry groups. + + + + + +Where did the Icon Zooming option that used to be in &kicker; go? + + +Icon zooming was not actively maintained and had caused severe bugs and usability issues. It was replaced in &kde; 3.4 by the new mouse over effects, which combine esthetics with useful information. + + + + + +How can I start an application minimized to the system +tray? + + +Use ksystraycmd. For example, to start a &konsole; hidden +in the system tray, run ksystraycmd + konsole. For +more information about ksystraycmd, see the section +Advanced Window Management in the &kde; +User Guide. + + + + +How do I use the &Windows; key to open the &kmenu;? + + +Previous versions of &kde; provided a trick to allow you to +use the &Windows; key both as a modifier (so you could have shortcuts +like WinR +), and as a regular key (so that pressing +Win on its own could open the &kmenu;). This feature +was removed for reasons of usability and accessibility, as well as +keeping the code clean. For current versions of &kde;, you have two +options: either use a different shortcut to open the &kmenu; (the +default is &Alt;F1 +), or remap the Win key to be a regular +key, rather than a modifier. + +If you choose to do the second, here's one way: + + +Find the keycode for your Win key +using xev: Run the command +xev in a &konsole;, and +press the Win key. Look in the output of +xev for +keycode n, +where n is the keycode of the +Win key. + + +Use xmodmap to remap the +Win key. An appropriate command is xmodmap + 'keycode +n=Menu'. + + +In the &kcontrolcenter;, go to +Regional & +AccessibilityKeyboard Shortcuts + and set the shortcut for Popup Launch +Menu to the Win key. You should now be +able to popup the &kmenu; by pressing the Win key. + + +One more step is required to save the changes across +settings: Create a file ~/.kde/env/win-key.sh +(create the directory if it doesn't exist), and add the +xmodmap command you used previously to it. The +change should now be applied every time you start &kde;. + + + + + + + + + + diff --git a/doc/faq/qt.docbook b/doc/faq/qt.docbook new file mode 100644 index 000000000..446089edc --- /dev/null +++ b/doc/faq/qt.docbook @@ -0,0 +1,76 @@ + +&Qt; and Licensing questions + + + + + +What is &Qt;, by the way? + + +&Qt; is a C++-based class library to build user interfaces. It +also includes many utility classes like string classes and classes +to handle input and output. It +provides most of the widgets you will see in a &kde; application: +menus, buttons, sliders, &etc;. &Qt; is a cross-platform library that +allows you to write code that will compile on &UNIX; systems as well as +&Windows; and embedded devices. You can learn more about &Qt; at http://www.trolltech.com. + + + + + +Why does &kde; use &Qt;? + + +&Qt; is a very sophisticated toolkit that provides everything that +is needed to build a modern user interface. &Qt; is written in C++, thus +allowing object-oriented development which ensures efficiency and +code reuse in a project the size and scope of &kde;. In our opinion +there is no better toolkit available for &UNIX; systems and that it +would have been a grave mistake to try to build &kde; on anything but +the best. + + + + + +Why does &kde; not use gtk, xforms, xlib, whatever? + + +There are a number of toolkits available. To provide a +consistent user interface and to keep used resources such as memory to +a minimum, &kde; can use only one of them. &Qt; was selected for the +reasons mentioned above. + + + + + +But &Qt; isn't free, is it? + + +It is! As of September 4, 2000, version 2.2 of the &Qt; +libraries were licensed under the GPL, thereby +fulfiling all aspects of free software. + + + + + +Can I write commercial software for &kde;? + + +You can use the &kde; libraries to write commercial and +closed source as well as commercial and open +source software. If you write open source software you can +use the &Qt; free edition. But if you write closed source software +you may not use the &Qt; free edition; you need to obtain the &Qt; +professional edition from Troll Tech. If you want more +information, please contact Troll Tech directly. + + + + \ No newline at end of file diff --git a/doc/faq/questions.docbook b/doc/faq/questions.docbook new file mode 100644 index 000000000..1f7db6b63 --- /dev/null +++ b/doc/faq/questions.docbook @@ -0,0 +1,160 @@ + + + +Asking Questions + +Chances are, you have been linked to this document from IRC or a +mailing list. You've asked a question, and someone has told you that you +need how to ask more effectively. In order to get an appropriate, clear +answer you need to ask an appropriate, clear question in a manner that's +going to provide an incentive for people to take their time to help you. If +you appear to be rude, lazy or use bad or unclear language then chances are +your question will be ignored + + + + +What do I do before I ask? + +Read the documentation and &FAQ; for the application. There is +a wealth of &kde; documentation availible both in the help center and +online. A lot of time and effort has gone into this documentation, and +quite often the answer to your question is here. The general &kde; userguide +can be found by typing +help:/userguide into your +&konqueror; addressbar. + +Search the web: Usually googling for a specific error message or +searching mailing list archives can come up with a solution for you. + +Try it and see! Look through all the application options, read the +What's this? and tooltips for the ones you're not sure about. If you're +really unsure about an option save your data and then try it. As long as you +use some common sense, you are very unlikely to break anything by clicking +buttons. + +Above all, don't be lazy. If you show the people who you are asking +that you are able to troubleshoot and research in a logical manner, you're +showing them you're a reasonable person who is worth their time to +help. It's your problem and not theirs so the legwork is yours to do. Save +your helpers as much time as you can, they're busy people. + + + +Where do I ask? + +Usually the best place to ask a question is on the +IRC channels and mailing lists devoted to user +questions. Don't post simple questions about using &kde; to the devel +channels and mailing lists, these are for technical discussions. Some good +places are #kde on irc.freenode.net, and the &kde; mailing +lists. + + +How do I ask? + +Try to word your questions in a manner that gives the most +information possible and is polite and courteous. Don't ask to ask, just +ask! + +Q: &kde; sucks, it's being slow + +Is not a question that is likely to get you a useful answer. It does +not give any useful information about troubleshooting the problem, and it +starts out attacking the software in a way that isn't productive. + +Q: Since upgrading &kde; on Slackware &Linux; from version 3.2.3 to +3.3.2 using sources, I have noticed it's being really slow — sometimes +applications take up to 20 seconts to launch. I am using the same user +configuration as I had with the previous version, and I have tried as a new +user. I can't find anything about this on the mailing lists or by a google +search. Could anyone point me to some information that could help? + +This question is polite, contains information to help people +troubleshoot the problem and shows your helpers what avenues you have +already tried. + +Don't assume automatically that the problem is the fault of +&kde;. Proceed as though this is your error, otherwise you will quickly +annoy people if it does indeed turn out to be your problem and not +&kde;. + +Use clear language with correct spelling. Watch out for any +ambiguities and make sure you think about what you say before you write +it. If you are asked for clarification, give it as best you can. &kde; is a +project where many of the users and developers are not native english +speakers and if you don't use correct english, misunderstandings may +ensue. Use the language appropriate to the channel or mailing list you are +in — if you don't, people who might have been able to help you may +ignore your message because it is not in a language they understand. + +Include all information that could be relevant, even if you're not +sure. Have you upgraded other software or hardware on your system, +particularly system libraries or a new kernel? These things could affect how +&kde; performs. Even if you cannot see a link, someone else might. + +Don't paraphrase error messages. Paste in the exact error, and if it's +more than a line or two don't paste them directly into an +IRC channel. Use a paste service like http://www.rafb.net/paste. If you +must type them in by hand, be sure you are 100% accurate. When you provide +faulty information, your helpers cannot help you as easily. + +Follow up on your solution! Tell us if it worked, or if you have +solved it yourself in the meantime. This helps us know for sure if our +solution worked, and helps other users who may be searching mailing list +archives for a solution to the problem themselves. + + + +What do I do when told to look elsewhere? + +When you're told google knows or google +is your friend then chances are, you have not followed the above +advice. You've not done your research, and the solution is probably one the +helper knows very well to be easy to find. When you're linked to a +FAQ or a usermanual don't ever say, No, I don't +want to have to read this I want you to just tell me. This is very +bad manners. If you cannot put in the effort to read the document, what is +the incentive for your helper to put in the time and effort to help you? If +you're told to go use google, take it graciously and do so. + + +Above all, use common courtesy. &kde; users and developers are usually +volunteering their time out of an already very busy schedule, and like to +know that you are appreciating that they are helping you for free. Be +polite, say please and thank you and try to be pleasant and +friendly. + + Does this seem like a lot of trouble to ask a question? If you want +to be able to feel that people owe you an answer or support, then you're +quite welcome to pay for commercial support from companies that support +&kde; on &UNIX; platforms. If you don't want to pay money, then pay the +people who do this for free with your politeness and appreciation :) + + +If you think the answer to your question should be included in the +&kde; &FAQ; please feel free to submit any patches or suggestions to the +&kde; &FAQ; Maintainer, at faq@kde.org + + + + + + diff --git a/doc/faq/sound.docbook b/doc/faq/sound.docbook new file mode 100644 index 000000000..d7db604bc --- /dev/null +++ b/doc/faq/sound.docbook @@ -0,0 +1,55 @@ + +Troubleshooting sound problems + +&kde; uses the &arts; sound system which is complex and powerful, +making it difficult for some users to troubleshoot when things go +wrong. Here are some tips to help you diagnose what it's doing when your +sound misbehaves : + + + + +How can I troubleshoot sound related problems in &kde;? + + + To check that sound is working independently of &arts;, make +sure that artsd isn't running and then try playing sound +through XMMS or another multimedia application +that isn't a part of &kde;. If that application doesn't play sound, then +your general sound setup is probably broken and it's not a &kde; +problem. + +Try playing sound with +artsplay. Try various +formats, ogg, mp3 and wav. Any error messages there might be useful in +pointing you in the right direction. + +Try setting the &arts; output method to OSS. In the +&kcontrolcenter; go to Sound & Multimedia +Sound System. On the +Hardware tab, under Select the audio +device choose Open Sound System. If you are +running alsa this will use the OSS +emulation, which may give better or worse results. + +Running artsd from a terminal will give you a lot of debug output, +some of which might help you to diagnose the problem. Trying this in +conjunction with using artsplay in a second terminal can give a wealth of information. If an artsd instance is already running, exit it with artsshell +terminate + + + + +I've upgraded to the latest version of &kde; keeping my old configuration, and my system sounds don't work anymore! + +Assuming you've installed &arts; correctly and you still have the codecs installed your previous &kde; installation needed, chances are this is a small problem with your knotifyrc. To confirm this, try creating an entirely new user and seeing if system notifications work under the new account. If they do, try moving your $KDEHOME/share/config/knotifyrc out of the way for your original user to see if this solves the problem. + + + + + + + + diff --git a/doc/faq/tips.docbook b/doc/faq/tips.docbook new file mode 100644 index 000000000..d47709095 --- /dev/null +++ b/doc/faq/tips.docbook @@ -0,0 +1,137 @@ + + + +Useful tips + + + + +Reading documentation in &kde; + + +Pop up the Run Command window (&Alt;F2 by +default) and type: + + +man:command for man pages. It +even unpacks on the fly if the man pages are gzipped. + + + +info:command for info +pages. + + + +help:kdeappname for &kde; +application help pages. + + + + + +You can also enter any of these in the Location text +box in &konqueror;. +Or you can use the &kde; Help Center if you are using &kde; +2. Simply start the &kde; Help Center by clicking on the icon (the blue +book with the yellow key) on the toolbar. Once the &kde; Help Center has +loaded, the window on the left will contain an entry called +Unix manual pages. Click once on this entry, and +you can browse through all the installed manual pages on your +system. + + + + + +Move or resize windows quickly + + +To move a window, use &Alt;left mouse +button. &Alt;right mouse +button will resize the window. Last but not least, &Alt;middle mouse button +raises/lowers the window. The &kde; Control Center +allows you to change these mouse bindings. + + + + + +Killing windows in &kde; + + +There is a standard keybinding (&Ctrl;&Alt;&Esc;) +that gives you a skull & crossbones cursor. Click that cursor on a +window to kill it. The keybindings are viewable/changeable from the +&kde; Control Center. + +Using this option kills the program forcibly. Data may be lost, +and some processes related to the program may remain active. Use only as a +last resort. + + + + + + +What if something is so wrong that I can't even get the skull +& crossbones cursor? How do I get out of a total lockup? + + +These kind of locks tend to occur when an application locks up +while it has a so called mouse/keyboard grab. When that +happens you can try to select a virtual text console with &Ctrl;&Alt;F1 and login. With the +following command you will get a list of all running processes: + + ps | more + +By killing the process that has the mousegrab, your desktop will +come to life again. Unfortunately you can't see which process that is, +so you will have to find out through trial and error. To kill a process +use: + + kill pid + +Here pid is the process id of the +process, which is the first number on each line reported by +ps . + +You can switch back to the desktop with &Ctrl;&Alt;F7 (or +F8 through F9 depending on your +operating system) to see if things work again. When you press +&Alt;Tab you should get a +response from the window manager. If not, you need to get back to the +text console and try to kill another process. + +Good candidates to kill are: the application you were working +with, &kicker;, &klipper; and &kdesktop;. + + + + + + + diff --git a/doc/faq/webbrowse.docbook b/doc/faq/webbrowse.docbook new file mode 100644 index 000000000..b80c7ae1a --- /dev/null +++ b/doc/faq/webbrowse.docbook @@ -0,0 +1,222 @@ + + + +Webbrowsing with &konqueror; +&konqueror; is &kde;'s open source, standards compliant webbrowser. +It's home page is +http://www.konqueror.org where a +&konqueror; specific FAQ can be found. + + + + +Where does the name &konqueror; come from? +It's a word play on the other browsers' names. After the Navigator and the Explorer comes the Conqueror; it's spelled with a K to show that it's part of &kde;. The name change also moves away from kfm (the &kde; file manager, &konqueror;'s predecessor) which represented only file management. + + + +Can I run &konqueror; without running &kde;? +Yes. Just install &Qt;, kdelibs and kdebase, and from your favorite window manager just launch &konqueror;. It should work just fine, but if it doesn't (&kde; developers don't test that case often), report it to http://bugs.kde.org and try running "kdeinit" before running &konqueror;, it usually helps. +This is of course the same for any other &kde; application. + + + + +Why doesn't &konqueror; show the contents of an image's ALT attribute in a tooltip? + +There is no standard that states the ALT attribute should appear as a tooltip. The specification calls for ALT to be displayed in place of the image, as in text-mode only browsers such at lynx or w3m. Abusing the ALT attribute is bad for accessibility. Tooltips are supposed to come from the TITLE attribute and this is implemented in &konqueror; + + + + + +How do I use &konqueror; as a web browser with a proxy? + + +&konqueror; can be used with &HTTP; and &FTP; proxies. To set +up the proxy server in &konqueror;, just select +SettingsConfigure +&konqueror;... from the &konqueror; menu and +go to the Proxy tab. + + + + + +How do I import bookmarks from another browser into &konqueror; ? + + +To import bookmarks from another browser into &konqueror; select +BookmarksEdit Bookmarks +and then in the Bookmark Editor select +FileImport. Then select +the browser you would like to import bookmarks from. In the Open dialog, +navigate to the location of the folder or file your bookmarks are +contained in and click Open + + + + + +How can I make &konqueror; only show certain bookmarks in the bookmarks toolbar? +In &konqueror; go to SettingsConfigure &konqueror;.... Then select Web Behaviour from the icon list. Under the Bookmarks heading, place a check in the box next to Show only marked bookmarks in bookmark toolbar. Now in the Bookmark Editor an option to Show in Toolbar appears on clicking with the &RMB; on any bookmark entry or in the Edit menu when the entry is highlighted. Folders can also be shown in the bookmarks toolbar in much the same way. + + + + +How do I fool a site into believing &konqueror; is &Netscape; or +some other browser? + + +In &konqueror;, select +SettingsConfigure +Konqueror... and in the configuration +dialog, select Browser Identification. Default +and site-specific browser identifications can be set from here. + + + + +&konqueror; is taking a really long time to load webpages, what +could cause this? + +Quite often &konqueror; loading webpages slowly is caused by +DNS servers with broken IPV6 +support. Adding the following to /etc/profile or any +other script that is sourced on login should solve this problem: + +export KDE_NO_IPV6=true + +for bourne compatible shells, and for C-style shells: + +setenv KDE_NO_IPV6 true + + + + + + + +How do I configure &konqueror; to run &Java; applets? + + +Choose +SettingsConfigure +&konqueror;... from &konqueror;'s menubar +and then select Java & Javascript. Set the +Path to Java executable correctly. If it doesn't +work, please check the Konqueror + Java +HOWTO. + + + + + + +How do I block unrequested popup windows in &konqueror;? + + +&konqueror; has a new 'smart' policy for JavaScript popups. From the +&konqueror; main window, select Settings +Configure &konqueror;... and then +Java & JavaScript. On the +JavaScript tab, under Global JavaScript +Policies set the radio button beside Open new +windows: to Smart. + + + + + + +Why doesn't my banking site work with &konqueror;? It pops up a new +window with the login screen in other browsers, but not in +&konqueror;. + + + +Make sure you have Javascript enabled, and the default JavaScript web popups +policy set to Ask or Allow. The +Smart policy is not always sufficient for some banks. +Many banks also require &Java; support. You can find more help on enabling +this at http://www.konqueror.org/. + + + + + + +Can &konqueror; use user-specified stylesheets, like those in the +Firefox adblock extention? + + +Yes, you can set &konqueror; to use any kind of valid +css stylesheet to filter webcontent or improve accessibility. +From the &konqueror; main window simply click +Settings +Configure &konqueror;... and select +Stylesheets. Set the radio button to +Use user-defined stylesheet and browse to where the +stylesheet you want to use is located. Alternatively, you can select +Use accessibility stylesheet defined in "Customize" +tab and then set your own options. + +An example of css rules that implement ad blocking can be +found at: + +http://www.mozilla.org/support/firefox/adblock. + + + + + +Why does &konqueror; display a plain grey square when I try to view flash animations, even though the flash plugin is installed? + + +Under the latest versions of X.org, having the composite extension loaded can cause problems with the flash plugin. Try disabling the composite extension and see if normal flash operation is restored. + + + + + +Why can't &konqueror; render &GIF; images? + + +It is because you did not enable &GIF; support in &Qt;. Please see + for more details. + + + + +When I try to open a web page with &konqueror;, I get the +message: There appears to be a configuration error. You have +associated Konqueror with text/html, but it cannot handle this file +type. + + +You need to make sure that the embedding settings for the text/html +MIME type are correct: + +In &konqueror;, go to +SettingsConfigure +&konqueror;... and then to the File +Associations page. Open +text->html in the tree view. Click on the +Embedding tab. Make sure that Left Click +Action is set to Show file in embedded +viewer, and that KHTML (khtml) is at the top +of Services Preference Order. + + + + + + + + + diff --git a/doc/faq/winmng.docbook b/doc/faq/winmng.docbook new file mode 100644 index 000000000..f32384754 --- /dev/null +++ b/doc/faq/winmng.docbook @@ -0,0 +1,134 @@ + + + + + +The window manager + +The default window manager provided by &kde; is the K Window +Manager (&kwin;). Please read The +K Window Manager Handbook (which should be accessible from the +&kde; Help Center) for usage information. + + + + +Are there keyboard shortcuts for &kwin; operations? + + +Yes. Please refer to "The K Window Manager Handbook" for the +list of shortcuts available. + + + + + +Can I define my own set of keyboard shortcuts? + + +Yes. Launch the +&kde; Control Center and select +Regional & AccessibilityKeyboard Shortcuts to +configure window manager bindings like maximizing windows, &etc;. + + + + + + +When I "iconify" a window, it disappears. Where does it +go? + + +With many &X-Window; &GUI;s, the minimize button (a little dot) will +erase the window that the program is running in and create, instead, +an icon on the desktop. &kde; does not do this. Instead, when a +window is iconified it is simply hidden (but the program is still +running). +There are a few ways to access disappeared windows: + + +If you are running the taskbar part of &kicker;, +you can choose to have a list of tasks displayed on your desktop. +Iconified tasks will have their names displayed in gray. + + +If you click the &MMB; on the root window (&ie;, +the background of the desktop), &kwin; will give you a list +of all available tasks. + + + + + + + +How do I maximize windows only vertically or horizontally? + + +Provided your window is not already maximized, clicking on the +maximize button with the &LMB;/&MMB;/&RMB; will +maximize fully/vertically/horizontally respectively. + + + + + +What is shading a window? + + +By shading a window we mean rolling up the window leaving just +the title bar visible. You can do this by double clicking on the +window title bar. + + + + + + + +How can I start an application with special window options, like +maximized/minimized/to stay on top? + + +Use the kstart command. As an example, to +open &kcalc; with the Stay on Top option, use: +% kstart + +For maximized windows, use the +option, for minimized windows, use . You can +see a full list of kstart options with +kstart +. + +If you're using kstart to start +applications at &kde; startup, you should use the + option. See the &kde; User Guide, section +Advanced Window Management for more information about +this feature. + + + + + + + + + diff --git a/doc/glossary/Makefile.am b/doc/glossary/Makefile.am new file mode 100644 index 000000000..e79a46842 --- /dev/null +++ b/doc/glossary/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = khelpcenter/glossary diff --git a/doc/glossary/checkxrefs b/doc/glossary/checkxrefs new file mode 100755 index 000000000..6da64c184 --- /dev/null +++ b/doc/glossary/checkxrefs @@ -0,0 +1,10 @@ +#!/bin/sh +DEFINED_ENTRIES=`sed -ne "s^.*.*^\1^p" *.docbook` +REFERENCED_ENTRIES=`sed -ne "s^.*.*^\1^p" *.docbook | unique` + +# Check for entries which are referenced but not defined. +for ENTRY in $REFERENCED_ENTRIES; do + if ! echo $DEFINED_ENTRIES | grep $ENTRY - > /dev/null 2>&1; then + echo "'$ENTRY' referenced but not defined!" + fi +done diff --git a/doc/glossary/index.docbook b/doc/glossary/index.docbook new file mode 100644 index 000000000..4aba44c53 --- /dev/null +++ b/doc/glossary/index.docbook @@ -0,0 +1,296 @@ + + + + + + +]> + + + + +&glossary-kdeprinting; + + + Technologies + + IO Slave + IO Slaves enable &kde; applications to + access remote resources as easily as local resources (making them + network transparent). Remote resources (⪚ files) might + be stored on SMB shares or similar. + SMB + &kde; + + + + KIO + The &kde; Input/Output system which makes use of so-called + IO Slaves. + IO +Slave + &kde; + + + + KParts + KParts is an embedding technology which allows &kde; + applications to embed other &kde; applications. For example, the text + view used by &konqueror; is a KPart. + &konqueror; + + + + KSycoca + KSycoca (&kde; System + Configuration Cache) is a + configuration cache which, for example, guarantees fast access to the menu + entries. + KBuildSycoca + + + + + + XFree86 + + Antialiasing + If mentioned in context with &kde;, antialiasing often means + the smoothing of the fonts visible on the screen. &Qt; version 2.3.0 + or higher used together with XFree86 4.x makes this possible under &kde; + as well. + &kde; + &Qt; + + + + &X-Server; + The &X-Server; represents a basic layer upon which the + various &GUI;s like &kde; are built. It manages the + basic mouse and keyboard input (from the local host as well as from + remote hosts) and provides elementary graphic routines to draw + rectangles and other primitives. + &kde; + &GUI; + + + + + + Applications + + KBuildSycoca + KBuildSycoca is a command line +program and regenerates the + so-called KSycoca. This is useful, for example, if some +or all modules in + &kcontrol; are missing. + KSycoca + &kcontrol; + + + + &kcontrol; + This is the project and filename of the &kde; control + center. &kcontrol; allows you to customize virtually + every configuration option of &kde;. + &kde; + + + + &kicker; + &kicker; is the nickname as well as project name of the + &kde; panel. + &kde; + Panel + + + + &konqueror; + &konqueror; is a filemanager, web browser, picture viewer + and more, and a core part of the &kde; project. You can + find more information about &konqueror; at www.konqueror.org. + &kde; + + + + &ksirc; + &ksirc; is the default IRC client, + which is shipped with &kde;. You can use &ksirc; to chat with anyone on + an IRC network. + IRC + + + + + + Desktop Terminology + + Drag and Drop + This concept tries to replace many actions like copying + files from one place to another by a certain mouse movement, ⪚ + clicking on an icon in a &konqueror; window, moving the mouse to another + window while keeping the mouse button pressed, and releasing the mouse + button (dropping the object) copies files. + &konqueror; + + + + &GUI; + Abbreviation for Graphical + User Interface. Every desktop + environment (like &kde;) is a &GUI;. Most + &GUI;s feature mouse support and/or windows to manage + the programs. + &kde; + + + + &kde; + Abbreviation for K Desktop Environment, a + leading &GUI; for &UNIX;-based systems. You can find more + detailled information at www.kde.org. + &GUI; + + + + GNOME + + GNU Network Object + Model Environment, one of the + leading &UNIX; &GUI;s. + &GUI; + + + + Panel + Refers to the panel (also known as + &kicker;) which often resides at the bottom of the + screen. + &kde; + &kicker; + + + + ripping + The process of reading audio data from a &cdrom; and + storing it on the hard disk. + + + + + + &kde; Development + + &Qt; + The &GUI; of &kde; is built on top of + the &Qt; toolkit, which provides many graphical elements (so-called + Widgets) which are used to construct the desktop. You + can find more information about &Qt; at www.trolltech.com. + &kde; + &GUI; + Widget + + + + i18n + Abbreviation for internationalization. &kde; + supports many different languages, and several i18n techniques make it + easy to translate the &GUI; as well as the accompanying + documents of &kde; into all these languages. More information about the + i18n process is available at i18n.kde.org. + &kde; + &GUI; + + + + l10n + Abbreviation for localization, the process + of adapting a program to the local environment. This includes ⪚ the + currency used for monetary values or the time format. + i18n + + + + Widget + Graphical elements like scrollbars, buttons or input + fields which are used by &kde; to construct the &GUI;. + + &kde; + &GUI; + + + + CVS + + Concurrent Version +System. + The CVS is a very elegant way of managing file +versions that allow more than one developer + to easily work on the same project. You can find a description of how to +get the latest (developer) version of the + &kde; sources via anonymous CVS on + http://www.kde.org/anoncvs.html. + More about CVS is available at www.cvshome.org. + + + + + + + + Miscellaneous + + RFC + Request For + Comment. A common way to publish new protocol + ideas or procedures for evaluation of the Internet community. Though + RFCs are not mandatory, many applications try to + adhere to them, once they have been approved by the community. More + information about RFCs can be found at the + RFC Homepage. + + + + + + Various protocols + + SMB + Server Message + Block. A network protocol used in &Microsoft; &Windows; + networks to access the filesystems of other computers. + IO +Slave + + + + IRC + Internet Relay + Chat. A protocol defined in RFC + 1459, which handles the specification to enable real time text chat. + RFC + + + + host + This can either be a name from your + /etc/hosts file + (mycomputer), + an Internet name (www.kde.org) or an IP-Address + (192.168.0.10). + + + + + diff --git a/doc/glossary/kdeprintingglossary.docbook b/doc/glossary/kdeprintingglossary.docbook new file mode 100644 index 000000000..7a9311c73 --- /dev/null +++ b/doc/glossary/kdeprintingglossary.docbook @@ -0,0 +1,1387 @@ + + + + Printing + + + + ACLs + Abbreviation for Access + Control Lists; + ACLs are used to check for the access by a given + (authenticated) user. A first rough support for ACLs + for printing is available from &CUPS;; this will be refined + in future versions. + Authentication + + + + + AppSocket Protocol + AppSocket is a protocol for the transfer of + print data, also frequently called "Direct TCP/IP Printing". + &Hewlett-Packard; have taken AppSocket, added a few minor + extensions around it and been very successful in renaming + and marketing it under the brand "&HP; JetDirect"... + &HP; JetDirect Protocol + Direct TCP/IP Printing + + + + + APSfilter + APSfilter is used mainly in the context of "classical" + &UNIX; printing (BSD-style LPD). It is a sophisticated shell script, + disguised as an "all-in-one" filtering program. In reality, + APSfilter calls "real filters" to do the jobs needed. It sends + printjobs automatically through these other filters, based on an + initial file-type analysis of the printfile. + It is written and maintained by Andreas Klemm. + + It is + similar to Magicfilter and mostly uses Ghostscript for file conversions. + Some Linux Distributions (like &SuSE;) use APSfilter, others + Magicfilter (like &RedHat;), some have both for preference selection + (like *BSD). + + &CUPS; has no need for APSfilter, + as it runs its own file type recognition (based on &MIME; types) + and applies its own filtering logic. + Ghostscript + Magicfilter + &MIME;-Types + printcap + + + + + Authentication + Proving the identity of a certain person (maybe via username/password + or by means of a certificate) is often called authentication. Once you are + authenticated, you may or may not get access to a requested ressource, + possibly based on ACLs. + ACLs + + + + + Bi-directional communication + In the context of printing, a server or a host may receive additional + information sent back from the printer (status messages &etc;), either + upon a query or unrequested. AppSocket ( = &HP; JetDirect), &CUPS; and IPP + support bi-directional communication, LPR/LPD and BSD-style printing + do not... + AppSocket Protocol + &CUPS; + Direct TCP/IP Printing + &HP; JetDirect + IPP + LPR/LPD + + + + + BSD-style Printing + Generic term for different variants of the traditional &UNIX; + printing method. Its first version appeared in the early 70s on + BSD &UNIX; and was formally described in RFC 1179 only as late + as 1990. + + At the time when BSD "remote" printing was first designed, printers + were serially or otherwise directly connected devices to a host + (with the Internet hardly consisting of more than 100 nodes!); printers + used hole-punched, continuous paper, fed through by a tractor + mechanism, with simple rows of ASCII text mechanically hammered on to + the medium, drawn from a cardboard box beneath the table. It came out + like a zig-zag folded paper "snake". Remote printing consisted of a + neighboring host in the next room sending a file + asking for printout. + + How technology has changed! Printers generally use cut-sheet media, they have + built-in intelligence to compute the raster images of pages after pages + that are sent to them using one of the powerful page description + languages (PDL). Many are network nodes in their own right, + with CPU, RAM, a hard disk and their own Operation System, and + are hooked to a net with potentially millions of users... + + It is a vast proof of the flexible &UNIX; concept for doing things, + that it made "Line Printing" reliably work even under these modern + conditions. But time has finally come now to go for something new + -- the IPP. + + It is strong proof of the flexibility of &UNIX;; that "Line Printing" works + reliably, even under these modern conditions. But time has finally come now + to go for something new -- the IPP. + + + IPP + &CUPS; + LPR/LPD printing + + + + + &CUPS; + Abbreviation for Common + UNIX Printing + System; &CUPS; is the most modern &UNIX; and Linux + printing system, also providing cross-platform print services + to &Microsoft; &Windows; and Apple &MacOS; clients. Based on IPP, it does + away with all the pitfalls of old-style BSD printing, + providing authentication, encryption and ACLs, plus many more + features. At the same time it is backward-compatible enough + to serve all legacy clients that are not yet up to IPP, via + LPR/LPD (BSD-style). + + &CUPS; is able to control any &PostScript; printer by + utilizing the vendor-supplied PPD (PostScript Printer + Description file), targeted originally for &Microsoft; Windows NT + printing only. &kde; Printing is most powerful if based on + &CUPS;. + ACLs + Authentication + BSD-style printing + IPP + KDEPrint + LPR/LPD + PPD + + + + + + &CUPS;-FAQ + Currently only available in German (translation is on the way), + the &CUPS;-FAQ + is a valuable resource to answer many questions that anyone new to + &CUPS; printing might have at first. + + KDEPrint Handbook + + + + + + &CUPS;-O-Matic + &CUPS;-O-Matic was the first "Third Party" plugin for + the &CUPS; printing software. It is available on the Linuxprinting.org + website to provide an online PPD-generating service. + + + Together with the companion cupsomatic Perl-Script, + that needs to be installed as an additional &CUPS; backend, + it redirects output from the native pstops filter into + a chain of suitable Ghostscript filters. Upon completion, it + passes the resulting data back to a &CUPS; "backend" for sending + to the printer. + + In this way, &CUPS;-O-Matic enables support for any printer known to + have worked previously in a "classical" Ghostscript environment. + If no native &CUPS; support for that printer is in sight... &CUPS;-O-Matic + is now replaced by the more capable PPD-O-Matic. + cupsomatic + PPD-O-Matic + Foomatic + + + + + + cupsomatic + The Perl script cupsomatic (plus a working Perl installation + on your system) is needed to make any &CUPS;-O-Matic (or PPD-O-Matic) + generated PPD work with &CUPS;. It was written by Grant Taylor, author of + the Linux Printing HOWTO and Maintainer of the printer + database at the Linuxprinting.org website. + &CUPS;-O-Matic + Foomatic + cupsomatic + + + + + Daemon + Abbreviation for Disk + and execution + monitor; Daemons are present + on all &UNIX; systems to perform tasks independent of user + intervention. Readers more familiar with &Microsoft; &Windows; might + want to compare daemons and the tasks they are responsible + with "services". + + One example of a daemon present on most + legacy &UNIX; systems is the LPD (Line Printer Daemon); &CUPS; is + widely seen as the successor to LPD in the &UNIX; world and + it also operates through a daemon. + SPOOLing + + + + + Database, Linuxprinting.org + Already years ago, when Linux printing was still really difficult + (only command line printing was known to most Linux users, no device + specific print options were available for doing the jobs), Grant Taylor, + author of the "Linux Printing HOWTO", collected most of the available + information about printers, drivers and filters in his database. + + With the emerging + &CUPS; concept, extending the use of PPDs even to non-PostScript printers, + he realized the potential of this database: if one puts the different + datablobs (with content that could be described along the lines + "Which device prints with which Ghostscript or other + filter?", "How well?", and "What command line switches are available?") into + PPD-compatible files, he could have all the power of &CUPS; on top of + the traditional printer "drivers". + + This has now developed into a broader + concept, known as "Foomatic". Foomatic extends the capabilities + of spoolers other than &CUPS; (LPR/LPD, LPRng, PDQ, PPR) to a certain + degree ("stealing" some concepts from &CUPS;). The Linuxprinting + Database is not a Linux-only stop -- people running other &UNIX; + based OSes (like *BSD or &MacOS; X) will also find valuable information + and software there. + + Foomatic + Linuxprinting database + + + + + Direct TCP/IP Printing + This is a method that often uses TCP/IP port 9100 to connect + to the printer. It works with many modern network printers and has + a few advantages over LPR/LPD, as it is faster and provides some + "backchannel feedback data" from the printer to the host sending + the job. + AppSocket Protocol + &HP; JetDirect Protocol + + + + + + Drivers, Printer Drivers + The term "printer drivers", used in the same sense + as on the &Microsoft; &Windows; platform, is not entirely applicable + to a Linux or &UNIX; platform. A "driver" functionality + is supplied on &UNIX; by different modular components working + together. At the core of the printer drivers are "filters". Filters convert + print files from a given input format to another format that is acceptable + to the target printer. In many cases filters may be connected to a whole + filter "chain", where only the result of the last conversion is sent to the + printer. The actual transfer of the print data to the device is performed by + a "backend". + + Filter + PPDs + + + + + Easy Software Products + Mike Sweet's company, which has contributed a few substantial + software products towards the Free Software community; amongst + them the initial version of Gimp-Print, the EPM software packaging tool + and HTMLDOC + (used by the "Linux Documentation Project" to build the PDF versions + of the HOWTOs) -- but most importantly: &CUPS; (the 'Common &UNIX; Printing + System'). + + ESP finance themselves by selling a commercial version + of &CUPS;, called ESP PrintPro, + that includes some professional enhancements. + + &CUPS; + ESP PrintPro + ESP + Gimp-Print + + + + + Encryption + Encryption of confidential data is an all-important issue if + you transfer it over the Internet or even within intranets. + + Printing + via traditional protocols is not encrypted at all -- it is very easy + to tap and eavesdrop ⪚ into &PostScript; or PCL data transfered + over the wire. + + Therefore, in the design of IPP, provision was made for the easy + plugin of encryption mechanisms (which can be provided by the same + means as the encryption standards for HTTP traffic: SSL and TLS). + Authentication + &CUPS; + IPP + SSL + TLS + + + + + + Epson + Epson inkjets are among the best supported models by Free software + drivers, as the company was not necessarily as secretive about their + devices and handed technical specification documents to developers. + The excellent print quality achieved by Gimp-Print on the Stylus + series of printers can be attributed to this openness. + + They have also + contracted Easy Software Products to maintain an enhanced version + of Ghostscript ("ESP GhostScript") for improved support of their + printer portfolio. + + ESP Ghostscript + + + + + + Escape Sequences + The first ever printers printed ASCII data only. To + initiate a new line, or eject a page, they included special + command sequences, often carrying a leading [ESC]-character. + &HP; evolved this concept through its series of PCL language + editions until today, having now developed a full-blown + Page Description Language (PDL) from these humble beginnings. + + PCL + PDL + + + + + ESC/P + Abbreviation for Epson + Standard Codes for + Printers. Besides &PostScript; and PCL, Epson's ESC/P + printer language is one of the best known. + PCL + &PostScript; + hpgl + + + + + ESP + Abbreviation for Easy + Software Products; + the company that developed &CUPS; (the "Common &UNIX; Printing System"). + + Easy Software Products + &CUPS; + ESP PrintPro + + + + + + ESP Ghostscript + A Ghostscript version that is maintained by Easy Software + Products. It includes pre-compiled Gimp-Print drivers for + many inkjets (plus some other goodies). ESP Ghostscript + will produce photographic quality prints in many cases, especially + with the Epson Stylus model series. ESP Ghostscript is GPL-software. + + Easy Software Products + &CUPS; + ESP PrintPro + + + + + ESP PrintPro + This professional enhancement to &CUPS; (the "Common &UNIX; + Printing System") is sold by the developers + of &CUPS; complete with more than 2,300 printer drivers for several commercial + &UNIX; platforms. ESP PrintPro + is supposed to work "out of the box" with little or no configuration + for users or admins. ESP also sell support contracts for + &CUPS; and PrintPro. These sales help to feed the programmers who + develop the Free version of &CUPS;. + + &CUPS; + + + + + Filter + Filters, in general, are programs that take some input + data, work on it and pass it on as their output data. Filters + may or may not change the data. + + Filters in the context of printing, are programs that convert + a given file (destined for printing, but not suitable in the + format it is presently) into a printable format. Sometimes + whole "filter chains" have to be constructed to achieve the + goal, piping the output of one filter as the input to the next. + + Ghostscript + RIP + + + + + Foomatic + Foomatic started out as the wrapper name for a set of + different tools available from Linuxprinting.org + These tools aimed to make the usage of traditional + Ghostscript and other print filters easier for users and + extend the filters' capabilities by adding more command line + switches or explain the driver's execution data. + + Foomatic's different incarnations are &CUPS;-O-Matic, PPD-O-Matic, + PDQ-O-Matic, LPD-O-Matic, PPR-O-Matic, MF-O-Matic and + Direct-O-Matic. All of these allow the generation + of appropriate printer configuration files online, by simply + selection the suitable model and suggested (or alternate) driver + for that machine. + + More recently, Foomatic gravitated towards becoming a "meta-spooling" + system, that allows configuration of the underlying print subsystem + through a unified set of commands (however, this is much more + complicated than KDEPrint's &GUI; interface, which performs a similar + task with regards to different print subsystems). + &CUPS;-O-Matic + PPD-O-Matic + cupsomatic + + + + + Ghostscript + Ghostscript is a &PostScript; Raster Image Processor (RIP) in software, originally + developed by L. Peter Deutsch. There is always a GPL version + of Ghostscript available for free usage and distribution + (mostly 1 year old) while + the current version is commercially sold under another license. + + Ghostscript is widely used inside the Linux and &UNIX; world + for transforming &PostScript; into raster data suitable + for sending to non-&PostScript; devices. + &PostScript; + RIP + + + + + Gimp-Print + Contrary to its name, Gimp-Print is no longer + just the plugin to be used for printing from the popular + Gimp program -- its codebase can also serve to be compiled + into... + + *...a set of PPDs and associated filters that integrate seamlessly + into &CUPS;, supporting around 130 different printer models, providing + photographic output quality in many cases; + + + *...a Ghostscript filter that can be used with any other + program that needs a software-RIP; + + + *...a library that can be used by other software applications + in need of rasterization functions. + + + + + Lexmark Drivers + RIP + Ghostscript + + + + + &HP; + Abbreviation for Hewlett-Packard; + one of the first companies to distribute their own Linux printer + drivers. -- More recently, the Company has released their + "HPIJS" package of drivers, including source code and a Free license. + This is the first printer manufacturer to do so. HPIJS supports most + current models of HP Ink- and DeskJets. + + + + + + + &HP;/GL + Abbreviation for &HP; + Graphical Language; + a &HP; printer language mainly used for plotters; many CAD + (Computer Aided Design) software programs output &HP;/GL files for + printing. + ESC/P + PCL + &PostScript; + + + + + &HP; JetDirect Protocol + A term branded by &HP; to describe their implementation + of print data transfer to the printer via an otherwise "AppSocket" or + "Direct TCP/IP Printing" named protocol. + AppSocket Protocol + Direct TCP/IP Printing + + + + + IETF + Abbreviation for Internet + Engineering Task + Force; an assembly of Internet, software + and hardware experts that discuss + new networking technologies and very often arrive at + conclusions that are regarded by many as standards. "TCP/IP" + is the most famous example. + + + IETF standards, as well as + drafts, discussions, ideas and useful tutorials, are + put in writing in the famous series of "RFCs", which + are available to the public and included in most Linux and + BSD distributions. + IPP + PWG + RFC + + + + + IPP + Abbreviation for Internet + Printing Protocol; + defined in a series of RFCs accepted by the IETF with + status "proposed standard"; was designed + by the PWG. -- IPP is a completely new design for network printing, + but it utilizes a very well-known and proven method for the + actual data transfer: HTTP 1.1! By not "re-inventing the wheel", + and basing itself on an existing and robust Internet standard, + IPP is able to relatively easily bolt other HTTP-compatible standard + mechanisms into its framework: + + * Basic, Digest or Certificate authentication + mechanisms; + + * SSL or TLS for encryption of transferred + data; + + * LDAP for directory services (to publish + data on printers, device-options, drivers, costs or + also to the network; or to check for passwords while + performing authentication). + + + + + + &CUPS; + PWG + IETF + RFC + TLS + + + + + KDEPrint + The new printing functionality of &kde; since version 2.2 + consists of several modules that translate the features and settings + of different available print subsystems (&CUPS;, BSD-style LPR/LPD, RLPR...) + into nice &kde; desktop &GUI; windows and dialogs to ease their + usage. + + Most important for day-to-day usage is "kprinter", the new + &GUI; print command. -- Note: KDEPrint does not implement its own + spooling mechanism or its own &PostScript; processing; for this it + relies on the selected print subsystem + -- however it does add some functionality of its own on top of this + foundation... + + BSD-style printing + &CUPS; + kprinter + KDEPrint Handbook + + + + + + KDEPrint Handbook... + ...is the name of the reference document that describes KDEPrint + functions to users and administrators. You can load it into Konqueror by + typing "help:/kdeprint" into the address field. The KDEPrint website + is the resource for updates to this documentation, as well as PDF + versions suitable for printing it. It is authored and maintained by Kurt + Pfeifle. + + &CUPS;-FAQ + + + + + kprinter + kprinter is the new powerful + print utility that is natively used by all &kde; applications. + + Contrary to some common misconceptions, + kprinter is not a &CUPS;-only tool, + but supports different print subsystems. You can even switch + to a different print subsystem "on the fly", in between two jobs, + without re-configuration. Of course, due to the powerful + features of &CUPS;, kprinter is + best suited for use with a &CUPS; frontend. + + kprinter is the successor + to "qtcups", which is no longer being actively maintained. It has + inherited all the best features of qtcups and added several new ones. + + + MOST IMPORTANT: you can use kprinter + with all its features in all non-&kde; applications that allow + a customized print command, like gv, Acrobat Reader, Netscape, + Mozilla, Galeon, StarOffice, OpenOffice and all GNOME programs. + + kprinter can act as a "standalone" + utility, started from an X-Terminal or a "Mini-CLI" to + print many different files, from different folders, with different + formats, in one job and simultaneously, without the need to first open the + files in the applications! (File formats supported this way are &PostScript;, + PDF, International and ASCII Text, as well as many different popular graphic + formats, such as PNG, TIFF, JPEG, PNM, Sun RASTER, &etc;) + + QtCUPS + + + + + Lexmark + was one of the first companies to distribute their own Linux printer + drivers for some of their models. However, those drivers are binary only + (no source code available), and therefore cannot be used to integrate into + other Free printing software projects. + + + + + + Linuxprinting.org + Linuxprinting.org = not just for Linux; all &UNIX;-like OS-es, + like *BSD and commercial Unices may find useful printing + information on this site. This web site is the home for the interesting + Foomatic project, that strives to develop the "Meta Print Spool and Driver + Configuration Toolset" (being able to configure, through one common + interface, different print subsystems and their required drivers) with the + ability to transfer all queues, printers and configuration files seamlessly + to another spooler without new configuration effort. -- Also, they maintain + the Printing Database; a collection of driver and device information that + enables everybody to find the most current information about printer models, + and also generate online the configuration files for any + spooler/driver/device combo known to work with one of the common Linux or + &UNIX; print subsystems. + + Linuxprinting database + + + + + + Linuxprinting.org Database + ....Database containing printers and drivers that are suitable + for them... ...a lot of information and documentation to be found... ...it + is now also providing some tools and utilities for easing the integration + of those drivers into a given system... ...the "Foomatic" family + of utilities; being the toolset to make use of the database + for most of the commonly used print subsystems, for generating "on the fly" + working configurations for your printer model. + + Foomatic + + + + + LPR/LPD printing + LPR == some people translate Line + Printing Request, others: + Line Printer + Remote. + BSD-style printing + + + + + Magicfilter + Similarly to the APSfilter program, Magicfilter + provides automatic file type recognition functions and, base + on that, automatic file conversion to a printable format, + depending on the target printer. + APSfilter + + + + + &MIME;-Types + Abbreviation for Multipurpose (or + Multimedia) Internet Mail + Extensions; &MIME;-Types were first used to allow + the transport of binary data (like mail attachments containing + graphics) over mail connections that were normally only transmitting + ASCII characters: the data had to be encoded into an ASCII representation. + + Later this concept was extended to describe a data format in + a platform independent, but at the same time non-ambiguous, way. + From &Windows; everybody knows the .doc extensions for &Microsoft; Word files. + This is handled ambiguously on the &Windows; platform: .doc extensions are also + used for simple text files or for Adobe Framemaker files. And if a real + Word file is renamed with a different extension, it can no longer be + opened by the program. + + &MIME; typed files carry a recognition string with them, describing + their file format based on main_category/sub_category. + Inside IPP, print files are also described using the &MIME; type scheme. + &MIME; types are registered with the IANA (Internet Assigning Numbers + Association) to keep them unambiguous. + + &CUPS; has some &MIME; types of its own registered, like + application/vnd.cups-raster (for the &CUPS;-internal + raster image format). + + + &CUPS; + Easy Software Products + ESP PrintPro + Gimp-Print + + + + + PCL + Abbreviation for Printer + Control Language; + developed by &HP;. PCL started off in version 1 as a simple + command set for ASCII printing; now, + in its versions PCL6 and PCL-X, it is capable of printing graphics + and color -- but outside the &Microsoft; &Windows; realm and &HP-UX; + (&HP;'s own brand of &UNIX;), it is not commonly used... + ESC/P + &HP;/GL + PDL + &PostScript; + + + + + PDL + Abbreviation for Page + Description Language; + PDLs describe, in an abstract way, the graphical representation + of a page. - Before it is actually transferred into + toner or ink laid down on to paper, a PDL needs to be + "interpreted" first. In &UNIX;, the most important PDL + is &PostScript;. + + ESC/P + &HP;/GL + PCL + &PostScript; + + + + + Pixel + Abbreviation for Picture + Element; this term describes the smallest + part of a raster picture (either as printed on paper + or as displayed on a monitor by cathode rays or LCD elements). As + any graphical or image representation on those types of output + devices is composed of pixels, the values of "ppi" (pixel per inch) + and &dpi; (dots per inch) are one important parameter for the + overall quality and resolution of an image. + Filter + Ghostscript + &PostScript; + Raster + + + + + PJL + Abbreviation for Print + Job Language; + developed by &HP; to control and influence default and per-job + settings of a printer. It may not only be used + for &HP;'s own (PCL-)printers; also many &PostScript; + and other printers understand PJL commands sent to them + inside a print job, or in a separate signal. + PCL + + + + + &PostScript; + &PostScript; (often shortened to "PS") is the de-facto + standard in the &UNIX; world for printing files. It was + developed by Adobe and licensed to printer manufacturers + and software companies. + + As the &PostScript; specifications were + published by Adobe, there are also "Third Party" implementations + of &PostScript; generating and &PostScript; interpreting software + available (one of the best-known in the Free software world + being Ghostscript, a powerful PS-interpreter). + + ESC/P + &HP;/GL + PCL + PPD + + + + + PPD + Abbreviation for PostScript + Printer Description; + PPDs are ASCII files storing all information about the special + capabilities of a printer, plus definitions of the (PostScript- + or PJL-) commands to call on a certain capability (like print + duplexing). + + + As the explanation of the acronym reveals, PPDs were originally + only used for &PostScript; printers. &CUPS; has extended the + PPD concept to all types of printers. + + + PPDs for &PostScript; printers are provided by the printer + vendors. They can be used with &CUPS; and KDEPrint to have access + to the full features of any &PostScript; printer. The KDEPrint Team + recommends using a PPD originally intended for use with + &Microsoft; Windows NT. + + + PPDs for non-PostScript printers need a + companion "filter" to process the &PostScript; print files into + a format digestible for the non-PostScript target device. Those + PPD/filter combos are not (yet) available from the vendors. After + the initiative by the &CUPS; developers to utilize PPDs, the Free + Software community was creative enough to quickly come up with + support for most of the currently used printer models, through + PPDs and classical Ghostscript filters. But note: the printout + quality varies from "hi-quality photographic output" (using + Gimp-Print with most Epson inkjets) to "hardly readable" (using + Foomatic-enabled Ghostscript filters for models rated as + "paperweight" in the Linuxprinting.org database). + + &CUPS; + Linuxprinting.org + &PostScript; + + + + + PPD-O-Matic + PPD-O-Matic is a set of Perl scripts that run on the Linuxprinting.org + web server and can be used online to generate PPDs for any printer that is known + to print with Ghostscript. + + + These PPDs can be hooked up to &CUPS;/KDEPrint, as well as + used inside PPD-aware applications like StarOffice to determine all different + parameters of your printjobs. It is now recommended, in most cases, to + use "PPD-O-Matic" instead of the older &CUPS;-O-Matic. + + + To generate a PPD, go to the printer + database, select your printer model, follow + the link to show the available Ghostscript filters for that printer, select + one, click "generate" and finally save the file to your local system. + Be sure to read the instructions. Make sure that your local system + does indeed have Ghostscript and the filter, which you chose + before generating the PPD, installed. + + &PostScript; + &CUPS;-O-Matic + Linuxprinting.org + Foomatic + + + + + printcap + In BSD-style print systems, the "printcap" file holds + the configuration information; the printing daemon reads this file + to determine which printers are available, what filters are to be + user for each, where the spooling folder is located, + if there are banner pages to be used, and so on... + Some applications also depend on read access to the printcap + file, to obtain the names of available printers. + BSD-style printing + + + + + + Printer-MIB + Abbreviation for + Printer-Management + Information Base; the + Printer-MIB defines a set of parameters that are to be + stored inside the printer for access + through the network. This is useful if many (in some cases, literally + thousands) network printers are managed centrally + with the help of SNMP (Simple Network Management Protocol). + PWG + SNMP + + + + + PWG + Abbreviation for + Printer Working + Group; the PWG is a loose grouping of + representatives of the printer industry that has, in the past + years, developed different standards + in relation to network printing. These were later accepted by the + IETF as RFC standards, like the "Printer-MIB" and the IPP. + &PostScript; + IPP + Printer-MIB + SNMP + + + + + print:/ KIO Slave + You can use a syntax of "print:/..." to get quick access + to KDEPrint resources. Typing "print:/manager" as a Konqueror URL + address gives administrative access to KDEPrint. Konqueror uses &kde;'s + famous "KParts" technology to achieve that. + IO Slave + KParts + + + + + + Printer Database + . + Linuxprinting Database + + + + + Qt&CUPS; + Qt&CUPS; and KUPS were the predecessors of KDEPrint; they are now + deprecated and no longer maintained. What was good in qtcups is all inherited + by "kprinter", the new KDE print dialog (which is much improved over qtcups); + what you liked about kups is now all in the KDEPrint Manager (accessible + via the KDE Control Center or via the URL "print:/manager" from Konqueror) -- + with more functionality and less bugs... Its former developer, Michael Goffioul, is now + the developer of KDEPrint -- a very nice and productive guy and quick bug fixer... + + kprinter + + + + + Raster Image + Every picture on a physical medium + is composed of a pattern of discrete dots in different colors and (maybe) + sizes. This is called a "raster image". + + + This is as opposed to a "vector image" + where the graphic is described in terms of continuous curves, shades, + forms and filled areas, represented by mathematical formula. Vector images + normally have a smaller file size and may be scaled in size + without any loss of information and quality --- but they cannot be + output directly, but always have to be "rendered" or "rasterized" + first to the given resolution that the output device is capable of... + + + + The rasterization is done by a Raster Image Processor (RIP, + often the Ghostscript software) or some other filtering + instance. + Pixel + Ghostscript + &PostScript; + Filter + RIP + + + + + RIP + Abbreviation for + Raster Image + Process(or); if used in the context of + printing, "RIP" means a hardware or software + instance that converts &PostScript; (or other print formats + that are represented in one of the non-Raster PDLs) into a + raster image format in such a way that it is acceptable + for the "marking engine" of the printer. + + + &PostScript; printers + contain their own PostScript-RIPs. A RIP may or may not be located + inside a printer. + + + For many &UNIX; systems, Ghostscript is the package that provides + a "RIP in software", running on the host computer, and pre-digesting + the &PostScript; or other data to become ready to be sent to the + printing device (hence you may perceive a "grain of truth" in the + slogan "Ghostscript turns your printer into a &PostScript; + machine", which of course is not correct in the true sense of the + meaning). + Filter + Ghostscript + &PostScript; + PDL + Raster + + + + + + RLPR (Remote LPR) + Abbreviation for Remote + Line Printing + Request; this is a BSD-style printing system, + that needs no root privileges to be installed, and no "printcap" to + work: all parameters may be specified on the command + line. + + + RLPR comes in handy for many laptop users who are + working in frequently changing environments. This is because it + may be installed concurrently with every other printing + sub system, and allows a very flexible and quick + way to install a printer for direct access via LPR/LPD. + + + KDEPrint + has an "Add Printer Wizard" to make RLPR usage even easier. + The kprinter command allows switching to RLPR "on + the fly" at any time. + KDEPrint + kprinter + printcap + + + + + + SNMP + Abbreviation for Simple + Network Management + Protocol; SNMP is widely used to control + all types of network node (Hosts, Routers, Switches, Gateways, + Printers...) remotely. + PWG + Printer-MIB + + + + + SSL(3) encryption + Abbreviation for Secure + Socket Layer; + SSL is a proprietary encryption method for data + transfer over HTTP that was developed by Netscape. It is now being + replaced by an IETF standard named TLS. + + TLS + + + + + + SPOOLing + Abbreviation for Synchronous + Peripheral Operations + OnLine; + SPOOLing enables printing applications + (and users) to continue their work + as the job is being taken care of by a system daemon, + which stores the file at a temporary location until the printer is ready + to print. + Daemon + + + + + + TLS encryption + Abbreviation for Transport + Layer Security; + TLS is an encryption standard for + data transfered over HTTP 1.1; it is defined in RFC 2246; + although based on the former SSL development + (from Netscape) it is not fully compatible with it. + + SSL(3) + + + + + + System V-style printing + This is the second flavor of traditional &UNIX; + printing (as opposed to BSD-style printing). It uses + a different command set (lp, lpadmin,...) to BSD, + but is not fundamentally different from it. However, the + gap between the two is big enough to make the two + incompatible, so that a BSD-client cannot simply print + to a System V style print server without additional + tweaking... IPP is supposed to resolve this weakness + and more. + + BSD-style printing + IPP + + + + + TurboPrint + Shareware software providing photo quality printing for many + inkjet printers. It is useful if you are unable to find a driver for your + printer and may be hooked into either a traditional Ghostscript system + or a modern &CUPS; system. + Gimp-Print + + + + + XPP + Abbreviation for X + Printing Panel; + XPP was the first Free + graphical print command for &CUPS;, written by Till Kamppeter, + and in some ways a model for the "kprinter" utility in &kde;. + + + + + + + diff --git a/doc/kappfinder/Makefile.am b/doc/kappfinder/Makefile.am new file mode 100644 index 000000000..3f20a1e1b --- /dev/null +++ b/doc/kappfinder/Makefile.am @@ -0,0 +1,5 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + +KDE_MANS = AUTO diff --git a/doc/kappfinder/man-kappfinder.1.docbook b/doc/kappfinder/man-kappfinder.1.docbook new file mode 100644 index 000000000..1c0fdb681 --- /dev/null +++ b/doc/kappfinder/man-kappfinder.1.docbook @@ -0,0 +1,81 @@ + + +]> + + + +JanSchaumann +jschauma@netmeister.org +April 8, 2003 + + + +kappfinder +1 + + + +kappfinder +An app to add installed applications to the &kde; menu. + + + + +kappfinder + directory + + + + + + + +Description + +The KDE application findern (&kappfinder;) looks for legacy and +third party applications that are installed on your system and adds +them to the KDE menu system. + + + + +Options + + + + directory + + +Install .desktop files into directory directory + + + + + + + + +See Also + +More detailed user documentation is available from help:/kappfinder (either enter this +URL into &konqueror;, or run +khelpcenter +help:/kappfinder). + + + + +Authors + +&kappfinder; was written by &Matthias.Hoelzer-Kluepfel; &Matthias.Hoelzer-Kluepfel.mail; + +This man page was prepared by Jan Schaumann +jschauma@netmeister.org for the Missing Man +Pages Project ( http://www.netmeister.org/misc/m2p2/index.html. + + + + diff --git a/doc/kate/Makefile.am b/doc/kate/Makefile.am new file mode 100644 index 000000000..17a314c39 --- /dev/null +++ b/doc/kate/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = en +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/doc/kate/TODO b/doc/kate/TODO new file mode 100644 index 000000000..d41ed4b80 --- /dev/null +++ b/doc/kate/TODO @@ -0,0 +1,6 @@ +Fill empty sections. +Rewrite intro chapter. +Write regexp appendix. +Add Misc Tools chapter, ao Find in Files. +Go over everything and make sure it reflects the practial truuth ;) +Add links to foreign documentation. diff --git a/doc/kate/advanced.docbook b/doc/kate/advanced.docbook new file mode 100644 index 000000000..b9b0cda91 --- /dev/null +++ b/doc/kate/advanced.docbook @@ -0,0 +1,1242 @@ + + + +&Anders.Lund; &Anders.Lund.mail; +&Dominik.Haumann; &Dominik.Haumann.mail; + + + +Advanced Editing Tools + + + +Comment/Uncomment + +The Comment and Uncomment commands, available from the +Tools menu allow you to add or remove comment +markers to the selection, or the current line if no text is selected, +if comments are supported by the format of the text you are +editing. + +The rules for how commenting is done are defined in the syntax +definitions, so if syntax highlighting is not used, commenting/uncommenting +is not possible. + +Some formats define single line comment markers, some multiline +markers and some both. If multiline markers are not available, +commenting out a selection that does not fully include its last line +is not possible. + +If a single line marker is available, commenting single lines is +preferred where applicable, as this helps to avoid problems with +nested comments. + +When removing comment markers, no uncommented text should be +selected. When removing multiline comment markers from a selection, +any whitespace outside the comment markers is ignored. + +comment +To place comment markers, use the +ToolsComment +menu item or the related keyboard shortcut sequence, default is +&Ctrl;D. + +uncomment +To remove comment markers, use the +ToolsUncomment +menu item or the related keyboard shortcut, default is &Ctrl;&Shift;D. + + + + +The Editor Component Command Line + +Kate's editor component has an internal command line, allowing you to +perform various actions from a minimal GUI. The command line is a text entry +in the bottom of the editor area, to show it select +ViewSwitch to Command Line +or use the shortcut (default is +F7). The editor provides +a set of commands as documented below, and additional commands can be provided +by plugins. + +To execute a command, type the comand then press the return key. The +command line will indicate wether it succeded and possibly display a message. If +you entered the command line by pressing F7 it will +automatically hide after a few seconds. To clear the message and enter a new +command, press F7 again. + +The command line has a built-in help system, issue the command +help to get started. To see a list of all available commands +issue help list, to view help for a specific command, do +help command. + +The command line has a built in history, so you can reuse commands already +typed. To navigate the history, use the Up and +Down keys. When showing historical commands, the argument part +of the command will be selected, allowing you to easily overwrite the +arguments. + + +Standard Command Line Commands + + +Commands for Configuring the Editor + +These commands are provided by the editor component, and allows you to +configure the active document and view only. This is handy if you want to use +a setting different from the default settings, for example for indentation. + + + +Argument types + + +BOOLEAN +This is used with commands that turns things on or off. +Legal values are on, off, +true, false, +1 or 0 + + + +INTEGER +An integer number + + + +STRING +A string + + + + + + + +set-tab-widthINTEGER width +Sets the tab width to the number width + + + +set-indent-widthINTEGER width +Sets the indentation width to the number +width. Used only if you are indenting with +spaces. + + + +set-word-wrap-columnINTEGER width +Sets the line width for hard wrapping to +width. This is used if you are having your text wrapped +automatically. + + + +set-icon-borderBOOLEAN enable + +Sets the visibility of the icon border. + + + +set-folding-markersBOOLEAN enable +Sets the visibility of the folding markers pane. + + + +set-line-numbersBOOLEAN enable +Sets the visibility of the line numbers pane. + + + +set-replace-tabsBOOLEAN enable +If enabled, tabs are replaced with spaces as you type. + + + + +set-remove-trailing-spaceBOOLEAN enable +If enabled, trailing whitespace are removed whenever the cursor +leaves a line. + + + +set-show-tabsBOOLEAN enable +If enabled, TAB characters and trailing whitespace will be +visualized by a small dot. + + + +set-indent-spacesBOOLEAN enable +If enabled, the editor will indent with + spaces for each indentation level, rather than +with one TAB character. + + + +set-mixed-indentBOOLEAN enable +If enabled, kate will use a mix of TAB and spaces for +indentation. Each indentation level will be wide, +and more indentation levels will be optimized to use as many TAB characters as +possible. +When executed, this command will additionally set space indentation enabled, +and if the indent width is unspecified it will be set to half of the + for the document at the time of execution. + + + +set-word-wrapBOOLEAN +enable +Enables dynamic word wrap according to +enable + + + +set-replace-tabs-saveBOOLEAN enable + +When enabled, tabs will be replaced with whitespace whenever + the document is saved. + + + +set-remove-trailing-space-saveBOOLEAN enable +When enabled, trailing space will be removed from each line +whenever the document is saved. + + + +set-indent-modename +Sets the autoindentation mode to name. +If name is not known, the mode is set to 'none'. Valid +modes are 'cstyle', 'csands', 'xml', 'python', 'varindent' and 'none'. + + + +set-highlighthighlight +Sets the syntax highlighting system for the document. The +argument must be a valid highlight name, as seen in the +ToolsHighlighting +menu. This command provides an autocompletion list for its +argument. + + + + + + + +Commands for editing + +These commands modify the current document. + + + +indent +Indents the selected lines or the current line. + + + +unindent +Unindents the selected lines or current line. + + + +cleanindent +Cleans up the indentation of the selected lines or current line +according to the indentation settings in the document. + + + + +comment +Inserts comment markers to make the selection or selected lines +or current line a comment according to the text format as defined by the syntax +highlight definition for the document. + + + +uncomment +Removes comment markers from the selection or selected lines +or current line according to the text format as defined by the syntax highlight +definition for the document. + + + +kill-line +Deletes the current line. + + + +replacepatternreplacement +Replaces text matching pattern with +replacement. If you want to include whitespace in the +pattern, you must quote both the pattern +and replacement with single or double quotes. If the +arguments are unquoted, the first word is used as pattern +and the rest for replacement. If +replacement is empty, each occurrence of +pattern is removed. +You can set flags to configure the search by adding a colon, followed +by one or more letters each representing a configuration, giving the form +replace:options pattern replacement. Available options +are: + + + + +b +Search backwards. + + + +c +Search from cursor position. + + + +e +Search in the selection only. + + + +r +Do regular expression search. If set, you may use +\N where N is a number to represent captures in the +replacement string. + + + +s +Do case sensitive search. + + + +p +Prompt for permission to replace the next occurence. + + + +w +Match whole words only. + + + + + + + + + +dateformat +Inserts a date/time string as defined by the specified +format, or the format yyyy-MM-dd hh:mm:ss +if none is specified. The following translations are done when interpreting +format: + + + + +dThe day as number without a leading zero (1-31). +ddThe day as number with a leading zero (01-31). +dddThe abbreviated localized day name (e.g. 'Mon'..'Sun'). +ddddThe long localized day name (e.g. 'Monday'..'Sunday'). +MThe month as number without a leading zero (1-12). +MMThe month as number with a leading zero (01-12). +MMMThe abbreviated localized month name (e.g. 'Jan'..'Dec'). +yyThe year as two digit number +(00-99). +yyyyThe year as four digit number (1752-8000). +hThe hour without a leading zero (0..23 or 1..12 if AM/PM display). +hhThe hour with a leading zero (00..23 or 01..12 if AM/PM display). +mThe minute without a leading zero (0..59). +mmThe minute with a leading zero (00..59). +sThe second without a leading zero (0..59). +ssThe second with a leading zero (00..59). +zThe milliseconds without leading zeroes (0..999). +zzzThe milliseconds with leading zeroes (000..999). +APUse AM/PM display. AP will be replaced by either "AM" or "PM". +apUse am/pm display. ap will be replaced by either "am" or "pm". + + + + + + + + + +charidentifier + +This command allows you to insert literal characters by their +numerical identifier, in decimal, octal or hexadecimal form. +To use it launch the Editing Command dialog and type char: +[number] in the entry box, then hit +OK. + + +<command>char</command> examples + +Input: char:234 +Output: ê +Input: char:0x1234 +Output: + + + + + + + +replace, sed style +search, sed style +s///[ig] %s///[ig] + + +This command does a sed-like search/replace operation on the +current line, or on the whole file (%s///). + +In short, the text is searched for text matching the +search pattern, the regular expression between +the first and the second slash, and when a match is found, the +matching part of the text is replaced with the expression between the +middle and last part of the string. Parentheses in the search pattern +create back references, that is the command +remembers which part of the match matched in the parentheses; these +strings can be reused in the replace pattern, referred to as +\1 for the first set of parentheses, +\2 for the second and so on. + +To search for a literal ( or +), you need to escape it using +a backslash character: \(\) + +If you put an i at the end of the +expression, the matching will be case insensitive. If you put a +g at the end, all occurrences of the pattern will be +replaced, otherwise only the first occurrence is replaced. + + + +Replacing text in the current line + +Your friendly compiler just stopped, telling you that the class +myClass mentioned in line 3902 in your source file +is not defined. + +"Buckle!" you think, it is of course +MyClass. You go to line 3902, and instead of trying +to find the word in the text, you launch the Editing Command Dialog, +enter s/myclass/MyClass/i, hit the +OK button, save the file and compile – +successfully without the error. + + + + +Replacing text in the whole file + +Imagine that you have a file, in which you mention a Miss +Jensen several times, when someone comes in and tells you that +she just got married to Mr Jones. You want, of course, +to replace each and every occurrence of Miss Jensen +with Ms Jones. + +Enter the command line and issue the command +%s/Miss Jensen/Ms Jones/ and hit return, you +are done. + + + + +A More Advanced Example + +This example makes use of back references +as well as a character class (if you do not know what +that is, please refer to the related documentation mentioned +below). + +Suppose you have the following line: + +void MyClass::DoStringOps( String &foo, String &bar String *p, int &a, int &b ) + +Now you realize that this is not nice code, and decide that you +want to use the const keyword for all +address of arguments, those characterized by the & +operator in front of the argument name. You would also like to +simplify the white space, so that there is only 1 whitespace character +between each word. + +Launch the Editing Command Dialog, and enter: +s/\s+(\w+)\s+(&)/ const \1 \2/g and hit the +OK button. The g at the end of the expression makes +the regular expression recompile for each match to save the backreferences. + +Output: + +void MyClass::DoStringOps( const String &foo, const String &bar String *p, const int &a, const int &b ) + +Mission completed! Now, what happened? Well, we looked for some +white space (\s+) followed by one or more +alphabetic characters (\w+) followed by some more +whitespace (\s+) followed by an ampersand, and in +the process saved the alphabetic chunk and the ampersand for reuse in +the replace operation. Then we replaced the matching part of our line +with one whitespace followed by const followed by one +whitespace followed by our saved alphabetical chunk +(\1) followed by one whitespace followed by our +saved ampersand (\2) + +Now in some cases the alphabetical chunk was +String, in some int, so using the +character class \w and the + +quantifier proved a valuable asset. + + + + + + + + + + + + +Commands for navigation + + + + +gotoINT line +This command navigates to the specified line. + + + +findpattern +This command navigates to the first occurrence of +pattern according to the configuration. Following +occurrences can be found using +EditFind Next +(the default shortcut is F3). +The find command can be configured by appending a colon followed by one or +more options, the form is +find:options pattern. The +following options are supported: + + + + +b +Search backwards. + + + +c +Search from cursor position. + + + +e +Search in the selection only. + + + +r +Do regular expression search. If set, you may use +\N where N is a number to represent captures in the +replacement string. + + + +s +Do case sensitive search. + + + +w +Match whole words only. + + + + + + + + + + + +ifindpattern +This command provides as-you-type searching. You +can configure the behavior of the search by appending a colon +followed by one or more options, like this: +ifind:options pattern. Allowed options are + + + +b +Search backwards. + + + +r +Do regular expression search. + + + +s +Do case sensitive search. + + + +c +Search from cursor position. + + + + + + + + + + + + + + + +Using Code Folding + +Code folding allows you to hide parts of a document in the editor, making +it easier to overview large documents. In &kate; the foldable regions are +calculated using rules defined in the syntax highlight definitions, and +therefore it is only available in some formats - typically program source code, +XML markup and similar. Most highlight definitions supporting code folding +also lets you manually define foldable regions, typically using the +BEGIN and END keywords. + +To use the code folding feature, activate the folding markers using +ViewShow Folding +Markers menu item if they are not already visible. +The Folding Markers Pane in the left side of the screen displays a graphical +view of the foldable regions, with +/- signs to indicate the possible operation +on a given region: a - means that the region is expanded, clicking the - will +collapse the region and a + will be displayed instead. + +Four commands are provided to manipulate the state of folding regions, +see the menu documentation. + + +If you do not want to use the code folding feature, you can disable +the Show folding markers (if available) option in the +Appearance page of the editor +configuration + + + + + +Scripting the editor component with Javascript + + + +Introduction + +Starting with version 2.5, the &kate; editor component supports +scripting with ECMA script, also known as JavaScript. + +Scripts can be used through the built in command line +only. The requirements is that the script is placed in a folder where &kate; +can find it, along with an optional .desktop file that defines the related +properties. The valid folder are named katepart/scripts +in the &kde; data folders. You can find the data folders by running the command +kde-config data +You will usually have at least a system and a personal data folder. Of course +scripts in the system data folder are available to all users on the system, +while those in the personal folder are available for you only. + +This feature is experimental and will most likely change during +future development. +We know that many of you will be disappointed because you can't add +your scripts to the menu or assign shortcuts to them. Sorry, sometime +in the future that will likely be possible. +It is also not possible to pass any arguments to your scripts yet. Be +patient, and that may be added in the bright future ;) + + + + + + +The Kate JavaScript API + +Here is listed the complete set of functions and properties available +in the document and view objects. +In addition you can of course use all the standard objects such as +Math, String Regex and so forth. + +When a script is run, the document object is the +current document, and the view object is the current +view. + +The types of arguments are of course not used in JavaScript at +this time, they are there solely to indicate what sort of value the funcitons +expect. + + +Global Functions + +debug( string) +[function] + + +parameters +string the string to output + + +Outputs the string to STDERR using +kdDebug(). A dedicated output area is used for the output, +which will be prefixed Kate (KJS Scripts): + + + + + + +The <classname>document</classname> API + + +document.attribute( line +, column ); + [function] + + +Parameters +uint line The line of the position for which +to find the attribute. +uint column The column of the position for +which to find the attribute. + +Returns the numeric ID of the attribute for the document position +[line,column]. The attribute +represents the visual appearance or style of the text, and is also used to +calculate the syntax highlight for a specific part of the text in mixed formats +like HTML or PHP. + + + + +document.canBreakAt( Char c, +uint attribute ); [function] + + +Parameters +c The character to test +attribute The attribute at the position +of c. + +Returns whether it is allowed to break the line at a character c with +attribute attribute. The result is decided by querying the highlight owning +attribute for which characters allow breaking the line. + + + + +document.canComment( uint start_attribute, +uint end_attribute ); [function] + + +Parameters +start_attribute The attribute at the +start of the range to turn into a comment. +end_attribute The attribute at end of +the range to turn into a comment. + +Returns whether start_attribute and end_attribute belongs to the same +syntax highlight system. If they do, it is sane. + + +using canComment + +if ( document.canComment( document.attribute(1,0), document.attribute(5,0) ) ) { + // 1,0 and 5,0 belongs to the same syntax highlighting system +} + + + + + + +document.clear(); [function] +Clears the document. + + + +document.commentStart( uint attribute ); +[function] + + +Parameters +attribute The attribute of the text for +which to get the commentStart string. + +Returns the string required to start a multiline comment for a text with +attribute, or an empty string if multiline comments are not supported for that +text. + + + + +document.commentMarker( uint attribute ); +[function] + + +Parameters +attribute The attribute of the text for +which to get the commentMarker string + +Returns the string used to mark the rest of the line as a comment for a +text with attribute or an empty string if single line comments are not supported +for that text. + + + + +document.commentEnd( uint attribute ); +[function] + + +Parameters +attribute The attribute of the text for +which to get the commentEnd string + +Returns the string required to end a multiline comment for a text with +attribute, or an empty string if multiline comments are not supported for that +text. + + + + +document.editBegin(); [function] + +Start an editing group. All actions done until the call of editEnd() will +be grouped as one undo-action. + + + + +document.editEnd(); [function] + +Finish an editing group. + + + + +document.highlightMode; [property:read only] + +The name of the document's highlight mode, such as JavaScript or C++. +If no syntax highlight mode is set for the document, the value is None. Notice +that you need to use the English name in cases where it differs from the +translated one. + + + + +document.indentMode; [property:read only] + +The name of the document indent mode, such as +normal or cstyle. +Remember that if no indent mode is set, the value is none. + + + + + +document.indentWidth; [property:read only] + +The indentation width set for the document. This is used if space +indenting is enabled. + + + + +document.insertLine( uint line, +string text ); [function] + + +Parameters +line document line number + +text text to insert + +Inserts a new line with the text text at the +line line. + + + + +document.insertText( uint line, +uint column, string text ); +[function] + + +Parameters +line the line number +column the column +text the text which is to be +inserted + +Inserts the text text in line +line and column column. + + + + +document.length(); [function] + +Returns the document's size in bytes. + + + + +document.lines(); [function] + +Returns the number of lines in the document. + + + + +document.mixedIndent; [property:read only] + +A boolean telling whether the mixed-indent setting is enabled for the +document. If so, indentation is optimized to contain a mix of tab characters and +spaces like used by the Emacs editor. + + + + +document.removeLine( uint line ); [function] + + +Parameters +line line number + +Removes the document line line. + + + + +document.removeText( uint startLine, +uint startColumn, uint endLine, +uint endColumn ); [function] + + +Parameters +startLine specifies the beginning +line +startColumn specifies the beginning +column +endLine specifies the ending +line +endColumn specifies the ending +column + +Removes the text range from line startLine and +column startColumn up to line +endLine and column endColumn. + + + + + +document.setText( string text ); +[function] + + +Parameters +text document text + +Sets the entire document content to text. + + + + +document.spaceIndent; [property:read only] + +A boolean telling whether space-indent is enabled for the document. +If so, the document is indented with indentWidth spaces pr level, otherwise +indentation is one tab character pr. level. + + + + +document.textFull(); [function] + +Returns the full document text. If the text spans over multiple lines the +linefeed character is \n. + + + + +document.textLine( uint line ); [function] + + +Parameters +line the line + +Returns the text of line line. + + + + +document.textRange( uint startLine, +uint startColumn, uint endLine, +uint endColumn ); [function] + + +Parameters +startLine specifies the beginning +line +startColumn specifies the beginning +column +endLine specifies the ending line + +endColumn specifies the ending +column + +Returns the specified text range. If the range spans over multiple lines +the linefeed character is \n. + + + + + + +The <classname>view</classname> API + + +view.clearSelection(); [function] + +Deselects all text. + + + + +view.cursorColumn(); [function] + +Returns the current cursor column (TAB characters are expanded). + + + + +view.cursorColumnReal(); [function] + +Returns the current real cursor column (TAB characters counts one). + + + + +view.cursorLine(); [function] + +Returns the current cursor line. + + + + +view.hasSelection(); [function] + +Returns true if the view contains selected text, +otherwise false. + + + + +view.removeSelectedText(); [function] + +Removes the selected text, if the view has a selection. + + + + +view.selectAll(); [function] + +Selects all text. + + + + +view.selection(); [function] + +Returns the selected text. If the selection spans over multiple lines the +linefeed character is \n. + + + + +view.selectionEndColumn; [property:read only] + +Returns the ending column of the selection. + + + + +view.selectionEndLine; [property:read only] + +Returns the ending line of the selection. + + + + +view.selectionStartColumn; [property:read only] + +Returns the starting column of the selection. + + + + +view.selectionStartLine; [property:read only] + +Returns the starting line of the selection. + + + + +view.setCursorPosition( uint line, +uint column ); [function] + + +Parameters +line Specifies the line for the +cursor. +column Specifies the column for the +cursor. + +Sets the input cursor position in the view to [line, +col]. This sets the cursor position by visual means, +that is the a TAB character counts up to tabwidth +depending on the position inside the line. The cursor position is made visible. +Both line and column are zero-based. + + + + +view.setCursorPositionReal( uint line, +uint column ); [function] + + +Parameters +line Specifies the line for the +cursor. +column Specifies the column for the +cursor. + +Sets the input cursor position to [line, +col]. This sets the string position, that is a TAB +character counts for 1. The cursor position is made visible. Both line and +column are zero-based. + + + + +view.setSelection( uint startLine, +uint startColumn, uint endLine, +uint endColumn ); [function] + + +Parameters +startLine specifies the beginning line +startColumn specifies the beginning column +endLine specifies the ending line +endColumn specifies the ending column + +Sets a selection from line startLine and column +startColumn up to line endLine +and column endColumn. + + + + + + + +A sample script +As an example we will create a small script that uppercases the selection. +It is obvious that we first need to check whether a selection exists, if so we +get the text, change the case and then replace it with the new one. An +implementation could look like this: + + +if ( view.hasSelection() ) +{ + // uppercase selection + column = view.selectionStartColumn; + line = view.selectionStartLine; + + selection = view.selection().toUpperCase(); + + document.editBegin(); + view.removeSelectedText(); + document.insertText( line, column, selection ); + document.editEnd(); +} + + +To group this action together so that they will be reverted by a single +activation of Undo we encapsulate the lines +view.removeSelectedText() and +document.insertText() with a +document.editBegin() and +document.editEnd(). + + + + +A sample <filename>.desktop</filename> file + +Here is a sample .desktop file that accompanies the above script. + + +# Example of a .desktop file +[Desktop Entry] +Encoding=UTF-8 +Name=Kate Part JavaScript Uppercase +Comment=Script to uppercase the selection +X-Kate-Command=uppercase-selection +X-Kate-Help=<p>Usage: <code>uppercase-selection</code></p> + + +As you can see you can define the Encoding, set a Name, a Comment, a help +text using X-Kate-Help and the command line name via X-Kate-Command. The entries +Name, Comment and X-Kate-Help are automatically translated into other languages +by the KDE translation teams, if the files are in KDE's SVN repository. + + + + +Putting it togeather + +&kate; will search the script folders (see above) for +*.js files. For every file it checks whether there is a +corresponding .desktop file, like for uppercase.js it +would look for uppercase.desktop. +If a .desktop file can not be found the script will +be registered in katepart's command line with the filename without the ending +.js, so in our example this would be uppercase. If the +command-name is fine and you don't need the extra features a +.desktop file provides you do not need a +.desktop file at all. +If a .desktop file exists katepart will read the name +under which the script will be registered from the .desktop-entry +X-Kate-Command, for example X-Kate-Command=uppercase-selection. + + + + + + + + diff --git a/doc/kate/configdialog01.png b/doc/kate/configdialog01.png new file mode 100644 index 000000000..751066792 Binary files /dev/null and b/doc/kate/configdialog01.png differ diff --git a/doc/kate/configdialog02.png b/doc/kate/configdialog02.png new file mode 100644 index 000000000..70a7ecaed Binary files /dev/null and b/doc/kate/configdialog02.png differ diff --git a/doc/kate/configuring.docbook b/doc/kate/configuring.docbook new file mode 100644 index 000000000..14642c74c --- /dev/null +++ b/doc/kate/configuring.docbook @@ -0,0 +1,1595 @@ + + + +&Anders.Lund; &Anders.Lund.mail; + + + +Configuring &kate; + + +Overview + + +configure +settings +preferences + + + + + + + +&kate; offers several means of tweaking the application to behave as desired. +The most important ones are: + + + + +The Configuration Dialog +The main configuration tool, allowing you to configure the &kate; application, +the editor component and the usage of plugins. + + +The Settings Menu +Allows you to change often used settings, and to +launch the configuration dialogs. + + +The View Menu +Allows you to split the current frame, as well as to +display the icons and line numbers pane for the currently edited +document. + + + +The embedded &konsole; is using the configuration defined in the +&kcontrolcenter;, and may be configured by clicking the +right mouse button and choosing from the +Settings sub menu. + + + + +The Main Configuration Dialog + + + + + + + +The &kate; configuration dialog displays a tree of topics on the +left, and a configuration page corresponding to the selected topic on +the right. + +The configuration is divided into two groups, namely + +Application configuration + +Editor component configuration + + + + + + + + +The &kate; Application Configuration +This group contains pages to configure the main &kate; application + + +The General Page +This section contains a few global options for &kate; + + + + + +Show Full Path in Title +When enabled, Kate will display the full URL of your +current document in the window title, rather than just the file name. + + + + + +Behavior + + + + + +Sync Konsole with Active Document +This will cause the built-in &konsole; to +cd into the directory of the active document when +launched and when a new document gets the focus. If not enabled, you +have to do all your navigation in the &konsole; on your own. + + + + + +Warn about files modified by foreign processes +When enabled, &kate; will notify you about files modified +from outside the application whenever the main window receives input focus. +You will be able to deal with several modified files at once, you +can reload, save or discard changed files in groups. +If not enabled, &kate; will prompt you for action when a externally +modified file receives focus within the application. + + + + + + + + + +Meta Data + + + + + +Keep meta-information past sessions +When enabled, &kate; will store meta data such as bookmarks +and session configuration even when you close your documents. The data +will be used if the document is unchanged when reopened. + + + + +Delete unused meta information after +Set the maximum number of days to keep meta information +for unopen files. This helps keeping the database of meta information +reasonably sized. + + + + + + + + + + + +The Sessions Page + +This section contains options related to using sessions. + + + + + +Elements of Sessions + + + +Include window configuration +If enabled, &kate; will save the window configuration +with each session. + + + + + + + +Behavior on Application Startup + +Select how you want &kate; to behave at startup. This setting can be +overridden by specifying what to do on the command line. + + +Start new session +With this option, &kate; will start a new, unnamed session +when you start it. + + +Load last used session +&kate; will use the most recently opened session at +startup. This is good if you want to use the same session always or switch +rarely. + + +Manually choose a session +&kate; will display a small dialog that lets you choose +your preferred session. This is the default behavior. Nice if you use a lot of +different sessions frequently. + + + + + + + +Behavior on Application Exit or Session Switch + + + +Do not save session +The changes to the session data (open files and if enabled, +window configuration) will not be saved. You will of course be prompted if you +have unsaved files. With this option, your can configure your sessions once, and +not worry about closing extra files that you opened and do not want to see +next time you use the session. + + +Save Session +&kate; will save session data, except if the session is unnamed. +With this option, your sessions are allways restored just like you left them. +This is the default behavior. + + + +Ask user +You will be asked if you want to save the session every time a +named session is closed. + + + + + + + + + + +The <guilabel>Filesystem Browser</guilabel> Page + + + +Toolbar +Configure the buttons on the file system browser toolbar +by moving the ones you want enabled to the Selected Actions +list, and order them using the arrow buttons at the side of the list. + + + + +Auto Synchronization +You can have the filesystem browser automatically navigate to +the directory containing the current document on certain events: + +When a new document becomes the active one. +When the filesystem browser becomes visible. + +Even if you select not to use this feature, you can manually synchronize the +browser with the current document by pressing the +Synchronize toolbar button. + + + + +Remember locations +Select how long a browsing history you want. The browser does +only remember individual locations, duplicates are removed. + + + +Remember filters +Select how many filters you want remembered. Only individually +distinct filters are remembered, duplicates are removed. + + + +Session + +Configure wether the file system browser should remember its location and +filter over sessions. + + + + + + + + +The <guilabel>Doucment List</guilabel> Page + + + +Backgound Shading +This section allows you to enable or disable the background +shading visualization of your recent activity, and chose which colors to use if +enabled. See the section about The Document List for more about +this feature. + + +Sort By +Set how you want the document list sorted. This can be set +from the &RMB; menu in the document list as well. + + + + + + +The <guilabel>Plugins</guilabel> Page + +This page provides a list of installed plugins for the &kate; +application. Each plug-in is represented with its name and a short description. +You can check the checkbox with an item to enable the plug-in it represents. + + +If a plug-in provides configuration options, a section to access those +will appear as a child of this page. + + + + + +External Tools + +In the Tools menu you will find a submenu labeled +External Tools. These tools invokes external +applications with data related to the current document, for example its URL, +directory, text or selection. This page allows you to manage the menu and edit, +remove or add new tools. + +Each external tool is a shell command which contains macros representing +the document data. When activated, the macros are substituted with data from the +active document. + + +External Tools Properties + +Label +A friendly label for the External Tools menu. + + + +Script +The script to execute when the tool is activated. Before passing +the script to the shell, the following macros are substituted: + + + +%URL +The full URL of the current document, or an empty string if the +document is unsaved. + + + +%URLS +A space seperated list of the URLs of all open documents +(except unsaved ones). + + + +%directory +The directory part of the current documents URL or an empty +string if the current document is unsaved. + + + +%filename +the filename of the current document without the path, or an +empty string if the current document is unsaved. + + + +%line +The line number of the insertion cursor is in the current +document. + + + +%column +The column number of the insertion cursor in the current +document. + + + +%selection +The selected text in the current document, or an empty string +if no text is selected + + + +%text +The full text of the current document. Beware that this will +potentially exceed the maximum command length allowed on your system. +Use with care. + + + + + + + + +Executable +The main executable is the script. This is mandatory, and is used +to test if the command can be run at all. A fully qualified path is allowed +in case the executable is not in your PATH variable. + + + +Mimetypes +A semicolon separated list of mimetypes for which this command +should be enabled. This is currently unused. + + + +Save +You can optionally select to have the current or all documents +saved prior to executing the script. This is handy if your script reads the file +from disk. + + + +Command Line Name +If you fill this, the tool will be available in the +editors command line as +exttool-Command Line Name +(the string you enter here prepended exttool-). + + + + + + + + + +The Editor Component Configuration +This group contains all pages related to the editor component of +&kate;. Most of the settings here are defaults, they can be overridden by +defining a filetype, +by Document Variables or by changing +them pr. document during an editing session. + + + +Appearance + + + +Word Wrap + + + +Dynamic word wrap +If this option is checked, the text lines +will be wrapped at the view border on the screen. + + +Dynamic word wrap indicators +Choose when the Dynamic word wrap indicators +should be displayed. + + +Vertically align dynamically wrapped lines +to indentation depth: + +Enables the start of dynamically wrapped +lines to be aligned vertically to the indentation level of the first +line. This can help to make code and markup more +readable.Additionally, this allows you to +set a maximum width of the screen, as a percentage, +after which dynamically wrapped lines will no longer be vertically aligned. +For example, at 50%, lines whose indentation levels are deeper than 50% of the +width of the screen will not have vertical alignment applied to subsequent +wrapped lines. + + + + + + +Code Folding + + + +Show folding markers (if available) + +If this option is checked, the current view will display marks +for code folding, if code folding is available. + + + + + + +Borders + + + +Show icon border + +If this is checked, you will see an icon border on the left +hand side. The icon border shows bookmark signs for instance. + + +Show line numbers + +If this is checked, you will see line numbers on the left +hand side. + + +Show scrollbar marks + +If this option is checked the current view +will show marks on the vertical scrollbar. These marks will +for instance show bookmarks. + + + + + + +Sort Bookmarks Menu + + + + +By position + +The bookmarks will be ordered by the line +numbers they are placed at. + + +By creation + +Each new bookmark will be added to the bottom, +independently from where it is placed in the document. + + + + + + +Show identation lines + +If this is checked, the editor wil display +vertical lines to help identifying indent lines. + + + + + +Fonts & Colors + +This section of the dialog lets you configure all fonts and colors in +any color scheme you have, as well creating new schemes or deleting existing +ones. Each scheme has settings for colors, fonts and normal and highlight text +styles. + + +&kate; will preselect the currently active scheme for you, if you want to +work on a different scheme start by selecting that from the +Schema combobox. + + +Colors + + + +Text Area Background + + + + + +Normal text +This is the default background for the editor area, it will be +the dominant color on the editor area. + + + +Selected Text +This is the background for selected text. The default is +the global selection color, as set in your &kde; color preferences. + + + + +Current Line +Set the color for the current line. Setting this a bit different +from the Normal text background helps to keep focus on the current line. + + + + +Bookmark +This combo lets you set overlay colors for various mark types. +The color is mixed into the background color of a marked line, so that a line +with more marks or a marked line that is current has a background that is a mix +of more colors. The mark colors are also used if you enable display of scrollbar +marks. + + + + + + + +Other Elements + + + +Left Border Background +This color is used for the marks, line numbers and folding +marker borders in the left side of the editor view when they are displayed. + + + +Line Numbers +This color is used to draw the line numbers on the left side of +the view when displayed. + + +Bracket Highlight +This color is used to draw the background of matching brackets. + + + +Word Wrap Markers +This color is used to draw a pattern to the left of dynamically +wrapped lines when those are aligned vertically, as well as for the static word +wrap marker. + + +Tab Markers +This color is used to draw white space indicators when enabled. + + + + + + + + + + +Fonts + +Here you can choose the font for the schema. You can choose from +any font available on your system, and set a default size. A sample text +displays at the bottom of the dialog, so you can see the effect of your choices. + + + + +Normal Text Styles +The normal text styles are inherited by the highlight text styles, +allowing the editor to present text in a very consistent way, for example comment +text is using the same style in allmost all of the text formats that kate can +highlight. +The name in the list of styles is using the style configured for +the item, providing you with an immediate preview when configuring a style. + +Each style lets you select common attributes as well as foreground +and background colors. To unset a background color, rightclick to use the +context menu. + + + +Highlighting Text Styles +Here you can edit the text styles used by a specific highlight definition. +The editor preselects the highlight used by your current document. To work on a +different highlight, select one in the Highlight combobox +above the style list. + +The name in the list of styles is using the style configured for +the item, providing you with an immediate preview when configuring a style. + +Each style lets you select common attributes as well as foreground +and background colors. To unset a background color, rightclick to use the +context menu. In addition you can see if a style is equal to the default style +used for the item, and set it to that if not. +You will notice that many highlights contain other highlights represented +by groups in the style list. For example most highlights import the Alert +highlight, and many source code formats imports the Doxygen highlight. Editing +colors in those groups only affects the styles when used in the edited highlight +format. + + + + + + +Cursor & Selection + + + + +Text Cursor Movement + + + +Smart home + +When selected, pressing the home key will cause the cursor to +skip white space and go to the start of a line's text. + + + +Wrap cursor + +When on, moving the insertion cursor using the Left and Right keys will +go on to previous/next line at beginning/end of the line, similar to most +editors.When off, the insertion cursor cannot be moved left of the +line start, but it can be moved off the line end, which can be very handy for +programmers. When this option is chosen, moving the cursor with the arrow keys +off the end of a line (to the right) causes it to jump down to the beginning of +the next line. Likewise when the cursor is moved past the beginning of a line +(to the left) it jumps up to the end of the preceding line. When this option is +not selected, moving the cursor right past the end of a line merely causes it to +continue horizontally in the same line and trying to move it left past the +beginning does nothing. + + + +Page Up/Page Down moves cursor + +This option changes the behavior of the cursor when the user presses +the Page Up or Page Down key. If unselected +the text cursor will maintain its relative position within the visible text in +&kate; as new text becomes visible as a result of the operation. So if the +cursor is in the middle of the visible text when the operation occurs it will +remain there (except when one reaches the beginning or end.) With this option +selected, the first key press will cause the cursor to move to either the top or +bottom of the visible text as a new page of text is displayed. + + + +Autocenter cursor (lines): + +Sets the number of lines to maintain visible above and below the cursor +when possible. + + + + + + + +Selection Mode + + + +Normal + +Selections will be overwritten by typed text and will be lost on +cursor movement. + + + +Persistent + +Selections will stay even after cursor movement and typing. + + + + + + + + + + +Editing + + + +Tabulators + + + +Insert spaces instead of tabulators + +When this is enabled the editor will insert a calculated number of spaces +according to the position in the text and the setting +when you press the TAB key. + + + +Show tabulators + +When this is enabled &kate; will display a small dot as a visual +representation of tabulator characters. +This also causes dots to be drawn to indicate trailing white space. +This will be fixed in a future version of &kate; + + + +Tab Width If the +Replace Tabs By +Spaces +option is selected this entry determines the number of +spaces with which the editor will automatically replace +tabs. + + + + + + +Static Word Wrap + +Word wrap is a feature that causes the editor to automatically start a new line +of text and move (wrap) the cursor to the beginning of that new line. &kate; +will automatically start a new line of text when the current line reaches the +length specified by the Wrap Words +At: option. + + +Enable static word wrap + +Turns static word wrap on or off. + + + +Show static word wrap markers +(if applicable) + +If this option is checked, a vertical line will be drawn at the word wrap +column as defined in the Settings +Configure Editor... in the Editing tab. +Please note that the word wrap marker is only drawn if you use a fixed pitch +font. + + + +Wrap words at: + +If the Word Wrap option is selected +this entry determines the length (in characters) at which the editor will +automatically start a new line. + + + + + + + +Remove Trailing Spaces +&kate; will automatically eliminate extra spaces +at the ends of lines of text. + + +Auto Brackets When +the user types a left bracket ([, (, or {) &kate; automatically enters the +right bracket (}, ), or ]) to the right of the cursor. + + + Maximum undo steps: +Here the user may specify the number of steps &kate; will +retain in memory for purposes of undoing entries and actions. This means that +the higher the number of steps set the more memory &kate; will use for this. +Setting this entry to 10 would mean that the user would be be able reverse the +last ten operations, i.e. click the undo +button 10 times and obtain results. + + Smart search text from: +This determines where &kate; will get the search +text from (this will be automatically entered into the Find Text +dialog): + +Nowhere: Don't guess the search +text. +Selection Only: Use + the current text selection, if available. +Selection, then Current Word: +Use the current selection if available, otherwise use the current word. + +Current Word +Only: Use the word that the cursor is currently resting on, if +available. +Current Word, then Selection: +Use the current word if available, otherwise use the current selection. + + +Note that, in all the above modes, if a +search string has not been or cannot be determined, then the Find Text Dialog +will fall back to the last search text. + + + + + + +Indentation + + +Automatic indentation + + + +Indentation mode: + +Select the automatic indentation mode you want to use as default. It is +strongly recommended to use None or +Normalhere, and use filetype configurations to set other +indentation modes for text formats like C/C++ code or &XML;. + + + +Insert leading Doxygen "*" when typing + +Automatically insert a leading "*" while typing within a doxygen +style comment. This setting is only enabled when applicable. + + + + + + + +Indentation with Spaces + + + +Use spaces instead of tabs to indent + +This replaces tabs with the number of spaces set in Number of +spaces: below. + + + +Emacs style mixed mode + +Use a mix of tabs and space characters for indentation. + + + +Number of spaces: + +Set the number of spaces you want to use for indentation when you +check Use spaces instead of tabs to indent +above. + + + + + + + +Keep Indent Profile +When this is enabled, the editor will not unindent lines in a +selection further when the line with the least indentation becomes unindented. +If you sometimes unindent blocks of indented code, this may be helpful. + + + + +Keep Extra Spaces +Indentations of more than the selected number of spaces +will not be shortened. + + + +Keys to use + + + +Tab key indents + +This allows the tab key to be used to indent. + + + +Backspace key indent + +This allows the backspace key to be used to +indent. + + + + + + + +Tab Key Mode if Nothing Selected + + + +Insert indent characters + +This allows the Tab key insert indent +characters. + + + +Insert tab character + +This allows the Tab key insert a tab. + + + +Indent current line + +This allows the Tab key indent the current +line. + + + + + + + + + + +Open & Save + + + + +File Format + + + +Encoding: + +This sets the default character encoding for your files. + + + +End of line: + +Choose your prefered end of line mode for your active +document. You have the choice between &UNIX;, DOS/&Windows; or Macintosh. + + + +Automatic end of line detection + +Check this if you want the editor to autodetect the end of line +type. The first found end of line type will be used for the whole file. + + + + + + + +Memory Usage + + + +Maximum loaded blocks per file: + +The editor will load given number of blocks (of around 2048 lines) of +text into memory; if the filesize is bigger than this the other blocks +are swapped to disk and loaded transparently as-needed. +This can cause little delays while navigating in the document; a +larger block count increases the editing speed at the cost of memory. +For normal usage, just choose the highest possible block count: +limit it only if you have problems with the memory usage. + + + + + + + +Automatic Cleanups on Load/Save + + + +Remove trailing spaces + +The editor will automatically eliminate extra spaces at the ends of lines +of text while loading/saving the file. + + + + + + + +Folder Config File + + + +Search depth for config file: + +The editor will search the given number of folder levels upwards +for &kate; config file and load the settings line from it. + + + + + + + +Backup on Save +Backing up on save will cause &kate; to copy the disk file to +<prefix><filename><suffix>' before saving changes. +The suffix defaults to ~ and prefix is empty by +default. + + +Local files + +Check this if you want backups of local files when +saving. + + + +Remote files + +Check this if you want backups of remote files when saving. + + + +Prefix + +Enter the prefix to prepend to the backup file names. + + + +Suffix + +Enter the suffix to add to the backup file names. + + + + + + + + + + + +Highlighting +This group of options is used to customize the highlighting styles for +each programming language type. Any changes you made in other areas of this +dialog apply only to this type. + + + +Highlight: +This is used to choose the language type to +configure. + + + +Informations + + +View the properties of the chosen language highlighting rules: +author name and license. + + + + + +Properties + + + +File extensions: +This is the list of file extensions used to determine which +files to highlight using the current syntax highlight mode. + + +MIME types: +Clicking the wizard button will display a dialog with a list of +all available mime types to choose from.The File Extensions entry will automatically be edited as +well. + + +Priority: +Set the priority of the highlight rule. + + + + + + +Download... + + +Click this button to download new or updated syntax highlight descriptions +from the &kate; website. + + + + + + + + +Filetypes +This page allows you to override the default configuration for documents +of specified mimetypes. When the editor loads a document, it will try if it +matches the file masks or mimetypes for one of the defined filetypes, and if so +apply the variables defined. If more filetypes match, the one with the highest +priority will be used. + + + +Filetype: +The filetype with the highest priority is the one displayed in +the first drop down box. If more filetypes were found, they are +also listed. + + +New +This is used to create a new filetype. After +you click on this button, the fields below get empty and you +can fill the properties you want for the new filetype. + + +Delete +To remove an existing filetype, select it from the drop down +box and press the Delete button. + + + + + +Properties of current filetype +The filetype with the highest priority is the one displayed in +the first drop down box. If more filetypes were found, they are also +listed. + + +Name: +The name of the filetype will be the text of the corresponding +menu item. This name is displayed in the +ToolsFiletypes + + + +Section: +The section name is used to organize the file types in +menus. This is also used in the +ToolsFiletypes + menu. + + +Variables: +This string allows you to configure &kate;'s settings for the +files selected by this mimetype using &kate; variables. You can set almost any +configuration option, such as highlight, indent-mode, encoding, +etc.For a full list of known variables, see the +manual. + + +File extensions: +The wildcards mask allows you to select files by filename. A +typical mask uses an asterisk and the file extension, for example +*.txt; *.text. The string is a semicolon-separated list of +masks. + + +MIME types: +Displays a wizard that helps you easily select +mimetypes. + + +Priority: +Sets a priority for this file type. If more than one file type +selects the same file, the one with the highest priority will be +used. + + + + + + + + +Shortcuts +You can change here the shortcut keys configuration. Select an +action and click on Custom if you want a different shortcut +for this action. +The search line alllows you to look for a specific action and see +its associated shortcut. + + + +Plugins +This tab lists all available plugins and you can check those you +want to use. Once a plugin is checked, the +Configure button is enabled and you can click it +in order to configure the highlighted plugin. + + + + + + + + +Configuring With Document Variables + +Kate variables is kateparts implementation of document variables, similar +to emacs and vi modelines. In katepart, the lines have the format + +kate: VARIABLENAME VALUE; [ VARIABLENAME VALUE; ... ] + +the lines can of course be in a comment, if the file is in a format with comments. +Variable names are single words (no whitespace), and anything up to the next +semicolon is the value. The semicolon is required. + +Here is an example variable line, forcing indentation settings for a C++, +java or javascript file: + +// kate: space-indent on; indent-width 4; mixedindent off; indent-mode cstyle; + + +Only the first and last 10 lines are searched for variable lines. + +There are variables to support almost all configurations in katepart, and +aditionally plugins can use variables, in which case it should be documented in +the plugin's documentation. + + +How kate uses variables + +When reading configuration, katepart looks in the following places +(in that order): + + +The global configuration. +Optional session data. +The "Filetype" configuration. +Document variables in the document itself. +Settings made during editing from menu or command line. + + +As you can understand document variables has the next highest precedence. +Whenever a document is saved, the document variables are reread, and will +overwrite changes made using menu items or the command line. + +Any variable not listed below is stored in the document and can be queried +by other objects such as plugins, which can use them for their own purpose. +For example the variable indent mode uses document variables for its +configuration. + +The variables listed here documents &kate; version 2.4. More variables +may be added in the future. There are 3 possible types of values for variables, +with the following valid expressions: + +BOOL - on|off|true|false|1|0 +INTEGER - any integer number +STRING - anything else + + + + +Available Variables + + +auto-bracketsBOOL +Set auto insertion of brackets on or off. + + + +auto-center-linesINT +Set the number of autocenter lines. + + + +auto-insert-doxygenBOOL +Turn insertion of the leading asterisk in doxygen comments on or +off. This has no effect unless you use the cstyle auto-indenter. + + + +background-colorSTRING +Set the document background color. The value must be something +that can be evaluated to a valid color, for example "#ff0000". + + + +backspace-indentsBOOL +Turn backspace indenting on or off. + + + +block-selectionBOOL +Turn block selection on or off. + + + +bracket-highlight-colorSTRING +Set the color for the bracket highlight. The value must be +something that can be evaluated to a valid color, for example "#ff0000" + + + +current-line-colorSTRING +Set the color for the current line. The value must be +something that can be evaluated to a valid color, for example "#ff0000". + + + +dynamic-word-wrapBOOL +Turns dynamic word wrap on or off. + + + +eol | end-of-lineSTRING +Set the end of line mode. Valid settings are +unix, mac and dos + + + +encodingSTRING +Set the document encoding. The value must be a valid encoding +name, like utf-8. + + + +font-sizeINT +Set the point size of the document font. + + + +fontSTRING +Set the font of the document. The value should be a valid font +name, for example courier. + + + +icon-bar-colorSTRING +Set the icon bar color. The value must be something that can +be evaluated to a valid color, for example #ff0000. + + + +icon-borderBOOL +Set the display of the icon border on or off. + + + +folding-markersBOOL +Set the display of folding markers on or off. + + + +indent-modeSTRING +Set the auto-indentation mode. The options none, +normal, cstyle, csands, +python, xml are recognized. See the section + for details. + + + +indent-widthINT +Set the indentation width. + + + +keep-extra-spacesBOOL +Set wheather to keep extra spaces when calculating indentation width. + + + +keep-indent-profileBOOL +If enabled, prevents unindenting a block if at least one line +has no indentation. + + + +line-numbersBOOL +Set the display of line numbers on or off. + + + +mixed-indentBOOL +Set mixed indentation ala Emacs on or off. + + + +overwrite-modeBOOL +Set overwrite mode on or off. + + + +persistent-selectionBOOL +Set persistent selection on or off. + + + +remove-trailing-spaceBOOL +Set dynamic end of line cleanup on or off. + + + +replace-tabs-saveBOOL +Set tab->space conversion on save on or off. + + + +replace-tabsBOOL +Set dynamic tab->space conversion on or off. + + + +replace-trailing-space-saveBOOL +Set end of line cleanup on save on or off. + + + +schemeSTRING +Set the color scheme. The string must be the name of a color +scheme that exists in your configuration to have any effect. + + + +selection-colorSTRING +Set the selection color. The value must be something that can +be evaluated to a valid color, for example "#ff0000". + + + +show-tabsBOOL +Set the visual TAB character on or off. + + + +smart-homeBOOL +Set smart home navigation on or off. + + + +space-indentBOOL +Set indentation with spaces on or off. + + + +tab-indentsBOOL +Set the TAB key indentation on or off. + + + +tab-widthINT +Set the tab display width. + + + +undo-stepsINT +Set the number of undo steps to remember. + + + +word-wrap-columnINT +Set the hard word wrap width. + + + +word-wrap-marker-colorSTRING +Set the word wrap marker color. The value must be something +that can be evaluated to a valid color, for example "#ff0000". + + + +word-wrapBOOL +Set hard word wrapping on or off. + + + +wrap-cursorBOOL +Set cursor wrapping on or off. + + + + + + + + + diff --git a/doc/kate/fundamentals.docbook b/doc/kate/fundamentals.docbook new file mode 100644 index 000000000..e6beaac58 --- /dev/null +++ b/doc/kate/fundamentals.docbook @@ -0,0 +1,621 @@ + + + + + + + +The Fundamentals + + +If you have ever used a text editor, you will have no problem using +&kate;. In the next two sections, Starting +&kate; and in Working with +&kate;, we'll show you everything you need to get up and running +quickly. + + + +Starting &kate; + + +You can start &kate; from the K menu or from the +command line. + + + +From the Menu + +Open the &kde; program menu by clicking on the +big K icon on the toolbar at the bottom left of your +screen. This will raise the program menu. Move your +cursor up the menu to the Utilities +Editors menu item. A list +of available editors will appear. Choose +&kate;. + + + +Unless you configure &kate; not to, it will load the last files you +edited. See Configuring &kate; to learn +how to toggle this feature on and off. + + + + + +From the Command Line + + +You can start &kate; by typing its name on the command line. If you give +it a file name, as in the example below, it will open or create that +file. + + + + +%kate + + + + +If you have an active connection, and permission, you can take advantage +of &kde;'s network transparency to open files on the internet. + + + + +%kate + + + + +Command Line Options +&kate; accepts following command line options: + + + +kate + + +This lists the most basic options available at the command line. + + + + + +kate + + + +This lists the options available for changing the way &kate; interacts +with &Qt;. + + + + + +kate + + +This lists the options available for changing the way &kate; interacts +with &kde;. + + + + + +kate + name + + +Starts kate with the session name. The session is created +if it does not exist already. If a &kate; instance running the specified session +exists, the specified files are loaded in that instance. When used with the + option, an instance running this session will be used as +well. + + + + + +kate + URL + + +Causes &kate; to use and existing instance if there is one. If you want all +documents to open in one kate instance, you can add this option to the default +command in your kde application configuration, as well as create a shell alias +in your command intepreter if it supports that. + + + + + +kate + PID + + +Only reuses an instance with the specified PID (Process ID). Used with the + option. + + + + + +kate + encoding +URL +Uses the specified encoding for the document. + + + + +kate + line +URL +Navigates to the specified line after opening the document. + + + + +kate + column +URL +Navigates to the specified column after opening the document. + + + + +kate + +Reads the document content from STDIN. This +is similar to the common option used in many command line +programs, and allows you to pipe command output into &kate;. + + + +kate + +Since &kate; 2.5.1 this standard &kde; option is supported. +When used, the specified files are treated as temporary files and +deleted (if they are local files and you have sufficient permissions) when +closed, unless they are modified since they were opened. + + + +kate + + + +This lists all of the command line options. + + + + + +kate + + + +Lists &kate;'s authors in the terminal window. + + + + + +kate + + + +Lists version information for &Qt;, &kde;, and &kate;. + + + + + +kate + + + +Shows license information. + + + + + + + + +Drag and Drop + +&kate; uses the &kde; Drag and Drop protocol. Files may be dragged and +dropped onto &kate; from the Desktop, &konqueror; or some remote ftp +site opened in one of &konqueror;'s windows. + + + + + +Working with &kate; + +Quick Start will show you how to +toggle four simple options that will let you configure some of &kate;'s +more powerful features right away. +Shortcuts lays out some of the default keystroke +shortcuts for those who can't or don't want to use a mouse. + + + +Quick Start + + +This section will describe some of the items on the +Settings menu so that you can quickly configure +&kate; to work the way you want it. + + + When you start &kate; for the first time you'll see two windows +with white backgrounds. Above the two windows is a toolbar with the +usual labeled icons. And above that, a menubar. + + + +The left-hand window is a side bar. It combines the Documents +and Filesystem Browser windows. Switch between the two by clicking on the tabs +to the left of the window. + + +If you've started &kate; with a file, the right-hand window will show +the file you are editing and the Documents on the side bar will show the +name of the file. Use the Filesystem Browser window to open files. + + + +You can toggle the Documents and Filesystem Browser window on and off in +WindowTool Views +menu. This menu offers you your first glimpse into &kate;'s power and +flexibility. In this section we'll look at three items: + + + + + + + +Show/Hide Documents + + + + +Toggles the Documents on and off. If the Documents/Filesystem Browser window is +not open, &kate; launches the side bar as a separate, undocked, +window. To dock the window grab the two thin parallel lines above the +tabs by clicking on them with your &LMB; and holding the button +down. Drag the the window into &kate;'s editing window and release the +&LMB; when you have positioned the Documents/Filesystem Browser window as you +prefer. + + + + +If you have grabbed the two parallel lines successfully your mouse +pointer will turn into two crossed arrows as you drag. + + + + + + +Show/Hide +Filesystem Browser + + +Toggles the Filesystem Browser on and off. This menu item is the same as +Show Documents with one difference. Toggling +it on launches the window with the Filesystem Browser on top. + + + + + +Show/Hide +Terminal + + +Toggles a terminal emulator on and off at the bottom of &kate;'s +window. In other words, it gives you a command line within the +application. + + + + + + + +Shortcuts + + +Many of &kate;'s keystroke commands (shortcuts) are configurable by +way of the Settings menu. By default +&kate; honors the following key bindings. + + + + + + +Insert + +Toggle between Insert and Overwrite mode. When in insert mode the editor +will add any typed characters to the text and push any previously typed +data to the right of the text cursor. Overwrite mode causes the entry of +each character to eliminate the current character. + + +Left Arrow +Move the cursor one character to the left + + +Right Arrow + Move the cursor one character to the right + + +Up Arrow + Move the cursor up one line + + +Down Arrow + Move the cursor down one line + + +Page Up + Move the cursor up one page + + +Page Down +Move the cursor down one page + + +Backspace + Delete the character to the left of the cursor + + +Home + Move the cursor to the beginning of the line + + +End + Move the cursor to the end of the line + + +Delete +Delete the character to the right of the cursor (or any selected +text) + + +&Shift;Left Arrow + Mark text one character to the left + + +&Shift;Right Arrow + Mark text one character to the right + + +F1 + Help + + +&Shift;F1 +What's this? + + +&Ctrl;F + Find + + +F3 + Find again + + +&Ctrl;B +Set a Bookmark + + +&Ctrl;C + Copy the marked text to the clipboard. + + + +&Ctrl;N + New document + + +&Ctrl;P +Print + + + +&Ctrl;Q +Quit - close active copy of editor + + +&Ctrl;R + Replace + + +&Ctrl;S +Save your file. + + +&Ctrl;V + Paste. + + + +&Ctrl;X +Delete the marked text and copy it to the clipboard. + + +&Ctrl;Z +Undo + + +&Ctrl;&Shift;Z +Redo + + + + + + + + + +Using Sessions + +Sessions is how &kate; lets you keep more than one list of files and +GUI configuration around. You can have as many named sessions as you want, +and you can use unnamed or anonymous sessions for files you want to use only +once. Currently &kate; can save the list of open files, and the general window +configuration in the session, future versions of &kate; may add more features +that can be saved in sessions. With the introduction of sessions, &kate; also +allows you to open any number of instances of the application instead of just +one as it used to do as the default behavior. + +Sessions are supported in three areas: + + +Command line +options that lets you select and start sessions when launching +kate from the command line. + +The Sessions +menu that lets you switch, save, start and manage your +sessions +Configuration +options that lets you decide how sessions generally should +behave. + + + + +When starting a new session, the GUI configuration of Default +Session is loaded. To save window configuration in the default +session, you need to enable saving window configuration in the sessions +configuration page of the configuration dialog and then load the default +session, set up the window as desired and save the session again. + +When a named session is loaded, &kate; will display the session name at +the start of the window title, which then have the form +"Session Name: Document name or +&URL; - &kate;" + +When opening files on the command line with or if a session is selected using the +session chooser, the specified session is loaded prior to the files specified +on the command line. To open files from the commandline in a new, unnamed +session, configure kate to start a new session pr default in the session page of +the configuration dialog or use with an empty string: +''. + +Since &kate; 2.5.1 the PID of the current instance is +exported to the environment variable KATE_PID. When opening files +from the built in terminal Kate will automatically select the current instance +if nothing else is indicated on the command line. + + +Restoring old style &kate; behavior + +When you get used to using sessions you will hopefully see that they +provide a very simple and efficient tool for working in different areas. +However, if you prefer the old &kate; behavior (one instance opens all files), +you can easily achieve that by following this simple strategy: + + +Make kate allways start with the +parameter by adding that to the command in the application preferences, +and additionally using a shell alias. +Configure &kate; to load the last used session at startup. + +Configure &kate; to save the file list when closing a session. + +Load the default session once + + + + + + + + + +Getting Help + + + +With &kate; + + + +This manual + + +Offers detailed documentation on all menu commands, +configuration options, tools, dialogs, plugins &etc; as well as +descriptions of of the &kate; window, the editor and various concepts +used in the application. + +Press F1 or use the +Help +Contents menu topic to view this +manual. + + + + +What's This Help + +What's This help offers immediate help with single elements of +graphical windows, such as buttons or other window areas. + +We strive to provide What's This help for any elements for which +it makes sense. It is available throughout the configuration dialog, +and in many other dialogs as well. + +To employ What's This help, press +&Shift;F1 or use the +HelpWhat's +This menu item to enable What's This +mode. The cursor will turn into an arrow with a question mark, and you +can now click any element in the window to read the What's This help +for that element, if it is available. + + + + +Help Buttons in Dialogs + +Some dialogs have a Help Button. Pressing +it will start the &khelpcenter; and open the relevant +documentation. + + + + + + + +With Your Text Files + +&kate; does not (yet!) provide any means for reading document +related documentation. Depending on the file you are editing, you may +find the Built in +&konsole; helpful for viewing related &UNIX; manual pages or +info documentation, or you can use &konqueror;. + + + + + + diff --git a/doc/kate/highlighted.png b/doc/kate/highlighted.png new file mode 100644 index 000000000..ffb95ec48 Binary files /dev/null and b/doc/kate/highlighted.png differ diff --git a/doc/kate/highlighting.docbook b/doc/kate/highlighting.docbook new file mode 100644 index 000000000..76952d26a --- /dev/null +++ b/doc/kate/highlighting.docbook @@ -0,0 +1,931 @@ + + + + + + + +Working with Syntax Highlighting + + + +Overview + +Syntax Highlighting is what makes the editor automatically +display text in different styles/colors, depending on the function of +the string in relation to the purpose of the file. In program source +code for example, control statements may be rendered bold, while data +types and comments get different colors from the rest of the +text. This greatly enhances the readability of the text, and thus +helps the author to be more efficient and productive. + + + +A Perl function, rendered with syntax +highlighting. +A Perl function, rendered with syntax highlighting. + + + + + +The same Perl function, without +highlighting. +The same Perl function, without highlighting. + + +Of the two examples, which is easiest to read? + +&kate; comes with a flexible, configurable and capable system +for doing syntax highlighting, and the standard distribution provides +definitions for a wide range of programming, scripting and markup +languages and other text file formats. In addition you can +provide your own definitions in simple &XML; files. + +&kate; will automatically detect the right syntax rules when you +open a file, based on the &MIME; Type of the file, determined by its +extension, or, if it has none, the contents. Should you experience a +bad choice, you can manually set the syntax to use from the +DocumentsHighlight +Mode menu. + +The styles and colors used by each syntax highlight definition +can be configured using the Appearance page of the +Config Dialog, while the &MIME; Types +it should be used for, are handeled by the Highlight +page. + + +Syntax highlighting is there to enhance the readability of +correct text, but you cannot trust it to validate your text. Marking +text for syntax is difficult depending on the format you are using, +and in some cases the authors of the syntax rules will be proud if 98% +of text gets correctly rendered, though most often you need a rare +style to see the incorrect 2%. + + + +You can download updated or additional syntax highlight +definitions from the &kate; website by clicking the +Download button in the Highlight Page of the Config Dialog. + + + + + + +The &kate; Syntax Highlight System + +This section will discuss the &kate; syntax highlighting +mechanism in more detail. It is for you if you want to know about +it, or if you want to change or create syntax definitions. + + + +How it Works + +Whenever you open a file, one of the first things the &kate; +editor does is detect which syntax definition to use for the +file. While reading the text of the file, and while you type away in +it, the syntax highlighting system will analyze the text using the +rules defined by the syntax definition and mark in it where different +contexts and styles begin and end. + +When you type in the document, the new text is analyzed and marked on the +fly, so that if you delete a character that is marked as the beginning or end +of a context, the style of surrounding text changes accordingly. + +The syntax definitions used by the &kate; Syntax Highlighting System are +&XML; files, containing + +Rules for detecting the role of text, organized into context blocks +Keyword lists +Style Item definitions + + + +When analyzing the text, the detection rules are evaluated in +the order in which they are defined, and if the beginning of the +current string matches a rule, the related context is used. The start +point in the text is moved to the final point at which that rule +matched and a new loop of the rules begins, starting in the context +set by the matched rule. + + + + +Rules + +The detection rules are the heart of the highlighting detection +system. A rule is a string, character or regular expression against which +to match the text being analyzed. It contains information about which +style to use for the matching part of the text. It may switch the +working context of the system either to an explicitly mentioned +context or to the previous context used by the text. + +Rules are organized in context groups. A context group is used +for main text concepts within the format, for example quoted text +strings or comment blocks in program source code. This ensures that +the highlighting system does not need to loop through all rules when +it is not necessary, and that some character sequences in the text can +be treated differently depending on the current context. + + +Contexts may be generated dynamically to allow the usage of instance +specific data in rules. + + + + +Context Styles and Keywords + +In some programming languages, integer numbers are treated +differently than floating point ones by the compiler (the program that +converts the source code to a binary executable), and there may be +characters having a special meaning within a quoted string. In such +cases, it makes sense to render them differently from the surroundings +so that they are easy to identify while reading the text. So even if +they do not represent special contexts, they may be seen as such by +the syntax highlighting system, so that they can be marked for +different rendering. + +A syntax definition may contain as many styles as required to +cover the concepts of the format it is used for. + +In many formats, there are lists of words that represent a +specific concept. For example in programming languages, the control +statements is one concept, data type names another, and built in +functions of the language a third. The &kate; Syntax Highlighting +System can use such lists to detect and mark words in the text to +emphasize concepts of the text formats. + + + + +Default Styles + +If you open a C++ source file, a &Java; source file and an +HTML document in &kate;, you will see that even +though the formats are different, and thus different words are chosen +for special treatment, the colors used are the same. This is because +&kate; has a predefined list of Default Styles which are employed by +the individual syntax definitions. + +This makes it easy to recognize similar concepts in different +text formats. For example comments are present in almost any +programming, scripting or markup language, and when they are rendered +using the same style in all languages, you do not have to stop and +think to identify them within the text. + + +All styles in a syntax definition use one of the default +styles. A few syntax definitions use more styles that there are +defaults, so if you use a format often, it may be worth launching the +configuration dialog to see if some concepts are using the same +style. For example there is only one default style for strings, but as +the Perl programming language operates with two types of strings, you +can enhance the highlighting by configuring those to be slightly +different. All available default styles +will be explained later. + + + + + + + +The Highlight Definition &XML; Format + + +Overview + +This section is an overview of the Highlight Definition &XML; +format. Based on a small example it will describe the main components +and their meaning and usage. The next section will go into detail with +the highlight detection rules. + +The formal definition, aka the DTD is stored +in the file language.dtd which should be +installed on your system in the folder +$KDEDIR/share/apps/katepart/syntax. + + + +Main sections of &kate; Highlight Definition files + + +A highlighting file contains a header that sets the XML version and the doctype: + + +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE language SYSTEM "language.dtd"> + + + + + +The root of the definition file is the element language. +Available attributes are: + + +Required attributes: +name sets the name of the language. It appears in the menus and dialogs afterwards. +section specifies the category. +extensions defines file extensions, like "*.cpp;*.h" + +Optional attributes: +mimetype associates files &MIME; Type based. +version specifies the current version of the definition file. +kateversion specifies the latest supported &kate; version. +casesensitive defines, whether the keywords are casesensitiv or not. +priority is necessary if another highlight definition file uses the same extensions. The higher priority will win. +author contains the name of the author and his email-address. +license contains the license, usually LGPL, Artistic, GPL and others. +hidden defines, whether the name should appear in &kate;'s menus. +So the next line may look like this: + +<language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" /> + + + + + + +Next comes the highlighting element, which +contains the optional element list and the required +elements contexts and itemDatas. + +list elements contain a list of keywords. In +this case the keywords are class and const. +You can add as many lists as you need. +The contexts element contains all contexts. +The first context is by default the start of the highlighting. There are +two rules in the context Normal Text, which match +the list of keywords with the name somename and a +rule that detects a quote and switches the context to string. +To learn more about rules read the next chapter. +The third part is the itemDatas element. It +contains all color and font styles needed by the contexts and rules. +In this example, the itemData Normal Text, +String and Keyword are used. + + + <highlighting> + <list name="somename"> + <item> class </item> + <item> const </item> + </list> + <contexts> + <context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" > + <keyword attribute="Keyword" context="#stay" String="somename" /> + <DetectChar attribute="String" context="string" char="&quot;" /> + </context> + <context attribute="String" lineEndContext="#stay" name="string" > + <DetectChar attribute="String" context="#pop" char="&quot;" /> + </context> + </contexts> + <itemDatas> + <itemData name="Normal Text" defStyleNum="dsNormal" /> + <itemData name="Keyword" defStyleNum="dsKeyword" /> + <itemData name="String" defStyleNum="dsString" /> + </itemDatas> + </highlighting> + + + + + +The last part of a highlight definition is the optional +general section. It may contain information +about keywords, code folding, comments and indentation. + + +The comment section defines with what +string a single line comment is introduced. You also can define a +multiline comments using multiLine with the +additional attribute end. This is used if the +user presses the corresponding shortcut for comment/uncomment. +The keywords section defines whether +keyword lists are casesensitive or not. Other attributes will be +explained later. + + <general> + <comments> + <comment name="singleLine" start="#"/> + </comments> + <keywords casesensitive="1"/> + </general> +</language> + + + + + + + + + + +The Sections in Detail +This part will describe all available attributes for contexts, +itemDatas, keywords, comments, code folding and indentation. + + + +The element context belongs into the group +contexts. A context itself defines context specific +rules like what should happen if the highlight system reaches the end of a +line. Available attributes are: + + + +name the context name. Rules will use this name +to specify the context to switch to if the rule matches. +lineEndContext defines the context the highlight +system switches to if it reaches the end of a line. This may either be a name +of another context, #stay to not switch the context +(eg. do nothing) or #pop which will cause to leave this +context. It is possible to use for example #pop#pop#pop +to pop three times. +lineBeginContext defines the context if a begin +of a line is encountered. Default: #stay. +fallthrough defines if the highlight system switches +to the context specified in fallthroughContext if no rule matches. +Default: false. +fallthroughContext specifies the next context +if no rule matches. +dynamic if true, the context +remembers strings/placeholders saved by dynamic rules. This is needed for HERE +documents for example. Default: false. + + + + + +The element itemData is in the group +itemDatas. It defines the font style and colors. +So it is possible to define your own styles and colors, however we +recommend to stick to the default styles if possible so that the user +will always see the same colors used in different languages. Though, +sometimes there is no other way and it is necessary to change color +and font attributes. The attributes name and defStyleNum are required, +the other optional. Available attributes are: + + +name sets the name of the itemData. +Contexts and rules will use this name in their attribute +attribute to reference an itemData. +defStyleNum defines which default style to use. +Available default styles are explained in detail later. +color defines a color. Valid formats are +'#rrggbb' or '#rgb'. +selColor defines the selection color. +italic if true, the text will be italic. +bold if true, the text will be bold. +underline if true, the text will be underlined. +strikeout if true, the text will be stroked out. + + + + + +The element keywords in the group +general defines keyword properties. Available attributes are: + + +casesensitive may be true +or false. If true, all keywords +are matched casesensitive +weakDeliminator is a list of characters that +do not act as word delimiters. For example the dot '.' +is a word delimiter. Assume a keyword in a list contains +a dot, it will only match if you specify the dot as a weak delimiter. +additionalDeliminator defines additional delimiters. +wordWrapDeliminator defines characters after which a +line wrap may occur. +Default delimiters and word wrap delimiters are the characters +.():!+,-<=>%&*/;?[]^{|}~\, space (' ') +and tabulator ('\t'). + + + + + +The element comment in the group +comments defines comment properties which are used +for ToolsComment and +ToolsUncomment. +Available attributes are: + + +name is either singleLine +or multiLine. If you choose multiLine +the attributes end and region are +required. +start defines the string used to start a comment. +In C++ this would be "/*". +end defines the string used to close a comment. +In C++ this would be "*/". +region should be the name of the the foldable +multiline comment. Assume you have beginRegion="Comment" +... endRegion="Comment" in your rules, you should use +region="Comment". This way uncomment works even if you +do not select all the text of the multiline comment. The cursor only must be +in the multiline comment. + + + + + +The element folding in the group +general defines code folding properties. +Available attributes are: + + +indentationsensitive if true, the code folding markers +will be added indentation based, like in the scripting language Python. Usually you +do not need to set it, as it defaults to false. + + + + + +The element indentation in the group +general defines which indenter will be used, however we strongly +recommend to omit this element, as the indenter usually will be set by either defining +a File Type or by adding a mode line to the text file. If you specify an indenter though, +you will force a specific indentation on the user, which he might not like at all. +Available attributes are: + + +mode is the name of the indenter. Available indenters +right now are: normal, cstyle, csands, xml, python and +varindent. + + + + + + + + + + +Available Default Styles +Default Styles were already explained, +as a short summary: Default styles are predefined font and color styles. + + +So here only the list of available default styles: + +dsNormal, used for normal text. +dsKeyword, used for keywords. +dsDataType, used for data types. +dsDecVal, used for decimal values. +dsBaseN, used for values with a base other than 10. +dsFloat, used for float values. +dsChar, used for a character. +dsString, used for strings. +dsComment, used for comments. +dsOthers, used for 'other' things. +dsAlert, used for warning messages. +dsFunction, used for function calls. +dsRegionMarker, used for region markers. +dsError, used for error highlighting and wrong syntax. + + + + + + + + + +Highlight Detection Rules + +This section describes the syntax detection rules. + +Each rule can match zero or more characters at the beginning of +the string they are test against. If the rule matches, the matching +characters are assigned the style or attribute +defined by the rule, and a rule may ask that the current context is +switched. + +A rule looks like this: + +<RuleName attribute="(identifier)" context="(identifier)" [rule specific attributes] /> + +The attribute identifies the style to use +for matched characters by name, and the context +identifies the context to use from here. + +The context can be identified by: + + + +An identifier, which is the name of the other +context. + + +An order telling the engine to stay in the +current context (#stay), or to pop back to a +previous context used in the string (#pop). +To go back more steps, the #pop keyword can be repeated: +#pop#pop#pop + + + +Some rules can have child rules which are +then evaluated only if the parent rule matched. The entire matched +string will be given the attribute defined by the parent rule. A rule +with child rules looks like this: + + +<RuleName (attributes)> + <ChildRuleName (attributes) /> + ... +</RuleName> + + + +Rule specific attributes varies and are described in the +following sections. + + + +Common attributes +All rules have the following attributes in common and are +available whenever (common attributes) appears. +attribute and context +are required attributes, all others are optional. + + + +attribute: An attribute maps to a defined itemData. + + +context: Specify the context to which the highlighting system switches if the rule matches. + + +beginRegion: Start a code folding block. Default: unset. + + +endRegion: Close a code folding block. Default: unset. + + +lookAhead: If true, the +highlighting system will not process the matches length. +Default: false. + + +firstNonSpace: Match only, if the string is +the first non-whitespace in the line. Default: false. + + +column: Match only, if the column matches. Default: unset. + + + + +Dynamic rules +Some rules allow the optional attribute dynamic +of type boolean that defaults to false. If dynamic is +true, a rule can use placeholders representing the text +matched by a regular expression rule that switched to the +current context in its string or +char attributes. In a string, +the placeholder %N (where N is a number) will be +replaced with the corresponding capture N +from the calling regular expression. In a +char the placeholer must be a number +N and it will be replaced with the first character of +the corresponding capture N from the calling regular +expression. Whenever a rule allows this attribute it will contain a +(dynamic). + + +dynamic: may be (true|false). + + + + +The Rules in Detail + + + +DetectChar + +Detect a single specific character. Commonly used for example to +find the ends of quoted strings. +<DetectChar char="(character)" (common attributes) (dynamic) /> +The char attribute defines the character +to match. + + + + +Detect2Chars + +Detect two specific characters in a defined order. +<Detect2Chars char="(character)" char1="(character)" (common attributes) (dynamic) /> +The char attribute defines the first character to match, +char1 the second. + + + + +AnyChar + +Detect one character of a set of specified characters. +<AnyChar String="(string)" (common attributes) /> +The String attribute defines the set of +characters. + + + + +StringDetect + +Detect an exact string. +<StringDetect String="(string)" [insensitive="true|false"] (common attributes) (dynamic) /> +The String attribute defines the string +to match. The insensitive attribute defaults to +false and is passed to the string comparison +function. If the value is true insensitive +comparing is used. + + + + +RegExpr + +Matches against a regular expression. +<RegExpr String="(string)" [insensitive="true|false"] [minimal="true|false"] (common attributes) (dynamic) /> +The String attribute defines the regular +expression. +insensitive defaults to +false and is passed to the regular expression +engine. +minimal defaults to +false and is passed to the regular expression +engine. +Because the rules are always matched against the beginning of +the current string, a regular expression starting with a caret +(^) indicates that the rule should only be +matched against the start of a line. +See Regular Expressions +for more information on those. + + + + +keyword + +Detect a keyword from a specified list. +<keyword String="(list name)" (common attributes) /> +The String attribute identifies the +keyword list by name. A list with that name must exist. + + + + +Int + +Detect an integer number. +<Int (common attributes) (dynamic) /> +This rule has no specific attributes. Child rules are typically +used to detect combinations of L and +U after the number, indicating the integer type +in program code. Actually all rules are allowed as child rules, though, +the DTD only allowes the child rule StringDetect. +The following example matches integer numbers follows by the character 'L'. + +<Int attribute="Decimal" context="#stay" > + <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/> +</Int> + + + + + + +Float + +Detect a floating point number. +<Float (common attributes) /> +This rule has no specific attributes. AnyChar is +allowed as a child rules and typically used to detect combinations, see rule +Int for reference. + + + + +HlCOct + +Detect an octal point number representation. +<HlCOct (common attributes) /> +This rule has no specific attributes. + + + + +HlCHex + +Detect a hexadecimal number representation. +<HlCHex (common attributes) /> +This rule has no specific attributes. + + + + +HlCStringChar + +Detect an escaped character. +<HlCStringChar (common attributes) /> +This rule has no specific attributes. + +It matches literal representations of characters commonly used in +program code, for example \n +(newline) or \t (TAB). + +The following characters will match if they follow a backslash +(\): +abefnrtv"'?\. Additionally, escaped +hexadecimal numbers like for example \xff and +escaped octal numbers, for example \033 will +match. + + + + + +HlCChar + +Detect an C character. +<HlCChar (common attributes) /> +This rule has no specific attributes. + +It matches C characters enclosed in a tick (Example: 'c'). +So in the ticks may be a simple character or an escaped character. +See HlCStringChar for matched escaped character sequences. + + + + + +RangeDetect + +Detect a string with defined start and end characters. +<RangeDetect char="(character)" char1="(character)" (common attributes) /> +char defines the character starting the range, +char1 the character ending the range. +Usefull to detect for example small quoted strings and the like, but +note that since the highlighting engine works on one line at a time, this +will not find strings spanning over a line break. + + + + +LineContinue + +Matches at end of line. +<LineContinue (common attributes) /> +This rule has no specific attributes. +This rule is useful for switching context at end of line, if the last +character is a backslash ('\'). This is needed for +example in C/C++ to continue macros or strings. + + + + +IncludeRules + +Include rules from another context or language/file. +<IncludeRules context="contextlink" [includeAttrib="true|false"] /> + +The context attribute defines which context to include. +If it a simple string it includes all defined rules into the current context, example: +<IncludeRules context="anotherContext" /> + + +If the string begins with ## the highlight system +will look for another language definition with the given name, example: +<IncludeRules context="##C++" /> +If includeAttrib attribute is +true, change the destination attribute to the one of +the source. This is required to make for example commenting work, if text +matched by the included context is a different highlight than the host +context. + + + + + + +DetectSpaces + +Detect whitespaces. +<DetectSpaces (common attributes) /> + +This rule has no specific attributes. +Use this rule if you know that there can several whitespaces ahead, +for example in the beginning of indented lines. This rule will skip all +whitespace at once, instead of testing multiple rules and skipping one at the +time due to no match. + + + + + +DetectIdentifier + +Detect identifier strings (as a regular expression: [a-zA-Z_][a-zA-Z0-9_]*). +<DetectIdentifier (common attributes) /> + +This rule has no specific attributes. +Use this rule to skip a string of word characters at once, rather than +testing with multiple rules and skipping one at the time due to no match. + + + + + + + +Tips & Tricks + + +Once you have understood how the context switching works it will be +easy to write highlight definitions. Though you should carefully check what +rule you choose in what situation. Regular expressions are very mighty, but +they are slow compared to the other rules. So you may consider the following +tips. + + + +If you only match two characters use Detect2Chars +instead of StringDetect. The same applies to +DetectChar. + + +Regular expressions are easy to use but often there is another much +faster way to achieve the same result. Consider you only want to match +the character '#' if it is the first character in the +line. A regular expression based solution would look like this: +<RegExpr attribute="Macro" context="macro" String="^\s*#" /> +You can achieve the same much faster in using: +<DetectChar attribute="Macro" context="macro" char="#" firstNonSpace="true" /> +If you want to match the regular expression '^#' you +can still use DetectChar with the attribute column="0". +The attribute column counts character based, so a tabulator still is only one character. + + + +You can switch contexts without processing characters. Assume that you +want to switch context when you meet the string */, but +need to process that string in the next context. The below rule will match, and +the lookAhead attribute will cause the highlighter to +keep the matched string for the next context. +<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" /> + + + +Use DetectSpaces if you know that many whitespaces occur. + + +Use DetectIdentifier instead of the regular expression '[a-zA-Z_]\w*'. + + +Use default styles whenever you can. This way the user will find a familiar environment. + + +Look into other XML-files to see how other people implement tricky rules. + + +You can validate every XML file by using the command +xmllint --dtdvalid language.dtd mySyntax.xml. + + +If you repeat complex regular expression very often you can use +ENTITIES. Example: + +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE language SYSTEM "language.dtd" +[ + <!ENTITY myref "[A-Za-z_:][\w.:_-]*"> +]> + +Now you can use &myref; instead of the regular +expression. + + + + + + + diff --git a/doc/kate/index.docbook b/doc/kate/index.docbook new file mode 100644 index 000000000..fe409a83d --- /dev/null +++ b/doc/kate/index.docbook @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + +]> + + +The &kate; Handbook + + + +&Anders.Lund; &Anders.Lund.mail; +&Seth.Rothberg; &Seth.Rothberg.mail; +&Dominik.Haumann; &Dominik.Haumann.mail; + + + + +2000 +2001 +&Seth.Rothberg; + + +200220032005 +&Anders.Lund; + + +2005 +&Dominik.Haumann; + + +&FDLNotice; + +2005-12-29 +2.5.0 + + +&kate; is a programmer's text editor for &kde; 2.2 and above. + +This handbook documents &kate; Version 2.5.0 + + + +KDE +kdebase +Kate +text +editor +programmer +programming +projects +MDI +Multi +Document +Interface +terminal +console + + + + + +Introduction + + +Welcome to &kate;, a programmer's text editor for &kde; version 2.2 and +above. Some of &kate;'s many features include configurable syntax +highlighting for languages ranging from C and C++ to +HTML to bash scripts, the ability to create and +maintain projects, a multiple document interface +(MDI), and a self-contained terminal emulator. + + + +But &kate; is more than a programmer's editor. Its ability to open +several files at once makes it ideal for editing &UNIX;'s many +configuration files. This document was written in &kate;. + + + + + +Editing this manual... + + + + + +&fundamentals-chapter; + +&mdi-chapter; + +&part-chapter; + +&plugins-chapter; + +&advanced-chapter; + +&menu-chapter; + +&configuring-chapter; + + + +Credits and License + + +&kate;. Program copyright 2000, 2001, 2002 - 2005 by the &kate; developer team. + + + +The &kate; team: + +&Christoph.Cullmann; &Christoph.Cullmann.mail; +Project Manager & Core Developer + + +&Anders.Lund; &Anders.Lund.mail; +Core Developer, Perl syntax highlighting, +documentation + + +&Joseph.Wenninger; &Joseph.Wenninger.mail; +Core Developer, syntax highlighting + + +Michael Bartl michael.bartl1@chello.at +Core Developer + + +Phlip phlip_cpp@my-deja.com +The project compiler + + +&Waldo.Bastian; &Waldo.Bastian.mail; +The cool buffer system + + +Matt Newell newellm@proaxis.com +Testing... + + +Michael McCallum gholam@xtra.co.nz +Core Developer + + +Jochen Wilhemly digisnap@cs.tu-berlin.de +KWrite Author + + +&Michael.Koch; &Michael.Koch.mail; +KWrite port to KParts + + +Christian Gebauer gebauer@bigfoot.com +Unspecified + + +&Simon.Hausmann; &Simon.Hausmann.mail; +Unspecified + + +Glen Parker glenebob@nwlink.com +KWrite Undo History, KSpell integration + + +Scott Manson sdmanson@alltel.net +KWrite XML syntax highlighting support + + +&John.Firebaugh; &John.Firebaugh.mail; +Various Patches + + +&Dominik.Haumann; &Dominik.Haumann.mail; +Developer, Highlight wizard + + + + +Many other people have contributed: + +Matteo Merli merlim@libero.it +Highlighting for RPM Spec-Files, Diff and more + + +Rocky Scaletta rocky@purdue.edu +Highlighting for VHDL + + +Yury Lebedev +Highlighting for SQL + + +Chris Ross +Highlighting for Ferite + + +Nick Roux +Highlighting for ILERPG + + +John Firebaugh +Highlighting for Java, and much more + + +Carsten Niehaus +Highlighting for LaTeX + + +Per Wigren +Highlighting for Makefiles, Python + + +Jan Fritz +Highlighting for Python + + +&Daniel.Naber; +Small bugfixes, XML plugin + + + +Documentation copyright 2000,2001 &Seth.Rothberg; +&Seth.Rothberg.mail; + +Documentation copyright 2002, 2003, 2005 &Anders.Lund; +&Anders.Lund.mail; + + + +&underFDL; +&underGPL; + + + +&highlighting-appendix; + +®exp-appendix; + + +Installation + +&install.intro.documentation; + +&install.compile.documentation; + + + +&documentation.index; + + + + + + diff --git a/doc/kate/kate.png b/doc/kate/kate.png new file mode 100644 index 000000000..dc1ee4c40 Binary files /dev/null and b/doc/kate/kate.png differ diff --git a/doc/kate/man-kate.1.docbook b/doc/kate/man-kate.1.docbook new file mode 100644 index 000000000..80899a4fb --- /dev/null +++ b/doc/kate/man-kate.1.docbook @@ -0,0 +1,165 @@ + + +]> + + + +KDE User's Manual +&Lauri.Watts; &Lauri.Watts.mail; +June 07, 2005 +K Desktop Environment + + + +kate +1 + + + +kate +Advanced text editor for &kde; + + + + +kate + +name + + +pid + +name + +line + + column + +KDE Generic Options +Qt Generic Options + + + + +Description +&kate; is the &kde; Advanced Text Editor. +&kate; also provides the editor part for various applications, under +the name &kwrite;. +Some of &kate;'s many features include configurable syntax +highlighting for languages ranging from C and C++ to +HTML to bash scripts, the ability to create and +maintain projects, a multiple document interface +(MDI), and a self-contained terminal emulator. + + + +But &kate; is more than a programmer's editor. Its ability to open +several files at once makes it ideal for editing &UNIX;'s many +configuration files. This document was written in &kate;. + + + + + + +Options + + + +, name + +Start &kate; with a given session. + + + +Use an already running &kate; + + + +pid +Only try to reuse kate instance with this +pid + + + +name +Set encoding for the file to openYou can use +this to force a file opened in utf-8 format, for instance. (The command +iconv -l provides a list of encodings, which may be +helpful to you.) + + + line +Navigate to this line + + + +column +Navigate to this column + + + +Read the contents of +stdin + + + + + + +See Also + +kwrite(1) + +More detailed user documentation is available from help:/kate +(either enter this URL into &konqueror;, or run +khelpcenter +help:/kate). + +There is also further information available at the &kate; website. + + + +Examples + +To open a file named source.cpp at column 15, +line 25, in an existing &kate; window, you could use: +kate source.cpp + +If you have an active internet connection, you can take advantage of +&kde;'s network transparency to open a file from an ftp site. If you do not +have write permission on the remote server, the file will be opened read +only and you will be prompted for a local filename to save to if you make +changes. If you do have write permission, changes will be saved +transparently over the network. +kate + + + + + + + + +Authors +The maintainer of &kate; is &Christoph.Cullmann; +&Christoph.Cullmann.mail;. A comprehensive list of authors and contributors +is available in the complete user manual mentioned above. + + + diff --git a/doc/kate/mdi.docbook b/doc/kate/mdi.docbook new file mode 100644 index 000000000..a6c6854db --- /dev/null +++ b/doc/kate/mdi.docbook @@ -0,0 +1,266 @@ + + + +&Anders.Lund; &Anders.Lund.mail; + + + +Working With the &kate; <acronym>MDI</acronym> + + +Overview + +Window, View, Document, Frame, Editor... What are they all in +the terminology of &kate;, and how do you get the most out of it? This +chapter will explain all of that, and even more. + + + +The Main Window + +Main window +The &kate; Main Window is a standard &kde; application window, +with the addition of side bars containing tool views. It has a +Menubar with all the common menus, and some more, and a toolbar +providing access to commonly used commands. + +The most important part of the window is the Editing Area, by +default displaying a single text editor component, in which you can +work with your documents. + +The docking capabilities of the window is used for the tool +windows: + + +The File List +The Filesystem +Browser +The Built in Terminal Emulator + + +And possibly other tool views, for example provided by +plugins. + +Tool views can be positioned in any sidebar, to move a tool right click +its sidebar button and select from the &RMB; menu + +A tool view can be marked as persistent in the &RMB; +menu for its sidebar button. The sidebar can contain +more tools at one time so that when a tool is persistant other tools can be +shown simultaneously. + + + + + + + + +The Editor area + +Editing Area +&kate; is capable of having more than one document open at the +same time, and also of splitting the editing area into any number of +frames, similar to how for example &konqueror; or the popular +emacs text editor works. This way you can +view several documents at the same time, or more instances of the same +document, handy for example if your document contains definitions in +the top that you want to see often for reference. Or you could view a +program source header in one frame, while editing the implementation +file in another. + +When a document is available in more than one editor, changes +made in one editor will immediately be reflected in the others as +well. This includes changing the text as well as selecting +text. Search operations or cursor movement is only reflected in the +current editor. + +It is currently not possible to have more instances of the same +document open in the sense that one instance will be edited while the +other will not. + +When splitting an editor into two frames, it is divided into two +equally sized frames, both displaying the current document of that +editor. The new frame will be at the bottom (in the case of a +horizontal split) or at the right (for a vertical split). The new +frame gets the focus, which is visualized by a small green led in the +focused frame. + + + + +The Document List + +File list +The file list displays a list of all documents currently open in +&kate;. Modified files will have a small floppy +disk icon on their left to indicate that state. + +If two or more files with the same name (located in different +folders) are open, the names of the second will be prepended +<2> and so on. The tool-tip for the file will +display its full name including the path, allowing you to choose the +desired one. To display a document in the currently +active frame, click the document name in the list. + +You can sort the list in a few different ways by rightclicking the +list and selecting from the Sort By menu. + +The options are + + + +Opening Order +Lists the documents in the order of opening + + + +Document Name +Lists the documents alphabetically by their name. + + + +URL +Lists the documents alphabetically by URL. + + + + + + +The document list will pr default visualize your history by shading the +entries for the most recent documents with a background color. If the document +was edited, an extra color is blended in. The most recent document has the +strongest color, so that you can easily find the documents you are working on. +This feature can be disabled in +The Document List Page +of the configuration dialog. + +The default location in the &kate; window is to the left of the +editing area. + + + +The Filesystem Browser + +Filesystem Browser +The Filesystem Browser is a folder viewer, allowing you to open +files from a displayed folder in the current frame. + +From top down, the Filesystem Browser consist of the following +elements: + + + +A Toolbar + +This contains standard navigations tool buttons: + + +Home +Pressing it will cause the folder view to cd to your home folder. + + +Up +This will cause the folder view to cd to the immediate parent of the currently displayed +folder if possible. + + +Back +Causes the folder view to cd to the previously displayed folder in the history. +This button is disabled, if there is no previous item. + + +Forward +Causes the folder view to cd to the next folder in the history. +This button is disabled, if there is no next folder. + + +Sync +This button will cause the folder view to +cd to the folder of the currently active +document if possible. This button is disabled, if the active document +is a new, unsaved file, or the folder in which it resides can not +be decided. + + + + + + + +A &URL; entry + +Here you can type the path of a folder to browse. The &URL; +entry maintains a list of previously typed paths. To choose one use +the arrow button to the right of the entry. +The &URL; entry has folder auto-completion. The completion +method can be set using the &RMB; menu of the text +entry. + + + + +A Folder View +This is a standard &kde; folder view. + + + +A Filter Entry + +The Filter entry allows you to enter a filter for the files +displayed in the folder view. The filter uses standard globs; patterns +must be separated by white space. Example: *.cpp *.h +*.moc +To display all files, enter a single asterisk +*. +The filter entry saves the last 10 filters entered between +sessions, to use one, press the arrow button on the right of the entry +and select the desired filter string. + + + + + + + + + +The Built in Terminal Emulator + +Terminal emulator +The built in Terminal Emulator is a copy of the &kde; &konsole; +terminal application, for your convenience. It is available from the +SettingsShow Terminal +Emulator menu item or by pressing the F7 key, and will get the focus +whenever displayed. Additionally, if the Sync &konsole; with +active document option is enabled, it will +change into the directory of the current document if +possible when it is displayed, or when the current document +changes. + +The default location in the &kate; window is at the bottom, +below the editing area. + +You can configure the &konsole; using its &RMB; menu, for more +information, see the &konsole; manual. + + + + +External Tools + +In the Tools menu you will find a submenu labeled +External Tools. These tools invokes external +applications with data related to the current document, for example its URL, +directory, text or selection. + +External tools are user defined, you can add, edit or remove tools using +the External Tools configuration panel. + + + + + diff --git a/doc/kate/menus.docbook b/doc/kate/menus.docbook new file mode 100644 index 000000000..26ae7551e --- /dev/null +++ b/doc/kate/menus.docbook @@ -0,0 +1,1438 @@ + + + + + + + +Menu Entries + + +The <guimenu>File</guimenu> Menu + + + + + + + +&Ctrl;N + +File +New + + + + +This command starts a new document in the editing +window. In the Documents list on the left the new file +is named Untitled. + + + + + + + + + +&Ctrl;O + +File +Open... + + + +Launches &kde;'s open file dialog box to let you open one or more files. + + + + + + + + + +File +Open Recent + + + + +This command allows you to open a file from a submenu +that contains a list of recently edited files. + + + + + + + + +File +Open With + + + + +This submenu presents a list of applications known to handle the mime type +of your current document. Activating an entry will open the current document +with that application. +In addition, a entry Other... command launches +the open with dialog box that allows you to select another application +to open the active file. Your file will still be open in &kate;. + + + + + + + + + +&Ctrl;S + +File +Save + + + + +This command saves your file. Use it often. If the file is +Untitled then +Save becomes +Save As. + + + + + + + + +File +Save As... + + + + +Name and rename files with this command. +It launches the save file dialog box. This dialog works just as +the open file dialog box does. You can use it to navigate through +your file system, preview existing files, or filter your file +view with file masks. + + + +Type the name you want to give the file you are saving in the +Location combo box and press the +OK button. + + + + + + + + + +&Ctrl;L + +File +Save All + + + + +This command saves all modified open files. + + + + + + + + + +F5 + +File +Reload + + + + +Reloads the active file. This command is +useful if another program or process has changed the file while you have +it open in &kate; + + + + + + + + + +&Ctrl;P + +File +Print... + + + + +Print the active file. + + + + + + + +File +Export as HTML... + + + + +Export your file in HTML format so your document can be viewed as a +web page. + + + + + + + +File +Mail... + + + + +Open your mail client and attach the file in the mail. + + + + + + + + + +&Ctrl;W + +File +Close + + + + +Close the active file with this command. If you +have made unsaved changes, you will be prompted to save +the file before &kate; closes it. + + + + + + + + +File +Close All + + + + +This command closes all the files you have open +in &kate;. + + + + + + + + + +&Ctrl;Q + +File +Quit + + + + +This command closes &kate; and any files you were +editing. If you have made unsaved changes to any of the files you were +editing, you will be prompted to save them. + + + + + + + +The <guimenu>Edit</guimenu> Menu +The Edit menu contains a host of commands, +all to work with the currently active document. + + +Menu Entries + + + + +&Ctrl;Z +Edit +Undo + + + +Undo the last editing command (typing, copying, cutting etc.) +If grouped undo is enabled, this may undo several editing commands of the same type, like typing in characters. + + + + + + + +&Ctrl;&Shift;Z +Edit +Redo + + + +Redo the last undo step. + + + + + + + +&Ctrl;X +Edit +Cut + + + +Removes selected text if any, and places a copy of the removed text in the clipboard. + + + + + + + +&Ctrl;C +Edit +Copy + + + +Copies selected text, if any, to the clipboard. + + + + + + + +Edit +Copy as HTML + + + +Copies selected text with the syntax highlight as HTML text. + + + + + + + +&Ctrl;V +Edit +Paste + + + +Copies the first item in the clipboard into the editor at cursor position. +If Overwrite Selection is enabled, the pasted text will overwrite the selection, if any. + + + + + + + +&Ctrl;A +Edit +Select All + + + +Selects all text in the editor. + + + + + + + +&Ctrl;&Shift;A +Edit +Deselect + + + +Deselects the selected text in the editor if any. + + + + + + + +&Ctrl;Shift +B +Edit +Block Selection Mode + + + +Toggles Selection Mode. When the Selection Mode is BLOCK, you can make vertical selections, +ie select column 5 to 10 in lines 9 to 15. +The status bar shows the current state of the Selection Mode, either NORM or BLK. + + + + + + + +&Ctrl;F +Edit +Find... + + + +Launch the Find Dialog to allow you to search for text in the edited document. + + + + + + + +F3 +Edit +Find Next + + + +Go to the nearest downwards match of the last text or regular expression searched for, starting from cursor position + + + + + + + +&Shift;F3 +Edit +Find Previous + + + +Go to the nearest upwards match of the last text or regular expression searched for, starting from cursor position + + + + + + + +&Ctrl;R +Edit +Replace... + + + +Launch the Replace Dialog to replace one or more instances of a defined text with something else. + + + + + + + +&Ctrl;G +Edit +Go to line... + + + +Launches the Go To Line Dialog, allowing you to enter the number of a line to find in +the document + + + + + + + + +The <guimenu>Document</guimenu> Menu +The Document menu provides a menu entry for each open document. +Clicking one of these will bring the requested document to focus. If you have +multiple frames, an editor for that document will be displayed in the currently +active frame. +In addition, commands to browse your open documents are provided: + +Menu items + + + + + +&Alt;Left +Document +Back + + + +This will bring the previous document in the stack in focus. If you have +multiple frames, an editor for the document will be displayed in the currently +active frame. The order is the order in which documents were +opened, rather than a logical history. This behavior may change in future +versions of &kate;. + + + + + + + +&Alt;Right +Document +Forward + + + +This will bring the next document in the stack in focus. If you have +multiple frames, an editor for the document will be displayed in the currently +active frame. +The order is the order in which the documents were opened, +rather than a logical history. This behavior may change in future versions of +&kate;. + + + + + + + +The <guimenu>View</guimenu> menu + +The View menu allows you to manage settings +specific to the active editor, and to manage frames. + + +Menu Items + + +F7 +ViewSwitch to Command Line + +This command will toggle the display of the +built in command line. + + + + +ViewSchema + +This menu lists the available schemas. You can change the schema +for the current view here, to change the default schema you need to +use the config dialog + + + + +F10 + +ViewDynamic Word Wrap + +Toggles dynamic word wrap in the current view. Dynamic word +wrap makes all the text in a view visible without the need for horizontal +scrolling by rendering one actual line on more visual lines as needed. + + + + +ViewShow/Hide Static Word +Wrap Marker +Toggles the display of a vertical line indicating the position +of the wrap width as configured in the config dialog. This +feature requires that you use a true fixed-width font. + + + + + + + +F6 +View +Show/Hide Icon Border + + + +This is a toggle item. Setting it on checked will make the Icon Border +visible in the left side of the active editor, and vice versa. + + + + + + + +F11 +View +Show/Hide Line Numbers + + + +This is a toggle Item. Setting it on checked will make a pane displaying +the line numbers of the document visible in the left border of the active editor, +and vice versa. + + + + +ViewShow/Hide Scrollbar +Marks +Toggles the visualization of bookmarks (and other marks) on the +vertical scrollbar. When enabled, marks are represented by a thin line in the +mark color at the scrollbar, middleclicking on the lines will scroll the view +to a position near the mark. + + + +F9 + +ViewShow/Hide Folding Markers + +Toggles the display of the folding marker pane in the left +side of the view. See Using +Code Folding. + + + + + + +Code Folding + + + + + + +&Ctrl; +Shift- +Collapse Toplevel + +Collapse all toplevel regions in the document. + + +&Ctrl; +Shift+ +Expand Toplevel + +Expand all toplevel regions in the document. + + +&Ctrl; +- +Collapse One Local Level + +Collapse the region closest to the cursor. + + +&Ctrl; ++ +Expand One Local Level + +Expand the region closest to the cursor. + + + + + + + + + + + +The <guimenu>Bookmarks</guimenu> Menu + +The Bookmarks menu allows you to work with +the bookmarks in the currently active document. + +Below the entries described here, one entry for each bookmark in +the active document will be available. The text will be the first few +words of the marked line. Choose an item to move the cursor to the +start of that line. The editor will scroll as necessary to make that +line visible. + + + +Menu Items + + + + + +&Ctrl;B +Bookmarks +Set/Clear Bookmark + + + +Sets or removes a bookmark in the current line of the active document. +(If it's there, it is removed, otherwise one is set.) + + + + + + + +Bookmarks +Clear All Bookmarks + + + +Clears (removes) all bookmarks in the active document. + + + + +&Alt; +Page Up +BookmarksPrevious + +This will move the cursor to beginning of the first above line +with a bookmark. The menuitem text will include the line number and the first +piece of text on the line. This item is only available when there is a bookmark +in a line above the cursor. + + + +&Alt; +Page Down +BookmarksNext +This will move the cursor to beginning of the next line with a +bookmark. The menuitem text will include the line number and the first piece of +text on the line. This item is only available when there is a bookmark in a line +below the cursor. + + + + + + + + +The <guimenu>Tools</guimenu> Menu + + + + +ToolsPipe to +Console +Feed the currently selected text ito the built in terminal +emulator. No newline is added after the text. + + + +ToolsExternal +Tools +This submenu contains all the external toolsyou have +configured. + + + + +Tools +Read Only Mode + +Set the current document to Read Only mode. This prevents any text +addition and any changes in the document formatting. + + + + + +Tools +Filletype + +Choose the filetype scheme you prefer for the active document. This +overwrites the global filetype +mode set in Settings Configure +Editor... in the Filetypes tab for your current +document only. + + + + + +Tools +Highlighting + +Choose the Highlighting scheme you prefer for the active document. This +overwrites the global highlighting mode set in +Settings Configure Editor... + for your current document only. + + + + + +Tools +Indentation + +Choose the style of +indentation you want for your active document. +This overwrites the global indentation mode set in +Settings Configure Editor... + for your current document only. + + + + + +Tools +Encoding + +You can overwrite the default encoding set in +Settings +Configure +Editor... in the Open/Save tab +to set a different encoding for your current document. The encoding you +set here will be only valid for your current document. + + + + + +Tools +End of Line + +Choose your prefered end of line mode for your active +document. This overwrites the global end of line mode set in +Settings Configure Editor... + for your current document only. + + + + + +ToolsSpelling... + + +This initiates the spellchecking program - a program +designed to help the user catch and correct any spelling errors. +Clicking on this entry will start the checker and bring up the speller dialog +box through which the user can control the process. There are four settings +lined up vertically in the center of the dialog with their corresponding labels +just to the left. Starting at the top they are: + + + +Unknown word: +Here, the spellchecker indicates the word currently under +consideration. This happens when the checker encounters a word not in its +dictionary - a file containing a list of correctly spelled words against which +it compares each word in the editor. + + +Replace with: + If the checker has any similar words in its dictionary the +first one will be listed here. The user can accept the suggestion, type in his +or her own correction, or choose a different suggestion from the next +box. + + +Suggested Words: + The checker may list here a number of possible replacements for +the word under consideration. Clicking on any one of the suggestions will cause +that word to be entered in the Replacement: box, +above. + + +Language: + If you have installed multiple dictionaries, here you can +select which dictionary/language should be used. + + + +On the right side of the dialog box are 5 buttons that allow the user to +control the spellcheck process. They are: + + + +Add to Dictionary +Pressing this button adds the word in the Misspelled +Word: box to the checker's dictionary. This means that in the future +the checker will always consider this word to be correctly +spelled. + + +Replace + This button has the checker replace the word under +consideration in the document with the word in the +Replacement: box. + + +Replace All + This button causes the checker to replace not only the current +Unknown word: but to automatically make the same +substitution for any other occurrences of this Misspelled +Word: in the document. + + +Ignore +Activating this button will have the checker move on without +making any changes. + + +Ignore All + This button tells the checker to do nothing with the current +Unknown word: and to pass over any other instances of +the same word. This only applies to the current spellcheck +run. If the checker is run again later it will stop on this same +word. + + + +Three more buttons are located horizontally along the bottom of the +spellcheck dialog. They are: + + + +Help + This invokes the &kde; help system starting at the &kate; help +pages (this document). + + + +Finished + This button ends the spellcheck process, and returns to the +document. + + + +Cancel + This button cancels the spellcheck process, all modifications +are reverted, and you will return to your document. + + + + + + + + + +Tools +Spelling (from cursor)... + +This initiates the spellchecking program but it starts where your cursor +is instead of at the beginning of the document. + + + + + +Tools +Spellcheck Selection... + +Spellchecks the current selection. + + + + + + +&Ctrl;I + +ToolsIndent + +This increases the paragraph's indentation by one step. The size of the +step depends on the indentation +settings. + + + + + + +&Ctrl;&Shift;I + +ToolsUnindent + + +This reduces the paragraph's indentation by one step. The size of the step + +depends on the indentation settings. + + + + + + +ToolsClean +Indentation +This cleans the indentation for the current selection or for the +line the cursor is currently in. Cleaning the indentation ensures that +all your selected text follows the indentation mode you choose. + + + + + +Tools +Align + + +Causes a realign of the current line or selected lines using the +indentation mode and indentation settings in the doucment. + + + + + + +&Ctrl;D + +Tools +Comment + +This adds one space to the beginning of the line +where the text cursor is located or to the beginning of any +selected lines. + + + + + + +&Ctrl;&Shift;D + +Tools +Uncomment + +This removes one space (if any exist) from the beginning of the +line where the text cursor is located or from the beginning of any +selected lines. + + + + + +&Ctrl;U + +Tools +Uppercase + +Put the selected text or the letter after the cursor in +uppercase. + + + + + +&Ctrl;&Shift;U + +Tools +Lowercase + +Put the selected text or the letter after the cursor in +lowercase. + + + + + +&Alt;&Ctrl;U + +Tools +Capitalize + +Capitalize the selected text or the current +word. + + + + + +&Ctrl;J + +Tools +Join Lines + +Joins the selected lines, or the current line and the line below +with one white space character as a separator. Leading/trailing white space on +joined lines is removed in the affected ends. + + + + +Tools +Word Wrap Document + +Apply static word wrapping on all the document. That means that +a new line of text will automatically start when the current +line exceeds the length specified by the Wrap words at: option +in the Editing tab in +SettingsConfigure +Editor... + + + + + + + + +The <guimenu>Sessions</guimenu> Menu + +This menu contains entries for using and managing &kate; sessions. +For more information, read Using Sessions. + + + + +Sessions +New +Creates a new empty session. All currently open files will +be closed. + + + + +SessionsOpen... + +Open an existing session. The Session Chooser dialog is +displayed to let you choose one. + + + +SessionsQuick Open + +This submenu lets you open an existing session. + + + + +SessionsSave + +Save the current session. If the session is anonymous, you will +be prompted for a session name. + + + +SessionsSave +As... +Save the current session under a new name. You are prompted for +a name to use. + + + +SessionsManage... + +Displays the Session Manager dialog which allows you to rename +and delete sessions. + + + + + + + + + +The <guimenu>Settings</guimenu> Menu + +The Settings menu allows you to change the properties +of the main window, such as showing/hiding toolbars, and provides +access to the configuration dialogs. + + + + + + + +Settings +Toolbars + + + +This submenu lists the available toolbars, each item toggles the display +of the associated toolbar. + + + + +SettingsFull Screen +Mode +Toggles full screen display. +This commmand will be moved to the Window menu in a future +version of &kate; + + + + + + + +Settings +Configure Shortcuts... + + + +Display the familiar &kde; Keyboard Shortcut Configuration +Dialog. + + + + + + + + +Settings +Configure Toolbars... + + + +Display the familiar &kde; Toolbar Configuration Dialog. + + + + + + + +Settings +Configure &kate;... + + + +Launch the Main Configuration Dialog + + + + + + + + +the <guimenu>Window</guimenu> Menu + + + + + + +Window +New Window + + + + +Opens another instance of &kate;. +The new instance will be identical to your previous instance. + + + + + + + + +&Ctrl;&Shift;L +Window +Split Vertical + + + +This will split the frame (which may be the main editing area) in two equally sized frames, +the new one to the left of the current one. The new frame gets the focus, and will display the +same document as the old one. +See also Working with the &kate; MDI + + + + + + + +&Ctrl;&Shift;T +Window +Split Horizontal + + + +Splits the current frame (which may be the main editing area) in two equally sized frames, +the new one at the bottom half. The new frame gets the focus, and displays the same document as +the old one. +See also Working with the &kate; MDI + + + + + + + +&Ctrl;&Shift;R +Window +Close Current + + + +Closes the active frame. This is disabled, if there is only one frame +(the main editing area). No documents get closed by closing a +frame – they will still be available in the Documents Menu as well as in +the File List. See also Working with the +&kate; MDI + + + + +F8 +WindowNext +View +Focus the next document view, if you have split the editor area +in more views. + + + +&Shift;F8 +WindowPrevious +View +Focus the previous document view, if you have split the editor +area in more views. + + + +WindowTool Views + + + + + +WindowTool Views +Show/Hide Sidebars +Toggles the display of the sidebar button rows. This command +does not affect the display of the sidebar content widgets, any sidebar that +is visible will stay visible, and if you assigned shortcuts to the below +commands those will of course continue to work. + + + + + + +WindowTool Views +Show Documents + + + +Toggle the display of &kate;'s Documents list + + + + + + + +WindowTool Views +Show/Hide Filesystem Browser + + + +Toggle the display of &kate;'s Filesystem Browser + + + + + + + +WindowTool Views +Show/Hide Find in Files + + + +Toggle the display of &kate;'s Find in Files tool. + + + + + + + + +WindowTool Views +Show/Hide Terminal + + + +Toggles the display of the built in terminal emulator. +When activated the first time, the terminal will be created. +When the terminal emulator is displayed, it will get the focus, so that +you can start typing in commands immediately. If the Sync Konsole with Active +Document option is enabled in the General Page of the Main configuration dialog the shell session will +change to the directory of the active document, if it is a local file. + + + + + + + + + + + + + + +The <guimenu>Help</guimenu> Menu + +Apart from standard &kde; Help menu items +described below you will have menu entries to show the +Plugins User Manuals for installed plugins. + +&help.menu.documentation; + + + + diff --git a/doc/kate/mimetypechooser.png b/doc/kate/mimetypechooser.png new file mode 100644 index 000000000..45220f8a4 Binary files /dev/null and b/doc/kate/mimetypechooser.png differ diff --git a/doc/kate/part.docbook b/doc/kate/part.docbook new file mode 100644 index 000000000..e09725b31 --- /dev/null +++ b/doc/kate/part.docbook @@ -0,0 +1,671 @@ + + + +&Anders.Lund; &Anders.Lund.mail; + + + +Working with the &kate; editor + + + +Overview + +The &kate; editor is the editing area of the &kate; window. This +editor is also used by &kwrite;, and it can be used in &konqueror; for +displaying text files from your local computer, or from the +network. + +The editor is composed of the following components: + + + + +The editing area +This is where the text of your document is located. + + + +The Scroll bars + +The scroll bars indicate the position of the visible part of +the document text, and can be used to move around the +document. Dragging the scrollbars will not cause the insertion cursor +to be moved. +The scroll bars are displayed and hidden as required. + + + + +The Icon Border + +The icon border is a small pane on the left side of the editor, +displaying a small icon next to marked lines. +You can set or remove a bookmark in a visible line by +clicking the &LMB; in the icon border next to that line. +The display of the icon border can be toggled using the +View Show Icon +Border menu item. + + + + +The Line Numbers Pane + +The Line numbers pane shows the line numbers of all visible +lines in the document. +The display of the Line Numbers Pane can be toggled using the +View Show Line +Numbers menu item. + + + + +The Folding Pane + +The folding pane allows you to collapse or expand foldable blocks +of lines. The calculation of the foldable regions are done according to +rules in the syntax highlight definition for the document. + + + + + + +Also in this Chapter: +Navigating in the +Text +Working with the +Selection +Copying and +Pasting Text +Finding and +Replacing Text +Using +Bookmarks +Automatically +Wrapping Text +Using automatic indenting + + + + + +Navigating in the Text + +Moving around in the text in &kate; is like in most graphical text +editors. You move the cursor using the arrow keys and the +Page Up, Page Down, Home and +End keys in combination with the Ctrl and +Shift modifiers. The Shift key is always used +to generate a selection, while the Ctrl key have different +effects on different keys: + +For the Up and Down keys it +means scroll rather than move the cursor. +For the Left and Right +keys it means skip words rather than characters. +for the Page Up and Page Down +keys it means move to the visible edge of the view rather than browse. + +For the Home and End keys it +means move to the beginning or end of the document rather than the beginning or +end of the line. + + + +&kate; also provides you with a way to quickly jump to a matching brace +or paranthese: Place the cursor on the inside of a parenthese or brace +character, and press Ctrl6 +to jump to the matching parenthese or brace. + +In addition you can use +bookmarks to quickly jump to +positions that you define on your own. + + + + +Working with the Selection + +There are two basic ways of selecting text in &kate;: using the +mouse, and using the keyboard. + +To select using the mouse, hold down the &LMB; while dragging +the mouse cursor from where the selection should start, to the desired +end point. The text gets selected as you drag. + +Double-clicking a word will select that word. + +Triple-clicking in a line will select the entire line. + +If &Shift; is held down while clicking, text will be +selected: + + +If nothing is already selected, from the text cursor +position to the mouse cursor position. +If there is a selection, from and including that +selection to the mouse cursor position + + + +When selecting text by dragging the mouse, the +selected text is copied to the clipboard, and can be pasted by +clicking the middle mouse button in the editor, or in any other +application to which you want to paste the text. + + + +To select using the keyboard, hold down the &Shift; key while +using the navigation keys (The Arrow keys, Page Up, +Page Down, Home and +End, possibly in combination with &Ctrl; to extend +the move of the text cursor). + +See also the section Navigating in the Text in this +Chapter. + +To Copy the current selection, use the +Edit +Copy menu item or the keyboard +shortcut (defaults to &Ctrl;C). + +To Deselect the current selection, use the +Edit +Deselect menu item, or the +keyboard shortcut (default is &Ctrl;&Shift;A), or click +with the &LMB; in the editor. + + +Using Block Selection + +When Block Selection is enabled, you can make vertical +selections in the text, meaning selecting limited columns from +multiple lines. This is handy for working with tab separated lines for +example. + +Block Selection can be toggled using the +Edit Toggle Block +Selection menu item. The default keyboard +shortcut is F4 + + + + + +Using Overwrite Selection + +If Overwrite Selection is enabled, typing or pasting text into +the selection will cause the selected text to be replaced. If not +enabled, new text will be added at the position of the text +cursor. + +Overwrite Selection is enabled by default. + +To change the setting for this option, use the Select Page of the Configuration Dialog. + + + + + +Using Persistent Selection + +When Persistent selection is enabled, typing characters or +moving the cursor will not cause the Selection to become +deselected. This means that you can move the cursor away from the +selection and type text. + +Persistent Selection is disabled by default. + +Persistent Selection can be enabled in the Select Page of the Configuration Dialog. + + +If Persistent Selection and Overwrite Selection are both +enabled, typing or pasting text when the text cursor is inside the +selection will cause it to be replaced and deselected. + + + + + + + + +Copying and Pasting Text + +To copy text, select it and use the +Edit +Copy menu item. Additionally, +selecting text with the mouse will cause selected text to be copied to +the X selection. + +To paste the text currently in the clipboard, use the + +EditPaste +menu item. + +Additionally, text selected with the mouse may be pasted by +clicking the middle mouse button at the +desired position. + + +If you are using the &kde; desktop, you can retrieve earlier +copied text from any application using the &klipper; icon in the +&kicker; icon tray. + + + + + +Finding and Replacing Text + + +The <guilabel>Find Text</guilabel> and <guilabel>Replace +Text</guilabel> Dialogs + + +The Find and Replace Text dialogs in &kate; are very much the +same, except the Replace Text dialog offers the means of entering a +replacement string along with a few extra options. + +The dialogs offer the following common options: + + + + +Text to Find +This is where to enter the search string. The interpretation of the string +depends on some of the options described below. + + + +Regular Expression + +If checked, the search string is interpreted as a regular +expression. A button for using a graphical tool to create or edit the +expression will be enabled. +See Regular +Expressions for more on these. + + + + +Case Insensitive + +If enabled, the search will be case insensitive. + + + + +Whole Words Only + +If checked, the search will only match if there is a word +boundary at both ends of the string matching, meaning not an +alphanumeric character - either some other visible character or a line +end. + + + + +From cursor + +If checked, the search will start at cursor position, otherwise it will +start at the beginning of the first line in the document. + + + + +Find Backwards + +If checked, the search will look for the first match above the +starting point, either cursor position or the beginning of the +document, if the From Beginning option is +enabled. + + + + + +The Replace Text Dialog offers some +additional options: + + + + +Replace With +This is where to enter the replacement +string. + + + +Selected Text + +This option is disabled if no text is selected, or if the +Prompt on Replace +option is enabled. If checked, all matches of the search string within +the selected text will be replaced with the replace string. + + + + +Prompt on Replace +If checked, a small dialog will prompt you for what to +do for each time a match is found. It offers the following options: + + + +Yes +Activate this to replace the current match (which is +selected in the editor). + + + +No +Activate to skip the current match, and try to find another one. + + + +All +Activate to cancel prompting, and just replace all +matches. + + + +Close +Activate this to skip the current match and end the +searching. + + + + + + + + + + +There is currently no way to use minimal matching when searching +for a regular expression. This will be added in a future version of +&kate; + + + + + +Finding Text + +To find text, launch the Find Text Dialog +with &Ctrl;For +from the Edit +Find... menu item, enter a +search string, set the options as desired and hit +Ok. If the search was started at cursor position and no +match was found before reaching the end (or beginning if you are searching +backward) of the document, you will be asked if you want to wrap the search. + + +If a match is found it is selected and the Find +Text Dialog is hidden, but stay tuned, finding further +matches is very easy: + +To find the next match in the search direction, use the +Edit Find +Next command or press +F3. + +To find the next match in the opposite direction, use the +Edit Find +Previous command or press &Shift;F3. + +If no match is found before reaching the document end (or beginning if you +are searching backward) , you will be asked if you want to wrap the search. + + + + + +Replacing Text + +To replace text, launch the Replace text +Dialog using the Edit +Replace command, or the +&Ctrl;R shortcut, +enter a search string and optionally a replace string (if the replace +string is empty, each match will be removed), set +the options as desired and +hit the Ok button. + + +If you are using a regular expression to find the text to replace, you can +employ backreferences to reuse text captured in parenthesized subpatterns of the expression. +See for more +on those. + + +You can do find, replace and +ifind (incremental search) from the +command line. + + + + + + + +Using Bookmarks + +The bookmarks feature allows you to mark certain lines, to be +able to easily find them again. + +You can set or remove a bookmark in a line in two ways: + + + +Move the insertion cursor to the line and activate the +BookmarksToggle +Bookmark (&Ctrl;B) command. + + +Click in the Icon Border next to the line. + + + + +Bookmarks are available in the Bookmarks +menu. The individual bookmarks are available as menu items, labeled +with the line number of the line with the bookmark, and the first few +characters of the text in the line. To move the insertion cursor to +the beginning of a bookmarked line, open the menu and select the +bookmark. + +To quickly move between bookmarks or to the next/previous bookmark, +use the BookmarksNext + (Ctrl +Page Down) or +BookmarksPrevious +(CtrlPage Up +) commands. + + + + + +Automatically Wrapping text + +This feature allows you to have the text formatted in a very simple way: the text will be wrapped, +so that no lines exceed a maximum number of characters per line, unless there is a longer string of +non-whitespace characters. + +To enable/disable it, check/uncheck the Word Wrap checkbox in the +edit page of the configuration dialog. + +To set the maximum line width (maximum characters per line), use the +Wrap Words At +option in the edit page of the configuration +dialog. + +If enabled, +it has the following effects: + + +While typing, the editor will automatically insert a hard line break after +the last whitespace character at a position before the maximum line width is reached. +While loading a document, the editor will wrap the text in a similar way, so that +no lines are longer than the maximum line width, if they contain any whitespace allowing that. + + + + +There is currently no way to set word wrap for document types, or even to enable or disable +the feature on document level. This will be fixed in a future version of &kate; + + + + +Using automatic indenting + +&kate;s editor component supports a variation of autoindenting modes, +designed for different text formats. You can pick from the available modes using +the ToolsIndentation +menu. The autoindent modules also provides a function +ToolsAlign +which will recalculate the indentation of the selected or current line. Thus, +you may reindent your entire document by selecting all the text and activating +that action. + +All the indent modes use the indentation related settings in the active +document. + +You can set all sorts of configuration variables, including +those related to indentation using Document +Variables and File +types. + + + +Available Autoindent Modes + + +None +Selecting this mode turns automatic indenting off entirely. + + + + +Normal +This indenter simply keeps the indentation similar to the +previous line with any content other than whitespace. You can combine this +with using the indent and unindent actions for indenting to your own taste. + + + +C Style +An indenter for C and similar languages, such as +C++, C#, java, javascript and so on. This indenter will not work with scripting +languages such as Perl or PHP. + + + +SS C Style +An alternative indenter for C and similar languages, with the +same constraints. + + + +Python Style +An indenter specifically for the python scripting language. + + + + +XML +A very nice XML auto-indenter. However tempting, do not try to +use this with HTML other than XHTML, because it fails with the old style +HTML tags (open tags like for example <br>) + + + +Variable Indenter + + + +The variable indenter is experimental, and may change behavior or +disappear in future versions. + + + +The variable indenter is special in that it can be configured using variables in +the document (or in a filetype configuration). The followwing variables are +read: + + + +var-indent-indent-after + +A regular expression which will cause a line to +be indented by one unit, if the first non-whitespace-only line above matches. +var-indent-indent: A regular expression, which will cause a matching line +to be indented by one unit. + + + + + +var-indent-unindent + +A regular expression which will cause the line to be +unindented by one unit if matching. + + + + +var-indent-triggerchars + +A list of characters that should cause the +indention to be recalculated immediately when typed. + + + + +var-indent-handle-couples + +A list of parenthese sets to handle. Any combination +of 'parens' 'braces' and 'brackets'. Each set type is handled +the following way: If there are unmatched opening instances on the above line, +one indent unit is added, if there are unmatched closing instances on the +current line, one indent unit is removed. + + + + +var-indent-couple-attribute + +When looking for unmatched couple openings/closings, +only characters with this attribute are considered. The value must be the +attribute name from the syntax xml file, for example "Symbol". If it's not +specified, attribute 0 is used (usually 'Normal Text'). + + + + + + + + + + + + + diff --git a/doc/kate/plugins.docbook b/doc/kate/plugins.docbook new file mode 100644 index 000000000..a097cb526 --- /dev/null +++ b/doc/kate/plugins.docbook @@ -0,0 +1,28 @@ + + + + +&Anders.Lund; &Anders.Lund.mail; + + + + +Working with Plug-ins + +Kate is using two different forms of plug-ins, namely plug-ins for the +&kate; application and plug-ins for the &kate; editor component. The latter are +available to any application using the editor component, such as KDevelop, +Quanta, Kile, Kwrite and many others, while application plug-ins are specific +to the &kate; application. + +You can enable both types of plug-ins in the configuration dialog, which also +provides access to additional configuration options for plug-ins that requires +that. + +There are many plugins for various purposes available in the kdeaddons +module, and you can search the web for more. A few plugins are shipped with the +editor component, for doing word completion, automatic bookmarks, insert files, +thesaurus and word spell checking and incremental search. + + diff --git a/doc/kate/regular-expressions.docbook b/doc/kate/regular-expressions.docbook new file mode 100644 index 000000000..c15685d75 --- /dev/null +++ b/doc/kate/regular-expressions.docbook @@ -0,0 +1,664 @@ + + + +&Anders.Lund; &Anders.Lund.mail; + + + + +Regular Expressions + + This Appendix contains a brief but hopefully sufficient and +covering introduction to the world of regular +expressions. It documents regular expressions in the form +available within &kate;, which is not compatible with the regular +expressions of perl, nor with those of for example +grep. + + + +Introduction + +Regular Expressions provides us with a way +to describe some possible contents of a text string in a way +understood by a small piece of software, so that it can investigate if +a text matches, and also in the case of advanced applications with the +means of saving pieces or the matching text. + +An example: Say you want to search a text for paragraphs that +starts with either of the names Henrik or +Pernille followed by some form of the verb +say. + +With a normal search, you would start out searching for the +first name, Henrik maybe followed by sa +like this: Henrik sa, and while looking for +matches, you would have to discard those not being the beginning of a +paragraph, as well as those in which the word starting with the +letters sa was not either says, +said or so. And then of cause repeat all of that with +the next name... + +With Regular Expressions, that task could be accomplished with a +single search, and with a larger degree of preciseness. + +To achieve this, Regular Expressions defines rules for +expressing in details a generalization of a string to match. Our +example, which we might literally express like this: A line +starting with either Henrik or Pernille +(possibly following up to 4 blanks or tab characters) followed by a +whitespace followed by sa and then either +ys or id could be expressed with +the following regular expression: ^[ +\t]{0,4}(Henrik|Pernille) sa(ys|id) + +The above example demonstrates all four major concepts of modern +Regular Expressions, namely: + + +Patterns +Assertions +Quantifiers +Back references + + +The caret (^) starting the expression is an +assertion, being true only if the following matching string is at the +start of a line. + +The stings [ \t] and +(Henrik|Pernille) sa(ys|id) are patterns. The first +one is a character class that matches either a +blank or a (horizontal) tab character; the other pattern contains +first a subpattern matching either Henrik +or Pernille, then a piece +matching the exact string sa and finally a +subpattern matching either ys +or id + +The string {0,4} is a quantifier saying +anywhere from 0 up to 4 of the previous. + +Because regular expression software supporting the concept of +back references saves the entire matching part of +the string as well as sub-patterns enclosed in parentheses, given some +means of access to those references, we could get our hands on either +the whole match (when searching a text document in an editor with a +regular expression, that is often marked as selected) or either the +name found, or the last part of the verb. + +All together, the expression will match where we wanted it to, +and only there. + +The following sections will describe in details how to construct +and use patterns, character classes, assertions, quantifiers and +back references, and the final section will give a few useful +examples. + + + + + +Patterns + +Patterns consists of literal strings and character +classes. Patterns may contain sub-patterns, which are patterns enclosed +in parentheses. + + +Escaping characters + +In patterns as well as in character classes, some characters +have a special meaning. To literally match any of those characters, +they must be marked or escaped to let the regular +expression software know that it should interpret such characters in +their literal meaning. + +This is done by prepending the character with a backslash +(\). + + +The regular expression software will silently ignore escaping a +character that does not have any special meaning in the context, so +escaping for example a j (\j) is +safe. If you are in doubt whether a character could have a special +meaning, you can therefore escape it safely. + +Escaping of cause includes the backslash character it self, to +literally match a such, you would write +\\. + + + + +Character Classes and abbreviations + +A character class is an expression that +matches one of a defined set of characters. In Regular Expressions, +character classes are defined by putting the legal characters for the +class in square brackets, [], or by using one of +the abbreviated classes described below. + +Simple character classes just contains one or more literal +characters, for example [abc] (matching either +of the letters a, b or c) +or [0123456789] (matching any digit). + +Because letters and digits have a logical order, you can +abbreviate those by specifying ranges of them: +[a-c] is equal to [abc] +and [0-9] is equal to +[0123456789]. Combining these constructs, for +example [a-fynot1-38] is completely legal (the +last one would match, of cause, either of +a,b,c,d, +e,f,y,n,o,t, +1,2,3 or +8). + +As capital letters are different characters from their +non-capital equivalents, to create a caseless character class matching +a or b, in any case, you need to write it +[aAbB]. + +It is of cause possible to create a negative +class matching as anything but To do so put a caret +(^) at the beginning of the class: + +[^abc] will match any character +but a, b or +c. + +In addition to literal characters, some abbreviations are +defined, making life still a bit easier: + + + + +\a + This matches the ASCII bell character (BEL, 0x07). + + + +\f + This matches the ASCII form feed character (FF, 0x0C). + + + +\n + This matches the ASCII line feed character (LF, 0x0A, Unix newline). + + + +\r + This matches the ASCII carriage return character (CR, 0x0D). + + + +\t + This matches the ASCII horizontal tab character (HT, 0x09). + + + +\v + This matches the ASCII vertical tab character (VT, 0x0B). + + +\xhhhh + + This matches the Unicode character corresponding to +the hexadecimal number hhhh (between 0x0000 and 0xFFFF). \0ooo (&ie;, +\zero ooo) matches the ASCII/Latin-1 character +corresponding to the octal number ooo (between 0 and +0377). + + + +. (dot) + This matches any character (including newline). + + + +\d + This matches a digit. Equal to [0-9] + + + +\D + This matches a non-digit. Equal to [^0-9] or [^\d] + + + +\s + This matches a whitespace character. Practically equal to [ \t\n\r] + + + +\S + This matches a non-whitespace. Practically equal to [^ \t\r\n], and equal to [^\s] + + + +\w +Matches any word character - in this case any letter or digit. Note that +underscore (_) is not matched, as is the case with perl regular expressions. +Equal to [a-zA-Z0-9] + + + +\W +Matches any non-word character - anything but letters or numbers. +Equal to [^a-zA-Z0-9] or [^\w] + + + + + + + +The abbreviated classes can be put inside a custom class, for +example to match a word character, a blank or a dot, you could write +[\w \.] + + The POSIX notation of classes, [:<class +name>:] is currently not supported. + + +Characters with special meanings inside character classes + +The following characters has a special meaning inside the +[] character class construct, and must be escaped to be +literally included in a class: + + + +] +Ends the character class. Must be escaped unless it is the very first character in the +class (may follow an unescaped caret) + + +^ (caret) +Denotes a negative class, if it is the first character. Must be escaped to match literally if it is the first character in the class. + + +- (dash) +Denotes a logical range. Must always be escaped within a character class. + + +\ (backslash) +The escape character. Must always be escaped. + + + + + + + + + + +Alternatives: matching <quote>one of</quote> + +If you want to match one of a set of alternative patterns, you +can separate those with | (vertical bar character). + +For example to find either John or Harry you would use an expression John|Harry. + + + + + +Sub Patterns + +Sub patterns are patterns enclosed in +parentheses, and they have several uses in the world of regular +expressions. + + + +Specifying alternatives + +You may use a sub pattern to group a set of alternatives within +a larger pattern. The alternatives are separated by the character +| (vertical bar). + +For example to match either of the words int, +float or double, you could use the +pattern int|float|double. If you only want to +find one if it is followed by some whitespace and then some letters, +put the alternatives inside a subpattern: +(int|float|double)\s+\w+. + + + + + +Capturing matching text (back references) + +If you want to use a back reference, use a sub pattern to have +the desired part of the pattern remembered. + +For example, it you want to find two occurrences of the same +word separated by a comma and possibly some whitespace, you could +write (\w+),\s*\1. The sub pattern +\w+ would find a chunk of word characters, and the +entire expression would match if those were followed by a comma, 0 or +more whitespace and then an equal chunk of word characters. (The +string \1 references the first sub pattern +enclosed in parentheses) + + + + + + +Lookahead Assertions + +A lookahead assertion is a sub pattern, starting with either +?= or ?!. + +For example to match the literal string Bill but +only if not followed by Gates, you could use this +expression: Bill(?! Gates). (This would find +Bill Clinton as well as Billy the kid, +but silently ignore the other matches.) + +Sub patterns used for assertions are not captured. + +See also Assertions + + + + + + +Characters with a special meaning inside patterns + +The following characters have meaning inside a pattern, and +must be escaped if you want to literally match them: + + + + +\ (backslash) +The escape character. + + + +^ (caret) +Asserts the beginning of the string. + + + +$ +Asserts the end of string. + + + +() (left and right parentheses) +Denotes sub patterns. + + + +{} (left and right curly braces) +Denotes numeric quantifiers. + + + +[] (left and right square brackets) +Denotes character classes. + + + +| (vertical bar) +logical OR. Separates alternatives. + + + ++ (plus sign) +Quantifier, 1 or more. + + + +* (asterisk) +Quantifier, 0 or more. + + + +? (question mark) +An optional character. Can be interpreted as a quantifier, 0 or 1. + + + + + + + + + + + +Quantifiers + +Quantifiers allows a regular expression to +match a specified number or range of numbers of either a character, +character class or sub pattern. + +Quantifiers are enclosed in curly brackets ({ +and }) and have the general form +{[minimum-occurrences][,[maximum-occurrences]]} + + +The usage is best explained by example: + + + + +{1} +Exactly 1 occurrence + + + +{0,1} +Zero or 1 occurrences + + + +{,1} +The same, with less work;) + + + +{5,10} +At least 5 but maximum 10 occurrences. + + + +{5,} +At least 5 occurrences, no maximum. + + + + + + +Additionally, there are some abbreviations: + + + + +* (asterisk) +similar to {0,}, find any number of occurrences. + + + ++ (plus sign) +similar to {1,}, at least 1 occurrence. + + + +? (question mark) +similar to {0,1}, zero or 1 occurrence. + + + + + + + + +Greed + +When using quantifiers with no maximum, regular expressions +defaults to match as much of the searched string as possible, commonly +known as greedy behavior. + +Modern regular expression software provides the means of +turning off greediness, though in a graphical +environment it is up to the interface to provide you with access to +this feature. For example a search dialog providing a regular +expression search could have a check box labeled Minimal +matching as well as it ought to indicate if greediness is the +default behavior. + + + + +In context examples + +Here are a few examples of using quantifiers + + + + +^\d{4,5}\s +Matches the digits in 1234 go and 12345 now, but neither in 567 eleven +nor in 223459 somewhere + + + +\s+ +Matches one or more whitespace characters + + + +(bla){1,} +Matches all of blablabla and the bla in blackbird or tabla + + + +/?> +Matches /> in <closeditem/> as well as +> in <openitem>. + + + + + + + + + +Assertions + +Assertions allows a regular expression to +match only under certain controlled conditions. + +An assertion does not need a character to match, it rather +investigates the surroundings of a possible match before acknowledging +it. For example the word boundary assertion does +not try to find a non word character opposite a word one at its +position, instead it makes sure that there is not a word +character. This means that the assertion can match where there is no +character, &ie; at the ends of a searched string. + +Some assertions actually does have a pattern to match, but the +part of the string matching that will not be a part of the result of +the match of the full expression. + +Regular Expressions as documented here supports the following +assertions: + + + + +^ (caret: beginning of +string) +Matches the beginning of the searched +string. The expression ^Peter will +match at Peter in the string Peter, hey! +but not in Hey, Peter! + + + +$ (end of string) +Matches the end of the searched string. + +The expression you\?$ will match at the +last you in the string You didn't do that, did you? but +nowhere in You didn't do that, right? + + + + + +\b (word boundary) +Matches if there is a word character at one side and not a word character at the +other. +This is useful to find word ends, for example both ends to find +a whole word. The expression \bin\b will match +at the separate in in the string He came in +through the window, but not at the in in +window. + + + + +\B (non word boundary) +Matches wherever \b does not. +That means that it will match for example within words: The expression +\Bin\B will match at in window but not in integer or I'm in love. + + + + +(?=PATTERN) (Positive lookahead) +A lookahead assertion looks at the part of the string following a possible match. +The positive lookahead will prevent the string from matching if the text following the possible match +does not match the PATTERN of the assertion, but the text matched by that will +not be included in the result. +The expression handy(?=\w) will match at handy in +handyman but not in That came in handy! + + + + +(?!PATTERN) (Negative lookahead) + +The negative lookahead prevents a possible match to be +acknowledged if the following part of the searched string does match +its PATTERN. +The expression const \w+\b(?!\s*&) +will match at const char in the string const +char* foo while it can not match const QString +in const QString& bar because the +& matches the negative lookahead assertion +pattern. + + + + + + + + + + + + diff --git a/doc/kate/unhighlighted.png b/doc/kate/unhighlighted.png new file mode 100644 index 000000000..6361032f3 Binary files /dev/null and b/doc/kate/unhighlighted.png differ diff --git a/doc/kcontrol/Makefile.am b/doc/kcontrol/Makefile.am new file mode 100644 index 000000000..930c270cd --- /dev/null +++ b/doc/kcontrol/Makefile.am @@ -0,0 +1,6 @@ + +SUBDIRS = $(AUTODIRS) + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/kcontrol/arts/Makefile.am b/doc/kcontrol/arts/Makefile.am new file mode 100644 index 000000000..093f0a698 --- /dev/null +++ b/doc/kcontrol/arts/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/arts diff --git a/doc/kcontrol/arts/index.docbook b/doc/kcontrol/arts/index.docbook new file mode 100644 index 000000000..4fbfa3bff --- /dev/null +++ b/doc/kcontrol/arts/index.docbook @@ -0,0 +1,201 @@ + + + + +]> + +
+ + + +&Mike.McBride; +&Jost.Schenck; + + + + +2005-02-20 +3.4 + + +KDE +KControl +sound server +sound +aRts + + + + +Sound System + +This control module is used to configure the settings for the +&arts; sound server (the &kde; sound server). + + +&arts; + +The top option, labeled Enable the sound system, +enables (or disables) the &arts; sound server entirely. + + +You can find out more about &arts; in general by typing +help:/artsbuilder into the &konqueror; location +bar, or by finding the &arts-builder; documentation in &khelpcenter;. + + + +The rest of the panel consists of options for the &arts; +sound server. + + + +Enable networked sound + +If this option is enabled, then sound requests from the network +will be honored by the sound server. If this option is disabled, the sound +server will only honor requests from the local computer. + + + + +Run with the highest possible priority (realtime priority) +Enabling this option will give the sound server priority over +other applications, which will help alleviate any problems delivering +uninterrupted sound. +This option may require permissions you do not have as a regular +user. +This option also relies on certain real time support from your +system which may not be available. +If you do not have the necessary permissions, or your system does +not have the real time support necessary, enabling this option will not +cause problems. + + + +Sound buffer: +This slider determines how quickly the sound server can use your +computer's resources. The faster the response time, the higher the +CPU load will be. +I would recommend that you start with the sound server set at +250 ms, and use &kde; for a while. If you notice that the sound does +not work correctly, increase the responsiveness one step at a time until +the problems disappear. + + + +Auto-suspend if idle after: + +Normally &arts; locks the sound card device, so that other +applications cannot use it. If you enable this option, then if &arts; +has been idle for the amount of time you set, it will suspend itself, +allowing any application access to the sound hardware. If &arts; +receives another request, it will unsuspend, and continue as normal. +Enabling this option may cause a small delay when you start an &arts; +application. + + + + + +At the bottom of this page are two buttons to allow you to test your +settings, labelled Test Sound and Test +MIDI respectively. + + + + +Hardware + +The first option you can configure in the +Hardware panel is Select the audio +device:. It tells &arts; which sound system to use for input and +output of sound. Current choices are ALSA (Advanced +&Linux; Sound Architecture), OSS (Open Sound System), +ESD (Enlightenment Sound Daemon), no audio at all and +autodetect. In most cases Autodetect will be perfect for +you. + +Other options are: + + + +Full duplex +This option allows the sound server to play and record sound at +the same time. This option should be enabled if you use applications (such as +Internet telephones) which require simultaneous record and +playback. + + +Use custom sampling rate: + +Normally, the sound server defaults to using a sampling rate of +44100 Hz (CD quality), which is supported on almost all +hardware. If you are using certain Yamaha soundcards, you might need to +configure this to 48000 Hz here; if you are using old SoundBlaster cards, like +SoundBlaster Pro, you might need to change this to 22050 Hz. All other values +are possible too and may make sense in certain contexts (&ie; professional +studio equipment). + + + +Quality: + +These settings allow you to configure the quality of the sounds that +will be played. + +Note that a higher sound quality causes a higher CPU +usage. +If you find sound is slow, or using too much +CPU, try reducing this setting. + + + + + +Override device location: + +Normally, the sound server defaults to using the device called +/dev/dsp for sound output. This +should work in most cases. An exception is, for instance, if you are using +devfs, then you should use /dev/sound/dsp instead. Other alternatives +are things like /dev/dsp0 or +/dev/dsp1 if you have a +soundcard that supports multiple outputs or you have multiple +soundcards. + +If you often use non-&arts; aware applications, and you have a +soundcard that supports it, try setting &arts; to use a different +device than /dev/dsp. This +way, other applications will be able to use the default device, while +&arts; is still running, without giving any error messages. + + + + + +Other custom options: +There are some options offered by +&arts; which may not be available in this control module, so you can add +command line options here which will be passed directly to +artsd. The options will be appended, so they +will override the choices made in the +GUI. To see the possible choices, open a &konsole; +window, and type artsd +. + + + + + + + + +&midi-kcontrol; + + + +
diff --git a/doc/kcontrol/arts/midi.docbook b/doc/kcontrol/arts/midi.docbook new file mode 100644 index 000000000..b92fdffb3 --- /dev/null +++ b/doc/kcontrol/arts/midi.docbook @@ -0,0 +1,24 @@ + + + +&Mike.McBride; &Mike.McBride.mail; + + + +<acronym>MIDI</acronym> Configuration + +This section is used to determine which MIDI device +&kde; should use. You can also install a MIDI wrapper around +the device if you want. + +The use of this module is simple. Click once on the +MIDI device that you would like to use from the +list. + +If you want to use a MIDI mapper, simply mark +the checkbox below the list labeled Use MIDI +Mapper. This will allow you to select the map in the text +box below. You can click on the folder icon to browse your filesystem +to find the map if you need it. + + \ No newline at end of file diff --git a/doc/kcontrol/background/Makefile.am b/doc/kcontrol/background/Makefile.am new file mode 100644 index 000000000..2a68936db --- /dev/null +++ b/doc/kcontrol/background/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/background diff --git a/doc/kcontrol/background/index.docbook b/doc/kcontrol/background/index.docbook new file mode 100644 index 000000000..5241462c0 --- /dev/null +++ b/doc/kcontrol/background/index.docbook @@ -0,0 +1,383 @@ + + + +]> + +
+ + + +&Mark.Donohoe; +&Martin.R.Jones; + +&Mike.McBride; + + + + +2005-01-18 +3.4 + + +KDE +KControl +background +wallpaper + + + + + +Background + +The Background module allows you to configure colors or wallpapers for +your desktop background. + +It is comprised of four areas: + + + +Desktop selection area + + +An area for selecting background images + + +The background Preview Monitor + + +An area for determining the background color + + + + + +Selecting the desktop + +The drop down box labeled Setting for +desktop: is used to select the desktop you want to +configure. You can select any of the desktops individually, or you +can select All Desktops and the changes you make +will be applied to all desktops. + + + + +Preview Monitor + +This is a preview window. It will give you a sense of what to +expect with each change. + + + + +Background + +This section allows you to load a wallpaper on top of the color +gradient chosen in the section below. + +There are three choices available here: + + + +No Picture + +No picture background will be shown. The color and pattern +choices below will still take effect. + + + + +Picture + +A single picture will be used as the background for the selected +desktops. +How this picture is positioned and scaled can be fine tuned +below. + + + + +Slide show + +&kde; allows you to have an automatic slide show of wallpaper +images. To enable this option, press the Setup... +button. In the resulting dialog you may choose any +image or folder of images available on your computer, using the +Add... button to navigate your file system. +Remove will remove the currently selected +entry from the list. + +You may choose the length of time any image is displayed in the +Change picture after: box, and you may choose +Show pictures in random order if you don't want +them displayed in the order they are listed. + +Displaying wallpaper requires that the image be kept in +memory. If you are low on memory, using a small, tiled image or none +at all is recommended. + +Scaling or centering a small image still requires an image the +size of your display to be maintained in memory. + + + + + + + +Options + + + +<guilabel>Position:</guilabel> + +Centered +The image will be centered on the screen without changing the +size of the image. The background colors will be present anywhere the image +does not cover. + + +Tiled +The image will be duplicated until it fills the entire +desktop. The first image will be placed in the upper left corner of the screen, +and duplicated downward and to the right. + + +Center Tiled +The image will be duplicated until it +fills the entire desktop. The first image will be placed in the center of the +screen, and duplicated upward, downward to the right, and to the left. + + +Centered Maxpect +The image will be placed in the center of the screen. It will +be scaled to fit the desktop, but it will not change the aspect ratio of the +original image. This will provide you with an image that is not distorted. + + + +Tiled Maxpect + +The image will be placed in the corner of the screen. It will +be scaled to fit the desktop, but it will not change the aspect ratio +of the original image. This will provide you with an image that is +not distorted. If there is any space over, the image will be +duplicated to fill it. + + + +Scaled +The image will be scaled to fit the desktop. It will be +stretched to fit to all four corners. This may distort the image. + + +Centered Auto fit + +If the picture fits the desktop size, this mode works like the +centered option. If the picture is larger than the desktop then it is +scaled down to fit while keeping the aspect ratio. + + + + +Scale and Crop + +Magnify the picture without distorting it until it fills both the +width and height of the desktop (cropping the picture if necessary), and +then center it on the desktop. + + + + + + +Colors: + +The first drop down box allows you to choose the type of color, +gradient, or pattern to display under (or in place of) wallpaper. +If you are going to be using a picture as a wallpaper, you +can skip this section of the dialog box. +However, if your chosen wallpaper does not cover the entire +desktop, the chosen colors will still show in the remaining +space. + + + +Single Color +By choosing this mode, you select one color using the +first color bar, and the entire background is covered with this one +color. + + +Horizontal Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Primary +Color on the left edge of the screen, and slowly transform into the +color selected by Blend Color by the time it gets to the +right edge of the screen. + + +Vertical Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Primary +Color on the top edge of the screen, and slowly transform into the +color selected by Blend Color as it moves to the bottom of +the screen. + + +Pyramid Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by +Primary Color in each +corner of the screen, and slowly transform into the color selected by +Blend Color as it moves to the center of the +screen. + + +Pipecross Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by +Primary Color in each corner of the screen, and slowly +transform into the color selected by Blend Color +as it moves to the center of the screen. The shape of +this gradient is different than the pyramid gradient. + + +Elliptic Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by +Blend Color in the center of the screen, and slowly +transform into the color selected by Primary Color +as it moves to the edges, in an elliptical pattern. + + + +Pattern + +The rest of the list are the names of various patterns +or textures you can choose. +Click on +OK, and &kde; will render the pattern you +selected using the two colors you selected. For more on patterns, see +the section Adding, Removing and +Modifying Patterns. + +Select the primary color with the first color bar. If you have +chosen a pattern that requires two colors to be set the secondary +color can be set by pressing the appropriate button. + + + + + + + + + + +Blending: + +The drop down box labeled Blending: contains the +options to make a smooth transition (blend) from the wallpaper as it +changes to the background. + + +A drop down box allows you to select the blending mode. +Many of the modes are similar to blending modes for background colors. Select +your mode from the list, and the preview window shows you what it will look +like. +The Balance slider adjusts the +blending. The results can be seen immediately in the preview +window. +The Reverse roles can reverse the +role of the picture and the background for some types of +blending. + + + + + + + + + + +Advanced options +Located below the preview monitor is a button labeled +Advanced Options. + +To use an external program to determine and change the +background of &kde;, simply select Use the following program +for drawing the background. Available &kde; programs are +listed, select one to enable it. To modify your choice, for example +to change the refresh times, you may press the +Modify... button. + +To add a third party application (⪚ +XEarth) you may use the +Add... button. A dialog will open allowing you +to choose your application, and fill in other data about it. You may +remove any entries from this list by selecting it and pressing the +Remove button. + +Using third party external programs to modify or change the +background is beyond the scope of this document, see their respective +documentation for the format of command-line switches and other +configuration information. + +Also in this section you may choose to set the color of text +that is used for icons on the desktop. If you find icon text +difficult to read against a wallpaper or pattern, you can choose a +solid color to show beneath text, or enable a shadow under the text to +enhance its appearance. + +It is possible to set how many lines of text will be shown beneath each icon with the Lines for icon text: If the text is longer than can be shown in the configured number of lines, it will be truncated. You can also set a value for the Width for icon text: option. The value is in pixels, and the default is Auto, which is a default calculated based on the current font. + + + +Finally you can set the Size of the background +cache:. The default (2048 KB) is usually a safe +choice. + + + + +Adding, Removing and Modifying Wallpapers and Patterns + +There is a button under the preview monitor labelled Get +New Wallpapers that helps you fetch new wallpaper images from a +selection of popular images from the KDE-Look website. You can of course +select any image you have available to use as wallpaper, and it may be +stored in any location on your hard drive. To have a wallpaper show up in +the list automatically for all users, you should save it to the $KDEDIR/share/wallpapers +folder. + +A pattern is a picture file which &kde; uses as a template to +draw your background. The picture file provides the shapes, but &kde; +provides the colors. &kde; is packaged with several patterns, and you also +can add new patterns. + +To add a new pattern that is available to every user on your +computer, simply place the file in $KDEDIR/share/apps/kdesktop/patterns/. + +Copy a .desktop file from +this folder, and name it the same as your new pattern image file. +Modify the contents to suit your new pattern. + +To add a new pattern for a single user, add the files to +$KDEHOME/share/apps/kdesktop/patterns/. + +For best results, the pattern should be a grayscale PNG file. + + + + + +
diff --git a/doc/kcontrol/bell/Makefile.am b/doc/kcontrol/bell/Makefile.am new file mode 100644 index 000000000..dbbc3935c --- /dev/null +++ b/doc/kcontrol/bell/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/bell diff --git a/doc/kcontrol/bell/index.docbook b/doc/kcontrol/bell/index.docbook new file mode 100644 index 000000000..2974c0707 --- /dev/null +++ b/doc/kcontrol/bell/index.docbook @@ -0,0 +1,74 @@ + + + +]> + +
+ + + +Pat +Dowler + + + +Matthias +Hoelzer + + + +Mike +McBride + + + + +2003-10-16 +3.2 + +KDE +KControl +Bell +Settings + + + + +System bell + +The system bell or beep is a feature of the X server, which +attempts to make good use of the available hardware. + +&kde; normally doesn't use the system bell; instead using its +own system notifications, which could include log entries, message +popups, or its own beep. You can configure these in the +System Notifications &kcontrol; module. + +It isn't always possible for the X server to actually make +a beep sound with exactly the parameters selected due to hardware +limitations. For example, on most PCs, volume control is not very good +so the X server seems to fake low volume with a reduced duration of +the sound. Thus, if the settings don't seem to do anything, this is +because the X server and/or the hardware don't support anything +better. + +Users are able to set the following parameters for the bell: + + + volume (percentage of maximum volume) + pitch (in Hz) + duration (in milliseconds) + + +You can use the test button to hear how +the current settings will sound. + +Section Authors +Pat Dowler, Matthias Hoelzer mhk@kde.org +Converted to KDE 2.0 by Mike McBride mpmcbride7@yahoo.com + + + + +
diff --git a/doc/kcontrol/cache/Makefile.am b/doc/kcontrol/cache/Makefile.am new file mode 100644 index 000000000..12a7570f3 --- /dev/null +++ b/doc/kcontrol/cache/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/cache diff --git a/doc/kcontrol/cache/index.docbook b/doc/kcontrol/cache/index.docbook new file mode 100644 index 000000000..7392d63fc --- /dev/null +++ b/doc/kcontrol/cache/index.docbook @@ -0,0 +1,69 @@ + + + +]> + +
+ + + + + + + + +2003-10-12 +3.2 + + +KDE +KControl +Konqueror +Cache + + + + +Cache + +This module allows you to control the size of the local cache +folder used by &konqueror;. Note that each user account on your +computer has a separate cache folder, and this folder is not +shared with other web browsers such as &Netscape;. + +Storing local copies of web pages that you have visited allows +&konqueror; to quickly load their contents on subsequent visits. It +will only be necessary to reload the contents from the original site +if they have changed since your last visit, or if you click the reload +button in &konqueror;. + +If you really don't want any of the web pages you visit to be +stored on your computer, you can disable &konqueror;'s disk cache by +clearing the checkbox labeled Use cache. + +You can set here how aggressively &konqueror; keeps the cache up +to date. Keep cache in sync means that &konqueror; +will hit the cache for all objects, downloading them if they are not +there, and then display the item from the cache. Use cache +whenever possible means that &konqueror; will try the cache, +and if an object is not there, it will directly download it for display. +Offline browsing mode means that &konqueror; will +try the cache, and if an object is not there, it will not attempt to +download it from the Internet. + +You can control the size of the cache by typing a number into the +text box labeled Disk cache size. This is the +average amount of space in kilobytes that the cache folder is allowed +to use. When the cache grows too large, &konqueror; will delete older +files to reduce the size of the cache folder. + +This is however, only an average, and during a browsing session +the cache could become substantially larger. + +You can use the Clear Cache button to empty +the cache at any time. + + +
diff --git a/doc/kcontrol/clock/Makefile.am b/doc/kcontrol/clock/Makefile.am new file mode 100644 index 000000000..a38969bfe --- /dev/null +++ b/doc/kcontrol/clock/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/clock diff --git a/doc/kcontrol/clock/index.docbook b/doc/kcontrol/clock/index.docbook new file mode 100644 index 000000000..88fd8c317 --- /dev/null +++ b/doc/kcontrol/clock/index.docbook @@ -0,0 +1,74 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2003-10-19 +3.2 + + +KDE +KControl +clock +date +time +set +configure + + + + + +Date & Time + +You can use this module to alter the system date and time, using a +convenient graphical interface. + +You must have system administrator (root) access to change the system date and +time. If you do not have this access level, this module will only show +you the current settings. + +When you first start, you are in display mode only. To modify +your settings, click on Administrator Mode. If +you are logged in as root, +you will go straight to the change dialog. If not, &kde; will ask for +a superuser password. + + +Modifying your settings + +You set the date using the left half of the module. Simply +choose your month (the drop down box at the top), year (the spin box +at the top), and the day of the month (simply click on the day in the +calendar). + +You set the time using the spin boxes at the bottom of the clock. +You can also directly enter your value. + +The time is represented in 24 hour format. If you want +the system time to be set to 8:00 PM, you need to set the hour spinbox +to 20 (8 + 12). If you want the system time set +to 8:00 AM, you should set the hour spinbox to +8. + +To set a new time zone, simply select one from +the drop down box at the bottom. + +When you have set the correct date and time, simply click +Apply to make the changes permanent. + + + + +
diff --git a/doc/kcontrol/colors/Makefile.am b/doc/kcontrol/colors/Makefile.am new file mode 100644 index 000000000..ec7030b15 --- /dev/null +++ b/doc/kcontrol/colors/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/colors diff --git a/doc/kcontrol/colors/index.docbook b/doc/kcontrol/colors/index.docbook new file mode 100644 index 000000000..c47912da9 --- /dev/null +++ b/doc/kcontrol/colors/index.docbook @@ -0,0 +1,132 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Mark.Donohoe; &Mark.Donohoe.mail; +&Martin.R.Jones; &Martin.R.Jones.mail; + + + +2003-09-22 +3.2 + + +KDE +KControl +color + + + + + +Colors + +Introduction + +The Color Selection module is comprised of 4 sections: + + +The color scheme +preview. +The current +Widget Color. + +The available Color +Schemes. +The contrast +slider. + + +A Widget is a commonly-used +programmer's term for referring to User Interface elements such as +buttons, menus, and scroll bars. You can think of them as the +fundamental pieces that are assembled to make your +application. + + +Preview + +This section of the dialog demonstrates how a color scheme applies +to a sample selection of widgets. It provides you with a +preview of your current color choices. + +A color scheme consists of a set of 18 colors. + +Each of the widgets is labeled to help you identify how your +changes will impact the color scheme. + + + + +<guilabel>Widget Color</guilabel> + +The currently selected member of the color scheme is shown in the +combo box. This widget color can be changed by clicking on the colored +box below the combo box. A color selection dialog will then appear, from +which you may select a new color. When you are happy with your color +selection, press OK in the color selection +dialog. The color will be updated in the Preview Area. + +You may select any member of the color scheme from the +color combination box. + + + + +<guilabel>Contrast</guilabel> Slider + +The Contrast slider allows you to change the +contrast between different shadings of the selected colors. + +The preview area instantly updates to show the effect of your +change. + + + + +<guilabel>Color Scheme</guilabel> + +Various color schemes are supplied with &kde;, and you are free to +define your own. + +The three major color components of each scheme are shown beside +the name in the list. To preview a scheme in the larger preview area, +click on its name in the list box. + +You can use the &kde;-supplied Color Schemes as a starting point +to devise your own Scheme. Click on the Save +Scheme... button to store the color scheme under a new name, +then modify it. + +When such a user-created Color Scheme is selected, changes to it +(as shown in the Preview) can be saved with the Save +Scheme... button; it can also be deleted with the +Remove Scheme button. + +The &kde;-supplied Schemes themselves cannot be changed or +deleted. + +You can use the Import Scheme... button to +add new entries to the list. This might be color schemes that you +have created on another computer and saved, or color schemes you have +downloaded from a website. + +You can choose if you want &kde; to apply the color scheme even +to non-&kde; applications by enabling the Apply colors to +non-KDE applications. Not all applications will allow +this, but most do. + + + + + + +
diff --git a/doc/kcontrol/cookies/Makefile.am b/doc/kcontrol/cookies/Makefile.am new file mode 100644 index 000000000..ed988eefc --- /dev/null +++ b/doc/kcontrol/cookies/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/cookies diff --git a/doc/kcontrol/cookies/index.docbook b/doc/kcontrol/cookies/index.docbook new file mode 100644 index 000000000..a1ea6fdd7 --- /dev/null +++ b/doc/kcontrol/cookies/index.docbook @@ -0,0 +1,211 @@ + + + +]> + +
+ + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + +2003-10-12 +3.2 + + +KDE +KControl +cookie + + + + + +Cookies + +Cookies are a mechanism used by web sites to store and retrieve +information using your browser. For example, a web site may allow you +to customize the content and layout of the pages you see, so that your +choices are persistent across different visits to that web site. + +The web site is able to remember your preferences by storing a +cookie on your computer. Then, on future visits, the web site retrieves +the information stored in the cookie to format the content of the site +according to your previously specified preferences. + +Thus, cookies play a very useful role in web browsing. +Unfortunately, web sites often store and retrieve information in cookies +without your explicit knowledge or consent. Some of this information may +be quite useful to the web site owners, for example, by allowing them to +collect summary statistics on the number of visits different areas of +the web sites get, or to customize banner advertising. + +The cookies module of the &kcontrol; allows you to set policies +for the use of cookies when you are browsing the web with the +&konqueror; web browser. + +Note that the policies that you set using this control +module will not apply to other web browsers such +as &Netscape;. + + + +Policy + +Using the Policy tab, you can configure the +&kde; applications that will handle cookies. You can do this by specifying a +general cookie policy as well as special cookie policies for certain +domains or hosts. + +The top of the policy tab has a checkbox labeled Enable +cookies. If you leave this unchecked, cookies will be +completely disabled. However, this may make browsing rather +inconvenient, especially as some web sites require the use of browsers +with cookies enabled. + +You will probably want to enable cookies and then set +specific policies on how you want them to be handled. + +The first group of options create settings that apply to all cookies. + + + +Only accept cookies from originating server + +Some pages try to set cookies from servers other than the one +you are seeing the HTML page from. For example, +they show you advertisements, and the advertisements are from another +computer, often one that belongs to a large advertising group. These +advertisements may try to set a cookie which would allow them to +track the pages you view across multiple web sites. +Enabling this option will mean only cookies that come from the +same web server as you are explicitly connecting to will be +accepted. + + + +Automatically accept session cookies + + +An increasingly common use for cookies is not to track your +movements across many visits to a web site, but to just follow what you +do during one single visit. Session cookies are saved as long as you +are looking at the site, and deleted when you leave it. + +Web sites can use this information for various things, most +commonly it is a convenience so that you do not have to keep logging in +to view pages. For example, on a webmail site, without some kind of +session ID, you would have to give your password +again for each email you want to read. There are other ways to +achieve this, but cookies are simple and very common. + +Enabling this option means that session cookies are always +accepted, even if you don't accept any other kind, and even if you +choose to reject cookies from a particular site, session cookies from +that site will be accepted. + + + + +Treat all cookies as session cookies + +If this option is enabled, all cookies are treated as session +cookies. That is, they are not kept when you leave the +web site. + +The definition of leave the web site is vague. +Some cookies may hang around for a little while after you are no +longer viewing any pages on a particular web site. This is +normal. + + + + + +The section for Default Policy sets some +further options that are mutually exclusive — you can choose only one +of these options as the default, but you are free to set a different +option for any specific web server. + + + +Ask for confirmation + +If this option is selected, you will be asked for confirmation +every time a cookie is stored or retrieved. You can selectively accept +or reject each cookie. The confirmation dialog will also allow you to +set a domain specific policy, if you do not want to confirm each +cookie for that domain. + + + +Accept all cookies + +If this option is selected, all cookies will be accepted without +asking for confirmation. + + + +Reject all cookies + +If this option is selected, all cookies will be rejected without +asking for confirmation. + + + + +In addition to the default policy for handling of cookies, which you can +set by selecting one of the three options described above, you can also set +policies for specific host domains using the controls in the Domain +Specific group. + +The Ask, Accept, or Reject policy can be applied to a specific +domain by clicking on the New... button, which +brings up a dialog. In this dialog, you can type the name of the +domain (with a leading dot), then select the policy you want to apply +to this domain. Note that entries may also get added while you are +browsing, if the default policy is to ask for confirmation, and you +choose a general policy for a specific host (for example, by selecting +Reject all cookies from this domain when asked to +confirm a cookie). + +You can also select a specific host domain from the list and click the +Change button to choose a different policy for that +domain than the one shown in the list. + +To delete a domain specific policy, choose a domain from the list, and +then click the Delete button. The default policy will +apply to domains which have been deleted from the list. + + + + +Management + +In the Management tab you can browse and selectively +delete cookies that have been set in the past. + +In the upper part of this dialog, you can see a list of domains displayed +as a tree. Click on the little + next to a domain to see all +cookies that have been set for this particular target domain. If you select one +of these cookies, you will notice that its contents will show up in the frame +Cookie Details below. + +By clicking the Delete button you can now delete the selected +cookie. Click Delete All to delete all cookies stored. + +Choose Reload List to reload the list +from your hard disk. You might want to do this if you have had the +module open and are testing web sites, or have made many changes in the +module itself. + + + + + +
diff --git a/doc/kcontrol/crypto/Makefile.am b/doc/kcontrol/crypto/Makefile.am new file mode 100644 index 000000000..3911417ea --- /dev/null +++ b/doc/kcontrol/crypto/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/crypto diff --git a/doc/kcontrol/crypto/index.docbook b/doc/kcontrol/crypto/index.docbook new file mode 100644 index 000000000..1d43131d1 --- /dev/null +++ b/doc/kcontrol/crypto/index.docbook @@ -0,0 +1,205 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2002-10-17 +3.1 + + +KDE +KControl +crypto +SSL +encryption + + + + + + +Encryption Configuration + + +Introduction +Many applications within &kde; are capable of exchanging information using +encrypted files and/or network transmissions. + + + +Use + +All encryption schemes are only as strong as their +weakest link. In general, unless you have some previous +training/knowledge, it is better to leave this module +unchanged. + +The options within this module can be divided into two +groups: + +Two options along the bottom of the module, Warn on +entering SSL Mode and Warn on leaving SSL +mode, allow you to determine if &kde; should inform you when +you enter or leave SSL encryption. + +The remainder of the options are about determining which +encryption methods to use, and which should not be used. Once you have +selected the appropriate encryption protocols, simply click +Apply to commit your changes. + +Only make changes to this module if specific information +about the strength or weakness of a particular encryption method is +given to you from a reliable source. + + + + + +The <guilabel>SSL</guilabel> Tab + +The first option is Enable TLS support if supported by +the server. TLS is Transport Layer +Security, and is the newest version of SSL. It +integrates better than SSL with other protocols, +and it has replaced SSL in protocols such as POP3 +and SMTP. + +Then next options are Enable SSL v2 and +Enable SSL v3. These are the second and third +revision of the SSL protocol, and it is normal to +enable both. + +There are several different Ciphers +available, and you can enable these separately in the lists labeled +SSL v2 Ciphers to Use and SSL v3 +Ciphers to Use. The actual protocol to use is negotiated +by the application and the server when the connection is +created. + +There are several Cipher Wizards to help +you choose a set that is suitable for your use. + + + +Most Compatible + +Select the settings found to be most compatible with the most +servers. + + + +US Ciphers Only + +Select only the US strong (128 bit or greater) +ciphers. + + + +Export Ciphers Only + +Select only the weak (56 bit or less) ciphers. + + + +Enable All + +Select all ciphers and methods. + + + + +Finally, there are some general SSL settings. + + + +Use EGD + +If selected, OpenSSL will be asked to +use the entropy gathering daemon (EGD) for +initializing the pseudo-random number generator. + + + + +Use entropy file + +If selected, OpenSSL will be asked to +use the given file as entropy for initializing the pseudo-random number +generator. + + + + +Warn on entering SSL mode + +If selected, you will be notified when entering an +SSL enabled site. + + + + +Warn on leaving SSL mode + +If selected, you will be notified when leaving an +SSL based site. + + + + +Warn on sending unencrypted data + +If selected, you will be notified before sending unencrypted +data via a web browser. + + + + + + +The <guilabel>OpenSSL</guilabel> Tab + +Here you can test if your OpenSSL +libraries have been detected correctly by &kde;, with the +Test button. + +If the test is unsuccessful, you can specify a path to the +libraries in the field labelled Path to OpenSSL Shared +Libraries. + + + + +The <guilabel>Your Certificates</guilabel> Tab + +The list shows which certificates of yours &kde; knows about. +You can easily manage them from here. + + + + +The <guilabel>Authentication</guilabel> Tab + +Not yet documented + + + +The <guilabel>Peer SSL Certificates</guilabel> Tab + +The list box shows which site and personal certificates &kde; +knows about. You can easily manage them from here. + + + + + +
diff --git a/doc/kcontrol/desktop/Makefile.am b/doc/kcontrol/desktop/Makefile.am new file mode 100644 index 000000000..545365a4a --- /dev/null +++ b/doc/kcontrol/desktop/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/desktop diff --git a/doc/kcontrol/desktop/index.docbook b/doc/kcontrol/desktop/index.docbook new file mode 100644 index 000000000..070ae0d72 --- /dev/null +++ b/doc/kcontrol/desktop/index.docbook @@ -0,0 +1,84 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + +2005-02-20 +3.4 + + +KDE +KControl +desktop + + + + + +Desktop + + +<guilabel>Appearance Tab</guilabel> + +Here you can configure how icons on your desktop appear. + + + +Standard font: +This option can be used to change the typeface used on the +desktop. Simply select your typeface from the dropdown box. + + +Font size: +You can change the relative size of the text on the Desktop. + + + +Normal text color: +This option lets you select the color of normal (or +unhighlighted) text. + +Text background color: +This option lets you select the background color of +normal text. If left unchecked, the text has a transparent +background. If selected, you can choose the color by pressing the button. + + + +Underline filenames: +Determines if file names are underlined on the +Desktop. + + + + + +<guilabel>Multiple Desktops</guilabel> + +&kde; offers you the possibility to have several virtual +desktops. In this tab you can configure the number of desktops as well +as their names. Just use the slider to adjust the number of +desktops. You can assign names to the desktops by entering text into the +text fields below. + +If you enable Mouse wheel over desktop switches +desktop then scrolling the wheel over an empty space on the +desktop will change the the next virtual desktop numerically, in the +direction you scrolled (either up or down). + + + + + +
diff --git a/doc/kcontrol/desktopbehavior/Makefile.am b/doc/kcontrol/desktopbehavior/Makefile.am new file mode 100644 index 000000000..9ff6d953a --- /dev/null +++ b/doc/kcontrol/desktopbehavior/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/desktopbehavior diff --git a/doc/kcontrol/desktopbehavior/index.docbook b/doc/kcontrol/desktopbehavior/index.docbook new file mode 100644 index 000000000..9011f265d --- /dev/null +++ b/doc/kcontrol/desktopbehavior/index.docbook @@ -0,0 +1,198 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + +2005-02-20 +3.4 + + +KDE +KControl +desktop + + + + + +Desktop Behavior + + +<guilabel>Desktop</guilabel> Tab + + + +Show icons on desktop + +Uncheck this option if you do not want to have icons on the +desktop. Without icons the desktop may be somewhat faster, but you +will no longer be able to drag files to the desktop. +This will not remove any files already stored on the desktop, +they will instead be hidden. + +If this is enabled, you may also enable the ability to Allow programs in desktop window. + +Enabling this option allows you to set a program as your desktop +background, for example xearth, or &kworldclock; + + + + + +Show tooltips + +Check this option if you would like to see tooltips for icons on +the desktop as you hover the mouse over them. These tooltips display +information about the file represented by the icon. Depending on the +type of file, the information can range from simple file size and +creation dates for unfamiliar file types, to complete meta information +such as the content of tags for music files. + + + + +Menu Bar at Top of Screen: + +This option determines whether there is a menu across +the top of the &kde; Desktop similar to the style of &MacOS;. + +The default is None. If you select +Desktop menu bar one static menu is shown at the +top of the screen, displaying the desktop menu. Finally there is +Current application's menu bar (Mac OS-style). +If this option is selected, applications won't have their menu bar +attached to their own window anymore. Instead, there is one menu bar +at the top of the screen which shows the menus of the currently active +application. You might recognize this behavior from &MacOS;. + + + + + + +Mouse button actions: + + +The mouse button section allows you to determine what happens when +you click one of the three mouse buttons on the Desktop (where there is +no window). + +Not all mice have three buttons. Two button mice can +usually activate the Middle button by +pressing both the Left and +Right mouse buttons at the same +time. + +For each of the three mouse buttons, you can select: + + + +No Action +When you use this mouse button, nothing +happens. + + + +Window list menu +This brings up a submenu with all the virtual desktops. +Under each virtual desktop, you can select any window currently located +on that desktop. Once selected, &kde; will switch to that desktop, and +place the focus on that window. + + + +Desktop Menu. +This brings up a submenu with commands specific to +&kde;. You can create icons, edit bookmarks, cut and paste, +run commands, configure &kde;, arrange icons, lock the session and log +out of &kde;. The exact content of the menu varies depending on the +current status of &kde;. + + + +Application Menu +This brings up the Application Menus +(also know as the K Menus), so you can start a new +application. + + + +Custom Menu 1 +Custom Menu 2 + +You may also configure up to two custom menus. If you choose either of these, the Edit... becomes available, allowing you to edit the contents of the custom menus. + + + + + + + + + + + + +<guilabel>File Icons</guilabel> + +First are two options regarding the placement of icons: + + + +Automatically line up icons +If this option is enabled, &kde; will align icons on a +grid on the desktop. If it is not enabled, you may drop icons +anywhere, and they will not be aligned for you. + + +Show hidden files +If this option is enabled, then all hidden files will +appear on the desktop. Generally this only clutters your desktop area, +but if you are often working with hidden files or folders, this can +be useful. +Be very careful when deleting or modifying hidden files. +Many of these files are configuration files and are essential for the +correct operation of your computer. + + + + +The &kde; desktop has a preview feature for many file types, +including HTML files, images, &PostScript; and +PDF, sound, web archives (if you have the +appropriate &konqueror; plugin installed) and text files. + +if you enable previews for one of these, files of that particular +file type will not be represented by standard icons on the desktop, but +will instead be shown as miniature previews. On slow computers, the +previews can take some time to show up, so you might not want to enable +this feature. + + + + +<guilabel>Device Icons</guilabel> + +On some operating systems (&Linux; and FreeBSD, so far) &kde; can +dynamically display icons for each mountable +device you have available. This could be &CD-ROM; drives, floppy disk +drives, or network shares. + +If you enable this, you can choose what kind, if any, of these +devices you would like quick access icons to be displayed for. + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/ebrowsing/Makefile.am b/doc/kcontrol/ebrowsing/Makefile.am new file mode 100644 index 000000000..4d7741915 --- /dev/null +++ b/doc/kcontrol/ebrowsing/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/ebrowsing diff --git a/doc/kcontrol/ebrowsing/index.docbook b/doc/kcontrol/ebrowsing/index.docbook new file mode 100644 index 000000000..da9167f6e --- /dev/null +++ b/doc/kcontrol/ebrowsing/index.docbook @@ -0,0 +1,156 @@ + + + +]> + +
+ + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; +&Yves.Arrouye; &Yves.Arrouye.mail; + + + +2002-10-16 +3.1 + + +KDE +KControl +enhanced browsing +web shortcuts +browsing + + + + + +Web Shortcuts + + + +Introduction + +&konqueror; offers some features to enhance your browsing +experience. One such feature is Web Shortcuts. + +You may already have noticed that &kde; is very Internet friendly. +For example, you can click on the Run menu +item or type the keyboard shortcut assigned to that command (AltF2, +unless you have changed it) and type in a URI. +Uniform Resource Identifier. A standardized way of +referring to a resource such as a file on your computer, a World Wide +Web address, an email address, +etc.... + +Web shortcuts, on the other hand, let you come up with new pseudo +URL schemes, or shortcuts, that basically let you +parameterize commonly used +URIs. For example, if you like the Google search +engine, you can configure KDE so that a pseudo URL +scheme like gg will trigger a search on +Google. This way, typing gg:my +query will search for my +query on Google. + +One can see why we call these pseudo URL +schemes. They are used like a URL scheme, but the +input is not properly URL encoded, so one will type +google:kde apps and not +google:kde+apps. + +You can use web +shortcuts wherever you would normally use +URIs. Shortcuts for several search engines should +already be configured on your system, but you can add new keywords, and +change or delete existing ones in the enhanced browsing control +module. + + + + + +Use + +There is a single tab in this control module. The title of the tab +is Keywords. This tab features two main boxes, one +for Internet Keywords and one for web shortcuts. + + + +Web Shortcuts + +The descriptive names of defined web shortcuts are shown in a +listbox. As with other lists in &kde;, you can click on a column +heading to toggle the sort order between ascending and +descending, and you can resize the columns. + +If you double-click on a specific entry in the list of defined +search providers, the details for that entry are shown in a popup +dialog. In addition to the descriptive name for the item, you can +also see the URI which is used, as well as the +associated shortcuts which you can type anywhere in &kde; where +URIs are expected. A given search provider can have +multiple shortcuts, each separated by a comma. + + The text boxes are used not only for displaying information +about an item in the list of web shortcuts, but also for modifying or +adding new items. + +You can change the contents of either the Search +URI or the URI Shortcuts text box. +Click OK to save your changes or +Cancel to exit the dialog with no +changes. + +If you examine the contents of the Search +URI text box, you will find that most, if not all of the +entries have a in them. This sequence of two +characters acts as a parameter, which is to say that they are replaced +by whatever you happen to type after the colon character that is +between a shortcut and its parameter. Let's consider some examples to +clarify this idea. + +Suppose that the URI is +http://www.google.com/search?q=\{@}, and +gg is a shortcut to this +URI. Then, typing +gg:alpha is +equivalent to +http://www.google.com/search?q=alpha. +You could type anything after the : character; +whatever you have typed simply replaces the +characters, after being converted to the appropriate character set for +the search provider and then properly +URL-encoded. Only the part of +the search URI is touched, the rest of it is +supposed to be properly URL-encoded already and is +left as is. + +You can also have shortcuts without parameters. Suppose the +URI was +file:/home/me/mydocs/kofficefiles/kword and the +shortcut was mykword. Then, typing +mykword: is the same as typing the complete +URI. Note that there is nothing after the colon +when typing the shortcut, but the colon is still required in order for +the shortcut to be recognized as such. + +By now, you will have understood that even though these shortcuts +are called web shortcuts, they really are shortcuts to parameterized +URIs, which can point not only to web sites like +search engines but also to anything else that can be pointed to by a +URI. Web shortcuts are a very powerful feature of +navigation in &kde;. + + + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/email/Makefile.am b/doc/kcontrol/email/Makefile.am new file mode 100644 index 000000000..137c9a103 --- /dev/null +++ b/doc/kcontrol/email/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/email diff --git a/doc/kcontrol/email/index.docbook b/doc/kcontrol/email/index.docbook new file mode 100644 index 000000000..b34e44b13 --- /dev/null +++ b/doc/kcontrol/email/index.docbook @@ -0,0 +1,103 @@ + + + +]> + +
+ + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; +&Jost.Schenck; &Jost.Schenck.mail; +&Mike.McBride; &Mike.McBride.mail; + + + +2002-09-01 +3.1.00 + + +KDE +KControl +email +e-mail + + + + +Email + + + +Introduction + +The email module of the &kcontrol; allows you to enter and save some +basic email information. This information is used when performing functions +related to email within &kde;, for example, when sending bug reports from the +&kde; crash handler application. + +Programs such as &kmail;, which are used for reading and sending +email, may offer many more options for customizing the way in which +email is handled. These options depend upon the specific program being +used. &kmail;, for instance, offers its own configuration +facilities. + +Some of the information needed for configuring email should have +been provided by your internet service provider +(ISP). If you are connected to a local network, then +the system administrator of your network should be able to help +you. + + + + +Use + +&kde; automatically establishes some of the information for this control module +using the +login information on the system. You will need to enter the remaining information. +Looking at the page from top to +bottom, the options are: + + + +Full name +Type your full name as you would like it to appear in the email +messages that you send. + + + +Organization +If you work for a company or +organization, you can enter its name in this text box. + + + +Email address +To be able to use email, you must enter your email +address here. + + + +Reply-to address +If replies to your email messages should be sent to a different +address, you can enter that address in this text box. + + + + + + +
+ + + diff --git a/doc/kcontrol/energy/Makefile.am b/doc/kcontrol/energy/Makefile.am new file mode 100644 index 000000000..b45cc2539 --- /dev/null +++ b/doc/kcontrol/energy/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/energy diff --git a/doc/kcontrol/energy/index.docbook b/doc/kcontrol/energy/index.docbook new file mode 100644 index 000000000..94d7a2745 --- /dev/null +++ b/doc/kcontrol/energy/index.docbook @@ -0,0 +1,110 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +energy + + + + +Energy + + +Introduction + +This module is useful for any computer having a monitor labeled +Energy Star Compliant. (Energy Star Compliant equipment is equipment +that can be configured to automatically enter a power saving mode when +appropriate, without human intervention.) + +Energy Star Compliance can be applied to nearly any +electrical device. This module, however, does not spin down hard +drives, does not shutdown printers, &etc; These settings only affect +the behavior of your monitor. + +For information on shutting down components on a laptop, do not +use this module. Instead, install kdeutils, and refer to the module +entitled Laptop +Power Control Center, for details. + +In the case of computer monitors, the computer can control the +monitor, switching it between four states: On, Standby, Suspend, and +Off. + +The following list of states is a generalization, and you +may find that your monitor will differ from the descriptions +below. + +ON is the normal operation of your monitor while you are using +it. + +STANDBY is usually a minor power saving level. +This setting usually involves blanking the screen, and not firing the +electron gun, but keeping the electron gun energized +and ready to go. When you need to use the monitor again, the monitor +will come back on very quickly. + +SUSPEND is a very low power mode alternative. +With most monitors the screen is blanked, the electron +gun is shut down and the magnets that control the electron gun are +powered down. While the power saving is substantial, to reactivate +the monitor may take up to 10-15 seconds. The computer should always +be able to return the monitor to On or Standby while in suspend +mode. + +OFF, usually means just that. The computer +monitor is turned off. This usually means that the computer will not +be able to turn the monitor back on by itself. Obviously, this keeps +power consumption to a bare minimum (zero). + + + +Use + +Using this module is very simple: + +If your monitor is Energy Star Compliant, then you should put a +mark in the check box labeled Enable Display Energy +Saving. This will activate the energy saving +commands. + +The next three slider bars, tell the computer how many minutes of +inactivity before automatically switching to a new state. These numbers +can be adjusted with either the sliders, or the spin boxes. + +These times are not additive, but all start counting at +zero. + +As an example: + +If you set the Standby Mode to 10 minutes, the Suspend mode to 20 +minutes, and the Power off at 30 minutes, and you stop using your +computer at 9:00, then the monitor will: Enter Standby mode +at 9:10, enter Suspend mode at 9:20, and shut the power off at +9:30. + +When you are happy with the settings, click +OK. + + + + + +
diff --git a/doc/kcontrol/filemanager/Makefile.am b/doc/kcontrol/filemanager/Makefile.am new file mode 100644 index 000000000..8e045365e --- /dev/null +++ b/doc/kcontrol/filemanager/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/filemanager diff --git a/doc/kcontrol/filemanager/index.docbook b/doc/kcontrol/filemanager/index.docbook new file mode 100644 index 000000000..be620a8cf --- /dev/null +++ b/doc/kcontrol/filemanager/index.docbook @@ -0,0 +1,297 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2002-10-16 +3.1 + + +KDE +KControl +file manager + + + +File Manager + +In this module, you can configure various aspects of +&konqueror;'s file manager functionality. + +&konqueror;'s web browser functionality has its own configuration +modules. + + +Use + + The configuration options for the file manager are +organized under tabs as follows: + + + +Appearance +This tab contains options for customizing the appearance of +&konqueror; windows, such as the default font +text color. + + + +Behavior +This tab contains a couple of &konqueror; +global options. + + + +Previews + +On this tab, you can customize when &konqueror; should show +previews. + + + + + +Appearance + +The following settings determine how text and colors are displayed in +&konqueror; File Manager mode windows. + + + +Standard font: + +This is the font used to display text such as file names in +&konqueror; windows. + + + + +Font size: + + +Lets you control the size of text, while the Standard +Font setting determines the font face used. + + + + +Normal text color: + +Determines the standard text color. + + + + +Height for icon text: + +The maximum number of lines that can be used to draw icon text. Long lines are truncated at the end of the last line. + You can still see word-wrapped filenames by pausing the mouse pointer over the icon. + + + + +Width for icon text: + +The maximum width for the icon text when &konqueror; is in multi-column view mode. + + + + +Underline filenames: + +When Underline filenames is checked, + filenames will be underlined so that they look like links on a web + page. + + + + +Display file sizes in bytes: + +The final check box on this page determines how &konqueror; +displays file sizes, when you are in one of the file manager modes +that normally shows this information. If you check the +Display file sizes in bytes box then file sizes +are always shown in bytes. If you leave it unchecked then file sizes +are shown in bytes, kilobytes or megabytes, depending on their +size. + + + + + + +Behavior + + +<guilabel>Misc Options</guilabel> + +Open folders in separate windows + If this option is checked, a new +&konqueror; window will be created when you open a +folder, rather than simply showing that folder's contents in the + current +window. + + + +Show network operations in a single window + +If unchecked, and you download a +file, a dialog box will appear that shows the status of the +download. + + + Download Dialog Box + + + Download Dialog Box + + Individual Download Dialog Box + + + + +If you start a new transfer, another dialog box will +appear. (&Netscape; users will be familiar with +this behavior) + +If checked, all transfer status windows will be grouped +together under a single dialog box. + + Download Dialog Box + + + Download Dialog Box + + Collected Download Dialog Box + + + + +If you choose to use the Collected download dialog box, you can +delete transfers by clicking once on the transfer you want to cancel, +then clicking the Delete Button on the +left. + + + + + +Show file tips + + Here you can control if, when moving the mouse over a file, you +want to see a small popup window with additional information about +that file. + + + + +Show previews in file tips + +Here you can control if the file tip should show a +thumbnail preview of the file. + + + + + +Home URL +This is the &URL; (⪚ a +folder or a web page) where &konqueror; will jump to +when the Home button is pressed.The +default is the users home folder, indicated with a +~. + + + +You can set a path that is your Home URL by +typing into the text field, or using the browse +icon. The default is ~ which is a standard +shortcut for your $HOME folder. When you choose the +home icon on your panel, in a file open or save +dialog, or from within &konqueror; in file manager mode, this is the +folder you will be shown. + +The Ask confirmation for setting tells +&konqueror; what to do when you choose to Delete, +Trash, or Shred a file in a &konqueror; +window. If any box is checked, &konqueror; asks for confirmation before +performing the corresponding action. + + + + +Previews + +&konqueror; has a +preview feature for many file types, including HTML +files, images, &PostScript; and PDF, sound, web +archives (if you have the appropriate &konqueror; plugin installed) +and text files. + +If you enable previews for one of these, files of that particular +file type will not be represented by standard icons in the filemanager, but +will instead be shown as miniature previews. On slow computers, the +previews can take some time to show up, so you might not want to enable +this feature. + +In this module you can specify which protocols +you wish the previews to be available for. Creating the previews +requires that &konqueror; download at least part of the file, in order +to create the preview. &konqueror;, like the rest of &kde; is +entirely network transparent, and will treat a remote &FTP; folder +just as if it was on your local hard drive. This can result in a +delay, especially if you are viewing, for example, a folder full of +images over a slow network connection. + +For each protocol, you can independently enable or disable +previews. For example, you might enable previews for +NFS mounted drives if you have a fast network, but +disable them for &FTP; because your Internet connection is via a +modem. + +You can further refine the maximum size file that &konqueror; +will attempt to show a preview for. The default is 1 MB. In other +words, by default, if a file is 900 kB in size, and the protocol you +are viewing the folder with is enabled, then &konqueror; will +create a preview icon for it. If the file is 1.1 MB in size, +&konqueror; will not make a preview, even if the protocol is +enabled. + +You can turn on and off previews on the fly from +within &konqueror;, using the View menu. For +example, if you normally want to see image previews on every protocol, +but find a particular server is very slow to send you the data, you +might turn it off for the present, and turn it on again later. + +You may also like to enable the checkbox Increase size +of previews relative to icons, in order to see more +information in the thumbnails. + +Many image files already contain a thumbnail. You can enable +the Use thumbnails embedded in files to make use +of these. This will save time waiting for thumbnails to be created +when viewing a folder full of images you have not previously seen in +&konqueror;. + + + + + + + +
diff --git a/doc/kcontrol/filemanager/kfileman1.png b/doc/kcontrol/filemanager/kfileman1.png new file mode 100644 index 000000000..0505d604d Binary files /dev/null and b/doc/kcontrol/filemanager/kfileman1.png differ diff --git a/doc/kcontrol/filemanager/kfileman2.png b/doc/kcontrol/filemanager/kfileman2.png new file mode 100644 index 000000000..6c8d17d75 Binary files /dev/null and b/doc/kcontrol/filemanager/kfileman2.png differ diff --git a/doc/kcontrol/filetypes/Makefile.am b/doc/kcontrol/filetypes/Makefile.am new file mode 100644 index 000000000..ae43c3018 --- /dev/null +++ b/doc/kcontrol/filetypes/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/filetypes diff --git a/doc/kcontrol/filetypes/index.docbook b/doc/kcontrol/filetypes/index.docbook new file mode 100644 index 000000000..a838156db --- /dev/null +++ b/doc/kcontrol/filetypes/index.docbook @@ -0,0 +1,338 @@ + + + +]> + +
+ + +File Associations + +&Mike.McBride; &Mike.McBride.mail; + + + +2003-10-13 +3.2 + + +KDE +KControl +files association +association + + + +File Associations + + +Introduction + +One of the most convenient aspects of &kde;, is its ability to +automatically match a data file, with its application. As an example, +when you click on your favorite &kword; document in &konqueror;, &kde; +automatically starts &kword;, and automatically loads that file into +&kword; so you can begin working on it. + +In the example above, the &kword; Data file is +associated with &kword; (the application). These +file associations are crucial to the functioning of &kde;. + +When &kde; is installed, it automatically creates hundreds of file +associations to many of the most common data types. These initial +associations are based on the most commonly included software, and the +most common user preferences. + +Unfortunately, &kde; can not: + + +predict every possible combination of software and data files +prepare for file formats not yet invented +or predict everyone's favorite application for certain file formats + + +You can change your current file associations or add new file +associations using this module. + +Each file association is recorded as a mime type. +&MIME; stands for Multipurpose Internet Mail +Extensions. It allows a computer to determine the type of file, +without opening and analyzing the format of each and every file. + + + + +How to use this module + +The file associations are organized into several categories, and +at a minimum you will have: + + +Application +Audio +Image +Inode +Message +Multipart +Print +Text +Video + + +All of the file associations are sorted into one of these +categories. + +There is also an overview category All, which +displays all the file types in one list, without categorizing +them. + +There is no functional difference between any of the +categories. These categories are designed to help organize your file +associations, but they do not alter the associations in any way. + + +The categories are listed in the box labeled Known +Types. + +You can explore each of these categories, and see the file +associations contained within each one, by simply double-clicking on the +category name. You will be presented with a list of the associated +mime-types under that category. + +You can also search for a particular &MIME; type by using the +search box. The search box is labeled Find filename +pattern and is located above the category list. + +Simply type the first letter of the &MIME; type you are interested +in. The categories are automatically expanded, and only the mime-types +that include that letter are displayed. + +You can then enter a second character and the mime-types will be +further limited to mime types containing those two +characters. + + +Adding a new mime type + +If you want to add a new &MIME; type to your file associations, +you can click on the Add... button. A small +dialog box will appear. You select the category from the drop down +box, and type the &MIME; name in the blank labeled Type +name. Click OK to add the new mime +type, or click Cancel to not add any new +mime-types. + + + + +Removing a mime type + +If you want to remove a &MIME; type, simply select the &MIME; +type you want to delete by clicking once with the mouse on the &MIME; +type name. Then click the button labeled +Remove. The &MIME; type will be deleted +immediately. + + + + +Editing a mime types properties + +Before you can edit a &MIME; types property, you must first +specify which &MIME; type. Simply browse through the categories until +you find the &MIME; type you want to edit, then click once on it with +the mouse. + +As soon as you have selected the &MIME; type, the current values of +the &MIME; type will appear in the module window. + +You will notice the current values are split into two tabs: +General and Embedding + + + +General + +There are 4 properties for each &MIME; type in this tab: + + +Mime Type Icon is the icon that +will be visible when using &konqueror; as a file +manager. +Filename Patterns is a search +pattern which &kde; will use to determine the &MIME; type. +Description is a short description +of the file type. This is for your benefit only. +Application Preference Order +determines which applications will be associated with the specified +&MIME; type. + + + + + +Embedding Tab + +The Embedding tab allows you to determine if an file will be +viewed within a &konqueror; window, or by starting the +application. + + + + + + + +Changing the Icon + +To change the icon, simply click on the Icon button. A dialog box +will appear, which will show you all available icons. Simply click once +with the mouse on the icon of your choice, and click +OK. + + + + +Editing the mime-type patterns + +The box labeled Filename Patterns, determines +what files will be included within this mime-type. + +Usually, files are selected based on their suffix. (Examples: +Files that end with .wav are sound +files, using the WAV format and files that end in .c are program files written in C). + +You should enter your filename mask in this combo box. + +The asterisk (*) is a wildcard character that +will be used with nearly every mime type mask. A complete discussion +of wildcards is beyond the scope of this manual, but it is important +to understand that the asterisk (in this context), +matches any number of characters. As an example: +*.pdf will match +Datafile.pdf, Graphics.pdf +and User.pdf, but not PDF, +Datafile.PDF, or +.pdf. + +It is very beneficial to have multiple masks. One for lower +case, one for upper case, &etc; This will help ensure that &kde; can +determine the file type more accurately. + + + + +Editing a mime types description. + +You can type a short description of the &MIME; type in the text +box labeled Description. This label is to help +you, it does not affect the function of the &MIME; type. + + + + +Editing the application associations + +There are four buttons (Move Up, +Move Down, Add and +Remove) and a combo box (which lists the +applications) which are used to configure the applications. + +The combo box lists all of the applications associated with a +specific &MIME; type. The list is in a specific order. The top +application is the first application tried. The next application down +the list is the second, etc. + +What do you mean there is more than one application per +&MIME; type? Why is this necessary? + +We started out by saying that &kde; comes preconfigured with +hundreds of file associations. The reality is, each system that &kde; +is installed on has a different selection of applications. By +allowing multiple associations per &MIME; type, &kde; can continue to +operate when a certain application is not installed on the +system. + +As an example: +For the &MIME; type pdf, there are two +applications associated with this file type. The first program is +called PS Viewer. If your system does not +have PS Viewer installed, then &kde; +automatically starts the second application Adobe Acrobat +Reader. As you can see, this will help keep &kde; running +strong as you add and subtract applications. + +We have established that the order is important. You can change +the order of the applications by clicking once with the mouse on the +application you want to move, and then clicking either Move +Up or Move Down. This will shift +the currently selected application up or down the list of +applications. + +You can add new applications to the list by clicking the button +labeled Add. A dialog box will appear. Using the +dialog box, you can select the application you want to use for this mime +type. Click OK when you are done, and the +application will be added to the current list. + +You can remove an application (thereby ensuring that the +application will never run with this &MIME; type by clicking once on the +name of the application, and clicking the Remove +button. + +It is a good idea to use the Move Up +and Move Down buttons to adjust the unwanted +application to a lower position in the list, rather than deleting the +application from the list entirely. Once you have deleted an +application, if your preferred application should become compromised, +there will not be an application to view the data document. + + + + +Embedding +By clicking on the Embedding tab, you are +presented with three radio buttons in the Left click +action group. These determine how &konqueror; views the selected +&MIME; type: + + +Show file in embedded viewer +If this is selected, the file will be shown within the &konqueror; window. +Show file in separate viewer +This will cause a separate window to be created when showing this mime-type. +Use group settings. +This will cause the mime-type to use the settings for the mime-type group. +(if you are editing an audio mime type, then the settings for the audio group are used). + + +Below this is a listbox labeled Services Preference +Order. + +When you are in &konqueror;, you can +right mouse click, and a menu will with an +entry labeled Preview with... will appear. This box +lists the applications that will appear, in the order they will +appear, under this menu. + +You can use the Move Up and +Move Down buttons to change the order. + + + + +Making changes permanent + +When you are done making any changes to mime types, you can click +Apply to make your changes permanent, but keep +you in this module. + + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/fonts/Makefile.am b/doc/kcontrol/fonts/Makefile.am new file mode 100644 index 000000000..b79d06618 --- /dev/null +++ b/doc/kcontrol/fonts/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/fonts diff --git a/doc/kcontrol/fonts/index.docbook b/doc/kcontrol/fonts/index.docbook new file mode 100644 index 000000000..cfe34bab7 --- /dev/null +++ b/doc/kcontrol/fonts/index.docbook @@ -0,0 +1,121 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2003-09-22 +3.2 + + +KDE +KControl +fonts + + + + + +Fonts + +This module is designed to allow you to easily select different +fonts for different parts of the &kde; Desktop. + +The panel consists of different font groups to give you a lot of +flexibility in configuring your fonts: + + +General: Used everywhere the other font +groups don't apply + +Fixed width: Anywhere a +non-proportional font is specified + + + +Toolbar: Font used in &kde; application +toolbars + +Menu: Font used in &kde; application +menus + +Window title: Font used in the window +title + +Taskbar: Font used in the taskbar +panel applet + +Desktop: Font used on the desktop +to label icons + + + +Each font has a corresponding Choose... +button. By clicking on this button, a dialog box appears. You can +use this dialog box to choose a new font, font style, size and +character set. Then press OK. + +An example of the font you have chosen will be displayed in the space +between the font group name and the Choose... +button. + +When you are done, simply click OK, and +all necessary components of &kde; will be restarted so your changes +can take affect immediately. + +The Adjust All Fonts... button allows you to +quickly set properties for all the fonts selected +above. A font selection dialog similar to the standard one will +appear, but you will notice checkboxes that allow you to change the +Font, Font style or +Size independently of each other. You can +choose any one, two, or three of these options, and they will be +applied to all the font groups. + +For example, if you have selected several different font faces +above, and realize they are all a size too big (this often happens +when you change screen resolution, for instance), you can apply a new +font size to all the fonts, without affecting your customized font +faces and styles. + + +Anti-alias text + +To use anti-aliasing, simply place a mark in the checkbox labeled +Use anti-aliasing for fonts. + +Placing a mark in the checkbox will allow you to specify which range of +fonts will not be anti-aliased. This range is specified +with the two combo boxes on the same line. + +You can also choose the method that &kde; uses to create an anti-alias +look to your fonts, and how strongly it should be applied. If you are not +familiar with the individual methods, you should leave this option +alone. + + + + +The ability to use anti-aliased fonts and icons requires that you have +support in both X and the &Qt; toolkit, that you have suitable fonts +installed, and that you are using the built-in font serving capabilities +of the X server. If you still are having problems, please contact the +appropriate &kde; mailing list, or check the +FAQ. + + + + + +
diff --git a/doc/kcontrol/helpindex/Makefile.am b/doc/kcontrol/helpindex/Makefile.am new file mode 100644 index 000000000..0529b36f5 --- /dev/null +++ b/doc/kcontrol/helpindex/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/helpindex.html diff --git a/doc/kcontrol/helpindex/index.docbook b/doc/kcontrol/helpindex/index.docbook new file mode 100644 index 000000000..ba7acdc80 --- /dev/null +++ b/doc/kcontrol/helpindex/index.docbook @@ -0,0 +1,144 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + + +2002-10-17 +3.1 + + +KDE +KControl +Help Index +Index + + + + + +Help Index + +At the time of writing, for most installations of &kde; the entire search engine function in &khelpcenter; is disabled, and settings made in this &kcontrol; module will have no effect. We hope to have it back in a future release. + +&kde; comes with a lot of documentation for applications and +components. While it is possible to just browse the manuals until you +find that piece of information you're looking for, this may be a very +time-consuming task. To make this easier for you, &kde; offers +fulltext search using a program called +ht://dig. It works quite similar to search +engines on the web, in fact some search engines you know might even use +it. Just click on the Search tab in the +&khelpcenter;, enter the word you are looking for, click +Search and enjoy! + +However, to make use of this feature, +ht://dig has to be installed on your system +and &kde; has to be configured to make use of it. This control module +tries to help you doing the latter. If you haven't installed +ht://dig and it wasn't shipped with your +operating system you have to get ht://dig yourself. Have a look at +the ht://dig homepage on how +to download and install it. + +When you first start, you are in display mode only. To modify +your settings, click on Administrator Mode. If +you are logged in as root, +you will go straight to the change dialog. If not, &kde; will ask for +a superuser password. + + +Use + +There are two important things to tell &kde; so it can make use of the +fulltext search engine: + + +where to find the ht://dig programs +KDE uses for fulltext search +where to search + + + + +The <application>ht://dig</application> Programs + + There are three programs &kde; needs that come with +ht://dig: htdig, +htsearch and htmerge. For each program you +have to provide the full path including the program name, for example: /usr/bin/htdig. + +Where exactly these programs are installed depends on your operating +system or your distribution. However, there are some good guesses you might want +to try: + + + +htdig and htmerge are +often found in /usr/bin/ or in something +like /usr/local/www/htdig/bin/. + +the htsearch command is often found in a sub +folder called cgi-bin, for example +/usr/local/httpd/cgi-bin/. + + + + +To find out where for example htdig is installed +you can always type whereis htdig on the +console. whereis will look for the specified command in the +standard execution path folders. However, folders like cgi-bin are often not in the standard execution +path. + + + + +Scope and Search Paths + +In this section you can choose which help resources should be indexed, +&ie; made available to the search engine. + +In the Scope frame you can select some +typical resources you want to be indexed, &ie; the &kde; help files, +and the information offered by the man and +info commands. Note that some of those may still be +disabled, which means that support for them has not been added +yet. + +Maybe you have additional files you want to access using the +&khelpcenter; fulltext search feature. For example, you might have an +HTML reference installed in +/home/jdoe/docs/selfhtml. By adding this path to +the list of additional search paths you make this documentation +available to &khelpcenter;'s fulltext search, too. Just click on the +Add button and a file dialog will ask you for +an additional search folder. Select +/home/jdoe/docs/selfhtml and click +OK. To remove an additional search path, just +select it and click Delete. + +Your changes to the scope and additional search paths +will not take effect if you don't click on the Generate +index button. + + + + + +
+ diff --git a/doc/kcontrol/icons/Makefile.am b/doc/kcontrol/icons/Makefile.am new file mode 100644 index 000000000..9de711f69 --- /dev/null +++ b/doc/kcontrol/icons/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/icons diff --git a/doc/kcontrol/icons/index.docbook b/doc/kcontrol/icons/index.docbook new file mode 100644 index 000000000..199a35275 --- /dev/null +++ b/doc/kcontrol/icons/index.docbook @@ -0,0 +1,233 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + +2003-09-22 +3.2 + + +KDE +KControl +icon + + + +Icons + + +Introduction + +&kde; comes with a full set of icons in several sizes. These icons +are being used all over &kde;: the desktop, the panel, the &konqueror; file +manager, in every toolbar of every &kde; application, etc. The icons +control module offers you very flexible ways of customizing the way &kde; +handles icons. You can: + + +install and choose icon themes +choose different icon sizes +assign effects to icons (for example make them +semi-transparent or colorize them) +configure these settings for each of the different places +icons will be used in: for example the desktop, toolbars &etc; + + + +Please note that some of these settings may depend on +your selected icon theme. &kde; comes with two icon themes by default, +&kde;-Classic (HiColor) and Crystal SVG. There is also a low color theme +in the kdeartwork package, along with others. + + + + +<guilabel>Theme</guilabel> + +Starting at the top, you can see some example icons. These change +in appearance depending on the icon theme you select. Most default +installations will have only one icon theme available, the &kde; default +Crystal SVG theme. There are others contained separately in the +kdeartwork package, and you can download more from the Internet. + +Use the Install New Theme... to browse to the +location of newly downloaded themes, and they will then become available +to select from above. + + + + +Advanced + +Looking at this second page of the icons control module, you +will see two areas: + + + +An area labelled Use of Icon. Here you can +choose which particular usage of icons you want to configure, for +example Toolbar or Panel. + + + A preview area where you can see how +icons of the selected kind will look using the current +settings. Note that the state of this preview also depends on the icon +state selected in the effects below (do not worry +about that now, we will explain that below). + + +When you want to configure icons, first select the usage of icons +you want to configure. Change the settings until you like the +preview. You can then choose a different icon usage and configure +that. At the end, if you are satisfied with your settings, click +OK or Apply to take the +changes in effect. + +There are two further options to consider, +Size and Effects. + + +Icon Size + +You have two options relating to icon sizes. First, you can choose +from a list of icon sizes. Second, you can tell &kde; to draw all icons +using double sized pixels. The largest icon sizes are especially useful +for visually impaired people. + +Which sizes will be offered by the icon size listbox depends on +the icon theme you have selected in the icon themes control module. For +example, the low color icon theme only offers the sizes 16 and 32 for +desktop icons and 16, 22 and 32 for toolbar icons. The HiColor theme +offers icon sizes 16, 32 and 48 as well as sizes from 64 to 128. +However, as &kde; can not have all these icon sizes in store, icons +using size 64 to 128 will be automatically generated which may result in +a loss of quality. + +If the icon sizes offered by your chosen icon theme are not enough +for you, there is still the option Double-sized +pixels. If this option is selected, all icons will have +double sized pixels, &ie; a 2x2 block instead of normal pixels. While +this makes it possible to achieve very large icon sizes, the quality is +poor: icons will look blocky, an effect you may remember +if you've grown up using a Sinclair ZX Spectrum or similar. If this is +an option for you, using the large sizes offered by &kde;'s HiColor +icon theme will always result in a much better quality than using the +low color icon theme with double sized pixels. + + +You can also choose animated icons. Many of the icons have +animations associated with them. Enable the checkbox labelled +Animate Icons, to enable this effect, but note +that it may appear slow or jerky if your graphics card is old or you +are low on memory. + + + + +Effects + +Finally you can configure certain filters to be +applied on icons which are in one of three states: + + + +Default +This is how the icon will look normally. + + +Active: +This is how the icon will look when the mouse cursor is over the icon. + + +Disabled: +This is how the icon will look if its corresponding action is +disabled, &ie; clicking on it will not lead to any +result. + + + +Select one of these states, and press the Set +Effect... button to configure a corresponding icon effect. +Please note that this configuration will only affect icons of the +currently selected Use of Icon category (see +above): configuring an effect for active icons, while +Toolbar icon usage is selected, will +not affect active icons used in other +places. + +Below the list of icon states there are two options: you can +configure an effect and you can select the +Semi-transparent option, which will make the +background shine through the icon. To the right of the +effects list box there is a slider button to pass additional parameters to +a filter for colours and Amount. + + +The following effects can be applied to icons: + + + +No Effect: +Icons will be used without applying any +effect. + + +To Gray: +This filter will apply a grayish look to the icon. Click +Setup... to configure the intensity of this filter. Note +that it is customary for most user interfaces to use this effect for disabled +icons only. + + +Colorize: +Icons will be colorized using a custom color. For example, you +may configure active icons (&ie; the icon the mouse cursor is over) to +shine golden. Use the color and Amount buttons to configure the used color and the intensity of the colorization. + + +Gamma: +A different gamma value will be applied to all icons. If you're +no photographer and don't know what Gamma is: it's quite similar to what people +call contrast. Just play around with the gamma settings by clicking on +Setup... to get a feeling for this +effect. + + +Desaturate: +Icons will be drawn desaturated. This is quite similar to the +Color setting on your television. Click +Setup... to configure the amount of desaturation. + + + +To Monochrome: + +Icons will be drawn using only the two colours selected. + + + + + + + + + + + +
diff --git a/doc/kcontrol/index.docbook b/doc/kcontrol/index.docbook new file mode 100644 index 000000000..cdaa3390f --- /dev/null +++ b/doc/kcontrol/index.docbook @@ -0,0 +1,637 @@ + + + +]> + + + +The &kcontrolcenter; + + +&Mike.McBride; &Mike.McBride.mail; + + + + + +&FDLNotice; + +2005-03-05 +3.4.0 + + +This documentation describes &kde;'s control center. + + + +KDE +kcontrol +configuration +settings +module + + + + + +The &kcontrolcenter; + + +The &kcontrolcenter; (from now on referred to simply as the +control center) provides you with a centralized and convenient +way to configure all of your &kde; settings. + + + +The control center is made up of multiple modules. Each module is a +separate application, but the control center organizes all of these +programs into a convenient location. + + + + +Each control center module can be executed individually + + + +See section entitled Running +individual control center modules for more information. + + + + +The control center groups the configuration modules into categories, so +they are easy to locate. Within each category, the control center shows +all the modules in a list, so it is easier to find the right +configuration module. + + + + +Using the &kcontrolcenter; + + +This next section details the use of the control center itself. For +information on individual modules, please see Control +Center Modules + + + +Starting the &kcontrol; + +The &kcontrolcenter; can be started in 3 ways: + + + + + +By selecting K ButtonControl +Center from the &kde; Panel. + + + + +By pressing &Alt;F2. + + + +This will bring up a dialog box. Type +kcontrol, and click +Run. + + + + + +You can type kcontrol & at any command prompt. + + + + + +All three of these methods are equivalent, and produce the same result. + + + + + +The &kcontrolcenter; Screen + + +When you start the control center, you are presented with a window, +which can be divided into 3 functional parts. + + + +Screenshot + + + + Screenshot + +The &kde; Control Center Screen + + + + + +Across the top is a menubar. The menubar will provide you with quick +access to most of &kcontrolcenter;'s features. The menus are detailed in +The &kde; Control Center +Menus. + + + +Along the left hand side, is a icon tree. Here you can choose which +module to configure. + + + +The main panel shows you some system information. + + + +In this example, we are running &kde; 3.4.0, we started &kcontrolcenter; +as user newkde, the computer is +named turtle, it is a +&Linux; system running the 2.6 kernel, on a i686 processor. + + + + + +The &kcontrolcenter; Menus + + +This next section gives you a brief description of what each menu item +does. + + + +<guimenu>File</guimenu> Menu + + +The File menu has a single entry. + + + + + + + +&Ctrl;Q + +File +Quit + + + +Closes the control center. + + + + + + + + +<guimenu>View</guimenu> Menu + + +These options determine how the module selection looks and behaves. + + + + +View Mode + + + + +Determines whether to use Tree view, +or Icon view for your modules. + + + +With Tree view, each submenu appears as an +indented list. + + + +With Icon view, when you click on a category, +the categories disappear and are replaced with the module list. You +then use the Back button to return to the categories. + + + + + + +ViewIcon size + + + + +Using this option, you can choose +Small, Medium, or +Large icons to select your modules. + + + +This menu item only controls the icon size if you are in +Icon View. If you choose +Tree View, the Small +icon size will be used, no matter what size was previously selected in +Icon View. + + + + + + + + + +<guimenu>Settings</guimenu> Menu + + + The Settings menu has a single entry, +SettingsConfigure Shortcuts.... From here you can map keyboard shortcuts to the +other menu options. + + + + + +<guimenu>Help</guimenu> Menu + +&help.menu.documentation; + + + + + + +Exiting The &kde; Control Center + + +You can exit the control center one of three ways: + + + + + +Select File +Quit from the menu bar. + + + + +Type &Ctrl;Q +on the keyboard. + + + + + +Click on the Close button on the frame surrounding +the control center. + + + + + + + +Running Individual Modules + + +You can run individual modules without running kcontrol using the command kcmshell from &konsole;. Type kcmshell to see a list of the available &kcontrolcenter; modules. You can also access individual &kcontrolcenter; modules through adding the Preferences button to either &kicker; or the &kmenu; through their respective configuration dialogs. + + + + + + + + + +The &kcontrolcenter; Modules + + +In order to make it as easy as possible, the &kcontrolcenter; has organized +similar options into groups. Each group is called a module. When you +click on the name of a module in the left window, you will be presented +with the options of the module on the right. + + + +Each module will have some or all of the following buttons: + + + + + +Help + + +This button will give you help specific to the current module. The +button will show you a short summary help page in the left window. At +the bottom of that window, you can click on a link to get more detailed +help. + + + + + +Defaults + + +This button will restore this module to its default values. You must +click OK to save the options. + + + + + +Apply + + +Clicking this button will save all changes to &kde;. If you have +changed anything, clicking Apply will cause the +changes to take effect. + + + + + +Reset + + +This button will Reset the module to the previous settings. + + + + + + + + +You must save the options of the current module using +Apply before you can change to a different +module. + + +If you try to change without saving your options, you will be asked if +you want to save your changes, or discard them. + + + + + + + + +Credits and License + +&kcontrol; +Program copyright 1997-2001 The &kcontrolcenter; Developers +Contributors: + + +&Matthias.Hoelzer-Kluepfel; &Matthias.Hoelzer-Kluepfel.mail; +&Matthias.Elter; &Matthias.Elter.mail; + + +Documentation copyright 2000 &Mike.McBride; &Mike.McBride.mail; + +Contributors: + + +&Paul.Campbell; &Paul.Campbell.mail; +&Helge.Deller; &Helge.Deller.mail; +&Mark.Donohoe; +&Patrick.Dowler; +&Duncan.Haldane; duncan@kde.org +&Steffen.Hansen; stefh@mip.ou.dk. +&Matthias.Hoelzer-Kluepfel; &Matthias.Hoelzer-Kluepfel.mail; +&Martin.R.Jones; &Martin.R.Jones.mail; +&Jost.Schenck; &Jost.Schenck.mail; +&Jonathan.Singer; &Jonathan.Singer.mail; +&Thomas.Tanghus; &Thomas.Tanghus.mail; +&Krishna.Tateneni; &Krishna.Tateneni.mail; +Ellis Whitehead ewhitehe@uni-freiburg.de + + + + +&underFDL; +&underGPL; + + + + + + diff --git a/doc/kcontrol/kcmaccess/Makefile.am b/doc/kcontrol/kcmaccess/Makefile.am new file mode 100644 index 000000000..c0d281754 --- /dev/null +++ b/doc/kcontrol/kcmaccess/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = kcontrol/kcmaccess + diff --git a/doc/kcontrol/kcmaccess/index.docbook b/doc/kcontrol/kcmaccess/index.docbook new file mode 100644 index 000000000..25ccf55c2 --- /dev/null +++ b/doc/kcontrol/kcmaccess/index.docbook @@ -0,0 +1,179 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2005-12-21 +3.01.00 + + +KDE +KControl +accessibility + + + + +Accessibility + + +Introduction + +This module is designed to help users who have difficulty hearing +audible cues, or who have difficulty using a keyboard. + + +The module is divided into two tabs: Bell and Keyboard. + + + +<guilabel>Bell</guilabel> + + +This panel is divided into an Audible Bell section +and a Visible Bell section. + + + +The top check box labeled Use System Bell, determines +whether the normal System bell rings. If this option is disabled, the +System bell will be silenced. + + + +The next check box down can be used to play a different sound whenever +the system bell is triggered. To activate, place a mark in the check +box labeled Use customized bell, and enter the +complete pathname to the sound file in the text box labeled +Sound to Play. If you want, you can select the +Browse button to navigate through your filesystem +to find the exact file. + + + +For those users who have difficulty hearing the System bell, or those +users who have a silent computer, &kde; offers the visible bell. This +provides a visual signal (inverting the screen or flashing a color +across it) when the system bell would normally sound. + + + +To use the visible bell, first place a mark in the check box labeled +Use visible bell. + + + +You can then select between Invert screen, or +Flash screen. If you select Invert +screen, all colors on the screen will be reversed. If you +choose Flash screen, you can choose the color by +clicking the button to the right of the Flash +screen selection. + + + +The slider bar can be used to adjust the duration of the visible +bell. The default value is 500ms, or half a second. + + + + + +<guilabel>Keyboard</guilabel> + +There are three sections to this panel. + + + +Use Sticky Keys + + +If this option is enabled, you can press and release the &Shift;, +&Alt; or &Ctrl; keys, and then press another key to get a key combo +(example: &Ctrl; &Alt; +Del could be done with &Ctrl; then &Alt; +then Del). + + + +Also in this section is a check box labeled Lock Sticky +Keys. If this check box is enabled, the &Alt;, &Ctrl; +and &Shift; keys stay selected until you +de-selected them. + + + +As an example: + + + +With Lock Sticky Keys disabled: + +If you press the &Shift; key then press the +F key, the computer interprets this as &Shift;F. Now if you +type a P, the computer interprets this as the letter p +(no shift). + + + + + +With Lock Sticky Keys enabled: + + +If you press the &Shift; key twice then press the F key, +the computer interprets this as &Shift;F. Now if you +type a p, the computer interprets this as the letter P +(&Shift;P). To +de-select the &Shift; key, press it again. + + + + + + + + +Slow keys + + +If this option is enabled, you must hold the key down for a +specified length of time (adjustable with the slider) before the +keystroke will be accepted. This helps prevent accidental key strokes. + + + + + +Bounce keys + + +If this option is enabled, you must wait for a specified length of time +(configurable with the slider) before the next key press can be +accepted. This prevents accidental multiple key strokes. + + + + + + + + + + + +
diff --git a/doc/kcontrol/kcmcss/Makefile.am b/doc/kcontrol/kcmcss/Makefile.am new file mode 100644 index 000000000..fc406ca64 --- /dev/null +++ b/doc/kcontrol/kcmcss/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG= en +KDE_DOCS = kcontrol/kcmcss diff --git a/doc/kcontrol/kcmcss/index.docbook b/doc/kcontrol/kcmcss/index.docbook new file mode 100644 index 000000000..106cc38d8 --- /dev/null +++ b/doc/kcontrol/kcmcss/index.docbook @@ -0,0 +1,257 @@ + + + +]> + +
+ + + +&Lauri.Watts; &Lauri.Watts.mail; + + + +2003-10-12 +3.2 + + +KDE +CSS +Stylesheets +Accessibility + + + + + + +Stylesheets + + +Introduction + +CSS style sheets affect the way web pages +appear. CSS stands for +Cascading Style +Sheets. + +&kde; can use its own stylesheet, based on simple defaults and +the color scheme you are using for your desktop. &kde; can also use a +stylesheet that you have written yourself. Finally, you can specify a +stylesheet in this module. The options presented in this module are +tuned for accessibility purposes, especially for people with reduced +vision. + +Your choices here affect every &kde; application that renders HTML +with &kde;'s own renderer, which is called khtml. These include +&kmail;, &khelpcenter; and of course &konqueror;. Choices here do not +affect other browsers such as &Netscape;. + +The module has two pages, General, where you +can choose which stylesheet to use, and Customize +where you can design an accessibility stylesheet. + + + + +General + +This page contains the following options: + + + +Use default stylesheet + +&kde; will use the default stylesheet. Some of the colors will +default to those defined in your chosen color scheme. Most settings are +easily overridden by the page you are viewing. + + + + +Use user-defined stylesheet + +&kde; will use a stylesheet that you have written yourself. You +can use the browse button to locate the stylesheet on your system. +CSS files traditionally have a .css extension, but this is not +required. + + + + +Use accessibility stylesheet defined in +"Customize"-tab + +Use the settings defined in the Customize +tab. Enabling this option will enable the options on the +Customize page. + + + + + + + +Customize + +Here you can set up a user stylesheet. The options available are +only a subset of the instructions you can add in a stylesheet, and they +are geared towards people with reduced vision, to allow users to create +a stylesheet that makes web pages and the &kde; help files more +readable. + +The options on this page are disabled unless you chose +Use accessibility stylesheet defined in +"Customize"-tab on the previous page. + + +<guilabel>Font Family</guilabel> + + + +Base family + +Choose a font family to use for body text. + + + + +Use same family for all text + +If you enable this, then the same font family will be used for all +text, regardless of the settings on the page you are viewing. This is +useful for pages which have used a decorative or hard to read font for +headlines. + + + + + + +Font Size + + + +Base Font Size + +This is the default size for text on the page. Many web sites set +their font sizes relative to this default, using larger +or +1 to make the text bigger, and smaller +or -1 to make the text smaller. +Many people design their web pages on platforms where the ordinary +default text size is too large for the average user to read, so it is +very common to come across web pages that have forced the font smaller +in this way. +This setting will allow you to set the default font to a +comfortable size, so that the relative sizes are also enlarged enough to +be comfortable. +Do not forget you can also have &konqueror; enforce a minimum size, +so that text is never too small to read. Set that +under Behavior, in the Web Browser section in &kcontrol;. + + + + +Use same size for all elements + +If you enable this option, then all text will be rendered at your +specified font size, regardless of the instructions the page contains. +Relative font sizes as discussed earlier, and even specific instructions +that text should be rendered at a certain size will be overridden +here. + + + + + + +Colors + + + +Black on White + +Many people with reduced vision find black text on a white screen +gives the most contrast, and is easiest to read. If this applies to +you, you can set this here. + + + + +White on Black + +Many other people with reduced vision find the opposite to be +true, that white text on a black screen is easier to read. + + + + +Custom + +Still other people find that pure black and white, in either +order, is difficult to read. You can set custom colors here for both +the Background and the +Foreground. + + + + +Use same color for all text + +Many web sites use a different, often contrasting color for +headings or other flourishes. If this interferes with your ability to +read the content, you can enable this checkbox to have &kde; use the +colors you have set above for all text. + + + + + + + +Images + + + +Suppress images + +If you do not want to view images, you can turn this off +here. + + + +Suppress background images + +One major problem for reduced vision users is that background +images do not give sufficient contrast to allow them to read the text. +You can disable background images here, independently of your choice +above to view all images. + + + + + + + +Preview + +The Preview allows you to see the effect of +your changes. A window will pop up, showing how several types of +headings will appear with your stylesheet, and a sentence in the default +body text. + +This should allow you to fine tune your stylesheet until you have +something that you can comfortably read. + +Happy surfing! + + + + + + + +
diff --git a/doc/kcontrol/kcmfontinst/Makefile.am b/doc/kcontrol/kcmfontinst/Makefile.am new file mode 100644 index 000000000..16be3161e --- /dev/null +++ b/doc/kcontrol/kcmfontinst/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmfontinst diff --git a/doc/kcontrol/kcmfontinst/index.docbook b/doc/kcontrol/kcmfontinst/index.docbook new file mode 100644 index 000000000..a46a8ee0f --- /dev/null +++ b/doc/kcontrol/kcmfontinst/index.docbook @@ -0,0 +1,76 @@ + + + +]> + +
+ + +&Craig.Drummond; &Craig.Drummond.Mail; + + + + +2003-10-22 +3.2 + + +KDE +KControl +fonts + + + +Font Installer + +This module is responsible for installing (and uninstalling) +fonts. The installer will configure X (X.org, XFree86), XRender, +(anti-aliasing), fontconfig, and Ghostscript (printing), +for any TrueType +(.ttf) and Type1 (.pfa, .pfb) fonts that you care to install - +bitmap (.bdf, .pcf) fonts will also be installed, but +these can only used by X. + +When the module is started by a normal (non-root) user, then the +settings will refer to their personal configuration, and installed +fonts will be available to them only. For root, the settings will usually refer to +the system-wide configuration, and as such any installed fonts should +be available to all users. +If you install fonts as a normal user and notice the fonts used for +display (and for print preview) do not match those of the printed output +- then you should re-install the fonts system-wide (i.e. as root). This can occur because when printing +the output is sent to a printer queue - and when the system comes to actually +send the information to the printer, it is running as a different user (usually +lp), and cannot find the font files. +To install fonts, simply select the "Add Fonts" button - this will +produce a file dialog, then just locate the fonts to install. Likewise, to +remove a font, simply highlight a font and press the "Delete" button. + +Using Konqueror +You can also use Konqueror to install fonts via drag-and-drop. +To do this just type fonts:/ into Konqueror's Location bar. +As a normal (non-root) user, this will produce 2 top-level folders: + + +Personal - this will display your personal fonts. + + +System - this will display the system wide fonts. If you drag-n-drop a font +on to the folders here, you will be asked for the root password in order +to install the font. + + +If you drop a font over fonts:/, then you will be asked whether this +should go into "Personal", or "System". +As root, just the contents of the system font folder will be displayed +- as root does not have any "personal" fonts. + + +
diff --git a/doc/kcontrol/kcmkonsole/Makefile.am b/doc/kcontrol/kcmkonsole/Makefile.am new file mode 100644 index 000000000..6b3d56240 --- /dev/null +++ b/doc/kcontrol/kcmkonsole/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmkonsole diff --git a/doc/kcontrol/kcmkonsole/index.docbook b/doc/kcontrol/kcmkonsole/index.docbook new file mode 100644 index 000000000..0a4367115 --- /dev/null +++ b/doc/kcontrol/kcmkonsole/index.docbook @@ -0,0 +1,177 @@ + + + +]> + +
+ + + + +&Jonathan.Singer; &Jonathan.Singer.mail; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +konsole +terminal + + + + +&konsole; + +In this module, you can configure basic settings for &konsole;, +the &kde; terminal. You can also easily create new schemata (appearance +files) for &konsole;. + +This module contains several tab pages: +General, Schema, +Session and Write +Daemon. + + +<guilabel>General</guilabel> + +This tab page allows you to configure aspects of &konsole;'s +functions. It contains the following options: + + + +Use Konsole as default terminal +application + +If you wish to have &kde; use another terminal application by +default, uncheck this box and enter the preferred application +(wterm, rxvt, +&etc;) in the text field below. + + + + +Show Terminal Size when Resizing + +By default, &konsole; will show the size (in characters) of the +window when you are resizing, allowing you to make the window a +specific size. Uncheck this box to turn off this +behavior. + + + +Show Frame + +Draw an inner frame around the inside of the &konsole; window. + + + + +Confirm quit with open sessions + +When set, a warning appears when you try to close a &konsole; +window with multiple sessions. + + + + +Blinking Cursor +If you have trouble spotting the cursor in the +&konsole; window, you can have it blink to draw your +attention. + + + +Line Spacing +Change the space between lines of text. + + + + +Consider the following characters part of a word when +double clicking +It is a common &UNIX; behavior to select a whole word +when you double click on it, however, the computer's idea of a word may +differ from yours. Add characters here that you would like to be +considered always to be part of a word. For example, +adding the @ character will allow you to double +click to select an entire email address. + + + + + +Schema + +The Schema page will allow you to easily +create, edit and save schemata, with text and background coloring, +transparency and background images. + + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/kcmlaunch/Makefile.am b/doc/kcontrol/kcmlaunch/Makefile.am new file mode 100644 index 000000000..f6c3bce75 --- /dev/null +++ b/doc/kcontrol/kcmlaunch/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmlaunch diff --git a/doc/kcontrol/kcmlaunch/index.docbook b/doc/kcontrol/kcmlaunch/index.docbook new file mode 100644 index 000000000..78bf7008f --- /dev/null +++ b/doc/kcontrol/kcmlaunch/index.docbook @@ -0,0 +1,70 @@ + + + +]> + +
+ + + +&Lauri.Watts; &Lauri.Watts.mail; + + + +2006-06-24 +3.5.2 + + +KDE +KControl +launch feedback +cursor +busy + + + + + +<guilabel>Launch Feedback</guilabel> + +Sometimes it is reassuring to know that your computer didn't just +ignore your command, and something is happening behind the scenes. In +this module you can configure visible feedback to help you know if you +really hit that icon or not. + +The traditional way to indicate that your computer is busy is to +modify the cursor, and you can turn this on by choosing a +Busy Cursor. + +With this option enabled, your cursor will have an icon attached +to it for a short time, when a new application is being launched. You +can configure how long this icon is displayed beside your cursor with the +Startup indication timeout: spinbox. The +default is 30 seconds. + +There are several variations of busy cursor available, including +a Blinking Cursor, a Bouncing Cursor +or a Passive Busy Cursor icon with no animation. + +Traditional &kde; launch notification has taken another form, +which you can also enable and disable here. Normally when you start an +application, it gets an immediate entry in the taskbar, with the icon +replaced by a spinning hourglass to let you know something is +happening. You can toggle this behavior on and off with the +Enable taskbar notification checkbox, and when it's +enabled, you can set a time in the Startup indication timeout +: spinbox. + +Not all applications that you start will eventually show a +window, or an entry in the taskbar. Some of them, for example, are +docked into the &kde; system tray. Alternatively, it might be that you +sent it off to a different virtual desktop, and Show windows +from all desktops is unchecked in the &kcontrolcenter; module +Taskbar. Setting a timeout ensures that, +even in these cases, you can still get launch feedback, but also that +it will go away when the job is done. + + +
\ No newline at end of file diff --git a/doc/kcontrol/kcmnotify/Makefile.am b/doc/kcontrol/kcmnotify/Makefile.am new file mode 100644 index 000000000..40efdecdc --- /dev/null +++ b/doc/kcontrol/kcmnotify/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmnotify diff --git a/doc/kcontrol/kcmnotify/index.docbook b/doc/kcontrol/kcmnotify/index.docbook new file mode 100644 index 000000000..cf77945f7 --- /dev/null +++ b/doc/kcontrol/kcmnotify/index.docbook @@ -0,0 +1,151 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2005-03-04 +3.4.0 + + +KDE +KControl +system notification +notification + + + + +System Notification Settings + +&kde;, like all applications, needs to inform the user when a +problem occurs, a task is completed, or something has happened. &kde; +uses a set of System Notifications to keep the user +informed on what is happening. + +Using this module, you can determine what &kde; does to communicate +each event. + +The panel consists of a large list of specific events which need +to be communicated to the user. This list is organized into groups by applications. + +To configure a notification, simply select the application from the drop down box at the top +of the dialog labeled Event source:. This will lead to a list of +all configurable notifications for the application. The list of notifications includes 6 columns to +the left of the notification name. These columns (from left to right) are: + + + +Execute a program +If an icon is present in this column, a seperate program will be executed when this notification is performed. This can be used to execute a program to help restore data, shutdown a potentially compromised system or email another user to alert them to a problem. + + + +Print to standard error output +If an icon is present in this column, &kde; will send a message to the computers standard output. + + + +Display a message box +If an icon is present in this column, &kde; will open a message box and inform the user of the notification. This is probably the most commonly selected option for alerting users to an error. + + + +Log to a file +If an icon is present in this column, &kde; will write certain information to a file on disk for later retrieval. This is useful for tracking problems or important system changes. + + + +Play a sound +This does exactly what you think it does. If an icon is present in this column, &kde; will play a specific sound over the speakers. This is commonly used by games in &kde; for starting a new game, or other action within the game. + + + +Flash the taskbar entry +If an icon is present in this column, &kde; will cause the taskbar to flash until the user has clicked the taskbar entry. This is most useful when you want the user to look at the program (such as a new email message was received, or the users name was said on an IRC channel). + + + +Change a single notification +To make a change to a notification, click on the name of the notification once with the &LMB;. The notification will be highlighted. +Now click on the button labeled +More options so you can see all the checkboxes. + +You can have more than one event triggered by a single notification. As an example, it is easy to have a sound played and +a message box appear in response to a system notification. One notification does not prevent other notifications from operating. +The following list details each of the notification types and how to use them. + + + +Play a sound +If a mark is in this checkbox, &kde; will play a sound everytime this notification is initiated. To specify the sound, use the text box to the right of the checkbox to enter the folder location of the sound file you want &kde; to play. You can use the folder button (located to the far right of the dialog box) to browse your directory tree. To hear a test of your sound, simply click on the play button (small button directly to the right of Play a sound.) + + + +Log to a file +If a mark is in this checkbox, &kde; will write certain information to a file on disk for later retrieval. To specify the log file to use, enter the pathname in the text box to the right of the checkbox. You can use the folder button (located to the far right of the dialog box) to browse your directory tree. + + + +Execute a program +If a mark is in this checkbox, a separate program will be executed when this notification is performed. To specify the program to execute, enter the pathname in the text box to the right of the checkbox. You can use the folder button (located to the far right of the dialog box) to browse your directory tree. + + + +Show a message in a pop up window +If a mark is in this checkbox, &kde; will open a message box and inform the user of the notification. The text of the box can not be changed from this dialog. If you place a mark in the checkbox labeled Use a passive window that does not interrupt other work, &kde; will open the message box, but it will not change desktops and the message box will not appear until the user returns to the program sending the notification. If that box is left empty, the user must respond to the message box even if it means they have to stop working on another program. + + + +Print a message to standard error output +If a mark is in this checkbox, &kde; will send a message to the computer's standard output. + + + +Mark taskbar entry +If a mark is in this checkbox, &kde; will cause the taskbar of the program sending the notification to flash until the user has clicked the taskbar entry. + + + +You can use the icon columns (located to the left of the notifications) to quickly select or deselect the options. Clicking in the column with the &LMB; will toggle the notification on and off. + + +Change all notifications in all &kde; applications +You can alter more than one notification at a time by using the section of the dialog labeled Quick Controls. +The first item in this section is a checkbox labeled Apply to all applications. If there is a mark in this checkbox, any changes made in the Quick Controls area are applied to all applications (not just the selected application). If there is no mark in this checkbox, any changes are limited to the application selected at the top of the dialog. +The next line consists of a button and a drop down box. This is used to enable every notification of a single type. Simply select the notification type from the drop down box (on the right) and click the button labeled Turn On All. This will enable all notifications of that type. +The bottom line operates the same, but when you select the button labeled Turn Off All, all the notifications of the selected type will be disabled. + +Change sound player options +If you click the button labeled Player settings, a small dialog box will appear with three radio buttons: + + +Use the &kde; sound system +If a mark is in this radio button, &kde; will play all sound notifications through the &kde; sound system (&arts;). You can adjust the volume of system notifications using the slider. +The slider only affects &kde; system notifications. Changes to this slider will not affect other sounds on your computer. + + +Use external player +If a mark is in this radio button, &kde; will not use the &kde; sound system to play the sound. This is a good choice if the sound format you want to use is not supported by the &kde; notification system or if you don't use the &arts; sound daemon. After checking the radio box, enter the full path and name of the program you want to use into the text field. You can use the folder button (located along the right side) to browse the directory tree. + + +No audio output +Disables all sound notifications. + + +When you have made your selection, click Apply to save changes but keep the dialog box open. Click +OK to save changes and close dialog box. Click Cancel to close the dialog box without +making any changes. + + + +
\ No newline at end of file diff --git a/doc/kcontrol/kcmsmserver/Makefile.am b/doc/kcontrol/kcmsmserver/Makefile.am new file mode 100644 index 000000000..cf4388a52 --- /dev/null +++ b/doc/kcontrol/kcmsmserver/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmsmserver diff --git a/doc/kcontrol/kcmsmserver/index.docbook b/doc/kcontrol/kcmsmserver/index.docbook new file mode 100644 index 000000000..65cb9423f --- /dev/null +++ b/doc/kcontrol/kcmsmserver/index.docbook @@ -0,0 +1,109 @@ + + + +]> + +
+ + + +&Jost.Schenck; &Jost.Schenck.mail; + + + +2003-10-13 +3.2 + + +KDE +KControl +session + + + + +Session Manager + + +Use + +In this control module you can configure &kde;'s session +manager. + +Session management refers to &kde;'s ability to save the state +of applications and windows when you log out of &kde; and restore them +when you log back in. + + + +Confirm logout + +If this option is checked, when logging out, &kde; will display a +dialog asking for confirmation. In this dialog you can also choose +whether you want to restore your current session when you login the next +time. + + + +Offer shutdown options + +If this option is checked, &kde; will offer a choice of actions during +logout. These include simply ending the current session (the +action performed if shutdown options are not enabled) turning off the +computer, or restarting the computer. + + + + +You may choose one of three options on what should happen when +you log into &kde;: + + + +Restore previous session +If this option is checked, &kde; will save your current +session's state when you logout. &kde; will restore your session on the +next login, so you can continue to work with a desktop just like you +left it. + + + +Restore manually saved session +Instead of restoring &kde; to the state it was when +you logged out last, it will be restored to a specific state that you +have saved manually. + + +Start with an empty session + +If you choose this option, &kde; will never restore sessions that it has saved. + + + + +You can configure what should happen by default when you log out of +&kde;. These options are not possible on all operating systems, and some of +them may not appear unless you are using &kdm; as your login manager. + +The options available are self explanatory, if you are in doubt, +leave the default settings. They are: + + +End current session (this is the default) +Turn off computer +Restart computer + + +Finally, you can enter a colon (:) +separated list of applications that should not be saved in sessions, +and therefore won't be started when restoring a session. For example +xterm:konsole. + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/kcmstyle/Makefile.am b/doc/kcontrol/kcmstyle/Makefile.am new file mode 100644 index 000000000..067f33e6c --- /dev/null +++ b/doc/kcontrol/kcmstyle/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmstyle diff --git a/doc/kcontrol/kcmstyle/index.docbook b/doc/kcontrol/kcmstyle/index.docbook new file mode 100644 index 000000000..4d38cf2fc --- /dev/null +++ b/doc/kcontrol/kcmstyle/index.docbook @@ -0,0 +1,189 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2005-02-20 +3.4 + + +KDE +KControl +style + + + +Style + + +Introduction + +This module is used to configure how the individual widgets are +drawn by &kde;. + +A Widget is a commonly-used +programmer's term for referring to User Interface elements such as +buttons, menus, and scroll bars. You can think of them as the +fundamental pieces that are assembled to make your +application. + +You can configure how the widgets are drawn with this module, +but to change the color of the widgets, you should refer to the +section entitled Colors. + +This panel is divided into three tabs: Style, +Effects, Toolbar. + + +<guilabel>Style</guilabel> tab + +The top list box, labeled Widget Style +contains a list of the pre-defined styles. +Each style has a name, and a brief description. + +To change styles, simply click on the style name, and a preview +of the style will be displayed in the preview box below the style list. + +The other options available here are: + + + +Show icons on buttons + +If this option is selected, action buttons (like OK and +Apply) will have a small icon located within them to act +as a visual reference. If this option is not selected, then only text +will appear on the button. + + + + +Enable tooltips + +This will toggle tooltips off and on. + + + + + + + +<guilabel>Effects</guilabel> tab + +If you click on the Effects tab, you will see the panel is divided +into two sections. +At the top of the first section, is a checkbox labeled Enable +GUI effects. If there is no mark in front of this checkbox, then all +visual effects of this panel are disabled. To edit any of these effects, simply +place a mark in this checkbox. + +Below that checkbox, are the following choices: + + +Combobox effect: +This combobox has two options. If this option is set to Animate +then when a combo box is selected, it will appear to scroll down. If Disable +is selected, then the combobox list appears instantly. + + + +Tool tip effect: +This combobox has three options. If this option is set to Animate +then when a tool tip appears, it will have a short animation. If Fade is +selected, the tool tip appears to fade from the background. If Disable +is selected, then the tool tip appears instantly. + + + +Menu effect: +This combobox has four options. If this option is set to Animate +then when a menu list appears, it will appear to scroll downward. If Fade is +selected, the menu list appears to fade from the background. If Make Transparent +is selected, the menu list will have a transparent look to it. The details of that transparency is +configured in the next part of the dialog. If Disable +is selected, then the menu list appears instantly. + + + +Menu tear-off handles: +If this option is set to Disable, then no menus can be separated +from the application. If Application Level is selected, then it is left up +to each individual application to determine which menus can be torn separated from the application. +Many applications do not have tear off menus. You cannot tell &kde; to force an +application to allow tear off menus. This is determined by the authors of the application. + + + +The next checkbox, labeled Menu drop shadow is used to toggle the drop shadow behind all +&kde; menus. A drop shadow is a dark, soft line on the bottom and right sides of the menu, which give the menus the +appearance that the menu is lifted off the application, and the menu is creating a shadow on the application. + +The next section only applies if the combobox labeled Menu Effect is set to +Make Transparent. You can use the combo box labeled Menu transparency type: +to select the method &kde; uses to generate the transparency. You can use the slider to determine the level of +transparency in menus. A preview is visible on the right side of this section. + + + + +<guilabel>Toolbar</guilabel> tab + + + + +Highlight buttons under mouse. + +If there is a mark in this checkbox, when the mouse pointer is above a toolbar +button, that button will be highlighted with a square around the button. This is a good visual +indicator of which button will be selected with a mouse click. + + + + +Transparent toolbars when moving + +As the title suggests, if this option is selected, the toolbars will be transparent when +you are moving them around on the screen. + + + + +Text position + +This combo box lets you determine where on the button the text name of the button will appear as the default. +If Icon Only is selected, then there is no text on the toolbar buttons. If Text Only is selected, then the button's icon is replaced with a text name of the button. If Text Alongside Icons is selected, then the name of the button will be placed to the right of the icon. If Text Under Icons is selected, the default will be to have the text of the button below the icon. +This option only specifies the default location. Each application can override the setting used in this panel. + + + + + + + + + + + +
diff --git a/doc/kcontrol/kcmtaskbar/Makefile.am b/doc/kcontrol/kcmtaskbar/Makefile.am new file mode 100644 index 000000000..756585015 --- /dev/null +++ b/doc/kcontrol/kcmtaskbar/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kcmtaskbar diff --git a/doc/kcontrol/kcmtaskbar/index.docbook b/doc/kcontrol/kcmtaskbar/index.docbook new file mode 100644 index 000000000..3f73691a3 --- /dev/null +++ b/doc/kcontrol/kcmtaskbar/index.docbook @@ -0,0 +1,142 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2006-06-24 +3.5.2 + + +KDE +KControl +taskbar +configure + + + + +Taskbar + + +<guilabel>Taskbar</guilabel> + +The taskbar is a quick way to switch between applications. The taskbar +can be located in the panel (default), or outside the panel on the +desktop. + +This module has options to control how the taskbar operates: + +Show windows from all desktops, determines +if all open windows are included in the taskbar or not. By default, +the taskbar only shows the open windows on the current +desktop. If this option is enabled, the taskbar will show +all open windows on all desktops. +Sort windows by desktop changes the +sort order of the icons on the taskbar, so that windows on virtual +desktop 1 are shown first (to the left, or at the top of the taskbar), +followed by windows on virtual desktop 2, and so on. + +Sort alphabetically by application name shows +the icons in an alphabetical sort order on the taskbar. + +You can have the taskbar Show only minimized +windows. In this case, when you minimize a window, it will +show up on the taskbar, and when you open it again, its taskbar entry +will disappear. + +You can disable Show application icons, and show just the +text. You might want to do this to save space on your taskbar, for +example. + +Using the Show window list button option, +you can enable a little button to be shown in the taskbar: this button +will open a popup menu offering access to applications on other desktops +as well as some useful actions, like Unclutter +Windows or Cascade Windows. + +Group similar tasks allows +you to save some space on your taskbar, by only showing one icon for +each running application, no matter how many windows are shown. You can +click on the icon to display a menu of all the windows that are +available. This is most useful when you have enabled Show windows +from all desktops. + +The next option allows you to set the Appearance to Elegant, Classic or For Transparency. + + + + +<guilabel>Actions</guilabel> + +The next set of options allow you to customize the actions +performed with different mouse clicks on taskbar icons. + +You can select any action from the list for the Left button, +the Middle button and the Right button. + +The options available are: + + + +Show Task List + +Show the list of tasks grouped under the icon you have clicked +on. If there is only one task or window for that icon, it will become +the active window. +This is the default action for the &LMB;. + + + + +Cycle Through Windows + +If there is more than one task grouped under the icon, switch +from one to the next, until you release the button (&ie; when you have +reached the window you are looking for). If there is only one task or +window for that icon, it will become the active window. + +This is the default action for the &MMB; if window grouping is +enabled. + + + + + +Show Operations Menu + +Show the operations menu for the application. This allows you +to minimize, maximize, &etc;, move windows between desktops, and close +windows. You can perform these actions on all windows grouped under +that icon, or on any single window, by choosing it from the +submenu. +This is the default action for the &RMB;. + + + + +Raise Task, Lower +Task, Minimize Task + +These three options make sense only if window grouping is +disabled. They are fairly self-explanatory. Raise means to make +active, bring to the front, and give focus. Lower means, send to the +back, and give focus to whichever window is now on top. + + + + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/kdm/Makefile.am b/doc/kcontrol/kdm/Makefile.am new file mode 100644 index 000000000..511936b0f --- /dev/null +++ b/doc/kcontrol/kdm/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kdm diff --git a/doc/kcontrol/kdm/index.docbook b/doc/kcontrol/kdm/index.docbook new file mode 100644 index 000000000..8f00db2f3 --- /dev/null +++ b/doc/kcontrol/kdm/index.docbook @@ -0,0 +1,518 @@ + + + +]> + +
+ + + +&Thomas.Tanghus; &Thomas.Tanghus.mail; +&Steffen.Hansen; &Steffen.Hansen.mail; +&Mike.McBride; &Mike.McBride.mail; + + + +2002-02-13 +3.00.00 + + +KDE +KControl +KDM configuration +login manager +login + + + + +Login Manager + +Using this module, you can configure the &kde; graphical login +manager, &kdm;. You can change how the login screen looks, who has +access using the login manager and who can shutdown the +computer. + +In order to organize all of these options, this module is +divided into six sections: Appearance, +Font, Background, +Sessions, +Users and +Convenience. + +You can switch between the sections using the tabs at the top of +the window. + +If you are not currently logged in as a superuser, you +will need to click the Administrator Mode +Button. You will then be asked for a superuser password. Entering a +correct password will allow you to modify the settings of this +module. + + +Appearance + +From this page you can change the visual appearance of &kdm;, +&kde;'s graphical login manager. + +The greeting string is the title of the login screen. If the +string contains the word HOSTNAME it +will be translated to the domainless name of the machine &kdm; is +installed on. + +You can then choose to show either the current system time, a logo +or nothing special in the login box. Make your choice in the radio +buttons labeled Logo area. Using the +Positions setting, you can choose to either center +the content of the logo area or to position it using fixed +coordinates. + +If you chose Show logo you can now choose a +logo: + + + +Drop an image file on the image button. + + +Click on the image button and select a new image from the image chooser +dialog. + + + +If you do not specify a logo the default +$KDEDIR/share/apps/kdm/pics/kdelogo.png +will be displayed. + +While &kde;'s style depends on the settings of the user logged in, +the style used by &kdm; can be configured using the GUI +Style option. + +Below that, you have two dropdown boxes to choose the language and the +country for your login box. + + + + +Font + +From this section of the module you can change the fonts used in +the login window. + +You can select three different font styles from the drop down box +(Greeting, Fail, +Standard). When you click on the Change +font button a dialog appears from which you can select the +new characteristics for the font style. + + + +The Greeting font is the font used for the title +(Greeting String). + + +The Fail font is used when a login fails. + + +The Standard font is used in all other places in the +login window. + + + +An example of each font can be seen in the +Example Box. + + + + +Background + +Here you can change the desktop background which will be displayed +when a user logs in. You can have a single color or an image as a +background. If you have an image as the background and select center, the +selected background color will be used around the image if it isn't +large enough to cover the entire desktop. + +The background colors and effects are controlled by the options on +the tab labeled Background and you select a +background image and its placement from the options on the tab labeled +Wallpaper. + +To change the default background color(s) simply click either of +the color buttons and select a new color. + +The dropdown box above the color buttons provides you with several +different blend effects. Choose one from the list, and it will be +previewed on the small monitor at the top of the window. Your choices +are: + + + +Flat +By choosing this mode, you select one color (using the color +button labeled Color 1), and the entire background is +covered with this one color. + + +Pattern +By choosing this mode, you select two colors (using both color +buttons). You then select a pattern by clicking +Setup. This opens a new dialog window, which gives you +the opportunity to select a pattern. Simply click once on the pattern of your +choice, then click on OK, and &kde; will render the pattern +you selected using the two colors you selected. For more on patterns, see the +section Background: Adding, Removing and Modifying +Patterns. + + +Background Program +By selecting this option, you can have &kde; use an external +program to determine the background. This can be any program of your choosing. +For more information on this option, see the section entitled Background: Using an external program. + + +Horizontal Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 on the left edge of the screen, and slowly transform into the +color selected by Color 2 by the time it gets to the +right edge of the screen. + + +Vertical Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 on the top edge of the screen, and slowly transform into the color +selected by Color 2 as it moves to the bottom of the +screen. + + +Pyramid Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 in each corner of the screen, and slowly transform into the color +selected by Color 2 as it moves to the center of the +screen. + + +Pipecross Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 in each corner of the screen, and slowly transform into the color +selected by Color 2 as it moves to the center of the +screen. The shape of this gradient is different then the pyramid +gradient. + + +Elliptic Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +2 in the center of the screen, and slowly transform into the color +selected by Color 1 as it moves to the edges, in an +elliptical pattern. + + + +The setup button is only needed for if you select Background +program or Patterns. In these instances, +another window will appear to configure the specifics. +Wallpaper +To select a new background image first, click on the +Wallpapers tab, then you can either select an image from the +drop-down list labeled Wallpaper or select +Browse... and select an image file from a file +selector. + +The image can be displayed in six different ways: + + +No wallpaper +No image is displayed. Just the background colors. + + +Centered +The image will be centered on the screen. The background colors +will be present anywhere the image does not cover. + + +Tiled +The image will be duplicated until it fills the entire +desktop. The first image will be placed in the upper left corner of the screen, +and duplicated downward and to the right. + + +Center Tiled +The image will be duplicated until it fills the entire +desktop. The first image will be placed in the center of the screen, and +duplicated upward, downward to the right, and to the left. + + +Centered Maxpect +The image will be placed in the center of the screen. It will +be scaled to fit the desktop, but it will not change the aspect ratio of the +original image. This will provide you with an image that is not distorted. + + + +Scaled +The image will be scaled to fit the desktop. It will be +stretched to fit all four corners. + + + + + + +Sessions + +Allow to shutdown +Use this dropdown box to choose who is allowed to shut down: + + +None: No one can shutdown the computer using &kdm;. +You must be logged in, and execute a command. + + +All: Everyone can shutdown the computer using +&kdm;. + +Root only: &kdm; requires that the +root password be entered before shutting down the +computer. +Console only: The user must be at this +console, to shut down the computer. + + +Commands +Use these 3 blanks to define the exact shutdown command. +The shutdown command defaults to: + +/sbin/shutdown + +The restart command defaults to: + +/sbin/reboot + +The Console mode (which restarts the computer as a console only terminal) +defaults to: + +/sbin/init + +When Show boot options is enabled, &kdm; will on reboot +offer you options for the lilo boot manager. For this feature to work, you will +need to supply the correct paths to your lilo command and to +lilo's map file. + + + +Session types + +Define which session types should be accessible from the login +window. + + For more information on this subject, look at /etc/X11/xdm/Xsession to find your +xdm setup files. Also review the xdm man pages, especially under the SESSION +PROGRAM section. + +To add a session, type its name in the +blank entitled New types, and click +Add new. + +To remove a session, select the session from the list and click +Remove. + + + + + + + +Users + +From here you can change the way users are represented in the +login window. + +As you look on this window, you will see three lists (All users, +selected users, and no-show users). You also see an image box, and a +set of options along the right side of the window. + +The first thing you must decide, is if you are going to show users +or not. + + +If you choose to show users, then the login window will show +images (which you select), of a list of users. When someone is ready to +login, they select their user name/image, enter their password, and they +are granted access. + +If you choose not to show users, then the login window will be +more traditional. Users will need to type their username, and password +to gain entrance. This is the preferred way if you have many users on +this terminal. + + +To show (and sort) or not to show users + +Along the right edge of the window are two check boxes: + +If Show users is selected, you have chosen to +show images of users, instead of making them type their login +name. + +If Sort users is selected, then the list of +users will be sorted alphabetically in the login window. If unchecked, +users will be listed in the same order as they are on this page. If +Show users is not checked, this has no +effect. + + + + +How to determine which users to show and which users to hide + +Below the user image box, and above the Show +users check box, is a set of two radio buttions: + + +Show only selected users: If this option is selected, only the +users contained in the list labelled Selected Users, will +be displayed in the login window. If Show users is not +checked, this has no effect. +Show all users but no-show users: If this option is selected, +all users will be listed, except those users contained in +the list entitled No show users. If Show +users is not checked, this has no effect. + + + + + +Select users + +This page contains three listboxes. The large listbox on the left +shows all the users on the system which might be a genuine user. + +The top rightmost listbox shows the selected users and the bottom +rightmost listbox shows the users we don't want displayed in the login +window. + +To move a user from one listbox to another you click on the +username in the listbox and click >> to +move the user from the leftmost box the the rightmost box or +<< to move the user from the rightmost box +to the leftmost box. + + + + +Images + +This section of the manual only applies if Show +users is selected. If it is not, this image box has no +effect. + +Every user on the system can be represented by a image. The image +for the user is kept in a file called +$KDEDIR/share/apps/kdm/pics/users/$USER.xpm. +If the user doesn't have such a file the file +$KDEDIR/share/apps/kdm/pics/users/default.xpm +will be used instead. + +To assign a new image to a user just select the user in one of the +listboxes and either drop an imagefile on the image button to the right +or click on the image button and select a new image from the image +selector. + +If no user is currently selected you will be asked if you want to change +the default image. + +The replacement is performed by a &konqueror; process so if the +image file already exists you will be prompted by &konqueror; if you +want to replace it. If you confirm the image will be replaced - you will +not have to press the Apply +button. + + + + + + +Convenience + +In the convenience tab you can configure some +options that make life easier for lazy people, like auto login or +disabling passwords. + +Please think more than twice before using these +options. Every option in the convenience tab is +well-suited to seriously compromise your system security. Practically, +these options are only to be used in a completely non-critical +environment, ⪚ a private computer at home. + + +Automatic Login + +Automatic login will give anyone access to a certain account on +your system without doing any authentication. You can enable it using +the option Enable auto-login. + +Automatic login comes in two flavors: truly automatic +login acts like you would expect automatic login to, &ie; +&kdm; will automatically login without expecting any input from the +user. Enable this using the Truly automatic login +option. If this option is not enabled, &kdm; will start normally, +enabling you to login as any user, and will only perform automatic login +if you kill the X server, ⪚ by pressing &Ctrl;&Alt;Backspace. + +You can choose the account to be used for automatic login in the +list below. + + + + +Password-less Login + +Using this feature, you can allow certain users to login without +having to provide their password. Enable this feature using the +Enable password-less logins option. + +Below this option you will see a list of users for which a password +is required, as well as a (by default, empty) list of users that do not +need to provide a password. When Enable password-less +logins is enabled, you can move users from one list into the +other, by selecting them and then clicking the +>> and << +buttons. + +Again, this option should only be used in a safe +environment. If you enable it on a rather public system you should take +care that only users with heavy access restrictions are granted +password-less login, ⪚ +guest. + +The Automatically login after X server crash +option allows you to skip the authentication procedure when your X +server accidentally crashed. Show previous user +will show the name of the last login already entered into the login +field in &kdm;. Some site administrators would consider even this a +possible security weakness, because potential attackers then know at +least one valid login. + + + + + + + + +
diff --git a/doc/kcontrol/keyboard/Makefile.am b/doc/kcontrol/keyboard/Makefile.am new file mode 100644 index 000000000..16b3221e1 --- /dev/null +++ b/doc/kcontrol/keyboard/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/keyboard diff --git a/doc/kcontrol/keyboard/index.docbook b/doc/kcontrol/keyboard/index.docbook new file mode 100644 index 000000000..489443264 --- /dev/null +++ b/doc/kcontrol/keyboard/index.docbook @@ -0,0 +1,90 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +keyboard + + + +Keyboard + +This module allows you to choose how your keyboard works. + +The actual effect of setting these options depends upon the +features provided by your keyboard hardware and the X server on which +&kde; is running. As an example, you may find that changing the key +click volume has no effect because that feature is not available on your +system. + + +Advanced + + + +Enable keyboard repeat + +When this option is selected, pressing and holding down a key +emits the same character repeatedly until the key is released. Pressing +and holding the key will have the same effect as pressing it multiple +times in succession. + Almost all users will want to have this option enabled, because it +makes navigating through documents with the arrow keys significantly +easier. + + + + +NumLock on KDE Startup + +You can choose to either always Turn on or +Turn off the NumLock when &kde; starts, or you can +choose to have &kde; leave NumLock at whatever it was set to before KDE +started up. + + + + + +Key click volume: + +If supported, this option allows you to hear audible clicks from +your computer's speakers when you press the keys on your keyboard. In +essence, this simulates the click of a mechanical +type-writer. You can change the loudness of the key click feedback by +dragging the slider button or by clicking the up/down arrows on the +spin-button. Setting the volume to 0% turns off the key +click. +Many computers won't support this function. +Very few people would choose to enable this option, since it +generally annoys everyone else in the room. However, if your heart +yearns for the pre-soft-key era, this may help you to re-experience the +warm sentimentality of days-gone-by. + + + + + + + + + + + +
diff --git a/doc/kcontrol/keys/Makefile.am b/doc/kcontrol/keys/Makefile.am new file mode 100644 index 000000000..5b4b56825 --- /dev/null +++ b/doc/kcontrol/keys/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/keys diff --git a/doc/kcontrol/keys/index.docbook b/doc/kcontrol/keys/index.docbook new file mode 100644 index 000000000..6b7d04a6e --- /dev/null +++ b/doc/kcontrol/keys/index.docbook @@ -0,0 +1,191 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + +2002-02-13 +3.00.00 + + +KDE +KControl +key bindings +bindings +shortcuts + + + + +Shortcuts + + +Introduction + +While most of the functionality offered by &kde; can be accessed +using a simple point and click interface, many people +prefer using the keyboard for some tasks. Pressing something like + &Ctrl;F is often +just faster than moving your hands off the keyboard to the mouse, +opening the Edit menu and selecting +Find. + + As different people have different preferences about keyboard +shortcuts, &kde; offers full customization of key +bindings. A key binding or shortcut is a combination of an +action with a key or a combination of keys. + + + + +Use + +In the Shortcuts control module you'll see a list of key +schemes, a list of key bindings in the currently selected +scheme and a frame where you can customize the currently selected key +binding. Also, you'll see a tab for Global +shortcuts and one for Application +shortcuts. + + +Global Shortcuts and Application Shortcuts + +Global shortcuts and application +shortcuts work just the same. Actually, in a certain way +application shortcuts are global as well. The only +difference is: + + +Global shortcuts are shortcuts for +actions that make sense even when no application is opened. These +shortcuts usually refer to actions like switching desktops, manipulating +windows etc. +Application shortcuts refer to actions +that are often available in applications, such as Save, Print, Copy +etc. + + +Please note, that the application shortcuts configured here are +only the standard actions often found in +applications. Most applications will define their own actions as well, +for which you have to customize key bindings using the application's +key bindings dialog. + + + + +Configuring Key Bindings + +Configuring key bindings is pretty easy. In the middle of the +key bindings control module you'll find a list of available +actions. If there's a key binding configured for that action you'll +find it right next to it. Just select the action you want to +configure. + +After you've selected an action you'll notice that most of the +controls below the action list are enabled. There you can configure a +combination of keys or maybe no key binding at all for the selected +action. + + +No key: the selected action will not +be associated with any key. + +Default key: the selected action +will be associated with &kde;'s default value. This is a good choice +for most actions, as &kde; comes with reasonable key bindings we have +thought about. + +Custom key: if this option is +enabled, you can create a key combination for the selected +action. Just select any modifiers (&ie; &Shift;, &Ctrl;, or &Alt;) and +then select a key: just click on the key symbol and after that press +the key you want to assign to this key combination. + + + +As with all control modules, your changes won't take in effect +until you click OK or +Apply. Click Cancel to +discard all changes. + + + + +Configuring Schemes + +A key binding scheme is a set of key bindings that you can +select by name. &kde; comes with several pre-defined key binding +schemes. In addition to these bundled schemes, you will always see a scheme named +Current scheme that represents the set of key +bindings you are using right now (&ie; not the current settings you +are playing with, but what you've been using up to now). + +When you are playing with the key bindings for the first time +you don't have to be afraid of changing the default bindings: &kde; +won't let you overwrite the defaults, so you can always switch back to +the factory presets. By choosing Current scheme +you can return to the set of key bindings you've been using up to +now. However, be careful not to select a scheme when you've made +changes to the key bindings you don't want to lose. + +When you are satisfied with a set of key bindings you've +created, you may want to save them to a scheme of your own, so that +you can still experiment with the bindings and always return to a +certain scheme. You can always do this by clicking on the +Add button. You will be prompted for a name +and then the new scheme will appear in the key schemes listbox. You +can remove your own schemes again by selecting a scheme and clicking +the Remove button. Click the Save +changes button to save any changes you have made to the +currently selected scheme. Note that you can not remove or save +changes to KDE default or to Current +scheme. + +If you want to save your changes while a read-only +scheme is selected, you always have to add a new scheme first! If you +select one of your own schemes because you want to save the changes to +that one, the control module will switch to the key bindings of that +scheme, discarding your changes. + + + + +Modifier Keys + +Different keyboards offer different sets of modifier keys. A +&Mac; keyboard, for example, does not have a &Ctrl; key, and instead +has an Option key. Here you can see what the +available modifier keys for the current keyboard are. + +If you enable Macintosh keyboard the list +of modifiers will change. + +If you have enabled the &Mac; keyboard, you can further enable +MacOS-style modifier usage, to make &kde; behave +more like &MacOS;. + +Finally, you can change what a keypress sends to the &X-Server; +in the X Modifier Mapping section. A common +example is to reconfigure the Caps Lock key, which is +rarely used, to be another &Ctrl; key. This is especially nice if you +are a touch typist, as Caps Lock is much easier to +reach than either of the &Ctrl; keys on a standard keyboard. + + + + + + + +
diff --git a/doc/kcontrol/khtml/Makefile.am b/doc/kcontrol/khtml/Makefile.am new file mode 100644 index 000000000..c54c99e96 --- /dev/null +++ b/doc/kcontrol/khtml/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/khtml diff --git a/doc/kcontrol/khtml/index.docbook b/doc/kcontrol/khtml/index.docbook new file mode 100644 index 000000000..9f204f075 --- /dev/null +++ b/doc/kcontrol/khtml/index.docbook @@ -0,0 +1,352 @@ + + + + +]> + +
+ + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; + + + +2003-10-12 +3.2 + + +KDE +KControl +konqueror +browsing + + + + +Browsing With &konqueror; + +The &konqueror; Browser module of &kcontrol; allows you to select +various options for the appearance and behavior of &konqueror;, the +integrated web browser of &kde;. + + + +Behavior + +The first option you can enable on this page is Enable +completion of forms. If you check this box, &konqueror; will +try to remember what you answer to form questions, and will try to fill +in forms for you with the answers you previously used. + +You can configure the number of form items &konqueror; remembers +with the slider below labelled Maximum +completions + +Of course, anything &konqueror; fills in a form with, you +can still edit before submitting the form! + +The next option is Change cursor over +links. If this option is selected, the shape of the cursor +will change (usually to a hand) whenever it moves over a +hyperlink. This makes it easy to identify links, especially when they +are in the form of images. + +&konqueror; defaults to a single window per page, but has the +capability to open multiple tabs inside a +single window. &konqueror; also, by default, has a &MMB; shortcut to +open any link in a new window. If you enable Open links in +new tab instead of in new window you can &MMB; click on a +link to have it open in a new tab. + +If you are using tabbed browsing, you can choose if a newly +opened tab becomes the active (front) tab, or goes to +the back. On a slow internet connection, or while browsing a page +that has a list of headlines or other links in a list, you may like to +have the new tabs load in the background while you continue reading. +In this case, leave this setting disabled. If you prefer to go +straight to the new page, leaving the old one in the background to +return to later, enable it. + +If you close a window in &konqueror; that has multiple tabs +open, &konqueror; will ask you if you're sure that you meant to close +it. You can toggle on and off this behavior with the +Confirm when closing windows with multiple tabs +checkbox. + +As a convenience feature, if you enable Right click +goes back in history, then clicking an empty area (&ie; not +a link) in the &konqueror; window will act as if you pressed the +Back button on the toolbar. + +The checkbox labeled Automatically load +images, allows you to control whether images on web pages are +loaded by default. Unless you have a very slow connection, you will +probably want to leave this option selected, as there are many web pages +that are difficult to use without images. If you don't select the option +to automatically load images, you can still view the text on the page, +and then load the images if you need them. + +Enabling Allow automatic delayed +reloading/redirecting allows websites to send you to +another page without your interaction. In many cases, this is a +convenience. For example, the website has moved to a new +URL. Many webmasters in this situation will put up +a page on the old site, telling you that it has moved and you may like +to change your bookmark, and then automatically move you along to the +new website. However, such features can be confusing, or annoying, +when misused, and so you may wish to disable it. + +The next setting is Underline links:. You can +choose to underline links Always. If this option +is selected, any text on web pages that acts as a link will be shown in +an underlined font. While many web pages do use color to distinguish +text that acts as a link, underlining makes it very easy to spot +links. + +If you don't like underlined links, you can choose +Never, so that no links are underlined. Or you +can choose a middle ground, Hover, so that links +are underlined when the mouse cursor is resting over them, and not +underlined the rest of the time. + +Many web pages use animated gif images, and these can be very +annoying, and in some cases, quite a drain on your system resources. +The Animations option lets you choose when +animations are enabled. The default is enabled, but you can set this +to disabled, or to run the animation only once, even if the file +itself contains instructions that the animation should run more times, +or continuously. + + + + + +Fonts + +Under this tab, you can select various options related to the use +of fonts. Although the shapes and sizes of fonts are often part of the +design of a web page, you can select some default settings for +&konqueror; to use. + +The first thing you can set here is the font size. There are two +settings which work together to allow you a comfortable browsing +experience. + +Firstly, you can set a Minimum Font Size. +This means, even if the font size is set specifically in the page you +are viewing, &konqueror; will ignore that instruction and never show +smaller fonts than you set here. + +Next you can set a Medium Font Size. This is +not only the default size of text, used when the page doesn't specify +sizes, but it is also used as the base size that relative font sizes are +calculated against. That is, the HTML instruction +smaller, it means smaller than the size you set for this +option. + +For either option, you can select the exact font size in points by +using the up/down spin control (or just typing) next to the option +label. + +These options are independent of each other. Pages that do not +set a font size, or ask for the default, will display with the size +you set from Medium Font Size, while any pages +that ask for a size smaller than your Minimum Font +Size setting will instead show that size. The one does not +affect the other. + +The remaining options are for the fonts to be associated with +different types of markup used in HTML pages. Note +that many web pages may override these settings. If you click anywhere +on a control which shows a font name, a list of font names appears, and +you can select a different font if you like. (If there are a lot of +fonts, a vertical scrollbar appears in the list to allow you to scroll +through all of the fonts.) + +Below this, you can set a Font size adjustment for this +encoding. Sometimes the fonts you want to use for a +particular encoding or language are much larger or smaller than average, +so you can use this setting to bring them into line. + +You can set a default encoding that &konqueror; should assume +pages are when rendering them. The default setting is Use +language encoding, but you can change it to any encoding +available in the list. + + + + +&Java; and JavaScript + +&Java; allows applications to be downloaded and run by a web +browser, provided you have the necessary software installed on your +machine. Many web sites make use of &Java; (for example, online +banking services or interactive gaming sites). You should be aware +that running programs from unknown sources could pose a threat to the +security of your computer, even if the potential extent of the damage +is not great. + +The checkboxes under Global Settings allows +you to turn &Java; support on for all web sites by default. You can +also select to turn &Java; on or off for specific hosts. To add a +policy for a specific host, click the Add... +button to bring up a dialog in which you can type the host name and +then choose to accept or reject &Java; code from that particular host, +which will add the domain to the list on the left of the page. + +You can select a host in the list, and click the +Change... button to choose a different policy for +that host. Clicking the Delete button removes the +policy for the selected host; after deletion, the global settings will +then apply to that host. You can import policies from a file by clicking +the Import... button. To save the current list to a +compressed archive file, click the Export... +button. + +Finally, the group of controls labeled Java Runtime +Settings allows you to set some options for the way in +which &Java; should run. These options are useful for diagnosing +problems, or if you are a &Java; developer, and should not normally +need adjusting. + +If you select the Show Java +Console option, &konqueror; will open a console window from +which &Java; applications can read and write text. While most &Java; +applications will not require such a console, it could be helpful in +diagnosing problems with &Java; applications. + +Use KIO will cause the +JVMto use &kde;'s own KIO +transports for network connections. + +Use security +manager is normally enabled by default. This setting will +cause the JVM to run with a Security Manager in place. This will keep +applets from being able to read and write to your file system, creating +arbitrary sockets, and other actions which could be used to compromise +your system. Disable this option at your own risk. You can modify your $HOME/.java.policy file with the +&Java; policytool utility to give code downloaded from certain sites +more permissions. + +The Shutdown Applet Server when inactive +checkbox allows you to save resources by closing the &Java; Applet +Server when it is not in use, rather than leaving it running in the +background. Leaving this disabled may make &Java; applets start up +faster, but it will use system resources when you are not using a +&Java; applet. If you enable this, you can set a timeout. + +You can either opt to have &konqueror; automatically detect the +&Java; installation on your system, or specify the path to the +installation yourself by selecting Use user-specified +Java. You may want to choose the latter method, for +instance, if you have multiple &Java; installations on your system, +and want to specify which one to use. If the &Java; Virtual Machine +you are using requires any special startup options, you can type them +in the text box labeled Additional Java +Arguments. + + + + +JavaScript + +Despite the name, JavaScript is not related at all to +&Java;. + +The first part of this page works the same as the &Java; page +settings. + +The checkboxes under Global Settings allow +you to turn JavaScript support on for all web sites by default. You +can also select to turn JavaScript on or off for specific hosts. To +add a policy for a specific host, click the +Add... button to bring up a dialog in which you +can type the host name and then choose to accept or reject JavaScript +code from that particular host, which will add the domain to the list +on the left of the page. + +You can select a host in the list, and click the +Change... button to choose a different policy for +that host. Clicking the Delete button removes the +policy for the selected host; after deletion, the global settings will +then apply to that host. You can import policies from a file by +clicking the Import... button. To save the +current list to a compressed archive file, click the +Export... button. + +The final set of options on this page determine what happens +when a page uses JavaScript for specific actions. + +You can individually enable or disable the ability of JavaScript +to manipulate your windows by moving, resizing or changing focus. You +can also disable JavaScript from changing the status bar text, so that +for instance, you can always see where links will take you when +clicked.The choices for these options are Allow and +Ignore. + +For opening a new window, there is even more control. You can +set &konqueror; to Allow all such requests, +Ask each time a request is made, or +Deny all popup requests. + +The Smart setting will only allow +JavaScript popup windows when you have explicitly chosen a link that +creates one. + + + + +AdBlocK + +&konqueror; AdBlocK can be configured to replace or remove +images or frames from web pages that match a series of filters. + +The setting Enable filters enables or +disables the use of list of URL filters. +If Hide filtered images is enabled then +blocked images are completely removed from the page and the space they +occupied is reclaimed. If the option is disabled then a placeholder +image is used in place of filtered images. + +URL expressions to filter is a list of +URLs that will be compared against image and frame names to decide +on fitlering actions. The wildcards can be given as filename style +regular expressions. + +Each filter can either be expressed as a file style wildcard +string (e.g. http://www.site.com/ads/*) or as a full regular expression +by enclosing the filter with forward slashes (e.g. //(ads|dclk)\./). + +Import and export will save or read the current filter list to a +plain text file. Lines prefixed with an exclamation mark (!) are treated +as comments and can be used to clarify or label a set of filters. + + + +Plugins + +The first setting here is Enable Plugins +globally. If you disable this checkbox, then &konqueror; +will not use any plugins. If you enable it, then any installed and +configured plugins that it can find will be used by &konqueror; + +You can also restrict &konqueror; to Only allow HTTP +and HTTPS URLs for plugins by checking the box. + + + +&nsplugins-kcontrol; + + + +
diff --git a/doc/kcontrol/khtml/nsplugin.docbook b/doc/kcontrol/khtml/nsplugin.docbook new file mode 100644 index 000000000..1f8547461 --- /dev/null +++ b/doc/kcontrol/khtml/nsplugin.docbook @@ -0,0 +1,91 @@ + +&Netscape; Plugins + + +Introduction + +As &Netscape;'s Navigator has been a +web browsing standard for many years, so-called &Netscape; plugins have +appeared that allow rich web content. Using those plugins, web sites +can contain PDF files, flash animations, video, &etc; +With &konqueror;, you can still use these plugins to take advantage of +rich web content. + +&Netscape; plugins should not be confused with &konqueror; +plugins. The latter ones specifically extend &konqueror;'s +functionality; they are normally not used to display rich web +content. + + + + +Scan + +&konqueror; has to know where your &Netscape; plugins are +installed. This can be in several places, &ie; you might have +system-wide plugins in /opt/netscape/plugins and your personal +plugins in $HOME/.netscape/plugins. +However, &konqueror; will not automatically use the installed plugins: +it first has to scan a list of folders. You can initiate the scan +by clicking Scan for new plugins. Alternatively, +you can enable Scan for new plugins at &kde; startup +so &konqueror; will scan the appropriate folders every time &kde; +starts up, to see whether new plugins have been installed. + +Enabling Scan for new plugins at &kde; +startup can considerably slow down the startup procedure, +and is known to give difficulty on certain installations. Turn this +option off if you experience problems. + +To find plugins, &konqueror; will look in the folders +specified in the Scan Folders frame. When you +use this control module for the first time, this list will already be +filled with reasonable paths that should work on most operating systems. +If you need to provide a new path, click the New +button; then you can either enter the new path in the text edit box to +the left, or choose a folder using the file dialog by clicking the +New... button. As scanning the folders can take +a little time, you might want to remove folders from the list where +you know that no plugins are installed: do this by selecting a folder +and clicking Remove. Using the +Up and Down buttons you +can change the order in which folders will be scanned by moving the +selected folder up or down. + +As usual, click Apply to save your changes +permanently. + + + + +Plugins + +In this tab, you can see a list of the &Netscape; plugins found by +&konqueror;, displayed as a tree. Double click on a plugin to fold it +out and you'll see that the different mime types this plugin can handle +will be displayed as branches. Fold out a mime type to see its +info. + +This tab is mostly for informational purposes. The only +configurable option is Use artsdsp to pipe plugin sound +through aRts, which is enabled by default. Disable this if +you wish plugins to use their own method for sounds, and you have +configured &arts; in such a way that third-party applications can do +so (for example, by having it exit when idle, or by having it use a +custom sound device on modern soundcards which allow this.) + + + + +Section Author + +This section written by: Jost Schenck +jost@schenck.de + + + + + + diff --git a/doc/kcontrol/kwindecoration/Makefile.am b/doc/kcontrol/kwindecoration/Makefile.am new file mode 100644 index 000000000..ad89ecd92 --- /dev/null +++ b/doc/kcontrol/kwindecoration/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/kwindecoration diff --git a/doc/kcontrol/kwindecoration/index.docbook b/doc/kcontrol/kwindecoration/index.docbook new file mode 100644 index 000000000..c6bfd5276 --- /dev/null +++ b/doc/kcontrol/kwindecoration/index.docbook @@ -0,0 +1,98 @@ + + + +]> + +
+ + + +&Rik.Hemsley; &Rik.Hemsley.mail; + + + +2003-09-28 +3.2 + + +KDE +KControl +kwin +window +border +theme +style + + + +Window Decoration + + +General + +This module allows you to select a style for the borders around +windows. + +Each style has a different look, but also a different +feel. Some have (sometimes invisible) +resize borders all around the edge, which make resizing +easier but moving more difficult. Some have no borders on certain +edges. One (BII) even has a dynamically sized and +positioned title element. + +You are encouraged to experiment with the different styles until +you find one which best suits your pattern of work. + +Choose a window decoration style from the drop down box at the +top of the screen to see a preview of it in the lower pane. + +If there are any configurable options for the theme you chose on +the first page, they will become available below the preview... + + + + + + +Buttons + +This page has instructions directly on it - just drag around the +buttons until you have the order that makes you comfortable. + + +Not all the window decorations are able to comply with your custom +set button order. The ones that cannot are being converted, but at the +time of this release they have not been all been changed. + + +Apart from choosing the window decoration itself, you can choose +here two further options: If there should be a tooltip while you hover +your mouse over a window decoration button, and if the window +decoration should attempt to use a custom set button order. + + +The tooltips can be quite useful if you have set a custom button +order, and then changed to an unfamiliar window decoration. + + + +For accessibility purposes, some window decorations support +extra wide borders. If this is available, you can also choose a +border size here. These large borders are easier to see for low +vision users, and easier to grab for people with limited mobility or +difficulty using a mouse. + + + + + + +
diff --git a/doc/kcontrol/language/Makefile.am b/doc/kcontrol/language/Makefile.am new file mode 100644 index 000000000..ab4abf365 --- /dev/null +++ b/doc/kcontrol/language/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/language diff --git a/doc/kcontrol/language/index.docbook b/doc/kcontrol/language/index.docbook new file mode 100644 index 000000000..c93c16190 --- /dev/null +++ b/doc/kcontrol/language/index.docbook @@ -0,0 +1,218 @@ + + + +]> + +
+ + + + +&Mike.McBride; &Mike.McBride.mail; +&Krishna.Tateneni; &Krishna.Tateneni.mail; + + + + 2003-10-14 + 3.2 + + + KDE + KControl + locale + country + language + + + + + +Country and Language + +This module of the &kde; control center allows you select +customization options that depend on the region of the world that you +happen to live in. There are five different pages in this module, each +of which is described in detail in the following sections. + +In most cases, you can simply select the country you live in, and +the other options will be set in an appropriate manner. + +Below the pages of this module, you can see a preview of what the +settings look like. In addition to positive and negative numbers, you +can see how positive and negative currency values, long and short dates, +and times are displayed. When you change any of the settings, the +preview shows the effects of the changes before you apply them. + + +Locale + +On this page, there are two lists, from which you can +select the country and languages that you want +to use. + +When you click on the Country list, +a menu pops up showing major groups of countries. You can select +one of these regions and see a list of the countries that are +available for that region. + +If the language for the country you have selected is available on your +system, it will be selected automatically. For instance, choosing +Germany as the country will select +German as the language, if it is available. + + + + +Numbers + +On this page, you can select options for how numbers are +displayed. The defaults are selected automatically based on the country +which is currently selected. + +In the text box labeled Decimal symbol, you +can type the character that you want to use to separate the decimal +portion of numbers. You could put anything here you wanted to, but +really, . and , are the +two characters that make the most sense. + +Similarly, you can choose the character which is used to group +units of thousands in numbers. If no character, not even a space, is +present, then there will be no separator for thousands. + +Finally, you can choose what character should be prefixed to +positive and negative numbers respectively. For example, the default +for English is not to have any prefix for positive numbers, and a +- for negative numbers. + + + + + +Money + +Unlike the display of ordinary numbers, conventions for +currency values do vary from region to region. However, you will +find that the defaults are probably fine. + +The character or characters representing the currency symbol +are based on the country that is currently selected. The decimal +symbol and thousands separator work as they do for numbers. The +text box labeled Fract digits allows you +to specify the number of fractional digits used in displaying +currency values. + +For both positive and negative currency values, you can +control whether the currency symbol appears before or after the +numeric value, and how the sign of the value is distinguished +in the display. Note that the symbols used for the sign of +currency values are the same as those used for other numeric +values. + +If the checkbox labeled Prefix currency +symbol is selected, the currency symbol appears +before the numeric value. If this checkbox is cleared, then the +currency symbol appears after the numeric value. + +There are five choices for the way in which the sign of the +currency value is handled: + +The Parens around +option displays the numeric value within a pair of +parentheses. +The Before quantity money +option displays the sign before the numeric value, but after any +currency symbol that may be present. +The After quantity money +option displays the sign after the numeric value, but before any +currency symbol that may be present. +The Before money option +displays the sign before the numeric value as well as any +currency symbol that may be present. +The After money option +displays the sign after the numeric value as well as any +currency symbol that may be present. + + + + + +Time and Dates + +If you use a different calendar system than Gregorian, you can +choose this from the first dropdown box. + +On the rest of this page, there are text boxes for the time, long +date, and short date, in which you can type format strings to control +the way in which times and dates are displayed. + +Except for the special codes described below, any other characters in the +format strings are displayed literally. The special codes consist of a +% sign followed by a character, as shown in the list of +codes below: + + +Time format codes: + + + HH - The hour according to a 24-hour + clock, using two digits (00 to 23). + hH - The hour according to a 24-hour + clock, using one or two digits (0 to 23). + PH (uppercase p) - The hour according + to a 12-hour clock, using two digits (01 to 12). + pH (lowercase p) - The hour according + to a 12-hour clock, using one or two digits (1 to 12). + MM - The current minute using two digits + (00 to 59). + SS - The current second using two digits + (00 to 59). + AMPM - Either am or pm depending on the hour. + Useful with PH or + pH. + + + +Date format codes: + + YYYY - The year, using 4 + digits. + YY - The year, using 2 + digits. + MM - The month, using 2 digits (01 to + 12). + mM - The month, using 1 or 2 digits (1 + to 12). + MONTH - The name of the + month. + SHORTMONTH - The abbreviated name of the + month. + DD - The day, using 2 digits (01 to + 31). + dD - The day, using 1 or 2 digits (1 to + 31). + WEEKDAY - The name of the + weekday. + SHORTWEEKDAY - The abbreviated name of the + weekday. + + + + +Finally, there's a combobox labeled First day +of the week which lets you select which day is the first +one of the week in your country. + + + +Other +You can select the default paper format with the combo box labeled Paper Format. + +Use the drop down box labeled Measure system to select Imperial or +Metric systems of measurement. + + + + +
diff --git a/doc/kcontrol/mouse/Makefile.am b/doc/kcontrol/mouse/Makefile.am new file mode 100644 index 000000000..b0a8d6b17 --- /dev/null +++ b/doc/kcontrol/mouse/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/mouse diff --git a/doc/kcontrol/mouse/index.docbook b/doc/kcontrol/mouse/index.docbook new file mode 100644 index 000000000..62d223de1 --- /dev/null +++ b/doc/kcontrol/mouse/index.docbook @@ -0,0 +1,493 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Brad.Hards; &Brad.Hards.mail; + + + +2004-10-09 +3.03.00 + + +This is the documentation for the &kde; &kcontrol; module that configures mice and other pointing devices. + + + + +KDE +KControl +mouse + + + + +Mouse + +This module allows you to configure your pointing device. Your +pointing device may be a mouse, a track ball, a touch-pad, or another piece +of hardware that performs a similar function. + +This module is divided into several tabs: +General, +Cursor Theme, +Advanced and +Mouse Navigation. +There may also be one or more additional tabs if you have a Logitech mouse +or trackball, providing access to special features. + + + +<guilabel>General</guilabel> + + + +Button Order + +If you are left-handed, you may +prefer to swap the functions of the left and +right buttons on your pointing device by choosing the +Left handed option. If your pointing device has more than two +buttons, only those that function as the left and +right buttons are affected. For example, if you have +a three-button mouse, the middle button is +unaffected. + + + + +Reverse scroll direction + +With this checkbox selected, the scroll wheel (if any) will work in the opposite direction (so that if rolling the top of the scroll wheel towards you previously causes a scroll down, then it will now cause a scroll up). This may be useful to handle a unusual setup of the X server. + + + + + +Double-click to open files and folders (select icons on first click) + + If this option is not checked, icons/files will be opened with a +single click of the left mouse-button. This +default behavior is consistent with what you would expect when you click +links in most web browsers. If checked however, icons/files will be +opened with a double click, while a single click will only select the +icon or file. This is the behavior you may know from other desktops or +operating systems. + + + + +Single-click to open files and folders + +This is the default setting for &kde;. Clicking once on an icon +will open it. To select you can drag around the icon(s) or &Ctrl;Right click, +or simply click and hold to drag it. You can also enable automatic selection of icons using the Automatically select icons checkbox, discussed below. + + + + +Change pointer shape over icons + +When this option is checked, the shape of the mouse pointer +changes whenever it is over an icon. + +This option should be checked in most situations. It gives +more visual feedback and says, in essence, if you click here, something +will happen. + + + + + +Automatically select icons + + +As noted above, if you have Single-click to open files and folders selected, you can select icons by dragging around them, or by using &Ctrl;Right click. If you routinely need to select icons, you may want to enable this checkbox, which will allow icons to be selected automatically by pausing over the icon. The Delay: slider determines how long is required before the automatic selection takes effect. + + + + + +Visual feedback on activation + +When this option is +checked, &kde; gives you visual feedback whenever you click on something and activate it. + + + + + + +<guilabel>Cursor Theme</guilabel> + + +This tab allows you to select from a number of cursor themes. A preview of the cursor display is shown above the listbox. + + +The features provided by this tab may not be available on some systems. Your system may need to be updated to support cursor themes. + + + +If you have additional cursor themes available to you, you can install and remove them using the buttons below the listbox. Note that you cannot remove the default themes. + + + + + +Advanced + + + + +Pointer acceleration + +This option allows you to change the relationship +between the distance that the mouse pointer moves on the +screen and the relative movement of the physical device +itself (which may be a mouse, track-ball, or some other +pointing device.) + +A high value for the acceleration multiplier will lead to large +movements of the mouse pointer on the screen, even when +you only make a small movement with the physical device. + +A multiplier between 1x and +3x will works well for many systems. With a multiplier +over 3x the mouse pointer may become difficult to +control. + + + + +Pointer threshold + +The threshold is the smallest distance that the mouse pointer must +move on the screen before acceleration has any effect. If the movement +is within the threshold, the mouse pointer moves as if the acceleration +were set to 1x. + +Thus, when you make small movements with the physical device (⪚ +mouse), you still have fine control of the mouse pointer on the screen, +whereas larger movements of the physical device will move the mouse +pointer rapidly to different areas on the screen. + +You can set the threshold value by dragging the slider button or +by clicking the up/down arrows on the spin-button to the left of the +slider. + +In general, the higher you set the Pointer +acceleration value, the higher you will want to set the +Pointer threshold value. For example, A +Pointer threshold of 4 pixels may +be appropriate for a Pointer Acceleration of +2x, but 10 pixels might be +better for 3x. + + + + +Double click interval + +This is the maximum amount of time between clicks for &kde; to +register a double click. If you click twice, and the time between those +two clicks is less than this number, &kde; recognizes that as a double +click. If the time between these two clicks is greater than this +number, &kde; recognizes those as two separate +single clicks. + + + + +Drag start time and Drag start +distance + + +If you + +click with the mouse +drag within the time specified in Drag start +time, and +move a distance equal to or greater than the number (of +pixels) specified in Drag start distance + + + +&kde; will drag the selected item. + + + + +Mouse wheel scrolls by + +If you have a wheel mouse, use the slider to determine how many +lines of text one step of the mouse wheel will +scroll. + + + + + + + + +<guilabel>Mouse Navigation</guilabel> + + +This tab allows you to configure the keyboard number pad keys as a mouse-type device. This may be useful when you are working on a device without another pointing device, or where you have no other use for the number pad. + + + + + +Move pointer with keyboard (using the num pad) + + +To enable keyboard mouse mode, you need to select the checkbox labelled Move pointer with keyboard (using the num pad). When you do this, the other settings will become enabled, and you can customize the keyboard pointer behavior further, if required. + + +The various keys on the number pad move in the direction you would expect. Note that you can move diagonally as well as up, down, left and right. The 5 key emulates a click to a pointer button, typically &LMB;. You change which button is emulated by using the / key (which makes it &LMB;), * key (which makes it &MMB;) and - (which makes it &RMB;). Using the + emulates a doubleclick to the selected pointer button. You can use the 0 key to emulate holding down the selected pointer button (for easy dragging), and then use the . to emulate releasing the selected pointer button. + + + + + +Acceleration delay + + +This is the time (in milliseconds) between the initial key press and the first repeated motion event for mouse key acceleration. + + + + + +Repeat interval + + +This is the time in milliseconds between repeated motion events for mouse key acceleration. + + + + + +Acceleration time + + +This is the number of key events before the pointer reaches a maximum speed for mouse key acceleration. + + + + + +Maximum speed + + +This is the maximum speed in pixels per key event the pointer can reach for mouse key acceleration. + + + + + +Acceleration profile + + +This is the slope of the acceleration curve for mouse key acceleration. + + + + + + + + + +<guilabel>Logitech Support</guilabel> + + +Some Logitech USB mice support special features, such as switching to a higher resolution, or +providing cordless status. If KDE was built with libusb support, then you will get an additional +tab for each supported mouse that is plugged in. + + + +The supported devices are: + + +Wheel Mouse Optical +MouseMan Traveler +MouseMan Dual Optical +MX310 Optical Mouse +MX510 Optical Mouse +MX300 Optical Mouse +MX500 Optical Mouse +iFeel Mouse +Mouse Receiver +Dual Receiver +Cordless Freedom Optical +Cordless Elite Duo +MX700 Optical Mouse +Cordless Optical Trackman +Cordless MX Duo Receiver +MX100 Laser Mouse +Receiver for Cordless Presenter + + + +Not all devices support all capabilities (typically cordless devices do not +provide resolution switching, and of course only cordless devices support +cordless status reporting), so some parts of the tab will not be enabled for +some mouse types. + + + +If the mouse supports resolution switching, the Sensor Resolution +radio button group will be enabled, and you can switch from 400 counts per +inch to 800 counts per inch and back. If you use +800 counts per inch, the same physical movement of the mouse +will cause a greater (roughly double) amount of motion of the cursor. This tends +to be popular amongst gamers. + + + +If the mouse supports cordless reporting, the Battery Level +and RF Channel widgets will be enabled. You can only change +the RF Channel if your mouse has two channel support. + + + +Fixing permission problems on Logitech mice + + +Because of the way USB devices work, the code that accesses the current +status on Logitech mice needs to be able to write to the mouse. This +should be handled by your distribution, but if not, you may need to do some +configuration yourself. + + + +On a Linux system, you should use the hotplug system to change the ownership +and permissions on the mouse entry in /proc/bus/usb. One +way to do this is to create a short script +(/etc/hotplug/usb/consoleUserPerms) that changes the ownership +and permissions, as shown below: + + + + + + if [ -f /var/run/console.lock ] + then + CONSOLEOWNER=`cat /var/run/console.lock` + elif [ -f /var/lock/console.lock ] + then + CONSOLEOWNER=`cat /var/lock/console.lock` + else + CONSOLEOWNER= + fi + if [ -n "$CONSOLEOWNER" ] + then + chmod 0000 "${DEVICE}" + chown "$CONSOLEOWNER" "${DEVICE}" + chmod 0600 "${DEVICE}" + fi +fi +]]> + + + + +The usermap file that goes with this is +/etc/hotplug/usb/logitechmouse.usermap, as +shown below: + + + + + + + + + +That should be all that is needed on Linux - just copy the files into +/etc/hotplug/usb/, and when the mouse is +plugged in, the ownership and permissions should be changed +so that the user at the console can access the mouse. + + + + + + + +
diff --git a/doc/kcontrol/netpref/Makefile.am b/doc/kcontrol/netpref/Makefile.am new file mode 100644 index 000000000..8dacf4438 --- /dev/null +++ b/doc/kcontrol/netpref/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/netpref diff --git a/doc/kcontrol/netpref/index.docbook b/doc/kcontrol/netpref/index.docbook new file mode 100644 index 000000000..f97b30b36 --- /dev/null +++ b/doc/kcontrol/netpref/index.docbook @@ -0,0 +1,109 @@ + + + +]> + +
+ + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +2002-10-16 +3.1 + + +KDE +kdebase +kcontrol +network +timeouts + + + + + + +Preferences + +Here you can set timeout values. You might want to tweak them +if your connection is very slow, but the default settings are +appropriate for most users. + +Here Timeout Values are the length of time +an application should wait for an answer from a network operation. + +You can configure the following timeouts: + + + +Socket read: + + Some applications use sockets to +communicate. You can think of a socket as a water tap; while it is +open, water (or in our case, data) comes out, without any interaction. +If something stops this flow of data, the application will wait for +more to come. This could be a very long time, but you can configure a +maximum time for an application to wait with this option. +This setting will only apply to &kde; applications, of course. + + + + +Proxy connect: + + +Sets how long to wait for a connection to a proxy server, if one is configured. + + + + + +Server connect: + + +Sets how long to wait for a connection to a remote server. + + + + + +Server response: + + +Sets how long to wait for a reply from a remote server. + + + + + + +You can configure FTP Options here. At +present there is just two options: + + +Enable passive mode (PASV) +Passive &FTP; is often required when you are behind a firewall. +Many firewalls only permit connections that were initiated from +the inside. Passive &FTP; is controlled by the client, +which makes it usable through firewalls. + + + +Mark partially uploaded files +When a mark is placed in this box, partially uploaded files will +have a .part extension added to the end +of the file. This extension is removed once the file download is complete. + + + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/panel/Makefile.am b/doc/kcontrol/panel/Makefile.am new file mode 100644 index 000000000..06524aebe --- /dev/null +++ b/doc/kcontrol/panel/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/panel diff --git a/doc/kcontrol/panel/index.docbook b/doc/kcontrol/panel/index.docbook new file mode 100644 index 000000000..722c6ed9d --- /dev/null +++ b/doc/kcontrol/panel/index.docbook @@ -0,0 +1,244 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Lauri.Watts; &Lauri.Watts.mail; + + + +2005-02-20 +3.4 + + +KDE +KControl +panel + + + + +Panel + + The &kde; panel (often referred to as &kicker;) is the bar that +you'll usually find at the bottom of the screen when you start up &kde; +for the first time. For detailed help on &kicker;'s usage you can type + help:/kicker in &konqueror; to read +the user manual. + +The panel gives you quick access to applications and makes it +easier for you to organize your desktop. Using the &kde; panel you +can: + + +launch applications using the K menu or +the application buttons +switch desktops using the panel's pager applet + +switch active windows, and minimize or maximize them + +browse folder using the browser menu functionality + +access panel applets that extend the panel's functionality, +offering for example mixers, clocks or a system monitor + + + +<guilabel>Arrangement</guilabel> + +In the Arrangement tab you can configure the size and +position of the panel. + +If you have more than one panel on screen, you can select at the +top of the window which panel you wish to configure. + +In the section labeled Position is a set of +12 small buttons arranged in a square. Each button corresponds to a +location for the panel. Click on a button and notice where the panel +is located on the preview monitor to the right. + +Generally, the available space in kicker is used more +efficiently if the panel is aligned horizontally, &ie; attached to the +top or bottom screen border. + +In the section labeled Length, you can use +the combo box and slider to adjust the minimum +length of the panel. If you place a mark in the checkbox labeled +Expand as required to fit contents, the panel +will become longer if more space is needed. When less space is +required on the panel, the panel will shrink down to the minimum size. +If there is no mark in the checkbox, then the panel is fixed to the +length specified in this section. + +The final section of this table is labeled +Size, and refers to the +height of the panel. The panel's size can be +Tiny, Small, +Medium, Large or +Custom. If you choose +Custom mode, you can resize &kicker; by +specifying a height in the combobox. + +If you have multiple monitors, you can configure the panel for +each screen entirely independently. If you are not sure which screen +is which, Press the Identify and a number will +appear centred on each screen. + + +Then simply choose the screen you wish to configure from the +drop down box labelled Xinerama screen, or choose +All Screens to have identical configurations on +each. + + + + +Hiding + +Depending on your screen resolution you may find that the panel +takes away too much of your precious screen real estate. To save +screen space, the panel offers manual hiding of the panel, an auto +hide feature, and the ability to allow other windows to lay on top of +the panel. These features are selected in the section entitled +Hide Mode. + +The Hide Mode section has three options: + + +Only hide when panel-hiding button is clicked +When this option is selected, the panel will remain visible at +the location you defined unless you click on the button at the far right (for horizontally +oriented) or bottom (for vertically oriented) button. This button has an arrow on it pointed +to the edge of the screen. + +Once clicked, the panel will disappear. If the button is clicked again, the panel will re-appear +at the same location. + + + + +Hide automatically +If this option is selected, then the panel will automatically disappear after +the number of seconds specified in the combo box below the option. To make the panel reappear, +simply move the mouse pointer to the edge of the screen where the panel is located, and the +panel will reappear immediately. + +If you place a mark in the checkbox labeled Show panel when switching +desktops, the panel will automatically reappear when you switch desktops. (The panel +will disappear again after the specified number of seconds.) + + + + +Allow other windows to cover the panel +As this option's label implies, the panel is always on the desktop when +this option is selected. It is now possible, however, for application windows to lay +on top of the panel. + +To restore the panel, simply move the mouse cursor to the screen +location specified in the drop box labeled Raise when the pointer touches +the screen's:. You can change this value by selecting one of the choices +provided in the drop down box. + +Once the panel has moved back on top of the application window, it will stay there +until an application window becomes active again. + + + + +The next section down is labeled Panel-Hiding Buttons. It +consists of two check boxes: Show left panel-hiding button and +Show left panel-hiding button. Use these checkboxes to show and +hide the left and right manual panel hiding buttons. + +If there is no mark in the checkbox labeled Animate +panel hiding, then whenever the toolbar is hidden, is simply disappears. If there +is a mark in the check box, then the panel appears to slide off the edge of the screen. + +You can determine how quickly the panel appears to move by adjusting the slider from +Fast to Slow. + + + +Menus + +In the Menus tab you can configure the panel +menu's behavior. This affects the K menu you will often use to launch +applications, the browser menus you can use to access folders and other +menus like the recent documents menu. + +The K Menu frame offers you some options to +configure the K menu's functionality. This frame consists +of 4 items: + + +The Menu item format: radio +buttons have three options. This determines how the application name +(&ie; &konqueror;, &kword;, &etc;) and the description (&ie; Web +Browser, Word Processor, &etc;) are displayed on the &kmenu;. + + +The Optional Menus checkboxes allow +you to +determine which special menu items appear in the &kmenu;. +The Bookmarks +menu allows you to quickly select from the same bookmarks that are available in &konqueror;. +The Find menu offers access to the &kfind; application to search for local files, and a quick link to a search engine to search for things on the Internet. +The Konqueror Profiles menu allows you to +launch &konqueror; with any of your configured profiles. +The Network Folders menu can launch a +&konqueror; file manager window displaying any of your configured +network folders. +The Preferences menu allows you to launch each &kcontrol; module +directly from the K menu. +The Print System menu provides several menu entries to help manage +the printer(s) attached to your system. +The Quick Browser menu gives you quick links to locations on your hard drive. +The Recent Documents menu lists the most recently edited documents and will automatically +launch the application to edit or view this document. +The System menu allows you quick access to +some commonly visited places, including your Home folder, and the +Trash. You may find this useful instead of having a separate entry for +each of these in the &kmenu; +The Terminal Sessions menu provides menu items to launch several different types of +terminal programs (command line interfaces). + + +Show side image will add a small +image to the side of the menu. This is purely decorative. + +The Edit K Menu button launches the &kde; +menu editor. + + + In the QuickBrowser Menus area you can configure +whether the panel's browser menus will show hidden files or not (hidden +files on &UNIX; systems are those whose filenames begin with a dot) as +well as how many files at most will be shown in a browser menu. The +latter option may be especially useful if you have a rather small screen +resolution, as then the browser menus will quickly fill up your screen +when you browse folders containing many files. + +The quick start section in the K menu offers quick access to +programs you have used often or recently. In the Quick Start Menu Items +frame you can choose whether +this section will show the most recently or the most frequently used +programs. Using the option Maximum number of entries +combo box, you can configure how many programs the quick start +section will remember. + + + + + + + +
diff --git a/doc/kcontrol/panelappearance/Makefile.am b/doc/kcontrol/panelappearance/Makefile.am new file mode 100644 index 000000000..1a92a45e8 --- /dev/null +++ b/doc/kcontrol/panelappearance/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/panelappearance + diff --git a/doc/kcontrol/panelappearance/index.docbook b/doc/kcontrol/panelappearance/index.docbook new file mode 100644 index 000000000..1619c3f12 --- /dev/null +++ b/doc/kcontrol/panelappearance/index.docbook @@ -0,0 +1,122 @@ + + + +]> + +
+ + + + +Mike +McBride + + +Jost +Schenck + + + + +2003-10-06 +3.2 + + +KDE +KControl +panel + + + + +Panel + +Here you can configure the panel's overall appearance. + +You can also have the icons themselves zoom out when the +mouse is over them, with the Enable icon zooming +option. You can choose to have tooltips appear when your mouse button is +over an icon, by enabling the Show tooltips +option. + + +Button Backgrounds + +The &kde; panel supports so-called Button +Backgrounds. This means that the buttons shown on the panel +will be drawn using configurable images. To enable button backgrounds, +simply choose the button type from the list, and change the drop down +box to the color image you would like to use. Choose +Default to return to an unstyled button. If you +choose Custom color, the color button next to the +drop down list will be enabled. Click on it to select a custom color +to use. + + + + +<guilabel>Panel Background</guilabel> + +Enable transparency to turn the entire +panel transparent. The desktop background will show through instead +of a background image or color. + +There will still be small handles beside each applet, to allow +you to locate, move, and configure them. These can be turned off in +the Advanced Options + +If you check Enable background image a +picture will be used to draw the panel's background, just as you +can use a picture for the desktop background. You can specify an image +file in the line edit box below or choose one by clicking on the +Browse button. You'll see a preview of the +selected picture on the right. + +The image can be tinted on-the-fly by enabling the option +Colorize to match the desktop color scheme. You +might use a grayscale texture that is tinted in this manner, to create +a particular effect. + + + +<guilabel>Advanced Options</guilabel> + +The Hide button size: option allows you to +choose a width in pixels for the hide buttons, if they are +visible. + +The panel itself has several default sizes set, which you can +switch between by simply dragging the edge of it, or by &RMB; clicking +on an empty space in the panel, choosing Size +and selecting the desired size from the submenu. If you enable +Allow Drag and Drop resizing of panels then by +choosing Custom in the panel menu, you can +drag the panel edge to any size you like. + +Applet handles are normally visible beside each applet on the panel, so that it is clear where to click to configure them, or to get to the panel menu. You can instead have them Fade out, or hide unless you hover the mouse over them, or you can choose to Hide them completely. + +Finally, if the panel is transparent, you can tint it with a +color of your choice. The slider allows you to choose how opaque the +tint is. At the lowest end, there is no tint visible, while at the +highest, the panel is not transparent at all. + + + + +Section Author +This section written by: Jost Schenck jost@schenck.de +Minor update by Mike McBride +mpmcbride7@yahoo.com + +Some new options added by Lauri Watts +lauri@kde.org + + + + + + + +
diff --git a/doc/kcontrol/passwords/Makefile.am b/doc/kcontrol/passwords/Makefile.am new file mode 100644 index 000000000..6c8d0b013 --- /dev/null +++ b/doc/kcontrol/passwords/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/passwords diff --git a/doc/kcontrol/passwords/index.docbook b/doc/kcontrol/passwords/index.docbook new file mode 100644 index 000000000..3aa2ed0bc --- /dev/null +++ b/doc/kcontrol/passwords/index.docbook @@ -0,0 +1,84 @@ + + + +]> + +
+ + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; + + + +2003-10-16 +3.2 + + +KDE +KControl +password + + + + + +Passwords + + +Introduction + +This module of the &kcontrol; gives you options for configuring the way in +which the &kdesu; program treats passwords. &kdesu; will ask you for a password +when you try to carry out some privileged actions, such as changing the +date/time stored in your system clock, or adding new users on your +computer. + +Privileged actions such as those described above can only be +carried out by root or a +user with administrator permissions on your system. You will need to +enter the password for the root account when you want to carry out +such actions. + +The options in this module do not affect the behavior of +passwords in other programs such as &kmail;. + + + + + +Use + +There are two configuration options for passwords. The first is +to control the visual feedback that you receive when you type a +password. The actual characters in the password are never shown on the +screen. You can choose to have each character represented by a +* character. If you want to make it harder for someone +who might be watching your screen to figure out how many characters +there are in the password, you can choose to have each character in +the password be represented by three asterisks rather than just +one. Still another option is not to have any visual feedback at all, +so nothing appears on the screen when you type a password. + +If you work in a reasonably secure environment, you can check +the option labeled Remember Passwords, and then +choose a time period in minutes using the spinner labeled +Timeout. (You can either type a number between 5 +and 1200 minutes, or use the arrows on the spinner.) + +If the Remember passwords option has been selected, +kdesu will not ask you for a password for the length +of time specified, after you have given the password once. Keep in mind, +however, that this makes your workstation less secure. + +You should avoid selecting the Remember +passwords option if you are working in an insecure area, such as a +publicly accessible workstation. Also, note that choosing a shorter timeout may +be better if you are in a less secure environment. + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/performance/Makefile.am b/doc/kcontrol/performance/Makefile.am new file mode 100644 index 000000000..194fae838 --- /dev/null +++ b/doc/kcontrol/performance/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/performance diff --git a/doc/kcontrol/performance/index.docbook b/doc/kcontrol/performance/index.docbook new file mode 100644 index 000000000..b0acf0685 --- /dev/null +++ b/doc/kcontrol/performance/index.docbook @@ -0,0 +1,102 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2005-03-04 +3.4.0 + + +KDE +KControl +system performance +performance +preload + + + + +Performance Settings + +&kde;, is used on a wide variety of computers by a wide variety of users. Under the category of +performance, this dialog box allows each user to adjust options which may make the computer that &kde; is +installed on feel more responsive. + +This module is divided into two tabs. + + +&konqueror; performance options +&konqueror; instances +The first section of this dialog is labeled Minimize Memory Usage and has three options which determine maximum number of instances of &konqueror; that can be open on one machine at any one time. + +Do not confuse &konqueror; instances, with &konqueror; windows or tabs. The number of konqueror instances is determined by &kde; not by the user. You can think of instances as the hidden data of your &konqueror; windows and tabs. One &konqueror; instance can contain the data for multiple windows or tabs. Your choice on the following radio buttons does not limit the number of windows you can open at one time, but rather, how many instances of &konqueror; you can have open. +The reason the choices you make in this dialog box are important is evident when something goes wrong and &konqueror; is forced to close an instance. All &konqueror; windows associated with a &konqueror; instance must be closed immediatly (without time to save data or bookmark locations). Therefore, the more instances you can have open at one time, the less likely a problem in one instance will affect all of your work. Each instance requires more memory which can be a problem on systems with less system memory. + +Your options are: + + + +Never +There are no restraints. Any number of &konqueror; instances can be open at any one time. The advantage of this option is if any &konqueror; instance crashes the remaining will be unaffected. The disadvantage is that each &konqueror; instance uses more memory. + + + +For file browsing only (recommended) +If this option is selected, you can have as many as you want &konqueror; instances open that are browsing the web, but only one instance of &konqueror; for file management. + + + +Always (use with care) +If this option is selected, you can only have one instance of &konqueror; running at any one time. This saves system memory, but if your &konqueror; window crashes, all your browsing windows close immediatly without warning. This should only be used for seriously memory limited systems. + + + +Preloading +The subsection labeled Preloading also makes a tradeoff between memory and performance. + +Preloading refers to loading an instance of &konqueror; into memory before a user asks to start &konqueror;. The positive effect of this is that when a user asks &kde; to load &konqueror; the window appears instantly + because most of the application has been preloaded. The negative effect is that this instance of &konqueror; uses memory that +could be used by other programs. By default, when a user closes &konqueror;, &kde; does not close the instance. +This means that the next time a user wants &konqueror; loaded, it is nearly instantanous again. +The spinbox labeled Maximum number of instances kept preloaded: can be used to adjust the maximum number of preloaded instances. This option does not affect instances when they are loaded. It also does not limit the number of instances that can be used by active windows. It only affects the number of preloaded instances. +The checkbox labeled Preload an instance after &kde; startup does just what it says. It tells +&kde; to preload one instance of &konqueror; at the startup of &kde;. +This does extend the startup time for &kde;. +The final checkbox labeled Always try to have at least one preloaded instance signals to &kde; that you always want &kde; to have one preloaded, but not used, instance of &konqueror; available. This option will actually decrease performance on some machines (especially those with limited physical memory). + + +&kde; system performance options +Click on the tab labeled System. +Currently there is only one option labeled Disable system configuration startup check. + +When &kde; starts, it checks several directories for changes to configuration. Most of these changes relate to installation and uninstalling applications to the computer. This scan extends the startup time for &kde; and many times this scan is not needed as the configuration is current from the last time &kde; was started. When the configuration has changed &kde; uses this scan to update various datafiles to ensure a smooth user experience. +You are given the option to skip this initial scan during startup. &kde; developers strongly suggest you do not disable this scan because of the potential to introduce instability into your system. +If you do select this option: + +&kde; will wait to perform the scan until after &kde; has started. This scan will be performed after the desktop is loaded. +In the event of a crash, &kde; will not perform a backtrace because your problem may be related to the delayed scan. +Switch this option off if any application is crashing as a delayed scan may be responsible for the crash. + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/proxy/Makefile.am b/doc/kcontrol/proxy/Makefile.am new file mode 100644 index 000000000..ce9c3748a --- /dev/null +++ b/doc/kcontrol/proxy/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/proxy diff --git a/doc/kcontrol/proxy/index.docbook b/doc/kcontrol/proxy/index.docbook new file mode 100644 index 000000000..0a47cec36 --- /dev/null +++ b/doc/kcontrol/proxy/index.docbook @@ -0,0 +1,197 @@ + + + + +]> + +
+ + + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; + + + +2002-02-11 +3.00.00 + + +KDE +KControl +proxy +proxies + + + + +Proxies + + + +Introduction + +Proxies are programs running on a computer that acts a server on +the network you are connected to (whether by modem or other +means). These programs receive &HTTP; and &FTP; requests, retrieve the +relevant files from the internet, and pass them on to the client +computer that made the requests. + +When you have configured a proxy, &HTTP; and/or &FTP; requests +are re-routed through the computer that is acting as a proxy server. +However, you can also select specific hosts which should be contacted +directly, rather than through the proxy server. If you are on a local +network, for example, access to local hosts probably doesn't need to +go through a proxy server. + +You should only need to configure a proxy server if your network +administrator requires it (if you are a dial-up user, that would be +your internet service provider or ISP). Otherwise, +especially if you are feeling a bit confused about this proxy +business, but everything seems to be fine with your internet +connection, you don't need to change anything. + +Please note that using proxy servers is optional, but has the +benefit or advantage of giving you faster access to data on the +internet. + +If you are uncertain whether or not you need to use a proxy +server to connect to the internet, please consult with your internet +service provider's setup guide or your system administrator. + + + + + +Use + + + +Connect to the Internet directly + + +Select this option if you do not want to use a proxy server. + + + + +If you have decided to use a proxy, you have several methods to +configure the settings for it. + + + +Automatically detected script file + + +Select this option if you want the proxy setup configuration +script file to be automatically detected and downloaded. +This option only differs from the next choice in that it +does not require you to supply the location of +the configuration script file. Instead, it will be automatically +downloaded using Web Access Protocol Discovery +(WAPD). + +If you have a problem using this setup, please consult the +FAQ section at http://www.konqueror.org for +more information. + + + + +Specified script file + +Select this option if your proxy support is provided through a +script file located at a specific address. You can then enter the +address in the location text box, or use the folder +icon to browse to it. + + + + +Preset environment variables + +Some systems are setup with $HTTP_PROXY to allow +graphical as well as non-graphical applications to share the same +proxy configuration information. +If you know this applies to you, select this option and click on +the Setup... button to provide the environment +variable names used to set the address of the proxy server(s). + + + + +Manually specified settings + +Select this option, and click on the +Setup... to manually setup the location of the +proxy servers to be used. + +If you choose this option, another dialog will pop up. + +The complete addressing information for the proxy includes both +the internet address and a port number. You should enter these into +the relevant text boxes. The arrow button copies +the information from the HTTP line to the +FTP line, in order to help save some +typing. + +If there are hosts which you can connect to without going +through the proxy server, you can press Add to +add the names of these hosts, separated by in the text box labeled +No Proxy For:. For example, hosts that are on +your local network can probably be contacted directly. + +You can also choose Only use proxy for entries in this +list. + +Check this box to reverse the use of the exception list, &ie; +the proxy servers will only be used when the requested &URL; matches +one of the addresses listed here. + +This features is useful if all you need is a proxy to access a +few specific sites, for example, an internal intranet. If you have +more complex requirements you might want to use a configuration +script. + + + + + + + +<guilabel>Authorization</guilabel> + +Here you can choose between two types of authentication, if your +proxy requires it. You can have Prompt as +needed, the default, in which case &konqueror; will only +ask for a username or password if it needs to. + +The other option is Use automatic login. +Select this option if you have already set up a login entry for your +proxy server in the +$KDEDIR/share/config/kionetrc +file. + + + + +<guilabel>Options</guilabel> + + +Use persistent connections to proxy + +Use persistent connection to your proxy server. Keeps connection to proxy open, helps lower bandwidth/speed up connection. Enabling this option will require the proxy server's cooperation, if the proxy server does not support this, it will bring your internet to a stop. + + + + + + +&socks-kcontrol; + + + +
diff --git a/doc/kcontrol/proxy/socks.docbook b/doc/kcontrol/proxy/socks.docbook new file mode 100644 index 000000000..73c5e2ec6 --- /dev/null +++ b/doc/kcontrol/proxy/socks.docbook @@ -0,0 +1,56 @@ + + + +&Lauri.Watts; + + + + +SOCKS + +SOCKS is a protocol to execute proxy requests for a client. SOCKS +is capable of authentication and encryption of traffic, and is often +found in corporate settings, as opposed to home users. For more +information about SOCKS, see the NEC website + +With this module you can enable most of the network aware &kde; +applications to transparently use SOCKS. + +Setting up of a SOCKS client is outside the scope of this +document, and the differences between the commonly used ones are very +large. If you already have a working SOCKS implementation, allowing you +to use commandline clients (for example, if lynx or +ftp are already working) then you can simply check +the Enable SOCKS support checkbox. + +When this box is checked, several further options become available +to you. + +First, you should select which of the various SOCKS clients you +have installed on your computer. &kde; will attempt to find this out by +itself, if you choose Auto detect. If you know the +client you have, you could choose either NEC +Socks or Dante. If you have a +custom built SOCKS library to use, you can select Use custom +library and then enter the path to it in the +Path field. + +If you want &kde; to auto detect the SOCKS library in use, but you +suspect it isn't looking in the right places or you have installed it in +a non-standard location, then you can add further paths to be searched in +the bottom of this panel. Use the Add and +Remove to add or remove paths. + +At any time while filling in this module, you can press the +Test button, and &kde; will report immediately +with a message box to tell you if it could find and initialize SOCKS or +not. + +Changes made here will not affect any applications that are +already open. You will need to close and restart them before they are +able to connect via SOCKS. + + + + diff --git a/doc/kcontrol/screensaver/Makefile.am b/doc/kcontrol/screensaver/Makefile.am new file mode 100644 index 000000000..d9412ca98 --- /dev/null +++ b/doc/kcontrol/screensaver/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/screensaver diff --git a/doc/kcontrol/screensaver/index.docbook b/doc/kcontrol/screensaver/index.docbook new file mode 100644 index 000000000..67cb99411 --- /dev/null +++ b/doc/kcontrol/screensaver/index.docbook @@ -0,0 +1,203 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; + + + +2005-02-20 +3.4 + + +KDE +KControl +screensaver +screen saver + + + + + +Screen Saver + +Using this module, you can choose your screen saver, determine +how much time must pass before the screen saver is activated, and add +or remove password protection to your screen saver. + + +Choosing the screen saver, and configuring its options + +In the Settings box is a check box +labeled Start screen saver automatically. This +box must have a mark in it, or &kde; will not launch any screen saver +and it will not allow you to adjust the settings of your screen +saver. + +Along the left side is a list of all available screen savers. You can +select a screen saver by simply clicking on its name. Once +you have selected a screen saver, you will see a small preview on the +monitor on the right. + +The preview monitor will often show the screen saver +larger than it is when the screen saver is activated. This is done on +purpose, since many of the details of the screen savers would be +unintelligible if actually scaled down to such a small +size. + +Each screen saver has a different set of setup options. By +clicking on Setup..., a dialog box will appear with +all available options. As you adjust the options, the preview box in +the dialog box will show you what effect you will achieve with the +current settings. + +When you are done setting up your screen saver, click +OK. Clicking Cancel +will erase any changes you made in this dialog box, and return you to the +screen saver module. + +Clicking the About button will give you +the Copyright and Author information if you are interested. + +When you think you have all the options set the way you want, +simply click on Test to immediately start the +screen saver exactly as it will appear. + + + + +Setting the time, priority and passwords for screen +savers. + +Below the screensaver list is a check box to have the screen saver Start automatically check box, and a spin box which determines the period of inactivity before the screen saver should be started. You can enter any postive number of minutes in this box. + +Below that is a check box labeled Require password to +stop screen saver. If it is checked, when you click a key +or click a mouse button to end the screen saver and return to your +work, you must enter a password. The password used is the same +password you used to login to your machine. If there is no mark in +the check box, no password is required to return to your +desktop. + +Enable the check box Make aware of +power management if you don't want the screensaver to start +while you watch TV or movies on your monitor. + + + +Using a non-&kde; screen saver + +&kde; does not prevent another screen saver from working. To use a +different screen saver, such as xscreensaver, simply +disable the &kde; Screen Saver, and set up your other screen saver program +normally. + + + + +Removing and restoring a screen saver from your system + +If you want to remove a screen saver from the list in this +Control Center Module, you will need to rename a file on your +system. + +Working as a root user is a potentially dangerous +situation. While unlikely, it is entirely possible to do permanent +damage to your system while working as +root. + +Be very careful following the next set of +directions + +To delete a screen saver, type the following commands: + + +bash$ cd +$KDEDIR/share/applnk/System/ScreenSavers +bash$ ls + + +This will give you a list of files. You will notice +similarities between some of the file names and that of the screen saver you +want to remove. Simply rename the file of similarly named desktop +file to a name which does not end in +desktop. + +Example: + +bash$ cd +$KDEDIR/share/applnk/System/ScreenSavers +bash$ mv KSpace.desktop KSpace.backup + + +Will remove Space (GL) from the list + +You must close the &kcontrolcenter; entirely and restart it before +the changes will be seen. + +To restore the disabled screen saver, simply rename the file back to its +original name: + + +bash$ cd +$KDEDIR/share/applnk/System/ScreenSavers +bash$ mv KSpace.backup KSpace.desktop + + +Restart the &kcontrolcenter;, and the screen saver is back in the +list. + + + + +Advanced Settings: Grace period + +There is a five second grace period after the screen saver +begins before a password is required even if Require +password is checked. +Locking the desktop manually, by clicking the lock icon +in the &kde; panel, causes the password protection to engage immediately with +no grace period. +To alter the grace period setting, you need to manually edit the +configuration file. To do so: + +$ cd ~/.kde/share/config + + +Now, using a text editor (the example uses &kate;, the &kde; text editor), +load the kdesktoprc. + +$ kate kdesktoprc + + +Search through the file for the section labeled +[Screensaver]. +Look through all lines in the section for an entry entitled +LockGrace. +If the entry exists, you can edit the value of the entry. +[Screensaver] +LockGrace=3000 +The value of the entity represents the duration of the grace period +in milliseconds. An entry of 3000, would change the grace period to 3 seconds. +You can set the value of the entry to any number between zero (no grace period) +and 300000 (5 minutes). + +If the entry does not exist, simply add the entry to the end of the +section. + +Any changes to the configuration entry take effect +immediately. + + + + + +
diff --git a/doc/kcontrol/screenshot.png b/doc/kcontrol/screenshot.png new file mode 100644 index 000000000..f73f380cf Binary files /dev/null and b/doc/kcontrol/screenshot.png differ diff --git a/doc/kcontrol/smb/Makefile.am b/doc/kcontrol/smb/Makefile.am new file mode 100644 index 000000000..9f75f1d22 --- /dev/null +++ b/doc/kcontrol/smb/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/smb diff --git a/doc/kcontrol/smb/index.docbook b/doc/kcontrol/smb/index.docbook new file mode 100644 index 000000000..3d3a0ea6a --- /dev/null +++ b/doc/kcontrol/smb/index.docbook @@ -0,0 +1,106 @@ + + + +]> + +
+ + + +&Mike.McBride; &Mike.McBride.mail; +&Jost.Schenck; &Jost.Schenck.mail; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +Windows shares + + + +Windows Shares + + +Introduction + +In many small local area networks, the SMB +protocol is used to offer network services. Names like +&Windows; Network or &Windows; for Workgroups +Network or LanManager are often used as +well. Using SMB you can access so-called +shares (&ie; folders made available by the server) +as well as printers. + +&kde; comes with built-in support for the SMB +protocol. As &kde; is network-transparent that means you can access +SMB shares from everywhere you can access your +local files, for example in the &konqueror; file manager and in the +file dialog. To make use of this you should provide &kde; with some +information on your SMB network. But don't worry, +this is normally pretty simple as, for example, all the Windows +clients in your network need and have the same information. + + + + + +For the SMB protocol to work, it is +required to have Samba correctly +installed. If you have an NT domain controller, you will need at least +Samba version 2.0 or higher. If you want to +access &Windows; 2000 shares, you will need +Samba version 2.0.7 or higher. Older +versions may work too, but have not been tested. + + + + + + +Use + +Although there are a lot of insecure SMB +networks out there which allow access to anyone, in principle you have +to authenticate yourself to access the services of an +SMB server. By default, &kde; will use the data +entered in the Default user name and +Default password fields to authenticate itself on +SMB hosts. If you leave the field Default +user name empty, &kde; will try to access +SMB hosts without a username. If you leave the +default password empty, it will try without a password. If &kde; is +unsuccessful accessing the host using these settings, you will be +asked for a username and a password. + +While it makes things more comfortable if &kde; +stores your SMB password, this may be a security +problem. If you are using SMB in a security +conscious environment, you should not store your password here but +rather enter it anew every time you need to access an +SMB host. + +In the Workgroup field, you can enter your +workgroup name. If you don't know it, ask your system administrator +or have a look at other already configured machines in your network. +However, in most cases providing the workgroup name is not required, +so you probably can also leave this empty. + +If the option Show hidden shares is +checked, shares ending with a $ will be shown. + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/spellchecking/Makefile.am b/doc/kcontrol/spellchecking/Makefile.am new file mode 100644 index 000000000..7eb60d12b --- /dev/null +++ b/doc/kcontrol/spellchecking/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/spellchecking diff --git a/doc/kcontrol/spellchecking/index.docbook b/doc/kcontrol/spellchecking/index.docbook new file mode 100644 index 000000000..87279d41b --- /dev/null +++ b/doc/kcontrol/spellchecking/index.docbook @@ -0,0 +1,88 @@ + + + +]> + +
+ + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +2003-10-13 +3.2 + + +KDE +Spelling +dictionary + + + + + + +Spell Checker + +The configuration options available here are used by all &kde; +applications that use &kspell;, which is a front end to +ispell or aspell. + + + +Create root/affix combinations not in +dictionary + +Selecting this option allows the spell checker to register as correct combinations of root words with suffixes or prefixes even if the particular combination is not listed in its dictionary database of words. + + + + +Consider run-together words as spelling +errors +If this is selected, then words that appear in the +dictionary separately, but have been run together, are considered to be +spelling errors. For example, even though alarm and +clock might be in your dictionary, if +alarmclock is not, it will be flagged as a spelling +error. + + + +Dictionary: + +Choose from the available dictionaries, which one to use for +&kspell;. + + + + +Encoding: + +You should select the one that matches the character set you are +using. In some cases, dictionaries will support more than one encoding. +A dictionary might, for example, accept accented characters when +Latin1 is selected, but accept email-style +character combinations (like 'a for an accented +a) when 7-Bit-ASCII is +selected. Please see your dictionary's distribution for more +information. + + + + +Client: + +You can choose which of the installed client applications on your +system to use. For example, you can choose ispell. + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/useragent/Makefile.am b/doc/kcontrol/useragent/Makefile.am new file mode 100644 index 000000000..c7efa77d7 --- /dev/null +++ b/doc/kcontrol/useragent/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/useragent diff --git a/doc/kcontrol/useragent/index.docbook b/doc/kcontrol/useragent/index.docbook new file mode 100644 index 000000000..14be0fcf2 --- /dev/null +++ b/doc/kcontrol/useragent/index.docbook @@ -0,0 +1,117 @@ + + + +]> + +
+Browser Identification + + +&Krishna.Tateneni; &Krishna.Tateneni.mail; + + + +2003-10-12 +3.2 + + +KDE +KControl +user agent +browser +identification + + + + + +Browser Identification + + + +Introduction + +When &konqueror; connects to a web site to retrieve information, +some basic identifying information is sent to the web site in the form +of a User Agent header. + +Because of minor differences in the way that different web +browsers function, web sites that rely too much on a single browser may +sometimes not display as intended when viewed using another +browser. Some web sites are smart enough to examine the contents of the +user agent header and incorporate this information in the +HTML code so that the content is displayed correctly +regardless of the browser used. + +However, you may find that some web sites refuse to function +correctly unless you are using a browser recognized as +proper by that site. In these cases, you may find it +necessary to fool the web site by having &konqueror; report itself to be +another browser by means of the user agent header. + + + + +Use + +In this module you can configure the +type of browser that &konqueror; will report itself to be. You can +control this information by web site. Usually, the list box that is +labeled Site/Domain Specific Identification will be +empty, so that &konqueror; will always use its default useragent +string. + +You can disable the sending of a user agent entirely, by +unchecking the Send identification +checkbox. This may cause strange behavior on some sites, and may even +deny you access to some websites, so disable this with caution. + +To configure a new agent binding, press the +New... button. Type the name of the server or +a domain in the text box at the top of the dialog that pops up, which +is labeled When browsing the following +site. + +Note that you can not use the wildcard +character * in this text box. However, the string +kde.org will match all hosts in the domain +kde.org + +After typing the name of the server, type in the identifying +string in the next combo box, which is labeled Use the +following identity:, or choose a string from the list. If +you don't choose a string from the list, you will need to know what a +valid string from the browser looks like. For example, you could type +Mozilla/4.0 (compatible; MSIE 4.0). + +In the field labeled Alias (description) +you can enter a descriptive name for the configured binding, ⪚ +Netscape Navigator 4.75 on Linux for the +useragent string Mozilla/4.75 (X11; U; Linux 2.2.14 +i686). + +You can click on an existing entry in the Configured +agent bindings list, and then modify the contents of the +text boxes, followed by clicking Change.... + +The Delete button can be used to delete +the selected entry in the list of configured agent bindings. The +Delete All will remove all the configured user +agent strings. Click the Apply to take your +changes in effect. + +You can use the checkboxes at the top of the screen to build a +user agent that is uniquely yours, by choosing your own combination of +operating system name and version, platform, processor type, and +language. + +In all cases, the user agent that is being sent by default is +displayed in bold text at the top of the page. + + + + + +
\ No newline at end of file diff --git a/doc/kcontrol/windowmanagement/Makefile.am b/doc/kcontrol/windowmanagement/Makefile.am new file mode 100644 index 000000000..3e5215103 --- /dev/null +++ b/doc/kcontrol/windowmanagement/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = kcontrol/windowmanagement diff --git a/doc/kcontrol/windowmanagement/index.docbook b/doc/kcontrol/windowmanagement/index.docbook new file mode 100644 index 000000000..650b8d2aa --- /dev/null +++ b/doc/kcontrol/windowmanagement/index.docbook @@ -0,0 +1,63 @@ + + + +]> + +
+ + + +&Lauri.Watts; &Lauri.Watts.mail; + + + +2005-02-21 +3.4 + + +KDE +KControl +window settings +window placement +window size + + + +Window Specific Settings + +Here you can constomize window settings specifically only for +some windows. + + +Please note that this configuration will not take effect if you +do not use &kwin; as your window manager. If you do use a different +window manager, please refer to its documentation for how to customize +window behavior. + + +Many of the settings you can configure here are those you can +configure on a global basis in the Window Behavior +&kcontrol; module, however some of them are even more detailed. + +They encompass geometry, placement, whether a window should be +kept above or below others, focus stealing prevention, and translucency +settings. + +You can access this module in two ways: from the titlebar of the +application you wish to configure, or from &kcontrol;. If you +start it from within &kcontrol; you can use the +New... to create a window profile, and the +Detect button on the resulting dialog to +partially fill in the required information for the application +you wish to configure. + +You can also at any time Modify... or +Delete any stored settings profile, and +reorder the list. Reordering the list is a convenience to help you sort +the profiles, and has no effect on how they are applied. + + + +
\ No newline at end of file diff --git a/doc/kdcop/Makefile.am b/doc/kdcop/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/kdcop/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/kdcop/index.docbook b/doc/kdcop/index.docbook new file mode 100644 index 000000000..f92de1232 --- /dev/null +++ b/doc/kdcop/index.docbook @@ -0,0 +1,78 @@ + + + + + +]> + + + + +The &kdcop; Handbook + + + + + + + +
+
+
+ +
+ +&FDLNotice; + + + +2002-12-16 +0.00.00 + + + + + +&kdcop; is a program to help you browse available dcop functions. + + + + + +KDE +Kompare + + +
+ + Introduction +The documentation for &kappname; was not finished when &kde; was installed on +this computer. If you need help, please check The &kde; Website for updates, or by +submitting your question to The +&kde; User Mailing list. The &kde; +Team + +&underFDL; + + + +&documentation.index; +
+ + diff --git a/doc/kdebugdialog/Makefile.am b/doc/kdebugdialog/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/kdebugdialog/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/kdebugdialog/index.docbook b/doc/kdebugdialog/index.docbook new file mode 100644 index 000000000..72634224d --- /dev/null +++ b/doc/kdebugdialog/index.docbook @@ -0,0 +1,134 @@ + +KDebugDialog"> + + + + + +]> + + + +The &kdebugdialog; Handbook + + +&David.Faure; &David.Faure.mail; + + + +2001-02-13 +0.03.00 + + +This document describes &kdebugdialog;. + + + +KDE +KDebugdialog + + + + +What is KDebugDialog? + +It is a dialog box for managing diagnostic messages at runtime. + + +If you simply start kdebugdialog, you will +see a list of areas, that can be disabled or enabled. A +kdDebug(area) call in the code will show +something in the debug output only if the area is enabled. + +Note that kdWarning, kdError and kdFatal always appear, +they are NOT controlled by this setting. + + + +Area + +The areas which should only be output. Every message +that is not mentioned here will simply not be output (unless +this field remains empty, which is the default, and means that all +messages should be output). You can enter several areas +separated by commas here, and you can also use area ranges with +the syntax start-end. Thus a valid entry could be: +117,214-289,356-359,221. Do not use whitespaces. + + + + +If you start kdebugdialog +, then for every severity level you can +define separately what should be done with the diagnostic messages of +that level, and the same for each debug area. + +In full mode, first you should select the debug area you are +interested in from the drop down list at the top. + +You may independently set the output for various types of +messages: + + +Information +Warning +Error +Fatal Error + + +For each of these types, you can set the following: + + + +Output to: + +In this Combobox, you can choose where the messages +should be output. The choices are: File, Message +Box, Shell (meaning stderr) and +Syslog. Please do not direct fatal messages to syslog +unless you are the system administrator yourself. The default is +Message Box. + + + + +Filename: +This is only enabled when you have chosen +File as the output and provides the name of that file +(which is interpreted as relative to the current folder). The +default is kdebug.dbg. + + + + +Apart from this, you can also tick the checkbox Abort +on fatal errors. In this case, if a diagnostic message with +the severity level KDEBUG_FATAL is +output, the application aborts with a SIGABRT after outputting the +message. + +When you close the dialog by pressing OK, +your entries apply immediately and are saved in +kdebugrc. When you press +Cancel, your entries are discarded and the old +ones are restored. + +Credits to Kalle Dalheimer for the original version of +&kdebugdialog; + + + +&documentation.index; + + + + diff --git a/doc/kdeprint/Makefile.am b/doc/kdeprint/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/kdeprint/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/kdeprint/add-printer-wiz.docbook b/doc/kdeprint/add-printer-wiz.docbook new file mode 100644 index 000000000..6b6ada4ea --- /dev/null +++ b/doc/kdeprint/add-printer-wiz.docbook @@ -0,0 +1,290 @@ + +The <quote>Add Printer Wizard</quote> for &CUPS; + +Clicking on the leftmost icon on the toolbar + + in the upper part of the window starts the +Add Printer Wizard. + +This wizard steps you through various screens to install a new +printer. At present this Wizard works for &CUPS; and the +RLPR environment module. The number of steps depend +on the actual print-subsystem which is active and available to you on +your box. + + +Starting + +The welcome screen informs you that you can go back any time to +change a setting. + + +The &kdeprint; wizard introduction screen + + + + +The introduction screen of the printer wizard + + + + + +Backend Selection + +Choose the backend protocol that &CUPS; is supposed to +use with your new printer. There are: + + + +local printer (serial, parallel, USB) + + +remote LPD queue + + +SMB shared printer (&Windows;) + + +Network Printer (TCP, &HP; JetDirect, +AppSocket) + + +Network printer with &IPP; (&IPP;/HTTP) + + +File printer + + +serial fax /modem printer + + +Class of Printers + + + +If some choices are grayed out, they are not available. For +example, you may have no FAX backend software or no modem installed to +use it. + + +Choosing your Printer system + + + + +Choosing your Printer System + + + + + + +Direct Network Setting + +The contents of your next screen is dependent on your choice in +the previous screen. If you know the details, just type them in to +configure your network settings directly. + +In other cases the wizard can scan the network for you, to help you +decide which setting could be useful. + + +&kdeprint; wizard network scan + + + + +In the &kdeprint; wizard, you can enter network details +directly, or you can scan the network +automatically. + + + + + +Information Retrieval by Scanning the Network + +If you use one of the network connections (remote +LPD, SMB, remote &CUPS;, network +printer with &IPP;), you have an option for scanning the network. Be careful +when applying this; in some environments network scanning is considered +to be hostile and harmful! + +In the case of SMB, &kdeprint; will use the +Samba utilities nmblookup and +smbclient (which need to be installed for this to +work) to retrieve the information it presents in a tree +structure. + +In the case of &IPP; (Port 631) and TCP +Network/AppSocket (Port 9100) &kdeprint; will try to open the port and, +if successful, send an ipp-get-printer-attribute +request to the printer. For newer &HP; printers the latter usually +works, because they support both AppSocket and &IPP;. + +Some printers or manufacturers use other port numbers for direct +TCP/IP printing. You may need to look up which one to use. The +Settings button in the dialog lets you configure +your scan, including IP addresses, ports and +timeout to use. + +Once again: be careful not to be mistaken for an intruder on +your network, if you use the scanning technique. + + +&kdeprint; wizard network configuration dialog + + + + +In the &kdeprint; wizard, you can enter parameters to have the +wizard scan parts of your network. + + + + + +Printer Model Selection + +The hardest part is probably the Printer Model +Selection. In former years the situation was difficult, because +there were hardly any drivers to find. The difficulty now is there are too +many; though some of them are very good, many are quite broken. + +If you have a current database of available drivers +on your system, select the manufacturer in the left part of the window +first, then the device model in the right part. This split window shows +all &PPD;s found by &CUPS; in its standard repository of installable +&PPD;s. This repository normally is /usr/share/cups/model/. If you want your +driver to be found automatically by &CUPS; and &kdeprint;, place it in +there. + + + + + + +Driver Selection + +On the next screen you will see a description of the driver +selected previously. This description is extracted from the actual &PPD; +used. + + +For a real &PostScript; printer never try to +install a Foomatic or Gimp-Print &PPD;, +even if it is offered. You won't be happy with it. Instead find the +original &PPD; from the manufacturer, preferably the one written for +&Windows; NT and use it. + + +Some &Linux; distributions have supplied for &CUPS; every +possible combination of Ghostscript filters +and foomatic &PPD; files they could find on the net. +Many of these are quite useless; they were generated a year ago, when +the people at www.linuxprinting.org began +their first experiments with supplying third party &PPD;s for +&CUPS;. Although dubbed Alpha at the time, these +started to take on a life of their own and can now be found at various +places on the net, doing &CUPS; no favors. + +If you are not sure which ones to use go to: + + + +http://www.linuxprinting.org + + + + + +http://www.cups.org + + + + +And ask for help. At a later stage, a document detailing the +differences between the different driver and &PPD; models will appear at +http://kdeprint.sourceforge.net/ +Watch out for this! + +Via the Other... button you are able to +retrieve any &PPD; located somewhere on your available file +system. + + + + + +Printer Test and Finding the Right Settings + +Specify your first driver settings now. The most important one is the +default paper size. In many cases this is set to +Letter. If you live in an A4 +country and don't want your first test page to jam: now is the time to +prevent this. + +You are ready to start a test print. Hit the +Test button. + + + + + + + + +Finally: Baptizing Your New Printer + +The last screen lets you insert a name for your new +printer. + +The name must start with a letter and may contain numbers and +underscores with a maximum size of 128 characters. Conform to this if you +want to avoid erratic behavior of your &CUPS; daemon. The printer +names in &CUPS; are not case sensitive! This is a +requirement of &IPP;. So the names DANKA_infotec, Danka_Infotec and danka_infotec all represent the same +printer. + + + + + + +The Final Confirmation Screen + + + + + + + + diff --git a/doc/kdeprint/cr32-action-wizard.png b/doc/kdeprint/cr32-action-wizard.png new file mode 100644 index 000000000..b00db2499 Binary files /dev/null and b/doc/kdeprint/cr32-action-wizard.png differ diff --git a/doc/kdeprint/cups-config.docbook b/doc/kdeprint/cups-config.docbook new file mode 100644 index 000000000..ff286e632 --- /dev/null +++ b/doc/kdeprint/cups-config.docbook @@ -0,0 +1,2072 @@ + +Print Server Configuration: CUPS + +Start the print server configuration (now that you have chosen +&CUPS;, this is equivalent to the configuration of the &CUPS; daemon) by +clicking on the appropriate button. You can find it by moving the mouse +slowly over the buttons and reading the tooltips. It should be the 11th +from the left , or third from the right; its icon is a +wrench. + +The &CUPS; Server Configuration window pops up. It gives you a +structured view of all the settings that apply to the &CUPS; daemon. The +configuration file for that daemon is normally located in +/etc/cups/cupsd.conf. This is a plain +ASCII file with a syntax similar to the configuration +file of the Apache web server. It is a good +idea to create a backup copy, just in case something goes wrong with the +configuration through &kdeprint;/&CUPS; Server Configuration +dialogs: + +cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bak + +As this graphical user interface to edit the configuration file is +such a new feature, you should have the second chance of resorting to +the original file. So back it up, please. + + +Quick Help + +One very nice feature is the Quick Help +available. If you click on the little question mark (What's +this?) on your window title bar, you'll see the cursor +changing its form. Now click on a cupsd +configuration setting field to find out what it means and what your +options are. In most cases you should understand the meaning +immediately, otherwise turn to the excellent &CUPS; documentation. (If +your &CUPS; Daemon is running, you have it online on your own host at +http://localhost:631/documentation.html. +If &CUPS; is not running, but installed on your system you could +find it in your own host's file system. The exact location depends on +your &OS;, but on &Linux; the default is /usr/share/doc/cups/ or + +/usr/share/doc/cups/documentation.html. + + + +Longer Help + +For the best, most detailed and most recent information you should +always refer to the original &CUPS; documentation. &CUPS; is, much like +&kde; in a rapid development process. There are constantly new features +being added. New features might for times be only configurable by +directly editing the configuration files. The &kdeprint; &GUI; might not +have caught up with &CUPS; development. + +Just in case you want to look at the original configuration files +of your &CUPS; system -- they are here: + + +These paths are based on the default installation. Your &OS; +may have installed them to a different prefix, for example, /usr/local/, but the hierarchy should +still match that shown below. + + + + +/etc/cups/ + +The folder with the configuration files + + + + +/etc/cups/cupsd.conf + +The configuration file for the &CUPS; daemon + + + + +/etc/cups/printers.conf + +The configuration file that contains the information about your +locally installed printers. + + + + +/etc/cups/ppd/ + +The folder with &PPD; files of your installed +printers. + + + + +The following links only work if your &CUPS; daemon is up and +running. To access all the original &CUPS; documentation, go +to: + + + + +http://localhost:631/documentation.html + +A page with all the links to the other documents. + + + + + +http://localhost:631/sam.html + +Direct access to the &CUPS; Software Administrator Manual +in HTML format. + + + + + +http://localhost:631/sam.pdf + +Direct access to the &CUPS; Software Administrator Manual in +PDF format. + + + + + +http://www.cups.org/documentation.html + +The latest on line documentation from the &CUPS; web +site. + + + +The following links give you access to the same files (probably +icons and graphics will be missing) even if your CUPS daemon is not up +and running. You need, however, CUPS installed on your system. (Some +distributions might place the files somewhere else -- you're on your +own then to find out where...) To access all the original CUPS +documentation, go to: + +This documentation is available even when the &CUPS; daemon is +not installed, although you may find images and icons are missing when +you view the HTML files. + +As noted above, the hierarchy below should be intact, but your +&OS; may have installed &CUPS; to a different location. + + + +/usr/share/doc/cups/documentation.html + +A page with all the links to the other documents. + + + + +/usr/share/doc/cups/sam.html + +Direct access to the &CUPS; Software Administrator Manual in +HTML format. + + + + +/usr/share/doc/cups/sam.pdf + +Direct access to the &CUPS; Software Administrator Manual in +PDF format. + + + + +There are a few WebSites and Newsgroups discussing &CUPS; (and +&Linux; Printing in General) and giving help to newbies at: + + + + +http://www.cups.org/newsgroups.php + +The &CUPS; website. + + + + + +http://www.linuxprinting.org/newsportal/ + +LinuxPrinting.org, the home of the Linuxprinting HOWTO and the +&Linux; Printer Database + + + + +And finally, there will be a WebSite for &kdeprint; and related +documentation, at +http://kdeprint.sourceforge.net/ + +In the next section I will step you through most of the +configuration options of &kdeprint; with &CUPS;. + + + +Explaining different elements of the &GUI; + + +Upper Window: View on Printers, both Real and Virtual + +This section is not yet complete + + + +Tree view, icon view and list view + + +The icons of the task bar + + +Different fonts for different printers + + +Different printer icons mean different things + + + + + + +Lower Window: Tabbed View of Details + +This section is not yet complete. + + + +The icons of the task bar + + +The Tabs + + +Changing printer settings + + + + + + + + + +Welcome to the &CUPS; Server Configuration + +This is the Welcome Screen for your server configuration +dialogs. Clicking onto one of the items of the tree view on left +side of the screen opens the appropriate part of the configuration +settings. + +Every setting has a default value. The defaults let &CUPS; +normally work as a fully functional client. The clients listen on +TCP/IP Port 631 for infos broadcast by &CUPS; servers on the +LAN. This information let the clients print +immediately after receiving them, without installing any driver or +configuring any printer on the clients. + +To configure a &CUPS; server (which is broadcasting its service +to the LAN) you need to change settings from the +defaults. + +The dialog to configure the &CUPS; server: welcome screen. + +CUPS server configuration dialog: welcome screen + + + + +The dialog to configure the &CUPS; server: welcome +screen +The dialog to configure the &CUPS; server: welcome +screen + + + +To select the default setting of any item just enable the +checkbox on the right side of the screen. To set an item to a +different value, disable the checkbox and then go on to do the setting +you want on the left side of the screen. + +The complete server configuration includes: + + + +Server +General Configuration + + +Server +Logging Configuration + + +Server +Folders and Path Definitions + + +Server +HTTP Configuration + + +Server +Encryption and Certificate Support +Configuration + + +Server +Miscellaneous Configuration + + +Network General Configuration + + +Network +Clients Configuration + + +Browsing +General Configuration + + +Browsing +Connection Configuration + + +Browsing +Masks Configuration + + +Browsing +Timeouts Configuration + + +Browsing +Relay Configuration + + +Security +Configuration + + + +Each of these configuration items will be described in the +following sections of the manual. + + + + +Server General Configuration + +The server general configuration is done on this screen. It +includes: + + +Server name +Administrators email +Server user +Server group +Remote user name + + +The tab window to configure the &CUPS; server general settings +lets you the change the default values. Click on the little question +mark and then on one of the fields to get a Quick Help +about the meaning of the setting. + +If you are unsure, leave alone and turn to the original &CUPS; +documentation first. If your &CUPS; daemon is already running, it is +readable from the &konqueror; by pointing it to &URL; +http://localhost:631/documentation.html. + +There, first make friends with the Software +Administrator Manual. Otherwise, for example, if the &CUPS; daemon is +not running, try looking in your local file system, by default at +/usr/share/doc/cups/ or +/usr/share/doc/cups/documentation.html. + + +&CUPS; server general configuration dialog: ServerName, AdminMail, +ServerUser, ServerGroup, RemoteUserName + + + + +The dialog to configure the &CUPS; server general settings: +ServerName, AdminMail, ServerUser, ServerGroup, RemoteUserName + + + + + + +Server Name + +The hostname of your server, as advertised to the world. By +default, &CUPS; will use the hostname of the system. To set the +default server usd by clients, see the +client.conf file. + + +For example, enter myhost.domain.com + + +This is the hostname that is reported to clients. Should you +ever encounter strange problems in accessing the server, put here its +IP address for troubleshooting. This way you +eliminate any potential name resolution problems; and you can more +easily nail the real problem down. + + + + +Administrators email + +This is the email address to send all complaints or problems +to. By default &CUPS; will use root@hostname. + + +For example, enter +root@myhost.com. + + + +Contrary to what the quickhelp suggests, it is also legal to +send an email full of praise and enthusiasm about &CUPS; and +&kdeprint; to the server administrator. + + + + + +Server User + +The user the server runs under. Normally this must be +lp, however you can +configure things for another user if needed. + + +The server must be initially run as root to support the default +IPP port of 631. It changes users whenever an +external program is run. + + + +Enter for example lp. + + +This is the &UNIX; user account for filters and +CGI programs to run under. CGI +programs are responsible for showing you the nice web administration +interface accessible via http://localhost:631/). + + +There is no need to set the User directive +to root, so never do this, +as it only involves dangers. Should anyone discover security +vulnerabilities in one of the used file filters, printer drivers or +CGI programs, he could remotely execute arbitrary +commands on your system with root user privileges. Always use an +unprivileged account for the server directive +User. + + + + + +Server group + +The group the server runs under. Normally this must be +sys, however you can +configure things for another group as needed. + + +Enter for example sys. + + + + + +Remote user name + +The name of the user assigned to unauthenticated accesses from +remote systems. By default remroot. + +This name will appear in log files and in queries about the job +owner &etc;, for all resources and locations of the &CUPS; server that +are configured to allow access without +authentication. Authenticated entries will carry the authenticated +names. + + + + + + +Server Logging Configuration + +The server logging configuration is done on this screen. It +includes: + + +Access log file setting +Error log file setting +Page log file setting +Log level setting +Max log file size +setting + + +This is an important screen for you. Should you ever encounter +problems: here is the place to set the Log level to +debug, restart the &CUPS; daemon and then look at the +Error log file defined here for entries that might give you an insight +to the trouble. + + +&CUPS; server configuration dialog: Server +logging + + + + +The dialog to configure the &CUPS; server: Server +logging + + + + + +Access log file + +This is where accesses to the server are logged. If this does +not start with a leading /, then it is assumed to +be relative to the server root. + +You can also use the special name syslog +to send the output to the syslog file or daemon. + + +Enter a path, for example +/var/log/cups/acces_log. + + +The format of this file is stored in the so-called Common +Log Format. This way you can use programs such as +Webalyzer or any other Web access reporting +tool to generate reports on the &CUPS; server activities. + +To include the server name in the file name use a +%s in the name. Example: +/var/log/cups/access_log-%s. + +kurt@transmeta:~ >tail /var/log/cups/access_log + +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /printers/ HTTP/1.1" 200 109 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /admin/ HTTP/1.1" 401 0 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 210 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "GET /ppd/DANKA_P450.ppd HTTP/1.1" 200 51021 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /jobs/ HTTP/1.1" 200 246 +10.160.16.45 - - [04/Aug/2001:20:11:39 +0100] "GET /printers/DANKA_P450 HTTP/1.0" 200 0 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 80 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 139 +10.160.16.45 - - [04/Aug/2001:20:11:40 +0100] "GET /cups.css HTTP/1.0" 200 198 +127.0.0.1 - - [04/Aug/2001:20:11:40 +0100] "POST / HTTP/1.1" 200 139 +10.160.16.45 - - [04/Aug/2001:20:11:39 +0100] "GET /printers/DANKA_P450 HTTP/1.0" 200 7319 +10.160.16.45 - - [04/Aug/2001:20:11:40 +0100] "GET /images/title-logo.gif HTTP/1.0" 200 5729 + + +You see a separate line for each single access, showing the +IP address of the accessing client, date and time +of access, method of access (POST or +GET), the requested ressource, the &HTTP; version +used by the client, status code and the number of transferred +bytes. Status code 200 means +successful-OK the 401 in +the above example was an unauthorized access +which was denied. For a detailed explanation of the log format go to +the &CUPS; Software +Administrator Manual. + + + + +Error log file + +If this does not start with a leading /, then +it is assumed to be relative to the server root. The default setting +is /var/log/cups/error_log. + +You can also use the special name syslog +to send the output to the syslog file or daemon. + + +Enter the path, for example +/var/log/cups/error_log. + + +The error log excerpt below shows you the part logged for printing the test page +with the default setting of Log level to +info. For an explanation of the Log +Level setting see further below. + +kurt@transmeta:~ > tail /var/log/cups/error_log + +I [04/Aug/2001:23:15:10 +0100] Job 213 queued on 'DANKA_P450' by 'root' +I [04/Aug/2001:23:15:10 +0100] Started filter /usr/lib/cups/filter/pstops (PID 18891) for job 213. +I [04/Aug/2001:23:15:10 +0100] Started backend /usr/lib/cups/backend/lpd (PID 18892) for job 213. + + + + + +Page log file + +If this does not start with a leading / then +it is assumed to be relative to the server root. The default is +/var/log/cups/page_log + +You can also use the special name syslog +to send the output to the syslog file or daemon. + + +Enter the path, for example +/var/log/cups/page_log. + +The page log file has a line for every single page of every job +printed. + + Here is what some entries look like: + +kurt@transmeta:~ > tail /var/log/cups/page_log + +GIMP_print_stp_HP kdetest 201 [03/Aug/2001:03:18:03 +0100] 4 1 +GIMP_print_stp_HP kdetest 201 [03/Aug/2001:03:18:03 +0100] 5 1 +GIMP_print_stp_HP kdetest 202 [03/Aug/2001:11:46:49 +0100] 1 1 +GIMP_print_stp_HP kdetest 203 [03/Aug/2001:11:46:54 +0100] 1 1 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 1 33 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 2 33 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 3 33 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 4 33 +DANKA_infotec_P450 root 205 [04/Aug/2001:19:12:34 +0100] 1 14 +DANKA_infotec_P450 root 206 [04/Aug/2001:19:15:20 +0100] 1 1 + + +In this excerpt of the file you find information on the name of +the printers (GIMP_print_stp_HP and DANKA_infotec_P450) used through this +server, the user names (kdetest, kurt and root), the job-IDs (201 +to 205), time of printing, page number inside the job +and the number of copies for the pages. For example, job-ID 204 had 4 +pages and 33 copies printed, job-ID 205 had 14 copies of just 1 page) +. + + +&CUPS; is dependent (for its calculation of the number of pages +in a job) on passing the &PostScript; through the +pstops filter. See the &kivio; Flowchart on the &CUPS; +filter architecture for an idea about were this filter fits into the +whole printing process). More, pstops depends for +the counting on a DSC conforming +(DSC is Document Structuring Conventions, a +standard defined by Adobe) to be sent by the client. In most cases +this is working. + +However, this page accounting does not work for any +raw printer queues (as those, by definition, don't use +any filtering on the &CUPS; host and are by-passing +pstops.) Every job going through a +raw queue is counted as a 1-page-job (with possibly +multiple copies). This is especially true for all Jobs send from +&Microsoft; &Windows; clients via Samba to +the &CUPS; server, as those jobs are already arriving in the correct +format for the printer, because the clients use the original printer +driver. + + + +I am still looking for someone who will write a nice &CUPS; page +log analysing tool. It should generate a report with a graphical +output similar to the Webalizer's access +log reports. This way you could have nice statistics to be used for +accounting about usage of printers, load dependent on daytime or +weekday, users &etc; Anyone? + + + + + +Log level + +This setting controls the number of messages logged to the error +log file. It can be one of the following: + + + +debug2 + +Log everything. + + + + +debug + +Log almost everything. + + + + +info + +Log all requests and state changes. + + + + +warn + +Log errors and warnings. + + + + +error + +Log only errors. + + + + +none + +Log nothing. + + + + + +If you need to troubleshoot (or if you want to study the inner +workings of &CUPS;), set the log level to debug or debug2. Then the +error_log will have a lot more entries (not just errors, but also +informational entries). + +You can use this to watch live what &CUPS; is +doing when you send a print job. In a &konsole; type: + +kurt@transmeta:~ >tail 100 /var/log/cups/error_log + +This will give you the last 100 lines ( +100) of the file onto the screen and a +realtime update ()of what is +happening. The following listing shows the printing of a test page +(some pieces have been cut off for space reasons... Try it yourself if +you need more info): + + +I [04/Aug/2001:23:15:12 +0100] Job 214 queued on 'DANKA_P450' by 'root' +D [04/Aug/2001:23:15:12 +0100] StartJob(214, 08426fe0) +D [04/Aug/2001:23:15:12 +0100] StartJob() id = 214, file = 0/1 +D [04/Aug/2001:23:15:12 +0100] job-sheets=none,none +D [04/Aug/2001:23:15:12 +0100] banner_page = 0 +D [04/Aug/2001:23:15:12 +0100] StartJob: argv = "DANKA_P450","214","root","KDE Print Test", +[....] +D [04/Aug/2001:23:15:12 +0100] StartJob: envp = "PATH=/usr/lib/cups/filter:/bin:/usr/bin", [....] +D [04/Aug/2001:23:15:12 +0100] StartJob: statusfds = 5, 6 +D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[1] = 7, -1 +D [04/Aug/2001:23:15:12 +0100] StartJob: filter = "/usr/lib/cups/filter/pstops" +D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[0] = 8, 9 +D [04/Aug/2001:23:15:12 +0100] start_process("/usr/lib/cups/filter/pstops", [....] +I [04/Aug/2001:23:15:12 +0100] Started filter /usr/lib/cups/filter/pstops (PID 18991) for job 214. +D [04/Aug/2001:23:15:12 +0100] StartJob: backend = "/usr/lib/cups/backend/lpd" +D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[1] = -1, 7 +D [04/Aug/2001:23:15:12 +0100] start_process("/usr/lib/cups/backend/lpd", [....] +I [04/Aug/2001:23:15:12 +0100] Started backend /usr/lib/cups/backend/lpd (PID 18992) for job 214. +D [04/Aug/2001:23:15:12 +0100] Page = 595x842; 15,16 to 580,833 [....] + +The lines tagged D at the beginning are debug +level entries, the ones tagged I are there in +info level. + + + + +Max log file size + + +Controls the maximum size of each log file before they are +rotated. Defaults to 1048576 (1 Mb). Set this to 0 to disable log +rotation. + + +Enter an size in bytes, for example 1048576 + + + + + + + + +Server Folders Configuration + +The dialog to configure the &CUPS; server. Different +folders are to be set here. Normally you don't need to change +anything in this section. In case you play around with fancy +(TrueType, &PostScript; or other) fonts on your system, this qis the +place to do the settings for using those fonts when printing. Server +folder settings include: + + + +Executables: where to find the server +executables + + +Configuration: where to find the server +configuration files + + +Data: where to find the server data +files + + +Temporary files: where to put the server +temporary print files + + +Temporary Requests: where to find the +server + + +Font Path: where to find the +server fonts + + + +&CUPS; server configuration dialog: &HTTP; configuration + + + + +The dialog to configure the &CUPS; server: &HTTP; configuration + + + + + +Executables + +The root folder for the scheduler executables. By default +this is /usr/lib/cups (or +/usr/lib32/cups on IRIX +6.5) + + + + +Configuration + +The root folder for the scheduler. By default, /etc/cups. +On the authors SuSE system, this is /usr/share/doc/cups. It contains all the +HTML or PDF documentation for +&CUPS; which is available through the Web interface at +http://localhost:631/documentation.html + + + + +Data + +The root folder for the &CUPS; data files. By default this +is /usr/share/cups +It contains such things as banners, charsets, data, drivers, +fonts, and pstoraster templates. + + + + +Temporary files + +The folder to put temporary files in. This folder must be +writable by the user defined on the previous screen. This defaults to +either /var/spool/cups/tmp or +the value of the TMPDIR environment variable. + + + + +Temporary Requests + +The folder where request files are stored. By default this +is /var/spool/cups + + + + +Font path + +The place to configure the &CUPS; server for handling your fancy +fonts (TrueType or &PostScript;). &CUPS; will look here for fonts to +embed in printfiles. This currently only affects the +pstoraster filter, and the default is /usr/share/cups/fonts. + +To specify more than one folder, list them with double colons as +separator. Do it like this: + + +/path/to/first/fontdir/:/path/to/second/fontdir/:/path/to/last/fontdir/ + + +For the Font path directive to work as intended, the application +that wants to print needs to: + + + +Either correctly reference its desired fonts in the header of the +generated &PostScript; + + +Or embed the font into the &PostScript; file. + + + +Referencing the font by name leaves it up +to the RIP and print device to respect and actually +use it. RIP or printer can +only use the desired font, if it is available on the system. + + In the case of a &PostScript; printer, this needs to be a +printer-resident font. If the printers doesn't have this font, it will +try and replace it by an adequately similar font. + +In the case of a non &PostScript; printer, this is done by +&CUPS; and its RIP-ing filtering system. &CUPS; +will use the font path directive to grab the correct font when +RIP-ing the &PostScript; in the +pstoraster filter. + +In the case of a &PostScript; output device, &CUPS; is just +spooling the file (actually, it is passing it through the +pstops filter for accounting or n-up purposes), not +working on it. Therefore, if you print to a +&PostScript; printer it is solely the printer's responsibility to use +the font asked for. It can't, if the font is neither loaded into the +printer nor embedded in the &PostScript;. + + + + + + + +Server <acronym>HTTP</acronym> +Configuration + +The dialog to configure the &CUPS; server &HTTP; settings +is shown here. +&CUPS; server &HTTP; settings are the following ones: + +the Document folder +the Default Language +the Default Charset + + + +Dialog to configure the &CUPS; server &HTTP; settings + + + + + +Dialog to configure the &CUPS; server &HTTP; settings + + + + + + +Document folder + +The root folder for &HTTP; documents that are served. By +default the compiled in folder, /usr/share/cups/doc + + + + +Default Language + +The default language, if not specified by the browser. If not +specified, the current locale is used. + +Use the two letter locale codes, for example +en or de. + + + + + + +Default charset + +The default character set to use. If not specified, this +defaults to UTF-8. This can also be overridden directly in the +HTML documents. + + + + + + +<guilabel>Server encryption support configuration</guilabel> + +This is the dialog to configure the &CUPS; server security +settings. The server encryption support settings are these: + + +Server certificate: the file to +read containing the server's certificate +Server key: the file to read containing the server's +key + + +&CUPS; server configuration dialog: security overview + + + + +The dialog to configure the &CUPS; server: security settings + + + + + +Server certificate + +The file to read containing the server's certificate. Defaults +to /etc/cups/ssl/server.crt. + + + + +Server key + +The file to read containing the server's key. Defaults to +/etc/cups/ssl/server.key + + + + + + + +Server Miscellaneous Configuration + +The dialog to configure the &CUPS; server miscellaneous settings +is shown here. The following server settings are done through this +screen: + + +Preserve job history: whether to +preserve a job history for later re-view +Preserve job files: whether to +preserve fully RIP-ed job files for later +re-print +Printcap file: setting the name +of and the path to a printcap file +RIP Cache: setting the size of +the RIP cache in memory +Filter Limit: defining a filter +limit + + + +Dialog to configure the &CUPS; server miscellaneous settings + + + + +Dialog to configure the &CUPS; server miscellaneous +settings + + + + + +Preserve job history (after completion) + +Whether or not to preserve the job history after a job is +completed, canceled, or stopped. The default is yes + + + + +Preserve job file (after completion) + +Whether or not to preserve the job files after a job is +completed, canceled, or stopped. The default is no. + + + + +Printcap file + +The name of the printcap file. The default is no filename. +Leave this blank, to disable printcap file generation. +The printcap setting is only needed to satisfy older +applications in need of such a file. + + + + +RIP cache + +The amount of memory that each RIP should use +to cache bitmaps. The value can be any real number, followed by +k for kilobytes, m for megabytes, +gfor gigabytes, or t for tiles, where +one tile is 256 x 256 pixels. The default value is 8m. + + + + +Filter limit + +Sets the maximum cost of all job filters that can be run at the +same time. A limit of 0 means no limit. A typical job may need a +filter limit of at least 200. Limits less than the minimum required +by a job force a single job to be printed at any time. The default +limit is 0 (unlimited). + + + + + + +Network General Configuration + +The dialog to configure the &CUPS; server network settings is +shown here. It includes: + + +Look for hostname on IP +addresses +Port +Max request size +Timeout + + + +Dialog to configure the &CUPS; server network settings + + + + +Dialog to configure the &CUPS; server network +settings + + + + +Look for hostname on IP addresses + +Whether or not to do lookups on IP addresses +to get a fully-qualified hostname. This defaults to off, for +performance reasons. + + + + +Port + +Enter here Ports and addresses that the server will listen to. +The default port 631 is reserved for the Internet Printing Protocol, +and is what we use here. +You can have multiple entries, to listen to more than one port +or address, or to restrict access. + +Unfortunately, most web browsers don't support +TLS or &HTTP; upgrades for encryption. If you want +to support web-based encryption, you'll probably need to listen on +port 443, the HTTPS port. + +Use the Add and +Remove buttons to add and remove entries from +the list. + +You can enter ports on their own, ⪚ +631, or hostnames with ports, ⪚ +myhost:80 or 1.2.3.4:631. + + + + + +Max request size + +Controls the maximum size of &HTTP; requests and print files. +The default setting is 0, which disables this feature. + + + + +Timeout + +The timeout (in seconds) before requests time out. The default +is 300 seconds. + + + + + + + +Network Clients Configuration + +The dialog to configure the &CUPS; network client settings is +shown here. It includes: + + +Accept "Keep Alive" +requests +KeepAliveTimeout: +MaxClients: + + +dialog to configure the &CUPS; network client settings + + + + +Dialog to configure the &CUPS; network client settings + + + + + +Accept "Keep Alive" requests + +Whether or not to support the Keep-Alive connection option. The +default is on. + + + + +Keep alive timeout + +The timeout (in seconds) before Keep-Alive connections are +automatically closed. The default is 60 seconds. + + + + +Max number of clients + +Controls the maximum number of simultaneous clients that will be +handled. Defaults to 100. + + + + + + + +Browsing General Configuration + +The dialog to configure the &CUPS; browsing general settings +is shown here. It includes: + + +Enable browsing +Use short names when +possible +Use implicit +classes + + + + +Dialog to configure the &CUPS; browsing general +settings + + + + +Dialog to configure the &CUPS; browsing general +settings + + + + + +Enable browsing + +Whether or not to broadcast printer information to other &CUPS; +servers. Enabled by default. + + + + +Use short names when possible + +Whether or not to use short names for remote +printers when possible (⪚ printer instead of printer@host). Enabled by +default. + + + + +Use implicit classes + +Whether or not to use implicit classes. +Printer classes can be specified explicitly, in the +classes.conf file, implicitly based upon the +printers available on the LAN, or both. +When Implicit classes are enabled, printers on the +LAN with the same name (⪚ Acme-LaserPrint-1000) will be put into +a class with the same name. This allows you to setup multiple +redundant queues on a LAN without a lot of +administrative difficulties. If a user sends a job to Acme-LaserPrint-1000, the job will go to +the first available queue. +This option is enabled by default. + + + + + + +Browsing Connection Configuration + +The dialog to configure the &CUPS; server browsing connection is +shown here. Browsing connection settings include: + + +Broadcast addresses: The +(UDP) broadcast address to transmit printer +information to +Broadcast Port: The port number +to use for broadcasting +Poll addresses: The address(es) +to poll for information about printers on servers that might not +broadcast (or whose broadcasts might not reach your +LAN due to routers in between). + + + +Dialog to configure the &CUPS; server browsing +connection + + + + +Dialog to configure the &CUPS; server browsing +connection + + + + + +Broadcast addresses + +After pressing the Add button, you will +see the following dialog to enter a new value for outgoing +broadcasting browse packets. It is the same kind of dialog as for +adding other &CUPS; server addresses to be polled for printer +information. + + +Dialog to enter a new value for broadcasting browse +packets to + + + + +Dialog to enter a new value for broadcasting browse packets +to + + + +This option specifies a broadcast address to be used. By +default, browsing information is broadcast to all active +interfaces. + + +&HP-UX; 10.20 and earlier do not properly handle broadcast +unless you have a Class A, B, C or D netmask (&ie;, there is no +CIDR support). + + + + + +Broadcast port + +The port used for UDP broadcasts. By default +this is the IPP port; if you change this, you need +to do it on all servers. Only one BrowsePort is recognized. + + + + +Poll addresses + +Poll the named server(s) for printers. + + + + + + +Browsing Masks Configuration + +The dialog to configure the &CUPS; server allowed and/or denied browse +packets from other servers is shown here. + + +Browse allow: +Browse deny: +Browse order: + + + +Dialog to configure the &CUPS; server allowed and/or +denied browse packets from other servers + + + + +Dialog to configure the &CUPS; server allowed and/or denied +browse packets from other servers + + + + + +Add Browse Address dialog + +The dialog to enter a new value for the address of another +&CUPS; server to accept browse packets from is shown here. It is opened +by clicking on the Add... button beside the +field named Browse Allow:. It is the same dialog +as for adding denied broadcast sending +addresses. + +The dialog to enter a new value for the address of another +&CUPS; server to accept browse packets from is shown here. + + +Dialog to enter a new value for the address of another +&CUPS; server to accept browse packets from + + + + +Dialog to enter a new value for the address of another &CUPS; +server to accept browse packets from + + + + + + +Browse allow and Browse +deny + +Browse allow specifies an address mask to +allow for incoming browser packets. The default is to allow packets +from all addresses. +Browse deny specifies an address mask to +deny for incoming browser packets. The default is to deny packets +from no addresses. +Both Browse allow and Browse +deny accept the following notations for addresses: + + + + +All + + +None + + +*.domain.com + + +.domain.com + + +host.domain.com + + +nnn.* + + +nnn.nnn.* + + +nnn.nnn.nnn.* + + +nnn.nnn.nnn.nnn + + +nnn.nnn.nnn.nnn/mmm + + +nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm + + + + +The hostname/domain name restrictions will only work if you have +turned hostname lookups on! + + + + +Browse order + +Specifies the order of the allow/deny comparisons. + + + + + + + +Browsing Timeouts Configuration + +The dialog to configure the &CUPS; server browse timeout settings +is shown here. Browse timeout settings include: + +Browse Interval +Browse Timeout + + +Dialog to configure the &CUPS; server browse timeout +settings + + + + +dialog to configure the &CUPS; server browse timeout +settings + + + + + +Browse interval + +The time between browsing updates in seconds. The default is 30 +seconds. +Note that browsing information is sent whenever a printer's +state changes as well, so this represents the maximum time between +updates. +Set this to 0 to disable outgoing broadcasts so your local +printers are not advertised, but you can still see printers on other +hosts. + + + + +Browse timeouts + +The timeout (in seconds) for network printers - if we don't get +an update within this time, the printer will be removed from the +printer list. +This number definitely should not be less than the browse +interval period, for obvious reasons. Defaults to 300 seconds. + + + + + + +Browsing Relay Configuration + +The dialog to configure the &CUPS; server as a browsing relay is +shown here. Browsing relay settings include: + + +Browser packets relay + + + +Dialog to configure the &CUPS; server as a browsing +relay + + + + +Dialog to configure the &CUPS; server as a browsing +relay + + + + + +Add Browse Relay dialog + +The dialog to enter a new value for an address pair to define +browsing relaying between a &CUPS; server and a network is shown +here. + + +The dialog to enter a new value for an address pair to +define browsing relaying between a &CUPS; server and a +network + + + + +The dialog to enter a new value for an address pair to define +browsing relaying between a &CUPS; server and a +network + + + + + + +Browser packets relay + +Relay browser packets from one address or network to +another. + + + + + + + +Security Configuration + +The dialog to configure the &CUPS; server security settings for +any of the defined server locations is shown here. It contains the +following settings, which may be defined separately for any valid +resource (or location) of the &CUPS; server: + + +System Group: +Access Permissions: +Auth Type: +Auth Class: +Auth Group Name: +Encryption: +Allow: +Deny: +Order: + + +Valid resources (or locations) of the &CUPS; server are: + + +Server Root Location: / +Server Administration Location: /admin +All printers on the server: /printers +Any individual printer on the server: +⪚ /printers/infotec_P320 +All printer classes on the server: /classes: +Any individual printer class on the server: +⪚ /classes/all_infotecs_P320_or_P450 + + + +Dialog to configure the &CUPS; server security settings +for any of the defined server locations + + + + +dialog to configure the &CUPS; server security settings for +any of the defined server locations + + + + + +For all locations that are not defined separately the setting of +the location above it is valid. + +For example, you have a printer named infotec_P450 with no set security +options. Then the security of the location /printers will take the responsibility +for this printer as it is a sub-location of/printers. If, in turn there is no +security set for /printers, +then the security for / (the +general security) of the server takes responsibility. Either you have +set this for your purpose or the compiled-in default value takes +over. + + + + +SystemGroup + +The group name for System or printer administration +access. The default varies depending on the operating system, but +will be sys, system or root (checked for in that order). + + + + +Access Permissions + +Access permissions for each folder served by the scheduler. +Locations are relative to the document root. + + + + +Authorization Type + +The authorization to use: + + + +None + +Perform no authentication. + + + +Basic + +Perform authentication using the &HTTP; Basic method. + + + +Digest + +Perform authentication using the &HTTP; Digest method. + + + + + +Local certificate authentication can be substituted by the +client for Basic or Digest, when connecting to the localhost +interface. + + + + + +Authorization Class + +The authorization class. Currently only +Anonymous, User, System +(valid user belonging to the group set as system group), and +group (valid user belonging to the specified group) are +supported. + + + + +Authorization Group Name + +The group name for Group authorization + + + + +Encryption + +Whether or not to use encryption. This depends on having the +OpenSSL linked into the &CUPS; library and +scheduler. +Possible values are: + + +Always + +Always use encryption (SSL) + + + +Never + +Never use encryption. + + + +Required + +Use TLS encryption upgrade. + + + +IfRequested + +Use encryption if the server requests it. + + + + + + + +Allow + +Allows access from the specified hostname, domain, +IP address or network. Possible values are: + + + + +All + + +None + + +*.domain.com + + +.domain.com + + +host.domain.com + + +nnn.* + + +nnn.nnn.* + + +nnn.nnn.nnn.* + + +nnn.nnn.nnn.nnn + + +nnn.nnn.nnn.nnn/mmm + + +nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm + + + + +The host and domain address require that you enable hostname +lookups, as described earlier. + + + + +Deny + +Denies access from the specified hostname, domain, +IP address or network. Possible values are: + + + +All + + +None + + +*.domain.com + + +.domain.com + + +host.domain.com + + +nnn.* + + +nnn.nnn.* + + +nnn.nnn.nnn.* + + +nnn.nnn.nnn.nnn + + +nnn.nnn.nnn.nnn/mmm + + +nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm + + + +The host and domain address require that you enable hostname +lookups, as described earlier. + + + + +Order + +The order of the allow and deny processing. + + + + + + +Example: How To Define The Security For All Printers + +The dialog to configure the &CUPS; server security settings is +discussed here. We use the example to add security definitions other +than the default ones for the resource named all printers. For the &CUPS; web server, +this is the location you access through +http://localhost:631/printers/ or (remotely) through +http://cups.server.name:631/printers/ + +The first screenshot shows the general location for this +setting. Select Add or +Modify a resource for which you want to decide +about its security settings. + + +Dialog to configure the &CUPS; server security +settings + + + +Dialog to configure the &CUPS; server security +settings + + + +This dialog is to add a new resource. It looks similar if you +want to modify an already existing resource. Here are the general +options: + + +Dialog to add a new resource. + + + + +Dialog to add a new resource. + + + +.This is the second part or the dialog is to add a new +ressource. It looks similar if you want to modify an already existing +resource. Here you define the actual access masks for the resource in +question. + + +Dialog to add a new resource. + + + + +Dialog to add a new resource. + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + + + diff --git a/doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png b/doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png new file mode 100644 index 000000000..9f5a73d39 Binary files /dev/null and b/doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png differ diff --git a/doc/kdeprint/cupsaddprinterwizard1.png b/doc/kdeprint/cupsaddprinterwizard1.png new file mode 100644 index 000000000..cf20e087c Binary files /dev/null and b/doc/kdeprint/cupsaddprinterwizard1.png differ diff --git a/doc/kdeprint/cupsaddprinterwizard2_backendselection.png b/doc/kdeprint/cupsaddprinterwizard2_backendselection.png new file mode 100644 index 000000000..3e4b2f126 Binary files /dev/null and b/doc/kdeprint/cupsaddprinterwizard2_backendselection.png differ diff --git a/doc/kdeprint/cupsaddprinterwizard3_networkscan.png b/doc/kdeprint/cupsaddprinterwizard3_networkscan.png new file mode 100644 index 000000000..160834ee9 Binary files /dev/null and b/doc/kdeprint/cupsaddprinterwizard3_networkscan.png differ diff --git a/doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png b/doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png new file mode 100644 index 000000000..aa6cd87f1 Binary files /dev/null and b/doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png differ diff --git a/doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png b/doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png new file mode 100644 index 000000000..7fff7de52 Binary files /dev/null and b/doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png differ diff --git a/doc/kdeprint/cupsoptions.docbook b/doc/kdeprint/cupsoptions.docbook new file mode 100644 index 000000000..dc886d21c --- /dev/null +++ b/doc/kdeprint/cupsoptions.docbook @@ -0,0 +1,602 @@ + +&CUPS; options presently not available through &kcontrol; + +This chapter gives you some hints about further configuration +possibilities which may not be available through the &kdeprint; &GUI; +interface to &CUPS;. + + +Overview of provided features + +All of the most often used features and functions &CUPS; provides +are supported in &kdeprint;. + + + +Printer management is supported: add, remove, modify, configure, +test, disable, enable ... + + +Job management is supported: cancel, hold, release, move to +different printer + + +Print options: for full control as provided by &CUPS;. + + + + + + +Where to find help when using &CUPS; + +A lot of information about the inner workings of &CUPS; is +available through the web interface, which &CUPS; will always +support. It works with any browser (yes, even text-based ones). Just go +to http://localhost:631/ for +a start. There you find a link to locally available &CUPS; documentation +in HTML and PDF if you are new to +&CUPS;. + +&CUPS; is accessible through other means than &kdeprint;: +commandline and browser are two native &CUPS; interfaces. The many +commandline utilities add up to the most complete control you have on +&CUPS;. The web interface is only a subset of all available +configuration or control options. + +This is also true for &kdeprint;. Generally, as &CUPS; develops, +most new features will first be implemented through the commandline. Be +sure to check the latest versions of the man pages for &CUPS; to stay +up-to-date with new features after you install a new version. + + +Depending on your update method for &CUPS;, your active +configuration file might not have been re-placed by a new one; thus your +new, more capable &CUPS;-daemon might not have been told by the old +configuration file about the new features to use. + + +A complete list of available files and man pages should always be +in the &CUPS; Software Administrator Manual (http://localhost:631/sam.html#FILES. +In the &konqueror; &URL;/location field, type +man:/lpadmin and +man:/cupsd.conf to find out about the most +important command and configuration file. You knew already about +&konqueror;'s nice abilities to show you the traditional &UNIX; man +pages, didn't you? Read this. From there you find more interesting +hints and links to other man pages and documentation. + + +How to find &CUPS; related man pages + +Here is a way to find out which &CUPS; related man pages there +are on your system: + +kurt@transmeta:~ > apropos cups + +cups-calibrate (8)- ESP Printer Calibration Tool +lpstat (1) - print cups status information +cups-lpd (8) - receive print jobs + report printer status to lpd clients +classes.conf (5) - class configuration file for cups +backend (1) - cups backend transmission interfaces +filter (1) - cups file conversion filter interfaces +cups-polld (8) - cups printer polling daemon +mime.types (5) - mime type description file for cups +cupsd (8) - common unix printing system daemon +lpadmin (8) - configure cups printers and classes +cupsd.conf (5) - server configuration file for cups +mime.convs (5) - mime type conversion file for cups +printers.conf (5) - printer configuration file for cups +mime.convs (5) - mime type conversion file for cups +cups-polld (8) - cups printer polling daemon +lpstat (1) - print cups status information +backend (1) - cups backend transmission interfaces +mime.types (5) - mime type description file for cups +cupsd (8) - common unix printing system daemon +lpadmin (8) - configure cups printers and classes +printers.conf (5) - printer configuration file for cups +cupsd.conf (5) - server configuration file for cups +filter (1) - cups file conversion filter interfaces + + + + + +Outside &kdeprint;: Hints & Tips Tricks with &CUPS; on the +Commandline + +Here are a few examples of options that are presently only +available if you use the commandline. + + +Allowing or denying printer access for certain users + +When installing (or modifying) a printer through the command line, +you can either deny or allow the usage of that printer to certain +users: + +lpadmin HeidelbergDigimaster9110 lpd:/10.160.16.99/mqueue allow:kurt,sylvi,hansjoerg /home/kurt/PPDs/DVHV.ppd + +will allow the usage of this (believe me: very nice and also very +professional) printer to only the three mentioned users and at the same +time deny it to all others. If another user wants to print on the +DigiMaster via this &CUPS; server, he will receive an error message +along the lines client-error-not-possible. + +lpadmin HeidelbergDigimaster9110 lpd:/10.160.16.99/mqueue deny:tackat,boss,waba /home/kurt/PPDs/DVHV.ppd + +will deny the usage of this same printer to the three mentioned +users and at the same time allow it to all others. If +denied user wants to print on the DigiMaster via this +&CUPS; server, he will receive an error message along the lines +client-error-not-possible. + + +Only one of the two options may be used at one time; at present +there is no support to have a similar option in a per-group based +way. This will be implemented in the future. + + + + +Imposing Quotas for certain printers + +Sometimes you want to impose quotas for certain printers. With +quotas you can set upper limits for the number of pages or the amount of +data to be printed over a certain period to a certain printer. + +Quotas can be set with the option when +installing a printer with the lpadmin command, or +afterwards for an already existing printer. Following are some +guidelines (which are missing at the time of writing in the, official +&CUPS; documentation): + + + +With &CUPS; you may have pagecount- and filesize-based quotas for +individual printers. + + + +Quotas are calculated for each user individually (so a single set +of limits applies to all users for the printer concerned). + + + +Quotas include banner pages (if those are used). + + + +This means: you can limit every user to 20 pages per day on an +expensive printer, but you cannot limit every user except Kurt or root. + + + +There are , +, and +options to give when setting up a printer. + + + + sets a time interval for quota +computing (intervals are determined in seconds; so a day is +60x60x24=86.400, a week is 60x60x24x7=604,800, and a month is +60x60x24x30=2.592.000 seconds.) + + + +For quotas to be enforced, the time-period +plus at least one job-limit must be set to +non-zero. + + + +The default value of 0 for specifies +that there is no limit. + + + +The default value of 0 for +specifies that there is no limit. + + + +The default value of 0 for +specifies that the limits apply to all jobs that have been printed by a +user that are still known to the system. + + + + +Working Examples: + +Working, as both, time-period plus one or +both job-limits are defined + +lpadmin danka_infotec_4850 job-quota-period=604800 job-k-limit=1024 + +This sets a limit of a file size of 1 MB (in total) for each user +of existing printer danka_infotec_4850 during one week. + +lpadmin danka_infotec_4105 job-quota-period=604800 job-page-limit=100 + +This sets a limit of 100 pages (in total) for each user of +existing printer danka_infotec_4105 during one week. + +lpadmin danka_infotec_P450 job-quota-period=604800 job-k-limit=1024 job-page-limit=100 + +This sets a combined limit of 1 MB (in total) and 100 pages (in +total) for each user of existing printer danka_infotec_P450 during one +week. Whichever limit is reached first will take effect. + + + + +Not working examples + +NOT working, as only +one, time-period or job-limit +is defined) + +lpadmin danka_infotec_P320 job-quota-period=604800 + +lpadmin danka_infotec_FullColor job-page-limit=100 + +lpadmin danka_infotec_HiSpeed job-k-limit=1024 + + + + +Related Error Messages + +Once a user reaches his quota limit, he'll get a +client-error-not-possible message, if he wants to +print. + + + + + + +Installing a <quote>raw</quote> printer + +There are different ways to define a raw +printer. One comfortable one is to use the lpadmin +command. Just don't define a &PPD; file to be used for that printer and +it will be a raw one: + +lpadmin Raw_Danka_infotec lpd://10.160.16.137/PORT1 + +Raw printer queues are those which don't touch the print file to +transform it to a different file format. You need this for example when +printing from &Windows; clients via Samba through a &CUPS; server to a +PCL printer: in this case the &Windows; side printer +driver would generate the finished print file format for the target +printer and filtering it through &CUPS; filters would only harm the +purpose. Under certain circumstances (if you want to make sure that the +file goes to the printer unfiltered by &CUPS;) the +lpadmin without a &PPD; comes in +handy. + + + + + +Troubleshooting &CUPS; in &kdeprint; + +This section of the &kdeprint; Handbook will live from the +readers' feedback. Here is just a small beginning. + + +Error Messages + + + + +What does the error +client-error-bad-request mean? + + +The user sent a file to the &CUPS; which the server could not +process. You get this also upon sending an empty +file. + + + + + +And client-error-not-possible? + + +User is either not allowed to print to a certain printer or has +achieved his quota (based on file size and/or page number) + + + + + +How about client-error-not-found? + + +The user tried to access a nonexistent resource on the &CUPS; +server, such as trying to print a nonexistent file, or one that you are +denied permission to read. + + + + + + + + +Questions and Answers + + + + +Why can't I re-start my jobs? + + +To be able to re-start your completed jobs from the +web interface, you need a setting in the +/etc/cups/cupsd.conf file: set +PreserveJobFiles True. + + + + + +How do I get rid of the long list of completed jobs in the web +interface? + + +TODO + + + + + +How does page accounting work? + + +&CUPS; does the print accounting by passing nearly +every job through the pstops filter. This one does, +amongst other things, the page counting. Output of this filter there may +be piped into other filters (like pstoraster --> rastertopcl) or sent to +the printer directly (if it is a &PostScript; printer). + +In any case, this works for network, parallel, serial or +USB printers the same. For pstops to work, it needs +DSC, Document Structuring Convention compliant +&PostScript; (or near-equivalent) as input. So it calculates the pages +during filtering on the print server and writes info about every single +page (what time, which user, which job-ID and -name, which printer, how +many copies of which pages of the document, how many kilo-bytes?) into +/var/log/cups/page_log. + +By the way: on my personal wishlist is a hack of +webalizer to read and analyze the page_log and give a +similar output. Anyone? + +However, it is not giving correct results in +the following cases: + + + +The printer jams and maybe therefor throw away the job (real live +experience; or maybe throwing away the job because of problems with the +data format) + + +Jobs printed as raw are always counted as size of 1 +page (and maybe multiple copies). + + + +Therefore the page accounting of &CUPS; is only +an approximation (in many cases an excellent or at least good one, in +others a quite poor one). The only reliable print count is the one +done by the internal printer counter. (Because this is the one you pay +for, if you are on a click price or similar.) Some, by +far not most, printers can be queried remotely for that information +via SNMP (Simple Network Management Protocol). That +means, in a bigger network with many different printers there +is just no completely reliable and accurate page +accounting tool! + + + + + +Why doesn't page-accounting work with &Windows; clients? + + +From &Windows; clients jobs nearly always need to be sent as +raw. Why? If &CUPS; works as a print server for &Windows; +clients using the original native &Windows; driver for the target print +device, this guarantees the correct formatting of the job on the clients +already; therefor the server should not touch it and print +raw; therefor no filtering is started (and this is not +even possible as the input from the clients is not &PostScript; as +pstops expects; hence no page-count other than the default +1. + + + + + +How do I get a list of available options for a given printer or a +&PPD; file? + + +See the man page for the lpoptions command. You +may investigate a &CUPS;-enabled box about any option of its available +printers. There is no need to have the printer installed locally. As +long as the printer is available locally (through the &CUPS; +printer browsing feature), it will also work +remote. + +To query for a printers' option typing +lpoptions +HitachiDDP70MicroPress + will give a long listing of all +available options as read from the &PPD; file for the given +Hitachi-Printer (in my case installed on remote server +transmeta). Remote server Transmeta and its &CUPS; daemon as well +as the localhost's &CUPS; daemon need to be up and running for this to +succeed. + + + + + +How do I read the listing retrieved by the +lpoptions command? + + + +You know that for &PostScript; printer manufacturers it is +legal to define their own internal names and procedures +even for standard &PostScript; options. As long as the driver is able to +retrieve the option from the &PPD; and show it to the user in a way that +he understands it everything is OK. But what do you +do, if you want to use some obscure printer options on the command line? +How do you find out its exact syntax? + +Let's take an example. Looking at Hitachi's DDP70 printer and how +it implements duplex printing is revealing somehow. How do you tell how +to print double sided? duplex or Duplex? Or another name altogether?. + +lpoptions transmeta Hitachi_DDP70_ClusterPrintingSystem | grep uplex + +This leads to the output + +TR-Duplex/Duplex: False *True + +This is to be interpreted like follows: + + + +The name of the investigated option is +; + + +Behind the slash you see the translation of the option, as it +should be shown in a &GUI; or Web interface +(Duplex); + + +The option may take one of the two values +False or True; + + +The present setting is True to be +recognized by the marking with a star *. + + + +To override the present default setting (duplex) and print a job +in simplex, you need to use the following command: + +lpr Hitachi_DDP70_ClusterPrintingSystem TR-Duplex=False /path/to/your/printjob + + + + + +How do I get a nicely formatted listing of available options for a +given printer or &PPD;? + + +Use the lphelp command which may be installed +on your system locally. There is not yet a man page for +lphelp. + +lphelp infotecP450 + +This lists the available options for the named printer. It is +nicely formatted and does explain every available option and how to use +it. You can query different printers' options at once: + +lphelp infotec7410color DANKA_fullcolor_D2000 HP_ColorLaserJet8550 + +It also works for &PPD; files. Just specify the path to the +&PPD;: + +lphelp /home/kurt/PPDs/HP-ColorLaserJet8550.ppd + + + + + + +Solving Problems + +No system is perfect. Here are some commonly seen traps people +have fallen into. + + + + +My printer named 3-lp-duplex shows erratic +behavior. What's wrong? + + +The printer names used in &CUPS; shall start with a letter and may +contain up to 128 letters, numbers or underscores. Using dashes may lead +to problems. Speaking about naming: printer names in &CUPS; are not case +sensitive. So a printer named Best_of_Danka will be the same as +best_of_danka or BEST_OF_DANKA. (This is a requirement of +&IPP;, which &CUPS; is fully compliant with). + + + + + +Why do I get Unable to connect to SAMBA host: +Success with my printer shares from &Windows; accessed via +Samba? + + +Are the rights on the remote &Windows; box set correctly for you? +Are you actually allowed to print on the &Windows; shared +printer? + + + + + +My files for printer lp +sometimes mysteriously disappear and two days later I am told they got +printed on a printer three floors below my office. What is going on? + + +Believe me, it is very unlikely that your printer is the only one +with the name lp. Maybe +&CUPS; is playing a trick on you. As you might have the setting +ImplicitClasses On activated, &CUPS; tries to stuff all +printers it sees on the network into a Class name lp. All +jobs destined to lp are sent to this class and the first available +member prints it. So if you had this nice fellow (who listened closely +when you raved about &CUPS; and &kdeprint;) install &CUPS; and poke +around the system...get the idea? + +Take my advice: choose a unique name for any network printer! +(Mind you, the one on your parallel port also turns out to be a network +printer for the rest of the world if you don't take care of your +settings). + + + + + + diff --git a/doc/kdeprint/cupsserverconfig_browse_relay_add_button.png b/doc/kdeprint/cupsserverconfig_browse_relay_add_button.png new file mode 100644 index 000000000..391cf06ee Binary files /dev/null and b/doc/kdeprint/cupsserverconfig_browse_relay_add_button.png differ diff --git a/doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png b/doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png new file mode 100644 index 000000000..f5767faad Binary files /dev/null and b/doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png differ diff --git a/doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png b/doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png new file mode 100644 index 000000000..3775f4d2a Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png differ diff --git a/doc/kdeprint/cupsserverconfiguration11_browsingconnections.png b/doc/kdeprint/cupsserverconfiguration11_browsingconnections.png new file mode 100644 index 000000000..d3ca6971f Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration11_browsingconnections.png differ diff --git a/doc/kdeprint/cupsserverconfiguration11_browsingmasks.png b/doc/kdeprint/cupsserverconfiguration11_browsingmasks.png new file mode 100644 index 000000000..a662dd117 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration11_browsingmasks.png differ diff --git a/doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png b/doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png new file mode 100644 index 000000000..d9e9528d6 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png differ diff --git a/doc/kdeprint/cupsserverconfiguration14_browsingrelay.png b/doc/kdeprint/cupsserverconfiguration14_browsingrelay.png new file mode 100644 index 000000000..0030b4d7c Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration14_browsingrelay.png differ diff --git a/doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png new file mode 100644 index 000000000..fab7bc65b Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png differ diff --git a/doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png new file mode 100644 index 000000000..2cc4bf8ae Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png differ diff --git a/doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png new file mode 100644 index 000000000..cfd09e543 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png differ diff --git a/doc/kdeprint/cupsserverconfiguration1_welcome.png b/doc/kdeprint/cupsserverconfiguration1_welcome.png new file mode 100644 index 000000000..50bd9ba3a Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration1_welcome.png differ diff --git a/doc/kdeprint/cupsserverconfiguration2_general.png b/doc/kdeprint/cupsserverconfiguration2_general.png new file mode 100644 index 000000000..c8e8b01c0 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration2_general.png differ diff --git a/doc/kdeprint/cupsserverconfiguration3_logging.png b/doc/kdeprint/cupsserverconfiguration3_logging.png new file mode 100644 index 000000000..300c31943 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration3_logging.png differ diff --git a/doc/kdeprint/cupsserverconfiguration4_directories.png b/doc/kdeprint/cupsserverconfiguration4_directories.png new file mode 100644 index 000000000..e55ab35fc Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration4_directories.png differ diff --git a/doc/kdeprint/cupsserverconfiguration5_HTTP.png b/doc/kdeprint/cupsserverconfiguration5_HTTP.png new file mode 100644 index 000000000..3e46eb17b Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration5_HTTP.png differ diff --git a/doc/kdeprint/cupsserverconfiguration6_encryption.png b/doc/kdeprint/cupsserverconfiguration6_encryption.png new file mode 100644 index 000000000..aca75adf0 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration6_encryption.png differ diff --git a/doc/kdeprint/cupsserverconfiguration7_miscellanious.png b/doc/kdeprint/cupsserverconfiguration7_miscellanious.png new file mode 100644 index 000000000..6a30d103e Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration7_miscellanious.png differ diff --git a/doc/kdeprint/cupsserverconfiguration8_networkgeneral.png b/doc/kdeprint/cupsserverconfiguration8_networkgeneral.png new file mode 100644 index 000000000..a0a40da20 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration8_networkgeneral.png differ diff --git a/doc/kdeprint/cupsserverconfiguration9_networkclients.png b/doc/kdeprint/cupsserverconfiguration9_networkclients.png new file mode 100644 index 000000000..89b30dfe9 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration9_networkclients.png differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png b/doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png new file mode 100644 index 000000000..147830184 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png b/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png new file mode 100644 index 000000000..295a0970a Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png new file mode 100644 index 000000000..3b3b4eb04 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png b/doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png new file mode 100644 index 000000000..1b388a6cb Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png differ diff --git a/doc/kdeprint/cupsserverconfiguration_securityoverview.png b/doc/kdeprint/cupsserverconfiguration_securityoverview.png new file mode 100644 index 000000000..bed1d3df6 Binary files /dev/null and b/doc/kdeprint/cupsserverconfiguration_securityoverview.png differ diff --git a/doc/kdeprint/extensions.docbook b/doc/kdeprint/extensions.docbook new file mode 100644 index 000000000..3995272c2 --- /dev/null +++ b/doc/kdeprint/extensions.docbook @@ -0,0 +1,57 @@ + +&kdeprint; Extensions To All Print Subsystems + + +<quote>Virtual</quote> Printers + + +The <quote>Fax</quote> Printer + +To be written + + + + +The <quote>File</quote> Printer + +To be written + + + + +The <quote><acronym>PDF</acronym></quote> Printer + +To be written + + + + + + +<quote>External</quote> Filters + + +The <command>enscript</command> Filter for Text Files + +To be written + + + + +The <quote>n-up</quote> Filter for Any File + +To be written + + + + +Three different <quote>Make Pamphlet</quote> Filters for +&PostScript; Files + +To be written + + + + + + diff --git a/doc/kdeprint/external-command.docbook b/doc/kdeprint/external-command.docbook new file mode 100644 index 000000000..1a1135d7c --- /dev/null +++ b/doc/kdeprint/external-command.docbook @@ -0,0 +1,25 @@ + +Module For External Print Command (&Netscape;-like) + +This module allows the print command to be specified completely +(&Netscape;-like). An edit line is added in the print dialog for that +purpose. Can be used in many cases, for example with a self-made print +program. + + +Overview of provided features + + + +Printer management: not supported + + +Job management: not supported. + + +Print options: basic control, depending on your knowledge of the +print command + + + + diff --git a/doc/kdeprint/final-word.docbook b/doc/kdeprint/final-word.docbook new file mode 100644 index 000000000..ed2ae029a --- /dev/null +++ b/doc/kdeprint/final-word.docbook @@ -0,0 +1,117 @@ + +Final word from the Author + + +Who am I, what is my business? + + +My employer is Danka Deutschland GmbH, a leading and +manufacturer-independent provider of professional and hi-speed digital +printing systems, black-and-white as well as color. Danka provides +hardware, software, service, maintenance, consumables and customized +solutions for the products in its portfolio. I work there as a +System Engineer. Amongst the brands Danka offers are Heidelberg +(formerly Kodak), Canon, &Hewlett-Packard;, Hitachi, Infotec and +EfI. + + +My acquaintance with &Linux; and the Free Software community is not +too old. When I started to play around with &Linux; at the beginning +of 1999, my deepest disappointment was the poor support for +printing. True, I made all our machines spit out simplex prints -- but +what about duplex? What about punching the output? How to make sorting +work? Or stapling, cover sheets and all the other beautiful finishing +options our engines offer to customers? No way -- at least for me as a +non-geek! + + +I began a search on the Internet for a solution. Fortunately not +much later, in May 1999, Mike Sweet, principal developer of &CUPS;, +announced the first Beta release of this superb piece of printing +software. After trying it briefly, I knew this was it! + + +Next thing I attempted: to make &Linux; distributions interested in +this new stuff. Believe me -- it was more than tenacious! They seemed +to think they already had the best thing they could get in +printing. One reason probably was that they (and many &Linux; +developers) never had to think about how to best support a printer +duplexer -- because one had never come near their own +desks... + + +Finally, my attempts to make some &Linux; print publications +interested in &CUPS; backfired on me - one editor +squeezed me into writing a series on the subject myself. And this is +how some people started to give me the nickname CUPS +Evangelist. I will not get rid of this nick anytime soon, now +that even the &kde; people wedged me into their timeframe of +releases. Oh, boy... + +Anyway, &CUPS; is now making its way around the world and it +might well become a triumphal one: I am a little bit proud to have +supported and contributed to this from near the beginning. + +It should encourage you: even if some more experienced &Linux; +users than you are skeptical about it, and even if your programming +skills are next to zero (like mine) - there are a lot of tasks and +jobs and ideas, and talent that you can contribute to the Free Software +community. Not least within the &kde; project... ;-) + + + + + +Credits + +I'd like to thank... + + +Mike Sweet for developing &CUPS; in the first place + + +Jean-Eric Cuendet for starting kups +and qtcups, the predecessors of +&kdeprint; + + +Michael Goffioul for doing all the hard work recently + + +Martin Konold for thinking twice + + +Sven Guckes for teaching me a few things about the art of survival +on the terminal (just in case &kde; is not there ;-) ) + + +...too numerous others to mention who also let me snatch bits +and bytes of knowledge +off them + + + and last, but not least: Tom Schwaller for encouraging me +to get into documentation +writing + + + + + + +Caveats + +&kdeprint; has been developed on a system using &CUPS; 1.1.6. +&kdeprint; has been tested on other versions of &CUPS; and so +far no incompatibilities are known. By the time of writing +this Handbook, &CUPS; 1.1.9 is out with a few new features +not yet supported by &kdeprint;. Of course you are able to +access these features, but you will need to bypass &kdeprint; +and use the &CUPS; command-line tools or edit configuration +files manually. &kdeprint;'s development will go on and this +Handbook strives to always be the best available user documentation +resource for it. + + + + diff --git a/doc/kdeprint/getting-started.docbook b/doc/kdeprint/getting-started.docbook new file mode 100644 index 000000000..cb360379f --- /dev/null +++ b/doc/kdeprint/getting-started.docbook @@ -0,0 +1,143 @@ + +Getting Started + +This chapter of the &kdeprint; Handbook will walk you through most +of the configuration or selection options of &kdeprint;. It will mainly +deal with &CUPS; in this version, as the author is most familiar with +it, and also because &kdeprint; started off with supporting &CUPS; +best. Later versions of the &kdeprint; software and editions of this +handbook will support and explore other printing +systems more closely. + + +Selecting Your Print Subsystem + +You need to define your print subsystem, before you are able to +install any printer with the &kdeprint; framework. There are two areas +where you can define this: either in &kcontrol; (The Printing +Manager section), or directly and on the fly +from the print dialog. + +Navigate to K Menu +Preferences System +Printing Manager. At the bottom +you can see a button that lets you select which printing subsystem you +want to use. In &kde; 2.2 you can choose from the following +alternatives: + + + +&CUPS; (Common &UNIX; Printing System) + + +Print through an external program (generic) + + +LPR (Standard BSD Print +System) + + +Generic &UNIX; LPD print system (the +default) + + +RLPR environment (print to remote +LPD servers from the command line) + + + +Of course, the chosen system must be installed, and up and running on +your box prior to your selection, or before it takes effect. + + + +On it's first startup, &kdeprint; will try an autodetection. This +only works for: + + + +&CUPS;, as it is checking first for a running &CUPS; daemon + + +LPD, as it is checking for a running +LPD daemon, plus a printcap +file. + + + + + +The system you choose must be installed on your system prior to +your selection. The author's personal recommendation is +&CUPS;. + +Once autodetected, chosen, or changed, the active print +subsystem will take effect for all &kde; applications. Different +users may have different print subsystems in use, if those do exist on +the computer and are compliant with each other. Their settings are +stored in the kdeprintrc. This file is unique to +every user, and is normally installed in +$HOME/.kde/share/config/kdeprintrc. + + +This file is not intended to be directly editable, and all +available options can be set from the &kdeprint; &GUI;. + + +You may even select a different printer subsystem, on the fly, from +the &kprinter; dialog box. + + + + +Working with the Printing Manager + +Once you have chosen your preferred and installed print subsystem, +you are ready to investigate, configure administer and work with this +system through the &kdeprint; framework. + +Navigate to K Menu +Preferences System +Printing Manager. In the right +part of the window you will see at least 4 printers predefined. These +are the virtual or special purpose printers, explained in section . You will probably see a toolbar with 13 icons at the +top of the window, and at least 4 tabs in the lower half of the window, +labeled Information, Jobs, +Properties and +Instances. + + + + + + + + + + + + + + + + + + diff --git a/doc/kdeprint/highlights.docbook b/doc/kdeprint/highlights.docbook new file mode 100644 index 000000000..85e0e348f --- /dev/null +++ b/doc/kdeprint/highlights.docbook @@ -0,0 +1,518 @@ + +&kdeprint;'s Highlights + +The new &kdeprint; system includes more than one highlight. +Having worked in an environment in the past that is not exactly +sophisticated, as far as printing is concerned, take a look at some of +the benefits that come with &kdeprint; + + +The <quote>Add Printer</quote> Wizard + +&kdeprint; has an Add Printer Wizard. The Add +Printer Wizard helps you with adding and configuring a new printer. Of +course, you may do this manually as well. + +&kdeprint; helps you discover printers. It is able +to scan the environment for available devices and queues. This works for +network connections using TCP (AppSocket, +aka &HP; JetDirect, or IPP) or +SMB/Samba (shared &Windows;) printers +and partially for directly attached printers over parallel, serial, or +USB connections. + + +A screenshot of the new Add Printer +Wizard + + + + + +Here's a screenshot of the Add Printer Wizard +(this one is not very exciting yet; but...) + + + + +The wizard makes the installation and handling of the drivers +a snap. Selecting, configuring and testing should be easy +as never before on any &Linux;-like system. + + + + + + + +Full Print Job Control + +The Print Job Viewer is automatically started by &kprinter;. It +may be docked into the &kde; panel (in the system tray). The Print Job +Viewer allows full job management, if supported by the print +subsystem. + +You can: + + + +Hold and release jobs, + + +Move pending jobs to another printer, + + +Cancel pending or processing jobs. + + + +A screenshot of the &kdeprint; PrintJob Viewer shows the information +you get: Job-ID, target printer, job name, job owner, job status and job +size. In the next &kdeprint; release you will also see information about the +number of pages (as &CUPS; calculates it; see chapter on page accounting +for more information about its merits and limitations). + + +A screenshot of the &kdeprint; PrintJob Viewer + + + + + +Here's a screenshot of the &kdeprint; PrintJob Viewer. + +A screenshot of the &kdeprint; PrintJob +Viewer. + + + +An alternative way to looking at the same information (and having the +same amount of control is through the + + &kcontrolcenter; selecting +SystemPrinting +Manager. If you don't see the +Printer Information, +right click on the window +background and select View Printer +Information. Then go to the Jobs tab +to see this: + + + + + + + + +Here's a screenshot of the &kdeprint; PrintJob Viewer. + + + + + + + +Modules for different print subsystems + +&kdeprint; uses different modules to realize the interface to the +possible print subsystems. Not all the modules are yet developed fully, +but you will have basic printing functionality with: + + + +LPD (BSD style) + + +LPRng (&RedHat;, if you just use it's +BSD style subset), + + +RLPR (a command-line LPR +utility, which doesn't need a printcap file. + + +external print commands (&Netscape; like). + + + +Most importantly, full support for &CUPS; is already there. +Modules for other print subsystems, such as PLP, +PPR and PDQ may be available +later. + +&kdeprint; makes &kde; much more flexible. It gives freedom of +choice to &kde; 2.2 users. To use different available print subsystems, +these must, of course, be installed independently from &kde;. In +former versions, users were stuck with the old LPD +style print subsystems. Now they can even use &CUPS;. In the future, +there will be easy integration of new subsystems, as they +appear on the scene. + + + + +More &kdeprint; <quote>Goodies</quote> +Benefitting all Print SubSystems. + +Some specific features of &kdeprint; depend on the chosen print +subsystem. This dependency might exist because those features are only +implemented there; remember, &kdeprint; is an intermediate layer between +&kde; applications, and the print subsystem, but it's no replacement for +any print subsystem by itself. Such dependency may exist for another +reason: that &kdeprint; has not yet implemented an interface to all the +features of all the subsystems. + +Other features include benefits from &kdeprint; that are +independent of the chosen print subsystem, and are available with all of +them. At present there are special or +virtual printers, and some generic +pre-filters. + + + +Print Preview + +From the Print Dialog, you can select to look at a preview. For +this, the print file is passed through filters which make it suitable for +displaying on screen using &kghostview;. + + + + +Special Printers + +Amongst these additional &kdeprint; features are a few +special or virtual printers: + +These special printers may: + + + +Print to PDF + +Convert your document into a PDF file with the +help of an external program. + + + + +Print to email + +Send your document as an email attached PDF +file. + + + + +Print to PS file + +Save your document as a &PostScript; file. + + + + +Print to Fax + +Send it through an available backend, such as +Hylafax as a fax. + + + + + +These special printers appear in the user print +dialog just like normal printers. They are entirely +configurable on a per-user basis. + + + + + +Generic Pre-Filtering + +&kdeprint; provides you with a framework to define and configure +your own pre-filters. These pre-filters may take effect +before they are passed to your print subsystem for +further processing, but after the (&PostScript;, +plain text or other) print files have been generated by your +application. + +There are a few useful filters already predefined. These +are: + + + +The multiple pages per sheet filter, + + + +the enscript text filter, + + + +and three filters to help print pamphlets. + + + +You may create your own filters based on any third party program +that is able to process &PostScript;, plain text or image files, and output +any one of those formats. + +These filters are configured through XML files. +This makes an extension of the concept very easy for experienced developers, +but end-user configuration is also done through an intuitive graphical +user interface. So, fear not, you don't need to learn +XML because of &kdeprint;! + + + +Multiple Pages Per Sheet Filter + +This is a predefined filter that installs with &kdeprint;. It +allows you to create a modified &PostScript; output, from &PostScript; +input, that prints 1, 2, or 4 logical pages on a single sheet of +paper. + + + + +Enscript Text Filter + +This is a predefined filter that installs with &kdeprint;. It +allows you to create &PostScript; output from any text file input, that +includes syntax highlighting for program listings, pretty-printing, and +nice configurable page frames and headers. + + + + +Pamphlet Printing Filters + +If your printer is able to produce duplex output, using either +one-pass or two-pass technology, you may be able to use one, or a +combination, of the pamphlet filters. + +For duplexing printers, make sure you use the duplex option that +turns the output along the short paper edge. Folding the +printed paper along the middle turns your document into a nice pamphlet. + +If you are stuck with using a simplex-only device, you can do the +same, using two different filters and a few additional steps. + +Depending on your model, first use the filter for printing the +odd pages, then insert the paper in the correct order +back into the paper tray to get the even pages printed on the reverse +side. These can then be folded to make a pamphlet. + + + + + + + + + + +&CUPS; Support: the Most Important Module in &kdeprint; + +&kdeprint; contains a module for &CUPS;. &CUPS;, the +Common &UNIX; Printing System (http://www.cups.org/), is the most +advanced, powerful and flexible of all print subsystems on &UNIX; and +other &UNIX;-like operating systems. It is still quite new on the +horizon, but is based on IPP, the Internet Printing +Protocol, the newly emerging standard for the future of network +printing. &CUPS; is clearly the print system of choice for Michael +Goffioul, the principal &kdeprint; developer. + +Experienced &kde; users may already be familiar with Michael's +utilities qtcups and +kups (co-developed with Jean-Eric Cuendet). +These were, up until now, the graphical +&GUI; front ends for &CUPS; with a strong relation to &kde;. + + +<application>qtcups</application> and +<application>kups</application> — The Predecessors + +Both utilities are probably still widely used. For those +not familiar with them, +here are brief explanations. + +qtcups was a graphical front end for +the lp or lpr print commands as +installed by &CUPS;. Using qtcups opened a +dialog. This dialog let you comfortably select your printer and the +print job options. qtcups +worked from the command line, or from +within applications, when the application in question had a configurable +print command. + +kups was a graphical wrapper to do the +administration tasks for your &CUPS; server, and the &CUPS; daemon at +the heart of it. You could add, delete, modify, configure, start, and +stop printers. You could cancel, delete, move, stop and restart print +jobs, and you could change the settings of the daemon, start, stop, and +restart it. + + + + +&kdeprint; — The Heir + +The &CUPS; Module in &kdeprint; now contains all (and more) +functions that were provided by qtcups and +kups in former &kde; versions. + +Instead of qtcups you can now use the +kprinter command. And in place of +kups you will probably use +kcmshell printers from now on. + + +The &kdeprint; module for &CUPS; also lets you fully administer +the print subsystem, just like kups did +before. It can start, stop and configure your &CUPS; daemon. It can also +start, stop, add and delete printers (&ie; printer +queues) and printer instances. Printer instances are +printer queues that point to the same physical output device but with a +different default setting of print options. + + + + +&kprinter; — Graphical Print Command + +&kdeprint;'s &CUPS; module gives you access to a graphical +print command, like qtcups did +before. + +Use &kprinter; in any application, even a non-&kde; +application, that lets you configure your print command. Examples of +these are &Netscape; and StarOffice, but +not most pre-&kde; 2.2 programs. + +A screenshot how to use the new kprinter +print command instead of the old-fashioned lpr... +Of course you need to have kprinter in your +$PATH, or give the full path in the dialog; ⪚ +/opt/kde/bin/kprinter. +&Netscape; will remember this and with further print jobs you will get +the kprinter dialog to configure your printouts. + + +A screenshot of the kprinter print +command in action. + + + + + +Here's a screenshot showing how to use the new +kprinter print command +instead of the old-fashioned lp or +lpr in &Netscape;. + + + + +You can also use &kprinter; from the +command line and see the resulting dialog box pop up: + + +Screenshot of the kprinter command + + + + +Screenshot showing use of the kprinter command +from the command line. + + + +Just make sure you give at least the file to be printed +from the command line as well: kprinter +. +This will hand over the &CUPS; Software Administrator Manual to the +kprinter dialog, which will then pop up with the +default printer pre-selected. + +To pre-select a specific printer from the command line, use the + option, ⪚: +kprinter +. You +can still de-select the printer and +choose a different one. + + You cannot however call +kprinter +without a print file and hope to open a file selection +dialog box from the &kprinter; window. This is a feature that will be +implemented only in the next version. + + +Using kprinter you are able to ring +all the bells and blow all the whistles of your printer. You +will need a device-specific so-called &PPD; (&PostScript; Printer +Description) to enable &CUPS; to make this nice tandem team do this +for you. Read more about this in . + + + + + + +Plans for Future Development + +What you have now is the first, already very feature-rich +version of &kdeprint;. This version is, of course, fully usable for +printing. You might even think that it was never so +easy (not even back in the days when you had to use +&Microsoft; &Windows;). + + In the future, &kdeprint; will become even better. It will do a +better job of detecting your installed print subsystem +itself. Already &kdeprint; is doing quite well in automatically +sensing if you have &CUPS; on your system. But in many cases you will +have to tell &kdeprint; what you are using, if you want to keep a +legacy print system. + +The most important improvement in the near future will be a +completion of the LPRng plugin. This at +present is still very basic. It is restricted to the pure classical +LPD part of +LPRng. + +Also, you may be able to add printers directly from the print +dialog to your system just in time, without going to +&kcontrol; first. + +Some smaller improvements already planned are: + + +add a file selection dialog from the &kprinter; window +to allow combining of additional files to the present +printjob add a +history button to the +KJobViewer window and also a column to show +the number of pages &CUPS; calculates for the job. + + +Finally, there will be an IO slave that will give +you access to your print subsystem, via &konqueror; for example. With +this you will soon be able to browse your print subsystem from +&konqueror; through a &URL; like shortcut such as +print://printers/printername. A KPart will add +a virtual folder to the services section of the &konqueror; navigation +panel, giving a nice integrated way to browse and manage your print +system via the &URL; print:/manager. + +Please contact Michael Goffioul at kdeprint@swing.be +with any further user or developer suggestions. + + + diff --git a/doc/kdeprint/index.docbook b/doc/kdeprint/index.docbook new file mode 100644 index 000000000..79ef27770 --- /dev/null +++ b/doc/kdeprint/index.docbook @@ -0,0 +1,200 @@ + +CUPS"> + PPD"> + IPP"> + ghostscript"> + + + + + + + + + + + + + + + + + +]> + + + + +The &kdeprint; Handbook + + + +Kurt +Pfeifle + +
kpfeifle@danka.de
+
+
+ + +Michael +Goffioul + +
kdeprint@swing.be
+
+Developer +
+ + +Lauri +Watts + +
lauri@kde.org
+
+Reviewer +
+ + + +
+ + +2001 +Kurt Pfeifle + + +&FDLNotice; + +2001-08-09 +1.00.04 + + +This handbook describes &kdeprint;. &kdeprint; is not a standalone +program. It is the new printing framework for &kde; 2.2. &kdeprint; +is an intermediate layer between &kde; (or other) applications and the selected +(and installed) print subsystem of your OS (&OS;). + + + +KDE +kdebase +kdeprint +print +printing +CUPS +LPR + + +
+ + +Introduction + +This handbook describes &kdeprint;. &kdeprint; is not a standalone +program. It is the new printing framework for &kde; 2.2. &kdeprint; +is an intermediate layer between &kde; (or other) applications and the selected +(and installed) print subsystem of your OS (&OS;). + +It should be noted that both the developer of this application, +and the author of this document are most familiar with &CUPS; as a +printing system. At the time of writing, &CUPS; is the best supported +printing subsystem, and it is the best documented. + +This handbook is a work in progress, and later versions of the +&kdeprint; software and editions of this handbook will support and +explore more closely other printing systems. + +In the meantime, even if your printing subsystem is not yet well +covered, you are encouraged to explore the Printing +Manager module in &kcontrol;, and you will find its +operation to hopefully be fairly self evident, no matter what printing +subsystem you use. + +Lauri Watts, &kde; documentation team + + + + +To configure your printing subsystem from &kcontrol; + +To configure your printing subsystem from &kcontrol;, go to +SystemPrinting +Manager and select your subsystem. Or you can +let &kdeprint; try to determine it... + + +&CUPS; Printing Manager dialog: overview via &kcontrol; + + + + +The dialog to configure the &CUPS; server: security +settings +Configuration of printing subsystem from +&kcontrol; + + + + + + +&tech-overview-doc; + +&highlights-doc; + +&theory-doc; + +&getting-started-doc; + +&cups-configuration-doc; + +&add-printer-wizard-2-doc; + +&cupsoptions-presently-outside-kcontrol-doc; + +&rlpr-doc; + +&lpd-doc; + +&lpr-bsd-doc; + +&lprng-doc; + +&external-command-doc; + +&extensions-doc; + +&final-word-doc; + + +Credits And Licenses + +&kdeprint; copyright 2001, Michael Goffioul +kdeprint@swing.be +&underGPL; + +Documentation copyright 2001, Kurt Pfeifle, +kpfeifle@danka.de +&underFDL; + + + + + +
+ + diff --git a/doc/kdeprint/kcontrol-icon.png b/doc/kdeprint/kcontrol-icon.png new file mode 100644 index 000000000..8fbaacd79 Binary files /dev/null and b/doc/kdeprint/kcontrol-icon.png differ diff --git a/doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png b/doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png new file mode 100644 index 000000000..d7132b1cd Binary files /dev/null and b/doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png differ diff --git a/doc/kdeprint/kcron_to_be_printed.png b/doc/kdeprint/kcron_to_be_printed.png new file mode 100644 index 000000000..114b26b3c Binary files /dev/null and b/doc/kdeprint/kcron_to_be_printed.png differ diff --git a/doc/kdeprint/kdeprint-jobviewer.png b/doc/kdeprint/kdeprint-jobviewer.png new file mode 100644 index 000000000..8182e4317 Binary files /dev/null and b/doc/kdeprint/kdeprint-jobviewer.png differ diff --git a/doc/kdeprint/kprinter-as-netscape-printcommand.png b/doc/kdeprint/kprinter-as-netscape-printcommand.png new file mode 100644 index 000000000..0780e2a80 Binary files /dev/null and b/doc/kdeprint/kprinter-as-netscape-printcommand.png differ diff --git a/doc/kdeprint/kprinter-kivio.png b/doc/kdeprint/kprinter-kivio.png new file mode 100644 index 000000000..b36b49b89 Binary files /dev/null and b/doc/kdeprint/kprinter-kivio.png differ diff --git a/doc/kdeprint/kprinter.png b/doc/kdeprint/kprinter.png new file mode 100644 index 000000000..f83cfcd4b Binary files /dev/null and b/doc/kdeprint/kprinter.png differ diff --git a/doc/kdeprint/kprinter_called_from_run_command.png b/doc/kdeprint/kprinter_called_from_run_command.png new file mode 100644 index 000000000..b02070c1d Binary files /dev/null and b/doc/kdeprint/kprinter_called_from_run_command.png differ diff --git a/doc/kdeprint/kprinter_with_kcron_developer_special.png b/doc/kdeprint/kprinter_with_kcron_developer_special.png new file mode 100644 index 000000000..dc9b785cf Binary files /dev/null and b/doc/kdeprint/kprinter_with_kcron_developer_special.png differ diff --git a/doc/kdeprint/lpd.docbook b/doc/kdeprint/lpd.docbook new file mode 100644 index 000000000..cc555e399 --- /dev/null +++ b/doc/kdeprint/lpd.docbook @@ -0,0 +1,18 @@ + +Generic <acronym>LPD</acronym> Module (&UNIX;) + + + +Overview of Provided Features + +Module used by default (on first start for example). + +Generic module that only allows sending of print jobs. No printer or +job management supported. It is made to work on a wide variety of &UNIX; +flavors: &Linux;/LPR, &HP-UX;, Solaris, &IRIX;. +It also supports some LPRng extensions (like +the absence of continuation character \ in +printcap files). + + + diff --git a/doc/kdeprint/lpr-bsd.docbook b/doc/kdeprint/lpr-bsd.docbook new file mode 100644 index 000000000..007fbc6e5 --- /dev/null +++ b/doc/kdeprint/lpr-bsd.docbook @@ -0,0 +1,25 @@ + +<acronym>LPR</acronym> (<acronym>BSD</acronym>) + +Plain (old?) LPR support. An +LPRng module is in development, and hopefully +available for 2.3 release. + + +Overview of Provided Features + + + +Printer management: basic support to add/remove/configure a +printer, compatible with &RedHat;-6.x systems +(printtool + rhs-printfilers packages). + + +Job management: not supported + + +Print options: basic control + + + + diff --git a/doc/kdeprint/lprng.docbook b/doc/kdeprint/lprng.docbook new file mode 100644 index 000000000..5117664e0 --- /dev/null +++ b/doc/kdeprint/lprng.docbook @@ -0,0 +1,7 @@ + +<application>LPRng</application> + +An LPRng module for &kdeprint; is in +development, and hopefully available for the &kde; 2.3 release. + + diff --git a/doc/kdeprint/ps-boxes.png b/doc/kdeprint/ps-boxes.png new file mode 100644 index 000000000..a24f845a7 Binary files /dev/null and b/doc/kdeprint/ps-boxes.png differ diff --git a/doc/kdeprint/rlpr.docbook b/doc/kdeprint/rlpr.docbook new file mode 100644 index 000000000..fab48d7bb --- /dev/null +++ b/doc/kdeprint/rlpr.docbook @@ -0,0 +1,18 @@ + +Module Built Around <application>rlpr</application> +Utility + + +Overview of provided features + +Printer management: basic operations are supported +(add/remove/modify). + +Each user can predefine the printers he wants to use by specifying +the host and related printer queues. Printers are stored on a per +user basis. This module is built around the +rlpr utility rlpr + + + diff --git a/doc/kdeprint/steinbruch_scaled.png b/doc/kdeprint/steinbruch_scaled.png new file mode 100644 index 000000000..57e6fde76 Binary files /dev/null and b/doc/kdeprint/steinbruch_scaled.png differ diff --git a/doc/kdeprint/tech-overview.docbook b/doc/kdeprint/tech-overview.docbook new file mode 100644 index 000000000..96b3888e9 --- /dev/null +++ b/doc/kdeprint/tech-overview.docbook @@ -0,0 +1,280 @@ + +Technical Overview + +This chapter aims to give a technical overview of &kdeprint; which +non-programmers can comprehend. + +&kdeprint; is a new and revolutionary tool to give easy access to +printing services for both &kde; users and &kde; developers. + + +A Brief Description of &kdeprint; + +You can access the functions of &kdeprint; in different ways: +through the Printing Manger in the &kcontrol;, through the +kprinter command or through the dialog that pops up +if you want to print. + + +What it is <emphasis>not</emphasis> + +&kdeprint; is not a replacement for the +printing subsystem itself. &kdeprint; does not +therefore give provision for spooling, and it does +not do the basic processing of &PostScript; or +other print data. + + + + +What it <emphasis>is</emphasis> +&kdeprint; is an intermediate layer between the spooling and the +data processing print subsystem (as installed), and the application that +seeks to print. &kdeprint; provides a common interface for &kde; +developers and &kde; users, to various supported print subsystems. At +the same time, it is customizable, and highly configurable. + +&kdeprint; is easy to use for both &kde; developers and end-users. +Developers can port their applications, with minimal changes, to use +&kdeprint; instead of the old &Qt; print system. Users +can easily choose and configure their print subsystem. + +For a reference to new &kde; users: &Qt; is the basic library and +graphical toolkit, which is used by all &kde; applications; &Qt; is +developed by TrollTech, a Norwegian software company. + + + + + + +&kdeprint; -- Different Usage for Different People + +&kdeprint; has different faces for different people. + + +What users and administrators can do with &kdeprint; + +&kdeprint; allows users and/or administrators, depending on their +rights, access to printing subsystems (&CUPS;, LPD, +RLPR, LPRng, +PDQ &etc;) through a &kde; graphical user +interface (&GUI;). Using &kdeprint;, they can print, administer jobs, +printers and the printing daemon, all in a comfortable manner. + +Experienced users will like the capability to plug any working +filter for the print data between the output of their application and +the input, into the chosen print subsystem. Some examples for this +already ship with plain vanilla &kdeprint;. Read +on. + + + + + +What &kde; developers can do with it... + +If a &kde; developer needs printing access for his application, he +does not code the printing functions from scratch. Before &kde; 2.2 this +service was provided by the QPrinter class, a +library function of the &Qt; Toolkit. The +QPrinter class relied on the out-moded +Line Printer Daemon (LPD). The +&kdeprint; library bases itself firmly on the more modern Common &UNIX; +Printing System (&CUPS;), while at the same time keeping backward +compatibility with LPD and other legacy, or less +elaborate, print systems. It also leaves the door open +for any new development that might occur. + +For &kde; developers to use the new &kdeprint; class in their +applications, they require only minimal changes to their code: for every +call of QPrinter, they just need to change this to +KPrinter. Replacing one (!) letter in a few +spots, and automatically they are done; their application can then use +all of the features of the new &kdeprint; library. + +More ambitious developers, or ones with special requirements, can +do more: despite &kdeprint;'s feature-rich framework, they are still able +to customize the print dialog of their application +by creating an additional Tab, where their +extensions to the standard &kdeprint; will feel right at home. + + +This last mentioned feature has not been used widely inside +&kde; so far, as developers are not yet fully aware of &kdeprint;'s +power. Expect more of this in the near future. One example I +discovered is the &kcron; application. It lets you edit the crontab +through a &GUI;. The developers have implemented a printing feature +that lets you (or root) +choose if you want to print the whole of crontab (for all users) or +just the part that is marked. You can see the effects on &kdeprint; +in the following screenshots. + +This shot shows a sample from the &kcron; utility. + +&kcron; utility: a small sample of a system's cronjobs as +shown through the &kde; GUI&GUI;. + + + + +The &kcron; developers let you choose to print the whole of the +cron table or just the marked part of it. + + + + +The dialog to configure &kcron;'s printing options: the +additional tab titled Cron Options is from inside +&kcron;, not &kdeprint;; it is a special extension added by the +&kcron; developers for printing purposes, not originating from, but +executed by &kdeprint;. Developers of other applications are free +to implement their own goodies, if they feel need for it. + + + +&kcron;'s addition to the &kdeprint; dialog. + + + + +&kcron;'s addition to the &kdeprint; dialog. + +&kcron;'s addition to the &kdeprint; dialog. + + + + + + + +What &kdeprint; offers to everybody... + +&kdeprint;'s easy-to-use interface for all supported print subsystems +of course does not eliminate basic traditional weaknesses of some of +those systems. But it smooths some rough edges. Different users may use +different printing systems on the same box. A user is free to even +switch on the fly, from the print dialog, the print +subsystem to be used for the next job. (This is possible if different +systems are installed in a way that they don't get in each +other's way.) + +Most &UNIX; users are used to +LPD printing. LPD provides only +basic printing functions, is very inflexible and does not utilize the +many options of more modern print systems like &CUPS;. While also +working remotely over any distance (like every TCP/IP based protocol), +LPD lacks bi-directional communication, +authentication, access control and encryption support. + +&kdeprint; can use &CUPS; to support: + + + +Querying the LAN for available printers, + + +Basic, Digest, and Certificate Authentication, + + +Access Control based on IP addresses, net +addresses, netmasks, host- and domain names, + + +and 128-Bit TLS or SSL3 encryption of print data, to prevent +eavesdropping, or at least make it much more difficult. + + + +This makes &kdeprint; a much more robust and reliable solution +than using the venerable LPD. + + + +How to access &kdeprint; + +You get access to &kdeprint;, or parts of it, in four different +ways: + + +through your applications: if you call the printing +dialog (either File +Print...) or the button with the +little printer icon on it; this opens the printing +dialog. + +through the typed command kprinter +in a terminal or a &konsole; window or from +the Run Command... mini-CLI +window: this also opens the printing dialog. + +from the + button, starting &kcontrol;, and then go to +SystemPrinting +Manager. This opens the &kdeprint; +administration which is part of the &kcontrolcenter; and also lets +you switch to other parts of the &kcontrol; + +from a command line (&konsole; or +mini-CLI) type +kcmshell . +This opens just the &kdeprint; part of &kcontrol; to change your settings + + + +&kprinter; dialog to be started from Run Command... window + + + + +Starting the &kprinter; dialog from +a Run Command... window. +Starting the &kprinter; dialog from a Run +Command... window. + + + + Here is a +&kivio; drawing of the &kprinter; dialog as it pops up after being +started... You can always add a new printer by clicking on the small +Wizard button (marked red/yellow in this +drawing). + + +&kprinter; dialog started (&kivio; draft drawing) + + + + + +&kprinter; dialog started (&kivio; draft drawing) +&kprinter; dialog started (&kivio; draft +drawing) + + + + + + + + + + diff --git a/doc/kdeprint/theory.docbook b/doc/kdeprint/theory.docbook new file mode 100644 index 000000000..a90aa2755 --- /dev/null +++ b/doc/kdeprint/theory.docbook @@ -0,0 +1,690 @@ + +Some Theoretical Background: &CUPS;, <acronym>IPP</acronym>, +&PostScript; and <application>Ghostscript</application> + +This chapter aims to give a bit of theoretical background to +printing in general, and to &CUPS; especially. If you are not in need +of this, you might like to skip ahead to the next chapter. Chances are you will +come back to this chapter at some point anyway, because sometimes one +needs extra theory to solve a practical problem. + + +Basics About Printing + +Printing is one of the more complicated chapters in +IT technology. + + +Earlier on in history, every developer of a program that was +capable of producing printable output had to write his own printer +drivers too. That was quite complicated, because different programs +have different file formats. Even programs with the same purpose, for +example: word processors, often do not understand each other's formats. +There was therefore no common interface to all printers, hence the +programmers often supported only a few selected models. + +A new device appearing on the market required the program authors +to write a new driver if they wanted their program to support it. Also +for manufacturers, it was impossible to make sure their device was +supported by any program known to the world (although there were far +fewer than today). + +Having to support ten application programs and a dozen printers, +meant a system administrator had to deal with 120 drivers. So the +development of unified interfaces between programs and printers became +an urgent need. + +The appearance of Page Description Languages, +describing the graphical representation of ink and toner on sheets of +paper (or other output devices, like monitors, photo typesetters, &etc;) +in a common way, was a move that filled a big gap. + +One such development was &PostScript; by Adobe. It meant that an +application programmer could concentrate on making his program generate +a &PostScript; language description of his printable page, while +printing device developers could focus on making their devices +&PostScript; literate. + +Of course, over time, there came the development of other description +methods. The most important competitors to &PostScript; were +PCL (Print Control Language, from +&Hewlett-Packard;), ESC/P (from Epson) and +GDI (Graphical Device Interface from +&Microsoft;). + +The appearance of these page description languages made life easier, +and facilitated further development for everybody. Yet the fact that there +still remained different, incompatible, and competing page description +languages keeps life for users, administrators, developers and +manufacturers difficult enough. + + +&PostScript; in memory - Bitmaps on Paper + +&PostScript; is most heavily used in professional printing +environments such as PrePress and printing service industries. In the +&UNIX; and &Linux; domains, &PostScript; is the predominant standard +as a PDL. Here, nearly every program generates a +&PostScript; representation of its pages once you push the +Print button. Let us look at a simple example of +(hand-made) &PostScript; code. The following listing describes two +simple drawings: + + +&PostScript; Code +%!PS +100 100 moveto +0 50 rlineto +50 0 rlineto +0 -50 rlineto +closepath +.7 setgray fill +% first box over; next +160 100 moveto +0 60 rlineto +45 10 rlineto +0 -40 rlineto +closepath +.2 setgray fill + + +This tells the imaginary &PostScript; pen to draw +a path of a certain shape, and then fill it with different shades of +gray. The first part translates into more comprehensive English as +Go to coordinate (100,100), draw a line with length 50 upward; +then one from there to the right, then down again, and finally close +this part. Now fill the drawn shape with 70% darkness gray. + + +Rendered &PostScript; + + + + + + example rendered as an +image. + + + + +Of course, &PostScript; can be much more complicated than this +simplistic example. It is a fully fledged programming language with +many different operators and functions. You may even write +&PostScript; programs to compute the value of Pi, format a hard disk or +write to a file. The main value and strength of &PostScript; however +lies in the field to describe the layout of graphical objects on a +page: it also can scale, mirror, translate, transform, rotate and +distort everything you can imagine on a piece of paper -- such as +letters in different font representations, figures, shapes, shades, +colors, lines, dots, raster... + +A &PostScript; file is a representation of one or more pages +to be printed, in a relatively abstract way. Ideally, it is meant +to describe the pages in a device-independent way. &PostScript; is +not directly visible; it only lives on hard disks +and in RAM as a coded representation of +future printouts. + + + + +Raster Images on Paper Sheets + +What you see on a piece of paper is nearly always a +raster image. Even if your brain suggests to you that +your eyes see a line: take a good magnifying glass and you will +discover lots of small dots... (One example to the contrary are +lines that have been drawn by pen plotters). And that +is the only thing that the marking engines of today's +printers can put on paper: simple dots of different colors, size and +resolution, to make up a complete page image composed of +different bitmap patterns. + +Different printers need the raster image prepared in different +ways. Thinking about an inkjet device: depending on its resolution, +the number of inks used (the very good ones need 7 different inks, while +cheaper ones might only use 3), the number of available jets (some print +heads have more than 100!) dispensing ink simultaneously, the +dithering algorithm used, and many other things, the +final raster format and transfer order to the marking engine is heavily +dependent on the exact model used. + +Back in the early life of the Line Printer Daemon, +printers were machines that hammered rows of ASCII +text mechanically on to long media, folded as a zig-zag paper +snake, drawn from a cardboard box beneath the +table... What a difference from today! + + + + + +<acronym>RIP</acronym>: From &PostScript; to Raster + +Before the final raster images are put on paper cut-sheets, they +have to be calculated somehow out of their abstract &PostScript; +representation. This is a very computing-intensive process. It is called +the Raster Imaging Process, more commonly +RIP). + +With &PostScript; printers the RIP-ping is +taken care of by the device itself. You just send the &PostScript; +file to it. The Raster Imaging Processor (also called the +RIP) inside the printer is responsible (and +specialized) to fulfill quite well this task of interpreting the +&PostScript;-page descriptions and put the raster image on paper. + +Smaller &PostScript; devices have a +hardware-RIP built in; it is etched in silicon, on a +special chip. Big professional printers often have their +RIP implemented as a software-RIP +inside a dedicated fast &UNIX; run computer, often a Sun SPARC Solaris +or a &SGI; &IRIX; machine. + + + + +<application>Ghostscript</application> as a Software +<acronym>RIP</acronym> + +But what happens, if you are not lucky enough to have a +&PostScript; printer available? + +You need to do the RIP-ing before you send +the print data to the marking engine. You need to digest the &PostScript; +generated by your application on the host machine (the print client) +itself. You need to know how the exact raster format of the target +printer's marking engine must be composed. + +In other words, as you can't rely on the printer to understand +and interpret the &PostScript; itself, the issue becomes quite a bit +more complicated. You need software that tries to solve for you the +issues involved. + +This is exactly what the omnipresent &ghostscript; package is +doing for many &Linux;, *BSD and other &UNIX; boxes that need to print +to non-&PostScript; printers: &ghostscript; is a &PostScript; +interpreter, a software RIP capable of running many +different devices. + + + + +<quote>Drivers</quote> and <quote>Filters</quote> in General + +To produce rasterized bitmaps from &PostScript; input, the +concept of filters is used by &ghostscript;. There are +many different filters in &ghostscript;, some of them specialized for +a certain model of printer. &ghostscript; filterspecializedin devices +have often been developed without the consent or support of the +manufacturer concerned. Without access to the specifications and +documentation, it was a very painstaking process to reverse engineer +protocols and data formats. + +Not all &ghostscript; filters work equally well for their +printers. Yet, some of the newer ones, like the +stp Filter of the +Gimp Print project, produce excellent +results leading to photographic quality on a par or even superior to +their &Microsoft; &Windows; driver counterparts. + +&PostScript; is what most application programs produce for +printing in &UNIX; and &Linux;. Filters are the true workhorses of +any printing system there. Essentially they produce the right bitmaps +from any &PostScript; input for non-&PostScript; target +engines. + + + + +Drivers and Filters and Backends in CUPS + +&CUPS; uses its own filters, though the filtering system is +based on Ghostscript. Namely the pstoraster and the imagetoraster +filters are directly derived from Ghostscript code. &CUPS; has +reorganized and streamlined the whole mechanics of this legacy code +and organized it into a few clear and distinct modules. + +This next drawing (done with the help of &kivio;) gives an +overview of the filters and backends inside &CUPS; and how they fit +together. The flow is from top to bottom. Backends +are special filters: they don't convert date to a different format, +but they send the ready files to the printer. There are different +backends for different transfer protocols. + + +&kprinter; dialog started (&kivio; draft drawing) + + + + + +&kprinter; dialog started (&kivio; draft +drawing) + + + + + +Spoolers and Printing Daemons + +Besides the heavy part of the filtering task to generate a +print-ready bitmap, any printing software needs to use a SPOOLing +mechanism: this is to line up different jobs from different users for +different printers and different filters and send them accordingly to +the destinations. The printing daemon takes care of all this. + +This daemon is keeping the house in order: it is also +responsible for the job control: users should be allowed to cancel, +stop, restart, &etc; their jobs (but not other peoples's jobs) and so +on. + + + + + + + + +Excursion: How <quote>CUPS</quote> uses the power of +&PPD;s + +Now that you know how a &PostScript; language file (which +describes the page layout in a largely device independent way) is +transformed into a Raster Image, you might ask: +Well, there are different kinds of raster output devices: first +they differ in their resolution; then there are the different paper +sizes; it goes on with many finishing options (duplex prints, +pamphlets, punched and stapled output with different sheets of colored +paper being drawn from different trays, &etc;). How does this fit into +our model of device-independent &PostScript;? + +The answer comes with so called &PostScript; Printer Description +(&PPD; files. A &PPD; describes all the device dependent features +which can be utilized by a certain printer model. It also contains +the coded commands that must be used to call certain features of the +device. But &PPD;s are not a closed book, they are simple +ASCII text files. + +&PPD;s were invented by Adobe to make it easy for +manufacturers to implement their own features into &PostScript; +printers, and at the same time retain a standard way of doing so. +&PPD;s are well documented and described by Adobe. Their +specification is a de-facto open standard. + + +Device Dependent Print Options + +Remember, advanced &PostScript; printing was originally only +developed for use on &Microsoft; &Windows; and Apple &Mac; systems. +For a long time, all of the feature rich printing on modern devices +was simply unavailable for &Linux; and &UNIX;. &CUPS; changes this +decisively. &CUPS; is closely tied with &PPD;s, and therefore existing +&PPD;s can be utilized to the full by all systems powered by +&CUPS;. + +Using &PPD;s, printer manufacturers were able to insert +device-specific hardware features into their products, for features such +as duplexing, stapling, punching, finishing, &etc;. The printer drivers +load this &PPD; just like an additional configuration file. Thus the +printer driver learns about the available device options and how to +call them; the driver also presents them in a &GUI; to the user. Through +this mechanism you are still able to print +device-independent &PostScript; page description +language files and specify device-dependent finishing options on top, +which are added to the application-generated &PostScript;. + + + + +Where to get the &PPD;s for &PostScript; Printers + +&PPD;s originally were not used routinely in &UNIX; and &Linux; +systems. The vendors providing those &PPD;s never intended them for +anything other than the originally supported &OS;s: &Microsoft; &Windows; and +&MacOS;. Through its brilliant move to fully support and utilize +the existing &PPD; specification, &CUPS; now gives the power to use +all features of modern printers to users of &Linux; and &Linux;-like +systems. &kdeprint; makes its usage even more comfortable than the +&CUPS; developers ever dreamed of. + +&CUPS; can use original &Windows; &PPD;s, distributed by the +vendors in the case of &PostScript; printers. Those normally don't +cost any money, and they can be grabbed from any &Windows; computer +with an installed &PostScript; driver for the model concerned, or from +the disks provided with the printer. There are also several places on +the web to download them. + + + + +How Special &PPD;s are Now Useful Even For Non-&PostScript; +Printers. + +Now you know how &PostScript;-Printers can use &PPD;s. But what +about non-&PostScript; printers? &CUPS; has done a very good trick: by +using the same format and data structure as the &PostScript; Printer +Descriptions (&PPD;s) in the &PostScript; world, it can describe the +available print job options for non-&PostScript; printers just the +same. For its own special purposes &CUPS; just added a few special +options (namely the line which defines the filter to be used for +further processing of the &PostScript; file). + +So, the developers could use the same software engine to parse +the Printer Description Files for available options for all sorts of +printers. Of course the &CUPS; developers could not rely on the +non-&PostScript; hardware manufacturers to suddenly develop &PPD;s. +They had to do the difficult start themselves and write them from +scratch. More than 1000 of these are available through the commercial +version of &CUPS;, called ESP +PrintPro. + +Meanwhile there are a lot of &CUPS;-specific &PPD;s available. +Even now those are in most cases not originating from the printer +manufacturers, but from Free software developers. The &CUPS; folks +proofed it, and others followed suit: where &Linux; and &UNIX; +printing one or two years ago still was a kludge, it is now able to +support a big range of printers, including 7-color inkjets capable of +pushing them to Photo Quality output. + + + + +Different Ways to get &PPD;s for non-&PostScript; +Printers + +You can get &PPD;s to be used with &CUPS; and non-&PostScript; +printers from different areas in the Web: + + + + first, there is the repository at www.linuxprinting.org, +which lets you generate a CUPS-O-Matic-&PPD; online for +any printer that had been supported by traditional &ghostscript; +printing already. This helps you to switch over to &CUPS; with little +effort, if you wish so. If your printer was doing well with the +traditional way of &ghostscript; printing, take CUPS-O-Matic to plug +your driver into th e &CUPS; system and you'll have the best of both +worlds. + + + +second, there are &CUPS;-&PPD;s for the more than 120 printer +models, which are driven by the new universal +stp driver. stp +(stood originally for Stylus Photo) is now developed by the gimp-print +project; it was started by Mike Sweet, the leading &CUPS; developer +and is now available through gimp-print.sourceforge.net. +This driver prints real Photo quality on many modern inkjets and can +be configured to make 120 &CUPS;-&PPD;s along its own +compilation. &HP; Laser- and DeskJet, Epson Stylus and Photo Color models as +well as some Canon and +Lexmark are covered. + + + +third, there is the commercial extension to &CUPS; from the +&CUPS; developers themselves: it is called ESP +PrintPro and comes with more than 2.300 printer +drivers. There are even improved imagetoraster and pstoraster filters +included. + + + +&CUPS; makes it really easy for manufacturers to start +supporting &Linux; and &UNIX; printing for their models at reasonably +low cost. The modular framework of &CUPS; facilitates to plug in any +filter (=driver) with minimal effort and to access and utilize the +whole printing framework that &CUPS; is creating. + +Read more about the exciting &CUPS; features in the available +&CUPS; documentation at http://www.cups.org/documentation.html +and http://www.danka.de/printpro/faq.html. +Also at http://www.linuxprinting.org/ +is a universal repository for all issues related to &Linux; and &UNIX; +printing. + + + + + + +How &IPP; Support Makes &CUPS; the Best Choice Around + + +<quote><acronym>LPD</acronym> Must Die!</quote> + +For a long time many developers were deeply dissatisfied with good +old LPD. Quite a few new projects were started to +improve printing: LPRng is the best known +example. Others are PDQ, PPR, +PLP, GNUlpr and +RLPR. But none of the new programs were seen as a +big shot; most of them are just implementing the same old +LPD specification with a few (or many) new +extensions, which again make them incompatible with each other. + +Having seen the development of not just one, but different +viable alternatives to venerable BSD-style +LPD, Grant Taylor, author of the Linux +Printing HOWTO, finally rallied the call LPD +Must Die! in his Campaign To Abolish The Line +Printer Daemon. + + + + + + +How the &IPP; Came to Be + +Along with the above, on the industry side of things, there were +efforts to overcome the well-known weaknesses of +LPD. It started with proprietary extensions to +plain old LPD, and stretched as far as +&Hewlett-Packard;'s attempt to establish &HP; JetDirect as a new +standard for a network printing protocol. The result were even more +incompatibilities. + +In the end, an initiative to define a new common industry and +IETF standard took shape. The Printer +Working Group or PWG, a loose aggregation +of vendors in hardware, software, and operating systems, drafted the +new Internet Printing Protocol, &IPP;. &IPP; v1.1 has +now been approved by the IETF (Internet Engineering +Task Force) as a proposed standard, and now enjoys the unanimous +support throughout the industry in Europe, USA and Japan. Most +current network printer models have now built in &IPP; support on top +of traditional LPR/LPD or +JetDirect Printing. + + + + +Why &IPP; is Solving Many Problems + +&IPP; promises to solve a lot of problems network administrators +face. This trade normally deals with heterogeneous network +environments and spends more than half of its working hours dealing +with printing problems. + +By creating a unified set of query functions for &IPP; enabled +printers and servers, for transferring files and setting job-control +attributes &etc;, &IPP; is destined to work across all &OS; platforms. +It's rollout however, will not happen overnight, as many legacy print +devices will still be in use for many years to come. Therefore, in +&IPP; there is a provision made for backwards compatibility of all +&IPP; implementations. &CUPS; is proving the viability of &IPP; +printing in all environments. + +The most striking advantage will be it's integration into the +existing set of other robust IP protocols. Being +an extension of the proven and robust HTTP 1.1 +protocol, for the special task of handling print file and related +data, it is also very easy to plug in other standards as they are +being developed and deployed: + + + +Basic, Digest, and Certificate Authentication for users seeking +access to print services. + + +SSL3 and TLS encryption for transferring +data. + + +Bi directional communication of clients with print devices, using +the HTTP/&IPP; GET and +POST mechanism. + + +LDAP directory service integration to keep a consistent database +of available printers, their capabilities and page-costs, &etc;, as well +as user passwords, ACLs &etc;. + + +Pull (as opposed to the usual Push +model) printing, where a server or printer just needs to be told the +&URL; of a document, whereupon it is retrieved from the resource on the +internet and printed. + + + + + + + + +Printer <quote>Plug'n'Play</quote> for Clients + +Have you ever seen a demonstration about &CUPS; capabilities in +the network? You must have been quite impressed if you didn't know in +advance what to expect. + +Imagine you as the administrator of a LAN. For +testing purposes you fully installed one &kde;/&CUPS; box on your net, +complete with a dozen printers configured and functional: +&PostScript;, LaserJets, InkJets and BubbleJets, and so on. Your +&kde; users on that box are very happy, they can print like never +before, ringing all the bells and whistles of every +printer. It took you 2 hours to make everything run perfectly... and +now all the other 100 users on the network want the same. Two hours +again for every box? No way you could do that before next year, you +think? + +Wrong. Just change one setting in the original &CUPS; box to +make it a server. Install &CUPS; on five other boxes, +as clients. By the time you turn back to your first +client, you find the users happily playing with the settings for the +dozen printers you had defined earlier on the server. +Somehow magically the printers had appeared on all the +Print dialogs of the five new &CUPS; client +boxes. + +Your users print, but not a single driver had been installed on +the clients, nor a printer queue defined. + +So, how does this magic work? + + + + +<quote>Seeing</quote> Printers Not Installed Locally? + +The answer is not complicated at all. + +If a &CUPS; server is on the LAN, it +broadcasts the names of all available printers to the +LAN, using the UDP protocol and +port 631. Port 631 is reserved as a well-known port by +IANA (the Internet Assigning Numbers +Authority) for &IPP; purposes. All &CUPS; clients listen to +&CUPS; server info sent to their port 631. That's how they know about +available printers, and that's how they learn about the +path to the printers as well. + +Using &IPP;, which is really a clever extension to +HTTP v1.1, &CUPS; is able to address all objects +related to the printing system via Universal Resource +Locators or URLs. Print jobs to be deleted +or restarted, printers to be queried or modified, admin tasks to be +performed on the server, with &IPP; and &CUPS;, everything is +addressable by a certain URL. Many important +things can be done through the web interface to &CUPS;, accessible for +example with &konqueror;. + + + + +Printing Without Installing a Driver + +And more, the clients basically can administer +and use any printer they see, just as if it was a +locally installed one. Of course, you can set restrictions on it with +access control lists &etc;, so that not any +clients may use any printer as it likes. + +The clients even are able to print without the appropriate filter +(or driver) installed locally. + +So how does this work? If a client wants to know about and +select printer-specific options, it sends a request (called +CUPS-get-ppd) to the server. The server tells the +client all about all printer-specific options, as read from the server +side &PPD;. The user on the client side can see the options and +select the required ones. He then sends the print file, usually +unfiltered raw &PostScript;, spiced up with the +printer-options to the printer server, using &IPP; as the transport +protocol. All further processing, especially the filtering to +generate the final format for the target printer, is then done by the +server. The server has the necessary programs (drivers +or filters) to do this. + +This way a client prints without needing to install a driver +locally. + +Any change on the server, such as adding or modifying a printer, +is instantly known to the clients with no further +configuration. + + + + +<quote>Zero Administration</quote>, Load Balancing, and +<quote>Failover Switching</quote> + +Some other advanced features built into &CUPS; are the capacity to +do load balancing. + +If you define the same printer queues on two or more different +servers, the clients will send their jobs to the first responding or +available server. This implies an automatic load balancing amongst +servers. If you have to take one server off the network for +maintenance, the others will just take over its tasks without the users +even noticing the difference. + + + + + + diff --git a/doc/kdesu/Makefile.am b/doc/kdesu/Makefile.am new file mode 100644 index 000000000..bafa3f6c3 --- /dev/null +++ b/doc/kdesu/Makefile.am @@ -0,0 +1,5 @@ + +KDE_LANG = en +KDE_DOCS = AUTO +KDE_MANS = AUTO + diff --git a/doc/kdesu/index.docbook b/doc/kdesu/index.docbook new file mode 100644 index 000000000..800d20b10 --- /dev/null +++ b/doc/kdesu/index.docbook @@ -0,0 +1,320 @@ + + + + + +]> + + + + +The &kdesu; handbook + + +&Geert.Jansen; &Geert.Jansen.mail; + + + + +2000 +&Geert.Jansen; + + +&FDLNotice; + +2005-06-07 +1.00.00 + + +&kdesu; is a graphical front end for the &UNIX; +su command. + + +KDE +su +password +root + + + + + +Introduction + +Welcome to &kdesu;! &kdesu; is a graphical front end for the +&UNIX; su command for the K Desktop Environment. +It allows you to run a program as different user by supplying the +password for that user. &kdesu; is an unprivileged program; it uses +the system's su. + +&kdesu; has one additional feature: it can remember passwords +for you. If you are using this feature, you only need to enter the +password once for each command. See for more information on this and a +security analysis. + +This program is meant to be started from the command line or +from .desktop files. Although it asks for the +root password using a &GUI; +dialog, I consider it to be more of a command line <-> &GUI; +glue instead of a pure &GUI; program. + + + + +Using &kdesu; + +Usage of &kdesu; is easy. The syntax is like this: + + +kdesu + + + + file + icon name + + priority + + + + +user + + +command arg1 + arg2 + + + +kdesu +&kde; Generic Options +Qt Generic Options + + +The command line options are explained below. + + + + +This specifies the program to run as root. It has to be passed +in one argument. So if, for example, you want to start a new file manager, you +would enter at the prompt: kdesu + + + +Show debug information. + + + +This option allow efficient use of &kdesu; in +.desktop files. It tells &kdesu; to examine the +file specified by file. If this file is +writable by the current user, &kdesu; will execute the command as the +current user. If it is not writable, the command is executed as user +user (defaults to root). +file is evaluated like this: if +FILE starts with a /, it is +taken as an absolute filename. Otherwise, it is taken as the name of a +global &kde; configuration file. For example: to configure the K display +manager, kdm, you could issue +kdesu + + + icon name +Specify icon to use in the password dialog. You may specify +just the name, without any extension. +For instance to run kfmclient and show the +&konqueror; icon in the password dialog: +kdesu kfmclient + + + + + +Do not keep the password. This disables the keep +password checkbox in the password dialog. + + + priority + +Set priority value. The priority is an arbitrary number between 0 and +100, where 100 means highest priority, and 0 means lowest. The default is +50. + + + + +Use realtime scheduling. + + + + + +Stop the kdesu daemon. See . + + + +Enable terminal output. This disables password keeping. This is +largely for debugging purposes; if you want to run a console mode app, use the +standard su instead. + + + user +While the most common use for &kdesu; is to run a command as +the superuser, you can supply any user name and the appropriate +password. + + + + + + + + +Internals + + +X authentication + +The program you execute will run under the root user id and will +generally have no authority to access your X display. &kdesu; gets +around this by adding an authentication cookie for your display to a +temporary .Xauthority file. After the command +exits, this file is removed. + +If you don't use X cookies, you are on your own. &kdesu; will +detect this and will not add a cookie but you will have to make sure +that root is allowed to access to your display. + + + + +Interface to <command>su</command> + +&kdesu; uses the sytem's su for acquiring +priviliges. In this section, I explain the details of how &kdesu; does +this. + +Because some su implementations (&ie; the one +from &RedHat;) don't want to read the password from +stdin, &kdesu; creates a pty/tty pair and executes +su with it's standard filedescriptors connected to +the tty. + +To execute the command the user selected, rather than an +interactive shell, &kdesu; uses the argument with +su. This argument is understood by every shell that +I know of so it should work portably. su passes +this argument to the target user's shell, and the +shell executes the program. Example command: su . + +Instead of executing the user command directly with +su, &kdesu; executes a little stub program called +kdesu_stub. This stub (running as the +target user), requests some information from &kdesu; over the pty/tty +channel (the stub's stdin and stdout) and then executes the user's +program. The information passed over is: the X display, an X +authentication cookie (if available), the PATH and the +command to run. The reason why a stub program is used is that the X +cookie is private information and therefore cannot be passed on the +command line. + + + + +Password Checking + +&kdesu; will check the password you entered and gives an error +message if it is not correct. The checking is done by executing a test +program: /bin/true. If this succeeds, the +password is assumed to be correct. + + + + +Password Keeping + +For your comfort, &kdesu; implements a keep +password feature. If you are interested in security, you +should read this paragraph. + +Allowing &kdesu; to remember passwords opens up a (small) +security hole in your system. Obviously, &kdesu; does not allow +anybody but your user id to use the passwords, but, if done without +caution, this would lowers root's security level to that of a +normal user (you). A hacker who breaks into your account, would get +root access. &kdesu; tries +to prevent this. The security scheme it uses is, in my opinion at +least, reasonably safe and is explained here. + +&kdesu; uses a daemon, called +kdesud. The daemon listens to a &UNIX; +socket in /tmp for commands. The mode of the +socket is 0600 so that only your user id can connect to it. If +password keeping is enabled, &kdesu; executes commands through this +daemon. It writes the command and root's password to the socket and the +daemon executes the command using su, as describe +before. After this, the command and the password are not thrown +away. Instead, they are kept for a specified amount of time. This is +the timeout value from in the control module. If another request for +the same command is coming within this time period, the client does +not have to supply the password. To keep hackers who broke into your +account from stealing passwords from the daemon (for example, by +attaching a debugger), the daemon is installed set-group-id +nogroup. This should prevent all normal users (including you) from +getting passwords from the kdesud +process. Also, the daemon sets the DISPLAY environment +variable to the value it had when it was started. The only thing a +hacker can do is execute an application on your display. + +One weak spot in this scheme is that the programs you execute +are probably not written with security in mind (like setuid +root programs). This means +that they might have buffer overruns or other problems and a hacker +could exploit those. + +The use of the password keeping feature is a tradeoff between +security and comfort. I encourage you to think it over and decide for +yourself if you want to use it or not. + + + + + +Author + +&kdesu; + +Copyright 2000 &Geert.Jansen; + +&kdesu; is written by &Geert.Jansen;. It is somewhat based on +Pietro Iglio's &kdesu;, version 0.3. Pietro and I agreed that I will +maintain this program in the future. + +The author can be reached through email at &Geert.Jansen.mail;. +Please report any bugs you find to me so that I can fix them. If you +have a suggestion, feel free to contact me. + +&underFDL; +&underArtisticLicense; + + + + + + diff --git a/doc/kdesu/man-kdesu.1.docbook b/doc/kdesu/man-kdesu.1.docbook new file mode 100644 index 000000000..b9c5ac4ca --- /dev/null +++ b/doc/kdesu/man-kdesu.1.docbook @@ -0,0 +1,179 @@ + + +]> + + + +KDE User's Manual +&Lauri.Watts; &Lauri.Watts.mail; +Jun 7, 2005 +K Desktop Environment + + + +kdesu +1 + + + +kdesu +Runs a program with elevated privileges + + + + +kdesu + + + + file + icon name + + priority + + + + +user + + +command arg1 + arg2 + + + +kdesu +KDE Generic Options +Qt Generic Options + + + + +Description +&kdesu; is a graphical front end for the +&UNIX; su command for the K Desktop Environment. +It allows you to run a program as different user by supplying the +password for that user. &kdesu; is an unprivileged program; it uses +the system's su. + +&kdesu; has one additional feature: it can optionally remember passwords +for you. If you are using this feature, you only need to enter the +password once for each command. + +This program is meant to be started from the command line or +from .desktop files. + + + +Options + + + + +This specifies the program to run as root. It has to be passed +in one argument. So if, for example, you want to start a new file manager, you +would enter at the prompt: kdesu + + + +Show debug information. + + + +This option allow efficient use of &kdesu; in +.desktop files. It tells &kdesu; to examine the +file specified by file. If this file is +writable by the current user, &kdesu; will execute the command as the +current user. If it is not writable, the command is executed as user +user (defaults to root). +file is evaluated like this: if +file starts with a /, it is +taken as an absolute filename. Otherwise, it is taken as the name of a +global &kde; configuration file. For example: to configure the K display +manager, kdm, you could issue +kdesu + + + icon name +Specify icon to use in the password dialog. You may specify +just the name, without any extension. + + + + + +Do not keep the password. This disables the keep +password checkbox in the password dialog. + + + priority + +Set priority value. The priority is an arbitrary number between 0 and +100, where 100 means highest priority, and 0 means lowest. The default is +50. + + + + +Use realtime scheduling. + + + + + +Stop the kdesu daemon. This is the daemon that caches +successful passwords in the background. This feature may also be disabled with + when &kdesu; is initially run. + + + +Enable terminal output. This disables password keeping. This is +largely for debugging purposes; if you want to run a console mode app, use the +standard su instead. + + + user +While the most common use for &kdesu; is to run a command as +the superuser, you can supply any user name and the appropriate +password. + + + + + + + + +See Also +su(1) + +More detailed user documentation is available from help:/kdesu +(either enter this URL into &konqueror;, or run +khelpcenter +help:/kdesu). + + + + +Examples +Run kfmclient as user jim, and show the &konqueror; icon in the +password dialog: +kdesu kfmclient + + + + +Authors +&kdesu; was written by +GeertJansen jansen@kde.org +and PietroIglio +iglio@fub.it. + + + + diff --git a/doc/kdm/Makefile.am b/doc/kdm/Makefile.am new file mode 100644 index 000000000..c04fe0908 --- /dev/null +++ b/doc/kdm/Makefile.am @@ -0,0 +1,6 @@ +conf_def = $(top_srcdir)/kdm/config.def +ref: $(conf_def) $(top_srcdir)/kdm/confproc.pl + $(PERL) -w $(top_srcdir)/kdm/confproc.pl --doc $(conf_def) kdmrc-ref.docbook + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/kdm/index.docbook b/doc/kdm/index.docbook new file mode 100644 index 000000000..1a127a506 --- /dev/null +++ b/doc/kdm/index.docbook @@ -0,0 +1,1472 @@ + + + + kdmrc"> + ksmserver"> + kdesktop"> + XDMCP"> + xdm"> + + + +]> + + + +The &kdm; Handbook + + + +&Oswald.Buddenhagen; &Oswald.Buddenhagen.mail; + + + + + + + +2000 +&Neal.Crook; + + + +2002 +&Oswald.Buddenhagen; + + + +2003 +&Lauri.Watts; + + +2003-03-01 +0.05.02 + + +This document describes &kdm; the &kde; Display Manager. &kdm; +is also known as the Login Manager. + + + +KDE +kdm +xdm +display manager +login manager + + + + + +Introduction + +&kdm; provides a graphical interface that allows you to log in to a +system. It prompts for login (username) and password, authenticates the user +and starts a session. &kdm; is superior to &xdm;, the X +Display Manager, in a number of ways. + + + + + + + +Quick Start Guide + +This is a quick start guide for users who fit the following +pattern: + + + +X is configured and works with the command +startx from the commandline. + + +Each user will generally only use a single window manager or +desktop environment, and does not change this choice very +often, or is comfortable editing a single text file in order to change +their choice. + + + +This scenario will be sufficient for many environments where a single +user or several users normally boot the computer and log into their +preferred environment. + + +Setting up a Default Session + +Create or open the file ~/.xinitrc +If you already have a working ~/.xinitrc, go to +the next step + + +If one does not already exist, add a line to the +~/.xinitrc to start your preferred window manager +or desktop environment. +For &kde; you should enter: +startkde +For other window managers or desktop environments, you should +look in their documentation for the correct command. + +Make a link as follows: +ln ~/.xinitrc ~/.xsession + + + +At this point, typing startx +on the commandline should start X, with a &kde; session. The next task is +to try &kdm;. + +As root, type +kdm at the prompt. + +You should see a login window, which is described more fully in . + +Typing your normal username and password in the fields provided, and +leaving selected as the session type should now +open a &kde; session for your user. + +If you have other users to configure, you should repeat the procedure +above for each of them. + + +This is a quick guide to getting up and running only. You probably +will want to customize &kdm; further, for example, to hide the names of the +system accounts, to allow further sessions, and much more. Please read +through the rest of this manual to find out how to do these things. + + + + + +The Login Window + + The user interface to &kdm; consists of two dialog boxes. The main +dialog box has these controls: + + + +A Username: field for you to enter your +username. + + + +A Password: field for you to enter your +password. + + + +(Optionally) a graphical image of each user (for example, a digitized +photograph). Clicking on an image is equivalent to typing the associated +username into the Username: field. (This feature is an +imitation of the login box on &IRIX;). + + + +A Menu drop down box that allows &kdm; to be used +to start sessions with various different window managers or desktop +environments installed on the system. + + + +(Optionally) a region to the right of the +Username:, Password: and +Session Type: fields which can be used to display +either a static image or an analog clock. + + + +A Login button that validates the +username/password combination and attempts to start a session of the +selected type. + + + +A Clear button that clears the text from +the Login and Pass +fields. + + + +A Menu button that opens an action menu +with the following items: + + + +(On local displays) A Restart X Server item +that terminates the currently running &X-Server;, starts a new one and +displays the login dialog again. You can use this if the display content +seems to be broken somehow. + + + +(On remote displays) A Close Connection +item that closes the connection to the &XDMCP; server you are currently +connected to. If you got to this server through a host chooser, this will +bring you back to the chooser, otherwise it will only reset the &X-Server; +and bring up the login dialog again. + + + +(Optionally on local displays) A Console +Mode item that terminates the currently running &X-Server; and +leaves you alone with a console login. &kdm; will resume the graphical login +if nobody is logged in at the console for some time. + + + + + +(Optionally) A Shutdown button that displays +the Shutdown dialog box. + + + +The Shutdown dialog box presents a set of +radio buttons that allow one of these options to be selected: + + + +Shutdown + +Shut the system down in a controlled manner, ready for +power-down. + + + +Restart + +Shut the system down and reboot. For systems that use +Lilo, an optional drop down box allows you to +select a particular operating-system kernel to be used for the +reboot. + + + +Restart X Server + +Stop and then restart the X-server. Typically, you might need to use +this option if you have changed your X11 configuration in some way. + + + +Console Mode + +Stop the &X-Server; and return the system to console mode. This is +achieved by bringing the system down to runlevel 3. Typically, the system +manager might need to use this option before upgrading or re-configuring X11 +software. + + + + +Pressing the OK button initiates the selected +action; pressing the Cancel button returns to the +main &kdm; dialog box. + + + + + +Configuring &kdm; + +This chapter assumes that &kdm; is already up and running on your +system, and that you simply want to change its behavior in some way. + +When &kdm; starts up, it reads its configuration from the folder +$KDEDIR/share/config/kdm/ (this may +be /etc/kde3/kdm/ or something else +on your system). + +The main configuration file is &kdmrc;; all other files are +referenced from there and could be stored under any name anywhere on +the system - but usually that would not make much sense for obvious +reasons (one particular exception is referencing configuration files +of an already installed &xdm; - however when a new &kdm; is installed, +it will import settings from those files if it finds an already installed +&xdm;). + +Since &kdm; must run before any user is logged in, it is not +associated with any particular user. Therefore, it is not possible to have +user-specific configuration files; all users share the common &kdmrc;. It +follows from this that the configuration of &kdm; can only be altered by +those users that have write access to +$KDEDIR/share/config/kdm/kdmrc (normally +restricted to system administrators logged in as root). + +You can view the &kdmrc; file currently in use on your system, and you +can configure &kdm; by editing this file. Alternatively, you can use the +graphical configuration tool provided by the &kcontrolcenter; (under +System AdministrationLogin +Manager), which is described in the &kcontrolcenter; help files. + + +The remainder of this chapter describes configuration of &kdm; +via the &kcontrolcenter; module, and the next +chapter describes the options available in &kdmrc; itself. If +you only need to configure for local users, the &kcontrolcenter; module +should be sufficient for your needs. If you need to configure remote +logins, or have multiple &kdm; sessions running, you will need to read +on. + + + + +&Thomas.Tanghus; &Thomas.Tanghus.mail; +&Steffen.Hansen; &Steffen.Hansen.mail; +&Mike.McBride; &Mike.McBride.mail; + + + +The Login Manager &kcontrolcenter; Module + +Using this module, you can configure the &kde; graphical login +manager, &kdm;. You can change how the login screen looks, who has +access using the login manager and who can shutdown the +computer. + +All settings will be written to the configuration file +&kdmrc;, which in its original state has many comments to help you +configure &kdm;. Using this &kcontrolcenter; module will strip these +comments from the file. All available options in &kdmrc; are covered +in . + +The options listed in this chapter are cross referenced with +their equivalents in &kdmrc;. All options available in the &kcontrol; +module are also available directly in &kdmrc; but the reverse is not +true. + +In order to organize all of these options, this module is +divided into several sections: Appearance, +Font, Background, +Shutdown, +Users and +Convenience. + +You can switch between the sections using the tabs at the top of +the window. + +If you are not currently logged in as a superuser, you +will need to click the Administrator Mode... +Button. You will then be asked for a superuser password. Entering a +correct password will allow you to modify the settings of this +module. + + +Appearance + +From this page you can change the visual appearance of &kdm;, +&kde;'s graphical login manager. + +The Greeting: is the title of the login + screen. Setting this is especially useful if you have many servers users + may log in to. You may use various placeholders, which are described + along with the corresponding key + + in &kdmrc;. + + +You can then choose to show either the current system time, a logo or +nothing special in the login box. Make your choice in the radio buttons +labeled Logo area:. This corresponds to in &kdmrc; + +If you chose Show logo you can now choose a +logo: + + + +Drop an image file on the image button. + + +Click on the image button and select a new image from the image chooser +dialog. + + + +If you do not specify a logo the default +$KDEDIR/share/apps/kdm/pics/kdelogo.xpm +will be displayed. + +Normally the login box is centered on the screen. Use the +Position: options if you want it to appear +elsewhere on the screen. You can specify the relative position +(percentage of the screen size) for the center of the login window, +relative to the top left of the display, in the fields labeled +X: and Y: respectively. +These correspond to the key + +in &kdmrc;. + +While &kde;'s style depends on the settings of the user logged +in, the style used by &kdm; can be configured using the GUI +Style: and Color Scheme: options. +These correspond to the keys and in +&kdmrc; respectively. + +Below that, you have a drop down box to choose the language for +your login box, corresponding to setting in +&kdmrc;. + + + + +Font + +From this section of the module you can change the fonts used in the +login window. Only fonts available to all users are available here, not +fonts you have installed on a per user basis. + +You can select three different font styles from the drop down box +(General:, Failures:, +Greeting:). When you click on the +Choose... button a dialog appears from which you can +select the new characteristics for the font style. + + + +The General: font is used in all other places in the +login window. + + +The Failures: font is used when a login +fails. + + +The Greeting: font is the font used for the title +(Greeting String). + + + +You can also check the box labeled Use anti-aliasing for +fonts if you want smoothed fonts in the login dialog. + + + + +Background + +Here you can change the desktop background which will be displayed +before a user logs in. You can have a single color or an image as a +background. If you have an image as the background and select center, the +selected background color will be used around the image if it is not +large enough to cover the entire desktop. + +The background colors and effects are controlled by the options on +the tab labeled Background and you select a +background image and its placement from the options on the tab labeled +Wallpaper. + +To change the default background color(s) simply click either of +the color buttons and select a new color. + +The drop down box above the color buttons provides you with several +different blend effects. Choose one from the list, and it will be +previewed on the small monitor at the top of the window. Your choices +are: + + + +Flat +By choosing this mode, you select one color (using the color +button labeled Color 1), and the entire background is +covered with this one color. + + +Pattern +By choosing this mode, you select two colors (using both color +buttons). You then select a pattern by clicking +Setup. This opens a new dialog window, which gives you +the opportunity to select a pattern. Simply click once on the pattern of your +choice, then click on OK, and &kde; will render the pattern +you selected using the two colors you selected. For more on patterns, see the +section Background: Adding, Removing and Modifying +Patterns. + + +Background Program +By selecting this option, you can have &kde; use an external +program to determine the background. This can be any program of your choosing. +For more information on this option, see the section entitled Background: Using an external program. + + +Horizontal Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 on the left edge of the screen, and slowly transform into the +color selected by Color 2 by the time it gets to the +right edge of the screen. + + +Vertical Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 on the top edge of the screen, and slowly transform into the color +selected by Color 2 as it moves to the bottom of the +screen. + + +Pyramid Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 in each corner of the screen, and slowly transform into the color +selected by Color 2 as it moves to the center of the +screen. + + +Pipecross Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +1 in each corner of the screen, and slowly transform into the color +selected by Color 2 as it moves to the center of the +screen. The shape of this gradient is different then the pyramid +gradient. + + +Elliptic Gradient +By choosing this mode, you select two colors (using both color +buttons). &kde; will then start with the color selected by Color +2 in the center of the screen, and slowly transform into the color +selected by Color 1 as it moves to the edges, in an +elliptical pattern. + + + +The setup button is only needed for if you select Background +program or Patterns. In these instances, +another window will appear to configure the specifics. +Wallpaper +To select a new background image first, click on the +Wallpapers tab, then you can either select an image from the drop down list labeled Wallpaper or select +Browse... and select an image file from a file +selector. + +The image can be displayed in six different ways: + + +No wallpaper +No image is displayed. Just the background colors. + + +Centered +The image will be centered on the screen. The background colors +will be present anywhere the image does not cover. + + +Tiled +The image will be duplicated until it fills the entire +desktop. The first image will be placed in the upper left corner of the screen, +and duplicated downward and to the right. + + +Center Tiled +The image will be duplicated until it fills the entire +desktop. The first image will be placed in the center of the screen, and +duplicated upward, downward to the right, and to the left. + + +Centered Maxpect +The image will be placed in the center of the screen. It will +be scaled to fit the desktop, but it will not change the aspect ratio of the +original image. This will provide you with an image that is not distorted. + + + +Scaled +The image will be scaled to fit the desktop. It will be +stretched to fit all four corners. + + + + + + +<guilabel>Shutdown</guilabel> + +Allow Shutdown +Use this drop down box to choose who is allowed to shut down: + + +Nobody: No one can shutdown the computer using +&kdm;. You must be logged in, and execute a command. + + +Everybody: Everyone can shutdown the computer using +&kdm;. + +Only Root: &kdm; requires that the +root password be entered before shutting down the +computer. + + +You can independently configure who is allowed to issue a +shutdown command for the Local: and +Remote: users. + +Commands Use these text fields to +define the exact shutdown command. The +Halt: command defaults to +/sbin/halt. The Restart: command +defaults to +/sbin/reboot. + +When Show boot options is enabled, &kdm; +will on reboot offer you options for the lilo boot manager. For this +feature to work, you will need to supply the correct paths to your +lilo command and to lilo's map file. Note that this +option is not available on all operating systems. + + + + +Users + +From here you can change the way users are represented in the +login window. + +You may disable the user list in &kdm; entirely in the +Show Users section. You can choose from: + + + +Show List + +Only show users you have specifically enabled in the list +alongside +If you do not check this box, no list will be shown. This is the most secure setting, since an +attacker would then have to guess a valid login name as well as a +password. It's also the preferred option if you have more than a +handful of users to list, or the list itself would become +unwieldy. + + + +Inverse selection + +Allows you to intead select a list of users that should +not be shown, and all other users will be +listed. + + + + +Independently of the users you specify by name, you can use the +System UIDs to specify a range of valid +UIDs that are shown in the list. By default user +id's under 1000, which are often system or daemon users, and user id's +over 65000, are not shown. + +You can also enable the Sort users +checkbox, to have the user list sorted alphabetically. If this is +disabled, users will appear in the order they are listed in the +password file. &kdm; will also autocomplete user names if you enable the +Autocompletion option. + +If you choose to show users, then the login window will show +images (which you select), of a list of users. When someone is ready +to login, they may select their user name/image, enter their password, +and they are granted access. + +If you permit a user image, then you can configure the source +for those images. + +You can configure the admin picture here, for each user on the +system. Depending on the order selected above, users may be able to +override your selection. + +If you choose not to show users, then the login window will be +more traditional. Users will need to type their username and password +to gain entrance. This is the preferred way if you have many users on +this terminal. + + + + +Convenience + +In the convenience tab you can configure +some options that make life easier for lazy people, like automatic +login or disabling passwords. + +Please think more than twice before using these +options. Every option in the Convenience tab is +well-suited to seriously compromise your system security. Practically, +these options are only to be used in a completely non-critical +environment, ⪚ a private computer at home. + + +Automatic Login + +Automatic login will give anyone access to a certain account on +your system without doing any authentication. You can enable it using +the option Enable Auto-login. + +You can choose the account to be used for automatic login from +the list labeled User:. + + + + +<guilabel>Password-Less Login</guilabel> + +Using this feature, you can allow certain users to login without +having to provide their password. Enable this feature using the +Enable Password-less logins option. + +Below this option you'll see a list of users on the system. +Enable password-less login for specific users by checking the checkbox +next to the login names. By default, this feature is disabled for +all users. + +Again, this option should only be used in a safe +environment. If you enable it on a rather public system you should +take care that only users with heavy access restrictions are granted +password-less login, ⪚ +guest. + +You can also choose which user is preselected +when &kdm; starts. The default is None, but you +can choose Previous to have &kdm; default to the +last successfully logged in user, or you can +Specify a particular user to always be selected +from the list. You can also have &kdm; set the focus to the password +field, so that when you reach the &kdm; login screen, you can type the +password immediately. + +The Automatically login after X server crash +option allows you to skip the authentication procedure when your X +server accidentally crashed. + + + + + + + + + +&kdmrc-ref; + + + +Configuring your system to use &kdm; + +This chapter assumes that your system is already configured to +run the &X-Window;, and that you only need to reconfigure it to +allow graphical login. + + +Setting up &kdm; + +The fundamental thing that controls whether your computer boots to a +terminal prompt (console mode) or a graphical login prompt is the default +runlevel. The runlevel is set by the program /sbin/init under the control of the +configuration file /etc/inittab. The default runlevels +used by different &UNIX; systems (and different &Linux; distributions) vary, +but if you look at /etc/inittab the start of it should +be something like this: + +# Default runlevel. The runlevels used by RHS are: +# 0 - halt (Do NOT set initdefault to this) +# 1 - Single user mode +# 2 - Multiuser, without NFS +# 3 - Full multiuser mode +# 4 - unused +# 5 - X11 +# 6 - reboot (Do NOT set initdefault to this) + +id:3:initdefault: + + +All but the last line of this extract are comments. The comments +show that runlevel 5 is used for X11 and that runlevel 3 is used for +multi-user mode without X11 (console mode). The final line specifies +that the default runlevel of the system is 3 (console mode). If your +system currently uses graphical login (for example, using &xdm;) its +default runlevel will match the runlevel specified for X11. + +The runlevel with graphical login (&xdm;) for some common &Linux; +distributions is: + + +5 for &RedHat; 3.x and later, and for &Mandrake; +4 for Slackware +3 for &SuSE;. 4.x and 5.x + + +The first step in configuring your system is to ensure that you +can start &kdm; from the command line. Once this is working, you can +change your system configuration so that &kdm; starts automatically +each time you reboot your system. + +To test &kdm;, you must first bring your system to a runlevel +that does not run &xdm;. To do so, issue a command like this: + +/sbin/init + +Instead of the number you should specify the +appropriate runlevel for console mode on your system. + +If your system uses Pluggable Authentication Modules +(PAM), which is normal with recent &Linux; and &Solaris; +systems, you should check that your PAM configuration permits +login through the service named kde. If you previously used +&xdm; successfully, you should not need to make any +changes to your PAM configuration in order to use +&kdm;. /etc/pam.conf or +/etc/pam.d/kde. Information on configuring +PAM is beyond the scope of this handbook, but +PAM comes with comprehensive documentation (try looking in +/usr/share/doc/*pam*/html/). + +Now it's time for you to test &kdm; by issuing the following +command: + +kdm + + +If you get a &kdm; login dialog and you are able to log in, +things are going well. The main thing that can go wrong here is that +the run-time linker might not find the shared &Qt; or &kde; libraries. +If you have a binary distribution of the &kde; libraries, make sure +&kdm; is installed where the libraries believe &kde; is installed and +try setting some environment variables to point to your &kde; and &Qt; +libraries. + +For example: + +export + +export + +export + +export + + + +If you are still unsuccessful, try starting &xdm; instead, to +make sure that you are not suffering from a more serious X +configuration problem. + +When you are able to start &kdm; successfully, you can start to +replace &xdm; by &kdm;. Again, this is distribution-dependent. + + + +For &RedHat;, edit /etc/inittab, look for this + line: +x:5:respawn:/usr/X11/bin/xdm -nodaemon +and replace with: +x:5:respawn:/opt/kde/bin/kdm +This tells init(8) to respawn &kdm; when the +system is in run level 5. Note that &kdm; does not need the + option. + + +For &Mandrake;, the X11 runlevel in +/etc/inittab invokes the shell script +/etc/X11/prefdm, which is set up to select from +amongst several display managers, including &kdm;. Make sure that all +the paths are correct for your installation. + + +For &SuSE;, edit /sbin/init.d/xdm to add a +first line: + +. /etc/rc.config +DISPLAYMANAGER=kdm +export DISPLAYMANAGER + +For FreeBSD, edit /etc/ttys and find +the line like this: +ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure +and edit it to this: +ttyv8 "/usr/local/bin/kdm" xterm on secure + + +Most other distributions are a variation of one of +these. + + +At this stage, you can test &kdm; again by bringing your system +to the runlevel that should now run &kdm;. To do so, issue a command +like this: + +/sbin/init + + +Instead of the number you should specify the +appropriate runlevel for running X11 on your system. + +The final step is to edit the initdefault +entry in /etc/inittab to specify the appropriate +runlevel for X11. + +Before you make this change, ensure that you have a way +to reboot your system if a problem occurs. This might be a +rescue floppy-disk provided by your operating system +distribution or a specially-designed rescue +floppy-disk, such as tomsrtbt. Ignore this advice +at your peril. + +This usually involves changing the line: +id:3:initdefault: +to +id:5:initdefault: + +When you reboot your system, you should end up with the +graphical &kdm; login dialog. + +If this step is unsuccessful the most likely problem is that the +environment used at boot time differs from the environment that you used for +testing at the command line. If you are trying to get two versions of &kde; +to co-exist, be particularly careful that the settings you use for your +PATH and LD_LIBRARY_PATH environment variables +are consistent, and that the startup scripts are not over-riding them in +some way. + + + + + + +Supporting multiple window managers + +&kdm; detects most available window manager and desktop environments when +it is run. Installing a new one should make it automatically available in +the &kdm; main dialog Session Type:. + +If you have a very new window manager, or something that &kdm; does +not support, the first thing you should check is that the application to be +run is in the PATH and has not been renamed during the +install into something unexpected. + +If the case is that the application is too new and not yet supported +by &kdm;, you can quite simply add a new session. + +The sessions are defined in .desktop files in +$KDEDIR/share/apps/kdm/sessions. +You can simply add an appropriately named .desktop file in this directory. The fields +are: + +[Desktop Entry] +Encoding=UTF-8 This is fixed to and +may be omitted +Type=XSession This is fixed to and +may be omitted +Exec=executable name Passed to +eval exec in a Bourne shell +TryExec=executable name Supported +but not required +Name=name to show in the &kdm; session list + +There are also three magic: + + + +default + + +The default session for &kdm; is normally &kde; but can be configured by the +system administrator. + + + + +custom + + +The Custom session will run the users ~/.xsession if it exists. + + + + +failsafe + + +Failsafe will run a very plain session, and is useful only for debugging +purposes. + + + + + +To override a session type, copy the .desktop file from the data dir +to the config dir and edit it at will. Removing the shipped session types +can be accomplished by shadowing them with .desktop files +containing Hidden=true. For the magic session types no .desktop files exist +by default, but &kdm; pretends they would, so you can override them like any +other type. I guess you already know how to add a new session type by +now. ;-) + + + + +Using &kdm; for Remote Logins (&XDMCP;) + +&XDMCP; is the Open Group standard, the X Display Manager +Control Protocol. This is used to set up connections between +remote systems over the network. + +&XDMCP; is useful in multiuser situations where there are users +with workstations and a more powerful server that can provide the +resources to run multiple X sessions. For example, &XDMCP; is a good +way to reuse old computers - a Pentium or even 486 computer with 16 Mb +RAM is sufficient to run X itself, and using &XDMCP; such a computer can +run a full modern &kde; session from a server. For the server part, +once a single &kde; (or other environment) session is running, running +another one requires very few extra resources. + +However, allowing another method of login to your machine +obviously has security implications. You should run this service only +if you need to allow remote X Servers to start login sessions on your +system. Users with a single &UNIX; computer should not need to run +this. + + + + +Advanced Topics + + +Command Sockets + +This is a feature you can use to remote-control &kdm;. It's mostly +intended for use by &ksmserver; and &kdesktop; from a running session, but +other applications are possible as well. + +The sockets are &UNIX; domain sockets which live in subdirectories of the +directory specified by =. The subdir is the key to +addressing and security; the sockets all have the file name +socket and file permissions +rw-rw-rw- (0666). This is because some systems don't care +for the file permission of the socket files. + +There are two types of sockets: the global one (dmctl) and the +per-display ones (dmctl-<display>). + +The global one's subdir is owned by root, the subdirs of the per-display +ones' are owned by the user currently owning the session (root or the +logged in user). Group ownership of the subdirs can be set via FifoGroup=, +otherwise it is root. The file permissions of the subdirs are rwxr-x--- +(0750). + +The fields of a command are separated by tabs (\t), the +fields of a list are separated by spaces, literal spaces in list fields are +denoted by \s. + +The command is terminated by a newline (\n). + +The same applies to replies. The reply on success is +ok, possibly followed by the requested +information. The reply on error is an errno-style word (⪚ +perm, noent, &etc;) +followed by a longer explanation. + + +Global commands: + +login +(now | schedule) user password +[session_arguments] + +login user at specified display. if now is +specified, a possibly running session is killed, otherwise the login is done +after the session exits. session_arguments are printf-like escaped contents +for .dmrc. Unlisted keys will default to previously saved values. + + + + + +Per-display commands: + +lock + +The display is marked as locked. If the &X-Server; crashes in this +state, no auto-relogin will be performed even if the option is on. + + + +unlock + +Reverse the effect of lock, and re-enable +auto-relogin. + + + +suicide + +The currently running session is forcibly terminated. No auto-relogin +is attempted, but a scheduled "login" command will be executed. + + + + + +Commands for all sockets + +caps + +Returns a list of this socket's capabilities: + + + +&kdm; + +identifies &kdm;, in case some other DM implements this protocol, +too + + + +list, lock, +suicide, login + +The respective command is supported + + + +bootoptions + +The listbootoptions command and the + to shutdown are supported + + + +shutdown <list> + +shutdown is supported and allowed for the listed +users (a comma separated list.) * means all +authenticated users. + + + +nuke <list> + +Forced shutdown may be performed by the listed users. + + + +nuke + +Forced shutdown may be performed by everybody + + + +reserve <number> + +Reserve displays are configured, and number +are available at this time + + + + +list [all | +alllocal] + +Return a list of running sessions. By default all active sessions are +listed. if all is specified, passive sessions are +listed as well. If alllocal is specified, passive +sessions are listed as well, but all incoming remote sessions are +skipped. +Each session entry is a comma separated tuple of: + +Display or TTY name +VT name for local sessions +Logged in user's name, empty for passive sessions and +outgoing remote sessions (local chooser mode) +Session type or <remote> for outgoing +remote sessions, empty for passive sessions. +A Flag field: +* for the display belonging +to the requesting socket. +! for sessions that cannot be killed by the +reqeusting socket. + + + +New fields may be added in the future. + + + + +reserve [timeout in +seconds] + +Start a reserve login screen. If nobody logs in within the specified +amount of time (one minute by default), the display is removed again. When +the session on the display exits, the display is removed, too. +Permitted only on sockets of local displays and the global +socket. + + + + +activate +(vt|display) + +Switch to a particular VT (virtual terminal). The VT may be specified +either directly (⪚ vt3) or by a display using it +(eg; :2). +Permitted only on sockets of local displays and the global +socket. + + + + +listbootoptions + +List available boot options. + + + + + +shutdown (reboot | +halt) +[=bootchoice] +(ask|trynow|forcenow|schedule|start +(-1|end +(force|forcemy|cancel)))) + +Request a system shutdown, either a reboot or a halt/poweroff. +An OS choice for the next boot may be specified from the list returned +by listbootoptions +Shutdowns requested from per-display sockets are executed when the +current sessino on that display exits. Such a request may pop up a dialog +asking for confirmation and/or authentication +start is the time for which the shutdown is +scheduled. If it starts with a plus-sign, the current time is added. Zero +means immediately. +end is the latest time at which the shutdown +should be performed if active sessions are still running. If it starts with +a plus-sign, the start time is added. -1 means wait infinitely. If end is +through and active sessions are still running, &kdm; can do one of the +following: + +cancel - give up the +shutdown +force - shut down +nonetheless +forcemy - shut down nonetheless if +all active sessions belong to the requesting user. Only for per-display sockets. + +start and end are +specified in seconds since the &UNIX; epoch. +trynow is a synonym for 0 0 +cancel, forcenow for 0 0 +force and schedule for 0 +-1. +ask attempts an immediate shutdown and +interacts with the user if active sessions are still running. Only for +per-display sockets. + + + + +shutdown cancel +[local|global} + +Cancel a scheduled shutdown. The global socket always cancels the +currently pending shutdown, while per-display sockets default to cancelling +their queued request. + + + + +shutdown status + +Return a list with information about shutdowns. +The entries are a comma-separated tuples of: + + +(global|local) - +pending vs. queued shutdown. A local entry can be returned only by a +per-display socket. + +(halt|reboot) +start +end +("ask"|"force"|"forcemy"|"cancel") +Numeric user ID of the requesting user, -1 for the global +socket. +The next boot OS choice or "-" for none. + +New fields might be added later + + + + + + +There are two ways of using the sockets: + + +Connecting them directly. FifoDir is exported as +$DM_CONTROL; the name of per-display sockets can be derived +from $DISPLAY. + + +By using the kdmctl command (⪚ from within a +shell script). Try kdmctl to find out +more. + + + +Here is an example bash script reboot into FreeBSD: + +if kdmctl | grep -q shutdown; then + IFS=$'\t' + set -- `kdmctl listbootoptions` + if [ "$1" = ok ]; then + fbsd=$(echo "$2" | tr ' ' '\n' | sed -ne 's,\\s, ,g;/freebsd/I{p;q}') + if [ -n "$fbsd" ]; then + kdmctl shutdown reboot "=$fbsd" ask > /dev/null + else + echo "FreeBSD boot unavailable." + fi + else + echo "Boot options unavailable." + fi +else + echo "Cannot reboot system." +fi + + + + + + +Other sources of information + +Since &kdm; is descended from &xdm;, the &xdm; man page may provide useful background +information. For X-related problems try the man pages X and startx. If you have +questions about &kdm; that are not answered by this handbook, take advantage of +the fact the &kdm; is provided under the terms of the &GNU; +General Public License: look at the source code. + + + + + +Credits and License + +&kdm; is derived from, and includes code from, +&xdm; (C) Keith Packard, MIT X Consortium. + +&kdm; 0.1 was written by &Matthias.Ettrich;. Later versions till &kde; +2.0.x were written by &Steffen.Hansen;. Some new features for &kde; 2.1.x and +a major rewrite for &kde; 2.2.x made by &Oswald.Buddenhagen;. + +Other parts of the &kdm; code are copyright by the authors, and +licensed under the terms of the &GNU; +GPL. Anyone is allowed to change &kdm; and redistribute the result +as long as the names of the authors are mentioned. + +&kdm; requires the &Qt; library, which is copyright Troll Tech AS. + +Documentation contributors: + + +Documentation written by &Steffen.Hansen; +stefh@dit.ou.dk + +Documentation extended by Gregor +Zumsteinzumstein@ssd.ethz.ch. Last update August 9, +1998 + +Documentation revised for &kde; 2 by &Neal.Crook; &Neal.Crook.mail;. Last update August 6, 2000 + +Documentation extended and revised for &kde; 2.2 by &Oswald.Buddenhagen; &Oswald.Buddenhagen.mail;. Last update August, +2001 + + + +Documentation copyright &Steffen.Hansen;, Gregor Zumstein, &Neal.Crook; +and &Oswald.Buddenhagen;. This document also includes large parts of the &xdm; +man page, which is © Keith Packard. + + + +&underFDL; +&underGPL; + + + + +Glossary + + +greeter +The greeter is the login dialog, &ie; the part of &kdm; +which the user sees. + + + + +entropy +The entropy of a system is the measure of its +unpredictability. This is used during the generation of random numbers. + + + + + + diff --git a/doc/kdm/kdmrc-ref.docbook b/doc/kdm/kdmrc-ref.docbook new file mode 100644 index 000000000..9ebcfbdd3 --- /dev/null +++ b/doc/kdm/kdmrc-ref.docbook @@ -0,0 +1,2316 @@ + + + +The Files &kdm; Uses for Configuration + +This chapter documents the files that control &kdm;'s behavior. +Some of this can be also controlled from the &kcontrol; module, but +not all. + + +&kdmrc; - The &kdm; master configuration file + +The basic format of the file is INI-like. +Options are key/value pairs, placed in sections. +Everything in the file is case sensitive. +Syntactic errors and unrecognized key/section identifiers cause &kdm; to +issue non-fatal error messages. + +Lines beginning with # are comments; empty lines +are ignored as well. + +Sections are denoted by +[Name of Section]. + + +You can configure every X-display individually. +Every display has a display name, which consists of a host name +(which is empty for local displays specified in +or ), a colon, and a display number. +Additionally, a display belongs to a +display class (which can be ignored in most cases). + +Sections with display-specific settings have the formal syntax +[X- host [ : number [ _ class ] ] - sub-section ] + +All sections with the same sub-section +make up a section class. + +You can use the wildcard * (match any) for +host, number, +and class. You may omit trailing components; +they are assumed to be * then. The host part may be a +domain specification like .inf.tu-dresden.de +or the wildcard + (match non-empty). + +From which section a setting is actually taken is determined by +these rules: + + + +An exact match takes precedence over a partial match (for the +host part), which in turn takes precedence over a wildcard +(+ taking precendence over *). + + + +Precedence decreases from left to right for equally exact matches. + + + + + +Example: display name myhost.foo:0, class dpy + + + +[X-myhost.foo:0_dpy] precedes + + +[X-myhost.foo:0_*] (same as [X-myhost.foo:0]) precedes + + +[X-myhost.foo:*_dpy] precedes + + +[X-myhost.foo:*_*] (same as [X-myhost.foo]) precedes + + +[X-.foo:*_*] (same as [X-.foo]) precedes + + +[X-+:0_dpy] precedes + + +[X-*:0_dpy] precedes + + +[X-*:0_*] (same as [X-*:0]) precedes + + +[X-*:*_*] (same as [X-*]). + + +These sections do not match this display: +[X-hishost], [X-myhost.foo:0_dec], [X-*:1], [X-:*] + + + + + + + +Common sections are [X-*] (all displays), [X-:*] (all local displays) +and [X-:0] (the first local display). + +The format for all keys is + = value. +Keys are only valid in the section class they are defined for. +Some keys do not apply to particular displays, in which case they are ignored. + + +If a setting is not found in any matching section, the default +is used. + +Special characters need to be backslash-escaped (leading and trailing +spaces (\s), tab (\t), linefeed +(\n), carriage return (\r) and the +backslash itself (\\)). +In lists, fields are separated with commas without whitespace in between. + +Some command strings are subject to simplified sh-style word splitting: +single quotes (') and double quotes (") +have the usual meaning; the backslash quotes everything (not only special +characters). Note that the backslashes need to be doubled because of the +two levels of quoting. + +A pristine &kdmrc; is very thoroughly commented. +All comments will be lost if you change this file with the +kcontrol frontend. + + + +The [General] section of &kdmrc; + + +This section contains global options that do not fit into any specific section. + + + + + + + + +This option exists solely for the purpose of clean automatic upgrades. +Do not change it, you may interfere with future +upgrades and this could result in &kdm; failing to run. + + + + + + + + +List of displays (&X-Server;s) permanently managed by &kdm;. Displays with a +hostname are foreign displays which are expected to be already running, +the others are local displays for which &kdm; starts an own &X-Server;; +see . Each display may belong to a display class; +append it to the display name separated by an underscore. +See for the details. + +The default is :0. + + + + + + + +List of on-demand displays. See for syntax. + +Empty by default. + + + + + + + +List of Virtual Terminals to allocate to &X-Server;s. For negative numbers the +absolute value is used, and the VT will be allocated only +if the kernel says it is free. If &kdm; exhausts this list, it will allocate +free VTs greater than the absolute value of the last entry +in this list. +Currently Linux only. + +Empty by default. + + + + + + + +This option is for operating systems (OSs) with support +for virtual terminals (VTs), by both &kdm; and the +OSs itself. +Currently this applies only to Linux. + +When &kdm; switches to console mode, it starts monitoring all +TTY lines listed here (without the leading +/dev/). +If none of them is active for some time, &kdm; switches back to the X login. + +Empty by default. + + + + + + + +The filename specified will be created to contain an ASCII representation +of the process ID of the main &kdm; process; the PID will not be stored +if the filename is empty. + +Empty by default. + + + + + + + +This option controls whether &kdm; uses file locking to keep multiple +display managers from running onto each other. + +The default is true. + + + + + + + +This names a directory under which &kdm; stores &X-Server; authorization +files while initializing the session. &kdm; expects the system to clean up +this directory from stale files on reboot. + +The authorization file to be used for a particular display can be +specified with the option in [X-*-Core]. + +The default is /var/run/xauth. + + + + + + + +This boolean controls whether &kdm; automatically re-reads its +configuration files if it finds them to have changed. + +The default is true. + + + + + + + +Additional environment variables &kdm; should pass on to all programs it runs. +LD_LIBRARY_PATH and XCURSOR_THEME are good candidates; +otherwise, it should not be necessary very often. + +Empty by default. + + + + + + + +If the system has no native entropy source like /dev/urandom (see +) and no entropy daemon like EGD (see + and ) is running, +&kdm; will fall back to its own pseudo-random number generator +that will, among other things, successively checksum parts of this file +(which, obviously, should change frequently). + +This option does not exist on Linux and various BSDs. + +The default is /dev/mem. + + + + + + + +If the system has no native entropy source like /dev/urandom (see +), read random data from a Pseudo-Random +Number Generator Daemon, +like EGD (http://egd.sourceforge.net) via this UNIX domain socket. + +This option does not exist on Linux and various BSDs. + +Empty by default. + + + + + + + +Same as , only use a TCP socket on localhost. + + + + + + + + +The path to a character device which &kdm; should read random data from. +Empty means to use the system's preferred entropy device if there is one. + +This option does not exist on OpenBSD, as it uses the arc4_random +function instead. + +Empty by default. + + + + + + + +The directory in which the command FiFos should +be created; make it empty to disable them. + +The default is /var/run/xdmctl. + + + + + + + +The group to which the global command FiFo should belong; +can be either a name or a numerical ID. + + + + + + + + +The directory in which &kdm; should store persistent working data; such data +is, for example, the previous user that logged in on a particular display. + +The default is /var/lib/kdm. + + + + + + + +The directory in which &kdm; should store users' .dmrc files. This is only +needed if the home directories are not readable before actually logging in +(like with AFS). + +Empty by default. + + + + + + + + +The [Xdmcp] section of &kdmrc; + + +This section contains options that control &kdm;'s handling of +&XDMCP; requests. + + + + + + + + +Whether &kdm; should listen to incoming &XDMCP; requests. + +The default is true. + + + + + + + +This indicates the UDP port number which &kdm; uses to listen for incoming +&XDMCP; requests. Unless you need to debug the system, leave this with its +default value. + +The default is 177. + + + + + + + +XDM-AUTHENTICATION-1 style &XDMCP; authentication requires a private +key to be shared between &kdm; and the terminal. This option specifies +the file containing those values. Each entry in the file consists of a +display name and the shared key. + +Empty by default. + + + + + + + +To prevent unauthorized &XDMCP; service and to allow forwarding of &XDMCP; +IndirectQuery requests, this file contains a database of hostnames which +are either allowed direct access to this machine, or have a list of hosts +to which queries should be forwarded to. The format of this file is +described in . + +The default is ${kde_confdir}/kdm/Xaccess. + + + + + + + +Number of seconds to wait for the display to respond after the user has +selected a host from the chooser. If the display sends an &XDMCP; +IndirectQuery within this time, the request is forwarded to the chosen +host; otherwise, it is assumed to be from a new session and the chooser +is offered again. + +The default is 15. + + + + + + + +When computing the display name for &XDMCP; clients, the name resolver will +typically create a fully qualified host name for the terminal. As this is +sometimes confusing, &kdm; will remove the domain name portion of the host +name if it is the same as the domain name of the local host when this option +is enabled. + +The default is true. + + + + + + + +Use the numeric IP address of the incoming connection on multihomed hosts +instead of the host name. This is to avoid trying to connect on the wrong +interface which might be down at this time. + +The default is false. + + + + + + + +This specifies a program which is run (as +root) when an &XDMCP; +DirectQuery or BroadcastQuery is received and this host is configured +to offer &XDMCP; display management. The output of this program may be +displayed in a chooser window. If no program is specified, the string +Willing to manage is sent. + +Empty by default. + + + + + + + + +The [Shutdown] section of &kdmrc; + + +This section contains global options concerning system shutdown. + + + + + + + + +The command (subject to word splitting) to run to halt/poweroff the system. + +The default is something reasonable for the system on which &kdm; was built, like +/sbin/shutdown  now. + + + + + + + + +The command (subject to word splitting) to run to reboot the system. + +The default is something reasonable for the system &kdm; on which was built, like +/sbin/shutdown  now. + + + + + + + + +Whether it is allowed to shut down the system via the global command FiFo. + +The default is false. + + + + + + + +Whether it is allowed to abort active sessions when shutting down the +system via the global command FiFo. + +This will have no effect unless is enabled. + +The default is true. + + + + + + + +The boot manager &kdm; should use for offering boot options in the +shutdown dialog. + + + +None +no boot manager + + +Grub +Grub boot manager + + +Lilo +Lilo boot manager (Linux on i386 & x86-64 only) + + +The default is None. + + + + + + + + +The [X-*-Core] section class of &kdmrc; + + +This section class contains options concerning the configuration +of the &kdm; backend (core). + + + + + + + + +See . + +The default is 15. + + + + + + + +See . + +The default is 120. + + + + + + + +These options control the behavior of &kdm; when attempting to open a +connection to an &X-Server;. is the length +of the pause (in seconds) between successive attempts, + is the number of attempts to make and + is the amount of time to spend on a +connection attempt. After attempts have been +made, or if seconds elapse in any particular +connection attempt, the start attempt is considered failed. + +The default is 5. + + + + + + + +How many times &kdm; should attempt to start a foreign +display listed in before giving up +and disabling it. +Local displays are attempted only once, and &XDMCP; displays are retried +indefinitely by the client (unless the option +was given to the &X-Server;). + +The default is 4. + + + + + + + +How many times &kdm; should attempt to start up a local &X-Server;. +Starting up includes executing it and waiting for it to come up. + +The default is 1. + + + + + + + +How many seconds &kdm; should wait for a local &X-Server; to come up. + +The default is 15. + + + + + + + +The command line to start the &X-Server;, without display number and VT spec. +This string is subject to word splitting. + +The default is something reasonable for the system on which &kdm; was built, +like /usr/X11R6/bin/X. + + + + + + + + +Additional arguments for the &X-Server;s for local sessions. +This string is subject to word splitting. + +Empty by default. + + + + + + + +Additional arguments for the &X-Server;s for remote sessions. +This string is subject to word splitting. + +Empty by default. + + + + + + + +The VT the &X-Server; should run on. + should be used instead of this option. +Leave it zero to let &kdm; assign a VT automatically. +Set it to -1 to avoid assigning a VT +alltogether - this is required for setups with multiple physical consoles. +Currently Linux only. + + + + + + + + +This option is for OSs without support for +VTs, either by &kdm; or the OS itself. +Currently this applies to all OSs but Linux. + +When &kdm; switches to console mode, it starts monitoring this +TTY line (specified without the leading +/dev/) for activity. If the line is not used for some time, +&kdm; switches back to the X login. + +Empty by default. + + + + + + + +See . + +The default is 5. + + + + + + + +To discover when remote displays disappear, &kdm; +regularly pings them. + specifies the time (in minutes) between the +pings and specifies the maximum amount of +time (in minutes) to wait for the terminal to respond to the request. If +the terminal does not respond, the session is declared dead and terminated. + +If you frequently use X terminals which can become isolated from +the managing host, you may wish to increase the timeout. The only worry +is that sessions will continue to exist after the terminal has been +accidentally disabled. + +The default is 5. + + + + + + + +Whether &kdm; should restart the local &X-Server; after session exit instead +of resetting it. Use this if the &X-Server; leaks memory or crashes the system +on reset attempts. + +The default is false. + + + + + + + +The signal number to use to reset the local &X-Server;. + +The default is 1 (SIGHUP). + + + + + + + +The signal number to use to terminate the local &X-Server;. + +The default is 15 (SIGTERM). + + + + + + + +Controls whether &kdm; generates and uses authorization for +local &X-Server; connections. +For &XDMCP; displays the authorization requested by the display is used; +foreign non-&XDMCP; displays do not support authorization at all. + +The default is true. + + + + + + + +If is true, use the authorization mechanisms +listed herein. The MIT-MAGIC-COOKIE-1 authorization is always available; +XDM-AUTHORIZATION-1, SUN-DES-1 and MIT-KERBEROS-5 might be available as well, +depending on the build configuration. + +The default is DEF_AUTH_NAME. + + + + + + + +Some old &X-Server;s re-read the authorization file +at &X-Server; reset time, instead of when checking the initial connection. +As &kdm; generates the authorization information just before connecting to +the display, an old &X-Server; would not get up-to-date authorization +information. This option causes &kdm; to send SIGHUP to the &X-Server; +after setting up the file, causing an additional &X-Server; reset to occur, +during which time the new authorization information will be read. + +The default is false. + + + + + + + +This file is used to communicate the authorization data from &kdm; to +the &X-Server;, using the &X-Server; command line +option. It should be kept in a directory which is not world-writable +as it could easily be removed, disabling the authorization mechanism in +the &X-Server;. If not specified, a random name is generated from + and the name of the display. + +Empty by default. + + + + + + + +This option specifies the name of the file to be loaded by +xrdb as the resource database onto the root window +of screen 0 of the display. KDE programs generally do not use +X-resources, so this option is only needed if the +program needs some X-resources. + +Empty by default. + + + + + + + +The xrdb program to use to read the X-resources file +specified in . +The command is subject to word splitting. + +The default is ${x_bindir}/xrdb. + + + + + + + +This string is subject to word splitting. +It specifies a program which is run (as +root) before offering the +greeter window. This may be used to change the appearance of the screen +around the greeter window or to put up other windows (e.g., you may want +to run xconsole here). +The conventional name for a program used here is Xsetup. +See . + +Empty by default. + + + + + + + +This string is subject to word splitting. +It specifies a program which is run (as +root) after the user +authentication process succeeds. +The conventional name for a program used here is Xstartup. +See . + +Empty by default. + + + + + + + +This string is subject to word splitting. +It specifies a program which is run (as +root) after the session +terminates. +The conventional name for a program used here is Xreset. +See . + +Empty by default. + + + + + + + +This string is subject to word splitting. +It specifies the session program to be executed (as the user owning +the session). +The conventional name for a program used here is Xsession. +See . + +The default is ${x_bindir}/xterm -ls -T. + + + + + + + +If the program fails to execute, &kdm; will +fall back to this program. This program is executed with no arguments, +but executes using the same environment variables as the session would +have had (see ). + +The default is ${x_bindir}/xterm. + + + + + + + +The PATH environment variable for +non-root s. + +The default depends on the system &kdm; was built on. + + + + + + + + +The PATH environment variable for all programs but +non-root +s. Note that it is good practice not to include +. (the current directory) into this entry. + +The default depends on the system &kdm; was built on. + + + + + + + + +The SHELL environment variable for all programs but the +. + +The default is /bin/sh. + + + + + + + +When &kdm; is unable to write to the usual user authorization file +($HOME/.Xauthority), it creates a unique file name in this +directory and points the environment variable XAUTHORITY +at the created file. + +The default is /tmp. + + + + + + + +If enabled, &kdm; will automatically restart a session after an &X-Server; +crash (or if it is killed by Alt-Ctrl-BackSpace). Note that enabling this +feature opens a security hole: a secured display lock can be circumvented +(unless &kde;'s built-in screen locker is used). + +The default is false. + + + + + + + +If disabled, do not allow root +(and any other user with UID = 0) to log in directly. + +The default is true. + + + + + + + +If disabled, only users that have passwords assigned can log in. + +The default is true. + + + + + + + +Who is allowed to shut down the system. This applies both to the +greeter and to the command FiFo. + + + +None +no Shutdown... menu entry is shown at all + + +Root +the root password must be entered to shut down + + +All +everybody can shut down the machine + + +The default is All. + + + + + + + +Who is allowed to abort active sessions when shutting down. + + + +None +no forced shutdown is allowed at all + + +Root +the root password must be entered to shut down forcibly + + +All +everybody can shut down the machine forcibly + + +The default is All. + + + + + + + +The default choice for the shutdown condition/timing. + + + +Schedule +shut down after all active sessions exit (possibly at once) + + +TryNow +shut down, if no active sessions are open; otherwise, do nothing + + +ForceNow +shut down unconditionally + + +The default is Schedule. + + + + + + + +How to offer shutdown scheduling options: + + + +Never +not at all + + +Optional +as a button in the simple shutdown dialogs + + +Always +instead of the simple shutdown dialogs + + +The default is Never. + + + + + + + +Enable password-less logins on this display. Use with extreme care! + +The default is false. + + + + + + + +The users that do not need to provide a password to log in. +Items which are prefixed with @ represent all users in the +user group named by that item. +* means all users but +root +(and any other user with UID = 0). +Never list root. + +Empty by default. + + + + + + + +Enable automatic login. Use with extreme care! + +The default is false. + + + + + + + +If true, auto-login after logout. If false, auto-login is performed only +when a display session starts up. + +The default is false. + + + + + + + +The delay in seconds before automatic login kicks in. This is also known as +Timed Login. + + + + + + + + +The user to log in automatically. Never specify root! + +Empty by default. + + + + + + + +The password for the user to log in automatically. This is not required +unless the user is logged into a NIS or Kerberos domain. If you use this +option, you should chmod  kdmrc for obvious reasons. + +Empty by default. + + + + + + + +Immediately lock the automatically started session. This works only with +KDE sessions. + +The default is false. + + + + + + + +A list of directories containing session type definitions. + +The default is ${kde_datadir}/kdm/sessions. + + + + + + + +The file (relative to the user's home directory) to redirect the session +output to. One occurrence of %s in this string will be +substituted with the display name. Use %% to obtain a +literal %. + +The default is .xsession-errors. + + + + + + + +Specify whether &kdm;'s built-in utmp/wtmp/lastlog registration should +be used. If it is not, the tool sessreg should be used +in the and scripts, or, +alternatively, the pam_lastlog module should be used on +PAM-enabled systems. + +The default is true. + + + + + + + + +The [X-*-Greeter] section class of &kdmrc; + + +This section class contains options concerning the configuration +of the &kdm; frontend (greeter). + + + + + + + + +Specify the widget style for the greeter. Empty means to use the +built-in default which currently is Plastik. + +Empty by default. + + + + + + + +Specify the widget color scheme for the greeter. Empty means to use +the built-in default which currently is yellowish grey with some light +blue and yellow elements. + +Empty by default. + + + + + + + +What should be shown in the greeter righthand of the input lines (if + is disabled) or above them (if + is enabled): + + + +None +nothing + + +Logo +the image specified by + + +Clock +a neat analog clock + + +The default is Clock. + + + + + + + +The image to show in the greeter if is +Logo. + +Empty by default. + + + + + + + +The relative coordinates (percentages of the screen size; X,Y) at which +the center of the greeter is put. &kdm; aligns the greeter to the edges +of the screen it would cross otherwise. + +The default is 50,50. + + + + + + + +The screen the greeter should be displayed on in multi-headed and Xinerama +setups. The numbering starts with 0. For Xinerama, it corresponds to the +listing order in the active ServerLayout section of XF86Config; -1 means +to use the upper-left screen, -2 means to use the upper-right screen. + + + + + + + + +The headline in the greeter. An empty greeting means none at all. + +The following character pairs are replaced by their value: + + +%d +name of the current display + + +%h +local host name, possibly with the + domain name + + +%n +local node name, most probably the host name without the + domain name + + +%s +operating system + + +%r +operating system version + + +%m +machine (hardware) type + + +%% +a single % + + + +The default is Welcome to %s at %n. + + + + + + + +Whether the fonts used in the greeter should be antialiased. + +The default is false. + + + + + + + +The font for the greeter headline. + +The default is Serif,20,bold. + + + + + + + +The normal font used in the greeter. + +The default is Sans Serif,10. + + + + + + + +The font used for the Login Failed message. + +The default is Sans Serif,10,bold. + + + + + + + +What to do with the Num Lock modifier for the time the greeter is running: + + + +Off +turn off + + +On +turn on + + +Keep +do not change the state + + +The default is Keep. + + + + + + + +Language and locale to use in the greeter, encoded like $LC_LANG. + +The default is en_US. + + + + + + + +Enable autocompletion in the username line edit. + +The default is false. + + + + + + + +Show a user list with unix login names, real names, and images in the greeter. + +The default is true. + + + + + + + +This option controls which users will be shown in the user view +() and/or offered for autocompletion +(). +If it is Selected, contains +the final list of users. +If it is NotHidden, the initial user list contains all users +found on the system. Users contained in are +removed from the list, just like all users with a UID greater than specified +in and users with a non-zero UID less than +specified in . +Items in and +which are prefixed with @ represent all users in the +user group named by that item. +Finally, the user list will be sorted alphabetically, if + is enabled. + +The default is NotHidden. + + + + + + + +See . + +Empty by default. + + + + + + + +See . + +Empty by default. + + + + + + + +See . + + + + + + + + +See . + +The default is 65535. + + + + + + + +See . + +The default is true. + + + + + + + +If is enabled, this specifies where &kdm; gets the +images from: + + + +AdminOnly +from <>/$USER.face[.icon] + + +PreferAdmin +prefer <>, fallback on $HOME + + +PreferUser +... and the other way round + + +UserOnly +from the user's $HOME/.face[.icon] + + + + +The images can be in any format Qt recognizes, but the filename +must match &kdm;'s expectations: .face.icon should be a +48x48 icon, while .face should be a 300x300 image. +Currently the big image is used only as a fallback and is scaled down, +but in the future it might be displayed full-size in the logo area or a +tooltip. + +The default is AdminOnly. + + + + + + + +See . + +The default is ${kde_datadir}/kdm/faces. + + + + + + + +Specify, if/which user should be preselected for log in: + + + +None +do not preselect any user + + +Previous +the user which successfully logged in last time + + +Default +the user specified in the option + + + + +If is enabled and a user was preselected, +the cursor is placed in the password input field automatically. + +Enabling user preselection can be considered a security hole, +as it presents a valid login name to a potential attacker, so he +only needs to guess the password. On the other hand, +one could set to a fake login name. + + +The default is None. + + + + + + + +See . + +Empty by default. + + + + + + + +See . + +The default is false. + + + + + + + +The password input fields cloak the typed in text. Specify, how to do it: + + + +OneStar +* is shown for every typed +character + + +ThreeStars +*** is shown for every typed +character + + +NoEcho +nothing is shown at all, the cursor does not move + + +The default is OneStar. + + + + + + + +If enabled, &kdm; will automatically start the krootimage +program to set up the background; otherwise, the +program is responsible for the background. + +The default is true. + + + + + + + +The configuration file to be used by krootimage. +It contains a section named [Desktop0] like +kdesktoprc does. Its options are not described +herein; guess their meanings or use the control center. + +The default is ${kde_confdir}/kdm/backgroundrc. + + + + + + + +To improve security, the greeter grabs the &X-Server; and then the keyboard +when it starts up. This option specifies if the &X-Server; grab should be held +for the duration of the name/password reading. When disabled, the &X-Server; +is ungrabbed after the keyboard grab succeeds; otherwise, the &X-Server; is +grabbed until just before the session begins. + +Enabling this option disables and +. + + +The default is false. + + + + + + + +This option specifies the maximum time &kdm; will wait for the grabs to +succeed. A grab may fail if some other X-client has the &X-Server; or the +keyboard grabbed, or possibly if the network latencies are very high. You +should be cautious when raising the timeout, as a user can be spoofed by +a look-alike window on the display. If a grab fails, &kdm; kills and +restarts the &X-Server; (if possible) and the session. + +The default is 3. + + + + + + + +Warn, if a display has no X-authorization. This will be the case if + + + the authorization file for a local &X-Server; could not be created, + + + a remote display from &XDMCP; did not request any authorization or + + + the display is a foreign display specified in + . + + + +The default is true. + + + + + + + +Specify whether the greeter of local displays should start up in host chooser +(remote) or login (local) mode and whether it is allowed to switch to the +other mode. + + + +LocalOnly +only local login possible + + +DefaultLocal +start up in local mode, but allow switching to remote mode + + +DefaultRemote +... and the other way round + + +RemoteOnly +only choice of remote host possible + + +The default is LocalOnly. + + + + + + + +A list of hosts to be automatically added to the remote login menu. +The special name * means broadcast. +Has no effect if is LocalOnly. + +The default is *. + + + + + + + +Use this number as a random seed when forging saved session types, etc. of +unknown users. This is used to avoid telling an attacker about existing users +by reverse conclusion. This value should be random but constant across the +login domain. + + + + + + + + +Enable &kdm;'s built-in xconsole. +Note that this can be enabled for only one display at a time. +This option is available only if &kdm; was configured +with . + +The default is false. + + + + + + + +The data source for &kdm;'s built-in xconsole. +If empty, a console log redirection is requested from +/dev/console. +Has no effect if is disabled. + +Empty by default. + + + + + + + +Specify conversation plugins for the login dialog; the first in the list +is selected initially. +Each plugin can be specified as a base name (which expands to +$kde_modulesdir/kgreet_base) +or as a full pathname. + +Conversation plugins are modules for the greeter which obtain authentication +data from the user. Currently only the classic plugin is +shipped with &kde;; it presents the well-known username and password form. + +The default is classic. + + + + + + + +Same as , but for the shutdown dialog. + +The default is classic. + + + + + + + +A list of options of the form +Key=Value. +The conversation plugins can query these settings; it is up to them what +possible keys are. + +Empty by default. + + + + + + + +Show the Console Login action in the greeter (if / +is configured). + +The default is true. + + + + + + + +Show the Restart X Server/Close Connection action in the greeter. + +The default is true. + + + + + + + +A program to run while the greeter is visible. It is supposed to preload +as much as possible of the session that is going to be started (most +probably). + +Empty by default. + + + + + + + +Whether the greeter should be themed. + +The default is false. + + + + + + + +The theme to use for the greeter. Can point to either a directory or an XML +file. + +Empty by default. + + + + + + + + + + + +Specifying permanent &X-Server;s + +Each entry in the list indicates a +display which should constantly be +managed and which is not using &XDMCP;. This method is typically used only for +local &X-Server;s that are started by &kdm;, but &kdm; can manage externally +started (foreign) &X-Server;s as well, may they run on the +local machine or rather remotely. + +The formal syntax of a specification is + +display name [_display class] + +for all &X-Server;s. Foreign displays differ in having +a host name in the display name, may it be localhost. + +The display name must be something that can +be passed in the option to an X program. This string +is used to generate the display-specific section names, so be careful to match +the names. +The display name of &XDMCP; displays is derived from the display's address by +reverse host name resolution. For configuration purposes, the +localhost prefix from locally running &XDMCP; displays is +not stripped to make them distinguishable from local +&X-Server;s started by &kdm;. + +The display class portion is also used in the +display-specific sections. This is useful if you have a large collection of +similar displays (such as a corral of X terminals) and would like to set +options for groups of them. +When using &XDMCP;, the display is required to specify the display class, +so the manual for your particular X terminal should document the display +class string for your device. If it does not, you can run &kdm; in debug +mode and grep the log for class. + +The displays specified in will not be +started when &kdm; starts up, but when it is explicitly requested via +the command socket (or FiFo). +If reserve displays are specified, the &kde; menu will have a +Start New Session item near the bottom; use that to +activate a reserve display with a new login session. The monitor will switch +to the new display, and you will have a minute to login. If there are no more +reserve displays available, the menu item will be disabled. + +When &kdm; starts a session, it sets up authorization data for the +&X-Server;. For local servers, &kdm; passes + filename +on the &X-Server;'s command line to point it at its authorization data. +For &XDMCP; displays, &kdm; passes the authorization data to the &X-Server; +via the Accept &XDMCP; message. + + + + +&XDMCP; access control + +The file specified by the option provides +information which &kdm; uses to control access from displays requesting service +via &XDMCP;. +The file contains four types of entries: entries which control the response +to Direct and Broadcast queries, entries which +control the response to Indirect queries, macro definitions for +Indirect entries, and entries which control on which network +interfaces &kdm; listens for &XDMCP; queries. +Blank lines are ignored, # is treated as a comment +delimiter causing the rest of that line to be ignored, and \ +causes an immediately following newline to be ignored, allowing indirect host +lists to span multiple lines. + + +The format of the Direct entries is simple, either a +host name or a pattern, which is compared against the host name of the display +device. +Patterns are distinguished from host names by the inclusion of one or more +meta characters; * matches any sequence of 0 or more +characters, and ? matches any single character. +If the entry is a host name, all comparisons are done using network addresses, +so any name which converts to the correct network address may be used. Note +that only the first network address returned for a host name is used. +For patterns, only canonical host names are used in the comparison, so ensure +that you do not attempt to match aliases. +Host names from &XDMCP; queries always contain the local domain name +even if the reverse lookup returns a short name, so you can use +patterns for the local domain. +Preceding the entry with a ! character causes hosts which +match that entry to be excluded. +To only respond to Direct queries for a host or pattern, +it can be followed by the optional NOBROADCAST keyword. +This can be used to prevent a &kdm; server from appearing on menus based on +Broadcast queries. + +An Indirect entry also contains a host name or pattern, +but follows it with a list of host names or macros to which the queries +should be forwarded. Indirect entries can be excluding as well, +in which case a (valid) dummy host name must be supplied to make the entry +distinguishable from a Direct entry. +If compiled with IPv6 support, multicast address groups may also be included +in the list of addresses the queries are forwarded to. + +If the indirect host list contains the keyword CHOOSER, +Indirect queries are not forwarded, but instead a host chooser +dialog is displayed by &kdm;. The chooser will send a Direct +query to each of the remaining host names in the list and offer a menu of +all the hosts that respond. The host list may contain the keyword +BROADCAST, to make the chooser send a +Broadcast query as well; note that on some operating systems, +UDP packets cannot be broadcast, so this feature will not work. + + +When checking access for a particular display host, each entry is scanned +in turn and the first matching entry determines the response. +Direct and Broadcast entries are ignored when +scanning for an Indirect entry and vice-versa. + +A macro definition contains a macro name and a list of host names and +other macros that the macro expands to. To distinguish macros from hostnames, +macro names start with a % character. + +The last entry type is the LISTEN directive. +The formal syntax is + + LISTEN [interface [multicast list]] + +If one or more LISTEN lines are specified, &kdm; listens +for &XDMCP; requests only on the specified interfaces. +interface may be a hostname or IP address +representing a network interface on this machine, or the wildcard +* to represent all available network interfaces. +If multicast group addresses are listed on a LISTEN line, +&kdm; joins the multicast groups on the given interface. For IPv6 multicasts, +the IANA has assigned ff0X:0:0:0:0:0:0:12b as the +permanently assigned range of multicast addresses for &XDMCP;. The +X in the prefix may be replaced by any valid scope +identifier, such as 1 for Node-Local, 2 for Link-Local, 5 for Site-Local, and +so on (see IETF RFC 2373 or its replacement for further details and scope +definitions). &kdm; defaults to listening on the Link-Local scope address +ff02:0:0:0:0:0:0:12b to most closely match the IPv4 subnet broadcast behavior. +If no LISTEN lines are given, &kdm; listens on all +interfaces and joins the default &XDMCP; IPv6 multicast group (when +compiled with IPv6 support). +To disable listening for &XDMCP; requests altogether, a +LISTEN line with no addresses may be specified, but using +the [Xdmcp] option is preferred. + + + + + +Supplementary programs + + +The following programs are run by &kdm; at various stages of a session. +They typically are shell scripts. + + + +The Setup, Startup and Reset programs are run as +root, so they should be careful +about security. +Their first argument is auto if the session results +from an automatic login; otherwise, no arguments are passed to them. + + + +Setup program + + +The Xsetup program is run after the &X-Server; is +started or reset, but before the greeter is offered. +This is the place to change the root background (if + is disabled) or bring up other windows that +should appear on the screen along with the greeter. + + + +In addition to any specified by , +the following environment variables are passed: + + + DISPLAY + the associated display name + + + PATH + the value of + + + SHELL + the value of + + + XAUTHORITY + may be set to an authority file + + + DM_CONTROL + the value of + + + + Note that since &kdm; grabs the keyboard, any other windows will not be +able to receive keyboard input. They will be able to interact with the mouse, +however; beware of potential security holes here. If +is set, Xsetup will not be able to connect to the display +at all. Resources for this program can be put into the file named by +. + + + + + +Startup program + +The Xstartup program is run as +root when the user logs in. +This is the place to put commands which add entries to +utmp (the sessreg program +may be useful here), mount users' home directories from file servers, +or abort the session if some requirements are not met (but note that on +modern systems, many of these tasks are already taken care of by +PAM modules). + +In addition to any specified by , +the following environment variables are passed: + + + DISPLAY + the associated display name + + + HOME + the initial working directory of the user + + + LOGNAME + the username + + + USER + the username + + + PATH + the value of + + + SHELL + the value of + + + XAUTHORITY + may be set to an authority file + + + DM_CONTROL + the value of + + + +&kdm; waits until this program exits before starting the user session. +If the exit value of this program is non-zero, &kdm; discontinues the session +and starts another authentication cycle. + + + + +Session program + +The Xsession program is the command which is run +as the user's session. It is run with the permissions of the authorized user. +One of the keywords failsafe, default +or custom, or a string to eval by a +Bourne-compatible shell is passed as the first argument. + +In addition to any specified by , +the following environment variables are passed: + + + DISPLAY + the associated display name + + + HOME + the initial working directory of the user + + + LOGNAME + the username + + + USER + the username + + + PATH + the value of + (or for + root user sessions) + + + + SHELL + the user's default shell + + + XAUTHORITY + may be set to a non-standard authority file + + + KRBTKFILE + may be set to a Kerberos4 credentials cache name + + + + KRB5CCNAME + may be set to a Kerberos5 credentials cache name + + + + DM_CONTROL + the value of + + + XDM_MANAGED + will contain a comma-separated list of parameters the + session might find interesting, like the location of the command + FiFo and its capabilities, and which conversation + plugin was used for the login + + + + DESKTOP_SESSION + the name of the session the user has chosen to run + + + + + + + +Reset program + +Symmetrical with Xstartup, the +Xreset program is run after the user session has +terminated. Run as root, it should +contain commands that undo the effects of commands in +Xstartup, removing entries from utmp +or unmounting directories from file servers. + +The environment variables that were passed to +Xstartup are also passed to Xreset. + + + + + + + diff --git a/doc/kfind/Makefile.am b/doc/kfind/Makefile.am new file mode 100644 index 000000000..da8216ae4 --- /dev/null +++ b/doc/kfind/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/doc/kfind/index.docbook b/doc/kfind/index.docbook new file mode 100644 index 000000000..ecfa5921d --- /dev/null +++ b/doc/kfind/index.docbook @@ -0,0 +1,363 @@ + + + + + +]> + + + + +The &kfind; Handbook + + +&Dirk.Doerflinger; &Dirk.Doerflinger.mail; + + + + + + +2001 +&Dirk.Doerflinger; + + +&FDLNotice; + +2004-04-11 +1.20.01 + + + +&kfind; is &kde;'s file find utility. + + + + +KDE +kdeutils +kfind +find +search + + + + +Introduction + + +&kfind; is the &kde; file find utility. + + + +Launching &kfind; + + +The Find Files tool is a useful method of searching for specific files on your +computer, or for searching for files that match a pattern. An example of +this could include searching for files of a particular type or with certain +letters in the filename. + +You can load this utility by clicking on Find Files. This will +launch &kfind;. + + + + + + +Finding Files + + +The Name/Location Tab + + +When starting &kfind;, you will see a quite simple window. Type in the +name of the file you are searching in the textbox labeled +Named:. Choose a folder where you want to search +by typing it in the field Look in: +or by clicking Browse... and press +Enter or click Find. If +Include subfolders is checked all +subfolders starting from your chosen folder will be searched +too. The results will be displayed in the box below. + + + +You can use the following wildcards: + + + + +The Asterisk * + + +The asterisk stands for any number of missing characters (even zero), +that means ⪚ searching for marc* may find the +files marc, marc.png and + marc_must_not_read_this.kwd. +mar*.kwd may find +marketplace.kwd and +marc_must_not_read_this.kwd. + + + + + +The Question Mark ? + + +In contrast to the asterisk, the question mark stands for exactly one +character, so mar? will find +marc, but marc? will not find +anything, as our files are called marc and +marc.png. You can put as many question marks in the +term as you want, it will find exactly that number of characters. + + + + + + + +Of course you can combine those two wildcard symbols in a search term. + + + + + +The Contents Tab + + + +File type + + +Here you can specify the type of file you are searching for. + + + + + +Containing text + + +Type in the word or phrase the files you are searching for must +contain. Note: If you do this in a large folder or checked +Include subfolders in the +Name/Location tab, this may take a long time. + + + +This option will not work for all files listed +under File type. Only the following file types +are supported: + + +Text files, ⪚ source code and README files +KWord >= 1.2 +KPresenter >= 1.2 +KSpread >= 1.2 +OpenOffice.org Writer +OpenOffice.org Impress +OpenOffice.org Calc + + + + + + + + + +Case sensitive + + +If you enable this option, &kfind; will +only find files with the exact case matching, ⪚ +MARC will only match +MARC, not Marc. + + + + + +Regular expression +If you have installed the &kregexpeditor; tool from +the kdeutils package, you will have this additional option. Enabling +it will allow you to search for a regexp or +regular expression. A regexp is a way to specify conditions for your +search, and they can be very complex, and equally they can be very +powerful. If you are unfamiliar with regular expressions, you can +choose Edit Regular Expression to open +&kregexpeditor;. This tool allows you to construct your set of +conditions graphically, and then generates the expression for +you. + +&kregexpeditor; is a very useful tool, and can be used from within +many &kde; applications other than &kfind;. You can find more +information from within its own help file. + + + + + + + + + + +The Properties Tab + + +Here you can refine your search. These are the special refinements +you can choose: + + + + + +Find all files created or modified + + +Here you can either enter two dates, between which the +files were created or modified, or specify a time period. + + + + + +File size is + +Here you can specify if the file has to be at least or as most as +big as the size you entered in the following box. + + + + + +Files owned by user, Files owned by group + +Here you can specify user and group names. + + + + + + + + + + + + +Credits and License + + +&kfind; + + + +Program copyright: + + + +Developers + +Martin Hartig + + + +Stephan Kulow coolo@kde.org + + + +Mario Weilguni mweilguni@sime.com + + + +Alex Zepeda jazepeda@pacbell.net + + + +Miroslav Flídr flidr@kky.zcu.cz + + + +Harri Porten porten@kde.org + + + +Dima Rogozin dima@mercury.co.il + + + +Carsten Pfeiffer pfeiffer@kde.org + + + +Hans Petter Bieker bieker@kde.org + + + +Waldo Bastian bastian@kde.org + + + + + +Documentation copyright 2001 &Dirk.Doerflinger; +&Dirk.Doerflinger.mail; + + + +&underFDL; +&underBSDLicense; + + + + +Installation + + +How to obtain &kfind; + +&install.intro.documentation; + + + + +Requirements + + +In order to successfully use &kfind;, you need &kde; 3.x. + + + + + +Compilation and Installation + +&install.compile.documentation; + + + + + +&documentation.index; + + + + diff --git a/doc/kfind/man-kfind.1.docbook b/doc/kfind/man-kfind.1.docbook new file mode 100644 index 000000000..bab220749 --- /dev/null +++ b/doc/kfind/man-kfind.1.docbook @@ -0,0 +1,79 @@ + + +]> + + + +KDE User's Manual +&Lauri.Watts; &Lauri.Watts.mail; +June 07, 2005 +K Desktop Environment + + + +kfind +1 + + + +kfind +file find utility for &kde; + + + + +kfind + +KDE Generic Options +Qt Generic Options + + + + +Description +The Find Files tool is a useful method of searching for specific files +on your computer, or for searching for files that match a pattern. An +example of this could include searching for files of a particular type or +with certain letters in the filename, or that contain a certain piece of +text in their contents. +&kfind; is a graphical tool, and not normally run from the command +line. + + + + +Options + + + +You may optionally supply a colon separated path to prefill +the dialog. You might use this ability to set up different icons on your +panel or desktop to quickly run searches in different locations. + + + + +App options, in a variablelist + + + + +See Also +More detailed user documentation is available from help:/kfind +(either enter this URL into &konqueror;, or run +khelpcenter +help:/kfind). + + + +Authors +The current maintainer of &kfind; is . A list of +previous contributors is available in the complete user manual available in +khelpcenter. +This documentation was prepared by &Lauri.Watts; +&Lauri.Watts.mail; + + + diff --git a/doc/khelpcenter/Makefile.am b/doc/khelpcenter/Makefile.am new file mode 100644 index 000000000..251280f85 --- /dev/null +++ b/doc/khelpcenter/Makefile.am @@ -0,0 +1,6 @@ + +SUBDIRS = $(AUTODIRS) + +KDE_LANG= en +KDE_DOCS = AUTO + diff --git a/doc/khelpcenter/background.png b/doc/khelpcenter/background.png new file mode 100644 index 000000000..2dda48e23 Binary files /dev/null and b/doc/khelpcenter/background.png differ diff --git a/doc/khelpcenter/bgtable.png b/doc/khelpcenter/bgtable.png new file mode 100644 index 000000000..b52f2e6f2 Binary files /dev/null and b/doc/khelpcenter/bgtable.png differ diff --git a/doc/khelpcenter/contact.docbook b/doc/khelpcenter/contact.docbook new file mode 100644 index 000000000..0c6609186 --- /dev/null +++ b/doc/khelpcenter/contact.docbook @@ -0,0 +1,138 @@ + + +2002-10-29 +3.5.5 + +Contact the &kde; team + + + +Mailing lists + + &kde; has several mailing lists up. See below for some of the +most useful. Older articles can be found in the mailing list archive. + + + + +kde +For general discussion, users helping each other. + + + +kde-announce +Announcements of new &kde; applications + + + +kde-devel +For developers. + + + +kde-artists +Creating icons and other artwork + + + +kde-doc-english +For people interested in writing documentation for &kde;. + + + +kde-i18n-doc +Internationalization and documentation issues + + + +http://l10n.kde.org/teams/ +For localized information, which may include user +email lists and websites, check the translation teams page at the +above &URL;. + + + + + + + +Contacting the &kde; developers + +On this page, you can find links to &kde; related web sites. + +The K Desktop Environment is developed by a large group of people +around the world. Our main communication channel is the Internet. For +general questions, you will be best served by asking on the mailing +lists mentioned in the previous +section, and contact addresses for individual developers can be +found in the documentation of their individual application. + +Please visit our Official +Representatives page for official enquiries regarding &kde; +(⪚ interviews). + +More information about &kde; is available at &kde-http;. + +Other &kde; websites include: + + + +www.kde.org +&kde;'s official website + + + +developer.kde.org +The &kde; developers center + + + +websvn.kde.org +A web interface to the &kde; Subversion repository + + + +l10n.kde.org +&kde;'s internationalization and documentation server + + + +ftp.kde.org +The main &kde; &FTP; server. Please have a look at the link +below to find a mirror site in your geographic region. + + + +www.kde.org/mirrors +&kde; web and &FTP; mirror sites + + + +www.kde-apps.org +A directory of &kde; applications. + + + +www.kde-look.org +&kde; themes, icons, and other items to change the +look of your desktop. + + + + + + + diff --git a/doc/khelpcenter/help.docbook b/doc/khelpcenter/help.docbook new file mode 100644 index 000000000..98536e1f5 --- /dev/null +++ b/doc/khelpcenter/help.docbook @@ -0,0 +1,740 @@ + + +2002-02-03 +0.08.00 + +&kde; Help System User Manual + + + +&kde; Help System + +The &kde; help system is designed to make accessing the common +&UNIX; help systems (man and +info) simple, as well as the native &kde; +documentation (&XML;). + + + All base &kde; applications come fully documented, thanks to +the efforts of the Documentation team. If you would like to help, +please write to the Documentation coordinator, Lauri Watts, at +lauri@kde.org for information. No experience is +required, just enthusiasm and patience. + + + +If you would like to help translating &kde; documentation to your native +language, the Translation coordinator is Thomas Diehl, +thd@kde.org, and he would also welcome the help. More +information, including the coordinators for each language team, can be +found on the Internationalization web +site, and in the Contact section +of this document. + + + +Installation + + +&khelpcenter; is an integral part of the &kde; Base installation, and +is installed with every copy of &kde;. It can be found in the kdebase +package, and is available from the &kde-ftp;, or will be found in your +operating system kdebase package. + + + + + + +Invoking Help + + +&khelpcenter; can be called in several ways: + + + + +From the Help menu + + +The most common will probably be from within an application. Choose +Help +Contents to open that +application's help file, at the contents page. + + + + + +From the K menu + + +Choose the big K in your panel, and select +Help to open &khelpcenter;, starting at the +default welcome page. + + + + + +From the panel + + +By default, the &kicker; panel contains an icon to call &khelpcenter;. +Again, the default welcome page is displayed. + + + + + +From the command line + + +&khelpcenter; may be started using a &URL; to display a +file. &URL;s have been added for +info and man pages +also. You can use them as follows: + + + + +An application help file + + +khelpcenter + + + +Opens the &kedit; help file, at the contents page. + + + + + +A local &URL; + +khelpcenter + + + + + + +A Man page + + +khelpcenter + + + + + + +An Info page + + +khelpcenter + + + + + + + +Invoking khelpcenter with no parameters opens the +default welcome page. + + + + + + + + +The &khelpcenter; interface + + +The &khelpcenter; interface consists of two panes of information. + + + +The toolbar and menus are explained further in . + + + +Documents contain their own navigation tools, enabling you to move +either sequentially through a document, using +Next, Previous, and +Home links, or to move around in a less +structured manner, using hyperlinks. + + + +Links can take you to other parts of the same document, or to a +different document, and you can use the Back (Left +pointing arrow) or Forward (Right pointing arrow) +icons on the toolbar to move through the documents you have viewed in +this session. + + + +The two panes display the contents of the help system, and the help +files themselves, on the left and right respectively. + + + +The <guilabel>Contents</guilabel> pane + + +The Contents pane in &khelpcenter; is +displayed on the left hand side of the window. As you might expect, you +can move the splitter bar, to make sure you can comfortably read the +contents of either pane. + + + +The Contents pane is further divided into two +tabs, one containing a menu +showing all the help information &khelpcenter; is aware of, and the +other contains the &kde; glossary +of terms. + + + +The <guilabel>Contents</guilabel> Menu + + +The Contents contains the following default +entries: + + + + +Introduction +Welcome to &kde; - an introduction to the K Desktop +Environment. + + + +Introduction to &kde; + + +The &kde; Quickstart guide. Contains a tour of the &kde; +Interface and specific help and tips on how to work smarter with &kde;. + + + + + +&kde; User's manual + + +The &kde; User's manual is an in-depth exploration of &kde;, including +installation, configuration and customization, and use. + + + + + +Application manuals + + +Native &kde; application documentation. All &kde; applications have +documentation in &XML; format, which are converted to +HTML when you view them. This section lists all the +&kde; applications with a brief description and a link to the full +application documentation. + + +The applications are displayed in a tree structure that echoes the default +structure of the K menu, making it easy to find the +application you are looking for. + + + + + +&UNIX; manual pages + + +&UNIX; man pages are the traditional on-line documentation format for +&UNIX; systems. Most programs on your system will have a man page. In +addition, man pages exist for programming functions and file +formats. + + + + + +Browse info pages + + +TeXinfo documentation is used by many &GNU; applications, +including gcc (the C/C++ compiler), +emacs, and many others. + + + + + +Tutorials + + +Short, task based or informational tutorials. + + + + + +The &kde; FAQ + + +Frequently asked questions about &kde;, and their answers. + + + + + +&kde; on the web + + +Links to &kde; on the web, both the official &kde; website, and other +useful sites. + + + + + +Contact Information + + +Information on how to contact &kde; developers, and how to join the +&kde; mailing lists. + + + + + +Supporting &kde; + + +How to help, and how to get involved. + + + + + + + + + + + +The <application>Man</application> and <application>Info</application> +sections + +Man pages are the standard &UNIX; manual pages, and have been in +use for many years on many operating systems. They are extremely +thorough, and are the very best place to get information about most +&UNIX; commands and applications. When people say +RTFM, the Manual they are referring to is very often the +man page. + +The man pages are not perfect. They tend to be in depth, but +also extremely technical, often written by developers, and for +developers. In some cases this makes them somewhat unfriendly, if not +downright impossible for many users to understand. They are, however, +the best source of solid information on most command line +applications, and very often the only source. + +If you've ever wondered what the number is when people write +things like man(1) it means which section of the manual the item is +in. You will see &khelpcenter; uses the numbers to divide the very many +man pages into their own sections, making it easier for you to find +the information you're looking for, if you're just browsing. + +Also available are the Info pages, intended to be a replacement +for the man pages. The maintainer of some applications no longer +update the man pages, so if there is both a man page and an info page +available, the info page is probably the most recent. Most +applications have one or the other though. If the application you are +looking for help on is a &GNU; utility, you will most likely find it +has an info page, not a man page. + + +Navigating inside the <application>Info</application> pages + +Info documents are arranged hierarchically with each page called +a node. All info documents have a Top node, +&ie; the opening page. You can return to the +Top of an info document by pressing +Top. + +Prev & Next +are used to move to the previous/next page at the current level of the +hierarchy. + +Clicking on a menu item within a document moves you to a lower +level in the hierarchy. You may move up the hierarchy by pressing +Up. + +Man is treated similarly to info, with the section index being +the Top node and each man page on the level below. Man entries are +one page long. + + + + + +The &kde; glossary + + +The glossary provides a quick reference point, where you can look up +the definitions of words that may be unfamiliar to you. These range +from &kde; specific applications and technologies, through to general +&UNIX; computing terms. + + + +In the left hand pane you will see a tree view, with two choices: +Alphabetically or By topic. +Both contain the same entries, sorted differently, to allow you to +quickly find the item of interest. + + + +Navigate down the tree views to the left, and items you select will be +displayed on the right. + + + + + +The menus and toolbar + + +&khelpcenter; has a very minimal interface, allowing you to concentrate +on getting help rather than learning how to use the help browser. + + + +The icons available to you in the toolbar are as follows: + + + +Toolbar Icons + + + +Back + +Go to the previous page you viewed. + + + + +Forward + +Go forward one page. This icon is only active if you have +already used the Back icon. + + + +Print + + +Print the contents of the currently visible page. + + + + + +Find + + +Find a word or words within the currently visible page. + + + + + +Increase Font + + +Increase the size of the text in the viewer pane. + + + + + +Decrease Font + + +Decrease the size of the text in the viewer pane. This icon is only +enabled if you have previously enlarged the text. + + + + + + + +The menus contain the following entries: + + + + +File + + + + + + +File +Print... + + + + +Print the contents of the currently visible page. + + + + + + + + +&Ctrl;Q + +File +Quit + + + + +Close and exit &khelpcenter; + + + + + + + + +Edit + + + + + +&Ctrl;A +Edit +Select All + + + + +Select all the text in the current page. + + + + + + +&Ctrl;F +Edit +Find... + + + + +Find a word or words in the currently visible page. + + + + + + + + +View + + + + +View +View Document Source + + + + +View the HTML source of the page you are currently + viewing. + + + + + +View +Set Encoding + + + + +Change the encoding of the current page. Normally, the default setting +of Auto should be sufficient, but if you are +having problems viewing pages written in languages other than English, +you may need to choose a specific encoding in this menu. + + + + + + + + +Go +Back + +Go back to the previous page you were viewing. + + + + +Go +Forward + + +If you have previously moved back with the back icon or menu +entry, you can work your way forward again with this menu +entry. + + + + +Go +... + + +At the bottom of the Go menu, you will find a +history list, of the last few pages you have looked at. Selecting one +will take you directly back to that page. + + + + + + + +Credits and Licenses + +&khelpcenter; + +Originally developed by &Matthias.Elter; &Matthias.Elter.mail; +The current maintainer is &Cornelius.Schumacher; &Cornelius.Schumacher.mail; + +&underFDL; +&underGPL; + + + + diff --git a/doc/khelpcenter/index.docbook b/doc/khelpcenter/index.docbook new file mode 100644 index 000000000..b6997f7f3 --- /dev/null +++ b/doc/khelpcenter/index.docbook @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + +The &khelpcenter; + +The &kde; Team + + +2002-01-18 +3.00.00 + + +&kde; is a powerful graphical desktop environment for &UNIX; +workstations. A &kde; desktop combines ease of use, contemporary +functionality and outstanding graphical design with the technological +superiority of the &UNIX; operating system. + + + +KDE +kdebase +khelpcenter +kdehelp +help +help center +KDE help center + + + +&welcome; +&help; +&whatiskde; +&contact; +&support; + + + + + diff --git a/doc/khelpcenter/kdelogo2.png b/doc/khelpcenter/kdelogo2.png new file mode 100644 index 000000000..aa0ff56e8 Binary files /dev/null and b/doc/khelpcenter/kdelogo2.png differ diff --git a/doc/khelpcenter/khelpcenter.png b/doc/khelpcenter/khelpcenter.png new file mode 100644 index 000000000..e30c35825 Binary files /dev/null and b/doc/khelpcenter/khelpcenter.png differ diff --git a/doc/khelpcenter/konq.css b/doc/khelpcenter/konq.css new file mode 100644 index 000000000..ee75f658f --- /dev/null +++ b/doc/khelpcenter/konq.css @@ -0,0 +1,68 @@ +body {background-color: #3679AD; + color: #000000; + margin-left: 0; + margin-right: 0; + margin-top: 5; + padding: 0; + background-image: url(background.png); + background-repeat: no-repeat; + background-position: top-center;} + +.caption { + color: black; + font-family: sans-serif; + font-size: 23pt; + font-style: italic; + font-weight: bolder; + margin-left: 3pt; +} + +td.trans {background-image: url(bgtable.png); + background-repeat: no-repeat;} +td.end {background-image: url(lines2.png); + background-repeat: x-repeat;} +td.shadow1 {background-image: url(shadow1.png); + background-repeat: x-repeat;} + +table.vnice { font-family: sans-serif; + font-size: x-small;} + +a:link {background-color: transparent; + color: #191970; + text-decoration:none;} +a:visited {background-color: transparent; + color: #551a8a; + text-decoration:none;} +a:active {background-color: transparent; + color: #fe0000; + text-decoration:none;} +a:hover {background-color: transparent; + color: #1919aa; + text-decoration:underline;} + +tr.menurow {background-color: #505050; + color: #000000; + vertical-align: middle;} + +td.deco {color: #ffffff; + background-color: #505050; + font-family: sans-serif; + font-size: small;} + +td.menuactive {color: #ffcc00; + background-color: #777777; + font-family: sans-serif; + font-size: small;} + +td.menu {color: #ffffff; + background-color: #505050; + font-family: sans-serif; + font-size: small;} + +a.menu {color: #eeeeee; + font-family: sans-serif; + font-size: small;} + +a.menu:hover {color: #ffffff; + text-decoration:none;} + diff --git a/doc/khelpcenter/lines.png b/doc/khelpcenter/lines.png new file mode 100644 index 000000000..498330c38 Binary files /dev/null and b/doc/khelpcenter/lines.png differ diff --git a/doc/khelpcenter/lines2.png b/doc/khelpcenter/lines2.png new file mode 100644 index 000000000..02a8c05b5 Binary files /dev/null and b/doc/khelpcenter/lines2.png differ diff --git a/doc/khelpcenter/pointers.png b/doc/khelpcenter/pointers.png new file mode 100644 index 000000000..17bfb2eb8 Binary files /dev/null and b/doc/khelpcenter/pointers.png differ diff --git a/doc/khelpcenter/shadow1.png b/doc/khelpcenter/shadow1.png new file mode 100644 index 000000000..b57787697 Binary files /dev/null and b/doc/khelpcenter/shadow1.png differ diff --git a/doc/khelpcenter/support.docbook b/doc/khelpcenter/support.docbook new file mode 100644 index 000000000..9099aa392 --- /dev/null +++ b/doc/khelpcenter/support.docbook @@ -0,0 +1,102 @@ + + +2002-03-04 +2.02.00 + +Supporting &kde; + + + +Supporting &kde; + + If you are new to &kde;, the &kde; project might look like big +machinery to you. Undoubtedly, &kde; is no longer a small project, +nevertheless it is very important to realize that it is easy to +make a difference in the &kde; world. + + There is always a need for dedicated developers, graphic +artists, sound engineers, translators and documentation +writers. Consider jumping aboard this exciting international project +and make yourself a name in the software world. + + Along the way you will make countless friends and acquaintances +all over the world. Also, the satisfaction that stems from doing +actual hands-on work, that will benefit an uncountable number of users +world-wide, and from seeing an unparalleled project grow, is hard to +beat. Please consider joining and supporting &kde; and hop aboard this +exciting journey towards a free and open alternative computing +platform. + + + + +How to get started + + + + +Subscribe to the &kde; mailing lists +that interest you. + + + +Read the mailing list archives in +order to get a feel for &kde; development. + + + +Learn how to program using the &kde; application framework and join the +friendly &kde; developers' community. + + + + + + + +Supporting financially + + The &kde; team is working very hard on providing you with the +best desktop available for the &UNIX; operating system. &kde; is +available for free and will always be available for free, including +each and every line of its source code, for everyone to modify and +distribute. If you enjoy and use &kde; please consider supporting the +&kde; Project financially. &kde; is in constant need of funds in +order to finance its operations. + + If your busy schedule or skills do not permit you to be +actively involved in &kde; development, please consider supporting +&kde; financially by sending a donation to: + + You can send regular US checks to the following address: + + +K Desktop Environment e.V. +Mirko Boehm +2029 Chadds Ford Drive +Reston, VA 20191 +USA + + + Use "KDE e.V. - Mirko Boehm" in the "Pay to the order of..." line. + + + +From Europe, you may remit your donation to (be aware of a fee if wiring from outside of Germany): + + + +K Desktop Environment e.V. +Account-Nr. 0 66 64 46 +BLZ 200 700 24 +Deutsche Bank 24 + + + Please contact Mirko Boehm +kde-ev-treasurer@kde.org if you have any questions. + + Your contribution is very much appreciated. Thank you! + + + + diff --git a/doc/khelpcenter/welcome.docbook b/doc/khelpcenter/welcome.docbook new file mode 100644 index 000000000..6f1859311 --- /dev/null +++ b/doc/khelpcenter/welcome.docbook @@ -0,0 +1,60 @@ + + +2002-01-18 +3.00.00 + +Welcome to &kde; + + + The &kde; team welcomes you to user-friendly &UNIX; +computing. + + +Welcome to the K Desktop Environment + + +Information about &kde; + +&kde; is a powerful graphical desktop environment for &UNIX; +workstations. A &kde; desktop combines ease of use, contemporary +functionality and outstanding graphical design with the technological +superiority of the &UNIX; operating system. + +What is the K Desktop Environment? + +Contacting the &kde; Project + +Supporting the &kde; Project + +Useful links + + + + +Getting the most out of &kde; + + +General documentation + +A Quick Start Guide to the Desktop + +&kde; User's guide + +Frequently asked questions + + + + +Basic applications + +Desktop Panel + +Control Center + +File Manager + + + + + + diff --git a/doc/khelpcenter/whatiskde.docbook b/doc/khelpcenter/whatiskde.docbook new file mode 100644 index 000000000..d63213eee --- /dev/null +++ b/doc/khelpcenter/whatiskde.docbook @@ -0,0 +1,129 @@ + + +2002-01-18 +3.00.00 + +What is &kde;? + + + +What is &kde;? + +&kde; is a desktop environment. In other words, &kde; is a +collection of programs, technologies and documentation that attempt to +make life easier for computer users. &kde; is targeted at &UNIX; +workstations. It features network transparency and a contemporary work +philosophy. + +The creators of the K Desktop Environment are a world-wide group of +software engineers. This group's major goal in free software development is to +provide high quality software that empowers the user with easy control of his +computer's resources. + +&kde; seeks to fill the need for an easy to use desktop for +&UNIX; workstations, similar to the desktop environments found under +&MacOS; or &Windows; 95/NT. &kde; meets the requirement +of users for an easy to use work environment. Tools used to reach +this end are: enhanced inter-application communication, component +reuse, generalized drag and drop, uniform look and feel and many +more. Thus, &kde; offers much more than the traditional &UNIX; window +managers. + +Stability, scaleability and openness are qualities which have +made &UNIX; the undisputed choice for the information technology +professional for many years. &kde; builds on top of this excellent +base framework and brings new, much needed qualities: usability, user +friendliness and beauty! &kde; was the first, and stays the forefront +player in bringing these qualities to &UNIX;, which constituted for +years, the premier platform for server computers and scientific +institutions, but wasn't very attractive for desktop users. + +Without &UNIX; the Internet would not exist, or at least would +have a vastly different form. &UNIX; has not, until now, addressed the +needs of the average computer user. This fact is particularly +unfortunate, since a number of implementations of &UNIX; (&Linux;, FreeBSD, NetBSD, &etc;) are freely +available on the Internet, all of which are of exceptional quality and +stability. + + + + +&kde; The Desktop Environment + +In combination with a free implementation of &UNIX;, &kde; +provides to the world an open and completely free desktop computing +platform either at home or at work. + + This platform is available to anyone free of charge including +its source code for anyone to modify. + +While there will always be room for improvement we believe we +have now delivered a viable alternative to some of the more commonly +found and commercial operating systems/desktops combinations available +today. It is our hope that the combination of &UNIX; and &kde; will +finally bring the same open, reliable, stable, and monopoly free +computing to the average computer user that scientists and computing +professionals world-wide have enjoyed for years. + + + + +&kde; The Application Development Framework + +&kde; focuses on the user's needs, but it's obvious that this +focus is more easily achieved by also giving developers the best +tools. &kde; code contains, and comes with, some of the best +development technologies of the modern computing age. + +Authoring applications under &UNIX;/X11 used to be an extremely +tedious and labor intensive process. &kde; recognizes the fact that a +computing platform is only as good as the number of first class +applications available to the users of that particular +platform. + +&kde; defines new technologies in &DCOP; and KParts, created to +offer a component document model and technology. Together with the +complete &kde; libraries programming interface, &DCOP;/KParts are set +in direct competition with other similar technologies like &Microsoft; +MFC/COM/ActiveX technologies. The +excellent quality and the high level of refinement of &kde;'s +application programming interface (API) enables +developers to focus on original and interesting issues and avoid +reinventing the wheel. + + + + +&kde; The Office Application Suite + +In its current form, &kde; provides, apart from the essential desktop +component applications, a suite of powerful office programs known to the +world by the name &koffice;. + +&koffice; is based on the &kde; &DCOP;/KParts +technologies. It currently contains: a word processor with desktop +publishing capabilities (&kword;), a spreadsheet application (&kspread;) +and accompanying charting program (&kchart;), a presentation program +(&kpresenter;) and a vector drawing program (&kontour;). Tying things +together is the KOffice Workspace, an +integrated shell to ease the use of the &koffice; components in +conjunction with each other. Additional components include an email +client, a news reader, and a powerful PIM (Personal +Information Manager - an organizer). + +While some of those components are still in alpha development, +others are already extremely powerful. For example, &kpresenter;, +&kde;'s presentation application, was successfully used at the 5th +International &Linux; Congress in Cologne, Germany to deliver a &kde; +presentation. + +We would like to invite you to learn more about &kde; and &koffice;. + + + + diff --git a/doc/kicker/Makefile.am b/doc/kicker/Makefile.am new file mode 100644 index 000000000..3f20a1e1b --- /dev/null +++ b/doc/kicker/Makefile.am @@ -0,0 +1,5 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + +KDE_MANS = AUTO diff --git a/doc/kicker/bookmarks_icon.png b/doc/kicker/bookmarks_icon.png new file mode 100644 index 000000000..aa335b286 Binary files /dev/null and b/doc/kicker/bookmarks_icon.png differ diff --git a/doc/kicker/desktop_icon.png b/doc/kicker/desktop_icon.png new file mode 100644 index 000000000..5055c7df8 Binary files /dev/null and b/doc/kicker/desktop_icon.png differ diff --git a/doc/kicker/index.docbook b/doc/kicker/index.docbook new file mode 100644 index 000000000..bc7333c72 --- /dev/null +++ b/doc/kicker/index.docbook @@ -0,0 +1,2434 @@ + + + + + +]> + + + + + + +The &kicker; Handbook + + +&Orville.Bennett; &Orville.Bennett.mail; +&Dirk.Doerflinger; &Dirk.Doerflinger.mail; + + + + +20012002 +&Dirk.Doerflinger; + + +2004 +&Orville.Bennett; + + +2005 +Titus Laska + + +&FDLNotice; + +2006-06-15 +3.5.2 + + + +&kicker; is the &kde; application starter panel and is also capable of +some useful applets and extensions. It usually resides on the bottom of +the desktop. + + + + +KDE +Kicker +kdebase +panel +application +starter + + + + + +Introduction + + + +&kicker; is the application launcher panel of the K Desktop Environment. +Besides the K Menu, where you can start applications, +&kicker; is also capable of running docked applets like the pager, the +taskbar or the clock, and extensions, such as child panels. + + + +&kicker; usually resides on the bottom of the desktop, but it can also +be moved to any other border. Please report any problems or feature +requests to the &kde; mailing lists. + + + + + +Using &kicker; + + +This is what you see on a freshly installed &kde;, assuming that you +skipped KPersonalizer. If you are using +lower resolution, some of the icons may not appear immediately. To +cater for those smaller resolutions, the screenshot below is divided +in two parts. + + + +Here is a screenshot of the left side of &kicker; + + + + +Screenshot Left + + + +This is a screenshot of the left side of &kicker; + + + + + + +And here is the right side + + + + +Screenshot Right + + + +This is the right side of &kicker; + + + + + + +Of course, this is only one way &kicker; might appear on the +screen. There are many more configurations available. + + + +A quick tour for new &kde; users + + +If you are experienced with this kind of application launcher, you can +ignore this chapter and move on to &kicker; +basics. + + + +The main use of &kicker; is starting applications. This is +done by clicking icons, either from the panel or from the +K Menu. &kicker; shows some more things too, so let's +see. + + + +Having a look at the screenshots above, there are from left to right: + + + + + +The K Menu + + +It is used for launching applications and some other useful +things. Refer to The K Menu +for more information. + + + + + +Application start icons + + +Here are some icons of commonly used applications. They can be moved and +removed and others can be added. Some of them have a special meaning, +which you can read more about in &kicker; +basics. Resting the mouse over an icon without clicking shows the +name and a short description of that application, if you have set that in +the Settings Dialog. + + + + + +The Pager applet + + +This displays a small view of the virtual desktops. Clicking one section +of it will activate that desktop. Please refer to Applets. + + + + + +The Taskbar + + +All running applications are displayed as buttons in the +taskbar. Clicking an application's button will bring this application on +top. If it was on top before, it will be iconified. More +information is available in the Applets +section. + + + + + +System Tray + + +The system tray is able to swallow some kind of applications like - in +this case - &klipper; and the &korganizer; Reminder Daemon. There are +many other applications that dock in the system tray, for example &juk; +and &kopete;. Clicking the icons with the +left or the right +mousebutton performs specific actions defined for each +application. + + + + + +Clock + + +The Clock applet is - of course - a small, useful clock. It can have +various styles, have a look at the applets section for more information. + + + + + +The Hide panel button + + +This button lets you fade out &kicker; for having more space on the +screen. When &kicker; is faded out, only the Hide panel button +will remain in order to fade in &kicker; again. + + + + + + +This was only the description of &kicker; on its initial launch. It can +be configured in many ways and styles and more applets can be +added. There are even some extensions like the external taskbar you can +add. See &kicker; basics, Applets and Extensions for more information. + + + + + + + + +&kicker; basics + + +General usage + + +As mentioned before, there are a lot of things that can be added to +&kicker;. This section will tell you everything about application +starting, folder browsing and adding some kinds of applets and +extensions. Lots of things can be done from the context +menu with Configure Panel... or via the &kcontrolcenter;'s section Desktop Panels. + + + +Adding applications + + +There are three different ways to add an application to &kicker;: + + + + +Drag and Drop + + +Simply drag any file from &konqueror; into &kicker; and it's there. Dragging +also works from the K Menu with any entry. You can +change the attributes like optional command line parameters or the icon +by clicking it with the &RMB; and choosing Configure +applicationname Button... from the +context menu. + + + + + +Using the context menu to add a &kde; application + + +Click the &RMB; on any free space +in &kicker; and choose Add Application to Panel. +There you can choose an application +which will then be added to &kicker;. + + + + + +Using the context menu to add a +non-&kde;-application + + +Non-&kde;-applications ⪚ +xosview or xemacs. + + + +Click the &RMB; on any free space +in &kicker; and choose Add Application to +Panel and then Add Non-KDE +Application. In the newly appearing window, enter Button title +and a Description of the application in the first two text boxes. Then fill +in the command of the application you +wish to add in the Executable: text box. You can +also append command line arguments, have +the application start from a terminal, and choose the icon which will +appear in &kicker; by clicking the gear. If you don't +choose an icon, the application will use the gear as a default. + + + + + + +Applications can be moved or removed by &RMB; click and choosing +Move application name Button or +Remove application name Button. +You can also move icons using the &MMB; if you have one. To do this click on an icon using the &MMB;, hold for a second and then drag the icon to its new position. +Another way to remove an application is by clicking the &RMB; on any free space +and then choosing Remove from Panel +Application and then the application you want to be +removed. + + + + + + + + +Adding Folders + + +Folders can be added by simply dragging a folder to any free space of +&kicker;. Quick Browsers can also be added from the context +menu or the K Menu. + + + +There are two different ways to have a folder in &kicker;, you can +choose between them in the menu appearing after dropping. + + + + +Add as File Manager &URL; + +Choosing this will add a link to the selected folder. Clicking +this folder icon will open &konqueror; displaying the +contents of this folder. + + + + +Add as Quick Browser + +If you add a folder this way, it will be displayed as a submenu of +&kicker;. This submenu contains Open in File +Manager, which does the same as a file manager &URL;, and +Open in Terminal, which opens a terminal with +this folder as the working path. Also, this submenu contains the contents of +that folder. Sub-folders are displayed as new submenus like the Quick +Browser itself. The maximum number of displayed elements can be set in +the Settings Dialog. +Quick Browsers can also be added from the context menu of +&kicker; and then choosing Add Applet to Panel... and +then Special Buttons on the right top of the +Add Applet dialog. + + + + + + + +Both kinds of folders can be moved or removed by &RMB; click and +choosing Move application name Button or +Remove application name Button. +You can also move icons using the &MMB; if you have one. To do this click on an icon using the &MMB;, hold for a second and then drag the icon to its new position. +Another way to remove a folder is by clicking the &RMB; on any free space +and then choosing Remove from Panel +Applet and then the applet you want to be +removed. + + + +File manager &URL;s can also be configured from the +context menu, just like any other folder anywhere in +&kde;. + + + + + +Special Icons + + +Some icons in &kicker; have a special meaning. They are added by +choosing Add Applet to Panel... and +then Special Buttons on the right top of the +Add Applet dialog. + + + + +The K Menu Icon + + + The +K Menu icon is one of the most necessary icons in +&kicker;. As you might guess, it opens the K Menu, +which you can learn more about in The K +Menu. + + + + + + +The Window List Menu + + + Clicking this +icon will show the Window +list. Its first entry, Unclutter +Windows, tries to move the windows on your active desktop +in a way to see as many as possible. + + + +Cascade Windows puts all windows on the +active desktop over each others, the most recently on top and the others +sorted by the time they where last used. Below those +entries is a list of all currently running applications, grouped by the +desktops on which they are running. Clicking on an application will activate it. + + + + + + +The Bookmarks Menu + + + The +Bookmarks icon provides fast access to your +bookmarks. They appear in the same way as if you click the +Bookmarks menu in &konqueror;. Clicking a bookmark in +the menu will launch &konqueror; with the &URL; which +is behind that bookmark. + + + + + +The Recent Documents Icon + + + +This menu shows the most recently used documents. Clicking the element +Clear History will remove those entries, +which may be useful for privacy reasons. + + + + + +The Show Access Icon + + + The +Show desktop icon lets you have quick access to all +the things you have on your desktop by minimizing all currently open +applications. Clicking it once will toggle it to show the desktop. The +icon will remain pressed until you either click it +again, which will restore your minimized apps, or reactivate an +application from the taskbar. + + + + + +The Quick File Browser Item + + +Adding a +Browse icon will open a dialog which will +let you choose a path and an icon, which will appear as a +Quick File Browser menu. Refer to the Adding Folders section for more information +about quick browsers. + + + + + +The Non-&kde; Application Launcher + + + + + +The Non-&kde; Application Launcher lets you add an +application which doesn't appear in the K menu to &kicker;. +Refer to Adding Applications for more +information about Non-&kde; Applications. + + + + + + +The Terminal Sessions Icon + + + This icon +provides a menu of the available Terminal sessions, just as &konsole; does +when you click and hold its New Session button. + + + + + +The Print System Icon + + +This icon gives +direct access to &kde;'s printing system. &kde; is able to utilize various printing +systems according to users' wishes. The options shown below will vary depending +on the printing system in use. Clicking the &LMB; on the icon opens +a menu which gives the following options: + + + +Add Printer... This will start &kde;'s Add Printer +Wizard which allows you to simply add a new printer to your system. + + +&kde; Print Settings This item will open the &kde; Print +Configuration dialog. + + + +Configure Server This item allows configuration +of a &CUPS; Server. An authorization dialog, requiring validation, will be presented +to you before allowing any changes. + + + + +Print Manager This item starts the Printing Manager, +&kde;'s main printing control center. + + + +Print Browser (&konqueror;) This item will +start &konqueror; with the print:/ io-slave to +browse all kinds of printers. + + + +Print File... This item opens a dialog which lets +you easily print one or more files. + + + +The next items with the names of all your printers open the KJobviewer window for each printer. + + + + + + + + + + + + + +Removing all kinds of icons + + +Clicking the &RMB; on any icon, whether it's an application, +folder or special icon and then choosing +Remove name from the appearing context +menu will remove the icon from &kicker;. + + +Another way of removing icons is clicking the &RMB; on any free space in +&kicker; and choosing Remove From Panel and then +Applet, Application or All. You can then choose the button you want to remove in +the submenu. + + + +Please note that removing an icon from &kicker; won't remove the +application on the disk! + + + + + + +Adding Applets + + +&kicker; comes with a set of applets like the taskbar or the +mini-pager. They can be added by choosing Add +Applet to Panel... from the context menu, +which can be opened by +clicking the &RMB; on any free space in &kicker;. In the upcoming +dialog, choose an applet to add and click the Add to +Panel button. + + + +Applets can be moved by dragging them on their handle with holding the +&LMB;, or the &MMB;, or by choosing +Move from the context menu. + + + +You can learn more about the applets in the section Applets. + + + + +Removing Applets + +Applets can be removed by choosing the Remove applet name option from the context menu, which appears when the +&RMB; is clicked on the applet's handle (left or top side of the applet) or on the icon itself. + + + + + + +Adding Extensions + + +There is also the possibility to add external extensions to &kicker;, +like the External Taskbar, the Dock +Application Bar for WindowMaker +dock-applications, Kasbar, an iconic kind of +taskbar, an Universal Sidebar and even child Panels which behave like new instances of +&kicker;. + + + +Extensions can be added by selecting them from the +submenu Add New Panel in the context +menu of &kicker;. +Most of the extensions can be moved to any border of the screen by +dragging them with the &LMB; on a free space. If that does not work, +open the context menu on any free space in &kicker;, +choose Configure Panel... and set up the panel +positions in the appearing dialog. + + + +More about extensions can be read in the extensions section. + + + + + +Removing Extensions + + +You can remove extensions by clicking Remove +in their context menu, usually located in the +fade-out handles or by selecting them from the Remove +Panel submenu of the &kicker; context +menu. + + + + + + +Configuring Application Buttons + + +Every application starter has some preferences you +can set from their context menu with Configure application nameButton.... Usually applications +and folders have the same preferences as in &konqueror;. Only the +applications which are located in the K Menu (for +experienced users: those which have a .desktop extension in the applnk folder) have a special kind of config +dialog. + + + +The <guilabel>General</guilabel> Tab + + +Here you can see some information about the application link. You can also +choose an icon by clicking on the icon button +. +This may be useful if you want the icon on the panel behave different +to the analog one in the K Menu. + + + + + + +The <guilabel>Permissions</guilabel> Tab + + +Here you can see the permissions of the link file. Please refer to the +manuals or handbooks of your operating system for more about +permissions. + + + + + +The <guilabel>Application</guilabel> Tab + + +You can set the behavior of the application when it's executed on this page. + + + + +Name + + +Here you can set the name of the application which will be shown in the tooltip. + + + + + +Description + + +Here you can set an informative title which will be shown in the tooltip. + + + + +Once the Description is set however, it alone will be +shown in the tooltip. + + + + + + +Comment + + +See Description. + + + + +If you set a Name and a Comment, they will +be shown as tooltips of the start icons in the style Name - Comment. + + + + + + +Command + + +Usually, there is only the name of the binary that has to be started +when clicking on the icon. You can search for another application to be +started by clicking the Browse... button and/or add +special command line parameters to the application. + + + + + +Work path + + +Not yet written + + + + + + + +Supported file types: + + +In this section you can choose what kinds of filetypes are handled by +this application. Please refer to &konqueror; handbook for more about this. + + + + + +Advanced Options + + +This button allows for further configuration of the application to be run. + + + + +Run in terminal + + +If this box is checked, the application will be executed in a terminal +window. You can also add special Terminal options. + + + + + +Run as different user + + +Checking this option will let the application start with the permission +of the user you typed in the field Username. You +will be prompted for the user's password on application start. This +option may be very useful if you want to start some applications as +superuser. + + + + + +Enable launch feedback + + +If this box is checked, this will display feedback when an application icon is clicked +with the &LMB;. + + + + + +Place in system tray + + +When checked, the application's icon will show up in the panel system tray. +You will then be able to hide or show the application by clicking on the system +tray icon. Clicking on it using the &RMB; will allow also you to undock, or quit the +application. + + + + + +DCOP registration + + +Not yet written + + + + + + + + + + + + + + + + +Configuring &kicker; + + +This section describes the ways &kicker; can be configured. It's only +about the basic &kicker; settings, configuration of the applets are +described in their sections + + + +You can change the settings by either clicking +Configure Panel... in the context +menu of &kicker;, or in &kcontrolcenter; by +going to Desktop and then selecting the +Panels or the Taskbar module. + + + + +The Panel Section + + +Extensions + +Panels and panel extensions are configured +on the same page. Simply choose one of your extensions (⪚ +Child Panel) from the Settings for: listbox. You will then +be adjust its settings rather than that of the Main Panel. + + + + + +<guilabel>Arrangement</guilabel> + + +In the Arrangement tab you can configure some basic +functionality of the &kde; panel (&ie; functionality you'd find in other +panel applications as well; later we'll come to the more interesting +features). + + + +In the Position frame you can choose which +screen border the panel should be attached to. Please note that usually +the available space is used more efficiently if the panel is aligned +horizontally, &ie; attached to the top or bottom screen border. If you +want to play around with different settings you can change the panel's +position even easier by dragging the panel from one border to the other. + + + +The Length frame lets you define how much space a panel +will occupy on the side of the screen which it resides. By default this is on the +bottom so changing this value will affect a panel's width. The value can be anywhere +from 1% to 100%. +Checking the check box Expand as required to fit contents +makes sure that a panel is at least as big as needed to show every icon and +applet. + + + +The Size frame lets you define how large a panel will be. +The panel's size can be tiny, small, medium, large or custom. Depending on +which applets you use you may find that some applets work better at +different panel sizes. + + + + + +<guilabel>Hiding</guilabel> + + +Depending on your screen resolution you may find that the panel takes +away too much of your precious screen real estate. To save screen space, +the panel offers an auto hide feature. When this feature is enabled, the +panel will hide when the mouse cursor has not been moved over it for a +configurable amount of time. If you move the mouse to the panel's screen +border it will show up again. Select the Hide automatically +option in the Hide Mode frame to enable this feature. +You can also configure the amount of time the panel will wait before +it hides here. The check box Show panel when switching +desktops makes sure that the panel will be shown on the new +chosen desktop. Otherwise, if there are too many applets and icons on +&kicker;, two small scroll buttons will be displayed to scroll the whole +panel. + + + +When the panel's hide buttons are enabled you'll see buttons on both +sides of the panel, with arrows showing to the screen border. If you +click on one of these buttons, the panel will slide away in that +direction. After that, you'll see a remaining show button in that +corner, which will make the panel show again. Check the appropriate +checkbox if you want the hide buttons to show up on any side of +&kicker;. Using the slider you can change the width of the buttons. + + + +You can toggle which hide buttons the chosen panel should have with +the check boxes in the group Panel-Hiding Buttons. + + + +The Panel Animation frame allows you to choose +whether the panel will softly slide away or just disappear. +Checking the Animate panel hiding will allow you +to configure the speed of the animation using the sliders. Unchecking, +naturally, disables the panel animations. + + + + + +Menus + + +In the Menus tab you can configure the panel menu's +behavior. This affects the K menu you will often use +to launch applications, the browser menus you can use to access +folders and other menus like the recent documents menu. + + + +The K Menu frame offers you some options to +configure the K menu's functionality. The +Bookmarks and Recent Documents options +will enable submenus showing your konqueror +bookmarks and the last documents you've opened using &kde; applications +respectively. The Quick Browser option will enable a browser menu. +Enabling the Show side image check box will display a neat +image on the left side of the K menu. +The Menu item format entry allows you to set how +detailed the K menu entries will be. +The Name only option simply shows the application's name in the menu. +The Name (Description) option will show a small description +besides the name of the application. +The Description (Name) and Name +(Description) options will show both name and description in +the KMenu. + + + +In the QuickBrowser Menus frame you can configure +whether the panel's browser menus will show hidden files or not (hidden +files on &UNIX; systems are those whose filenames begin with a dot) as +well as how many files at most will be shown in a browser menu; the +latter option may be especially useful if you have a rather small screen +resolution, as the browser menus would otherwise quickly fill up your screen +when you browse folders containing many files. + + + +The quick start section in the K menu offers quick +access to programs you have used often or recently. In the +QuickStart Menu Items frame you +can choose whether this section will show the most recently or the most +frequently used programs. Using the option Maximum number of +entries you can configure how many +programs the quick start section will remember. + + + + + +<guilabel>Appearance</guilabel> + + +Using the Appearance tab you can configure the +panel's overall appearance. + + + +The check box Enable icon mouseover effects +toggles the large animated tooltips of &kicker;. They show name and +description of the icons and applets the mousepointer is positioned on. + + + +If Show tooltips is checked, the classical small +tooltips with descriptions of the icons and applets will be shown if the +mousepointer rests over an icon for some seconds. Note that this +has no effect as long as the option to Enable icon mouseover +effects is enabled. + + + +The &kde; panel supports so-called tiled buttons. This +means that the buttons shown on the panel will be drawn using +configurable images/colors. + + + +For every kind of panel button there is a combo box offering a custom +color option and tiled images. When the value is changed from "Default", +tiles are enabled for this kind of button. You can also see a preview of a tile +before use via the combo box. + + + +The different kinds of buttons are: + + + + +K Menu tiles + + +The icon for the K Menu will be displayed as a tile + + + + + +Applications tiles + + +The icons which start applications will be displayed as tiles + + + + + +Desktop access tiles + + +The Desktop Access icon will be displayed as a tile + + + + + +QuickBrowser menus Tiles + + +The icons for Quickbrowsers will be displayed as +tiles + + + + + +Window list Tiles + + +The Window List icon will be displayed as a tile + + + + + + +The Enable transparency option, when checked, allows the +panel to appear transparent. + + + +The background image is a picture that will be used +to draw the panel's background, just like you can use a picture for the +desktop background. Check the Enable background +image option to enable this feature. You can specify an image +file in the edit box below or choose one by clicking on the +Open file dialog button. You may also check the +Colorize to match the desktop color scheme box to +modify the background image's colors. You'll see a preview of the selected +picture on the right. + + + + + + + + + + + +The <guilabel>Taskbar</guilabel> Section + + +This section changes the settings of the taskbar. Changes affect the +external taskbar and also taskbar applets on &kicker; or child-panels. + + + + +Show windows from all desktops + + +If this box is checked, the taskbar will show all running apps of every +desktop. Otherwise, only the applications of the current desktop are +shown. + + + + + +Sort windows by desktop + + +Checking this box will sort all taskbar buttons +in a group for each desktop, otherwise they are sorted by the order they +are started. This will not affect grouped tasks if they are spread over +more than one desktop. + + + + + +Sort alphabetically by window name + + +To be written + + + + +Show only minimized windows + + +If this box is checked, only windows which have been minimized will be +shown in the taskbar. If Show windows from all desktops +has been checked then all minimized windows will be shown. Otherwise, only the +minimized windows of the current virtual desktop will be shown. + + + + + +Show application icons + + +If this box is checked, every taskbar button will +have the icon of the running application beside its title. + + + + + +Show window list button + +Checking this box will show the small window list +button. + + + + + +Group similar tasks + + + + + + +This is an option which helps you if you often lack space in your +taskbar. If it is set to Always, several +instances of the same application are grouped together in one taskbar +button. Select When Taskbar Full to make &kicker; +only group similar tasks if there is not much space left in the taskbar. + + + + + + + + +You can define the mouse actions of the taskbar buttons with the settings in +the Actions frame. Each action can be one of the +following: + + + + +Show Task List + +Clicking with the +mouse button will open a menu displaying all +tasks in that group. If you click an entry of that menu with any mouse +button, the corresponding application will become active. + + + + +Show Operations Menu + + +Clicking with the mousebutton will open a menu with all +applications of that group, where every application has its window +menu as a submenu and there are some group specific entries like +Close All which closes all applications of +that group, All to Desktop which lets you +define on which desktop the whole group appears and +Maximize All, Minimize +All and Restore All which +appends those actions to all applications of that group. + + + + +Cycle Through Windows +If this action is chosen, each +click with the mousebutton on the taskbar button will +activate one of that group's applications, one after each others. + + + +Activate Task + + +Activate Task: Clicking with the mousebutton will activate +the first application in that group without opening the group menu. + + + + +Raise Task + +The first application of that group will be +put in the foreground without giving focus to it. + + + +Lower Task + + +The first application of that group will be +put in the background. It won't lose the focus. + + + +Minimize Task + +The first application of that group will be +minimized. If it is already minimized, it will be restored again. + + + + +Please note that some of these settings only have effect if a +taskbar button contains more than one application. + + + + + + + +The <guimenu>K</guimenu> Menu + + +The K Menu is one of the central elements of +&kicker;. + + + +There are five main groups in the K Menu which will +be described now from bottom to top. + + + +The &kde; Group + + +This group is for the common &kde; things in the K +Menu. + + + + +Log Out... + + +This entry is used to finish the &kde; session. It also shuts down the +&X-Window; session. + + + + + +Lock Session + + +With this entry you can lock your session if you don't want anybody else +to access your desktop. If you have set a screensaver, it will appear when +locked, otherwise the screen will turn black. If you hit any key, you +will be prompted for your user password. This is independent from the +screensaver's password settings. + + + + + +Special Configuration + + +Clicking with the &RMB; on the K Menu, will produce a +special submenu. In this submenu is the Panel Menu. +Here you can change the settings of &kicker;, described in the +Configuring &kicker; section, add +things to &kicker; (see in &kicker; Basics +for more), or reach the Help Menu, but as you are +reading this, you probably found it yourself. +You can also start the Menu Editor via this submenu. + + + + + + + + +<guilabel>Run Command...</guilabel> + + +This will bring up a small but powerful application start dialog. + + + +In the standard case, you just type in a command and press +Enter or click Run. But there +is also an Options >> button which will bring up +some starting options to the command window. + + + + +Run in terminal window + + +Checking this box will let the application start in a terminal which means that +you will be able to see any command-line messages the application may give. + + + + + +Run as a different user + + +If this box is checked, you can specify a user with whose permission the +application should run in the Username textfield. +If you specify another user, you will have to give a password at the box +below. + + + + + +Run with different priority + + +Check this option to run with a different priority. A higher priority +will tell the operating system to give more processing time to the +applications. You can use the slider to change the priority. If you +want to give your app a higher priority than the default one (middle +position), you will need to enter the root password below. + + + + + +Run with realtime scheduling + + +The Scheduler is the part of the operating system which processes will +run and which have to wait. Usually, an application will run with normal +schedule, which means it can use the processing time it gets from the +operating system, but you can also set it to +realtime. This means that the application has all +the process time until it gives it away. You will need to enter the root +password to use Run with realtime scheduling. + + + + +This can be dangerous. If the application hangs and cannot give up the +processor, the complete system might hang. + + + + + + + + + + + + +The Actions Group + + +This group contains some very useful dynamic menus as described in the +Menus section of &kicker;'s settings. + + + + +Quick Browser + + +This submenu contains quick browsers for three very useful folders: +home, root, and system configuration. + + + + + +Recent Documents + + +This menu shows the most recently used documents (works only with &kde; +applications for the moment). Clicking the element Clear +History will remove those entries, what may be useful for +privacy reasons. + + + + + +Bookmarks + + +This submenu shows your personal bookmarks just like &konqueror; +does. Refer to the &konqueror; Handbook for more help on this. + + + + + + + + + +The All Applications Group + + +The submenus for application starting are located in this group. You can +use &kmenuedit; to add, remove or move the entries. Applications will have a +short description if either the Name (Description) or +Description (Name) option is enabled in the settings. + + + + +The Most Used Applications Group + + +This group holds either the most recently or the most frequently used +applications. See the Menus +Configuration section for more about that. + + + + + + +Applets + + +Applets are small applications running inside of &kicker;. Almost +everything besides the application starter buttons +are applets. They can be added from the context menu +by choosingAdd Applet to Panel. Every +applet contains a small arrow in its handle. Clicking it will bring up a menu +which lets you move or remove it, set the Preferences, if there are any and set +the preferences of &kicker;. + + + +The Taskbar Applet + + +The taskbar applet shows buttons for the running applications. The +application, which has the focus, is shown as a pressed button. If an +application is minimized, the title displayed in the taskbar will fade +to gray. + + + + +If you click on the button of the active application, it will be +minimized. This means also that if you click twice on an inactive +application, it will also be minimized. + + + + +A click with the &RMB; on a button will show the standard application +menu. Only the entry To Current Desktop +differs: if you have set the taskbar to show the applications of all +desktops, you can move this app to the current desktop. + + + +There is also a small icon on the left or top side of the taskbar, which +opens a menu. This is called the windows list +icon. The menu's first entry, Unclutter +Windows, tries to move the windows on your active desktop +in a way to see as many as possible. Cascade +Windows puts all windows on the active desktop over each +others, the most recently on top and the others sorted by the time they +where last used. + + + +Below those entries is a list of all currently running applications, +grouped by the desktops on which they are running. Clicking on the name +of a desktop will switch to that one, clicking an application will also +activate it. You can specify the mouse behavior. Please refer to Taskbar settings for more about that. + + + + +Configuring the Taskbar Applet + + +You can configure the taskbar by clicking the &RMB; on the small move +handle. + + +Please refer to for details about the +preferences of the taskbar. + + + + + + + +The Mini-Pager Applet + + +This little applet shows a preview of the virtual desktops, lets you +switch between virtual desktops and gives you the ability to move windows +from one desktop to another by dragging them. + + + +There is also a very useful context menu used to +configure this applet: + + + + +Configure Desktops... + + +This opens the configuration dialog for virtual desktops. There you can +specify how many desktops you want to have and give them names. + + + + + +Pager Options + + +In this submenu you can configure the appearance of the Mini-Pager. It +provides the following functionality: + + + + + +Pager Layout + + +In this section you can choose in how many Rows +or Columns the desktop previews are arranged, +if you want to see which windows are currently visible on the desktops +and if icons should indicate the applications running on the different +vitual desktops. + + + + + +Text Label + + +Here you can choose if the desktop previews should be labeled by their +numbers, their names or if you you don't want them to be labeled at all. + + + + + +Background + + +You can set the background of the pager to +Elegant, Transparent +or equivalent to the Desktop Wallpaper. + + + + + + + + + + +Launch Pager + + +This launches the application &kpager;, which provides functions similar +to those offered by the Mini-Pager applet. + + + + + + + + + +The Clock Applet + + +As you might already guess, the clock applet is a small clock which +resides in &kicker;. + + + +A click with the &LMB; on the clock will show a small calendar. You can +use the single arrows to switch the months or the +double arrows for switching years. This won't +have any effect of your date settings, it's just for your information. + + + +There are some things you can do with the clock applet. This can be done +from the context menu. + + + +<guisubmenu>Type</guisubmenu> + + +There are four ways the clock can appear: + + + + +Plain + + +This lets the clock appear as a simple text that shows the time in plain text. + + + + + +Digital + + +This lets the clock appear as a digital clock showing the time in the +well known seven segment style. + + + + + +Analog + + +If this is set, the clock will be displayed as an old styled analog +clock. + + +This may only be useful if you set &kicker; to normal or large +size. + + + + + + +Fuzzy + + +This is a very unorthodox style of time display. Try it out, it is +really funny! + + + + + + + + +<guimenuitem>Show Timezone</guimenuitem> + + +Select available timezones or open the Timezones +tab of Configure dialog of the clock applet with +Configure Timezones.... + + + + +<guimenuitem>Adjust Date & Time</guimenuitem> + + +This option starts the Date & Time +configuration module in the section System Administration of the &kcontrolcenter;. + + + +You will need the super user password for adjusting date and time. + + + + + + +<guimenuitem>Date & Time Format</guimenuitem> + + +This will open the Country/Region & Language module in the section Regional & Accessibility of the &kcontrolcenter; +where you can set your formats on the page Times & Dates. There aren't any special permissions needed for that. + + + + + +<guisubmenu>Copy to Clipboard</guisubmenu> + + +If you need to paste the actual date and/or time in another application +(⪚ in a text editor), you can copy it to the clipboard with this +function. After selecting one of the available formats, the actual date +and/or time is placed in the clipboard using the appropriate format. + + + + + +<guimenuitem>Configure Clock...</guimenuitem> + + +Here you can set some general preferences of the clock applet. + + + + +Appearence + + +In the Clock Type settings you can choose between +the clock styles like in the context menu. + + + + + + + +The Plain Clock options + +In the Display section you can check if you +want to have the date and/or the seconds shown. In +Time you can choose if you want the common &kde; +look or your own custom colors and font. + + + + + +The Digital Clock options + +In the Display section you can check if you +want to have the date, the seconds and/or blinking dots shown. In +Time you can choose if you want the common +LCD-Look or your own custom colors. + + + + + +The Analog Clock options + + +In the Display section you can check if you want to +have the date and/or seconds shown. In Time you +can choose if you want the common LCD-Look or your +own custom colors. +You can also set the level of antialiasing, which means that lines will get +blurred a little bit to prevent steps in the drawing. High quality antialiasing +may catch some system load on low-end systems. + + + + + +The Fuzzy Clock options + + +In the Display section you can check if you want to +have the date shown. In Time +you can choose the colors and the font of the fuzzy clock. There is also a slider to set the +Fuzziness. This cannot be described in the +documents, just do your own experiments. + + + + + + + + + + + +The Quick Launcher Applet + + +This is a compressed application launcher. It is very useful especially +if the panel is set to normal or large size. You can add applications by +drag and drop or from the context menu. The +context menu is also used to remove an application. + + + + +The System Tray Applet + + +The System Tray is used to dock some special applications ⪚ +&klipper; or &juk;. The applications shown in the system tray all +provide individual funtionality. If you need help concerning these +options, please refer to the application handbooks. + + + +The System Tray's context menu provides the option +Configure System Tray... . If you click on it, +a dialog pops up which lets you choose applications that should not be +permanently visible in the System Tray. Hidden icons can be made visible +by clicking on the small arrow appearing on the left or top side of the +applet. + + + + +Lock/Logout Applet + +This little applet contains two buttons. +The Lock the session is used to lock the session if you +ever want to leave your &kde; unattended and don't want anybody to access it. +The Log out is used to close your &kde; session. + + + + +The Application Launcher Applet + + +This applet provides a simple command line embedded in &kicker;. Nothing +more, nothing less. + + + + + +The Runaway Process Catcher Applet + + +This applet shows a smiley which will get angry when any process catches +up too much system resources. If an application uses too much, a +messagebox will appear and ask you how to handle that application. + + + +Clicking it with the &LMB; will show a configuration dialog. Here you +can set the Update interval, which is set in +seconds, and the CPU load threshold. At the +moment, there is no real advice for setting this up, you will have to do +some experimenting. These settings will probably change in a future +release. There is also a section Programs to ignore +where you can add applications that use many resources naturally, +⪚ compilers or 3D renderers. + + + + + +&klipper; Applet + + +This applet does exactly the same like the &klipper; residing in the system +tray. It has the advantage, that it consumes a little bit less system +resources, which only matters on really slow systems, but has the +disadvantage, that it uses more space than &klipper; in the system +tray. You can read more about that in the manual for +&klipper;. + + + + + + +Panel Extensions + + +There are also some features that run outside of &kicker;, the +extensions. They are added from the +context menu by choosing Add New Panel. You can move them to any +screenborder by dragging them at the small applet +handle on their side and remove it by right clicking on an empty space and choose Remove Panel. + + + +The style of the extensions can be configured in the section of &kicker;'s preferences. + + + + +The External Taskbar Panel Extension + + +The external taskbar is just the same as the taskbar applet with the +only difference that it provides its own panel. Refer to the taskbar applet section for help about +it. + + + + + +The Child Panel Extension + + +This is just a panel like &kicker; itself, where you can add all the +stuff &kicker; is also capable. So you can have as many &kicker;s as you +want. Just add a child panel and add applications and applets to it. + + + + + +The <application>KasBar</application> Extension + + +The KasBar is an iconic replacement of the +taskbar. It always shows the icons of all currently running applications +on any desktop, they can be chosen by clicking with the &LMB;. The +active window is highlighted, minimized windows will show a little +triangle pointing downwards instead of the square in the lower right of +the icons. A triangle pointing to the right indicates that the +application is shaded. + + + + +The Dock Application Bar Extension + + +The Dock Application Bar is an external bar which lets WindowMaker +applications be docked. Just run your dockable WindowMaker programs, if +the Dock Application Bar is running, they will be automatically docked. + + + + + + +Command Reference + + +The Panel + + +There is only one standard shortcut available in &kicker;: + + + + +&Alt;F1 + + +Opens the K Menu + + + + + + + + + + +Questions and Answers + + + + + +How can I add applications, applets or anything else to the panel? + + + + +Click the &RMB; on any free space in &kicker; and choose +what you want to add. See in &kicker; Basics +for more about that. + + + + + + + +Can I have an external Taskbar just like in &kde; 1? + + + + +Yes, you can just click the &RMB; on any empty space in &kicker; and +then choose Add, +Panel and the External +Taskbar. + + + + + + + +How can I move &kicker; to another screen border? + + + + + +Simply drag it by holding the &LMB; on any empty space in &kicker; to +any screen border. + + + + + + + +How can I move extensions to another screen border? + + + + + +Just drag them by holding the &LMB; on the small +handles on the left or the top of the extension. + + + + + + + +I want the taskbar to show all applications I am running, independent on +which desktop they are. Is that possible? + + + + +It is. Click the &RMB; on the small handle of the +taskbar, then choose Configure Taskbar... and check +Show windows from all desktops in the appearing dialog. + + + + + + + +How can I access the K Menu without using the mouse? + + + + +Simply press &Alt;F1 and it will appear. + + + + + + + +Is there a way to add a menu containing all desktop icons to &kicker;? + + + + +Just start &konqueror;, go to your home folder and drag the +Desktop icon to any free space of &kicker;, then +choose Add as Quick Browser from the +appearing menu. + + + + + + + +How can I change the color and style of &kicker;? + + + + +You can change the colors of the panel with the global color module of +the Control Center or you can style the panel +itself, see in for more about that. + + + + + + + +Why is the clock showing the wrong time? + + + + +On some &RedHat;systems, the clock always shows the time in +&GMT;. This is a bug in the system setup, and not +directly related to &kicker;. However, to solve it, just create this +symbolic link: ln +/usr/share/zoneinfo +/usr/lib/zoneinfo. + + + + + + + +Is it possible to change the K button of the panel to +another picture? + + + + +Look for $HOME/.kde/share/apps/kicker/pics/go.png +and $HOME/.kde/share/apps/kicker/pics/mini/go.png +and replace them. Do not forget to flatten the replacements to one +layer, or else you will not see anything. Create the folders if +they do not already exist. Then restart &kicker;. + + + + + + + +Why is my Settings menu not working? + + + + +Your menu entries may be mixed up for some reason. Simply run +kbuildsycoca on a commandline. + + + + + +&reporting.bugs; + + + + + + +Credits and License + + +&kicker; + + + +Program copyright 1999-2000 The &kde; Team (www.kde.org). + + + + +&Matthias.Elter; &Matthias.Elter.mail; + + + + +&Matthias.Ettrich; &Matthias.Ettrich.mail; + + + + +&Wilco.Greven; &Wilco.Greven.mail; + + + + +&Rik.Hemsley; &Rik.Hemsley.mail; + + + + +&Daniel.M.Duley; &Daniel.M.Duley.mail; + + + + +&Preston.Brown; &Preston.Brown.mail; + + + + + +Original documentation copyright 2001, 2002 &Dirk.Doerflinger; +&Dirk.Doerflinger.mail; +Portions copyright 2004 &Orville.Bennett; +&Orville.Bennett.mail; +Portions copyright 2005 Titus Laska +titus.laska@gmx.de + + + +&underFDL; +&underBSDLicense; + + + +&documentation.index; + + + + + + diff --git a/doc/kicker/k_menu_icon.png b/doc/kicker/k_menu_icon.png new file mode 100644 index 000000000..b3ca6b647 Binary files /dev/null and b/doc/kicker/k_menu_icon.png differ diff --git a/doc/kicker/man-appletproxy.1.docbook b/doc/kicker/man-appletproxy.1.docbook new file mode 100644 index 000000000..4081f6c19 --- /dev/null +++ b/doc/kicker/man-appletproxy.1.docbook @@ -0,0 +1,101 @@ + + +]> + + + +KDE User's Manual + +Lauri +Watts + +&Lauri.Watts.mail; +Feb 25, 2005 +K Desktop Environment + + + +appletproxy +1 + + + +appletproxy +&kde; panel applet proxy + + + + +appletproxy +desktopfile +--configfile file +--callbackid id +KDE Generic Options +Qt Generic Options + + + + +Description +appletproxy is a small application that +allows you to run a &kicker; (&kde; panel) applet outside of &kicker; +itself. The applet will appear in it's own window, making this a convenient +way to debug panel applets. + + + +Options + + + + +The applet's desktop file + + + +The config file to be used + + + + +&DCOP; callback id of the applet container. + + + + + + + + +See Also + +kicker(1) + + + + +Examples + + + +appletproxy knewsticker + +Run &knewsticker; in a standalone window. + + + + + + + +Authors +&kappname; was written by &Matthias.Elter; and &Matthias.Ettrich; and +is maintained by &Aaron.J.Seigo; &Aaron.J.Seigo.mail; + +This man page was written for &kde; 3.4 by &Lauri.Watts; +&Lauri.Watts.mail; + + + diff --git a/doc/kicker/man-kicker.1.docbook b/doc/kicker/man-kicker.1.docbook new file mode 100644 index 000000000..99f984670 --- /dev/null +++ b/doc/kicker/man-kicker.1.docbook @@ -0,0 +1,88 @@ + + + +]> + + + +KDE User's Manual +&Lauri.Watts;&Lauri.Watts.mail; +February 27, 2005 +K Desktop Environment + + + +kicker +1 + + + +kicker +&kicker; is the &kde; panel + + + + +kicker +KDE Generic Options +Qt Generic Options + + + + +Description +&kicker; is the &kde; panel. It normally contains application +starters, applets, and a clock. + + + + +Files + + + +$KDEHOME/share/apps/kickerrc + +User specific configuration file. This file is not normally intended +to be edited directly; Most configuration items can be controlled from +&kcontrol;. + + + + +$PREFIX/share/apps/kickerrc + +Global configuration file. This file is not normally intended to be +edited directly; Most configuration items can be controlled from &kcontrol;. +Global settings may be configured by the system administrator to either set +defaults, or lock down options that may not be altered by the users of the +system. + + + + + + + +See Also + +More detailed user documentation is available from help:/kicker +(either enter this URL into &konqueror;, or run +khelpcenter +help:/kicker). + + + + +Authors +&kappname; was written by &Matthias.Elter; and &Matthias.Ettrich; and +is maintained by &Aaron.J.Seigo; &Aaron.J.Seigo.mail; + +This man page was written for &kde; 3.4 by &Lauri.Watts; +&Lauri.Watts.mail; + + + + diff --git a/doc/kicker/printsys_icon.png b/doc/kicker/printsys_icon.png new file mode 100644 index 000000000..13adbd006 Binary files /dev/null and b/doc/kicker/printsys_icon.png differ diff --git a/doc/kicker/quickbrowser_icon.png b/doc/kicker/quickbrowser_icon.png new file mode 100644 index 000000000..fbc259e95 Binary files /dev/null and b/doc/kicker/quickbrowser_icon.png differ diff --git a/doc/kicker/recent_docs_icon.png b/doc/kicker/recent_docs_icon.png new file mode 100644 index 000000000..21f079bf4 Binary files /dev/null and b/doc/kicker/recent_docs_icon.png differ diff --git a/doc/kicker/screenshot_left.png b/doc/kicker/screenshot_left.png new file mode 100644 index 000000000..8b29998ca Binary files /dev/null and b/doc/kicker/screenshot_left.png differ diff --git a/doc/kicker/screenshot_right.png b/doc/kicker/screenshot_right.png new file mode 100644 index 000000000..b5bcee61c Binary files /dev/null and b/doc/kicker/screenshot_right.png differ diff --git a/doc/kicker/taskbar_group.png b/doc/kicker/taskbar_group.png new file mode 100644 index 000000000..e5484fe96 Binary files /dev/null and b/doc/kicker/taskbar_group.png differ diff --git a/doc/kicker/terminals_icon.png b/doc/kicker/terminals_icon.png new file mode 100644 index 000000000..de458c184 Binary files /dev/null and b/doc/kicker/terminals_icon.png differ diff --git a/doc/kicker/windowlist_icon.png b/doc/kicker/windowlist_icon.png new file mode 100644 index 000000000..ca164a12a Binary files /dev/null and b/doc/kicker/windowlist_icon.png differ diff --git a/doc/kinfocenter/Makefile.am b/doc/kinfocenter/Makefile.am new file mode 100644 index 000000000..251280f85 --- /dev/null +++ b/doc/kinfocenter/Makefile.am @@ -0,0 +1,6 @@ + +SUBDIRS = $(AUTODIRS) + +KDE_LANG= en +KDE_DOCS = AUTO + diff --git a/doc/kinfocenter/cdinfo/Makefile.am b/doc/kinfocenter/cdinfo/Makefile.am new file mode 100644 index 000000000..e4070c171 --- /dev/null +++ b/doc/kinfocenter/cdinfo/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/cdinfo diff --git a/doc/kinfocenter/cdinfo/index.docbook b/doc/kinfocenter/cdinfo/index.docbook new file mode 100644 index 000000000..6048e5873 --- /dev/null +++ b/doc/kinfocenter/cdinfo/index.docbook @@ -0,0 +1,51 @@ + + + +]> + +
+CD-ROM Information/Capabilities + + + + +Jahshan +Bhatti +
jabhatti91@gmail.com
+
+ +
+ +2006-06-13 +3.00.00 + + +KDE +KControl +cd-rom +capabilities information + +
+ + +CD-ROM Information/Capabilities + + +This page displays information about the attached CD-ROM drives and their capabilites, + + + +On &Linux;, this information is read from /proc/sys/dev/cdrom/info, which are only available if +the /proc pseudo-filesystem is +compiled into the kernel. + + + +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/devices/Makefile.am b/doc/kinfocenter/devices/Makefile.am new file mode 100644 index 000000000..dc255fa48 --- /dev/null +++ b/doc/kinfocenter/devices/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/devices diff --git a/doc/kinfocenter/devices/index.docbook b/doc/kinfocenter/devices/index.docbook new file mode 100644 index 000000000..43eac4de9 --- /dev/null +++ b/doc/kinfocenter/devices/index.docbook @@ -0,0 +1,60 @@ + + + +]> + +
+Device Information + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +device +system information + + + + +Device Information + + +This page displays information about the available devices, + + + + +The exact information displayed is system-dependent. On some systems, +device information cannot be displayed yet. + + + + +On &Linux;, this information is read from /proc/devices and /proc/misc, which are only available if +the /proc pseudo-filesystem is +compiled into the kernel. Devices are listed by group (Character, Block, +or Miscellaneous). The device major number is listed, followed by an +identifying label. + + + +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/dma/Makefile.am b/doc/kinfocenter/dma/Makefile.am new file mode 100644 index 000000000..0e2aa88e7 --- /dev/null +++ b/doc/kinfocenter/dma/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/dma diff --git a/doc/kinfocenter/dma/index.docbook b/doc/kinfocenter/dma/index.docbook new file mode 100644 index 000000000..75fb55c75 --- /dev/null +++ b/doc/kinfocenter/dma/index.docbook @@ -0,0 +1,64 @@ + + + +]> + +
+<acronym>DMA</acronym> Channel Information + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +DMA +system information + + + + +<acronym>DMA</acronym> Channel Information + + This page displays information about the DMA +(Direct Memory Access) Channels. A DMA channel is a +direct connection that allows devices to transfer data to and from +memory without going through the processor. Typically, i386-architecture +systems (PC's) have eight DMA +channels (0-7). + + The exact information displayed is system-dependent. On +some systems, DMA Channel information cannot be +displayed yet. + + On &Linux;, this information is read from /proc/dma, which is only available if the +/proc pseudo-filesystem is +compiled into the kernel. + + A list of all currently-registered (ISA bus) +DMA channels that are in use is shown. The first +column shows the DMA channel, and the second column +shows the device which uses that channel. + + +Unused DMA channels are not listed. + + + +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/index.docbook b/doc/kinfocenter/index.docbook new file mode 100644 index 000000000..a62ca655d --- /dev/null +++ b/doc/kinfocenter/index.docbook @@ -0,0 +1,341 @@ + + + + +]> + + + +The &infocenter; + + + +Michael +McBride +
mpmcbride7@yahoo.com
+
+
+ +2002-07-03 +3.10.00 + + +This documentation describes &kde;'s information center. + + + +KDE +kinfocenter +system +information +module + + +
+ + +The &infocenter; + + +The &infocenter; (from now on referred to simply as the +information center) provides you with a centralized and convenient +overview of your &kde; and system settings. + + + +The information center is made up of multiple modules. Each module is a +separate application, but the information center organizes all of these +programs into a convenient location. + + + + + +Using The &infocenter; + + +This next section details the use of the information center itself. For +information on individual modules, please see Info +Center Modules + + + +Starting the &infocenter; + + +The &infocenter; can be started 3 ways: + + + + + +By selecting K +ButtonSystemInfo +Center from the &kde; Panel. + + + + + +By pressing &Alt;F2. + + + +This will bring up a dialog box. Type +kinfocenter, and click +Run or press Enter. + + + + + +You can type kinfocenter & at any command prompt. + + + + + +All three of these methods are equivalent, and produce the same result. + + + + + +The &infocenter; Screen + + +When you start the information center, you are presented with a window, +which can be divided into 3 functional parts. + + + +Across the top is a menubar. The menubar will provide you with quick +access to most of &infocenter;'s features. The menus are detailed in +The &kde; Info Center +Menus. + + + +Along the left hand side, is a column. This is a where you choose which +module to investigate. You can learn how to navigate through the modules +in the section called Navigating +Modules. + + + +The main panel shows you some system information. + + + + + + + +The &infocenter; Menus + + +This next section gives you a brief description of what each menu item +does. + + + +<guimenu>File</guimenu> Menu + + +The File menu has a single entry. + + + + + + + +&Ctrl;Q + +File +Quit + + + +Closes the info center. + + + + + + + + +<guimenu>Help</guimenu> Menu + +&help.menu.documentation; + + + + + + +Exiting The &kde; Information Center + + +You can exit the info center one of three ways: + + + + + +Select File +Quit from the menu bar. + + + + +Type &Ctrl;Q +on the keyboard. + + + + + +Click on the Close button on the frame surrounding +the info center. + + + + + + + + + + + +The &infocenter; Modules + + +Navigating Modules + + +This is a list of the standard configuration +modules (sorted by category) provided by the &kde; base package. Please note that there +may be many more modules on your system if you have installed additional +software. + + + + +Devices + + +DMA-Channels + + +Interrupts + + +IO-Ports + + +Memory + + +Network Interfaces + + +OpenGL + + +Partitions + + +PCI + + +PCMCIA + + +Processor + + +Protocols + + +Samba Status Information + + +SCSI + + +Sound + + +USB Devices + + +X-Server + + + + + + + + + + +Credits and License + +&infocenter; +Program copyright 1997-2001 The &infocenter; Developers +Contributors: + + +Matthias Hoelzer-Kluepfel +hoelzer@kde.org +Matthias Elter elter@kde.org + + +Documentation copyright 2000 Michael +McBride mpmcbride7@yahoo.com + +Contributors: + + +Paul Campbell paul@taniwha.com +Helge Deller deller@kde.org +Mark Donohoe +Pat Dowler +Duncan Haldane duncan@kde.org +Steffen Hansen stefh@mip.ou.dk. +Matthias Hoelzer-Kluepfel hoelzer@kde.org +Martin Jones mjones@kde.org +Jost Schenck jost@schenck.de +Jonathan Singer jsinger@leeta.net +Thomas Tanghus tanghus@earthling.net +Krishna Tateneni tateneni@pluto.njcc.com> +Ellis Whitehead ewhitehe@uni-freiburg.de + + + + + +&underFDL; +&underGPL; + + +
+ diff --git a/doc/kinfocenter/interrupts/Makefile.am b/doc/kinfocenter/interrupts/Makefile.am new file mode 100644 index 000000000..46be8b9ce --- /dev/null +++ b/doc/kinfocenter/interrupts/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/interrupts diff --git a/doc/kinfocenter/interrupts/index.docbook b/doc/kinfocenter/interrupts/index.docbook new file mode 100644 index 000000000..b29611202 --- /dev/null +++ b/doc/kinfocenter/interrupts/index.docbook @@ -0,0 +1,70 @@ + + + +]> + +
+Interrupt Request (<abbrev>IRQ</abbrev>) Lines + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +IRQ +interrupts +system information + + + + +Interrupt Request (<abbrev>IRQ</abbrev>) Lines in Use + +This page displays information about the Interrupt Request +Lines in use, and the devices that use them. + +An IRQ is a hardware line used in a +PC by (ISA bus) devices like +keyboards, modems, sound cards, &etc;, to send interrupt signals to the +processor to tell it that the device is ready to send or accept data. +Unfortunately, there are only sixteen IRQ's (0-15) +available in the i386 (PC) architecture for sharing among +the various ISA devices. + +Many hardware problems are the result of IRQ +conflicts, when two devices try to use the same IRQ, or +software is misconfigured to use a different IRQ from the +one a device is actually configured for. + +The exact information displayed is system-dependent. On some +systems, IRQ information cannot be displayed + yet. + +On &Linux;, this information is read from +/proc/interrupts, which is only +available if the /proc +pseudo-filesystem is compiled into the kernel. + +The first column, is the IRQ number. The second +column, is the number of interrupts that have been received since the last +reboot. The third column shows the type of interrupt. The fourth, +identifies the device assigned to that interrupt. + +The user cannot modify any settings on this page. + + + +
+ diff --git a/doc/kinfocenter/ioports/Makefile.am b/doc/kinfocenter/ioports/Makefile.am new file mode 100644 index 000000000..56e830b08 --- /dev/null +++ b/doc/kinfocenter/ioports/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/ioports diff --git a/doc/kinfocenter/ioports/index.docbook b/doc/kinfocenter/ioports/index.docbook new file mode 100644 index 000000000..fa662feba --- /dev/null +++ b/doc/kinfocenter/ioports/index.docbook @@ -0,0 +1,64 @@ + + + +]> + +
+I/O Port + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + + +2002-02-12 +3.00.00 + + +KDE +KControl +ioports +system information + + + + +Input/Output Port Information + +This page displays information about the I/O ports. + +I/O Ports are memory addresses used by the processor for direct +communication with a device that has sent an +interrupt signal to the processor. + +The exchange of commands or data between the processor and the device +takes place through the I/O port address of the device, which is a + hexadecimal +number. No two devices can share the same I/O port. Many devices use + multiple +I/O port addresses, which are expressed as a range of hexadecimal +numbers. + +The exact information displayed is system-dependent. On some +systems, I/O port information can not yet be displayed. + +On &Linux;, this information is read from /proc/ioports which is only available if +the /proc pseudo-filesystem is +compiled into the kernel. A list of all currently-registered I/O port +regions that are in use is shown. + +The first column is the I/O port (or the range of I/O ports), the +second column identifies the device that uses these I/O ports. + +The user cannot modify any settings on this page. + + +
diff --git a/doc/kinfocenter/memory/Makefile.am b/doc/kinfocenter/memory/Makefile.am new file mode 100644 index 000000000..e9a9e23ef --- /dev/null +++ b/doc/kinfocenter/memory/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/memory diff --git a/doc/kinfocenter/memory/index.docbook b/doc/kinfocenter/memory/index.docbook new file mode 100644 index 000000000..19d10fc57 --- /dev/null +++ b/doc/kinfocenter/memory/index.docbook @@ -0,0 +1,108 @@ + + + +]> + +
+Memory Information + + + +&Mike.McBride; + + + + + +2002-02-13 +3.00.00 + + +KDE +KControl +memory +system information + + + + +Memory Information + +This module displays the current memory usage. It is updated +constantly, and can be very useful for pinpointing bottlenecks when certain +applications are executed. + + +Memory Types + +The first thing you must understand, is there are two types of +memory, available to the operating system and the programs +that run within it. + +The first type, is called physical memory. This is the memory located +within the memory chips, within your computer. This is the +RAM (for Random Access Memory) you bought when you +purchased your computer. + +The second type of memory, is called virtual or swap memory. This +block of memory, is actually space on the hard drive. The operating +system reserves a space on the hard drive for swap space. +The operating system can use this virtual memory (or swap space), if it +runs out of physical memory. The reason this is called +swap memory, is the operating system takes some data that +it doesn't think you will want for a while, and saves that to disk in +this reserved space. The operating system then loads the new data you +need right now. It has swapped the not needed data, for +the data you need right now. Virtual or swap memory is not as fast as +physical memory, so operating systems try to keep data (especially often +used data), in the physical memory. + +The total memory, is the combined total of physical memory and +virtual memory. + + + + +Memory Information Module + +This window is divided into a top and bottom section + +The top section shows you the total physical memory, total free + physical memory, shared memory, and buffered memory. + +All four values are represented as the total number of bytes, and + as the number of megabytes (1 megabyte = slightly more than 1,000,000 + bytes) + +The bottom section shows you three graphs: + + +Total Memory (this is the combination of physical and virtual memory). +Physical Memory +Virtual memory, or Swap Space. + + +The green areas are free, and the red areas are used. + +The exact values of each type of memory are not critical, and + they change regularly. When you evaluate this page, look at + trends. + +Does your computer have plenty of free space (green areas)? If + not, you can increase the swap size or increase the physical + memory. + +Also, if your computer seems sluggish: is your physical memory + full, and does the hard drive always seem to be running? This suggests + that you do not have enough physical memory, and your computer is + relying on the slower virtual memory for commonly used data. Increasing + your physical memory will improve the responsiveness of your + computer. + + + + + +
diff --git a/doc/kinfocenter/nics/Makefile.am b/doc/kinfocenter/nics/Makefile.am new file mode 100644 index 000000000..73ab1b332 --- /dev/null +++ b/doc/kinfocenter/nics/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/nics diff --git a/doc/kinfocenter/nics/index.docbook b/doc/kinfocenter/nics/index.docbook new file mode 100644 index 000000000..f82552c28 --- /dev/null +++ b/doc/kinfocenter/nics/index.docbook @@ -0,0 +1,45 @@ + + + +]> + +
+Network Interfaces + + + +&Lauri.Watts; + + + +2002-02-11 +3.00.00 + + +KDE +KControl +Network +Interfaces + + + + + +Network Interfaces + + +This page displays information about the network interfaces +installed in your computer. + + +The exact information displayed is system-dependent. On +some systems, this information can not yet be displayed. + +The user cannot modify any settings on this page. + + + + +
diff --git a/doc/kinfocenter/opengl/Makefile.am b/doc/kinfocenter/opengl/Makefile.am new file mode 100644 index 000000000..cc8923bc3 --- /dev/null +++ b/doc/kinfocenter/opengl/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG= en +KDE_DOCS = kinfocenter/opengl diff --git a/doc/kinfocenter/opengl/index.docbook b/doc/kinfocenter/opengl/index.docbook new file mode 100644 index 000000000..62af34008 --- /dev/null +++ b/doc/kinfocenter/opengl/index.docbook @@ -0,0 +1,47 @@ + + + +]> + +
+<acronym>OpenGL</acronym> + + + +IlyaKorniykok_ilya@ukr.net + + + + + + + + +KDE +KControl +OpenGL +system information + + + + + +OpenGL + +This page displays information about installed OpenGL implementation. +OpenGL (for "Open Graphics Library") is a cross-platform, +hardware independent interface for 3D graphics. + +GLX is the binding for OpenGL to X Window system. + + DRI (Direct Rendering Infrastucture) provides hardware acceleration for OpenGL. +You must have a videocard with 3D accelerator and properly installed driver for this. + + +Read more at the official OpenGL site http://www.opengl.org + + + +
diff --git a/doc/kinfocenter/partitions/Makefile.am b/doc/kinfocenter/partitions/Makefile.am new file mode 100644 index 000000000..7eab338b4 --- /dev/null +++ b/doc/kinfocenter/partitions/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/partitions diff --git a/doc/kinfocenter/partitions/index.docbook b/doc/kinfocenter/partitions/index.docbook new file mode 100644 index 000000000..f3655a8cf --- /dev/null +++ b/doc/kinfocenter/partitions/index.docbook @@ -0,0 +1,56 @@ + + + +]> + +
+Partition Information + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +drive partition +system information + + + + +Partition Information + +This page displays information about partitions on your hard +drives. + +The exact information displayed is system-dependent. On +some systems, partition information cannot be displayed +yet. + +On &Linux;, this information is read from /proc/partitions, which is only available +if the /proc pseudo-filesystem is +compiled into the (2.1.x or later) kernel. + +The first two columns are the major and minor numbers +respectively. The third column is the number of blocks (usually 1 +block = 1024 bytes). The fourth column is a label for the +device. + +The user cannot modify any settings on this page. + + + +
+ diff --git a/doc/kinfocenter/pci/Makefile.am b/doc/kinfocenter/pci/Makefile.am new file mode 100644 index 000000000..b6702265a --- /dev/null +++ b/doc/kinfocenter/pci/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/pci diff --git a/doc/kinfocenter/pci/index.docbook b/doc/kinfocenter/pci/index.docbook new file mode 100644 index 000000000..1d4d8b3f9 --- /dev/null +++ b/doc/kinfocenter/pci/index.docbook @@ -0,0 +1,57 @@ + + + +]> + +
+<acronym>PCI</acronym>-bus and Installed <acronym>PCI</acronym> Cards + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +PCI +system information + + + + + +<acronym>PCI</acronym>-bus and Installed <acronym>PCI</acronym> +Cards + +This page displays information about the +PCI-bus and installed PCI cards, +and other devices that use the Peripheral Component Interconnect +(PCI) bus. + +The exact information displayed is system-dependent. On some +systems, PCI-information can not yet be +displayed. + +On &Linux;, this information is read from /proc/pci which is only available if the +/proc pseudo-filesystem is +compiled into the kernel. A listing of all PCI +devices found during kernel initialization, and their configuration, is +shown. + +Each entry begins with a bus, device and function number. +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/pcmcia/Makefile.am b/doc/kinfocenter/pcmcia/Makefile.am new file mode 100644 index 000000000..23040b3c9 --- /dev/null +++ b/doc/kinfocenter/pcmcia/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/pcmcia diff --git a/doc/kinfocenter/pcmcia/index.docbook b/doc/kinfocenter/pcmcia/index.docbook new file mode 100644 index 000000000..901fdf2e5 --- /dev/null +++ b/doc/kinfocenter/pcmcia/index.docbook @@ -0,0 +1,38 @@ + + + +]> + +
+<acronym>PCMCIA</acronym> + + + +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +Laptop +PCMCIA + + + + +<acronym>PCMCIA</acronym> + +This module displays information about PCMCIA +Cards + +The exact information is system dependent. On most systems no +information is displayed at all. + + +
diff --git a/doc/kinfocenter/processor/Makefile.am b/doc/kinfocenter/processor/Makefile.am new file mode 100644 index 000000000..7cdf67a93 --- /dev/null +++ b/doc/kinfocenter/processor/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/processor diff --git a/doc/kinfocenter/processor/index.docbook b/doc/kinfocenter/processor/index.docbook new file mode 100644 index 000000000..3794aca67 --- /dev/null +++ b/doc/kinfocenter/processor/index.docbook @@ -0,0 +1,56 @@ + + + +]> + +
+Processor Information + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +CPU +processor +system information + + + + +Processor Information + +This page displays information about the system +Central Processing Unit (CPU). + +The exact information displayed is system-dependent. On +some systems, processor information cannot be displayed +yet. + +On &Linux;, this information is read from /proc/cpuinfo, which is only available if +the /proc pseudo-filesystem is +compiled into the kernel. + +The exact contents of the window will depend on the +CPU(s) in your machine, but the window is organized +into two columns. The first column is the parameter, and the second +column is the value of that parameter. + +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/protocols/Makefile.am b/doc/kinfocenter/protocols/Makefile.am new file mode 100644 index 000000000..afc73fa8a --- /dev/null +++ b/doc/kinfocenter/protocols/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/protocols diff --git a/doc/kinfocenter/protocols/index.docbook b/doc/kinfocenter/protocols/index.docbook new file mode 100644 index 000000000..a5a37658b --- /dev/null +++ b/doc/kinfocenter/protocols/index.docbook @@ -0,0 +1,39 @@ + + + +]> + +
+Protocols + + + +&Lauri.Watts; + + + + +KDE +Protocols +IOSlaves + + + + +Protocols + +On the left of the panel you will see a list of the IOSlaves that +are installed on your system. IOSlaves are how &kde; applications +talk to other computers, other applications, or act on +files. + +Clicking on an IOSlave name will display some help information +about that IOSlave, such as how to use it, and what it does. + +The protocols module is purely informational, you cannot change +any settings here. + + +
\ No newline at end of file diff --git a/doc/kinfocenter/samba/Makefile.am b/doc/kinfocenter/samba/Makefile.am new file mode 100644 index 000000000..91de8fa54 --- /dev/null +++ b/doc/kinfocenter/samba/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/samba + diff --git a/doc/kinfocenter/samba/index.docbook b/doc/kinfocenter/samba/index.docbook new file mode 100644 index 000000000..37b14c48c --- /dev/null +++ b/doc/kinfocenter/samba/index.docbook @@ -0,0 +1,207 @@ + + + +]> + +
+Samba Status Information + + +&Alexander.Neundorf; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +Samba +system information + + + + + + +Samba Status Information + +The Samba and NFS Status Monitor is a front end +to the programs smbstatus and +showmount. Smbstatus reports on current Samba +connections, and is part of the suite of Samba tools, which implements +the SMB (Session Message Block) protocol, also called +the NetBIOS or LanManager protocol. + +This protocol can be used to provide printer sharing or drive +sharing services on a network including machines running the various +flavors of &Microsoft; &Windows;. + +showmount is part of the NFS +software package. NFS stands for Network File System +and is the traditional &UNIX; way to share folders over the +network. In this case the output of showmount + is parsed. On some systems showmount is in +/usr/sbin, check if you have +showmount in your PATH. + + +Exports + +On this page you can see a big list which shows the currently +active connections to Samba shares and NFS exports of +your machine. The first column shows you whether the resource is a Samba +(SMB) share or a NFS export. The +second column contains the name of the share, the third the name of the +remote host, which accesses this share. The remaining columns have only +a meaning for Samba-shares. + +The fourth column contains the User ID of the +user, who accesses this share. Note that this does not have to be equal +to the &UNIX; user ID of this user. The same applies +for the next column, which displays the group ID of the +user. + +Each connection to one of your shares is handled by a single +process (smbd), the next column shows the process +ID (pid) of this +smbd. If you kill this process the connected user +will be disconnected. If the remote user works from &Windows;, as soon +as this process is killed a new one will be created, so he will almost +not notice it. + +The last column shows how many files this user has currently open. +Here you see only, how many files he has open just +now, you don't see how many he copied or formerly opened &etc; + + + + +Imports + + Here you see which Samba- and NFS-shares from +other hosts are mounted on your local system. The first column shows +wether it is a Samba- or NFS-share, the second column +displays the name of the share, and the third shows where it is +mounted. + +The mounted NFS-shares you should see on +&Linux; (this has been tested), and it should also work on &Solaris; +(this has not been tested). + + + + +Log + +This page presents the contents of your local samba log file in a +nice way. If you open this page, the list will be empty. You have to +press the Update button, then the samba log file +will be read and the results displayed. Check whether the samba log file +on your system is really at the location as specified in the input +line. If it is somewhere else or if it has another name, correct +it. After changing the file name you have to press +Update again. + +Samba logs its actions according to the log level (see +smb.conf). If loglevel = 1, samba logs only when +somebody connects to your machine and when this connection is closed +again. If log level = 2, it logs also if somebody opens a file and if he +closes the file again. If the log level is higher than 2, yet more +stuff is logged. + +If you are interested in who accesses your machine, and which +files are accessed, you should set the log level to 2 and regularly +create a new samba log file (⪚ set up a cron task +which once a week moves your current samba log file into another +folder or something like that). Otherwise your samba log file may +become very big. + +With the four checkboxes below the big list you can decide, which +events are displayed in the list. You have to press +Update to see the results. If the log level of +your samba is too low, you won't see everything. + +By clicking on the header of one column you can sort the list by +this column. + + + + + +Statistics + +On this page you can filter the contents of the third page for +certain contents. + +Let's say the Event field (not the one in the +list) is set to Connection, +Service/File is set to *, +Host/User is set to *, +Show expanded service info is disabled and +Show expanded host info is disabled. + +If you press Update now, you will see how +often a connection was opened to share * (&ie; to any +share) from host * (&ie; from any host). Now enable +Show expanded host info and press +Update again. Now you will see for every host +which matches the wildcard *, how many connections +were opened by him. + +Now press clear. + +Now set the Event field to File Access and +enable Show expanded service info and press +Update again. + +Now you will see how often every single file was accessed. If you +enable Show expanded host info too, you will see +how often every single user opened each file. + +In the input lines Service/File and +Host/User you can use the wildcards +* and ? in the same way you use +them at the command line. Regular expressions are not +recognized. + +By clicking on the header of a column you can sort the list by +this column. This way you can check out which file was opened most +often, or which user opened the most files or whatever. + + + + + +Section Author + +Module copyright 2000: Michael Glauche and &Alexander.Neundorf; &Alexander.Neundorf.mail; + +Originally written by: Michael Glauche + +Currently maintained by: &Alexander.Neundorf; &Alexander.Neundorf.mail; + + +Contributors +Conversion to kcontrol applet: +&Matthias.Hoelzer-Kluepfel; &Matthias.Hoelzer-Kluepfel.mail; +Use of KProcess instead of popen, and more error checking: +&David.Faure; &David.Faure.mail; +Conversion to kcmodule, added tab pages 2,3,4, bug +fixed: +&Alexander.Neundorf; &Alexander.Neundorf.mail; + + +Documentation copyright 2000 &Alexander.Neundorf; &Alexander.Neundorf.mail; + +Documentation translated to docbook by &Mike.McBride; &Mike.McBride.mail; + + + + + + +
\ No newline at end of file diff --git a/doc/kinfocenter/scsi/Makefile.am b/doc/kinfocenter/scsi/Makefile.am new file mode 100644 index 000000000..09cdb4e25 --- /dev/null +++ b/doc/kinfocenter/scsi/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = kinfocenter/scsi diff --git a/doc/kinfocenter/scsi/index.docbook b/doc/kinfocenter/scsi/index.docbook new file mode 100644 index 000000000..87ec0934f --- /dev/null +++ b/doc/kinfocenter/scsi/index.docbook @@ -0,0 +1,56 @@ + + + +]> + +
+<acronym>SCSI</acronym> Interface Information + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +SCSI +system information + + + + + +<acronym>SCSI</acronym> Interface Information + +This page displays information about Small Computer Systems +Interface (SCSI) Interfaces and the attached +SCSI devices. + +The exact information displayed is system-dependent. On +some systems SCSI information cannot be displayed +yet. + +On &Linux;, this information is read from /proc/scsi/scsi, which is only available +if the /proc pseudo-filesystem is +compiled into the kernel. A listing of all SCSI +devices known to the kernel is shown. + +The devices are sorted numerically by their host, channel, and +ID numbers. + +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/sound/Makefile.am b/doc/kinfocenter/sound/Makefile.am new file mode 100644 index 000000000..611f571ca --- /dev/null +++ b/doc/kinfocenter/sound/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/sound diff --git a/doc/kinfocenter/sound/index.docbook b/doc/kinfocenter/sound/index.docbook new file mode 100644 index 000000000..de1fd601d --- /dev/null +++ b/doc/kinfocenter/sound/index.docbook @@ -0,0 +1,51 @@ + + + +]> + +
+Soundcard Information + + + +&Matthias.Hoelzer-Kluepfel; +&Helge.Deller; +&Duncan.Haldane; +&Mike.McBride; + + + +2002-02-12 +3.00.00 + + +KDE +KControl +soundcard +system information + + + + + +Soundcard Information + +This page displays information about any soundcards installed in the +system. + +The exact information displayed is system-dependent. On some +systems, soundcard information cannot be displayed yet. + +On &Linux;, this information is read either from /dev/sndstat, if present, or from +/proc/sound, which is only +available if the /proc +pseudo-filesystem is compiled into the (2.1.x or later) kernel. + +The user cannot modify any settings on this page. + + + +
diff --git a/doc/kinfocenter/usb/Makefile.am b/doc/kinfocenter/usb/Makefile.am new file mode 100644 index 000000000..80cc84914 --- /dev/null +++ b/doc/kinfocenter/usb/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/usb diff --git a/doc/kinfocenter/usb/index.docbook b/doc/kinfocenter/usb/index.docbook new file mode 100644 index 000000000..8936fa796 --- /dev/null +++ b/doc/kinfocenter/usb/index.docbook @@ -0,0 +1,43 @@ + + + +]> + +
+<acronym>USB</acronym> + + + + + + + + + + + + +2002-02-12 +3.00.00 + + +KControl +USB +System Information + + + + + +<acronym>USB</acronym> + +This module allows you to see the devices attached to your +USB bus(es). + +This module is for information only, you cannot edit any +information you see here. + + +
\ No newline at end of file diff --git a/doc/kinfocenter/xserver/Makefile.am b/doc/kinfocenter/xserver/Makefile.am new file mode 100644 index 000000000..f72dcdbbf --- /dev/null +++ b/doc/kinfocenter/xserver/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG= en +KDE_DOCS = kinfocenter/xserver diff --git a/doc/kinfocenter/xserver/index.docbook b/doc/kinfocenter/xserver/index.docbook new file mode 100644 index 000000000..a56e47fb3 --- /dev/null +++ b/doc/kinfocenter/xserver/index.docbook @@ -0,0 +1,56 @@ + + + +]> + +
+X Server Information + + + +&Mike.McBride; + + + + + +2002-02-12 +3.00.00 + + +KDE +KControl +X server +system information + + + + +X Server Information + +This screen is useful for getting specific information about your +X server and the current session of X. + +When you open this module, you are presented with some +information. The left hand side of the window is organized into a +tree. Some of the elements have a plus sign in front of the label. +Clicking this sign opens a submenu related to the +label. Clicking on a minus sign in front of a label hides the +submenu. + +The right hand side of the window contains the individual +values for each of the parameters on the left. + +The information presented will vary depending on your +setup. + +Some setups may not be able to determine some or all of the +parameters. + +You can not change any values from this menu. It is for +information only. + + +
diff --git a/doc/kioslave/Makefile.am b/doc/kioslave/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/kioslave/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/kioslave/bzip.docbook b/doc/kioslave/bzip.docbook new file mode 100644 index 000000000..9a3dc90cb --- /dev/null +++ b/doc/kioslave/bzip.docbook @@ -0,0 +1,29 @@ +
+bzip + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +bzip is a compression program. It is rarely +used today, having been replaced with bzip2, which offers much better +compression. + +The bzip kioslave is not directly usable, and is intended for use +as a filter. For example, the tar kioslave can filter a file through +the bzip kioslave, in order to display the contents of a tar.bz file directly in a &konqueror; +window. + +If you click on a file compressed with a bz extension in &konqueror;, this kioslave is +used to uncompress it and display it as a normal (uncompressed) +file. + +If you are a developer, and would like to use the bzip filter, +you can find documentation on using kioslaves at http://developer.kde.org + +
diff --git a/doc/kioslave/bzip2.docbook b/doc/kioslave/bzip2.docbook new file mode 100644 index 000000000..9551632a5 --- /dev/null +++ b/doc/kioslave/bzip2.docbook @@ -0,0 +1,29 @@ +
+bzip2 + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +Bzip2 is a compression program + +The bzip2 kioslave is not directly usable, and is intended for use +as a filter. For example, the tar kioslave can filter a file through +the bzip2 kioslave, in order to display the contents of a tar.bz2 file directly in a &konqueror; +window. + +If you click on a file compressed with a .bz2 in &konqueror;, this kioslave is used to +uncompress it and display it as a normal (uncompressed) file. + +If you are a developer, and would like to use the bzip2 filter, +you can find documentation on using kioslaves at http://developer.kde.org + + See the manual: bzip2. + + +
diff --git a/doc/kioslave/cgi.docbook b/doc/kioslave/cgi.docbook new file mode 100644 index 000000000..5df94da13 --- /dev/null +++ b/doc/kioslave/cgi.docbook @@ -0,0 +1,24 @@ +
+cgi + + +&Lauri.Watts;&Lauri.Watts.mail; + + + + +The CGI slave provides a way to execute +CGI programs without the need to have a running web +server. This can for example be used for local testing of +CGI programs or for using search engines that only +provide a CGI frontend like the one from +Doxygen. + +The slave implements the cgi: protocol. It +uses the filename from the given &URL; and searches a configurable +list of folders. If it finds an executable with the given name it +executes it, passes the arguments of the &URL; and sets the +environment variables needed by CGI +programs. + +
diff --git a/doc/kioslave/data.docbook b/doc/kioslave/data.docbook new file mode 100644 index 000000000..ca0e4e9a5 --- /dev/null +++ b/doc/kioslave/data.docbook @@ -0,0 +1,47 @@ +
+Data URLs + + + +LeoSavernik +
l.savernik@aon.at
+
+ +
+ +2003-02-06 + + +
+ +Data URLs allow small document data to be included in the URL itself. +This is useful for very small HTML testcases or other occasions that do not +justify a document of their own. + +data:,foobar +(note the comma after the colon) will deliver a text document that contains +nothing but foobar + + +The last example delivered a text document. For HTML documents one +has to specify the MIME type text/html: +data:text/html,<title>Testcase</title><p>This +is a testcase</p>. This will produce exactly the same +output as if the content had been loaded from a document of its own. + + +Specifying alternate character sets is also possible. Note that 8-Bit +characters have to be escaped by a percentage sign and their two-digit +hexadecimal codes: +data:;charset=iso-8859-1,Gr%FC%DFe aus Schl%E4gl +results in +Grüße aus Schlägl +whereas omitting the charset attribute might lead to something like +Gr??e aus Schl?gl + + +IETF +RFC2397 provides more information. + +
+ diff --git a/doc/kioslave/file.docbook b/doc/kioslave/file.docbook new file mode 100644 index 000000000..a9031a259 --- /dev/null +++ b/doc/kioslave/file.docbook @@ -0,0 +1,20 @@ +
+file + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + + +The file protocol is used by all &kde; applications to +display locally available files. + + +Entering +file:/directoryname in &konqueror; + lists the files of this folder. + + +
diff --git a/doc/kioslave/finger.docbook b/doc/kioslave/finger.docbook new file mode 100644 index 000000000..27b278c48 --- /dev/null +++ b/doc/kioslave/finger.docbook @@ -0,0 +1,33 @@ +
+finger + + +&Lauri.Watts;&Lauri.Watts.mail; + + + + +Finger is a program to display information about users. + +If finger is enabled on the remote machine, you may be given +information on the user's real name, if they are currently logged in, if +they have mail and the text of their .plan file in +their home folder. + +Finger is normally associated with a user@hostname address, which +may or may not be the same as a users email address. + +Most Internet Service Providers no longer allow finger access, so, +you may find that you get no useful answer for most people. + +Other people use their local .plan file to +hold such information as PGP keys, the fact they are +on vacation, and all sorts of information. + +Use the finger kioslave like this: +finger://username@hostname + + See the manual: finger. + + +
diff --git a/doc/kioslave/fish.docbook b/doc/kioslave/fish.docbook new file mode 100644 index 000000000..5063abd04 --- /dev/null +++ b/doc/kioslave/fish.docbook @@ -0,0 +1,66 @@ +
+fish + + +&Joerg.Walter; &Joerg.Walter.mail; +&Brad.Hards; &Brad.Hards.mail; + + + +2005-02-29 +1.1.2 + + + +Allows you to access another computer's files using the SEcure Shell (SSH) protocol. The remote computer needs to be running the SSH daemon, but the remainder of the protocol uses standard commandline tools as discussed below. + +You can use the fish kioslave like this: +fish://hostname or fish://username@hostname. + +You need to use double forward slashes. + +You can omit the username (and the trailing +@ symbol) if you have the same username on both computers. + +You can add a password in the format: +fish://username:password@hostname +but it is not necessary as you will be prompted for one if it is not +supplied. + +If you are running the SSH daemon on a non-standard +port, you can specify that port using the normal &URL; syntax as shown +below: +fish://hostname:portnumber. + +Fish should work with any roughly POSIX compatible +&UNIX; based remote computer. It uses the shell commands +cat, chgrp, +chmod, chown, +cp, dd, +env, expr, +grep, ls, +mkdir, mv, +rm, rmdir, +sed, +and wc. Fish starts +/bin/sh as its shell and expects it to be a +Bourne shell (or compatible, like bash). +If the sed and +file commands are available, as well as a +/etc/apache/magic file with &MIME; type +signatures, these will be used to guess &MIME; types. + + +If Perl is available on the remote +machine, it will be used instead. Then only env and +/bin/sh are needed. Using +Perl has the additional benefit of being +faster. + +Fish may even work on &Windows; machines, if tools like +Cygwin are installed. All the above +utilities must be in the system PATH, and the initial +shell must be able to process the command echo +FISH:;/bin/sh correctly. + +
diff --git a/doc/kioslave/floppy.docbook b/doc/kioslave/floppy.docbook new file mode 100644 index 000000000..ff32c217c --- /dev/null +++ b/doc/kioslave/floppy.docbook @@ -0,0 +1,51 @@ +
+Floppy + + +&Alexander.Neundorf; &Alexander.Neundorf.mail; + + + + + +The floppy ioslave gives you easy access to the floppy disk drives +installed on your system. + + + +The drive letter becomes the first subdirectory +in the floppy &URL;. Let's say there is a file logo.png on your floppy +disk in drive A, then the &URL; will be floppy:/a/logo.png + + + +If you want to access drive B, floppy:/b will do it. +floppy:/ is a shortcut for floppy:/a. + + +Note that floppy:/logo.png means you have a disk drive +named logo.png. + + +To use it you need to have the mtools package +installed, and the floppy ioslave supports everything the various mtools +command line utilities support. You don't have to mount your floppy disks, +simply enter floppy:/ in any &kde; 3.x app and you will be able to +read from and write to your floppy drive. + + +It also works with USB sticks, ZIP and JAZ drives. +You can use floppy:/u for the USB stick and floppy:/z for the zip drive, for example. +To make this work, you might need to adjust your /etc/mtools file. See the manpage +for documentation. + + +The ioslave gives read and write access to the floppy drive, but not +simultaneously. While you can read and write to the floppy during the same +session, reading and writing have to happen one after the other, not at the same +time. + +Author: Alexander Neundorf neundorf@kde.org + +
+ diff --git a/doc/kioslave/ftp.docbook b/doc/kioslave/ftp.docbook new file mode 100644 index 000000000..3d4114850 --- /dev/null +++ b/doc/kioslave/ftp.docbook @@ -0,0 +1,43 @@ +
+&FTP; + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + + +&FTP; is the Internet service used to transfer a data file from the disk of +one computer to the disk of another, regardless of the operating system type. + + + Similar to other Internet applications, &FTP; uses the +client-server approach — a user invokes an &FTP; program on the +computer, instructs it to contact a remote computer, and then requests +the transfer of one or more files. The local &FTP; program becomes a +client that uses TCP to contact an &FTP; server +program on the remote computer. Each time the user requests a file +transfer, the client and the server programs cooperate to send a copy +of the data across the Internet. + + &FTP; servers which allow anonymous &FTP; permit +any user, not only users with accounts on the host, to browse the +ftp archives and download files. Some &FTP; servers are +configured to allow users to upload files. + + +&FTP; is commonly used to retrieve information and obtain software stored in +files at &FTP; archive sites throughout the world. + + + + +Source: Paraphrased from +http://tlc.nlm.nih.gov/resources/tutorials/internetdistlrn/ftpdef.htm + + + See the manual: ftp. + +
diff --git a/doc/kioslave/gopher.docbook b/doc/kioslave/gopher.docbook new file mode 100644 index 000000000..29e418faf --- /dev/null +++ b/doc/kioslave/gopher.docbook @@ -0,0 +1,39 @@ +
+gopher + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + + +gopher began as a distributed campus information service +at the University of Minnesota. Gopher allows the user to access information +on Gopher servers running on Internet hosts. + + +Gopher is an Internet information browsing service that uses a menu-driven +interface. Users select information from menus, which may return another +menu or display a text file. An item may reside on a Gopher server you +originally queried, or it may be on another Gopher server (or another host). +Gopher can tunnel from one Gopher to another without the +user knowing that the server and/or host machine have changed. Gopher keeps +the exact location of computers hidden from the user, providing the +illusion of a single, large set of interconnected menus. + + + +Gopher permits the user to record an item's location in a +bookmark thereby allowing users to follow a +bookmark directly to a particular item without +searching the menu system. Gopher menus are not standardized, inasmuch as +each Gopher server is individually determined. + + + +Source: + http://tlc.nlm.nih.gov/resources/tutorials/internetdistlrn/gophrdef.htm + +
diff --git a/doc/kioslave/gzip.docbook b/doc/kioslave/gzip.docbook new file mode 100644 index 000000000..906f0d654 --- /dev/null +++ b/doc/kioslave/gzip.docbook @@ -0,0 +1,30 @@ +
+gzip + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +gzip is a compression program + +The gzip kioslave is not directly usable, and is intended for use +as a filter. For example, the tar kioslave can filter a file through +the gzip kioslave, in order to display the contents of a tar.gz file directly in a &konqueror; +window. + +If you click on a file compressed with a gz extension in &konqueror;, this kioslave is +used to uncompress it and display it as a normal (uncompressed) +file. + +If you are a developer, and would like to use the gzip filter, you +can find documentation on using kioslaves at http://developer.kde.org + + See the manual: gzip. + + +
diff --git a/doc/kioslave/help.docbook b/doc/kioslave/help.docbook new file mode 100644 index 000000000..0b38cb93f --- /dev/null +++ b/doc/kioslave/help.docbook @@ -0,0 +1,17 @@ +
+help + + +&Ferdinand.Gassauer;&Ferdinand.Gassauer.mail; + + + + + +The help system of &kde; + + + See The &khelpcenter;. + + +
diff --git a/doc/kioslave/http.docbook b/doc/kioslave/http.docbook new file mode 100644 index 000000000..0d6a8cef6 --- /dev/null +++ b/doc/kioslave/http.docbook @@ -0,0 +1,25 @@ +
+http + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +http is the +HyperText +Transfer Protocol. + +The http kioslave is used by all &kde; applications to handle +connections to http servers, that is, web servers. The most common +usage is to view web pages in the &konqueror; web browser. + +You can use the http kioslave in &konqueror; by giving it a +URL. +http://www.kde.org. + + See the manual: http. + + +
diff --git a/doc/kioslave/https.docbook b/doc/kioslave/https.docbook new file mode 100644 index 000000000..38772f5dc --- /dev/null +++ b/doc/kioslave/https.docbook @@ -0,0 +1,21 @@ +
+https + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + +HTTPS is +HTTP + encapsulated in an SSL/TLS stream. + + +SSL is the Secure Sockets Layer protocol, a security protocol that provides communications privacy over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. + + +TLS stands for Transport Layer Security + + +
diff --git a/doc/kioslave/imap.docbook b/doc/kioslave/imap.docbook new file mode 100644 index 000000000..e34c1e4e9 --- /dev/null +++ b/doc/kioslave/imap.docbook @@ -0,0 +1,31 @@ +
+imap + + +&Michael.Haeckel; &Michael.Haeckel.mail; + + + +2001-08-07 + + + + +The IMAP4rev1 protocol (Internet Message Access Protocol) allows +access to messages in mail folders on a server. Unlike POP3, which is designed +to download the mails and delete them from the server, the purpose of IMAP is +to store all mails on the server to be able to access these mails from +everywhere. Messages can be stored on the server, retrieved from there or +moved between folders. + +This plugin is currently mainly used by KMail, but you can also use it +in any other KDE application that uses kioslave plugins. + +For example in &konqueror;, simply type +imap://username@your.mail.server/ to get your IMAP +folders listed. You can then deal with the folders and mails like with folders +and files on a local file system. +IMAP URLs are defined in RFC 2192. + + +
diff --git a/doc/kioslave/imaps.docbook b/doc/kioslave/imaps.docbook new file mode 100644 index 000000000..d5f8e7b6f --- /dev/null +++ b/doc/kioslave/imaps.docbook @@ -0,0 +1,17 @@ +
+imaps + + +&Michael.Haeckel; &Michael.Haeckel.mail; + + + +2001-08-07 + + + + +IMAPS is the IMAP protocol +encrypted via SSL. + +
diff --git a/doc/kioslave/index.docbook b/doc/kioslave/index.docbook new file mode 100644 index 000000000..6f70d6e23 --- /dev/null +++ b/doc/kioslave/index.docbook @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KDEPrint"> +FerdinandGassauer'> +f.gassauer@aon.at'> + + +]> + + +IO-Slaves +&kio-bzip; +&kio-bzip2; +&kio-cgi; +&kio-data; +&kio-file; +&kio-finger; +&kio-fish; +&kio-floppy; +&kio-ftp; +&kio-gopher; +&kio-gzip; +&kio-help; +&kio-http; +&kio-https; +&kio-imap; +&kio-imaps; +&kio-info; +&kio-lan; +&kio-ldap; +&kio-mailto; +&kio-mac; +&kio-man; +&kio-mrml; +&kio-news; +&kio-nfs; +&kio-nntp; +&kio-pop3; +&kio-pop3s; +&kio-print; +&kio-rlan; +&kio-rlogin; +&kio-sftp; +&kio-smb; +&kio-smtp; +&kio-tar; +&kio-telnet; +&kio-thumbnail; +&kio-webdav; +&kio-webdavs; + + + diff --git a/doc/kioslave/info.docbook b/doc/kioslave/info.docbook new file mode 100644 index 000000000..1ea645c33 --- /dev/null +++ b/doc/kioslave/info.docbook @@ -0,0 +1,36 @@ +
+Info + + +&Lauri.Watts; &Lauri.Watts.mail; + + Nicolas + Goutte + goutte@kde.org + + + + + +Info is a type of documentation. The documents are in a file +format called texinfo, and can be read on the command line with the +info program. + +The Info ioslave allows you to read the info pages installed on +your system, from within &konqueror;. You can use it very easily: + +info:gcc + +This would show you the top level node of the Info documentation +for the &gcc; compiler. + +Info is a &GNU; replacement for +man, but is not widely used outside of +&GNU; software. + +You can quite easily browse the info documentation you have +installed from within the &khelpcenter; application, or you can use the +info ioslave directly from within both &konqueror; and the +mini-cli. + +
diff --git a/doc/kioslave/lan.docbook b/doc/kioslave/lan.docbook new file mode 100644 index 000000000..c494b5767 --- /dev/null +++ b/doc/kioslave/lan.docbook @@ -0,0 +1,23 @@ +
+lan + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + + +This protocol is intended to provide a kind of network +neighborhood but only relying on the TCP/IP protocol stack and with +the ability to use other protocols than just SMB. + +The lan kioslave can use &FTP;, &HTTP;, SMB, +NFS, and FISH + +It must first be configured in &kcontrol;, +NetworkLAN-Browsing + and for more information see the +Lan Browsing manual. + +
diff --git a/doc/kioslave/ldap.docbook b/doc/kioslave/ldap.docbook new file mode 100644 index 000000000..ff23339c3 --- /dev/null +++ b/doc/kioslave/ldap.docbook @@ -0,0 +1,23 @@ +
+ldap + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +ldap is the lightweight directory access +protocol. It provides access to an X.500 directory, or to a stand-alone +LDAP server. + +You can use the ldap kioslave as follows: + +ldap://host:port/ou=People,o=where,c=de??sub +for a subtree-query + +or +ldap://host:port/cn=MM,ou=People,o=where,c=de??base +for a complete branch. + +
diff --git a/doc/kioslave/mac.docbook b/doc/kioslave/mac.docbook new file mode 100644 index 000000000..a1398c39a --- /dev/null +++ b/doc/kioslave/mac.docbook @@ -0,0 +1,53 @@ +
+mac + + +JohnathanRiddelljr@jriddell.org + + + + + +The mac ioslave lets you read an HFS+ partition from &konqueror; +or any other &kde; file dialog. It uses hfsplus +tools, so you will need these installed for it to work. + +Enter mac:/ into &konqueror; and you +should see the contents of your &MacOS; partition. If you have not +used kio-mac before, you will probably get an error message saying you +have not specified the right partition. Enter something like +mac:/ to specify +the partition (if you don't know which partition &MacOS; is on, you +can probably guess by changing hda2 to hda3 and so on or use the print +command from mac-fdisk). This partition will be +used the next time, so you do not have to specify it each time. + +Hfsplus tools let you see the file and copy +data from the HFS+ partition, but not to copy data to it or change the +filenames. + +HFS+ actually keeps two files for every one you see (called +forks), a resource fork and a data fork. The default copy mode when +you are copying files across to your native drive is raw data, which +means it only copies the data fork. Text files are copied in text mode +(same as raw format but changes the line endings to be &UNIX; friendly +and gets rid of some extra characters - strongly advised for text +files), unless you specify otherwise. You can also copy the files +across in Mac Binary II format or specify text or raw format with +another query: +mac:/ or +mac:/. See the +hpcopy man page for more. + +Note that you need permissions to read your HFS+ partition. How +you get this depends on your distribution. + +For some reason some folders in &MacOS; end in a funny tall +f character. This seems to confuse hfstools. + +
+ diff --git a/doc/kioslave/mailto.docbook b/doc/kioslave/mailto.docbook new file mode 100644 index 000000000..3603aea8d --- /dev/null +++ b/doc/kioslave/mailto.docbook @@ -0,0 +1,17 @@ +
+mailto + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + +The mailto kioslave is used when you click on a mailto link in an +HTML page. &konqueror; will open the preferred mail +client you have configured, with a composer window. Any information +supplied in the URL will be filled in for you. + + +See the manual: mailto. + +
diff --git a/doc/kioslave/man.docbook b/doc/kioslave/man.docbook new file mode 100644 index 000000000..6d2d00c15 --- /dev/null +++ b/doc/kioslave/man.docbook @@ -0,0 +1,86 @@ +
+Man + + +&Lauri.Watts; &Lauri.Watts.mail; + + Nicolas + Goutte + goutte@kde.org + + + + + + +Using the man ioslave you are able to read the man pages installed +on your system. It is easy to use: + + + + +man: + +See the sections of the manual, click to find the rest. + + + + +man:fopen + +See the man page of fopen. + + + + +man:fopen(3) + +See the man page of fopen in section 3. + + + + +man:(3) + +See the index of section 3. + + + + +man:intro(3) + +See the introduction of section 3. + + + + + +If there are more than one man page of the name that you +have entered, you will get a list where you can choose the man page +that you want to see. + + +There is also a shortcut: #fopen, +which has the same effect as above. + + + +If you do not find all your man pages, adjust the configuration file +/etc/manpath.config +(or a file of a similar name depending on your distribution) +or adjust the environment variables +MANPATH and MANSECT. + + + +As with any other &kde; ioslave, it is possible to enter a &URL;, like +man:socket in any +&kde; application. Try it in &kwrite; and you will see the man page in +&HTML; format. + + + +Contact mailing list: kde-devel@kde.org + + +
diff --git a/doc/kioslave/mrml.docbook b/doc/kioslave/mrml.docbook new file mode 100644 index 000000000..32af0922c --- /dev/null +++ b/doc/kioslave/mrml.docbook @@ -0,0 +1,26 @@ +
+mrml + + +&Carsten.Pfeiffer; &Carsten.Pfeiffer.mail; + + + + +2003-01-08 + + + + +MRML stands for Multimedia Retrieval Markup Language. MRML is an XML-based +protocol to provide standardized access to Multimedia retrieval software. +See http://www.mrml.net for more information. + + +kio_mrml is used for the Image Finding feature in &kde; + +⪚ type mrml:/ or mrml:/some.other.server in &konqueror; to start searching for +images. + + +
diff --git a/doc/kioslave/news.docbook b/doc/kioslave/news.docbook new file mode 100644 index 000000000..c56e3a8e0 --- /dev/null +++ b/doc/kioslave/news.docbook @@ -0,0 +1,20 @@ +
+news + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + + +The news kioslave is used when you click on a news link on a web +page. It will open &knode;, and if the group referred to in the news +link is available from your server, it will subscribe you to the group, in +the first available account you have configured in &knode; + +You can unsubscribe from within &knode; if you decide you don't +want to read the group, by right clicking and +selecting Unsubscribe from Group. + +
diff --git a/doc/kioslave/nfs.docbook b/doc/kioslave/nfs.docbook new file mode 100644 index 000000000..bbe9bb625 --- /dev/null +++ b/doc/kioslave/nfs.docbook @@ -0,0 +1,39 @@ +
+nfs + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +Sun's NFS protocol provides transparent remote access to +shared file systems across networks. The NFS protocol is +designed to be machine, operating system, network architecture, and +transport protocol independent. This independence is achieved through the +use of Remote Procedure Call (RPC) primitives built on +top of an eXternal Data Representation (XDR). + + + +The supporting MOUNT protocol performs the operating system-specific +functions that allow clients to attach remote folder trees to a point +within the local file system. The mount process also allows the server to +grant remote access privileges to a restricted set of clients via export +control. + + +The Lock Manager provides support for file locking when used in the +NFS environment. The Network Lock Manager +(NLM) protocol isolates the inherently stateful aspects +of file locking into a separate protocol. + + +Source: + +http://www.networksorcery.com/enp/protocol/nfs.htm + + + See the manual: nfs. + +
diff --git a/doc/kioslave/nntp.docbook b/doc/kioslave/nntp.docbook new file mode 100644 index 000000000..8020b8903 --- /dev/null +++ b/doc/kioslave/nntp.docbook @@ -0,0 +1,41 @@ +
+nntp + + +&Lauri.Watts; &Lauri.Watts.mail; + + + +The nntp kioslave accesses NNTP servers +directly. + +This kioslave can not be used with servers that do not implement +the GROUP command, including some versions of the +popular INN news server which is often used +by ISPs. It does work with +leafnode, which many people use to keep an +offline cache of news articles on their own hard drive or within their +LAN. + +You can use the nntp kioslave by typing +nntp://yourserver/groupname into the &konqueror; +URL bar. + +If you enter a group name, as above, and the group is available, +you will see the messages stored for that group as icons in +&konqueror;. + +Clicking on a message will display it as plain text, including all +headers. This could be useful for debugging a news client to news +server connection, for example, to ensure that your new +leafnode server is working correctly. + +If you don't enter a group name, and only the server name, you +will see a list of available groups. + +Please be aware that this could take an enormous amount of time, and +will cause a lot of network traffic. Some commercial usenet servers +have 60,000 or more groups available, and doing such a thing may +cause your desktop to freeze. + +
diff --git a/doc/kioslave/pop3.docbook b/doc/kioslave/pop3.docbook new file mode 100644 index 000000000..1c956a1cd --- /dev/null +++ b/doc/kioslave/pop3.docbook @@ -0,0 +1,13 @@ +
+pop3 + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + +The Post Office Protocol (POP3) allows a user's workstation to access mail from a mailbox server. + + +
diff --git a/doc/kioslave/pop3s.docbook b/doc/kioslave/pop3s.docbook new file mode 100644 index 000000000..856709e80 --- /dev/null +++ b/doc/kioslave/pop3s.docbook @@ -0,0 +1,14 @@ +
+pop3s + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + +POP3S is the POP3 protocol encrypted via SSL. + + + +
diff --git a/doc/kioslave/print.docbook b/doc/kioslave/print.docbook new file mode 100644 index 000000000..034eddab1 --- /dev/null +++ b/doc/kioslave/print.docbook @@ -0,0 +1,170 @@ +
+print + + +&Kurt.Pfeifle; &Kurt.Pfeifle.mail; + + + + +2002-06-23 +1.00.00 + + + +The print KIOSlave gives quick access to browse +different &kdeprint; sections via virtual folders. +These folders provide some information about and quick access to your print +subsystem. + +print:/ represents one more of those useful +KIOSlaves implemented by &kde;. To access it, just type print:/ + into the address field of &konqueror;. print:/ + doesn't purely provide read-only access to + your print subsystem, but it also allows you to change settings + of your printers, of your print system and lets you create new printers + and classes. + +You are asked for the Administrator or root password, if you are +not allowed a view or an operation as a normal user. + +You can bookmark frequently used shortcuts like + print:/manager + +Valid syntax is either +print:/[path-to-virtual-folder] or +print:[path-to-virtual-folder] + +Note, that some of the views and actions offered do heavily + depend on the print subsystem that is installed on your box and presently +activated for &kde;. Pages showing printer information display only +those parts that are valid for the &kde; selected print subsystem. +(So if you normally run CUPS, but switched temporarily to + + + Generic UNIX LPD Printing, which is possible, you will see +less printer info, because LPD is not capable of using the same amount of +print settings as are possible in CUPS). + +Valid syntax to access different virtual folders +and a short explanation of what they represent: + + +Some examples + + +print:/ (&ie; the root of +print-kioslave) + + virtual root for browsing your print subsystem. + It displays subfolders Classes, + Jobs, + Manager, Printers, + and Specials + + + + +print:/classes or +print:classes + + view your printer classes + (supported by and useful for CUPS only) + + + + + + +print:/classes/class_name or + print:classes/class_name +view all members of the named + printer class (supported by and useful only + for CUPS) + + + + + +print:/jobs +or print:jobs + + lists the current and pending jobs. + + + + +print:/printers +or print:printers + + lists all your printers. Clicking + on a printer name shows more info about that printer. + + + + + +print:/printers/printer_name +or print:printers/printer_name + +displays useful info about the named + printer + + + + +print:/manager or +print:manager + +opens a page very similar to the &kdeprint; + Manager module inside the &kde; Control Center. + Switch to a different printing system here or do every + other administrative task. +This is the most important of access points to your printing + system. + + + + +print:/specials or +print:specials + +lists all presently available special printers: + Likely you'll see: + + + The two that let you save a printfile to disk, in + &PostScript; or PDF format. + + + One that sends it as a PDF attachment via +&kmail;. + + + And last, send it via fax, if you have one of the + supported fax backends active, +Hylafax or +efax. + + + + + + + +You can also put print:/manager + or similar as the command in + the Quick Command utility (started via +&Alt;F2) + +You can learn more about printing and &kdeprint;'s powerful abilities +by reading the &kdeprint; Handbook +locally or at the &kdeprint; +Website where there are documents online (HTML and +PDF),containing +Tutorials, + as well as FAQs and + Tips and Tricks related to printing in general. + +
diff --git a/doc/kioslave/rlan.docbook b/doc/kioslave/rlan.docbook new file mode 100644 index 000000000..98c962444 --- /dev/null +++ b/doc/kioslave/rlan.docbook @@ -0,0 +1,11 @@ +
+rlan + + +The &kde; team + + + +Not yet documented + +
diff --git a/doc/kioslave/rlogin.docbook b/doc/kioslave/rlogin.docbook new file mode 100644 index 000000000..a24b20f85 --- /dev/null +++ b/doc/kioslave/rlogin.docbook @@ -0,0 +1,31 @@ +
+rlogin + + +ChristianBunting + + + +Using &konqueror; you can start up an rlogin +session with a server hosting the rlogin service. + +To use this kioslave feature, in the &konqueror; +URL bar, type +rlogin:/host_to_connect_to + +This will initialize &konsole; with an rlogin +session, prompting you for your password. + +The rlogin kioslave uses the username of the +account you are currently using in &kde;. + +After you have successfully entered your password, you can begin +your remote session. + + See the manual: rlogin. + + + + + +
diff --git a/doc/kioslave/sftp.docbook b/doc/kioslave/sftp.docbook new file mode 100644 index 000000000..ff2770a47 --- /dev/null +++ b/doc/kioslave/sftp.docbook @@ -0,0 +1,19 @@ +
+sftp + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + +SFTP is a Secure file transfer protocol. +sftp is an interactive file transfer program, +similar to ftp, but it performs all operations over an encrypted +ssh transport. It may use many of the features of +ssh, including public key authentication and +compression. + + See the manual: sftp. + + +
diff --git a/doc/kioslave/smb.docbook b/doc/kioslave/smb.docbook new file mode 100644 index 000000000..716db415f --- /dev/null +++ b/doc/kioslave/smb.docbook @@ -0,0 +1,56 @@ +
+SMB + + +&Alexander.Neundorf; &Alexander.Neundorf.mail; + + + + +The smb ioslave enables you to browse the shares of a &Windows; (or Samba) +network. + + + +To see the workgroups, enter +smb:/. + + +smb://a_workgroup +will list the hosts in this workgroup. + + +To see the shares of a host, enter +smb://the_host +or +smb:/a_workgroup/the_host. + + +To access a share directly enter +smb://the_host/the_share +or +smb:/a_workgroup/the_host/the_share + + + +The smb ioslave requires that you have libsmbclient to use this ioslave. + + + +You can set your default user name and password in the &kcontrol; in +NetworkWindows +Shares. This is especially useful if you are a +member of a &Windows; NT domain. There you can also set your +workgroup name, but in most cases this is not required. The kioslave will ask for your username and password if a default is not set. + + + +This ioslave is tested and developed using mainly Samba 2.0.7, but other +versions of Samba should work too. + + + +Author: Alexander Neundorf neundorf@kde.org + +
+ diff --git a/doc/kioslave/smtp.docbook b/doc/kioslave/smtp.docbook new file mode 100644 index 000000000..2aa2c7dbf --- /dev/null +++ b/doc/kioslave/smtp.docbook @@ -0,0 +1,16 @@ +
+smtp + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + +A protocol to send mail from the client workstation to the mail server. + + + See : Simple Mail Transfer Protocol . + + +
diff --git a/doc/kioslave/tar.docbook b/doc/kioslave/tar.docbook new file mode 100644 index 000000000..8a5405198 --- /dev/null +++ b/doc/kioslave/tar.docbook @@ -0,0 +1,18 @@ +
+tar + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + +An archiving program designed to store and extract files from an archive +file known as a tarfile. A tarfile may be made on a tape drive, however, it +is also common to write a tarfile to a normal file. + + + See the manual: tar. + + +
diff --git a/doc/kioslave/telnet.docbook b/doc/kioslave/telnet.docbook new file mode 100644 index 000000000..9d2131e84 --- /dev/null +++ b/doc/kioslave/telnet.docbook @@ -0,0 +1,17 @@ +
+telnet + + +&Ferdinand.Gassauer; &Ferdinand.Gassauer.mail; + + + + +The network terminal protocol (TELNET) allows a user to log in on any other computer on the network supporting TELNET. + + + + See the manual: telnet. + + +
diff --git a/doc/kioslave/thumbnail.docbook b/doc/kioslave/thumbnail.docbook new file mode 100644 index 000000000..7b2e0752f --- /dev/null +++ b/doc/kioslave/thumbnail.docbook @@ -0,0 +1,28 @@ +
+thumbnail + + +&Carsten.Pfeiffer; &Carsten.Pfeiffer.mail; + + + +The thumbnail kioslave is used by &kde; for network transparent +and persistent generation of thumbnails. + +The thumbnail kioslave uses plugins to generate the actual +thumbnails. You can enable viewing of these thumbnails from the +View +Preview submenu, available in +&konqueror; in file manager mode. + +The thumbnail kioslave is not directly useful to a user, but if +you are a developer, you can use it within your own applications to +create file previews. + +See the documentation in the sources for more information. You +will find these at +$KDEDIR/include/kio/thumbcreator.h or +in the source folder kdebase/kioslave/thumbnail + +
diff --git a/doc/kioslave/webdav.docbook b/doc/kioslave/webdav.docbook new file mode 100644 index 000000000..d549384f2 --- /dev/null +++ b/doc/kioslave/webdav.docbook @@ -0,0 +1,65 @@ +
+webdav + + +&Hamish.Rodda; &Hamish.Rodda.mail; + + + +2002-01-21 + + +WebDAV is a Distributed +Authoring and Versioning +protocol for the World Wide Web. It allows for easy management of +documents and scripts on a http server, and has +additional features designed to simplify version management amongst +multiple authors. + +Usage of this protocol is simple. Type the location you want to +view, similar to a http URL except for the +webdav:// protocol name at the start. An example is +webdav://www.hostname.com/path/. +If you specify a folder name, a list of files and folders will be +displayed, and you can manipulate these folders and files just as you +would with any other filesystem. + + +WebDAV Features + +Locking + +File locking allows users to lock a file, informing others that they +are +currently working on this file. This way, editing can be done without fear +that +the changes may be overwritten by another person who is also editing the +same +document. + + + +Source file access + +WebDAV allows access to the script which is called +to +produce a specific page, so changes can be made to the script itself. + + + +Per-document property support + +Arbitrary properties may be set to assist identification of a +document, +such as the author. + + + + +To take advantage of these additional capabilities, you will need an +application which supports them. No application currently supports them +through +this kioslave. + +
diff --git a/doc/kioslave/webdavs.docbook b/doc/kioslave/webdavs.docbook new file mode 100644 index 000000000..edbd635e6 --- /dev/null +++ b/doc/kioslave/webdavs.docbook @@ -0,0 +1,17 @@ +
+webdavs + + +&Hamish.Rodda; &Hamish.Rodda.mail; + + + +2002-01-21 + + + + +WebDAVS is the WebDAV protocol +encrypted via SSL. + +
diff --git a/doc/klipper/Makefile.am b/doc/klipper/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/klipper/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/klipper/index.docbook b/doc/klipper/index.docbook new file mode 100644 index 000000000..71327f14c --- /dev/null +++ b/doc/klipper/index.docbook @@ -0,0 +1,511 @@ + + + + + +]> + + + +The &klipper; Handbook + + +&Philip.Rodrigues; &Philip.Rodrigues.mail; + + +&Carsten.Pfeiffer; &Carsten.Pfeiffer.mail; + + + + + + + + +2000-2003 +&Philip.Rodrigues; + + +&FDLNotice; + +2005-01-31 +2.92.00 + + +&klipper; is the &kde; clipboard cut & paste utility. + + + +KDE +Klipper +kdebase +clipboard + + + + +Introduction +&klipper; is the &kde; clipboard utility. It stores clipboard +history, and allows you to link clipboard contents to application +actions. Please report any problems or feature requests to Esben Mose +Hansen (see http://mosehansen.dk/about +for contact details). + + + + +Using &klipper; + + +Basic Usage + +The &klipper; icon. + + + + + +The &klipper; icon + + + + +To display the clipboard history, click on the &klipper; icon in + the &kde; panel, or press &Ctrl;&Alt;V . Previous + clipboard entries are shown at the top of the pop-up menu which + appears. Selecting one of these copies it to the clipboard, from + where it can be pasted into any &kde; or X application as + usual. + +You can search through the clipboard history by opening it +(click on &klipper;) and typing your query. The results are updated as +you type. In case you're wondering how to use the accelerator keys in +the &klipper; menu, just press &Alt; and the accelerator you want. For +example, to clear the clipboard history when the &klipper; menu is +open, press &Alt;L +. + +To remove &klipper;, click on its icon in the System Tray, and from the +menu that appears, select Quit. + + + + +Actions + +&klipper; can perform actions on the contents of the clipboard, +based on whether they match a particular regular expression. For +example, any clipboard contents starting with http:// can +be passed to &Netscape; or &konqueror; as &URL;s to open. + +To use this feature, just copy a &URL; or filename to the +clipboard. If there is a matching regular expression in &klipper;'s +list, a menu will appear showing you the options you have (⪚ Open +&URL; in &konqueror;, open &URL; in &Netscape;). Use the mouse or +keyboard to select the option you want, and &klipper; will run the +program you have selected, opening the address pointed to by the +clipboard contents. + +If you do not want to perform any actions on the clipboard +contents, select Do Nothing on the pop-up menu +to return to what you were doing before. If you leave the menu, it will +disappear, leaving you to continue your work. You can change the time +that the menu remains for in the Configure Klipper... +dialog, with the option Timeout for action pop-ups +under the General tab. + +Actions can be disabled completely by clicking on &klipper; and +selecting Actions Enabled, or by pressing +&Ctrl;&Alt;X. + +Clipboard contents which match a regular expression can also be +edited before performing an action on them. Select Edit contents... on the &klipper; pop-up menu, and you can +change the clipboard contents in the dialog which appears, before +clicking the OK button to run the appropriate +action. + +Pressing &Ctrl;&Alt;R shows the pop-up +menu to repeat the last action which &klipper; performed. + + + + +Clipboard/Selection Behavior + + +General + +&klipper; can be used to set the behavior of the clipboard and selection in +&kde;. + + +The &X-Window; uses two separate clipboard buffers: the +selection and the clipboard. Text is +placed in the selection buffer by simply selecting it, and can be +pasted with the middle mouse button. To place text in +the clipboard buffer, select it and press +&Ctrl;X or +&Ctrl;C . Text from the +clipboard buffer is pasted using &Ctrl;V + or by selecting +EditPaste +. + + + + + + +Changing Clipboard/Selection Behavior + +In order to change clipboard/selection behavior, select +Configure Klipper... from the &klipper; pop-up menu, +and in the dialog box that appears, select the +General tab. Selecting Separate clipboard and +selection makes the clipboard and selection function as completely +separate buffers as described above. With this option set, the option +Ignore selection will prevent &klipper; from +including the contents of the selection in its clipboard history and from +performing actions on the contents of the selection. Selecting +Synchronize contents of the clipboard and the selection +causes the clipboard and selection buffers to always be the same, meaning that +text in the selection can be pasted with either the +middle mouse button or the key combination &Ctrl;V +, and similarly for text in the clipboard buffer. + + + + + + + + + + + + +Configuring Klipper + + + +Viewing the Configuration Dialog + +To view or change &klipper;'s settings, open the &klipper; +pop-up menu, and select Configure Klipper.... The &klipper; +configuration dialog will appear. Its contents are described +below. + + + + +General Options + + + + +Popup menu at mouse-cursor position +Make the &klipper; pop-up menus appear at the position of +the mouse cursor, instead of their default position (in the &kde; Panel). +Useful if you use the mouse more than the keyboard. + + + + +Save clipboard contents on +exit If this option is on, the clipboard +history will be saved when &klipper; exits, allowing you to use it next time +&klipper; starts. + + + + +Remove whitespace when executing actions +If selected, any whitespace (spaces, tabs, &etc;) at the +beginning and end of the clipboard contents will be removed before passing the +clipboard contents to an application. This is useful, for example, if the +clipboard contains a &URL; with spaces which, if opened by a web browser, would +cause an error. + + + + +Replay actions on an item selected from +history +If this is switched on, selecting an item from the history +causes &klipper; to display the actions pop-up on that item, if +appropriate. + + + + +Prevent empty clipboard +If selected, the clipboard will never be empty: &klipper; will +insert the most recent item from the clipboard history into the clipboard +instead of allowing it to be empty. + + + +Ignore selection +Sets the clipboard mode. See . + + + + + + +Synchronize contents of the clipboard and the +selection +Sets the clipboard mode. See . + + + + + +Separate clipboard and selection +Sets the clipboard mode. See . + + + + + + +Timeout for Action pop-ups +Set the time that a pop-up menu will remain for if you do +nothing with it. + + +Clipboard history +size +Sets the number of items that are stored +in the clipboard history. + + + + + + + +Actions Options + + + +Editing Expressions/Actions +On the Actions tab, double-click +the regular expression or action that you want to edit. An in-place text editing +box will appear in which the text can be edited as you wish. Make sure you +press Enter when you are done. + + + +Adding Expressions/Actions +Click the Add Action button +to add a regular expression for &klipper; to match. &klipper; uses +&Qt;'s QRegExp, which understands most regular +expressions as you would use in grep or +egrep for instance. +You can add a description of the regular expression type (⪚ +HTTP URL) by left clicking in the +Description column. + +You can find detailed information about the use of +QRegExp regular expressions at http://doc.trolltech.com/qregexp.html#details. +Note that &klipper; does not support the wildcard mode mentioned on this +page. + +Edit the regular expression as described above. To add a command +to execute, right click, select +Add Command and edit the command which +appears in the tree under the regular expression. + +Note that %s in the command line is replaced with +the clipboard contents, ⪚ if your command definition is +kedit %s and +your clipboard contents are /home/phil/textfile, +the command kedit +/home/phil/textfile will be run. To +include %s in the command line, escape it with a +backslash, as so: \%s. + + +Advanced... +Brings up the Disable Actions for windows of type +WM_CLASS dialog. +Some programs, such as &konqueror;, +use the clipboard internally. If you get unwanted &klipper; pop-ups all the time +when using a certain application, do the following: + + +Open the application. +From a terminal, run xprop +| grep WM_CLASS +and then click on the window of the application you are +running. +The first string after the equals sign is the one to +enter. + + +Once the WM_CLASS is added, no more actions will be generated for +windows of that application. + + + + + + + +Shortcuts Options + +The shortcuts tab allows you to change the keyboard shortcuts +which are used to access &klipper; functions. You can change the +shortcut to one of three things: + + + +None +The selected action cannot be accessed directly from the +keyboard + + +Default +The selected action uses &klipper;'s default key. These are the +shortcuts referred to in this manual. + + +Custom +The selected action is assigned to the keys you choose. +To choose a custom key for the action you have selected, click on the +representation of a key in the lower right of the screen to activate it, and +type the desired key combination on your keyboard, as in any &kde; application. + + + + + + + + +Credits and License + + +&klipper; + + +Program copyright 1998 Andrew Stanley-Jones asj@cban.com + + +Program copyright 1998-2000 &Carsten.Pfeiffer; &Carsten.Pfeiffer.mail; + +Currently maintained by Esben Mose Hansen. See http://mosehansen.dk/about +for contact details. + + + +Documentation copyright 2000-2003, 2005 &Philip.Rodrigues; +&Philip.Rodrigues.mail; + +&underFDL; +&underGPL; + + + + +Installation + + +How to obtain &klipper; + +&install.intro.documentation; + + + + +Compilation and Installation +&klipper; should compile and install along with the kdebase +package, and appear on your &kde; panel (&kicker;) when you run &kde; +3. If it does not appear, you can start it by selecting +Panel +MenuAddAppletKlipper + +in any context menu in &kicker;, the &kde; Panel. + + +&klipper; icon + + + + + + Screenshot + + + + + + + + + +&documentation.index; + + + + + + + + + + + + + diff --git a/doc/klipper/screenshot.png b/doc/klipper/screenshot.png new file mode 100644 index 000000000..2b1fbbafe Binary files /dev/null and b/doc/klipper/screenshot.png differ diff --git a/doc/kmenuedit/Makefile.am b/doc/kmenuedit/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/kmenuedit/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/kmenuedit/done.png b/doc/kmenuedit/done.png new file mode 100644 index 000000000..c614475a7 Binary files /dev/null and b/doc/kmenuedit/done.png differ diff --git a/doc/kmenuedit/index.docbook b/doc/kmenuedit/index.docbook new file mode 100644 index 000000000..73cb76ced --- /dev/null +++ b/doc/kmenuedit/index.docbook @@ -0,0 +1,521 @@ + + + Firefox"> + + +]> + + + + + +The &kmenuedit; Handbook + + +&Milos.Prudek; &Milos.Prudek.mail; + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + + + +2000 +&Milos.Prudek; + + +&FDLNotice; + +2006-11-23 +0.7 (&kde; 3.5.5) + +&kmenuedit; allows editing of the &kde; &kmenu;. + + + +KDE +KDE Menu Editor +kmenuedit +application +program +menu +kicker + + + + + + +Introduction + +&kmenuedit; allows editing of &kde; &kmenu;. + +&kmenuedit; can be started either by &RMB; clicking the +&kmenu; button on the panel and choosing +Menu Editor, or by choosing +Menu Editor from the +Settings submenu of the &kmenu;. + +&kmenuedit; allows you to: + + +View and edit the current &kmenu; +Cut, Copy +and Paste menu items +Create and delete submenus + + + + + + + +&Virgil.J.Nisly; &Virgil.J.Nisly.mail; + + +A Quick Start Guide to Adding an Entry to the &kmenu; + + In this example, we will add &firefox; to the Internet submenu. Most applications can be added with &kappfinder;, &firefox; can usually be added that way, but was used for lack of a better example. + To start off, we need to open &kmenuedit;, so &RMB; on the &kmenu;, click Menu Editor to start &kmenuedit;. After &kmenuedit; has started, select Internet as shown in picture below. + +Select Internet + + + + + +Select Internet + + + + + Once you have selected Internet, click on FileNew Item..., opening the New Item dialog, as shown below. Type the name of the program you want to add, in this case, type firefox. + +New Item dialog + + + + + +The New Item dialog. + + + + + +Press return, and you should see something like the picture below in the main window. + +New Item + + + + + +The new item created. + + + + + + Now lets fill in the Description:, in this case type Web Browser. The description and name will be displayed on the &kmenu; as Web Browser (Firefox). We will need to fill in the executable name in the Command: field, in this instance we will type firefox. +Following the command, you can have several place holders which will be replaced with actual values when the program is run: + +%f - a single file name +%F - a list of files; use for applications that can open several local files at once +%u - a single &URL; +%U - a list of &URL;s +%d - the folder of a file to open +%D - a list of folders +%i - the icon +%m - the mini icon +%c - the caption + +For example: if you want to firefox to start your web browsing at www.kde.org - instead of firefox you would type firefox %u www.kde.org. +We would like to have a more creative icon, so we will click the generic icon sitting beside Name:. It will bring the Select Icon dialog which will let us choose the new icon, as shown below. + +Select Icon dialog + + + + + +The Select Icon dialog. + + + + + We choose the firefox icon from the list, and press return. Your finished screen should probably look something like the screenshot below. + +Done screenshot + + + + + +This is what the completed menu item should looks like. + + + + +Click FileSave, wait for the Updating System Configuration dialog to get finished, you should find &firefox; in the &kmenu; Internet submenu! + + + + + + +Using &kmenuedit; + +The left application panel shows the &kmenu; structure. When +you browse items in the left panel, the right panel shows detailed +information for the highlighted menu item. + + +General program information + + + +Name: +This is the name of your program as it appears in the +&kmenu; menu. It can be different from the real executable +name. For instance the name of mc executable is +"Midnight Commander". + + +Description: +The description will be displayed together with the name in the &kmenu;. This is +entirely optional. + + +Comment: +Describe the program in greater detail in this field. This is +entirely optional. + + +Command: +This is the name of the executable program. Make sure that you +have permission to run the program. + + +Enable launch feedback +If this box is checked, this will display feedback when an application is started + + + +Place in system tray +When checked, the application's icon will show up in the panel system tray. +You will then be able to hide or show the application by clicking on the system +tray icon. Clicking on it using the &RMB; will allow also you to undock, or quit the +application. + + + +Icon List +Click +this icon to display a choice of icons. Choose an icon for your +program. + + +Work path: +Specify the work path of the program. This will be the current +path when the program launches. It does not need to be the same as the +executable location. + + +Run in terminal +You must check this if your program requires terminal emulator +in order to run. This mainly applies to console +applications. + + +Terminal options: +Put all terminal options in this field. + + +Run as a different user +If you want to run this program as a different user (not you), +check this checkbox, and provide the username in the +Username: field. + + + +You can assign a special keyboard shortcut to launch your program. + +Click the None button to the right of the Current +shortcut key: checkbox. + +A dialog box will pop up, allowing you to assign a Primary shortcut: +by pressing the key combination on your keyboard that you want to be assigned to your program. +It might be useful to assign a second +keybinding to the same item by checking the +Alternate shortcut: button, for +example, if you often switch keyboard maps, and some shortcuts are not +as convenient to type at all times. + +Click the x to clear the shortcut, if you +made a mistake. Check the Multi-key mode box if you +want to assign a shortcut that uses more than one key. + +The dialog will close when you have selected a keybinding. + + + + + + + +Menu Reference + + + + +&Ctrl;N +File New Item... + Adds new menu +item. + + + + +File +New Submenu... + +Adds new submenu. + + + +FileNew +Separator + +Adds a new separator to the menu. + + + + + +&Ctrl;S +FileSave + + +Saves the menu + + + + + + +&Ctrl;Q + +File +Quit + +Quits &kmenuedit;. + + + + + +&Ctrl;X + + +Edit Cut + +Cuts the current menu item to the clipboard. If +you want to move menu item, you should first cut it to the clipboard, move to +the destination place using the left panel, and use the +Paste function to paste the menu item from the +clipboard. + + + + + +&Ctrl;C + + +Edit Copy + +Copies the current menu item to the +clipboard. You can later use the Paste +function to paste the copied menu itemfrom the clipboard to its destination. You +can paste the same item many times. + + + + + +&Ctrl;V + +Edit +Paste +Paste menu item from the clipboard to currently +selected place in the Main menu. You must first use +Cut or Copy before you can +Paste. + + + + +Delete +Edit Delete + +Deletes currently selected menu +item. + + + + +Settings +Show/Hide Toolbar + +Show or hide the toolbar + + + + +SettingsConfigure +Shortcuts... + +Customize the keyboard shortcuts + + + + + +SettingsConfigure +Toolbars... + +Customize the toolbar icons. + + + + + +&help.menu.documentation; + + + + + +Credits and License + + +&kmenuedit; + +Program copyright © 2002, &Raffaele.Sandrini; + +Contributors: + +&Matthias.Elter; &Matthias.Elter.mail; - Original +Author + +&Matthias.Ettrich; &Matthias.Ettrich.mail; + +&Daniel.M.Duley; &Daniel.M.Duley.mail; + +&Preston.Brown; &Preston.Brown.mail; + + + +Documentation copyright © 2000 &Milos.Prudek; + +Updated for &kde; 3.0 by &Lauri.Watts; &Lauri.Watts.mail; +2002 + + + +&underFDL; +&underGPL; + + + + +Glossary + + +Terminal emulator + +Terminal emulator is simply a windowed shell; this is known as +command line window in some other environments. If you +want to use the shell, you should know at least a few of the +system-level commands for your operating system. + + + + +Applet +A small application that occupies very little memory +and screen space, and at the same time gives you some useful +information or provides a control shortcut. For instance the +Clock applet shows current time and date +(and even a month diary if you click it), and System +Monitor applet shows how busy your machine currently is +in real-time. + + + +Legacy Application + + +An X-window application which was not written with &kde; in +mind. Such applications run fine in &kde;. However, they are not +warned automatically when you shut down your &kde; session. You +therefore must not forget to save documents open in these applications +before you log out from &kde;. Additionally, many of +these applications do not support copying and pasting from +&kde; compliant applications. &Netscape; 4.x browser is a prominent +example of such application Some GNOME applications may provide +limited interoperability with the &kde;.. + + + + +Console Application + + +Application originally written for non-graphic, text oriented +environment. Such applications run fine in &kde;. They must run within +console emulator, like &konsole;. They are not warned automatically +when you shut down your &kde; session. You therefore must not forget +to save documents open in these applications before you log out from +the &kde;. + +Console applications support copying and pasting from +&kde;-compliant applications.Simply mark the text in the console +application with your mouse, switch to the &kde;-compliant application +and press &Ctrl; +V to paste the text. If you want to copy +from &kde; application to a console application, first mark the text +with your mouse, press &Ctrl; +C, switch to the console application and +press the middle button on your mouseIf your mouse +does not have a middle button, you must press +left and right +button at the same time. This is called middle button +emulation and it must be supported by your operating system to +work.. + + + + + + +&documentation.index; + + + + diff --git a/doc/kmenuedit/itemname.png b/doc/kmenuedit/itemname.png new file mode 100644 index 000000000..fb3d8a286 Binary files /dev/null and b/doc/kmenuedit/itemname.png differ diff --git a/doc/kmenuedit/kmenueditmain.png b/doc/kmenuedit/kmenueditmain.png new file mode 100644 index 000000000..46509372f Binary files /dev/null and b/doc/kmenuedit/kmenueditmain.png differ diff --git a/doc/kmenuedit/new.png b/doc/kmenuedit/new.png new file mode 100644 index 000000000..a26a1dd41 Binary files /dev/null and b/doc/kmenuedit/new.png differ diff --git a/doc/kmenuedit/selecticon.png b/doc/kmenuedit/selecticon.png new file mode 100644 index 000000000..c60363f37 Binary files /dev/null and b/doc/kmenuedit/selecticon.png differ diff --git a/doc/kmenuedit/selectinternet.png b/doc/kmenuedit/selectinternet.png new file mode 100644 index 000000000..92d63b092 Binary files /dev/null and b/doc/kmenuedit/selectinternet.png differ diff --git a/doc/knetattach/Makefile.am b/doc/knetattach/Makefile.am new file mode 100644 index 000000000..171f575ce --- /dev/null +++ b/doc/knetattach/Makefile.am @@ -0,0 +1,2 @@ +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/knetattach/index.docbook b/doc/knetattach/index.docbook new file mode 100644 index 000000000..c5e7a4db0 --- /dev/null +++ b/doc/knetattach/index.docbook @@ -0,0 +1,349 @@ + + + + + + + + +]> + + + + + + +The &knetattach; Handbook + + + +&Orville.Bennett; &Orville.Bennett.mail; + + + + + + +2005 +&Orville.Bennett; + +&FDLNotice; + +2005-02-09 +1.01.00 + + + +&knetattach; is an application which makes it easier to integrate your +network resources with your &kde; Desktop. + + + + + + +KDE +kdebase +knetattach +Network Folders +Network Folder Wizard +KDE Network Folder Wizard + + + + + +Introduction + + +The &knetattach; program, affectionately and hereafter known as the +Network Folder Wizard, allows easy addition and integration of various +network folders with your &kde; desktop. Please report any problems or +feature requests for it to the &kde; bugs website. + + + + +Using &knetattach; + + +As you will see in the screenshot below, the Network Folder Wizard currently allows +you to add four types of network folders: WebDav, FTP, +Microsoft +Windows (Samba) network drives and SSH. + + +Here's a screenshot of &knetattach; + + + + + +Screenshot + + +Network Folder Wizard main window + + + + + + + +Adding network folders + + +Network folders show up in a special location of &konqueror; called a +virtual folder. +This virtual folder is accessed by typing remote:/ in +&konqueror; Location bar. You will then be able to see +any folders which have been previously added and you also will be able to use +the wizard to add new ones. + +Here's a screenshot of &knetattach; + + + + + +Screenshot + + +The virtual folder with the Network Folder wizard + + + + + + +Speaking of wizards, the Network Folder Wizard aims at being very easy to use. +After opening the wizard you must choose the type of network folder you would +like to access. When you move on to the next screen you will just need to +fill in the requested information. The final step is entering your username and +login password for the network share you've chosen to access. + + +Below is a list of the information needed by the wizard to create the network folders. If an option is not +available for a particular folder it does not have to be entered. e.g. The Samba +folders do not require a Port entry. + + + + + +Name: + + +This is where you give a name to the network connection. It is limited only by +your imagination (or alphabet). + + + + +Server: + + +This is the address of the server you are attempting to add. It can be an +IP address or domain name. + + + + +Port: + + +Here you enter the port number you wish to connect to. The defaults are usually +sufficient. + + +Not available for Microsoft +Windows (Samba) folders. + + + + + + +Folder: + + +The path to the folder you wish to connect to should go here. + + + + +Create an icon for this remote folder + + +If this box is checked an icon will be created allowing access through the +remote:/ virtual folder. If it is not checked, a connection will be possible +but it will not be accessible from remote:/. + + +The Recent connection: option allows you to re-connect to the +last network mount point you connected to using the wizard whether an icon is created or not. + + + + + + +Use encryption + + +If checked the ability to make a secure connection will be enabled. + +Available only for WebDav folders. + + + + + + + + + + + +&knetattach; Walkthrough + + + +This will be a quick walkthrough of the Network Folder Wizard. Don't +blink or you might miss it. + + + +Below you see the main window of the Network Folder Wizard. It is here +that we choose what type of folder we want to add or connect to. For +the purposes of this walkthrough we will be using FTP. It contains most +of the options you will encounter while using the wizard. + + + + +Here's a screenshot of the &knetattach; main window + + + + + +Screenshot + + + + + + +OK, so we (as in me) have chosen to add an FTP folder. Below you see +an example of the type of information you will need to add for your particular +FTP server. After filling it in we press Save & +Connect +and wait for the magic. Oh yes, if your server requires validation of some kind +you will be prompted at this point before being allowed to connect. + + + + +Screenshot showing addition of FTP Folder +using &knetattach; + + + + + +Screenshot + + + + + + +So now we are all connected now and able to navigate our newly added share. Joy! + + + + +Screenshot of the connected FTP folder + + + + + +Screenshot + + + + + + +To get back to our network folders all that is necessary is typing remote:/ +in the Location: bar of &konqueror;. + + + + +Screenshot of the remote:/ virtual folder with the +added connection + + + + + +Screenshot + + + + + + +You can even add new folders from the same location by using the +Add a Network Folder link. Well that brings us to +the end of our walkthrough (told you it would be quick). I wish you the +best of luck in your own network folder adventures ;-) + + + + + +Credits and License + + +&knetattach; + + +Program copyright 2004 &George.Staikos; &George.Staikos.mail; + + + +Documentation Copyright © 2005 &Orville.Bennett; &Orville.Bennett.mail; + + + + +&underFDL; +&underGPL; + + + +&documentation.index; + + + diff --git a/doc/knetattach/screenshot.png b/doc/knetattach/screenshot.png new file mode 100644 index 000000000..a22996512 Binary files /dev/null and b/doc/knetattach/screenshot.png differ diff --git a/doc/knetattach/screenshot1.png b/doc/knetattach/screenshot1.png new file mode 100644 index 000000000..1a9ef1001 Binary files /dev/null and b/doc/knetattach/screenshot1.png differ diff --git a/doc/knetattach/screenshot2.png b/doc/knetattach/screenshot2.png new file mode 100644 index 000000000..581fa167c Binary files /dev/null and b/doc/knetattach/screenshot2.png differ diff --git a/doc/knetattach/screenshot3.png b/doc/knetattach/screenshot3.png new file mode 100644 index 000000000..668d093e0 Binary files /dev/null and b/doc/knetattach/screenshot3.png differ diff --git a/doc/knetattach/screenshot4.png b/doc/knetattach/screenshot4.png new file mode 100644 index 000000000..13e375a05 Binary files /dev/null and b/doc/knetattach/screenshot4.png differ diff --git a/doc/kompmgr/Makefile.am b/doc/kompmgr/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/kompmgr/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/kompmgr/index.docbook b/doc/kompmgr/index.docbook new file mode 100644 index 000000000..2d70bc9d6 --- /dev/null +++ b/doc/kompmgr/index.docbook @@ -0,0 +1,433 @@ + + + + + +]> + + + +&kappname; Information + + + +ThomasLuebking +thomas.luebking@web.de + + + + + + +2005 +Thomas Luebking + + +&FDLNotice; + +2005-01-15 +2.0.1 + + +&kappname; is a composite rendering engine to be used by &kwin;. +This document is rather a general explanation of what it does, +how it works and what the restrictions are than a documentation how to use +it (as it works in the background automatically). + + + +KDE +kwin +render engine + + + + +Introduction + +&kappname; is based upon xcompmgr, Keith +Packards reference composing implementation for the use of the new X +features. + +A composite manager catches the output of the X windows and renders +them into a single picture that will be displayed on the screen. The advantage +of doing so is that you can do basically anything with the windows contents, +including blending them together (translucency) or attaching shadows. You +could also tint them, add a nasty advertise on any window, squeeze them, +fract them, add scanlines, or anything else you can imagine, limited by +your hardware. + + + + +Xorg + +You necessarily need X.org 6.8 or later to have +&kappname; work. X.org 6.7 or older or XFree86 won't work. + + +Setup +You need to explicitly enable the Composite extension. Add a +new Section to your X.org configuration file: + + +Section "Extensions" + Option "Composite" "Enable" +EndSection + + +If supported by your GPU (the complex chip that +powers a modern graphics card), activate the Render acceleration. This is +best supported by NVIDIA, and less completely by ATI +cards. + + +Section "Device" +.... +.... + Option "RenderAccel" "true" +.... +.... +EndSection + +&kappname; should be available now. For more information, please see +the FAQ. + + + + + + +Settings + +This chapter describes which parameters you can tweak, how they will +result visually and their performance impact. + + +Translucency + +A translucent object is one that allows light to pass through it. In +terms of windows on your desktop, that means that the contents of windows +can be seen through the one on the top. + +Translucency allows you to emphasize special windows, have a 3 +dimensional view on your desktop, keep track of covered windows, and just +looks cute. The price is, that blending things together costs some system +capacity. + +You can independently configure translucency for the following +items: + + + +Active windows +It is suggested you deactivate translucency for the active +window. The main reason is for perfomance, and secondly because to scan the +content of a translucent window means your brain has to strip the irritating +throughshining information, which is tiring. + + + +Inactive windows +If you set inactive windows translucent, active windows will +appear emphasized and are easier to focus. However, if you choose a lower +value, you may have trouble to find an inactive window. If you choose very +low values (< 20%) you may not be able to distinguish +windows in their stack order - so you may accidently click the +OK button of a dialog when you just wanted to +activate a window. Optimal values are between 60% and +80%. + + + +Moving windows +Though it's a nice effect to have heavily translucent +(opacity < 20%) moving windows, there is a heavy price to pay in +performance, especially if you do not deactivate shadows (see below). Just +try out and if you feel your system is too slow, keep moving windows +opaque. This value also applies to windows in resize state. + + + +Dock windows +As docks like kicker are seldom if ever moved and usually of +limited size, this is purely visual and won't detrimentally affect your +system's performance. + + + +Treat "keep above" windows as active ones +If you set a window to keep above others, you usually want +to keep focus on it, so it can make sense to give it the same +emphasis. + + + +Disable ARGB windows +XRender supports windows with an alpha mask, &ie; +translucent sections. Currently there are no or only very few applications +that would make use of this feature, as it doesn't make any sense without +using a composite manager. This may change in the future. +On the other side, most gtk 1.x applications (⪚ +xmms) set such an alpha mask, resulting in +almost unusable windows (as long as the sublying windows are not black), so +you can disable the support for ARGB windows here to make use of gtk +applications. There will hopefully be a patch for gtk in the near future to +fix this. + + + + + + +Shadows +Why should anyone want his windows to throw shadows? Well, maybe just +because it looks cute, or because it allows a better window separation, +or... because it looks cute! + + +Use shadows +As shadows cost some additional cpu/gpu power, they can be +deactivated, while keeping a general alpha channel capability. + + + +Active window size +Inactive window size +Dock window size +You may select different shadow sizes for different window +states/types. The values are not absolute, but will apply to your screen +resolution. +In principle, you can set every value you want (if you edit the config +file with a text editor, far beyond the offered 32), but +bigger shadows cost more cpu/gpu power. + + + +Vertical offset +Horizontal offset +By default, the window would throw a all around +equal shadow, implying a frontal light source. Users familiar with +&MacOS; may like a vertical offset, &Windows; users may prefer a +slighter offset to the southeast. Experiment with the values until you are +happy. + + + +Shadow color +Usually shadows as the absence of light appear in shades of +grey (so the maximum shadow color is black, or no light at all). But hey, +this is a virtual world, and if you'd like to have even pink shadows, why +not? + + + +Remove shadows on move +Check this if you need more performance (especially when +using translucent moving windows). + + + +Remove shadows on resize +It's a good idea to check this item whether using +translucent resizing (moving) windows, or not. The windows shadow pixmap has +to be permanently recreated on resizes what has a deep impact on the system +performance. + + + + + + +Effects + + +Fade-in windows +Fade between opacity changes +Instead of just popping up a new window, you might want to +slowly fade it in. While this looks impressive, there is an equally +impressive price to pay in performance speed, and it is difficult to interact +meaningfully with windows that are in the process of fading. + + + + + +Fade-in speed +Fade-out speed +For the usability reasons mentioned under Fade-in +windows, it is most practical to use a fast fade in speed and +(for more eye candy) a slow fade out speed. This will provide you nice +effects and a smooth feeling system as well as low latency before +information appears. + + + + + + + + +Problems + +The whole Composite extension is quite new. It may cause several +problems and even crash X, so it is strongly suggested to not even +enable the Composite extension in Xorg.conf on mission critical production +systems. If you however can risk a slightly more unstable system, +it's certainly nice to have some eye candy around. + + +In this case you may notice some glitches. +Here are some common problems - and workarounds: + + + + + +I have X.org 6.8.x, but &kappname; fails to start + + +You need to explicitly enable the Composite extension, add a new Section to /etc/X11/XorgConfig: +Section "Extensions" + Option "Composite" "Enable" +EndSection + + + + + +Ok, &kappname; works, but it's horribly slow + + +If supported by your GPU (mainly +NVIDIA, and somewhat by ATI cards), first make sure +you activated the Render acceleration + +Section "Device" +.... +.... +Option "RenderAccel" "true" +.... +.... +EndSection + + +If it's still slow, you can try to adjust your memory usage. Either +decrease you screen depth (⪚ from 24 to 16) or lower your resolution +(⪚ from 1280x1024 to 1024x768). + +Please notice that the currently limiting factor for the Composite +extension seems to be the CPU cache size. + + + + + + +After enabling the Composite extension, I cannot run any +GLX applications anymore. I've got an +NVIDIA card. + + +To prevent some problems, NVIDIA deactivated the +GLX support when Coposite is active. Reactivating is possible, but may cause +problems on some kernel/driver/GPU combinations. + +Section "Device" +.... +.... +Option "AllowGLXWithComposite" "true" +.... +.... +EndSection + + + + + + +I wanted to play a game using SDL (but not +GL), say scummvm, but when the +compmgr is active, all I can see is a shadow! + + +This is a problem with the PictType reported by SDL. + +Workaround: + +Instead of calling scummvm directly, call +SDL_VIDEO_X11_VISUALID=0x24 scummvm This will tell SDL to +use a supported format and you can play as ever. + + + + + + Application XXX refuses to start after enabling the Composite +extension. +Application YYY breaks X after enabling the Composite +extension. +Application ZZZ looks weird after activating the composite +manager. + + +The Composite extension is still experimental. +Workaround: +Instead of calling appName directly, call XLIB_SKIP_ARGB_VISUALS=1 appName +Applications that are known to cause problems: + +All gtk1 applications (⪚ gmplayer, +xmms, gaim) - failing +startup or look unusable weird or crash X +&kuickshow; - displays only a black frame +&Qt; Designer - crashes +X +&kopete; - crashes X +&kolf; - crashes X + + + + + + +I try to watch a video, but only see artefacts in the Video +Window. + + +You're using xv as video backend. This is the overlay +mode, where the video content is written directly into the video card +memory, bypassing X. Therefore the window seems to be static (colored +background) and is not updated by the damage extension. + There will hopefully be a fix for this in the future. Currently I had +the best results using Xine but displaying +translucent videos isn't fast anyway. + + + + + + + +Credits and Licenses + + +Authors +Thomas Luebking baghira-style@gmx.net - Editor + +&underFDL; +&underGPL; + + + + + + + + diff --git a/doc/konqueror/Makefile.am b/doc/konqueror/Makefile.am new file mode 100644 index 000000000..da8216ae4 --- /dev/null +++ b/doc/konqueror/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/doc/konqueror/basics.docbook b/doc/konqueror/basics.docbook new file mode 100644 index 000000000..8940df621 --- /dev/null +++ b/doc/konqueror/basics.docbook @@ -0,0 +1,386 @@ + + + + +&Pamela.Roberts; + + + +2003-10-20 +3.2 + + +&konqueror; Basics + +Like all &kde; applications, &konqueror; is highly + configurable. This document describes how &konqueror; behaves with the normal, + default settings. + A three button mouse can be useful when you are running +&konqueror; or any other &kde; application. If your mouse only has two buttons +then you should be able to set your system up so that you can simulate a &MMB; +by pressing both buttons at the same time. +You can read more about mouse usage in +If you are used to having to double-click to perform an action, +then take care, because in common with the rest of &kde;, &konqueror; defaults +to single-clicking. + + +Starting &konqueror; + +Being a combined File Manager and Browser, +&konqueror; will automatically +switch between the two modes as needed when it is running, but it is convenient +to be able to choose which mode is to be used when you start it up. + + +If you have a house shaped icon on the panel +or desktop, then left click on it to open +&konqueror; as a file manager. + +Or left click on world + shaped icon on the panel or desktop to open &konqueror; in browser +mode. + +From the K menu, select +InternetKonqueror Web +Browser to start it as a browser, or +Home to launch &konqueror; in file manager mode. + + +&Alt;F2 +will open a Run Command dialog box, type +konqueror (lower case) and press +Enter or the Run button to start in +file +manager mode, or just enter a &URL; such as + http://www.konqueror.org to start &konqueror; as a +browser. + + + +&konqueror; is also started automatically when you +left click on a desktop icon that represents a +folder, such as a hard disk drive or the Trash icon. + + + + + + +The Parts of &konqueror; + +A brief look at the main parts of &konqueror;'s window: + + + + +Here's a screenshot of &konqueror; + + + +The Titlebar is the strip across the top of +&konqueror;'s window, and operates in the same way as for other &kde; +applications. Right click on the central portion to +bring up the neat Titlebar menu. + +The Menubar is the strip containing the names of +the drop-down menus. Left click on a name to +alternately show and hide that menu, or use &Alt;the underlined +letter in the name as a hot key, for example &Alt;E to show the +Edit menu. The various menus are described in the Menubar section of this document. + +The Toolbar contains icons for commonly used +operations. Left clicking on an icon will activate +it. If you have enabled tooltips in the Control Center +Appearance & +ThemesStyle +dialog a brief description of what that icon does will appear when you hover +the pointer over it. + +Some icons, for example the Up and Back icons in the previous screenshot, +have a small black triangle at their bottom right corner. If you hold the &LMB; +pressed while the cursor is over this type of icon a small dropdown menu will +appear. Right clicking on the +Toolbar will bring up the Toolbar Menu which you can use +to change the Toolbar's appearance and position. + +The Location Toolbar shows the path to the +directory, &URL; or file being viewed. You can type a path or &URL; here and +press &Enter; or left click on the +Go icon at the right hand end of the Location +Toolbar to go to it. The black icon at the left hand end of the +Location Toolbar clears the text entry box. + +The Bookmark Toolbar is the area under the +Location Toolbar in the previous screenshot. You can add +frequently used bookmarks here; see the Organizing +Your +Bookmarks section of this document. + +The Window is the main area of &konqueror; and +can show you the contents of a directory, web page, document or image. Using +the Window menu you can +split &konqueror;'s main window into one or more separate views, useful for +drag and drop operations, or set it to contain two or more tabbed views. + + +The Status Bar runs across the bottom of the +&konqueror;'s window +and often shows general information about whatever the mouse pointer is +hovering +over. If you have split the main window into a number of views you will get an +Status Bar for each view, and it will include a small green light at the left +hand end to show which is the active +view. Right clicking on the Status Bar brings up the +Status Bar Right Mouse +Button Menu. + +Don't worry if your &konqueror; doesn't look exactly like this +screenshot; it is highly configurable. In particular: + + +You can use the Settings menu to choose +whether to show or hide the Menubar, Main Toolbar, Location Toolbar and +Bookmark Toolbar, or even to add an Extra Toolbar. +You can also flatten the toolbars by +left clicking on the vertical lines at the left hand end +of the bars, or move them around by holding the &LMB; down while you +drag these bars around. +This screenshot does not show the optional +Navigation Panel. + + +For more details of how to change &konqueror;'s appearance, see the Configuring &konqueror; section + + + + +Tooltips and What's This? + +You can find out a lot about how &konqueror; works without needing to +read +this entire document if you take advantage of Tooltips and + the +What's This? feature. + +If Tooltips have been enabled in &kde; (K menu + Control CenterAppearance & + ThemesStyle, + Style dialog) then when you hover the mouse pointer + over a Toolbar or Navigation Panel +button it should bring up a terse description of what that button does. + +What's This? is invoked by the Menubar +HelpWhat's This? item, by +&Shift;F1, or by +just &LMB; clicking on the question mark near the top right hand corner of +&konqueror;'s window. It changes the cursor to show a question mark alongside +the arrow. + +When this question mark is visible, a &LMB; click won't actually do +anything until you have clicked on a control (or the text alongside it) that +supports What's This?, in which case it will +display +a reasonably comprehensive description of what the control is supposed to do. +Most of the dialog boxes that &konqueror; brings up support the +What's This? feature. + + + + +<mousebutton>Left</mousebutton> and <mousebutton>Middle</mousebutton> +Mouse Button Actions + +If you click the &LMB; on an item in &konqueror;'s window, it will + be +activated. Thus + + + +Left click on an icon in the Toolbar +to do whatever that icon is supposed to do. +Left click on an item in the Menubar +to make that menu drop down. +Left click on a menu item to do that +thing. +Left click on an icon in the +Bookmark + Toolbar +to open that &URL;. +Left click on a link in a web page +to make &konqueror; follow that link. +Left click on a folder icon or +name and &konqueror; will descend into (show the contents of) that folder. + +Left click on a file name or icon +and &konqueror; will do whatever it thinks appropriate, based on the file type. +In general this means opening HTML pages, or previewing +text, image or +KOffice files, showing them within &konqueror;'s +window (Preview means that you can see the file but not change +it). + +&konqueror; decides what the file type is by matching the filename +extension against a list of known types. If that fails it tries to guess +the type from the file contents. You can change the list of known file types +and associated actions with the File Associations page of +the SettingsConfigure Konqueror... + dialog. + + + +Clicking the &MMB; on a file or folder name or icon does essentially the +same as left clicking except that it usually does it +in a new &konqueror; window, unless the Open links in new tab instead +of in new window box has been checked in the +Behavior page of the +SettingsConfigure + +Konqueror... dialog. &konqueror; can open +links on pages and Bookmarks, +as well as the +Home, Up, +Back and Forward +entries in a new tab or window. + +Holding the &Shift; key down while pressing the &MMB; will open the link +in the background. +If you click the &MMB; when the mouse cursor is over a blank +part of the main view (not over a link or file name or icon) &konqueror; will +copy the contents of the clipboard into the Location Toolbar and try to use +that as a &URL;. + + + +<mousebutton>Right</mousebutton> Mouse Button Menus + +Clicking the &RMB; on almost any part of &konqueror;'s window +will bring up an appropriate context menu. + +If you have enabled the Right click goes back in +history option in &konqueror;'s +configuration settings a +simple right click is equivalent to clicking on the +Back button. In this case you can access the context +menu by moving the mouse with the right button held +down. + + + + +On the Titlebar +Right clicking on any free area of +the Titlebar brings up the Titlebar Menu, allowing you to control the position +of &konqueror;'s window as well as the decoration applied to all &kde; program +windows. + + + +On the Main Toolbar +Right click on any free area of the +Toolbar to bring up the Toolbar Menu. You can use it to control whether the +Toolbar is at the top, bottom, left or right of &konqueror;'s window. +You can also use the Toolbar Menu to set the size of the buttons on the +Toolbar, +and whether they are shown as icons, text or both. + + + +On the Location Toolbar +Right click in the + &URL; +entry box area to perform Cut, Copy, Paste or Clear operations in this area, or +to change the automatic Text Completion +features. + + + +On the Bookmark Toolbar + If you have the Bookmark Toolbar showing, then +right click on any free part of it to bring up the +Bookmark Toolbar Menu which lets you change its position and whether items are +shown as text, icons, or both. + + + +Within a View +If you right click on any free area +of a view then you will get a menu that contains, among other options, the + Up, +Back, Forward and +Reload navigation commands. + + + + +On a File or Folder +This is a most useful feature. Right +clicking on the name or icon of any file or folder not only +selects that item but also brings up a menu allowing you to +Cut, Move, Copy or Remove the item in +various +ways, add it to your Bookmarks, open it with the program of +your choice or preview it, rename it, or edit the file type or +properties. + + +On the Status Bar +Right click on the Status Bar at the +bottom of a window or view to add or remove a view within &konqueror;'s +window. + + + + + + +Viewing Help, Man and Info Pages + +You can view &kde; Help and &UNIX; Man and Info pages directly in +&konqueror;, without having to start up KHelpCenter. + + +To view a &kde; Help page, enter +help:/application name (for +example help:/kmail to view the &kmail; documentation.) +into &konqueror;'s Location Toolbar window. + + + +If you want to read &UNIX; Man pages &konqueror; makes it easy. For +example type man:/touch or +#touch into the Location Toolbar to see the page for +the touch command. + +To browse through &UNIX; Info pages, entering +info:/dir takes you to Info's top level directory, then +it's just a matter of clicking on the right links to find the page you +want. Alternatively, use info:/command +name to go straight to the Info page you want. + +Unfortunately, &kde; Help pages are stored in such a way that they +cannot be viewed in other browsers. If you really need to do this your only +recourse is to go online and visit +http://docs.kde.org. + + + + + diff --git a/doc/konqueror/bookmarks.docbook b/doc/konqueror/bookmarks.docbook new file mode 100644 index 000000000..99eac7ab7 --- /dev/null +++ b/doc/konqueror/bookmarks.docbook @@ -0,0 +1,129 @@ + + + +&Pamela.Roberts; + + + +2003-11-05 +3.2 + + +Using Bookmarks + +Although you can use &konqueror;'s bookmarks to record the locations of +your own files and folders, they are most useful when you are surfing the +Web, letting you build up a list of useful sites. + +To open the Bookmarks menu you may either +left click on the +Bookmarks menu or use the &Alt;B shortcut. Once +the list is visible, you can navigate through it with the arrow keys or with +your mouse, then press &Enter; or +left click to visit the selected location. + +To add a new item to the list use Bookmarks +Add Bookmark or +&Ctrl;B or +right click on a clear space in the web page or +folder view and select Bookmark this Location from +the pop up menu. + +The Bookmarks list can contain subfolders containing +other bookmarks, you can create these with Bookmarks +New Bookmark Folder... . +To add a bookmark into a subfolder rather than into the main Bookmark list, +select the folder from within the Bookmarks list and use +the Add Bookmark item in that folder. + +You can also access your bookmarks from the +Navigation Panel. + + +The Bookmark Editor + +The BookmarksEdit +Bookmarks option opens the Bookmark +Editor. +This shows a tree view of your bookmarks and bookmark subfolders. +As is usual for tree views in &kde;, subfolders are shown with a small square +at the left of the folder name; if the square contains a + +sign left clicking on it will expand the view to +show the contents of that subfolder and the + sign will +change to -, left clicking on the +- sign will collapse the subfolder view. + +To select an item in the list you can left +click on it, or you can navigate through the list by using the +Up arrow and Down arrow keys to move around, +Right arrow to expand a subfolder and +Left arrow to collapse it. + +You can move an item to a different place in the list by using the +normal Drag and Drop or Cut and +Paste methods. The order in which the items appear in +the Bookmark Editor is the order they will appear in the +Bookmarks drop down list. The Insert +Insert Separator option can +be used to insert separating lines into the list wherever you wish. + +A new subfolder can be created at the selected point in the list by +using the Create New Folder... option in the +Insert menu or from the drop down menu you get when you +right click on an item in the main part of the +window, or with &Ctrl;N + + +To change the name of a bookmark or folder select it then press +F2 or choose the Rename item from +the Edit menu or the pop up menu that appears when you +right click on the item. Similarly, you can edit +the &URL; by pressing F3 or choosing the +Change URL menu item. + +The Bookmark Editor lets you import bookmarks from +a range of other browsers into &konqueror;'s bookmark list, putting them into + a new folder or replacing all current bookmarks. To do this select +Import from the File menu. The +FileExport + option can be used to export &konqueror;'s bookmarks to a +&Netscape; or Mozilla browser. + +If you often use the &Netscape; browser as well as &konqueror;, then +rather than importing your &Netscape; bookmarks into &konqueror; it is +better to select the Show Netscape Bookmarks in Konqueror +Windows item in the Settings menu. If you +do this any updates to &Netscape;'s bookmarks are automatically seen by +&konqueror;. + +To select which bookmark subfolder is used to hold the Bookmark +Toolbar items select the subfolder then choose Set as Toolbar +Folder from the Edit menu. + +If you are tidying up your bookmarks and have forgotten what a +particular web page is, you can easily open it from within the +Bookmark Editor by right clicking +on the item and selecting Open in Konqueror from +the pop up menu. If you just want to check that the &URL; is still valid +select Check Status instead. + +Don't forget to save your changes with +FileSave or +&Ctrl;S before you leave +the Bookmark Editor. + + + + + + diff --git a/doc/konqueror/browser.docbook b/doc/konqueror/browser.docbook new file mode 100644 index 000000000..9707e29ad --- /dev/null +++ b/doc/konqueror/browser.docbook @@ -0,0 +1,482 @@ + + + + +&Pamela.Roberts; + + + +2003-11-05 +3.2 + + + +&konqueror; the Web Browser + + + + +Browsing www.konqueror.org + + + + +Connecting to the Internet + +Once you are connected to the Internet you can use &konqueror; to browse +the Web just as easily as you can use it to handle your local files. Just type +a &URL; into the Location Toolbar window, press +&Enter;, and you are away! + + +If you use a dial-up modem connection, then you will be using +&kppp; or a similar dialer program to make the connection. + +If your machine is connected to a local area network +(LAN) that gives you a proxy connection to the Internet +then you will have to set &konqueror; up for the proxy connection. This can be +done with the Proxy page of the +SettingsConfigure Konqueror... + dialog. + +If you are lucky enough to have a high speed cable connection, +then the service provider will probably give you an external cable modem which +needs an ethernet connection to your machine. Unfortunately the details of how +to establish the connection depend on the service provider and to some extent +on which Linux/&UNIX; distribution you are using. Some ISPs +connect their customers to the Internet through a proxy server, in which case +you will have to set up &konqueror; to use it. You may find it useful to +search the archives of your distribution's user group mailing list for +help. + + + +An error message such as Unknown Host +usually means that &konqueror; cannot find a connection to the Internet or that +you have entered an incorrect &URL;. + + + + +Surfing and Searching + +Once you have a connection to the Internet, you can surf with +&konqueror; just as you can with any other browser. + +Type a &URL; into the Location Toolbar window, press +&Enter; or left click on the +Go button at the right hand end of the Location +Toolbar, and &konqueror; will download and display that page. +If you have visited the page before, &konqueror;'s +Automatic Text Completion feature can help +you type the &URL; a second time, or you could look through the +History page in the +Navigation Panel. If you want to use one of +the web's search engines, &konqueror;'s +Web Shortcuts feature can make this easier. + +Left click on a link in the page to + go there. + +To open a link in a new instance of &konqueror;, leaving the +old page still visible, &MMB; click on the link or right + click on it and select the +Open in New Window option. Alternatively, you might want to Open in New Tab. Tabbed Browsing will let +you hold a number of pages in one &konqueror; window and quickly switch +between them with a single mouse click. + +You could also select the multiple view mode with &Ctrl;&Shift;L + +or the Menubar Window Split View +Left/Right option which will let you see different +pages at the same time. This can be useful if you are looking through a +complicated set of HTML pages, but make sure the little link +box at the bottom right hand corner is empty when you are doing +this. +To go back to the previous page use the &Alt;Left Arrow +shortcut, the Back button on the Toolbar, or the Menubar +Go Back +option. +Similarly, once you have gone back you can go forward by using +&Alt;Right +Arrow, the Forward button, or the +Menubar +Go +Forward option. + +If you want to stop the download for any reason then use the +Esc key, the Toolbar Stop button or the +Menubar View +Stop item. + +When you are viewing a web page you should see two new icons in the +Toolbar, looking like magnifying glasses with small + and +- symbols. Use these to adjust the size of the text in the +page if you find it difficult to read. How well this works will +depend on how the web page has been constructed. + + + +Tabbed Browsing +By using this feature you can make &konqueror; load multiple web pages in +the same window, and switch between them using tabbed pages. This way, you can +preload a page in the background while you carry on reading another. + +To use tabbed browsing, right click on a +link and choose Open in New Tab from the drop down +menu. The page will be downloaded and displayed as normal, but with tabs +across the top of the view, one tab for each page. Left + click on a tab to view that page, or you can use the shortcuts +&Ctrl;[ and +&Ctrl;] to cycle through +the tab pages. Alternatively, you can scroll through the tabs using +the mouse wheel while the mouse pointer is +over the tab bar (presuming that your mouse has one). Also, +double-clicking over the empty tab bar space will open a new +tab. + +The Open in Background Tab option in the +&RMB; menu also downloads the page and shows a new tab for it, but the new +page will not be displayed until you left click +on the tab. + +If you check the Open links in new tab instead of in new window + box in the Web Behavior page of the +SettingsConfigure Konqueror... + dialog, &MMB; clicking on a link will open it +in a new tab page and if you hold the &Shift; key down while clicking the +&MMB; the link will be opened in a background tab page. + +Right clicking on a tab will bring up a +menu with the following options: + + + +New Tab +This opens a new, blank, tabbed page view. +You can then download a web page into it by typing the &URL; into the +Location Bar or by making a selection from the Bookmark Toolbar or the +Navigation Panel history page. + + + +Duplicate Tab +To create a duplicate tabbed page. + + + +Detach Tab +This option removes the selected tabbed +page from the current &konqueror; window and opens it in a new instance of +&konqueror;. + + + +Close Tab +To close the selected tab page. + + + +Reload +Reloads the content of the current tab. + + + +Reload all Tabs +Reloads the content of every tab. + + + +Switch to Tab +Displays a submenu showing all other tabs. Choosing a tab from +this list makes it the active tab. + + + +Close Other Tabs +To close all but the selected tab page. + + + + + + +Web Shortcuts + +If enabled, &konqueror;'s Web Shortcuts +feature lets you submit a query directly to a search engine or similar web site +without having to visit the site first. For example, entering +gg:konqueror into the Location Bar and pressing &Enter; +will ask Google to search for items related to +&konqueror;. To see what Web Shortcuts are available, and perhaps +add your own, use SettingsConfigure +Konqueror... to open the Settings + dialog box and click on the Web Shortcuts +icon. + +Once there, to make a new Web Shortcut select +New... and you will now have a new dialog +requesting the options and specifications of your new Web +Shortcut. The first field is for the human readable name of the search +provider; that is, simply the name of the Search provider. For +example, Google. + +In the next field you should enter the &URI; that is used to do a +search on the search engine. The whole text to be searched for can be +specified as \{@} or +\{0}. The recommended version is +\{@} since it removes all query variables +(name=value) +from the resulting string whereas \{0} will be +substituted with the unmodified query string. + +You can use \{1} +... \{n} to specify certain words from the +query and +\{name} +to specify a value given by +name=value +in the user query. In addition it is possible to specify multiple +references (names, numbers and strings) at once, like +(\{name1,name2,...,"string"}). The first +matching value (from the left) will be used as substitution value for +the resulting &URI;. A quoted string can be used as the default value if +nothing matches from the left of the reference list. + +To make a basic Web Shortcut here however, all that is required +is the &URI; that is used to do a search on the search +engine. Following our previous example with +Google, we would enter +http://www.google.com/search?q=\{@}&ie=UTF-8&oe=UTF-8. You +can often easily find where to place the \{@} +by doing a search on the search engine in question, and then analysing +the &URL; address. For example, doing a Google +search for &konqueror; produces the &URL;: http://www.google.com/search?q=konqueror&ie=UTF-8&oe=UTF-8. Now +you need to merely replace &konqueror; with +\{@} in this example to find the appropriate +&URI; to be entered. + +In the third field you need to enter the &URI; shortcut. For +example, the gg in +gg:konqueror. In the next option — the +drop-down menu — you have the option to select the character set that +will be used to encode the search query. Once you have entered all the +options correctly to your satisfaction, press &Enter; and your new Web +Shortcut should now be available in &konqueror;. + + + + + +Access Keys + +&konqueror; has full support for the +accesskey &HTML; attribute in +forms and links. Access keys allow you to use +the keyboard keys for functions which would perhaps normally be done +with the mouse, such as following links. The benefit of this is, quite +simply, that users can interact with a page with devices other than a +pointing device. + +To activate the access keys in &konqueror;, press and release +&Ctrl;. Once this is pressed, if a particular link on the website has +the accesskey attribute in the given link, then the +character(s) should appear over the link, identifying what needs to be +pressed. Then, you can enter the character(s) associated with the link +as an alternative to following the link with the mouse. To disable the +access keys once activated you can press &Ctrl; again. + +The proper use of this feature requires that the web +designer of the page has specifically assigned, using the +accesskey attribute, an access key for the +link. Many web designers might not include the +accesskey in their links and forms, and +consequently this feature will be unusable on the given +webpage. + + + + +Browser Identification +When &konqueror; connects to a web site it sends some brief browser +identification information, known as the User Agent string. +Many web sites use this information to customize the pages that they send +back, based on the strengths and weaknesses of different browsers. +Unfortunately, some badly designed sites refuse to work properly +unless you are using a browser that the site recognizes as a +valid one, even though if given a chance, &konqueror; will +work satisfactorily with the vast majority of web pages. +To overcome this problem you can change the browser identification +information that &konqueror; sends for specific sites or domains by +selecting Settings +Configure Konqueror... to bring up the +Settings dialog box and clicking the Browser Identification +icon. +Problems with getting a web page to work properly may also be due +to its use of &Java; or JavaScript. If you suspect that this may be the case +check that they have been enabled in the Java & JavaScript + section of the Settings dialog box. + + + + +Saving and Printing Web Items + +When you are viewing a web page you can save it (or at least the basic +&HTML; or similar source text) to your local disk with +LocationSave +As.... If the page +you are viewing uses frames, then you will also be given the +LocationSave Frame +As... option. Left click + in the frame you want to save first. + +If the page uses a background image, you can get and save that with the +LocationSave Background +Image As... option. + +But if what you really want is that glorious picture of the latest +Ferrari, then right clicking on the image will +give you a drop-down menu with a +Save Image As... option. Be sure to respect the +owner's copyright, and ask for permission before using any pictures saved this +way for anything other than your own viewing pleasure. + +If you right click on a link (which may be a +picture) and select Save Link As... from the pop +up menu the basic &HTML; or similar source text will be +downloaded and saved on your local disk. + +Right clicking on a link (which may be a +picture) and choosing Copy Link Location will copy +the &URL; of the link to the clipboard so you can then paste it into, say, an +e-mail to a friend telling her about this wonderful new site. + +Right clicking on a picture and choosing +Copy Image Location copies the &URL; of the picture +to the clipboard. + +To save a complete web page, including images, select +Archive Web Page... from the Tools menu. +Note that this feature is provided by a plugin + and may not have been installed on your system. The web page will be +saved as a single file with a .war +extension and can be opened by left clicking +on the filename in &konqueror; running in File Manager mode. + +Printing a copy of the page you are viewing is easily done with the +Menubar Location +Print... or Print +Frame option or with the Toolbar Print +button. + + + + +&FTP; + +&FTP;, or File Transfer Protocol, is one of the the earliest, and still +perhaps the best, way of transferring files between computers over the +Internet. + +With &FTP; you can see files and folders on the distant computer just +as if they were on your own system, download them onto your computer using +&konqueror;'s normal Copy and +Paste or Drag n' Drop methods and, if allowed, +upload files from your machine to the other computer's filesystem. To try it, +type the &URL; + + +ftp://ftp.kde.org/pub/kde + + +into the Location Toolbar and press &Enter;. As long as +you are connected to the Internet, and as long as the &kde;'s &FTP; site is +not too busy, you should end up seeing the /pub/kde folder at &kde-ftp; + +Although, strictly speaking, &FTP; &URL;s should +be entered starting with ftp:// and WWW + &URL;s starting with http:// +&konqueror; is usually smart enough to figure out what is meant, and insert +these characters for you if you leave them out. + +When you access an &FTP; site it will usually need some form of username +and password from you. To simplify things, most &FTP; sites that offer files +for free downloading will accept the word +anonymous as a username and your email +address as a password, and to make your life even easier &konqueror; will +automatically supply these without troubling you. + +If you try to access an &FTP; site that does not need a proper +username or password but which is too busy to accept any more connections, +&konqueror; often interprets the busy message as a request for +a name and password and will therefore pop up a dialog box asking you to +supply them. + +Sites that are more concerned with security will need a proper username +and password, in which case &konqueror; will ask you for them or you can +include the username in the &URL; you type into the Location Toolbar, as +for example + + +ftp://username@ftp.cia.org + + +&konqueror; will then prompt you for the password. + +&konqueror; can also support automatic logins as specified in a +.netrc file. Details of how to enable this feature are +given at +http://www.konqueror.org/faq.html#netrc + + + + + +&URL;s with Port Numbers +If you specify a port number in your &URL;, as in for example +http://intranet.corp.com:1080, you might get the error +message Access to restricted port in POST denied. This is done +for security reasons. If you nevertheless need to access a server on this port, +just add a key line + +OverridenPorts=CommaSeparatedListOfAllowedPorts + +to $KDEDIR/share/config/kio_httprc + or +~/.kde/share/config/kio_httprc. +For example +OverridenPorts=23,15 + +(it should not include any embedded spaces). +&konqueror; will reject the following ports (the list is hardcoded in +kdelibs/kio/kio/job.cpp): + + 1, 7, 9, 11, 13, 15, 17, 19, + 20, 21, 22, 23, 25, 37, 42, 43, + 53, 77, 79, 87, 95, 101, 102, 103, 104, + 109, 110, 111, 113, 115, 117, 119, 123, + 135, 139, 143, 179, 389, 512, 513, 514, + 515, 526, 530, 531, 532, 540, 556, 587, + 601, 989, 990, 992, 993, 995, 1080, + 2049, 4045, 6000, 6667 + + + + + + + diff --git a/doc/konqueror/cmndline.png b/doc/konqueror/cmndline.png new file mode 100644 index 000000000..380fead0f Binary files /dev/null and b/doc/konqueror/cmndline.png differ diff --git a/doc/konqueror/commands.docbook b/doc/konqueror/commands.docbook new file mode 100644 index 000000000..2b3142ecc --- /dev/null +++ b/doc/konqueror/commands.docbook @@ -0,0 +1,1210 @@ + + + + +&Pamela.Roberts; + + + +2003-11-06 +3.2 + + +Command Reference + +The shortcut key combinations shown in this chapter are the +default ones. They can of course be changed. + + + +Special Shortcuts +There are some useful shortcuts that are not shown in any of the menus: + + + +F6 + +Sets the focus to the text entry box in the Location Toolbar. + + + + +&Ctrl;] + +Activate the next tab page. + + + + +&Ctrl;[ + +Activate the previous tab page. + + + + + + + + + +The Menubar Note that some menu entries only appear when +they are applicable to the file you currently have open in &konqueror;. For +example, the +EditFind... + +item will not appear when you are viewing the contents of a directory. + +The <guimenu>Location</guimenu> Menu + + + + + +&Ctrl;N + +Location +New Window + +Open another &konqueror; +window. + + + + + +&Ctrl;&Shift;N + +Location New Tab + +Open another &konqueror; tab, containing a +blank page. + + + + + +&Ctrl;D + +Location +Duplicate Window + +Open another &konqueror; window, duplicating the +current +one. + + + + + +&Ctrl;O + +Location +Open Location... + +Open a folder or file by entering its path + (for example /home/pam or +/home/pam/fred.txt) in a simple dialog +box. + + + + +Location +Send Link + +Send an email containing a link to the current +location. + + + + +Location +Send File + +Send an email containing the selected file as an +attachment. + + + + + +Location +Save Background Image As... + + +Only applies if you are viewing a web page with a background image. Opens +the Save As dialog box to let you save the background +image file to your own computer. + + + + + + +&Ctrl;S + +Location +Save As... + +Only applies if you are viewing a document or web page, uses +the +Save As... dialog box to let you save a copy to your own +computer. + + + + +Location +Save Frame As... + +Similar to Save As... but for +use with a web site that uses frames. + + + + + +&Ctrl;P + +Location +Print... + +Print. + + + + +Location +Print Frame + +Print selected frame of a Web +page. + + + + +Location +Open With Netscape/Mozilla + +Open the web page you are +viewing in &konqueror; with &Netscape;/Mozilla as well. + + + + + +&Ctrl;Q + +Location +Quit + +Close down this instance of +&konqueror;. + + + + + + + +The <guimenu>Edit</guimenu> Menu + +Most items in the Menubar Edit menu can also be +found by &RMB; clicking on a free area of a view. + + + + + + +&Ctrl;Z + +Edit +Undo + +Sometimes lets you reverse a mistaken +action. + + + + + +&Ctrl;X + +Edit +Cut + +Puts selected item(s) into the clipboard. If +you then do a a Paste the item(s) will be moved +from the original location to the new one. + + + + + +&Ctrl;C + +Edit +Copy + +Copy selected item(s) to the +clipboard. + + + + + +&Ctrl;V + +Edit +Paste + +Paste item(s) from clipboard to the currently viewed +folder. + + + + +F2 +Edit +Rename + +Lets you rename a file or folder without + having to +open the Properties... dialog box. + + + + + + +Delete +Edit +Move to Trash + +Move selected item(s) to the Trash +folder. + + + + + +&Shift;Delete + +Edit +Delete + +Delete the selected item(s). + + + + +F7 +Edit +Copy Files + +Copy the selected item(s) to another +folder. + + + + +Edit +Move Files + +Move the selected item(s) to another +folder. + + + + +Edit +Create New + +Create a link to an application, +URL, Floppy or &CD-ROM; device, or create a new Folder or +text or &HTML; file. See the Create +New...section for more details. + + + + +Edit +Edit File Type... + +Open the Edit File Type +dialog box + + + + +Edit +Properties.. + +Open the Edit Properties +dialog box + + + +EditSelection + +Contains a number of options for changing the items selected in +the &konqueror; window: + + + + + +&Ctrl;+ + +Edit +Selection +Select... + +Together with the Unselect..., +Unselect All and Invert +Selection commands, this provides an easy and powerful way of selecting +multiple +files. +It brings up a simple dialog box where you can enter a file +name using the wild card characters * and ?, for example entering +*.html will select all files ending with +.html while ?a* will +select all files which have the letter a as the second character in their +filename. + + + + + +&Ctrl;- + +Edit +Selection +Unselect... + +Unselect files or folders via a dialog similar to the one used +by Select.... + + + + + +&Ctrl;U + +Edit +Selection +Unselect All + +Unselect all selected files or +folders. + + + + + +&Ctrl;* +Edit +Selection +Invert Selection + +Invert current selection. + + + + + +&Ctrl;A +Edit +Selection +Select All + +Selects all text in an &HTML; +page or in a text page being previewed, you can then +Copy it and Paste it into +a text editor. + + + + + + + + +&Ctrl;F +Edit +Find... + +Find a text string in a text +page you are previewing or in an &HTML; +page. + + + + +F3 +Edit +Find Next + +Find the next occurrence of the text string +in the text or &HTML; page. + + + + +Edit +Go to Line... + +Go to a particular line number in a text +page you are previewing. + + + + + + + + +The <guimenu>View</guimenu> Menu + + + + +View +View Mode... + +Selects Icon, +MultiColumn, Tree, +Detailed List +or Text view mode. + + + + +View +Use index.html + +If a selected folder contains a file +index.html, it will be opened as a web +page rather than showing the folder as a list of +files. + + + + +View +Lock to current location + +Lock to current location. + + + + + +View +Unlock all views + +Unlock all views. + + + + + +View +Link View + +Link current view to others in a multiple view +window. + + + + +F5 +View +Reload + +Reload. + + + + +Esc +View +Stop + +Stop load (particularly useful when web +browsing). + + + + +View +Icon Size + +Select size of icons used when +viewing a folder in Icon Mode. + + + + +View +Sort + +Choose order in which items are presented in the +window when in Icon or MultiColumn View mode. + + + + +View +Case Insensitive Sort + +Choose whether the sort order in Tree, Detailed List +or Text View modes is case sensitive. + + + + +&Ctrl;U + + +View +View Document Source + +View document source text. +Only available if you are viewing a document or &HTML; +page. + + + + + +View +View Frame Source + +View frame source text +Only applies if you are viewing a web site that uses frames. Similar to +View Document Source. + + + + + +&Ctrl;I + + +View +View Document Information + +View document information, such as title, &URL;, and &HTTP; +headers used in retrieving the document. +Only available if you are viewing an &HTML; +page. + + + + + +View +Security... + +Tells you whether the current browser connection is +secured with SSL and lets you bring up the +Cryptography Configuration... dialog +box. Left clicking on the Menubar padlock icon does +the same thing. + + + +View +Set Encoding + +Set encoding +Allows you to choose the character encoding used to display +&HTML; pages. Auto is usually the + best +choice. + + + + +View +Preview + +Lets you choose to show thumbnails of images, text +files +or &HTML; pages instead of the normal icons in Icon or +MultiColumn View modes. + + + + +View +Show Hidden Files + +Show hidden (dot) files. + + + + +View +Show details... + +Lets you choose which file and folder details are +shown in Tree, Detailed List and Text views. + + + + + +View +Background Color... + +Select background color for the File Manager mode. + + + + + +View +Background Image... + +Select background image for the File Manager mode. + + + + + + + + +The <guimenu>Go</guimenu> Menu + + + + + + +&Alt;Up Arrow +Go +Up + +Go up a level in the folder +hierarchy. + + + + + +&Alt;Left Arrow +Go +Back + +Go back to the previous +view. + + + + + +&Alt;Right Arrow +Go +Forward + +You can only go forward if you've just gone +back. + + + + + +&Ctrl;Home +Go +Home URL + +Go to your home folder. + + + + +Go +Applications + +Open the folder holding your +applications. + + + + +Go +Trash + +Open your Trash +folder in a separate window. + + + + +Go +Templates + +Open the Templates folder in a separate +window. + + + + +Go +Autostart + +Open your Autostart folder in a separate +window. + + + + +Go +Most Often Visited + + +Displays a submenu showing the &URL;s you visit most often. Selecting one +of these will make &konqueror; open that &URL;. + + + + + + + + +The <guimenu>Bookmarks</guimenu> Menu + +See the section Using Bookmarks +in this manual for a fuller description of these menu items. + + + + + + +&Ctrl;B + +Bookmarks +Add Bookmark + +Add current selection to your +bookmarks. + + + + +Bookmarks +Bookmark Tabs as Folder... + + +Create a bookmark folder containing links to all of the &URL;s currently +open in &konqueror; tabs. + + + + + +Bookmarks +Edit Bookmarks... + +Open the Bookmark Editor. + + + + + +Bookmarks +New Bookmark Folder... + +Create a new folder in your Bookmarks +folder. + + + + + + +The <guimenu>Tools</guimenu> Menu + + + + + + +&Alt;F2 +Tools +Run Command... + +Run a program by entering its name in a +simple dialog box. + + + + + +&Ctrl;T +Tools +Open Terminal + +Open a &konsole; terminal + window. + + + + +Tools +Find File... + +Open the &kfind; application. + + + +If you have &konqueror; plugins installed there will be additional +entries in the Tools menu. See the &konqueror; Plugins chapter for further +details. + + + +The <guimenu>Settings</guimenu> Menu + +See also the section Saving Settings +and Profiles. + + + + + + +&Ctrl;M +Settings +Show Menubar + +Show/Hide the menubar. + + + + +Settings +Toolbars + +Opens a sub menu where you can choose to show or hide +the various Toolbars. + + + + + +&Ctrl;&Shift; +F + +Settings +Full Screen Mode + + +Changes &konqueror; to full screen mode, in which the &konqueror; window +takes up the whole screen, and does not have the usual window decorations. To +exit full screen mode, click on the Exit Full Screen Mode +icon on the toolbar, or press &Ctrl;&Shift; +F. + + + + + + +Settings +View Properties Saved in Folder + +Save View properties to current + folder. If this is selected, a .directory file will be +written in the current directory storing the settings you last used to view the +directory. These settings are then loaded when you open the directory in &konqueror;. + + + + +Settings +Remove Folder Properties + +Remove settings stored in folder by View +Properties Saved in Folder. + + + + +Settings +Load View Profile + +Load the settings associated with a particular view profile. + + + + +Settings +Save View Profile "ProfileName"... + +Save the current settings to the current view profile. + + + + +Settings +Configure View Profiles... + +Lets you change an existing view profile or create a +new one. + + + + Settings +Configure Shortcuts... + Lets you +see and change &konqueror;'s shortcut key bindings, i.e. the +associations between actions such as Copy and keys +or combinations of keys such a &Ctrl;V. If you do +this take care not to duplicate an existing shortcut. + + + + Settings +Configure Toolbars... + +Lets you configure the Main, Extra and Location Toolbars. See the +section Changing Bars. + + + + Settings +Configure &konqueror;... +Lets you configure the File manager, File Associations, +Browser, Internet Keywords, Cookies, Proxies, Cryptography, User Agent, or +Toolbars by bringing up the appropriate dialog box. + + + + Settings +Configure Spell Checking... + +Displays the spell checking configuration dialog box, in which you can +change settings associated with spell checking in &konqueror;. + + + + + + + + + +The <guimenu>Window</guimenu> Menu + + + + + + +&Ctrl;&Shift;L +Window +Split View Left/Right + +Split View Left/Right. + + + + + +&Ctrl;&Shift;T +Window +Split View Top/Bottom + +Split View Top/Bottom. + + + + + +&Ctrl;&Shift;R +Window +Remove Active View + +Remove Active View. + + + + + +&Ctrl;&Shift;N +Window +New Tab + +Open a new, empty, tab page. + + + + + +&Ctrl;&Shift;D +Window +Duplicate Current Tab + +Open a duplicate tab page. + + + + + +&Ctrl;&Shift;B +Window +Detach Current Tab + +Show the current tab page in a new instance of +&konqueror;. + + + + + +&Ctrl;W +Window +Close Current Tab + +Close the current tab page. + + + + + +&Ctrl;&Shift;Left +Window +Move Tab Left + +Move the current tab one place left in the list of tabs. + + + + + +&Ctrl;&Shift;Left +Window +Move Tab Right + +Move the current tab one place right in the list of tabs. + + + + +Window +Show Terminal Emulator + +Open a small text terminal view at the bottom of the + main +window. + + + + + +F9 +Window +Show Navigation Panel + +Toggles the display of the &konqueror; navigation panel. See +. + + + + + + + +The <guimenu>Help</guimenu> Menu + + + + + +Help +&konqueror; Handbook + +View this document. + + + + + +&Shift;F1 +Help +What's This? + +Draws a question mark (?) beside the mouse +pointer, clicking on a window item such as the +Stop button will then display a brief explanation. See +Tooltips and What's This? . + + + + +Help +&konqueror; Introduction + +Revisit the introductory pages that you got when +&konqueror; was first started. + + + + +Help +Report Bug... + +Report bug. + + + + +Help +About &konqueror;... + +Display some brief information about +&konqueror;'s version number, authors and license agreement. + + + + +Help +About KDE... + +Show some information about the version of &kde; that +you are running. + + + + + + + + + + diff --git a/doc/konqueror/config.docbook b/doc/konqueror/config.docbook new file mode 100644 index 000000000..18ebfaa4f --- /dev/null +++ b/doc/konqueror/config.docbook @@ -0,0 +1,137 @@ + + + + +&Pamela.Roberts; + + + +2003-11-06 +3.2 + + + +Configuring &konqueror; + +In common with the rest of &kde;, &konqueror; is highly configurable, so +you can really get the look and feel that best fits your needs and +wishes. + + +Toolbars + +When &kde; is newly installed, &konqueror;'s window contains a Menubar, +Main and Location Toolbars and possibly a Bookmark Toolbar. + +Maybe you don't need all these toolbars. To hide one of them, go into +the SettingsToolbars + menu and uncheck its box. To show a hidden toolbar, just check +the box. + +The Menubar itself can be toggled on and off with the shortcut key +combination &Ctrl;M. + + + +On the left hand end of each bar you can see some vertical +lines. By &LMB; clicking on them, you flatten the bar, meaning +that it is hidden but can be quickly restored by clicking on the now +horizontal lines. You can also drag a bar into a new position with these +lines. + +If you right click on a Toolbar, you +will get a menu to configure this bar. You can choose the orientation, text +position and icon size + +The icons shown in the various bars can be changed by using the +Settings Configure +Toolbars... option, which brings up the +Configure Toolbars dialog box. The Main and Extra Toolbars +are divided into sections, such as Main Toolbar <&konqueror;>, Main +Toolbar <khtmlpart> and Extra Toolbar <khtmlsettingsplugin>. The +number and type of these sections will depend on whether &konqueror; is in Web +Browser or File Manager mode and whether you have &konqueror; plugins +installed. + + + + +Shortcuts +To change the shortcut key arrangements used by &konqueror; select +SettingsConfigure Shortcuts... +. This will launch a dialog box as shown below. + + + + + + +Shortcut config screenshot 1 + + +Search through the combo box to find the action you want to add or +change the shortcut keys for and select it by left +clicking on the name. You will then be able to change the shortcut by +selecting the None, Default or +Custom radio button or by clicking on the large button in +the Shortcut for Selected Action area. + +If you select Define Shortcut, and then +select Advanced, the dialog box below will be shown: + + + + + + +Shortcut config screenshot 2 + + +Choose whether you want to change the Primary or +Alternate shortcut then press the key combination you +want to act as the shortcut, for example +&Ctrl;&Shift;S. +If the Auto-Close box is checked the dialog will vanish +as soon as you enter the key combination, otherwise it will remain until you +press OK or Cancel. Clicking on +the little black icon with a white cross in it clears the shortcut. + + +User Defined Menus +You can add your own pop up menu to &konqueror; so that pressing one key +combination will make the menu appear then pressing a second key, or using the +Up arrow and Down arrow keys and pressing +Enter, will select an item from it. +To do this add a Custom shortcut for each of the +actions you want to appear in the menu and in the Define Shortcut + dialog check the Multi-Key box, press the +key combination that you want to bring up your new menu then, separately, +press the key that will choose that item from the menu. + + + + +Other Settings +Selecting Settings +Configure Konqueror... brings up a dialog box +which you can use to control most aspects of &konqueror;'s behavior. +It contains several sections which are selected by left + clicking on one of the icons at the left of the dialog +box. +Pressing the Help button will give you +detailed instructions about how to use each of these sections, or you can +use the What's This? feature. + + + + + diff --git a/doc/konqueror/credits.docbook b/doc/konqueror/credits.docbook new file mode 100644 index 000000000..ed63a9b5f --- /dev/null +++ b/doc/konqueror/credits.docbook @@ -0,0 +1,182 @@ + + + + +&Pamela.Roberts; + + + +2003-11-06 +3.2 + + + +Credits and License + +&konqueror;. Program copyright 1999-2003, the &konqueror; + developers: + + + + +&David.Faure; &David.Faure.mail; +developer (parts, I/O lib) and maintainer + + + +&Simon.Hausmann; &Simon.Hausmann.mail; +developer (framework, parts) + + + +&Michael.Reiher; &Michael.Reiher.mail; +developer (framework) + + + +&Mattias.Welk; &Mattias.Welk.mail; +developer + + + +&Alexander.Neundorf; &Alexander.Neundorf.mail; +developer (list views) + + + +&Michael.Brade; &Michael.Brade.mail; +developer (list views, I/O lib) + + + +&Lars.Knoll; &Lars.Knoll.mail; +developer (HTML rendering +engine) + + + +&Antti.Koivisto; &Antti.Koivisto.mail; +developer (HTML rendering +engine) + + + +&Dirk.Mueller; &Dirk.Mueller.mail; +developer (HTML rendering +engine) + + + +&Peter.Kelly; &Peter.Kelly.mail; +developer (HTML rendering engine, +JavaScript) + + + +&Waldo.Bastian; &Waldo.Bastian.mail; +developer (HTML rendering engine, I/O +lib) + + + +&Matt.Koss; &Matt.Koss.mail; +developer (I/O lib) + + + +&Alex.Zepeda; &Alex.Zepeda.mail; +developer (I/O lib) + + + +&Stephan.Kulow; &Stephan.Kulow.mail; +developer (I/O lib) + + + +&Richard.J.Moore; &Richard.J.Moore.mail; +developer (&Java; applet support) + + + +Dima Rogozin dima@mercury.co.il +developer (&Java; applet support) + + + +Wynn Wilkes wynnw@calderasystems.com +developer (&Java;2 manager support and other major improvements +to applet support) + + + +&Harri.Porten; &Harri.Porten.mail; +developer (JavaScript) + + + +Stefan Schimanski schimmi@kde.org +developer (&Netscape; plugin support) + + + +&Carsten.Pfeiffer; &Carsten.Pfeiffer.mail; +developer (framework) + + + +&George.Staikos; &George.Staikos.mail; +developer (SSL support) + + + +Dawit Alemayehu adawit@kde.org +developer (I/O lib, Authentication support) + + + +&Torsten.Rahn; &Torsten.Rahn.mail; +Graphics / icons + + + +Torben Weis weis@kde.org +kfm author + + + +&Joseph.Wenninger; &Joseph.Wenninger.mail; +developer (navigation panel framework) + + + +&Stephan.Binner; &Stephan.Binner.mail; +developer (misc stuff) + + + + +Documentation copyright 2000-2003 + + +&Erwan.Loisant; &Erwan.Loisant.mail; +&Pamela.Roberts; &Pamela.Roberts.mail; + + +Documentation updated for &kde; 3.2 by &Philip.Rodrigues; &Philip.Rodrigues.mail;. + + +&underFDL; +&underGPL; + + + diff --git a/doc/konqueror/dirtree.png b/doc/konqueror/dirtree.png new file mode 100644 index 000000000..fc20b2cc6 Binary files /dev/null and b/doc/konqueror/dirtree.png differ diff --git a/doc/konqueror/dragdrop.png b/doc/konqueror/dragdrop.png new file mode 100644 index 000000000..8994a5c89 Binary files /dev/null and b/doc/konqueror/dragdrop.png differ diff --git a/doc/konqueror/faq.docbook b/doc/konqueror/faq.docbook new file mode 100644 index 000000000..5429c71e7 --- /dev/null +++ b/doc/konqueror/faq.docbook @@ -0,0 +1,169 @@ + + + +&Pamela.Roberts; + + + +2003-11-06 +3.2 + + +Questions and Answers + + + + + + +Can I run &konqueror; from another window +manager? + +Just install &Qt;, kdelibs and kdebase, and from your favorite +window manager, launch &konqueror;. It should work just fine, but if it +doesn't (&kde; developers don't test that case often), report it to http://bugs.kde.org and try running +kdeinit before running &konqueror;; it usually +helps. + + + +Where does &konqueror; keep all its configuration +data? +Generally in the ~/.kde folder (this may +be ~/.kde3 on your system, depending on how &kde; 3 +was installed). Don't alter these files unless you really know what you are +doing. + + + +The ~/.kde/share/apps/konqueror/profiles folder +holds individual files containing settings for each of your profiles. + +Your bookmarks are held in ~/.kde/share/apps/konqueror/bookmarks.xml +Cookies are held in ~/.kde/share/apps/kcookiejar/cookies +Your history, as used for the auto-completion feature, is in +~/.kde/share/config/konq_history + +In the folder ~/.kde/share/config/ the files +konqiconviewrc, konqlistviewrc and +konquerorrc hold a whole lot of general configuration +settings. + +The folder +~/.kde/share/cache/http/ +contains the browser cache. + +The Navigation Panel uses the files and subfolders in +~/.kde/share/apps/konqsidebartng + + +Any folder specific view settings are put into .directory files in the individual +folders. + + + +How do I clear out the history file? +There are two histories: + +One is used for text completion in the Location Toolbar text entry +box. To clear this right click on the text entry +box and select Clear History +. + +The other is the log of visited locations. Select the History +page in the Navigation Panel, +right click on an entry and choose +Remove Entry to remove just that entry or +Clear History to delete all +entries. + + + + + + + +How do I enable, disable or clear the browser +cache? +If you select Cache in the dialog launched by +selecting +SettingsConfigure Konqueror... +, you will be presented with a dialog box that lets +you disable the cache, clear it or set its size, and change the caching +policy. + + + + +How can I change the timeout values used by &konqueror; +when web browsing? +In the Control Center Internet & Network +Preferences page. + + + + +How do I set my home page - the page loaded +on startup? +Start &konqueror; with the Web Browser icon +on the panel. Open the page you want to be loaded in any new Web +Browser window and select Save View Profile "Web +Browsing" from the Settings menu. + +All new &konqueror; windows that are started with the Web +Browser icon on the panel, or from the location +menu, and new empty tabs, will now start at this page. + +This does not change the behavior of the +Home button on the &konqueror; toolbar, which will +continue to take you to the &URI; defined in the &konqueror; configuration +module. You can reach that module from within &konqueror;, via +SettingsConfigure +KonquerorBehavior. By +default this is set to ~, which is your Home folder. +You may set this to any &URI;, either local or remote, and pressing the +Home icon on the toolbar will display it. + +To have &konqueror; start up with no page loaded, use +about:blank. + + + + +I can't find the answer to my question here. + +Take a look at +http://www.konqueror.org/faq.html or + +http://www.konqueror.org/konq-java.html. + + + + + + + diff --git a/doc/konqueror/filemanager.docbook b/doc/konqueror/filemanager.docbook new file mode 100644 index 000000000..c6fb880ba --- /dev/null +++ b/doc/konqueror/filemanager.docbook @@ -0,0 +1,898 @@ + + + +&Pamela.Roberts; + + + +2005-04-01 +3.4 + + +&konqueror; the File Manager + + +Folders and Paths +In &UNIX; and &Linux; all folders are arranged in a simple +inverted tree structure descending and branching down from from a single top +level folder. This means that you can get from any folder to +any other by going up until you reach a common point then +down through the appropriate subfolders until you reach +your +target. + +The position of any file or folder in the tree can be described by its +path, which is a simple list of the folders you would have +to descend through to get to the target folder or file. For example +/home/pam is the subfolder pam of the subfolder home of the top level folder, and +/home/pam/words.txt is the file words.txt in +that subfolder. The leading / in these paths represents the +top level folder. + +Every folder accessible by your system — including those on +other hard disk partitions, your floppy and &CD-ROM; — will appear +in the tree descending +from /, their exact paths will depend on how your system was set up (see +also +the section on Floppy and &CD-ROM; Drives). + +Every user on a &UNIX; / &Linux; system has their own home +folder to hold their personal files and settings; for example +/home/john and +/home/mary. The +symbol ~ is often used to represent the user's home +folder, so that ~/letter.txt refers to the file +letter.txt in my home folder. +Note that the term directory is often used instead of +folder. + + + +View Modes +In File Manager mode, &konqueror; shows you what files and +subfolders are held in a folder, and can provide you with some +information about them. +The path of the folder you are looking at is shown in +the Titlebar, and also in the Location Toolbar, prefixed with file: + to indicate that the folder is part of your computer's normal file +system. For example file:/home/pam. + +The way that &konqueror; displays the files and folders depends mainly +on your choice of View Mode. This can be selected from the +ViewView Mode +sub menu, which gives you the following options: + + + + + +Icon View +Displays the name and a suitable icon for each file or folder. + + + + +MultiColumn View +Similar to Icon View except that the +display is neatly formatted into regular columns. + + + + +Detailed List View +Displays each file or folder on a separate line, as a small +icon followed by the file or folder name followed by information about the +item. The amount of information shown is controlled by the +ViewShow Details +sub menu settings. + + + + +Text View +Similar to Detailed List View +except that icons are not shown and the first character in each line will be +/ if the item is a folder. + + + + +Tree View +This option is useful for +navigating through the folder tree below the current folder. +The display is similar to Detailed List View +except that the start of each line will show a small + sign +in a box if the item is a folder. +Left clicking on the box will expand the display to +show the contents of that folder. + + + + +Info List View +Similar to Detailed List View +except that, where applicable, it shows the number of lines, words and +characters and file format for each file. + + + + +The default file icons shown in Icon View and +MultiColumn View modes can be replaced by small +preview images of the file contents, see the section +File Previews of this handbook for more details. + + +File Tip Info +Checking the Show file tips box in the +Behavior page of the &konqueror; Configuration dialog causes a +small pop up information +window to appear when the mouse pointer is hovered over a file or folder name +or icon in Icon View or +MultiColumn View mode. + +If the Show previews in file tips checkbox is +checked the pop up window will also show a small image of the file contents. + + + + +File Previews +Selecting ViewPreview + from the Menubar will bring up a sub menu +that lets you enable file previews for certain types of file. +Generally this means that the file's icon will be replaced by a small +image showing the file contents. +If file preview is enabled for Sound Files +the file will be played whenever the mouse cursor is hovering over the file +name or icon. +Note that file previews are only available in Icon View + and MultiColumn View modes. +Because &konqueror; has to read much more data than just the file name +details to generate a preview, file previews may not be appropriate +when viewing files on a floppy or from a remote system. The Previews + page of the File Manager Configuration +dialog allows you to disable file previews for protocols such as +ftp where reading the extra data would take too +long. + + + + + +Navigation +To get to a file with &konqueror; you first need to navigate +through the folder tree to find the folder containing that +file. + +To move between folders you can simply step up and down the +tree: + + +To descend into a subfolder left + click on its name or +icon -- or if you have already selected it (see below) -- then just press +Enter. +To go up the folder tree you can click on the Up + button in the Toolbar, use&Alt;Up Arrow, or use the Menubar +GoUp +option. + + +To select a file or folder in the displayed folder +without opening it in any way use the up and down + arrow keys to move through the items. +The selected item will be highlighted and some information about it +will be displayed in the Status Bar. + +Setting the View Mode to +Tree View can help you locate folders in the tree below the +current folder; in this mode each folder is shown with a small box at +the left. If the box contains a + sign, left + clicking on the box (not on the folder name or icon) will +display a sub tree showing files and subfolders contained in that folder. +The small box will then change to show a - sign. +Left click on that to collapse the sub tree. Once +you have found the folder you are looking for, left + click on the folder name or icon to open it. + +The Navigation Panel can also help you +find your way around the file system. + +You can go directly to any folder by typing its path into the +Location Toolbar window or into the dialog box invoked by the Menubar +LocationOpen Location + item or by &Ctrl; +O. &konqueror;'s +Text Completion feature may be useful when you do this. Don't forget +that in &Linux; / &UNIX; file and folder names are case sensitive. + +When you have moved to a new folder you can go back to your +previous choice by using the Toolbar Back button, the +Menubar +Go Back +item, or &Alt;Left +Arrow. Once you have gone back you can go forward. Use the Toolbar +Forward button, the Menubar +Go +Forward item or &Alt;Right +Arrow. + +Alternatively, you can also choose to enter the parent folder by clicking on the Toolbar Up, the Go Up item, or with &Alt;Up +Arrow. + +Holding the &LMB; pressed while the mouse pointer is +over the Toolbar Up, Back or +Forward buttons brings up a menu of recently visited +locations. + + +Finding Files and Folders + +If you don't know or can't remember where a file or folder is within +your system, then use the Toolbar Find File button or the +Menubar ToolsFind +File... option. This will embed the file finder +application &kfind; into &konqueror;'s window. See the &kfind; Handbook +for help in using &kfind;. + + +If the name of a file or folder begins with a period (dot), then +it is a hidden file or folder, and will not normally be shown +by &konqueror;. To see hidden files or folders use the Menubar +ViewShow Hidden Files + option. +Another reason &konqueror; may not show the file or folder you are +looking for is that you may have the +View Filter plugin set to display only certain types of +file. + + + + +Floppy and &CD-ROM; Drives + +Any floppy disk, &CD; drive or other hard disk partition that you have +on your system will usually appear in the / +, /media, /mnt or +/auto folder, having a path something +like /mnt/floppy or +/cdrom. The details will depend on +how your system was set up. + +&UNIX; / &Linux; requires that you mount a floppy disk +or &CD-ROM; when you have inserted it into the drive, and mount + other hard disk partitions when you want to access them. You also +need to unmount a floppy disk or &CD-ROM; before removing it to register that +it is no longer available. + +How you do this will depend on how your system: + + +You may have an Automount facility, +in which case you don't have to bother about explicitly mounting and +unmounting, +although you may find that the &CD-ROM; occasionally starts up by itself for no +apparent reason. + +You may have Floppy, &CD-ROM; and hard disk +icons on your desktop, in which case &LMB; click on the icon to mount it. +Doing this should also bring up a &konqueror; window showing the contents of +the floppy, &CD-ROM; or partition. To unmount, right +click on the icon and choose the Unmount item. +Visit the section Create New... in this Handbook +to see how to create such an icon. + +Or you can do it the traditional way by typing into a text +console window: + +mount /mnt/floppy + + + +to mount, for example, the floppy drive, and + + + +umount /mnt/floppy + +to unmount it (umount not unmount). + + +Rather than having to open a text console to type the +mount + or umount commands, you may prefer to use +&konqueror;'s ToolsExecute Shell +Command +(&Ctrl;E) + feature. + + + + + + + + + + +Deleting Files and Folders + +&konqueror; gives you two ways to dispose of an unwanted file or +folder: + + +You can move it to the Trash folder, which +is the safest method as you can get it back if you realize that you have made a +mistake. + +You can just plain Delete it, which +removes the entry from the folder and adds the disk area occupied by the +file(s) to the system's list of free disk areas, in the same way as the +rm command. + + +The simplest way to remove a file or folder is to position +the mouse pointer over its name or icon and press the &RMB;, which +will bring up a menu containing the options Move to +Trash and Delete. + +Or, if you have selected the item, the Menubar +Edit menu will give you the choice of +Move to Trash and +Delete options. + +Del will move the selected item or items to Trash. + +&Shift;Del +will really, truly and irrevocably delete the selected item or +items. + +You won't be able to remove a file or folder if you don't have +the necessary permissions; see the section on Super +User Mode for further details. + + + + +Moving and Copying + +To copy a file or subfolder between folders you can: + + +Position the mouse pointer over its name or icon and hold down +the &RMB;, which will bring up a menu containing the +Copy option. Choose that. + +Or if the item is selected you can use the +Copy button on the Toolbar or the Menubar +Edit +Copy +item, or the &Ctrl;C +shortcut key combination. You can also select multiple files or folders to copy/move as well. + +Navigate to the folder you want to copy the item into then +Paste the item into the new folder by using the Toolbar +Paste button or the Menubar +Edit +Paste option or the &Ctrl;V shortcut, or by +moving the mouse pointer to a clear area of the window and holding the &RMB; +down to bring up a menu containing the Paste option. + + + +Moving a file or subfolder between folders can be done in the +same +way as copying, except that you choose the Cut +option +or &Ctrl;X +instead of Copy. The item that you have +Cut will be removed from the original folder when +you do the Paste into the new folder. + +You can also copy or move selected item(s) to another folder by using +Edit +Copy Files (F7) or +EditMove Files + (F8), or by selecting +Copy To or Move To from +the drop down menu you get when you right click on +an file or folder name in the File Manager window. + +You may not be able to copy or move a file or folder if +you don't have the necessary permissions. See the section on Super User Mode for further +details. + + +Using Drag 'n Drop + +&konqueror; also supports Drag and Drop copying and moving of files and +folders. + +You can do this by having two instances of &konqueror;, one showing the +folder you want to copy from, the other showing the target folder. +Position the mouse pointer over the item you wish to copy or move, then, +holding the &LMB; pressed, drag it to a clear space in the +target + +folder. Release the button and you will be +presented with a menu choice of Copy or +Move. Take care to drop the item into + an empty area of the target +folder view - dropping it on top of another file name or icon can cause +problems. + +You can also set up &konqueror; to show more than one folder within +its window and drag & drop between them. + + + + +Split Views for Drag & Drop + + + +This screenshot illustrates the use of the Menubar +Window Split View +Left/Right option, also available with the shortcut +&Ctrl;&Shift;L +, +to split the main &konqueror; window into two views, each showing the contents +of a different folder. + +To be able to show different folders in each view they should not be +linked; the little boxes at the bottom right of each view should be empty. + + +The active view, that is the one whose path is shown in +the Location Toolbar and which responds to navigation and Menubar commands, is +shown by the little green light in the bottom left corner. To make a view +active, left click on an empty area of the view or +on its Status Bar. + +To remove an active view from &konqueror;'s window use the &Ctrl;&Shift;R + shortcut, or the Menubar Window +Remove +Active View option, or &RMB; click on the Status Bar +and choose the Remove Active View option from the +resulting menu. + +If you use &konqueror; tabs, you can drag and drop between tabs +by dragging the file to the tab label, without letting go yet. The +destination tab will pop to the front, allowing you to continue +dragging and then drop the file. + + + + +Duplicate File Names +If you try to paste a file into a folder that already +contains a file with the same name, &konqueror; will pop up a dialog box warning +you that the file already exists. You can then choose to: + + + +Overwrite the old file with the newly copied one. +The Overwrite All button can be used if you have copied +multiple items. +Cancel the paste operation by pressing the Skip + or Skip All button. +Give the file that is being copied a different name. You can +do this by typing a new name into the text entry box or get &konqueror; to +Propose one. When you have done this press the +Rename button. + + + + + +Selecting Multiple Files + +You sometimes want to delete, copy or move a number of files that are +similar in some way. For example you may wish to move all of the .png graphics +files from one folder to another. &konqueror; makes this easy by letting you +select multiple files based on similarities in their file names. + +Use the Menubar +EditSelection +Select... item or the shortcut +&Ctrl;+. This +brings up a little dialog box in which you enter a filename containing +the wildcard characters *, which matches any number +of characters, and ? which matches a single +character. Press OK and &konqueror; will +highlight all files with matching names. For example; + + + flag*.png will +select all filenames starting with the letters flag and ending +with .png. +memo?.txt will +select memo1.txt and memo9.txt but +not memo99.txt. + + +When you have selected a range of files, you can narrow down the +selection +by uing the Menubar Edit +Unselect... option or &Ctrl;- to specify +which of the selected files should be removed from the selection. + +Use &Ctrl;U +or the Menubar Edit +Unselect All option or just +&LMB; click on a clear area of the view to cancel the +selection. + +You can even invert the selection: that is, deselect all selected +files and select those that were previously unselected. Use the +Menubar EditInvert +Selection option or &Ctrl;* to do this. + +You can also select multiple files and folders by holding the &Ctrl; button while you click on each individual file or folder. This enables you to then move or copy multiple files and folders to a different location at one time by using the same method above. + +A number of useful shortcut keys can be used in list, tree and text +view modes: + + + +Space + +Toggle the current selection. + + + + + +Insert + +Toggle the current selection and move down to the next item. + + + + + +&Ctrl;Up Arrow, +&Ctrl;Down Arrow, +&Ctrl;Home, +&Ctrl;End, +&Ctrl;Page Up, +&Ctrl;Page Down + + +Move the selection, toggling the selection of everything on the way. + + + + + +&Shift;Up Arrow, +&Shift;Down Arrow, +&Shift;Home, +&Shift;End, +&Shift;Page Up, +&Shift;Page Down + + +Deselect everything, then move the selection, selecting everything on +the way. + + + + + +Once you have selected the right files then the normal delete, copy or +move commands will act on all of the selected files at once. + +Depending on your keyboard type and locale, you may find +that the &Ctrl;+, &Ctrl;- and &Ctrl;* shortcuts +only work with the Numeric keypad +, - and +* keys. + + + + +Create New + +When &konqueror; is in File Manager mode, picking +Create New from the Edit +menu or from the context menu you get by &RMB; clicking on a free +area in a folder view gives you a submenu letting you create any +of the following in the current folder: + + + + +FileLink To Application... + +This option is most useful if you want to create an icon that +will open a particular application. It opens a dialog box with three tabbed +pages. The first, General, is where you choose an icon and +the text that will appear with it. The second page, +Permissions, lets you select who can use or modify the +icon. In the Application page you must enter the Command that +will run the application, for example, kedit to start up +the &kedit; text editor. kedit /home/pam/todo.txt would +open the file /home/pam/todo.txt in &kedit;. Advanced +options such as the file types which the application can open are also +available from this page. + +To make the application icon appear on your desktop, create the link in +your ~/Desktop folder (this may be +called something slightly different depending on how &kde; was installed on +your system) or get to the +Create New... sub menu by +right clicking on a free area of the desktop +instead of within &konqueror;'s window. + +If you have a lot of specialized application links and don't want to +clutter up the desktop, then why not create them in your Applications +folder. You can get there in &konqueror; by choosing +Go +Applications. Then create a single icon +on your desktop to open your Applications folder, which is usually in +~/.kde/share/applnk. + +To put an application link icon into the panel, first create it in the +Applications folder then drag the icon onto a clear area of the +panel. + + + + + +FileLink To Location (URL)... +This lets you create an icon to open &konqueror; at a +particular +folder or web page. As with Link To +Application... +you can make the application icon appear on your desktop by creating the link +in +your ~/Desktop folder or going to the +Create +New... sub menu by right clicking on a free area of the +desktop. When you first create it the text shown with the icon will be the full +path or &URL;. You can change it by right clicking on the icon, selecting +Properties... and entering the preferred text in +the +General tab page. + + + +DeviceFloppy Device... +Use this option to create an icon that will mount a floppy disk +and open an instance of &konqueror; showing the disk's contents. To unmount the +disk when you have finished with it right click on +the icon and select Unmount. In practice it doesn't +have to be a floppy disk but can be any hard disk or partition on your system +that is not normally mounted. However, in most cases you will want to create the icon +on +your desktop. + + + +Hard Disk... +This option is similar to Floppy +Device... but for a hard disk drive or + partition. + + + +CD/DVD-ROM Device... +This option is similar to Floppy +Device... but for a CD or DVD +drive. + + + +Folder... +An easy way of creating a new (sub)folder. + + + +Text File... +Use this to create an ordinary, empty, text file. A +dialog box will be opened for you to enter the name of your new +file. + + + +HTML File... +Creates a skeleton HTML source file. When +you +type the new file's name into the dialog box it is probably best to give +it a .html extension to avoid +confusion. + + + +Presentation Document... +Creates a skeleton &koffice; +&kpresenter; document. Give its name a .kpr +extension. + + + +Text Document... +Creates a skeleton KOffice &kword; +document using the standard &kword; style template. Give its name a .kwd extension. + + + +Spread Sheet Document... +Use this to create a new KOffice +&kspread; spreadsheet file, and name it with a .ksp extension. + + + +Illustration Document... +Creates a new KOffice &kontour; +document. Name it with the extension .kil. + + + + + + + +Changing Names and Permissions + +The two easiest ways to change the name of a file or folder is to either +right click on it and select +Rename, or select the file or folder and then press the F2 button. + +To change the name or permissions of a file or folder +right click on its name or icon and select the +Properties... item, or if you have +selected the file or folder, then you can use the Menubar +Edit +Properties option. + +This will bring up the Properties dialog box with two tabbed +pages: + + +General, which gives you some +information about the item and lets you change its name and, for a folder, +the associated icon. +Permissions, which shows you the item's +ownership and access permissions and lets you change the permissions. + + + + +Copy and Rename +If you want to make a copy of an existing file with a different name -- +perhaps as a backup -- in the same folder as the original file, do a normal +Copy then when you Paste +it a dialog box will pop up complaining that the file already exists. +Just type the new name into the dialog's text box and press the +Rename button (or if you are feeling lazy pressing the +Propose button will generate a new name for you). + + + +Super User Mode + +If you are running as a normal user and try to access files outside of +your own home folder you will often be prevented from doing so and get an +error message such as Access Denied. + +To access these files you need to be logged in as the system +administrator, often known as the Super User or root. + +Rather than logging out then in again, you can launch &konqueror; from +the +K Menu in Super User mode by selecting +SystemFile Manager - Super + User Mode +. You will be asked for the root +login password but as long as you can provide that &konqueror; will be started +up with full access privileges to all files on your system. + +Take care. As Super User (root), you have complete control of +your system, and a wrong command can easily do irrevocable damage. +Also, connecting to the internet as root is an extremely bad idea, as it +seriously increases your vulnerability to malicious hacking. + + + + + +Configuring File Associations + + + +&kde; provides many applications which can open many different +types of file. Most of the time, the defaults will work with no +problems, but &konqueror; provides a powerful system to allow you to +change the applications used to open each file type. For more details, +choose the +SettingsConfigure +Konqueror... menu item, select +File Associations in the configuration dialog, +and click on Help. + + + + + +At the Command Line + +Although &konqueror; is a very powerful and flexible +GUI file manager, there are occasions when the experienced +&Linux; / &UNIX; user wants to get down to the basics and work at the text +command line level. + +You can, of course, open an instance of &konsole;, perhaps with +&konqueror;'s Menubar ToolsOpen +Terminal option or with &Ctrl;T. +If you only want to launch a program or view a &URL;, the +ToolsRun Command +(&Alt;F2) option may be +easier. + +ToolsExecute Shell Command... + (&Ctrl; +E) opens a small command line dialog window where +you can enter a shell command such as ps -ax | grep kdeinit +. Note that it does not support full featured terminal control +characters, so applications such as top and +less will not work properly, but it is available immediately +without the delay involved in starting &konsole;. + + +For more complex operations, &konqueror; has another nice feature: the +Menubar WindowShow Terminal +Emulator option, which opens up a terminal window as +a new view within &konqueror;. As long as the link icon is visible at the +bottom right corner of each view, the terminal will follow any folder changes +you make in the normal file manager view. + + + + +Including the terminal emulator + + + + + + + diff --git a/doc/konqueror/index.docbook b/doc/konqueror/index.docbook new file mode 100644 index 000000000..ef4c485d3 --- /dev/null +++ b/doc/konqueror/index.docbook @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + +]> + + + + +The &konqueror; Handbook + + +&Pamela.Roberts; &Pamela.Roberts.mail; + + +The KDE Team +Developers + + + + + + +2000 2002 +Erwan Loisant +Pamela Roberts + + +&FDLNotice; + +2002-09-22 +3.1 + +&konqueror; is &kde;'s advanced File Manager, Web Browser and + Universal Viewing Application. + + + +KDE +Konqueror +Kdebase +File Manager +Browser +Viewer + + + + + +&konqueror-introduction; +&konqueror-basics; +&konqueror-filemanager; +&konqueror-browser; +&konqueror-path-complete; +&konqueror-bookmarks; +&konqueror-sidebar; +&konqueror-save-settings; +&konqueror-plugins; +&konqueror-config; +&konqueror-commands; +&konqueror-faq; +&konqueror-credits; + + + +Installation + +&konqueror; is part of the kdebase package which an essential part of +&kde;. + +For instructions on acquiring &kde; please see http://www.kde.org. + +For further information about &konqueror; you might like to visit +http://www.konqueror.org. + + + + + + + +&documentation.index; + + + diff --git a/doc/konqueror/introduction.docbook b/doc/konqueror/introduction.docbook new file mode 100644 index 000000000..14fc2a6c8 --- /dev/null +++ b/doc/konqueror/introduction.docbook @@ -0,0 +1,64 @@ + + + +&Pamela.Roberts; + + + +2003-10-20 +3.2 + + +Overview + +&konqueror; is an advanced +file manager for the +K Desktop Environment, providing file management functions ranging from simple +cut/copy and paste operations to advanced local and remote network file +browsing. Folder contents can be displayed in a variety of text and icon +view modes, which can include thumbnail +preview images of file contents. File and folder properties can easily be +examined and changed and applications launched with a simple click of the +&LMB;. + +&konqueror; is an HTML 4.01 +compliant web browser with built in support for +JavaScript (ECMA-262), CSS (Cascading Style Sheets) and +bidirectional scripts (such as Arabic and Hebrew). It provides support for the secure +running of &Java; applets, &Netscape; plugins for viewing &Flash;, &RealAudio; and &RealVideo; and SSL for secure +communications. Advanced features include automatic &URL; and form completion, +the ability to import bookmarks from other browsers and tabbed browsing. + + +&konqueror; is also an excellent full featured +FTP client. + +&konqueror; is a universal viewing application, +capable of displaying images and documents without having to launch another +application. It does this by embedding components (&kde; Parts) provided by +other applications; from &kview; for image viewing, &kdvi; for +DVI viewing, &kghostview; for &PostScript; documents and +from the various &koffice; applications for their document types. + + +&konqueror; is a fully customizable application +which anyone can configure to suit their own +needs, from changing the overall style and the sizes of text and icons to +selecting which items appear in the Menubar, changing the number and +positions of the toolbars and even defining new shortcut key combinations. +Different configuration profiles can be +saved for easy recall as needed. + + + + + diff --git a/doc/konqueror/konqorg.png b/doc/konqueror/konqorg.png new file mode 100644 index 000000000..0812aa045 Binary files /dev/null and b/doc/konqueror/konqorg.png differ diff --git a/doc/konqueror/man-kbookmarkmerger.1.docbook b/doc/konqueror/man-kbookmarkmerger.1.docbook new file mode 100644 index 000000000..dab890556 --- /dev/null +++ b/doc/konqueror/man-kbookmarkmerger.1.docbook @@ -0,0 +1,112 @@ + + + +kbookmarkmerger"> +]> + + + + KDE User's Manual + + &Frerich.Raabe; + &Frerich.Raabe.mail; + + February 1st, 2005 + K Desktop Environment + + + + &kbookmarkmerger; + 1 + + + + &kbookmarkmerger; + A program for merging a given set of bookmarks into the + user's list of bookmarks. + + + + + &kbookmarkmerger; + Qt Options + KDE Options + directory + + + + +Description +&kbookmarkmerger; is a program for merging a given set of bookmarks into +the user's set of bookmarks; if the user doesn't have any bookmarks created +yet, a new bookmark list is created and the given bookmarks are inserted into +it. While doing this, &kbookmarkmerger; keeps track of which files were +merged in a previous run already, so no bookmark will get installed to the +user's bookmarks more than once. In case &kde; is running while +&kbookmarkmerger; is executed, the &kde; bookmark subsystem will be informed +of any changes to the user's bookmarks, so that all applications accessing +that information (&ie; &konqueror;) will pick the changes up instantly. + +The traditionally used approach to achieve something like this was to +use carefully crafted skeleton home directories when creating a new user +account, to provide the user with a standard set of bookmarks. The problem +with this approach is that after the user account has been created, no new +bookmarks can be propagated. + +This mechanism is useful for system administrators who want to propagate +a bookmark pointing to a certain document (for instance, important notes about +the system) to all users. Distributors might find it useful as well, for +instance by augmenting the software packages they supply with bookmark files +which &kbookmarkmerger; merges into the user's bookmark list when the +package is installed. That way, documentation shipped with a software package +is easily and visibly accessible right after the package has been +installed. + +The only parameter required by &kbookmarkmerger; is the name of a +directory which shall be scanned for bookmark files. All files in the given +directory will be considered for being merged into the user's setup. The +files in the given directory should be valid XBEL +files. + + + +See Also +&konqueror; manual + + + +Examples +joe@hal9000:~> kbookmarkmerger /usr/local/extra-bookmarks +Merges all bookmark files stored in +/usr/local/extra-bookmarks into joe's list of +bookmarks. + + + +Standards + + + XBEL specification + + + + + +Restrictions +When determining whether a given bookmark file has been merged into the +user's bookmarks already or not, &kbookmarkmerger; merely looks at the +filename of the bookmark file - the contents are not checked at all. This means +that changing a bookmark file which was already merged into a user's bookmarks +will not trigger merging it once again. + +Also note that in case a user modifies a bookmark which was merged into +his setup, the original bookmark file will be left unmodified. + + + +Author +&Frerich.Raabe; &Frerich.Raabe.mail; + + + diff --git a/doc/konqueror/parts.png b/doc/konqueror/parts.png new file mode 100644 index 000000000..1439d0b89 Binary files /dev/null and b/doc/konqueror/parts.png differ diff --git a/doc/konqueror/path-complete.docbook b/doc/konqueror/path-complete.docbook new file mode 100644 index 000000000..a05f0845c --- /dev/null +++ b/doc/konqueror/path-complete.docbook @@ -0,0 +1,82 @@ + + + + +&Pamela.Roberts; + + + +2003-11-05 +3.2 + + + +Automatic Text Completion + +You can get &konqueror; to help you enter a path or &URL; into the +Location Toolbar by enabling one of the Text Completion +features. To do this right + click on a clear part of the Location Toolbar text entry box and select +Text Completion from the pop up menu. This will let you +choose between the following options: + + + + +None +What you get is what you type. + + + +Manual +When you have typed part of a path or &URL;, pressing +&Ctrl;E will complete the entry if it is +possible to do so unambiguously. + + + +Automatic +As you type into the Location Toolbar window &konqueror; will +automatically extend what you type to complete one possible path or &URL;, +highlighting the characters it has added. Continue typing if that's not what +you wanted or press &Enter; to accept it. + + + +Dropdown List +A drop-down window will appear as you type, showing the +possible matches to what you have typed so far. When the path or &URL; that +you want appears in the window double click on it with the &LMB;. +You can also use the +Down Arrow and Up Arrow +keys to select it then press &Enter;. + + + +Short Automatic +This is like Automatic mode except that it only extends +what you have typed as far as the next / symbol in the path +or &URL;. Press &Ctrl;E to accept the +suggestion, &Enter; when the complete path or &URL; is +shown. + + + +You should try out these different modes and pick the one that suits you + best. +The history of recently visited &URL;s that &konqueror; uses for the +Text Completion function can be viewed and edited in the History + page of the Navigation Panel. + + + + diff --git a/doc/konqueror/plugins.docbook b/doc/konqueror/plugins.docbook new file mode 100644 index 000000000..83ca89075 --- /dev/null +++ b/doc/konqueror/plugins.docbook @@ -0,0 +1,162 @@ + + + + +&Pamela.Roberts; + + + +2002-09-22 +3.1 + + + +Plugins + + +&Netscape; Plugins + +Currently, &konqueror; supports &Netscape; 4.x plugins. + +Selecting Settings +Configure Konqueror...Plugins + will give you a dialog box with two tabbed pages; +Scan and Plugins. + +The Scan page controls how &kde; scans for new +&Netscape; plugins, either manually by pressing the Scan for New +Plugins button or automatically each time &kde; starts up. + +The scan is done by looking through the folders listed in the +Scan Folders list for .so files containing plugin code. It examines every +such file to find out which MIME types the plugin +supports. It then creates MIME type definitions for &kde; in +the user's ~/.kde/share/mimelnk +folder to make other applications aware of them. + +The Plugins page shows you the &Netscape; plugins +that &kde; has found, and for each plugin it lists the MIME +types and the filename suffixes it uses to recognize them. + +The dialog box also contains a checkbox +Enable plugins globally which you can use to enable or disable +plugins that can be contained in HTML pages (these can +be considered a security risk). + + + + +&konqueror; Plugins + +The package kdeaddons contains several useful plugins that interact with +&konqueror; in various ways. These are explained briefly below, more detailed +information may be obtained by looking through the Konqueror +Plugins section in the &kde; Help Center. + + + + +Web Page Translation +This uses AltaVista's BabelFish site to translate the current +HTML page to whatever language you want (within reason). It +can be launched with ToolsTranslate +Web Page. + + + +Folder View Filter +This is controlled by +ToolsView +Filter and allows you to choose which types of item +are displayed in a folder. + + + +DOM Tree Viewer +Selecting ToolsShow +DOM Tree opens a new window which displays the +document object model (DOM) of the current HTML +page. + + + +HTML Validator +This is started with +ToolsValidate Web +PageValidate HTML. It +uses the W3C HTML validator to validate the current page, very useful when +creating web pages. + + + +CSS Validator +Started with +ToolsValidate Web +PageValidate CSS, it uses +the W3C CSS validator to validate the current page's Cascading Style +Sheets. + + + +HTML Settings +Select ToolsHTML +Settings to enable or disable a number of HTML +settings without going through the Settings dialog. + + + + +Image Gallery +In File Manager mode, you can select +ToolsCreate Image +Gallery to create an HTML page with +thumbnails of all the images in the current folder. By default the HTML page +is called images.html and the thumbnails are put into a +new thumbs folder. + + + + +User Agent Changer +Select ToolsChange +Browser Identification to get a menu that allows +you to change the User Agent string without going through the Settings + dialog procedure. + + + + +Archive Web Page +Invoked with Tools +Archive Web Page, this tool creates an archive +(.war ) file containing the web page being +viewed including the images. Left click on the +archive file name to view the saved page. + + + + +Navigation Panel Media Player +This is a simple media player, embedded as a tab page in the +Navigation Panel. You can drag songs or videos onto this page to play them. + + + + + + + + + + + diff --git a/doc/konqueror/save-settings.docbook b/doc/konqueror/save-settings.docbook new file mode 100644 index 000000000..9fb248815 --- /dev/null +++ b/doc/konqueror/save-settings.docbook @@ -0,0 +1,92 @@ + + + + +&Pamela.Roberts; + + + +2003-11-06 +3.2 + + +Saving Settings & Profiles + +General Settings +When you close down &konqueror; your current View +menu settings (such as the View Mode, +Use index.html and Show Hidden Files + items) are not automatically saved as the default +options; however, you can have &konqueror; remember these settings by +selecting SettingsSave View +Profile "Web Browsing"... and the current +setting will become the default option to be used the next time +&konqueror; is started. + +But you can also specify different View menu settings +for an individual folder. To do this check the View Properties +Saved in Folder box in the Settings menu, +change the View settings to whatever you want then uncheck +the +View Properties saved in Folder box. Doing this +creates a .directory file in that folder to hold the +folder View settings. Use the +SettingsRemove Folder Properties + option to remove the folder specific +settings (or just delete the .directory file). +One nice use of this feature is if you have a folder full of +pictures. You can set that particular folder to display thumbnails of the +pictures (by choosing Icon View and +PreviewShow Previews + from the View menu) when you open it, while +not displaying images as thumbnails in other folders. + + + +View Profiles +&konqueror; can save a whole set of options as a View +Profile. Some view profiles are part of the standard &konqueror; +installation, such as Web Browsing and File +Management, but you can add your own, too. + +To modify a view profile (say, the Web Browsing +profile), load the profile with +SettingsLoad View +ProfileWeb Browsing , and +change the &konqueror; settings to whatever you want. Now select +SettingsSave View Profile "Web +Browsing".... In the dialog which appears, you can +change the name of the profile, which will create a new profile with that name, +or you can leave the name as it is to modify the current profile. If you select +Save URLs in profile, the current &URL; will be loaded +when you load that view profile. This functions in a similar way to the +Home Page in many web browsers. If you want &konqueror; to start +up with an empty window enter about:blank into the +location bar before saving the profile. + +You can create a desktop icon to start &konqueror; with your new +profile. First create a desktop icon by dragging the &konqueror; icon from the +K menu onto the desktop and selecting Copy +Here. Then right click on the new +icon, select +Properties... and change Program +Name in the Execute tab page to +kfmclient , +MyNewProfile being what you called the new +profile. Then in the General tab page change the name to +something like MyNewProfile and pick a more +suitable icon. + + + + diff --git a/doc/konqueror/shortcut1.png b/doc/konqueror/shortcut1.png new file mode 100644 index 000000000..4d7a77c30 Binary files /dev/null and b/doc/konqueror/shortcut1.png differ diff --git a/doc/konqueror/shortcut2.png b/doc/konqueror/shortcut2.png new file mode 100644 index 000000000..7c461b417 Binary files /dev/null and b/doc/konqueror/shortcut2.png differ diff --git a/doc/konqueror/sidebar.docbook b/doc/konqueror/sidebar.docbook new file mode 100644 index 000000000..9ba4cb923 --- /dev/null +++ b/doc/konqueror/sidebar.docbook @@ -0,0 +1,201 @@ + + + + +&Pamela.Roberts; + + + +2002-09-22 +3.1 + + +The Navigation Panel + +The Navigation Panel appears as a separate view at the left of +&konqueror;'s window. It can be invoked with Window +Show Navigation Panel or +toggled on and off with the F9 key. + + + + +With the Navigation Panel + + + +It contains a number of tabbed pages; left +click on a tab's icon to view that page. Left +clicking on the icon for the visible page will collapse the Navigation Panel +so that only the tab icons are visible. + + + +Bookmarks +This page shows a tree view of your Bookmarks. +Left click on an item to open it in the main view. + + + + +History +This page shows a tree view of your browsing History. +Left clicking on an item will open it in the main +view, or you can open it in a new &konqueror; window by right + clicking and selecting New Window +from the pop up menu. +You can remove an item from the history by right + clicking on it and selecting Remove Entry +. Selecting Clear History... will +clear out the entire history. +The pop up menu you get when you right click +on any entry in the History page also gives you the option of choosing +whether the entire history is sorted by name or by date. +Selecting Preferences... from this pop up +menu brings up the History Sidebar control module. This +can be used to set the maximum size of your history and set a time after which +items are automatically removed. You can also set different fonts for new and +old &URL;s. +The Detailed tooltips checkbox controls how much +information is displayed when you hover the mouse pointer over an item in the +history page. + + + +Home Folder +This page shows a tree view of the subfolders your home +folder. Note that hidden folders (those with names +beginning with a dot) are not shown. +Left click on an item to open it in the +main view, or right click to display a pop up +menu allowing you to open the subfolder in a new window or as a new tab +page of the main view. + + + + +Network +This page is intended to show a tree view of your important +network connections, although local folders can also be included. Again, +you can left click on an item to open it in the +main view or right click to bring up a menu with +a wider range of possibilities. +The folders shown in the Network page are held in +the folder +~/.kde/share/apps/konqsidebartng/virtual_folders/remote/, and you can make +new ones just as you would make any other subfolder. The items within +these folders are held as .desktop files +and can be created with &konqueror;'s Create New +Link to Location (URL)... option. + + + + +Root Folder +The Root Folder tree has the path /, and is the base folder of your system's +local files. If you expand the Root folder you will find +another folder called root. This +belongs to the system administrator or Super User and is her home folder. +You will also find a folder called +home, in which you should be able to +find your own Home folder again. + + + + +Services +This page provides quick access to the following services: + +The Audio CD Browser. +Devices. This shows your hard disc +partitions, floppy and &CD-ROM;. Left click on +a device or partition name to mount it and display its contents in the main +view. A mounted device or partition can be unmounted by right + clicking on the device name and selecting Unmount + from the pop up menu. + +The LAN Browser allows you to browse other +machines connected to your Local Area Network. +The Print System Browser tree gives you quick +access to &kde;'s print manager Kprinter. + + + + +The Navigation Panel configuration can be changed by right + clicking on the empty area below the bottom tab icon or by +left clicking on the Configuration +Button icon (the top icon in the previous screenshot, it may not +be present in your setup). Doing this brings up a menu with the following +options: + + + +Add New +This option lets you add a new tab page to the Navigation +Panel. The new page can contain the Sidebar Media Player + (a &konqueror; Plugin +feature) or a new +Folder tree view. + + + + +Multiple Views +Selecting this option splits the Navigation Panel so that +two tab pages can be seen at once. + + + + +Show Tabs Left +This option lets you choose whether the tab icons are shown at +the left or right of the Navigation Panel. + + + + +Show Configuration Button +Use this option to show or hide the Configuration +Button icon. + + + + + +Right clicking on a tab icon brings up a +menu with the following options: + + + +Set URL +Only available for folder pages, this option lets you +change the &URL; (path) of the folder viewed in that page. + + + +Set Icon +To change the tab icon. + + + +Remove +To remove the tab page from the Navigation Panel. + + + + + + + + diff --git a/doc/konsole/Makefile.am b/doc/konsole/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/konsole/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/konsole/index.docbook b/doc/konsole/index.docbook new file mode 100644 index 000000000..826964fa4 --- /dev/null +++ b/doc/konsole/index.docbook @@ -0,0 +1,1465 @@ + + + + + +]> + + + + +The &konsole; Handbook + +&Jonathan.Singer; &Jonathan.Singer.mail; +&Kurt.Hindenburg; &Kurt.Hindenburg.mail; + + +&Kurt.Hindenburg; &Kurt.Hindenburg.mail; + + + +&Waldo.Bastian; &Waldo.Bastian.mail; + + + + +&Mike.McBride; &Mike.McBride.mail; + + + + + + + + +200020012002 +&Jonathan.Singer; + + +2005 +&Kurt.Hindenburg; + + +&FDLNotice; + +2006-08-16 +1.6.2 + +This document is the user handbook for the &konsole; + application. +&konsole; is an X terminal emulator for &kde;. + + +KDE +konsole +kdebase +command +line + + + + + +Introduction to &konsole; + + +What is a terminal? +&UNIX; operating systems were +originally designed as text-only systems, controlled by keyboard +commands -- what is known as a command-line interface +(CLI). The &X-Window; and &kde; and other projects +have since added the graphical interface you are now using. However, +the underlying CLI system is still there, and is +frequently the easiest, fastest and most powerful way to perform many +tasks. +&konsole; is what is known as an X terminal +emulator, often referred to as a terminal or a shell. It gives you the +equivalent of an old-fashioned text screen on your desktop, but one +which can easily share the screen with your graphical +applications. &Windows; users may be familiar with the +MS-DOS Prompt utility, which has the analogous +function of offering a DOS command-line under +&Windows;. (Although the &UNIX; CLIs offer far more +power and ease of use than does DOS!) + +Explaining the use of the &UNIX; CLI is +beyond the scope of this document, as it would require a lengthy +book. Fortunately, many such books are available in every language in +any good bookstore or library. There are also tutorials available on +the Internet. Enjoy &kde;, but don't be shy about learning to use the +command-line! You will find that even learning just the basics will +make your computer use much more efficient and enjoyable. + + + +What makes &konsole; special? +&konsole;'s +advanced features include simple configuration and the ability to use +multiple terminal shells in a single window, making for a less +cluttered desktop. + +Using &konsole;, a user can open: + +&Linux; console sessions +Shell sessions +Screen sessions +Midnight Commander file manager +sessions +Root console + sessions +Root + Midnight Commander sessions +User created sessions + + +These sessions can be renamed to help you keep track of all your shells, +or signaled (STOP, CONT, +HUP, INT, +TERM, KILL). + +For more control over &konsole;, a user can: + +hide/show the menubar and/or +frame +select the size of a &konsole; window, fonts, color +schemes, and key mapping +change location of the scrollbar or hide the +scrollbar +change location of the tabbar or hide the +tabbar + + +All chosen settings can be made the default for forthcoming sessions by +saving them. + +For those with a deep interest in the taxonomy of free X +terminals, there are two others of this kind: +xterm, the original, written even before X +itself (a month or two), and xvt, a +lightweight xterm clone, on which most +other currently available derivatives (notably +eterm) are based. + +After a decade, &konsole; is the first rewrite from the ground +up. While xterm has definitely been hacked +to death (its README begins with the words +Abandon All Hope, Ye Who Enter Here), &konsole; offers +a fresh start using contemporary technologies and understanding of +X. + + + + + +Use of &konsole; + + +Startup + +When &konsole; is started, an application (typically a &UNIX; +shell) runs in the window. Simply type at the prompt. + + +&konsole; Screen + + + + + +&konsole; Screen + +&konsole; with 4 +terminal sessions open. + + +A Tip of the Day window may also appear on +startup, offering hints on the use of &konsole;. If you do not wish to +receive tips, uncheck the Show tips on startup +box. + + + +History + +As lines scroll off the top of the screen, they can be reviewed +by moving the scroll bar upwards, scrolling with a mouse wheel or through +the use of the &Shift;Page Up (to move +back a page), &Shift;Page +Down (to move forward a page), &Shift;Up Arrow (to move up a +line) and &Shift;Down Arrow (to move down a +line) keys (provided the History option is on). + +In addition, &konsole; mimics the FreeBSD console when +scroll lock is pressed. When scroll lock is on, +ordinary in- and output from the shell is suspended, and you can +scroll through the history with Page Up, Page +Down, and Up Arrow and Down +Arrow. + +&konsole;'s history can be configured via +SettingsHistory... + + + +&konsole; provides a number of history related actions located in the +Edit menu. + + + + +Find in History... + + +Find Next + + +Find Previous + + +Save History As... + + +Clear History + + +Clear All Histories + + + +In &konsole;, references to history are to +the text that is displayed in &konsole;'s window. +The shell that is running in &konsole; (e.g. bash) also +has a history which is unrelated to &konsole;'s +history. + + + + +Sessions +If you often have to log into remote machines, or always run a similar set of +terminal applications, you can use &konsole;'s Session feature +along with &kde;'s session management to automate a lot of this for you. +Let's take the following example: +You often have open an ssh session to the machine +administration ready for generic administration +tasks. +You may have noticed the New Session button on &konsole;'s tab +bar contains a menu if you click and hold on it, and you can choose new session +types here. We are going to add new entries to this menu. + + +Click on the menu entry SettingsConfigure &konsole;... + +Choose the Session tab. + + +Fill in the first entry with a name. This is the +name that will show in the menu, and will be the default label instead +of Shell when you start a session of this type. + + +Enter a command just as you normally would if you opened a new +shell and were going to issue that command. For our first example above, you +might type ssh administration. + +On the lower part of the panel, configure this +session's appearance. You can have a different font, colour scheme, +and $TERM type for each session. + +Press the Save +Session... button. A dialog will ask you to confirm the filename. + + +Press OK. + + + +You should now be able to press and hold the New Session button +on the tab bar, and select your new session type from the list. A new shell +session will open within the &konsole; window, with the result of your executed +command. In our example, you will be at an ssh +passphrase prompt, and when you provide your passphrase, you will be logged +into the remote machine. +You can avoid this step also, by using +ssh-agent, but that is a topic for another goodie. +Perhaps you want to remotely tail your http error logs on a +webserver, you could use a commandline something like +ssh +webserver tail + +/var/log/httpd-error.log. + +You can use this to execute local commands as well. Try creating a +session where the command is tail /var/log/messages. + In this case, exiting the +running application will close the shell session as well. + +One really nice use of this feature is if you find you always have the +same set of open sessions, &kde; can open them all for you automatically +when you start a new &kde; session. Simply have them open as you like +when you exit &kde;, and they will be saved with your &kde; session, and +restored just like any other application when you restart &kde;. + +You can assign +shortcuts +to any session. + + + + + +Mouse Buttons + +This section details the use of the mouse buttons for the common +right handed mouse button order. +For the left handed mouse button order, swap left and right in the text below. + + + + + +Left + + All &LMB; clicks will be sent to a mouse-aware +application running in &konsole;. +If an application will react on mouse clicks, &konsole; +indicates this by showing an arrow cursor. If not, an I-beam (bar) +cursor is shown. + +Holding the &LMB; down and +dragging the mouse over the screen with a mouse-unaware application +running will mark a region of the text. While dragging, the marked +text is displayed reversed for visual feedback. Select Copy +from the Edit menu to copy the marked text to the clipboard for further use +within &konsole; or another application. The selected text can also be +dragged and dropped into compatible applications. Click on the selected +text and drag it to the desired location. Depending on your &kde; settings, +you may need to hold the &Ctrl; key while dragging. + +Normally, new-line characters are inserted at the end of each +line selected. This is best for cut and paste of source code, or the output +of a particular command. For ordinary text, the line breaks are often +not important. One might prefer, however, for the text to be a stream +of characters that will be automatically re-formatted when pasted into +another application. To select in text-stream mode, hold down the +&Ctrl; key while selecting normally. + +Pressing the &Ctrl; and &Alt; keys along with the &LMB; +will select a column of text. + + +Double-click with the &LMB; to select a word; +triple-click to select an entire line. + +If the upper or lower edge of the text area is touched while +marking, &konsole; scrolls up or down, eventually exposing text within +the history buffer. The scrolling stops when the mouse stops +moving. + +After the mouse is released, &konsole; attempts to keep the text +in the clipboard visible by holding the marked area reversed. The +marked area reverts back to normal as soon as the contents of the +clipboard change, the text within the marked area is altered or the +&LMB; is clicked. + +To mark text on a mouse-aware application (Midnight Commander, for example) +the &Shift; key has to be pressed when clicking. + + + + + +Middle + +Pressing the &MMB; +pastes text currently in the clipboard. Holding down the &Ctrl; key as you +press the &MMB; pastes the text and sends +it to &konsole;. + +If you have a mouse with only two buttons, pressing both +the &LMB; and &RMB; +together emulates the +&MMB; +of a three button mouse. + +If you have a wheel as the middle button, +rolling it in a mouse-unaware program will move &konsole;'s scrollbar. + + + + + +Right + +The items that appear in the menu when the &RMB; +is pressed depend on whether the menubar is visible. + +Menubar is visible: +Set Selection End, +Copy, +Paste, +Send Signal, +Detach Session, +Rename Session..., +Bookmarks +and Close Session +menu items. + +Menubar is hidden: +Show Menubar, +Set Selection End, +Copy, +Paste, +Send Signal, +New Session, +Detach Session, +Rename Session..., +Bookmarks, +Settings +and Close Session +menu items. + +In a mouse-aware application, press the &Shift; key along with the +&RMB; to get the pop-up menu. + + +Pressing the &Ctrl; key and &RMB; brings up the +Session menu. + + + + + + + + + +Menu Bar + +The menubar is at the top of the &konsole; window. +The menubar can be activated and deactivated by the +&Alt; key. +SettingsHide +Menubar allows the menubar to be hidden. When +the menubar is hidden, Show Menubar can be +reached by right clicking in the +window or by &Alt;&Ctrl;M +, which is the default shortcut for activating the menubar. +The menubar can also be toggled by assigning it a shortcut. + + + +<guimenu>Session</guimenu> Menu + + + +SessionNew +Shell +Open a new session with a terminal +shell. &Alt;&Ctrl;N + can also be used, as described in more detail below. + + + +SessionNew +Window +Open a new &konsole; window. + + + +SessionNew Linux +Console +Open a new session emulating a text-only &Linux; +system. +See the file README.linux.console in +the &konsole; source package for detailed information on how the &Linux; +console differs from a typical &UNIX; console. If this doesn't mean anything +to you, you almost certainly don't need to worry about it. + + + + +SessionNew Midnight +Commander +Open a new session with the + Midnight +Commander file browser. +This menu entry will only be visible if Midnight Commander +(mc) is installed on your system. + + + + + + +Session +New Root Midnight Commander + + +Open a new session with the Midnight +Commander file browser, as the root user. + +After being prompted for the root password, the # +prompt appears under the browser window, indicating that the user is +working with root +privileges. Again, working as root is frequently necessary but care +should be taken to avoid accidental damage. + +This menu entry will only be visible if Midnight Commander +(mc) is installed on your system. + + + + + + +Session +New Root Shell + + +Open a new session with a terminal shell, as the +root user. + +After being prompted for the root password, the # +prompt appears, indicating that the user is working with root privileges. This is frequently +necessary for installing new software and other system maintenance, but +care should be taken to avoid accidental damage. + + + + +SessionNew +Screen Session +Open a new session with the + Screen virtual terminal manager. +See man +for more information. +This menu entry will only be visible if Screen +(screen) is installed on your system. + + + + +Session +New Shell at Bookmark +Start a new terminal shell, in a folder +chosen from the bookmark list. + + + +Session +Print Screen... +Print the current screen. + + + + +Session +Close Session +Close the current session. + + + + +Session +Quit +Quit &konsole;, closing all sessions and any +applications launched from them. + + + + +You can also open a new session with a key shortcut. By default, +&Alt;&Ctrl;N +is used. You can also define your own key shortcuts through the +Settings +Configure Shortcuts... menu command. + +The list of available sessions will reflect what programs are +installed along with any user defined sessions. +The session list will be alphabetized for quick viewing. + +Finally, note that the session types can be modified, and new +types created, by using the configuration dialog, reached from the +Settings +Configure Konsole... +menu entry. + + + +<guimenu>Edit</guimenu> Menu + + + +Edit +Copy +Copy the selected text to the clipboard. + + + + +&Shift;Insert +EditPaste + +Paste text from the clipboard at the cursor +location. + + + +Edit +Send Signal +Send Signal - Send the specified signal to the shell +process, or other process, that was launched when the new session was +started.Currently available signals are: + + + + + +STOP +to stop process + + +CONT +continue if stopped + + +HUP +hangup detected on controlling terminal, or death of controlling +process + + +INT +interrupt from keyboard + + +TERM +termination signal + + +KILL +kill signal + + +USR1 +user signal 1 + + +USR2 +user signal 2 + + + + + +Refer to your system manual pages for further details by giving the +command man . + + + + +&Alt;&Ctrl;U +EditZModem Upload... +Send a file via ZModem. + + + +EditClear Terminal +Clear all text from the session window. + + + + +EditReset & Clear Terminal +Reset and clear the session window. + + + + +EditFind +in History... +Find a word or string of text in the current +history. Options allow case sensitive or backwards searches, and the use of regular +expressions in searches. Press the Edit button to use the &kde; +graphical editor to create a regular expression. + + + + +EditFind +Next +Move to the next instance of the +text for which you are searching. + + + + +EditFind +Previous +Move to the previous instance of the +text for which you are searching. + + + + +EditSave +History As... +Save the current history as a text + file. + + + + +EditClear + History + +Clear the history for the current + session. + + + +EditClear All + Histories + +Clear the history +for all sessions. + + + + + + +<guimenu>View</guimenu> Menu + + + +ViewDetach +Session +Open the current session in a +separate window. The name of the session is +displayed on the titlebar of the new window. + + + + +&Alt;&Ctrl;S +ViewRename +Session... +Open a dialog box allowing you to change +the name of the current session. The name is displayed +on the session tab. &Alt;&Ctrl;S + can also be used. + + + +ViewMonitor for +Activity +Flag the current session so it will show +an alert if activity occurs. An icon of a lit light bulb will +appear in the session's tab. Use this to alert you if something +happens while you are working in another session. The time before an alert can be +modified in the &konsole; preferences. + + + +ViewMonitor for +Silence +Flag the current session so it will show an alert +if no activity occurs for 10 seconds. An icon of a dark light bulb will +appear in the session's tab. Use this to alert you if a task stops +while you are working in another session. The time before an alert can be +modified in the &konsole; preferences. + + + +ViewSend +Input to All Sessions +Flag the current session so any commands entered +into it will be sent to all sessions. The session will have a small +icon in its tab to remind you to be careful of what you enter! +rm -rf *, +for instance, is probably not a good idea. + + + + + +&Ctrl;&Shift;Left +ViewMove +Session Left +Move the tab of the current session one tab to the +left. + + + + +&Ctrl;&Shift;Right +ViewMove +Session Right +Move the tab of the current session one tab to the +right. +&Shift; Left and &Shift; Right can be also +be used to move between sessions. + + + +View +Session icons... +At the bottom of the menu is a list of the available +sessions. Selecting one makes that session active.You can also use + the &Shift;Left/&Shift;Right keys to +cycle through the available sessions. + + + + + + + +<guimenu>Bookmarks</guimenu> Menu + + + + +BookmarksAdd Bookmark +Add the current location to the bookmark list. + + + +BookmarksEdit Bookmarks +Edit the bookmark list. + + + +BookmarksNew Bookmark Folder... +Add a new folder to the bookmark list. + + + + +The bookmark list is displayed at the bottom of the menu. Select a bookmark to change to +that location. + +You can use the bookmark editor to manually add URLs +like ssh://user@host or telnet://host to open remote connections. + + + + + + + +<guimenu>Settings</guimenu> Menu + + + + +SettingsHide +Menubar +Hide the menubar. + + + +Settings +Tab Bar +Control visibility/location of tabbar: +Hide, Top, or +Bottom. + + + +Settings +Scrollbar +Control visibility/location of scrollbar: +Hide, Left, or +Right. + + + + +&Ctrl;&Shift;F +Settings +Full Screen Mode +Toggle window between full-screen and normal +size. + + + +Settings +Bell +Set the bell: +System Bell, +System Notification, +Visible Bell, or +None. + + + + +Settings +Font +Set font size: +Enlarge Font or +Shrink Font. + +Use the Select... option to pick any +combination of font, size and style. + + + + +Settings +Encoding +Select character encoding. + + + +Settings +Keyboard +Choose desired keymapping. +The list of these keymappings is taken from +$KDEDIR/share/apps/konsole/*.keytab. The file +$KDEDIR/share/apps/konsole/README.KeyTab +describes the *.keytab format in more detail. +Add to or modify these files to match your needs. The default keytab is taken from +$KDEDIR/share/apps/konsole/README.default.Keytab. + + + + +Settings +Schema +Set colors of text and background. +The list is taken from +$KDEDIR/share/apps/konsole/*.schema. The file +$KDEDIR/share/apps/konsole/README.Schema +describes the *.schema format in more detail. +Add to or modify these files to match your needs. You can also create custom +schemas through the preferences dialog at Settings +Configure &konsole;.... + + + + +Settings +Size +Set size of text area (given in columns x +rows). + + + +Settings +History... +Open a dialog +where you can configure the history. The +Enable check box toggles saving of lines that have +scrolled off the top of the window. You can enter the Number +of lines to remember in the text field, or use the spinner +buttons to increase or decrease the number in steps of 100 lines. The +Defaults button will reset the history to 1000 +lines. Selecting Set Unlimited will cause all history to be saved. +Press OK to save your changes, or +Cancel to close the dialog without saving your +settings. + + + +SettingsSave +as Default +Save the current settings as the new +default. + + + +SettingsSave Sessions Profile... +Save the current set of sessions under a name you choose. +The profile can then be used by starting &konsole; from the command-line with the +--profile and the name of the profile. + + + + +SettingsConfigure +Notifications... +Customize notifications for &konsole;. + + + + +SettingsConfigure +Shortcuts... +Customize keyboard shortcuts for &konsole; commands. + + + + +SettingsConfigure +&konsole;... +Open the &kcontrolcenter; module, allowing +many additional changes to &konsole;'s interface and behavior, including the creation +of custom schemas and modification of the available sessions. + + + + + + + +<guimenu>Help</guimenu> Menu + + + +HelpKonsole +Handbook +Open the table of contents of this +document. + + + +Help +Tip of the Day +Display a helpful tip about the use of &konsole;. +Check the Show on start box to display a tip +each time &konsole; is started. + + +HelpReport +Bug... +Submit a bug report or a feature request for +&konsole;. + + + +HelpAbout +Konsole +Information about &konsole;'s +author + + + +HelpAbout +KDE +Information about the &kde; +project + + + + + + + + +Tab Bar + +The tabbar allows multiple terminal sessions to be attached to a single &konsole; window. + + +Tabbar Image + + + + + +Tabbar Image + +&konsole; with 4 terminal sessions open with the tabbar on the bottom. + + + +The SettingsTab +Bar menu item allows the tabbar to be moved to +the Top or Bottom. +The tabbar can also be hidden by selecting Hide. + +On the left side of the tabbar is a button which allows for a multitude of actions. + +Click on the button to start a new +standard session. +Clicking and holding on the button will popup +a list of sessions to select. +Right-clicking on the button (or any empty +space on the tabbar) will popup up a menu to set certain options: + + Tab Bar: + Hide, + Top, + Bottom. + + + Tab Options: + Text & Icons, + Text Only, + Icons Only. + + + Dynamic Hide + will hide the tabbar when there is only one session opened. + + + + Auto Resize Tabs + will automatically resize the tabs to the width of the tabbar. + + + + + + +On the right side of the tabbar is a button that closes +the current session. This button will be disabled when there +is only one session running. + +Right-clicking on any tab will popup another menu: + +Detach Session +Rename Session... +Monitor for Activity +Monitor for Silence +Send Input to All Sessions +Select Tab Color... +Switch to Tab... +Close Session + + + + + +Command-line Options + +When &konsole; is started from the command-line, various options +can be specified to modify its behavior. + + + + +List the various options. + + + + command +Execute +command instead of the normal shell. +Any arguments after command will be passed to +command, not &konsole;. + + + + + file +Start &konsole; using a specified .keytab +file to customize key bindings. + + + + +List all of the available keytabs. + + + + + +Start with a login shell environment. +What that does varies depending on your system, but generally it +means that files such as ~/.profile or +~/.bash_profile will be read. (If that doesn't mean +anything to you, don't worry about it, but keep in the back of your mind +for when you realize you need it.) + + + + name +Set the name that appears in the +titlebar. + + + + +Prevent &konsole; from closing when an +exit +command is issued in the only session window. + + + + +Start &konsole; without a + frame. + + + + +Disable the saving of lines + that scroll off the top of the window. + + + + +Start &konsole; with +the menubar hidden. + + + + +Disable the resizing + of the terminal window. + + + + +Start &konsole; with +the scrollbar hidden. + + + + +Start &konsole; +with the tabbar hidden. + + + + +Start &konsole; without Xft antialiasing. +Antialiasing of a small font may be difficult to read. + + + + file +Start &konsole; using a saved set of sessions. + + + + +List all of the available profiles. + + + + + name | file +Start &konsole; using schema 'name' or specified in 'file' to customize appearance. + + + + +List all of the available schemata. + + + + + +Enable extended &DCOP; &Qt; functions. + + + + + title +Set the window title. + + + + terminal +Sets the environment variable TERM to the specified +value. Read man + for more information on TERM. + + + + type +Start a session of the given type + rather than the default. + + + + +List all of the available session types. + + + + + CCxLL +Start a terminal window of CC Columns and LL +lines. + + + + dir +Open with +dir as the working folder. + + + + + +Examples: +% konsole 90x25 + +Starts a &konsole; window with 90 columns and 25 rows, with no +history + +% konsole echo_args Hello, thanks for using &konsole;! + +Starts a &konsole; window with the text printed 'Hello, thanks for using &konsole;!' + +The echo_args is a simple Bash script: +#!/bin/bash +echo $* + + + +&konsole; also accepts generic &Qt; and &kde; options: + + + + +List &Qt;-specific options + + + +The following &Qt; options have no effect on &konsole;: + + + + +, +fontname +Defines the application font + + + +, +color +Sets the default background color + + + +, +color +Sets the default foreground color + + + +, +color +Sets the default button color + + + + + + + + + + +List &kde;-specific options + + + +List all options + + + +Show the authors' names + + + +Show the version number + + + +Show license information + + + + + + +&DCOP; + +For an introduction to +&DCOP; and using dcop please look at +the User Guide entry on &DCOP;. + + + + + + + +Credits and Copyright + +As of &kde; 3.4, &konsole; is maintained by &Kurt.Hindenburg; &Kurt.Hindenburg.mail; + +Previously, &konsole; was maintained by &Waldo.Bastian; &Waldo.Bastian.mail; + +The application &konsole; Copyright © 1997-2005 +&Lars.Doelle; &Lars.Doelle.mail; + +This document was written by &Jonathan.Singer; +&Jonathan.Singer.mail; + +This document was updated for &kde; 3.4 by +&Kurt.Hindenburg; &Kurt.Hindenburg.mail; + +Originally converted to DocBook SGML by +&Mike.McBride; and &Lauri.Watts; + + + +&underFDL; +&underGPL; + + + +&konsole; on non-&Linux; platforms + +Information on building &konsole; on platforms other than &Linux; +is available in the README.ports file in the +&konsole; source package. It provides a list of experts for certain +platforms (Tru64, &Solaris;, OpenBSD) and requests volunteers from other +&UNIX; platforms. + +For more infomation please visit these websites: + +&kde; on +FreeBSD +&kde; on &Solaris; + + + + +&documentation.index; + + + + + + diff --git a/doc/konsole/konsole.png b/doc/konsole/konsole.png new file mode 100644 index 000000000..8ec9a1b4e Binary files /dev/null and b/doc/konsole/konsole.png differ diff --git a/doc/konsole/tabbar.png b/doc/konsole/tabbar.png new file mode 100644 index 000000000..fb0fb0dbe Binary files /dev/null and b/doc/konsole/tabbar.png differ diff --git a/doc/kpager/Makefile.am b/doc/kpager/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/kpager/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/kpager/index.docbook b/doc/kpager/index.docbook new file mode 100644 index 000000000..e2779abf5 --- /dev/null +++ b/doc/kpager/index.docbook @@ -0,0 +1,381 @@ + + + + + +]> + + + + +The &kpager; Handbook + + +&Dirk.Doerflinger; &Dirk.Doerflinger.mail; + + +&Antonio.Larrosa.Jimenez; &Antonio.Larrosa.Jimenez.mail; + + + + +&Matthias.Elter; +&Matthias.Elter.mail; + + + + +&Matthias.Ettrich; &Matthias.Ettrich.mail; + + + + + + + + +2000 +&Dirk.Doerflinger; + + +&FDLNotice; + +2001-01-28 +0.02.00 + + + +&kpager; gives you a thumbnail view of all virtual desktops. + + + + +KDE +pager +kpager +desktop +overview + + + + + +Introduction + +&kpager; gives you a thumbnail sketch of all your desktops. It is a handy +tool to let you see, resize or close windows on any desktop and move windows +around within or between desktops. + + + + + +Using &kpager; + + +Here's a screenshot of &kpager; + + + + + + Screenshot + + + + + +More &kpager; features + +&kpager; can show all virtual desktops and the applications within them. +It +can be used to chose an application or even to move applications within virtual +desktops or to others. + + + + + +Command Reference + + +The main &kpager; window + + +Using the mouse + +In &kpager; you can activate applications by clicking them with the +left button. + +The middle button of the mouse can be used for +dragging applications within &kpager;. Applications can either be moved within a +virtual desktop or to another one. + +Clicking the right mouse button anywhere in +&kpager; will open a context menu. + + + + +The Context Menu + +The context menu depends on where the right +mouse button is clicked: If it is clicked on the empty background of &kpager;, +it +only has two items: Configure KPager and +Quit. Otherwise, if clicked on a window, there are +also the name and the icon of the application, and +Minimize, Maximize, +To Desktop and Close are +displayed. See below for a detailed description of the menu items. + + + + +Maximize + +Maximizes the application window to the whole +desktop. This item only appears if right clicked on an application +window. + + + + +Minimize + +Iconifies the application. This item only appears if +right clicked on an application window. + + + + +To Desktop + +Sends the application window to the chosen virtual +desktop. This item only appears if right clicked on an application +window. + + + + +Close + +Closes the clicked application. This item only appears +if right clicked on an application window. + + + + +Configure Pager + +Opens the settings +dialog. + + + + +Quit + +Quits &kpager;. + + + + + + + + +The Settings Dialog + + +Here's a screenshot of the settings dialog + + + + + + Screenshot + + + + +In the settings dialog you will find five check boxes and two groups of +radio buttons. + + + +Enable Window Dragging +If this box is checked, you can drag windows inside of &kpager; +with the &MMB;. +Windows can be dragged over the desktop or even to another +desktop. + + + +Show Name +If this box is checked, the names of the desktops are shown in +the main view of &kpager;. + + + +Show Number +If this box is checked, the numbers of the desktops are shown in +the main view of &kpager;. If it is checked together with the Show +Name box, the name is displayed with ordinals, e.g. +1. Desktop. + + + +Show Background +If this box is checked, the wallpaper of each desktop - if set - +will be shown as backgrounds in &kpager;, too. + + + +Show Windows +If this box is checked, the applications on the desktops are +shown in &kpager; as small views. Otherwise, &kpager; will remain empty, just +for +choosing the virtual desktops. + + + +Type of Window +This group of radio buttons sets the kind of view for the +application window views. Plain will show just empty +rectangles with the proportions of the application window, +Icon will show them with their standard icon and +Pixmap with a small view of the contents of the application +window. Note that using the pixmap mode is only recommended for very fast +machines. + + + +Layout +In this group the layout of the &kpager; main view can be +set. Classical will show &kpager; in a 2xn grid like pager +applications in some other window managers, Horizontal will +show the virtual desktops in a horizontal view and Vertical +in a vertical row, which may perfectly fit on the side of the +desktop. + + + + + + + + +Questions and Answers + + + + +Why could I need &kpager;? + +&kpager; can be used as an alternative to the pager applet in the +panel. It has the advantage of being resizeable and within this able to show +icon or pixmap views of the running applications, move the windows across +desktops and run outside of the panel. + + + +How can I change the behavior of &kpager;? + +Clicking the right mouse button +anywhere within &kpager; lets you chose Configure from the +context menu for displaying the settings +dialog + + + + +Windows are transparent by default, how do I turn this off? + + +Currently, you cannot turn that option off within the config dialog, but +you can do it manually like this: + +Open the file $KDEHOME/share/config/kpagerrc with any +text editor like &kedit; or vi. If you have no +rights to write that file, you may need to do it as root or contact your system +administrator. In this file you will have to add a new key with the name +windowTransparentMode with a number as value. Values +are: + + +0 - No transparent windows at all. +1 - Only maximized windows are transparent. +2 - all windows are transparent (default). + + + + + + + + + + +Credits and License + + +&kpager; + + + +Program copyright 2000 Antonio Larrosa larrosa@kde.org + + + +Documentation copyright 2000 by Dirk Doerflinger +ddoerflinger@web.de + + +&underFDL; +&underGPL; + + + + +Installation + + +How to obtain &kpager; + +&install.intro.documentation; + + + + +Requirements + +As &kpager; is part of the &package; package, you will just need an +installation of the main &kde; packages. + + + + +Compilation and Installation + +&install.compile.documentation; + + + + + +&documentation.index; + + + + + diff --git a/doc/kpager/screenshot.png b/doc/kpager/screenshot.png new file mode 100644 index 000000000..ef895c128 Binary files /dev/null and b/doc/kpager/screenshot.png differ diff --git a/doc/kpager/settings.png b/doc/kpager/settings.png new file mode 100644 index 000000000..6aab9773f Binary files /dev/null and b/doc/kpager/settings.png differ diff --git a/doc/ksplashml/Makefile.am b/doc/ksplashml/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/ksplashml/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/ksplashml/index.docbook b/doc/ksplashml/index.docbook new file mode 100644 index 000000000..b64c2816c --- /dev/null +++ b/doc/ksplashml/index.docbook @@ -0,0 +1,1354 @@ + + + + + +]> + + + + +The &ksplash; Handbook + + + +&Teemu.Rytilahti; &Teemu.Rytilahti.mail; + + + +&Brian.C.Ledbetter; &Brian.C.Ledbetter.mail; + + + +&Ravikiran.Rajagopal; &Ravikiran.Rajagopal.mail; + + + + + + + +2003 +Teemu Rytilahti + + +2003-04 +Ravikiran Rajagopal + +&FDLNotice; + +2003-01-10 +1.01.00 + + + +&ksplash; is a nice splash screen that shows the progress of an +application that is loading. + + + +KDE +kdebase +ksplash +ksplashml +splashscreen +eye candy + + + + + +Introduction + +&ksplash; is a nice splash screen that shows the progress of an +application that is loading. Please report any problems or feature +requests to the &kde; mailing lists. The principal features of +&ksplash;: + + +Themeable +Uses plugins for complete customizability +Can be used by any application that uses DCOP + + + +This handbook will show you how to create themes for use with plugins +that are already available. If none of the plugins available satisfy +your tastes, you can learn how to customize the appearance of +&ksplash; completely by writing a plugin in C++. + + + + +Using themes + +To use themes from KDE-Look, extract them to +~/.kde/share/apps/ksplash/Themes/ for a single user, or +to +$KDEDIR/share/apps/ksplash/Themes/ +to make them available to all users of your system. + +You can also use the Splash Screen module under +Appearance in the &kde; control center to do this +automatically. + + +Using the &kcontrol; Module + +This module allows you to install, test and remove &ksplash; +themes. + +Down the side of the module is a list of currently available +&ksplash; themes. As you select one, a preview will display in the main +part of the window. When you have selected the one you wish to use, press +OK or Apply. Press +Cancel to exit the module without making changes, and +Defaults to restore the system default splash +screen. + +To install new modules, press Add..., and +find the theme on your computer. You do not have to unpack theme files, you +can safely select the compressed theme file. Installing a theme does not +make it the theme in use until you select it in the list and press either +OK or Apply. + +Although you can see a preview of the splash screen, you may like to +see how it looks in real use, for instance to see what the animation looks +like. You can test themes by selecting them in the list and clicking the +Test button. + +You can also remove themes you no longer wish to use, by selecting +them and pressing the Remove button. Note that your +user account may not have the right to remove themes installed system-wide. +It is also recommended you do not uninstall the Default +splash screen. + + + + + + +How to make themes for &ksplash; + +General +Making your own themes for &ksplash; is easy. After you have +finished your themes you can post them on the KDE-Look so that others can use +it. + + +Identifying your theme + +Let us create a theme called MyCoolTheme. For +the theme to be recognized by &ksplash;, it should be stored in a +folder called MyCoolTheme +under ~/.kde/apps/ksplash/Themes/. It should +have a file called Theme.rc, containing the +settings of the theme. You can specify large numbers of special things +to theme, change the plugin engine to use, and so on. You do not have +to use all the settings available; usually, the settings have an +acceptable default value. The basic syntax for entries in the +Theme.rc file is [option] = +[value] You can find the definitions of the various options +in the following sections. + + +Simple <filename>Theme.rc</filename> file + +[KSplash Theme: MyCoolTheme] +Name = MyCoolTheme +Description = A nice theme using XpLike engine +Version = 1.0 +Author = Real Name <realmail@mail.com> +## Use the XpLike engine for this theme. +Engine = XpLike +Show Icon = false +Welcome Text = Loading KDE + + + +After specifying the name, the description and the author of the +theme, you should first choose a theme engine (also known as a +plugin). Then, you can customize various features of the theme engine +by assigning key-value pairs as in the example file above. + + +Ensure that the name of the directory that contains the theme files +(~/.kde/apps/ksplash/Themes/MyCoolTheme +in this example) and the identifier ([KSplash Theme: +MyCoolTheme] in this example) of the theme in the +Theme.rc file are identical. Otherwise, &ksplash; will not +recognize the theme. + + + + + +Background files + +When &ksplash; starts, it tries to find a background image for +your current screen resolution, if the theme engine uses one. The +background image file should be named in the following format: +Background-WWWxHHH.png. + +For example, you might use a file called +Background-1024x768. If the background image for +your screen resolution cannot be found, it tries to resize the +original Background.png or the file specified in +Theme.rc to suit the current resolution. Resizing +on-the-fly will certainly take some time, so you should provide +background images for at least the following sizes: 1280x1024, 1024x768 +and 800x600. + + + + +Options for Theme Engines + + +Default Theme + +Default Theme Options + + + +Name +Argument +Explanation + + + +Always Show Progress +[true/false] +Indicates whether loading progress should be shown. Default is +true. + + +Label Foreground +[color] +Determines what color to use for the statusbar text. Default is #FFFFFF (white). + + + +Icons Flashing +[true/false] +Indicates whether icons should flash. Default is true. + + + +
+
+ + +Standard Theme + +Standard Theme Options + + + +Name +Argument +Explanation + + + +Statusbar Position +[top/bottom] +Toggles the position of the statusbar on the screen. Default is +bottom. + + +Statusbar Visible +[true/false] +Indicates whether the statusbar should be shown. Default is true. + + +Progress Visible +[true/false] +Indicates whether loading progress should be shown. Default is +true. + + + +Statusbar Font +[fontname] +The font used in statusbar. Default is Helvetica. + + +Statusbar Font Size +[size] +The font size for the statusbar. Default is 16. + + +Statusbar Font Bold +[true/false] +Indicates whether the statusbar font should be bold. Default is +true. + + +Statusbar Font Italic +[true/false] +Indicates whether the statusbar font should be italic. Default is +false. + + + +Statusbar Foreground +[color] +The foreground color of statusbar. Default is white. + + +Statusbar Background +[color] +The background color of statusbar. Default is black. + + +Statusbar Icon +[true/false] +Indicates whether the statusbar should have an icon. + + +Icons Visible +[true/false] +Indicates whether icons should be visible. Default is true. + + +Icons Jumping +[true/false] +Indicates whether icons should be jumping. Default is true. + + +Icon Position +[0-3,10-13] +Position where the icons are shown. Default is bottom-left. + + +Splash Screen +[name] +Changes the splash screen image that is shown. + + + +
+
+ + +Redmond theme + +Redmond theme options + + + +Name +Argument +Explanation + + + +Background Image +[filename] +User defined background image to use. + + +User Icon +[Iconname] +Name of standard icon to show for user. Default is +go. + + +Welcome Text +[text] +Text shown in splash screen. Default is "Welcome". + + +Username Text +[text] +Text shown instead of user's real name. + + + +Welcome Text Position +[x,y] +Position on the screen where the Welcome Text is shown. + + +Username Text Position +[x,y] +Position on the screen where the username is shown. + + +Action Text Position +[x,y] +Position on the screen where the current action is shown. + + +Icon Position +[x,y] +Position on the screen where the user icon is shown. + + + +Show Welcome Text +[true/false] +Toggles showing of welcome text. Default is true. + + +Show Welcome Shadow +[true/false] +Toggles showing of welcome text's shadow. Default is true. + + +Show Username +[true/false] +Toggles showing of username. Default is true. + + +Show Action +[true/false] +Toggles showing of action currently being performed. Default is +true. + + +Show Icon +[true/false] +Indicates whether icon should be shown. Default is true + + +Use KDM User Icon +[true/false] +Show user's login icon. Default is true. + + + +
+
+ + +MacX Theme + +MacX Theme Options + + + +Name +Argument +Explanation + + +Icon Size Minimum +[size] +Assign the minimum size for icons. Default is 16. + + +Icon Size Maximum +[size] +Assign the maximum size for icons. Default is 64. + + +Optimized Icon Rendering +[true/false] +Optimize icon rendering. Default is true. + + +Progress Bar Visible +[true/false] +Default is true. + + +Progress Bar Position +[top/bottom] +Toggles whether statusbar should be in bottom or top. Default is +bottom. + + +Icons Jumping +[true/false] +Indicates whether icons should be jumping. Default is false. + + + +
+
+ + +MacClassic Theme + +MacClassic Theme Options + + + +Name +Argument +Explanation + + +Icon Position +[0-3,10-13] +Position of the icons on the screen. Default is bottom left. + + +Icons Jumping +[true/false] +Indicates whether icons should be jumping. Default is false. + + +Icons Visible +[true/false] +Indicates whether icons should be visible. Default is true. + + +Splash Screen +[name] +Changes the splash screen image that is shown. + + + +
+
+ + +2k theme + +2k theme options + + + +Name +Argument +Explanation + + +Title Background Color +[color] +The background color of title. Default is dark blue. + + +Title Foreground Color +[color] +The foreground color of title. Default is white. + + +Status Text Color +[color] +The color of status texts. Default is the same as Title Background +Color. + + +Rotator Color 1 +[color] +Defines the color of rotator 1. Default is dark blue. + + +Rotator Color 2 +[color] +Defines the color of rotator 2. Default is cyan. + + +Rotator Speed +[value] +Defines the speed of the rotator. Default is 30. + + +Window Title +[text] +Specifies the title text of the window. + + +Logo File +[filename] +Defines the logo used. + + + +
+
+
+
+ + +Using &ksplash; From Within Your Own Application + + In this chapter, we describe a simple method for using +&ksplash; as the splash screen for your &kde; application. If you do +not develop applications for &kde;, you can skip this chapter. + + +Basic Requirements + + Your &kde; application must be &DCOP;-aware. &DCOP; is the &kde; +technology used to communicate between applications. If you use the +standard &kde; application +framework, this is taken care of automatically. For +information about &DCOP; and related &kde; technologies, please visit +the &kde; developers' +corner. + + + +Starting &ksplash; + +Before your application starts its computation intensive work, +or before it starts loading plugins, &etc;, invoke &ksplash; as +follows: + + +DCOPClient *c = kapp->dcopClient(); +QString error; +QCString KSplashName; +int pid = 0; +QStringList args; +args << "--theme=MyCoolTheme" << "--managed"; +if (kapp->startServiceByDesktopName("ksplash", args, &error, +&KSplashName, &pid)) +{ + KMessageBox::sorry(0, error, "Unable to invoke KSplash"); + // Some error processing here. +} + + +We will assume that there is only one instance of &ksplash; +running. Other cases are slightly more complex. Please see the &DCOP; +documentation for further details. + + + +Showing messages + +Before you show any messages, you need to set up the number of +steps you will show. For example, the &kde; startup procedure uses 7 +steps. + + + QByteArray data; + QDataStream arg(data,IO_WriteOnly); + arg << someNumber; + if (!(c->send(KSplashName, "KSplashIface", "setStartupItemCount(int)", +data)) + // Some error processing here. + + +Whenever you want to display a message with or without an icon, use + + + arg << QString("iconName") << QString("programName") << +QString("Some description"); + if (!(c->send(KSplashName, "KSplashIface", +"programStarted(QString,QString,QString)", data)) + { + // Some error processing here. + } + + + Each time you call programStarted, the +steps completed is incremented. When your program has finished its +startup, do the following to make the splash screen go away: + + + if (!(c->send(KSplashName, "KSplashIface", "startupComplete()", data)) + { + // Some error processing here. + } + + +That's it! You don't need anything more to take advantage of all +that &ksplash; has to offer you. + + + + + + + + +Writing new &ksplash; plugins + +Writing new &ksplash; plugins is not difficult. In this chapter, we will +write +a simple plugin that will emulate the splash screen of a well known operating +system. This +tutorial assumes that you know the basics of C++, and a little bit of KDE/Qt +programming. + + +Basic Requirements + +We will create a plugin called 2k. The plugin name is used in +various +places, and is important that you consistently use it so that the plugin is +recognized by +&ksplash;. &ksplash; plugins are actually dynamically loadable libraries with +the following +naming convention: + + +The library should be named as +ksplash+lowercasethemename. For our +theme, it will be ksplash2k. +It should have a corresponding desktop file which is named as +ksplash+lowercasethemename.desktop. For our theme, it will +be +ksplash2k.desktop. +Finally, the object that is returned by the library should be a class +which is named +Theme+themename. For our example, it will be +Theme2k. + +Do not worry about it if you don't understand all of the above. We will +consider each +of those points in detail later. The other very important detail is that the +plugin class +should be derived from ThemeEngine. + + + +Building the skeleton framework +We will use the &kde; application framework which will take care of +building the plugin +and will provide us with platform independence without any work on our part. To +do that, +make sure you have the kdesdk package installed. Run the +command +kapptemplate to produce an application named "2k". It will +create a +toplevel folder which contains generic files such as AUTHORS, &etc;. We are most +interested +in the subfolder called 2k. Go into that +subfolder +and delete all the files there. Now we have the skeleton we require. + + +The next step is to create a .desktop file which, when +installed, will +tell &ksplash; that our plugin is available. Consistent with the naming +conventions laid out +in the preceding section, +create a file called +ksplash2k.desktop in that folder. It should contain the +following lines: + + + +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Comment=KSplash Plugin +Name=KSplash2k +ServiceTypes=KSplash/Plugin +X-KDE-Library=ksplash2k +X-KSplash-Default=true +X-KSplash-PluginName=2k +X-KSplash-ObjectName=Theme2k + + + +The Encoding, Type, +Comment and +ServiceTypes are the same for all plugins. The plugin name +and the library +name follow the conventions noted earlier. The entry +X-KSplash-Default takes +a boolean value which determines whether it is shown in the control panel +configuration +module by default. Except for some very rare cases, it should be +true. + + + +Declaration of plugin class +Now that we have the preliminary work done, let us get into the actual fun +part - creating +a class that will provide the behavior we want. While we are free to make this +class do +almost anything we want it to do, there are a few restrictions. + +Plugin classes must inherit the ThemeEngine +class. +Plugin classes must be named according to the rule: +Theme+PluginName. +Plugin classes should provide a static +function called names +that returns a list of names by which it can be invoked. +If the plugin can be configured in the control center module, it +should provide a +ThemeEngineConfig-based class for the +configuration. +Plugin classes must override at least one of the virtual +functions slotSetText, +slotSetPixmap, slotUpdateProgress and +slotUpdateSteps to make it usable. +The constructor should take the form +ThemeEngine( QWidget *parent, const char *name, const QStringList +&args ) +so that it can be used with +KGenericFactory. + +The last requirement may seem complicated, but, as we will see later, by +adding a single +line to your source files, you can usually ignore it. + + +Code for the header file +Given the constaints, we will now see what the header file +theme2k.h looks +like this: + +Listing for <filename>theme2k.h</filename> + +#ifndef __THEME2K_H__ +#define __THEME2K_H__ + +#include <qlabel.h> +#include <qwidget.h> + +#include <kdialogbase.h> +#include <kpixmap.h> +#include <ksplash/themeengine.h> + +class RotWidget; + +class Cfg2k: public ThemeEngineConfig +{ + Q_OBJECT +public: + Cfg2k( KConfig * ); +}; + +class ObjKsTheme; +class Theme2k: public ThemeEngine +{ + Q_OBJECT +public: + Theme2k( QWidget *, const char *, const QStringList& ); + + inline const QString name() + { + return( QString("KSplash2k") ); + } + inline const KDialogBase *config( KConfig *kc ) + { + return new Cfg2k( kc ); + } + static QStringList names() + { + QStringList Names; + Names << "KSplash2k"; + Names << "ks2k"; + Names << "2k"; + Names << "2000"; + return( Names ); + }; + +public slots: + inline void slotSetText( const QString& s ) + { + if( mText && mText->text() != s ) mText->setText( s ); + }; + +private: + void initUi(); + void readSettings(); + + QLabel *mText; + RotWidget *mRotator; + QColor mTBgColor, mTFgColor, mRotColor1, mRotColor2, mStatusColor; + int mRotSpeed; + QString mWndTitle, mLogoFile; +}; + +#endif + + +Let us analyze the listing above. The Theme2k class +satisfies +the naming conventions, and is inherited from +ThemeEngine. It provides +a Theme2k::names(), and has a constructor that takes +the required +parameters: Theme2k( QWidget *, const char *, const QStringList& +); +and also provides a simple Theme2k::slotSetText() +method. For the moment, +do not worry about the RotWidget class. It is a small +widget that provides +some eye candy for the user. Our plugin is very simple and does not display any +icons or show +a progressbar. If you would like to display icons, override the +slotSetPixmap +function. Similar functions exist for setting the progressbar range +(slotUpdateSteps) +and incrementing(slotUpdateProgress) the current step. + + + +Implementation of the plugin +We will examine only the relevant parts of the implementation. For a +listing of the whole +implementation, please see the appendix. The first thing we will do is to get +the library +requirement out of the way: + +Library requirement + +K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> ); + + + The macro K_EXPORT_COMPONENT_FACTORY is declared in +kgenericfactory.h. Onwards to the constructor! +Since this is a very simple plugin, the constructor is pretty +straightforward. + +Plugin constructor + +Theme2k::Theme2k( QWidget *parent, const char *name, const QStringList &args + ) + :ThemeEngine( parent, name, args ) +{ + readSettings(); + initUi(); +} + + +The method readSettings() illustrates the +proper way to obtain your theme settings. (You do want people to use your +plugins +in their themes, don't you?) + +Obtaining theme settings + +void Theme2k::readSettings() +{ + if( !mTheme ) + return; + + KConfig *cfg = mTheme->themeConfig(); + if( !cfg ) + return; + + cfg->setGroup( QString("KSplash Theme: %1").arg(mTheme->theme()) ); + + QColor DefaultTBgColor( Qt::darkBlue ); + QColor DefaultTFgColor( Qt::white ); + + mTBgColor = cfg->readColorEntry( "Title Background Color", +&DefaultTBgColor ); + mTFgColor = cfg->readColorEntry( "Title Foreground Color", +&DefaultTFgColor ); + mStatusColor = cfg->readColorEntry("Status Text Color", &mTBgColor ); + + QColor DefaultRot1( Qt::darkBlue ); + QColor DefaultRot2( Qt::cyan ); + mRotColor1 = cfg->readColorEntry( "Rotator Color 1", &DefaultRot1 ); + mRotColor2 = cfg->readColorEntry( "Rotator Color 2", &DefaultRot2 ); + + mRotSpeed = cfg->readNumEntry( "Rotator Speed", 30 ); + mWndTitle = cfg->readEntry( "Window Title", i18n("Please wait...") ); + mLogoFile = cfg->readEntry( "Logo File", QString::null ); +} + + +Since we like our users, we provide sensible defaults for parameters that +are not +present in the theme file. Note that we should always set our group to "KSplash +Theme: themename" +to remain compatible with future theme specifications. The +initUI() method is +not very interesting, as it merely builds up the widgets. Please see the +appendix for details. + + + +Compiling the plugin +Since we decided to use the &kde; framework for compiling the plugin, we +need to create a +Makefile.am. It should look like this: + +Listing of <filename>Makefile.am</filename> + +INCLUDES = $(all_includes) + +kde_module_LTLIBRARIES = ksplash2k.la + +ksplash2k_la_SOURCES = theme2k.cpp rotwidget.cpp +ksplash2k_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) +ksplash2k_la_LIBADD = $(LIB_KDEUI) -lksplashthemes + +METASOURCES = AUTO + +noinst_HEADERS = theme2k.h rotwidget.h + +servicesdir = $(kde_servicesdir) +services_DATA = ksplash2k.desktop + +themedir = $(kde_datadir)/ksplash/Themes/2k +theme_DATA = Theme.rc Preview.png + + +For more information on writing Makefile.am files for +&kde;, please see +the &kde; developers' +website. +The only thing of note is that we provide a default theme based on this plugin, +and provide +a preview image for it. As a matter of courtesy to your users, you should +provide an example +Theme.rc file illustrating the use of the various +options. + + + + +Questions and Answers + +&reporting.bugs; +&updating.documentation; + + + + +I can't find any themes that work in &ksplash;. Why is that? + + +You probably don't have the correct plugins for the theme. The +plugins are in the kde-artwork package. Download +and install it, and try then again. + + + + +What is file Theme.rc and how do I make one? + + + +Theme.rc is the file where you can specify a +theme's settings. For more information, take a look at How to make themes for &ksplash;. + + + + + + + +Credits and License + +&ksplash; + +Program Copyright © 2003 &Ravikiran.Rajagopal; +&Ravikiran.Rajagopal.mail; + + +Contributors +&Brian.C.Ledbetter; &Brian.C.Ledbetter.mail; + + + +Documentation Copyright © 2003 &Teemu.Rytilahti; +&Teemu.Rytilahti.mail; + +&underFDL; +&underGPL; + + + + +Installation + + +Requirements + +In order to successfully use &ksplash;, you need &kde; version 3.2 or +higher. Some themes may require specific plugins. If a theme does not +work, please contact the theme author to find out where to obtain the +appropriate plugin. + + + + +Compilation and Installation + +&install.compile.documentation; + + + + +Source code + +Listing of <filename>theme2k.cpp</filename> + +#include <qlabel.h> +#include <qwidget.h> + +#include <kapplication.h> +#include <kconfig.h> +#include <kdebug.h> +#include <kdialogbase.h> +#include <kgenericfactory.h> +#include <kglobalsettings.h> +#include <klocale.h> +#include <ksplash/objkstheme.h> +#include <kstandarddirs.h> + +#include "rotwidget.h" +#include "theme2k.h" +#include "theme2k.moc" + +K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> ); + +Cfg2k::Cfg2k( KConfig * ) +{} + +Theme2k::Theme2k( QWidget *parent, const char *name, const QStringList &args + ) + :ThemeEngine( parent, name, args ) +{ + readSettings(); + initUi(); +} + +void Theme2k::initUi() +{ + QVBox *vbox = new QVBox( this ); + vbox->setFrameShape( QFrame::WinPanel ); + vbox->setFrameShadow( QFrame::Raised ); + + QHBox *labelBox = new QHBox( vbox ); + labelBox->setPalette( mTBgColor ); + labelBox->setMargin( 1 ); + QLabel *lbl = new QLabel( mWndTitle, labelBox ); + lbl->setFont( QFont( "Arial", 12, QFont::Bold ) ); + lbl->setPaletteForegroundColor( mTFgColor ); + + QLabel *logo = new QLabel( vbox ); + logo->setPalette( Qt::white ); + + QString px( locate( "appdata", mTheme->themeDir() + +(mLogoFile.isNull()?QString("/Logo.png"):mLogoFile) ) ); + if (px.isNull()) + px = locate("appdata","Themes/Default/splash_top.png"); + if( !px.isNull() ) + { + QPixmap pix( px ); + logo->setPixmap( pix ); + } + else + { + logo->setText( "<B>KDE</B>2000" ); + logo->setAlignment( AlignCenter|AlignVCenter ); + } + + mRotator = new RotWidget( vbox, mRotColor1, mRotColor2, mRotSpeed ); + + QHBox *hbox = new QHBox( vbox ); + labelBox->setSpacing( 4 ); + labelBox->setMargin( 4 ); + + mText = new QLabel( hbox ); + mText->setPaletteForegroundColor( mStatusColor ); + mText->setPaletteBackgroundColor( mTFgColor ); + mText->setText( mWndTitle ); + mText->setFixedHeight( 48 ); + + setFixedSize( vbox->sizeHint() ); + QRect rect(KGlobalSettings::splashScreenDesktopGeometry()); + move( rect.x() + (rect.width() - size().width())/2, + rect.y() + (rect.height() - size().height())/2 ); +} + +void Theme2k::readSettings() +{ + if( !mTheme ) + return; + + KConfig *cfg = mTheme->themeConfig(); + if( !cfg ) + return; + + cfg->setGroup( QString("KSplash Theme: %1").arg(mTheme->theme()) ); + + QColor DefaultTBgColor( Qt::darkBlue ); + QColor DefaultTFgColor( Qt::white ); + + mTBgColor = cfg->readColorEntry( "Title Background Color", +&DefaultTBgColor ); + mTFgColor = cfg->readColorEntry( "Title Foreground Color", +&DefaultTFgColor ); + mStatusColor = cfg->readColorEntry("Status Text Color", &mTBgColor ); + + QColor DefaultRot1( Qt::darkBlue ); + QColor DefaultRot2( Qt::cyan ); + mRotColor1 = cfg->readColorEntry( "Rotator Color 1", &DefaultRot1 ); + mRotColor2 = cfg->readColorEntry( "Rotator Color 2", &DefaultRot2 ); + + mRotSpeed = cfg->readNumEntry( "Rotator Speed", 30 ); + mWndTitle = cfg->readEntry( "Window Title", i18n("Please wait...") ); + mLogoFile = cfg->readEntry( "Logo File", QString::null ); +} + + + +Listing of <filename>rotwidget.h</filename> + +#ifndef __ROTWIDGET_H__ +#define __ROTWIDGET_H__ + +#include <qlabel.h> +#include <qtimer.h> +#include <qwidget.h> + +#include <kdialogbase.h> +#include <kpixmap.h> + +/** + * @short Display a rotating-gradient widget. + */ +class RotWidget: public QWidget +{ + Q_OBJECT +public: + RotWidget( QWidget *, const QColor&, const QColor&, int ); + ~RotWidget(); + +private slots: + void stepEvent(); + +protected: + void preparePixmap( int ); + void paintEvent( QPaintEvent * ); + void resizeEvent( QResizeEvent * ); + + QColor m_color1, m_color2; + int m_step, m_speed; + QTimer *m_stepTimer; + + QList<KPixmap> m_stepPixmap; +}; + +#endif + + + +Listing of <filename>rotwidget.cpp</filename> + +#include <kdebug.h> +#include <kdialogbase.h> +#include <kpixmapeffect.h> + +#include <qlabel.h> +#include <qpainter.h> +#include <qwidget.h> + +#include "rotwidget.h" +#include "rotwidget.moc" + +RotWidget::RotWidget( QWidget *parent, const QColor& c1, const QColor& +c2, int sp ) + :QWidget(parent), m_color1(c1), m_color2(c2), m_step(0), m_speed(sp) +{ + if( (m_speed <= 0) || (m_speed > 20) ) + m_speed = 1; + setFixedHeight( 6 ); + + for( int i = 0; i <= width(); i++ ) + preparePixmap( i ); + + m_stepTimer = new QTimer( this ); + connect(m_stepTimer, SIGNAL(timeout()), this, SLOT(stepEvent())); + m_stepTimer->start( 50 ); +} + +RotWidget::~RotWidget() +{ +} + +void RotWidget::stepEvent() +{ + // This is inefficient as we create too many pixmaps, optimize later. + m_step += m_speed; + if( m_step > width() ) + m_step = 0; + repaint( true ); +} + +// Todo: Optimize drawing. +void RotWidget::paintEvent( QPaintEvent *pe ) +{ + QPainter p; + p.begin( this ); + + QRect r = pe->rect(); + + if( m_stepPixmap.at( m_step ) ) + bitBlt( this, r.x(), r.y(), m_stepPixmap.at( m_step ), r.x(), r.y(), +r.width(), r.height() ); + else + p.fillRect( rect(), Qt::black ); + p.end(); +} + +void RotWidget::resizeEvent( QResizeEvent *re ) +{ + m_stepPixmap.clear(); + for( int i = 0; i <= re->size().width(); i++ ) + preparePixmap( i ); +} + +void RotWidget::preparePixmap( int step ) +{ + if( step < 0 ) + return; + + // Explicitly draw our first pixmap. The rest we will bitBlt() from here. + if( step == 0 ) + { + KPixmap tmp; tmp.resize( size().width() / 2, size().height() ); + KPixmap tmp2(tmp); + KPixmapEffect::gradient( tmp, m_color1, m_color2, +KPixmapEffect::HorizontalGradient ); + KPixmapEffect::gradient( tmp2, m_color2, m_color1, +KPixmapEffect::HorizontalGradient ); + KPixmap *px = new KPixmap( size() ); + QPainter p; + p.begin( px ); + p.drawPixmap( 0, 0, tmp ); + p.drawPixmap( size().width()/2, 0, tmp2 ); + p.end(); + m_stepPixmap.append( px ); + } + else if( m_stepPixmap.at( step-1 ) ) + { + QPixmap *prev = m_stepPixmap.at( step-1 ); + QPixmap next; next.resize( size() ); + // convert + // prev = "[------------]" + // to + // next = "------------][" + bitBlt( &next, 0, 0, prev, 1, 0, prev->width()-1, prev->height() +); + bitBlt( &next, width()-1, 0, prev, 0, 0, 1, prev->height() ); + KPixmap *n = new KPixmap( next ); + m_stepPixmap.append( n ); + } +} + + + + +&documentation.index; +
+ + diff --git a/doc/ksysguard/Makefile.am b/doc/ksysguard/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/ksysguard/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/ksysguard/index.docbook b/doc/ksysguard/index.docbook new file mode 100644 index 000000000..cfeb64098 --- /dev/null +++ b/doc/ksysguard/index.docbook @@ -0,0 +1,496 @@ + + + + + +]> + + + +The &ksysguard; Handbook + + + +&Chris.Schlaeger;&Chris.Schlaeger.mail; + + + +&Chris.Schlaeger;&Chris.Schlaeger.mail; + + + + +&Tobias.Koenig;&Tobias.Koenig.mail; + + + + + + + + +2000 +&Chris.Schlaeger; + + +&FDLNotice; + +2000-12-14 +1.00.00 + +&ksysguard; is a network enabled task manager and system monitor +application, with the additional functionality of +top. + + +KDE +KSysGuard +process monitor +top +ps + + + + +Introduction + +&ksysguard; is the &kde; Task Manager and Performance Monitor. It features + +a +client/server architecture that allows monitoring of local as well as remote +hosts. The graphical front end uses so-called sensors to retrieve the +information it displays. A sensor can return simple values or more complex +information like tables. For each type of information, one or more displays are +provided. Displays are organized in work sheets that can be saved and loaded +independently from each other. So, &ksysguard; is not only a simple task manager +but also a very powerful tool to control large server farms. + + + + + +Using &ksysguard; + + +Getting started + +&ksysguard; can be started from the start menu, using the entry +KDE System +Guard in the Systems menu. Alternatively, you +can start it by typing ksysguard in a terminal. + +The &ksysguard; main window consists of a menu bar, an optional tool bar +and +status bar, the sensor browser and the work space. When first started you see +your local machine listed as localhost in the sensor +browser and 2 pages in the work space area. This is the default setup. + +This default setup is sufficient enough for an inexperienced user to do +some system management. An experienced user or even a system administrator of a +large computer lab has different needs. To address a wide range of users, +&ksysguard; +is highly flexible. + + + +The Sensor Browser + +The sensor browser displays the registered hosts and their sensors in a +tree form. Click on the tree handles to open or close a branch. Each sensor +monitors a certain system value. + + +Connecting to other hosts + +To connect to a new host use Connect Hosts +from the File menu. A dialog box will appear and allows you +to +enter the name of the host you want to connect to. Below the name you can choose +the connection method. The default is ssh, the secure +shell. Alternatively the rsh, the remote shell, or +the daemon mode can be used. Click OK to +establish the connection. Shortly afterwards the new host will appear in the +sensor browser and you can browse the list of sensors. + +To establish a connection, a program called +ksysguardd, that can be started in the following +two modes, must be installed on the new host. + + + +daemon mode + +You can start ksysguardd at boot time in +Daemon mode by adding -d as the +argument. In this case, you have to select daemon mode at the connection +dialog of ksysguard. +A disadvantage of this connection type is that you won't be able to kill or +renice a process with the Process Controller and +the data exchange over network won't be encrypted. + + + +shell mode + +In this mode ksysguardd is started at +connecting time by ksysguard. To make that possible, +its location needs to be included in your PATH. +Unfortunately the ssh does not source your .profile file, +so your regular PATH setting will not be available. +Instead it uses a default PATH like +/bin:/usr/bin. +Since it is very likely that &kde; is not installed in these folders you need +to create or update a file in your home folder. The file is called +environment and needs to be in a hidden folder called +.ssh. See the manual page for +ssh for more details. The file needs to contain a +line similar to: + + +PATH=/bin:/usr/bin:/opt/kde/bin + + +assuming that ksysguardd can be found under +/opt/kde/bin/ksysguardd. + +When using ssh you should make sure that +you have your identity.pub installed on the remote machine +and the host key of the remote machine is already registered on your machine. +The easiest way to check this is to type ssh in a shell. If you are greeted by +ksysguardd you can type quit +and everything is in order. + + + + +For experts: ksysguardd is a +very small program that is only linked against the libc. So it can +also be used on machines that do not have a full blown &kde; +installed, such as servers. If you choose the custom command option in +the host connector you need to specify the complete command to start +ksysguardd. + + + + +Disconnecting hosts + +To disconnect from a host, select the host in the sensor browser and +choose Disconnect Host from the +File menu. If you still have sensors in use, the display +frames will be grayed and the displays won't update any longer. + + + + +The Work Space + +The work space is organized as work sheets. Select +New from the File menu to create a +new work sheet. A dialog will appear where you can set the name, the +dimension and the update interval of the work sheet. To remove a work sheet +again, select +Close from the File menu. Any +modifications will be saved to the work sheet file. If a work sheet has +never been saved, you will be asked for a file name. Work sheets consist of +cells +organized as a grid. + +Each cell can be filled with a display for one or more sensors. You can +fill a cell by dragging a sensor from the sensor browser and dropping it over +the cell. If there is more than one type of display available for that type +of sensor, a popup menu will appear. You can then select which display you +prefer +to use. Certain types of displays can display more than one sensor. Add more +sensors to a display by dragging them over from the sensor browser and dropping +them over the already existing display. + +Work sheets can be configured by clicking Configure Worksheet + at the Edit menu. In the appearing dialog +you can set the dimension and the update interval. This update interval is +used by all displays of the worksheet, which has the use update +interval of worksheet set in its timer configuration dialog. + +The entry Configure Style of the +Settings menu gives you the possibility to configure the +global style attributes and apply them to the current active worksheet. + +Displays can be configured by clicking with the right mouse button on +them. A popup menu appear where you can select whether you want to change the +properties of that display, remove it from the work sheet, change its update +interval type and value or pause and restart its updating. + + +Signal Plotter + +The signal plotter prints samples of one or more sensors over time. If, +several sensors are displayed, the values are piled in different colors. If +the display is large enough a grid will be displayed to show the range of the +plotted samples. By default, the automatic range mode is active so the minimum +and maximum values will be set automatically. Sometimes you want fixed +minimum and maximum values. In that case, you can deactivate automatic range +mode and set the values in the properties dialog. + + + +Multimeter + +The multimeter displays the sensor values as a digital meter. In the +properties dialog you can specify a lower and upper limit. If the range +is exceeded, the display is colored in the alarm color. + + + +Process Controller + +The Process Controller gives you a list of processes on your +system. The list can be sorted by each column. Just press the left +mouse button at the head of the column. + +The list shows the following information about each process. Please note +that not all properties are available on every operating system. + + + +Name +The name of the executable that started the process. + + + + +PID +The Process ID. A unique number for each +process. + + + +PPID +The Process ID of the process parent. + + + + +UID +The ID of the user that started the +process. + + + + +GID +The ID of the group the process +belongs to. + + + + +Status +The process status. + + + +User% + +The processor load of the process in user space (in percent). + + + + +System% + +The processor load of the process in system space (in percent). + + + + +Nice +The scheduling priority. + + + +VmSize +The total amount of virtual memory used by the process +(in kBytes). + + + +VmRss +The total amount of physical memory used by the process +(in kBytes). + + + +Login +The login name of the user that started the process. + + + + +Command +The complete start command of the process. + + + +Underneath the table you find four buttons which will be described now +from left to right. + + +The <guibutton>Tree</guibutton> View + +The tree view has been designed to show the relationships between the +running processes. A process that is started by another process is called the +child of that process. A tree is an elegant way to show this parent-child +relationship. The init process is the ancestor of all +processes. + +If you are not interested in the children of a particular process you can +click on the little box to the left of the parent and the subtree will +collapse. Another click on that box will unfold the subtree again. + + + + +The Process Filter + +The Process Filter can be used to reduce the number of processes displayed +in the table. You can filter out processes you are not interested in. Currently +you can display all processes, system processes only, user processes only or +your processes only. + + + + +The <guibutton>Refresh</guibutton> Button + +This button can be used to force an immediate update of the process +list. + + + + +The <guibutton>Kill</guibutton> Button + +If you have selected one or more processes you can press the kill button +to kill them. A so called SIGKIL is sent to the processes + +which causes them to +terminate immediately. If these applications still have unsaved data this data +will be lost. So use this button with care. + + + + + +BarGraph + +The bargraph displays the sensor values as dancing bars. In the +properties dialog you can specify minimum and maximum values of range and +a lower and upper limit. If the range is exceeded, the display is +colored in the alarm color. + + + +Sensor Logger + +The sensor logger does not display any values, but logs them in +a file with additional date and time information. For each sensor +you can specify a lower and upper limit in the properties dialog. +If the range is exceeded, the entry of the sensor table is colored in +the alarm color and a knotify event is sent. + + + +Log File + +The log file monitor displays the content of a file ⪚ +/var/log/messages. +In the properties dialog, you can compose a list of regular expressions that +will be compared with the content of the file. If one of the expressions match, +a knotify +event will be sent. + + + + +List View + +The listview displays the data of some sensors in the form of a +table. + + + + + + +Configuring <application>ksysguardd</application> + +The graphical front-end is available on any platform that &kde; runs +on. The back-end is at the moment available on the following flavors of +&UNIX;: + + + +&Linux; 2.x + For ksysguardd to work it +is necessary to compile the &Linux; Kernel +with the /proc Filesystem enabled. This is the default +setting and most &Linux; Distributions have it already. + + +FreeBSD +The ksysguardd program +needs to be owned by the kmem group and needs to have the setgid +bit set. + + +&Solaris; +To be written + + + +Support for other platforms is in progress. Your help is greatly +appreciated. + + + +Credits and Licenses + +&ksysguard; is currently developed and maintained by Chris Schläger +cs@kde.org. &ksysguard; is a rewrite of +KTop, the KDE 1.x task manager. Several other people +have worked on KTop: + + + A. Sanda alex@darkstar.ping.at + Ralf Mueller ralf@bj-ig.de + Bernd Johannes Wuebben +wuebben@math.cornell.edu + Nicolas Leclercq +nicknet@planete.net + + +The porting to other platforms than &Linux; was done by: + + + FreeBSD: Hans Petter Bieker +zerium@traad.lavvu.no + + +&underFDL; +&underGPL; + + + + + + diff --git a/doc/kwrite/Makefile.am b/doc/kwrite/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/kwrite/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/kwrite/index.docbook b/doc/kwrite/index.docbook new file mode 100644 index 000000000..b1762a201 --- /dev/null +++ b/doc/kwrite/index.docbook @@ -0,0 +1,2952 @@ + + + + + +]> + + + + +The &kwrite; Handbook + +&Thad.McGinnis; &Thad.McGinnis.mail; +&Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; +&Anders.Lund; &Anders.Lund.mail; + +&Christoph.Cullmann; &Christoph.Cullmann.mail; + + + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + + + + + +20002001 +&Thad.McGinnis; + + +2005 +&Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; +&Anders.Lund; &Anders.Lund.mail; + +&FDLNotice; + +2005-12-27 +4.5.0 + + +&kwrite; is a text editor for &kde; + + + +KDE +KWrite +text +editor + + + + + +Introduction + + +&kwrite; is more than a text editor for the &kde; Desktop. It is meant +to be a programmer's editor, and could be considered as at least a +partial alternative to more powerful editors. It may be best used in +conjunction with &konqueror; for source file browsing for different +languages. &kwrite; also works very well as a simple text editor. One +of &kwrite;'s main features is the colorized syntax, customized for many +different programming languages such as: C/C++, &Java;, Python, Perl, +Bash, Modula 2, &HTML;, and Ada. + + + + + +Some Fundamentals + + +&kwrite; is very simple to use. Anyone that has used a text editor +should have no problems. + + + +Drag and Drop + + +&kwrite; uses the &kde; Drag and Drop protocol. Files may be dragged and +dropped onto &kwrite; from the Desktop, &konqueror; or some remote &FTP; +site opened in one of &konqueror;'s windows. + + + + +Command Line Options + + +Though &kwrite; may most often be started from the &kde; program menu, or +a desktop icon, it can also be opened at the command line prompt of a +terminal window. There are a few useful options that are available when +doing this. + + + +Specify a File + +By specifying the path and name of a particular file the user can +have &kwrite; open (or create) that file immediately upon startup. This +option might look something like the following: + + +% kwrite + + + + + + +Specify a file on the internet + +The above-mentioned method could even be used to open files on the +internet (if the user has an active connection at the time.) An example of +this might look like the following: + + +% kwrite + + + + + + + +Other Command Line Options + +The following command line help options are available + + + +kwrite + +This lists the most basic options available at the command +line. + + +kwrite + +This lists the options available for changing the way +&kwrite; interacts with &Qt;. + + +kwrite + +This lists the options available for changing the way +&kwrite; interacts with &kde;. + + +kwrite + +This lists all of the command line options. + + +kwrite + +Lists &kwrite;'s authors in the terminal +window + + +kwrite + +Lists version information for &Qt;, &kde;, and &kwrite;. Also +available through kwrite + + + +kwrite + +Causes &kwrite; to read the document content from STDIN. This +is similar to the common option used in many command line +programs, and allows you to pipe command output into &kwrite;. + + +kwrite + encoding +&URL; +Causes &kwrite; to use the specified encoding for the document. + + + +kwrite + line +&URL; +Navigate to the specified line after opening the document. + + + +kwrite + column +&URL; +Navigate to the specified column after opening the document. + + + + + + + + +Shortcuts + +Many of the shortcuts are configurable by way of the Settings menu. By default &kwrite; honors the +following shortcuts: + + + + +Insert + Toggle between Insert and Overwrite mode. When in insert mode the +editor will add any typed characters to the text while pushing along any data to +the right of the text cursor. Overwrite mode causes the entry of each character +to eliminate the character immediately to the right of the text +cursor. + + +Left +Arrow +Move the cursor one character to the left + + +Right +Arrow + Move the cursor one character to the right + + +Up +Arrow + Move the cursor up one line + + +Down +Arrow + Move the cursor down one line + + +Page +Up + Move the cursor up one page + + +&Alt;Page +Up +Previous Bookmark + + +Page +Down +Move the cursor down one page + + +&Alt;Page +Down +Next Bookmark + + +Backspace + Delete the character to the left of the cursor + + +Home + Move the cursor to the beginning of the line + + +End + Move the cursor to the end of the line + + +Delete +Delete the character to the right of the cursor (or any selected +text) + + +&Shift;Left +Arrow + Mark text one character to the left + + +&Shift;Right +Arrow + Mark text one character to the right + + +F1 + Help + + +&Shift;F1 +What's this? + + +F3 + Find again + + +&Shift;F3 + Find Previous + + +&Ctrl;A +Select All + + +&Ctrl;&Shift;A +Deselect + + +&Ctrl;&Shift;B +Block Selection Mode + + +&Ctrl;B +Set a Bookmark + + +&Ctrl;C + Copy the marked text to the clipboard. + + +&Ctrl;D + Comment + + +&Ctrl;&Shift;D + Uncomment + + +&Ctrl;F + Find + + +&Ctrl;G + Go to line... + + +&Ctrl;I + Indent selection + + +&Ctrl;&Shift;I + Unindent selection + + +&Ctrl;J +Join Lines + + +&Ctrl;N + New document + + +&Ctrl;O +Open a document + + +&Ctrl;P +Print + + +&Ctrl;Q +Quit - close active copy of editor + + +&Ctrl;R + Replace + + +&Ctrl;S +Invokes the Save command. + + +&Ctrl;U +Uppercase + + +&Ctrl;&Shift;U +Lowercase + + +&Alt;&Ctrl;U +Capitalize + + +&Ctrl;V + Paste the clipboard text into line edit. + + +&Ctrl;W +Close + + +&Ctrl;X +Delete the marked text and copy it to the clipboard. + + + +&Ctrl;Z +Undo + + +&Ctrl;&Shift;Z +Redo + + +&Ctrl;- +Collapse One Local Level + + +&Ctrl;&Shift;- +Collapse Toplevel + + +&Ctrl;+ +Expand One Local Level + + +&Ctrl;&Shift;+ +Expand Toplevel + + +F5 + Reload + + +F6 +Show/Hide Icon Border + + +F7 + Switch to Command Line + + +F9 + Show/Hide Folding Markers + + +F10 + Dynamic Word Wrap + + +F11 + Show/Hide Line Numbers + + + + + + + + +The Menu Entries + + +The <guimenu>File</guimenu> Menu + + + + + + + +&Ctrl;N + +File +New + + +This starts a new Document in the editor. If there is a current +document with unsaved changes the user is given a chance to save it. + + + + + + + + +&Ctrl;O + +File +Open... + + + + + +Displays a standard &kde; Open File +dialog. Use the file view to select the file you want to open, and +click on Open to open it. You can find more +information about the &kde; Open File dialog in +the &kde; User Guide. + + + + + + + +File +Open Recent + + + + +This is a shortcut to open recently saved documents. Clicking on this +item opens a list to the side of the menu with several of the most +recently saved files. Clicking on a specific file will open it in +&kwrite; - if the file still resides at the same +location. + + + + + + + + +&Ctrl;S + +File +Save + + + + +This saves the current document. If there has already been a save of +the document then this will overwrite the previously saved file without +asking for the user's consent. If it is the first save of a new +document the save as dialog (described below) will be invoked. + + + + + + + +File +Save As... + + + + +This allows a document to be saved with a new file name. This is done by +means of the file dialog box described above in the Open section of this help file. + + + + + + + + +F5 + +File +Reload + + + + +Reloads the active file from disk. This command is useful if another program or +process has changed the file while you have it open in &kwrite;. + + + + + + + + +&Ctrl;P + +File +Print... + + + + +Opens a simple print dialog allowing the user to specify what, where, +and how to print. + + + + + + + +File +Export as HTML... + + + + +Export your file in HTML format so your document can be viewed as a web page. + + + + + + + + +&Ctrl;W + +File +Close + + + + +Close the active file with this command. If you have made unsaved changes, you +will be prompted to save the file before &kwrite; closes it. + + + + + + + + +&Ctrl;Q + +File +Quit + + + + +This will close the editor window, if you have more than one instance of +&kwrite; running, through the New View or +New Window menu items, those instances will +not be closed. + + + + + + + + + +The <guimenu>Edit</guimenu> Menu + + + + +&Ctrl;Z +Edit +Undo + +This is used to eliminate or reverse the most recent user action +or operation. + + + + + + + +&Ctrl;&Shift;Z +EditRedo + +This will reverse the most recent change (if any) made using Undo + + + + + +&Ctrl;X +EditCut + +This command deletes the current selection and places it on the +clipboard. +The clipboard is a feature of &kde; that works invisibly to provide a way to +transfer data between applications. + + + + + +&Ctrl;C +EditCopy + +This copies the currently selected text to the clipboard so that it may +be pasted elsewhere. The clipboard is a feature of &kde; that works invisibly +to provide a way to transfer data between applications. + + + + + +EditCopy as +HTML + +This copies the currently selected text to the clipboard as HTML. + + + + + +&Ctrl;V +EditPaste + +This will insert the contents of the clipboard at the cursor position. +The clipboard is feature of &kde; that works invisibly to provide a way to +transfer data between applications. + + + + + +&Ctrl;A +EditSelect All + +This will select the entire document. This could be very useful for +copying the entire file to another application. + + + + + + +&Ctrl;&Shift;A + +EditDeselect + +Deselects the selected text in the editor if any. + + + + + + +&Ctrl;&Shift;B + +EditBloc +Selection Mode + +Toggles Selection Mode. When the Selection Mode is “BLOCK”, you can make +vertical selections, ie select column 5 to 10 in lines 9 to 15. +The status bar shows the current state of the Selection Mode, either “NORM” or +“BLK”. + + + + + + +Insert + +EditOverwrite +Mode + +Toggles the Insert/Overwrite modes. When the mode is "INS", you +insert characters where the cursor is. When the mode is "OVR", writing +characters will replace the current characters if your cursor is positioned +before any character. The status bar shows the current state of the Overwrite +Mode, either “INS” or “OVR”. + + + + + +&Ctrl;F +EditFind + +This opens the find dialog which is used to specify the Text to +Find in the document. There is small text box for entering the search +pattern which also doubles as a dropdown box. Clicking on the dropdown arrow at +the side of the box makes available other recent search patterns. Other +parameters are included to make the search more efficient. Selecting +Case Sensitive will limit finds to entries that match the +case (upper or lower) of each of the characters in the search pattern. +Find Backwards directs the search to proceed in an upwardly +direction. The Selected Text option keeps the search +within currently selected text. Checking Whole Words Only +prevents the search from stopping on words that contain the searched for +pattern. The Search from Cursor option begins the search +from the current position of the cursor within the document rather than from +the beginning. + + + + + +F3 +EditFind Next + +This repeats the last find operation, if any, without calling the find +dialog box. + + + + + + + + +&Shift;F3 + +Edit +Find Previous + + + + +This repeats the last find operation, if any, without calling the find +dialog box, and searching backwards instead of forwards through the +document. + + + + + + +&Ctrl;R +EditReplace... + +This command opens the replace dialog box. The replace dialog is +almost identical to the above-mentioned find dialog. In addition to the features +in the find dialog it contains a Replace With: text +entry/dropdown box. Using this dialog the user can specify both the text to be +found and text with which to replace it. The additional Prompt +On Replace option allows the user to have &kwrite; ask for +confirmation before each replacement. + + + + + + + + +&Ctrl;G + +Edit +Go to line + + +This opens the goto line dialog box which is used to have the cursor +jump to a particular line (specified by number) in the document. The +line number may be entered directly into the text box or graphically by +clicking on the up or down arrow spin controls at the side of the text +box. The little up arrow will increase the line number and the down +arrow decrease it. There is also a slide control to the right of the +text box which allows the user to move the goto point in the document in +an analog manner. + + + + + + + +The <guimenu>View</guimenu> menu + +The View menu allows you to manage settings +specific to the active editor, and to manage frames. + + + + + + + +View +New Window + + + +Opens a new window with the same text. + + + + + + + +F7 +View +Switch to Command Line + + + +Displays the Katepart command line at the bottom of the window. +In the command line, type "help" to get help and "help list" to get a list of +commands. + + + + + + + +View +Schema + + + +Select a font schema. + + + + + + + +F10 +View +Dynamic Word Wrap + + + +The text lines will be wrapped at the view +border on the screen. + + + + + + + +F10 +View +Dynamic Word Wrap Indicators + + + + Choose when and how the dynamic word wrap indicators should be +displayed. This is only available if the Dynamic Word +Wrap option is checked. + + + + + + + +View +Show Static Word Wrap Marker + + + +If this option is checked, a vertical line will be drawn at the +word wrap column as defined in the +Settings +Configure Editor... in the +Editing tab. Please note that the word wrap marker is only drawn if you +use a fixed pitch font. + + + + + + + +F6 +View +Show Icon Border + + + +This is a toggle item. Setting it on checked will make the +side of the active editor, and vice versa. + + + + + + + +F11 +View +Show Line Numbers + + + +This is a toggle Item. Setting it on checked will make a pane displaying +the line numbers of the document visible in the left border of the active +editor, and vice versa. + + + + + + + +View +Show Scrollbar Marks + + + +If this option is checked, the view will show marks on the vertical +scrollbar. + + + + + + + +F9 +Hide Folding Markers + + + +If this option is checked, the marks for code folding will be +hidden. + + + + + + + +Code Folding + + + + + +Ctrl +Shift- +Collapse Toplevel + +Collapse all toplevel regions in the document. + + +Ctrl +Shift+ +Expand Toplevel + +Expand all toplevel regions in the document. + + +Ctrl +- +Collapse One Local Level + +Collapse the region closest to the cursor. + + +Ctrl ++ +Expand One Local Level + +Expand the region closest to the cursor. + + + + + + + + + + +The <guimenu>Bookmarks</guimenu> Menu + + + + + + +&Ctrl;B + +Bookmarks +Set Bookmark + + + + +Sets or removes a bookmark in the current line of the active document. (If it's +there, it is removed, otherwise one is set). + + + + + + + +Bookmarks +Clear All Bookmarks + + + + +This command will remove all the markers from the document as well as +the list of markers which is appended at the bottom of this menu item. + + + + + +Alt +Page Up +BookmarksPrevious + +This will move the cursor to beginning of the first above line +with a bookmark. The menuitem text will include the line number and the first +piece of text on the line. This item is only available when there is a bookmark +in a line above the cursor. + + + +Alt +Page Down +BookmarksNext +This will move the cursor to beginning of the next line with a +bookmark. The menuitem text will include the line number and the first piece of +text on the line. This item is only available when there is a bookmark in a line +below the cursor. + + + + + +At the bottom of this menu, a list of markers appears if any markers are +available for this window. + + + + + +The <guimenu>Tools</guimenu> Menu + + + + +Tools +Read Only Mode + +Set the current document to Read Only mode. This prevents any text +addition and any changes in the document formatting. + + + + + +Tools +Filletype + +Choose the filetype scheme you prefer for the active document. This +overwrites the global filetype mode set in +Settings +Configure +Editor... in the Filetypes tab for your current +document only. + + + + + +Tools +Highlighting + +Choose the Highlighting scheme you prefer for the active document. This +overwrites the global highlighting mode set in +Settings +Configure +Editor... for your current document only. + + + + + +Tools +Indentation + +Choose the style of indentation you want for your active document. +This overwrites the global indentation mode set in +Settings +Configure +Editor... for your current document only. + + + + + +Tools +Encoding + +You can overwrite the default encoding set in +Settings +Configure +Editor... in the Open/Save tab +to set a different encoding for your current document. The encoding you +set here will be only valid for your current document. + + + + + +Tools +End of Line + +Choose your prefered end of line mode for your active +document. This overwrites the global end of line mode set in +Settings +Configure +Editor... for your current document only. + + + + + +ToolsSpelling... + + +This initiates the spellchecking program - a program +designed to help the user catch and correct any spelling errors. +Clicking on this entry will start the checker and bring up the speller dialog +box through which the user can control the process. There are four settings +lined up vertically in the center of the dialog with their corresponding labels +just to the left. Starting at the top they are: + + + +Unknown word: +Here, the spellchecker indicates the word currently under +consideration. This happens when the checker encounters a word not in its +dictionary - a file containing a list of correctly spelled words against which +it compares each word in the editor. + + +Replace with: + If the checker has any similar words in its dictionary the +first one will be listed here. The user can accept the suggestion, type in his +or her own correction, or choose a different suggestion from the next +box. + + +Suggested Words: + The checker may list here a number of possible replacements for +the word under consideration. Clicking on any one of the suggestions will cause +that word to be entered in the Replacement: box, +above. + + +Language: + If you have installed multiple dictionaries, here you can +select which dictionary/language should be used. + + + +On the right side of the dialog box are 5 buttons that allow the user to +control the spellcheck process. They are: + + + +Add to Dictionary +Pressing this button adds the word in the Misspelled +Word: box to the checker's dictionary. This means that in the future +the checker will always consider this word to be correctly +spelled. + + +Replace + This button has the checker replace the word under +consideration in the document with the word in the +Replacement: box. + + +Replace All + This button causes the checker to replace not only the current +Unknown word: but to automatically make the same +substitution for any other occurrences of this Misspelled +Word: in the document. + + +Ignore +Activating this button will have the checker move on without +making any changes. + + +Ignore All + This button tells the checker to do nothing with the current +Unknown word: and to pass over any other instances of +the same word. This only applies to the current spellcheck +run. If the checker is run again later it will stop on this same +word. + + + + + + + +Three more buttons are located horizontally along the bottom of the +spellcheck dialog. They are: + + + +Help + This invokes the &kde; help system starting at the &kwrite; help +pages (this document). + + + +Finished + This button ends the spellcheck process, and returns to the +document. + + + +Cancel + This button cancels the spellcheck process, all modifications +are reverted, and you will return to your document. + + + + + + + + + +Tools +Spelling (from cursor)... + +This initiates the spellchecking program but it starts where your cursor +is instead of at the beginning of the document. + + + + + +Tools +Spellcheck Selection... + +Spellchecks the current selection. + + + + + + +&Ctrl;I + +ToolsIndent + +This increases the paragraph's indentation by one step. The size of the +step depends on the indentation +settings. + + + + + + +&Ctrl;&Shift;I + +ToolsUnindent + + +This reduces the paragraph's indentation by one step. The size of the step + +depends on the indentation settings. + + + + + + +ToolsClean +Indentation +This cleans the indentation for the current selection or for the +line the cursor is currently in. Cleaning the indentation ensures that +all your selected text follows the indentation mode you choose. + + + + + +Tools +Align + + +Causes a realign of the current line or selected lines using the +indentation mode and indentation settings in the doucment. + + + + + + +&Ctrl;D + +Tools +Comment + +This adds one space to the beginning of the line +where the text cursor is located or to the beginning of any +selected lines. + + + + + + +&Ctrl;&Shift;D + +Tools +Uncomment + +This removes one space (if any exist) from the beginning of the +line where the text cursor is located or from the beginning of any +selected lines. + + + + + +&Ctrl;U + +Tools +Uppercase + +Put the selected text or the letter after the cursor in +uppercase. + + + + + +&Ctrl;&Shift;U + +Tools +Lowercase + +Put the selected text or the letter after the cursor in +lowercase. + + + + + +&Alt;&Ctrl;U + +Tools +Capitalize + +Capitalize the selected text or the current +word. + + + + + +&Ctrl;J + +Tools +Join Lines + +Joins the selected lines, or the current line and the line below +with one white space character as a separator. Leading/trailing white space on +joined lines is removed in the affected ends. + + + + +Tools +Word Wrap Document + +Apply static word wrapping on all the document. That means that +a new line of text will automatically start when the current +line exceeds the length specified by the Wrap words at: option +in the Editing tab in +SettingsConfigure +Editor... + + + + + + + + +The <guimenu>Settings</guimenu> Menu + + + + +Settings +Show Toolbar + + + + +When checked, this displays a movable toolbar containing buttons used to +initiate frequently used commands. When unchecked the toolbar is hidden. + + + + + + +SettingsShow +Statusbar + +When checked, this displays a small bar at the bottom of the editor +containing information about the status of the current document. When unchecked +the statusbar is hidden. + + + + + +SettingsShow +Path + +When selected, this displays in the titlebar the path (its location in the +file system) of the current document. When unchecked the path is hidden. + + + + + +Settings +Configure Editor... + + + + +This menu item opens a dialog whereby several different settings may be adjusted. + + + + + + +Settings +Choose Editor... + + + + +Choose the default text editing component that you wish to use in &kwrite;. You +can choose System Default, Embedded +Advanced Text Editor or &Qt; Designer Based +Text Editor (note that the &Qt; Designer Based Text Editor is +only available if you have KDevelop installed on your system). If you choose +System Default, &kwrite; will honor your changes in +&kcontrolcenter;. All other choices will override that setting. + + + + + + +SettingsConfigure +Shortcuts... + +This command opens a dialog box whereby the shortcuts may be changed. A display window at the +top of the dialog box shows the list of commands (actions) that can have +keyboard shortcuts. Below the display are three radio buttons. The user may +choose between No Key, Default Key, and Custom Key. (Note that a set of radio +buttons only allows the selection of one of the offered items - in the way that +buttons on a car radio only offer the selection of one preset station. Also, +the Default Key selection is only available for those commands that actually +have a 'default' shortcut.) Selecting the Custom Key option activates the three +check boxes and key button at the bottom of the dialog. The user may then select +a key combination for the command in question by means of the check boxes and +key button. For example, with the About &kde; command selected in the display +window, the user could select &Ctrl; and Alt, click on the key +button, and then press the K key on the keyboard. This would +mean that anytime he or she held down the &Ctrl; and Alt +buttons and pressed K (while using +&kwrite;) the About &kde; display box would be called. + + + + + +SettingsConfigure +Toolbars... +This will open the dialog whereby the toolbar configuration may +be changed. The user can choose which shortcut buttons should appear on the +toolbar. A display window on the left lists the commands available to placed +on the toolbar. A display on the right lists those commands already on the +toolbar. A set of four arrow buttons between the two displays manipulates the +selections. The right pointing arrow places any command selected in the left +pane onto the right pane, i.e., it is added to the toolbar. +The left arrow does just the opposite, removing any action selected in the right + +window from the toolbar. The up and down pointing arrows change the position of + +an action selected in the right window which changes the position of its button + +in the toolbar. + + + + + + + + + + + + + + + + + + +The <guimenu>Help</guimenu> Menu + +&help.menu.documentation; + + + + + +Configure &kwrite; + + +Selecting SettingsConfigure +Editor... from the menu brings up the +Configure Editor dialog box. This dialog can be +used to alter a number of different settings. The settings available +for change vary according to which category the user chooses from a +vertical list on the left side of the dialog. By means of three buttons +along the bottom of the box the user can control the process. + + + +She or he may invoke the Help system, accept the +current settings and close the dialog by means of the +OK button, or Cancel the +process. The categories Colors, +Fonts Indent, +Select, Edit, +Spelling and Highlighting are +detailed below. + + + +Appearance + + + +Word Wrap + + + +Dynamic word wrap +If this option is checked, the text lines +will be wrapped at the view border on the screen. + + +Dynamic word wrap indicators +Choose when the Dynamic word wrap indicators +should be displayed. + + +Vertically align dynamically wrapped lines +to indentation depth: + +Enables the start of dynamically wrapped +lines to be aligned vertically to the indentation level of the first +line. This can help to make code and markup more +readable.Additionally, this allows you to +set a maximum width of the screen, as a percentage, +after which dynamically wrapped lines will no longer be vertically aligned. +For example, at 50%, lines whose indentation levels are deeper than 50% of the +width of the screen will not have vertical alignment applied to subsequent +wrapped lines. + + + + + + +Code Folding + + + +Show folding markers (if available) + +If this option is checked, the current view will display marks +for code folding, if code folding is available. + + + + + + +Borders + + + +Show icon border + +If this is checked, you will see an icon border on the left +hand side. The icon border shows bookmark signs for instance. + + +Show line numbers + +If this is checked, you will see line numbers on the left +hand side. + + +Show scrollbar marks + +If this option is checked the current view +will show marks on the vertical scrollbar. These marks will +for instance show bookmarks. + + + + + + +Sort Bookmarks Menu + + + + +By position + +The bookmarks will be ordered by the line +numbers they are placed at. + + +By creation + +Each new bookmark will be added to the bottom, +independently from where it is placed in the document. + + + + + + +Show identation lines + +If this is checked, the editor wil display +vertical lines to help identifying indent lines. + + + + + +Fonts & Colors + +This section of the dialog lets you configure all fonts and colors in +any color scheme you have, as well creating new schemes or deleting existing +ones. Each scheme has settings for colors, fonts and normal and highlight text +styles. + + +&kwrite; will preselect the currently active scheme for you, if you want to +work on a different scheme start by selecting that from the +Schema combobox. + + +Colors + + + +Text Area Background + + + + + +Normal text +This is the default background for the editor area, it will be +the dominant color on the editor area. + + + +Selected Text +This is the background for selected text. The default is +the global selection color, as set in your &kde; color preferences. + + + + +Current Line +Set the color for the current line. Setting this a bit different +from the Normal text background helps to keep focus on the current line. + + + + +Bookmark +This combo lets you set overlay colors for various mark types. +The color is mixed into the background color of a marked line, so that a line +with more marks or a marked line that is current has a background that is a mix +of more colors. The mark colors are also used if you enable display of scrollbar +marks. + + + + + + + +Other Elements + + + +Left Border Background +This color is used for the marks, line numbers and folding +marker borders in the left side of the editor view when they are displayed. + + + +Line Numbers +This color is used to draw the line numbers on the left side of +the view when displayed. + + +Bracket Highlight +This color is used to draw the background of matching brackets. + + + +Word Wrap Markers +This color is used to draw a pattern to the left of dynamically +wrapped lines when those are aligned vertically, as well as for the static word +wrap marker. + + +Tab Markers +This color is used to draw white space indicators when enabled. + + + + + + + + + + +Fonts + +Here you can choose the font for the schema. You can choose from +any font available on your system, and set a default size. A sample text +displays at the bottom of the dialog, so you can see the effect of your choices. + + + + +Normal Text Styles +The normal text styles are inherited by the highlight text styles, +allowing the editor to present text in a very consistent way, for example comment +text is using the same style in allmost all of the text formats that kate can +highlight. +The name in the list of styles is using the style configured for +the item, providing you with an immediate preview when configuring a style. + +Each style lets you select common attributes as well as foreground +and background colors. To unset a background color, rightclick to use the +context menu. + + + +Highlighting Text Styles +Here you can edit the text styles used by a specific highlight definition. +The editor preselects the highlight used by your current document. To work on a +different highlight, select one in the Highlight combobox +above the style list. + +The name in the list of styles is using the style configured for +the item, providing you with an immediate preview when configuring a style. + +Each style lets you select common attributes as well as foreground +and background colors. To unset a background color, rightclick to use the +context menu. In addition you can see if a style is equal to the default style +used for the item, and set it to that if not. +You will notice that many highlights contain other highlights represented +by groups in the style list. For example most highlights import the Alert +highlight, and many source code formats imports the Doxygen highlight. Editing +colors in those groups only affects the styles when used in the edited highlight +format. + + + + + + +Cursor & Selection + + + + +Text Cursor Movement + + + +Smart home + +When selected, pressing the home key will cause the cursor to +skip white space and go to the start of a line's text. + + + +Wrap cursor + +When on, moving the insertion cursor using the Left and Right keys will +go on to previous/next line at beginning/end of the line, similar to most +editors.When off, the insertion cursor cannot be moved left of the +line start, but it can be moved off the line end, which can be very handy for +programmers. When this option is chosen, moving the cursor with the arrow keys +off the end of a line (to the right) causes it to jump down to the beginning of +the next line. Likewise when the cursor is moved past the beginning of a line +(to the left) it jumps up to the end of the preceding line. When this option is +not selected, moving the cursor right past the end of a line merely causes it to +continue horizontally in the same line and trying to move it left past the +beginning does nothing. + + + +Page Up/Page Down moves cursor + +This option changes the behavior of the cursor when the user presses +the Page Up or Page Down key. If unselected +the text cursor will maintain its relative position within the visible text in +&kwrite; as new text becomes visible as a result of the operation. So if the +cursor is in the middle of the visible text when the operation occurs it will +remain there (except when one reaches the beginning or end.) With this option +selected, the first key press will cause the cursor to move to either the top or +bottom of the visible text as a new page of text is displayed. + + + +Autocenter cursor (lines): + +Sets the number of lines to maintain visible above and below the cursor +when possible. + + + + + + + +Selection Mode + + + +Normal + +Selections will be overwritten by typed text and will be lost on +cursor movement. + + + +Persistent + +Selections will stay even after cursor movement and typing. + + + + + + + + + + +Editing + + + +Tabulators + + + +Insert spaces instead of tabulators + +When this is enabled the editor will insert a calculated number of spaces +according to the position in the text and the setting +when you press the TAB key. + + + +Show tabulators + +When this is enabled &kwrite; will display a small dot as a visual +representation of tabulator characters. +This also causes dots to be drawn to indicate trailing white space. +This will be fixed in a future version of &kwrite; + + + +Tab Width If the +Replace Tabs By +Spaces +option is selected this entry determines the number of +spaces with which the editor will automatically replace +tabs. + + + + + + +Static Word Wrap + +Word wrap is a feature that causes the editor to automatically start a new line +of text and move (wrap) the cursor to the beginning of that new line. &kwrite; +will automatically start a new line of text when the current line reaches the +length specified by the Wrap Words +At: option. + + +Enable static word wrap + +Turns static word wrap on or off. + + + +Show static word wrap markers +(if applicable) + +If this option is checked, a vertical line will be drawn at the word wrap +column as defined in the Settings +Configure Editor... in the Editing tab. +Please note that the word wrap marker is only drawn if you use a fixed pitch +font. + + + +Wrap words at: + +If the Word Wrap option is selected +this entry determines the length (in characters) at which the editor will +automatically start a new line. + + + + + + + +Remove Trailing Spaces +&kwrite; will automatically eliminate extra spaces +at the ends of lines of text. + + +Auto Brackets When +the user types a left bracket ([, (, or {) &kwrite; automatically enters the +right bracket (}, ), or ]) to the right of the cursor. + + + Maximum undo steps: +Here the user may specify the number of steps &kwrite; will +retain in memory for purposes of undoing entries and actions. This means that +the higher the number of steps set the more memory &kwrite; will use for this. +Setting this entry to 10 would mean that the user would be be able reverse the +last ten operations, i.e. click the undo +button 10 times and obtain results. + + Smart search text from: +This determines where &kwrite; will get the search +text from (this will be automatically entered into the Find Text +dialog): + +Nowhere: Don't guess the search +text. +Selection Only: Use + the current text selection, if available. +Selection, then Current Word: +Use the current selection if available, otherwise use the current word. + +Current Word +Only: Use the word that the cursor is currently resting on, if +available. +Current Word, then Selection: +Use the current word if available, otherwise use the current selection. + + +Note that, in all the above modes, if a +search string has not been or cannot be determined, then the Find Text Dialog +will fall back to the last search text. + + + + + + + +Indentation + + +Automatic indentation + + + +Indentation mode: + +Select the automatic indentation mode you want to use as default. It is +strongly recommended to use None or +Normalhere, and use filetype configurations to set other +indentation modes for text formats like C/C++ code or &XML;. + + + +Insert leading Doxygen "*" when typing + +Automatically insert a leading "*" while typing within a doxygen +style comment. This setting is only enabled when applicable. + + + + + + + +Indentation with Spaces + + + +Use spaces instead of tabs to indent + +This replaces tabs with the number of spaces set in Number of +spaces: below. + + + +Emacs style mixed mode + +Use a mix of tabs and space characters for indentation. + + + +Number of spaces: + +Set the number of spaces you want to use for indentation when you +check Use spaces instead of tabs to indent +above. + + + + + + + +Keep Indent Profile +When this is enabled, the editor will not unindent lines in a +selection further when the line with the least indentation becomes unindented. +If you sometimes unindent blocks of indented code, this may be helpful. + + + + +Keep Extra Spaces +Indentations of more than the selected number of spaces +will not be shortened. + + + +Keys to use + + + +Tab key indents + +This allows the tab key to be used to indent. + + + +Backspace key indent + +This allows the backspace key to be used to +indent. + + + + + + + +Tab Key Mode if Nothing Selected + + + +Insert indent characters + +This allows the Tab key insert indent +characters. + + + +Insert tab character + +This allows the Tab key insert a tab. + + + +Indent current line + +This allows the Tab key indent the current +line. + + + + + + + + + + + +Open & Save + + + + +File Format + + + +Encoding: + +This sets the default character encoding for your files. + + + +End of line: + +Choose your prefered end of line mode for your active +document. You have the choice between &UNIX;, DOS/&Windows; or Macintosh. + + + +Automatic end of line detection + +Check this if you want the editor to autodetect the end of line +type. The first found end of line type will be used for the whole file. + + + + + + + +Memory Usage + + + +Maximum loaded blocks per file: + +The editor will load given number of blocks (of around 2048 lines) of +text into memory; if the filesize is bigger than this the other blocks +are swapped to disk and loaded transparently as-needed. +This can cause little delays while navigating in the document; a +larger block count increases the editing speed at the cost of memory. +For normal usage, just choose the highest possible block count: +limit it only if you have problems with the memory usage. + + + + + + + +Automatic Cleanups on Load/Save + + + +Remove trailing spaces + +The editor will automatically eliminate extra spaces at the ends of lines +of text while loading/saving the file. + + + + + + + +Folder Config File + + + +Search depth for config file: + +The editor will search the given number of folder levels upwards +for &kwrite; config file and load the settings line from it. + + + + + + + +Backup on Save +Backing up on save will cause &kwrite; to copy the disk file to +<prefix><filename><suffix>' before saving changes. +The suffix defaults to ~ and prefix is empty by +default. + + +Local files + +Check this if you want backups of local files when +saving. + + + +Remote files + +Check this if you want backups of remote files when saving. + + + +Prefix + +Enter the prefix to prepend to the backup file names. + + + +Suffix + +Enter the suffix to add to the backup file names. + + + + + + + + + + + +Highlighting +This group of options is used to customize the highlighting styles for +each programming language type. Any changes you made in other areas of this +dialog apply only to this type. + + + +Highlight: +This is used to choose the language type to +configure. + + + +Informations + + +View the properties of the chosen language highlighting rules: +author name and license. + + + + + +Properties + + + +File extensions: +This is the list of file extensions used to determine which +files to highlight using the current syntax highlight mode. + + +MIME types: +Clicking the wizard button will display a dialog with a list of +all available mime types to choose from.The File Extensions entry will automatically be edited as +well. + + +Priority: +Set the priority of the highlight rule. + + + + + + +Download... + + +Click this button to download new or updated syntax highlight descriptions +from the &kate; website. + + + + + + + + + +Filetypes +This page allows you to override the default configuration for documents +of specified mimetypes. When the editor loads a document, it will try if it +matches the file masks or mimetypes for one of the defined filetypes, and if so +apply the variables defined. If more filetypes match, the one with the highest +priority will be used. + + + +Filetype: +The filetype with the highest priority is the one displayed in +the first drop down box. If more filetypes were found, they are +also listed. + + +New +This is used to create a new filetype. After +you click on this button, the fields below get empty and you +can fill the properties you want for the new filetype. + + +Delete +To remove an existing filetype, select it from the drop down +box and press the Delete button. + + + + + +Properties of current filetype +The filetype with the highest priority is the one displayed in +the first drop down box. If more filetypes were found, they are also +listed. + + +Name: +The name of the filetype will be the text of the corresponding +menu item. This name is displayed in the +ToolsFiletypes + + + +Section: +The section name is used to organize the file types in +menus. This is also used in the +ToolsFiletypes + menu. + + +Variables: +This string allows you to configure &kwrite;'s settings for the +files selected by this mimetype using &kwrite; variables. You can set almost any +configuration option, such as highlight, indent-mode, encoding, +etc.For a full list of known variables, see the +manual. + + +File extensions: +The wildcards mask allows you to select files by filename. A +typical mask uses an asterisk and the file extension, for example +*.txt; *.text. The string is a semicolon-separated list of +masks. + + +MIME types: +Displays a wizard that helps you easily select +mimetypes. + + +Priority: +Sets a priority for this file type. If more than one file type +selects the same file, the one with the highest priority will be +used. + + + + + + + + +Shortcuts +You can change here the shortcut keys configuration. Select an +action and click on Custom if you want a different shortcut +for this action. +The search line alllows you to look for a specific action and see +its associated shortcut. + + + +Plugins +This tab lists all available plugins and you can check those you +want to use. Once a plugin is checked, the +Configure button is enabled and you can click it +in order to configure the highlighted plugin. + + + + +Credits and Licenses + +&kwrite; Copyright 2001 by the &kate; team. + + +Based on the original &kwrite;, which was Copyright 2000 by Jochen Wilhelmy +digisnap@cs.tu-berlin.de + + +Contributions: + + + +&Christoph.Cullmann; &Christoph.Cullmann.mail; + + + +Michael Bartl michael.bartl1@chello.at + + + +Phlip phlip_cpp@my-deja.com + + + +&Anders.Lund; &Anders.Lund.mail; + + + +Matt Newell newellm@proaxis.com + + + +&Joseph.Wenninger; &Joseph.Wenninger.mail; + + + +Jochen Wilhely digisnap@cs.tu-berlin.de + + + +&Michael.Koch; &Michael.Koch.mail; + + + +&Christian.Gebauer; &Christian.Gebauer.mail; + + + +&Simon.Hausmann; &Simon.Hausmann.mail; + + + +Glen Parker glenebob@nwlink.com + + + +Scott Manson sdmanson@altel.net + + + +&John.Firebaugh; &John.Firebaugh.mail; + + + + +Original documentation by &Thad.McGinnis; &Thad.McGinnis.mail; + + + +Updated by &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; and +&Anders.Lund; &Anders.Lund.mail; + + + +This version of the &kwrite; Handbook is based on the original by +&Cristian.Tibirna; &Cristian.Tibirna.mail; + + + +Converted to docbook/proofreading by &Lauri.Watts; &Lauri.Watts.mail; + + + + +&underFDL; +&underGPL; + + +&documentation.index; + + + diff --git a/doc/kxkb/Makefile.am b/doc/kxkb/Makefile.am new file mode 100644 index 000000000..085981d9b --- /dev/null +++ b/doc/kxkb/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = AUTO + diff --git a/doc/kxkb/index.docbook b/doc/kxkb/index.docbook new file mode 100644 index 000000000..6f3673aba --- /dev/null +++ b/doc/kxkb/index.docbook @@ -0,0 +1,358 @@ + + + + + +]> + + + +The &kxkb; Handbook + + + +&Andriy.Rysin; &Andriy.Rysin.mail; + + +&Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; + + +&Andriy.Rysin; &Andriy.Rysin.mail; + + + + + + + + +2003 +&Andriy.Rysin; + + +2006 +&Anne-Marie.Mahfouf; + + +&FDLNotice; + +2006-02-16 +3.5.2 + +&kxkb; is a keyboard layout switching +utility based on X11 xkb extension. + + +KDE +kxkb +keyboard +layout + + + + +Introduction + +&kxkb; is the &kde; keyboard layout switching utility. +It is based on X11 xkb extension and allows to use different keyboard +layouts for inputing text. &kxkb; features keyboard layout indicator. + + + + + +Using &kxkb; + + +Getting Started + +&kxkb; starts automatically and stays in system tray as a flag +with 2 or 3 letter abbreviation of layout name on top of it if more +than one layout is defined or Show indicator for single +layout option is turned on. + +When &kxkb; is running you can change layouts clicking on its +tray icon with the mouse or pressing its keyboard shortcut. Keyboard +shortcut or mouse click will switch to next layout or alternatively you +can &RMB; click the &kxkb; icon and select layout from the +list. + +&RMB; clicking on the &kxkb; icon you can start its +configuration by selecting Configure... or +by opening Control Center and selecting +Localization/Keyboard Layout. Alternatively, you can start it by +typing kcmshell keyboard_layout in a +terminal. + + + + + +Configuring &kxkb; + + +General Information + +&kxkb; Configuration consists of three tabs: Layout, Switching + Options and Xkb Options. Layout and Xkb Options are mutually independent. +The Layout tab defines layouts you want to use and their options, the Switching +Options tab defines how you want to switch keyboards and the Xkb Otions tab +defines parameters for Xkb extension on which &kxkb; is based. +Xkb options are property of X and are not handled in any way by &kxkb; - +it just sets it up. + + +&kxkb; configuration does not change anything in XFree86 configuration +files and Layout settings from XFree86 configuration are overridden +by &kxkb; if option is turned on. + + +To make your XFree86 configuration work you have to turn off both + in layout configuration tab +and in +Xkb options configuration tab (for the latter the same effect can be +reached if is turned off and +none of xkb options are set). + + +&kxkb; does most of its actions through setxkbmap command. +You can see the commandline to be executed for each active layout +when you select it and, on the xkb options tab, its available xkb option set. + + + + +Layout Configuration + + +The Layout tab + + + + + + The Layout tab + + + + + +In layout configuration dialog the list of available layouts on your left. +You have to choose each layout you want to use and add them (one by one) +to the list of active layouts on the right. You can also change the order +in which active layouts will be switched when toggled by keyboard shortcut +or mouse button. The first layout in the list becomes default layout. + + +Some layouts have several variants. Layout variants usually represent +different key maps for the same language. For example, Ukrainian +layout might have four variants: basic, winkeys (as in Windows), typewriter +(as in typewriters) and phonetic (each Ukrainian letter is placed on a +transliterated latin one). If your layout is multi-variant one +you can the variant in combobox below the active layouts list. + + +Keyboard model setting is independent of your keyboard layout and refers +to the "hardware" model, i.e. the way your keyboard is manufactured. +Modern keyboards that come with your computer usually have two extra keys +and are referred to as "104-key" models, which is probably what you want +if you don't know what kind of keyboard you have. + + +You can also choose switching policy for keyboard layout. By default it's + all applications will share the same current layout. + means each application will have it's own layout and +switching layout while you are working with one application will not impact layout for any +others. will make every window have its own layout even if they belong +to the same program. + + +If you set only one active layout, at startup kxkb configures the keyboard and exits thus +its indicator will not appear. If you still want kxkb indicator select + option. + + + +If you leave active layout list empty keyboard layouts will be disabled + + + + + +Switching Options + + +The Switching Options tab + + + + + + The Switching Options tab + + + + + + +Show indicator for single layout +Shows icon in system tray even when thee is +only one layout. + + +Show country flag +Shows country flag on background of layout name in tray +icon. + + +Switching Policy +If you select Application or +Window switching policy, +changing the keyboard layout will only affect the current application or +window. Global will make the switching +policy work globally for all applications and windows. + + +Sticky Switching +If you have more than two layouts and check Enable +sticky switching, switching with the keyboard shortcut or clicking on +the kxkb indicator will only cycle through the last few layouts. You can specify +the number of layouts to rotate below in the Number of layouts to +rotate box. You can still access all layouts by right-clicking on the +&kxkb; indicator. + + + + + +XKB Options Configuration + + +The Xkb tab + + + + + + The Xkb tab + + + + + +Xkb options allow you to select behavior of your keyboard. These options are not +handled by &kxkb; but may help tune your keyboard to your needs. You can set Xkb +extension options instead of, or in addition to, specifying them in the X11 +configuration file. + + + + + + +Troubleshooting + + +Common Problems + +If you switch to some layout and you can not see some characters +from your layout as you type, please check your local settings. ⪚ +~/.i18n or +/etc/sysconfig/i18n, locale you have before +starting kde applications must have an encoding which contains +characters from your layout. For example, to enter ukrainian symbols +you must have encoding KOI8-U, CP1251 or UTF-8. The last one is a good +choice to try for most of the languages if you have such a problem. + + +If kxkb does not switch with keyboard shortcut when you switch +it to some layout but switching with mouse is ok may mean +that your layout does not contain the key +assigned in shortcut. + +In XFree86 prior to version 4.3.0 non-latin layouts mutually included +latin group and this group was the default thus pressing +&Ctrl;&Alt;k +always yielded the right combination. From version 4.3.0 by default +all layouts contain only one group thus non-latin layouts may not work +here. + +Possible solutions are: + + + +add your layout to $nonlatin or $oldlayouts lists in +/etc/X11/xkb/rules/xfree86 or the location of the +xkb rules on your computer. + + +Change the shortcut to something language neutral, ⪚ +&Ctrl;Menu + + +Turn on the option to include the us group in +your layout (effectively the same as solution 1). + + + + + + + +Files and Layout Descriptions + +<application>xkb</application> Files and Layouts + +All available keyboard layouts are described in +/etc/X11/xkb/rules/xfree86.lst (and +/etc/X11/xkb/rules/xfree86.xml since XFree86 +4.3.0), the layouts themselves can be found in +/etc/X11/xkb/symbols/pc (or +/etc/X11/xkb/symbols for XFree86 4.2.x and +older). Note that the location of these files may differ depending on +your operating system and distribution. + +&kxkb; now uses the xkb extension instead of xmodmap, so to +define your own layout you have to get one from /etc/X11/xkb/symbols which is closest to +what you want to get (or /etc/X11/xkb/symbold/pc for XFree86 +4.3.0), rename it to something you like and edit it. Then just add the +name to /etc/X11/xkb/rules/xfree86.lst (and for +XFree86 4.3.0 or later it is a good idea to add the name also to +/etc/X11/xkb/ruls/xfree86.xml - some packages +already use it, not &kxkb; though yet) kxkb will pick it up on +restart. Note: you have to be root to edit those files. + + + + + + +Credits and Licenses + +&kxkb; is currently developed and maintained by Andriy Rysin +rysin@kde.org. Several other people +have worked on kxkb: + + +Shaheed Haque srhaque@iee.org +Ilya Konstantinov kde-devel@future.galanet.net + + +&underFDL; +&underGPL; + + + + + + diff --git a/doc/kxkb/layout.png b/doc/kxkb/layout.png new file mode 100644 index 000000000..dfb30cbf6 Binary files /dev/null and b/doc/kxkb/layout.png differ diff --git a/doc/kxkb/switching.png b/doc/kxkb/switching.png new file mode 100644 index 000000000..504eaa7b2 Binary files /dev/null and b/doc/kxkb/switching.png differ diff --git a/doc/kxkb/xkb.png b/doc/kxkb/xkb.png new file mode 100644 index 000000000..df2db58f7 Binary files /dev/null and b/doc/kxkb/xkb.png differ diff --git a/doc/quickstart/Makefile.am b/doc/quickstart/Makefile.am new file mode 100644 index 000000000..7e42282c4 --- /dev/null +++ b/doc/quickstart/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = khelpcenter/quickstart diff --git a/doc/quickstart/index.docbook b/doc/quickstart/index.docbook new file mode 100644 index 000000000..7828c7121 --- /dev/null +++ b/doc/quickstart/index.docbook @@ -0,0 +1,1340 @@ + + + + + +]> + + + + +An Introduction to &kde; + + + + +The &kde; Team + + + + +2004-08-28 +3.00.00 + + +1999200020012002 +The &kde; Team + + +&FDLNotice; + + +An introduction to the K Desktop Environment +Quick Start Guide to &kde; + + +KDE +quick start +introduction + + + + +Introduction + + +This document is a brief introduction to the K Desktop Environment. It +will familiarize you with some of the basic features of &kde;. + + + +This guide is far from covering all aspects of the K Desktop or even most +of them. It will only describe some of the most basic ways to accomplish a few +of the most common tasks. + + + +We assume that you are already familiar with at least one graphical +user interface, for example CDE, +Geos, GEM, &NeXTSTEP;, +&Mac;, OS/2 or &Microsoft; &Windows;. So we +will not explain the usage of the mouse or the keyboard but +concentrate on hopefully more interesting things. + + + + + +An Overview of &kde; + + +This section is for users who prefer to learn by exploring and want +only a brief orientation to get started. Later sections provide a more +thorough introduction to the environment, with helpful hints and +shortcuts. If you are impatient to get started, skim this section, go +play for a bit, then come back and peruse the other sections of this +guide as needed. + + + + +&kde; provides a highly configurable desktop environment. This +overview assumes that you are using the default environment. + + + + +The &kde; Desktop + +A typical &kde; desktop consists of several parts: + + + +A panel at the bottom of the screen, used +to start applications and switch between desktops. Among other things, it +contains the &kmenu;, a large &kicon; +which displays a menu of applications to start when clicked. + + + + + +A taskbar, by default embedded in the panel, used +to switch between and manage currently running applications. Click on an +application on the taskbar to switch to the application. + + + + + +The desktop itself, on which frequently used +files and folders may be placed. &kde; provides multiple desktops, +each of which has its own windows. Click on the numbered buttons on +the panel to switch between desktops. + + + + + + + +Ready, Set, Go! + +Here are a few quick tips to get you up and running. + + + + +To start an application, click on the &kicon; button on +the panel (called the &kmenu;) +and choose an item from the menu. + + + + +Click the icon that looks like a picture of a house on +the panel to access the files in your home folder using +&konqueror;, &kde;'s File Manager utility. + + + +Choose K menu +System +Konsole to get a &UNIX; +command prompt, or press &Alt; +F2 to get a mini command prompt window to +execute a single command. + + + + + +Choose the Control Center +item on the &kmenu; +to configure &kde;. + + + + + +Press &Alt;Tab to +switch between applications and &Ctrl;Tab to switch between +desktops using the keyboard. + + + + + +Use the &RMB; mouse button to access context menus for the panel, +desktop, and most &kde; applications. + + + + + + + + +Launching Applications + + +Using the &kmenu; and the Panel + + +At the bottom of the screen you will find the desktop panel, which is called +&kicker;. You use the panel to launch applications. Have a look at the +button on the left with a large &kicon;. + + + +This button is called the &kmenu;. It has +a small arrow on the top to indicate that it will pop up a menu if you +click on it. Just do it! The popup offers you easy access to all &kde; +applications installed on your computer system. + + + +Customizing &kicker; + + + +If you use one application or tool very often, then you may want to have even faster +access to it. In this case you can add a single application or an entire sub-menu of the +&kmenu; as a special quick-launch button on the panel. If you want to reach an application +directly via a launch button, click with the &RMB; either on a clear space on the panel or on the +&kmenu; icon. Select Panel Menu Add Application to Panel... + and then navigate to the application or menu you would like to add to +the panel. + + + +You can add an entire menu this way, or one of the &kicon; +button sub-menus. For example, if you have &koffice; installed and +want quick access to all the &koffice; applications, without having to +navigate through the &kmenu;, then instead of choosing an +application, click on the Add this menu menu +entry. Now you will have instant access to all the &koffice; +applications, without having to put an icon for each on the panel. + + + + +You can move all items of the panel around with the +Move command of the context menu. Just click +with the third mouse button (the +third mouse button is normally the +right button, but if you have configured your +mouse differently, for example for left-handers, it might also be the +left one). A menu will pop up where you can +choose Move. Now move the mouse and see how +the icon follows while still staying on the panel. When you are done, +simply hit the first mouse button (by default +the left one). As you may have noticed, +there is also a menu entry Remove in case you +are tired of a certain launch button on your desktop. + + + + + + +Using Context menus + + +This leads us to another interesting topic: in many places, you can +click the right mouse button to display a +context menu with choices that are applicable to +the item you clicked. It is therefore always a good idea to try out the +third mouse button on something, if you do +not know what to do with it. Even the background of the desktops has +such a menu! + + + + + +Other Panel features + + +There are other interesting things possible with the panel. One +may be important if you have a low resolution on your monitor: it is +the hide-and-show function, activated by clicking on the +small arrowed button, which is at one or both ends of the panel. + + + +Perhaps you just do not like the panel extending the full width of the +screen. That's easily changed! &RMB; on an empty space in the panel, +and choose Configure Panel.... In the &kcontrolcenter; +dialog that pops up, you can choose Length on +the Appearance tab, and use the slider there to set +the panel to less than 100% width. + + + +If you're following along, and have that dialog open anyway, then feel +free to play with all the options, and use the +Apply to see the effect they have. You can +easily reset everything to the default configuration, by simply pressing +the Use Defaults button. + + + +By the way, if you are not sure what a certain button does in &kde;, +just move the mouse pointer over it and wait for a short while: &kde; +has a built-in mini context help, called tool tips, which +explains the functionality of such controls in a few words. + + + + + + + +But I want my command line back! + + +Just calm down, there is nothing to fear. &kde; does not want to take your +beloved (and sometimes very effective) command line away from you. You can move +your files with the desktop, but you can also use the &UNIX; commands you are +accustomed to. In fact,&kde; puts command line power at your fingertips, +in perhaps some surprising places. + + + +&kde; provides a very sophisticated command line window called +&konsole;. Choose K menu +System +Konsole to start it. This may +be something you want on your panel: luckily it's already there in the +default configuration! + + + +Sometimes, you only want to enter one command on the command line. In +these cases, you do not need a full-blown terminal. Just hit +&Alt;F2 and you get a +small command line where you can enter one command. The command line +window will disappear afterwards, but it remembers your command. + + + +When you pop up this window (which we call +minicli by the way) and hit the Up +arrow, you can browse through all the commands you have +previously entered. Also, you can enter &URL;s in +minicli to open a &konqueror; window with +the specified &URL;. + + + +&konqueror; and the editor &kate; can both display terminal windows, +which behave just like &konsole;. In &konqueror;, you can turn this +on with the menu choice +WindowShow Terminal +Emulator. The embedded terminal will display +at the bottom of your &konqueror; window, and the really clever thing +is that it will follow your clicks in the file manager view, changing +folder as you do. In &kate; you can display a terminal with the +menu choice SettingsShow +Console. + + + + +To display a &UNIX; man page, enter +man:command +in minicli, where command +is the name of a &UNIX; command. + + + + + +To search for a word or words on the Google search engine, you can try entering +gg:word or +words. There are a whole lot more of these +shortcut commands, and you can even add your own! Take a look in +&kcontrolcenter;, in the tab Web Browsing + Enhanced Browsing. + + + + +Finally, there's a way to have your command line always available, no +matter what you're doing - add one to your &kicker; panel! + + +Simply &RMB; click on an empty space in the panel and choose +Add Applet to Panel.... In the dialog that appears, +scroll down until you see the Run Command list item. Select +it with the &LMB; and click Add to Panel. This will embed a mini-cli +directly into your panel, complete with command history. + + +So, in conclusion, the command line is never far from view when you're +using &kde;. + + + + + + +Working with Windows + + +If you have not already done so, start an application using the &kmenu;; say, +Find Files. + + + +A window! What now? + + +Well, usually people work inside windows, but +sometimes you may want to manipulate windows. Here's a quick overview +of some of the most common window related functions: + + + + +Move a window + + +Drag the window's title bar, or hold the &Alt; key down +and drag anywhere in the window. + + + + + +Resize a window: + + +Drag the window's border, or hold the &Alt; key down and drag with the +&RMB; anywhere in the window. + + + + + +Maximize a window + + +Click the maximize button in the titlebar (in the default decoration it +is the square, next to the X) to make the window fill the screen, or if +the window is already maximized, to shrink it back to its original +size. Clicking with the &MMB; maximizes the window vertically, and with +the &RMB;, horizontally. + + + + + +Iconify a window + + +Click the Minimize button in the titlebar (next to Maximize) +to hide the window. Restore it by clicking on the window's icon in the +taskbar. + + + + + +Switch between windows + + +Aside from the usual mouse click to switch to another window, +you can use &Alt; +Tab to switch windows. See below for more +techniques. + + + + + + +Titlebar buttons + + +&kde; windows have some pretty standard buttons on their titlebars which +give you fast access to some common operations. The default button +layout looks like this: + + + +On the left side: + + +A Menu button. This usually shows a mini icon for the application. Click +on it to get a window operations menu. Shortcut: &Alt;F3 opens the window +menu. + + + + + + +On the right side: + + +A Minimise button. + + + + + +A Maximize button. + + + + + +A Close button. This closes the window. Shortcut: &Alt;F4. + + + + + + + +Switching between windows + + +Now that we know how to deal with windows, we encourage you to open +some other windows using the panel, since we will now discuss how to +switch between different windows. Since this is such a common +activity, &kde; offers several ways to do it; pick your favorite! + + + +Many window systems require you to click the mouse in another window +to begin using it. This is &kde;'s default behavior, termed +Click To Focus focus policy. But you can also configure +your desktop in a way that moving the mouse pointer on to a window will +activate it. This is called Focus Follows Mouse. If you +select this policy using the &kde; Control +Center, the window under the mouse pointer is always the active +one. It does not necessarily come to the front automatically, but you +can still click on to the titlebar or the border of a window or, a +&kde; special, you can use the &Alt; key and click the &MMB; +anywhere on the window to raise it. + + + +Here are some other methods to switch windows: + + + + + +Pick a window from the window list menu. To open +the menu, click the &MMB; on +an empty area of the desktop, or click the icon with several windows +on the panel, or finally click the up arrow at the left hand end of +the taskbar in the panel. + + + + + +Hold down the &Alt; key and press Tab to cycle through +the windows. + + + + + +Use the taskbar (see below). + + + + + + + + +Using the Taskbar + + +The taskbar displays a list of small icons, one +for each window on the desktop. In the default &kde; setup the taskbar +is located inside the panel, but it can also be located at the top or +the bottom of the screen. + + +The taskbar is very powerful. In the default configuration, if you +have more than one window from the same application open, they will be +grouped, so that you see one icon per application in +the taskbar. + +A simple &LMB; +click on the taskbar button will pop up a list of the open windows for +that application and you can choose the window you want to +use. Choosing one of these entries with the +left will bring you to the selected +window immediately. Click on a taskbar entry with the +right and you will see a menu allowing you +to operate on all the windows grouped under that icon, or each window +individually. + + +You can choose to see all the windows on all the desktops in your +taskbar, no matter which desktop you are currently viewing, or to only +see the icons for the desktop you are looking at. You can also choose +to ungroup the icons, so that each open window will have its own icon +in the taskbar. These and many more options are available simply by +right clicking on the taskbar handle (the small textured bar at the +left hand side) and choosing Configure Taskbar.... + + + +The icons on the taskbar resize themselves to make room for +applications, so you can fit many more applications than you might +think. Making the panel wider will let the taskbar icons take on a row +and column layout, but they will still resize to fit more icons. + + + + + +Using Virtual Desktops + + +Now, what was that sticky thing? + + + +It may happen that you have more windows open than space on your +desktop. In this case you have three possibilities: + + + + + +Leave all windows open (cluttered desktop) + + + + + +Iconify those windows which you do not need at present and use +the taskbar or &Alt; +Tab to switch between them +(still a bit confusing and much work!) + + + + + +Recommended: Do what a real operating system does if there is not enough +physical memory: Use virtual memory, in this case virtual desktops. + + + + + +The third option is the way to go! &kde; can handle several different desktops, +each with its own windows. The default configuration provides four +desktops. You can switch between the virtual desktops easily with a +click on one of the desktop buttons on the panel. Also &Ctrl;F1...F4 will send you +to the corresponding desktop immediately, or &Ctrl; Tab will cycle through +the desktops. + + + +Virtual desktops are very nice. But sometimes you want a window to be +present on every desktop. This could be, for example, +a small chat window, an alarm clock or whatever. In this case you can +use the above mentioned sticky button which will pin the +window on the background so that it will appear on every virtual +desktop. + + + +The sticky button can also be used to move a window from one virtual +desktop to another one: push the sticky pin on the window, switch to a +different desktop, and release the pin by pushing it again. You can +achieve the same result by using the context popup menu of the +window's entry in the taskbar (menu item To Current +Desktop) or the To Desktop +option on the window operations menu. + + + + + + +Managing your files + + + + +A common metaphor of graphical desktops is the use of folders to +represent folders on your hard disk. Folders contain files and +other folders. A &kde; application called &konqueror;, the K File +Manager, uses this metaphor to help you manage your files. + + + +Using &konqueror; + + +The first time you start &kde;, a window with lots of icons in it +appears. This is a &konqueror; window displaying the files in your +home folder (the area where your personal files are stored). The +pathname of the folder is displayed under the window's tool bar. If +you do not see such a window now, click the icon on the panel that +looks like a folder with a picture of a house. + + + +To open a file or folder, simply click it once with the &LMB;. +You can also choose +WindowShow +Navigation Panel from the menu to display the folder +hierarchy for more direct navigation. Or you can edit the path +displayed under the toolbar to get to a specific folder quickly. + + + +Opening Files + + +&kde; comes with a set of applications to view and edit files of many +common types, and when you click a file containing, say, a document +or image, &konqueror; will start the appropriate application to +display the file. If it does not know what application to start to open +a file you clicked, &konqueror; will prompt you for the name of the +application to run, and when you have chosen, &konqueror; will offer +to remember your choice for the next time you open a file of that type. + + + + +&konqueror; uses MIME types to associate +files with applications. + + + + + + +Dragging and Dropping Icons + + +To copy or move a file, simply drag its icon to the desktop, to +another &konqueror; window, or to a folder icon. When you release the +button, &konqueror; displays a menu to allow you to choose to copy, +move, or create a link to the file. + + + + +Note that if you choose to create a link, &kde; creates a &UNIX; +symbolic link (not a hard link), so if you move or delete the original +file, the link will be broken. + + + + +Most &kde; applications also support drag and drop operations: you can +drag an icon on to a window of a running application, or on to an icon of +an application that is not started, to have the application open the +file. Try it! + + + + + +Setting File Properties + + +To change file properties, such as its name and permissions, &RMB; +click the icon and choose Properties from +the menu. + + + + + + +Working with Archives and Networks + + +In the recent past, you needed special software to access files on the +Internet. Not any more! + + + +&kde; supports a technology called Network Transparent +Access (NTA) which allows you to work with +files on the other side of the world as easily as those on your local +hard disk. + + +For example, to access files on an &FTP; server, just choose +LocationOpen +Location from a &konqueror; menu, and enter +the URL of an &FTP; server. You can drag and drop +files to and from the folders on the server just as if they were on +your local disk. You'll even be able to open files on the &FTP; server +without having to manually copy them to your local disk (&kde; does it for you +when necessary). + + + + +Note that &konqueror; uses anonymous &FTP; access, which may restrict +your access to files on the &FTP; server. If you have an account on +the server, you can supply your user ID as part of +the URL, like this: +ftp://userid@server/folder + + + +&konqueror; will prompt you for your password, and if the login +succeeds, you will have full access to your files on the server. + + + + +If you are used to the +WinZip utility on +&Microsoft; &Windows;, then you will be happy to hear that &kde; can +look into tar archives, too. It treats such archives just like a +normal folder, and you can browse into the archive, open files, &etc; In +general, accessing files on the Internet and in archives should look +and feel just like accessing files on your local disk, except for +delays imposed by the network and extracting the archive. + + + + +Using Templates to access Applications and Devices + + +In &kde; it's easy to put icons on the panel or the desktop to access +your applications. It's just as easy to add icons to access other +items of interest. &kde; has templates for shortcuts to: + + + + + +Applications + + + + +Printers + + + + +Mountable Devices (⪚ floppy drives) + + + + +Internet resources (⪚ WWW documents, &FTP; +folders) + + + + +Documents for some of &kde;'s &koffice; applications. + + + + + +You can add any of these items to the desktop by &RMB; clicking where +you want the icon, and choosing Create New +and selecting the item you want to link to. + + + +Nearly every item in the &kmenu;, on the desktop, and on +the panel refers to a .desktop +file on disk. The .desktop file +specifies what icon to display, as well as specific information about +what the icon represents (an application, device, or +URL). You can drag any .desktop file to the panel to create a +quick-launch button. + + + + + +Mounting devices + + +&UNIX; provides access to storage devices other than the primary +hard disk through a process called +mounting. &kde; uses .desktop files to allow you to easily +mount, unmount, and access files on secondary storage devices such as +floppy drives and &cdrom; drives. + + + +As an example, here are the steps needed to create an icon to access +files on a floppy disk: + + + + +Many systems require you to be logged in as root to mount and unmount devices. + + + + + +Right click on the desktop and choose +Create +NewDevice +Floppy Device.... + + + + +On the General tab of the resulting dialog, change +the name to whatever you like, in the text box at the top. + + + + + +On the Device tab, enter /dev/fd0 (or the path to the floppy device +as it is named on your system) as the Device. + + + + +You can add a Mount Point here too. This should be +an existing folder, but empty. Common mount points are /mnt/floppy or /floppy, but you can just as easily have floppy +disks mounted on ~/mydisk if you +want. + + + + +Click the Unmounted Icon and select the picture +of a floppy disk without the green light. + + + + +Once you're happy with your choices, choose OK +and you are finished! + + + + + +Now, place a properly formatted floppy in the drive and click the +Floppy icon to have &kde; mount the floppy drive and display +the files on the disk. Before removing the disk from the drive, &RMB; +click the Floppy icon and choose +Unmount from the menu. + + + + + + + +Configuring your desktop + + +If you do not like something about the way the desktop looks or +operates, you can probably change it. &kde; is very configurable and you +can change almost every aspect of the appearance and the behavior of +your desktop. Unlike many other &UNIX; desktop environments, you do not +have to edit cryptic configuration files either (but you can if you +really want to!) You use the &kcontrolcenter;, a special program for +configuring your desktop. + + + +Using the <application>&kde; Control Center</application> + + +Launch the &kcontrolcenter; from the &kmenu;. +A window with two panes appears, displaying a list of +modules in the left pane. + + + +Open a module by clicking its name; a list of submodules will +appear. Then, click one of the submodule category names to edit its +configuration in the right pane. + + + +Changing the configuration is fairly straightforward. A help button is +available on each configuration panel to explain settings that are not +obvious. Each panel has buttons labeled Help, +Use Defaults, Apply, and +Reset, which work as follows: + + + + +Help + + +Displays a short help text in the left hand pane, including a link to a +longer manual for the module in question. + + + + + +Use Defaults + + +Sets all the options in the current module back to the default at the +time &kde; was installed. + + + + + +Apply + + +Applies the current settings in the currently open module. + + + + + +Reset + + +Resets the options to the state they were in when you opened the module. +If you have already used the Apply button, then +this button will reset the options to the state they were in when you +pressed Apply. + + + + + + + +If you make changes on one configuration panel and move to a different module +without clicking OK or Apply +first, &kcontrolcenter; will prompt you to ask whether your changes should be applied +first. + + + + + + + + +Logging out + + +We sincerely hope that using &kde; gives you so much fun and +pleasure that you never want to log out. But if you do, simply choose +K menu +Logout. + + + +There is also a logout button directly on the panel, which looks like a +small power button. Or you can press &Ctrl; +&Alt; Delete to log out. + + + +Session Management + + +When you log out, &kde; can remember which applications you had open, as +well as where all the windows were located, so that it can open them +for you the next time you log in. This feature is termed +Session Management. &kde;-aware applications will +restore themselves to the state they were in when you logged out. For +example, &kate; remembers which files you were editing. + + +Non-&kde; applications do not memorize their state on logout, and +&kde; will warn you to make sure that you have saved any important +data in them when you start to log out. + + + +To illustrate session management, choose +K menuEditors +Kate to start &kate;. Open +a text document to edit. Now log out and back in. You will observe +that &kate; will be restored to the exact same position on the screen, +including the right virtual desktop, and the document we left open in +&kate; before we logged out is opened again automatically. &kate; +will even remember whether you had unsaved changes to your document +before you logged out and will save them to the file you were working +on if you choose Save from the +File menu. + + + + + + +&kde;, an exciting Journey + + +We hope you enjoyed this brief tour of the K Desktop environment and +that this unique desktop environment will help you get your work done +faster and more comfortably than ever. + + + +Please remember that the &kde; project is not a commercial venture, +but rather a project run by volunteers from all over the world. We +would like to invite you to join the &kde; project and become part of +this unique network of people. If you are a programmer you might +consider helping us write &kde; applications. If you are an artist or +have experience with graphic design, consider creating icons sets, +color schemes, sound schemes and logos for &kde;. If you enjoy +writing we would love for you to join our documentation project. + + + +As you can see there are many ways in which you can help. You are +cordially invited to join this world-wide network of people dedicated +to making &kde; the best desktop environment for any computer. Please +visit www.kde.org for more +information. + + + +Welcome aboard on this exciting journey, + + +Your &kde; Team + + + + + +Credits + +Authors + + +Matthias Ettrich +ettrich@kde.org +Kalle Dahlheimer kalle@kde.org +Torben Weiss weis@kde.org +Bernd Wuebben wuebben@kde.org +Stephen Schaub sschaub@bju.edu - +Editor +Robert Williams rwilliams@kde.org - +Editor +Lauri Watts lauri@kde.org + + + + +&underFDL; + + + + + + + diff --git a/doc/userguide/Makefile.am b/doc/userguide/Makefile.am new file mode 100644 index 000000000..488634323 --- /dev/null +++ b/doc/userguide/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = khelpcenter/userguide + diff --git a/doc/userguide/a-window.png b/doc/userguide/a-window.png new file mode 100644 index 000000000..3a0072f99 Binary files /dev/null and b/doc/userguide/a-window.png differ diff --git a/doc/userguide/accessibility.docbook b/doc/userguide/accessibility.docbook new file mode 100644 index 000000000..e3195635a --- /dev/null +++ b/doc/userguide/accessibility.docbook @@ -0,0 +1,168 @@ + + + + + + +Gary +Cramblitt + + + + +Accessibility + +Accessibility + +KDEAP (the &kde; Accessibility Project) aims to ensure that &kde;, as a desktop environment, is accessible to all users, including those of us with physical disabilities. In addition to the accessibility aids in the Control Center, &kde; has several other accessibility tools, which are available in the &kde;-Accessibility package. This package may not be installed on your computer; if it is not, you can download it from here: + + +kdeaccessibility-1.0.0.tar.gz, or +kdeaccessibility-1.0.0.tar.bz2 +MD5 +lsm file + + +For more information on the project, visit the &kde; Accessibility Home Page. + + +<application>KMouseTool</application> + +Mouseclicking +automatically + + + KMouseTool is a &kde; program, which clicks the mouse for you, so you + do not have to. KMouseTool works with any mouse or pointing device. + + + + + + + + KMouseTool + + + + +Related Information + MouseTool Website: http://mousetool.com + KMouseTool Handbook + + + + + +KMagnifier + +Magnifier + +KMagnifier (or kmag, to use its &UNIX; name) is a small utility for Linux to magnify + a part of the screen. It magnifies the area of the screen around the + mouse pointer or, optionally, a user-defined area. Additionally, it can save + a magnified screenshot to disk. + + + + + + + + + KMag + + + + +Related Information + Website: http://kmag.sourceforge.net + KMag Handbook + + + + + +<application>KMouth</application> + +Speech + +KMouth is a KDE program which enables people who cannot speak to let their + computer speak, ⪚ mutal people or people who have lost their voice. + It has a text-input field and speaks the sentences that you enter. It also has + support for user-defined phrasebooks. + + + + + + + + + First screenshot of KMouth + + + + + + + + + + Second screenshot of KMouth + + + + + + + + + + Third screenshot of KMouth + + + + +Related Information + Website: http://www.schmi-dt.de/kmouth/index.en.html + KMouth Handbook + + + + + +<application>KTTS</application> - Text-to-Speech + +KTTS is a &kde; application for the conversion of text into audible speech. Currently, since &kde; 3.4, you can use KTTS to speak any text from the &klipper;, the &kde; clipboard, any text from a plain text file (using &kate; or otherwise), speak any portion of text from a &HTML; page in &konqueror;, and much more. + +To get KTTS up-and-running you will need to start by running kttsmgr, the &kde; Text-to-Speech manager. + + + +Related Information + Website: http://accessibility.kde.org/developer/kttsd/ + KTTSD Handbook + + + + + + + diff --git a/doc/userguide/amarok-icon.png b/doc/userguide/amarok-icon.png new file mode 100644 index 000000000..575d9a274 Binary files /dev/null and b/doc/userguide/amarok-icon.png differ diff --git a/doc/userguide/amarok.png b/doc/userguide/amarok.png new file mode 100644 index 000000000..ddcb285bc Binary files /dev/null and b/doc/userguide/amarok.png differ diff --git a/doc/userguide/base-kde-applications.docbook b/doc/userguide/base-kde-applications.docbook new file mode 100644 index 000000000..863271b37 --- /dev/null +++ b/doc/userguide/base-kde-applications.docbook @@ -0,0 +1,441 @@ + + + + + +&Francis.Giannaros; +&Francis.Giannaros.mail; + + + + +The Base &kde; Applications + +What follows is a brief description of a few of the base &kde; applications. For more information on any of the applications you should check the links recommended with each respective entry. + + + + + + +Fundamentals + + + +&konqueror; + &kde;'s file manager, web browser, FTP client and much more. &konqueror; is the canvas for all the latest &kde; technology, from KIO slaves (which provide mechanisms for file access) to component embedding, allowing it to be a universal viewing application, capable of displaying various image files as well as documents. + + + Website: http://konqueror.org + View the handbook by typing help:/konqueror in &konqueror;'s Location Toolbar, or by selecting it in &khelpcenter;. + + + + + + +&kate; + &kde;'s advanced multi-view text editor. &kate; is excellent for things such as viewing the &HTML; source of a webpage to handling advanced coding in C++, PHP and XML with its powerful syntax highlighting engine and code folding capabilities. &kate; is a very speedy application, being capable of opening huge text files in a matter of seconds, as well as allowing you to view a hefty amount of multiple views in order to see more instances of the same document and/or more documents at any particular time. + + + Website: http://kate.kde.org + &kate; Handbook + + + + + + + + + +&konsole; + The X terminal emulator for &kde;. &konsole;, like many &kde; applications, is extremely customizable; while you can create your own user sessions, you can also of course open &Linux; console sessions, shell sessions, as well as standard root and sudo sessions. + + + Website: http://konsole.kde.org + &konsole; Handbook + User Guide + + + + + + + +&kicker; + The &kde; Panel, used for handling your currently running applications, a pager allowing you to switch between desktops, quick launch buttons to act as application launchers and much more. + + + See for altering some of its settings. + &kicker; Handbook + + + + + + +kdcop + + A GUI front-end to the powerful &DCOP; (Desktop COmmunications Protocol). &DCOP; provides a comprehensive protocol for interprocess communication between &kde; applications. While this is increasingly useful to &kde; programmers, it is also beneficial to the ordinary user who would want to create a script, or, say, a SuperKaramba theme. + + + In the User Guide and + Other Documentation: http://developer.kde.org/documentation/library/kdeqt/dcop.html + + + + + + +&kcontrol; + The control center for the K Desktop Environment. You can alter a myriad of different things, ranging from themes, fonts and screensavers, to Internet, security and system administration. + + + See . + &kcontrol; Handbook + + + + + + +&khelpcenter; + The &kde; help system is used to provide access to the base &UNIX; help pages (man or info) as well as the native &kde; documentation provided by the &kde; documentation team or the application authors. You should be able to access all of the &kde; application handbooks from here. + + + &khelpcenter; Handbook + For information on the &kde; Documentation team, how to possibly join and help &kde;, see: http://kde.org/documentation + + + + + + + + +Related Information + http://kde-apps.org -- The largest directory of third-party &kde; applications. + As you may have noticed, a wealth of information is accessible from the respective handbooks themselves, which can be accessed either by using the help KIO slave in &konqueror; (that is, type help:/application in the Location toolbar), or by selecting it in the &khelpcenter;. + You can also likely find out quite a bit of information from the &kde; website, itself, at http://kde.org. + + + + + + + + +&Francis.Giannaros; +&Francis.Giannaros.mail; + + + + +Personal Information Management + +&kde; PIM (Personal Information Manager) is a sub-project of &kde;, and it aims to provide an application suite to manage personal information. It has several components, but these can all be brought under one application -- &kontact;, which is the personal information manager. Below is an overview of a few of its popular components; that is, a few of the applications that integrate into it. + + + +&kontact; + This serves as the medium by which the rest of the applications in &kde; PIM can integrate with one another. All of the applications in &kde; PIM can be displayed inside here, and you can easily choose which ones to display. It also contains a Summary page by which you can get a brief overview of events and information in the other components. + + + Website: http://kontact.kde.org + View the handbook by typing help:/kontact in &konqueror;'s Location Toolbar, or by selecting it in &khelpcenter;. + + + + + + +&kmail; + The mail component. &kmail; comes with full IMAP, POP3 and SMTP support. Signing and encrypting of emails is permitted, and there are many comprehensive anti-spam functions available. A spell check can easily be used, &HTML; emails can be viewed appropriately, and there is an advanced search feature. + + + Website: http://kmail.kde.org + &kmail; Handbook + + + + + + +&korganizer; + A fully customizable organizer which constitutes as the calender component. &korganizer; provides management of events and tasks, alarm notification, web export, network transparent handling of data, group scheduling, import and export of calendar files, and much more. + + + Website: http://korganizer.kde.org + &korganizer; Handbook + + + + + + +&kaddressbook; + The contacts component. &kaddressbook; enables you to manage your contacts efficiently and comfortably; contacts can be easily exported and imported from a plethora of different address book standards, and it can be efficiently integrated with &kopete;, &kde;'s multi-protocol instant messenger. Other features include support for all international character sets and advanced search functions. + + + Website: http://pim.kde.org/components/kaddressbook.php + &kaddressbook; Handbook + + + + + + +&knotes; + A handy component which can serve to handle all your digital sticky notes. You can have them displayed on your desktop, they can be dragged n' dropped into emails, printed, or even be displayed after &kontact; is closed down. + + + Website: http://pim.kde.org/components/knotes.php + &knotes; Handbook + + + + + + +&knode; + The newsreader component. It is GNSKA (The Good Net-Keeping Seal of Approval) compliant, has support for MIME and multiple servers. + + + Website: http://knode.sourceforge.net/ + &knode; Handbook + + + + + + +&akregator; + A lightweight and fast program to display news items provided by feeds, supporting all commonly used versions of RSS and Atom feeds. Useful features include searching in article titles, management of feeds in folders and setting archiving preferences. + + Website: http://akregator.sourceforge.net + &akregator; Handbook + + + + + + + +Related Information + See http://kontact.kde.org and http://kdepim.kde.org for more information. + &kontact; Handbook + + + + + + +Network + +There are several network-related applications in &kde;. Below is a description of a few of these. + + + +&kopete; + A fully-featured and advanced IM (Instant Messaging) client, which has a number of protocols including MSN, Yahoo, and AIM. &kopete; can fetch display pictures, set aliases for particular persons, as well as run multiple IM sessions at any particular time. &kopete; is quite extensible, and has a comprehensive plugin system which comes with a searchable History of previous chats, statistics on a user's status, as well as a note system allowing you to create notes for each contact. + + Website: http://kopete.kde.org + &kopete; Handbook + + + + + +&kdict; + A &GUI; front-end to the DICT protocol. It enables you to search through dictionary databases for a word or phrase, then displays suitable definitions. + + &kdict; Handbook + The DICT Development Group: http://www.dict.org/bin/Dict. + + + + + +&kget; + A manager for your downloads which integrates with &konqueror;. &kget; allows you to group your downloads, pause and resume them, as well as several other things. + + + Website: http://kget.sourceforge.net + &kget; Handbook + + + + + + + +Related Information + Several more &kde; network applications can be found in the &kde; Extragear; see , under . + + + + + + +Office + +This includes all applications in the &koffice; suite. See for a summary of the components. + + + + + +Graphics + +&kde; has several graphics-related applications, ranging from PDF viewers to applications enabling you to take screenshots. Below is a delineation, as well as some related links, for a few of them. + + + + +KColorEdit + A small and handy application for editing color palettes, as well as color choosing and naming. Colors can be chosen by giving the RGB hex code, by choosing the color from a myriad of different colors in the program, or even by grabbing the precise color of any particular thing on your screen. + + + KColorEdit Handbook + + + + + +KPDF + An advanced PDF viewer, based on xpdf, for &kde;. KPDF contains a number of ways to search through the document (standard find dialog, thumbnail filter, etc.) and has other features such as hands-free reading. + + + Website: http://kpdf.kde.org + KPDF Handbook + + + + + +KView + An image viewer program which supports a number of different image filetypes including JPEG, GIF, PNG, TIFF and many others. Kview has full integration with &kde; and it can be embedded into &konqueror; for viewing image files on your diskdrive as well as your FTP site or webserver, using its &URL; open support. Other features include a few image manipulations such as zoom, rotate, grayscale and flip. + + + Website: http://www.ph.unimelb.edu.au/~ssk/kde/kview/ + KView Handbook + + + + + +&ksnapshot; + An application for taking screenshots. It is capable of capturing images of the whole desktop, a single window, or a selected region. The images can then be saved in a variety of formats, including JPG and PNG. + + + Website: http://www.ipso-facto.demon.co.uk/ksnapshot/ + &ksnapshot; Handbook + + + + + +&kolourpaint; + A simple and easy-to-use paint program, with features such as basic painting (drawing diagrams and finger painting), image manipulation and icon editing. + + + Website: http://kolourpaint.sourceforge.net + &kolourpaint; Handbook + + + + + + +&kooka; + An intuitive raster image scan program. &kooka; helps you to handle the most important scan parameters, find the correct image file format to save and manage your scanned images. + + + Website: http://kooka.kde.org + &kooka; Handbook + + + + + + + +Related Information + Several more advanced &kde; graphics applications can be found in the &kde; Extragear; under the , see for a list of a few of them. + + + + + +Multimedia + +A brief overview of a few of the multimedia-related applications below. + + + +&juk; + An easy-to-use music player for &kde;. &juk; is playlist and meta-data focused, allowing you to quickly search through the dynamic playlist provided. Some of the features include &CD; cover-art fetching from Google images, MusicBrainz integration for file identification over the Internet, and multiple audio backends, including &arts;, GStreamer and aKode. + + + Website: http://developer.kde.org/~wheeler/juk.html + &juk; Handbook + + + + + +&kmix; + An application that allows you to change the volume of your sound card, and it supports several sound drivers. Each mixer device is represented by a volume slider, and you have basic options such as to mute that particular mixer device. + + + &kmix; Handbook + + + + + +&noatun; + A media player capable of playing WAV, Ogg Vorbis, as well as DivX encoded AVIs and other media formats. &noatun; features audio effects, a six-band graphic equalizer, a full plugin architecture, network transparency, and various look and feels. + + + Website: http://noatun.kde.org + &noatun; Handbook + + + + + + + +Related Information + Several more advanced &kde; multimedia applications can be found in the &kde; Extragear; under the , see for a list of a few of them. + + + + + + + diff --git a/doc/userguide/browser-fine-tuning.docbook b/doc/userguide/browser-fine-tuning.docbook new file mode 100644 index 000000000..0a503b6bb --- /dev/null +++ b/doc/userguide/browser-fine-tuning.docbook @@ -0,0 +1,71 @@ + + + + + + +Fine Tuning your Browsing Experience + + +Using your own style for webpages + +Webpages come in every possible set of colors and fonts, and +sometimes this doesn't give the best result. For example, if you have +visual difficulties, it may be impossible to read certain combinations +of background and text colors. &konqueror; provides a way to choose +your own colors and apply them to all webpages. Here's how: + + +Open &konqueror; and go to +SettingsConfigure Konqueror.... + +In the configuration dialog that appears, select the +Stylesheets page on the left hand side. + +On this page, choose Use accessibility +stylesheet defined in "Customize" tab, then go to the +Customize tab, and choose the settings you prefer. + +Close all &konqueror; windows (you may need to restart +&kde; to be sure) and when you re-open them, your settings should be applied. + + + + + + + + + + + + diff --git a/doc/userguide/burning-cds.docbook b/doc/userguide/burning-cds.docbook new file mode 100644 index 000000000..901709ff4 --- /dev/null +++ b/doc/userguide/burning-cds.docbook @@ -0,0 +1,38 @@ + + + + + + +Burning CDs and DVDs + +Brief overview of k3b + + + + diff --git a/doc/userguide/control-center.docbook b/doc/userguide/control-center.docbook new file mode 100644 index 000000000..240046c73 --- /dev/null +++ b/doc/userguide/control-center.docbook @@ -0,0 +1,922 @@ + + + + + + +The &kcontrolcenter; + +&kcontrolcenter; +&kcontrol; +Configuration +Customization + + + + + +The &kcontrolcenter; +The &kcontrolcenter; + + +The &kcontrolcenter; is the place to go to change any settings that +affect the whole of your &kde; environment. You can open it using the +Control Center item in the &kmenu;, or with its +command-line name, kcontrol. + +The settings are divided into several major categories, which each +contain several pages of settings. To display a settings page, expand the +major category by clicking on the + button next to it, +and then click on the name of the page you want. The settings page then +appears on the right, and you can change settings to your heart's +content. No changes take effect until you click on the +Apply button. If you decide, after making some +changes, that you want to leave the settings as they were, just click on +Reset. + +If you need more help with a page, visit that page, then click on the +Help tab. You might also want to look at the +&kcontrolcenter; Handbook, which you can open with the +Help&kcontrolcenter; +Handbook. + + + + + + +&J.Hall; +&J.Hall.mail; + + + + +Appearance & Themes + +Here you will find settings that change the way your &kde; desktop and +applications look. + + + +Background + +This section controls the color or image that is set as your desktop +background. These settings can be applied to all virtual workspaces, or to +only a specific one. There are a range of background wallpapers that come +with &kde; or you can supply your own. + + + + +Colors + +This is where you can modify the colors for your kde applications. +There are a variety of color schemes installed with &kde; by default, and +you can find others at kde-look.org. You can also create your own. Here you +can also modify the contrast and choose whether you want your &kde; colors +to be applied to non-kde applications, for a more consistant overall +appearance. + + + + +Fonts + +Here you can control the various font settings for &kde; applications. +You can also modify here anti-aliasing settings, including what range of +fonts to exclude from anti-aliasing settings. + + + + +Icons + +This section is where you can manage your icon themes and other +settings related to icons. New icon themes can be downloaded from +kde-look.org, and installed here. Conversely, you can remove icon themes by +highlighting them in the list and clicking remove. You can also set icon +sizes for various uses in &kde; and effects to apply to icons. + + + + +Launch Feedback + +This is where you can modify what kind of cursor and/or taskbar +feedback you'd like for launching applications. You can also set the +duration of this feedback here. For example, the default setting is for a +bouncing cursor with a duration of 30 seconds, or when the application has +loaded. + + + + +Screen Saver + +Here you can configure options about your screensaver. You can +configure the timeout before it starts, and whether it requires a password +to unlock the screen. + + + + +Splash Screen + +This is where you can install, remove and test the splash screens that +display on &kde; startup. More splash screens can be downloaded from + + +http://www.kde-look.org. + + + + +Style + +This section allows you to modify your widget style. A variety of +styles come with &kde;, and more can be downloaded from http://www.kde-look.org. This is also +where you would enable or disable interface options such as transparent +menus, showing icons on buttons and tooltips. Some styles have more +configuration options than others. + + + + +Theme Manager + +This is where you can create and manage themes that are made up of +personalized settings. They are a combination of desktop background, colors, &kde; widget styles, icons, fonts and what Screensaver you'd like to display . This allows you to save your favorite +looks and apply them with the click of a mouse button. + + + + +Window Decorations + +Here you can configure your window decorations. You can modify the +style as well as place the buttons in custom positions. Some window +decorations will have more configuration options than others. + + + + + + +Related Information If &kcontrolcenter; +doesn't have the setting you want, you may need to edit a configuration file +manually. See for more +information about how to do this. + + +If you enjoy modifying the appearance of your &kde; desktop, +you can find plenty of themes and styles at kde-look.org. + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + +Desktop + +This is where you will find settings to configure the appearance and +behavior of your &kde; desktop. + + + +Behavior + +Here you can configure the behavior of your desktop. This is where +you would go to configure options such as showing or hiding desktop icons, +showing tooltips and icon layout. You can also specify if you would like to +see previews of particular filetypes on the desktop, and which devices you'd +like to see icons for. + + + + +Multiple Desktops + +This is where you would configure the number of virtual desktops or +workspaces you would like to have, and what you would like them to be +called. By default &kde; has 4 virtual desktops, and you can configure up to +20. You can also enable switching between virtual desktops using the scroll +button on your mouse. + + + + +Panels + +Here you can modify options to do with &kicker; and other &kde; +panels. Among the options are size, position, length and hiding. You can +also modify the appearance of the panel with transparency, background images +and icon zooming. This is also where you would configure various menu +options including what applications you'd like to show in your +&kmenu;. + + + + +Taskbar + +The Taskbar module allows you to configure options related to your +taskbar. You can configure whether to show windows from all desktops, +grouping of similar tasks and what actions you would like to assign to your +mouse buttons. + + + + +Window Behavior + +This is where you would configure options related to the behavior of +&kde;'s window manager, &kwin;. &kwin; is extremely configurable and has +advanced features such as focus stealing prevention and different focus +policies such as focus follows mouse. You can also configure what actions +you would like to bind to certain keys and mouse events. + + + + +Window-Specific Settings + +This is an advanced configuration dialog where you can set options for +the behavior of specific windows. There are many options here for the fine +tuning of your window layout, including what position on the screen you +would like certain windows to open to, and whether they should be shown on +the taskbar or pager. You can select windows by application, or even by +their specific role within an application. + + + + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + +Internet & Network + +This section is where you would configure settings to do with internet +and networking under &kde;. + + + +Connection Preferences + +Here you can set advanced networking options such as timeout values +for server connects. Usually you would leave these options at the defaults +unless you really knew what you were doing. + + + + +Desktop Sharing + +Desktop Sharing allows you to invite someone to share your session +with you, or can enable you to log in remotely to your machine from another +location. You would then use a VNC client like &kde;'s Remote Desktop +Connection application to control your desktop over the network. This is +extremely useful if you want someone to help you perform a task. + +Here you can create and manage invitations as well as set your +security policy for uninvited connections. You can also configure whether to +show a background image and which port for the service to 'listen' +on. + + + + +File Sharing + +File sharing allows you to configure Samba (&Microsoft; &Windows;) and +NFS (&UNIX;) file sharing. To make changes in this module +you need to have the root or administrator password. This is where you would +set up whether users are allowed to share files without knowing the root +password, and which users are allowed to do so. You can also configure which +folders you're like to be shared, using which type of sharing and who is +allowed to view these shares. + + + + +Local Network Browsing + +Here you can configure options related to browsing network shares in +&konqueror;. &konqueror; is able to browse a variety of network shares and +manipulate remote files as though they were on your local machine. You can +configure it to remember your preferred username and password for connecting +to &Windows; shares (Samba). You can also set what types of network shares +you would like to be able to browse, including &FTP;, NFS +and SMB. + + + + +Local Network Chat + +This module allows you to configure options relating to the &UNIX; +talk daemon. It is a very simple network chat program +that runs in a terminal, designed for chatting over a local area +network. Some of it's features are being able to set up an 'answering +machine' that will email to you messages left for you, and being able to +forward messages to another location. + + + + +Proxy + +This is where you would configure &kde; to connect to a proxy server +rather than directly to the internet. Once again you would generally leave +these options at their defaults unless you really knew what you were +doing. If you do use a proxy server your network administrator will be able +to tell you what details to fill in here. + + + + +Samba + +The Samba Configuration module requires the +root or administrator password. It is +an advanced configuration tool that allows you to control Samba's security, +shares, users and printers in an intuitive graphical interface. This is a +very powerful tool with support for configuring everything from simple file +and printer sharing, to using your Samba server as a &Windows; NT Domain +Controller. + + + + +Service Discovery + +You can set up services browsing with ZeroConf. You can for example browse +your local network using multicast DNS. + + + + +Web Browser + +This module is where you would configure options relating to +&konqueror; as a web browser. The usual options you would expect from a +web browser, such as cookie configuration, cache and history can be found +here as well as sections to modify keyboard shortcuts, plugins and +fonts. + + + + +Wireless Network + +Here you can set up different profiles for your Wireless card, to be +able to quickly switch settings if you connect to multiple networks. You can +select a profile to be loaded on &kde; startup. + + + + + + + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + + +&kde; Components + +This section is where you can modify advanced &kde; options such as +file associations and default applications. + + + +Component Chooser + +The component chooser allows you to select the default +applications you would like to use for various services. Here you can define +what Email Client, Embedded Text Editor, Instant Messenger, Terminal +Emulator and Web Browser to use. If you prefer to use +Xterm, Vim or +Mozilla, this is the place to specify those +preferences. + + + +File Associations + +This is where you configure everything to do with file +associations. Here you can select a filetype, and choose what applications +you would like to be able to open it with. You can also select which icon +you would like to represent each filetype, and whether to show it in an +embedded or a separate viewer. + + + +File Manager + +Here you can configure the behavior of &konqueror; in file +manager mode. Among the options are fonts and font sizes, previews over +various network protocols and context menus. &konqueror; is an extremely +powerful and configurable file management tool with a plethora of +options. For more information, consult the &konqueror; handbook. + + + +KDE Performance + +Here are settings related to the memory usage of +&konqueror;. Minimize Memory Usage allows you to +control whether separate instances of &konqueror; will open or whether all +new &konqueror; windows connect to the same instance. This has the effect of +reducing memory usage. You can also select whether to pre-load &konqueror; +after &kde; startup, to reduce start times. + + + +KDE Resources Configuration + +To be written + + + +Service Manager + +The Service Manager module displays a static list of +services that are started on demand, and a second list of services that can +be manipulated by the user. The services in the first list cannot be +modified or changed. The services in the second list you can enable or +disable a service loading at start up, and manually start and stop +services. + + + +Session Manager + +Here you can configure how you would like &kde; to handle +sessions. You can configure &kde; to remember your previous session and +restore the applications you were using the next time you log in. You can +also specify individual applications to exclude from being restored, or +disable restoring sessions on login entirely. + + + +Spell Checker + +This module allows you to configure the &kde; Spell +checker. It allows you to modify what spell checker to use, what types of +error to check for and also what default dictionary to use. &kde; supports +the use of both ASpell and +ISpell. + + + + +Vim Component Configuration + +This module allows you to configure the use of +Vim as an embeddable component. You need to have +a recent version of Gvim or +Kvim installed for this. You can configure the +appearance of the editor as well as which vim binary to +use. + + + + + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + +Peripherals + +This section is where you would change settings related to peripheral +devices such as keyboards and joysticks. + + +Display + +Here you can modify settings to do with the size, +orientation and refresh rate of your display, and whether you would like +these settings to be applied on &kde; startup. On the Power +Control tab, you can configure your power management options for +this screen such as blanking. + + +Joystick + +This section allows you to configure your joystick and test +that it is working properly. You can also calibrate your joystick here, and +manually specify the joystick device if it is not autodetected correctly. + + + +Keyboard + +This module allows you to configure basic keyboard settings. +These include keyboard repeat delay and rate, and what state you would +prefer numlock to be on KDE startup. + + +Mouse + +Here is where you can configure settings to do with your +mouse device. You can switch the button order, reverse the scroll direction +or modify the behaviour of clickable icons. You may also preview, install +and select cursor themes. The Advanced tab allows you +to fine tune your mouse settings further. + + +Printers + + This dialog allows you to configure printers using a +variety of print systems. You can add local and remote printers, check +current jobs and look at printer properties. + + + + + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + + +Power Control + +This section has a single module, Laptop Battery. +Here you can configure the appearance and behaviour of the Klaptopdaemon +battery monitor. You can select battery icons to represent different power states, and set up +notification of certain events. In the case that your battery runs down to a critical level, you can +configure the daemon to suspend or shutdown your laptop, to save you from losing data. + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + + +Regional & Accessibility +This section is where you can configure options to do with region +and locale, and also acessibility related options for disabled +persons. + + + +Accessibility + +Here is where you can configure options for users who have +difficulty hearing system sounds or using a keyboard. You can configure the +system bell to use a visual signal, such as flashing the screen or inverting +screen colors. You can also configure keyboard accessibility options such +as sticky keys and slow keys. + + +Country/Region & Language + +This module allows you to configure options that are +specific to your location such as language, currency and date format. To +make available more languages, install the kde-i18n packages for your +distribution. + + +Input Actions + +Here is where you would configure input actions, such as +mouse gestures and keyboard shotcuts for launching applications and running +commands. + + +Keyboard Layout + +This module is where you would configure +Kxkb, a keyboard layout switching utility that +uses the &X-Window; xkb extension. It allows you to switch between different +layouts using a tray indicator or a keyboard shortcut. You can +enable/disable keyboard layouts through this dialog, and add more. Some of +the more powerful features are the ability to configure switching of layouts +globally, per application or per window. + + +Keyboard Shortcuts + +Here you can configure global &kde; keyboard +shortcuts. There are several predefined shortcut schemes you can use if you +are more used to another windowing environment, like &Windows; or +&MacOS;. If you prefer, you can customise your own scheme and modifier keys. + + + + + + + + + + + + + + +&Anne-Marie.Mahfouf; +&Anne-Marie.Mahfouf.mail; + + +Javier +Martín Diez + + +Rocco Stanzione + + + + +Security & Privacy + +This section is where you can configure options related to +security and privacy such as the use of cryptography, enabling the KDE +wallet, setting your identity and managing caches. + + +Crypto +This module allows you to configure SSl for use with most +KDE applications, as well as manage your personal certificates +and the known certificate authorities. + + +KDE Wallet + +Here you can change your KDE Wallet Manager settings. + +KDE Wallet aims to provide secure storage for passwords and web form data. +You can group different passwords in different wallets, and each one will only +be opened with a master password (which you should never forget!). The +default wallet is named "kdewallet", and you can either create a new wallet +for your local passwords or accept the default wallet for all data in +the "Automatic Wallet Selection" section. + +KDE programs like Konqueror, Kmail and Kopete are fully compatible with +the KDE Wallet Manager. All of them will ask at least once for permission to +access to actual wallet. You can give different access levels, such as "always +allow", "allow once", etc. If you want to change that access level, you can do +it from the "Access Control" tab by deleting the program entry and selecting a +new preference the next time that application requests access to the +wallet. + + + + Wallet Preferences + + To enable the KDE wallet subsystem, check the +Enable the KDE wallet subsystem box. +Unchecking this box will disable the KDE Wallet on your system. + +By default, KDE Wallet Manager is kept opened until the +user session is closed, but you can change that in the Close +Wallet section to close it when unused for a time, when a screen +saver starts or when the last application stops using it. + +As you can have several wallets, Automatic Wallet +Selection allows you start KDE with a given wallet. + +KDE Wallet will appear in your system tray by default, but you can hide +it. Uncheck Show manager in the system tray to keep it +always hidden, or check Hide system tray icon when last wallet +closes to hide it only when all wallets are closed. These items are +in the Wallet Manager section. + + + +Access Control + +You can set here what policy you want for your +KDE applications, regarding to the wallet use. + + + + + + + +Password & User Account +You can change here your personal information +which will be used in mail programs and word processors. You +can change your login password by clicking the Change +Password... button. + + +Privacy +This module allows you to erase traces which +KDE leaves on your system such as command histories or +browser caches. + + + + + + + + + + + + +&J.Hall; +&J.Hall.mail; + + + + +System Administration +This module allows you to configure aspects of your system such as +the bootloader, the kernel and helps you perform essential system tasks. Most of these +sections will require the root or Administrator password to effect changes. + + + +Boot Manager (LILO) +If you use the popular bootloader +LILO this section will allow you to configure it. +You can configure the location to install the bootloader to, set the timeout +on the LILO boot screen as well as add or modify +kernel images for the boot list. + + + + +Date & Time +This configuration module allows you to configure the system date and time +settings. You can set the date, time, and also the current time zone. These settings will be applied system-wide. + + + +Font Installer +Here is where you would configure both personal and system-wide fonts. +This dialog allows you to install new fonts, delete old ones and preview the fonts you +have installed. By default, it displays personal fonts. To modify system-wide fonts click the Administrator Mode button. + + +IBM Thinkpad Laptop +This configuration module allows you to configure the special keys on an IBM thinkpad + laptop. You will need the nvram module to use these features. + + +Linux Kernel +If you run &kde; on &Linux; there is a &kcontrol; module to create or modify +configuration files for a &Linux; kernel. This configurator is compatible with kernels previous to 2.5. + + +Login Manager +This module allows you to configure the &kde; login manager, &kdm;. &kdm; is +a powerful login manager with a large range of options. It supports user switching, remote graphical logins and has a fully customizable appearance. For more information, see the &kdm; handbook. + + +Paths +This dialog allows you to configure the default locations where certain +important files are kept. The Desktop directory contains all the files on your desktop. The Autostart directory contains files or links to files that you want run when &kde; starts, and the Documents directory is the default location &kde; applications will open or save documents to. + + +Sony Vaio Laptop +This configuration module allows you to configure features specific to +Sony Vaio laptops. If you have a Sony Vaio, you will have to install the sonypi +driver to use this section. + + + + + + + + + diff --git a/doc/userguide/creating-graphics.docbook b/doc/userguide/creating-graphics.docbook new file mode 100644 index 000000000..30407b0c4 --- /dev/null +++ b/doc/userguide/creating-graphics.docbook @@ -0,0 +1,48 @@ + + + + + + +Creating Graphics + +How to create graphics with &kde; apps.. (ok, maybe not) + + + + + + + + + + diff --git a/doc/userguide/credits-and-license.docbook b/doc/userguide/credits-and-license.docbook new file mode 100644 index 000000000..19c9b2641 --- /dev/null +++ b/doc/userguide/credits-and-license.docbook @@ -0,0 +1,315 @@ + +Credits + +&kde; is written by and copyright The &kde; Team. + + +This document is copyright 2006 The &kde; Documentation +Team. Individual credits are as follows: + + + +Tom Albers tomalbers@kde.nl + + + +Wrote . + + + + + + + +Waldo Bastian bastian@kde.org + + + +Wrote the notes which became . + + + + + + + +Gardner Bell gbell72@rogers.com + + + +Wrote . + +Wrote . + + + + + + + +Gary Cramblitt garycramblitt@comcast.net + + + +Wrote . + + + + + + + +David Faure faure@kde.org + + + +Wrote . + + + + + + + +Nicolas Goutte goutte@kde.org + + + +Wrote . + + + + + + + +&Francis.Giannaros; &Francis.Giannaros.mail; + + + + Proofreading and update on various parts. + Wrote . + Wrote . + Wrote . + Wrote . + Re-wrote . + Wrote . + + + + + + +Adriaan de Groot groot@kde.org + + + +Wrote . + +Wrote . + + + + + + + +J Hall jes.hall@kdemail.net + + + +Wrote . + +Wrote . + +Wrote . + +Wrote . + +Wrote . + +Wrote . + +Wrote . + +Wrote . + + + + + + + +&Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; + + + + Proofreading and update on various parts. + + + + + + +&Richard.J.Moore; &Richard.J.Moore.mail; + + + +Wrote the kstart and +ksystraycmd sections. + + + + + + + + +Peter Nuttall p.s.nuttall@dur.ac.uk + + + +Wrote . + + + + + + + +Steven Robson s.a.robson@sms.ed.ac.uk + + + +Took the screenshots for , , and . + + + + + + +&Philip.Rodrigues; &Philip.Rodrigues.mail; + + + +Reviewing and proofreading. + +Wrote . + +Wrote . + +Wrote . + +Wrote . + +Marked up parts of . + + + + + + + +Deepak Sarda antrix@gmail.com + + + +Wrote . + + + + + + + +Robert Stoffers robert_angie@ozemail.com.au + + + +Wrote . + + + + + + + +Juan Carlos Torres carlosdgtorres@gmail.com + + + +Wrote . + + + + + + + +Simon Vermeersch titeuf@ph34rus.org + + + +Wrote . + + + + + + +&Lauri.Watts; &Lauri.Watts.mail; + + + +Wrote the outline. + +Wrote . + +Marked up parts of . + + + + + + +Christian Weickhmann +christian.weickhmann@gmx.de + + + +Wrote . + +Wrote . + + + + + + + + + + + diff --git a/doc/userguide/customizing-desktop.docbook b/doc/userguide/customizing-desktop.docbook new file mode 100644 index 000000000..eb427d599 --- /dev/null +++ b/doc/userguide/customizing-desktop.docbook @@ -0,0 +1,365 @@ + + + + +Juan Carlos +Torres + + + + +Customizing the Appearance of your &kde; Desktop + +Changing the appearance of your &kde; desktop can be done quite easily and +flexibly by either individually controlling different parts of the visual +appearance or by using a predefined theme. This guide explains the various +customizable parts of &kde; and how to control their appearance. + + +Background +The desktop background, more commonly known as the wallpaper, allows you +to display certain images on your desktop. The settings for the background are +found in the &kcontrolcenter;, or by right-clicking +on the desktop and selecting Configure Desktop.... + +In &kde;, you have the option to use no picture, a single picture, or a +slideshow of images. If No picture is chosen to be the +desktop background, the Colors options are used instead. +You can also choose whether to use a single +background on all virtual desktops or to apply a different background for each +desktop. This is done by selecting All desktops or the +specific desktop name from the drop-down menu. + +Other background images can be downloaded using the +Get New Wallpapers button on the right or you can visit +the +Wallpapers section of the kde-look.org website. + + + +Colors +The Colors settings of the &kcontrolcenter; allow you to control the +colors that are used for various window elements, such as window titlebars, +window backgrounds, text, and buttons. You can change the color of each window +element by selecting the element from the drop down list and choosing a color +for it. You can then save your changes by clicking on +Save Scheme.... This will save your settings in a Color +Scheme file. Color schemes are text files, with a .kcsrc extension, that contain +entries for each window widget and its color, in RGB format. It is also very +easy to add color schemes that you have downloaded by clicking on +Import Scheme... and pointing to the .kcsrc file. With color schemes, you can save the +changes you have done in one convenient file or easily change to a predefined +color setting, without having to change each window element separately. + +Additional color schemes can be downloaded from the Color Schemes +section of kde-look.org. + + + +Icons +An icon theme contains the images used to represent actions, files, +devices, and applications. Managing icon themes is easily done through the Icons +module in the &kcontrolcenter;. Simply select the icon theme you want to use and +click on Apply to switch to the new theme. To install new +icon themes, all you need to do is to click on Install New +Theme... and browse to the location of the icon theme archive. There +is no need to extract the contents of the archive into a directory. In fact, the +Icons module only accepts archived icon themes. To remove an icon theme, simply +select the theme from the list and click on Remove Theme. +Note that you cannot remove the icon theme that you are currently using. You +need to switch to some other theme before the current one will become removable. +You also cannot remove icon themes that were installed by the administrator +(root) or by your distribution's +package manager. +Other icon themes can be found in the Icon Themes +subsection of kde-look.org. + + + +Splash Screen + + + + + +The default &kde; splash screen +The default &kde; splash screen + + +The splash screen is the animated image or screen that is displayed while +&kde; loads after you log in. Each user can have a different splash screen. +Changing the splash screen for the current user can be done in the Splash +Screen module of the &kcontrolcenter;. Select the splash screen you want to +use and click on Apply. You can also test what a splash +screen will look like by selecting the splash screen and clicking on +Test. Installing a new splash theme is very easy. Just +click on Add... and browse to the splash screen archive you +want to add. There is no need to extract the contents of the archive. Removing +splash screens is also easily done by selecting the splash screen and clicking +on Remove. Note that you cannot remove splash screens +installed by the administrator (root) +or by your distribution's package manager. + +Splash screen themes can be found on kde-look.org, in the Splash Screens +section. Take note that some splash screens require a specific &ksplash; +engine to be installed. + + + +Window Decorations +You can change the appearance of window borders, titlebars and buttons in +&kde; using window decorations. Some window decorations even have the capability +to apply effects such as translucency. Window decorations must be able to do all +these without sacrificing speed and performance. This is the reason why window +decorations come in source code that must be compiled, or as binary packages +that must be installed. Basically, Window decorations are plugins or small +programs that instruct &kwin;, &kde;'s Window Manager, +how to display window frames. + +In order to add a new window decoration, you need to compile it from +source code. If a binary package for your distribution or system is provided, +you simply need to install it using your distribution's package manager. Please +refer to your distribution's manual for instructions on how to do this. Once the +window decoration has been installed, it can be accessed in the Window +Decorations settings in the &kcontrolcenter;. In the +Window Decoration tab, +a list of installed window decorations can be seen in the drop down box. Simply +select the decoration you want to use and click on Apply. +Different window decorations have different capabilities and settings. Play +around with the different options available. The Buttons tab allows you to +control the buttons on the window titlebar. Enable the Use custom +titlebar button positions check box in order to rearrange, remove, or +add buttons. To add buttons to the titlebar, drag an item from the list to the +titlebar preview above it. To remove a button, drag the button from the titlebar +preview to the item list. Simply drag buttons in the titlebar preview to +rearrange them. + +While all window decorations need to be compiled from source code, some +window decorations can load pixmap-based theme files that do not need to be +compiled. &kde; ships with a pixmap-based window decoration called the IceWM +window decoration. Another pixmap-based window decoration is deKorator, +which can be found on kde-look.org. Please refer to your distribution's +documentation on how to install these. The advantage of using pixmap-based +window decorations is it is relatively easy to make themes for them, by using +images and editing a configuration file. The tradeoff is a slight loss of performance, +while this may be unnoticeable on very fast systems. + +To add an IceWM theme, select IceWM as the window decoration and click on +the Open &kde;'s IceWM theme folder link in the window +decoration description area. This will open a &konqueror; window +to $KDEHOME/share/apps/kwin/icewm-themes. +Extract your IceWM theme to this folder. The theme will then be added to +the list of IceWM themes. Select the theme you want to use and click on +Apply. + +To add a deKorator theme after you've installed deKorator, select +deKorator from the window decorations list and go to the Themes +tab. Click on Install New Theme and locate +your deKorator theme archive. Make sure that the version of the deKorator theme +matches the deKorator version installed on your system. Once the theme has been +added, select the theme you want to use and click on Set Theme +Paths. Click on Apply for the changes to +take effect. + +Some more window decorations are available at kde-look.org under the +Native &kde; 3.x and the +Native &kde; 3.2+ subsections. Themes for the IceWM and +deKorator window +decorations have their own subsections under the Window Decorations +category. + + + +Style +Widgets are the basic elements of a graphical user interface, such as +buttons, scrollbars, tabs, and menus. A widget style is a plugin or a small +program that instructs &kde; how widgets are displayed. Since widgets are the +very basic parts of an interface, they are frequently accessed and must be able +to respond very quickly. This is why widget styles must come as source code to +be compiled or as binary packages to be installed, just like window decorations. +Please refer to your distribution's documentation on how to compile from source +or install binary packages. + +Once a widget style has been installed, it will be added to the list of +available styles in the Style module in the &kcontrolcenter;. +The Style tab allows +you to select a widget style from the list and to configure it if the style has +a Configure... feature. Different styles have different options. A preview of the +selected style is available at the lower portion of the tab. The +Effects tab +controls different visual effects for some widgets like comboboxes and tooltips. +The Toolbar tab gives some options on the general appearance of toolbars. + +Additional widget styles can be found in the different &kde; subsections of the +Themes/Styles of kde-look.org. Take note that styles come in source +code or binary package forms. They are not &kde; theme files. + + + +&kde; Theme +&kde; allows you to save the different changes you made to your desktop's +appearance in one file, using the Theme Manager in &kcontrolcenter;. Once you +have set up your desktop the way you want, click on Create New +Theme.... Enter the details you want to give your theme, such as theme +name, author, version, &etc;, then click OK when done. +This will add your theme to the list of available themes and save your settings +in a &kde; theme. A &kde; theme (.kth file) +instructs &kde; on what window decoration, style, or color scheme to use for +that particular theme. To add a &kde; theme from an outside source, click on +Install New Theme... and locate the &kde; theme file. +Removing a theme is easily done by clicking on Remove +Theme. If you made changes to your theme, you have to either create +a new theme name for it, or remove the previous version first to be able to use +the same theme name. + +The following are the settings that are saved and indicated in a &kde; +Theme: + + + +Background + + + +Screen Saver + + + +Icon Theme + + + +System Notifications + + + +Color Scheme + + + +Cursor Theme + + + +Window Decoration + + + +&konqueror; background (File Management) + + + +Panel background + + + +Style + + + +Fonts + + + +One very important thing to consider when using or installing a &kde; +Theme is that it only indicates what settings to use for the above. A &kde; +Theme includes only system notifications, desktop background, panel background, +&konqueror; background, and the color scheme in its package. The other +components must be installed separately if they do not already come with +&kde;. + +&kde; Themes can be downloaded from the Theme-Manager +subsection of +kde-look.org, under the Themes/Styles section. + + + +Glossary + + + +Background +Background/wallpaper image or color for the +desktop + + + +Color Scheme +(.kcsrc) +Configuration file that indicates what colors to use +for certain widgets + + + +Icons +Images representing applications, files, +devices, &etc; + + + +Splash Screen +Animated image or screen that displays while &kde; +loads after logging in + + + +Window Decoration +Plugins or small programs that instruct the window +manager how to display window frames + + + +Style +Plugin or a small program that instructs &kde; +how widgets are displayed + + + +&kde; Theme +(.kth) +A file that contains instructions on what settings to use for +different GUI components + + + +Widgets +Basic elements that build up a graphical user +interface: buttons, scrollbars, menus, tabs, &etc; + + + + + + + + + diff --git a/doc/userguide/desktop.png b/doc/userguide/desktop.png new file mode 100644 index 000000000..c5e683f61 Binary files /dev/null and b/doc/userguide/desktop.png differ diff --git a/doc/userguide/email.docbook b/doc/userguide/email.docbook new file mode 100644 index 000000000..04e95c9b2 --- /dev/null +++ b/doc/userguide/email.docbook @@ -0,0 +1,254 @@ + + + + + +&Daniel.Naber; + + +&David.Rugge; + + + + + + +Getting Started with Email + +Emailgetting +started + +&kmail; + +&kde; features a powerful and easy-to-use email client called +&kmail;, which allows you to send, receive, and organize your email +quickly and efficiently. Let us look at how to set it up. If you have +any problems with this procedure, refer to the full &kmail; manual. + + +Information you will need before you start + +Many email settings can vary greatly depending on the setup of +your system, your ISP's configuration, or your local network +setup. You will need to find out some information before you can start +setting up your email: + + + +Your email address +This should be provided by your ISP or system administrator. + + + +Your username and password for your email account +The username is often the same as the part before the +@ symbol in your email address, but not always: check +with your ISP. + + + + + + +EmailSMTP +server +Your outgoing email (SMTP) server name and +details +Again, your ISP should have provided +you with this information. If not, you can try the form smtp.your-isp-name.com. + + + + + +EmailIMAP +server + +EmailPOP3 +server + +Your incoming email (IMAP or +POP) server name and details +If you do not have this information to hand, you can +try imap.your-isp-name.com +for IMAP or pop.your-isp-name.com +if you use POP3. + + + + +Once you have that information, you are ready to start setting +up &kmail;. Open &kmail; from the K menu (you can +find it in the Internet submenu, or use one +of the methods described in .) Once +&kmail; has opened, select the menu entry +SettingsConfigure KMail... +. The next sections describe how to use the dialog that +appears to set up &kmail;. + + + + +Setting your Identity + + +The settings in the Identities page are fairly +straightforward. Select the default identity and +click Modify.... Fill in the Your +name field with your full name (⪚ John +Doe) and, optionally, the +Organization field with the appropriate +information. + + +Next, fill in the Email address field with +your email address (⪚ john@example.net). + + +That is all for this dialog unless you want to use the more +advanced features (cryptography, a signature, &etc;). You can find +more information about these features in the full &kmail; +manual. Click on the OK button to close this +dialog, and move on to the next configuration page... + + + + +Setting up your Account + +Click on the Network icon to move to the +network configuration page. It contains the settings that +tell &kmail; how to send and receive your email messages. You will see +two tabs on the right-hand side: Sending and +Receiving. You need to set up both, so let us look +at them each in turn: + + +Sending Messages + +Emailsending + +The Sending tab provides a list of +ways to send messages. The first item in the list is the default +way to send messages. Using the Add... +button you can choose between two different ways of sending messages: +SMTP and +Sendmail. &Sendmail; here +means a local software installation — this has a +reputation of being difficult to set up, so if you do not already have a +working &Sendmail; configuration, choose +SMTP and fill in the Name +field with a descriptive name +(⪚ My Mail Account) +and the Host +field with the name and domain of your mail server +(⪚ smtp.provider.com). You will probably +not need to change the Port setting (the default is +25). + +A description of the other options can be found +in the full &kmail; manual. Click on OK to +close this dialog, and then click on the +Receiving tab. + + + + +Receiving Messages + +To set up an account so you can receive mail, press the +Add... button in the +Receiving tab. You will then be prompted for the +type of your email account; most users should select +POP3 or IMAP. If you wish to +use a different system, consult the &kmail; manual. + +You will then be presented with +the Add account window. First, fill in the +Name field to name your account. You can choose any name +you like. Login, Password, and +Host should be filled in with the information you +gathered earlier. You should not usually need to change the Port setting. + +You are now ready to send and receive mail. For +IMAP, just open your folders in the +folder tree in &kmail;'s main window. &kmail; then connects to your +server and displays the messages it finds. For POP3 use +FileCheck +Mail. + + + + + + +Testing your Setup + +Emailtesting + +First, you should send yourself a message to test your +configuration. To send a message, either hit &Ctrl;N, select the +New Message icon or select +the MessageNew +Message... menu item. The +composer window will appear. Fill in the +To: field with your email address and type +something in the Subject field. Send the message by +selecting Message Send +. + +To check your email, select +FileCheck +Mail. In the lower-right corner of the main +window, a progress bar will indicate how many messages are being +downloaded. If you receive the message you just sent, then +congratulations! If, however, you receive any error messages while +testing your setup, make sure that your network connection is working +and recheck your settings at +Settings Configure +&kmail;.... + + + +Related Information + +The &kmail; Handbook has full descriptions of advanced +email settings and so on. You can read it in the &khelpcenter; or by +entering help:/kmail in &konqueror;'s +Location bar. + + +The &kmail; website at http://kmail.kde.org contains +latest news, tips and tricks, and plenty more. + + + + + + + + + + + diff --git a/doc/userguide/extragear-applications.docbook b/doc/userguide/extragear-applications.docbook new file mode 100644 index 000000000..fd55985aa --- /dev/null +++ b/doc/userguide/extragear-applications.docbook @@ -0,0 +1,199 @@ + + + + + +&Francis.Giannaros; +&Francis.Giannaros.mail; + + + + +&kde; Extragear Applications + +These are applications that are directly associated with &kde;, the project, but do not appear and are not shipped with the main &kde; distribution. This can be down to a number of reasons, but a common case is either down to a duplication of functionality, or because they're simply too specialised. Perhaps the most popular occurence however is that the developers themselves may not want it to appear in the main &kde; distribution; choosing, rather, to handle their own release schedules. Nevertheless, the applications in Extragear are distinguished by &kde;, and many are increasingly popular. + + +Available in the &kde; Extragear + + + +Multimedia + + + +&amarok; + An advanced and comprehensive music player with the capability to play MP3, WAV, and OGG audio filetypes and others. There is not room here to mention all of &amarok;'s features, but by default, &amarok; can automatically fetch cover art, embed song lyrics, and display aesthetically pleasing visualizations. &amarok; remains, as much of &kde; does, highly customizable; it contains a powerful scripting interface, and the context browser can be stylised easily using &CSS;. &amarok; also supports several backends, including GStreamer, xine, NMM, MAS, aKode and &arts;. + + + Website: http://amarok.kde.org + View the handbook by typing help:/amarok in &konqueror;'s Location Toolbar, or by selecting it in &khelpcenter;; if you do not already have &amarok; installed (and hence do not have the handbook), then you can view it online here. + + + + + + + + + +K3b + The definitive &CD;/DVD burning application for &kde;. With K3b you can create data, video, and audio (it comes with plugins for WAV, MP3, FLAC, and Ogg Vorbis) &CD;s. Projects can be saved and loaded, &CD;-ripping is supported, and you can appropriately make &CD;/DVD copies. + + + Extragear Summary: http://extragear.kde.org/apps/k3b/ + Website: http://k3b.org + K3b Handbook + + + + + + + + + + +Graphics + + +&digikam; + A photo management application which can conveniently organize and import digital photos. Features include complete tagging functionality, a plugin system, and a fully-featured comment system. &digikam; also makes use of KIPI (&kde; Image Plugin Interface), therefore contributing to the initiative to create a common plugin infrastructure, which allows development of image plugins that can be shared among graphical applications in &kde; (others include Gwenview, ShowImg and KimDaBa). + + + Website: http://digikam.org + &digikam; Handbook + + + + + + +Gwenview + Another advanced image viewer which can load and save all image formats supported by &kde;, as well as being able to display the GIMP (*.xcf) image filetype. Gwenview can perform a few graphical manipulations (rotate, mirroring) and has full support for KIO slaves (allowing you to use it via &FTP;). Other features also include file management operations, such as copy, paste, move and delete. + + + Website: http://gwenview.sourceforge.net/ + Gwenview Handbook + + + + + + + +ShowImg + A feature-rich image viewer, written for &kde;, which can display numerous formats, including JPEG, PNG, [animated] GIF and MNG. It consists of a tree-view frame, a directory/preview frame, and a view frame. The (larger) view frame can be exchanged with the (smaller) directory/preview frame. It can preview and display images from multiple directories and search for identical images. ShowImg also features a full-screen mode, zooming, sorting, drag and drop with &konqueror;, and support for images in compressed archives. + + + Website: http://www.jalix.org/projects/showimg/ + ShowImg Handbook + + + + + + +KimDaBa + KimDaBa (&kde; Image Database) attempts to provide an efficient solution for the organization of hundreds (or even thousands) of images. Having been highly optimized for annotating images, KimDaBa can help you locate an image in a matter of seconds. + + + Website: http://ktown.kde.org/kimdaba/ + KimDaBa Handbook + + + + + + + + + + + +Network + + +&konversation; + A fully-featured IRC client which supports per channel encoding, downloading and resuming file transfers, nick completion and highlighting, as well as tight integration with &kontact; and the rest of &kde;. + + + Website: http://konversation.kde.org + &konversation; Handbook + + + + + + +KMldonkey + A &kde; frontend for MLDonkey, a powerful P2P file-sharing tool. Highly configurable, real-time graphical bandwidth and network statistics, and much more. + + + Website: http://kmldonkey.org/ + KMldonkey Handbook + + + + + + +KNemo + Displays for every network interface an icon in the systray. Tooltips and an info dialog provide further information about the interface. Passive popups inform about interface changes and a traffic plotter is also integrated. + + + &kde;-apps entry: http://www.kde-apps.org/content/show.php?content=12956 + + + + + + + + + + + +Utilities + + +Filelight + A simple, yet ideal, application for graphically displaying where your diskpace is being used. Filelight displays this information by representing your filesystem as a set of concentric segmented-rings. + + + Website: http://www.methylblue.com/filelight/ + Filelight Handbook + + + + + + + +Krecipes + A &kde; recipe tool that can manage a recipe database with an easy-to-use interface. Full support for creating and removing ingredients as well as units; helps with diets, can calculate the amount of calories, vitamins, carbohydrates etc. Other advantages are its flexilibity and potential to extend further. + + + Website: http://http://krecipes.sourceforge.net + Krecipes Handbook + + + + + + + + + + + +Related Information + +Related Information and Links + It should be stressed that the above is but a preview of what is available in the &kde; extragear. To view all of the applications and utilities available there visit http://extragear.kde.org, where a briefer summary of each application is provided. + The handbooks for the majority of applications in extragear can be viewed from http://docs.kde.org. + Once again, you can find a plethora of other [third-party] &kde; applications at the popular http://kde-apps.org. + + + + \ No newline at end of file diff --git a/doc/userguide/file-sharing.docbook b/doc/userguide/file-sharing.docbook new file mode 100644 index 000000000..395e7b9e2 --- /dev/null +++ b/doc/userguide/file-sharing.docbook @@ -0,0 +1,109 @@ + + + + + +&Lauri.Watts; + + + + + +File Sharing + +How to share files with &kpf; + +File sharing +Shared Folders + +&kpf; provides simple file sharing using &HTTP; (the Hyper Text +Transfer Protocol,) which is the same protocol used by web sites to provide +data to your web browser. &kpf; is strictly a public fileserver, which means +that there are no access restrictions to shared files: whatever you select +for sharing is available to anyone. + +&kpf; is designed to be used for sharing files with friends, not to +act like a fully-fledged web server such as +Apache. &kpf; was primarily conceived as an easy +way to share files with others while chatting on IRC +(Internet Relay Chat, or chat rooms.) + +&kpf; runs as an applet inside &kicker;. This means that it takes up +little space on your screen and its status is always visible. To start the +&kpf; applet, right click on &kicker; and choose +Add Applet to Panel... to open the Add +Applet dialog. Select Public File Server and +click the Add to Panel button. + +&kpf; employs the concept of shared folders. You may choose one or +more folders to make public, and all files in that folder (and any +subfolders) will be shared. + +Please be extremely careful about which folders you share. Remember +that all files in the folder and its subfolders, including +hidden files (dotfiles to the techies) will be +made available to the world, so be careful not to share sensitive +information, such as passwords, cryptographic keys, your addressbook, +documents private to your organization, &etc;. + +Once &kpf; is running, you will see a square applet with a thin sunken +bevel and an icon depicting an hot air balloon. The +balloon is visible when no folders are being shared. + +To share a folder, right click on the +balloon icon and a pop-up menu will appear, containing only one item, +New Server.... Selecting this entry will cause a +wizard to appear, which will ask you a few simple +questions. Completing the questions will set up a folder for sharing. + +There is an alternative to using the applet directly when you want to +share a folder. &kpf; is integrated with &konqueror;. + +With &konqueror; open and displaying a folder, +right click on the background and bring up the +Properties dialog. On install, &kpf; added a +Sharing tab to this dialog. You will be offered the +option of starting &kpf; if it is not running. Choosing +Ok will send a signal to the &kpf; applet, asking it +to add a new share. + +For more detailed information, such as how to share different +directories to different people, see the &kpf; handbook. + + + + + + + + + + diff --git a/doc/userguide/font-installation.docbook b/doc/userguide/font-installation.docbook new file mode 100644 index 000000000..bca1a2308 --- /dev/null +++ b/doc/userguide/font-installation.docbook @@ -0,0 +1,79 @@ + + + + + + +Simon +Vermeersch + +titeuf@ph34rus.org + + + + +Fonts - Installing and Configuring + +Fonts + +Fonts are really easy to configure in &kde;. Open up the Control +Center (with K-MenuControl +Center) and choose +Font Installer in System +Administrationin the tree view. + +There are two kinds of fonts: Personal and Global fonts. +Personal fonts are only accessible to your user, whereas global fonts are +accessible to everyone. When you open the Font +Installer, you're in Personal mode (you can see this in +the Location bar). When you click on the Administrator Mode +button, and put the root password, +you can access global mode, where you can change the fonts for every user on +this computer. + +For the rest, there is no difference between those two kind of fonts. + +Fontspreviewing + +There is a list of fonts in the center. Click on a font to see a preview. +In the toolbar on the top you have buttons to access the top directory, +refresh and change the view. + +If you want to, you can organise your fonts in multiple directories, so that +you can easily find them later. + +Fontsinstalling + +To install a font, click on the Add +Fonts... button. A file open dialog will appear where you can +choose your font. + +Alternatively, you can drag fonts from &konqueror; to the +list. To remove a font, right click on it and +choose Delete. + + + +Configuration (anti-aliasing) + +kfontinst and kfontview should probably get a mention too, since +they don't seem to have any existing docs. + + + diff --git a/doc/userguide/getting-help.docbook b/doc/userguide/getting-help.docbook new file mode 100644 index 000000000..c3a872c7c --- /dev/null +++ b/doc/userguide/getting-help.docbook @@ -0,0 +1,213 @@ + + + + +&Lauri.Watts; + + + + + +Getting Help + + +User Manuals + +User Manual +Most applications come with a comprehensive user manualUser ManualHandbook, which you can +reach various ways: + + + +By pressing F1 inside the application. + + +From the menu bar: +HelpApplication name + + + +By browsing to it in &khelpcenter;&khelpcenter; + + +By using the help KIOslave in &konqueror;. So, in the Location Toolbar, simply type help:/Application name + + + +Online at http://docs.kde.org + + + + + + +Context and <quote>What's This</quote> Help + +Many applications also provide context help in two forms: +Tooltips, and What's This help. + + +Tooltips + +Tooltips +Tooltips are small informational windows or balloons that display when +you hover the mouse over an item on your screen without clicking. + +&kde; uses tooltips in many places to provide brief help or +information about an item on your screen. For instance, most toolbar buttons +inside applications will display their name in a tooltip if you rest or hover +your mouse over them. + +Tooltips have another function, which is not specifically tied to +help. In the &konqueror; file manager and on your Desktop, tooltips can +provide information about files. This is commonly referred to as meta information. + +You can find out more about meta-information tooltips in the section +about the &konqueror; file manager. + + + + +<quote>What's This?</quote> + +What's This? + +What's This? help is usually more detailed than tooltips. +You can access What's This? help in two ways: + + + +By pressing the ? button in the titlebar of the +window. + + +By pressing the key combination +&Shift;F1 + + + +The cursor will change to a pointer with a question mark next to it. +Click on the item you want to know about, and a small window will +pop up displaying information. + + + + + +Mailing Lists, Newsgroups and <acronym>IRC</acronym> + + +Mailing Lists + +Mailing Lists +&kde; provides many mailing lists which can provide you with help +and guidance in using and configuring your Desktop. + +Some of the lists you might find useful are: + + + +The &kde; User List +&kde; User Mailing List + +This mailing list focuses specifically on OS-independent questions +and discussions regarding using &kde;. Operating-system-specific questions and +discussion are off-topic here. For +example, the question How do I change the margin size for KWord +documents is appropriate for this list; whereas How do I set +up my printer using &kde; under UnixOS X.Y is not. Questions asked and +discussions here should apply to all &kde; users using the applicable &kde; +software, not just those using the same operating system. +You can subscribe to this list at https://mail.kde.org/mailman/listinfo/kde. +You can find archives at http://lists.kde.org/?l=kde. + + + + +The &kde;-&Linux; List +kde-linux Mailing List + +This mailing list focusses specifically on questions and discussions +regarding using &kde; on &Linux;. Questions and discussions can involve any +issue confronting desktop users who run &kde; on a &Linux; system. Hence, +questions such as How do I setup a networked printer for printing from +&kde; on LinuxDistro X.Y are appropriate here. If you prefer a list +limited to OS-independent questions and discussions +concerning &kde;, please use the general &kde; mailing list. +You can subscribe to this list at https://mail.kde.org/mailman/listinfo/kde-linux. +You can find archives at http://lists.kde.org/?l=kde-linux. + + + + + + +IRC + +There is a #kde channel on Freenode (irc.freenode.net) for support and other general talk about &kde;. As usual, you can access this channel by using any of &kde;'s popular IRC clients which include konversation, &ksirc;, as well as &kopete;. For more information, check the section. + + + + + + +More Resources + +There are many other resources which you may found useful; some of these are listed below: + + + +dot.kde.org +&kde; News Resource + +This website has a searchable &kde; news resource where you can find out about a superfluity of innovations in the world of &kde;. + + + + + + +kde-look.org +icandy for &kde; + +The paramount resource for &kde; icandy, including themes, window decorations, wallpapers, mouse themes and icons for your &kde; desktop. Note also that the site contains a howto section on how to install the most common of these. + + + + + + +wiki.kde.org +&kde; wiki + +The official &kde; Wiki. From here you can have access to a plethora of information ranging from frequently asked questions and HOWTOs to tips and tricks. The wiki should never, however, be used as a substitute for the respective application's handbook or the official &kde; documentation. + + + + + + + + + diff --git a/doc/userguide/glossary.docbook b/doc/userguide/glossary.docbook new file mode 100644 index 000000000..1e4b85d74 --- /dev/null +++ b/doc/userguide/glossary.docbook @@ -0,0 +1,38 @@ + + + + + + +Glossary of Terms + +KDE/GUI/UNIX terms that are worth explaining. + + + + diff --git a/doc/userguide/groupware-kontact.docbook b/doc/userguide/groupware-kontact.docbook new file mode 100644 index 000000000..beaf1f338 --- /dev/null +++ b/doc/userguide/groupware-kontact.docbook @@ -0,0 +1,614 @@ + + + + + + +Marco +Menardi + +gnu@kde.org + + + + + + +Sharing data with &kontact; via <acronym>IMAP</acronym> + + +Introduction + +For my small office, I was looking for a long time for a +PIM solution that let me share data, so my secretary and +I can share contacts, appointments and so on. Being a &kde; user, I've heard +about the Kroupware project and wait its completion. But when I saw how +complicated is the architecture and setup of the +Kolab server 1.0 (the server side of the +project), I gave up, waiting for an easier to deploy +Kolab 2.0. In any case, the +Kolab stuff was clearly too much for my +needs. Fortunately in the &kde; wiki I've found some piece of +IRC conversation where they were talking about sharing +data without the Kolab infrastructure... mmm so +interesting! + +For small offices and needs, you can have &kontact; use shared data +without the need of installing the Kolab server +or another groupware backend. It can work with just an +IMAP server, that can be easily set up. + +My scenario is a server with Debian unstable and &kde; 3.4. I access +&kontact; and other fabulous GNU/Linux apps from windows using Cygwin/X, +while waiting Wine project to be able to run the last Windows programs I +need (and that are not available under GNU/Linux). I want to share contacts, +events, todo, notes with my secretary. + + + + +What is <acronym>IMAP</acronym> + +This definition is from the ComputerUser.com High-Tech Dictionary: +
Internet Message Access Protocol. A protocol that allows a +user to perform certain electronic mail functions on a remote server rather +than on a local computer. Through IMAP the user can create, delete, or +rename mailboxes; get new messages; delete messages; and perform search +functions on mail. A separate protocol is required for sending mail. Also +called Internet Mail Access Protocol.
+ +So it can be considered a data storage. To use it you you need an +IMAP server, such as Cyrus, +Courier or UW. + +
+ + +<application>Kolab</application> or <acronym>IMAP</acronym>? + +Kolab brings the ability to share data +between different clients. It makes possible for your secretary to use +Outlook and you use &kontact;, for +instance. + +You will have a configuration interface which does user management, mail +account setup, a central LDAP config data and addressbook +server, spam and virus filtering, vacation scripts, free busy list handling, +resource handling (rooms, cars), groups, distribution lists, automatic +invitation handling, &etc; + +But that can cause initial setup troubles. For a newbie like me it +means: a long long frustrating nightmare, and too much complexity to manage +once working. So no, thanks, I'll go to simple +IMAP. + + + + +How to set up <acronym>IMAP</acronym> server <application>Cyrus</application> + +My choice is Cyrus, that is part of the +Kolab set of software, so if l will go for +Kolab in the future, at least I'm acquainted with +it. Let's start the installation and the setup! + +Become root. + +# apt-get install cyrus21-imapd cyrus21-common cyrus21-admin cyrus21-client sasl-bin sasl2-bin +Installing cyrus21-imapd...The installer asks something I've not understood about an search address... I just pressed Enter. + +The installer also created the user cyrus that is in the (automatically created) +group sasl, that is the +owner of all cyrus files. At the end with ps + you can find the new processes: +cyrmaster and notifyd. + +The real problem in setting up Cyrus is the +authentication, just because it's not trivial and I'm a newbie, with limited +knowledge about what I'm doing. + +Cyrus can use different +SASL (Simple Authentication and Security Layer) +mechanisms, the default being sasldb (it stores usernames and passwords in +the SASL secrets file sasldb), but also getpwent, +kerberos4, kerberos5, PAM, rimap, shadow and LDAP are supported. + + Since I don't want to define users/passwords different than the ones +that access my &Linux; box I choose then shadow mechanism so +Cyrus will use &Linux; passwords for +authenticate. + +To do so we have to tell sasl to use saslauthd as +password authentication method, and then setup saslauthd +to use shadow (or getpwent) as the +authentication mechanism. + +OK, let's start! + +As root, change the Linux +password of cyrus user: + +# passwd + +Enter the password you like (and you will remember) we will use for +this example cyrus as the cyrus +administrator password. + +# vi /etc/imapd.conf + +sasl_pwcheck_method: saslauthd instead of the default auxprop + +remove the # remark from the line: + +#admins: cyrus + +this way you can administer cyrus logging +in as cyrus user (what a fantasy I +have!) + +# vi /etc/default/saslauthd + +Uncomment the line: + +# START=yes + +(otherwise the saslauthd will not start at +boot time, even if referenced in some /etc/rcx.d!) + +and instead of MECHANISMS="pam" put +MECHANISMS="shadow" this way at the boot a +saslauthd will be executed. + +Once exited from your editor, restart sasl +and cyrus. + +To test IMAP: + + su +$ imtest + +You are prompted for the cyrus (user) password, so enter it. + +If the user cyrus is +correctly authenticated, the following lines will appear: + +S: L01 OK User logged in +Authenticated. +To exit type . logout (&ie; dot space logout) + +Now add a user named groupware and set a password for it, using +your usual system tools. It should be in an unprivileged group such as +nobody and does not require a +login shell or a home directory. + +Now I have to create the user and an IMAP in +cyrus also: + +# cyradm +after entering the password for the admin user cyrus, you get the prompt localhost> +localhost> cm +localhost> lm lists the mailbox only just created +user.groupware (\HasNoChildren)) +localhost> quit + +You can type help for a list +of available commands. + +You can check what has happened with: + +# ls /var/spool/cyrus/mail/g/user/groupware +total 12 +-rw------- 1 cyrus mail 4 Oct 29 20:55 cyrus.cache +-rw------- 1 cyrus mail 155 Oct 29 20:55 cyrus.header +-rw------- 1 cyrus mail 76 Oct 29 20:55 cyrus.index + +Now you should be able to connect with an IMAP client +as the groupware user and see the +INBOX. +In the IMAP protocol, selecting the mailbox +INBOX is a magic word, a sort of alias for +the above directory structure. The client sees INBOX, and +the IMAP server maps it in the /var/spool/cyrus/mail/... folder and file +structure. + + + + +How to setup &kontact; clients + +I connect to my GNU/Linux office server PC (a sort of "black box" +without monitor and keyboard) from 2 &Windows; 2000 PC with +Cygwin/X, using them as a X-Window server (in the +near future I hope to replace both with 2 mini-itx thin clients using the +LTSP). With this setup every user runs &kontact; on the same machine where +Cyrus is installed and running +(localhost). + +To have &kontact; work with IMAP, there are these +steps to complete: + + + +Create an IMAP account on the +Cyrus for fake groupware user (already previously +done!) + +Create/configure an IMAP account in &kmail; +for login as that user Use kresources to make +&kontact; components work with data taken from IMAP +source + +Enable groupware functionality and make related subfolders of +that IMAP INBOX (if not +already) + +Enjoy &kontact; and shared data through +Cyrus IMAP + + + +So login to &kde; with the first real user account you +want to provide groupware functionality to. + +Let's create the IMAP account in &kmail;. + +Run &kontact; and select Mail (the &kmail; +component). From the menu choose +SettingsConfigure KMail +AccountsReceiving tab, press the Add... button. You will then be +prompted for the type of your email account, and select +disconnected IMAP (not just +IMAP). Then in the General tab +enter the following data: + + + +Account Name: office_gwdata + +A name that will be used for the local folder that +points to this IMAP account. + + + +Login: groupware + +The Cyrus user we have chosen as +owner of all of the office data + + +Password: + +The password of the groupware user. + + + +Host: localhost + +Remember for our example, the &kontact; client runs on the same +computer as the IMAP server + + + +Port: 143 + +The default + + + + +Check store IMAP password +so you will not be asked for it next time you run &kontact;. Check the +Enable interval mail checking and set a value in +minutes. + +Note that we have checked the disconnected IMAP +type account. This has the effect that a copy of the groupware data is +stored locally to the client (under the home folder), and it +is synchronized every time the client connects. This seems very inefficient, +since your data is duplicated many times (&ie; if you have 10 users that use +&kontact;, you have 10+1 times the data), but it is the only way to make +things run fast, because at every connection &kontact; has to fetch all data +and have &korganizer; and &kaddressbook; interpret it. If you use +disconnected IMAP data is cached locally, and only the +delta (&ie; the data that has changed) is sent. + +On the other end, if your users run &korganizer; on the same PC that +runs the IMAP server, it seems reasonable to use +IMAP (that is called online IMAP) to save +space, since transfer speed should not be an issue. But unfortunately this +does not work because &kontact; does not update automatically the +Calendar folder in online IMAP, so you +are not updated when someone adds events (you must manually switch to +&kmail; application and click on the Calendar +folder). In addition, at start up when it does read +Calendar folders, you may see a tremendous flicker and +slow data updates. + +Now we have to tell &kontact; to use IMAP as the +data source for it's various components. From the &kmenu;, choose +Run command, run kcmshell +kresources. In the combo box select +Contacts, then press the Add... +button, and choose Addressbook on IMAP Server via KMail. Then select that new line and +press Use as Standard button. Do the same for +Calendar and Notes. + +Now we have to enable the &kmail; (and as a consequence, the whole +&kontact;) groupware functionality: + + + +Choose from the menu +SettingsConfigure +KMailMiscGroupware + + +Check Enable IMAP resource functionality + + +Choose English as Language of the +groupware folders (this is in case you already have the folders +in the IMAP server created by a different program in a +different language). + + +Now move to Resource folder are in account and +select the the Inbox subfolder of the +office_gwdata folder. +Leave Hide groupware folders unchecked for now, +so we can see that happens. You can return here and check it once everything +is clear. + + +When you press OK you are prompted with: +&kmail; will now create the required folders for the IMAP +resource as subfolders of Inbox +If you do not want this, press No, and the +IMAP resource will be disabled. Press +Yes (this happens only the first time with the first +real user). You will immediately see that in the &kmail; +folder tree, under +office_gwdataInbox +these subfolders are created: + +Calendar +Contacts +Notes +Tasks +Journal + +if you now do a: +# ls +drwx------ 2 cyrus mail 144 Oct 31 16:36 Calendar +drwx------ 2 cyrus mail 144 Oct 31 16:36 Contacts +drwx------ 2 cyrus mail 144 Oct 31 16:36 Journal +drwx------ 2 cyrus mail 144 Oct 31 16:36 Notes +drwx------ 2 cyrus mail 144 Oct 31 16:36 Tasks +-rw------- 1 cyrus mail 4 Oct 31 15:28 cyrus.cache +-rw------- 1 cyrus mail 155 Oct 29 20:55 cyrus.header +-rw------- 1 cyrus mail 76 Oct 31 15:28 cyrus.index + +As you see, the office_gwdata Inbox is stored not +local to the &kontact; current user home, but in the IMAP +groupware user's folders. + + + +Now &kontact; is ready to work and store data there. In the calendar +application, if &kmail; IMAP account was of type +disconnected, the resource window should +display the item Imap resource with 3 subitems, that +are paths to local home files. Instead, the Contacts +application does not show subitems below the Imap +resource. + +You can now login to &kde; with a different username and set up +his/her &kontact; client in a very similar manner: + + + +Open &kontact; and in the Mail component add an +IMAP account specifying as host the +computer where Cyrus server runs (in my case: +192.168.1.3). + +Remember to check the Enable interval mail +checking and set a value in minutes. When you confirm, you are +not prompted for the subfolder creation (since they are found in the +IMAP server), and you see them in the folder tree. + + +Activate the groupware functionality to be able to save data in the +IMAP server. + + +Beware that in disconnected IMAP, +data are transmitted from a client to IMAP server only +when the clients connects to check for new mail. So if you have your +&kontact; clients with an interval mail checking of, +for instance, 5 minutes, in the worst case you have a 10 minutes delay +between the event being written and it's appearance to the other +users. + + +How to have Read Only Access + +Beware that I've been confirmed that Notes +IMAP implementation in &kontact; prior to version 1.01 is +broken, so this setup will not work for them, so you want to use them, you +need to use the previous setup. + +In the previous setup, we have the same fake user, named +groupware, that is used by all the +real &kontact; users (&ie; tony, rohn, amanda, &etc;) through the +IMAP account with it's login and password. But this way +every real user has the same read/write permissions of the others, since +everyone connects as the user groupware to the IMAP +server. + +To limit access to some users (typically, providing read-only access), +we can use the ACL (Access Control Lists). + +Select in &kmail; a subfolder of office_gwdata +inbox, for instance Calendar, and right click the +mouse. Select PropertiesAccess +Control tab. Here you can enter the users you want give access to +this folder and what they can do. + +Just to experiment trying to exchange events, we give +All permission to the user mary + +At cyrus level (in the +PC that runs IMAP server cyrus, with +cyrus tools), we first need to add the user +mary, so it's an +IMAP recognized user, and create an +IMAP folder for her. + +Then we login to GNU/Linux as mary and enter &kontact;. As previously shown, +we will setup an IMAP account in &kmail; with the same +data but the one of the user (instead of the fake user groupware and it's password, we will use +mary and her password). + +In &kmail; folder tree, this time you will see this structure: +office_gwdatauser +groupwareCalendar and +Tasks. Check the mail +(FileCheck +Mail) and you will also have an +inbox folder under office_gwdata. + +Now enable &kmail; groupware functionality, and in Resource +folders are subfolders of put the +inbox that is subfolder of +office_gwdata. + +Now enable &kmail; groupware functionality, and in Resource +folders are subfolders of put the +inbox that is subfolder of +office_gwdata. + +Now you have two branches of folder under +office_gwdata: + + + +inbox with Calendar, Contacts, Notes, Tasks and +Journal, that are saved on mary +IMAP folders on the IMAP server + + +user, with the subfolder groupware and +the subfolders to which mary has +access to (in this example, Calendar and Tasks) + + +&RMB; click on the user Calendar and +check if it's of type Calendar (if not, set it to be), and also if +userTasks is of type Tasks. +Now in Calendar you have two available IMAP +resources to write against, so if you create a new event, you are prompted +which one use (or if you left the local resources available, you have +3!). +You have go to the lower left small window in Calendar, the one that +shows available resources, and uncheck the ones that don't point to +.groupware.directory path (see the tail part of each +resource path). + + + + +Credits + +I'm a newbie, and for this howto I've only provided my time and my +will. For the knowledge I have really to thank some guys in freenode +channels for their competence, patience and helpfulness. + + +Special thanks to: + +For the Cyrus IMAP part +in #cyrus channel: + + +[protagonist] Andy Morgan morgan@orst.edu + + +[plixed] Okke Timm okke.timm@web.de + + + + +For the &kontact; part in #kontact channel: + + +[till] Till Adam adam@kde.org + + +[dfaure] David Faure faure@kde.org + + +[mdouhan] Matt Douhan matt@fruitsalad.org + + + + + +Thank a lot guys! + +Ah, and there is also me, [markit] Marco Menardi +mmenaz@mail.com + + + + +Further Reading + + +Reference +KDE: http://www.kde.org +&kontact; website: http://www.kontact.org +Kroupware project: http://www.kroupware.org +&kde; Community Wiki: http://wiki.kde.org +Wine project: http://www.winehq.org +Cygwin/X project http://x.cygwin.com +LTSP project: http://www.ltsp.org + + + + +
+ + diff --git a/doc/userguide/index.docbook b/doc/userguide/index.docbook new file mode 100644 index 000000000..b039979ce --- /dev/null +++ b/doc/userguide/index.docbook @@ -0,0 +1,611 @@ + + KApp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + +The &kde; User Guide + + + +The &kde; Documentation Team + + + + + + +20042005 +The &kde; Documentation Team + + +&FDLNotice; + +2004-06-16 +0.0.1 + + +A general user guide to &kde; + + +Please report any problems with this document to +kde-doc-english@kde.org. + + + + +KDE +desktop +handbook +tutorial + + + + + +Introduction + + +Welcome to the &kde; User Guide + +This User Guide aims to provide an overview of the entire &kde; experience. We +assume here that you have a standard, working installation of a complete &kde; +desktop environment, and the accompanying packages. This book should be +your first point of reference for any simple &kde; configuration question, or +to find out how to perform a common task. + + +What this book aims to be + +The first place to look and a one stop shop for all questions you have +regarding your &kde; experience. + +A Quick Start Guide to commonly performed tasks - In most cases, you do not +need to know the details of how to configure every option in an application, +in order to get down to work. You will find step-by-step guides which +will work in most common situations, along with links to sources of +further information in case you have any problems. + +There are also some tips and tricks showing you the most useful and +impressive features of &kde;, and ways to save you time and effort. + + + + +What this book is not + +The User Guide is not intended to be a replacement for the application +manuals. You should turn to the handbook for help with specific program +configuration and troubleshooting issues not covered in this book. If the +answer is outside the scope of this book, we will tell you here precisely +where to look for further help. + +You may also have a variety of third party packages, and some of these +applications are mentioned briefly here, but we normally cover only the +applications provided as part of a &kde; release. This is not a judgment on +the value of third party applications, and in fact many of them are +excellent. + +The User Guide is not specific to a distribution, and covers a default &kde; +installation. Your local installation may be customized by your +distribution provider, or by yourself, and so our advice here is +generic. You may have to adjust paths in order to locate the files that are +discussed. + + + +Conventions used in this book + +We'll use the following formatting conventions to make it clear what +we're referring to: + + + + + +Type of Text +Style +Example + + + + + +Text appearing in the &GUI; (on buttons, &etc;) +Light gray background +Settings + + + +Names of keys +Bold font +&Ctrl; + + + +Menu entries +Menu Name->Menu Item +FileQuit + + + + +Key combinations (pressed simultaneously) +Modifier Key+Action Key +&Ctrl;Q + + + + +Text you should enter +Bold, fixed width font +ls -al kde/ + + + +Text you should replace as appropriate +Italic green font +user + + + + + + + + + + +System Locations + +You may need to know the following system locations: + + + + +&kde; prefix +&kde; installs into its own folder tree, which you can find by +running the command kde-config . This folder is referred to +by the environment variables $KDEDIRS and possibly +$KDEDIR. + + + + +&kde; user-specific settings +The environment variable $KDEHOME +points to the folder where &kde; should find user-specific settings. If it is not +set, the default value of ~/.kde is used. + + + + + + + + + +Overview, or <quote>Where to look in the User Guide</quote> + +Here's an overview of what's in the User Guide: + + contains an introduction to the basic +use of &kde;, such as , and the tools +that you'll be using in all &kde; applications, like . If you're new to &kde; or even +computers in general, you will probably find this section +helpful. + + explains some important components +of a &kde; installation and how they fit together: &kde;'s multimedia +and networking capabilities are extensive, and not covered thoroughly +here, but there's a taster of both of them in this part of the User +Guide. At the end of this part, you'll find a guide to tweaking &kde; +just that little bit more, in . + + highlights &kde;'s suite of +Internet applications. &kde; includes a powerful web browser, +&konqueror;, a full-featured email client, &kmail;, a news reader, +&knode;, and many more applications to make your Internet experience +easier and more productive. This part of the User Guide contains +information about setting up these applications. + + is a reference guide to +some &kde; features which will be useful to administrators setting up +multi-user systems. This part also has information that may be useful +to &kde; users with single-user systems: where configuration files are +stored, what environment variables affect &kde;, and so on. The KIOSK +framework is the &kde; system which allows administrators to limit +what users can do in &kde;. It is potentially useful in many +situations, but especially for running single-function kiosks with, +for example, just a web browser, hence the name. + + + + + + +The Desktop + + +The Basics +The desktopDesktop + is just the name for the layout of +the screen when you start &kde;. It looks something like this (on your +own system, it might look slightly different, but the main features +should be the +same): + + + + + + +A default desktop layout + + + + +Let us look at the most important parts: + +Most of the screen is +taken up by the backgroundBackground. At the moment, there is a picture making up +the background. This picture is usually referred to as the +wallpaper,Wallpaper and you can change it to make &kde; suit your +taste. + + +In the top left-hand corner are two icons: +Trash and Home. Clicking on +these will open your Trash folder and Home +folder, respectively. You can add more icons to the desktop so that +you can open your favorite programs, or access removable media, with +just one click. + + +At the bottom is the &kde; PanelPanel, also known as +&kicker;. The Panel contains several useful ways of +interacting with &kde;. It houses the &kmenu;, from where you can open +any &kde; application installed on your computer, it shows all the +programs that are currently running, as well as the time, and more. +Take a look at for more +information about the &kde; Panel. + + + + + + + + + + + +&Philip.Rodrigues; + + + + +Logging In and Logging Out +Basic KDM & startkde stuff. + + +There are two ways to log into &kde;: graphically and via the +command line. We'll look at them both briefly: + + +Logging in Graphically +login +&kdm; + +If you see a screen a little bit like the one below when you +start up your computer, then you are all set for logging in +graphically. Just enter your username in the +Login text box and your password in the +Password text box. Your password will not be shown +as you type it; it will probably be shown as asterisks. When you have +entered that information, click on the Login +button, and &kde; will start up. The &kde; splash screen will appear, +and keep you informed about the progress of &kde; startup, and when +it is done, &kde; will be ready to use. + + + +Logging in via the Command Line +startkde +startx + +If you prefer using the command line, you can log in to &kde; +with the startx command. Add the line +exec startkde to the +.xinitrc file in your home folder (create it +if it does not exist), save the file, and then run +startx. &kde; should start in the same way as if +you had logged in graphically. + + + +Logging Out +logout + +Once you have finished using &kde; for the moment, you will +want to log out until next time. The easiest way to do this is to +click on the &kmenu; at the bottom left of your screen, and then +select the Log Out... item. A dialog with the +text End session for +username will appear. To confirm +that you want to log out, click on the End Current Session +button. If you change your mind, and decide to carry on using &kde; +for now, hit Cancel. + + +Related Information +The &kdm; Handbook has information about using and setting up +the &kde; graphical login manager. You can read it in &khelpcenter; or +by entering help:/kdm in &konqueror;'s +Location bar. + + + + + + +&getting-help; +&windows-how-to; + +&the-filemanager; + + + + +&panel-and-desktop; + +&programs-and-documents; + + + + +&kde; Components + +&control-center; + +&base-kde-applications; + +&extragear-applications; + + +Multimedia With &kde; + +&removable-disks; + +&playing-music; + +&playing-audiocds; + +&playing-movies; + + + + +&kde; the Multiuser Desktop + +&your-kde-account; + +&kde-as-root; + +&switching-sessions; + + + +Networking with &kde; + +&file-sharing; + +&networking-with-windows; + +&shared-sessions; + + + +Graphics, Printing, and Fonts + +&printer-setup; + +&printing-from-apps; + +&pdf-files; + +&font-installation; + +&creating-graphics; + + +&customizing-desktop; + +&konsole-intro; + +&kde-edutainment; + +&accessibility; + +&under-the-hood; + + + +&kde; and the Internet + +&net-connection-setup; + +&email; + + +&konqueror; + +Intro to the browser + +&internet-shortcuts; + +&browser-fine-tuning; + + +&usenet; + +&messaging-intro; + + + +&kde-office; + +&kde-for-admins; + + +More Tools + +&migrator-applications; + +&migrator-dictionary; + +&standard-menu-entries; + +&glossary; + + +Troubleshooting Problems + +Problems that aren't + +Frozen apps (how to kill them) + +Things won't open + +That scary crash dialog + +Reporting Bugs + +More Resources + +&troubleshooting-network-x; + +&troubleshooting-no-open; + + + + +Contributing to &kde; + +Some basic information to get encourage people to contribute to +&kde;, information about what's available, and how to get +started. + + + + + + + +Credits and Licenses + +&credits-and-license; + + +License + + + +&underFDL; + + + + +&documentation.index; + + + + + diff --git a/doc/userguide/internet-shortcuts.docbook b/doc/userguide/internet-shortcuts.docbook new file mode 100644 index 000000000..f6705c292 --- /dev/null +++ b/doc/userguide/internet-shortcuts.docbook @@ -0,0 +1,80 @@ + + + + + +Simon +Vermeersch + +titeuf@ph34rus.org + + + + +Internet Shortcuts + +Web shortcuts +Internet Shortcuts +gg: + +Internet shortcuts are a really useful feature of &konqueror;: +once you get used to them, you'll wonder how you ever lived without them. + +To see what internet shortcuts are, open up &konqueror; and type +gg:kde in the Location +bar. + +You will go to Google, searching for &kde;. + +They are many such shortcuts like ggl: (Google +I'm feeling lucky), bug: (bugs.kde.org) and so +on. + +To get a full list, click on Settings in the +&konqueror; menu, and select Web Shortcuts. Here you will find a full list of all the shortcuts. You can create +new ones, change existing ones, or delete unused shortcuts. You can also +disable web shortcuts if you don't like them. If you set the Default +search engine, you don't have to type the shortcut anymore. For +instance if you set it to Google, you can just type +kde in the Location bar, +and it will search Google for &kde;. + +In Keyword delimiter you can choose if you want +to separate a shortcut with a colon (gg: kde) or a +space (gg kde). + +A nice tip with Internet shortcuts is that you can use them from the +Run Command dialog. Just open it (through the &kmenu; +or with &Alt;F2) and +type your shortcut, ⪚ gg: kde, and press +&Enter;. It will automatically open &konqueror; with a Google +search for &kde;. + + + + + + + + + diff --git a/doc/userguide/juk-icon.png b/doc/userguide/juk-icon.png new file mode 100644 index 000000000..2b58a33d3 Binary files /dev/null and b/doc/userguide/juk-icon.png differ diff --git a/doc/userguide/juk.png b/doc/userguide/juk.png new file mode 100644 index 000000000..9ec3ae91e Binary files /dev/null and b/doc/userguide/juk.png differ diff --git a/doc/userguide/kaboodle-icon.png b/doc/userguide/kaboodle-icon.png new file mode 100644 index 000000000..87ac58b8c Binary files /dev/null and b/doc/userguide/kaboodle-icon.png differ diff --git a/doc/userguide/kaboodle.png b/doc/userguide/kaboodle.png new file mode 100644 index 000000000..dbbcfd923 Binary files /dev/null and b/doc/userguide/kaboodle.png differ diff --git a/doc/userguide/kcalc-systray.png b/doc/userguide/kcalc-systray.png new file mode 100644 index 000000000..5e0ac5cc5 Binary files /dev/null and b/doc/userguide/kcalc-systray.png differ diff --git a/doc/userguide/kcontrol.png b/doc/userguide/kcontrol.png new file mode 100644 index 000000000..3de78f3f8 Binary files /dev/null and b/doc/userguide/kcontrol.png differ diff --git a/doc/userguide/kde-as-root.docbook b/doc/userguide/kde-as-root.docbook new file mode 100644 index 000000000..7e6bb6fe9 --- /dev/null +++ b/doc/userguide/kde-as-root.docbook @@ -0,0 +1,52 @@ + + + + + +&Francis.Giannaros; &Francis.Giannaros.mail; + + + + + +Using &kde; as Root + +For &UNIX; operating systems there are often different users, which in turn might have different privileges. The conventional method is to have an ordinary user account, whose files are generally stored in /home/username, and then to also have a root account. The root, or Super User, account has system-wide privileges, being able to modify any file on the system. + +Although this means that it is easy to perform administrative tasks without hassle, it also means that there are no security restrictions imposed upon it. Thus, a small typographical error or other mistake can result in irrevocable damage. + +Some of the operating systems that run &kde; come with a graphical root login enabled. Despite this, you should never log in to &kde; as root, and you should never need to. Your system is far more open to attack, particularly if you are browsing the Internet as root, and you dramatically increase your chances of damaging your system. + +Some &Linux; distributions have tried to stress this point so much that they have disabled the root account altogether, and instead use the sudo model. Nevertheless, the basic security model in sudo is the same as su, and thus they share the same security strengths and weaknesses, essentially. + +If you should ever need to run a program with Super User privileges, then it is always recommend that you use &kdesu;. From &konsole; or from hitting &Alt;F2, enter kdesu application, and the application will be run with the appropriate Super User privileges. + +Even if you have set up your system to use sudo, or you are on a distribution that uses sudo, such as &kubuntu;, you should still use &kdesu;. The program will be appropriately modified by the developers to use the correct settings. You should not, however, ever use sudo application to run an application with root permissions; it can derange permissions of certain configuration files for a program. Running a graphical applications as root in general is not a good idea, but using &kdesu; will always be your safest bet with it. + + + +Related Information +&kdesu; Handbook + + + + + + + diff --git a/doc/userguide/kde-edutainment.docbook b/doc/userguide/kde-edutainment.docbook new file mode 100644 index 000000000..11c6faae7 --- /dev/null +++ b/doc/userguide/kde-edutainment.docbook @@ -0,0 +1,342 @@ + + + +&kde; Edutainment + +The &kde; Edutainment Project offers children, families, and teachers some +educational programs. You can find applications to help you improve +your language skills and train your vocabulary, like &kvoctrain; and +&kwordquiz;; or Scientific programs, like the +very advanced &kstars; (a planetarium) and &kig; (interactive +geometry), which will bring you to the edge of knowledge. Have fun learning +touch-typing with &ktouch;. Teachers will find an easy way to make +their lessons with &keduca;. You can find a complete list of &kde; +educational software on the KDE-Edu +website. What follows is an overview of a few of them. + +View the handbook of each application by typing help:/<appname> in &konqueror;'s Location Toolbar, or by selecting it in &khelpcenter;. + + +Improve your language skills + + + +&khangman; + An easy-to-use application which implements the classical hangman game. You can choose for the words to be from a particular topic and even choose from a selection of difficulty levels. The program comes in twenty-four languages, and is therefore quite ideal for learning the spelling of basic nouns in other languages. + + + Website: http://edu.kde.org/khangman + &khangman; Handbook + + + + + + +&klettres; + An application specially designed to help the user learn the alphabet of a new language and then to learn to read simple syllables. Ideal for children, or any person attempting to learn and familiarize themselves with a foreign language's alphabet. A number of alphabets are currently supported. + + + Website: http://edu.kde.org/klettres + &klettres; Handbook + + + + + + +&kanagram; + A simple mind-training game, in which you have to figure out the word that has been given in the program. The letters from the word are disordered, and from the given words you have to solve which word the letters might make, if rearranged. Similar to the popular Countdown game as seen on Television. + + + Website: http://edu.kde.org/kanagram + &kanagram; Handbook + + + + + + +&kverbos; + A simple way to learn and study Spanish verb forms. The program suggests a verb and a tense and the user enters the different forms. The program corrects the user input and gives feedback. The user can edit the list of the verbs that can be studied and the program can build regular verb forms, and the forms of the most important verb groups, by itself. Irregular verb forms can be entered by the user. + + + Website: http://edu.kde.org/kverbos + &kverbos; Handbook + + + + + + +&kvoctrain; + Another advanced vocabulary training application, using the flash card approach. Vocabulary files and be downloaded and loaded into the application. + + + Website: http://edu.kde.org/kvoctrain + &kvoctrain; Handbook + + + + + + + +&kiten; + A Japanese reference and learning tool. Words from both English and Japanese can be looked up, and filtered, using the Edict and Kanjidic dictionary protocols. Other features in &kiten; include a few comprehensive search functions, a history of searches, and a learning section which contains various different learning modes. + + + Website: http://edu.kde.org/kiten + &kiten; Handbook + + + + + + +&klatin; + A program to help revise Latin. There are vocabulary, grammar, and verb testing sections. In addition there is a set of revision notes that can be used for self-guided revision. + + + Website: http://edu.kde.org/klatin + &klatin; Handbook + + + + + + + + + + +Mathematics + +Several applications to help you with Mathematics and Geometry. + + + +&kbruch; + An application with several exercise types in order to enhance your calculating with fractions. Different tasks include exercises to find the sum of two fractions, the conversion of fractions into the respective decimal, the comparison (with less than, more than) of fractions, and more. + + + Website: http://edu.kde.org/kbruch + &kbruch; Handbook + + + + + + +&kig; + A great application with interactive geometry. Ideal for teachers attempting to draw a graph on the computer, or students who wish to find out more and investigate with graphs and curves. Currently many things are supported, and you can very easily construct several things from parabolas and hyperbolas, to ellipses. + + + Website: http://edu.kde.org/kig + &kig; Handbook + + + + + + +&kpercentage; + Essentially an application to help you improve your skills in calculating percentages. Different exercises are included, and there are varying difficulty levels to target persons with varying abilities. + + + Website: http://edu.kde.org/kpercentage + &kpercentage; Handbook + + + + + + + +&kmplot; + A mathematical function plotter. It has built in a powerful parser. You can plot different functions simultaneously and combine their function terms to build new functions. &kmplot; supports functions with parameters and functions in polar coordinates. Several grid modes are possible and plots may be printed with high precision in correct scale. + + + Website: http://edu.kde.org/kmplot + &kmplot; Handbook + + + + + + + + + + +Science + + + +&kstars; + A desktop Planetarium for &kde;. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. The display includes 130,000 stars, 13,000 deep-sky objects,all 8 planets, the Sun and Moon, and thousands of comets and asteroids. + + + Website: http://edu.kde.org/kstars + &kstars; Handbook + + + + + + + &kalzium; + A fully-featured periodic table, with the full list of all elements, and extended information about each individual element is accessible. As well as being able to view a basic overview, other features include being able to view its chemical data, atomic model, energies, as well as a picture of the element. + + + Website: http://edu.kde.org/kalzium + &kalzium; Handbook + + + + + + + + + +Teaching Tools + + + &keduca; + A flash card application, which allows you to make interactive form-based tests. It also currently comes with support to add servers from which you can fetch tests from. Several languages supported. + + + Website: http://edu.kde.org/keduca + &keduca; Handbook + + + + + + + + + +Miscellaneous + + + &ktouch; + An application for learning touch-typing. &ktouch; displays the keyboard on the screen, and the color of the keys changes when they need to be depressed. Text appears on the screen, and the user is asked to type it out. A few default lectures are contained in the program by default, with various different difficulty levels. + + + Website: http://edu.kde.org/ktouch + &ktouch; Handbook + + + + + + + + + &kwordquiz; + A flash card application, which allows you to make interactive form-based tests. It also currently comes with support to add servers from which you can fetch tests from. Several languages supported. + + + Website: http://edu.kde.org/kwordquiz + &kwordquiz; Handbook + + + + + + + + &kturtle; + An educational programming environment using the Logo programming language, with several languages currently supported. + + + Website: http://edu.kde.org/kturtle + &kturtle; Handbook + + + + + + + + &kgeography; + &kgeography; is a geography learning tool for &kde;. You can browse the maps by clicking in a map division to see its name and you can also answer several types of questions where the program shows you a map division or a capital for example and you have to guess its name. + + + Website: http://kgeography.berlios.de/ and http://edu.kde.org/kgeography + &kgeography; Handbook + + + + + + + + &blinken; + &blinken; is a Simon Says game for &kde;. The player should remember the sequence of lights in the correct order and is then presented with an identical sequence with one extra step. + + + Website: http://edu.kde.org/blinken + &blinken; Handbook + + + + + + + + + + +Related Information + +The &kde;-Edu website at http://edu.kde.org has news and +information about all the &kde; Edutainment applications. + + + + + + + + diff --git a/doc/userguide/kde-for-admins.docbook b/doc/userguide/kde-for-admins.docbook new file mode 100644 index 000000000..f7d5d2ee0 --- /dev/null +++ b/doc/userguide/kde-for-admins.docbook @@ -0,0 +1,2747 @@ + + + + + +Waldo +Bastian + +bastian@kde.org + + +&Philip.Rodrigues; +&Philip.Rodrigues.mail; + + + + +&kde; for Administrators + + +&kde; Internals + + +Overview +to be written + + + +Directory Layout + +&kde; defines a filesystem hierarchy which is used by the &kde; +environment itself as well as all &kde; applications. In general &kde; +stores all its files in a directory tree with a fixed structure. + + +By default &kde; uses two directory trees: + + +One at the system level (for example /opt/kde3). +One at the user level in the user's home directory +(usually +~/.kde) + + +As a system administrator you can create additional trees. Such +additional trees can be used for profiles + +&SuSE; &Linux; for example uses: + + +$HOME/.kde +/opt/kde3. (This is +&SuSE;-specific; other distributions may use +/usr or /usr/kde3) +/etc/opt/kde3. (This was added by +&SuSE;). + + +If you have the KIOSK Admin tool v0.7 or later installed you can +check which directory trees are used with the following command: +kiosktool-kdedirs + + + +&kde; and &kde; applications look up files by scanning all the +&kde; directory trees. The directory trees are checked in order of +precedence. When a file is present in multiple directory trees, the +file from the last tree takes precedence. Normally, the tree +located in the user's home directory has the highest precedence. This +is also the directory tree to which changes are written. + + +For information about the text/plain &MIME; type +the following files are searched: + + +$HOME/.kde/share/mimelnk/text/plain.desktop +/opt/kde3/share/mimelnk/text/plain.desktop +/etc/opt/kde3/share/mimelnk/text/plain.desktop + + +If a user makes a change, the change is written to $HOME/.kde/share/mimelnk/text/plain.desktop + + +For configuration files the story is slightly different. If +there are multiple configuration files found in the directory trees +with the same name, their content is combined. The precedence order of +the directory trees plays a role here. When two files define the same +configuration key, the file with the highest precedence determines +which value is used for the key. + + +For example, if the following two files exist, with these contents: + +$HOME/.kde/share/config/foobar + +Color=red +Shape=circle + + + + + +/etc/opt/kde3/share/config/foobar + +Color=blue +Position=10,10 + + + + + +The files will be merged to result in: + + +Color=red +Shape=circle +Position=10,10 + + + + + + +Specifying Directories + + + + +Environment Variable +Example Setting(s) +Comment + + +KDEHOME +~/.kde + + + + +KDEROOTHOME +/root/.kde +Different variable to prevent +root writing to $KDEHOME of the user after running +su. + + + +KDEDIR +/opt/kde3, /usr, /usr/kde3 +Vendor dependent. Used by &kde; 2. If not set, falls back to +compiled-in default. + + + +KDEDIRS +/opt/kde3, /usr, /usr/kde3 +New in &kde;3. Can list multiple locations separated by a +colon. If not set, falls back to $KDEDIR + + + + +Don't need to be set, defaults work just fine. +Running &kde;2 next to &kde;3? Point $KDEDIR to +&kde; 2 and $KDEDIRS to &kde; 3. + + +A staff member at a university could have the following +settings: + +KDEHOME='~/.kde3' +KDEROOTHOME='/root/.kde3' +KDEDIRS='/opt/kde_staff:/opt/kde3' + + + + + + + +User Profiles + +In the previous example /opt/kde_staff contained additional settings +and applications for staff members. User Profiles allow you +to add this directory only for certain users and not for others. Add the +following to /etc/kderc: + + +[Directories-staff] +prefixes=/opt/kde_staff + + +This creates a profile named staff that adds the +/opt/kde_staff directory +tree. (Note that &SuSE; &Linux; uses +/etc/kde3rc instead of +/etc/kderc. Now that we have a named profile it +can be assigned to users. + +To map profiles to users a mapping file needs to be specified in +/etc/kderc: + + +[Directories] +userProfileMapFile=/etc/kde-user-profile + + +It is now possible to assign a profile based on either the user name +or based on the &UNIX; group the user is part of. + +To assign the staff profile to all users that are a member of the +&UNIX; group staff_members add the following to +/etc/kde-user-profile: + + +[General] +groups=staff_members +[Groups] +staff_members=staff + + +It is also possible to assign a profile to a single user: + + +[Users] +bastian=staff + + + + + +Directory Layout Revisited + +Each directory tree used by &kde; has a fixed directory structure. +Directories that are not relevant for a certain tree, or simply not used can +be left out though. For example, directories used for temporary files are +usually only found under $KDEHOME but not in any other +directory tree. + + + + +Architecture-specific Directories + +Architecture (OS and CPU type) specific directories: + + + +bin +Used for &kde; executables. + + + +lib +Used for &kde; libraries. + + + + +lib/kde3 +This directory contains components, plugins, and other +runtime loadable objects for use by &kde; 3.x +applications. + + + + + + +Shared Directories + +Shared: Not architecture specific, can be shared between different +archs. + + + +share/applnk +.desktop files for +&kde;-menu (old) + + + +share/applications +.desktop files for +&kde;-menu (since &kde; 3.2) + + + + +share/apps +Contains application-specific data files. Each +application has a sub-directory here for storing additional data +files. + + + +share/config +Configuration files. Configuration files are normally +named after the application they belong to plus the letters +rc. A special case is kdeglobals. +This file is read by all &kde; applications. + + + +share/config/session +This directory is used by session management and is +normally only available under $KDEHOME. At the end of a +session &kde; applications store their state here. The file names +consist of the name of the application followed by a number. The +session manager ksmserver stores references to +these numbers when saving a session in +ksmserverrc. + + + +share/doc/HTML +This directory contains documentation for &kde; +applications. Documentation is categorized by language and the +application it belongs to. Normally at least two files can be found in +a directory: index.docbook, which contains the +documentation in the unformatted DocBook format, and +index.cache.bz2, which contains the same +documentation formatted as bzip2-compressed +&HTML;. The &HTML; version is used by &khelpcenter;. If the &HTML; +version is missing, &khelpcenter; will regenerate it from the DocBook +version but this is a time-consuming process. + + + + +share/icons +Under this directory icons are stored. Icons are +categorized by theme, dimension and usage category. + + + +share/mimelnk +In this directory,.desktop files that describe &MIME; types +are stored. &kde; uses &MIME; types to identify the type of a +file. + + + + +share/services +This directory contains .desktop files that describe services. Services +are like applications but are usually launched by other applications instead +of the user. Services do not appear in the &kde; menu. + + + + +share/servicetypes +This directory contains .desktop files that describe +servicetypes. A servicetype usually represents a certain programming +interface. Applications and Services include in their >.desktop files the servicetypes that they +provide. + + +share/sounds +This directory contains sound files. + + + +share/templates +This directory contains templates for creating files +of various types. A template consists of a .desktop file that describes the file and +that includes a reference to a file in the .source sub-directory. The templates in +this directory appear in the Create New menu +available on the desktop and in the file browser. When a user selects +a template from the menu its source file is copied. + + + + +share/wallpapers +This directory contains images that can be used as +background picture + + + + + + + +Host-specific Directories + +There are three host-specific directories that are usually +symlinked to other locations. If the directories do not already exist, +the following symlinks and directories will be created using the +lnusertemp utility: + + + + +$KDEHOME/socket-$HOSTNAME +Usually /tmp/ksocket-$USER/, this +is used for various &UNIX; sockets. + + + + +$KDEHOME/tmp-$HOSTNAME +Usually /tmp/kde-$USER/, this is used for temporary files. + + + + +$KDEHOME/cache-$HOSTNAME +Usually /var/tmp/kdecache-$USER/, +this is used for cached files. + + + + +Since both /tmp and +/var/tmp are world writable, +there is a possibility that one of the above directories already +exists but is owned by another user. In that case the +lnusertemp utility will create a new directory with +an alternative name and link to that instead. + + + + +Configuration Files &kde; uses a simple +text-based file format for all its configuration files. It consists of +key-value pairs that are placed in groups. All &kde; configuration +files use UTF-8 encoding for text outside the +ASCII range. + +The start of a group is indicated by a group name that is placed +in square brackets. All the key-value entries that follow belong to +the group. The group ends when either another group starts or when the +end of the file is reached. Entries at the top of the +file that are not preceded by a group name belong to the default +group. + +The following example shows a configuration +file that consists of two groups. The first group contains the keys +LargeCursor and SingleClick, the +second group contains the keys Show hidden files +and Sort by: + + +[KDE] +LargeCursor=false +SingleClick=true + + + +[KFileDialog Settings] +Show hidden files=false +Sort by=Name + + + +Entries in a group consist of a key and value separated by an equals +sign. The key can contain spaces and may be followed by options placed in +square brackets. The part after the equals sign is the value of the +entry. Any white space surrounding the equals sign is ignored, as is any +trailing white space. Put more concisely, the format is: + + +entry=value + + +If a value is supposed to include a space at the begin or end +then this can be achieved by using a backslash followed by an +s. + +There are several other backslash codes; here is a complete +list: + +\s can be used as space + +\t can be used to include a tab + +\r for a carriage return character + +\n for a linefeed character (new line) + +\\ to include the backslash itself + + + +In the following example the value of the +Caption entry starts with two spaces while the +Description entry contains three lines of +text. Linefeeds in backslash notation are used to separate the +different lines. + + +[Preview Image] +Caption=\s My Caption +Description=This is\na very long\ndescription. + + + +Empty lines in configuration files are ignored, as are lines that +start with a hash mark (#). The hash mark can be used to add +comments to configuration files. It should be noted that when a &kde; +application updates a configuration file the comments are +not preserved. + +There can be multiple configuration files with the same name in the +share/config sub-directory of the +various &kde; directory trees. In this case the information of all these +configuration files is combined on a key-by-key basis. If the same key +within a certain group is defined in more than one place, the key value read +from the directory tree with the highest precedence will be used. +Configuration files under $KDEHOME always have the highest +precedence. If a key in a certain group is defined multiple times in a +single file, the value of the last entry is used. + + +If $HOME/.kde/share/config/foobar +contains: + +[MyGroup] +Color=red +Shape=circle + +and /etc/opt/kde3/share/config/foobar contains + +[MyGroup] +Color=blue +Position=10,10 + +the result will be: + +[MyGroup] +Color=red +Shape=circle +Position=10,10 + + + + + +If + $HOME/.kde/share/config/foobar + contains + +[MyGroup] +Color=red +Shape=circle +[MyGroup] +Color=green + +and /opt/kde_staff/share/config/foobar contains + +[MyGroup] +Color=purple +Position=20,20 + +and /etc/opt/kde3/share/config/foobar contains + +[MyGroup] +Color=blue +Position=10,10 + +the result will be: + +[MyGroup] +Color=green +Shape=circle +Position=20,20 + + + + +To prevent users being able to override default settings, +settings can be marked immutable. Settings can be made immutable +individually, per group or per file. An individual entry can be locked +down by adding [$i] behind the key, ⪚: + +Color[$i]=blue + + +A group of entries can be locked down by placing +[$i] behind the group name, ⪚: + +[MyGroup][$i] + + +To lock down the entire file, start the file with +[$i] on a single line, &ie;: + +[$i] + + + + +If + $HOME/.kde/share/config/foobar + contains: + +[MyGroup] +Color=red +Shape=circle + +and /etc/opt/kde3/share/config/foobar contains: + +[MyGroup][$i] +Color=blue +Position=10,10 + +the result will be: + +[MyGroup] +Color=blue +Position=10,10 + + + + +If + $HOME/.kde/share/config/foobar + contains: + +[MyGroup] +Color=red +Shape=circle + +and /opt/kde_staff/share/config/foobar contains + +[MyGroup] +Color=purple +Shape=rectangle + +and /etc/opt/kde3/share/config/foobar contains + +[MyGroup][$i] +Color=blue +Position=10,10 + +the result will be + +[MyGroup] +Color=purple +Shape=rectangle +Position=10,10 + + + + + +So-called Shell Expansion can be used to provide more +dynamic default values. With shell expansion the value of a configuration +key can be constructed from the value of an environment variable or from the +output of a shell command. To enable shell expansion for a configuration +entry, the key must be followed by [$e]. Normally the +expanded form is written into the user's configuration file after first use. +To prevent that, it is recommend to lock the configuration entry down by +using [$ie]. The user can't change it then of course. + + +In the following example the value for the Host +entry is determined by the output of the hostname +program. This setting is also locked down to ensure that the value is always +determined dynamically. + +The value for the Email entry is determined by +filling in the values of the $USER and $HOST +environment variables. When joe is +logged in on joes_host this will +result in a value equal to joe@joes_host. The setting is +not locked down. + + +[Mail Settings] +Host[$ie]=$(hostname) +Email[$e]=${USER}@${HOST} + + + +Most configuration entries can be indexed with a language code. In +this case, the language that the user has selected for use on the desktop is +used to look up the key value. If the default language (American English) +has been selected or if there is no index that corresponds to the selected +language, the key entry without index is used. + + +In the following example the value of the Caption +entry depends on the language. If the user has selected French as language +(language code fr) the value of the entry will be +Ma Légende. In all other cases the value My +Caption will be used. + + +[Preview Image] +Caption=My Caption +Caption[fr]=Ma Légende + + + + +In this example the value of the Caption entry +depends on the language. If the user has selected French as language +(language code fr) the value of the entry will be +Ma Légende. In all other cases the value My +Caption will be used. + + +[Preview Image] +Caption=My Caption +Caption[fr]=Ma Légende + + + +In general the entries that can appear in a configuration file are not +documented. With &kde; 3.2 a start has been made to change this. In +$KDEDIR/share/config.kcfg, files +can be found that provide a formal description of the possible entries in a +configuration file. These are used by the new &kde; Configuration Editor +when available. + + +Here is an example &XML; configuration file: + + +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE kcfg SYSTEM "http://www.kde.org/standards/kcfg/1.0/kcfg.dtd"> +<kcfg> + <kcfgfile name="korganizerrc"/> + <group name="General"> + <entry type="Bool" key="Auto Save"> + <label>Enable automatic saving of calendar</label> + <default>true</default> + </entry> + <entry type="Int" key="Auto Save Interval"> + <default>10</default> + </entry> + </group> +</kcfg> + + + +It has the same effect as: + +[General] +Auto Save=false +Auto Save Interval=25 + + + + + + + +&kde; Startup Sequence + + +&kdm; + +Always runs as root! Uses +$KDEDIR/share/config/kdmrc and +/etc/X11/xdm/Xservers. The latter contains entries +like: + + +:0 local /usr/X11R6/bin/X :0 vt07 + + +Relevant startup files are also: + + +[X-*-Core] section in kdmrc + + +Setup - /etc/X11/xdm/Xsetup + + +User enters username & password + + +Startup - /etc/X11/xdm/Xstartup - prepare as root + + +Session - /etc/X11/xdm/Xsession - starts session as user + + += For a KDE session: kde or startkde + + += If present ~/.xsession or ~/.xinitrc + + +Reset - /etc/X11/xdm/Xreset - after session finished + + + + + + +The &kde; Startup Script: <command>startkde</command> + +The &kde; startup sequence starts with the +startkde script. In most cases this script gets called +from the display manager (&kdm;) once the user has been authenticated. Their +are two very important lines in the startkde +script: + + +LD_BIND_NOW=true kdeinit +kcminit +knotify and kwrapper +ksmserver $KDEWM + + +The first line starts the kdeinit master process. +The kdeinit master process is used to start all other +&kde; processes. It show up in the output of ps + as kdeinit: +Running.... The arguments after kdeinit +are the names of additional processes to be started. The + +indicates that kdeinit needs to wait till the process has +finished. kdeinit also starts +dcopserver, klauncher and +kded. + +The second of the two lines asks kdeinit to start +the ksmserver session manager process. The session +manager determines the lifetime of the session. When this process exits, the +user is logged out. + + + + + +Background Processes + +All &kde; background services are user-specific: unlike system daemons +they are not shared between users. As well as being unique per user they are +also unique per X-server display. The processes are: + + + +dcopserver +Desktop communication + + + + +kded +Generic service daemon. +Triggers Sycoca database updates when +needed + + + + +kcminit +Initialization service +See for more information. + + + + +klauncher +Program launch (this is not the +&Alt;F2 +dialog!) +See for more information. + + + + +knotify +User notifications. +See for more information. + + + + +ksmserver +Session management +See for more information. + + + + + + +<command>kdeinit</command> +kdeinit is used to start all other &kde; +programs. kdeinit can start normal binary program files +as well as kdeinit loadable modules +(KLMs). KLMs work just like binary +program files but can be started more efficiently. KLMs +live in $KDEDIR/lib/kde3 + +The drawback is that programs started this way appear as +kdeinit in the output of +top and ps. Use top + or ps +to see the actual program name: + + +%ps + +waba 23184 0.2 2.1 23428 11124 ? S 21:41 0:00 kdeinit: Running... +waba 23187 0.1 2.1 23200 11124 ? S 21:41 0:00 kdeinit: dcopserver --nosid +waba 23189 0.2 2.4 25136 12496 ? S 21:41 0:00 kdeinit: klauncher +waba 23192 0.7 2.8 25596 14772 ? S 21:41 0:00 kdeinit: kded +waba 23203 0.8 3.4 31516 17892 ? S 21:41 0:00 kdeinit: +knotify + + + +kdeinit: Running... indicates the +master kdeinit process. The other processes listed are +programs started as KLMs. + +When kdeinit starts for the first time it will +launch dcopserver, klauncher, and +kded, as well as any additional programs specified on its +command line in the startkde script, normally +kcminit and knotify. + + + + +<command>dcopserver</command> + +dcopserver is a daemon which provides inter-process +communication (&DCOP;) facilities to all &kde; applications. The &DCOP; +facilities are accessible from the command shell via the +dcop command line tool. &DCOP; is essential for all &kde; +applications. + +Some related files: + + + +$HOME/.DCOPserver_$HOSTNAME_$DISPLAY +.DCOPserver_linux__0. Controlled by $DCOPAUTHORITY + + + + +/tmp/.ICE-unix/dcoppid-number +dcop7634-1069677856. This is +the file that the DCOPserver file above points to. + + + + +$HOME/.ICEauthority +Authorization information controlled by +$ICEAUTHORITY + + + + + + + +kcminit + +kcminit executes initialization services during +startup. Initialization services are specified in the .desktop files of +applications or services via the X-KDE-Init line: + + +[Desktop Entry] +Encoding=UTF-8 +Exec=kcmshell energy +Icon=energy_star +Type=Application +X-KDE-Library=energy +X-KDE-Init=energy + + +Initialization services are typically used for initializing +hardware based on user-specified settings. + +kcminit + can be used to show all +initialization services and kcminit +service can be used to +execute a single service explicitly. This can be useful when investigating +startup problems. + + + + +<command>klauncher</command> + +klauncher is a daemon which is responsible for +service activation within &kde;. It operates in close connection with the +kdeinit master process to start new processes. &kde; +applications communicate with klauncher over &DCOP; in +order to start new applications or services. + +Best known from the error message: +KLauncher could not be reached via DCOP which +either indicates a serious problem with the dcopserver or +that klauncher crashed. + +klauncher can be restarted by restarting +kdeinit from a console window. Make sure that +$HOME, $DISPLAY and the various +$KDEDIR(S) are set correctly when doing so! + + + + +<command>knotify</command> + +The primary task of knotify is to relay sound +notifications to the sound server, it also provides alternative notification +methods. + + + + + + + +KSMServer + +ksmserver is &kde;'s session manager. On startup +the session manager launches auto-start applications and restores +applications from the previous session. The applications to auto-start are +indicated by .desktop files in the +$KDEDIR/share/autostart +directory. Whether or not to auto-start an application can be made +conditional upon some configuration entry determined by the +X-KDE-autostart-condition entry in the .desktop file. + + +The ktip.desktop file for example +contains: + + +X-KDE-autostart-condition=ktiprc:TipOfDay:RunOnStart:true + + +This means that the ktiprc configuration +file is checked for a RunOnStart entry in the +[TipOfDay] section. If no such entry is found, +true is assumed, which means that +ktip is one of the applications that is +auto-started by default. + + +Some of the applications auto-started by ksmserver +are: + + + + +kdesktop +The &kde; desktop + + + + +&kicker; +The &kde; panel + + + + +ktip +A tip of the day program + + + + +kwrited +A utility to receive system messages sent to the user + + + + +&klipper; +A clipboard utility that docks in the panel + + + + +kalarm +A utility that warns about upcoming events and appointments + + + + + +kdesktop in its turn automatically starts +applications stored in $KDEHOME/Autostart. kdesktop +will automatically open any files stored in this directory including +documents, binary files or applications in the form of .desktop files. + +The &kde; session manager also restores one of the previous +sessions. A session contains a collection of applications as well as +application-specific information that reflects the state of the applications +at the time the session was saved. Sessions are stored in the +ksmserverrc configuration file which contains +references to application-specific state information. The +application-specific state information is saved in $KDEHOME/share/config/session. +The state information of &kwin; contains the location of the application +windows of all the other applications in the session. + + + + + +Environment variables + +Some important environment variables used by &kde;: + + + + +$KDEDIR +Has to be set if +KDEDIRS is not set and has to point to the root of the +&kde; installation tree. Allows &kde; to find its data like icons, +menus and libraries. + + + +$KDEDIRS +Overrides KDEDIR and allows you to specify +multiple directories where &kde; searches for its data. Useful if you want +or have to install some programs to a different prefix than the rest of +&kde;. + + + +$KDEHOMEIf +not set, &kde; uses ~/.kde as +the directory where personal data is stored. + + + +$KDEROOTHOMEIf +not set, &kde; uses ~root/.kde +as the directory for root's +personal data. Was introduced to prevent &kde; from accidently +overwriting user data with root permissions when the user runs a &kde; +program after switching with su to root. + + + +$KDEWMIf the +KDEWM environment variable has been set, then it will +be used as &kde;'s window manager within the +startkde script instead of &kwin;. + + + +$KDE_LANGOverrides +the &kde; language configuration, ⪚ KDE_LANG=fr kprogram +& starts a program with French translation if the +necessary files are installed. + + + +$KDE_MULTIHEADSet +this variable to true to indicate that &kde; is running +on a multi-head system. + + + +$KDE_FORK_SLAVES +(Since &kde; 3.2.3) Set this variable to spawn +KIO-slaves directly from the application process +itself. By default KIO-slaves are spawned using +klauncher/kdeinit. This option is +useful if the KIO-slave should run in the same +environment as the application. This can be the case with +Clearcase. + + + +$KDE_HOME_READONLY +Set this variable to indicate that your home directory is +mounted as read-only. + + + +$KDE_NO_IPV6 +(Since &kde; 3.2.3) - Set this variable to disable IPv6 +support and IPv6 DNS +lookups. + + + +$KDE_IS_PRELINKED +(Since &kde; 3.2) - Set this variable to indicate that you have prelinked +your &kde; binaries and libraries. This will turn off +kdeinit. + + + +$KDE_UTF8_FILENAMESIf +this environment variable is set, &kde; assumes all filenames are in +UTF-8 encoding regardless of the current C +locale. + + + +$KDE_FULL_SESSION +(Since &kde; 3.2) Automatically set to true by &kde; startup, it is used +by ⪚ &konqueror; to know if it should consider remaining in memory +for future re-use when being closed. If not set, &konqueror; will exit +after being closed (⪚ &kdesu; does that, it's also useful for +debugging). + + + +$KDESYCOCAAllows +you to specify the path and the name of the generated &kde; system +configuration cache file. + + + +$KDETMPAllows +to specify another path than /tmp where &kde; stores its temporary +files. + + + +$KDEVARTMPAllows +to specify another path than /var/tmp where &kde; stores its variable +files. + + + +$XDG_DATA_HOME +(Since &kde; 3.2) Defines the base directory relative to which user-specific +data files should be stored. Default is $HOME/.local/share + + + +$XDG_DATA_DIRS +(Since &kde; 3.2) Defines the preference-ordered set of base directories to +search for data files in addition to the $XDG_DATA_HOME base +directory. Default is +/usr/local/share/:/usr/share/ + +&kde; adds locations from $KDEDIRS and profiles +as well. Used for .desktop and +.directory menu files. .desktop files under $XDG_DATA_DIRS/applications. +.directory files under +$XDG_DATA_DIRS/desktop-directories + + + + +$XDG_CONFIG_HOME +(&kde; 3.2) - Defines the base directory relative to which user +specific configuration files should be stored. Default is +$HOME/.config. + + + +$XDG_CONFIG_DIRS +(&kde; 3.2) - Defines the preference-ordered set of base directories +to search for configuration files in addition to the $XDG_CONFIG_HOME +base directory. The default is /etc/xdg &kde; adds locations from +$KDEDIRS and profiles as well. Used by .menu descriptions in +$XDG_CONFIG_DIRS/menus. + + + + + + + + +The kdeinit Mystery + + + +kdeinit is used to start all other &kde; +programs. kdeinit can start normal binary program f iles +as well as kdeinit loadable modules +(KLMs). KLMs work just like binary +program files but can be started more efficiently. KLMs +live in $KDEDIR/lib/kde3 + +The drawback is that programs started this way appear as +kdeinit in the +output of top and ps. Use +top or ps + to see the actual program name: + + +% ps aux | grep bastian + +bastian 26061 0.0 2.2 24284 11492 ? S 21:27 0:00 kdeinit: Running... +bastian 26064 0.0 2.2 24036 11524 ? S 21:27 0:00 kdeinit: dcopserver +bastian 26066 0.1 2.5 26056 12988 ? S 21:27 0:00 kdeinit: klauncher +bastian 26069 0.4 3.2 27356 16744 ? S 21:27 0:00 kdeinit: kded +bastian 26161 0.2 2.7 25344 14096 ? S 21:27 0:00 kdeinit: ksmserver +bastian 26179 1.1 3.4 29716 17812 ? S 21:27 0:00 kdeinit: kicker +bastian 26192 0.4 3.0 26776 15452 ? S 21:27 0:00 kdeinit: klipper +bastian 26195 1.0 3.5 29200 18368 ? S 21:27 0:00 kdeinit: kdesktop + + +As you might have noticed, this has another side effect, making it +difficult to kill a process that is causing trouble: + +% killall kdesktop +kdesktop: no process killed + +You might be tempted to try killall +kdeinit, but killing all kdeinit processes will have +the effect of shutting down all of &kde;. In effect, total +destruction! + +There are two simple solutions to this: + +% kdekillall kdesktop +or good old +% kill 26195 +kdekillall is part of the &kde; SDK +package. + + + + + + +Customizing &kde; + + + +Desktop Icons + +&kde; uses several types of icons: + +Documents + +Links to Websites (using .desktop file) + +Links to Applications (using .desktop file) + +Devices - Disks, Partitions & Peripherals: + +Explicit using .desktop file + +Automatic via devices:// io-slave + + + + +Vendor-specific (⪚ &SuSE;'s My Computer) + + + + +Websites + +Links to Websites using .desktop +file: Create +NewFileLink to +Location (URL). Change Icon using +Properties dialogs. The resulting .desktop file: + +[Desktop Entry] +Encoding=UTF-8 +Icon=/opt/kde3/share/apps/kdesktop/pics/ksslogo.png +Type=Link +URL=http://www.kde.org/ + + + + + +Applications + +Links to Applications using .desktop file: Create +NewFileLink to +Application. You must provide details +yourself. Drag from &kde; Menu: Either copy or link (creates symlink), +much easier + + + + + + +[Desktop Entry] +Encoding=UTF-8 +GenericName=IRC Client +GenericName[af]=Irc Kliët +GenericName[de]=IRC Programm +... +GenericName[zu]=Umthengi we IRC +SwallowExec= +Name=KSirc +Name[af]=Ksirc +Name[de]=KSirc +... + + + +Boiler plate + +Translated generic description, not used on desktop + +Legacy, can be removed + +Translated name as it appears on desktop + + + +Desktop Icons + +... +Name[zu]=Ksirc +MimeType= +Exec=ksirc %i %m +Icon=ksirc +TerminalOptions= +Path= +Type=Application +Terminal=0 +X-KDE-StartupNotify=true +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;Network + + + +Supported &MIME; types, not used on +desktop + +The command line to execute + +The icon, from icon theme or full path + +Only used if terminal is +needed + +Working directory for command + +More boiler plate + +Use true if terminal is needed, +text application + +Show bouncy cursor, +disable if it doesn't work. + +Has app started ok? +Remove if it doesn't work + +Categories for &kde; Menu, not +used on desktop + + + + + + + + +The <varname>Exec</varname> option in <literal +role="extension">.desktop</literal> files + +Following the command, you can have several place holders which will +be replaced with the actual values when the actual program is run: + + +%f A single file name; used when dropping +file on icon, or with file associations. + + + + +%F +A list of files; use for applications that can +open several local files at once. + + + + +%u +A single &URL;: if the app can +handle ⪚ &FTP; or &HTTP; &URL;s itself, otherwise &kde;. + + + + +%U +A list of +&URL;s; will download the file first and pass a local file to the app +(!!) + + + + +%d +The folder of the file to open; useful if app needs to +have file in current working directory. + + + + +%D +A list of folders, not very practical. + + + + +%i +The icon; option; &kde; app +will use icon from Icon= line in taskbar. + + + + +%m +The mini-icon; legacy. + + + + +%c +The caption; option; &kde; +app will use name from Name= line in +taskbar. + + + + + + + +Examples: + +Exec line +Command executed +ksirc %iksirc --icon ksirc + +cd %d; kedit $(basename %f)cd /tmp; kedit file.txt + + + + + + + + + + + +Devices + +Links to Devices using .desktop file: +o Create New -> Device + + + + + +Where to Define + +Many places to define Desktop Icons: + + +~/Desktop: +copied from /etc/skel/Desktop + +$KDEDIR/apps/kdesktop/Desktop +(merged) + +$KDEDIR/apps/kdesktop/DesktopLinks +(copied) + +Device Icons (dynamically +merged) + +Distribution Specific SUSE Linux copies certain icons +in startkde.theme from /opt/kde3/share/config/SuSE/default/ + + + + + + + +&kde; Menu + + +How it Works + +In &kde; 3.2 a common menu format is introduced at +http://freedesktop.org/Standards/menu-spec/ +Before &kde; 3.2: + + +Directory structure under share/applnk + +Directory structure represents menu +structure + +Each .desktop file +represents a single application + + + + +It was difficult to rearrange the structure in &kde; 3.2 so the +new menu format: + +Defines structure in a single .menu file +Is based on categories +is shared between GNOME and &kde; +Supports applnk style menus as well + + + + +Example from applications.menu: + + + <Menu> + <Name>Office</Name> + <Directory>suse-office.directory</Directory> + <Include> + <Filename>Acrobat Reader.desktop</Filename> + <Filename>kde-kpresenter.desktop</Filename> + <Filename>kde-kword.desktop</Filename> + </Include> + <Menu> + + + +Menu entry with 3 applications: + + +/usr/share/applications/Acrobat +Reader.desktop + +/opt/kde3/share/applications/kde/kpresenter.desktop + +/opt/kde3/share/applications/kde/kword.desktop + + + + + + + +Stored Where? + +.menu files describing the +menu structure. The files are stored in $KDEDIR/etc/xdg/menus and +/etc/xdg/menus. These store the +system-wide menu structure and are controlled by +$XDG_CONFIG_DIRS. $HOME/.config/menus stores +user-specific changes to the menu structure and is controlled by +$XDG_CONFIG_HOME. For more information, see http://www.freedesktop.org/Standards/basedir-spec. + +.desktop files describe the +applications and are stored in: $KDEDIR/share/applications, +/usr/share/applications, +/usr/local/share/applications. These are +the system-wide application .desktop files which are controlled by +$XDG_DATA_DIRS. + +$HOME/.local/applications +contains user-specific .desktop +files and user-specific changes. It is controlled by +$XDG_DATA_HOME. For more information, see http://www.freedesktop.org/Standards/basedir-spec + + +.directory files describing +the sub-menus are stored in: $KDEDIR/share/desktop-directories, +/usr/share/desktop-directories, /usr/local/share/desktop-directories. +These are the system-wide menu .directory files, controlled by +$XDG_DATA_DIRS. The user-specific changes are stored in $HOME/.local/desktop-directories. +These are controlled by $XDG_DATA_HOME. For more +information, see http://www.freedesktop.org/Standards/basedir-spec + + +Example from applications.menu: + + + <Menu> + <Name>Art</Name> + <Directory>suse-edutainment-art.directory</Directory> + <Include> + <Category>X-SuSE-Art</Category> + </Include> + </Menu> + + + + +Art is the internal name for this +menu. suse-edutainment-art.directory defines the +name and icon for this menu, and the menu includes all applications +that have X-SuSE-Art listed as a category, ⪚: + +Categories=Qt;KDE;Education;X-SuSE-Art + + +suse-edutainment-art.directory defines the +name and icon for this menu: + +[Desktop Entry] +Name=Art and Culture +Icon=kcmsystem + + + + + + +Common Pitfalls + +Applications not in the menu do +not exist with regard to other applications or +file associations: If you remove an application from the menu, &kde; assumes you don't want to use it. + +When applications are unwanted in the menu, either place them in +.hidden menu or a dedicated menu with + +NoDisplay=true + in the .directory file + + + +Essential Menus + +$KDEDIR/etc/xdg/menus/applications-merged/ +contains kde-essential.menu which includes some +essential menus that are normally not shown in the &kde; menu itself: + +Control Center has a hidden Settings menu whose +contents are defined by kde-settings.menu and +whose icon and name are defined by kde-settings.directory + +Info Center has a hidden Information menu whose +contents are defined by kde-information.menu and +whose icon and name are defined by kde-information.directory. + + +Screensavers contains a hidden System/Screensavers menu, +whose contents are defined by +kde-screensavers.menu and whose icon and name +are defined by +kde-system-screensavers.directory. +$KDEDIR/share/desktop-directories/kde-system-screensavers.directory +contains: + +NoDisplay=true + + + + + + + +Old-Style Menus + +&kde; continues to support old-style menus that are defined by +the directory structures in $KDEDIR/share/applnk +(system wide) and $HOME/.kde/share/applnk +(user specific). This is observed unless the .desktop file has a Categories= line. In that case the categories determine the location in the menu. + + + +<application>KSycoca</application> +KSycoca caches menu structure and +information about all available applications. You can rebuild the +database with +kbuildsycoca. The database +which is built lives in /var/tmp/kdecache-${USER}/ksycoca. +It is automatically updated by KDED, +checked during &kde; login, and KDED +watches for changes while logged in. + +To disable watching for changes (since it may hurt over NFS) add +the following to kdedrc: + +[General] +CheckSycoca=false + + + +To force regeneration, run touch $KDEDIR/share/services/update_ksycoca. + + + + +&kmenuedit; + +&kmenuedit; is aimed at a single user setup. Changes to menu +structure are saved to +~/.config/menus/applications-kmenuedit.menu, +changes to applications are saved in ~/.local/share/applications/ and changes +to sub-menus (icon, name) are saved in ~/.local/share/desktop-directories/. The +KIOSK Admin Tool uses &kmenuedit; and copies the above changes to +profile- or system-wide locations. + + + + + + + + +&kde; Panel + +The &kde; panel is also known as &kicker;. It is modular and +consists of the following components: + +Applets +Application buttons +Special Buttons + + + +By default, the panel contains the following applets: + +Pager - shows the virtual desktops +Taskbar +System Tray +Clock + +and the following special buttons: + +&kde; menu +Desktop Button + + + +Various application buttons are also added, space permitting: + +Home Button +Browser Button +KMail Button + + + + + +File Associations + +File associations associate a file type with an application or +applications. The type of a file is established by determining its +&MIME; type. &MIME; types known by &kde; are stored in $KDEDIR/share/mimelnk and +each application's .desktop file +contains a list of &MIME; types supported by that application. + + +kview.desktop: + +MimeType=image/gif;image/x-xpm;image/x-xbm;image/jpeg; +image/x-bmp;image/png;image/x-ico;image/x-portable-bitmap; +image/x-portable-pixmap;image/x-portable-greymap; +image/tiff;image/jp2 + + + +kuickshow.desktop: + +MimeType=image/gif;image/x-xpm;image/x-xbm;image/jpeg; +image/png;image/tiff;image/x-bmp;image/x-psd;image/x-eim; +image/x-portable-bitmap;image/x-portable-pixmap; +image/x-portable-greymap + + + +Both can open image/gif Which one is used to open a .gif file? + +The application with highest +preference!. kview.desktop contains + +InitialPreference=3 + +whereas kuickshow.desktop contains + +InitialPreference=6 + +Therefore, &kuickshow; will be used to open .gif files. + + +How can we make &kview; default? + +A user can change file association in the +&kcontrolcenter;. These changes are stored in +$HOME/.kde/share/config/profilerc. +To use the same settings for multiple users, store these settings in +user profile directory or the global &kde; config directory to use as +default for multiple users. + + + + + + + + +Locking Down &kde; + + +How It Works - The Basics + +&kde;'s lock down features are centered around the following +options: + + +Make +configuration options immutable +Restriction of specific +actions +Restrict access to certain +&URL;s +Restrict access to +certain configuration modules + + + + + +Immutable Configuration Options +Locking Down &kde; + +Immutable options allow system administrator to provide default +settings that can not be changed by the user. + +Pre-existing configuration options of the user will be ignored once a +configuration option is made immutable. + +Options can be controlled either on a per entry basis, per group of +entries or on a file by file basis. + +If a file or group is immutable, all configuration options for that +file or group are immutable, even those options for which the system +administrator has no default provided. + +The support in applications for immutable options may vary from +application to application. Although the user will not be able to make +permanent changes to immutable configuration options, the user may still be +presented with an user interface option to make such change. + + + + +Action Restrictions + +&kde; applications are built around the action-concept. Actions can be +activated in various ways, typically via the menu-bar, one of the toolbars +or a keyboard shortcut. Save Document is an example of an +action. If you know the internal action name it is possible to restrict an +action. When an action is restricted it will no longer appear in the +menu-bar or toolbar. The internal name for the Save +Document action is . The lock +down framework also provides a set of more abstract restrictions which can +be used to disable functionality not covered by a single action. An example +is the restriction which disables all +functionality that would offer the user access to a &UNIX; shell. + + +Restrict User Access to Shells + +In order to prevent the user access to a command shell we can restrict +the action by adding the following to +kdeglobals: + + +[KDE Action Restrictions] +shell_access=false + +Since this affects the &kde; menu and the available applications, we +must force an update of the sycoca database: + +touch $KDEDIR/share/services/update_ksycoca + +Now re-login to &kde; and check the following points: + + +The &kmenu; +In &konqueror;, +ToolsOpen +Terminal +The &Alt;F2 run +command + + +Full documentation about available actions can be found on http://www.kde.org/areas/sysadmin/. + +A few of the more interesting actions are listed below: + + + + +The Configure option form the +Settings menu + + + +The Report Bug option from the +Help menu. + + + +&RMB; mouse button menu on the desktop. + + + +&RMB; mouse button menu on the panel. + + + +Hide all actions or applications that require root access. + + + +Hides all actions or applications that provide shell +access. + + + +Disables the option to select the printing system +(backend). + + + +Whether the user will be able to lock the +screen + + + +Whether the user may start a second X session (see also +&kdm;) + + + +Whether OpenGL screensavers are allowed to be +used. + + + +Permit screensavers that do not hide the entire +screen + + + + + + +&URL; Restrictions + +There are three types of restrictions that can be applied to +&URL;s: + + + +list +To control whether a directory listing is +allowed. + + +open +To control whether certain &URL;s can be +opened + + +Redirect +To control whether one &URL; can open another &URL;, either +automatically or via a hyperlink. + + + +Rules are checked in the order in which they are defined. The last +rule that is applicable to a &URL; defines whether the &URL; may be +accessed. + +The following rules disable opening http and https &URL;s outside +.ourcompany.com: + + + + + + +[KDE URL Restrictions] +rule_count=2 +rule_1=open,,,,http,,,false +rule_2=open,,,,http,*.ourcompany.com,,true + + + +The first four commas skip over the selection criteria with respect to +the originating &URL;. This part is only needed with redirect type +rules. + + forbids the +opening of any http or https &URL; + allows the +opening of any http and https &URL; in the .ourcompany.com domain. Note the wildcard +* is only allowed at the start of a domain. + + +The following rules makes that the user can no longer browse +directories on the local file system that are outside his +$HOME directory: + + + + + +[KDE URL Restrictions] +rule_count=2 +rule_1=list,,,,file,,,false +rule_2=list,,,,file,,$HOME,true + + + forbids the +listing of any local directory + allows listing +directories under the users own $HOME +directory. + + +$HOME and $TMP are special values to +indicate the users home directory and the &kde; temporary directory of the +user, ⪚ /tmp/kde-bastian + +The following rules makes that the user can no longer open local files +that are outside his $HOME directory: + + + + + + +[KDE URL Restrictions] +rule_count=3 +rule_1=open,,,,file,,,false +rule_2=open,,,,file,,$HOME,true +rule_3=open,,,,file,,$TMP,true + + + forbids the +opening of any local file + allows opening +files under the users own $HOME directory. + allows opening +files in the &kde; temporary directory of the user. This is needed by +certain &kde; applications that first download a file or document to the +temporary directory and then open it in an application. + + + +The redirection option controls whether documents from a certain +location can refer, either automatically or manually via a hyperlink, to a +certain other location. A set of default rules is present as a general +security measure. For example documents located on the Internet may not +refer to locally stored documents. + +For example, if we want to give the intranet-server www.mycompany.com the possibility to refer +to local files we could add the following rule: + +[KDE URL Restrictions] +rule_count=1 +rule_1=redirect,http,www.mycompany.com,,file,,,true + +Instead of listing a protocol by name, it is also possible to specify +a whole group of protocols. For that the following groups have been +defined: + + + +:local +Protocols that access locally stored information, examples +are file:/, man:/, fonts:/, floppy:/ + + +:internet +Common internet protocols such as http and +ftp + + + +Information about protocols is stored in *.protocol files stored in +$KDEDIR/share/services. + +The = entry defines the group a protocol is part +of: +grep +$KDEDIR/share/services/*.protocol + +General rules: + + +The :local protocols may refer to any other +protocol +It's always allowed to refer to an :internet +protocol +Not all protocols are part of a group, fish:/ for +example. + + + + + +Configuration Modules + +&kde; has configuration modules to configure various aspects of the +&kde; environment. Configuration modules appear in the Control Center, in the +Configuration dialog of an application or in both. + + +The proxy configuration module appears in the Control Center but also +as part of the Configure Konqueror dialog in +&konqueror; + +Individual configuration modules can be started with +kcmshell module + +To start the Proxy module use: + +kcmshell +kde-proxy.desktop +kcmshell proxy + + +Not all applications use configuration modules, often the +configuration dialog is an integral part of the application +itself. + + +All configuration modules are strictly speaking part of the &kde; +menu. + + + +The modules that are visible in the Control Center normally +have a .desktop file in $KDEDIR/share/applications/kde +and are sorted under the hidden Settings-Modules menu by +the kde-settings.menu, included from +kde-essential.menu +kbuildsycoca 2> /dev/null | grep Settings-Modules + + +Application specific modules normally have a .desktop file under +$KDEDIR/share/applnk/.hidden which +corresponds to the hidden .hidden menu, included as a result of +<KDELegacyDirs/> +kbuildsycoca 2> /dev/null | grep .hidden + +In &kde; 3.3 it is possible to edit the Control Center with +kcontroledit. +kcontroledit works just like +kmenuedit, changes for current user only. Use +kiosktool to make changes for +everyone. + + +Individual configuration modules can be disables by adding the +following to kdeglobals: + +[KDE Control Module Restrictions] +module-id=false +For example, to disable the proxy module use +[KDE Control Module Restrictions] +kde-proxy.desktop=false +Check the Control Center and the Configure +Konqueror dialog if the proxy configuration is still +there. + + + + + + +The Lazy Admin + + + + + + + +Remote Desktop Sharing + +Remote desktop sharing allows remote users to view and optionally +control the desktop of the current user. The remote user needs to be sent +an invitation, and it is possible to create a password protected standing +invitation. This is ideal for tech support teams or administrators to gain +access to users desktops in order to troubleshoot or remedy a problem or +guide a user through a procedure. + +Remote desktop sharing involves two applications: &krfb; (&kde; remote +frame buffer, a VNC server) and &krdc; (&kde; remote desktop connection; a +VNC client.) + +&krfb; can be used by any user to create and manage invitations. +Invitations create a one time password that allows the recipient to connect +to your desktop. By default it is valid for only one successful connection, +and expires after one hour if not used. + +Incoming connections are handled by the kinetd kded module. You can +use the command dcop kded kinetd +services to see if it is running. &krfb; waits for connections +on port 5900 by default. When an incoming connection is made, a dialog will +appear to ask for confirmation by the current user. + + + + + + +&kde; DIY - Building Your Own Tools + + +DCOP + + +Desktop COmmunication Protocol, DCOP, is a lightweight mechanism for inter-process communication. +DCOP allows the user to interact with programs that are currently running. +&kde; supplies two programs to utilitize DCOP: +dcop, a command-line program, and +kdcop, a GUI program. + + +A few notes about using dcop: + + + + + + +dcop [options] [application [object [function [arg1] [arg2] ... ] ] ] + + + + +Applications that can open more than one window at a time will be listed as +<application>-PID + + + + +All the arguments are case-sensitve. setFullScreen and setfullscreen are two different functions. + + + + +The regular expression token * can be used in the application and object arguments. +% dcop +konqueror-16006 +konsole-8954 + + + + + + + + +Some example commands and their output are below: + + + +% dcop +konsole-8954 + +One &konsole; is running with a PID of 8954. + +% dcop +KBookmarkManager-.../share/apps/kfile/bookmarks.xml +KBookmarkManager-.../share/apps/konqueror/bookmarks.xml +KBookmarkNotifier +KDebug +MainApplication-Interface +konsole (default) +konsole-mainwindow#1 +ksycoca +session-1 +session-2 +session-3 +session-4 + +Here you see that there are four sessions running. + +% dcop +QCStringList interfaces() +QCStringList functions() +int sessionCount() +QString currentSession() +QString newSession() +QString newSession(QString type) +QString sessionId(int position) +void activateSession(QString sessionId) +void nextSession() +void prevSession() +void moveSessionLeft() +void moveSessionRight() +bool fullScreen() +void setFullScreen(bool on) +ASYNC reparseConfiguration() + +Here are the options for the main &konsole; program. + + +% dcop +QCStringList interfaces() +QCStringList functions() +bool closeSession() +bool sendSignal(int signal) +void clearHistory() +void renameSession(QString name) +QString sessionName() +int sessionPID() +QString schema() +void setSchema(QString schema) +QString encoding() +void setEncoding(QString encoding) +QString keytab() +void setKeytab(QString keyboard) +QSize size() +void setSize(QSize size) + +Here are the options for the first session, session-1. + +% dcop true + +This sets &konsole; to full screen. + + + + +When there is more than one application/object, which one should you use? + Got a reference? + +% echo +DCOPRef(konsole-7547,konsole) + +% dcop +session-6 + +% dcopstart +konsole-9058 + + +#!/bin/sh +konsole=$(dcopstart konsole-script) +session=$(dcop $konsole konsole currentSession) +dcop $konsole $session renameSession Local + +session=$(dcop $konsole konsole newSession) +dcop $konsole $session renameSession Remote + +session=$(dcop $konsole konsole newSession) +dcop $konsole $session renameSession Code +dcop $konsole $session sendSession 'cd /my/work/directory' + + + + + + +KDialog +&kde; DIY - Building Your Own Tools + +You can use &kde; dialogs from your own scripts, to combine the power +of &UNIX; shell scripting with the ease of use of &kde;. + +kdialog + +kdialog + +The KDialog part can be replaced via + option + +kdialog + +Saves whether to show again in +$KDEHOME/share/config/myfile (by writing +into this file the following lines: + +[Notification Messages] +mykey=false + +Instead of you can also use + and , as appropriate. For +instance, you might use kdialog or kdialog +. + +It is also possible to create message boxes that accept a yes or no +answer. + +kdialog echo $? + + + + + +Return Value +Meaning + + + +0Yes, OK, Continue +1No +2Cancel + + + + +Make sure to store the result in a variable if you do not use it +directly, the next command will fill $? with a new value You can use + here as well, it will remember the users choice +and returns it the next times without showing the dialog any more. + +Further variations are: + + + + + +like but with a different +icon + + + + +With Continue and +Cancel buttons. + + + + +With Yes, No +and Cancel button. For example: +kdialog + + + + +kdialog + +The result is printed to stdout, to put it in a variable you can use +name=$(kdialog --inputbox "Enter your name:" +"YourName"). The last argument is optional, it is used to +pre-fill the dialog. + +password=$(kdialog ) + +The option does not work with + or + +There are two dialogs that let the user make a choice from a +list: + + + + + +Lets the user select a single item from a list. + + + + + +Lets the user select one or more items from a list. + + + + +city=$(kdialog ) + +$city will a, b, c or d. + +city=$(kdialog ) + +Madrid and Paris will be pre-selected. The result with Madrid and +Paris selected will be "b" +"c". + +If you add the option, it will put +b and c each on a line +of its own, making the result easier to process. + +file=$(kdialog --getopenfilename $HOME) +file=$(kdialog --getopenfilename $HOME "*.png *.jpg|Image Files") +file=$(kdialog --getsavefilename $HOME/SaveMe.png) +file=$(kdialog --getexistingdirectory $HOME) + + + + + + + +&groupware-with-kontact; + + + + diff --git a/doc/userguide/kde-office.docbook b/doc/userguide/kde-office.docbook new file mode 100644 index 000000000..176180294 --- /dev/null +++ b/doc/userguide/kde-office.docbook @@ -0,0 +1,321 @@ + + + + + +Raphael +Langerhorst + +raphael.langerhorst@kdemail.net + + + + + + + +Office + + +Introduction to KOffice + + +Overview + +The &kde; project has also created a fully featured office suite +called &koffice; which adheres to standards and fits very well into +the &kde; desktop. This section was written with version 1.4 of +&koffice; in mind. + + +&koffice; is a highly integrated office suite that builds directly on the +KDE technology. This has many advantages in terms of integration, features, +performance, familiar look and feel and so on. All technologies like &DCOP;, +KIO, KParts are directly available. + + +In particular the KParts technology is extended for the &koffice; +components to allow very flexible embedding of documents inside documents. + + +Because much technology is already present inside &kde; itself, &koffice; is +a very lightweight office suite, which results in fast application startup +and low memory consumption. This makes &koffice; a very suitable office suite +for older hardware as well, which can save lots of costs in some cases. + + +&koffice; is also a very feature complete office suite. It is not limited to +word processing, spreadsheets or presentations, but has also components for +image manipulation, flow charts, business report generation, database +management and project management. Because of the flexible component +integration smaller utilities like the diagram and chart engine as well +as the formula editor are available as stand alone tools. + + +As you can see &koffice; brings a lot of features that can enrich your +office experience. Its straight forward and &kde; like approach in look +and feel as well as familiar usability makes &koffice; quite useful for +daily office work. + + + + + +Features + +This list gives a general outline of the &koffice; features. +The &koffice; office suite is too large to list every detail. + + +&koffice; features: +Fully builds on &kde; which makes these technologies available at low costs. +Fully integrates into &kde; which is vital for business environments. +&kde; technologies include document location abstraction, DCOP scripting, parts and plugins,... +Full Component embedding. +Low memory footprint, fast startup, lightweight. +Feature complete: many components are offered. +Intuitive, good looking and easy to learn user interface. +Adheres to standards: OASIS OpenDocument file format. + + + + +OASIS OpenDocument file format + +It is important for an office suite to use standards where possible, +especially for the file format. The OASIS OpenDocument file format +specification is an open standard for office applications. This +format is spreading more and more, it is also the same file format +OpenOffice.org uses, which means that file exchange with any +user of this office suite is easily possible. + + +Adhering to official standards is always a good thing. For business +environments it is even vital to exactly know about their documents. + + +&koffice; has more components to offer than what is covered by the +OASIS specification. Still, all components covered by the specifications +actually use the OASIS OpenDocument file format. + + + + + + + +&koffice; Components Overview + +Keep in mind that all these components can integrate very well into each other. So basically a spreadsheet can contain anything from charts to presentations, reports and even text documents. Likewise almost any component can contain almost any other. + + + + +&kword; + The textprocessing component, but it includes many aspects of a desktop publishing application. This creates a rather unique mixture of features that makes interesting layouts easily possible. + + + Website: http://www.koffice.org/kword/ + &kword; Handbook + + + + + + +&kspread; + The spreadsheet component. &kspread; is a scriptable spreadsheet program which provides both table-oriented sheets and support for complex mathematical formulas and statistics. Features include Hyperlinks, cell data validity checking with configurable warnings/actions, scripting and specific cell customization. + + + Website: http://www.koffice.org/kspread/ + &kspread; Handbook + + + + + + +&kpresenter; + The presentation component. It can be used to create on-screen presentations or to design and print transparencies. Features include embedding images and clip-art, easy working with objects, and the ability to make &HTML; or &XML; slideshows. + + + Website: http://www.koffice.org/kpresenter/ + &kpresenter; Handbook + + + + + + +&kivio; + The flowcharting and diagramming component. Additional stencil sets can be used for custom needs, there is a plugin framework for additional functionality, and even UML diagrams are possible. + + + Website: http://www.koffice.org/kivio/ + &kivio; Handbook + + + + + + +&karbon14; + A vector-drawing application. + + + +&krita; + The painting and image manipulation component. &krita; contains both ease-of-use, fun features like guided painting, as well as high-end features like support for 16-bit images, CMYK and even OpenEXR HDR images. + + + Website: http://www.koffice.org/krita/ + &krita; Handbook + + + + + + +&kugar; + The appropriate component for creating business reports, which is accomplished with an advanced designer that it has. Features include report printing in postscript, full control of fonts, colors, text alignment and wrapping, as well as open report definition files (with the layout stored as &XML;). + + + Website: http://www.koffice.org/kugar/ + &kugar; Handbook + + + + + + +KPlato + The component for project management, allowing for the planning and scheduling of various projects. + + + Website: http://www.koffice.org/kplato/ + + + + + + +&kexi; + The data management component. It can be used for creating database schemas, inserting data, performing queries, and processing data. Forms can be created to provide a custom interface to your data. All database objects -- tables, queries and forms -- are stored in the database, making it easy to share data and database design. + + + Website: http://www.koffice.org/kexi/ and http://kexi-project.org. + &kexi; Handbook + + + + + + +&kchart; + The chart drawing component; it is used to embed charts into one of the other &koffice; components. It's easy to use, highly customizable allowing all of the parameters to be changed, and has a flexible layout. + + + Website: http://www.koffice.org/kchart/ + &kchart; Handbook + + + + + + +&kformula; + A formula editor which provides the basic input facilities and support functionality that appears in other &koffice; applications. Some of its features include intelligent cursor management, multi-level undo support and advanced syntax highlighting. + + + Website: http://www.koffice.org/kformula/ + &kformula; Handbook + + + + + + + + +Related Information + Main website: http://www.koffice.org. + &koffice; Handbook + + + + + + +Further Information + +Application Manuals +Each Koffice component comes with its own manual. +These manuals offer all the latest information about the +various components &koffice; has to offer and should be +read to learn more about &koffice;. The application manuals can be accessed by using the documentation KIO Slave in &konqueror; (that is, typing help:/application into the Location toolbar) or by selecting the respective handbook from the &khelpcenter;. The website is +also a good place to find out more; it is at http://www.koffice.org. + + + +Internet Resources +The primary site on the internet is +http://www.koffice.org +You will also find information about the user and developer +mailing lists as well as additional developer resources. +The Kexi project has even an additional website, which can be +found at http://www.kexi-project.org + + + + +Plugin development +&koffice; can easily be extended with plugins. Plugin development is +not very difficult and can be used to optimize your everyday workflow. Such +capabilities are probably very interesting in business environments to +make &koffice; meet individual requirements. You can either take a look +at existing plugins or read a general introduction at + +the developer's site. The general KDE developers website is available +at http://developer.kde.org. + + + + + diff --git a/doc/userguide/kmag.png b/doc/userguide/kmag.png new file mode 100644 index 000000000..cba958528 Binary files /dev/null and b/doc/userguide/kmag.png differ diff --git a/doc/userguide/kmousetool.png b/doc/userguide/kmousetool.png new file mode 100644 index 000000000..371f041ae Binary files /dev/null and b/doc/userguide/kmousetool.png differ diff --git a/doc/userguide/kmouth.png b/doc/userguide/kmouth.png new file mode 100644 index 000000000..c5507eaba Binary files /dev/null and b/doc/userguide/kmouth.png differ diff --git a/doc/userguide/kmouth2.png b/doc/userguide/kmouth2.png new file mode 100644 index 000000000..6cf0e613e Binary files /dev/null and b/doc/userguide/kmouth2.png differ diff --git a/doc/userguide/kmouth3.png b/doc/userguide/kmouth3.png new file mode 100644 index 000000000..8bed5a532 Binary files /dev/null and b/doc/userguide/kmouth3.png differ diff --git a/doc/userguide/knode-identity.png b/doc/userguide/knode-identity.png new file mode 100644 index 000000000..c9f63347f Binary files /dev/null and b/doc/userguide/knode-identity.png differ diff --git a/doc/userguide/knode-mail-account.png b/doc/userguide/knode-mail-account.png new file mode 100644 index 000000000..f2271662f Binary files /dev/null and b/doc/userguide/knode-mail-account.png differ diff --git a/doc/userguide/knode-news-account.png b/doc/userguide/knode-news-account.png new file mode 100644 index 000000000..e046870f1 Binary files /dev/null and b/doc/userguide/knode-news-account.png differ diff --git a/doc/userguide/knode-start.png b/doc/userguide/knode-start.png new file mode 100644 index 000000000..1057f946b Binary files /dev/null and b/doc/userguide/knode-start.png differ diff --git a/doc/userguide/konq-sidebar.png b/doc/userguide/konq-sidebar.png new file mode 100644 index 000000000..0e9328e3a Binary files /dev/null and b/doc/userguide/konq-sidebar.png differ diff --git a/doc/userguide/konq-simple.png b/doc/userguide/konq-simple.png new file mode 100644 index 000000000..a35133865 Binary files /dev/null and b/doc/userguide/konq-simple.png differ diff --git a/doc/userguide/konsole-intro.docbook b/doc/userguide/konsole-intro.docbook new file mode 100644 index 000000000..d42b4f59a --- /dev/null +++ b/doc/userguide/konsole-intro.docbook @@ -0,0 +1,126 @@ + + + + + +Gardner +Bell + + + + + +&konsole; Introduction + +Extremely brief intro to managing in a shell + +Emergency procedures: killing wild apps, etc + +SSH, sessions, envars, other fun things + +Some tips and tricks + + + + +&konsole; is a terminal emulator for the X Window System. It is +essentially based on the DEC's VT100 +and many of its succesors. &konsole; – also referred to as a +shell – is an +essential tool on &Linux; and &UNIX; based machines for fast and productive +work. + +Emergency Procedures: + +On &Linux; and &UNIX;-based systems every process runs independently in its own memory +space so it can't accidentally overwrite any other processes memory, unless +of course it has root privileges. +If a process in &kde; crashes due to a bug one should not need to worry +about it accessing any other active process. + +To keep track of all system processes use the top +command or ps in &konsole;. Using these utilities will +make it much easier to find and kill off rogue programs. + +An example of using signals in &konsole;, &konqueror; has crashed +leaving behind a running process of +nspluginviewer which is taking up 12% of your +memory and 10% of your cpu cycles. In top use the k +command switch to kill the task. You will be prompted for the PID and then +the signal to send to kill it. For more on info on what signals you can +send to a running process see the full manual on signals (type +man signal in a &konsole; or go to +#signal in &konqueror;). + +SSH, sessions, envars, other fun things. + +If you are using &konsole; for remote administration consider using +&konsole;'s Session feature. To use this click on the menu +entry +SettingsConfigure &konsole;. +From here choose the Sessions tab and fill in the +name for your new session. This will now become your default session when +you start &konsole;. + +When &konsole; is invoked bash specific +commands and &kde; specific variables are read and executed from +~/.bashrc or ~/.bash_profile. +The preferred configuration file for user environments is +~/.bash_profile, the commands +printenv or env can be used to +display all currently set variables. To set a variable in the shell use +VARNAME=value. For a full +list of variables that can be set in &kde; see the wiki +. + +Some tips and tricks + +To rename &konsole;'s session use &Ctrl;&Alt;S and enter the new +name. + +If you find the need to run any &kde; program with root privileges, you can use the &kdesu; command with the switch +from the command line like this: kdesu +, using +the switch will prevent &kde; from remembering your +passwords. + + + +Related Information + + +The &konsole; +Handbook has much more information about the features available in +&konsole;. You can read it in &khelpcenter; or by entering +help:/konsole in &konqueror;'s +Location bar. + + + + + + + + + + + diff --git a/doc/userguide/kopete.png b/doc/userguide/kopete.png new file mode 100644 index 000000000..446a26655 Binary files /dev/null and b/doc/userguide/kopete.png differ diff --git a/doc/userguide/kppp-dialer-tab.png b/doc/userguide/kppp-dialer-tab.png new file mode 100644 index 000000000..bb344979f Binary files /dev/null and b/doc/userguide/kppp-dialer-tab.png differ diff --git a/doc/userguide/kppp-wizard.png b/doc/userguide/kppp-wizard.png new file mode 100644 index 000000000..cbb731fcb Binary files /dev/null and b/doc/userguide/kppp-wizard.png differ diff --git a/doc/userguide/messaging-intro.docbook b/doc/userguide/messaging-intro.docbook new file mode 100644 index 000000000..8d042a451 --- /dev/null +++ b/doc/userguide/messaging-intro.docbook @@ -0,0 +1,188 @@ + + + + + +Peter +Nuttall + + + +Tom +Albers + + + + + + + +Introduction to messaging + + +The default way to send instant messages in &kde; is to use the IM +client, &kopete;. This is a multi-protocol IM client, meaning that it +handles several different protocols including MSN, +Jabber, AOL and IRC. It also has +useful features including support for &kaddressbook;, meta-contacts, +encryption support and lots more. + + +&kopete;, the &kde; IM client. + + + + +&kopete;, the &kde; IM client. + + +&kopete;, the &kde; IM client. + + + + + +How to get started + +Start up &kopete; from the menu (it can normally be found in the +Internet folder) When it starts up you should see a window with &kopete; +at the top, menus and a tool bar below, and then your contacts below. +You should add some accounts by clicking on the +Settings menu and selecting the Configure +Kopete option. By selecting the Accounts +option you should see a list of your accounts (initially empty) and +options to add new accounts and to edit or remove existing accounts. +By clicking on the add new account button, you can +add a new account using the wizard. When you have added an account, you can +connect to this account by clicking on the relevant icon at the bottom of +your main &kopete; window. This should make your contacts appear in the +contacts window. + + + + +Meta-contacts + +Meta contacts are one of the features of &kopete; that make sense +once you figure out what they are. Until you do, they annoy you. They are +basically a way of taking a contact on one network (such as +MSN) and linking it to another contact on a different +network. This is useful for when people have accounts on different networks +as you can chat to them without needing to know which account they are +signed on to. This also lets you assign names to your meta-contacts that +don't change when people change their names on their account, this is useful +if you have contacts who insist upon setting their +MSN nick to something like +=EF=81=8A. + +You can do other useful things with meta-contacts like link them to +entries in your address book. See + + + + +<acronym>IRC</acronym> + +Internet Relay Chat (IRC) has been around far longer than most IM +systems, and is still widely used. It is mainly designed for group (many-to-many) communication in discussion forums called channels, but also allows one-to-one communication. + +The #kde channel is under Freenode, the IRC server, which provides an interactive environment for coordination and support of peer-directed projects, including -- and placing particular stress upon -- those relating to free software and open source projects, such as &kde;. + + +While &kopete; has a IRC plugin, and handles both channels and nicks well, +long time IRC users might prefer a client designed just +for that role, which is what Konversation is. It supports features such +as granting and taking op status, banning, easy nick changing, special +channel support for passwords and invites, and other things that the power +IRC users expect. It also is far better at handling +large channels such as #debian. If you have used another +power-IRC client before, you should have no trouble using +Konversation. + + + + + +Linking email and messaging + +Did it happen to you? You received an email and the first thing +you would like to do is to give a reaction on it, but not by +email. So you switch to your instant messaging client and/or IRC +client and look if that person is online via MSN, Jabber or IRC. Well +&kde; 3.3 has made that a lot easier. A step-by-step manual: + +The requirements are &kmail;, &kaddressbook; and &kopete; +(Konversation should do as well). Make sure &kmail; is configured and +fully functional for email, and Kopete is well configured for IRC, +Jabber and/or MSN and/or any other protocol. + +If an email comes in from a contact you know, the first thing +you have to do is to add it to your address book. This can be achieved +by right clicking the address and choosing the entry Add to Address +Book. + +If you know the nickname which the user uses on, for example, IRC, +go to &kopete;. Go to +FileAdd +contact . In the wizard, select the +checkbox at the bottom called Use the KDE address book for +this contact and choose Next. Select +the right Address Book entry for that contact and press +Next. Now you can set the display name and the +group it belongs to for &kopete;. In the next screen select which +protocol should be used if you have set up more then one protocol. You +can select more than one protocol. After that, depending on the +protocol, there will be some other questions, which you can answer as +you like. + +Although we did specify to choose from the address book, +&kopete; has not automatically linked your contact to the address +book. So select the contact and choose +EditProperties +. On the General tab check the box +labeled Has address book entry. Press +... and select the contact. Close these two +windows. + +Now go to your addressbook, if you select the contact you will +see that it shows an extra field Presence, followed by the current +status. This status will automatically update as soon as the contact +goes away, offline, online, and so on. Now go to &kmail;, select another email and return to the original email (in other words: reload +the current email). You can now see behind the email address the +current state of your contact. + +If you want to chat with this person, just right click the +address in &kmail; and choose Chat With.... Your +Instant Messenger will start a conversation with the contact. + + + + + + + + + + + diff --git a/doc/userguide/migrator-applications.docbook b/doc/userguide/migrator-applications.docbook new file mode 100644 index 000000000..fee1caacd --- /dev/null +++ b/doc/userguide/migrator-applications.docbook @@ -0,0 +1,272 @@ + + + + +&Francis.Giannaros; &Francis.Giannaros.mail; + + + + +Application Guide for Migrates + + + +&kde; has many applications, often prefixed with (or containing) the letter k. The names are generally self-explanatory, but it can still be difficult sometimes to find the appropriate packages. Migrates from operating systems such as Microsoft Windows or Apple Macintosh might have some difficulty in locating an application for a particular job. Below is a table with an expansion on the &kmenu; and the respective Win/Mac equivalent. + +Sample Table + + + + + + + + + &kmenu; Location + &kde; Application + Windows Equivalent + Macintosh Equivalent + Notes + + + + + + File Manager + &konqueror; (Home Folder) + Windows Explorer + Integrated file manager, content +viewer/player and web browser + + + System and User Settings + &kcontrol; + Control Center + + + Office + Office Suite: + + Word Processing + Spreadsheets + Slide Presentations + Flowchart & Diagram Editing + Scalable Graphics + Image Manipulation + Report Generator + Chart + Database Creation + Formula Editor + + + + + + + &kword; + &kspread; + &kpresenter; + &kivio; + &karbon14; + &krita; + &kugar; + &kchart; + &kexi; + &kformula; + + + + + + + MS Word + MS Excel + MS Powerpoint + Adobe Illustrator + Adobe Photoshop + Report Generator + Chart + MS Access + + + + + + + + + + + + Personal Information Management: + + Mail + Address Book + Personal Organizer + News Reader + Pop-up Notes + RSS Reader + + + + + + &kmail; + &kaddressbook; + &korganizer; + &knode; + &knotes; + &akregator; + + + + + MS Outlook + + The Personal Information Manager is &kontact;; all other &kde; PIM applications integrate into it. + + + + + Internet + Web Browser + &konqueror; + MS Internet Explorer + Safari + Integrated file manager, web browser, FTP manager, and univerval viewing application. + + + + + + Instant Messaging + &kopete; + + AIM + MSN + ICQ + Jabber + Novell GroupWise + Yahoo + IRC + SMS + + + + MSN Messenger + Comprehensive multi-network compatible instant messaging software + + + + Chat (IRC) + &ksirc; + mIRC + + + + Multimedia + Music/Audio + &juk; + Windows Media Player + + + + &CD;/DVD Burner + K3b + Nero + + + + Video Player + &noatun; + Windows Media Player + + + + Audio &CD; Ripper + KAudioCreator + + + + Sound Controls + &kmix; + + + + System + System Info Center + &kinfocenter; + + + + Terminal + &konsole; + CMD + + + + User Manager + &kuser; + User Manager + + + + Package Manager + &kpackage; + Add/Remove Programs + + + + Utilities + Archiver + &ark; + WinZip + + + + Password Manager + KWallet + + + + Text Editor + &kate; + Notepad + + + + + + +
+ + +Related Information +Many more &kde; applications are available from the &kde; extragear (see for more information) or from http://kde-apps.org. +Reference: http://kudos.berlios.de/kf/kf1.html#pkgtablestock + + +
\ No newline at end of file diff --git a/doc/userguide/migrator-dictionary.docbook b/doc/userguide/migrator-dictionary.docbook new file mode 100644 index 000000000..4bd2efa5d --- /dev/null +++ b/doc/userguide/migrator-dictionary.docbook @@ -0,0 +1,38 @@ + + + + + + +Dictionary for Migrators + +Tables of terminology differences + + + + diff --git a/doc/userguide/net-connection-setup.docbook b/doc/userguide/net-connection-setup.docbook new file mode 100644 index 000000000..cd44fda34 --- /dev/null +++ b/doc/userguide/net-connection-setup.docbook @@ -0,0 +1,238 @@ + + + + + +&Lauri.Watts; + + + + + +Setting up an Internet Connection + + + +&kde; offers a complete Internet experience, with all the +programs you'll need to make the most of the Web, email, Usenet and +many other Internet technologies. But before you can enjoy &kde;'s +advanced features, you'll need to get online. Here's how: + +If you're using dialup (that is, connecting to +the Internet with a modem connected to a telephone line), you'll want +to set up the &kde; dialing program, &kppp;. If that sounds +complicated, don't worry: &kppp; has an advanced configuration wizard, +which will usually take the pain out of setting up your dialup +connection. Take a look at the next two sections for more +details. + +If you're using a broadband connection, or connecting via a +local network, things are easier (from the point of view of +&kde;). Once you've set up the connection with the tools provided by +your &Linux; or &UNIX; distribution, &kde; will use the connection +automatically. + + +Getting online the easy way + + +A few things you should have ready before you start + +If you have a fairly modern &Linux; distribution, you might find the rest +of this document superfluous. &kppp; comes with a clever little wizard that in +many cases can have you up and running with an internet connection in just a few +minutes. + +Whether using the wizard or not, you should know the following information +before you begin: + + +Your ISP modem pool phone +number. +Your username and password for your +ISP. +Your ISP's DNS servers +(one is sufficient, but two is better). + + +Other optional information you should find out to fully access your +ISP's services are: + + +The incoming mail server address (often pop.yourisp.com or mail.yourisp.com).Also find out if +your ISP uses the POP3 protocol or IMAP. +The outgoing (SMTP) mail server address (it +could be the same as the incoming mail server, or it is often called something +like smtp.yourisp.com). +The Usenet News (NNTP) server address (possibly +news.yourisp.com or nntp.yourisp.com). +Any proxy servers your ISP has set +up. + + +All this information is probably available on any paperwork you received +from your ISP when you signed up with them, or you can find +it out from your ISP's support telephone line. + +Armed with the above, and a fairly recent default installation +of &Linux;, you may well find that setting up an internet connection +is as simple as running the &kppp; wizard. + + + + + + + +The &kppp; wizard + + +Starting the Wizard. + +You can start the wizard from &kppp;'s initial screen. Start &kppp; from +your K menu, where you will find its entry in the +Internet as &kppp; (Internet Dial-Up +Tool. + +The following dialog will appear: + + +The &kppp; dialer startup dialog + + + + +The &kppp; dialer startup dialog + +The &kppp; dialer startup dialog + + + +It will probably not have any entries to begin with, and that's +what we're about to do now. + +Click the Configure... button to begin setting up a new +Internet connection. + +The wizard will offer you three choices, Wizard, +Dialog Setup and Cancel + + +The wizard asks you what you want to do... + + + + +The wizard asks you what you want to +do... +The wizard asks you what you want to do + + + + + +Cancel +Choose this if you really don't want to be setting up a new +account right now. The message box will go away, and you will be left with the +dialer window as before. + + + +Wizard +If you have a fairly standard modem, and use one of the larger +ISP's for your country, the wizard will probably be able to set you up +immediately with a working Internet Connection. Try this first, before you try +to set up the connection manually. + + + +Dialog Setup +If you don't succeed with the Wizard, or you just want to do +things yourself, choose this. The wizard currently is only useful for a small +subset of countries and Internet Providers. + + + + +For the purposes of this chapter, we'll assume you are choosing +Wizard, and the dialog based setup will be +described in a later chapter. + + + + +The Rest of the Wizard + +The first window you see contains just introductory text, explaining the +things you read about in the first section of this chapter. Click +Next to move on. + +The second window asks you to choose the country you live in. Not all +countries are represented here, and if the country you live in is not listed, +you will have to click Cancel, in which case the Dialog-based setup will start for you to continue +with. + +On the next window, you will be given a choice of Internet +Providers that &kppp; knows about, based on your choice of location in +the previous window. Again, if your ISP is not +listed here, you will have to click Cancel and +do your setup in the Dialog-based setup + +You will now be asked to enter your username and password for your +internet connection. Please note, that for some ISPs this +differs from your mail account user name and password, so make sure you use the +right one. Choose Next to continue. + +On the next window, you have a chance to enter any special dial prefixes +you might have - for example, if you must dial 0 for an outside +line, or if you have a prefix you can dial to turn off call waiting. Choose +Next to continue. + +And that's all! If you want to revisit any of your choices, you can use +the Back and Next buttons to move +back and forth through the dialogs. When you're done with your settings, click the +Finish button, and you're all done. + +If you need more details, you can read the full &kppp; +manual in the &kde; Help Center, or by typing +help:/kppp in the Location +bar in &konqueror;. + + + + + + + + + + + + + + + diff --git a/doc/userguide/networking-with-windows.docbook b/doc/userguide/networking-with-windows.docbook new file mode 100644 index 000000000..ba8ef0596 --- /dev/null +++ b/doc/userguide/networking-with-windows.docbook @@ -0,0 +1,128 @@ + + + + +Gardner +Bell + + + + + +Networking With Windows + + This section is borrowed and modified from Alexander Neundorf's +README file on LISa. + +&kde; features two powerful servers called the Lan Information +Server (LISa) and Restricted Lan +Information Server (resLISa) which are used +to identify CIFS and other servers on your local network providing a +function similar to Network Neighbourhood in +&Microsoft; &Windows;. + + +How It Works + +&lisa; only depends on the TCP/IP stack so samba configuration is not +required to make it work but the samba package is a dependency. To find +hosts on your local network you set a range of IP-Addresses in your +configuration file that &lisa; will check. When you start the &lisa; daemon +it will send a ICMP, +echo request message to all the IP addresses given in the configuration file +and await a response. + +The &lisa; daemon requires root privileges to open the socket, +but once the socket has been established root privileges are immediately +dropped. + +You can also execute &lisa; using nmblookup +.If you do not have the +nmblookup program it can be found at http://www.samba.org or through packages +provided by your distribution. The samba command +nmblookup will send a broadcast +message to the attached network and any host that is running the +smb-services will send a reply stating that it is accepting +connections. + + + +<application>resLISa</application> + +If your company network has very strict guidelines governing what +ports can and cannot be opened you will have to use &reslisa; to communicate +with other hosts on your network. Because &reslisa; cannot ping entire +networks or address ranges you will have to add each host by name to your +confiuration file. Currently you are able to add up to 64 hosts, and these +addresses are pingable. + +&reslisa; will only provide the information over a &UNIX; domain +socket, &ie; not over the network. The name of the socket is +/tmp/resLISa-YourLoginName, +so &reslisa; can be safely run on the same machine by more than one +user. + + + +Configuration + +At startup &lisa; first parses the configuration file in the users +home directory under $HOME/.lisarc. If +this file does not exist &lisa; will then look for a system wide +confiuration located at /etc/lisarc. Now for a sample +example configuration file: + + +PingAddresses = 192.168.100.0/255.255.255.0;192.168.100.10-192.168.199.19;192.168.200.1; +PingNames = my_host1;my_host2 #Hosts by name (required for resLISa) +AllowedAddresses = 192.168.0.0/255.255.0.0 +BroadcastNetwork = 192.168.100.0/255.255.255.0 +SearchUsingNmblookup = 1 #also try nmblookup +FirstWait = 30 #30 one-hundredth's of a second +SecondWait = -1 #Only try once +#SecondWait = 60 #Try twice and wait 0.6 seconds +UpdatePeriod = 300 #Update every 300 sec's +DeliverUnnamedHosts = 0 #Don't publish unnamed hosts +MaxPingsAtOnce = 256 #Send up to 256 ICMP echo requests at once + + +&lisa; can also be configured graphically in the +&kcontrolcenter;Internet +& NetworkLocal Network Browsing + item in the &kmenu;. However, to use this option &lisa; must +be started with the command line switch. + + + + + +Related Information +For a full list of command line switches and further +examples see the entire &lisa; manual by entering +help:/lisa in &konqueror;. + + + + + + + + diff --git a/doc/userguide/noatun-icon.png b/doc/userguide/noatun-icon.png new file mode 100644 index 000000000..c440d0924 Binary files /dev/null and b/doc/userguide/noatun-icon.png differ diff --git a/doc/userguide/noatun.png b/doc/userguide/noatun.png new file mode 100644 index 000000000..2f807e715 Binary files /dev/null and b/doc/userguide/noatun.png differ diff --git a/doc/userguide/oggfolder.png b/doc/userguide/oggfolder.png new file mode 100644 index 000000000..ac1527c32 Binary files /dev/null and b/doc/userguide/oggfolder.png differ diff --git a/doc/userguide/open-file-dialog.png b/doc/userguide/open-file-dialog.png new file mode 100644 index 000000000..38378aa0c Binary files /dev/null and b/doc/userguide/open-file-dialog.png differ diff --git a/doc/userguide/panel-and-desktop.docbook b/doc/userguide/panel-and-desktop.docbook new file mode 100644 index 000000000..1e92d3a82 --- /dev/null +++ b/doc/userguide/panel-and-desktop.docbook @@ -0,0 +1,325 @@ + + + + + +&Philip.Rodrigues; + + + + + +The Panel and the Desktop + + +&kicker;, the &kde; Panel + +Panel +&kicker; + +&kicker; is the application launcher panel of the K Desktop +Environment. By default, it appears along the bottom of the screen, +and takes up the whole of the width of the screen, but this is +configurable. &kicker; is something of a one-stop shop for (almost!) +everything that you might want quick access to. Besides the &kicon; +Menu, where you can start applications, &kicker; is also capable of +running docked applets like the pager, the taskbar or the clock, and +extensions, such as child panels. With all these options, you will +probably want to configure &kicker; so that it works best for you. The +next section describes some common ways to customize the panel. + + + + + +Configuring &kicker; + + + +Customizing the icons on the panel + +When you first start &kde;, kicker displays some icons next to +the K menu. These can be used to start the +applications that they represent. To see which application is launched + by each icon, hold the mouse cursor over the icon until a tooltip (a +small popup label) appears telling you the name of the application. + +These default icons might not represent the applications you use +most often, so you can remove the ones you do not want and add icons +for other applications that you use. To remove an icon, &RMB;-click on +the icon, and select Remove application +name Button in the popup menu that +appears. To add a new icon, &RMB;-click on an empty space on the +panel, and follow the menu entry Add Application to Panel +. This leads you to a copy of the +K menu, where you can find all of the &kde; +applications. For example, to add an icon for the &juk; music player, +follow through the menus to Add Application +to PanelMultimedia&juk; (Music +Player). The icon will appear on the +panel in the space that you right-clicked on. + + + + + +Adding extras and applets + +Applets + +&kicker; can add many types of items as well as application +launch icons. You can find these items using the same menu as before, +but this time selecting +Add Applet to Panel... +or +Add New Panel. +The items in the Add Applet window are small +programs that can reside on the panel. An example of an applet is the +Desktop Preview & PagerPager, which shows a small image of each of your virtual +desktops. (For more information about virtual desktops, see ). You can switch to a different +virtual desktop by clicking on its image in the desktop pager. + +You can find information about the other applets available for +&kicker; in the &kicker; manual. Just enter +help:/kicker in the +Location bar in &konqueror;. + + + + + + + +Simon +Vermeersch + +titeuf@ph34rus.org + + + + +The System Tray + + +The system tray is where programs that are run, but not directly needed are +kept. Some programs (like music players) are shown there, because you +probably want to keep them open, but so that it does not take too much space on +your screen, it will put an icon in the system tray. + +When you right click on such an icon, a +popup menu will appear where you can see some options of the program (like +play, pause, stop, ... in a music player). +When you left click on it, the main window +of the program will appear. If you hover your mouse above the icon, a tool +tip will appear with some information (in the music player case information +like the current song). Programs that normally support system tray icons are +music players, IRC clients, organizers, ... + +In most of these programs you can configure if you want an icon to be +shown or not. For other tricks and tips with the system tray see the section on . + + + + +Removing Panel Items + + + + +You can remove applets and other special items from the panel +using the arrow on its handle on the applet's left. Right click on the +arrow, and choose Remove applet +name. + + + + + +The Taskbar + +The taskbar is an item on the panel which displays an entry for +each window that you have opened. You can use the taskbar to switch +between windows by clicking on the entry of the window you want to +activate. The taskbar has entries for windows on each virtual desktop, +including windows which have been minimized. + + + + + + +&Philip.Rodrigues; + + + + +Using the Clipboard + +Clipboard + +Very often, it's useful to move some text, or an object in a +program, from one place to another. It's also very common to need to +duplicate some text, for example, if you're typing the same thing +several times. The system used for doing this is known as the +clipboard. There are two slightly different ways to use this system, +known technically as the selection and the +clipboard. We'll look at them separately: + + + + + +The Selection +Selection + +This method uses the mouse to copy text from one place to +another. The method is: + + +Select the text you want to copy. + + +Click the &MMB; at the place you want the text to be +copied to. This can be in the same program as you copied the text +from, or in another program entirely. + + +If you have three buttons on your mouse, this is easy, but if not, all +is not lost! If you have only two buttons, try clicking them both at +the same time instead of the &MMB;. + + + + + +The Clipboard +Cut +Paste +With this method, you can copy text, or cut it +(that is, remove it from one place and move it to another). You can +use either the mouse and the menu entries, or the keyboard with this +method. I'll list both ways, with the menu entry to use, followed by +the keyboard shortcut which will do the same thing, like this: + +&Ctrl;X + +EditCut + + + +Moving (<quote>Cutting</quote>) Text +Select the text you want to cut. + +From the menu, select +&Ctrl;X + +EditCut +, and the text will be removed from its current location. + +Position the text cursor at the point you want to +insert the text. This can be in the same application you got the text +from, or another application entirely. Select +&Ctrl;V + +EditPaste +, and the text will appear at the point where you placed +the cursor. + + + + + +Copying text from one place to another is very similar: + +Copying Text +Select the text you want to copy. + +From the menu, select +&Ctrl;C + +EditCopy +, and the text will be copied in the clipboard. + +Position the text cursor at the point you want to +insert the text. This can be in the same application you got the text +from, or another application entirely. Select +&Ctrl;V + +EditPaste + + + + + + + + +More Advanced Clipboard Use +&klipper; +ClipboardHistory + +The instructions above describe the default clipboard +behavior. The &klipper; application, which you can add as an applet in +the panel (see for instructions +on how to do this), provides some useful clipboard-related features, +like a clipboard history, and the ability to change the behavior of +the clipboard and selection. Take a look at the &klipper; Handbook for +more information. + + + +Related Information + +You can find more information about &kicker;, the +&kde; Panel, in &khelpcenter; or by entering +help:/kicker in &konqueror;'s +Location bar. + + +The &klipper; +Handbook has information about the advanced clipboard management +features in &kde;. You can read it in &khelpcenter; or by entering +help:/klipper in &konqueror;'s +Location bar. + + + + + + + + + + +Related Information + +Related Information +Though some information has been presented here, there is a lot more information on &kicker; tips, options, tricks and hacks, in the &kicker; handbook. You can access it via the &khelpcenter; or by simply entering help:/kicker in the &konqueror; Location toolbar. + + + + + + + + diff --git a/doc/userguide/pdf-files.docbook b/doc/userguide/pdf-files.docbook new file mode 100644 index 000000000..0dd83c2e3 --- /dev/null +++ b/doc/userguide/pdf-files.docbook @@ -0,0 +1,40 @@ + + + + + + +PDF Files + +How to print to a pdf file + +Viewing pdf files + + + + diff --git a/doc/userguide/playing-audiocds.docbook b/doc/userguide/playing-audiocds.docbook new file mode 100644 index 000000000..3f96a6056 --- /dev/null +++ b/doc/userguide/playing-audiocds.docbook @@ -0,0 +1,142 @@ + + + + +Deepak +Sarda + +antrix@gmail.com + + + +Audio CD Ripping in &kde; + +The conventional way of ripping Audio CDs to MP3 or Ogg files is to +use a standalone program such as iTunes, Winamp or &kde;'s own +KAudioCreator. But if we stick to conventions, +where's the fun?! So in this article, I am going to show you how to feel +elite by ripping your CDs in the, umm.. elite way. ;-) + + +Ingredients + +What do we need to be cool? Vanilla &kde;, without any extra +ingredients, will be able to rip your CDs. But to encode them, you'll need +to install the relevant codecs. At the moment, Ogg Vorbis, MP3 and FLAC formats +are supported. To enable encoding to these formats, you'll have to install +libogg, lame and flac respectively. How exactly you install these depends on +your distribution: take a look at their documentation to find out how. + +Once you have your favourite codec(s) installed, open &kcontrolcenter; and navigate your way to Sound & +MultimediaAudio CDs +and configure the settings on the various tabs to your liking. You can leave +everything in the default state if you so wish, but it's helpful to take a +look so you at least know what's on offer. Again, take a look at +Sound & MultimediaCDDB +Retrieval and change anything that's not to your +liking. CDDB, in case you didn't know, stands for CD DataBase (or Compact +Disc DataBase in it's more free flowing form). This functionality enables +&kde; to retrieve the Artist/Album/Track information about your CDs from the +Internet. This metadata is also used to write tags to the MP3 or Ogg files +that you'll be encoding your CDs to anytime now. + + + + + + + + + + + +Recipe + +Without further delay, let's get down to the business of being cool. +First, pop in the CD you want to rip (obviously!). Next, fire up a +&konqueror; window and open the Services tab on the Navigation panel. The +Navigation panel sits on the left side of the window, as shown in the +screenshot below. If it's not visible, you can produce it out of thin air by +pressing the magic F9 key. + + + + + + + + + +Now click on Audio CD Browser and in a few seconds, you'll see a lot +of folders which you can start browsing. If it's taking some time to show +anything, it's because it's trying to fetch information about the CD from +the CDDB database you configured earlier. + +In the screenshot below, you can see the contents of the Ogg Vorbis +folder. It shows all the songs in the Ogg format; it even shows their file +size! But, you and I both know that audio CDs don't contain Ogg tracks. So +what exactly is happening here? + + + + + + + + + +All the folders you see under Audio CD Browser are virtual folders. +They show contents of the CD through different filters, so to speak. When +you open the Ogg Vorbis folder, you are actually seeing the contents of the +CD as if it were stored in the Ogg format. You can go through the other +folders and you'll find MP3, flac and wav representations of the CD's +contents. You can even see the approximate file sizes when encoded in the +various formats. + + +So how do we rip and encode the CD? I think you can guess the answer +by now. Just decide which format you wish to rip to, open that folder, and +copy and paste those files in your target folder. That's it! &kde; will start +ripping and encoding the files on the fly! If you copy any of the files in +the Full CD folder, you'll be ripping the entire CD as +one continuous stream. + + + + + + + + + + + +Related Information +The amaroK website at +http://amarok.sf.net has the +latest news and information about amaroK. + + + + + + + + + diff --git a/doc/userguide/playing-movies.docbook b/doc/userguide/playing-movies.docbook new file mode 100644 index 000000000..89e986cbb --- /dev/null +++ b/doc/userguide/playing-movies.docbook @@ -0,0 +1,48 @@ + + + + + + +Playing Movies + +Intro to xine plugin to aRts + +Alternatives (kaffeine, kmplayer) + + + + + + + + diff --git a/doc/userguide/playing-music.docbook b/doc/userguide/playing-music.docbook new file mode 100644 index 000000000..22c129f1e --- /dev/null +++ b/doc/userguide/playing-music.docbook @@ -0,0 +1,150 @@ + + + + + + +&Lauri.Watts; + + + +Playing Music +Music +Sound +Audio +&arts; + +Intro to &arts; + +Performance tuning, sharing devices + + +Music Players + +There are several &kde; music players with somewhat overlapping +feature sets, however, each is quite different in style. + + + + + + + + +&noatun; +&noatun; + + +Noatun is the default &kde; music player. It features a highly +configurable interface, including several styles of playlist manager, and +many plugins to provide different &GUI;s, visualizations, and other +features. +&noatun; is part of the kdemultimedia package. + + + + + + + + + + + + + + + +&juk; +&juk; + +&juk; is a media manager, playlist manager, and metadata tagger. It is a +highly efficient way to manage all your music files, make and maintain +playlists, and maintain the metadata tags in your music. +It is equally useful as your primary music player, or managing +playlists and files for use in another application. +&juk; is part of the kdemultimedia package. + + + + + + + + + + + + + + + +&kaboodle; +&kaboodle; + +&kaboodle; is a one shot player. That means, it will run, play a file, +and stop. &kaboodle; is useful for instance if you want to quickly listen +to a single file without interupting your current playlist from another +media player. +&kaboodle; is part of the kdemultimedia package. + + + + + + + + + + + + + + + +amaroK + +amaroK is a popular third party application. You should be able to +find packages from your normal distribution source. + + + + + + + + + + +Most of the &kde; based movie players such as +Kaffeine and kmplayer +also make useful music players. + + + + + + + + + diff --git a/doc/userguide/printer-setup.docbook b/doc/userguide/printer-setup.docbook new file mode 100644 index 000000000..658be16ac --- /dev/null +++ b/doc/userguide/printer-setup.docbook @@ -0,0 +1,47 @@ + + + + + + +Setting Up a Printer + +Assume everything is pre-configured, how to set up a printer, refer to +big manual if there is trouble + + + + + + + + diff --git a/doc/userguide/printing-from-apps.docbook b/doc/userguide/printing-from-apps.docbook new file mode 100644 index 000000000..975149cdb --- /dev/null +++ b/doc/userguide/printing-from-apps.docbook @@ -0,0 +1,40 @@ + + + + + + +Printing From Applications + +Printing from &kde; apps + +Printing from non-kde apps + + + + diff --git a/doc/userguide/programs-and-documents.docbook b/doc/userguide/programs-and-documents.docbook new file mode 100644 index 000000000..c5eef682d --- /dev/null +++ b/doc/userguide/programs-and-documents.docbook @@ -0,0 +1,565 @@ + + +Programs and Documents + + + + + +Robert +Stoffers + + + +Launching Programs + +&kde; offers a varying number of ways to launch programs. You may: + + + Simply select the relevant item in the &kmenu;. + + + Run the program from &konsole;, or by clicking the &kmenu; and choosing Run Command... (while you still might prefer the quick keyboard shortcut, which is simply &Alt;F2). + + + Create a shortcut on the desktop or use &kicker;'s quick launcher. + + + +The &kmenu; functions much like the Start menu of &Windows;, however +it breaks programs up by what they do. Programs on the &kmenu; are broken +into category menus, such as Multimedia and +Office. Under these category menus there are +subcategory menus, such as Sound, +Video and Graphics. Under +the subcategory menus lie program launchers, which, when clicked on, launch +the associated application. + +Depending on the program, there may not be a launcher in the &kmenu;. +To search your hard drive for more applications, click the &kmenu;, choose +Run Command and type +kappfinder. In +&kappfinder;, click Scan, and the hard drive will be +searched for programs. Click the checkbox next to each program to be added +to the &kmenu;, and click Apply and +Close. The &kmenu; now will have new program +launchers under the relevant category menus. + +Launchers to programs may also be placed on the desktop. To create a +new launcher, right click on the desktop, and +choose Create +NewLink to +Application. On the &kdesktop; properties dialog +box, type in the name of the program on the General +tab. You may also wish to choose a custom icon by clicking on the gear icon. +Click the Application tab and type a short sentence +about the program in the Description textbox. In the +Command textbox, type the name of the program (case +sensitive), and any command line options you wish to use. Choose +OK, and your new program launcher will be created on +your desktop. Simply click on the new launcher on the desktop and the + associated program will run. + +To launch a program using &konsole;, click the &kmenu; and choose +SystemTerminals +Konsole. Once &konsole; +appears on the screen, simply type the name of the program you wish to +launch (remembering that bash, the command language interpreter that &konsole; uses by default, is case-sensitive) and press +Enter. If you are unsure about the name of a program, type +the first few letters then press the key on your keyboard. By pressing + , bash (through &konsole;) will try to guess the name of the program you wish to +launch. If it finds more then one matching program, a list of + matching programs will be printed on the screen. Type the name of the + program from the list and press Enter to launch. + +Whichever way you choose, launching a program is a simple affair with +&kde;. From the &kmenu;, to &konsole;, all your programs are just a few +clicks or key-presses away. + + + +Related Information +Check the &kicker; handbook for more information on enabling or disabling the &kmenu;, adding applications to the quick launch, or on organizing the categorization of the applications in the &kmenu;. You can view the &kicker; handbook either via the &khelpcenter; or by using &konqueror;'s KIOslave by typing help:/kicker in the Location toolbar. + + + + + + + +&programs-controlling; + + + + + + +Christian +Weickhmann + +christian.weickhmann@gmx.de + + + + +Opening and Saving Files + + + + +&kde; provides a unified way to open or save files via the file +dialog. In almost every &kde; program you will find a +FileOpen + and File +Save (and/or Save +As...) entry. + + +The File Dialog + + + + + + + + + + + + + + + + + + + + +This dialog consists of between three and five areas. The +top area is where you find the navigation and configuration functions. The +main area (in the middle) is where all your files are being displayed as +icons. This is called an icon view. The bottom area is where you can edit +filename or filter expressions and say Save or +Open. + +In addition to that you can add two even more sophisticated areas: +the Quick Access Navigation Panel and +the Preview Panel. + + + + + +Next to the three navigation buttons (one directory +up, back and +forward) and the new folder button +there is the bookmarks menu. Here you can mark any folder +you visit often to find it quickly. The wrench icon holds +the different functions to sort your files by name, date or size and to +enable the two extra panels mentioned above. Next to it you can type the +directory and choose (on the very right side) the encoding. + + + + + +You'll find the icon view in the middle of the dialog. You will find +most of the navigation functions in the context menu by clicking on the +items or the background with the right mouse +button. + + + + + + +The bottom of the dialog consists of the address field holding the +file name you chose or typed in and the maybe most powerful tool: The +filter. Here you can make the icon view display only items that match the +criteria you define. Try filtering files whose names contain +air by typing *air* into the filter +field. + + + + + + + +The Quick Access Panel (activate it by typing the +F9 key on your keyboard or through the wrench icon on top +of the dialog) provides configurable shortcuts to frequently used +locations on your hard drive or even on the Internet. There are several +preconfigured locations such as your home directory. Try right clicking on +any item to configure it or to empty space to add a new entry. You will be +shown a context menu. Here you can choose the icon size and to add, modify +or rename any entry. Choose Add Entry and you +will see a window containing anything you need: Type your description, enter +the location (or choose it via the dialog opening by clicking on the +folder symbol), choose a symbol from a vast variety in the symbol dialog +opening when you click on the predefined icon (usually a simple folder +symbol). + + + + + + +The Preview area (activate it by typing the F11 +key on your keyboard or via the wrench icon on top of the dialog) +makes it easy to preview almost any file on your filesystem. Images +will be displayed as thumbnails. Usually also sound files (such as +MP3, Ogg or Wave-Files), text files (among them raw text, PDF and +&HTML;) and even video files (MPG, AVI and so on) will be +previewed. + +Note that large files might take a long time to be previewed +(⪚ scaled down if they are large images). You can disable automatic +previews by unselecting Automatic Preview below the +preview. You can still preview individual files: just click Preview. You can also disable previews for files above a certain +size. Go to &kcontrolcenter;, choose KDE +componentsFile manager, go to +the Preview and Metafiles tab and change the +Maximum Filesize value. + + + + + + + + + + + + + + + + + +&Philip.Rodrigues; + + + + +Configuring Programs + + +Application Configuration + +Configuration +Customization + +&kde; applications are intended to be as useful and usable as +possible out of the box, but they also offer a wide +range of options which you can change to make &kde; work for you. As +well as the settings which affect the whole of &kde; (see ), each application has a set of +configuration options, which you can access using the menu option +SettingsConfigure +Application +. This is the same for all &kde; applications, which +makes it easy to find the configuration dialog for an +application. + + + +On the left of the configuration dialog is a list of +sections. Clicking on one of these sections displays the configuration +page for that section on the right-hand side of the dialog. You can +change these options to fit your preferences. + +When you have made the changes you want, you can click on +OK to save your changes and close the +configuration dialog. If you want to see the effect of your changes, +but not close the configuration dialog, click on the +Apply button. This is useful if you aren't sure +about the change you've made, and might want to change back, because +the dialog is still open, ready for you to do so. + +If you decide that you don't want to keep the changes you've +made, just click Cancel to close the dialog +without saving your changes. + + + + +Configuring Keyboard Shortcuts + +Shortcuts +Keybindings + +Most &kde; applications offer keyboard shortcuts for the main +actions in the application. If you find that you don't like the +default keyboard shortcuts, or that they conflict with the shortcuts +of another application (maybe one that's not part of &kde;), you can +change them with the +SettingsConfigure +Shortcuts... + menu entry. This brings up the +Configure Shortcuts dialog for the +application. As an example of how to use this dialog, let's add a +shortcut for the Send Link Address... action to +&konqueror;, so that we can email the locations of interesting pages +to friends just by hitting a key (or two): + +Open the Configure Shortcuts +dialog in &konqueror;, as described above. + +Click on the Send Link Address... item +in the main listbox (it's near the bottom, in the +Konqueror section). + +In the Shortcut for Selected +Action panel, select Custom, since we +are going to give this action a keyboard shortcut that we have chosen. + +A small shortcut entry dialog pops up. Just hit +&Ctrl;E + (or whatever you want to change the shortcut to), and the +dialog disappears. The key icon in the +Configure Shortcuts dialog now shows the new +shortcut. + +If you made a mistake, or change your mind about what +to use as the shortcut, just click on the key icon showing the current +shortcut. The shortcut entry dialog reappears, and you can press the +key combination for the shortcut you want. + + + + + + + + +Configuring Notifications + +Notifications +Sounds + +Something about +SettingsConfigure Notifications... +. + + + + + + +Adriaan +de Groot + + +Configuring Toolbars + +Nearly every &kde; application has one or more toolbars at the top of +the application window, underneath the menu. The toolbar contains icons +(toolbar buttons) that represent commonly used actions and configuration +settings. The &kmail; window, for instance, has a toolbar that contains +buttons for New Message, Check Mail +and several others. Each of these actions is something you do often, so +that's why they have toolbar buttons as well as menu entries (New +Message is under +MessageNew +Message, Check Mail is +FileCheck +Mail). + +Not everybody agrees on what actions are commonly used, though, (I +never use the New Message toolbar button or the menu +item, I use the keyboard shortcut &Ctrl;N). To ensure that your +screen isn't cluttered with things you don't need, each toolbar can be +customized. Additionally, you can usually customize which toolbars are +displayed and how, as well. + + +Customizing Toolbar Displays + +The easiest thing to customize with the toolbars of any given +application is whether they are displayed at all. Most applications have a +SettingsToolbars + menu where you can select which toolbars are displayed and +which are not. &konqueror; has four toolbars, Main, +Extra, Location and +Bookmark. It can be convenient to turn off the +Bookmark toolbar to save +screen space. To do so, click on the Settings menu, +choose Toolbars, and then uncheck the +Bookmark Toolbar entry (do this just by clicking +on the menu item). + +If there is no Settings menu, you can also +right click on the toolbar itself, and choose the +Toolbars sub-menu from the resulting context +menu. + +The same Toolbar context menu, accessed by +right clicking on the toolbar, allows you to +customize other properties of the toolbar: + + + +Its orientation, so that instead of appearing at the top of the +window under the menu bar you can place it on the left, right or bottom of +the window. + + +Its orientation, so that the toolbar floats as a +separate window which you can move independently. + + +Its orientation, so that the toolbar is squashed into a little flat +grip that you can re-open by double-clicking on it (this is subtly +different from making the toolbar vanish completely, since it it easier to +cause it to re-appear). + + +The appearance of text alongside, underneath, or instead of the icons +on the toolbar. + + +The size of the icons (if they are not supplanted by +text). + + + + + +Customizing the Icons on the Toolbar + +The toolbar is intended for actions that you perform often, so what do +you do if there is some useless icon there, like Cut? Or +what if you really want a cut button on the toolbar, but +the application doesn't give you one? This is where the customize toolbars +dialog comes in — it give you complete control over the actions that +are available on each toolbar. + +Choose SettingsConfigure +Toolbars from the application's menu, or +Configure Toolbars from the context menu of the +toolbar itself. This displays the configure toolbars dialog, which consists +of a combobox with which you can select +which toolbar to customize, and two lists of items +— one of the available actions, and one of the actions that are +already in use on the toolbar. + +Often there are many many more actions available ( activate +tab #12, for instance) than you would ever want on the toolbar, or +even that you know exist in the application. The customize toolbar dialog +can be a learning experience. You can drag actions from one list box to the +other, rearrange the items on the toolbar , or change the icon for a +selected action. This allows you to drag the actions you don't want off of +the toolbar and into the list of available actions; similarly, the actions +you do want can be dragged into the toolbar. Clicking +OK in the dialog immediately updates the toolbar with +your new preferred actions. + +There are a few special items that can end up in the listbox for the +current toolbar: + + + +separators, which exist in two flavors: + +line separator appears as a line +between two action icons + +separator appears as a larger +space between two action icons + + + + + +<Merge>, which is a special item that +allows plugins and other loadable components of the application to insert +their actions into the toolbar as well. It is generally not a good idea to +remove this, since you cannot get it back. + + +ActionList:, these appear in various flavors +(there is a viewmode_toolbar one in &konqueror;) and again these +represent lists of actions that might be inserted by +plugins. + + + +Whenever you click on an action in the list of current actions, a +description of it is shown in the dialog. This description will warn you if +it is a bad idea to remove the action. + +If you do not like to drag things around, there are four buttons in +the middle of the dialog which allow you to move the selected action from +one list to the other, and to move a selected current action up or down in +the list. There must be a way to restore the default toolbars in an +application, in order to recover from accidentally deleting an important +action like <Merge>, but I don't know what it +is. + + + + + + + + + + + + + diff --git a/doc/userguide/programs-controlling.docbook b/doc/userguide/programs-controlling.docbook new file mode 100644 index 000000000..a1f072e6f --- /dev/null +++ b/doc/userguide/programs-controlling.docbook @@ -0,0 +1,39 @@ + + + + + + +Controlling Programs + +Standard Toolbar layout + +Keybindings + + + diff --git a/doc/userguide/removable-disks.docbook b/doc/userguide/removable-disks.docbook new file mode 100644 index 000000000..7b07941e4 --- /dev/null +++ b/doc/userguide/removable-disks.docbook @@ -0,0 +1,140 @@ + + + + + +Edward +Haven +edward.haven@gmail.com + + + + +Removable Disks + +For &kde; to use any device, removable or not, the device must +first be mounted. When a device is mounted, &kde; gets all the needed +information about the device: how to read it, how to write information to +it, and much more. + +The use of a device is controlled by the operating +system and it is important your operating system has tools for managing +these devices. &kde; can also auto mount devices, working with +HAL (Hardware Abstraction Layer). Your distribution +should have set up HAL automatically; if not, +consult the documentation provided by your distribution. +There are several ways to find the list of media devices: use +whichever one suits you best: + + + +Enter media:/ or +system:/media into the &konqueror; location bar. + + + +Navigate to it by clicking on the Services +tab in &konqueror;'s Navigation Panel, then selecting Storage +Media. + + + +Select GoStorage Media + from the &konqueror; menus. + + + +Click the System desktop icon, then from +the window that appears, click on Storage +Media. + + + + + +The Storage Media location (also known as +the media:/ protocol) will show all devices which are recognized by +&kde;, including the hard drive and &CD; and DVD +drives, as well as USB and Firewire devices, +provided that your distribution is set up correctly to tell &kde; +about them. + + + You can also setup &kde; to display a device icon +on the desktop. To start or configure this feature in the &kcontrolcenter; go +to +DesktopBehavior +and select the Device Icons Tab. The device icon action +can be used to show both mounted and unmounted devices, or to only create an +icon when media is detected and automounted (only if automount is properly +configured), by not checking the unmounted boxes. + + +Automount + +With &kde; 3.5 and newer, devices can be automounted, meaning one only +has to insert the removable disk. &kde; will then open an automount prompt +asking the user What do you want to do? with the media. To +configure the list of options prompted for devices open the &kcontrolcenter; and +navigate to PeripheralsStorage +Media. Here you can add and remove programs from the +list of devices. + +The automount feature will only work if +dbus, hal and +udev are installed and the kernel is properly +configured. To find out if they are running on your system check the +Process Table in &ksysguard; for: +hald, dbus-deamon, and +udevd. &kde; does not provide any of these +components. You must check with you distribution. + + +Related Information +HOWTO: setting up D-BUS and HAL with KDE's media ioslave +edit (A community maintained HOWTO on the &kde; wiki) +The DBus page +HAL - Hardware Abstraction Layer + + + + + +Mounting + +If your system does not automount, &kde; is configured to mount and +unmount devices which the current user has permission to mount. If a device +is mounted as the root partition (&ie; /), and you log in +to &kde; as a user, &kde; can not mount or unmount it without being given a +higher permission. To check a devices mount permission see the +/etc/fstab file. + +To mount and unmount devices manually in &kde; one only has to &RMB; +click the device icon in media:/ or on the desktop and select +Mount or Unmount, for +removable devices one can also unmount with Safely Remove. &kde; still requires the device to be setup in +/etc/fstab. + + + + + + + + diff --git a/doc/userguide/rip.png b/doc/userguide/rip.png new file mode 100644 index 000000000..0a044efb9 Binary files /dev/null and b/doc/userguide/rip.png differ diff --git a/doc/userguide/ripsettings.png b/doc/userguide/ripsettings.png new file mode 100644 index 000000000..21f53fbfd Binary files /dev/null and b/doc/userguide/ripsettings.png differ diff --git a/doc/userguide/screen-captures.docbook b/doc/userguide/screen-captures.docbook new file mode 100644 index 000000000..35d1a726a --- /dev/null +++ b/doc/userguide/screen-captures.docbook @@ -0,0 +1,38 @@ + + + + + + +Screen Captures + +Grabbing screen caps + + + + diff --git a/doc/userguide/services.png b/doc/userguide/services.png new file mode 100644 index 000000000..d281c88b7 Binary files /dev/null and b/doc/userguide/services.png differ diff --git a/doc/userguide/shared-sessions.docbook b/doc/userguide/shared-sessions.docbook new file mode 100644 index 000000000..688a4b93f --- /dev/null +++ b/doc/userguide/shared-sessions.docbook @@ -0,0 +1,46 @@ + + + + + + +Shared Sessions + +Sharing your desktop with krfb and pals + + + + + + + + diff --git a/doc/userguide/splash-screen.png b/doc/userguide/splash-screen.png new file mode 100644 index 000000000..ccc6a29ea Binary files /dev/null and b/doc/userguide/splash-screen.png differ diff --git a/doc/userguide/standard-menu-entries.docbook b/doc/userguide/standard-menu-entries.docbook new file mode 100644 index 000000000..cfa37b453 --- /dev/null +++ b/doc/userguide/standard-menu-entries.docbook @@ -0,0 +1,319 @@ + + + + +&Philip.Rodrigues; + + + + + +The Standard Menu Entries + + + +One of the main ways that you'll control programs in &kde; is +via the program's menus. They provide access to nearly everything +you'll need to do with that program. So that you can more easily +remember where things are in the menus, and to help you learn new +programs more easily, the menus have a standard layout. This means +that once you know how to open a file in one program, you know how to +open a file in any &kde; program. Let's take a look at the standard +menus: + + + + +The <guimenu>File</guimenu> Menu + +&Ctrl;N + +New + +This entry will start a new, blank document that's +appropriate to the program you're using. For example, in &kate; (the +&kde; Advanced Text Editor) this entry creates a new text file. + + + + +&Ctrl;O + +Open... + +The Open... menu entry +displays the &kde; Open File dialog box, where you can +choose a file to open in the program you're using. The Open +File dialog is also standardized, so it's the same for all +&kde; programs. You can find out more about using this dialog +somewhere else in this guide . +You probably noticed that this menu entry had an ellipsis (...) +after the name of the entry. This means that clicking on the entry +will open a dialog box of some kind. If you make any changes in the +dialog box that appears, they won't take effect until you click on the +OK button in the dialog. You can always ignore +any changes you made, and close the dialog, by clicking on the +Cancel button. + + + + +&Ctrl;S + +Save + +This menu entry will save any changes you've made to +the file that you are currently working on. If this is the first time +that you've saved the file, the &kde; Save File dialog +will appear, and ask you for a name and location for the file. + + + + + + +Save As... + +The Save As... menu entry +will save the file you're working on with a different name. The +Save File dialog appears, and you can choose a name and +location as usual. Note that after you save the file with +Save As.., you will be working on the +new file. If you save changes, they will be saved +under the new filename. To make this a bit clearer, let's take an +example: + + +You are working on a file called +hello.txt that contains the text Hello +World! + + +You use the Save As... menu +entry to save the file with the new name +newhello.txt. + + +You add the text Nice to see you! to +the file, and use the Save menu entry to +save these changes. + + + + + +Now, the file newhello.txt contains the text +Hello World! Nice to see you!, while the file +hello.txt contains only the text Hello +World!. + + + + + +&Ctrl;P + +Print... + +This menu entry displays the &kde; +Print dialog, read to print the current +document. Youcan find more information about the options available in +this dialog in . + + + + +&Ctrl;W + +Close + +This menu entry closes the current document. If you +have made any changes since you last saved the document, you will be +asked whether you want to save those changes. You can choose to +Save or Discard those +changes. If you didn't really want to close the file, just click +Cancel. + + + + +&Ctrl;Q + +Quit + +Use this entry to close the program you're using. If +you have unsaved changes in any files, you will be asked whether you +want to +save them. + + + + + + + + +The <guimenu>Edit</guimenu> Menu + + +&Ctrl;Z + +Undo + +Use this entry to remove the effect of the last +action you performed in the application. For example, if you deleted a +line of text, the Undo menu entry will +replace that line. + + + + +&Ctrl;&Shift;Z + +Redo + +Use this menu entry to perform the last action that +you removed with the Undo menu entry. For +example, if, as in the example above, you had replaced a deleted line +of text with Undo, the +Redo entry would redo the action of +deleting the line. + + + + +&Ctrl;X + +Cut + +This menu entry cuts the contents of the current +selection to the clipboard. See +for more information. + + + + + +&Ctrl;C + +Copy + +This menu entry copies the contents of the current +selection to the clipboard. See +for more information. + + + + + +&Ctrl;V + +Paste + +This menu entry inserts the contents of the clipboard +in the current document. The clipboard contents are inserted where the +cursor is currently positioned. + + + + +&Ctrl;A + +Select All + +Use this item to select the whole of the current +document. + + + + +&Ctrl;F + +Find... + +This menu entry displays the Find +Text dialog, which you can use to search for a particular +word or phrase in the current document. + + + + + +F3 + +Find Next + +Use this item to find the next occurrence of the most +recent text you searched for using Find.... + + + + + + + +The <guimenu>Settings</guimenu> Menu + + +Configure Shortcuts... +In the dialog displayed by this menu entry, you can +change the keyboard shortcuts used by the application. See . + + + + + +Configure +Toolbars... + +In the dialog displayed by this menu entry, you can +change which buttons appear on the application's toolbars. See . + + + + + +Configure Notifications... +In the dialog displayed by this menu entry, you can +change the notifications (sounds, error messages, &etc;) used by the +application. See . + + + + + +Configure Application +In the dialog displayed by this menu entry, you can +change settings relating to how the application works in general. + + + + + + + +&help.menu.documentation; + + + + diff --git a/doc/userguide/switching-sessions.docbook b/doc/userguide/switching-sessions.docbook new file mode 100644 index 000000000..d869d0808 --- /dev/null +++ b/doc/userguide/switching-sessions.docbook @@ -0,0 +1,92 @@ + + + + + +Christian +Weickhmann + +christian.weickhmann@gmx.de + + + + +Switching Sessions + +From version 3.3 onwards, &kde; provides a session management +system which allows you to switch between different user account on +one computer. You can stay logged in and ⪚ let your sister, +brother, wife, neigbour or whoever read her or his emails just for a +moment. Before you had to log off (therefore ⪚ close programs or +save documents) and let her or him log in. + +Now it's almost as easy as switching to another virtual desktop. + + +Switching Sessions: How it works + + +The Switch User Menu + +The &kmenu; now bears a new entry. Rather at the bottom of the menu +you will find a Switch User submenu. It contains +the command to lock the current and start a new session which means that +your desktop will start the screensaver and after a few seconds can log in +with KDM as always. The Start New Session entry +skips the activation of your screensaver. + +Once you have running more than one session you can either choose to +press &Ctrl;&Alt;F7 + or F8 and so on (what is usually configured by default) or +— even more comfortable — choose from the list of active +sessions at the bottom of the Switch User +submenu. + + + + +Switch User with the screensaver +If you have activated your screensaver and another user +wants to log in she or he can simply press the Switch +User... button and log into another session. + + + + +Switch Session in &kdm; +If you are in &kdm; and want to switch to another active +session you can press the Menu button and choose +Switch User which is mainly the same as described +above. + + + + + + + + + + + + diff --git a/doc/userguide/the-filemanager.docbook b/doc/userguide/the-filemanager.docbook new file mode 100644 index 000000000..a56628cf8 --- /dev/null +++ b/doc/userguide/the-filemanager.docbook @@ -0,0 +1,291 @@ + + + + + +Christian +Weickhmann + + + + +The File Manager +&konqueror;File +Management +File Management + + + + + +&konqueror; with simple settings + + + +Introduction + +&kde; includes a versatile and powerful file manager called +&konqueror; which allows you to do everything you want with the files +stored on your computer, your network, and even the Internet. There +are too many features of &konqueror; to describe here, so we will just +take an overview. If you want more details about what &konqueror; can +do, take a look at the &konqueror; Handbook&konqueror;Handbook by selecting +HelpKonqueror +Handbook in the &konqueror; menus; or, alternatively, you can use the help KIOslave in &konqueror; by entering help:/konqueror in the Location Toolbar. + + + +Folders + +When you first open &konqueror; in file management mode, you can +see two panes: on the right is the folder view; on the left is the +sidebar. The folder view contains icons for +each item inside the current folder. These items can be +folders or files. Many file types can be previewed +without opening a new application to edit them in.Previews To preview a file, +hold the mouse cursor over the name of the file for about a second: a +popup window will appear, showing the contents of the file and other some +useful information, like file's size and which user owns the file. + +You can open any item by clicking (just once – &kde; +does not use double-clicking in its default settings) on the icon for the +file. Folders will be opened in the same window; files will either be +opened in the appropriate program, or the file manager will ask you +what program to use. For instance, if do not have a word-processor set up to +open &Microsoft; Word documents, the file manager will +ask you what to do. + +You can go back to the last-opened folder by clicking on the +Back button or go up one folder by clicking +the Up button. + + + +The Navigation Panel (aka <quote>The Sidebar</quote>) + +Navigation Panel +Sidebar + + + + + +The &konqueror; sidebar + + +Navigating through the folders by using +the folder view can become impractical. The sidebar provides +shortcuts and special functions that make it easier to +find what you are searching for. + +On the left edge of the sidebar you will find a number of buttons, each + with a different icon: + + + + + +Bookmarks + + +As &konqueror; (the file manager) also serves as a very powerful +web browser, it also has a bookmark functionality. Here you will find the +same structure as in your Bookmarks menu. + + + + +Devices + + +Next the sidebar provides a list of all known devices +on your computer. These devices can be either physical drives — +such as your hard disk, &CD-ROM; drive, or floppy disk drive — +or virtual drives — such as remote shares or hard disk partitions. + + + + +History + + +&konqueror; will remember the web pages you have visited and list them +either by date or alphabetically in a tree structure. You can select the +behavior by right clicking on the History item and +selecting Sort by. Left click on an item (⪚ +www.kde.org) and &konqueror; will show you the documents you have visited. Left +clicking on a document (⪚ index.html) will open +the web site in the folder view. +Right clicking on a history item, like www.kde.orgindex.html +, opens a slightly different popup menu: you will also find the +item New Window, which makes &konqueror; open the +site in a new window. + + + + +Home Directory + + +The Home Directory item is in the sidebar's navigation +panel. You will find your home directory as the first entry. Below you will +find all folders of your home directory. Left clicking on any +folder in this view opens the folder in the folder view. Alternatively, you can also +work with the folders' context menus, create subfolders, and so on. + + + + +Sidebar Media Player + + + + +Try dragging a music file (like MP3, Ogg, or +.wav files) +on the sidebar. The file will immediately be played. + + + + +Newsticker + + +Newsticker will display a customisable list of news sources. Right-click +either on the Configure button or on one of the +newssource buttons (e.g. KDE News, which is usually predefined) to add a new +newsticker source. + + + + +Network + + +Here you can browse the services provided by other computers on +the network. The &lisa;-Daemon has to be started in order to work +correctly. The network browser allows you to see a variety of services +provided by a computer. You can easily browse SMB +shares, &HTTP; sites, or transfer files via the secure FISH +layer. + + + + +Root Directory + + +Everything on a &UNIX;-based system is organized in a file +system tree. This tree must have a root and here it is. The +Root Directory function is like the +Home Directory function. The only difference is +that every folder is being displayed, not only your home +directory. + + + + +Services + + +This is somehow the "rest". Try browsing through the different +items. If an Audio &CD; is in your &CD; or DVD +drive you will be able to find everything on it and even more in the +Audio CD Browser item (you can even compress +audio files and save them on your hard drive with this +function). + + + + + + + +Icons + + +To select only one icon hold down the &Ctrl; key and click on the icon +you want to select. If you want to select more than one icon, hold +down &Ctrl; while you click on each of the items you want to select. +Once one or more icons are selected you can do what you want with +them. If you want to move or copy items, select them and then drag them +(with the left mouse button down) to the desired location. When +you release the mouse button a menu will come up offering you to +MoveMoving +Files, +CopyCopying +Files, or Link the +selected items. You can also Cancel your +action. + + +Many other actions can be applied to the selected items by +right-clicking on one of the selected items, and choosing the action +from the menu which appears. (The exact contents of this menu depend on the +type of files selected, so it is called a context menu). + + + +Links and Shortcuts + + +As already mentioned above you can link files or folders anywhere. It means +that the linked folder will appear and behave just like the original in +another location without consuming additional space on your harddrive. +So if you, for example, have a number of documents, and only a few are used +regularly, you can easily group them in a folder and create links in it. + + + + + +The Trash + +Trash +Recycle Bin + +Before a file is deleted in the &kde; file manager it will be +moved to the Trash folder to give you the +possibility of getting it back if you deleted it by accident. The +trash bin will show all deleted items. You can select the one to be +recovered and move it to its original place as described in . If you right click on the trash bin and select +Empty trash bin the files in it will be +deleted permanently. + + + +Related Information + +As mentioned in the introduction, the &konqueror; +Handbook has much more information about the features available in +&konqueror;. You can read it in &khelpcenter; or by entering +help:/konqueror in &konqueror;'s +Location bar. + + + + + + + + + + + diff --git a/doc/userguide/titlebar-menu.png b/doc/userguide/titlebar-menu.png new file mode 100644 index 000000000..d9d672982 Binary files /dev/null and b/doc/userguide/titlebar-menu.png differ diff --git a/doc/userguide/troubleshooting-network-x.docbook b/doc/userguide/troubleshooting-network-x.docbook new file mode 100644 index 000000000..45c55196c --- /dev/null +++ b/doc/userguide/troubleshooting-network-x.docbook @@ -0,0 +1,41 @@ + + + +&J.Hall; + + +Networking and X + +Misconfigured networking can often be the cause of &kde; applications launching slowly, or in the worst case not launching at all. Your &X-Server; has a very powerful client/server interface and is very network aware. + + + X uses the hostname to create both a unique key for authorization, and to figure out where (via $DISPLAY) to send + the actual windows it's drawing on screen. If your computer doesn't know it's own name, it will spend inordinate amounts of time + trying to look itself up, a fate you can avoid by simply teaching your computer what it's own name is. + + +Check your /etc/hosts file and ensure there is an entry for localhost that looks +something like this at the top of the file (after any comments). + + +127.0.0.1 localhost + + +You also should add your computers fully qualified domain name, short name, and it's usual ip address if it has a static ip. If your ip address is assigned dynamically using DHCP you can simply use the address for the loopback device. + + +127.0.0.1 hal.btl hal (for dhcp) +192.168.0.1 hal.btl hal (static) + + +Make sure that your firewall is not so restrictive that it stops packets to the loopback device. For example in iptables if the default rule on the INPUT chain for this device is set to anything other than >ACCEPT this will cause performance problems in X. To check this, you can type in: + + +%iptables-save | grep + INPUT lo ACCEPT + + + +The rule INPUT lo ACCEPT should always work, unless there are other misconfigured rules (Such as a DROP on the OUTPUT chain) + + diff --git a/doc/userguide/troubleshooting-no-open.docbook b/doc/userguide/troubleshooting-no-open.docbook new file mode 100644 index 000000000..682f4b675 --- /dev/null +++ b/doc/userguide/troubleshooting-no-open.docbook @@ -0,0 +1,49 @@ + + + +&Lauri.Watts; + + +When An Application Will Not Open + +Sometimes when you start an application, it does not open the expected +window. Here are some questions to answer and steps to help you figure out +what is wrong. + + + +Did the application ever start, when launched in the same +manner? +If it did, for instance you have clicked an icon on your +desktop that previously worked, then it is unlikely to be a problem with the +launcher itself. +If, however, you normally start your application from an icon on +&kicker; and this time started it with a desktop icon, then it could simply +be that the launcher itself is wrong. + + + +But I can see the launch notification spinning cursor and taskbar entry. + +Foo + + + + + diff --git a/doc/userguide/under-the-hood.docbook b/doc/userguide/under-the-hood.docbook new file mode 100644 index 000000000..094a01d63 --- /dev/null +++ b/doc/userguide/under-the-hood.docbook @@ -0,0 +1,521 @@ + + + + + + +Tinkering Under the Hood of &kde; + + + + + + +Nicolas +Goutte + +goutte@kde.org + + + +Hand-Editing Configuration Files + + +Introduction +In &kde;, the configuration files are easy to edit with a simple +editor like &kate; as the configuration files are text files. + +An example of a text file: + +[General] +AutoSave=1 +LastFile=/var/tmp/test.txt + +The user-specific configuration files are stored in .kde/share/config (replace +.kde with your $KDEHOME setting) and +the global ones are in the share/config sub-directory of &kde;'s +installation path. (You can find this path by running the command +kde-config --prefix.) Their filenames typically +end in rc (without an initial period), for example kopeterc. + + +Editing configuration files by hand can risk the stability of your +&kde; installation. Applications usually do not check what they read from the +configuration files. This means that they can be disturbed by what they +get as configuration and might even +crash. + + + + +Backups + +So the first rule is to make a backup of your file before modifying +it. The backup is better stored outside any +.kde subdirectory +(or the corresponding $KDEHOME directory). Backups are anyway +a good idea in case of a major failure of &kde; that would +destroy important configuration files (for example your &kmail; settings, +which are in in the file kmailrc). +(Such a major failure should not happen but it still can happen.) + + + +Editing + +So why would you want to touch the configuration files at all? Well, first you need it +when you want to enforce the KIOSK mode. Perhaps a developer has asked you +to add an entry to help him to solve a problem with the application. Perhaps you want to recover from +a problem without having to remove all the .kde directory. Perhaps you want to learn more +about the depths of &kde;. + +Anyway, whatever your reason, you want to modify by hand a +configuration file. + +When planning to edit such a file, make sure that the application +using it is not running. If it is one of the basic configuration files, +consider editing the file while &kde; is not running at all. + +Ready? So make a backup of the file (Did I tell you this already?), +start you favorite editor (let us assume it is &kate;), load the file +(Be careful to load as UTF-8, &kate; displays it as +utf8). + +Now you have a file like: + +[Group] +Key1=Value1 +Key2=Value2 +Key3=Value3 + +You can now modify it (with care!) and then save it (Be sure that it +is as UTF-8 again). + +Now you can test the application and if the application does not run +correctly anymore, close the application and restore the backup of the +configuration file. + + +Related Information + + + has more +information about &kde;'s directory structure, to help you find the +file you need to edit. + + + + + + + + + +Scripting the Desktop + +&kde; provides a powerful interprocess communication system in +&DCOP;, the Desktop COmmunication Protocol. Using &DCOP;, you can +control a wide range of functions in &kde; from the command line or +from a script written in your favorite scripting language. You can +also get information out of &kde; applications: for example, several +&kde; media players provide methods to query the player for +information about the currently-playing track. + +Broadly speaking, each &kde; application provides one or more +&DCOP; interfaces, which in turn provide +methods (or, if you prefer, functions) that another application can +call. So, the first step in using &DCOP; is to find the appropriate +method for the task. The easiest way to do this is using the +kdcop frontend to the available &DCOP; +methods. + +Run kdcop from a &konsole; or the +mini-CLI (the window which pops up on &Alt;F2 ). The +kdcop window shows the applications +currently running which provide &DCOP; interfaces, using a tree +view. + +In general, finding the correct method requires a little bit of +searching through the tree view, but a useful hint is that the +interface marked (default) usually contains the most +frequently-used functions. + + + +To test that the function does what we expect, double-click on +the setColor entry. To set the color +c, click on the color selector button, and choose a +color. Set whether the color should be color A with the +checkbox. Click OK and the background color is +set. + +To access the &DCOP; method from your favorite scripting +language, you can either use &DCOP; bindings, if available in the +kdebindings module, or call the dcop command-line +application. For simple usage, calling the +dcop command-line application is sufficient. To +call a &DCOP; method on the command line, we need to specify the +application and interface owning the method, the method itself, and +the arguments, in a form suitable for the shell. + +We specify the application, interface and method in that order, +followed by the arguments in the same order that they are shown in +kdcop. dcop +has plenty of other options: take a look at the output of +dcop +. + +That's enough theory: time for an example: + + +A Background Color Changing Script with &DCOP; + +With the dcop command-line application and a +little bit of Perl, we're going to make a simple script which slowly +cycles the desktop background through the spectrum. + +Firstly, we look for the appropriate method with +kdcop. For this example, we'll short +circuit the searching, and go straight to it: the method we want is +kdesktopKBackgroundIfacesetColor +. The arguments and return type of the function are shown +in the style of the C++ language. For +setColor, the arguments are a color, +c, which specifies the new background color, and a +boolean (true or false) value, isColorA, which +specifies whether the color is the first or second (this is useful for +setting gradients and so on). + +To use our setColor method on the +command line, we use the following: + + +% dcop kdesktop KBackgroundIface setColor '#ffffff' false + + + +To specify the color, we used the +hexadecimal RGB value, as used in &HTML;. Note that it is enclosed in +single quotes to protect the # from the shell. + +To find the hexadecimal RGB value of a color, open any +color chooser dialog in a &kde; application (for example, in +&kcontrolcenter;, Appearance & ThemesColors +), select the color you want, and use the value given in +the HTML text box. + + +So, that's all we need from &DCOP;; now it's just a case of +writing a script around it. Here's a (very!) rough implementation: + + += $min) and ($colour[$which] <= $max)); + } +} +]]> + + + +Just run the script with no arguments, and it will cycle the +background colour through a slightly muted spectrum until it is +killed. Voilà! + + + +Of course, Perl isn't the only language you can use to write +scripts with &DCOP;—if you prefer shell scripting, that's +available too: + + +Setting a background from the Internet + +The following script gets the main image from the User +Friendly comic strip and sets it as the desktop wallpaper, +using commonly available tools and a little bit of &DCOP;: + + +.*,,"` +TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1 +wget -q -O $TMPFILE $COMICURL +dcop kdesktop KBackgroundIface setWallpaper $TMPFILE 1 +]]> + + +The first line after the #!/bin/sh uses wget and some regular +expression magic to extract the image location from the main page's +&HTML; source. The second and third lines download the image, and +finally, dcop sets the downloaded image as +wallpaper. + + + + + + + + + + + +Adding Extra Keybindings to &kde; + +Many modern keyboards contain extra keys that are not by default +assigned to any action. + +Multimedia keys often generate a signal, and can simply +be chosen as a keybinding within an application just like choosing any other +key. Some keys however, are not detected and pressing them in a +Configure Shortcuts has no effect. + +Some IBM laptops, for instance, have extra keys about the left and right +arrows, which look like page left and page +right. + + +Use xev to find the code of the keys. In +this case, they are 233 and 234 + +Choose key symbols. There are quite a range of these that are not +used by default, so many are free. You can find the list in +/usr/X11R6/include/X11/keysymdef.h (or its equivalent +on your system). +Create a file in your home directory called +.Xmodmap, and add to it the following: +keycode 233 = Next_Virtual_Screen +keycode 234 = Prev_Virtual_Screen + +Run the command xmodmap +~/.Xmodmap + + +At this point, you should be able to run xev again +and see that the keys now generate the keysym that you assigned. You can now +simply assign them to any action as normal. + + +Related Information +The xev manpage. You can see this by typing +man:/xev into a &konqueror; window or by typing +man xev into a terminal. + + + + + +Adding Keybindings for New Actions + +Most actions in either the desktop or in applications are readily +available to assign a keybinding to. If the action you want a +shortcut for is something you wrote yourself, or is otherwise not available, +you can still assign a shortcut. + +To bring together the two previous sections, perhaps you want to +assign an otherwise unused key on your keyboard to a script or dcop +command. Our example here will be to assign the two keys we added +in to go to the previous or +next virtual desktop, two functions for which you will need DCOP (as discussed in +). + +This can be achieved easily using the following method: + + + +Open &kcontrol;, and in the Regional & Accessibility +section, select Input Action + + +Choose New Action + + +Name the new action, ⪚ Next Virtual +Screen + + +Select Keyboard shortcut -> Command/URL (simple) +for the Action type: + + +In the Keyboard Shortcut tab, click the button +you wish to use to trigger the command. For this example, you would press +the one with the Next Page picture on it. +Next_Virtual_Screen will appear in the key image. + + +In the Command/URL Settings tab, enter the +command to run in the field: dcop kwin default +nextDesktop + + + +Repeat the above with the Prev_Virtual_Screen key and +dcop kwin default +previousDesktop. + +Now pressing the Prev_Virtual_Screen or +Next_Virtual_Screen will switch you to the previous or next +virtual desktop, respectively. + +Obviously you can assign any free key to any action. + + +Related Information +See the KHotKeys documentation by +looking it up in &khelpcenter;, or typing +help:/khotkeys in a &konqueror; +window. + + + + + + + + + + + +Adriaan +de Groot + +groot@kde.org + + + + +&kdebugdialog; - Controlling &kde;'s Debugging Output + + +Basic Usage + +&kdebugdialog; is not in the &kmenu; by default. You will need to run +it from the shell or from the mini-CLI with +the command kdebugdialog. +&kdebugdialog; pops up a window with a long list of debugging areas. Each +area has a checkbox that you can check or uncheck in order to enable or disable debugging output for +that part of &kde;. + +The list of debugging areas is sorted numerically, not alphabetically, +so kio (127) comes before artskde (400). The numbers go up to 200000 or so, +but there are really only 400 areas. You don't have to scroll through the +entire list to find the area you need, though. There is a line edit box at the top of the dialog where you can enter a part of +the name of the area you want. The list of entries that is displayed is +filtered to include only those debug areas that contain the text you have +entered. ⪚ entering k does not filter very much at +all, but entering kont will show you just the &kontact; debugging areas. As an even +quicker way of enabling or disabling debugging output, there are also +select all and deselect all +buttons which will cause &kde; to produce a mountain of debugging output, or +very little. + + + +KDebugDialog in full mode + + + +In full mode, which is what you get when you start kdebugdialog as +kdebugdialog +, the same list of debugging areas +as in plain mode is available, but you can select only one at a time from a +drop-down box. You may then independently set the output +for various types of messages: Information, Warning, Error and Fatal Error. +For each of these types, you can choose where the messages are sent. The +choices are: + +File, in which case you can enter a filename. This file is written into your +$HOME directory. + +Message Box. Each debugging message is displayed in an information dialog, +which you must OK to continue with the +application. + +Shell, the default entry. Messages are printed to stderr, and will appear + either in the shell window where the application was started, or +in .xsession-errors. + +Syslog. This sends each debugging message to the system's syslog facility, +which can perform its own processing of the message. + +None. This suppresses the output of this type of message. + +For messages generated by fatal errors, it is generally a bad idea to choose +None or Syslog, since in both cases you most likely will not see the message +and the application that encounters the fatal error will vanish without +leaving a clue as to why it vanishes. Whether or not the application will +vanish on fatal errors can be controlled by the checkbox abort on +fatal errors, which is checked by default — but you might +expect an application to crash (in a messy fashion) if a fatal error is +encountered anyway. + + + + + + + + + + + diff --git a/doc/userguide/usenet.docbook b/doc/userguide/usenet.docbook new file mode 100644 index 000000000..2aba10a2b --- /dev/null +++ b/doc/userguide/usenet.docbook @@ -0,0 +1,251 @@ + + + + + + +Usenet News + +Usenet newsgroups are forums in which you can post messages to discuss +various topics: almost any subject you like (and many you don't!) can +be found there. Although usenet has become less popular than it once +was, because of the increasing use of web forums, &etc;, it is still a +useful tool. &kde; provides a powerful usenet news reader called &knode;. + +You can find &knode; in the K Menu under the +Internet entry: the menu entry +&knode; (News Reader) launches the program. + + +The main window of &knode; should now be displayed on your +desktop as shown; on the first start, the settings dialog will be +invoked. + + +Setting up &knode; + + + + +&knode; after first start + + +&knode; after first start + + + + + +Personal settings + +The first page of the settings dialog is for personal settings: + +Dialog for entering personal information + + + + +Entering personal information + + +Entering personal information + + + + + + + +Name + +In the field Name, enter your name. This +name will later appear in the newsgroups as sender, and can be seen by +anyone. + +Filling out the field Name is +mandatory. + + + + + +Email address + +The email address you enter here will be used as sender in news +articles, &ie; as actual address of the author, in conjunction with +the real name (set in the field Name). + +Filling out the Email Address field is +mandatory. + + + + + + + + + +Configuring the news account + + +Now we must tell &knode; about where we get the news from or +where to send the articles to later on. In the list on the +right, there is an Accounts entry; click on it and choose the +Newsgroup servers tab, because we first want to configure +the news account: the list of accounts is still empty. + +To create a new account click on Add.... The +following dialog appears: + + +The New Account dialog + + + + +The New Account dialog + + +The New Account dialog + + + + + + + +Name + +The Name field can be filled in as you +like; the text you enter will later be visible in the folder view. You +could, for example, enter the name of your Internet Provider; for our example we +enter the name My News Account. + + + + +Server + + +The next field is labelled Server. Unlike +the field Name, what you enter here is important. +The name of the news server is fixed and you should be able to get it +from your Internet service provider; if you do not know the name of +the news server, you should get it now: without this information you +cannot read any news. If your Internet service provider doesn't own a +news server you can use a public one (universities often provide +public news servers.) + +For our example configuration we enter the name +news.server.com; you will, +of course, enter the real name of your news server. + + + + +Port + +You probably will not need to change this from the default in most +cases. + + + + + + + + +Setting up the mail account + +Sometimes you need to answer to the author of an article +directly, without posting to the newsgroup; for example, when you want +to make a very personal comment or want to correct an error. If you +want to do this, select the Mail Server (SMTP) tab. The +following dialog box appears: + + +Dialog Box for setting up the mail account + + + + +Setting up the mail account + + +Setting up the mail account + + + + + + + +Server + +The name (address) of your mail server as provided by your +Internet service provider or system administrator; all you have to do +here is enter the mail server's name in the +Server field. + +In our example we enter mail.server.com + + + + + +Port + + +Again, you probably will not need to change the +Port setting. + + + + + + +Related Information +The comp.windows.x.kde newsgroup is the main user +support group for &kde; on usenet. You can find other resources for +getting help with &kde; in . + +Gmane provides a +usenet frontend to many mailing lists, including most of the &kde; +lists, so you can read them with &knode;. + + + + + + + + + diff --git a/doc/userguide/where-next.docbook b/doc/userguide/where-next.docbook new file mode 100644 index 000000000..2da8d3e84 --- /dev/null +++ b/doc/userguide/where-next.docbook @@ -0,0 +1,40 @@ + + + + + + +Where To Next? + +Web Sites + +Books + + + + diff --git a/doc/userguide/windows-how-to.docbook b/doc/userguide/windows-how-to.docbook new file mode 100644 index 000000000..914e228da --- /dev/null +++ b/doc/userguide/windows-how-to.docbook @@ -0,0 +1,559 @@ + + + + +&Philip.Rodrigues; + + + + + +Windows, How To Work Them + + +Basic Window Management +Window Management + +Each application running in &kde; has its own window, and some +applications may use more than one window. You can manipulate these +windows in many ways to make your desktop work for you. Here is a +normal window: + + + + + +A normal window + + + + + + +Switching Between Windows +Focus (windows) + +If you want to use a window, it must be active. A window +automatically becomes active when you open it, so that the application +you opened is immediately ready to use. Only one window can be active +at a time. The active window is the one into which you can type, and can +be distinguished from the others because it has a different colored +titlebar. (With the &kde; default theme, the active window has a +light blue titlebar, and the inactive +windows have gray titlebars.) + + +Raising Windows +When you want to work in a different window, you need to make +it active. There are two ways to do this: + + + +&LMB;-click on the window that you want to make active. The +window will become active and will be raised above other windows if it +overlaps them. + + + +&Alt; +Hold down &Alt; and press (do not release the &Alt; +key). A popup dialog appears with a list of available windows, one of +which is highlighted. You can select a different window by pressing + again to move through the list, all the time holding down +&Alt;. When you release the &Alt; key, the window which was highlighted +is made active. + + + + + + + +Moving Windows +Moving Windows + +The first way to organize the windows on your desktop is to move +them around. You can move windows so that they overlap other windows, +or so that you can see the whole window. There are three ways to move +a window: + + +Click the &LMB; on the window titlebar and hold it down. Move +the mouse cursor and the window moves with it. Release the mouse +button, and the window remains where you left it. + + + + + + + +Open the window menu using the leftmost button on the window +titlebar (as displayed below), and select Move. The mouse cursor +moves to the center of the current window and by moving the mouse +around, you can move the window. Once you have moved the window to the +position you want, click the &LMB; to release it. +Window Menu + + +The Window Menu + + + + + +The Window Menu + + + + + + +Hold down &Alt; and the &LMB; when the mouse cursor is +above the window you want to move. The mouse cursor changes to a +compass, and by moving the mouse, you can move the window. Just +release the mouse button to release the window. This method is +particularly useful if the window titlebar has been moved off the +screen, so you cannot use the other methods. + + + + + + + +Resizing Windows + +Resizing Windows + +You can make windows bigger or smaller, wider, or taller in +one of two ways. Just use whichever you are most comfortable with: + + +Move the mouse cursor over the border of the window (it is light +blue in the screenshot above). The pointer will turn into a +double-headed arrow. Click and drag, and the edge of the window +follows the mouse cursor, making the window bigger or smaller. If you +click on the borders on the top or bottom of the window, you can +adjust the height on its own. If you click on the borders on the left +or right of the window, you can adjust the width. To change both at +the same time, move the mouse cursor over the corner of the +window. When the pointer becomes a diagonal double-headed arrow, click +and drag. + + +Use the leftmost button on the window titlebar to display the +window menu. Choose the Resize entry, and +the mouse pointer will become a double-headed arrow. Move the mouse +cursor around to resize, and click the &LMB; when you are done +to release the window. + + +If you cannot see the window border or the button for the window +menu, you can use &Alt; and the &RMB;: Hold down &Alt; and drag with +the &RMB;. The window will resize. You just release the &RMB; when +you are done. + + + + +If you just want to make a window as big as possible, so it +takes up the whole screen, use the +MaximizeMaximizing +Windows button, which is the second +button from the right on the window titlebar. Clicking with the &LMB; +on this button will make the window as big as possible in both +directions; while clicking with the &MMB;Maximizing +WindowsVertically or the +&RMB;Maximizing WindowsHorizontally +will increase the window's size in only the vertical or horizontal +direction, respectively. + + + + + +Hiding Windows +Hiding Windows + + + +Minimize +When you need to keep a program open, but you do not want it to +take up space on your desktop, you can minimize it or shade it. To +minimize a window, click the Minimize button, +which is third from the right on the window titlebar. The window will +not be displayed, but the program is still running, and an entry for +it appears in the taskbar on the panel. To display the window again, +click on its entry in the taskbar. You can also use &Alt; &Alt; : see . + + +Shade +Shading windows is very similar to minimizing them, but this +time, only the titlebar of the window is shown. To shade a window, +double-click on the titlebar. To restore the window, just double-click +on the titlebar again. + + + +Cascading Windows + +Sometimes you might have a whole lot of windows open and all over the place. By selecting to cascade windows &kde; will automatically line them up as a succession from the top-left of your screen. To use this option use your &MMB; on the desktop, and then select Cascade Windows. + + + + +Uncluttering Windows + +By selecting to unclutter your opened windows &kde; will attempt to use the maximum available space of the desktop in order to display as much of each window as possible. For example, should you have four windows open and you request that they be uncluttered, they will each be placed in a corner of the desktop, regardless of where they were originally. To use this option once again use your &MMB; on the desktop and then select Unclutter Windows. + + + + +Closing Windows + +Closing Windows + +When you finish using an application, you will want to stop +the application and close its window. Once again, you have the choice +of a few options: + + +Click on the rightmost button on the window titlebar. + If you are editing a document with that application, +you will be asked whether you want to Save your +changes, Discard them, or +Cancel your command to close the application. + + +Use the FileQuit + option on the menubar. You will be presented with the +same choice of Save, +Discard, or +Cancel. + + + + Right-click on the respective window in &kicker;, the &kde; panel, and then select Close. You will be prompted with an option to save any documents that were being edited. + + + +Press &Alt;F4&Alt;F4 + +. Once again, the confirmation dialog will be shown if you +were editing any documents. + + + + + + + + + + + + + +Advanced Window Management + +kstart + + + +&Richard.J.Moore; +&Richard.J.Moore.mail; + + +&kstart; + +The simplest way to access the advanced window management +facilities in &kde; is to use a little known +utility called &kstart;, which is included in &kde; since version 2.1 &kstart; lets you control the way an application interacts with +the window manager. The command is usually +used to define special behavior for commonly-used applications, but +it can also be useful for integrating non-&kde; applications into your +desktop. + +Using &kstart; is easy: you simply put +kstart and some options +before a command. To begin, let's look at how we might use +&kstart; to customize the behaviour of a +&kcalc; window. The command we'll use is as follows: + +% kstart + + +With luck, the effect this command has +should be fairly obvious - the kcalc window will stay on top of all +the others and be visible on every virtual desktop. A feature that is +less obvious is that this command will work with any NET compliant +environment, not just &kde;. + +We can pass arguments to programs we invoke with &kstart; as normal, for +example: + +% kstart + +1 xmessage'Hello World' + + + +This command displays Hello +World with xmessage and +ensures that the window will be shown on the first virtual desktop and +will be omitted from the taskbar. The fact that this program is +written using the Xt toolkit rather than being a native &kde; +application does not cause any problem for +&kstart;, hopefully this illustrates how +&kstart; can be used to integrate foreign +applications into your &kde; desktop. + + + +Other Special Window Settings +While you can use &kstart; to assign particular window settings, &kde; also allows you to alter these -- as well as other similar settings -- from the program window itself. Simply select the leftmost button in the window titlebar (or just hit &Alt;F3 once the window is focued), and then go to AdvancedSpecial Window Settings.... As you can see, from here you change various things from its geometry upon startup, to whether it should have a border or not. + + + + + +&Richard.J.Moore; +&Richard.J.Moore.mail; + + + +The System Tray + +Now that we know how to customize the decoration of a window +let's take a look at another aspect of the desktop: the system +tray. The system tray is an area in which an application can display a +small window. It is used to display status information or provide +quick access to commands. A window that has an item in the system tray +usually disappears from the task manager when minimised with the tray +icon providing a replacement. Normally tray icons are specifically +developed as part of an application, but as with window decorations, +&kde; provides a tool for changing this: +ksystraycmd. + +To begin with, we'll take the standard application &kcalc; and turn +it into a system tray application. This is acheived with one simple +command: +% ksystraycmd 'kcalc' kcalc + + + +The icon shown in the tray is the one specified in the window +hints and will be updated if the icon changes. The window title is +shown as a tooltip if you hold the mouse over the icon. +ksystraycmd follows standard &kde; +behaviour so the target window can be shown and hidden by clicking the +tray icon, and a standard context menu is available. + + + + + + + + +&Richard.J.Moore; +&Richard.J.Moore.mail; + + + +More Complex Uses of +<application>ksystraycmd</application> + +To illustrate the other features of +ksystraycmd, we'll use a more complicated example: a &konsole; window tracking the +.xsession-errors file (this is the log file that records what's +happening on your desktop). To begin with, we'll simply look at how +we can view this: +% konsole +log 'X Log' \ + + \ + tail -f ~/.xsession-errors + + + The and +arguments are provided as standard by &kde; applications. You can get +a full list of these global options by running an application with the + and +parameters. Here we give our &konsole; window the title 'X Log' and +the icon log. You can use these options with any &kde; application and +as mentioned above, ksystraycmd takes account of these when creating +the tray icon. The argument is specific to &konsole; and tells it +to run the less command. Despite its complexity, we can easily move +this window into the tray with ksystraycmd: + +% ksystraycmd + 'X Log' \ +konsole --icon log --caption 'XLog' \ +--nomenubar --notabbar --noframe \ +-e tail -f .xsession-errors + + + In addition to being the +most complex command we've used, this example demonstrates the + option which starts the command with only the system tray +icon visible. This example achieves our aim of providing quick access +to the log file, but we can do things a little more efficiently if we +only run the konsole process when it is visible. The command we use +is +% ksystraycmd \ + -- log 'X Log' \ +konsole --icon log --caption 'X Log' \ +--nomenubar --notabbar --noframe \ +-e tail -f ~/.xsession-errors + + +The addition of the parameter tells +ksystraycmd to start with only the tray +icon visible (like the parameter), and to wait until the user +activates the tray icon before running the target command. We've also +used the parameter which tells ksystraycmd to terminate +the target app whenever its window is hidden. Using both these +parameters ensures that our &konsole; tray icon doesn't waste resources +when we aren't using it. Creating and destroying the target window as +we do here prevents the standard icon and title handling of +ksystraycmd from working, so we now need to +specify the initial icon and tooltip explicitly +too. + + + + + +&Richard.J.Moore; +&Richard.J.Moore.mail; + + + +Improving Reliability + +In all of our previous examples we've relied on +&kstart; and +ksystraycmd to figure out which window we +want to affect, and unless we say otherwise, they assume that the first +window to appear is the one we want. This policy is usually OK because +we are starting the application at the same time, but it can fail +badly when lots of windows are appearing (such as when you log on). To +make our commands more robust we can use the + parameter. This specifies the title +of the target window. The following example uses the parameter +to ensure that a particular konsole window is affected: + +% kstart 'kstart_me' konsole +--caption 'kstart_me' -e tail -f +~/.xsession-errors + + + +Here we've used the tried and tested technique of specifying a +title for both &kstart; and the target application. This is generally +the best way to use &kstart; and ksystraycmd. The argument is +supported by both &kstart; and and can be regular expression +(⪚ window[0-9]) as well as a particular title. (Regular +expressions are a powerful pattern matching tool you'll find used +throughout &kde;.) + + + + + + +Using Multiple Desktops + +Virtual Desktops +Multiple Desktops + +Sometimes, one screen's worth is just not enough space. If you +use many applications at the same time, and find yourself drowning in +different windows, virtual desktops offer the solution. By default, +&kde; has four virtual desktops, each one of which is like a separate +screen: you can open windows, move windows around, and set backgrounds and +icons on each of the desktops. If you are familiar with the concept of +virtual terminals, you will have no trouble with &kde;'s virtual +desktops. + + +Switching Virtual Desktops +To move to a different virtual desktop, you can use &Ctrl; + in the same way as you would use &Alt; + to switch between windows (see ): Hold down &Ctrl; and then press + . A small popup window appears, showing the virtual desktops, +with one highlighted. If you release &Ctrl;, &kde; will switch to the +highlighted virtual desktop. To select a different desktop, press + repeatedly, while holding down &Ctrl;. The selection moves +through the available desktops. When the desktop you want to switch to +is highlighted, release &Ctrl;. + + + + + + +Windows and Virtual Desktops +You can move windows around your virtual desktops with the +To Desktop item in the window menu: just +select the desktop to which you want to move the window. You can make the +window appear on all desktops with the All +DesktopsSticky +Windows item. + + + + + + + + + diff --git a/doc/userguide/your-kde-account.docbook b/doc/userguide/your-kde-account.docbook new file mode 100644 index 000000000..aa37dddac --- /dev/null +++ b/doc/userguide/your-kde-account.docbook @@ -0,0 +1,79 @@ + + + + + + +About Your &kde; Account + +&kde; stores information about your personal settings in a few +different places: + + +The hidden directory .kde (note the +period at the beginning), located in your home directory, contains a +large number of files that store &kde; settings. Some subdirectories +you may find useful are:.kde/share/config, which +contains configuration files for individual applications; +.kde/Autostart, which contains links to +applications which should start each time you start &kde;; and +.kde/share/apps/kabc, where your address book is +stored. + + + +The environment variables KDEDIR and +KDEDIRS tell &kde; where its files are stored. You will +usually only need to set KDEDIR to the directory in which +&kde; is installed, but sometimes you might have other &kde; +programs installed elsewhere: in this case, you can use the +KDEDIRS environment variable. Set +KDEDIRS to a list of all the directories containing +&kde; programs, separated by commas. For example, if you have &kde; +programs in both /usr/local/kde and +/home/phil/kde, you can use export +KDEDIR=/usr/local/kde,/home/phil/kde if you use +bash or setenv +KDEDIR=/usr/local/kde,/home/phil/kde if you use sh. + + + + + + + +Related Information + contains +more information about the directories that &kde; uses. + + + + + + + diff --git a/doc/visualdict/Makefile.am b/doc/visualdict/Makefile.am new file mode 100644 index 000000000..81064650f --- /dev/null +++ b/doc/visualdict/Makefile.am @@ -0,0 +1,4 @@ + +KDE_LANG = en +KDE_DOCS = khelpcenter/visualdict + diff --git a/doc/visualdict/index.docbook b/doc/visualdict/index.docbook new file mode 100644 index 000000000..c950ca395 --- /dev/null +++ b/doc/visualdict/index.docbook @@ -0,0 +1,349 @@ + + + + + + +]> + + + + +The &kde; Visual Guide + + +The &kde; Team + + + + +2006-12-06 +3.00.00 + + +20002006 +The &kde; Team + + +&FDLNotice; + +A visual guide to &kde;'s interface. This is a very early +version +of the document. Eventually, this will be a graphical tour of +&kde;. + + +KDE +Visual +Dictionary +Guide + + + + + + + + + + +&kde; Visual Dictionary of terms + +This project was started to help unify the vocabulary used in &kde; +documentation. + +We provide this for you here as an aid to learning your way around the +&kde; +Graphical User Interface. These names have been standardized within &kde; +documentation, so that you will always find interface items referred to in the +same way. + +The term Widget refers to the basic building +block of a computer program's interface. +Each widget operates in a +similar manner each time it is used, but the effect that the widget has depends on +its place within the program. + + + +Listing of Common &kde; Widgets +Currently, this guide consists of a table of the names of the graphical +elements often found in &kde; documentation, and an example of each one. +Our hope, eventually, is to make this a much more complete document, +which will take you on a visual tour of &kde;. + + + + + + +Button + + + + + + + + + + +Check Boxes + + + + + + + + + + +Color Selector + + + + + + + + + + +Combo Box + + + + + + + + + + +Context Menu + + + + + + + + + + +Dialog Box + + + + + + + + + + +Drop Down Box + + + + + + + + + + +Icon List + + + + + + + + + + +List Box + + + + + + + + + + + + + + + +Menubar + + + + + + + + + + +Progress Bar + + + + + + + + + + +Radio Buttons + + + + + + + + + + +Scroll Bar + + + + + + + + + + +Slider + + + + + + + + + + +Spin Box + + + + + + + + + + +Status Bar + + + + + + + + + + +Tab + + + + + + + + + + +Tabbed Window + + + + + + + + + + +Text Box + + + + + + + + + + +Toolbar + + + + + + + + + + +Tree View + + + + + + + + + + + +Window Titlebar + + + + + + + + + + + + + + + +Credits and Licenses +&kappname; + +Documentation by the &kde; Documentation Team. + +&underFDL; + + + + diff --git a/doc/visualdict/pict1.png b/doc/visualdict/pict1.png new file mode 100644 index 000000000..de9cf8695 Binary files /dev/null and b/doc/visualdict/pict1.png differ diff --git a/doc/visualdict/pict10.png b/doc/visualdict/pict10.png new file mode 100644 index 000000000..4d526ca74 Binary files /dev/null and b/doc/visualdict/pict10.png differ diff --git a/doc/visualdict/pict11.png b/doc/visualdict/pict11.png new file mode 100644 index 000000000..5968a7a2d Binary files /dev/null and b/doc/visualdict/pict11.png differ diff --git a/doc/visualdict/pict12.png b/doc/visualdict/pict12.png new file mode 100644 index 000000000..49643c607 Binary files /dev/null and b/doc/visualdict/pict12.png differ diff --git a/doc/visualdict/pict13.png b/doc/visualdict/pict13.png new file mode 100644 index 000000000..26a615502 Binary files /dev/null and b/doc/visualdict/pict13.png differ diff --git a/doc/visualdict/pict14.png b/doc/visualdict/pict14.png new file mode 100644 index 000000000..1f32bfe83 Binary files /dev/null and b/doc/visualdict/pict14.png differ diff --git a/doc/visualdict/pict15.png b/doc/visualdict/pict15.png new file mode 100644 index 000000000..6fc7a5ca2 Binary files /dev/null and b/doc/visualdict/pict15.png differ diff --git a/doc/visualdict/pict16.png b/doc/visualdict/pict16.png new file mode 100644 index 000000000..c5692e751 Binary files /dev/null and b/doc/visualdict/pict16.png differ diff --git a/doc/visualdict/pict17.png b/doc/visualdict/pict17.png new file mode 100644 index 000000000..a49a9a271 Binary files /dev/null and b/doc/visualdict/pict17.png differ diff --git a/doc/visualdict/pict18.png b/doc/visualdict/pict18.png new file mode 100644 index 000000000..0853ddb52 Binary files /dev/null and b/doc/visualdict/pict18.png differ diff --git a/doc/visualdict/pict19.png b/doc/visualdict/pict19.png new file mode 100644 index 000000000..e366a3da1 Binary files /dev/null and b/doc/visualdict/pict19.png differ diff --git a/doc/visualdict/pict2.png b/doc/visualdict/pict2.png new file mode 100644 index 000000000..87724f8ea Binary files /dev/null and b/doc/visualdict/pict2.png differ diff --git a/doc/visualdict/pict20.png b/doc/visualdict/pict20.png new file mode 100644 index 000000000..82c4a738e Binary files /dev/null and b/doc/visualdict/pict20.png differ diff --git a/doc/visualdict/pict21.png b/doc/visualdict/pict21.png new file mode 100644 index 000000000..573c7a2a0 Binary files /dev/null and b/doc/visualdict/pict21.png differ diff --git a/doc/visualdict/pict22.png b/doc/visualdict/pict22.png new file mode 100644 index 000000000..052be0b83 Binary files /dev/null and b/doc/visualdict/pict22.png differ diff --git a/doc/visualdict/pict23.png b/doc/visualdict/pict23.png new file mode 100644 index 000000000..1e09a5787 Binary files /dev/null and b/doc/visualdict/pict23.png differ diff --git a/doc/visualdict/pict3.png b/doc/visualdict/pict3.png new file mode 100644 index 000000000..124986e53 Binary files /dev/null and b/doc/visualdict/pict3.png differ diff --git a/doc/visualdict/pict4.png b/doc/visualdict/pict4.png new file mode 100644 index 000000000..498ca7212 Binary files /dev/null and b/doc/visualdict/pict4.png differ diff --git a/doc/visualdict/pict5.png b/doc/visualdict/pict5.png new file mode 100644 index 000000000..f383ca563 Binary files /dev/null and b/doc/visualdict/pict5.png differ diff --git a/doc/visualdict/pict6.png b/doc/visualdict/pict6.png new file mode 100644 index 000000000..542b2f278 Binary files /dev/null and b/doc/visualdict/pict6.png differ diff --git a/doc/visualdict/pict7.png b/doc/visualdict/pict7.png new file mode 100644 index 000000000..4ed9d6074 Binary files /dev/null and b/doc/visualdict/pict7.png differ diff --git a/doc/visualdict/pict8.png b/doc/visualdict/pict8.png new file mode 100644 index 000000000..6f896ea4b Binary files /dev/null and b/doc/visualdict/pict8.png differ diff --git a/doc/visualdict/pict9.png b/doc/visualdict/pict9.png new file mode 100644 index 000000000..9a4aac405 Binary files /dev/null and b/doc/visualdict/pict9.png differ diff --git a/drkonqi/AUTHORS b/drkonqi/AUTHORS new file mode 100644 index 000000000..9c86ff323 --- /dev/null +++ b/drkonqi/AUTHORS @@ -0,0 +1 @@ +Hans Petter Bieker diff --git a/drkonqi/LICENSE b/drkonqi/LICENSE new file mode 100644 index 000000000..cca2a5c9a --- /dev/null +++ b/drkonqi/LICENSE @@ -0,0 +1,20 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/drkonqi/Makefile.am b/drkonqi/Makefile.am new file mode 100644 index 000000000..30959a0bf --- /dev/null +++ b/drkonqi/Makefile.am @@ -0,0 +1,26 @@ + +AM_CPPFLAGS = -DQT_NO_CAST_ASCII + +SUBDIRS = presets pics debuggers + +INCLUDES = $(all_includes) +METASOURCES = AUTO + +EXTRA_DIST = LICENSE + +bin_PROGRAMS = drkonqi + +# Libraries: +AM_LDFLAGS = $(all_libraries) $(KDE_RPATH) +LDADD = $(LIB_KDEUI) $(LIB_KIO) + +# toplevel.cpp must be last in row due to X-headers being included. (--enable-final) +# Did I mention already that X header files really suck? +drkonqi_SOURCES = krashdcopinterface.skel main.cpp debugger.cpp krashconf.cpp drbugreport.cpp backtrace.cpp toplevel.cpp + + +check_PROGRAMS = crashtest +crashtest_SOURCES = crashtest.cpp + +messages: + $(XGETTEXT) *.cpp -o $(podir)/drkonqi.pot diff --git a/drkonqi/README b/drkonqi/README new file mode 100644 index 000000000..34839e214 --- /dev/null +++ b/drkonqi/README @@ -0,0 +1,6 @@ +How to activate the developer mode for DrKonqi: + +$KDEHOME/share/config/drkonqirc: + +[drkonqi] +ConfigName=developer diff --git a/drkonqi/backtrace.cpp b/drkonqi/backtrace.cpp new file mode 100644 index 000000000..1bf48a4c1 --- /dev/null +++ b/drkonqi/backtrace.cpp @@ -0,0 +1,181 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "krashconf.h" +#include "backtrace.h" +#include "backtrace.moc" + +BackTrace::BackTrace(const KrashConfig *krashconf, QObject *parent, + const char *name) + : QObject(parent, name), + m_krashconf(krashconf), m_temp(0) +{ + m_proc = new KProcess; +} + +BackTrace::~BackTrace() +{ + pid_t pid = m_proc ? m_proc->pid() : 0; + // we don't want the gdb process to hang around + delete m_proc; // this will kill gdb (SIGKILL, signal 9) + + // continue the process we ran backtrace on. Gdb sends SIGSTOP to the + // process. For some reason it doesn't work if we send the signal before + // gdb has exited, so we better wait for it. + // Do not touch it if we never ran backtrace. + if (pid) + { + waitpid(pid, NULL, 0); + kill(m_krashconf->pid(), SIGCONT); + } + + delete m_temp; +} + +void BackTrace::start() +{ + QString exec = m_krashconf->tryExec(); + if ( !exec.isEmpty() && KStandardDirs::findExe(exec).isEmpty() ) + { + QObject * o = parent(); + + if (o && !o->inherits("QWidget")) + { + o = NULL; + } + + KMessageBox::error( + (QWidget *)o, + i18n("Could not generate a backtrace as the debugger '%1' was not found.").arg(exec)); + return; + } + m_temp = new KTempFile; + m_temp->setAutoDelete(TRUE); + int handle = m_temp->handle(); + QString backtraceCommand = m_krashconf->backtraceCommand(); + const char* bt = backtraceCommand.latin1(); + ::write(handle, bt, strlen(bt)); // the command for a backtrace + ::write(handle, "\n", 1); + ::fsync(handle); + + // start the debugger + m_proc = new KProcess; + m_proc->setUseShell(true); + + QString str = m_krashconf->debuggerBatch(); + m_krashconf->expandString(str, true, m_temp->name()); + + *m_proc << str; + + connect(m_proc, SIGNAL(receivedStdout(KProcess*, char*, int)), + SLOT(slotReadInput(KProcess*, char*, int))); + connect(m_proc, SIGNAL(processExited(KProcess*)), + SLOT(slotProcessExited(KProcess*))); + + m_proc->start ( KProcess::NotifyOnExit, KProcess::All ); +} + +void BackTrace::slotReadInput(KProcess *, char* buf, int buflen) +{ + QString newstr = QString::fromLocal8Bit(buf, buflen); + m_strBt.append(newstr); + + emit append(newstr); +} + +void BackTrace::slotProcessExited(KProcess *proc) +{ + // start it again + kill(m_krashconf->pid(), SIGCONT); + + if (proc->normalExit() && (proc->exitStatus() == 0) && + usefulBacktrace()) + { + processBacktrace(); + emit done(m_strBt); + } + else + emit someError(); +} + +// analyze backtrace for usefulness +bool BackTrace::usefulBacktrace() +{ + // remove crap + if( !m_krashconf->removeFromBacktraceRegExp().isEmpty()) + m_strBt.replace(QRegExp( m_krashconf->removeFromBacktraceRegExp()), QString::null); + + if( m_krashconf->disableChecks()) + return true; + // prepend and append newline, so that regexps like '\nwhatever\n' work on all lines + QString strBt = '\n' + m_strBt + '\n'; + // how many " ?? " in the bt ? + int unknown = 0; + if( !m_krashconf->invalidStackFrameRegExp().isEmpty()) + unknown = strBt.contains( QRegExp( m_krashconf->invalidStackFrameRegExp())); + // how many stack frames in the bt ? + int frames = 0; + if( !m_krashconf->frameRegExp().isEmpty()) + frames = strBt.contains( QRegExp( m_krashconf->frameRegExp())); + else + frames = strBt.contains('\n'); + bool tooShort = false; + if( !m_krashconf->neededInValidBacktraceRegExp().isEmpty()) + tooShort = ( strBt.find( QRegExp( m_krashconf->neededInValidBacktraceRegExp())) == -1 ); + return !m_strBt.isNull() && !tooShort && (unknown < frames); +} + +// remove stack frames added because of KCrash +void BackTrace::processBacktrace() +{ + if( !m_krashconf->kcrashRegExp().isEmpty()) + { + QRegExp kcrashregexp( m_krashconf->kcrashRegExp()); + int pos = kcrashregexp.search( m_strBt ); + if( pos >= 0 ) + { + int len = kcrashregexp.matchedLength(); + if( m_strBt[ pos ] == '\n' ) + { + ++pos; + --len; + } + m_strBt.remove( pos, len ); + m_strBt.insert( pos, QString::fromLatin1( "[KCrash handler]\n" )); + } + } +} diff --git a/drkonqi/backtrace.h b/drkonqi/backtrace.h new file mode 100644 index 000000000..861548f69 --- /dev/null +++ b/drkonqi/backtrace.h @@ -0,0 +1,66 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#ifndef BACKTRACE_H +#define BACKTRACE_H + +class KProcess; +class KrashConfig; +class KTempFile; + +#include + +class BackTrace : public QObject +{ + Q_OBJECT + +public: + BackTrace(const KrashConfig *krashconf, QObject *parent, + const char *name = 0); + ~BackTrace(); + + void start(); + +signals: + void append(const QString &str); // Just the new text + + void someError(); + void done(const QString &); // replaces whole text + +protected slots: + void slotProcessExited(KProcess * proc); + void slotReadInput(KProcess * proc, char * buf, int buflen); + +private: + bool usefulBacktrace(); + void processBacktrace(); + KProcess *m_proc; + const KrashConfig *m_krashconf; + KTempFile *m_temp; + QString m_strBt; +}; +#endif diff --git a/drkonqi/crashtest.cpp b/drkonqi/crashtest.cpp new file mode 100644 index 000000000..8d41e6325 --- /dev/null +++ b/drkonqi/crashtest.cpp @@ -0,0 +1,92 @@ +// Let's crash. +#include +#include +#include +#include +#include +#include + +static KCmdLineOptions options[] = +{ + { "+crash|malloc|div0|assert", "Type of crash.", 0 }, + KCmdLineLastOption +}; + +enum CrashType { Crash, Malloc, Div0, Assert }; + +void do_crash() +{ + KCmdLineArgs *args = 0; + QCString type = args->arg(0); + printf("result = %s\n", type.data()); +} + +void do_malloc() +{ + delete (char*)0xdead; +} + +void do_div0() +{ + volatile int a = 99; + volatile int b = 10; + volatile int c = a / ( b - 10 ); + printf("result = %d\n", c); +} + +void do_assert() +{ + assert(false); +} + +void level4(int t) +{ + if (t == Malloc) + do_malloc(); + else if (t == Div0) + do_div0(); + else if (t == Assert) + do_assert(); + else + do_crash(); +} + +void level3(int t) +{ + level4(t); +} + +void level2(int t) +{ + level3(t); +} + +void level1(int t) +{ + level2(t); +} + +int main(int argc, char *argv[]) +{ + KAboutData aboutData("crashtext", "Crash Test for DrKonqi", + "1.1", + "Crash Test for DrKonqi", + KAboutData::License_GPL, + "(c) 2000-2002 David Faure, Waldo Bastian"); + + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions(options); + + KApplication app(false, false); + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + QCString type = args->count() ? args->arg(0) : ""; + int crashtype = Crash; + if (type == "malloc") + crashtype = Malloc; + else if (type == "div0") + crashtype = Div0; + else if (type == "assert") + crashtype = Assert; + level1(crashtype); + return app.exec(); +} diff --git a/drkonqi/debugger.cpp b/drkonqi/debugger.cpp new file mode 100644 index 000000000..95ec6c9ba --- /dev/null +++ b/drkonqi/debugger.cpp @@ -0,0 +1,219 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "backtrace.h" +#include "krashconf.h" +#include "debugger.h" +#include "debugger.moc" + +KrashDebugger :: KrashDebugger (const KrashConfig *krashconf, QWidget *parent, const char *name) + : QWidget( parent, name ), + m_krashconf(krashconf), + m_proctrace(0) +{ + QVBoxLayout *vbox = new QVBoxLayout( this, 0, KDialog::marginHint() ); + vbox->setAutoAdd(TRUE); + + m_backtrace = new KTextBrowser(this); + m_backtrace->setTextFormat(Qt::PlainText); + m_backtrace->setFont(KGlobalSettings::fixedFont()); + + QWidget *w = new QWidget( this ); + ( new QHBoxLayout( w, 0, KDialog::marginHint() ) )->setAutoAdd( true ); + m_status = new QLabel( w ); + m_status->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) ); + //m_copyButton = new KPushButton( KStdGuiItem::copy(), w ); + KGuiItem item( i18n( "C&opy" ), QString::fromLatin1( "editcopy" ) ); + m_copyButton = new KPushButton( item, w ); + connect( m_copyButton, SIGNAL( clicked() ), this, SLOT( slotCopy() ) ); + m_copyButton->setEnabled( false ); + m_saveButton = new KPushButton( m_krashconf->safeMode() ? KStdGuiItem::save() : KStdGuiItem::saveAs(), w ); + connect( m_saveButton, SIGNAL( clicked() ), this, SLOT( slotSave() ) ); + m_saveButton->setEnabled( false ); +} + +KrashDebugger :: ~KrashDebugger() +{ + // This will SIGKILL gdb and SIGCONT program which crashed. + // delete m_proctrace; +} + +void KrashDebugger :: slotDone(const QString& str) +{ + m_status->setText(i18n("Done.")); + m_copyButton->setEnabled( true ); + m_saveButton->setEnabled( true ); + m_backtrace->setText( m_prependText + str ); // replace with possibly post-processed backtrace +} + +void KrashDebugger :: slotCopy() +{ + m_backtrace->selectAll(); + m_backtrace->copy(); +} + +void KrashDebugger :: slotSave() +{ + if (m_krashconf->safeMode()) + { + KTempFile tf(QString::fromAscii("/tmp/"), QString::fromAscii(".kcrash"), 0600); + if (!tf.status()) + { + *tf.textStream() << m_backtrace->text(); + tf.close(); + KMessageBox::information(this, i18n("Backtrace saved to %1").arg(tf.name())); + } + else + { + KMessageBox::sorry(this, i18n("Cannot create a file in which to save the backtrace")); + } + } + else + { + QString defname = m_krashconf->execName() + QString::fromLatin1( ".kcrash" ); + if( defname.contains( '/' )) + defname = defname.mid( defname.findRev( '/' ) + 1 ); + QString filename = KFileDialog::getSaveFileName(defname, QString::null, this, i18n("Select Filename")); + if (!filename.isEmpty()) + { + QFile f(filename); + + if (f.exists()) { + if (KMessageBox::Cancel == + KMessageBox::warningContinueCancel( 0, + i18n( "A file named \"%1\" already exists. " + "Are you sure you want to overwrite it?" ).arg( filename ), + i18n( "Overwrite File?" ), + i18n( "&Overwrite" ) )) + return; + } + + if (f.open(IO_WriteOnly)) + { + QTextStream ts(&f); + ts << m_backtrace->text(); + f.close(); + } + else + { + KMessageBox::sorry(this, i18n("Cannot open file %1 for writing").arg(filename)); + } + } + } +} + +void KrashDebugger :: slotSomeError() +{ + m_status->setText(i18n("Unable to create a valid backtrace.")); + m_backtrace->setText(i18n("This backtrace appears to be of no use.\n" + "This is probably because your packages are built in a way " + "which prevents creation of proper backtraces, or the stack frame " + "was seriously corrupted in the crash.\n\n" ) + + m_backtrace->text()); +} + +void KrashDebugger :: slotAppend(const QString &str) +{ + m_status->setText(i18n("Loading backtrace...")); + + // append doesn't work here because it will add a newline as well + m_backtrace->setText(m_backtrace->text() + str); +} + +void KrashDebugger :: showEvent(QShowEvent *e) +{ + QWidget::showEvent(e); + startDebugger(); +} + +void KrashDebugger :: startDebugger() +{ + // Only start one copy + if (m_proctrace || !m_backtrace->text().isEmpty()) + return; + + QString msg; + bool checks = performChecks( &msg ); + if( !checks && !m_krashconf->disableChecks()) + { + m_backtrace->setText( m_prependText + + i18n( "The following options are enabled:\n\n" ) + + msg + + i18n( "\nAs the usage of these options is not recommended -" + " because they can, in rare cases, be responsible for KDE problems - a backtrace" + " will not be generated.\n" + "You need to turn these options off and reproduce" + " the problem again in order to get a backtrace.\n" )); + m_status->setText( i18n( "Backtrace will not be created.")); + return; + } + if( !msg.isEmpty()) + { + m_prependText += msg + '\n'; + m_backtrace->setText( m_prependText ); + } + m_status->setText(i18n("Loading symbols...")); + + m_proctrace = new BackTrace(m_krashconf, this); + + connect(m_proctrace, SIGNAL(append(const QString &)), + SLOT(slotAppend(const QString &))); + connect(m_proctrace, SIGNAL(done(const QString&)), SLOT(slotDone(const QString&))); + connect(m_proctrace, SIGNAL(someError()), SLOT(slotSomeError())); + + m_proctrace->start(); +} + +// this function check for "dangerous" settings, returns false +// and message in case some of them are activated +bool KrashDebugger::performChecks( QString* msg ) +{ + bool ret = true; + KConfig kdedcfg( QString::fromLatin1( "kdedrc" ), true ); + kdedcfg.setGroup( "General" ); + if( kdedcfg.readBoolEntry( "DelayedCheck", false )) + { + // ret = false; it's not that dangerous + *msg += i18n( "System configuration startup check disabled.\n" ); + } + return ret; +} diff --git a/drkonqi/debugger.h b/drkonqi/debugger.h new file mode 100644 index 000000000..ba1d87385 --- /dev/null +++ b/drkonqi/debugger.h @@ -0,0 +1,72 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#ifndef DEBUGGER_H +#define DEBUGGER_H + +class QLabel; +class QPushButton; +class KrashConfig; +class KTextBrowser; +class BackTrace; + +#include + +class KrashDebugger : public QWidget +{ + Q_OBJECT + +public: + KrashDebugger(const KrashConfig *krashconf, QWidget *parent = 0, const char *name = 0); + ~KrashDebugger(); + +public slots: + void slotAppend(const QString &); + void slotDone(const QString&); + void slotSomeError(); + +protected: + void startDebugger(); + bool performChecks( QString* msg ); + + virtual void showEvent(QShowEvent *e); + +protected slots: + void slotCopy(); + void slotSave(); + +private: + const KrashConfig *m_krashconf; + BackTrace *m_proctrace; + QLabel *m_status; + KTextBrowser *m_backtrace; + QPushButton * m_copyButton; + QPushButton * m_saveButton; + QString m_prependText; +}; + +#endif diff --git a/drkonqi/debuggers/Makefile.am b/drkonqi/debuggers/Makefile.am new file mode 100644 index 000000000..6530b4ebe --- /dev/null +++ b/drkonqi/debuggers/Makefile.am @@ -0,0 +1,2 @@ +drkonqi_debuggers_data_DATA = gdbrc +drkonqi_debuggers_datadir = $(kde_datadir)/drkonqi/debuggers diff --git a/drkonqi/debuggers/gdbrc b/drkonqi/debuggers/gdbrc new file mode 100644 index 000000000..5254aafe6 --- /dev/null +++ b/drkonqi/debuggers/gdbrc @@ -0,0 +1,166 @@ +[General] +Name=GNU Debugger +Name[af]=GNU Ontfouter +Name[az]=GNU Xəta Ayırıcısı +Name[be]=Адладчык GNU +Name[bn]=গনিউ ডিবাগার +Name[br]=Dizraener GNU +Name[ca]=Depurador de GNU +Name[csb]=GNU Debuger +Name[cy]=Dadnamydd GNU +Name[da]=GNU Fejlretter +Name[de]=GNU-Debugger +Name[el]=Αποσφαλματωτής GNU +Name[eo]=GNUa Erarserĉilo +Name[es]=Depurador de GNU +Name[et]=GNU silur +Name[eu]=GNU aratzailea +Name[fa]=اشکال‌زدای گنو +Name[fi]=GNU-vianjäljitysohjelma +Name[fo]=GNU kembari +Name[fr]=Débogueur GNU +Name[ga]=Dífhabhtóir GNU +Name[gl]=Depurador de GNU +Name[he]=מנפה הבאגים של GNU +Name[hi]=जीएनयू डिबगर +Name[hr]=GNU ispravak nedostataka +Name[hu]=GNU nyomkövető +Name[id]=Debugger GNU +Name[is]=GNU Aflúsari +Name[it]=Debugger GNU +Name[ja]=GNU デバッガ +Name[ka]= GNU შემსწორებელი +Name[kk]=GNU жөндеуші +Name[km]=កម្មវិធី​បំបាត់​កំហុស​របស់ GNU +Name[ko]=GNU 디버거 +Name[lo]=ຕົວດີບັກຂອງ GNU +Name[lt]=GNU debugeris +Name[lv]=GNU Atkļūdotājs +Name[mk]=GNU чистач на бубачки +Name[mn]=GNU-Debugger +Name[ms]=Penyahralat GNU +Name[nb]=Avluser for GNU +Name[nds]=GNU-Debugger +Name[ne]=GNU त्रुटि मोचक +Name[nn]=Avlusar for GNU +Name[nso]=Debugger ya GNU +Name[oc]=Depurador GNU +Name[pa]=GNU ਡੀਬੱਗਰ +Name[pl]=GNU Debuger +Name[pt]=Depurador da GNU +Name[pt_BR]=Depurador GNU +Name[ro]=Depanator GNU +Name[ru]=Отладчик GNU +Name[rw]=Mukemuramakosa GNU +Name[se]=GNU meattáhusohci +Name[sk]=GNU debugger +Name[sl]=GNU-jevski razhroščevalnik +Name[sr]=GNU debugger +Name[sr@Latn]=GNU debugger +Name[ss]=Sisusi ma-bug se GNU +Name[sv]=GNU-felsökningsprogram +Name[ta]=GNU பிழைநீக்கி +Name[te]=గ్నూ డీబగ్గర్ +Name[tg]=Тасҳеҳгари GNU +Name[th]=ตัวดีบักของ GNU +Name[tr]=GNU Hata Ayıklayıcı +Name[tt]=GNU Betçe +Name[uk]=Зневадник GNU +Name[uz]=GNU debagger +Name[uz@cyrillic]=GNU дебаггер +Name[vi]=Trình gỡ lỗi GNU +Name[wa]=Disbugueu GNU +Name[zh_CN]=GNU 调试器 +Name[zh_TW]=GNU 除錯器 +Name[zu]=Umcoshi wamaphutha we-GNU +Comment=Text based debugger from GNU in a konsole +Comment[af]=Teks gebaseerde ontfouter van Gnu in 'n konsole +Comment[az]=GNU'dan konsol üçün mətn əsaslı xəta ayıqlayıcı +Comment[be]=Тэкставы адладчык ад GNU, запушчаны ў кансолі +Comment[bg]=Текстов редактор за откриване на грешки от GNU в конзола +Comment[br]=Dizraener doare skrid eus GNU en ur letrin +Comment[bs]=GNU tekstualni debugger u konsoli +Comment[ca]=Depurador de GNU basat en text en una konsole +Comment[cs]=Textový ladicí GNU program pro konzoli +Comment[csb]=Tekstowi debuger GNU w kònsole +Comment[cy]=Dadnamydd testun o GNU mewn konsole +Comment[da]=Tekstbaseret fejlretter fra GNU i en konsol +Comment[de]=Text-Debugger von GNU in einer Konsole +Comment[el]=Αποσφαλματωτής βασισμένος σε κείμενο από τη GNU σε μία κονσόλα +Comment[eo]=Tekstbazita GNU-erarserĉilo en konzolo +Comment[es]=Depurador en modo texto de GNU en un terminal +Comment[et]=Tekstipõhine GNU silur +Comment[eu]=Testuan oinarritutako GNUren aratzailea kontsola batean +Comment[fa]=اشکال‌زدای متنی از گنو در یکkonsole +Comment[fi]=Tekstipohjainen GNU-vianjäljitysohjelma Konsolessa +Comment[fo]=GNU kembari í ein tekstgluggi. +Comment[fr]=Débogueur du GNU en mode texte dans Konsole +Comment[fy]=Tekst basearre debugger fan GNU, yn in konsole +Comment[ga]=Dífhabhtóir GNU i konsole +Comment[gl]=Depurador de GNU en modo texto nunha konsole +Comment[he]=מנפה באגים של GNU מבוסס טקסט במסוף +Comment[hi]=कंसोल में जीएनयू से पाठ आधारित डिबगर +Comment[hr]=Tekstualno otkrivanje nedostataka iz GNU u terminalu +Comment[hsb]=GNU-debugger za konsolu +Comment[hu]=Szöveges módú, konzolban futó GNU nyomkövető +Comment[id]=Debugger GNU basis teks di konsole +Comment[is]=GNU aflúsnartólið (e. debugger) keyrt í skjáhermi +Comment[it]=Debugger testuale GNU in una konsole +Comment[ja]=GNU の konsole で使うテキストベースのデバッガ +Comment[ka]=GNU–ს შემსწორებელი ტექსტურ კონსოლში +Comment[kk]=Консольдік мәтінді GNU жөндеушісі +Comment[km]=កម្មវិធី​បំបាត់​កំហុស​ផ្អែក​លើ​អត្ថបទ ពី GNU នៅ​ក្នុង​កុងសូល +Comment[ko]=GNU 텍스트 기반 디버거를 Konsole에서 실행 +Comment[lo]=ດີບັກເກີໂຫມດຂໍ້ຄວາມຂອງ GNU ເຮັດວງກໃນຄອນໂຊນ +Comment[lt]=Tekstinis GNU debugeris konsolei +Comment[lv]=GNU atkļūdotājs darbināms konsolē (teksta režīmā) +Comment[mk]=Текстуален чистач на бубачки во конзола, од GNU +Comment[mn]=Консолын GNU Текст-Debugger +Comment[ms]=Penyahralat berasaskan teks di dalam konsol dari GNU +Comment[mt]=Debugger ibbażat fuq test minn GNU f'konsole +Comment[nb]=Tekstbasert avluser for GNU i et konsoll +Comment[nds]=Textbaseert Debugger vun GNU (löppt in Konsole) +Comment[ne]=GNU बाट कन्सोल पाठमा आधारित त्रुटि मोचक +Comment[nl]=Tekstgeoriënteerde debugger van GNU, in een console +Comment[nn]=Tekstbasert avlusar for GNU i ein konsoll +Comment[nso]=Debugger yeo e lebisitswego ka sengwalwana gotswa GNU kago konsole +Comment[oc]=Depurador textual de GNU en ua finestra konsole +Comment[pa]=ਕੰਨਸੋਲ ਵਿੱਚ GNU ਅਧਾਰਿਤ ਪਾਠ ਅਧਾਰਿਤ ਡੀਬੱਗਰ +Comment[pl]=Tekstowy debuger GNU w konsoli +Comment[pt]=Um depurador da GNU em modo texto, a correr na konsole +Comment[pt_BR]=Depurador modo texto GNU em um Konsole +Comment[ro]=Depanator GNU pentru consolă +Comment[ru]=Текстовый консольный отладчик от GNU +Comment[rw]=Mukemuramakosa mwandiko kuva muri GNU muri konsole +Comment[se]=Teakstavuođoduvvon meattáhusohci (maid GNU lea ráhkadan) konsolas +Comment[sk]=Textový ladiaci program GNU pre konzolu +Comment[sl]=GNU-jevski razhroščevalnik za besedilno konzolo +Comment[sr]=Текстуални GNU debugger за конзолу +Comment[sr@Latn]=Tekstualni GNU debugger za konzolu +Comment[ss]=Sisusi ma-bug lesibambelele embhalweni lesibuya ku GNU ku konsole +Comment[sv]=Textbaserat felsökningsprogram från GNU i en konsoll +Comment[ta]=முனையத்தில் இயங்கும் உரை வடிவ GNU பிழைநீக்கி +Comment[te]=కాన్సోల్ లో వచన ఆధారిత గ్నుడిబగ్గర్ +Comment[tg]=Тасҳеҳгари консолии матнӣ аз GNU +Comment[th]=ดีบักเกอร์โหมดข้อความของ GNU ทำงานในคอนโซล +Comment[tr]=GNU'dan konsol için metin tabanlı hata ayıklayıcı +Comment[tt]=Konsollı GNU-Betçe +Comment[uk]=GNU зневадник командного рядка у консолі +Comment[uz]=Terminalda GNU uchun matn asosida debagger +Comment[uz@cyrillic]=Терминалда GNU учун матн асосида дебаггер +Comment[ven]=Manwalwa o di sendekaho nga dibaga i bvaho GNU kha Khontsolu +Comment[vi]=Trình sửa lỗi kiểu văn bản của GNU trên konsole +Comment[wa]=Disbugreu di GNU båzé so tecse dins ene konsole +Comment[xh]=Text based debugger evela kwi GNU kwi konsole +Comment[zh_CN]=在控制台中运行的文本 GNU 调试器 +Comment[zh_TW]=在 Konsole 中執行的 GNU 文字型除錯器 +Comment[zu]=Umcoshi wamaphutha osekelwe umbhalo osuka kwi-GNU kwikhonsoli +Exec=konsole -e gdb -nw %execname %pid +ExecBatch=gdb -nw -n -batch -x %tempfile %execname %pid +TryExec=gdb +BacktraceCommand=bt +RemoveFromBacktraceRegExp=\(no debugging symbols found\)\.\.\.\\n? +InvalidStackFrameRegExp=\\n#[0-9]+\\s+0x[0-9A-Fa-f]+ \w* \?\? +FrameRegExp=\\n#[0-9]+\\s+0x[0-9A-Fa-f]+ +NeededInValidBacktraceRegExp=\\n#5 +KCrashRegExp=\\n0x[0123456789abcdefABCDEF]+.*[ ]*\\n diff --git a/drkonqi/drbugreport.cpp b/drkonqi/drbugreport.cpp new file mode 100644 index 000000000..48ef71a3f --- /dev/null +++ b/drkonqi/drbugreport.cpp @@ -0,0 +1,61 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#include + +#include +#include + +#include "drbugreport.moc" +#include "drbugreport.h" + +DrKBugReport::DrKBugReport(QWidget *parent, bool modal, + const KAboutData *aboutData) + : KBugReport(parent, modal, aboutData) +{ +} + +void DrKBugReport::setText(const QString &str) +{ + m_lineedit->setText(str); + m_startstring = str.simplifyWhiteSpace(); +} + +void DrKBugReport::slotOk() +{ + if (!m_startstring.isEmpty() && + m_lineedit->text().simplifyWhiteSpace() == m_startstring) + { + QString msg = i18n("You have to edit the description " + "before the report can be sent."); + KMessageBox::error(this, msg); + return; + } + KBugReport::slotOk(); +} + diff --git a/drkonqi/drbugreport.h b/drkonqi/drbugreport.h new file mode 100644 index 000000000..f2209ec23 --- /dev/null +++ b/drkonqi/drbugreport.h @@ -0,0 +1,62 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#ifndef DRBUGREPORT_H +#define DRBUGREPORT_H + +class KAboutData; + +#include + +class DrKBugReport : public KBugReport +{ + Q_OBJECT + +public: + /** + * Constructor. + */ + DrKBugReport(QWidget *parent = 0, bool modal = true, + const KAboutData *aboutData = 0); + +public: + /** + * Allows the debugger to set the default text in the editor. + */ + void setText(const QString &str); + +protected slots: + /** + * OK has been clicked + */ + virtual void slotOk( void ); + +private: + QString m_startstring; +}; + +#endif diff --git a/drkonqi/krashconf.cpp b/drkonqi/krashconf.cpp new file mode 100644 index 000000000..62c5b2215 --- /dev/null +++ b/drkonqi/krashconf.cpp @@ -0,0 +1,165 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "krashconf.h" + +KrashConfig :: KrashConfig() +{ + setObjId("krashinfo"); + readConfig(); +} + +KrashConfig :: ~KrashConfig() +{ + delete m_aboutData; +} + +ASYNC KrashConfig :: registerDebuggingApplication(const QString& launchName) +{ + emit newDebuggingApplication( launchName ); +} + +void KrashConfig :: acceptDebuggingApp() +{ + acceptDebuggingApplication(); +} + +void KrashConfig :: readConfig() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + m_signalnum = args->getOption( "signal" ).toInt(); + m_pid = args->getOption( "pid" ).toInt(); + m_startedByKdeinit = args->isSet("kdeinit"); + m_safeMode = args->isSet("safer"); + m_execname = args->getOption( "appname" ); + if ( !args->getOption( "apppath" ).isEmpty() ) + m_execname.prepend( args->getOption( "apppath" ) + '/' ); + + QCString programname = args->getOption("programname"); + if (programname.isEmpty()) + programname.setStr(I18N_NOOP("unknown")); + // leak some memory... Well. It's only done once anyway :-) + const char * progname = qstrdup(programname); + m_aboutData = new KAboutData(args->getOption("appname"), + progname, + args->getOption("appversion"), + 0, 0, 0, 0, 0, + args->getOption("bugaddress")); + + QCString startup_id( args->getOption( "startupid" )); + if (!startup_id.isEmpty()) + { // stop startup notification + KStartupInfoId id; + id.initId( startup_id ); + KStartupInfo::sendFinish( id ); + } + + KConfig *config = KGlobal::config(); + config->setGroup("drkonqi"); + + // maybe we should check if it's relative? + QString configname = config->readEntry("ConfigName", + QString::fromLatin1("enduser")); + + QString debuggername = config->readEntry("Debugger", + QString::fromLatin1("gdb")); + + KConfig debuggers(QString::fromLatin1("debuggers/%1rc").arg(debuggername), + true, false, "appdata"); + + debuggers.setGroup("General"); + m_debugger = debuggers.readPathEntry("Exec"); + m_debuggerBatch = debuggers.readPathEntry("ExecBatch"); + m_tryExec = debuggers.readPathEntry("TryExec"); + m_backtraceCommand = debuggers.readEntry("BacktraceCommand"); + m_removeFromBacktraceRegExp = debuggers.readEntry("RemoveFromBacktraceRegExp"); + m_invalidStackFrameRegExp = debuggers.readEntry("InvalidStackFrameRegExp"); + m_frameRegExp = debuggers.readEntry("FrameRegExp"); + m_neededInValidBacktraceRegExp = debuggers.readEntry("NeededInValidBacktraceRegExp"); + m_kcrashRegExp = debuggers.readEntry("KCrashRegExp"); + + KConfig preset(QString::fromLatin1("presets/%1rc").arg(configname), + true, false, "appdata"); + + preset.setGroup("ErrorDescription"); + if (preset.readBoolEntry("Enable"), true) + m_errorDescriptionText = preset.readEntry("Name"); + + preset.setGroup("WhatToDoHint"); + if (preset.readBoolEntry("Enable")) + m_whatToDoText = preset.readEntry("Name"); + + preset.setGroup("General"); + m_showbugreport = preset.readBoolEntry("ShowBugReportButton", false); + m_showdebugger = m_showbacktrace = m_pid != 0; + if (m_showbacktrace) + { + m_showbacktrace = preset.readBoolEntry("ShowBacktraceButton", true); + m_showdebugger = preset.readBoolEntry("ShowDebugButton", true); + } + m_disablechecks = preset.readBoolEntry("DisableChecks", false); + + bool b = preset.readBoolEntry("SignalDetails", true); + + QString str = QString::number(m_signalnum); + // use group unknown if signal not found + if (!preset.hasGroup(str)) + str = QString::fromLatin1("unknown"); + preset.setGroup(str); + m_signalName = preset.readEntry("Name"); + if (b) + m_signalText = preset.readEntry("Comment"); +} + +// replace some of the strings +void KrashConfig :: expandString(QString &str, bool shell, const QString &tempFile) const +{ + QMap map; + map[QString::fromLatin1("appname")] = QString::fromLatin1(appName()); + map[QString::fromLatin1("execname")] = startedByKdeinit() ? QString::fromLatin1("kdeinit") : m_execname; + map[QString::fromLatin1("signum")] = QString::number(signalNumber()); + map[QString::fromLatin1("signame")] = signalName(); + map[QString::fromLatin1("progname")] = programName(); + map[QString::fromLatin1("pid")] = QString::number(pid()); + map[QString::fromLatin1("tempfile")] = tempFile; + if (shell) + str = KMacroExpander::expandMacrosShellQuote( str, map ); + else + str = KMacroExpander::expandMacros( str, map ); +} + +#include "krashconf.moc" diff --git a/drkonqi/krashconf.h b/drkonqi/krashconf.h new file mode 100644 index 000000000..5349b7165 --- /dev/null +++ b/drkonqi/krashconf.h @@ -0,0 +1,113 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#ifndef KRASHCONF_H +#define KRASHCONF_H + +#include +#include +#include + +#include "krashdcopinterface.h" + +class KrashConfig : public QObject, public KrashDCOPInterface +{ + Q_OBJECT + +public: + KrashConfig(); + virtual ~KrashConfig(); + +k_dcop: + virtual QString programName() const { return m_aboutData->programName(); }; + virtual QCString appName() const { return m_aboutData->appName(); }; + virtual int signalNumber() const { return m_signalnum; }; + virtual int pid() const { return m_pid; }; + virtual bool startedByKdeinit() const { return m_startedByKdeinit; }; + virtual bool safeMode() const { return m_safeMode; }; + virtual QString signalName() const { return m_signalName; }; + virtual QString signalText() const { return m_signalText; }; + virtual QString whatToDoText() const { return m_whatToDoText; } + virtual QString errorDescriptionText() const { return m_errorDescriptionText; }; + + virtual ASYNC registerDebuggingApplication(const QString& launchName); + +public: + QString debugger() const { return m_debugger; } + QString debuggerBatch() const { return m_debuggerBatch; } + QString tryExec() const { return m_tryExec; } + QString backtraceCommand() const { return m_backtraceCommand; } + QString removeFromBacktraceRegExp() const { return m_removeFromBacktraceRegExp; } + QString invalidStackFrameRegExp() const { return m_invalidStackFrameRegExp; } + QString frameRegExp() const { return m_frameRegExp; } + QString neededInValidBacktraceRegExp() const { return m_neededInValidBacktraceRegExp; } + QString kcrashRegExp() const { return m_kcrashRegExp; } + bool showBacktrace() const { return m_showbacktrace; }; + bool showDebugger() const { return m_showdebugger && !m_debugger.isNull(); }; + bool showBugReport() const { return m_showbugreport; }; + bool disableChecks() const { return m_disablechecks; }; + const KAboutData *aboutData() const { return m_aboutData; } + QString execName() const { return m_execname; } + + void expandString(QString &str, bool shell, const QString &tempFile = QString::null) const; + + void acceptDebuggingApp(); + +signals: + void newDebuggingApplication(const QString& launchName); + +private: + void readConfig(); + +private: + KAboutData *m_aboutData; + int m_pid; + int m_signalnum; + bool m_showdebugger; + bool m_showbacktrace; + bool m_showbugreport; + bool m_startedByKdeinit; + bool m_safeMode; + bool m_disablechecks; + QString m_signalName; + QString m_signalText; + QString m_whatToDoText; + QString m_errorDescriptionText; + QString m_execname; + + QString m_debugger; + QString m_debuggerBatch; + QString m_tryExec; + QString m_backtraceCommand; + QString m_removeFromBacktraceRegExp; + QString m_invalidStackFrameRegExp; + QString m_frameRegExp; + QString m_neededInValidBacktraceRegExp; + QString m_kcrashRegExp; +}; + +#endif diff --git a/drkonqi/krashdcopinterface.h b/drkonqi/krashdcopinterface.h new file mode 100644 index 000000000..bf5f1a169 --- /dev/null +++ b/drkonqi/krashdcopinterface.h @@ -0,0 +1,67 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * krashdcopinterface.h + * + * Copyright (C) 2003 Hamish Rodda + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#ifndef KRASHDCOPINTERFACE_SKEL +#define KRASHDCOPINTERFACE_SKEL + +#include + +#include +#include +#include + +/** + * Provides information about a crashed process over dcop. + * + * @author Hamish Rodda + */ +class KrashDCOPInterface : virtual public DCOPObject +{ + K_DCOP +public: + +k_dcop: + virtual QString programName() const = 0; + virtual QCString appName() const = 0; + virtual int signalNumber() const = 0; + virtual int pid() const = 0; + virtual bool startedByKdeinit() const = 0; + virtual bool safeMode() const = 0; + virtual QString signalName() const = 0; + virtual QString signalText() const = 0; + virtual QString whatToDoText() const = 0; + virtual QString errorDescriptionText() const = 0; + + virtual ASYNC registerDebuggingApplication(const QString& launchName) = 0; + +k_dcop_signals: + void acceptDebuggingApplication(); +}; + +#endif diff --git a/drkonqi/main.cpp b/drkonqi/main.cpp new file mode 100644 index 000000000..9fba35a20 --- /dev/null +++ b/drkonqi/main.cpp @@ -0,0 +1,91 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include "krashconf.h" +#include "toplevel.h" + +static const char version[] = "1.0"; +static const char description[] = I18N_NOOP( "KDE crash handler gives the user feedback if a program crashed" ); + +static const KCmdLineOptions options[] = +{ + {"signal ", I18N_NOOP("The signal number that was caught"), 0}, + {"appname ", I18N_NOOP("Name of the program"), 0}, + {"apppath ", I18N_NOOP("Path to the executable"), 0}, + {"appversion ", I18N_NOOP("The version of the program"), 0}, + {"bugaddress
", I18N_NOOP("The bug address to use"), 0}, + {"programname ", I18N_NOOP("Translated name of the program"), 0}, + {"pid ", I18N_NOOP("The PID of the program"), 0}, + {"startupid ", I18N_NOOP("Startup ID of the program"), 0}, + {"kdeinit", I18N_NOOP("The program was started by kdeinit"), 0}, + {"safer", I18N_NOOP("Disable arbitrary disk access"), 0}, + KCmdLineLastOption +}; + +int main( int argc, char* argv[] ) +{ + // Drop privs. + setgid(getgid()); + if (setuid(getuid()) < 0 && geteuid() != getuid()) + exit (255); + + // Make sure that DrKonqi doesn't start DrKonqi when it crashes :-] + setenv("KDE_DEBUG", "true", 1); + unsetenv("SESSION_MANAGER"); + + KAboutData aboutData( "drkonqi", + I18N_NOOP("The KDE Crash Handler"), + version, + description, + KAboutData::License_BSD, + "(C) 2000-2003, Hans Petter Bieker"); + aboutData.addAuthor("Hans Petter Bieker", 0, "bieker@kde.org"); + + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions( options ); + + KApplication::disableAutoDcopRegistration(); + + KApplication a; + + KrashConfig krashconf; + + Toplevel w(&krashconf); + + return w.exec(); +} diff --git a/drkonqi/pics/Makefile.am b/drkonqi/pics/Makefile.am new file mode 100644 index 000000000..8f9bc6911 --- /dev/null +++ b/drkonqi/pics/Makefile.am @@ -0,0 +1,2 @@ +drkonqi_pics_data_DATA = konqi.png +drkonqi_pics_datadir = $(kde_datadir)/drkonqi/pics diff --git a/drkonqi/pics/konqi.png b/drkonqi/pics/konqi.png new file mode 100644 index 000000000..02e75941e Binary files /dev/null and b/drkonqi/pics/konqi.png differ diff --git a/drkonqi/presets/Makefile.am b/drkonqi/presets/Makefile.am new file mode 100644 index 000000000..5aa5e7490 --- /dev/null +++ b/drkonqi/presets/Makefile.am @@ -0,0 +1,2 @@ +presets_DATA = enduserrc developerrc +presetsdir = $(kde_datadir)/drkonqi/presets diff --git a/drkonqi/presets/developerrc b/drkonqi/presets/developerrc new file mode 100644 index 000000000..e42563032 --- /dev/null +++ b/drkonqi/presets/developerrc @@ -0,0 +1,846 @@ +[General] +Name=Developer +Name[af]=Ontwikkeling +Name[ar]=المطور +Name[az]=İnkişafçı +Name[be]=Распрацоўшчык +Name[bg]=Разработка +Name[bn]=ডেভেলপার +Name[br]=Diorrer +Name[bs]=Programer +Name[ca]=Desenvolupador +Name[cs]=Vývojář +Name[csb]=Programisticzné +Name[cy]=Datblygu +Name[da]=Udvikler +Name[de]=Entwickler +Name[el]=Προγραμματιστής +Name[eo]=Programisto +Name[es]=Desarrollador +Name[et]=Arendaja +Name[eu]=Garatzailea +Name[fa]=توسعه‌دهنده +Name[fi]=Kehittäjä +Name[fo]=Mennari +Name[fr]=Développeur +Name[fy]=Untwikkelder +Name[ga]=Forbróir +Name[gl]=Desenvolvente +Name[he]=מפתח +Name[hi]=डेवलपर +Name[hr]=Programer +Name[hsb]=Wuwiwanje +Name[hu]=Fejlesztő +Name[id]=Pembangun +Name[is]=Forritari +Name[it]=Sviluppatori +Name[ja]=開発者 +Name[ka]=შემმუშავებელი +Name[kk]=Жетілдіруші +Name[km]=អ្នក​អភិវឌ្ឍន៍ +Name[ko]=개발자 +Name[lo]=ຜູ້ພັດທະນາ +Name[lt]=Programuotojas +Name[lv]=Izstrādātājs +Name[mk]=Развивач +Name[mn]=Хөгжүүлэгч +Name[ms]=Pemaju +Name[mt]=Żviluppatur +Name[nb]=Utvikler +Name[nds]=Schriever +Name[ne]=विकासकर्ता +Name[nl]=Ontwikkelaar +Name[nn]=Utviklar +Name[nso]=Mohlabolli +Name[oc]=Desvelopador +Name[pa]=ਖੋਜੀ +Name[pl]=Programistyczne +Name[pt]=Desenvolvimento +Name[pt_BR]=Desenvolvedor +Name[ro]=Dezvoltator +Name[ru]=Разработчик +Name[rw]=Umuhanziporogaramu +Name[se]=Ovdánahtti +Name[sk]=Vývojár +Name[sl]=Razvijalec +Name[sr]=Програмер +Name[sr@Latn]=Programer +Name[ss]=Umndlondlobalisi +Name[sv]=Utvecklare +Name[ta]=உருவாக்கி +Name[te]=డెవలపర్ +Name[tg]=Барноманавис +Name[th]=ผู้พัฒนา +Name[tr]=Programcı +Name[tt]=Citeşterüçe +Name[uk]=Розробник +Name[uz]=Tuzuvchi +Name[uz@cyrillic]=Тузувчи +Name[ven]=Mubveledzi +Name[vi]=Lập trình viên +Name[wa]=Programeu +Name[xh]=Umbhekisi phambili +Name[zh_CN]=开发者 +Name[zh_TW]=開發人員 +Name[zu]=Umthuthukisi +Comment=Settings preferred for developers +Comment[af]=Instellings verkies vir ontwikkelaars +Comment[ar]=التعيينات المفضلة لِلمطورين +Comment[az]=Proqramcılar üçün tərcih edilən qurğular +Comment[be]=Настаўленні для распрацоўнікаў +Comment[bg]=Настройки, подходящи за разработчици +Comment[bn]=ডেভেলপারদের পছন্দের সেটিং +Comment[br]=Kefluniadur azas evir diorerien +Comment[bs]=Postavke preporučene za programere +Comment[ca]=Arranjaments preferits pels desenvolupadors +Comment[cs]=Nastavení upřednostňovaná vývojáři +Comment[csb]=Ùstôw dlô programistów +Comment[cy]=Gosodiadau hoffiannus i ddatblygwyr +Comment[da]=Indstillinger foretrukket for udviklere +Comment[de]=Bevorzugte Einstellungen für Entwickler +Comment[el]=Προτιμώμενες ρυθμίσεις για προγραμματιστές +Comment[eo]=Agordo destinita por programistoj +Comment[es]=Preferencias preferidas por los desarrolladores +Comment[et]=Arendajatele mõeldud seadistused +Comment[eu]=Garatzaileen gustoko konfigurazioa +Comment[fa]=تنظیمات ارجح برای توسعه‌دهندگان +Comment[fi]=Sovelluskehittäjän asetukset +Comment[fo]=Uppseting fyri forritarir +Comment[fr]=Paramètres adaptés aux développeurs +Comment[fy]=Ynstellings foarkar foar ûntwikkelders +Comment[ga]=Socruithe is fearr le forbróirí +Comment[gl]=Configuracións preferidas para os desenvolventes +Comment[he]=הגדרות מועדפות למפתחים +Comment[hi]= डेवलपर्स के लिए विन्यास की प्राथमिकता +Comment[hr]=Postavke preporučene za programere +Comment[hsb]=Nastajenja za wuwiwarja +Comment[hu]=Fejlesztőknek szánt beállítások +Comment[id]=Pengaturan aturan untuk developer +Comment[is]=Ráðlagðar stillingar fyrir forritara +Comment[it]=Impostazione per gli sviluppatori +Comment[ja]=開発者用の設定 +Comment[ka]=პარამეტრები განმვითარებელთათვის +Comment[kk]=Жетілдірушілерге тән баптаулары +Comment[km]=ការ​កំណត់​ដែល​អ្នក​បង្កើត​ចូលចិត្ត +Comment[ko]=개발자가 선호하는 설정 +Comment[lo]=ປັບແຕ່ງເພື່ອສະແດງຕົວເປັນຜູຸ້ພັດທະນາ +Comment[lt]=Programuotojams rekomenduojami nustatymai +Comment[lv]=Izstrādātājiem ieteicamie uzstādījumi +Comment[mk]=Поставувања за развивачи на програми +Comment[mn]=Хөгжүүлэгчийн эрхэмлэсэн тохируулга +Comment[ms]=Tetapan diutamakan untuk pemaju +Comment[mt]=Settings preferuti minn żviluppaturi +Comment[nb]=Innstillinger for utviklere +Comment[nds]=Vörtrocken Instellen för Utwicklers +Comment[ne]=विकासकर्ताले रूचाएको सेटिङ +Comment[nl]=Instellingen gewenst voor ontwikkelaars +Comment[nn]=Innstillingar for utviklarar +Comment[nso]=Dipeakanyo tseo di kganyogetswego bahlabolli +Comment[oc]=Arranjament preferit pels desvelopadors +Comment[pa]=ਖੋਜੀਆਂ ਲਈ ਪਸੰਦੀਦਾ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia dla programistów +Comment[pt]=Configurações para a equipa de desenvolvimento +Comment[pt_BR]=Configurações prediletas para desenvolvedores +Comment[ro]=Setări preferate de programatori +Comment[ru]=Настройки, предпочтительные для разработчиков +Comment[rw]=Amagenamiterere abereye y'abakoraporogaramu +Comment[se]=Heivehusat ovdánahtiid várás +Comment[sk]=Preferované nastavenia pre vývojárov +Comment[sl]=Nastavitve, ljubše razvijalcem +Comment[sr]=Поставке које више воле програмери +Comment[sr@Latn]=Postavke koje više vole programeri +Comment[ss]=Kuhleleka lokunconotwako kwebandlondlobalisi +Comment[sv]=Rekommenderade inställningar för utvecklare +Comment[ta]=உருவாக்குவோர்களுக்கான விருப்ப அமைப்புகள் +Comment[te]=డెవలపర్లకు నచ్చే అమరికలు +Comment[tg]=Танзимоти беҳтарин барои барноманависон +Comment[th]=การปรับแต่งที่ผู้พัฒนาต้องการ +Comment[tr]=Programcılar için tercih edilen ayarlar +Comment[tt]=Citeşterüçe öçen qulay caylawlar +Comment[uk]=Параметри переважно для розробників +Comment[uz]=Tuzuvchilar uchun afzal moslamalar +Comment[uz@cyrillic]=Тузувчилар учун афзал мосламалар +Comment[ven]=U dzudzanya huno shumiseswa nga vhafhati +Comment[vi]=Các thiết lập dành cho lập trình viên +Comment[wa]=Tchuzes mia inmêyes pa les programeus +Comment[xh]=Izicwangciso ezikhetiweyo zababhekisi phambili +Comment[zh_CN]=开发人员偏好的设置 +Comment[zh_TW]=開發人員的偏好設定 +Comment[zu]=Izilungiselelo ezincanyelwayo zabathuthukisi + +SignalDetails=true +ShowBugReportButton=true +ShowBacktraceButton=true +ShowDebugButton=true +DisableChecks=true + +[ErrorDescription] +Enable=true +Name=The application %progname (%appname), pid %pid, crashed and caused the signal %signum (%signame). +Name[af]=Die aansoek %progname (%appname), pid %pid, het gestaak en veroorsaak Die sein %signum (%signame). +Name[ar]=البرنامج %progname (%appname), رقم العملية %pid، أنهار و أدى لإعطاء الإشارة %signum (%signame). +Name[az]= %progname (%appname), pid %pid proqramı çökdü və %signum (%signame) siqnalı göndərdi. +Name[be]=Праграма %progname (%appname), pid %pid, зламалася і перадала сігнал %signum (%signame). +Name[bg]=В програмата %progname (%appname) с номер (pid) %pid възникна фатална грешка, предизвиквайки сигнал %signum (%signame). +Name[bn]=%progname (%appname) প্রোগ্রামটি, pid %pid, ক্র্যাশ করেছে এবং এই সিগনাল পাঠিয়েছে: %signum (%signame) +Name[br]=Sac'het eo bet an arload %progname (%appname), pid %pid ha bet abeg d'an arhent %signum (%signame). +Name[bs]=Aplikacija %progname (%appname), pid %pid se srušila sa signalom %signum (%signame). +Name[ca]=L'aplicació %progname (%appname), pid %pid, ha fallat causant la senyal %signum (%signame). +Name[cs]=Aplikace %progname (%appname), pid %pid, spadla a vyvolala signál %signum (%signame). +Name[csb]=Programa %progname (%appname), id procesu %pid, załómała sã, wëwòłiwôjąc sygnal %signum (%signame). +Name[cy]=Mae'r cymhwysiad %progname (%appname),pid %pid, wedi cwympo gan achosi'r arwydd %signum (%signame). +Name[da]=Programmet %progname (%appname), pid %pid brød sammen og gav signalet %signum (%signame). +Name[de]=Das Programm %progname (%appname), pid %pid ist abgestürzt und hat das Signal %signum (%signame) veranlasst. +Name[el]=Η εφαρμογή %progname (%appname), pid %pid, κατέρρευσε και προκάλεσε το σήμα %signum (%signame). +Name[eo]=La aplikaĵo %progname (%appname), procezo-n-ro %pid, mortis kaj kaŭzis la signalon %signum (%signame). +Name[es]=La aplicación %progname (%appname), con número de proceso %pid, falló y provocó la señal %signum (%signame). +Name[et]=Rakendus %progname (%appname) pid %pid astus ämbrisse põhjustatuna signaalist %signum (%signame). +Name[eu]=%progname (%appname) izena, %pid pid zenbakia dituen aplikazioak krask egin eta %signum (%signame) seinalea sortu du. +Name[fa]=کاربرد %progname (%appname)، pid %pid، فروپاشید و باعث ایجاد نشانک %signum (%signame) شد. +Name[fi]=Sovellus %progname (%appname), pid %pid kaatui ja antoi signaalin %signum (%signame). +Name[fo]=Forritið %progname (%appname) við koyrslunummar %pid fór í sor og elvaði báknið %signum (%signame). +Name[fr]=L'application %progname (%appname), de numéro %pid, s'est terminée anormalement et a provoqué le signal %signum (%signame). +Name[fy]=It programma %progname (%appname),pid %pid hat in net jildige bewurking makke en wurdt sluten. Dit joech it folgjende sinjaal: %signum (%signame). +Name[ga]=Thuairteáil feidhmchlár %progname (%appname), pid %pid, agus thug sé comhartha %signum (%signame). +Name[gl]=A aplicación %progname (%appname), pid %pid estragou-se e provocou o sinal %signum (%signame). +Name[he]=היישום %progname (%appname), זיהוי תהליך %pid, התרסק וגרם לאיתות %signum (%signame). +Name[hi]=अनुप्रयोग %progname (%appname), पीआईडी %pid, क्रैश हो गया है तथा संकेत उत्पन्न किया %signum (%signame). +Name[hr]=Došlo je do rušenja aplikacije %progname (%appname), PID %pid, te je izazvan signal %signum (%signame). +Name[hsb]=Program %progname (%appname), pid %pid, je so pójsnyła ze signalom %signum (%signame). +Name[hu]=A(z) %progname (%appname) alkalmazás (azonosító=%pid) lefagyott és %signum (%signame) szignált okozott. +Name[id]=Aplikasi %progname (%appname), pid %pid, crash dan menyebabkan sinyal %signum (%signame) +Name[is]=Forritið %progname (%appname) pid %pid, hrundi og gaf frá sér boðið %signum (%signame). +Name[it]=L'applicazione %progname (%appname), pid %pid, è andata in crash e ha causato il segnale %signum (%signame). +Name[ja]=このアプリケーション %progname (%appname), pid %pid はクラッシュし、シグナル %signum (%signame) を発行しました。 +Name[ka]=პროგრამას %progname (%appname) pid %pid....,და გამოიწვია შემდეგი სიგნალი %signum (%signame). +Name[kk]=%progname (%appname) қолданба, pid %pid, қирап %signum (%signame) деген сигналды берді. +Name[km]=កម្មវិធី %progname (%appname), pid %pid, បាន​គាំង និង​បណ្ដាល​ឲ្យ​មាន​សញ្ញា %signum (%signame) ។ +Name[ko]=PID %pid 인 프로그램 %progname (%appname)이(가) 충돌하였고 신호 %signum(%signame)을(를) 보냈습니다. +Name[lo]=ອັບພລິກເຄເຊິນ %progname (%appname) ຫມາຍເລກໂປຣເຊດ %pid ທຳງານຫລົ້າເຫລວໂດຍແຈ້ງສັນຍານຫມາຍເລກ %signum (%signame) +Name[lt]=%progname programa (%appname), pid %pid nulūžo ir gavo %signum (%signame) signalą. +Name[lv]=Aplikācija %progname (%appname), pid %pid avarējusi un izsaukusi signālu %signum (%signame). +Name[mk]=Апликацијата %progname (%appname), pid %pid, падна и го предизвика сигналот %signum (%signame). +Name[mn]=Хэрэглээний програм %progname (%appname), пду %pid гацаж сигнал %signum (%signame) -г өглөө. +Name[ms]=Aplikasi %progname (%appname), pid %pid, musnah dan menyebabkan isyarat %signum (%signame). +Name[mt]=Il-programm %progname (%appname), pid %pid, ikkraxxja u kkawża s-sinjal %signum (%signame). +Name[nb]=Programmet %progname (%appname), pid %pid, krasjet og gav signalet %signum (%signame). +Name[nds]=Dat Programm %progname (%appname), PID %pid, is afstört un hett dat Signaal %signum (%signame) utlööst. +Name[ne]=अनुप्रयोग %progname (%appname), pid %pid, सङ्केत %signum (%signame) कारण थियो र नष्ट भयो +Name[nl]=Het programma %progname (%appname),pid %pid heeft een ongeldige bewerking gemaakt en wordt afgesloten. Het gaf het volgende signaal: %signum (%signame). +Name[nn]=Programmet %progname (%appname), pid %pid, krasja og gav signalet %signum (%signame). +Name[nso]=%progname ya tshomiso (%appname), pid %pid, e thubagane gommme ya hlola leswao %signum (%signame). +Name[pa]=ਕਾਰਜ ( %progname) (%appname), pid %pid, ਖਤਮ ਹੋ ਗਿਆ ਹੈ ਅਤੇ ਸੰਕੇਤ %signum (%signame) ਦਿੱਤਾ ਹੈ। +Name[pl]=Program %progname (%appname), id procesu %pid, uległ awarii, wywołując sygnał %signum (%signame). +Name[pt]=A aplicação %progname (%appname) com pid %pid estoirou e enviou o sinal %signum (%signame). +Name[pt_BR]=O aplicativo %progname (%appname), com o número de processo %pid, terminou anormalmente e causou o sinal %signum (%signame). +Name[ro]=Aplicația %progname (%appname), pid %pid s-a prăbușit și a generat semnalul %signum (%signame). +Name[ru]=В приложении %progname (%appname) с id процесса %pid произошёл фатальный сбой, вызвавший сигнал %signum (%signame). +Name[rw]= Porogaramu %progname ( %appname ) , pid %pid, yononekaye kandi itera ikimenyetso %signum (%signame). +Name[se]=Prográmma %progrname (%appname), pid %pid, reakčánii ja attii signála %signum (%signame). +Name[sk]=Aplikácia %progname (%appname), pid %pid spadla. Chyba bola spôsobená signálom %signum (%signame). +Name[sl]=Program %progname (%appname), pid %pid, se je sesul in javil signal %signum (%signame). +Name[sr]=Програм %progname (%appname), pid %pid, се срушио и изазвао сигнал %signum (%signame). +Name[sr@Latn]=Program %progname (%appname), pid %pid, se srušio i izazvao signal %signum (%signame). +Name[ss]=Sicelo %programe (%appname), pid %pid, sishayisile sabuye sabangela kukhomba %signum (%signame). +Name[sv]=Programmet %progname (%appname), pid %pid, kraschade och orsakade signalen %signum (%signame). +Name[ta]=பயன்பாடு %progname (%appname), எண் %pid, முறிந்து %signum (%signame) சைகையைத் தந்தது. +Name[te]=ఈ కార్యక్రమం %progname (%appname), పిఐడి %pid, క్రాష్ అయినది మరియూ %signum (%signame) సిగ్నల్ ను కలుగచేసింది +Name[tg]=Дар барномаи %progname (%appname), аз амали id-и %pid, нуқсони хатарнок ба амал омад, ки сигнали %signum (%signame)-ро роҳ дод. +Name[th]=แอพพลิเคชั่น %progname (%appname) หมายเลขโปรเซส %pid ทำงานล้มเหลวโดยแจ้งสัญญาณหมายเลข %signum (%signame) +Name[tr]=%progname (%appname), pid %pid sonlandırıldı ve %signum (%signame) sinyali oluşturdu. +Name[tt]=%pid. PID belän %progname (%appname) yazılımında %signum (%signame) ımlaw belän ütmäslek xata buldı. +Name[uk]=Програма %progname (%appname), pid %pid, дала збій та викликала сигнал %signum (%signame). +Name[uz]=Dasturning %progname (%appname), pid %pid, ishida xato roʻy berdi va %signum (%signame) signaliga sababchi boʻldi. +Name[uz@cyrillic]=Дастурнинг %progname (%appname), pid %pid, ишида хато рўй берди ва %signum (%signame) сигналига сабабчи бўлди. +Name[ven]=Apulifikhesheni ya %progdzina (%appdzina) pid %pid yo tshinyadzhwa ya dovha ya vhanga luswayo %signum (%sigdzina). +Name[vi]=Chương trình %progname (%appname), pid %pid bị lỗi và gửi ra tín hiệu %signum (%signame). +Name[wa]=Li programe %progname (%appname), pid %pid, s' a spotchî et a evoyî l' signå %signum (%signame). +Name[xh]=Isicelo %progname (%appname), pid %pid, ilalhekile kwaye ibangele uphawu %signum (%signame). +Name[zh_CN]=程序 %progname (%appname),进程号 %pid,崩溃并导致信号 %signum (%signame)。 +Name[zh_TW]=此應用程式 %progname (%appname), pid %pid 不正常結束,產生信號 %signum (%signame)。 +Name[zu]=I-%progname yomyaleli (%appname), pid %pid, iphahlazekile futhi yabanga uphawu %signum (%signame). + +[WhatToDoHint] +Enable=true +Name=You might want to fix your program. Take a look at the backtrace tab. +Name[af]=Jy dalk wil hê na regmaak jou program. Neem 'n kyk na die terugsoektog oortjie. +Name[ar]=ربما أنت تريد تصليح برنامجك. ألقي نظرة على جدول التتبع للخطأ. +Name[az]=Proqramınızdakı problemi həll etmək istəsəniz xəta ayıqlayıcı səkməsinə baxın. +Name[be]=Вы можаце захацець выправіць праграму. Тады паглядзіце на ўкладку backtrace. +Name[bg]=За допълнителна информация погледнете описанието на грешката. +Name[bn]=আপনার প্রোগ্রামে সম্ভবত কিছু গণ্ডগোল আছে। backtrace ট্যাব দেখুন। +Name[br]=Mennout a rit dresañ ho koulev. Taolit ur sell war ar pempilh kilroudenn. +Name[bs]=Možda želite popraviti vaš program. Pogledajte u tab Backtrace. +Name[ca]=Potser voldreu reparar el programa. Doneu un cop d'ull a la pestanya del depurador. +Name[cs]=Možná budete chtít opravit váš program. Klikněte na záložku ladění. +Name[csb]=Mòżesz spróbòwac pòprawic programã. Zdrzë na załóżkã z kòmùnikatama debugera. +Name[cy]=Efallai hoffech drwsio eich rhaglen. Edrychwch ar y tab olrhain. +Name[da]=Måske har du lyst til at reparere dit program. Tag et kig på fanebladet 'Fejlsporing'. +Name[de]=Vielleicht möchten Sie das Programm reparieren lassen. Werfen Sie einen Blick auf die Karteikarte "Rückverfolgung". +Name[el]=Ίσως θέλετε να διορθώσετε το πρόγραμμά σας. Ρίξτε μια ματιά στην καρτέλα backtrace. +Name[eo]=Eble vi volas korekti vian programon. Rigardu sur la langeto Reŝpurado. +Name[es]=Quizás quiera reparar su programa. Observe la solapa 'Traza inversa'. +Name[et]=Kui soovid rakendust parandada, siis vaata ka tagasijälituse kaarti. +Name[eu]=Agian programa konpondu nahi duzu. Begiratu backtrace mihian. +Name[fa]=ممکن است بخواهید برنامۀ خود را رفع اشکال کنید. نگاهی به تب منشأیاب بیندازید. +Name[fi]=Ohjelman korjaaminen on suositeltavaa. Katso Pinon vedos -välilehden tietoja. +Name[fr]=Vous devriez contribuer à la correction du programme. Consultez l'onglet « Pile des appels ». +Name[fy]=Jo wolle it programma fêst wol herstelle. Sjoch efkes ûnder de ljepper 'backtrace'. +Name[ga]=Ba chóir duit do chlár a dheisiú. Féach ar an gcluaisín cúl-lorg. +Name[gl]=Pode querer arranxar o programa. Bote unha ollada á pestana da traza. +Name[he]=ייתכן שתרצה לתקן את התוכנית שלך. עיין בכרטיסיית המעקב. +Name[hi]=आप अपने प्रोग्राम को सही करना चाहेंगे. बैकट्रेस टैब पर एक निगाह डालें. +Name[hr]=Možda bi bilo potrebno popraviti vaš program. Proučite karticu povratnog praćenja. +Name[hsb]=Snadź chceće program porjedźić. Pohladajće na backtrace. +Name[hu]=Ha ki szeretné javítani a hibát, érdemes áttanulmányozni a nyomkövetési lap tartalmát. +Name[id]=Anda mungkin ingin memperbaiki program Anda. Lihat lewat tab backtrace +Name[is]=Þú ættir kannski að laga forritið þitt. Kíktu á úttakið. +Name[it]=Se vuoi aggiustare il tuo programma, controlla sotto la linguetta del backtrace. +Name[ja]=このプログラムを修正する場合、backtrace タブをご覧ください。 +Name[ka]=თქვენ ალბათ გნებავტ თქვენი პროგრამის შეკეთება.დახედეთ backtrace–ის დაფას. +Name[kk]=Бағдарламаны жөндегіңіз келсе жөндеушінің есептеме қойындысын қараңыз. +Name[km]=អ្នក​ប្រហែល​ជា​ចង់​ជួសជុល​កម្មវិធី​របស់​អ្នក ។ សូម​មើល​ត្រង់​ផ្ទាំង​ដាន​នៅសល់ ។ +Name[ko]=프로그램을 디버깅할 수도 있습니다. 역추적 탭을 참고하십시오. +Name[lo]=ທ່ານອາດຕ້ອງການແກ້ໄຂໂປແກຣມໃຫ້ທຳງານໄດ້ປົກກະຕິກະລຸນາເບິ່ງທີ່ແທບຕິດຕາມຍອ້ນຫລັງ +Name[lt]=Galite pabandyti ištaisyti savo programą. Pažiūrėkite į žiniaraščio kortelę. +Name[lv]=Jūs varbūt vēlaties saglābt jūsu programmu. Ieskatieties atpakaļatsekošanas tabā. +Name[mk]=Можеби ќе сакате да ја поправите вашата програма. Погледнете на ливчето со трагите. +Name[mn]=Магад та програмаа засхыг хүсэж байгаа. Лавлах дээрхи "Буцаах"-г дараад үз дээ. +Name[ms]=Anda mungkin mahu membaiki program anda. Lihat pada tab jejak belakang. +Name[mt]=Forsi tixtieq tirranġa l-programm tiegħek. Agħti ħarsa lejn il-backtrace. +Name[nb]=Du vil kanskje rette opp feilen selv. Ta en titt på tilbakeloggsida. +Name[nds]=Wenn Du dat Programm richten (laten) wullt, kiek maal op de Siet "Fehlerspoor". +Name[ne]=तपाईँ कार्यक्रम स्थिर गर्न चाहनु भयो होला । ब्याकट्र्यास ट्याबमा हेर्नुहोस् । +Name[nl]=U wilt vast uw programma herstellen. Kijk even onder de tab 'backtrace'. +Name[nn]=Du vil kanskje fiksa programmet ditt. Ta ein kikk på tilbakeloggsida. +Name[nso]=Oka nyaka go rarolla lenaneo la gago. Lebelela kago tab ya backtrace. +Name[pa]=ਤੁਸੀਂ ਕਾਰਜ ਨੂੰ ਠੀਕ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋਵੋਗੇ। ਬੈਕਟਰੈਕ 'ਤੇ ਨਿਗਾ ਮਾਰੋ। +Name[pl]=Możesz spróbować poprawić program. Spójrz na zakładkę z komunikatami debugera. +Name[pt]=Pode desejar corrigir o programa. Examine a página do 'backtrace'. +Name[pt_BR]=Você pode querer consertar o programa. Dê uma olhada na aba de depuração. +Name[ro]=S-ar putea să fie nevoie de repararea programului. Uitați-vă în subfereastra "Backtrace". +Name[ru]=Возможно, вы захотите исправить программу. Посмотрите отчёт отладчика. +Name[rw]=Ushobora gushaka gutunganya porogaramu yawe. Itegereze ku gafishi ibirango-inyuma. +Name[se]=Gálggašit várra prográmma divvut. Geahččasmat maŋosloggengilkora. +Name[sk]=Možno chcete opraviť svoj program. Prezrite si zápis tabuľky ladiaceho nástroja. +Name[sl]=Morda boste želeli popraviti program. Poglejte si ustrezno oznako razhroščevalnika. +Name[sr]=Можда бисте желели да поправите ваш програм. Погледајте језичак бектрејс. +Name[sr@Latn]=Možda biste želeli da popravite vaš program. Pogledajte jezičak bektrejs. +Name[ss]=Ungahle ufune kulungisa luhlelo lwakho. Buketa i-tab kusiseshi-sekuya emuva. +Name[sv]=Du kanske vill korrigera ditt program. Titta under fliken bakåtspårning. +Name[ta]=நீங்கள் இந்நிரலைச் சரி செய்ய விரும்பினால், பின்சுவட்டுத் தட்டலைப் பார்க்கவும். +Name[te]=మీరు మీ కార్యక్రమాన్ని సరిదిద్దగలరు. బేక్ ట్రేస్ టాబ్ ను చూడండి +Name[tg]=Шояд шумо мехоҳед барномаро тасҳеҳ кунед. Ҳисоботи тасҳеҳгарро аз назар гузаронед. +Name[th]=คุณอาจต้องการแก้ไขโปรแกรมให้ทำงานได้ปกติ โปรดดูที่แท็บติดตามย้อนหลัง +Name[tr]=Programınızdaki sorunu çözmek isterseniz hata ayıklayıcı sekmesine bakın. +Name[tt]=Bu yazılımnı tözätäse kilsä, kireçü yomğağın qara. +Name[uk]=Ви, можливо, хочете поладити вашу програму. Дивіться вкладку зворотного трасування. +Name[ven]=Ni nga di toda u lugisa mbekanyamushumo yanu. Lavhelesani kha dzi thebu dza murahu. +Name[vi]=Bạn có thể cần phải sửa chương trình nàỵ Xin xem qua ngăn backtrace. +Name[wa]=Vos pôrîz volou remantchî vos programe. Riwaitîz l' linwete Passêye. +Name[xh]=Ungafuna ukulungisa udweliso lwakho lwenkqubo. Thatha ujongo kukhangelo lwasemva lwesithuba. +Name[zh_CN]=您应该改正程序。请查看回溯跟踪部分。 +Name[zh_TW]=或許您想要修正您的程式。請查看一下回朔標籤裡的內容。 +Name[zu]=Ungafuna ukulungisa uhlelo lwakho lwemisebenzi. Buka i-tab yokubuyela emuva. + +[4] +Name=SIGILL +Comment=Illegal instruction. +Comment[af]=Onwettige instruksie. +Comment[ar]=تعليمة غير شرعية. +Comment[az]=Xətalı göstəriş. +Comment[be]=Недапушчальная інструкцыя. +Comment[bg]=Недопустима инструкция. +Comment[bn]=অবৈধ আজ্ঞা +Comment[br]=Kemennad siek. +Comment[bs]=Ilegalna instrukcija +Comment[ca]=Instrucció il·legal. +Comment[cs]=Neplatná instrukce. +Comment[csb]=Zakôzónô instrukcëjô. +Comment[cy]=Cyfarwyddiad anghyfreithlon. +Comment[da]=Ulovlig instruktion. +Comment[de]=Ungültige Anweisung +Comment[el]=Παράνομη οδηγία. +Comment[eo]=Nevalida instrukcio. +Comment[es]=Instrucción ilegal. +Comment[et]=Lubamatu instruktsioon. +Comment[eu]=Legez kanpoko agindua +Comment[fa]=دستورالعمل غیرمجاز. +Comment[fi]=Virheellinen käsky +Comment[fo]=Bannað boð. +Comment[fr]=Instruction illégale. +Comment[fy]=Yllegale ynstruksje. +Comment[ga]=Treoir neamhcheadaithe. +Comment[gl]=Instrucción ilegal. +Comment[he]=הוראה לא חוקית. +Comment[hi]=अवैध निर्देश. +Comment[hr]=Neispravna instrukcija. +Comment[hsb]=Njelegalna instrukcija. +Comment[hu]=Érvénytelen utasítás. +Comment[id]=Perintah Illegal +Comment[is]=Ólögleg aðgerð. +Comment[it]=Istruzione illegale. +Comment[ja]=間違った命令。 +Comment[ka]=არასწორი ინსტრუქცია. +Comment[kk]=Орынсыз нұсқау. +Comment[km]=សេចក្ដី​ណែនាំ​ខុស​ច្បាប់ ។ +Comment[ko]=잘못된 동작. +Comment[lo]=ໂຄງສ້າງຜິດພາດ +Comment[lt]=Neleistina instrukcija +Comment[lv]=Nelegāla instrukcija. +Comment[mk]=Нелегална инструкција. +Comment[mn]=Хүчингүй заавар. +Comment[ms]=Arahan tidak sah. +Comment[nb]=Ulovlig instruksjon. +Comment[nds]=Leeg Anwiesen +Comment[ne]=अवैध प्रशिक्षण +Comment[nl]=Illegale instructie. +Comment[nn]=Ulovleg instruksjon. +Comment[nso]=Tshupetso yeo esego molaong. +Comment[oc]=Instruccion ilegala +Comment[pa]=ਗਲਤ ਹਦਾਇਤ ਹੈ। +Comment[pl]=Nielegalna instrukcja. +Comment[pt]=Instrução inválida. +Comment[pt_BR]=Instrução ilegal. +Comment[ro]=Instrucțiune ilegală. +Comment[ru]=Недопустимая инструкция. +Comment[rw]=Igisobanuro Ntamategeko +Comment[se]=Gildojuvvon gohččun. +Comment[sk]=Neplatná inštrukcia. +Comment[sl]=Neveljaven ukaz. +Comment[sr]=Недозвољена инструкција. +Comment[sr@Latn]=Nedozvoljena instrukcija. +Comment[ss]=Umtsetfo longekho emtsetfweni. +Comment[sv]=Ogiltig instruktion. +Comment[ta]=சட்டவிரோத ஆணை. +Comment[te]=తప్పు ఆదేశం. +Comment[tg]=Дастурамали ғайриқонунӣ. +Comment[th]=คำสั่งที่ไม่อนุญาตให้ใช้ +Comment[tr]=Hatalı talimat. +Comment[tt]=Yaraqsız boyırıq. +Comment[uk]=Непридатна інструкція. +Comment[uz]=Koʻrsatma haqiqiy emas. +Comment[uz@cyrillic]=Кўрсатма ҳақиқий эмас. +Comment[ven]=Muthetho u siho mulayoni. +Comment[vi]=Chỉ thị không hợp lệ. +Comment[wa]=Instruccion nén permetowe pal lwè +Comment[xh]=Engavumelekanga imiyalelo. +Comment[zh_CN]=非法指令。 +Comment[zh_TW]=不合法的指令。 +Comment[zu]=Umyalelo ongekho emthethweni. + +[6] +Name=SIGABRT +Comment=Aborted. +Comment[af]=Gekanselleer. +Comment[ar]=أجهضت +Comment[az]=Ləğv edildi. +Comment[be]=Перарвана. +Comment[bg]=Прекъснато. +Comment[bn]=থামিয়ে দেওয়া হয়েছে। +Comment[br]=Dilezet. +Comment[bs]=Prekinuto. +Comment[ca]=S'ha avortat. +Comment[cs]=Přerušeno. +Comment[csb]=Przerwóny. +Comment[cy]=Terfynwyd. +Comment[da]=Afbrudt. +Comment[de]=Abgebrochen +Comment[el]=Ματαιώθηκε. +Comment[eo]=Ĉesigita. +Comment[es]=Cancelado. +Comment[et]=Katkestatud. +Comment[eu]=Geldiarazia. +Comment[fa]=ساقط شد. +Comment[fi]=Keskeytetty. +Comment[fo]=Avbrotið. +Comment[fr]=Interrompu. +Comment[fy]=Ofbrutsen. +Comment[ga]=Tobscortha. +Comment[gl]=Abortado. +Comment[he]=ננטש. +Comment[hi]=छोड़ा गया. +Comment[hr]=Prekinuto. +Comment[hsb]=Přetorhnjene. +Comment[hu]=Félbeszakítva. +Comment[id]=Dibatalkan +Comment[is]=Hætt við. +Comment[it]=Terminato in maniera anomala. +Comment[ja]=中止されました。 +Comment[ka]=შეწყვეტილია. +Comment[kk]=Доғарылған. +Comment[km]=បាន​បោះបង់ ។ +Comment[ko]=중단됨. +Comment[lo]=ຍົກເລີກແລ້ວ +Comment[lt]=Nutraukta. +Comment[lv]=Atcelta. +Comment[mk]=Прекинат. +Comment[mn]=Тасарлаа. +Comment[ms]=Ditamatkan. +Comment[mt]=Imwaqqaf. +Comment[nb]=Avbrutt. +Comment[nds]=Afbraken +Comment[ne]=परित्याग गरियो +Comment[nl]=Geannuleerd. +Comment[nn]=Avbrote. +Comment[nso]=Bolailwe. +Comment[oc]=S'a interromput. +Comment[pa]=ਅਧੂਰਾ ਛੱਡਿਆ ਹੈ। +Comment[pl]=Przerwany. +Comment[pt]=Abortado. +Comment[pt_BR]=Abortado. +Comment[ro]=Anulat. +Comment[ru]=Прервано. +Comment[rw]=Byaretswe. +Comment[se]=Gaskalduhtton. +Comment[sk]=Zrušené. +Comment[sl]=Prekinjeno. +Comment[sr]=Прекинуто. +Comment[sr@Latn]=Prekinuto. +Comment[ss]=Bulewe. +Comment[sv]=Misslyckades. +Comment[ta]=கைவிட்டது. +Comment[te]=విడిచిపెట్టడమైనది. +Comment[tg]=Қатъ гардид. +Comment[th]=โปรแกรมถูกยกเลิก +Comment[tr]=İptal edildi. +Comment[tt]=Özderelde. +Comment[uk]=Перервано. +Comment[uz]=Toʻxtatildi. +Comment[uz@cyrillic]=Тўхтатилди. +Comment[ven]=Zwo latwa. +Comment[vi]=Bỏ đi. +Comment[wa]=Abandné. +Comment[xh]=Ayamkelekanga. +Comment[zh_CN]=中止。 +Comment[zh_TW]=中止。 +Comment[zu]=Ihushuliwe. + +[8] +Name=SIGFPE +Comment=Floating point exception. +Comment[af]=Wissel punt uitsondering. +Comment[az]=Üzən nöqtə xətası. +Comment[be]=Выключэнне рэчаіснага ліку. +Comment[bg]=Грешка при изчисления с плаваща запетая. +Comment[br]=Direizhenn niver skej. +Comment[ca]=Excepció de coma flotant. +Comment[cs]=Výjimka v plovoucí čárce. +Comment[csb]=Fela òb czas zmiennrozczidnikòwëch òbrechónków. +Comment[cy]=Eithriad pwynt arnofio. +Comment[da]=Decimaltal-undtagelse. +Comment[de]=Gleitkomma-Ausnahme +Comment[el]=Εξαίρεση κινητής υποδιαστολής. +Comment[eo]=Escepto ĉe kalkulado kun realaj nombroj. +Comment[es]=Excepción de coma flotante. +Comment[et]=Ujukomaarvutuse viga. +Comment[eu]=Koma mugikorreko salbuespena. +Comment[fa]=استثنای نقطۀ شناور. +Comment[fi]=Liukulukupoikkeus +Comment[fr]=Exception de virgule flottante. +Comment[fy]=Driuwende-komma-útsûndering. +Comment[ga]=Eisceacht Shnámhphointe. +Comment[gl]=Excepción de coma flotante. +Comment[he]=חריגת נקודה צפה. +Comment[hi]=फ्लोटिंग पाइंट एक्सेप्शन. +Comment[hr]=Izuzetak plivajuće točke. +Comment[hu]=Lebegőpontos kivétel. +Comment[id]=Floating point exception +Comment[is]=Villa í fleytitölureikningum. +Comment[it]=Eccezione virgola mobile. +Comment[ja]=浮動小数点例外。 +Comment[kk]=Қалқымалы нүктемен амал жасағанда ерекше жағдай. +Comment[km]=ករណី​លើកលែង Floating point ។ +Comment[ko]=부동 소숫점 예외. +Comment[lo]=ປະມວນຜົນທົດສະນິຍົມຜິດພາດ +Comment[lt]=Slankaus kablelio klaida +Comment[lv]=Peldošā punkta izņēmums. +Comment[mk]=Исклучок од подвижна запирка. +Comment[mn]=Хөвдөг таслал-онцлолт +Comment[ms]=Pengecualian titik apungan. +Comment[nb]=Flyttallsunntak. +Comment[nds]=Fleetkomma-Fehler +Comment[ne]=उत्प्लावन बिन्दु बाहेक +Comment[nl]=Drijvende-komma-uitzondering. +Comment[nn]=Flyttalsunntak. +Comment[nso]=Thlaolego ya karolo ya Phaphamalo +Comment[oc]=Excepcion de coma flotant. +Comment[pa]=ਫਲੋਟ ਬਿੰਦੂ ਅਪਵਾਦ ਹੈ। +Comment[pl]=Błąd podczas obliczeń zmiennoprzecinkowych. +Comment[pt]=Excepção de virgula flutuante. +Comment[pt_BR]=Exceção de ponto flutuante. +Comment[ro]=Excepție virgulă mobilă. +Comment[ru]=Исключительная ситуация при вычислении с плавающей точкой. +Comment[rw]=Irengayobora ry'akadomo kimuka. +Comment[se]=Desimálalohkospeahkastat +Comment[sk]=Výnimka. +Comment[sl]=Izjema pri delu s plavajočo piko. +Comment[sr]=Изузетак покретног зареза. +Comment[sr@Latn]=Izuzetak pokretnog zareza. +Comment[ss]=Kungahlanganiswa kwendzawo lendandako. +Comment[sv]=Flyttalsundantag. +Comment[ta]=மிதவைப் புள்ளித் தவிர்த்து. +Comment[tg]=Ҳолати истисно ҳангоми ҳисоб намудан бо нуқтаи шиновар. +Comment[th]=ประมวลผลทศนิยมผิดพลาด +Comment[tr]=Kayar nokta hatası. +Comment[tt]=Yözmä tap iskärmäse. +Comment[uk]=Виключна ситуація операції з плаваючою точкою. +Comment[ven]=Fhethu hune havha khagala. +Comment[vi]=Lỗi dấu chấm động. +Comment[wa]=Flotant pont foû-rîle +Comment[xh]=Amaxabiso okudada akhethekileyo. +Comment[zh_CN]=浮点计算异常。 +Comment[zh_TW]=浮點計算異常。 +Comment[zu]=Okwahlukile kwephuzu elintantayo. + +[11] +Name=SIGSEGV +Comment=Invalid memory reference. +Comment[af]=Ongeldige geheue verwysing. +Comment[ar]=مرجع خاطئ للذاكرة. +Comment[az]=Hökmsüz yaddaş referensi. +Comment[be]=Няправільны зварот да памяці. +Comment[bg]=Опит за достъп до неразрешена област от паметта. +Comment[bn]=অবৈধ মেমরি রেফারেন্স +Comment[br]=Daveen memor siek. +Comment[ca]=Referència a memòria no vàlida. +Comment[cs]=Neplatný odkaz do paměti. +Comment[csb]=Zmiłkòwé òdwòłanié do pamiãc. +Comment[cy]=Cyfeiriad c?f annilys. +Comment[da]=Ugyldig hukommelsesreference. +Comment[de]=Ungültige Speicherzuweisung +Comment[el]=Μη έγκυρη αναφορά στη μνήμη. +Comment[eo]=Nevalida memoro-referenco. +Comment[es]=Referencia a memoria inválida. +Comment[et]=Vigane mäluviide. +Comment[eu]=Baliogabeko memoriarekiko erreferentzia +Comment[fa]=مرجع حافظۀ نامعتبر. +Comment[fi]=Virheellinen muistiviittaus. +Comment[fr]=Référence en mémoire non valable. +Comment[fy]=Unjildige ûnthâldferwizing. +Comment[ga]=Tagairt neamhbhailí chuimhne. +Comment[gl]=Referéncia de memória non válida. +Comment[he]=התייחסות לזיכרון לא תקף. +Comment[hi]=अवैध मेमोरी रेफरेंस. +Comment[hr]=Neispravna memorijska referenca. +Comment[hsb]=Njekorektna referenca pomjatka. +Comment[hu]=Érvénytelen memóriahivatkozás. +Comment[id]=Referensi invalid memory +Comment[is]=Ólögleg minnisvísun. +Comment[it]=Riferimento memoria non valido. +Comment[ja]=無効なメモリ参照。 +Comment[ka]=წვდომა მეხსიერების აკრძალულ ნაწილში. +Comment[kk]=Рұқсатсыз жады сілтемесі. +Comment[km]=សេចក្ដីយោង​សតិ​មិន​ត្រឹមត្រូវ ។ +Comment[ko]=잘못된 메모리 참조. +Comment[lo]=ອ້າງອີງໄປຍັງຫນ່ວຍຄວາມຈຳບໍ່ຖືກຕ້ອງ +Comment[lt]=Neteisingas kreipimasis į atmintį +Comment[lv]=Nepareiza atmiņas atsauce. +Comment[mk]=Невалидна мемориска референца. +Comment[mn]=Хүчингүй санах ойн зөвшөөрөл. +Comment[ms]=Rujukan ingatan tidak sah. +Comment[nb]=Ugyldig minnereferanse. +Comment[nds]=Leeg Spiekeradress +Comment[ne]=अवैध स्मृति सन्दर्भ +Comment[nl]=Ongeldige geheugenverwijzing. +Comment[nn]=Ugyldig minnereferanse. +Comment[nso]=Tebeledisiso yeo esego ya kgonthe ya kelelo. +Comment[oc]=Referença a memoria no valida. +Comment[pa]=ਗਲਤ ਮੈਮੋਰੀ ਹਵਾਲਾ ਹੈ। +Comment[pl]=Nieprawidłowe odwołanie do pamięci. +Comment[pt]=Referência a memória inválida. +Comment[pt_BR]=Referência de memória inválida. +Comment[ro]=Referință eronată la memorie. +Comment[ru]=Доступ к неразрешённой области памяти. +Comment[rw]=Indango y'umwanyabubiko itariyo. +Comment[se]=Gustohis muitobájuhus +Comment[sk]=Nesprávne adresovanie pamäti. +Comment[sl]=Neveljavno naslavljanje pomnilnika. +Comment[sr]=Неисправна меморијска референца. +Comment[sr@Latn]=Neispravna memorijska referenca. +Comment[ss]=Lokungatsindvwa kwenkhumbulo lengekho emtsetfweni. +Comment[sv]=Ogiltig minnesreferens. +Comment[ta]=செல்லாத நினைவு குறிப்பு +Comment[te]=తప్పుడు మెమొరి సంబంధం. +Comment[tg]=Дастрасӣ ба хотираи номӯътабар. +Comment[th]=อ้างอิงไปยังหน่วยความจำไม่ถูกต้อง +Comment[tr]=Geçersiz bellek referansı. +Comment[tt]=Yaraqsız xäter iskärmäse. +Comment[uk]=Не чинне посилання до пам'яті. +Comment[ven]=U humbula murahu husa shumi. +Comment[vi]=Tham khảo bộ nhớ không hợp lệ. +Comment[wa]=Referince di memwere k' i n' convént nén +Comment[xh]=Uthelekiso lwenkumbulo engasebenziyo. +Comment[zh_CN]=无效的内存引用。 +Comment[zh_TW]=無效的記憶體違規使用 +Comment[zu]=Okuqondiwe kwenkumbulo okungasebenzi. + +[unknown] +Name=Unknown +Name[af]=Onbekend +Name[ar]=غير معروف +Name[az]=Namə'lum +Name[be]=Невядомы +Name[bg]=Неизвестен +Name[bn]=অজ্ঞাত +Name[br]=Dianav +Name[bs]=Nepoznato +Name[ca]=Desconegut +Name[cs]=Neznámý +Name[csb]=Nieznóny +Name[cy]=Anhysbys +Name[da]=Ukendt +Name[de]=Unbekannt +Name[el]=Άγνωστο +Name[eo]=Nekonata +Name[es]=Desconocido +Name[et]=Tundmatu +Name[eu]=Ezezaguna +Name[fa]=ناشناخته +Name[fi]=Tuntematon +Name[fo]=Ókent +Name[fr]=Inconnu +Name[fy]=Unbekend +Name[ga]=Anaithnid +Name[gl]=Descoñecido +Name[he]=לא ידוע +Name[hi]=अज्ञात +Name[hr]=Nepoznato +Name[hsb]=Njeznaty +Name[hu]=Ismeretlen +Name[id]=Tidak dikenal +Name[is]=Óþekkt +Name[it]=Sconosciuto +Name[ja]=未知 +Name[ka]=უცნობი +Name[kk]=Беймәлім +Name[km]=មិន​ស្គាល់ +Name[ko]=알 수 없음 +Name[ku]=Nenas +Name[lo]=ບໍ່ຮູ້ຈັກ +Name[lt]=Nežinoma +Name[lv]=Nezināms +Name[mk]=Непознат +Name[mn]=Тодорхойгүй +Name[ms]=Tidak Diketahui +Name[mt]=Mhux magħruf +Name[nb]=Ukjent +Name[nds]=nich bekannt +Name[ne]=अज्ञात +Name[nl]=Onbekend +Name[nn]=Ukjend +Name[nso]=Ga e Tsebje +Name[oc]=Desconut +Name[pa]=ਅਣਜਾਣ +Name[pl]=Nieznany +Name[pt]=Desconhecido +Name[pt_BR]=Desconhecido +Name[ro]=Necunoscut +Name[ru]=Неизвестный +Name[rw]=Kitazwi +Name[se]=Amas +Name[sk]=Neznámi +Name[sl]=Neznan +Name[sr]=Непознат +Name[sr@Latn]=Nepoznat +Name[ss]=Ngatiwa +Name[sv]=Okänd +Name[ta]=தெரியாத +Name[te]=తెలియని +Name[tg]=Номаълум +Name[th]=ไม่รู้จัก +Name[tr]=Bilinmeyen +Name[tt]=Bilgesez +Name[uk]=Невідомий +Name[uz]=Nomaʼlum +Name[uz@cyrillic]=Номаълум +Name[ven]=Zwisadivhei +Name[vi]=Không biết +Name[wa]=Nén cnoxhou +Name[xh]=Engaziwayo +Name[zh_CN]=未知 +Name[zh_TW]=未知 +Name[zu]=Okungaziwa +Comment=This signal is unknown. +Comment[af]=Hierdie sein is onbekende. +Comment[ar]=هذه الإشارة غير معروفة. +Comment[az]=Bu siqnal namə'lumdur. +Comment[be]=Невядомы сігнал. +Comment[bg]=Този сигнал е неизвестен. +Comment[bn]=অজ্ঞাত সংকেত +Comment[br]=Dianav eo an arhent-mañ. +Comment[bs]=Ovaj signal je nepoznat. +Comment[ca]=Aquesta senyal és desconeguda. +Comment[cs]=Neznámý signál. +Comment[csb]=Nieznóny sygnal. +Comment[cy]=Mae'r arwydd yma yn anhysbys. +Comment[da]=Dette signal er ukendt. +Comment[de]=Unbekanntes Signal +Comment[el]=Αυτό το σήμα είναι άγνωστο. +Comment[eo]=Ne konata signalo. +Comment[es]=Señal desconocida. +Comment[et]=Tundmatu signaal. +Comment[eu]=Seinale hau ezezaguna da. +Comment[fa]=این نشانک، ناشناخته است. +Comment[fi]=Tämä signaali on tuntematon +Comment[fo]=Hetta báknið er ókent. +Comment[fr]=Ce signal est inconnu +Comment[fy]=Dit sinjaal is ûnbekend. +Comment[ga]=Comhartha anaithnid. +Comment[gl]=Este sinal é descoñecido. +Comment[he]=איתות זה אינו מוכר. +Comment[hi]=यह संकेत अज्ञात है. +Comment[hr]=Nepoznati signal. +Comment[hsb]=Tutón signal njeje znaty. +Comment[hu]=Ismeretlen szignál. +Comment[id]=Sinyal ini tidak dikenal. +Comment[is]=Óþekkt boðmerki. +Comment[it]=Questo segnale è sconosciuto +Comment[ja]=このシグナルは分かりません。 +Comment[ka]=უცნობი სიგნალი +Comment[kk]=Беймәлім сигнал. +Comment[km]=មិន​ស្គាល់​សញ្ញា​នេះ​ឡើយ ។ +Comment[ko]=알 수 없는 신호. +Comment[lo]=ບໍ່ຮູຸ້ຈັກສັນຍານ +Comment[lt]=Šis signalas nežinomas. +Comment[lv]=Nezināms signāls. +Comment[mk]=Сигналот е непознат. +Comment[mn]=Тодорхойгүй сигнал. +Comment[ms]=Isyarat ini tidak diketahui. +Comment[mt]=Dan is-sinjal mhux magħruf. +Comment[nb]=Ukjent signal. +Comment[nds]=Dat Signaal is nich bekannt. +Comment[ne]=यो सङ्केत अज्ञात छ +Comment[nl]=Dit signaal is onbekend. +Comment[nn]=Dette signalet er ukjent. +Comment[nso]=Leswao le gale tsebje. +Comment[pa]=ਇਹ ਸੰਕੇਤ ਅਣਜਾਣਾ ਹੈ। +Comment[pl]=Nieznany sygnał. +Comment[pt]=Este sinal é desconhecido. +Comment[pt_BR]=Este sinal é desconhecido. +Comment[ro]=Acest semnal este necunoscut. +Comment[ru]=Неизвестный сигнал +Comment[rw]=Ikimenyetso ntikizwi. +Comment[se]=Dát lea amas signála +Comment[sk]=Tento signál je neznámy. +Comment[sl]=Ta signal je neznan. +Comment[sr]=Овај сигнал је непознат. +Comment[sr@Latn]=Ovaj signal je nepoznat. +Comment[ss]=Lokukhomba akwatiwa. +Comment[sv]=Signalen är okänd. +Comment[ta]=தெரியாத சைகை +Comment[te]=తెలియని సిగ్నల్ +Comment[tg]=Сигнали номаълум. +Comment[th]=ไม่รู้จักสัญญาณนี้ +Comment[tr]=Bilinmeyen sinyal. +Comment[tt]=Bilgesez ımlaw. +Comment[uk]=Цей сигнал є невідомим. +Comment[uz]=Bu signal nomaʼlum. +Comment[uz@cyrillic]=Бу сигнал номаълум. +Comment[ven]=Luswayo ulu alu divhei. +Comment[vi]=Không biết tín hiệu này. +Comment[wa]=Ci signå n' est nén cnoxhou +Comment[xh]=Oluphawu olungaziwayo. +Comment[zh_CN]=此信号未知。 +Comment[zh_TW]=未知的信號。 +Comment[zu]=Lolu phawu alwaziwa diff --git a/drkonqi/presets/enduserrc b/drkonqi/presets/enduserrc new file mode 100644 index 000000000..323eb93c3 --- /dev/null +++ b/drkonqi/presets/enduserrc @@ -0,0 +1,828 @@ +[General] +Name=End user +Name[af]=Einde gebruiker +Name[ar]=المسستخدم النهائي +Name[az]=Son istifadəçi +Name[be]=Карыстальнік +Name[bg]=Краен потребител +Name[bn]=ব্যবহারকারী +Name[br]=Implijer diwezh +Name[bs]=Krajnji korisnik +Name[ca]=Usuari final +Name[cs]=Koncový uživatel +Name[csb]=Kùńcowi brëkòwnik +Name[cy]=Defnyddiwr Diwedd +Name[da]=Slutbruger +Name[de]=Endbenutzer +Name[el]=Τελικός χρήστης +Name[eo]=Uzanto +Name[es]=Usuario final +Name[et]=Lõppkasutaja +Name[eu]=Erabiltzaile arrunta +Name[fa]=کاربر نهایی +Name[fi]=Loppukäyttäjä +Name[fo]=Nýtari +Name[fr]=Utilisateur final +Name[fy]=Einbrûker +Name[ga]=Gnáth-úsáideoir +Name[gl]=Usuario final +Name[he]=משתמש־קצה +Name[hi]=अंतिम उपयोक्ता +Name[hr]=Krajnji korisnik +Name[hsb]=Wužiwar +Name[hu]=Végfelhasználó +Name[is]=Notandi +Name[it]=Utente finale +Name[ja]=エンドユーザ +Name[ka]=საბოლოო მომხმარებელი +Name[kk]=Қатарлы пайдаланушы +Name[km]=អ្នក​ប្រើ +Name[ko]=일반 사용자 +Name[lo]=ຜູ້ໃຊ້ລະດັບສູງ +Name[lt]=Galutinis naudotojas +Name[lv]=Gala lietotājs +Name[mk]=Краен корисник +Name[mn]=Эцсийн хэрэглэгч +Name[ms]=Pengguna akhir +Name[mt]=User finali +Name[nb]=Sluttbruker +Name[nds]=Ennbruker +Name[ne]=अन्तिम प्रयोगकर्ता +Name[nl]=Eindgebruiker +Name[nn]=Sluttbrukar +Name[nso]=Modirisi wa mafelelo +Name[oc]=Usuari final +Name[pa]=ਉਪਭੋਗੀ +Name[pl]=Użytkownik końcowy +Name[pt]=Utilizador final +Name[pt_BR]=Usuário final +Name[ro]=Utilizator obișnuit +Name[ru]=Конечный пользователь +Name[rw]=Ukoresha +Name[se]=Geavaheaddji +Name[sk]=Konečný používateľ +Name[sl]=Končni uporabnik +Name[sr]=Крајњи корисник +Name[sr@Latn]=Krajnji korisnik +Name[ss]=Umsebentisi wekugcina +Name[sv]=Slutanvändare +Name[ta]=கடைசி பயனர் +Name[te]=చివరి యూజర్ +Name[tg]=Истифодакунандаи ниҳоӣ +Name[th]=ผู้ใช้ระดับสุดท้าย +Name[tr]=Son kullanıcı +Name[tt]=Azaq qullanuçı +Name[uk]=Кінцевий користувач +Name[uz]=Oddiy foydalanuvchi +Name[uz@cyrillic]=Оддий фойдаланувчи +Name[ven]=U fhedza ha Mushumisi +Name[vi]=Người dùng +Name[wa]=Uzeu d' difén +Name[xh]=Umsebenzisi wokugqibela +Name[zh_CN]=普通用户 +Name[zh_TW]=一般使用者 +Name[zu]=Umsebenzisi wokugcina +Comment=Settings preferred for end users +Comment[af]=Instellings verkies vir einde gebruikers +Comment[ar]=التعيينات المفضلة لِلمستخدم النهائي +Comment[az]=Son istifadəçilər üçün tərcih edilən qurğular +Comment[be]=Настаўленні для звычайнага карыстальніка +Comment[bg]=Настройки, подходящи за потребители +Comment[bn]=সাধারণ ব্যবহারকারীদের জন্যপছন্দ করা সেটিংস +Comment[br]=Kefluniadur azas evit implijerien diwezh +Comment[bs]=Postavke preporučene krajnjim korisnicima +Comment[ca]=Arranjaments preferits pels usuaris finals +Comment[cs]=Nastavení upřednostňovaná koncovými uživateli +Comment[csb]=Ùstôw dlô brëkòwników +Comment[cy]=Gosodiadau hoffiannus i ddefnyddwyr diwedd +Comment[da]=Indstillinger foretrukket for slutbrugere +Comment[de]=Bevorzugte Einstellungen für Endbenutzer +Comment[el]=Προτιμώμενες ρυθμίσεις για τελικούς χρήστες +Comment[eo]=Agordo destinita por uzantoj +Comment[es]=Preferencias preferidas por los usuarios finales +Comment[et]=Lõppkasutajale mõeldud seadistused +Comment[eu]=Erabiltzaile arrunten gustoko konfigurazioa +Comment[fa]=تنظیمات ارجح برای کاربران نهایی +Comment[fi]=Loppukäyttäjän asetukset +Comment[fo]=Uppseting fyri nýtarir +Comment[fr]=Paramètres adaptés à l'utilisateur final +Comment[fy]=Ynstellings foarkar foar einbrûkers +Comment[ga]=Socruithe is fearr le húsáideoirí deiridh +Comment[gl]=Configuracións preferidas para os usuarios finais +Comment[he]=הגדרות מועדפות למשתמשי־קצה +Comment[hi]=विन्यास की प्राथमिकता अंतिम उपयोक्ता के लिए +Comment[hr]=Postavke preporučene krajnjim korisnicima +Comment[hsb]=Nastajenja za normalneho wužiwarja +Comment[hu]=Végfelhasználók számára javasolt beállítások +Comment[id]=Pengaturan aturan untuk end user +Comment[is]=Ráðlagðar stillingar fyrir notendur +Comment[it]=Impostazioni per l'utente finale +Comment[ja]=エンドユーザ用の設定 +Comment[ka]=პარამეტრები, საბოლო მომხმარებლისათვის +Comment[kk]=Қатарлы пайдаланушыға тән баптаулары +Comment[km]=ការ​កំណត់​ដែល​អ្នក​ប្រើ​ចូលចិត្ត +Comment[ko]=일반 사용자가 선호하는 설정 +Comment[lo]=ການປັບແຕ່ງສຳຫລັບຜູ້ໃຊ້ລະດັບສູງ +Comment[lt]=Galutiniam naudotojui rekomenduojami nustatymai +Comment[lv]=Gala lietotājiem ieteicamie uzstādījumi +Comment[mk]=Поставувања за крајни корисници +Comment[mn]=Эцсийн хэрэглэгчийн эрхэмлэсэн тохируулга +Comment[ms]=Tetapan diutamakan untuk pengguna akhir +Comment[mt]=Settings preferuti minn users finali +Comment[nb]=Innstillinger for sluttbrukere +Comment[nds]=Vörtrocken Instellen för normale Brukers +Comment[ne]=अन्तिम प्रयोगकर्ताले रुचाएको सेटिङ +Comment[nl]=Instellingen gewenst voor eindgebruikers +Comment[nn]=Innstillingar for sluttbrukarar +Comment[nso]=Dipeakanyo di kganyogetswe badirisi ba mafelelo +Comment[oc]=Arranjament preferit pels usuaris finals +Comment[pa]=ਉਪਭੋਗੀਆਂ ਰਾਹੀਂ ਪਸੰਦ ਕੀਤੀਆਂ ਜਾਦੀਂ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia dla użytkowników +Comment[pt]=Configurações para os utilizadores finais +Comment[pt_BR]=Configurações prediletas para usuários finais +Comment[ro]=Setări preferate pentru utilizatorii obișnuiți +Comment[ru]=Настройки, предпочтительные для конечных пользователей +Comment[rw]=Amagenamiterere abereye y'abakoresha +Comment[se]=Heivehusat geavaheddjiid várás +Comment[sk]=Preferované nastavenia pre konečných používateľov +Comment[sl]=Nastavitve, ljubše končnim uporabnikom +Comment[sr]=Поставке које више воле крајњи корисници +Comment[sr@Latn]=Postavke koje više vole krajnji korisnici +Comment[ss]=Kuhleleka lokunconotwako kwebasebentisi bekugcina +Comment[sv]=Rekommenderade inställningar för slutanvändare +Comment[ta]=பயனர்களுக்கான விருப்ப அமைப்புகள் +Comment[te]=చివరి యూజర్లకు ఇష్టమైన అమరికలు +Comment[tg]=Танзимоти беҳтарини корбарони ниҳоӣ +Comment[th]=การปรับแต่งสำหรับผู้ใช้ระดับสุดท้าย +Comment[tr]=Son kullanıcılar için tercih edilen ayarlar +Comment[tt]=Azaq qullanuçı öçen qulay köylänü +Comment[uk]=Параметри переважно для кінцевих користувачів +Comment[uz]=Oddiy foydalanuvchilar uchun afzal moslamalar +Comment[uz@cyrillic]=Оддий фойдаланувчилар учун афзал мосламалар +Comment[ven]=Dzudzanyo dzi shumisesiwaho nga Vhashumisi. +Comment[vi]=Thiết lập tùy chọn dành cho người dùng +Comment[wa]=Tchuzes mia inmêyes pa ls uzeu d' difén +Comment[xh]=Izicwangciso ezikhethwayo zomsebenzisi osekugqhibeleni +Comment[zh_CN]=最终用户的首选项 +Comment[zh_TW]=一般使用者的偏好設定 +Comment[zu]=Izilungiselelo ezincanyelwayo zabasebenzisi bokugcina + +SignalDetails=true +ShowBacktraceButton=true +ShowBugReportButton=false +ShowDebugButton=false +DisableChecks=false + +[ErrorDescription] +Enable=true +Name=The application %progname (%appname) crashed and caused the signal %signum (%signame). +Name[af]=Die aansoek %progname (%appname) het gestaak en veroorsaak Die sein %signum (%signame). +Name[ar]=البرنامج %progname (%appname)، أنهار و أدى لإعطاء الإشارة %signum (%signame). +Name[az]= %progname (%appname) proqramı çökdü və %signum (%signame) siqnalı göndədi. +Name[be]=Праграма %progname (%appname) зламалася і перадала сігнал %signum (%signame). +Name[bg]=В програмата %progname (%appname) възникна фатална грешка, предизвиквайки сигнал %signum (%signame). +Name[bn]=%progname (%appname) প্রোগ্রামটি ক্র্যাশ করেছে এবং এই সিগনাল পাঠিয়েছে: %signum (%signame) +Name[br]=Sac'het eo bet an arload %progname (%appname) ha bet abeg d'an arhent %signum (%signame). +Name[bs]=Aplikacija %progname (%appname) se srušila sa signalom %signum (%signame). +Name[ca]=L'aplicació %progname (%appname) ha fallat i ha causat la senyal %signum (%signame). +Name[cs]=Aplikace %progname (%appname) spadla a vyvolala signál %signum (%signame). +Name[csb]=Programa %progname (%appname) załómała sã wëwòłiwôjąc sygnal %signum (%signame). +Name[cy]=Mae'r cymhwysiad %progname (%appname) wedi cwympo, gan achosi'r arwydd %signum (%signame). +Name[da]=Programmet %progname (%appname) brød sammen og gav signalet %signum (%signame). +Name[de]=Das Programm %progname (%appname) ist abgestürzt und hat das Signal %signum (%signame) veranlasst. +Name[el]=Η εφαρμογή %progname (%appname) κατέρρευσε και προκάλεσε το σήμα %signum (%signame). +Name[eo]=La aplikaĵo %progname (%appname) mortis kaj kaŭzis la signalon %signum (%signame). +Name[es]=La aplicación %progname (%appname) falló y provocó la señal %signum (%signame). +Name[et]=Rakendus %progname (%appname) astus ämbrisse põhjustatuna signaalist %signum (%signame). +Name[eu]=%progname (%appname) aplikazioak krask egin eta %signum (%signame) seinalea sortu du. +Name[fa]=کاربرد %progname (%appname) فروپاشید و باعث ایجاد نشانک %signum (%signame)شد. +Name[fi]=Sovellus %progname (%appname) kaatui ja signaalilla %signum (%signame) +Name[fo]=Forritið %progname (%appname) soraðist og sendi út báknið %signum (%signame). +Name[fr]=L'application %progname (%appname) s'est terminée anormalement et a provoqué le signal %signum (%signame). +Name[fy]=It programma %progname (%appname) hat in net jildige bewurking makke en wurdt sluten. Dit joech it folgjende sinjaal: %signum (%signame). +Name[ga]=Thuairteáil feidhmchlár %progname (%appname) agus thug sé comhartha %signum (%signame). +Name[gl]=A aplicación %progname (%appname) estragou-se e provocou o sinal %signum (%signame). +Name[he]=היישום %progname (%appname) התרסק וגרם לאיתות %signum (%signame). +Name[hi]=अनुप्रयोग %progname (%appname) क्रैश हो गया है तथा संकेत उत्पन्न किया %signum (%signame). +Name[hr]=Došlo je do rušenja aplikacije %progname (%appname), te je izazvan signal %signum (%signame). +Name[hsb]=Program %progname (%appname) je so pójsnył ze signalom %signum (%signame). +Name[hu]=A(z) %progname (%appname) alkalmazás lefagyott és %signum (%signame) szignált okozott. +Name[id]=Aplikasi %progname (%appname) crashed dan menyebabkan sinyal %signum (%signame) +Name[is]=Forritið %progname (%appname) hrundi og gaf frá sér boðið %signum (%signame). +Name[it]=L'applicazione %progname (%appname) è andata in crash e ha causato il segnale %signum (%signame). +Name[ja]=このアプリケーション %progname (%appname) はクラッシュし、シグナル %signum (%signame) を発行しました。 +Name[ka]=პროგრამა %progname (%appname) მოხდა ფატალური შეცდომა, რომელმაც გამოიწვია სიგნალი %signum (%signame). +Name[kk]=%progname (%appname) қолданба қирап %signum (%signame) деген сигналды берді. +Name[km]=កម្មវិធី %progname (%appname) បាន​គាំង និង​បណ្ដាល​ឲ្យ​មាន​សញ្ញា %signum (%signame) ។ +Name[ko]=프로그램 %progname (%appname)이(가) 충돌하였고 신호 %signum(%signame)을(를) 보냈습니다. +Name[lo]=ອັບພລິກເຄຊັນ%progname (%appname) ທຳງານຫລົ້ມເຫລວໂດຍແຈ້ງສັນຍານຫມາຍເລກ%signum (%signame) +Name[lt]=%progname programa (%appname) nulūžo ir gavo %signum (%signame) signalą. +Name[lv]=Aplikācija %progname (%appname) avarējusi un izsaukusi signālu %signum (%signame). +Name[mk]=Апликацијата %progname (%appname) падна и го предизвика сигналот %signum (%signame). +Name[mn]=Програм %progname (%appname) гацаж %signum (%signame) сигнал өгөв. +Name[ms]=Aplikasi %progname (%appname) musnah dan menyebabkan isyarat %signum (%signame). +Name[mt]=Il-programm %progname (%appname) ikkraxxja u kkawża s-sinjal %signum (%signame). +Name[nb]=Programmet %progname (%appname) krasjet og gav signalet %signum (%signame). +Name[nds]=Dat Programm %progname (%appname) is afstört un hett dat Signaal %signum (%signame) utlööst. +Name[ne]=अनुप्रयोग %progname (%appname) नष्ट भयो र सङ्केत %signum (%signame) उत्पन्न गर्यो । +Name[nl]=Het programma %progname (%appname) heeft een ongeldige bewerking gemaakt en wordt daarom afgesloten. Het gaf het volgende signaal: %signum (%signame). +Name[nn]=Programmet %progname (%appname) krasja og gav signalet %signum (%signame). +Name[nso]=Tshomiso %progname (%appname) e thubagane gomme ya hlola leswao %signum (%signame). +Name[oc]=Lo programo d'aplicacion %progname (%appname) ei tombat e a causat lo sinhal %signum (%signame). +Name[pa]=ਕਾਰਜ %progname (%appname) ਕਰੈਸ਼ ਹੋ ਗਿਆ ਹੈ ਅਤੇ ਇਹ ਸੰਕੇਤ %signum (%signame) ਦਿੱਤਾ ਹੈ। +Name[pl]=Program %progname (%appname) uległ awarii, wywołując sygnał %signum (%signame). +Name[pt]=A aplicação %progname (%appname) estoirou e enviou o sinal %signum (%signame). +Name[pt_BR]=O aplicativo %progname (%appname) terminou anormalmente e causou o sinal %signum (%signame). +Name[ro]=Aplicația %progname (%appname) s-a prăbușit și a generat semnalul %signum (%signame). +Name[ru]=В приложении %progname (%appname) произошёл фатальный сбой, вызвавший сигнал %signum (%signame). +Name[rw]=Porogaramu %progname (%appname) yononekaye kandi itera ikimenyetso %signum (%signame). +Name[se]=Prográma %progname (%appname) riekčánii, ja attii signála %signum (%signame). +Name[sk]=Aplikácia %progname (%appname) spadla. Chyba bola spôsobená signálom %signum (%signame). +Name[sl]=Program %progname (%appname) se je sesul in javil signal %signum (%signame). +Name[sr]=Програм %progname (%appname) се срушио и изазвао сигнал %signum (%signame). +Name[sr@Latn]=Program %progname (%appname) se srušio i izazvao signal %signum (%signame). +Name[ss]=Sicelo %programe (%appname) sishayisile saphindze sabangela nekukhomba %signum (%signame). +Name[sv]=Programmet %progname (%appname) kraschade och orsakade signalen %signum (%signame). +Name[ta]=பயன்பாடு %progname (%appname), முறிந்து. ÁüÚõ %signum (%signame) சைகையைத் தந்தது. +Name[te]=ఈ కార్యక్రమం %progname (%appname) క్రాష్ అయినది మరియూ %signum సిగ్నల్ నూ కలుగ చేసింది +Name[tg]= Барномаи %progname (%appname) шикаст ва боиси эҷоди сигнали %signum (%signame) шуд. +Name[th]=แอพพลิเคชัน %progname (%appname) ทำงานล้มเหลวโดยแจ้งสัญญาณหมายเลข%signum (%signame) +Name[tr]= %progname (%appname) uygulaması çöktü ve %signum (%signame) sinyali gönderdi. +Name[tt]=%progname (%appname) yazılımında %signum (%signame) ımlaw belän ütmäslek xata buldı. +Name[uk]=Програма %progname (%appname) дала збій та викликала сигнал %signum (%signame). +Name[uz]=Dasturning %progname (%appname) ishida xato roʻy berdi va %signum (%signame) signaliga sababchi boʻldi. +Name[uz@cyrillic]=Дастурнинг %progname (%appname) ишида хато рўй берди ва %signum (%signame) сигналига сабабчи бўлди. +Name[ven]=Apulikhesheni ya %progdzina(%appdzina) yo tshinyadzhwa ya dovha ya vhanga luswayo %signum (%signame). +Name[vi]=Chương trình %progname (%appname) bị lỗi và gửi ra tín hiệu %signum (%signame). +Name[wa]=Li programe %progname (%appname) s' a spotchî et a evoyî l' signå %signum (%signame). +Name[xh]=Isicelo se %progname (%appname) ingqubekile yaze yabangela uphawu lwe %signum (%signame). +Name[zh_CN]=程序 %progname (%appname) 已崩溃,导致信号 %signum (%signame)。 +Name[zh_TW]=此應用程式 %progname (%appname) 不正常結束,產生信號 %signum (%signame)。 +Name[zu]=I-%progname yomyaleli (%appname), iphahlazekile futhi yabanga uphawu %signum (%signame). + +[WhatToDoHint] +Enable=true +Name=You might want to send a bug report for this application. Check if it is listed on http://bugs.kde.org, otherwise mail the author. Please include as much information as possible, maybe the original documents. If you have a way to reproduce the error, include this also. +Name[af]=Jy kan 'n fout raport instuur vir die program. Kyk eers of dit by http://bugs.kde.org gelys is, anders kan jy die outeur direk kontak. Sluit asb. soveel inligting as moontlik in, selfs die oorspronklike dokumentasie. As jy weet hoe om die probleem te reproduseer, sluit asb. ook 'n beskrywing daarvan in. +Name[ar]=قد تكون راغباً بإرسال تقرير بهذا الخطأ لهذا البرنامج. تأكد من عدم وجود تقرير عن نفس الخطأ في http://bugs.kde.org قبل إخبار مؤلف البرنامج. الرجاء إجعل تقريرك شاملاً لكل المعلومات أو بعض المستندات الأصلية. وإذا كان لديك طريقة لتكرار هذا الخطأ ، يرجى منك إضافنها أيضاً. +Name[be]=Вы можаце захацець паведаміць пра памылку ў праграме. Праверце, ці ўжо не паведамілі пра гэтую памылку на http://bugs.kde.org, калі не, дашліце ліст стваральніку праграмы. Калі ласка, паведаміце як мага больш карыснай інфармацыі. Калі вы можаце паўтарыць гэтую памылку, паведаміце, якім чынам. +Name[bg]=Ако искате, може да изпратите съобщение за грешка за тази програма. В такъв случай натиснете бутона "Съобщаване за грешка" или се свържете с автора на програмата по електронна поща. Преди това обаче проверете дали грешката вече не фигурира в http://bugs.kde.org. Моля, опишете подробно възникналия проблем и стъпките за неговото възпроизвеждане. +Name[bn]=আপনার সম্ভবত এই অ্যাপলিকেশনটি সম্বন্ধে বাগ রিপোর্ট পাঠানো উচিত্‍। প্রথমে খোঁজ করে দেখুন এই বাগ-টি http://bugs.kde.org-এ আগে থেকেই আছে কি না, এবং না থাকলে প্রোগ্রামটির লেখককে ই-মেইল করুন। অনুগ্রহ করে যতটা সম্ভব তথ্য অন্তর্ভুক্ত করার চেষ্টা করবেন। যদি এমন কোন উপায় খুঁজে পান যার সাহায্যে প্রতিবার নিশ্চিতভাবে সমস্যাটি দেখা যায়, তাহলে তা অবশ্যই জানাবেন। +Name[bs]=Možda biste trebali prijaviti bug za ovu aplikaciju. Provjerite da li je aplikacija navedena na http://bugs.kde.org, pa ako nije pošaljite e-mail autoru. Molim uključite što je više moguće podataka, po mogućnosti originalne dokumente. Ako znate kako pouzdano ponoviti ovu grešku, navedite i to. +Name[ca]=Potser voldreu enviar un informe d'error per a aquesta aplicació. Comproveu si està a la llista de http://bugs.kde.org, altrament envieu un correu a l'autor. Afegiu tanta informació com sigui possible, potser els documents originals. Si teniu una manera de reproduir l'error, afegiu-la també. +Name[cs]=Možná budete chtít zaslat nahlášení chyby autorovi. Nejdříve zkontrolujte, zda-li je chyba zapsaná na stránce http://bugs.kde.org, jinak pošlete autorovi email. Prosím vložte co nejvíce informací, případně i původní dokument. Znáte-li způsob, jak znovu vyvolat chybu, tak jej též popište. +Name[csb]=Mòżesz wësłac rapòrt ò felë do ùsôdzcë ti programë. Napiszë jak nôwicy wëdowiédzë, jak mòżesz to dodôj originalné dostónczi (dokùmentë). eżle fela sã pòwtôrzô, dodôj wiadło jaczi sã pòkazywô. Eżle programa nie je mòżno nalezc na starnie http://bugs.kde.org, wëslë e-mailã do ùsôdzcë. +Name[cy]=Efallai y dymunwch yrru adroddiad o'r nam i'r awdur. Cywirwch os mae o wedi'i restru ar http://bugs.kde.org, neu anfonwch ebost i'r awdur. Ceisiwch gynnwys cyn gymaint o wybodaeth â phosibl, ac efallai'r dogfennau gwreiddiol. Os oes modd i chi ail-greu'r gwall, cynhwyswch hwn hefyd. +Name[da]=Måske har du lyst til at sende en fejlrapport om dette program. Tjek om fejlen allerede er listet på http://bugs.kde.org, skriv ellers til forfatteren. Husk at inkludere så meget information som muligt, måske de oprindelige dokumenter. Hvis du er i stand til at reproducere fejlen, så husk også at nævne dette. +Name[de]=Vielleicht möchten Sie einen Problembericht (Bug Report) für dieses Programm erstellen? Bitte überprüfen Sie in diesem Fall, ob es unter http://bugs.kde.org aufgeführt ist, sonst schreiben Sie bitte eine Mail an den Autor (im Zweifelsfall auf Englisch). Geben Sie so viele Informationen wie möglich, die zur Reproduktion des Problems beitragen können, evtl. einschließlich der Dokumente, bei denen es auftritt. +Name[el]=Ίσως θέλετε να στείλετε μια αναφορά σφάλματος γι' αυτή την εφαρμογή. Ελέγξτε αν είναι καταχωρημένη στο http://bugs.kde.org αλλιώς στείλετε email στο συγγραφέα. Παρακαλώ συμπεριλάβετε τη μέγιστη δυνατή πληροφορία, ίσως και τα αυθεντικά έγγραφα. Αν έχετε κάποιον τρόπο να αναπαραχθεί το σφάλμα, συμπεριλάβετέ τον. +Name[eo]=Vi povus sendi eraroraporton pri ĉi tiu aplikaĵo. Kontrolu ĉu la listo ĉe http://bugs.kde.org jam enhavas ĝin, alie sendu retpoŝton al la aŭtoro. Bonvolu kunsendi tiom da informoj, kiom eblas, laŭeble la originalajn dokumentojn. Se vi trovis manieron reprodukti la eraron, bonvolu krome aldoni ĝin. +Name[es]=Puede que quiera enviar un informe de fallos de esta aplicación. Por favor, compruebe si aparece en http://bugs.kde.org, si no, envíe un mensaje al autor. Por favor, incluya tanta información como pueda, tal vez incluso los documentos originales. Si hay una forma de reproducir el error, inclúyala también. +Name[et]=Kui soovid rakenduse kohta veateadet saata, kontrolli kõigepealt, ega sellest ei tea juba http://bugs.kde.org. Kui mitte, saada veateade autorile ja lisa palun nii palju infot, kui võimalik. Kui võimalik, siis ka originaaldokumendid. Kui tead, kuidas viga korrata, siis lisa ka see info. +Name[eu]=Agian aplikazio honen akatsari buruzko jakinarazpena bidali nahi duzu. Begira ezau ea http://bugs.kde.org helbideko zerrendan ageri den, eta hala ez bada, bidal iezaiozu mezua egileari. Ahalik eta argibide gehien eman, behar balitz baita dokumentu originalak ere. Errorea errepikarazteko biderik ezagutuko bazenu, gehi ezazu baita. +Name[fa]=ممکن است بخواهید گزارش اشکالی را برای این کاربرد ارسال کنید. بررسی کنید که در http://bugs.kde.org فهرست شده، در غیر این صورت به نویسنده نامه بدهید. لطفاً، نامه شامل اطلاعات ممکن که احتمالاً مستندات اصلی است، باشد. اگر روشی برای تولید دوبارۀ خطا دارید، آن را هم در نظر بگیرید. +Name[fi]=Halutessasi voit lähettää vikailmoituksen ohjelman tekijälle. Tarkista, löytyykö vikailmoitusta jo valmiina osoitteessa http://bugs.kde.org/. Jos tätä vikaa ei ole ilmoitettu, voit lähettää uuden ilmoituksen. Sisällytä ilmoitukseen niin paljon tietoa kuin mahdollista, ehkä myös alkuperäiset asiakirjat. Jos tiedät, kuinka vian voi toistaa, kerro myös se ilmoituksessa. Ilmoitus täytyy lähettää englanninkielisenä. +Name[fr]=Vous devriez envoyer un rapport de bogue pour cette application. Veuillez vérifier s'il est déjà inscrit sur http://bugs.kde.org, sinon envoyez un courrier électronique à l'auteur. Veuillez inclure autant d'informations que possible, peut-être aussi les documents de travail. Si vous savez comment reproduire le problème, indiquez-le. +Name[fy]=Jo wolle miskien wol in brekrapport foar dit programma ferstjoere. Kontrolearje of de flater dy't jo fûn ha al bekend is by http://bugs.kde.org. Is dat net sa, nim dan kontakt op mei de skriuwer fan it programma. Heakje sa folle mooglik ynformaasje ta, miskien sels de orizjinele dokuminten. As jo in manier witte om de flater opnij te foarskyn te krijen. heakje dat der dan ek oan. +Name[gl]=Se quere pode enviar un informe sobre un erro desta aplicación. Comprobe primeiro se está listado en http://bugs.kde.org, e se non o está mande un correo-e ao autor. Por favor, inclua a maior información posíbel, mesmo os documentos orixinais. Se ten un xeito de reproducir o erro, inclua-o tamén. +Name[he]=ייתכן שיהיה ברצונך לשלוח דיווח על הבאג. בדוק האם הבאג רשום ב http://bugs.kde.org, אם לא, שלח דוא"ל לכותב התוכנה. מומלץ לכלול מידע רב ככל האפשר, ואולי גם את המסמכים המקוריים. אם יש לך דרך לשחזר את השגיאה, כלול גם אותה. +Name[hi]=आप इस अनुप्रयोग के लिए बग रपट भेजना चाहेंगे. देखें कि यह http://bugs.kde.org पर सूचीबद्ध है, यदि नहीं तो लेखक को डाक भेजें. कृपया अधिक से अधिक संभव जानकारी सम्मिलित करें हो सके तो मूल दस्तावेज़ भी. यदि आपके पास इस त्रुटि को फिर से पैदा कर सकने के साधन हैं तो इसे भी शामिल करें. +Name[hr]=Mogli biste podnijeti izvještaj o nedostatku za ovu aplikaciju. Provjerite nalazi li se aplikacija na popisu pri http://bugs.kde.org, u protivnom pošaljite poruku autoru. Obuhvatite što biše podataka, po mogućnosti i izvornu dokumentaciju. Ako postoji način reprodiciranja pogreške, uključite ju u opis. +Name[hsb]=Snadź chceće rozprawu wo zmylku pósłać. Pohladajće, hač je zmylk pola http://bugs.kde.org zapisany, hewak skontaktujće so z awtorom. Prošu podawajće telko informacije kaž móžno. Hdyž wěsće, kak hodźi so tutón zmylk wuwołać, napisajće to tež. +Name[hu]=A programban felfedezett hibákat kérjük jelezze a szerzőnek. Először mindig ellenőrizze, hogy a hiba nem szerepel-e már a http://bugs.kde.org hibanyilvántartóban, csak utána értesítse a szerzőt. Csatolja a bejelentéshez az összes fontos információt, dokumentumot. Ha reprodukálni tudja a hibát, írja le részletesen annak módját. +Name[id]=Anda mungkin ingin mengirim laporan bug untuk pembuat aplikasi ini. Periksa apakah program sudah terdaftar di http://bugs.kde.org, bila belum kirim mail ke pembuat aplikasi. Mohon sertakan informasi sebanyak mungkin, bila perlu sertakan dokumen asli. Jika Anda tahu cara reproduksi errornya, sertakan pula informasi tersebut. +Name[is]=Þú vilt kannski senda villuskýrslu um þetta forrit. Athugaðu fyrst hvort þetta er þekkt villa á http://bugs.kde.org. Ef svo er ekki skaltu senda höfundinum bréf. Vinsamlegast gefðu eins ítarlegar upplýsingar um aðstæður og þú getur, jafnvel með afriti af gögnunum sem þú varst að vinna með. Ef þú getur framkallað villuna að vild, lýstu þá hvernig þú ferð að því. +Name[it]=Potrebbe essere una buona idea spedire una segnalazione di bug per questa applicazione. Controlla se l'applicazione si trova su http://bugs.kde.org, altrimenti spedisci una mail direttamente all'autore. Cerca di fornire le maggiori informazioni possibili, ad esempio, se possibile, includi anche i documenti originali. Se conosci un modo per riprodurre l'errore scrivilo nella segnalazione di bug. +Name[ja]=このアプリケーションのバグを報告するには、まず http://bugs.kde.org にアプリケーションが登録されているか確認し、なければ作者にメールしてください。できるだけ多くの情報を含めてください。バグを再現する方法があれば、それも書いてください。 +Name[ka]=თუ თქვენ გნებავთ გააგზავნოთ ოქმი შეცდომის შესახებ: დარწმუნდით, რომ ის არის სიაში რომელიც განთავსებულია ვებგვერდზე http://bugs.kde.org,წინააღმდეგ შემთხვევაში მისწერეთ ავტორს. წარუდგინეთ მას რაც შეიძლება მეტი ცნობა, შესაძლებელია ორიგინალური დოკუმენტებიც. თუ შესაძლებელია გაიმეორეთ პროგრამის მიერ ნაჩვენები შეცდომა. +Name[kk]=Бағдарламаның қатесі туралы хабарлама жолдағыңыз келсе, алдымен ол http://bugs.kde.org тізімінде әлі жоқ екенін тексеріп, тек жоқ болса авторына хат жолдаңыз. Мейлінше толық деректі маліметтерді жіберуге тырысыңыз. Қатені қайталау жолын білсеңіз, оны да хабарлаңыз. +Name[km]=អ្នក​ប្រហែល​ជា​ចង់​ផ្ញើ​របាយការណ៍​កំហុស​របស់​កម្មវិធី​នេះ ។ សូម​ពិនិត្យ​មើល​ថា​វាមាននៅ​ក្នុង​បញ្ជី http://bugs.kde.org ឬ​ទេ បើ​ពុំ​នោះ​ទេ​ផ្ញើ​ទៅ​អ្នក​និពន្ធ​ដោយ​ផ្ទាល់ ។ សូម​រួមបញ្ចូល​នូវ​ព័ត៌មាន​ឲ្យ​បាន​ច្រើន​តាម​តែ​អាច​ធ្វើ​បាន ឬ អាច​ជា​ឯកសារ​ដើម​ក៏​បាន ។ បើ​អ្នក​មាន​វិធីសាស្ត្របង្កើត​កំហុស​ឡើង​វិញ សូម​រួមបញ្ចូល​វា​ផង​ដែរ ។ +Name[lt]=Galbūt norėtumėte išsiųsti pranešimą apie ydą. Patikrinkite, ar ji paminėta http://bugs.kde.org, kitu atveju siųskite pranešimą programos autoriui.Prašome pateikti kiek galima daugiau informacijos, galbūt ir orginalius dokumentus. Jei Jūs žinote būdą pakartoti šią klaidą, aprašykite jį. +Name[lv]=Jūs varbūt gribat nosūtīt kļūdu ziņojumu. Pārbaudiet, vai šāda kļūda jau nav aprakstīta iekš http://bugs.kde.org, un ja nav, izveidojiet jaunu kļūdas ierakstu. Kļūdas ierakstā, lūdzu, iekļaujiet pēc iespējas vairāk informācijas, varbūt oriģinālos dokumentus. Ja jums zināms ceļš kā izsaukt kļūdas atkārtošanos, iekļaujiet arī to. +Name[mk]=Можеби би сакале да испратите известување за бубачка за оваа апликација. Проверете дали е наведена на http://bugs.kde.org, инаку пратете му е-пошта на авторот. Вклучете колку што е можно повеќе информации, и можеби и оригиналните документи. Ако имате начин да ја репродуцирате грешката, вклучете го и тоа во известувањето. +Name[ms]=Anda mungkin mahu menghantar laporan ralat untuk aplikasi ini. Periksa jika ia tercatat di http://bugs.kde.org, atau terus melkan kepada penulisnya. Sertakan maklumat sebanyak mungkim, seperti dokumen asal. Sertakan juga cara untuk mendapatkan ralat, jika boleh. +Name[mt]=Tista' tibgħat rapport dwar problema għal dan il-programm. Iċċekkja jekk hux elenkat fuq http://bugs.kde.org, inkella ibgħat imejl lill-awtur. Inkludi kemm tista' informazzjoni, u forsi d-dokumenti oriġinali. Jekk hemm mod kif terġa tikkawża din il-problema, inkludi dawn id-dettalji ukoll. +Name[nb]=Du vil kanskje sende en feilrapport til forfatteren. Se etter om du finner igjen feilen i lista på http://bugs.kde.org. Hvis ikke, så send en e-post til forfatteren og forklar hva som er galt. Ta med så mye informasjon som mulig. Utviklere får ofte ikke nok informasjon til å finne igjen feilen, men sjelden for mye. Tenk etter om du kan sende med dokumenter og annet du jobbet med når problemene dukket opp. Hvis du vet hvordan du kan gjenskape feilen, så ta også med en beskrivelse av hvordan det gjøres. +Name[nds]=Wenn Du en Fehlerbericht för dit Programm sennen wullt, kiek na, wat dat op http://bugs.kde.org list is, un wenn nich, schick den Autor en Nettbreef. Bitte föög so veel Informatschonen as mööglich to, villicht ok de Orginaal-Dokmenten. Wenn Du den Fehler toverlässig wedderhalen kannst, bitte ok angeven, woans dat geiht. +Name[ne]=तपाईँ यो अनुप्रयोगका लागि बग प्रतिवेदन पठाउँन चाहनु भयो होला । यो http://bugs.kde.org, मा सूचिकृत भएको जाँच गर्नुहोस् अन्यथा लेखकलाई पत्र लेख्नुहोस् । कृपया सम्भव भय सम्म मौलिक कागजात हुनसक्ने धेरै सूचना समावेश गर्नुहोस् । यदि तपाईँसँग त्रुटि पुन: उत्पादन हुने तरिका भएमा, यसलाई पनि समावेश गर्नुहोस् । +Name[nl]=U wilt misschien een bugrapport voor dit programma versturen. Controleer of de fout die u hebt gevonden al bekend is bij http://bugs.kde.org. Zo neen, neem dan contact op met de auteur van het programma. Sluit zoveel mogelijk informatie toe, eventueel inclusief de originele documenten. Als u een manier weet waarop u de fout kunt reproduceren, sluit die dan ook in. +Name[nn]=Du vil kanskje senda ein feilrapport. Sjå etter om programmet finst på http://bugs.kde.org. Viss ikkje, kan du senda e-post til utviklaren. Ta med så mykje informasjon du kan, kanskje dei opphavlege dokumenta. Dersom du kan reprodusera feilen, ta med dette òg. +Name[pa]=ਤੁਹਾਨੂੰ ਇਸ ਕਾਰਜ ਲਈ ਬੱਗ ਜਾਣਕਾਰੀ ਭੇਜਣੀ ਚਾਹੀਦੀ ਹੈ, ਇਹ ਜਾਂਚ ਕਰੋ ਕਿ ਇਹ listed on http://bugs.kde.org ਤੇ ਉਪਲੱਬਧ ਹੈ, ਨਹੀਂ ਤਾਂ ਲੇਖਕ ਨੂੰ ਜਾਣਕਾਰੀ ਦਿਓ। ਕਿਰਪਾ ਕਰਕੇ ਵੱਧ ਤੋਂ ਵੱਧ ਜਾਣਕਾਰੀ ਉਪਲੱਬਧ ਕਰਵਾਉ, ਸੰਭਵ ਹੋਵੇ ਤਾਂ ਅਸਲੀ ਦਸਤਾਵੇਜ਼। ਜੇਕਰ ਗਲਤੀ ਪੈਦਾ ਕਰਨ ਦਾ ਤਰੀਕਾ ਪਤਾ ਹੋਵੇ ਤਾਂ ਇਸ ਨੂੰ ਜਰੂਰ ਲਿਖੋ। +Name[pl]=Możesz wysłać raport o błędzie do autora tego programu. Załącz możliwie najwięcej informacji, ewentualnie nawet oryginalne dane (dokumenty). Jeżeli błąd jest powtarzalny, załącz przepis na powtórzenie. Jeśli program nie jest wymieniony na stronie http://bugs.kde.org, po prostu wyślij e-mail do autora. +Name[pt]=Você poderá querer enviar um relatório de erro para esta aplicação. Verifique se está listada no http://bugs.kde.org; caso contrário, mande um e-mail ao autor. Por favor inclua o máximo possível de informação, bem como os documentos em que estava a trabalhar. Se conseguir reproduzir o erro, inclua também a forma de o fazer. +Name[pt_BR]=Você pode querer mandar um relatório de erro ao autor. Por favor, verifique se ele está listado em http://bugs.kde.org, caso contrário, envie um e-mail ao autor. Inclua o máximo de informação possível, talvez até os documentos originais. Se você sabe como reproduzir o erro, inclua essa informação também. +Name[ro]=Poate ați dori să trimiteți un raport de eroare pentru această aplicație. Verificați dacă este listată la http://bugs.kde.org, iar în caz contrar trimiteți un e-mail autorului. Vă rog să includeți cît mai multă informație posibilă, poate chiar documentele originale. Dacă știți vreo o cale de a reproduce eroarea, includeți și acest lucru. +Name[ru]=Возможно вы захотите послать отчёт об ошибке в этом приложении. Убедитесь, что оно есть в списке на http://bugs.kde.org, и напишите автору программы. Предоставьте ему как можно больше сведений, по возможности, оригинальные сообщения. Если вы знаете, как воспроизвести ошибку, напишите и об этом также. +Name[rw]=Ushobora gushaka kohereza raporo y'ikosaporogaramu ry'iyi porogaramu. Reba niba iri ku rutonde kuri http://bugs.kde.org, atari ibyo uhoreza umuhanzi. Washyiramo ibisobanuro byose bishoboka, yenda inyandiko mwimerere. Niba ufite uburyo bwo kongera gukora ikosa, bishyiremo nabyo. +Name[se]=Don várrá háliidat sáddet dihkkeraportta dán prográmma várás. Dárkkis jos dihki juo gávdno http://bugs.kde.org báikkis, muđui sáddes e-boastta čállái. Attes nu ollu dieđuid go sáhtát, várra álgoálgosaš dokumeanttaid. Jos sáhtát geardduhit meattáhusa, sáddes dieđuid dán birra maid. +Name[sk]=Možno budete chcieť poslať správu o chybe tejto aplikácie. Overte, či už nie je na http://bugs.kde.org, inak pošlite email autorovi. Prosím, pridajte čo najviac informácií, prípadne aj dokumenty, ktoré problém spôsobili. Ak viete, ako chybu zopakovať, nezabudnite tejto postup tiež poslať. +Name[sl]=Morda boste avtorju želeli poslati poročilo o hrošču. Preverite, če je naveden na http://bugs.kde.org, sicer obvestite avtorja. Prosim, vključite čimveč podatkov, morda tudi izvirne dokumente. Če lahko kako ponovite napako, vključite tudi to. +Name[sr]=Можда бисте желели да пошаљете извештај о грешци за овај програм. Проверите да ли се налази на http://bugs.kde.org, иначе пошаљите е-пошту аутору. Укључите што је више података могуће, можда и оригиналне документе. Ако имате начин да поновите ову грешку укључите и то такође. +Name[sr@Latn]=Možda biste želeli da pošaljete izveštaj o grešci za ovaj program. Proverite da li se nalazi na http://bugs.kde.org, inače pošaljite e-poštu autoru. Uključite što je više podataka moguće, možda i originalne dokumente. Ako imate način da ponovite ovu grešku uključite i to takođe. +Name[sv]=Du kanske vill skicka en felrapport för det här programmet. Kontrollera om det finns listat på http://bugs.kde.org, skicka annars e-post till upphovsmannen. Bifoga så mycket information som möjligt, kanske originaldokumenten. Om du kan återupprepa felet, så beskriv även hur du gör det. +Name[ta]=இந்த பயன்பாட்டுக்கான நீங்கள் பிழை அறிக்கையொன்றை அனுப்பலாம். http://bugs.kde.org,ல் அது உள்ளதா என்பதை சரிபார்க்கவும் அல்லது ஆசிரியருக்கு மின்னஞ்சல் அனுப்பலாம். தயவுசெய்து முடிந்த அளவிற்கு தகவல்களை உள்ளடக்கவும். அவை மூல ஆவணங்களாகவும் இருக்கலாம். இந்த தவறை திரும்ப உருவாக்க ஏதேனும் வழியிருப்பின் அதனையும் குறிப்பிடவும். +Name[tg]= Мумкин аст бихоҳед ишколе аз ин барномаро гузориш диҳед. http://bugs.kde.org-ро баррасӣ кунед то устувор шавед, ки ин ишқол қаблан гузориш нашуда бошад. агар нашуда бувад номаи ба нависандаи барнома бифиристед. Латифаи иттилоотро ҳар чӣ комилтар бифиристед. Агар роҳе медонед, ки ишқоли дубораи иттифоқ биафтанд, онро низ замима кунед. +Name[th]=คุณอาจต้องการส่งรายงานความผิดพลาดสำหรับแอพลิเคชั่นนี้ โปรดตรวจสอบว่าข้อผิดพลาด ที่เกิดขึ้น มีอยู่บน http://bugs.kde.org แล้วหรือไม่ หรือคุณอาจส่งไปหาผู้พัฒนา โปรแกรมก็ได้โปรดรวบรวมข้อมูลความผิดพลาดให้มากที่สุด หรือหากคุณจำวิธีที่จะทำให้เกิดข้อผิดพลาด เช่นนั้นอีกได้ก็ให้ส่งวิธีการนั้นมาด้วย +Name[tr]=Bu uygulama için yazara bir hata raporu göndermek isterseniz, öncelikle hatanın http://bugs.kde.org adresinde yer alıp almadığını kontrol edin. Lütfen mümkün olduğunca fazla bilgi verin ve varsa orjinal belgeleri ekleyin. Eğer bu hatayı tekrar ortaya çıkarabilmenin bir yolu varsa, bunu da belirtin. +Name[tt]=Bu yazılımdağı xata turında yomğaq cibäräse kilsä, ul xata http://bugs.kde.org säxifäsendäge tezmädä terkälmägän bulsa, yazuçısına xäbär yulla. Ul çaqta mömkin bulğan qädär mäğlümätne tapşırırğa kiräk, çığanaq istäleklärne dä bälki. Bu inde şul xatanı qabat çığarıp tabu öçen kiräk. +Name[uk]=Можливо, ви захочете надіслати автору програми звіт про помилку. Будь ласка, перевірте чи про цю помилку ще не повідомлено на http://bugs.kde.org і лише тоді надсилайте її автору. Будь ласка, додайте якомога більше інформації, можливо, вихідні документи. Якщо ви можете повторити помилку, включіть це також. +Name[vi]=Bạn có thể gửi thư điện tử báo lỗi tới tác giả. Trước khi báo lỗi, kiểm tra xem lỗi đã được liệt kê trên http://bugs.kde.org chưa. Xin kèm theo càng nhiều thông tin càng tốt. Nếu bạn có cách để tái hiện lại lỗi, xin gửi kèm theo luôn. +Name[wa]=Vos vôrîz kékfeye vey on rapoirt di bug po ç' programe. Verifyîz s' il est dins l' lisse so http://bugs.kde.org, ôtrumint, emilez l' oteur. Metoz î, s' i vs plait, li pus d' informåcion k' est possibe, kékfeye les mwaisses documints. Si vos savoz rifé l' aroke, dijhoz l' eto. +Name[zh_CN]=您可能想要为此程序发送错误报告。请检查该错误是否已经在 http://bugs.kde.org 列出来了。如果尚未列出来的话,就需要联系作者。请尽可能提供详细的信息,比如当时程序使用的文档。如果您有办法重现错误,请同时提供这样的方法。 +Name[zh_TW]=您可能希望發送一個錯誤報告給作者。請檢查它是否已經列於 http://bugs.kde.org,否則請寄信給作者。請盡可能提供詳細的資訊,比如當時程式使用的文件。如果您有辦法重現錯誤,請同時提供這樣的方法。 + +[4] +Name=SIGILL +Comment=An application mostly receives the SIGILL signal due to a bug in the application. The application was asked to save its documents. +Comment[af]='n aansoek meestal ontvang die Sigill sein as gevolg na 'n fout in die aansoek. die aansoek was gevra na stoor sy dokumente. +Comment[ar]=إن استقبال برنامج ما لإشارة SIGILL ينتج في معظم الأحيان عن خطأ في البرنامج. تم إرسال طلب إلى البرنامج لتخزين الملفات التي كان يتعامل معها. +Comment[az]=Proqramdakı bir xəta səbəbi ilə, proqramlar çox vaxt SIGILL siqnalı alırlar. Bu haldakı proqramlardan sənədlərini qeyd etməsi istənir. +Comment[be]=Хутчэй за ўсё, праграма атрымала сігнал SIGILL з-за памылкі самой праграмы. Праграму папрасілі захаваць усе дакументы. +Comment[bg]=Програмите обикновено получават сигнала SIGILL поради грешка в самата програма. При този сигнал програмите имат възможност да запишат всички отворени документи и да завършат работата си по нормален начин. +Comment[bn]=কোনো অ্যাপলিকেশন SIGILL সিগনালটি সাধারণত তখনই পায় যদি তাতে কোনো বাগ থাকে। অ্যাপলিকেশনটিকে তার সমস্ত নথী সংরক্ষণ করতে অনুরোধ করা হয়েছে। +Comment[br]=Un arload a vez kaset an arhent SIGILL dezhañ abalamour d'un draen peurvuiañ. Goulennet eo bet d'an arload enrollañ e zeulioù. +Comment[bs]=Aplikacija najčešće dobija SIGILL signal zbog buga u aplikaciji. Od aplikacije je zatraženo da spasi svoje dokumente. +Comment[ca]=Quan una aplicació rep la senyal SIGILL la majoria de les vegades es deu a un error a l'aplicació. L'aplicació us demana que deseu els seus documents. +Comment[cs]=Aplikace dostávají signál SIGILL převážně z důvodu chyby v aplikaci. Aplikace byla požádána o uložení svých dokumentů. +Comment[csb]=Programa dostôwô zwëczajno sygnal SIGILL przë felë w sami programie. Programa miała mòżnotã zapisaniô dokôzów. +Comment[cy]=Derbyna cymhwysiad yr arwydd SIGILL gan amlaf o achos nam yn y cymhwysiad. Gofynnwyd i'r cymhwysiad gadw ei ddogfennau. +Comment[da]=Et program modtager som regel SIGILL-signalet når der er en fejl i programmet. Programmet blev bedt om at gemme sine dokumenter. +Comment[de]=Ein Programm erhält das Signal SIGILL zumeist wegen eines Programmierfehlers. Die Anwendung wurde angewiesen, die Dokumente zu speichern. +Comment[el]=Μια εφαρμογή συνήθως λαμβάνει το σήμα SIGILL λόγω εσωτερικού της σφάλματος. Ζητήθηκε από την εφαρμογή να αποθηκεύσει τα έγγραφά της. +Comment[eo]=Aplikaĵo normale ricevas la signalon SIGILL pro eraro en ĝi. La aplikaĵo provu sekurigi siajn dokumentojn. +Comment[es]=Generalmente una aplicación recibe la señal SIGILL debido a un fallo en la aplicación. Se ha pedido a la aplicación que guarde sus documentos. +Comment[et]=Tavaliselt saab rakendus SIGILL signaali rakenduses endas tekkinud vea tõttu. Rakendusel paluti avatud dokumendid salvestada. +Comment[eu]=Normalean, aplikazio batek bere baitan errore bat duelako jasotzen du SIGILL seinalea. Aplikazioari dokumentuak gordetzeko eskatu zaio. +Comment[fa]=یک کاربرد، اکثراً نشانک SIGILL را به علت اشکال در کاربرد دریافت می‌کند. از کاربرد در مورد ذخیرۀ مستنداتش سؤال شده بود. +Comment[fi]=Sovellus saa SIGILL-signaalin yleensä sovelluksen virheen takia. Sovellusta pyydettiin tallentamaan asiakirjat. +Comment[fr]=Une application reçoit généralement le signal SIGILL à cause d'un bogue interne. Le programme a reçu une demande d'enregistrement de ses documents. +Comment[fy]=In programma ûntfangt meastal it SIGILL-sinjaal fanwege in flater yn it programma. It programma is frege om syn dokuminten te bewarjen. +Comment[ga]=Go hiondúil, faigheann feidhmchlár comhartha SIGILL de bhrí go bhfuil fabht ann. Fiafraíodh den fheidhmchlár a chuid cáipéisí a shábháil. +Comment[gl]=Unha aplicación recebe o sinal SIGILL seguramente por mor dun erro interno. Pediu-se-lle á aplicación que guarde os documentos. +Comment[he]=בדרך כלל מקבל יישום את האיתות SIGILL עקב באג ביישום. היישום התבקש לשמור את המסמכים שלו. +Comment[hi]=एक अनुप्रयोग प्रायः उस अनुप्रयोग में बग होने पर SIGILL संकेत प्राप्त करता है. अनुप्रयोग को इसका दस्तावेज़ सहेजने के लिए कहा गया है. +Comment[hr]=Aplikacija najčešće prima SIGILL signal zbog nedostatka unutar aplikacije. Od aplikacije je zatraženo da spremi svoje dokumente. +Comment[hu]=Ha egy alkalmazás SIGILL szignált kap, az többnyire akkor fordul elő, ha hibás az alkalmazás. Az alkalmazás megpróbálja elmenteni az adatokat. +Comment[id]=Aplikasi biasanya menerima sinyal SIGILL karena ada bug di aplikasi. Aplikasi akan menanyakan untuk menyimpan dokumennya +Comment[is]=Forrit fær yfirleitt SIGILL boðið út af villu forritarans. Forritið hefur fengið beiðni um að vista allar breytingar gagna. +Comment[it]=Un'applicazione di solito riceve un segnale SIGILL a causa di un bug nell'applicazione. All'applicazione è stato chiesto di salvare i documenti. +Comment[ja]=アプリケーションは内部のバグにより SIGILL シグナルを受け取ります。アプリケーションは文書を保存するよう求められました。 +Comment[ka]=პროგრამა იღებს SIGILL სიგნალს პროგრამაში არსებული შეცდომის გამო. ყველა დოკუმენტი შენახული იქნება +Comment[kk]=Қолданба көбінде SIGILL сигналын қатесі пайда болғанда алады. Қолданба құжаттарын сақтауға сұралды. +Comment[km]=កម្មវិធី​មួយ​ច្រើន​តែ​ទទួល​សញ្ញា SIGILL ដោយ​សារ​តែ​កំហុស​មួយ​ក្នុង​កម្មវិធី ។ កម្មវិធី​ជា​ទូទៅ​ត្រូវ​បាន​សួរ​ថា រក្សា​ទុក​ឯកសារ​របស់​វា​ឬ​ទេ ។ +Comment[ko]=프로그램의 버그로 인해서 SIGILL 신호를 받을 수도 있습니다. 프로그램에서 문서를 저장하도록 요청했습니다. +Comment[lo]=ອັບພລິກເຄເຊິນໄດ້ຮັບສັນຍານ SIGILL ໍຊຶ່ງອາດເປັນຂໍ້ຜິດພາດໃນອັບພລິກເຄເຊິນ +Comment[lt]=Programa gauna SIGILL signalą paprastai dėl ydos programoje. Programa buvo paprašyta išsaugoti savo dokumentus. +Comment[lv]=Aplikācija visbiežāk saņem SIGILL signālu sakarā ar kļūdu aplikācijā. Aplikācijai piedāvāja saglabāt tās dokumentus. +Comment[mk]=Апликациите најчесто го добиваат сигналот SIGILL поради бубачка. На апликацијата ѝ беше речено да ги сними сите свои документи. +Comment[mn]=Програм SIGILL сигнал хүлээж авч байна. Энэ нь ихэвчилэн программчилалын алдаа байдаг. Програм баримт хадгалах эсэхийг асууж байна. +Comment[ms]=Kebanyakan aplikasi menerima isyarat SIGILL disebabkan ralat di dalam aplikasi. Aplikasi hendaklah disimpan untuk mengelakkan perkara tidak diingini. +Comment[mt]=Programm normalment jirċievi s-sinjal SIGILL minħabba bug fil-programm. Dan il-programm intalab biex jikteb id-dokumenti tiegħu. +Comment[nb]=Et program mottar som oftest SIGILL-signalet på grunn av en feil i programmet. Programmet ble bedt om å lagre dokumentene. +Comment[nds]=En Programm kriggt dat SIGILL-Signaal tomehrst, wenn dor en Fehler binnen is. Dat Programm wöör anwiest, sien Dokmenten to sekern. +Comment[ne]= अनुप्रयोगमा बगका कारणले एक अनुप्रयोगले SIGILL सङ्केत प्राप्त गर्छ । अनुप्रयोगले यसका कागजात बचत गर्न सोधेको थियो । +Comment[nl]=Een programma ontvangt meestal het SIGILL-signaal vanwege een fout in het programma. Het programma werd gevraagd om zijn documenten op te slaan. +Comment[nn]=Eit program får oftast signalet SIGILL som følgje av ein feil i programmet. Programmet vart spurd om å lagra dokumenta sine. +Comment[nso]=Tshomiso gantshi e amogela tshwaetso ya SIGILL ka lebaka la bug ka tshumisong. Tshomiso e kgopetswe go boloka ditokomane tsa yona. +Comment[oc]=Ua aplicacion recep lo sinhal SIGILL deut la major part deus cops a un error de l'aplicacion. E li demana que salva los seus documents. +Comment[pa]=ਇੱਕ ਕਾਰਜ, ਜੋ ਕਿ SIGILL ਸੰਕੇਤ ਪ੍ਰਾਪਤ ਕਰੇ ਤਾਂ ਇਹ ਕਾਰਜ ਵਿੱਚ ਬੱਗ ਕਰਕੇ ਹੈ। ਇਹ ਕਾਰਜ ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕਹਿੰਦਾ ਹੈ। +Comment[pl]=Program zwykle otrzymuje sygnał SIGILL z powodu błędu w samym programie. Program miał możliwość zapisania dokumentów. +Comment[pt]=Uma aplicação normalmente recebe o sinal SIGILL devido a um erro interno. Foi pedido à aplicação que gravasse os seus documentos. +Comment[pt_BR]=Um aplicativo costuma receber o sinal SIGILL quando possui um erro. O aplicativo foi instruído a salvar seus documentos. +Comment[ro]=În general o aplicație primește semnalul SIGILL datorită unei erori interne. Aplicației i s-a cerut să își salveze documentele. +Comment[ru]=Приложение получает сигнал SIGILL чаще всего из-за ошибки в программе. Данные приложения будут сохранены. +Comment[rw]=Porogaramu irakira cyane ikimenyetso SIGILL bitewe n'ikosa muri porogaramu. Porogaramu yasabwe kubika inyandiko zayo. +Comment[se]=Prográmma dábálaččat oažžu SIGILL signála danne go gávdnu dihkki prográmmas. Prográmma gohččoduvvui vurket dokumeanttaset.. +Comment[sk]=Aplikácia väčšinou dostane SIGILL signál kvôli chybe v aplikácii. Tento signál žiada tiež aplikáciu, aby si uložila svoje dokumenty. +Comment[sl]=Program največkrat prejme signal SIGILL zaradi hrošča. Od programa je bilo zahtevano, da shrani svoje dokumente. +Comment[sr]=Програм углавном прима SIGILL сигнал услед грешке у њему. Од програма се захтевало да сними све документе. +Comment[sr@Latn]=Program uglavnom prima SIGILL signal usled greške u njemu. Od programa se zahtevalo da snimi sve dokumente. +Comment[ss]=Sicelo semukela kakhulu kukhomba kweSIGILL ngenca ye bug esicelweni. Sicelo besiceliwe kutsi sigcine emadokhumente aso. +Comment[sv]=Signalen SIGILL orsakas oftast av ett fel i programmet. Programmet blev tillsagt att spara sina dokument. +Comment[ta]=நிரலிலுள்ள தவறொன்று காரணமாகவே அது பெரும்பாலும் SIGILL சைகையைப் பெறும். நிரலுக்குத் தன் ஆவணங்களை சேமிக்குமாறு கூறப்பட்டது. +Comment[tg]= Барномаи маъмулан ҳангоми сигнали SIGILL-ро сарёфт мекунад ки хато дар барнома вуҷуд дошта бошад. Аз барномаи хоста шуд, ки ин ҳуҷҷатро захира кунад. +Comment[th]=แอพพลิเคชันได้รับสัญญาณ SIGILL ซึ่งอาจเป็นข้อผิดพลาดในแอพพลิเคชัน แอพพลิเคชั่นได้รับการร้องขอให้บันทึกเอกสารของของมัน +Comment[tr]=Uygulamadaki bir hata nedeniyle, uygulamalar çok kez SIGILL sinyali alırlar. Bu durumdaki uygulamalardan belgelerini kaydetmesi istenir. +Comment[tt]=SIGILL-ımlaw törle yazılımnarda xata bulu arqasında yış çığa. Bu yazılım istälekläre saqlanğan bulır. +Comment[uk]=Програма здебільшого отримує сигнал SIGILL завдяки помилці у програмі. Програмі було запропоновано зберегти документи. +Comment[uz]=Odatda, SIGILL signaliga dasturdagi xato sababchi boʻladi. Dasturdan maʼlumotlarni saqlash talab qilindi. +Comment[uz@cyrillic]=Одатда, SIGILL сигналига дастурдаги хато сабабчи бўлади. Дастурдан маълумотларни сақлаш талаб қилинди. +Comment[ven]=Apulikhesheni dzi anzela u wana luswayo lwa SIGILL nga mulandu wa baga kha apulikhesheni. Apulikhesheni i a vhudziswa u vhulunga manwalwa ayo. +Comment[vi]=Một chương trình thường nhận các tín hiệu SIGILL vì có lỗi trong nó. Chương trình này đã được yêu cầu lưu tài liệu. +Comment[wa]=On programe riçût sortot l' signå SIGILL a cåze d' on bug dins l' programe. Dj' a dmandé å programe di schaper ses documints. +Comment[xh]=Isicelo esifumana i SIGILL uphawu enxa yegciwane kwi sicelo. Isicelo sicelwe ukuba sigcine amaxwebhu aso. +Comment[zh_CN]=多数情况下,一个程序由于本身的错误会收到 SIGILL 信号。程序被要求保存它的文档。 +Comment[zh_TW]=多數情況下,一個程式由於本身的錯誤會收到 SIGILL 信號。程式會被要求保存它的文件。 +Comment[zu]=Umyaleli uthola kakhulu uphawu lwe-SIGILL ngenxa yegciwane elikumyaleli. Umyaleli ucelwe ukuba agcine ushicilelo lwakhe. + +[6] +Name=SIGABRT +Comment=An application terminates with a SIGABRT signal when it detects an internal inconsistency caused by a bug in the program. +Comment[af]='n aansoek termineer met 'n Sigabrt sein wanneer dit bespeur 'n intern onkonsekwentheid veroorsaak deur 'n fout in die program. +Comment[ar]=عندما يكتشف برنامج ما تناقض داخلي بسبب خطأ فيه، فإنه ينهي عمله مع إرسال إشارة SIGABRT. +Comment[az]=Bir proqram, programdaki bir xəta yüzünden bir iç tutarsızlık tespit ettiğinde SIGABRT sinyaliyle sona erer. +Comment[be]=Праграма заканчвае працу з сігналам SIGABRT, калі яна знаходзіць унутраную праблему, якая з'явілася з-за памылкі самой праграмы. +Comment[bg]=Програмите завършват изпълнението си със сигнал SIGABRT, когато възникне сериозна и неочаквана грешка в тях или се случи нещо непредвидено. +Comment[bn]=কোনো অ্যাপলিকেশন SIGABRT সিগনালটি সমেত বন্ধ হয় যখন অ্যাপলিকেশনটিতে কোনো বাগ-এর ফলে সেটি একটি অভ্যন্তরীণ অসামঞ্জস্যের মুখোমুখি হয়। +Comment[br]=Echuiñ a ra un arload gant un arhent SIGABRT p'en deus dinoet un diglokusted diabarzh abalamour d'un draen er goulev. +Comment[bs]=Aplikacija se prekida signalom SIGABRT kada se ustanovi interna nekonzistentnost koju izaziva bug u programu. +Comment[ca]=Una aplicació ha finalitzat amb una senyal SIGABRT, la qual detecta una inconsistència interna causada per un error al programa. +Comment[cs]=Aplikace je ukončena se signálem SIGABRT, když zjistí vnitřní nekonzistenci způsobenou chybou v programu. +Comment[csb]=Programa òstôwô zakùńczonô sygnalã SIGABRT, czéj òstónié wëkrëtô bënowô niejasnota sparłączonô z felą w programie. +Comment[cy]=Terfyna cymhwysiad â'r arwydd SIGABRT pan ganfydda anghysondeb mewnol a achoswyd gan nam yn y rhaglen. +Comment[da]=Et program afbryder med et SIGABRT-signal når det finder en intern inkonsistens forårsaget af en fejl i programmet. +Comment[de]=Ein Programm bricht ab mit dem Signal SIGABRT, sobald es eine interne Unstimmigkeit entdeckt, die durch einen Programmierfehler entstanden ist. +Comment[el]=Μια εφαρμογή τερματίζει με το σήμα SIGABRT όταν ανιχνεύει μια εσωτερική ασυνέπεια που προκαλείται από ένα σφάλμα στο πρόγραμμα. +Comment[eo]=Aplikaĵo finiĝas per la signalo SIGABRT, kiam ĝi konstatas internan konfuzaĵon kaŭzitan de programeraro. +Comment[es]=Una aplicación finaliza con la señal SIGABRT cuando detecta una inconsistencia interna debida a un fallo en el programa. +Comment[et]=Rakendus katkestab töö signaaliga SIGABRT siis, kui avastab sisemise ebakõla, mis on põhjustatud veast rakenduses. +Comment[eu]=Aplikazio bat SIGBABRT seinaleaz bukatzen da programazio akats batek eragin duen barneko inkonsistentzia bat aurkitzen duenean. +Comment[fa]=هنگامی که کاربرد ناسازگاری درونی را که به علت اشکال در برنامه به وجود آمده، آشکار می‌کند، با نشانک SIGABRT پایان می‌پذیرد. +Comment[fi]=Sovellus lopettaa SIGABRT-signaalilla, kun se huomaa sisäisen vian, joka on johtunut ohjelmistovirheestä. +Comment[fr]=Une application se termine généralement par le signal SIGABRT quand elle détecte une incohérence interne causée par un bogue du programme. +Comment[fy]=In programma einicht mei in SIGABRT-sinjaal as it in ynterne ynkonsistinsje ûntdekt, feroarsake troch in flater yn it programma. +Comment[gl]=Unha aplicación remata cun sinal SIGABRT cando detecta unha inconsisténcia interna causada por un erro no programa. +Comment[he]=יישום מסתיים עם האיתות SIGABRT כאשר הוא מזהה אי־תאימות פנימית שנגרמה עקב באג בתוכנית. +Comment[hi]=एक अनुप्रयोग एक SIGABRT संकेत के साथ तब बन्द होता है जब यह प्रोग्राम के बग के कारण उत्पन्न आंतरिक असंगति का पता लगाता है. +Comment[hr]=Aplikacija prekida s radom uz SIGABRT signal kad otkrije internu nedosljednost prouzrokovanu nedostatkom unutar aplikacije. +Comment[hu]=Egy alkalmazás akkor áll le SIGABRT szignállal, ha belső inkonzisztenciát észlel, melyet a program valamilyen hibája okozott. +Comment[id]=Aplikasi dimatikan dengan sinyal SIGABRT jika mendeteksi inkonsistensi internal yang disebabkan bug dalam program. +Comment[is]=Forrit hættir vegna SIGABRT boðs, þegar villa veldur ósamræmi gagna vegna galla í forritinu. +Comment[it]=Un'applicazione termina con il segnale SIGABRT quando riscontra un'inconsistenza interna causata da un bug nel programma. +Comment[ja]=アプリケーションはプログラムのバグにより起こる内部不整合が探知されたとき、SIGABRT シグナルとともに落ちます。 +Comment[ka]=პროგრამა შეწყდა SIGABRT სიგნალით, როდესაც მან შეამჩნია შიდა არამდგრადობა რომელიც პროგრამის ბზიკმა გამოიწვია. +Comment[kk]=Бағдарлама ішкі қатесі пайда болғанда SIGABRT сигналымен аяқталады. +Comment[km]=កម្មវិធី​មួយនឹងបញ្ចប់​ដំណើរការ​ដោយ​សញ្ញា SIGABRT ពេល​វា​រកឃើញ​ភាព​មិនត្រឹមត្រូវខាង​ក្នុង​មួយ ដែល​បណ្ដាល​មក​ពី​កំហុស​មួយ​ក្នុង​កម្មវិធី ។ +Comment[ko]=프로그램의 버그로 인해서 내부적인 충돌이 생겨서 SIGABRT 신호와 함께 프로그램이 종료될 수 있습니다. +Comment[lo]=ອັບພລິກເຄເຊິນຢຸດທຳງານດ້ວຍ SIGABRT ເມື່ອກວດພົບຄວາມຄັດແຍ້ງພາຍໃນເນື່ອງຈາກບັກໃນໂປຣແກຣມ +Comment[lt]=Programa baigia darbą dėl SIGABRT signalo kai ji pastebi vidinį prieštaravimą dėl ydos programoje. +Comment[lv]=Aplikācija tiek pārtraukta ar SIGABRT signālu, kad tā detektē iekšējas nekonsistences ko izsaukušas kļūdas programmā. +Comment[mk]=Апликациите прекинуваат со сигнал SIGABRT кога ќе откријат внатрешни недоследности предизвикани од бубачка во програмата. +Comment[mn]=Програмд программчилалын алдааны улмаас ирдэг дотоод чимээ өгч SIGABRT сигналаар тасарлаа. +Comment[ms]=Aplikasi dimatikan dengan isyarat SIGABRT apabila ia mengesan sesuatu yang tidak konsisten secara dalam yang disebabkan oleh pepijat dalam program. +Comment[mt]=Programm jieqaf bis-sinjal SIGABRT meta jiltaqa' ma' inkonsistenza interna kkawżata minn bug fil-programm. +Comment[nb]=Et program avslutter med signalet SIGABRT når det oppdager en intern inkonsistens på grunn av en feil i programmet. +Comment[nds]=En Programm beendt sik mit dat SIGABRT-Signaal, wenn dat binnen sik sülven wat findt, wat nich tosamenpasst. De Grund is tomehrst en Fehler. +Comment[ne]=कार्यक्रममा बगका कारणले आन्तरिक असुसङ्गता पत्ता लगाउने बेलामा SIGABRT सङ्केतसँग अनुप्रयोग अन्त्य गर्छ । +Comment[nl]=Een programma eindigt met een SIGABRT-signaal wanneer het een interne inconsistentie detecteert, veroorzaakt door een fout in het programma. +Comment[nn]=Eit program avsluttar med signalet SIGABRT når det oppdagar ein intern inkonsistens grunna ein feil i programmet. +Comment[nso]=Tshumiso e fetsa ka tshwaelo ya SIGABRT ge e utulla phapano ya kagare yeo e hlotswego ke bug ka lenaneong. +Comment[pa]=ਇੱਕ ਕਾਰਜ, ਜੋ ਕਿ SIGABRT ਸੰਕੇਤ ਨਾਲ ਬੰਦ ਹੁੰਦਾ ਹੈ, ਇਹ ਕਾਰਜ ਵਿਚਲੀ ਅੰਦਰੂਨੀ ਨਾ-ਅਨੁਕੂਲਤਾ ਕਰਕੇ ਬੱਗ ਦੇ ਰੂਪ ਵਿੱਚ ਆਉਦਾ ਹੈ। +Comment[pl]=Program zostaje zakończony sygnałem SIGABRT, gdy zostaje wykryta wewnętrzna niespójność spowodowana błędem w programie. +Comment[pt]=Uma aplicação termina com um sinal SIGABRT quando detecta uma inconsistência interna causada por um erro no programa. +Comment[pt_BR]=Um aplicativo termina com SIGABRT quando detecta uma inconsistência interna causada por um erro no programa. +Comment[ro]=În general o aplicație se termină cu semnalul SIGABRT cînd detectează o inconsistență internă cauzată de o eroare în program. +Comment[ru]=Приложение завершается сигналом SIGABRT, когда внутри него возникает сбой, вызванный ошибкой в программе. +Comment[rw]=Porogaramu irangiye ifite ikimenyetso SIGABRT igihe ibonye ukutajyanirana imbere gutewe n'ikosa muri porogaramu. +Comment[se]=Prográmma geargá SIGABRT signálain go dat fuobmá siskkildas "inkonsistens" man sivva lea dihkki prográmmas. +Comment[sk]=Aplikácia bola ukončená SIGABRT signálom, keď program detekoval internú nezhodu spôsobenú chybou v programe. +Comment[sl]=Program se prekine s signalom SIGABRT, ko zazna notranjo nekonsistentnost zaradi hrošča v programu. +Comment[sr]=Програм се обуставља са SIGABRT сигналом када примети унутрашњу неусаглашеност проузроковану грешком у програму. +Comment[sr@Latn]=Program se obustavlja sa SIGABRT signalom kada primeti unutrašnju neusaglašenost prouzrokovanu greškom u programu. +Comment[ss]=Sicelo sipheliswa ngekukhomba kwe SIGABRT nangabe kusesha kugucugucuka ngekhatsi lokubangelwa yi-bug leseluhlelweni. +Comment[sv]=Ett program avslutar sig självt med signalen SIGABRT när det upptäcker en intern motsägelse, vilket orsakas av ett fel i programmet. +Comment[ta]=நிரலிலுள்ள தவறால் ஏற்பட்ட உள்ளமைந்த முரண்பாடொன்று கண்டறியப்படின், அந்நிரல் SIGABRT சைகையுடன் முறியும். +Comment[tg]= Як барномаи ҳангоме бо сигнали SIGABRT қатъ мешавад, ки дар исри ишқоли дарунӣ бо ҳолати хатогӣ дар барнома шуд. +Comment[th]=แอพพลิเคชันหยุดทำงานด้วยสัญญาณ SIGABRT เมื่อตรวจพบความขัดแย้งภายใน เนื่องจากบักในโปรแกรม +Comment[tr]=Bir uygulama, programdaki bir hata yüzünden bir iç tutarsızlık tespit ettiğinde SIGABRT sinyaliyle sona erer. +Comment[tt]=SIGABRT-ımlaw törle yazılımnarda xata bulu arqasında yış çığa. Bu yazılım istälekläre saqlanğan bulır. +Comment[uk]=Програма завершується з сигналом SIGABRT, коли знайдена внутрішня несумісність, викликана помилкою у програмі. +Comment[uz]=Dasturning ishi SIGABRT signali bilan tugashiga uning ichki ketma-ketligini ishdan chiqargan xato sababchi boʻladi. +Comment[uz@cyrillic]=Дастурнинг иши SIGABRT сигнали билан тугашига унинг ички кетма-кетлигини ишдан чиқарган хато сабабчи бўлади. +Comment[ven]==Apulikhesheni i fhela nga luswayo lwa SIGABRT musi i tshi sedzulusa mifhirifhiri ya nga mgomu yo vhangwaho nga baga kha mbekanyamushumo. +Comment[vi]=Một chương trình bị dừng bởi một tín hiệu SIGABRT khi nó tìm ra một mâu thuẫn nội bộ gây ra bởi lỗi nào đó. +Comment[wa]=On programe a fini avou on signå SIGABRT cwand il a trové ene divintrinne inconsistance a cåze d' on bug dins l' programe. +Comment[xh]=Isicelo sicinywa ngophawu lwe SIGABRT xa sibona ukungahambisalani kwangaphakathi okwenziwa ligciwane kwinkqubo. +Comment[zh_CN]=程序在检测到缺陷引起的内部不一致时,以 SIGABRT 信号中止。 +Comment[zh_TW]=程式偵測發生到內部錯誤時,以 SIGABRT 信號中止。 +Comment[zu]=Umyaleli wekhompyutha unqamuka ngophawu lwe-SIGABRT uma ecosha ukungahambisani kwangaphakathi okubangwe igciwane elisohlelweni lwemisebenzi. + +[8] +Name=SIGFPE +Comment=An application mostly receives the SIGFPE signal due to a bug in the application. The application was asked to save its documents. +Comment[af]='n aansoek meestal ontvang die Sigfpe sein as gevolg na 'n fout in die aansoek. die aansoek was gevra na stoor sy dokumente. +Comment[ar]=إن استقبال برنامج ما لإشارة SIGFPE ينتج في معظم الأحيان من خطأ في التطبيق. تم إرسال طلب إلى البرنامج لتخزين الملفات التي كان يتعامل معها. +Comment[az]=Proqramdakı bir xəta səbəbi ilə, proqramlar çox vaxt SIGFPE siqnalı alırlar. Bu haldakı proqramlardan sənədlərini qeyd etməsi istənir. +Comment[be]=Хутчэй за ўсё, праграма атрымала сігнал SIGFPE з-за памылкі самой праграмы. Праграму папрасілі захаваць усе дакументы. +Comment[bg]=Програмите обикновено получават сигнала SIGFPE поради грешка в самата програма. При този сигнал програмите имат възможност да запишат всички отворени документи и да завършат работата си по нормален начин. +Comment[bn]=কোনো অ্যাপলিকেশন SIGFPE সিগনালটি সাধারণত তখনই পায় যদি তাতে কোনো বাগ থাকে। অ্যাপলিকেশনটিকে তার সমস্ত নথী সংরক্ষণ করতে অনুরোধ করা হয়েছে। +Comment[br]=Resev a ra un arload an arhent SIGFPE abalamour d'un draen en arload, peurliesañ. Goulennet e voe d'an arload enrollañ e deulioù. +Comment[bs]=Aplikacija najčešće dobija SIGFPE signal zbog buga u aplikaciji. Od aplikacije je zatraženo da spasi svoje dokumente. +Comment[ca]=Quan una aplicació rep la senyal SIGFPE la majoria de les vegades es deu a un error a l'aplicació. L'aplicació us demana que deseu els seus documents. +Comment[cs]=Aplikace dostávají signál SIGFPE převážně z důvodu chyby v aplikaci. Aplikace byla požádána o uložení svých dokumentů. +Comment[csb]=Programa dostôwô zwëczajno sygnal SIGFPE przë felë w ni sami. Programa miała mòżnotã zapisaniô dokôzów. +Comment[cy]=Derbyna cymhwysiad yr arwydd SIGFPE gan amlaf o achos nam yn y cymhwysiad. Gofynnwyd i'r cymhwysiad gadw ei ddogfennau. +Comment[da]=Et program modtager som regel SIGFPE-signalet når der er en fejl i programmet. Programmet blev bedt om at gemme sine dokumenter. +Comment[de]=Ein Programm erhält das Signal SIGFPE zumeist wegen eines Programmierfehlers. Die Anwendung wurde angewiesen, die Dokumente zu speichern. +Comment[el]=Συνήθως μια εφαρμογή λαμβάνει το σήμα SIGFPE λόγω ενός σφάλματος σε αυτή. Ζητήθηκε από την εφαρμογή να σώσει τα έγγραφά της. +Comment[eo]=Aplikaĵo normale ricevas la signalon SIGFPE pro eraro en ĝi. La aplikaĵo provu sekurigi siajn dokumentojn. +Comment[es]=Generalmente una aplicación recibe la señal SIGFPE debido a un fallo en la aplicación. Se ha pedido a la aplicación que guarde sus documentos. +Comment[et]=Tavaliselt saab rakendus SIGFPE signaali rakenduses endas tekkinud vea tõttu. Rakendusel paluti avatud dokumendid salvestada. +Comment[eu]=Normalean aplikazio batek SIGFPE seinalea jasotzen du bere baitan errore bat dagoleko. Aplikazioari dokumentuak gordetzea eskatu zaio. +Comment[fa]=یک کاربرد، اکثراً نشانک SIGFPE را به علت اشکال در کاربرد دریافت می‌کند. از کاربرد برای ذخیرۀ مستنداتش سؤال می‌شود. +Comment[fi]=Sovellus saa SIGFPE-signaalin yleensä ohjelmistovian takia. Sovellusta pyydettiin tallentamaan asiakirjat. +Comment[fr]=Une application reçoit généralement le signal SIGFPE à cause d'un bogue interne. Le programme a reçu une demande d'enregistrement de ses documents. +Comment[fy]=In programma ûntfangt meastal in SIGFPE-sinjaal fanwege in flater yn it programma. It programma is frege om syn dokuminten te bewarjen. +Comment[ga]=Go hiondúil, faigheann feidhmchlár comhartha SIGFPE de bhrí go bhfuil fabht ann. Fiafraíodh den fheidhmchlár a chuid cáipéisí a shábháil. +Comment[gl]=Unha aplicación recebe un sinal SIGFPE seguramente por mor dun erro interno. Pediu-se-lle á aplicación que guarde os documentos. +Comment[he]=בדרך כלל מקבל יישום את האיתות SIGFPE עקב באג ביישום. היישום התבקש לשמור את המסמכים שלו. +Comment[hi]=एक अनुप्रयोग प्रायः उस अनुप्रयोग में बग होने पर SIGFPE संकेत प्राप्त करता है. अनुप्रयोग को इसका दस्तावेज़ सहेजने के लिए कहा गया है. +Comment[hr]=Aplikacija najčešće prima SIGFPE signal zbog nedostatka unutar aplikacije. Od aplikacije je zatraženo da spremi svoje dokumente. +Comment[hu]=Ha egy alkalmazás SIGFPE szignált kap, az többnyire akkor fordul elő, ha hibás az alkalmazás. Az alkalmazás megpróbálja elmenteni az adatokat. +Comment[id]=Aplikasi biasanya menerima sinyal SIGFPE karena ada bug dalam aplikasi. Aplikasi akan menanyakan untuk menyimpan dokumennya +Comment[is]=Forrit fær yfirleitt SIGFPE boðið út af villu forritarans. Forritið hefur fengið skipun um að vista allar breytingar gagna. +Comment[it]=Un'applicazione di solito riceve un segnale SIGFPE a causa di un bug nell'applicazione. All'applicazione è stato chiesto di salvare i documenti. +Comment[ja]=アプリケーションは内部のバグにより SIGFPE シグナルを受け取ります。アプリケーションは文書を保存するよう求められました。 +Comment[ka]=პროგრამა იღებს SIGFPE სიგნალს პროგრამაში არსებული შეცდომის გამო. ყველა დოკუმენტი შენახული იქნება +Comment[kk]=Қолданба көбінде SIGFPE сигналын қатесі пайда болғанда алады. Қолданба құжаттарын сақтауға сұралды. +Comment[km]=កម្មវិធី​មួយ​ច្រើន​តែ​ទទួល​សញ្ញា SIGFPE ដោយ​សារ​តែ​កំហុស​មួយ​ក្នុង​កម្មវិធី ។ កម្មវិធី​ជា​ទូទៅ​ត្រូវ​បាន​សួរ​ថា រក្សា​ទុក​ឯកសារ​របស់​វា​ឬ​ទេ ។ +Comment[ko]=프로그램의 버그로 인해서 SIGFPE 신호를 받을 수도 있습니다. 프로그램에서 문서를 저장하도록 요청했습니다. +Comment[lo]=ອັບພລິກເຄເຊິນໄດ້ຮັບສັນຍານ SIGFPE ຈາກບັກພາຍໃນໂປຣແກຣມແລະອັບພລິກເຄເຊິນໄດ້ຖາມເພື່ອທຳການບັນທຶກເອກະສານຂອງມັນ +Comment[lt]=Programa dažniausiai gauna SIGFPE signalą dėl ydos programoje. Programa buvo paprašyta išsaugoti savo dokumentus. +Comment[lv]=Aplikācija visbiežāk saņem SIGFPE signālu sakarā ar kļūdu aplikācijā. Aplikācijai piedāvāja saglabāt tās dokumentus. +Comment[mk]=Апликациите најчесто го добиваат сигналот SIGFPE поради грешка во апликацијата. На апликацијата ѝ беше речено да ги сними сите свои документи. +Comment[mn]=Програм SIGFPE сигнал хүлээж авч байна. Энэ нь ихэвчилэн программчилалын алдаа байдаг. Програм баримт хадгалах эсэхийг асууж байна. +Comment[ms]=Aplikasi biasanya menerima isyarat SIGFPE kerana pepijat dalam aplikasi. Aplikasi telah diminta untuk menyimpan dokumennya. +Comment[mt]=Programm ġeneralment jirċievi s-sinjal SIGFPE minħabba bug fil-programm. Il-programm intalab jikteb id-dokumenti tiegħu. +Comment[nb]=Et program mottar som oftest SIGFFE-signalet på grunn av en feil i programmet. Programmet ble bedt om å lagre dokumentene. +Comment[nds]=En Programm kriggt dat SIGFPE-Signaal tomehrst, wenn dat en Fehler dor binnen gifft. Dat Programm wöör anwiest, sien Dokmenten to sekern. +Comment[ne]= अनुप्रयोगमा बगका कारणले एक अनुप्रयोगले SIGFPE सङ्केत प्राप्त गर्छ । अनुप्रयोगले यसका कागजात बचत गर्न सोधेको थियो । +Comment[nl]=Een programma ontvangt meestal een SIGFPE-signaal vanwege een fout in het programma. Het programma werd gevraagd om zijn documenten op te slaan. +Comment[nn]=Eit program får oftast signalet SIGFPE som følgje av ein feil i programmet. Programmet vart spurd om å lagra dokumenta sine. +Comment[nso]=Tshomiso gantshi e amogela tshwaelo ya SIGFPE ka lebaka la bug katshumisong. Tshumiso e kgopetswe go boloka ditokomane tsa yona. +Comment[oc]=Ua aplicacion recep lo sinhal SIGFPE dèut la major part dèus cops a un error de l'aplicacion. E li demana que salva los sens documents. +Comment[pa]=ਇੱਕ ਕਾਰਜ, ਜੋ ਕਿ SIGFPE ਸੰਕੇਤ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਵਿੱਚ ਬੱਗ ਹੈ।ਇਹ ਕਾਰਜ ਇਸਦੇ ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕਹਿੰਦਾ ਹੈ। +Comment[pl]=Program otrzymuje zwykle sygnał SIGFPE z powodu błędu w nim samym. Program miał możliwość zapisania dokumentów. +Comment[pt]=Uma aplicação normalmente recebe o sinal SIGFPE devido a um erro interno. Foi pedido à aplicação que gravasse os seus documentos. +Comment[pt_BR]=Um aplicativo costuma receber um sinal SIGFPE quando tem erros. O aplicativo foi instruído a salvar seus documentos. +Comment[ro]=În general o aplicație primește semnalul SIGFPE datorită unei erori interne. Aplicației i s-a cerut să își salveze documentele. +Comment[ru]=Приложение получает сигнал SIGFPE чаще всего из-за ошибки в программе. Данные приложения будут сохранены. +Comment[rw]=Porogaramu irakira cyane ikimenyetso SIGFPE bitewe n'ikosa muri porogaramu. Porogaramu yasabwe kubika inyandiko zayo. +Comment[se]=Prográmma dábálaččat oažžu SIGFPE signála dan dihte go lea dihkki prográmmas. Prográmma gohčoduvvui vurket dokumeanttaset. +Comment[sk]=Aplikácia väčšinou dostane SIGFPE signál kvôli chybe v aplikácii. Tento signál žiada tiež aplikáciu, aby si uložila svoje dokumenty. +Comment[sl]=Program največkrat prejme signal SIGFPE zaradi hrošča. Od programa je bilo zahtevano, da shrani svoje dokumente. +Comment[sr]=Програм углавном прима SIGFPE сигнал услед грешке у њему. Од програма се захтевало да сними све документе. +Comment[sr@Latn]=Program uglavnom prima SIGFPE signal usled greške u njemu. Od programa se zahtevalo da snimi sve dokumente. +Comment[ss]=Sicelo semukela kakhulu kukhomba kwe SIGFPE ngenca ye bug esicelweni. Sicelo besiceliwe kutsi sigcine emadokhumente aso. +Comment[sv]=Signalen SIGFPE orsakas oftast av ett fel i programmet. Programmet blev tillsagt att spara sina dokument. +Comment[ta]=நிரலிலுள்ள தவறொன்று காரணமாகவே அது பெரும்பாலும் SIGFPE சைகையைப் பெறும். நிரலுக்குத் தன் ஆவணங்களைச் சேமிக்கும்படி கூறப்பட்டது. +Comment[tg]= Барнома маъмулан ҳангоми сигнали SIGFPE-ро дарёфт мекунад, ки хатогӣ дар барнома вуҷуд дошта бошад. Аз барнома хоста шуд, ки ин ҳуҷҷатро захира кунад. +Comment[th]=แอพพลิเคชันได้รับสัญญาณ SIGFPE จากบักภายในโปรแกรม และแอพพลิเคชันได้รับการร้องขอเพื่อทำการบันทึกเอกสารของมัน +Comment[tr]=Uygulamadaki bir hata nedeniyle, uygulamalar çok kez SIGEPE sinyali alırlar. Bu durumdaki uygulamalardan belgelerini kaydetmesi istenir. +Comment[tt]=SIGFPE-ımlaw törle yazılımnarda xata bulu arqasında yış çığa. Bu yazılım istälekläre saqlanğan bulır. +Comment[uk]=Програма здебільшого отримує сигнал SIGFPE завдяки помилці у програмі. Програмі було запропоновано зберегти документи. +Comment[uz]=Odatda, SIGFPE signaliga dasturdagi xato sababchi boʻladi. Dasturdan maʼlumotlarni saqlash talab qilindi. +Comment[uz@cyrillic]=Одатда, SIGFPE сигналига дастурдаги хато сабабчи бўлади. Дастурдан маълумотларни сақлаш талаб қилинди. +Comment[ven]=Apulikhesheni i anzela u wana luswayo lwa SIGFPE nga nthani ha baga kha apulifikhesheni. Apulifikhesheni yo vhudziswa u vhulunga manwalwa ayo. +Comment[vi]=Một chương trình thường nhận các tín hiệu SIGFPE vì trong nó có lỗi. Chương trình đã được yêu cầu lưu tài liệu. +Comment[wa]=On programe riçût sortot l' signå SIGFPE a cåze d' on bug dins l' programe. Dj' a dmandé å programe di schaper ses documints. +Comment[xh]=Isicelo sifumana i SIGFPE uphawu ngenxa ye gciwane kwisicelo. Isicelo sicelwe ukuba sigcine amaxwebhu ayo. +Comment[zh_CN]=大多数情况下,接收到 SIGFPE 信号是由于程序的缺陷。程序被要求保存它的文档。 +Comment[zh_TW]=大多數情況下,接收到 SIGFPE 信號是由於程式的錯誤。程式被要求保存它的文件。 +Comment[zu]=Umyaleli wekhompyutha uthola kakhulu uphawu lwe-SIGFPE ngenxa yegciwane elikumyaleli. Umyaleli ucelwe ukuba agcine ushicilelo lwakhe. + +[11] +Name=SIGSEGV +Comment=An application mostly receives the SIGSEGV signal due to a bug in the application. The application was asked to save its documents. +Comment[af]='n aansoek meestal ontvang die Sigsegv sein as gevolg na 'n fout in die aansoek. die aansoek was gevra na stoor sy dokumente. +Comment[ar]=إن استقبال برنامج ما لإشارة SIGSEGV ينتج في معظم الأحيان من خطأ في البرنامج. تم إرسال طلب إلى البرنامج لتخزين الملفات التي كان يتعامل معها. +Comment[az]=Proqramdakı bir xəta səbəbi ilə, proqramlar çox vaxt SIGSEGV siqnalı alırlar. Bu haldakı proqramlardan sənədlərini qeyd etməsi istənir. +Comment[be]=Хутчэй за ўсё, праграма атрымала сігнал SIGSEGV з-за памылкі самой праграмы. Праграму папрасілі захаваць усе дакументы. +Comment[bg]=Програмите обикновено получават сигнала SIGSEGV поради грешка в самата програма. При този сигнал програмите имат възможност да запишат всички отворени документи и да завършат работата си по нормален начин. +Comment[bn]=কোনো অ্যাপলিকেশন SIGSEGV সিগনালটি সাধারণত তখনই পায় যদি তাতে কোনো বাগ থাকে। অ্যাপলিকেশনটিকে তার সমস্ত নথী সংরক্ষণ করতে অনুরোধ করা হয়েছে। +Comment[br]=Resev a ra un arload an arhent SIGSEGV abalamour d'un draen en arload, peurliesañ. Goulennet e voe d'an arload enrollañ e deulioù. +Comment[bs]=Aplikacija najčešće dobija SIGSEGV signal zbog buga u aplikaciji. Od aplikacije je zatraženo da spasi svoje dokumente. +Comment[ca]=Quan una aplicació rep la senyal SIGSEGV la majoria de les vegades es deu a un error a l'aplicació. L'aplicació us demana que deseu els seus documents. +Comment[cs]=Aplikace dostávají signál SIGSEGV převážně z důvodu chyby v aplikaci. Aplikace byla požádána o uložení svých dokumentů. +Comment[csb]=Programa dostôwô zwëczjano sygna SIGSEGV przë felë w ni sami. Programa miała mòżnotã zapisaniô dokôzów. +Comment[cy]=Derbyna cymhwysiad yr arwydd SIGSEGV gan amlaf o achos nam yn y cymhwysiad. Gofynnwyd i'r cymhwysiad gadw ei ddogfennau. +Comment[da]=Et program modtager som regel SIGSEGV-signalet når der er en fejl i programmet. Programmet blev bedt om at gemme sine dokumenter. +Comment[de]=Ein Programm erhält das Signal SIGSEGV zumeist wegen eines Programmierfehlers. Die Anwendung wurde angewiesen, die Dokumente zu speichern. +Comment[el]=Συνήθως μια εφαρμογή λαμβάνει το σήμα SIGSEGV λόγω ενός σφάλματος σε αυτή. Ζητήθηκε από την εφαρμογή να σώσει τα έγγραφά της. +Comment[eo]=Aplikaĵo normale ricevas la signalon SIGSEGV pro eraro en ĝi. La aplikaĵo provu sekurigi ĝiajn dokumentojn. +Comment[es]=Generalmente una aplicación recibe la señal SIGSEGV debido a un fallo en la aplicación. Se ha pedido a la aplicación que guarde sus documentos. +Comment[et]=Tavaliselt saab rakendus SIGSEGV signaali rakenduses endas tekkinud vea tõttu. Rakendusel paluti avatud dokumendid salvestada. +Comment[eu]=Normalean aplikazio batek SIGSEGV seinalea jasotzen du bere baitan errore bat dagoleko. Aplikazioari dokumentuak gordetzea eskatu zaio. +Comment[fa]=یک کاربرد، اکثراً نشانک SIGSEGV را به علت اشکال در کاربرد دریافت می‌کند. از کاربرد برای ذخیرۀ مستنداتش سؤال می‌شود. +Comment[fi]=Sovellus saa SIGSEGV-signaalin yleensä sovelluksen virheen vuoksi. Sovellusta pyydettiin tallentamaan asiakirjat. +Comment[fr]=Une application reçoit généralement le signal SIGSEGV à cause d'un bogue interne. Le programme a reçu une demande d'enregistrement de ses documents. +Comment[fy]=In programma ûntfangt meastal in SIGSEGV-sinjaal fanwege in flater yn it programma. It programma is frege om syn dokuminten te bewrajen. +Comment[ga]=Go hiondúil, faigheann feidhmchlár comhartha SIGSEGV de bhrí go bhfuil fabht ann. Fiafraíodh den fheidhmchlár a chuid cáipéisí a shábháil. +Comment[gl]=Unha aplicación recebe o sinal SIGSEGV seguramente por mor dun erro interno. Pediu-se-lle á aplicación que guarde os documentos. +Comment[he]=בדרך כלל מקבל יישום את האיתות SIGSEGV עקב באג ביישום. היישום התבקש לשמור את המסמכים שלו. +Comment[hi]=एक अनुप्रयोग प्रायः उस अनुप्रयोग में बग होने पर SIGSEGV संकेत प्राप्त करता है. अनुप्रयोग को इसका दस्तावेज़ सहेजने के लिए कहा गया है. +Comment[hr]=Aplikacija najčešće prima SIGSEGV signal zbog nedostatka unutar aplikacije. Od aplikacije je zatraženo da spremi svoje dokumente. +Comment[hu]=Ha egy alkalmazás SIGSEGV szignált kap, az többnyire akkor fordul elő, ha hibás az alkalmazás. Az alkalmazás megpróbálja elmenteni az adatokat. +Comment[id]=Aplikasi biasanya menerima sinyal SIGSEGV karena ada bug dalam aplikasi. Aplikasi akan meminta untuk menyimpan dokumennya +Comment[is]=Forrit fær yfirleitt SIGSEGV boðið út af villu forritarans. Forritið hefur fengið skipun um að vista allar breytingar gagna. +Comment[it]=Un'applicazione di solito riceve un segnale SIGSEGV a causa di un bug nell'applicazione. All'applicazione è stato chiesto di salvare i documenti. +Comment[ja]=アプリケーションは内部のバグにより SIGSEGV シグナルを受け取ります。アプリケーションは文書を保存するよう求められました。 +Comment[ka]=პროგრამა იღებს SIGSEGV სიგნალს პროგრამაში არსებული შეცდომის გამო. ყველა დოკუმენტი შენახული იქნება +Comment[kk]=Қолданба көбінде SIGSEGV сигналын қатесі пайда болғанда алады. Қолданба құжаттарын сақтауға сұралды. +Comment[km]=កម្មវិធី​មួយ​ច្រើន​តែ​ទទួល​សញ្ញា SIGSEGV ដោយ​សារ​តែ​កំហុស​មួយ​ក្នុង​កម្មវិធី ។ កម្មវិធី​ជា​ទូទៅ​ត្រូវ​បាន​សួរ​ថា រក្សា​ទុក​ឯកសារ​របស់​វា​ឬ​ទេ ។ +Comment[ko]=프로그램의 버그로 인해서 SIGSEGV 신호를 받을 수도 있습니다. 프로그램에서 문서를 저장하도록 요청했습니다. +Comment[lo]=ອັບພລິກເຄເຊິນໄດ້ຮັບສັນຍານ SIGFPE ຈາກບັກພາຍໃນໂປຣແກຣມແລະອັບພລິກເຄເຊິນໄດ້ຖາມເພື່ອທຳການບັນທຶກເອກະສານຂອງມັນ +Comment[lt]=Programa dažniausiai gauna SIGSEGV signalą dėl ydos programoje. Programos buvo paprašyta išsaugoti savo dokumentus. +Comment[lv]=Aplikācija visbiežāk saņem SIGSEGV signālu sakarā ar kļūdu aplikācijā. Aplikācijai piedāvāja saglabāt tās dokumentus. +Comment[mk]=Апликациите најчесто го добиваат сигналот SIGSEGV поради грешка во апликацијата. На апликацијата и беше речено да ги сними сите свои документи. +Comment[mn]= Програм SIGSEGV сигнал хүлээж авч байна. Энэ нь ихэвчилэн программчилалын алдаа байдаг. Програм баримт хадгалах эсэхийг асууж байна. +Comment[ms]=Aplikasi biasanya menerima isyarat SIGSEGV kerana pepijat didalam aplikasi. Aplikasi telah diminta untuk menyimpan dokumennya. +Comment[mt]=Programm ġeneralment jirċievi s-sinjal SIGSEGV minħabba bug fil-programm. Il-programm intalab jikteb id-dokumenti tiegħu. +Comment[nb]=Et program mottar som oftest SIGSEGV-signalet på grunn av en feil i programmet. Programmet ble bedt om å lagre dokumentene. +Comment[nds]=En Programm kriggt dat SIGSEGV-Signaal tomehrst, wenn dat en Fehler dor binnen gifft. Dat Programm wöör anwiest, sien Dokmenten to sekern. +Comment[ne]= अनुप्रयोगमा बगका कारणले एक अनुप्रयोगले SIGSEGV सङ्केत प्राप्त गर्छ । अनुप्रयोगले यसका कागजात बचत गर्न सोधेको थियो । +Comment[nl]=Een programma ontvangt meestal een SIGSEGV-signaal vanwege een fout in het programma. Het programma werd gevraagd om zijn documenten op te slaan. +Comment[nn]=Eit program får oftast signalet SIGSEGV som følgje av ein feil i programmet. Programmet vart spurd om å lagra dokumenta sine. +Comment[nso]=Tshomiso gantshi e amogela tshwaelo ya SIGEGV ka lebaka la bug ka tshumisong. Tshumiso e kgopetswe go boloka ditokomane tsa yona. +Comment[oc]=Ua aplicacion recep lo sinhal SIGSEGV dèut la major part dèus cops a un error de l'aplicacion. E li demana que salva los sens documents. +Comment[pa]=ਇੱਕ ਕਾਰਜ, ਜੋ ਕਿ SIGSEGV ਸੰਕੇਤ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਵਿੱਚ ਬੱਗ ਹੈ।ਇਹ ਕਾਰਜ ਇਸਦੇ ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕਹਿੰਦਾ ਹੈ। +Comment[pl]=Program otrzymuje zwykle sygnał SIGSEGV z powodu błędu w nim samym. Program miał możliwość zapisania dokumentów. +Comment[pt]=Uma aplicação normalmente recebe o sinal SIGSEGV devido a um erro interno. Foi pedido à aplicação que gravasse os seus documentos. +Comment[pt_BR]=Um aplicativo costuma receber um sinal SIGSEGV quando tem erros. O aplicativo foi instruído a salvar seus documentos. +Comment[ro]=În general o aplicație primește semnalul SIGSEGV datorită unei erori interne. Aplicației i s-a cerut să își salveze documentele. +Comment[ru]=Приложение получает сигнал SIGSEGV чаще всего из-за ошибки в программе. Данные приложения будут сохранены. +Comment[rw]=Porogaramu irakira cyane ikimenyetso SIGSEGV bitewe n'ikosa muri porogaramu. Porogaramu yasabwe kubika inyandiko zayo. +Comment[se]=Prográmma dábálaččat oažžu SIGSEGV signála dan dihte go lea dihkki prográmmas. Prográmma gohčoduvvui vurket dokumeanttaset. +Comment[sk]=Aplikácia väčšinou dostane SIGSEGV signál kvôli chybe v aplikácii. Tento signál žiada tiež aplikáciu, aby si uložila svoje dokumenty. +Comment[sl]=Program največkrat prejme signal SIGSEGV zaradi hrošča. Od programa je bilo zahtevano, da shrani svoje dokumente. +Comment[sr]=Програм углавном прима SIGSEGV сигнал услед грешке у њему. Од програма се захтевало да сними све документе. +Comment[sr@Latn]=Program uglavnom prima SIGSEGV signal usled greške u njemu. Od programa se zahtevalo da snimi sve dokumente. +Comment[ss]=Sicelo semukela kakhulu kukhomba kweSIGSEGV ngenca ye bug esicelweni. Sicelo besiceliwe kutsi sigcine emadokhumente aso. +Comment[sv]=Signalen SIGSEGV orsakas oftast av ett fel i programmet. Programmet blev tillsagt att spara sina dokument. +Comment[ta]=நிரலிலுள்ள தவறொன்றின் காரணமாகவே அது பெரும்பாலும் SIGSEGV சைகையைப் பெறும். நிரலுக்குத் தன் ஆவணங்களைச் சேமிக்கும்படி கூறப்பட்டது. +Comment[tg]= Барнома маъмулан ҳангоми сигнали SIGSEGV-ро дарёфт мекунад, ки хатогӣ дар барнома вуҷуд дошта бошад. Аз барнома хоста шуд, ки ин ҳуҷҷатро захира кунад. +Comment[th]=แอพพลิเคชันได้รับสัญญาณ SIGSEGV จากบักภายในโปรแกรม และแอพพลิเคชันได้รับการร้องขอให้ทำการบันทึกเอกสารของมัน +Comment[tr]=Uygulamadaki bir hata nedeniyle, uygulamalar çok kez SIGSEGV sinyali alırlar. Bu durumdaki uygulamalardan belgelerini kaydetmesi istenir. +Comment[tt]=SIGSEGV-ımlaw törle yazılımnarda xata bulu arqasında yış çığa. Bu yazılım istälekläre saqlanğan bulır. +Comment[uk]=Програма здебільшого отримує сигнал SIGSEGV завдяки помилці у програмі. Програмі було запропоновано зберегти документи. +Comment[uz]=Odatda, SIGSEGV signaliga dasturdagi xato sababchi boʻladi. Dasturdan maʼlumotlarni saqlash talab qilindi. +Comment[uz@cyrillic]=Одатда, SIGSEGV сигналига дастурдаги хато сабабчи бўлади. Дастурдан маълумотларни сақлаш талаб қилинди. +Comment[ven]=Apulifikhesheni i anzela u wana luswayo lwa SIGSEGV nga nthani ha baga kha apulifikhesheni. Apulifikhesheni yo humbelwa u vhulunga manwalwa ayo. +Comment[vi]=Một chương trình thường nhận các tìn hiệu SIGSEGV vì trong nó có lỗi. Chương trình đã được yêu cầu lưu tài liệu. +Comment[wa]=On programe riçût sortot l' signå SIGSEGV a cåze d' on bug dins l' programe. Dj' a dmandé å programe di schaper ses documints. +Comment[xh]=Isicelo esifumana i SIGSEGV uphawu ngenxa yegciwane. Isicelo siceliwe ukuba sigcine amaxwebhu aso. +Comment[zh_CN]=大多数情况下,接收到 SIGSEGV 信号是由于程序的缺陷。程序被要求保存它的文档。 +Comment[zh_TW]=大多數情況下,接收到 SIGSEGV 信號是由於程式的錯誤。程式被要求保存它的文件。 +Comment[zu]=Umyaleli ithola kakhulu uphawu lwe-SIGSEGV ngenxa yegciwane elikumyaleli. Umyaleli ucelwe ukuba agcine ushicilelo lwakhe. + +[unknown] +Name=Unknown +Name[af]=Onbekend +Name[ar]=غير معروف +Name[az]=Namə'lum +Name[be]=Невядомы +Name[bg]=Неизвестен +Name[bn]=অজ্ঞাত +Name[br]=Dianav +Name[bs]=Nepoznato +Name[ca]=Desconegut +Name[cs]=Neznámý +Name[csb]=Nieznóny +Name[cy]=Anhysbys +Name[da]=Ukendt +Name[de]=Unbekannt +Name[el]=Άγνωστο +Name[eo]=Nekonata +Name[es]=Desconocido +Name[et]=Tundmatu +Name[eu]=Ezezaguna +Name[fa]=ناشناخته +Name[fi]=Tuntematon +Name[fo]=Ókent +Name[fr]=Inconnu +Name[fy]=Unbekend +Name[ga]=Anaithnid +Name[gl]=Descoñecido +Name[he]=לא ידוע +Name[hi]=अज्ञात +Name[hr]=Nepoznato +Name[hsb]=Njeznaty +Name[hu]=Ismeretlen +Name[id]=Tidak dikenal +Name[is]=Óþekkt +Name[it]=Sconosciuto +Name[ja]=未知 +Name[ka]=უცნობი +Name[kk]=Беймәлім +Name[km]=មិន​ស្គាល់ +Name[ko]=알 수 없음 +Name[ku]=Nenas +Name[lo]=ບໍ່ຮູ້ຈັກ +Name[lt]=Nežinoma +Name[lv]=Nezināms +Name[mk]=Непознат +Name[mn]=Тодорхойгүй +Name[ms]=Tidak Diketahui +Name[mt]=Mhux magħruf +Name[nb]=Ukjent +Name[nds]=nich bekannt +Name[ne]=अज्ञात +Name[nl]=Onbekend +Name[nn]=Ukjend +Name[nso]=Ga e Tsebje +Name[oc]=Desconut +Name[pa]=ਅਣਜਾਣ +Name[pl]=Nieznany +Name[pt]=Desconhecido +Name[pt_BR]=Desconhecido +Name[ro]=Necunoscut +Name[ru]=Неизвестный +Name[rw]=Kitazwi +Name[se]=Amas +Name[sk]=Neznámi +Name[sl]=Neznan +Name[sr]=Непознат +Name[sr@Latn]=Nepoznat +Name[ss]=Ngatiwa +Name[sv]=Okänd +Name[ta]=தெரியாத +Name[te]=తెలియని +Name[tg]=Номаълум +Name[th]=ไม่รู้จัก +Name[tr]=Bilinmeyen +Name[tt]=Bilgesez +Name[uk]=Невідомий +Name[uz]=Nomaʼlum +Name[uz@cyrillic]=Номаълум +Name[ven]=Zwisadivhei +Name[vi]=Không biết +Name[wa]=Nén cnoxhou +Name[xh]=Engaziwayo +Name[zh_CN]=未知 +Name[zh_TW]=未知 +Name[zu]=Okungaziwa +Comment=Sorry, I do not know this signal. +Comment[af]=Jammer, ek ken nie hierdie sein nie. +Comment[ar]=آسف ، لست أعرف هذه الإشارة. +Comment[az]=Bağışlayın, bu siqnalı tanımıram. +Comment[be]=Прабачце, я не ведаю гэты сігнал. +Comment[bg]=Неизвестен сигнал. +Comment[bn]=দুঃখিত, এই সিগনালটি আমার অচেনা। +Comment[br]=Ho tigarez, n'anavezan ket an arhent-mañ. +Comment[bs]=Žalim, ovaj signal mi nije poznat. +Comment[ca]=Ho sento, no conec aquesta senyal. +Comment[cs]=Lituji, tento signál neznám. +Comment[csb]=Przëprôszómë, nen sygnal je nieznóny. +Comment[cy]=Mae'n ddrwg gennym, ni wyddom yr arwydd yma. +Comment[da]=Jeg kender desværre ikke dette signal. +Comment[de]=Unbekanntes Signal +Comment[el]=Λυπάμαι, δε γνωρίζω αυτό το σήμα. +Comment[eo]=Pardonu, mi ne konas tiun signalon. +Comment[es]=Lo siento, se desconoce esta señal. +Comment[et]=Vabandust, ma ei tunne seda signaali. +Comment[eu]=Sentitzen dut, ez dut seinale hau ezagutzen. +Comment[fa]=متأسفم، من این نشانک را نمی‌شناسم. +Comment[fi]=Tuntematon signaali +Comment[fr]=Désolé, ce signal est inconnu. +Comment[fy]=Sorry, dit sinjaal is ûnbekend. +Comment[ga]=Tá brón orm, níl aithne agam ar an chomhartha seo. +Comment[gl]=Sinto-o, este sinal é descoñecido. +Comment[he]=איתות זה אינו מוכר. +Comment[hi]=माफ करें, मैं इस सिग्नल को नहीं जानता. +Comment[hr]=Nažalost, ovaj signal nije prepoznat. +Comment[hsb]=Njeznaty signal. +Comment[hu]=Nem ismerem ezt a szignált. +Comment[id]=Maaf, sinyal ini tidak dikenal. +Comment[is]=Því miður, ég þekki ekki þetta boð. +Comment[it]=Purtroppo si tratta di un segnale non riconoscibile. +Comment[ja]=すみません、このシグナルは分かりません。 +Comment[ka]=სამწუხაროდ ამ სიგნალის შესახებ არაფერია ცნობილი +Comment[kk]=Кешіріңіз, бұл беймәлім сигнал. +Comment[km]=សូមទោស ខ្ញុំ​មិន​ស្គាល់​សញ្ញា​នេះ​ទេ ។ +Comment[ko]=죄송합니다. 이 신호를 알 수 없습니다. +Comment[lt]=Deja, šis signalas nėra žinomas. +Comment[lv]=Atvainojiet, Es nezinu šo signālu. +Comment[mk]=Жал ми е, овој сигнал не ми е познат. +Comment[ms]=Maaf, saya tidak mengenali isyarat ini. +Comment[mt]=Jiddispjaċini, ma nafx dan is-sinjal. +Comment[nb]=Dette er et ukjent signal. +Comment[nds]=Deit mi leed, dat Signaal is nich bekannt. +Comment[ne]=माफ गर्नुहोस्, मैले यो सङ्केत थाहा छैन । +Comment[nl]=Helaas, dit signaal is onbekend. +Comment[nn]=Dette er eit ukjent signal. +Comment[pa]=ਅਫ਼ਸੋਸ, ਮੈਂ ਇਸ ਸੰਕੇਤ ਬਾਰੇ ਨਹੀਂ ਜਾਣਦਾ ਹਾਂ। +Comment[pl]=Niestety, ten sygnał nie jest znany. +Comment[pt]=Infelizmente, este sinal é desconhecido. +Comment[pt_BR]=Desculpe, mas este sinal não é conhecido. +Comment[ro]=Nu cunosc acest tip de semnal. +Comment[ru]=Извините, об этом сигнале ничего не известно. +Comment[rw]=Ihangane, Ntabwo nzi iki kimenyetso. +Comment[se]=Ándagássii, dát lea amas signála. +Comment[sk]=Ľutujem, nepoznám tento signál. +Comment[sl]=Žal je ta signal neznan. +Comment[sr]=Извините, овај сигнал ми није познат. +Comment[sr@Latn]=Izvinite, ovaj signal mi nije poznat. +Comment[sv]=Känner tyvärr inte till den här signalen. +Comment[ta]=மன்னிக்கவும், இந்த சின்னம் எணக்கு தெரியாது. +Comment[te]=క్షమించండి, నాకు ఈ సిగ్నల్ తెలియదు +Comment[tg]=Мутаасифона ин сигналро намешиносам. +Comment[th]=ขออภัย ไม่รู้จักหมายเลขสัญญาณนี้ +Comment[tr]=Üzgünüm, bu sinyali tanımıyorum. +Comment[tt]=Ni qızğanıç, bu ımlawnı añlamadım. +Comment[uk]=Вибачте, цей сигнал -- невідомий. +Comment[uz]=Uzr, men bu signalni bilmayman. +Comment[uz@cyrillic]=Узр, мен бу сигнални билмайман. +Comment[vi]=Xin lỗi, không hiểu tín hiệu này. +Comment[wa]=Mande escuze, dji n' conoxhe nén ç' signå. +Comment[zh_CN]=抱歉,我不知道这个信号。 +Comment[zh_TW]=抱歉,我不認識這個信號。 diff --git a/drkonqi/toplevel.cpp b/drkonqi/toplevel.cpp new file mode 100644 index 000000000..a691b30c5 --- /dev/null +++ b/drkonqi/toplevel.cpp @@ -0,0 +1,222 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#include +#include +#include + +#include "netwm.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "backtrace.h" +#include "drbugreport.h" +#include "debugger.h" +#include "krashconf.h" +#include "toplevel.h" +#include "toplevel.moc" + +Toplevel :: Toplevel(KrashConfig *krashconf, QWidget *parent, const char *name) + : KDialogBase( Tabbed, + krashconf->programName(), + User3 | User2 | User1 | Close, + Close, + parent, + name, + true, // modal + false, // no separator + i18n("&Bug report"), + i18n("&Debugger") + ), + m_krashconf(krashconf), m_bugreport(0) +{ + QHBox *page = addHBoxPage(i18n("&General")); + page->setSpacing(20); + + // picture of konqi + QLabel *lab = new QLabel(page); + lab->setFrameStyle(QFrame::Panel | QFrame::Sunken); + QPixmap pix(locate("appdata", QString::fromLatin1("pics/konqi.png"))); + lab->setPixmap(pix); + lab->setFixedSize( lab->sizeHint() ); + + QLabel * info = new QLabel(generateText(), page); + info->setMinimumSize(info->sizeHint()); + + if (m_krashconf->showBacktrace()) + { + page = addHBoxPage(i18n("&Backtrace")); + new KrashDebugger(m_krashconf, page); + } + + showButton( User1, m_krashconf->showBugReport() ); + showButton( User2, m_krashconf->showDebugger() ); + showButton( User3, false ); + + connect(this, SIGNAL(closeClicked()), SLOT(accept())); + connect(m_krashconf, SIGNAL(newDebuggingApplication(const QString&)), SLOT(slotNewDebuggingApp(const QString&))); + + if ( !m_krashconf->safeMode() && kapp->dcopClient()->attach() ) + kapp->dcopClient()->registerAs( kapp->name() ); +} + +Toplevel :: ~Toplevel() +{ +} + +QString Toplevel :: generateText() const +{ + QString str; + + if (!m_krashconf->errorDescriptionText().isEmpty()) + str += i18n("

Short description

%1

") + .arg(m_krashconf->errorDescriptionText()); + + if (!m_krashconf->signalText().isEmpty()) + str += i18n("

What is this?

%1

") + .arg(m_krashconf->signalText()); + + if (!m_krashconf->whatToDoText().isEmpty()) + str += i18n("

What can I do?

%1

") + .arg(m_krashconf->whatToDoText()); + + // check if the string is still empty. if so, display a default. + if (str.isEmpty()) + str = i18n("

Application crashed

" + "

The program %appname crashed.

"); + + // scan the string for %appname etc + m_krashconf->expandString(str, false); + + return str; +} + +// starting bug report +void Toplevel :: slotUser1() +{ + if (m_bugreport) + return; + + int i = KMessageBox::No; + if ( m_krashconf->pid() != 0 ) + i = KMessageBox::warningYesNoCancel + (0, + i18n("

Do you want to generate a " + "backtrace? This will help the " + "developers to figure out what went " + "wrong.

\n" + "

Unfortunately this will take some " + "time on slow machines.

" + "

Note: A backtrace is not a " + "substitute for a proper description " + "of the bug and information on how to " + "reproduce it. It is not possible " + "to fix the bug without a proper " + "description.

"), + i18n("Include Backtrace"),i18n("Generate"),i18n("Do Not Generate")); + + if (i == KMessageBox::Cancel) return; + + m_bugreport = new DrKBugReport(0, true, m_krashconf->aboutData()); + + if (i == KMessageBox::Yes) { + QApplication::setOverrideCursor ( waitCursor ); + + // generate the backtrace + BackTrace *backtrace = new BackTrace(m_krashconf, this); + connect(backtrace, SIGNAL(someError()), SLOT(slotBacktraceSomeError())); + connect(backtrace, SIGNAL(done(const QString &)), + SLOT(slotBacktraceDone(const QString &))); + + backtrace->start(); + + return; + } + + int result = m_bugreport->exec(); + delete m_bugreport; + m_bugreport = 0; + if (result == KDialogBase::Accepted) + close(); +} + +void Toplevel :: slotUser2() +{ + QString str = m_krashconf->debugger(); + m_krashconf->expandString(str, true); + + KProcess proc; + proc.setUseShell(true); + proc << str; + proc.start(KProcess::DontCare); +} + +void Toplevel :: slotNewDebuggingApp(const QString& launchName) +{ + setButtonText( User3, launchName ); + showButton( User3, true ); +} + +void Toplevel :: slotUser3() +{ + m_krashconf->acceptDebuggingApp(); +} + +void Toplevel :: slotBacktraceDone(const QString &str) +{ + // Do not translate.. This will be included in the _MAIL_. + QString buf = QString::fromLatin1 + ("\n\n\nHere is a backtrace generated by DrKonqi:\n") + str; + + m_bugreport->setText(buf); + + QApplication::restoreOverrideCursor(); + + m_bugreport->exec(); + delete m_bugreport; + m_bugreport = 0; +} + +void Toplevel :: slotBacktraceSomeError() +{ + QApplication::restoreOverrideCursor(); + + KMessageBox::sorry(0, i18n("It was not possible to generate a backtrace."), + i18n("Backtrace Not Possible")); + + m_bugreport->exec(); + delete m_bugreport; + m_bugreport = 0; +} + diff --git a/drkonqi/toplevel.h b/drkonqi/toplevel.h new file mode 100644 index 000000000..6476ac3d4 --- /dev/null +++ b/drkonqi/toplevel.h @@ -0,0 +1,66 @@ +/***************************************************************** + * drkonqi - The KDE Crash Handler + * + * toplevel.cpp + * + * Copyright (C) 2000-2003 Hans Petter Bieker + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************/ + +#ifndef TOPLEVEL_H +#define TOPLEVEL_H + +class KAboutData; +class KrashConfig; +class DrKBugReport; + +#include + +class Toplevel : public KDialogBase +{ + Q_OBJECT + +public: + Toplevel(KrashConfig *krash, QWidget *parent = 0, const char * name = 0); + ~Toplevel(); + +private: + // helper methods + QString generateText() const; + +protected slots: + void slotUser1(); + void slotUser2(); + void slotNewDebuggingApp(const QString& launchName); + void slotUser3(); + +protected slots: + void slotBacktraceSomeError(); + void slotBacktraceDone(const QString &); + +private: + KrashConfig *m_krashconf; + DrKBugReport *m_bugreport; +}; + +#endif diff --git a/kappfinder/Makefile.am b/kappfinder/Makefile.am new file mode 100644 index 000000000..fa9661236 --- /dev/null +++ b/kappfinder/Makefile.am @@ -0,0 +1,34 @@ +SUBDIRS = apps + +bin_PROGRAMS = kappfinder +kappfinder_SOURCES = main.cpp toplevel.cpp common.cpp +kappfinder_LDADD = $(LIB_KDEUI) $(LIB_KIO) +kappfinder_LDFLAGS = $(all_libraries) $(KDE_RPATH) + +noinst_PROGRAMS = kappfinder_install +kappfinder_install_SOURCES = main_install.cpp common.cpp +kappfinder_install_LDADD = $(LIB_KDEUI) +kappfinder_install_LDFLAGS = $(all_libraries) $(KDE_RPATH) + +INCLUDES = $(all_includes) +METASOURCES = AUTO + +install-data-local: runkappfinder_$(RUN_KAPPFINDER) + +runkappfinder_yes: + echo "Installing non-KDE applications" + pwd=`pwd`; \ + (cd $(srcdir) && $$pwd/kappfinder_install "$(DESTDIR)$(kde_appsdir)") + +runkappfinder_no: + +KDE_ICON = kappfinder + +xdg_apps_DATA = kappfinder.desktop + +messages: + $(XGETTEXT) $(kappfinder_SOURCES) -o $(podir)/kappfinder.pot + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/System + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/System/kappfinder.desktop diff --git a/kappfinder/README.apps b/kappfinder/README.apps new file mode 100644 index 000000000..b0010b473 --- /dev/null +++ b/kappfinder/README.apps @@ -0,0 +1,12 @@ +The apps directory contains .desktop files for commonly used non-KDE +programs which kappfinder installs into the applnk directory of KDE. + +kappfinder used to install .directory files as well because in the past the +non-KDE applications were installed in their own directory seperated from +the main KDE applications. This is no longer the case, all .directory files +are maintained in kdebase/applnk. + +Terminal applications however are in a seperate directory. This is done by +creating a subdirectory for the category (e.g. Internet/Terminal) and +installing the .directory from kdebase/applnk and the application .desktop +files from kdebase/kappfinder/apps/ diff --git a/kappfinder/apps/Development/Forte.desktop b/kappfinder/apps/Development/Forte.desktop new file mode 100644 index 000000000..29a0c886e --- /dev/null +++ b/kappfinder/apps/Development/Forte.desktop @@ -0,0 +1,68 @@ +[Desktop Entry] +GenericName=Java IDE +GenericName[af]=Java Ide +GenericName[be]=Інтэграванае асяроддзе распрацоўкі для Java +GenericName[bn]=জাভা IDE +GenericName[ca]=IDE per a Java +GenericName[csb]=Òkrãzé Javë +GenericName[cy]=IDE Java +GenericName[da]=Java-IDE +GenericName[de]=Java-Entwicklungsumgebung +GenericName[el]=IDE για Java +GenericName[eo]=Javo-programadomedio +GenericName[es]=IDE (entorno integrado de desarrollo) para Java +GenericName[et]=Java arenduskeskkond +GenericName[eu]=Java IDEa +GenericName[fa]=آی دی ای جاوا +GenericName[fo]=Java-menningarskipan +GenericName[fr]=Environnement de développement intégré Java +GenericName[ga]=IDE Java +GenericName[gl]=IDE Java +GenericName[he]=סביבת פיתוח משולבת ל־Java +GenericName[hi]=जावा आईडीई +GenericName[is]=Java-forritunarumhverfi +GenericName[it]=Ambiente di sviluppo integrato Java +GenericName[lo]=ເຄື່ອງມື IDE ສຳລັບຈາວາ +GenericName[mn]=Жава-Хөгжүүллийн орчин +GenericName[ms]=IDE Java +GenericName[mt]=IDE tal-Java +GenericName[nb]=Java-IDE +GenericName[nds]=Integreert Bewerkenümgeven för Java +GenericName[ne]=जाभा IDE +GenericName[nn]=Java-IDE +GenericName[nso]=IDE ya Java +GenericName[pl]=Środowisko Javy +GenericName[pt]=IDE de Java +GenericName[pt_BR]=IDE Java +GenericName[ro]=Mediu IDE pentru Java +GenericName[se]=Java-IDE +GenericName[sl]=Integrirano razvojno okolje za Javo +GenericName[sv]=Java-IDE +GenericName[ta]=ஜாவா ஒருங்கிணைந்த உருவாக்ககம் +GenericName[te]=జావా ఐడిఈ +GenericName[th]=เครื่องมือ IDE สำหรับจาวา +GenericName[tr]=Java IDE(Tümleşik Geliştirme Ortamı) +GenericName[vi]=Môi trường phát triển tích hợp Java +GenericName[wa]=Evironmint di programaedje (IDE) po l' lingaedje Java +GenericName[xh]=IDE ye Java +GenericName[zh_CN]=Java 集成开发环境 +GenericName[zh_TW]=Java 整合開發環境 +Exec=runide.sh +Icon=ksmiletris +Name=Forte +Name[bn]=ফোর্টে +Name[eo]=Forto +Name[hi]=फोर्ट +Name[ne]=फर्ट +Name[nso]=Karolo ye Maatla +Name[pa]=ਫੋਰਟੀ +Name[rw]=By'imbaraga +Name[ta]=ஃபோர்ட் +Name[te]=ఫోర్టె +Name[tg]=Форте +Name[th]=คำทำนาย - K +Name[tt]=Köçele Yaq +Name[ven]=Vhutsila +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Development/Makefile.am b/kappfinder/apps/Development/Makefile.am new file mode 100644 index 000000000..4ebd68d42 --- /dev/null +++ b/kappfinder/apps/Development/Makefile.am @@ -0,0 +1,6 @@ +kappfinder_development_data_DATA = assistant.desktop dlgedit.desktop ddd.desktop designer.desktop linguist.desktop \ + Forte.desktop j2mewtk.desktop pose.desktop eclipse.desktop + +kappfinder_development_datadir = $(kde_datadir)/kappfinder/apps/Development + +EXTRA_DIST = $(kappfinder_development_data_DATA) diff --git a/kappfinder/apps/Development/assistant.desktop b/kappfinder/apps/Development/assistant.desktop new file mode 100644 index 000000000..781f3a02f --- /dev/null +++ b/kappfinder/apps/Development/assistant.desktop @@ -0,0 +1,147 @@ +[Desktop Entry] +Exec=assistant +Name=Qt Assistant +Name[af]=Qt Assistent +Name[ar]=معاون Qt +Name[az]=Qt Yardımçısı +Name[be]=Асістэнт Qt +Name[bn]=কিউ-টি সহায়ক +Name[br]=Skoazeller Qt +Name[bs]=Qt Asistent +Name[ca]=Assistent Qt +Name[cs]=Qt asistent +Name[cy]=Cymhorthwr Qt +Name[de]=Qt-Assistent +Name[el]=Βοηθός Qt +Name[eo]=Qt-Asistilo +Name[es]=Asistente Qt +Name[eu]=Qt laguntzailea +Name[fa]=دستیار Qt +Name[fo]=Qt-hjálpari +Name[fy]=Qt-assistent +Name[hi]=क्यूटी सहायक +Name[hr]=Qt Asistent +Name[hsb]=Qt Asistent +Name[ja]=Qt アシスタント +Name[ka]=Qt დამხმარე +Name[kk]=Qt көмекшісі +Name[km]=អ្នក​ជំនួយការ Qt +Name[lo]=ຄຳແນະນຳການໃ້ຊ້Qt +Name[lt]=Qt Asistentas +Name[lv]=Qt Asistents +Name[mk]=Qt-Асистент +Name[mn]=Qt-туслагч +Name[ms]=Pembantu Qt +Name[nds]=Qt-Hölper +Name[ne]=Qt सहायक +Name[nl]=Qt Assistent +Name[nso]=Mothusi wa Qt +Name[pa]=Qt ਸਹਾਇਕ +Name[pt]=Assistente do Qt +Name[pt_BR]=Assistente Qt +Name[ro]=Asistent Qt +Name[ru]=Помощник Qt +Name[rw]=Umufasha Qt +Name[sl]=Pomočnik za Qt +Name[ss]=Lisekela leQt +Name[ta]=Qt துணைவன் +Name[te]=క్యుటి సహాయకుడు +Name[tg]=Дастёри Qt +Name[th]=คำแนะนำการใช้ Qt +Name[tr]=Qt Asistanı +Name[uk]=Qt-асистент +Name[uz]=Qt3 yordamchi +Name[uz@cyrillic]=Qt3 ёрдамчи +Name[ven]=Qt Muthusi +Name[vi]=Trợ giúp Qt +Name[wa]=Macrea Qt +Name[xh]=Qt Umncedi +Name[zh_CN]=Qt 助手 +Name[zh_TW]=Qt 助理 +Name[zu]=Umsizi we-Qt +GenericName=Document Browser +GenericName[af]=Dokument Blaaier +GenericName[ar]=متصفح المستندات +GenericName[az]=Sənəd Səyyahı +GenericName[be]=Праглядальнік дакументаў +GenericName[bg]=Преглед на документи +GenericName[bn]=নথী ব্রাউজার +GenericName[br]=Furcher Teulioù +GenericName[bs]=Preglednik QT dokumenata +GenericName[ca]=Navegador de documents +GenericName[cs]=Prohlížeč dokumentace +GenericName[csb]=Przezérnik dokùmentów +GenericName[cy]=Porydd Dogfen +GenericName[da]=Dokumentfremviser +GenericName[de]=Dokumentbrowser +GenericName[el]=Προβολέας εγγράφων +GenericName[eo]=Dokumentorigardilo +GenericName[es]=Navegador de documentos +GenericName[et]=Dokumentatsiooni brauser +GenericName[eu]=Dokumentu arakatzailea +GenericName[fa]=مرورگر سند +GenericName[fi]=Asiakirjaselain +GenericName[fo]=Skjalakagari +GenericName[fr]=Explorateur de documentation Qt +GenericName[fy]=Dokumintblêder +GenericName[ga]=Brabhsálaí Cáipéise +GenericName[gl]=Navegador de Documentos +GenericName[he]=דפדפן מסמכים +GenericName[hi]=दस्तावेज़ ब्राउज़रज़र +GenericName[hr]=Preglednik dokumenata +GenericName[hu]=Dokumentumböngésző +GenericName[id]=Peselancar Document +GenericName[is]=Skjalavafri +GenericName[it]=Visualizzatore di documenti +GenericName[ja]=ドキュメントブラウザ +GenericName[ka]=დოკუმენტის ბრაუზერი +GenericName[kk]=Құжат шолғыш +GenericName[km]=កម្មវិធី​រុករក​ឯកសារ +GenericName[ko]=문서 탐색기 +GenericName[lo]=ເຄື່ອງມືເລືອກເບິ່ງແຟ້ມເອກະສານ +GenericName[lt]=Dokumentų naršyklė +GenericName[lv]=Dokumentu Pārlūks +GenericName[mk]=Прелистувач на документи +GenericName[mn]=Баримтын хөтөч +GenericName[ms]=Pelungsur Dokumen +GenericName[mt]=Browser ta' Dokumenti +GenericName[nb]=Dokumentleser +GenericName[nds]=Dokmentkieker +GenericName[ne]=कागजात ब्राउजर +GenericName[nl]=Documentbrowser +GenericName[nn]=Dokumentlesar +GenericName[nso]=Seinyakisi sa Tokomane +GenericName[pa]=ਦਸਤਾਵੇਜ਼ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka dokumentów +GenericName[pt]=Navegador de Documentos +GenericName[pt_BR]=Navegador de Documentos +GenericName[ro]=Navigator de documente +GenericName[ru]=Программа просмотра документов +GenericName[rw]=Mucukumbuzi w'Inyandiko +GenericName[se]=Dokumeantalogan +GenericName[sk]=Prehliadač dokumentácie +GenericName[sl]=Pregledovalnik dokumentov +GenericName[sr]=Прегледач докумената +GenericName[sr@Latn]=Pregledač dokumenata +GenericName[ss]=Ibrawuza yelidokhumente +GenericName[sv]=Dokumentbläddrare +GenericName[ta]=ஆவண உலாவி +GenericName[te]=పత్ర బ్రౌజర్ +GenericName[tg]=Намоишгари санад +GenericName[th]=เครื่องมือเลือกดูแฟ้มเอกสาร +GenericName[tr]=Belge Tarayıcısı +GenericName[tt]=İstälek Küzätüçe +GenericName[uk]=Навігатор документів +GenericName[uz]=Hujjat brauzeri +GenericName[uz@cyrillic]=Ҳужжат браузери +GenericName[ven]=Buronza ya manwalwa +GenericName[vi]=Trình duyệt tài liệu +GenericName[wa]=Foyteu di documints +GenericName[xh]=Umkhangeli Wencwadi Zoxwebhu +GenericName[zh_CN]=文档浏览器 +GenericName[zh_TW]=文件閱讀器 +GenericName[zu]=Umcingi Woshicilelo +X-KDE-StartupNotify=true +Icon=assistant +Terminal=false +Type=Application diff --git a/kappfinder/apps/Development/ddd.desktop b/kappfinder/apps/Development/ddd.desktop new file mode 100644 index 000000000..036acee93 --- /dev/null +++ b/kappfinder/apps/Development/ddd.desktop @@ -0,0 +1,73 @@ +[Desktop Entry] +Exec=ddd +Type=Application +GenericName=Data Display Debugger +GenericName[af]=Data Vertoon Ontfouter +GenericName[az]=Verilən Göstəriş Xəta Ayıqlayıcısı +GenericName[be]=Адладчык дадзеных манітора +GenericName[bn]=ডেটা ডিসপ্লে ডিবাগার +GenericName[br]=Dizraener Diskwel Roadoù +GenericName[ca]=Depurador de dades en pantalla +GenericName[csb]=Debuger pòdôwków +GenericName[cy]=Dadnamydd Dangosydd Data +GenericName[da]=Fejlsøger med datavisning +GenericName[de]=DD-Debugger +GenericName[el]=Αποσφαλματωτής εμφάνισης δεδομένων +GenericName[eo]=Datummontra erarserĉilo +GenericName[es]=Depurador visual de datos ('Data Display Debugger') +GenericName[et]=DDD silur +GenericName[fa]=اشکال‌زدای نمایش داده +GenericName[fi]=DDD-vianjäljitysohjelma +GenericName[fo]=Dátuskíggjakembari +GenericName[fr]=Débogueur symbolique +GenericName[fy]=Data-display-debugger +GenericName[gl]=Depurador da Saída de Datos +GenericName[hi]=डाटा डिस्प्ले डिबगर +GenericName[hr]=Uklanjanje nedostataka u prikazu podataka +GenericName[hu]=Nyomkövető +GenericName[id]=Debugger Display Data +GenericName[is]=DD-villugreiningartól +GenericName[ka]=ეკრანის მონაცემთა შემსწორებელი +GenericName[kk]=DDD экрандық дерек жөндеуші +GenericName[km]=កម្មវិធី​បំបាត់​កំហុស​នៃ​ការ​បង្ហាញ​ទិន្នន័យ +GenericName[ko]=자료 표시 디버거 +GenericName[lo]=ເຄື່ອງມືດີບັກສະແດງຂໍ້ມູນ +GenericName[lt]=Duomenų vaizdavimo debugeris +GenericName[lv]=Displeja Datu Atkļūdotājs +GenericName[mn]=DD-Debugger +GenericName[ms]=Penyahralat Data Paparan +GenericName[ne]=डेटा प्रदर्शन त्रुटि मोचक +GenericName[nl]=Data-display-debugger +GenericName[nso]=Debugger yago Bontsha Data +GenericName[oc]=Depurador de datas visuau +GenericName[pa]=ਡਾਟਾ ਡਿਸਪਲੇਅ ਡੀਬੱਗਰ +GenericName[pl]=Debuger danych +GenericName[pt_BR]=Depurador de Dados +GenericName[ro]=Depanatorul DDD +GenericName[ru]=Экранный отладчик DDD +GenericName[rw]=Mukemuramakosa Kwerekana Ibyatanzwe +GenericName[sk]=Debugger zobrazujúci dáta +GenericName[ss]=Sisusi ma-bug sekubonisa imininingwane lengakahlutwaa +GenericName[sv]=Datavisande felsökningsprogram +GenericName[ta]=தரவுக் காட்சிப் பிழைநீக்கி +GenericName[te]=దత్తాంశ వీక్షణ డిబగ్గర్ +GenericName[tg]=Тасҳеҳгари намоиши додаҳо +GenericName[th]=เครื่องมือดีบักการแสดงข้อมูล +GenericName[tr]=Veri Gösterim Hata Ayıklayıcısı +GenericName[tt]=Täräzäle Betçe (DDD) +GenericName[uk]=Зневадник "Data Display Debugger" +GenericName[ven]=Debugger i no sumbedza mafhungo (Data) +GenericName[vi]= Trình sửa lỗi hiển thị dữ liệu +GenericName[wa]=Disbugueu DDD +GenericName[xh]=Umbonisi we Data ye Debugger +GenericName[zh_CN]=数据显示调试器 +GenericName[zh_TW]=資料顯示除錯器 +GenericName[zu]=Umcoshi wamaphutha womboniso wedata +Name=DDD +Name[af]=Ddd +Name[de]=DDD (Debugger) +Name[hi]=डीडीडी +Name[mn]=DDD (Debugger) +Name[te]=డిడిడి +X-KDE-StartupNotify=true +Icon=xapp diff --git a/kappfinder/apps/Development/designer.desktop b/kappfinder/apps/Development/designer.desktop new file mode 100644 index 000000000..5061a40f9 --- /dev/null +++ b/kappfinder/apps/Development/designer.desktop @@ -0,0 +1,143 @@ +[Desktop Entry] +Exec=designer +Name=Qt Designer +Name[af]=Qt Ontwerper +Name[ar]=مصمم Qt +Name[be]=Дызайнер Qt +Name[bn]=কিউ-টি ডিসাইনার +Name[br]=Ergrafer Qt +Name[ca]=Dissenyador Qt +Name[cs]=Qt designer +Name[cy]=Dylunydd Qt +Name[de]=Qt-Designer +Name[eo]=Qt-Desegnilo +Name[es]=Diseñador Qt +Name[eu]=Qt diseinatzailea +Name[fa]=Qt طراح +Name[gl]=Deseñador de Qt +Name[hi]=क्यूटी डिज़ाइनर +Name[hr]=Qt Dizajner +Name[hsb]=Qt designer +Name[is]=Qt hönnuðurinn +Name[it]=Designer Qt +Name[ja]=Qt デザイナー +Name[ka]=Qt დიზაინერი +Name[km]=កម្មវិធី​រចនា Qt +Name[lo]=ອອກແບບສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ສຳຫັລບ Qt +Name[lv]=Qt Dizainers +Name[mk]=Qt-Дизајнер +Name[mn]=Qt-Дизайнер +Name[ms]=Pembantu Qt +Name[mt]=Diżinjatur Qt +Name[nds]=Qt-Designer +Name[ne]=Qt डिजाइनर +Name[nso]=Mohlami wa Qt +Name[oc]=Dessinador Qt +Name[pa]=Qt ਡਿਜ਼ਾਈਨਰ +Name[rw]=Umuhanzi Qt +Name[sl]=Snovalnik Qt +Name[ss]=Umhleli weQt +Name[sv]=Qt designer +Name[ta]=Qt வடிவமைப்பாளர் +Name[te]=క్యుటి డిజైనర్ +Name[tg]=Ороишгари Qt +Name[th]=ออกแบบส่วนติดต่อผู้ใช้สำหรับ Qt +Name[tr]=Qt Tasarımcı +Name[tt]=Qt Tözüçe +Name[uk]=Дизайнер Qt +Name[uz]=Qt3 dizayner +Name[uz@cyrillic]=Qt3 дизайнер +Name[ven]=Qt Mufhati +Name[vi]=Trình thiết kế Qt +Name[xh]=Umyili we Qt +Name[zh_CN]=Qt 设计器 +Name[zh_TW]=Qt 設計師 +Name[zu]=Umakhi we-Qt +GenericName=Interface Designer +GenericName[af]=Koppelvlak Ontwerper +GenericName[ar]=مصمم واجهات إستخدام +GenericName[az]=Ara Üz Tərtibçisi +GenericName[be]=Дызайнер інтэрфейса +GenericName[bg]=Дизайн на интерфейс +GenericName[bn]=ইন্টারফেস পরিকল্পনা +GenericName[br]=Ergrafer etrefas +GenericName[bs]=Qt alat za dizajniranje interfejsa +GenericName[ca]=Dissenyador d'interfícies +GenericName[cs]=Návrhář rozhraní +GenericName[csb]=Projektant interfejsu +GenericName[cy]=Dylunydd Rhyngwyneb +GenericName[da]=Grænsefladedesigner +GenericName[de]=Schnittstellendesigner +GenericName[el]=Σχεδιαστής διασυνδέσεων +GenericName[eo]=Interfacdesegnilo +GenericName[es]=Diseñador de interfaces +GenericName[et]=Kasutajaliidese disainer +GenericName[eu]=Interfaze diseinatzailea +GenericName[fa]=طراح واسط +GenericName[fi]=Käyttöliittymäsuunnittelija +GenericName[fo]=Nýtaramótssniðari +GenericName[fr]=Concepteur d'interface +GenericName[fy]=Ynterface-ûntwerper +GenericName[ga]=Dearthóir Comhéadain +GenericName[gl]=Deseñador de Interfaces +GenericName[he]=מעצב ממשקים +GenericName[hi]=इंटरफेस डिज़ाइनर +GenericName[hr]=Dizajner sučelja +GenericName[hu]=Felülettervező +GenericName[id]=Perancang Antarmuka +GenericName[is]=Viðmótshönnun +GenericName[it]=Disegnatore di interfacce +GenericName[ja]=インターフェースデザイナー +GenericName[ka]=ინტერფეისის დიზაინერი +GenericName[kk]=QT интерфейсінің редакторы +GenericName[km]=កម្មវិធី​រចនា​ចំណុច​ប្រទាក់ +GenericName[ko]=인터페이스 디자이너 +GenericName[lo]=ເຄື່ອງມືອອກແບບສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ +GenericName[lt]=Sąsajos redaktorius +GenericName[lv]=Saskarnes Dizainers +GenericName[mk]=Дизајнер на интерфејси +GenericName[mn]=Гадаргуун дизайнер +GenericName[ms]=Pereka Antaramuka +GenericName[mt]=Diżinjatur tal-interfaċċji +GenericName[nb]=Utforming av grensesnitt +GenericName[nds]=Koppelsteed-Maker +GenericName[ne]=इन्टरफेस डिजाइनर +GenericName[nl]=Interface-ontwerper +GenericName[nn]=Utforming av grensesnitt +GenericName[nso]=Mohlami wa Interface +GenericName[pa]=ਇੰਟਰਫੇਸ਼ ਡਿਜ਼ਾਈਨਰ +GenericName[pl]=Projektant interfejsu +GenericName[pt]=Editor de Interfaces +GenericName[pt_BR]=Interface do Designer +GenericName[ro]=Designer de interfețe +GenericName[ru]=Редактор интерфейса приложений Qt +GenericName[rw]=Umuhanzi w'Imigaragarire +GenericName[se]=Laktahábmejeaddji +GenericName[sk]=Návrh rozhrania +GenericName[sl]=Snovalnik vmesnikov +GenericName[sr]=Дизајнер интерфејса +GenericName[sr@Latn]=Dizajner interfejsa +GenericName[ss]=Umhleli wesichumanisi +GenericName[sv]=Gränssnittseditor +GenericName[ta]=முகப்புப் வடிவமைப்பாளர் +GenericName[te]=ఇంటర్ ఫేస్ డిజైనర్ +GenericName[tg]=Ороишгари интерфейс +GenericName[th]=เครื่องมือออกแบบส่วนติดต่อผู้ใช้ +GenericName[tr]=Arayüz tasarım programı +GenericName[tt]=Yözara Tözegeç +GenericName[uk]=Дизайн інтерфейсу +GenericName[uz]=Interfeys dizayneri +GenericName[uz@cyrillic]=Интерфейс дизайнери +GenericName[ven]=Muvhati wa nga Phanda +GenericName[vi]=Trình thiết kế giao diện +GenericName[wa]=Dessineu d' eterfaces +GenericName[xh]=Umyili Wezojongongano +GenericName[zh_CN]=界面设计器 +GenericName[zh_TW]=界面設計師 +GenericName[zu]=Umakhi Womxhumanisi +X-KDE-StartupNotify=true +MimeType=application/x-designer +Icon=designer +Terminal=false +Type=Application + diff --git a/kappfinder/apps/Development/dlgedit.desktop b/kappfinder/apps/Development/dlgedit.desktop new file mode 100644 index 000000000..57a328837 --- /dev/null +++ b/kappfinder/apps/Development/dlgedit.desktop @@ -0,0 +1,114 @@ +[Desktop Entry] +Name=Qt DlgEdit +Name[af]=Qt Dlgedit +Name[bn]=কিউ-টি DlgEdit +Name[ca]=Editor de diàlegs Qt +Name[csb]=Editora dialogòwëch òknów Qt +Name[eo]=Qt-Dialogredaktilo +Name[hi]=क्यूटी डीएलजीएडिट +Name[lo]=ແກ້ໄຂກ່ອງໂຕ້ຕອບສຳຫັລບ Qt +Name[lv]=Qt DlgRedaktors +Name[nds]=Qt-DlgEdit +Name[ne]=Qt डी एल जी सम्पादन +Name[nso]=Qt DlgPhetoso +Name[pl]=Edytor okien dialogowych Qt +Name[ro]=Editor de dialoguri Qt +Name[rw]=GuhinduraIkiganiro Qt +Name[sv]=Qt dlgedit +Name[ta]=Qt உரைதொகுப்பு +Name[te]=క్యుటి డిఎల్జి ఎడిట్ +Name[th]=แก้ไขกล่องโต้ตอบสำหรับ Qt +Name[ven]=Qt Dlgsengulusa +Name[zh_CN]=Qt 对话框编辑器 +Name[zh_TW]=Qt 對話盒編輯器 +Name[zu]=i-DlgEdit ye-Qt +MimeType= +GenericName=Dialog Editor +GenericName[af]=Dialoog Redigeerder +GenericName[ar]=محرر صناديق حوار +GenericName[az]=Dialoq Editoru +GenericName[be]=Рэдактар дыялогаў +GenericName[bg]=Редактор на диалози +GenericName[bn]=ডায়ালগ সম্পাদক +GenericName[br]=Aozer Formulennoù +GenericName[bs]=Editor Qt dijaloga +GenericName[ca]=Editor de diàlegs +GenericName[cs]=Editor dialogů +GenericName[csb]=Editora dialogòwëch òknów +GenericName[cy]=Golygydd Ymgom +GenericName[da]=Dialog-editor +GenericName[de]=Dialog-Editor +GenericName[el]=Επεξεργαστής διαλόγων +GenericName[en_GB]=Dialogue Editor +GenericName[eo]=Dialogredaktilo por Qt-programoj +GenericName[es]=Editor de diálogos +GenericName[et]=Dialoogide redaktor +GenericName[eu]=Elkarrizketa editorea +GenericName[fa]=ویرایشگر محاوره +GenericName[fi]=Dialogieditori +GenericName[fo]=Samskiftis-ritil +GenericName[fr]=Éditeur de boîtes de dialogue +GenericName[fy]=Dialoochbewurker +GenericName[ga]=Eagarthóir Dialóige +GenericName[gl]=Editor de Diálogos +GenericName[he]=עורך תיבות דו־שיח +GenericName[hi]=संवाद संपादक +GenericName[hr]=Uređivač dijaloga +GenericName[hsb]=Wobdźěłar dialogow +GenericName[hu]=Párbeszédablak-szerkesztő +GenericName[id]=Penyunting Dialog +GenericName[it]=Editor delle finestre di dialogo +GenericName[ja]=ダイアログエディタ +GenericName[ka]=დიალოგის რედაქტორი +GenericName[kk]=QT диалогтар редакторы +GenericName[km]=កម្មវិធី​និពន្ធ​ប្រអប់ +GenericName[ko]=대화 상자 편집기 +GenericName[lo]=ເຄືອ່ງມືແກ້ໄຂກ່ອງໂຕ້ຕອບ +GenericName[lt]=Dialogų Redaktorius +GenericName[lv]=Dialogu Redaktors +GenericName[mk]=Уредувач на дијалози +GenericName[mn]=Диалог-боловсруулагч +GenericName[ms]=Penyunting Dialog +GenericName[mt]=Editur tad-Djalogi +GenericName[nb]=Redigering av dialoger +GenericName[nds]=Dialoog-Editor +GenericName[ne]=संवाद सम्पादक +GenericName[nl]=Dialoogbewerker +GenericName[nn]=Redigering av dialogar +GenericName[nso]=Mofetosi wa Poledisano +GenericName[pa]=ਡਾਇਲਾਗ ਸੰਪਾਦਕ +GenericName[pl]=Edytor okien dialogowych +GenericName[pt]=Editor de Janelas +GenericName[pt_BR]=Editor de diálogos +GenericName[ro]=Editor de dialoguri +GenericName[ru]=Редактор диалогов для Qt +GenericName[rw]=Muhinduzi Ikiganiro +GenericName[se]=Lásešdoaimmaheaddji +GenericName[sk]=Editor dialógov +GenericName[sl]=Urejevalnik pogovornih oken +GenericName[sr]=Уређивач дијалога +GenericName[sr@Latn]=Uređivač dijaloga +GenericName[ss]=Inkhulumo mphendvulwano yemhleli +GenericName[sv]=Dialogeditor +GenericName[ta]=உரையாடற் தொகுப்பாளர் +GenericName[te]=డైలాగ్ ఎడిటర్ +GenericName[tg]=Таҳриргари гуфтугӯ +GenericName[th]=เครื่องมือแก้ไขกล่องโต้ตอบ +GenericName[tr]=İletişim Kutusu Düzenleyicisi +GenericName[tt]=Dialog Tözätkeç +GenericName[uk]=Редактор діалогів +GenericName[uz]=Dialog tahrirchi +GenericName[uz@cyrillic]=Диалог таҳрирчи +GenericName[ven]=Munwali wa Mufhindulano +GenericName[vi]= Trình biên soạn hộp thoại +GenericName[wa]=Aspougneu di purneas +GenericName[xh]=Umhleli Wencoko yababini +GenericName[zh_CN]=对话框编辑器 +GenericName[zh_TW]=對話盒編輯器 +GenericName[zu]=Umlungisi Wengxoxo +Exec=dlgedit +Icon=dlgedit +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Development/eclipse.desktop b/kappfinder/apps/Development/eclipse.desktop new file mode 100644 index 000000000..33d8bce09 --- /dev/null +++ b/kappfinder/apps/Development/eclipse.desktop @@ -0,0 +1,66 @@ +[Desktop Entry] +Exec=eclipse +Name=Eclipse +Name[bn]=একলিপ্স +Name[eo]=Eklipso +Name[fi]=Pimennys +Name[hi]=एक्लिप्स +Name[id]=Elips +Name[lo]=สุริยคราส +Name[lt]=Užtemimas +Name[ne]=ग्रहण +Name[pa]=ਈਲਿਪਸ +Name[rw]=Ubwirakabiri +Name[ta]=ஒருங்கிணைந்த +Name[te]=ఎక్లిప్స్ +Name[tg]=Эклипс +Name[tr]=Tutulma +Name[ven]=Ikilipusi +Name[wa]=Eclipe +Name[xh]=Ucimo lwelanga okanye inyanga +Name[zu]=Ukuphela lwelanga noma inyanga +GenericName=Eclipse IDE +GenericName[ar]=محيط التطوير Eclipse IDE +GenericName[be]=Інтэграванае асяроддзе распрацоўкі Eclipse +GenericName[bn]=একলিপ্স IDE +GenericName[ca]=IDE per a Eclipse +GenericName[csb]=Òkrãżé programòwaniô Eclipse +GenericName[cy]=IDE Eclipse +GenericName[de]=Eclipse-Entwicklungsumgebung +GenericName[eo]=Programada Medio 'Eklipso' +GenericName[es]=IDE Eclipse +GenericName[fi]=Eclipse-kehitysympäristö +GenericName[fr]=Environnement de développement intégré Eclipse +GenericName[ga]=IDE Eclipse +GenericName[gl]=IDE Eclipse +GenericName[he]=סביבת פיתוח מתקדמת Eclipse +GenericName[hi]=एक्लिप्स आईडीई +GenericName[is]=Eclipse forritunarumhverfi +GenericName[it]=IDE Eclipse +GenericName[ja]=EclipseIDE +GenericName[ko]=Eclipse 통합 개발 환경 +GenericName[ms]=IDE Eclipse +GenericName[mt]=IDE Eclipse +GenericName[nds]=Integreert Bewerkenümgeven för Eclipse +GenericName[ne]=ग्रहण IDE +GenericName[pa]=ਈਲਿਪਸ IDE +GenericName[pl]=Środowisko programowania Eclipse +GenericName[pt]=Ambiente de desenvolvimento Eclipse +GenericName[pt_BR]=IDE Eclipse +GenericName[ro]=Mediul IDE de dezvoltare "Eclipse" +GenericName[rw]=Ubwirakabiri IDE +GenericName[sk]=IDE Eclipse +GenericName[sv]=Eclipse integrerad utvecklingsmiljö +GenericName[ta]= ஒருங்கிணைந்த உருவாக்ககம் +GenericName[te]=ఎక్లిప్స్ ఐడిఈ +GenericName[tg]=Эклипси IDE +GenericName[th]=เครื่องมือ IDE สำหรับจาวา +GenericName[vi]=Môi trường phát triển tích hợp Eclipse +GenericName[wa]=Evironmint di programaedje (IDE) «Eclipse» (eclipe) +GenericName[zh_CN]=Eclipse 集成开发环境 +GenericName[zh_TW]=Eclipse 整合開發環境 +X-KDE-StartupNotify=true +MimeType=application/x-designer +Icon=eclipse +Type=Application + diff --git a/kappfinder/apps/Development/fdesign.desktop b/kappfinder/apps/Development/fdesign.desktop new file mode 100644 index 000000000..eeac60350 --- /dev/null +++ b/kappfinder/apps/Development/fdesign.desktop @@ -0,0 +1,55 @@ +[Desktop Entry] +Name=FormDesigner +Name[af]=Vorm-ontwerper +Name[be]=Дызайнер формаў +Name[bn]=ফর্ম-ডিসাইনার +Name[br]=Ergrafer ar paperenn-reol +Name[ca]=Dissenyador de formularis +Name[csb]=Projektant òknów +Name[cy]=DylunyddFfurflenni +Name[eo]=Formulardesegnilo +Name[eu]=Inprimaki diseinatzailea +Name[fo]=Forskriftsformgevari +Name[gl]=Deseñador de Formularios +Name[hi]=फ़ॉर्मडिज़ाइनर +Name[hr]=Dizajner obrazaca +Name[hu]=Űrlaptervező +Name[ja]=フォームデザイナー +Name[ka]=ფორმათა დიზაინერი +Name[kk]=Пішін редакторы +Name[km]=កម្មវិធី​រចនា​សំណុំបែបបទ +Name[lo]=ອອກແບບຟອມ +Name[lt]=Formų redaktorius +Name[lv]=FormuDizainers +Name[mk]=Дизајнер на форми +Name[mn]=Форм дизайнер +Name[ms]=Pereka Borang +Name[ne]=फारम डिजाइनर +Name[nso]=Mohlami wa Foromo +Name[pa]=ਫਾਰਮ ਡਿਜ਼ਾਈਨਰ +Name[pl]=Projektant okien +Name[pt_BR]=Criador de Formulários +Name[ro]=Designer de forme +Name[ru]=Редактор форм +Name[rw]=Muhanzi-Ifishi +Name[sl]=Snovalnik obrazcev +Name[ss]=Kuhlelwa kwesakhiwo +Name[sv]=Formulärdesigner +Name[ta]=படிவ வடிவமைப்பாளர் +Name[te]=ఫారం డిజైనర్ +Name[tg]=Намуди ороишгар +Name[th]=ออกแบบฟอร์ม +Name[tr]=Arayüz Tasarım Aracı +Name[tt]=FormTözegeç +Name[uk]=Дизайнер форм +Name[uz]=Shakl tuzuvchi +Name[uz@cyrillic]=Шакл тузувчи +Name[ven]=Mufhati wa Tshivhumbeo +Name[vi]=Thiết kế Mẫu +Name[zh_CN]=表单设计器 +Name[zh_TW]=表單設計師 +Name[zu]=Umakhi we-fomu +Exec=fdesign +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Development/j2mewtk.desktop b/kappfinder/apps/Development/j2mewtk.desktop new file mode 100644 index 000000000..bbde79f48 --- /dev/null +++ b/kappfinder/apps/Development/j2mewtk.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +GenericName=J2ME Toolkit +GenericName[af]=J2me Gereedskapstel +GenericName[ar]=صندوق العدة لِــ J2ME +GenericName[az]=J2ME Vasitə Dəsti +GenericName[be]=Набор сродкаў J2ME +GenericName[bg]=Инструмент J2ME +GenericName[bn]=J2ME টুলকিট +GenericName[ca]=Joc d'eines J2ME +GenericName[cs]=J2ME toolkit +GenericName[csb]=Zestôw nôrzãdzów dlô J2ME +GenericName[cy]=Blwch offer J2ME +GenericName[da]=J2ME-værktøjspakke +GenericName[de]=J2ME-Dienstprogramme +GenericName[el]=J2ME σετ εργαλείων +GenericName[eo]=J2ME-ilaro +GenericName[es]=Juego de herramientas J2ME +GenericName[et]=J2ME tööriistade komplekt +GenericName[eu]=J2ME tresnak +GenericName[fa]=مجموعه‌ ابزار J2ME +GenericName[fi]=J2ME-työkalut +GenericName[fo]=J2ME amboðskassi +GenericName[fr]=Boîte à outils J2ME +GenericName[fy]=J2ME-toolkit +GenericName[ga]=Foireann Uirlisí J2ME +GenericName[he]=ערכת הכלים J2ME +GenericName[hi]=J2ME टूलकिट +GenericName[hr]=J2ME komplet alata +GenericName[hu]=J2ME IDE +GenericName[is]=J2ME tólasafn +GenericName[it]=Toolkit J2ME +GenericName[ja]=J2ME ツールキット +GenericName[ka]=J2ME ხელსაწყოები +GenericName[kk]=J2ME құралдары +GenericName[km]=ប្រអប់​ឧបករណ៍ J2ME +GenericName[ko]=J2ME 툴킷 +GenericName[lo]=ທູນຄິດ J2ME +GenericName[lv]=J2ME Rīkkopa +GenericName[mk]=J2ME комплет алатки +GenericName[mn]=J2ME-Хэрэгсэл програм +GenericName[ms]=Kit alatan J2ME +GenericName[mt]=Sett ta' għodda J2ME +GenericName[nb]=J2ME-verktøykasse +GenericName[nds]=J2ME-Warktüüchkasten +GenericName[ne]=J2ME उपकरण सेट +GenericName[nl]=J2ME-toolkit +GenericName[nn]=J2ME-verktøysett +GenericName[nso]=Sehlophana sa Dibereka sa J2ME +GenericName[pa]=J2ME ਟੂਲਕਿੱਟ +GenericName[pl]=Zbiór narzędzi dla J2ME +GenericName[pt]=Ferramentas do J2ME +GenericName[pt_BR]=Kit de ferramentas J2ME +GenericName[ro]=Trusă de unelte pentru J2ME +GenericName[ru]=Утилиты J2ME +GenericName[rw]=Agatwarabikoresho J2ME +GenericName[se]=J2ME reaidočoakki +GenericName[sl]=Zbirka orodij J2ME +GenericName[sr]=Ј2ME скуп алата +GenericName[sr@Latn]=J2ME skup alata +GenericName[sv]=J2ME-verktygslåda +GenericName[ta]=J2ME கருவித்தொகுப்பு +GenericName[te]=జె2ఎంఈ టూల్ కిట్ +GenericName[tg]=J2ME-и амалӣ +GenericName[th]=ทูลคิท J2ME +GenericName[tr]=J2ME Araç Takımı +GenericName[tt]=J2ME Qoralları +GenericName[uk]=Комплект J2ME +GenericName[uz]=J2ME vositalar toʻplami +GenericName[uz@cyrillic]=J2ME воситалар тўплами +GenericName[ven]=J2ME Zwishumiswa +GenericName[vi]=Bộ công cụ J2ME +GenericName[xh]=J2ME Ibhokisi yesixhobo +GenericName[zh_CN]=J2ME 工具包 +GenericName[zh_TW]=J2ME 工具組 +GenericName[zu]=Ibhokisi lamathuluzi le-J2ME +Exec=ktoolbar +Icon=ksmiletris +Name=J2ME +Name[af]=J2me +Name[sr]=Ј2ME +Name[te]=జె2ఎంఈ +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Development/linguist.desktop b/kappfinder/apps/Development/linguist.desktop new file mode 100644 index 000000000..fd3cdd85d --- /dev/null +++ b/kappfinder/apps/Development/linguist.desktop @@ -0,0 +1,141 @@ +[Desktop Entry] +Exec=linguist +Name=Qt Linguist +Name[ar]=لغوي Qt +Name[be]=Перакладчык Qt +Name[bn]=কিউ-টি লিঙ্গুইস্ট +Name[ca]=Lingüista Qt +Name[csb]=Lingwista Qt +Name[cy]=Ieithydd Qt +Name[de]=Qt-Linguist +Name[eo]=Qt-Lingvisto +Name[es]=Lingüista Qt +Name[fa]=Qt زبان‌شناس +Name[fi]=Qt Linquist +Name[fy]=Qt Linquist +Name[gl]=Lingüista Qt +Name[hi]=क्यूटी लिंग्विस्ट +Name[hr]=Qt Lingvist +Name[ka]=Qt ლინგვისტი +Name[kk]=Qt лингвисті +Name[km]=ភាសាវិទូ Qt +Name[lo]=ແປພາສາຂອງ Qt +Name[lv]=Qt Lingvists +Name[mk]=Qt-Јазичар +Name[mn]=Qt-Хэл зүй +Name[ms]=Jurubahasa Qt +Name[mt]=Lingwist Qt +Name[nb]=Qt-Linguist +Name[nds]=Qt-Linguist +Name[ne]=Qt बहुभाषी +Name[nl]=Qt Linquist +Name[nso]=Sekaleleme sa Qt +Name[pa]=Qt ਲੈਂਗੂਇਸਟ +Name[pl]=Lingwista Qt +Name[ru]=Qt Лингвист +Name[rw]=Byindimi Qt +Name[sl]=Jezikoslovec Qt +Name[sv]=Qt linguist +Name[ta]=Qt மொழியறிஞர் +Name[te]=క్యుటి లింగ్విస్ట్ +Name[tg]=Забоншиноси Qt +Name[th]=แปลภาษาของ Qt +Name[tr]=Qt Dilci +Name[tt]=Qt Telbelgeç +Name[uk]=Qt-лінгвіст +Name[uz]=Qt lingvist +Name[uz@cyrillic]=Qt лингвист +Name[ven]=Qt Radzinyambo +Name[vi]=Ngôn ngữ Qt +Name[xh]=Usolwimi we Qt +Name[zh_CN]=Qt 语言家 +Name[zh_TW]=Qt 語言學家 +Name[zu]=Owozolimi we-Qt +GenericName=Translation Tool +GenericName[af]=Vertaling Program +GenericName[ar]=أداة للترجمة +GenericName[az]=Tərcümə Vasitəsi +GenericName[be]=Праграма перакладу +GenericName[bg]=Инструмент за превод +GenericName[bn]=অনুবাদ টুল +GenericName[br]=Ostilh troidigezh +GenericName[bs]=Alat za prevođenje +GenericName[ca]=Eina de traducció +GenericName[cs]=Překladatelský nástroj +GenericName[csb]=Nôrzãdze dlô dolmôczów +GenericName[cy]=Erfyn Cyfieithu +GenericName[da]=Oversættelsesværktøj +GenericName[de]=Übersetzungsprogramm +GenericName[el]=Εργαλείο μεταφράσεων +GenericName[eo]=Tradukilo por Qt-programoj +GenericName[es]=Herramienta de traducción +GenericName[et]=Tõlkimise rakendus +GenericName[eu]=Itzulpenerako tresnak +GenericName[fa]=ابزار ترجمه +GenericName[fi]=Käännöstyökalu +GenericName[fo]=Umsetingaramboð +GenericName[fr]=Outil de traduction +GenericName[fy]=Oersetprogramma +GenericName[ga]=Uirlis Aistriúcháin +GenericName[gl]=Ferramenta de Tradución +GenericName[he]=כלי תרגום +GenericName[hi]=अनुवाद औज़ार +GenericName[hr]=Alat za prevođenje +GenericName[hsb]=Grat za přełožowanje +GenericName[hu]=Fordítássegítő +GenericName[id]=Kakas Penerjemah +GenericName[is]=Þýðingartól +GenericName[it]=Strumento per le traduzioni +GenericName[ja]=翻訳ツール +GenericName[ka]=სათარგმნი ხელსაწყო +GenericName[kk]=Аудару құралы +GenericName[km]=កម្មវិធី​បកប្រែ +GenericName[ko]=번역 도구 +GenericName[lo]=ເຄື່ອງມືແປພາສາ +GenericName[lt]=Vertimo įrankis +GenericName[lv]=Tulkošanas Rīks +GenericName[mk]=Алатка за преведување +GenericName[mn]=Орчуулгын програм +GenericName[ms]=Perkakasan Penterjemahan +GenericName[mt]=Għodda tat-traduzzjoni +GenericName[nb]=Oversettelsesverktøy +GenericName[nds]=Warktüüch för't Översetten +GenericName[ne]=अनुवाद उपकरण +GenericName[nl]=Vertaalprogramma +GenericName[nn]=Omsetjingsverktøy +GenericName[nso]=Sebereka sa Thlathollo +GenericName[pa]=ਅਨੁਵਾਦ ਸੰਦ +GenericName[pl]=Narzędzie dla tłumaczy +GenericName[pt]=Ferramenta de Tradução +GenericName[pt_BR]=Ferramenta de Tradução +GenericName[ro]=Utilitar pentru traduceri +GenericName[ru]=Переводчик для Qt +GenericName[se]=Jorgalanreaidu +GenericName[sk]=Prekladací nástroj +GenericName[sl]=Orodje za prevajanje +GenericName[sr]=Алат за превођење +GenericName[sr@Latn]=Alat za prevođenje +GenericName[ss]=Lithulusi lekuhumusha +GenericName[sv]=Översättningsverktyg +GenericName[ta]=மொழிபெயர்ப்புக் கருவி +GenericName[te]=అనువాద పనిముట్టు +GenericName[tg]=Асбоби тарҷумакунӣ +GenericName[th]=เครื่องมือแปลภาษา +GenericName[tr]=Çeviri Aracı +GenericName[tt]=Tärcemäläw Qoralı +GenericName[uk]=Засіб для перекладів +GenericName[uz]=Tarjima qilish vositasi +GenericName[uz@cyrillic]=Таржима қилиш воситаси +GenericName[ven]=Zwishumiswa zwau Dologa +GenericName[vi]=Công cụ dịch +GenericName[wa]=Usteye di ratournaedje +GenericName[xh]=Isixhobo Soguqulelo lomsebenzi kolunye ulwimi +GenericName[zh_CN]=翻译工具 +GenericName[zh_TW]=翻譯工具 +GenericName[zu]=Ithuluzi Lokuguqulela +X-KDE-StartupNotify=true +MimeType=application/x-linguist +Terminal=false +Type=Application +Icon=linguist + diff --git a/kappfinder/apps/Development/pose.desktop b/kappfinder/apps/Development/pose.desktop new file mode 100644 index 000000000..7b5ef3d4d --- /dev/null +++ b/kappfinder/apps/Development/pose.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +GenericName=Palm/Wireless Emulator +GenericName[af]=Palm/Draadloos Emulasie +GenericName[ar]=مضاهِ Palm/اللاسلكي +GenericName[az]=Palm/Wireless Emulyatoru +GenericName[be]=Эмулятар Palm +GenericName[bg]=Palm/Wireless емулатор +GenericName[bn]=পাম (Palm) / বেতার (Wireless) এমুলেটর +GenericName[br]=Kendarvanerezh Palm/Wireless +GenericName[bs]=Palm/Wireless simulator +GenericName[ca]=Emulador Palm/Wireless +GenericName[cs]=Emulátor Palm/Wireless +GenericName[csb]=Emùlator Palma/bezkablowegò ùrządzeniô +GenericName[cy]=Efelychydd Palm/Diwifren +GenericName[da]=Palm-/Wireless-emulator +GenericName[de]=Emulator für drahtlosen Palm +GenericName[el]=Προσομοιωτής Palm/Wireless +GenericName[eo]=Palmo/sendrata emulilo +GenericName[es]=Emulador Palm/Inalámbrico +GenericName[et]=Palm/Wireless emulaator +GenericName[eu]=Palm/Wireless emuladorea +GenericName[fa]=مقلد رایانۀ جیبی/بی‌سیم +GenericName[fi]=Palm/Wireless-emulaattori +GenericName[fo]=Palm/Wireless hermari +GenericName[fr]=Émulateur de Palm sans fil +GenericName[fy]=Palm/Wireless emulator +GenericName[ga]=Aithriseoir Ríomhaire Boise/Gan Sreang +GenericName[gl]=Emulador de Palm/Wireless +GenericName[he]=אמולטור פאלם\אלחוט +GenericName[hi]=पॉम/वायरलेस एमुलेटर +GenericName[hr]=Emulator Palm/bežičnih uređaja +GenericName[hu]=Palm/Wireless-emulátor +GenericName[id]=Emulator Palm/Wireless +GenericName[is]=Palm/þráðlaus hermir +GenericName[it]=Emulatore Palm/Wireless +GenericName[ja]=Palm/ワイヤレスエミュレータ +GenericName[ka]=Palm/Wireless–ის ემულატორი +GenericName[kk]=Palm/Wireless эмуляторы +GenericName[km]=កម្មវិធីស្ថានីយ៍ Palm/Wireless +GenericName[ko]=Palm/무선 에뮬레이터 +GenericName[lo]=ຕົວຈຳລອງປາມ/ອຸປະກອນໄຮ້ສາຍ +GenericName[lt]=Palm/Wireless emuliatorius +GenericName[lv]=Palm/Bezvadu Emulators +GenericName[mk]=Емулатор за Palm/Wireless +GenericName[mn]=Утасгүй Палмын эмулатор +GenericName[ms]=Emulator Palm/Wireless +GenericName[mt]=Emulatur Palm/Wireless +GenericName[nb]=Palm/trådløsemulator +GenericName[nds]=Emulator för drahtlosen Palm +GenericName[ne]=हत्केला/तार रहीत इमुलेटर +GenericName[nl]=Palm/Wireless emulator +GenericName[nn]=Palm-/Wireless-emulator +GenericName[nso]=Moekisi wa Palm/Wireless +GenericName[pa]=ਪਾਮ/ਬੇਤਾਰ ਸਮਰੂਪੀ +GenericName[pl]=Emulator Palma/urządzenia bezprzewodowego +GenericName[pt]=Emulador de Palm/Wireless +GenericName[pt_BR]=Emulador de Palm/Wireless +GenericName[ro]=Emulator Palm Pilot +GenericName[ru]=Эмулятор Palm/Wireless +GenericName[rw]=Mukuruzi Kiganza/Ntamugozi +GenericName[se]=Palm/Wireless-emuláhtor +GenericName[sk]=Emulátor Palm/Wireless +GenericName[sl]=Emulator brezžičnega palma +GenericName[sr]=Palm/Wireless емулатор +GenericName[sr@Latn]=Palm/Wireless emulator +GenericName[ss]=Palm/Silingiseli lesingasebentisi wayela +GenericName[sv]=Emulator för trådlös Palm +GenericName[ta]=கையடக்க/கம்பியில்லாபோன்மி +GenericName[te]=పామ్/వైర్ లెస్ ఎములెటర్ +GenericName[tg]=Эмулятори Palm/Wireless +GenericName[th]=ตัวจำลองปาล์ม/อุปกรณ์ไร้สาย +GenericName[tr]=Palm Emülasyonu +GenericName[tt]=Palm/Çıbıqsız Oxşaşlawçı +GenericName[uk]=Емулятор Palm/Wireless +GenericName[uz]=Palm/Wireless emulyatori +GenericName[uz@cyrillic]=Palm/Wireless эмулятори +GenericName[ven]=Gundo/Mutevhedzeli wa zwisina ludarata +GenericName[vi]=Mô phỏng không dây/máy cầm tay +GenericName[wa]=Emulateu Palm/Sins fyi +GenericName[zh_CN]=Palm/无线设备模拟器 +GenericName[zh_TW]=Palm/無線裝置 模擬器 +GenericName[zu]=Umlingisi Wesandla/Ongenantambo +Exec=pose +Icon=ksmiletris +Name=Pose +Name[af]=Poseer +Name[eo]=Pozo +Name[hi]=पोज़ +Name[hr]=Poze +Name[lv]=Poza +Name[ne]=ढङ्ग +Name[nso]=Hlagisa +Name[pa]=ਪੋਸ +Name[rw]=Ipoze +Name[te]=పోజ్ +Name[ven]=Vhekanya +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Development/sced.desktop b/kappfinder/apps/Development/sced.desktop new file mode 100644 index 000000000..959718f6d --- /dev/null +++ b/kappfinder/apps/Development/sced.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=Sced +Name[eo]=Scenodesegnilo +Name[hi]=सेड(Sced) +Name[ne]=स्केड +Name[ta]=ஓவியக்கருவி +Name[te]=సెడ్ +GenericName=Scene Modeler +GenericName[af]=Beeld Moduleerder +GenericName[ar]=أداة لنمذجة المشاهد +GenericName[az]=Səhnə Modelləyicisi +GenericName[be]=Рэдактар сцэнаў +GenericName[bg]=Моделиране на сцени +GenericName[bn]=ত্রিমাত্রিক মডেলার +GenericName[ca]=Modelador d'escenes +GenericName[cs]=Modelář scén +GenericName[csb]=Mòdelowanié bunë +GenericName[cy]=Modelydd Golygfa +GenericName[da]=Scene-modellering +GenericName[de]=Szenen-Modellierer +GenericName[el]=Μοντελοποιητής σκηνών +GenericName[en_GB]=Scene Modeller +GenericName[eo]=Desegnilo por tridimensiaj scenoj +GenericName[es]=Modelador de escenas +GenericName[et]=Scene modelleerija +GenericName[fa]=مدل‌ساز صحنه +GenericName[fi]=Maisemamallintaja +GenericName[fo]=Leikpallstilgerð +GenericName[fr]=Modeleur de scène +GenericName[fy]=Sêne-modelearprogramma +GenericName[ga]=Insamhlóir Amhairc +GenericName[gl]=Modelador de Cenas +GenericName[he]=ממדל סצנות +GenericName[hi]=सीन माडलर +GenericName[hr]=Program za modeliranje scena +GenericName[hu]=Grafikus modellező +GenericName[is]=Sviðshönnuður +GenericName[it]=Modellatore di scene +GenericName[ja]=シーンモデラー +GenericName[ko]=장면 모델러 +GenericName[lt]=Scenos modeliuotojas +GenericName[lv]=Scēnu Modelētājs +GenericName[mk]=Моделирач на сцени +GenericName[mn]=Дүр зураг загварчилагч +GenericName[ms]=Pensimulasi Pemandangan +GenericName[mt]=Modellatur tax-xeni +GenericName[nb]=Scenemodellering +GenericName[ne]=दृश्य नमूना बनाउने +GenericName[nl]=Scene-modeleerprogramma +GenericName[nn]=Scenemodellering +GenericName[nso]=Sefamokgwa sa Tiragalo +GenericName[pa]=Scene ਮੋਡੀਲੀਰ +GenericName[pl]=Modelowanie sceny +GenericName[pt]=Modelador de Cenas +GenericName[pt_BR]=Modelador de Cenas +GenericName[ro]=Modelator de scene 3D +GenericName[se]=Lávderáhkadeaddji +GenericName[sk]=Modelovanie scén +GenericName[sl]=Modelirnik scen +GenericName[sr]=Моделар сцена +GenericName[sr@Latn]=Modelar scena +GenericName[ss]=Siphatsi sesehlakalo +GenericName[sv]=Scenmodelleringsverktyg +GenericName[ta]=கண்காட்சி வடிவமைப்பாளர் +GenericName[te]=సీన్ మోడెలర్ +GenericName[tg]=Модулгари Scene +GenericName[th]=เครื่องมือสร้างโมเดลฉาก +GenericName[tr]=Manzara Modelleme Programı +GenericName[uk]=Модельєр сцен +GenericName[ven]=Ramodele wa Henefho +GenericName[vi]=Trình tạo mẫu cảnh +GenericName[wa]=Modeleu d' sinne +GenericName[zh_CN]=场景生成器 +GenericName[zh_TW]=場景繪製程式 +GenericName[zu]=Umenzi wesiqephu +Exec=sced +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Games/Arcade/ClanBomber.desktop b/kappfinder/apps/Games/Arcade/ClanBomber.desktop new file mode 100644 index 000000000..c159b902b --- /dev/null +++ b/kappfinder/apps/Games/Arcade/ClanBomber.desktop @@ -0,0 +1,108 @@ +[Desktop Entry] +Name=ClanBomber +Name[af]=Klanbommer +Name[bn]=ক্ল্যান বোমারু +Name[eo]=Klanbombanto +Name[hi]=क्लेनबॉम्बर +Name[is]=Clanbomber +Name[ja]=Clan ボンバー +Name[nb]=Clanbomber +Name[ne]=क्लानबम्बर +Name[nn]=Clanbomber +Name[pa]=ਕਲਾਨ ਬੰਬਰ +Name[se]=Clanbomber +Name[sl]=Clanbomber +Name[sv]=Klanbombare +Name[ta]=க்ளான்பாம்பர் +Name[te]=క్లాన్ బాంబర్ +Name[tt]=Clanbomber +Name[zh_CN]=爆破兵 +Name[zh_TW]=ClanBomber 炸彈超人 +Name[zu]=Umqhumisi wesigodi +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=clanbomber +Terminal=false +Icon=clanbomber +Type=Application diff --git a/kappfinder/apps/Games/Arcade/FrozenBubble.desktop b/kappfinder/apps/Games/Arcade/FrozenBubble.desktop new file mode 100644 index 000000000..87a68d505 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/FrozenBubble.desktop @@ -0,0 +1,116 @@ +[Desktop Entry] +GenericName=Tetris-Like Game +GenericName[af]=Tetris tipe Speletjie +GenericName[ar]=لعبة شبيهة لِــ Tetris +GenericName[az]=Tetris Bənzəri Oyun +GenericName[be]=Гульня тыпу tetris +GenericName[bg]=Тетрис +GenericName[bn]=টেট্রিস-এর মত খেলা +GenericName[br]=Ur c'hoari a seurt gant Tetris +GenericName[bs]=Igra nalik na Tetris +GenericName[ca]=Jocs com el Tetris +GenericName[cs]=Hra podobná Tetris +GenericName[csb]=Gra juwernô do Tetris +GenericName[cy]=Gêm sy'n debyg i Tetris +GenericName[da]=Tetris-lignende spil +GenericName[de]=Tetris-ähnliches Spiel +GenericName[el]=Παιχνίδι παρόμοιο με το Tetris +GenericName[eo]=Kahela ludo +GenericName[es]=Juego tipo Tetris +GenericName[et]=Tetrise-laadne mäng +GenericName[eu]=Tetris erako jokua +GenericName[fa]=بازی Tetris-Like +GenericName[fi]=Tetriksen tapainen peli +GenericName[fr]=Jeu à la Tetris +GenericName[fy]=Tetris-fariant +GenericName[ga]=Cluiche cosúil le Tetris +GenericName[gl]=Xogo tipo Tetris +GenericName[he]=משחק דמוי טטריס +GenericName[hi]=टेट्रिस जैसे खेल +GenericName[hr]=Igra nalik na Tetris +GenericName[hsb]=Tetrisowe hry +GenericName[hu]=Tetris-szerű +GenericName[id]=Permainan ala Tetris +GenericName[is]=Leikur líkur Tetris +GenericName[it]=Gioco tipo-tetris +GenericName[ja]=テトリス風ゲーム +GenericName[ka]=თეთრისის მსგავსი თამაშები +GenericName[kk]=Тетрис-секілді ойын +GenericName[km]=ល្បែង​សង់ផ្ទះ +GenericName[ko]=테트리스류 게임 +GenericName[lt]=Tetris primenantis žaidimas +GenericName[lv]=Tetrim līdzīga Spēle +GenericName[mk]=Игра како тетрис +GenericName[mn]=Тетрис төрлийн тоглоомууд +GenericName[ms]=Permainan Ala Tetris +GenericName[mt]=Logħoba bħal Tetris +GenericName[nb]=Tetris-aktig spill +GenericName[nds]=En Speel as Tetris +GenericName[ne]=टेट्रिस-खेल जस्तो +GenericName[nl]=Tetris-variant +GenericName[nn]=Tetris-aktig spel +GenericName[pa]=ਟੀਚਰੀਸ ਵਰਗੀ ਖੇਡ +GenericName[pl]=Gra podobna do Tetris +GenericName[pt]=Jogo tipo Tetris +GenericName[pt_BR]=Jogo parecido com oTetris +GenericName[ro]=Joc de Tetris +GenericName[ru]=Тетрис-подобная игра +GenericName[rw]=Umukino Tetris-Like +GenericName[se]=Tetris-lágan speallu +GenericName[sk]=Hra v štýle Tetris +GenericName[sl]=Igra podobna Tetrisu +GenericName[sr]=Игра налик на Тетрис +GenericName[sr@Latn]=Igra nalik na Tetris +GenericName[sv]=Tetrisliknande spel +GenericName[ta]=டெட்ரிஸ்-ஒத்த விளையாட்டு +GenericName[te]=టెట్రిస్ లాంటి ఆట +GenericName[tg]=Бозии тетрис +GenericName[th]=เกมแบบเททริส +GenericName[tr]=Tetris Benzeri Bir Oyun +GenericName[tt]=Tetris kebek Uyın +GenericName[uk]=Гра "а ля" Тетрис +GenericName[uz]=Tetrisga oʻxshagan oʻyin +GenericName[uz@cyrillic]=Тетрисга ўхшаган ўйин +GenericName[vi]=Trò chơi kiểu xếp hình +GenericName[wa]=Djeu rashonnant a tetrisse +GenericName[zh_CN]=类俄罗斯方块游戏 +GenericName[zh_TW]=Tetris-Like 遊戲 +Exec=frozen-bubble +Icon=frozen_bubble +Name=Frozen Bubble +Name[ar]=الطابات المجمدة +Name[bn]=ফ্রোজেন বাবল +Name[csb]=Zamrozoné bąbelczi +Name[cy]=Swigen Rhewllyd (Frozen Bubble) +Name[da]=Frossen bobbel +Name[de]=Gefrorene Blase +Name[eo]=Neŝanĝebla bobelo +Name[es]=Burbuja congelada +Name[fa]=حباب یخ‌زده +Name[hi]=बर्फीले बुलबुले +Name[hr]=Smrznuti mjehurić +Name[is]=Frosin kúla +Name[ja]=フローズンバブル +Name[lt]=Užšalę burbulai +Name[lv]=Sasaldētie Burbuļi +Name[mn]=фрозын бөмбөлөгүүд +Name[ne]=फ्रोजेन बबल +Name[pa]=ਜੰਮਿਆ ਬੁਬਲਾ +Name[pl]=Zamrożone bąbelki +Name[ro]=Bulă înghețată +Name[rw]=Umubumberufuro Wakonje +Name[sl]=Zamrznjen mehurček +Name[sv]=Fryst bubbla +Name[te]=గడ్డకట్టీన బుడగ +Name[tg]=Пуфаки Яхдор +Name[tr]=Donmuş Toplar +Name[uk]=Замерзла бульбашка +Name[uz]=Yaxlagan pufakchalar +Name[uz@cyrillic]=Яхлаган пуфакчалар +Name[vi]=Bong bóng đóng băng +Name[wa]=Djeu d' årcåde Frozen-Bubble +Name[zh_CN]=泡泡龙 +Name[zh_TW]=冰凍氣泡 +Path= +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Arcade/Gnibbles.desktop b/kappfinder/apps/Games/Arcade/Gnibbles.desktop new file mode 100644 index 000000000..d17b3c99d --- /dev/null +++ b/kappfinder/apps/Games/Arcade/Gnibbles.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=Gnibbles +Name[bn]=জীনিবল্‌স +Name[cy]=Gtameidiau +Name[eo]=Rodoj +Name[fr]=GNibbles +Name[hi]=गनिब्बल्स +Name[is]=Gnibbels +Name[ne]=जिनिबल्स +Name[pa]=ਨਿਬੱਲ +Name[ta]=க்ரிப்பல்ஸ் +Name[te]=గ్నిబ్బిల్స్ +Name[tg]=Кирми боронӣ +Name[ven]=GLumiwa +Name[zh_TW]=貪食蛇 +GenericName=GNOME Nibbles Game +GenericName[af]=Gnome Nibbles Speletjie +GenericName[ar]=لعبة GNOME Nibbles +GenericName[az]=Gnome Nibbles Oyunu +GenericName[be]=Гульня Nibbles ад GNOME +GenericName[bg]=Игра GNOME Nibbles +GenericName[bn]=গনোম নিবল্‌স খেলা +GenericName[bs]=GNOME Nibbles igra +GenericName[ca]=Joc Nibbles del GNOME +GenericName[cs]=Hra Gnome Nibbles +GenericName[csb]=Gra Nibbles ("Ògrëzanié") dlô Gnome +GenericName[cy]=Gêm Tameidiau GNOME +GenericName[da]=GNOME Nibbles-spil +GenericName[de]=Nibbles-Spiel (GNOME) +GenericName[el]=Παιχνίδι Nibbles του GNOME +GenericName[eo]=Gnoma Rodludo +GenericName[es]=Juego GNOME de Nibbles +GenericName[et]=GNOME Nibbles mäng +GenericName[eu]=GNOME Nibbles jokoa +GenericName[fa]=گنوم Nibbles بازی +GenericName[fi]=Gnome Nibbles -peli +GenericName[fo]=GNOME Nibble Spæl +GenericName[fr]=Jeu Nibbles pour Gnome +GenericName[fy]=GNOME Nibbles Spul +GenericName[ga]=Cluiche Nibbles GNOME +GenericName[gl]=Xogo Nibbles de GNOME +GenericName[he]=משחק Nibbles ל־GNOME +GenericName[hi]=ग्नोम निब्बल्स खेल +GenericName[hr]=GNOME igra slična Nibbles-u +GenericName[hsb]=GNOME Nibbles +GenericName[hu]=GNOME Nibbles +GenericName[is]=GNOME Nibbles leikur +GenericName[it]=Gioco nibbles di GNOME +GenericName[ja]=GNOME Nibbles ゲーム +GenericName[ka]=თამაში GNOME Nibbles +GenericName[kk]=GNOME ойыны +GenericName[ko]=GNOME 니블즈 게임 +GenericName[lt]=GNOME Nibbles žaidimas +GenericName[lv]=GNOME Nibbles Spēle +GenericName[mk]=GNOME Nibbles игра +GenericName[mn]=Гномын тоглоом +GenericName[mt]=Logħba Nibbles tal-GNOME +GenericName[nb]=Nibbles-spill for GNOME +GenericName[nds]=Nibbles-Speel vun GNOME +GenericName[ne]=जिनोम निबल्स खेल +GenericName[nl]=GNOME Nibbles Spel +GenericName[nn]=Nibbles-spel for GNOME +GenericName[nso]=Papadi ya GNOME Nibbles +GenericName[pa]=ਗਨੋਮ ਨਿੱਬਲ ਖੇਡ +GenericName[pl]=Gra Nibbles ("Ogryzanie") dla Gnome +GenericName[pt]=Jogo Nibbles do GNOME +GenericName[pt_BR]=Jogo Asteróides do GNOME +GenericName[ro]=Un joc Nibbles pentru GNOME +GenericName[ru]=Игра GNOME +GenericName[rw]=Umukino Nibbles wa GNOME +GenericName[se]=GNOME Nibbles-speallu +GenericName[sk]=Hra GNOME Nibbles +GenericName[sl]=Igra Gnome Nibbles +GenericName[sr]=Гномова Ниблес игра +GenericName[sr@Latn]=Gnomova Nibles igra +GenericName[ss]=Umdlalo wekudlakancane GNOME +GenericName[sv]=Gnome-spelet Nibbles +GenericName[ta]=ஜினோம் நிப்பல்ஸ் விளையாட்டு +GenericName[te]=గ్నొమ్ నిబ్బిల్స్ ఆట +GenericName[tg]=Бозии GNOME Nibbles +GenericName[th]=เกม Nibbles ของ GNOME +GenericName[tr]=GNOME Nibbles Oyunu +GenericName[tt]=GNOME Nibbles Uyını +GenericName[uk]=Гра Nibbles для GNOME +GenericName[uz]=GNOME uchun Nibbles oʻyini +GenericName[uz@cyrillic]=GNOME учун Nibbles ўйини +GenericName[ven]=GNOME Mutambo wa u Lumiwa +GenericName[vi]=Trò GNOME Nibbles +GenericName[wa]=Djeu GNOME di viers +GenericName[xh]=GNOME Umdlalo we Nibbles +GenericName[zh_CN]=GNOME Nibbles 游戏 +GenericName[zh_TW]=GNOME 貪食蛇遊戲 +GenericName[zu]=Umdlalo Wokuququda we-GNOME +Exec=gnibbles +Terminal=false +Icon=gnome-nibbles +Type=Application diff --git a/kappfinder/apps/Games/Arcade/GnobotsII.desktop b/kappfinder/apps/Games/Arcade/GnobotsII.desktop new file mode 100644 index 000000000..d713ca1e5 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/GnobotsII.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Gnobots II +Name[af]=Gnobots Ii +Name[bn]=দ্বিতীয় গুহ্‌নোবট্‌স +Name[eo]=Gnobotoj II +Name[hi]=गनोबोट्स II +Name[ne]=जिनोबुट्स II +Name[pa]=ਜੀ ਨੋਬੋਟਸ II +Name[ta]=க்னோபாட்ஸ் II +Name[te]=గ్నొబాట్స్ II +Name[zh_TW]=GNOME 機器人二代 +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=gnobots2 +Terminal=false +Icon=gnome-gnobots +Type=Application diff --git a/kappfinder/apps/Games/Arcade/Makefile.am b/kappfinder/apps/Games/Arcade/Makefile.am new file mode 100644 index 000000000..a37318d71 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/Makefile.am @@ -0,0 +1,8 @@ +kappfinder_games_arcade_data_DATA = TuxRacer.desktop ClanBomber.desktop Gnibbles.desktop \ + rocksndiamonds.desktop GnobotsII.desktop SuperMethaneBrothers.desktop \ + XKobo.desktop cxhextris.desktop Mures.desktop Trophy.desktop \ + XSoldier.desktop alephone.desktop alephone-nogl.desktop FrozenBubble.desktop + +kappfinder_games_arcade_datadir = $(kde_datadir)/kappfinder/apps/Games/Arcade + +EXTRA_DIST = $(kappfinder_games_arcade_data_DATA) diff --git a/kappfinder/apps/Games/Arcade/Mures.desktop b/kappfinder/apps/Games/Arcade/Mures.desktop new file mode 100644 index 000000000..7e5260664 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/Mures.desktop @@ -0,0 +1,103 @@ +[Desktop Entry] +Name=Mures +Name[csb]=Òbronné mùrë +Name[cy]=Muriau +Name[eo]=Katenoj +Name[hi]=म्यूर्स +Name[ne]=मुरेज +Name[pa]=ਮੂਰੀਸ +Name[pl]=Mury obronne +Name[pt]=Muros +Name[ta]=Mures-விளையாட்டு +Name[te]=మురెస్ +Name[tg]=Мушакҳо +Name[vi]=Dâu dại +Name[zh_TW]=Mures 貓捉老鼠 +Name[zu]=Amagundanyana +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=mures +Terminal=false +Icon=mures +Type=Application diff --git a/kappfinder/apps/Games/Arcade/SuperMethaneBrothers.desktop b/kappfinder/apps/Games/Arcade/SuperMethaneBrothers.desktop new file mode 100644 index 000000000..fb5c4b08b --- /dev/null +++ b/kappfinder/apps/Games/Arcade/SuperMethaneBrothers.desktop @@ -0,0 +1,127 @@ +[Desktop Entry] +Name=Super Methane Brothers +Name[af]=Super Metaan Broers +Name[bn]=সুপার মিথেন ব্রাদার্স +Name[ca]=Els germans Super metà +Name[csb]=Bracynowie supemetanowcë +Name[cy]=Brodyr Super Methane +Name[eo]=Supermetanaj fratoj +Name[es]=Los hermanos super metano +Name[eu]=Super Methane anaiak +Name[fa]=برادران Super Methane +Name[fo]=Super Methan Brøður +Name[hi]=सुपर मीथेन ब्रदर्स +Name[hr]=Super metanolska braća +Name[is]=Súper metan bræðurnir +Name[ja]=スーパーメタンブラザーズ +Name[kk]=Супер Метан ағайындар +Name[lt]=Super metaniniai broliai +Name[lv]=Super Metāna Brāļi +Name[mn]=Митаны ах +Name[ne]=सुपर मेथाने दाजुभाई +Name[nso]=Masogana a Super Methane +Name[pa]=ਸੁਪਰ ਮੀਥੇਨ ਭਰਾ +Name[pl]=Bracia supermetanowcy +Name[ru]=Братья Метаны +Name[sl]=Super metanska bratovščina +Name[ta]=சிறந்த மாத்தேன் சகோதரர்கள் +Name[te]=సూపర్ మీథేన్ సోదరులు +Name[tg]=Бародарони метан +Name[th]=ซูเปอร์มีเธนบราเธอร์ส +Name[tr]=Süper Metan Kardeşler +Name[tt]=Bertuğannar Methane +Name[uz]=Super metan aka-ukalar +Name[uz@cyrillic]=Супер метан ака-укалар +Name[ven]=Vhakomana vhahulwane vha Ha-Methane +Name[vi]=Anh em siêu mêtan +Name[wa]=Fréres Super Metane +Name[zh_CN]=超级 Methane 兄弟 +Name[zh_TW]=超級瓦斯兄弟 +Name[zu]=Obhuti be-Super Methane +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=methane +Terminal=false +Icon=methane +Type=Application diff --git a/kappfinder/apps/Games/Arcade/Trophy.desktop b/kappfinder/apps/Games/Arcade/Trophy.desktop new file mode 100644 index 000000000..76ea5072d --- /dev/null +++ b/kappfinder/apps/Games/Arcade/Trophy.desktop @@ -0,0 +1,119 @@ +[Desktop Entry] +Name=Trophy +Name[af]=Trofee +Name[bn]=ট্রোফি +Name[csb]=Trofeùm +Name[eo]=Trofeo +Name[fo]=Minnisfongur +Name[hi]=ट्रॉफी +Name[hr]=Trofej +Name[ka]=ჯილდო +Name[kk]=Олжа +Name[lv]=Trofeja +Name[mn]=Трофу +Name[mt]=Trofew +Name[ne]=ट्रफी +Name[pa]=ਟਰਾਫ਼ੀ +Name[pl]=Trofeum +Name[pt]=Troféu +Name[ru]=Трофей +Name[sl]=Trofeja +Name[ss]=Indzebe +Name[ta]=கோப்பை +Name[te]=ట్రొఫి +Name[tg]=Трофи +Name[tt]=Ğänimät +Name[uk]=Трофей +Name[uz]=Trofi +Name[uz@cyrillic]=Трофи +Name[ven]=Khaphu +Name[vi]=Cúp +Name[xh]=Indebe +Name[zu]=Inkomishi +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=trophy +Terminal=false +Icon=trophy +Type=Application diff --git a/kappfinder/apps/Games/Arcade/TuxRacer.desktop b/kappfinder/apps/Games/Arcade/TuxRacer.desktop new file mode 100644 index 000000000..abb8bf7eb --- /dev/null +++ b/kappfinder/apps/Games/Arcade/TuxRacer.desktop @@ -0,0 +1,108 @@ +[Desktop Entry] +GenericName=Racing Game +GenericName[af]=Resies Speletjie +GenericName[ar]=لعبة سباق +GenericName[az]=Yarış Oyunu +GenericName[be]=Гонкі +GenericName[bg]=Рали с пингвин +GenericName[bn]=রেস খেলা +GenericName[bs]=Trkaća igra +GenericName[ca]=Joc de carreres +GenericName[cs]=Závodní hra +GenericName[csb]=Gòńbë +GenericName[cy]=Gêm Rasio +GenericName[da]=Racerspil +GenericName[de]=Ein Wettrennen +GenericName[el]=Παιχνίδι αγώνων ταχύτητας +GenericName[eo]=Skikonkura ludo kun pingveno +GenericName[es]=Juego de carreras +GenericName[et]=Kihutamismäng +GenericName[eu]=Lasterketa jokoa +GenericName[fa]=بازی Racing +GenericName[fi]=Kilpa-autopeli +GenericName[fo]=Kappkoyringarspæl +GenericName[fr]=Jeu de course +GenericName[fy]=Racespul +GenericName[ga]=Cluiche Rásála +GenericName[gl]=Xogo de Carreiras +GenericName[he]=משחק מירוצים +GenericName[hi]=दौड़ का खेल +GenericName[hr]=Trkačka igra +GenericName[hsb]=Napřemojězdźenja +GenericName[hu]=Verseny +GenericName[id]=Permainan Balap +GenericName[is]=Tux á fleygiferð +GenericName[it]=Gara di corsa +GenericName[ja]=レースゲーム +GenericName[ka]=თამაში რბოლა +GenericName[kk]=Бәйге ойыны +GenericName[km]=ល្បែង​ប្រណាំង +GenericName[ko]=레이싱 게임 +GenericName[lo]=ເກມແຂ່ງຂັນຄວາມໄວ +GenericName[lt]=Lenktynių žaidimas +GenericName[lv]=Braukšanas Spēle +GenericName[mk]=Тркачка игра +GenericName[mn]=Уралдааны тоглоом +GenericName[ms]=Permainan Lumba +GenericName[mt]=Logħba ta' tiġrijiet +GenericName[nb]=Bilspill +GenericName[nds]=Wettrenn-Speel +GenericName[ne]=दौडने खेल +GenericName[nl]=Racespel +GenericName[nn]=Racerspel +GenericName[nso]=Papadi yago Kitimisana +GenericName[pa]=ਦੌੜ +GenericName[pl]=Wyścigi +GenericName[pt]=Jogo de Corridas +GenericName[pt_BR]=Corrida +GenericName[ro]=Joc de raliu +GenericName[ru]=Игра-гонки +GenericName[rw]=Umukino Isiganwa +GenericName[se]=Racerspeallu +GenericName[sk]=Závody +GenericName[sl]=Dirkalna igra +GenericName[sr]=Тркачка игра +GenericName[sr@Latn]=Trkačka igra +GenericName[ss]=Umdlalo wekugijimisa +GenericName[sv]=Racerspel +GenericName[ta]=ரேசிங் விளையாட்டு +GenericName[te]=రేసింగ్ ఆట +GenericName[tg]=Бозии мошинронӣ +GenericName[th]=เกมแข่งขันความเร็ว +GenericName[tr]=Yarış oyunu +GenericName[tt]=Uzış Uyını +GenericName[uk]=Гра в перегони +GenericName[uz]=Poyga oʻyini +GenericName[uz@cyrillic]=Пойга ўйини +GenericName[ven]=Ramitatisano wa Mutambo +GenericName[vi]=Trò đua xe +GenericName[wa]=Djeu d' coûsse +GenericName[xh]=Umdlalo Wogqatso +GenericName[zh_CN]=企鹅滑雪游戏 +GenericName[zh_TW]=賽車遊戲 +GenericName[zu]=Umdlalo Womjaho +Exec=tuxracer +Icon=tuxracer +Name=TuxRacer +Name[af]=Tuxresies +Name[bn]=টাক্স রেসার +Name[cy]=TuxRasiwr +Name[eo]=Tuĉjoglitado +Name[hi]=टक्स रेसर +Name[ka]=Tux რბოლა +Name[mn]=Tux аврага +Name[ne]=टक्स रेसर +Name[pa]=ਟਕਸ-ਦੌੜ +Name[ru]=Гонщик Tux +Name[sv]=Tuxracer +Name[ta]=TuxRacer-விளையாட்டு +Name[te]=టక్స్ రేసర్ +Name[tr]=Penguen Yarışçı +Name[uz]=Taks poygachi +Name[uz@cyrillic]=Такс пойгачи +Name[ven]=Ramutatisano wa Tux +Name[zh_TW]=企鵝賽車 +Name[zu]=Umgijimi we-Tux +Path= +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Arcade/XKobo.desktop b/kappfinder/apps/Games/Arcade/XKobo.desktop new file mode 100644 index 000000000..80bab5123 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/XKobo.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Name=XKobo +Name[af]=Xkobo +Name[bn]=এক্স-কোবো +Name[eo]=Kobo +Name[hi]=एक्सकोबो +Name[ne]=एक्स कोबो +Name[sl]=Xkobo +Name[sv]=Xkobo +Name[ta]=Xகோபோ +Name[te]=ఎక్స్ కోబొ +Name[tg]=ХКобо +Name[th]=หมากหนีบ - K +Name[zh_TW]=XKobo 飛行射擊遊戲 +Name[zu]=I-XKobo +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=xkobo +Terminal=false +Icon=xkobo +Type=Application diff --git a/kappfinder/apps/Games/Arcade/XSoldier.desktop b/kappfinder/apps/Games/Arcade/XSoldier.desktop new file mode 100644 index 000000000..8d1a537f6 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/XSoldier.desktop @@ -0,0 +1,109 @@ +[Desktop Entry] +Name=XSoldier +Name[af]=Xsoldaat +Name[bn]=এক্স-সোলজার +Name[cy]=XFilwr +Name[eo]=Soldato +Name[fo]=XHermaður +Name[hi]=एक्ससोल्ज़र +Name[lt]=X kareivis +Name[lv]=XKareivis +Name[ne]=एक्स सिपाही +Name[pa]=X ਸਿਪਾਹੀ +Name[rw]=XUmusirikare +Name[sl]=XSoldat +Name[sv]=Xsoldier +Name[ta]=Xசோல்ஜர் +Name[te]=ఎక్స్ సోల్డ్జర్ +Name[tg]=Х-Солдат +Name[ven]=Xlisole +Name[vi]=Lính X +Name[zh_TW]=XSoldier 飛行射擊遊戲 +Name[zu]=I-XSoldier +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=xsoldier +Terminal=false +Icon=xsoldier +Type=Application diff --git a/kappfinder/apps/Games/Arcade/alephone-nogl.desktop b/kappfinder/apps/Games/Arcade/alephone-nogl.desktop new file mode 100644 index 000000000..0a15f1b2d --- /dev/null +++ b/kappfinder/apps/Games/Arcade/alephone-nogl.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=Alephone +Name[bn]=অ্যালিফোন +Name[eo]=Alefono +Name[fo]=Alefoni +Name[hi]=एलिफोन +Name[hu]=Alaphone +Name[lo]=ແອວໂຟນ +Name[ne]=एलिफोन +Name[pa]=ਅਲੀਫੋਨ +Name[pl]=Alefon +Name[rw]=Alefone +Name[ta]=அலேபோன் +Name[te]=ఎలెఫోన్ +Name[wa]=Alef 1 +Comment=An open source version of Marathon Infinity for SDL +Comment[af]='n Oop bron weergawe van Marathon Infinity vir SDL +Comment[az]=Marathon Infinity oyununun sərbəst buraxılışı +Comment[be]=Свабодная версія Marathon Infinity для SDL +Comment[bg]=Версия с отворен код на играта Marathon Infinity за SDL +Comment[bn]=এস.ডি.এল-এর জন্য ম্যারাথন ইনফিনিটির একটি ওপেন সোর্স সংস্করণ +Comment[bs]=Open source verzija Marathon Infinity za SDL +Comment[ca]=Una versió de codi font obert del Marathon Infinity per a SDL +Comment[cs]=Open source verze Marathon Infinity pro SDL +Comment[csb]=Ôpen wersëjô Marathon Infinity dlô SD +Comment[cy]=Fersiwn Côd Agored o Marathon Infinity i SDL +Comment[da]=En open source-version af Marathon Infinity for SDL +Comment[de]=Open-Source-Version von Marathon Infinity für SDL +Comment[el]=Μια έκδοση ελεύθερης προέλευσης του Marathon Infinity για το SDL +Comment[eo]=Libera versio de "Marathon Infinity for SDL" +Comment[es]=Una versión de código abierto de Marathon Infinity para SDL +Comment[et]=SDL Marathon Infinity vabavaraversioon +Comment[eu]=Marathon Infinity-ren SDLrako kode irekidun bertsio bat +Comment[fa]=نسخۀ متن باز Marathon Infinityبرای SDL +Comment[fi]=Avoimen lähdekoodin versio Marathon Infinity pelistä SDL-kirjastolla +Comment[fr]=Une version open source de Marathon Infinity pour SDL +Comment[fy]=In Iepen boarne-ferzje fan Marathon Infinity foar SDL +Comment[ga]=Leagan saorbhogearra de Marathon Infinity le haghaidh SDL +Comment[gl]=Unha versión de código aberto de Marathon Infinity para SDL +Comment[he]=גרסת קוד פתוח של Marathon Infinity עבור SDL +Comment[hi]=एसडीएल के लिए मेराथन इनफिनिटी का ओपन सोर्स संस्करण +Comment[hr]=Verzija Marathon Infinity za SDL, otvorenog koda +Comment[hu]=Szabad forráskódú, SDL-es Marathon Infinity változat +Comment[is]=Open source útgáfa af Marathon Infinity fyrir SDL +Comment[it]=Una versione open source di Marathon Infinity per SDL +Comment[ja]=SDL Marathon Infinity のオープンソース版 +Comment[ka]= Marathon Infinity–ს ღია კოდის ვერსია SDL–ისათვის +Comment[kk]=Бастапқы мәтін ашық SDL Marathon Infinity дегеннің нұсқасы +Comment[km]=កំណែ​កូដបើក​ចំហនៃ Marathon Infinity សម្រាប់ SDL +Comment[ko]=Marathon Infinity의 SDL용 오픈소스 버전 +Comment[lo]=An open sourc version of Marathon Infinityy for SDL +Comment[lt]=Marathon Infinity, skirto SDL, atviro kodo versija +Comment[lv]=Atvērtā koda versija Marathon Infinity spēlei izmantojot SDL +Comment[mk]=Верзија на Marathon Infinity за SDL со отворен код +Comment[mn]=SDL зориулсан Marathon Infinity -н нээлттэй эх текст хувилбар +Comment[ms]=Versi sumber bebas Maraton Infiniti untuk SDL +Comment[mt]=Verżjoni sors-liberu ta' "Marathon Infinity" għall-SDL +Comment[nb]=En åpen kildekode-versjon av Marathon Infinity for SDL +Comment[nds]=En fre'e Verschoon vun Marathon Infinity för SDL +Comment[ne]=SDL का लागि म्याराथोन अनन्तको खुला स्रोत संस्करण +Comment[nl]=een Open Source-versie van Marathon Infinity voor SDL +Comment[nn]=EIn open kjeldekode-versjon av Marathon Infinity for SDL +Comment[nso]=Tsweletso ya mothopo wo o bulegilego ya Gosefelele ga Marathon wa SDL +Comment[pa]=SDL ਲਈ ਮਾਰਾਥਨ ਦਾ ਓਪਨ ਸਰੋਤ +Comment[pl]=Otwarta wersja Marathon Infinity dla SDL +Comment[pt]=Uma versão 'open source' do Marathon Infinity para o SDL +Comment[pt_BR]=Uma versão de código aberto de Marathon Infinity para SDL +Comment[ro]=O versiune open-source de Marathon Infinity pentru SDL +Comment[ru]=Версия Marathon Infinity с открытыми исходными текстами для SDL +Comment[rw]=Verisiyo nkomoko ifunguye ya Marathon Infinity ijyana na SDL +Comment[se]=Rabas gáldukoda veršuvdna «Marathon Infinity» spealus (SDL-vuođđoduvvun). +Comment[sk]=Open source verzia Marathon Infinity pre SDL +Comment[sl]=Različica odprte kode Marathona Infinity za SDL +Comment[sr]=Верзија отвореног кода Marathon Infinity-ја за SDL +Comment[sr@Latn]=Verzija otvorenog koda Marathon Infinity-ja za SDL +Comment[ss]=Sibuyeketo sesicalo lesivulekile se Marathon lengagcini ye SDL +Comment[sv]=Version av Marathon Infinity för SDL med öppen källkod +Comment[ta]=SDLக்கான தொடர் ஓட்ட எல்லையில்லா திறந்த ஆணை மூல பதிப்பு +Comment[te]=ఎస్ డి ఎల్ మేరథాన్ కార్యక్రమానికి బహిరంగ మూలము +Comment[tg]=Нусхаи матни бозӣ Marathon бениҳоят барои SDL +Comment[th]=รุ่นที่เป็นโอเพนซอร์สของ Marathon Ifinity สำหรับ SDL +Comment[tr]=Marathon Infinity'nin açık kaynak kodlu sürümü +Comment[tt]=SDL öçen Marathon Infinity'nıñ açıqçığanaqlı söreme +Comment[uk]=Відкрита версія Marathon Infinity для SDL +Comment[ven]=Tshivhumbeo tsha vhubvo tsho vuleaho tsha zwau gidima tsha SDL +Comment[vi]=Phiên bản mã nguồn mở của Marathon Vô tận dành cho SDL +Comment[wa]=Ene libe modêye di Marathon Infinity po SDL +Comment[xh]=Uguqulelo lwe open source lwe Marathon Infinity ye SDL +Comment[zh_CN]=SDL 的马拉松无限大的开发源代码版本 +Comment[zh_TW]=給 SDL 用的 Marathon Infinity 的開放原始碼版本 +Comment[zu]=Inguqulo yemvelaphi evulekile ye-Marathon Infinity ye-SDL +Exec=alephone +Terminal=false +Icon=alephone +Type=Application diff --git a/kappfinder/apps/Games/Arcade/alephone.desktop b/kappfinder/apps/Games/Arcade/alephone.desktop new file mode 100644 index 000000000..202a07b40 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/alephone.desktop @@ -0,0 +1,155 @@ +[Desktop Entry] +Name=Alephone - No OpenGL +Name[af]=Alephone - Geen OpenGL +Name[az]=Alephone - OpenGL-siz +Name[be]=Alephone - без OpenGL +Name[bn]=অ্যালিফোন - OpenGL ছাড়া +Name[br]=Alephone (OpenGL ebet) +Name[bs]=Alephone - Bez OpenGL +Name[cs]=Alephone - bez OpenGL +Name[csb]=Alephone - bez OpenGL +Name[cy]=Alephone - Dim OpenGL +Name[da]=Alephone - uden OpenGL +Name[de]=Alephone (kein OpenGL) +Name[el]=Alephone - Χωρίς OpenGL +Name[eo]=Alefono - Nenia OpenGL +Name[et]=Alephone - OpenGL'ta +Name[eu]=Alephone - Ez OpenGL +Name[fi]=Alephone - Ei OpenGL +Name[fy]=Alephone - Gjin OpenGL +Name[ga]=Alephone - Gan OpenGL +Name[gl]=Alephone - Non OpenGL +Name[he]=Alephone ־ בלי OpenGL +Name[hi]=एलिफोन - ओपनजीएल नहीं +Name[hr]=Alephone - Nema OpenGL +Name[hsb]=Alephone - bjez OpenGL +Name[hu]=Alaphone - OpenGL nélkül +Name[id]=Alephone - Tanpa OpenGL +Name[is]=Alephone - ekki OpenGL +Name[it]=Alephone - Senza OpenGL +Name[ka]=Alephone OpenGL–ის გარეშე +Name[kk]=OpenGL қолданбайтын Alephone +Name[km]=Alephone - គ្មាន OpenGL +Name[ko]=Alephone - OpenGL 사용 안함 +Name[lo]=Alephone-No OpenGL +Name[lt]=Alephone – be OpenGL +Name[lv]=Alephone - Bez OpenGL +Name[mk]=Alephone - без OpenGL +Name[mn]=Alephone (OpenGL байхгүй) +Name[ms]=Alephone - Tiada OpenGL +Name[mt]=Alephone - mingħajr OpenGL +Name[nb]=Alephone – ingen OpenGL +Name[nds]=Alephone (ahn OpenGL) +Name[ne]=एलिफोन - खुला GL होइन +Name[nl]=Alephone - geen OpenGL +Name[nn]=Alephone – Utan OpenGL +Name[nso]=Alephone - Gagona OpenGL +Name[pa]=ਅਲੀਫੋਨ - OpenGL ਨਹੀਂ +Name[pl]=Alephone - Bez OpenGL +Name[pt]=Alephone - Sem OpenGL +Name[pt_BR]=Alephone - Sem OpenGL +Name[ro]=Alephone - fără OpenGL +Name[ru]=Alephone без OpenGL +Name[rw]=Alefone - Nta GufunguraGL +Name[se]=Alephone – OpenGL:a haga +Name[sk]=Alephone - Žiadne OpenGL +Name[sl]=Alephone - brez OpenGL +Name[sr]=Alephone - без OpenGL-а +Name[sr@Latn]=Alephone - bez OpenGL-a +Name[ss]=Alephone - akukho OpenGL +Name[sv]=Alephone - Inget OpenGL +Name[ta]=அலேபோன் -OpenGL இல்லை +Name[te]=ఎలెఫొన్ - ఓపెన్ జిఎల్ లేకుండా +Name[tg]=Alephone - Бе OpenGL +Name[tr]=Alephone - (OpenGL yok) +Name[tt]=Alephone - OpenGL'sız +Name[uk]=Alephone (без OpenGL) +Name[uz]=Alefon - OpenGL'siz +Name[uz@cyrillic]=Алефон - OpenGL'сиз +Name[ven]=Alephone - A huna GL yo vuleaho +Name[wa]=Alef 1 - Sins OpenGL +Name[xh]=Alephone - Akukho OpenGL +Name[zh_CN]=Alephone - 无 OpenGL +Name[zh_TW]=Alephone - 無 OpenGL +Name[zu]=Alephone - Ayikho i-OpenGL +Comment=An open source version of Marathon Infinity for SDL that has Open GL disabled +Comment[af]='n Oop bron weergawe van marathon Infinity vir SDL, met OpenGL gedeaktiveer +Comment[ar]=نسخة مفتوحة المصدر من ماراثون إنفينيتي لـSDL. ولكن بدون استغلال OpenGL. +Comment[az]=Marathon Infinity oyununun sərbəst buraxılışı (Open GL-siz) +Comment[be]=Свабодная версія Marathon Infinity для SDL без Open GL +Comment[bg]=Версия с отворен код на играта Marathon Infinity за SDL без поддръжка на OpenGL +Comment[bn]=এস.ডি.এল-এর জন্য ম্যারাথন ইনফিনিটির একটি ওপেন সোর্স সংস্করণ, যাতে Open GL নিষ্ক্রিয় করা আছে +Comment[bs]=Open source verzija Marathon Infinity za SDL kod koje je Open GL isključen +Comment[ca]=Una versió de codi font obert del Marathon Infinity per a SDL que porta deshabilitat l'Open GL +Comment[cs]=Open source verze Marathon Infinity pro SDL s vypnutým OpenGL +Comment[csb]=Ôpen wersëjô Marathon Infinity dlô SDL z wëłączonym wspiarcem OpenGL +Comment[cy]=Fersiwn Côd Agored o Marathon Infinity i SDL sydd gyda Open GL wedi'i anablu +Comment[da]=En open source-version af Marathon Infinity for SDL som ikke bruger Open GL +Comment[de]=Open-Source-Version von Marathon Infinity für SDL (mit deaktiviertem Open GL) +Comment[el]=Μια έκδοση ελεύθερης προέλευσης του Marathon Infinity για το SDL με το Open GL απενεργοποιημένο +Comment[eo]=Libera versio de "Marathon Infinity for SDL", kiu ne uzas OpenGL +Comment[es]=Una versión de código abierto de Marathon Infinity para SDL que tiene desactivado Open GL +Comment[et]=SDL Marathon Infinity vabavaraversioon (Open GL'ta) +Comment[eu]=Open GLa desgaituta duen, eta SDLrako den Marathon Infinity kode irekidun bertsio bat +Comment[fa]=یک نسخۀ متن باز Marathon Infinity برای SDL که Open GL را غیرفعال ساخته است. +Comment[fi]=Avoimen lähdekoodin versio Marathon Infinity -pelistä SDL-kirjastolla ilman Open GL -tukea +Comment[fr]=Une version open source de Marathon Infinity pour SDL qui a OpenGL désactivé +Comment[fy]=In Iepen Boarne-ferzje fan Marathon Infinity foar SDL, mar dan sûnder OpenGL +Comment[ga]=Leagan saorbhogearra de Marathon Infinity le haghaidh SDL a bhfuil Open GL díchumasaithe ann +Comment[gl]=Unha versión de código aberto de Marathon Infinity para SDL con OpenGL desabilitado +Comment[he]=גרסת קוד פתוח של Marathon Infinity עבור SDL עם Open GL מבוטל +Comment[hi]=एसडीएल के लिए मेराथन इनफिनिटी का ओपन सोर्स संस्करण जिसमें ओपनजीएल अक्षम है +Comment[hr]=Verzija Marathon Infinity otvorenog koda za SDL koji ima onemogućen OpenGL +Comment[hu]=A Marathon Infinity for SDL játék szabad forráskódú változata (OpenGL-támogatás nélkül) +Comment[is]=Open source útgáfa af Marathon Infinity fyrir SDL með OpenGl óvirkt +Comment[it]=Una versione open source di Marathon Infinity per SDL senza il supporto Open GL +Comment[ja]=Open GL を無効にした SDL Marathon Infinity のオープンソース版 +Comment[ka]=Marathon Infinity–ს ღია კოდის ვერსია SDL–ისათვის რომელსაც გამორთული აქვს Open GL +Comment[kk]=Бастапқы мәтін ашық SDL Marathon Infinity дегеннің OpenGL қолданбайтын нұсқасы +Comment[km]=កំណែ​កូដបើក​ចំហនៃ Marathon Infinity សម្រាប់ SDL ដែល មិន​បាន​អនុញ្ញាត្យ Open GL +Comment[ko]=Marathon Infinity의 OpenGL을 사용하지 않는 SDL용 오픈소스 버전 +Comment[lo]=An open source version of Marathon Infinity for SDL that Open GL +Comment[lt]=Marathon Infinity, skirto SDL, atviro kodo versija su išjungtu Open GL +Comment[lv]=Atvērtā koda versija Marathon Infinity spēlei izmantojot SDL ar atslēgtu OpenGL +Comment[mk]=Верзија на Marathon Infinity со отворен код за SDL која нема поддршка за Open GL +Comment[mn]=SDL зориулсан Marathon Infinity -н нээлттэй эх текст хувилбар (Open GL байхгүй) +Comment[ms]=Versi sumber bebas Maraton Infiniti untuk SDL dengan Open GL dimatikan. +Comment[mt]=Verżjoni sors-liberu ta' "Marathon Infinity" għall-SDL, li ma tużax OpenGL +Comment[nb]=En åpen kildekode-versjon av Marathon Infinity for SDL med OpenGL slått av +Comment[nds]=En fre'e Verschoon vun Marathon Infinity för SDL, de ahn OpenGL funkscheneert +Comment[ne]=SDL का लागि म्याराथोन अनन्तको खुला स्रोत संस्करण जसमा खुला GL अक्षम पारिएको छ +Comment[nl]=een Open Source-versie van Marathon Infinity voor SDL, maar dan zonder Open GL +Comment[nn]=Ein open kjeldekode-versjon av Marathon Infinity for SDL med OpenGL slått av +Comment[nso]=Tsweletso ya mothopo wo o bulegilego wa Gosefelele ga Marathon wa SDL wo onago le GL yeo e Bulegilego e kgontshollotswe +Comment[pa]=SDL ਲਈ ਇੱਕ ਓਪਨ ਸਰੋਤ ਮਾਰਾਥਨ, ਜਿਸ ਲਈ Open GL ਅਯੋਗ ਹੈ। +Comment[pl]=Otwarta wersja Marathon Infinity dla SDL z wyłączonym wsparciem OpenGL +Comment[pt]=Uma versão 'open source' do Marathon Infinity para o SDL com o Open GL desactivado +Comment[pt_BR]=Uma versão de código aberto de Marathon Infinity para SDL, que possui o OpenGL desabilitado +Comment[ro]=O versiune open-source de Marathon Infinity pentru SDL care are OpenGL dezactivat +Comment[ru]=Версия Marathon Infinity с открытыми исходными текстами без OpenGL +Comment[rw]=Verisiyo nkomoko ifunguye ya Marathon Infinity ijyana na SDL ifite GufunguraGL idakora +Comment[se]=Rabas gáldukoda veršuvdna «Marathon Infinity» spealus mas OpenGL lea botnjojuvvon eret +Comment[sk]=Open source verzia Marathon Infinity pre SDL, ktorá má vypnuté OpenGL +Comment[sl]=Različica odprte kode Marathona Infinity za SDL, ki ima onemogočen OpenGL +Comment[sr]=Верзија отвореног кода Marathon Infinity-ја за SDL која има искључен OpenGL +Comment[sr@Latn]=Verzija otvorenog koda Marathon Infinity-ja za SDL koja ima isključen OpenGL +Comment[ss]=Sibuyeketo sesicalo lesivulekile se Marathon lengagcini ye SDL lene GL levulekako lekhwalisiwe +Comment[sv]=Version av Marathon Infinity för SDL med öppen källkod, med OpenGL inaktiverat +Comment[ta]=SDLக்கான தொடர் ஓட்ட எல்லையில்லா திறந்த ஆணை மூல பதிப்பில் உள்ள Open GL செயலில் இல்லை +Comment[te]=ఎస్ డి ఎల్ మేరథాన్ కార్యక్రమానికి బహిరంగ మూలము - ఓపెన్ జిఎల్ లేకుండా +Comment[tg]= Тафсир бо матни бозӣ аз Marathon Infinity барои SDL бе Open GL +Comment[th]=รุ่นที่เป็นโอเพนซฮร์สของ Marathon Infinity สำหรับ SDL ซึ่งปิดคุณสมบัติ Open GL +Comment[tr]=Marathon Infinity'nin açık kaynak kodlu sürümü (openGL desteği kaldırılmış) +Comment[tt]=Open GL bulmağan SDL öçen Marathon Infinity'nıñ açıqçığanaqlı söreme +Comment[uk]=Відкрита версія Marathon Infinity для SDL, з вимкненим Open GL +Comment[ven]=Tshivhumbeo tsha vhubvo tsho vuleaho tsha zwau gidima zwa SDL zwine zwavhana GL yo vuleaho yo baleliswa +Comment[vi]=Phiên bản mã nguồn mở của Marathon Vô tận dành cho SDL, không dùng Open GL +Comment[wa]=Ene libe modêye di Marathon Infinity po SDL avou Open GL dismetou +Comment[xh]=Uguqulelo lwe open source lwe Marathon Infinity lwe SDL ene Open GL ekhubaziweyo +Comment[zh_CN]=禁用 OpenGL 的 SDL 马拉松无限大的开发源代码版本 +Comment[zh_TW]=給 SDL 用的 Marathon Infinity 的開放原始碼版本,但不使用 Open GL +Comment[zu]=Inguqulo yemvelaphi evulekile ye-Marathon Infinity ye-SDL ene-OpenGL ekhubazekile +Exec=alephone -g -m +Terminal=false +Icon=alephone +Type=Application diff --git a/kappfinder/apps/Games/Arcade/battalion.desktop b/kappfinder/apps/Games/Arcade/battalion.desktop new file mode 100644 index 000000000..cea0e9c45 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/battalion.desktop @@ -0,0 +1,117 @@ +[Desktop Entry] +Name=Batallion +Name[af]=Batiljon +Name[be]=Батальён +Name[bn]=ব্যাটালিয়ন +Name[csb]=Batalión +Name[cy]=Bataliwn +Name[eo]=Bataliono +Name[hi]=बटालियन +Name[hr]=Bataljun +Name[ka]=ბატალიონი +Name[kk]=Батальон +Name[lt]=Batalionas +Name[lv]=Bataljons +Name[mn]=Хороо +Name[ms]=Batalion +Name[ne]=बटालियन +Name[pa]=ਬਾਟਾਲੀਓਨ +Name[pl]=Batalion +Name[ru]=Батальон +Name[rw]=Batayo +Name[sl]=Bataljon +Name[ta]=Batallion-விளையாட்டு +Name[te]=పటాళము +Name[tg]=Баталён +Name[tr]=Battalion +Name[uk]=Батальйон +Name[ven]=Mmbi +Name[vi]=Tiểu đoàn +Name[wa]=Batayon +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=battallion +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Games/Arcade/battleball.desktop b/kappfinder/apps/Games/Arcade/battleball.desktop new file mode 100644 index 000000000..542fba483 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/battleball.desktop @@ -0,0 +1,105 @@ +[Desktop Entry] +Name=Battleball +Name[af]=Gevegsbal +Name[bn]=ব্যাটল-বল +Name[csb]=Wòjowô kùgla +Name[cy]=P?lfrwydro +Name[eo]=Batalpilko +Name[hi]=बैटलबॉल +Name[ja]=バトルボール +Name[km]=ប្រកួត​បាល់ +Name[lv]=Cīņasbumba +Name[ne]=ब्याटल बल +Name[pa]=ਲੜਾਈ ਗੇਂਦ +Name[pl]=Bojowa kulka +Name[rw]=Umupira-intambara +Name[ta]=போர்பந்து +Name[te]=బేటిల్ బంతి +Name[ven]=Bola ya Tsimbe +Name[vi]=Trận đấu bóng +Name[zu]=Ibhola lempi +GenericName=Ball Game +GenericName[af]=Bal Speletjie +GenericName[ar]=لعبة من نوع الكرة +GenericName[az]=Top Oyunu +GenericName[be]=Гульня з мячыкам +GenericName[bg]=Игра с топки +GenericName[bn]=বল নিয়ে খেলা +GenericName[br]=C'hoari boulloù +GenericName[bs]=Igra s loptom +GenericName[ca]=Joc de pilota +GenericName[cs]=Hra s míčem +GenericName[csb]=Gra z kùglą +GenericName[cy]=Gêm Pêl +GenericName[da]=Boldspil +GenericName[de]=Ballspiel +GenericName[el]=Παιχνίδι με μπάλα +GenericName[eo]=Pilkoludo +GenericName[es]=Juego de pelota +GenericName[et]=Pallimäng +GenericName[eu]=Pilota jokoa +GenericName[fa]=بازی توپ +GenericName[fi]=Pallopeli +GenericName[fo]=Bóltspæl +GenericName[fr]=Jeu de balle +GenericName[fy]=Bolspul +GenericName[ga]=Cluiche Liathróide +GenericName[gl]=Xogo de Bolas +GenericName[he]=משחק כדור +GenericName[hi]=गेंद खेल +GenericName[hr]=Igra s loptom +GenericName[hsb]=Bulowe hry +GenericName[hu]=Labdajáték +GenericName[is]=Boltaleikur +GenericName[it]=Gioco di palla +GenericName[ja]=ボールゲーム +GenericName[ka]=თამაშები ბურთით +GenericName[kk]=Доп ойыны +GenericName[km]=ល្បែង​បាល់ +GenericName[lo]=ເກມບານ +GenericName[lt]=Žaidimas su kamuoliu +GenericName[lv]=Bumbu Spēle +GenericName[mk]=Игра со топчиња +GenericName[mn]=Бөмбөг тоглоом +GenericName[ms]=Permainan Bola +GenericName[mt]=Logħba tal-blalen +GenericName[nb]=Ballspill +GenericName[nds]=Ballspeel +GenericName[ne]=बल खेल +GenericName[nl]=Balspel +GenericName[nn]=Ballspel +GenericName[nso]=Papadi ya Kgwele +GenericName[pa]=ਗੇਂਦ ਖੇਡ +GenericName[pl]=Gra z kulką +GenericName[pt]=Jogo de Bola +GenericName[pt_BR]=Esferas +GenericName[ro]=Joc cu mingi +GenericName[ru]=Настольная игра +GenericName[rw]=UmukinoUmupira +GenericName[se]=Spábbaspeallu +GenericName[sk]=Loptová hra +GenericName[sl]=Igra z žogo +GenericName[sr]=Игра са лоптама +GenericName[sr@Latn]=Igra sa loptama +GenericName[ss]=Umdlalo weBall +GenericName[sv]=Bollspel +GenericName[ta]=பந்து விளையாட்டு +GenericName[te]=బంతి ఆట +GenericName[tg]=Бозии тахтагӣ +GenericName[th]=เกมบอล +GenericName[tr]=Top Oyunu +GenericName[tt]=Tup Uyını +GenericName[uk]=Гра з кулями +GenericName[uz]=Koptok oʻyini +GenericName[uz@cyrillic]=Копток ўйини +GenericName[ven]=Bola ya Mutambo +GenericName[vi]=Trò chơi bóng +GenericName[wa]=Djeu d' bale +GenericName[xh]=Umdlalo Webhola +GenericName[zh_CN]=球类游戏 +GenericName[zh_TW]=球類遊戲 +GenericName[zu]=Umdlalo webhola +Exec=battleball localhost:0.0 +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Games/Arcade/cxhextris.desktop b/kappfinder/apps/Games/Arcade/cxhextris.desktop new file mode 100644 index 000000000..110a33128 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/cxhextris.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=cxhextris +Name[eo]=Sestriso +Name[fr]=cxHextris +Name[hi]=सीएक्सहेक्सट्रिस +Name[hu]=Cxhextris +Name[sv]=Cxhextris +Name[ta]=cxஹெக்ஸ்டிரிஸ் +Name[te]=సిఎక్స్ హెక్స్ ట్రిస్ +Name[zh_TW]=cxhextris 俄羅斯方塊 +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=xhextris +Terminal=false +Icon=cxhextris +Type=Application diff --git a/kappfinder/apps/Games/Arcade/rocksndiamonds.desktop b/kappfinder/apps/Games/Arcade/rocksndiamonds.desktop new file mode 100644 index 000000000..bd237f6b4 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/rocksndiamonds.desktop @@ -0,0 +1,128 @@ +[Desktop Entry] +Name=Rocks n Diamonds +Name[af]=Klippe n Diamante +Name[be]=Горы і Дыяменты +Name[bn]=হীরে-পাথর +Name[csb]=Kamë ë diamańtë +Name[cy]=Creigiau a Diamwntau +Name[da]=Rocks'n'Diamonds +Name[eo]=Rokoj kaj diamantoj +Name[es]=Rocas y diamantes +Name[eu]=Haitzak eta diamanteak +Name[fo]=Steinar og diamantir +Name[fr]=Rocks'n'Diamonds +Name[hi]=रॉक्स एन डायमण्ड्स +Name[hr]=Stijene i dijamanti +Name[is]=Grjót og gimsteinar +Name[km]=សិលា និង​ពេជ្រ +Name[lt]=Uolos ir deimantai +Name[lv]=Akmeņi un Dimanti +Name[mn]=n ромбо эргүүлэг +Name[ms]=Batu Permata +Name[ne]=चट्टान र हीरा +Name[nso]=Maswika le Ditaamane +Name[pa]=ਪੱਥਰਾਂ ਵਿੱਚ ਹੀਰੇ +Name[pl]=Głazy i diamenty +Name[pt]=Pedras e Diamantes +Name[pt_BR]=Minas e Armadilhas +Name[ro]=Pietre și diamante +Name[rw]=Urutare n Diyama +Name[sl]=Skale in diamanti +Name[ta]=ராக்ஸ் என் டைமண்ட்ஸ் +Name[te]=రాళ్ళు మరియూ వజ్రాలు +Name[uk]=Камені та діаманти +Name[uz]=Toshlar va olmoslar +Name[uz@cyrillic]=Тошлар ва олмослар +Name[ven]=Matombo na Musuku +Name[vi]=Đá và Kim cương +Name[wa]=Rotches et diyamands +Name[zh_CN]=岩石和钻石 +Name[zu]=Amatshe namadayimane +GenericName=Tactical Game +GenericName[af]=Taktiese Speletjie +GenericName[ar]=لعبة ميدانية +GenericName[az]=Taktik oyunu +GenericName[be]=Тактычная гульня +GenericName[bg]=Тактическа игра +GenericName[bn]=বুদ্ধির খেলা +GenericName[br]=C'hoari a vrezelekaouriezh +GenericName[bs]=Taktička igra +GenericName[ca]=Joc de tàctica +GenericName[cs]=Taktická hra +GenericName[csb]=Takticznô gra +GenericName[cy]=Gêm Tactegol +GenericName[da]=Taktisk spil +GenericName[de]=Taktikspiel +GenericName[el]=Παιχνίδι τακτικής +GenericName[eo]=Taktika ludo +GenericName[es]=Juego de táctica +GenericName[et]=Taktikamäng +GenericName[eu]=Taktika jokoa +GenericName[fa]=بازی تاکتیکی +GenericName[fi]=Taktinen peli +GenericName[fo]=Taktiskt spæl +GenericName[fr]=Jeu tactique +GenericName[fy]=Taktysk spul +GenericName[ga]=Cluiche Taicticiúil +GenericName[gl]=Xogo de Tácticas +GenericName[he]=משחק טקטי +GenericName[hi]=रणनीतिक खेल +GenericName[hr]=Taktička igra +GenericName[hsb]=Taktiska hra +GenericName[hu]=Logikai +GenericName[id]=Permainan Taktik +GenericName[is]=Herkænskuleikur +GenericName[it]=Gioco di tattica +GenericName[ja]=戦略的ゲーム +GenericName[ka]=ტაქტიკური თამაშები +GenericName[kk]=Тактикалық ойын +GenericName[km]=ល្បែង​ក្បួន​យុទ្ធសាស្ត្រ +GenericName[ko]=전략 게임 +GenericName[lo]=ເກມວາງແຜນ +GenericName[lt]=Taktinis žaidimas +GenericName[lv]=Taktiskā Spēle +GenericName[mk]=Тактичка игра +GenericName[mn]=Тактикын тоглоом +GenericName[ms]=Permainan Taktikal +GenericName[mt]=Logħba ta' tattika +GenericName[nb]=Taktisk spill +GenericName[nds]=Taktikspeel +GenericName[ne]=कौशल खेल +GenericName[nl]=Tactisch spel +GenericName[nn]=Taktisk spel +GenericName[nso]=Papadi ya Tactic +GenericName[oc]=Jog de tactica +GenericName[pa]=ਟਾਕਟੀਕਲ ਖੇਡ +GenericName[pl]=Gra taktyczna +GenericName[pt]=Jogo de Estratégia +GenericName[pt_BR]=Tático +GenericName[ro]=Joc de tactică +GenericName[ru]=Тактическая игра +GenericName[rw]=Umukino Mugambi +GenericName[se]=Taktihkkaspeallu +GenericName[sk]=Taktická hra +GenericName[sl]=Taktična igra +GenericName[sr]=Тактичка игра +GenericName[sr@Latn]=Taktička igra +GenericName[ss]=Umdlalo webuciko +GenericName[sv]=Taktikspel +GenericName[ta]=சூழ்ச்சியான விளையாட்டு +GenericName[te]=యుక్తి ఉపయోగించే ఆట. +GenericName[tg]=Бозии тактикӣ +GenericName[th]=เกมวางแผน +GenericName[tr]=Taktik oyunu +GenericName[tt]=Taktik Uyını +GenericName[uk]=Тактична гра +GenericName[uz]=Taktik oʻyini +GenericName[uz@cyrillic]=Тактик ўйини +GenericName[ven]=Mutambo wa Vhutali +GenericName[vi]=Trò chơi chiến thuật +GenericName[wa]=Djeu di tactike +GenericName[xh]=Umdlalo Wobunzululwazi +GenericName[zh_CN]=策略游戏 +GenericName[zh_TW]=策略遊戲 +GenericName[zu]=Umdlalo Wamaqhinga +Exec=rocksndiamonds +Terminal=false +Icon=rocksndiamonds +Type=Application diff --git a/kappfinder/apps/Games/Arcade/scavenger.desktop b/kappfinder/apps/Games/Arcade/scavenger.desktop new file mode 100644 index 000000000..1e1a9a6a4 --- /dev/null +++ b/kappfinder/apps/Games/Arcade/scavenger.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +Name=Scavenger +Name[af]=Aasdier +Name[bn]=স্ক্যাভেঞ্জার +Name[csb]=Zdechlënożérôk +Name[cy]=Sborionwr +Name[eo]=Stratbalaisto +Name[hi]=स्केवेन्जर +Name[hr]=Lešinar +Name[lt]=Šiukšlininkas +Name[ne]=स्क्याभेन्जर +Name[pa]=ਸਕਾਵੀਨਗਰ +Name[pl]=Padlinożerca +Name[rw]=Inkongoro +Name[te]=స్కావెంజర్ +Name[uz]=Farrosh +Name[uz@cyrillic]=Фаррош +Name[ven]=Mulazwosalaho +Name[zh_CN]=清道夫 +Name[zu]=Okudla okufile +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=scavenger +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Games/Board/Gataxx.desktop b/kappfinder/apps/Games/Board/Gataxx.desktop new file mode 100644 index 000000000..807e1ca8b --- /dev/null +++ b/kappfinder/apps/Games/Board/Gataxx.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=Gataxx +Name[bn]=জি-অ্যাটাক্স +Name[eo]=Gatakso +Name[hi]=गाटाक्स +Name[pa]=ਗਾਟਾਐਕਸ +Name[ta]=காடாக்ஸ் +Name[te]=గటాక్స్ +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=gataxx +Terminal=false +Icon=gataxx +Type=Application diff --git a/kappfinder/apps/Games/Board/Gchess.desktop b/kappfinder/apps/Games/Board/Gchess.desktop new file mode 100644 index 000000000..f79d9eeea --- /dev/null +++ b/kappfinder/apps/Games/Board/Gchess.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Name=GNOME Chess +Name[af]=Gnome Skaak +Name[ar]=شطرنج GNOME +Name[az]=GNOME Şahmat +Name[be]=Шахматы GNOME +Name[bg]=Шах за GNOME +Name[bn]=গনোম দাবা +Name[bs]=GNOME Šah +Name[ca]=Escacs a GNOME +Name[cs]=Gnome šachy +Name[csb]=Gnome Szachë +Name[cy]=Gwyddbwyll GNOME +Name[da]=GNOME Skak +Name[de]=GNOME-Schach +Name[el]=GNOME Σκάκι +Name[eo]=Gnomŝako +Name[es]=Ajedrez GNOME +Name[et]=GNOME male +Name[eu]=GNOME Xakea +Name[fa]=شطرنج گنوم +Name[fi]=Gnome-shakki +Name[fr]=GChess +Name[ga]=Ficheall GNOME +Name[gl]=Xadrez de GNOME +Name[hi]=ग्नोम शतरंज +Name[hr]=GNOME šah +Name[hsb]=GNOME šach +Name[id]=Catur GNOME +Name[is]=GNOME skák +Name[ja]=GNOME チェス +Name[ka]=GNOME ჭადრაკი +Name[kk]=GNOME шахмат ойыны +Name[ko]=그놈 체스 +Name[lo]=ຫມາກລຸກຂອງ GNOME +Name[lt]=GNOME šachmatai +Name[lv]=GNOME Šahs +Name[mk]=GNOME Шах +Name[mn]=Гноме-Шатар +Name[ms]=Catur GNOME +Name[mt]=Ċess GNOME +Name[nb]=GNOME Sjakk +Name[ne]=जिनोम बुद्धिचाल +Name[pa]=ਗਨੋਮ ਸਤਰੰਜ਼ +Name[pl]=Gnome Szachy +Name[pt_BR]=Xadrez do GNOME +Name[ro]=Șah GNOME +Name[ru]=Шахматы GNOME +Name[rw]=Umukino Itsindwa wa GNOME +Name[sl]=Šah v Gnome +Name[sr]=Гномов шах +Name[sr@Latn]=Gnomov šah +Name[sv]=Gnome chess +Name[ta]=GNOME செஸ் +Name[te]=గ్నోమ్ చదరంగం +Name[tg]=Шоҳмоти GNOME +Name[th]=หมากรุกของ GNOME +Name[tr]=GNOME Satranç +Name[tt]=GNOME Şatrancı +Name[uk]=Шахи для Gnome +Name[uz]=GNNOME shaxmat +Name[uz@cyrillic]=GNNOME шахмат +Name[ven]=GNOME Tshese +Name[vi]=Cờ GNOME +Name[wa]=Djeu d' echeks di Gnome +Name[zh_CN]=GNOME 国际象棋 +Name[zh_TW]=GNOME 國際象棋 +Name[zu]=I-Chess ye-GNOME +Exec=gnome-chess +Terminal=false +Icon=gnome-chess +Type=Application diff --git a/kappfinder/apps/Games/Board/Glines.desktop b/kappfinder/apps/Games/Board/Glines.desktop new file mode 100644 index 000000000..f5f4cb809 --- /dev/null +++ b/kappfinder/apps/Games/Board/Glines.desktop @@ -0,0 +1,110 @@ +[Desktop Entry] +Name=Glines +Name[af]=G-lyne +Name[bn]=জি-লাইন্‌স +Name[csb]=Gnome Linije +Name[cy]=Gllinellau +Name[eo]=Glinioj +Name[fr]=GLines +Name[hi]=गलाइन्स +Name[hr]=Glinije +Name[lv]=Glīnijas +Name[ne]=ग्लाइन +Name[nso]=GMethalo +Name[pa]=ਜੀ-ਸਤਰਾਂ +Name[pl]=Gnome Linie +Name[rw]=G-imirongo +Name[ta]=Gவரிகள் +Name[te]=గ్లైన్స్ +Name[tr]=G çizgiler +Name[ven]=GMitalo +Name[wa]=Groyes +Name[zh_TW]=GNOME 顏色排列遊戲 +GenericName=Tactical Game +GenericName[af]=Taktiese Speletjie +GenericName[ar]=لعبة ميدانية +GenericName[az]=Taktik oyunu +GenericName[be]=Тактычная гульня +GenericName[bg]=Тактическа игра +GenericName[bn]=বুদ্ধির খেলা +GenericName[br]=C'hoari a vrezelekaouriezh +GenericName[bs]=Taktička igra +GenericName[ca]=Joc de tàctica +GenericName[cs]=Taktická hra +GenericName[csb]=Takticznô gra +GenericName[cy]=Gêm Tactegol +GenericName[da]=Taktisk spil +GenericName[de]=Taktikspiel +GenericName[el]=Παιχνίδι τακτικής +GenericName[eo]=Taktika ludo +GenericName[es]=Juego de táctica +GenericName[et]=Taktikamäng +GenericName[eu]=Taktika jokoa +GenericName[fa]=بازی تاکتیکی +GenericName[fi]=Taktinen peli +GenericName[fo]=Taktiskt spæl +GenericName[fr]=Jeu tactique +GenericName[fy]=Taktysk spul +GenericName[ga]=Cluiche Taicticiúil +GenericName[gl]=Xogo de Tácticas +GenericName[he]=משחק טקטי +GenericName[hi]=रणनीतिक खेल +GenericName[hr]=Taktička igra +GenericName[hsb]=Taktiska hra +GenericName[hu]=Logikai +GenericName[id]=Permainan Taktik +GenericName[is]=Herkænskuleikur +GenericName[it]=Gioco di tattica +GenericName[ja]=戦略的ゲーム +GenericName[ka]=ტაქტიკური თამაშები +GenericName[kk]=Тактикалық ойын +GenericName[km]=ល្បែង​ក្បួន​យុទ្ធសាស្ត្រ +GenericName[ko]=전략 게임 +GenericName[lo]=ເກມວາງແຜນ +GenericName[lt]=Taktinis žaidimas +GenericName[lv]=Taktiskā Spēle +GenericName[mk]=Тактичка игра +GenericName[mn]=Тактикын тоглоом +GenericName[ms]=Permainan Taktikal +GenericName[mt]=Logħba ta' tattika +GenericName[nb]=Taktisk spill +GenericName[nds]=Taktikspeel +GenericName[ne]=कौशल खेल +GenericName[nl]=Tactisch spel +GenericName[nn]=Taktisk spel +GenericName[nso]=Papadi ya Tactic +GenericName[oc]=Jog de tactica +GenericName[pa]=ਟਾਕਟੀਕਲ ਖੇਡ +GenericName[pl]=Gra taktyczna +GenericName[pt]=Jogo de Estratégia +GenericName[pt_BR]=Tático +GenericName[ro]=Joc de tactică +GenericName[ru]=Тактическая игра +GenericName[rw]=Umukino Mugambi +GenericName[se]=Taktihkkaspeallu +GenericName[sk]=Taktická hra +GenericName[sl]=Taktična igra +GenericName[sr]=Тактичка игра +GenericName[sr@Latn]=Taktička igra +GenericName[ss]=Umdlalo webuciko +GenericName[sv]=Taktikspel +GenericName[ta]=சூழ்ச்சியான விளையாட்டு +GenericName[te]=యుక్తి ఉపయోగించే ఆట. +GenericName[tg]=Бозии тактикӣ +GenericName[th]=เกมวางแผน +GenericName[tr]=Taktik oyunu +GenericName[tt]=Taktik Uyını +GenericName[uk]=Тактична гра +GenericName[uz]=Taktik oʻyini +GenericName[uz@cyrillic]=Тактик ўйини +GenericName[ven]=Mutambo wa Vhutali +GenericName[vi]=Trò chơi chiến thuật +GenericName[wa]=Djeu di tactike +GenericName[xh]=Umdlalo Wobunzululwazi +GenericName[zh_CN]=策略游戏 +GenericName[zh_TW]=策略遊戲 +GenericName[zu]=Umdlalo Wamaqhinga +Exec=glines +Terminal=false +Icon=glines +Type=Application diff --git a/kappfinder/apps/Games/Board/Gmahjongg.desktop b/kappfinder/apps/Games/Board/Gmahjongg.desktop new file mode 100644 index 000000000..80de5df81 --- /dev/null +++ b/kappfinder/apps/Games/Board/Gmahjongg.desktop @@ -0,0 +1,122 @@ +[Desktop Entry] +Name=GNOME Mahjongg +Name[af]=Gnome Mahjongg +Name[be]=Маджонг GNOME +Name[bn]=গনোম মাহজং +Name[cs]=Gnome Mahjongg +Name[csb]=Gnome Mahjongg +Name[eo]=Gnom-Mahjongo +Name[es]=Mahjongg de GNOME +Name[fi]=Gnome-mahjongg +Name[fr]=GMahjongg +Name[ga]=Mahjongg GNOME +Name[hi]=ग्नोम महजोंग +Name[id]=Mahjongg GNOME +Name[ja]=GNOME 上海 +Name[ka]=GNOME მა-ჯონგი +Name[kk]=GNOME маджонг ойыны +Name[ko]=그놈 마작 +Name[mn]=Гноме Mahjongg +Name[ms]=Mahjong GNOME +Name[ne]=जिनोम माहजोङ्ग +Name[nn]=Mahjongg +Name[pa]=ਗਨੋਮ ਮਾਹਜੋਨਜ਼ +Name[pl]=Gnome Mahjongg +Name[pt_BR]=Mahjongg do GNOME +Name[ro]=Mahjongg GNOME +Name[sl]=Mahjongg za Gnome +Name[sr]=Гномов Mahjongg +Name[sr@Latn]=Gnomov Mahjongg +Name[sv]=Gnome Mahjongg +Name[ta]=GNOME மாஹ்ஜாங் +Name[te]=గ్నొమ్ మహ్ జొంగ్ +Name[tg]=Маҳҷонг ГНОМИК +Name[th]=ไพ่นกกระจอก GNOME +Name[uk]=Махжонг для GNOME +Name[vi]=GNOME Mạt chược +Name[wa]=Djeu di Mahjongg di Gnome +Name[zh_CN]=GNOME 上海麻将 +Name[zh_TW]=GNOME 上海麻將 +Name[zu]=I-Mahjongg ye-GNOME +GenericName=Tile Game +GenericName[af]=Teël Speletjie +GenericName[az]=Döşəmə Oyunu +GenericName[be]=Гульня з аскепкамі +GenericName[bg]=Игра с плочки +GenericName[bn]=টালির খেলা +GenericName[br]=Ur c'hoari teol +GenericName[bs]=Igra s poljima +GenericName[ca]=Joc de mosaics +GenericName[cs]=Hra s dlaždicemi +GenericName[csb]=Planszowô gra +GenericName[cy]=Gêm Teil +GenericName[da]=Flisespil +GenericName[de]=Spiel mit Steinen +GenericName[el]=Παιχνίδι με πιόνια +GenericName[eo]=Kahela ludo +GenericName[es]=Juego de baldosas +GenericName[et]=Klotsimäng +GenericName[eu]=Baldosa jokoa +GenericName[fa]=بازی کاشی +GenericName[fi]=Palikkapeli +GenericName[fo]=Flísuspæl +GenericName[fr]=Jeu de tuiles +GenericName[fy]=Tegelspul +GenericName[ga]=Cluiche Tíleanna +GenericName[gl]=Xogo de Pezas +GenericName[he]=משחק מרצפות +GenericName[hi]=टाइल खेल +GenericName[hr]=Igra s pločicama +GenericName[hu]=Képdominó +GenericName[is]=Kubbaleikur +GenericName[it]=Gioco di tessere +GenericName[ja]=マージャン牌ゲーム +GenericName[ka]=თამაშები ფილებით +GenericName[kk]=Tile ойыны +GenericName[km]=ល្បែង​ក្រឡា +GenericName[lt]=Dėliojimo žaidimas +GenericName[lv]=Tile Spēle +GenericName[mk]=Игра со плочки +GenericName[mn]=Чулуун тоглоом +GenericName[ms]=Permainan Jubin +GenericName[mt]=Logħba tal-madum +GenericName[nb]=Brikkespill +GenericName[nds]=Speel mit Tegels +GenericName[ne]=टायल खेल +GenericName[nl]=Tegelspel +GenericName[nn]=Brikkespel +GenericName[nso]=Papadi ya Thaele +GenericName[pa]=ਟਿਲੀ ਗੇਂਦ +GenericName[pl]=Gra planszowa +GenericName[pt]=Jogo de Padrões +GenericName[pt_BR]=Jogo de Ladrilhos +GenericName[ro]=Joc de mozaic +GenericName[ru]=Игра в маджонг +GenericName[rw]=Umukino Agakaro +GenericName[se]=Bihttáspeallu +GenericName[sk]=Stolová hra +GenericName[sl]=Sestavljanka +GenericName[sr]=Блоковска игра +GenericName[sr@Latn]=Blokovska igra +GenericName[ss]=Umdlalo wemathayili +GenericName[sv]=Brickspel +GenericName[ta]=டைல் விளையாட்டு +GenericName[te]=పెంకుల ఆట +GenericName[tg]=Бозӣ бо маджонг +GenericName[th]=เกมแบบไพ่นกกระจอก +GenericName[tr]=Taş oyunu +GenericName[tt]=Mahjongg uyını +GenericName[uk]=Гра з плитками +GenericName[uz]=Tosh oʻyini +GenericName[uz@cyrillic]=Тош ўйини +GenericName[ven]=Mutambo wa Thaili +GenericName[vi]=Trò chơi Ngói +GenericName[wa]=Djeu d' schaeyes +GenericName[xh]=Umdlalo Wethayile +GenericName[zh_CN]=方块游戏 +GenericName[zh_TW]=麻將遊戲 +GenericName[zu]=Umdlalo Wamathayile +Exec=mahjongg +Terminal=false +Icon=gnome-mahjongg +Type=Application diff --git a/kappfinder/apps/Games/Board/Gmines.desktop b/kappfinder/apps/Games/Board/Gmines.desktop new file mode 100644 index 000000000..0292ba6ef --- /dev/null +++ b/kappfinder/apps/Games/Board/Gmines.desktop @@ -0,0 +1,146 @@ +[Desktop Entry] +Name=GNOME Mines +Name[af]=Gnome Myne +Name[ar]=ألغام GNOME +Name[az]=GNOME Minalar +Name[be]=Міны GNOME +Name[bg]=Мини за GNOME +Name[bn]=গনোম মাইনস +Name[br]=Minoù GNOME +Name[bs]=GNOME Mine +Name[ca]=Mines del GNOME +Name[cs]=Gnome miny +Name[csb]=Gnome Minë +Name[cy]=Ffrwydron GNOME +Name[el]=GNOME Νάρκες +Name[eo]=Gnoma minserĉanto +Name[es]=Minas de GNOME +Name[eu]=GNOME minak +Name[fi]=Gnome-miinaharava +Name[fo]=GNOME Minur +Name[fr]=GMines +Name[ga]=Mines GNOME +Name[hi]=ग्नोम माइन्स +Name[hr]=GNOME mine +Name[hsb]=GNOME miny +Name[ja]=GNOME マイン +Name[ka]=GNOME გამნაღმვნელი +Name[kk]=GNOME сапер ойыны +Name[km]=មីន GNOME +Name[ko]=그놈 지뢰찾기 +Name[lo]=ກູ້ລະເບີດຂອງ GNOME +Name[lt]=GNOME minos +Name[lv]=GNOME Mīnas +Name[mk]=GNOME Мини +Name[mn]=Гноме мина +Name[ne]=जिनोम बारूद +Name[pa]=ਗਨੋਮ ਸੁਰੰਗਾਂ +Name[pl]=Gnome Miny +Name[pt_BR]=Jogo de Minas do GNOME +Name[ro]=Mine GNOME +Name[ru]=Сапёр GNOME +Name[sl]=Mine v Gnome +Name[sr]=Гномов Mines +Name[sr@Latn]=Gnomov Mines +Name[ss]=Imigodzi ye GNOME +Name[sv]=Gnome-minröjare +Name[ta]=க்னோம் மைன்ஸ் +Name[te]=గ్నొమ్ గనులు +Name[tg]=Сапёр GNOME +Name[th]=กู้ระเบิดของ GNOME +Name[tr]=GNOME Mayınlar +Name[tt]=GNOME Şartlama +Name[uk]=Сапер для GNOME +Name[uz]=Gnome minalar +Name[uz@cyrillic]=Gnome миналар +Name[ven]=GNOME Migodi +Name[vi]=Dò mìn GNOME +Name[wa]=Dismineu di Gnome +Name[xh]=GNOME Iimayine +Name[zh_CN]=GNOME 挖地雷 +Name[zh_TW]=GNOME 踩地雷 +Name[zu]=Izimayini ze-GNOME +GenericName=Logic Game +GenericName[af]=Logika Speletjie +GenericName[ar]=لعبة منطقية +GenericName[az]=Məntiq Oyunu +GenericName[be]=Лагічная гульня +GenericName[bg]=Логическа игра +GenericName[bn]=যুক্তির খেলা +GenericName[bs]=Logička igra +GenericName[ca]=Joc de lògica +GenericName[cs]=Logická hra +GenericName[csb]=Logicznô gra +GenericName[cy]=Gêm Rhesymeg +GenericName[da]=Logikspil +GenericName[de]=Logikspiel +GenericName[el]=Παιχνίδι λογικής +GenericName[eo]=Logikludo +GenericName[es]=Juego de lógica +GenericName[et]=Loogikamäng +GenericName[eu]=Logika jokoa +GenericName[fa]=بازی منطق +GenericName[fi]=Logiikkapeli +GenericName[fo]=Logiskt spæl +GenericName[fr]=Jeu de logique +GenericName[fy]=Logysk spul +GenericName[ga]=Cluiche Loighce +GenericName[gl]=Xogo de Lóxica +GenericName[he]=משחק לוגיקה +GenericName[hi]=तर्क के खेल +GenericName[hr]=Logička igra +GenericName[hsb]=Logiska hra +GenericName[hu]=Logikai +GenericName[id]=Permainan Logika +GenericName[is]=kænskuleikur +GenericName[it]=Gioco di logica +GenericName[ja]=論理ゲーム +GenericName[ka]=თამაშები ლოგიკაზე +GenericName[kk]=Логикалық ойын +GenericName[km]=ល្បែង​ត្រិះរិះ +GenericName[ko]=로직 게임 +GenericName[lo]=ເກມຕະກະ +GenericName[lt]=Loginis žaidimas +GenericName[lv]=Loģiskā Spēle +GenericName[mk]=Логичка игра +GenericName[mn]=Логик тоглоом +GenericName[ms]=Permainan Logik +GenericName[mt]=Logħba ta' loġika +GenericName[nb]=Logikkspill +GenericName[nds]=Logikspeel +GenericName[ne]=तर्क खेल +GenericName[nl]=Logisch spel +GenericName[nn]=Logikkspel +GenericName[nso]=Papadi ya Tatelano +GenericName[pa]=ਲਾਜਿਕ ਖੇਡ +GenericName[pl]=Gra logiczna +GenericName[pt]=Jogo de Lógica +GenericName[pt_BR]=Lógico +GenericName[ro]=Joc de logică +GenericName[ru]=Логическая игра +GenericName[se]=Logihkkaspeallu +GenericName[sk]=Logická hra +GenericName[sl]=Logična igra +GenericName[sr]=Логичка игра +GenericName[sr@Latn]=Logička igra +GenericName[ss]=Umdlalo wengcondvo +GenericName[sv]=Logiskt spel +GenericName[ta]=லாஜிக் விளையாட்டு +GenericName[te]=తర్కపు ఆట +GenericName[tg]=Бозии логикӣ +GenericName[th]=เกมตรรกะ +GenericName[tr]=Mantık Oyunu +GenericName[tt]=Mantíq Uyını +GenericName[uk]=Гра на логіку +GenericName[uz]=Mantiqiy oʻyin +GenericName[uz@cyrillic]=Мантиқий ўйин +GenericName[ven]=Mitambo ya vhuronwane +GenericName[vi]=Trò chơi lôgíc +GenericName[wa]=Djeu di lodjike +GenericName[zh_CN]=逻辑游戏 +GenericName[zh_TW]=智力遊戲 +GenericName[zu]=Umdlalo Wengqondo +Exec=gnomine +Terminal=false +Icon=gnome-gnomine +Type=Application diff --git a/kappfinder/apps/Games/Board/Gnotravex.desktop b/kappfinder/apps/Games/Board/Gnotravex.desktop new file mode 100644 index 000000000..470c72b49 --- /dev/null +++ b/kappfinder/apps/Games/Board/Gnotravex.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=Gnotravex +Name[eo]=Gnotravekso +Name[hi]=ग्नोट्रावेक्स +Name[ne]=जिनोट्राभेक्स +Name[pa]=ਗਨੋਟਰਾਵਕਸ +Name[ta]=Gnoடிராவெக்ஸ் +Name[te]=గ్నొట్రవెక్స్ +Name[zh_TW]=數字拼圖 +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=gnotravex +Terminal=false +Icon=gnome-gnotravex +Type=Application diff --git a/kappfinder/apps/Games/Board/Gnotski.desktop b/kappfinder/apps/Games/Board/Gnotski.desktop new file mode 100644 index 000000000..cf79e91d9 --- /dev/null +++ b/kappfinder/apps/Games/Board/Gnotski.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Gnotski +Name[bn]=জি-নোটস্কি +Name[eo]=Gnotskio +Name[hi]=ग्नोट्स्की +Name[lo]=Ganotski +Name[ne]=जिनोटस्की +Name[pa]=ਗਨੋਟਸਕੀ +Name[te]=గ్నొట్స్కి +Name[zh_TW]=華容道 +GenericName=GNOME Klotski Game +GenericName[af]=Gnome Klotski Speletjie +GenericName[az]=GNOME Klotski Oyunu +GenericName[be]=Гульня GNOME Klotski +GenericName[bg]=Игра GNOME Klotski +GenericName[bn]=গনোম ক্লটস্কি খেলা +GenericName[br]=C'hoari GNOME Klotski +GenericName[bs]=GNOME Klotski igra +GenericName[ca]=Joc Klotski del GNOME +GenericName[cs]=Hra GNOME Klotski +GenericName[csb]=Gnome Klotski gra +GenericName[cy]=Gêm Klotski GNOME +GenericName[da]=GNOME Klotski-spil +GenericName[de]=Klotski (GNOME) +GenericName[el]=Παιχνίδι Klotski του GNOME +GenericName[eo]=Gnoma Klotski-ludo +GenericName[es]=Juego GNOME Klotski +GenericName[et]=GNOME mäng Klotski +GenericName[eu]=GNOME Klotski jokoa +GenericName[fa]=گنوم Klotski بازی +GenericName[fi]=Gnome-klotski-peli +GenericName[fo]=Gnome Klotski +GenericName[fr]=Jeu de Klotski pour Gnome +GenericName[fy]=GNOME Klotski-spul +GenericName[ga]=Cluiche Klotski GNOME +GenericName[gl]=Xogo Klotski de GNOME +GenericName[he]=משחק Klotski ל־GNOME +GenericName[hi]=ग्नोम क्लॉट्स्की खेल +GenericName[hr]=GNOME Klotski igra +GenericName[hsb]=GNOME Klotski hra +GenericName[hu]=GNOME Klotski +GenericName[is]=GNOME Klotski leikur +GenericName[it]=Gioco Klotski di GNOME +GenericName[ja]=GNOME Klotski ゲーム +GenericName[ka]=თამაში GNOME Klotski +GenericName[kk]=GNOME Klotski ойыны +GenericName[km]=ល្បែង GNOME Klotski +GenericName[ko]=그놈 클로츠키 게임 +GenericName[lo]=GNOME Klostski Game +GenericName[lv]=GNOME Klotski Spēle +GenericName[mk]=GNOME Klotski игра +GenericName[mn]=Klotski (ГНОМЕ) +GenericName[ms]=Permainan GNOME Klotski +GenericName[nb]=Klotski-spill for GNOME +GenericName[nds]=Klotski-Speel vun GNOME +GenericName[ne]=जिनोम क्लोत्स्की खेल +GenericName[nl]=GNOME Klotski-spel +GenericName[nn]=Klotski-spel for GNOME +GenericName[nso]=Papadi ya GNOME Klotski +GenericName[pa]=ਗਨੋਮ ਕਲੋਟਸਕੀ ਖੇਡ +GenericName[pl]=Gra Gnome Klotski +GenericName[pt]=Jogo Klotski do GNOME +GenericName[pt_BR]=Jogo Klotski do GNOME +GenericName[ro]=Joc Klotski pentru GNOME +GenericName[ru]=Игра GNOME (Klotski) +GenericName[rw]=Umukino Klotski wa GNOME +GenericName[se]=GNOME klotski-speallu +GenericName[sk]=Hra GNOME Klotski +GenericName[sl]=Igra Gnome Klotski +GenericName[sr]=Гномова Klotski игра +GenericName[sr@Latn]=Gnomova Klotski igra +GenericName[ss]=Umdlalo weGNOME Klotski +GenericName[sv]=Gnome-spelet Klotski +GenericName[ta]=க்னோம் கேலாட்ஸ்கி விளையாட்டு +GenericName[te]=గ్నోమ్ క్లొట్స్కి ఆట +GenericName[tg]=Бозии GNOME (Klotski) +GenericName[th]=เกมขุนแผนแหกค่าย +GenericName[tr]=GNOME Klotski Oyunu +GenericName[tt]=GNOME Klotski Uyını +GenericName[uk]=Гра Klotski для Gnome +GenericName[uz]=GNOME Klotski oʻyini +GenericName[uz@cyrillic]=GNOME Klotski ўйини +GenericName[ven]=GNOME Klotski Mutambo +GenericName[vi]=Trò Klotski của GNOME +GenericName[wa]=Djeu GNOME di Klotski +GenericName[zh_CN]=GNOME Klotski 游戏 +GenericName[zh_TW]=GNOME 華容道 +GenericName[zu]=Umdlalo we-Klotski we-GNOME +Exec=gnotski +Terminal=false +Icon= +Type=Application diff --git a/kappfinder/apps/Games/Board/Gstones.desktop b/kappfinder/apps/Games/Board/Gstones.desktop new file mode 100644 index 000000000..8db7ae454 --- /dev/null +++ b/kappfinder/apps/Games/Board/Gstones.desktop @@ -0,0 +1,54 @@ +[Desktop Entry] +Name=GNOME Stones +Name[af]=Gnome Klippe +Name[az]=GNOME Daşlar Oyunu +Name[be]=Камяні GNOME +Name[bn]=গনোম স্টোন্‌স +Name[cs]=Gnome kameny +Name[csb]=Gnome Kamë +Name[cy]=Cerrig GNOME +Name[el]=GNOME Πέτρες +Name[eo]=Gnomaj ŝtonoj +Name[fa]=سنگهای گنوم +Name[fi]=Gnome-kivet +Name[fo]=GNOME Steinar +Name[fr]=GStones +Name[ga]=Stones GNOME +Name[hi]=ग्नोम स्टोन्स +Name[hr]=GNOME stijene +Name[hsb]=GNOME kamjenje +Name[ja]=GNOME ストーン +Name[ka]=GNOME ქვები +Name[kk]=GNOME тастар +Name[km]=ថ្ម GNOME +Name[ko]=그놈 보석 +Name[lt]=GNOME Akmenys +Name[lv]=GNOME Akmeņi +Name[mk]=GNOME Карпи +Name[mn]=ГНОМЕ Stones +Name[ne]=जिनोम ढुङ्गा +Name[nso]=Maswika a GNOME +Name[pa]=ਗਨੋਮ ਪੱਥਰ +Name[pl]=Gnome Kamienie +Name[ro]=Pietre GNOME +Name[rw]=Amabuye GNOME +Name[sl]=Kamni za Gnome +Name[ss]=Ematje ye GNOME +Name[sv]=Gnome stones +Name[ta]=க்னோம் கற்கள் +Name[te]=గ్నోమ్ రాళ్ళు +Name[tt]=GNOME Taşları +Name[uk]=Камені для GNOME +Name[uz]=GNOME toshlar +Name[uz@cyrillic]=GNOME тошлар +Name[ven]=GNOME Matombo +Name[vi]=Đá GNOME +Name[wa]=Pîres GNOME +Name[xh]=GNOME Amatye +Name[zh_CN]=GNOME 宝石 +Name[zh_TW]=GNOME 寶石遊戲 +Name[zu]=Amatshe e-GNOME +Exec=gnome-stones +Terminal=false +Icon=gnome-stones +Type=Application diff --git a/kappfinder/apps/Games/Board/Iagno.desktop b/kappfinder/apps/Games/Board/Iagno.desktop new file mode 100644 index 000000000..4e23a45af --- /dev/null +++ b/kappfinder/apps/Games/Board/Iagno.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=Iagno +Name[be]=Ягно +Name[bn]=ইয়াগনো +Name[hi]=इआग्नो +Name[ne]=लाग्नो +Name[pa]=ਲੈਂਗਨੋ +Name[ta]=லாக்னோ +Name[te]=ఇయాగ్నొ +Name[zh_TW]=黑白棋 +GenericName=Board Game +GenericName[af]=Bord Speletjie +GenericName[ar]=لعبة تعتمد على نظام اللوحة +GenericName[az]=Lüvhə Oyunu +GenericName[be]=Настольная гульня +GenericName[bg]=Игра на дъска +GenericName[bn]=বোর্ড গেম +GenericName[br]=Ur c'hoari taolenn +GenericName[bs]=Igra s pločom +GenericName[ca]=Joc de taula +GenericName[cs]=Desková Same +GenericName[csb]=Planszowô gra +GenericName[cy]=Gêm Bwrdd +GenericName[da]=Brætspil +GenericName[de]=Brettspiel +GenericName[el]=Επιτραπέζιο παιχνίδι +GenericName[eo]=Tabuloludo +GenericName[es]=Juego de tablero +GenericName[et]=Lauamäng +GenericName[eu]=Mahai jokoa +GenericName[fa]=بازی تخته +GenericName[fi]=Lautapeli +GenericName[fo]=Borðspæl +GenericName[fr]=Jeu de plateau +GenericName[fy]=Boerdspul +GenericName[ga]=Cluiche Chláir +GenericName[gl]=Xogo de Taboleiro +GenericName[he]=משחק לוח +GenericName[hi]=बिसात के खेल +GenericName[hr]=Igra na ploči +GenericName[hsb]=Deskowa hra +GenericName[hu]=Táblajáték +GenericName[is]=Borðleikur +GenericName[it]=Gioco da tavola +GenericName[ja]=ボードゲーム +GenericName[ka]=სამაგიდო თამაშები +GenericName[kk]=Үстел ойыны +GenericName[km]=ល្បែង​ក្ដារ +GenericName[ko]=보드 게임 +GenericName[lo]=ເກມກະດານ +GenericName[lt]=Stalo žaidimas +GenericName[lv]=Galda Spēle +GenericName[mk]=Игра на табла +GenericName[mn]=Хөлөгт тоглоом +GenericName[ms]=Permainan Papan +GenericName[mt]=Logħba tal-bord +GenericName[nb]=Brettspill +GenericName[nds]=Brettspeel +GenericName[ne]=बोर्ड खेल +GenericName[nl]=Bordspel +GenericName[nn]=Brettspel +GenericName[nso]=Papadi ya Board +GenericName[pa]=ਬੋਰਡ ਗੇਂਦ +GenericName[pl]=Gra planszowa +GenericName[pt]=Jogo de Tabuleiro +GenericName[pt_BR]=Tabuleiro +GenericName[ro]=Joc de table +GenericName[ru]=Настольная игра +GenericName[rw]=Umukino w'Ikibaho +GenericName[se]=Duolbbášspeallu +GenericName[sk]=Stolová hra +GenericName[sl]=Namizna igra +GenericName[sr]=Игра на табли +GenericName[sr@Latn]=Igra na tabli +GenericName[ss]=Umdlalo webhodi +GenericName[sv]=Brädspel +GenericName[ta]=போர்ட் விளையாட்டு +GenericName[te]=పలక ఆట +GenericName[tg]=Бозии тахтагӣ +GenericName[th]=เกมกระดาน +GenericName[tr]=Tahta Oyunu +GenericName[tt]=Taqta Uyını +GenericName[uk]=Гра на дошці +GenericName[uz]=Stol oʻyinlari +GenericName[uz@cyrillic]=Стол ўйинлари +GenericName[ven]=Bodo ya Mutambo +GenericName[vi]=Trò chơi bảng +GenericName[wa]=Djeu d' platea +GenericName[xh]=Umdlalo Webhodi +GenericName[zh_CN]=棋类游戏 +GenericName[zh_TW]=棋類遊戲 +GenericName[zu]=Umdlalo Webhodi +Exec=iagno +Terminal=false +Icon=iagno +Type=Application diff --git a/kappfinder/apps/Games/Board/Makefile.am b/kappfinder/apps/Games/Board/Makefile.am new file mode 100644 index 000000000..6839bd1ee --- /dev/null +++ b/kappfinder/apps/Games/Board/Makefile.am @@ -0,0 +1,7 @@ +kappfinder_games_board_data_DATA = xboard.desktop Glines.desktop Gnotravex.desktop Iagno.desktop \ + Xgammon.desktop SameGnome.desktop Gataxx.desktop Gmahjongg.desktop Gnotski.desktop \ + Gchess.desktop Gmines.desktop Gstones.desktop + +kappfinder_games_board_datadir = $(kde_datadir)/kappfinder/apps/Games/Board + +EXTRA_DIST = $(kappfinder_games_board_data_DATA) diff --git a/kappfinder/apps/Games/Board/SameGnome.desktop b/kappfinder/apps/Games/Board/SameGnome.desktop new file mode 100644 index 000000000..ed5148e09 --- /dev/null +++ b/kappfinder/apps/Games/Board/SameGnome.desktop @@ -0,0 +1,123 @@ +[Desktop Entry] +Name=Same GNOME +Name[af]=Selfde Gnome +Name[az]=Eyni GNOME +Name[be]=Той самы GNOME +Name[bn]=সেম গনোম +Name[cs]=Gnome Same +Name[csb]=Gnome ToSamò +Name[el]=Ίδιο GNOME +Name[eo]=Gnoma samludo +Name[fa]=گنوم مشابه +Name[fi]=Sama Gnome +Name[fo]=Sama GNOME +Name[fr]=SameGnome +Name[hi]=सेम ग्नोम +Name[hr]=Isti GNOME +Name[hu]=GNOME Same +Name[ja]=さめ GNOME +Name[ko]=세임 그놈 +Name[mn]=Same ГНОМЕ +Name[ne]=उही जिनोम +Name[nso]=GNOME yago Swana +Name[pa]=ਸੇਮ ਗਨੋਮ +Name[pl]=Gnome ToSamo +Name[sl]=Isti za Gnome +Name[ss]=I-GNOME lefanako +Name[sv]=Same Gnome +Name[ta]=அதே க்னோம் +Name[te]=అదే గ్నొమ్ +Name[th]=เกม Same GNOME +Name[tr]=Aynı GNOME +Name[tt]=Şul uq GNOME +Name[ven]=Fana GNOME +Name[wa]=Minme GNOME +Name[xh]=GNOME Efanayo +Name[zh_CN]=GNOME 同色彩球 +Name[zu]= i-Gnome efanayo +GenericName=Board Game +GenericName[af]=Bord Speletjie +GenericName[ar]=لعبة تعتمد على نظام اللوحة +GenericName[az]=Lüvhə Oyunu +GenericName[be]=Настольная гульня +GenericName[bg]=Игра на дъска +GenericName[bn]=বোর্ড গেম +GenericName[br]=Ur c'hoari taolenn +GenericName[bs]=Igra s pločom +GenericName[ca]=Joc de taula +GenericName[cs]=Desková Same +GenericName[csb]=Planszowô gra +GenericName[cy]=Gêm Bwrdd +GenericName[da]=Brætspil +GenericName[de]=Brettspiel +GenericName[el]=Επιτραπέζιο παιχνίδι +GenericName[eo]=Tabuloludo +GenericName[es]=Juego de tablero +GenericName[et]=Lauamäng +GenericName[eu]=Mahai jokoa +GenericName[fa]=بازی تخته +GenericName[fi]=Lautapeli +GenericName[fo]=Borðspæl +GenericName[fr]=Jeu de plateau +GenericName[fy]=Boerdspul +GenericName[ga]=Cluiche Chláir +GenericName[gl]=Xogo de Taboleiro +GenericName[he]=משחק לוח +GenericName[hi]=बिसात के खेल +GenericName[hr]=Igra na ploči +GenericName[hsb]=Deskowa hra +GenericName[hu]=Táblajáték +GenericName[is]=Borðleikur +GenericName[it]=Gioco da tavola +GenericName[ja]=ボードゲーム +GenericName[ka]=სამაგიდო თამაშები +GenericName[kk]=Үстел ойыны +GenericName[km]=ល្បែង​ក្ដារ +GenericName[ko]=보드 게임 +GenericName[lo]=ເກມກະດານ +GenericName[lt]=Stalo žaidimas +GenericName[lv]=Galda Spēle +GenericName[mk]=Игра на табла +GenericName[mn]=Хөлөгт тоглоом +GenericName[ms]=Permainan Papan +GenericName[mt]=Logħba tal-bord +GenericName[nb]=Brettspill +GenericName[nds]=Brettspeel +GenericName[ne]=बोर्ड खेल +GenericName[nl]=Bordspel +GenericName[nn]=Brettspel +GenericName[nso]=Papadi ya Board +GenericName[pa]=ਬੋਰਡ ਗੇਂਦ +GenericName[pl]=Gra planszowa +GenericName[pt]=Jogo de Tabuleiro +GenericName[pt_BR]=Tabuleiro +GenericName[ro]=Joc de table +GenericName[ru]=Настольная игра +GenericName[rw]=Umukino w'Ikibaho +GenericName[se]=Duolbbášspeallu +GenericName[sk]=Stolová hra +GenericName[sl]=Namizna igra +GenericName[sr]=Игра на табли +GenericName[sr@Latn]=Igra na tabli +GenericName[ss]=Umdlalo webhodi +GenericName[sv]=Brädspel +GenericName[ta]=போர்ட் விளையாட்டு +GenericName[te]=పలక ఆట +GenericName[tg]=Бозии тахтагӣ +GenericName[th]=เกมกระดาน +GenericName[tr]=Tahta Oyunu +GenericName[tt]=Taqta Uyını +GenericName[uk]=Гра на дошці +GenericName[uz]=Stol oʻyinlari +GenericName[uz@cyrillic]=Стол ўйинлари +GenericName[ven]=Bodo ya Mutambo +GenericName[vi]=Trò chơi bảng +GenericName[wa]=Djeu d' platea +GenericName[xh]=Umdlalo Webhodi +GenericName[zh_CN]=棋类游戏 +GenericName[zh_TW]=棋類遊戲 +GenericName[zu]=Umdlalo Webhodi +Exec=same-gnome +Terminal=false +Icon=gnome-gsame +Type=Application diff --git a/kappfinder/apps/Games/Board/Xgammon.desktop b/kappfinder/apps/Games/Board/Xgammon.desktop new file mode 100644 index 000000000..0c9b0d9ae --- /dev/null +++ b/kappfinder/apps/Games/Board/Xgammon.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=Xgammon +Name[bn]=এক্স-গ্যামন +Name[eo]=X-gamono +Name[fr]=XGammon +Name[hi]=एक्सगेमन +Name[is]=Kotra +Name[ne]=एक्स गामोन +Name[pa]=X-ਗਾਮੋਨ +Name[ta]=Xகாம்மான் +Name[te]=ఎక్స్ గామొన్ +Name[tr]=Tavla +Name[zh_TW]=Xgammon 西洋雙陸棋 +Name[zu]=I-Xgammon +GenericName=Board Game +GenericName[af]=Bord Speletjie +GenericName[ar]=لعبة تعتمد على نظام اللوحة +GenericName[az]=Lüvhə Oyunu +GenericName[be]=Настольная гульня +GenericName[bg]=Игра на дъска +GenericName[bn]=বোর্ড গেম +GenericName[br]=Ur c'hoari taolenn +GenericName[bs]=Igra s pločom +GenericName[ca]=Joc de taula +GenericName[cs]=Desková Same +GenericName[csb]=Planszowô gra +GenericName[cy]=Gêm Bwrdd +GenericName[da]=Brætspil +GenericName[de]=Brettspiel +GenericName[el]=Επιτραπέζιο παιχνίδι +GenericName[eo]=Tabuloludo +GenericName[es]=Juego de tablero +GenericName[et]=Lauamäng +GenericName[eu]=Mahai jokoa +GenericName[fa]=بازی تخته +GenericName[fi]=Lautapeli +GenericName[fo]=Borðspæl +GenericName[fr]=Jeu de plateau +GenericName[fy]=Boerdspul +GenericName[ga]=Cluiche Chláir +GenericName[gl]=Xogo de Taboleiro +GenericName[he]=משחק לוח +GenericName[hi]=बिसात के खेल +GenericName[hr]=Igra na ploči +GenericName[hsb]=Deskowa hra +GenericName[hu]=Táblajáték +GenericName[is]=Borðleikur +GenericName[it]=Gioco da tavola +GenericName[ja]=ボードゲーム +GenericName[ka]=სამაგიდო თამაშები +GenericName[kk]=Үстел ойыны +GenericName[km]=ល្បែង​ក្ដារ +GenericName[ko]=보드 게임 +GenericName[lo]=ເກມກະດານ +GenericName[lt]=Stalo žaidimas +GenericName[lv]=Galda Spēle +GenericName[mk]=Игра на табла +GenericName[mn]=Хөлөгт тоглоом +GenericName[ms]=Permainan Papan +GenericName[mt]=Logħba tal-bord +GenericName[nb]=Brettspill +GenericName[nds]=Brettspeel +GenericName[ne]=बोर्ड खेल +GenericName[nl]=Bordspel +GenericName[nn]=Brettspel +GenericName[nso]=Papadi ya Board +GenericName[pa]=ਬੋਰਡ ਗੇਂਦ +GenericName[pl]=Gra planszowa +GenericName[pt]=Jogo de Tabuleiro +GenericName[pt_BR]=Tabuleiro +GenericName[ro]=Joc de table +GenericName[ru]=Настольная игра +GenericName[rw]=Umukino w'Ikibaho +GenericName[se]=Duolbbášspeallu +GenericName[sk]=Stolová hra +GenericName[sl]=Namizna igra +GenericName[sr]=Игра на табли +GenericName[sr@Latn]=Igra na tabli +GenericName[ss]=Umdlalo webhodi +GenericName[sv]=Brädspel +GenericName[ta]=போர்ட் விளையாட்டு +GenericName[te]=పలక ఆట +GenericName[tg]=Бозии тахтагӣ +GenericName[th]=เกมกระดาน +GenericName[tr]=Tahta Oyunu +GenericName[tt]=Taqta Uyını +GenericName[uk]=Гра на дошці +GenericName[uz]=Stol oʻyinlari +GenericName[uz@cyrillic]=Стол ўйинлари +GenericName[ven]=Bodo ya Mutambo +GenericName[vi]=Trò chơi bảng +GenericName[wa]=Djeu d' platea +GenericName[xh]=Umdlalo Webhodi +GenericName[zh_CN]=棋类游戏 +GenericName[zh_TW]=棋類遊戲 +GenericName[zu]=Umdlalo Webhodi +Exec=xgammon +Terminal=false +Icon=xgammon +Type=Application diff --git a/kappfinder/apps/Games/Board/xboard.desktop b/kappfinder/apps/Games/Board/xboard.desktop new file mode 100644 index 000000000..629787663 --- /dev/null +++ b/kappfinder/apps/Games/Board/xboard.desktop @@ -0,0 +1,110 @@ +[Desktop Entry] +GenericName=Chess Game +GenericName[af]=Skaak Speletjie +GenericName[ar]=لعبة شطرنج +GenericName[az]=Şahmat Oyunu +GenericName[be]=Шахматы +GenericName[bg]=Шах +GenericName[bn]=দাবা +GenericName[br]=C'hoari echedoù +GenericName[bs]=Igra šaha +GenericName[ca]=Joc d'escacs +GenericName[cs]=Šachy +GenericName[csb]=Szachë +GenericName[cy]=Gêm Gwyddbwyll +GenericName[da]=Skakspil +GenericName[de]=Schachspiel +GenericName[el]=Παιχνίδι σκάκι +GenericName[eo]=Ŝakludo +GenericName[es]=Juego de ajedrez +GenericName[et]=Male +GenericName[eu]=Xake jokoa +GenericName[fa]=بازی شطرنج +GenericName[fi]=Shakkipeli +GenericName[fo]=Skakk +GenericName[fr]=Jeu d'échecs +GenericName[fy]=Skaakspul +GenericName[ga]=Cluiche fhichille +GenericName[gl]=Xogo de Xadrez +GenericName[he]=משחק שחמט +GenericName[hi]=शतरंज का खेल +GenericName[hr]=Šah +GenericName[hsb]=Šach +GenericName[hu]=Sakk +GenericName[id]=Permainan Catur +GenericName[is]=Skákleikur +GenericName[it]=Gioco di scacchi +GenericName[ja]=チェスゲーム +GenericName[ka]=ჭადრაკი +GenericName[kk]=Шахмат ойыны +GenericName[km]=ល្បែង​អុក +GenericName[ko]=체스 게임 +GenericName[lo]=ເກມຫມາກລຸກ +GenericName[lt]=Šachmatai +GenericName[lv]=Šaha Spēle +GenericName[mk]=Шаховска игра +GenericName[mn]=Шатар +GenericName[ms]=Permainan Catur +GenericName[mt]=Logħba ċess +GenericName[nb]=Sjakkspill +GenericName[nds]=Schachspeel +GenericName[ne]=बुद्धिचाल खेल +GenericName[nl]=Schaakspel +GenericName[nn]=Sjakkspel +GenericName[nso]=Papadi ya Chess +GenericName[pa]=ਸਤਰੰਜ਼ ਖੇਡ +GenericName[pl]=Szachy +GenericName[pt]=Jogo de Xadrez +GenericName[pt_BR]=Xadrez +GenericName[ro]=Joc de șah +GenericName[ru]=Шахматы +GenericName[rw]=Umukino w'Itsindwa +GenericName[se]=Šahkkaspeallu +GenericName[sk]=Šach +GenericName[sl]=Igra šaha +GenericName[sr]=Шах +GenericName[sr@Latn]=Šah +GenericName[ss]=Umdlalo we Chess +GenericName[sv]=Schackspel +GenericName[ta]=செஸ் விளையாட்டு +GenericName[te]=చదరంగం ఆట +GenericName[tg]=Бозии Шоҳмот +GenericName[th]=เกมหมากรุก +GenericName[tr]=Satranç oyunu +GenericName[tt]=Şatranc Uyını +GenericName[uk]=Шахи +GenericName[uz]=Shaxmat oʻyini +GenericName[uz@cyrillic]=Шахмат ўйини +GenericName[ven]=Mutambo wa Tshese +GenericName[vi]=Cờ vua +GenericName[wa]=Djeu d' echeks +GenericName[xh]=Umdlalo we Chess +GenericName[zh_CN]=国际象棋游戏 +GenericName[zh_TW]=棋類遊戲 +GenericName[zu]=Umdlalo we-Chess +Exec=xboard +Icon=package_games_board +Name=Xboard +Name[af]=X-bord +Name[bn]=এক্সবোর্ড +Name[eo]=X-Breto +Name[fi]=XBoard +Name[fr]=XBoard +Name[hi]=एक्सबोर्ड +Name[hu]=XBoard +Name[it]=XBoard +Name[ne]=एक्स बोर्ड +Name[pa]=X ਬੋਰਡ +Name[rw]=X-ikibaho +Name[ta]=Xபோர்ட் +Name[te]=ఎక్స్ బోర్డ్ +Name[th]=เกมกระดาน +Name[tr]=XBoard +Name[ven]=Bodo ya X +Name[vi]=Bảng X +Name[zh_CN]=X 国际象棋 +Name[zh_TW]=Xboard 國際象棋 +Name[zu]=I-Xboard +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Games/Card/AisleRiot.desktop b/kappfinder/apps/Games/Card/AisleRiot.desktop new file mode 100644 index 000000000..58b9d2d53 --- /dev/null +++ b/kappfinder/apps/Games/Card/AisleRiot.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +Name=AisleRiot +Name[af]=Aisleriot +Name[bn]=এইসল-রায়ট +Name[cs]=Pozdvižení v uličce +Name[eo]=Simpla +Name[hi]=एस्लेरियॉट +Name[hr]=Pobuna u prolazu +Name[pa]=ਇਲਸੀਰਓਟ +Name[sv]=Kyrkouppror +Name[te]=ఐల్ రైయట్ +Name[uk]=Заколот на човні +Name[vi]= AisleRiot +GenericName=Card Game +GenericName[af]=Kaart Speletjie +GenericName[ar]=لعبة ورق +GenericName[az]=Kart Oyunu +GenericName[be]=Картавая гульня +GenericName[bg]=Игра с карти +GenericName[bn]=তাসের খেলা +GenericName[br]=C'hoari kartennoù +GenericName[bs]=Igra s kartama +GenericName[ca]=Joc de cartes +GenericName[cs]=Karty +GenericName[csb]=Kartowô gra +GenericName[cy]=Gêm cardiau +GenericName[da]=Kortspil +GenericName[de]=Kartenspiel +GenericName[el]=Παιχνίδι καρτών +GenericName[eo]=Kartludo +GenericName[es]=Juego de cartas +GenericName[et]=Kaardimäng +GenericName[eu]=Karta jokoa +GenericName[fa]=بازی کارت +GenericName[fi]=Korttipeli +GenericName[fo]=Kortspøl +GenericName[fr]=Jeu de cartes +GenericName[fy]=Kaartspul +GenericName[ga]=Cluiche Cártaí +GenericName[gl]=Xogo de Cartas +GenericName[he]=משחק קלפים +GenericName[hi]=ताश के खेल +GenericName[hr]=Kartaška igra +GenericName[hsb]=Kartowa hra +GenericName[hu]=Kártyajáték +GenericName[id]=Permainan Kartu +GenericName[is]=Kaplar +GenericName[it]=Gioco di carte +GenericName[ja]=カードゲーム +GenericName[ka]=თამაშები ბანქოთი +GenericName[kk]=Карта ойыны +GenericName[km]=ល្បែង​បៀរ +GenericName[lo]=ເກມໄພ້ +GenericName[lt]=Kortų žaidimas +GenericName[lv]=Kāršu Spēle +GenericName[mk]=Игра со карти +GenericName[mn]=Хөзрийн тоглоом +GenericName[ms]=Permainan Kad +GenericName[mt]=Logħba tal-karti +GenericName[nb]=Kortspill +GenericName[nds]=Koortspeel +GenericName[ne]=ताश खेल +GenericName[nl]=Kaartspel +GenericName[nn]=Kortspel +GenericName[nso]=Papadi ya Dikarata +GenericName[pa]=ਤਾਸ਼ ਖੇਡ +GenericName[pl]=Gra karciana +GenericName[pt]=Jogo de Cartas +GenericName[pt_BR]=Cartas +GenericName[ro]=Joc de cărți +GenericName[ru]=Карточная игра +GenericName[rw]=Umukino Ikarika +GenericName[se]=Goartaspeallu +GenericName[sk]=Kartová hra +GenericName[sl]=Igra s kartami +GenericName[sr]=Игра са картама +GenericName[sr@Latn]=Igra sa kartama +GenericName[ss]=Umdlalo welikhadi +GenericName[sv]=Kortspel +GenericName[ta]=கார்டு விளையாட்டு +GenericName[te]=పేక ఆట +GenericName[tg]=Бозии Корт +GenericName[th]=เกมไพ่ +GenericName[tr]=İskambil Oyunu +GenericName[tt]=Kard Uyını +GenericName[uk]=Карти +GenericName[uz]=Qarta oʻyini +GenericName[uz@cyrillic]=Қарта ўйини +GenericName[ven]=Garata ya mutambo +GenericName[vi]=Trò chơi bài +GenericName[wa]=Cwårdjeu +GenericName[xh]=Umdlalo Wekhadi +GenericName[zh_CN]=牌类游戏 +GenericName[zh_TW]=紙牌遊戲 +GenericName[zu]=Umdlalo Wamakhadi +Exec=sol +Terminal=false +Icon=gnome-aisleriot +Type=Application diff --git a/kappfinder/apps/Games/Card/FreeCell.desktop b/kappfinder/apps/Games/Card/FreeCell.desktop new file mode 100644 index 000000000..9c9c8960e --- /dev/null +++ b/kappfinder/apps/Games/Card/FreeCell.desktop @@ -0,0 +1,104 @@ +[Desktop Entry] +Name=FreeCell +Name[af]=Freecell +Name[bn]=ফ্রীসেল +Name[el]=Κυψέλες +Name[eo]=Libera Ĉelo +Name[hi]=फ्रीसेल +Name[ja]=フリーセル +Name[ne]=फ्री सेल +Name[nso]=Cell yeo e Lokollogilego +Name[pa]=ਖਾਲੀ ਸੈੱਲ +Name[ss]=Indzawo lekhulelekile +Name[sv]=Kungen +Name[ta]=ஃப்ரீ செல் +Name[te]=ఫ్రీసెల్ +Name[ven]=Sele ya Mahala +Name[vi]=Free Cell +Name[zh_CN]=空当接龙 +GenericName=Card Game +GenericName[af]=Kaart Speletjie +GenericName[ar]=لعبة ورق +GenericName[az]=Kart Oyunu +GenericName[be]=Картавая гульня +GenericName[bg]=Игра с карти +GenericName[bn]=তাসের খেলা +GenericName[br]=C'hoari kartennoù +GenericName[bs]=Igra s kartama +GenericName[ca]=Joc de cartes +GenericName[cs]=Karty +GenericName[csb]=Kartowô gra +GenericName[cy]=Gêm cardiau +GenericName[da]=Kortspil +GenericName[de]=Kartenspiel +GenericName[el]=Παιχνίδι καρτών +GenericName[eo]=Kartludo +GenericName[es]=Juego de cartas +GenericName[et]=Kaardimäng +GenericName[eu]=Karta jokoa +GenericName[fa]=بازی کارت +GenericName[fi]=Korttipeli +GenericName[fo]=Kortspøl +GenericName[fr]=Jeu de cartes +GenericName[fy]=Kaartspul +GenericName[ga]=Cluiche Cártaí +GenericName[gl]=Xogo de Cartas +GenericName[he]=משחק קלפים +GenericName[hi]=ताश के खेल +GenericName[hr]=Kartaška igra +GenericName[hsb]=Kartowa hra +GenericName[hu]=Kártyajáték +GenericName[id]=Permainan Kartu +GenericName[is]=Kaplar +GenericName[it]=Gioco di carte +GenericName[ja]=カードゲーム +GenericName[ka]=თამაშები ბანქოთი +GenericName[kk]=Карта ойыны +GenericName[km]=ល្បែង​បៀរ +GenericName[lo]=ເກມໄພ້ +GenericName[lt]=Kortų žaidimas +GenericName[lv]=Kāršu Spēle +GenericName[mk]=Игра со карти +GenericName[mn]=Хөзрийн тоглоом +GenericName[ms]=Permainan Kad +GenericName[mt]=Logħba tal-karti +GenericName[nb]=Kortspill +GenericName[nds]=Koortspeel +GenericName[ne]=ताश खेल +GenericName[nl]=Kaartspel +GenericName[nn]=Kortspel +GenericName[nso]=Papadi ya Dikarata +GenericName[pa]=ਤਾਸ਼ ਖੇਡ +GenericName[pl]=Gra karciana +GenericName[pt]=Jogo de Cartas +GenericName[pt_BR]=Cartas +GenericName[ro]=Joc de cărți +GenericName[ru]=Карточная игра +GenericName[rw]=Umukino Ikarika +GenericName[se]=Goartaspeallu +GenericName[sk]=Kartová hra +GenericName[sl]=Igra s kartami +GenericName[sr]=Игра са картама +GenericName[sr@Latn]=Igra sa kartama +GenericName[ss]=Umdlalo welikhadi +GenericName[sv]=Kortspel +GenericName[ta]=கார்டு விளையாட்டு +GenericName[te]=పేక ఆట +GenericName[tg]=Бозии Корт +GenericName[th]=เกมไพ่ +GenericName[tr]=İskambil Oyunu +GenericName[tt]=Kard Uyını +GenericName[uk]=Карти +GenericName[uz]=Qarta oʻyini +GenericName[uz@cyrillic]=Қарта ўйини +GenericName[ven]=Garata ya mutambo +GenericName[vi]=Trò chơi bài +GenericName[wa]=Cwårdjeu +GenericName[xh]=Umdlalo Wekhadi +GenericName[zh_CN]=牌类游戏 +GenericName[zh_TW]=紙牌遊戲 +GenericName[zu]=Umdlalo Wamakhadi +Exec=freecell +Terminal=false +Icon=gnome-cardgame +Type=Application diff --git a/kappfinder/apps/Games/Card/Makefile.am b/kappfinder/apps/Games/Card/Makefile.am new file mode 100644 index 000000000..a19b17022 --- /dev/null +++ b/kappfinder/apps/Games/Card/Makefile.am @@ -0,0 +1,5 @@ +kappfinder_games_card_data_DATA = PySol.desktop AisleRiot.desktop FreeCell.desktop XPat2.desktop + +kappfinder_games_card_datadir = $(kde_datadir)/kappfinder/apps/Games/Card + +EXTRA_DIST = $(kappfinder_games_card_data_DATA) diff --git a/kappfinder/apps/Games/Card/PySol.desktop b/kappfinder/apps/Games/Card/PySol.desktop new file mode 100644 index 000000000..84b71a933 --- /dev/null +++ b/kappfinder/apps/Games/Card/PySol.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +GenericName=Card Game +GenericName[af]=Kaart Speletjie +GenericName[ar]=لعبة ورق +GenericName[az]=Kart Oyunu +GenericName[be]=Картавая гульня +GenericName[bg]=Игра с карти +GenericName[bn]=তাসের খেলা +GenericName[br]=C'hoari kartennoù +GenericName[bs]=Igra s kartama +GenericName[ca]=Joc de cartes +GenericName[cs]=Karty +GenericName[csb]=Kartowô gra +GenericName[cy]=Gêm cardiau +GenericName[da]=Kortspil +GenericName[de]=Kartenspiel +GenericName[el]=Παιχνίδι καρτών +GenericName[eo]=Kartludo +GenericName[es]=Juego de cartas +GenericName[et]=Kaardimäng +GenericName[eu]=Karta jokoa +GenericName[fa]=بازی کارت +GenericName[fi]=Korttipeli +GenericName[fo]=Kortspøl +GenericName[fr]=Jeu de cartes +GenericName[fy]=Kaartspul +GenericName[ga]=Cluiche Cártaí +GenericName[gl]=Xogo de Cartas +GenericName[he]=משחק קלפים +GenericName[hi]=ताश के खेल +GenericName[hr]=Kartaška igra +GenericName[hsb]=Kartowa hra +GenericName[hu]=Kártyajáték +GenericName[id]=Permainan Kartu +GenericName[is]=Kaplar +GenericName[it]=Gioco di carte +GenericName[ja]=カードゲーム +GenericName[ka]=თამაშები ბანქოთი +GenericName[kk]=Карта ойыны +GenericName[km]=ល្បែង​បៀរ +GenericName[lo]=ເກມໄພ້ +GenericName[lt]=Kortų žaidimas +GenericName[lv]=Kāršu Spēle +GenericName[mk]=Игра со карти +GenericName[mn]=Хөзрийн тоглоом +GenericName[ms]=Permainan Kad +GenericName[mt]=Logħba tal-karti +GenericName[nb]=Kortspill +GenericName[nds]=Koortspeel +GenericName[ne]=ताश खेल +GenericName[nl]=Kaartspel +GenericName[nn]=Kortspel +GenericName[nso]=Papadi ya Dikarata +GenericName[pa]=ਤਾਸ਼ ਖੇਡ +GenericName[pl]=Gra karciana +GenericName[pt]=Jogo de Cartas +GenericName[pt_BR]=Cartas +GenericName[ro]=Joc de cărți +GenericName[ru]=Карточная игра +GenericName[rw]=Umukino Ikarika +GenericName[se]=Goartaspeallu +GenericName[sk]=Kartová hra +GenericName[sl]=Igra s kartami +GenericName[sr]=Игра са картама +GenericName[sr@Latn]=Igra sa kartama +GenericName[ss]=Umdlalo welikhadi +GenericName[sv]=Kortspel +GenericName[ta]=கார்டு விளையாட்டு +GenericName[te]=పేక ఆట +GenericName[tg]=Бозии Корт +GenericName[th]=เกมไพ่ +GenericName[tr]=İskambil Oyunu +GenericName[tt]=Kard Uyını +GenericName[uk]=Карти +GenericName[uz]=Qarta oʻyini +GenericName[uz@cyrillic]=Қарта ўйини +GenericName[ven]=Garata ya mutambo +GenericName[vi]=Trò chơi bài +GenericName[wa]=Cwårdjeu +GenericName[xh]=Umdlalo Wekhadi +GenericName[zh_CN]=牌类游戏 +GenericName[zh_TW]=紙牌遊戲 +GenericName[zu]=Umdlalo Wamakhadi +Exec=pysol +Icon=kpat +Name=PySol +Name[af]=Pysol +Name[bn]=পাই-সল +Name[eo]=Soliterego +Name[hi]=पायसॉल +Name[lo]=Pysol +Name[ne]=पाइ सोल +Name[sv]=Pysol +Name[te]=పైసొల్ +Name[th]=เกมถอดไพ่ PySol +Terminal=false +Type=Application diff --git a/kappfinder/apps/Games/Card/XPat2.desktop b/kappfinder/apps/Games/Card/XPat2.desktop new file mode 100644 index 000000000..c554a172a --- /dev/null +++ b/kappfinder/apps/Games/Card/XPat2.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +Name=XPat 2 +Name[af]=Xpat 2 +Name[eo]=X-Solitero 2 +Name[hi]=एक्सपैट 2 +Name[ja]=X Pat 2 +Name[lo]=XPat2 +Name[ne]=एक्स प्याट २ +Name[sv]=Xpat 2 +Name[ta]=Xபாட் 2 +Name[te]=ఎక్స్ పేట్ 2 +Name[th]=เกมไพ่ XPat 2 +Name[zu]=I-XPat 2 +GenericName=Card Game +GenericName[af]=Kaart Speletjie +GenericName[ar]=لعبة ورق +GenericName[az]=Kart Oyunu +GenericName[be]=Картавая гульня +GenericName[bg]=Игра с карти +GenericName[bn]=তাসের খেলা +GenericName[br]=C'hoari kartennoù +GenericName[bs]=Igra s kartama +GenericName[ca]=Joc de cartes +GenericName[cs]=Karty +GenericName[csb]=Kartowô gra +GenericName[cy]=Gêm cardiau +GenericName[da]=Kortspil +GenericName[de]=Kartenspiel +GenericName[el]=Παιχνίδι καρτών +GenericName[eo]=Kartludo +GenericName[es]=Juego de cartas +GenericName[et]=Kaardimäng +GenericName[eu]=Karta jokoa +GenericName[fa]=بازی کارت +GenericName[fi]=Korttipeli +GenericName[fo]=Kortspøl +GenericName[fr]=Jeu de cartes +GenericName[fy]=Kaartspul +GenericName[ga]=Cluiche Cártaí +GenericName[gl]=Xogo de Cartas +GenericName[he]=משחק קלפים +GenericName[hi]=ताश के खेल +GenericName[hr]=Kartaška igra +GenericName[hsb]=Kartowa hra +GenericName[hu]=Kártyajáték +GenericName[id]=Permainan Kartu +GenericName[is]=Kaplar +GenericName[it]=Gioco di carte +GenericName[ja]=カードゲーム +GenericName[ka]=თამაშები ბანქოთი +GenericName[kk]=Карта ойыны +GenericName[km]=ល្បែង​បៀរ +GenericName[lo]=ເກມໄພ້ +GenericName[lt]=Kortų žaidimas +GenericName[lv]=Kāršu Spēle +GenericName[mk]=Игра со карти +GenericName[mn]=Хөзрийн тоглоом +GenericName[ms]=Permainan Kad +GenericName[mt]=Logħba tal-karti +GenericName[nb]=Kortspill +GenericName[nds]=Koortspeel +GenericName[ne]=ताश खेल +GenericName[nl]=Kaartspel +GenericName[nn]=Kortspel +GenericName[nso]=Papadi ya Dikarata +GenericName[pa]=ਤਾਸ਼ ਖੇਡ +GenericName[pl]=Gra karciana +GenericName[pt]=Jogo de Cartas +GenericName[pt_BR]=Cartas +GenericName[ro]=Joc de cărți +GenericName[ru]=Карточная игра +GenericName[rw]=Umukino Ikarika +GenericName[se]=Goartaspeallu +GenericName[sk]=Kartová hra +GenericName[sl]=Igra s kartami +GenericName[sr]=Игра са картама +GenericName[sr@Latn]=Igra sa kartama +GenericName[ss]=Umdlalo welikhadi +GenericName[sv]=Kortspel +GenericName[ta]=கார்டு விளையாட்டு +GenericName[te]=పేక ఆట +GenericName[tg]=Бозии Корт +GenericName[th]=เกมไพ่ +GenericName[tr]=İskambil Oyunu +GenericName[tt]=Kard Uyını +GenericName[uk]=Карти +GenericName[uz]=Qarta oʻyini +GenericName[uz@cyrillic]=Қарта ўйини +GenericName[ven]=Garata ya mutambo +GenericName[vi]=Trò chơi bài +GenericName[wa]=Cwårdjeu +GenericName[xh]=Umdlalo Wekhadi +GenericName[zh_CN]=牌类游戏 +GenericName[zh_TW]=紙牌遊戲 +GenericName[zu]=Umdlalo Wamakhadi +Exec=xpat2 +Terminal=false +Icon=xpat2 +Type=Application diff --git a/kappfinder/apps/Games/Clanbomber.desktop b/kappfinder/apps/Games/Clanbomber.desktop new file mode 100644 index 000000000..4052cef80 --- /dev/null +++ b/kappfinder/apps/Games/Clanbomber.desktop @@ -0,0 +1,25 @@ +[Desktop Entry] +Exec=clanbomber +Icon=clanbomber +Name=Clanbomber +Name[af]=Klanbommer +Name[bn]=ক্ল্যান-বোম্বার +Name[eo]=Bombanto +Name[fr]=ClanBomber +Name[hi]=क्लैनबॉम्बर +Name[hu]=Bombarakó +Name[ja]=Clan ボンバー +Name[km]=យន្តហោះ​ទម្លាក់​គ្រាប់បែក +Name[ne]=क्लान बम्बर +Name[pa]=ਕਲਾਨ ਬੰਬਰ +Name[sk]=ClanBomber +Name[sv]=Klanbombare +Name[ta]=க்ளான்பாம்பர் +Name[te]=క్లాన్ బాంబర్ +Name[th]=ClanBomber +Name[zh_CN]=炸弹人 +Name[zh_TW]=Clanbomber 炸彈超人 +Name[zu]=Umqhumisi wesigodi +Path= +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Emulators/Makefile.am b/kappfinder/apps/Games/Emulators/Makefile.am new file mode 100644 index 000000000..a5863027e --- /dev/null +++ b/kappfinder/apps/Games/Emulators/Makefile.am @@ -0,0 +1,5 @@ +kappfinder_games_emulators_data_DATA = qmamecat.desktop + +kappfinder_games_emulators_datadir = $(kde_datadir)/kappfinder/apps/Games/Emulators + +EXTRA_DIST = $(kappfinder_games_emulators_data_DATA) diff --git a/kappfinder/apps/Games/Emulators/cmail.desktop b/kappfinder/apps/Games/Emulators/cmail.desktop new file mode 100644 index 000000000..f848e7723 --- /dev/null +++ b/kappfinder/apps/Games/Emulators/cmail.desktop @@ -0,0 +1,109 @@ +[Desktop Entry] +Name=ChessMail +Name[af]=Pos-skaak +Name[bn]=চেস-মেইল +Name[csb]=E-mailowé szachë +Name[eo]=Ŝakpoŝto +Name[fi]=KirjeShakki +Name[hi]=चेसमेल +Name[hr]=Poštanski šah +Name[ja]=チェスメール +Name[kk]=Шахмат поштасы +Name[lo]=CheseMail +Name[lv]=PastaŠahs +Name[ne]=बुद्धिचाल पत्र +Name[nso]=Poso ya Chess +Name[pa]=ਸਤਰੰਜ਼-ਮੇਲ +Name[pl]=Szachy mailowe +Name[pt_BR]=Xadrez por E-mail +Name[rw]=UbutumwaItsindwa +Name[sv]=Schackpost +Name[ta]=செஸ் அஞ்சல் +Name[te]=తపాలా చదరంగం +Name[tr]=Satranç Postası +Name[ven]=Diresi ya Tsheze +Name[vi]=Cờ vua qua Thư điện tử +Name[zu]=Iposi le-Chess +GenericName=Email for Chess +GenericName[af]=E-pos vir Skaak +GenericName[ar]=بريد إلكتروني للشطرنج +GenericName[az]=Şahmat üçün Poçt +GenericName[be]=Электронная пошта для шахмат +GenericName[bg]=Шах по е-поща +GenericName[bn]=দাবার জন্য ই-মেইল +GenericName[br]=Postel evit an echedoù +GenericName[bs]=Email za šah +GenericName[ca]=Escacs per correu +GenericName[cs]=Email pro Chess +GenericName[csb]=E-maila dlô szachów +GenericName[cy]=E-bost i wyddbwyll +GenericName[da]=E-mail for skak +GenericName[de]=E-Mail Programm für Schach +GenericName[el]=Email για το Chess +GenericName[eo]=Retpoŝto por ŝako +GenericName[es]=correo electrónico para ajedrez +GenericName[et]=Male kirja teel +GenericName[eu]=Xakean jokatzeko posta elektronikoa +GenericName[fa]=رایانامه برای شطرنج +GenericName[fi]=Sähköpostishakki +GenericName[fr]=Jeu d'échecs par courrier électronique +GenericName[fy]=E-post foar Chess +GenericName[ga]=Ríomhphost le haghaidh fichille +GenericName[gl]=Correo-e para Xadrez +GenericName[he]=דוא"ל לשחמט +GenericName[hi]=शतरंज के लिए ईमेल +GenericName[hr]=E-pošta za šah +GenericName[hsb]=Email za šach +GenericName[hu]=E-mailes sakk +GenericName[is]=Tölvupóstur fyrir skák +GenericName[it]=Posta elettronica per gli scacchi +GenericName[ja]=チェスの E メール +GenericName[ka]=ელფოსტა ჭადრაკისათვის +GenericName[kk]=Шахмат эл.поштасы +GenericName[km]=អ៊ីមែល​របស់ Chess +GenericName[ko]=체스를 위한 전자 우편 +GenericName[lo]=Email for chess +GenericName[lt]=E. paštas šachmatams +GenericName[lv]=EPasts Šaham +GenericName[mk]=Е-пошта за шах +GenericName[mn]=Шатарт зориулсан э-захиа програм +GenericName[ms]=Emel untuk Catur +GenericName[mt]=Imejl għaċ-ċess +GenericName[nb]=E-post for sjakk +GenericName[nds]=Nettpost för Schach +GenericName[ne]=बुद्धिचालका लागि इमेल +GenericName[nl]=E-mail voor Chess +GenericName[nn]=E-post for sjakk +GenericName[nso]=E-poso ya Chess +GenericName[pa]=ਸਤਰੰਜ਼ ਲਈ ਈ-ਮੇਲ +GenericName[pl]=e-mail dla Szachów +GenericName[pt]=E-mail para o Xadrez +GenericName[pt_BR]=Mensagem de e-mail para o Xadrez +GenericName[ro]=Email pentru șah +GenericName[ru]=Сообщение email для шахмат +GenericName[rw]=Imeli y'Intsindwa +GenericName[se]=E-boasta šáhkka várás +GenericName[sk]=Email pre Chess +GenericName[sl]=E-poštni šah +GenericName[sr]=Е-порука за шах +GenericName[sr@Latn]=E-poruka za šah +GenericName[ss]=I-email ye Chess +GenericName[sv]=E-post för Schack +GenericName[ta]=செஸ்க்குக்கான மின்னஞ்சல் +GenericName[te]=చదరంగం కొరకు ఈమెయిల్ +GenericName[tg]=Иттилооти Email барои Шоҳмот +GenericName[th]=จดหมายอิเลคทรอนิคส์สำหรับหมากรุก +GenericName[tr]=Satranç için E-Posta iletisi +GenericName[tt]=Email aşa Şatranc +GenericName[uk]=Ел. пошта для шахів +GenericName[ven]=Emeili ya Tsheze +GenericName[vi]=Thư điện tử cho Cờ vua +GenericName[wa]=Emile po ls echeks +GenericName[xh]=Email ye Chess +GenericName[zh_CN]=电子邮件象棋 +GenericName[zh_TW]=以電郵方式下國際象棋 +GenericName[zu]=Iposi lekhomputha le-Chess +Exec=cmail +Terminal=true +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Games/Emulators/qmamecat.desktop b/kappfinder/apps/Games/Emulators/qmamecat.desktop new file mode 100644 index 000000000..eb797bca8 --- /dev/null +++ b/kappfinder/apps/Games/Emulators/qmamecat.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +GenericName=Arcade Emulator +GenericName[af]=Arkade Emulasie +GenericName[ar]=مضاهِ Arcade +GenericName[az]=Arcade Emulyatoru +GenericName[be]=Аркадны эмулятар +GenericName[bg]=Емулатор Arcade +GenericName[bn]=আর্কেড এমুলেটর +GenericName[br]=Kendarvanerezh tavarn +GenericName[bs]=Simulator arkada +GenericName[ca]=Emulador arcade +GenericName[cs]=Arkádový emulátor +GenericName[csb]=Emùlator chwatkòwi grë +GenericName[cy]=Efelychydd Arcêd +GenericName[da]=Arkade-emulator +GenericName[de]=Arkade-Emulator +GenericName[el]=Προσομοιωτής arcade +GenericName[eo]=Arkado-emulilo +GenericName[es]=Emulador de Arcade +GenericName[et]=Mänguautomaadi emulaator +GenericName[eu]=Arkade emuladorea +GenericName[fa]=مقلد گذرگاه تاقدار +GenericName[fi]=Videoemulaattori +GenericName[fr]=Émulateur de jeux d'arcade +GenericName[fy]=Arcade-emulaasje +GenericName[ga]=Aithriseoir Stuara +GenericName[gl]=Emulador Arcade +GenericName[he]=אמולטור למשחקי Arcade +GenericName[hi]=आर्केड एमुलेटर +GenericName[hr]=Emulator arkada +GenericName[hu]=Játéktermi emulátor +GenericName[id]=Emulator Arcade +GenericName[it]=Emulatore arcade +GenericName[ja]=アーケードエミュレータ +GenericName[ka]=ემულატორი Arcade თამაშებისათვის +GenericName[kk]=Аркад ойынының эмуляторы +GenericName[km]=កម្មវិធី​ត្រាប់​តាម​ការ​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 에뮬레이터 +GenericName[lo]=ຈຳລອງເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis emuliatorius +GenericName[lv]=Arkādes Emulators +GenericName[mk]=Аркаден емулатор +GenericName[mn]=Сансрын тоглоомын эмулатор +GenericName[ms]=Emulator Arked +GenericName[mt]=Emulatur tal-arcades +GenericName[nb]=Arkadespillemulator +GenericName[nds]=Emulator vun'n Speelhall +GenericName[ne]=आर्केड इमुलेटर +GenericName[nl]=Arcade-emulatie +GenericName[nn]=Arkadeemulator +GenericName[nso]=Seeekisi sa Arcade +GenericName[pa]=ਅਰਕਾਡੀ ਸਮਰੂਪ +GenericName[pl]=Emulator gry zręcznościowej +GenericName[pt]=Emulador de Arcadas +GenericName[pt_BR]=Emulador para o Arcade +GenericName[ro]=Emulator pentru joc de aventuri +GenericName[ru]=Эмулятор аркадных игр +GenericName[rw]=Mukuruzi Ikirongozi +GenericName[se]=Fearánspellu emuláhtor +GenericName[sk]=Emulátor automatov +GenericName[sl]=Arkadni emulator +GenericName[sr]=Аркадни емулатор +GenericName[sr@Latn]=Arkadni emulator +GenericName[ss]=Silingiseli Arcade +GenericName[sv]=Arkademulator +GenericName[ta]=ஆர்கேட் எமுலேட்டர் +GenericName[te]=ఆర్కెడ్ ఎములెటర్ +GenericName[tg]=Эмулятори бозиҳои Arcade +GenericName[th]=จำลองเกมอาเขต +GenericName[tr]=Macera Oyunu Öyküncüsü +GenericName[tt]=Arkad Oxşaşlawı +GenericName[uk]=Емулятор "Arcade" +GenericName[uz]= Arkada oʻyinlar emulyatori +GenericName[uz@cyrillic]= Аркада ўйинлар эмулятори +GenericName[ven]=Mutevhedzeli wa Akhaidi +GenericName[vi]=Mô phỏng Mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umlinganisi we Emulator +GenericName[zh_CN]=街机模拟器 +GenericName[zh_TW]=電子遊戲模擬器 +GenericName[zu]=Umlingisi womhhume +Exec=qmamecat +Icon=penguin +Name=Qmamecat +Name[af]=Qmame-kat +Name[eo]=QMamecat +Name[fr]=QMamecat +Name[hi]=क्यूमामेकेट +Name[ne]=क्युमामिक्याट +Name[pa]=ਕਿਉਮੀਕੈਟ +Name[te]=క్యుమెమ్ కేట్ +Name[ven]=QmameTshimange +Name[xh]=Qmamekati +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Games/GTali.desktop b/kappfinder/apps/Games/GTali.desktop new file mode 100644 index 000000000..0858ad25f --- /dev/null +++ b/kappfinder/apps/Games/GTali.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=GTali +Name[af]=Gtali +Name[bn]=জি-টালী +Name[eo]=Gtalio +Name[hi]=जी-ताली +Name[ne]=जिट्याली +Name[pa]=G ਟਾਲੀ +Name[sv]=Gtali +Name[te]=జీటాలి +GenericName=Dice Game +GenericName[af]=Dobbelsteen Speletjie +GenericName[ar]=لعبة نرد +GenericName[az]=Zər Oyunu +GenericName[be]=Гульня з косткамі +GenericName[bg]=Игра със зарове +GenericName[bn]=ছক্কার খেলা +GenericName[br]=C'hoari diñs +GenericName[bs]=Igra s kockama +GenericName[ca]=Joc de dades +GenericName[cs]=Kostky +GenericName[csb]=Grë z kòstką +GenericName[cy]=Gêm Deis +GenericName[da]=Terningespil +GenericName[de]=Würfelspiel +GenericName[el]=Παιχνίδι ζαριών +GenericName[eo]=Kuboludo +GenericName[es]=Juego de dados +GenericName[et]=Täringumäng +GenericName[eu]=Dado jokoa +GenericName[fa]=بازی تاس +GenericName[fi]=Noppapeli +GenericName[fo]=Terningar +GenericName[fr]=Jeu de dés +GenericName[fy]=Dobbelspul +GenericName[ga]=Cluiche Dísle +GenericName[gl]=Xogo de Dados +GenericName[he]=משחק קוביות +GenericName[hi]=पाँसे का खेल +GenericName[hr]=Igra s kockicama +GenericName[hsb]=Kóstkowe hry +GenericName[hu]=Kockajáték +GenericName[id]=Permainan Dadu +GenericName[is]=Teningaspil +GenericName[it]=Gioco di dadi +GenericName[ja]=サイコロゲーム +GenericName[ka]=თამაშები კამათელით +GenericName[kk]=Dice ойыны +GenericName[km]=ល្បែង​គ្រាប់​ឡុកឡាក់ +GenericName[lo]=ເກມລູກເຕົ໋າ +GenericName[lt]=Žaidimas kauliukais +GenericName[lv]=Kauliņu Spēle +GenericName[mk]=Игра со коцки +GenericName[mn]=Шоон тоглоом +GenericName[ms]=Permainan Dadu +GenericName[mt]=Logħba bid-damem +GenericName[nb]=Terningspill +GenericName[nds]=Wörpelspeel +GenericName[ne]=पासा खेल +GenericName[nl]=Dobbelspel +GenericName[nn]=Terningspel +GenericName[nso]=Papadi ya Mataese +GenericName[pa]=ਡੀਸਕ ਖੇਡ +GenericName[pl]=Gra z kostką +GenericName[pt]=Jogo de Dados +GenericName[pt_BR]=Dados +GenericName[ro]=Joc de zaruri +GenericName[ru]=Игра в кости +GenericName[rw]=Umukino w'Agakibe +GenericName[se]=Bircospeallu +GenericName[sk]=Kocky +GenericName[sl]=Igra s kockami +GenericName[sr]=Игра са коцкицама +GenericName[sr@Latn]=Igra sa kockicama +GenericName[ss]=Umdlalo wemadayisi +GenericName[sv]=Tärningsspel +GenericName[ta]=டைஸ் விளையாட்டு +GenericName[te]=పాచికల ఆట +GenericName[tg]=Тос бозӣ +GenericName[th]=เกมทอดลูกเต๋า +GenericName[tr]=Zar oyunu +GenericName[tt]=Söyläk Uyını +GenericName[uk]=Кості +GenericName[uz]=Tosh oʻyini +GenericName[uz@cyrillic]=Тош ўйини +GenericName[ven]=Mutambo wa Daisi +GenericName[vi]=Trò chơi súc sắc +GenericName[wa]=Djeu d' dés +GenericName[xh]=Umdlalo we Dice +GenericName[zh_CN]=骰子游戏 +GenericName[zh_TW]=骰子遊戲 +GenericName[zu]=Umdlalo Wamadayisi +Exec=gtali +Terminal=false +Icon=gnome-gtali +Type=Application diff --git a/kappfinder/apps/Games/Makefile.am b/kappfinder/apps/Games/Makefile.am new file mode 100644 index 000000000..a0d7f4bc2 --- /dev/null +++ b/kappfinder/apps/Games/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = Arcade Board Card Emulators TacticStrategy Roguelikes Toys + +kappfinder_games_data_DATA = penguin-command.desktop xshipwars.desktop \ + Clanbomber.desktop defendguin.desktop GTali.desktop + +kappfinder_games_datadir = $(kde_datadir)/kappfinder/apps/Games + +EXTRA_DIST = $(kappfinder_games_data_DATA) diff --git a/kappfinder/apps/Games/Roguelikes/Makefile.am b/kappfinder/apps/Games/Roguelikes/Makefile.am new file mode 100644 index 000000000..4c3f47493 --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/Makefile.am @@ -0,0 +1,9 @@ +kappfinder_games_roguelikes_data_DATA = angband.desktop moria.desktop nethack.desktop tome.desktop \ + rogue.desktop zangband.desktop + +kappfinder_games_roguelikes_datadir = $(kde_datadir)/kappfinder/apps/Games/Roguelikes + +install-data-local: + rm -rf $(DESTDIR)$(kde_appsdir)/Games/NetHackFalconsEye.desktop + +EXTRA_DIST = $(kappfinder_games_roguelikes_data_DATA) diff --git a/kappfinder/apps/Games/Roguelikes/angband.desktop b/kappfinder/apps/Games/Roguelikes/angband.desktop new file mode 100644 index 000000000..42da6573e --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/angband.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=Angband +Name[eo]=Angbando +Name[hi]=एंगबैंड +Name[kk]=Ангбанд +Name[mk]=Ангбанд +Name[mn]=Ангбанд +Name[ne]=यान्गब्यान्ड +Name[pa]=ਅੰਗਬੰਡ +Name[ru]=Ангбанд +Name[te]=ఆంగ్బెండ్ +Name[tg]=Ангбанд +Name[uk]=Ангбанд +Comment=Dive into Angband and defeat Morgoth +Comment[af]=Duik binnein Angband en oorwin Morgoth +Comment[be]=Вандроўка ў Ангбанд, бойка з Моргатам +Comment[bg]=Гмурнете се в Angband и победете Morgoth +Comment[bn]=আংবন্দ-এ ঢুকে মরগথ-কে হারান +Comment[bs]=Zaronite u Angband i pobjedite Morgotha +Comment[ca]=Endinseu-vos en Angband i derroteu a Morgoth +Comment[cs]=Vnijněte do Angbandu a porazte Morgotha +Comment[csb]=Wéńdzë do Angbandu ë pòradzë Morgothowi +Comment[cy]=Neidiwch i mewn i Angband a threchwch Morgoth +Comment[da]=Dyk ned i Angband og overvind Morgoth +Comment[de]=Tauchen Sie ein in Angband und besiegen Sie Morgoth +Comment[el]=Καταδυθείτε στο Angband και νικήστε τον Morgoth +Comment[eo]=Eniru Angbandon kaj defiu Morgoton +Comment[es]=Sumerjase en Angband y derrote a Morgoth +Comment[et]=Angbandi minek ja Morgothi hävitamine +Comment[eu]=Murgil zaitez Angband-en eta garai ezazu Morgoth +Comment[fa]=حمله به Angband و شکست Morgoth +Comment[fi]=Sukella Angbandiin ja voita Morgoth +Comment[fr]=Osez pénétrer en Angband pour vaincre Morgoth +Comment[fy]=Dûk yn Angband en ferslach Morgoth +Comment[ga]=Léim amach i Angband agus buail Morgoth +Comment[gl]=Entre en Angband e derrote a Morgoth +Comment[he]=שחק ב־Angband ונצח את מאורגות'' +Comment[hi]=एंगबैंड में गोता लगाएँ और मॉरगोथ को हराएँ +Comment[hr]=Skočite u Angband i pobijedite Morgotha +Comment[hsb]=Dźiće do Angbanda dobudźće přećuwo Morgothej +Comment[hu]=Angband földjén kell legyőzni Morgoth-ot +Comment[is]=Stökktu í Angband og sigraðu Morgoth +Comment[it]=Tuffati dentro Angband e sconfiggi Morgoth +Comment[ja]=Angband に行き Morgoth を倒す +Comment[ka]=გაემართეთ ანგბადში და დაამარცხეთ მორგოტი +Comment[kk]=Ангбангдқа барып Морготты жеңіп келіңіз +Comment[ko]=Angband를 시작하시고 Morgoth를 꺾으십시오 +Comment[lt]=Pasinerk į Angband ir nugalėk Morgoth +Comment[lv]=Ienirt Angbandā un sakaut Morgotu +Comment[mk]=Нурни во Ангбанд и победи го Моргот +Comment[mn]=Ангбанд доогуур шургаж Морготыг ял +Comment[ms]=Sertai Angband dan kalahkan Morgoth +Comment[mt]=Idħol ġo Angband u egħleb lill Morgoth +Comment[nb]=Reis inn i Angband og kjemp mot Morgoth +Comment[nds]=Gah na Angband rin un dwing Morgoth daal +Comment[ne]=यान्गब्यान्डमा डुबुल्की मार्नुहोस् र मोर्गोथलाई हराउनुहोस् +Comment[nl]=Duik in Angband en versla Morgoth +Comment[nn]=Reis inn i Angband og kjemp mot Morgoth +Comment[nso]=Thinyetsa kago Angband gomme o fenye Morgoth +Comment[pa]=ਅੰਗਬੰਦ ਵਿੱਚ ਆਓ ਅਤੇ ਮੋਰਗੋਥ ਨੂੰ ਹਰਾਓ +Comment[pl]=Wkrocz do Angbandu i pokonaj Morgotha +Comment[pt]=Mergulhe em Angband e derrote o Morgoth +Comment[pt_BR]=Salte para dentro do Angband e derrote Morgoth +Comment[ro]=Intră în Angband și învinge-l pe Morgoth +Comment[ru]=Отправьтесь в Ангбанд и победите Моргота +Comment[rw]=Gusimbukira muri Angband no gutsinda Morgoth +Comment[se]=Mátkkuš Angbandii ja heaibbu Morgothain +Comment[sk]=Vpadnite do Angbandu a porazte Morgotha +Comment[sl]=Spustite se v Angband in premagajte Morgotha +Comment[sr]=Зароните у Angband и поразите Моргота +Comment[sr@Latn]=Zaronite u Angband i porazite Morgota +Comment[ss]=Zubela ku Angband besewuncoba Morgoth +Comment[sv]=Nedstig i Angband och besegra Morgoth +Comment[ta]=ஆங்பான்ட்டில் குதித்து மார்கோத்தை தோற்கடிக்கவும் +Comment[te]=ఆంగ్బెండ్ లో ములిగి తేలండి మరియూ మొర్గొత్ ను ఓడించండి +Comment[tg]= Ба Ангбанд ҷониб шавед ва Морготро ғолиб шавед +Comment[th]=ดำดิ่งสู่ Angband แล้วเอาชนะ Morgoth +Comment[tr]=Angband'a dalıp Morgoth'u mağlub edin +Comment[tt]=Angband taba barıp Morgoth'nı ciñ +Comment[uk]=Пірніть у Ангбанд та переможіть Моргота +Comment[uz]=Angbandga borib Morgotni yengib chiqing +Comment[uz@cyrillic]=Ангбандга бориб Морготни енгиб чиқинг +Comment[ven]=Fhufhelani kha Angbennde ni fhenye Morgoth +Comment[vi]=Lặn xuống Angband và đánh bại Morgoth +Comment[wa]=Plonkez dins Angband et batoz Morgoth +Comment[zh_CN]=潜入 Angband 并击败 Morgoth +Comment[zh_TW]=進入 Angband 並打敗 Morgoth +Comment[zu]=Gxumela kwi-Angband ebese uhlula i-Morgoth +Exec=angband +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Roguelikes/moria.desktop b/kappfinder/apps/Games/Roguelikes/moria.desktop new file mode 100644 index 000000000..0c83e751c --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/moria.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Moria +Name[bn]=মোরিয়া +Name[eo]=Morio +Name[hi]=मोरिया +Name[ka]=მორია +Name[kk]=Мория +Name[lo]=Moria into Angband and de +Name[mk]=Морија +Name[mn]=Мория +Name[ne]=मोरिआ +Name[pa]=ਮੋਰੀਆ +Name[ru]=Мория +Name[sr]=Морија +Name[sr@Latn]=Morija +Name[ta]=மோரியா +Name[te]=మోరియా +Name[tg]=Мория +Name[uk]=Морія +Comment=Dive into Moria and defeat the Balrog +Comment[af]=Duik binnein Moria en oorwin die Balrog +Comment[be]=Вандроўка ў Морыю, бойка з Балрагам +Comment[bg]=Влезте в Мория и победете балрога +Comment[bn]=মোরিয়ায় ঢুকে বালরগ-কে হারান +Comment[bs]=Zaronite u Moriu i pobjedite Balroga +Comment[ca]=Endinseu-vos a Moria i derroteu a Balrog +Comment[cs]=Vnikněte do Morie a porazte Balroga +Comment[csb]=Wéńdzë do Morijë ë pòradzë Balrogòwi +Comment[cy]=Neidiwch i mewn i Moria a threchwch y Balrog +Comment[da]=Dyk ned i Moria og overvind Balrog +Comment[de]=Tauchen Sie ein in Moria und besiegen Sie den Balrog +Comment[el]=Καταδυθείτε στο Moria και νικήστε τον Balrog +Comment[eo]=Eniru Morion kaj defiu la Balrogon +Comment[es]=Sumérjase en Moria y derrote a Balrog +Comment[et]=Moriasse minek ja Balrogi hävitamine +Comment[eu]=Murgil zaitez Morian eta garai ezazu Balrog +Comment[fa]=حمله به Moria و شکست Balrog +Comment[fi]=Sukella Moriaan ja voita Balrog +Comment[fr]=Osez pénétrer dans la Moria pour vaincre le Balrog +Comment[fy]=Dûk yn Moria en ferslach de Balrog +Comment[ga]=Léim amach i Moria agus buail Balrog +Comment[gl]=Entre en Moria e derrote ao Balrog +Comment[he]= שחק ב־Moria ונצח את הבאלרוג +Comment[hi]=मोरिया में गोता लगाएँ और मॉरगोथ को हराएँ +Comment[hr]=Skočite u Moriju i pobijedite Balroga +Comment[hsb]=Dźiće do Morije a dobudźće přećiwo Balrogej +Comment[hu]=Be kell hatolni Moriába és le kell győzni Balrogot +Comment[is]=Stökktu í Moria og sigraðu Balrog +Comment[it]=Tuffati dentro Moria e sconfiggi il Balrog +Comment[ja]=Moria に行き Balrog を倒す +Comment[ka]=გაემართეთ მორიაში და დაამარცხეთ ბარლოგი +Comment[kk]=Морияға барып Барлогты жеңіп келіңіз +Comment[ko]=Moria를 시작하시고 Balrog를 꺾으십시오 +Comment[lo]=Dive into Moria and Defeat the Balrog +Comment[lt]=Pasinerk į Moria ir nugalėk Balrog +Comment[lv]=Ienirt Morijā un sakaut Balrogu +Comment[mk]=Нурни во Морија и победи го Балрог +Comment[mn]=Мориа доогуур шургаж Балрогийг ял +Comment[ms]=Sertai Moria dan kalahkan Balrog +Comment[mt]=Idħol ġo Moria u egħleb lill-Balrog +Comment[nb]=Reis inn i Moria og kjemp mot Balrogen +Comment[nds]=Gah na Moria rin un dwing den Balrog daal +Comment[ne]=मोरियामा डुबुल्की मार्नुहोस् र बालरगलाई हराउनुहोस् । +Comment[nl]=Duik in Moria en versla de Balrog +Comment[nn]=Reis inn i Moria og kjemp mot Balrogen +Comment[nso]=Thinyetsa kago Moria gomme o fenye Balrog +Comment[pa]=ਮੋਰੀਆ ਵਿੱਚੋਂ ਕੁੱਦੋ ਅਤੇ ਬਾਲਰੋਗ ਹਰਾਓ +Comment[pl]=Wkrocz do Morii i pokonaj Balroga +Comment[pt]=Mergulhe em Moria e enfrente o Balrog +Comment[pt_BR]=Salte dentro de Moria e derrote Balrog +Comment[ro]=Intră în Moria și învinge-l pe Balrog +Comment[ru]=Отправьтесь в Морию и победите Барлога +Comment[rw]=Gusimbukira muri Moria no gutsinda Balrog +Comment[se]=Mátkkuš Moriaii ja heaibbu Balrogain +Comment[sk]=Vpadnite do Morie a porazte Balroga +Comment[sl]=Poglobite se v Morio in premagajte Balroga +Comment[sr]=Зароните у Морију и поразите Балрога +Comment[sr@Latn]=Zaronite u Moriju i porazite Balroga +Comment[ss]=Zubela ku Moria bese uncoba i-Balrog +Comment[sv]=Nedstig i Moria och besegra Balrogen +Comment[ta]=மோரியாவில் குதித்து பால்ராக்கை தோற்கடிக்கவும். +Comment[te]=మోరియా లో ములిగి తేలండిలడరి మరయూ బాల్ రోగ్ ను ఓడించండి +Comment[tg]=Ба Мория ҷониб шавед ва Барлогро ғолиб шавед +Comment[th]=ดำดิ่งสู่ Moria แล้วเอาชนะ Balrog +Comment[tr]=Moria'ya dalıp Balrog'u mağlub edin +Comment[tt]=Moria taba barıp Balrog'nı ciñ +Comment[uk]=Пірніть у Морію та переможіть Барлога +Comment[uz]=Moriaga borib Balrogni yengib chiqing +Comment[uz@cyrillic]=Мориага бориб Балрогни енгиб чиқинг +Comment[ven]=Fhufhelani kha Moria ni fhenye Balrog +Comment[vi]=Lặn xuống Moria và đánh bại Balrog +Comment[wa]=Plonkez dins Moria et batoz Balrog +Comment[zh_CN]=潜入 Moria 并击败 Balrog +Comment[zh_TW]=進入 Moria 並打敗 Balrog +Comment[zu]=Gxumela kwi-Moria ebese uhlula i-Balrog +Exec=moria +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Roguelikes/nethack.desktop b/kappfinder/apps/Games/Roguelikes/nethack.desktop new file mode 100644 index 000000000..05ddf0d36 --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/nethack.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=NetHack +Name[af]=Nethack +Name[bn]=নেটহ্যাক +Name[eo]=Rethako +Name[hi]=नेटहैक +Name[lv]=TīklaHacks +Name[ne]=नेट ह्याक +Name[pa]=ਨੈੱਟਹੈਕ +Name[sv]=Nethack +Name[ta]=நெட்ஹாக் +Name[te]=నెట్ హేక్ +Name[th]=เกม NetHack +Name[ven]=Vhukwamani ho Netaho +GenericName=Quest Game +GenericName[af]=Avontuur Speletjie +GenericName[az]=Quest Oyunu +GenericName[be]=Квэст +GenericName[bg]=Завоевателна игра +GenericName[bn]=অন্বেষণের খেলা +GenericName[br]=C'hoari a glask +GenericName[bs]=Igra potrage +GenericName[ca]=Joc de recerca +GenericName[cs]=Questy +GenericName[csb]=Sznëpòrzniczô gra +GenericName[cy]=Gêm Ymchwil +GenericName[da]=Quest-spil +GenericName[de]=Quest-Spiel +GenericName[el]=Παιχνίδι αναζήτησης +GenericName[eo]=Serĉludo +GenericName[es]=Juego de búsqueda +GenericName[et]=Quest mäng +GenericName[eu]=Bilaketa jokoa +GenericName[fa]=بازی Quest +GenericName[fi]=Seikkailupeli +GenericName[fr]=Jeu de quête +GenericName[fy]=Taktysk spul +GenericName[ga]=Cluiche Imchuardaigh +GenericName[gl]=Xogo de Busca +GenericName[he]=משחק Quest +GenericName[hi]=क्वैस्ट खेल +GenericName[hr]=Igra potrage +GenericName[hsb]=Nawdawkowe hry +GenericName[hu]=Kalandjáték +GenericName[id]=Permainan Petualangan +GenericName[is]=Hlutverkaleikur +GenericName[it]=Gioco di avventura +GenericName[ja]=クエストゲーム +GenericName[ka]=სათავგადასავლო თამაშები +GenericName[kk]=Quest ойыны +GenericName[km]=ល្បែង​ល្បង​ប្រាជ្ញា +GenericName[ko]=퀘스트 게임 +GenericName[lt]=Svečio žaidimas +GenericName[lv]=Kvests +GenericName[mk]=Истражувачка игра +GenericName[mn]=Эрэл хийх +GenericName[ms]=Permainan Pemburuan +GenericName[nb]=Eventyrspill +GenericName[nds]=Eventüür-Speel +GenericName[ne]=अनुसन्धान खेल +GenericName[nl]=Tactisch spel +GenericName[nn]=Eventyrspel +GenericName[nso]=Papadi ya Quest +GenericName[pa]=ਕਿਉਟ ਖੇਡ +GenericName[pl]=Gra poszukiwawcza +GenericName[pt]=Jogo de Aventuras +GenericName[pt_BR]=Busca +GenericName[ro]=Joc de aventuri +GenericName[ru]=Приключение (квест) +GenericName[rw]=Umukino Quest +GenericName[se]=Máinnasspeallu +GenericName[sk]=Questy +GenericName[sl]=Igra Quest +GenericName[sr]=Истраживачка игра +GenericName[sr@Latn]=Istraživačka igra +GenericName[ss]=Ligama lesivakashi +GenericName[sv]=Äventyrsspel +GenericName[ta]=கேள்வி விளையாட்டு +GenericName[te]=వెతికే ఆట +GenericName[tg]=Бозии Quest +GenericName[th]=เกมผจญภัย +GenericName[tr]=Araştırma Oyunu +GenericName[tt]=Tabu Uyını +GenericName[uk]=Квест +GenericName[uz]=Qidiruv oʻyini +GenericName[uz@cyrillic]=Қидирув ўйини +GenericName[ven]=Mutambo wa Mueni +GenericName[vi]=Trò chơi chinh phục +GenericName[wa]=Djeu d' cweraedje +GenericName[zh_CN]=寻宝游戏 +GenericName[zh_TW]=冒險遊戲 +GenericName[zu]=Umdlalo Wokusesha +Exec=nethack +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Roguelikes/rogue.desktop b/kappfinder/apps/Games/Roguelikes/rogue.desktop new file mode 100644 index 000000000..ae7794f3c --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/rogue.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Rogue +Name[bn]=রোগ্ (Rogue) +Name[eo]=Fripono +Name[hi]=रॉग्यू +Name[lt]=Išdykėlis +Name[lv]=Blēdis +Name[ne]=रग +Name[pa]=ਠੱਗ +Name[ro]=Violent +Name[rw]=Ingunge +Name[ta]=ரோக் +Name[te]=రోగ్ +Name[uk]=Тать +Name[uz]=Shum bola +Name[uz@cyrillic]=Шум бола +Name[zh_CN]=恶作剧 +GenericName=The Original +GenericName[af]=Die Oorspronklike +GenericName[ar]=الأصلية +GenericName[az]=Əsl +GenericName[be]=Арыгінальная +GenericName[bg]=Оригиналът +GenericName[bn]=সেই এক এবং অদ্বিতীয় +GenericName[bs]=Originalni +GenericName[ca]=L'original +GenericName[cs]=Originál +GenericName[csb]=Òriginał +GenericName[cy]=Yr un wreiddiol +GenericName[da]=Originalen +GenericName[de]=Das Original +GenericName[el]=Το αυθεντικό +GenericName[eo]=La originalo +GenericName[es]=El original +GenericName[et]=Originaal +GenericName[fa]=اصل +GenericName[fi]=Alkuperäinen +GenericName[fo]=Upprunaútgávuni +GenericName[fr]=Le vrai de vrai +GenericName[fy]=It orizjineel +GenericName[ga]=Bunleagan Rogue +GenericName[gl]=O Orixinal +GenericName[he]=המשחק המקורי +GenericName[hi]=द ओरिजिनल +GenericName[hr]=Izvornik +GenericName[hsb]=Original +GenericName[hu]=Az Eredeti! +GenericName[is]=Sá upprunalegi +GenericName[it]=L'originale +GenericName[ja]=元祖 +GenericName[ko]=원형 +GenericName[lo]=ແຟ້ມ TeX +GenericName[lt]=Originalas +GenericName[lv]=Oriģināls +GenericName[mk]=Оригиналната +GenericName[mn]=Жинхэнэ +GenericName[ms]=Asli +GenericName[mt]=L-Oriġinali +GenericName[nb]=originalen +GenericName[nds]=Dat Orginaal +GenericName[ne]=मौलिक +GenericName[nl]=Het origineel +GenericName[nn]=Originalen +GenericName[nso]=Ya Mathomothomo +GenericName[pa]=ਅਸਲੀ +GenericName[pl]=Oryginał +GenericName[pt]=O Original +GenericName[pt_BR]=O Original +GenericName[ro]=Originalul +GenericName[rw]= Cy'Umwimerere +GenericName[se]=Originála +GenericName[sk]=Originál +GenericName[sl]=Pravi original +GenericName[ss]=Kwekusukela +GenericName[sv]=Originalet +GenericName[ta]=சரியான +GenericName[te]=అసలైనది +GenericName[th]=ดั้งเดิม +GenericName[tr]=Orjinal +GenericName[uk]=Оригінал +GenericName[uz]=Original +GenericName[uz@cyrillic]=Оригинал +GenericName[ven]=Zwa vhukuma +GenericName[vi]=Nguyên thủy +GenericName[wa]=Li mwaisse +GenericName[xh]=Eyoqobo +GenericName[zh_CN]=原创 +GenericName[zh_TW]=原創 Rogue 遊戲 +GenericName[zu]=Okokuqala +Exec=rogue +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Roguelikes/tome.desktop b/kappfinder/apps/Games/Roguelikes/tome.desktop new file mode 100644 index 000000000..8beb1795f --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/tome.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=ToME +Name[eo]=ToMI +Name[es]=Ocio +Name[hi]=टू-मी +Name[ja]=Rogue 風ゲーム ToME +Name[lo]=ຂອງຫລິ້ນ +Name[lv]=Man +Name[mn]=НадРУУ +Name[ne]=टु मी +Name[pa]=ਟੂਮੀ +Name[rw]=KuriJye +Name[ta]=டூமீ +Name[te]=టొమ్ +GenericName=Quest Game +GenericName[af]=Avontuur Speletjie +GenericName[az]=Quest Oyunu +GenericName[be]=Квэст +GenericName[bg]=Завоевателна игра +GenericName[bn]=অন্বেষণের খেলা +GenericName[br]=C'hoari a glask +GenericName[bs]=Igra potrage +GenericName[ca]=Joc de recerca +GenericName[cs]=Questy +GenericName[csb]=Sznëpòrzniczô gra +GenericName[cy]=Gêm Ymchwil +GenericName[da]=Quest-spil +GenericName[de]=Quest-Spiel +GenericName[el]=Παιχνίδι αναζήτησης +GenericName[eo]=Serĉludo +GenericName[es]=Juego de búsqueda +GenericName[et]=Quest mäng +GenericName[eu]=Bilaketa jokoa +GenericName[fa]=بازی Quest +GenericName[fi]=Seikkailupeli +GenericName[fr]=Jeu de quête +GenericName[fy]=Taktysk spul +GenericName[ga]=Cluiche Imchuardaigh +GenericName[gl]=Xogo de Busca +GenericName[he]=משחק Quest +GenericName[hi]=क्वैस्ट खेल +GenericName[hr]=Igra potrage +GenericName[hsb]=Nawdawkowe hry +GenericName[hu]=Kalandjáték +GenericName[id]=Permainan Petualangan +GenericName[is]=Hlutverkaleikur +GenericName[it]=Gioco di avventura +GenericName[ja]=クエストゲーム +GenericName[ka]=სათავგადასავლო თამაშები +GenericName[kk]=Quest ойыны +GenericName[km]=ល្បែង​ល្បង​ប្រាជ្ញា +GenericName[ko]=퀘스트 게임 +GenericName[lt]=Svečio žaidimas +GenericName[lv]=Kvests +GenericName[mk]=Истражувачка игра +GenericName[mn]=Эрэл хийх +GenericName[ms]=Permainan Pemburuan +GenericName[nb]=Eventyrspill +GenericName[nds]=Eventüür-Speel +GenericName[ne]=अनुसन्धान खेल +GenericName[nl]=Tactisch spel +GenericName[nn]=Eventyrspel +GenericName[nso]=Papadi ya Quest +GenericName[pa]=ਕਿਉਟ ਖੇਡ +GenericName[pl]=Gra poszukiwawcza +GenericName[pt]=Jogo de Aventuras +GenericName[pt_BR]=Busca +GenericName[ro]=Joc de aventuri +GenericName[ru]=Приключение (квест) +GenericName[rw]=Umukino Quest +GenericName[se]=Máinnasspeallu +GenericName[sk]=Questy +GenericName[sl]=Igra Quest +GenericName[sr]=Истраживачка игра +GenericName[sr@Latn]=Istraživačka igra +GenericName[ss]=Ligama lesivakashi +GenericName[sv]=Äventyrsspel +GenericName[ta]=கேள்வி விளையாட்டு +GenericName[te]=వెతికే ఆట +GenericName[tg]=Бозии Quest +GenericName[th]=เกมผจญภัย +GenericName[tr]=Araştırma Oyunu +GenericName[tt]=Tabu Uyını +GenericName[uk]=Квест +GenericName[uz]=Qidiruv oʻyini +GenericName[uz@cyrillic]=Қидирув ўйини +GenericName[ven]=Mutambo wa Mueni +GenericName[vi]=Trò chơi chinh phục +GenericName[wa]=Djeu d' cweraedje +GenericName[zh_CN]=寻宝游戏 +GenericName[zh_TW]=冒險遊戲 +GenericName[zu]=Umdlalo Wokusesha +Exec=tome +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/Roguelikes/zangband.desktop b/kappfinder/apps/Games/Roguelikes/zangband.desktop new file mode 100644 index 000000000..d035b04a0 --- /dev/null +++ b/kappfinder/apps/Games/Roguelikes/zangband.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=ZAngband +Name[af]=Zangband +Name[eo]=Zangbando +Name[hi]=जेड-एंगबैंण्ड +Name[lv]=ZAngbanda +Name[ne]=ज्याङब्याड +Name[pa]=Zਅੰਗੀਬੰਦ +Name[sl]=Zangband +Name[sv]=Zangband +Name[ta]=ஜாங்பான்ட் +Name[te]=జిఆంగ్బెండ్ +GenericName=Defeat the Serpent of Chaos +GenericName[af]=Oorwin die Duiwel van Chaos +GenericName[be]=Бойка з Служкай Хаоса +GenericName[bg]=Победете ехидната на хаоса +GenericName[bn]=সার্পেন্ট অফ কেওস-কে হারান +GenericName[bs]=Porazite čuvara haosa +GenericName[ca]=Guanyeu a la serp del caos +GenericName[cs]=Poražte Hada Chaosu +GenericName[csb]=Pòradzë wãża chaòsu +GenericName[cy]=Trechwch y Neidr Anrhefn +GenericName[da]=Overvind kaos-slangen +GenericName[de]=Besiegen Sie die Schlange des Chaos +GenericName[el]=Νικήστε τον Serpent of Chaos +GenericName[eo]=Defiu la serpenton de la ĥaoso +GenericName[es]=Derrote a la serpiente del caos +GenericName[et]=Serpent of Chaos purustamine +GenericName[eu]=Garai ezazu kaosaren sugea +GenericName[fa]=شکست Serpent از Chaos +GenericName[fi]=Voita Kaaoksen käärme +GenericName[fr]=Pourrez-vous vaincre le Serpent du Chaos ? +GenericName[fy]=De Serpent of Chaos ferslaan +GenericName[ga]=Cloígh an Ollphéist Anord +GenericName[gl]=Destrúa a Serpe do Caos +GenericName[he]=נצח את נחש הכאוס +GenericName[hi]=चाओस के सांप को हराएँ +GenericName[hr]=Pobijedite vladara kaosa +GenericName[hu]=Harc a Káosz kígyója ellen +GenericName[is]=Sigraðu snákinn frá Chaos +GenericName[it]=Sconfiggi il Serpente del Caos +GenericName[ja]=カオスの Serpent を倒す +GenericName[ka]=დაამარხეთ ქაოსის გველი +GenericName[kk]=Аласапыран Жыланды жеңіңіз +GenericName[ko]=혼돈의 악마를 꺾으십시오 +GenericName[lo]=ທ່ານຈະໄດ້ຮັບຂໍ້ມູນທີ່ນີ້ +GenericName[lt]=Nugalėk chaoso slibiną +GenericName[lv]=Sakaut haosa čūsku +GenericName[mk]=Победи ја змијата на хаосот +GenericName[mn]=Часо могойг дийл +GenericName[ms]=Kalahkan Serpent of Chaos +GenericName[mt]=Egħleb lis-Serpent tal-Kaos +GenericName[nb]=Kjemp mot Kaosslangen +GenericName[nds]=Dwing de Kaos-Slang daal +GenericName[ne]=चओसको सर्पलाई हराउनुहोस् +GenericName[nl]=Versla de Serpent of Chaos +GenericName[nn]=Kjemp mot Kaosslangen +GenericName[nso]=Fenya Serpent ya Chaos +GenericName[pa]=ਚਾਓਸ ਦਾ ਸੀਰਪਿਟ ਹਾਰ +GenericName[pl]=Pokonaj węża chaosu +GenericName[pt]=Derrote a Serpente do Caos +GenericName[pt_BR]=Derrote a Serpente +GenericName[ro]=Învinge șarpele haosului +GenericName[ru]=Победите Змея хаоса +GenericName[rw]=Gutsinda Inzoka ya Kawosi +GenericName[se]=Heaibbu Kaosgearpmažiin +GenericName[sk]=Porazte Serpent of Chaos +GenericName[sl]=Premagajte Kačo kaosa +GenericName[sr]=Поразите гују хаоса +GenericName[sr@Latn]=Porazite guju haosa +GenericName[ss]=Ncoba inyoka yenkhohlakalo +GenericName[sv]=Besegra kaosormen +GenericName[ta]=சப்தமிடும் பாம்பை தோற்கடி +GenericName[te]=కాలనాగు ను ఓడించండి +GenericName[tg]=Мори Хаосро ғолиб шавед +GenericName[th]=เอาชนะอสรพิษแห่งกลียุค +GenericName[tr]=Kaos İblisini mağlub edin +GenericName[tt]=Çualıçlıq Acdahasın ciñ +GenericName[uk]=Переможіть гадюку хаосу +GenericName[uz]=Xaos ilonini yengib chiqish +GenericName[uz@cyrillic]=Хаос илонини енгиб чиқиш +GenericName[ven]=Fhenyani Nowa ya Khakhathi +GenericName[vi]=Đánh bại Serpent ở Hỗn loạn +GenericName[wa]=Batoz l' Sierpint do Tchinisse +GenericName[xh]=Yoyisa Inyoka Yomonakalo +GenericName[zh_CN]=击败 Chaos 恶棍 +GenericName[zh_TW]=打敗 Serpent of Chaos +GenericName[zu]=Hlula Inyoka yenyakanyaka +Exec=zangband +Terminal=true +Type=Application diff --git a/kappfinder/apps/Games/TacticStrategy/Makefile.am b/kappfinder/apps/Games/TacticStrategy/Makefile.am new file mode 100644 index 000000000..8100fe85f --- /dev/null +++ b/kappfinder/apps/Games/TacticStrategy/Makefile.am @@ -0,0 +1,5 @@ +kappfinder_games_tacticstrategy_data_DATA = freeciv.desktop freecivserver.desktop xscorch.desktop + +kappfinder_games_tacticstrategy_datadir = $(kde_datadir)/kappfinder/apps/Games/TacticStrategy + +EXTRA_DIST = $(kappfinder_games_tacticstrategy_data_DATA) diff --git a/kappfinder/apps/Games/TacticStrategy/freeciv.desktop b/kappfinder/apps/Games/TacticStrategy/freeciv.desktop new file mode 100644 index 000000000..58204cf60 --- /dev/null +++ b/kappfinder/apps/Games/TacticStrategy/freeciv.desktop @@ -0,0 +1,105 @@ +[Desktop Entry] +Version=1.0 +Name=Freeciv +Name[be]=Свабодная Цывілізацыя +Name[bg]=Цивилизация - Freeciv +Name[bn]=ফ্রীসিভ +Name[eo]=Libera Civilizludo +Name[hi]=फ्रीसिव +Name[ne]=फ्रिसिभ +Name[nso]=civ yeo e lokollogilego +Name[pa]=ਫਰੀਕਿਵ +Name[sv]=Friciv +Name[ta]=இலவச சிஐவி +Name[te]=ఫ్రీసివ్ +Name[ven]=civ ya Mahala +Name[zh_CN]=文明 +Name[zh_TW]=Freeciv 仿「文明帝國」遊戲 +Type=Application +GenericName=Strategy Game +GenericName[af]=Strategie Speletjie +GenericName[ar]=لعبة استراتيجية +GenericName[az]=Strategiya Oyunu +GenericName[be]=Стратэгічная гульня +GenericName[bg]=Стратегическа игра +GenericName[bn]=চাতুর্যের খেলা +GenericName[br]=C'hoari a gadouriezh +GenericName[bs]=Strateška igra +GenericName[ca]=Joc d'estratègia +GenericName[cs]=Strategická hra +GenericName[csb]=Strategicznô gra +GenericName[cy]=Gêm Strategaeth +GenericName[da]=Strategispil +GenericName[de]=Strategiespiel +GenericName[el]=Παιχνίδι στρατηγικής +GenericName[eo]=Strategiludo +GenericName[es]=Juego de estrategia +GenericName[et]=Strateegiamäng +GenericName[eu]=Estrategia jokoa +GenericName[fa]=بازی راهبرد +GenericName[fi]=Strategiapeli +GenericName[fo]=Strategispæl +GenericName[fr]=Jeu de stratégie +GenericName[fy]=Strategysk spul +GenericName[ga]=Cluiche Straitéise +GenericName[gl]=Xogo de Estratexia +GenericName[he]=משחק אסטרטגיה +GenericName[hi]=कौशल का खेल +GenericName[hr]=Slobodna verzija Civilizacije - Igra strategije +GenericName[hsb]=Strategiske hry +GenericName[hu]=Stratégiai +GenericName[id]=Permainan Strategi +GenericName[is]=Herkænskuleikur +GenericName[it]=Gioco di strategia +GenericName[ja]=戦略ゲーム +GenericName[ka]=სტრატეგიული თამაში +GenericName[kk]=Стратегия ойыны +GenericName[km]=ល្បែង​យុទ្ធសាស្ត្រ +GenericName[ko]=전술 게임 +GenericName[lo]=ເກມກົນລະຍຸດ +GenericName[lt]=Strateginis žaidimas +GenericName[lv]=Stratēģiskā Game +GenericName[mk]=Стратегиска игра +GenericName[mn]=Стратегийн тоглоом +GenericName[ms]=Permainan Strategi +GenericName[mt]=Logħba ta' strateġija +GenericName[nb]=Strategispill +GenericName[nds]=Strategiespeel +GenericName[ne]=रणनीति खेल +GenericName[nl]=Strategisch spel +GenericName[nn]=Strategispel +GenericName[nso]=Papadi ya Mokgwa wa Tharollo +GenericName[pa]=ਯੋਜਨਾ ਖੇਡ +GenericName[pl]=Gra strategiczna +GenericName[pt]=Jogo de Estratégia +GenericName[pt_BR]=Estratégia +GenericName[ro]=Joc de strategie +GenericName[ru]=Стратегическая игра +GenericName[rw]=Umukino w'Ingamba +GenericName[se]=Strategiijaspeallu +GenericName[sk]=Strategická hra +GenericName[sl]=Strateška igra +GenericName[sr]=Стратешка игра +GenericName[sr@Latn]=Strateška igra +GenericName[ss]=Umdlalo wekusebentisa indlela yekwenta +GenericName[sv]=Strategispel +GenericName[ta]=தந்திர விளையாட்டு +GenericName[te]=తంత్రపు ఆట +GenericName[tg]=Бозии стратегӣ +GenericName[th]=เกมกลยุทธ์ +GenericName[tr]=Strateji Oyunu +GenericName[tt]=Strategi Uyını +GenericName[uk]=Гра на стратегію +GenericName[uz]=Strategiya oʻyini +GenericName[uz@cyrillic]=Стратегия ўйини +GenericName[ven]=Mutambo wa maitele awo +GenericName[vi]=Trò chơi chiến thuật +GenericName[wa]=Djeu di stratedjeye +GenericName[xh]=Indlela ethile Yomdlalo +GenericName[zh_CN]=策略游戏 +GenericName[zh_TW]=策略遊戲 +GenericName[zu]=Umdlalo weplani +Exec=civclient +Icon= +Path= +Terminal=false diff --git a/kappfinder/apps/Games/TacticStrategy/freecivserver.desktop b/kappfinder/apps/Games/TacticStrategy/freecivserver.desktop new file mode 100644 index 000000000..54ef79412 --- /dev/null +++ b/kappfinder/apps/Games/TacticStrategy/freecivserver.desktop @@ -0,0 +1,160 @@ +[Desktop Entry] +Version=1.0 +Name=FreeCiv Server +Name[af]=Freeciv Bediener +Name[ar]=خادم FreeCiv +Name[az]=FreeCiv Vericisi +Name[be]=Сервер для "Свабоднай Цывілізацыі" +Name[bn]=ফ্রীসিভ সার্ভার +Name[br]=Servijer FreeCiv +Name[bs]=FreeCiv server +Name[ca]=Servidor FreeCiv +Name[csb]=Serwer FreeCiv +Name[cy]=Gweinydd FreeCiv +Name[da]=FreeCiv-server +Name[de]=FreeCiv-Server +Name[el]=FreeCiv εξυπηρετητής +Name[eo]=Libera Civilizludo +Name[es]=Servidor FreeCiv +Name[et]=FreeCivi server +Name[eu]=FreeCiv zerbitzaria +Name[fa]=FreeCiv کارساز +Name[fi]=Freeciv-palvelin +Name[fy]=FreeCiv-tsjinner +Name[ga]=Freastalaí FreeCiv +Name[gl]=Servidor de FreeCiv +Name[he]=שרת FreeCiv +Name[hi]=फ्रीसिव सर्वर +Name[hr]=Freeciv poslužitelj +Name[hsb]=FreeCiv serwer +Name[hu]=FreeCiv-kiszolgáló +Name[is]=FreeCiv Þjónn +Name[it]=Server Freeciv +Name[ja]=FreeCiv サーバ +Name[ka]=FreeCiv–ის სერვერი +Name[kk]=FreeCiv сервері +Name[km]=ម៉ាស៊ីន​បម្រើ FreeCiv +Name[ko]=FreeCiv 서버 +Name[lo]=ໂປຣແກຣມຮັກສາຫນ້າຈໍ +Name[lt]=FreeCiv serveris +Name[lv]=Freeciv serveris +Name[mk]=FreeCiv сервер +Name[mn]=FreeCiv-Сервер +Name[ms]=Pelayan FreeCiv +Name[mt]=Server FreeCiv +Name[nb]=Freeciv-tjener +Name[ne]=फ्रिसिभ सर्भर +Name[nl]=FreeCiv-server +Name[nn]=Freeciv-tenar +Name[nso]=Moabi wa Civ yeo e Lokollogilego +Name[pa]=ਫਰੀਕਿਵ ਸਰਵਰ +Name[pl]=Serwer FreeCiv +Name[pt]=Servidor do Freeciv +Name[pt_BR]=Servidor Freeciv +Name[ro]=Server Freeciv +Name[ru]=Сервер FreeCiv +Name[rw]=Seriveri FreeCiv +Name[se]=Freeciv-bálvá +Name[sl]=Strežnik Freeciv +Name[sr]=FreeCiv Сервер +Name[ss]=Sigcini se FreeCiv +Name[sv]=Freeciv-server +Name[ta]=இலவச சி ஐ வி சேவகன் +Name[te]=ఫ్రీసివ్ సర్వర్ +Name[tg]=Сервери FreeCiv +Name[th]=เซิร์ฟเวอร์ FreeCiv +Name[tr]=FreeCiv Sunucusu +Name[tt]=FreeCiv Servere +Name[uk]=Сервер Freeciv +Name[uz]=FreeCiv serveri +Name[uz@cyrillic]=FreeCiv сервери +Name[ven]=Siva ya civ ya Mahala +Name[vi]=Trình phục vụ Freeciv +Name[wa]=Sierveu FreeCiv +Name[xh]=Umncedisi we FreeCiv +Name[zh_CN]=文明服务器 +Name[zh_TW]=FreeCiv 伺服器 +Name[zu]=Umlekeleli we-FreeCiv +Type=Application +Comment=A server for Free Civ +Comment[af]=´n Bediener vir Free Civ +Comment[ar]=خادم للعبة Free Civ +Comment[az]=Free Civ Vericisi +Comment[be]=Сервер для "Свабоднай Цывілізацыі" +Comment[bg]=Сървър за играта цивилизация +Comment[bn]=ফ্রীসিভ-এর জন্য সার্ভার +Comment[br]=Ur servijer evit Free Civ +Comment[bs]=Server za Free Civ +Comment[ca]=Un servidor per a Free Civ +Comment[cs]=Server pro FreeCiv +Comment[csb]=Serwer dlô FreeCiv (darmôk wersëjô Civilization) +Comment[cy]=Gweinydd i FreeCiv +Comment[da]=En server for FreeCiv +Comment[de]=Server für Free Civ +Comment[el]=Ένας εξυπηρετητής για το Free Civ +Comment[eo]=servilo por FreeCiv +Comment[es]=Un servidor para Free Civ +Comment[et]=FreeCivi mängu server +Comment[eu]=Free Civ-erako zerbitzari bat +Comment[fa]=یک کارساز برای Free Civ +Comment[fi]=Palvelin FreeCiv-pelille +Comment[fr]=Un serveur pour Free Civ +Comment[fy]=In tsjinner foar Free Civ +Comment[ga]=Freastalaí don chluiche Free Civ +Comment[gl]=Un servidor de Free Civ +Comment[he]=שרת ל־Free Civ +Comment[hi]=फ्री सिव के लिए एक सर्वर +Comment[hr]=Poslužitelj za igru FreeCiv +Comment[hu]=A FreeCiv kiszolgálókomponense +Comment[is]=Þjónn fyrir Free Civ +Comment[it]=Un server per Free Civ +Comment[ja]=Free Civ サーバ +Comment[ka]=სერვერი FreeCiv–ისთვის +Comment[kk]=Free Civ-ке арналған сервер +Comment[km]=ម៉ាស៊ីន​បម្រើ​របស់ Free Civ +Comment[ko]=Free Civ를 위한 서버 +Comment[lo]=ຂໍ້ມູນເຊີບເວີ X +Comment[lt]=Free Civ skirtas serveris +Comment[lv]=Serveris Freeciv spēlei +Comment[mk]=Сервер за FreeCiv +Comment[mn]=Free Civ-н сервер +Comment[ms]=Pelayan untuk Free Civ +Comment[mt]=Is-server ta' FreeCiv +Comment[nb]=Tjener for Freeciv +Comment[nds]=Server för Free Civ +Comment[ne]=स्वतन्त्र सिभका लागि सर्भर +Comment[nl]=Een server voor Free Civ +Comment[nn]=Ein tenar for Free Civ +Comment[nso]=Seabi sa Civ yeo e Lokollogilego +Comment[pa]=ਫਰੀ ਕਿਵ ਲਈ ਸਰਵਰ +Comment[pl]=Serwer dla FreeCiv (darmowa wersja Civilization) +Comment[pt]=Um servidor para o Free Civ +Comment[pt_BR]=Um servidor para o FreeCiv +Comment[ro]=Un server pentru FreeCiv +Comment[ru]=Сервер для FreeCiv +Comment[rw]=Seriveri ya Civ y'Ubuntu +Comment[se]=Free Civ speallobálvá +Comment[sk]=Server pre FreeCiv +Comment[sl]=Strežnik za Free Civ +Comment[sr]=Сервер за Free Civ +Comment[sr@Latn]=Server za Free Civ +Comment[ss]=Sigcini seCiv lekhululekile +Comment[sv]=Server för Freeciv +Comment[ta]=இலவச சி ஐ விக்கான ஒரு சேவகன் +Comment[te]=ఫ్రీ సివ్ కొరకు సర్వర్ +Comment[tg]=Сервер барои Free Civ +Comment[th]=เซิร์ฟเวอร์เกม Free Civ +Comment[tr]=FreeCiv için sunucu +Comment[tt]=Free Civ öçen server +Comment[uk]=Сервер для Free Civ +Comment[uz]=Free Civ uchun server +Comment[uz@cyrillic]=Free Civ учун сервер +Comment[ven]=Siva ya Civ ya mahala +Comment[vi]=Máy chủ cho FreeCiv +Comment[wa]=On sierveu po Free Civ +Comment[xh]=Umncedisi we Free Civ +Comment[zh_CN]=文明的服务器 +Comment[zh_TW]=給 Free Civ 使用的伺服器 +Comment[zu]=Umlekeleli we-Free Civ +Exec=civserver +Terminal=true diff --git a/kappfinder/apps/Games/TacticStrategy/xscorch.desktop b/kappfinder/apps/Games/TacticStrategy/xscorch.desktop new file mode 100644 index 000000000..07100d486 --- /dev/null +++ b/kappfinder/apps/Games/TacticStrategy/xscorch.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Version=1.0 +Name=XScorch +Name[eo]=XSkorĉo +Name[hi]=एक्स-स्क्रॉच +Name[lo]=ໂຊນາ +Name[ne]=एक्स स्कोर्च +Name[pa]=X ਸਕੋਰਚ +Name[rw]=X-Ugutwika +Name[sv]=Xscorch +Name[ta]=Xஸ்கார்ச் +Name[te]=ఎక్స్ స్కార్చ్ +Name[zu]=I-XScorch +Type=Application +Comment=A free Scorched Earth clone for UNIX and X +Comment[af]='n Gratis 'Scorched Earth' nabootsing vir UNIX en X +Comment[az]=Scorched Earth klonu +Comment[be]=Свабодны клон Scorched Earth для UNIX і X +Comment[bg]=Безплатен вариант на играта Scorched Earth за UNIX и X +Comment[bn]=ইউনিক্স এবং এক্স-এর জন্য Scorched Earth-এর একটি ফ্রী ক্লোন +Comment[bs]=Besplatan Scorched Earth klon za UNIX i X +Comment[ca]=Un clònic lliure del Scorched Earth per a Unix i X +Comment[cs]=Volný klon Scorched Earth pro UNIX a X +Comment[csb]=Darmôk klon grë Scorched Earth (Spalonô Zemia) dlô Uniksa ë XWindow +Comment[cy]=Clôn rhydd Tir Llosg i Unix ac X +Comment[da]=En fri Scorched Earth-klon for UNIX og X +Comment[de]=Freier Klon von Scorched Earth für UNIX und X11 +Comment[el]=Ελεύθερα διαθέσιμος κλώνος του Scorched Earth για Unix και X +Comment[eo]=Libera klono de Bruligita Tero por unikso kaj X +Comment[es]=Un clon libre para Unix y X de Scorched Earth +Comment[et]=Vaba Scorched Earth kloon X'le ja UNIX'le +Comment[eu]=X eta UNIXerako Scorched Earth-en klone librea +Comment[fa]=یک بدل Scorched Earth برای یونیکس و X +Comment[fi]=Vapaa Scorched Earth -klooni UNIX- ja X-alustalle +Comment[fr]=Un clone libre de Scorched Earth pour UNIX et X +Comment[fy]=In fergese kloan fan Scorched Earth foar UNIX en X +Comment[ga]=Clón Saor de Scorched Earth le haghaidh UNIX agus X +Comment[gl]=Un clon libre de Scorched Earth para UNIX e X +Comment[he]=תואם Scorched Earth חופשי +Comment[hi]=यूनिक्स तथा एक्स के लिए एक मुफ्त स्क्रॉच्ड पृथ्वी +Comment[hr]=Slobodan klon igre Scorched Earth za UNIX i X-e +Comment[hu]=Egy ingyenes UNIX/X-alapú Scorched Earth változat +Comment[is]=Frjáls Scorched Earth klón fyrir UNIX og X +Comment[it]=Un clone per UNIX e X di Scorched Earth +Comment[ja]=Unix および X 用のフリーの Scorched Earth クローン +Comment[ka]=თავისუფალი კლონი Scorched Earth, UNIX–სა და X–ისთვის +Comment[kk]= UNIX және X-ке арналған еркін Scorched Earth клоны +Comment[km]=Scorched Earth clone ឥត​គិត​ថ្លៃ​សម្រាប់ UNIX និង X +Comment[ko]=UNIX 및 X용 Scorched Earth 클론 +Comment[lt]=Laisvas Scorched Earth klonas, skirtas UNIX ir X +Comment[lv]=Brīvais Scorched Earth klons priekš UNIX un X +Comment[mk]=Слободен клон на Scorched Earth за UNIX и X +Comment[mn]=Scorched Earth-н клоныг чөлөөлөх(UNIX ба X11-н хувьд) +Comment[ms]=Klon percuma Scorched Earth untuk UNIX dan X +Comment[mt]=Verżjoni b'xejn ta' "Scorched Earth" għall-UNIX u X +Comment[nb]=En fri klone av Scorched Earth for UNIX og X +Comment[nds]=En "Scorched Earth"-Kloon för UNIX un X, de ümsunst is +Comment[ne]=युनिक्स र एक्सका लागि एउटा स्वतन्त्र स्क्रोच गरिएको पृथ्वी क्लोन +Comment[nl]=Een gratis kloon van Scorched Earth voor UNIX en X +Comment[nn]=Ein fri klone av Scorched Earth for UNIX og X +Comment[nso]=Clone ya Lefase yeo esa Tshungwago ya UNIX le X +Comment[pa]=UNIX ਅਤੇ X ਮੁਫਤ ਸਕੋਰਚਡ ਅਰਥ ਸਮਰੂਪ +Comment[pl]=Darmowy klon gry Scorched Earth (Spalona Ziemia) dla Uniksa i XWindow +Comment[pt]=Um clone gratuito do Scorched Earth para o UNIX e o X +Comment[pt_BR]=Um clone do Scorched Earth para Unix e X +Comment[ro]=O clonă gratuită de Pămîntul Ars pentru UNIX și X +Comment[ru]=Свободный клон Scorched Earth для UNIX и X +Comment[rw]=Kolone Isi Yahiye yubuntu ya UNIX na X +Comment[se]=Fridja UNIX ja X «Scorched Earth» klona +Comment[sk]=Voľný klon Scorched Earth pre UNIX a X +Comment[sl]=Prosti klon igre Scorched Earth za UNIX in X +Comment[sr]=Бесплатан Scorched Earth клон за UNIX и X +Comment[sr@Latn]=Besplatan Scorched Earth klon za UNIX i X +Comment[sv]=Fri kopia av Scorched Earth för Unix och X +Comment[ta]=யூனிக்ஸ் மற்றும் எக்ஸ்க்கான ஒரு இலவச உலர்ந்த பூமி பிரதி +Comment[te]=యూనిక్స్ మరియూ ఎక్స్ కొరకు స్కార్చిడ్ భూమి యొక్క క్లోన్ +Comment[tg]=Клони озоди Scorched Earth барои UNIX ва X +Comment[th]=เกมแบบ Scorched Earth แจกฟรีสำหรับยูนิกซ์และ X +Comment[tr]=UNIX ve X için serbest bir Scorched Earth sürümü +Comment[tt]=UNIX belän X öçen Scorched Earth uyınnıñ buşlay qabatlanma +Comment[uk]=Вільний клон Scorched Earth для UNIX та X +Comment[uz]=Scorched Earth oʻyinining UNIX va X uchun erkin nusxasi +Comment[uz@cyrillic]=Scorched Earth ўйинининг UNIX ва X учун эркин нусхаси +Comment[vi]=Trò Scorched Earth nhái miễn phí cho UNIX và X +Comment[wa]=On libe djermea di Scorched Earth po-z UNIX et X +Comment[xh]=Eyasimahla i Scorched Earth clone ye UNIX ne X +Comment[zh_CN]=用于 Unix 和 X 的免费焦土克隆 +Comment[zh_TW]=UNIX 與 X 上的免費 Scorched Earth 仿製遊戲 +Comment[zu]=Iwele le-Scorched Earth le-Unix ne-X +Exec=xscorch +Icon= +Path= +Terminal=false diff --git a/kappfinder/apps/Games/Toys/Makefile.am b/kappfinder/apps/Games/Toys/Makefile.am new file mode 100644 index 000000000..8323ec7be --- /dev/null +++ b/kappfinder/apps/Games/Toys/Makefile.am @@ -0,0 +1,5 @@ +kappfinder_toys_data_DATA = xpinguin.desktop xeyes.desktop + +kappfinder_toys_datadir = $(kde_datadir)/kappfinder/apps/Games/Toys + +EXTRA_DIST = $(kappfinder_toys_data_DATA) diff --git a/kappfinder/apps/Games/Toys/xeyes.desktop b/kappfinder/apps/Games/Toys/xeyes.desktop new file mode 100644 index 000000000..5aa03d12e --- /dev/null +++ b/kappfinder/apps/Games/Toys/xeyes.desktop @@ -0,0 +1,54 @@ +[Desktop Entry] +Name=X Eyes +Name[af]=X Oë +Name[ar]=عيون X +Name[az]=X Gözlər +Name[be]=Вочкі X +Name[bn]=এক্স চোখ +Name[br]=Daoulagad X +Name[cs]=Oči +Name[cy]=X Llygaid +Name[da]=X-øjne +Name[de]=X-Eyes +Name[eo]=XOkuloj +Name[es]=Ojos de X +Name[fa]=چشمهای X +Name[fi]=X-silmät +Name[fo]=X Eygu +Name[fr]=XEyes +Name[hi]=एक्स-आईज़ +Name[hr]=X Oči +Name[is]=X augu +Name[lo]=ດວງຕາຂອງ X +Name[lv]=X Acis +Name[mk]=X Очи +Name[mn]=X-Eyes +Name[nb]=X-øyne +Name[nds]=X-Eyes +Name[ne]=एक्स आँखा +Name[nn]=X-auge +Name[nso]=Mahlo a X +Name[pa]=X ਅੱਖਾਂ +Name[pt]=Olhos X +Name[rw]=X Amaso +Name[se]=X-čalmmit +Name[sk]=Oči +Name[ss]=Emehlo X +Name[sv]=X eyes +Name[ta]=Xகண்கள் +Name[te]=ఎక్స్ కళ్ళు +Name[tg]=Чашмони X +Name[th]=ดวงตาของ X +Name[tr]=X Gözler +Name[tt]=X Küzlär +Name[uk]=Очі X +Name[ven]=Mato a X +Name[vi]=Mắt X +Name[zh_CN]=X 眼睛 +MimeType= +Exec=xeyes +Icon=xeyes +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Games/Toys/xpinguin.desktop b/kappfinder/apps/Games/Toys/xpinguin.desktop new file mode 100644 index 000000000..057b3a37d --- /dev/null +++ b/kappfinder/apps/Games/Toys/xpinguin.desktop @@ -0,0 +1,90 @@ +[Desktop Entry] +Name=Tux +Name[az]=Tux penguen +Name[bn]=টাক্স +Name[eo]=Tuĉjo +Name[he]=טקס +Name[hi]=टक्स +Name[lo]=ສຸວັນທອງ +Name[ne]=टक्स +Name[pa]=ਟੱਕਸ +Name[ta]=டக்ஸ் +Name[te]=టక్స్ +Name[tr]=Tux penguen +MimeType= +GenericName=Linux Mascot +GenericName[af]=Linux Gelukbringer +GenericName[az]=Linuks Maskotu +GenericName[be]=Талісман Linux +GenericName[bg]=Талисманът на Linux +GenericName[bn]=লিনাক্স ম্যাস্কট +GenericName[bs]=Linux maskota +GenericName[ca]=Mascota de Linux +GenericName[cs]=Maskot Linuxu +GenericName[csb]=Glingòtka Linuksa +GenericName[cy]=Masgot Linux +GenericName[da]=Linux-maskot +GenericName[de]=Linux-Maskottchen +GenericName[el]=Η μασκότ του Linux +GenericName[eo]=La linuksa simbolbesto +GenericName[es]=Mascota de Linux +GenericName[et]=Linuxi maskott +GenericName[eu]=Linuxen maskota +GenericName[fi]=Linux-maskotti +GenericName[fr]=La mascotte de Linux +GenericName[fy]=Linux-maskotte +GenericName[ga]=Sonóg Linux +GenericName[gl]=Mascota Linux +GenericName[he]=הקמע של לינוקס +GenericName[hi]=लिनक्स शुभंकर +GenericName[hr]=Linux maskota +GenericName[hu]=Linux-kabalaállatka +GenericName[is]=Linux lukkudýrið +GenericName[it]=Mascotte di Linux +GenericName[ja]=Linux マスコット +GenericName[kk]=Linux нышаны +GenericName[ko]=리눅스 마스코트 +GenericName[lo]=ສັນຍາລັດຂອງລະບົບລີນຸກ +GenericName[lt]=Linux talismanas +GenericName[lv]=Linux Talismans +GenericName[mk]=Маскотата на Линукс +GenericName[mn]=Линукс-азын тэнгэр +GenericName[ms]=Maskot Linux +GenericName[mt]=Maskott tal-Linux +GenericName[nb]=Linux-maskot +GenericName[nds]=Dat Maskottje vun Linux +GenericName[ne]=लिनक्स मासकोट +GenericName[nl]=Linux-mascotte +GenericName[nn]=Linux-maskot +GenericName[nso]=Mascot wa Linux +GenericName[pa]=ਲੀਨਕਸ ਮਾਸਕੋਟ +GenericName[pl]=Maskotka Linuksa +GenericName[pt]=Mascote do Linux +GenericName[pt_BR]=Mascote do Linux +GenericName[ro]=Mascota Linux +GenericName[ru]=Эмблема Linux +GenericName[sk]=Maskot Linuxu +GenericName[sl]=Maskota Linuxa +GenericName[sr]=Linux-ова маскота +GenericName[sr@Latn]=Linux-ova maskota +GenericName[sv]=Linux-maskot +GenericName[ta]=Linux சின்னம் +GenericName[te]=లినక్స్ మాస్కాట్ +GenericName[tg]=Таъвизи Linux +GenericName[th]=ตัวนำโชคของระบบลินุกซ์ +GenericName[tr]=Linux Maskotu +GenericName[tt]=Linux Bötie +GenericName[uk]=Талісман Linux +GenericName[uz]=Linux tumori +GenericName[uz@cyrillic]=Linux тумори +GenericName[vi]=Biểu trưng Linux +GenericName[wa]=Mascote di Linux +GenericName[xh]=Uphawu lwe Linux +GenericName[zh_CN]=Linux 吉祥物 +GenericName[zh_TW]=Linux 吉祥物 +Exec=xpinguin +Icon=pinguin +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Games/defendguin.desktop b/kappfinder/apps/Games/defendguin.desktop new file mode 100644 index 000000000..a0c7c534d --- /dev/null +++ b/kappfinder/apps/Games/defendguin.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Version=1.0 +Name=Defendguin +Name[af]=Verdedig pikkewyn +Name[cy]=Amddiffgwyn +Name[eo]=Pingvendefendo +Name[hi]=डिफेण्डगुइन +Name[lo]=Defendguin corched Earth clone +Name[ne]=डिफेन्डगुइन +Name[pa]=ਡੀਫੀਡਗੂਨਿ +Name[sv]=Pingvinförsvar +Name[ta]=டிபென்ட்கின் +Name[te]=డిఫెండ్గ్విన్ +Name[ven]=Tsireledzaniguin +Name[vi]=Bảo vệ chim cánh cụt +Name[zh_CN]=保护企鹅 +Type=Application +GenericName=Game +GenericName[af]=Speletjie +GenericName[ar]=لعبة +GenericName[az]=Oyun +GenericName[be]=Гульня +GenericName[bg]=Игра +GenericName[bn]=খেলা +GenericName[br]=C'hoari +GenericName[bs]=Igra +GenericName[ca]=Joc +GenericName[cs]=Hra +GenericName[csb]=Gra +GenericName[cy]=Gêm +GenericName[da]=Spil +GenericName[de]=Spiel +GenericName[el]=Παιχνίδι +GenericName[eo]=Ludo +GenericName[es]=Juego +GenericName[et]=Mäng +GenericName[eu]=Jokoa +GenericName[fa]=بازی +GenericName[fi]=Peli +GenericName[fo]=Spæl +GenericName[fr]=Jeu +GenericName[fy]=Spul +GenericName[ga]=Cluiche +GenericName[gl]=Xogo +GenericName[he]=משחק +GenericName[hi]=खेल +GenericName[hr]=Igra +GenericName[hsb]=Hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan +GenericName[is]=Leikur +GenericName[it]=Gioco +GenericName[ja]=ゲーム +GenericName[ka]=თამაში +GenericName[kk]=Ойын +GenericName[km]=ល្បែង +GenericName[lo]= ເກມ +GenericName[lt]=Žaidimas +GenericName[lv]=Spēle +GenericName[mk]=Игра +GenericName[mn]=Тоглоом +GenericName[ms]=Permainan +GenericName[nb]=Spill +GenericName[nds]=Speel +GenericName[ne]=खेल +GenericName[nl]=Spel +GenericName[nn]=Spel +GenericName[nso]=Papadi +GenericName[pa]=ਖੇਡ +GenericName[pl]=Gra +GenericName[pt]=Jogo +GenericName[pt_BR]=Jogo +GenericName[ro]=Joc +GenericName[ru]=Игра +GenericName[rw]=Umukino +GenericName[se]=Speallu +GenericName[sk]=Hra +GenericName[sl]=Igra +GenericName[sr]=Игра +GenericName[sr@Latn]=Igra +GenericName[ss]=Umdlalo +GenericName[sv]=Spel +GenericName[ta]=விளையாட்டு +GenericName[te]=ఆట +GenericName[tg]=Бозӣ +GenericName[th]=เกม +GenericName[tr]=Oyun +GenericName[tt]=Uyın +GenericName[uk]=Гра +GenericName[uz]=Oʻyin +GenericName[uz@cyrillic]=Ўйин +GenericName[ven]=Mutambo +GenericName[vi]=Trò chơi +GenericName[wa]=Djeu +GenericName[xh]=Umdlalo +GenericName[zh_CN]=游戏 +GenericName[zh_TW]=遊戲 +GenericName[zu]=Umdlalo +Exec=defendguin +Icon= +Path= +Terminal=false diff --git a/kappfinder/apps/Games/penguin-command.desktop b/kappfinder/apps/Games/penguin-command.desktop new file mode 100644 index 000000000..dd7f4d260 --- /dev/null +++ b/kappfinder/apps/Games/penguin-command.desktop @@ -0,0 +1,124 @@ +[Desktop Entry] +Version=1.0 +Name=Penguin Command +Name[af]=Pikkewyn Opdrag +Name[be]=Каманда пінгвінаў +Name[bn]=পেঙ্গুইন কমান্ড +Name[br]=Urzhiad penn-gwenn +Name[ca]=Comand Pingüí +Name[cy]=Rheolaeth Pengwyn +Name[da]=Pingvin-kommando +Name[eo]=Pingvenkomando +Name[fa]=Penguin فرمان +Name[gl]=Comando Pingüin +Name[hi]=पेंग्विन कमांड +Name[hu]=Pingvin-invázió +Name[id]=Perintah Penguin +Name[ja]=ペンギンコマンド +Name[km]=ពាក្យ​បញ្ជា​ផេនគ្វីន +Name[lv]=Pingvīnu Komanda +Name[mn]=Пенгвин тушаал +Name[ms]=Arahan Penguin +Name[ne]=पेन्गुइन आदेश +Name[nso]=Taelo ya Penguin +Name[pa]=ਪੈਗੂਇਨ ਕਮਾਂਡ +Name[rw]=Ibwirizwa Penguin +Name[ss]=Umyalo we Penguin +Name[sv]=Pingvinkommando +Name[ta]=பென்குயின் கட்டளை +Name[te]=పెంగ్విన్ కమాండ్ +Name[uk]=Команда пінгвінів +Name[ven]=Muthetho wa Penguin +Name[vi]=Lệnh chim cánh cụt +Name[wa]=Comande Penguin +Name[zh_CN]=企鹅指挥官 +Name[zh_TW]=企鵝命令 +Name[zu]=Umyalelo Wamaphengwini +Type=Application +GenericName=Arcade Game +GenericName[af]=Arkade Speletjie +GenericName[ar]=لعبة Arcade +GenericName[az]=Əyləncəli Oyun +GenericName[be]=Аркадная гульня +GenericName[bg]=Аркадна игра +GenericName[bn]=আর্কেড খেলা +GenericName[br]=C'hoari tavarn +GenericName[bs]=Arkadna igra +GenericName[ca]=Joc d'arcade +GenericName[cs]=Arkádová hra +GenericName[csb]=Chwatkòwô gra +GenericName[cy]=Gêm Arcêd +GenericName[da]=Arkade-videospil +GenericName[de]=Arkade-Spiel +GenericName[el]=Παιχνίδι arcade +GenericName[eo]=Arkadoludo +GenericName[es]=Juego de Arcade +GenericName[et]=Põnevusmäng +GenericName[eu]=Arcade jokoa +GenericName[fa]=بازی گذرگاه تاقدار +GenericName[fi]=Videopeli +GenericName[fo]=Arkaduspæl +GenericName[fr]=Jeu d'arcade +GenericName[fy]=Arcade-Spul +GenericName[ga]=Cluiche Stuara +GenericName[gl]=Xogo de Arcade +GenericName[he]=משחק Arcade +GenericName[hi]=आर्केड खेल +GenericName[hr]=Arkadna igra +GenericName[hsb]=Třělenske hry +GenericName[hu]=Ügyességi +GenericName[id]=Permainan Arcade +GenericName[is]=Skotleikur +GenericName[it]=Gioco arcade +GenericName[ja]=アーケードゲーム +GenericName[ka]=Arcade თამაშები +GenericName[kk]=Аркад ойыны +GenericName[km]=ល្បែង​ធ្វើ​ដំណើរ +GenericName[ko]=아케이드 게임 +GenericName[lo]=ເກມອາເຄດດ໌ +GenericName[lt]=Arkadinis žaidimas +GenericName[lv]=Arkādes Spēle +GenericName[mk]=Аркадна игра +GenericName[mn]=Сансрын тоглоом +GenericName[ms]=Permainan Arked +GenericName[mt]=Logħba tal-arcades +GenericName[nb]=Arkadespill +GenericName[nds]=Ut de Speelhall +GenericName[ne]=आर्केड खेल +GenericName[nl]=Arcade-spel +GenericName[nn]=Arkadespel +GenericName[nso]=Papadi ya Arcade +GenericName[pa]=ਆਰਕਡੀ ਖੇਡ +GenericName[pl]=Gra zręcznościowa +GenericName[pt]=Jogo de Arcada +GenericName[pt_BR]=Jogo tipo Arcade +GenericName[ro]=Joc de aventuri +GenericName[ru]=Аркадная игра +GenericName[rw]=Umukino Ikirongozi +GenericName[se]=Arcade-speallu +GenericName[sk]=Dobrodružná hra +GenericName[sl]=Arkadna igra +GenericName[sr]=Аркадна игра +GenericName[sr@Latn]=Arkadna igra +GenericName[ss]=Umdlalo we Arcade +GenericName[sv]=Arkadspel +GenericName[ta]=ஆர்கேட் விளையாட்டு +GenericName[te]=ఆర్కేడ్ ఆట +GenericName[tg]=Бозиҳои гуногун +GenericName[th]=เกมอาเขต +GenericName[tr]=Macera oyunu +GenericName[tt]=Arkad Uyını +GenericName[uk]=Гра "Arcade" +GenericName[uz]=Arkada oʻyini +GenericName[uz@cyrillic]=Аркада ўйини +GenericName[ven]=Mutambo wa Akheidi +GenericName[vi]=Trò chơi mái vòm +GenericName[wa]=Djeu d' årcåde +GenericName[xh]=Umdlalo we Arcade +GenericName[zh_CN]=街机游戏 +GenericName[zh_TW]=電子遊戲 +GenericName[zu]=Umdlalo womhhume +Exec=penguin-command +Icon= +Path= +Terminal=false diff --git a/kappfinder/apps/Games/xshipwars.desktop b/kappfinder/apps/Games/xshipwars.desktop new file mode 100644 index 000000000..568e64abc --- /dev/null +++ b/kappfinder/apps/Games/xshipwars.desktop @@ -0,0 +1,110 @@ +[Desktop Entry] +Version=1.0 +Name=XShipWars +Name[af]=Xskeepsoorloë +Name[be]=Вайна караблёў X +Name[cs]=Válka lodí +Name[cy]=RhyfelauLlongX +Name[eo]=XŜipbatalo +Name[hi]=एक्सशिपवार्स +Name[hu]=XShipWare +Name[km]=សង្គ្រាម​កប៉ាល់ +Name[lo]=XShip Wars +Name[ne]=एक्स सिपवार +Name[nso]=XDintwa tsa Dikepe +Name[pa]=Xਜਹਾਜ਼ ਦੀ ਲੜਾਈ +Name[rw]=X-IcyomboIntambara +Name[ss]=Timphi te XShip +Name[sv]=Xshipwars +Name[te]=ఎక్స్ షిప్ వార్స్ +Name[th]=สงครามแห่งดวงดาว +Name[ven]=Tshikepe tsha dzinnda tsha X +Name[zu]=I-XShipWars +Type=Application +GenericName=Strategy Game +GenericName[af]=Strategie Speletjie +GenericName[ar]=لعبة استراتيجية +GenericName[az]=Strategiya Oyunu +GenericName[be]=Стратэгічная гульня +GenericName[bg]=Стратегическа игра +GenericName[bn]=চাতুর্যের খেলা +GenericName[br]=C'hoari a gadouriezh +GenericName[bs]=Strateška igra +GenericName[ca]=Joc d'estratègia +GenericName[cs]=Strategická hra +GenericName[csb]=Strategicznô gra +GenericName[cy]=Gêm Strategaeth +GenericName[da]=Strategispil +GenericName[de]=Strategiespiel +GenericName[el]=Παιχνίδι στρατηγικής +GenericName[eo]=Strategiludo +GenericName[es]=Juego de estrategia +GenericName[et]=Strateegiamäng +GenericName[eu]=Estrategia jokoa +GenericName[fa]=بازی راهبرد +GenericName[fi]=Strategiapeli +GenericName[fo]=Strategispæl +GenericName[fr]=Jeu de stratégie +GenericName[fy]=Strategysk spul +GenericName[ga]=Cluiche Straitéise +GenericName[gl]=Xogo de Estratexia +GenericName[he]=משחק אסטרטגיה +GenericName[hi]=कौशल का खेल +GenericName[hr]=Slobodna verzija Civilizacije - Igra strategije +GenericName[hsb]=Strategiske hry +GenericName[hu]=Stratégiai +GenericName[id]=Permainan Strategi +GenericName[is]=Herkænskuleikur +GenericName[it]=Gioco di strategia +GenericName[ja]=戦略ゲーム +GenericName[ka]=სტრატეგიული თამაში +GenericName[kk]=Стратегия ойыны +GenericName[km]=ល្បែង​យុទ្ធសាស្ត្រ +GenericName[ko]=전술 게임 +GenericName[lo]=ເກມກົນລະຍຸດ +GenericName[lt]=Strateginis žaidimas +GenericName[lv]=Stratēģiskā Game +GenericName[mk]=Стратегиска игра +GenericName[mn]=Стратегийн тоглоом +GenericName[ms]=Permainan Strategi +GenericName[mt]=Logħba ta' strateġija +GenericName[nb]=Strategispill +GenericName[nds]=Strategiespeel +GenericName[ne]=रणनीति खेल +GenericName[nl]=Strategisch spel +GenericName[nn]=Strategispel +GenericName[nso]=Papadi ya Mokgwa wa Tharollo +GenericName[pa]=ਯੋਜਨਾ ਖੇਡ +GenericName[pl]=Gra strategiczna +GenericName[pt]=Jogo de Estratégia +GenericName[pt_BR]=Estratégia +GenericName[ro]=Joc de strategie +GenericName[ru]=Стратегическая игра +GenericName[rw]=Umukino w'Ingamba +GenericName[se]=Strategiijaspeallu +GenericName[sk]=Strategická hra +GenericName[sl]=Strateška igra +GenericName[sr]=Стратешка игра +GenericName[sr@Latn]=Strateška igra +GenericName[ss]=Umdlalo wekusebentisa indlela yekwenta +GenericName[sv]=Strategispel +GenericName[ta]=தந்திர விளையாட்டு +GenericName[te]=తంత్రపు ఆట +GenericName[tg]=Бозии стратегӣ +GenericName[th]=เกมกลยุทธ์ +GenericName[tr]=Strateji Oyunu +GenericName[tt]=Strategi Uyını +GenericName[uk]=Гра на стратегію +GenericName[uz]=Strategiya oʻyini +GenericName[uz@cyrillic]=Стратегия ўйини +GenericName[ven]=Mutambo wa maitele awo +GenericName[vi]=Trò chơi chiến thuật +GenericName[wa]=Djeu di stratedjeye +GenericName[xh]=Indlela ethile Yomdlalo +GenericName[zh_CN]=策略游戏 +GenericName[zh_TW]=策略遊戲 +GenericName[zu]=Umdlalo weplani +Exec=xshipwars +Icon= +Path= +Terminal=false diff --git a/kappfinder/apps/Graphics/ElectricEyes.desktop b/kappfinder/apps/Graphics/ElectricEyes.desktop new file mode 100644 index 000000000..c2b45ac20 --- /dev/null +++ b/kappfinder/apps/Graphics/ElectricEyes.desktop @@ -0,0 +1,126 @@ +[Desktop Entry] +Name=Electric Eyes +Name[af]=Elektriese Oë +Name[be]=Электрычныя вочы +Name[bn]=বৈদ্যুতিক চোখ +Name[br]=Daoulagad tredanel +Name[csb]=Elektriszowé òczë +Name[cy]=Llygaid Trydan +Name[eo]=Elektraj okuloj +Name[es]=Ojos eléctricos +Name[eu]=Begi elektrikoak +Name[fa]=چشم الکترونیکی +Name[hi]=नटखट नयन +Name[hr]=Električne oči +Name[km]=ភ្នែក​អេឡិចត្រូនិច +Name[lo]=Electic Eyes +Name[lt]=Elektrinės akys +Name[lv]=Elektriskās Acis +Name[mn]=Цахилгаан нүд +Name[ne]=विद्युतीय आँखा +Name[nso]=Mahlo a Mohlagase +Name[pa]=ਇਲੈਕਟੋਰਿਕ ਅੱਖਾਂ +Name[pl]=Elektryczne oczy +Name[rw]=Amaso Mashanyarazi +Name[sl]=Električne oči +Name[ss]=Emehlo yagesi +Name[ta]=எலெக்ட்ரிக் கண்கள் +Name[te]=ఎలెక్ట్రిక్ కళ్ళు +Name[tr]=Elektrik Gözler +Name[uk]=Електричні очі +Name[uz]=Elektrik koʻzlar +Name[uz@cyrillic]=Электрик кўзлар +Name[ven]=Mato a Mudagasi +Name[vi]=Mắt điện tử +Name[wa]=Electrikes ouys +Name[xh]=Amehlo Ombane +Name[zh_CN]=电眼 +Name[zh_TW]=電眼 +Name[zu]=Amehlo Kagesi +GenericName=Image Viewer +GenericName[af]=Beeld Aansig +GenericName[ar]=عارض الصور +GenericName[az]=Rəsm Nümayişçisi +GenericName[be]=Праглядальнік відарысаў +GenericName[bg]=Преглед на изображения +GenericName[bn]=চিত্র প্রদর্শক +GenericName[br]=Gweler ar skeudennoù +GenericName[bs]=Preglednik slika +GenericName[ca]=Visor d'imatges +GenericName[cs]=Prohlížeč obrázků +GenericName[csb]=Przezérnik òbrôzków +GenericName[cy]=Gwelydd Delwedd +GenericName[da]=Billedfremviser +GenericName[de]=Bildbetrachter +GenericName[el]=Προβολέας εικόνων +GenericName[eo]=Bildorigardilo +GenericName[es]=Visor de imágenes +GenericName[et]=Pildifailide vaatamine +GenericName[eu]=Irudi ikustailua +GenericName[fa]=مشاهده‌گر تصویر +GenericName[fi]=Kuvannäytin +GenericName[fo]=Myndavísari +GenericName[fr]=Afficheur d'images +GenericName[fy]=Ofbyldingswerjefteprogramma +GenericName[ga]=Amharcán Íomhánna +GenericName[gl]=Visor de Imaxes +GenericName[he]=מציג תמונות +GenericName[hi]=छवि प्रदर्शक +GenericName[hr]=Preglednik slika +GenericName[hsb]=Přehladowar worazow +GenericName[hu]=Képnézegető +GenericName[is]=Myndaskoðari +GenericName[it]=Visualizzatore di immagini +GenericName[ja]=イメージビューア +GenericName[ka]=გამოსახულებების სანახავი პროგრამა +GenericName[kk]=Кескіндерді қарау құралы +GenericName[km]=កម្មវិធី​មើល​រូបភាព +GenericName[ko]=그림 뷰어 +GenericName[lo]=ເຄື່ອງມືສະແດງພາບ +GenericName[lt]=Paveikslėlių žiūriklis +GenericName[lv]=Attēlu Skatītājs +GenericName[mk]=Прегледувач на слики +GenericName[mn]=Зураг харагч +GenericName[ms]=Pelihat Imej +GenericName[mt]=Werrej tal-istampi +GenericName[nb]=Bildefremviser +GenericName[nds]=Bildkieker +GenericName[ne]=छवि दर्शक +GenericName[nl]=Afbeeldingenweergaveprogramma +GenericName[nn]=Biletvisar +GenericName[nso]=Molebeledi wa Ponagalo +GenericName[pa]=ਚਿੱਤਰ ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka obrazków +GenericName[pt]=Visualizador de Imagens +GenericName[pt_BR]=Visualizador de Imagens +GenericName[ro]=Vizualizor de imagini +GenericName[ru]=Программа просмотра рисунков +GenericName[rw]=Mugaraza Shusho +GenericName[se]=Govvačájeheaddji +GenericName[sk]=Prehliadač obrázkov +GenericName[sl]=Pregledovalnik slik +GenericName[sr]=Приказивач слика +GenericName[sr@Latn]=Prikazivač slika +GenericName[ss]=Sibuki semfanekiso +GenericName[sv]=Bildvisare +GenericName[ta]=பிம்ப காட்சி +GenericName[te]=చిత్ర వీక్షిణి +GenericName[tg]=Намоишдиҳандаи тасвир +GenericName[th]=เครื่องมือแสดงภาพ +GenericName[tr]=Resim Göstericisi +GenericName[tt]=Sürät Kursätkeç +GenericName[uk]=Переглядач зображень +GenericName[uz]=Rasm koʻruvchi +GenericName[uz@cyrillic]=Расм кўрувчи +GenericName[ven]=Tshivhoni tsha Mutaleli +GenericName[vi]=Trình xem ảnh +GenericName[wa]=Håyneu d' imådjes +GenericName[xh]=Umboniseli Womfanekiso +GenericName[zh_CN]=图片查看程序 +GenericName[zh_TW]=影像檢視程式 +GenericName[zu]=Umbukisi wesithombe +Exec=ee +Terminal=false +Icon=ee +MimeType=image/gif;image/jpeg;image/png;image/tiff;image/x-xbm;image/x-xpm;; +Type=Application diff --git a/kappfinder/apps/Graphics/GPhoto.desktop b/kappfinder/apps/Graphics/GPhoto.desktop new file mode 100644 index 000000000..43685e80a --- /dev/null +++ b/kappfinder/apps/Graphics/GPhoto.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Name=GPhoto +Name[af]=Gfoto +Name[bn]=জি-ফোটো +Name[cy]=GFfoto +Name[eo]=G-Foto +Name[hi]=जी-फोटो +Name[mn]=ГФото +Name[ne]=जिफोटो +Name[nso]=GSenepe +Name[pa]=ਜੀ-ਫੋਟੋ +Name[rw]=G-Ifoto +Name[sl]=Gfoto +Name[sv]=Gphoto +Name[ta]=Gபுகைப்படம் +Name[te]=జిఫోటొ +Name[ven]=Tshifanyiso tsha G +GenericName=Digital Camera Program +GenericName[af]=Digitaal Kamera Program +GenericName[ar]=برنامج أجهزة التصوير الرقمية +GenericName[az]=Dijital Kamera Proqramı +GenericName[be]=Праграма для працы з лічбавай камерай +GenericName[bg]=Програма за цифрови камери +GenericName[bn]=ডিজিটাল ক্যমেরা প্রোগ্রাম +GenericName[br]=Meziant evit kameraoù numerel +GenericName[bs]=Program za digitalne kamere +GenericName[ca]=Programa per a càmeres digitals +GenericName[cs]=Program pro digitální fotoaparáty +GenericName[csb]=Programa dlô cyfrowi kamérë +GenericName[cy]=Rhaglen Camera Digidol +GenericName[da]=Digitalt kameraprogram +GenericName[de]=Programm für Digitalkameras +GenericName[el]=Πρόγραμμα για ψηφιακές κάμερες +GenericName[eo]=Ilo por ciferecaj fotoj +GenericName[es]=Gestor de cámaras digitales +GenericName[et]=Digikaamera rakendus +GenericName[eu]=Kamara digitalerako programa +GenericName[fa]=برنامۀ دوربین رقمی +GenericName[fi]=Digitaalikameraohjelma +GenericName[fr]=Logiciel pour les appareils de photographie numérique +GenericName[fy]=Kameraprogramma +GenericName[ga]=Clár le haghaidh ceamaraí digiteacha +GenericName[gl]=Programa para Cámara Dixital +GenericName[he]=תוכנית מצלמות דיגיטליות +GenericName[hi]=डिज़िटल कैमरा प्रोग्राम +GenericName[hr]=Program za digitalne kamere +GenericName[hsb]=Program za digitalny fotoaparat +GenericName[hu]=Fényképezőgép-kezelő +GenericName[is]=Digital myndavélaforrit +GenericName[it]=Programma per macchine fotografiche digitali +GenericName[ja]=デジタルカメラプログラム +GenericName[ka]=პროგრამა ციფრული კამერებისთვის +GenericName[kk]=Цифрлық камера бағдарламасы +GenericName[km]=កម្មវិធី​ម៉ាស៊ីន​ថតរូប​ឌីជីថល +GenericName[ko]=디지털 카메라 프로그램 +GenericName[lo]=ໂປຣແກຣມກ້ອງດີຈີຕອນ +GenericName[lt]=Skaitmeninės kameros programa +GenericName[lv]=Digitālās Kameras Programma +GenericName[mk]=Програма за дигитални камери +GenericName[mn]=Дижитал камерын програм +GenericName[ms]=Program Kamera Digital +GenericName[mt]=Programm għall-kameras diġitali +GenericName[nb]=Digitalkamera program +GenericName[nds]=Programm för Digitaalkameras +GenericName[ne]=डिजिटल क्यामेरा कार्यक्रम +GenericName[nl]=Cameraprogramma +GenericName[nn]=Digitalkameraprogram +GenericName[nso]=Lenaneo la Camera ya Dinomoro +GenericName[pa]=ਡਿਜ਼ੀਟਲ ਕੈਮਰਾ ਪਰੋਗਰਾਮ +GenericName[pl]=Program do obsługi kamery cyfrowej +GenericName[pt]=Programa de Câmaras Digitais +GenericName[pt_BR]=Programa de Câmera Digital +GenericName[ro]=Program pentru aparate foto digitale +GenericName[ru]=Утилита для цифровых камер +GenericName[rw]=Porogaramu Kamera Bimenyetsomibare +GenericName[se]=Digitalkámera prográmma +GenericName[sk]=Program pre digitálne fotoaparáty +GenericName[sl]=Program za digitalno kamero +GenericName[sr]=Програм за дигиталне камере +GenericName[sr@Latn]=Program za digitalne kamere +GenericName[ss]=Luhlelo lekhamera lesebentisa emadijiti +GenericName[sv]=Digitalkameraprogram +GenericName[ta]=டிஜிட்டல் காமிரா நிரலி +GenericName[te]=డిజిటల్ కెమెరా కార్యక్రమం +GenericName[tg]=Барномаи дурбини Digital +GenericName[th]=โปรแกรมกล้องดิจิตอล +GenericName[tr]=Dijital Kamera Programı +GenericName[tt]=Sanlı Kamera öçen Yazılım +GenericName[uk]=Програма для цифрового фотоапарата +GenericName[uz]=Fotoaparat uchun dastur +GenericName[uz@cyrillic]=Фотоапарат учун дастур +GenericName[ven]=Mbekanyamushumo wa Tshaudzhia Zwifanyiso zwa Maduvhaano +GenericName[vi]=Chương trình máy ảnh số +GenericName[wa]=Programe di didjitåle camera +GenericName[xh]=Inkqubo ye Khamera Yamanani +GenericName[zh_CN]=数字相机程序 +GenericName[zh_TW]=數位照相機程式 +GenericName[zu]=Uhlelo lwemisebenzi lwe-Camera yezinombolo +Exec=gphoto +Terminal=false +Icon=gphoto +Type=Application diff --git a/kappfinder/apps/Graphics/GnomeColorSelector.desktop b/kappfinder/apps/Graphics/GnomeColorSelector.desktop new file mode 100644 index 000000000..999fb42cb --- /dev/null +++ b/kappfinder/apps/Graphics/GnomeColorSelector.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Name=GNOME Color Selector +Name[af]=Gnome Kleur Kiesser +Name[ar]=أداة اختيار ألوان GNOME +Name[az]=GNOME Rəng Seçicisi +Name[be]=Выбар колераў GNOME +Name[bg]=Избор на цвят в GNOME +Name[bn]=গনোম রং নির্বাচক +Name[br]=Dibaber liv GNOME +Name[bs]=GNOME izbornik boja +Name[ca]=Selector de colors del GNOME +Name[cs]=Gnome výběr barev +Name[csb]=GNOME Wëbór farwów +Name[cy]=Dewisydd Lliwiau GNOME +Name[da]=GNOME Farvevælger +Name[de]=GNOME-Farbwähler +Name[el]=Επιλογέας χρώματος του GNOME +Name[en_GB]=GNOME Colour Selector +Name[eo]=Gnoma kolorelektilo +Name[es]=Selector de colores de GNOME +Name[et]=GNOME värvivalija +Name[eu]=GNOME kolore aukeratzailea +Name[fa]=گزینندۀ رنگ گنوم +Name[fi]=Gnomen värivalitsin +Name[fr]=Gnome Color Selector +Name[ga]=Roghnóir Dathanna GNOME +Name[gl]=Selector de Cores de Gnome +Name[hi]=ग्नोम रंग चयनक +Name[hr]=GNOME birač boja +Name[hu]=GNOME színválasztó +Name[is]=GNOME Litaval +Name[it]=Selettore colori di GNOME +Name[ja]=GNOME カラーセレクタ +Name[ka]=ფერების შერჩევა GNOME–ში +Name[kk]=GNOME түс таңдауы +Name[km]=កម្មវិធី​ជ្រើស​ពណ៌ GNOME +Name[ko]=그놈 색상 선택기 +Name[lo]=ເຄື່ອງມືເລືອກສີຂອງ GNOME +Name[lt]=GNOME spalvos parinkėjas +Name[lv]=GNOME Krāsu Selektors +Name[mk]=Избирач на бои за GNOME +Name[mn]=ГНОМЕ-Өнгө сонгогч +Name[ms]=Pemilih Warna GNOME +Name[mt]=Agħżel kulur (Gnome) +Name[nb]=GNOME Fargevelger +Name[nds]=Klöörwähler för GNOME +Name[ne]=जिनोम रङ चयनकर्ता +Name[nn]=GNOME Fargeveljar +Name[nso]=Mokgethi wa Kholoro ya GNOME +Name[pa]=ਗਨੋਮ ਰੰਗ ਚੋਣਕਾਰ +Name[pl]=Gnome Wybór kolorów +Name[pt]=Selector de Cores do GNOME +Name[pt_BR]=Seletor de Cores do GNOME +Name[ro]=Selector de culori GNOME +Name[ru]=Выбор цвета в GNOME +Name[rw]=Mutoranya Bara wa GNOME +Name[se]=GNOME ivdneválljejeaddji +Name[sk]=GNOME Výber farby +Name[sl]=Izbirnik barv za Gnome +Name[sr]=Гномов изборник боја +Name[sr@Latn]=Gnomov izbornik boja +Name[ss]=Sikhetsi sembala seGNOME +Name[sv]=Färgväljare för Gnome +Name[ta]=Gவண்ணத் தேர்ந்தெடுப்பான் +Name[te]=గ్నొం రంగులు ఎంచుకొనేది +Name[tg]=Интихобгари ранги GNOME +Name[th]=เครื่องมือเลือกสีของ GNOME +Name[tr]=GNOME Renk Seçici +Name[tt]=GNOME Tös Saylağıç +Name[uk]=Селектор кольорів GNOME +Name[uz]=GNOME rang tanlagich +Name[uz@cyrillic]=GNOME ранг танлагич +Name[ven]=GNOME Tshinangi Muvhala +Name[vi]=Trình chọn màu GNOME +Name[wa]=Tchoezixheu di coleurs di Gnome +Name[xh]=GNOME Umkhethi Wombala +Name[zh_CN]=GNOME 颜色选择器 +Name[zh_TW]=GNOME 色彩選擇程式 +Name[zu]=Umkhethi wombala we-GNOME +Exec=gcolorsel +Terminal=false +Icon=gnome-color-browser +Type=Application diff --git a/kappfinder/apps/Graphics/GnomeIconEditor.desktop b/kappfinder/apps/Graphics/GnomeIconEditor.desktop new file mode 100644 index 000000000..9f17b1e4e --- /dev/null +++ b/kappfinder/apps/Graphics/GnomeIconEditor.desktop @@ -0,0 +1,82 @@ +[Desktop Entry] +Name=GNOME Icon Editor +Name[af]=Gnome Ikoon Redigeerder +Name[ar]=محرر الأيقونات GNOME +Name[az]=GNOME Timsal Editoru +Name[be]=Рэдактар значак GNOME +Name[bg]=Редактор на икони за GNOME +Name[bn]=গনোম আইকন সম্পাদক +Name[br]=Aozer GNOME an arlunioù +Name[bs]=GNOME editor ikona +Name[ca]=Editor d'icones del GNOME +Name[cs]=Gnome editor ikon +Name[csb]=Gnome Editora ikònów +Name[cy]=Golygydd Eicon GNOME +Name[da]=GNOME Ikoneditor +Name[de]=Symbol-Editor (GNOME) +Name[el]=Επεξεργαστής εικονιδίων του GNOME +Name[eo]=Gnoma piktogramredaktilo +Name[et]=GNOME ikoonide redaktor +Name[eu]=GNOME ikono editorea +Name[fa]=ویرایشگر شمایل گنوم +Name[fi]=Gnomen kuvakemuokkain +Name[fr]=Gnome Icon Editor +Name[fy]=GNOME byldkaike bewurker +Name[ga]=Eagarthóir Deilbhíní GNOME +Name[gl]=Editor de Iconas de Gnome +Name[hi]=ग्नोम प्रतीक संपादक +Name[hr]=GNOME uređivač ikona +Name[hu]=GNOME ikonszerkesztő +Name[is]=GNOME táknmyndaritill +Name[it]=Editor di icone di GNOME +Name[ja]=GNOME アイコンエディタ +Name[ka]=ხატულების რედაქტორი GNOME–ში +Name[kk]=GNOME таңбаша редакторы +Name[km]=កម្មវិធី​និពន្ធ​រូបតំណាង GNOME +Name[ko]=그놈 아이콘 편집기 +Name[lo]=ເຄື່ອງມືແກ້ໄຂໄອຄອນຂອງGNOME +Name[lt]=GNOME ženkliukų redaktorius +Name[lv]=GNOME Ikonu Redaktors +Name[mk]=Уредувач на икони за GNOME +Name[mn]=Тэмдэг-Боловсруулагч (ГНОМЕ) +Name[ms]=Penyunting Ikon GNOME +Name[mt]=Editur ta' Ikoni Gnome +Name[nb]=GNOME Ikonredigering +Name[nds]=GNOME Lüttbild-Editor +Name[ne]=जिनोम प्रतिमा सम्पादक +Name[nn]=GNOME Ikonredigering +Name[nso]=Mofetosi wa Seemedi sa GNOME +Name[pa]=ਗਨੋਮ ਆਈਕਾਨ ਸੰਪਾਦਕ +Name[pl]=Gnome Edytor ikon +Name[pt]=Editor de Ícones do GNOME +Name[pt_BR]=Editor de Ícones do GNOME +Name[ro]=Editor de iconițe GNOME +Name[ru]=Редактор значков GNOME +Name[rw]=Muhinduzi w'Agashushondanga GNOME +Name[se]=GNOME govašdoaimmaheaddji +Name[sk]=GNOME Editor ikon +Name[sl]=Urejevalnik ikon za Gnome +Name[sr]=Гномов уређивач икона +Name[sr@Latn]=Gnomov uređivač ikona +Name[ss]=Umhleli wesimeleli se GNOME +Name[sv]=Ikoneditor för Gnome +Name[ta]=க்னோம் சின்னம் திருத்துபவர் +Name[te]=గ్నొం ప్రతిమల ఎడిటర్ +Name[tg]=Муҳаррири шамоили GNOME +Name[th]=เครื่องมือแก้ไขไอคอนของ GNOME +Name[tr]=GNOME Simge Düzenleyici +Name[tt]=GNOME İkon Tözätkeç +Name[uk]=Редактор піктограм GNOME +Name[uz]=GNOME nishonchalar tahrirchi +Name[uz@cyrillic]=GNOME нишончалар таҳрирчи +Name[ven]=GNOME Musengulusi wa Aikhono +Name[vi]=Trình biên soạn Biểu tượng GNOME +Name[wa]=Aspougneu d' imådjetes di Gnome +Name[xh]=GNOME Umkhethi we Icon +Name[zh_CN]=GNOME 图标编辑器 +Name[zh_TW]=GNOME 圖示編輯器 +Name[zu]=Umlungisi wophawu lwesithombe we-GNOME +Exec=gnome-iconedit +Terminal=false +Icon=gnome-iconedit +Type=Application diff --git a/kappfinder/apps/Graphics/Gqview.desktop b/kappfinder/apps/Graphics/Gqview.desktop new file mode 100644 index 000000000..0d3ac3e3b --- /dev/null +++ b/kappfinder/apps/Graphics/Gqview.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Gqview +Name[af]=Gq-bekyk +Name[eo]=Gnoma bildrigardilo +Name[fr]=GqView +Name[hi]=जीक्यूव्यू +Name[lo]=Gqviw +Name[ne]=जी क्यु दृश्य +Name[nso]=Gqpono +Name[pa]=ਜੀ-ਕੀਵਿਊ +Name[rw]=IgaragazaGq +Name[te]=జిక్యువ్యు +Name[ven]=Mbonalelo ya Gq +GenericName=Image Browser +GenericName[af]=Beeld Blaaier +GenericName[ar]=متصفح الصور +GenericName[az]=Rəsm Səyyahı +GenericName[be]=Адмысловы праглядальнік відарысаў +GenericName[bg]=Преглед на изображения +GenericName[bn]=চিত্র ব্রাউজার +GenericName[br]=Furcher Skeudennoù +GenericName[bs]=Preglednik slika +GenericName[ca]=Navegador d'imatges +GenericName[cs]=Prohlížeč obrázků +GenericName[csb]=Przezérnik òbrôzków +GenericName[cy]=Porydd Delweddau +GenericName[da]=Billedsøger +GenericName[de]=Bildbetrachter +GenericName[el]=Προβολέας εικόνων +GenericName[eo]=Bildrigardilo +GenericName[es]=Navegador de imágenes +GenericName[et]=Pildifailide lehitseja +GenericName[eu]=Irudi arakatzailea +GenericName[fa]=مرورگر تصویر +GenericName[fi]=Kuvaselain +GenericName[fo]=Myndakagari +GenericName[fr]=Afficheur d'images +GenericName[fy]=Ofbyldingsblêder +GenericName[ga]=Brabhsálaí Íomhánna +GenericName[gl]=Navegador de Imaxes +GenericName[he]=דפדפן תמונות +GenericName[hi]=छवि ब्राउज़र +GenericName[hr]=Preglednik slika +GenericName[hu]=Képböngésző +GenericName[is]=Myndavafri +GenericName[it]=Browser di immagini +GenericName[ja]=画像ブラウザ +GenericName[ka]=ბრაუზერი გამოსახულებების სანახავად +GenericName[kk]=Кескіндерді қарау құралы +GenericName[km]=កម្មវិធី​រុករក​រូបភាព +GenericName[ko]=그림 탐색기 +GenericName[lo]=ເຄື່ອງມືຮງກເບິ່ງພາບ +GenericName[lt]=Paveikslėlių naršyklė +GenericName[lv]=Attēlu Pārlūks +GenericName[mk]=Прелистувач на слики +GenericName[mn]=Зураг харагч +GenericName[ms]=Pelayar Imej +GenericName[mt]=Browser tal-istampi +GenericName[nb]=Bildeframviser +GenericName[nds]=Bildkieker +GenericName[ne]=छवि ब्राउजर +GenericName[nl]=Afbeeldingenbrowser +GenericName[nn]=Biletvisar +GenericName[nso]=Seinyakisi sa Ponagalo +GenericName[pa]=ਚਿੱਤਰ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka obrazków +GenericName[pt]=Navegador de Imagens +GenericName[pt_BR]=Navegador de Imagens +GenericName[ro]=Navigator și vizualizor de imagini +GenericName[ru]=Программа просмотра рисунков +GenericName[rw]=Mucukumbuzi w'Ishusho +GenericName[se]=Govvačájeheaddji +GenericName[sk]=Prehliadač obrázkov +GenericName[sl]=Brskalnik slik +GenericName[sr]=Прегледач слика +GenericName[sr@Latn]=Pregledač slika +GenericName[ss]=Ibrawuza yemfanekiso +GenericName[sv]=Bildbläddrare +GenericName[ta]=பிம்ப உலாவி +GenericName[te]=చిత్ర బ్రౌజర్ +GenericName[tg]=Тафсиргари тасвир +GenericName[th]=เครื่องมือเรียกดูภาพ +GenericName[tr]=Resim Tarayıcı +GenericName[tt]=Sürät Browserı +GenericName[uk]=Навігатор зображень +GenericName[uz]=Rasm brauzeri +GenericName[uz@cyrillic]=Расм браузери +GenericName[ven]=Tshivhoni tsha Buronza +GenericName[vi]=Trình duyệt ảnh +GenericName[wa]=Foyteu d' imådjes +GenericName[xh]=Umkhangeli zincwadi Womfanekiso +GenericName[zh_CN]=图片浏览器 +GenericName[zh_TW]=影像瀏覽器 +GenericName[zu]=Umcingi wesithombe +Exec=gqview +Terminal=false +Icon=gqview +Type=Application diff --git a/kappfinder/apps/Graphics/Makefile.am b/kappfinder/apps/Graphics/Makefile.am new file mode 100644 index 000000000..79f99dced --- /dev/null +++ b/kappfinder/apps/Graphics/Makefile.am @@ -0,0 +1,10 @@ +kappfinder_graphics_data_DATA = gimp.desktop xpaint.desktop xv.desktop \ + GnomeIconEditor.desktop Xpcd.desktop Xwpick.desktop \ + xfig.desktop Sketch.desktop Gqview.desktop GPhoto.desktop \ + GnomeColorSelector.desktop ElectricEyes.desktop bitmap.desktop \ + tgif.desktop ghostview.desktop gv.desktop xdvi.desktop \ + sodipodi.desktop blender.desktop inkscape.desktop + +kappfinder_graphics_datadir = $(kde_datadir)/kappfinder/apps/Graphics + +EXTRA_DIST = $(kappfinder_graphics_data_DATA) diff --git a/kappfinder/apps/Graphics/Sketch.desktop b/kappfinder/apps/Graphics/Sketch.desktop new file mode 100644 index 000000000..821fb6767 --- /dev/null +++ b/kappfinder/apps/Graphics/Sketch.desktop @@ -0,0 +1,105 @@ +[Desktop Entry] +Name=Sketch +Name[af]=Teken +Name[bn]=স্কেচ +Name[csb]=Céchùnk +Name[eo]=Skeĉo +Name[fa]=طرح +Name[hi]=स्केच +Name[ne]=रुपरेखा +Name[pa]=ਸ਼ਕਲ +Name[pl]=Zarys +Name[rw]=Igishushanyo +Name[sl]=Skica +Name[ss]=Dvweba +Name[ta]=துகில் +Name[te]=స్కెట్చ్ +Name[tr]=Taslak +Name[ven]=Tshiketshe +Name[vi]=Vẽ +Name[xh]=Umzobo +Name[zu]=Umdwebo +GenericName=Vector-based Drawing Program +GenericName[af]=Vector-based Teken Program +GenericName[ar]=أداة رسم تعتمد على المتجهات +GenericName[az]=Vektor əsaslı şəkil çəkmə proqramı +GenericName[be]=Рэдактар вектарнай графікі +GenericName[bg]=Програма за векторна графика +GenericName[bn]=ভেক্টর-ভিত্তিক অঙ্কন প্রোগ্রাম +GenericName[bs]=Program za vektorsko crtanje +GenericName[ca]=Programa de dibuix basat en els vectors +GenericName[cs]=Vektorový kreslící program +GenericName[csb]=Wektorowô programa do céchòwaniô +GenericName[cy]=Rhaglen darlunio fector +GenericName[da]=Vektorbaseret tegneprogram +GenericName[de]=Vektorbasiertes Zeichenprogramm +GenericName[el]=Πρόγραμμα ζωγραφικής βασισμένης σε διανύσματα +GenericName[eo]=Vektor-desegnilo +GenericName[es]=Programa de dibujo vectorial +GenericName[et]=Vektorgraafika joonistamine +GenericName[eu]=Bektoreetan oinarritutako marrazkiak egiteko programa +GenericName[fa]=برنامۀ ترسیم برداری +GenericName[fi]=Vektoripohjainen piirto-ohjelma +GenericName[fr]=Logiciel de dessin vectoriel +GenericName[fy]=Fektor-tekenprogramma +GenericName[ga]=Clár líníochta bunaithe ar veicteoirí +GenericName[gl]=Programa de Debuxo Vectorial +GenericName[he]=תוכנית ציור מבוססת וקטורים +GenericName[hi]=वेक्टर आधारित ड्राइंग प्रोग्राम +GenericName[hr]=Program za vektorsko crtanje +GenericName[hu]=Vektoros rajzolóprogram +GenericName[id]=Program Gambar Berbasis Vektor +GenericName[is]=Vigrað teikniforrit +GenericName[it]=Programma di disegno vettoriale +GenericName[ja]=ベクトルドローイングプログラム +GenericName[ka]=პროგრამა ვექტორული გრაფიკისათვის +GenericName[kk]=Сызбалық сурет салу бағдарламасы +GenericName[km]=កម្មវិធី​គូរ​ដែល​ផ្អែក​លើ​វ៉ិចទ័រ +GenericName[ko]=벡터 기반 그림 프로그램 +GenericName[lo]=ໂປຣແກຣມວາດພາບແບບເວັກເຕີ +GenericName[lt]=Vektorinio paišymo programa +GenericName[lv]=Uz Vektoriem bāzētas zīmēšanas programma +GenericName[mk]=Програма за векторски базирано цртање +GenericName[mn]=Векторв тулгууласан зургийн програм +GenericName[ms]=Program Melukis Berasaskan Vektor +GenericName[mt]=Programm biex tpinġi b'vektori +GenericName[nb]=Vektorbasert tegneprogram +GenericName[nds]=Tekenprogramm, dat op Vektoren opbuut +GenericName[ne]=भेक्टरमा आधारित रेखाचित्र कार्यक्रम +GenericName[nl]=Vector-tekenprogramma +GenericName[nn]=Vektorbasert teikneprogram +GenericName[nso]=Lenaneo lago Taka leo le Lebisitswego ka Vector +GenericName[pa]=ਵੈਕਟਰ 'ਤੇ ਅਧਾਰਿਤ ਡਰਾਇੰਗ ਕਾਰਜ +GenericName[pl]=Wektorowy program do rysowania +GenericName[pt]=Programa de Desenho Vectorial +GenericName[pt_BR]=Programa de Desenho Vetorial +GenericName[ro]=Program de desenare vectorială +GenericName[ru]=Программа векторной графики +GenericName[rw]=Porogaramu yo Gushushanya ishingiye-kuri-Mujyana +GenericName[se]=Vektorvuođđoduvvon sárgonprográmma +GenericName[sk]=Vektorový kresliaci program +GenericName[sl]=Program za vektorsko risanje +GenericName[sr]=Векторски програм за цртање +GenericName[sr@Latn]=Vektorski program za crtanje +GenericName[ss]=Luhlelo lokudvweba lolusekele ku-Vector +GenericName[sv]=Vektorbaserat ritprogram +GenericName[ta]=நெறி-அடிப்படையிலான சித்திர நிரலி +GenericName[te]=వెక్టర్ ఆధారిత చిత్ర లేఖన కార్యక్రమం +GenericName[tg]=Барномаи расмбардорӣ +GenericName[th]=โปรแกรมวาดภาพแบบเวกเตอร์ +GenericName[tr]=Vektor Tabanlı Çizim Programı +GenericName[tt]=Vektorlı Sızu Yazılımı +GenericName[uk]=Програма створення векторних зображень +GenericName[uz]=Vektor asosidagi rasm chizish dasturi +GenericName[uz@cyrillic]=Вектор асосидаги расм чизиш дастури +GenericName[ven]=Mbekanyamushumo yo olwaho sa Vekitha +GenericName[vi]=Trình vẽ đồ họa véctơ +GenericName[wa]=Programe di dessin båzé so les royes +GenericName[xh]=Inkqubo Yomzobo Osekwe-Kwimitha Yovavanyo +GenericName[zh_CN]=矢量绘图程序 +GenericName[zh_TW]=向量繪圖程式 +GenericName[zu]=Uhlelo lwemisebenzi olusekelwe kwi-Vector +Exec=sketch +Terminal=false +Icon=graphics_section +Type=Application diff --git a/kappfinder/apps/Graphics/Xpcd.desktop b/kappfinder/apps/Graphics/Xpcd.desktop new file mode 100644 index 000000000..fc4b95526 --- /dev/null +++ b/kappfinder/apps/Graphics/Xpcd.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Name=Xpcd +Name[eo]=X-Fotodisko +Name[fr]=XPCD +Name[hi]=एक्सपीसीडी +Name[te]=ఎక్స్ పిసిడి +Name[zu]=I-Xpcd +GenericName=PhotoCD Tools +GenericName[af]=PhotoCD Nutsprogramme +GenericName[az]=PhotoCD vasitələri +GenericName[be]=Інструменты для PhotoCD +GenericName[bg]=Инструменти PhotoCD +GenericName[bn]=ফোটো-সিডি টুল্‌স +GenericName[br]=Ostilhoù PhotoCD +GenericName[bs]=PhotoCD alati +GenericName[ca]=Eines PhotoCD +GenericName[cs]=Nástroje pro PhotoCD +GenericName[csb]=Nôrzãdza PhotoCD +GenericName[cy]=Offer PhotoCD +GenericName[da]=PhotoCD-værktøjer +GenericName[de]=Photo-CD-Programme +GenericName[el]=Εργαλεία PhotoCD +GenericName[eo]=Iloj por fotodiskoj +GenericName[es]=Herramientas de PhotoCD +GenericName[et]=PhotoCD tööriistad +GenericName[eu]=PhotoCD tresnak +GenericName[fa]=ابزارهای PhotoCD +GenericName[fi]=PhotoCD-työkalut +GenericName[fr]=Outils pour PhotoCD +GenericName[fy]=Foto-cd helpprogramma's +GenericName[ga]=Uirlisí PhotoCD +GenericName[gl]=Ferramentas de PhotoCD +GenericName[he]=כלי PhotoCD +GenericName[hi]=फोटो सीडी औजार +GenericName[hr]=PhotoCD alati +GenericName[hu]=PhotoCD-eszközök +GenericName[is]=PhotoCD tól +GenericName[it]=Strumenti per PhotoCD +GenericName[ja]=PhotoCD ツール +GenericName[ka]=PhotoCD–ს ხელსაწყოები +GenericName[kk]=PhotoCD құралдары +GenericName[km]=ឧបករណ៍ PhotoCD +GenericName[ko]=PhotoCD 도구 +GenericName[lt]=PhotoCD įrankiai +GenericName[lv]=PhotoCD rīki +GenericName[mk]=Алатки за PhotoCD +GenericName[ms]=Alatan PhotoCD +GenericName[mt]=Għodda PhotoCD +GenericName[nb]=Bilde-CD-verktøy +GenericName[nds]=Warktüüch för PhotoCDs +GenericName[ne]=फोटो CD उपकरण +GenericName[nl]=Foto-cd hulpprogramma's +GenericName[nn]=PhotoCD-verktøy +GenericName[pa]=ਫੋਟੋ-CD ਸੰਦ +GenericName[pl]=Narzędzia PhotoCD +GenericName[pt]=Ferramentas de PhotoCDs +GenericName[pt_BR]=Ferramentas para PhotoCD +GenericName[ro]=Utilitare pentru PhotoCD +GenericName[ru]=Утилиты PhotoCD +GenericName[rw]=Ibikoresho CD-Amafoto +GenericName[se]=PhotoCD-reaiddut +GenericName[sk]=Nástroje PhotoCD +GenericName[sl]=Orodja za PhotoCD +GenericName[sr]=Фото CD алати +GenericName[sr@Latn]=Foto CD alati +GenericName[sv]=Foto-cd-verktyg +GenericName[ta]=புகைப்பட குறுந்தகடு கருவிகள் +GenericName[te]=ఫోటొ సిడి పనిముట్లు +GenericName[tg]=Амали ФотоCD +GenericName[th]=เครื่องมือ PhotoCD +GenericName[tr]=PhotoCD Araçları +GenericName[tt]=PhotoCD Qoralı +GenericName[uk]=Засоби для Фото-КД +GenericName[uz]=PhotoCD vositalari +GenericName[uz@cyrillic]=PhotoCD воситалари +GenericName[vi]=Công cụ CD Hình ảnh +GenericName[wa]=Usteyes po fotos CD +GenericName[zh_CN]=PhotoCD 工具 +GenericName[zh_TW]=PhotoCD 工具 +Exec=xpcd +Terminal=false +Icon=xpcd +Type=Application diff --git a/kappfinder/apps/Graphics/Xwpick.desktop b/kappfinder/apps/Graphics/Xwpick.desktop new file mode 100644 index 000000000..df72f0cc7 --- /dev/null +++ b/kappfinder/apps/Graphics/Xwpick.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Xwpick +Name[af]=Xw-kies +Name[eo]=X-Ekranfotilo +Name[hi]=एक्सडब्ल्यूपिक +Name[pa]=X-ਪਿਕ +Name[te]=ఎక్స్ డబ్ల్యుపిక్ +Name[ven]=Xwdoba +Name[zu]=I-Xwpick +GenericName=Screen Capture Program +GenericName[af]=Skerm Vang Program +GenericName[ar]=برنامج تصوير الشاشة +GenericName[az]=Ekran Görüntüsünü Alma Proqramı +GenericName[be]=Праграма захопу экрана +GenericName[bg]=Програма за снимки на екрана +GenericName[bn]=স্ক্রীণ ক্যাপচার প্রোগ্রাম +GenericName[bs]=Program za "hvatanje" slike +GenericName[ca]=Programa per a la captura de pantalles +GenericName[cs]=Snímač obrazovky +GenericName[csb]=Programa do zrzucënkù ekranu +GenericName[cy]=Rhaglen Cipio Sgrîn +GenericName[da]=Program til at indfange skærmbilleder +GenericName[de]=Bildschirmphotos +GenericName[el]=Πρόγραμμα σύλληψης οθόνης +GenericName[eo]=Ekrankopia programo +GenericName[es]=Capturador de pantalla +GenericName[et]=Töölaua pildistamine +GenericName[eu]=Pantaila-harrapatzailea +GenericName[fa]=برنامۀ گیراندازی پرده +GenericName[fi]=Ruudunkaappausohjelma +GenericName[fr]=Logiciel de capture d'écran +GenericName[fy]=Skermôfdrukprogramma +GenericName[ga]=Clár gabhála scáileáin +GenericName[gl]=Programa de Captura de Pantalla +GenericName[he]=תוכנית לצילום המסך +GenericName[hi]=स्क्रीन केप्चर प्रोग्राम +GenericName[hr]=Program za snimanje zaslona +GenericName[hu]=Képlopó +GenericName[is]=Forrit sem grípur skjámyndir +GenericName[it]=Programma per fare foto allo schermo +GenericName[ja]=スクリーンキャプチャプログラム +GenericName[ka]=პროგრამა ეკრანის გადასაღებად +GenericName[kk]=Экранды түсіріп алу +GenericName[km]=កម្មវិធី​ចាប់យក​អេក្រង់ +GenericName[ko]=화면 캡처 프로그램 +GenericName[lo]=ໂປຣແກຣມຈັບພາບຫນ້າຈໍ +GenericName[lt]=Ekrano kopijos programa +GenericName[lv]=Ekrāna Sagrābšanas Programma +GenericName[mk]=Програма за сликање на екранот +GenericName[mn]=Агшин дэлгэц авдаг програм +GenericName[ms]=Program Pencekup Skrin +GenericName[mt]=Programm biex tieħu "ritratt" tal-iskrin +GenericName[nb]=Program for skjermbilde +GenericName[nds]=Programm för Schirmfotos +GenericName[ne]=पर्दा समात्ने कार्यक्रम +GenericName[nl]=Schermafdrukprogramma +GenericName[nn]=Program for skjermbilete +GenericName[nso]=Lenaneo lago Apesa Pontsho +GenericName[pa]=ਸਕਰੀਨ ਤਸਵੀਰ ਕਾਰਜ +GenericName[pl]=Program do zrzutów ekranu +GenericName[pt]=Programa de Captura do Ecrã +GenericName[pt_BR]=Programa de Captura de tela +GenericName[ro]=Program de captură de ecran +GenericName[ru]=Снимок экрана +GenericName[rw]=Porogaramu Gufata Mugaragaza +GenericName[se]=Šearbmagovvenprográmma +GenericName[sk]=Zachytenie obrazovky +GenericName[sl]=Program za zajem zaslona +GenericName[sr]=Програм за снимање екрана +GenericName[sr@Latn]=Program za snimanje ekrana +GenericName[ss]=Luhlelo lwekubamba skrini +GenericName[sv]=Ta en skärmdump +GenericName[ta]=திரை காப்பு நிரல் +GenericName[te]=తెరను బంధించే కార్యక్రమం +GenericName[tg]=Барномаи аккоси экран +GenericName[th]=โปรแกรมจับภาพหน้าจอ +GenericName[tr]=Ekran Yakalama Programı +GenericName[tt]=Küräk Töşergeç Yazılım +GenericName[uk]=Захоплювач екрана +GenericName[uz]=Ekrandan rasm olish dasturi +GenericName[uz@cyrillic]=Экрандан расм олиш дастури +GenericName[ven]=Mbekanya mushumo ino gavha tshikirini +GenericName[vi]=Trình chụp màn hình +GenericName[wa]=Programe po fé des waitroûlêyes +GenericName[xh]=Iinkcazelo Ezigcina Ikhusi +GenericName[zh_CN]=屏幕截图程序 +GenericName[zh_TW]=畫面擷取程式 +GenericName[zu]=Uhlelo lwemisebenzi olubamba iskrini +Exec=xwpick +Terminal=true +Icon=xwpick +Type=Application diff --git a/kappfinder/apps/Graphics/bitmap.desktop b/kappfinder/apps/Graphics/bitmap.desktop new file mode 100644 index 000000000..3b5b1dec1 --- /dev/null +++ b/kappfinder/apps/Graphics/bitmap.desktop @@ -0,0 +1,111 @@ +[Desktop Entry] +Name=X Bitmap +Name[af]=X Biskaart +Name[bn]=এক্স বিটম্যাপ +Name[cy]=Didfap X +Name[eo]=X-Grafiko +Name[es]=Mapa de bits de X +Name[fa]=نگاشت بیت X +Name[fr]=XBitmap +Name[ga]=Mapa Giotáin X +Name[hi]=एक्स बिटमैप +Name[hr]=X bitmap +Name[lv]=X Bitmaps +Name[mk]=X Битмапа +Name[nds]=X-Bitmap +Name[ne]=एक्स बिटम्याप +Name[pa]=X ਬਿੱਟਮੈਪ +Name[pt]=Imagem do X +Name[rw]=XBitimapu +Name[sl]=Bitna slika X +Name[sv]=X bitmap +Name[ta]=X பிட் வரைபடம் +Name[te]=ఎక్స్ బిట్ మేప్ +Name[tg]=Нақшаи бити X +Name[ven]=Mepe wa X +Name[vi]=Mảng ảnh X +Name[zh_CN]=X 位图 +Name[zu]=X Bitmap +GenericName=Bitmap Creator +GenericName[af]=Biskaart Skepper +GenericName[ar]=منشئ صور Bitmap +GenericName[az]=Rəsm Yaradıcısı +GenericName[be]=Стваральнік bitmap +GenericName[bg]=Програма за създаване на Bitmap изображения +GenericName[bn]=বিটম্যাপ তৈরি করার প্রোগ্রাম +GenericName[bs]=Pravljenje bitmapa +GenericName[ca]=Creador de mapes de bits +GenericName[cs]=Tvůrce bitmap +GenericName[csb]=Ùsôdzanié bitmapów +GenericName[cy]=Creuwr didfapiau +GenericName[da]=Bitmap-editor +GenericName[de]=Pixelbilder erstellen +GenericName[el]=Δημιουργός bitmap +GenericName[eo]=Rastrumpentrilo +GenericName[es]=Creador de mapas de bits +GenericName[et]=Rastergraafika rakendus +GenericName[eu]=Bitmap sortzailea +GenericName[fa]=ایجاد‌کنندۀ نگاشت بیت +GenericName[fi]=Bittikarttojen luoja +GenericName[fr]=Pour créer des images bitmap +GenericName[fy]=Bitmaps meitsje +GenericName[ga]=Cruthaitheoir Mapa Giotáin +GenericName[gl]=Criador de Mapas de Bits +GenericName[he]=יוצר מפות סיבות +GenericName[hi]=बिटमैप बनाने वाला +GenericName[hr]=Izrađivač bitmapa +GenericName[hu]=Képszerkesztő +GenericName[is]=Bitmap teikniforrit +GenericName[it]=Creatore di bitmap +GenericName[ja]=ビットマップ作成 +GenericName[ka]=რასტრული გამოსახულებების შექმნა +GenericName[kk]=Нүктелік кескіндерді жасау +GenericName[km]=កម្មវិធី​បង្កើត Bitmap +GenericName[ko]=비트맵 생성기 +GenericName[lo]=ເຄື່ອງມືສ້າງພາບບິດແມບ +GenericName[lt]=Taškinės grafikos (bitmap) kūrėjas +GenericName[lv]=Bitmapu Veidotājs +GenericName[mk]=Креатор на битмапи +GenericName[mn]=Цэгэн зураг үүсгэгч +GenericName[ms]=Pencipta Bitmap +GenericName[mt]=Biex toħloq stampi bitmap +GenericName[nb]=Bildelaging +GenericName[nds]=Bitmap-Maker +GenericName[ne]=बिटम्याप सर्जक +GenericName[nl]=Bitmaps maken +GenericName[nn]=Biletlaging +GenericName[nso]=Mohlagisi wa Bitmap +GenericName[pa]=ਬਿੱਟਮੈਪ ਨਿਰਮਾਤਾ +GenericName[pl]=Tworzenie bitmap +GenericName[pt]=Criador de Imagens +GenericName[pt_BR]=Criador de Bitmaps +GenericName[ro]=Creează imagini bitmap +GenericName[ru]=Создание растровых рисунков +GenericName[rw]=Umuremyi wa Bitimapu +GenericName[se]=Govvaráhkadeaddji +GenericName[sk]=Editor bitmáp +GenericName[sl]=Urejevalnik bitnih slik +GenericName[sr]=Креатор битмапа +GenericName[sr@Latn]=Kreator bitmapa +GenericName[ss]=Sisunguli se bitmap +GenericName[sv]=Skapa bitmappar +GenericName[ta]=பிட்வரைபட உருவாக்கி +GenericName[te]=బిట్ మేప్ లను సృష్టించేది +GenericName[tg]=Созандаи нақшаи бит +GenericName[th]=เครื่องมือสร้างภาพบิตแมพ +GenericName[tr]=Bitmap oluşturucu +GenericName[tt]=Bitmap Yasatqıç +GenericName[uk]=Редактор Bitmap +GenericName[uz]=BMP yaratuvchi +GenericName[uz@cyrillic]=BMP яратувчи +GenericName[ven]=Muiti wa Bitimepe +GenericName[vi]=Trình tạo mảng ảnh +GenericName[wa]=Fijheu di bitmaps +GenericName[xh]=Umenzi We Bitmap +GenericName[zh_CN]=位图制作程序 +GenericName[zh_TW]=點陣圖製作程式 +GenericName[zu]=Umdali we-Bitmap +Exec=bitmap +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Graphics/blender.desktop b/kappfinder/apps/Graphics/blender.desktop new file mode 100644 index 000000000..10f11f3c3 --- /dev/null +++ b/kappfinder/apps/Graphics/blender.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=Blender +Name[bn]=ব্লেণ্ডার +Name[fa]=مخلوط‌کن +Name[hi]=ब्लैण्डर +Name[is]=Blandarinn +Name[km]=កម្មវិធី​លាយ +Name[mk]=Блендер +Name[ne]=मिश्रक +Name[pa]=ਬਲੈਡਰ +Name[rw]=Kuvanga +Name[ta]=ப்ளன்டர் +Name[te]=బ్లెండర్ +Name[tg]=Блендер +Name[th]=เบลนเดอร์ +Name[vi]=Trộn +MimeType= +GenericName=3D Modeler/Renderer +GenericName[af]=3D Beeld Moduleerder/Renderer +GenericName[ar]=أداة نمذجة/طِلاء ثلاثية الأبعاد +GenericName[az]=3D Modelləyici/Render Vasitəsi +GenericName[be]=Рэдактар мадэляў 3D +GenericName[bg]=Редактор за триизмерни изображения +GenericName[bn]=ত্রিমাত্রিক মডেলার/প্রদর্শক +GenericName[ca]=Modelador i renderitzador 3D +GenericName[cs]=Modelář 3D scén +GenericName[csb]=Programa do trzëmiarowegò mòdelowaniô +GenericName[cy]=Modelydd/Trosydd 3D +GenericName[da]=3D Modelerer/Fremviser +GenericName[de]=3D-Modeler/Renderer +GenericName[el]=3D Μοντελοποιητής/Αποτυπωτής +GenericName[en_GB]=3D Modeller/Renderer +GenericName[eo]=Desegnilo/bildigilo por tridimensiaj scenoj +GenericName[es]=Modelador de escenas 3D +GenericName[et]=3D modelleerija/teisendaja +GenericName[eu]=3D Modelatzailea/Renderizatzailea +GenericName[fa]=مدل‌ساز/پرداختگر سه بعدی +GenericName[fi]=3D-mallintaja/renderöijä +GenericName[fr]=Logiciel d'animation et de modélisation 3D +GenericName[fy]=3D modelearprogramma +GenericName[ga]=Insamhlóir/Rindreálaí 3T +GenericName[gl]=Modelador/Renderizador 3D +GenericName[he]=ממדל ומרנדר תלת־מימד +GenericName[hi]=3डी मॉडलर/रेंडरर +GenericName[hr]=Program za modeliranje i iscrtavanje 3d scena +GenericName[hu]=3D-s modellező +GenericName[is]=Tól til vinnslu með 3D form +GenericName[it]=Modellatore e render 3D +GenericName[ja]=3D モデラー/レンダラー +GenericName[ka]=3D მოდელიორი/ამსახველი +GenericName[kk]=3D Үлгілеу/Көрсету +GenericName[ko]=3차원 모델링/렌더링 도구 +GenericName[lt]=3D modeliavimo/atvaizdavimo priemonė +GenericName[lv]=3D Scēnu Modelētājs +GenericName[mk]=3D Моделирач/Исцртувач +GenericName[mn]=3 хэмжээст дүр зураг загварчилагч +GenericName[ms]=Pemodel/Pelukis 3D +GenericName[nb]=3D-modellering/visning +GenericName[nds]=3D-Modellmaak- un -tekenprogramm +GenericName[ne]=३ आयामिक मोडेलर/रेन्डरर +GenericName[nl]=3D modeleerprogramma +GenericName[nn]=3d-modellering/-vising +GenericName[pa]=3ਡੀ ਮੋਡੀਲੀਰ/ਪੇਸ਼ਕਾਰ +GenericName[pl]=Program do modelowania trójwymiarowego +GenericName[pt]=Modelador/Rasterizador 3D +GenericName[pt_BR]=Modelador/Renderizador 3D +GenericName[ro]=Modelator de scene 3D +GenericName[ru]=3D рендерер/моделер +GenericName[rw]=Mutunganya/Mutanga Nyamubyimba +GenericName[se]=3d-modelleren/-čájeheapmi +GenericName[sk]=3D modelovanie/rendrovanie scén +GenericName[sl]=3D Modelirnik scen/upodabljalnik +GenericName[sr]=3D моделар/рендерер +GenericName[sr@Latn]=3D modelar/renderer +GenericName[sv]=3D-modellering/uppritning +GenericName[ta]=முப்பரிமாண மாதிரி +GenericName[te]=3డి మొడెలర్/రెండరర్ +GenericName[tg]=3D Модулгар/Пардозишкунанда +GenericName[th]=วาดภาพ/ออกแบบโมเดล 3 มิติ +GenericName[tr]=3B Modelleme Programı +GenericName[uk]=Модельєр 3D +GenericName[vi]=Trình tạo mô hình và hiển thị 3 chiều +GenericName[wa]=Modeleu/Rindeu 3D +GenericName[zh_CN]=3D 建模/渲染器 +GenericName[zh_TW]=3D 場景繪製程式 +Exec=blender +Icon=blender +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/ghostview.desktop b/kappfinder/apps/Graphics/ghostview.desktop new file mode 100644 index 000000000..946063397 --- /dev/null +++ b/kappfinder/apps/Graphics/ghostview.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +Name=GhostView +Name[bn]=ঘোস্টভিউ +Name[cs]=Ghostview +Name[da]=Ghostview +Name[eo]=Postskriptrigardilo +Name[hi]=घोस्टव्यू +Name[hu]=Ghostview +Name[lo]=Ghost View +Name[ne]=घोस्ट दृश्य +Name[nso]=Pono ya Sepoko +Name[pa]=ਗੋਸਟ ਝਲਕ +Name[rw]=IgaragazaBaringa +Name[sv]=Ghostview +Name[ta]=ஜிபுரவலர்காட்சி +Name[te]=ఘోస్ట్ వ్యు +Name[tg]=Намоиши Ghost +Name[th]=อ่านแฟ้มโพสต์สคริปต์ +Name[ven]=Mbonalelo ya Tshipuku +MimeType=application/pdf;application/postscript;image/x-eps +GenericName=PostScript Viewer +GenericName[af]=Postscript Aansig +GenericName[ar]=عارض PostScript +GenericName[az]=PostScript Nümayişçisi +GenericName[be]=Праглядальнік PostScript +GenericName[bg]=Преглед на Postscript документи +GenericName[bn]=পোস্টস্ক্রিপ্ট প্রদর্শক +GenericName[br]=Gweler PostScript +GenericName[bs]=PostScript preglednik +GenericName[ca]=Visor de PostScript +GenericName[cs]=Prohlížeč Postscriptových souborů +GenericName[csb]=Przezérnik lopków Postscript +GenericName[cy]=Darllenydd PostScript +GenericName[da]=PostScript-fremviser +GenericName[de]=PostScript-Betrachter +GenericName[el]=Προβολέας PostScript +GenericName[eo]=Rigardilo por Postskripto +GenericName[es]=Visor de PostScript +GenericName[et]=PostScript failide vaatamine +GenericName[eu]=PostScript ikustailua +GenericName[fa]=مشاهده‌گر پست‌اسکریپت +GenericName[fi]=PostScript-näytin +GenericName[fo]=PostScript-vísari +GenericName[fr]=Afficheur PostScript +GenericName[fy]=PostScript-werjefteprogramma +GenericName[ga]=Amharcán PostScript +GenericName[gl]=Visor PostScript +GenericName[he]=מציג PostScript +GenericName[hi]=पोस्टस्क्रिप्ट प्रदर्शक +GenericName[hr]=Preglednik PostScript dokumenata +GenericName[hu]=PostScript-nézegető +GenericName[is]=Postscript-skoðari +GenericName[it]=Visualizzatore PostScript +GenericName[ja]=Postscript ビューア +GenericName[ka]=PostScript–ის სანახავი პროგრამა +GenericName[kk]=PostScript қарау құралы +GenericName[km]=កម្មវិធី​មើល PostScript +GenericName[ko]=포스트스크립트 뷰어 +GenericName[lo]=ສະແດງແຟ້ມໂຟໂຕສະຄິບທ໌ +GenericName[lt]=Postscript žiūriklis +GenericName[lv]=PostScript Skatītājs +GenericName[mk]=Прегледувач на PostScript +GenericName[mn]=PostScript-харагч +GenericName[ms]=Pelihat PostScript +GenericName[mt]=Werrej Postscript +GenericName[nb]=Postscript-leser +GenericName[nds]=Kieker för PostScript +GenericName[ne]=पोस्ट स्क्रिप्ट दर्शक +GenericName[nl]=PostScript-weergaveprogramma +GenericName[nn]=Postscript-lesar +GenericName[nso]=Molebeledi wa PostScript +GenericName[pa]=ਪੋਸਟ-ਸਕਰਿਪਟ ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka plików Postscriptu +GenericName[pt]=Visualizador de PostScript +GenericName[pt_BR]=Visualizador de arquivos PostScript +GenericName[ro]=Vizualizor de documente PostScript +GenericName[ru]=Программа просмотра PostScript +GenericName[rw]=Ikigaragaza Iyandikanyuma +GenericName[se]=PostScript čájeheaddji +GenericName[sk]=Prehliadač PostScript súborov +GenericName[sl]=Pregledovalnik za PostScript +GenericName[sr]=Приказивач Postscript докумената +GenericName[sr@Latn]=Prikazivač Postscript dokumenata +GenericName[ss]=Sibuki sePostScript +GenericName[sv]=Postscript-visare +GenericName[ta]=அஞ்சல் எழுத்தாக்க காட்சி +GenericName[te]=పోస్ట్ స్క్రిప్ట్ వీక్షిణి +GenericName[tg]=Намоишгари PostScript +GenericName[th]=แสดงแฟ้มโพสต์สคริปต์ +GenericName[tr]=PostScript Görüntüleyici +GenericName[tt]=PostScript Kürsätkeç +GenericName[uk]=Переглядач PostScript +GenericName[uz]=PostScript koʻruvchi +GenericName[uz@cyrillic]=PostScript кўрувчи +GenericName[ven]=Muvhoni wa Mabambiri asathu bvaho +GenericName[vi]=Trình xem tập tin Postscript (đuôi .PS) +GenericName[wa]=Håyneu di documints PostScript +GenericName[xh]=Umboniseli we PostScript +GenericName[zh_CN]=PostScript 查看器 +GenericName[zh_TW]=PostScript 檢視器 +GenericName[zu]=Umbukisi we-PostScript +Exec=ghostview +Icon=gv +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/gimp.desktop b/kappfinder/apps/Graphics/gimp.desktop new file mode 100644 index 000000000..217a5bf2c --- /dev/null +++ b/kappfinder/apps/Graphics/gimp.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Name=Gimp +Name[bn]=জিম্প +Name[de]=GIMP +Name[eo]=Gimpo +Name[es]=GIMP +Name[fr]=The Gimp +Name[hi]=गिम्प +Name[hu]=GIMP +Name[ko]=김프 +Name[mk]=Гимп +Name[mn]=GIMP +Name[ne]=गिम्प +Name[pa]=ਜੈਮਪ +Name[te]=జింప్ +Name[wa]=Li GIMP +Exec=gimp %F +Icon=gimp +Type=Application +GenericName=Image Manipulation Program +GenericName[af]=Beeld Manipulasie Program +GenericName[ar]=برنامج معالجة الصور +GenericName[az]=Rəsm İşləmə Proqramı +GenericName[be]=Адмысловы рэдактар відарысаў +GenericName[bg]=Редактор за графични изображения +GenericName[bn]=চিত্র সম্পাদনা প্রোগ্রাম +GenericName[br]=Goulev embregiñ skeudennoù +GenericName[bs]=Program za obradu slika +GenericName[ca]=Programa de manipulació d'imatges +GenericName[cs]=Editace obrázků +GenericName[csb]=Programa do przerôbianiô graficzi +GenericName[cy]=Rhaglen Trin Delwedd +GenericName[da]=Billedmanipulationsprogram +GenericName[de]=Bildbearbeitung +GenericName[el]=Πρόγραμμα επεξεργασίας εικόνας +GenericName[eo]=Bildmanipulilo +GenericName[es]=Programa de retoque de imágenes +GenericName[et]=Pilditöötluse rakendus +GenericName[eu]=Irudiak lantzeko programa +GenericName[fa]=برنامۀ دستکاری تصویر +GenericName[fi]=Kuvankäsittelyohjelma +GenericName[fr]=Logiciel de manipulation d'images du GNU +GenericName[fy]=GNU ôfbylding Manipulaasje Programma +GenericName[ga]=Clár Ionramhála na nÍomhánna +GenericName[gl]=Programa de Manipulación de Imaxes +GenericName[he]=תוכנית טיפול בתמונות +GenericName[hi]=चित्रकार +GenericName[hr]=Program za obradu slika +GenericName[hu]=Képszerkesztő +GenericName[is]=Myndvinnsluforrit +GenericName[it]=Programma di manipolazione immagini +GenericName[ja]=画像作成プログラム +GenericName[ka]=გამოსახულებებთან მუშაობის პროგრამა +GenericName[kk]=Кескіндерді өңдеу бағдарламасы +GenericName[km]=កម្មវិធី​រៀបចំ​រូបភាព +GenericName[ko]=그림 편집 프로그램 +GenericName[lo]=ໂປຣແກຣມຕົບແຕ່ງພາບ +GenericName[lt]=Manipuliacijos paveikslėliais programa +GenericName[lv]=Attēlu Apstrādes Programma +GenericName[mk]=Програма за манипулација со слики +GenericName[mn]=Зураг боловсруулагч +GenericName[ms]=Program Memanipulasi Imej +GenericName[mt]=Programm biex teditja u toħloq stampi +GenericName[nb]=Bildebehandlingsprogram +GenericName[nds]=Programm för't Bewerken vun Biller +GenericName[ne]=छवि परिचालन कार्यक्रम +GenericName[nl]=GNU Image Manipulation Program +GenericName[nn]=Bilethandsamarprogram +GenericName[nso]=Lenaneo lago Somisa Ponagalo +GenericName[pa]=ਚਿੱਤਰ ਸੰਪਾਦਕ ਕਾਰਜ +GenericName[pl]=Program do grafiki rastrowej +GenericName[pt]=Programa de Manipulação de Imagens +GenericName[pt_BR]=Programa de Manipulação de imagens +GenericName[ro]=Program de procesare de imagini +GenericName[ru]=Редактор рисунков +GenericName[rw]=Porogaramu Ikoresha Ishusho +GenericName[se]=Govvagieđahallanprográmma +GenericName[sk]=Program na úpravu obrázkov +GenericName[sl]=Program za obdelavo slik +GenericName[sr]=Програм за манипулацију сликама +GenericName[sr@Latn]=Program za manipulaciju slikama +GenericName[ss]=Luhlelo lokusebenta ngemfanekiso +GenericName[sv]=Bildbehandlingsprogram +GenericName[ta]=பிம்பத்தை கையாளக்கூடிய நிரலி +GenericName[te]=చిత్రాలను మార్చే కార్యక్రమం +GenericName[tg]=Барномаи муҳаррири тасвир +GenericName[th]=โปรแกรมตกแต่งภาพ +GenericName[tr]=Görüntü İşleme Programı +GenericName[tt]=Sürät Yasawçı Yazılım +GenericName[uk]=Програма для редагування зображень +GenericName[uz]=Rasm bilan ishlash uchun dastur +GenericName[uz@cyrillic]=Расм билан ишлаш учун дастур +GenericName[ven]=Mbekanyamushumo i tutuwedzaho Tshifanyiso +GenericName[vi]=Trình thao tác ảnh +GenericName[wa]=Programe d' aspougnaedje d' imådjes +GenericName[xh]=Udweliso lwenkqubo Lomfanekiso Obekwe ngendlela +GenericName[zh_CN]=图像处理程序 +GenericName[zh_TW]=影像處理程式 +GenericName[zu]=Uhlelo lwemisebenzi Oluphatha Isithombe +MimeType=image/gif;image/jpeg;image/x-bmp;image/x-xpm;image/tiff;image/png;image/x-xcf-gimp;image/fax-g3 +X-KDE-StartupNotify=false +X-StandardInstall=true diff --git a/kappfinder/apps/Graphics/gv.desktop b/kappfinder/apps/Graphics/gv.desktop new file mode 100644 index 000000000..73d4fb634 --- /dev/null +++ b/kappfinder/apps/Graphics/gv.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=GV +Name[af]=Gv +Name[bn]=জি-ভি +Name[fr]=Gv +Name[hi]=जीवी +Name[te]=జివి +MimeType=application/pdf;application/postscript;image/x-eps;application/illustrator +GenericName=Postscript Viewer +GenericName[af]=Postscript Aansig +GenericName[ar]=عارض PostScript +GenericName[az]=Postscript Nümayişçisi +GenericName[be]=Праглядальнік Postscript +GenericName[bg]=Преглед на Postscript документи +GenericName[bn]=পোস্টস্ক্রিপ্ট প্রদর্শক +GenericName[br]=Gweler Postscript +GenericName[bs]=Preglednik PostScript dokumenata +GenericName[ca]=Visor de Postscript +GenericName[cs]=Prohlížeč Postscriptových souborů +GenericName[csb]=Przezérnik lopków Postscript +GenericName[cy]=Darllenydd PostScript +GenericName[da]=PostScript-fremviser +GenericName[de]=PostScript-Betrachter +GenericName[el]=Προβολέας Postscript +GenericName[eo]=Rigardilo por Postskripto +GenericName[es]=Visor de documentos PostScript +GenericName[et]=PostScript failide vaatamine +GenericName[eu]=Postscript ikustailua +GenericName[fa]=مشاهده‌گر پست‌اسکریپت +GenericName[fi]=Postscript-näytin +GenericName[fo]=Postscript-vísari +GenericName[fr]=Afficheur PostScript +GenericName[fy]=PostScript-werjefteprogramma +GenericName[ga]=Amharcán Postscript +GenericName[gl]=Visualizador de Postscript +GenericName[he]=מציג Postscript +GenericName[hi]=पोस्टस्क्रिप्ट प्रदर्शक +GenericName[hr]=Preglednik PostScript dokumenata +GenericName[hu]=PostScript-nézegető +GenericName[id]=Viewer Postscript +GenericName[is]=Postscript-skoðari +GenericName[it]=Visualizzatore PostScript +GenericName[ja]=Postscript ビューア +GenericName[ka]=პროგრამა Postscript–ის სანახავად +GenericName[kk]=Postscript қарау құралы +GenericName[km]=កម្មវិធី​មើល Postscript +GenericName[ko]=포스트스크립트 뷰어 +GenericName[lo]=ເຄື່ອງມືເບິ່ງແຟ້ມໂພດສະກິບທ໌ +GenericName[lt]=Postscript žiūriklis +GenericName[lv]=Postscript Skatītājs +GenericName[mk]=Прегледувач за Postscript +GenericName[mn]=PostScript-Харагч +GenericName[ms]=Pelihat Postscript +GenericName[mt]=Werrej ta' dokumenti Postscript +GenericName[nb]=Postscript-leser +GenericName[nds]=Kieker för PostScript +GenericName[ne]=पोस्ट स्क्रिप्ट दर्शक +GenericName[nl]=PostScript-weergaveprogramma +GenericName[nn]=Postscript-lesar +GenericName[nso]=Molebeledi wa Postscript +GenericName[oc]=Visualisor de Postscript +GenericName[pa]=ਪੋਸਟ ਸਕਰਿਪਟ ਦਰਸਕ +GenericName[pl]=Przeglądarka plików Postscriptu +GenericName[pt]=Visualizador de PostScripts +GenericName[pt_BR]=Visualizador de arquivos PostScript +GenericName[ro]=Vizualizor de documente PostScript +GenericName[ru]=Программа просмотра Postscript +GenericName[rw]=Ikigaragaza Iyandikambere +GenericName[se]=Postscript čájeheaddji +GenericName[sk]=Prehliadač Postskriptových súborov +GenericName[sl]=Pregledovalnik za PostScript +GenericName[sr]=Приказивач Postscript докумената +GenericName[sr@Latn]=Prikazivač Postscript dokumenata +GenericName[ss]=Sibuki se-Postscript +GenericName[sv]=Postscript-visare +GenericName[ta]=அஞ்சல் எழுத்தாக்க காட்சி +GenericName[te]=పోస్ట్ స్క్రిప్ట్ వీక్షిణి +GenericName[tg]=Намоишгари Postscript +GenericName[th]=ดูแฟ้มโพสต์สคริปต์ +GenericName[tr]=Postscript Görüntüleyici +GenericName[tt]=Postscript Kürsätkeç +GenericName[uk]=Переглядач PostScript +GenericName[uz]=PostScript koʻruvchi +GenericName[uz@cyrillic]=PostScript кўрувчи +GenericName[ven]=Muvhoni wa Mabambiri asathu bvaho +GenericName[vi]=Trình xem tập tin Postscript (đuôi .PS) +GenericName[wa]=Håyneu di documints PostScript +GenericName[xh]=Umboniseli we Postcript +GenericName[zh_CN]=Postscript 查看器 +GenericName[zh_TW]=Postscript 檢視器 +GenericName[zu]=Umbukisi we-Postscript +Exec=gv +Icon=gv +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/inkscape.desktop b/kappfinder/apps/Graphics/inkscape.desktop new file mode 100644 index 000000000..170d5af7e --- /dev/null +++ b/kappfinder/apps/Graphics/inkscape.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Inkscape +Name[bn]=ইঙ্ক-স্কেপ +Name[eo]=Inskape +Name[hi]=इंकस्केप +Name[ne]=इन्कस्केप +Name[ta]=இங்க்ஸ்கேப் +Name[te]=ఇంక్ స్కేప్ +Name[tg]=ИнкСкейп +Name[th]=อิงค์สเคป +Name[tr]=Mürekkep Seiyesi +MimeType= +GenericName=Vector Drawing +GenericName[af]=Vektor Teken +GenericName[ar]=أدة لرسم المتجهات +GenericName[az]=Vektoral Rəsim +GenericName[be]=Вектарная графіка +GenericName[bg]=Векторна графика +GenericName[bn]=ভেক্টর ড্রয়িং +GenericName[bs]=Vektorsko crtanje +GenericName[ca]=Dibuixador de vectors +GenericName[cs]=Vektorové kreslení +GenericName[csb]=Programa do céchòwaniô +GenericName[cy]=Darlunio Fector +GenericName[da]=Vektortegning +GenericName[de]=Vektorzeichnungen +GenericName[el]=Διανυσματική ζωγραφική +GenericName[eo]=Desegnaĵoj +GenericName[es]=Dibujo vectorial +GenericName[et]=Vektorgraafika rakendus +GenericName[eu]=Bektore bidezko marrazketa +GenericName[fa]=ترسیم بردار +GenericName[fi]=Vektoripiirrokset +GenericName[fr]=Dessin vectoriel +GenericName[fy]=Fektorôfbylding +GenericName[ga]=Líníocht Veicteora +GenericName[gl]=Debuxo Vectorial +GenericName[he]=ציור מבוסס וקטורים +GenericName[hi]=वेक्टर ड्राइंग +GenericName[hr]=Vektorsko crtanje +GenericName[hu]=Vektoros rajzolóprogram +GenericName[id]=Gambar Vektor +GenericName[is]=Vektor teikning +GenericName[it]=Grafica vettoriale +GenericName[ja]=ベクタードローイング +GenericName[ka]=ვექტორული გრაფიკა +GenericName[kk]=Сызбалық сурет салу +GenericName[km]=គំនូរ​វ៉ិចទ័រ +GenericName[ko]=벡터 그리기 프로그램 +GenericName[lo]=ການວາດພາບ +GenericName[lt]=Vektorinis piešimas +GenericName[lv]=Vektoru Zīmējumi +GenericName[mk]=Векторско цртање +GenericName[mn]=Вектор зураглал +GenericName[ms]=Lukisan Vektor +GenericName[mt]=Tpinġijiet vettorali +GenericName[nb]=Vektorbasert tegneprogram +GenericName[nds]=Vektorteken +GenericName[ne]=भेक्टर रेखाचित्र +GenericName[nl]=Vectorafbeelding +GenericName[nn]=Vektorteikning +GenericName[nso]=Go Taka Vector +GenericName[pa]=ਵੈਕਟਰ ਡਰਾਇੰਗ +GenericName[pl]=Program do rysowania +GenericName[pt]=Desenho Vectorial +GenericName[pt_BR]=Desenho Vetorial +GenericName[ro]=Program de desenare vectorială +GenericName[ru]=Векторная графика +GenericName[rw]=Ishushanya Mujyana +GenericName[se]=Vektorsárgon +GenericName[sk]=Vektorový kresliaci program +GenericName[sl]=Vektorsko risanje +GenericName[sr]=Векторско цртање +GenericName[sr@Latn]=Vektorsko crtanje +GenericName[ss]=Kudvweba kweVector +GenericName[sv]=Vektorritning +GenericName[ta]=வெக்டார் வரைதல் +GenericName[te]=వెక్టర్ చిత్ర లేఖనం +GenericName[tg]=Расмбардорӣ +GenericName[th]=วาดภาพเวกเตอร์ +GenericName[tr]=Vektör Çizim +GenericName[tt]=Vektorlı Sızu +GenericName[uk]=Векторне креслення +GenericName[uz]=Vektor chizmalarni yaratish vositasi +GenericName[uz@cyrillic]=Вектор чизмаларни яратиш воситаси +GenericName[ven]=Mbekanyomushumo ya u ola +GenericName[vi]=Vẽ đồ họa véctơ +GenericName[wa]=Programe di dessinaedje avou des royes +GenericName[xh]=Inkqubo Yomzobo Osekwe-Kwimitha Yovavanyo +GenericName[zh_CN]=矢量绘图 +GenericName[zh_TW]=向量繪圖 +GenericName[zu]=Umdwebo we-Vector +Exec=inkscape +Icon=inkscape +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/sodipodi.desktop b/kappfinder/apps/Graphics/sodipodi.desktop new file mode 100644 index 000000000..c990c082d --- /dev/null +++ b/kappfinder/apps/Graphics/sodipodi.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=Sodipodi +Name[bn]=সোডিপোডি +Name[hi]=सोडिपोडी +Name[lo]=ລາຍໄມ້ +Name[ne]=सोडिपोडी +Name[pa]=ਸੋਡੀ-ਪੋਡੀ +Name[ta]=சோடிபோடி +Name[te]=సొడిపొడి +Name[th]=SodiPodi +MimeType= +GenericName=Vector Drawing +GenericName[af]=Vektor Teken +GenericName[ar]=أدة لرسم المتجهات +GenericName[az]=Vektoral Rəsim +GenericName[be]=Вектарная графіка +GenericName[bg]=Векторна графика +GenericName[bn]=ভেক্টর ড্রয়িং +GenericName[bs]=Vektorsko crtanje +GenericName[ca]=Dibuixador de vectors +GenericName[cs]=Vektorové kreslení +GenericName[csb]=Programa do céchòwaniô +GenericName[cy]=Darlunio Fector +GenericName[da]=Vektortegning +GenericName[de]=Vektorzeichnungen +GenericName[el]=Διανυσματική ζωγραφική +GenericName[eo]=Desegnaĵoj +GenericName[es]=Dibujo vectorial +GenericName[et]=Vektorgraafika rakendus +GenericName[eu]=Bektore bidezko marrazketa +GenericName[fa]=ترسیم بردار +GenericName[fi]=Vektoripiirrokset +GenericName[fr]=Dessin vectoriel +GenericName[fy]=Fektorôfbylding +GenericName[ga]=Líníocht Veicteora +GenericName[gl]=Debuxo Vectorial +GenericName[he]=ציור מבוסס וקטורים +GenericName[hi]=वेक्टर ड्राइंग +GenericName[hr]=Vektorsko crtanje +GenericName[hu]=Vektoros rajzolóprogram +GenericName[id]=Gambar Vektor +GenericName[is]=Vektor teikning +GenericName[it]=Grafica vettoriale +GenericName[ja]=ベクタードローイング +GenericName[ka]=ვექტორული გრაფიკა +GenericName[kk]=Сызбалық сурет салу +GenericName[km]=គំនូរ​វ៉ិចទ័រ +GenericName[ko]=벡터 그리기 프로그램 +GenericName[lo]=ການວາດພາບ +GenericName[lt]=Vektorinis piešimas +GenericName[lv]=Vektoru Zīmējumi +GenericName[mk]=Векторско цртање +GenericName[mn]=Вектор зураглал +GenericName[ms]=Lukisan Vektor +GenericName[mt]=Tpinġijiet vettorali +GenericName[nb]=Vektorbasert tegneprogram +GenericName[nds]=Vektorteken +GenericName[ne]=भेक्टर रेखाचित्र +GenericName[nl]=Vectorafbeelding +GenericName[nn]=Vektorteikning +GenericName[nso]=Go Taka Vector +GenericName[pa]=ਵੈਕਟਰ ਡਰਾਇੰਗ +GenericName[pl]=Program do rysowania +GenericName[pt]=Desenho Vectorial +GenericName[pt_BR]=Desenho Vetorial +GenericName[ro]=Program de desenare vectorială +GenericName[ru]=Векторная графика +GenericName[rw]=Ishushanya Mujyana +GenericName[se]=Vektorsárgon +GenericName[sk]=Vektorový kresliaci program +GenericName[sl]=Vektorsko risanje +GenericName[sr]=Векторско цртање +GenericName[sr@Latn]=Vektorsko crtanje +GenericName[ss]=Kudvweba kweVector +GenericName[sv]=Vektorritning +GenericName[ta]=வெக்டார் வரைதல் +GenericName[te]=వెక్టర్ చిత్ర లేఖనం +GenericName[tg]=Расмбардорӣ +GenericName[th]=วาดภาพเวกเตอร์ +GenericName[tr]=Vektör Çizim +GenericName[tt]=Vektorlı Sızu +GenericName[uk]=Векторне креслення +GenericName[uz]=Vektor chizmalarni yaratish vositasi +GenericName[uz@cyrillic]=Вектор чизмаларни яратиш воситаси +GenericName[ven]=Mbekanyomushumo ya u ola +GenericName[vi]=Vẽ đồ họa véctơ +GenericName[wa]=Programe di dessinaedje avou des royes +GenericName[xh]=Inkqubo Yomzobo Osekwe-Kwimitha Yovavanyo +GenericName[zh_CN]=矢量绘图 +GenericName[zh_TW]=向量繪圖 +GenericName[zu]=Umdwebo we-Vector +Exec=sodipodi +Icon=sodipodi +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/tgif.desktop b/kappfinder/apps/Graphics/tgif.desktop new file mode 100644 index 000000000..a550ba685 --- /dev/null +++ b/kappfinder/apps/Graphics/tgif.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Exec=tgif +Type=Application +Name=TGif +Name[af]=Tgif +Name[bn]=টি-জিফ +Name[hi]=टी-जिफ़ +Name[ne]=टी गिफ +Name[sv]=Tgif +Name[te]=టిజిఫ్ +GenericName=Drawing Program +GenericName[af]=Teken Program +GenericName[ar]=برنامج الرسم +GenericName[az]=Şəkil Çəkmə Proqramı +GenericName[be]=Праграма для малявання +GenericName[bg]=Програма за рисуване +GenericName[bn]=অঙ্কন প্রোগ্রাম +GenericName[br]=Goulev tresañ +GenericName[bs]=Program za crtanje +GenericName[ca]=Programa de dibuix +GenericName[cs]=Kreslící program +GenericName[csb]=Programa do céchòwaniô +GenericName[cy]=Rhaglen Darlunio +GenericName[da]=Tegneprogram +GenericName[de]=Zeichenprogramm +GenericName[el]=Πρόγραμμα ζωγραφικής +GenericName[eo]=Desegnilo +GenericName[es]=Programa de dibujo +GenericName[et]=Joonistusprogramm +GenericName[eu]=Marrazteko programa +GenericName[fa]=برنامۀ ترسیم +GenericName[fi]=Piirto-ohjelma +GenericName[fo]=Tekniforrit +GenericName[fr]=Logiciel de dessin +GenericName[fy]=Tekenprogramma +GenericName[ga]=Clár líníochta +GenericName[gl]=Programa de Debuxo +GenericName[he]=תוכנית ציור +GenericName[hi]=ड्राइंग प्रोग्राम +GenericName[hr]=Program za crtanje +GenericName[hu]=Rajzolóprogram +GenericName[is]=Teikniforrit +GenericName[it]=Programma di disegno +GenericName[ja]=ドローイングプログラム +GenericName[ka]=სახატავი პროგრამა +GenericName[kk]=Сурет салу бағдарламасы +GenericName[km]=កម្មវិធី​គំនូរ +GenericName[ko]=그리기 프로그램 +GenericName[lo]=ໂປຣແກຣມວາດພາບ +GenericName[lt]=Braižymo programa +GenericName[lv]=Zīmēšanas Programma +GenericName[mk]=Програма за цртање +GenericName[mn]=Зургийн програм +GenericName[ms]=Program Melukis +GenericName[mt]=Programm tat-tpinġija +GenericName[nb]=Tegneprogram +GenericName[nds]=Tekenprogramm +GenericName[ne]=रेखाचित्र कार्यक्रम +GenericName[nl]=Tekenprogramma +GenericName[nn]=Teikneprogram +GenericName[nso]=Lenaneo la Tako +GenericName[pa]=ਡਰਾਇੰਗ ਕਾਰਜ +GenericName[pl]=Program do rysowania +GenericName[pt]=Programa de Desenho +GenericName[pt_BR]=Programa de Desenho +GenericName[ro]=Program de desenare +GenericName[ru]=Программа для рисования +GenericName[rw]=Gushushanya Porogaramu +GenericName[se]=Sárgonprográmma +GenericName[sk]=Kreslenie +GenericName[sl]=Risarski program +GenericName[sr]=Програм за цртање +GenericName[sr@Latn]=Program za crtanje +GenericName[ss]=Luhlelo lekudvweba +GenericName[sv]=Ritprogram +GenericName[ta]=வரையும் நிரலி +GenericName[te]=చిత్ర లేఖన కార్యక్రమం +GenericName[tg]=Барномаи расм +GenericName[th]=โปรแกรมวาดภาพ +GenericName[tr]=Çizim Programı +GenericName[tt]=Sızğıç Yazılım +GenericName[uk]=Програма для креслення +GenericName[uz]=Chizmalarni yaratish vositasi +GenericName[uz@cyrillic]=Чизмаларни яратиш воситаси +GenericName[ven]=Mbekanyomushumo ya u ola +GenericName[vi]=Trình vẽ +GenericName[wa]=Programe di dessinaedje +GenericName[xh]= Inkqubo Yemizobo +GenericName[zh_CN]=绘图程序 +GenericName[zh_TW]=繪圖程式 +GenericName[zu]=Uhlelo lwemisebenzi oludwebayo +X-KDE-StartupNotify=false +MimeType=application/x-tgif diff --git a/kappfinder/apps/Graphics/xdvi.desktop b/kappfinder/apps/Graphics/xdvi.desktop new file mode 100644 index 000000000..c39459f5d --- /dev/null +++ b/kappfinder/apps/Graphics/xdvi.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Exec=xdvi +Icon=xapp +Type=Application +Name=X DVI +Name[af]=X Dvi +Name[bn]=এক্স ডি-ভি-আই +Name[cs]=X Dvi +Name[de]=X-DVI +Name[eo]=XDVI +Name[es]=XDVI +Name[fr]=XDVI +Name[hi]=एक्स डीवीआई +Name[mn]=X-DVI +Name[nds]=X-DVI +Name[ne]=एक्स डी भी आई +Name[te]=ఎక్స్ డివిఐ +GenericName=DVI Viewer +GenericName[af]=Dvi Aansig +GenericName[ar]=عارض ملفات DVI +GenericName[az]=DVI Nümayişçisi +GenericName[be]=Праглядальнік DVI +GenericName[bg]=Преглед на DVI документи +GenericName[bn]=ডি-ভি-আই প্রদর্শক +GenericName[br]=Gweler DVI +GenericName[bs]=Preglednik DVI dokumenata +GenericName[ca]=Visor DVI +GenericName[cs]=Prohlížeč DVI souborů +GenericName[csb]=Przezérnik lopków DVI +GenericName[cy]=Gwelydd DVI +GenericName[da]=DVI-fremviser +GenericName[de]=DVI-Betrachter +GenericName[el]=Προβολέας DVI +GenericName[eo]=DVI-rigardilo +GenericName[es]=Visor de documentos DVI +GenericName[et]=DVI failide vaatamine +GenericName[eu]=DVI ikustailua +GenericName[fa]=مشاهده‌گر DVI +GenericName[fi]=DVI-näytin +GenericName[fo]=DVI-vísari +GenericName[fr]=Afficheur DVI +GenericName[fy]=DVI-werjefteprogramma +GenericName[ga]=Amharcán DVI +GenericName[gl]=Visualizador de DVI +GenericName[he]=מציג DVI +GenericName[hi]=डीवीआई प्रदर्शक +GenericName[hr]=Preglednik DVI dokumenata +GenericName[hu]=DVI-nézegető +GenericName[id]=Viewer DVI +GenericName[is]=DVI-sjá +GenericName[it]=Visualizzatore DVI +GenericName[ja]=DVI ビューア +GenericName[ka]=პროგრამა DVI–ის სანახავდ +GenericName[kk]=DVI қарап-шығу +GenericName[km]=កម្មវិធី​មើល DVI +GenericName[ko]=DVI 뷰어 +GenericName[lo]=ຕົວສະແດງຜົນ DVI +GenericName[lt]=DVI Žiūriklis +GenericName[lv]=DVI Skatītājs +GenericName[mk]=Прегледувач за DVI +GenericName[mn]=DVI-харагч +GenericName[ms]=Pelihat DVI +GenericName[mt]=Werrej DVI +GenericName[nb]=DVI-leser +GenericName[nds]=Kieker för DVI +GenericName[ne]=डी भी आई दर्शक +GenericName[nl]=DVI-weergaveprogramma +GenericName[nn]=DVI-lesar +GenericName[nso]=Molebeledi wa DVI +GenericName[oc]=Visualisor DVI +GenericName[pa]=DVI ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka plików DVI +GenericName[pt]=Visualizador de DVIs +GenericName[pt_BR]=Visualizador de arquivos DVI +GenericName[ro]=Vizualizor de fișiere DVI +GenericName[ru]=Программа просмотра DVI +GenericName[rw]=Ikigaragaza DVI +GenericName[se]=DVI čájeheaddji +GenericName[sk]=Prehliadač DVI súborov +GenericName[sl]=Pregledovalnik datotek DVI +GenericName[sr]=DVI приказивач +GenericName[sr@Latn]=DVI prikazivač +GenericName[ss]=Sibuki se DVI +GenericName[sv]=DVI-visare +GenericName[ta]=DVI காட்சி +GenericName[te]=డివిఐ వీక్షిణి +GenericName[tg]=Намоишгари DVI +GenericName[th]=ตัวแสดงผล DVI +GenericName[tr]=DVI Görüntüleyici +GenericName[tt]=DVI Kürsätkeç +GenericName[uk]=Переглядач DVI +GenericName[uz]=DVI koʻruvchi +GenericName[uz@cyrillic]=DVI кўрувчи +GenericName[ven]=Muvhoni wa DVI +GenericName[vi]=Trình xem DVI +GenericName[wa]=Håyneu di fitchîs DVI +GenericName[xh]=Umboniseli we DVI +GenericName[zh_CN]=DVI 查看器 +GenericName[zh_TW]=DVI 檢視器 +GenericName[zu]=Umbukisi we-DVI +MimeType=application/x-dvi +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/xfig.desktop b/kappfinder/apps/Graphics/xfig.desktop new file mode 100644 index 000000000..32101adf7 --- /dev/null +++ b/kappfinder/apps/Graphics/xfig.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Exec=xfig +Icon=xfig +MimeType=image/x-xfig +Type=Application +Name=Xfig +Name[bn]=এক্স-ফিগ +Name[eo]=XDesegno +Name[fr]=XFig +Name[hi]=एक्सफिग +Name[ne]=एक्स फिग +Name[te]=ఎక్స్ ఫిగ్ +Name[zh_TW]=Xfig 繪圖程式 +Name[zu]=I-Xfig +GenericName=Drawing Program +GenericName[af]=Teken Program +GenericName[ar]=برنامج الرسم +GenericName[az]=Şəkil Çəkmə Proqramı +GenericName[be]=Праграма для малявання +GenericName[bg]=Програма за рисуване +GenericName[bn]=অঙ্কন প্রোগ্রাম +GenericName[br]=Goulev tresañ +GenericName[bs]=Program za crtanje +GenericName[ca]=Programa de dibuix +GenericName[cs]=Kreslící program +GenericName[csb]=Programa do céchòwaniô +GenericName[cy]=Rhaglen Darlunio +GenericName[da]=Tegneprogram +GenericName[de]=Zeichenprogramm +GenericName[el]=Πρόγραμμα ζωγραφικής +GenericName[eo]=Desegnilo +GenericName[es]=Programa de dibujo +GenericName[et]=Joonistusprogramm +GenericName[eu]=Marrazteko programa +GenericName[fa]=برنامۀ ترسیم +GenericName[fi]=Piirto-ohjelma +GenericName[fo]=Tekniforrit +GenericName[fr]=Logiciel de dessin +GenericName[fy]=Tekenprogramma +GenericName[ga]=Clár líníochta +GenericName[gl]=Programa de Debuxo +GenericName[he]=תוכנית ציור +GenericName[hi]=ड्राइंग प्रोग्राम +GenericName[hr]=Program za crtanje +GenericName[hu]=Rajzolóprogram +GenericName[is]=Teikniforrit +GenericName[it]=Programma di disegno +GenericName[ja]=ドローイングプログラム +GenericName[ka]=სახატავი პროგრამა +GenericName[kk]=Сурет салу бағдарламасы +GenericName[km]=កម្មវិធី​គំនូរ +GenericName[ko]=그리기 프로그램 +GenericName[lo]=ໂປຣແກຣມວາດພາບ +GenericName[lt]=Braižymo programa +GenericName[lv]=Zīmēšanas Programma +GenericName[mk]=Програма за цртање +GenericName[mn]=Зургийн програм +GenericName[ms]=Program Melukis +GenericName[mt]=Programm tat-tpinġija +GenericName[nb]=Tegneprogram +GenericName[nds]=Tekenprogramm +GenericName[ne]=रेखाचित्र कार्यक्रम +GenericName[nl]=Tekenprogramma +GenericName[nn]=Teikneprogram +GenericName[nso]=Lenaneo la Tako +GenericName[pa]=ਡਰਾਇੰਗ ਕਾਰਜ +GenericName[pl]=Program do rysowania +GenericName[pt]=Programa de Desenho +GenericName[pt_BR]=Programa de Desenho +GenericName[ro]=Program de desenare +GenericName[ru]=Программа для рисования +GenericName[rw]=Gushushanya Porogaramu +GenericName[se]=Sárgonprográmma +GenericName[sk]=Kreslenie +GenericName[sl]=Risarski program +GenericName[sr]=Програм за цртање +GenericName[sr@Latn]=Program za crtanje +GenericName[ss]=Luhlelo lekudvweba +GenericName[sv]=Ritprogram +GenericName[ta]=வரையும் நிரலி +GenericName[te]=చిత్ర లేఖన కార్యక్రమం +GenericName[tg]=Барномаи расм +GenericName[th]=โปรแกรมวาดภาพ +GenericName[tr]=Çizim Programı +GenericName[tt]=Sızğıç Yazılım +GenericName[uk]=Програма для креслення +GenericName[uz]=Chizmalarni yaratish vositasi +GenericName[uz@cyrillic]=Чизмаларни яратиш воситаси +GenericName[ven]=Mbekanyomushumo ya u ola +GenericName[vi]=Trình vẽ +GenericName[wa]=Programe di dessinaedje +GenericName[xh]= Inkqubo Yemizobo +GenericName[zh_CN]=绘图程序 +GenericName[zh_TW]=繪圖程式 +GenericName[zu]=Uhlelo lwemisebenzi oludwebayo +X-KDE-StartupNotify=false +X-StandardInstall=true diff --git a/kappfinder/apps/Graphics/xpaint.desktop b/kappfinder/apps/Graphics/xpaint.desktop new file mode 100644 index 000000000..5b78c7dd6 --- /dev/null +++ b/kappfinder/apps/Graphics/xpaint.desktop @@ -0,0 +1,117 @@ +[Desktop Entry] +Name=X Paint +Name[af]=X Verf +Name[ar]=رسام X +Name[bn]=এক্স পেইন্ট +Name[cy]=X Peintio +Name[eo]=XPentro +Name[es]=XPaint +Name[fa]=نقاشی X +Name[fr]=XPaint +Name[hi]=एक्स पेंट +Name[km]=គូរ X +Name[lo]=X paint +Name[nds]=X-Paint +Name[ne]=एक्स पेन्ट +Name[nso]=X Pente +Name[pa]=X ਪੇਂਟ +Name[rw]=X Gusiga irangi +Name[ss]=Ipendi X +Name[sv]=X paint +Name[ta]=X பெயிண்ட் +Name[te]=ఎక్స్ పెయింట్ +Name[tg]=Намоиши X +Name[th]=วาดรูป X +Name[ven]=Pennde ya X +Name[vi]=Sơn X +Name[xh]=Ipeyinti X +Name[zh_CN]=X 绘图 +Name[zh_TW]=X 小畫家 +MimeType= +GenericName=Paint Program +GenericName[af]=Verf Program +GenericName[ar]=برنامج تلوين +GenericName[az]=Boyama Proqramı +GenericName[be]=Праграма тыпу Paint +GenericName[bg]=Програма за рисуване +GenericName[bn]=ছবি রং করার প্রোগ্রাম +GenericName[br]=Goulev tresañ +GenericName[bs]=Jednostavni program za crtanje +GenericName[ca]=Programa Paint +GenericName[cs]=Kreslící program +GenericName[csb]=Programa Paint +GenericName[cy]=Rhaglen Peintio +GenericName[da]=Maleprogram +GenericName[de]=Malprogramm +GenericName[el]=Πρόγραμμα ζωγραφικής +GenericName[eo]=Pentrilo +GenericName[es]=Programa de pintura +GenericName[et]=Joonistusprogramm +GenericName[eu]=Margoketa programa +GenericName[fa]=برنامۀ نقاشی +GenericName[fi]=Piirto-ohjelma +GenericName[fo]=Tekniforrit +GenericName[fr]=Petit programme de dessin +GenericName[fy]=Tekenprogramma +GenericName[ga]=Clár Péinteála +GenericName[gl]=Programa de Debuxo +GenericName[he]=תוכנית ציור +GenericName[hi]=पेंट प्रोग्राम +GenericName[hr]=Program za slikanje +GenericName[hu]=Rajzolóprogram +GenericName[is]=Teikniforrit +GenericName[it]=Programma di disegno +GenericName[ja]=ペイントプログラム +GenericName[ka]=სახატავი პროგრამა +GenericName[kk]=Бояу бағдарламасы +GenericName[km]=កម្មវិធី​គូរ +GenericName[ko]=페인트 프로그램 +GenericName[lo]=ໂປຣແກຣມວາດພາບທຳມະດາ +GenericName[lt]=Piešimo programa +GenericName[lv]=Krāsošanas Programma +GenericName[mk]=Програма за цртање +GenericName[mn]=Зургийн програм +GenericName[ms]=Program Mewarna +GenericName[mt]=Programm sempliċi tat-tpinġija +GenericName[nb]=Maleprogram +GenericName[nds]=Maalprogramm +GenericName[ne]=पेन्ट कार्यक्रम +GenericName[nl]=Tekenprogramma +GenericName[nn]=Måleprogram +GenericName[nso]=Lenaneo la Pento +GenericName[pa]=ਪੇਂਟ ਚਿੱਤਰ +GenericName[pl]=Program Paint +GenericName[pt]=Programa de Pintura +GenericName[pt_BR]=Programa de pintura +GenericName[ro]=Program de desenare +GenericName[ru]=Графический редактор +GenericName[rw]=Porogaramu Gusiga irangi +GenericName[se]=Málenprográmma +GenericName[sk]=Kreslenie +GenericName[sl]=Slikarski program +GenericName[sr]=Програм за бојење +GenericName[sr@Latn]=Program za bojenje +GenericName[ss]=Luhlelo lwependi +GenericName[sv]=Ritprogram +GenericName[ta]=பெயிண்ட் நிரலி +GenericName[te]=పెయింట్ కార్యక్రమం +GenericName[tg]=Барномаи нақша +GenericName[th]=โปรแกรมวาดภาพธรรมดาๆ +GenericName[tr]=Boyama Programı +GenericName[tt]=Sürätläwçe Yazılım +GenericName[uk]=Програма для малювання +GenericName[uz]=Chizish dasturi +GenericName[uz@cyrillic]=Чизиш дастури +GenericName[ven]=Mbekanyamushumo ya Pennde +GenericName[vi]=Chương trình vẽ +GenericName[wa]=Programe di dessinaedje +GenericName[xh]=Inkqubo yodweliso Lwepeyinti +GenericName[zh_CN]=绘图程序 +GenericName[zh_TW]=繪圖程式 +GenericName[zu]=Uhlelo lwemisebezi lukapende +Exec=xpaint +Icon=xpaint +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Graphics/xv.desktop b/kappfinder/apps/Graphics/xv.desktop new file mode 100644 index 000000000..8e188b617 --- /dev/null +++ b/kappfinder/apps/Graphics/xv.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=XV +Name[af]=Xv +Name[bn]=এক্স-ভি +Name[fr]=Xv +Name[hi]=एक्सवी +Name[te]=ఎక్స్ వి +MimeType=image/fax-g3;image/gif;image/jpeg;image/png;image/tiff;image/x-bmp;image/x-xbm;image/x-xpm +GenericName=Picture Viewer +GenericName[af]=Prent Aansig +GenericName[ar]=عارض الرسمات +GenericName[az]=Rəsim Nümayişçisi +GenericName[be]=Праглядальнік малюнкаў +GenericName[bg]=Преглед на изображения +GenericName[bn]=চিত্র প্রদর্শক +GenericName[br]=Gweler Skeudenn +GenericName[bs]=Preglednik slika +GenericName[ca]=Visor de fotografies +GenericName[cs]=Prohlížeč obrázků +GenericName[csb]=Przezérnik òbrôzków +GenericName[cy]=Gwelydd Llun +GenericName[da]=Billedfremviser +GenericName[de]=Bildbetrachter +GenericName[el]=Προβολέας εικόνων +GenericName[eo]=Bildorigardilo +GenericName[es]=Visor de imágenes +GenericName[et]=Pildifailide vaatamine +GenericName[eu]=Irudi ikustailua +GenericName[fa]=مشاهده‌گر عکس +GenericName[fi]=Kuvankatseluohjelma +GenericName[fo]=Myndavísari +GenericName[fr]=Afficheur d'images +GenericName[fy]=Ofbyldingswerjefteprogramma +GenericName[ga]=Amharcán Pictiúir +GenericName[gl]=Visor de Imaxes +GenericName[he]=מציג תמונות +GenericName[hi]=छवि प्रदर्शक +GenericName[hr]=Preglednik slika +GenericName[hu]=Képnézegető +GenericName[is]=Myndaskoðari +GenericName[it]=Visualizzatore di immagini +GenericName[ja]=画像ビューア +GenericName[ka]=გამოსახულებების სანახავი პროგრამა +GenericName[kk]=Суреттерді қарап-шығу +GenericName[km]=កម្មវិធី​មើល​រូបភាព +GenericName[ko]=그림 뷰어 +GenericName[lo]=ເຄື່ອງມືສະແດງພາບ +GenericName[lt]=Paveikslėlių žiūriklis +GenericName[lv]=Bilžu Skatītājs +GenericName[mk]=Прегледувач на слики +GenericName[mn]=Зураг харагч +GenericName[ms]=Pelihat Gambar +GenericName[mt]=Werrej ta' stampi +GenericName[nb]=Bildeframviser +GenericName[nds]=Bildkieker +GenericName[ne]=तस्वीर दर्शक +GenericName[nl]=Afbeeldingenweergaveprogramma +GenericName[nn]=Biletvisar +GenericName[nso]=Molebeledi wa Seswantsho +GenericName[pa]=ਤਸਵੀਰ ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka obrazków +GenericName[pt]=Visualizador de Imagens +GenericName[pt_BR]=Visualizador de Imagens +GenericName[ro]=Vizualizor de imagini +GenericName[ru]=Программа просмотра рисунков +GenericName[rw]=Ikigaragaza Ishusho +GenericName[se]=Govvačájeheaddji +GenericName[sk]=Prehliadač obrázkov +GenericName[sl]=Pregledovalnik slik +GenericName[sr]=Приказивач слика +GenericName[sr@Latn]=Prikazivač slika +GenericName[ss]=Sibuki sesitfombe +GenericName[sv]=Bildvisare +GenericName[ta]=சித்திரக் காட்டி +GenericName[te]=చిత్ర వీక్షిణి +GenericName[tg]=Барномаи тасвири намоишгар +GenericName[th]=เครื่องมือแสดงภาพ +GenericName[tr]=Resim Görüntüleyici +GenericName[tt]=Sürät Kürsätkeç +GenericName[uk]=Переглядач зображень +GenericName[uz]=Rasm koʻruvchi +GenericName[uz@cyrillic]=Расм кўрувчи +GenericName[ven]=Muvhoni wa Tshifanyiso +GenericName[vi]=Trình xem ảnh +GenericName[wa]=Håyneu d' imådjes +GenericName[xh]=Umbukeli Wemifanekiso +GenericName[zh_CN]=图片查看器 +GenericName[zh_TW]=圖片瀏覽程式 +GenericName[zu]=Umbukisi wesithombe +Exec=xv %F +Icon=xv +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Internet/BlueFish.desktop b/kappfinder/apps/Internet/BlueFish.desktop new file mode 100644 index 000000000..ca89384a0 --- /dev/null +++ b/kappfinder/apps/Internet/BlueFish.desktop @@ -0,0 +1,101 @@ +[Desktop Entry] +Name=BlueFish +Name[af]=Blou-vis +Name[bn]=ব্লু-ফিশ +Name[eo]=Blufiŝo +Name[hi]=ब्लूफ़िश +Name[ne]=ब्लुफिस +Name[nso]=Hlapi ye Tala +Name[pa]=ਬਲਿਊ-ਫਿਸ਼ +Name[rw]=IfiBururu +Name[sl]=Modra riba +Name[sv]=Bluefish +Name[ta]=நீல மீன் +Name[te]=బ్లూఫిష్ +Name[tg]=Моҳии обӣ +Name[ven]=Khovhedala +GenericName=HTML Editor +GenericName[af]=Html Redigeerder +GenericName[ar]=محرر HTML +GenericName[az]=HTML Editoru +GenericName[be]=Рэдактар HTML +GenericName[bg]=HTML редактор +GenericName[bn]=HTML সম্পাদক +GenericName[br]=Aozer HTML +GenericName[bs]=HTML editor +GenericName[ca]=Editor d'HTML +GenericName[cs]=Editor HTML +GenericName[csb]=HTML editora +GenericName[cy]=Golygydd HTML +GenericName[da]=HTML-editor +GenericName[de]=HTML-Editor +GenericName[el]=Επεξεργαστής HTML +GenericName[eo]=HTML-redaktilo +GenericName[es]=Editor HTML +GenericName[et]=HTML redaktor +GenericName[eu]=HTML editorea +GenericName[fa]=ویرایشگر زنگام +GenericName[fi]=HTML-editori +GenericName[fo]=HTML-ritil +GenericName[fr]=Un éditeur HTML +GenericName[fy]=HTML-bewurker +GenericName[ga]=Eagarthóir HTML +GenericName[gl]=Editor HTML +GenericName[he]=עורך HTML +GenericName[hi]=एचटीएमएल संपादक +GenericName[hr]=HTML uređivač +GenericName[hu]=HTML-szerkesztő +GenericName[id]=Penyunting HTML +GenericName[is]=HTML ritill +GenericName[it]=Editor HTML +GenericName[ja]=HTML エディタ +GenericName[ka]=HTML რედაქტორი +GenericName[kk]=HTML редакторы +GenericName[km]=កម្មវិធី​និពន្ធ HTML +GenericName[ko]=HTML 편집기 +GenericName[lo]=ເຄືອ່ງມືແກ້ໄຂ້ HTML +GenericName[lt]=KDE HTML redaktorius +GenericName[lv]=HTML Redaktors +GenericName[mk]=Уредувач на HTML +GenericName[mn]=HTML-боловсруулагч +GenericName[ms]=Penyunting HTML +GenericName[mt]=Editur HTML +GenericName[nb]=HTML-redigering +GenericName[nds]=Editor för HTML +GenericName[ne]=HTML सम्पादक +GenericName[nl]=HTML-editor +GenericName[nn]=HTML-redigering +GenericName[nso]=Mofetosi wa HTML +GenericName[pa]=HTML ਸੰਪਾਦਕ +GenericName[pl]=Edytor plików HTML +GenericName[pt]=Editor de HTML +GenericName[pt_BR]=Editor HTML +GenericName[ro]=Editor HTML +GenericName[ru]=Редактор HTML +GenericName[rw]=Muhinduzi HTML +GenericName[se]=HTML-čállinprográmma +GenericName[sl]=Urejevalnik HTML +GenericName[sr]=HTML уређивач +GenericName[sr@Latn]=HTML uređivač +GenericName[ss]=Umhleli we HTML +GenericName[sv]=HTML-editor +GenericName[ta]=HTML திருத்துபவர் +GenericName[te]=హెచ్ టి ఎంఎల్ ఎడిటర్ +GenericName[tg]=Муҳаррири HTML +GenericName[th]=เครื่องมือแก้ไข HTML +GenericName[tr]=HTML Düzenleyici +GenericName[tt]=HTML Tözätkeç +GenericName[uk]=Редактор HTML +GenericName[uz]=HTML tahrirchi +GenericName[uz@cyrillic]=HTML таҳрирчи +GenericName[ven]=Musengulusi wa HTML +GenericName[vi]=Trình biên soạn HTML +GenericName[wa]=Aspougneu di pådjes HTML +GenericName[xh]=Umhleli we HTML +GenericName[zh_CN]=HTML 编辑器 +GenericName[zh_TW]=HTML 編輯器 +GenericName[zu]=Umlungisi we-HTML +Exec=bluefish +Terminal=false +Icon=bluefish +Type=Application diff --git a/kappfinder/apps/Internet/Dpsftp.desktop b/kappfinder/apps/Internet/Dpsftp.desktop new file mode 100644 index 000000000..30ad58dbd --- /dev/null +++ b/kappfinder/apps/Internet/Dpsftp.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=Dpsftp +Name[af]=Dps-ftp +Name[eo]=DPS-FTP +Name[fr]=DpsFTP +Name[hi]=डीपीएसएफटीपी +Name[te]=డిపిఎస్ ఎఫ్టిపి +GenericName=FTP Browser +GenericName[af]=FTP Blaaiër +GenericName[ar]=متصفح ميفاق نقل الملفات FTP +GenericName[be]=Кліент FTP +GenericName[bg]=FTP браузър +GenericName[bn]=এফ-টি-পি ব্রাউজার +GenericName[br]=Furcher FTP +GenericName[bs]=FTP preglednik +GenericName[ca]=Fullejador FTP +GenericName[cs]=FTP prohlížeč +GenericName[csb]=Przezérnik FTP +GenericName[da]=FTP-Browser +GenericName[de]=FTP-Browser +GenericName[el]=Περιηγητής FTP +GenericName[eo]=FTP-Foliumilo +GenericName[es]=Navegador FTP +GenericName[et]=FTP lehitseja +GenericName[eu]=FTP arakatzailea +GenericName[fa]=مرورگر قاپ‌ +GenericName[fi]=FTP-selain +GenericName[fr]=Navigateur FTP +GenericName[fy]=FTP-blêder +GenericName[ga]=Brabhsálaí FTP +GenericName[gl]=Navegador FTP +GenericName[he]=דפדפן FTP +GenericName[hr]=FTP preglednik +GenericName[hu]=FTP-böngésző +GenericName[id]=Peselancar FTP +GenericName[is]=FTP vafri +GenericName[it]=Browser FTP +GenericName[ja]=FTP ブラウザ +GenericName[ka]=FTP-ბრაუზერი +GenericName[kk]=FTP браузері +GenericName[km]=កម្មវិធី​រុករក FTP +GenericName[ko]=FTP 탐색기 +GenericName[lt]=FTP naršyklė +GenericName[mk]=FTP-прелистувач +GenericName[ms]=Pelayar FTP +GenericName[nb]=FTP-leser +GenericName[nds]=FTP-Nettkieker +GenericName[ne]=FTP ब्राउजर +GenericName[nl]=FTP-browser +GenericName[nn]=FTP-lesar +GenericName[pa]=FTP ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka FTP +GenericName[pt]=Navegador de FTP +GenericName[pt_BR]=Navegador FTP +GenericName[ro]=Navigator FTP +GenericName[ru]=FTP-браузер +GenericName[rw]=Mucukumbuzi FTP +GenericName[se]=FTP-logan +GenericName[sk]=FTP prehliadač +GenericName[sl]=Brskalnik po FTP +GenericName[sr]=FTP прегледач +GenericName[sr@Latn]=FTP pregledač +GenericName[sv]=FTP-bläddrare +GenericName[ta]=எஃப்டிபி உலாவி +GenericName[te]=ఎఫ్ టి పి బ్రౌజర్ +GenericName[tg]=Барномаи нозири FTP +GenericName[th]=โปรแกรมเรียกดู FTP +GenericName[tr]=FTP Tarayıcı +GenericName[uk]=Навігатор FTP +GenericName[uz]=FTP-brauzer +GenericName[uz@cyrillic]=FTP-браузер +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu FTP +GenericName[zh_CN]=FTP 浏览器 +GenericName[zh_TW]=FTP 瀏覽器 +Exec=dpsftp +Terminal=false +Icon=dpsftp +Type=Application diff --git a/kappfinder/apps/Internet/DrakSync.desktop b/kappfinder/apps/Internet/DrakSync.desktop new file mode 100644 index 000000000..a062d0ec7 --- /dev/null +++ b/kappfinder/apps/Internet/DrakSync.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Name=DrakSync +Name[af]=Draksync +Name[eo]=Dosierujosinkronigilo +Name[hi]=ड्रेकसिंक +Name[hu]=Draksync +Name[lo]=DrkSync +Name[sv]=Draksync +Name[ta]=ட்ராக்சின்க் +Name[te]=డ్రాక్ సింక్ +GenericName=Folder Synchronization +GenericName[af]=Gids Sinkronisasie +GenericName[ar]=أداة مُزامة المجلّد +GenericName[be]=Сінхранізацыя тэчак +GenericName[bg]=Синхронизиране на директории +GenericName[bn]=একাধিক ফোল্ডারের বিষয়বস্তু সামঞ্জস্যে আনা +GenericName[bs]=Sinhroniziranje direktorija +GenericName[ca]=Sincronització de carpetes +GenericName[cs]=Synchronizace složek +GenericName[csb]=Nôrzãdze do synchronizacëji katalogów +GenericName[da]=Mappesynkronisering +GenericName[de]=Ordner abgleichen +GenericName[el]=Εργαλείο συγχρονισμού φακέλων +GenericName[en_GB]=Folder Synchronisation +GenericName[eo]=Dosieruja sinkronigo +GenericName[es]=Sincronizador de carpetas +GenericName[et]=Kataloogide sünkroniseerimine +GenericName[eu]=Karpeta sinkronizatzea +GenericName[fa]=همگام‌سازی پوشه +GenericName[fi]=Kansioiden synkronointityökalu +GenericName[fr]=Synchronisation de dossiers +GenericName[fy]=Mappen syngronisaasje +GenericName[ga]=Sioncrónú Fillteán +GenericName[gl]=Sincronización de Cartafoles +GenericName[he]=סנכרון תיקיות +GenericName[hr]=Alat za usaglašavanje mapa +GenericName[hu]=Könyvtárszinkronizáló +GenericName[is]=Möppu samræming +GenericName[it]=Sincronizzazione cartelle +GenericName[ja]=フォルダ同期ツール +GenericName[ka]=საქაღალდეთა სინქრონიზება +GenericName[kk]=Қапшықтарды қадамдастыру +GenericName[km]=ធ្វើ​សមកាលកម្ម​ថត +GenericName[ko]=폴더 동기화 +GenericName[lt]=Aplankų sinchronizacija +GenericName[mk]=Синхронизација на папки +GenericName[ms]=Pensegerak Folder +GenericName[nb]=Mappesynkronisering +GenericName[nds]=Warktüüch för't Synkroniseren vun Ornern +GenericName[ne]=फोल्डर समक्रमण +GenericName[nl]=Mappensynchronisatie +GenericName[nn]=Mappesynkronisering +GenericName[pa]=ਫੋਲਡਰ ਸਮਕਾਲ +GenericName[pl]=Narzędzie do synchronizacji katalogów +GenericName[pt]=Sincronização de Pastas +GenericName[pt_BR]=Sincronização de Pastas +GenericName[ro]=Sincronizare foldere +GenericName[ru]=Синхронизация папок +GenericName[rw]=Iringaniza ry'Ububiko +GenericName[se]=Máhppabuohtalastin +GenericName[sk]=Synchronizácia priečinkov +GenericName[sl]=Usklajevanje map +GenericName[sr]=Синхронизација фасцикли +GenericName[sr@Latn]=Sinhronizacija fascikli +GenericName[sv]=Katalogsynkronisering +GenericName[ta]=அடைவு ஒருங்கிணைப்பு +GenericName[tg]=Яксонсозии феҳристҳо +GenericName[th]=เครื่องมือซิงค์โครไนซ์ไดเร็กทอรี +GenericName[tr]=Klasör Senkronizasyonu +GenericName[tt]=Törgäklärne Çordaşlaw +GenericName[uk]=Синхронізація тек +GenericName[uz]=Jildni tenglashtirish uchun vosita +GenericName[uz@cyrillic]=Жилдни тенглаштириш учун восита +GenericName[vi]=Công cụ đồng bộ thư mục +GenericName[wa]=Usteye di sincronijhaedje des ridants +GenericName[zh_CN]=文件夹同步 +GenericName[zh_TW]=目錄同步 +Exec=draksync +Terminal=false +Icon=draksync +Type=Application diff --git a/kappfinder/apps/Internet/Evolution.desktop b/kappfinder/apps/Internet/Evolution.desktop new file mode 100644 index 000000000..776ee6266 --- /dev/null +++ b/kappfinder/apps/Internet/Evolution.desktop @@ -0,0 +1,106 @@ +[Desktop Entry] +Name=Evolution +Name[af]=Evolusie +Name[be]=Эвалюцыя +Name[bn]=ইভোলিউশন +Name[eo]=Evoluo +Name[hi]=इवॉल्यूशन +Name[ne]=विकास +Name[nso]=Phetogo ya Thlago +Name[pa]=ਏਵੂਲੇਸ਼ਨ +Name[rw]=Impinduka +Name[ss]=Ingucuko letentakalekako +Name[ta]=சரிபார்த்தல் +Name[te]=ఎవల్యూషన్ +Name[tg]=Тараққиёт +Name[tt]=Üseş +Name[ven]=Tsikoni +Name[wa]=Evolucion +Name[zu]=Indabuko +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +Exec=evolution +Terminal=false +Icon=evolution +Type=Application diff --git a/kappfinder/apps/Internet/Faces.desktop b/kappfinder/apps/Internet/Faces.desktop new file mode 100644 index 000000000..34ba87f8d --- /dev/null +++ b/kappfinder/apps/Internet/Faces.desktop @@ -0,0 +1,110 @@ +[Desktop Entry] +Name=Faces +Name[af]=Gesigte +Name[csb]=Gãbë +Name[el]=Πρόσωπα +Name[eo]=Vizaĝoj +Name[fa]=چهره‌ها +Name[gl]=Caras +Name[hi]=एफएसेस +Name[lv]=Sejas +Name[nb]=Fjes +Name[ne]=मोहडा +Name[nso]=Difahlego +Name[pa]=ਚਿਹਰੇ +Name[pl]=Twarze +Name[rw]=Amasura +Name[ss]=Buso +Name[ta]=முகங்கள் +Name[te]=ముఖాలు +Name[tg]=Суратҳо +Name[tr]=Yüzler +Name[tt]=Yözlär +Name[ven]=Zwifhatuwo +Name[vi]=Các mặt +Name[wa]=Vizaedjes +Name[xh]=Ubuso +Name[zu]=Ubuso +GenericName=Mail Alert +GenericName[af]=Pos Waarskuwing +GenericName[ar]=منبه البريد +GenericName[az]=Poçt Xəbərçisi +GenericName[be]=Нагадванне аб новай пошце +GenericName[bg]=Аларма за поща +GenericName[bn]=চিঠি এসেছে +GenericName[bs]=Obavještavanje o pristigloj pošti +GenericName[ca]=Alerta per al correu +GenericName[cs]=Upozornění na poštu +GenericName[csb]=Wiadło o pòczce +GenericName[cy]=Rhybudd Ebost +GenericName[da]=Postadvarsel +GenericName[de]=E-Mail-Benachrichtigung +GenericName[el]=Ειδοποίηση για mail +GenericName[eo]=Retpoŝtavertilo +GenericName[es]=Alerta de correo +GenericName[et]=Kirjde monitor +GenericName[eu]=Mail jakinarazpena +GenericName[fa]=هشدار نامه +GenericName[fi]=Sähköpostivaroitus +GenericName[fo]=Postkomufráboðan +GenericName[fr]=Surveillance du courrier électronique +GenericName[fy]=E-postnotifikaasje +GenericName[ga]=Fógairt Ríomhphoist +GenericName[gl]=Alerta de Correo +GenericName[he]=הודעה לגבי דואר +GenericName[hi]=डाक सतर्क +GenericName[hr]=Upozoravanje o novom e-pismu +GenericName[hu]=Levélfigyelő +GenericName[is]=Fylgist með pósti +GenericName[it]=Programma per controllare la posta +GenericName[ja]=メールの通知 +GenericName[ka]=ფოსტის განგაში +GenericName[kk]=Келген пошта туралы хабарлау +GenericName[km]=ការជូនដំណឹង​អំពី​សំបុត្រ +GenericName[ko]=메일 알림이 +GenericName[lo]=ແຈ້ງເຕືອນຈົດຫມາຍ +GenericName[lt]=Pašto pranešėjas +GenericName[lv]=Pasta Brīdinājums +GenericName[mk]=Известувач за е-пошта +GenericName[mn]=Э-Захиа-Мэдээлэгч +GenericName[ms]=Amaran Mel +GenericName[mt]=Twissija tal-imejl +GenericName[nb]=E-postvarsel +GenericName[nds]=Nettpost-Alarm +GenericName[ne]=पत्र चेतावनी +GenericName[nl]=E-mailnotificatie +GenericName[nn]=E-postvarsel +GenericName[nso]=Theeletso ya Poso +GenericName[pa]=ਪੱਤਰ ਚੇਤਾਵਨੀ +GenericName[pl]=Powiadamianie o poczcie +GenericName[pt]=Alerta de E-mail +GenericName[pt_BR]=Alerta de Correio +GenericName[ro]=Alertare la email nou +GenericName[ru]=Извещения о новой почте +GenericName[rw]=Iburira ry'Ubutumwa +GenericName[se]=E-boastaávaštus +GenericName[sk]=Upozornenie na poštu +GenericName[sl]=Obvestilo o pošti +GenericName[sr]=Поштански аларм +GenericName[sr@Latn]=Poštanski alarm +GenericName[ss]=Sicwayisi seliposi +GenericName[sv]=E-postunderrättare +GenericName[ta]=அஞ்சல் எச்சரிக்கை +GenericName[tg]=Маълумот диҳии почтаи электроникӣ +GenericName[th]=แจ้งเตือนจดหมาย +GenericName[tr]=Midi Uyarısı +GenericName[tt]=Xat turında Beldergeç +GenericName[uk]=Повідомлення пошти +GenericName[uz]=Yangi xat haqida xabar beruvchi +GenericName[uz@cyrillic]=Янги хат ҳақида хабар берувчи +GenericName[ven]=U sedzesa poso +GenericName[vi]=Thông báo có thư +GenericName[wa]=Abranle pa emile +GenericName[xh]=Ulumkiso Lweposi +GenericName[zh_CN]=邮件提示程序 +GenericName[zh_TW]=郵件提示 +GenericName[zu]=Ukuqwashisa ngeposi +Exec=faces +Terminal=false +Icon=faces +Type=Application diff --git a/kappfinder/apps/Internet/Fetchmailconf.desktop b/kappfinder/apps/Internet/Fetchmailconf.desktop new file mode 100644 index 000000000..81a5a4650 --- /dev/null +++ b/kappfinder/apps/Internet/Fetchmailconf.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Name=Fetchmailconf +Name[af]=Fetchmail-conf +Name[csb]=Kònfigùracëjo Fetchmaila +Name[eo]=Poŝtprenilo +Name[fo]=Uppseting av Fetchmail +Name[fr]=FetchmailConf +Name[hi]=फेचमेलकॉन्फ +Name[pa]=ਫਿੱਚਮੇਲਸੰਰਚਨਾ +Name[pl]=Konfiguracja Fetchmaila +Name[rw]=GushakaIbonezaUbutumwa +Name[ta]=வரும் அஞ்சல் அமைப்பு +Name[te]=ఫెట్చ్ మెయిల్ కాన్ఫ్ +Name[tg]=Танзимгари fetchmail +Name[th]=ปรับแต่งโปรแกรม Fetchmail +Name[ven]=U dzhia poso a conf +Name[vi]=Cấu hình nhận thư +GenericName=Fetchmail Configuration +GenericName[af]=Fetchmail Opstelling +GenericName[ar]=إعدادت Fetchmail +GenericName[az]=Fetchmail Qurğuları +GenericName[be]=Настаўленні Fetchmail +GenericName[bg]=Настройване на Fetchmail +GenericName[bn]=ফেচ-মেইল কনফিগারেশন +GenericName[br]=Kefluniadur Fetchmail +GenericName[bs]=Podešavanje Fetchmail-a +GenericName[ca]=Configuració del fetchmail +GenericName[cs]=Nastavení Fetchmail +GenericName[csb]=Kònfigùracëjô Fetchmaila +GenericName[cy]=Ffurfweddiad Fetchmail +GenericName[da]=Fetchmail-indstilling +GenericName[de]=Einrichtung von Fetchmail +GenericName[el]=Ρύθμιση του Fetchmail +GenericName[eo]=Agordilo por la poŝtprenilo "fetchmail" +GenericName[es]=Configuración de Fetchmail +GenericName[et]=Fetchmaili seadistamine +GenericName[eu]=Fetchmail konfigurazioa +GenericName[fa]=Fetchmail پیکربندی +GenericName[fi]=Fetchmail-asetukset +GenericName[fo]=Uppseting av Fetchmail +GenericName[fr]=Outil de configuration de Fetchmail +GenericName[fy]=Fetchmail ynstelle +GenericName[ga]=Cumraíocht Fetchmail +GenericName[gl]=Configuración de Fetchmail +GenericName[he]=קביעת התצורה של Fetchmail +GenericName[hi]=फेचमेल कॉन्फ़िगरेशन +GenericName[hr]=Fetchmail konfiguriranje +GenericName[hu]=Fetchmail-beállító +GenericName[is]=Fetchmail stillingar +GenericName[it]=Configurazione di fetchmail +GenericName[ja]=Fetchmail の設定 +GenericName[ka]=fetchmai–ისl კონფიგურაცია +GenericName[kk]=Fetchmail бағдарламасын баптау +GenericName[km]=កំណត់​រចនាសម្ព័ន្ធ Fetchmail +GenericName[ko]=Fetchmail 설정 +GenericName[lo]=ການປັບແຕ່ງ Fetchmail +GenericName[lt]=Fetchmail konfigūravimas +GenericName[lv]=Fetchmail Konfigurācija +GenericName[mk]=Конфигурација на Fetchmail +GenericName[mn]=Fetchmail-н тохируулга +GenericName[ms]=Tetapan Fetchmail +GenericName[mt]=Konfigurazzjoni Fetchmail +GenericName[nb]=Tilpass Fetchmail +GenericName[nds]=Instellen vun Fetchmail +GenericName[ne]=फेचमेल कन्फिगरेसन +GenericName[nl]=Fetchmail instellen +GenericName[nn]=Fetchmail-oppsett +GenericName[nso]=Peakanyo ya Fetchmail +GenericName[pa]=ਪੱਤਰ ਪਰਾਪਤੀ ਸੰਰਚਨਾ +GenericName[pl]=Konfiguracja Fetchmaila +GenericName[pt]=Configuração do Fetchmail +GenericName[pt_BR]=Configuração do Fetchmail +GenericName[ro]=Configurează programul Fetchmail +GenericName[ru]=Настройка fetchmail +GenericName[rw]=Iboneza ryo Gushakaubutumwa +GenericName[se]=Fetchmail-heiveheapmi +GenericName[sk]=Konfigurácia Fetchmail +GenericName[sl]=Nastavitve za Fetchmail +GenericName[sr]=Подешавање fetchmail-а +GenericName[sr@Latn]=Podešavanje fetchmail-a +GenericName[ss]=Kulungiswa kwe Fetchmail +GenericName[sv]=Anpassning av Fetchmail +GenericName[ta]=வந்தடையும் அஞ்சல் வடிவமைப்பு +GenericName[te]=ఫెట్చ్ మెయిల్ అమరిక +GenericName[tg]=Танзимоти fetchmail +GenericName[th]=การปรับแต่ง Fetchmail +GenericName[tr]=Fetchmail Yapılandırması +GenericName[tt]=Fetchmail Caylawı +GenericName[uk]=Конфігурації fetchmail +GenericName[uz]=Fetchmail moslamasi +GenericName[uz@cyrillic]=Fetchmail мосламаси +GenericName[ven]=Khonifiguresheni ya u dzhia poso +GenericName[vi]=Cấu hình Nhận thư +GenericName[wa]=Apontiaedje di fetchmail +GenericName[xh]=Uqwalaselo lweFetchmail +GenericName[zh_CN]=Fetchmail 配置 +GenericName[zh_TW]=Fetchmail 組態 +GenericName[zu]=Inhlanganiselo Yokulanda Iposi +Exec=fetchmailconf +Terminal=false +Icon=fetchmailconf +Type=Application diff --git a/kappfinder/apps/Internet/Gabber.desktop b/kappfinder/apps/Internet/Gabber.desktop new file mode 100644 index 000000000..ba03e3d01 --- /dev/null +++ b/kappfinder/apps/Internet/Gabber.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +Name=Gabber +Name[af]=Gryper +Name[bn]=গ্যাবার +Name[eo]=Gabero +Name[hi]=गेबर +Name[mn]=Габбер +Name[ne]=कुरौटे +Name[pa]=ਗਾਬੀਰ +Name[ta]=காப்பர் +Name[te]=జాబర్ +GenericName=Instant Messenger +GenericName[af]=Oombliklike Boodskapper +GenericName[ar]=مراسلة فورية +GenericName[az]=Canlı İsmarışlaşma Vasitəsi +GenericName[be]=Кліент хуткіх паведамленняў +GenericName[bg]=Програма за чат +GenericName[bn]=তাত্‍ক্ষণিক আড্ডা +GenericName[br]=Posteler a-benn-kaer +GenericName[bs]=Instant poruke +GenericName[ca]=Missatger instantani +GenericName[cs]=Instant Messager +GenericName[csb]=Kùriera wiadłów (IM) +GenericName[cy]=Negesydd Chwim +GenericName[el]=Στιγμιαίος αποστολέας +GenericName[eo]=tujmesaĝilo +GenericName[es]=Mensajería instantánea +GenericName[et]=Kiirsuhtlusrakendus (IM) +GenericName[eu]=Bat-bateko mezularitza +GenericName[fa]=پیام‌رسان فوری +GenericName[fi]=Pikaviestintäohjelma +GenericName[fr]=Client de messagerie instantanée +GenericName[fy]=Instant messenger +GenericName[ga]=Clár teachtaireachtaí meandaracha +GenericName[gl]=Mensaxeria Instantánea +GenericName[he]=תוכנית מסרים מיידים +GenericName[hi]=इंसटैंट मैसेंजर +GenericName[hr]=Trenutne poruke +GenericName[hu]=Azonnali üzenetküldő +GenericName[is]=Samtalsbiðill (Instant Messenger) +GenericName[it]=Messaggistica istantanea +GenericName[ja]=インスタントメッセンジャー +GenericName[ka]=მყისი შეტყობინება +GenericName[kk]=Жедел хабарласу +GenericName[km]=កម្មវិធី​ផ្ញើ​សារ​បន្ទាន់ +GenericName[ko]=인스턴트 메신저 +GenericName[lt]=Momentinių žinučių klientas +GenericName[mk]=Инстант гласник +GenericName[mn]=Инстант мессэнжер +GenericName[ms]=Pesanan Ringkas +GenericName[nb]=Lynmeldingsprogram +GenericName[nds]=Kortnarichten-Maker +GenericName[ne]=आवश्यक म्यासेन्जर +GenericName[nl]=Instant messenger +GenericName[nn]=Lynmeldingsprogram +GenericName[pa]=ਮੌਕਾ ਸੁਨੇਹਾਕਾਰ +GenericName[pl]=Komunikator internetowy +GenericName[pt]=Mensageiro Instantâneo +GenericName[pt_BR]=Mensageiro Instantâneo +GenericName[ro]=Program de MI (mesaje instantanee) +GenericName[ru]=Обмен мгновенными сообщениями +GenericName[rw]=Intumwa y'Akokanya +GenericName[se]=Šleađgadiehtoprográmma +GenericName[sl]=Takojšni sporočilnik +GenericName[sr]=Брзи гласник +GenericName[sr@Latn]=Brzi glasnik +GenericName[sv]=Direktmeddelandeklient +GenericName[ta]=உடனடி தகவல் அளிப்பான் +GenericName[te]=తక్షణమే సందేశము ఇచ్చే కార్యక్రమం +GenericName[tg]=Иввази иттилоот +GenericName[th]=โปรแกรมส่งข้อความแบบทันที +GenericName[tr]=Hızlı İletişim Programı +GenericName[tt]=Aşığıç Xäbärçe +GenericName[uk]=Кур'єр повідомлень +GenericName[uz]=Xabar almashish vositasi +GenericName[uz@cyrillic]=Хабар алмашиш воситаси +GenericName[vi]=Trình nhắn tin nhanh +GenericName[wa]=Messaedjreye sol moumint +GenericName[zh_CN]=即时消息程序 +GenericName[zh_TW]=即時通訊(IM) +Exec=gabber +Terminal=false +Icon=gabber +Type=Application diff --git a/kappfinder/apps/Internet/Galeon.desktop b/kappfinder/apps/Internet/Galeon.desktop new file mode 100644 index 000000000..f9fa175d0 --- /dev/null +++ b/kappfinder/apps/Internet/Galeon.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=Galeon +Name[bn]=গ্যালিয়ন +Name[eo]=Galeono +Name[hi]=गेलियन +Name[lo]=ແກລງນ +Name[lv]=Galeona +Name[mn]=Галеон +Name[ne]=ग्यालिअन +Name[pa]=ਗਲੀਓਨ +Name[ta]=காலியன் +Name[te]=గెలియాన్ +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +Exec=galeon +Terminal=false +Icon=galeon +Type=Application diff --git a/kappfinder/apps/Internet/GnomeICU.desktop b/kappfinder/apps/Internet/GnomeICU.desktop new file mode 100644 index 000000000..87f99f006 --- /dev/null +++ b/kappfinder/apps/Internet/GnomeICU.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=GNOMEICU +Name[af]=Gnomeicu +Name[bn]=গনোম-আই.সি.ইউ +Name[csb]=GNOMEICU (widzã ce) +Name[eo]=Gnomikuo +Name[fo]=Gnome-ICU +Name[fr]=GnomeICU +Name[hi]=ग्नोमआईसीयू +Name[pl]=Gnome WidzęCie (ICU) +Name[sv]=Gnomeicu +Name[te]=గ్నొమ్ ఐసియు +GenericName=ICQ Messenger +GenericName[af]=ICQ Boodskapper +GenericName[ar]=مراسل ICQ +GenericName[be]=Кліент ICQ +GenericName[bg]=Програма за ICQ +GenericName[bn]=আই-সি-কিউ মেসেঞ্জার +GenericName[br]=Kemennader ICQ +GenericName[bs]=ICQ instant poruke +GenericName[ca]=Missatgeria ICQ +GenericName[cs]=ICQ komunikátor +GenericName[csb]=Kùriera ICQ +GenericName[da]=ICQ-Messenger +GenericName[de]=ICQ-Messenger +GenericName[el]=ICQ αποστολέας +GenericName[eo]=ICQ Tujmesaĝilo +GenericName[es]=Mensajería instantánea ICQ +GenericName[eu]=ICQ mezularitza +GenericName[fa]=ICQ پیام‌رسان +GenericName[fi]=ICQ-pikaviestintäohjelma +GenericName[fr]=Messagerie ICQ +GenericName[fy]=ICQ-messenger +GenericName[ga]=Teachtaire ICQ +GenericName[he]=תוכנית מסרים מיידים של ICQ +GenericName[hr]=ICQ trenutne poruke +GenericName[hu]=ICQ üzenetküldő +GenericName[is]=ICQ spjallforrit +GenericName[it]=Messaggistica ICQ +GenericName[ja]=ICQ メッセンジャー +GenericName[ka]=ICQ შემმტყობინებელი +GenericName[kk]=ICQ клиенті +GenericName[km]=កម្មវិធី​ផ្ញើសារ ICQ +GenericName[ko]=ICQ 메신저 +GenericName[lt]=ICQ žinučių klientas +GenericName[nb]=Prateprogrammet ICQ +GenericName[nds]=ICQ-Narichtenmaker +GenericName[ne]=ICQ म्यासेन्जर +GenericName[nl]=ICQ-messenger +GenericName[nn]=Prateprogrammet ICQ +GenericName[pa]=ICQ ਸੁਨੇਹਾਕਾਰ +GenericName[pl]=Komunikator ICQ +GenericName[pt]=Mensageiro ICQ +GenericName[pt_BR]=ICQ +GenericName[ro]=Mesaje instantanee ICQ +GenericName[ru]=Клиент ICQ +GenericName[rw]=Mutangamakuru ICQ +GenericName[se]=ICQ-šleađgadiehti +GenericName[sl]=Sporočilnik ICQ +GenericName[sr]=ICQ гласник +GenericName[sr@Latn]=ICQ glasnik +GenericName[sv]=ICQ-meddelandeklient +GenericName[ta]=ICQ செய்தியாளர் +GenericName[te]=ఐసిక్యూ మెసేంజర్ +GenericName[tg]=Хабаргузории ICQ +GenericName[th]=โปรแกรมคุย ICQ +GenericName[tr]=ICQ Hızlı Mesajlaşma Programı +GenericName[tt]=ICQ Xäbärçe +GenericName[uk]=Кур'єр (messenger) ICQ +GenericName[uz]=ICQ xabar almashish vositasi +GenericName[uz@cyrillic]=ICQ хабар алмашиш воситаси +GenericName[vi]=Trình nhắn tin ICQ +GenericName[wa]=Messaedjreye ICQ +GenericName[zh_CN]=ICQ 信使 +GenericName[zh_TW]=ICQ 即時通訊 +Exec=gnomeicu -a +Terminal=false +Icon=gnomeicu +Type=Application diff --git a/kappfinder/apps/Internet/Makefile.am b/kappfinder/apps/Internet/Makefile.am new file mode 100644 index 000000000..b8391b7c2 --- /dev/null +++ b/kappfinder/apps/Internet/Makefile.am @@ -0,0 +1,18 @@ +SUBDIRS = Terminal + +kappfinder_internet_data_DATA = arena.desktop netscape.desktop xftp.desktop \ + coolmail.desktop xfmail.desktop xbiff.desktop \ + xchat.desktop ethereal.desktop licq.desktop mozilla.desktop \ + BlueFish.desktop Dpsftp.desktop DrakSync.desktop Evolution.desktop \ + Faces.desktop Fetchmailconf.desktop Gabber.desktop \ + Galeon.desktop gFTP.desktop GnomeICU.desktop gnometalk.desktop gtelnet.desktop \ + Netscapemessenger.desktop Nmapfe.desktop Pan.desktop \ + Sylpheed.desktop knews.desktop netscape6.desktop opera.desktop \ + gnomemeeting.desktop balsa.desktop dc_gui.desktop ed2k_gui.desktop \ + ickle.desktop mldonkey_gui.desktop btdownloadgui.desktop epiphany.desktop \ + gaim.desktop mozilla-thunderbird.desktop mozilla-firefox.desktop \ + javaws.desktop wireshark.desktop + +kappfinder_internet_datadir = $(kde_datadir)/kappfinder/apps/Internet + +EXTRA_DIST = $(kappfinder_internet_data_DATA) diff --git a/kappfinder/apps/Internet/Netscapemessenger.desktop b/kappfinder/apps/Internet/Netscapemessenger.desktop new file mode 100644 index 000000000..bea707b46 --- /dev/null +++ b/kappfinder/apps/Internet/Netscapemessenger.desktop @@ -0,0 +1,120 @@ +[Desktop Entry] +Name=Netscape Messenger +Name[af]=Netscape Boodskapper +Name[bn]=নেটস্কেপ মেসেঞ্জার +Name[br]=Kemennader Netscape +Name[csb]=Netscape Messenger (kùriera pòcztë) +Name[cy]=Negesydd Netscape +Name[eo]=Netskapomesaĝilo +Name[fa]=پیام‌رسان نت‌اسکیپ +Name[gl]=Mensaxeria de Netscape +Name[hi]=नेटस्केप मैसेंजर +Name[is]=Netscape spjallrás +Name[ja]=Netscape メッセンジャー +Name[ka]=Netscape შემმტყობინებელი +Name[km]=កម្មវិធី​ផ្ញើសារ Netscape +Name[ko]=넷스케이프 메신저 +Name[lv]=Netscape Messendžers +Name[mn]=Нэтскафе Messenger +Name[ne]=नेटस्केप म्यासेन्जर +Name[nso]=Morongwa wa Netscape +Name[pa]=ਨੈੱਟਸਕੇਪ ਸੁਨੇਹਾਦਾਰ +Name[pl]=Netscape +Name[rw]=Intumwa ya Netscape +Name[ss]=Sitfunywa se Netscape +Name[ta]=நெட்ஸ்கேப் தகவல் அளிப்பான் +Name[te]=నెట్ స్కేప్ మెసేంజర్ +Name[tg]=Иттилооти Netscape +Name[ven]=Thunwa ya Netscape +Name[vi]=Nhắn tin nhanh Netscape +Name[wa]=Messaedjreye Netscape +Name[xh]=Umthunywa we Netscape +Name[zh_TW]=網景傳訊者 +Name[zu]=Isithunywa se-Netscape +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +Exec=netscape -messenger +Terminal=false +Icon=communicator_mail +Type=Application diff --git a/kappfinder/apps/Internet/Nmapfe.desktop b/kappfinder/apps/Internet/Nmapfe.desktop new file mode 100644 index 000000000..5c0ca7bfe --- /dev/null +++ b/kappfinder/apps/Internet/Nmapfe.desktop @@ -0,0 +1,87 @@ +[Desktop Entry] +Name=Nmapfe +Name[eo]=Pordesplorilo +Name[hi]=एन-मैफे +Name[te]=ఎన్ మాప్ఎఫ్ఇ +GenericName=Port Scanner +GenericName[af]=Poort Skandeerder +GenericName[ar]=أداة مسح المنافذ +GenericName[az]=Port Axtarıcısı +GenericName[be]=Сканер партоў +GenericName[bg]=Скенер за отворени портове +GenericName[bn]=পোর্ট স্ক্যানার +GenericName[bs]=Skener portova +GenericName[ca]=Escanejador de ports +GenericName[cs]=Skener portů +GenericName[csb]=Skaner pòrtów +GenericName[cy]=Sganiwr Pyrth +GenericName[da]=Portskanner +GenericName[de]=Ports überprüfen +GenericName[el]=Σαρωτής θυρών +GenericName[eo]=Programo por eltrovi malfermitajn pordojn de komputilo +GenericName[es]=Explorador de puertos +GenericName[et]=Portskänner +GenericName[eu]=Ataka eskanerra +GenericName[fa]=پویشگر درگاه +GenericName[fi]=Porttiskanneri +GenericName[fr]=Analyseur de port +GenericName[fy]=Poarteskenner +GenericName[ga]=Scanóir Poirt +GenericName[gl]=Escaneador de Portos +GenericName[he]=סורק יציאות +GenericName[hi]=पोर्ट स्कैनर +GenericName[hr]=Pretraživač portova +GenericName[hu]=Portscanner +GenericName[is]=Gáttarskanni +GenericName[it]=Port scanner +GenericName[ja]=ポートスキャナ +GenericName[ka]=პორტების სკანერი +GenericName[kk]=Порт сканері +GenericName[km]=កម្មវិធី​ស្កេន​ច្រក +GenericName[ko]=포트 스캐너 +GenericName[lo]=ເຄືອ່ງມືສະແກນພັອດ +GenericName[lt]=Prievadų skeneris +GenericName[lv]=Portu Skaneris +GenericName[mk]=Скенер на порти +GenericName[mn]=Порт шалгагч +GenericName[ms]=Pengesan Port +GenericName[nb]=Portskanner +GenericName[nds]=Porten-Aftaster +GenericName[ne]=पोर्ट स्क्यानर +GenericName[nl]=Poortscanner +GenericName[nn]=Portskannar +GenericName[nso]=Sehlodi sa Boemong +GenericName[pa]=ਪੋਰਟ ਸਕੈਨਰ +GenericName[pl]=Skaner portów +GenericName[pt]=Varrimento de Portos +GenericName[pt_BR]=Scanner de Portas +GenericName[ro]=Scanează calculatoare +GenericName[ru]=Сканер портов +GenericName[rw]=Sikaneri Umuyoboro +GenericName[se]=Verrátskánnejeaddji +GenericName[sk]=Skener portov +GenericName[sl]=Pregledovalnik vrat +GenericName[sr]=Порт скенер +GenericName[sr@Latn]=Port skener +GenericName[ss]=Scana sesikhungo +GenericName[sv]=Portavsökare +GenericName[ta]=முனைய வருடி +GenericName[te]=పోర్ట్ స్కేనర్ +GenericName[tg]=Даргоҳи сканер +GenericName[th]=เครื่องมือสแกนพอร์ต +GenericName[tr]=Port Tarayıcı +GenericName[tt]=Port Ezläwçe +GenericName[uk]=Сканер портів +GenericName[uz]=Port skanner +GenericName[uz@cyrillic]=Порт сканнер +GenericName[ven]=Tshisedzi tsha Vhuimazwikepe +GenericName[vi]=Quét Cổng +GenericName[wa]=Poirt di scanrece +GenericName[xh]=Umshicileli Wofako +GenericName[zh_CN]=端口扫描器 +GenericName[zh_TW]=連接埠掃描程式 +GenericName[zu]=Umhloli wesikhumulo +Exec=nmapfe +Terminal=false +Icon=nmap +Type=Application diff --git a/kappfinder/apps/Internet/Pan.desktop b/kappfinder/apps/Internet/Pan.desktop new file mode 100644 index 000000000..091d2fec9 --- /dev/null +++ b/kappfinder/apps/Internet/Pan.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=Pan +Name[bn]=প্যান +Name[eo]=Forumilo +Name[hi]=पैन +Name[ne]=प्यान +Name[pa]=ਪੈਂਨ +Name[ta]=பான் +Name[te]=పాన్ +Name[ven]=Sedzulusa +Name[zu]=Ipani +GenericName=Usenet News Reader +GenericName[af]=Usenet Nuus Leser +GenericName[ar]=قارئ أخبار Usenet +GenericName[az]=Usenet Xəbər Oxuyucusu +GenericName[be]=Кліент навінаў Usenet +GenericName[bg]=Новинарски групи +GenericName[bn]=ইউসনেট সংবাদ পাঠক +GenericName[br]=Lenner keleier Usenet +GenericName[bs]=Program za čitanje USENet grupa +GenericName[ca]=Lector de grups de notícies Usenet +GenericName[cs]=Klient pro čtení diskusních skupin +GenericName[csb]=Czëtôrz diskùsjowëch karnów +GenericName[cy]=Darllenydd Newyddion Usenet +GenericName[da]=Usenet-nyhedslæser +GenericName[de]=Usenet-News lesen und schreiben +GenericName[el]=Αναγνώστης νέων Usenet +GenericName[eo]=Programo por legi kaj afiŝi en diskutforumoj +GenericName[es]=Lector de noticias de Usenet +GenericName[et]=Uudisegruppide lugemine +GenericName[eu]=Usenet berri irakurgailua +GenericName[fa]=خوانندۀ اخبار یوزنت +GenericName[fi]=Uutisryhmien lukuohjelma +GenericName[fr]=Lecteur de forums Usenet +GenericName[fy]=Usenet-nijslêzer +GenericName[ga]=Léitheoir Nuachta Usenet +GenericName[gl]=Lector de Novas Usenet +GenericName[he]=קורא חדשות Usenet +GenericName[hi]=यूजनेट समाचार वाचक +GenericName[hr]=Čitač grupa novosti +GenericName[hu]=Hírolvasó +GenericName[is]=Tól til að lesa Usenet ráðstefnur +GenericName[it]=Lettore news Usenet +GenericName[ja]=Usenet ニュースリーダー +GenericName[ka]=ახალიამბების საკითხავი პროგრამა +GenericName[kk]=Usenet жаңалықтарды оқу +GenericName[km]=កម្មវិធី​អាន​ព័ត៌មាន​បណ្ដាញ​អ្នក​ប្រើ +GenericName[ko]=유즈넷 뉴스 리더 +GenericName[lo]=ເຄື່ອງມືອ່ານຂ່າວ +GenericName[lt]=Usenet naujienų skaityklė +GenericName[lv]=Usenet Vēstu Lasītājs +GenericName[mk]=Читач на вести на Usenet +GenericName[mn]=Usenet-н мэдээ унших +GenericName[ms]=Pembaca Berita Usenet +GenericName[mt]=Qarrej tal-aħbarijiet (news) +GenericName[nb]=Diskusjonsgruppeleser +GenericName[nds]=Kieker för Usenet-Narichten +GenericName[ne]=युजनेट समाचार वाचक +GenericName[nl]=Usenet-nieuwslezer +GenericName[nn]=Diskusjonsgruppelesar +GenericName[nso]=Mmadi wa Ditaba tsa Usenet +GenericName[pa]=Usenet ਖ਼ਬਰੀ +GenericName[pl]=Czytnik grup dyskusyjnych +GenericName[pt]=Leitor de Notícias da Usenet +GenericName[pt_BR]=Leitor de Notícias Usenet +GenericName[ro]=Cititor de știri USENET +GenericName[ru]=Программа для чтения новостей +GenericName[rw]=Musoma Makuru Usenet +GenericName[se]=Sáhkajoavkologan +GenericName[sk]=Klient pre News +GenericName[sl]=Bralnik novic Usenet +GenericName[sr]=Читач вести +GenericName[sr@Latn]=Čitač vesti +GenericName[ss]=Sifundzi setindzaba te Usenet +GenericName[sv]=Diskussionsgruppsläsare +GenericName[ta]=வலைஉபயோகி செய்திகள் படிப்பவர் +GenericName[te]=యూజ్ నెట్ వార్తలను చదివే కార్యక్రమం +GenericName[tg]=Хонандаи ахбори usenet +GenericName[th]=โปรแกรมอ่านข่าวของ Usenet +GenericName[tr]=Usenet Haber Okuyucu +GenericName[tt]=Yañalıq Uqu öçen +GenericName[uk]=Програма перегляду новин Usenet +GenericName[uz]=Usenet yangiliklarini oʻqish dasturi +GenericName[uz@cyrillic]=Usenet янгиликларини ўқиш дастури +GenericName[ven]=Muvhali wa Mafhungo a Usenet +GenericName[vi]=Trình đọc Tin Usenet +GenericName[wa]=Lijheu d' copinreyes (usenet) +GenericName[xh]=Umfundi Weendaba we Usenet +GenericName[zh_CN]=新闻阅读程序 +GenericName[zh_TW]=新聞群組閱讀程式 +GenericName[zu]=Umfundi wezindaba zokusebenza kwe-net +Exec=pan +Terminal=false +Icon=pan +Type=Application diff --git a/kappfinder/apps/Internet/Sylpheed.desktop b/kappfinder/apps/Internet/Sylpheed.desktop new file mode 100644 index 000000000..5a1a699af --- /dev/null +++ b/kappfinder/apps/Internet/Sylpheed.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=Sylpheed +Name[af]=Sylfeed +Name[eo]=Silfedo +Name[hi]=सिलफीड +Name[ne]=साइलफिड +Name[pa]=ਸ਼ੀਲਫੀਡ +Name[te]=సిల్ఫీడ్ +Name[th]=Sylpheed (โปรแกรมรับส่งอีเมล) +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +Exec=sylpheed +Terminal=false +Icon=sylpheed +Type=Application diff --git a/kappfinder/apps/Internet/Terminal/Links.desktop b/kappfinder/apps/Internet/Terminal/Links.desktop new file mode 100644 index 000000000..33f7c18c7 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/Links.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +Name=Links +Name[af]=Skakel +Name[az]=Körpülər +Name[eo]=Ligiloj +Name[eu]=Estekak +Name[fa]=پیوندها +Name[ga]=Naisc +Name[hi]=लिंक्स +Name[km]=តំណ +Name[lv]=Saite +Name[ne]=लिङ्क +Name[nso]=Dikgokaganyi +Name[pa]=ਸਬੰਧ +Name[rw]=Amahuza +Name[ss]=Luchumano +Name[ta]=இணைப்புகள் +Name[te]=లింక్స్ +Name[th]=Links (เว็บบราวเซอร์แบบเท็กซ์) +Name[ven]=Vhukwamani +Name[vi]=Liên kết +Name[xh]=Amakhonkco +Name[zu]=Izixhumanisi +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +Exec=links +Terminal=true +Icon=links +Type=Application diff --git a/kappfinder/apps/Internet/Terminal/Lynx.desktop b/kappfinder/apps/Internet/Terminal/Lynx.desktop new file mode 100644 index 000000000..8071aad40 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/Lynx.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Lynx +Name[eo]=Linko +Name[hi]=लायनक्स +Name[pa]=ਲਨੈਕਸ +Name[te]=ల్యింక్స్ +Name[th]=Lynx (เว็บบราวเซอร์แบบเท็กซ์) +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +Exec=lynx +Terminal=true +Icon=lynx +Type=Application +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/apps/Internet/Terminal/Makefile.am b/kappfinder/apps/Internet/Terminal/Makefile.am new file mode 100644 index 000000000..9a3f81c06 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/Makefile.am @@ -0,0 +1,7 @@ +kappfinder_internet_terminal_data_DATA = mutt.desktop ncftp.desktop pine.desktop lftp.desktop \ + Links.desktop Lynx.desktop w3m.desktop slrn.desktop silc.desktop \ + btdownloadcurses.desktop + +kappfinder_internet_terminal_datadir = $(kde_datadir)/kappfinder/apps/Internet/Terminal + +EXTRA_DIST = $(kappfinder_internet_terminal_data_DATA) diff --git a/kappfinder/apps/Internet/Terminal/btdownloadcurses.desktop b/kappfinder/apps/Internet/Terminal/btdownloadcurses.desktop new file mode 100644 index 000000000..f44293337 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/btdownloadcurses.desktop @@ -0,0 +1,106 @@ +[Desktop Entry] +Exec=btdownloadcurses.py +GenericName=BitTorrent GUI +GenericName[ar]=واجهة المستخدم الرسومية لِــ BitTorrent +GenericName[az]=BitTorrent İAÜ +GenericName[be]=Графічны кліент BitTorrent +GenericName[bg]=ГПИ за BitTorrent +GenericName[bn]=বিট-টরেন্ট গুই +GenericName[ca]=IGU per a BitTorrent +GenericName[csb]=Graficzny interfejs dlô BitTorrent +GenericName[cy]=Rhyngwyneb Graffegol (GUI) BitTorrent +GenericName[de]=BitTorrent-Oberfläche +GenericName[fa]=ونک BitTorrent +GenericName[fi]=BitTorrent-käyttöliittymä +GenericName[fr]=Interface graphique de BitTorrent +GenericName[fy]=Ynterface foar BitTorrent +GenericName[ga]=Comhéadan Grafach BitTorrent +GenericName[he]=ממשק גרפי ל־BitTorrent +GenericName[hi]=बिट टोरेंट जीयूआई +GenericName[hu]=BitTorrent-felület +GenericName[is]=BitTorrent viðmót +GenericName[it]=GUI per BitTorrent +GenericName[ka]=გრაფიკული BitTorrent +GenericName[kk]=BitTorrent графикалық интерфейс +GenericName[ko]=비트토렌트 GUI +GenericName[lt]=BitTorrent GVS +GenericName[ms]=GUI BitTorrent +GenericName[mt]=Interfaċċja grafika għal BitTorrent +GenericName[nb]=Grensesnitt for BitTorrent +GenericName[nds]=Graafsche Böversiet för BitTorrent +GenericName[ne]=बिट टोरेन्ट जी यू आई +GenericName[nl]=Interface voor BitTorrent +GenericName[nn]=BitTorrent-grensesnitt +GenericName[pa]=ਬਿੱਟੋਓਰਿਨਟ GUI +GenericName[pl]=Interfejs graficzny do BitTorrent +GenericName[pt]=Interface BitTorrent +GenericName[pt_BR]=Interface do BitTorrent +GenericName[ro]=Interfață grafică BitTorrent +GenericName[ru]=Графический интерфейс BitTorrent +GenericName[se]=BitTorrent-lákta +GenericName[sk]=Rozhranie BitTorrent +GenericName[sv]=Grafiskt gränssnitt för BitTorrent +GenericName[ta]=பிட்டார்ரென்ட் GUI +GenericName[te]=బిట్ టొరెంట్ జియూఐ +GenericName[tg]=BitTorrent-ро ба графики корбар +GenericName[th]=GUI ของบิตทอร์เรนท์ +GenericName[tr]=BitTorrent Arayüzü +GenericName[tt]=BitTorrent öçen Yözara +GenericName[uz]=BitTorrent uchun grafik interfeys +GenericName[uz@cyrillic]=BitTorrent учун график интерфейс +GenericName[vi]=Giao diện BitTorrent +GenericName[wa]=Eterface grafike po BitTorrent +GenericName[zh_TW]=BitTorrent 圖型使用者介面 +Icon=xapp +InitialPreference=1 +MimeType=application/x-bittorrent +Name=BitTorrent Python Curses GUI +Name[be]=Графічны кліент BitTorrent на мове Python +Name[bn]=বিট-টরেন্ট পাইথন কার্সেস গুই +Name[ca]=IGU per a BitTorrent en Python Curses +Name[csb]=Graficzny interfejs dlô BitTorren Pyton Curses +Name[cy]=Rhyngwyneb Graffegol (GIU) Curses Python BitTorrent +Name[de]=BitTorrent-PythonCurses-Oberfläche +Name[eo]=BitTorrent Pitona Curses GUI +Name[et]=BitTorrent Python Curses +Name[fa]=ونک BitTorrent Python Curses +Name[fi]=BitTorrentin Python Curses -käyttöliittymä +Name[fr]=Interface graphique Curses de BitTorrent écrite en Python +Name[ga]=Comhéadan Curses BitTorrent Python +Name[gl]=GUI para BitTorrent en Python Curses +Name[he]=ממשק טקסטואלי מבוסס Python Curses ל־BitTorrent +Name[hi]=बिट टोरेंट पायथन कर्सेस जीयूआई +Name[hr]=BitTorrent Python GUI kurs +Name[hu]=BitTorrent Python Curses grafikus felület +Name[is]=BitTorrent viðmót í Python +Name[it]=GUI in Python e curses per BitTorrent +Name[ka]=BitTorrent–ის ინტერფეისი python/curses–ზე +Name[kk]=Python Curses-те жазылған BitTorrent графикалық интерфейсі +Name[ko]=비트토렌트 Python Curses GUI +Name[lt]=BitTorrent Python Curses grafinė naudotojo sąsaja +Name[ms]=GUI Curses Python BitTorrent +Name[nb]=Grensesnitt for «BitTorrent Python Curses» +Name[ne]=बिट टोरेन्ट पाइथोन कर्स जी यू आई +Name[pa]=ਬਿੱਟਇਓਨਟ ਪਾਈਥਨ ਕੂਰਸ GUI +Name[pl]=Interfejs graficzny do BitTorrent +Name[pt]=Interface Curses para o BitTorrent em Python +Name[pt_BR]=Interface em Python para o BitTorrent +Name[ro]=Interfață Consolă Python BitTorrent +Name[ru]=Интерфейс службы BitTorrent на python/curses +Name[sk]=Rozhranie BitTorrent Python Curses +Name[sl]=BitTorrent Python z vmesnikom Curses +Name[sv]=BitTorrent Python Curses grafiskt gränssnitt +Name[ta]=பிட்டார்ரென்ட் பைதான் அம்புக்குறிகள் GUI +Name[te]=బిట్ టొరెంట్ పైతాన్ కర్సెస్ జియూఐ +Name[tg]=BitTorrent Python Curses-ро ба графики корбар +Name[th]=GUI ของบิตทอร์เรนต์ แบบใช้ไพธอนเคิร์ส +Name[tr]=BitTorrent Python Grafiksel Arayüzü +Name[tt]=BitTorrent öçen Yözara (Python/Curses asılında) +Name[uz]=BitTorrent uchun Python Curses grafik interfeys +Name[uz@cyrillic]=BitTorrent учун Python Curses график интерфейс +Name[vi]=Con trỏ Giao diện Python BitTorrent +Name[wa]=Eterface grafike e python po BitTorrent +Name[zh_TW]=BitTorrent Python Curses 圖型使用者介面 +ServiceTypes= +Terminal=true +Type=Application diff --git a/kappfinder/apps/Internet/Terminal/lftp.desktop b/kappfinder/apps/Internet/Terminal/lftp.desktop new file mode 100644 index 000000000..86ad01aca --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/lftp.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +GenericName=FTP Client +GenericName[af]=FTP Kliënt +GenericName[ar]=زبون ميفاق نقل الملفات FTP +GenericName[az]=FTP Proqramı +GenericName[be]=Кліент FTP +GenericName[bg]=FTP клиент +GenericName[bn]=এফ-টি-পি ক্লায়েন্ট +GenericName[br]=Kliant FTP +GenericName[bs]=FTP klijent +GenericName[ca]=Client FTP +GenericName[cs]=FTP klient +GenericName[csb]=Klient FTP +GenericName[cy]=Dibynnydd FTP +GenericName[da]=FTP-klient +GenericName[de]=FTP-Programm +GenericName[el]=Πελάτης FTP +GenericName[eo]=FTP-kliento +GenericName[es]=Cliente FTP +GenericName[et]=FTP klient +GenericName[eu]=FTP bezeroa +GenericName[fa]=کارخواه قام +GenericName[fi]=FTP-asiakasohjelma +GenericName[fr]=Un client FTP +GenericName[fy]=FTP-klant +GenericName[ga]=Cliant FTP +GenericName[gl]=Cliente FTP +GenericName[he]=תוכנית FTP +GenericName[hi]=एफटीपी क्लाएंट +GenericName[hr]=FTP klijent +GenericName[hu]=FTP-kliens +GenericName[id]=Klien FTP +GenericName[is]=FTP forrit +GenericName[it]=Client FTP +GenericName[ja]=FTP クライアント +GenericName[ka]=FTP კლიენტი +GenericName[kk]=FTP клиенті +GenericName[km]=កម្មវិធី FTP +GenericName[ko]=FTP 클라이언트 +GenericName[lo]=ໄຄແອັນFTP +GenericName[lt]=FTP klientas +GenericName[lv]=FTP Klients +GenericName[mk]=Клиент за FTP +GenericName[mn]=FTP-програм +GenericName[ms]=Klien FTP +GenericName[mt]=Klijent FTP +GenericName[nb]=FTP-klient +GenericName[nds]=FTP-Programm +GenericName[ne]=FTP ग्राहक +GenericName[nl]=FTP-client +GenericName[nn]=FTP-klient +GenericName[nso]=Moreki wa FTP +GenericName[pa]=FTP ਕਲਾਂਇਟ +GenericName[pl]=Klient FTP +GenericName[pt]=Cliente de FTP +GenericName[pt_BR]=Cliente FTP +GenericName[ro]=Client FTP +GenericName[ru]=Клиент FTP +GenericName[rw]=Umukiriya FTP +GenericName[se]=FTP-klienta +GenericName[sk]=FTP klient +GenericName[sl]=Odjemnik za FTP +GenericName[sr]=FTP клијент +GenericName[sr@Latn]=FTP klijent +GenericName[ss]=Likhasimende le FTP +GenericName[sv]=FTP-klient +GenericName[ta]=FTP உறுப்பினர் +GenericName[te]=ఎఫ్ టి పి క్లైంట్ +GenericName[tg]=Коргири FTP +GenericName[th]=ไคลเอนต์ FTP +GenericName[tr]=FTP İstemcisi +GenericName[tt]=FTP Klient +GenericName[uk]=Клієнт FTP +GenericName[uz]=FTP klienti +GenericName[uz@cyrillic]=FTP клиенти +GenericName[ven]=Mushumisani wa FTP +GenericName[vi]=Trình FTP +GenericName[wa]=Cliyint FTP +GenericName[xh]=Umxhasi we FTP +GenericName[zh_CN]=FTP 客户端程序 +GenericName[zh_TW]=FTP 客戶端程式 +GenericName[zu]=Umxhasi we-FTP +Exec=lftp %u +Icon=konsole +Name=Lftp +Name[eo]=L-FTP +Name[fr]=LFTP +Name[hi]=एलएफटीपी +Name[te]=ఎల్ ఎఫ్ టి పి +Path= +Terminal=true +Type=Application diff --git a/kappfinder/apps/Internet/Terminal/mutt.desktop b/kappfinder/apps/Internet/Terminal/mutt.desktop new file mode 100644 index 000000000..87b721fc1 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/mutt.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Exec=mutt +Icon=email +Type=Application +Name=Mutt +Name[bn]=মাট +Name[eo]=Retpoŝtilo Mutt +Name[hi]=मट +Name[ne]=मट +Name[ta]=மட் +Name[te]=మట్ట్ +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +Terminal=true diff --git a/kappfinder/apps/Internet/Terminal/ncftp.desktop b/kappfinder/apps/Internet/Terminal/ncftp.desktop new file mode 100644 index 000000000..06f406d2a --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/ncftp.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=NcFTP +Name[eo]=NcFtp +Name[hi]=एनसीएफटीपी +Name[hu]=ncFTP +Name[id]=Nc FTP +Name[lo]=Ncftp +Name[te]=ఎన్ సి ఎఫ్ టి పి +GenericName=FTP Client +GenericName[af]=FTP Kliënt +GenericName[ar]=زبون ميفاق نقل الملفات FTP +GenericName[az]=FTP Proqramı +GenericName[be]=Кліент FTP +GenericName[bg]=FTP клиент +GenericName[bn]=এফ-টি-পি ক্লায়েন্ট +GenericName[br]=Kliant FTP +GenericName[bs]=FTP klijent +GenericName[ca]=Client FTP +GenericName[cs]=FTP klient +GenericName[csb]=Klient FTP +GenericName[cy]=Dibynnydd FTP +GenericName[da]=FTP-klient +GenericName[de]=FTP-Programm +GenericName[el]=Πελάτης FTP +GenericName[eo]=FTP-kliento +GenericName[es]=Cliente FTP +GenericName[et]=FTP klient +GenericName[eu]=FTP bezeroa +GenericName[fa]=کارخواه قام +GenericName[fi]=FTP-asiakasohjelma +GenericName[fr]=Un client FTP +GenericName[fy]=FTP-klant +GenericName[ga]=Cliant FTP +GenericName[gl]=Cliente FTP +GenericName[he]=תוכנית FTP +GenericName[hi]=एफटीपी क्लाएंट +GenericName[hr]=FTP klijent +GenericName[hu]=FTP-kliens +GenericName[id]=Klien FTP +GenericName[is]=FTP forrit +GenericName[it]=Client FTP +GenericName[ja]=FTP クライアント +GenericName[ka]=FTP კლიენტი +GenericName[kk]=FTP клиенті +GenericName[km]=កម្មវិធី FTP +GenericName[ko]=FTP 클라이언트 +GenericName[lo]=ໄຄແອັນFTP +GenericName[lt]=FTP klientas +GenericName[lv]=FTP Klients +GenericName[mk]=Клиент за FTP +GenericName[mn]=FTP-програм +GenericName[ms]=Klien FTP +GenericName[mt]=Klijent FTP +GenericName[nb]=FTP-klient +GenericName[nds]=FTP-Programm +GenericName[ne]=FTP ग्राहक +GenericName[nl]=FTP-client +GenericName[nn]=FTP-klient +GenericName[nso]=Moreki wa FTP +GenericName[pa]=FTP ਕਲਾਂਇਟ +GenericName[pl]=Klient FTP +GenericName[pt]=Cliente de FTP +GenericName[pt_BR]=Cliente FTP +GenericName[ro]=Client FTP +GenericName[ru]=Клиент FTP +GenericName[rw]=Umukiriya FTP +GenericName[se]=FTP-klienta +GenericName[sk]=FTP klient +GenericName[sl]=Odjemnik za FTP +GenericName[sr]=FTP клијент +GenericName[sr@Latn]=FTP klijent +GenericName[ss]=Likhasimende le FTP +GenericName[sv]=FTP-klient +GenericName[ta]=FTP உறுப்பினர் +GenericName[te]=ఎఫ్ టి పి క్లైంట్ +GenericName[tg]=Коргири FTP +GenericName[th]=ไคลเอนต์ FTP +GenericName[tr]=FTP İstemcisi +GenericName[tt]=FTP Klient +GenericName[uk]=Клієнт FTP +GenericName[uz]=FTP klienti +GenericName[uz@cyrillic]=FTP клиенти +GenericName[ven]=Mushumisani wa FTP +GenericName[vi]=Trình FTP +GenericName[wa]=Cliyint FTP +GenericName[xh]=Umxhasi we FTP +GenericName[zh_CN]=FTP 客户端程序 +GenericName[zh_TW]=FTP 客戶端程式 +GenericName[zu]=Umxhasi we-FTP +MimeType= +Exec=ncftp +Icon=misc +Path= +Type=Application +Terminal=true diff --git a/kappfinder/apps/Internet/Terminal/pine.desktop b/kappfinder/apps/Internet/Terminal/pine.desktop new file mode 100644 index 000000000..2d9bf07c9 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/pine.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Exec=pine +Icon=email +Type=Application +Name=Pine +Name[bn]=পাইন +Name[eo]=Pino +Name[es]=PINE +Name[hi]=पाइन +Name[ne]=पाइन +Name[pa]=ਪਾਇਨ +Name[ss]=Phayiphi +Name[ta]=பைன் +Name[te]=పైన్ +Name[tg]=Поён +Name[vi]=Trình thư Pine +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +Terminal=true diff --git a/kappfinder/apps/Internet/Terminal/silc.desktop b/kappfinder/apps/Internet/Terminal/silc.desktop new file mode 100644 index 000000000..3b173f77a --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/silc.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +GenericName=SILC Client +GenericName[af]=SILC Kliënt +GenericName[ar]=زبون SILC +GenericName[az]=SILC Alıcısı +GenericName[be]=Кліент SILC +GenericName[bg]=SILC клиент +GenericName[bn]=সিল্ক ক্লায়েন্ট +GenericName[br]=Kliant SILC +GenericName[bs]=SILC klijent +GenericName[ca]=Client SILC +GenericName[cs]=SILC klient +GenericName[csb]=Klient SILC +GenericName[cy]=Dibynnydd SILC +GenericName[da]=SILC-Klient +GenericName[de]=SILC-Programm +GenericName[el]=Πελάτης SILC +GenericName[eo]=SILC-kliento +GenericName[es]=Cliente SILC +GenericName[et]=SILC klient +GenericName[eu]=SILC bezeroa +GenericName[fa]=کارخواه SILC +GenericName[fi]=SILC-asiakasohjelma +GenericName[fr]=Client SILC +GenericName[fy]=SILC-klant +GenericName[ga]=Cliant SILC +GenericName[gl]=Cliente de SILC +GenericName[he]=לקוח SILC +GenericName[hi]=एसआईएलसी क्लाएंट +GenericName[hr]=SILC klijent +GenericName[hu]=SILC-kliens +GenericName[is]=SILC Biðlari +GenericName[it]=Client SILC +GenericName[ja]=SILC クライアント +GenericName[ka]=SILC კლიენტი +GenericName[kk]=SILC клиенті +GenericName[km]=កម្មវិធី SILC +GenericName[ko]=SILC 클라이언트 +GenericName[lo]=ໄຄແອັນ์ ICQ +GenericName[lt]=SILC klientas +GenericName[lv]=SILC Klients +GenericName[mk]=Клиент за SILC +GenericName[mn]=SILC-Програм +GenericName[ms]=Klien SILC +GenericName[mt]=Klijent SILC +GenericName[nb]=SILC-klient +GenericName[nds]=Client för SILC +GenericName[ne]=SILC ग्राहक +GenericName[nl]=SILC-client +GenericName[nn]=SILC-klient +GenericName[nso]=Moreki wa SILC +GenericName[pa]=SILC ਕਲਾਂਇਟ +GenericName[pl]=Klient SILC +GenericName[pt]=Cliente de SILC +GenericName[pt_BR]=Cliente SILC +GenericName[ro]=Client SILC +GenericName[ru]=Клиент SILC +GenericName[rw]=Umukiriya SILC +GenericName[se]=SILC-klienta +GenericName[sk]=SILC klient +GenericName[sl]=Odjemnik za Cilc +GenericName[sr]=SILC клијент +GenericName[sr@Latn]=SILC klijent +GenericName[ss]=Likhasimende le SILC +GenericName[sv]=SILC-klient +GenericName[ta]=SILC உறுப்ப்பினர் +GenericName[te]=ఎస్ ఎల్ ఐసి క్లైంట్ +GenericName[th]=ไคลเอนต์ SILC +GenericName[tr]=SILC İstemcisi +GenericName[tt]=SILC Klient +GenericName[uk]=Клієнт SILC +GenericName[uz]=SILC klienti +GenericName[uz@cyrillic]=SILC клиенти +GenericName[ven]=Mushumisani wa SILC +GenericName[vi]=Trình chát SILC +GenericName[wa]=Cliyint SILC +GenericName[xh]=Umxhasi we SILC +GenericName[zh_CN]=SILC 客户程序 +GenericName[zh_TW]=SILC 客戶端程式 +GenericName[zu]=Umxhasi we-SILC +Exec=silc %u +Icon=konsole +Name=Silc +Name[bn]=সিল্ক +Name[de]=SILC +Name[hi]=सिल्क +Name[lo]=ນຳ້ວົນ +Name[mn]=SILC +Name[ta]=சில்க் +Name[te]=ఎస్ ఎల్ ఐసి +Terminal=true +Type=Application diff --git a/kappfinder/apps/Internet/Terminal/slrn.desktop b/kappfinder/apps/Internet/Terminal/slrn.desktop new file mode 100644 index 000000000..c9bb598e1 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/slrn.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Exec=slrn +Icon=slrn +Type=Application +Name=Slrn +Name[eo]=Slrn-novaĵprezentilo +Name[hi]=एसएलआरएन +Name[lo]=ຫນ້າຈໍ +Name[te]=ఎస్ ఎల్ ఆర్ ఎన్ +Name[th]=Sirn +GenericName=News Reader +GenericName[af]=Nuus Leser +GenericName[ar]=قارئ الأخبار +GenericName[az]=Xəbərlər Oxuyucusu +GenericName[be]=Чытач навінаў +GenericName[bg]=Четене на новини +GenericName[bn]=নিউস রিডার +GenericName[br]=Lenner keleier +GenericName[bs]=Program za čitanje USENet grupa +GenericName[ca]=Lector de grups de notícies +GenericName[cs]=Klient pro čtení diskusních skupin +GenericName[csb]=Czëtôrz nowinów z diskùsjowëch karnów +GenericName[cy]=Darllenydd Newyddion +GenericName[da]=Nyhedslæser +GenericName[de]=Lesen und Schreiben von Usenet-News +GenericName[el]=Αναγνώστης νέων +GenericName[eo]=Legilo por diskutrondoj +GenericName[es]=Lector de noticias +GenericName[et]=Uudisegruppide lugemise rakendus +GenericName[eu]=Berri irakurgailua +GenericName[fa]=خوانندۀ اخبار +GenericName[fi]=Uutisryhmien lukuohjelma +GenericName[fr]=Lecteur de forums de discussion +GenericName[fy]=Nijslêzer +GenericName[ga]=Léitheoir Nuachta +GenericName[gl]=Leitor de Notícias +GenericName[he]=קורא חדשות +GenericName[hi]=समाचार वाचक +GenericName[hr]=Čitač grupa novosti +GenericName[hu]=Hírolvasó +GenericName[id]=Pembaca Berita +GenericName[is]=Tól til að lesa Usenet ráðstefnur +GenericName[it]=Lettore newsgroup +GenericName[ja]=ニュースリーダー +GenericName[kk]=Жаңалық оқу құралы +GenericName[km]=កម្មវិធី​អាន​ព័ត៌មាន +GenericName[ko]=유즈넷 뉴스 리더 +GenericName[lo]=ເຄືອ່ງມືອ່ານຂ່າວ +GenericName[lt]=Naujienų skaityklė +GenericName[lv]=Ziņu Lasītājs +GenericName[mk]=Читач на вести +GenericName[mn]=Usenet-н мэдээ унших ба бичих +GenericName[ms]=Pembaca Berita +GenericName[mt]=Qarrej tal-aħbarijiet (news) +GenericName[nb]=Diskusjonsgruppeleser +GenericName[nds]=Kieker för Narichten +GenericName[ne]=समाचार वाचक +GenericName[nl]=Nieuwslezer +GenericName[nn]=Diskusjonsgruppelesar +GenericName[nso]=Mmadi wa Ditaba +GenericName[oc]=Lector de grups de noticies +GenericName[pa]=ਖ਼ਬਰੀਂ +GenericName[pl]=Program do obsługi grup dyskusyjnych +GenericName[pt]=Leitor de Notícias +GenericName[pt_BR]=Leitor de Notícias +GenericName[ro]=Cititor de știri USENET +GenericName[ru]=Программа для чтения новостей +GenericName[rw]=Musoma Amakuru +GenericName[se]=Sáhkajoavkologan +GenericName[sk]=Klient pre News +GenericName[sl]=Bralnik novic +GenericName[sr]=Читач вести +GenericName[sr@Latn]=Čitač vesti +GenericName[ss]=Sifundzi setindzaba +GenericName[sv]=Diskussionsgruppsläsare +GenericName[ta]=செய்தி வாசிப்பவர் +GenericName[te]=వార్తలను చదివే కార్యక్రమం +GenericName[tg]=Хонандаи ахбор +GenericName[th]=โปรแกรมอ่านข่าว +GenericName[tr]=Haber Okuyucu +GenericName[tt]=Yañalıq Uquçı +GenericName[uk]=Програма для перегляду новин +GenericName[uz]=Yangiliklar oʻquvchi +GenericName[uz@cyrillic]=Янгиликлар ўқувчи +GenericName[ven]=Muvhali wa mafhungo +GenericName[vi]=Trình đọc Tin +GenericName[wa]=Lijheu d' copinreyes usenet +GenericName[xh]=Umfundi Weendaba +GenericName[zh_CN]=新闻阅读程序 +GenericName[zh_TW]=新聞閱讀程式 +GenericName[zu]=Umfundi wezindaba +Terminal=true diff --git a/kappfinder/apps/Internet/Terminal/w3m.desktop b/kappfinder/apps/Internet/Terminal/w3m.desktop new file mode 100644 index 000000000..d4eea4489 --- /dev/null +++ b/kappfinder/apps/Internet/Terminal/w3m.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Name=w3m +Name[bn]=ডাব্লিউ-থ্রী-এম +Name[br]=w3c +Name[hi]=डब्लयू3एम +Name[lo]=ຫນອນເຜິ້ງ +Name[sv]=W3m +Name[te]=డబ్ల్యూ3ఎం +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +Exec=w3m www.kde.org +Terminal=true +Icon=lynx +Type=Application +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/apps/Internet/arena.desktop b/kappfinder/apps/Internet/arena.desktop new file mode 100644 index 000000000..f245e2732 --- /dev/null +++ b/kappfinder/apps/Internet/arena.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +Exec=arena +Icon=xapp +Type=Application +Name=Arena +Name[bn]=অ্যারিনা +Name[hi]=अरीना +Name[lv]=Arēna +Name[ne]=एरिना +Name[pa]=ਅਰੀਨਾ +Name[sk]=Aréna +Name[sr]=Арена +Name[ss]=Indzawo levulekile +Name[ta]=அரினா +Name[te]=ఎరీనా +Name[ven]=Luvhande +Name[vi]=Vũ đài +Name[xh]=Umbindi webala lokudlala +Name[zu]=Inkundla +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web diff --git a/kappfinder/apps/Internet/balsa.desktop b/kappfinder/apps/Internet/balsa.desktop new file mode 100644 index 000000000..b6c26cf25 --- /dev/null +++ b/kappfinder/apps/Internet/balsa.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=Balsa +Name[bn]=বালসা +Name[hi]=बाल्सा +Name[lo]=ບາຊາ +Name[ne]=बाल्सा +Name[pa]=ਬਾਲਸਾ +Name[rw]=Balisa +Name[ta]=பல்சா +Name[te]=బాల్సా +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +Exec=balsa +Terminal=false +Icon=balsa +Type=Application diff --git a/kappfinder/apps/Internet/btdownloadgui.desktop b/kappfinder/apps/Internet/btdownloadgui.desktop new file mode 100644 index 000000000..66bff959c --- /dev/null +++ b/kappfinder/apps/Internet/btdownloadgui.desktop @@ -0,0 +1,105 @@ +[Desktop Entry] +Exec=btdownloadgui.py +GenericName=BitTorrent GUI +GenericName[ar]=واجهة المستخدم الرسومية لِــ BitTorrent +GenericName[az]=BitTorrent İAÜ +GenericName[be]=Графічны кліент BitTorrent +GenericName[bg]=ГПИ за BitTorrent +GenericName[bn]=বিট-টরেন্ট গুই +GenericName[ca]=IGU per a BitTorrent +GenericName[csb]=Graficzny interfejs dlô BitTorrent +GenericName[cy]=Rhyngwyneb Graffegol (GUI) BitTorrent +GenericName[de]=BitTorrent-Oberfläche +GenericName[fa]=ونک BitTorrent +GenericName[fi]=BitTorrent-käyttöliittymä +GenericName[fr]=Interface graphique de BitTorrent +GenericName[fy]=Ynterface foar BitTorrent +GenericName[ga]=Comhéadan Grafach BitTorrent +GenericName[he]=ממשק גרפי ל־BitTorrent +GenericName[hi]=बिट टोरेंट जीयूआई +GenericName[hu]=BitTorrent-felület +GenericName[is]=BitTorrent viðmót +GenericName[it]=GUI per BitTorrent +GenericName[ka]=გრაფიკული BitTorrent +GenericName[kk]=BitTorrent графикалық интерфейс +GenericName[ko]=비트토렌트 GUI +GenericName[lt]=BitTorrent GVS +GenericName[ms]=GUI BitTorrent +GenericName[mt]=Interfaċċja grafika għal BitTorrent +GenericName[nb]=Grensesnitt for BitTorrent +GenericName[nds]=Graafsche Böversiet för BitTorrent +GenericName[ne]=बिट टोरेन्ट जी यू आई +GenericName[nl]=Interface voor BitTorrent +GenericName[nn]=BitTorrent-grensesnitt +GenericName[pa]=ਬਿੱਟੋਓਰਿਨਟ GUI +GenericName[pl]=Interfejs graficzny do BitTorrent +GenericName[pt]=Interface BitTorrent +GenericName[pt_BR]=Interface do BitTorrent +GenericName[ro]=Interfață grafică BitTorrent +GenericName[ru]=Графический интерфейс BitTorrent +GenericName[se]=BitTorrent-lákta +GenericName[sk]=Rozhranie BitTorrent +GenericName[sv]=Grafiskt gränssnitt för BitTorrent +GenericName[ta]=பிட்டார்ரென்ட் GUI +GenericName[te]=బిట్ టొరెంట్ జియూఐ +GenericName[tg]=BitTorrent-ро ба графики корбар +GenericName[th]=GUI ของบิตทอร์เรนท์ +GenericName[tr]=BitTorrent Arayüzü +GenericName[tt]=BitTorrent öçen Yözara +GenericName[uz]=BitTorrent uchun grafik interfeys +GenericName[uz@cyrillic]=BitTorrent учун график интерфейс +GenericName[vi]=Giao diện BitTorrent +GenericName[wa]=Eterface grafike po BitTorrent +GenericName[zh_TW]=BitTorrent 圖型使用者介面 +Icon=xapp +InitialPreference=2 +MimeType=application/x-bittorrent +Name=BitTorrent Python wxGTK GUI +Name[be]=Графічны кліент BitTorrent на мове Python для wxGTK +Name[bn]=বিট-টরেন্ট পাইথন wxGTK গুই +Name[ca]=IGU per a BitTorrent en Python wxGTK +Name[csb]=Graficzny interfejs dlô BitTorrent brëkùjący wxGTK +Name[cy]=Rhyngwyneb Graffegol (GIU) wxGTK Python BitTorrent +Name[de]=BitTorrent-Python wxGTK-Oberfläche +Name[eo]=BitTorrent Pitona wxGTK GUI +Name[et]=BitTorrent Python wxGTK +Name[fa]=ونک BitTorrent Python wxGTK +Name[fi]=BitTorrentin Python wxGTK -käyttöliittymä +Name[fr]=Interface graphique wxGTK de BitTorrent écrite en Python +Name[ga]=Comhéadan wxGTK BitTorrent Python +Name[gl]=GUI para BitTorrent en Python wxGTK +Name[he]=ממשק גרפי מבוסס Python wxGTK ל־BitTorrent +Name[hi]=बिट टोरेंट पायथन डब्ल्यूएक्सजीटीके जीयूआई +Name[hu]=BitTorrent Python wxGTK grafikus felület +Name[is]=BitTorrent viðmót í wxGTK +Name[it]=GUI in python e wxGTK per BitTorrent +Name[ka]=გრაფიკული BitTorrent +Name[kk]=Python wxGTK-да жазылған BitTorrent графикалық интерфейсі +Name[ko]=비트토렌트 Python wxGTK GUI +Name[lt]=BitTorrent Python wxGTK grafinė naudotojo sąsaja +Name[ms]=GUI wxGTK Python BitTorrent +Name[nds]=Graafsche BitTorrent Python wxGTK Böversiet +Name[ne]=बिटटोरेन्ट पाइथोन wxGTK GUI +Name[pl]=Interfejs graficzny do BitTorrent używający wxGTK +Name[pt]=Interface wxGTK para o BitTorrent em Python +Name[pt_BR]=Interface em wxGTK Python para o BitTorrent +Name[ro]=Interfață "wxGTK" Python BitTorrent +Name[ru]=Графический интерфейс BitTorrent +Name[sk]=Rozhranie BitTorrent Python wxGTK +Name[sl]=BitTorrent Python z vmesnikom wxGTK +Name[sv]=BitTorrent Python wxGTK grafiskt gränssnitt +Name[ta]=பிட் டொரென்ட் பைதொன wxGTK GUI +Name[te]=బిట్ టొరెంట్ పైతాన్ డబ్ల్యూజిటికె జియూఐ +Name[tg]=Робитаи графикии корбари BitTorrent Python wxGTK +Name[th]=GUI ของบิตทอร์เรนท์ โดยใช้ Python wxGTK +Name[tr]=BitTorrent Python wxGTK Arayüzü +Name[tt]=BitTorrent öçen Yözara (wxGTK asılında) +Name[uk]=Графічний інтерфейс BitTorrent Python wxGTK +Name[uz]=BitTorrent uchun Python wxGTK grafik interfeys +Name[uz@cyrillic]=BitTorrent учун Python wxGTK график интерфейс +Name[vi]=Giao diện wxGTK Python BitTorrent +Name[wa]=Eterface grafike e python wxGTK po BitTorrent +Name[zh_TW]=BitTorrent Python wxGTK 圖型使用者介面 +ServiceTypes= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Internet/coolmail.desktop b/kappfinder/apps/Internet/coolmail.desktop new file mode 100644 index 000000000..b2b841d00 --- /dev/null +++ b/kappfinder/apps/Internet/coolmail.desktop @@ -0,0 +1,101 @@ +[Desktop Entry] +SwallowExec=coolmail +SwallowTitle=coolmail +SwallowTitle[pl]=coolmail +SwallowTitle[sk]=coolmail +SwallowTitle[no]=coolmail +Name=Coolmail +Name[bn]=কুল-মেইল +Name[hi]=कूलमेल +Name[lo]=coolmail +Name[ne]=कुल मेल +Name[pa]=ਕੂਲਮੇਲ +Name[rw]=UbutumwaBworohereje +Name[ta]=கூல்மெயில் +Name[te]=కూల్ మెయిల్ +Name[tg]=Почтаи Cool +Name[ven]=Poso ya Vhudi +Name[zu]=Iposi elipholile +GenericName=Mail Alert +GenericName[af]=Pos Waarskuwing +GenericName[ar]=منبه البريد +GenericName[az]=Poçt Xəbərçisi +GenericName[be]=Нагадванне аб новай пошце +GenericName[bg]=Аларма за поща +GenericName[bn]=চিঠি এসেছে +GenericName[bs]=Obavještavanje o pristigloj pošti +GenericName[ca]=Alerta per al correu +GenericName[cs]=Upozornění na poštu +GenericName[csb]=Wiadło o pòczce +GenericName[cy]=Rhybudd Ebost +GenericName[da]=Postadvarsel +GenericName[de]=E-Mail-Benachrichtigung +GenericName[el]=Ειδοποίηση για mail +GenericName[eo]=Retpoŝtavertilo +GenericName[es]=Alerta de correo +GenericName[et]=Kirjde monitor +GenericName[eu]=Mail jakinarazpena +GenericName[fa]=هشدار نامه +GenericName[fi]=Sähköpostivaroitus +GenericName[fo]=Postkomufráboðan +GenericName[fr]=Surveillance du courrier électronique +GenericName[fy]=E-postnotifikaasje +GenericName[ga]=Fógairt Ríomhphoist +GenericName[gl]=Alerta de Correo +GenericName[he]=הודעה לגבי דואר +GenericName[hi]=डाक सतर्क +GenericName[hr]=Upozoravanje o novom e-pismu +GenericName[hu]=Levélfigyelő +GenericName[is]=Fylgist með pósti +GenericName[it]=Programma per controllare la posta +GenericName[ja]=メールの通知 +GenericName[ka]=ფოსტის განგაში +GenericName[kk]=Келген пошта туралы хабарлау +GenericName[km]=ការជូនដំណឹង​អំពី​សំបុត្រ +GenericName[ko]=메일 알림이 +GenericName[lo]=ແຈ້ງເຕືອນຈົດຫມາຍ +GenericName[lt]=Pašto pranešėjas +GenericName[lv]=Pasta Brīdinājums +GenericName[mk]=Известувач за е-пошта +GenericName[mn]=Э-Захиа-Мэдээлэгч +GenericName[ms]=Amaran Mel +GenericName[mt]=Twissija tal-imejl +GenericName[nb]=E-postvarsel +GenericName[nds]=Nettpost-Alarm +GenericName[ne]=पत्र चेतावनी +GenericName[nl]=E-mailnotificatie +GenericName[nn]=E-postvarsel +GenericName[nso]=Theeletso ya Poso +GenericName[pa]=ਪੱਤਰ ਚੇਤਾਵਨੀ +GenericName[pl]=Powiadamianie o poczcie +GenericName[pt]=Alerta de E-mail +GenericName[pt_BR]=Alerta de Correio +GenericName[ro]=Alertare la email nou +GenericName[ru]=Извещения о новой почте +GenericName[rw]=Iburira ry'Ubutumwa +GenericName[se]=E-boastaávaštus +GenericName[sk]=Upozornenie na poštu +GenericName[sl]=Obvestilo o pošti +GenericName[sr]=Поштански аларм +GenericName[sr@Latn]=Poštanski alarm +GenericName[ss]=Sicwayisi seliposi +GenericName[sv]=E-postunderrättare +GenericName[ta]=அஞ்சல் எச்சரிக்கை +GenericName[tg]=Маълумот диҳии почтаи электроникӣ +GenericName[th]=แจ้งเตือนจดหมาย +GenericName[tr]=Midi Uyarısı +GenericName[tt]=Xat turında Beldergeç +GenericName[uk]=Повідомлення пошти +GenericName[uz]=Yangi xat haqida xabar beruvchi +GenericName[uz@cyrillic]=Янги хат ҳақида хабар берувчи +GenericName[ven]=U sedzesa poso +GenericName[vi]=Thông báo có thư +GenericName[wa]=Abranle pa emile +GenericName[xh]=Ulumkiso Lweposi +GenericName[zh_CN]=邮件提示程序 +GenericName[zh_TW]=郵件提示 +GenericName[zu]=Ukuqwashisa ngeposi +Exec=coolmail +Icon=email +Type=Application +Terminal=false diff --git a/kappfinder/apps/Internet/dc_gui.desktop b/kappfinder/apps/Internet/dc_gui.desktop new file mode 100644 index 000000000..188404a23 --- /dev/null +++ b/kappfinder/apps/Internet/dc_gui.desktop @@ -0,0 +1,114 @@ +[Desktop Entry] +Exec=dc_gui +Icon=xapp +Name=DCTC GUI +Name[be]=Графічны кліент DCTC +Name[bg]=ГПИ за DCTC +Name[bn]=DCTC গুই +Name[br]=Etrefas DCTC +Name[ca]=IGU per a DCTC +Name[csb]=Graficzny interfejs dlô DCTC +Name[de]=DCTC-Oberfläche +Name[es]=Interfaz GUI DCTC +Name[et]=DCTC kasutajaliides +Name[fa]=ونک DCTC +Name[fr]=Interface graphique à DCTC +Name[ga]=Comhéadan Grafach DCTC +Name[gl]= GUI para DCTC +Name[hi]=डीसीटीसी जीयूआई +Name[hu]=DCTC grafikus felület +Name[kk]=DCTC графикалық интерфейсі +Name[lo]=ຊີພີຢູ +Name[mn]=DCTC-Гадаргуу +Name[nb]=DCTC-grensesnitt +Name[nds]=Graafsche Böversiet för DCTC +Name[nn]=DCTC-grensesnitt +Name[pl]=Graficzny interfejs do DCTC +Name[pt]=Interface do DCTC +Name[pt_BR]=Interface DCTC +Name[se]=DCTC-lakta +Name[sv]=Grafiskt gränssnitt för DCTC +Name[te]=డిసిటిసి జియూఐ +Name[tg]=Робитаи графикии корбари DCTC +Name[th]=GUI ของ DCTC +Name[uk]=Інтерфейс для DCTC +Name[uz]=DCTC uchun grafik interfeys +Name[uz@cyrillic]=DCTC учун график интерфейс +Name[wa]=Eterface grafike po DCTC +Name[zh_TW]=DCTC 圖型使用者介面 +Name[zu]=I-GUI ye-DCTC +GenericName=Direct Connect Clone +GenericName[af]=Direkte Koppeling Namaaksel +GenericName[az]=Direct Connect Klonu +GenericName[be]=Клон Direct Connect +GenericName[bn]=ডাইরেক্ট কানেক্ট ক্লোন +GenericName[bs]=Direct Connect klon +GenericName[ca]=Clon per a la connexió directa +GenericName[cs]=Klon Direct Connect +GenericName[csb]=Klon Direct Connect (direkt łączba) +GenericName[cy]=Clôn Cysylltu Uniongyrchol +GenericName[da]=Direct Connect klon +GenericName[de]=Direct-Connect-Klon +GenericName[el]=Κλώνος απευθείας σύνδεσης(DCC) +GenericName[eo]=Klono de Direct Connect +GenericName[es]=Clon de Direct Connect +GenericName[et]=Direct Connect kloon +GenericName[eu]=Direct Connect-en klonea +GenericName[fa]=بدل اتصال مستقیم +GenericName[fi]=Direct Connect klooni +GenericName[fr]=Clone de Direct Connect +GenericName[fy]=Direkt Ferbining-kloan +GenericName[ga]=Clón Direct Connect +GenericName[gl]=Clon de Direct Connect +GenericName[he]=תואם Direct Connect +GenericName[hi]=डायरेक्ट कनेक्ट क्लोन +GenericName[hr]=Direct Connect klon +GenericName[hu]=Direct Connect-változat +GenericName[is]=Direct Connect klónn +GenericName[it]=Clone di Direct Connect +GenericName[ja]=Direct Connect クローン +GenericName[ka]=კლონი Direct Connect +GenericName[kk]=Direct Connect клоны +GenericName[ko]=Direct Connect 클론 +GenericName[lo]=ແປງຫນ່ວຍ +GenericName[lt]=Direct Connect klonas +GenericName[lv]=Direct Connect klons +GenericName[mk]=Клон на Direct Connect +GenericName[mn]=Клон шууд холболт +GenericName[ms]=Klon Direct Connect +GenericName[nb]=Klone av «Direct Connect» +GenericName[nds]=Kloon vun Direct Connect +GenericName[ne]=प्रत्यक्ष जडान क्लोन +GenericName[nl]=Direct Connect-kloon +GenericName[nn]=Direct Connect-klone +GenericName[nso]=Clone yeo e Kgokaganyago Thwii +GenericName[pa]=ਸਿੱਧਾ ਕੁਨੈਕਸ਼ਨ ਸਮਰੂਪ +GenericName[pl]=Klon Direct Connect (Bezpośrednie Łącze) +GenericName[pt]=Clone do Direct Connect +GenericName[pt_BR]=Clone do Direct Connect +GenericName[ro]=Clonă de Direct Connect +GenericName[ru]=Клон Direct Connect +GenericName[rw]=Kolone Kwihuza Bitaziguye +GenericName[se]=Direct Connect-klona +GenericName[sk]=Klon Direct Connect +GenericName[sl]=Igra s kockami +GenericName[sr]=Direct Connect клон +GenericName[sr@Latn]=Direct Connect klon +GenericName[ss]=Ngalokucondzile chumanisa i-Clone +GenericName[sv]=Kopia av Direct Connect +GenericName[ta]=நேரடி இணைப்பு பிரதி +GenericName[te]=సూటి సంబంధ క్లోన్ +GenericName[tg]=Рости васли мустақил +GenericName[th]=โปรแกรมเลียนแบบ Direct Connect +GenericName[tr]=Direct Connect Programı +GenericName[tt]=Direct Connect Qabatlaması +GenericName[uk]=Клон прямого зв'язку +GenericName[ven]=Maswole a muvhili a tumaho asa monamoni +GenericName[vi]=Kết nối trực tiếp +GenericName[wa]=Clône di «Direct Connect» +GenericName[xh]=Udibaniso Ngqo lwe Klone +GenericName[zh_CN]=Direct Connect +GenericName[zh_TW]=直接連線仿製 +GenericName[zu]=Xhumanisa Ngokuqondile Iwele +Terminal=false +Type=Application diff --git a/kappfinder/apps/Internet/ed2k_gui.desktop b/kappfinder/apps/Internet/ed2k_gui.desktop new file mode 100644 index 000000000..e14ed71bd --- /dev/null +++ b/kappfinder/apps/Internet/ed2k_gui.desktop @@ -0,0 +1,114 @@ +[Desktop Entry] +Exec=ed2k_gui +Icon=xapp +Name=eDonkey2000 GTK+ Core Controller +Name[af]=eDonkey2000 GTK+ Beheerder +Name[az]=eDonkey2000 GTK+ Əsas İdarəçi +Name[be]=Кіраўнік ядра eDonkey2000 для GTK+ +Name[bn]=ই-ডঙ্কি ২০০০ GTK+ কোর কন্ট্রোলার +Name[ca]=eDonkey2000 GTK+ Nucli controlador +Name[csb]=Kòntroléra eDonkey2000 (interfejs GTK+) +Name[cy]=eDonkey2000 GTK+ Rheolydd Craidd +Name[eo]=eDonkey2000 GTK+ Kernadaptilo +Name[es]=Controlador central eDonkey2000 GTK+ +Name[eu]=eDonkey2000 GTK+ gune kontrolatzailea +Name[fa]=eDonkey2000 GTK + کنترل‌کنندۀ هسته +Name[fr]=Contrôleur principal eDonkey2000 GTK+ +Name[gl]=Xestor-Interface eDonkey2000 GTK+ +Name[he]=בקר ליבת GTK+ eDonkey2000 +Name[hi]=ई-डंकी2000 जीटीके+ कोर नियंत्रक +Name[hr]=eDonkey2000 GTK+ središnji kontroler +Name[hu]=eDonkey2000 GTK+ vezérlőprogram +Name[it]=Controllo di eDonkey2000 GTK+ +Name[ja]=eDonkey2000 GTK+ コアコントローラ +Name[ka]=eDonkey2000 GTK+ ბირთვის კონტროლერი +Name[kk]=eDonkey2000 GTK+ негізгі контроллері +Name[ko]=eDonkey2000 GTK+ 코어 컨트롤러 +Name[lo]=edonkey2000 GTK+core controller +Name[lt]=eDonkey2000 GTK+ pagrindinis kontroleris +Name[lv]=eDonkey2000 GTK+ kodola kontrolētājs +Name[ms]=Pengawal Utama GTK+ eDonkey2000 +Name[nb]=eDonkey2000 GTK+ kjernekontroll +Name[ne]=eDonkey2000 GTK+ कोर नियन्त्रक +Name[nn]=eDonkey2000 GTK+ kjernekontroll +Name[nso]=eDonkey2000 GTK+ Molaodi wa Konokono +Name[pa]=eDonkey2000 GTK+ ਕੇਂਦਰੀਂ ਕੰਟਰੋਲ +Name[pl]=Kontroler eDonkey2000 (interfejs GTK+) +Name[pt]=Controlador de Base em GTK+ do eDonkey2000 +Name[pt_BR]=Controlador Principal do eDonkey2000 GTK+ +Name[ro]=Controlor central GTK+ eDonkey2000 +Name[ru]=Основной контроллер eDonkey2000 GTK+ +Name[rw]=eDonkey2000 GTK+ Mugenzura Intima +Name[se]=eDonkey2000 GTK+ guovddášstivrejeaddji +Name[sk]=eDonkey2000 GTK+ ovládač jadra +Name[sl]=Nadzornik jedra GTK+ za eDonkey2000 +Name[ss]=eDonkey2000 GTK+ Silawuli lesiyinhloko +Name[sv]=eDonkey2000 GTK+ och kärnhantering +Name[ta]=eடாங்கி2000 GTK+ கோர் கட்டுப்பாட்டாளர் +Name[te]=ఈడాంకి 2000 జిటికె+ మూల కేంద్రం +Name[tg]=eDonkey2000 GTK+ Контрол кунандаи аслӣ +Name[th]=ตัวควบคุมกลางของ eDonkey2000 GTK+ +Name[tr]=eDonkey2000 GTK+ Denetleyici +Name[tt]=eDonkey2000 GTK+ öçen Töp İdärä +Name[ven]=eDonngi2000 GTK+ Tshilanguli tshihulwane +Name[vi]=eDonkey2000 GTK+ lõi điều khiển +Name[wa]=Controleur d' eDonkey2000 GTK+ Core +Name[xh]=eDonkey2000 GTK+ Nomlawuli Wangaphakathi +Name[zh_CN]=eDonkey2000 GTK+ 核心控制器 +Name[zh_TW]=eDonkey2000 GTK+ 核心控制器 +GenericName=eDonkey2000 GUI +GenericName[ar]=الواجهة الرسومية لــ eDonkey2000 +GenericName[az]=eDonkey2000 İAÜ +GenericName[be]=Графічны кліент eDonkey2000 +GenericName[bg]=ГПИ за eDonkey2000 +GenericName[bn]=ই-ডঙ্কি ২০০০ গুই +GenericName[br]=Etrefas eDonkey2000 +GenericName[ca]=IGU per a eDonkey2000 +GenericName[csb]=Graficzny interfejs dlô eDonkey2000 +GenericName[de]=eDonkey2000-Oberfläche +GenericName[es]=GUI eDonkey2000 +GenericName[et]=eDonkey2000 kasutajaliides +GenericName[fa]=ونک eDonkey2000 +GenericName[fr]=Interface graphique pour eDonkey2000 +GenericName[fy]=eDonkey2000-GUI +GenericName[ga]=Comhéadan Grafach eDonkey2000 +GenericName[gl]= GUI eDonkey2000 +GenericName[he]=ממשק משתמש גרפי ל־eDonkey2000 +GenericName[hi]=ई-डंकी2000 जीयूआई +GenericName[hr]=eDonkey2000 grafičko sučelje +GenericName[hu]=eDonkey2000-felület +GenericName[it]=GUI di eDonkey2000 +GenericName[ka]=გრაფიკული eDonkey2000 +GenericName[kk]=eDonkey2000 графикалық интерфейсі +GenericName[lo]=ໂທລະສັບ +GenericName[mn]=eDonkey2000-Гадаргуу +GenericName[ms]=GUI eDonkey2000 +GenericName[mt]=Interfaċċja eDonkey2000 +GenericName[nb]=eDonkey2000-grensesnitt +GenericName[nds]=Graafsche Böversiet för eDonkey2000 +GenericName[nl]=eDonkey2000-GUI +GenericName[nn]=eDonkey2000-grensesnitt +GenericName[pl]=Graficzny interfejs dla eDonkey2000 +GenericName[pt]=Interface do eDonkey2000 +GenericName[pt_BR]=Interface do eDonkey2000 +GenericName[ro]=Interfață grafică eDonkey2000 +GenericName[ru]=Графический интерфейс eDonkey2000 +GenericName[se]=eDonkey2000-lakta +GenericName[sl]=Vmesnik za eDonkey2000 +GenericName[sv]=eDonkey2000 grafiskt gränssnitt +GenericName[ta]=eடாங்கி2000 ஜியுஐ +GenericName[te]=ఈడాంకి 2000 జియూఐ +GenericName[tg]=Робитаи графикии корбари eDonkey2000 +GenericName[th]=GUI ของ eDonkey2000 +GenericName[tr]=eDonkey2000 Grafik Arayüzü +GenericName[tt]=eDonkey2000 Yözarası +GenericName[uk]=Інтерфейс для eDonkey2000 +GenericName[uz]=eDonkey2000 uchun grafik interfeys +GenericName[uz@cyrillic]=eDonkey2000 учун график интерфейс +GenericName[ven]=eDonngi2000 GUI +GenericName[vi]=Giao diện eDonkey2000 +GenericName[wa]=Eterface grafike po eDonkey 2000 +GenericName[zh_TW]=eDonkey2000 圖型使用者介面 +GenericName[zu]=I-GUI ye-eDonkey2000 +Terminal=false +Type=Application diff --git a/kappfinder/apps/Internet/epiphany.desktop b/kappfinder/apps/Internet/epiphany.desktop new file mode 100644 index 000000000..a8254d0f3 --- /dev/null +++ b/kappfinder/apps/Internet/epiphany.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Epiphany +Name[bn]=এপিফেনি +Name[eo]=Epifano +Name[hi]=एपिफेनी +Name[ja]=Ephiphany ウェブブラウザ +Name[mn]=Эпипани +Name[ne]=इपिफेनी +Name[pa]=ਏਪੀਫਾਨੀ +Name[rw]=Epifaniya +Name[ta]=எபிபனி +Name[te]=ఎపిఫేని +Name[vi]=Hiện ra +Name[wa]=Betchteu waibe epiphany +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +Exec=epiphany +Terminal=false +Icon=epiphany +Type=Application diff --git a/kappfinder/apps/Internet/ethereal.desktop b/kappfinder/apps/Internet/ethereal.desktop new file mode 100644 index 000000000..3d089f4b5 --- /dev/null +++ b/kappfinder/apps/Internet/ethereal.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Ethereal +Name[bn]=এথিরিয়েল +Name[hi]=एथरियल +Name[ne]=इथेरिएल +Name[pa]=ਈਥਰਲ +Name[rw]=Gikeye +Name[ta]=எத்ரியல் +Name[te]=ఎథెరియల్ +Name[uk]=Ефемерність +Name[vi]=Thanh tao +GenericName=Network Analyzer +GenericName[af]=Netwerk Analiseerder +GenericName[ar]=محلل الشبكة +GenericName[az]=Şəbəkə Analiz Proqramı +GenericName[be]=Аналізатар сеткі +GenericName[bg]=Мрежов анализатор +GenericName[bn]=নেটওয়ার্ক বিশ্লেষণকারী +GenericName[bs]=Mrežni analizer +GenericName[ca]=Analitzador de xarxes +GenericName[cs]=Analyzátor sítě +GenericName[csb]=Analizatora séce +GenericName[cy]=Dadansoddwr Rhwydwaith +GenericName[da]=Netværksanalyse +GenericName[de]=Programm für die Netzwerkanalyse +GenericName[el]=Αναλυτής δικτύων +GenericName[en_GB]=Network Analyser +GenericName[eo]=Retanalizilo +GenericName[es]=Analizador de redes +GenericName[et]=Võrguliikluse analüsaator +GenericName[eu]=Sare aztertzailea +GenericName[fa]=تحلیل‌کنندۀ شبکه +GenericName[fi]=Verkkoanalysaattori +GenericName[fr]=Analyseur réseau +GenericName[fy]=Netwurkanalyze +GenericName[ga]=Anailíseoir Líonra +GenericName[gl]=Análisador da Rede +GenericName[he]=מאבחן רשת +GenericName[hi]=नेटवर्क एनॉलाइज़र +GenericName[hr]=Analizator mreže +GenericName[hu]=Hálózatanalizáló +GenericName[id]=Analisis jaringan +GenericName[is]=Netskoðunartól +GenericName[it]=Analizzatore di rete +GenericName[ja]=ネットワークアナライザ +GenericName[ka]=ქსელის ანალიზატორი +GenericName[kk]=Желіні талдаушы +GenericName[km]=កម្មវិធី​វិភាគ​បណ្ដាញ +GenericName[ko]=네트워크 분석기 +GenericName[lo]=ເຄື່ອງມືວິເຄາະເຄືອຂ່າຍ +GenericName[lt]=Tinklo analizatorius +GenericName[lv]=Tīkla Analizators +GenericName[mk]=Анализатор на мрежи +GenericName[mn]=Сүлжээ-шинжлэлийн програм +GenericName[ms]=Penganalisis Rangkaian +GenericName[mt]=Analizzatur tan-network +GenericName[nb]=Nettverksanalyse +GenericName[nds]=Ünnersöcht dat Nettwark +GenericName[ne]=सञ्जाल विश्लेषक +GenericName[nl]=Netwerkanalyse +GenericName[nn]=Nettverksanalyse +GenericName[nso]=Moahlaahli wa Kgokagano +GenericName[pa]=ਨੈੱਟਵਰਕ ਜਾਂਚਕਾਰ +GenericName[pl]=Analizator sieci +GenericName[pt]=Analisador de Redes +GenericName[pt_BR]=Analisador de rede +GenericName[ro]=Analizor de rețea +GenericName[ru]=Анализатор сетевого трафика +GenericName[rw]=Musesenguzi w'Urusobemiyoboro +GenericName[se]=Fierbmeanalysa +GenericName[sk]=Analyzátor siete +GenericName[sl]=Analizator omrežij +GenericName[sr]=Анализатрор мреже +GenericName[sr@Latn]=Analizatror mreže +GenericName[ss]=Sihlatiyi seluchungechunge +GenericName[sv]=Nätverksanalyserare +GenericName[ta]=நெட்வொர்க் அனலைசர் +GenericName[te]=నెట్వర్క్ ను పరిశీలించే కార్యక్రమం +GenericName[tg]=Таҳлилгари шабака +GenericName[th]=เครื่องมือวิเคราะห์เครือข่าย +GenericName[tr]=Ağ Analiz Programı +GenericName[tt]=Çeltär Centekläwçe +GenericName[uk]=Аналізатор мережі +GenericName[uz]=Tarmoqni tahlil qilish vositasi +GenericName[uz@cyrillic]=Тармоқни таҳлил қилиш воситаси +GenericName[ven]=Musengulusi wa Vhukwamani +GenericName[vi]=Trình phân tích mạng +GenericName[wa]=Analijheu rantoele +GenericName[xh]=Umcukucezi Womsebenzi womnatha +GenericName[zh_CN]=网络分析程序 +GenericName[zh_TW]=網路分析程式 +GenericName[zu]=Umhloli Woxhumano olusakazekile +Exec=ethereal +Type=Application +MimeType= +Icon=xmag +Terminal=false +Path= diff --git a/kappfinder/apps/Internet/gFTP.desktop b/kappfinder/apps/Internet/gFTP.desktop new file mode 100644 index 000000000..c6c81e38a --- /dev/null +++ b/kappfinder/apps/Internet/gFTP.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=gFTP +Name[bn]=জি-এফ-টি-পি +Name[eo]=G-Ftp +Name[fr]=GFTP +Name[hi]=जीएफटीपी +Name[te]=జీ ఎఫ్ టి పి +GenericName=FTP Browser +GenericName[af]=FTP Blaaiër +GenericName[ar]=متصفح ميفاق نقل الملفات FTP +GenericName[be]=Кліент FTP +GenericName[bg]=FTP браузър +GenericName[bn]=এফ-টি-পি ব্রাউজার +GenericName[br]=Furcher FTP +GenericName[bs]=FTP preglednik +GenericName[ca]=Fullejador FTP +GenericName[cs]=FTP prohlížeč +GenericName[csb]=Przezérnik FTP +GenericName[da]=FTP-Browser +GenericName[de]=FTP-Browser +GenericName[el]=Περιηγητής FTP +GenericName[eo]=FTP-Foliumilo +GenericName[es]=Navegador FTP +GenericName[et]=FTP lehitseja +GenericName[eu]=FTP arakatzailea +GenericName[fa]=مرورگر قاپ‌ +GenericName[fi]=FTP-selain +GenericName[fr]=Navigateur FTP +GenericName[fy]=FTP-blêder +GenericName[ga]=Brabhsálaí FTP +GenericName[gl]=Navegador FTP +GenericName[he]=דפדפן FTP +GenericName[hr]=FTP preglednik +GenericName[hu]=FTP-böngésző +GenericName[id]=Peselancar FTP +GenericName[is]=FTP vafri +GenericName[it]=Browser FTP +GenericName[ja]=FTP ブラウザ +GenericName[ka]=FTP-ბრაუზერი +GenericName[kk]=FTP браузері +GenericName[km]=កម្មវិធី​រុករក FTP +GenericName[ko]=FTP 탐색기 +GenericName[lt]=FTP naršyklė +GenericName[mk]=FTP-прелистувач +GenericName[ms]=Pelayar FTP +GenericName[nb]=FTP-leser +GenericName[nds]=FTP-Nettkieker +GenericName[ne]=FTP ब्राउजर +GenericName[nl]=FTP-browser +GenericName[nn]=FTP-lesar +GenericName[pa]=FTP ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka FTP +GenericName[pt]=Navegador de FTP +GenericName[pt_BR]=Navegador FTP +GenericName[ro]=Navigator FTP +GenericName[ru]=FTP-браузер +GenericName[rw]=Mucukumbuzi FTP +GenericName[se]=FTP-logan +GenericName[sk]=FTP prehliadač +GenericName[sl]=Brskalnik po FTP +GenericName[sr]=FTP прегледач +GenericName[sr@Latn]=FTP pregledač +GenericName[sv]=FTP-bläddrare +GenericName[ta]=எஃப்டிபி உலாவி +GenericName[te]=ఎఫ్ టి పి బ్రౌజర్ +GenericName[tg]=Барномаи нозири FTP +GenericName[th]=โปรแกรมเรียกดู FTP +GenericName[tr]=FTP Tarayıcı +GenericName[uk]=Навігатор FTP +GenericName[uz]=FTP-brauzer +GenericName[uz@cyrillic]=FTP-браузер +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu FTP +GenericName[zh_CN]=FTP 浏览器 +GenericName[zh_TW]=FTP 瀏覽器 +Exec=gftp +Terminal=false +Icon=gftp +Type=Application diff --git a/kappfinder/apps/Internet/gaim.desktop b/kappfinder/apps/Internet/gaim.desktop new file mode 100644 index 000000000..1bf48a7cd --- /dev/null +++ b/kappfinder/apps/Internet/gaim.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Name=Gaim +Name[bn]=গেইম +Name[eo]=Gamo +Name[hi]=गेम +Name[mn]=ГАЙМ +Name[ne]=गाइम +Name[pa]=ਗਾਈਮ +Name[ta]=விளையாட்டுகள் +Name[te]=గెయిమ్ +GenericName=Instant Messenger +GenericName[af]=Oombliklike Boodskapper +GenericName[ar]=مراسلة فورية +GenericName[az]=Canlı İsmarışlaşma Vasitəsi +GenericName[be]=Кліент хуткіх паведамленняў +GenericName[bg]=Програма за чат +GenericName[bn]=তাত্‍ক্ষণিক আড্ডা +GenericName[br]=Posteler a-benn-kaer +GenericName[bs]=Instant poruke +GenericName[ca]=Missatger instantani +GenericName[cs]=Instant Messager +GenericName[csb]=Kùriera wiadłów (IM) +GenericName[cy]=Negesydd Chwim +GenericName[el]=Στιγμιαίος αποστολέας +GenericName[eo]=tujmesaĝilo +GenericName[es]=Mensajería instantánea +GenericName[et]=Kiirsuhtlusrakendus (IM) +GenericName[eu]=Bat-bateko mezularitza +GenericName[fa]=پیام‌رسان فوری +GenericName[fi]=Pikaviestintäohjelma +GenericName[fr]=Client de messagerie instantanée +GenericName[fy]=Instant messenger +GenericName[ga]=Clár teachtaireachtaí meandaracha +GenericName[gl]=Mensaxeria Instantánea +GenericName[he]=תוכנית מסרים מיידים +GenericName[hi]=इंसटैंट मैसेंजर +GenericName[hr]=Trenutne poruke +GenericName[hu]=Azonnali üzenetküldő +GenericName[is]=Samtalsbiðill (Instant Messenger) +GenericName[it]=Messaggistica istantanea +GenericName[ja]=インスタントメッセンジャー +GenericName[ka]=მყისი შეტყობინება +GenericName[kk]=Жедел хабарласу +GenericName[km]=កម្មវិធី​ផ្ញើ​សារ​បន្ទាន់ +GenericName[ko]=인스턴트 메신저 +GenericName[lt]=Momentinių žinučių klientas +GenericName[mk]=Инстант гласник +GenericName[mn]=Инстант мессэнжер +GenericName[ms]=Pesanan Ringkas +GenericName[nb]=Lynmeldingsprogram +GenericName[nds]=Kortnarichten-Maker +GenericName[ne]=आवश्यक म्यासेन्जर +GenericName[nl]=Instant messenger +GenericName[nn]=Lynmeldingsprogram +GenericName[pa]=ਮੌਕਾ ਸੁਨੇਹਾਕਾਰ +GenericName[pl]=Komunikator internetowy +GenericName[pt]=Mensageiro Instantâneo +GenericName[pt_BR]=Mensageiro Instantâneo +GenericName[ro]=Program de MI (mesaje instantanee) +GenericName[ru]=Обмен мгновенными сообщениями +GenericName[rw]=Intumwa y'Akokanya +GenericName[se]=Šleađgadiehtoprográmma +GenericName[sl]=Takojšni sporočilnik +GenericName[sr]=Брзи гласник +GenericName[sr@Latn]=Brzi glasnik +GenericName[sv]=Direktmeddelandeklient +GenericName[ta]=உடனடி தகவல் அளிப்பான் +GenericName[te]=తక్షణమే సందేశము ఇచ్చే కార్యక్రమం +GenericName[tg]=Иввази иттилоот +GenericName[th]=โปรแกรมส่งข้อความแบบทันที +GenericName[tr]=Hızlı İletişim Programı +GenericName[tt]=Aşığıç Xäbärçe +GenericName[uk]=Кур'єр повідомлень +GenericName[uz]=Xabar almashish vositasi +GenericName[uz@cyrillic]=Хабар алмашиш воситаси +GenericName[vi]=Trình nhắn tin nhanh +GenericName[wa]=Messaedjreye sol moumint +GenericName[zh_CN]=即时消息程序 +GenericName[zh_TW]=即時通訊(IM) +Exec=gaim +Terminal=false +Icon=gaim +Type=Application diff --git a/kappfinder/apps/Internet/gnomemeeting.desktop b/kappfinder/apps/Internet/gnomemeeting.desktop new file mode 100644 index 000000000..8faa4d300 --- /dev/null +++ b/kappfinder/apps/Internet/gnomemeeting.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Name=GnomeMeeting +Name[bn]=গনোম-মীটিং +Name[hi]=ग्नोममीटिंग +Name[lo]=ໄອຄອນ +Name[ne]=जिनोम मिटिङ +Name[pa]=ਗਨੋਮ ਮੀਟਿੰਗ +Name[pl]=Gnome - Spotkania +Name[rw]=UmubonanoGnome +Name[ta]=தொலை மாநாடு +Name[te]=గ్నొమ్ మీటింగ్ +Name[tg]=Дидори Gnome +Name[ven]=Mutangano wa Gnome +Name[zu]=Umhlangano we-Gnome +GenericName=Video Conferencing +GenericName[af]=Video Konferensie +GenericName[az]=Video Görüşmə +GenericName[be]=Відэаканферэнцыя +GenericName[bg]=Видео конференция +GenericName[bn]=ভিডিও সম্মেলনী +GenericName[bs]=Video konferencije +GenericName[ca]=Vídeo conferència +GenericName[cs]=Video konference +GenericName[csb]=Wideòkònferencëje +GenericName[cy]=Cynadleddu Fideo +GenericName[da]=Videokonferencer +GenericName[de]=Video-Konferenzen +GenericName[el]=Διάσκεψη μέσω βίντεο +GenericName[eo]=Videokonferencoj +GenericName[es]=Video conferencia +GenericName[et]=Videokonverents +GenericName[eu]=Bideo konferentzia +GenericName[fa]=فراهمایی ویدیویی +GenericName[fi]=Videokonferenssi +GenericName[fr]=Conférence vidéo +GenericName[fy]=Fideo Konferinsje +GenericName[ga]=Físchomhdháil +GenericName[gl]=Conferéncia de Vídeo +GenericName[he]=שיחות ועידה בווידאו +GenericName[hi]=वीडियो कॉनफ्रेंसिंग +GenericName[hr]=Video konferenciranje +GenericName[hu]=Videokonferencia +GenericName[id]=Konferensi Video +GenericName[is]=Myndfundaforrit +GenericName[it]=Video conferenza +GenericName[ja]=ビデオ会議 +GenericName[ka]=ვიდეო კონფერენცია +GenericName[kk]=Бейне конференция +GenericName[km]=ធ្វើ​សន្និសីទ​តាម​វីដេអូ +GenericName[ko]=화상 대화 +GenericName[lo]=ເຄື່ອງຫລິ້ນວີດີໂອ +GenericName[lt]=Video konferencijos +GenericName[lv]=Video konferences +GenericName[mk]=Видео конференции +GenericName[mn]=Видио-Бага хурал +GenericName[ms]=Sidang Video +GenericName[mt]=Konferenzi Video +GenericName[nb]=Videokonferanse +GenericName[nds]=Videokonferenz +GenericName[ne]=भिडियो सम्मेलन +GenericName[nn]=Videokonferanse +GenericName[nso]=Kgothekgothe ya Video +GenericName[pa]=ਵੀਡਿਓ ਕਾਨਫਰੰਸ +GenericName[pl]=Videokonferencje +GenericName[pt]=Vídeo-Conferência +GenericName[pt_BR]=Vídeo-Conferência +GenericName[ro]=Program de video conferință +GenericName[ru]=Видео конференции +GenericName[rw]=Inama Videwo +GenericName[se]=Videočoahkkin +GenericName[sk]=Videokonferencia +GenericName[sl]=Video konferenčne zveze +GenericName[sr]=Видео конференције +GenericName[sr@Latn]=Video konferencije +GenericName[ss]=Kuhlangana ngekusebentisa i-Video +GenericName[sv]=Videokonferens +GenericName[ta]=காட்சிப்பட பொதுக்கூட்டம் +GenericName[te]=విడియో గొష్టి +GenericName[tg]=Конфронси видеоӣ +GenericName[th]=การประชุมผ่านวิดิโอ +GenericName[tr]=Video Konferans +GenericName[tt]=Video Bäxäsläşü +GenericName[uk]=Відеоконференції +GenericName[uz]=Video konferensiya +GenericName[uz@cyrillic]=Видео конференция +GenericName[ven]=Mutangano wa Vidio +GenericName[vi]=Trình hội họp Video +GenericName[wa]=Conferince videyo +GenericName[zh_CN]=视频会议 +GenericName[zh_TW]=視訊會議 +Exec=gnomemeeting +Terminal=false +Icon=gnomemeeting +Type=Application diff --git a/kappfinder/apps/Internet/gnometalk.desktop b/kappfinder/apps/Internet/gnometalk.desktop new file mode 100644 index 000000000..c8ab685c0 --- /dev/null +++ b/kappfinder/apps/Internet/gnometalk.desktop @@ -0,0 +1,38 @@ +[Desktop Entry] +Name=GNOME Talk +Name[be]=Размовы GNOME +Name[bn]=গনোম টক +Name[br]=GNOME flapañ +Name[cs]=Gnome Talk +Name[csb]=Gnome Talk +Name[eo]=Gnoma babililo +Name[fa]=گفتگوی گنوم +Name[fi]=Gnome Talk +Name[fr]=Gnome Talk +Name[hi]=ग्नोम टाक +Name[it]=Talk di GNOME +Name[ko]=그놈 이야기 +Name[lo]=GNOME talk +Name[nds]=GNOME-Talk +Name[ne]=जिनोम कुराकानी +Name[nso]=Polelo ya GNOME +Name[pa]=ਗਨੋਮ ਗੱਲਬਾਤ +Name[pl]=Gnome Talk +Name[ro]=Talk GNOME +Name[rw]=GNOME Kuvuga +Name[sl]=Gnome Talk +Name[sr]=Гномов Talk +Name[sr@Latn]=Gnomov Talk +Name[ss]=Kukhuluma kwe GNOME +Name[sv]=Gnome talk +Name[ta]=க்னோம் பேச்சு +Name[te]=గ్నొమ్ టాక్ +Name[tg]=Гуфтугӯи GNOME +Name[ven]=Nyambo ya GNOME +Name[wa]=Cliyint «talk» di GNOME +Name[xh]=Intetho yeGNOME +Name[zu]=Inkulumo ye-GNOME +Exec=gtalk +Terminal=false +Icon=gnome-talk +Type=Application diff --git a/kappfinder/apps/Internet/gtelnet.desktop b/kappfinder/apps/Internet/gtelnet.desktop new file mode 100644 index 000000000..d0f75cde2 --- /dev/null +++ b/kappfinder/apps/Internet/gtelnet.desktop @@ -0,0 +1,104 @@ +[Desktop Entry] +Name=GNOME Telnet +Name[be]=Telnet для GNOME +Name[bn]=গনোম টেলনেট +Name[cs]=Gnome Telnet +Name[csb]=Gnome Telnet +Name[eo]=Gnoma telneto +Name[fi]=Gnome Telnet +Name[fr]=Gnome Telnet +Name[hi]=ग्नोम टेलनेट +Name[it]=Telnet di GNOME +Name[ko]=그놈 텔넷 +Name[lo]=ເທວເນັດຂອງ GNOME +Name[lv]=GNOME Telnets +Name[mt]=Telnet tal-GNOME +Name[nds]=GNOME-Telnet +Name[ne]=जिनोम टेलनेट +Name[nso]=Telnet ya GNOME +Name[pa]=ਗਨੋਮ ਟੇਲਨੈਟ +Name[pl]=Gnome Telnet +Name[ro]=Telnet GNOME +Name[rw]=GNOME Telineti +Name[sl]=Gnome Telnet +Name[sr]=Гномов telnet +Name[sr@Latn]=Gnomov telnet +Name[sv]=Gnome telnet +Name[ta]=க்னோம் டெல்நெட் +Name[te]=గ్నొమ్ టెల్ నెట్ +Name[tg]=Телнети GNOME +Name[th]=เทลเน็ตของ GNOME +Name[ven]=Vhukwamani ha GNOME +Name[wa]=Cliyint telnet di GNOME +Name[xh]=ITelnet yeGNOME +GenericName=Remote Access +GenericName[af]=Afgeleë Toegang +GenericName[be]=Аддалены доступ +GenericName[bg]=Отдалечен достъп +GenericName[bn]=রিমোট অ্যাকসেস +GenericName[br]=Diraez a-bell +GenericName[bs]=Udaljeni pristup +GenericName[ca]=Accés remot +GenericName[cs]=Vzdálený přístup +GenericName[csb]=Daleczi przistãp +GenericName[da]=Fjernadgang +GenericName[de]=Zugriff auf Fremdrechner +GenericName[el]=Εργαλείο απομακρυσμένης πρόσβασης +GenericName[eo]=Fora aliro +GenericName[es]=Acceso remoto +GenericName[et]=Kaugligipääs +GenericName[eu]=Urruneko sarbidea +GenericName[fa]=دستیابی دور +GenericName[fi]=Etäkäyttötyökalu +GenericName[fr]=Accès distant +GenericName[fy]=Eksterne tagong +GenericName[ga]=Cianrochtain +GenericName[gl]=Aceso Remoto +GenericName[he]=גישה מרחוק +GenericName[hr]=Udaljeno pristupanje +GenericName[hu]=Telnet-kliens +GenericName[is]=Fjarlægur aðgangur +GenericName[it]=Accesso remoto +GenericName[ja]=リモートアクセスツール +GenericName[ka]=შორწვდომა +GenericName[kk]=Қашықтан қатынау +GenericName[km]=ចូល​ដំណើរការ​ពី​ចម្ងាយ +GenericName[ko]=원격 접속 +GenericName[lt]=Nutolęs prisijungimas +GenericName[mk]=Пристап оддалеку +GenericName[ms]=Akses Jauh +GenericName[nb]=Ekstern innlogging +GenericName[nds]=Warktüüch för den Feerntogriep +GenericName[ne]=टाढा पहुँच +GenericName[nl]=Externe toegang +GenericName[nn]=Ekstern innlogging +GenericName[pa]=ਰਿਮੋਟ ਪਹੁੰਚ +GenericName[pl]=Zdalny dostęp +GenericName[pt]=Acesso Remoto +GenericName[pt_BR]=Acesso Remoto +GenericName[ro]=Acces la distanță +GenericName[ru]=Удалённый доступ +GenericName[rw]=Ukugera kwa Kure +GenericName[se]=Gáiddus beassan +GenericName[sk]=Vzdialený prístup +GenericName[sl]=Oddaljeni dostop +GenericName[sr]=Удаљени приступ +GenericName[sr@Latn]=Udaljeni pristup +GenericName[sv]=Fjärråtkomst +GenericName[ta]=தொலைதூர அணுகல் +GenericName[te]=సుదూర ప్రవేశము +GenericName[tg]=Дастраси дурдаст +GenericName[th]=การเข้าใช้งานระยะไกล +GenericName[tr]=Uzaktan Erişim +GenericName[tt]=Çittän İreşü +GenericName[uk]=Віддалений доступ +GenericName[uz]=Masofadan ulanish vositasi +GenericName[uz@cyrillic]=Масофадан уланиш воситаси +GenericName[vi]=Công cụ truy cập từ xa +GenericName[wa]=Usteye po des accès då lon +GenericName[zh_CN]=远程访问 +GenericName[zh_TW]=遠端存取 +Exec=gnome-telnet +Terminal=false +Icon=gnome-telnet +Type=Application diff --git a/kappfinder/apps/Internet/ickle.desktop b/kappfinder/apps/Internet/ickle.desktop new file mode 100644 index 000000000..81de77762 --- /dev/null +++ b/kappfinder/apps/Internet/ickle.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Exec=ickle +Icon=licq +Name=ickle +Name[bn]=ইকল +Name[hi]=आईसीकेएलई +Name[hu]=Ickle +Name[lo]=ຕົ໋ວ +Name[ne]=इकल +Name[pa]=ਈਕਲੀ +Name[sv]=Ickle +Name[ta]=ஐசிகல் +Name[te]=ఇకిల్ +GenericName=ICQ2000 Chat +GenericName[af]=ICQ2000 Praat program +GenericName[be]=Кліент ICQ2000 +GenericName[bg]=ICQ2000 чат +GenericName[bn]=আই-সি-কিউ ২০০০ আড্ডা +GenericName[br]=Flapañ ICQ2000 +GenericName[bs]=ICQ2000 chat +GenericName[ca]=Xat ICQ2000 +GenericName[cs]=ICQ2000 chat +GenericName[csb]=Klient ICQ2000 +GenericName[da]=ICQ2000-chat +GenericName[de]=ICQ2000-Programm +GenericName[el]=Πελάτης συζήτησης ICQ2000 +GenericName[eo]=ICQ2000-babilado +GenericName[es]=Cliente ICQ2000 +GenericName[et]=ICQ2000 vestlus +GenericName[fa]=ICQ2000 گپ +GenericName[fi]=ICQ2000 Chat -keskusteluohjelma +GenericName[fr]=Discussion ICQ2000 +GenericName[ga]=Comhrá ICQ2000 +GenericName[gl]=Chat ICQ2000 +GenericName[he]=שיחת ICQ2000 +GenericName[hr]=ICQ2000 brbljanje +GenericName[hu]=ICQ2000-kliens +GenericName[is]=ICQ2000 spjall +GenericName[it]=Chat ICQ2000 +GenericName[ja]=ICQ2000 クライアント +GenericName[ka]=ICQ2000 ჩეთი +GenericName[kk]=ICQ2000 клиенті +GenericName[km]=កម្មវិធី​ជជែកកំសាន្ត ICQ2000 +GenericName[ko]=ICQ2000 클라이언트 +GenericName[lt]=ICQ2000 pokalbiai +GenericName[ms]=Chat ICQ2000 +GenericName[nb]=Prateprogrammet ICQ2000 +GenericName[nds]=Client för ICQ2000 +GenericName[ne]=ICQ२००० कुराकानी +GenericName[nl]=ICQ2000-chat +GenericName[nn]=Prateprogrammet ICQ2000 +GenericName[pa]=ICQ2000 ਗੱਲਬਾਤ +GenericName[pl]=Klient ICQ2000 +GenericName[pt]=Conversas ICQ2000 +GenericName[pt_BR]=ICQ2000 +GenericName[ro]=Convorbiri ICQ2000 +GenericName[ru]=Клиент ICQ2000 +GenericName[rw]=Ikiganiro ICQ2000 +GenericName[se]=ICQ2000-čátta +GenericName[sk]=ICQ2000 chat +GenericName[sl]=Klepet ICQ2000 +GenericName[sr]=ICQ2000 ћаскање +GenericName[sr@Latn]=ICQ2000 ćaskanje +GenericName[sv]=ICQ2000-chatt +GenericName[ta]=ICQ2000 அரட்டை +GenericName[te]=ఐసిక్యూ2000 సంభాషణ +GenericName[tg]=Чат ICQ2000 +GenericName[th]=ICQ2000 แชต +GenericName[tr]=ICQ2000 +GenericName[tt]=ICQ2000 Çatı +GenericName[uk]=Балачка ICQ2000 +GenericName[uz]=ICQ2000 klienti +GenericName[uz@cyrillic]=ICQ2000 клиенти +GenericName[vi]=Trình chat ICQ2000 +GenericName[wa]=Berdelaedje ICQ2000 +GenericName[zh_CN]=ICQ2000 聊天 +Terminal=false +Type=Application diff --git a/kappfinder/apps/Internet/javaws.desktop b/kappfinder/apps/Internet/javaws.desktop new file mode 100644 index 000000000..bed9f6f98 --- /dev/null +++ b/kappfinder/apps/Internet/javaws.desktop @@ -0,0 +1,33 @@ +[Desktop Entry] +Exec=javaws +MimeType=application/x-java-jnlp-file +Name=Java Web Start +Name[bn]=জাভা ওয়েব স্টার্ট +Name[da]=Java webstart +Name[el]=Αναζήτηση στο διαδίκτυο περί Java +Name[eo]=Ĝava Ret-Lanĉo +Name[es]=Web Start Java +Name[fa]=آغاز وب جاوا +Name[ga]=Tosú Gréasáin Java +Name[he]=דף כניסה של Java +Name[ka]=Java ვებ დასაწყისი +Name[km]=ការ​ចាប់ផ្តើម Java Web +Name[ne]= जाभा वेब सुरुआत +Name[pa]=ਜਾਵਾ ਵੈੱਬ ਸ਼ੁਰੂ +Name[ro]=Pornire Java Web +Name[ru]=Запуск приложений Java из сети +Name[rw]=Itangira Urubuga Java +Name[sr]=Java веб покретање +Name[sr@Latn]=Java veb pokretanje +Name[sv]=Java webbstart +Name[ta]=ஜாவா வலை துவக்கம் +Name[te]=జావా వెబ్ మొదలు +Name[tg]=Оғози Java Web +Name[tr]=Jawa Web Start +Name[uk]=Запуск програм Java з мережі +Name[vi]=Khởi động Java Mạng +Name[wa]=Enondaedje di Java sol daegntoele +ServiceTypes= +Terminal=false +Type=Application +Icon=java diff --git a/kappfinder/apps/Internet/knews.desktop b/kappfinder/apps/Internet/knews.desktop new file mode 100644 index 000000000..410b7d8d5 --- /dev/null +++ b/kappfinder/apps/Internet/knews.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +Name=KNews +Name[af]=K-nuus +Name[bn]=কে-নিউস +Name[cy]=KNewyddion +Name[eo]=Novaĵoj +Name[hi]=केन्यूज़ +Name[lo]=ຂ່າວ - K +Name[lv]=KZiņas +Name[mk]=КВести +Name[ne]=के समाचार +Name[nso]=KDitaba +Name[pa]=ਕੇ-ਖਬਰਾਂ +Name[rw]=K-Amakuru +Name[sl]=K-novice +Name[sv]=Knews +Name[ta]=Kசெய்திகள் +Name[te]=కెవార్తలు +Name[tg]=Ахбори-K +Name[th]=ข่าว - K +Name[ven]=Mafhungo a K +Name[vi]=Tin tức K +Name[wa]=Noveles di KDE +GenericName=Usenet News Reader +GenericName[af]=Usenet Nuus Leser +GenericName[ar]=قارئ أخبار Usenet +GenericName[az]=Usenet Xəbər Oxuyucusu +GenericName[be]=Кліент навінаў Usenet +GenericName[bg]=Новинарски групи +GenericName[bn]=ইউসনেট সংবাদ পাঠক +GenericName[br]=Lenner keleier Usenet +GenericName[bs]=Program za čitanje USENet grupa +GenericName[ca]=Lector de grups de notícies Usenet +GenericName[cs]=Klient pro čtení diskusních skupin +GenericName[csb]=Czëtôrz diskùsjowëch karnów +GenericName[cy]=Darllenydd Newyddion Usenet +GenericName[da]=Usenet-nyhedslæser +GenericName[de]=Usenet-News lesen und schreiben +GenericName[el]=Αναγνώστης νέων Usenet +GenericName[eo]=Programo por legi kaj afiŝi en diskutforumoj +GenericName[es]=Lector de noticias de Usenet +GenericName[et]=Uudisegruppide lugemine +GenericName[eu]=Usenet berri irakurgailua +GenericName[fa]=خوانندۀ اخبار یوزنت +GenericName[fi]=Uutisryhmien lukuohjelma +GenericName[fr]=Lecteur de forums Usenet +GenericName[fy]=Usenet-nijslêzer +GenericName[ga]=Léitheoir Nuachta Usenet +GenericName[gl]=Lector de Novas Usenet +GenericName[he]=קורא חדשות Usenet +GenericName[hi]=यूजनेट समाचार वाचक +GenericName[hr]=Čitač grupa novosti +GenericName[hu]=Hírolvasó +GenericName[is]=Tól til að lesa Usenet ráðstefnur +GenericName[it]=Lettore news Usenet +GenericName[ja]=Usenet ニュースリーダー +GenericName[ka]=ახალიამბების საკითხავი პროგრამა +GenericName[kk]=Usenet жаңалықтарды оқу +GenericName[km]=កម្មវិធី​អាន​ព័ត៌មាន​បណ្ដាញ​អ្នក​ប្រើ +GenericName[ko]=유즈넷 뉴스 리더 +GenericName[lo]=ເຄື່ອງມືອ່ານຂ່າວ +GenericName[lt]=Usenet naujienų skaityklė +GenericName[lv]=Usenet Vēstu Lasītājs +GenericName[mk]=Читач на вести на Usenet +GenericName[mn]=Usenet-н мэдээ унших +GenericName[ms]=Pembaca Berita Usenet +GenericName[mt]=Qarrej tal-aħbarijiet (news) +GenericName[nb]=Diskusjonsgruppeleser +GenericName[nds]=Kieker för Usenet-Narichten +GenericName[ne]=युजनेट समाचार वाचक +GenericName[nl]=Usenet-nieuwslezer +GenericName[nn]=Diskusjonsgruppelesar +GenericName[nso]=Mmadi wa Ditaba tsa Usenet +GenericName[pa]=Usenet ਖ਼ਬਰੀ +GenericName[pl]=Czytnik grup dyskusyjnych +GenericName[pt]=Leitor de Notícias da Usenet +GenericName[pt_BR]=Leitor de Notícias Usenet +GenericName[ro]=Cititor de știri USENET +GenericName[ru]=Программа для чтения новостей +GenericName[rw]=Musoma Makuru Usenet +GenericName[se]=Sáhkajoavkologan +GenericName[sk]=Klient pre News +GenericName[sl]=Bralnik novic Usenet +GenericName[sr]=Читач вести +GenericName[sr@Latn]=Čitač vesti +GenericName[ss]=Sifundzi setindzaba te Usenet +GenericName[sv]=Diskussionsgruppsläsare +GenericName[ta]=வலைஉபயோகி செய்திகள் படிப்பவர் +GenericName[te]=యూజ్ నెట్ వార్తలను చదివే కార్యక్రమం +GenericName[tg]=Хонандаи ахбори usenet +GenericName[th]=โปรแกรมอ่านข่าวของ Usenet +GenericName[tr]=Usenet Haber Okuyucu +GenericName[tt]=Yañalıq Uqu öçen +GenericName[uk]=Програма перегляду новин Usenet +GenericName[uz]=Usenet yangiliklarini oʻqish dasturi +GenericName[uz@cyrillic]=Usenet янгиликларини ўқиш дастури +GenericName[ven]=Muvhali wa Mafhungo a Usenet +GenericName[vi]=Trình đọc Tin Usenet +GenericName[wa]=Lijheu d' copinreyes (usenet) +GenericName[xh]=Umfundi Weendaba we Usenet +GenericName[zh_CN]=新闻阅读程序 +GenericName[zh_TW]=新聞群組閱讀程式 +GenericName[zu]=Umfundi wezindaba zokusebenza kwe-net +Exec=knews +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Internet/licq.desktop b/kappfinder/apps/Internet/licq.desktop new file mode 100644 index 000000000..1b50b5d01 --- /dev/null +++ b/kappfinder/apps/Internet/licq.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Exec=licq +Icon=licq +Name=Licq +Name[eo]=LICQ +Name[hi]=एलआईसीक्यू +Name[pa]=ਲੀਕਿਉ +Name[te]=ఎల్ ఐసిక్యూ +GenericName=ICQ Messenger +GenericName[af]=ICQ Boodskapper +GenericName[ar]=مراسل ICQ +GenericName[be]=Кліент ICQ +GenericName[bg]=Програма за ICQ +GenericName[bn]=আই-সি-কিউ মেসেঞ্জার +GenericName[br]=Kemennader ICQ +GenericName[bs]=ICQ instant poruke +GenericName[ca]=Missatgeria ICQ +GenericName[cs]=ICQ komunikátor +GenericName[csb]=Kùriera ICQ +GenericName[da]=ICQ-Messenger +GenericName[de]=ICQ-Messenger +GenericName[el]=ICQ αποστολέας +GenericName[eo]=ICQ Tujmesaĝilo +GenericName[es]=Mensajería instantánea ICQ +GenericName[eu]=ICQ mezularitza +GenericName[fa]=ICQ پیام‌رسان +GenericName[fi]=ICQ-pikaviestintäohjelma +GenericName[fr]=Messagerie ICQ +GenericName[fy]=ICQ-messenger +GenericName[ga]=Teachtaire ICQ +GenericName[he]=תוכנית מסרים מיידים של ICQ +GenericName[hr]=ICQ trenutne poruke +GenericName[hu]=ICQ üzenetküldő +GenericName[is]=ICQ spjallforrit +GenericName[it]=Messaggistica ICQ +GenericName[ja]=ICQ メッセンジャー +GenericName[ka]=ICQ შემმტყობინებელი +GenericName[kk]=ICQ клиенті +GenericName[km]=កម្មវិធី​ផ្ញើសារ ICQ +GenericName[ko]=ICQ 메신저 +GenericName[lt]=ICQ žinučių klientas +GenericName[nb]=Prateprogrammet ICQ +GenericName[nds]=ICQ-Narichtenmaker +GenericName[ne]=ICQ म्यासेन्जर +GenericName[nl]=ICQ-messenger +GenericName[nn]=Prateprogrammet ICQ +GenericName[pa]=ICQ ਸੁਨੇਹਾਕਾਰ +GenericName[pl]=Komunikator ICQ +GenericName[pt]=Mensageiro ICQ +GenericName[pt_BR]=ICQ +GenericName[ro]=Mesaje instantanee ICQ +GenericName[ru]=Клиент ICQ +GenericName[rw]=Mutangamakuru ICQ +GenericName[se]=ICQ-šleađgadiehti +GenericName[sl]=Sporočilnik ICQ +GenericName[sr]=ICQ гласник +GenericName[sr@Latn]=ICQ glasnik +GenericName[sv]=ICQ-meddelandeklient +GenericName[ta]=ICQ செய்தியாளர் +GenericName[te]=ఐసిక్యూ మెసేంజర్ +GenericName[tg]=Хабаргузории ICQ +GenericName[th]=โปรแกรมคุย ICQ +GenericName[tr]=ICQ Hızlı Mesajlaşma Programı +GenericName[tt]=ICQ Xäbärçe +GenericName[uk]=Кур'єр (messenger) ICQ +GenericName[uz]=ICQ xabar almashish vositasi +GenericName[uz@cyrillic]=ICQ хабар алмашиш воситаси +GenericName[vi]=Trình nhắn tin ICQ +GenericName[wa]=Messaedjreye ICQ +GenericName[zh_CN]=ICQ 信使 +GenericName[zh_TW]=ICQ 即時通訊 +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Internet/mldonkey_gui.desktop b/kappfinder/apps/Internet/mldonkey_gui.desktop new file mode 100644 index 000000000..ac692f4ef --- /dev/null +++ b/kappfinder/apps/Internet/mldonkey_gui.desktop @@ -0,0 +1,102 @@ +[Desktop Entry] +Exec=mldonkey_gui +Icon=xapp +Name=MLDonkey GTK+ Core Controller +Name[af]=MLDonkey GTK+ Beheerder +Name[be]=Кіраўнік ядра MLDonkey для GTK+ +Name[bn]=এম-এল-ডঙ্কি GTK+ কোর কন্ট্রোলার +Name[ca]=MLDonkey GTK+ Nucli controlador +Name[csb]=Kòntroléra MLDonkey (interfejs GTK+) +Name[cy]=Rheolydd Craidd MLDonkey GTK+ +Name[de]=Controller für MLDonkey/GTK+ +Name[eo]=MLDonkey GTK+ Kernadaptilo +Name[es]=Controlador central MLDonkey GTK+ +Name[eu]=MLDonkey GTK+ gune kontrolatzailea +Name[fa]=MLDonkey GTK+ کنترل‌کنندۀ هسته +Name[fr]=Contrôleur principal MLDonkey en GTK+ +Name[gl]=Controlador de MLDonkey GTK+ +Name[he]=בקר ליבת GTK+ MLDonkey +Name[hi]=एमएलडंकी जीटीके+ कोर नियंत्रक +Name[hr]=MLDonkey GTK+ središnji kontroler +Name[hu]=MLDonkey GTK+ vezérlőprogram +Name[it]=Controllo GTK+ di MLDonkey +Name[ja]=MLDonkey GTK+ コアコントローラ +Name[ka]=MLDonkey GTK+ ბირთვის კონტროლერი +Name[kk]=MLDonkey GTK+ негізгі контроллері +Name[ko]=MLDonkey GTK+ 코어 컨트롤러 +Name[lt]=MLDonkey GTK+ pagrindinis kontroleris +Name[lv]=MLDonkey GTK+ kodola kontrolieris +Name[ms]=Pengawal Utama GTK+ MLDonkey +Name[nds]=Karn-Kuntrull för MLDonkey/GTK+ +Name[ne]=MLDonkey GTK+ कोर नियन्त्रक +Name[pa]=MLDonkey GTK+ ਕੇਂਦਰੀ ਕੰਟਰੋਲਰ +Name[pl]=Kontroler MLDonkey (interfejs GTK+) +Name[pt]=Controlador de Base em GTK+ do MLDonkey +Name[pt_BR]=Controlador Principal do MLDonkey GTK+ +Name[ro]=Controlor central GTK+ MLDonkey +Name[ru]=Основной контроллер MLDonkey GTK+ +Name[rw]=MLDonkey GTK+ Mugenzura Ntima +Name[se]=MLDonkey GTK+ guovddášstivrejeaddji +Name[sk]=MLDonkey GTK+ ovládač jadra +Name[sl]=Krmilnik jedra MLDonkey GTK+ +Name[sv]=MLDonkey GTK+ kärnhantering +Name[ta]=eடாங்கி2000 GTK+ கட்டுப்பாட்டாளர் +Name[te]=ఎంఎల్ డాంకి జిటికె+ మూల కేంద్రం +Name[tg]=MLDonkey GTK+ Контрол кунандаи аслӣ +Name[th]=ตัวควบคุมกลางของ MLDonkey GTK+ +Name[tr]=MLDonkey GTK+ Denetleyicisi +Name[tt]=MLDonkey GTK+ öçen Töp İdärä +Name[vi]=MLDonkey GTK+ Lõi điểu khiển +Name[wa]=Controleur di MLDonkey GTK+ Core +Name[zh_CN]=MLDonkey GTK+ 核心控制器 +Name[zh_TW]=MLDonkey GTK+ 核心控制器 +GenericName=MLDonkey GUI +GenericName[az]=MLDonkey İAÜ +GenericName[be]=Графічны кліент MLDonkey +GenericName[bg]=ГПИ за MLDonkey +GenericName[bn]=এম-এল-ডঙ্কি গুই +GenericName[ca]=IGU per a MLDonkey +GenericName[csb]=Graficzny interfejs dlô MLDonkey +GenericName[de]=MLDonkey-Oberfläche +GenericName[et]=MLDonkey kasutajaliides +GenericName[fa]=ونک MLDonkey +GenericName[fi]=MLDonkey-käyttöliittymä +GenericName[fr]=Interface graphique pou MLDonkey +GenericName[ga]=Comhéadan Grafach MLDonkey +GenericName[gl]= GUI MLDonkey +GenericName[he]=ממשק גרפי ל־MLDonkey +GenericName[hi]=एमएलडंकी जीयूआई +GenericName[hr]=MLDonkey grafičko sučelje +GenericName[hu]=MLDonkey-felület +GenericName[is]=MLDonkey viðmót +GenericName[it]=GUI di MLDonkey +GenericName[ka]=გრაფიკული ინტერფეისი MLDonkey +GenericName[kk]=MLDonkey грфикалық интерфейсі +GenericName[lt]=MLDonkey grafinė naudotojo sąsaja +GenericName[mn]=MLDonkey Гадаргуу +GenericName[ms]=GUI MLDonkey +GenericName[mt]=Interfaċċja MLDonkey +GenericName[nb]=MLDonkey-grensesnitt +GenericName[nds]=Graafsche Böversiet för MLDonkey +GenericName[nn]=MLDonkey-grensesnitt +GenericName[pl]=Interfejs graficzny dla MLDonkey +GenericName[pt]=Interface do MLDonkey +GenericName[pt_BR]=Interface do MLDonkey +GenericName[ro]=Interfață grafică MLDonkey +GenericName[ru]=Графический интерфейс MLDonkey +GenericName[se]=MLDonkey-lakta +GenericName[sv]=MLDonkey grafiskt gränssnitt +GenericName[ta]=MLடாங்கி2000 ஜியுஐ +GenericName[te]=ఎంఎల్ డాంకి జియుఐ +GenericName[tg]=Робитаи графикии корбари MLDonkey +GenericName[th]=GUI สำหรับ MLDonkey +GenericName[tr]=MLDonkey Arayüzü +GenericName[tt]=MLDonkey Yözarası +GenericName[uk]=Інтерфейс для MLDonkey +GenericName[uz]=MLDonkey uchun grafik interfeys +GenericName[uz@cyrillic]=MLDonkey учун график интерфейс +GenericName[vi]=Giao diện MLDonkey +GenericName[wa]=Eterface grafike po MLDonkey +GenericName[zh_TW]=MLDonkey 圖型使用者介面 +Terminal=false +Type=Application diff --git a/kappfinder/apps/Internet/mozilla-firefox.desktop b/kappfinder/apps/Internet/mozilla-firefox.desktop new file mode 100644 index 000000000..6383a7d1b --- /dev/null +++ b/kappfinder/apps/Internet/mozilla-firefox.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Exec=firefox %u +Icon=firefox +Type=Application +Name=Firefox +Name[bn]=ফায়ারফক্স +Name[eo]=Mozilo Fajrovulpo +Name[fa]=فایرفاکس +Name[fi]=Mozilla Firefox +Name[hi]=फ़ायरफॉक्स +Name[km]=មេខលា +Name[ne]=फायरफक्स +Name[pa]=ਫਾਇਰਫਾਕਸ +Name[te]=ఫైర్ ఫాక్స్ +Name[th]=ไฟร์ฟอกซ์ +Name[zh_TW]=火狐貍 +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +MimeType=text/html +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Internet/mozilla-thunderbird.desktop b/kappfinder/apps/Internet/mozilla-thunderbird.desktop new file mode 100644 index 000000000..99e42bc69 --- /dev/null +++ b/kappfinder/apps/Internet/mozilla-thunderbird.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Exec=thunderbird +Icon=thunderbird +Type=Application +Name=Thunderbird +Name[bn]=থাণ্ডারবার্ড +Name[el]=Mozilla Thunderbird +Name[eo]=Mozilo Tondrobirdo +Name[fa]=تاندربرد +Name[fi]=Mozilla Thunderbird +Name[hi]=थंडरबर्ड +Name[km]=មយូរា +Name[ne]=थन्डरबर्ड +Name[pa]=ਥੰਡਰਬਰਡ +Name[te]=థండర్ బర్డ్ +Name[th]=ธันเดอร์เบิร์ด +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Internet/mozilla.desktop b/kappfinder/apps/Internet/mozilla.desktop new file mode 100644 index 000000000..355f7db30 --- /dev/null +++ b/kappfinder/apps/Internet/mozilla.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Exec=mozilla %u +Icon=mozilla +Type=Application +Name=Mozilla +Name[bn]=মোজিলা +Name[eo]=Mozilo +Name[fa]=موزیلا +Name[hi]=मोज़िला +Name[lo]=ມໍຊີລາ +Name[mn]=Мозилла +Name[ne]=मोजिला +Name[pa]=ਮੌਜੀਲਾ +Name[ta]=மொசில்லா +Name[te]=మోజిల్లా +Name[th]=มอซซิลลา +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +MimeType=text/html +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Internet/netscape.desktop b/kappfinder/apps/Internet/netscape.desktop new file mode 100644 index 000000000..2e6fa4e83 --- /dev/null +++ b/kappfinder/apps/Internet/netscape.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +Exec=netscape %u +Icon=netscape +Type=Application +Name=Netscape +Name[bn]=নেটস্কেপ +Name[eo]=Netskapo +Name[fa]=نت‌اسکیپ +Name[hi]=नेटस्केप +Name[lo]=ເນດເຄບ +Name[mn]=Нэтскафе +Name[ne]=नेटस्केप +Name[pa]=ਨੈਟਸਕੇਪ +Name[rw]= Netscape +Name[ta]=நெட்ஸ்கேப் +Name[te]=నెట్ స్కేప్ +Name[th]=เน็ตสเคป +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +MimeType=text/html +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Internet/netscape6.desktop b/kappfinder/apps/Internet/netscape6.desktop new file mode 100644 index 000000000..f64d88056 --- /dev/null +++ b/kappfinder/apps/Internet/netscape6.desktop @@ -0,0 +1,108 @@ +[Desktop Entry] +Exec=netscape6 %u +Icon=netscape +Type=Application +Name=Netscape6 +Name[bn]=নেটস্কেপ৬ +Name[cs]=Netscape 6 +Name[de]=Netscape 6 +Name[eo]=Netskapo 6 +Name[fa]=نت‌اسکیپ ۶ +Name[fr]=Netscape 6 +Name[hi]=नेटस्केप6 +Name[hu]=Netscape 6 +Name[lo]=ເນດເຄບ 6 +Name[mn]=Нэтскафе 6 +Name[ne]=नेटस्केप ६ +Name[nn]=Netscape 6 +Name[pa]=ਨੈਟਸਕੇਪ6 +Name[pt_BR]=Netscape 6 +Name[ro]=Netscape 6 +Name[se]=Netscape 6 +Name[sv]=Netscape 6 +Name[ta]=நெட்ஸ்கேப்6 +Name[te]=నెట్ స్కేప్6 +Name[th]=เน็ตสเคป 6 +Name[wa]=Netscape 6 +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +MimeType=text/html +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Internet/opera.desktop b/kappfinder/apps/Internet/opera.desktop new file mode 100644 index 000000000..cb15acfb7 --- /dev/null +++ b/kappfinder/apps/Internet/opera.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Opera +Name[bn]=অপেরা +Name[eo]=Opero +Name[fa]=اپرا +Name[hi]=ऑपेरा +Name[lo]=ໂອເປຣາ +Name[mk]=Опера +Name[ne]=अपेरा +Name[pa]=ਓਪੇਰਾ +Name[ta]=ஓபேரா +Name[te]=ఓపెరా +Name[th]=โอเปรา +GenericName=Web Browser +GenericName[af]=Web Blaaier +GenericName[ar]=متصفح الشبكة +GenericName[az]=Veb Səyyahı +GenericName[be]=Вандроўнік па Сеціве +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[br]=Furcher ar Gwiad +GenericName[bs]=WWW Preglednik +GenericName[ca]=Fullejador web +GenericName[cs]=WWW prohlížeč +GenericName[csb]=Przezérnik WWW +GenericName[cy]=Porydd Gwe +GenericName[da]=Browser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[eo]=TTT-legilo +GenericName[es]=Navegador web +GenericName[et]=Veebilehitseja +GenericName[eu]=Web arakatzailea +GenericName[fa]=مرورگر وب‌ +GenericName[fi]=WWW-selain +GenericName[fo]=Alnótsfar +GenericName[fr]=Navigateur web +GenericName[fy]=Webblêder +GenericName[ga]=Brabhsálaí Lín +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peselancar Web +GenericName[is]=Vafri +GenericName[it]=Browser Web +GenericName[ja]=ウェブブラウザ +GenericName[ka]=ვებ–ბრაუზერი +GenericName[kk]=Веб браузер +GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ +GenericName[ko]=웹 브라우저 +GenericName[lo]=ເວັບບຣາວເຊີ +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa Pārlūks +GenericName[mk]=Прелистувач на Интернет +GenericName[mn]=Веб-Хөтөч +GenericName[ms]=Pelayar Web +GenericName[nb]=Nettleser +GenericName[nds]=Nettkieker +GenericName[ne]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[nso]=Seinyakisi sa Web +GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator de web +GenericName[ru]=Веб-браузер +GenericName[rw]=Mucukumbuzi Urubuga +GenericName[se]=Fierpmádatlogan +GenericName[sk]=Webový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Веб прегледач +GenericName[sr@Latn]=Veb pregledač +GenericName[ss]=Ibrawuza yeWeb +GenericName[sv]=Webbläsare +GenericName[ta]=வலை உலாவி +GenericName[te]=వెబ్ బ్రౌజర్ +GenericName[tg]=Тафсиргари вэб +GenericName[th]=เว็บบราวเซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[uk]=Навігатор Тенет +GenericName[uz]=Veb-brauzer +GenericName[uz@cyrillic]=Веб-браузер +GenericName[ven]=Buronza ya Webu +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu waibe +GenericName[xh]=Umkhangeli zincwadi we Web +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 +GenericName[zu]=Umcingi we-Web +Exec=opera %u +Terminal=false +Icon=opera +Type=Application +MimeType=text/html diff --git a/kappfinder/apps/Internet/wireshark.desktop b/kappfinder/apps/Internet/wireshark.desktop new file mode 100644 index 000000000..008139610 --- /dev/null +++ b/kappfinder/apps/Internet/wireshark.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Name=Wireshark +Name[bn]=ওয়ায়ার-শার্ক +Name[ne]=वायरसार्क +Name[pa]=ਵਾਇਰਸ਼ਾਰਕ +Name[te]=వైర్ షార్క్ +GenericName=Network Analyzer +GenericName[af]=Netwerk Analiseerder +GenericName[ar]=محلل الشبكة +GenericName[az]=Şəbəkə Analiz Proqramı +GenericName[be]=Аналізатар сеткі +GenericName[bg]=Мрежов анализатор +GenericName[bn]=নেটওয়ার্ক বিশ্লেষণকারী +GenericName[bs]=Mrežni analizer +GenericName[ca]=Analitzador de xarxes +GenericName[cs]=Analyzátor sítě +GenericName[csb]=Analizatora séce +GenericName[cy]=Dadansoddwr Rhwydwaith +GenericName[da]=Netværksanalyse +GenericName[de]=Programm für die Netzwerkanalyse +GenericName[el]=Αναλυτής δικτύων +GenericName[en_GB]=Network Analyser +GenericName[eo]=Retanalizilo +GenericName[es]=Analizador de redes +GenericName[et]=Võrguliikluse analüsaator +GenericName[eu]=Sare aztertzailea +GenericName[fa]=تحلیل‌کنندۀ شبکه +GenericName[fi]=Verkkoanalysaattori +GenericName[fr]=Analyseur réseau +GenericName[fy]=Netwurkanalyze +GenericName[ga]=Anailíseoir Líonra +GenericName[gl]=Análisador da Rede +GenericName[he]=מאבחן רשת +GenericName[hi]=नेटवर्क एनॉलाइज़र +GenericName[hr]=Analizator mreže +GenericName[hu]=Hálózatanalizáló +GenericName[id]=Analisis jaringan +GenericName[is]=Netskoðunartól +GenericName[it]=Analizzatore di rete +GenericName[ja]=ネットワークアナライザ +GenericName[ka]=ქსელის ანალიზატორი +GenericName[kk]=Желіні талдаушы +GenericName[km]=កម្មវិធី​វិភាគ​បណ្ដាញ +GenericName[ko]=네트워크 분석기 +GenericName[lo]=ເຄື່ອງມືວິເຄາະເຄືອຂ່າຍ +GenericName[lt]=Tinklo analizatorius +GenericName[lv]=Tīkla Analizators +GenericName[mk]=Анализатор на мрежи +GenericName[mn]=Сүлжээ-шинжлэлийн програм +GenericName[ms]=Penganalisis Rangkaian +GenericName[mt]=Analizzatur tan-network +GenericName[nb]=Nettverksanalyse +GenericName[nds]=Ünnersöcht dat Nettwark +GenericName[ne]=सञ्जाल विश्लेषक +GenericName[nl]=Netwerkanalyse +GenericName[nn]=Nettverksanalyse +GenericName[nso]=Moahlaahli wa Kgokagano +GenericName[pa]=ਨੈੱਟਵਰਕ ਜਾਂਚਕਾਰ +GenericName[pl]=Analizator sieci +GenericName[pt]=Analisador de Redes +GenericName[pt_BR]=Analisador de rede +GenericName[ro]=Analizor de rețea +GenericName[ru]=Анализатор сетевого трафика +GenericName[rw]=Musesenguzi w'Urusobemiyoboro +GenericName[se]=Fierbmeanalysa +GenericName[sk]=Analyzátor siete +GenericName[sl]=Analizator omrežij +GenericName[sr]=Анализатрор мреже +GenericName[sr@Latn]=Analizatror mreže +GenericName[ss]=Sihlatiyi seluchungechunge +GenericName[sv]=Nätverksanalyserare +GenericName[ta]=நெட்வொர்க் அனலைசர் +GenericName[te]=నెట్వర్క్ ను పరిశీలించే కార్యక్రమం +GenericName[tg]=Таҳлилгари шабака +GenericName[th]=เครื่องมือวิเคราะห์เครือข่าย +GenericName[tr]=Ağ Analiz Programı +GenericName[tt]=Çeltär Centekläwçe +GenericName[uk]=Аналізатор мережі +GenericName[uz]=Tarmoqni tahlil qilish vositasi +GenericName[uz@cyrillic]=Тармоқни таҳлил қилиш воситаси +GenericName[ven]=Musengulusi wa Vhukwamani +GenericName[vi]=Trình phân tích mạng +GenericName[wa]=Analijheu rantoele +GenericName[xh]=Umcukucezi Womsebenzi womnatha +GenericName[zh_CN]=网络分析程序 +GenericName[zh_TW]=網路分析程式 +GenericName[zu]=Umhloli Woxhumano olusakazekile +Exec=wireshark +Type=Application +MimeType= +Icon=xmag +Terminal=false +Path= diff --git a/kappfinder/apps/Internet/xbiff.desktop b/kappfinder/apps/Internet/xbiff.desktop new file mode 100644 index 000000000..b5ae8fb7a --- /dev/null +++ b/kappfinder/apps/Internet/xbiff.desktop @@ -0,0 +1,101 @@ +[Desktop Entry] +SwallowExec=xbiff +SwallowTitle=X Biff +SwallowTitle[pl]=X Biff +SwallowTitle[no]=X Biff +Name=X Biff +Name[bn]=এক্স বিফ +Name[de]=X-Biff +Name[eo]=XBifo +Name[es]=Biff para X +Name[fr]=XBiff +Name[hi]=एक्स बिफ़ +Name[mn]=X-Biff +Name[nds]=X-Biff +Name[ne]=X बिफ +Name[sv]=X biff +Name[ta]=X பிஃப் +Name[te]=ఎక్స్ బిఫ్ +Name[uk]=X-Biff +GenericName=Mail Alert +GenericName[af]=Pos Waarskuwing +GenericName[ar]=منبه البريد +GenericName[az]=Poçt Xəbərçisi +GenericName[be]=Нагадванне аб новай пошце +GenericName[bg]=Аларма за поща +GenericName[bn]=চিঠি এসেছে +GenericName[bs]=Obavještavanje o pristigloj pošti +GenericName[ca]=Alerta per al correu +GenericName[cs]=Upozornění na poštu +GenericName[csb]=Wiadło o pòczce +GenericName[cy]=Rhybudd Ebost +GenericName[da]=Postadvarsel +GenericName[de]=E-Mail-Benachrichtigung +GenericName[el]=Ειδοποίηση για mail +GenericName[eo]=Retpoŝtavertilo +GenericName[es]=Alerta de correo +GenericName[et]=Kirjde monitor +GenericName[eu]=Mail jakinarazpena +GenericName[fa]=هشدار نامه +GenericName[fi]=Sähköpostivaroitus +GenericName[fo]=Postkomufráboðan +GenericName[fr]=Surveillance du courrier électronique +GenericName[fy]=E-postnotifikaasje +GenericName[ga]=Fógairt Ríomhphoist +GenericName[gl]=Alerta de Correo +GenericName[he]=הודעה לגבי דואר +GenericName[hi]=डाक सतर्क +GenericName[hr]=Upozoravanje o novom e-pismu +GenericName[hu]=Levélfigyelő +GenericName[is]=Fylgist með pósti +GenericName[it]=Programma per controllare la posta +GenericName[ja]=メールの通知 +GenericName[ka]=ფოსტის განგაში +GenericName[kk]=Келген пошта туралы хабарлау +GenericName[km]=ការជូនដំណឹង​អំពី​សំបុត្រ +GenericName[ko]=메일 알림이 +GenericName[lo]=ແຈ້ງເຕືອນຈົດຫມາຍ +GenericName[lt]=Pašto pranešėjas +GenericName[lv]=Pasta Brīdinājums +GenericName[mk]=Известувач за е-пошта +GenericName[mn]=Э-Захиа-Мэдээлэгч +GenericName[ms]=Amaran Mel +GenericName[mt]=Twissija tal-imejl +GenericName[nb]=E-postvarsel +GenericName[nds]=Nettpost-Alarm +GenericName[ne]=पत्र चेतावनी +GenericName[nl]=E-mailnotificatie +GenericName[nn]=E-postvarsel +GenericName[nso]=Theeletso ya Poso +GenericName[pa]=ਪੱਤਰ ਚੇਤਾਵਨੀ +GenericName[pl]=Powiadamianie o poczcie +GenericName[pt]=Alerta de E-mail +GenericName[pt_BR]=Alerta de Correio +GenericName[ro]=Alertare la email nou +GenericName[ru]=Извещения о новой почте +GenericName[rw]=Iburira ry'Ubutumwa +GenericName[se]=E-boastaávaštus +GenericName[sk]=Upozornenie na poštu +GenericName[sl]=Obvestilo o pošti +GenericName[sr]=Поштански аларм +GenericName[sr@Latn]=Poštanski alarm +GenericName[ss]=Sicwayisi seliposi +GenericName[sv]=E-postunderrättare +GenericName[ta]=அஞ்சல் எச்சரிக்கை +GenericName[tg]=Маълумот диҳии почтаи электроникӣ +GenericName[th]=แจ้งเตือนจดหมาย +GenericName[tr]=Midi Uyarısı +GenericName[tt]=Xat turında Beldergeç +GenericName[uk]=Повідомлення пошти +GenericName[uz]=Yangi xat haqida xabar beruvchi +GenericName[uz@cyrillic]=Янги хат ҳақида хабар берувчи +GenericName[ven]=U sedzesa poso +GenericName[vi]=Thông báo có thư +GenericName[wa]=Abranle pa emile +GenericName[xh]=Ulumkiso Lweposi +GenericName[zh_CN]=邮件提示程序 +GenericName[zh_TW]=郵件提示 +GenericName[zu]=Ukuqwashisa ngeposi +Icon=email +Type=Application +Terminal=false diff --git a/kappfinder/apps/Internet/xchat.desktop b/kappfinder/apps/Internet/xchat.desktop new file mode 100644 index 000000000..0569a01f6 --- /dev/null +++ b/kappfinder/apps/Internet/xchat.desktop @@ -0,0 +1,82 @@ +[Desktop Entry] +Exec=xchat +Icon=xchat +Type=Application +Name=XChat +Name[az]=XChart +Name[bn]=এক্স-চ্যাট +Name[eo]=XBabilado +Name[hi]=एक्स चैट +Name[lo]=X chat +Name[ne]=X कुराकानी +Name[rw]=X-Ikiganiro +Name[sv]=Xchat +Name[ta]=Xஅரட்டை +Name[te]=ఎక్స్ చాట్ +Name[tr]=XChart +Name[ven]=Nyambedzano ya X +Name[zu]=I-XChat +GenericName=IRC Chat +GenericName[af]=IRC Kliënt +GenericName[be]=Кліент IRC +GenericName[bg]=Разговор по IRC +GenericName[bn]=আই-আর-সি আড্ডা +GenericName[br]=Flapañ IRC +GenericName[bs]=IRC chat +GenericName[ca]=Xat IRC +GenericName[cs]=IRC chat +GenericName[csb]=Klient IRC +GenericName[da]=IRC-chat +GenericName[de]=IRC-Chat +GenericName[el]=Πελάτης συζήτησης IRC +GenericName[eo]=IRC-kliento +GenericName[es]=Cliente IRC +GenericName[et]=IRC vestlus +GenericName[fa]=گپ IRC +GenericName[fi]=IRC-asiakasohjelma +GenericName[fr]=Discussion IRC +GenericName[ga]=Comhrá IRC +GenericName[gl]=Cliente de IRC +GenericName[he]=שיחת IRC +GenericName[hr]=IRC brbljanje +GenericName[hu]=IRC-kliens +GenericName[is]=IRC spjall +GenericName[it]=Chat IRC +GenericName[ja]=IRC チャット +GenericName[ka]=IRC ჩეთი +GenericName[kk]=IRC клиенті +GenericName[km]=កម្មវិធី​ជជែក​កំសាន្ត IRC +GenericName[lt]=IRC pokalbiai +GenericName[mk]=Разговори на IRC +GenericName[ms]=Chat IRC +GenericName[nb]=Prateprogram +GenericName[nds]=IRC-Klönen +GenericName[ne]=IRC कुराकानी +GenericName[nl]=IRC-chat +GenericName[nn]=IRC-prateprogram +GenericName[pa]=IRC ਗੱਲਬਾਤ +GenericName[pl]=Klient IRC +GenericName[pt]=Conversas de IRC +GenericName[pt_BR]=Cliente IRC +GenericName[ro]=Convorbiri IRC +GenericName[ru]=Клиент IRC +GenericName[rw]=Ikiganiro IRC +GenericName[se]=IRC-čátta +GenericName[sk]=IRC chat +GenericName[sl]=Klepet IRC +GenericName[sr]=IRC ћаскање +GenericName[sr@Latn]=IRC ćaskanje +GenericName[sv]=IRC-chatt +GenericName[ta]=IRC அரட்டை +GenericName[te]=ఐఆర్ సి సంభాషణ +GenericName[tg]=IRC Чат +GenericName[th]=โปรแกรมคุยผ่าน IRC +GenericName[tr]=IRC Programı +GenericName[tt]=IRC Çatı +GenericName[uk]=Балачка IRC +GenericName[uz]=IRC klienti +GenericName[uz@cyrillic]=IRC клиенти +GenericName[vi]=Nhắn tin nhanh IRC +GenericName[wa]=Berdelaedje IRC +GenericName[zh_CN]=IRC 聊天 + diff --git a/kappfinder/apps/Internet/xfmail.desktop b/kappfinder/apps/Internet/xfmail.desktop new file mode 100644 index 000000000..b48e5cf6a --- /dev/null +++ b/kappfinder/apps/Internet/xfmail.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Exec=xfmail +Icon=xfmail +Type=Application +Name=XFMail +Name[eo]=XfPoŝto +Name[hi]=एक्सएफमेल +Name[lo]=XfMail +Name[ne]=XF मेल +Name[nso]=XFPoso +Name[pa]=XF-ਮੇਲ +Name[rw]=XF-Ubutumwa +Name[sv]=Xfmail +Name[ta]=XFமின்னஞ்சல் +Name[te]=ఎక్స్ ఎఫ్ మెయిల్ +Name[ven]=Poso ya XF +Name[zu]=Iposi ye-XF +GenericName=Mail Client +GenericName[af]=Pos Kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[bn]=ইমেইল ক্লায়েন্ট +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu electrònic +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[csb]=E-mailowô programa +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=E-Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo electrónico +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارساز نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fo]=Postforrit +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-post programma +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=תוכנית דואר +GenericName[hi]=डाकिया +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტა +GenericName[kk]=Эл.пошта клиенті +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[ko]=메일 클라이언트 +GenericName[lo]=ໄຄແເອັນຈົດຫມາຍເອເລັກໂຕນິກ +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Програма за електронска пошта +GenericName[mn]=Э-Захиа-Програм +GenericName[ms]=Klien Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=Lesing og sending av e-post +GenericName[nds]=Nettpostprogramm +GenericName[ne]=पत्र ग्राहक +GenericName[nl]=E-mailclient +GenericName[nn]=Lesing og sending av e-post +GenericName[nso]=Moreki wa Poso +GenericName[oc]=Programari de correu electrònic +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program do wysyłania i odbierania poczty elektronicznej +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poștă electronică +GenericName[ru]=Клиент электронной почты +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=Boastaprográmma +GenericName[sk]=Klient elektronickej pošty +GenericName[sl]=Program za e-pošto +GenericName[sr]=Програм за e-пошту +GenericName[sr@Latn]=Program za e-poštu +GenericName[ss]=Likhasimende leliposi +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் உறுப்பினர் +GenericName[te]=మెయిల్ క్లైంట్ +GenericName[tg]=Коргири почтаи эллектроникӣ +GenericName[th]=โปรแกรมไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=Posta İstemcisi +GenericName[tt]=Xat Kliente +GenericName[uk]=Клієнт електронної пошти +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[vi]=Trình thư +GenericName[wa]=Cliyint d' emilaedje +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件程序 +GenericName[zh_TW]=郵件處理程式 +GenericName[zu]=Umxhasi weposi diff --git a/kappfinder/apps/Internet/xftp.desktop b/kappfinder/apps/Internet/xftp.desktop new file mode 100644 index 000000000..36ecfa773 --- /dev/null +++ b/kappfinder/apps/Internet/xftp.desktop @@ -0,0 +1,88 @@ +[Desktop Entry] +Name=X FTP +Name[bn]=এক্স এফ-টি-পি +Name[de]=X-FTP +Name[eo]=XFtp +Name[es]=FTP para X +Name[fr]=XFTP +Name[hi]=एक्स एफटीपी +Name[mn]=X-FTP +Name[nds]=X-FTP +Name[nn]=X-FTP +Name[se]=X-FTP +Name[te]=ఎక్స్ ఎఫ్ టి పి +Name[uk]=X-FTP +MimeType= +GenericName=FTP Browser +GenericName[af]=FTP Blaaiër +GenericName[ar]=متصفح ميفاق نقل الملفات FTP +GenericName[be]=Кліент FTP +GenericName[bg]=FTP браузър +GenericName[bn]=এফ-টি-পি ব্রাউজার +GenericName[br]=Furcher FTP +GenericName[bs]=FTP preglednik +GenericName[ca]=Fullejador FTP +GenericName[cs]=FTP prohlížeč +GenericName[csb]=Przezérnik FTP +GenericName[da]=FTP-Browser +GenericName[de]=FTP-Browser +GenericName[el]=Περιηγητής FTP +GenericName[eo]=FTP-Foliumilo +GenericName[es]=Navegador FTP +GenericName[et]=FTP lehitseja +GenericName[eu]=FTP arakatzailea +GenericName[fa]=مرورگر قاپ‌ +GenericName[fi]=FTP-selain +GenericName[fr]=Navigateur FTP +GenericName[fy]=FTP-blêder +GenericName[ga]=Brabhsálaí FTP +GenericName[gl]=Navegador FTP +GenericName[he]=דפדפן FTP +GenericName[hr]=FTP preglednik +GenericName[hu]=FTP-böngésző +GenericName[id]=Peselancar FTP +GenericName[is]=FTP vafri +GenericName[it]=Browser FTP +GenericName[ja]=FTP ブラウザ +GenericName[ka]=FTP-ბრაუზერი +GenericName[kk]=FTP браузері +GenericName[km]=កម្មវិធី​រុករក FTP +GenericName[ko]=FTP 탐색기 +GenericName[lt]=FTP naršyklė +GenericName[mk]=FTP-прелистувач +GenericName[ms]=Pelayar FTP +GenericName[nb]=FTP-leser +GenericName[nds]=FTP-Nettkieker +GenericName[ne]=FTP ब्राउजर +GenericName[nl]=FTP-browser +GenericName[nn]=FTP-lesar +GenericName[pa]=FTP ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka FTP +GenericName[pt]=Navegador de FTP +GenericName[pt_BR]=Navegador FTP +GenericName[ro]=Navigator FTP +GenericName[ru]=FTP-браузер +GenericName[rw]=Mucukumbuzi FTP +GenericName[se]=FTP-logan +GenericName[sk]=FTP prehliadač +GenericName[sl]=Brskalnik po FTP +GenericName[sr]=FTP прегледач +GenericName[sr@Latn]=FTP pregledač +GenericName[sv]=FTP-bläddrare +GenericName[ta]=எஃப்டிபி உலாவி +GenericName[te]=ఎఫ్ టి పి బ్రౌజర్ +GenericName[tg]=Барномаи нозири FTP +GenericName[th]=โปรแกรมเรียกดู FTP +GenericName[tr]=FTP Tarayıcı +GenericName[uk]=Навігатор FTP +GenericName[uz]=FTP-brauzer +GenericName[uz@cyrillic]=FTP-браузер +GenericName[vi]=Trình duyệt mạng +GenericName[wa]=Betchteu FTP +GenericName[zh_CN]=FTP 浏览器 +GenericName[zh_TW]=FTP 瀏覽器 +Exec=xftp +Icon=xapp +Path= +Type=Application +Terminal=false diff --git a/kappfinder/apps/Makefile.am b/kappfinder/apps/Makefile.am new file mode 100644 index 000000000..645a4aa45 --- /dev/null +++ b/kappfinder/apps/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = Internet Development Graphics System \ + Utilities Office Multimedia Games diff --git a/kappfinder/apps/Multimedia/Aumix.desktop b/kappfinder/apps/Multimedia/Aumix.desktop new file mode 100644 index 000000000..9bde2e807 --- /dev/null +++ b/kappfinder/apps/Multimedia/Aumix.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=Aumix +Name[bn]=অমিক্স +Name[eo]=Sonmiksilo +Name[hi]=ऑमिक्स +Name[ne]=अउमिक्स +Name[pa]=ਊਮਿਕਸ +Name[te]=ఎయూమిక్స్ +GenericName=Audio Mixer +GenericName[af]=Klank Menger +GenericName[ar]=مازج الصوت +GenericName[az]=Səs Mikseri +GenericName[be]=Міксер гуку +GenericName[bg]=Аудио миксер +GenericName[bn]=অডিও মিক্সার +GenericName[br]=Mesker klevet +GenericName[bs]=Audio mixer +GenericName[ca]=Mesclador de so +GenericName[cs]=Zvukový směšovač +GenericName[csb]=Mikser audio +GenericName[cy]=Cymysgydd Sain +GenericName[da]=Lydmikser +GenericName[el]=Μείκτης ήχου +GenericName[eo]=Miksilo por sonoj +GenericName[es]=Mezclador audio +GenericName[et]=Audiomikser +GenericName[eu]=Audio nahasgailua +GenericName[fa]=مخلوط‌کن خودکار +GenericName[fi]=Äänimikseri +GenericName[fr]=Console de mixage +GenericName[fy]=Audiomikser +GenericName[ga]=Meascthóir fuaime +GenericName[gl]=Mesturador de Son +GenericName[he]=מערבל שמע +GenericName[hi]=ऑडियो मिक्सर +GenericName[hr]=Audio mikser +GenericName[hu]=Hangkeverő +GenericName[is]=Hljóðblöndun +GenericName[it]=Mixer +GenericName[ja]=オーディオミキサー +GenericName[ka]=აუდიო მიქსერი +GenericName[kk]=Дыбыс микшері +GenericName[km]=កម្មវិធី​លាយ​អូឌីយ៉ូ +GenericName[ko]=소리 믹서 +GenericName[lo]=ປັບແຕ່ງລະບົບສງງ +GenericName[lt]=Audio mikšeris +GenericName[lv]=Audio Mikseris +GenericName[mk]=Аудио миксета +GenericName[mn]=Дууны найруулагч +GenericName[ms]=Pengadun Audio +GenericName[mt]=Mikser tal-awdjo +GenericName[nb]=Lydmikser +GenericName[nds]=Audio-Mischer +GenericName[ne]=अडियो मिश्रक +GenericName[nl]=Audiomixer +GenericName[nn]=Lydmiksar +GenericName[nso]=Motswaki wa Audio +GenericName[pa]=ਆਡੀਓ ਮਿਕਸਰ +GenericName[pl]=Mikser audio +GenericName[pt]=Mesa de Mistura +GenericName[pt_BR]=Mixer de Áudio +GenericName[ro]=Mixer audio +GenericName[ru]=Аудио микшер +GenericName[rw]=Muvanga Majwi +GenericName[se]=Jietnaseagoheaddji +GenericName[sk]=Zvukový mixér +GenericName[sl]=Mešalnik zvoka +GenericName[sr]=Аудио миксер +GenericName[sr@Latn]=Audio mikser +GenericName[ss]=Sididiyeli semsidvo +GenericName[sv]=Ljudmixer +GenericName[ta]=ஒலி கலப்பான் +GenericName[te]=శబ్దాలను కలిపే కార్యక్రమం +GenericName[tg]=Аудио микшер +GenericName[th]=ปรับแต่งระบบเสียง +GenericName[tr]=Ses Karıştırıcısı +GenericName[tt]=Tawış Quşqıç +GenericName[uk]=Аудіомікшер +GenericName[uz]=Audio mikser +GenericName[uz@cyrillic]=Аудио миксер +GenericName[ven]=Tshitanganisi tsha phosho +GenericName[vi]=Bộ hoà âm +GenericName[wa]=Maxheu d' son +GenericName[xh]=Umxubi Wokuvakalayo +GenericName[zh_CN]=混音器 +GenericName[zh_TW]=混音程式 +GenericName[zu]=Umxubi Womsindo +Exec=aumix +Terminal=false +Icon=aumix +Type=Application diff --git a/kappfinder/apps/Multimedia/Grip.desktop b/kappfinder/apps/Multimedia/Grip.desktop new file mode 100644 index 000000000..8cc57a6b4 --- /dev/null +++ b/kappfinder/apps/Multimedia/Grip.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=Grip +Name[bn]=গ্রিপ +Name[eo]=Gripo +Name[fa]=چنگ زدن +Name[fr]=GRip +Name[hi]=ग्रिप +Name[ne]=ग्रिप +Name[pa]=ਗਰਿੱਪ +Name[rw]=Gufata +Name[ss]=Bamba +Name[ta]=கிர்ப் +Name[te]=గ్రిప్ +Name[tr]=CD Çalıcı ve Aktarıcı +Name[ven]=Ombelele +Name[zu]=Bamba +GenericName=CD Player/Ripper +GenericName[af]=Cd Speler/Ripper +GenericName[ar]=قارئ/منتشل الأقراص المدمجة +GenericName[az]=CD Çalğıcısı/Açıcısı +GenericName[be]=Прайгравальнік/выціскальнік гуку для CD +GenericName[bg]=CD плеър/Записвачка +GenericName[bn]=সিডি প্লেয়ার/রিপার +GenericName[br]=Ur c'hoarier/eztenner CD +GenericName[ca]=Reproductor/gravador de CD +GenericName[cs]=CD přehrávač/ripper +GenericName[csb]=Grôcz ë wypôlôrz CD +GenericName[cy]=Rhwygwr/Chwaraewr CD +GenericName[da]=Cd-afspiller/ripper +GenericName[de]=CDs wiedergeben und auslesen +GenericName[el]=Αναπαραγωγέας CD/Ripper +GenericName[eo]=Ludilo kaj ellegilo por muzikaj lumdiskoj +GenericName[es]=Reproductor/Extractor de CD +GenericName[et]=CD mängija/rippija +GenericName[eu]=CD jolea/ripper-a +GenericName[fa]=پخش‌کننده/چاک‌دهنده دیسک فشرده +GenericName[fi]=CD-soitin/lukija +GenericName[fo]=Fløguspælari og avritari +GenericName[fr]=Lecteur / extracteur de CD audio +GenericName[fy]=cd-spiler/ripper +GenericName[ga]=Seinnteoir/Roiseálaí Dlúthdhioscaí +GenericName[gl]=Reprodutor de CD/Extractor +GenericName[he]=נגן\Ripper לתקליטורים +GenericName[hi]=सीडी प्लेयर/रिप्पर +GenericName[hr]=CD svirač/skidač +GenericName[hu]=CD-lejátszó és -másoló +GenericName[is]=CD spilari/afritari +GenericName[it]=Lettore/ripper CD +GenericName[ja]=CD プレーヤ/リッパー +GenericName[kk]=CD плейер/риппер +GenericName[km]=កម្មវិធី​ចាក់/ច្រៀក​ស៊ីឌី +GenericName[ko]=CD 재생기/추출기 +GenericName[lo]=ເຄື່ອງມືຫລິ້ນຊີດີ +GenericName[lt]=CD grotuvas/riperis +GenericName[lv]=CD Atskaņotājs/Rippers +GenericName[mn]=КД тоглуулагч/хураагч +GenericName[ms]=Pemain/Pengekstrak CD +GenericName[mt]=Plejer/"ripper" tas-CDs +GenericName[nb]=CD-spiller/opptaker +GenericName[nds]=CD-Afspeler/-Ripper +GenericName[ne]=CD प्लेएर/रिपर +GenericName[nl]=cd-speler/ripper +GenericName[nn]=CD-spelar/-opptakar +GenericName[nso]=CD Sebapadi/Ripper +GenericName[pa]=CD ਪਲੇਅਰ/ਰਿਪਰ +GenericName[pl]=Odtwarzacz i wypalacz CD +GenericName[pt]=Reprodutor/Extractor de CDs +GenericName[pt_BR]=Reprodutor/Ripador de CDs +GenericName[ro]=Redare/scriere CD +GenericName[ru]=CD плейер/риппер +GenericName[rw]=Igikina/Igikata CD +GenericName[se]=CD-čuojan/-báddejeaddji +GenericName[sk]=CD prehrávač +GenericName[sl]=Predvajalnik/zajemalnik CD-jev +GenericName[sr]=CD пуштач/рипер +GenericName[sr@Latn]=CD puštač/riper +GenericName[ss]=Sidlali ma-CD/i-Ripper +GenericName[sv]=Cd-spelare/avläsare +GenericName[ta]=சிடி சாதனம்/ரிப்பர் +GenericName[te]=సిడి ప్లేయర్/రిప్పర్ +GenericName[tg]=CD плейер/риппер +GenericName[th]=เครื่องมือเล่นซีดี/บันทึกเพลงจากซีดี +GenericName[tr]=CD Çalıcı/Aktarıcı +GenericName[tt]=CD Uynatqıç/Talawçı +GenericName[uk]=Програвач/записувач КД +GenericName[uz]=Kompakt-disk pleyer/ripper +GenericName[uz@cyrillic]=Компакт-диск плейер/риппер +GenericName[ven]=Tshitambi tsha CD/Ripper +GenericName[vi]=Trình chơi/thu đĩa CD +GenericName[wa]=Djouweu/copieu di plakes lazer +GenericName[xh]=Umdlali we CD/Umsiki +GenericName[zh_CN]=CD 播放/抓取程序 +GenericName[zh_TW]=CD 播放程式/音軌擷取程式 +GenericName[zu]=Umdlali we-CD/Ripper +Exec=grip +Terminal=false +Icon=grip +Type=Application diff --git a/kappfinder/apps/Multimedia/MP3info.desktop b/kappfinder/apps/Multimedia/MP3info.desktop new file mode 100644 index 000000000..e02f4c08d --- /dev/null +++ b/kappfinder/apps/Multimedia/MP3info.desktop @@ -0,0 +1,66 @@ +[Desktop Entry] +Name=MP3 Info +Name[az]=MP3 mə'lumatı +Name[bn]=এম.পি-৩ তথ্য +Name[br]=Titouroù MP3 +Name[bs]=MP3 info +Name[ca]=Informació MP3 +Name[cs]=MP3 info +Name[csb]=Wëdowiédzô ò MP3 +Name[cy]=Gwybodaeth MP3 +Name[da]=MP3-info +Name[de]=MP3-Info +Name[el]=Πληροφορίες MP3 +Name[eo]=MP3-informo +Name[es]=Información de MP3 +Name[et]=MP3 info +Name[fa]=اطلاعات MP3 +Name[fy]=MP3 Ynfo +Name[ga]=Eolas MP3 +Name[gl]=Información MP3 +Name[he]=מידע של MP3 +Name[hi]=एमपी3 इन्फो +Name[hr]=MP3 info +Name[hu]=MP3-jellemzők +Name[is]=MP3 upplýsingar +Name[it]=Informazioni MP3 +Name[ja]=MP3 情報 +Name[ka]=MP3 ინფორმაცია +Name[kk]=MP3 мәлімет +Name[km]=ព័ត៌មាន MP3 +Name[lo]=ข้อมูล MP3 +Name[lt]=MP3 informacija +Name[mk]=Информации за MP3 +Name[ms]=Maklumat MP3 +Name[mt]=informazzjoni MP3 +Name[nb]=MP3-informasjon +Name[nds]=MP3-Info +Name[ne]=MP3 सूचना +Name[nn]=MP3-informasjon +Name[pa]=MP3 ਜਾਣਕਾਰੀ +Name[pl]=Informacje o MP3 +Name[pt]=Informação do MP3 +Name[pt_BR]=Informações do MP3 +Name[ro]=Informații MP3 +Name[rw]=Amakuru MP3 +Name[se]=MP3-dieđut +Name[sk]=MP3 info +Name[sr]=MP3 инфо +Name[sr@Latn]=MP3 info +Name[sv]=MP3 info +Name[te]=ఎంపి3 వివరాలు +Name[th]=ข้อมูล MP3 +Name[tr]=MP3 Bilgisi +Name[uk]=Інформація про MP3 +Name[uz]=MP3 haqida maʼlumot +Name[uz@cyrillic]=MP3 ҳақида маълумот +Name[vi]=Thông tin MP3 +Name[wa]=Informåcion MP3 +Name[xh]=MP3 ulwazi +Name[zh_CN]=MP3 信息 +Name[zh_TW]=MP3 資訊 +Name[zu]=Ulwazi lwe MP3 +Exec=gmp3info +Terminal=false +Icon=mp3info +Type=Application diff --git a/kappfinder/apps/Multimedia/Makefile.am b/kappfinder/apps/Multimedia/Makefile.am new file mode 100644 index 000000000..bafdfee04 --- /dev/null +++ b/kappfinder/apps/Multimedia/Makefile.am @@ -0,0 +1,30 @@ +kappfinder_multimedia_data_DATA = \ + alevt.desktop \ + alsamixergui.desktop \ + audacity.desktop \ + Aumix.desktop \ + aviplay.desktop \ + bcast2000.desktop \ + enjoympeg.desktop \ + Grip.desktop \ + gtv.desktop \ + jazz.desktop \ + MP3info.desktop \ + mplayer.desktop \ + mtv.desktop \ + ogle.desktop \ + oqtplayer.desktop \ + realplayer.desktop \ + rezound.desktop \ + slab.desktop \ + sweep.desktop \ + xawtv.desktop \ + xcam.desktop \ + xine.desktop \ + xmms.desktop \ + xmms-enqueue.desktop \ + XMovie.desktop + +kappfinder_multimedia_datadir = $(kde_datadir)/kappfinder/apps/Multimedia + +EXTRA_DIST = $(kappfinder_multimedia_data_DATA) diff --git a/kappfinder/apps/Multimedia/XMovie.desktop b/kappfinder/apps/Multimedia/XMovie.desktop new file mode 100644 index 000000000..594a2f914 --- /dev/null +++ b/kappfinder/apps/Multimedia/XMovie.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=XMovie +Name[bn]=এক্স-মুভি +Name[eo]=X-Filmludilo +Name[hi]=एक्समूवी +Name[ne]=X मुभी +Name[rw]=X-Filime +Name[sv]=Xmovie +Name[ta]=Xபடம் +Name[te]=ఎక్స్ మూవి +Name[ven]=Muvi wa X +Name[zu]=I-XMovie +GenericName=Video Player +GenericName[af]=Video Speler +GenericName[ar]=قارئ المرئيات +GenericName[az]=Video Çalğıcısı +GenericName[be]=Відэапрайгравальнік +GenericName[bg]=Видео плеър +GenericName[bn]=ভিডিও প্রদর্শক +GenericName[br]=Ur soner Video +GenericName[bs]=Video preglednik +GenericName[ca]=Reproductor de vídeo +GenericName[cs]=Přehrávač videa +GenericName[csb]=Grôcz Video +GenericName[cy]=Chwaraewr Fideo +GenericName[da]=Videoafspiller +GenericName[de]=Ein Abspielprogramm für Videos +GenericName[el]=Αναπαραγωγέας βίντεο +GenericName[eo]=Ludilo por videofilmoj +GenericName[es]=Reproductor de vídeo +GenericName[et]=Videofailide mängimine +GenericName[eu]=Bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیو +GenericName[fi]=Videosoitin +GenericName[fr]=Lecteur vidéo +GenericName[fy]=Fideospiler +GenericName[ga]=Fístaispeántóir +GenericName[gl]=Reprodutor de Vídeo +GenericName[he]=נגן וידאו +GenericName[hi]=वीडियो प्लेयर +GenericName[hr]=Video program +GenericName[hu]=Videólejátszó +GenericName[id]=Player Video +GenericName[is]=Forrit til að spila kvikmyndir +GenericName[it]=Lettore di video +GenericName[ja]=ビデオプレーヤ +GenericName[ka]=Видео Player +GenericName[kk]=Бейнеплейер +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ +GenericName[ko]=동영상 재생기 +GenericName[lo]=ເຄືອ່ງຫລິ້ນວີດີໂອ +GenericName[lt]=Vaizdo grotuvas +GenericName[lv]=Video Atskaņotājs +GenericName[mk]=Видеоплеер +GenericName[mn]=Видео тоглуулагч +GenericName[ms]=Pemain Video +GenericName[mt]=Plejer tal-Video +GenericName[nb]=Videospiller +GenericName[nds]=Video-Afspeler +GenericName[ne]=भिडियो प्लेएर +GenericName[nl]=Videospeler +GenericName[nn]=Videospelar +GenericName[nso]=Sebapadi sa Video +GenericName[oc]=Reproductor de video +GenericName[pa]=ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz Video +GenericName[pt]=Leitor de Vídeo +GenericName[pt_BR]=Reprodutor de vídeos +GenericName[ro]=Program de redare video +GenericName[ru]=Видео плейер +GenericName[rw]=Igikina Videwo +GenericName[se]=Videočuojan +GenericName[sk]=Video prehrávač +GenericName[sl]=Predvajalnik videov +GenericName[sr]=Видео приказивач +GenericName[sr@Latn]=Video prikazivač +GenericName[ss]=Sidlali mafilimu +GenericName[sv]=Filmspelare +GenericName[ta]=ஒளி-ஒலி சாதனம் +GenericName[te]=విడియో ప్లేయర్ +GenericName[tg]=Плейери видео +GenericName[th]=โปรแกรมเล่นภาพยนตร์ +GenericName[tr]=Görüntü Yürütücüsü +GenericName[tt]=Video Uynatqıç +GenericName[uk]=Програвач відеофайлів +GenericName[uz]=Video pleyer +GenericName[uz@cyrillic]=Видео плейер +GenericName[ven]=Tshitambisa Vidio +GenericName[vi]=Trình xem phim +GenericName[wa]=Djouweu di fitchîs videyo +GenericName[xh]=Umdlali we Video +GenericName[zh_CN]=视频播放器 +GenericName[zh_TW]=視像檔播放程式 +GenericName[zu]=Umdlali we-Vidiyo +Exec=xmovie +Terminal=false +Icon=xmovie +MimeType=video/x-msvideo;video/quicktime;video/x-flic;video/mpeg;video/x-mpeg; +InitialPreference=10 +Type=Application diff --git a/kappfinder/apps/Multimedia/alevt.desktop b/kappfinder/apps/Multimedia/alevt.desktop new file mode 100644 index 000000000..4d6a9a281 --- /dev/null +++ b/kappfinder/apps/Multimedia/alevt.desktop @@ -0,0 +1,88 @@ +[Desktop Entry] +GenericName=VideoText Viewer +GenericName[af]=Video Teks Aansig +GenericName[ar]=عارض الــVideoText +GenericName[az]=VideoText Göstəricisi +GenericName[be]=Праглядальнік VideoText +GenericName[bg]=Преглед на видео текст +GenericName[bn]=ভিডিও-টেক্সট প্রদর্শক +GenericName[br]=Ur gweler VideoText +GenericName[ca]=Un visor de videotext +GenericName[cs]=Prohlížeč videotextu +GenericName[csb]=Przezérnik telegazétë +GenericName[cy]=Gwelydd TestunFideo +GenericName[da]=VideoTekst-fremviser +GenericName[de]=VideoText-Betrachter +GenericName[el]=Προβολέας VideoText +GenericName[eo]=Videotekstrigardilo +GenericName[es]=Visor de teletexto +GenericName[et]=Videoteksti näitamine +GenericName[eu]=Bideotestu ikustailua +GenericName[fa]=مشاهده‌گر متن ویدیو +GenericName[fi]=VideoText-näytin +GenericName[fr]=Afficheur vidéotexte +GenericName[fy]=Teletekst-werjefteprogramma +GenericName[ga]=Amharcán FísTéacs +GenericName[gl]=Visualizador de VideoTextd +GenericName[he]=מציג וידאו־טקסט +GenericName[hi]=वीडियो पाठ प्रदर्शक +GenericName[hr]=Preglednik videoteksta +GenericName[hu]=Videószöveg-nézegető +GenericName[id]=Viewer teks Video +GenericName[is]=VideoText birtir +GenericName[it]=Visualizzatore televideo +GenericName[ja]=ビデオテキストビューア +GenericName[ka]=პროგრამა VideoText–ის სანახავად +GenericName[kk]=VideoText қарап-шығу бағдарламасы +GenericName[km]=កម្មវិធី​មើល​អត្ថបទ​វីដេអូ +GenericName[ko]=VideoText 뷰어 +GenericName[lo]=ເຄື່ອງມືສະແດງວີດີໂອຂໍ້ຄວາມ +GenericName[lt]=videoteksto žiūriklis +GenericName[lv]=Video Teksta Skatītājs +GenericName[mk]=Прегледувач на видеотекст +GenericName[mn]=VideoТекст-Харагч +GenericName[ms]=Pelihat VideoText +GenericName[mt]=Werrej VideoText +GenericName[nb]=VideoText-framviser +GenericName[nds]=Kieker för VideoText +GenericName[ne]=भिडियो पाठ दर्शक +GenericName[nl]=Teletekst-weergaveprogramma +GenericName[nn]=VideoText-visar +GenericName[nso]=Molebeledi wa Sengwalwana sa Video +GenericName[pa]=ਵੀਡਿਓ ਪਾਠ ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka telegazety +GenericName[pt]=Visualizador de Vídeo-Texto +GenericName[pt_BR]=Visualizador de vídeo-texto +GenericName[ro]=Vizualizor VideoText +GenericName[ru]=Программа просмотра VideoText +GenericName[rw]=Mugaragaza Umwandiko wa Videwo +GenericName[se]=VideoText-čájeheaddji +GenericName[sk]=Zobrazovač VideoTextu +GenericName[sl]=Pregledovalnik videoteksta +GenericName[sr]=Приказивач видео текста +GenericName[sr@Latn]=Prikazivač video teksta +GenericName[ss]=Sibuki sembhalo we-Video +GenericName[sv]=Videotext-visare +GenericName[ta]=திரைவடிவ உரை காட்சி +GenericName[te]=విడియొ వచన వీక్షిణి +GenericName[tg]=Барномаи намоиши VideoText +GenericName[th]=เครื่องมือแสดงข้อความบนหน้าจอ +GenericName[tr]=VideoText Gösterici +GenericName[tt]=VideoText Kürsätkeç +GenericName[uk]=Переглядач відеотекстів +GenericName[uz]=VideoText koʻruvchi +GenericName[uz@cyrillic]=VideoText кўрувчи +GenericName[ven]=Muvhoni wa Manwalwa a Vidio +GenericName[vi]=Trình xem phim văn bản +GenericName[wa]=Håyneu di pådjes VideoText +GenericName[xh]=Umboniseli Wokubhaliweyo we Video +GenericName[zh_CN]=VideoText 查看程序 +GenericName[zh_TW]=VideoText 檢視器 +GenericName[zu]=Umbukiisi Wombhalo we-Vidiyo +Exec=alevt +Icon=alevt +Name=AleVT +Name[af]=Alevt +Name[hi]=एएलईवीटी +Name[te]=ఎలెవిటి +Type=Application diff --git a/kappfinder/apps/Multimedia/alsamixergui.desktop b/kappfinder/apps/Multimedia/alsamixergui.desktop new file mode 100644 index 000000000..7e5040081 --- /dev/null +++ b/kappfinder/apps/Multimedia/alsamixergui.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Exec=alsamixergui +Icon=mixer +Name=AlsaMixerGui +Name[bn]=আলসা-মিক্সার-গুই +Name[da]=AlsaMikserGui +Name[de]=AlsaMixer-Oberfläche +Name[eo]=GUI de sona miksilo +Name[fr]=Console de mixage Alsa +Name[gl]=Mesturador Alsa +Name[hi]=अल्सा-मिक्सर-जीयूआई +Name[it]=GuiMixerAlsa +Name[lt]=AlsaMixer grafinė naudotojo sąsaja +Name[nb]=AlsaMixer-grensesnitt +Name[nds]=ALSAMixer-Böversiet +Name[pa]=ਅਲੀਸਾ ਮਿਕਸਰ +Name[pt_BR]=Alsa Mixer +Name[sk]=Alsa mixér +Name[sv]=Grafiskt gränssnitt till Alsa-mixer +Name[te]=ఆల్సామిక్సర్ జియుఐ +Name[th]=Alsa Mixer แบบกราฟิก +Name[uk]=Аудіомікшер для ALSA +Name[vi]=Giao diện Hoà âm Alsa +Name[wa]=Eterface grafike do maxheu d' son Alsa +GenericName=Alsa Mixer Frontend +GenericName[af]=Alsa Menger Voorkant +GenericName[az]=Alsa Mikser Ara Üzü +GenericName[be]=Праграма для міксера Alsa +GenericName[bg]=Alsa аудио миксер +GenericName[bn]=আলসা মিক্সার ইন্টারফেস +GenericName[bs]=Interfejs za Alsa mixer +GenericName[ca]=Frontal pel mesclador Alsa +GenericName[cs]=Zvukový směšovač pro Alsu +GenericName[csb]=Interfejs dlô miksera Alsa +GenericName[cy]=Blaen-wyneb Cymysgydd Alsa +GenericName[da]=Alsa-mikser forende +GenericName[de]=AudioMixer-Oberfläche +GenericName[el]=Ρύθμιση μίκτη Alsa +GenericName[eo]=Miksilo por sonoj +GenericName[es]=Entorno de mezclador de Alsa +GenericName[et]=Alsa mikser +GenericName[eu]=Alsa Mixer ingurunea +GenericName[fa]=پیشانۀ مخطوط‌کن Alsa +GenericName[fi]=Alsa-mikserin käyttöliittymä +GenericName[fr]=Interface graphique de la console de mixage d'Alsa +GenericName[fy]=Alsa Mikser-programma +GenericName[ga]=Comhéadan Meascthóra Alsa +GenericName[gl]=Interface do Mesturador Alsa +GenericName[he]=ממשק גרפי עבור מערבל ALSA +GenericName[hi]=अल्सा मिक्सर फ्रन्टएण्ड +GenericName[hr]=Sučelje za Alsa mikser +GenericName[hu]=Hangkeverő +GenericName[is]=Alsa hljóðblöndun +GenericName[it]=Interfaccia mixer di Alsa +GenericName[ja]=Alsa ミキサーフロントエンド +GenericName[ka]=Alsa მიქსერის ინტერფეისი +GenericName[kk]=Alsa микшердің интерфейсі +GenericName[ko]=Alsa 믹서 프론트엔드 +GenericName[lt]=Alsa Mixer naudotojo sąsaja +GenericName[mk]=Аудио миксета од Alsa +GenericName[ms]=Frontend Pengadun Alsa +GenericName[mt]=Interfaċċja Alsa Mixer +GenericName[nb]=Brukergrensesnitt for Alsa-mikser +GenericName[nds]=Graafsche Böversiet för den ALSA-Mischer +GenericName[ne]=एल्सा मिक्सअर फ्रन्टेन्ड +GenericName[nl]=Alsa Mixer-programma +GenericName[nn]=Brukarflate for Alsa-miksar +GenericName[pa]=ਆਲੀਸਾ ਮਿਕਸਰ ਸ਼ਕਲ +GenericName[pl]=Interfejs dla miksera Alsa +GenericName[pt]=Mesa de Mistura do ALSA +GenericName[pt_BR]=Interface do Alsa Mixer +GenericName[ro]=Interfață mixer Alsa +GenericName[ru]=Интерфейс к микшеру Alsa +GenericName[rw]=Imberehahera Muvanga Alsa +GenericName[se]=Alsa-miksera geavaheaddjelakta +GenericName[sk]=Rozhranie pre zvukový mixér Alsa +GenericName[sl]=Vmesnik mešalnika Alsa +GenericName[sr]=Сучеље за Alsa миксер +GenericName[sr@Latn]=Sučelje za Alsa mikser +GenericName[sv]=Gränssnitt till Alsa-mixer +GenericName[ta]=Alsa கலவை முண்முணை +GenericName[te]=ఆల్సా మిక్సర్ యొక్క ఫ్రంటెండ్ +GenericName[tg]=Интерфейс ба микшери Alsa +GenericName[th]=ฟร้อนต์เอนด์ของ Alsa Mixer +GenericName[tr]=Alsa Ses Karıştırıcı Önyüzü +GenericName[tt]=Alsa Mixer Yözarası +GenericName[uk]=Інтерфейс до аудіомікшеру для ALSA +GenericName[uz]=ALSA mikseri uchun grafik interfeys +GenericName[uz@cyrillic]=ALSA миксери учун график интерфейс +GenericName[vi]=Giao diện bộ hoà âm Alsa +GenericName[wa]=Eterface do maxheu d' son Alsa +GenericName[zh_CN]=Alsa 混音器前端 +GenericName[zh_TW]=Alsa 混音程式 +StartupNotify=false +Type=Application +Categories=AudioVideo; diff --git a/kappfinder/apps/Multimedia/audacity.desktop b/kappfinder/apps/Multimedia/audacity.desktop new file mode 100644 index 000000000..f22f54b0b --- /dev/null +++ b/kappfinder/apps/Multimedia/audacity.desktop @@ -0,0 +1,89 @@ +[Desktop Entry] +Exec=audacity +Icon= +Name=Audacity +Name[bn]=অডাসিটি +Name[eo]=Aŭdaco +Name[hi]=आउडासिटी +Name[ne]=धृष्टता +Name[pa]=ਆਡੀਕਿਉਟੀ +Name[rw]=Ukudahungabana +Name[te]=అడెసిటి +Name[vi]=Táo bạo +GenericName=Audio Editor +GenericName[af]=Klank Redigeerder +GenericName[ar]=محرر أصوات +GenericName[az]=Audio Editoru +GenericName[be]=Гукавы рэдактар +GenericName[bg]=Аудио редактор +GenericName[bn]=অডিও সম্পাদক +GenericName[br]=Un Aozer Klevet +GenericName[bs]=Audio editor +GenericName[ca]=Editor d'àudio +GenericName[cs]=Audio editor +GenericName[csb]=Editora zwãkòwëch lopków +GenericName[cy]=Golygydd Sain +GenericName[da]=Lyd-editor +GenericName[de]=Audio-Editor +GenericName[el]=Επεξεργαστής ήχου +GenericName[eo]=Sona redaktilo +GenericName[es]=Editor de audio +GenericName[et]=Audioredaktor +GenericName[eu]=Audio editorea +GenericName[fa]=ویرایشگر صوتی +GenericName[fi]=Äänieditori +GenericName[fr]=Éditeur audio +GenericName[fy]=lûdsbewurker +GenericName[ga]=Eagarthóir Fuaime +GenericName[gl]=Editor de Son +GenericName[he]=עורך שמע +GenericName[hi]=ऑडियो संपादक +GenericName[hr]=Uređivač zvuka +GenericName[hu]=Hangszerkesztő +GenericName[id]=Penyunting Audio +GenericName[is]=Hljóðritillinn +GenericName[it]=Editor audio +GenericName[ja]=オーディオエディタ +GenericName[ka]=აუდიო რედაქტორი +GenericName[kk]=Дыбыс редакторы +GenericName[km]=កម្មវិធី​និពន្ធ​សំឡេង +GenericName[ko]=소리 편집기 +GenericName[lt]=Audio redaktorius +GenericName[lv]=Audio redaktors +GenericName[mk]=Аудиоуредувач +GenericName[ms]=Penyunting Audio +GenericName[mt]=Editur awdjo +GenericName[nb]=Lydredigering +GenericName[nds]=Audio-Editor +GenericName[ne]=अडियो सम्पादक +GenericName[nl]=Geluidsbewerker +GenericName[nn]=Lydredigering +GenericName[pa]=ਆਡੀਓ ਸੰਪਾਦਕ +GenericName[pl]=Edytor plików dźwiękowych +GenericName[pt]=Editor de Áudio +GenericName[pt_BR]=Editor de Som +GenericName[ro]=Editor audio +GenericName[ru]=Звуковой редактор +GenericName[rw]=Muhinduzi w'Inyumvo +GenericName[se]=Jietnadoaimmaheaddji +GenericName[sk]=Zvukový editor +GenericName[sl]=Urejevalnik zvoka +GenericName[sr]=Аудио уређивач +GenericName[sr@Latn]=Audio uređivač +GenericName[sv]=Ljudeditor +GenericName[ta]=ஒலி திருத்தி +GenericName[te]=శబ్డ ఎడిటర్ +GenericName[tg]=Муҳаррири садо +GenericName[th]=เครื่องมือแก้ไขไฟล์เสียง +GenericName[tr]=Ses Düzenleyicisi +GenericName[tt]=Tawış Tözätkeç +GenericName[uk]=Редактор аудіо записів +GenericName[uz]=Audio tahrirchi +GenericName[uz@cyrillic]=Аудио таҳрирчи +GenericName[vi]=Trình biên soạn âm thanh +GenericName[wa]=Aspougneu d' sons +GenericName[zh_CN]=音频编辑器 +GenericName[zh_TW]=Audio 編輯器 +StartupNotify=true +Type=Application +Categories=AudioVideo; diff --git a/kappfinder/apps/Multimedia/aviplay.desktop b/kappfinder/apps/Multimedia/aviplay.desktop new file mode 100644 index 000000000..058a89890 --- /dev/null +++ b/kappfinder/apps/Multimedia/aviplay.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +GenericName=AVI Video Player +GenericName[af]=AVI Video Speler +GenericName[ar]=قارئ مرئيات AVI +GenericName[az]=AVI Video Çalğıcısı +GenericName[be]=Прайгравальнік відэафайлаў у фармаце AVI +GenericName[bg]=Видео плеър за AVI +GenericName[bn]=এ.ভি.আই ভিডিও প্রদর্শক +GenericName[br]=Ur c'hoarier Video AVI +GenericName[bs]=Preglednik AVI datoteka +GenericName[ca]=Reproductor de vídeo AVI +GenericName[cs]=Přehrávač AVI videa +GenericName[csb]=Grôcz AVI Video +GenericName[cy]=Chwaraewr Fideo AVI +GenericName[da]=AVI-videoafspiller +GenericName[de]=Videos abspielen +GenericName[el]=Αναπαραγωγέας βίντεο AVI +GenericName[eo]=Ludilo por AVI-videofilmoj +GenericName[es]=Reproductor de vídeo AVI +GenericName[et]=AVI videofailide mängimine +GenericName[eu]=AVI bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیویی AVI +GenericName[fi]=AVI-videosoitin +GenericName[fr]=Un lecteur de vidéos au format AVI +GenericName[fy]=AVI-fideospiler +GenericName[ga]=Fístaispeántóir AVI +GenericName[gl]=Reprodutor de Vídeo AVI +GenericName[he]=נגן וידאו AVI +GenericName[hi]=एवीआई वीडियो प्लेयर +GenericName[hr]=Video program za AVI datoteke +GenericName[hu]=AVI-videólejátszó +GenericName[is]=Forrit til að spila AVI kvikmyndir +GenericName[it]=Lettore di video AVI +GenericName[ja]=AVI ビデオプレーヤ +GenericName[kk]=AVI бейнеплейері +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ AVI +GenericName[ko]=AVI 비디오 재생기 +GenericName[lo]=ເຄື່ອງມືຫລິ້ນວິດີໂອລະບົບ AVI +GenericName[lt]=AVI video grotuvas +GenericName[lv]=AVI Video Atskaņotājs +GenericName[mk]=AVI видеоплеер +GenericName[mn]=Видео тоглуулагч +GenericName[ms]=Pemain Video AVI +GenericName[mt]=Werrej tal-videos AVI +GenericName[nb]=AVI Videospiller +GenericName[nds]=Afspeler för AVI-Videos +GenericName[ne]=ए भी आई भिडियो प्लेएर +GenericName[nl]=AVI-videospeler +GenericName[nn]=AVI-videospelar +GenericName[nso]=Sebapadi sa Video ya AVI +GenericName[pa]=AVI ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz AVI Video +GenericName[pt]=Leitor de Vídeos AVI +GenericName[pt_BR]=Reprodutor de vídeos AVI +GenericName[ro]=Redare fișiere video AVI +GenericName[ru]=Видеопроигрыватель AVI +GenericName[rw]=Igikina Videwo AVI +GenericName[se]=AVI-videočuojan +GenericName[sk]=Video prehrávač AVI +GenericName[sl]=Predvajalnik videov AVI +GenericName[sr]=AVI видео приказивач +GenericName[sr@Latn]=AVI video prikazivač +GenericName[ss]=Sidlali se video ye AVI +GenericName[sv]=Avi-filmspelare +GenericName[ta]=AVI திரைவடிவ சாதனம் +GenericName[te]=ఎవిఐ విడియొ ప్లెయర్ +GenericName[tg]=Видео-плейери AVI +GenericName[th]=เครื่องมือเล่นวิดีโอแบบ AVI +GenericName[tr]=AVI Görüntü Oynatıcı +GenericName[tt]=AVI Video Uynatqıç +GenericName[uk]=Програвач відеофайлів AVI +GenericName[uz]=AVI video pleyer +GenericName[uz@cyrillic]=AVI видео плейер +GenericName[ven]=Tshitamba Vidio tsha AVI +GenericName[vi]=Trình xem phim AVI +GenericName[wa]=Djouweu di videyos AVI +GenericName[xh]=Umdlali we Video AVI +GenericName[zh_CN]=AVI 视频播放器 +GenericName[zh_TW]=AVI 視訊播放程式 +GenericName[zu]=Umdlali we-Vidiyo ye-AVI +Exec=aviplay %f +Icon=video +MimeType=application/vnd.ms-asf;video/mpeg;video/quicktime;video/x-flic;video/x-msvideo +Name=Aviplay +Name[bn]=এ.ভি.আই-প্লে +Name[eo]=AVI-ludilo +Name[hi]=एवीआईप्ले +Name[ja]=AviPlay +Name[ne]=ए भी आई प्ले +Name[rw]=Avi-Gukina +Name[te]=ఎవిఐప్లె +Name[ven]=U tamba ha Avi +Name[vi]=Chơi Avi +Name[xh]=Umdlalo we Avi +Name[zu]=Umdlali we-Avi +ServiceTypes= +Type=Application + diff --git a/kappfinder/apps/Multimedia/bcast2000.desktop b/kappfinder/apps/Multimedia/bcast2000.desktop new file mode 100644 index 000000000..2015d80f9 --- /dev/null +++ b/kappfinder/apps/Multimedia/bcast2000.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +Name=Broadcast 2000 +Name[bn]=ব্রডকাস্ট ২০০০ +Name[eo]=Dissendo 2000 +Name[fa]=پخش ۲۰۰۰ +Name[hi]=ब्रॉडकास्ट 2000 +Name[ne]=ब्रोडकास्ट २००० +Name[nso]=Kgaso 2000 +Name[pa]=ਬਰਾਂਡਕਾਸਟ 2000 +Name[rw]=Isakazamakuru 2000 +Name[ss]=Sakata 2000 +Name[ta]=ஒலிபரப்பு 2000 +Name[te]=బ్రాడ్ కెస్ట్ 2000 +Name[ven]=Khasho ya 2000 +Name[xh]=Usasazo 2000 +Name[zh_TW]=廣撥 2000 +Name[zu]=Ukusakaza 2000 +GenericName=Audio and Video IDE +GenericName[af]=Audio en Video geïntegreerde ontwikkeling omgewing +GenericName[az]=Audio və Video IDE +GenericName[be]=Інтэграванае асяроддзе для гуку і відэафайлаў +GenericName[bg]=Аудио и видео редактор +GenericName[bn]=অডিও এবং ভিডিও IDE +GenericName[bs]=Audio i video IDE +GenericName[ca]=IDE d'àudio i vídeo +GenericName[cs]=Audio a video IDE +GenericName[csb]=Òkrãżé programistów dlô audio ë wideo +GenericName[cy]=IDE Fideo a Sain +GenericName[da]=Audio- og video-IDE +GenericName[de]=Audio/Video-Oberfläche +GenericName[el]=IDE Ήχου και Βίντεο +GenericName[eo]=Redaktilo por sono kaj filmo +GenericName[es]=IDE de audio y video +GenericName[et]=Audio ja video arenduskeskkond +GenericName[eu]=Audio eta bideo IDEa +GenericName[fa]=آی دی ای صوتی و ویدیویی +GenericName[fi]=Ääni ja Video IDE +GenericName[fr]=Environnement de création audio et vidéo +GenericName[fy]=Audio-en fideostudio +GenericName[ga]=IDE Fuaim agus Fís +GenericName[gl]= IDE para Audio e Vídeo +GenericName[he]=סביבת פיתוח משולבת לשמע ולווידאו +GenericName[hi]=ऑडियो तथा वीडियो आईडीई +GenericName[hr]=Audio i Video IDE +GenericName[hu]=Hang- és videófeldolgozó +GenericName[is]=Hljóð og vídeó þróunarumhverfi +GenericName[it]=Ambiente di sviluppo per audio e video +GenericName[ja]=オーディオ/ビデオの IDE +GenericName[ka]=აუიდიო და ვიდეო IDE +GenericName[kk]=Дыбыс және бейне IDE +GenericName[km]=IDE សំឡេង និង​វីដេអូ +GenericName[ko]=소리와 동영상 통합 개발 환경 +GenericName[lo]=ເຄືອ່ງມື IDE ສຳຫລັບວີດີໂອແລະລະບົບສງງ +GenericName[lt]=Audio ir video IDE +GenericName[lv]=Audio un Video IDE +GenericName[mk]=Аудио и Видео IDE +GenericName[mn]=Дуу/Видео-Гадаргуу +GenericName[ms]=IDE Audio dan Video +GenericName[mt]=IDE tal-awdjo u video +GenericName[nb]=Lyd og video IDE +GenericName[nds]=Integreert Bewerkenümgeven för Audio un Video +GenericName[ne]=अडियो र भिडियो IDE +GenericName[nl]=Audio-en videostudio +GenericName[nn]=Lyd- og video-IDE +GenericName[nso]=Kwagalo le IDE ya Video +GenericName[pa]=ਆਡੀਓ ਅਤੇ ਵੀਡਿਓ IDE +GenericName[pl]=Środowisko programistyczne dla audio and wideo +GenericName[pt]=IDE de Áudio e Vídeo +GenericName[pt_BR]=IDE para Áudio e Vídeo +GenericName[ro]=Mediu IDE audio și video +GenericName[ru]=Интегрированная среда обработки аудио и видео +GenericName[rw]=IDE y'Inyumvo na Videwo +GenericName[se]=Jietna- ja video-IDE +GenericName[sk]=IDE pre zvuk a video +GenericName[sl]=IDE za avdio in video +GenericName[sr]=Аудио и видео IDE +GenericName[sr@Latn]=Audio i video IDE +GenericName[ss]=Umsidvo kanye ne-Video IDE +GenericName[sv]=IDE för ljud och video +GenericName[ta]=ஒலிவடிவ மற்றும் திரைவடிவ IDE +GenericName[te]=శబ్డం మరయు విడియొ ఐడిఈ +GenericName[tg]=Муҳити интегралии коркарди аудио ва видео +GenericName[th]=เครื่องมือ IDE สำหรับวิดีโอและระบบเสียง +GenericName[tr]=Ses ve görüntü için tümleşik geliştirme ortamı(IDE) +GenericName[tt]=Audio & Video Eşkärtü +GenericName[uk]=Середовище розробки аудіо- та відеоматеріал +GenericName[uz]=Audio va video IDE +GenericName[uz@cyrillic]=Аудио ва видео IDE +GenericName[ven]=Zwauvhona na Zwaupfa zwa IDE +GenericName[vi]=Môi trường phát triển tích hợp cho Âm thanh và Phim ảnh +GenericName[wa]=Djouweu di videyos et d' sons IDE +GenericName[xh]=Isandi neVideo yeIDE +GenericName[zh_CN]=影音集成播放器 +GenericName[zh_TW]=影音整合開發環境 +GenericName[zu]=I-IDE Yokuzwakalayo kanye ne-Vidiyo ye IDE +Exec=bcast +Terminal=false +Icon=bcast +Type=Application diff --git a/kappfinder/apps/Multimedia/enjoympeg.desktop b/kappfinder/apps/Multimedia/enjoympeg.desktop new file mode 100644 index 000000000..79a863dd7 --- /dev/null +++ b/kappfinder/apps/Multimedia/enjoympeg.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +Name=EnjoyMPEG +Name[bn]=এনজয়-এমপেগ +Name[csb]=Ùceszë sã MPEG +Name[eo]=MPEG-Ludilo +Name[hi]=एन्जॉयएमपीईजी +Name[lo]=enjoyMPEG +Name[ne]=रमाउनु MPEG +Name[nso]=IphsineMPEG +Name[pl]=Ciesz się MPEG +Name[rw]=KundaMPEG +Name[te]=ఎంజాయ్ ఎంపిఈజి +Name[th]=สนุกกับ MPEG +Name[ven]=Diphineni MPEG +GenericName=MPEG Player +GenericName[af]=MPEG Speler +GenericName[ar]=مشغل MPEG +GenericName[az]=MPEG Çalğıcısı +GenericName[be]=Прайгравальнік MPEG +GenericName[bg]=Плеър за MPEG +GenericName[bn]=এমপেগ প্রদর্শক +GenericName[br]=Soner MPEG +GenericName[bs]=MPEG preglednik +GenericName[ca]=Reproductor MPEG +GenericName[cs]=Přehrávač MPEGů +GenericName[csb]=Grôcz MPEG +GenericName[cy]=Chwaraewr MPEG +GenericName[da]=MPEG-afspiller +GenericName[de]=MPEG-Wiedergabe +GenericName[el]=Αναπαραγωγέας MPEG +GenericName[eo]=Ludilo por MPEG-dosieroj +GenericName[es]=Reproductor MPEG +GenericName[et]=MPEG videofailide mängimine +GenericName[eu]=MPEG erreproduzigailua +GenericName[fa]=پخش‌کنندۀ MPEG +GenericName[fi]=MPEG-soitin +GenericName[fo]=MPEG-spælari +GenericName[fr]=Lecteur Mpeg +GenericName[fy]=MPEG-spiler +GenericName[ga]=Seinnteoir MPEG +GenericName[gl]=Reprodutor MPEG +GenericName[he]=נגן MPEG +GenericName[hi]=एमपीईजी प्लेयर +GenericName[hr]=MPEG program +GenericName[hu]=MPEG-lejátszó +GenericName[is]=MPEG spilari +GenericName[it]=Lettore MPEG +GenericName[ja]=MPEG プレーヤ +GenericName[ka]=MPEG დამკვრელი +GenericName[kk]=MPEG плейер +GenericName[km]=កម្មវិធី​ចាក់ MPEG +GenericName[ko]=MPEG 재생기 +GenericName[lo]=ເຄື່ອງມືຫລິ້ນ MPEG +GenericName[lt]=MPEG grotuvas +GenericName[lv]=MPEG Atskaņotājs +GenericName[mk]=MPEG-плеер +GenericName[mn]=MPEG-Тоглуулагч +GenericName[ms]=Pemain MPEG +GenericName[mt]=Werrej MPEG +GenericName[nb]=MPEG-spiller +GenericName[nds]=MPEG-Afspeler +GenericName[ne]=MPEG प्लेएर +GenericName[nl]=MPEG-speler +GenericName[nn]=MPEG-spelar +GenericName[nso]=Sebapadi sa MPEG +GenericName[pa]=MPEG ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz MPEG +GenericName[pt]=Leitor de MPEG +GenericName[pt_BR]=Reprodutor de MPEG +GenericName[ro]=Redare fișiere video MPEG +GenericName[ru]=Проигрыватель MPEG +GenericName[rw]=Igikina MPEG +GenericName[se]=MPEG-čuojan +GenericName[sk]=Prehrávač MPEG +GenericName[sl]=Predvajalnik MPEG +GenericName[sr]=MPEG приказивач +GenericName[sr@Latn]=MPEG prikazivač +GenericName[ss]=Sidlali se-MPEG +GenericName[sv]=MPEG-spelare +GenericName[ta]=MPEG சாதனம் +GenericName[te]=ఎంపిఈజి ప్లెయర్ +GenericName[tg]=Плейери MPEG +GenericName[th]=เครื่องมือเล่น MPEG +GenericName[tr]=MPEG Çalıcı +GenericName[tt]=MPEG Uynatqıç +GenericName[uk]=Програвач MPEG +GenericName[uz]=MPEG pleyer +GenericName[uz@cyrillic]=MPEG плейер +GenericName[ven]=Tshitambisa MPEG +GenericName[vi]=Trình xem phim MPEG +GenericName[wa]=Djouweu di videyos MPEG +GenericName[xh]=Umdlali we MPEG +GenericName[zh_CN]=MPEG 播放器 +GenericName[zh_TW]=MPEG 播放程式 +GenericName[zu]=Umdlali we-MPEG +Exec=enjoympeg +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Multimedia/gtv.desktop b/kappfinder/apps/Multimedia/gtv.desktop new file mode 100644 index 000000000..cac898444 --- /dev/null +++ b/kappfinder/apps/Multimedia/gtv.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +GenericName=MPEG Player +GenericName[af]=MPEG Speler +GenericName[ar]=مشغل MPEG +GenericName[az]=MPEG Çalğıcısı +GenericName[be]=Прайгравальнік MPEG +GenericName[bg]=Плеър за MPEG +GenericName[bn]=এমপেগ প্রদর্শক +GenericName[br]=Soner MPEG +GenericName[bs]=MPEG preglednik +GenericName[ca]=Reproductor MPEG +GenericName[cs]=Přehrávač MPEGů +GenericName[csb]=Grôcz MPEG +GenericName[cy]=Chwaraewr MPEG +GenericName[da]=MPEG-afspiller +GenericName[de]=MPEG-Wiedergabe +GenericName[el]=Αναπαραγωγέας MPEG +GenericName[eo]=Ludilo por MPEG-dosieroj +GenericName[es]=Reproductor MPEG +GenericName[et]=MPEG videofailide mängimine +GenericName[eu]=MPEG erreproduzigailua +GenericName[fa]=پخش‌کنندۀ MPEG +GenericName[fi]=MPEG-soitin +GenericName[fo]=MPEG-spælari +GenericName[fr]=Lecteur Mpeg +GenericName[fy]=MPEG-spiler +GenericName[ga]=Seinnteoir MPEG +GenericName[gl]=Reprodutor MPEG +GenericName[he]=נגן MPEG +GenericName[hi]=एमपीईजी प्लेयर +GenericName[hr]=MPEG program +GenericName[hu]=MPEG-lejátszó +GenericName[is]=MPEG spilari +GenericName[it]=Lettore MPEG +GenericName[ja]=MPEG プレーヤ +GenericName[ka]=MPEG დამკვრელი +GenericName[kk]=MPEG плейер +GenericName[km]=កម្មវិធី​ចាក់ MPEG +GenericName[ko]=MPEG 재생기 +GenericName[lo]=ເຄື່ອງມືຫລິ້ນ MPEG +GenericName[lt]=MPEG grotuvas +GenericName[lv]=MPEG Atskaņotājs +GenericName[mk]=MPEG-плеер +GenericName[mn]=MPEG-Тоглуулагч +GenericName[ms]=Pemain MPEG +GenericName[mt]=Werrej MPEG +GenericName[nb]=MPEG-spiller +GenericName[nds]=MPEG-Afspeler +GenericName[ne]=MPEG प्लेएर +GenericName[nl]=MPEG-speler +GenericName[nn]=MPEG-spelar +GenericName[nso]=Sebapadi sa MPEG +GenericName[pa]=MPEG ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz MPEG +GenericName[pt]=Leitor de MPEG +GenericName[pt_BR]=Reprodutor de MPEG +GenericName[ro]=Redare fișiere video MPEG +GenericName[ru]=Проигрыватель MPEG +GenericName[rw]=Igikina MPEG +GenericName[se]=MPEG-čuojan +GenericName[sk]=Prehrávač MPEG +GenericName[sl]=Predvajalnik MPEG +GenericName[sr]=MPEG приказивач +GenericName[sr@Latn]=MPEG prikazivač +GenericName[ss]=Sidlali se-MPEG +GenericName[sv]=MPEG-spelare +GenericName[ta]=MPEG சாதனம் +GenericName[te]=ఎంపిఈజి ప్లెయర్ +GenericName[tg]=Плейери MPEG +GenericName[th]=เครื่องมือเล่น MPEG +GenericName[tr]=MPEG Çalıcı +GenericName[tt]=MPEG Uynatqıç +GenericName[uk]=Програвач MPEG +GenericName[uz]=MPEG pleyer +GenericName[uz@cyrillic]=MPEG плейер +GenericName[ven]=Tshitambisa MPEG +GenericName[vi]=Trình xem phim MPEG +GenericName[wa]=Djouweu di videyos MPEG +GenericName[xh]=Umdlali we MPEG +GenericName[zh_CN]=MPEG 播放器 +GenericName[zh_TW]=MPEG 播放程式 +GenericName[zu]=Umdlali we-MPEG +Exec=gtv +Icon=video +MimeType=video/mpeg +Name=GTV +Name[bn]=জিটিভি +Name[hi]=जीटीवी +Name[te]=జిటివి +Name[th]=GTV +ServiceTypes= +Type=Application diff --git a/kappfinder/apps/Multimedia/jazz.desktop b/kappfinder/apps/Multimedia/jazz.desktop new file mode 100644 index 000000000..889333365 --- /dev/null +++ b/kappfinder/apps/Multimedia/jazz.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Name=Jazz +Name[eo]=Ĵazo +Name[fa]=جاز +Name[hi]=जैज +Name[ka]=ჯაზი +Name[lv]=Džezs +Name[ne]=ज्याज +Name[ta]=ஜாஸ் +Name[te]=జాజ్ +Name[zu]=I-Jazz +GenericName=Sound Processor +GenericName[af]=Klank Verwerker +GenericName[ar]=معالج الصوت +GenericName[az]=Səs İşləmə +GenericName[be]=Працэсар гуку +GenericName[bg]=Обработка на звук +GenericName[bn]=সাউণ্ড প্রসেসর +GenericName[bs]=Obrada zvuka +GenericName[ca]=Processador de so +GenericName[cs]=Zpracování zvuku +GenericName[csb]=Przerôbianié zwãkù +GenericName[cy]=Prosesydd Sain +GenericName[da]=Lydbehandling +GenericName[de]=Soundprozessor +GenericName[el]=Επεξεργαστής ήχου +GenericName[eo]=Sonoprocezilo +GenericName[es]=Procesador de sonidos +GenericName[et]=Helitöötlus +GenericName[eu]=Soinu prozesatzailea +GenericName[fa]=پردازندۀ صدا +GenericName[fi]=Äänenkäsittelijä +GenericName[fr]=Outil de traitement du son +GenericName[fy]=lûdsstudio +GenericName[ga]=Próiseálaí Fuaime +GenericName[gl]=Procesador de Son +GenericName[he]=מעבד צליל +GenericName[hi]=ध्वनि प्रोसेसर +GenericName[hr]=Procesor zvuka +GenericName[hu]=Hangfeldolgozó +GenericName[is]=Hljóðvinnsla +GenericName[it]=Elaborazione suoni +GenericName[ja]=サウンドプロセッサ +GenericName[ka]=ხმის პროცესორი +GenericName[kk]=Дыбыс процесоры +GenericName[ko]=소리 처리기 +GenericName[lo]=ໂປຣເຊດເຊີລະບົບສງງ +GenericName[lt]=Garsų apdorotojas +GenericName[lv]=Skaņu Procesors +GenericName[mk]=Процесор на звук +GenericName[mn]=Дууны процессор +GenericName[ms]=Pemproses Bunyi +GenericName[mt]=Proċessatur tal-awdjo +GenericName[nb]=Lydbehandler +GenericName[nds]=Klangperzesser +GenericName[ne]=ध्वनि प्रोसेसर +GenericName[nl]=Geluidsstudio +GenericName[nn]=Lydhandsamar +GenericName[nso]=Sediragatsi sa Modumo +GenericName[pa]=ਧੁਨੀ ਪਰੋਸੈਸਰ +GenericName[pl]=Przetwarzanie dźwięku +GenericName[pt]=Processador de Som +GenericName[pt_BR]=Processador de Som +GenericName[ro]=Procesor de sunet +GenericName[ru]=Звуковой процессор +GenericName[rw]=Munonosora w'Ijwi +GenericName[se]=Jietnagieđahalli +GenericName[sk]=Zvukový procesor +GenericName[sl]=Obdelovalnik zvoka +GenericName[sr]=Обрада звука +GenericName[sr@Latn]=Obrada zvuka +GenericName[ss]=Sichubi semsindvo +GenericName[sv]=Ljudprocessor +GenericName[ta]=ஒலி செயல்படுத்தி +GenericName[te]=శబ్ద ప్రాసెసర్ +GenericName[tg]=Протсессори садо +GenericName[th]=ตัวประมวลผลเสียง +GenericName[tr]=Ses İşleyici +GenericName[tt]=Tawış Prosessorı +GenericName[uk]=Звуковий процесор +GenericName[uz]=Tovush protsessori +GenericName[uz@cyrillic]=Товуш процессори +GenericName[ven]=Tshiitimubvumo +GenericName[vi]=Xử lí âm thanh +GenericName[wa]=Processeu d' son +GenericName[xh]=Umlugisi Wesandi +GenericName[zh_CN]=声音处理程序 +GenericName[zh_TW]=音效處理程式 +GenericName[zu]=Umqhubekisi womsindo +Exec=jazz +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Multimedia/mplayer.desktop b/kappfinder/apps/Multimedia/mplayer.desktop new file mode 100644 index 000000000..d53ad710a --- /dev/null +++ b/kappfinder/apps/Multimedia/mplayer.desktop @@ -0,0 +1,101 @@ +[Desktop Entry] +GenericName=Video Player +GenericName[af]=Video Speler +GenericName[ar]=قارئ المرئيات +GenericName[az]=Video Çalğıcısı +GenericName[be]=Відэапрайгравальнік +GenericName[bg]=Видео плеър +GenericName[bn]=ভিডিও প্রদর্শক +GenericName[br]=Ur soner Video +GenericName[bs]=Video preglednik +GenericName[ca]=Reproductor de vídeo +GenericName[cs]=Přehrávač videa +GenericName[csb]=Grôcz Video +GenericName[cy]=Chwaraewr Fideo +GenericName[da]=Videoafspiller +GenericName[de]=Ein Abspielprogramm für Videos +GenericName[el]=Αναπαραγωγέας βίντεο +GenericName[eo]=Ludilo por videofilmoj +GenericName[es]=Reproductor de vídeo +GenericName[et]=Videofailide mängimine +GenericName[eu]=Bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیو +GenericName[fi]=Videosoitin +GenericName[fr]=Lecteur vidéo +GenericName[fy]=Fideospiler +GenericName[ga]=Fístaispeántóir +GenericName[gl]=Reprodutor de Vídeo +GenericName[he]=נגן וידאו +GenericName[hi]=वीडियो प्लेयर +GenericName[hr]=Video program +GenericName[hu]=Videólejátszó +GenericName[id]=Player Video +GenericName[is]=Forrit til að spila kvikmyndir +GenericName[it]=Lettore di video +GenericName[ja]=ビデオプレーヤ +GenericName[ka]=Видео Player +GenericName[kk]=Бейнеплейер +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ +GenericName[ko]=동영상 재생기 +GenericName[lo]=ເຄືອ່ງຫລິ້ນວີດີໂອ +GenericName[lt]=Vaizdo grotuvas +GenericName[lv]=Video Atskaņotājs +GenericName[mk]=Видеоплеер +GenericName[mn]=Видео тоглуулагч +GenericName[ms]=Pemain Video +GenericName[mt]=Plejer tal-Video +GenericName[nb]=Videospiller +GenericName[nds]=Video-Afspeler +GenericName[ne]=भिडियो प्लेएर +GenericName[nl]=Videospeler +GenericName[nn]=Videospelar +GenericName[nso]=Sebapadi sa Video +GenericName[oc]=Reproductor de video +GenericName[pa]=ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz Video +GenericName[pt]=Leitor de Vídeo +GenericName[pt_BR]=Reprodutor de vídeos +GenericName[ro]=Program de redare video +GenericName[ru]=Видео плейер +GenericName[rw]=Igikina Videwo +GenericName[se]=Videočuojan +GenericName[sk]=Video prehrávač +GenericName[sl]=Predvajalnik videov +GenericName[sr]=Видео приказивач +GenericName[sr@Latn]=Video prikazivač +GenericName[ss]=Sidlali mafilimu +GenericName[sv]=Filmspelare +GenericName[ta]=ஒளி-ஒலி சாதனம் +GenericName[te]=విడియో ప్లేయర్ +GenericName[tg]=Плейери видео +GenericName[th]=โปรแกรมเล่นภาพยนตร์ +GenericName[tr]=Görüntü Yürütücüsü +GenericName[tt]=Video Uynatqıç +GenericName[uk]=Програвач відеофайлів +GenericName[uz]=Video pleyer +GenericName[uz@cyrillic]=Видео плейер +GenericName[ven]=Tshitambisa Vidio +GenericName[vi]=Trình xem phim +GenericName[wa]=Djouweu di fitchîs videyo +GenericName[xh]=Umdlali we Video +GenericName[zh_CN]=视频播放器 +GenericName[zh_TW]=視像檔播放程式 +GenericName[zu]=Umdlali we-Vidiyo +Exec=gmplayer %U +Icon=video +MimeType=application/vnd.ms-asf;video/mpeg;video/quicktime;video/x-flic;video/x-msvideo +Name=MPlayer +Name[bn]=এম-প্লেয়ার +Name[eo]=M-Ludilo +Name[hi]=एमप्लेयर +Name[ne]=एम प्लेएर +Name[nso]=MSebapadi +Name[rw]=M-Igikina +Name[sv]=Mplayer +Name[ta]=Mசாதனம் +Name[te]=ఎంప్లెయర్ +Name[ven]=Tshitambisi tsha M +ServiceTypes= +Type=Application +X-KDE-Protocols=http + diff --git a/kappfinder/apps/Multimedia/mtv.desktop b/kappfinder/apps/Multimedia/mtv.desktop new file mode 100644 index 000000000..116eb5c74 --- /dev/null +++ b/kappfinder/apps/Multimedia/mtv.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +GenericName=Video Player +GenericName[af]=Video Speler +GenericName[ar]=قارئ المرئيات +GenericName[az]=Video Çalğıcısı +GenericName[be]=Відэапрайгравальнік +GenericName[bg]=Видео плеър +GenericName[bn]=ভিডিও প্রদর্শক +GenericName[br]=Ur soner Video +GenericName[bs]=Video preglednik +GenericName[ca]=Reproductor de vídeo +GenericName[cs]=Přehrávač videa +GenericName[csb]=Grôcz Video +GenericName[cy]=Chwaraewr Fideo +GenericName[da]=Videoafspiller +GenericName[de]=Ein Abspielprogramm für Videos +GenericName[el]=Αναπαραγωγέας βίντεο +GenericName[eo]=Ludilo por videofilmoj +GenericName[es]=Reproductor de vídeo +GenericName[et]=Videofailide mängimine +GenericName[eu]=Bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیو +GenericName[fi]=Videosoitin +GenericName[fr]=Lecteur vidéo +GenericName[fy]=Fideospiler +GenericName[ga]=Fístaispeántóir +GenericName[gl]=Reprodutor de Vídeo +GenericName[he]=נגן וידאו +GenericName[hi]=वीडियो प्लेयर +GenericName[hr]=Video program +GenericName[hu]=Videólejátszó +GenericName[id]=Player Video +GenericName[is]=Forrit til að spila kvikmyndir +GenericName[it]=Lettore di video +GenericName[ja]=ビデオプレーヤ +GenericName[ka]=Видео Player +GenericName[kk]=Бейнеплейер +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ +GenericName[ko]=동영상 재생기 +GenericName[lo]=ເຄືອ່ງຫລິ້ນວີດີໂອ +GenericName[lt]=Vaizdo grotuvas +GenericName[lv]=Video Atskaņotājs +GenericName[mk]=Видеоплеер +GenericName[mn]=Видео тоглуулагч +GenericName[ms]=Pemain Video +GenericName[mt]=Plejer tal-Video +GenericName[nb]=Videospiller +GenericName[nds]=Video-Afspeler +GenericName[ne]=भिडियो प्लेएर +GenericName[nl]=Videospeler +GenericName[nn]=Videospelar +GenericName[nso]=Sebapadi sa Video +GenericName[oc]=Reproductor de video +GenericName[pa]=ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz Video +GenericName[pt]=Leitor de Vídeo +GenericName[pt_BR]=Reprodutor de vídeos +GenericName[ro]=Program de redare video +GenericName[ru]=Видео плейер +GenericName[rw]=Igikina Videwo +GenericName[se]=Videočuojan +GenericName[sk]=Video prehrávač +GenericName[sl]=Predvajalnik videov +GenericName[sr]=Видео приказивач +GenericName[sr@Latn]=Video prikazivač +GenericName[ss]=Sidlali mafilimu +GenericName[sv]=Filmspelare +GenericName[ta]=ஒளி-ஒலி சாதனம் +GenericName[te]=విడియో ప్లేయర్ +GenericName[tg]=Плейери видео +GenericName[th]=โปรแกรมเล่นภาพยนตร์ +GenericName[tr]=Görüntü Yürütücüsü +GenericName[tt]=Video Uynatqıç +GenericName[uk]=Програвач відеофайлів +GenericName[uz]=Video pleyer +GenericName[uz@cyrillic]=Видео плейер +GenericName[ven]=Tshitambisa Vidio +GenericName[vi]=Trình xem phim +GenericName[wa]=Djouweu di fitchîs videyo +GenericName[xh]=Umdlali we Video +GenericName[zh_CN]=视频播放器 +GenericName[zh_TW]=視像檔播放程式 +GenericName[zu]=Umdlali we-Vidiyo +Exec=mtv +Icon=video +Name=MpegTV +Name[af]=Mpegtv +Name[bn]=এমপেগ-টিভি +Name[eo]=MPEG-TV-ludilo +Name[hi]=एमपीईजी-टीवी +Name[is]=MpegTV spilari +Name[te]=ఎంపిఈజి టివి +Type=Application +MimeType=video/mpeg diff --git a/kappfinder/apps/Multimedia/ogle.desktop b/kappfinder/apps/Multimedia/ogle.desktop new file mode 100644 index 000000000..d16b74765 --- /dev/null +++ b/kappfinder/apps/Multimedia/ogle.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +GenericName=DVD Player +GenericName[af]=DVD Speler +GenericName[ar]=مشغل DVD +GenericName[az]=DVD Çalğıcısı +GenericName[be]=Прайгравальнік DVD +GenericName[bg]=DVD плеър +GenericName[bn]=ডিভিডি প্রদর্শক +GenericName[br]=Soner DVD +GenericName[ca]=Reproductor de DVD +GenericName[cs]=DVD přehrávač +GenericName[csb]=Grôcz DVD +GenericName[cy]=Chwaraewr DVD +GenericName[da]=Dvd-afspiller +GenericName[de]=DVD-Wiedergabe +GenericName[el]=Αναπαραγωγέας DVD +GenericName[eo]=Ludilo por muzikaj lumdiskoj +GenericName[es]=Reproductor de DVDs +GenericName[et]=DVD mängija +GenericName[eu]=DVD erreproduzigailua +GenericName[fa]=پخش‌کنندۀ DVD +GenericName[fi]=DVD-soitin +GenericName[fo]=DVD-spælari +GenericName[fr]=Lecteur de DVD +GenericName[fy]=DVD-spiler +GenericName[ga]=Seinnteoir DVD +GenericName[gl]=Reprodutor de DVD +GenericName[he]=נגן DVD +GenericName[hi]=डीवीडी प्लेयर +GenericName[hr]=DVD program +GenericName[hu]=DVD-lejátszó +GenericName[is]=DVD spilari +GenericName[it]=Lettore DVD +GenericName[ja]=DVD プレーヤ +GenericName[ka]=DVD დამკვრელი +GenericName[kk]=DVD плейер +GenericName[km]=កម្មវិធី​ចាក់​ឌីវីឌី +GenericName[ko]=DVD 재생기 +GenericName[lo]=ໂປຣແກຣມຫລິ້ນດີວີດີ +GenericName[lt]=DVD grotuvas +GenericName[lv]=DVD Atskaņotājs +GenericName[mk]=DVD плеер +GenericName[mn]=DVD-Тоглуулагч +GenericName[ms]=Pemain DVD +GenericName[mt]=Plejer tad-DVDs +GenericName[nb]=DVD-Spiller +GenericName[nds]=DVD-Afspeler +GenericName[ne]=डी भी डी प्लेएर +GenericName[nl]=DVD-speler +GenericName[nn]=DVD-spelar +GenericName[nso]=Sebapadi sa DVD +GenericName[pa]=DVD ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz DVD +GenericName[pt]=Leitor de DVDs +GenericName[pt_BR]=Reprodutor de DVD +GenericName[ro]=Program de redare DVD +GenericName[ru]=Проигрыватель DVD +GenericName[rw]=Igikina DVD +GenericName[se]=DVD-čuojan +GenericName[sk]=DVD prehrávač +GenericName[sl]=Predvajalnik DVD-jev +GenericName[sr]=DVD приказивач +GenericName[sr@Latn]=DVD prikazivač +GenericName[ss]=Sidlali se DVD +GenericName[sv]=Dvd-spelare +GenericName[ta]=DVD சாதனம் +GenericName[te]=డివిడి ప్లెయర్ +GenericName[tg]=Плейери DVD +GenericName[th]=โปรแกรมเล่นดีวีดี +GenericName[tr]=DVD Oynatıcı +GenericName[tt]=DVD Uynatqıç +GenericName[uk]=Програвач DVD +GenericName[uz]=DVD pleyer +GenericName[uz@cyrillic]=DVD плейер +GenericName[ven]=Tshitambi tsha DVD +GenericName[vi]=Trình xem DVD +GenericName[wa]=Djouweu di plakes lazer DVD +GenericName[xh]=Umdlali we DVD +GenericName[zh_CN]=DVD 播放器 +GenericName[zh_TW]=DVD 播放器 +GenericName[zu]=Umdlali we-DVD +Exec=ogle %f +Icon=video +MimeType=inode/chardevice;inode/directory +Name=Ogle +Name[bn]=ওগল +Name[hi]=ऑगल +Name[lo]=ຕົວດີບັກ +Name[ne]=अग्ली +Name[ta]=ஓகல் +Name[te]=ఒగిల్ +Name[th]=Ogel +Name[ven]=Zondolola +ServiceTypes= +Type=Application +X-KDE-SubstituteUID=false +X-KDE-Username= diff --git a/kappfinder/apps/Multimedia/oqtplayer.desktop b/kappfinder/apps/Multimedia/oqtplayer.desktop new file mode 100644 index 000000000..324c3370d --- /dev/null +++ b/kappfinder/apps/Multimedia/oqtplayer.desktop @@ -0,0 +1,105 @@ +[Desktop Entry] +GenericName=MOV Video Player +GenericName[af]=MOV Video Speler +GenericName[ar]=قارئ مرئيات MOV +GenericName[az]=MOV Video Çalğıcısı +GenericName[be]=Прайгравальнік відэафайлаў у фармаце MOV +GenericName[bg]=Видео плеър за AVI +GenericName[bn]=MOV ভিডিও প্রদর্শক +GenericName[br]=Ur soner video MOV +GenericName[bs]=Preglednik MOV video datoteka +GenericName[ca]=Reproductor de vídeo MOV +GenericName[cs]=Přehrávač MOV videa +GenericName[csb]=Grôcz MOV Video +GenericName[cy]=Chwaraewr Fideo MOV +GenericName[da]=MOV Video-afspiller +GenericName[de]=MOV-Video-Abspieler +GenericName[el]=Αναπαραγωγέας βίντεο MOV +GenericName[eo]=Ludilo por MOV-videofilmoj +GenericName[es]=Reproductor de vídeo MOV +GenericName[et]=MOV videofailide mängija +GenericName[eu]=MOV bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیویی MOV +GenericName[fi]=MOV-videosoitin +GenericName[fr]=Un lecteur de vidéos au format MOV +GenericName[fy]=MOV-fideospiler +GenericName[ga]=Fístaispeántóir MOV +GenericName[gl]=Reprodutor de Vídeo MOV +GenericName[he]=נגן וידאו MOV +GenericName[hi]=एमओवी वीडियो प्लेयर +GenericName[hr]=Video program za MOV datoteke +GenericName[hu]=MOV-videólejátszó +GenericName[is]=Forrit til að spila MOV kvikmyndir +GenericName[it]=Lettore di video MOV +GenericName[ja]=MOV ビデオプレーヤ +GenericName[ka]=MOV ვიდეო დამკვრელი +GenericName[kk]=MOV бейнеплейер +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ MOV +GenericName[ko]=비디오 재생기 +GenericName[lo]=ເຄືອ່ງມືຫລິ້ນວີດີໂອລະບົບ AVI +GenericName[lt]=MOV video grotuvas +GenericName[lv]=MOV Video Atskaņotājs +GenericName[mk]=MOV Видеоплеер +GenericName[mn]=MOV-Видео-Тоглуулагч +GenericName[ms]=Pemain Video MOV +GenericName[mt]=Werrej tal-videos MOV +GenericName[nb]=MOV Videospiller +GenericName[nds]=Afspeler för MOV-Videos +GenericName[ne]=MOV भिडियो प्लेयर +GenericName[nl]=MOV-videospeler +GenericName[nn]=MOV-videospelar +GenericName[nso]=Sebapadi sa Video ya MOV +GenericName[pa]=MOV ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz MOV Video +GenericName[pt]=Leitor de Vídeos MOV +GenericName[pt_BR]=Reprodutor de vídeos MOV +GenericName[ro]=Program de redare fișiere video MOV +GenericName[ru]=Видеопроигрыватель MOV +GenericName[rw]=Igikina Videwo MOV +GenericName[se]=MOV-videočuojan +GenericName[sk]=Video prehrávač MOV +GenericName[sl]=Predvajalnik videov MOV +GenericName[sr]=MOV видео приказивач +GenericName[sr@Latn]=MOV video prikazivač +GenericName[ss]=Sidlali se-video ye MOV +GenericName[sv]=MOV-filmspelare +GenericName[ta]=MOV வீடியோ இயக்கி +GenericName[te]=ఎంఒవి విడియొ ప్లెయర్ +GenericName[tg]=Видео-плейери MOV +GenericName[th]=เครื่องมือเล่นแฟ้มวิดีโอแบบ MOV +GenericName[tr]=MOV Görüntü Oynatıcı +GenericName[tt]=MOV Video Uynatqıç +GenericName[uk]=Програвач відеофайлів MOV +GenericName[uz]=MOV video pleyer +GenericName[uz@cyrillic]=MOV видео плейер +GenericName[ven]=Tshitamba tsha vidio tsha MOV +GenericName[vi]=Trình xem phim MOV +GenericName[wa]=Djouweu di videyos MOV +GenericName[xh]=Umdlali we Video MOV +GenericName[zh_CN]=MOV 视频播放器 +GenericName[zh_TW]=MOV 視訊播放程式 +GenericName[zu]=Umdlali we-MOV ye-Vidiyo +Exec=oqtplayer %f +Icon=video +MimeType=video/quicktime +Name=OQTPlayer +Name[de]=OQT-Abspieler +Name[eo]=OQT-Ludilo +Name[fr]=Lecteur OQTP +Name[hi]=ओक्यूटी-प्लेयर +Name[lo]=ຕົວຮງກພື້ນທີ່ທຳງານ +Name[mn]=OQT-Тоглуулагч +Name[ne]=OQT प्लेएर +Name[nso]=Sebapadi sa OQT +Name[sv]=OQTplayer +Name[ta]=OQTசாதனம் +Name[te]=ఒక్యుటి ప్లెయర్ +Name[ven]=Tshitambi tsha OQTP +Name[xh]=Umdlali we OQT +Name[zh_TW]=OQT 播放器 +Name[zu]=Umdlali we-OQT +ServiceTypes= +Type=Application +X-KDE-SubstituteUID=false +X-KDE-Username= + diff --git a/kappfinder/apps/Multimedia/realplayer.desktop b/kappfinder/apps/Multimedia/realplayer.desktop new file mode 100644 index 000000000..41b299243 --- /dev/null +++ b/kappfinder/apps/Multimedia/realplayer.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +GenericName=Video Player +GenericName[af]=Video Speler +GenericName[ar]=قارئ المرئيات +GenericName[az]=Video Çalğıcısı +GenericName[be]=Відэапрайгравальнік +GenericName[bg]=Видео плеър +GenericName[bn]=ভিডিও প্রদর্শক +GenericName[br]=Ur soner Video +GenericName[bs]=Video preglednik +GenericName[ca]=Reproductor de vídeo +GenericName[cs]=Přehrávač videa +GenericName[csb]=Grôcz Video +GenericName[cy]=Chwaraewr Fideo +GenericName[da]=Videoafspiller +GenericName[de]=Ein Abspielprogramm für Videos +GenericName[el]=Αναπαραγωγέας βίντεο +GenericName[eo]=Ludilo por videofilmoj +GenericName[es]=Reproductor de vídeo +GenericName[et]=Videofailide mängimine +GenericName[eu]=Bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیو +GenericName[fi]=Videosoitin +GenericName[fr]=Lecteur vidéo +GenericName[fy]=Fideospiler +GenericName[ga]=Fístaispeántóir +GenericName[gl]=Reprodutor de Vídeo +GenericName[he]=נגן וידאו +GenericName[hi]=वीडियो प्लेयर +GenericName[hr]=Video program +GenericName[hu]=Videólejátszó +GenericName[id]=Player Video +GenericName[is]=Forrit til að spila kvikmyndir +GenericName[it]=Lettore di video +GenericName[ja]=ビデオプレーヤ +GenericName[ka]=Видео Player +GenericName[kk]=Бейнеплейер +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ +GenericName[ko]=동영상 재생기 +GenericName[lo]=ເຄືອ່ງຫລິ້ນວີດີໂອ +GenericName[lt]=Vaizdo grotuvas +GenericName[lv]=Video Atskaņotājs +GenericName[mk]=Видеоплеер +GenericName[mn]=Видео тоглуулагч +GenericName[ms]=Pemain Video +GenericName[mt]=Plejer tal-Video +GenericName[nb]=Videospiller +GenericName[nds]=Video-Afspeler +GenericName[ne]=भिडियो प्लेएर +GenericName[nl]=Videospeler +GenericName[nn]=Videospelar +GenericName[nso]=Sebapadi sa Video +GenericName[oc]=Reproductor de video +GenericName[pa]=ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz Video +GenericName[pt]=Leitor de Vídeo +GenericName[pt_BR]=Reprodutor de vídeos +GenericName[ro]=Program de redare video +GenericName[ru]=Видео плейер +GenericName[rw]=Igikina Videwo +GenericName[se]=Videočuojan +GenericName[sk]=Video prehrávač +GenericName[sl]=Predvajalnik videov +GenericName[sr]=Видео приказивач +GenericName[sr@Latn]=Video prikazivač +GenericName[ss]=Sidlali mafilimu +GenericName[sv]=Filmspelare +GenericName[ta]=ஒளி-ஒலி சாதனம் +GenericName[te]=విడియో ప్లేయర్ +GenericName[tg]=Плейери видео +GenericName[th]=โปรแกรมเล่นภาพยนตร์ +GenericName[tr]=Görüntü Yürütücüsü +GenericName[tt]=Video Uynatqıç +GenericName[uk]=Програвач відеофайлів +GenericName[uz]=Video pleyer +GenericName[uz@cyrillic]=Видео плейер +GenericName[ven]=Tshitambisa Vidio +GenericName[vi]=Trình xem phim +GenericName[wa]=Djouweu di fitchîs videyo +GenericName[xh]=Umdlali we Video +GenericName[zh_CN]=视频播放器 +GenericName[zh_TW]=視像檔播放程式 +GenericName[zu]=Umdlali we-Vidiyo +Exec=realplay %u +Icon=realplayer +MimeType=audio/x-pn-realaudio;audio/vnd.rn-realaudio;application/vnd.rn-realmedia.desktop;video/vnd.rn-realvideo +Name=RealPlayer +Name[bn]=রিয়েল-প্লেয়ার +Name[eo]=Son-/Filmludilo +Name[hi]=रीयल प्लेयर +Name[ne]=रियल प्लेएर +Name[nso]=Sebapadi sa Makgonthe +Name[pa]=ਰੀਅਲ ਪਲੇਅਰ +Name[ta]=ரியல்ப்ளேயர் +Name[te]=రియల్ ప్లెయర్ +Name[ven]=Tshitambisi tsha Vhukuma +Name[zu]=Umdlali Wangempela +Path= +SwallowExec= +SwallowTitle= +Terminal=false +Type=Application + + +X-KDE-StartupNotify=false +X-KDE-Protocols=http + diff --git a/kappfinder/apps/Multimedia/rezound.desktop b/kappfinder/apps/Multimedia/rezound.desktop new file mode 100644 index 000000000..63cdb980f --- /dev/null +++ b/kappfinder/apps/Multimedia/rezound.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +Exec=rezound +Icon= +Name=reZound +Name[hi]=री-जाउण्ड +Name[ne]=रिजोन्ड +Name[te]=రిజౌండ్ +GenericName=Audio Editor +GenericName[af]=Klank Redigeerder +GenericName[ar]=محرر أصوات +GenericName[az]=Audio Editoru +GenericName[be]=Гукавы рэдактар +GenericName[bg]=Аудио редактор +GenericName[bn]=অডিও সম্পাদক +GenericName[br]=Un Aozer Klevet +GenericName[bs]=Audio editor +GenericName[ca]=Editor d'àudio +GenericName[cs]=Audio editor +GenericName[csb]=Editora zwãkòwëch lopków +GenericName[cy]=Golygydd Sain +GenericName[da]=Lyd-editor +GenericName[de]=Audio-Editor +GenericName[el]=Επεξεργαστής ήχου +GenericName[eo]=Sona redaktilo +GenericName[es]=Editor de audio +GenericName[et]=Audioredaktor +GenericName[eu]=Audio editorea +GenericName[fa]=ویرایشگر صوتی +GenericName[fi]=Äänieditori +GenericName[fr]=Éditeur audio +GenericName[fy]=lûdsbewurker +GenericName[ga]=Eagarthóir Fuaime +GenericName[gl]=Editor de Son +GenericName[he]=עורך שמע +GenericName[hi]=ऑडियो संपादक +GenericName[hr]=Uređivač zvuka +GenericName[hu]=Hangszerkesztő +GenericName[id]=Penyunting Audio +GenericName[is]=Hljóðritillinn +GenericName[it]=Editor audio +GenericName[ja]=オーディオエディタ +GenericName[ka]=აუდიო რედაქტორი +GenericName[kk]=Дыбыс редакторы +GenericName[km]=កម្មវិធី​និពន្ធ​សំឡេង +GenericName[ko]=소리 편집기 +GenericName[lt]=Audio redaktorius +GenericName[lv]=Audio redaktors +GenericName[mk]=Аудиоуредувач +GenericName[ms]=Penyunting Audio +GenericName[mt]=Editur awdjo +GenericName[nb]=Lydredigering +GenericName[nds]=Audio-Editor +GenericName[ne]=अडियो सम्पादक +GenericName[nl]=Geluidsbewerker +GenericName[nn]=Lydredigering +GenericName[pa]=ਆਡੀਓ ਸੰਪਾਦਕ +GenericName[pl]=Edytor plików dźwiękowych +GenericName[pt]=Editor de Áudio +GenericName[pt_BR]=Editor de Som +GenericName[ro]=Editor audio +GenericName[ru]=Звуковой редактор +GenericName[rw]=Muhinduzi w'Inyumvo +GenericName[se]=Jietnadoaimmaheaddji +GenericName[sk]=Zvukový editor +GenericName[sl]=Urejevalnik zvoka +GenericName[sr]=Аудио уређивач +GenericName[sr@Latn]=Audio uređivač +GenericName[sv]=Ljudeditor +GenericName[ta]=ஒலி திருத்தி +GenericName[te]=శబ్డ ఎడిటర్ +GenericName[tg]=Муҳаррири садо +GenericName[th]=เครื่องมือแก้ไขไฟล์เสียง +GenericName[tr]=Ses Düzenleyicisi +GenericName[tt]=Tawış Tözätkeç +GenericName[uk]=Редактор аудіо записів +GenericName[uz]=Audio tahrirchi +GenericName[uz@cyrillic]=Аудио таҳрирчи +GenericName[vi]=Trình biên soạn âm thanh +GenericName[wa]=Aspougneu d' sons +GenericName[zh_CN]=音频编辑器 +GenericName[zh_TW]=Audio 編輯器 +StartupNotify=true +Type=Application +Categories=AudioVideo; diff --git a/kappfinder/apps/Multimedia/slab.desktop b/kappfinder/apps/Multimedia/slab.desktop new file mode 100644 index 000000000..1e50a1999 --- /dev/null +++ b/kappfinder/apps/Multimedia/slab.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Name=Slab +Name[bn]=স্ল্যাব +Name[eo]=Sonlaborejo +Name[hi]=स्लैब +Name[ne]=स्ल्याब +Name[rw]=Gukatamo uduce +Name[ta]=ஸ்லாப் +Name[te]=స్లాబ్ +Name[ven]=Tshilebe +Name[zu]=Ikhekheba +GenericName=Audio Recorder +GenericName[af]=Klank Opnemer +GenericName[ar]=مسجل الصوت +GenericName[az]=Səs Qeyd Edicisi +GenericName[be]=Запіс гуку +GenericName[bg]=Запис на звук +GenericName[bn]=অডিও রেকর্ডার +GenericName[bs]=Audio rekorder +GenericName[ca]=Enregistrador d'àudio +GenericName[cs]=Zvukový rekordér +GenericName[csb]=Nagrëwôrz audio +GenericName[cy]=Recordydd Sain +GenericName[da]=Lydoptager +GenericName[de]=Audio-Wiedergabe +GenericName[el]=Εγγραφέας ήχου +GenericName[eo]=Sonoregistrilo +GenericName[es]=Grabador de audio +GenericName[et]=Helisalvestus +GenericName[eu]=Soinu grabatzailea +GenericName[fa]=ضبط‌کنندۀ صوتی +GenericName[fi]=Äänitysohjelma +GenericName[fr]=Enregistreur audio +GenericName[fy]=lûdsrekorder +GenericName[ga]=Taifeadán Fuaime +GenericName[gl]=Grabador de Son +GenericName[he]=רשמקול +GenericName[hi]=ऑडियो रेकॉर्डर +GenericName[hr]=Snimač zvuka +GenericName[hu]=Hangrögzítő +GenericName[is]=Hljóðupptaka +GenericName[it]=Registratore audio +GenericName[ja]=オーディオレコーダ +GenericName[ka]=ხმის ჩამწერი +GenericName[kk]=Дыбыс жазушы +GenericName[km]=កម្មវិធី​ថត​សំឡេង +GenericName[ko]=소리 녹음기 +GenericName[lo]=ເຄື່ອງມືອັດສງງ +GenericName[lt]=Audio įrašinėtojas +GenericName[lv]=Audio Rakstītājs +GenericName[mk]=Аудиорекордер +GenericName[mn]=Дуу-Тоглуулагч +GenericName[ms]=Perakam Audio +GenericName[mt]=Rekordjatur tal-awdjo +GenericName[nb]=Lydopptaker +GenericName[nds]=Audio-Opnehmer +GenericName[ne]=अडियो रेकर्डर +GenericName[nl]=Geluidsrecorder +GenericName[nn]=Lydopptakar +GenericName[nso]=Serekhoti sa Kwagalo +GenericName[pa]=ਆਡੀਓ ਰਿਕਾਰਡਰ +GenericName[pl]=Nagrywarka audio +GenericName[pt]=Gravador de Áudio +GenericName[pt_BR]=Gravador de Áudio +GenericName[ro]=Înregistrare audio +GenericName[ru]=Запись звука +GenericName[rw]=Mubika Nyumvo +GenericName[se]=Jietnabáddejeaddji +GenericName[sk]=Nahrávanie zvukov +GenericName[sl]=Snemalnik zvoka +GenericName[sr]=Аудио снимач +GenericName[sr@Latn]=Audio snimač +GenericName[ss]=Sishicileli semsindvo +GenericName[sv]=Ljudinspelare +GenericName[ta]=ஒலிப்பதிவாளர் +GenericName[te]=శబ్దాలను రికార్డ్ చెసె కార్యక్రమం +GenericName[tg]=Сабти садо +GenericName[th]=เครื่องมืออัดเสียง +GenericName[tr]=Ses Kaydedici +GenericName[tt]=Tawış Yazdırğıç +GenericName[uk]=Аудіозаписувач +GenericName[uz]=Audio yozuvchi +GenericName[uz@cyrillic]=Аудио ёзувчи +GenericName[ven]=Tshirekhodi tsha Mubvumo +GenericName[vi]=Ghi âm +GenericName[wa]=Eredjistreu d' son +GenericName[xh]=Umxubi Wokuvakalayo +GenericName[zh_CN]=录音程序 +GenericName[zh_TW]=錄音程式 +GenericName[zu]=Umqophi Wokuzwakalayo +Exec=slab +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Multimedia/sweep.desktop b/kappfinder/apps/Multimedia/sweep.desktop new file mode 100644 index 000000000..8cac85ad3 --- /dev/null +++ b/kappfinder/apps/Multimedia/sweep.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Exec=sweep +Icon= +Name=Sweep +Name[bn]=সুইপ +Name[eo]=Balau +Name[fa]=جاروب +Name[hi]=स्वीप +Name[nb]=Sveip +Name[ne]=स्विप +Name[nn]=Sveip +Name[pa]=ਸਵੀਪ +Name[rw]=Gusukura +Name[te]=స్వీప్ +Name[vi]=Quét +Name[wa]=Ramon (Sweep) +Name[zh_TW]=清理 +GenericName=Audio Editor +GenericName[af]=Klank Redigeerder +GenericName[ar]=محرر أصوات +GenericName[az]=Audio Editoru +GenericName[be]=Гукавы рэдактар +GenericName[bg]=Аудио редактор +GenericName[bn]=অডিও সম্পাদক +GenericName[br]=Un Aozer Klevet +GenericName[bs]=Audio editor +GenericName[ca]=Editor d'àudio +GenericName[cs]=Audio editor +GenericName[csb]=Editora zwãkòwëch lopków +GenericName[cy]=Golygydd Sain +GenericName[da]=Lyd-editor +GenericName[de]=Audio-Editor +GenericName[el]=Επεξεργαστής ήχου +GenericName[eo]=Sona redaktilo +GenericName[es]=Editor de audio +GenericName[et]=Audioredaktor +GenericName[eu]=Audio editorea +GenericName[fa]=ویرایشگر صوتی +GenericName[fi]=Äänieditori +GenericName[fr]=Éditeur audio +GenericName[fy]=lûdsbewurker +GenericName[ga]=Eagarthóir Fuaime +GenericName[gl]=Editor de Son +GenericName[he]=עורך שמע +GenericName[hi]=ऑडियो संपादक +GenericName[hr]=Uređivač zvuka +GenericName[hu]=Hangszerkesztő +GenericName[id]=Penyunting Audio +GenericName[is]=Hljóðritillinn +GenericName[it]=Editor audio +GenericName[ja]=オーディオエディタ +GenericName[ka]=აუდიო რედაქტორი +GenericName[kk]=Дыбыс редакторы +GenericName[km]=កម្មវិធី​និពន្ធ​សំឡេង +GenericName[ko]=소리 편집기 +GenericName[lt]=Audio redaktorius +GenericName[lv]=Audio redaktors +GenericName[mk]=Аудиоуредувач +GenericName[ms]=Penyunting Audio +GenericName[mt]=Editur awdjo +GenericName[nb]=Lydredigering +GenericName[nds]=Audio-Editor +GenericName[ne]=अडियो सम्पादक +GenericName[nl]=Geluidsbewerker +GenericName[nn]=Lydredigering +GenericName[pa]=ਆਡੀਓ ਸੰਪਾਦਕ +GenericName[pl]=Edytor plików dźwiękowych +GenericName[pt]=Editor de Áudio +GenericName[pt_BR]=Editor de Som +GenericName[ro]=Editor audio +GenericName[ru]=Звуковой редактор +GenericName[rw]=Muhinduzi w'Inyumvo +GenericName[se]=Jietnadoaimmaheaddji +GenericName[sk]=Zvukový editor +GenericName[sl]=Urejevalnik zvoka +GenericName[sr]=Аудио уређивач +GenericName[sr@Latn]=Audio uređivač +GenericName[sv]=Ljudeditor +GenericName[ta]=ஒலி திருத்தி +GenericName[te]=శబ్డ ఎడిటర్ +GenericName[tg]=Муҳаррири садо +GenericName[th]=เครื่องมือแก้ไขไฟล์เสียง +GenericName[tr]=Ses Düzenleyicisi +GenericName[tt]=Tawış Tözätkeç +GenericName[uk]=Редактор аудіо записів +GenericName[uz]=Audio tahrirchi +GenericName[uz@cyrillic]=Аудио таҳрирчи +GenericName[vi]=Trình biên soạn âm thanh +GenericName[wa]=Aspougneu d' sons +GenericName[zh_CN]=音频编辑器 +GenericName[zh_TW]=Audio 編輯器 +StartupNotify=true +Type=Application +Categories=AudioVideo; diff --git a/kappfinder/apps/Multimedia/xawtv.desktop b/kappfinder/apps/Multimedia/xawtv.desktop new file mode 100644 index 000000000..9a28c1644 --- /dev/null +++ b/kappfinder/apps/Multimedia/xawtv.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +GenericName=Watch TV! +GenericName[af]=Kyk TV! +GenericName[ar]=شاهد التلفاز ! +GenericName[az]=TV seyr et! +GenericName[be]=Глядзі ТБ! +GenericName[bg]=Телевизия +GenericName[bn]=টিভি দেখুন! +GenericName[br]=Sell ouzh ar skinwell ! +GenericName[bs]=Gledajte TV! +GenericName[ca]=Veure la TV! +GenericName[cs]=Sledujte televizi! +GenericName[csb]=Òbzéranié TV! +GenericName[cy]=Gwyliwch Teledu! +GenericName[da]=Se tv! +GenericName[de]=Fernsehen mit dem Computer +GenericName[el]=Δείτε TV! +GenericName[eo]=Televidprogramo! +GenericName[es]=¡Vea la televisión! +GenericName[et]=Televiisor! +GenericName[eu]=Ikusi telebista! +GenericName[fa]=تماشای تلویزیون! +GenericName[fi]=Katso televisiota! +GenericName[fo]=Sjónvarp +GenericName[fr]=Regardez la télévision ! +GenericName[fy]=TV sjen! +GenericName[ga]=Féach ar an teilifís! +GenericName[gl]=Ver a TV! +GenericName[he]=צפייה בטלוויזיה +GenericName[hi]=टीवी देखें! +GenericName[hu]=TV-néző +GenericName[id]=Lihat TV! +GenericName[is]=Horfðu á sjónvarp! +GenericName[it]=Guarda la TV! +GenericName[ja]=テレビを見る +GenericName[kk]=Теледидар +GenericName[km]=មើល​ទូរទស្សន៍ ! +GenericName[lo]=ເບິ່ງໂທລະພາບ ! +GenericName[lv]=Skaties TV! +GenericName[mk]=Гледајте телевизија! +GenericName[mn]=Зурагт үз! +GenericName[ms]=Tonton TV! +GenericName[mt]=Ara t-TV! +GenericName[nb]=Se TV! +GenericName[nds]=Kiek feern! +GenericName[ne]=टी भी हेर्नुहोस् ! +GenericName[nl]=TV kijken +GenericName[nn]=Sjå TV! +GenericName[nso]=Bogela TV! +GenericName[pa]=TV ਵੇਖੋ! +GenericName[pl]=Oglądanie TV! +GenericName[pt]=Veja Televisão! +GenericName[pt_BR]=Assista TV! +GenericName[ro]=Vizionează TV! +GenericName[ru]=Телевизор +GenericName[rw]=Kureba TV! +GenericName[se]=Geahčča TV! +GenericName[sk]=Pozerajte sa na TV! +GenericName[sl]=Glejte televizijo! +GenericName[sr]=Гледајте ТВ! +GenericName[sr@Latn]=Gledajte TV! +GenericName[ss]=Buka i-TV! +GenericName[sv]=Titta på TV +GenericName[ta]=தொலைக்காட்சியை கவனி! +GenericName[te]=టివి చూడండి! +GenericName[tg]=Телевизор +GenericName[th]=ดูทีวี ! +GenericName[tr]=TV seyret! +GenericName[uk]=Дивитися ТБ! +GenericName[uz]=TV koʻrish +GenericName[uz@cyrillic]=ТВ кўриш +GenericName[ven]=Talelani Tsumbazwifanyiso! +GenericName[vi]=Xem TV! +GenericName[wa]=Waitîz l' televuzion so vosse copiutrece +GenericName[xh]=Bukela Umabona-kude! +GenericName[zh_CN]=看电视! +GenericName[zh_TW]=看電視! +GenericName[zu]=Buka Umabonakude! +Exec=xawtv +Icon=xawtv +Name=XawTV +Name[az]=XawXV +Name[hi]=एक्सॉ-टीवी +Name[ne]=Xaw टी भी +Name[ta]=Xawடிவி +Name[te]=గ్జాటివి +Name[tr]=XawXV +Name[uk]=XawXV +Name[zu]=Umabonakude we-Xaw +Path= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Multimedia/xcam.desktop b/kappfinder/apps/Multimedia/xcam.desktop new file mode 100644 index 000000000..d99e649eb --- /dev/null +++ b/kappfinder/apps/Multimedia/xcam.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Name=XCam +Name[bn]=এক্স-ক্যাম +Name[eo]=X-Fotilo +Name[hi]=एक्सकैम +Name[lo]=Xcan +Name[ne]=X क्याम +Name[sv]=Xcam +Name[te]=ఎక్స్ కెమ్ +Name[zu]=I-XCam +GenericName=Camera Program +GenericName[af]=Kamera Program +GenericName[ar]=برنامج كاميرات +GenericName[az]=Kamera Proqramı +GenericName[be]=Праграма працы з камерай +GenericName[bg]=Програма за фотоапарати +GenericName[bn]=ক্যামেরা প্রোগ্রাম +GenericName[br]=Goulev kamera +GenericName[bs]=Program za kameru +GenericName[ca]=Un programa per a càmeres +GenericName[cs]=Kamera +GenericName[csb]=Programa dlô kamerë +GenericName[cy]=Rhaglen Camera +GenericName[da]=Kameraprogram +GenericName[de]=Kameraprogramm +GenericName[el]=Πρόγραμμα για κάμερες +GenericName[eo]=Fotilo-programo +GenericName[es]=Programa de cámara +GenericName[et]=Kaamera rakendus +GenericName[eu]=Kamara programa +GenericName[fa]=برنامۀ دوربین +GenericName[fi]=Kameraohjelma +GenericName[fr]=Logiciel pour les caméras +GenericName[fy]=Kameraprogramma +GenericName[ga]=Clár Ceamara +GenericName[gl]=Programa de Cámara +GenericName[he]=תוכנית מצלמה +GenericName[hi]=कैमरा प्रोग्राम +GenericName[hr]=Program za kameru +GenericName[hu]=Videokamera-kezelő +GenericName[is]=Myndavélaforrit +GenericName[it]=Programma per le macchine fotografiche +GenericName[ja]=カメラプログラム +GenericName[ka]=კამერის პროგრამა +GenericName[kk]=Фотокамера +GenericName[km]=កម្មវិធី​ម៉ាស៊ីន​ថត +GenericName[ko]=카메라 프로그램 +GenericName[lo]=ໂປຣແກຣມກ້ອງ +GenericName[lt]=Kameros programa +GenericName[lv]=Kameras Programma +GenericName[mk]=Програма за камери +GenericName[mn]=Камерын програм +GenericName[ms]=Program Kamera +GenericName[mt]=Programm għall-kameras +GenericName[nb]=Kameraprogram +GenericName[nds]=Kameraprogramm +GenericName[ne]=क्यामेरा कार्यक्रम +GenericName[nl]=Cameraprogramma +GenericName[nn]=Kameraprogram +GenericName[nso]=Lenaneo la Setseadiswantsho +GenericName[pa]=ਕੈਮਰਾ ਕਾਰਜ +GenericName[pl]=Program do obsługi kamery +GenericName[pt]=Programa de Câmaras +GenericName[pt_BR]=Programa para Câmera +GenericName[ro]=Program pentru WebCam +GenericName[ru]=Камера +GenericName[rw]=Porogaramu ya Kamera +GenericName[se]=Govvenaperáhttaprográmma +GenericName[sk]=Kamera +GenericName[sl]=Program za kamero +GenericName[sr]=Програм за камеру +GenericName[sr@Latn]=Program za kameru +GenericName[ss]=Luhlelo lwekhamera +GenericName[sv]=Kameraprogram +GenericName[ta]=காமிரா நிரலி +GenericName[te]=కెమెరా కార్యక్రమం +GenericName[tg]=Камера +GenericName[th]=โปรแกรมกล้อง +GenericName[tr]=Kamera Programı +GenericName[tt]=Kamera öçen Yazılım +GenericName[uk]=Програма фотоапарата +GenericName[uz]=Fotoaparat uchun dastur +GenericName[uz@cyrillic]=Фотоапарат учун дастур +GenericName[ven]=Mbekanyamushumo ya Tshidzhiatshifanyiso +GenericName[vi]=Chương trình quay phim +GenericName[wa]=Programe di camera +GenericName[xh]=Inkqubo yeKhamera +GenericName[zh_CN]=摄像头程序 +GenericName[zh_TW]=Camera 程式 +GenericName[zu]=Uhlelo lwemisebenzi lwe-Camera +Exec=xcam +Terminal=false +Type=Application diff --git a/kappfinder/apps/Multimedia/xine.desktop b/kappfinder/apps/Multimedia/xine.desktop new file mode 100644 index 000000000..2340371f8 --- /dev/null +++ b/kappfinder/apps/Multimedia/xine.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +GenericName=Video Player +GenericName[af]=Video Speler +GenericName[ar]=قارئ المرئيات +GenericName[az]=Video Çalğıcısı +GenericName[be]=Відэапрайгравальнік +GenericName[bg]=Видео плеър +GenericName[bn]=ভিডিও প্রদর্শক +GenericName[br]=Ur soner Video +GenericName[bs]=Video preglednik +GenericName[ca]=Reproductor de vídeo +GenericName[cs]=Přehrávač videa +GenericName[csb]=Grôcz Video +GenericName[cy]=Chwaraewr Fideo +GenericName[da]=Videoafspiller +GenericName[de]=Ein Abspielprogramm für Videos +GenericName[el]=Αναπαραγωγέας βίντεο +GenericName[eo]=Ludilo por videofilmoj +GenericName[es]=Reproductor de vídeo +GenericName[et]=Videofailide mängimine +GenericName[eu]=Bideo erreproduzigailua +GenericName[fa]=پخش‌کنندۀ ویدیو +GenericName[fi]=Videosoitin +GenericName[fr]=Lecteur vidéo +GenericName[fy]=Fideospiler +GenericName[ga]=Fístaispeántóir +GenericName[gl]=Reprodutor de Vídeo +GenericName[he]=נגן וידאו +GenericName[hi]=वीडियो प्लेयर +GenericName[hr]=Video program +GenericName[hu]=Videólejátszó +GenericName[id]=Player Video +GenericName[is]=Forrit til að spila kvikmyndir +GenericName[it]=Lettore di video +GenericName[ja]=ビデオプレーヤ +GenericName[ka]=Видео Player +GenericName[kk]=Бейнеплейер +GenericName[km]=កម្មវិធី​ចាក់​វីដេអូ +GenericName[ko]=동영상 재생기 +GenericName[lo]=ເຄືອ່ງຫລິ້ນວີດີໂອ +GenericName[lt]=Vaizdo grotuvas +GenericName[lv]=Video Atskaņotājs +GenericName[mk]=Видеоплеер +GenericName[mn]=Видео тоглуулагч +GenericName[ms]=Pemain Video +GenericName[mt]=Plejer tal-Video +GenericName[nb]=Videospiller +GenericName[nds]=Video-Afspeler +GenericName[ne]=भिडियो प्लेएर +GenericName[nl]=Videospeler +GenericName[nn]=Videospelar +GenericName[nso]=Sebapadi sa Video +GenericName[oc]=Reproductor de video +GenericName[pa]=ਵੀਡਿਓ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz Video +GenericName[pt]=Leitor de Vídeo +GenericName[pt_BR]=Reprodutor de vídeos +GenericName[ro]=Program de redare video +GenericName[ru]=Видео плейер +GenericName[rw]=Igikina Videwo +GenericName[se]=Videočuojan +GenericName[sk]=Video prehrávač +GenericName[sl]=Predvajalnik videov +GenericName[sr]=Видео приказивач +GenericName[sr@Latn]=Video prikazivač +GenericName[ss]=Sidlali mafilimu +GenericName[sv]=Filmspelare +GenericName[ta]=ஒளி-ஒலி சாதனம் +GenericName[te]=విడియో ప్లేయర్ +GenericName[tg]=Плейери видео +GenericName[th]=โปรแกรมเล่นภาพยนตร์ +GenericName[tr]=Görüntü Yürütücüsü +GenericName[tt]=Video Uynatqıç +GenericName[uk]=Програвач відеофайлів +GenericName[uz]=Video pleyer +GenericName[uz@cyrillic]=Видео плейер +GenericName[ven]=Tshitambisa Vidio +GenericName[vi]=Trình xem phim +GenericName[wa]=Djouweu di fitchîs videyo +GenericName[xh]=Umdlali we Video +GenericName[zh_CN]=视频播放器 +GenericName[zh_TW]=視像檔播放程式 +GenericName[zu]=Umdlali we-Vidiyo +Exec=xine %f +Icon=video +MimeType=video/mpeg;video/quicktime;video/x-flic;video/x-msvideo;video/x-ogm;video/x-theora;video/mp4 +Name=Xine +Name[hi]=एक्साइन +Name[lo]=ສຸວັນທອງ +Name[te]=క్సైన్ +ServiceTypes= +Type=Application + diff --git a/kappfinder/apps/Multimedia/xmms-enqueue.desktop b/kappfinder/apps/Multimedia/xmms-enqueue.desktop new file mode 100644 index 000000000..33f97ddbe --- /dev/null +++ b/kappfinder/apps/Multimedia/xmms-enqueue.desktop @@ -0,0 +1,156 @@ +[Desktop Entry] +GenericName=Playlist Tool +GenericName[af]=Liedjie speel lys Program +GenericName[az]=Çalğı Siyahısı Vasitəsi +GenericName[be]=Сродак працы са спісам прайгравання +GenericName[bg]=Инструмент за списъци за изпълнение +GenericName[bn]=গানের তালিকা টুল +GenericName[br]=Ostilh roll tonioù +GenericName[bs]=Dodavanje na playlistu +GenericName[ca]=Eina per a llistes de reproducció +GenericName[cs]=Nástroj pro Playlistu +GenericName[csb]=Nôrzãdze edicëji lëstë graniô +GenericName[cy]=Erfyn Rhestr Chwarae +GenericName[da]=Spilleliste-værktøj +GenericName[de]=Abspiellisten bearbeiten +GenericName[el]=Εργαλείο λίστας αναπαραγωγής +GenericName[eo]=Ludlisto-programo +GenericName[es]=Herramienta de lista de reproducción +GenericName[et]=Esitusnimekirja haldur +GenericName[eu]=Erreproduzigailu-zerrenda tresna +GenericName[fa]=ابزار فهرست پخش +GenericName[fi]=Soittolistatyökalu +GenericName[fr]=Outil pour liste de lecture +GenericName[fy]=Ofspyllist-helprogramma +GenericName[ga]=Uirlis Seinmliosta +GenericName[gl]=Lista de Reproducións +GenericName[he]=כלי רשימות ניגון +GenericName[hi]=गीत-सूची औज़ार +GenericName[hr]=Alat za upravljanje popisima pjesama +GenericName[hu]=Lejátszólista-kezelő +GenericName[is]=Lagalistatól +GenericName[it]=Strumento per le playlist +GenericName[ja]=プレイリストツール +GenericName[ka]=რეპერტუარის პულტი +GenericName[kk]=Орындау тізімі +GenericName[km]=ឧបករណ៍​បញ្ជី​ចាក់ +GenericName[ko]=재생 목록 도구 +GenericName[lo]=ເຄືອ່ງມືລາຍການທີ່ຈະຫລິ້ນ +GenericName[lt]=Gaidaraščio priemonė +GenericName[lv]=Atskaņošanas saraksta rīks +GenericName[mk]=Алатка за листи со нумери +GenericName[mn]=Тоглуулах жагсаалт гаргагч +GenericName[ms]=Alat Senarai Siar +GenericName[mt]=Għodda għal-lista ta' daqq +GenericName[nb]=Spillelisteverktøy +GenericName[nds]=Afspeellist-Warktüüch +GenericName[ne]=प्ले सूची उपकरण +GenericName[nl]=Afspeellijst-hulprogramma +GenericName[nn]=Spelelisteverktøy +GenericName[nso]=Sebereka sa Palo ya Papadi +GenericName[pa]=ਸੰਗੀਤ ਸੂਚੀ ਸੰਦ +GenericName[pl]=Narzędzie do edycji listy odtwarzania +GenericName[pt]=Gestão de Listas de Reprodução +GenericName[pt_BR]=Lista de reprodução +GenericName[ro]=Utilitar listă redare +GenericName[ru]=Список песен +GenericName[rw]=Igikoresho UrutondeGukina +GenericName[se]=Čuojahanlistoreaidu +GenericName[sk]=Nastroj pre Playlisty +GenericName[sl]=Orodje za predvajalni seznam +GenericName[sr]=Алат за листе нумера +GenericName[sr@Latn]=Alat za liste numera +GenericName[ss]=Litfulusi leluhlu lekudlala +GenericName[sv]=Spellistverktyg +GenericName[ta]=விளையாட்டு பட்டியல் கருவி +GenericName[te]=ప్లెలిస్ట్ పనిముట్టు +GenericName[tg]=Рӯйхати сурудҳо +GenericName[th]=เครื่องมือรายการที่จะเล่น +GenericName[tr]=Çalma Listesi Aracı +GenericName[tt]=UynatuTezmä Qoralı +GenericName[uk]=Засіб списку композицій +GenericName[uz]=Qoʻshiqlar roʻyxati uchun vosita +GenericName[uz@cyrillic]=Қўшиқлар рўйхати учун восита +GenericName[ven]=Tshishumiswa tshau Tamba zwire kha Mutevhe +GenericName[vi]=Công cụ tạo danh sách bài +GenericName[wa]=Usteye di djivêye di léjhaedje +GenericName[xh]=Isixhobo Soluhlu lokudlala +GenericName[zh_CN]=播放列表工具 +GenericName[zh_TW]=播放列表工具 +GenericName[zu]=Ithuluzi Loluhlu lokudlala +Exec=xmms -e %F +Icon=xmms +MimeType=audio/x-mp3;audio/x-mod;audio/x-flac;audio/x-wav;audio/x-mpegurl;audio/x-scpls;audio/vorbis +Name=Enqueue in XMMS +Name[af]=Gooi in XMMS wagtou +Name[ar]=صف في صف إنتظار XMMS +Name[az]=XMMSdə Çal +Name[be]=Дадаць у чаргу XMMS +Name[br]=Lostañ e XMMS +Name[bs]=Dodaj u XMMS +Name[ca]=Cua XMMS +Name[cs]=Zařazení skladby do XMMS +Name[csb]=Kòlejkòwanié XMMS +Name[cy]=Rhestru yn XMMS +Name[da]=Sæt i kø i XMMS +Name[de]=XMMS-Warteschlange +Name[el]=Στην ουρά του XMMS +Name[eo]=Vicigi en XMMS +Name[es]=Encolar en XMMS +Name[et]=XMMS Enqueue +Name[eu]=XMMSen sartu +Name[fr]=Mettre dans la liste de lecture XMMS +Name[fy]=Yn XMMS-spyllist pleatse +Name[ga]=Enqueue i XMMS +Name[gl]=Por á cola en XMMS +Name[hi]=एक्सएमएमएस में लाइन से लगाएँ +Name[hr]=Dodaj na XMMS popis pjesama +Name[hu]=XMMS sor +Name[is]=Setja í biðröð í XMMS +Name[it]=Metti in coda in XMMS +Name[ja]=XMMS に登録 +Name[ka]=XMMS რიგში ჩაყენება +Name[kk]=XMMS-ке кіріспе +Name[km]=ដាក់​ជា​ជួរ​ក្នុង XMMS +Name[ko]=XMMS에 예약 +Name[lv]=Ierindot XMMS +Name[mk]=Во редица на XMMS листа +Name[mn]=XMMS-дараалал +Name[mt]=Żid mal-XMMS +Name[nb]=Legg i køen til XMMS +Name[nds]=To de List vun XMMS tofögen +Name[ne]=XMMS मा लाम लगाउनुहोस् +Name[nl]=In XMMS-speellijst plaatsen +Name[nn]=Legg i XMMS-spelelista +Name[nso]=Enqueue kago XMMS +Name[pa]=XMMS ਵਿੱਚ ਸ਼ਾਮਿਲ +Name[pl]=Kolejkowanie XMMS +Name[pt]=Pôr na lista do XMMS +Name[pt_BR]=Colocar na lista do XMMS +Name[ro]=Adaugă la lista XMMS +Name[ru]=Введение в XMMS +Name[rw]=Gushyiramurongo muri XMMS +Name[se]=Lasit XMMS-čuojahanlistui +Name[sk]=Enqueue v XMMS +Name[sl]=Uvrsti v XMMS +Name[sr]=Додај у XMMS +Name[sr@Latn]=Dodaj u XMMS +Name[ss]=I-Enqueue ku XMMS +Name[sv]=Köa i XMMS +Name[ta]=XMMSல் உள்ள வரிசைமுறைமை +Name[tg]=Муқаддимаи XMMS +Name[th]=ต่อคิวเล่นใน XMMS +Name[tr]=XMMS'de sıraya ekle +Name[tt]=XMMS'qa Kereş +Name[uk]=В чергу до XMMS +Name[vi]=Xếp vào XMMS +Name[wa]=Metaedje e cawe dins XMMS +Name[xh]=Folisa kwi XMMS +Name[zh_CN]=加入 XMMS 队列 +Name[zh_TW]=加入 XMMS 播放列表 +Name[zu]=Lindela kulayini we-XMMS +Path= +Terminal=false +Type=Application +NoDisplay=true +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Multimedia/xmms.desktop b/kappfinder/apps/Multimedia/xmms.desktop new file mode 100644 index 000000000..79fcad864 --- /dev/null +++ b/kappfinder/apps/Multimedia/xmms.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +GenericName=Multimedia Player +GenericName[af]=Multimedia Speler +GenericName[ar]=مشغل الوسائط المتعددة +GenericName[az]=Multimedia Çalğıcısı +GenericName[be]=Мультымедыйны прайгравальнік +GenericName[bg]=Мултимедиен плеър +GenericName[bn]=মাল্টিমিডিয়া প্লেয়ার +GenericName[br]=Ur c'hoarier liesvedia +GenericName[bs]=Preglednik multimedijalnih datoteka +GenericName[ca]=Reproductor multimèdia +GenericName[cs]=Přehrávač multimédií +GenericName[csb]=Mùltimedialny grôcz +GenericName[cy]=Chwaraewr Amlgyfrwng +GenericName[da]=Multimedieafspiller +GenericName[de]=Multimediawiedergabe +GenericName[el]=Αναπαραγωγέας πολυμέσων +GenericName[eo]=Plurmedia ludilo +GenericName[es]=Reproductor multimedia +GenericName[et]=Multimeedia mängija +GenericName[eu]=Multimedia erreproduzigailua +GenericName[fa]=پخش‌کنندۀ چند رسانه‌ای +GenericName[fi]=Multimediasoitin +GenericName[fr]=Lecteur multimédia +GenericName[fy]=Multimediaspiler +GenericName[ga]=Seinnteoir Ilmheán +GenericName[gl]=Reprodutor Multimédia +GenericName[he]=נגן מולטימדיה +GenericName[hi]=मल्टीमीडिया प्लेयर +GenericName[hr]=Multimedijski program +GenericName[hu]=Médialejátszó +GenericName[is]=Margmiðlunarspilari +GenericName[it]=Lettore multimediale +GenericName[ja]=メディアプレーヤ +GenericName[ka]=მულტიმედია ცენტრი +GenericName[kk]=Мультимедиа плейер +GenericName[ko]=멀티미디어 재생기 +GenericName[lo]=ເຄື່ອງມືຫລິ້ນແຟ້ມສີ +GenericName[lt]=Multimedijos grotuvas +GenericName[lv]=Multimēdiju Atskaņotājs +GenericName[mk]=Мултимедија-плеер +GenericName[mn]=Мултимедиа-Тоглуулагч +GenericName[ms]=Pemain Multimedia +GenericName[mt]=Plejer Multimedia +GenericName[nb]=Multimediaspiller +GenericName[nds]=Multimedia-Afspeler +GenericName[ne]=मल्टिमिडिया प्लेएर +GenericName[nl]=Multimediaspeler +GenericName[nn]=Multimediespelar +GenericName[nso]=Sebapadi sa Media wa Bontshi +GenericName[pa]=ਬਹੁਰੰਗ ਵਾਜਾ +GenericName[pl]=Odtwarzacz multimedialny +GenericName[pt]=Leitor Multimédia +GenericName[pt_BR]=Reprodutor multimídia +GenericName[ro]=Program de redare multimedia +GenericName[ru]=Мультимедийный проигрыватель +GenericName[rw]=Igikina Mutwaramakuru +GenericName[se]=Multimediačuojan +GenericName[sk]=Multimediálny prehrávač +GenericName[sl]=Večpredstavnostni predvajalnik +GenericName[sr]=Мултимедијални приказивач +GenericName[sr@Latn]=Multimedijalni prikazivač +GenericName[ss]=Sidlali setindzaba letinyenti +GenericName[sv]=Multimediaspelare +GenericName[ta]=பல்ஊடக சாதனம் +GenericName[te]=బహుళ మాధ్యమ ప్లేయర్ +GenericName[tg]=Плейери мултимедиявӣ +GenericName[th]=โปรแกรมเล่นมัลติมีเดีย +GenericName[tr]=Çoklu Ortam Yürütücüsü +GenericName[tt]=Multimedia Uynatqıç +GenericName[uk]=Програвач файлів мультимедіа +GenericName[uz]=Multimedia pleyer +GenericName[uz@cyrillic]=Мултимедиа плейер +GenericName[ven]=Tshitambi tsha Zwimvumvusi +GenericName[vi]=Trình chơi nhạc đa phương tiện +GenericName[wa]=Djouweu multimedia +GenericName[xh]=Umdlali we Multimedia +GenericName[zh_CN]=多媒体播放器 +GenericName[zh_TW]=多媒體播放程式 +GenericName[zu]=Umdlali wonozindaba abaningi +Exec=xmms %U +Icon=xmms +MimeType=audio/x-mp3;audio/x-mod;audio/x-wav;audio/x-flac;audio/x-mpegurl;audio/x-scpls;audio/vorbis +Name=XMMS +Name[hi]=एक्सएमएमएस +Name[te]=ఎక్స్ ఎం ఎం ఎస్ +Path= +SwallowExec= +SwallowTitle= +Terminal=false +Type=Application +X-KDE-StartupNotify=false +X-KDE-Protocols=http +X-DCOP-ServiceType=None diff --git a/kappfinder/apps/Office/Applix.desktop b/kappfinder/apps/Office/Applix.desktop new file mode 100644 index 000000000..fb236e829 --- /dev/null +++ b/kappfinder/apps/Office/Applix.desktop @@ -0,0 +1,90 @@ +[Desktop Entry] +Name=Applix +Name[bn]=অ্যাপলিক্স +Name[eo]=Aplikso +Name[hi]=एप्लिक्स +Name[ne]=एप्लिक्स +Name[pa]=ਅਪਲੀਕਸ +Name[te]=ఎప్ లిక్స్ +MimeType= +Exec=applix +Icon=applixware +Path= +DocPath= +Type=Application +Terminal=false +GenericName=Office Suite +GenericName[af]=Kantoor Paket +GenericName[ar]=برامج مكتبية +GenericName[az]=Offis Proqramları Dəsti +GenericName[be]=Офіснае асяроддзе +GenericName[bg]=Офис пакет +GenericName[bn]=অফিস সংকলন +GenericName[bs]=KOffice okoliš +GenericName[ca]=Suite d'oficina +GenericName[cs]=Kancelářská sada +GenericName[csb]=Biurowi paczét +GenericName[cy]=Casgliad Swyddfa +GenericName[da]=Kontorpakke +GenericName[de]=Büroprogramme +GenericName[el]=Σουίτα γραφείου +GenericName[eo]=Oficejoprogramaro +GenericName[es]=Suite ofimática +GenericName[et]=Kontoritöö komplekt +GenericName[fa]=قطعۀ موسیقی Office +GenericName[fi]=Toimisto-ohjelma +GenericName[fr]=Suite bureautique +GenericName[fy]=Officepakket +GenericName[ga]=Sraith Feidhmchlár Oifige +GenericName[gl]=Suite Ofimática +GenericName[he]=חבילת יישומים משרדיים +GenericName[hi]=ऑफिस सूट +GenericName[hr]=Skup uredskih programa +GenericName[hu]=Irodai programcsomag +GenericName[is]=Skrifstofuvöndull +GenericName[it]=Programmi per l'ufficio +GenericName[ja]=オフィススイート +GenericName[ka]=საოფისე პაკეტი +GenericName[kk]=Офис дестесі +GenericName[km]=ឈុត​ការិយាល័យ +GenericName[ko]=사무용 도구 모음 +GenericName[lo]=ໂປຣແກຣມຊຸດສຳນັກງານ +GenericName[lt]=Ofiso rinkinys +GenericName[lv]=Biroja Komplekts +GenericName[mk]=Канцелариски пакет +GenericName[mn]=Албан програм +GenericName[mt]=Sett tal-uffiċċju +GenericName[nb]=Kontorpakke +GenericName[nds]=Kontoorümgeven +GenericName[ne]=कार्यालय सुट +GenericName[nl]=Officepakket +GenericName[nn]=Kontorpakke +GenericName[nso]=Suthu ya Ofisi +GenericName[pa]=ਆਫਿਸ ਕਾਰਜ +GenericName[pl]=Pakiet biurowy +GenericName[pt]=Pacote de Escritório +GenericName[pt_BR]=Suíte Office +GenericName[ro]=Suită de aplicații de birou +GenericName[ru]=Офисный пакет +GenericName[rw]=Rukomatanya Ofise +GenericName[se]=Kántuvrapáhkka +GenericName[sk]=Office balík +GenericName[sl]=Pisarniška zbirka +GenericName[sr]=Канцеларијски пакет +GenericName[sr@Latn]=Kancelarijski paket +GenericName[ss]=Emakamelo yelihhovisi +GenericName[sv]=Kontorspaket +GenericName[ta]=அலுவலக அடுக்குவரிசை +GenericName[tg]=Пакети офис +GenericName[th]=โปรแกรมชุดสำนักงาน +GenericName[tr]=KOffice Ortamı +GenericName[uk]=Офісний комплект +GenericName[uz]=Idora uchun dasturlar +GenericName[uz@cyrillic]=Идора учун дастурлар +GenericName[ven]=Sutu ya Ofisini +GenericName[vi]=Bộ ứng dụng Văn phòng +GenericName[wa]=Shûte burotike +GenericName[zh_CN]=办公套件 +GenericName[zh_TW]=辦公軟體程式集 +GenericName[zu]=Impahla yesehhovisi +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/Dia.desktop b/kappfinder/apps/Office/Dia.desktop new file mode 100644 index 000000000..24ef82d36 --- /dev/null +++ b/kappfinder/apps/Office/Dia.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Name=Dia +Name[bn]=ডায়া +Name[eo]=Diagramilo +Name[hi]=डाया +Name[ko]=나미비아 +Name[ne]=डाय +Name[pa]=ਡਾਈ +Name[ta]=டையா +Name[te]=డైయ +GenericName=Program for Diagrams +GenericName[af]=Program vir Diagramme +GenericName[ar]=برنامج رسوم بيانية +GenericName[az]=Diaqramlar üçün Proqramlar +GenericName[be]=Праграма для працы з дыяграмамі +GenericName[bg]=Диаграми +GenericName[bn]=ডায়াগ্রাম আঁকার প্রোগ্রাম +GenericName[br]=Program evit skeudennoù +GenericName[bs]=Program za crtanje dijagrama +GenericName[ca]=Programa per a fer diagrames +GenericName[cs]=Program pro diagramy +GenericName[csb]=Programa do diagramów +GenericName[cy]=Rhaglen Diagramau +GenericName[da]=Program for diagrammer +GenericName[de]=Programm für Diagramme +GenericName[el]=Πρόγραμμα για διαγράμματα +GenericName[eo]=Programo por fari diagramojn +GenericName[es]=Generador de diagramas +GenericName[et]=Diagrammide joonistamine +GenericName[eu]=Diagrametarako programa +GenericName[fa]=برنامه برای نمودارها +GenericName[fi]=Kaavioidenpiirto-ohjelma +GenericName[fr]=Logiciel de conception de diagrammes +GenericName[fy]=Programma foar diagrammen +GenericName[ga]=Clár Deartha Léaráidí +GenericName[gl]=Programa para Diagramas +GenericName[he]=תוכנית תרשימים +GenericName[hi]=डायग्राम के लिए प्रोग्राम +GenericName[hr]=Program za crtanje dijagrama +GenericName[hu]=Diagramkészítő +GenericName[is]=Forrit fyrir skýringarmyndir +GenericName[it]=Programma per i diagrammi +GenericName[ja]=ダイアグラム作成プログラム +GenericName[ka]=დიაგრამებთან სამუშაო პროგრამა +GenericName[kk]=Диаграмма құру бағдарламасы +GenericName[km]=កម្មវិធី​គូរ​ដ្យាក្រាម +GenericName[ko]=다이어그램 프로그램 +GenericName[lo]=ໂປຣແກມສຳຫລັບເຮັດໄດອະແກຣມ +GenericName[lt]=Programos diagramoms +GenericName[lv]=Programma Diagrammām +GenericName[mk]=Програма за дијаграми +GenericName[mn]=Диаграмын програм +GenericName[ms]=Program untuk Diagram +GenericName[mt]=Programm għad-disinji +GenericName[nb]=Diagramprogram +GenericName[nds]=Programm för Diagrammen +GenericName[ne]=चित्रका लागि कार्यक्रम +GenericName[nl]=Programma voor diagrammen +GenericName[nn]=Diagramprogram +GenericName[nso]=Lenaneo la Diswantsho +GenericName[pa]=ਸ਼ਕਲਾਂ (ਡਾਈਗਰਾਮ) ਲਈ ਪਰੋਗਰਾਮ +GenericName[pl]=Program do tworzenia diagramów +GenericName[pt]=Programa de Diagramas +GenericName[pt_BR]=Programa para Diagramas +GenericName[ro]=Program de desenat diagrame +GenericName[ru]=Работа с диаграммами +GenericName[rw]=Porogaramu y'Ibishushanyombonera +GenericName[se]=Diagrámmaprográmma +GenericName[sk]=Diagramy +GenericName[sl]=Program za diagrame +GenericName[sr]=Програм за дијаграме +GenericName[sr@Latn]=Program za dijagrame +GenericName[ss]=Luhlelo lemidvwebo +GenericName[sv]=Program för diagram +GenericName[ta]=வரைபு நிரல் +GenericName[tg]=Кор бо диаграммаҳо +GenericName[th]=โปรแกรมสำหรับการทำไดอะแกรม +GenericName[tr]=Şema Yazılımı +GenericName[tt]=Diagram Yazılımı +GenericName[uk]=Програма створення діаграм +GenericName[uz]=Daigrammalar bilan ishlash uchun dastur +GenericName[uz@cyrillic]=Даиграммалар билан ишлаш учун дастур +GenericName[ven]=Miolo ya Mbekanyamushumo +GenericName[vi]=Chương trình tạo biểu đồ +GenericName[wa]=Programe di diyagrames +GenericName[xh]=Inkqubo Yemizobo +GenericName[zh_CN]=图表绘制程序 +GenericName[zh_TW]=圖表製作程式 +GenericName[zu]=Uhlelo lwemisebenzi lwemidwebo +Exec=dia +Terminal=false +Icon=dia +Type=Application diff --git a/kappfinder/apps/Office/Gnome-Cal.desktop b/kappfinder/apps/Office/Gnome-Cal.desktop new file mode 100644 index 000000000..df3cc9625 --- /dev/null +++ b/kappfinder/apps/Office/Gnome-Cal.desktop @@ -0,0 +1,113 @@ +[Desktop Entry] +Name=GNOME-Cal +Name[be]=Каляндар GNOME +Name[bn]=গনোম-ক্যাল +Name[csb]=Gnome kalãdôrz +Name[de]=GNOME Cal +Name[eo]=Gnoma kalendaro +Name[fr]=GnomeCal +Name[hi]=ग्नोम-केल +Name[hu]=GNOME Cal +Name[kk]=GNOME-күнтізбесі +Name[ko]=그놈-달력 +Name[lo]=ປະຕິທິນຂອງ GNOME +Name[mn]=GNOME Cal +Name[ne]=जिनोम-क्याल +Name[pa]=ਗਨੋਮ-ਕੈਲ +Name[pl]=Gnome Kalendarz +Name[ru]=Календарь GNOME +Name[rw]=GNOME-Kal +Name[sl]=Gnome-Cal +Name[sr]=Гном-Cal +Name[sr@Latn]=Gnom-Cal +Name[sv]=Gnome-Cal +Name[ta]=GNOME-கால்குலேட்டர் +Name[te]=గ్నొమ్-కెల్ +Name[tg]=Тақвими GNOME +Name[th]=ปฏิทินของ GNOME +Name[zh_TW]=GNOME 行事曆 +Name[zu]=Gnome-Cal +GenericName=Personal Calendar +GenericName[af]=Persoonlike Kalender +GenericName[ar]=تقويم شخصي +GenericName[az]=Şəxsi Təqvim +GenericName[be]=Персанальны каляндар +GenericName[bg]=Личен календар +GenericName[bn]=ব্যক্তিগত ক্যালেণ্ডার +GenericName[br]=Deiziadur deoc'h +GenericName[bs]=Rokovnik +GenericName[ca]=Calendari personal +GenericName[cs]=Osobní kalendář +GenericName[csb]=Swój kalãdôrz +GenericName[cy]=Dyddiadur Personol +GenericName[da]=Personlig kalender +GenericName[de]=Persönlicher Kalender +GenericName[el]=Προσωπικό ημερολόγιο +GenericName[eo]=Persona kalendaro +GenericName[es]=Calendario personal +GenericName[et]=Isiklik kalender +GenericName[eu]=Egutegi pertsonala +GenericName[fa]=تقویم شخصی +GenericName[fi]=Henkilökohtainen kalenteri +GenericName[fr]=Agenda personnel +GenericName[fy]=Persoanlike aginda +GenericName[ga]=Féilire Phearsanta +GenericName[gl]=Calendario Persoal +GenericName[he]=לוח שנה אישי +GenericName[hi]=निजी कैलेन्डर +GenericName[hr]=Osobni kalendar +GenericName[hu]=Naptárkezelő +GenericName[is]=Persónuleg dagbók +GenericName[it]=Calendario personale +GenericName[ja]=個人のカレンダー +GenericName[ka]=პერსონალური კალენდარი +GenericName[kk]=Дербес күнтізбе +GenericName[km]=ប្រតិទិន​ផ្ទាល់​ខ្លួន +GenericName[ko]=개인용 달력 +GenericName[lo]=ປະຕິທິນສ່ວນຕົວ +GenericName[lt]=Asmeninis kalendorius +GenericName[lv]=Personālais Kalendārs +GenericName[mk]=Личен календар +GenericName[mn]=Хувийн календар +GenericName[ms]=Kalendar Peribadi +GenericName[mt]=Kalendarju Personali +GenericName[nb]=Personlig kalender +GenericName[nds]=En persöönlich Kalenner +GenericName[ne]=व्यक्तिगत क्यालेन्डर +GenericName[nl]=Persoonlijke agenda +GenericName[nn]=Personleg kalender +GenericName[nso]=Tshupamabaka ya Botho +GenericName[pa]=ਨਿੱਜੀ ਕੈਲੰਡਰ +GenericName[pl]=Osobisty kalendarz +GenericName[pt]=Calendário Pessoal +GenericName[pt_BR]=Calendário Pessoal +GenericName[ro]=Program de calendar personal +GenericName[ru]=Личный календарь +GenericName[rw]=Indangaminsi Yihariye +GenericName[se]=Persovnnalaš kaleandar +GenericName[sk]=Osobný kalendár +GenericName[sl]=Osebni koledar +GenericName[sr]=Лични календар +GenericName[sr@Latn]=Lični kalendar +GenericName[ss]=Ikhalenda yemuntfu sicu +GenericName[sv]=Personlig kalender +GenericName[ta]=தனிப்பட்ட நாள்காட்டி +GenericName[te]=వక్తిగత కెలెండర్ +GenericName[tg]=Тақвими шахсӣ +GenericName[th]=ปฏิทินส่วนตัว +GenericName[tr]=Kişisel Takvim +GenericName[tt]=Şäxsi Täqwim +GenericName[uk]=Особистий календар +GenericName[uz]=Shaxsiy kalendar +GenericName[uz@cyrillic]=Шахсий календар +GenericName[ven]=Tsumbamaduvha yau +GenericName[vi]=Lịch cá nhân +GenericName[wa]=Calindrî da vosse +GenericName[xh]=Ikhalenda Yobuqu +GenericName[zh_CN]=个人日程表 +GenericName[zh_TW]=個人行事曆 +GenericName[zu]=Ikhalenda Lomuntu siqu +Exec=gnomecal +Terminal=false +Icon=gnomecal +Type=Application diff --git a/kappfinder/apps/Office/Gnome-Card.desktop b/kappfinder/apps/Office/Gnome-Card.desktop new file mode 100644 index 000000000..366b9e5ce --- /dev/null +++ b/kappfinder/apps/Office/Gnome-Card.desktop @@ -0,0 +1,121 @@ +[Desktop Entry] +Name=GNOME-Card +Name[be]=Карты GNOME +Name[bn]=গনোম-কার্ড +Name[br]=GNOME-Kartenn +Name[csb]=Gnome karta +Name[de]=GNOME Card +Name[eo]=Gnoma kontaktilo +Name[fa]=کارت گنوم +Name[fr]=GnomeCard +Name[hi]=ग्नोम-कार्ड +Name[kk]=GNOME-картотекасы +Name[km]=ប័ណ្ណ GNOME +Name[ko]=그놈-카드 +Name[lo]=ນາມບັດຂອງ GNOME +Name[lt]=GNOME-korta +Name[lv]=GNOME Karte +Name[mk]=GNOME-Картичка +Name[mn]=GNOME Card +Name[ne]=जिनोम-कार्ड +Name[pa]=ਗਨੋਮ-ਕਾਰਡ +Name[pl]=Gnome Karta +Name[ru]=Картотека GNOME +Name[rw]=Ikarita-GNOME +Name[sl]=Gnome-Card +Name[sr]=Гном-Card +Name[sr@Latn]=Gnom-Card +Name[ss]=Likhadi le GNOME +Name[sv]=Gnome-card +Name[ta]=GNOME-அட்டை +Name[te]=గ్నొమ్-కార్డ్ +Name[tg]=Корти-GNOME +Name[th]=นามบัตรของ GNOME +Name[ven]=Garata-GNOME +Name[vi]=Thiệp-GNOME +Name[xh]=Ikhadi le-GNOME +Name[zh_TW]=GNOME 名片管理 +Name[zu]=Ikhadi ye-GNOME +GenericName=Contact Manager +GenericName[af]=Kontak Bestuurder +GenericName[ar]=تسيير المراسلين +GenericName[az]=Əlaqə İdarəcisi +GenericName[be]=Кіраўнік кантактаў +GenericName[bg]=Контакти +GenericName[bn]=কনট্যাক্ট ম্যানেজার +GenericName[br]=Merour an darempredoù +GenericName[bs]=Upravitelj kontaktima +GenericName[ca]=Gestor de contactes +GenericName[cs]=Správce kontaktů +GenericName[csb]=Menedżer łączbów +GenericName[cy]=Rheolydd Cysylltiad +GenericName[da]=Kontakthåndtering +GenericName[de]=Kontakteverwaltung +GenericName[el]=Διαχειριστής επαφών +GenericName[eo]=Kontaktadministrilo +GenericName[es]=Gestor de contactos +GenericName[et]=Aadressiraamat +GenericName[eu]=Kontaktu kudeatzailea +GenericName[fa]=مدیر تماس +GenericName[fi]=Kontaktienhallinta +GenericName[fr]=Gestionnaire de contacts +GenericName[fy]=kontaktenbehear +GenericName[ga]=Bainisteoir na dTeagmhálacha +GenericName[gl]=Xestor de Contactos +GenericName[he]=מנהל אנשי קשר +GenericName[hi]=सम्पर्क प्रबंधक +GenericName[hr]=Rokovnik +GenericName[hu]=Névjegykezelő +GenericName[is]=Samskipta mappa +GenericName[it]=Gestione della rubrica +GenericName[ja]=コンタクトマネージャ +GenericName[ka]=კონტაქტების მენეჯერი +GenericName[kk]=Контакт менеджері +GenericName[km]=កម្មវិធី​គ្រប់គ្រង​ទំនាក់​ទំនង +GenericName[ko]=연락처 관리자 +GenericName[lo]=ເຄື່ອງມືຈັດການນາມບັດ +GenericName[lt]=Adresų tvarkyklė +GenericName[lv]=Kontaktu Menedžeris +GenericName[mk]=Менаџер на контакти +GenericName[mn]=Контакт удирдагч +GenericName[ms]=Hubung Pengurus +GenericName[mt]=Manager tal-kuntatti +GenericName[nb]=Kontaktbehandler +GenericName[nds]=Pleeg vun Kontakten +GenericName[ne]=सम्पर्क प्रबन्धक +GenericName[nl]=Contactenbeheer +GenericName[nn]=Kontakthandsamar +GenericName[nso]=Molaodi wa Kgokagano +GenericName[pa]=ਸੰਪਰਕ ਮੈਨੇਜਰ +GenericName[pl]=Menedżer kontaktów +GenericName[pt]=Gestor de Contactos +GenericName[pt_BR]=Gerenciador de Contatos +GenericName[ro]=Manager contacte +GenericName[ru]=Карточки и контакты +GenericName[rw]=Umuyobozi w'aderesi +GenericName[se]=Oktavuohtagieđahalli +GenericName[sk]=Správca kontaktov +GenericName[sl]=Upravitelj stikov +GenericName[sr]=Менаџер контаката +GenericName[sr@Latn]=Menadžer kontakata +GenericName[ss]=Umphatsi longatsindvwa +GenericName[sv]=Kontakthanterare +GenericName[ta]=தொடர்பு மேலாளர் +GenericName[tg]=Мудири иртиботӣ +GenericName[th]=เครื่องมือจัดการนามบัตร +GenericName[tr]=İlişki Yöneticisi +GenericName[tt]=Elemtälär İdäräçe +GenericName[uk]=Менеджер контактів +GenericName[uz]=Aloqa boshqaruvchisi +GenericName[uz@cyrillic]=Алоқа бошқарувчиси +GenericName[ven]=Mulanguli ono Kwamiwa +GenericName[vi]=Trình quản lí liên lạc +GenericName[wa]=Manaedjeu di cnoxhances +GenericName[xh]=Umphathi Wokuxhumanisa +GenericName[zh_CN]=联系人管理 +GenericName[zh_TW]=名片管理程式 +GenericName[zu]=Thintana nemenenja +Exec=gnomecard +Terminal=false +Icon=gnome-card +Type=Application diff --git a/kappfinder/apps/Office/GnomeTimeTracker.desktop b/kappfinder/apps/Office/GnomeTimeTracker.desktop new file mode 100644 index 000000000..feb1fce83 --- /dev/null +++ b/kappfinder/apps/Office/GnomeTimeTracker.desktop @@ -0,0 +1,57 @@ +[Desktop Entry] +Name=GNOME Time Tracker +Name[af]=Gnome Tyd Volger +Name[az]=GNOME Vaxt İzləyicisi +Name[be]=Назіральнік за часам GNOME +Name[bn]=গনোম টাইম ট্র্যাকার +Name[cs]=Gnome Time Tracker +Name[csb]=Gnome Czasomierz +Name[el]=Καταγραφέας χρόνου GNOME +Name[eo]=Gnoma labortempomezurilo +Name[eu]=GNOME denbora kudeatzailea +Name[fa]=ردیاب زمان گنوم +Name[fr]=Gnome TimeTracker +Name[ga]=Lorgaire Ama GNOME +Name[gl]=Administrador Horario de GNOME +Name[hi]=ग्नोम टाइम ट्रेकर +Name[hr]=GNOME mjerač vremena +Name[hu]=GNOME időkövető +Name[it]=Segnatempo di GNOME +Name[kk]=GNOME уақыт есебі +Name[km]=ឧបករណ៍​តាមដាន​ពេលវេលា GNOME +Name[ko]=그놈 시간 추적기 +Name[lo]=GNOME Time tracker +Name[lt]=GNOME laiko sekėjas +Name[lv]=GNOME Laika Atsekotājs +Name[mk]=Следач на време во GNOME +Name[ms]=Penjejak Masa GNOME +Name[mt]=Żomm il-ħin fi Gnome +Name[ne]=जिनोम टाइम ट्र्याकर +Name[nso]=Mohlokomedi wa Nako ya GNOME +Name[pa]=ਗਨੋਮ ਸਮਾਂ ਜਾਣਕਾਰੀ +Name[pl]=Gnome Osobisty Czasomierz +Name[pt]=Gestor de Tempo do GNOME +Name[pt_BR]=Contador de Tempo do GNOME +Name[ru]=Учёт времени GNOME +Name[rw]=Mugenzura Igihe GNOME +Name[sl]=Gnome Time Tracker +Name[sr]=Гномов Time Tracker +Name[sr@Latn]=Gnomov Time Tracker +Name[ss]=Siseshi sesikhatsi se GNOME +Name[sv]=Tidmätare för Gnome +Name[ta]=GNOME நேர பின் தொடர்ச்சி +Name[tg]=Вақтсанҷи GNOME +Name[tr]=GNOME Saat İzleyici +Name[tt]=GNOME Waqıt Ülçär +Name[uk]=Лічильник часу GNOME +Name[ven]=Tshisedzulusi tsha Tshifhinga tsha GNOME +Name[vi]=Trình đo thời gian GNOME +Name[wa]=Shuveu d' tins Gnome +Name[xh]=GNOME Umfundi Wexesha +Name[zh_CN]=GNOME 时间记录 +Name[zh_TW]=個人時程記錄 +Name[zu]=Umgcini Wesikhathi we-Gnome +Exec=gtt +Terminal=false +Icon=gnome-cromagnon +Type=Application diff --git a/kappfinder/apps/Office/Gnumeric.desktop b/kappfinder/apps/Office/Gnumeric.desktop new file mode 100644 index 000000000..c19086775 --- /dev/null +++ b/kappfinder/apps/Office/Gnumeric.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Gnumeric +Name[bn]=গনিউমেরিক +Name[eo]=Gnumeriko +Name[hi]=जीन्यूमेरिक +Name[ne]=जिनुमेरिक +Name[pa]=ਜੀ-ਸਾਰਣੀਕਾਰ +Name[rw]=G-mibare +Name[ta]=Gஎண்ணியல் +Name[te]=జిన్యుమెరిక్ +GenericName=Spread Sheet +GenericName[af]=Sprei Staat +GenericName[ar]=ورقة عمل +GenericName[az]=Hesab Cədvəli +GenericName[be]=Электронныя табліцы +GenericName[bg]=Електронна таблица +GenericName[bn]=স্প্রেড-শিট +GenericName[br]=Loger +GenericName[bs]=Proračunska tablica +GenericName[ca]=Full de càlcul +GenericName[cs]=Tabulkový procesor +GenericName[csb]=Kalkùlacëjny lëst +GenericName[cy]=Taenlen +GenericName[da]=Regneark +GenericName[de]=Tabellenkalkulation +GenericName[el]=Λογιστικό φύλλο +GenericName[eo]=Tabelkalkulilo +GenericName[es]=Hoja de cálculo +GenericName[et]=Tabeltöötlus +GenericName[eu]=Kalkulu orria +GenericName[fa]=صفحه گسترده +GenericName[fi]=Taulukkolaskentaohjelma +GenericName[fo]=Rokniark +GenericName[fr]=Tableur +GenericName[fy]=Rekkenblêd +GenericName[ga]=Scarbhileog +GenericName[gl]=Folla de Cálculo +GenericName[he]=גיליון אלקטרוני +GenericName[hi]=स्प्रेड शीट +GenericName[hr]=Proračunska tablica +GenericName[hu]=KOffice táblázatkezelő +GenericName[id]=Kertas Kerja +GenericName[is]=Töflureiknir +GenericName[it]=Foglio elettronico +GenericName[ja]=表計算 +GenericName[ka]=ელექტრონული ცხრილი +GenericName[kk]=Электрондық кесте +GenericName[km]=សៀវភៅ​បញ្ជី +GenericName[ko]=스프레드시트 +GenericName[lo]=ກະດານຄຳນວນ +GenericName[lt]=Elektroninė lentelė +GenericName[mk]=Програма за табеларни пресметки +GenericName[mn]=Хүснэгтэн боловсруулалт +GenericName[ms]=Lembaran Hamparan +GenericName[nb]=Regneark +GenericName[nds]=Tabellreken +GenericName[ne]=स्प्रेडसिट +GenericName[nl]=Rekenblad +GenericName[nn]=Rekneark +GenericName[nso]=Letlakala la Phatlalatso +GenericName[oc]=Folha de calcul +GenericName[pa]=ਸਾਰਣੀਕਾਰ +GenericName[pl]=Arkusz kalkulacyjny +GenericName[pt]=Folha de cálculo +GenericName[pt_BR]=Planilha de cálculo +GenericName[ro]=Program de calcul tabelar +GenericName[ru]=Электронная таблица +GenericName[rw]=UrupapuroRusesuye +GenericName[se]=Rehketárka +GenericName[sk]=Tabuľkový procesor +GenericName[sl]=Preglednica +GenericName[sr]=Програм за табеларна израчунавања +GenericName[sr@Latn]=Program za tabelarna izračunavanja +GenericName[sv]=Kalkylprogram +GenericName[ta]=விரிப்பட்டியல் +GenericName[te]=స్ప్రెడ్ షీట్ +GenericName[tg]=Ҷадвали электронӣ +GenericName[th]=กระดาษคำนวณ +GenericName[tr]=Hesap Çizelgesi +GenericName[tt]=İsäpläw Cäymäse +GenericName[uk]=Електронна таблиця +GenericName[uz]=Elektron jadval +GenericName[uz@cyrillic]=Электрон жадвал +GenericName[ven]=Andaladza Siatari +GenericName[vi]=Trình tính bảng +GenericName[wa]=Tåvleu +GenericName[zh_CN]=电子表格 +GenericName[zh_TW]=試算表 +Exec=gnumeric +Terminal=false +Icon=gnumeric +Type=Application diff --git a/kappfinder/apps/Office/Guppi.desktop b/kappfinder/apps/Office/Guppi.desktop new file mode 100644 index 000000000..c7b01ed3b --- /dev/null +++ b/kappfinder/apps/Office/Guppi.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Guppi +Name[bn]=গাপ্পি +Name[eo]=Gupio +Name[hi]=गुप्पी +Name[ne]=गुप्पी +Name[pa]=ਜੂਪੀ +Name[ta]=குப்பி +Name[te]=గప్పి +GenericName=Program for Diagrams +GenericName[af]=Program vir Diagramme +GenericName[ar]=برنامج رسوم بيانية +GenericName[az]=Diaqramlar üçün Proqramlar +GenericName[be]=Праграма для працы з дыяграмамі +GenericName[bg]=Диаграми +GenericName[bn]=ডায়াগ্রাম আঁকার প্রোগ্রাম +GenericName[br]=Program evit skeudennoù +GenericName[bs]=Program za crtanje dijagrama +GenericName[ca]=Programa per a fer diagrames +GenericName[cs]=Program pro diagramy +GenericName[csb]=Programa do diagramów +GenericName[cy]=Rhaglen Diagramau +GenericName[da]=Program for diagrammer +GenericName[de]=Programm für Diagramme +GenericName[el]=Πρόγραμμα για διαγράμματα +GenericName[eo]=Programo por fari diagramojn +GenericName[es]=Generador de diagramas +GenericName[et]=Diagrammide joonistamine +GenericName[eu]=Diagrametarako programa +GenericName[fa]=برنامه برای نمودارها +GenericName[fi]=Kaavioidenpiirto-ohjelma +GenericName[fr]=Logiciel de conception de diagrammes +GenericName[fy]=Programma foar diagrammen +GenericName[ga]=Clár Deartha Léaráidí +GenericName[gl]=Programa para Diagramas +GenericName[he]=תוכנית תרשימים +GenericName[hi]=डायग्राम के लिए प्रोग्राम +GenericName[hr]=Program za crtanje dijagrama +GenericName[hu]=Diagramkészítő +GenericName[is]=Forrit fyrir skýringarmyndir +GenericName[it]=Programma per i diagrammi +GenericName[ja]=ダイアグラム作成プログラム +GenericName[ka]=დიაგრამებთან სამუშაო პროგრამა +GenericName[kk]=Диаграмма құру бағдарламасы +GenericName[km]=កម្មវិធី​គូរ​ដ្យាក្រាម +GenericName[ko]=다이어그램 프로그램 +GenericName[lo]=ໂປຣແກມສຳຫລັບເຮັດໄດອະແກຣມ +GenericName[lt]=Programos diagramoms +GenericName[lv]=Programma Diagrammām +GenericName[mk]=Програма за дијаграми +GenericName[mn]=Диаграмын програм +GenericName[ms]=Program untuk Diagram +GenericName[mt]=Programm għad-disinji +GenericName[nb]=Diagramprogram +GenericName[nds]=Programm för Diagrammen +GenericName[ne]=चित्रका लागि कार्यक्रम +GenericName[nl]=Programma voor diagrammen +GenericName[nn]=Diagramprogram +GenericName[nso]=Lenaneo la Diswantsho +GenericName[pa]=ਸ਼ਕਲਾਂ (ਡਾਈਗਰਾਮ) ਲਈ ਪਰੋਗਰਾਮ +GenericName[pl]=Program do tworzenia diagramów +GenericName[pt]=Programa de Diagramas +GenericName[pt_BR]=Programa para Diagramas +GenericName[ro]=Program de desenat diagrame +GenericName[ru]=Работа с диаграммами +GenericName[rw]=Porogaramu y'Ibishushanyombonera +GenericName[se]=Diagrámmaprográmma +GenericName[sk]=Diagramy +GenericName[sl]=Program za diagrame +GenericName[sr]=Програм за дијаграме +GenericName[sr@Latn]=Program za dijagrame +GenericName[ss]=Luhlelo lemidvwebo +GenericName[sv]=Program för diagram +GenericName[ta]=வரைபு நிரல் +GenericName[tg]=Кор бо диаграммаҳо +GenericName[th]=โปรแกรมสำหรับการทำไดอะแกรม +GenericName[tr]=Şema Yazılımı +GenericName[tt]=Diagram Yazılımı +GenericName[uk]=Програма створення діаграм +GenericName[uz]=Daigrammalar bilan ishlash uchun dastur +GenericName[uz@cyrillic]=Даиграммалар билан ишлаш учун дастур +GenericName[ven]=Miolo ya Mbekanyamushumo +GenericName[vi]=Chương trình tạo biểu đồ +GenericName[wa]=Programe di diyagrames +GenericName[xh]=Inkqubo Yemizobo +GenericName[zh_CN]=图表绘制程序 +GenericName[zh_TW]=圖表製作程式 +GenericName[zu]=Uhlelo lwemisebenzi lwemidwebo +Exec=guppi +Terminal=false +Icon=Guppi +Type=Application diff --git a/kappfinder/apps/Office/Ical.desktop b/kappfinder/apps/Office/Ical.desktop new file mode 100644 index 000000000..8de0fc2dc --- /dev/null +++ b/kappfinder/apps/Office/Ical.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=Ical +Name[bn]=আই-ক্যাল +Name[eo]=I-Kalendaro +Name[fr]=iCal +Name[hi]=आईकेल +Name[ne]=आई क्याल +Name[te]=ఐకెల్ +GenericName=Calendar Program +GenericName[af]=Kalender Program +GenericName[ar]=برنامج تقويم +GenericName[az]=Təqvim Proqramı +GenericName[be]=Каляндар +GenericName[bg]=Календар +GenericName[bn]=ক্যালেণ্ডার প্রোগ্রাম +GenericName[br]=Goulev deiziadur +GenericName[bs]=Rokovnik +GenericName[ca]=Programa de calendari +GenericName[cs]=Kalendářový program +GenericName[csb]=Kalãdôrz +GenericName[cy]=Rhaglen Dyddiadur +GenericName[da]=Kalenderprogram +GenericName[de]=Kalenderprogramm +GenericName[el]=Πρόγραμμα ημερολογίου +GenericName[eo]=Kalendara programo +GenericName[es]=Programa de calendarios +GenericName[et]=Kalender +GenericName[eu]=Egutegi programa +GenericName[fa]=برنامۀ تقویم +GenericName[fi]=Kalenteriohjelma +GenericName[fr]=Agenda +GenericName[fy]=Agindaprogramma +GenericName[ga]=Clár féilire +GenericName[gl]=Programa de Calendario +GenericName[he]=תוכנית לוח שנה +GenericName[hi]=कैलेन्डर प्रोग्राम +GenericName[hr]=Kalendar +GenericName[hu]=Naptárkezelő +GenericName[is]=Viðbót við dagbók (Calendar) +GenericName[it]=Programma calendario +GenericName[ja]=カレンダープログラム +GenericName[ka]=კალენდარი +GenericName[kk]=Күнтізбе +GenericName[km]=កម្មវិធី​ប្រតិទិន +GenericName[ko]=달력 프로그램 +GenericName[lo]=ໂປຣແກຣມປະຕິທິນ +GenericName[lt]=Kalendoriaus programa +GenericName[lv]=Kalendāra Programma +GenericName[mk]=Програма за календар +GenericName[mn]=Календарын програм +GenericName[ms]=Program Kalendar +GenericName[mt]=Programm kalendarju +GenericName[nb]=Kalenderprogram +GenericName[nds]=Kalenner +GenericName[ne]=पात्रो कार्यक्रम +GenericName[nl]=Agendaprogramma +GenericName[nn]=Kalenderprogram +GenericName[nso]=Lenaneo la Tshupamabaka +GenericName[pa]=ਕੈਲੰਡਰ ਕਾਰਜ +GenericName[pl]=Kalendarz +GenericName[pt]=Programa de Calendário +GenericName[pt_BR]=Calendário +GenericName[ro]=Program de calendar +GenericName[ru]=Календарь +GenericName[rw]=Porogaramu Ingengaminsi +GenericName[se]=Kaleandarprográmma +GenericName[sk]=Kalendár +GenericName[sl]=Koledarski program +GenericName[sr]=Програм за календар +GenericName[sr@Latn]=Program za kalendar +GenericName[ss]=Luhlelo lekhalenda +GenericName[sv]=Kalenderprogram +GenericName[ta]=நாள்காட்டி நிரலி +GenericName[te]=కెలెండర్ కార్యక్రమం +GenericName[tg]=Тақвим +GenericName[th]=โปรแกรมปฏิทิน +GenericName[tr]=Takvim Programı +GenericName[tt]=Täqwim Yazılımı +GenericName[uk]=Програма календаря +GenericName[uz]=Kalendar dasturi +GenericName[uz@cyrillic]=Календар дастури +GenericName[ven]=Mbekanyamushumo ya Tsumbamaduvha +GenericName[vi]=Trình lịch +GenericName[wa]=Programe calindrî +GenericName[xh]=Inkqubo ye Calendar +GenericName[zh_CN]=日历管理程序 +GenericName[zh_TW]=行事曆程式 +GenericName[zu]=Uhlelo lwemisebenzi lekhalenda +Exec=ical +Terminal=false +Icon=ical +Type=Application diff --git a/kappfinder/apps/Office/Makefile.am b/kappfinder/apps/Office/Makefile.am new file mode 100644 index 000000000..5817130ab --- /dev/null +++ b/kappfinder/apps/Office/Makefile.am @@ -0,0 +1,11 @@ +kappfinder_office_data_DATA = Applix.desktop XAcc.desktop XsLite.desktop plan.desktop \ + abiword.desktop Dia.desktop Gnome-Cal.desktop \ + Gnome-Card.desktop GnomeTimeTracker.desktop Gnumeric.desktop \ + Guppi.desktop Ical.desktop lyx.desktop netscapeaddressbook.desktop \ + scribus.desktop pybliographic.desktop xpdf.desktop \ + acroread.desktop WordPerfect.desktop WordPerfect2000.desktop \ + mrproject.desktop gnucash.desktop + +kappfinder_office_datadir = $(kde_datadir)/kappfinder/apps/Office + +EXTRA_DIST = $(kappfinder_office_data_DATA) diff --git a/kappfinder/apps/Office/WordPerfect.desktop b/kappfinder/apps/Office/WordPerfect.desktop new file mode 100644 index 000000000..c3316ff2e --- /dev/null +++ b/kappfinder/apps/Office/WordPerfect.desktop @@ -0,0 +1,103 @@ +[Desktop Entry] +Name=WordPerfect +Name[af]=Wordperfect +Name[bn]=ওয়ার্ড-পারফেক্ট +Name[bs]=Wordperfect +Name[hi]=वर्डपरफेक्ट +Name[hr]=Wordperfect +Name[id]=Word Perfect +Name[lo]=ເວີດເພີເຟັກ +Name[ne]=वर्ड पर्फेक्ट +Name[nn]=Word Perfect +Name[se]=Word Perfect +Name[sv]=Wordperfect +Name[ta]=வேர்ட் பர்பெக்ட் +Name[te]=వర్డ్ పెర్ ఫెక్ట్ +Name[th]=เวิร์ดเพอร์เฟ็กต์ +Name[ven]=Maipfi a Vhukuma +MimeType=application/wordperfect; +Exec=xwp +Icon=wp +Path= +DocPath= +Type=Application +Terminal=false +GenericName=Word Processor +GenericName[af]=Woord Verwerker +GenericName[ar]=معالج نصوص +GenericName[az]=Kəlmə İşləmə +GenericName[be]=Тэкставы працэсар +GenericName[bg]=Текстообработваща програма +GenericName[bn]=ওয়ার্ড প্রসেসর +GenericName[br]=Skridtreterezh +GenericName[bs]=Obrada teksta +GenericName[ca]=Processador Word +GenericName[cs]=Textový procesor +GenericName[csb]=Procesora tekstu +GenericName[cy]=Prosesydd Geiriau +GenericName[da]=Tekstbehandling +GenericName[de]=Textverarbeitung +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Verkilo +GenericName[es]=Procesador de textos +GenericName[et]=Tekstitöötlus +GenericName[eu]=Testu prozesatzailea +GenericName[fa]=واژه‌پرداز +GenericName[fi]=Tekstinkäsittelyohjelma +GenericName[fr]=Traitement de texte +GenericName[fy]=Tekstferwurker +GenericName[ga]=Próiseálaí focal +GenericName[gl]=Procesador de Textos +GenericName[he]=מעבד תמלילים +GenericName[hi]=वर्ड प्रोसेसर +GenericName[hr]=Program za obrada teksta +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Ritvinnsla +GenericName[it]=Videoscrittura +GenericName[ja]=ワープロ +GenericName[ka]=ტექსტური პროცესორი +GenericName[kk]=Мәтін өңдеуші +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=워드 프로세서 +GenericName[lo]=ໂປຣແກຣມປະມວນຜົນຄຳ +GenericName[lt]=Tekstų apdorotojas +GenericName[lv]=Tekstu Procesors +GenericName[mk]=Програма за обработка на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Pemproses Kata +GenericName[nb]=Tekstbehandler +GenericName[nds]=Textprogramm +GenericName[ne]=वर्ड प्रोसेसर +GenericName[nl]=Tekstverwerker +GenericName[nn]=Teksthandsamar +GenericName[nso]=Sediragatsi sa Mantsu +GenericName[pa]=ਸ਼ਬਦਕਾਰ +GenericName[pl]=Procesor tekstu +GenericName[pt]=Processador de Texto +GenericName[pt_BR]=Processador de Texto +GenericName[ro]=Procesor de text +GenericName[ru]=Текстовый процессор +GenericName[rw]=Munonosora Mwandiko +GenericName[se]=Teakstagieđahalli +GenericName[sk]=Textový procesor +GenericName[sl]=Urejevalnik besedila +GenericName[sr]=Обрада текста +GenericName[sr@Latn]=Obrada teksta +GenericName[ss]=Sichubi magama +GenericName[sv]=Ordbehandlare +GenericName[ta]=வேர்ட் ப்ரஸ்ஸஸார் +GenericName[te]=వర్డ్ ప్రొసెసర్ +GenericName[tg]=Протсессори матн +GenericName[th]=โปรแกรมประมวลผลคำ +GenericName[tr]=Kelime İşlemci +GenericName[tt]=Süz Eşkärtüçe +GenericName[uk]=Текстовий процесор +GenericName[uz]=Matn protsessori +GenericName[uz@cyrillic]=Матн процессори +GenericName[ven]=Tshiiti tsha Maipfi +GenericName[vi]=Trình xử lí văn bản văn phòng +GenericName[wa]=Sicrijhaedje di tecse +GenericName[zh_CN]=字处理器 +GenericName[zh_TW]=文書處理程式 +GenericName[zu]=Umqhubekisi wegama +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/WordPerfect2000.desktop b/kappfinder/apps/Office/WordPerfect2000.desktop new file mode 100644 index 000000000..da665cc2d --- /dev/null +++ b/kappfinder/apps/Office/WordPerfect2000.desktop @@ -0,0 +1,103 @@ +[Desktop Entry] +Name=WordPerfect 2000 +Name[af]=Wordperfect 2000 +Name[bn]=ওয়ার্ড-পারফেক্ট ২০০০ +Name[bs]=Wordperfect 2000 +Name[hi]=वर्डपरफेक्ट 2000 +Name[hr]=Wordperfect 2000 +Name[lo]=ເວີດເພີເຟັກ 2000 +Name[ne]=वर्ड पर्फेक्ट +Name[nn]=Word Perfect 2000 +Name[nso]=Bokgonikgoni bja Mantsu 2000 +Name[se]=Word Perfect 2000 +Name[sv]=Wordperfect 2000 +Name[ta]=வேர்ட்பர்பெக்ட் 2000 +Name[te]=వర్డ్ పెర్ ఫెక్ట్ 2000 +Name[th]=เวิร์ดเพอร์เฟ็กต์ 2000 +Name[ven]=MaipfiVhukuma a Gidimbili +MimeType=application/wordperfect;application/msword;application/x-winword97; +Exec=wordperfect +Icon=wp +Path= +DocPath= +Type=Application +Terminal=false +GenericName=Word Processor +GenericName[af]=Woord Verwerker +GenericName[ar]=معالج نصوص +GenericName[az]=Kəlmə İşləmə +GenericName[be]=Тэкставы працэсар +GenericName[bg]=Текстообработваща програма +GenericName[bn]=ওয়ার্ড প্রসেসর +GenericName[br]=Skridtreterezh +GenericName[bs]=Obrada teksta +GenericName[ca]=Processador Word +GenericName[cs]=Textový procesor +GenericName[csb]=Procesora tekstu +GenericName[cy]=Prosesydd Geiriau +GenericName[da]=Tekstbehandling +GenericName[de]=Textverarbeitung +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Verkilo +GenericName[es]=Procesador de textos +GenericName[et]=Tekstitöötlus +GenericName[eu]=Testu prozesatzailea +GenericName[fa]=واژه‌پرداز +GenericName[fi]=Tekstinkäsittelyohjelma +GenericName[fr]=Traitement de texte +GenericName[fy]=Tekstferwurker +GenericName[ga]=Próiseálaí focal +GenericName[gl]=Procesador de Textos +GenericName[he]=מעבד תמלילים +GenericName[hi]=वर्ड प्रोसेसर +GenericName[hr]=Program za obrada teksta +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Ritvinnsla +GenericName[it]=Videoscrittura +GenericName[ja]=ワープロ +GenericName[ka]=ტექსტური პროცესორი +GenericName[kk]=Мәтін өңдеуші +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=워드 프로세서 +GenericName[lo]=ໂປຣແກຣມປະມວນຜົນຄຳ +GenericName[lt]=Tekstų apdorotojas +GenericName[lv]=Tekstu Procesors +GenericName[mk]=Програма за обработка на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Pemproses Kata +GenericName[nb]=Tekstbehandler +GenericName[nds]=Textprogramm +GenericName[ne]=वर्ड प्रोसेसर +GenericName[nl]=Tekstverwerker +GenericName[nn]=Teksthandsamar +GenericName[nso]=Sediragatsi sa Mantsu +GenericName[pa]=ਸ਼ਬਦਕਾਰ +GenericName[pl]=Procesor tekstu +GenericName[pt]=Processador de Texto +GenericName[pt_BR]=Processador de Texto +GenericName[ro]=Procesor de text +GenericName[ru]=Текстовый процессор +GenericName[rw]=Munonosora Mwandiko +GenericName[se]=Teakstagieđahalli +GenericName[sk]=Textový procesor +GenericName[sl]=Urejevalnik besedila +GenericName[sr]=Обрада текста +GenericName[sr@Latn]=Obrada teksta +GenericName[ss]=Sichubi magama +GenericName[sv]=Ordbehandlare +GenericName[ta]=வேர்ட் ப்ரஸ்ஸஸார் +GenericName[te]=వర్డ్ ప్రొసెసర్ +GenericName[tg]=Протсессори матн +GenericName[th]=โปรแกรมประมวลผลคำ +GenericName[tr]=Kelime İşlemci +GenericName[tt]=Süz Eşkärtüçe +GenericName[uk]=Текстовий процесор +GenericName[uz]=Matn protsessori +GenericName[uz@cyrillic]=Матн процессори +GenericName[ven]=Tshiiti tsha Maipfi +GenericName[vi]=Trình xử lí văn bản văn phòng +GenericName[wa]=Sicrijhaedje di tecse +GenericName[zh_CN]=字处理器 +GenericName[zh_TW]=文書處理程式 +GenericName[zu]=Umqhubekisi wegama +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/XAcc.desktop b/kappfinder/apps/Office/XAcc.desktop new file mode 100644 index 000000000..0ca602156 --- /dev/null +++ b/kappfinder/apps/Office/XAcc.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Name=xacc +Name[es]=Xacc +Name[fr]=XAcc +Name[hi]=एक्सएसीसी +Name[sv]=Xacc +Name[te]=ఎక్స్ ఎక్ +MimeType= +Exec=xacc +Icon=xapp +Path= +DocPath= +Type=Application +Terminal=false +GenericName=Personal Accounting Tool +GenericName[af]=Persoonlike Rekeninge Program +GenericName[ar]=أداة مسك حسابات شخصي +GenericName[az]=Şəxsi Mühasibat Vasitəsi +GenericName[be]=Персанальная бухгалтэрыя +GenericName[bg]=Водене на сметки +GenericName[bn]=ব্যক্তিগত হিসাবরক্ষা টুল +GenericName[bs]=Alat za lično računovodstvo +GenericName[ca]=Gestor personal de comptes +GenericName[cs]=Osobní účetnictví +GenericName[csb]=Swòje kònta +GenericName[cy]=Erfyn Cyfrifio Personol +GenericName[da]=Personligt bogholderiværktøj +GenericName[de]=Persönliches Buchhaltungsprogramm +GenericName[el]=Εργαλείο προσωπικών οικονομικών +GenericName[eo]=Persona kontilo +GenericName[es]=Herramienta de contabilidad personal +GenericName[et]=Isiklik finantsarvestus +GenericName[eu]=Kontu kudeatzaile pertsonala +GenericName[fa]=ابزار حسابداری شخصی +GenericName[fi]=Henkilökohtainen kirjanpitotyökalu +GenericName[fr]=Logiciel de comptabilité personnelle +GenericName[fy]=Privéboekhâlding +GenericName[ga]=Uirlis Chuntasaíochta Phearsanta +GenericName[gl]=Ferramenta de Contabilidade Persoal +GenericName[he]=כלי הנהלת חשבונות אישי +GenericName[hi]=निजी एकाउन्टिंग औज़ार +GenericName[hr]=Alat za osobne financije +GenericName[hu]=Határidőnapló +GenericName[is]=Heimabókhaldið +GenericName[it]=Programma per la contabilità personale +GenericName[ja]=個人向け会計ツール +GenericName[ka]=პერსონალური ბუღალტერიის ხელსაწყო +GenericName[kk]=Дербес есеп-қисап +GenericName[km]=ឧបករណ៍​គណនី​ផ្ទាល់​ខ្លួន +GenericName[ko]=개인 재무 도구 +GenericName[lo]=ເຄື່ອງມືເຮັດບັນຊີສ່ວນຕົວ +GenericName[lt]=Asmeninės sąskaitybos įrankis +GenericName[lv]=Personālās Uzskaites Rīks +GenericName[mk]=Алатка за лично сметководство +GenericName[mn]=Хувийн нягтлан бодох програм +GenericName[ms]=Alat Perakaunan Peribadi +GenericName[mt]=Għodda finanzjarja personali +GenericName[nb]=Personlig kontoverktøy +GenericName[nds]=Programm för dat Plegen vun'n Konto +GenericName[ne]=व्यक्तिगत खाता उपकरण +GenericName[nl]=Privéboekhouding +GenericName[nn]=Personleg kontoverktøy +GenericName[nso]=Sebereka sa Palo ya Botho +GenericName[pa]=ਨਿੱਜੀ ਵਹੀ-ਖਾਤਾ ਸੰਦ +GenericName[pl]=Konta osobiste +GenericName[pt]=Ferramenta de Contabilidade Pessoal +GenericName[pt_BR]=Ferramenta de Contabilidade Pessoal +GenericName[ro]=Program de contabilitate personal +GenericName[ru]=Личная бухгалтерия +GenericName[rw]=Igikoresho cy'Icungamutungo Cyihariye +GenericName[se]=Persovnnalaš kontoreaidu +GenericName[sk]=Osobné účtovníctvo +GenericName[sl]=Orodje za osebno evidenco +GenericName[sr]=Алат за лично рачуноводство +GenericName[sr@Latn]=Alat za lično računovodstvo +GenericName[ss]=Lithulusi le Accounting yamuntfu sicu +GenericName[sv]=Personligt redovisningsverktyg +GenericName[ta]=தனிப்பட்ட கணக்கிடும் கருவி +GenericName[tg]=Обзори ҳисобдори шахсӣ +GenericName[th]=เครื่องมือทำบัญชีส่วนตัว +GenericName[tr]=Kişisel Muhasebe Aracı +GenericName[tt]=Şäxes Xísapları Qoralı +GenericName[uk]=Засіб ведення особистих рахунків +GenericName[uz]=Shaxsiy hisob-kitob vositasi +GenericName[uz@cyrillic]=Шахсий ҳисоб-китоб воситаси +GenericName[ven]=Tshishumiswa Tshauvhalela Tshau +GenericName[vi]=Công cụ quản lý Tài khoản Cá nhân +GenericName[wa]=Usteye da vosse po fé les contes +GenericName[zh_CN]=个人记账工具 +GenericName[zh_TW]=個人會計程式 +GenericName[zu]=Ithuluzi lomuntu sintu lezama-akhawunti +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/XsLite.desktop b/kappfinder/apps/Office/XsLite.desktop new file mode 100644 index 000000000..c9329d493 --- /dev/null +++ b/kappfinder/apps/Office/XsLite.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=XsLite +Name[af]=Xslite +Name[cy]=XsYsgafn +Name[hi]=एक्सएस-लाइट +Name[lo]=Xslite +Name[sv]=Xslite +Name[ta]=Xsலைட் +Name[te]=ఎక్స్ ఎస్ లైట్ +MimeType= +Exec=xslite +Icon=xapp +Path= +DocPath= +Type=Application +Terminal=false +GenericName=Spread Sheet +GenericName[af]=Sprei Staat +GenericName[ar]=ورقة عمل +GenericName[az]=Hesab Cədvəli +GenericName[be]=Электронныя табліцы +GenericName[bg]=Електронна таблица +GenericName[bn]=স্প্রেড-শিট +GenericName[br]=Loger +GenericName[bs]=Proračunska tablica +GenericName[ca]=Full de càlcul +GenericName[cs]=Tabulkový procesor +GenericName[csb]=Kalkùlacëjny lëst +GenericName[cy]=Taenlen +GenericName[da]=Regneark +GenericName[de]=Tabellenkalkulation +GenericName[el]=Λογιστικό φύλλο +GenericName[eo]=Tabelkalkulilo +GenericName[es]=Hoja de cálculo +GenericName[et]=Tabeltöötlus +GenericName[eu]=Kalkulu orria +GenericName[fa]=صفحه گسترده +GenericName[fi]=Taulukkolaskentaohjelma +GenericName[fo]=Rokniark +GenericName[fr]=Tableur +GenericName[fy]=Rekkenblêd +GenericName[ga]=Scarbhileog +GenericName[gl]=Folla de Cálculo +GenericName[he]=גיליון אלקטרוני +GenericName[hi]=स्प्रेड शीट +GenericName[hr]=Proračunska tablica +GenericName[hu]=KOffice táblázatkezelő +GenericName[id]=Kertas Kerja +GenericName[is]=Töflureiknir +GenericName[it]=Foglio elettronico +GenericName[ja]=表計算 +GenericName[ka]=ელექტრონული ცხრილი +GenericName[kk]=Электрондық кесте +GenericName[km]=សៀវភៅ​បញ្ជី +GenericName[ko]=스프레드시트 +GenericName[lo]=ກະດານຄຳນວນ +GenericName[lt]=Elektroninė lentelė +GenericName[mk]=Програма за табеларни пресметки +GenericName[mn]=Хүснэгтэн боловсруулалт +GenericName[ms]=Lembaran Hamparan +GenericName[nb]=Regneark +GenericName[nds]=Tabellreken +GenericName[ne]=स्प्रेडसिट +GenericName[nl]=Rekenblad +GenericName[nn]=Rekneark +GenericName[nso]=Letlakala la Phatlalatso +GenericName[oc]=Folha de calcul +GenericName[pa]=ਸਾਰਣੀਕਾਰ +GenericName[pl]=Arkusz kalkulacyjny +GenericName[pt]=Folha de cálculo +GenericName[pt_BR]=Planilha de cálculo +GenericName[ro]=Program de calcul tabelar +GenericName[ru]=Электронная таблица +GenericName[rw]=UrupapuroRusesuye +GenericName[se]=Rehketárka +GenericName[sk]=Tabuľkový procesor +GenericName[sl]=Preglednica +GenericName[sr]=Програм за табеларна израчунавања +GenericName[sr@Latn]=Program za tabelarna izračunavanja +GenericName[sv]=Kalkylprogram +GenericName[ta]=விரிப்பட்டியல் +GenericName[te]=స్ప్రెడ్ షీట్ +GenericName[tg]=Ҷадвали электронӣ +GenericName[th]=กระดาษคำนวณ +GenericName[tr]=Hesap Çizelgesi +GenericName[tt]=İsäpläw Cäymäse +GenericName[uk]=Електронна таблиця +GenericName[uz]=Elektron jadval +GenericName[uz@cyrillic]=Электрон жадвал +GenericName[ven]=Andaladza Siatari +GenericName[vi]=Trình tính bảng +GenericName[wa]=Tåvleu +GenericName[zh_CN]=电子表格 +GenericName[zh_TW]=試算表 +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/abiword.desktop b/kappfinder/apps/Office/abiword.desktop new file mode 100644 index 000000000..edaed4653 --- /dev/null +++ b/kappfinder/apps/Office/abiword.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=AbiWord +Name[af]=Abiword +Name[bn]=এবি-ওয়ার্ড +Name[eo]=Abi-Verkilo +Name[hi]=एबीवर्ड +Name[mn]=Абиворд +Name[ne]=ए बी आई वर्ड +Name[nso]=Lentsu la Abi +Name[pa]=ਅਬੀਵਰਡ +Name[rw]=Abi-Ijambo +Name[sv]=Abiword +Name[ta]=அபிவேர்ட் +Name[te]=అభి వర్డ్ +Name[ven]=Maipfi a Abi +GenericName=Word Processor +GenericName[af]=Woord Verwerker +GenericName[ar]=معالج نصوص +GenericName[az]=Kəlmə İşləmə +GenericName[be]=Тэкставы працэсар +GenericName[bg]=Текстообработваща програма +GenericName[bn]=ওয়ার্ড প্রসেসর +GenericName[br]=Skridtreterezh +GenericName[bs]=Obrada teksta +GenericName[ca]=Processador Word +GenericName[cs]=Textový procesor +GenericName[csb]=Procesora tekstu +GenericName[cy]=Prosesydd Geiriau +GenericName[da]=Tekstbehandling +GenericName[de]=Textverarbeitung +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Verkilo +GenericName[es]=Procesador de textos +GenericName[et]=Tekstitöötlus +GenericName[eu]=Testu prozesatzailea +GenericName[fa]=واژه‌پرداز +GenericName[fi]=Tekstinkäsittelyohjelma +GenericName[fr]=Traitement de texte +GenericName[fy]=Tekstferwurker +GenericName[ga]=Próiseálaí focal +GenericName[gl]=Procesador de Textos +GenericName[he]=מעבד תמלילים +GenericName[hi]=वर्ड प्रोसेसर +GenericName[hr]=Program za obrada teksta +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Ritvinnsla +GenericName[it]=Videoscrittura +GenericName[ja]=ワープロ +GenericName[ka]=ტექსტური პროცესორი +GenericName[kk]=Мәтін өңдеуші +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=워드 프로세서 +GenericName[lo]=ໂປຣແກຣມປະມວນຜົນຄຳ +GenericName[lt]=Tekstų apdorotojas +GenericName[lv]=Tekstu Procesors +GenericName[mk]=Програма за обработка на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Pemproses Kata +GenericName[nb]=Tekstbehandler +GenericName[nds]=Textprogramm +GenericName[ne]=वर्ड प्रोसेसर +GenericName[nl]=Tekstverwerker +GenericName[nn]=Teksthandsamar +GenericName[nso]=Sediragatsi sa Mantsu +GenericName[pa]=ਸ਼ਬਦਕਾਰ +GenericName[pl]=Procesor tekstu +GenericName[pt]=Processador de Texto +GenericName[pt_BR]=Processador de Texto +GenericName[ro]=Procesor de text +GenericName[ru]=Текстовый процессор +GenericName[rw]=Munonosora Mwandiko +GenericName[se]=Teakstagieđahalli +GenericName[sk]=Textový procesor +GenericName[sl]=Urejevalnik besedila +GenericName[sr]=Обрада текста +GenericName[sr@Latn]=Obrada teksta +GenericName[ss]=Sichubi magama +GenericName[sv]=Ordbehandlare +GenericName[ta]=வேர்ட் ப்ரஸ்ஸஸார் +GenericName[te]=వర్డ్ ప్రొసెసర్ +GenericName[tg]=Протсессори матн +GenericName[th]=โปรแกรมประมวลผลคำ +GenericName[tr]=Kelime İşlemci +GenericName[tt]=Süz Eşkärtüçe +GenericName[uk]=Текстовий процесор +GenericName[uz]=Matn protsessori +GenericName[uz@cyrillic]=Матн процессори +GenericName[ven]=Tshiiti tsha Maipfi +GenericName[vi]=Trình xử lí văn bản văn phòng +GenericName[wa]=Sicrijhaedje di tecse +GenericName[zh_CN]=字处理器 +GenericName[zh_TW]=文書處理程式 +GenericName[zu]=Umqhubekisi wegama +Exec=abiword +Terminal=false +Icon=abiword +Type=Application diff --git a/kappfinder/apps/Office/acroread.desktop b/kappfinder/apps/Office/acroread.desktop new file mode 100644 index 000000000..b931165e8 --- /dev/null +++ b/kappfinder/apps/Office/acroread.desktop @@ -0,0 +1,118 @@ +[Desktop Entry] +Name=Acrobat Reader +Name[af]=Acrobat Leser +Name[bn]=অ্যাক্রোব্যাট রিডার +Name[br]=Lenner Acrobat +Name[bs]=Acrobat čitač +Name[cy]=Acrobat Reader +Name[eo]="Acrobat"-Legilo +Name[fi]=Acrobat-lukija +Name[ga]=Léitheoir Acrobat +Name[hi]=एक्रोबेट रीडर +Name[hu]=Acrobat-olvasó +Name[is]=Acrobat-lesari +Name[lo]=Acrobat reader +Name[lv]=Acrobat Lasītājs +Name[ne]=एक्रोब्याट रिडर +Name[nn]=Acrobat-lesar +Name[nso]=Mmadi wa Acrobat +Name[pa]=ਐਕਰੋਬੈਟ ਰੀਡਰ +Name[se]=Acrobat-logan +Name[ss]=Sifundzi se Acrobat +Name[ta]=ஆக்ரோபேட் ரீடர் +Name[te]=ఎక్రొబేట్ రీడర్ +Name[tg]=Хонандаи Acrobat +Name[ven]=Muvhali wa Akhurobati +Name[zh_CN]=Acrobat 阅读器 +Name[zh_TW]=Acrobat 閱讀器 +Name[zu]=Umfundi we-Acrobat +MimeType=application/pdf; +Exec=acroread %f +Type=Application +DocPath= +GenericName=PDF Viewer +GenericName[af]=Pdf Aansig +GenericName[ar]=عارض الملفات PDF +GenericName[az]=PDF Nümayişçisi +GenericName[be]=Праглядальнік PDF +GenericName[bg]=Преглед на PDF документи +GenericName[bn]=পি-ডি-এফ প্রদর্শক +GenericName[br]=Gweler PDF +GenericName[bs]=Preglednik PDF dokumenata +GenericName[ca]=Visor PDF +GenericName[cs]=Prohlížeč PDF souborů +GenericName[csb]=Przezérnik PDF +GenericName[cy]=Gwelydd PDF +GenericName[da]=PDF-fremviser +GenericName[de]=PDF-Betrachter +GenericName[el]=Προβολέας PDF +GenericName[eo]=PDF-rigardilo +GenericName[es]=Visor de documentos PDF +GenericName[et]=PDF failide vaatamine +GenericName[eu]=PDF ikustailua +GenericName[fa]=مشاهده‌گر PDF +GenericName[fi]=PDF-näytin +GenericName[fo]=PDF-vísari +GenericName[fr]=Afficheur PDF +GenericName[fy]=PDF-werjefteprogramma +GenericName[ga]=Amharcán PDF +GenericName[gl]=Visualizador de PDF +GenericName[he]=מציג קבצי PDF +GenericName[hi]=पीडीएफ प्रदर्शक +GenericName[hr]=Preglednik PDF dokumenata +GenericName[hu]=PDF-nézegető +GenericName[id]=Viewer PDF +GenericName[is]=PDF-sjá +GenericName[it]=Visualizzatore PDF +GenericName[ja]=PDF ビューア +GenericName[ka]=PDF დოკუმენტების სანახავი პროგრამა +GenericName[kk]=PDF қарау құралы +GenericName[km]=កម្មវិធី​មើល PDF +GenericName[ko]=PDF 뷰어 +GenericName[lo]=ສະແດງຜົນPDF +GenericName[lt]=PDF Žiūriklis +GenericName[lv]=PDF Skatītājs +GenericName[mk]=Прегледувач на PDF +GenericName[mn]=PDF-Харагч +GenericName[ms]=Pemapar PDF +GenericName[mt]=Werrej PDF +GenericName[nb]=PDF-leser +GenericName[nds]=Kieker för PDF-Dateien +GenericName[ne]=PDF दर्शक +GenericName[nl]=PDF-weergaveprogramma +GenericName[nn]=PDF-lesar +GenericName[nso]=Molebeledi wa PDF +GenericName[oc]=Visualisor PDF +GenericName[pa]=PDF ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka plików PDF +GenericName[pt]=Visualizador de PDFs +GenericName[pt_BR]=Visualizador de arquivos PDF +GenericName[ro]=Vizualizor de documente PDF +GenericName[ru]=Просмотр PDF +GenericName[rw]=Mugaragaza PDF +GenericName[se]=PDF-logan +GenericName[sk]=Prehliadač PDF súborov +GenericName[sl]=Pregledovalnik datotek PDF +GenericName[sr]=PDF приказивач +GenericName[sr@Latn]=PDF prikazivač +GenericName[ss]=Sibuki se PDF +GenericName[sv]=PDF-visare +GenericName[ta]=PDF காட்சி +GenericName[te]=పిడిఎఫ్ వీక్షిణి +GenericName[tg]=Намоишгари PDF +GenericName[th]=ตัวแสดงผล PDF +GenericName[tr]=PDF Görüntüleyici +GenericName[tt]=PDF Kürsätkeç +GenericName[uk]=Переглядач PDF +GenericName[uz]=PDF koʻruvchi +GenericName[uz@cyrillic]=PDF кўрувчи +GenericName[ven]=Tshivhoni tsha PDF +GenericName[vi]=Trình xem PDF +GenericName[wa]=Håyneu di documints PDF +GenericName[zh_CN]=PDF 查看器 +GenericName[zh_TW]=PDF 檢視程式 +GenericName[zu]=Umbukisi we-PDF +Terminal=false +Icon=acroread +Caption=PDF Viewer +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/gnucash.desktop b/kappfinder/apps/Office/gnucash.desktop new file mode 100644 index 000000000..4879a41e0 --- /dev/null +++ b/kappfinder/apps/Office/gnucash.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=GnuCash +Name[bn]=গনিউ-ক্যাশ +Name[csb]=Gnu - dëtczi +Name[hi]=ग्नूकैश +Name[lo]=ເກມ +Name[ne]=जीएनयू क्यास +Name[pa]=ਗਨੂਕੈਸ਼ +Name[pl]=Gnu - Pieniądze +Name[ta]=gபணம் +Name[te]=గ్నుడబ్బు +Name[tg]=Пули Gnu +Name[ven]=Tshelede ya Gnu +Exec=gnucash +Type=Application +DocPath= +GenericName=Finance Manager +GenericName[af]=Finansiële Bestuurder +GenericName[ar]=أداة لإدارة الأموال +GenericName[az]=Maliyyə İdarəcisi +GenericName[be]=Кіраўнік фінансаў +GenericName[bg]=Финансов мениджър +GenericName[bn]=ফাইনান্স ম্যানেজার +GenericName[br]=Merour arc'hant +GenericName[bs]=Upravitelj ličnim finansijama +GenericName[ca]=Gestor de finances +GenericName[cs]=Správce financí +GenericName[csb]= Finansowi menadżer +GenericName[cy]=Rheolydd Cyllid +GenericName[de]=Finanzverwaltung +GenericName[el]=Διαχειριστής οικονομικών +GenericName[eo]=Financadministrilo +GenericName[es]=Gestor de finanzas +GenericName[et]=Isiklike finantside haldamine +GenericName[eu]=Finantzia kudeatzailea +GenericName[fa]=مدیر مالی +GenericName[fi]=Rahanhallinta +GenericName[fr]=Gestionnaire de finances +GenericName[fy]=Finansjeel behear +GenericName[ga]=Bainisteoir Airgeadais +GenericName[gl]=Xestor de Finanzas +GenericName[he]=מנהל כספים +GenericName[hi]=वित्तीय प्रबंधक +GenericName[hr]=Rukovoditelj financija +GenericName[hu]=Pénzügyi menedzser +GenericName[is]=Bókhaldið +GenericName[it]=Gestione finanze +GenericName[ja]=ファイナンスマネージャ +GenericName[kk]=Қаржы менеджері +GenericName[km]=កម្មវិធី​គ្រប់គ្រង​ហិរញ្ញវត្ថុ +GenericName[ko]=재정 관리자 +GenericName[lo]=ເຄືອ່ງມືຈັດການນາມບັດ +GenericName[lt]=Finansų tvarkyklė +GenericName[lv]=Finanšu Menedžeris +GenericName[mk]=Финансиски менаџер +GenericName[mn]=Санхүү удирдлага +GenericName[ms]=Pengurus Kewangan +GenericName[mt]=Manager tal-finanzi +GenericName[nb]=Finansprogram +GenericName[nds]=Geldsaken plegen +GenericName[ne]=वित्त व्यस्थापक +GenericName[nl]=Financieel beheer +GenericName[nn]=Finanshandsamar +GenericName[nso]=Molaodi wa Matlotlo +GenericName[pa]=ਵਿੱਤ ਮੈਨੇਜਰ +GenericName[pl]=Menedżer finansowy +GenericName[pt]=Gestor de Finanças +GenericName[pt_BR]=Gerenciador de Finanças +GenericName[ro]=Planificator de finanțe +GenericName[ru]=Менеджер финансов +GenericName[rw]=Mugenga Mari +GenericName[se]=Finánsagieđahalli +GenericName[sk]=Správca financií +GenericName[sl]=Finančni upravitelj +GenericName[sr]=Менаџер финансија +GenericName[sr@Latn]=Menadžer finansija +GenericName[ss]=Umphatsi wetetimali +GenericName[sv]=Budgetprogram +GenericName[ta]=நிதி மேலாளர் +GenericName[tg]=Мудири Молия +GenericName[th]=เครื่องมือจัดการเงิน +GenericName[tr]=Muhasebe Yazılımı +GenericName[tt]=Aqça İdäräçe +GenericName[uk]=Менеджер фінансів +GenericName[uz]=Moliya boshqaruvchisi +GenericName[uz@cyrillic]=Молия бошқарувчиси +GenericName[ven]=Mulanguli wa Tshelede +GenericName[vi]=Trình quản lí Tài chính +GenericName[wa]=Manaedjeu di cwårs +GenericName[xh]=Umphathi Wezimali +GenericName[zh_CN]=金融管理 +GenericName[zh_TW]=財務管理程式 +GenericName[zu]=Imenenja yezezimali +Terminal=false +Icon=gnucash +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/lyx.desktop b/kappfinder/apps/Office/lyx.desktop new file mode 100644 index 000000000..774c53025 --- /dev/null +++ b/kappfinder/apps/Office/lyx.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=LyX +Name[bn]=লাইক্স +Name[hi]=एलवाईएक्स +Name[hr]=Lyx +Name[lo]=Lyx +Name[sv]=Lyx +Name[te]=లిక్స్ +GenericName=Word Processor +GenericName[af]=Woord Verwerker +GenericName[ar]=معالج نصوص +GenericName[az]=Kəlmə İşləmə +GenericName[be]=Тэкставы працэсар +GenericName[bg]=Текстообработваща програма +GenericName[bn]=ওয়ার্ড প্রসেসর +GenericName[br]=Skridtreterezh +GenericName[bs]=Obrada teksta +GenericName[ca]=Processador Word +GenericName[cs]=Textový procesor +GenericName[csb]=Procesora tekstu +GenericName[cy]=Prosesydd Geiriau +GenericName[da]=Tekstbehandling +GenericName[de]=Textverarbeitung +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Verkilo +GenericName[es]=Procesador de textos +GenericName[et]=Tekstitöötlus +GenericName[eu]=Testu prozesatzailea +GenericName[fa]=واژه‌پرداز +GenericName[fi]=Tekstinkäsittelyohjelma +GenericName[fr]=Traitement de texte +GenericName[fy]=Tekstferwurker +GenericName[ga]=Próiseálaí focal +GenericName[gl]=Procesador de Textos +GenericName[he]=מעבד תמלילים +GenericName[hi]=वर्ड प्रोसेसर +GenericName[hr]=Program za obrada teksta +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Ritvinnsla +GenericName[it]=Videoscrittura +GenericName[ja]=ワープロ +GenericName[ka]=ტექსტური პროცესორი +GenericName[kk]=Мәтін өңдеуші +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=워드 프로세서 +GenericName[lo]=ໂປຣແກຣມປະມວນຜົນຄຳ +GenericName[lt]=Tekstų apdorotojas +GenericName[lv]=Tekstu Procesors +GenericName[mk]=Програма за обработка на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Pemproses Kata +GenericName[nb]=Tekstbehandler +GenericName[nds]=Textprogramm +GenericName[ne]=वर्ड प्रोसेसर +GenericName[nl]=Tekstverwerker +GenericName[nn]=Teksthandsamar +GenericName[nso]=Sediragatsi sa Mantsu +GenericName[pa]=ਸ਼ਬਦਕਾਰ +GenericName[pl]=Procesor tekstu +GenericName[pt]=Processador de Texto +GenericName[pt_BR]=Processador de Texto +GenericName[ro]=Procesor de text +GenericName[ru]=Текстовый процессор +GenericName[rw]=Munonosora Mwandiko +GenericName[se]=Teakstagieđahalli +GenericName[sk]=Textový procesor +GenericName[sl]=Urejevalnik besedila +GenericName[sr]=Обрада текста +GenericName[sr@Latn]=Obrada teksta +GenericName[ss]=Sichubi magama +GenericName[sv]=Ordbehandlare +GenericName[ta]=வேர்ட் ப்ரஸ்ஸஸார் +GenericName[te]=వర్డ్ ప్రొసెసర్ +GenericName[tg]=Протсессори матн +GenericName[th]=โปรแกรมประมวลผลคำ +GenericName[tr]=Kelime İşlemci +GenericName[tt]=Süz Eşkärtüçe +GenericName[uk]=Текстовий процесор +GenericName[uz]=Matn protsessori +GenericName[uz@cyrillic]=Матн процессори +GenericName[ven]=Tshiiti tsha Maipfi +GenericName[vi]=Trình xử lí văn bản văn phòng +GenericName[wa]=Sicrijhaedje di tecse +GenericName[zh_CN]=字处理器 +GenericName[zh_TW]=文書處理程式 +GenericName[zu]=Umqhubekisi wegama +Exec=lyx +Terminal=false +Icon=lyx +MimeType=application/x-lyx +Type=Application diff --git a/kappfinder/apps/Office/mrproject.desktop b/kappfinder/apps/Office/mrproject.desktop new file mode 100644 index 000000000..8a9bc6b04 --- /dev/null +++ b/kappfinder/apps/Office/mrproject.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=MrProject +Name[bn]=মিস্টার-প্রোজেক্ট +Name[cy]=MrProsiect +Name[hi]=एमआर-प्रोजेक्ट +Name[hu]=MrProjekt +Name[lo]=ເອົາແຜ່ນອອກ +Name[ne]=Mr परियोजना +Name[nso]=MrnPorojeke +Name[rw]=MrUmushinga +Name[ta]=Mrதிட்ட அறிக்கை +Name[te]=మిస్టర్ ప్రాజెక్ట్ +Name[th]=มิสเตอร์โปรเจกต์ +Name[ven]=Radziphurodzhekiti +Name[vi]=Ngài Dự án +Exec=mrproject +Type=Application +DocPath= +GenericName=Project Manager +GenericName[af]=Projek Bestuurder +GenericName[ar]=أداة لإدارة المشاريع +GenericName[az]=Layihə İdarəcisi +GenericName[be]=Кіраўнік праектаў +GenericName[bg]=Управление на проекти +GenericName[bn]=প্রোজেক্ট ম্যানেজার +GenericName[br]=Merour ar raktres +GenericName[bs]=Upravitelj projektima +GenericName[ca]=Gestor de projectes +GenericName[cs]=Správce projektů +GenericName[csb]=Menadżer ùdbów +GenericName[cy]=Rheolydd Prosiect +GenericName[da]=Projekt manager +GenericName[de]=Projektverwaltung +GenericName[el]=Διαχειριστής έργου +GenericName[eo]=Projektadministrilo +GenericName[es]=Gestor de proyectos +GenericName[et]=Projektihaldur +GenericName[eu]=Proiektu kudeatzaliea +GenericName[fa]=مدیر پروژه +GenericName[fi]=Projektinhallinta +GenericName[fr]=Gestionnaire de projets +GenericName[fy]=Projektenbehear +GenericName[ga]=Bainisteoir Tionscadail +GenericName[gl]=Xestor de Proxectos +GenericName[he]=מנהל פרויקטים +GenericName[hi]=प्रोजेक्ट प्रबंधक +GenericName[hr]=Rukovoditelj financija +GenericName[hu]=Projektkezelő +GenericName[is]=Verkefnastjóri +GenericName[it]=Gestione progetti +GenericName[ja]=プロジェクトマネージャ +GenericName[kk]=Жобалар менеджері +GenericName[km]=កម្មវិធី​គ្រប់គ្រង​គម្រោង +GenericName[ko]=프로젝트 관리자 +GenericName[lo]=ເຄືອ່ງມືຈັດການນາມບັດ +GenericName[lt]=Projektų tvarkyklė +GenericName[lv]=Projektu Menedžeris +GenericName[mk]=Менаџер на проекти +GenericName[mn]=Проект удирдлага +GenericName[ms]=Pengurus Projek +GenericName[mt]=Manager tal-proġetti +GenericName[nb]=Prosjektbehandler +GenericName[nds]=Projektpleger +GenericName[ne]=परियोजना प्रबन्धक +GenericName[nl]=Projectenbeheer +GenericName[nn]=Prosjekthandsamar +GenericName[nso]=Molaodi wa Porojeke +GenericName[pa]=ਪਰੋਜੈਕਟ ਮੈਨੇਜਰ +GenericName[pl]=Menedżer projektów +GenericName[pt]=Gestor de Projectos +GenericName[pt_BR]=Gerenciador de Projetos +GenericName[ro]=Manager de proiecte +GenericName[ru]=Менеджер проектов +GenericName[rw]=Mugenga Mushinga +GenericName[se]=Prošeaktagieđahalli +GenericName[sk]=Správca projektov +GenericName[sl]=Projektni upravitelj +GenericName[sr]=Менаџер пројеката +GenericName[sr@Latn]=Menadžer projekata +GenericName[ss]=Umphatsi weProject +GenericName[sv]=Projekthantering +GenericName[ta]=திட்ட அறிக்கை மேலாளர் +GenericName[te]=ప్రాజెక్ట్ అభికర్త +GenericName[tg]=Мудири Нақша +GenericName[th]=โปรแกรมจัดการโครงการ +GenericName[tr]=Proje Yöneticisi +GenericName[tt]=Sölge İdäräçe +GenericName[uk]=Менеджер проектів +GenericName[uz]=Loyiha boshqaruvchisi +GenericName[uz@cyrillic]=Лойиҳа бошқарувчиси +GenericName[ven]=Mulanguli wa phurodzhekiti +GenericName[vi]=Trình quản lí dự án +GenericName[wa]=Manaedjeu di prodjets +GenericName[xh]=Umphathi Wephulo +GenericName[zh_CN]=项目管理 +GenericName[zh_TW]=計劃管理程式 +GenericName[zu]=Imenenja yeprojekthi +Terminal=false +Icon=planner +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/netscapeaddressbook.desktop b/kappfinder/apps/Office/netscapeaddressbook.desktop new file mode 100644 index 000000000..962385e57 --- /dev/null +++ b/kappfinder/apps/Office/netscapeaddressbook.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Name=Netscape Addressbook +Name[af]=Netscape Adresboek +Name[ar]=دفتر عناوين Netscape +Name[az]=Netscape Ünvan Dəftəri +Name[be]=Адрасная кніга Netscape +Name[bn]=নেটস্কেপ অ্যাড্রেসবুক +Name[br]=Karned Chomlec'hioù Netscape +Name[bs]=Netscape adresar +Name[ca]=Llibreta d'adreces de Netscape +Name[cs]=Kniha adres Netscape +Name[csb]=Adresowô ksążka Netscape +Name[cy]=Llyfr Cyfeiriad Netscape +Name[da]=Netscape Adressebog +Name[de]=Netscape-Adressbuch +Name[el]=Netscape Βιβλίο διευθύνσεων +Name[eo]=Netskapa adresaro +Name[es]=Netscape Adressbook +Name[et]=Netscape'i aadressiraamat +Name[eu]=Netscaperen helbide-liburua +Name[fa]=کتاب نشانی نت‌اسکیپ +Name[fr]=Netscape AddressBook +Name[fy]=Netscape Adressenboek +Name[ga]=Leabhar Seoltaí Netscape +Name[gl]=Caderno de Enderezos de Netscape +Name[hi]=नेटस्केप पता पुस्तिका +Name[hr]=Netscape adresar +Name[hu]=Netscape címjegyzék +Name[is]=Netscape Netfangaskrá +Name[it]=Rubrica degli indirizzi di Netscape +Name[ja]=ネットスケープアドレス帳 +Name[ka]=Netscape მისამართების წიგნი +Name[kk]=Netscape адрес кітапшасы +Name[km]=សៀវភៅ​អាសយដ្ឋាន Netscape +Name[ko]=Netscape 주소록 +Name[lo]=ສະມຸດທີ່ຢູ່ຂອງເນດເຄບ +Name[lt]=Netscape adresų knyga +Name[lv]=Netscape Adresu grāmata +Name[mk]=Адресар за Netscape +Name[mn]=Нэтскафе-Хаягийн дэвтэр +Name[ms]=Buku Alamat Netscape +Name[mt]=Ktieb tal-indirizzi Netscape +Name[nb]=Netscape adressebok +Name[nds]=Netscape-Adressbook +Name[ne]=नेटस्केप ठेगाना पुस्तिका +Name[nl]=Netscape Adressenboek +Name[nn]=Netscape-adressebok +Name[nso]=Buka ya Diaterese tsa Netscape +Name[pa]=ਨੈਟਸਕੇਪ ਸਿਰਨਾਵਾਂ-ਕਿਤਾਬ +Name[pl]=Książka adresowa Netscape +Name[pt]=Livro de Endereços do Netscape +Name[pt_BR]=Livro de endereços do Netscape +Name[ru]=Адресная книга Netscape +Name[rw]=Agatabondaganturo ka Netscape +Name[se]=Netscape-čujuhusgirji +Name[sk]=Kniha adries Nescape +Name[sr]=Netscape адресар +Name[sr@Latn]=Netscape adresar +Name[ss]=Libhuku lemakheli le Netscape +Name[sv]=Netscape adressbok +Name[te]=నెట్ స్కెప్ చిరునామా పుస్తకం +Name[tg]=Дафтари адреси Netscape +Name[th]=สมุดที่อยู่ของเน็ตสเคป +Name[tr]=Netscape Adres Defteri +Name[uk]=Адресна книга Nescape +Name[uz]=Netscape manzillar daftari +Name[uz@cyrillic]=Netscape манзиллар дафтари +Name[ven]=Bugu ya Diresi ya Vhukwamani +Name[vi]=Sổ địa chỉ Netscape +Name[wa]=Calpin d' adresses di Netscape +Name[xh]=Incwadi Yedilesi ye Netscape +Name[zh_CN]=Netscape 地址簿 +Name[zh_TW]=Netscape 地址簿 +Name[zu]=Incwadi yamakheli ye-Netscape +Exec=netscape +addresses +Terminal=false +Icon=kab +Type=Application diff --git a/kappfinder/apps/Office/plan.desktop b/kappfinder/apps/Office/plan.desktop new file mode 100644 index 000000000..880b90f9b --- /dev/null +++ b/kappfinder/apps/Office/plan.desktop @@ -0,0 +1,113 @@ +[Desktop Entry] +Name=Plan +Name[bn]=প্ল্যান +Name[fa]=نقشه +Name[ga]=Plean +Name[hi]=प्लान +Name[km]=គម្រោង +Name[lt]=Planas +Name[lv]=Plāns +Name[nds]=Plaan +Name[ne]=योजना +Name[nso]=Leano +Name[pa]=ਪਲੈਨ +Name[rw]=Gahunda +Name[sl]=Planer +Name[ss]=Ipulani +Name[ta]=திட்டம் +Name[te]=ప్లాన్ +Name[tg]=Нақша +Name[ven]=Maano +Name[vi]=Lên kế hoạch +Name[xh]=Icebo +Name[zu]=Iplani +MimeType= +Exec=plan +Icon=plan +Path= +DocPath= +Type=Application +Terminal=false +GenericName=Calendar Manager +GenericName[af]=Kalender Bestuurder +GenericName[ar]=مدير التقويم +GenericName[az]=Təqvim İdarəcisi +GenericName[be]=Кіраўнік календароў +GenericName[bg]=Календар +GenericName[bn]=ক্যালেণ্ডার ম্যানেজার +GenericName[br]=Merour deiziadur +GenericName[bs]=Rokovnik +GenericName[ca]=Gestor de calendari +GenericName[cs]=Plánovací kalendář +GenericName[csb]=Kalãdôrz +GenericName[cy]=Rheolydd Dyddiadur +GenericName[da]=Kalenderhåndtering +GenericName[de]=Kalenderverwaltung +GenericName[el]=Διαχειριστής ημερολογίου +GenericName[eo]=Kalendara programo +GenericName[es]=Gestor de calendarios +GenericName[et]=Kalendrihaldur +GenericName[eu]=Egutegi kudeatzailea +GenericName[fa]=مدیر تقویم +GenericName[fi]=Kalenteriohjelma +GenericName[fr]=Gestionnaire d'agenda +GenericName[fy]=Agindabehear +GenericName[ga]=Bainisteoir Féilire +GenericName[gl]=Xestor de Calendario +GenericName[he]=מנהל לוחות שנה +GenericName[hi]=कैलेन्डर प्रबंधक +GenericName[hr]=Rokovnik +GenericName[hu]=Naptárkezelő +GenericName[id]=Manajer Kalender +GenericName[is]=Dagatalsstjóri +GenericName[it]=Gestione del calendario +GenericName[ja]=カレンダーマネージャ +GenericName[ka]=კალენდარის მენეჯერი +GenericName[kk]=Күнтізбе +GenericName[km]=កម្មវិធី​គ្រប់គ្រង​ប្រតិទិន +GenericName[ko]=달력 관리자 +GenericName[lo]=ຕົວຈັດປະຕິທິນ +GenericName[lt]=Kalendoriaus tvarkyklė +GenericName[lv]=Kalendāra Menedžers +GenericName[mk]=Менаџер на календари +GenericName[mn]=Календар удирдагч +GenericName[ms]=Pengurus Kalendar +GenericName[mt]=Manager tal-Kalendarju +GenericName[nb]=Kalenderbehandler +GenericName[nds]=Kalennerpleger +GenericName[ne]=पात्रो प्रबन्धक +GenericName[nl]=Agendabeheer +GenericName[nn]=Kalenderhandsamar +GenericName[nso]=Molaodi wa Tshupamabaka +GenericName[oc]=Gestionari de calendari +GenericName[pa]=ਕੈਲੰਡਰ ਮੈਨੇਜਰ +GenericName[pl]=Kalendarz +GenericName[pt]=Calendário +GenericName[pt_BR]=Gerenciador de Calendários +GenericName[ro]=Manager de calendar +GenericName[ru]=Календарь +GenericName[rw]=Mugenga Indangaminsi +GenericName[se]=Kaleandargieđahalli +GenericName[sk]=Plánovací kalendár +GenericName[sl]=Koledar obveznosti +GenericName[sr]=Менаџер календара +GenericName[sr@Latn]=Menadžer kalendara +GenericName[ss]=Umphatsi wekhalenda +GenericName[sv]=Kalenderhanterare +GenericName[ta]=நாள்காட்டி மேலாளர் +GenericName[te]=కెలెండర్ అభికర్త +GenericName[tg]=Мудири Тақвим +GenericName[th]=ตัวจัดการปฏิทิน +GenericName[tr]=Takvim Yöneticisi +GenericName[tt]=Täqwimİdäräçe +GenericName[uk]=Менеджер календаря +GenericName[uz]=Kalendar boshqaruvchisi +GenericName[uz@cyrillic]=Календар бошқарувчиси +GenericName[ven]=Mulanguli wa Tsumbamaduvha +GenericName[vi]=Trình quản lí Lịch công tác +GenericName[wa]=Manaedjeu di calindrîs +GenericName[xh]=Umphathi we Khalenda +GenericName[zh_CN]=日程管理程序 +GenericName[zh_TW]=行事曆管理程式 +GenericName[zu]=Imenenja yekhalenda +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Office/pybliographic.desktop b/kappfinder/apps/Office/pybliographic.desktop new file mode 100644 index 000000000..b4a98fa91 --- /dev/null +++ b/kappfinder/apps/Office/pybliographic.desktop @@ -0,0 +1,101 @@ +[Desktop Entry] +GenericName=Bibliographic Database +GenericName[af]=Bibliografiese Databasis +GenericName[ar]=قاعدة بانات للمنشورات +GenericName[az]=Biblioqrafik Databeyz +GenericName[be]=Бібліяграфічная база дадзеных +GenericName[bg]=Библиографични данни +GenericName[bn]=গ্রন্থতালিকা +GenericName[br]=Stlennvon levrlennadur +GenericName[bs]=Bibliografska baza podataka +GenericName[ca]=Base de dades bibliogràfica +GenericName[cs]=Bibliografická databáze +GenericName[csb]=Bibliograficznô baza dostónków +GenericName[cy]=Cronfeydd Llyfryddiaethol +GenericName[da]=Bibliografisk database +GenericName[de]=Bibliographische Datenbank +GenericName[el]=Βιβλιογραφική βάση δεδομένων +GenericName[eo]=Bibliografia datumbazo +GenericName[es]=Base de datos bibliográfica +GenericName[et]=Bibliograafia andmebaas +GenericName[eu]=Datu-base bibliogafikoa +GenericName[fa]=دادگان کتاب‌شناسی +GenericName[fi]=Kirjastotietokanta +GenericName[fr]=Base de données bibliographiques +GenericName[fy]=Bibliografyske databank +GenericName[ga]=Bunachar Sonraí Bibleagrafaíocha +GenericName[gl]=Base de Datos Bibliográfica +GenericName[he]=מסד נתונים ביבליוגרפי +GenericName[hi]=बिबिलोग्राफिक डाटाबेस +GenericName[hr]=Bibliografska baza podataka +GenericName[hu]=Bibliográfiai adatbázis +GenericName[id]=Database Bibliographic +GenericName[is]=Gagnasafn heimildaskráa +GenericName[it]=Database bibliografico +GenericName[ja]=書誌データベース +GenericName[ka]=ბიბლიოგრაფიული მონაცემთა ბაზა +GenericName[kk]=Библиографиялық деректер қоры +GenericName[km]=មូលដ្ឋាន​ទិន្នន័យ​គន្ថនិទ្ទេស +GenericName[ko]=참고 문헌 데이터베이스 +GenericName[lo]=ຖານຂໍ້ມູນBibliographic +GenericName[lt]=Bibliografijos duomenų bazė +GenericName[lv]=Bibliogrāfiska Datubāze +GenericName[mk]=Библиографска база на податоци +GenericName[mn]=Намтрын өгөгдлийн бааз +GenericName[ms]=Pangkalan Data Bibliografik +GenericName[mt]=Database Bibliografiku +GenericName[nb]=Bibliografisk database +GenericName[nds]=Bibliograafsche Datenbank +GenericName[ne]=सन्दर्भ सूची डेटाबेस +GenericName[nl]=Bibliografische database +GenericName[nn]=Bibliografisk database +GenericName[nso]=Database ya Bibliography +GenericName[pa]=ਪੁਸਤਕ-ਸੂਚੀ ਡਾਟਾਬੇਸ +GenericName[pl]=Baza danych bibliograficznych +GenericName[pt]=Base de Dados Bibliográfica +GenericName[pt_BR]=Banco de dados bibliográficos +GenericName[ro]=Bază de date bibliografică +GenericName[ru]=Библиографическая база данных +GenericName[rw]=Ububikoshingiro bw'Ibyifashishijwe +GenericName[se]=Bibliográfalaš diehtovuođđu +GenericName[sk]=Bibliografická databáza +GenericName[sl]=Bibliografska zbirka podatkov +GenericName[sr]=Библиографска база +GenericName[sr@Latn]=Bibliografska baza +GenericName[ss]=Silulu semniningwane ye Bibliographic +GenericName[sv]=Referensdatabas +GenericName[ta]=நூலடைவு தகவல்தளம் +GenericName[te]=బిబ్లియొగ్రాఫిక్ డాటాబేస్ +GenericName[tg]=Бонки иттилооти китобшиносӣ +GenericName[th]=ฐานข้อมูลบรรณานุกรม +GenericName[tr]=Bibliografik VeriTabanı +GenericName[tt]=Biblio-yazma Biremlege +GenericName[uk]=Бібліографічна база даних +GenericName[uz]=Bibliografik maʼlumot bazasi +GenericName[uz@cyrillic]=Библиографик маълумот базаси +GenericName[ven]=Databeizi ya Mawanwa +GenericName[vi]=Cơ sở dữ liệu Thư mục +GenericName[wa]=Båze di dnêyes di livreyes +GenericName[xh]=Isiseko sedata Esiluluhlu lweencwadi zombhali nawuphi na +GenericName[zh_CN]=书目数据库 +GenericName[zh_TW]=書目資料庫 +GenericName[zu]=Isiqu sedata somlando +Exec=pybliographic +Icon=pybliographic +InitialPreference=2 +MimeType=text/x-bibtex +Name=Pybliographic +Name[af]=Pybliografie +Name[cy]=Pybliograffeg +Name[eo]=Bibliografiilo +Name[hi]=पिबिलोग्राफिक +Name[lt]=Bibliografija +Name[lv]=Pybliogrāfisks +Name[ne]=पाइब्लिओग्राफिक +Name[pa]=ਫੀਬਬਲੀਓਗਰਾਫ +Name[te]=పైబ్లియొగ్రాఫిక్ +Name[tg]=Иттилооти китобшиноси P +Path= +ServiceTypes= +Terminal=false +Type=Application diff --git a/kappfinder/apps/Office/scribus.desktop b/kappfinder/apps/Office/scribus.desktop new file mode 100644 index 000000000..682a3c1c2 --- /dev/null +++ b/kappfinder/apps/Office/scribus.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=Scribus +Name[bn]=স্ক্রাইবাস +Name[hi]=स्क्रिबस +Name[lo]=ສະຄຣີບັດສ໌ +Name[ne]=स्क्राइबस +Name[ta]=ஸ்கிரிபஸ் +Name[te]=స్క్రైబస్ +GenericName=Desktop Publishing +GenericName[af]=Werkskerm Publisering +GenericName[ar]=نشر مكتبي +GenericName[az]=Masa Üstü Yayımcılığı +GenericName[be]=Публікацыя +GenericName[bg]=Издателска програма +GenericName[bn]=ডেস্কটপ প্রকাশনা +GenericName[bs]=Stono izdavaštvo (DTP) +GenericName[ca]=Publicació d'escriptori +GenericName[cs]=Publikování na desktopu +GenericName[cy]=Cyhoeddi Penbwrdd +GenericName[da]=Dtp +GenericName[el]=Επιτραπέζια τυπογραφία +GenericName[eo]=DTP-programo +GenericName[es]=Maquetación +GenericName[et]=Küljendusrakendus +GenericName[fa]=نشر رومیزی +GenericName[fi]=Julkaisuohjelma +GenericName[fr]=Publication de bureau +GenericName[ga]=Foilsiú Deisce +GenericName[gl]=Publicación de Escritório +GenericName[he]=הוצאה לאור שולחנית +GenericName[hi]=डेस्कटॉप प्रकाशन +GenericName[hr]=Stolno izdavaštvo +GenericName[hu]=Kiadványszerkesztő +GenericName[is]=Umbrotsforrit +GenericName[it]=Pubblicazioni +GenericName[ja]=デスクトップパブリッシング +GenericName[ka]=სამაგიდო გამომცემლობა +GenericName[kk]=Үстел баспасы +GenericName[km]=ការបោះពុម្ព​ផ្ទៃតុ +GenericName[ko]=데스크톱 출판 +GenericName[lo]=ເດດທອບພັລບບີດຊິງ +GenericName[lt]=Darbastalio leidykla +GenericName[lv]=Datorizdevniecība +GenericName[ms]=Penerbitan Desktop +GenericName[nb]=Datatrykkeprogram +GenericName[ne]=डेस्कटप प्रकाशन +GenericName[nn]=Datatrykk +GenericName[nso]=Kwalakwatso ya Desktop +GenericName[pa]=ਡਿਸਕਟਾਮ ਪਰਕਾਸ਼ਨ +GenericName[pt]=Publicação no Ecrã +GenericName[pt_BR]=Publicidade +GenericName[ru]=Настольное издательство +GenericName[rw]=Gutangaza Ibiro +GenericName[se]=Dáhtaprentenprográmma +GenericName[sl]=Namizno založništvo +GenericName[sr]=Стоно издаваштво +GenericName[sr@Latn]=Stono izdavaštvo +GenericName[ss]=Kushicelela ku desktop +GenericName[ta]=மேல்மேசை வெளியீடு +GenericName[te]=రంగస్థల ప్రచురణ +GenericName[tg]=Нашри мизи корӣ +GenericName[th]=โปรแกรมจัดหน้าสิ่งพิมพ์ +GenericName[tr]=Desktop Yayıncılık +GenericName[tt]=Östäl Näsriäte +GenericName[uk]=Видавнича система +GenericName[uz]=Kichik nashriyot +GenericName[uz@cyrillic]=Кичик нашриёт +GenericName[ven]=U andadza Desikithopo +GenericName[vi]=Xuất bản trên máy cá nhân +GenericName[wa]=Pådjeu po copiutrece +GenericName[xh]=Upapasho lwe Desktop +GenericName[zh_CN]=桌面出版 +GenericName[zh_TW]=桌面出版 +GenericName[zu]=Ukushicilelwa kwe-Desktop +Exec=scribus +Terminal=false +Icon=scribus +Type=Application +X-StandardInstall=false diff --git a/kappfinder/apps/Office/xpdf.desktop b/kappfinder/apps/Office/xpdf.desktop new file mode 100644 index 000000000..f34109776 --- /dev/null +++ b/kappfinder/apps/Office/xpdf.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=X PDF +Name[bn]=এক্স পি-ডি-এফ +Name[de]=X-PDF +Name[eo]=XPDF +Name[es]=PDF para X +Name[fr]=XPDF +Name[hi]=एक्स पीडीएफ +Name[mn]=X-PDF +Name[nds]=X-PDF +Name[te]=ఎక్స్ పిడిఎఫ్ +MimeType=application/pdf +GenericName=PDF Viewer +GenericName[af]=Pdf Aansig +GenericName[ar]=عارض الملفات PDF +GenericName[az]=PDF Nümayişçisi +GenericName[be]=Праглядальнік PDF +GenericName[bg]=Преглед на PDF документи +GenericName[bn]=পি-ডি-এফ প্রদর্শক +GenericName[br]=Gweler PDF +GenericName[bs]=Preglednik PDF dokumenata +GenericName[ca]=Visor PDF +GenericName[cs]=Prohlížeč PDF souborů +GenericName[csb]=Przezérnik PDF +GenericName[cy]=Gwelydd PDF +GenericName[da]=PDF-fremviser +GenericName[de]=PDF-Betrachter +GenericName[el]=Προβολέας PDF +GenericName[eo]=PDF-rigardilo +GenericName[es]=Visor de documentos PDF +GenericName[et]=PDF failide vaatamine +GenericName[eu]=PDF ikustailua +GenericName[fa]=مشاهده‌گر PDF +GenericName[fi]=PDF-näytin +GenericName[fo]=PDF-vísari +GenericName[fr]=Afficheur PDF +GenericName[fy]=PDF-werjefteprogramma +GenericName[ga]=Amharcán PDF +GenericName[gl]=Visualizador de PDF +GenericName[he]=מציג קבצי PDF +GenericName[hi]=पीडीएफ प्रदर्शक +GenericName[hr]=Preglednik PDF dokumenata +GenericName[hu]=PDF-nézegető +GenericName[id]=Viewer PDF +GenericName[is]=PDF-sjá +GenericName[it]=Visualizzatore PDF +GenericName[ja]=PDF ビューア +GenericName[ka]=PDF დოკუმენტების სანახავი პროგრამა +GenericName[kk]=PDF қарау құралы +GenericName[km]=កម្មវិធី​មើល PDF +GenericName[ko]=PDF 뷰어 +GenericName[lo]=ສະແດງຜົນPDF +GenericName[lt]=PDF Žiūriklis +GenericName[lv]=PDF Skatītājs +GenericName[mk]=Прегледувач на PDF +GenericName[mn]=PDF-Харагч +GenericName[ms]=Pemapar PDF +GenericName[mt]=Werrej PDF +GenericName[nb]=PDF-leser +GenericName[nds]=Kieker för PDF-Dateien +GenericName[ne]=PDF दर्शक +GenericName[nl]=PDF-weergaveprogramma +GenericName[nn]=PDF-lesar +GenericName[nso]=Molebeledi wa PDF +GenericName[oc]=Visualisor PDF +GenericName[pa]=PDF ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka plików PDF +GenericName[pt]=Visualizador de PDFs +GenericName[pt_BR]=Visualizador de arquivos PDF +GenericName[ro]=Vizualizor de documente PDF +GenericName[ru]=Просмотр PDF +GenericName[rw]=Mugaragaza PDF +GenericName[se]=PDF-logan +GenericName[sk]=Prehliadač PDF súborov +GenericName[sl]=Pregledovalnik datotek PDF +GenericName[sr]=PDF приказивач +GenericName[sr@Latn]=PDF prikazivač +GenericName[ss]=Sibuki se PDF +GenericName[sv]=PDF-visare +GenericName[ta]=PDF காட்சி +GenericName[te]=పిడిఎఫ్ వీక్షిణి +GenericName[tg]=Намоишгари PDF +GenericName[th]=ตัวแสดงผล PDF +GenericName[tr]=PDF Görüntüleyici +GenericName[tt]=PDF Kürsätkeç +GenericName[uk]=Переглядач PDF +GenericName[uz]=PDF koʻruvchi +GenericName[uz@cyrillic]=PDF кўрувчи +GenericName[ven]=Tshivhoni tsha PDF +GenericName[vi]=Trình xem PDF +GenericName[wa]=Håyneu di documints PDF +GenericName[zh_CN]=PDF 查看器 +GenericName[zh_TW]=PDF 檢視程式 +GenericName[zu]=Umbukisi we-PDF +Exec=xpdf +Icon=gv +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/System/Makefile.am b/kappfinder/apps/System/Makefile.am new file mode 100644 index 000000000..e0146a6a4 --- /dev/null +++ b/kappfinder/apps/System/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = Terminal + +kappfinder_system_data_DATA = sam.desktop xosview.desktop editres.desktop wine.desktop \ + citrix_ica.desktop + +kappfinder_system_datadir = $(kde_datadir)/kappfinder/apps/System + +EXTRA_DIST = $(kappfinder_system_data_DATA) diff --git a/kappfinder/apps/System/Terminal/Makefile.am b/kappfinder/apps/System/Terminal/Makefile.am new file mode 100644 index 000000000..4f28e78b9 --- /dev/null +++ b/kappfinder/apps/System/Terminal/Makefile.am @@ -0,0 +1,5 @@ +kappfinder_system_terminal_data_DATA = procinfo.desktop vmstat.desktop aterm.desktop rxvt.desktop + +kappfinder_system_terminal_datadir = $(kde_datadir)/kappfinder/apps/System/Terminal + +EXTRA_DIST = $(kappfinder_system_terminal_data_DATA) diff --git a/kappfinder/apps/System/Terminal/aterm.desktop b/kappfinder/apps/System/Terminal/aterm.desktop new file mode 100644 index 000000000..1245374fa --- /dev/null +++ b/kappfinder/apps/System/Terminal/aterm.desktop @@ -0,0 +1,132 @@ +[Desktop Entry] +Exec=aterm +Icon=kpm +Type=Application +Name=Terminal +Name[af]=Terminaal +Name[ar]=مطراف +Name[be]=Тэрмінал +Name[bn]=টার্মিনাল +Name[br]=Termenell +Name[cs]=Terminál +Name[cy]=Terfynell +Name[de]=Aterm-Terminal +Name[el]=Τερματικό +Name[eo]=Terminalo +Name[eu]=Terminala +Name[fa]=پایانه +Name[fi]=Komentoikkuna +Name[ga]=Teirminéal +Name[hi]=टर्मिनल +Name[it]=Terminale +Name[ja]=ターミナル +Name[ka]=ტერმინალი +Name[kk]=Терминал +Name[km]=ស្ថានីយ +Name[lo]=ເທີມີນອນ +Name[lt]=Terminalas +Name[lv]=Termināls +Name[mn]=Aterm-Терминал +Name[ne]=टर्मिनल +Name[pa]=ਟਰਮੀਨਲ +Name[ru]=Терминал +Name[rw]=Igihera +Name[sk]=Terminál +Name[sr]=Терминал +Name[ss]=Sikhungo +Name[ta]=கடைசி +Name[te]=టెర్మినల్ +Name[tg]=Поёна +Name[th]=เทอร์มินัล +Name[tr]=Uçbirim +Name[uk]=Термінал +Name[uz@cyrillic]=Терминал +Name[ven]=Mafhedziselo +Name[vi]=Thiết bị cuối +Name[wa]=Terminå +Name[xh]=Isixhobo sangaphandle sekhompuma +Name[zh_CN]=终端 +Name[zh_TW]=終端機 +Name[zu]=Okwangaphandle +GenericName=Terminal Program +GenericName[af]=Terminaal Program +GenericName[ar]=برنامج مطراف +GenericName[az]=Terminal Proqramı +GenericName[be]=Тэрмінал +GenericName[bg]=Терминална програма +GenericName[bn]=টার্মিনাল প্রোগ্রাম +GenericName[br]=Goulev termenell +GenericName[bs]=Terminalni program +GenericName[ca]=Programa de terminal +GenericName[cs]=Terminálový program +GenericName[csb]=Programa terminala +GenericName[cy]=Rhaglen Terfynell +GenericName[da]=Terminalprogram +GenericName[de]=Terminalprogramm +GenericName[el]=Πρόγραμμα τερματικού +GenericName[eo]=Terminalimitaĵo +GenericName[es]=Programa de terminal +GenericName[et]=Terminaliemulaator +GenericName[eu]=Terminal programa +GenericName[fa]=برنامۀ پایانه +GenericName[fi]=Komentoikkunaohjelma +GenericName[fr]=Terminal +GenericName[fy]=Terminalprogramma +GenericName[ga]=Clár Teirminéil +GenericName[gl]=Programa de Terminal +GenericName[he]=תוכנית מסוף +GenericName[hi]=टर्मिनल प्रोग्राम +GenericName[hr]=Terminalski program +GenericName[hu]=Parancsértelmező +GenericName[id]=Program Terminal +GenericName[is]=Skjáhermir +GenericName[it]=Programma terminale +GenericName[ja]=ターミナルプログラム +GenericName[ka]=პროგრამა ტერმინალისთვის +GenericName[kk]=Терминал бағдарламасы +GenericName[km]=កម្មវិធី​ស្ថានីយ +GenericName[ko]=터미널 프로그램 +GenericName[lo]=ອັບພລິກເຄເຊິນ ເທີມີນອນ +GenericName[lt]=Terminalo programa +GenericName[lv]=Termināla Programma +GenericName[mk]=Терминалска програма +GenericName[mn]=Терминал-Програм +GenericName[ms]=Program Terminal +GenericName[mt]=Programm ta' terminal +GenericName[nb]=Terminalprogram +GenericName[nds]=Terminal-Programm +GenericName[ne]=टर्मिनल कार्यक्रम +GenericName[nl]=Terminalprogramma +GenericName[nn]=Terminalprogram +GenericName[nso]=Lenaneo la Terminal +GenericName[pa]=ਟਰਮੀਨਲ ਪਰੋਗਰਾਮ +GenericName[pl]=Program terminala +GenericName[pt]=Programa de Terminal +GenericName[pt_BR]=Terminal +GenericName[ro]=Program terminal +GenericName[ru]=Терминал +GenericName[rw]=Porogaramu Umukiriya +GenericName[se]=Terminálaprográmma +GenericName[sk]=Terminál +GenericName[sl]=Terminalski program +GenericName[sr]=Терминалски програм +GenericName[sr@Latn]=Terminalski program +GenericName[ss]=Luhlelo lwesikhungo +GenericName[sv]=Terminalprogram +GenericName[ta]=கடைசி நிரலி +GenericName[te]=టెర్మినల్ కార్యక్రమం +GenericName[tg]=Барномаи поёна +GenericName[th]=โปรแกรมเทอร์มินัล +GenericName[tr]=Terminal Programı +GenericName[tt]=Terminal Yazılımı +GenericName[uk]=Програма терміналу +GenericName[uz]=Terminal dasturi +GenericName[uz@cyrillic]=Терминал дастури +GenericName[ven]=Mbekanyamushumo ya Mafhedziselo +GenericName[vi]=Trình đầu cuối +GenericName[wa]=Programe di terminå +GenericName[xh]=Inkqubo Yesixhobo sangaphandle sekhompyutha +GenericName[zh_CN]=终端程序 +GenericName[zh_TW]=終端機程式 +GenericName[zu]=Uhlelo lwemisebenzi lwangaohandle +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/apps/System/Terminal/procinfo.desktop b/kappfinder/apps/System/Terminal/procinfo.desktop new file mode 100644 index 000000000..66c02e963 --- /dev/null +++ b/kappfinder/apps/System/Terminal/procinfo.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Exec=procinfo -f +Icon=kpm +Type=Application +Name=Procinfo +Name[csb]=Wëdowiédzô ò procesach +Name[eo]=Procezoinformo +Name[hi]=प्रॉकजानकारी +Name[lo]=ຂໍ້ມູນໂປຣເຊດ +Name[ne]=प्रोकिन्फो +Name[nso]=Tshedimoso ya Tiragatso +Name[pa]=ਕਾਰਜ ਜਾਣਕਾਰੀ +Name[pl]=Informacje o procesach +Name[sl]=Podatki o procesih +Name[te]=ప్రాక్ ఇన్ఫొ +Name[tg]=Иттилооти Proc +Name[th]=ข้อมูลโปรเซส +GenericName=System Process Information +GenericName[af]=Stelsel Proses Informasie +GenericName[ar]=معلومات إجرائات النظام +GenericName[az]=Sistem Gedişatları Mə'lumatı +GenericName[be]=Інфармацыя аб працэсах сістэмы +GenericName[bg]=Информация за системните процеси +GenericName[bn]=সিস্টেম প্রসেস তথ্য +GenericName[bs]=Informacije o sistemskim procesima +GenericName[ca]=Sistema d'informació dels processos +GenericName[cs]=Informace o systémových procesech +GenericName[csb]=Wëdowiédzô ò systemie +GenericName[cy]=Gwybodaeth Broses Cysawd +GenericName[da]=Systemprocesinformation +GenericName[de]=Infos zu laufenden Programmen +GenericName[el]=Πληροφορίες για τις διεργασίες του συστήματος +GenericName[eo]=Informo pri procezoj +GenericName[es]=Información sobre procesos del sistema +GenericName[et]=Süsteemi protsesside info +GenericName[eu]=Sistemaren prozesuei buruzko informazioa +GenericName[fa]=اطلاعات فرآیند سیستم +GenericName[fi]=Järjestelmän prosessien tietoja +GenericName[fr]=Informations sur les processus du système +GenericName[fy]=Ynformaasje foar systeemprosessen +GenericName[ga]=Eolas faoi Phróisis an Chórais +GenericName[gl]=Información dos Procesos do Sistema +GenericName[he]=מידע לגבי תהליכים של המערכת +GenericName[hi]=तंत्र प्रोसेस जानकारी +GenericName[hr]=Podaci o procesima +GenericName[hu]=Folyamatkezelő +GenericName[id]=Informasi Proses Sistem +GenericName[is]=Upplýsingar um kerfisforrit +GenericName[it]=Informazioni sui processi di sistema +GenericName[ja]=システムプロセス情報 +GenericName[ka]=ინფორმაცია სისტემური პროცესების შესახებ +GenericName[kk]=Жүйе процесстер мәліметі +GenericName[km]=ព័ត៌មាន​ដំណើរការ​ប្រព័ន្ធ +GenericName[ko]=시스템 프로세스 정보 +GenericName[lo]=ຂໍ້ມູນໂປຣເຊດຂອງລະບົບ +GenericName[lt]=Sistemos procesų informacija +GenericName[lv]=Sistēmas Procesu Informācija +GenericName[mk]=Информации за системските процеси +GenericName[mn]=Ажиллаж буй програмуудын мэдээлэл +GenericName[ms]=Maklumat Proses Sistem +GenericName[mt]=Informazzjoni dwar proċessi tas-sistema +GenericName[nb]=Informasjon om systemprosesser +GenericName[nds]=Systeemperzess-Informatschoon +GenericName[ne]=प्रणाली प्रक्रिया सूचना +GenericName[nl]=Informatie over systeemprocessen +GenericName[nn]=Informasjon om systemprosessar +GenericName[nso]=Tshedimoso ya Tiragatso ya System +GenericName[pa]=ਸਿਸਟਮ ਕਾਰਜ ਜਾਣਕਾਰੀ +GenericName[pl]=Informacje o systemie +GenericName[pt]=Informações dos Processos do Sistema +GenericName[pt_BR]=Informações sobre processos do sistema +GenericName[ro]=Informații despre procesele sistemului +GenericName[ru]=Сведения о системных процессах +GenericName[rw]=Amakuru y'Igikorwa cya Sisitemu +GenericName[se]=Dieđuid vuogádatproseassaid birra +GenericName[sk]=Informácie o procesoch +GenericName[sl]=Podatki o sistemskih procesih +GenericName[sr]=Информације о системским процесима +GenericName[sr@Latn]=Informacije o sistemskim procesima +GenericName[ss]=Umshini uchuba iminingwane +GenericName[sv]=Information om systemprocesser +GenericName[ta]=சாதன செயல் தகவல் +GenericName[tg]=Барномаи иттилооти система +GenericName[th]=ข้อมูลโปรเซสของระบบ +GenericName[tr]=Sistem Süreç Bilgileri +GenericName[tt]=Sistem Prosessları Turında +GenericName[uk]=Інформація про систему +GenericName[uz]=Tizim vazifalari haqida maʼlumot +GenericName[uz@cyrillic]=Тизим вазифалари ҳақида маълумот +GenericName[ven]=Mafhungo a Tshitenwa tsha Kuitele +GenericName[vi]=Thông tin về các Tiến trình Hệ thống +GenericName[wa]=Informåcion so les bouye do sistinme +GenericName[xh]=Ulwazi Lwendlela Yoqhubekeko +GenericName[zh_CN]=系统进程信息 +GenericName[zh_TW]=系統程序資訊 +GenericName[zu]=Ulwazi Lwenqubo yesistimu +Terminal=true diff --git a/kappfinder/apps/System/Terminal/rxvt.desktop b/kappfinder/apps/System/Terminal/rxvt.desktop new file mode 100644 index 000000000..5b9c6ffa7 --- /dev/null +++ b/kappfinder/apps/System/Terminal/rxvt.desktop @@ -0,0 +1,64 @@ +[Desktop Entry] +GenericName=ouR eXtended Virtual Terminal +GenericName[af]=Uitgebreide Virtuele Terminaal +GenericName[bg]=Разширен виртуален терминал +GenericName[ca]=Terminal virtual ouR eXtended +GenericName[csb]=rxvt - Rozszérzony wirtualny terminal +GenericName[cy]=ein terfynell rhith estynedig +GenericName[da]=ouR eXtended Virtuel Terminal +GenericName[el]=Το δικό μας εκτεταμένο εικονικό τερματικό +GenericName[eo]=Nia pli ampleksigita virtuala terminalo (rxvt) +GenericName[es]=Nuestro terminal virtual extendido +GenericName[eu]=ouR eXtended terminal birtuala +GenericName[fa]=پایانۀ مجازی ouR eXtended +GenericName[gl]=Terminal Virtual Extendida +GenericName[he]=מסוף וירטואלי מורחב +GenericName[hi]=अपनाR बढ़ायाX हुआ आभासीV टर्मिनलT +GenericName[hr]=ouR eXtended (naš prošireni) Virtualni Terminal +GenericName[hu]=Virtuális terminál +GenericName[is]=Okkar góði endurbætti skjáhermir +GenericName[it]=Terminale esteso +GenericName[ka]=გეუმჯობესებული ვირტუალური ტერმინალი +GenericName[kk]=Кеңейтілген виртуалды терминал +GenericName[lo]=ປັບແຕ່ງປະສົມສງງ +GenericName[lv]=ouR paplašinātais virtuālais termināls +GenericName[mn]=ouR eXtended Virtual Терминал +GenericName[ms]=Terminal Maya ouR eXtended +GenericName[nb]=Terminalemulator +GenericName[nds]=Steiht för "ouR eXtended Virtual Terminal" +GenericName[ne]=ouR eXtended अवास्तविक टर्मिनल +GenericName[nn]=Terminalemulator +GenericName[nso]=Terminal ya reNa ye Maatla yeo e oKeditswego +GenericName[pa]=ouR eXtended ਫਰਜ਼ੀ ਟਰਮੀਨਲ +GenericName[pl]=rxvt - Rozszerzony Terminal Wirtualny +GenericName[pt_BR]=Terminal Virtual Estendido +GenericName[ro]=Terminal virtual extins +GenericName[ru]=Расширенный эмулятор терминала +GenericName[rw]=Igihera Kitagaragara Cyaguye Cyacu +GenericName[se]=Terminálemuláhtor +GenericName[sk]=Náš rozšírený virtuálny terminál +GenericName[sl]=Razširjeni navidezni terminal +GenericName[sr]=ouR eXtended Virtual терминал +GenericName[sr@Latn]=ouR eXtended Virtual terminal +GenericName[ss]=Sikhungo selucobo se-ouR eXtended +GenericName[sv]=Vår utökade virtuella terminal +GenericName[ta]=விரிந்த உருவாக்கப்பட்ட சாதனம் +GenericName[tg]=Эмулятори кушоди поёнаи мо +GenericName[th]=เทอร์มินัลเสมือนที่เพิ่มความสามารถของเรา +GenericName[tr]=Geliştirilmiş Sanal Terminal +GenericName[tt]=Xıyalí Terminal (ouR) +GenericName[uk]=Наш покращений віртуальний термінал +GenericName[ven]=Theminala ya mutshini yo lapfiswaho yashu +GenericName[vi]=Trình đầu cuối ảo mở rộng của chúng ta (RXVT) +GenericName[wa]=Terminå forveyou ouR eXtended +GenericName[xh]=ouR eXtended Isiphelo sendlela Esingabonakaliyo +GenericName[zh_CN]=我们扩展的虚拟终端 +GenericName[zh_TW]=我們的延伸式虛擬終端機 +GenericName[zu]=Ithuluzi langaphandle Langamanga Lethu Elinwetshiwe +Exec=rxvt +Icon=konsole +Name=RXVT +Name[hi]=आरएक्सवीटी +Name[lo]=ສຸວັນທອງ +Name[te]=ఆర్ ఎక్స్ వి టి +Type=Application diff --git a/kappfinder/apps/System/Terminal/vmstat.desktop b/kappfinder/apps/System/Terminal/vmstat.desktop new file mode 100644 index 000000000..7a4e81331 --- /dev/null +++ b/kappfinder/apps/System/Terminal/vmstat.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Exec=vmstat 2 +Icon= +Type=Application +Name=Vmstat +Name[de]=VM-Stat +Name[eo]=Memorostatistiko +Name[hi]=वीएमस्टेट +Name[lo]=ສະຖິຕິຄວາມຈຳສະເຫມືອນ +Name[mn]=VM-Stat +Name[te]=విఎం స్టాట్ +Name[th]=สถิติความจำเสมือน +GenericName=Virtual Memory Statistics +GenericName[af]=Virtuele Geheue Statistieke +GenericName[ar]=احصاءات الذاكرة الوهمية +GenericName[az]=Virtual Yaddaş Statistikaları +GenericName[be]=Статыстыка віртуальнай памяці +GenericName[bg]=Статистика на виртуалната памет +GenericName[bn]=ভার্চুয়াল মেমরি পরিসংখ্যান +GenericName[br]=Stadegoù war ar vemor c'halloudel +GenericName[bs]=Statistika virtualne memorije +GenericName[ca]=Estadístiques de la memòria virtual +GenericName[cs]=Statistika virtuální paměti +GenericName[csb]=Statistika wirtualny pamiãce +GenericName[cy]=Ystadegau C?f Rhith +GenericName[da]=Virtuel hukommelsesstatistik +GenericName[de]=Statistik zum virtuellen Speicher +GenericName[el]=Στατιστικά εικονικής μνήμης +GenericName[eo]=Statistiko pri la uzo de virtuala memoro +GenericName[es]=Estadísticas de memoria virtual +GenericName[et]=Virtuaalmälu statistika +GenericName[eu]=Memoria birtualaren estatistikak +GenericName[fa]=آمار حافظۀ مجازی +GenericName[fi]=Virtuaalimuistin tilastot +GenericName[fr]=Statistiques sur la mémoire virtuelle +GenericName[fy]=Statistyken firtuele ûnthâld +GenericName[ga]=Staitisticí na Cuimhne Fíorúil +GenericName[gl]=Estatísticas da Memória Virtual +GenericName[he]=סטטיסטיקה לגבי הזיכרון הווירטואלי +GenericName[hi]=आभासी मेमोरी आंकड़े +GenericName[hr]=Statistike o virtualnoj memoriji +GenericName[hu]=Memóriastatisztika +GenericName[is]=Upplýsingar um sýndarminni +GenericName[it]=Statistiche memoria virtuale +GenericName[ja]=仮想メモリ統計 +GenericName[ka]=ვირტუალური მეხსიერების სტატისტიკა +GenericName[kk]=Виртуалды жад мәліметі +GenericName[km]=ស្ថិតិ​សតិ​និម្មិត +GenericName[ko]=가상 메모리 통계 +GenericName[lo]=ສະຖິຕິຂອງຫນ່ວຍຄວາມຈຳສະເຫມືອນ +GenericName[lt]=Virtualios atminties statistika +GenericName[lv]=Virtuālās Atmiņas Statistika +GenericName[mk]=Статистика на виртуелната меморија +GenericName[mn]=Виртуал санах ойн статистик +GenericName[ms]=Statistik Memory Maya +GenericName[mt]=Statistika dwar memorja virtwali +GenericName[nb]=Statistikk over virtuelt minne +GenericName[nds]=Statistik för den virtuellen Spieker +GenericName[ne]=अवास्तविक स्मृति तथ्याङ्क +GenericName[nl]=Statistieken virtueel geheugen +GenericName[nn]=Statistikk over virtuelt minne +GenericName[nso]=Dipalopalo tsa Kelelo ye Maatla +GenericName[pa]=ਵਰਚੁਅਲ ਮੈਮੋਰੀ ਅੰਕੜੇ +GenericName[pl]=Statystyka pamięci wirtualnej +GenericName[pt]=Estatísticas da Memória Virtual +GenericName[pt_BR]=Estatísticas sobre a Memória Virtual +GenericName[ro]=Statistici despre memoria virtuală +GenericName[ru]=Сведения о виртуальной памяти +GenericName[rw]=Sitatisitiki z'Umwanyabubiko Butagaragara +GenericName[se]=Virtuella muittu statistihkka +GenericName[sk]=Štatistika virtuálnej pamäti +GenericName[sl]=Statistika navideznega pomnilnika +GenericName[sr]=Статистике виртуелне меморије +GenericName[sr@Latn]=Statistike virtuelne memorije +GenericName[ss]=Sibalo senkhumbulo yelucobo +GenericName[sv]=Virtuell minnesstatistik +GenericName[ta]=நினைவக அமைப்பின் புள்ளி விவரங்கள் +GenericName[tg]=Омори хотираи миҷозӣ +GenericName[th]=สถิติของหน่วยความจำเสมือน +GenericName[tr]=Sanal Bellek İstatistikleri +GenericName[tt]=Xıyalí Xäter Nöfüse +GenericName[uk]=Статистика віртуальної пам'яті +GenericName[uz]=Virtual xotira statistikasi +GenericName[uz@cyrillic]=Виртуал хотира статистикаси +GenericName[ven]=Tsedzuluso dza Kuhumbulele +GenericName[vi]=Thống kê Bộ nhớ Ảo +GenericName[wa]=Sitatistikes di forveyowe memwere +GenericName[xh]=Izitatistiki Zobume Benkumbulo +GenericName[zh_CN]=虚拟内存统计 +GenericName[zh_TW]=虛擬記憶體統計 +GenericName[zu]=Isitathistiki senkumbulo yangamanga +Terminal=true diff --git a/kappfinder/apps/System/citrix_ica.desktop b/kappfinder/apps/System/citrix_ica.desktop new file mode 100644 index 000000000..c384abdac --- /dev/null +++ b/kappfinder/apps/System/citrix_ica.desktop @@ -0,0 +1,161 @@ +[Desktop Entry] +Name=Citrix ICA Client +Name[af]=Citrix ICA Kliënt +Name[ar]=زبون Citrix ICA +Name[az]=Citrix ICA Alıcısı +Name[be]=Кліент Citrix ICA +Name[bn]=সাইট্রিক্স ICA ক্লায়েন্ট +Name[br]=Pratik Citrix ICA +Name[bs]=Citrix ICA klijent +Name[ca]=Client Citrix ICA +Name[cs]=Citrix ICA klient +Name[csb]=Klient Citrix ICA +Name[cy]=Dibynnydd Citrix ICA +Name[da]=Citrix ICA klient +Name[de]=Citrix ICA-Client +Name[el]=Πελάτης Citrix ICA +Name[eo]=Citrix ICA kliento +Name[es]=Cliente Citrix ICA +Name[et]=Citrix ICA klient +Name[eu]=Citrix ICA bezeroa +Name[fa]=کارخواه Citrix ICA +Name[fi]=Citrix ICA -asiakas +Name[fr]=Client Citrix ICA +Name[fy]=Citrix ICA-klant +Name[ga]=Cliant ICA Citrix +Name[gl]=Cliente de Citrix ICA +Name[he]=לקוח Citrix ICA +Name[hi]=साइट्रिक्स आईसीए क्लाएंट +Name[hr]=Citrix ICA klijent +Name[hu]=Citrix ICA kliens +Name[it]=Client Citrix ICA +Name[ja]=Citrix ICA クライアント +Name[ka]=Citrix ICA–ს კლიენტი +Name[kk]=Citrix ICA клиенті +Name[km]=កម្មវិធី Citrix ICA +Name[ko]=Citrix ICA 클라이언트 +Name[lo]=ໄຄລແອນ Alarm +Name[lv]=Citrix ICA Klients +Name[mk]=Клиент за Citrix ICA +Name[mn]=Citrix ICA-Client +Name[ms]=Pelanggan Citrix ICA +Name[mt]=Klijent Citrix ICA +Name[nds]=Citrix ICA-Client +Name[ne]=सिट्रिक्स ICA ग्राहक +Name[nl]=Citrix ICA-client +Name[nn]=Citrix ICA-klient +Name[nso]=Moreki wa Citrix ICA +Name[pa]=Citrix ICA ਕਲਾਂਈਟ +Name[pl]=Klient Citrix ICA +Name[pt]=Cliente do ICA da Citrix +Name[pt_BR]=Cliente Citrix ICA +Name[ro]=Client Citrix ICA +Name[ru]=Клиент Citrix ICA +Name[rw]=Umukiriya Citrix ICA +Name[se]=Citrix ICA-klienta +Name[sk]=Citrix ICA klient +Name[sl]=Odjemalec Citrix ICA +Name[sr]=Citrix ICA клијент +Name[sr@Latn]=Citrix ICA klijent +Name[ss]=Likhasimende le Citrix ICA +Name[sv]=Citrix ICA-klient +Name[ta]=சிட்ரிக்ஸ் ICA உறுப்பினர் +Name[te]=సిట్రిక్స్ ఐసిఎ క్లైంట్ +Name[tg]=Коргири Citrix ICA +Name[th]=ไคลเอนต์ ICA ของ Citrix +Name[tr]=Citrix ICA İstemcisi +Name[uk]=Клієнт Citrix ICA +Name[uz]=Citrix ICA klienti +Name[uz@cyrillic]=Citrix ICA клиенти +Name[ven]=Mushumisani wa Citrix ICA +Name[vi]=Trình Citrix ICA +Name[wa]=Cliyint ICA Citrix +Name[xh]=Citrix Umxhasi we ICA +Name[zh_CN]=Citrix ICA 客户程序 +Name[zh_TW]=Citrix ICA 客戶端程式 +Name[zu]=Umxhasi we-Citrix ICA +GenericName=WTS Client +GenericName[af]=WTS Kliënt +GenericName[ar]=زبون WTS +GenericName[az]=WTS Alıcısı +GenericName[be]=Кліент WTS +GenericName[bg]=WTS клиент +GenericName[bn]=WTS ক্লায়েন্ট +GenericName[br]=Kliant UTS +GenericName[bs]=WTS klijent +GenericName[ca]=Client WTS +GenericName[cs]=WTS klient +GenericName[csb]=Klient WTS +GenericName[cy]=Dibynnydd WTS +GenericName[da]=WTS-klient +GenericName[de]=WTS-Programm +GenericName[el]=Πελάτης WTS +GenericName[eo]=WTS-kliento +GenericName[es]=Cliente WTS +GenericName[et]=WTS klient +GenericName[eu]=WTS bezeroa +GenericName[fa]=کارخواه WTS +GenericName[fi]=WTS-asiakas +GenericName[fr]=Un client WTS +GenericName[fy]=WTS-klant +GenericName[ga]=Cliant WTS +GenericName[gl]=Cliente de WTS +GenericName[he]=לקוח WTS +GenericName[hi]=डब्ल्यूटीएस क्लाएंट +GenericName[hr]=WTS klijent +GenericName[hu]=WTS-kliens +GenericName[it]=Client WTS +GenericName[ja]=WTS クライアント +GenericName[ka]=WTS კლიენტი +GenericName[kk]=WTS клиенті +GenericName[km]=កម្មវិធី WTS +GenericName[ko]=WTS 클라이언트 +GenericName[lo]=ໄຄລແອນ FTP +GenericName[mk]=Клиент за WTS +GenericName[mn]=WTS-програм +GenericName[ms]=Pelanggan WTS +GenericName[mt]=Klijent WTS +GenericName[nb]=WTS-klient +GenericName[nds]=Client för WTS +GenericName[ne]=WTS ग्राहक +GenericName[nl]=WTS-client +GenericName[nn]=WTS-klient +GenericName[nso]=Moreki wa WTS +GenericName[pa]=WTS ਕਲਾਂਈਟ +GenericName[pl]=Klient WTS +GenericName[pt]=Cliente de WTS +GenericName[pt_BR]=Cliente WTS +GenericName[ro]=Client de Windows Terminal Server +GenericName[ru]=Клиент WTS +GenericName[rw]=Umukiriya WTS +GenericName[se]=WTS-klienta +GenericName[sk]=WTS klient +GenericName[sl]=Odjemnik za WTS +GenericName[sr]=WTS клијент +GenericName[sr@Latn]=WTS klijent +GenericName[ss]=Likhasimende le WTS +GenericName[sv]=WTS-klient +GenericName[ta]=WTS உறுப்பினர் +GenericName[te]=డబ్ల్యు టి ఎస్ క్లైంట్ +GenericName[tg]=Коргири WTS +GenericName[th]=ไคลเอนต์ WTS +GenericName[tr]=WTS İstemcisi +GenericName[tt]=WTS Klient +GenericName[uk]=Клієнт WTS +GenericName[uz]=WTS klienti +GenericName[uz@cyrillic]=WTS клиенти +GenericName[ven]=Mushumisani wa WTS +GenericName[vi]=Trình WTS +GenericName[wa]=Cliyint WTS +GenericName[xh]=Umxhasi we WTS +GenericName[zh_CN]=WTS 客户端程序 +GenericName[zh_TW]=WTS 客戶端程式 +GenericName[zu]=Umxhasi we-WTS +Exec=wfica %f +Icon=terminal +MimeType=application/x-ica +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false +X-StandardInstall=true diff --git a/kappfinder/apps/System/editres.desktop b/kappfinder/apps/System/editres.desktop new file mode 100644 index 000000000..60a85482a --- /dev/null +++ b/kappfinder/apps/System/editres.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=EditXRes +Name[af]=RedigeerXRes +Name[csb]=Editora dostónków XWindow +Name[cy]=GolyguXRes +Name[eo]=Aspektoredaktilo +Name[fr]=EditRes +Name[hi]=एडिट-एक्स-रेस +Name[lo]=ແກ້ໄຂການສະແດງຜົນ X +Name[ne]=सम्पादन XRes +Name[nso]=XRes ya Phetoso +Name[pl]=Edytor zasobów XWindow +Name[sv]=Editxres +Name[te]=ఎడిట్ ఎక్స్ రెస్ +Name[th]=แก้ไขการแสดงผล X +Name[ven]=SengulusaXRes +GenericName=X Resource Editor +GenericName[af]=X Hulpbron Redigeerder +GenericName[ar]=محرر موارِد X +GenericName[az]=X Mənbə Editoru +GenericName[be]=Рэдактар рэсурсаў X +GenericName[bg]=Редактор на X ресурс +GenericName[bn]=এক্স রিসোর্স সম্পাদক +GenericName[bs]=X editor resursa +GenericName[ca]=Editor de recursos X +GenericName[csb]=Editora dostónków XWindow +GenericName[cy]=Golygydd Adnoddau X +GenericName[da]=X-ressource-editor +GenericName[de]=X-Ressourcen-Editor +GenericName[el]=Επεξεργαστής πόρων των X +GenericName[eo]=X-rimedoj, t.e. stiloj de fenestroj ktp. +GenericName[es]=Editor X de recursos +GenericName[et]=X'i resursside redaktor +GenericName[eu]=X Resource editorea +GenericName[fa]=ویرایشگر منبع X +GenericName[fi]=X-resurssimuokkain +GenericName[fr]=Éditeur de ressources X-Window +GenericName[fy]=X-helpboarnebewurker +GenericName[ga]=Eagarthóir na nAcmhainní X +GenericName[gl]=Editor de Recursos das X +GenericName[he]=עורך משאבים של X +GenericName[hi]=एक्स रिसोर्स संपादक +GenericName[hr]=Uređivač X resursa +GenericName[hu]=X-erőforrás-szerkesztő +GenericName[id]=Penyunting Sumber Daya X +GenericName[is]=X auðlindaritill +GenericName[it]=Editor di risorse X +GenericName[ja]=X リソースエディタ +GenericName[ka]=X რესურსების რედაქტორი +GenericName[kk]=X ресурс редакторы +GenericName[km]=កម្មវិធី​និពន្ធ​ធនធាន X +GenericName[ko]=X 리소스 편집기 +GenericName[lo]=ເຄືອ່ງມືແກ້ໄຂX +GenericName[lt]=X resursų redaktorius +GenericName[lv]=X Resursu Redaktors +GenericName[mk]=Уредувач на X-ресурси +GenericName[mn]=X-Нөөц-Боловсруулагч +GenericName[ms]=Editor Sumber X +GenericName[mt]=Editur tar-riżorsi X +GenericName[nb]=X-ressursredigering +GenericName[nds]=Editor för X-Ressourcen +GenericName[ne]=X संसाधन सम्पादक +GenericName[nl]=X-hulpbroneditor +GenericName[nn]=X-ressursredigering +GenericName[nso]=Mofetosi wa Setsweletswa sa X +GenericName[pa]=X ਸਰੋਤ ਸੰਪਾਦਕ +GenericName[pl]=Edytor zasobów XWindow +GenericName[pt]=Editor de Recursos do X +GenericName[pt_BR]=Editor de recursos do X +GenericName[ro]=Editor de resurse X +GenericName[ru]=Редактор ресурсов X +GenericName[rw]=Muhinduzi w'Ibikorana X +GenericName[se]=X-resursadoaimmaheaddji +GenericName[sk]=Editor zdrojov X +GenericName[sl]=Urejevalnik virov za X +GenericName[sr]=Уређивач X ресурса +GenericName[sr@Latn]=Uređivač X resursa +GenericName[ss]=Umhleli we X Resource +GenericName[sv]=X resurseditor +GenericName[ta]=X மூலத்தை திருத்துபவர் +GenericName[tg]=Муҳаррири захираи X +GenericName[th]=เครื่องมือแก้ไขทรัพยากร X +GenericName[tr]=X Kaynak Düzenleyicisi +GenericName[tt]=X Resurslar Tözätkeçe +GenericName[uk]=Редактор ресурсів X +GenericName[uz]=X imkoniyatlarini tahrirchi +GenericName[uz@cyrillic]=X имкониятларини таҳрирчи +GenericName[ven]=Musengulusi tshishumiswa tsha X +GenericName[vi]=Trình biên soạn Tài nguyên X +GenericName[wa]=Aspougneu d' rissource X +GenericName[xh]=Umhleli Wecebo le X +GenericName[zh_CN]=X 资源编辑器 +GenericName[zh_TW]=X 資源編輯器 +Exec=editres +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/System/sam.desktop b/kappfinder/apps/System/sam.desktop new file mode 100644 index 000000000..059b0c8f8 --- /dev/null +++ b/kappfinder/apps/System/sam.desktop @@ -0,0 +1,88 @@ +[Desktop Entry] +Name=SAM System-Administration +Name[af]=SAM Stelsel Administrasie +Name[ar]=مدير النظام SAM +Name[az]=SAM Sistem İdarəsi +Name[be]=Сістэмнае адміністраванне SAM +Name[bn]=স্যাম সিস্টেম-অ্যাডমিনস্ট্রেশন +Name[br]=Melestradur ar reizhiad SAM +Name[bs]=SAM administracija sistema +Name[ca]=Administració del sistema SAM +Name[cs]=Správce systému SAM +Name[csb]=SAM - Sprôwianié systemë +Name[cy]=Gweinyddiaith Cysawd SAM +Name[da]=SAM-systemadministration +Name[de]=SAM-Systemverwaltung +Name[el]=SAM διαχείριση-συστήματος +Name[eo]=SAM Sistemadministrilo +Name[es]=Administración del sistema SAM +Name[et]=SAM süsteemi administreerimine +Name[eu]=SAM sistema kudeaketa +Name[fa]=سرپرست سیستم SAM +Name[fi]=SAM-järjestelmänhallinta +Name[fr]=Administration système SAM +Name[fy]=SAM systeembehear +Name[ga]=Riar Córais SAM +Name[gl]=Administración do Sistema SAM +Name[he]=ניהול המערכת - SAM +Name[hi]=एसएएम तंत्र प्रशासक +Name[hr]=SAM administracija sustava +Name[hu]=SAM rendszeradminisztráció +Name[id]=SAM Administrasi-Sistem +Name[is]=SAM kerfisstjórnun +Name[it]=Amministrazione di sistema SAM +Name[ja]=SAM システム管理 +Name[ka]=SAM–ის სიტემური ადმინისტრირება +Name[kk]=SAM жүйе әкімшілігі +Name[km]=គ្រប់គ្រង​ប្រព័ន្ធ SAM +Name[ko]=SAM 시스템 관리 +Name[lo]=SAM - ສຳຫລັບຜູ້ເບິ່ງແຍງລະບົບ +Name[lt]=SAM Sistemos-Administravimas +Name[lv]=SAM Sistēmas Administrācija +Name[mk]=SAM системска администрација +Name[mn]=SAM-Систем-Зохион байгуулалт +Name[ms]=Pentadbir Sistem SAM +Name[mt]=Amministrazzjoni tas-Sistema SAM +Name[nb]=SAM systemadministrasjon +Name[nds]=SAM Systeem-Pleeg +Name[ne]=SAM प्रणाली-प्रशासन +Name[nl]=SAM systeembeheer +Name[nn]=SAM systemadministrasjon +Name[nso]=Bongwaledi bja System ya SAM +Name[oc]=Administracion dèu sistemo SAM +Name[pa]=SAM ਸਿਸਟਮ-ਪਰਸ਼ਾਸ਼ਕ +Name[pl]=SAM - Administracja systemu +Name[pt]=Administração de Sistema SAM +Name[pt_BR]=SAM Administração do Sistema +Name[ro]=Administrare de sistem SAM +Name[ru]=Системное администрирование SAM +Name[rw]=Ubugenzuzi-Sisitemu SAM +Name[se]=SAM vuogádathálddašeapmi +Name[sk]=Systémový Administrátor +Name[sl]=Sistemsko upravljanje SAM +Name[sr]=SAM администрација система +Name[sr@Latn]=SAM administracija sistema +Name[ss]=Umcondzisi wemshini we SAM +Name[sv]=SAM systemadministration +Name[ta]=SAM சாதன-நிர்வாகி +Name[tg]=Мудири системаи SAM +Name[th]=SAM - การดูแลระบบ +Name[tr]=SAM Sistem Yönetimi +Name[tt]=SAM Sistem İdäräse +Name[uk]=Менеджер системи SAM +Name[uz]=SAM - tizimni boshqarish +Name[uz@cyrillic]=SAM - тизимни бошқариш +Name[ven]=Kulangulele kwa sisitemu ya SAM +Name[vi]=Quản trị Hệ thống SAM +Name[wa]=Manaedjmint do sistinme SAM +Name[xh]=SAM Umphathi Wendlela yokusebenza +Name[zh_CN]=SAM 系统管理 +Name[zh_TW]=SAM 系統管理 +Name[zu]=Ukugcinwa kwesisitimu kwe-SAM +MimeType= +Exec=sam +Icon=log +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/System/wine.desktop b/kappfinder/apps/System/wine.desktop new file mode 100644 index 000000000..ab77a5eee --- /dev/null +++ b/kappfinder/apps/System/wine.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Exec=wine %f +Name=Wine +Name[bn]=ওয়াইন +Name[hi]=वाइन +Name[lo]=ເຄືອ +Name[ne]=रक्सी +Name[pa]=ਵਾਈਨ +Name[rw]=Divayi +Name[ss]=Iwayini +Name[ta]=வைன் +Name[te]=వైన్ +Name[ven]=Veini +Name[zu]=Iwayini +GenericName=Run Windows Programs +GenericName[af]=Hardloop Windows Programme +GenericName[az]=Windows Proqramlarını İşə Salın +GenericName[be]=Выконвае праграмы для Windows +GenericName[bg]=Изпълнение на програми за Windows +GenericName[bn]=উইণ্ডোস প্রোগ্রাম চালান +GenericName[br]=Seveniñ meziantoù Windows +GenericName[bs]=Pokretanje Windows programa +GenericName[ca]=Engega programes de Windows +GenericName[cs]=Provozujte programy z Windows +GenericName[csb]=Zrësziwô programë dlô Windowsa +GenericName[cy]=Rhedeg Rhaglenni Windows +GenericName[da]=Kører Windows programmer +GenericName[de]=Windows-Programme ausführen +GenericName[el]=Εκτέλεση προγραμμάτων Windows +GenericName[eo]=Lanĉi Vindozajn Programojn +GenericName[es]=Ejecución de programas de Windows +GenericName[et]=Windowsi rakenduste käivitamine +GenericName[eu]=Windows programak abiarazten ditu +GenericName[fa]=اجرای برنامه‌های ویندوز +GenericName[fi]=Käytä Windows-ohjelmia +GenericName[fr]=Fait fonctionner des programmes Windows +GenericName[fy]=Windows-programma's útfiere +GenericName[ga]=Rith Feidhmchláir Windows +GenericName[gl]=Executar Programas de Windows +GenericName[he]=הפעלת תוכניות של Windows +GenericName[hi]=विंडो प्रोग्राम चलाए +GenericName[hr]=Pokretanje Windows programa +GenericName[hu]=Windows-emulátor +GenericName[id]=Menjalankan Program Windows +GenericName[is]=Keyra Windows forrit +GenericName[it]=Esecuzione programmi Windows +GenericName[ja]=Windows プログラム実行 +GenericName[ka]=Windows–ს პროგრამების გაშვება +GenericName[kk]=Windows бағдарламаларды орындау +GenericName[km]=រត់​កម្មវិធី Windows +GenericName[ko]=윈도 프로그램 실행 +GenericName[lo]=ໂປຣແກຣມວາດພາບທຳມະດາ +GenericName[lt]=Leisti Windows programas +GenericName[lv]=Darbināt Windows programmas +GenericName[mk]=Извршувајте Windows-програми +GenericName[mn]=Виндовсын-Програм ажиллуулах +GenericName[ms]=Jalankan Program Tetingkap +GenericName[mt]=Ħaddem programmi tal-Windows +GenericName[nb]=Kjør Windows-programmer +GenericName[nds]=Windows-Programmen utföhren +GenericName[ne]=विन्डोज कार्यक्रमहरू चलाउनुहोस् +GenericName[nl]=Windows-programma's uitvoeren +GenericName[nn]=Køyr Windows-program +GenericName[nso]=Tsamaisa Mananeo a di-Window +GenericName[pa]=ਵਿੰਡੋ(Windows) ਦੇ ਪਰੋਗਰਾਮ ਚਲਾਓ +GenericName[pl]=Środowisko do uruchamiania programów Windows +GenericName[pt]=Executar Programas de Windows +GenericName[pt_BR]=Executar Programas do Windows +GenericName[ro]=Rulează programe de Windows +GenericName[ru]=Выполнение программ Windows +GenericName[rw]=Gutangiza Amaporogaramu Windows +GenericName[se]=Vuoje Windows-prográmmaid +GenericName[sk]=Beh aplikácií Windows +GenericName[sl]=Poganjanje programov za Windows +GenericName[sr]=Покретање Windows програма +GenericName[sr@Latn]=Pokretanje Windows programa +GenericName[ss]=Sebentisa tinhlelo tasemawindini +GenericName[sv]=Kör Windows-program +GenericName[ta]=சாளர நிரலிகளை இயக்கு +GenericName[tg]=Иҷрои барномаҳои Windows +GenericName[th]=ประมวลผลโปรแกรมของวินโดว์ส +GenericName[tr]=Windows Programlarını Çalıştır +GenericName[tt]=Windows Yızılımnarın Eşlätü +GenericName[uk]=Запуск програм Windows +GenericName[uz]=Windows dasturlarini ishga tushirish +GenericName[uz@cyrillic]=Windows дастурларини ишга тушириш +GenericName[ven]=Mbekanyamushumo yau tshimbidza dziwindow +GenericName[vi]=Chạy các Chương trình Giao diện cửa sổ +GenericName[wa]=Po-z enonder des programes Windows +GenericName[xh]=Sebenzisa Udweliso lweenkqubo lwe Windows +GenericName[zh_CN]=运行 Windows 程序 +GenericName[zh_TW]=執行 Windows 程式 +GenericName[zu]=Sebenzisa izinhlelo zemisebenzi zama-WIndow +Icon=wine +Type=Application +MimeType=application/x-msdos-program +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/System/xosview.desktop b/kappfinder/apps/System/xosview.desktop new file mode 100644 index 000000000..8bd7e8876 --- /dev/null +++ b/kappfinder/apps/System/xosview.desktop @@ -0,0 +1,108 @@ +[Desktop Entry] +Name=X osview +Name[de]=X-osview +Name[eo]=XOperaciumrigardo +Name[es]=Xosview +Name[fr]=XOSView +Name[hi]=एक्स-ओएसव्यू +Name[id]=X osviw +Name[is]=X kerfisástand +Name[ka]=Xosview +Name[lo]=ສະຖານະລະບົບປະຕິບັດການເທິງ X +Name[mn]=X-osview +Name[nb]=X-systemovervåking +Name[nds]=X-osview +Name[nn]=X-systemovervaking +Name[pa]=X os-ਝਲਕ +Name[ru]=Xosview +Name[rw]=X Igaragaza-os +Name[se]=X-vuogádatgoziheapmi +Name[te]=ఎక్స్ ఒఎస్ వ్యు +Name[th]=สถานะระบบปฏิบัติการบน X +MimeType= +GenericName=System Monitor +GenericName[af]=Stelsel Monitor +GenericName[ar]=مراقب النظام +GenericName[az]=Sistem İzləyici +GenericName[be]=Сістэмны назіральнік +GenericName[bg]=Мониторинг на системата +GenericName[bn]=সিস্টেম মনিটর +GenericName[br]=Diskwel saviad ar reizhiad +GenericName[bs]=Monitor sistema +GenericName[ca]=Monitor del sistema +GenericName[cs]=Monitor systému +GenericName[csb]=Mònitor systemë +GenericName[cy]=Monitr Cysawd +GenericName[da]=Systemovervågningsprogram +GenericName[de]=Systemmonitor +GenericName[el]=Επόπτης συστήματος +GenericName[eo]=Sistemstato-programo +GenericName[es]=Monitor del sistema +GenericName[et]=Süsteemi monitor +GenericName[eu]=Sistemaren monitorea +GenericName[fa]=نمایشگر سیستم +GenericName[fi]=Järjestelmänvalvontaohjelma +GenericName[fr]=Indicateurs du système +GenericName[fy]=Systeemmonitor +GenericName[ga]=Monatóir Córais +GenericName[gl]=Monitor do Sistema +GenericName[he]=צג מערכת +GenericName[hi]=तंत्र मॉनीटर +GenericName[hr]=Nadzor sustava +GenericName[hu]=Rendszermonitor +GenericName[id]=Monitor Sistem +GenericName[is]=Kerfiseftirlit +GenericName[it]=Monitor di sistema +GenericName[ja]=システムモニタ +GenericName[ka]=სისტემის მონიტორი +GenericName[kk]=Жүйе мониторы +GenericName[km]=កម្មវិធី​ត្រួតពិនិត្យ​ប្រព័ន្ធ +GenericName[ko]=시스템 모니터 +GenericName[lo]=ກວດກາການທຳງານຂອງລະບົບ +GenericName[lt]=Sistemos stebėtojas +GenericName[lv]=Sistēmas Monitors +GenericName[mk]=Системски монитор +GenericName[mn]=Систем хянагч +GenericName[ms]=Monitor Sistem +GenericName[nb]=Systemovervåker +GenericName[nds]=Systeemkieker +GenericName[ne]=प्रणाली मनिटर +GenericName[nl]=Systeemmonitor +GenericName[nn]=Systemovervakar +GenericName[nso]=Mohlokomedi wa System +GenericName[oc]=Monitor dèu sistemo +GenericName[pa]=ਸਿਸਟਮ ਨਿਗਰਾਨ +GenericName[pl]=Monitor systemu +GenericName[pt]=Monitor do Sistema +GenericName[pt_BR]=Monitor do sistema +GenericName[ro]=Monitor de sistem +GenericName[ru]=Системный монитор +GenericName[rw]=Mugaragaza Sisitemu +GenericName[se]=Vuogádatgoziheaddji +GenericName[sk]=Monitor systému +GenericName[sl]=Sistemski nadzornik +GenericName[sr]=Системски монитор +GenericName[sr@Latn]=Sistemski monitor +GenericName[ss]=Umlawuli wemshini +GenericName[sv]=Systemövervakare +GenericName[ta]=சாதன திரை +GenericName[tg]=Назорати Система +GenericName[th]=สอดส่องการทำงานของระบบ +GenericName[tr]=Sistem İzleyici +GenericName[tt]=Sistem Küzätüçe +GenericName[uk]=Монітор системи +GenericName[uz]=Tizimni nazorat qilish +GenericName[uz@cyrillic]=Тизимни назорат қилиш +GenericName[ven]=Mugadi wa sisitemu +GenericName[vi]=Trình theo dõi Hệ thống +GenericName[wa]=Corwaitoe do sistinme +GenericName[xh]=Indlela yokusebenza Yophatho +GenericName[zh_CN]=系统监视器 +GenericName[zh_TW]=系統監視器 +GenericName[zu]=I-Monitor yesistimu +Exec=xosview +Icon=log +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Utilities/Editors/Makefile.am b/kappfinder/apps/Utilities/Editors/Makefile.am new file mode 100644 index 000000000..9beb23e05 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/Makefile.am @@ -0,0 +1,7 @@ +kappfinder_editors_data_DATA = emacs.desktop gvim.desktop lemacs.desktop \ + xedit.desktop xemacs.desktop nedit.desktop \ + gedit.desktop pico.desktop nano.desktop + +kappfinder_editors_datadir = $(kde_datadir)/kappfinder/apps/Utilities/Editors + +EXTRA_DIST = $(kappfinder_editors_data_DATA) diff --git a/kappfinder/apps/Utilities/Editors/emacs.desktop b/kappfinder/apps/Utilities/Editors/emacs.desktop new file mode 100644 index 000000000..6b8d315ff --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/emacs.desktop @@ -0,0 +1,96 @@ +[Desktop Entry] +Name=Emacs +Name[bn]=ইম্যাক্স +Name[eo]=Emakso +Name[hi]=ईमेक्स +Name[ne]=इमाक्स +Name[te]=ఈమెక్స్ +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=emacs %f +Icon=emacs +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false +X-StandardInstall=true diff --git a/kappfinder/apps/Utilities/Editors/gedit.desktop b/kappfinder/apps/Utilities/Editors/gedit.desktop new file mode 100644 index 000000000..d4e745321 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/gedit.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=gEdit +Name[af]=G-redigeer +Name[bn]=জি-এডিট +Name[ca]=Editor de diàlegs +Name[fr]=GEdit +Name[hi]=जी-एडिट +Name[ne]=जी इडिट +Name[pa]=ਜੀ-ਸੰਪਾਦਕ +Name[rw]=gGuhindura +Name[sv]=Gedit +Name[ta]=gதொகுப்பி +Name[te]=జిఎడిట్ +Name[tg]=gМуҳаррир +Name[ven]=Sengulusa ha g +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +Exec=gedit %f +Terminal=false +Icon=gedit +Type=Application diff --git a/kappfinder/apps/Utilities/Editors/gvim.desktop b/kappfinder/apps/Utilities/Editors/gvim.desktop new file mode 100644 index 000000000..f2b694347 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/gvim.desktop @@ -0,0 +1,124 @@ +[Desktop Entry] +Name=Vi IMproved +Name[af]=Vi Verbeterde +Name[ar]=Vi محسّن +Name[bn]=ভি-আই উন্নত +Name[br]=Vi gwellaet +Name[ca]=Vi millorat +Name[csb]=Pòprôwiony VI (vim) +Name[cy]=VIM (Vi wedi'i wella) +Name[da]=Vi IMproved (Vi forbedret) +Name[eo]=VIM +Name[hi]=वीआई इम्प्रूव्ड +Name[hu]=VIM +Name[is]=Vi endurbættur (vim) +Name[it]=Vi iMproved +Name[mn]=Сайжирсан Vi +Name[nso]=KAonafaditswe ka Vi +Name[oc]=VI aMillorat +Name[pl]=Poprawiony VI (vim) +Name[pt_BR]=Vi melhorado +Name[ru]=VIM +Name[rw]=Vi Ivuguruwe +Name[sl]=Izboljšani vi (vim) +Name[sv]=Förbättrad Vi +Name[ta]=Vi மேம்படுத்தப்பட்ட +Name[te]=విఐ ఇంప్రూవ్డ్ +Name[tg]=Vi пешрафт кардаи VIM +Name[th]=VI IMprove +Name[uz]=Yaxshilangan Vi +Name[uz@cyrillic]=Яхшиланган Vi +Name[ven]=Vi Khwinifhadzhwa +Name[vi]=Vi Cải tiến +Name[wa]=VIM +Name[zh_CN]=改进的 VI (VIM) +Name[zh_TW]=VIM +Name[zu]=I-Vi yenziwe ngcono +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=gvim -f %f +Icon=gvim +Type=Application +Terminal=false +X-KDE-StartupNotify=true +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/apps/Utilities/Editors/lemacs.desktop b/kappfinder/apps/Utilities/Editors/lemacs.desktop new file mode 100644 index 000000000..fb8f0b620 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/lemacs.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=Lucid Emacs +Name[bn]=লুসিড ইম্যাক্স +Name[cy]=Emacs Eglur +Name[eo]=L-Emakso +Name[hi]=ल्यूसिड ईमेक्स +Name[ne]=लुसिड इमाक्स +Name[rw]=Emacs Icyeye +Name[ss]=Ema-Emac lacacile +Name[ta]=லூசிட் எமாக்ஸ் +Name[te]=లూసిడ్ ఈమెక్స్ +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=lemacs %f +Icon=emacs +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/apps/Utilities/Editors/nano.desktop b/kappfinder/apps/Utilities/Editors/nano.desktop new file mode 100644 index 000000000..6d7ec8af8 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/nano.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Name=Nano +Name[bn]=ন্যানো +Name[hi]=नेनो +Name[lo]=ສຸ່ມ +Name[ne]=नानो +Name[ta]=நானோ +Name[te]=నెనొ +Name[tg]=Нано +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +Exec=nano +Terminal=true +Icon=nano +Type=Application diff --git a/kappfinder/apps/Utilities/Editors/nedit.desktop b/kappfinder/apps/Utilities/Editors/nedit.desktop new file mode 100644 index 000000000..998d3d117 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/nedit.desktop @@ -0,0 +1,99 @@ +[Desktop Entry] +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Name=Nedit +Name[hi]=नेडिट +Name[ka]=NEdit +Name[ne]=एन एडिट +Name[pa]=N-ਸੰਪਾਦਕ +Name[ru]=NEdit +Name[rw]=N-guhindura +Name[ta]=Nதொகுப்பு +Name[te]=ఎన్ ఎడిట్ +Name[tg]=Недит +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +Exec=nedit %f +Icon=kedit +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Utilities/Editors/pico.desktop b/kappfinder/apps/Utilities/Editors/pico.desktop new file mode 100644 index 000000000..5103a6e05 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/pico.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Name=Pico +Name[bn]=পিকো +Name[eo]=Piko +Name[hi]=पिको +Name[ne]=पिको +Name[ta]=பிகோ +Name[te]=పికొ +Name[tg]=Пико +Name[zu]=PIco +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +Exec=pico +Terminal=true +Icon=pine +Type=Application diff --git a/kappfinder/apps/Utilities/Editors/xedit.desktop b/kappfinder/apps/Utilities/Editors/xedit.desktop new file mode 100644 index 000000000..ac47a7092 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/xedit.desktop @@ -0,0 +1,145 @@ +[Desktop Entry] +Name=X Editor +Name[af]=X Redigeerder +Name[ar]=محرر X +Name[be]=Рэдактар X +Name[bn]=এক্স সম্পাদক +Name[ca]=Editor X +Name[cy]=Golygydd X +Name[da]=X-editor +Name[el]=X Επεξεργαστής +Name[eo]=XRedaktilo +Name[es]=Editor de X +Name[eu]=X editorea +Name[fa]=ویرایشگر X +Name[fi]=X-editori +Name[fr]=XEdit +Name[fy]=X Bewurker +Name[gl]=Editor X +Name[hi]=एक्स संपादक +Name[hu]=Xedit +Name[id]=Editor X +Name[is]=X Ritill +Name[it]=Editor X +Name[ka]=X რედაქტორი +Name[kk]=X редакторы +Name[ko]=X 편집기 +Name[lo]= X Editor +Name[lv]=X Redaktors +Name[mn]=X боловсруулагч +Name[nb]=X-redigerer +Name[nds]=X-Editor +Name[ne]=X सम्पादक +Name[nn]=X-redigering +Name[nso]=Mofetosi wa X +Name[oc]=Editor X +Name[pa]=X ਸੰਪਾਦਕ +Name[pt]=Editor X +Name[pt_BR]=Editor X +Name[ro]=Editor X +Name[ru]=Редактор X +Name[rw]=Muhinduzi X +Name[se]=X-čállinprográmma +Name[ss]=Umhleli X +Name[sv]=X editor +Name[ta]=X தொகுப்பாளர் +Name[te]=ఎక్స్ ఎడిటర్ +Name[tg]=Муҳаррири X +Name[th]=แก้ไขข้อความ - X +Name[tr]=X Düzenleyicisi +Name[uk]=Редактор X +Name[uz]=X tahrirchi +Name[uz@cyrillic]=X таҳрирчи +Name[ven]=X Musengulusi +Name[vi]=Soạn X +Name[xh]=Umhleli we X +Name[zh_CN]=X 编辑器 +Name[zh_TW]=X 編輯器 +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +MimeType=text/english;text/plain; +Exec=xedit %f +Icon=xedit +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Utilities/Editors/xemacs.desktop b/kappfinder/apps/Utilities/Editors/xemacs.desktop new file mode 100644 index 000000000..46b773bd9 --- /dev/null +++ b/kappfinder/apps/Utilities/Editors/xemacs.desktop @@ -0,0 +1,104 @@ +[Desktop Entry] +Name=X Emacs +Name[bn]=এক্স ইম্যাক্স +Name[eo]=XEmakso +Name[es]=XEmacs +Name[fr]=XEmacs +Name[hi]=एक्स ईमेक्स +Name[id]= Emacs X +Name[nb]=X-Emacs +Name[nds]=X-Emacs +Name[ne]=X इमाक्स +Name[pa]=X Eਮੈਕਸ +Name[ta]=X எமாக்ஸ் +Name[te]=ఎక్స్ ఈమెక్స్ +Name[th]=Emacs บน X +Name[zh_TW]=X Emacs 編輯器 +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=xemacs %f +Icon=emacs +Type=Application +Terminal=false +X-KDE-StartupNotify=true +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/apps/Utilities/GKrellM.desktop b/kappfinder/apps/Utilities/GKrellM.desktop new file mode 100644 index 000000000..0e14dde6d --- /dev/null +++ b/kappfinder/apps/Utilities/GKrellM.desktop @@ -0,0 +1,70 @@ +[Desktop Entry] +Exec=gkrellm +Icon=gnome-app +Name=GKrellM +Name[hi]=जी-क्रेल-एम +Name[te]=జిక్రెల్ ఐఎం +GenericName=GNU Krell Monitors +GenericName[az]=GNU Krell İzləyiciləri +GenericName[be]=Назіральнікі GNU Krell +GenericName[bg]=Монитори GNU Krell +GenericName[bn]=গনিউ ক্রেল মনিটর +GenericName[bs]=GNU Krell monitori sistema +GenericName[ca]=Monitors Krell de GNU +GenericName[cs]=Monitory GNU Krell +GenericName[csb]=Mònitor systemë GNU Krell +GenericName[cy]=Monitrau Krell GNU +GenericName[da]=GNU Krell-overvåning +GenericName[de]=GNU-Krell-Monitore +GenericName[el]=Επόπτες GNU Krell +GenericName[eo]=GNU ekranoj +GenericName[es]=Monitores Krell GNU +GenericName[et]=GNU Krelli monitorid +GenericName[eu]=GNU Krell monitoreak +GenericName[fa]=گنو Krell نمایشگرهای +GenericName[fr]=Indicateurs du système GNU Krell +GenericName[ga]=Monatóirí GNU Krell +GenericName[gl]=Monitores GNU Krell +GenericName[he]=מנטרי GNU Krell +GenericName[hi]=ग्नू क्रेल मॉनीटर्स +GenericName[hr]=GNU Krell nadzori +GenericName[hu]=GNU Krell-monitor +GenericName[is]=GNU Krell eftirlit +GenericName[it]=Monitor GNU di Krell +GenericName[ja]=GNU Krell システムモニタ +GenericName[ka]=GNU Krell მონიტორი +GenericName[kk]=GNU Krell мониторлары +GenericName[km]=កម្មវិធី​ត្រួតពិនិត្យ GNU Krell +GenericName[ko]=GNU Krell 모니터 +GenericName[mk]=GNU Krell Системски монитори +GenericName[mn]=GNU Krell систем хянагч +GenericName[nb]=GNU Krell systemovervåkning +GenericName[nds]=Kiekers för GNU Krell +GenericName[ne]=GNU क्रेल मनिटर +GenericName[nn]=GNU Krell, systemovervaking +GenericName[pa]=GNU ਕੇਰੀਲ ਨਿਗਰਾਨ +GenericName[pl]=Monitor systemu GNU Krell +GenericName[pt]=Monitores Krell da GNU +GenericName[pt_BR]=Monitores Krell GNU +GenericName[ro]=Monitoare Krell GNU +GenericName[ru]=Мониторы GNU Krell +GenericName[rw]=Mugaragaza GNU Krell +GenericName[se]=GNU Krell, vuogádatgoziheapmi +GenericName[sk]=GNU Krell Monitory +GenericName[sl]=Monitorji GNU Krell +GenericName[sr]=GNU Krell монитори +GenericName[sr@Latn]=GNU Krell monitori +GenericName[sv]=GNU Krell-övervakare +GenericName[ta]=GNU Krell திரைகள் +GenericName[tg]=Нозири GNU Krell +GenericName[th]=โปรแกรมสอดส่องการทำงานระบบ ของ GNU +GenericName[tr]=GNU Krell İzleyiciler +GenericName[tt]=GNU Krell Küzätüçe +GenericName[uz]=GNU Krell monitorlari +GenericName[uz@cyrillic]=GNU Krell мониторлари +GenericName[vi]=Trình theo dõi GNU Krell +GenericName[wa]=Corwaitoe Krell GNU +GenericName[zh_CN]=GNU Krell 监视器 +GenericName[zh_TW]=GNU Krell 監視器 +Terminal=false +Type=Application diff --git a/kappfinder/apps/Utilities/GnomeWho.desktop b/kappfinder/apps/Utilities/GnomeWho.desktop new file mode 100644 index 000000000..36f68c787 --- /dev/null +++ b/kappfinder/apps/Utilities/GnomeWho.desktop @@ -0,0 +1,111 @@ +[Desktop Entry] +Name=GNOME Who +Name[bn]=গনোম হু +Name[cs]=Gnome Who +Name[csb]=Gnome Chto +Name[cy]=GNOME Pwy +Name[eo]=Gnoma Kiu +Name[fo]=Gnome-Who +Name[fr]=Gnome Who +Name[hi]=ग्नोम हू +Name[it]=Who di GNOME +Name[lv]=GNOME Kas +Name[nds]=GNOME-Who +Name[ne]=जिनोम हु +Name[nso]=GNOME Yeo e +Name[pa]=ਗਨੋਮ ਕੌਣ +Name[pl]=Gnome Kto +Name[rw]=GNOME Nde +Name[sl]=Gnome Who +Name[sr]=Гномов Who +Name[sr@Latn]=Gnomov Who +Name[ss]=Ngubani GNOME +Name[sv]=Gnome who +Name[ta]=க்னோம் யார் +Name[te]=గ్నొమ్ హూ +Name[tr]=GNOME Kim +Name[zu]=GNOME Ubani +GenericName=System Info Tool +GenericName[af]=Stelsel Inligting Program +GenericName[ar]=أداة معلومات النظام +GenericName[az]=Sistem Mə'lumatı Vasitəsi +GenericName[be]=Сістэмная інфармацыя +GenericName[bg]=Системна информация +GenericName[bn]=সিস্টেম তথ্য টুল +GenericName[bs]=Informacije o sistemu +GenericName[ca]=Eina d'informació del sistema +GenericName[cs]=Informace o systému +GenericName[csb]=Wëdowiédzô ò systemie +GenericName[cy]=Erfyn Gwybodaeth Cysawd +GenericName[da]=Systeminfo-værktøj +GenericName[de]=Systeminformationen +GenericName[el]=Εργαλείο πληροφοριών συστήματος +GenericName[eo]=Sistemstato-programo +GenericName[es]=Info del sistema +GenericName[et]=Süsteemi info +GenericName[eu]=Sistemaren informazio tresna +GenericName[fa]=ابزار اطلاعات سیستم +GenericName[fi]=Järjestelmänvalvontaohjelma +GenericName[fo]=Kervisupplýsingar +GenericName[fr]=Outil d'informations sur le système +GenericName[fy]=Systeemynformaasje +GenericName[gl]=Ferramenta de Información do Sistema +GenericName[he]=כלי מידע מערכת +GenericName[hi]=तंत्र जानकारी टूल +GenericName[hr]=Alat za podatke o sustavu +GenericName[hu]=Rendszerinformáció +GenericName[id]=Kakak Info Sistem +GenericName[is]=Kerfiseftirlit +GenericName[it]=Strumento per le informazioni sul sistema +GenericName[ja]=システム情報モニタ +GenericName[ka]=ხელსაწყო სისტემის ინფორმაციის სანახავად +GenericName[kk]=Жүйе мәліметтер құралы +GenericName[km]=ឧបករណ៍​ព័ត៌មាន​ប្រព័ន្ធ +GenericName[ko]=시스템 정보 도구 +GenericName[lo]=ເຄືອ່ງມືສະແດງຂໍ້ມູນ +GenericName[lt]=Sistemos informacijos priemonė +GenericName[lv]=Sistēmas Informācijas Rīks +GenericName[mk]=Алатка за системски информации +GenericName[mn]=Системийн мэдээлэл +GenericName[ms]=Alat Maklumat Sistem +GenericName[mt]=Għodda tal-informazzjoni tas-sistema +GenericName[nb]=Systeminformasjons-verktøy +GenericName[nds]=Warktüüch för de Systeeminformatschoon +GenericName[ne]=प्रणाली सूचना उपकरण +GenericName[nl]=Systeeminformatie +GenericName[nn]=Systeminfoverktøy +GenericName[nso]=Sebereka sa Tshedimoso ya System +GenericName[pa]=ਸਿਸਟਮ ਜਾਣਕਾਰੀ ਸੰਦ +GenericName[pl]=Informacje o systemie +GenericName[pt]=Ferramenta de Informações do Sistema +GenericName[pt_BR]=Ferramenta de Informação do sistema +GenericName[ro]=Utilitar informații sistem +GenericName[ru]=Утилита просмотра системной информации +GenericName[rw]=Igikoresho Amakuru Sisitemu +GenericName[se]=Vuogádatdiehtoreaidu +GenericName[sk]=Systémové informácie +GenericName[sl]=Orodje za podatke o sistemu +GenericName[sr]=Алат за прикупљање системских информација +GenericName[sr@Latn]=Alat za prikupljanje sistemskih informacija +GenericName[ss]=Litfulusi lemniningwane yemshini +GenericName[sv]=Verktyg för systeminformation +GenericName[ta]=சாதன தகவல் கருவி +GenericName[te]=వ్యవస్థ సమాచారం పనిముట్టు +GenericName[tg]=Обзори иттилооти система +GenericName[th]=เครื่องมือแสดงข้อมูลระบบ +GenericName[tr]=Sistem Bilgisi Aracı +GenericName[tt]=Sistem Turında Beleşü Qoralı +GenericName[uk]=Інформація про систему +GenericName[uz]=Tizim haqida maʼlumotni koʻruvchi +GenericName[uz@cyrillic]=Тизим ҳақида маълумотни кўрувчи +GenericName[ven]=Tshishumiswa tsha Mafhungo a Kuitele +GenericName[vi]=Công cụ thông tin hệ thống +GenericName[wa]=Usteye d' informåcion sistinme +GenericName[xh]=Isixhobo Senkcukacha Sendlela yokusebenza +GenericName[zh_CN]=系统信息工具 +GenericName[zh_TW]=系統資訊工具 +GenericName[zu]=Ithuluzi Lolwazi Lesistimu +Exec=gw +Terminal=false +Icon=gnome-who +Type=Application diff --git a/kappfinder/apps/Utilities/Makefile.am b/kappfinder/apps/Utilities/Makefile.am new file mode 100644 index 000000000..36769f95b --- /dev/null +++ b/kappfinder/apps/Utilities/Makefile.am @@ -0,0 +1,7 @@ +kappfinder_utilities_data_DATA = GnomeWho.desktop SystemInfo.desktop SystemLogViewer.desktop \ + calctool.desktop e-notes.desktop oclock.desktop GKrellM.desktop \ + xgnokii.desktop + +kappfinder_utilities_datadir = $(kde_datadir)/kappfinder/apps/Utilities + +SUBDIRS= Editors xutils diff --git a/kappfinder/apps/Utilities/SystemInfo.desktop b/kappfinder/apps/Utilities/SystemInfo.desktop new file mode 100644 index 000000000..aa12b40ae --- /dev/null +++ b/kappfinder/apps/Utilities/SystemInfo.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Name=System Info +Name[af]=Stelsel inligting +Name[az]=Sistem Məlumatı +Name[be]=Сістэмная інфармацыя +Name[bn]=সিস্টেম তথ্য +Name[br]=Titouroù diwar-benn ar reizhiad +Name[bs]=Sistemske informacije +Name[ca]=Informació del sistema +Name[cs]=Systémové informace +Name[csb]=Wëdowiédzô ò systemie +Name[cy]=Gwybodaeth Gysawd +Name[da]=Systeminfo +Name[de]=Systeminformation +Name[el]=Πληροφορίες συστήματος +Name[eo]=Sisteminformo +Name[es]=Información del sistema +Name[et]=Süsteemi info +Name[eu]=Sistemaren informazioa +Name[fa]=اطلاعات سیستم +Name[fi]=Järjestelmätiedot +Name[fr]=Informations système +Name[fy]=Systeemynformaasje +Name[ga]=Eolas faoin Chóras +Name[gl]=Información do Sistema +Name[he]=מידע אודות המערכת +Name[hi]=तंत्र जानकारी +Name[hr]=Podaci o sustavu +Name[hu]=Rendszerinformáció +Name[is]=Kerfisupplýsingar +Name[it]=Informazioni sul sistema +Name[ja]=システム情報 +Name[ka]=ინფორმაცია სისტემის შესახებ +Name[kk]=Жүйе мәліметтері +Name[km]=ព័ត៌មាន​ប្រព័ន្ធ +Name[ko]=시스템 정보 +Name[lt]=Sistemos informacija +Name[lv]=Sistēmas info +Name[mk]=Системски информации +Name[ms]=Maklumat Sistem +Name[mt]=Informazzjoni tas-sistema +Name[nb]=Systeminformasjon +Name[nds]=Systeeminfo +Name[ne]=प्रणाली सूचना +Name[nl]=Systeeminformatie +Name[nn]=Systeminformasjon +Name[pa]=ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Name[pl]=Informacje o systemie +Name[pt]=Informação do Sistema +Name[pt_BR]=Informações do Sistema +Name[ro]=Informații despre sistem +Name[ru]=Сведения о системе +Name[rw]=Amakuru Sisitemu +Name[se]=Vuogádatdiehtu +Name[sk]=Systémové informácie +Name[sl]=Sistemske informacije +Name[sr]=Информације о систему +Name[sr@Latn]=Informacije o sistemu +Name[sv]=Systeminformation +Name[ta]=அமைப்பு தகவல் +Name[te]=వ్యవస్థ సమాచారం +Name[tg]=Иттилооти система +Name[th]=ข้อมูลระบบ +Name[tr]=Sistem Bilgisi +Name[tt]=Sistem Turında +Name[uk]=Інформація про систему +Name[uz]=Tizim haqida maʼlumot +Name[uz@cyrillic]=Тизим ҳақида маълумот +Name[vi]=Thông tin Hệ thống +Name[wa]=Informåcion sol sistinme +Name[zh_CN]=系统信息 +Name[zh_TW]=系統資訊 +Exec=guname +Terminal=false +Icon=gnome-info +Type=Application diff --git a/kappfinder/apps/Utilities/SystemLogViewer.desktop b/kappfinder/apps/Utilities/SystemLogViewer.desktop new file mode 100644 index 000000000..29fdd5990 --- /dev/null +++ b/kappfinder/apps/Utilities/SystemLogViewer.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Name=System Log Viewer +Name[af]=Stelsel Log Blaaiër +Name[ar]=عارض سجل وقائع النظام +Name[az]=Sistem Qeyd Nümayişçisi +Name[be]=Праглядальнік сістэмных часопісаў +Name[bn]=সিস্টেম লগ প্রদর্শক +Name[br]=Gweler kerzlevr ar reizhiad +Name[bs]=Preglednik sistemskih dnevnika +Name[ca]=Visor de la bitàcola del sistema +Name[cs]=Prohlížeč systémových logů +Name[csb]=Przezérnik systemòwëch dniowników +Name[cy]=Gwelydd Cofnodion Cysawd +Name[da]=Systemlog-fremviser +Name[de]=Systemprotokollbetrachter +Name[el]=Προβολέας αρχείων καταγραφής +Name[eo]=Sistemprotokol-rigardilo +Name[es]=Visor de registro del sistema +Name[et]=Süsteemi logide monitor +Name[eu]=Sistemaren log ikustailua +Name[fa]=مشاهده‌گر ثبت سیستم +Name[fi]=Järjestelmälokien näytin +Name[fr]=Systemlogviewer +Name[fy]=systeemlogwerjefteprogramma +Name[gl]=Visor de Rexistos do Sistema +Name[he]=מציג לרישומי המערכת +Name[hi]=तंत्र लॉग प्रदर्शक +Name[hr]=Preglednik zapisnika sustava +Name[hu]=Rendszernapló-megjelenítő +Name[is]=Kerfisannálabirtir +Name[it]=Visualizzatore dei log di sistema +Name[ja]=システムログビューア +Name[ka]=სისტემური ჩანაწერების ნახვა +Name[kk]=Жүйелік журналды қарау құралы +Name[km]=កម្មវិធី​មើល​កំណត់ហេតុ​ប្រព័ន្ធ +Name[ko]=시스템 로그 뷰어 +Name[lo]=ຄ່າບັນທຶກການທຳງານຂອງລະບົບ +Name[lt]=Sistemos žurnalo stebėtojas +Name[lv]=Sistēmas Žurnālu Skatītājs +Name[mk]=Прегледувач на системски дневници +Name[mn]=Систем Log Viewer +Name[ms]=Pemapar Log Sistem +Name[mt]=Werrej tal-log tas-sistema +Name[nb]=Systemlogframviser +Name[nds]=Kieker för't Systeemlogbook +Name[ne]=प्रणाली लग दर्शक +Name[nl]=systeemlogweergaveprogramma +Name[nn]=Systemloggvisar +Name[nso]=Molebeledi wa Tseno ya System +Name[pa]=ਸਿਸਟਮ ਲਾਗ ਦਰਸ਼ਕ +Name[pl]=Przeglądarka dzienników systemowych +Name[pt]=Monitor dos Registos do Sistema +Name[pt_BR]=Visualizador de Logs do Sistema +Name[ro]=Vizualizor jurnale sistem +Name[ru]=Просмотр системных журналов +Name[rw]=Mugaragaza Ibikamikorere Sisitemu +Name[se]=Vuogádatlogga čájeheaddji +Name[sk]=Prehliadač záznamov systému +Name[sl]=Pregledovalnik sistemskih dnevnikov +Name[sr]=Приказивач системског дневника +Name[sr@Latn]=Prikazivač sistemskog dnevnika +Name[ss]=Sibuki sekungena kumshini +Name[sv]=Systemloggvisare +Name[ta]=அமைப்பு தொடங்கு காட்சியாளர் +Name[te]=వ్యవస్థ లాగ్ వీక్షిణి +Name[tg]=Намоиши маҷаллаҳои система +Name[th]=โปรแกรมดูบันทึกการทำงานของระบบ +Name[tr]=Sistem Günlüğü İzleyici +Name[tt]=Sistem Köndälek Kürsätkeçe +Name[uk]=Переглядач системних журналів +Name[uz]=Tizim logini koʻruvchi +Name[uz@cyrillic]=Тизим логини кўрувчи +Name[ven]=Muvhoni wa Kuitele kwo Logiwaho +Name[vi]=Trình xem Nhật ký Hệ thống +Name[wa]=Håyneu des fitchîs djournå do sistinme +Name[xh]=Umboniseli Woshicilelo oluneenkcukacha Lwendlela esetyenziswayo +Name[zh_CN]=系统记录查看器 +Name[zh_TW]=系統紀錄檔檢視器 +Name[zu]=Umbukisi Wenqubo eqoshiwe Yesistimu +Exec=logview +Terminal=false +Icon=logview +Type=Application diff --git a/kappfinder/apps/Utilities/calctool.desktop b/kappfinder/apps/Utilities/calctool.desktop new file mode 100644 index 000000000..af82e0e2e --- /dev/null +++ b/kappfinder/apps/Utilities/calctool.desktop @@ -0,0 +1,109 @@ +[Desktop Entry] +Name=Calctool +Name[bn]=ক্যাল্কটুল +Name[csb]=Kalkùlator +Name[de]=Calctool - Rechner +Name[el]=Αριθμομηχανή +Name[eo]=Kalkulilo +Name[fr]=CalcTool +Name[gl]=Calculadora +Name[hi]=केल्कटूल +Name[is]=Reiknivél +Name[ja]=計算ツール +Name[lo]=ເຄື່ອງຄິດເລກ +Name[lv]=Kalkrīks +Name[mn]=Calctool - Тооны машин +Name[mt]=Għodda kalkulatriċi +Name[ne]=क्याल्क उपकरण +Name[pa]=ਹਿਸਾਬੀ +Name[pl]=Kalkulator +Name[rw]=IgikoreshoMubazi +Name[ta]=கால்குலேட்டர் கருவி +Name[te]=కెల్క్ టూల్ +Name[tg]=Обзори муҳосиба +Name[th]=เครื่องคิดเลข +Name[tr]=Hesap Aracı +Name[ven]=Tshishumiswa tsha Calc +GenericName=Calculator +GenericName[af]=Sak rekenaar +GenericName[ar]=آلة حاسبة +GenericName[az]=Hesab Maşını +GenericName[be]=Калькулятар +GenericName[bg]=Калкулатор +GenericName[bn]=ক্যালকুলেটর +GenericName[br]=Jederez +GenericName[bs]=RPN kalkulator +GenericName[ca]=Calculadora +GenericName[cs]=Kalkulátor +GenericName[csb]=Kalkùlator +GenericName[cy]=Cyfrifiannell +GenericName[da]=Regnemaskine +GenericName[de]=Rechner +GenericName[el]=Αριθμομηχανή +GenericName[eo]=Kalkulilo +GenericName[es]=Calculadora +GenericName[et]=Kalkulaator +GenericName[eu]=Kalkulagailua +GenericName[fa]=ماشین حساب +GenericName[fi]=Laskin +GenericName[fo]=Roknimaskina +GenericName[fr]=Calculatrice +GenericName[fy]=Rekkenmasine +GenericName[ga]=Áireamhán +GenericName[gl]=Calculadora +GenericName[he]=מחשבון +GenericName[hi]=गणक +GenericName[hr]=Kalkulator +GenericName[hu]=Számológép +GenericName[is]=Vasareiknir +GenericName[it]=Calcolatrice +GenericName[ja]=計算機 +GenericName[ka]=კალკულატორი +GenericName[kk]=Калькулятор +GenericName[km]=ម៉ាស៊ីន​គិត​លេខ +GenericName[ko]=계산기 +GenericName[lo]=ເຄືອ່ງມືຄິດເລກ +GenericName[lt]=Skaičiuotuvas +GenericName[lv]=Kalkulators +GenericName[mk]=Дигитрон +GenericName[mn]=Тооны машин +GenericName[ms]=Kalkulator +GenericName[mt]=Kalkulatriċi +GenericName[nb]=Kalkulator +GenericName[nds]=Taschenreekner +GenericName[ne]=क्याल्कुलेटर +GenericName[nl]=Rekenmachine +GenericName[nn]=Kalkulator +GenericName[pa]=ਕੈਲਕੂਲੇਟਰ +GenericName[pl]=Kalkulator +GenericName[pt]=Calculadora +GenericName[pt_BR]=Calculadora +GenericName[ru]=Калькулятор +GenericName[rw]=Mubazi +GenericName[se]=Kalkuláhtor +GenericName[sk]=Kalkulačka +GenericName[sl]=Kalkulator +GenericName[sr]=Калкулатор +GenericName[sr@Latn]=Kalkulator +GenericName[ss]=I-khalikhuletha +GenericName[sv]=Miniräknare +GenericName[ta]=கணக்கிடும் கருவி +GenericName[te]=కెల్క్యులెటర్ +GenericName[tg]=Мошини ҳисоб +GenericName[th]=เครื่องคิดเลข +GenericName[tr]=Hesap Makinesi +GenericName[tt]=Sansanaq +GenericName[uk]=Калькулятор +GenericName[uz]=Kalkulyator +GenericName[uz@cyrillic]=Калкулятор +GenericName[ven]=Tshithusauvhalela +GenericName[vi]=Máy tính +GenericName[wa]=Carculete +GenericName[xh]=Umatshini wokubala +GenericName[zh_CN]=计算器 +GenericName[zh_TW]=計算機 +GenericName[zu]=Umshini wokubala +Exec=calctool +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Utilities/e-notes.desktop b/kappfinder/apps/Utilities/e-notes.desktop new file mode 100644 index 000000000..f143abf64 --- /dev/null +++ b/kappfinder/apps/Utilities/e-notes.desktop @@ -0,0 +1,111 @@ +[Desktop Entry] +Name=E-Notes +Name[bn]=ই-নোটস +Name[csb]=E-Notownik +Name[cy]=E-Nodiadau +Name[eo]=E-Notoj +Name[eu]=E idatz-oharrak +Name[fa]=یادداشتهای E +Name[hi]=ई-नोट्स +Name[lo]=ບັນທຶກຊ່ວຍຈຳ E +Name[lt]=E.užrašai +Name[lv]=E-Piezīmes +Name[mt]=E-Noti +Name[ne]=E-टिपोट +Name[nso]=Ditshwao tsa E +Name[pa]=ਈ-ਸੂਚਨਾ +Name[pl]=E-Notatki +Name[rw]=E-Utwandiko +Name[ss]=Emanotsi ye E +Name[sv]=E-notes +Name[ta]=E-குறிப்புகள் +Name[te]=ఈ-నొట్స్ +Name[th]=บันทึกช่วยจำ E +Name[tr]=E-Notlar +Name[ven]=Dzinotsi dza-E +Name[vi]=Ghi chép E +Name[zu]=Amapheshana-E +GenericName=Personal Notes +GenericName[af]=Persoonlike Notas +GenericName[ar]=الملاحظات الشخصية +GenericName[az]=Şəxsi Qeydlər +GenericName[be]=Персанальныя нататкі +GenericName[bg]=Лични бележки +GenericName[bn]=ব্যক্তিগত মন্তব্য +GenericName[bs]=Lične zabilješke +GenericName[ca]=Notes personals +GenericName[cs]=Osobní poznámky +GenericName[csb]=Swój notownik +GenericName[cy]=Nodiadau Personol +GenericName[da]=Personlige noter +GenericName[de]=Persönliche Notizen +GenericName[el]=Προσωπικές σημειώσεις +GenericName[eo]=Personaj notoj +GenericName[es]=Notas personales +GenericName[et]=Isiklikud märkmed +GenericName[eu]=Idatz-ohar pertsonalak +GenericName[fa]=یادداشتهای شخصی +GenericName[fi]=Omat muistiinpanot +GenericName[fr]=Outil de prise de notes +GenericName[fy]=Persoanlike notysjes +GenericName[ga]=Nótái Pearsanta +GenericName[gl]=Notas Persoais +GenericName[he]=פתקים אישיים +GenericName[hi]=निजी टिप्पणी +GenericName[hr]=Osobne bilješke +GenericName[hu]=Személyes feljegyzések +GenericName[id]=Catatan Pribadi +GenericName[is]=Skrárnar þínar +GenericName[it]=Note personali +GenericName[ja]=個人のノート +GenericName[ka]=პერსონალური ჩანაწერები +GenericName[kk]=Дербес жазба +GenericName[km]=ចំណាំ​ផ្ទាល់​ខ្លួន +GenericName[ko]=개인 노트 +GenericName[lo]=ບັນທຶກຊ່ວຍຈຳ +GenericName[lt]=Asmeniniai užrašai +GenericName[lv]=Personālās Piezīmes +GenericName[mk]=Лични белешки +GenericName[mn]=Хувийн тэмдэглэл +GenericName[ms]=Nota Peribadi +GenericName[mt]=Noti Personali +GenericName[nb]=Personlige notater +GenericName[nds]=Persöönliche Notizen +GenericName[ne]=व्यक्तिगत टिपोट +GenericName[nl]=Persoonlijke notities +GenericName[nn]=Personlege notat +GenericName[nso]=Ditshwao tsa Botho +GenericName[pa]=ਨਿੱਜੀ ਸੂਚਨਾਵਾਂ +GenericName[pl]=Osobiste notatki +GenericName[pt]=Notas Pessoais +GenericName[pt_BR]=Notas Pessoais +GenericName[ro]=Notițe personale +GenericName[ru]=Личные заметки +GenericName[rw]=Utwandiko Twihariye +GenericName[se]=Iežat muitolihput +GenericName[sk]=Osobné poznámky +GenericName[sl]=Osebni zapiski +GenericName[sr]=Личне поруке (подсетник) +GenericName[sr@Latn]=Lične poruke (podsetnik) +GenericName[ss]=Emanotsi yemuntfu sicu +GenericName[sv]=Personliga anteckningar +GenericName[ta]=தனிப்பட்ட குறிப்புகள் +GenericName[te]=వ్యక్తిగత నోట్స్ +GenericName[tg]=Ёддоштҳои шахсӣ +GenericName[th]=บันทึกช่วยจำ +GenericName[tr]=Kişisel Notlar +GenericName[tt]=Şäxsi Yazmalar +GenericName[uk]=Особисті нотатки +GenericName[uz]=Shaxsiy yozuvlar +GenericName[uz@cyrillic]=Шахсий ёзувлар +GenericName[ven]=Dzinotsi dza vhune +GenericName[vi]=Ghi chép cá nhân +GenericName[wa]=Notes da vosse +GenericName[xh]=Iifayile Zobuntu +GenericName[zh_CN]=个人记事本 +GenericName[zh_TW]=個人筆記 +GenericName[zu]=Amapheshana omuntu siqu +Exec=e-notes +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Utilities/oclock.desktop b/kappfinder/apps/Utilities/oclock.desktop new file mode 100644 index 000000000..6f7ee6b3e --- /dev/null +++ b/kappfinder/apps/Utilities/oclock.desktop @@ -0,0 +1,106 @@ +[Desktop Entry] +Name=OClock +Name[af]=Horlosie +Name[bn]=ওক্লক +Name[cy]=OCloc +Name[eo]=Horloĝo +Name[hi]=ओ-क्लाक +Name[lo]=ໂມງ +Name[lt]=Laikrodis +Name[lv]=Pulkstenis +Name[ne]=बज्यो +Name[nso]=Godimo ga Hlogo +Name[rw]=O-Isaha +Name[ss]=Enhloko +Name[sv]=Oclock +Name[ta]=மணிநேரம் +Name[te]=ఓగడియారం +Name[tg]=Соат +Name[th]=Oclock +Name[ven]=Ntha ha Thoho +Name[zu]=Ezimpondweni +GenericName=Clock +GenericName[af]=Horlosie +GenericName[ar]=ساعة +GenericName[az]=Saat +GenericName[be]=Гадзіннік +GenericName[bg]=Часовник +GenericName[bn]=ঘড়ি +GenericName[br]=Eurier +GenericName[bs]=Sat +GenericName[ca]=Rellotge +GenericName[cs]=Hodiny +GenericName[csb]=Zédżer +GenericName[cy]=Cloc +GenericName[da]=Ur +GenericName[de]=Uhr +GenericName[el]=Ρολόι +GenericName[eo]=Iu horloĝo +GenericName[es]=Reloj +GenericName[et]=Kell +GenericName[eu]=Erlojua +GenericName[fa]=ساعت +GenericName[fi]=Kello +GenericName[fo]=Ur +GenericName[fr]=Horloge +GenericName[fy]=Klok +GenericName[ga]=Clog +GenericName[gl]=Reloxo +GenericName[he]=שעון +GenericName[hi]=घड़ी +GenericName[hr]=Sat +GenericName[hu]=Óra +GenericName[id]=Jam +GenericName[is]=Klukka +GenericName[it]=Orologio +GenericName[ja]=時計 +GenericName[ka]=საათი +GenericName[kk]=Сағат +GenericName[km]=នាឡិកា +GenericName[lo]=ໂມງ +GenericName[lt]=Laikrodis +GenericName[lv]=Pulkstenis +GenericName[mk]=Часовник +GenericName[mn]=Цаг +GenericName[ms]=Jam +GenericName[mt]=Arloġġ +GenericName[nb]=Klokke +GenericName[nds]=Klock +GenericName[ne]=घडी +GenericName[nl]=Klok +GenericName[nn]=Klokke +GenericName[nso]=Sesupanako +GenericName[pa]=ਘੜੀ +GenericName[pl]=Zegar +GenericName[pt]=Relógio +GenericName[pt_BR]=Relógio +GenericName[ro]=Ceas +GenericName[ru]=Часы +GenericName[rw]=Isaha +GenericName[se]=Diibmu +GenericName[sk]=Hodiny +GenericName[sl]=Ura +GenericName[sr]=Часовник +GenericName[sr@Latn]=Časovnik +GenericName[ss]=Liwashi +GenericName[sv]=Klocka +GenericName[ta]=கடிகாரம் +GenericName[te]=గడియారం +GenericName[tg]=Соат +GenericName[th]=นาฬิกา +GenericName[tr]=Saat +GenericName[tt]=Säğät +GenericName[uk]=Годинник +GenericName[uz]=Soat +GenericName[uz@cyrillic]=Соат +GenericName[ven]=Tshifhinga +GenericName[vi]=Đồng hồ +GenericName[wa]=Ôrlodje +GenericName[xh]=Ikloko +GenericName[zh_CN]=时钟 +GenericName[zh_TW]=時鐘 +GenericName[zu]=Iwashi +Exec=oclock +Terminal=false +Icon=xpm +Type=Application diff --git a/kappfinder/apps/Utilities/xgnokii.desktop b/kappfinder/apps/Utilities/xgnokii.desktop new file mode 100644 index 000000000..bdffc1dbc --- /dev/null +++ b/kappfinder/apps/Utilities/xgnokii.desktop @@ -0,0 +1,87 @@ +[Desktop Entry] +Name=X-Gnokii +Name[eo]=X-Gnotskio +Name[hi]=एक्स-ग्नोकी +Name[ja]=Gnokii 携帯電話ツール +Name[sv]=Xgnokii +Name[ta]=Gnotski +Name[te]=ఎక్స్-గ్నొకీ +Name[th]=X-Gnokil +Name[tr]=Gnokii +GenericName=Mobile Phone Management Tool +GenericName[af]=Selfoon Bestuurder +GenericName[ar]=أداة ادارة الهواتف النقالة +GenericName[az]=Mobil Telefon İdarə Vasitəsi +GenericName[be]=Інструмент кіравання мабільным тэлефонам +GenericName[bg]=Връзка с мобилен телефон +GenericName[bn]=মোবাইল ফোন ম্যানেজমেন্ট টুল +GenericName[bs]=Alat za upravljanje mobilnim telefonom +GenericName[ca]=Eina per a gestionar telèfons mòbils +GenericName[cs]=Nástroj pro mobilní telefony +GenericName[csb]=Nôrzãdze do sprôwianiô mòbilnym telefónã +GenericName[cy]=Erfyn Rheoli Ff?n Symudol +GenericName[da]=Mobiltelefon håndteringsværktøj +GenericName[de]=Handy-Verwaltung +GenericName[el]=Εργαλείο διαχείρισης κινητών τηλεφώνων +GenericName[eo]=Ilo por administrado de poŝtelefonoj +GenericName[es]=Herramienta de gestión del teléfono móvil +GenericName[et]=Mobiiltelefoni haldur +GenericName[eu]=Telefono mugikorra kudeatzeko tresna +GenericName[fa]=ابزار مدیریت تلفن همراه +GenericName[fi]=Matkapuhelinten hallintatyökalu +GenericName[fr]=Outil de gestion de téléphone portable +GenericName[fy]=Mobile tillefoans beheare +GenericName[ga]=Uirlis Bhainisteoireachta Fóin Póca +GenericName[gl]=Ferramenta de Xestión do Teléfone Móbil +GenericName[he]=כלי ניהול טלפונים ניידים +GenericName[hi]=मोबाइल फोन प्रबंधन औज़ार +GenericName[hr]=Alat za upravljanje mobitelima +GenericName[hu]=Mobiltelefon-kezelő +GenericName[id]=Kakas Pengurus Telepon Genggam +GenericName[is]=Farsíma umsýslutól +GenericName[it]=Strumento per la gestione dei telefoni cellulari +GenericName[ja]=携帯電話管理ツール +GenericName[ka]=პროგრამა მობილური ტელეფონებისათვის +GenericName[kk]=Қалта телефонды басқару құралы +GenericName[km]=ឧបករណ៍​គ្រប់គ្រង​ទូរស័ព្ទ​ចល័ត +GenericName[ko]=휴대폰 관리 도구 +GenericName[lt]=Mobilaus telefono valdymo įrankis +GenericName[lv]=Mobīlā Telefona Pārvaldības Rīks +GenericName[mk]=Алатка за менаџмент на мобилни телефони +GenericName[mn]=Мобил утас удирдах хэрэгсэл +GenericName[ms]=Alat Pengurusan Telefon Mudah Alih +GenericName[mt]=Għodda għall-immaniġġjar tal-mobiles +GenericName[nb]=Verktøy for håndtering av mobiltelefoner +GenericName[nds]=Pleeg vun Mobiltelefonen +GenericName[ne]=मोबाइल फोन व्यवस्थापन उपकरण +GenericName[nl]=Mobiele telefoons beheren +GenericName[nn]=Verktøy for handtering av mobiltelefonar +GenericName[pa]=ਮੋਬਾਈਲ ਫੋਨ ਪਰਬੰਧਨ ਸੰਦ +GenericName[pl]=Narzędzie do zarządzania telefonem komórkowym +GenericName[pt]=Ferramenta de Gestão de Telemóveis +GenericName[pt_BR]=Ferramenta de Gerenciamento de Telefonia Móvel +GenericName[ro]=Utilitar pentru telefoane mobile +GenericName[ru]=Утилита для управления мобильными телефонами +GenericName[rw]=Igikoresho Igenzura Telefone Igendanwa +GenericName[se]=Mátketelefongieđahan-reaidu +GenericName[sk]=Nástroj na správu mobilu +GenericName[sl]=Orodje za upravljanje s prenosnimi telefoni +GenericName[sr]=Алат за управљање мобилним телефонима +GenericName[sr@Latn]=Alat za upravljanje mobilnim telefonima +GenericName[sv]=Verktyg för hantering av mobiltelefon +GenericName[ta]=அச்சு மேலாண்மைக் கருவி +GenericName[tg]=Обзори мудирияти телефони ҳамроҳӣ +GenericName[th]=เครื่องมือสำหรับโทรศัพท์เคลื่อนที่ +GenericName[tr]=Mobil Telefon Yönetim Aracı +GenericName[tt]=Kesäfon İdärä Qoralı +GenericName[uk]=Засіб керування мобільним телефоном +GenericName[uz]=Uyali telefon vositasi +GenericName[uz@cyrillic]=Уяли телефон воситаси +GenericName[vi]=Công cụ Quản lý Điện thoại Di động +GenericName[wa]=Usteye po manaedjî les GSM +GenericName[zh_CN]=移动电话管理工具 +GenericName[zh_TW]=行動電話管理工具 +Exec=xgnokii +Type=Application +Terminal=false +# Categories=Qt;KDE;PIM diff --git a/kappfinder/apps/Utilities/xutils/Makefile.am b/kappfinder/apps/Utilities/xutils/Makefile.am new file mode 100644 index 000000000..91bd75990 --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/Makefile.am @@ -0,0 +1,7 @@ +kappfinder_utilities_xutilities_data_DATA = xcalc.desktop xclipboard.desktop xclock.desktop \ + xconsole.desktop xterm.desktop xload.desktop xmag.desktop \ + Xkill.desktop Xrefresh.desktop Xtraceroute.desktop + +kappfinder_utilities_xutilities_datadir = $(kde_datadir)/kappfinder/apps/Utilities/XUtilities + +EXTRA_DIST = $(kappfinder_utilities_xutilities_data_DATA) diff --git a/kappfinder/apps/Utilities/xutils/Xkill.desktop b/kappfinder/apps/Utilities/xutils/Xkill.desktop new file mode 100644 index 000000000..cb98c91b1 --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/Xkill.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Name=X Kill +Name[bn]=এক্স-কিল +Name[cy]=X Lladd +Name[eo]=X-Mortigo +Name[fa]=کشتن X +Name[hi]=एक्स-किल +Name[nds]=X-Kill +Name[ne]=X किल +Name[pa]=X ਖਤਮ +Name[rw]=X Kwica +Name[sv]=Xkill +Name[ta]=Xkill +Name[te]=ఎక్స్ చంపు +Name[tg]=Қотили X +Name[vi]=Giết X +GenericName=Window Termination Tool +GenericName[af]=Venster Beëindiging Program +GenericName[ar]=أداة إنهاء النوافذ +GenericName[az]=Pəncərə Ləğv Vasitəsi +GenericName[be]=Інструмента забівання вокнаў +GenericName[bg]=Убиване на програми +GenericName[bn]=উইণ্ডো বন্ধ করার টুল +GenericName[bs]=Alat za zatvaranje prozora +GenericName[ca]=Eina assassina de finestres +GenericName[cs]=Nástroj pro zavírání oken +GenericName[csb]=Nôrzãdze do zabijaniô òknów +GenericName[cy]=Erfyn Terfynu Ffenestr +GenericName[da]=Værktøj til terminering af vinduer +GenericName[de]=Zum Schließen von Fenstern +GenericName[el]=Εργαλείο τερματισμού παραθύρων +GenericName[eo]=Ilo por mortigi programfenestrojn +GenericName[es]=Asesino de ventanas +GenericName[et]=Akende tapmine +GenericName[eu]=Leihoak akatzeko tresna +GenericName[fa]=ابزار پایان‌دهی پنجره +GenericName[fi]=Ikkunoiden lopetustyökalu +GenericName[fr]=Pour fermer de force une fenêtre +GenericName[fy]=Finsters forsearre ôfslúte +GenericName[ga]=Uirlis Chríochnaithe Fuinneoige +GenericName[gl]=Ferramenta para Matar Fiestras +GenericName[he]=כלי לחיסול חלונות +GenericName[hi]=विंडो समाप्त करने का औज़ार +GenericName[hr]=Alat za ubijanje prozora +GenericName[hu]=X-ablakbezáró +GenericName[is]=Glugga-drápari +GenericName[it]=Strumento per uccidere le finestre +GenericName[ja]=ウィンドウ停止ツール +GenericName[ka]=ფანჯრის დახურვის ხელსაწყო +GenericName[kk]=Терезелерді жабу құралы +GenericName[km]=ឧបករណ៍​ស្ថានីយ​បង្អួច +GenericName[ko]=창 종료 도구 +GenericName[lo]=ເຄື່ອງມືບັງຄັບປິດຫນ້າຈໍ +GenericName[lt]=Langų uždarymo priemonė +GenericName[lv]=Loga Nokaušanas Rīks +GenericName[mk]=Алатка за уништување прозорци +GenericName[mn]=Цонх хаагч хэрэгсэл +GenericName[ms]=Alat Penamatan Tetingkap +GenericName[mt]=Għodda biex toqtol windows +GenericName[nb]=Verktøy for å stenge vinduer +GenericName[nds]=Warktüüch för't Tomaken vun Finstern +GenericName[ne]=सञ्झ्याल टर्मिनल उपकरण +GenericName[nl]=Vensters geforceerd sluiten +GenericName[nn]=Verktøy for vindaugsavslutting +GenericName[nso]=Sebereka sa Phetso ya Window +GenericName[pa]=ਝਰੋਖਾ ਖਾਤਮਾ ਸੰਦ +GenericName[pl]=Narzędzie do zabijania okien +GenericName[pt]=Ferramenta de Encerramento de Janelas +GenericName[pt_BR]=Ferramenta de Finalização de Janelas +GenericName[ro]=Utilitar de distrugere ferestre +GenericName[ru]=Утилита закрытия окон +GenericName[rw]=Igikoresho Idirishya ry'Irangiza +GenericName[se]=Láseheaittihanreaidu +GenericName[sk]=Zatváranie okien +GenericName[sl]=Orodje z okenskim terminalom +GenericName[sr]=Алат за убијање прозора +GenericName[sr@Latn]=Alat za ubijanje prozora +GenericName[ss]=Lithulusi lekuphelisa liwindi +GenericName[sv]=Verktyg för att terminera fönster +GenericName[ta]=சாளரத்தை மூடும் கருவி +GenericName[tg]=Обзори поёндодан ба тиреза +GenericName[th]=เครื่องมือบังคับปิดหน้าต่าง +GenericName[tr]=Pencere Sonlandırma Aracı +GenericName[tt]=Täräzä Üterüçe Qoral +GenericName[uk]=Засіб знищення вікон +GenericName[uz]=Oynani oʻldirish vositasi +GenericName[uz@cyrillic]=Ойнани ўлдириш воситаси +GenericName[ven]=Tshishumiswa tsha u fhelisa Windo +GenericName[vi]=Công cụ tắt cửa sổ +GenericName[wa]=Usteye po touwer les purneas +GenericName[xh]=Isixhobo Sopheliso lwe Window +GenericName[zh_CN]=Window 终端工具 +GenericName[zh_TW]=視窗終結工具 +GenericName[zu]=Ithuluzi Lokunqamula i-Window +Exec=xkill +Terminal=false +Icon=xkill +Type=Application diff --git a/kappfinder/apps/Utilities/xutils/Xrefresh.desktop b/kappfinder/apps/Utilities/xutils/Xrefresh.desktop new file mode 100644 index 000000000..89203812f --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/Xrefresh.desktop @@ -0,0 +1,106 @@ +[Desktop Entry] +Name=X Refresh +Name[bn]=এক্স রিফ্রেশ +Name[cy]=X Adfywio +Name[de]=X-Refresh +Name[eo]=X-Refreŝigo +Name[fa]=بازآوردن X +Name[ga]=Athnuachan X +Name[hi]=एक्स-रिफ्रेश +Name[is]=Hressa X +Name[mn]=X шинэчилэл +Name[nds]=X-Refresh +Name[ne]=X ताजा पार्नुहोस् +Name[pa]=X ਤਾਜ਼ਾ +Name[pt]=Actualização do X +Name[rw]=X Kuvugurura +Name[sv]=Xrefresh +Name[ta]=Xபுதுப்பி +Name[te]=ఎక్స్ రిఫ్రెష్ +Name[tg]=Навсози X +Name[tr]=X Tazele +Name[vi]=Cập nhật X +GenericName=Refresh Screen +GenericName[af]=Verfris Skerm +GenericName[ar]=تحديث الشاشة +GenericName[az]=Ekranı Yenilə +GenericName[be]=Абнаўляе экран +GenericName[bg]=Обновяване на екрана +GenericName[bn]=পর্দা রিফ্রেশ +GenericName[br]=Adtresañ ar skramm +GenericName[bs]=Osvježi ekran +GenericName[ca]=Refà la pantalla +GenericName[cs]=Obnovit obrazovku +GenericName[csb]=Òdswierzanié ekranu +GenericName[cy]=Adnewyddu'r Sgrîn +GenericName[da]=Genopfrisk skærm +GenericName[de]=Bildschirminhalt neu aufbauen +GenericName[el]=Ανανέωση οθόνης +GenericName[eo]=Ekranrefreŝigo +GenericName[es]=Refrescar pantalla +GenericName[et]=Töölaua värskendamine +GenericName[eu]=Freskatu pantaila +GenericName[fa]=بازآوردن پرده +GenericName[fi]=Päivitä näyttö +GenericName[fr]=Pour rafraîchir l'affichage +GenericName[fy]=Skerm ferfarskje +GenericName[ga]=Athnuaigh an scáileán +GenericName[gl]=Anovación da Pantalla +GenericName[he]=רענון המסך +GenericName[hi]=रिफ्रेश स्क्रीन +GenericName[hr]=Osvježi ekran +GenericName[hu]=X-képernyőfrissítő +GenericName[id]=Penyegaran Layar +GenericName[is]=Endurskrifa skjá +GenericName[it]=Aggiorna lo schermo +GenericName[ja]=スクリーンのリフレッシュ +GenericName[ka]=ეკრანის განახლება +GenericName[kk]=Экранды жаңарту +GenericName[km]=ធ្វើ​ឲ្យ​អេក្រង់​ស្រស់ +GenericName[ko]=화면 새로 고침 +GenericName[lo]=ປັບປຸງຫນ້າຈໍ +GenericName[lt]=Perpiešti ekraną +GenericName[lv]=Atsvaidzina Ekrāna +GenericName[mk]=Освежувач на екранот +GenericName[mn]=Дэлгэц шинэчлэх +GenericName[ms]=Muat Semula Skrin +GenericName[mt]=Erġa' pinġi l-iskrin +GenericName[nb]=Tegn skjermen på nytt +GenericName[nds]=Schirm opfrischen +GenericName[ne]=पर्दा ताजा पार्नुहोस् +GenericName[nl]=Scherm verversen +GenericName[nn]=Teikn skjermen på nytt +GenericName[nso]=Pontsho ya Boikhutso +GenericName[pa]=ਪਰਦਾ ਤਾਜ਼ਾ +GenericName[pl]=Odświeżanie ekranu +GenericName[pt]=Actualizar o Ecrã +GenericName[pt_BR]=Atualização de Tela +GenericName[ro]=Reafișează ecranul +GenericName[ru]=Обновление экрана +GenericName[rw]=Kuvugurura Mugaragaza +GenericName[se]=Ođasmahte šearbma +GenericName[sk]=Prekreslenie obrazovky +GenericName[sl]=Osveži zaslon +GenericName[sr]=Освеживач екрана +GenericName[sr@Latn]=Osveživač ekrana +GenericName[ss]=Phumulisa skrini +GenericName[sv]=Uppdatera skärmen +GenericName[ta]=திரையை புதுப்பி +GenericName[tg]=Навсози экран +GenericName[th]=รีเฟรชหน้าจอ +GenericName[tr]=Ekranı Tazele +GenericName[tt]=Küräk Yañartqıç +GenericName[uk]=Поновлення екрану +GenericName[uz]=Ekranni yangilash +GenericName[uz@cyrillic]=Экранни янгилаш +GenericName[ven]=U Kokodza Muya ha Tshikirini +GenericName[vi]=Cập nhật màn hình +GenericName[wa]=Rafrister l' waitroûle +GenericName[xh]=Hlaziya Ikhusi +GenericName[zh_CN]=刷新屏幕 +GenericName[zh_TW]=更新螢幕 +GenericName[zu]=Vuselela kabusha Isikrini +Exec=xrefresh +Terminal=false +Icon=xrefresh +Type=Application diff --git a/kappfinder/apps/Utilities/xutils/Xtraceroute.desktop b/kappfinder/apps/Utilities/xutils/Xtraceroute.desktop new file mode 100644 index 000000000..f1b3eb106 --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/Xtraceroute.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=X Traceroute +Name[bn]=এক্স ট্রেসরুট +Name[de]=X-Traceroute +Name[fa]=مسیر ردیابی X +Name[hi]=एक्स-ट्रेसरूट +Name[hr]=Xtraceroute +Name[nds]=X-Traceroute +Name[ne]=X ट्र्यासरुट +Name[pa]=X ਮਾਰਗ-ਖੋਜ +Name[rw]=X KwerekanaInzira +Name[sv]=Xtraceroute +Name[ta]=Xதொடர்வழி +Name[te]=ఎక్స్ ట్రేస్ రూట్ +GenericName=Network Tool +GenericName[af]=Netwerk Program +GenericName[ar]=أداة الشبكة +GenericName[az]=Şəbəkə Vasitəsi +GenericName[be]=Сеткавы інструмент +GenericName[bg]=Мрежови инструмент +GenericName[bn]=নেটওয়ার্ক টুল +GenericName[br]=Ostilh ar rouedad +GenericName[bs]=Mrežni alat +GenericName[ca]=Eina de xarxa +GenericName[cs]=Síťový nástroj +GenericName[csb]=Analizator séce +GenericName[cy]=Erfyn Rhwydwaith +GenericName[da]=Netværksværktøj +GenericName[de]=Netzwerkanalyse +GenericName[el]=Εργαλείο δικτύου +GenericName[eo]=Retanalizilo +GenericName[es]=Herramienta de redes +GenericName[et]=Võrguutiliit +GenericName[eu]=Sare tresna +GenericName[fa]=ابزار شبکه +GenericName[fi]=Verkkotyökalu +GenericName[fo]=Netamboð +GenericName[fr]=Analyseur réseau +GenericName[fy]=Netwurk-helpprogramma +GenericName[ga]=Uirlis Líonra +GenericName[gl]=Ferramenta de Rede +GenericName[he]=כלי רשת +GenericName[hi]=नेटवर्क औज़ार +GenericName[hr]=Mrežni alat +GenericName[hu]=Hálózatanalizáló +GenericName[id]=Kakak Jaringan +GenericName[is]=Netskoðunartól +GenericName[it]=Strumento di rete +GenericName[ja]=ネットワークツール +GenericName[ka]=ქსელის ხელსაწყო +GenericName[kk]=Желі бағыттарды талдау құралы +GenericName[km]=ឧបករណ៍​បណ្ដាញ +GenericName[ko]=네트워크 도구 +GenericName[lo]=ເຄືອ່ງມືລະບົບເຄືອຂ່າຍ +GenericName[lt]=Tinklo priemonė +GenericName[lv]=Tīkla Rīks +GenericName[mk]=Мрежна алатка +GenericName[mn]=Сүлжээ-Шинжлэл +GenericName[ms]=Alat Rangkaian +GenericName[mt]=Għodda tan-network +GenericName[nb]=Nettverksverktøy +GenericName[nds]=Warktüüch för't Nettwark +GenericName[ne]=सञ्जाल उपकरण +GenericName[nl]=Netwerk-hulpprogramma +GenericName[nn]=Nettverksverktøy +GenericName[nso]=Sebereka sa Kgokagano +GenericName[pa]=ਨੈੱਟਵਰਕ ਸੰਦ +GenericName[pl]=Analizator trasy pakietów +GenericName[pt]=Ferramenta de Redes +GenericName[pt_BR]=Ferramenta de rede +GenericName[ro]=Utilitar de rețea +GenericName[ru]=Анализатор сетевых маршрутов +GenericName[rw]=Igikoresho Urusobemiyoboro +GenericName[se]=Fierbmereaidu +GenericName[sk]=Sieťový nástroj +GenericName[sl]=Mrežno orodje +GenericName[sr]=Алат за мрежу +GenericName[sr@Latn]=Alat za mrežu +GenericName[ss]=Lithulusi leluchungechunge +GenericName[sv]=Nätverksverktyg +GenericName[ta]=வலைப்பின்னல் கருவி +GenericName[te]=నెట్వర్క్ పనిముట్టు +GenericName[tg]=Обзори Шабака +GenericName[th]=เครื่องมือระบบเครือข่าย +GenericName[tr]=Ağ Aracı +GenericName[tt]=Çeltär Qoralı +GenericName[uk]=Утиліта мережі +GenericName[uz]=Tarmoq vositasi +GenericName[uz@cyrillic]=Тармоқ воситаси +GenericName[ven]=Tshishumiswa tsha Vhudavhidzani +GenericName[vi]=Công cụ mạng +GenericName[wa]=Usteye rantoele +GenericName[xh]=Isixhobo Somsebenzi womnatha +GenericName[zh_CN]=网络工具 +GenericName[zh_TW]=網路工具 +GenericName[zu]=Ithuluzi Loxhumano olusakazekile +Exec=xtraceroute +Terminal=false +Icon=xtraceroute +Type=Application diff --git a/kappfinder/apps/Utilities/xutils/xcalc.desktop b/kappfinder/apps/Utilities/xutils/xcalc.desktop new file mode 100644 index 000000000..6dc3c4953 --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xcalc.desktop @@ -0,0 +1,124 @@ +[Desktop Entry] +Name=X Calc +Name[be]=Калькулятар X +Name[bn]=এক্স ক্যাল্ক +Name[br]=Jederez X +Name[csb]=X Kalkùlator +Name[de]=X-Calc +Name[eo]=XKalkulilo +Name[es]=Calculadora de X +Name[fa]=ماشین حساب X +Name[fi]=X-laskin +Name[fo]=X Roknari +Name[fr]=XCalc +Name[hi]=एक्स केल्क +Name[is]=X reiknivél +Name[ko]=X 계산기 +Name[lo]=ເຄື່ອງມືຄິດເລກຂອງ X +Name[lv]=X Kalkulators +Name[mn]=X-Calc +Name[nb]=X-kalkulator +Name[nds]=X-Calc +Name[ne]=X क्याल्क +Name[nn]=X-kalkulator +Name[pa]=X ਹਿਸਾਬੀ +Name[pl]=X Kalkulator +Name[pt]=Calculadora X +Name[ro]=Calculator X +Name[rw]=X Calc +Name[ss]=Ikhalikhuletha X +Name[sv]=X calc +Name[ta]=X கணக்கிடும் கருவி +Name[te]=ఎక్స్ కెల్క్ +Name[tg]=Мошини ҳисобии X +Name[th]=เครื่องคิดเลขของ X +Name[uz]=X uchun kalkulyator +Name[uz@cyrillic]=X учун калкулятор +Name[vi]=Máy tính X +Name[zh_CN]=X 计算器 +MimeType= +GenericName=Calculator +GenericName[af]=Sak rekenaar +GenericName[ar]=آلة حاسبة +GenericName[az]=Hesab Maşını +GenericName[be]=Калькулятар +GenericName[bg]=Калкулатор +GenericName[bn]=ক্যালকুলেটর +GenericName[br]=Jederez +GenericName[bs]=RPN kalkulator +GenericName[ca]=Calculadora +GenericName[cs]=Kalkulátor +GenericName[csb]=Kalkùlator +GenericName[cy]=Cyfrifiannell +GenericName[da]=Regnemaskine +GenericName[de]=Rechner +GenericName[el]=Αριθμομηχανή +GenericName[eo]=Kalkulilo +GenericName[es]=Calculadora +GenericName[et]=Kalkulaator +GenericName[eu]=Kalkulagailua +GenericName[fa]=ماشین حساب +GenericName[fi]=Laskin +GenericName[fo]=Roknimaskina +GenericName[fr]=Calculatrice +GenericName[fy]=Rekkenmasine +GenericName[ga]=Áireamhán +GenericName[gl]=Calculadora +GenericName[he]=מחשבון +GenericName[hi]=गणक +GenericName[hr]=Kalkulator +GenericName[hu]=Számológép +GenericName[is]=Vasareiknir +GenericName[it]=Calcolatrice +GenericName[ja]=計算機 +GenericName[ka]=კალკულატორი +GenericName[kk]=Калькулятор +GenericName[km]=ម៉ាស៊ីន​គិត​លេខ +GenericName[ko]=계산기 +GenericName[lo]=ເຄືອ່ງມືຄິດເລກ +GenericName[lt]=Skaičiuotuvas +GenericName[lv]=Kalkulators +GenericName[mk]=Дигитрон +GenericName[mn]=Тооны машин +GenericName[ms]=Kalkulator +GenericName[mt]=Kalkulatriċi +GenericName[nb]=Kalkulator +GenericName[nds]=Taschenreekner +GenericName[ne]=क्याल्कुलेटर +GenericName[nl]=Rekenmachine +GenericName[nn]=Kalkulator +GenericName[pa]=ਕੈਲਕੂਲੇਟਰ +GenericName[pl]=Kalkulator +GenericName[pt]=Calculadora +GenericName[pt_BR]=Calculadora +GenericName[ru]=Калькулятор +GenericName[rw]=Mubazi +GenericName[se]=Kalkuláhtor +GenericName[sk]=Kalkulačka +GenericName[sl]=Kalkulator +GenericName[sr]=Калкулатор +GenericName[sr@Latn]=Kalkulator +GenericName[ss]=I-khalikhuletha +GenericName[sv]=Miniräknare +GenericName[ta]=கணக்கிடும் கருவி +GenericName[te]=కెల్క్యులెటర్ +GenericName[tg]=Мошини ҳисоб +GenericName[th]=เครื่องคิดเลข +GenericName[tr]=Hesap Makinesi +GenericName[tt]=Sansanaq +GenericName[uk]=Калькулятор +GenericName[uz]=Kalkulyator +GenericName[uz@cyrillic]=Калкулятор +GenericName[ven]=Tshithusauvhalela +GenericName[vi]=Máy tính +GenericName[wa]=Carculete +GenericName[xh]=Umatshini wokubala +GenericName[zh_CN]=计算器 +GenericName[zh_TW]=計算機 +GenericName[zu]=Umshini wokubala +Exec=xcalc +Icon=xcalc +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Utilities/xutils/xclipboard.desktop b/kappfinder/apps/Utilities/xutils/xclipboard.desktop new file mode 100644 index 000000000..f8d7d5f68 --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xclipboard.desktop @@ -0,0 +1,146 @@ +[Desktop Entry] +Name=X Clipboard +Name[af]=X Klipbord +Name[az]=X Ara yaddaşı +Name[be]=Буфер абмену X +Name[bn]=এক্স ক্লিপবোর্ড +Name[br]=Golver X +Name[ca]=Portapapers X +Name[csb]=X Tacnik +Name[cy]=X Gludfwrdd +Name[da]=X Klippebord +Name[de]=X-Clipboard +Name[el]=Πρόχειρο του X +Name[eo]=XPoŝo +Name[es]=Portapapeles de X +Name[eu]=X arbela +Name[fa]=تخته یادداشت X +Name[fi]=X-leikepöytä +Name[fo]=X Setiborð +Name[fr]=XClipboard +Name[hi]=एक्स क्लिपबोर्ड +Name[hr]=X međuspremnik +Name[is]=X klippispjald +Name[ka]=X გაცვლის ბუფერი +Name[kk]=X алмасу буфері +Name[km]=ក្ដារតម្បៀតខ្ទាស់ X +Name[ko]=X 클립보드 +Name[lo]=ຄລິບບອດຂອງ X +Name[lv]=X Starpliktuve +Name[mk]=X Табла со исечоци +Name[mn]=X-Clipboard +Name[nb]=X-utklippstavle +Name[nds]=X-Clipboard +Name[ne]=X क्लिपबोर्ड +Name[nn]=X-utklippstavle +Name[oc]=Tapissaria X +Name[pa]=X ਕਲਿੱਪਬੋਰਡ +Name[pl]=X Schowek +Name[pt]=Área de Transferência do X +Name[ro]=Clipboard X +Name[ru]=Буфер обмена X +Name[rw]=X Ububikokoporora +Name[se]=X-čuohpusgirji +Name[ss]=Libhodi letinkhinobho X +Name[sv]=X clipboard +Name[ta]=X தற்காலிக நினைவு +Name[te]=ఎక్స్ క్లిప్ బోర్డ్ +Name[tg]=Тахтагираи X +Name[th]=คลิปบอร์ดของ X +Name[tr]=X Panosu +Name[uk]=Кишеня X +Name[uz]=X klipbord +Name[uz@cyrillic]=X клипборд +Name[ven]=Bodo yau Farisa ya X +Name[vi]=Bảng nháp X +Name[xh]=Ibhodi yokuqhoboshela ye X +Name[zh_CN]=X 剪贴板 +Name[zh_TW]=X 剪貼簿 +MimeType= +GenericName=Clipboard Viewer +GenericName[af]=Klipbord Aansig +GenericName[ar]=عارض الحافظة +GenericName[az]=Ara Yaddaş Nümayişçisi +GenericName[be]=Праглядальнік буфера абмену +GenericName[bg]=Преглед на системния буфер +GenericName[bn]=ক্লিপবোর্ড পরীক্ষক +GenericName[br]=Gweler ar golver +GenericName[bs]=Preglednik clipboard-a +GenericName[ca]=Visor del portapapers +GenericName[cs]=Prohlížeč schránky +GenericName[csb]=Przezérnik tacnika +GenericName[cy]=Gwelydd Clipfwrdd +GenericName[da]=Klippebordsfremviser +GenericName[de]=Inhalt der Zwischenablage anzeigen +GenericName[el]=Προβολέας πρόχειρου +GenericName[eo]=Rigardilo por la X-poŝenhavo +GenericName[es]=Visor del portapapeles +GenericName[et]=Lõikepuhvri vaatamine +GenericName[eu]=Arbelaren ikustailua +GenericName[fa]=مشاهده‌گر تخته یادداشت +GenericName[fi]=Leikepöydän näytin +GenericName[fo]=Setiborðsvísari +GenericName[fr]=Pour afficher le contenu du presse-papiers +GenericName[fy]=Klamboerd werjouwer +GenericName[ga]=Amharcán an Ghearrthaisce +GenericName[gl]=Visor do Portarretallos +GenericName[he]=מציג לוח עריכה +GenericName[hi]=क्लिपबोर्ड प्रदर्शक +GenericName[hr]=Preglednik međuspremnika +GenericName[hu]=Vágólap-nézegető +GenericName[is]=Klippispjaldsbirtir +GenericName[it]=Visualizzatore degli appunti +GenericName[ja]=クリップボードビューア +GenericName[ka]=ბუფერის სანახავი პროგრამა +GenericName[kk]=Алмасу буферді қарау құралы +GenericName[km]=កម្មវិធី​មើល​ក្ដារ​តម្បៀត​ខ្ទាស់ +GenericName[ko]=클립보드 뷰어 +GenericName[lo]=ຕົວສະແດງເນື້ອຫາຄລິບບອດ +GenericName[lt]=Laikinos talpyklės žiūriklis +GenericName[lv]=Starpliktuves Skatītājs +GenericName[mk]=Прегледувач на таблата со исечоци +GenericName[mn]=Клипборд доторхыг харуулагч +GenericName[ms]=Pemapar Klipbod +GenericName[mt]=Werrej tal-klipbord +GenericName[nb]=Utklippstavleframviser +GenericName[nds]=Kieker för de Twischenaflaag +GenericName[ne]=क्लिपबोर्ड दर्शक +GenericName[nl]=Klembordbeheer +GenericName[nn]=Utklippstavlevisar +GenericName[nso]=Selebeledi sa Clipboard +GenericName[pa]=ਕਲਿੱਪਬੋਰਡ ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka schowka +GenericName[pt]=Visualizador da Área de Transferência +GenericName[pt_BR]=Visualizador da Área de Transferência +GenericName[ro]=Vizualizor de clipboard +GenericName[ru]=Программа просмотра буфера X +GenericName[rw]=Ikigaragaza Ububikokoporora +GenericName[se]=Čuohpusgirječájeheaddji +GenericName[sk]=Prehliadač schránky +GenericName[sl]=Pregledovalnik odložišča +GenericName[sr]=Приказивач клипборда +GenericName[sr@Latn]=Prikazivač klipborda +GenericName[ss]=Sibuki sebhodi yetinkhinobho +GenericName[sv]=Klippbordsvisare +GenericName[ta]=ஒட்டுப்பலகைக் காட்டி +GenericName[te]=క్లిప్ బొర్డ్ వీక్షిణి +GenericName[tg]=Намоишгари тахтагира +GenericName[th]=ตัวแสดงเนื้อหาคลิปบอร์ด +GenericName[tr]=Pano Görüntüleyici +GenericName[tt]=Kesä Kürsätkeç +GenericName[uk]=Переглядач кишені +GenericName[uz]=Klipbordni koʻruvchi +GenericName[uz@cyrillic]=Клипбордни кўрувчи +GenericName[ven]=Muvhoni wa Bodo yau Farisa +GenericName[vi]=Trình xem bảng nháp +GenericName[wa]=Håyneu d' tchapea emacralé +GenericName[xh]=Umboniseli Webhodi eqhoboshayo +GenericName[zh_CN]=剪贴板查看器 +GenericName[zh_TW]=剪貼簿檢視器 +GenericName[zu]=Umbukisi Webhodi elibophayo +Exec=xclipboard +Icon=xclipboard +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Utilities/xutils/xclock.desktop b/kappfinder/apps/Utilities/xutils/xclock.desktop new file mode 100644 index 000000000..8b0bae5fd --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xclock.desktop @@ -0,0 +1,152 @@ +[Desktop Entry] +SwallowTitle=xclock +SwallowTitle[no]=xclock +SwallowTitle[pl]=xclock +SwallowExec=xclock -padding 0 +MimeType= +Name=X Clock +Name[af]=X Horlosie +Name[ar]=ساعة X +Name[az]=X Saatı +Name[be]=Гадзіннік X +Name[bn]=এক্স-ক্লক +Name[br]=Eureier X +Name[bs]=X Sat +Name[ca]=Rellotge X +Name[csb]=X Zédżer +Name[cy]=X Cloc +Name[da]=X Ur +Name[de]=X-Clock +Name[el]=Ρολόι X +Name[eo]=XHorloĝo +Name[es]=Reloj de X +Name[eu]=X erlojua +Name[fa]=ساعت X +Name[fi]=X-kello +Name[fr]=XClock +Name[ga]=Clog X +Name[hi]=एक्स क्लॉक +Name[hr]=X sat +Name[is]=X klukka +Name[ka]=X საათი +Name[kk]=X сағаты +Name[km]=នាឡិកា X +Name[ko]=X 시계 +Name[lo]=ໂມງຂອງ X +Name[lv]=X Pulkstenis +Name[mk]=X Часовник +Name[mn]=X-Clock +Name[nb]=X-klokke +Name[nds]=X-Clock +Name[ne]=X घडी +Name[nn]=X-klokke +Name[nso]=X Sesupanako +Name[oc]=orlotge X +Name[pa]=X ਘੜੀ +Name[pt]=Relógio do X +Name[ro]=Ceas X +Name[ru]=Часы для X +Name[rw]=X Isaha +Name[se]=X-diibmu +Name[ss]=X enhloko +Name[sv]=X clock +Name[ta]=X கடிகாரம் +Name[te]=ఎక్స్ గడియారం +Name[tg]=Соати X +Name[th]=นาฬิกาของ X +Name[tr]=X Saati +Name[tt]=X Säğät +Name[uz]=X uchun soat +Name[uz@cyrillic]=X учун соат +Name[ven]=Tshifhinga tsha X +Name[vi]=Đồng hồ X +Name[xh]=Ikloko ye X +Name[zh_CN]=X 时钟 +Name[zh_TW]=X 時鐘 +Exec=xclock +Icon=xclock +Path= +Type=Application +GenericName=Clock +GenericName[af]=Horlosie +GenericName[ar]=ساعة +GenericName[az]=Saat +GenericName[be]=Гадзіннік +GenericName[bg]=Часовник +GenericName[bn]=ঘড়ি +GenericName[br]=Eurier +GenericName[bs]=Sat +GenericName[ca]=Rellotge +GenericName[cs]=Hodiny +GenericName[csb]=Zédżer +GenericName[cy]=Cloc +GenericName[da]=Ur +GenericName[de]=Uhr +GenericName[el]=Ρολόι +GenericName[eo]=Iu horloĝo +GenericName[es]=Reloj +GenericName[et]=Kell +GenericName[eu]=Erlojua +GenericName[fa]=ساعت +GenericName[fi]=Kello +GenericName[fo]=Ur +GenericName[fr]=Horloge +GenericName[fy]=Klok +GenericName[ga]=Clog +GenericName[gl]=Reloxo +GenericName[he]=שעון +GenericName[hi]=घड़ी +GenericName[hr]=Sat +GenericName[hu]=Óra +GenericName[id]=Jam +GenericName[is]=Klukka +GenericName[it]=Orologio +GenericName[ja]=時計 +GenericName[ka]=საათი +GenericName[kk]=Сағат +GenericName[km]=នាឡិកា +GenericName[lo]=ໂມງ +GenericName[lt]=Laikrodis +GenericName[lv]=Pulkstenis +GenericName[mk]=Часовник +GenericName[mn]=Цаг +GenericName[ms]=Jam +GenericName[mt]=Arloġġ +GenericName[nb]=Klokke +GenericName[nds]=Klock +GenericName[ne]=घडी +GenericName[nl]=Klok +GenericName[nn]=Klokke +GenericName[nso]=Sesupanako +GenericName[pa]=ਘੜੀ +GenericName[pl]=Zegar +GenericName[pt]=Relógio +GenericName[pt_BR]=Relógio +GenericName[ro]=Ceas +GenericName[ru]=Часы +GenericName[rw]=Isaha +GenericName[se]=Diibmu +GenericName[sk]=Hodiny +GenericName[sl]=Ura +GenericName[sr]=Часовник +GenericName[sr@Latn]=Časovnik +GenericName[ss]=Liwashi +GenericName[sv]=Klocka +GenericName[ta]=கடிகாரம் +GenericName[te]=గడియారం +GenericName[tg]=Соат +GenericName[th]=นาฬิกา +GenericName[tr]=Saat +GenericName[tt]=Säğät +GenericName[uk]=Годинник +GenericName[uz]=Soat +GenericName[uz@cyrillic]=Соат +GenericName[ven]=Tshifhinga +GenericName[vi]=Đồng hồ +GenericName[wa]=Ôrlodje +GenericName[xh]=Ikloko +GenericName[zh_CN]=时钟 +GenericName[zh_TW]=時鐘 +GenericName[zu]=Iwashi +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Utilities/xutils/xconsole.desktop b/kappfinder/apps/Utilities/xutils/xconsole.desktop new file mode 100644 index 000000000..23bf6c46e --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xconsole.desktop @@ -0,0 +1,142 @@ +[Desktop Entry] +Name=X Console +Name[af]=X Konsole +Name[az]=X Konsol +Name[be]=Кансоль X +Name[bn]=এক্স-কনসোল +Name[br]=Letrin X +Name[bs]=X konzola +Name[ca]=Consola X +Name[csb]=X Kònsola +Name[cy]=X Consol +Name[da]=X Konsol +Name[de]=X-Console +Name[el]=Κονσόλα X +Name[eo]=XKonzolo +Name[es]=Consola de X +Name[eu]=X kontsola +Name[fa]=پیشانۀ X +Name[fi]=X-konsoli +Name[fr]=XConsole +Name[ga]=Consól X +Name[hi]=एक्स कंसोल +Name[hr]=X konzola +Name[is]=X stjórnskjár +Name[ka]= X კონსოლი +Name[kk]=X консолі +Name[km]=កុងសូល X +Name[ko]=X 콘솔 +Name[lo]=ຄອນໂຊນຂອງ X +Name[lv]=X Konsole +Name[mk]=X Конзола +Name[mn]=X-Console +Name[nb]=X-konsoll +Name[nds]=X-Console +Name[ne]=X कन्सोल +Name[nn]=X-konsoll +Name[nso]=X Boitebatso +Name[oc]=Consola X +Name[pa]=X ਕੰਨਸੋਲ +Name[pl]=X Konsola +Name[pt]=Consola do X +Name[ro]=Consolă X +Name[ru]=Консоль X +Name[rw]=X Konsole +Name[se]=X-konsolla +Name[sk]=X Konzola +Name[sv]=X console +Name[ta]=X கன்சோல் +Name[te]=ఎక్స్ కంసొల్ +Name[tg]=Консоли X +Name[th]=คอนโซลของ X +Name[tr]=X Konsol +Name[tt]=X Konsolı +Name[uz]=X uchun terminal +Name[uz@cyrillic]=X учун терминал +Name[vi]=Bàn điều khiển X +Name[xh]=Konsole ye X +Name[zh_CN]=X 控制台 +Name[zh_TW]=X 控制台 +MimeType= +GenericName=Console Message Viewer +GenericName[af]=Konsole Boodskap Aansig +GenericName[az]=Konsol İsmarış Nümayişçisi +GenericName[be]=Праглядальнік кансольных паведамленняў +GenericName[bg]=Преглед на съобщенията в конзолата +GenericName[bn]=কনসোল বার্তাবলী প্রদর্শক +GenericName[bs]=Preglednik poruka na konzoli +GenericName[ca]=Visor dels missatges de la consola +GenericName[cs]=Prohlížeč zpráv z konzole +GenericName[csb]=Przezérnik wiadłów kònsolë +GenericName[cy]=Gwelydd Negeseuon Terfynell +GenericName[da]=Fremviser af konsolmeddelelser +GenericName[de]=Betrachter für Konsolenmeldungen +GenericName[el]=Προβολέας μηνυμάτων κονσόλας +GenericName[eo]=Rigardilo por Konzolo-mesaĝoj +GenericName[es]=Visor de mensajes de consola +GenericName[et]=Konsooliteadete vaatamine +GenericName[eu]=Konsolako mezu ikustailua +GenericName[fa]=مشاهده‌گر پیام پیشانه +GenericName[fi]=Konsoliviestien näytin +GenericName[fr]=Pour afficher les messages console +GenericName[fy]=Consolemeldingen-werjouwer +GenericName[gl]=Visualizador de Mensaxes da Consola +GenericName[he]=מציג הודעות מסוף +GenericName[hi]=कंसोल संदेश प्रदर्शक +GenericName[hr]=Preglednik konzolnih poruka +GenericName[hu]=Parancssoros üzenetnézegető +GenericName[is]=Skilaboðabirtir stjórnskjás +GenericName[it]=Visualizzatore messaggi della console +GenericName[ja]=コンソールメッセージビューア +GenericName[ka]=პროგრამა კონსოლის შეტყობინებათა სანახავად +GenericName[kk]=Консоль хабарларын қарау құралы +GenericName[km]=កម្មវិធី​មើល​សារ​កុងសូល +GenericName[ko]=콘솔 메시지 뷰어 +GenericName[lo]=ຕົວສະແດງຂໍ້ຄວາມຂອງຄອນໂຊນ +GenericName[lt]=Konsolės pranešimų žiūriklis +GenericName[lv]=Konsoles Ziņojumu Skatītājs +GenericName[mk]=Прегледувач на конзолни пораки +GenericName[mn]=Консолын э-захиа харагч +GenericName[ms]=Pemapar Mesej Konsol +GenericName[mt]=Werrej ta' messaġġi tal-konsol +GenericName[nb]=Konsollmeldingsviser +GenericName[nds]=Kieker för Konsoolmellen +GenericName[ne]=कन्सोल सन्देश दर्शक +GenericName[nl]=Consolemeldingen-weergave +GenericName[nn]=Konsollmeldingsvisar +GenericName[nso]=Lebatsa Molebeledi wa Molaetsa +GenericName[pa]=ਕੰਨਸੋਲ ਸੁਨੇਹਾ ਦਰਸ਼ਕ +GenericName[pl]=Podgląd komunikatów konsoli +GenericName[pt]=Visualizador de Mensagens da Consola +GenericName[pt_BR]=Visualizador de Mensagens do Console +GenericName[ro]=Vizualizor mesaje consolă +GenericName[ru]=Программа просмотра сообщений консоли +GenericName[rw]=Ikigaragaza Konsole y'Ubutumwa +GenericName[se]=Čájeha vuogádatdieđuid +GenericName[sk]=Prehliadač správ z konzole +GenericName[sl]=Pregledovalnik konzolnih sporočil +GenericName[sr]=Приказивач конзолних порука +GenericName[sr@Latn]=Prikazivač konzolnih poruka +GenericName[ss]=Sibuki sembiko we Console +GenericName[sv]=Visare för konsollmeddelanden +GenericName[ta]=ஆறுதலுக்கான தகவல் காட்சி +GenericName[tg]=Намоишгари пайғоми консол +GenericName[th]=ตัวแสดงข้อความของคอนโซล +GenericName[tr]=Konsol Mesajı Görüntüleyici +GenericName[tt]=Konsol Xäbärlären Kürsätkeç +GenericName[uk]=Переглядач повідомлень консолі +GenericName[uz]=Terminalning xabarlarini koʻruvchi +GenericName[uz@cyrillic]=Терминалнинг хабарларини кўрувчи +GenericName[ven]=Muvhoni wa Mulaedza wa Console +GenericName[vi]=Trình xem thông điệp bàn điều khiển +GenericName[wa]=Håyneu d' messaedjes di console +GenericName[xh]=Umboniseli Womyalezo we Konsole +GenericName[zh_CN]=控制台信息查看器 +GenericName[zh_TW]=控制台訊息檢視器 +GenericName[zu]=Umbukisi Womyalezo Wekhonsoli +Icon=terminal +Exec=xconsole +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Utilities/xutils/xload.desktop b/kappfinder/apps/Utilities/xutils/xload.desktop new file mode 100644 index 000000000..a6dd72a0a --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xload.desktop @@ -0,0 +1,130 @@ +[Desktop Entry] +Exec=xload +SwallowExec=xload -nolabel -fg green -bg Black -hl red -update 3 -geometry 25x25 +SwallowTitle=xload +SwallowTitle[no]=xload +SwallowTitle[es]=xload +SwallowTitle[pl]=xload +Type=Application +Name=X Load +Name[af]=X Las +Name[az]=X Yük +Name[bn]=এক্স লোড +Name[br]=Karg X +Name[ca]=Càrrega X +Name[csb]=X Òbcãżenié +Name[da]=X Belastning +Name[de]=X-Load +Name[eo]=XŜarĝo +Name[es]=XLoad +Name[fa]=بارگذاری X +Name[fi]=X-kuorma +Name[fr]=XLoad +Name[ga]=Lód X +Name[hi]=एक्स लोड +Name[hr]=X opterećenje +Name[is]=X álagsmælir +Name[lo]=ໂຫລດລະບົບຂອງ X +Name[lv]=X Slodze +Name[mn]=X-Load +Name[nb]=X-last +Name[nds]=X-Load +Name[ne]=X लोड +Name[nn]=X-last +Name[nso]=X Morwalo +Name[oc]=Carga X +Name[pa]=X ਲੋਡ +Name[pl]=X Obciążenie +Name[pt]=Carga do X +Name[rw]=X Gutangira +Name[se]=X-noađđi +Name[ss]=Umtfwalo X +Name[sv]=X load +Name[ta]=X ஏற்றம் +Name[te]=ఎక్స్ లోడ్ +Name[tg]=Боргузории X +Name[tr]=X Yük +Name[tt]=X Yöklänu +Name[ven]=Muhwalo wa X +Name[vi]=Tải X +Name[zh_CN]=X 负载 +Name[zh_TW]=X 負載 +GenericName=Monitors System Load +GenericName[af]=Monitor Stelsel Las +GenericName[ar]=يراقب حمولة النظام +GenericName[az]=Sistem Yükünü İzlər +GenericName[be]=Назіральнік загрузкі сістэмы +GenericName[bg]=Мониторинг на системата +GenericName[bn]=সিস্টেম লোড মনিটর করে +GenericName[bs]=Praćenje opterećenja sistema +GenericName[ca]=Monitoritza la càrrega del sistema +GenericName[cs]=Monitor zatížení systému +GenericName[csb]=Wëdowiédzô ò òbcãzeniô systemë +GenericName[cy]=Monitro Llwyth y System +GenericName[da]=Overvåger systemets belastning +GenericName[de]=Informationen zur Systemauslastung +GenericName[el]=Καταγράφει το φόρτο του συστήματος +GenericName[eo]=Montras la sistemŝarĝon +GenericName[es]=Monitoriza la carga del sistema +GenericName[et]=Süsteemi koormuse monitor +GenericName[eu]=Sistemaren zama monitorizatzen du +GenericName[fa]=بارگذاری سیستم نمایشگرها +GenericName[fi]=Seuraa järjestelmän kuormaa +GenericName[fr]=Pour suivre la charge du système +GenericName[fy]=Systeembelêsting beweitsje +GenericName[gl]=Monitorea a Carga do Sistema +GenericName[he]=צג עומס של המערכת +GenericName[hi]=तंत्र लोड मॉनीटर करता है +GenericName[hr]=Nadzor opterećenja sustava +GenericName[hu]=Rendszermonitor +GenericName[is]=Upplýsingar um ástand kerfis +GenericName[it]=Mostra il carico del sistema +GenericName[ja]=システムロードを監視します +GenericName[ka]=სისტემის ჩატვირთვის მონიტორი +GenericName[kk]=Жүйенің жүктелу мониторы +GenericName[km]=ត្រួតពិនិត្យ​ការ​ផ្ទុក​ប្រព័ន្ធ +GenericName[ko]=시스템 부하 관찰 +GenericName[lo]=ຕວດສອບໂຫລດຂອງລະບົບ +GenericName[lt]=Rodo sistemos apkrovą +GenericName[lv]=Rāda Sistēmas Noslodzi +GenericName[mk]=Надгледувач на оптоварувањето на системот +GenericName[mn]=Системийн ачааллыг харуулах +GenericName[ms]=Muat Sistem Monitor +GenericName[mt]=Jimmonitorja t-tagħbija tas-sistema +GenericName[nb]=Overvåker systembelastningen +GenericName[nds]=Systeemlast-Kieker +GenericName[ne]=मोनिटर प्रणाली लोड +GenericName[nl]=Systeembelasting bewaken +GenericName[nn]=Overvakar systembelastinga +GenericName[nso]=Lebelela Morwalo wa System +GenericName[pa]=ਸਿਸਟਮ ਲੋਡ ਦੀ ਨਿਗਰਾਨੀ +GenericName[pl]=Informacje o obciążeniu systemu +GenericName[pt]=Monitorização da Carga do Sistema +GenericName[pt_BR]=Monitora a Carga do Sistema +GenericName[ro]=Monitorizează încărcarea sistemului +GenericName[ru]=Монитор загрузки системы +GenericName[rw]=Gutangira Sisitemu Mugaragaza +GenericName[se]=Goziha vuogádatnoađi +GenericName[sk]=Monitor zaťaženia systému +GenericName[sl]=Pregleduje obremenjenost sistema +GenericName[sr]=Прати оптерећеност система +GenericName[sr@Latn]=Prati opterećenost sistema +GenericName[ss]=Umtfwalo wemshini wetilawuli +GenericName[sv]=Övervakar systemets belastning +GenericName[ta]=திரை சாதனத்தை ஏற்றுதல் +GenericName[tg]=Назорат бар боргузории система +GenericName[th]=เฝ้าดูภาระของระบบ +GenericName[tr]=Sistem yükünü izler +GenericName[tt]=Sistem Yöklänü Küzätkeçe +GenericName[uk]=Стежить за завантаженням системи +GenericName[uz]=Tizim yuklanganini nazorat qilish +GenericName[uz@cyrillic]=Тизим юкланганини назорат қилиш +GenericName[ven]=Muhwalo wa sisitemu yau linda +GenericName[vi]=Theo dõi Tải Hệ thống +GenericName[wa]=Corwaitoe d' tchedje sistinme +GenericName[xh]=Iphatha Ulayisho Lwendlela yokusebenza +GenericName[zh_CN]=监视系统负载 +GenericName[zh_TW]=監視系統負載 +GenericName[zu]=Iqikelela Ukulayisha kwesistimu +Icon=xload +X-KDE-StartupNotify=true diff --git a/kappfinder/apps/Utilities/xutils/xmag.desktop b/kappfinder/apps/Utilities/xutils/xmag.desktop new file mode 100644 index 000000000..8f60c85cb --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xmag.desktop @@ -0,0 +1,144 @@ +[Desktop Entry] +Exec=xmag +Type=Application +Name=X Magnifier +Name[af]=X Vergroter +Name[ar]=عدسة التكبير X +Name[az]=X Böyüdücü +Name[be]=Павелічальная лупа X +Name[bn]=এক্স-ম্যাগনিফায়ার +Name[br]=Kresker X +Name[bs]=X povećalo +Name[cs]=Lupa +Name[csb]=Zwikszanié +Name[da]=X Forstørrer +Name[de]=X-Vergrößerer +Name[eo]=X-Pligrandigilo +Name[es]=Ampliador de X +Name[eu]=X handitzailea +Name[fa]=ذره‌بین X +Name[fi]=X-suurennuslasi +Name[fr]=XMag +Name[ga]=Formhéadaitheoir X +Name[hi]=एक्स मैग्नीफायर +Name[hr]=X povećalo +Name[is]=X stækkunargler +Name[it]=Lente di ingrandimento +Name[ka]=X გამადიდებელი +Name[kk]=X ұлғайтқышы +Name[ko]=X 돋보기 +Name[lo]=ແວ່ນຂະຫຍາຍຂອງ X +Name[lt]=X Padidinamasis stiklas +Name[lv]=X Lupa +Name[mk]=X Лупа +Name[mn]=X-Томруулагч +Name[nb]=X-forstørrelsesglass +Name[nds]=X-Magnifier +Name[ne]=X विस्तारक +Name[nn]=X-forstørrar +Name[oc]=X Manhifier +Name[pa]=X ਵੱਡਦਰਸ਼ੀ +Name[pl]=Powiększenie +Name[pt]=Lupa X +Name[ro]=Lupă X Window +Name[ru]=Увеличитель для X +Name[rw]=X Mutubuzi +Name[se]=X-stuorideaddji +Name[sk]=X lupa +Name[sl]=Povečevalnik X +Name[ss]=Sikhulisi X +Name[sv]=X magnifier +Name[ta]=X பெரிதாக்கி +Name[te]=ఎక్స్ మాగ్నిఫైయర్ +Name[tg]=Калонкунанда барои X +Name[th]=แว่นขยายของ X +Name[tr]=X Yakınlaştırıcı +Name[tt]=X Ereräytkeç +Name[uk]=Лупа X +Name[uz]=X uchun kattalashtiruvchi +Name[uz@cyrillic]=X учун катталаштирувчи +Name[ven]=Muengedzi wa X +Name[vi]=Kính lúp X +Name[xh]=Umenzi mkhulu we X +Name[zh_CN]=X 放大镜 +Name[zh_TW]=X 放大鏡 +GenericName=Desktop Magnifier +GenericName[af]=Werkskerm Vergroter +GenericName[ar]=تكبير سطح المكتب +GenericName[az]=Masa Üstü Böyüdücüsü +GenericName[be]=Павелічальная лупа +GenericName[bg]=Увеличаваща лупа +GenericName[bn]=ডেস্কটপ বড় করে দেখায় +GenericName[bs]=Povećalo radne površine +GenericName[ca]=Augmenta l'escriptori +GenericName[cs]=Lupa pro pracovní plochu +GenericName[csb]=Zwikszanié pùltu +GenericName[cy]=Chwyddwr Penbwrdd +GenericName[da]=Desktopforstørrer +GenericName[de]=Zoom für Arbeitsfläche +GenericName[el]=Μεγέθυνση επιφάνειας εργασίας +GenericName[eo]=Tabula pligrandigilo +GenericName[es]=Ampliador del escritorio +GenericName[et]=Töölaua suurendusklaas +GenericName[eu]=Mahaigain handitzailea +GenericName[fa]=ذره‌بین رومیزی +GenericName[fi]=Työpöydän suurennuslasi +GenericName[fr]=Loupe pour le bureau +GenericName[fy]=Fergrutglês +GenericName[ga]=Formhéadaitheoir Deisce +GenericName[gl]=Lupa do Escritório +GenericName[he]=זכוכית מגדלת לשולחן העבודה +GenericName[hi]=डेस्कटॉप का आकार बढ़ाने वाला +GenericName[hr]=Povećalo za radnu površinu +GenericName[hu]=Nagyító +GenericName[is]=Stækkunargler á skjáborðið +GenericName[it]=Lente di ingrandimento del desktop +GenericName[ja]=デスクトップの拡大鏡 +GenericName[ka]=სამუშაო დაფის გამადიდებელი +GenericName[kk]=Үстел көрініс ұлғайтқышы +GenericName[km]=កម្មវិធី​ពង្រីក​ផ្ទៃតុ +GenericName[ko]=데스크톱 돋보기 +GenericName[lo]=ເຄືອ່ງມືແວ່ນຂະຫຍາຍພື້ນທີ່ທຳງານ +GenericName[lt]=Darbastalio padidinamasis stiklas +GenericName[lv]=Darbvirsmas Lupa +GenericName[mk]=Лупа за работната површина +GenericName[mn]=Ажлын тавцанын маштаб +GenericName[ms]=Pembesar Desktop +GenericName[mt]=Ikabbar id-desktop +GenericName[nb]=Skrivebordsforstørrer +GenericName[nds]=Luup för den Schriefdisch +GenericName[ne]=डेस्कटप विस्तारक +GenericName[nl]=Vergrootglas +GenericName[nn]=Skrivebordsforstørrar +GenericName[nso]=Sematlafatsi sa Desktop +GenericName[pa]=ਵੇਹੜਾ ਵੱਡਦਰਸ਼ੀ +GenericName[pl]=Powiększenie pulpitu +GenericName[pt]=Ampliador do Ecrã +GenericName[pt_BR]=Ampliador de Área de Trabalho +GenericName[ro]=Lupă de mărit pentru ecran +GenericName[ru]=Увеличитель рабочего стола +GenericName[rw]=Mutubuzi Ibiro +GenericName[se]=Čállinbeavdestuorideaddji +GenericName[sk]=Lupa pracovnej plochy +GenericName[sl]=Povečevalnik namizja +GenericName[sr]=Увеличавач радне површине +GenericName[sr@Latn]=Uveličavač radne površine +GenericName[ss]=Sikhulisi se Desktop +GenericName[sv]=Skrivbordsförstorare +GenericName[ta]=மேல்மேசை பெரிதுபடுத்துதல் +GenericName[tg]=Калонкунандаи мизи корӣ +GenericName[th]=แว่นขยายพื้นที่หน้าจอ +GenericName[tr]=Masaüstü Büyüteci +GenericName[tt]=Östäl Ereräytkeç +GenericName[uk]=Лупа для стільниці +GenericName[uz]=Ish stolini kattalashtiruvchi +GenericName[uz@cyrillic]=Иш столини катталаштирувчи +GenericName[ven]=Muengedzi wa Desikethopo +GenericName[vi]=Phóng to Màn hình nền +GenericName[wa]=Agrandixheu d' sicribanne +GenericName[xh]=Umenzi mkhulu we Desktop +GenericName[zh_CN]=桌面放大镜 +GenericName[zh_TW]=桌面放大鏡 +GenericName[zu]=Umkhulisi we-Desktop +Icon=xmag +X-KDE-StartupNotify=false diff --git a/kappfinder/apps/Utilities/xutils/xterm.desktop b/kappfinder/apps/Utilities/xutils/xterm.desktop new file mode 100644 index 000000000..2367f803e --- /dev/null +++ b/kappfinder/apps/Utilities/xutils/xterm.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +MimeType= +GenericName=Terminal Program +GenericName[af]=Terminaal Program +GenericName[ar]=برنامج مطراف +GenericName[az]=Terminal Proqramı +GenericName[be]=Тэрмінал +GenericName[bg]=Терминална програма +GenericName[bn]=টার্মিনাল প্রোগ্রাম +GenericName[br]=Goulev termenell +GenericName[bs]=Terminalni program +GenericName[ca]=Programa de terminal +GenericName[cs]=Terminálový program +GenericName[csb]=Programa terminala +GenericName[cy]=Rhaglen Terfynell +GenericName[da]=Terminalprogram +GenericName[de]=Terminalprogramm +GenericName[el]=Πρόγραμμα τερματικού +GenericName[eo]=Terminalimitaĵo +GenericName[es]=Programa de terminal +GenericName[et]=Terminaliemulaator +GenericName[eu]=Terminal programa +GenericName[fa]=برنامۀ پایانه +GenericName[fi]=Komentoikkunaohjelma +GenericName[fr]=Terminal +GenericName[fy]=Terminalprogramma +GenericName[ga]=Clár Teirminéil +GenericName[gl]=Programa de Terminal +GenericName[he]=תוכנית מסוף +GenericName[hi]=टर्मिनल प्रोग्राम +GenericName[hr]=Terminalski program +GenericName[hu]=Parancsértelmező +GenericName[id]=Program Terminal +GenericName[is]=Skjáhermir +GenericName[it]=Programma terminale +GenericName[ja]=ターミナルプログラム +GenericName[ka]=პროგრამა ტერმინალისთვის +GenericName[kk]=Терминал бағдарламасы +GenericName[km]=កម្មវិធី​ស្ថានីយ +GenericName[ko]=터미널 프로그램 +GenericName[lo]=ອັບພລິກເຄເຊິນ ເທີມີນອນ +GenericName[lt]=Terminalo programa +GenericName[lv]=Termināla Programma +GenericName[mk]=Терминалска програма +GenericName[mn]=Терминал-Програм +GenericName[ms]=Program Terminal +GenericName[mt]=Programm ta' terminal +GenericName[nb]=Terminalprogram +GenericName[nds]=Terminal-Programm +GenericName[ne]=टर्मिनल कार्यक्रम +GenericName[nl]=Terminalprogramma +GenericName[nn]=Terminalprogram +GenericName[nso]=Lenaneo la Terminal +GenericName[pa]=ਟਰਮੀਨਲ ਪਰੋਗਰਾਮ +GenericName[pl]=Program terminala +GenericName[pt]=Programa de Terminal +GenericName[pt_BR]=Terminal +GenericName[ro]=Program terminal +GenericName[ru]=Терминал +GenericName[rw]=Porogaramu Umukiriya +GenericName[se]=Terminálaprográmma +GenericName[sk]=Terminál +GenericName[sl]=Terminalski program +GenericName[sr]=Терминалски програм +GenericName[sr@Latn]=Terminalski program +GenericName[ss]=Luhlelo lwesikhungo +GenericName[sv]=Terminalprogram +GenericName[ta]=கடைசி நிரலி +GenericName[te]=టెర్మినల్ కార్యక్రమం +GenericName[tg]=Барномаи поёна +GenericName[th]=โปรแกรมเทอร์มินัล +GenericName[tr]=Terminal Programı +GenericName[tt]=Terminal Yazılımı +GenericName[uk]=Програма терміналу +GenericName[uz]=Terminal dasturi +GenericName[uz@cyrillic]=Терминал дастури +GenericName[ven]=Mbekanyamushumo ya Mafhedziselo +GenericName[vi]=Trình đầu cuối +GenericName[wa]=Programe di terminå +GenericName[xh]=Inkqubo Yesixhobo sangaphandle sekhompyutha +GenericName[zh_CN]=终端程序 +GenericName[zh_TW]=終端機程式 +GenericName[zu]=Uhlelo lwemisebenzi lwangaohandle +Name=X Terminal +Name[af]=X Terminaal +Name[ar]=مطراف X +Name[az]=X Terminalı +Name[be]=Тэрмінал X +Name[bn]=এক্স টার্মিনাল +Name[br]=Termenell X +Name[ca]=Terminal X +Name[cs]=X Terminál +Name[cy]=X Terfynell +Name[de]=X-Terminal +Name[el]=Τερματικό X +Name[eo]=XTerminalo +Name[es]=Terminal de X +Name[eu]=X terminala +Name[fa]=پایانۀ X +Name[fi]=X-terminaali +Name[fr]=XTerm +Name[ga]=Teirminéal X +Name[hi]=एक्स टर्मिनल +Name[hr]=X terminal +Name[is]=X skjáhermir +Name[ja]=X ターミナル +Name[ka]=X-ტერმინალი +Name[kk]=X терминалы +Name[km]=ស្ថានីយ X +Name[ko]=X 터미널 +Name[lo]=ເທີມີນອນຂອງ X +Name[lt]=X Terminalas +Name[lv]=X Termināls +Name[mk]=X Терминал +Name[mn]=X-Терминал +Name[nb]=X-terminal +Name[nds]=X-Terminal +Name[ne]=X टर्मिनल +Name[nn]=X-terminal +Name[oc]=Terminal X +Name[pa]=X ਟਰਮੀਨਲ +Name[pt]=Terminal do X +Name[pt_BR]=Terminal X +Name[ro]=Terminal X +Name[ru]=X-терминал +Name[rw]=X Igihera +Name[sk]=X Terminál +Name[sl]=Terminal X +Name[ss]=Sikhungo X +Name[sv]=X terminal +Name[ta]=X கடைசி +Name[te]=ఎక్స్ టెర్మినల్ +Name[tg]=Поёнаи X +Name[th]=เทอร์มินัลของ X +Name[tr]=X Uçbirimi +Name[uk]=X-Термінал +Name[uz]=X uchun terminal +Name[uz@cyrillic]=X учун терминал +Name[vi]=Thiết bị cuối X +Name[wa]=Terminå X +Name[xh]=Isiphelo sendlela se X +Name[zh_CN]=X 终端 +Name[zh_TW]=X 終端機 +Exec=xterm +Icon=terminal +Path= +Type=Application +Terminal=false +X-KDE-StartupNotify=true +X-KDE-AuthorizeAction=shell_access diff --git a/kappfinder/common.cpp b/kappfinder/common.cpp new file mode 100644 index 000000000..c6cd95a65 --- /dev/null +++ b/kappfinder/common.cpp @@ -0,0 +1,158 @@ +/* + KAppfinder, the KDE application finder + + Copyright (c) 2002-2003 Tobias Koenig + + Based on code written by Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include + +#include +#include + +#include + +#include "common.h" + +#define DBG_CODE 1213 + +void copyFile( const QString &inFileName, const QString &outFileName ) +{ + QFile inFile( inFileName ); + if ( inFile.open( IO_ReadOnly ) ) { + QFile outFile( outFileName ); + if ( outFile.open( IO_WriteOnly ) ) { + outFile.writeBlock( inFile.readAll() ); + outFile.close(); + } + + inFile.close(); + } +} + +bool scanDesktopFile( QPtrList &appCache, const QString &templ, + QString destDir ) +{ + KDesktopFile desktop( templ, true ); + + // find out where to put the .desktop files + QString destName; + if ( destDir.isNull() ) + destDir = KGlobal::dirs()->saveLocation( "apps" ); + else + destDir += "/"; + + // find out the name of the file to store + destName = templ; + int pos = templ.find( "kappfinder/apps/" ); + if ( pos > 0 ) + destName = destName.mid( pos + strlen( "kappfinder/apps/" ) ); + + // calculate real dir and filename + destName = destDir + destName; + pos = destName.findRev( '/' ); + if ( pos > 0 ) { + destDir = destName.left( pos ); + destName = destName.mid( pos + 1 ); + } + + // determine for which executable to look + QString exec = desktop.readPathEntry( "TryExec" ); + if ( exec.isEmpty() ) + exec = desktop.readPathEntry( "Exec" ); + pos = exec.find( ' ' ); + if ( pos > 0 ) + exec = exec.left( pos ); + + // try to locate the binary + QString pexec = KGlobal::dirs()->findExe( exec, + QString( ::getenv( "PATH" ) ) + ":/usr/X11R6/bin:/usr/games" ); + if ( pexec.isEmpty() ) { + kdDebug(DBG_CODE) << "looking for " << exec.local8Bit() + << "\t\tnot found" << endl; + return false; + } + + AppLnkCache *cache = new AppLnkCache; + cache->destDir = destDir; + cache->destName = destName; + cache->templ = templ; + cache->item = 0; + + appCache.append( cache ); + + kdDebug(DBG_CODE) << "looking for " << exec.local8Bit() + << "\t\tfound" << endl; + return true; +} + +void createDesktopFiles( QPtrList &appCache, int &added ) +{ + AppLnkCache* cache; + for ( cache = appCache.first(); cache; cache = appCache.next() ) { + if ( cache->item == 0 || ( cache->item && cache->item->isOn() ) ) { + added++; + + QString destDir = cache->destDir; + QString destName = cache->destName; + QString templ = cache->templ; + + destDir += "/"; + QDir d; + int pos = -1; + while ( ( pos = destDir.find( '/', pos + 1 ) ) >= 0 ) { + QString path = destDir.left( pos + 1 ); + d = path; + if ( !d.exists() ) + d.mkdir( path ); + } + + // write out the desktop file + copyFile( templ, destDir + "/" + destName ); + } + } +} + +void decorateDirs( QString destDir ) +{ + // find out where to put the .directory files + if ( destDir.isNull() ) + destDir = KGlobal::dirs()->saveLocation( "apps" ); + else + destDir += "/"; + + QStringList dirs = KGlobal::dirs()->findAllResources( "data", "kappfinder/apps/*.directory", true ); + + QStringList::Iterator it; + for ( it = dirs.begin(); it != dirs.end(); ++it ) { + // find out the name of the file to store + QString destName = *it; + int pos = destName.find( "kappfinder/apps/" ); + if ( pos > 0 ) + destName = destName.mid( pos + strlen( "kappfinder/apps/" ) ); + + destName = destDir + "/" + destName; + + if ( !QFile::exists( destName ) ) { + kdDebug(DBG_CODE) << "Copy " << *it << " to " << destName << endl; + copyFile( *it, destName ); + } + } +} diff --git a/kappfinder/common.h b/kappfinder/common.h new file mode 100644 index 000000000..699b9dfdc --- /dev/null +++ b/kappfinder/common.h @@ -0,0 +1,43 @@ +/* + KAppfinder, the KDE application finder + + Copyright (c) 2002-2003 Tobias Koenig + + Based on code written by Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef COMMON_H +#define COMMON_H + +#include +#include +#include + +class AppLnkCache +{ + public: + QString destDir; + QString destName; + QString templ; + QCheckListItem *item; +}; + +bool scanDesktopFile( QPtrList &appCache, const QString &templ, + QString destDir = QString::null ); +void createDesktopFiles( QPtrList &appCache, int &added ); +void decorateDirs( QString destDir = QString::null ); + +#endif diff --git a/kappfinder/configure.in.in b/kappfinder/configure.in.in new file mode 100644 index 000000000..1e9414be0 --- /dev/null +++ b/kappfinder/configure.in.in @@ -0,0 +1,4 @@ +if test -z "$RUN_KAPPFINDER"; then + RUN_KAPPFINDER="no" +fi +AC_SUBST(RUN_KAPPFINDER) diff --git a/kappfinder/hi128-app-kappfinder.png b/kappfinder/hi128-app-kappfinder.png new file mode 100644 index 000000000..c0ccc13b3 Binary files /dev/null and b/kappfinder/hi128-app-kappfinder.png differ diff --git a/kappfinder/hi16-app-kappfinder.png b/kappfinder/hi16-app-kappfinder.png new file mode 100644 index 000000000..38f2cc76e Binary files /dev/null and b/kappfinder/hi16-app-kappfinder.png differ diff --git a/kappfinder/hi22-app-kappfinder.png b/kappfinder/hi22-app-kappfinder.png new file mode 100644 index 000000000..82a409e0d Binary files /dev/null and b/kappfinder/hi22-app-kappfinder.png differ diff --git a/kappfinder/hi32-app-kappfinder.png b/kappfinder/hi32-app-kappfinder.png new file mode 100644 index 000000000..8fe3e1a20 Binary files /dev/null and b/kappfinder/hi32-app-kappfinder.png differ diff --git a/kappfinder/hi48-app-kappfinder.png b/kappfinder/hi48-app-kappfinder.png new file mode 100644 index 000000000..ef971fc10 Binary files /dev/null and b/kappfinder/hi48-app-kappfinder.png differ diff --git a/kappfinder/hi64-app-kappfinder.png b/kappfinder/hi64-app-kappfinder.png new file mode 100644 index 000000000..b1a66176d Binary files /dev/null and b/kappfinder/hi64-app-kappfinder.png differ diff --git a/kappfinder/kappfinder.desktop b/kappfinder/kappfinder.desktop new file mode 100644 index 000000000..974ca8b10 --- /dev/null +++ b/kappfinder/kappfinder.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Exec=kappfinder +Icon=kappfinder +Type=Application +Terminal=false +X-KDE-StartupNotify=true +OnlyShowIn=KDE; + +Name=Menu Updating Tool +Name[af]=Kieslys opdateer program +Name[ar]=أداة تحديث القوائم +Name[az]=Menyu Yeniləmə Vasitəsi +Name[be]=Інструмент абнаўлення меню +Name[bn]=মেনু আপডেট টুল +Name[bs]=Alat za updatovanje menija +Name[ca]=Eina d'actualització del menú +Name[cs]=Nástroj pro aktualizaci nabídky +Name[csb]=Nôrzãdze do aktualizacëji menu +Name[cy]=Erfyn Diweddaru'r Dewislen +Name[da]=Værktøj til menuopdatering +Name[de]=Menü-Aktualisierung +Name[el]=Εργαλείο ενημέρωσης μενού +Name[eo]=Aktualigi la K-Menuaron +Name[es]=Herramienta de actualización de menús +Name[et]=Menüü uuendamine +Name[eu]=Menua eguneratzeko tresna +Name[fa]=ابزار به‌روزرسانی گزینگان +Name[fi]=Valikoiden päivitystyökalu +Name[fr]=Outil de mise à jour du menu +Name[fy]=Menu bywurkje +Name[ga]=Uirlis Nuashonraithe Roghchláir +Name[gl]=Ferramenta de Actualización do Menu +Name[he]=כלי לעדכון התפריטים +Name[hi]=मेनू अद्यतन करने का औजार +Name[hr]=Alat za ažuriranje izbornika +Name[hu]=Menüfrissítő +Name[is]=Uppfærslutól valmynda +Name[it]=Strumento di aggiornamento dei menu +Name[ja]=メニュー更新ツール +Name[ka]=მენიუს განახლების პროგრამა +Name[kk]=Мәзірді жаңарту құралы +Name[km]=ឧបករណ៍​ធ្វើ​ឲ្យ​ម៉ឺនុយ​ទាន់សម័យ +Name[ko]=메뉴 업데이트 도구 +Name[lt]=Meniu atnaujinimo priemonė +Name[lv]=Izvēlnes atjaunošanas rīks +Name[mk]=Алатка за ажурирање на менито +Name[mn]=Цэс идэвхижүүлэгч хэрэгсэл +Name[ms]=Alat Mengemas Kini Menu +Name[mt]=Għodda li taġġorna l-menus +Name[nb]=Verktøy for menyoppdatering +Name[nds]=Menü aktualiseren +Name[ne]=मेनु अद्यावधिक उपकरण +Name[nl]=Menu bijwerken +Name[nn]=Verktøy for menyoppdatering +Name[pa]=ਮੇਨੂ ਅੱਪਡੇਟ ਸੰਦ +Name[pl]=Narzędzie do aktualizacji menu +Name[pt]=Ferramenta de Actualização do Menu +Name[pt_BR]=Ferramenta de Atualização de Menus +Name[ro]=Utilitar de actualizare meniuri +Name[ru]=Утилита обновления меню +Name[rw]=Igikoresho Ivugurura Ibikubiyemo +Name[se]=Fálloođasmahttin-reaidu +Name[sk]=Nástroj na aktualizáciu menu +Name[sl]=Orodje za posodabljanje menijev +Name[sr]=Алат за ажурирање менија +Name[sr@Latn]=Alat za ažuriranje menija +Name[sv]=Verktyg för menyuppdatering +Name[ta]=பட்டியல் புதுப்பித்தல் கருவி +Name[tg]=Обзор ба рӯз оварии меню +Name[th]=เครื่องมือปรับปรุงเมนู +Name[tr]=Menü Güncelleştirme Aracı +Name[tt]=Saylaq Yañartu Qoralı +Name[uk]=Засіб для поновлення меню +Name[uz]=Menyuni yangilovchi vosita +Name[uz@cyrillic]=Менюни янгиловчи восита +Name[vi]=Công cụ Cập nhật Thực đơn +Name[wa]=Usteye d' amidraedje des dressêyes +Name[zh_CN]=菜单更新工具 +Name[zh_TW]=選單更新工具 +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;Settings; diff --git a/kappfinder/main.cpp b/kappfinder/main.cpp new file mode 100644 index 000000000..35805fcfb --- /dev/null +++ b/kappfinder/main.cpp @@ -0,0 +1,52 @@ +/* + KAppfinder, the KDE application finder + + Copyright (c) 2000 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include + +#include "toplevel.h" + +static const char description[] = I18N_NOOP( "KDE's application finder" ); + +static KCmdLineOptions options[] = { + { "dir ", I18N_NOOP( "Install .desktop files into directory " ), 0 }, + KCmdLineLastOption +}; + +int main( int argc, char *argv[] ) +{ + KAboutData aboutData( "kappfinder", I18N_NOOP( "KAppfinder" ), + "1.0", description, KAboutData::License_GPL, + "(c) 1998-2000, Matthias Hoelzer-Kluepfel" ); + aboutData.addAuthor( "Matthias Hoelzer-Kluepfel", 0, "hoelzer@kde.org" ); + aboutData.addAuthor( "Tobias Koenig", 0, "tokoe@kde.org" ); + + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + KApplication app; + + TopLevel *dlg = new TopLevel( args->getOption( "dir" ) ); + app.setMainWidget( dlg ); + + return dlg->exec(); +} diff --git a/kappfinder/main_install.cpp b/kappfinder/main_install.cpp new file mode 100644 index 000000000..46bbaa06b --- /dev/null +++ b/kappfinder/main_install.cpp @@ -0,0 +1,64 @@ +/* + KAppfinder, the KDE application finder + + Copyright (c) 2002-2003 Tobias Koenig + + Based on code written by Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include +#include + +#include + +#include + +#include "common.h" + + +int main( int argc, char *argv[] ) +{ + KInstance instance( "kappfinder_install" ); + int added = 0; + + if ( argc != 2 ) { + fprintf( stderr, "Usage: kappfinder_install $directory\n" ); + return -1; + } + + QStringList templates = KGlobal::dirs()->findAllResources( "data", "kappfinder/apps/*.desktop", true ); + + QString dir = QString( argv[ 1 ] ) + "/"; + + QPtrList appCache; + appCache.setAutoDelete( true ); + + QStringList::Iterator it; + for ( it = templates.begin(); it != templates.end(); ++it ) + scanDesktopFile( appCache, *it, dir ); + + createDesktopFiles( appCache, added ); + decorateDirs( dir ); + + appCache.clear(); + + printf( "%i application(s) added\n", added ); + + return 0; +} diff --git a/kappfinder/toplevel.cpp b/kappfinder/toplevel.cpp new file mode 100644 index 000000000..dfae10938 --- /dev/null +++ b/kappfinder/toplevel.cpp @@ -0,0 +1,292 @@ +/* + KAppfinder, the KDE application finder + + Copyright (c) 2002-2003 Tobias Koenig + + Based on code written by Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "toplevel.h" + +TopLevel::TopLevel( const QString &destDir, QWidget *parent, const char *name ) + : KDialog( parent, name, true ) +{ + setCaption( i18n( "KAppfinder" ) ); + QVBoxLayout *layout = new QVBoxLayout( this, marginHint() ); + + QLabel *label = new QLabel( i18n( "The application finder looks for non-KDE " + "applications on your system and adds " + "them to the KDE menu system. " + "Click 'Scan' to begin, select the desired applications and then click 'Apply'."), this); + label->setAlignment( AlignAuto | WordBreak ); + layout->addWidget( label ); + + layout->addSpacing( 5 ); + + mListView = new QListView( this ); + mListView->addColumn( i18n( "Application" ) ); + mListView->addColumn( i18n( "Description" ) ); + mListView->addColumn( i18n( "Command" ) ); + mListView->setMinimumSize( 300, 300 ); + mListView->setRootIsDecorated( true ); + mListView->setAllColumnsShowFocus( true ); + mListView->setSelectionMode(QListView::NoSelection); + layout->addWidget( mListView ); + + mProgress = new KProgress( this ); + mProgress->setPercentageVisible( false ); + layout->addWidget( mProgress ); + + mSummary = new QLabel( i18n( "Summary:" ), this ); + layout->addWidget( mSummary ); + + KButtonBox* bbox = new KButtonBox( this ); + mScanButton = bbox->addButton( KGuiItem( i18n( "Scan" ), "find"), this, SLOT( slotScan() ) ); + bbox->addStretch( 5 ); + mSelectButton = bbox->addButton( i18n( "Select All" ), this, + SLOT( slotSelectAll() ) ); + mSelectButton->setEnabled( false ); + mUnSelectButton = bbox->addButton( i18n( "Unselect All" ), this, + SLOT( slotUnselectAll() ) ); + mUnSelectButton->setEnabled( false ); + bbox->addStretch( 5 ); + mApplyButton = bbox->addButton( KStdGuiItem::apply(), this, SLOT( slotCreate() ) ); + mApplyButton->setEnabled( false ); + bbox->addButton( KStdGuiItem::close(), kapp, SLOT( quit() ) ); + bbox->layout(); + + layout->addWidget( bbox ); + + connect( kapp, SIGNAL( lastWindowClosed() ), kapp, SLOT( quit() ) ); + + mAppCache.setAutoDelete( true ); + + adjustSize(); + + mDestDir = destDir; + mDestDir = mDestDir.replace( QRegExp( "^~/" ), QDir::homeDirPath() + "/" ); + + KStartupInfo::appStarted(); + + QAccel *accel = new QAccel( this ); + accel->connectItem( accel->insertItem( Key_Q + CTRL ), kapp, SLOT( quit() ) ); + + KAcceleratorManager::manage( this ); +} + + +TopLevel::~TopLevel() +{ + mAppCache.clear(); +} + +QListViewItem* TopLevel::addGroupItem( QListViewItem *parent, const QString &relPath, + const QString &name ) +{ + KServiceGroup::Ptr root = KServiceGroup::group( relPath ); + if( !root ) + return 0L; + KServiceGroup::List list = root->entries(); + + KServiceGroup::List::ConstIterator it; + for ( it = list.begin(); it != list.end(); ++it ) { + KSycocaEntry *p = (*it); + if ( p->isType( KST_KServiceGroup ) ) { + KServiceGroup* serviceGroup = static_cast( p ); + if ( QString( "%1%2/" ).arg( relPath ).arg( name ) == serviceGroup->relPath() ) { + QListViewItem* retval; + if ( parent ) + retval = parent->firstChild(); + else + retval = mListView->firstChild(); + + while ( retval ) { + if ( retval->text( 0 ) == serviceGroup->caption() ) + return retval; + + retval = retval->nextSibling(); + } + + QListViewItem *item; + if ( parent ) + item = new QListViewItem( parent, serviceGroup->caption() ); + else + item = new QListViewItem( mListView, serviceGroup->caption() ); + + item->setPixmap( 0, SmallIcon( serviceGroup->icon() ) ); + item->setOpen( true ); + return item; + } + } + } + + return 0; +} + +void TopLevel::slotScan() +{ + KIconLoader* loader = KGlobal::iconLoader(); + + mTemplates = KGlobal::dirs()->findAllResources( "data", "kappfinder/apps/*.desktop", true ); + + mAppCache.clear(); + + mFound = 0; + int count = mTemplates.count(); + + mScanButton->setEnabled( false ); + mProgress->setPercentageVisible( true ); + mProgress->setTotalSteps( count ); + mProgress->setValue( 0 ); + + mListView->clear(); + + QStringList::Iterator it; + for ( it = mTemplates.begin(); it != mTemplates.end(); ++it ) { + // eye candy + mProgress->setProgress( mProgress->progress() + 1 ); + + QString desktopName = *it; + int i = desktopName.findRev('/'); + desktopName = desktopName.mid(i+1); + i = desktopName.findRev('.'); + if (i != -1) + desktopName = desktopName.left(i); + + bool found; + found = KService::serviceByDesktopName(desktopName); + if (found) + continue; + + found = KService::serviceByMenuId("kde-"+desktopName+".desktop"); + if (found) + continue; + + found = KService::serviceByMenuId("gnome-"+desktopName+".desktop"); + if (found) + continue; + + KDesktopFile desktop( *it, true ); + + // copy over the desktop file, if exists + if ( scanDesktopFile( mAppCache, *it, mDestDir ) ) { + QString relPath = *it; + int pos = relPath.find( "kappfinder/apps/" ); + relPath = relPath.mid( pos + strlen( "kappfinder/apps/" ) ); + relPath = relPath.left( relPath.findRev( '/' ) + 1 ); + QStringList dirList = QStringList::split( '/', relPath ); + + QListViewItem *dirItem = 0; + QString tmpRelPath = QString::null; + + QStringList::Iterator tmpIt; + for ( tmpIt = dirList.begin(); tmpIt != dirList.end(); ++tmpIt ) { + dirItem = addGroupItem( dirItem, tmpRelPath, *tmpIt ); + tmpRelPath += *tmpIt + '/'; + } + + mFound++; + + QCheckListItem *item; + if ( dirItem ) + item = new QCheckListItem( dirItem, desktop.readName(), QCheckListItem::CheckBox ); + else + item = new QCheckListItem( mListView, desktop.readName(), QCheckListItem::CheckBox ); + + item->setPixmap( 0, loader->loadIcon( desktop.readIcon(), KIcon::Small ) ); + item->setText( 1, desktop.readGenericName() ); + item->setText( 2, desktop.readPathEntry( "Exec" ) ); + if ( desktop.readBoolEntry( "X-StandardInstall" ) ) + item->setOn( true ); + + AppLnkCache* cache = mAppCache.last(); + if ( cache ) + cache->item = item; + } + + // update summary + QString sum( i18n( "Summary: found %n application", + "Summary: found %n applications", mFound ) ); + mSummary->setText( sum ); + } + + // stop scanning + mProgress->setValue( 0 ); + mProgress->setPercentageVisible( false ); + + mScanButton->setEnabled( true ); + + if ( mFound > 0 ) { + mApplyButton->setEnabled( true ); + mSelectButton->setEnabled( true ); + mUnSelectButton->setEnabled( true ); + } +} + +void TopLevel::slotSelectAll() +{ + AppLnkCache* cache; + for ( cache = mAppCache.first(); cache; cache = mAppCache.next() ) + cache->item->setOn( true ); +} + +void TopLevel::slotUnselectAll() +{ + AppLnkCache* cache; + for ( cache = mAppCache.first(); cache; cache = mAppCache.next() ) + cache->item->setOn( false ); +} + +void TopLevel::slotCreate() +{ + // copy template files + mAdded = 0; + createDesktopFiles( mAppCache, mAdded ); + + // decorate directories + decorateDirs( mDestDir ); + + KService::rebuildKSycoca(this); + + QString message( i18n( "%n application was added to the KDE menu system.", + "%n applications were added to the KDE menu system.", mAdded ) ); + KMessageBox::information( this, message, QString::null, "ShowInformation" ); +} + +#include "toplevel.moc" diff --git a/kappfinder/toplevel.h b/kappfinder/toplevel.h new file mode 100644 index 000000000..972e5adfb --- /dev/null +++ b/kappfinder/toplevel.h @@ -0,0 +1,70 @@ +/* + KAppfinder, the KDE application finder + + Copyright (c) 2002-2003 Tobias Koenig + + Based on code written by Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef TOPLEVEL_H +#define TOPLEVEL_H + +#include + +#include + +#include "common.h" + +class KProgress; +class QLabel; +class QListView; +class QPushButton; + +class TopLevel : public KDialog +{ + Q_OBJECT + + public: + TopLevel( const QString &destDir, QWidget *parent = 0, const char *name = 0 ); + ~TopLevel(); + + public slots: + void slotScan(); + void slotCreate(); + void slotSelectAll(); + void slotUnselectAll(); + + private: + QListViewItem *addGroupItem( QListViewItem *parent, const QString &relPath, + const QString &name ); + + KProgress *mProgress; + QLabel *mSummary; + QListView *mListView; + QPushButton *mApplyButton; + QPushButton *mQuitButton; + QPushButton *mScanButton; + QPushButton *mSelectButton; + QPushButton *mUnSelectButton; + QString mDestDir; + QStringList mTemplates; + + QPtrList mAppCache; + + int mFound, mAdded; +}; + +#endif diff --git a/kappfinder/uninstall.desktop b/kappfinder/uninstall.desktop new file mode 100644 index 000000000..e1e3e1732 --- /dev/null +++ b/kappfinder/uninstall.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/kate/AUTHORS b/kate/AUTHORS new file mode 100644 index 000000000..e8e6716c2 --- /dev/null +++ b/kate/AUTHORS @@ -0,0 +1,33 @@ +Kate/KWrite Team: +- Christoph Cullmann + (Maintainer) + +- Joseph Wenninger + (highlight guy + big bug hunter) + +- Anders Lund + (very cool split view + much more) + +- Waldo Bastian + (improved buffer handling) + +- Michael Bartl + (first one who really helped out :) + +- Phlip + (project stuff) + +- Matt Newell + +- Michael McCallum + +- John Firebaugh + +- Jochen Wilhelmy + (original author of kwrite in kde 1.x until kde 2.1) + +- Glen Parker + (undo history, kspell-integration) + +- Michael Koch + (port to KParts) diff --git a/kate/COPYING.LIB b/kate/COPYING.LIB new file mode 100644 index 000000000..789c31eee --- /dev/null +++ b/kate/COPYING.LIB @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1301, USA. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/kate/ChangeLog b/kate/ChangeLog new file mode 100644 index 000000000..68dc0da01 --- /dev/null +++ b/kate/ChangeLog @@ -0,0 +1,286 @@ +2004-04-22 Christoph Cullmann + * kate switched over to katemdi, even smaller replacement for kmdi2 :) + +2004-10-06 Christoph Cullmann + * kate switched over to kmdi2, a slim version of old kmdi + which allows only IDEA mode, but should be much less buggy + beside this, we now allow tabbing thx to the new kmdi stuff + and therefor should now be really feature complete at least mdi + wise, having the features to allow multiple main windows, + tabbing, splitters, widget stacks for the views, now only missing thingy + would be to allow non kate view's to be embeded, like a khtml widget for + documentation browsing or something like that + +2003-08-28 Christoph Cullmann + * jowenn switch kate over to use kmdi, seems to work well + for the first port, but still needs some fixes ;) + +2002-07-19 Christoph Cullmann + * new interface structure implemented + this is BIC and source incompatible to 2.x and 3.0.x plugins + +2002-01-04 Christoph Cullmann + * the search stuff in the katedocument is rewritten now, should work mostly, + only search for whole words is just a mess :( + +2002-01-03 Christoph Cullmann + * kate app and kwrite app now use the katepart via libloader and link only + to the kateinterfaces (which will soon be splitted into katepartinterfaces + and kateinterfaces + * new framework for the configpages of the katepart accessible through the + interfaces + * KSpell works again ;) my god, what a buggy thingy + +2001-12-01 Christoph Cullmann + * speedup for insert/removeText/Line + * new editStart/editEnd/editAddUndo functions to make the undo/redo + update + after edit function calls easier to understand an use in katedocument.* + +2001-11-30 Joseph Wenninger + * I hopefully fixed the CSS highlighting finally. It used + deprecated syntax and there was a bug in the highlighting code, + for handling weakDeliminiators. Who renamed them, once they where + called weakDelimiters, which I think is the correct pronounciation. + +2001-11-29 Joseph Wenninger + * KWrite/Kate use different font settings for printing and viewing now + * Fixed a small crash in my kdevelop->kate port of the codecompletion interface + +2001-11-26 Christoph Cullmann + * backspace bug fixed + * more cleanups in doc/view + +2001-11-24 Christoph Cullmann + * the docID is now called documentNumber and is in the KTextEditor lib ;) + * new print and mark interfaces ;) + * bugfixes for some stuff in kateview/document.* + * move more of the document stuff from the view to the document + (old kwritedoc/view was very mixed, no real seperation, but that should be nearly done) + +2001-11-17 Christoph Cullmann + * new selection code (bit buggy at the moment, but better than the old way + of storing the selection in the attributes + +2001-10-29 Joseph Wenninger + * Highlighting definitions support now #stay and #pop as context values + * Some highlighting definitions ported + +2001-10-27 Christoph Cullmann + * undo/redo works now without errors + * fix many memleaks + some crashs in buffer + hl + * fix ctx managment (almost) + +2001-10-27 Joseph Wenninger + * The stacked highlighting shoul almost work now. + Using old description files it will use quite a lot memory, but + they should work. + Problems: + * It's leaking like a sieve on destruction, because the + memarrays aren't deleted correctly yet (They need to be pointers and not + references, otherwise there are out of memory errors in qgarray) + * Highlighting isn't updated completely yet + * I have to do some nasty workaround because the overloaded == + operator in QMemArray crashes, if one or both of the arrays has + a size of 0 (I think this is a bug in QT, but it could be that + this is intended behaviour. Who knows ?) + +2001-10-20 Christoph Cullmann + * new undo/redo stuff, should work now already fine (mostly ;) + +2001-10-14 Christoph Cullmann + * new interfaces + * fixed some bugs (or better mistakes) in EditInterface + * fix bugs and even more bugs + +2001-10-14 Christoph Cullmann + * implementing and enhancing the new KTextEditor interfaces + * rewrite the whole internal document/view stuff ;) (hope will be finished + soon with that old crap ! + * reconstruction of whole katelibs + dirs + +2001-10-06 Christoph Cullmann + * myself back again ;) + * now kate is clean (only qt3), no backports ;) + +2001-08-24 christian@kdevelop.org + * reimplement the commenting of selections on some languages + +2001-08-19 christian@kdevelop.org + * added back Sather highlighting support + * improved Eiffel language syntax highlighting support + * added Eiffel language comment directive in eiffel.xml + * added Ada language comment directive in ada.xml + +2001-08-15 christian@kdevelop.org + * committed Eiffel language syntax highlighting support + +2001-08-08 rokrau@yahoo.com + * committed changes to Kate's API necessary for integration of kate as + a kpart into kdevelop + +2001-05-13 Christoph Cullmann + * after some time of learning for my "Abitur" now again some fixes ;): + textlines stuff rewritten, selection fixed + +/- font zoom buttons in the part + +2001-04-27 Christoph Cullmann + * now the pluginconfig pages work ;) + +2001-04-24 Joseph Wenninger + * now and is replaced by + +2001-04-20 Christoph Cullmann + * new configdialog + * enhanced pluginIface to supports configdialogpages + +2001-04-14 Christoph Cullmann + * now kateview has in iconborder too (without real function at the moment) + +2001-04-10 Christoph Cullmann + * bugfixes for drawBuffer stuff, next/prev viewspace, restoreView + +2001-04-08 Christoph Cullmann + * now encoding for files can be selected at settings dialog (not only UTF8, all possible encodings) + * dropped old code -> use Waldo's code ;) + +2001-04-07 Joseph Wenninger + * Activated Waldo Bastian's NEW_CODE + * Ported Highlighting to it + +2001-04-05 Joseph Wenninger + * Highlighting Configuration is now in kate/kwrite settings too + * Made a cleanup of no longer used classes + +2001-04-04 Christoph Cullmann + * sidebar now again restores config + +2001-04-03 Joseph Wenninger + * Cristi Dumitrescu's PHP keyword / type list added + +2001-04-01 Joseph Wenninger + * Added a new widget KateStackTabWidget + Now you can chose between tabbed or an + KOffice Workspace like view for the file sidebar + --> You can change this behaviour in the config dialog + * Not implemented: + restore sidebar page on startup + remove page not implemented yet + (will be fixed soon) + * Added a backport of QT3's QRegExp I got from Scott Manson + wit one addtion (see qt3back/README) + hopefully this will give us more flexibility for syntax + highlighting + +2001-03-27 Christoph Cullmann + * console disabled per default + * console only loaded if enabled + +2001-03-28 Joseph Wenninger + * -n in kate.desktop removed, now config settings are used + +2001-03-27 Christoph Cullmann + * interfaces extended (mainly for projectmanager) + * piper moved to plugins/projectmanager/piper + * a piper Makefile.am created + +2001-03-26 Joseph Wenninger + * 2 reimplemented highlighing configs + * 1 experimental highlighting config + * preparations for an highlighting editing dialog + +2001-03-25 Christoph Cullmann + * rewrite of plugin API and manager, now loading/unloading nice + +2001-03-22 Joseph Wenninger + * single / multi instance mode configurable + Cullmann's -n option forces a new instance + Otherwise it uses the configuration from + the settings dialog. At the moment -n is + default start option + +2001-03-21 Christoph Cullmann + * QPopupMenu for filelist + +2001-03-20 Christoph Cullmann + * kate is now a normal KApplication + +2001-03-18 Christoph Cullmann + * big location changes of source files + * KateFactory now in use by hole Kate app + * KatePartView/Doc merged with KateView/Doc (make life more easy) + +2001-03-18 Joseph Wenninger + * openheader plugin opens the corresponding + .h file for .cpp or .c, and vice versa + * Hopefully fixed highlighting dialog for now. + +2001-03-17 Joseph Wenninger + * Syntaxhighlighting is now defined in cpp.xml, c.xml html.xml ... + instead of a global syntax.xml. + (Not ported completely yet) + * Some simple reg expression work (see html.xml) + +2001-03-17 Christoph Cullmann + * moved textfilter stuff to a own plugin "textfilter" + * cleaned up katemainwindow.* + +2001-03-16 Christoph Cullmann + * search dialog comes up with selected text + * backport of some KDevelop KWrite patches ;) + +2001-03-15 Christoph Cullmann + * katepart finished + * new kwrite using katepart + * removed old kwrite and kwritepart ! + * fixed menu and toolbar problems of the new KWrite app + +2001-03-11 Christoph Cullmann + * kwrite stuff merged into kate !!!!! + +2001-03-04 Christoph Cullmann + * mutiple mainwindows + * fileist, sync for all mainwindows, all open docs listed + +2001-03-03 Christoph Cullmann + * session managment (Anders Lund) + * removed some debug stuff + +2001-02-26 Joseph Wenninger + * First step for a plugin management dialog page + Soon to come + +2001-02-26 Christoph Cullmann + * Kate is a part of kdebase :) + sourceforge.net CVS won't be used in the future + +2001-02-24 Phlip + * HTML button - select text, hit , and enter the fields + for an SGML tag. Don't enter the < > or closing tag. We put these + around the selected text, and [try to] re-select that text so you can add + another nested tag right away. We are now the first HTML editor + that's actually better than Notepad! Hours of fun. + + * Filter - select text, hit , and enter an OS command. + we pipe the selected text thru that command, such as "sort", and then + replace the selection with the result. Impress your friends. + +2001-02-21 Joseph Wenninger + * Makefile.am's : correction for linking + * katemenuitem.h : Improved menu items added doc-list + * katelistboxitem.h : Improved listboxitem files-list + +2001-02-19 Christoph Cullmann + * kateconsole.* konsole/* : add kateconsole widget + +2001-02-16 Anders Lund + * katemainwindow.cpp :fixing read/write options to use maindockwindow functions. + +2001-02-15 Joseph Wenninger + * kateview.cpp : Tab doesn't jump to next widget anymore, but inserts a tab into the text + * katemainwindow.* : F8 / SHIFT-F8 jumps to next / previous widget diff --git a/kate/DESIGN b/kate/DESIGN new file mode 100644 index 000000000..0fa65c0a5 --- /dev/null +++ b/kate/DESIGN @@ -0,0 +1,13 @@ +KateApp + - KatePluginManager + one plugin manager per app + + - KateDocManager + one doc manager per app + + - KateMainWindow + mutliple mainwindows per app possible + + - KateViewManager + one view manager per mainwin + \ No newline at end of file diff --git a/kate/Mainpage.dox b/kate/Mainpage.dox new file mode 100644 index 000000000..57571ba0f --- /dev/null +++ b/kate/Mainpage.dox @@ -0,0 +1,9 @@ +/** @mainpage Kate +* +* Kate is the KDE Advanced Text Editor. This section describes +* the internal classes used to create Kate. It should not be +* used as a public API. +* +* For a public API, see the text editor interface in kdelibs. +* +*/ diff --git a/kate/Makefile.am b/kate/Makefile.am new file mode 100644 index 000000000..9726ea167 --- /dev/null +++ b/kate/Makefile.am @@ -0,0 +1,12 @@ +SUBDIRS = utils interfaces app data pics +EXTRA_DIST = AUTHORS COPYING.LIB ChangeLog DESIGN NEWS README TODO + +messages: + rm -f tips.cpp + (cd data && $(PREPARETIPS) > ../tips.cpp) + $(EXTRACTRC) ./*/*.rc >> ./rc.cpp + $(XGETTEXT) `find . -name "*.cpp"` -o $(podir)/kate.pot + rm -f tips.cpp + +include ../admin/Doxyfile.am + diff --git a/kate/NEWS b/kate/NEWS new file mode 100644 index 000000000..994c83eac --- /dev/null +++ b/kate/NEWS @@ -0,0 +1,23 @@ +2003-08-28 + Kate uses KMdi ;) + +2002-07-19 + New Plugin Interfaces finished (hopefully) + +2002-01-03 + Kate App and Part seperated + +2001-11-24 + KTextEditor interfaces are near completion ;) + +2001-06-11 + Little Cullmann got his little Abitur with 1.zero ;) + +2001-05-12 + juhu, my abi is over ;) (just must type a news item ;) + +2001-04-01 + Kant -> Kate + +2001-03-01 + Kant is now official part of KDEBASE ;-) diff --git a/kate/README b/kate/README new file mode 100644 index 000000000..67eb04be6 --- /dev/null +++ b/kate/README @@ -0,0 +1,24 @@ + *** Kate *** +Kate is a fast texteditor for the KDE destop with an Emacs-style document interface. +I hope it works well and improves workspeed on many little textfiles. ;-) +Our new buffer managment will allow it to open 50MB files ++ in less than 5 seconds +(at least on my 400Mhz P2 ;) It is thought as a more powerful replacement for the old +KWrite app, which will still keep alive for the existing userbase and because it is +just a lot smaller and therefor faster on launch than kate. +For Kate Plugins, Kate provides the Kate Interfaces, which allow deeper access +to the Kate app and its features. + + *** KWrite *** +The KWrite app is based on the KWrite of KDE 2.0 written by Jochen Wilhelmy +but now it uses the Kate part or any other KTextEditor compatible part. +The most stuff has been rewritten since the old KDE 2.x days. + +Homepage: http://kate.kde.org + +Licensing: +The Kate app/utils/interfaces and KWrite app are licensed under the LGPL VERSION 2. + + *** Undocumented features in Kate version 2.5.2 *** +* The KateApplication DCOP interface has a function QString session() that +returns the name of the active session (which might be an empty string). +(but hey, documentation of the DCOP interface is missing completely) \ No newline at end of file diff --git a/kate/TODO b/kate/TODO new file mode 100644 index 000000000..bc60bf4b0 --- /dev/null +++ b/kate/TODO @@ -0,0 +1 @@ +TODO: diff --git a/kate/app/Makefile.am b/kate/app/Makefile.am new file mode 100644 index 000000000..6175f3203 --- /dev/null +++ b/kate/app/Makefile.am @@ -0,0 +1,29 @@ +lib_LTLIBRARIES = libkateinterfaces.la +bin_PROGRAMS = +kdeinit_LTLIBRARIES = kate.la kwrite.la + +libkateinterfaces_la_SOURCES = kateapp.cpp kateconfigdialog.cpp kateconfigplugindialogpage.cpp \ + kateconsole.cpp katedocmanager.cpp katefilelist.cpp katefileselector.cpp \ + katemainwindow.cpp katepluginmanager.cpp \ + kateviewmanager.cpp kateviewspace.cpp \ + katemainwindowiface.skel katemainwindowiface.cpp kategrepdialog.cpp \ + katemailfilesdialog.cpp kbookmarkhandler.cpp \ + katedocmanageriface.skel kateappIface.cpp kateappIface.skel katedocmanageriface.cpp \ + kateexternaltools.cpp katesavemodifieddialog.cpp kateviewspacecontainer.cpp \ + katemwmodonhddialog.cpp katesession.cpp katemdi.cpp katetabwidget.cpp + +libkateinterfaces_la_LIBADD = ../interfaces/libkateinterfacesprivate.la $(LIB_KUTILS) ../utils/libkateutils.la + +libkateinterfaces_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -no-undefined + +kate_la_SOURCES = katemain.cpp +kate_la_LIBADD = libkateinterfaces.la +kate_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version + +kwrite_la_SOURCES = kwritemain.cpp +kwrite_la_LIBADD = -lkatepartinterfaces ../utils/libkateutils.la +kwrite_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version + +METASOURCES = AUTO + +INCLUDES= -I../interfaces -I$(srcdir)/../lib $(all_includes) diff --git a/kate/app/kateapp.cpp b/kate/app/kateapp.cpp new file mode 100644 index 000000000..00b58b8b5 --- /dev/null +++ b/kate/app/kateapp.cpp @@ -0,0 +1,399 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateapp.h" +#include "kateapp.moc" + +#include "katedocmanager.h" +#include "katepluginmanager.h" +#include "kateviewmanager.h" +#include "kateappIface.h" +#include "katesession.h" +#include "katemainwindow.h" + +#include "../interfaces/application.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +KateApp::KateApp (KCmdLineArgs *args) + : KApplication () + , m_args (args) + , m_shouldExit (false) +{ + // Don't handle DCOP requests yet + dcopClient()->suspend(); + + // insert right translations for the katepart + KGlobal::locale()->insertCatalogue("katepart"); + + // some global default + Kate::Document::setFileChangedDialogsActivated (true); + + // application interface + m_application = new Kate::Application (this); + + // doc + project man + m_docManager = new KateDocManager (this); + + // init all normal plugins + m_pluginManager = new KatePluginManager (this); + + // session manager up + m_sessionManager = new KateSessionManager (this); + + // application dcop interface + m_obj = new KateAppDCOPIface (this); + + kdDebug()<<"Setting KATE_PID: '"<resume(); +} + +KateApp::~KateApp () +{ + // cu dcop interface + delete m_obj; + + // cu plugin manager + delete m_pluginManager; + + // delete this now, or we crash + delete m_docManager; +} + +KateApp *KateApp::self () +{ + return (KateApp *) kapp; +} + +Kate::Application *KateApp::application () +{ + return m_application; +} + +/** + * Has always been the Kate Versioning Scheme: + * KDE X.Y.Z contains Kate X-1.Y.Z + */ +QString KateApp::kateVersion (bool fullVersion) +{ + return fullVersion ? QString ("%1.%2.%3").arg(KDE::versionMajor() - 1).arg(KDE::versionMinor()).arg(KDE::versionRelease()) + : QString ("%1.%2").arg(KDE::versionMajor() - 1).arg(KDE::versionMinor()); +} + +void KateApp::restoreKate () +{ + // restore the nice files ;) we need it + Kate::Document::setOpenErrorDialogsActivated (false); + + // activate again correct session!!! + sessionConfig()->setGroup("General"); + QString lastSession (sessionConfig()->readEntry ("Last Session", "default.katesession")); + sessionManager()->activateSession (new KateSession (sessionManager(), lastSession, ""), false, false, false); + + m_docManager->restoreDocumentList (sessionConfig()); + + Kate::Document::setOpenErrorDialogsActivated (true); + + // restore all windows ;) + for (int n=1; KMainWindow::canBeRestored(n); n++) + newMainWindow(sessionConfig(), QString ("%1").arg(n)); + + // oh, no mainwindow, create one, should not happen, but make sure ;) + if (mainWindows() == 0) + newMainWindow (); + + // Do not notify about start there: this makes kicker crazy and kate go to a wrong desktop. + // KStartupInfo::setNewStartupId( activeMainWindow(), startupId()); +} + +bool KateApp::startupKate () +{ + // user specified session to open + if (m_args->isSet ("start")) + { + sessionManager()->activateSession (sessionManager()->giveSession (QString::fromLocal8Bit(m_args->getOption("start"))), false, false); + } + else + { + // let the user choose session if possible + if (!sessionManager()->chooseSession ()) + { + // we will exit kate now, notify the rest of the world we are done + KStartupInfo::appStarted (startupId()); + return false; + } + } + + // oh, no mainwindow, create one, should not happen, but make sure ;) + if (mainWindows() == 0) + newMainWindow (); + + // notify about start + KStartupInfo::setNewStartupId( activeMainWindow(), startupId()); + + QTextCodec *codec = m_args->isSet("encoding") ? QTextCodec::codecForName(m_args->getOption("encoding")) : 0; + + bool tempfileSet = KCmdLineArgs::isTempFileSet(); + + Kate::Document::setOpenErrorDialogsActivated (false); + uint id = 0; + for (int z=0; zcount(); z++) + { + // this file is no local dir, open it, else warn + bool noDir = !m_args->url(z).isLocalFile() || !QDir (m_args->url(z).path()).exists(); + + if (noDir) + { + // open a normal file + if (codec) + id = activeMainWindow()->viewManager()->openURL( m_args->url(z), codec->name(), false, tempfileSet ); + else + id = activeMainWindow()->viewManager()->openURL( m_args->url(z), QString::null, false, tempfileSet ); + } + else + KMessageBox::sorry( activeMainWindow(), + i18n("The file '%1' could not be opened: it is not a normal file, it is a folder.").arg(m_args->url(z).url()) ); + } + + Kate::Document::setOpenErrorDialogsActivated (true); + + // handle stdin input + if( m_args->isSet( "stdin" ) ) + { + QTextIStream input(stdin); + + // set chosen codec + if (codec) + input.setCodec (codec); + + QString line; + QString text; + + do + { + line = input.readLine(); + text.append( line + "\n" ); + } while( !line.isNull() ); + + openInput (text); + } + else if ( id ) + activeMainWindow()->viewManager()->activateView( id ); + + if ( activeMainWindow()->viewManager()->viewCount () == 0 ) + activeMainWindow()->viewManager()->activateView(m_docManager->firstDocument()->documentNumber()); + + int line = 0; + int column = 0; + bool nav = false; + + if (m_args->isSet ("line")) + { + line = m_args->getOption ("line").toInt(); + nav = true; + } + + if (m_args->isSet ("column")) + { + column = m_args->getOption ("column").toInt(); + nav = true; + } + + if (nav) + activeMainWindow()->viewManager()->activeView ()->setCursorPosition (line, column); + + // show the nice tips + KTipDialog::showTip(activeMainWindow()); + + return true; +} + +void KateApp::shutdownKate (KateMainWindow *win) +{ + if (!win->queryClose_internal()) + return; + + sessionManager()->saveActiveSession(true, true); + + // detach the dcopClient + dcopClient()->detach(); + + // cu main windows + while (!m_mainWindows.isEmpty()) + delete m_mainWindows[0]; + + quit (); +} + +KatePluginManager *KateApp::pluginManager() +{ + return m_pluginManager; +} + +KateDocManager *KateApp::documentManager () +{ + return m_docManager; +} + +KateSessionManager *KateApp::sessionManager () +{ + return m_sessionManager; +} + +bool KateApp::openURL (const KURL &url, const QString &encoding, bool isTempFile) +{ + KateMainWindow *mainWindow = activeMainWindow (); + + if (!mainWindow) + return false; + + QTextCodec *codec = encoding.isEmpty() ? 0 : QTextCodec::codecForName(encoding.latin1()); + + kdDebug () << "OPEN URL "<< encoding << endl; + + // this file is no local dir, open it, else warn + bool noDir = !url.isLocalFile() || !QDir (url.path()).exists(); + + if (noDir) + { + // open a normal file + if (codec) + mainWindow->viewManager()->openURL( url, codec->name(), true, isTempFile ); + else + mainWindow->viewManager()->openURL( url, QString::null, true, isTempFile ); + } + else + KMessageBox::sorry( mainWindow, + i18n("The file '%1' could not be opened: it is not a normal file, it is a folder.").arg(url.url()) ); + + return true; +} + +bool KateApp::setCursor (int line, int column) +{ + KateMainWindow *mainWindow = activeMainWindow (); + + if (!mainWindow) + return false; + + mainWindow->viewManager()->activeView ()->setCursorPosition (line, column); + + return true; +} + +bool KateApp::openInput (const QString &text) +{ + activeMainWindow()->viewManager()->openURL( "", "", true ); + + if (!activeMainWindow()->viewManager()->activeView ()) + return false; + + activeMainWindow()->viewManager()->activeView ()->getDoc()->setText (text); + + return true; +} + +KateMainWindow *KateApp::newMainWindow (KConfig *sconfig, const QString &sgroup) +{ + KateMainWindow *mainWindow = new KateMainWindow (sconfig, sgroup); + m_mainWindows.push_back (mainWindow); + + if ((mainWindows() > 1) && m_mainWindows[m_mainWindows.count()-2]->viewManager()->activeView()) + mainWindow->viewManager()->activateView ( m_mainWindows[m_mainWindows.count()-2]->viewManager()->activeView()->getDoc()->documentNumber() ); + else if ((mainWindows() > 1) && (m_docManager->documents() > 0)) + mainWindow->viewManager()->activateView ( (m_docManager->document(m_docManager->documents()-1))->documentNumber() ); + else if ((mainWindows() > 1) && (m_docManager->documents() < 1)) + mainWindow->viewManager()->openURL ( KURL() ); + + mainWindow->show (); + + return mainWindow; +} + +void KateApp::removeMainWindow (KateMainWindow *mainWindow) +{ + m_mainWindows.remove (mainWindow); +} + +KateMainWindow *KateApp::activeMainWindow () +{ + if (m_mainWindows.isEmpty()) + return 0; + + int n = m_mainWindows.findIndex ((KateMainWindow *)activeWindow()); + + if (n < 0) + n=0; + + return m_mainWindows[n]; +} + +uint KateApp::mainWindows () const +{ + return m_mainWindows.size(); +} + +KateMainWindow *KateApp::mainWindow (uint n) +{ + if (n < m_mainWindows.size()) + return m_mainWindows[n]; + + return 0; +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateapp.h b/kate/app/kateapp.h new file mode 100644 index 000000000..ff1d9d967 --- /dev/null +++ b/kate/app/kateapp.h @@ -0,0 +1,243 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_APP_H__ +#define __KATE_APP_H__ + +#include "katemain.h" + +#include + +#include + +class KateSessionManager; +class KateAppDCOPIface; + +namespace Kate { + class Application; +} + +class KCmdLineArgs; + +/** + * Kate Application + * This class represents the core kate application object + */ +class KDE_EXPORT KateApp : public KApplication +{ + Q_OBJECT + + /** + * constructors & accessor to app object + plugin interface for it + */ + public: + /** + * application constructor + * @param args parsed command line args + */ + KateApp (KCmdLineArgs *args); + + /** + * application destructor + */ + ~KateApp (); + + /** + * static accessor to avoid casting ;) + * @return app instance + */ + static KateApp *self (); + + /** + * accessor to the Kate::Application plugin interface + * @return application plugin interface + */ + Kate::Application *application (); + + /** + * Returns the current Kate version (X.Y) or (X.Y.Z) + * @param fullVersion should full version be returned? + * @return Kate version + */ + static QString kateVersion (bool fullVersion = true); + + /** + * kate init + */ + private: + /** + * restore a old kate session + */ + void restoreKate (); + + /** + * try to start kate + * @return success, if false, kate should exit + */ + bool startupKate (); + + /** + * kate shutdown + */ + public: + /** + * shutdown kate application + * @param win mainwindow which is used for dialogs + */ + void shutdownKate (KateMainWindow *win); + + /** + * application should exit + * @return should we exit? + */ + bool shouldExit () { return m_shouldExit; } + + /** + * other accessors for global unique instances + */ + public: + /** + * accessor to plugin manager + * @return plugin manager instance + */ + KatePluginManager *pluginManager(); + + /** + * accessor to document manager + * @return document manager instance + */ + KateDocManager *documentManager (); + + /** + * accessor to session manager + * @return session manager instance + */ + KateSessionManager *sessionManager (); + + /** + * window management + */ + public: + /** + * create a new main window, use given config if any for restore + * @param sconfig session config object + * @param sgroup session group for this window + * @return new constructed main window + */ + KateMainWindow *newMainWindow (KConfig *sconfig = 0, const QString &sgroup = ""); + + /** + * removes the mainwindow given, DOES NOT DELETE IT + * @param mainWindow window to remove + */ + void removeMainWindow (KateMainWindow *mainWindow); + + /** + * give back current active main window + * can only be 0 at app start or exit + * @return current active main window + */ + KateMainWindow *activeMainWindow (); + + /** + * give back number of existing main windows + * @return number of main windows + */ + uint mainWindows () const; + + /** + * give back the window you want + * @param n window index + * @return requested main window + */ + KateMainWindow *mainWindow (uint n); + + /** + * some stuff for the dcop API + */ + public: + /** + * open url with given encoding + * used by kate if --use given + * @param url filename + * @param encoding encoding name + * @param isTempFile if set to true and the file is a local file, it will be deleted when the document is closed. + * @return success + */ + bool openURL (const KURL &url, const QString &encoding, bool isTempFile ); + + /** + * position cursor in current active view + * @param line line to set + * @param column column to set + * @return success + */ + bool setCursor (int line, int column); + + /** + * helper to handle stdin input + * open a new document/view, fill it with the text given + * @param text text to fill in the new doc/view + * @return success + */ + bool openInput (const QString &text); + + private: + /** + * kate's command line args + */ + KCmdLineArgs *m_args; + + /** + * plugin interface + */ + Kate::Application *m_application; + + /** + * document manager + */ + KateDocManager *m_docManager; + + /** + * plugin manager + */ + KatePluginManager *m_pluginManager; + + /** + * session manager + */ + KateSessionManager *m_sessionManager; + + /** + * known main windows + */ + QValueList m_mainWindows; + + /** + * dcop interface + */ + KateAppDCOPIface *m_obj; + + /** + * should exit flag + */ + bool m_shouldExit; +}; + +#endif diff --git a/kate/app/kateappIface.cpp b/kate/app/kateappIface.cpp new file mode 100644 index 000000000..b70be960a --- /dev/null +++ b/kate/app/kateappIface.cpp @@ -0,0 +1,104 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateappIface.h" + +#include "kateapp.h" +#include "katesession.h" +#include "katedocmanager.h" +#include "katemainwindow.h" + +KateAppDCOPIface::KateAppDCOPIface (KateApp *app) : DCOPObject ("KateApplication") + , m_app (app) +{ +} + +DCOPRef KateAppDCOPIface::documentManager () +{ + return DCOPRef (m_app->documentManager()->dcopObject ()); +} + +DCOPRef KateAppDCOPIface::activeMainWindow () +{ + KateMainWindow *win = m_app->activeMainWindow(); + + if (win) + return DCOPRef (win->dcopObject ()); + + return DCOPRef (); +} + +uint KateAppDCOPIface::activeMainWindowNumber () +{ + KateMainWindow *win = m_app->activeMainWindow(); + + if (win) + return win->mainWindowNumber (); + + return 0; +} + + +uint KateAppDCOPIface::mainWindows () +{ + return m_app->mainWindows (); +} + +DCOPRef KateAppDCOPIface::mainWindow (uint n) +{ + KateMainWindow *win = m_app->mainWindow(n); + + if (win) + return DCOPRef (win->dcopObject ()); + + return DCOPRef (); +} + +bool KateAppDCOPIface::openURL (KURL url, QString encoding) +{ + return m_app->openURL (url, encoding, false); +} + +bool KateAppDCOPIface::openURL (KURL url, QString encoding, bool isTempFile) +{ + return m_app->openURL (url, encoding, isTempFile); +} + +bool KateAppDCOPIface::setCursor (int line, int column) +{ + return m_app->setCursor (line, column); +} + +bool KateAppDCOPIface::openInput (QString text) +{ + return m_app->openInput (text); +} + +bool KateAppDCOPIface::activateSession (QString session) +{ + m_app->sessionManager()->activateSession (m_app->sessionManager()->giveSession (session)); + + return true; +} + +const QString & KateAppDCOPIface::session() const +{ + return m_app->sessionManager()->activeSession()->sessionName(); +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateappIface.h b/kate/app/kateappIface.h new file mode 100644 index 000000000..577c36e41 --- /dev/null +++ b/kate/app/kateappIface.h @@ -0,0 +1,94 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _kateapp_Iface_h_ +#define _kateapp_Iface_h_ + +#include +#include +#include + +class KateApp; + +class KateAppDCOPIface : public DCOPObject +{ + K_DCOP + + public: + KateAppDCOPIface (KateApp *app); + + k_dcop: + DCOPRef documentManager (); + + DCOPRef activeMainWindow (); + + uint activeMainWindowNumber (); + + uint mainWindows (); + DCOPRef mainWindow (uint n = 0); + + /** + * open a file with given url and encoding + * will get view created + * @param url url of the file + * @param encoding encoding name + * @return success + */ + bool openURL (KURL url, QString encoding); + + /** + * Like the above, but adds an option to let the documentManager know + * if the file should be deleted when closed. + * @p isTempFile should be set to true with the --tempfile option set ONLY, + * files opened with this set to true will be deleted when closed. + */ + bool openURL(KURL url, QString encoding, bool isTempFile); + + /** + * set cursor of active view in active main window + * @param line line for cursor + * @param column column for cursor + * @return success + */ + bool setCursor (int line, int column); + + /** + * helper to handle stdin input + * open a new document/view, fill it with the text given + * @param text text to fill in the new doc/view + * @return success + */ + bool openInput (QString text); + + /** + * activate a given session + * @param session session name + * @return success + */ + bool activateSession (QString session); + + /** + * @return the name of the active session + */ + const QString & session() const; + + private: + KateApp *m_app; +}; + +#endif diff --git a/kate/app/kateconfigdialog.cpp b/kate/app/kateconfigdialog.cpp new file mode 100644 index 000000000..62d86054b --- /dev/null +++ b/kate/app/kateconfigdialog.cpp @@ -0,0 +1,441 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateconfigdialog.h" +#include "kateconfigdialog.moc" + +#include "katemainwindow.h" + +#include "kateconsole.h" +#include "katedocmanager.h" +#include "katepluginmanager.h" +#include "kateconfigplugindialogpage.h" +#include "kateviewmanager.h" +#include "kateapp.h" +#include "katefileselector.h" +#include "katefilelist.h" +#include "kateexternaltools.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +KateConfigDialog::KateConfigDialog ( KateMainWindow *parent, Kate::View *view ) + : KDialogBase ( KDialogBase::TreeList, + i18n("Configure"), + KDialogBase::Ok | KDialogBase::Apply|KDialogBase::Cancel | KDialogBase::Help, + KDialogBase::Ok, + parent, + "configdialog" ) +{ + KConfig *config = KateApp::self()->config(); + + KWin::setIcons( winId(), KateApp::self()->icon(), KateApp::self()->miniIcon() ); + + actionButton( KDialogBase::Apply)->setEnabled( false ); + + mainWindow = parent; + + setMinimumSize(600,400); + + v = view; + + pluginPages.setAutoDelete (false); + editorPages.setAutoDelete (false); + + QStringList path; + + setShowIconsInTreeList(true); + + path.clear(); + path << i18n("Application"); + setFolderIcon (path, SmallIcon("kate", KIcon::SizeSmall)); + + path.clear(); + + //BEGIN General page + path << i18n("Application") << i18n("General"); + QFrame* frGeneral = addPage(path, i18n("General Options"), BarIcon("gohome", KIcon::SizeSmall)); + + QVBoxLayout *lo = new QVBoxLayout( frGeneral ); + lo->setSpacing(KDialog::spacingHint()); + config->setGroup("General"); + + // GROUP with the one below: "Appearance" + QButtonGroup *bgStartup = new QButtonGroup( 1, Qt::Horizontal, i18n("&Appearance"), frGeneral ); + lo->addWidget( bgStartup ); + + // show full path in title + config->setGroup("General"); + cb_fullPath = new QCheckBox( i18n("&Show full path in title"), bgStartup); + cb_fullPath->setChecked( mainWindow->viewManager()->getShowFullPath() ); + QWhatsThis::add(cb_fullPath,i18n("If this option is checked, the full document path will be shown in the window caption.")); + connect( cb_fullPath, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + + // GROUP with the one below: "Behavior" + bgStartup = new QButtonGroup( 1, Qt::Horizontal, i18n("&Behavior"), frGeneral ); + lo->addWidget( bgStartup ); + + // sync the konsole ? + cb_syncKonsole = new QCheckBox(bgStartup); + cb_syncKonsole->setText(i18n("Sync &terminal emulator with active document")); + cb_syncKonsole->setChecked(parent->syncKonsole); + QWhatsThis::add( cb_syncKonsole, i18n( + "If this is checked, the built in Konsole will cd to the directory " + "of the active document when started and whenever the active document changes, " + "if the document is a local file.") ); + connect( cb_syncKonsole, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + // modified files notification + cb_modNotifications = new QCheckBox( + i18n("Wa&rn about files modified by foreign processes"), bgStartup ); + cb_modNotifications->setChecked( parent->modNotification ); + QWhatsThis::add( cb_modNotifications, i18n( + "If enabled, when Kate receives focus you will be asked what to do with " + "files that have been modified on the hard disk. If not enabled, you will " + "be asked what to do with a file that has been modified on the hard disk only " + "when that file gains focus inside Kate.") ); + connect( cb_modNotifications, SIGNAL( toggled( bool ) ), + this, SLOT( slotChanged() ) ); + + // GROUP with the one below: "Meta-informations" + bgStartup = new QButtonGroup( 1, Qt::Horizontal, i18n("Meta-Information"), frGeneral ); + lo->addWidget( bgStartup ); + + // save meta infos + cb_saveMetaInfos = new QCheckBox( bgStartup ); + cb_saveMetaInfos->setText(i18n("Keep &meta-information past sessions")); + cb_saveMetaInfos->setChecked(KateDocManager::self()->getSaveMetaInfos()); + QWhatsThis::add(cb_saveMetaInfos, i18n( + "Check this if you want document configuration like for example " + "bookmarks to be saved past editor sessions. The configuration will be " + "restored if the document has not changed when reopened.")); + connect( cb_saveMetaInfos, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + // meta infos days + QHBox *hbDmf = new QHBox( bgStartup ); + hbDmf->setEnabled(KateDocManager::self()->getSaveMetaInfos()); + QLabel *lDmf = new QLabel( i18n("&Delete unused meta-information after:"), hbDmf ); + sb_daysMetaInfos = new QSpinBox( 0, 180, 1, hbDmf ); + sb_daysMetaInfos->setSpecialValueText(i18n("(never)")); + sb_daysMetaInfos->setSuffix(i18n(" day(s)")); + sb_daysMetaInfos->setValue( KateDocManager::self()->getDaysMetaInfos() ); + lDmf->setBuddy( sb_daysMetaInfos ); + connect( cb_saveMetaInfos, SIGNAL( toggled( bool ) ), hbDmf, SLOT( setEnabled( bool ) ) ); + connect( sb_daysMetaInfos, SIGNAL( valueChanged ( int ) ), this, SLOT( slotChanged() ) ); + + lo->addStretch(1); // :-] works correct without autoadd + //END General page + + path.clear(); + + //BEGIN Session page + path << i18n("Application") << i18n("Sessions"); + QFrame* frSessions = addPage(path, i18n("Session Management"), BarIcon("history", KIcon::SizeSmall)); + + lo = new QVBoxLayout( frSessions ); + lo->setSpacing(KDialog::spacingHint()); + + // GROUP with the one below: "Startup" + bgStartup = new QButtonGroup( 1, Qt::Horizontal, i18n("Elements of Sessions"), frSessions ); + lo->addWidget( bgStartup ); + + // restore view config + cb_restoreVC = new QCheckBox( bgStartup ); + cb_restoreVC->setText(i18n("Include &window configuration")); + config->setGroup("General"); + cb_restoreVC->setChecked( config->readBoolEntry("Restore Window Configuration", true) ); + QWhatsThis::add(cb_restoreVC, i18n( + "Check this if you want all your views and frames restored each time you open Kate")); + connect( cb_restoreVC, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + QRadioButton *rb1, *rb2, *rb3; + + sessions_start = new QButtonGroup( 1, Qt::Horizontal, i18n("Behavior on Application Startup"), frSessions ); + lo->add (sessions_start); + + sessions_start->setRadioButtonExclusive( true ); + sessions_start->insert( rb1=new QRadioButton( i18n("&Start new session"), sessions_start ), 0 ); + sessions_start->insert( rb2=new QRadioButton( i18n("&Load last-used session"), sessions_start ), 1 ); + sessions_start->insert( rb3=new QRadioButton( i18n("&Manually choose a session"), sessions_start ), 2 ); + + config->setGroup("General"); + QString sesStart (config->readEntry ("Startup Session", "manual")); + if (sesStart == "new") + sessions_start->setButton (0); + else if (sesStart == "last") + sessions_start->setButton (1); + else + sessions_start->setButton (2); + + connect(rb1, SIGNAL(toggled(bool)), this, SLOT(slotChanged())); + connect(rb2, SIGNAL(toggled(bool)), this, SLOT(slotChanged())); + connect(rb3, SIGNAL(toggled(bool)), this, SLOT(slotChanged())); + + sessions_exit = new QButtonGroup( 1, Qt::Horizontal, i18n("Behavior on Application Exit or Session Switch"), frSessions ); + lo->add (sessions_exit); + + sessions_exit->setRadioButtonExclusive( true ); + sessions_exit->insert( rb1=new QRadioButton( i18n("&Do not save session"), sessions_exit ), 0 ); + sessions_exit->insert( rb2=new QRadioButton( i18n("&Save session"), sessions_exit ), 1 ); + sessions_exit->insert( rb3=new QRadioButton( i18n("&Ask user"), sessions_exit ), 2 ); + + config->setGroup("General"); + QString sesExit (config->readEntry ("Session Exit", "save")); + if (sesExit == "discard") + sessions_exit->setButton (0); + else if (sesExit == "save") + sessions_exit->setButton (1); + else + sessions_exit->setButton (2); + + connect(rb1, SIGNAL(toggled(bool)), this, SLOT(slotChanged())); + connect(rb2, SIGNAL(toggled(bool)), this, SLOT(slotChanged())); + connect(rb3, SIGNAL(toggled(bool)), this, SLOT(slotChanged())); + + lo->addStretch(1); // :-] works correct without autoadd + //END Session page + + path.clear(); + + // file selector page + path << i18n("Application") << i18n("File Selector"); + + QVBox *page = addVBoxPage( path, i18n("File Selector Settings"), + BarIcon("fileopen", KIcon::SizeSmall) ); + fileSelConfigPage = new KFSConfigPage( page, "file selector config page", + mainWindow->fileselector ); + connect( fileSelConfigPage, SIGNAL( changed() ), this, SLOT( slotChanged() ) ); + path.clear(); + + path << i18n("Application") << i18n("Document List"); + page = addVBoxPage( path, i18n("Document List Settings"), + BarIcon("view_text", KIcon::SizeSmall) ); + filelistConfigPage = new KFLConfigPage( page, "file list config page", + mainWindow->filelist ); + connect( filelistConfigPage, SIGNAL( changed() ), this, SLOT( slotChanged() ) ); + path.clear(); + + path << i18n("Application") << i18n("Plugins"); + /*QVBox **/page=addVBoxPage(path,i18n("Plugin Manager"), + BarIcon("connect_established",KIcon::SizeSmall)); + KateConfigPluginPage *configPluginPage = new KateConfigPluginPage(page, this); + connect( configPluginPage, SIGNAL( changed() ), this, SLOT( slotChanged() ) ); + + // Tools->External Tools menu + path.clear(); + path << i18n("Application") << i18n("External Tools"); + page = addVBoxPage( path, i18n("External Tools"), + BarIcon("configure", KIcon::SizeSmall) ); + configExternalToolsPage = new KateExternalToolsConfigWidget(page, "external tools config page"); + connect( configExternalToolsPage, SIGNAL(changed()), this, SLOT(slotChanged()) ); + + // editor widgets from kwrite/kwdialog + path.clear(); + path << i18n("Editor"); + setFolderIcon (path, SmallIcon("edit", KIcon::SizeSmall)); + + for (uint i = 0; i < KTextEditor::configInterfaceExtension (v->document())->configPages (); i++) + { + path.clear(); + path << i18n("Editor") << KTextEditor::configInterfaceExtension (v->document())->configPageName (i); + /*QVBox **/page = addVBoxPage(path, KTextEditor::configInterfaceExtension (v->document())->configPageFullName (i), + KTextEditor::configInterfaceExtension (v->document())->configPagePixmap(i, KIcon::SizeSmall) ); + + KTextEditor::ConfigPage *cPage = KTextEditor::configInterfaceExtension (v->document())->configPage(i, page); + connect( cPage, SIGNAL( changed() ), this, SLOT( slotChanged() ) ); + editorPages.append (cPage); + } + + KatePluginList &pluginList (KatePluginManager::self()->pluginList()); + for (unsigned int i=0; i < pluginList.size(); ++i) + { + if ( pluginList[i].load + && Kate::pluginConfigInterfaceExtension(pluginList[i].plugin) ) + addPluginPage (pluginList[i].plugin); + } + + enableButtonSeparator(true); + dataChanged = false; + unfoldTreeList (); +} + +KateConfigDialog::~KateConfigDialog() +{ +} + +void KateConfigDialog::addPluginPage (Kate::Plugin *plugin) +{ + if (!Kate::pluginConfigInterfaceExtension(plugin)) + return; + + for (uint i=0; iconfigPages(); i++) + { + QStringList path; + path.clear(); + path << i18n("Application")<configPageName(i); + QVBox *page=addVBoxPage(path, Kate::pluginConfigInterfaceExtension(plugin)->configPageFullName(i), Kate::pluginConfigInterfaceExtension(plugin)->configPagePixmap(i, KIcon::SizeSmall)); + + PluginPageListItem *info=new PluginPageListItem; + info->plugin = plugin; + info->page = Kate::pluginConfigInterfaceExtension(plugin)->configPage (i, page); + connect( info->page, SIGNAL( changed() ), this, SLOT( slotChanged() ) ); + pluginPages.append(info); + } +} + +void KateConfigDialog::removePluginPage (Kate::Plugin *plugin) +{ + if (!Kate::pluginConfigInterfaceExtension(plugin)) + return; + + for (uint i=0; iplugin == plugin ) + { + QWidget *w = pluginPages.at(i)->page->parentWidget(); + delete pluginPages.at(i)->page; + delete w; + pluginPages.remove(pluginPages.at(i)); + i--; + } + } +} + +void KateConfigDialog::slotOk() +{ + slotApply(); + accept(); +} + +void KateConfigDialog::slotApply() +{ + KConfig *config = KateApp::self()->config(); + + // if data changed apply the kate app stuff + if( dataChanged ) + { + config->setGroup("General"); + + config->writeEntry("Restore Window Configuration", cb_restoreVC->isChecked()); + + int bu = sessions_start->id (sessions_start->selected()); + + if (bu == 0) + config->writeEntry ("Startup Session", "new"); + else if (bu == 1) + config->writeEntry ("Startup Session", "last"); + else + config->writeEntry ("Startup Session", "manual"); + + bu = sessions_exit->id (sessions_exit->selected()); + + if (bu == 0) + config->writeEntry ("Session Exit", "discard"); + else if (bu == 1) + config->writeEntry ("Session Exit", "save"); + else + config->writeEntry ("Session Exit", "ask"); + + config->writeEntry("Save Meta Infos", cb_saveMetaInfos->isChecked()); + KateDocManager::self()->setSaveMetaInfos(cb_saveMetaInfos->isChecked()); + + config->writeEntry("Days Meta Infos", sb_daysMetaInfos->value() ); + KateDocManager::self()->setDaysMetaInfos(sb_daysMetaInfos->value()); + + config->writeEntry("Modified Notification", cb_modNotifications->isChecked()); + mainWindow->modNotification = cb_modNotifications->isChecked(); + + mainWindow->syncKonsole = cb_syncKonsole->isChecked(); + + fileSelConfigPage->apply(); + + filelistConfigPage->apply(); + + configExternalToolsPage->apply(); + KateExternalToolsCommand::self()->reload(); + for (uint i=0; i < KateApp::self()->mainWindows(); i++) + { + KateMainWindow *win = KateApp::self()->mainWindow (i); + win->externalTools->reload(); + } + //mainWindow->externalTools->reload(); + + mainWindow->viewManager()->setShowFullPath( cb_fullPath->isChecked() ); // hm, stored 2 places :( + + mainWindow->saveOptions (); + + // save plugin config !! + KateApp::self()->pluginManager()->writeConfig (); + } + + // + // editor config ! (the apply() methode will check the changed state internally) + // + for (uint i=0; iapply(); + } + + v->getDoc()->writeConfig(config); + + // + // plugins config ! (the apply() methode SHOULD check the changed state internally) + // + for (uint i=0; ipage->apply(); + } + + config->sync(); + + dataChanged = false; + actionButton( KDialogBase::Apply)->setEnabled( false ); +} + +void KateConfigDialog::slotChanged() +{ + dataChanged = true; + actionButton( KDialogBase::Apply)->setEnabled( true ); +} diff --git a/kate/app/kateconfigdialog.h b/kate/app/kateconfigdialog.h new file mode 100644 index 000000000..3fb523b61 --- /dev/null +++ b/kate/app/kateconfigdialog.h @@ -0,0 +1,82 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __kate_configdialog_h__ +#define __kate_configdialog_h__ + +#include "katemain.h" + +#include "../interfaces/plugin.h" +#include "../interfaces/pluginconfiginterface.h" +#include "../interfaces/pluginconfiginterfaceextension.h" + +#include +#include + +#include + +class QCheckBox; +class QSpinBox; +class QButtonGroup; + +struct PluginPageListItem +{ + Kate::Plugin *plugin; + Kate::PluginConfigPage *page; +}; + +class KateConfigDialog : public KDialogBase +{ + Q_OBJECT + + public: + KateConfigDialog (KateMainWindow *parent, Kate::View *view); + ~KateConfigDialog (); + + public: + void addPluginPage (Kate::Plugin *plugin); + void removePluginPage (Kate::Plugin *plugin); + + protected slots: + void slotOk(); + void slotApply(); + void slotChanged(); + + private: + KateMainWindow *mainWindow; + + Kate::View* v; + bool dataChanged; + + QCheckBox *cb_fullPath; + QCheckBox *cb_syncKonsole; + QCheckBox *cb_modNotifications; + QCheckBox *cb_saveMetaInfos; + QSpinBox *sb_daysMetaInfos; + QCheckBox* cb_restoreVC; + QButtonGroup *sessions_start; + QButtonGroup *sessions_exit; + Kate::ConfigPage *fileSelConfigPage; + Kate::ConfigPage *filelistConfigPage; + Kate::ConfigPage *configExternalToolsPage; + QPtrList pluginPages; + QPtrList editorPages; +}; + +#endif diff --git a/kate/app/kateconfigplugindialogpage.cpp b/kate/app/kateconfigplugindialogpage.cpp new file mode 100644 index 000000000..7269d5f5b --- /dev/null +++ b/kate/app/kateconfigplugindialogpage.cpp @@ -0,0 +1,121 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateconfigplugindialogpage.h" +#include "kateconfigplugindialogpage.moc" + +#include "katepluginmanager.h" +#include "kateconfigdialog.h" +#include +#include "kateapp.h" +#include +#include +#include +#include +#include +#include +#include +#include + +class KatePluginListItem : public QCheckListItem +{ + public: + KatePluginListItem(bool checked, KatePluginInfo *info, QListView *parent); + KatePluginInfo *info() const { return mInfo; } + + protected: + void stateChange(bool); + + private: + KatePluginInfo *mInfo; + bool silentStateChange; +}; + +KatePluginListItem::KatePluginListItem(bool checked, KatePluginInfo *info, QListView *parent) + : QCheckListItem(parent, info->service->name(), CheckBox) + , mInfo(info) + , silentStateChange(false) +{ + silentStateChange = true; + setOn(checked); + silentStateChange = false; +} + +void KatePluginListItem::stateChange(bool b) +{ + if(!silentStateChange) + static_cast(listView())->stateChanged(this, b); +} + +KatePluginListView::KatePluginListView(QWidget *parent, const char *name) + : KListView(parent, name) +{ +} + +void KatePluginListView::stateChanged(KatePluginListItem *item, bool b) +{ + emit stateChange(item, b); +} + +KateConfigPluginPage::KateConfigPluginPage(QWidget *parent, KateConfigDialog *dialog):QVBox(parent) +{ + myDialog=dialog; + + KatePluginListView* listView = new KatePluginListView(this); + listView->addColumn(i18n("Name")); + listView->addColumn(i18n("Comment")); + QWhatsThis::add(listView,i18n("Here you can see all available Kate plugins. Those with a check mark are loaded, and will be loaded again the next time Kate is started.")); + + connect(listView, SIGNAL(stateChange(KatePluginListItem *, bool)), this, SLOT(stateChange(KatePluginListItem *, bool))); + + KatePluginList &pluginList (KatePluginManager::self()->pluginList()); + for (unsigned int i=0; i < pluginList.size(); ++i) + { + KatePluginListItem *item = new KatePluginListItem(pluginList[i].load, &pluginList[i], listView); + item->setText(0, pluginList[i].service->name()); + item->setText(1, pluginList[i].service->comment()); + } +} + + void KateConfigPluginPage::stateChange(KatePluginListItem *item, bool b) +{ + if(b) + loadPlugin(item); + else + unloadPlugin(item); + + emit changed(); +} + +void KateConfigPluginPage::loadPlugin (KatePluginListItem *item) +{ + KatePluginManager::self()->loadPlugin (item->info()); + KatePluginManager::self()->enablePluginGUI (item->info()); + myDialog->addPluginPage (item->info()->plugin); + + item->setOn(true); +} + +void KateConfigPluginPage::unloadPlugin (KatePluginListItem *item) +{ + myDialog->removePluginPage (item->info()->plugin); + KatePluginManager::self()->unloadPlugin (item->info()); + + item->setOn(false); +} diff --git a/kate/app/kateconfigplugindialogpage.h b/kate/app/kateconfigplugindialogpage.h new file mode 100644 index 000000000..f65da880b --- /dev/null +++ b/kate/app/kateconfigplugindialogpage.h @@ -0,0 +1,69 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_CONFIGPLUGINDIALOGPAGE_H__ +#define __KATE_CONFIGPLUGINDIALOGPAGE_H__ + +#include "katemain.h" +#include "katepluginmanager.h" + +#include + +#include + +class KatePluginListItem; + +class KatePluginListView : public KListView +{ + Q_OBJECT + + friend class KatePluginListItem; + + public: + KatePluginListView (QWidget *parent = 0, const char *name = 0); + + signals: + void stateChange(KatePluginListItem *, bool); + + private: + void stateChanged(KatePluginListItem *, bool); +}; + +class KateConfigPluginPage: public QVBox +{ + Q_OBJECT + + public: + KateConfigPluginPage(QWidget *parent, class KateConfigDialog *dialog); + ~KateConfigPluginPage(){;}; + + private: + class KateConfigDialog *myDialog; + + signals: + void changed(); + + private slots: + void stateChange(KatePluginListItem *, bool); + + void loadPlugin (KatePluginListItem *); + void unloadPlugin (KatePluginListItem *); +}; + +#endif diff --git a/kate/app/kateconsole.cpp b/kate/app/kateconsole.cpp new file mode 100644 index 000000000..5220859b2 --- /dev/null +++ b/kate/app/kateconsole.cpp @@ -0,0 +1,143 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateconsole.h" +#include "kateconsole.moc" + +#include "katemain.h" +#include "katemdi.h" +#include "katemainwindow.h" +#include "kateviewmanager.h" + +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + +KateConsole::KateConsole (KateMainWindow *mw, KateMDI::ToolView* parent) + : QVBox (parent) + , m_part (0) + , m_mw (mw) + , m_toolView (parent) +{ +} + +KateConsole::~KateConsole () +{ + if (m_part) + disconnect ( m_part, SIGNAL(destroyed()), this, SLOT(slotDestroyed()) ); +} + +void KateConsole::loadConsoleIfNeeded() +{ + if (m_part) return; + + if (!topLevelWidget() || !parentWidget()) return; + if (!topLevelWidget() || !isVisibleTo(topLevelWidget())) return; + + KLibFactory *factory = KLibLoader::self()->factory("libkonsolepart"); + + if (!factory) return; + + m_part = static_cast(factory->create(this,"libkonsolepart", "KParts::ReadOnlyPart")); + + if (!m_part) return; + + setFocusProxy(m_part->widget()); + + KGlobal::locale()->insertCatalogue("konsole"); + + m_part->widget()->show(); + + connect ( m_part, SIGNAL(destroyed()), this, SLOT(slotDestroyed()) ); + + if (m_mw->viewManager()->activeView()) + if (m_mw->viewManager()->activeView()->getDoc()->url().isValid()) + cd(KURL( m_mw->viewManager()->activeView()->getDoc()->url().path() )); +} + +void KateConsole::slotDestroyed () +{ + m_part = 0; + + // hide the dockwidget + if (parentWidget()) + { + m_mw->hideToolView (m_toolView); + m_mw->centralWidget()->setFocus (); + } +} + +void KateConsole::showEvent(QShowEvent *) +{ + if (m_part) return; + + loadConsoleIfNeeded(); +} + +void KateConsole::cd (const KURL &url) +{ + loadConsoleIfNeeded(); + + if (!m_part) return; + + m_part->openURL (url); +} + +void KateConsole::sendInput( const QString& text ) +{ + loadConsoleIfNeeded(); + + if (!m_part) return; + + TerminalInterface *t = static_cast( m_part->qt_cast( "TerminalInterface" ) ); + + if (!t) return; + + t->sendInput (text); +} + +void KateConsole::slotPipeToConsole () +{ + if (KMessageBox::warningContinueCancel + (m_mw + , i18n ("Do you really want to pipe the text to the console? This will execute any contained commands with your user rights.") + , i18n ("Pipe to Console?") + , i18n("Pipe to Console"), "Pipe To Console Warning") != KMessageBox::Continue) + return; + + Kate::View *v = m_mw->viewManager()->activeView(); + + if (!v) + return; + + if (v->getDoc()->hasSelection ()) + sendInput (v->getDoc()->selection()); + else + sendInput (v->getDoc()->text()); +} diff --git a/kate/app/kateconsole.h b/kate/app/kateconsole.h new file mode 100644 index 000000000..1750df11d --- /dev/null +++ b/kate/app/kateconsole.h @@ -0,0 +1,116 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_CONSOLE_H__ +#define __KATE_CONSOLE_H__ + +#include "katemain.h" + +#include + +#include + +namespace KParts { + class ReadOnlyPart; +} + +namespace KateMDI { + class ToolView; +} + +class KateMainWindow; + +/** + * KateConsole + * This class is used for the internal terminal emulator + * It uses internally the konsole part, thx to konsole devs :) + */ +class KateConsole : public QVBox +{ + Q_OBJECT + + public: + /** + * construct us + * @param mw main window + * @param parent toolview + */ + KateConsole (KateMainWindow *mw, KateMDI::ToolView* parent); + + /** + * destruct us + */ + ~KateConsole (); + + /** + * cd to dir + * @param url given dir + */ + void cd (const KURL &url); + + /** + * send given text to console + * @param text commands for console + */ + void sendInput( const QString& text ); + + public slots: + /** + * pipe current document to console + */ + void slotPipeToConsole (); + + private slots: + /** + * the konsole exited ;) + * handle that, hide the dock + */ + void slotDestroyed (); + + /** + * construct console if needed + */ + void loadConsoleIfNeeded(); + + protected: + /** + * the konsole get shown + * @param ev show event + */ + void showEvent(QShowEvent *ev); + + private: + /** + * console part + */ + KParts::ReadOnlyPart *m_part; + + /** + * main window of this console + */ + KateMainWindow *m_mw; + + /** + * toolview for this console + */ + KateMDI::ToolView *m_toolView; +}; + +#endif diff --git a/kate/app/katedocmanager.cpp b/kate/app/katedocmanager.cpp new file mode 100644 index 000000000..fe6491f78 --- /dev/null +++ b/kate/app/katedocmanager.cpp @@ -0,0 +1,611 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katedocmanager.h" +#include "katedocmanager.moc" +#include "kateapp.h" +#include "katemainwindow.h" +#include "kateviewmanager.h" +#include "katedocmanageriface.h" +#include "kateexternaltools.h" +#include "kateviewspacecontainer.h" + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +KateDocManager::KateDocManager (QObject *parent) + : QObject (parent) + , m_saveMetaInfos(true) + , m_daysMetaInfos(0) +{ + m_factory = (KParts::Factory *) KLibLoader::self()->factory ("libkatepart"); + + m_documentManager = new Kate::DocumentManager (this); + m_docList.setAutoDelete(true); + m_docDict.setAutoDelete(false); + m_docInfos.setAutoDelete(true); + + m_dcop = new KateDocManagerDCOPIface (this); + + m_metaInfos = new KConfig("metainfos", false, false, "appdata"); + + createDoc (); +} + +KateDocManager::~KateDocManager () +{ + // save config + if (!m_docList.isEmpty()) + m_docList.at(0)->writeConfig(KateApp::self()->config()); + + if (m_saveMetaInfos) + { + // saving meta-infos when file is saved is not enough, we need to do it once more at the end + for (Kate::Document *doc = m_docList.first(); doc; doc = m_docList.next()) + saveMetaInfos(doc); + + // purge saved filesessions + if (m_daysMetaInfos > 0) + { + QStringList groups = m_metaInfos->groupList(); + QDateTime *def = new QDateTime(QDate(1970, 1, 1)); + for (QStringList::Iterator it = groups.begin(); it != groups.end(); ++it) + { + m_metaInfos->setGroup(*it); + QDateTime last = m_metaInfos->readDateTimeEntry("Time", def); + if (last.daysTo(QDateTime::currentDateTime()) > m_daysMetaInfos) + m_metaInfos->deleteGroup(*it); + } + delete def; + } + } + + delete m_dcop; + delete m_metaInfos; +} + +KateDocManager *KateDocManager::self () +{ + return KateApp::self()->documentManager (); +} + +Kate::Document *KateDocManager::createDoc () +{ + KTextEditor::Document *doc = (KTextEditor::Document *) m_factory->createPart (0, "", this, "", "KTextEditor::Document"); + + m_docList.append((Kate::Document *)doc); + m_docDict.insert (doc->documentNumber(), (Kate::Document *)doc); + m_docInfos.insert (doc, new KateDocumentInfo ()); + + if (m_docList.count() < 2) + ((Kate::Document *)doc)->readConfig(KateApp::self()->config()); + + emit documentCreated ((Kate::Document *)doc); + emit m_documentManager->documentCreated ((Kate::Document *)doc); + + connect(doc,SIGNAL(modifiedOnDisc(Kate::Document *, bool, unsigned char)),this,SLOT(slotModifiedOnDisc(Kate::Document *, bool, unsigned char))); + return (Kate::Document *)doc; +} + +void KateDocManager::deleteDoc (Kate::Document *doc) +{ + uint id = doc->documentNumber(); + uint activeId = 0; + if (m_currentDoc) + activeId = m_currentDoc->documentNumber (); + + if (m_docList.count() < 2) + doc->writeConfig(KateApp::self()->config()); + + m_docInfos.remove (doc); + m_docDict.remove (id); + m_docList.remove (doc); + + emit documentDeleted (id); + emit m_documentManager->documentDeleted (id); + + // ohh, current doc was deleted + if (activeId == id) + { + // special case of documentChanged, no longer any doc here ! + m_currentDoc = 0; + + emit documentChanged (); + emit m_documentManager->documentChanged (); + } +} + +Kate::Document *KateDocManager::document (uint n) +{ + return m_docList.at(n); +} + +Kate::Document *KateDocManager::activeDocument () +{ + return m_currentDoc; +} + +void KateDocManager::setActiveDocument (Kate::Document *doc) +{ + if (!doc) + return; + + if (m_currentDoc && (m_currentDoc->documentNumber() == doc->documentNumber())) + return; + + m_currentDoc = doc; + + emit documentChanged (); + emit m_documentManager->documentChanged (); +} + +Kate::Document *KateDocManager::firstDocument () +{ + return m_docList.first(); +} + +Kate::Document *KateDocManager::nextDocument () +{ + return m_docList.next(); +} + +Kate::Document *KateDocManager::documentWithID (uint id) +{ + return m_docDict[id]; +} + +const KateDocumentInfo *KateDocManager::documentInfo (Kate::Document *doc) +{ + return m_docInfos[doc]; +} + +int KateDocManager::findDocument (Kate::Document *doc) +{ + return m_docList.find (doc); +} + +uint KateDocManager::documents () +{ + return m_docList.count (); +} + +int KateDocManager::findDocument ( KURL url ) +{ + QPtrListIterator it(m_docList); + + for (; it.current(); ++it) + { + if ( it.current()->url() == url) + return it.current()->documentNumber(); + } + return -1; +} + +Kate::Document *KateDocManager::findDocumentByUrl( KURL url ) +{ + for (QPtrListIterator it(m_docList); it.current(); ++it) + { + if ( it.current()->url() == url) + return it.current(); + } + + return 0L; +} + +bool KateDocManager::isOpen(KURL url) +{ + // return just if we found some document with this url + return findDocumentByUrl (url) != 0; +} + +Kate::Document *KateDocManager::openURL (const KURL& url,const QString &encoding, uint *id, bool isTempFile) +{ + // special handling if still only the first initial doc is there + if (!documentList().isEmpty() && (documentList().count() == 1) && (!documentList().at(0)->isModified() && documentList().at(0)->url().isEmpty())) + { + Kate::Document* doc = documentList().getFirst(); + + doc->setEncoding(encoding); + + if (!loadMetaInfos(doc, url)) + doc->openURL (url); + + if (id) + *id=doc->documentNumber(); + + if ( isTempFile && !url.isEmpty() && url.isLocalFile() ) + { + QFileInfo fi( url.path() ); + if ( fi.exists() ) + { + m_tempFiles[ doc->documentNumber() ] = qMakePair(url, fi.lastModified()); + kdDebug(13001)<<"temporary file will be deleted after use unless modified: "<setEncoding(encoding.isNull() ? Kate::Document::defaultEncoding() : encoding); + + if (!loadMetaInfos(doc, url)) + doc->openURL (url); + } + + if (id) + *id=doc->documentNumber(); + + if ( isTempFile && !url.isEmpty() && url.isLocalFile() ) + { + QFileInfo fi( url.path() ); + if ( fi.exists() ) + { + m_tempFiles[ doc->documentNumber() ] = qMakePair(url, fi.lastModified()); + kdDebug(13001)<<"temporary file will be deleted after use unless modified: "<closeURL()) return false; + + QPtrList closeList; + uint documentNumber = doc->documentNumber(); + + for (uint i=0; i < KateApp::self()->mainWindows (); i++ ) + { + KateApp::self()->mainWindow(i)->viewManager()->closeViews(documentNumber); + } + + if ( closeURL && m_tempFiles.contains( documentNumber ) ) + { + QFileInfo fi( m_tempFiles[ documentNumber ].first.path() ); + if ( fi.lastModified() <= m_tempFiles[ documentNumber ].second /*|| + KMessageBox::questionYesNo( KateApp::self()->activeMainWindow(), + i18n("The supposedly temporary file %1 has been modified. " + "Do you want to delete it anyway?").arg(m_tempFiles[ documentNumber ].first.prettyURL()), + i18n("Delete File?") ) == KMessageBox::Yes*/ ) + { + KIO::del( m_tempFiles[ documentNumber ].first, false, false ); + kdDebug(13001)<<"Deleted temporary file "< docs = m_docList; + + for (uint i=0; i < KateApp::self()->mainWindows (); i++ ) + { + KateApp::self()->mainWindow(i)->viewManager()->setViewActivationBlocked(true); + } + + while (!docs.isEmpty() && res) + if (! closeDocument(docs.at(0),closeURL) ) + res = false; + else + docs.remove ((uint)0); + + for (uint i=0; i < KateApp::self()->mainWindows (); i++ ) + { + KateApp::self()->mainWindow(i)->viewManager()->setViewActivationBlocked(false); + + for (uint s=0; s < KateApp::self()->mainWindow(i)->viewManager()->containers()->count(); s++) + KateApp::self()->mainWindow(i)->viewManager()->containers()->at(s)->activateView (m_docList.at(0)->documentNumber()); + } + + return res; +} + +QPtrList KateDocManager::modifiedDocumentList() { + QPtrList modified; + for (QPtrListIterator it(m_docList); it.current(); ++it) { + Kate::Document *doc = it.current(); + if (doc->isModified()) { + modified.append(doc); + } + } + return modified; +} + + +bool KateDocManager::queryCloseDocuments(KateMainWindow *w) +{ + uint docCount = m_docList.count(); + for (QPtrListIterator it(m_docList); it.current(); ++it) + { + Kate::Document *doc = it.current(); + + if (doc->url().isEmpty() && doc->isModified()) + { + int msgres=KMessageBox::warningYesNoCancel( w, + i18n("

The document '%1' has been modified, but not saved." + "

Do you want to save your changes or discard them?").arg( doc->docName() ), + i18n("Close Document"), KStdGuiItem::save(), KStdGuiItem::discard() ); + + if (msgres==KMessageBox::Cancel) + return false; + + if (msgres==KMessageBox::Yes) + { + KEncodingFileDialog::Result r=KEncodingFileDialog::getSaveURLAndEncoding( + KTextEditor::encodingInterface(doc)->encoding(),QString::null,QString::null,w,i18n("Save As")); + + doc->setEncoding( r.encoding ); + + if (!r.URLs.isEmpty()) + { + KURL tmp = r.URLs.first(); + + if ( !doc->saveAs( tmp ) ) + return false; + } + else + return false; + } + } + else + { + if (!doc->queryClose()) + return false; + } + } + + // document count changed while queryClose, abort and notify user + if (m_docList.count() > docCount) + { + KMessageBox::information (w, + i18n ("New file opened while trying to close Kate, closing aborted."), + i18n ("Closing Aborted")); + return false; + } + + return true; +} + + +void KateDocManager::saveAll() +{ + for (QPtrListIterator it(m_docList); it.current(); ++it) + if ( it.current()->isModified() && it.current()->views().count() ) + ((Kate::View*)it.current()->views().first())->save(); +} + +void KateDocManager::saveDocumentList (KConfig* config) +{ + QString prevGrp=config->group(); + config->setGroup ("Open Documents"); + QString grp = config->group(); + + config->writeEntry ("Count", m_docList.count()); + + int i=0; + for ( Kate::Document *doc = m_docList.first(); doc; doc = m_docList.next() ) + { + config->setGroup(QString("Document %1").arg(i)); + doc->writeSessionConfig(config); + config->setGroup(grp); + + i++; + } + + config->setGroup(prevGrp); +} + +void KateDocManager::restoreDocumentList (KConfig* config) +{ + QString prevGrp=config->group(); + config->setGroup ("Open Documents"); + QString grp = config->group(); + + unsigned int count = config->readUnsignedNumEntry("Count", 0); + + if (count == 0) + { + config->setGroup(prevGrp); + return; + } + + QProgressDialog *pd = new QProgressDialog( + i18n("Reopening files from the last session..."), + QString::null, + count, + 0, + "openprog"); + + KWin::setOnDesktop(pd->winId(), KWin::currentDesktop()); + pd->setCaption (KateApp::self()->makeStdCaption(i18n("Starting Up"))); + + bool first = true; + for (unsigned int i=0; i < count; i++) + { + config->setGroup(QString("Document %1").arg(i)); + Kate::Document *doc = 0; + + if (first) + { + first = false; + doc = document (0); + } + else + doc = createDoc (); + + doc->readSessionConfig(config); + config->setGroup (grp); + + pd->setProgress(pd->progress()+1); + KateApp::self()->processEvents(); + } + + delete pd; + + config->setGroup(prevGrp); +} + +void KateDocManager::slotModifiedOnDisc (Kate::Document *doc, bool b, unsigned char reason) +{ + if (m_docInfos[doc]) + { + m_docInfos[doc]->modifiedOnDisc = b; + m_docInfos[doc]->modifiedOnDiscReason = reason; + } +} + +void KateDocManager::slotModChanged(Kate::Document *doc) +{ + saveMetaInfos(doc); +} + +/** + * Load file and file' meta-informations iif the MD5 didn't change since last time. + */ +bool KateDocManager::loadMetaInfos(Kate::Document *doc, const KURL &url) +{ + if (!m_saveMetaInfos) + return false; + + if (!m_metaInfos->hasGroup(url.prettyURL())) + return false; + + QCString md5; + bool ok = true; + + if (computeUrlMD5(url, md5)) + { + m_metaInfos->setGroup(url.prettyURL()); + QString old_md5 = m_metaInfos->readEntry("MD5"); + + if ((const char *)md5 == old_md5) + doc->readSessionConfig(m_metaInfos); + else + { + m_metaInfos->deleteGroup(url.prettyURL()); + ok = false; + } + + m_metaInfos->sync(); + } + + return ok && doc->url() == url; +} + +/** + * Save file' meta-informations iif doc is in 'unmodified' state + */ +void KateDocManager::saveMetaInfos(Kate::Document *doc) +{ + QCString md5; + + if (!m_saveMetaInfos) + return; + + if (doc->isModified()) + { +// kdDebug (13020) << "DOC MODIFIED: no meta data saved" << endl; + return; + } + + if (computeUrlMD5(doc->url(), md5)) + { + m_metaInfos->setGroup(doc->url().prettyURL()); + doc->writeSessionConfig(m_metaInfos); + m_metaInfos->writeEntry("MD5", (const char *)md5); + m_metaInfos->writeEntry("Time", QDateTime::currentDateTime()); + m_metaInfos->sync(); + } +} + +bool KateDocManager::computeUrlMD5(const KURL &url, QCString &result) +{ + QFile f(url.path()); + + if (f.open(IO_ReadOnly)) + { + KMD5 md5; + + if (!md5.update(f)) + return false; + + md5.hexDigest(result); + f.close(); + } + else + return false; + + return true; +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katedocmanager.h b/kate/app/katedocmanager.h new file mode 100644 index 000000000..8d302687b --- /dev/null +++ b/kate/app/katedocmanager.h @@ -0,0 +1,156 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_DOCMANAGER_H__ +#define __KATE_DOCMANAGER_H__ + +#include "katemain.h" +#include "../interfaces/documentmanager.h" + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace KParts { class Factory; } + +class KConfig; +class DCOPObject; + +class KateDocumentInfo +{ + public: + KateDocumentInfo () + : modifiedOnDisc (false), + modifiedOnDiscReason (0) + { + } + + bool modifiedOnDisc; + unsigned char modifiedOnDiscReason; +}; + +typedef QPair TPair; + +class KateDocManager : public QObject +{ + Q_OBJECT + + public: + KateDocManager (QObject *parent); + ~KateDocManager (); + + static KateDocManager *self (); + + Kate::DocumentManager *documentManager () { return m_documentManager; }; + + Kate::Document *createDoc (); + void deleteDoc (Kate::Document *doc); + + Kate::Document *document (uint n); + + Kate::Document *activeDocument (); + void setActiveDocument (Kate::Document *doc); + + Kate::Document *firstDocument (); + Kate::Document *nextDocument (); + + // search document with right documentNumber() + Kate::Document *documentWithID (uint id); + + const KateDocumentInfo *documentInfo (Kate::Document *doc); + + int findDocument (Kate::Document *doc); + /** Returns the documentNumber of the doc with url URL or -1 if no such doc is found */ + int findDocument (KURL url); + // Anders: The above is not currently stable ? + Kate::Document *findDocumentByUrl( KURL url ); + + bool isOpen(KURL url); + + uint documents (); + + QPtrList &documentList () { return m_docList; }; + + Kate::Document *openURL(const KURL&,const QString &encoding=QString::null,uint *id =0,bool isTempFile=false); + + bool closeDocument(class Kate::Document *,bool closeURL=true); + bool closeDocument(uint); + bool closeDocumentWithID(uint); + bool closeAllDocuments(bool closeURL=true); + + QPtrList modifiedDocumentList(); + bool queryCloseDocuments(KateMainWindow *w); + + void saveDocumentList (class KConfig *config); + void restoreDocumentList (class KConfig *config); + + DCOPObject *dcopObject () { return m_dcop; }; + + inline bool getSaveMetaInfos() { return m_saveMetaInfos; }; + inline void setSaveMetaInfos(bool b) { m_saveMetaInfos = b; }; + + inline int getDaysMetaInfos() { return m_daysMetaInfos; }; + inline void setDaysMetaInfos(int i) { m_daysMetaInfos = i; }; + + public slots: + /** + * saves all documents that has at least one view. + * documents with no views are ignored :P + */ + void saveAll(); + + signals: + void documentCreated (Kate::Document *doc); + void documentDeleted (uint documentNumber); + void documentChanged (); + void initialDocumentReplaced (); + + private slots: + void slotModifiedOnDisc (Kate::Document *doc, bool b, unsigned char reason); + void slotModChanged(Kate::Document *doc); + + private: + bool loadMetaInfos(Kate::Document *doc, const KURL &url); + void saveMetaInfos(Kate::Document *doc); + bool computeUrlMD5(const KURL &url, QCString &result); + + Kate::DocumentManager *m_documentManager; + QPtrList m_docList; + QIntDict m_docDict; + QPtrDict m_docInfos; + QMap m_tempFiles; + QGuardedPtr m_currentDoc; + KConfig *m_metaInfos; + bool m_saveMetaInfos; + int m_daysMetaInfos; + + DCOPObject *m_dcop; + + KParts::Factory *m_factory; + +}; + +#endif +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katedocmanageriface.cpp b/kate/app/katedocmanageriface.cpp new file mode 100644 index 000000000..9c2eabc03 --- /dev/null +++ b/kate/app/katedocmanageriface.cpp @@ -0,0 +1,131 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Ian Reinhart Geiser + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katedocmanageriface.h" + +#include "katedocmanager.h" + +#include + +KateDocManagerDCOPIface::KateDocManagerDCOPIface (KateDocManager *dm) : DCOPObject ("KateDocumentManager"), m_dm (dm) +{ + +} + +// bit more error save than the forcing c cast ;() +DCOPRef KateDocManagerDCOPIface::document (uint n) +{ + Kate::Document *doc = m_dm->document(n); + + if (!doc) + return DCOPRef (); + + DCOPObject *obj = static_cast(doc->qt_cast("DCOPObject")); + + if (!obj) + return DCOPRef (); + + return DCOPRef (obj); +} + +DCOPRef KateDocManagerDCOPIface::activeDocument () +{ + Kate::Document *doc = m_dm->activeDocument(); + + if (!doc) + return DCOPRef (); + + DCOPObject *obj = static_cast(doc->qt_cast("DCOPObject")); + + if (!obj) + return DCOPRef (); + + return DCOPRef (obj); +} + +uint KateDocManagerDCOPIface::activeDocumentNumber () +{ + Kate::Document *doc = m_dm->activeDocument(); + + if (doc) + return doc->documentNumber (); + + return 0; +} + +DCOPRef KateDocManagerDCOPIface::documentWithID (uint id) +{ + Kate::Document *doc = m_dm->documentWithID (id); + + if (!doc) + return DCOPRef (); + + DCOPObject *obj = static_cast(doc->qt_cast("DCOPObject")); + + if (!obj) + return DCOPRef (); + + return DCOPRef (obj); +} + +DCOPRef KateDocManagerDCOPIface::openURL (KURL url, QString encoding) +{ + Kate::Document *doc = m_dm->openURL (url, encoding); + + if (!doc) + return DCOPRef (); + + DCOPObject *obj = static_cast(doc->qt_cast("DCOPObject")); + + if (!obj) + return DCOPRef (); + + return DCOPRef (obj); +} + +bool KateDocManagerDCOPIface::closeDocument(uint n) +{ + return m_dm->closeDocument(n); +} + +bool KateDocManagerDCOPIface::closeDocumentWithID(uint id) +{ + return m_dm->closeDocumentWithID (id); +} + +bool KateDocManagerDCOPIface::closeAllDocuments() +{ + return m_dm->closeAllDocuments(); +} + +bool KateDocManagerDCOPIface::isOpen(KURL url) +{ + return m_dm->isOpen (url); +} + +uint KateDocManagerDCOPIface::documents () +{ + return m_dm->documents(); +} + +int KateDocManagerDCOPIface::findDocument (KURL url) +{ + return m_dm->findDocument (url); +} + + diff --git a/kate/app/katedocmanageriface.h b/kate/app/katedocmanageriface.h new file mode 100644 index 000000000..7a2cb5506 --- /dev/null +++ b/kate/app/katedocmanageriface.h @@ -0,0 +1,62 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Ian Reinhart Geiser + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _katedocmanager_Iface_h_ +#define _katedocmanager_Iface_h_ + +#include +#include + +#include + +class KateDocManager; + +class KateDocManagerDCOPIface : public DCOPObject +{ + K_DCOP + + public: + KateDocManagerDCOPIface (KateDocManager *dm); + + k_dcop: + DCOPRef document (uint n); + + DCOPRef activeDocument (); + + uint activeDocumentNumber (); + + DCOPRef documentWithID (uint id); + + int findDocument (KURL url); + + bool isOpen (KURL url); + + uint documents (); + + DCOPRef openURL (KURL url, QString encoding); + + bool closeDocument (uint n); + + bool closeDocumentWithID (uint id); + + bool closeAllDocuments (); + + private: + KateDocManager *m_dm; +}; +#endif diff --git a/kate/app/kateexternaltools.cpp b/kate/app/kateexternaltools.cpp new file mode 100644 index 000000000..50c07709b --- /dev/null +++ b/kate/app/kateexternaltools.cpp @@ -0,0 +1,873 @@ +/* + This file is part of the Kate text editor of the KDE project. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. + + --- + Copyright (C) 2004, Anders Lund +*/ +// TODO +// Icons +// Direct shortcut setting +//BEGIN Includes +#include "kateexternaltools.h" +#include "kateexternaltools.moc" +#include "katedocmanager.h" +#include "kateviewmanager.h" +#include "kateapp.h" + +#include "katemainwindow.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +//END Includes + +KateExternalToolsCommand *KateExternalToolsCommand::s_self=0; + +//BEGIN KateExternalTool +KateExternalTool::KateExternalTool( const QString &name, + const QString &command, + const QString &icon, + const QString &tryexec, + const QStringList &mimetypes, + const QString &acname, + const QString &cmdname, + int save ) + : name ( name ), + command ( command ), + icon ( icon ), + tryexec ( tryexec ), + mimetypes ( mimetypes ), + acname ( acname ), + cmdname ( cmdname ), + save ( save ) +{ + //if ( ! tryexec.isEmpty() ) + hasexec = checkExec(); +} + +bool KateExternalTool::checkExec() +{ + // if tryexec is empty, it is the first word of command + if ( tryexec.isEmpty() ) + tryexec = command.section( " ", 0, 0, QString::SectionSkipEmpty ); + + // NOTE this code is modified taken from kdesktopfile.cpp, from KDesktopFile::tryExec() + if (!tryexec.isEmpty()) { + if (tryexec[0] == '/') { + if (::access(QFile::encodeName(tryexec), R_OK | X_OK)) + return false; + + m_exec = tryexec; + } else { + // !!! Sergey A. Sukiyazov !!! + // Environment PATH may contain filenames in 8bit locale cpecified + // encoding (Like a filenames). + QStringList dirs = QStringList::split(':', QFile::decodeName(::getenv("PATH"))); + QStringList::Iterator it(dirs.begin()); + bool match = false; + for (; it != dirs.end(); ++it) + { + QString fName = *it + "/" + tryexec; + if (::access(QFile::encodeName(fName), R_OK | X_OK) == 0) + { + match = true; + m_exec = fName; + break; + } + } + // didn't match at all + if (!match) + return false; + } + return true; + } + return false; +} + +bool KateExternalTool::valid( const QString &mt ) const +{ + return mimetypes.isEmpty() || mimetypes.contains( mt ); +} +//END KateExternalTool + +//BEGIN KateExternalToolsCommand +KateExternalToolsCommand::KateExternalToolsCommand() : Kate::Command() { + m_inited=false; + reload(); +} + +QStringList KateExternalToolsCommand::cmds () { + return m_list; +} + +KateExternalToolsCommand *KateExternalToolsCommand::self () { + if (s_self) return s_self; + s_self=new KateExternalToolsCommand; + return s_self; +} + +void KateExternalToolsCommand::reload () { + m_list.clear(); + m_map.clear(); + + KConfig config("externaltools", false, false, "appdata"); + config.setGroup("Global"); + QStringList tools = config.readListEntry("tools"); + + + for( QStringList::Iterator it = tools.begin(); it != tools.end(); ++it ) + { + if ( *it == "---" ) + continue; + + + config.setGroup( *it ); + + KateExternalTool t = KateExternalTool( + config.readEntry( "name", "" ), + config.readEntry( "command", ""), + config.readEntry( "icon", ""), + config.readEntry( "executable", ""), + config.readListEntry( "mimetypes" ), + config.readEntry( "acname", "" ), + config.readEntry( "cmdname", "" ) ); + // FIXME test for a command name first! + if ( t.hasexec && (!t.cmdname.isEmpty())) { + m_list.append("exttool-"+t.cmdname); + m_map.insert("exttool-"+t.cmdname,t.acname); + } + } + if (m_inited) { + Kate::Document::unregisterCommand(this); + Kate::Document::registerCommand(this); + } + else m_inited=true; +} + +bool KateExternalToolsCommand::exec (Kate::View *view, const QString &cmd, QString &) { + QWidget *wv=dynamic_cast(view); + if (!wv) { +// kdDebug(13001)<<"KateExternalToolsCommand::exec: Could not get view widget"<(wv->topLevelWidget()); + if (!dmw) { +// kdDebug(13001)<<"KateExternalToolsCommand::exec: Could not get main window"<(dmw->action("tools_external")); + if (!a) return false; +// kdDebug(13001)<<"trying to find action"<actionCollection()->action(actionName.utf8()); + if (!a1) return false; +// kdDebug(13001)<<"activating action"<activate(); + return true; +} + +bool KateExternalToolsCommand::help (Kate::View *, const QString &, QString &) { + return false; +} +//END KateExternalToolsCommand + +//BEGIN KateExternalToolAction +KateExternalToolAction::KateExternalToolAction( QObject *parent, + const char *name, KateExternalTool *t) + : KAction( parent, name ), + tool ( t ) +{ + setText( t->name ); + if ( ! t->icon.isEmpty() ) + setIconSet( SmallIconSet( t->icon ) ); + + connect( this ,SIGNAL(activated()), this, SLOT(slotRun()) ); +} + +bool KateExternalToolAction::expandMacro( const QString &str, QStringList &ret ) +{ + KateMainWindow *mw = (KateMainWindow*)parent()->parent(); + + Kate::View *view = mw->viewManager()->activeView(); + if ( ! view ) return false; + + + if ( str == "URL" ) + ret += mw->activeDocumentUrl().url(); + else if ( str == "directory" ) // directory of current doc + ret += mw->activeDocumentUrl().directory(); + else if ( str == "filename" ) + ret += mw->activeDocumentUrl().fileName(); + else if ( str == "line" ) // cursor line of current doc + ret += QString::number( view->cursorLine() ); + else if ( str == "col" ) // cursor col of current doc + ret += QString::number( view->cursorColumn() ); + else if ( str == "selection" ) // selection of current doc if any + ret += view->getDoc()->selection(); + else if ( str == "text" ) // text of current doc + ret += view->getDoc()->text(); + else if ( str == "URLs" ) { + for( Kate::Document *doc = KateDocManager::self()->firstDocument(); doc; doc = KateDocManager::self()->nextDocument() ) + if ( ! doc->url().isEmpty() ) + ret += doc->url().url(); + } else + return false; + return true; +} + +KateExternalToolAction::~KateExternalToolAction() { + delete(tool); +} + +void KateExternalToolAction::slotRun() +{ + // expand the macros in command if any, + // and construct a command with an absolute path + QString cmd = tool->command; + + if ( ! expandMacrosShellQuote( cmd ) ) + { + KMessageBox::sorry( (KateMainWindow*)parent()->parent(), + i18n("Failed to expand the command '%1'.").arg( cmd ), + i18n( "Kate External Tools") ); + return; + } + kdDebug(13001)<<"externaltools: Running command: "<parent(); + if ( tool->save == 1 ) + mw->viewManager()->activeView()->document()->save(); + else if ( tool->save == 2 ) + mw->actionCollection()->action("file_save_all")->activate(); + + KRun::runCommand( cmd, tool->tryexec, tool->icon ); +} +//END KateExternalToolAction + +//BEGIN KateExternalToolsMenuAction +KateExternalToolsMenuAction::KateExternalToolsMenuAction( const QString &text, + QObject *parent, + const char* name, + KateMainWindow *mw ) + : KActionMenu( text, parent, name ), + mainwindow( mw ) +{ + + m_actionCollection = new KActionCollection( mainwindow ); + + connect(KateDocManager::self(),SIGNAL(documentChanged()),this,SLOT(slotDocumentChanged())); + + reload(); +} + +void KateExternalToolsMenuAction::reload() +{ + m_actionCollection->clear (); + popupMenu()->clear(); + + // load all the tools, and create a action for each of them + KConfig *config = new KConfig( "externaltools", false, false, "appdata" ); + config->setGroup( "Global" ); + QStringList tools = config->readListEntry( "tools" ); + + // if there are tools that are present but not explicitly removed, + // add them to the end of the list + config->setReadDefaults( true ); + QStringList dtools = config->readListEntry( "tools" ); + int gver = config->readNumEntry( "version", 1 ); + config->setReadDefaults( false ); + + int ver = config->readNumEntry( "version" ); + if ( ver <= gver ) + { + QStringList removed = config->readListEntry( "removed" ); + bool sepadded = false; + for (QStringList::iterator itg = dtools.begin(); itg != dtools.end(); ++itg ) + { + if ( ! tools.contains( *itg ) && + ! removed.contains( *itg ) ) + { + if ( ! sepadded ) + { + tools << "---"; + sepadded = true; + } + tools << *itg; + } + } + + config->writeEntry( "tools", tools ); + config->sync(); + config->writeEntry( "version", gver ); + } + + for( QStringList::Iterator it = tools.begin(); it != tools.end(); ++it ) + { + if ( *it == "---" ) + { + popupMenu()->insertSeparator(); + // a separator + continue; + } + + config->setGroup( *it ); + + KateExternalTool *t = new KateExternalTool( + config->readEntry( "name", "" ), + config->readEntry( "command", ""), + config->readEntry( "icon", ""), + config->readEntry( "executable", ""), + config->readListEntry( "mimetypes" ), + config->readEntry( "acname", "" ), + config->readEntry( "cmdname", "" ), + config->readNumEntry( "save", 0 ) ); + + if ( t->hasexec ) + insert( new KateExternalToolAction( m_actionCollection, t->acname.ascii(), t ) ); + } + + m_actionCollection->readShortcutSettings( "Shortcuts", config ); + slotDocumentChanged(); + delete config; +} + +void KateExternalToolsMenuAction::slotDocumentChanged() +{ + // try to enable/disable to match current mime type + Kate::DocumentExt *de = documentExt( KateDocManager::self()->activeDocument() ); + if ( de ) + { + QString mt = de->mimeType(); + QStringList l; + bool b; + + KActionPtrList actions = m_actionCollection->actions(); + for (KActionPtrList::iterator it = actions.begin(); it != actions.end(); ++it ) + { + KateExternalToolAction *action = dynamic_cast(*it); + if ( action ) + { + l = action->tool->mimetypes; + b = ( ! l.count() || l.contains( mt ) ); + action->setEnabled( b ); + } + } + } +} +//END KateExternalToolsMenuAction + +//BEGIN ToolItem +/** + * This is a QListBoxItem, that has a KateExternalTool. The text is the Name + * of the tool. + */ +class ToolItem : public QListBoxPixmap +{ + public: + ToolItem( QListBox *lb, const QPixmap &icon, KateExternalTool *tool ) + : QListBoxPixmap( lb, icon, tool->name ), + tool ( tool ) + {;} + + ~ToolItem() {}; + + KateExternalTool *tool; +}; +//END ToolItem + +//BEGIN KateExternalToolServiceEditor +KateExternalToolServiceEditor::KateExternalToolServiceEditor( KateExternalTool *tool, + QWidget *parent, const char *name ) + : KDialogBase( parent, name, true, i18n("Edit External Tool"), KDialogBase::Ok|KDialogBase::Cancel ), + tool( tool ) +{ + // create a entry for each property + // fill in the values from the service if available + QWidget *w = new QWidget( this ); + setMainWidget( w ); + QGridLayout *lo = new QGridLayout( w ); + lo->setSpacing( KDialogBase::spacingHint() ); + + QLabel *l; + + leName = new QLineEdit( w ); + lo->addWidget( leName, 1, 2 ); + l = new QLabel( leName, i18n("&Label:"), w ); + l->setAlignment( l->alignment()|Qt::AlignRight ); + lo->addWidget( l, 1, 1 ); + if ( tool ) leName->setText( tool->name ); + QWhatsThis::add( leName, i18n( + "The name will be displayed in the 'Tools->External' menu") ); + + btnIcon = new KIconButton( w ); + btnIcon->setIconSize( KIcon::SizeSmall ); + lo->addWidget( btnIcon, 1, 3 ); + if ( tool && !tool->icon.isEmpty() ) + btnIcon->setIcon( tool->icon ); + + teCommand = new QTextEdit( w ); + lo->addMultiCellWidget( teCommand, 2, 2, 2, 3 ); + l = new QLabel( teCommand, i18n("S&cript:"), w ); + l->setAlignment( Qt::AlignTop|Qt::AlignRight ); + lo->addWidget( l, 2, 1 ); + if ( tool ) teCommand->setText( tool->command ); + QWhatsThis::add( teCommand, i18n( + "

The script to execute to invoke the tool. The script is passed " + "to /bin/sh for execution. The following macros " + "will be expanded:

" + "
  • %URL - the URL of the current document." + "
  • %URLs - a list of the URLs of all open documents." + "
  • %directory - the URL of the directory containing " + "the current document." + "
  • %filename - the filename of the current document." + "
  • %line - the current line of the text cursor in the " + "current view." + "
  • %column - the column of the text cursor in the " + "current view." + "
  • %selection - the selected text in the current view." + "
  • %text - the text of the current document.
" ) ); + + + leExecutable = new QLineEdit( w ); + lo->addMultiCellWidget( leExecutable, 3, 3, 2, 3 ); + l = new QLabel( leExecutable, i18n("&Executable:"), w ); + l->setAlignment( l->alignment()|Qt::AlignRight ); + lo->addWidget( l, 3, 1 ); + if ( tool ) leExecutable->setText( tool->tryexec ); + QWhatsThis::add( leExecutable, i18n( + "The executable used by the command. This is used to check if a tool " + "should be displayed; if not set, the first word of command " + "will be used.") ); + + leMimetypes = new QLineEdit( w ); + lo->addWidget( leMimetypes, 4, 2 ); + l = new QLabel( leMimetypes, i18n("&Mime types:"), w ); + l->setAlignment( l->alignment()|Qt::AlignRight ); + lo->addWidget( l, 4, 1 ); + if ( tool ) leMimetypes->setText( tool->mimetypes.join("; ") ); + QWhatsThis::add( leMimetypes, i18n( + "A semicolon-separated list of mime types for which this tool should " + "be available; if this is left empty, the tool is always available. " + "To choose from known mimetypes, press the button on the right.") ); + + QToolButton *btnMTW = new QToolButton(w); + lo->addWidget( btnMTW, 4, 3 ); + btnMTW->setIconSet(QIconSet(SmallIcon("wizard"))); + connect(btnMTW, SIGNAL(clicked()), this, SLOT(showMTDlg())); + QWhatsThis::add( btnMTW, i18n( + "Click for a dialog that can help you creating a list of mimetypes.") ); + + cmbSave = new QComboBox(w); + lo->addMultiCellWidget( cmbSave, 5, 5, 2, 3 ); + l = new QLabel( cmbSave, i18n("&Save:"), w ); + l->setAlignment( l->alignment()|Qt::AlignRight ); + lo->addWidget( l, 5, 1 ); + QStringList sl; + sl << i18n("None") << i18n("Current Document") << i18n("All Documents"); + cmbSave->insertStringList( sl ); + if ( tool ) cmbSave->setCurrentItem( tool->save ); + QWhatsThis::add( cmbSave, i18n( + "You can elect to save the current or all [modified] documents prior to " + "running the command. This is helpful if you want to pass URLs to " + "an application like, for example, an FTP client.") ); + + + leCmdLine = new QLineEdit( w ); + lo->addMultiCellWidget( leCmdLine, 6, 6, 2, 3 ); + l = new QLabel( leCmdLine, i18n("&Command line name:"), w ); + l->setAlignment( l->alignment()|Qt::AlignRight ); + lo->addWidget( l, 6, 1 ); + if ( tool ) leCmdLine->setText( tool->cmdname ); + QWhatsThis::add( leCmdLine, i18n( + "If you specify a name here, you can invoke the command from the view " + "command lines with exttool-the_name_you_specified_here. " + "Please do not use spaces or tabs in the name.")); + +} + +void KateExternalToolServiceEditor::slotOk() +{ + if ( leName->text().isEmpty() || + teCommand->text().isEmpty() ) + { + KMessageBox::information( this, i18n("You must specify at least a name and a command") ); + return; + } + + KDialogBase::slotOk(); +} + +void KateExternalToolServiceEditor::showMTDlg() +{ + QString text = i18n("Select the MimeTypes for which to enable this tool."); + QStringList list = QStringList::split( QRegExp("\\s*;\\s*"), leMimetypes->text() ); + KMimeTypeChooserDialog d( i18n("Select Mime Types"), text, list, "text", this ); + if ( d.exec() == KDialogBase::Accepted ) { + leMimetypes->setText( d.chooser()->mimeTypes().join(";") ); + } +} +//END KateExternalToolServiceEditor + +//BEGIN KateExternalToolsConfigWidget +KateExternalToolsConfigWidget::KateExternalToolsConfigWidget( QWidget *parent, const char* name ) + : Kate::ConfigPage( parent, name ), + m_changed( false ) +{ + QGridLayout *lo = new QGridLayout( this, 5, 5, 0, KDialog::spacingHint() ); + + lbTools = new KListBox( this ); + lo->addMultiCellWidget( lbTools, 1, 4, 0, 3 ); + connect( lbTools, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()) ); + + btnNew = new QPushButton( i18n("&New..."), this ); + lo->addWidget( btnNew, 5, 0 ); + connect( btnNew, SIGNAL(clicked()), this, SLOT(slotNew()) ); + + btnRemove = new QPushButton( i18n("&Remove"), this ); + lo->addWidget( btnRemove, 5, 2 ); + connect( btnRemove, SIGNAL(clicked()), this, SLOT(slotRemove()) ); + + btnEdit = new QPushButton( i18n("&Edit..."), this ); + lo->addWidget( btnEdit, 5, 1 ); + connect( btnEdit, SIGNAL(clicked()), this, SLOT(slotEdit()) ); + + QPushButton *b = new QPushButton( i18n("Insert &Separator"), this ); + lo->addWidget( b, 5, 3 ); + connect( b, SIGNAL(clicked()), this, SLOT(slotInsertSeparator()) ); + + btnMoveUp = new QPushButton( SmallIconSet("up"), "", this ); + lo->addWidget( btnMoveUp, 2, 4 ); + connect( btnMoveUp, SIGNAL(clicked()), this, SLOT(slotMoveUp()) ); + + btnMoveDwn = new QPushButton( SmallIconSet("down"), "", this ); + lo->addWidget( btnMoveDwn, 3, 4 ); + connect( btnMoveDwn, SIGNAL(clicked()), this, SLOT(slotMoveDown()) ); + + connect( lbTools, SIGNAL( doubleClicked ( QListBoxItem * ) ), this, SLOT( slotEdit() ) ); + + lo->setRowStretch( 1, 1 ); + lo->setRowStretch( 4, 1 ); + lo->setColStretch( 0, 1 ); + lo->setColStretch( 1, 1 ); + lo->setColStretch( 2, 1 ); + + + QWhatsThis::add( lbTools, i18n( + "This list shows all the configured tools, represented by their menu text.") ); + + config = new KConfig("externaltools", false, false, "appdata"); + reload(); + slotSelectionChanged(); +} + +KateExternalToolsConfigWidget::~KateExternalToolsConfigWidget() +{ + delete config; +} + +void KateExternalToolsConfigWidget::reload() +{ + //m_tools.clear(); + lbTools->clear(); + + // load the files from a KConfig + config->setGroup( "Global" ); + QStringList tools = config->readListEntry("tools"); + + for( QStringList::Iterator it = tools.begin(); it != tools.end(); ++it ) + { + if ( *it == "---" ) + { + new QListBoxText( lbTools, "---" ); + } + else + { + config->setGroup( *it ); + + KateExternalTool *t = new KateExternalTool( + config->readEntry( "name", "" ), + config->readEntry( "command", ""), + config->readEntry( "icon", ""), + config->readEntry( "executable", ""), + config->readListEntry( "mimetypes" ), + config->readEntry( "acname" ), + config->readEntry( "cmdname"), + config->readNumEntry( "save", 0 ) ); + + if ( t->hasexec ) // we only show tools that are also in the menu. + new ToolItem( lbTools, t->icon.isEmpty() ? blankIcon() : SmallIcon( t->icon ), t ); + } + } + m_changed = false; +} + +QPixmap KateExternalToolsConfigWidget::blankIcon() +{ + QPixmap pm( KIcon::SizeSmall, KIcon::SizeSmall ); + pm.fill(); + pm.setMask( pm.createHeuristicMask() ); + return pm; +} + +void KateExternalToolsConfigWidget::apply() +{ + if ( ! m_changed ) + return; + m_changed = false; + + // save a new list + // save each item + QStringList tools; + for ( uint i = 0; i < lbTools->count(); i++ ) + { + if ( lbTools->text( i ) == "---" ) + { + tools << "---"; + continue; + } + KateExternalTool *t = ((ToolItem*)lbTools->item( i ))->tool; +// kdDebug(13001)<<"adding tool: "<name<acname; + + config->setGroup( t->acname ); + config->writeEntry( "name", t->name ); + config->writeEntry( "command", t->command ); + config->writeEntry( "icon", t->icon ); + config->writeEntry( "executable", t->tryexec ); + config->writeEntry( "mimetypes", t->mimetypes ); + config->writeEntry( "acname", t->acname ); + config->writeEntry( "cmdname", t->cmdname ); + config->writeEntry( "save", t->save ); + } + + config->setGroup("Global"); + config->writeEntry( "tools", tools ); + + // if any tools was removed, try to delete their groups, and + // add the group names to the list of removed items. + if ( m_removed.count() ) + { + for ( QStringList::iterator it = m_removed.begin(); it != m_removed.end(); ++it ) + { + if ( config->hasGroup( *it ) ) + config->deleteGroup( *it ); + } + QStringList removed = config->readListEntry( "removed" ); + removed += m_removed; + + // clean up the list of removed items, so that it does not contain + // non-existing groups (we can't remove groups from a non-owned global file). + config->sync(); + QStringList::iterator it1 = removed.begin(); + while( it1 != removed.end() ) + { + if ( ! config->hasGroup( *it1 ) ) + it1 = removed.remove( it1 ); + else + ++it1; + } + config->writeEntry( "removed", removed ); + } + + config->sync(); +} + +void KateExternalToolsConfigWidget::slotSelectionChanged() +{ + // update button state + bool hs = lbTools->selectedItem() != 0; + btnEdit->setEnabled( hs && dynamic_cast(lbTools->selectedItem()) ); + btnRemove->setEnabled( hs ); + btnMoveUp->setEnabled( ( lbTools->currentItem() > 0 ) && hs ); + btnMoveDwn->setEnabled( ( lbTools->currentItem() < (int)lbTools->count()-1 )&&hs ); +} + +void KateExternalToolsConfigWidget::slotNew() +{ + // display a editor, and if it is OK'd, create a new tool and + // create a listbox item for it + KateExternalToolServiceEditor editor( 0, this ); + + if ( editor.exec() ) + { + KateExternalTool *t = new KateExternalTool( + editor.leName->text(), + editor.teCommand->text(), + editor.btnIcon->icon(), + editor.leExecutable->text(), + QStringList::split( QRegExp("\\s*;\\s*"), editor.leMimetypes->text() ) ); + + // This is sticky, it does not change again, so that shortcuts sticks + // TODO check for dups + t->acname = "externaltool_" + QString(t->name).replace( QRegExp("\\W+"), "" ); + + new ToolItem ( lbTools, t->icon.isEmpty() ? blankIcon() : SmallIcon( t->icon ), t ); + + slotChanged(); + m_changed = true; + } +} + +void KateExternalToolsConfigWidget::slotRemove() +{ + // add the tool action name to a list of removed items, + // remove the current listbox item + if ( lbTools->currentItem() > -1 ) { + ToolItem *i = dynamic_cast(lbTools->selectedItem()); + if ( i ) + m_removed << i->tool->acname; + + lbTools->removeItem( lbTools->currentItem() ); + slotChanged(); + m_changed = true; + } +} + +void KateExternalToolsConfigWidget::slotEdit() +{ + if( !dynamic_cast(lbTools->selectedItem()) ) return; + // show the item in an editor + KateExternalTool *t = ((ToolItem*)lbTools->selectedItem())->tool; + KateExternalToolServiceEditor editor( t, this); + config->setGroup( "Editor" ); + editor.resize( config->readSizeEntry( "Size" ) ); + if ( editor.exec() /*== KDialogBase::Ok*/ ) + { + + bool elementChanged = ( ( editor.btnIcon->icon() != t->icon ) || (editor.leName->text() != t->name ) ) ; + + t->name = editor.leName->text(); + t->cmdname = editor.leCmdLine->text(); + t->command = editor.teCommand->text(); + t->icon = editor.btnIcon->icon(); + t->tryexec = editor.leExecutable->text(); + t->mimetypes = QStringList::split( QRegExp("\\s*;\\s*"), editor.leMimetypes->text() ); + t->save = editor.cmbSave->currentItem(); + + //if the icon has changed or name changed, I have to renew the listbox item :S + if ( elementChanged ) + { + int idx = lbTools->index( lbTools->selectedItem() ); + lbTools->removeItem( idx ); + lbTools->insertItem( new ToolItem( 0, t->icon.isEmpty() ? blankIcon() : SmallIcon( t->icon ), t ), idx ); + } + + slotChanged(); + m_changed = true; + } + + config->setGroup( "Editor" ); + config->writeEntry( "Size", editor.size() ); + config->sync(); +} + +void KateExternalToolsConfigWidget::slotInsertSeparator() +{ + lbTools->insertItem( "---", lbTools->currentItem()+1 ); + slotChanged(); + m_changed = true; +} + +void KateExternalToolsConfigWidget::slotMoveUp() +{ + // move the current item in the listbox upwards if possible + QListBoxItem *item = lbTools->selectedItem(); + if ( ! item ) return; + + int idx = lbTools->index( item ); + + if ( idx < 1 ) return; + + if ( dynamic_cast(item) ) + { + KateExternalTool *tool = ((ToolItem*)item)->tool; + lbTools->removeItem( idx ); + lbTools->insertItem( new ToolItem( 0, tool->icon.isEmpty() ? blankIcon() : SmallIcon( tool->icon ), tool ), idx-1 ); + } + else // a separator! + { + lbTools->removeItem( idx ); + lbTools->insertItem( new QListBoxText( 0, "---" ), idx-1 ); + } + + lbTools->setCurrentItem( idx - 1 ); + slotSelectionChanged(); + slotChanged(); + m_changed = true; +} + +void KateExternalToolsConfigWidget::slotMoveDown() +{ + // move the current item in the listbox downwards if possible + QListBoxItem *item = lbTools->selectedItem(); + if ( ! item ) return; + + uint idx = lbTools->index( item ); + + if ( idx > lbTools->count()-1 ) return; + + if ( dynamic_cast(item) ) + { + KateExternalTool *tool = ((ToolItem*)item)->tool; + lbTools->removeItem( idx ); + lbTools->insertItem( new ToolItem( 0, tool->icon.isEmpty() ? blankIcon() : SmallIcon( tool->icon ), tool ), idx+1 ); + } + else // a separator! + { + lbTools->removeItem( idx ); + lbTools->insertItem( new QListBoxText( 0, "---" ), idx+1 ); + } + + lbTools->setCurrentItem( idx+1 ); + slotSelectionChanged(); + slotChanged(); + m_changed = true; +} +//END KateExternalToolsConfigWidget +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateexternaltools.h b/kate/app/kateexternaltools.h new file mode 100644 index 000000000..4a5ecdacc --- /dev/null +++ b/kate/app/kateexternaltools.h @@ -0,0 +1,229 @@ +/* + This file is part of the Kate text editor of the KDE project. + It describes a "external tools" action for kate and provides a dialog + page to configure that. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. + + --- + Copyright (C) 2004, Anders Lund +*/ + +#ifndef _KATE_EXTERNAL_TOOLS_H_ +#define _KATE_EXTERNAL_TOOLS_H_ + +#include +#include +#include +#include +#include + +/** + * The external tools action + * This action creates a menu, in which each item will launch a process + * with the provided arguments, which may include the following macros: + * - %URLS: the URLs of all open documents. + * - %URL: The URL of the active document. + * - %filedir: The directory of the current document, if that is a local file. + * - %selection: The selection of the active document. + * - %text: The text of the active document. + * - %line: The line number of the cursor in the active view. + * - %column: The column of the cursor in the active view. + * + * Each item has the following properties: + * - Name: The friendly text for the menu + * - Exec: The command to execute, including arguments. + * - TryExec: the name of the executable, if not available, the + * item will not be displayed. + * - MimeTypes: An optional list of mimetypes. The item will be disabled or + * hidden if the current file is not of one of the indicated types. + * + */ +class KateExternalToolsMenuAction : public KActionMenu +{ + friend class KateExternalToolAction; + + Q_OBJECT + public: + KateExternalToolsMenuAction( const QString &text=QString::null, QObject *parent=0, const char* name=0, class KateMainWindow *mw=0 ); + ~KateExternalToolsMenuAction() {}; + + /** + * This will load all the confiured services. + */ + void reload(); + + class KActionCollection *actionCollection() { return m_actionCollection; } + + private slots: + void slotDocumentChanged(); + + private: + class KActionCollection *m_actionCollection; + class KateMainWindow *mainwindow; // for the actions to access view/doc managers +}; + +/** + * This Action contains a KateExternalTool + */ +class KateExternalToolAction : public KAction, public KWordMacroExpander +{ + Q_OBJECT + public: + KateExternalToolAction( QObject *parent, const char *name, class KateExternalTool *t ); + ~KateExternalToolAction(); + protected: + virtual bool expandMacro( const QString &str, QStringList &ret ); + + private slots: + void slotRun(); + + public: + class KateExternalTool *tool; +}; + +/** + * This class defines a single external tool. + */ +class KateExternalTool +{ + public: + KateExternalTool( const QString &name=QString::null, + const QString &command=QString::null, + const QString &icon=QString::null, + const QString &tryexec=QString::null, + const QStringList &mimetypes=QStringList(), + const QString &acname=QString::null, + const QString &cmdname=QString::null, + int save=0 ); + ~KateExternalTool() {}; + + QString name; ///< The name used in the menu. + QString command; ///< The command to execute. + QString icon; ///< the icon to use in the menu. + QString tryexec; ///< The name or path of the executable. + QStringList mimetypes; ///< Optional list of mimetypes for which this action is valid. + bool hasexec; ///< This is set by the constructor by calling checkExec(), if a value is present. + QString acname; ///< The name for the action. This is generated first time the action is is created. + QString cmdname; ///< The name for the commandline. + int save; ///< We can save documents prior to activating the tool command: 0 = nothing, 1 = current document, 2 = all documents. + + /** + * @return true if mimetypes is empty, or the @p mimetype matches. + */ + bool valid( const QString &mimetype ) const; + /** + * @return true if "tryexec" exists and has the executable bit set, or is + * empty. + * This is run at least once, and the tool is disabled if it fails. + */ + bool checkExec(); + + private: + QString m_exec; ///< The fully qualified path of the executable. +}; + +/** + * The config widget. + * The config widget allows the user to view a list of services of the type + * "Kate/ExternalTool" and add, remove or edit them. + */ +class KateExternalToolsConfigWidget : public Kate::ConfigPage +{ + Q_OBJECT + public: + KateExternalToolsConfigWidget( QWidget *parent, const char* name); + virtual ~KateExternalToolsConfigWidget(); + + virtual void apply(); + virtual void reload(); + virtual void reset() { reload(); } // sigh + virtual void defaults() { reload(); } // double sigh + + private slots: + void slotNew(); + void slotEdit(); + void slotRemove(); + void slotInsertSeparator(); + + void slotMoveUp(); + void slotMoveDown(); + + void slotSelectionChanged(); + + private: + QPixmap blankIcon(); + + QStringList m_removed; + + class KListBox *lbTools; + class QPushButton *btnNew, *btnRemove, *btnEdit, *btnMoveUp, *btnMoveDwn; + + class KConfig *config; + + bool m_changed; +}; + +/** + * A Singleton class for invoking external tools with the view command line + */ + class KateExternalToolsCommand : public Kate::Command { + public: + KateExternalToolsCommand (); + virtual ~KateExternalToolsCommand () {}; + static KateExternalToolsCommand *self(); + void reload(); + public: + virtual QStringList cmds (); + virtual bool exec (Kate::View *view, const QString &cmd, QString &msg); + virtual bool help (Kate::View *view, const QString &cmd, QString &msg); + private: + static KateExternalToolsCommand *s_self; + QStringList m_list; + QMap m_map; + bool m_inited; + }; + +/** + * A Dialog to edit a single KateExternalTool object + */ +class KateExternalToolServiceEditor : public KDialogBase +{ + Q_OBJECT + + public: + + KateExternalToolServiceEditor( KateExternalTool *tool=0, + QWidget *parent=0, const char *name=0 ); + + class QLineEdit *leName, *leExecutable, *leMimetypes,*leCmdLine; + class QTextEdit *teCommand; + class KIconButton *btnIcon; + class QComboBox *cmbSave; + + private slots: + /** + * Run when the OK button is clicked, to ensure critical values are provided + */ + void slotOk(); + /** + * show a mimetype chooser dialog + */ + void showMTDlg(); + + private: + KateExternalTool *tool; +}; +#endif //_KATE_EXTERNAL_TOOLS_H_ diff --git a/kate/app/katefilelist.cpp b/kate/app/katefilelist.cpp new file mode 100644 index 000000000..8c350d45a --- /dev/null +++ b/kate/app/katefilelist.cpp @@ -0,0 +1,652 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +//BEGIN Includes +#include "katefilelist.h" +#include "katefilelist.moc" + +#include "katedocmanager.h" +#include "kateviewmanager.h" +#include "katemainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//END Includes + +//BEGIN ToolTip +class ToolTip : public QToolTip +{ + public: + ToolTip( QWidget *parent, KateFileList *lv ) + : QToolTip( parent ), + m_listView( lv ) + { + } + virtual ~ToolTip() {}; + + void maybeTip( const QPoint &pos ) + { + QListViewItem *i = m_listView->itemAt( pos ); + if ( ! i ) return; + + KateFileListItem *item = ((KateFileListItem*)i); + if ( ! item ) return; + + tip( m_listView->itemRect( i ), m_listView->tooltip( item, 0 ) ); + + } + + private: + KateFileList *m_listView; +}; + +//END ToolTip + +//BEGIN KateFileList +KateFileList::KateFileList (KateMainWindow *main, + KateViewManager *_viewManager, + QWidget * parent, const char * name ) + : KListView (parent, name) + , m_sort( KateFileList::sortByID ) +{ + m_main = main; + m_tooltip = new ToolTip( viewport(), this ); + + // default colors + m_viewShade = QColor( 51, 204, 255 ); + m_editShade = QColor( 255, 102, 153 ); + m_enableBgShading = false; + + setFocusPolicy ( QWidget::NoFocus ); + + viewManager = _viewManager; + + header()->hide(); + addColumn("Document Name"); + + setSelectionMode( QListView::Single ); + setSorting( 0, true ); + setShowToolTips( false ); + + setupActions (); + + for (uint i = 0; i < KateDocManager::self()->documents(); i++) + { + slotDocumentCreated (KateDocManager::self()->document(i)); + slotModChanged (KateDocManager::self()->document(i)); + } + + connect(KateDocManager::self(),SIGNAL(documentCreated(Kate::Document *)), + this,SLOT(slotDocumentCreated(Kate::Document *))); + connect(KateDocManager::self(),SIGNAL(documentDeleted(uint)), + this,SLOT(slotDocumentDeleted(uint))); + + // don't Honour KDE single/double click setting, this files are already open, + // no need for hassle of considering double-click + connect(this,SIGNAL(selectionChanged(QListViewItem *)), + this,SLOT(slotActivateView(QListViewItem *))); + connect(viewManager,SIGNAL(viewChanged()), this,SLOT(slotViewChanged())); + connect(this,SIGNAL(contextMenuRequested( QListViewItem *, const QPoint &, int )), + this,SLOT(slotMenu ( QListViewItem *, const QPoint &, int ))); +} + +KateFileList::~KateFileList () +{ + delete m_tooltip; +} + +void KateFileList::setupActions () +{ + windowNext = KStdAction::back(this, SLOT(slotPrevDocument()), m_main->actionCollection()); + windowPrev = KStdAction::forward(this, SLOT(slotNextDocument()), m_main->actionCollection()); + sortAction = new KSelectAction( i18n("Sort &By"), 0, + m_main->actionCollection(), "filelist_sortby" ); + QStringList l; + l << i18n("Opening Order") << i18n("Document Name") << i18n("URL"); + sortAction->setItems( l ); + connect( sortAction, SIGNAL(activated(int)), this, SLOT(setSortType(int)) ); +} + +void KateFileList::updateActions () +{ + windowNext->setEnabled(KateDocManager::self()->documents() > 1); + windowPrev->setEnabled(KateDocManager::self()->documents() > 1); +} + +void KateFileList::keyPressEvent(QKeyEvent *e) { + if ( ( e->key() == Key_Return ) || ( e->key() == Key_Enter ) ) + { + e->accept(); + slotActivateView( currentItem() ); + } + else + { + KListView::keyPressEvent(e); + } +} + +// Protect single mode selection: don't let them +// leftclick outside items. +// ### if we get to accept keyboard navigation, set focus before +// returning +void KateFileList::contentsMousePressEvent( QMouseEvent *e ) +{ + if ( ! itemAt( contentsToViewport( e->pos() ) ) ) + return; + + KListView::contentsMousePressEvent( e ); +} + +void KateFileList::resizeEvent( QResizeEvent *e ) +{ + KListView::resizeEvent( e ); + + // ### We may want to actually calculate the widest field, + // since it's not automatically scrinked. If I add support for + // tree or marks, the changes of the required width will vary + // a lot with opening/closing of files and display changes for + // the mark branches. + int w = viewport()->width(); + if ( columnWidth( 0 ) < w ) + setColumnWidth( 0, w ); +} + +void KateFileList::slotNextDocument() +{ + if ( ! currentItem() || childCount() == 0 ) + return; + + // ### more checking once more item types are added + + if ( currentItem()->nextSibling() ) + viewManager->activateView( ((KateFileListItem*)currentItem()->nextSibling())->documentNumber() ); + else + viewManager->activateView( ((KateFileListItem *)firstChild())->documentNumber() ); +} + +void KateFileList::slotPrevDocument() +{ + if ( ! currentItem() || childCount() == 0 ) + return; + + // ### more checking once more item types are added + + if ( currentItem()->itemAbove() ) + viewManager->activateView( ((KateFileListItem*)currentItem()->itemAbove())->documentNumber() ); + else + viewManager->activateView( ((KateFileListItem *)lastItem())->documentNumber() ); +} + +void KateFileList::slotDocumentCreated (Kate::Document *doc) +{ + new KateFileListItem( this, doc/*, doc->documentNumber()*/ ); + connect(doc,SIGNAL(modStateChanged(Kate::Document *)),this,SLOT(slotModChanged(Kate::Document *))); + connect(doc,SIGNAL(nameChanged(Kate::Document *)),this,SLOT(slotNameChanged(Kate::Document *))); + connect(doc,SIGNAL(modifiedOnDisc(Kate::Document *, bool, unsigned char)),this,SLOT(slotModifiedOnDisc(Kate::Document *, bool, unsigned char))); + + sort(); + updateActions (); +} + +void KateFileList::slotDocumentDeleted (uint documentNumber) +{ + QListViewItem * item = firstChild(); + while( item ) { + if ( ((KateFileListItem *)item)->documentNumber() == documentNumber ) + { +// m_viewHistory.removeRef( (KateFileListItem *)item ); +// m_editHistory.removeRef( (KateFileListItem *)item ); + + removeItem( item ); + + break; + } + item = item->nextSibling(); + } + + updateActions (); +} + +void KateFileList::slotActivateView( QListViewItem *item ) +{ + if ( ! item || item->rtti() != RTTI_KateFileListItem ) + return; + + viewManager->activateView( ((KateFileListItem *)item)->documentNumber() ); +} + +void KateFileList::slotModChanged (Kate::Document *doc) +{ + if (!doc) return; + + QListViewItem * item = firstChild(); + while( item ) + { + if ( ((KateFileListItem *)item)->documentNumber() == doc->documentNumber() ) + break; + + item = item->nextSibling(); + } + + if ( ((KateFileListItem *)item)->document()->isModified() ) + { + m_editHistory.removeRef( (KateFileListItem *)item ); + m_editHistory.prepend( (KateFileListItem *)item ); + + for ( uint i=0; i < m_editHistory.count(); i++ ) + { + m_editHistory.at( i )->setEditHistPos( i+1 ); + repaintItem( m_editHistory.at( i ) ); + } + } + else + repaintItem( item ); +} + +void KateFileList::slotModifiedOnDisc (Kate::Document *doc, bool, unsigned char) +{ + slotModChanged( doc ); +} + +void KateFileList::slotNameChanged (Kate::Document *doc) +{ + if (!doc) return; + + // ### using nextSibling to *only* look at toplevel items. + // child items could be marks for example + QListViewItem * item = firstChild(); + while( item ) { + if ( ((KateFileListItem*)item)->document() == doc ) + { + item->setText( 0, doc->docName() ); + repaintItem( item ); + break; + } + item = item->nextSibling(); + } + updateSort(); +} + +void KateFileList::slotViewChanged () +{ + if (!viewManager->activeView()) return; + + Kate::View *view = viewManager->activeView(); + uint dn = view->getDoc()->documentNumber(); + + QListViewItem * i = firstChild(); + while( i ) { + if ( ((KateFileListItem *)i)->documentNumber() == dn ) + { + break; + } + i = i->nextSibling(); + } + + if ( ! i ) + return; + + KateFileListItem *item = (KateFileListItem*)i; + setCurrentItem( item ); + + // ### During load of file lists, all the loaded views gets active. + // Do something to avoid shading them -- maybe not creating views, just + // open the documents??? + + +// int p = 0; +// if ( m_viewHistory.count() ) +// { +// int p = m_viewHistory.findRef( item ); // only repaint items that needs it +// } + + m_viewHistory.removeRef( item ); + m_viewHistory.prepend( item ); + + for ( uint i=0; i < m_viewHistory.count(); i++ ) + { + m_viewHistory.at( i )->setViewHistPos( i+1 ); + repaintItem( m_viewHistory.at( i ) ); + } + +} + +void KateFileList::slotMenu ( QListViewItem *item, const QPoint &p, int /*col*/ ) +{ + if (!item) + return; + + QPopupMenu *menu = (QPopupMenu*) ((viewManager->mainWindow())->factory()->container("filelist_popup", viewManager->mainWindow())); + + if (menu) + menu->exec(p); +} + +QString KateFileList::tooltip( QListViewItem *item, int ) +{ + KateFileListItem *i = ((KateFileListItem*)item); + if ( ! i ) return QString::null; + + QString str; + const KateDocumentInfo *info = KateDocManager::self()->documentInfo(i->document()); + + if (info && info->modifiedOnDisc) + { + if (info->modifiedOnDiscReason == 1) + str += i18n("This file was changed (modified) on disk by another program.
"); + else if (info->modifiedOnDiscReason == 2) + str += i18n("This file was changed (created) on disk by another program.
"); + else if (info->modifiedOnDiscReason == 3) + str += i18n("This file was changed (deleted) on disk by another program.
"); + } + + str += i->document()->url().prettyURL(); + return str; +} + + +void KateFileList::setSortType (int s) +{ + m_sort = s; + updateSort (); +} + +void KateFileList::updateSort () +{ + sort (); +} + +void KateFileList::readConfig( KConfig *config, const QString &group ) +{ + QString oldgroup = config->group(); + config->setGroup( group ); + + setSortType( config->readNumEntry( "Sort Type", sortByID ) ); + m_viewShade = config->readColorEntry( "View Shade", &m_viewShade ); + m_editShade = config->readColorEntry( "Edit Shade", &m_editShade ); + m_enableBgShading = config->readBoolEntry( "Shading Enabled", &m_enableBgShading ); + + sortAction->setCurrentItem( sortType() ); + + config->setGroup( oldgroup ); +} + +void KateFileList::writeConfig( KConfig *config, const QString &group ) +{ + QString oldgroup = config->group(); + config->setGroup( group ); + + config->writeEntry( "Sort Type", m_sort ); + config->writeEntry( "View Shade", m_viewShade ); + config->writeEntry( "Edit Shade", m_editShade ); + config->writeEntry( "Shading Enabled", m_enableBgShading ); + + config->setGroup( oldgroup ); +} + +void KateFileList::takeItem( QListViewItem *item ) +{ + if ( item->rtti() == RTTI_KateFileListItem ) + { + m_editHistory.removeRef( (KateFileListItem*)item ); + m_viewHistory.removeRef( (KateFileListItem*)item ); + } + QListView::takeItem( item ); +} +//END KateFileList + +//BEGIN KateFileListItem +KateFileListItem::KateFileListItem( QListView* lv, + Kate::Document *_doc ) + : QListViewItem( lv, _doc->docName() ), + doc( _doc ), + m_viewhistpos( 0 ), + m_edithistpos( 0 ), + m_docNumber( _doc->documentNumber() ) +{ +} + +KateFileListItem::~KateFileListItem() +{ +} + +const QPixmap *KateFileListItem::pixmap ( int column ) const +{ + if ( column == 0) { + static QPixmap noPm = SmallIcon ("null"); + static QPixmap modPm = SmallIcon("modified"); + static QPixmap discPm = SmallIcon("modonhd"); + static QPixmap modmodPm = SmallIcon("modmod"); + + const KateDocumentInfo *info = KateDocManager::self()->documentInfo(doc); + + if (info && info->modifiedOnDisc) + return doc->isModified() ? &modmodPm : &discPm; + else + return doc->isModified() ? &modPm : &noPm; + } + + return 0; +} + +void KateFileListItem::paintCell( QPainter *painter, const QColorGroup & cg, int column, int width, int align ) +{ + KateFileList *fl = (KateFileList*)listView(); + if ( ! fl ) return; + + if ( column == 0 ) + { + QColorGroup cgNew = cg; + + // replace the base color with a different shading if necessary... + if ( fl->shadingEnabled() && m_viewhistpos > 1 ) + { + QColor b( cg.base() ); + + QColor shade = fl->viewShade(); + QColor eshade = fl->editShade(); + int hc = fl->histCount(); + // If this file is in the edit history, blend in the eshade + // color. The blend is weighted by the position in the editing history + if ( fl->shadingEnabled() && m_edithistpos > 0 ) + { + int ec = fl->editHistCount(); + int v = hc-m_viewhistpos; + int e = ec-m_edithistpos+1; + e = e*e; + int n = QMAX(v + e, 1); + shade.setRgb( + ((shade.red()*v) + (eshade.red()*e))/n, + ((shade.green()*v) + (eshade.green()*e))/n, + ((shade.blue()*v) + (eshade.blue()*e))/n + ); + } + // blend in the shade color. + // max transperancy < .5, latest is most colored. + float t = (0.5/hc)*(hc-m_viewhistpos+1); + b.setRgb( + (int)((b.red()*(1-t)) + (shade.red()*t)), + (int)((b.green()*(1-t)) + (shade.green()*t)), + (int)((b.blue()*(1-t)) + (shade.blue()*t)) + ); + + cgNew.setColor(QColorGroup::Base, b); + } + + QListViewItem::paintCell( painter, cgNew, column, width, align ); + } + else + QListViewItem::paintCell( painter, cg, column, width, align ); +} + +int KateFileListItem::compare ( QListViewItem * i, int col, bool ascending ) const +{ + if ( i->rtti() == RTTI_KateFileListItem ) + { + switch( ((KateFileList*)listView())->sortType() ) + { + case KateFileList::sortByID: + { + + int d = (int)doc->documentNumber() - ((KateFileListItem*)i)->documentNumber(); + return ascending ? d : -d; + break; + } + case KateFileList::sortByURL: + return doc->url().prettyURL().compare( ((KateFileListItem*)i)->document()->url().prettyURL() ); + break; + default: + return QListViewItem::compare( i, col, ascending ); + } + } + return 0; +} +//END KateFileListItem + +//BEGIN KFLConfigPage +KFLConfigPage::KFLConfigPage( QWidget* parent, const char *name, KateFileList *fl ) + : Kate::ConfigPage( parent, name ), + m_filelist( fl ), + m_changed( false ) +{ + QVBoxLayout *lo1 = new QVBoxLayout( this ); + int spacing = KDialog::spacingHint(); + lo1->setSpacing( spacing ); + + QGroupBox *gb = new QGroupBox( 1, Qt::Horizontal, i18n("Background Shading"), this ); + lo1->addWidget( gb ); + + QWidget *g = new QWidget( gb ); + QGridLayout *lo = new QGridLayout( g, 2, 2 ); + lo->setSpacing( KDialog::spacingHint() ); + cbEnableShading = new QCheckBox( i18n("&Enable background shading"), g ); + lo->addMultiCellWidget( cbEnableShading, 1, 1, 0, 1 ); + + kcbViewShade = new KColorButton( g ); + lViewShade = new QLabel( kcbViewShade, i18n("&Viewed documents' shade:"), g ); + lo->addWidget( lViewShade, 2, 0 ); + lo->addWidget( kcbViewShade, 2, 1 ); + + kcbEditShade = new KColorButton( g ); + lEditShade = new QLabel( kcbEditShade, i18n("&Modified documents' shade:"), g ); + lo->addWidget( lEditShade, 3, 0 ); + lo->addWidget( kcbEditShade, 3, 1 ); + + // sorting + QHBox *hbSorting = new QHBox( this ); + lo1->addWidget( hbSorting ); + lSort = new QLabel( i18n("&Sort by:"), hbSorting ); + cmbSort = new QComboBox( hbSorting ); + lSort->setBuddy( cmbSort ); + QStringList l; + l << i18n("Opening Order") << i18n("Document Name") << i18n("URL"); + cmbSort->insertStringList( l ); + + lo1->insertStretch( -1, 10 ); + + QWhatsThis::add( cbEnableShading, i18n( + "When background shading is enabled, documents that have been viewed " + "or edited within the current session will have a shaded background. " + "The most recent documents have the strongest shade.") ); + QWhatsThis::add( kcbViewShade, i18n( + "Set the color for shading viewed documents.") ); + QWhatsThis::add( kcbEditShade, i18n( + "Set the color for modified documents. This color is blended into " + "the color for viewed files. The most recently edited documents get " + "most of this color.") ); + + QWhatsThis::add( cmbSort, i18n( + "Set the sorting method for the documents.") ); + + reload(); + + slotEnableChanged(); + connect( cbEnableShading, SIGNAL(toggled(bool)), this, SLOT(slotMyChanged()) ); + connect( cbEnableShading, SIGNAL(toggled(bool)), this, SLOT(slotEnableChanged()) ); + connect( kcbViewShade, SIGNAL(changed(const QColor&)), this, SLOT(slotMyChanged()) ); + connect( kcbEditShade, SIGNAL(changed(const QColor&)), this, SLOT(slotMyChanged()) ); + connect( cmbSort, SIGNAL(activated(int)), this, SLOT(slotMyChanged()) ); +} + +void KFLConfigPage::apply() +{ + if ( ! m_changed ) + return; + m_changed = false; + + // Change settings in the filelist + m_filelist->m_viewShade = kcbViewShade->color(); + m_filelist->m_editShade = kcbEditShade->color(); + m_filelist->m_enableBgShading = cbEnableShading->isChecked(); + m_filelist->setSortType( cmbSort->currentItem() ); + // repaint the affected items + m_filelist->triggerUpdate(); +} + +void KFLConfigPage::reload() +{ + // read in from config file + KConfig *config = kapp->config(); + config->setGroup( "Filelist" ); + cbEnableShading->setChecked( config->readBoolEntry("Shading Enabled", &m_filelist->m_enableBgShading ) ); + kcbViewShade->setColor( config->readColorEntry("View Shade", &m_filelist->m_viewShade ) ); + kcbEditShade->setColor( config->readColorEntry("Edit Shade", &m_filelist->m_editShade ) ); + cmbSort->setCurrentItem( m_filelist->sortType() ); + m_changed = false; +} + +void KFLConfigPage::slotEnableChanged() +{ + kcbViewShade->setEnabled( cbEnableShading->isChecked() ); + kcbEditShade->setEnabled( cbEnableShading->isChecked() ); + lViewShade->setEnabled( cbEnableShading->isChecked() ); + lEditShade->setEnabled( cbEnableShading->isChecked() ); +} + +void KFLConfigPage::slotMyChanged() +{ + m_changed = true; + slotChanged(); +} + +//END KFLConfigPage + + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katefilelist.h b/kate/app/katefilelist.h new file mode 100644 index 000000000..7615eb63d --- /dev/null +++ b/kate/app/katefilelist.h @@ -0,0 +1,191 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_FILELIST_H__ +#define __KATE_FILELIST_H__ + +#include "katemain.h" + +#include + +#include + +#include +#include +#include + +#define RTTI_KateFileListItem 1001 + +class KateMainWindow; + +class KAction; +class KSelectAction; + +class KateFileListItem : public QListViewItem +{ + public: + KateFileListItem( QListView *lv, + Kate::Document *doc ); + ~KateFileListItem(); + + inline uint documentNumber () { return m_docNumber; } + inline Kate::Document * document() { return doc; } + + int rtti() const { return RTTI_KateFileListItem; } + + /** + * Sets the view history position. + */ + void setViewHistPos( int p ) { m_viewhistpos = p; } + /** + * Sets the edit history position. + */ + void setEditHistPos( int p ) { m_edithistpos = p; } + + protected: + virtual const QPixmap *pixmap ( int column ) const; + void paintCell( QPainter *painter, const QColorGroup & cg, int column, int width, int align ); + /** + * Reimplemented so we can sort by a number of different document properties. + */ + int compare ( QListViewItem * i, int col, bool ascending ) const; + + private: + Kate::Document *doc; + int m_viewhistpos; ///< this gets set by the list as needed + int m_edithistpos; ///< this gets set by the list as needed + uint m_docNumber; +}; + +class KateFileList : public KListView +{ + Q_OBJECT + + friend class KFLConfigPage; + + public: + KateFileList (KateMainWindow *main, KateViewManager *_viewManager, QWidget * parent = 0, const char * name = 0 ); + ~KateFileList (); + + int sortType () const { return m_sort; }; + void updateSort (); + + enum sorting { + sortByID = 0, + sortByName = 1, + sortByURL = 2 + }; + + QString tooltip( QListViewItem *item, int ); + + uint histCount() const { return m_viewHistory.count(); } + uint editHistCount() const { return m_editHistory.count(); } + QColor editShade() const { return m_editShade; } + QColor viewShade() const { return m_viewShade; } + bool shadingEnabled() { return m_enableBgShading; } + + void readConfig( class KConfig *config, const QString &group ); + void writeConfig( class KConfig *config, const QString &group ); + + /** + * reimplemented to remove the item from the history stacks + */ + void takeItem( QListViewItem * ); + + public slots: + void setSortType (int s); + void slotNextDocument(); + void slotPrevDocument(); + + private slots: + void slotDocumentCreated (Kate::Document *doc); + void slotDocumentDeleted (uint documentNumber); + void slotActivateView( QListViewItem *item ); + void slotModChanged (Kate::Document *doc); + void slotModifiedOnDisc (Kate::Document *doc, bool b, unsigned char reason); + void slotNameChanged (Kate::Document *doc); + void slotViewChanged (); + void slotMenu ( QListViewItem *item, const QPoint &p, int col ); + + protected: + virtual void keyPressEvent( QKeyEvent *e ); + /** + * Reimplemented to force Single mode for real: + * don't let a mouse click outside items deselect. + */ + virtual void contentsMousePressEvent( QMouseEvent *e ); + /** + * Reimplemented to make sure the first (and only) column is at least + * the width of the viewport + */ + virtual void resizeEvent( QResizeEvent *e ); + + private: + void setupActions (); + void updateActions (); + + private: + KateMainWindow *m_main; + KateViewManager *viewManager; + + int m_sort; + bool notify; + + KAction* windowNext; + KAction* windowPrev; + KSelectAction* sortAction; + + QPtrList m_viewHistory; + QPtrList m_editHistory; + + QColor m_viewShade, m_editShade; + bool m_enableBgShading; + + class ToolTip *m_tooltip; +}; + +class KFLConfigPage : public Kate::ConfigPage { + Q_OBJECT + public: + KFLConfigPage( QWidget* parent=0, const char *name=0, KateFileList *fl=0 ); + virtual ~KFLConfigPage() {}; + + virtual void apply(); + virtual void reload(); + + public slots: + void slotEnableChanged(); + + private slots: + void slotMyChanged(); + + private: + class QCheckBox *cbEnableShading; + class KColorButton *kcbViewShade, *kcbEditShade; + class QLabel *lEditShade, *lViewShade, *lSort; + class QComboBox *cmbSort; + KateFileList *m_filelist; + + bool m_changed; +}; + + +#endif +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katefileselector.cpp b/kate/app/katefileselector.cpp new file mode 100644 index 000000000..bdc39fc9a --- /dev/null +++ b/kate/app/katefileselector.cpp @@ -0,0 +1,722 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +//BEGIN Includes +#include "katefileselector.h" +#include "katefileselector.moc" + +#include "katemainwindow.h" +#include "kateviewmanager.h" +#include "kbookmarkhandler.h" + +#include "kactionselector.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//END Includes + +//BEGIN Toolbar + // from kfiledialog.cpp - avoid qt warning in STDERR (~/.xsessionerrors) +static void silenceQToolBar(QtMsgType, const char *){} + +// helper classes to be able to have a toolbar without move handle +KateFileSelectorToolBar::KateFileSelectorToolBar(QWidget *parent) + : KToolBar( parent, "Kate FileSelector Toolbar", true ) +{ + setMinimumWidth(10); +} + +KateFileSelectorToolBar::~KateFileSelectorToolBar(){} + +void KateFileSelectorToolBar::setMovingEnabled( bool) +{ + KToolBar::setMovingEnabled(false); +} + + +KateFileSelectorToolBarParent::KateFileSelectorToolBarParent(QWidget *parent) + :QFrame(parent),m_tb(0){} +KateFileSelectorToolBarParent::~KateFileSelectorToolBarParent(){} +void KateFileSelectorToolBarParent::setToolBar(KateFileSelectorToolBar *tb) +{ + m_tb=tb; +} + +void KateFileSelectorToolBarParent::resizeEvent ( QResizeEvent * ) +{ + if (m_tb) + { + setMinimumHeight(m_tb->sizeHint().height()); + m_tb->resize(width(),height()); + } +} +//END + +//BEGIN Constructor/destructor + +KateFileSelector::KateFileSelector( KateMainWindow *mainWindow, + KateViewManager *viewManager, + QWidget * parent, const char * name ) + : QVBox (parent, name), + mainwin(mainWindow), + viewmanager(viewManager) +{ + mActionCollection = new KActionCollection( this ); + + QtMsgHandler oldHandler = qInstallMsgHandler( silenceQToolBar ); + + KateFileSelectorToolBarParent *tbp=new KateFileSelectorToolBarParent(this); + toolbar = new KateFileSelectorToolBar(tbp); + tbp->setToolBar(toolbar); + toolbar->setMovingEnabled(false); + toolbar->setFlat(true); + qInstallMsgHandler( oldHandler ); + + cmbPath = new KURLComboBox( KURLComboBox::Directories, true, this, "path combo" ); + cmbPath->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed )); + KURLCompletion* cmpl = new KURLCompletion(KURLCompletion::DirCompletion); + cmbPath->setCompletionObject( cmpl ); + cmbPath->setAutoDeleteCompletionObject( true ); + cmbPath->listBox()->installEventFilter( this ); + + dir = new KDirOperator(KURL(), this, "operator"); + dir->setView(KFile::/* Simple */Detail); + dir->view()->setSelectionMode(KFile::Extended); + connect ( dir, SIGNAL( viewChanged(KFileView *) ), + this, SLOT( selectorViewChanged(KFileView *) ) ); + setStretchFactor(dir, 2); + + KActionCollection *coll = dir->actionCollection(); + // some shortcuts of diroperator that clashes with Kate + coll->action( "delete" )->setShortcut( KShortcut( ALT + Key_Delete ) ); + coll->action( "reload" )->setShortcut( KShortcut( ALT + Key_F5 ) ); + coll->action( "back" )->setShortcut( KShortcut( ALT + SHIFT + Key_Left ) ); + coll->action( "forward" )->setShortcut( KShortcut( ALT + SHIFT + Key_Right ) ); + // some consistency - reset up for dir too + coll->action( "up" )->setShortcut( KShortcut( ALT + SHIFT + Key_Up ) ); + coll->action( "home" )->setShortcut( KShortcut( CTRL + ALT + Key_Home ) ); + + // bookmarks action! + KActionMenu *acmBookmarks = new KActionMenu( i18n("Bookmarks"), "bookmark", + mActionCollection, "bookmarks" ); + acmBookmarks->setDelayed( false ); + bookmarkHandler = new KBookmarkHandler( this, acmBookmarks->popupMenu() ); + QHBox* filterBox = new QHBox(this); + + btnFilter = new QToolButton( filterBox ); + btnFilter->setIconSet( SmallIconSet("filter" ) ); + btnFilter->setToggleButton( true ); + filter = new KHistoryCombo( true, filterBox, "filter"); + filter->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed )); + filterBox->setStretchFactor(filter, 2); + connect( btnFilter, SIGNAL( clicked() ), this, SLOT( btnFilterClick() ) ); + + connect( filter, SIGNAL( activated(const QString&) ), + SLOT( slotFilterChange(const QString&) ) ); + connect( filter, SIGNAL( returnPressed(const QString&) ), + filter, SLOT( addToHistory(const QString&) ) ); + + // kaction for the dir sync method + acSyncDir = new KAction( i18n("Current Document Folder"), "curfiledir", 0, + this, SLOT( setActiveDocumentDir() ), mActionCollection, "sync_dir" ); + toolbar->setIconText( KToolBar::IconOnly ); + toolbar->setIconSize( 16 ); + toolbar->setEnableContextMenu( false ); + + connect( cmbPath, SIGNAL( urlActivated( const KURL& )), + this, SLOT( cmbPathActivated( const KURL& ) )); + connect( cmbPath, SIGNAL( returnPressed( const QString& )), + this, SLOT( cmbPathReturnPressed( const QString& ) )); + connect(dir, SIGNAL(urlEntered(const KURL&)), + this, SLOT(dirUrlEntered(const KURL&)) ); + + connect(dir, SIGNAL(finishedLoading()), + this, SLOT(dirFinishedLoading()) ); + + // enable dir sync button if current doc has a valid URL + connect ( viewmanager, SIGNAL( viewChanged() ), + this, SLOT( kateViewChanged() ) ); + + // Connect the bookmark handler + connect( bookmarkHandler, SIGNAL( openURL( const QString& )), + this, SLOT( setDir( const QString& ) ) ); + + waitingUrl = QString::null; + + // whatsthis help + QWhatsThis::add( cmbPath, + i18n("

Here you can enter a path for a folder to display." + "

To go to a folder previously entered, press the arrow on " + "the right and choose one.

The entry has folder " + "completion. Right-click to choose how completion should behave.") ); + QWhatsThis::add( filter, + i18n("

Here you can enter a name filter to limit which files are displayed." + "

To clear the filter, toggle off the filter button to the left." + "

To reapply the last filter used, toggle on the filter button." ) ); + QWhatsThis::add( btnFilter, + i18n("

This button clears the name filter when toggled off, or " + "reapplies the last filter used when toggled on.") ); + +} + +KateFileSelector::~KateFileSelector() +{ +} +//END Constroctor/Destrctor + +//BEGIN Public Methods + +void KateFileSelector::readConfig(KConfig *config, const QString & name) +{ + dir->setViewConfig( config, name + ":view" ); + dir->readConfig(config, name + ":dir"); + dir->setView( KFile::Default ); + dir->view()->setSelectionMode(KFile::Extended); + config->setGroup( name ); + + // set up the toolbar + setupToolbar( config ); + + cmbPath->setMaxItems( config->readNumEntry( "pathcombo history len", 9 ) ); + cmbPath->setURLs( config->readPathListEntry( "dir history" ) ); + // if we restore history + if ( config->readBoolEntry( "restore location", true ) || kapp->isRestored() ) { + QString loc( config->readPathEntry( "location" ) ); + if ( ! loc.isEmpty() ) { +// waitingDir = loc; +// QTimer::singleShot(0, this, SLOT(initialDirChangeHack())); + setDir( loc ); + } + } + + // else is automatic, as cmpPath->setURL is called when a location is entered. + + filter->setMaxCount( config->readNumEntry( "filter history len", 9 ) ); + filter->setHistoryItems( config->readListEntry("filter history"), true ); + lastFilter = config->readEntry( "last filter" ); + QString flt(""); + if ( config->readBoolEntry( "restore last filter", true ) || kapp->isRestored() ) + flt = config->readEntry("current filter"); + filter->lineEdit()->setText( flt ); + slotFilterChange( flt ); + + autoSyncEvents = config->readNumEntry( "AutoSyncEvents", 0 ); +} + +void KateFileSelector::initialDirChangeHack() +{ + setDir( waitingDir ); +} + +void KateFileSelector::setupToolbar( KConfig *config ) +{ + toolbar->clear(); + QStringList tbactions = config->readListEntry( "toolbar actions", ',' ); + if ( tbactions.isEmpty() ) { + // reasonable collection for default toolbar + tbactions << "up" << "back" << "forward" << "home" << + "short view" << "detailed view" << + "bookmarks" << "sync_dir"; + } + KAction *ac; + for ( QStringList::Iterator it=tbactions.begin(); it != tbactions.end(); ++it ) { + if ( *it == "bookmarks" || *it == "sync_dir" ) + ac = mActionCollection->action( (*it).latin1() ); + else + ac = dir->actionCollection()->action( (*it).latin1() ); + if ( ac ) + ac->plug( toolbar ); + } +} + +void KateFileSelector::writeConfig(KConfig *config, const QString & name) +{ + dir->writeConfig(config,name + ":dir"); + + config->setGroup( name ); + config->writeEntry( "pathcombo history len", cmbPath->maxItems() ); + QStringList l; + for (int i = 0; i < cmbPath->count(); i++) { + l.append( cmbPath->text( i ) ); + } + config->writePathEntry( "dir history", l ); + config->writePathEntry( "location", cmbPath->currentText() ); + + config->writeEntry( "filter history len", filter->maxCount() ); + config->writeEntry( "filter history", filter->historyItems() ); + config->writeEntry( "current filter", filter->currentText() ); + config->writeEntry( "last filter", lastFilter ); + config->writeEntry( "AutoSyncEvents", autoSyncEvents ); +} + +void KateFileSelector::setView(KFile::FileView view) +{ + dir->setView(view); + dir->view()->setSelectionMode(KFile::Extended); +} + +//END Public Methods + +//BEGIN Public Slots + +void KateFileSelector::slotFilterChange( const QString & nf ) +{ + QString f = nf.stripWhiteSpace(); + bool empty = f.isEmpty() || f == "*"; + QToolTip::remove( btnFilter ); + if ( empty ) { + dir->clearFilter(); + filter->lineEdit()->setText( QString::null ); + QToolTip::add( btnFilter, + QString( i18n("Apply last filter (\"%1\")") ).arg( lastFilter ) ); + } + else { + dir->setNameFilter( f ); + lastFilter = f; + QToolTip::add( btnFilter, i18n("Clear filter") ); + } + btnFilter->setOn( !empty ); + dir->updateDir(); + // this will be never true after the filter has been used;) + btnFilter->setEnabled( !( empty && lastFilter.isEmpty() ) ); + +} + +bool kateFileSelectorIsReadable ( const KURL& url ) +{ + if ( !url.isLocalFile() ) + return true; // what else can we say? + + QDir dir (url.path()); + return dir.exists (); +} + +void KateFileSelector::setDir( KURL u ) +{ + KURL newurl; + + if ( !u.isValid() ) + newurl.setPath( QDir::homeDirPath() ); + else + newurl = u; + + QString pathstr = newurl.path(+1); + newurl.setPath(pathstr); + + if ( !kateFileSelectorIsReadable ( newurl ) ) + newurl.cd(QString::fromLatin1("..")); + + if ( !kateFileSelectorIsReadable (newurl) ) + newurl.setPath( QDir::homeDirPath() ); + + dir->setURL(newurl, true); +} + +//END Public Slots + +//BEGIN Private Slots + +void KateFileSelector::cmbPathActivated( const KURL& u ) +{ + cmbPathReturnPressed( u.url() ); +} + +void KateFileSelector::cmbPathReturnPressed( const QString& u ) +{ + KURL typedURL( u ); + if ( typedURL.hasPass() ) + typedURL.setPass( QString::null ); + + QStringList urls = cmbPath->urls(); + urls.remove( typedURL.url() ); + urls.prepend( typedURL.url() ); + cmbPath->setURLs( urls, KURLComboBox::RemoveBottom ); + dir->setFocus(); + dir->setURL( KURL(u), true ); +} + +void KateFileSelector::dirUrlEntered( const KURL& u ) +{ + cmbPath->setURL( u ); +} + +void KateFileSelector::dirFinishedLoading() +{ +} + + +/* + When the button in the filter box toggles: + If off: + If the name filer is anything but "" or "*", reset it. + If on: + Set last filter. +*/ +void KateFileSelector::btnFilterClick() +{ + if ( !btnFilter->isOn() ) { + slotFilterChange( QString::null ); + } + else { + filter->lineEdit()->setText( lastFilter ); + slotFilterChange( lastFilter ); + } +} + +//FIXME crash on shutdown +void KateFileSelector::setActiveDocumentDir() +{ +// kdDebug(13001)<<"KateFileSelector::setActiveDocumentDir()"<activeDocumentUrl(); +// kdDebug(13001)<<"URL: "<activeDocumentUrl(); + if (!u.isEmpty()) + waitingUrl = u.directory(); + } + } + + // TODO: make sure the button is disabled if the directory is unreadable, eg + // the document URL has protocol http + acSyncDir->setEnabled( ! mainwin->activeDocumentUrl().directory().isEmpty() ); +} + +void KateFileSelector::selectorViewChanged( KFileView * newView ) +{ + newView->setSelectionMode(KFile::Extended); +} + +//END Private Slots + +//BEGIN Protected + +void KateFileSelector::focusInEvent( QFocusEvent * ) +{ + dir->setFocus(); +} + +void KateFileSelector::showEvent( QShowEvent * ) +{ + // sync if we should + if ( autoSyncEvents & GotVisible ) { +// kdDebug(13001)<<"syncing fs on show"<setVariableWidth() does not yield a + satisfying result, something is wrong with the handling of the sizehint. + And the popup is rather useless, if the paths are only partly visible. + */ + QListBox *lb = cmbPath->listBox(); + if ( o == lb && e->type() == QEvent::Show ) { + int add = lb->height() < lb->contentsHeight() ? lb->verticalScrollBar()->width() : 0; + int w = QMIN( mainwin->width(), lb->contentsWidth() + add ); + lb->resize( w, lb->height() ); + // TODO - move the listbox to a suitable place if nessecary + // TODO - decide if it is worth caching the size while untill the contents + // are changed. + } + // TODO - same thing for the completion popup? + return QWidget::eventFilter( o, e ); +} + +//END Protected + +//BEGIN ACtionLBItem +/* + QListboxItem that can store and return a string, + used for the toolbar action selector. +*/ +class ActionLBItem : public QListBoxPixmap { + public: + ActionLBItem( QListBox *lb=0, + const QPixmap &pm = QPixmap(), + const QString &text=QString::null, + const QString &str=QString::null ) : + QListBoxPixmap( lb, pm, text ), + _str(str) {}; + QString idstring() { return _str; }; + private: + QString _str; +}; +//END ActionLBItem + +//BEGIN KFSConfigPage +//////////////////////////////////////////////////////////////////////////////// +// KFSConfigPage implementation +//////////////////////////////////////////////////////////////////////////////// +KFSConfigPage::KFSConfigPage( QWidget *parent, const char *name, KateFileSelector *kfs ) + : Kate::ConfigPage( parent, name ), + fileSelector( kfs ), + m_changed( false ) +{ + QVBoxLayout *lo = new QVBoxLayout( this ); + int spacing = KDialog::spacingHint(); + lo->setSpacing( spacing ); + + // Toolbar - a lot for a little... + QGroupBox *gbToolbar = new QGroupBox( 1, Qt::Vertical, i18n("Toolbar"), this ); + acSel = new KActionSelector( gbToolbar ); + acSel->setAvailableLabel( i18n("A&vailable actions:") ); + acSel->setSelectedLabel( i18n("S&elected actions:") ); + lo->addWidget( gbToolbar ); + connect( acSel, SIGNAL( added( QListBoxItem * ) ), this, SLOT( slotMyChanged() ) ); + connect( acSel, SIGNAL( removed( QListBoxItem * ) ), this, SLOT( slotMyChanged() ) ); + connect( acSel, SIGNAL( movedUp( QListBoxItem * ) ), this, SLOT( slotMyChanged() ) ); + connect( acSel, SIGNAL( movedDown( QListBoxItem * ) ), this, SLOT( slotMyChanged() ) ); + + // Sync + QGroupBox *gbSync = new QGroupBox( 1, Qt::Horizontal, i18n("Auto Synchronization"), this ); + cbSyncActive = new QCheckBox( i18n("When a docu&ment becomes active"), gbSync ); + cbSyncShow = new QCheckBox( i18n("When the file selector becomes visible"), gbSync ); + lo->addWidget( gbSync ); + connect( cbSyncActive, SIGNAL( toggled( bool ) ), this, SLOT( slotMyChanged() ) ); + connect( cbSyncShow, SIGNAL( toggled( bool ) ), this, SLOT( slotMyChanged() ) ); + + // Histories + QHBox *hbPathHist = new QHBox ( this ); + QLabel *lbPathHist = new QLabel( i18n("Remember &locations:"), hbPathHist ); + sbPathHistLength = new QSpinBox( hbPathHist ); + lbPathHist->setBuddy( sbPathHistLength ); + lo->addWidget( hbPathHist ); + connect( sbPathHistLength, SIGNAL( valueChanged ( int ) ), this, SLOT( slotMyChanged() ) ); + + QHBox *hbFilterHist = new QHBox ( this ); + QLabel *lbFilterHist = new QLabel( i18n("Remember &filters:"), hbFilterHist ); + sbFilterHistLength = new QSpinBox( hbFilterHist ); + lbFilterHist->setBuddy( sbFilterHistLength ); + lo->addWidget( hbFilterHist ); + connect( sbFilterHistLength, SIGNAL( valueChanged ( int ) ), this, SLOT( slotMyChanged() ) ); + + // Session + QGroupBox *gbSession = new QGroupBox( 1, Qt::Horizontal, i18n("Session"), this ); + cbSesLocation = new QCheckBox( i18n("Restore loca&tion"), gbSession ); + cbSesFilter = new QCheckBox( i18n("Restore last f&ilter"), gbSession ); + lo->addWidget( gbSession ); + connect( cbSesLocation, SIGNAL( toggled( bool ) ), this, SLOT( slotMyChanged() ) ); + connect( cbSesFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotMyChanged() ) ); + + // make it look nice + lo->addStretch( 1 ); + + // be helpfull + /* + QWhatsThis::add( lbAvailableActions, i18n( + "

Available actions for the toolbar. To add an action, select it here " + "and press the add (->) button" ) ); + QWhatsThis::add( lbUsedActions, i18n( + "

Actions used in the toolbar. To remove an action, select it and " + "press the remove (<-) button." + "

To change the order of the actions, use the Up and Down buttons to " + "move the selected action.") ); + */ + QString lhwt( i18n( + "

Decides how many locations to keep in the history of the location " + "combo box.") ); + QWhatsThis::add( lbPathHist, lhwt ); + QWhatsThis::add( sbPathHistLength, lhwt ); + QString fhwt( i18n( + "

Decides how many filters to keep in the history of the filter " + "combo box.") ); + QWhatsThis::add( lbFilterHist, fhwt ); + QWhatsThis::add( sbFilterHistLength, fhwt ); + QString synwt( i18n( + "

These options allow you to have the File Selector automatically " + "change location to the folder of the active document on certain " + "events." + "

Auto synchronization is lazy, meaning it will not take " + "effect until the file selector is visible." + "

None of these are enabled by default, but you can always sync the " + "location by pressing the sync button in the toolbar.") ); + QWhatsThis::add( gbSync, synwt ); + QWhatsThis::add( cbSesLocation, i18n( + "

If this option is enabled (default), the location will be restored " + "when you start Kate.

Note that if the session is " + "handled by the KDE session manager, the location is always restored.") ); + QWhatsThis::add( cbSesFilter, i18n( + "

If this option is enabled (default), the current filter will be " + "restored when you start Kate.

Note that if the " + "session is handled by the KDE session manager, the filter is always " + "restored." + "

Note that some of the autosync settings may " + "override the restored location if on.") ); + + init(); + +} + +void KFSConfigPage::apply() +{ + if ( ! m_changed ) + return; + + m_changed = false; + + KConfig *config = kapp->config(); + config->setGroup( "fileselector" ); + // toolbar + QStringList l; + QListBoxItem *item = acSel->selectedListBox()->firstItem(); + ActionLBItem *aItem; + while ( item ) + { + aItem = (ActionLBItem*)item; + if ( aItem ) + { + l << aItem->idstring(); + } + item = item->next(); + } + config->writeEntry( "toolbar actions", l ); + fileSelector->setupToolbar( config ); + // sync + int s = 0; + if ( cbSyncActive->isChecked() ) + s |= KateFileSelector::DocumentChanged; + if ( cbSyncShow->isChecked() ) + s |= KateFileSelector::GotVisible; + fileSelector->autoSyncEvents = s; + + // histories + fileSelector->cmbPath->setMaxItems( sbPathHistLength->value() ); + fileSelector->filter->setMaxCount( sbFilterHistLength->value() ); + // session - theese are read/written directly to the app config, + // as they are not needed during operation. + config->writeEntry( "restore location", cbSesLocation->isChecked() ); + config->writeEntry( "restore last filter", cbSesFilter->isChecked() ); +} + +void KFSConfigPage::reload() +{ + // hmm, what is this supposed to do, actually?? + init(); + m_changed = false; +} +void KFSConfigPage::init() +{ + KConfig *config = kapp->config(); + config->setGroup( "fileselector" ); + // toolbar + QStringList l = config->readListEntry( "toolbar actions", ',' ); + if ( l.isEmpty() ) // default toolbar + l << "up" << "back" << "forward" << "home" << + "short view" << "detailed view" << + "bookmarks" << "sync_dir"; + + // actions from diroperator + two of our own + QStringList allActions; + allActions << "up" << "back" << "forward" << "home" << + "reload" << "mkdir" << "delete" << + "short view" << "detailed view" /*<< "view menu" << + "show hidden" << "properties"*/ << + "bookmarks" << "sync_dir"; + QRegExp re("&(?=[^&])"); + KAction *ac; + QListBox *lb; + for ( QStringList::Iterator it=allActions.begin(); it != allActions.end(); ++it ) { + lb = l.contains( *it ) ? acSel->selectedListBox() : acSel->availableListBox(); + if ( *it == "bookmarks" || *it == "sync_dir" ) + ac = fileSelector->actionCollection()->action( (*it).latin1() ); + else + ac = fileSelector->dirOperator()->actionCollection()->action( (*it).latin1() ); + if ( ac ) + new ActionLBItem( lb, SmallIcon( ac->icon() ), ac->text().replace( re, "" ), *it ); + } + + // sync + int s = fileSelector->autoSyncEvents; + cbSyncActive->setChecked( s & KateFileSelector::DocumentChanged ); + cbSyncShow->setChecked( s & KateFileSelector::GotVisible ); + // histories + sbPathHistLength->setValue( fileSelector->cmbPath->maxItems() ); + sbFilterHistLength->setValue( fileSelector->filter->maxCount() ); + // session + cbSesLocation->setChecked( config->readBoolEntry( "restore location", true ) ); + cbSesFilter->setChecked( config->readBoolEntry( "restore last filter", true ) ); +} + +void KFSConfigPage::slotMyChanged() +{ + m_changed = true; + slotChanged(); +} +//END KFSConfigPage +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katefileselector.h b/kate/app/katefileselector.h new file mode 100644 index 000000000..0bab4c257 --- /dev/null +++ b/kate/app/katefileselector.h @@ -0,0 +1,172 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_FILESELECTOR_H__ +#define __KATE_FILESELECTOR_H__ + +#include "katemain.h" +#include "katedocmanager.h" +#include + +#include +#include +#include +#include +#include + +class KateMainWindow; +class KateViewManager; +class KActionCollection; +class KActionSelector; +class KFileView; + +/* + The kate file selector presents a directory view, in which the default action is + to open the activated file. + Additinally, a toolbar for managing the kdiroperator widget + sync that to + the directory of the current file is available, as well as a filter widget + allowing to filter the displayed files using a name filter. +*/ + +/* I think this fix for not moving toolbars is better */ +class KateFileSelectorToolBar: public KToolBar +{ + Q_OBJECT +public: + KateFileSelectorToolBar(QWidget *parent); + virtual ~KateFileSelectorToolBar(); + + virtual void setMovingEnabled( bool b ); +}; + +class KateFileSelectorToolBarParent: public QFrame +{ + Q_OBJECT +public: + KateFileSelectorToolBarParent(QWidget *parent); + ~KateFileSelectorToolBarParent(); + void setToolBar(KateFileSelectorToolBar *tb); +private: + KateFileSelectorToolBar *m_tb; +protected: + virtual void resizeEvent ( QResizeEvent * ); +}; + +class KateFileSelector : public QVBox +{ + Q_OBJECT + + friend class KFSConfigPage; + + public: + /* When to sync to current document directory */ + enum AutoSyncEvent { DocumentChanged=1, GotVisible=2 }; + + KateFileSelector( KateMainWindow *mainWindow=0, KateViewManager *viewManager=0, + QWidget * parent = 0, const char * name = 0 ); + ~KateFileSelector(); + + void readConfig( KConfig *, const QString & ); + void writeConfig( KConfig *, const QString & ); + void setupToolbar( KConfig * ); + void setView( KFile::FileView ); + KDirOperator *dirOperator(){ return dir; } + KActionCollection *actionCollection() { return mActionCollection; }; + + public slots: + void slotFilterChange(const QString&); + void setDir(KURL); + void setDir( const QString& url ) { setDir( KURL( url ) ); }; + void kateViewChanged(); + void selectorViewChanged( KFileView * ); + + private slots: + void cmbPathActivated( const KURL& u ); + void cmbPathReturnPressed( const QString& u ); + void dirUrlEntered( const KURL& u ); + void dirFinishedLoading(); + void setActiveDocumentDir(); + void btnFilterClick(); + + protected: + void focusInEvent( QFocusEvent * ); + void showEvent( QShowEvent * ); + bool eventFilter( QObject *, QEvent * ); + void initialDirChangeHack(); + + private: + class KateFileSelectorToolBar *toolbar; + KActionCollection *mActionCollection; + class KBookmarkHandler *bookmarkHandler; + KURLComboBox *cmbPath; + KDirOperator * dir; + class KAction *acSyncDir; + KHistoryCombo * filter; + class QToolButton *btnFilter; + + KateMainWindow *mainwin; + KateViewManager *viewmanager; + + QString lastFilter; + int autoSyncEvents; // enabled autosync events + QString waitingUrl; // maybe display when we gets visible + QString waitingDir; +}; + +/* TODO anders + KFSFilterHelper + A popup widget presenting a listbox with checkable items + representing the mime types available in the current directory, and + providing a name filter based on those. +*/ + +/* + Config page for file selector. + Allows for configuring the toolbar, the history length + of the path and file filter combos, and how to handle + user closed session. +*/ +class KFSConfigPage : public Kate::ConfigPage { + Q_OBJECT + public: + KFSConfigPage( QWidget* parent=0, const char *name=0, KateFileSelector *kfs=0); + virtual ~KFSConfigPage() {}; + + virtual void apply(); + virtual void reload(); + + private slots: + void slotMyChanged(); + + private: + void init(); + + KateFileSelector *fileSelector; + KActionSelector *acSel; + class QSpinBox *sbPathHistLength, *sbFilterHistLength; + class QCheckBox *cbSyncActive, *cbSyncShow; + class QCheckBox *cbSesLocation, *cbSesFilter; + + bool m_changed; +}; + + +#endif //__KATE_FILESELECTOR_H__ +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kategrepdialog.cpp b/kate/app/kategrepdialog.cpp new file mode 100644 index 000000000..8816862de --- /dev/null +++ b/kate/app/kategrepdialog.cpp @@ -0,0 +1,544 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001, 2004 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kategrepdialog.h" +#include "katemainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char *template_desc[] = { + "normal", + "assignment", + "->MEMBER(", + "class::MEMBER(", + "OBJECT->member(", + 0 +}; + +const char *strTemplate[] = { + "%s", + "\\<%s\\>[\t ]*=[^=]", + "\\->[\\t ]*\\<%s\\>[\\t ]*(", + "[a-z0-9_$]\\+[\\t ]*::[\\t ]*\\<%s\\>[\\t ]*(", + "\\<%s\\>[\\t ]*\\->[\\t ]*[a-z0-9_$]\\+[\\t ]*(", + 0 +}; + + +GrepTool::GrepTool(QWidget *parent, const char *name) + : QWidget(parent, name/*, false*/), m_fixFocus(true), childproc(0) +{ + setCaption(i18n("Find in Files")); + config = KGlobal::config(); + config->setGroup("GrepTool"); + lastSearchItems = config->readListEntry("LastSearchItems"); + lastSearchPaths = config->readListEntry("LastSearchPaths"); + lastSearchFiles = config->readListEntry("LastSearchFiles"); + + if( lastSearchFiles.isEmpty() ) + { + // if there are no entries, most probably the first Kate start. + // Initialize with default values. + lastSearchFiles << "*.h,*.hxx,*.cpp,*.cc,*.C,*.cxx,*.idl,*.c" + << "*.cpp,*.cc,*.C,*.cxx,*.c" + << "*.h,*.hxx,*.idl" + << "*"; + } + + QGridLayout *layout = new QGridLayout(this, 6, 3, 4, 4); + layout->setColStretch(0, 10); + layout->addColSpacing(1, 10); + layout->setColStretch(1, 0); + layout->setColStretch(2, 1); + layout->setRowStretch(1, 0); + layout->setRowStretch(2, 10); + layout->setRowStretch(4, 0); + + QGridLayout *loInput = new QGridLayout(4, 2, 4); + layout->addLayout(loInput, 0, 0); + loInput->setColStretch(0, 0); + loInput->setColStretch(1, 20); + + QLabel *lPattern = new QLabel(i18n("Pattern:"), this); + lPattern->setFixedSize(lPattern->sizeHint()); + loInput->addWidget(lPattern, 0, 0, AlignRight | AlignVCenter); + + QBoxLayout *loPattern = new QHBoxLayout( 4 ); + loInput->addLayout( loPattern, 0, 1 ); + cmbPattern = new KComboBox(true, this); + cmbPattern->setDuplicatesEnabled(false); + cmbPattern->insertStringList(lastSearchItems); + cmbPattern->setEditText(QString::null); + cmbPattern->setInsertionPolicy(QComboBox::NoInsertion); + lPattern->setBuddy(cmbPattern); + cmbPattern->setFocus(); + cmbPattern->setMinimumSize(cmbPattern->sizeHint()); + loPattern->addWidget( cmbPattern ); + + cbCasesensitive = new QCheckBox(i18n("Case sensitive"), this); + cbCasesensitive->setMinimumWidth(cbCasesensitive->sizeHint().width()); + cbCasesensitive->setChecked(config->readBoolEntry("CaseSensitive", true)); + loPattern->addWidget(cbCasesensitive); + + cbRegex = new QCheckBox( i18n("Regular expression"), this ); + cbRegex->setMinimumWidth( cbRegex->sizeHint().width() ); + cbRegex->setChecked( config->readBoolEntry( "Regex", true ) ); + loPattern->addWidget( cbRegex ); + loPattern->setStretchFactor( cmbPattern, 100 ); + + QLabel *lTemplate = new QLabel(i18n("Template:"), this); + lTemplate->setFixedSize(lTemplate->sizeHint()); + loInput->addWidget(lTemplate, 1, 0, AlignRight | AlignVCenter); + + QBoxLayout *loTemplate = new QHBoxLayout(4); + loInput->addLayout(loTemplate, 1, 1); + + leTemplate = new KLineEdit(this); + lTemplate->setBuddy(leTemplate); + leTemplate->setText(strTemplate[0]); + leTemplate->setMinimumSize(leTemplate->sizeHint()); + loTemplate->addWidget(leTemplate); + + KComboBox *cmbTemplate = new KComboBox(false, this); + cmbTemplate->insertStrList(template_desc); + cmbTemplate->adjustSize(); + cmbTemplate->setFixedSize(cmbTemplate->size()); + loTemplate->addWidget(cmbTemplate); + + QLabel *lFiles = new QLabel(i18n("Files:"), this); + lFiles->setFixedSize(lFiles->sizeHint()); + loInput->addWidget(lFiles, 2, 0, AlignRight | AlignVCenter); + + cmbFiles = new KComboBox(true, this); + lFiles->setBuddy(cmbFiles->focusProxy()); + cmbFiles->setMinimumSize(cmbFiles->sizeHint()); + cmbFiles->setInsertionPolicy(QComboBox::NoInsertion); + cmbFiles->setDuplicatesEnabled(false); + cmbFiles->insertStringList(lastSearchFiles); + loInput->addWidget(cmbFiles, 2, 1); + + QLabel *lDir = new QLabel(i18n("Folder:"), this); + lDir->setFixedSize(lDir->sizeHint()); + loInput->addWidget(lDir, 3, 0, AlignRight | AlignVCenter); + + QBoxLayout *loDir = new QHBoxLayout(3); + loInput->addLayout(loDir, 3, 1); + + KComboBox* cmbUrl = new KComboBox(true, this); + cmbUrl->setMinimumWidth(80); // make sure that 800x600 res works + cmbUrl->setDuplicatesEnabled(false); + cmbUrl->setInsertionPolicy(QComboBox::NoInsertion); + cmbDir = new KURLRequester( cmbUrl, this, "dir combo" ); + cmbDir->completionObject()->setMode(KURLCompletion::DirCompletion); + cmbDir->comboBox()->insertStringList(lastSearchPaths); + cmbDir->setMode( KFile::Directory|KFile::LocalOnly ); + loDir->addWidget(cmbDir, 1); + lDir->setBuddy(cmbDir); + + cbRecursive = new QCheckBox(i18n("Recursive"), this); + cbRecursive->setMinimumWidth(cbRecursive->sizeHint().width()); + cbRecursive->setChecked(config->readBoolEntry("Recursive", true)); + loDir->addWidget(cbRecursive); + + KButtonBox *actionbox = new KButtonBox(this, Qt::Vertical); + layout->addWidget(actionbox, 0, 2); + actionbox->addStretch(); + btnSearch = static_cast(actionbox->addButton(KGuiItem(i18n("Find"),"find"))); + btnSearch->setDefault(true); + btnClear = static_cast(actionbox->addButton( KStdGuiItem::clear() )); + actionbox->addStretch(); + actionbox->layout(); + + lbResult = new QListBox(this); + QFontMetrics rb_fm(lbResult->fontMetrics()); + layout->addMultiCellWidget(lbResult, 2, 2, 0, 2); + + layout->activate(); + + KAcceleratorManager::manage( this ); + + QWhatsThis::add(lPattern, + i18n("

Enter the expression you want to search for here." + "

If 'regular expression' is unchecked, any non-space letters in your " + "expression will be escaped with a backslash character." + "

Possible meta characters are:
" + ". - Matches any character
" + "^ - Matches the beginning of a line
" + "$ - Matches the end of a line
" + "\\< - Matches the beginning of a word
" + "\\> - Matches the end of a word" + "

The following repetition operators exist:
" + "? - The preceding item is matched at most once
" + "* - The preceding item is matched zero or more times
" + "+ - The preceding item is matched one or more times
" + "{n} - The preceding item is matched exactly n times
" + "{n,} - The preceding item is matched n or more times
" + "{,n} - The preceding item is matched at most n times
" + "{n,m} - The preceding item is matched at least n, " + "but at most m times." + "

Furthermore, backreferences to bracketed subexpressions are available " + "via the notation \\#." + "

See the grep(1) documentation for the full documentation." + )); + QWhatsThis::add(lFiles, + i18n("Enter the file name pattern of the files to search here.\n" + "You may give several patterns separated by commas.")); + QWhatsThis::add(lTemplate, + i18n("You can choose a template for the pattern from the combo box\n" + "and edit it here. The string %s in the template is replaced\n" + "by the pattern input field, resulting in the regular expression\n" + "to search for.")); + QWhatsThis::add(lDir, + i18n("Enter the folder which contains the files in which you want to search.")); + QWhatsThis::add(cbRecursive, + i18n("Check this box to search in all subfolders.")); + QWhatsThis::add(cbCasesensitive, + i18n("If this option is enabled (the default), the search will be case sensitive.")); + QWhatsThis::add( cbRegex, i18n( + "

If this is enabled, your pattern will be passed unmodified to " + "grep(1). Otherwise, all characters that are not letters will be " + "escaped using a backslash character to prevent grep from interpreting " + "them as part of the expression.") ); + QWhatsThis::add(lbResult, + i18n("The results of the grep run are listed here. Select a\n" + "filename/line number combination and press Enter or doubleclick\n" + "on the item to show the respective line in the editor.")); + + // event filter, do something relevant for RETURN + cmbPattern->installEventFilter( this ); + leTemplate->installEventFilter( this ); + cmbFiles->installEventFilter( this ); + cmbDir->comboBox()->installEventFilter( this ); + + connect( cmbTemplate, SIGNAL(activated(int)), + SLOT(templateActivated(int)) ); + connect( lbResult, SIGNAL(selected(const QString&)), + SLOT(itemSelected(const QString&)) ); + connect( btnSearch, SIGNAL(clicked()), + SLOT(slotSearch()) ); + connect( btnClear, SIGNAL(clicked()), + SLOT(slotClear()) ); + connect( cmbPattern->lineEdit(), SIGNAL(textChanged ( const QString & )), + SLOT( patternTextChanged( const QString & ))); + + patternTextChanged( cmbPattern->lineEdit()->text()); +} + + +GrepTool::~GrepTool() +{ + delete childproc; +} + +void GrepTool::patternTextChanged( const QString & _text) +{ + btnSearch->setEnabled( !_text.isEmpty() ); +} + +void GrepTool::templateActivated(int index) +{ + leTemplate->setText(strTemplate[index]); +} + +void GrepTool::itemSelected(const QString& item) +{ + int pos; + QString filename, linenumber; + + QString str = item; + if ( (pos = str.find(':')) != -1) + { + filename = str.left(pos); + str = str.mid(pos+1); + if ( (pos = str.find(':')) != -1) + { + filename = m_workingDir + QDir::separator() + filename; + linenumber = str.left(pos); + emit itemSelected(filename,linenumber.toInt()-1); + } + } +} + +void GrepTool::processOutput() +{ + int pos; + while ( (pos = buf.find('\n')) != -1) + { + QString item = buf.mid(2,pos-2); + if (!item.isEmpty()) + lbResult->insertItem(item); + buf = buf.mid(pos+1); + } + kapp->processEvents(); +} + +void GrepTool::slotSearch() +{ + if ( cmbPattern->currentText().isEmpty() ) + { + cmbPattern->setFocus(); + return; + } + + if ( cmbDir->url().isEmpty() || ! QDir(cmbDir->url()).exists() ) + { + cmbDir->setFocus(); + KMessageBox::information( this, i18n( + "You must enter an existing local folder in the 'Folder' entry."), + i18n("Invalid Folder"), "Kate grep tool: invalid folder" ); + return; + } + + if ( ! leTemplate->text().contains("%s") ) + { + leTemplate->setFocus(); + return; + } + + if ( childproc && childproc->isRunning() ) + { + childproc->kill(); + return; + } + + slotClear (); + + m_workingDir = cmbDir->url(); + + QString s = cmbPattern->currentText(); + if ( ! cbRegex->isChecked() ) + s.replace( QRegExp( "([^\\w'()<>])" ), "\\\\1" ); + QString pattern = leTemplate->text(); + pattern.replace( "%s", s ); + + childproc = new KProcess(); + childproc->setWorkingDirectory( m_workingDir ); + *childproc << "find" << "."; + if (!cbRecursive->isChecked()) + *childproc << "-maxdepth" << "1"; + if (!cmbFiles->currentText().isEmpty() ) + { + QStringList files = QStringList::split ( ",", cmbFiles->currentText(), FALSE ); + *childproc << "("; + bool first = true; + for ( QStringList::Iterator it = files.begin(); it != files.end(); ++it ) + { + if (!first) + *childproc << "-o"; + *childproc << "-name" << (*it); + first = false; + } + *childproc << ")"; + } + *childproc << "-exec" << "grep"; + if (!cbCasesensitive->isChecked()) + *childproc << "-i"; + *childproc << "-n" << "-e" << pattern << "{}"; + *childproc << "/dev/null"; //trick to have grep always display the filename + *childproc << ";"; + + connect( childproc, SIGNAL(processExited(KProcess *)), + SLOT(childExited()) ); + connect( childproc, SIGNAL(receivedStdout(KProcess *, char *, int)), + SLOT(receivedOutput(KProcess *, char *, int)) ); + connect( childproc, SIGNAL(receivedStderr(KProcess *, char *, int)), + SLOT(receivedErrOutput(KProcess *, char *, int)) ); + + // actually it should be checked whether the process was started successfully + lbResult->setCursor( QCursor(Qt::WaitCursor) ); + btnClear->setEnabled( false ); + btnSearch->setGuiItem( KGuiItem(i18n("Cancel"), "button_cancel")); + childproc->start(KProcess::NotifyOnExit, KProcess::AllOutput); +} + +void GrepTool::slotSearchFor(const QString &pattern) +{ + slotClear(); + cmbPattern->setEditText(pattern); + slotSearch(); +} + +void GrepTool::finish() +{ + btnSearch->setEnabled( !cmbPattern->lineEdit()->text().isEmpty() ); + + buf += '\n'; + processOutput(); + delete childproc; + childproc = 0; + + config->setGroup("GrepTool"); + + QString cmbText = cmbPattern->currentText(); + bool itemsRemoved = lastSearchItems.remove(cmbText) > 0; + lastSearchItems.prepend(cmbText); + if (itemsRemoved) + { + cmbPattern->removeItem(cmbPattern->currentItem()); + } + cmbPattern->insertItem(cmbText, 0); + cmbPattern->setCurrentItem(0); + if (lastSearchItems.count() > 10) { + lastSearchItems.pop_back(); + cmbPattern->removeItem(cmbPattern->count() - 1); + } + config->writeEntry("LastSearchItems", lastSearchItems); + + + cmbText = cmbDir->url(); + itemsRemoved = lastSearchPaths.remove(cmbText) > 0; + lastSearchPaths.prepend(cmbText); + if (itemsRemoved) + { + cmbDir->comboBox()->removeItem(cmbDir->comboBox()->currentItem()); + } + cmbDir->comboBox()->insertItem(cmbText, 0); + cmbDir->comboBox()->setCurrentItem(0); + if (lastSearchPaths.count() > 10) + { + lastSearchPaths.pop_back(); + cmbDir->comboBox()->removeItem(cmbDir->comboBox()->count() - 1); + } + config->writeEntry("LastSearchPaths", lastSearchPaths); + + + cmbText = cmbFiles->currentText(); + itemsRemoved = lastSearchFiles.remove(cmbText) > 0; + lastSearchFiles.prepend(cmbText); + if (itemsRemoved) + { + cmbFiles->removeItem(cmbFiles->currentItem()); + } + cmbFiles->insertItem(cmbText, 0); + cmbFiles->setCurrentItem(0); + if (lastSearchFiles.count() > 10) { + lastSearchFiles.pop_back(); + cmbFiles->removeItem(cmbFiles->count() - 1); + } + config->writeEntry("LastSearchFiles", lastSearchFiles); + + config->writeEntry("Recursive", cbRecursive->isChecked()); + config->writeEntry("CaseSensitive", cbCasesensitive->isChecked()); + config->writeEntry("Regex", cbRegex->isChecked()); +} + +void GrepTool::slotCancel() +{ + finish(); +} + +void GrepTool::childExited() +{ +// int status = childproc->exitStatus(); + lbResult->unsetCursor(); + btnClear->setEnabled( true ); + btnSearch->setGuiItem( KGuiItem(i18n("Find"), "find") ); + + if ( ! errbuf.isEmpty() ) + { + KMessageBox::information( parentWidget(), i18n("Error:

") + errbuf, i18n("Grep Tool Error") ); + errbuf.truncate(0); + } + else + finish(); +} + +void GrepTool::receivedOutput(KProcess */*proc*/, char *buffer, int buflen) +{ + buf += QCString(buffer, buflen+1); + processOutput(); +} + +void GrepTool::receivedErrOutput(KProcess */*proc*/, char *buffer, int buflen) +{ + errbuf += QCString( buffer, buflen + 1 ); +} + +void GrepTool::slotClear() +{ + finish(); + lbResult->clear(); +} + +void GrepTool::updateDirName(const QString &dir) +{ + if (m_lastUpdatedDir != dir) + { + setDirName (dir); + m_lastUpdatedDir = dir; + } +} + +void GrepTool::setDirName(const QString &dir){ + cmbDir->setURL(dir); +} + +bool GrepTool::eventFilter( QObject *o, QEvent *e ) +{ + if ( e->type() == QEvent::KeyPress && ( + ((QKeyEvent*)e)->key() == Qt::Key_Return || + ((QKeyEvent*)e)->key() == Qt::Key_Enter ) ) + { + slotSearch(); + return true; + } + + return QWidget::eventFilter( o, e ); +} + +void GrepTool::focusInEvent ( QFocusEvent * ev ) +{ + QWidget::focusInEvent(ev); + if (m_fixFocus) { + m_fixFocus = false; + cmbPattern->setFocus(); + } +} + +void GrepTool::showEvent( QShowEvent * ev ) +{ + QWidget::showEvent(ev); + m_fixFocus = true; +} + +#include "kategrepdialog.moc" diff --git a/kate/app/kategrepdialog.h b/kate/app/kategrepdialog.h new file mode 100644 index 000000000..5ed3b2b69 --- /dev/null +++ b/kate/app/kategrepdialog.h @@ -0,0 +1,97 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _GREPDIALOG_H_ +#define _GREPDIALOG_H_ + +#include +#include + +class QLineEdit; +class KComboBox; +class QCheckBox; +class QListBox; +class KPushButton; +class QLabel; +class KProcess; +class KConfig; +class KURLRequester; +class QEvent; + +class GrepTool : public QWidget +{ + Q_OBJECT + +public: + GrepTool(QWidget *parent, const char *name=0); + ~GrepTool(); + + // only updates if the dir you give to it differs from the last one given to it ! + void updateDirName(const QString &); + + void setDirName(const QString &); + + +signals: + void itemSelected(const QString &abs_filename, int line); + +public slots: + void slotSearchFor(const QString &pattern); + +protected: + bool eventFilter( QObject *, QEvent * ); + void focusInEvent ( QFocusEvent * ); + void showEvent( QShowEvent * ); + bool m_fixFocus; + +private slots: + void templateActivated(int index); + void childExited(); + void receivedOutput(KProcess *proc, char *buffer, int buflen); + void receivedErrOutput(KProcess *proc, char *buffer, int buflen); + void itemSelected(const QString&); + void slotSearch(); + void slotCancel(); + void slotClear(); + void patternTextChanged( const QString &); +private: + void processOutput(); + void finish(); + + QLineEdit *leTemplate; + KComboBox *cmbFiles, *cmbPattern; + KURLRequester *cmbDir; + QCheckBox *cbRecursive; + QCheckBox *cbCasesensitive, *cbRegex; + QListBox *lbResult; + KPushButton *btnSearch, *btnClear; + KProcess *childproc; + QString buf; + QString errbuf; + KConfig* config; + QStringList lastSearchItems; + QStringList lastSearchPaths; + QStringList lastSearchFiles; + QString m_lastUpdatedDir; + QString m_workingDir; +}; + + +#endif diff --git a/kate/app/katemailfilesdialog.cpp b/kate/app/katemailfilesdialog.cpp new file mode 100644 index 000000000..03bd497df --- /dev/null +++ b/kate/app/katemailfilesdialog.cpp @@ -0,0 +1,112 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katemailfilesdialog.h" +#include "katemainwindow.h" +#include "kateviewmanager.h" +#include "katedocmanager.h" + +#include +#include +#include + +#include +#include +#include +#include + +/* a private check list item, that can store a Kate::Document*. */ +class KateDocCheckItem : public QCheckListItem { + public: + KateDocCheckItem( QListView *parent, const QString& text, Kate::Document *d ) + : QCheckListItem( parent, text, QCheckListItem::CheckBox ), mdoc(d) {}; + Kate::Document *doc() { return mdoc; }; + private: + Kate::Document *mdoc; +}; + +/////////////////////////////////////////////////////////////////////////// +// KateMailDialog implementation +/////////////////////////////////////////////////////////////////////////// +KateMailDialog::KateMailDialog( QWidget *parent, KateMainWindow *mainwin ) + : KDialogBase( parent, "kate mail dialog", true, i18n("Email Files"), + Ok|Cancel|User1, Ok, false, + KGuiItem( i18n("&Show All Documents >>") ) ), + mainWindow( mainwin ) +{ + setButtonGuiItem( KDialogBase::Ok, KGuiItem( i18n("&Mail..."), "mail_send") ); + mw = makeVBoxMainWidget(); + mw->installEventFilter( this ); + + lInfo = new QLabel( i18n( + "

Press Mail... to email the current document." + "

To select more documents to send, press Show All Documents >>."), mw ); + // TODO avoid untill needed - later + list = new KListView( mw ); + list->addColumn( i18n("Name") ); + list->addColumn( i18n("URL") ); + Kate::Document *currentDoc = mainWindow->viewManager()->activeView()->getDoc(); + uint n = KateDocManager::self()->documents(); + uint i = 0; + QCheckListItem *item; + while ( i < n ) { + Kate::Document *doc = KateDocManager::self()->document( i ); + if ( doc ) { + item = new KateDocCheckItem( list, doc->docName(), doc ); + item->setText( 1, doc->url().prettyURL() ); + if ( doc == currentDoc ) { + item->setOn( true ); + item->setSelected( true ); + } + } + i++; + } + list->hide(); + connect( this, SIGNAL(user1Clicked()), this, SLOT(slotShowButton()) ); + mw->setMinimumSize( lInfo->sizeHint() ); +} + +QPtrList KateMailDialog::selectedDocs() +{ + QPtrList l; + QListViewItem *item = list->firstChild(); + while ( item ) { + if ( ((KateDocCheckItem*)item)->isOn() ) + l.append( ((KateDocCheckItem*)item)->doc() ); + item = item->nextSibling(); + } + return l; +} + +void KateMailDialog::slotShowButton() +{ + if ( list->isVisible() ) { + setButtonText( User1, i18n("&Show All Documents >>") ); + list->hide(); + } + else { + list->show(); + setButtonText( User1, i18n("&Hide Document List <<") ); + lInfo->setText( i18n("Press Mail... to send selected documents") ); + + } + mw->setMinimumSize( QSize( lInfo->sizeHint().width(), mw->sizeHint().height()) ); + setMinimumSize( calculateSize( mw->minimumSize().width(), mw->sizeHint().height() ) ); + resize( width(), minimumHeight() ); +} +#include "katemailfilesdialog.moc" diff --git a/kate/app/katemailfilesdialog.h b/kate/app/katemailfilesdialog.h new file mode 100644 index 000000000..906cd99fa --- /dev/null +++ b/kate/app/katemailfilesdialog.h @@ -0,0 +1,59 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_MAILFILES_DIALOG_H_ +#define _KATE_MAILFILES_DIALOG_H_ + +#include + +#include +#include +#include + +class QString; +class QStringList; +class KateMainWindow; + +/** + This is a dialog for choosing which of the open files to mail. + The current file is selected by default, the dialog can be expanded + to display all the files if required. + +*/ +class KateMailDialog : public KDialogBase { + Q_OBJECT + public: + KateMailDialog( QWidget *parent=0, + KateMainWindow *mainwin=0 ); + ~KateMailDialog() {}; + + /** + @return a list of the selected docs. + */ + QPtrList selectedDocs(); + private slots: + void slotShowButton(); + private: + class KListView *list; + class QLabel *lInfo; + KateMainWindow *mainWindow; + class QVBox *mw; + +}; + +#endif // _KATE_MAILFILES_DIALOG_H_ diff --git a/kate/app/katemain.cpp b/kate/app/katemain.cpp new file mode 100644 index 000000000..892f49271 --- /dev/null +++ b/kate/app/katemain.cpp @@ -0,0 +1,256 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateapp.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +static KCmdLineOptions options[] = +{ + { "s", 0 , 0 }, + { "start ", I18N_NOOP("Start Kate with a given session"), 0 }, + { "u", 0, 0 }, + { "use", I18N_NOOP("Use a already running kate instance (if possible)"), 0 }, + { "p", 0, 0 }, + { "pid ", I18N_NOOP("Only try to reuse kate instance with this pid"), 0 }, + { "e", 0, 0 }, + { "encoding ", I18N_NOOP("Set encoding for the file to open"), 0 }, + { "l", 0, 0 }, + { "line ", I18N_NOOP("Navigate to this line"), 0 }, + { "c", 0, 0 }, + { "column ", I18N_NOOP("Navigate to this column"), 0 }, + { "i", 0, 0 }, + { "stdin", I18N_NOOP("Read the contents of stdin"), 0 }, + { "+[URL]", I18N_NOOP("Document to open"), 0 }, + KCmdLineLastOption +}; + +extern "C" KDE_EXPORT int kdemain( int argc, char **argv ) +{ + // here we go, construct the Kate version + QString kateVersion = KateApp::kateVersion(); + + KAboutData aboutData ("kate", I18N_NOOP("Kate"), kateVersion.latin1(), + I18N_NOOP( "Kate - Advanced Text Editor" ), KAboutData::License_LGPL_V2, + I18N_NOOP( "(c) 2000-2005 The Kate Authors" ), 0, "http://kate.kde.org"); + + aboutData.addAuthor ("Christoph Cullmann", I18N_NOOP("Maintainer"), "cullmann@kde.org", "http://www.babylon2k.de"); + aboutData.addAuthor ("Anders Lund", I18N_NOOP("Core Developer"), "anders@alweb.dk", "http://www.alweb.dk"); + aboutData.addAuthor ("Joseph Wenninger", I18N_NOOP("Core Developer"), "jowenn@kde.org","http://stud3.tuwien.ac.at/~e9925371"); + aboutData.addAuthor ("Hamish Rodda",I18N_NOOP("Core Developer"), "rodda@kde.org"); + aboutData.addAuthor ("Waldo Bastian", I18N_NOOP( "The cool buffersystem" ), "bastian@kde.org" ); + aboutData.addAuthor ("Charles Samuels", I18N_NOOP("The Editing Commands"), "charles@kde.org"); + aboutData.addAuthor ("Matt Newell", I18N_NOOP("Testing, ..."), "newellm@proaxis.com"); + aboutData.addAuthor ("Michael Bartl", I18N_NOOP("Former Core Developer"), "michael.bartl1@chello.at"); + aboutData.addAuthor ("Michael McCallum", I18N_NOOP("Core Developer"), "gholam@xtra.co.nz"); + aboutData.addAuthor ("Jochen Wilhemly", I18N_NOOP( "KWrite Author" ), "digisnap@cs.tu-berlin.de" ); + aboutData.addAuthor ("Michael Koch",I18N_NOOP("KWrite port to KParts"), "koch@kde.org"); + aboutData.addAuthor ("Christian Gebauer", 0, "gebauer@kde.org" ); + aboutData.addAuthor ("Simon Hausmann", 0, "hausmann@kde.org" ); + aboutData.addAuthor ("Glen Parker",I18N_NOOP("KWrite Undo History, Kspell integration"), "glenebob@nwlink.com"); + aboutData.addAuthor ("Scott Manson",I18N_NOOP("KWrite XML Syntax highlighting support"), "sdmanson@alltel.net"); + aboutData.addAuthor ("John Firebaugh",I18N_NOOP("Patches and more"), "jfirebaugh@kde.org"); + aboutData.addAuthor ("Dominik Haumann", I18N_NOOP("Developer & Highlight wizard"), "dhdev@gmx.de"); + + aboutData.addCredit ("Matteo Merli",I18N_NOOP("Highlighting for RPM Spec-Files, Perl, Diff and more"), "merlim@libero.it"); + aboutData.addCredit ("Rocky Scaletta",I18N_NOOP("Highlighting for VHDL"), "rocky@purdue.edu"); + aboutData.addCredit ("Yury Lebedev",I18N_NOOP("Highlighting for SQL"),""); + aboutData.addCredit ("Chris Ross",I18N_NOOP("Highlighting for Ferite"),""); + aboutData.addCredit ("Nick Roux",I18N_NOOP("Highlighting for ILERPG"),""); + aboutData.addCredit ("Carsten Niehaus", I18N_NOOP("Highlighting for LaTeX"),""); + aboutData.addCredit ("Per Wigren", I18N_NOOP("Highlighting for Makefiles, Python"),""); + aboutData.addCredit ("Jan Fritz", I18N_NOOP("Highlighting for Python"),""); + aboutData.addCredit ("Daniel Naber","",""); + aboutData.addCredit ("Roland Pabel",I18N_NOOP("Highlighting for Scheme"),""); + aboutData.addCredit ("Cristi Dumitrescu",I18N_NOOP("PHP Keyword/Datatype list"),""); + aboutData.addCredit ("Carsten Pfeiffer", I18N_NOOP("Very nice help"), ""); + aboutData.addCredit (I18N_NOOP("All people who have contributed and I have forgotten to mention"),"",""); + + aboutData.setTranslator(I18N_NOOP2("NAME OF TRANSLATORS","Your names"), I18N_NOOP2("EMAIL OF TRANSLATORS","Your emails")); + + // command line args init and co + KCmdLineArgs::init (argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions (options); + KCmdLineArgs::addTempFileOption(); + KateApp::addCmdLineOptions (); + + // get our command line args ;) + KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); + + // now, first try to contact running kate instance if needed + if ( args->isSet("use") || (::getenv("KATE_PID")!=0) ) + { + DCOPClient client; + client.attach (); + + // get all attached clients ;) + QCStringList allClients = client.registeredApplications(); + + // search for a kate app client, use the first found + QCString kateApp; + + if ( args->isSet("start") ) + { + for (unsigned int i=0; i < allClients.count(); i++) + { + if (allClients[i] == "kate" || allClients[i].left(5) == "kate-") + { + DCOPRef ref( allClients[i], "KateApplication" ); + QString s = ref.call( "session" ); + if ( QString(args->getOption("start")) == s ) + { + kateApp = allClients[i]; + break; + } + } + } + } + else if ( (args->isSet("pid")) || (::getenv("KATE_PID") !=0 ) ) + { + QCString tryApp; + if ( args->isSet("pid") ) + tryApp = args->getOption("pid"); + else + tryApp = ::getenv("KATE_PID"); + + if ( client.isApplicationRegistered( tryApp.prepend("kate-") ) ) + kateApp = tryApp; + } + else + { + for (unsigned int i=0; i < allClients.count(); ++i) + { + if (allClients[i] == "kate" || allClients[i].left(5) == "kate-") + { + kateApp = allClients[i]; + break; + } + } + } + + // found a matching kate client ;) + if (!kateApp.isEmpty()) + { + kdDebug () << "kate app: " << kateApp << endl; + // make kdeinit happy + client.registerAs( "kate" ); + + DCOPRef kRef (kateApp, "KateApplication"); + + if (args->isSet ("start")) + kRef.call( "activateSession", QString (args->getOption("start")) ); + + QString enc = args->isSet("encoding") ? args->getOption("encoding") : QCString(""); + + bool tempfileSet = KCmdLineArgs::isTempFileSet(); + + for (int z=0; zcount(); z++) + kRef.call( "openURL", args->url(z), enc, tempfileSet ); + + if( args->isSet( "stdin" ) ) + { + QTextIStream input(stdin); + + // set chosen codec + QTextCodec *codec = args->isSet("encoding") ? QTextCodec::codecForName(args->getOption("encoding")) : 0; + + if (codec) + input.setCodec (codec); + + QString line; + QString text; + + do + { + line = input.readLine(); + text.append( line + "\n" ); + } while( !line.isNull() ); + + kRef.call( "openInput", text ); + } + + int line = 0; + int column = 0; + bool nav = false; + + if (args->isSet ("line")) + { + line = args->getOption ("line").toInt(); + nav = true; + } + + if (args->isSet ("column")) + { + column = args->getOption ("column").toInt(); + nav = true; + } + + if (nav) + kRef.call( "setCursor", line, column ); + + // since the user tried to open a document, let us assume [s]he + // wants to see that document. + // ### what to do about the infamous focus stealing prevention? + uint mwn = kRef.call("activeMainWindowNumber"); + QCString smwn; + DCOPRef wRef( kateApp, QCString( "__KateMainWindow#") + smwn.setNum(mwn) ); + if ( wRef.call("minimized") ) + { + if ( wRef.call( "maximized" ) ) + wRef.call( "maximize" ); + else + wRef.call("restore"); + } + wRef.call( "raise" ); + + // stop startup notification + KStartupInfo::appStarted( ); + + return 0; + } + } + + // construct the real kate app object ;) + KateApp app (args); + + // app execution should already end :) + if (app.shouldExit()) + { + return 0; + } + + // execute ourself ;) + return app.exec(); +} + +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/app/katemain.h b/kate/app/katemain.h new file mode 100644 index 000000000..7d2f65da9 --- /dev/null +++ b/kate/app/katemain.h @@ -0,0 +1,70 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_MAIN_H__ +#define __KATE_MAIN_H__ + +#include + +class QComboBox; +class QDateTime; +class QEvent; +class QFileInfo; +class QGridLayout; +class QLabel; +class QListBox; +class QObject; +class QPixmap; +class QVBoxLayout; +class QString; +class QWidgetStack; + +class KAction; +class KActionMenu; +class KConfig; +class KDirOperator; +class KEditToolbar; +class KFileViewItem; +class KHistoryCombo; +class KLineEdit; +class KListBox; +class KProcess; +class KPushButton; +class KRecentFilesAction; +class KSelectAction; +class KStatusBar; +class KToggleAction; +class KURL; +class KURLComboBox; + +class KateApp; +class KateConfigDlg; +class KateConsole; +class KateDocManager; +class KateFileList; +class KateFileSelector; +class KateMainWindow; +class KatePluginIface; +class KatePluginManager; +class KateSidebar; +class KateViewManager; +class KateViewSpace; + +#endif diff --git a/kate/app/katemainwindow.cpp b/kate/app/katemainwindow.cpp new file mode 100644 index 000000000..772f63339 --- /dev/null +++ b/kate/app/katemainwindow.cpp @@ -0,0 +1,854 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +//BEGIN Includes +#include "katemainwindow.h" +#include "katemainwindow.moc" + +#include "kateconfigdialog.h" +#include "kateconsole.h" +#include "katedocmanager.h" +#include "katepluginmanager.h" +#include "kateconfigplugindialogpage.h" +#include "kateviewmanager.h" +#include "kateapp.h" +#include "katefileselector.h" +#include "katefilelist.h" +#include "kategrepdialog.h" +#include "katemailfilesdialog.h" +#include "katemainwindowiface.h" +#include "kateexternaltools.h" +#include "katesavemodifieddialog.h" +#include "katemwmodonhddialog.h" +#include "katesession.h" +#include "katetabwidget.h" + +#include "../interfaces/mainwindow.h" +#include "../interfaces/toolviewmanager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +//END + +uint KateMainWindow::uniqueID = 1; + +KateMainWindow::KateMainWindow (KConfig *sconfig, const QString &sgroup) + : KateMDI::MainWindow (0,(QString("__KateMainWindow#%1").arg(uniqueID)).latin1()) +{ + // first the very important id + myID = uniqueID; + uniqueID++; + + m_modignore = false; + + console = 0; + greptool = 0; + + // here we go, set some usable default sizes + if (!initialGeometrySet()) + { + int scnum = QApplication::desktop()->screenNumber(parentWidget()); + QRect desk = QApplication::desktop()->screenGeometry(scnum); + + QSize size; + + // try to load size + if (sconfig) + { + sconfig->setGroup (sgroup); + size.setWidth (sconfig->readNumEntry( QString::fromLatin1("Width %1").arg(desk.width()), 0 )); + size.setHeight (sconfig->readNumEntry( QString::fromLatin1("Height %1").arg(desk.height()), 0 )); + } + + // if thats fails, try to reuse size + if (size.isEmpty()) + { + // first try to reuse size known from current or last created main window ;=) + if (KateApp::self()->mainWindows () > 0) + { + KateMainWindow *win = KateApp::self()->activeMainWindow (); + + if (!win) + win = KateApp::self()->mainWindow (KateApp::self()->mainWindows ()-1); + + size = win->size(); + } + else // now fallback to hard defaults ;) + { + // first try global app config + KateApp::self()->config()->setGroup ("MainWindow"); + size.setWidth (KateApp::self()->config()->readNumEntry( QString::fromLatin1("Width %1").arg(desk.width()), 0 )); + size.setHeight (KateApp::self()->config()->readNumEntry( QString::fromLatin1("Height %1").arg(desk.height()), 0 )); + + if (size.isEmpty()) + size = QSize (kMin (700, desk.width()), kMin(480, desk.height())); + } + + resize (size); + } + } + + // start session restore if needed + startRestore (sconfig, sgroup); + + m_mainWindow = new Kate::MainWindow (this); + m_toolViewManager = new Kate::ToolViewManager (this); + + m_dcop = new KateMainWindowDCOPIface (this); + + // setup the most important widgets + setupMainWindow(); + + // setup the actions + setupActions(); + + setStandardToolBarMenuEnabled( true ); + setXMLFile( "kateui.rc" ); + createShellGUI ( true ); + + KatePluginManager::self()->enableAllPluginsGUI (this); + + if ( KateApp::self()->authorize("shell_access") ) + Kate::Document::registerCommand(KateExternalToolsCommand::self()); + + // connect documents menu aboutToshow + documentMenu = (QPopupMenu*)factory()->container("documents", this); + connect(documentMenu, SIGNAL(aboutToShow()), this, SLOT(documentMenuAboutToShow())); + + // caption update + for (uint i = 0; i < KateDocManager::self()->documents(); i++) + slotDocumentCreated (KateDocManager::self()->document(i)); + + connect(KateDocManager::self(),SIGNAL(documentCreated(Kate::Document *)),this,SLOT(slotDocumentCreated(Kate::Document *))); + + readOptions(); + + if (sconfig) + m_viewManager->restoreViewConfiguration (sconfig, sgroup); + + finishRestore (); + + setAcceptDrops(true); +} + +KateMainWindow::~KateMainWindow() +{ + // first, save our fallback window size ;) + KateApp::self()->config()->setGroup ("MainWindow"); + saveWindowSize (KateApp::self()->config()); + + // save other options ;=) + saveOptions(); + + KateApp::self()->removeMainWindow (this); + + KatePluginManager::self()->disableAllPluginsGUI (this); + + delete m_dcop; +} + +void KateMainWindow::setupMainWindow () +{ + setToolViewStyle( KMultiTabBar::KDEV3ICON ); + + m_tabWidget = new KateTabWidget (centralWidget()); + + m_viewManager = new KateViewManager (this); + + KateMDI::ToolView *ft = createToolView("kate_filelist", KMultiTabBar::Left, SmallIcon("kmultiple"), i18n("Documents")); + filelist = new KateFileList (this, m_viewManager, ft, "filelist"); + filelist->readConfig(KateApp::self()->config(), "Filelist"); + + KateMDI::ToolView *t = createToolView("kate_fileselector", KMultiTabBar::Left, SmallIcon("fileopen"), i18n("Filesystem Browser")); + fileselector = new KateFileSelector( this, m_viewManager, t, "operator"); + connect(fileselector->dirOperator(),SIGNAL(fileSelected(const KFileItem*)),this,SLOT(fileSelected(const KFileItem*))); + + // ONLY ALLOW SHELL ACCESS IF ALLOWED ;) + if (KateApp::self()->authorize("shell_access")) + { + t = createToolView("kate_greptool", KMultiTabBar::Bottom, SmallIcon("filefind"), i18n("Find in Files") ); + greptool = new GrepTool( t, "greptool" ); + connect(greptool, SIGNAL(itemSelected(const QString &,int)), this, SLOT(slotGrepToolItemSelected(const QString &,int))); + connect(t,SIGNAL(visibleChanged(bool)),this, SLOT(updateGrepDir (bool))); + // WARNING HACK - anders: showing the greptool seems to make the menu accels work + greptool->show(); + + t = createToolView("kate_console", KMultiTabBar::Bottom, SmallIcon("konsole"), i18n("Terminal")); + console = new KateConsole (this, t); + } + + // make per default the filelist visible, if we are in session restore, katemdi will skip this ;) + showToolView (ft); +} + +void KateMainWindow::setupActions() +{ + KAction *a; + + KStdAction::openNew( m_viewManager, SLOT( slotDocumentNew() ), actionCollection(), "file_new" )->setWhatsThis(i18n("Create a new document")); + KStdAction::open( m_viewManager, SLOT( slotDocumentOpen() ), actionCollection(), "file_open" )->setWhatsThis(i18n("Open an existing document for editing")); + + fileOpenRecent = KStdAction::openRecent (m_viewManager, SLOT(openURL (const KURL&)), actionCollection()); + fileOpenRecent->setWhatsThis(i18n("This lists files which you have opened recently, and allows you to easily open them again.")); + + a=new KAction( i18n("Save A&ll"),"save_all", CTRL+Key_L, KateDocManager::self(), SLOT( saveAll() ), actionCollection(), "file_save_all" ); + a->setWhatsThis(i18n("Save all open, modified documents to disk.")); + + KStdAction::close( m_viewManager, SLOT( slotDocumentClose() ), actionCollection(), "file_close" )->setWhatsThis(i18n("Close the current document.")); + + a=new KAction( i18n( "Clos&e All" ), 0, this, SLOT( slotDocumentCloseAll() ), actionCollection(), "file_close_all" ); + a->setWhatsThis(i18n("Close all open documents.")); + + KStdAction::mail( this, SLOT(slotMail()), actionCollection() )->setWhatsThis(i18n("Send one or more of the open documents as email attachments.")); + + KStdAction::quit( this, SLOT( slotFileQuit() ), actionCollection(), "file_quit" )->setWhatsThis(i18n("Close this window")); + + a=new KAction(i18n("&New Window"), "window_new", 0, this, SLOT(newWindow()), actionCollection(), "view_new_view"); + a->setWhatsThis(i18n("Create a new Kate view (a new window with the same document list).")); + + if ( KateApp::self()->authorize("shell_access") ) + { + externalTools = new KateExternalToolsMenuAction( i18n("External Tools"), actionCollection(), "tools_external", this ); + externalTools->setWhatsThis( i18n("Launch external helper applications") ); + } + + KToggleAction* showFullScreenAction = KStdAction::fullScreen( 0, 0, actionCollection(),this); + connect( showFullScreenAction,SIGNAL(toggled(bool)), this,SLOT(slotFullScreen(bool))); + + documentOpenWith = new KActionMenu(i18n("Open W&ith"), actionCollection(), "file_open_with"); + documentOpenWith->setWhatsThis(i18n("Open the current document using another application registered for its file type, or an application of your choice.")); + connect(documentOpenWith->popupMenu(), SIGNAL(aboutToShow()), this, SLOT(mSlotFixOpenWithMenu())); + connect(documentOpenWith->popupMenu(), SIGNAL(activated(int)), this, SLOT(slotOpenWithMenuAction(int))); + + a=KStdAction::keyBindings(this, SLOT(editKeys()), actionCollection()); + a->setWhatsThis(i18n("Configure the application's keyboard shortcut assignments.")); + + a=KStdAction::configureToolbars(this, SLOT(slotEditToolbars()), actionCollection()); + a->setWhatsThis(i18n("Configure which items should appear in the toolbar(s).")); + + KAction* settingsConfigure = KStdAction::preferences(this, SLOT(slotConfigure()), actionCollection(), "settings_configure"); + settingsConfigure->setWhatsThis(i18n("Configure various aspects of this application and the editing component.")); + + // pipe to terminal action + if (KateApp::self()->authorize("shell_access")) + new KAction(i18n("&Pipe to Console"), "pipe", 0, console, SLOT(slotPipeToConsole()), actionCollection(), "tools_pipe_to_terminal"); + + // tip of the day :-) + KStdAction::tipOfDay( this, SLOT( tipOfTheDay() ), actionCollection() )->setWhatsThis(i18n("This shows useful tips on the use of this application.")); + + if (KatePluginManager::self()->pluginList().count() > 0) + { + a=new KAction(i18n("&Plugins Handbook"), 0, this, SLOT(pluginHelp()), actionCollection(), "help_plugins_contents"); + a->setWhatsThis(i18n("This shows help files for various available plugins.")); + } + + connect(m_viewManager,SIGNAL(viewChanged()),this,SLOT(slotWindowActivated())); + connect(m_viewManager,SIGNAL(viewChanged()),this,SLOT(slotUpdateOpenWith())); + + slotWindowActivated (); + + // session actions + new KAction(i18n("Menu entry Session->New", "&New"), "filenew", 0, KateSessionManager::self(), SLOT(sessionNew()), actionCollection(), "sessions_new"); + new KAction(i18n("&Open..."), "fileopen", 0, KateSessionManager::self(), SLOT(sessionOpen()), actionCollection(), "sessions_open"); + new KAction(i18n("&Save"), "filesave", 0, KateSessionManager::self(), SLOT(sessionSave()), actionCollection(), "sessions_save"); + new KAction(i18n("Save &As..."), "filesaveas", 0, KateSessionManager::self(), SLOT(sessionSaveAs()), actionCollection(), "sessions_save_as"); + new KAction(i18n("&Manage..."), "view_choose", 0, KateSessionManager::self(), SLOT(sessionManage()), actionCollection(), "sessions_manage"); + + // quick open menu ;) + new KateSessionsAction (i18n("&Quick Open"), actionCollection(), "sessions_list"); +} + +KateTabWidget *KateMainWindow::tabWidget () +{ + return m_tabWidget; +} + +void KateMainWindow::slotDocumentCloseAll() { + if (queryClose_internal()) + KateDocManager::self()->closeAllDocuments(false); +} + +bool KateMainWindow::queryClose_internal() { + uint documentCount=KateDocManager::self()->documents(); + + if ( ! showModOnDiskPrompt() ) + return false; + + QPtrList modifiedDocuments=KateDocManager::self()->modifiedDocumentList(); + bool shutdown=(modifiedDocuments.count()==0); + + if (!shutdown) { + shutdown=KateSaveModifiedDialog::queryClose(this,modifiedDocuments); + } + + if ( KateDocManager::self()->documents() > documentCount ) { + KMessageBox::information (this, + i18n ("New file opened while trying to close Kate, closing aborted."), + i18n ("Closing Aborted")); + shutdown=false; + } + + return shutdown; +} + +/** + * queryClose(), take care that after the last mainwindow the stuff is closed + */ +bool KateMainWindow::queryClose() +{ + // session saving, can we close all views ? + // just test, not close them actually + if (KateApp::self()->sessionSaving()) + { + return queryClose_internal (); + } + + // normal closing of window + // allow to close all windows until the last without restrictions + if ( KateApp::self()->mainWindows () > 1 ) + return true; + + // last one: check if we can close all documents, try run + // and save docs if we really close down ! + if ( queryClose_internal () ) + { + KateApp::self()->sessionManager()->saveActiveSession(true, true); + + // detach the dcopClient + KateApp::self()->dcopClient()->detach(); + + return true; + } + + return false; +} + +void KateMainWindow::newWindow () +{ + KateApp::self()->newMainWindow (); +} + +void KateMainWindow::slotEditToolbars() +{ + saveMainWindowSettings( KateApp::self()->config(), "MainWindow" ); + KEditToolbar dlg( factory() ); + connect( &dlg, SIGNAL(newToolbarConfig()), this, SLOT(slotNewToolbarConfig()) ); + dlg.exec(); +} + +void KateMainWindow::slotNewToolbarConfig() +{ + applyMainWindowSettings( KateApp::self()->config(), "MainWindow" ); +} + +void KateMainWindow::slotFileQuit() +{ + KateApp::self()->shutdownKate (this); +} + +void KateMainWindow::readOptions () +{ + KConfig *config = KateApp::self()->config (); + + config->setGroup("General"); + syncKonsole = config->readBoolEntry("Sync Konsole", true); + modNotification = config->readBoolEntry("Modified Notification", false); + KateDocManager::self()->setSaveMetaInfos(config->readBoolEntry("Save Meta Infos", true)); + KateDocManager::self()->setDaysMetaInfos(config->readNumEntry("Days Meta Infos", 30)); + + m_viewManager->setShowFullPath(config->readBoolEntry("Show Full Path in Title", false)); + + fileOpenRecent->loadEntries(config, "Recent Files"); + + fileselector->readConfig(config, "fileselector"); +} + +void KateMainWindow::saveOptions () +{ + KConfig *config = KateApp::self()->config (); + + config->setGroup("General"); + + if (console) + config->writeEntry("Show Console", console->isVisible()); + else + config->writeEntry("Show Console", false); + + config->writeEntry("Save Meta Infos", KateDocManager::self()->getSaveMetaInfos()); + + config->writeEntry("Days Meta Infos", KateDocManager::self()->getDaysMetaInfos()); + + config->writeEntry("Show Full Path in Title", m_viewManager->getShowFullPath()); + + config->writeEntry("Sync Konsole", syncKonsole); + + fileOpenRecent->saveEntries(config, "Recent Files"); + + fileselector->writeConfig(config, "fileselector"); + + filelist->writeConfig(config, "Filelist"); +} + +void KateMainWindow::slotWindowActivated () +{ + if (m_viewManager->activeView()) + { + if (console && syncKonsole) + { + static QString path; + QString newPath = m_viewManager->activeView()->getDoc()->url().directory(); + + if ( newPath != path ) + { + path = newPath; + console->cd (KURL( path )); + } + } + + updateCaption (m_viewManager->activeView()->getDoc()); + } + + // update proxy + centralWidget()->setFocusProxy (m_viewManager->activeView()); +} + +void KateMainWindow::slotUpdateOpenWith() +{ + if (m_viewManager->activeView()) + documentOpenWith->setEnabled(!m_viewManager->activeView()->document()->url().isEmpty()); + else + documentOpenWith->setEnabled(false); +} + +void KateMainWindow::documentMenuAboutToShow() +{ + // remove documents + while (documentMenu->count() > 3) + documentMenu->removeItemAt (3); + + QListViewItem * item = filelist->firstChild(); + while( item ) { + // would it be saner to use the screen width as a limit that some random number?? + QString name = KStringHandler::rsqueeze( ((KateFileListItem *)item)->document()->docName(), 150 ); + Kate::Document* doc = ((KateFileListItem *)item)->document(); + documentMenu->insertItem ( + doc->isModified() ? i18n("'document name [*]', [*] means modified", "%1 [*]").arg(name) : name, + m_viewManager, SLOT (activateView (int)), 0, + ((KateFileListItem *)item)->documentNumber () ); + + item = item->nextSibling(); + } + if (m_viewManager->activeView()) + documentMenu->setItemChecked ( m_viewManager->activeView()->getDoc()->documentNumber(), true); +} + +void KateMainWindow::slotGrepToolItemSelected(const QString &filename,int linenumber) +{ + KURL fileURL; + fileURL.setPath( filename ); + m_viewManager->openURL( fileURL ); + if ( m_viewManager->activeView() == 0 ) return; + m_viewManager->activeView()->gotoLineNumber( linenumber ); + raise(); + setActiveWindow(); +} + +void KateMainWindow::dragEnterEvent( QDragEnterEvent *event ) +{ + event->accept(KURLDrag::canDecode(event)); +} + +void KateMainWindow::dropEvent( QDropEvent *event ) +{ + slotDropEvent(event); +} + +void KateMainWindow::slotDropEvent( QDropEvent * event ) +{ + KURL::List textlist; + if (!KURLDrag::decode(event, textlist)) return; + + for (KURL::List::Iterator i=textlist.begin(); i != textlist.end(); ++i) + { + m_viewManager->openURL (*i); + } +} + +void KateMainWindow::editKeys() +{ + KKeyDialog dlg ( false, this ); + + QPtrList clients = guiFactory()->clients(); + + for( QPtrListIterator it( clients ); it.current(); ++it ) + dlg.insert ( (*it)->actionCollection(), (*it)->instance()->aboutData()->programName() ); + + dlg.insert( externalTools->actionCollection(), i18n("External Tools") ); + + dlg.configure(); + + QPtrList l=KateDocManager::self()->documentList(); + for (uint i=0;ireloadXML(); + QPtrList l1=l.at(i)->views ();//KTextEditor::Document + for (uint i1=0;i1reloadXML(); +// kdDebug(13001)<<"reloading Keysettings for view "<actionCollection()->writeShortcutSettings( "Shortcuts", new KConfig("externaltools", false, false, "appdata") ); +} + +void KateMainWindow::openURL (const QString &name) +{ + m_viewManager->openURL (KURL(name)); +} + +void KateMainWindow::slotConfigure() +{ + if (!m_viewManager->activeView()) + return; + + KateConfigDialog* dlg = new KateConfigDialog (this, m_viewManager->activeView()); + dlg->exec(); + + delete dlg; +} + +KURL KateMainWindow::activeDocumentUrl() +{ + // anders: i make this one safe, as it may be called during + // startup (by the file selector) + Kate::View *v = m_viewManager->activeView(); + if ( v ) + return v->getDoc()->url(); + return KURL(); +} + +void KateMainWindow::fileSelected(const KFileItem * /*file*/) +{ + const KFileItemList *list=fileselector->dirOperator()->selectedItems(); + KFileItem *tmp; + for (KFileItemListIterator it(*list); (tmp = it.current()); ++it) + { + m_viewManager->openURL(tmp->url()); + fileselector->dirOperator()->view()->setSelected(tmp,false); + } +} + +// TODO make this work +void KateMainWindow::mSlotFixOpenWithMenu() +{ + //kdDebug(13001)<<"13000"<<"fixing open with menu"<popupMenu()->clear(); + // get a list of appropriate services. + KMimeType::Ptr mime = KMimeType::findByURL( m_viewManager->activeView()->getDoc()->url() ); + //kdDebug(13001)<<"13000"<<"url: "<activeView()->getDoc()->url().prettyURL()<<"mime type: "<name()<query(mime->name(), "Type == 'Application'"); + // for each one, insert a menu item... + for(KTrader::OfferList::Iterator it = offers.begin(); it != offers.end(); ++it) { + if ((*it)->name() == "Kate") continue; + documentOpenWith->popupMenu()->insertItem( SmallIcon( (*it)->icon() ), (*it)->name() ); + } + // append "Other..." to call the KDE "open with" dialog. + documentOpenWith->popupMenu()->insertItem(i18n("&Other...")); +} + +void KateMainWindow::slotOpenWithMenuAction(int idx) +{ + KURL::List list; + list.append( m_viewManager->activeView()->getDoc()->url() ); + QString appname = documentOpenWith->popupMenu()->text(idx); + + appname = appname.remove('&'); //Remove a possible accelerator ... otherwise the application might not get found. + if ( appname.compare(i18n("Other...")) == 0 ) { + // display "open with" dialog + KOpenWithDlg dlg(list); + if (dlg.exec()) + KRun::run(*dlg.service(), list); + return; + } + + QString qry = QString("((Type == 'Application') and (Name == '%1'))").arg( appname.latin1() ); + KMimeType::Ptr mime = KMimeType::findByURL( m_viewManager->activeView()->getDoc()->url() ); + KTrader::OfferList offers = KTrader::self()->query(mime->name(), qry); + + if (!offers.isEmpty()) { + KService::Ptr app = offers.first(); + KRun::run(*app, list); + } + else + KMessageBox::error(this, i18n("Application '%1' not found!").arg(appname.latin1()), i18n("Application Not Found!")); +} + +void KateMainWindow::pluginHelp() +{ + KateApp::self()->invokeHelp (QString::null, "kate-plugins"); +} + +void KateMainWindow::slotMail() +{ + KateMailDialog *d = new KateMailDialog(this, this); + if ( ! d->exec() ) + { + delete d; + return; + } + QPtrList attDocs = d->selectedDocs(); + delete d; + // Check that all selected files are saved (or shouldn't be) + QStringList urls; // to atthatch + Kate::Document *doc; + QPtrListIterator it(attDocs); + for ( ; it.current(); ++it ) { + doc = it.current(); + if (!doc) continue; + if ( doc->url().isEmpty() ) { + // unsaved document. back out unless it gets saved + int r = KMessageBox::questionYesNo( this, + i18n("

The current document has not been saved, and " + "cannot be attached to an email message." + "

Do you want to save it and proceed?"), + i18n("Cannot Send Unsaved File"),KStdGuiItem::saveAs(),KStdGuiItem::cancel() ); + if ( r == KMessageBox::Yes ) { + Kate::View *v = (Kate::View*)doc->views().first(); + int sr = v->saveAs(); + if ( sr == Kate::View::SAVE_OK ) { ; + } + else { + if ( sr != Kate::View::SAVE_CANCEL ) // ERROR or RETRY(?) + KMessageBox::sorry( this, i18n("The file could not be saved. Please check " + "if you have write permission.") ); + continue; + } + } + else + continue; + } + if ( doc->isModified() ) { + // warn that document is modified and offer to save it before proceeding. + int r = KMessageBox::warningYesNoCancel( this, + i18n("

The current file:
%1
has been " + "modified. Modifications will not be available in the attachment." + "

Do you want to save it before sending it?").arg(doc->url().prettyURL()), + i18n("Save Before Sending?"), KStdGuiItem::save(), i18n("Do Not Save") ); + switch ( r ) { + case KMessageBox::Cancel: + continue; + case KMessageBox::Yes: + doc->save(); + if ( doc->isModified() ) { // read-only docs ends here, if modified. Hmm. + KMessageBox::sorry( this, i18n("The file could not be saved. Please check " + "if you have write permission.") ); + continue; + } + break; + default: + break; + } + } + // finally call the mailer + urls << doc->url().url(); + } // check selected docs done + if ( ! urls.count() ) + return; + KateApp::self()->invokeMailer( QString::null, // to + QString::null, // cc + QString::null, // bcc + QString::null, // subject + QString::null, // body + QString::null, // msgfile + urls // urls to atthatch + ); +} +void KateMainWindow::tipOfTheDay() +{ + KTipDialog::showTip( /*0*/this, QString::null, true ); +} + +void KateMainWindow::slotFullScreen(bool t) +{ + if (t) + showFullScreen(); + else + showNormal(); +} + +void KateMainWindow::updateGrepDir (bool visible) +{ + // grepdlg gets hidden + if (!visible) + return; + + if ( m_viewManager->activeView() ) + { + if ( m_viewManager->activeView()->getDoc()->url().isLocalFile() ) + { + greptool->updateDirName( m_viewManager->activeView()->getDoc()->url().directory() ); + } + } +} + +bool KateMainWindow::event( QEvent *e ) +{ + uint type = e->type(); + if ( type == QEvent::WindowActivate && modNotification ) + { + showModOnDiskPrompt(); + } + return KateMDI::MainWindow::event( e ); +} + +bool KateMainWindow::showModOnDiskPrompt() +{ + Kate::Document *doc; + + DocVector list( KateDocManager::self()->documents() ); + uint cnt = 0; + for( doc = KateDocManager::self()->firstDocument(); doc; doc = KateDocManager::self()->nextDocument() ) + { + if ( KateDocManager::self()->documentInfo( doc )->modifiedOnDisc ) + { + list.insert( cnt, doc ); + cnt++; + } + } + + if ( cnt && !m_modignore ) + { + list.resize( cnt ); + KateMwModOnHdDialog mhdlg( list, this ); + m_modignore = true; + bool res = mhdlg.exec(); + m_modignore = false; + + return res; + } + return true; +} + +void KateMainWindow::slotDocumentCreated (Kate::Document *doc) +{ + connect(doc,SIGNAL(modStateChanged(Kate::Document *)),this,SLOT(updateCaption(Kate::Document *))); + connect(doc,SIGNAL(nameChanged(Kate::Document *)),this,SLOT(updateCaption(Kate::Document *))); + connect(doc,SIGNAL(nameChanged(Kate::Document *)),this,SLOT(slotUpdateOpenWith())); + + updateCaption (doc); +} + +void KateMainWindow::updateCaption (Kate::Document *doc) +{ + if (!m_viewManager->activeView()) + { + setCaption ("", false); + return; + } + + if (!(m_viewManager->activeView()->getDoc() == doc)) + return; + + QString c; + if (m_viewManager->activeView()->getDoc()->url().isEmpty() || (!m_viewManager->getShowFullPath())) + { + c = m_viewManager->activeView()->getDoc()->docName(); + } + else + { + c = m_viewManager->activeView()->getDoc()->url().prettyURL(); + } + + QString sessName = KateApp::self()->sessionManager()->activeSession()->sessionName(); + if ( !sessName.isEmpty() ) + sessName = QString("%1: ").arg( sessName ); + + setCaption( sessName + KStringHandler::lsqueeze(c,64), + m_viewManager->activeView()->getDoc()->isModified()); +} + +void KateMainWindow::saveProperties(KConfig *config) +{ + QString grp=config->group(); + + saveSession(config, grp); + m_viewManager->saveViewConfiguration (config, grp); + + config->setGroup(grp); +} + +void KateMainWindow::readProperties(KConfig *config) +{ + QString grp=config->group(); + + startRestore(config, grp); + finishRestore (); + m_viewManager->restoreViewConfiguration (config, grp); + + config->setGroup(grp); +} + +void KateMainWindow::saveGlobalProperties( KConfig* sessionConfig ) +{ + KateDocManager::self()->saveDocumentList (sessionConfig); + + sessionConfig->setGroup("General"); + sessionConfig->writeEntry ("Last Session", KateApp::self()->sessionManager()->activeSession()->sessionFileRelative()); +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katemainwindow.h b/kate/app/katemainwindow.h new file mode 100644 index 000000000..d5a67f65b --- /dev/null +++ b/kate/app/katemainwindow.h @@ -0,0 +1,216 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_MAINWINDOW_H__ +#define __KATE_MAINWINDOW_H__ + +#include "katemain.h" +#include "katemdi.h" + +#include +#include + +#include + +#include + +class KateTabWidget; +class GrepTool; + +namespace Kate { + class MainWindow; + class ToolViewManager; +} + +class KFileItem; +class KRecentFilesAction; +class DCOPObject; + +class KateExternalToolsMenuAction; + +class KateMainWindow : public KateMDI::MainWindow, virtual public KParts::PartBase +{ + Q_OBJECT + + friend class KateConfigDialog; + friend class KateViewManager; + + public: + /** + * Construct the window and restore it's state from given config if any + * @param sconfig session config for this window, 0 if none + * @param sgroup session config group to use + */ + KateMainWindow (KConfig *sconfig, const QString &sgroup); + + /** + * Destruct the nice window + */ + ~KateMainWindow(); + + /** + * Accessor methodes for interface and child objects + */ + public: + Kate::MainWindow *mainWindow () { return m_mainWindow; } + Kate::ToolViewManager *toolViewManager () { return m_toolViewManager; } + + KateViewManager *viewManager () { return m_viewManager; } + + DCOPObject *dcopObject () { return m_dcop; } + + /** + * various methodes to get some little info out of this + */ + public: + /** Returns the URL of the current document. + * anders: I add this for use from the file selector. */ + KURL activeDocumentUrl(); + + uint mainWindowNumber () const { return myID; } + + /** + * Prompts the user for what to do with files that are modified on disk if any. + * This is optionally run when the window receives focus, and when the last + * window is closed. + * @return true if no documents are modified on disk, or all documents were + * handled by the dialog; otherwise (the dialog was canceled) false. + */ + bool showModOnDiskPrompt(); + + /** + * central tabwidget ;) + * @return tab widget + */ + KateTabWidget *tabWidget (); + + public: + void readProperties(KConfig *config); + void saveProperties(KConfig *config); + void saveGlobalProperties( KConfig* sessionConfig ); + + public: + bool queryClose_internal(); + + private: + void setupMainWindow(); + void setupActions(); + bool queryClose(); + + /** + * read some global options from katerc + */ + void readOptions(); + + /** + * save some global options to katerc + */ + void saveOptions(); + + void dragEnterEvent( QDragEnterEvent * ); + void dropEvent( QDropEvent * ); + + /** + * slots used for actions in the menus/toolbars + * or internal signal connections + */ + private slots: + void newWindow (); + + void slotConfigure(); + + void slotOpenWithMenuAction(int idx); + + void slotGrepToolItemSelected ( const QString &filename, int linenumber ); + void slotMail(); + + void slotFileQuit(); + void slotEditToolbars(); + void slotNewToolbarConfig(); + void slotWindowActivated (); + void slotUpdateOpenWith(); + void documentMenuAboutToShow(); + void slotDropEvent(QDropEvent *); + void editKeys(); + void mSlotFixOpenWithMenu(); + + void fileSelected(const KFileItem *file); + + void tipOfTheDay(); + + /* to update the caption */ + void slotDocumentCreated (Kate::Document *doc); + void updateCaption (Kate::Document *doc); + + void pluginHelp (); + void slotFullScreen(bool); + + public: + void openURL (const QString &name=0L); + + private slots: + void updateGrepDir (bool visible); + + protected: + bool event( QEvent * ); + + private slots: + void slotDocumentCloseAll(); + + private: + static uint uniqueID; + uint myID; + + Kate::MainWindow *m_mainWindow; + Kate::ToolViewManager *m_toolViewManager; + + bool syncKonsole; + bool modNotification; + + DCOPObject *m_dcop; + + // console + KateConsole *console; + + // management items + KateViewManager *m_viewManager; + + KRecentFilesAction *fileOpenRecent; + + KateFileList *filelist; + KateFileSelector *fileselector; + + KActionMenu* documentOpenWith; + + QPopupMenu *documentMenu; + + KToggleAction* settingsShowFilelist; + KToggleAction* settingsShowFileselector; + + KateExternalToolsMenuAction *externalTools; + GrepTool * greptool; + bool m_modignore, m_grrr; + + KateTabWidget *m_tabWidget; +}; + +#endif + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katemainwindowiface.cpp b/kate/app/katemainwindowiface.cpp new file mode 100644 index 000000000..9a748ffc9 --- /dev/null +++ b/kate/app/katemainwindowiface.cpp @@ -0,0 +1,27 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Ian Reinhart Geiser + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katemainwindowiface.h" + +#include "katemainwindow.h" + +#include + +KateMainWindowDCOPIface::KateMainWindowDCOPIface (KateMainWindow *w) : DCOPObject ((QString("KateMainWindow#%1").arg(w->mainWindowNumber())).latin1()), m_w (w) +{ +} diff --git a/kate/app/katemainwindowiface.h b/kate/app/katemainwindowiface.h new file mode 100644 index 000000000..3292d1b15 --- /dev/null +++ b/kate/app/katemainwindowiface.h @@ -0,0 +1,41 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Ian Reinhart Geiser + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _katemainwindow_Iface_h_ +#define _katemainwindow_Iface_h_ + +#include +#include + +#include + +class KateMainWindow; + +class KateMainWindowDCOPIface : public DCOPObject +{ + K_DCOP + + public: + KateMainWindowDCOPIface (KateMainWindow *w); + + k_dcop: + + private: + KateMainWindow *m_w; +}; +#endif diff --git a/kate/app/katemdi.cpp b/kate/app/katemdi.cpp new file mode 100644 index 000000000..fbe9be1e1 --- /dev/null +++ b/kate/app/katemdi.cpp @@ -0,0 +1,969 @@ +/* This file is part of the KDE libraries + Copyright (C) 2005 Christoph Cullmann + Copyright (C) 2002, 2003 Joseph Wenninger + + GUIClient partly based on ktoolbarhandler.cpp: Copyright (C) 2002 Simon Hausmann + + 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 "katemdi.h" +#include "katemdi.moc" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace KateMDI { + +//BEGIN SPLITTER + +Splitter::Splitter(Orientation o, QWidget* parent, const char* name) + : QSplitter(o, parent, name) +{ +} + +Splitter::~Splitter() +{ +} + +bool Splitter::isLastChild(QWidget* w) const +{ + return ( idAfter( w ) == 0 ); +} + +int Splitter::idAfter ( QWidget * w ) const +{ + return QSplitter::idAfter (w); +} + +//END SPLITTER + + +//BEGIN TOGGLETOOLVIEWACTION + +ToggleToolViewAction::ToggleToolViewAction ( const QString& text, const KShortcut& cut, ToolView *tv, + QObject* parent, const char* name ) + : KToggleAction(text,cut,parent,name) + , m_tv(tv) +{ + connect(this,SIGNAL(toggled(bool)),this,SLOT(slotToggled(bool))); + connect(m_tv,SIGNAL(visibleChanged(bool)),this,SLOT(visibleChanged(bool))); + + setChecked(m_tv->visible()); +} + +ToggleToolViewAction::~ToggleToolViewAction() +{ + unplugAll(); +} + +void ToggleToolViewAction::visibleChanged(bool) +{ + if (isChecked() != m_tv->visible()) + setChecked (m_tv->visible()); +} + +void ToggleToolViewAction::slotToggled(bool t) +{ + if (t) + { + m_tv->mainWindow()->showToolView (m_tv); + m_tv->setFocus (); + } + else + { + m_tv->mainWindow()->hideToolView (m_tv); + m_tv->mainWindow()->centralWidget()->setFocus (); + } +} + +//END TOGGLETOOLVIEWACTION + + +//BEGIN GUICLIENT + +static const char *actionListName = "kate_mdi_window_actions"; + +static const char *guiDescription = "" + "" + "" + "

" + " " + " " + "" + ""; + +GUIClient::GUIClient ( MainWindow *mw ) + : QObject ( mw ) + , KXMLGUIClient ( mw ) + , m_mw (mw) +{ + connect( m_mw->guiFactory(), SIGNAL( clientAdded( KXMLGUIClient * ) ), + this, SLOT( clientAdded( KXMLGUIClient * ) ) ); + + if ( domDocument().documentElement().isNull() ) + { + QString completeDescription = QString::fromLatin1( guiDescription ) + .arg( actionListName ); + + setXML( completeDescription, false /*merge*/ ); + } + + if (actionCollection()->kaccel()==0) + actionCollection()->setWidget(m_mw); + + m_toolMenu = new KActionMenu(i18n("Tool &Views"),actionCollection(),"kate_mdi_toolview_menu"); + m_showSidebarsAction = new KToggleAction( i18n("Show Side&bars"), + CTRL|ALT|SHIFT|Key_F, actionCollection(), "kate_mdi_sidebar_visibility" ); + m_showSidebarsAction->setCheckedState(i18n("Hide Side&bars")); + m_showSidebarsAction->setChecked( m_mw->sidebarsVisible() ); + connect( m_showSidebarsAction, SIGNAL( toggled( bool ) ), + m_mw, SLOT( setSidebarsVisible( bool ) ) ); + + m_toolMenu->insert( m_showSidebarsAction ); + m_toolMenu->insert( new KActionSeparator( m_toolMenu ) ); + + // read shortcuts + actionCollection()->readShortcutSettings( "Shortcuts", kapp->config() ); +} + +GUIClient::~GUIClient() +{ +} + +void GUIClient::updateSidebarsVisibleAction() +{ + m_showSidebarsAction->setChecked( m_mw->sidebarsVisible() ); +} + +void GUIClient::registerToolView (ToolView *tv) +{ + QString aname = QString("kate_mdi_toolview_") + tv->id; + + // try to read the action shortcut + KShortcut sc; + KConfig *cfg = kapp->config(); + QString _grp = cfg->group(); + cfg->setGroup("Shortcuts"); + sc = KShortcut( cfg->readEntry( aname, "" ) ); + cfg->setGroup( _grp ); + + KToggleAction *a = new ToggleToolViewAction(i18n("Show %1").arg(tv->text), + sc,tv, actionCollection(), aname.latin1() ); + + a->setCheckedState(i18n("Hide %1").arg(tv->text)); + + m_toolViewActions.append(a); + m_toolMenu->insert(a); + + m_toolToAction.insert (tv, a); + + updateActions(); +} + +void GUIClient::unregisterToolView (ToolView *tv) +{ + KAction *a = m_toolToAction[tv]; + + if (!a) + return; + + m_toolViewActions.remove(a); + delete a; + + m_toolToAction.remove (tv); + + updateActions(); +} + +void GUIClient::clientAdded( KXMLGUIClient *client ) +{ + if ( client == this ) + updateActions(); +} + +void GUIClient::updateActions() +{ + if ( !factory() ) + return; + + unplugActionList( actionListName ); + + QPtrList addList; + addList.append(m_toolMenu); + + plugActionList( actionListName, addList ); +} + +//END GUICLIENT + + +//BEGIN TOOLVIEW + +ToolView::ToolView (MainWindow *mainwin, Sidebar *sidebar, QWidget *parent) + : QVBox (parent) + , m_mainWin (mainwin) + , m_sidebar (sidebar) + , m_visible (false) + , persistent (false) +{ +} + +ToolView::~ToolView () +{ + m_mainWin->toolViewDeleted (this); +} + +void ToolView::setVisible (bool vis) +{ + if (m_visible == vis) + return; + + m_visible = vis; + emit visibleChanged (m_visible); +} + +bool ToolView::visible () const +{ + return m_visible; +} + +void ToolView::childEvent ( QChildEvent *ev ) +{ + // set the widget to be focus proxy if possible + if (ev->inserted() && ev->child() && ev->child()->qt_cast("QWidget")) + setFocusProxy ((QWidget *)(ev->child()->qt_cast("QWidget"))); + + QVBox::childEvent (ev); +} + +//END TOOLVIEW + + +//BEGIN SIDEBAR + +Sidebar::Sidebar (KMultiTabBar::KMultiTabBarPosition pos, MainWindow *mainwin, QWidget *parent) + : KMultiTabBar ((pos == KMultiTabBar::Top || pos == KMultiTabBar::Bottom) ? KMultiTabBar::Horizontal : KMultiTabBar::Vertical, parent) + , m_mainWin (mainwin) + , m_splitter (0) + , m_ownSplit (0) + , m_lastSize (0) +{ + setPosition( pos ); + hide (); +} + +Sidebar::~Sidebar () +{ +} + +void Sidebar::setSplitter (Splitter *sp) +{ + m_splitter = sp; + m_ownSplit = new Splitter ((position() == KMultiTabBar::Top || position() == KMultiTabBar::Bottom) ? Qt::Horizontal : Qt::Vertical, m_splitter); + m_ownSplit->setOpaqueResize( KGlobalSettings::opaqueResize() ); + m_ownSplit->setChildrenCollapsible( false ); + m_splitter->setResizeMode( m_ownSplit, QSplitter::KeepSize ); + m_ownSplit->hide (); +} + +ToolView *Sidebar::addWidget (const QPixmap &icon, const QString &text, ToolView *widget) +{ + static int id = 0; + + if (widget) + { + if (widget->sidebar() == this) + return widget; + + widget->sidebar()->removeWidget (widget); + } + + int newId = ++id; + + appendTab (icon, newId, text); + + if (!widget) + { + widget = new ToolView (m_mainWin, this, m_ownSplit); + widget->hide (); + widget->icon = icon; + widget->text = text; + } + else + { + widget->hide (); + widget->reparent (m_ownSplit, 0, QPoint()); + widget->m_sidebar = this; + } + + // save it's pos ;) + widget->persistent = false; + + m_idToWidget.insert (newId, widget); + m_widgetToId.insert (widget, newId); + m_toolviews.push_back (widget); + + show (); + + connect(tab(newId),SIGNAL(clicked(int)),this,SLOT(tabClicked(int))); + tab(newId)->installEventFilter(this); + + return widget; +} + +bool Sidebar::removeWidget (ToolView *widget) +{ + if (!m_widgetToId.contains(widget)) + return false; + + removeTab(m_widgetToId[widget]); + + m_idToWidget.remove (m_widgetToId[widget]); + m_widgetToId.remove (widget); + m_toolviews.remove (widget); + + bool anyVis = false; + QIntDictIterator it( m_idToWidget ); + for ( ; it.current(); ++it ) + { + if (!anyVis) + anyVis = it.current()->isVisible(); + } + + if (m_idToWidget.isEmpty()) + { + m_ownSplit->hide (); + hide (); + } + else if (!anyVis) + m_ownSplit->hide (); + + return true; +} + +bool Sidebar::showWidget (ToolView *widget) +{ + if (!m_widgetToId.contains(widget)) + return false; + + // hide other non-persistent views + QIntDictIterator it( m_idToWidget ); + for ( ; it.current(); ++it ) + if ((it.current() != widget) && !it.current()->persistent) + { + it.current()->hide(); + setTab (it.currentKey(), false); + it.current()->setVisible(false); + } + + setTab (m_widgetToId[widget], true); + + m_ownSplit->show (); + widget->show (); + + widget->setVisible (true); + + return true; +} + +bool Sidebar::hideWidget (ToolView *widget) +{ + if (!m_widgetToId.contains(widget)) + return false; + + bool anyVis = false; + + updateLastSize (); + + for ( QIntDictIterator it( m_idToWidget ); it.current(); ++it ) + { + if (it.current() == widget) + { + it.current()->hide(); + continue; + } + + if (!anyVis) + anyVis = it.current()->isVisible(); + } + + // lower tab + setTab (m_widgetToId[widget], false); + + if (!anyVis) + m_ownSplit->hide (); + + widget->setVisible (false); + + return true; +} + +void Sidebar::tabClicked(int i) +{ + ToolView *w = m_idToWidget[i]; + + if (!w) + return; + + if (isTabRaised(i)) + { + showWidget (w); + w->setFocus (); + } + else + { + hideWidget (w); + m_mainWin->centralWidget()->setFocus (); + } +} + +bool Sidebar::eventFilter(QObject *obj, QEvent *ev) +{ + if (ev->type()==QEvent::ContextMenu) + { + QContextMenuEvent *e = (QContextMenuEvent *) ev; + KMultiTabBarTab *bt = dynamic_cast(obj); + if (bt) + { + kdDebug()<<"Request for popup"<id(); + + ToolView *w = m_idToWidget[m_popupButton]; + + if (w) + { + KPopupMenu *p = new KPopupMenu (this); + + p->insertTitle(SmallIcon("view_remove"), i18n("Behavior"), 50); + + p->insertItem(w->persistent ? SmallIconSet("window_nofullscreen") : SmallIconSet("window_fullscreen"), w->persistent ? i18n("Make Non-Persistent") : i18n("Make Persistent"), 10); + + p->insertTitle(SmallIcon("move"), i18n("Move To"), 51); + + if (position() != 0) + p->insertItem(SmallIconSet("back"), i18n("Left Sidebar"),0); + + if (position() != 1) + p->insertItem(SmallIconSet("forward"), i18n("Right Sidebar"),1); + + if (position() != 2) + p->insertItem(SmallIconSet("up"), i18n("Top Sidebar"),2); + + if (position() != 3) + p->insertItem(SmallIconSet("down"), i18n("Bottom Sidebar"),3); + + connect(p, SIGNAL(activated(int)), + this, SLOT(buttonPopupActivate(int))); + + p->exec(e->globalPos()); + delete p; + + return true; + } + } + } + + return false; +} + +void Sidebar::show() +{ + if (m_idToWidget.isEmpty() || !m_mainWin->sidebarsVisible() ) + return; + + KMultiTabBar::show( ); +} + +void Sidebar::buttonPopupActivate (int id) +{ + ToolView *w = m_idToWidget[m_popupButton]; + + if (!w) + return; + + // move ids + if (id < 4) + { + // move + show ;) + m_mainWin->moveToolView (w, (KMultiTabBar::KMultiTabBarPosition) id); + m_mainWin->showToolView (w); + } + + // toggle persistent + if (id == 10) + w->persistent = !w->persistent; +} + +void Sidebar::updateLastSize () +{ + QValueList s = m_splitter->sizes (); + + int i = 0; + if ((position() == KMultiTabBar::Right || position() == KMultiTabBar::Bottom)) + i = 2; + + // little threshold + if (s[i] > 2) + m_lastSize = s[i]; +} + +class TmpToolViewSorter +{ + public: + ToolView *tv; + unsigned int pos; +}; + +void Sidebar::restoreSession (KConfig *config) +{ + // get the last correct placed toolview + unsigned int firstWrong = 0; + for ( ; firstWrong < m_toolviews.size(); ++firstWrong ) + { + ToolView *tv = m_toolviews[firstWrong]; + + unsigned int pos = config->readUnsignedNumEntry (QString ("Kate-MDI-ToolView-%1-Sidebar-Position").arg(tv->id), firstWrong); + + if (pos != firstWrong) + break; + } + + // we need to reshuffle, ahhh :( + if (firstWrong < m_toolviews.size()) + { + // first: collect the items to reshuffle + QValueList toSort; + for (unsigned int i=firstWrong; i < m_toolviews.size(); ++i) + { + TmpToolViewSorter s; + s.tv = m_toolviews[i]; + s.pos = config->readUnsignedNumEntry (QString ("Kate-MDI-ToolView-%1-Sidebar-Position").arg(m_toolviews[i]->id), i); + toSort.push_back (s); + } + + // now: sort the stuff we need to reshuffle + for (unsigned int m=0; m < toSort.size(); ++m) + for (unsigned int n=m+1; n < toSort.size(); ++n) + if (toSort[n].pos < toSort[m].pos) + { + TmpToolViewSorter tmp = toSort[n]; + toSort[n] = toSort[m]; + toSort[m] = tmp; + } + + // then: remove this items from the button bar + // do this backwards, to minimize the relayout efforts + for (int i=m_toolviews.size()-1; i >= (int)firstWrong; --i) + { + removeTab (m_widgetToId[m_toolviews[i]]); + } + + // insert the reshuffled things in order :) + for (unsigned int i=0; i < toSort.size(); ++i) + { + ToolView *tv = toSort[i].tv; + + m_toolviews[firstWrong+i] = tv; + + // readd the button + int newId = m_widgetToId[tv]; + appendTab (tv->icon, newId, tv->text); + connect(tab(newId),SIGNAL(clicked(int)),this,SLOT(tabClicked(int))); + tab(newId)->installEventFilter(this); + + // reshuffle in splitter + m_ownSplit->moveToLast (tv); + } + } + + // update last size if needed + updateLastSize (); + + // restore the own splitter sizes + QValueList s = config->readIntListEntry (QString ("Kate-MDI-Sidebar-%1-Splitter").arg(position())); + m_ownSplit->setSizes (s); + + // show only correct toolviews, remember persistent values ;) + bool anyVis = false; + for ( unsigned int i=0; i < m_toolviews.size(); ++i ) + { + ToolView *tv = m_toolviews[i]; + + tv->persistent = config->readBoolEntry (QString ("Kate-MDI-ToolView-%1-Persistent").arg(tv->id), false); + tv->setVisible (config->readBoolEntry (QString ("Kate-MDI-ToolView-%1-Visible").arg(tv->id), false)); + + if (!anyVis) + anyVis = tv->visible(); + + setTab (m_widgetToId[tv],tv->visible()); + + if (tv->visible()) + tv->show(); + else + tv->hide (); + } + + if (anyVis) + m_ownSplit->show(); + else + m_ownSplit->hide(); +} + +void Sidebar::saveSession (KConfig *config) +{ + // store the own splitter sizes + QValueList s = m_ownSplit->sizes(); + config->writeEntry (QString ("Kate-MDI-Sidebar-%1-Splitter").arg(position()), s); + + // store the data about all toolviews in this sidebar ;) + for ( unsigned int i=0; i < m_toolviews.size(); ++i ) + { + ToolView *tv = m_toolviews[i]; + + config->writeEntry (QString ("Kate-MDI-ToolView-%1-Position").arg(tv->id), tv->sidebar()->position()); + config->writeEntry (QString ("Kate-MDI-ToolView-%1-Sidebar-Position").arg(tv->id), i); + config->writeEntry (QString ("Kate-MDI-ToolView-%1-Visible").arg(tv->id), tv->visible()); + config->writeEntry (QString ("Kate-MDI-ToolView-%1-Persistent").arg(tv->id), tv->persistent); + } +} + +//END SIDEBAR + + +//BEGIN MAIN WINDOW + +MainWindow::MainWindow (QWidget* parentWidget, const char* name) + : KParts::MainWindow( parentWidget, name) + , m_sidebarsVisible(true) + , m_restoreConfig (0) + , m_guiClient (new GUIClient (this)) +{ + // init the internal widgets + QHBox *hb = new QHBox (this); + setCentralWidget(hb); + + m_sidebars[KMultiTabBar::Left] = new Sidebar (KMultiTabBar::Left, this, hb); + + m_hSplitter = new Splitter (Qt::Horizontal, hb); + m_hSplitter->setOpaqueResize( KGlobalSettings::opaqueResize() ); + + m_sidebars[KMultiTabBar::Left]->setSplitter (m_hSplitter); + + QVBox *vb = new QVBox (m_hSplitter); + m_hSplitter->setCollapsible(vb, false); + + m_sidebars[KMultiTabBar::Top] = new Sidebar (KMultiTabBar::Top, this, vb); + + m_vSplitter = new Splitter (Qt::Vertical, vb); + m_vSplitter->setOpaqueResize( KGlobalSettings::opaqueResize() ); + + m_sidebars[KMultiTabBar::Top]->setSplitter (m_vSplitter); + + m_centralWidget = new QVBox (m_vSplitter); + m_vSplitter->setCollapsible(m_centralWidget, false); + + m_sidebars[KMultiTabBar::Bottom] = new Sidebar (KMultiTabBar::Bottom, this, vb); + m_sidebars[KMultiTabBar::Bottom]->setSplitter (m_vSplitter); + + m_sidebars[KMultiTabBar::Right] = new Sidebar (KMultiTabBar::Right, this, hb); + m_sidebars[KMultiTabBar::Right]->setSplitter (m_hSplitter); +} + +MainWindow::~MainWindow () +{ + // cu toolviews + while (!m_toolviews.isEmpty()) + delete m_toolviews[0]; + + // seems like we really should delete this by hand ;) + delete m_centralWidget; + + for (unsigned int i=0; i < 4; ++i) + delete m_sidebars[i]; +} + +QWidget *MainWindow::centralWidget () const +{ + return m_centralWidget; +} + +ToolView *MainWindow::createToolView (const QString &identifier, KMultiTabBar::KMultiTabBarPosition pos, const QPixmap &icon, const QString &text) +{ + if (m_idToWidget[identifier]) + return 0; + + // try the restore config to figure out real pos + if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup)) + { + m_restoreConfig->setGroup (m_restoreGroup); + pos = (KMultiTabBar::KMultiTabBarPosition) m_restoreConfig->readNumEntry (QString ("Kate-MDI-ToolView-%1-Position").arg(identifier), pos); + } + + ToolView *v = m_sidebars[pos]->addWidget (icon, text, 0); + v->id = identifier; + + m_idToWidget.insert (identifier, v); + m_toolviews.push_back (v); + + // register for menu stuff + m_guiClient->registerToolView (v); + + return v; +} + +ToolView *MainWindow::toolView (const QString &identifier) const +{ + return m_idToWidget[identifier]; +} + +void MainWindow::toolViewDeleted (ToolView *widget) +{ + if (!widget) + return; + + if (widget->mainWindow() != this) + return; + + // unregister from menu stuff + m_guiClient->unregisterToolView (widget); + + widget->sidebar()->removeWidget (widget); + + m_idToWidget.remove (widget->id); + m_toolviews.remove (widget); +} + +void MainWindow::setSidebarsVisible( bool visible ) +{ + m_sidebarsVisible = visible; + + m_sidebars[0]->setShown(visible); + m_sidebars[1]->setShown(visible); + m_sidebars[2]->setShown(visible); + m_sidebars[3]->setShown(visible); + + m_guiClient->updateSidebarsVisibleAction(); + + // show information message box, if the users hides the sidebars + if( !m_sidebarsVisible ) + { + KMessageBox::information( this, + i18n("You are about to hide the sidebars. With " + "hidden sidebars it is not possible to directly " + "access the tool views with the mouse anymore, " + "so if you need to access the sidebars again " + "invoke Window > Tool Views > Show Sidebars " + "in the menu. It is still possible to show/hide " + "the tool views with the assigned shortcuts."), + QString::null, "Kate hide sidebars notification message" ); + } +} + +bool MainWindow::sidebarsVisible() const +{ + return m_sidebarsVisible; +} + +void MainWindow::setToolViewStyle (KMultiTabBar::KMultiTabBarStyle style) +{ + m_sidebars[0]->setStyle(style); + m_sidebars[1]->setStyle(style); + m_sidebars[2]->setStyle(style); + m_sidebars[3]->setStyle(style); +} + +KMultiTabBar::KMultiTabBarStyle MainWindow::toolViewStyle () const +{ + // all sidebars have the same style, so just take Top + return m_sidebars[KMultiTabBar::Top]->tabStyle(); +} + +bool MainWindow::moveToolView (ToolView *widget, KMultiTabBar::KMultiTabBarPosition pos) +{ + if (!widget || widget->mainWindow() != this) + return false; + + // try the restore config to figure out real pos + if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup)) + { + m_restoreConfig->setGroup (m_restoreGroup); + pos = (KMultiTabBar::KMultiTabBarPosition) m_restoreConfig->readNumEntry (QString ("Kate-MDI-ToolView-%1-Position").arg(widget->id), pos); + } + + m_sidebars[pos]->addWidget (widget->icon, widget->text, widget); + + return true; +} + +bool MainWindow::showToolView (ToolView *widget) +{ + if (!widget || widget->mainWindow() != this) + return false; + + // skip this if happens during restoring, or we will just see flicker + if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup)) + return true; + + return widget->sidebar()->showWidget (widget); +} + +bool MainWindow::hideToolView (ToolView *widget) +{ + if (!widget || widget->mainWindow() != this) + return false; + + // skip this if happens during restoring, or we will just see flicker + if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup)) + return true; + + return widget->sidebar()->hideWidget (widget); +} + +void MainWindow::startRestore (KConfig *config, const QString &group) +{ + // first save this stuff + m_restoreConfig = config; + m_restoreGroup = group; + + if (!m_restoreConfig || !m_restoreConfig->hasGroup (m_restoreGroup)) + { + // set sane default sizes + QValueList hs; + hs << 200 << 100 << 200; + QValueList vs; + vs << 150 << 100 << 200; + + m_sidebars[0]->setLastSize (hs[0]); + m_sidebars[1]->setLastSize (hs[2]); + m_sidebars[2]->setLastSize (vs[0]); + m_sidebars[3]->setLastSize (vs[2]); + + m_hSplitter->setSizes(hs); + m_vSplitter->setSizes(vs); + return; + } + + // apply size once, to get sizes ready ;) + m_restoreConfig->setGroup (m_restoreGroup); + restoreWindowSize (m_restoreConfig); + + m_restoreConfig->setGroup (m_restoreGroup); + + // get main splitter sizes ;) + QValueList hs = m_restoreConfig->readIntListEntry ("Kate-MDI-H-Splitter"); + QValueList vs = m_restoreConfig->readIntListEntry ("Kate-MDI-V-Splitter"); + + m_sidebars[0]->setLastSize (hs[0]); + m_sidebars[1]->setLastSize (hs[2]); + m_sidebars[2]->setLastSize (vs[0]); + m_sidebars[3]->setLastSize (vs[2]); + + m_hSplitter->setSizes(hs); + m_vSplitter->setSizes(vs); + + setToolViewStyle( (KMultiTabBar::KMultiTabBarStyle)m_restoreConfig->readNumEntry ("Kate-MDI-Sidebar-Style", (int)toolViewStyle()) ); + + // after reading m_sidebarsVisible, update the GUI toggle action + m_sidebarsVisible = m_restoreConfig->readBoolEntry ("Kate-MDI-Sidebar-Visible", true ); + m_guiClient->updateSidebarsVisibleAction(); +} + +void MainWindow::finishRestore () +{ + if (!m_restoreConfig) + return; + + if (m_restoreConfig->hasGroup (m_restoreGroup)) + { + // apply all settings, like toolbar pos and more ;) + applyMainWindowSettings(m_restoreConfig, m_restoreGroup); + + // reshuffle toolviews only if needed + m_restoreConfig->setGroup (m_restoreGroup); + for ( unsigned int i=0; i < m_toolviews.size(); ++i ) + { + KMultiTabBar::KMultiTabBarPosition newPos = (KMultiTabBar::KMultiTabBarPosition) m_restoreConfig->readNumEntry (QString ("Kate-MDI-ToolView-%1-Position").arg(m_toolviews[i]->id), m_toolviews[i]->sidebar()->position()); + + if (m_toolviews[i]->sidebar()->position() != newPos) + { + moveToolView (m_toolviews[i], newPos); + } + } + + // restore the sidebars + m_restoreConfig->setGroup (m_restoreGroup); + for (unsigned int i=0; i < 4; ++i) + m_sidebars[i]->restoreSession (m_restoreConfig); + } + + // clear this stuff, we are done ;) + m_restoreConfig = 0; + m_restoreGroup = ""; +} + +void MainWindow::saveSession (KConfig *config, const QString &group) +{ + if (!config) + return; + + saveMainWindowSettings (config, group); + + config->setGroup (group); + + // save main splitter sizes ;) + QValueList hs = m_hSplitter->sizes(); + QValueList vs = m_vSplitter->sizes(); + + if (hs[0] <= 2 && !m_sidebars[0]->splitterVisible ()) + hs[0] = m_sidebars[0]->lastSize(); + if (hs[2] <= 2 && !m_sidebars[1]->splitterVisible ()) + hs[2] = m_sidebars[1]->lastSize(); + if (vs[0] <= 2 && !m_sidebars[2]->splitterVisible ()) + vs[0] = m_sidebars[2]->lastSize(); + if (vs[2] <= 2 && !m_sidebars[3]->splitterVisible ()) + vs[2] = m_sidebars[3]->lastSize(); + + config->writeEntry ("Kate-MDI-H-Splitter", hs); + config->writeEntry ("Kate-MDI-V-Splitter", vs); + + // save sidebar style + config->writeEntry ("Kate-MDI-Sidebar-Style", (int)toolViewStyle()); + config->writeEntry ("Kate-MDI-Sidebar-Visible", m_sidebarsVisible ); + + // save the sidebars + for (unsigned int i=0; i < 4; ++i) + m_sidebars[i]->saveSession (config); +} + +//END MAIN WINDOW + +} // namespace KateMDI + +// kate: space-indent on; indent-width 2; diff --git a/kate/app/katemdi.h b/kate/app/katemdi.h new file mode 100644 index 000000000..2aa6429bd --- /dev/null +++ b/kate/app/katemdi.h @@ -0,0 +1,442 @@ +/* This file is part of the KDE libraries + Copyright (C) 2005 Christoph Cullmann + Copyright (C) 2002, 2003 Joseph Wenninger + + 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 __KATE_MDI_H__ +#define __KATE_MDI_H__ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace KateMDI { + + +/** This class is needed because QSplitter cant return an index for a widget. */ +class Splitter : public QSplitter +{ + Q_OBJECT + + public: + Splitter(Orientation o, QWidget* parent=0, const char* name=0); + ~Splitter(); + + /** Since there is supposed to be only 2 childs of a katesplitter, + * any child other than the last is the first. + * This method uses QSplitter::idAfter(widget) which + * returns 0 if there is no widget after this one. + * This results in an error if widget is not a child + * in this splitter */ + bool isLastChild(QWidget* w) const; + + int idAfter ( QWidget * w ) const; +}; + +class ToggleToolViewAction : public KToggleAction +{ + Q_OBJECT + + public: + ToggleToolViewAction ( const QString& text, const KShortcut& cut, + class ToolView *tv, QObject* parent = 0, const char* name = 0 ); + + virtual ~ToggleToolViewAction(); + + protected slots: + void slotToggled(bool); + void visibleChanged(bool); + + private: + ToolView *m_tv; +}; + +class GUIClient : public QObject, public KXMLGUIClient +{ + Q_OBJECT + + public: + GUIClient ( class MainWindow *mw ); + virtual ~GUIClient(); + + void registerToolView (ToolView *tv); + void unregisterToolView (ToolView *tv); + void updateSidebarsVisibleAction(); + + private slots: + void clientAdded( KXMLGUIClient *client ); + void updateActions(); + + private: + MainWindow *m_mw; + KToggleAction *m_showSidebarsAction; + QPtrList m_toolViewActions; + QMap m_toolToAction; + KActionMenu *m_toolMenu; +}; + +class ToolView : public QVBox +{ + Q_OBJECT + + friend class Sidebar; + friend class MainWindow; + friend class GUIClient; + friend class ToggleToolViewAction; + + protected: + /** + * ToolView + * Objects of this clas represent a toolview in the mainwindow + * you should only add one widget as child to this toolview, it will + * be automatically set to be the focus proxy of the toolview + * @param mainwin main window for this toolview + * @param sidebar sidebar of this toolview + * @param parent parent widget, e.g. the splitter of one of the sidebars + */ + ToolView (class MainWindow *mainwin, class Sidebar *sidebar, QWidget *parent); + + public: + /** + * destuct me, this is allowed for all, will care itself that the toolview is removed + * from the mainwindow and sidebar + */ + virtual ~ToolView (); + + signals: + /** + * toolview hidden or shown + * @param bool is this toolview made visible? + */ + void visibleChanged (bool visible); + + /** + * some internal methodes needed by the main window and the sidebars + */ + protected: + MainWindow *mainWindow () { return m_mainWin; } + + Sidebar *sidebar () { return m_sidebar; } + + void setVisible (bool vis); + + public: + bool visible () const; + + protected: + void childEvent ( QChildEvent *ev ); + + private: + MainWindow *m_mainWin; + Sidebar *m_sidebar; + + /** + * unique id + */ + QString id; + + /** + * is visible in sidebar + */ + bool m_visible; + + /** + * is this view persistent? + */ + bool persistent; + + QPixmap icon; + QString text; +}; + +class Sidebar : public KMultiTabBar +{ + Q_OBJECT + + public: + Sidebar (KMultiTabBar::KMultiTabBarPosition pos, class MainWindow *mainwin, QWidget *parent); + virtual ~Sidebar (); + + void setSplitter (Splitter *sp); + + public: + ToolView *addWidget (const QPixmap &icon, const QString &text, ToolView *widget); + bool removeWidget (ToolView *widget); + + bool showWidget (ToolView *widget); + bool hideWidget (ToolView *widget); + + void setLastSize (int s) { m_lastSize = s; } + int lastSize () const { return m_lastSize; } + void updateLastSize (); + + bool splitterVisible () const { return m_ownSplit->isVisible(); } + + void restoreSession (); + + /** + * restore the current session config from given object, use current group + * @param config config object to use + */ + void restoreSession (KConfig *config); + + /** + * save the current session config to given object, use current group + * @param config config object to use + */ + void saveSession (KConfig *config); + + public slots: + // reimplemented, to block a show() call if we have no children or if + // all sidebars are forced hidden. + virtual void show(); + + private slots: + void tabClicked(int); + + protected: + bool eventFilter(QObject *obj, QEvent *ev); + + private slots: + void buttonPopupActivate (int id); + + private: + MainWindow *m_mainWin; + + KMultiTabBar::KMultiTabBarPosition m_pos; + Splitter *m_splitter; + KMultiTabBar *m_tabBar; + Splitter *m_ownSplit; + + QIntDict m_idToWidget; + QMap m_widgetToId; + + /** + * list of all toolviews around in this sidebar + */ + QValueList m_toolviews; + + int m_lastSize; + + int m_popupButton; +}; + +class MainWindow : public KParts::MainWindow +{ + Q_OBJECT + + friend class ToolView; + + // + // Constructor area + // + public: + /** + * Constructor + */ + MainWindow (QWidget* parentWidget = 0, const char* name = 0); + + /** + * Destructor + */ + virtual ~MainWindow (); + + // + // public interfaces + // + public: + /** + * central widget ;) + * use this as parent for your content + * this widget will get focus if a toolview is hidden + * @return central widget + */ + QWidget *centralWidget () const; + + /** + * add a given widget to the given sidebar if possible, name is very important + * @param identifier unique identifier for this toolview + * @param pos position for the toolview, if we are in session restore, this is only a preference + * @param icon icon to use for the toolview + * @param text text to use in addition to icon + * @return created toolview on success or 0 + */ + ToolView *createToolView (const QString &identifier, KMultiTabBar::KMultiTabBarPosition pos, const QPixmap &icon, const QString &text); + + /** + * give you handle to toolview for the given name, 0 if no toolview around + * @param identifier toolview name + * @return toolview if existing, else 0 + */ + ToolView *toolView (const QString &identifier) const; + + /** + * set the toolview's tabbar style. + * @param style the tabbar style. + */ + void setToolViewStyle (KMultiTabBar::KMultiTabBarStyle style); + + /** + * get the toolview's tabbar style. Call this before @p startRestore(), + * otherwise you overwrite the usersettings. + * @return toolview's tabbar style + */ + KMultiTabBar::KMultiTabBarStyle toolViewStyle () const; + + /** + * get the sidebars' visibility. + * @return false, if the sidebars' visibility is forced hidden, otherwise true + */ + bool sidebarsVisible() const; + + public slots: + /** + * set the sidebars' visibility to @p visible. If false, the sidebars + * are @e always hidden. Usually you do not have to call this because + * the user can set this in the menu. + * @param visible sidebars visibility + */ + void setSidebarsVisible( bool visible ); + + protected: + /** + * called by toolview destructor + * @param widget toolview which is destroyed + */ + void toolViewDeleted (ToolView *widget); + + /** + * modifiers for existing toolviews + */ + public: + /** + * move a toolview around + * @param widget toolview to move + * @param pos position to move too, during session restore, only preference + * @return success + */ + bool moveToolView (ToolView *widget, KMultiTabBar::KMultiTabBarPosition pos); + + /** + * show given toolview, discarded while session restore + * @param widget toolview to show + * @return success + */ + bool showToolView (ToolView *widget); + + /** + * hide given toolview, discarded while session restore + * @param widget toolview to hide + * @return success + */ + bool hideToolView (ToolView *widget); + + /** + * session saving and restore stuff + */ + public: + /** + * start the restore + * @param config config object to use + * @param group config group to use + */ + void startRestore (KConfig *config, const QString &group); + + /** + * finish the restore + */ + void finishRestore (); + + /** + * save the current session config to given object and group + * @param config config object to use + * @param group config group to use + */ + void saveSession (KConfig *config, const QString &group); + + /** + * internal data ;) + */ + private: + /** + * map identifiers to widgets + */ + QDict m_idToWidget; + + /** + * list of all toolviews around + */ + QValueList m_toolviews; + + /** + * widget, which is the central part of the + * main window ;) + */ + QWidget *m_centralWidget; + + /** + * horizontal splitter + */ + Splitter *m_hSplitter; + + /** + * vertical splitter + */ + Splitter *m_vSplitter; + + /** + * sidebars for the four sides + */ + Sidebar *m_sidebars[4]; + + /** + * sidebars state. + */ + bool m_sidebarsVisible; + + /** + * config object for session restore, only valid between + * start and finish restore calls + */ + KConfig *m_restoreConfig; + + /** + * restore group + */ + QString m_restoreGroup; + + /** + * out guiclient + */ + GUIClient *m_guiClient; +}; + +} + +#endif + +// kate: space-indent on; indent-width 2; diff --git a/kate/app/katemwmodonhddialog.cpp b/kate/app/katemwmodonhddialog.cpp new file mode 100644 index 000000000..efbee3cb5 --- /dev/null +++ b/kate/app/katemwmodonhddialog.cpp @@ -0,0 +1,281 @@ +/* + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. + + --- + Copyright (C) 2004, Anders Lund +*/ + +#include "katemwmodonhddialog.h" +#include "katemwmodonhddialog.moc" + +#include "katedocmanager.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +class KateDocItem : public QCheckListItem +{ + public: + KateDocItem( Kate::Document *doc, const QString &status, KListView *lv ) + : QCheckListItem( lv, doc->url().prettyURL(), CheckBox ), + document( doc ) + { + setText( 1, status ); + if ( ! doc->isModified() ) + setOn( On ); + } + ~KateDocItem() {}; + + Kate::Document *document; +}; + + +KateMwModOnHdDialog::KateMwModOnHdDialog( DocVector docs, QWidget *parent, const char *name ) + : KDialogBase( parent, name, true, i18n("Documents Modified on Disk"), + User1|User2|User3, User3, false, + KGuiItem (i18n("&Ignore"), "fileclose"), + KGuiItem (i18n("&Overwrite"), "filesave"), + KGuiItem (i18n("&Reload"), "reload") ) +{ + setButtonWhatsThis( User1, i18n( + "Removes the modified flag from the selected documents and closes the " + "dialog if there are no more unhandled documents.") ); + setButtonWhatsThis( User2, i18n( + "Overwrite selected documents, discarding the disk changes and closes the " + "dialog if there are no more unhandled documents.") ); + setButtonWhatsThis( User3, i18n( + "Reloads the selected documents from disk and closes the dialog if there " + "are no more unhandled documents.") ); + + QVBox *w = makeVBoxMainWidget(); + w->setSpacing( KDialog::spacingHint() ); + + QHBox *lo1 = new QHBox( w ); + + // dialog text + QLabel *icon = new QLabel( lo1 ); + icon->setPixmap( DesktopIcon("messagebox_warning") ); + + QLabel *t = new QLabel( i18n( + "The documents listed below has changed on disk.

Select one " + "or more at the time and press an action button until the list is empty."), lo1 ); + lo1->setStretchFactor( t, 1000 ); + + // document list + lvDocuments = new KListView( w ); + lvDocuments->addColumn( i18n("Filename") ); + lvDocuments->addColumn( i18n("Status on Disk") ); + lvDocuments->setSelectionMode( QListView::Single ); + + QStringList l; + l << "" << i18n("Modified") << i18n("Created") << i18n("Deleted"); + for ( uint i=0; i < docs.size(); i++ ) + new KateDocItem( docs[i], l[ (uint)KateDocManager::self()->documentInfo( docs[i] )->modifiedOnDiscReason ], lvDocuments ); + + connect( lvDocuments, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()) ); + + // diff button + QHBox *lo2 = new QHBox ( w ); + QWidget *d = new QWidget (lo2); + lo2->setStretchFactor (d, 2); + btnDiff = new KPushButton( KGuiItem (i18n("&View Difference"), "edit"), lo2 ); + + QWhatsThis::add( btnDiff, i18n( + "Calculates the difference between the the editor contents and the disk " + "file for the selected document, and shows the difference with the " + "default application. Requires diff(1).") ); + connect( btnDiff, SIGNAL(clicked()), this, SLOT(slotDiff()) ); + + slotSelectionChanged(); + m_tmpfile = 0; +} + +KateMwModOnHdDialog::~KateMwModOnHdDialog() +{ +} + +void KateMwModOnHdDialog::slotUser1() +{ + handleSelected( Ignore ); +} + +void KateMwModOnHdDialog::slotUser2() +{ + handleSelected( Overwrite ); +} + +void KateMwModOnHdDialog::slotUser3() +{ + handleSelected( Reload ); +} + +void KateMwModOnHdDialog::handleSelected( int action ) +{ + // collect all items we can remove + QValueList itemsToDelete; + for ( QListViewItemIterator it ( lvDocuments ); it.current(); ++it ) + { + KateDocItem *item = static_cast(it.current()); + + if ( item->isOn() ) + { + int reason = (int)KateDocManager::self()->documentInfo( item->document )->modifiedOnDiscReason; + bool succes = true; + + Kate::DocumentExt *dext = documentExt( item->document ); + if ( ! dext ) continue; + + dext->setModifiedOnDisk( 0 ); + switch ( action ) + { + case Overwrite: + succes = item->document->save(); + if ( ! succes ) + { + KMessageBox::sorry( this, + i18n("Could not save the document \n'%1'"). + arg( item->document->url().prettyURL() ) ); + } + break; + + case Reload: + item->document->reloadFile(); + break; + + default: + break; + } + + if ( succes ) + itemsToDelete.append (item); + else + dext->setModifiedOnDisk( reason ); + } + } + + // remove the marked items + for (unsigned int i=0; i < itemsToDelete.count(); ++i) + delete itemsToDelete[i]; + + // any documents left unhandled? + if ( ! lvDocuments->childCount() ) + done( Ok ); +} + +void KateMwModOnHdDialog::slotSelectionChanged() +{ + // set the diff button enabled + btnDiff->setEnabled( lvDocuments->currentItem() && + KateDocManager::self()->documentInfo( ((KateDocItem*)lvDocuments->currentItem())->document )->modifiedOnDiscReason != 3 ); +} + +// ### the code below is slightly modified from kdelibs/kate/part/katedialogs, +// class KateModOnHdPrompt. +void KateMwModOnHdDialog::slotDiff() +{ + if ( m_tmpfile ) // we are allready somewhere in this process. + return; + + if ( ! lvDocuments->currentItem() ) + return; + + Kate::Document *doc = ((KateDocItem*)lvDocuments->currentItem())->document; + + // don't try o diff a deleted file + if ( KateDocManager::self()->documentInfo( doc )->modifiedOnDiscReason == 3 ) + return; + + // Start a KProcess that creates a diff + KProcIO *p = new KProcIO(); + p->setComm( KProcess::All ); + *p << "diff" << "-u" << "-" << doc->url().path(); + connect( p, SIGNAL(processExited(KProcess*)), this, SLOT(slotPDone(KProcess*)) ); + connect( p, SIGNAL(readReady(KProcIO*)), this, SLOT(slotPRead(KProcIO*)) ); + + setCursor( WaitCursor ); + + p->start( KProcess::NotifyOnExit, true ); + + uint lastln = doc->numLines(); + for ( uint l = 0; l < lastln; l++ ) + p->writeStdin( doc->textLine( l ), l < lastln ); + + p->closeWhenDone(); +} + +void KateMwModOnHdDialog::slotPRead( KProcIO *p) +{ + // create a file for the diff if we haven't one allready + if ( ! m_tmpfile ) + m_tmpfile = new KTempFile(); + // put all the data we have in it + QString stmp; + bool dataRead = false; + while ( p->readln( stmp, false ) > -1 ) { + *m_tmpfile->textStream() << stmp << endl; + dataRead = true; + } + + if (dataRead) + p->ackRead(); +} + +void KateMwModOnHdDialog::slotPDone( KProcess *p ) +{ + setCursor( ArrowCursor ); + if( ! m_tmpfile ) + { + // dominik: there were only whitespace changes, so that the diff returned by + // diff(1) has 0 bytes. So slotPRead() is never called, as there is + // no data, so that m_tmpfile was never created and thus is NULL. + // NOTE: would be nice, if we could produce a fake-diff, so that kompare + // tells us "The files are identical". Right now, we get an ugly + // "Could not parse diff output". + m_tmpfile = new KTempFile(); + } + m_tmpfile->close(); + + if ( ! p->normalExit() /*|| p->exitStatus()*/ ) + { + KMessageBox::sorry( this, + i18n("The diff command failed. Please make sure that " + "diff(1) is installed and in your PATH."), + i18n("Error Creating Diff") ); + delete m_tmpfile; + m_tmpfile = 0; + return; + } + + KRun::runURL( m_tmpfile->name(), "text/x-diff", true ); + delete m_tmpfile; + m_tmpfile = 0; +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katemwmodonhddialog.h b/kate/app/katemwmodonhddialog.h new file mode 100644 index 000000000..86ecd252a --- /dev/null +++ b/kate/app/katemwmodonhddialog.h @@ -0,0 +1,61 @@ +/* + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. + + --- + Copyright (C) 2004, Anders Lund +*/ + +#ifndef _KATE_MW_MODONHD_DIALOG_H_ +#define _KATE_MW_MODONHD_DIALOG_H_ + +#include +#include +#include + +typedef QPtrVector DocVector; +class KProcIO; +class KProcess; +/** + * A dialog for handling multiple documents modified on disk + * from within KateMainWindow + */ +class KateMwModOnHdDialog : public KDialogBase +{ + Q_OBJECT + public: + KateMwModOnHdDialog( DocVector docs, QWidget *parent=0, const char *name=0 ); + ~KateMwModOnHdDialog(); + + protected slots: + void slotUser1(); + void slotUser2(); + void slotUser3(); + + private slots: + void slotDiff(); + void slotSelectionChanged(); + void slotPRead(KProcIO*); + void slotPDone(KProcess*); + + private: + enum Action { Ignore, Overwrite, Reload }; + void handleSelected( int action ); + class KListView *lvDocuments; + class QPushButton *btnDiff; + class KTempFile *m_tmpfile; +}; + +#endif // _KATE_MW_MODONHD_DIALOG_H_ +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/katepluginmanager.cpp b/kate/app/katepluginmanager.cpp new file mode 100644 index 000000000..e3390e6a2 --- /dev/null +++ b/kate/app/katepluginmanager.cpp @@ -0,0 +1,221 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katepluginmanager.h" +#include "katepluginmanager.moc" + +#include "kateapp.h" +#include "katemainwindow.h" + +#include "../interfaces/application.h" + +#include +#include +#include +#include +#include + +KatePluginManager::KatePluginManager(QObject *parent) : QObject (parent) +{ + m_pluginManager = new Kate::PluginManager (this); + setupPluginList (); + + loadConfig (); + loadAllEnabledPlugins (); +} + +KatePluginManager::~KatePluginManager() +{ + // first write config + writeConfig (); + + // than unload the plugins + unloadAllPlugins (); +} + +KatePluginManager *KatePluginManager::self() +{ + return KateApp::self()->pluginManager (); +} + +void KatePluginManager::setupPluginList () +{ + QValueList traderList= KTrader::self()->query("Kate/Plugin", "(not ('Kate/ProjectPlugin' in ServiceTypes)) and (not ('Kate/InitPlugin' in ServiceTypes))"); + + for(KTrader::OfferList::Iterator it(traderList.begin()); it != traderList.end(); ++it) + { + KService::Ptr ptr = (*it); + + QString pVersion = ptr->property("X-Kate-Version").toString(); + +// if ((pVersion >= "2.5") && (pVersion <= KateApp::kateVersion(false))) + if (pVersion == "2.5") + { + KatePluginInfo info; + + info.load = false; + info.service = ptr; + info.plugin = 0L; + + m_pluginList.push_back (info); + } + } +} + +void KatePluginManager::loadConfig () +{ + KateApp::self()->config()->setGroup("Kate Plugins"); + + for (unsigned int i=0; i < m_pluginList.size(); ++i) + m_pluginList[i].load = KateApp::self()->config()->readBoolEntry (m_pluginList[i].service->library(), false) || + KateApp::self()->config()->readBoolEntry (m_pluginList[i].service->property("X-Kate-PluginName").toString(),false); +} + +void KatePluginManager::writeConfig () +{ + KateApp::self()->config()->setGroup("Kate Plugins"); + + for (unsigned int i=0; i < m_pluginList.size(); ++i) + { + QString saveName=m_pluginList[i].service->property("X-Kate-PluginName").toString(); + + if (saveName.isEmpty()) + saveName = m_pluginList[i].service->library(); + + KateApp::self()->config()->writeEntry (saveName, m_pluginList[i].load); + } +} + +void KatePluginManager::loadAllEnabledPlugins () +{ + for (unsigned int i=0; i < m_pluginList.size(); ++i) + { + if (m_pluginList[i].load) + loadPlugin (&m_pluginList[i]); + else + unloadPlugin (&m_pluginList[i]); + } +} + +void KatePluginManager::unloadAllPlugins () +{ + for (unsigned int i=0; i < m_pluginList.size(); ++i) + { + if (m_pluginList[i].plugin) + unloadPlugin (&m_pluginList[i]); + } +} + +void KatePluginManager::enableAllPluginsGUI (KateMainWindow *win) +{ + for (unsigned int i=0; i < m_pluginList.size(); ++i) + { + if (m_pluginList[i].load) + enablePluginGUI (&m_pluginList[i], win); + } +} + +void KatePluginManager::disableAllPluginsGUI (KateMainWindow *win) +{ + for (unsigned int i=0; i < m_pluginList.size(); ++i) + { + if (m_pluginList[i].load) + disablePluginGUI (&m_pluginList[i], win); + } +} + +void KatePluginManager::loadPlugin (KatePluginInfo *item) +{ + QString pluginName=item->service->property("X-Kate-PluginName").toString(); + + if (pluginName.isEmpty()) + pluginName=item->service->library(); + + item->load = (item->plugin = Kate::createPlugin (QFile::encodeName(item->service->library()), Kate::application(), 0, pluginName)); +} + +void KatePluginManager::unloadPlugin (KatePluginInfo *item) +{ + disablePluginGUI (item); + if (item->plugin) delete item->plugin; + item->plugin = 0L; + item->load = false; +} + +void KatePluginManager::enablePluginGUI (KatePluginInfo *item, KateMainWindow *win) +{ + if (!item->plugin) return; + if (!Kate::pluginViewInterface(item->plugin)) return; + + Kate::pluginViewInterface(item->plugin)->addView(win->mainWindow()); +} + +void KatePluginManager::enablePluginGUI (KatePluginInfo *item) +{ + if (!item->plugin) return; + if (!Kate::pluginViewInterface(item->plugin)) return; + + for (uint i=0; i< KateApp::self()->mainWindows(); i++) + { + Kate::pluginViewInterface(item->plugin)->addView(KateApp::self()->mainWindow(i)->mainWindow()); + } +} + +void KatePluginManager::disablePluginGUI (KatePluginInfo *item, KateMainWindow *win) +{ + if (!item->plugin) return; + if (!Kate::pluginViewInterface(item->plugin)) return; + + Kate::pluginViewInterface(item->plugin)->removeView(win->mainWindow()); +} + +void KatePluginManager::disablePluginGUI (KatePluginInfo *item) +{ + if (!item->plugin) return; + if (!Kate::pluginViewInterface(item->plugin)) return; + + for (uint i=0; i< KateApp::self()->mainWindows(); i++) + { + Kate::pluginViewInterface(item->plugin)->removeView(KateApp::self()->mainWindow(i)->mainWindow()); + } +} + +Kate::Plugin *KatePluginManager::plugin(const QString &name) +{ + for (unsigned int i=0; i < m_pluginList.size(); ++i) + { + KatePluginInfo *info = &m_pluginList[i]; + QString pluginName=info->service->property("X-Kate-PluginName").toString(); + if (pluginName.isEmpty()) + pluginName=info->service->library(); + if (pluginName==name) + { + if (info->plugin) + return info->plugin; + else + break; + } + } + return 0; +} + +bool KatePluginManager::pluginAvailable(const QString &){return false;} +class Kate::Plugin *KatePluginManager::loadPlugin(const QString &,bool ){return 0;} +void KatePluginManager::unloadPlugin(const QString &,bool){;} diff --git a/kate/app/katepluginmanager.h b/kate/app/katepluginmanager.h new file mode 100644 index 000000000..76f9578b2 --- /dev/null +++ b/kate/app/katepluginmanager.h @@ -0,0 +1,90 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_PLUGINMANAGER_H__ +#define __KATE_PLUGINMANAGER_H__ + +#include "katemain.h" + +#include "../interfaces/plugin.h" +#include "../interfaces/pluginmanager.h" + +#include + +#include +#include + +class KatePluginInfo +{ + public: + bool load; + KService::Ptr service; + Kate::Plugin *plugin; +}; + +typedef QValueList KatePluginList; + +class KatePluginManager : public QObject +{ + Q_OBJECT + + public: + KatePluginManager(QObject *parent); + ~KatePluginManager(); + + static KatePluginManager *self(); + + Kate::PluginManager *pluginManager () const { return m_pluginManager; }; + + void loadAllEnabledPlugins (); + void unloadAllPlugins (); + + void enableAllPluginsGUI (KateMainWindow *win); + void disableAllPluginsGUI (KateMainWindow *win); + + void loadConfig (); + void writeConfig (); + + void loadPlugin (KatePluginInfo *item); + void unloadPlugin (KatePluginInfo *item); + + void enablePluginGUI (KatePluginInfo *item, KateMainWindow *win); + void enablePluginGUI (KatePluginInfo *item); + + void disablePluginGUI (KatePluginInfo *item, KateMainWindow *win); + void disablePluginGUI (KatePluginInfo *item); + + inline KatePluginList & pluginList () { return m_pluginList; }; + + Kate::Plugin *plugin (const QString &name); + bool pluginAvailable (const QString &name); + + Kate::Plugin *loadPlugin (const QString &name, bool permanent=true); + void unloadPlugin (const QString &name, bool permanent=true); + + private: + Kate::PluginManager *m_pluginManager; + + void setupPluginList (); + + KatePluginList m_pluginList; +}; + +#endif diff --git a/kate/app/katesavemodifieddialog.cpp b/kate/app/katesavemodifieddialog.cpp new file mode 100644 index 000000000..51dc1ea61 --- /dev/null +++ b/kate/app/katesavemodifieddialog.cpp @@ -0,0 +1,226 @@ +/* This file is part of the KDE project + Copyright (C) 2004 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katesavemodifieddialog.h" +#include "katesavemodifieddialog.moc" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class AbstractKateSaveModifiedDialogCheckListItem:public QCheckListItem { +public: + AbstractKateSaveModifiedDialogCheckListItem(QListViewItem *parent,const QString& title, const QString& url):QCheckListItem(parent,title,QCheckListItem::CheckBox) { + setText(1,url); + setOn(true); + setState(InitialState); + } + virtual ~AbstractKateSaveModifiedDialogCheckListItem() { + } + virtual bool synchronousSave(QWidget *dialogParent)=0; + enum STATE{InitialState,SaveOKState,SaveFailedState}; + STATE state() const { return m_state;} + void setState(enum STATE state) { + m_state=state; + KIconLoader *loader = KGlobal::instance()->iconLoader(); + switch (state) { + case InitialState: + setPixmap(0,QPixmap()); + break; + case SaveOKState: + setPixmap(0,loader->loadIcon("ok",KIcon::NoGroup,height())); + break; + case SaveFailedState: + setPixmap(0,loader->loadIcon("cancel",KIcon::NoGroup,height())); + break; + } + } +private: + STATE m_state; +}; + +class KateSaveModifiedDocumentCheckListItem:public AbstractKateSaveModifiedDialogCheckListItem { +public: + KateSaveModifiedDocumentCheckListItem(QListViewItem *parent,Kate::Document *document):AbstractKateSaveModifiedDialogCheckListItem(parent,document->docName(),document->url().prettyURL()){ + m_document=document; + } + virtual ~KateSaveModifiedDocumentCheckListItem() { + } + virtual bool synchronousSave(QWidget *dialogParent) { + if (m_document->url().isEmpty() ) { + KEncodingFileDialog::Result r=KEncodingFileDialog::getSaveURLAndEncoding( + KTextEditor::encodingInterface(m_document)->encoding(),QString::null,QString::null,dialogParent,i18n("Save As (%1)").arg(m_document->docName())); + + m_document->setEncoding( r.encoding ); + if (!r.URLs.isEmpty()) { + KURL tmp = r.URLs.first(); + if ( !m_document->saveAs( tmp ) ) { + setState(SaveFailedState); + setText(1,m_document->url().prettyURL()); + return false; + } else { + bool sc=m_document->waitSaveComplete(); + setText(1,m_document->url().prettyURL()); + if (!sc) { + setState(SaveFailedState); + return false; + } else { + setState(SaveOKState); + return true; + } + } + } else { + setState(SaveFailedState); + return false; + } + } else { //document has an exising location + if ( !m_document->save() ) { + setState(SaveFailedState); + setText(1,m_document->url().prettyURL()); + return false; + } else { + bool sc=m_document->waitSaveComplete(); + setText(1,m_document->url().prettyURL()); + if (!sc) { + setState(SaveFailedState); + return false; + } else { + setState(SaveOKState); + return true; + } + } + + } + + return false; + + } +private: + Kate::Document *m_document; +}; + +KateSaveModifiedDialog::KateSaveModifiedDialog(QWidget *parent, QPtrList documents): + KDialogBase( parent, "KateSaveModifiedDialog", true, i18n("Save Documents"), Yes | No | Cancel) { + + KGuiItem saveItem=KStdGuiItem::save(); + saveItem.setText(i18n("&Save Selected")); + setButtonGuiItem(KDialogBase::Yes,saveItem); + + setButtonGuiItem(KDialogBase::No,KStdGuiItem::dontSave()); + + KGuiItem cancelItem=KStdGuiItem::cancel(); + cancelItem.setText(i18n("&Abort Closing")); + setButtonGuiItem(KDialogBase::Cancel,cancelItem); + + QVBox *box=makeVBoxMainWidget(); + new KActiveLabel(i18n("The following documents have been modified. Do you want to save them before closing?"),box); + m_list=new KListView(box); + m_list->addColumn(i18n("Title")); + m_list->addColumn(i18n("Location")); + m_list->setRootIsDecorated(true); + m_list->setResizeMode(QListView::LastColumn); + if (0) { + m_projectRoot=new QListViewItem(m_list,i18n("Projects")); + } else m_projectRoot=0; + if (documents.count()>0) { + m_documentRoot=new QListViewItem(m_list,i18n("Documents")); + const uint docCnt=documents.count(); + for (uint i=0;isetOpen(true); + } else m_documentRoot=0; + //FIXME - Is this the best way? + connect(m_list, SIGNAL(clicked(QListViewItem *)), SLOT(slotItemSelected())); + connect(m_list, SIGNAL(doubleClicked(QListViewItem *)), SLOT(slotItemSelected())); + connect(m_list, SIGNAL(spacePressed(QListViewItem *)), SLOT(slotItemSelected())); + if(documents.count()>3) { //For 3 or less, it would be quicker just to tick or untick them yourself, so don't clutter the gui. + connect(new QPushButton(i18n("Se&lect All"),box),SIGNAL(clicked()),this,SLOT(slotSelectAll())); + } +} + +KateSaveModifiedDialog::~KateSaveModifiedDialog() { +} + +void KateSaveModifiedDialog::slotItemSelected() { + kdDebug(13001) << "slotItemSelected()" << endl; + + for(QListViewItem *it=m_documentRoot->firstChild();it;it=it->nextSibling()) { + if(((QCheckListItem*)it)->isOn()) { + enableButton(KDialogBase::Yes, true); + return; + } + } + enableButton(KDialogBase::Yes, false); +} + +static void selectItems(QListViewItem *root) { + if (!root) return; + for (QListViewItem *it=root->firstChild();it;it=it->nextSibling()) { + ((QCheckListItem*)it)->setOn(true); + } +} + +void KateSaveModifiedDialog::slotSelectAll() { + selectItems(m_documentRoot); + slotItemSelected(); +} + + +void KateSaveModifiedDialog::slotUser2() { + kdDebug(13001)<<"KateSaveModifiedDialog::slotYes()"<firstChild();it;it=it->nextSibling()) { + AbstractKateSaveModifiedDialogCheckListItem *cit= (AbstractKateSaveModifiedDialogCheckListItem*)it; + if (cit->isOn() && (cit->state()!=AbstractKateSaveModifiedDialogCheckListItem::SaveOKState)) { + if (!cit->synchronousSave(this /*perhaps that should be the kate mainwindow*/)) { + KMessageBox::sorry( this, i18n("Data you requested to be saved could not be written. Please choose how you want to proceed.")); + return false; + } + } else if ((!cit->isOn()) && (cit->state()==AbstractKateSaveModifiedDialogCheckListItem::SaveFailedState)) { + cit->setState(AbstractKateSaveModifiedDialogCheckListItem::InitialState); + } + + } + } + return true; +} + +bool KateSaveModifiedDialog::queryClose(QWidget *parent,QPtrList documents) { + KateSaveModifiedDialog d(parent,documents); + return (d.exec()!=QDialog::Rejected); +} diff --git a/kate/app/katesavemodifieddialog.h b/kate/app/katesavemodifieddialog.h new file mode 100644 index 000000000..65817356b --- /dev/null +++ b/kate/app/katesavemodifieddialog.h @@ -0,0 +1,48 @@ +/* This file is part of the KDE project + Copyright (C) 2004 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_SAVE_MODIFIED_DIALOG_ +#define _KATE_SAVE_MODIFIED_DIALOG_ + +#include +#include + +class QListViewItem; +class KListView; + +class KateSaveModifiedDialog: public KDialogBase { + Q_OBJECT +public: + KateSaveModifiedDialog(QWidget *parent, QPtrList documents); + virtual ~KateSaveModifiedDialog(); + static bool queryClose(QWidget *parent,QPtrList documents); +protected: + virtual void slotUser2(); + virtual void slotUser1(); + bool doSave(QListViewItem *root); +protected slots: + void slotSelectAll(); + void slotItemSelected(); + +private: + QListViewItem *m_projectRoot; + QListViewItem *m_documentRoot; + KListView *m_list; +}; + +#endif diff --git a/kate/app/katesession.cpp b/kate/app/katesession.cpp new file mode 100644 index 000000000..0d208c566 --- /dev/null +++ b/kate/app/katesession.cpp @@ -0,0 +1,920 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katesession.h" +#include "katesession.moc" + +#include "kateapp.h" +#include "katemainwindow.h" +#include "katedocmanager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +bool operator<( const KateSession::Ptr& a, const KateSession::Ptr& b ) +{ + return a->sessionName().lower() < b->sessionName().lower(); +} + +KateSession::KateSession (KateSessionManager *manager, const QString &fileName, const QString &name) + : m_sessionFileRel (fileName) + , m_sessionName (name) + , m_documents (0) + , m_manager (manager) + , m_readConfig (0) + , m_writeConfig (0) +{ + init (); +} + +void KateSession::init () +{ + // given file exists, use it to load some stuff ;) + if (!m_sessionFileRel.isEmpty() && KGlobal::dirs()->exists(sessionFile ())) + { + KSimpleConfig config (sessionFile (), true); + + if (m_sessionName.isEmpty()) + { + // get the name out of the file + if (m_sessionFileRel == "default.katesession") + m_sessionName = i18n("Default Session"); + else + { + config.setGroup ("General"); + m_sessionName = config.readEntry ("Name", i18n ("Unnamed Session")); + } + } + + // get the document count + config.setGroup ("Open Documents"); + m_documents = config.readUnsignedNumEntry("Count", 0); + + return; + } + + // filename not empty, create the file + // anders: When will this ever happen??? + if (!m_sessionFileRel.isEmpty()) + { + kdDebug(13001)<<"Kate::Session: initializing unexisting file!"<sessionsDir() + "/" + m_sessionFileRel; +} + +bool KateSession::create (const QString &name, bool force) +{ + if (!force && (name.isEmpty() || !m_sessionFileRel.isEmpty())) + return false; + + delete m_writeConfig; + m_writeConfig = 0; + + delete m_readConfig; + m_readConfig = 0; + + m_sessionName = name; + + // get a usable filename + int s = time(0); + QCString tname; + while (true) + { + tname.setNum (s++); + KMD5 md5 (tname); + m_sessionFileRel = QString ("%1.katesession").arg (md5.hexDigest().data()); + + if (!KGlobal::dirs()->exists(sessionFile ())) + break; + } + + // create the file, write name to it! + KSimpleConfig config (sessionFile ()); + config.setGroup ("General"); + config.writeEntry ("Name", m_sessionName); + config.sync (); + + // reinit ourselfs ;) + init (); + + return true; +} + +bool KateSession::rename (const QString &name) +{ + if (name.isEmpty () || m_sessionFileRel.isEmpty() || m_sessionFileRel == "default.katesession") + return false; + + m_sessionName = name; + + KConfig config (sessionFile (), false, false); + config.setGroup ("General"); + config.writeEntry ("Name", m_sessionName); + config.sync (); + + return true; +} + +KConfig *KateSession::configRead () +{ + if (m_sessionFileRel.isEmpty()) + return 0; + + if (m_readConfig) + return m_readConfig; + + return m_readConfig = new KSimpleConfig (sessionFile (), true); +} + +KConfig *KateSession::configWrite () +{ + if (m_sessionFileRel.isEmpty()) + return 0; + + if (m_writeConfig) + return m_writeConfig; + + m_writeConfig = new KSimpleConfig (sessionFile ()); + m_writeConfig->setGroup ("General"); + m_writeConfig->writeEntry ("Name", m_sessionName); + + return m_writeConfig; +} + +KateSessionManager::KateSessionManager (QObject *parent) + : QObject (parent) + , m_sessionsDir (locateLocal( "data", "kate/sessions")) + , m_activeSession (new KateSession (this, "", "")) +{ + kdDebug() << "LOCAL SESSION DIR: " << m_sessionsDir << endl; + + // create dir if needed + KGlobal::dirs()->makeDir (m_sessionsDir); +} + +KateSessionManager::~KateSessionManager() +{ +} + +KateSessionManager *KateSessionManager::self() +{ + return KateApp::self()->sessionManager (); +} + +void KateSessionManager::dirty (const QString &) +{ + updateSessionList (); +} + +void KateSessionManager::updateSessionList () +{ + m_sessionList.clear (); + + // Let's get a list of all session we have atm + QDir dir (m_sessionsDir, "*.katesession"); + + bool foundDefault = false; + for (unsigned int i=0; i < dir.count(); ++i) + { + KateSession *session = new KateSession (this, dir[i], ""); + m_sessionList.append (session); + + kdDebug () << "FOUND SESSION: " << session->sessionName() << " FILE: " << session->sessionFile() << endl; + + if (!foundDefault && (dir[i] == "default.katesession")) + foundDefault = true; + } + + // add default session, if not there + if (!foundDefault) + m_sessionList.append (new KateSession (this, "default.katesession", i18n("Default Session"))); + + qHeapSort(m_sessionList); +} + +void KateSessionManager::activateSession (KateSession::Ptr session, bool closeLast, bool saveLast, bool loadNew) +{ + // don't reload. + // ### comparing the pointers directly is b0rk3d :( + if ( ! session->sessionName().isEmpty() && session->sessionName() == m_activeSession->sessionName() ) + return; + // try to close last session + if (closeLast) + { + if (KateApp::self()->activeMainWindow()) + { + if (!KateApp::self()->activeMainWindow()->queryClose_internal()) + return; + } + } + + // save last session or not? + if (saveLast) + saveActiveSession (true); + + // really close last + if (closeLast) + { + KateDocManager::self()->closeAllDocuments (); + } + + // set the new session + m_activeSession = session; + + if (loadNew) + { + // open the new session + Kate::Document::setOpenErrorDialogsActivated (false); + + KConfig *sc = activeSession()->configRead(); + + if (sc) + KateApp::self()->documentManager()->restoreDocumentList (sc); + + // if we have no session config object, try to load the default + // (anonymous/unnamed sessions) + if ( ! sc ) + sc = new KSimpleConfig( sessionsDir() + "/default.katesession" ); + + // window config + if (sc) + { + KConfig *c = KateApp::self()->config(); + c->setGroup("General"); + + if (c->readBoolEntry("Restore Window Configuration", true)) + { + // a new, named session, read settings of the default session. + if ( ! sc->hasGroup("Open MainWindows") ) + sc = new KSimpleConfig( sessionsDir() + "/default.katesession" ); + + sc->setGroup ("Open MainWindows"); + unsigned int wCount = sc->readUnsignedNumEntry("Count", 1); + + for (unsigned int i=0; i < wCount; ++i) + { + if (i >= KateApp::self()->mainWindows()) + { + KateApp::self()->newMainWindow(sc, QString ("MainWindow%1").arg(i)); + } + else + { + sc->setGroup(QString ("MainWindow%1").arg(i)); + KateApp::self()->mainWindow(i)->readProperties (sc); + } + } + + if (wCount > 0) + { + while (wCount < KateApp::self()->mainWindows()) + { + KateMainWindow *w = KateApp::self()->mainWindow(KateApp::self()->mainWindows()-1); + KateApp::self()->removeMainWindow (w); + delete w; + } + } + } + } + + Kate::Document::setOpenErrorDialogsActivated (true); + } +} + +KateSession::Ptr KateSessionManager::createSession (const QString &name) +{ + KateSession::Ptr s = new KateSession (this, "", ""); + s->create (name); + + return s; +} + +KateSession::Ptr KateSessionManager::giveSession (const QString &name) +{ + if (name.isEmpty()) + return new KateSession (this, "", ""); + + updateSessionList(); + + for (unsigned int i=0; i < m_sessionList.count(); ++i) + { + if (m_sessionList[i]->sessionName() == name) + return m_sessionList[i]; + } + + return createSession (name); +} + +bool KateSessionManager::saveActiveSession (bool tryAsk, bool rememberAsLast) +{ + if (tryAsk) + { + // app config + KConfig *c = KateApp::self()->config(); + c->setGroup("General"); + + QString sesExit (c->readEntry ("Session Exit", "save")); + + if (sesExit == "discard") + return true; + + if (sesExit == "ask") + { + KDialogBase* dlg = new KDialogBase(i18n ("Save Session?") + , KDialogBase::Yes | KDialogBase::No + , KDialogBase::Yes, KDialogBase::No + ); + + bool dontAgain = false; + int res = KMessageBox::createKMessageBox(dlg, QMessageBox::Question, + i18n("Save current session?"), QStringList(), + i18n("Do not ask again"), &dontAgain, KMessageBox::Notify); + + // remember to not ask again with right setting + if (dontAgain) + { + c->setGroup("General"); + + if (res == KDialogBase::No) + c->writeEntry ("Session Exit", "discard"); + else + c->writeEntry ("Session Exit", "save"); + } + + if (res == KDialogBase::No) + return true; + } + } + + KConfig *sc = activeSession()->configWrite(); + + if (!sc) + return false; + + KateDocManager::self()->saveDocumentList (sc); + + sc->setGroup ("Open MainWindows"); + sc->writeEntry ("Count", KateApp::self()->mainWindows ()); + + // save config for all windows around ;) + for (unsigned int i=0; i < KateApp::self()->mainWindows (); ++i ) + { + sc->setGroup(QString ("MainWindow%1").arg(i)); + KateApp::self()->mainWindow(i)->saveProperties (sc); + } + + sc->sync(); + + if (rememberAsLast) + { + KConfig *c = KateApp::self()->config(); + c->setGroup("General"); + c->writeEntry ("Last Session", activeSession()->sessionFileRelative()); + c->sync (); + } + + return true; +} + +bool KateSessionManager::chooseSession () +{ + bool success = true; + + // app config + KConfig *c = KateApp::self()->config(); + c->setGroup("General"); + + // get last used session, default to default session + QString lastSession (c->readEntry ("Last Session", "default.katesession")); + QString sesStart (c->readEntry ("Startup Session", "manual")); + + // uhh, just open last used session, show no chooser + if (sesStart == "last") + { + activateSession (new KateSession (this, lastSession, ""), false, false); + return success; + } + + // start with empty new session + if (sesStart == "new") + { + activateSession (new KateSession (this, "", ""), false, false); + return success; + } + + KateSessionChooser *chooser = new KateSessionChooser (0, lastSession); + + bool retry = true; + int res = 0; + while (retry) + { + res = chooser->exec (); + + switch (res) + { + case KateSessionChooser::resultOpen: + { + KateSession::Ptr s = chooser->selectedSession (); + + if (!s) + { + KMessageBox::error (chooser, i18n("No session selected to open."), i18n ("No Session Selected")); + break; + } + + activateSession (s, false, false); + retry = false; + break; + } + + // exit the app lateron + case KateSessionChooser::resultQuit: + success = false; + retry = false; + break; + + default: + activateSession (new KateSession (this, "", ""), false, false); + retry = false; + break; + } + } + + // write back our nice boolean :) + if (success && chooser->reopenLastSession ()) + { + c->setGroup("General"); + + if (res == KateSessionChooser::resultOpen) + c->writeEntry ("Startup Session", "last"); + else if (res == KateSessionChooser::resultNew) + c->writeEntry ("Startup Session", "new"); + + c->sync (); + } + + delete chooser; + + return success; +} + +void KateSessionManager::sessionNew () +{ + activateSession (new KateSession (this, "", "")); +} + +void KateSessionManager::sessionOpen () +{ + KateSessionOpenDialog *chooser = new KateSessionOpenDialog (0); + + int res = chooser->exec (); + + if (res == KateSessionOpenDialog::resultCancel) + { + delete chooser; + return; + } + + KateSession::Ptr s = chooser->selectedSession (); + + if (s) + activateSession (s); + + delete chooser; +} + +void KateSessionManager::sessionSave () +{ + // if the active session is valid, just save it :) + if (saveActiveSession ()) + return; + + bool ok = false; + QString name = KInputDialog::getText (i18n("Specify Name for Current Session"), i18n("Session name:"), "", &ok); + + if (!ok) + return; + + if (name.isEmpty()) + { + KMessageBox::error (0, i18n("To save a new session, you must specify a name."), i18n ("Missing Session Name")); + return; + } + + activeSession()->create (name); + saveActiveSession (); +} + +void KateSessionManager::sessionSaveAs () +{ + bool ok = false; + QString name = KInputDialog::getText (i18n("Specify New Name for Current Session"), i18n("Session name:"), "", &ok); + + if (!ok) + return; + + if (name.isEmpty()) + { + KMessageBox::error (0, i18n("To save a session, you must specify a name."), i18n ("Missing Session Name")); + return; + } + + activeSession()->create (name, true); + saveActiveSession (); +} + + +void KateSessionManager::sessionManage () +{ + KateSessionManageDialog *dlg = new KateSessionManageDialog (0); + + dlg->exec (); + + delete dlg; +} + +//BEGIN CHOOSER DIALOG + +class KateSessionChooserItem : public QListViewItem +{ + public: + KateSessionChooserItem (KListView *lv, KateSession::Ptr s) + : QListViewItem (lv, s->sessionName()) + , session (s) + { + QString docs; + docs.setNum (s->documents()); + setText (1, docs); + } + + KateSession::Ptr session; +}; + +KateSessionChooser::KateSessionChooser (QWidget *parent, const QString &lastSession) + : KDialogBase ( parent + , "" + , true + , i18n ("Session Chooser") + , KDialogBase::User1 | KDialogBase::User2 | KDialogBase::User3 + , KDialogBase::User2 + , true + , KStdGuiItem::quit () + , KGuiItem (i18n ("Open Session"), "fileopen") + , KGuiItem (i18n ("New Session"), "filenew") + ) +{ + QHBox *page = new QHBox (this); + page->setMinimumSize (400, 200); + setMainWidget(page); + + QHBox *hb = new QHBox (page); + hb->setSpacing (KDialog::spacingHint()); + + QLabel *label = new QLabel (hb); + label->setPixmap (UserIcon("sessionchooser")); + label->setFrameStyle (QFrame::Panel | QFrame::Sunken); + + QVBox *vb = new QVBox (hb); + vb->setSpacing (KDialog::spacingHint()); + + m_sessions = new KListView (vb); + m_sessions->addColumn (i18n("Session Name")); + m_sessions->addColumn (i18n("Open Documents")); + m_sessions->setResizeMode (QListView::AllColumns); + m_sessions->setSelectionMode (QListView::Single); + m_sessions->setAllColumnsShowFocus (true); + + connect (m_sessions, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); + connect (m_sessions, SIGNAL(doubleClicked(QListViewItem *, const QPoint &, int)), this, SLOT(slotUser2())); + + KateSessionList &slist (KateSessionManager::self()->sessionList()); + for (unsigned int i=0; i < slist.count(); ++i) + { + KateSessionChooserItem *item = new KateSessionChooserItem (m_sessions, slist[i]); + + if (slist[i]->sessionFileRelative() == lastSession) + m_sessions->setSelected (item, true); + } + + m_useLast = new QCheckBox (i18n ("&Always use this choice"), vb); + + setResult (resultNone); + + // trigger action update + selectionChanged (); +} + +KateSessionChooser::~KateSessionChooser () +{ +} + +KateSession::Ptr KateSessionChooser::selectedSession () +{ + KateSessionChooserItem *item = (KateSessionChooserItem *) m_sessions->selectedItem (); + + if (!item) + return 0; + + return item->session; +} + +bool KateSessionChooser::reopenLastSession () +{ + return m_useLast->isChecked (); +} + +void KateSessionChooser::slotUser2 () +{ + done (resultOpen); +} + +void KateSessionChooser::slotUser3 () +{ + done (resultNew); +} + +void KateSessionChooser::slotUser1 () +{ + done (resultQuit); +} + +void KateSessionChooser::selectionChanged () +{ + enableButton (KDialogBase::User2, m_sessions->selectedItem ()); +} + +//END CHOOSER DIALOG + +//BEGIN OPEN DIALOG + +KateSessionOpenDialog::KateSessionOpenDialog (QWidget *parent) + : KDialogBase ( parent + , "" + , true + , i18n ("Open Session") + , KDialogBase::User1 | KDialogBase::User2 + , KDialogBase::User2 + , false + , KStdGuiItem::cancel () + , KGuiItem( i18n("&Open"), "fileopen") + ) +{ + QHBox *page = new QHBox (this); + page->setMinimumSize (400, 200); + setMainWidget(page); + + QHBox *hb = new QHBox (page); + + QVBox *vb = new QVBox (hb); + + m_sessions = new KListView (vb); + m_sessions->addColumn (i18n("Session Name")); + m_sessions->addColumn (i18n("Open Documents")); + m_sessions->setResizeMode (QListView::AllColumns); + m_sessions->setSelectionMode (QListView::Single); + m_sessions->setAllColumnsShowFocus (true); + + connect (m_sessions, SIGNAL(doubleClicked(QListViewItem *, const QPoint &, int)), this, SLOT(slotUser2())); + + KateSessionList &slist (KateSessionManager::self()->sessionList()); + for (unsigned int i=0; i < slist.count(); ++i) + { + new KateSessionChooserItem (m_sessions, slist[i]); + } + + setResult (resultCancel); +} + +KateSessionOpenDialog::~KateSessionOpenDialog () +{ +} + +KateSession::Ptr KateSessionOpenDialog::selectedSession () +{ + KateSessionChooserItem *item = (KateSessionChooserItem *) m_sessions->selectedItem (); + + if (!item) + return 0; + + return item->session; +} + +void KateSessionOpenDialog::slotUser1 () +{ + done (resultCancel); +} + +void KateSessionOpenDialog::slotUser2 () +{ + done (resultOk); +} + +//END OPEN DIALOG + +//BEGIN MANAGE DIALOG + +KateSessionManageDialog::KateSessionManageDialog (QWidget *parent) + : KDialogBase ( parent + , "" + , true + , i18n ("Manage Sessions") + , KDialogBase::User1 + , KDialogBase::User1 + , false + , KStdGuiItem::close () + ) +{ + QHBox *page = new QHBox (this); + page->setMinimumSize (400, 200); + setMainWidget(page); + + QHBox *hb = new QHBox (page); + hb->setSpacing (KDialog::spacingHint()); + + m_sessions = new KListView (hb); + m_sessions->addColumn (i18n("Session Name")); + m_sessions->addColumn (i18n("Open Documents")); + m_sessions->setResizeMode (QListView::AllColumns); + m_sessions->setSelectionMode (QListView::Single); + m_sessions->setAllColumnsShowFocus (true); + + connect (m_sessions, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); + + updateSessionList (); + + QWidget *vb = new QWidget (hb); + QVBoxLayout *vbl = new QVBoxLayout (vb); + vbl->setSpacing (KDialog::spacingHint()); + + m_rename = new KPushButton (i18n("&Rename..."), vb); + connect (m_rename, SIGNAL(clicked()), this, SLOT(rename())); + vbl->addWidget (m_rename); + + m_del = new KPushButton (KStdGuiItem::del (), vb); + connect (m_del, SIGNAL(clicked()), this, SLOT(del())); + vbl->addWidget (m_del); + + vbl->addStretch (); + + // trigger action update + selectionChanged (); +} + +KateSessionManageDialog::~KateSessionManageDialog () +{ +} + +void KateSessionManageDialog::slotUser1 () +{ + done (0); +} + + +void KateSessionManageDialog::selectionChanged () +{ + KateSessionChooserItem *item = (KateSessionChooserItem *) m_sessions->selectedItem (); + + m_rename->setEnabled (item && item->session->sessionFileRelative() != "default.katesession"); + m_del->setEnabled (item && item->session->sessionFileRelative() != "default.katesession"); +} + +void KateSessionManageDialog::rename () +{ + KateSessionChooserItem *item = (KateSessionChooserItem *) m_sessions->selectedItem (); + + if (!item || item->session->sessionFileRelative() == "default.katesession") + return; + + bool ok = false; + QString name = KInputDialog::getText (i18n("Specify New Name for Session"), i18n("Session name:"), item->session->sessionName(), &ok); + + if (!ok) + return; + + if (name.isEmpty()) + { + KMessageBox::error (0, i18n("To save a session, you must specify a name."), i18n ("Missing Session Name")); + return; + } + + item->session->rename (name); + updateSessionList (); +} + +void KateSessionManageDialog::del () +{ + KateSessionChooserItem *item = (KateSessionChooserItem *) m_sessions->selectedItem (); + + if (!item || item->session->sessionFileRelative() == "default.katesession") + return; + + QFile::remove (item->session->sessionFile()); + KateSessionManager::self()->updateSessionList (); + updateSessionList (); +} + +void KateSessionManageDialog::updateSessionList () +{ + m_sessions->clear (); + + KateSessionList &slist (KateSessionManager::self()->sessionList()); + for (unsigned int i=0; i < slist.count(); ++i) + { + new KateSessionChooserItem (m_sessions, slist[i]); + } +} + +//END MANAGE DIALOG + + +KateSessionsAction::KateSessionsAction(const QString& text, QObject* parent, const char* name ) + : KActionMenu(text, parent, name) +{ + connect(popupMenu(),SIGNAL(aboutToShow()),this,SLOT(slotAboutToShow())); +} + +void KateSessionsAction::slotAboutToShow() +{ + popupMenu()->clear (); + + KateSessionList &slist (KateSessionManager::self()->sessionList()); + for (unsigned int i=0; i < slist.count(); ++i) + { + popupMenu()->insertItem ( + slist[i]->sessionName(), + this, SLOT (openSession (int)), 0, + i ); + } +} + +void KateSessionsAction::openSession (int i) +{ + KateSessionList &slist (KateSessionManager::self()->sessionList()); + + if ((uint)i >= slist.count()) + return; + + KateSessionManager::self()->activateSession(slist[(uint)i]); +} +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/app/katesession.h b/kate/app/katesession.h new file mode 100644 index 000000000..899daff53 --- /dev/null +++ b/kate/app/katesession.h @@ -0,0 +1,418 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_SESSION_H__ +#define __KATE_SESSION_H__ + +#include "katemain.h" + +#include +#include +#include +#include + +#include +#include + +class KateSessionManager; + +class KDirWatch; +class KListView; +class KPushButton; + +class QCheckBox; + +class KateSession : public KShared +{ + public: + /** + * Define a Shared-Pointer type + */ + typedef KSharedPtr Ptr; + + public: + /** + * create a session from given file + * @param fileName session filename, relative + * @param name session name + * @param manager pointer to the manager + */ + KateSession (KateSessionManager *manager, const QString &fileName, const QString &name); + + /** + * init the session object, after construction or create + */ + void init (); + + /** + * destruct me + */ + ~KateSession (); + + /** + * session filename, absolute, calculated out of relative filename + session dir + * @return absolute path to session file + */ + QString sessionFile () const; + + /** + * relative session filename + * @return relative filename for this session + */ + const QString &sessionFileRelative () const { return m_sessionFileRel; } + + /** + * session name + * @return name for this session + */ + const QString &sessionName () const { return m_sessionName; } + + /** + * is this a valid session? if not, don't use any session if this is + * the active one + */ + bool isNew () const { return m_sessionName.isEmpty(); } + + /** + * create the session file, if not existing + * @param name name for this session + * @param force force to create new file + * @return true if created, false if no creation needed + */ + bool create (const QString &name, bool force = false); + + /** + * rename this session + * @param name new name + * @return success + */ + bool rename (const QString &name); + + /** + * config to read + * on first access, will create the config object, delete will be done automagic + * return 0 if we have no file to read config from atm + * @return config to read from + */ + KConfig *configRead (); + + /** + * config to write + * on first access, will create the config object, delete will be done automagic + * return 0 if we have no file to write config to atm + * @return config to write from + */ + KConfig *configWrite (); + + /** + * count of documents in this session + * @return documents count + */ + unsigned int documents () const { return m_documents; } + + private: + /** + * session filename, in local location we can write to + * relative filename to the session dirs :) + */ + QString m_sessionFileRel; + + /** + * session name, extracted from the file, to display to the user + */ + QString m_sessionName; + + /** + * number of document of this session + */ + unsigned int m_documents; + + /** + * KateSessionMananger + */ + KateSessionManager *m_manager; + + /** + * simpleconfig to read from + */ + KSimpleConfig *m_readConfig; + + /** + * simpleconfig to write to + */ + KSimpleConfig *m_writeConfig; +}; + +typedef QValueList KateSessionList; + +class KateSessionManager : public QObject +{ + Q_OBJECT + + public: + KateSessionManager(QObject *parent); + ~KateSessionManager(); + + /** + * allow access to this :) + * @return instance of the session manager + */ + static KateSessionManager *self(); + + /** + * allow access to the session list + * kept up to date by watching the dir + */ + inline KateSessionList & sessionList () { updateSessionList (); return m_sessionList; } + + /** + * activate a session + * first, it will look if a session with this name exists in list + * if yes, it will use this session, else it will create a new session file + * @param session session to activate + * @param closeLast try to close last session or not? + * @param saveLast try to save last session or not? + * @param loadNew load new session stuff? + */ + void activateSession (KateSession::Ptr session, bool closeLast = true, bool saveLast = true, bool loadNew = true); + + /** + * create a new session + * @param name session name + */ + KateSession::Ptr createSession (const QString &name); + + /** + * return session with given name + * if no existing session matches, create new one with this name + * @param name session name + */ + KateSession::Ptr giveSession (const QString &name); + + /** + * save current session + * for sessions without filename: save nothing + * @param tryAsk should we ask user if needed? + * @param rememberAsLast remember this session as last used? + * @return success + */ + bool saveActiveSession (bool tryAsk = false, bool rememberAsLast = false); + + /** + * return the current active session + * sessionFile == empty means we have no session around for this instance of kate + * @return session active atm + */ + inline KateSession::Ptr activeSession () { return m_activeSession; } + + /** + * session dir + * @return global session dir + */ + inline const QString &sessionsDir () const { return m_sessionsDir; } + + /** + * initial session chooser, on app start + * @return success, if false, app should exit + */ + bool chooseSession (); + + public slots: + /** + * try to start a new session + * asks user first for name + */ + void sessionNew (); + + /** + * try to open a existing session + */ + void sessionOpen (); + + /** + * try to save current session + */ + void sessionSave (); + + /** + * try to save as current session + */ + void sessionSaveAs (); + + /** + * show dialog to manage our sessions + */ + void sessionManage (); + + private slots: + void dirty (const QString &path); + + public: + /** + * trigger update of session list + */ + void updateSessionList (); + + private: + /** + * absolute path to dir in home dir where to store the sessions + */ + QString m_sessionsDir; + + /** + * list of current available sessions + */ + KateSessionList m_sessionList; + + /** + * current active session + */ + KateSession::Ptr m_activeSession; +}; + +class KateSessionChooser : public KDialogBase +{ + Q_OBJECT + + public: + KateSessionChooser (QWidget *parent, const QString &lastSession); + ~KateSessionChooser (); + + KateSession::Ptr selectedSession (); + + bool reopenLastSession (); + + enum { + resultQuit = QDialog::Rejected, + resultOpen, + resultNew, + resultNone + }; + + protected slots: + /** + * open session + */ + void slotUser1 (); + + /** + * new session + */ + void slotUser2 (); + + /** + * quit kate + */ + void slotUser3 (); + + /** + * selection has changed + */ + void selectionChanged (); + + private: + KListView *m_sessions; + QCheckBox *m_useLast; +}; + +class KateSessionOpenDialog : public KDialogBase +{ + Q_OBJECT + + public: + KateSessionOpenDialog (QWidget *parent); + ~KateSessionOpenDialog (); + + KateSession::Ptr selectedSession (); + + enum { + resultOk, + resultCancel + }; + + protected slots: + /** + * cancel pressed + */ + void slotUser1 (); + + /** + * ok pressed + */ + void slotUser2 (); + + private: + KListView *m_sessions; +}; + +class KateSessionManageDialog : public KDialogBase +{ + Q_OBJECT + + public: + KateSessionManageDialog (QWidget *parent); + ~KateSessionManageDialog (); + + protected slots: + /** + * close pressed + */ + void slotUser1 (); + + /** + * selection has changed + */ + void selectionChanged (); + + /** + * try to rename session + */ + void rename (); + + /** + * try to delete session + */ + void del (); + + private: + /** + * update our list + */ + void updateSessionList (); + + private: + KListView *m_sessions; + KPushButton *m_rename; + KPushButton *m_del; +}; + +class KateSessionsAction : public KActionMenu +{ + Q_OBJECT + + public: + KateSessionsAction(const QString& text, QObject* parent = 0, const char* name = 0); + ~KateSessionsAction (){;}; + + public slots: + void slotAboutToShow(); + + void openSession (int i); +}; + +#endif diff --git a/kate/app/katetabwidget.cpp b/kate/app/katetabwidget.cpp new file mode 100644 index 000000000..c24357be5 --- /dev/null +++ b/kate/app/katetabwidget.cpp @@ -0,0 +1,161 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Christoph Cullmann + Copyright (C) 2002,2003 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katetabwidget.h" +#include "katetabwidget.moc" + +#include + +//BEGIN KateTabWidget + +KateTabWidget::KateTabWidget(QWidget* parent, const char* name) + : KTabWidget(parent,name) + , m_visibility (ShowWhenMoreThanOneTab) +{ + tabBar()->hide(); + + setHoverCloseButton(true); + + connect(this, SIGNAL(closeRequest(QWidget*)), this, SLOT(closeTab(QWidget*))); +} + +KateTabWidget::~KateTabWidget() +{ +} + +void KateTabWidget::closeTab(QWidget* w) +{ + w->close(); +} + +void KateTabWidget::addTab ( QWidget * child, const QString & label ) +{ + KTabWidget::addTab(child,label); + showPage(child); + maybeShow(); +} + +void KateTabWidget::addTab ( QWidget * child, const QIconSet & iconset, const QString & label ) +{ + KTabWidget::addTab(child,iconset,label); + showPage(child); + maybeShow(); +} + +void KateTabWidget::addTab ( QWidget * child, QTab * tab ) +{ + KTabWidget::addTab(child,tab); + showPage(child); + maybeShow(); +} + +void KateTabWidget::insertTab ( QWidget * child, const QString & label, int index) +{ + KTabWidget::insertTab(child,label,index); + showPage(child); + maybeShow(); + tabBar()->repaint(); +} + +void KateTabWidget::insertTab ( QWidget * child, const QIconSet & iconset, const QString & label, int index ) +{ + KTabWidget::insertTab(child,iconset,label,index); + showPage(child); + maybeShow(); + tabBar()->repaint(); +} + +void KateTabWidget::insertTab ( QWidget * child, QTab * tab, int index) +{ + KTabWidget::insertTab(child,tab,index); + showPage(child); + maybeShow(); + tabBar()->repaint(); +} + +void KateTabWidget::removePage ( QWidget * w ) +{ + KTabWidget::removePage(w); + maybeShow(); +} + +void KateTabWidget::maybeShow() +{ + switch (m_visibility) + { + case AlwaysShowTabs: + tabBar()->show(); + + // show/hide corner widgets + if (count() == 0) + setCornerWidgetVisibility(false); + else + setCornerWidgetVisibility(true); + + break; + + case ShowWhenMoreThanOneTab: + if (count()<2) tabBar()->hide(); + else tabBar()->show(); + + // show/hide corner widgets + if (count() < 2) + setCornerWidgetVisibility(false); + else + setCornerWidgetVisibility(true); + + break; + + case NeverShowTabs: + tabBar()->hide(); + break; + } +} + +void KateTabWidget::setCornerWidgetVisibility(bool visible) +{ + // there are two corner widgets: on TopLeft and on TopTight! + + if (cornerWidget(Qt::TopLeft) ) { + if (visible) + cornerWidget(Qt::TopLeft)->show(); + else + cornerWidget(Qt::TopLeft)->hide(); + } + + if (cornerWidget(Qt::TopRight) ) { + if (visible) + cornerWidget(Qt::TopRight)->show(); + else + cornerWidget(Qt::TopRight)->hide(); + } +} + +void KateTabWidget::setTabWidgetVisibility( TabWidgetVisibility visibility ) +{ + m_visibility = visibility; + maybeShow(); +} + +KateTabWidget::TabWidgetVisibility KateTabWidget::tabWidgetVisibility( ) const +{ + return m_visibility; +} + +//END KateTabWidget diff --git a/kate/app/katetabwidget.h b/kate/app/katetabwidget.h new file mode 100644 index 000000000..765f83fdb --- /dev/null +++ b/kate/app/katetabwidget.h @@ -0,0 +1,69 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Christoph Cullmann + Copyright (C) 2002,2003 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_TABWIDGET_H__ +#define __KATE_TABWIDGET_H__ + +#include + +class KateTabWidget : public KTabWidget +{ + Q_OBJECT + + public: + enum TabWidgetVisibility { + AlwaysShowTabs = 0, + ShowWhenMoreThanOneTab = 1, + NeverShowTabs = 2 + }; + + public: + KateTabWidget(QWidget* parent, const char* name=0); + virtual ~KateTabWidget(); + + virtual void addTab ( QWidget * child, const QString & label ); + + virtual void addTab ( QWidget * child, const QIconSet & iconset, const QString & label ); + + virtual void addTab ( QWidget * child, QTab * tab ); + + virtual void insertTab ( QWidget * child, const QString & label, int index = -1 ); + + virtual void insertTab ( QWidget * child, const QIconSet & iconset, const QString & label, int index = -1 ); + + virtual void insertTab ( QWidget * child, QTab * tab, int index = -1 ); + + virtual void removePage ( QWidget * w ); + + TabWidgetVisibility tabWidgetVisibility() const; + + void setTabWidgetVisibility( TabWidgetVisibility ); + + private slots: + void closeTab(QWidget* w); + + private: + void maybeShow(); + void setCornerWidgetVisibility(bool visible); + + private: + TabWidgetVisibility m_visibility; +}; + +#endif diff --git a/kate/app/kateviewmanager.cpp b/kate/app/kateviewmanager.cpp new file mode 100644 index 000000000..39b6020ee --- /dev/null +++ b/kate/app/kateviewmanager.cpp @@ -0,0 +1,514 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +//BEGIN Includes +#include "kateviewmanager.h" +#include "kateviewmanager.moc" + +#include "katemainwindow.h" +#include "katedocmanager.h" +#include "kateviewspacecontainer.h" +#include "katetabwidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +//END Includes + +KateViewManager::KateViewManager (KateMainWindow *parent) + : QObject (parent), + showFullPath(false), m_mainWindow(parent) +{ + // while init + m_init=true; + + // some stuff for the tabwidget + m_mainWindow->tabWidget()->setTabReorderingEnabled( true ); + + // important, set them up, as we use them in other methodes + setupActions (); + + guiMergedView=0; + + m_viewManager = new Kate::ViewManager (this); + m_currentContainer=0; + connect(m_mainWindow->tabWidget(),SIGNAL(currentChanged(QWidget*)),this,SLOT(tabChanged(QWidget*))); + slotNewTab(); + tabChanged(m_mainWindow->tabWidget()->currentPage()); + + // no memleaks + m_viewSpaceContainerList.setAutoDelete(true); + + // init done + m_init=false; +} + +KateViewManager::~KateViewManager () +{ + m_viewSpaceContainerList.setAutoDelete(false); +} + +void KateViewManager::setupActions () +{ + KAction *a; + + /** + * tabbing + */ + a=new KAction ( i18n("New Tab"),"tab_new", 0, this, SLOT(slotNewTab()), + m_mainWindow->actionCollection(), "view_new_tab" ); + + m_closeTab = new KAction ( i18n("Close Current Tab"),"tab_remove",0,this,SLOT(slotCloseTab()), + m_mainWindow->actionCollection(),"view_close_tab"); + + m_activateNextTab + = new KAction( i18n( "Activate Next Tab" ), + QApplication::reverseLayout() ? KStdAccel::tabPrev() : KStdAccel::tabNext(), + this, SLOT( activateNextTab() ), m_mainWindow->actionCollection(), "view_next_tab" ); + + m_activatePrevTab + = new KAction( i18n( "Activate Previous Tab" ), + QApplication::reverseLayout() ? KStdAccel::tabNext() : KStdAccel::tabPrev(), + this, SLOT( activatePrevTab() ), m_mainWindow->actionCollection(), "view_prev_tab" ); + + /** + * view splitting + */ + a=new KAction ( i18n("Split Ve&rtical"), "view_right", CTRL+SHIFT+Key_L, this, SLOT( + slotSplitViewSpaceVert() ), m_mainWindow->actionCollection(), "view_split_vert"); + + a->setWhatsThis(i18n("Split the currently active view vertically into two views.")); + + a=new KAction ( i18n("Split &Horizontal"), "view_bottom", CTRL+SHIFT+Key_T, this, SLOT( + slotSplitViewSpaceHoriz() ), m_mainWindow->actionCollection(), "view_split_horiz"); + + a->setWhatsThis(i18n("Split the currently active view horizontally into two views.")); + + m_closeView = new KAction ( i18n("Cl&ose Current View"), "view_remove", CTRL+SHIFT+Key_R, this, + SLOT( slotCloseCurrentViewSpace() ), m_mainWindow->actionCollection(), + "view_close_current_space" ); + + m_closeView->setWhatsThis(i18n("Close the currently active splitted view")); + + goNext=new KAction(i18n("Next View"),Key_F8,this, + SLOT(activateNextView()),m_mainWindow->actionCollection(),"go_next"); + + goNext->setWhatsThis(i18n("Make the next split view the active one.")); + + goPrev=new KAction(i18n("Previous View"),SHIFT+Key_F8, this, SLOT(activatePrevView()),m_mainWindow->actionCollection(),"go_prev"); + + goPrev->setWhatsThis(i18n("Make the previous split view the active one.")); + + /** + * buttons for tabbing + */ + QToolButton *b = new QToolButton( m_mainWindow->tabWidget() ); + connect( b, SIGNAL( clicked() ), + this, SLOT( slotNewTab() ) ); + b->setIconSet( SmallIcon( "tab_new" ) ); + b->adjustSize(); + QToolTip::add(b, i18n("Open a new tab")); + m_mainWindow->tabWidget()->setCornerWidget( b, TopLeft ); + + b = m_closeTabButton = new QToolButton( m_mainWindow->tabWidget() ); + connect( b, SIGNAL( clicked() ), + this, SLOT( slotCloseTab() ) ); + b->setIconSet( SmallIcon( "tab_remove" ) ); + b->adjustSize(); + QToolTip::add(b, i18n("Close the current tab")); + m_mainWindow->tabWidget()->setCornerWidget( b, TopRight ); +} + +void KateViewManager::updateViewSpaceActions () +{ + if (!m_currentContainer) return; + + m_closeView->setEnabled (m_currentContainer->viewSpaceCount() > 1); + goNext->setEnabled (m_currentContainer->viewSpaceCount() > 1); + goPrev->setEnabled (m_currentContainer->viewSpaceCount() > 1); +} + +void KateViewManager::tabChanged(QWidget* widget) { + KateViewSpaceContainer *container=static_cast(widget->qt_cast("KateViewSpaceContainer")); + Q_ASSERT(container); + m_currentContainer=container; + + if (container) { + container->reactivateActiveView(); + + } + + m_closeTab->setEnabled(m_mainWindow->tabWidget()->count() > 1); + m_activateNextTab->setEnabled(m_mainWindow->tabWidget()->count() > 1); + m_activatePrevTab->setEnabled(m_mainWindow->tabWidget()->count() > 1); + m_closeTabButton->setEnabled (m_mainWindow->tabWidget()->count() > 1); + + updateViewSpaceActions (); +} + +void KateViewManager::slotNewTab() +{ + uint documentNumber=0; + + if (m_currentContainer) + { + if (m_currentContainer->activeView()) + documentNumber = m_currentContainer->activeView()->getDoc()->documentNumber(); + } + + KateViewSpaceContainer *container=new KateViewSpaceContainer (m_mainWindow->tabWidget(), this); + m_viewSpaceContainerList.append(container); + m_mainWindow->tabWidget()->addTab (container, ""); + + connect(container,SIGNAL(viewChanged()),this,SIGNAL(viewChanged())); + connect(container,SIGNAL(viewChanged()),m_viewManager,SIGNAL(viewChanged())); + + if (!m_init) + { + container->activateView(documentNumber); + container->setShowFullPath(showFullPath); + m_mainWindow->slotWindowActivated (); + } +} + +void KateViewManager::slotCloseTab() +{ + if (m_viewSpaceContainerList.count() <= 1) return; + if (!m_currentContainer) return; + + int pos = m_viewSpaceContainerList.find (m_currentContainer); + + if (pos == -1) + return; + + if (guiMergedView) + m_mainWindow->guiFactory()->removeClient (guiMergedView ); + + m_viewSpaceContainerList.remove (pos); + + if ((uint)pos >= m_viewSpaceContainerList.count()) + pos = m_viewSpaceContainerList.count()-1; + + tabChanged(m_viewSpaceContainerList.at (pos)); +} + +void KateViewManager::activateNextTab() +{ + if( m_mainWindow->tabWidget()->count() <= 1 ) return; + + int iTab = m_mainWindow->tabWidget()->currentPageIndex(); + + iTab++; + + if( iTab == m_mainWindow->tabWidget()->count() ) + iTab = 0; + + m_mainWindow->tabWidget()->setCurrentPage( iTab ); +} + +void KateViewManager::activatePrevTab() +{ + if( m_mainWindow->tabWidget()->count() <= 1 ) return; + + int iTab = m_mainWindow->tabWidget()->currentPageIndex(); + + iTab--; + + if( iTab == -1 ) + iTab = m_mainWindow->tabWidget()->count() - 1; + + m_mainWindow->tabWidget()->setCurrentPage( iTab ); +} + +void KateViewManager::activateSpace (Kate::View* v) +{ + if (m_currentContainer) { + m_currentContainer->activateSpace(v); + } +} + +void KateViewManager::activateView ( Kate::View *view ) { + if (m_currentContainer) { + m_currentContainer->activateView(view); + } +} + +KateViewSpace* KateViewManager::activeViewSpace () +{ + if (m_currentContainer) { + return m_currentContainer->activeViewSpace(); + } + return 0L; +} + +Kate::View* KateViewManager::activeView () +{ + if (m_currentContainer) { + return m_currentContainer->activeView(); + } + return 0L; +} + +void KateViewManager::setActiveSpace ( KateViewSpace* vs ) +{ + if (m_currentContainer) { + m_currentContainer->setActiveSpace(vs); + } + +} + +void KateViewManager::setActiveView ( Kate::View* view ) +{ + if (m_currentContainer) { + m_currentContainer->setActiveView(view); + } + +} + + +void KateViewManager::activateView( uint documentNumber ) +{ + if (m_currentContainer) { + m_currentContainer->activateView(documentNumber); + } +} + +uint KateViewManager::viewCount () +{ + uint viewCount=0; + for (uint i=0;iviewCount(); + } + return viewCount; + +} + +uint KateViewManager::viewSpaceCount () +{ + uint viewSpaceCount=0; + for (uint i=0;iviewSpaceCount(); + } + return viewSpaceCount; +} + +void KateViewManager::setViewActivationBlocked (bool block) +{ + for (uint i=0;im_blockViewCreationAndActivation=block; +} + +void KateViewManager::activateNextView() +{ + if (m_currentContainer) { + m_currentContainer->activateNextView(); + } +} + +void KateViewManager::activatePrevView() +{ + if (m_currentContainer) { + m_currentContainer->activatePrevView(); + } +} + +void KateViewManager::closeViews(uint documentNumber) +{ + for (uint i=0;icloseViews(documentNumber); + } + tabChanged(m_currentContainer); +} + +void KateViewManager::slotDocumentNew () +{ + if (m_currentContainer) m_currentContainer->createView (); +} + +void KateViewManager::slotDocumentOpen () +{ + Kate::View *cv = activeView(); + + if (cv) { + KEncodingFileDialog::Result r=KEncodingFileDialog::getOpenURLsAndEncoding( + (cv ? KTextEditor::encodingInterface(cv->document())->encoding() : Kate::Document::defaultEncoding()), + (cv ? cv->document()->url().url() : QString::null), + QString::null,m_mainWindow,i18n("Open File")); + + uint lastID = 0; + for (KURL::List::Iterator i=r.URLs.begin(); i != r.URLs.end(); ++i) + lastID = openURL( *i, r.encoding, false ); + + if (lastID > 0) + activateView (lastID); + } +} + +void KateViewManager::slotDocumentClose () +{ + // no active view, do nothing + if (!activeView()) return; + + // prevent close document if only one view alive and the document of + // it is not modified and empty !!! + if ( (KateDocManager::self()->documents() == 1) + && !activeView()->getDoc()->isModified() + && activeView()->getDoc()->url().isEmpty() + && (activeView()->getDoc()->length() == 0) ) + { + activeView()->getDoc()->closeURL(); + return; + } + + // close document + KateDocManager::self()->closeDocument (activeView()->getDoc()); +} + +uint KateViewManager::openURL (const KURL &url, const QString& encoding, bool activate, bool isTempFile ) +{ + uint id = 0; + Kate::Document *doc = KateDocManager::self()->openURL (url, encoding, &id, isTempFile ); + + if (!doc->url().isEmpty()) + m_mainWindow->fileOpenRecent->addURL( doc->url() ); + + if (activate) + activateView( id ); + + return id; +} + +void KateViewManager::openURL (const KURL &url) +{ + openURL (url, QString::null); +} + +void KateViewManager::removeViewSpace (KateViewSpace *viewspace) +{ + if (m_currentContainer) { + m_currentContainer->removeViewSpace(viewspace); + } +} + +void KateViewManager::slotCloseCurrentViewSpace() +{ + if (m_currentContainer) { + m_currentContainer->slotCloseCurrentViewSpace(); + } +} + +void KateViewManager::slotSplitViewSpaceVert() +{ + if (m_currentContainer) { + m_currentContainer->slotSplitViewSpaceVert(); + } +} + +void KateViewManager::slotSplitViewSpaceHoriz() +{ + if (m_currentContainer) { + m_currentContainer->slotSplitViewSpaceHoriz(); + } +} + +void KateViewManager::setShowFullPath( bool enable ) +{ + showFullPath=enable; + for (uint i=0;isetShowFullPath(enable); + } + m_mainWindow->slotWindowActivated (); + } + +/** + * session config functions + */ +// FIXME 3.0 - make those config goups more streamlined: "objN:objN..." +void KateViewManager::saveViewConfiguration(KConfig *config,const QString& grp) +{ + // Use the same group name for view configuration as usual for sessions. + // (When called by session manager grp is a 1-based index for the main window) + QString group = grp; + bool ok = false; + int n = group.toInt( &ok ); + if ( ok ) + group = QString( "MainWindow%1" ).arg( n-1 ); + + config->setGroup(group); + config->writeEntry("ViewSpaceContainers",m_viewSpaceContainerList.count()); + config->writeEntry("Active ViewSpaceContainer", m_mainWindow->tabWidget()->currentPageIndex()); + for (uint i=0;isaveViewConfiguration(config,group+QString(":ViewSpaceContainer-%1:").arg(i)); + } +} + +void KateViewManager::restoreViewConfiguration (KConfig *config, const QString& grp) +{ + // Use the same group name for view configuration as usual for sessions. + // (When called by session manager grp is a 1-based index for the main window) + QString group = grp; + bool ok = false; + int n = group.toInt( &ok ); + if ( ok ) + group = QString( "MainWindow%1" ).arg( n-1 ); + + config->setGroup(group); + uint tabCount=config->readNumEntry("ViewSpaceContainers",0); + int activeOne=config->readNumEntry("Active ViewSpaceContainer",0); + if (tabCount==0) return; + m_viewSpaceContainerList.at(0)->restoreViewConfiguration(config,group+QString(":ViewSpaceContainer-0:")); + for (uint i=1;irestoreViewConfiguration(config,group+QString(":ViewSpaceContainer-%1:").arg(i)); + } + + if (activeOne != m_mainWindow->tabWidget()->currentPageIndex()) + m_mainWindow->tabWidget()->setCurrentPage (activeOne); + + updateViewSpaceActions(); +} + +KateMainWindow *KateViewManager::mainWindow() { + return m_mainWindow; +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateviewmanager.h b/kate/app/kateviewmanager.h new file mode 100644 index 000000000..6eb33e9f5 --- /dev/null +++ b/kate/app/kateviewmanager.h @@ -0,0 +1,154 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_VIEWMANAGER_H__ +#define __KATE_VIEWMANAGER_H__ + +#include "katemain.h" +#include "../interfaces/viewmanager.h" + +#include +#include +#include + +class KateMainWindow; +class KateViewSpaceContainer; + +class KConfig; +class KAction; + +class QToolButton; + +class KateViewManager : public QObject +{ + Q_OBJECT + + public: + KateViewManager (KateMainWindow *parent); + ~KateViewManager (); + + Kate::ViewManager *viewManager () const { return m_viewManager; }; + + KateViewSpaceContainer *activeContainer () { return m_currentContainer; } + + QPtrList *containers() { return &m_viewSpaceContainerList; } + + void updateViewSpaceActions (); + + private: + /** + * create all actions needed for the view manager + */ + void setupActions (); + + public: + /* This will save the splitter configuration */ + void saveViewConfiguration(KConfig *config,const QString& group); + + /* restore it */ + void restoreViewConfiguration (KConfig *config,const QString& group); + + uint openURL (const KURL &url, const QString& encoding, bool activate = true, bool isTempFile=false); + + public slots: + void openURL (const KURL &url); + + private: + void removeViewSpace (KateViewSpace *viewspace); + + bool showFullPath; + + public: + Kate::View* activeView (); + KateViewSpace* activeViewSpace (); + + uint viewCount (); + uint viewSpaceCount (); + + void setViewActivationBlocked (bool block); + + public: + void closeViews(uint documentNumber); + KateMainWindow *mainWindow(); + + private slots: + void activateView ( Kate::View *view ); + void activateSpace ( Kate::View* v ); + + void tabChanged(QWidget*); + + public slots: + bool getShowFullPath() const { return showFullPath; } + + void activateView ( uint documentNumber ); + void activateView ( int documentNumber ) { activateView((uint) documentNumber); }; + + void slotDocumentNew (); + void slotDocumentOpen (); + void slotDocumentClose (); + + /** Splits the active viewspace horizontally */ + void slotSplitViewSpaceHoriz (); + /** Splits the active viewspace vertically */ + void slotSplitViewSpaceVert (); + + void slotNewTab(); + void slotCloseTab (); + void activateNextTab (); + void activatePrevTab (); + + void slotCloseCurrentViewSpace(); + + void setActiveSpace ( KateViewSpace* vs ); + void setActiveView ( Kate::View* view ); + + void setShowFullPath(bool enable); + + void activateNextView(); + void activatePrevView(); + + protected: + friend class KateViewSpaceContainer; + + QGuardedPtr guiMergedView; + + signals: + void statusChanged (Kate::View *, int, int, int, bool, int, const QString &); + void statChanged (); + void viewChanged (); + + private: + Kate::ViewManager *m_viewManager; + QPtrList m_viewSpaceContainerList; + KateViewSpaceContainer *m_currentContainer; + + KateMainWindow *m_mainWindow; + bool m_init; + + QToolButton *m_closeTabButton; + KAction *m_closeView; + KAction *m_closeTab; + KAction *m_activateNextTab; + KAction *m_activatePrevTab; + KAction *goNext; + KAction *goPrev; +}; + +#endif diff --git a/kate/app/kateviewspace.cpp b/kate/app/kateviewspace.cpp new file mode 100644 index 000000000..9efb155e4 --- /dev/null +++ b/kate/app/kateviewspace.cpp @@ -0,0 +1,422 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001, 2005 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kateviewspace.h" +#include "kateviewspace.moc" + +#include "katemainwindow.h" +#include "kateviewspacecontainer.h" +#include "katedocmanager.h" +#include "kateapp.h" +#include "katesession.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +//BEGIN KVSSBSep +/* + "KateViewSpaceStatusBarSeparator" + A 2 px line to separate the statusbar from the view. + It is here to compensate for the lack of a frame in the view, + I think Kate looks very nice this way, as QScrollView with frame + looks slightly clumsy... + Slight 3D effect. I looked for suitable QStyle props or methods, + but found none, though maybe it should use QStyle::PM_DefaultFrameWidth + for height (TRY!). + It does look a bit funny with flat styles (Light, .Net) as is, + but there are on methods to paint panel lines separately. And, + those styles tends to look funny on their own, as a light line + in a 3D frame next to a light contents widget is not functional. + Also, QStatusBar is up to now completely ignorant to style. + -anders +*/ +class KVSSBSep : public QWidget { +public: + KVSSBSep( KateViewSpace *parent=0) : QWidget(parent) + { + setFixedHeight( 2 ); + } +protected: + void paintEvent( QPaintEvent *e ) + { + QPainter p( this ); + p.setPen( colorGroup().shadow() ); + p.drawLine( e->rect().left(), 0, e->rect().right(), 0 ); + p.setPen( ((KateViewSpace*)parentWidget())->isActiveSpace() ? colorGroup().light() : colorGroup().midlight() ); + p.drawLine( e->rect().left(), 1, e->rect().right(), 1 ); + } +}; +//END KVSSBSep + +//BEGIN KateViewSpace +KateViewSpace::KateViewSpace( KateViewSpaceContainer *viewManager, + QWidget* parent, const char* name ) + : QVBox(parent, name), + m_viewManager( viewManager ) +{ + mViewList.setAutoDelete(false); + + stack = new QWidgetStack( this ); + setStretchFactor(stack, 1); + stack->setFocus(); + //sep = new KVSSBSep( this ); + mStatusBar = new KateVSStatusBar(this); + mIsActiveSpace = false; + mViewCount = 0; + + setMinimumWidth (mStatusBar->minimumWidth()); + m_group = QString::null; +} + +KateViewSpace::~KateViewSpace() +{ +} + +void KateViewSpace::polish() +{ + mStatusBar->show(); +} + +void KateViewSpace::addView(Kate::View* v, bool show) +{ + // restore the config of this view if possible + if ( !m_group.isEmpty() ) + { + QString fn = v->getDoc()->url().prettyURL(); + if ( ! fn.isEmpty() ) + { + QString vgroup = QString("%1 %2").arg(m_group).arg(fn); + + KateSession::Ptr as = KateSessionManager::self()->activeSession (); + if ( as->configRead() && as->configRead()->hasGroup( vgroup ) ) + { + as->configRead()->setGroup( vgroup ); + v->readSessionConfig ( as->configRead() ); + } + } + } + + uint id = mViewList.count(); + stack->addWidget(v, id); + if (show) { + mViewList.append(v); + showView( v ); + } + else { + Kate::View* c = mViewList.current(); + mViewList.prepend( v ); + showView( c ); + } +} + +void KateViewSpace::removeView(Kate::View* v) +{ + disconnect( v->getDoc(), SIGNAL(modifiedChanged()), + mStatusBar, SLOT(modifiedChanged()) ); + + bool active = ( v == currentView() ); + + mViewList.remove (v); + stack->removeWidget (v); + + if ( ! active ) + return; + + if (currentView() != 0L) + showView(mViewList.current()); + else if (mViewList.count() > 0) + showView(mViewList.last()); +} + +bool KateViewSpace::showView(Kate::View* v) +{ + return showView( v->getDoc()->documentNumber() ); +} + +bool KateViewSpace::showView(uint documentNumber) +{ + QPtrListIterator it (mViewList); + it.toLast(); + for( ; it.current(); --it ) { + if (((Kate::Document*)it.current()->getDoc())->documentNumber() == documentNumber) { + if ( currentView() ) + disconnect( currentView()->getDoc(), SIGNAL(modifiedChanged()), + mStatusBar, SLOT(modifiedChanged()) ); + + Kate::View* kv = it.current(); + connect( kv->getDoc(), SIGNAL(modifiedChanged()), + mStatusBar, SLOT(modifiedChanged()) ); + + mViewList.removeRef( kv ); + mViewList.append( kv ); + stack->raiseWidget( kv ); + kv->show(); + mStatusBar->modifiedChanged(); + return true; + } + } + return false; +} + + +Kate::View* KateViewSpace::currentView() +{ + if (mViewList.count() > 0) + return (Kate::View*)stack->visibleWidget(); + + return 0L; +} + +bool KateViewSpace::isActiveSpace() +{ + return mIsActiveSpace; +} + +void KateViewSpace::setActive( bool active, bool ) +{ + mIsActiveSpace = active; + + // change the statusbar palette and make sure it gets updated + QPalette pal( palette() ); + if ( ! active ) + { + pal.setColor( QColorGroup::Background, pal.active().mid() ); + pal.setColor( QColorGroup::Light, pal.active().midlight() ); + } + + mStatusBar->setPalette( pal ); + mStatusBar->update(); + //sep->update(); +} + +bool KateViewSpace::event( QEvent *e ) +{ + if ( e->type() == QEvent::PaletteChange ) + { + setActive( mIsActiveSpace ); + return true; + } + return QVBox::event( e ); +} + +void KateViewSpace::slotStatusChanged (Kate::View *view, int r, int c, int ovr, bool block, int mod, const QString &msg) +{ + if ((QWidgetStack *)view->parentWidget() != stack) + return; + mStatusBar->setStatus( r, c, ovr, block, mod, msg ); +} + +void KateViewSpace::saveConfig ( KConfig* config, int myIndex ,const QString& viewConfGrp) +{ +// kdDebug()<<"KateViewSpace::saveConfig("<setGroup (group); + config->writeEntry ("Count", mViewList.count()); + + if (currentView()) + config->writeEntry( "Active View", currentView()->getDoc()->url().prettyURL() ); + + // Save file list, includeing cursor position in this instance. + QPtrListIterator it(mViewList); + + int idx = 0; + for (; it.current(); ++it) + { + if ( !it.current()->getDoc()->url().isEmpty() ) + { + config->setGroup( group ); + config->writeEntry( QString("View %1").arg( idx ), it.current()->getDoc()->url().prettyURL() ); + + // view config, group: "ViewSpace url" + QString vgroup = QString("%1 %2").arg(group).arg(it.current()->getDoc()->url().prettyURL()); + config->setGroup( vgroup ); + it.current()->writeSessionConfig( config ); + } + + idx++; + } +} + +void KateViewSpace::modifiedOnDisc(Kate::Document *, bool, unsigned char) +{ + if ( currentView() ) + mStatusBar->updateMod( currentView()->getDoc()->isModified() ); +} + +void KateViewSpace::restoreConfig ( KateViewSpaceContainer *viewMan, KConfig* config, const QString &group ) +{ + config->setGroup (group); + QString fn = config->readEntry( "Active View" ); + + if ( !fn.isEmpty() ) + { + Kate::Document *doc = KateDocManager::self()->findDocumentByUrl (KURL(fn)); + + if (doc) + { + // view config, group: "ViewSpace url" + QString vgroup = QString("%1 %2").arg(group).arg(fn); + config->setGroup( vgroup ); + + viewMan->createView (doc); + + Kate::View *v = viewMan->activeView (); + + if (v) + v->readSessionConfig( config ); + } + } + + if (mViewList.isEmpty()) + viewMan->createView (KateDocManager::self()->document(0)); + + m_group = group; // used for restroing view configs later +} +//END KateViewSpace + +//BEGIN KateVSStatusBar +KateVSStatusBar::KateVSStatusBar ( KateViewSpace *parent, const char *name ) + : KStatusBar( parent, name ), + m_viewSpace( parent ) +{ + m_lineColLabel = new QLabel( this ); + addWidget( m_lineColLabel, 0, false ); + m_lineColLabel->setAlignment( Qt::AlignCenter ); + m_lineColLabel->installEventFilter( this ); + + m_modifiedLabel = new QLabel( QString(" "), this ); + addWidget( m_modifiedLabel, 0, false ); + m_modifiedLabel->setAlignment( Qt::AlignCenter ); + m_modifiedLabel->installEventFilter( this ); + + m_insertModeLabel = new QLabel( i18n(" INS "), this ); + addWidget( m_insertModeLabel, 0, false ); + m_insertModeLabel->setAlignment( Qt::AlignCenter ); + m_insertModeLabel->installEventFilter( this ); + + m_selectModeLabel = new QLabel( i18n(" NORM "), this ); + addWidget( m_selectModeLabel, 0, false ); + m_selectModeLabel->setAlignment( Qt::AlignCenter ); + m_selectModeLabel->installEventFilter( this ); + + m_fileNameLabel=new KSqueezedTextLabel( this ); + addWidget( m_fileNameLabel, 1, true ); + m_fileNameLabel->setMinimumSize( 0, 0 ); + m_fileNameLabel->setSizePolicy(QSizePolicy( QSizePolicy::Ignored, QSizePolicy::Fixed )); + m_fileNameLabel->setAlignment( /*Qt::AlignRight*/Qt::AlignLeft ); + m_fileNameLabel->installEventFilter( this ); + + installEventFilter( this ); + m_modPm = SmallIcon("modified"); + m_modDiscPm = SmallIcon("modonhd"); + m_modmodPm = SmallIcon("modmod"); + m_noPm = SmallIcon("null"); +} + +KateVSStatusBar::~KateVSStatusBar () +{ +} + +void KateVSStatusBar::setStatus( int r, int c, int ovr, bool block, int, const QString &msg ) +{ + m_lineColLabel->setText( + i18n(" Line: %1 Col: %2 ").arg(KGlobal::locale()->formatNumber(r+1, 0)) + .arg(KGlobal::locale()->formatNumber(c+1, 0)) ); + + if (ovr == 0) + m_insertModeLabel->setText( i18n(" R/O ") ); + else if (ovr == 1) + m_insertModeLabel->setText( i18n(" OVR ") ); + else if (ovr == 2) + m_insertModeLabel->setText( i18n(" INS ") ); + +// updateMod( mod ); + + m_selectModeLabel->setText( block ? i18n(" BLK ") : i18n(" NORM ") ); + + m_fileNameLabel->setText( msg ); +} + +void KateVSStatusBar::updateMod( bool mod ) +{ + Kate::View *v = m_viewSpace->currentView(); + if ( v ) + { + const KateDocumentInfo *info + = KateDocManager::self()->documentInfo ( v->getDoc() ); + + bool modOnHD = info && info->modifiedOnDisc; + + m_modifiedLabel->setPixmap( + mod ? + info && modOnHD ? + m_modmodPm : + m_modPm : + info && modOnHD ? + m_modDiscPm : + m_noPm + ); + } +} + +void KateVSStatusBar::modifiedChanged() +{ + Kate::View *v = m_viewSpace->currentView(); + if ( v ) + updateMod( v->getDoc()->isModified() ); +} + +void KateVSStatusBar::showMenu() +{ + KMainWindow* mainWindow = static_cast( topLevelWidget() ); + QPopupMenu* menu = static_cast( mainWindow->factory()->container("viewspace_popup", mainWindow ) ); + + if (menu) + menu->exec(QCursor::pos()); +} + +bool KateVSStatusBar::eventFilter(QObject*,QEvent *e) +{ + if (e->type()==QEvent::MouseButtonPress) + { + if ( m_viewSpace->currentView() ) + m_viewSpace->currentView()->setFocus(); + + if ( ((QMouseEvent*)e)->button()==RightButton) + showMenu(); + + return true; + } + + return false; +} +//END KateVSStatusBar +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateviewspace.h b/kate/app/kateviewspace.h new file mode 100644 index 000000000..a07b5f6da --- /dev/null +++ b/kate/app/kateviewspace.h @@ -0,0 +1,121 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_VIEWSPACE_H__ +#define __KATE_VIEWSPACE_H__ + +#include "katemain.h" + +#include +#include + +#include +#include +#include +#include + +class KVSSBSep; + +class KConfig; +class KSqueezedTextLabel; +class KateViewSpaceContainer; + +class KateVSStatusBar : public KStatusBar +{ + Q_OBJECT + + public: + KateVSStatusBar ( KateViewSpace *parent = 0L, const char *name = 0L ); + virtual ~KateVSStatusBar (); + + public slots: + void setStatus( int r, int c, int ovr, bool block, int mod, const QString &msg ); + void updateMod( bool ); + /** + * changed the modified icon according to document state. + * @since Kate 2.4 + */ + void modifiedChanged(); + + protected: + virtual bool eventFilter (QObject*,QEvent *); + virtual void showMenu (); + + private: + QLabel* m_lineColLabel; + QLabel* m_modifiedLabel; + QLabel* m_insertModeLabel; + QLabel* m_selectModeLabel; + KSqueezedTextLabel* m_fileNameLabel; + QPixmap m_modPm, m_modDiscPm, m_modmodPm, m_noPm; + class KateViewSpace *m_viewSpace; +}; + +class KateViewSpace : public QVBox +{ + friend class KateViewSpaceContainer; + friend class KateVSStatusBar; + + Q_OBJECT + + public: + KateViewSpace(KateViewSpaceContainer *, QWidget* parent=0, const char* name=0); + ~KateViewSpace(); + bool isActiveSpace(); + void setActive(bool b, bool showled=false); + QWidgetStack* stack; + void addView(Kate::View* v, bool show=true); + void removeView(Kate::View* v); + bool showView(Kate::View* v); + bool showView(uint docID); + Kate::View* currentView(); + int viewCount() const { return mViewList.count(); } + + void saveConfig (KConfig* config, int myIndex,const QString& viewConfGrp); + void restoreConfig ( class KateViewSpaceContainer *viewMan, KConfig* config, const QString &group ); + + + protected: + /** reimplemented to catch QEvent::PaletteChange, + since we use a modified palette for the statusbar */ + bool event( QEvent * ); + + private: + bool mIsActiveSpace; + KateVSStatusBar* mStatusBar; + QLabel* l; + QPixmap i_active; + QPixmap i_empty; + QPtrList mViewList; + int mViewCount; + KVSSBSep *sep; + KateViewSpaceContainer *m_viewManager; + QString m_group; + + private slots: + void slotStatusChanged (Kate::View *view, int r, int c, int ovr, bool block, int mod, const QString &msg); + + public slots: + void polish(); + void modifiedOnDisc(Kate::Document *, bool, unsigned char); +}; + +#endif +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateviewspacecontainer.cpp b/kate/app/kateviewspacecontainer.cpp new file mode 100644 index 000000000..08a3bf6f6 --- /dev/null +++ b/kate/app/kateviewspacecontainer.cpp @@ -0,0 +1,758 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +//BEGIN Includes +#include "kateviewspacecontainer.h" +#include "kateviewspacecontainer.moc" + +#include "katetabwidget.h" +#include "katemainwindow.h" +#include "katedocmanager.h" +#include "kateviewmanager.h" +#include "kateviewspace.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +//END Includes + +KateViewSpaceContainer::KateViewSpaceContainer (QWidget *parent, KateViewManager *viewManager) + : QVBox (parent) + , m_viewManager(viewManager) + , m_blockViewCreationAndActivation (false) + , m_activeViewRunning (false) + , m_pendingViewCreation(false) +{ + // no memleaks + m_viewList.setAutoDelete(true); + m_viewSpaceList.setAutoDelete(true); + + KateViewSpace* vs = new KateViewSpace( this, this ); + connect(this, SIGNAL(statusChanged(Kate::View *, int, int, int, bool, int, const QString&)), vs, SLOT(slotStatusChanged(Kate::View *, int, int, int, bool, int, const QString&))); + vs->setActive( true ); + m_viewSpaceList.append(vs); + connect( this, SIGNAL(viewChanged()), this, SLOT(slotViewChanged()) ); + connect(KateDocManager::self(), SIGNAL(initialDocumentReplaced()), this, SIGNAL(viewChanged())); + + connect(KateDocManager::self(),SIGNAL(documentCreated(Kate::Document *)),this,SLOT(documentCreated(Kate::Document *))); + connect(KateDocManager::self(),SIGNAL(documentDeleted(uint)),this,SLOT(documentDeleted(uint))); +} + +KateViewSpaceContainer::~KateViewSpaceContainer () +{ + m_viewList.setAutoDelete(false); + m_viewSpaceList.setAutoDelete(false); +} + +void KateViewSpaceContainer::documentCreated (Kate::Document *doc) +{ + if (m_blockViewCreationAndActivation) return; + + if (!activeView()) + activateView (doc->documentNumber()); +} + +void KateViewSpaceContainer::documentDeleted (uint) +{ + if (m_blockViewCreationAndActivation) return; + + // just for the case we close a document out of many and this was the active one + // if all docs are closed, this will be handled by the documentCreated + if (!activeView() && (KateDocManager::self()->documents() > 0)) + createView (KateDocManager::self()->document(KateDocManager::self()->documents()-1)); +} + +bool KateViewSpaceContainer::createView ( Kate::Document *doc ) +{ + if (m_blockViewCreationAndActivation) return false; + + // create doc + if (!doc) + doc = KateDocManager::self()->createDoc (); + + // create view + Kate::View *view = (Kate::View *) doc->createView (this, 0L); + + m_viewList.append (view); + + // disable settings dialog action + view->actionCollection()->remove (view->actionCollection()->action( "set_confdlg" )); + + // popup menu + view->installPopup ((QPopupMenu*)(mainWindow()->factory()->container("ktexteditor_popup", mainWindow())) ); + + connect(view->getDoc(),SIGNAL(nameChanged(Kate::Document *)),this,SLOT(statusMsg())); + connect(view,SIGNAL(cursorPositionChanged()),this,SLOT(statusMsg())); + connect(view,SIGNAL(newStatus()),this,SLOT(statusMsg())); + connect(view->getDoc(), SIGNAL(undoChanged()), this, SLOT(statusMsg())); + connect(view,SIGNAL(dropEventPass(QDropEvent *)), mainWindow(),SLOT(slotDropEvent(QDropEvent *))); + connect(view,SIGNAL(gotFocus(Kate::View *)),this,SLOT(activateSpace(Kate::View *))); + + activeViewSpace()->addView( view ); + activateView( view ); + connect( doc, SIGNAL(modifiedOnDisc(Kate::Document *, bool, unsigned char)), + activeViewSpace(), SLOT(modifiedOnDisc(Kate::Document *, bool, unsigned char)) ); + + return true; +} + +bool KateViewSpaceContainer::deleteView (Kate::View *view, bool delViewSpace) +{ + if (!view) return true; + + KateViewSpace *viewspace = (KateViewSpace *)view->parentWidget()->parentWidget(); + + viewspace->removeView (view); + + mainWindow()->guiFactory ()->removeClient (view); + + // remove view from list and memory !! + m_viewList.remove (view); + + if (delViewSpace) + if ( viewspace->viewCount() == 0 ) + removeViewSpace( viewspace ); + + return true; +} + +KateViewSpace* KateViewSpaceContainer::activeViewSpace () +{ + QPtrListIterator it(m_viewSpaceList); + + for (; it.current(); ++it) + { + if ( it.current()->isActiveSpace() ) + return it.current(); + } + + if (m_viewSpaceList.count() > 0) + { + m_viewSpaceList.first()->setActive( true ); + return m_viewSpaceList.first(); + } + + return 0L; +} + +Kate::View* KateViewSpaceContainer::activeView () +{ + if (m_activeViewRunning) + return 0L; + + m_activeViewRunning = true; + + for (QPtrListIterator it(m_viewList); it.current(); ++it) + { + if ( it.current()->isActive() ) + { + m_activeViewRunning = false; + return it.current(); + } + } + + // if we get to here, no view isActive() + // first, try to get one from activeViewSpace() + KateViewSpace* vs; + if ( (vs = activeViewSpace()) ) + { + if ( vs->currentView() ) + { + activateView (vs->currentView()); + + m_activeViewRunning = false; + return vs->currentView(); + } + } + + // last attempt: just pick first + if (m_viewList.count() > 0) + { + activateView (m_viewList.first()); + + m_activeViewRunning = false; + return m_viewList.first(); + } + + m_activeViewRunning = false; + + // no views exists! + return 0L; +} + +void KateViewSpaceContainer::setActiveSpace ( KateViewSpace* vs ) +{ + if (activeViewSpace()) + activeViewSpace()->setActive( false ); + + vs->setActive( true, viewSpaceCount() > 1 ); +} + +void KateViewSpaceContainer::setActiveView ( Kate::View* view ) +{ + if (activeView()) + activeView()->setActive( false ); + + view->setActive( true ); +} + +void KateViewSpaceContainer::activateSpace (Kate::View* v) +{ + if (!v) return; + + KateViewSpace* vs = (KateViewSpace*)v->parentWidget()->parentWidget(); + + if (!vs->isActiveSpace()) { + setActiveSpace (vs); + activateView(v); + } +} + +void KateViewSpaceContainer::reactivateActiveView() { + Kate::View *view=activeView(); + if (view) { + view->setActive(false); + activateView(view); + } else if (m_pendingViewCreation) { + m_pendingViewCreation=false; + disconnect(m_pendingDocument,SIGNAL(nameChanged(Kate::Document *)),this,SLOT(slotPendingDocumentNameChanged())); + createView(m_pendingDocument); + } +} + +void KateViewSpaceContainer::activateView ( Kate::View *view ) +{ + if (!view) return; + + if (!view->isActive()) + { + if ( !activeViewSpace()->showView (view) ) + { + // since it wasn't found, give'em a new one + createView ( view->getDoc() ); + return; + } + + setActiveView (view); + m_viewList.findRef (view); + + mainWindow()->toolBar ()->setUpdatesEnabled (false); + + if (m_viewManager->guiMergedView) + mainWindow()->guiFactory()->removeClient (m_viewManager->guiMergedView ); + + m_viewManager->guiMergedView = view; + + if (!m_blockViewCreationAndActivation) + mainWindow()->guiFactory ()->addClient( view ); + + mainWindow()->toolBar ()->setUpdatesEnabled (true); + + statusMsg(); + + emit viewChanged (); + } + + KateDocManager::self()->setActiveDocument(view->getDoc()); +} + +void KateViewSpaceContainer::activateView( uint documentNumber ) +{ + if ( activeViewSpace()->showView(documentNumber) ) { + activateView( activeViewSpace()->currentView() ); + } + else + { + QPtrListIterator it(m_viewList); + for ( ;it.current(); ++it) + { + if ( it.current()->getDoc()->documentNumber() == documentNumber ) + { + createView( it.current()->getDoc() ); + return; + } + } + + Kate::Document *d = (Kate::Document *)KateDocManager::self()->documentWithID(documentNumber); + createView (d); + } +} + +uint KateViewSpaceContainer::viewCount () +{ + return m_viewList.count(); +} + +uint KateViewSpaceContainer::viewSpaceCount () +{ + return m_viewSpaceList.count(); +} + +void KateViewSpaceContainer::slotViewChanged() +{ + if ( activeView() && !activeView()->hasFocus()) + activeView()->setFocus(); +} + +void KateViewSpaceContainer::activateNextView() +{ + uint i = m_viewSpaceList.find (activeViewSpace())+1; + + if (i >= m_viewSpaceList.count()) + i=0; + + setActiveSpace (m_viewSpaceList.at(i)); + activateView(m_viewSpaceList.at(i)->currentView()); +} + +void KateViewSpaceContainer::activatePrevView() +{ + int i = m_viewSpaceList.find (activeViewSpace())-1; + + if (i < 0) + i=m_viewSpaceList.count()-1; + + setActiveSpace (m_viewSpaceList.at(i)); + activateView(m_viewSpaceList.at(i)->currentView()); +} + +void KateViewSpaceContainer::closeViews(uint documentNumber) +{ + QPtrList closeList; + + for (uint z=0 ; z < m_viewList.count(); z++) + { + Kate::View* current = m_viewList.at(z); + if ( current->getDoc()->documentNumber() == documentNumber ) + { + closeList.append (current); + } + } + + while ( !closeList.isEmpty() ) + { + Kate::View *view = closeList.first(); + deleteView (view, true); + closeList.removeFirst(); + } + + if (m_blockViewCreationAndActivation) return; + QTimer::singleShot(0,this,SIGNAL(viewChanged())); + //emit m_viewManager->viewChanged (); +} + +void KateViewSpaceContainer::slotPendingDocumentNameChanged() { + QString c; + if (m_pendingDocument->url().isEmpty() || (!showFullPath)) + { + c = m_pendingDocument->docName(); + } + else + { + c = m_pendingDocument->url().prettyURL(); + } + setCaption(KStringHandler::lsqueeze(c,32)); +} + +void KateViewSpaceContainer::statusMsg () +{ + if (!activeView()) return; + + Kate::View* v = activeView(); + + bool readOnly = !v->getDoc()->isReadWrite(); + uint config = v->getDoc()->configFlags(); + + int ovr = 0; + if (readOnly) + ovr = 0; + else + { + if (config & Kate::Document::cfOvr) + { + ovr=1; + } + else + { + ovr=2; + } + } + + int mod = (int)v->getDoc()->isModified(); + bool block=v->getDoc()->blockSelectionMode(); + + QString c; + if (v->getDoc()->url().isEmpty() || (!showFullPath)) + { + c = v->getDoc()->docName(); + } + else + { + c = v->getDoc()->url().prettyURL(); + } + + m_viewManager->mainWindow()->tabWidget()->changeTab (this, KStringHandler::lsqueeze(c,32)); + emit statusChanged (v, v->cursorLine(), v->cursorColumn(), ovr,block, mod, KStringHandler::lsqueeze(c,64)); + emit statChanged (); +} + +void KateViewSpaceContainer::splitViewSpace( KateViewSpace* vs, + bool isHoriz, + bool atTop) +{ +// kdDebug(13001)<<"splitViewSpace()"<parentWidget() == this; + + QValueList psizes; + if ( ! isFirstTime ) + if ( QSplitter *ps = static_cast(vs->parentWidget()->qt_cast("QSplitter")) ) + psizes = ps->sizes(); + + Qt::Orientation o = isHoriz ? Qt::Vertical : Qt::Horizontal; + KateMDI::Splitter* s = new KateMDI::Splitter(o, vs->parentWidget()); + s->setOpaqueResize( KGlobalSettings::opaqueResize() ); + + if (! isFirstTime) { + // anders: make sure the split' viewspace is always + // correctly positioned. + // If viewSpace is the first child, the new splitter must be moveToFirst'd + if ( !((KateMDI::Splitter*)vs->parentWidget())->isLastChild( vs ) ) + ((KateMDI::Splitter*)s->parentWidget())->moveToFirst( s ); + } + vs->reparent( s, 0, QPoint(), true ); + KateViewSpace* vsNew = new KateViewSpace( this, s ); + + if (atTop) + s->moveToFirst( vsNew ); + + if (!isFirstTime) + if (QSplitter *ps = static_cast(s->parentWidget()->qt_cast("QSplitter")) ) + ps->setSizes( psizes ); + + s->show(); + + QValueList sizes; + int space = 50;//isHoriz ? s->parentWidget()->height()/2 : s->parentWidget()->width()/2; + sizes << space << space; + s->setSizes( sizes ); + + connect(this, SIGNAL(statusChanged(Kate::View *, int, int, int, bool, int, const QString &)), vsNew, SLOT(slotStatusChanged(Kate::View *, int, int,int, bool, int, const QString &))); + m_viewSpaceList.append( vsNew ); + activeViewSpace()->setActive( false ); + vsNew->setActive( true, true ); + vsNew->show(); + + createView (activeView()->getDoc()); + + if (this == m_viewManager->activeContainer()) + m_viewManager->updateViewSpaceActions (); + +// kdDebug(13001)<<"splitViewSpace() - DONE!"<parentWidget(); + + // find out if it is the first child for repositioning + // see below + bool pIsFirst = false; + + // save some size information + KateMDI::Splitter* pp=0L; + QValueList ppsizes; + if (m_viewSpaceList.count() > 2 && p->parentWidget() != this) + { + pp = (KateMDI::Splitter*)p->parentWidget(); + ppsizes = pp->sizes(); + pIsFirst = !pp->isLastChild( p ); // simple logic, right- + } + + // Figure out where to put views that are still needed + KateViewSpace* next; + if (m_viewSpaceList.find(viewspace) == 0) + next = m_viewSpaceList.next(); + else + next = m_viewSpaceList.prev(); + + // Reparent views in viewspace that are last views, delete the rest. + int vsvc = viewspace->viewCount(); + while (vsvc > 0) + { + if (viewspace->currentView()) + { + Kate::View* v = viewspace->currentView(); + + if (v->isLastView()) + { + viewspace->removeView(v); + next->addView( v, false ); + } + else + { + deleteView( v, false ); + } + } + vsvc = viewspace->viewCount(); + } + + m_viewSpaceList.remove( viewspace ); + + // reparent the other sibling of the parent. + while (p->children ()) + { + QWidget* other = ((QWidget *)(( QPtrList*)p->children())->first()); + + other->reparent( p->parentWidget(), 0, QPoint(), true ); + // We also need to find the right viewspace to become active + if (pIsFirst) + ((KateMDI::Splitter*)p->parentWidget())->moveToFirst( other ); + if ( other->isA("KateViewSpace") ) { + setActiveSpace( (KateViewSpace*)other ); + } + else { + QObjectList* l = other->queryList( "KateViewSpace" ); + if ( l->first() != 0 ) { // I REALLY hope so! + setActiveSpace( (KateViewSpace*)l->first() ); + } + delete l; + } + } + + delete p; + + if (!ppsizes.isEmpty()) + pp->setSizes( ppsizes ); + + // find the view that is now active. + Kate::View* v = activeViewSpace()->currentView(); + if ( v ) + activateView( v ); + + if (this == m_viewManager->activeContainer()) + m_viewManager->updateViewSpaceActions (); + + emit viewChanged(); +} + +void KateViewSpaceContainer::slotCloseCurrentViewSpace() +{ + removeViewSpace(activeViewSpace()); +} + +void KateViewSpaceContainer::setShowFullPath( bool enable ) +{ + showFullPath = enable; + statusMsg (); + //m_mainWindow->slotWindowActivated (); +} + +/** + * session config functions + */ + +void KateViewSpaceContainer::saveViewConfiguration(KConfig *config,const QString& group) +{ + bool weHaveSplittersAlive (viewSpaceCount() > 1); + + config->setGroup (group); //"View Configuration"); + config->writeEntry ("Splitters", weHaveSplittersAlive); + + // no splitters around + if (!weHaveSplittersAlive) + { + config->writeEntry("Active Viewspace", 0); + m_viewSpaceList.first()->saveConfig ( config, 0,group ); + + return; + } + + // I need the first splitter, the one which has this as parent. + KateMDI::Splitter* s; + QObjectList *l = queryList("KateMDI::Splitter", 0, false, false); + QObjectListIt it( *l ); + + if ( (s = (KateMDI::Splitter*)it.current()) != 0 ) + saveSplitterConfig( s, 0, config , group); + + delete l; +} + +void KateViewSpaceContainer::restoreViewConfiguration (KConfig *config, const QString& group) +{ + config->setGroup(group); + //config->setGroup ("View Configuration"); + + // no splitters around, ohhh :() + if (!config->readBoolEntry ("Splitters")) + { + // only add the new views needed, let the old stay, won't hurt if one around + m_viewSpaceList.first ()->restoreConfig (this, config, QString(group+"-ViewSpace 0")); + } + else + { + // send all views + their gui to **** ;) + for (uint i=0; i < m_viewList.count(); i++) + mainWindow()->guiFactory ()->removeClient (m_viewList.at(i)); + + m_viewList.clear (); + + // cu viewspaces + m_viewSpaceList.clear(); + + // call restoreSplitter for Splitter 0 + restoreSplitter( config, QString(group+"-Splitter 0"), this,group ); + } + + // finally, make the correct view active. + config->setGroup (group); +/* + KateViewSpace *vs = m_viewSpaceList.at( config->readNumEntry("Active ViewSpace") ); + if ( vs ) + activateSpace( vs->currentView() ); + */ +} + + +void KateViewSpaceContainer::saveSplitterConfig( KateMDI::Splitter* s, int idx, KConfig* config, const QString& viewConfGrp ) +{ + QString grp = QString(viewConfGrp+"-Splitter %1").arg(idx); + config->setGroup(grp); + + // Save sizes, orient, children for this splitter + config->writeEntry( "Sizes", s->sizes() ); + config->writeEntry( "Orientation", s->orientation() ); + + QStringList childList; + // a katesplitter has two children, of which one may be a KateSplitter. + const QObjectList* l = s->children(); + QObjectListIt it( *l ); + QObject* obj; + for (; it.current(); ++it) { + obj = it.current(); + QString n; // name for child list, see below + // For KateViewSpaces, ask them to save the file list. + if ( obj->isA("KateViewSpace") ) { + n = QString(viewConfGrp+"-ViewSpace %1").arg( m_viewSpaceList.find((KateViewSpace*)obj) ); + ((KateViewSpace*)obj)->saveConfig ( config, m_viewSpaceList.find((KateViewSpace*)obj), viewConfGrp); + // save active viewspace + if ( ((KateViewSpace*)obj)->isActiveSpace() ) { + config->setGroup(viewConfGrp); + config->writeEntry("Active Viewspace", m_viewSpaceList.find((KateViewSpace*)obj) ); + } + } + // For KateSplitters, recurse + else if ( obj->isA("KateMDI::Splitter") ) { + idx++; + saveSplitterConfig( (KateMDI::Splitter*)obj, idx, config,viewConfGrp); + n = QString(viewConfGrp+"-Splitter %1").arg( idx ); + } + // make sure list goes in right place! + if (!n.isEmpty()) { + if ( childList.count() > 0 && ! s->isLastChild( (QWidget*)obj ) ) + childList.prepend( n ); + else + childList.append( n ); + } + } + + // reset config group. + config->setGroup(grp); + config->writeEntry("Children", childList); +} + +void KateViewSpaceContainer::restoreSplitter( KConfig* config, const QString &group, QWidget* parent, const QString& viewConfGrp) +{ + config->setGroup( group ); + + KateMDI::Splitter* s = new KateMDI::Splitter((Qt::Orientation)config->readNumEntry("Orientation"), parent); + + QStringList children = config->readListEntry( "Children" ); + for (QStringList::Iterator it=children.begin(); it!=children.end(); ++it) + { + // for a viewspace, create it and open all documents therein. + if ( (*it).startsWith(viewConfGrp+"-ViewSpace") ) + { + KateViewSpace* vs = new KateViewSpace( this, s ); + + connect(this, SIGNAL(statusChanged(Kate::View *, int, int, int, bool, int, const QString &)), vs, SLOT(slotStatusChanged(Kate::View *, int, int, int, bool, int, const QString &))); + + if (m_viewSpaceList.isEmpty()) + vs->setActive (true); + + m_viewSpaceList.append( vs ); + + vs->show(); + setActiveSpace( vs ); + + vs->restoreConfig (this, config, *it); + } + else + { + // for a splitter, recurse. + restoreSplitter( config, QString(*it), s, viewConfGrp ); + } + } + + // set sizes + config->setGroup( group ); + s->setSizes( config->readIntListEntry("Sizes") ); + s->show(); +} + +KateMainWindow *KateViewSpaceContainer::mainWindow() { + return m_viewManager->mainWindow(); +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/app/kateviewspacecontainer.h b/kate/app/kateviewspacecontainer.h new file mode 100644 index 000000000..e8c64bd4e --- /dev/null +++ b/kate/app/kateviewspacecontainer.h @@ -0,0 +1,161 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_VIEWSPACE_CONTAINER_H__ +#define __KATE_VIEWSPACE_CONTAINER_H__ + +#include "katemain.h" +#include "../interfaces/viewmanager.h" + +#include +#include + +#include "katemdi.h" + +class KConfig; +class KateMainWindow; + +class KateViewSpaceContainer: public QVBox +{ + Q_OBJECT + + friend class KateViewSpace; + friend class KateVSStatusBar; + + public: + KateViewSpaceContainer (QWidget *parent, KateViewManager *viewManager); + + ~KateViewSpaceContainer (); + + inline QPtrList &viewList () { return m_viewList; }; + + public: + /* This will save the splitter configuration */ + void saveViewConfiguration(KConfig *config,const QString& group); + + /* restore it */ + void restoreViewConfiguration (KConfig *config,const QString& group); + + private: + /** + * create and activate a new view for doc, if doc == 0, then + * create a new document + */ + bool createView ( Kate::Document *doc =0L ); + + bool deleteView ( Kate::View *view, bool delViewSpace = true); + + void moveViewtoSplit (Kate::View *view); + void moveViewtoStack (Kate::View *view); + + /* Save the configuration of a single splitter. + * If child splitters are found, it calls it self with those as the argument. + * If a viewspace child is found, it is asked to save its filelist. + */ + void saveSplitterConfig(KateMDI::Splitter* s, int idx=0, KConfig* config=0L, const QString& viewConfGrp=""); + + /** Restore a single splitter. + * This is all the work is done for @see saveSplitterConfig() + */ + void restoreSplitter ( KConfig* config, const QString &group, QWidget* parent , const QString& viewConfGrp); + + void removeViewSpace (KateViewSpace *viewspace); + + bool showFullPath; + + public: + Kate::View* activeView (); + KateViewSpace* activeViewSpace (); + + uint viewCount (); + uint viewSpaceCount (); + + bool isViewActivationBlocked(){return m_blockViewCreationAndActivation;}; + + public: + void closeViews(uint documentNumber); + KateMainWindow *mainWindow(); + friend class KateViewManager; + + private slots: + void activateView ( Kate::View *view ); + void activateSpace ( Kate::View* v ); + void slotViewChanged(); + void reactivateActiveView(); + void slotPendingDocumentNameChanged(); + + void documentCreated (Kate::Document *doc); + void documentDeleted (uint docNumber); + + public slots: + /* Splits a KateViewSpace into two. + * The operation is performed by creating a KateMDI::Splitter in the parent of the KateViewSpace to be split, + * which is then moved to that splitter. Then a new KateViewSpace is created and added to the splitter, + * and a KateView is created to populate the new viewspace. The new KateView is made the active one, + * because createView() does that. + * If no viewspace is provided, the result of activeViewSpace() is used. + * The isHoriz, true pr default, decides the orientation of the splitting action. + * If atTop is true, the new viewspace will be moved to the first position in the new splitter. + * If a newViewUrl is provided, the new view will show the document in that URL if any, otherwise + * the document of the current view in the viewspace to be split is used. + */ + void splitViewSpace( KateViewSpace* vs=0L, bool isHoriz=true, bool atTop=false ); + + bool getShowFullPath() const { return showFullPath; } + + void activateView ( uint documentNumber ); + void activateView ( int documentNumber ) { activateView((uint) documentNumber); }; + + /** Splits the active viewspace horizontally */ + void slotSplitViewSpaceHoriz () { splitViewSpace(); } + /** Splits the active viewspace vertically */ + void slotSplitViewSpaceVert () { splitViewSpace( 0L, false ); } + + void slotCloseCurrentViewSpace(); + + void statusMsg (); + + void setActiveSpace ( KateViewSpace* vs ); + void setActiveView ( Kate::View* view ); + + void setShowFullPath(bool enable); + + void activateNextView(); + void activatePrevView(); + + signals: + void statusChanged (Kate::View *, int, int, int, bool, int, const QString &); + void statChanged (); + void viewChanged (); + + private: + KateViewManager *m_viewManager; + QPtrList m_viewSpaceList; + QPtrList m_viewList; + + bool m_blockViewCreationAndActivation; + + bool m_activeViewRunning; + + bool m_pendingViewCreation; + QGuardedPtr m_pendingDocument; +}; + +#endif diff --git a/kate/app/kbookmarkhandler.cpp b/kate/app/kbookmarkhandler.cpp new file mode 100644 index 000000000..ada4d7a21 --- /dev/null +++ b/kate/app/kbookmarkhandler.cpp @@ -0,0 +1,98 @@ +/* This file is part of the KDE project + Copyright (C) xxxx KFile Authors + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "katefileselector.h" + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include "kbookmarkhandler.h" +#include "kbookmarkhandler.moc" + + +KBookmarkHandler::KBookmarkHandler( KateFileSelector *parent, KPopupMenu* kpopupmenu ) + : QObject( parent, "KBookmarkHandler" ), + KBookmarkOwner(), + mParent( parent ), + m_menu( kpopupmenu ), + m_importStream( 0L ) +{ + if (!m_menu) + m_menu = new KPopupMenu( parent, "bookmark menu" ); + + QString file = locate( "data", "kate/fsbookmarks.xml" ); + if ( file.isEmpty() ) + file = locateLocal( "data", "kate/fsbookmarks.xml" ); + + KBookmarkManager *manager = KBookmarkManager::managerForFile( file, false); + manager->setUpdate( true ); + manager->setShowNSBookmarks( false ); + + m_bookmarkMenu = new KBookmarkMenu( manager, this, m_menu, 0, true ); +} + +KBookmarkHandler::~KBookmarkHandler() +{ + // delete m_bookmarkMenu; ### +} + +QString KBookmarkHandler::currentURL() const +{ + return mParent->dirOperator()->url().url(); +} + + +void KBookmarkHandler::slotNewBookmark( const QString& /*text*/, + const QCString& url, + const QString& additionalInfo ) +{ + *m_importStream << "\n"; + *m_importStream << "" << (additionalInfo.isEmpty() ? QString::fromUtf8(url) : additionalInfo) << "\n\n"; +} + +void KBookmarkHandler::slotNewFolder( const QString& text, bool /*open*/, + const QString& /*additionalInfo*/ ) +{ + *m_importStream << "\n\n"; +} + +void KBookmarkHandler::newSeparator() +{ + *m_importStream << "\n"; +} + +void KBookmarkHandler::endFolder() +{ + *m_importStream << "\n"; +} + +void KBookmarkHandler::virtual_hook( int id, void* data ) +{ KBookmarkOwner::virtual_hook( id, data ); } + diff --git a/kate/app/kbookmarkhandler.h b/kate/app/kbookmarkhandler.h new file mode 100644 index 000000000..15697e283 --- /dev/null +++ b/kate/app/kbookmarkhandler.h @@ -0,0 +1,72 @@ +/* This file is part of the KDE project + Copyright (C) xxxx KFile Authors + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KBOOKMARKHANDLER_H_ +#define _KBOOKMARKHANDLER_H_ + +#include +#include + +class KateFileSelector; + +class KActionMenu; + +class QTextStream; +class KPopupMenu; + +class KBookmarkHandler : public QObject, public KBookmarkOwner +{ + Q_OBJECT + +public: + KBookmarkHandler( KateFileSelector *parent, KPopupMenu *kpopupmenu=0 ); + ~KBookmarkHandler(); + + // KBookmarkOwner interface: + virtual void openBookmarkURL( const QString& url ) { emit openURL( url ); } + virtual QString currentURL() const; + + KPopupMenu *menu() const { return m_menu; } + +signals: + void openURL( const QString& url ); + +private slots: + void slotNewBookmark( const QString& text, const QCString& url, + const QString& additionalInfo ); + void slotNewFolder( const QString& text, bool open, + const QString& additionalInfo ); + void newSeparator(); + void endFolder(); + +protected: + virtual void virtual_hook( int id, void* data ); + +private: + KateFileSelector *mParent; + KPopupMenu *m_menu; + KBookmarkMenu *m_bookmarkMenu; + + QTextStream *m_importStream; + + //class KBookmarkHandlerPrivate *d; +}; + + +#endif // _KBOOKMARKHANDLER_H_ diff --git a/kate/app/kwritemain.cpp b/kate/app/kwritemain.cpp new file mode 100644 index 000000000..5dab9340d --- /dev/null +++ b/kate/app/kwritemain.cpp @@ -0,0 +1,712 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "kwritemain.h" +#include "kwritemain.moc" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +// StatusBar field IDs +#define KWRITE_ID_GEN 1 + +QPtrList KWrite::docList; +QPtrList KWrite::winList; + +KWrite::KWrite (KTextEditor::Document *doc) + : m_view(0), + m_recentFiles(0), + m_paShowPath(0), + m_paShowStatusBar(0) +{ + if ( !doc ) + { + if ( !(doc = KTextEditor::EditorChooser::createDocument(0,"KTextEditor::Document")) ) + { + KMessageBox::error(this, i18n("A KDE text-editor component could not be found;\n" + "please check your KDE installation.")); + kapp->exit(1); + } + + docList.append(doc); + } + + m_view = doc->createView (this, 0L); + + setCentralWidget(m_view); + + setupActions(); + setupStatusBar(); + + setAcceptDrops(true); + + connect(m_view,SIGNAL(newStatus()),this,SLOT(newCaption())); + connect(m_view,SIGNAL(viewStatusMsg(const QString &)),this,SLOT(newStatus(const QString &))); + connect(m_view->document(),SIGNAL(fileNameChanged()),this,SLOT(newCaption())); + connect(m_view->document(),SIGNAL(fileNameChanged()),this,SLOT(slotFileNameChanged())); + connect(m_view,SIGNAL(dropEventPass(QDropEvent *)),this,SLOT(slotDropEvent(QDropEvent *))); + + setXMLFile( "kwriteui.rc" ); + createShellGUI( true ); + guiFactory()->addClient( m_view ); + + // install a working kate part popup dialog thingy + if (static_cast(m_view->qt_cast("Kate::View"))) + static_cast(m_view->qt_cast("Kate::View"))->installPopup ((QPopupMenu*)(factory()->container("ktexteditor_popup", this)) ); + + // init with more usefull size, stolen from konq :) + if (!initialGeometrySet()) + resize( QSize(700, 480).expandedTo(minimumSizeHint())); + + // call it as last thing, must be sure everything is already set up ;) + setAutoSaveSettings (); + + readConfig (); + + winList.append (this); + + show (); +} + +KWrite::~KWrite() +{ + winList.remove (this); + + if (m_view->document()->views().count() == 1) + { + docList.remove(m_view->document()); + delete m_view->document(); + } + + kapp->config()->sync (); +} + +void KWrite::setupActions() +{ + KStdAction::close( this, SLOT(slotFlush()), actionCollection(), "file_close" )->setWhatsThis(i18n("Use this to close the current document")); + + // setup File menu + KStdAction::print(this, SLOT(printDlg()), actionCollection())->setWhatsThis(i18n("Use this command to print the current document")); + KStdAction::openNew( this, SLOT(slotNew()), actionCollection(), "file_new" )->setWhatsThis(i18n("Use this command to create a new document")); + KStdAction::open( this, SLOT( slotOpen() ), actionCollection(), "file_open" )->setWhatsThis(i18n("Use this command to open an existing document for editing")); + + m_recentFiles = KStdAction::openRecent(this, SLOT(slotOpen(const KURL&)), + actionCollection()); + m_recentFiles->setWhatsThis(i18n("This lists files which you have opened recently, and allows you to easily open them again.")); + + KAction *a=new KAction(i18n("&New Window"), "window_new", 0, this, SLOT(newView()), + actionCollection(), "view_new_view"); + a->setWhatsThis(i18n("Create another view containing the current document")); + + a=new KAction(i18n("Choose Editor..."),0,this,SLOT(changeEditor()), + actionCollection(),"settings_choose_editor"); + a->setWhatsThis(i18n("Override the system wide setting for the default editing component")); + + KStdAction::quit(this, SLOT(close()), actionCollection())->setWhatsThis(i18n("Close the current document view")); + + // setup Settings menu + setStandardToolBarMenuEnabled(true); + + m_paShowStatusBar = KStdAction::showStatusbar(this, SLOT(toggleStatusBar()), actionCollection(), "settings_show_statusbar"); + m_paShowStatusBar->setWhatsThis(i18n("Use this command to show or hide the view's statusbar")); + + m_paShowPath = new KToggleAction(i18n("Sho&w Path"), 0, this, SLOT(newCaption()), + actionCollection(), "set_showPath"); + m_paShowPath->setCheckedState(i18n("Hide Path")); + m_paShowPath->setWhatsThis(i18n("Show the complete document path in the window caption")); + a=KStdAction::keyBindings(this, SLOT(editKeys()), actionCollection()); + a->setWhatsThis(i18n("Configure the application's keyboard shortcut assignments.")); + + a=KStdAction::configureToolbars(this, SLOT(editToolbars()), actionCollection()); + a->setWhatsThis(i18n("Configure which items should appear in the toolbar(s).")); +} + +void KWrite::setupStatusBar() +{ + statusBar()->insertItem("", KWRITE_ID_GEN); +} + +// load on url +void KWrite::loadURL(const KURL &url) +{ + m_view->document()->openURL(url); +} + +// is closing the window wanted by user ? +bool KWrite::queryClose() +{ + if (m_view->document()->views().count() > 1) + return true; + + if (m_view->document()->queryClose()) + { + writeConfig(); + + return true; + } + + return false; +} + +void KWrite::changeEditor() +{ + KWriteEditorChooser choose(this); + choose.exec(); +} + +void KWrite::slotFlush () +{ + m_view->document()->closeURL(); +} + +void KWrite::slotNew() +{ + new KWrite(); +} + +void KWrite::slotOpen() +{ + if (KTextEditor::encodingInterface(m_view->document())) + { + KEncodingFileDialog::Result r=KEncodingFileDialog::getOpenURLsAndEncoding( + KTextEditor::encodingInterface(m_view->document())->encoding(), + m_view->document()->url().url(),QString::null,this,i18n("Open File")); + + for (KURL::List::Iterator i=r.URLs.begin(); i != r.URLs.end(); ++i) + { + encoding = r.encoding; + slotOpen ( *i ); + } + } + else + { + KURL::List l=KFileDialog::getOpenURLs(m_view->document()->url().url(),QString::null,this,QString::null); + for (KURL::List::Iterator i=l.begin(); i != l.end(); ++i) + { + slotOpen ( *i ); + } + } +} + +void KWrite::slotOpen( const KURL& url ) +{ + if (url.isEmpty()) return; + + if (!KIO::NetAccess::exists(url, true, this)) + { + KMessageBox::error (this, i18n("The given file could not be read, check if it exists or if it is readable for the current user.")); + return; + } + + if (m_view->document()->isModified() || !m_view->document()->url().isEmpty()) + { + KWrite *t = new KWrite(); + if (KTextEditor::encodingInterface(t->m_view->document())) KTextEditor::encodingInterface(t->m_view->document())->setEncoding(encoding); + t->loadURL(url); + } + else + { + if (KTextEditor::encodingInterface(m_view->document())) KTextEditor::encodingInterface(m_view->document())->setEncoding(encoding); + loadURL(url); + } +} + +void KWrite::slotFileNameChanged() +{ + if ( ! m_view->document()->url().isEmpty() ) + m_recentFiles->addURL( m_view->document()->url() ); +} + +void KWrite::newView() +{ + new KWrite(m_view->document()); +} + +void KWrite::toggleStatusBar() +{ + if( m_paShowStatusBar->isChecked() ) + statusBar()->show(); + else + statusBar()->hide(); +} + +void KWrite::editKeys() +{ + KKeyDialog dlg; + dlg.insert(actionCollection()); + if( m_view ) + dlg.insert(m_view->actionCollection()); + dlg.configure(); +} + +void KWrite::editToolbars() +{ + saveMainWindowSettings( kapp->config(), "MainWindow" ); + KEditToolbar *dlg = new KEditToolbar(guiFactory()); + connect( dlg, SIGNAL(newToolbarConfig()), this, SLOT(slotNewToolbarConfig()) ); + dlg->exec(); + delete dlg; +} + +void KWrite::slotNewToolbarConfig() +{ + applyMainWindowSettings( kapp->config(), "MainWindow" ); +} + + +void KWrite::printNow() +{ + KTextEditor::printInterface(m_view->document())->print (); +} + +void KWrite::printDlg() +{ + KTextEditor::printInterface(m_view->document())->printDialog (); +} + +void KWrite::newStatus(const QString &msg) +{ + newCaption(); + + statusBar()->changeItem(msg,KWRITE_ID_GEN); +} + +void KWrite::newCaption() +{ + if (m_view->document()->url().isEmpty()) { + setCaption(i18n("Untitled"),m_view->document()->isModified()); + } + else + { + QString c; + if (!m_paShowPath->isChecked()) + { + c = m_view->document()->url().fileName(); + + //File name shouldn't be too long - Maciek + if (c.length() > 64) + c = c.left(64) + "..."; + } + else + { + c = m_view->document()->url().prettyURL(); + + //File name shouldn't be too long - Maciek + if (c.length() > 64) + c = "..." + c.right(64); + } + + setCaption (c, m_view->document()->isModified()); + } +} + +void KWrite::dragEnterEvent( QDragEnterEvent *event ) +{ + event->accept(KURLDrag::canDecode(event)); +} + +void KWrite::dropEvent( QDropEvent *event ) +{ + slotDropEvent(event); +} + +void KWrite::slotDropEvent( QDropEvent *event ) +{ + KURL::List textlist; + + if (!KURLDrag::decode(event, textlist)) + return; + + for (KURL::List::Iterator i=textlist.begin(); i != textlist.end(); ++i) + slotOpen (*i); +} + +void KWrite::slotEnableActions( bool enable ) +{ + QValueList actions = actionCollection()->actions(); + QValueList::ConstIterator it = actions.begin(); + QValueList::ConstIterator end = actions.end(); + + for (; it != end; ++it ) + (*it)->setEnabled( enable ); + + actions = m_view->actionCollection()->actions(); + it = actions.begin(); + end = actions.end(); + + for (; it != end; ++it ) + (*it)->setEnabled( enable ); +} + +//common config +void KWrite::readConfig(KConfig *config) +{ + config->setGroup("General Options"); + + m_paShowStatusBar->setChecked( config->readBoolEntry("ShowStatusBar") ); + m_paShowPath->setChecked( config->readBoolEntry("ShowPath") ); + + m_recentFiles->loadEntries(config, "Recent Files"); + + if (m_view && KTextEditor::configInterface(m_view->document())) + KTextEditor::configInterface(m_view->document())->readConfig(config); + + if( m_paShowStatusBar->isChecked() ) + statusBar()->show(); + else + statusBar()->hide(); +} + +void KWrite::writeConfig(KConfig *config) +{ + config->setGroup("General Options"); + + config->writeEntry("ShowStatusBar",m_paShowStatusBar->isChecked()); + config->writeEntry("ShowPath",m_paShowPath->isChecked()); + + m_recentFiles->saveEntries(config, "Recent Files"); + + if (m_view && KTextEditor::configInterface(m_view->document())) + KTextEditor::configInterface(m_view->document())->writeConfig(config); + + config->sync (); +} + +//config file +void KWrite::readConfig() +{ + KConfig *config = kapp->config(); + readConfig(config); +} + +void KWrite::writeConfig() +{ + KConfig *config = kapp->config(); + writeConfig(config); +} + +// session management +void KWrite::restore(KConfig *config, int n) +{ + readPropertiesInternal(config, n); +} + +void KWrite::readProperties(KConfig *config) +{ + readConfig(config); + + if (KTextEditor::sessionConfigInterface(m_view)) + KTextEditor::sessionConfigInterface(m_view)->readSessionConfig(config); +} + +void KWrite::saveProperties(KConfig *config) +{ + writeConfig(config); + config->writeEntry("DocumentNumber",docList.find(m_view->document()) + 1); + + if (KTextEditor::sessionConfigInterface(m_view)) + KTextEditor::sessionConfigInterface(m_view)->writeSessionConfig(config); +} + +void KWrite::saveGlobalProperties(KConfig *config) //save documents +{ + config->setGroup("Number"); + config->writeEntry("NumberOfDocuments",docList.count()); + + for (uint z = 1; z <= docList.count(); z++) + { + QString buf = QString("Document %1").arg(z); + config->setGroup(buf); + + KTextEditor::Document *doc = docList.at(z - 1); + + if (KTextEditor::configInterface(doc)) + KTextEditor::configInterface(doc)->writeSessionConfig(config); + } + + for (uint z = 1; z <= winList.count(); z++) + { + QString buf = QString("Window %1").arg(z); + config->setGroup(buf); + + config->writeEntry("DocumentNumber",docList.find(winList.at(z-1)->view()->document()) + 1); + } +} + +//restore session +void KWrite::restore() +{ + KConfig *config = kapp->sessionConfig(); + + if (!config) + return; + + int docs, windows; + QString buf; + KTextEditor::Document *doc; + KWrite *t; + + config->setGroup("Number"); + docs = config->readNumEntry("NumberOfDocuments"); + windows = config->readNumEntry("NumberOfWindows"); + + for (int z = 1; z <= docs; z++) + { + buf = QString("Document %1").arg(z); + config->setGroup(buf); + doc=KTextEditor::EditorChooser::createDocument(0,"KTextEditor::Document"); + + if (KTextEditor::configInterface(doc)) + KTextEditor::configInterface(doc)->readSessionConfig(config); + docList.append(doc); + } + + for (int z = 1; z <= windows; z++) + { + buf = QString("Window %1").arg(z); + config->setGroup(buf); + t = new KWrite(docList.at(config->readNumEntry("DocumentNumber") - 1)); + t->restore(config,z); + } +} + +static KCmdLineOptions options[] = +{ + { "stdin", I18N_NOOP("Read the contents of stdin"), 0}, + { "encoding ", I18N_NOOP("Set encoding for the file to open"), 0 }, + { "line ", I18N_NOOP("Navigate to this line"), 0 }, + { "column ", I18N_NOOP("Navigate to this column"), 0 }, + { "+[URL]", I18N_NOOP("Document to open"), 0 }, + KCmdLineLastOption +}; + +extern "C" KDE_EXPORT int kdemain(int argc, char **argv) +{ + Kate::Document::setFileChangedDialogsActivated (true); + + KLocale::setMainCatalogue("kate"); //lukas: set this to have the kwritepart translated using kate message catalog + + // here we go, construct the KWrite version + QString kWriteVersion = QString ("%1.%2.%3").arg(KDE::versionMajor() + 1).arg(KDE::versionMinor()).arg(KDE::versionRelease()); + + KAboutData aboutData ( "kwrite", + I18N_NOOP("KWrite"), + kWriteVersion.latin1(), + I18N_NOOP( "KWrite - Text Editor" ), KAboutData::License_LGPL_V2, + I18N_NOOP( "(c) 2000-2005 The Kate Authors" ), 0, "http://kate.kde.org" ); + + aboutData.addAuthor ("Christoph Cullmann", I18N_NOOP("Maintainer"), "cullmann@kde.org", "http://www.babylon2k.de"); + aboutData.addAuthor ("Anders Lund", I18N_NOOP("Core Developer"), "anders@alweb.dk", "http://www.alweb.dk"); + aboutData.addAuthor ("Joseph Wenninger", I18N_NOOP("Core Developer"), "jowenn@kde.org","http://stud3.tuwien.ac.at/~e9925371"); + aboutData.addAuthor ("Hamish Rodda",I18N_NOOP("Core Developer"), "rodda@kde.org"); + aboutData.addAuthor ("Waldo Bastian", I18N_NOOP( "The cool buffersystem" ), "bastian@kde.org" ); + aboutData.addAuthor ("Charles Samuels", I18N_NOOP("The Editing Commands"), "charles@kde.org"); + aboutData.addAuthor ("Matt Newell", I18N_NOOP("Testing, ..."), "newellm@proaxis.com"); + aboutData.addAuthor ("Michael Bartl", I18N_NOOP("Former Core Developer"), "michael.bartl1@chello.at"); + aboutData.addAuthor ("Michael McCallum", I18N_NOOP("Core Developer"), "gholam@xtra.co.nz"); + aboutData.addAuthor ("Jochen Wilhemly", I18N_NOOP( "KWrite Author" ), "digisnap@cs.tu-berlin.de" ); + aboutData.addAuthor ("Michael Koch",I18N_NOOP("KWrite port to KParts"), "koch@kde.org"); + aboutData.addAuthor ("Christian Gebauer", 0, "gebauer@kde.org" ); + aboutData.addAuthor ("Simon Hausmann", 0, "hausmann@kde.org" ); + aboutData.addAuthor ("Glen Parker",I18N_NOOP("KWrite Undo History, Kspell integration"), "glenebob@nwlink.com"); + aboutData.addAuthor ("Scott Manson",I18N_NOOP("KWrite XML Syntax highlighting support"), "sdmanson@alltel.net"); + aboutData.addAuthor ("John Firebaugh",I18N_NOOP("Patches and more"), "jfirebaugh@kde.org"); + + aboutData.addCredit ("Matteo Merli",I18N_NOOP("Highlighting for RPM Spec-Files, Perl, Diff and more"), "merlim@libero.it"); + aboutData.addCredit ("Rocky Scaletta",I18N_NOOP("Highlighting for VHDL"), "rocky@purdue.edu"); + aboutData.addCredit ("Yury Lebedev",I18N_NOOP("Highlighting for SQL"),""); + aboutData.addCredit ("Chris Ross",I18N_NOOP("Highlighting for Ferite"),""); + aboutData.addCredit ("Nick Roux",I18N_NOOP("Highlighting for ILERPG"),""); + aboutData.addCredit ("Carsten Niehaus", I18N_NOOP("Highlighting for LaTeX"),""); + aboutData.addCredit ("Per Wigren", I18N_NOOP("Highlighting for Makefiles, Python"),""); + aboutData.addCredit ("Jan Fritz", I18N_NOOP("Highlighting for Python"),""); + aboutData.addCredit ("Daniel Naber","",""); + aboutData.addCredit ("Roland Pabel",I18N_NOOP("Highlighting for Scheme"),""); + aboutData.addCredit ("Cristi Dumitrescu",I18N_NOOP("PHP Keyword/Datatype list"),""); + aboutData.addCredit ("Carsten Pfeiffer", I18N_NOOP("Very nice help"), ""); + aboutData.addCredit (I18N_NOOP("All people who have contributed and I have forgotten to mention"),"",""); + + aboutData.setTranslator(I18N_NOOP("_: NAME OF TRANSLATORS\nYour names"), I18N_NOOP("_: EMAIL OF TRANSLATORS\nYour emails")); + + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); + + KApplication a; + + KGlobal::locale()->insertCatalogue("katepart"); + + DCOPClient *client = kapp->dcopClient(); + if (!client->isRegistered()) + { + client->attach(); + client->registerAs("kwrite"); + } + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (kapp->isRestored()) + { + KWrite::restore(); + } + else + { + bool nav = false; + int line = 0, column = 0; + + QTextCodec *codec = args->isSet("encoding") ? QTextCodec::codecForName(args->getOption("encoding")) : 0; + + if (args->isSet ("line")) + { + line = args->getOption ("line").toInt(); + nav = true; + } + + if (args->isSet ("column")) + { + column = args->getOption ("column").toInt(); + nav = true; + } + + if ( args->count() == 0 ) + { + KWrite *t = new KWrite; + + if( args->isSet( "stdin" ) ) + { + QTextIStream input(stdin); + + // set chosen codec + if (codec) + input.setCodec (codec); + + QString line; + QString text; + + do + { + line = input.readLine(); + text.append( line + "\n" ); + } while( !line.isNull() ); + + + KTextEditor::EditInterface *doc = KTextEditor::editInterface (t->view()->document()); + if( doc ) + doc->setText( text ); + } + + if (nav && KTextEditor::viewCursorInterface(t->view())) + KTextEditor::viewCursorInterface(t->view())->setCursorPosition (line, column); + } + else + { + for ( int z = 0; z < args->count(); z++ ) + { + KWrite *t = new KWrite(); + + // this file is no local dir, open it, else warn + bool noDir = !args->url(z).isLocalFile() || !QDir (args->url(z).path()).exists(); + + if (noDir) + { + if (Kate::document (t->view()->document())) + Kate::Document::setOpenErrorDialogsActivated (false); + + if (codec && KTextEditor::encodingInterface(t->view()->document())) + KTextEditor::encodingInterface(t->view()->document())->setEncoding(codec->name()); + + t->loadURL( args->url( z ) ); + + if (Kate::document (t->view()->document())) + Kate::Document::setOpenErrorDialogsActivated (true); + + if (nav && KTextEditor::viewCursorInterface(t->view())) + KTextEditor::viewCursorInterface(t->view())->setCursorPosition (line, column); + } + else + KMessageBox::sorry( t, i18n("The file '%1' could not be opened: it is not a normal file, it is a folder.").arg(args->url(z).url()) ); + } + } + } + + // no window there, uh, ohh, for example borked session config !!! + // create at least one !! + if (KWrite::noWindows()) + new KWrite(); + + return a.exec (); +} + +KWriteEditorChooser::KWriteEditorChooser(QWidget *): + KDialogBase(KDialogBase::Plain,i18n("Choose Editor Component"),KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Cancel) +{ + (new QVBoxLayout(plainPage()))->setAutoAdd(true); + m_chooser=new KTextEditor::EditorChooser(plainPage(),"Editor Chooser"); + setMainWidget(m_chooser); + m_chooser->readAppSetting(); +} + +KWriteEditorChooser::~KWriteEditorChooser() { +; +} + +void KWriteEditorChooser::slotOk() { + m_chooser->writeAppSetting(); + KDialogBase::slotOk(); +} +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/app/kwritemain.h b/kate/app/kwritemain.h new file mode 100644 index 000000000..7af2c67ad --- /dev/null +++ b/kate/app/kwritemain.h @@ -0,0 +1,138 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 2001 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KWRITE_MAIN_H__ +#define __KWRITE_MAIN_H__ + +#include +#include + +#include + +#include + +namespace KTextEditor { class EditorChooser; } + +class KAction; +class KToggleAction; +class KSelectAction; +class KRecentFilesAction; + +class KWrite : public KParts::MainWindow +{ + Q_OBJECT + + public: + KWrite(KTextEditor::Document * = 0L); + ~KWrite(); + + void loadURL(const KURL &url); + + KTextEditor::View *view() const { return m_view; } + + static bool noWindows () { return winList.isEmpty(); } + + private: + void setupActions(); + void setupStatusBar(); + + bool queryClose(); + + void dragEnterEvent( QDragEnterEvent * ); + void dropEvent( QDropEvent * ); + + public slots: + void slotNew(); + void slotFlush (); + void slotOpen(); + void slotOpen( const KURL& url); + void newView(); + void toggleStatusBar(); + void editKeys(); + void editToolbars(); + void changeEditor(); + + private slots: + void slotNewToolbarConfig(); + + public slots: + void printNow(); + void printDlg(); + + void newStatus(const QString &msg); + void newCaption(); + + void slotDropEvent(QDropEvent *); + + void slotEnableActions( bool enable ); + + /** + * adds a changed URL to the recent files + */ + void slotFileNameChanged(); + + //config file functions + public: + void readConfig (KConfig *); + void writeConfig (KConfig *); + + void readConfig (); + void writeConfig (); + + //session management + public: + void restore(KConfig *,int); + static void restore(); + + private: + void readProperties(KConfig *); + void saveProperties(KConfig *); + void saveGlobalProperties(KConfig *); + + private: + KTextEditor::View * m_view; + + KRecentFilesAction * m_recentFiles; + KToggleAction * m_paShowPath; + KToggleAction * m_paShowStatusBar; + + QString encoding; + + static QPtrList docList; + static QPtrList winList; +}; + +class KWriteEditorChooser: public KDialogBase +{ + Q_OBJECT + + public: + KWriteEditorChooser(QWidget *parent); + virtual ~KWriteEditorChooser(); + + private: + KTextEditor::EditorChooser *m_chooser; + + protected slots: + void slotOk(); +}; + +#endif +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/data/Makefile.am b/kate/data/Makefile.am new file mode 100644 index 000000000..77bba0d1d --- /dev/null +++ b/kate/data/Makefile.am @@ -0,0 +1,18 @@ +servicetypedir = $(kde_servicetypesdir) +servicetype_DATA = kateplugin.desktop + +xdg_apps_DATA = kate.desktop kwrite.desktop + +rckatedir = $(kde_datadir)/kate +rckate_DATA = kateui.rc externaltools + +rckwritedir = $(kde_datadir)/kwrite +rckwrite_DATA = kwriteui.rc + +tipdir = $(kde_datadir)/kate +tip_DATA = tips + +updatedir = $(kde_datadir)/kconf_update +update_DATA = kate-2.4.upd + +kde_conf_DATA = katerc diff --git a/kate/data/externaltools b/kate/data/externaltools new file mode 100644 index 000000000..19d931976 --- /dev/null +++ b/kate/data/externaltools @@ -0,0 +1,77 @@ +[Global] +tools=externaltool_CVSLogforCurrentDocument,externaltool_CervisiaDirectoryofCurrentDocument,externaltool_CompareCurrentDocumenttoCVS,externaltool_CompareDirectoryofCurrentDocumenttoCVS,externaltool_EmailCVSDiffforCurrentDocument,---,externaltool_RunScript,---,externaltool_GoogleSelection + +[Shortcuts] +externaltool_CVSLogforCurrentDocument=Shift+F10 +externaltool_CompareCurrentDocumenttoCVS=Shift+F11 +externaltool_RunScript=Ctrl+Shift+X + +[externaltool_CVSLogforCurrentDocument] +acname=externaltool_CVSLogforCurrentDocument +cmdname=cvs-log +command=if grep %filename %directory/CVS/Entries 2>&1>/dev/null ; then\n cd %directory && cervisia -log %filename\nelse\n kdialog --title Error --msgbox "The file '%filename' is not in CVS."\nfi +executable=cervisia +icon=cervisia +mimetypes= +name=CVS Log for Current Document +save=0 + +[externaltool_CervisiaDirectoryofCurrentDocument] +acname=externaltool_CervisiaDirectoryofCurrentDocument +cmdname=cvs-directory +command=if [ -d %directory/CVS ] ; then\n cervisia %directory\nelse\n kdialog --title Error --msgbox "The directory '%directory' does not appear to be a CVS sandbox."\nfi +executable=cervisia +icon=cervisia +mimetypes= +name=Cervisia (Directory of Current Document) +save=0 + +[externaltool_CompareCurrentDocumenttoCVS] +acname=externaltool_CompareCurrentDocumenttoCVS +cmdname=cvs-diff +command=cd %directory\nif [ -d CVS ] && grep %filename CVS/Entries 2>&1 >/dev/null ; then\n cvs diff %filename|kompare -o -\nelse\n kdialog --title Error --msgbox "The file '%filename' is not in CVS."\nfi +executable=kompare +icon=kompare +mimetypes= +name=Compare Current Document to CVS +save=1 + +[externaltool_EmailCVSDiffforCurrentDocument] +acname=externaltool_EmailCVSDiffforCurrentDocument +cmdname= +command=cd %directory\nif [ -d CVS ] && grep %filename CVS/Entries > /dev/null ; then\n cvs diff -ubB %filename > $(kde-config --path tmp)%filename.diff \n kmail --composer --attach $(kde-config --path tmp)%filename.diff\nelse\n kdialog --title Error -msgbox "The file '%filename' is not in CVS"\nfi +executable=kmail +icon=kmail +mimetypes= +name=Email CVS Diff for Current Document +save=1 + +[externaltool_GoogleSelection] +acname=externaltool_GoogleSelection +cmdname=google-selection +command=[ -n "%selection" ] && kfmclient openURL "gg:%selection" +executable=kfmclient +icon=globe +mimetypes= +name=Google Selection +save=0 + +[externaltool_RunScript] +acname=externaltool_RunScript +cmdname=runscript +command=cd "%directory" && chmod u+x "%filename" && konsole -e "./%filename" +executable=konsole +icon=run +mimetypes= +name=Run Script +save=1 + +[externaltool_CompareDirectoryofCurrentDocumenttoCVS] +acname=externaltool_CompareDirectoryofCurrentDocumenttoCVS +cmdname= +command=cd %directory\nif [ -d CVS ] ; then\n cvs diff -ub |kompare -o -\nelse\n kdialog --title Error --msgbox "The directory '%directory' does not appear to be a cvs sandbox."\nfi +executable=kompare +icon=kompare +mimetypes= +name=Compare Directory of Current Document to CVS +save=0 \ No newline at end of file diff --git a/kate/data/kate-2.4.upd b/kate/data/kate-2.4.upd new file mode 100644 index 000000000..98e4537e1 --- /dev/null +++ b/kate/data/kate-2.4.upd @@ -0,0 +1,7 @@ +# kate-2.4.upd +# Update the katerc config file for v 2.4 +Id=kate2.4 +File=katerc +# Move the file list sort option into the Filelist group +Group=General,Filelist +Key=Sort Type of File List,Sort Type \ No newline at end of file diff --git a/kate/data/kate.desktop b/kate/data/kate.desktop new file mode 100644 index 000000000..4881d70d1 --- /dev/null +++ b/kate/data/kate.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +GenericName=Advanced Text Editor +GenericName[af]=Gevorderde Teks Redigeerder +GenericName[ar]=محرر النصوص المتقدم +GenericName[az]=Səciyyəvi Mətn Editoru +GenericName[be]=Адмысловы рэдактар тэксту +GenericName[bg]=Текстов редактор +GenericName[bn]=উন্নত টেক্সট সম্পাদক +GenericName[br]=Aozer skrid barek +GenericName[bs]=Napredni editor teksta +GenericName[ca]=Editor de text avançat +GenericName[cs]=Pokročilý textový editor +GenericName[csb]=Awansowóny editora tekstu +GenericName[cy]=Golygydd Testun Uwch +GenericName[da]= Avanceret teksteditor +GenericName[de]=Erweiterter Texteditor +GenericName[el]=Προχωρημένος επεξεργαστής κειμένου +GenericName[eo]=Pli bona Tekstredaktilo +GenericName[es]=Editor de texto avanzado +GenericName[et]=Võimas tekstiredaktor +GenericName[eu]=Testu editore aurreratua +GenericName[fa]=ویرایشگر متن پیشرفته +GenericName[fi]=Kehittynyt tekstieditori +GenericName[fr]=Éditeur de texte avancé +GenericName[fy]=avansearre tekstbewurker +GenericName[ga]=Ardeagarthóir Téacs +GenericName[gl]=Editor Avanzado de Textos +GenericName[he]=עורך טקסט מתקדם +GenericName[hi]=विकसित पाठ संपादक +GenericName[hr]=Napredni uređivač teksta +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Þróaður textaritill +GenericName[it]=Editor di testi avanzato +GenericName[ja]=高度なテキストエディタ +GenericName[ka]=გაუმჯობესებული ტექსტური რედაქტორი +GenericName[kk]=Үздік мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ​កម្រិត​ខ្ពស់ +GenericName[lt]=Sudėtingesnis teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Напреден уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Editor Teks Lanjutan +GenericName[mt]=Editur tat-test avvanzat +GenericName[nb]=Avansert skriveprogram +GenericName[nds]=Verwiedert Text-Editor +GenericName[ne]=उन्नत पाठ सम्पादक +GenericName[nl]=Geavanceerde teksteditor +GenericName[nn]=Avansert skriveprogram +GenericName[pa]=ਤਕਨੀਕੀ ਪਾਠ ਦਰਸ਼ਕ +GenericName[pl]=Zaawansowany edytor tekstu +GenericName[pt]=Editor de Texto Avançado +GenericName[pt_BR]=Editor de Texto Avançado +GenericName[ro]=Editor avansat de text +GenericName[ru]=Улучшенный текстовый редактор +GenericName[rw]=Muhinduzi Ihanitse y'Umwandiko +GenericName[se]=Erenoamáš čállinprográmma +GenericName[sk]=Pokročilý textový editor +GenericName[sl]=Napredni urejevalnik besedil +GenericName[sr]=Напредни уређивач текста +GenericName[sr@Latn]=Napredni uređivač teksta +GenericName[sv]=Avancerad texteditor +GenericName[ta]=மேம்படுத்த்ப்பட்ட உரை திருத்துபவர் +GenericName[te]=ఆధునిక వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матни пешрафта +GenericName[th]=โปรแกรมแก้ไขข้อความแบบขั้นสูง +GenericName[tr]=Gelişmiş Metin Düzenleyici +GenericName[tt]=Yaqşırtılğan Mäten-Tözätkeç +GenericName[uk]=Редактор текстів +GenericName[uz]=Kengaytirilgan matn tahrirchi +GenericName[uz@cyrillic]=Кенгайтирилган матн таҳрирчи +GenericName[vi]=Trình soạn văn bản nâng cao +GenericName[wa]=Aspougneu di tecse avancî +GenericName[zh_CN]=高级文本编辑器 +GenericName[zh_TW]=進階文字編輯器 +Name=Kate +Name[bn]=কেট +Name[eo]=Kodredaktilo +Name[hi]=के-एटीई +Name[ka]=რედაქტორი Kate +Name[kk]=Kate редакторы +Name[mk]=Кате +Name[ne]=क्येट +Name[pa]=ਕੇਟ +Name[te]=కేట్ +MimeType=text/plain; +Exec=kate %U +X-KDE-StartupNotify=true +X-KDE-HasTempFileOption=true +Icon=kate +Path= +DocPath=kate/index.html +Type=Application +Terminal=false +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;TextEditor; diff --git a/kate/data/kateplugin.desktop b/kate/data/kateplugin.desktop new file mode 100644 index 000000000..ae1ce6abd --- /dev/null +++ b/kate/data/kateplugin.desktop @@ -0,0 +1,89 @@ +[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=Kate/Plugin +X-KDE-Derived= +Comment=Kate Plugin +Comment[af]=Kate Inplak +Comment[az]=Kate Əlavəsi +Comment[be]=Утулка для Kate +Comment[bg]=Приставка за Kate +Comment[bn]=কেট প্লাগ-ইন +Comment[br]=Lugent Kate +Comment[bs]=Kate dodatak +Comment[ca]=Connector per a Kate +Comment[cs]=Modul aplikace Kate +Comment[csb]=Plugins Kate +Comment[cy]=Ategyn Kate +Comment[da]=Kate-plugin +Comment[de]=Kate-Plugin +Comment[el]=Πρόσθετο Kate +Comment[eo]=Kodredaktila kromaĵo +Comment[es]=Complemento de Kate +Comment[et]=Kate plugin +Comment[eu]=Kate plugina +Comment[fa]=وصلۀ Kate +Comment[fi]=Kate-liitännäinen +Comment[fo]=Kate-ístingur +Comment[fr]=Module de Kate +Comment[fy]=Kate-plugin +Comment[ga]=Breiseán Kate +Comment[gl]=Plugin de Kate +Comment[he]=תוסף ל־Kate +Comment[hi]=के-एटीई प्लगइन +Comment[hr]=Kate dodatak +Comment[hu]=Kate bővítőmodul +Comment[is]=Kate íforrit +Comment[it]=Plugin di Kate +Comment[ja]=Kate プラグイン +Comment[ka]=Kate–ს პლაგინი +Comment[kk]=Kate модулі +Comment[km]=កម្មវិធី​ជំនួយ Kate +Comment[ko]=셸 명령 플러그인 +Comment[lo]=ປັລກອິນຂອງ Kate +Comment[lt]=Kate priedas +Comment[lv]=Kate spraudnis +Comment[mk]=Приклучок за Кате +Comment[mn]=Kate-Plugin +Comment[ms]=Plugin Kate +Comment[mt]=Plagin ta' Kate +Comment[nb]=Kate-programtillegg +Comment[nds]=Kate-Plugin +Comment[ne]=क्येट प्लगइन +Comment[nl]=Kate-plugin +Comment[nn]=Kate-programtillegg +Comment[nso]=Tsenyo ya Kate +Comment[pa]=ਕੇਟ ਪਲੱਗਇਨ +Comment[pl]=Wtyczka Kate +Comment[pt]='Plugin' do Kate +Comment[pt_BR]=Plug-in do Kate +Comment[ro]=Modul Kate +Comment[ru]=Модуль Kate +Comment[rw]=Icomeka rya Kate +Comment[se]=Kate-lassemoduvla +Comment[sk]=Modul Kate +Comment[sl]=Vstavek za Kate +Comment[sr]=Kate-ин прикључак +Comment[sr@Latn]=Kate-in priključak +Comment[ss]=I-plugin ye Kate +Comment[sv]=Kate-insticksprogram +Comment[ta]=Kபதிப்பான் செருகல் +Comment[te]=కేట్ ప్లగిన్ +Comment[tg]=Мутассалкунандаи Kate +Comment[th]=ปลั้กอินของ Kate +Comment[tr]=Kate Eklentisi +Comment[tt]=Kate Östämäse +Comment[uk]=Втулок Kate +Comment[uz]=Kate uchun plagin +Comment[uz@cyrillic]=Kate учун плагин +Comment[vi]=Trình bổ sung cho Kate +Comment[wa]=Tchôke divins di Kate +Comment[xh]=Iplagi efakiweyo ye Kate +Comment[zh_CN]=Kate 插件 +Comment[zh_TW]=Kate 外掛程式 +Comment[zu]=I-Plugin ye-Kate + +[PropertyDef::X-Kate-Version] +Type=QString + +[PropertyDef::X-Kate-PluginName] +Type=QString diff --git a/kate/data/katerc b/kate/data/katerc new file mode 100644 index 000000000..331a30496 --- /dev/null +++ b/kate/data/katerc @@ -0,0 +1,2 @@ +[KNewStuff] +ProvidersUrl=http://kate.kde.org/share/providers.xml \ No newline at end of file diff --git a/kate/data/kateui.rc b/kate/data/kateui.rc new file mode 100644 index 000000000..27df00662 --- /dev/null +++ b/kate/data/kateui.rc @@ -0,0 +1,168 @@ + + + + +

&File + + + + + + + + + + + + + + + + + + + + + + + + + + + &Edit + + + + + + + + + + + &Document + + + + + + &View + + + + + + &Tools + + + + + + + Sess&ions + + + + + + + + + + + &Settings + + + + + + + + + + + + &Window + + + + + + + + + + + + + + &Help + + + + + + + + + + + + +Main Toolbar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/data/kwrite.desktop b/kate/data/kwrite.desktop new file mode 100644 index 000000000..022c6e4ce --- /dev/null +++ b/kate/data/kwrite.desktop @@ -0,0 +1,111 @@ +[Desktop Entry] +GenericName=Text Editor +GenericName[af]=Teks Redigeerder +GenericName[az]=Mətn Editoru +GenericName[be]=Тэкставы рэдактар +GenericName[bg]=Текстов редактор +GenericName[bn]=টেক্সট সম্পাদক +GenericName[br]=Aozer skrid +GenericName[bs]=Tekst editor +GenericName[ca]=Editor de text +GenericName[cs]=Textový editor +GenericName[csb]=Tekstowi editora +GenericName[cy]=Golygydd Testun +GenericName[da]= Teksteditor +GenericName[de]=Texteditor +GenericName[el]=Επεξεργαστής κειμένου +GenericName[eo]=Tekstredaktilo +GenericName[es]=Editor de texto +GenericName[et]=Tekstiredaktor +GenericName[eu]=Testu editorea +GenericName[fa]=ویرایشگر متن +GenericName[fi]=Tekstieditori +GenericName[fo]=Tekstritil +GenericName[fr]=Éditeur de texte +GenericName[fy]=Tekstbewurker +GenericName[ga]=Eagarthóir Téacs +GenericName[gl]=Editor de Textos +GenericName[he]=עורך טקסט +GenericName[hi]=पाठ संपादक +GenericName[hr]=Uređivač teksta +GenericName[hsb]=Wobdźěłar tekstow +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Textaritill +GenericName[it]=Editor di testi +GenericName[ja]=テキストエディタ +GenericName[ka]=ტექსტური რედაქტორი +GenericName[kk]=Мәтін редакторы +GenericName[km]=កម្មវិធី​វាយ​អត្ថបទ +GenericName[ko]=텍스트 편집기 +GenericName[lo]=ເຄື່ອງມືແກ້ໄຂຂໍ້ຄວາມ +GenericName[lt]=Teksto redaktorius +GenericName[lv]=Teksta Redaktors +GenericName[mk]=Уредувач на текст +GenericName[mn]=Текст боловсруулагч +GenericName[ms]=Penyunting Teks +GenericName[mt]=Editur tat-test +GenericName[nb]=Skriveprogram +GenericName[nds]=Texteditor +GenericName[ne]=पाठ सम्पादक +GenericName[nl]=Teksteditor +GenericName[nn]=Skriveprogram +GenericName[nso]=Mofetosi wa Sengwalwana +GenericName[pa]=ਪਾਠ ਸੰਪਾਦਕ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Editor de Texto +GenericName[pt_BR]=Editor de Texto +GenericName[ro]=Editor de text +GenericName[ru]=Текстовый редактор +GenericName[rw]=Muhinduzi Umwandiko +GenericName[se]=Čállinprográmma +GenericName[sk]=Textový editor +GenericName[sl]=Urejevalnik besedil +GenericName[sr]=Уређивач текста +GenericName[sr@Latn]=Uređivač teksta +GenericName[ss]=Sihleli sembhalo +GenericName[sv]=Texteditor +GenericName[ta]=உரை தொகுப்பாளர் +GenericName[te]=వచన ఎడిటర్ +GenericName[tg]=Муҳаррири матн +GenericName[th]=โปรแกรมแก้ไขข้อความ +GenericName[tr]=Metin Düzenleyici +GenericName[tt]=Mäten Tözätkeçe +GenericName[uk]=Редактор текстів +GenericName[uz]=Matn tahrirchi +GenericName[uz@cyrillic]=Матн таҳрирчи +GenericName[ven]=Musengulusi wa Manwalwa +GenericName[vi]=Trình soạn văn bản +GenericName[wa]=Aspougneu di tecse +GenericName[xh]=Umhleli Wombhalo +GenericName[zh_CN]=文本编辑器 +GenericName[zh_TW]=文字編輯器 +GenericName[zu]=Umlungisi wombhalo +Name=KWrite +Name[af]=Kskryf +Name[bn]=কে-রাইট +Name[eo]=Malnova simpla kodredaktilo +Name[fo]=KSkriva +Name[hi]=के-राइट +Name[ka]=რედაქტორი KWrite +Name[kk]=KWrite редакторы +Name[lo]=Kwrite +Name[mn]=Кврайт +Name[ne]=केडीई राइट +Name[nso]=KNgwala +Name[pa]=ਕੇ-ਲੇਖਕ +Name[rw]=K-Kwandika +Name[sv]=Kwrite +Name[te]=కెవ్రైట్ +Name[tg]=Навиштори K +Name[ven]=Nwala ha K +MimeType=text/plain; +Exec=kwrite %U +X-KDE-StartupNotify=true +Icon=kwrite +Path= +DocPath=kwrite/index.html +Type=Application +Terminal=false +InitialPreference=8 +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;TextEditor; diff --git a/kate/data/kwriteui.rc b/kate/data/kwriteui.rc new file mode 100644 index 000000000..7272cb4fa --- /dev/null +++ b/kate/data/kwriteui.rc @@ -0,0 +1,95 @@ + + + + + &File + + + + + + + + + + + + + + + + + + + + + + &Edit + + + + + + + + + + + + &View + + + + + + &Tools + + + + + + &Settings + + + + + + + + + + + + &Help + + + + + + + + + + +Main Toolbar + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/data/tips b/kate/data/tips new file mode 100644 index 000000000..aaee34424 --- /dev/null +++ b/kate/data/tips @@ -0,0 +1,122 @@ + + +

Kate comes with a nice set of plugins, providing simple +and advanced features of all sorts.

+

You can enable/disable plugins to suit your needs in the configuration dialog, +choose Settings ->configure to launch that.

+ +
+ + +

You can swap the characters on each side of the cursor just by pressing +Ctrl+T

+ +
+ + +

You can export the current document as a HTML file, including +syntax highlighting.

+

Just choose File -> Export -> HTML...

+ +
+ + +

You can split the Kate editor as many times as you like and +in either direction. Each frame has its own status bar and +can display any open document.

+

Just choose
View -> Split [ Horizontal | Vertical ]

+ +
+ + +

You can drag the Tool views (File List and File Selector) +to any side that you want them in Kate, or stack them, or even tear them off the +main window.

+ +
+ + +

Kate has a built-in terminal emulator, just click on "Terminal" at +the bottom to show or hide it as you desire.

+ +
+ + +

Kate can highlight the current line with a +
different +background color.|

+

You can set the color in the Colors page of the configuration +dialog.

+ +
+ + +

You can open the currently edited file in any other application from within +Kate.

+

Choose File -> Open With for the list of programs +configured +for the document type. There is also an option Other... to +choose any application on your system.

+ +
+ + +

You can configure the editor to always display the line numbers and/or +bookmark panes when started from the View Defaults page of the +configuration dialog.

+ +
+ + +

You can download new or updated Syntax highlight definitions from +the Highlighting page in the configuration dialog.

+

Just click the Download... button on the Highlight Modes +tab (You have to be online, of course...).

+ +
+ + +

You can cycle through all open documents by pressing Alt+Left +or Alt+Right. The next/previous document will immediately be displayed +in the active frame.

+ +
+ + +

You can do cool sed-like regular expression replacements using Command Line.

+

For example, press F7 and enter s /oldtext/newtext/g +to replace "oldtext" with "newtext" throughout the current +line.

+ +
+ + +

You can repeat your last search by just pressing F3, or +Shift+F3 if you want to search backwards.

+ +
+ + +

You can filter the files displayed in the File Selector tool view. +

+

Simply enter your filter in the filter entry at the bottom, for example: +*.html *.php if you only want to see HTML and PHP files in the +current folder.

+

The File Selector will even remember your filters for you.

+ +
+ + +

You can have two views - or even more - of the same document in Kate. Editing +in either will be reflected in both.

+

So if you find yourself scrolling up and down to look at text at the other +end of a document, just press Ctrl+Shift+T to split +horizontally.

+ +
+ + +

Press F8 or Shift+F8 to switch to the +next/previous frame.

+ +
diff --git a/kate/interfaces/Makefile.am b/kate/interfaces/Makefile.am new file mode 100644 index 000000000..1cace79c8 --- /dev/null +++ b/kate/interfaces/Makefile.am @@ -0,0 +1,14 @@ +METASOURCES = AUTO + +noinst_LTLIBRARIES = libkateinterfacesprivate.la + +libkateinterfacesprivate_la_SOURCES = application.cpp mainwindow.cpp documentmanager.cpp viewmanager.cpp toolviewmanager.cpp \ + pluginmanager.cpp plugin.cpp pluginconfiginterface.cpp pluginconfiginterfaceextension.cpp + +libkateinterfacesprivate_la_LIBADD = -lkatepartinterfaces +libkateinterfacesprivate_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) + +kateinclude_HEADERS = application.h documentmanager.h mainwindow.h plugin.h viewmanager.h pluginconfiginterface.h pluginconfiginterfaceextension.h toolviewmanager.h pluginmanager.h +kateincludedir = $(includedir)/kate + +INCLUDES= $(all_includes) diff --git a/kate/interfaces/application.cpp b/kate/interfaces/application.cpp new file mode 100644 index 000000000..160c460c8 --- /dev/null +++ b/kate/interfaces/application.cpp @@ -0,0 +1,97 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "application.h" +#include "application.moc" + +#include "documentmanager.h" +#include "mainwindow.h" +#include "pluginmanager.h" + +#include "../app/kateapp.h" +#include "../app/katedocmanager.h" +#include "../app/katepluginmanager.h" +#include "../app/katemainwindow.h" + +namespace Kate +{ + +class PrivateApplication + { + public: + PrivateApplication () + { + } + + ~PrivateApplication () + { + + } + + KateApp *app; + }; + +Application::Application (void *application) : QObject ((KateApp *) application) +{ + d = new PrivateApplication; + d->app = (KateApp *) application; +} + +Application::~Application () +{ + delete d; +} + +DocumentManager *Application::documentManager () +{ + return d->app->documentManager ()->documentManager (); +} + +PluginManager *Application::pluginManager () +{ + return d->app->pluginManager ()->pluginManager (); +} + +MainWindow *Application::activeMainWindow () +{ + if (!d->app->activeMainWindow()) + return 0; + + return d->app->activeMainWindow()->mainWindow(); +} + +uint Application::mainWindows () +{ + return d->app->mainWindows (); +} + +MainWindow *Application::mainWindow (uint n) +{ + if (n < mainWindows ()) + return d->app->mainWindow (n)->mainWindow(); + + return 0; +} + +Application *application () +{ + return KateApp::self()->application (); +} + +} + diff --git a/kate/interfaces/application.h b/kate/interfaces/application.h new file mode 100644 index 000000000..6f576a311 --- /dev/null +++ b/kate/interfaces/application.h @@ -0,0 +1,79 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_APPLICATION_INCLUDE_ +#define _KATE_APPLICATION_INCLUDE_ + +#include +#include + +namespace Kate +{ + +class DocumentManager; +class PluginManager; +class InitPluginManager; +class MainWindow; + +/** + * Interface to the application, beside some global methodes to access + * other objects like document/projectmanager, ... no way goes around this + * central interface + */ +class KDE_EXPORT Application : public QObject +{ + friend class PrivateApplication; + + Q_OBJECT + + public: + /** + * Construtor, should not interest, internal usage + */ + Application (void *application); + + /** + * Desctructor + */ + virtual ~Application (); + + public: + /** Returns a pointer to the document manager + */ + Kate::DocumentManager *documentManager (); + + Kate::PluginManager *pluginManager (); + + Kate::MainWindow *activeMainWindow (); + + uint mainWindows (); + Kate::MainWindow *mainWindow (uint n = 0); + + private: + class PrivateApplication *d; +}; + +/** + * Returns the application object + * @return Application application object + */ +KDE_EXPORT Application *application (); + +} + +#endif diff --git a/kate/interfaces/documentmanager.cpp b/kate/interfaces/documentmanager.cpp new file mode 100644 index 000000000..1b8292290 --- /dev/null +++ b/kate/interfaces/documentmanager.cpp @@ -0,0 +1,120 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "documentmanager.h" +#include "documentmanager.moc" + +#include "plugin.h" +#include "viewmanager.h" +#include "toolviewmanager.h" +#include "pluginmanager.h" + +#include "application.h" + +#include "../app/katedocmanager.h" + +namespace Kate +{ + +class PrivateDocumentManager + { + public: + PrivateDocumentManager () + { + } + + ~PrivateDocumentManager () + { + } + + KateDocManager *docMan; + }; + +DocumentManager::DocumentManager (void *documentManager) : QObject ((KateDocManager*) documentManager) +{ + d = new PrivateDocumentManager (); + d->docMan = (KateDocManager*) documentManager; +} + +DocumentManager::~DocumentManager () +{ + delete d; +} + +Document *DocumentManager::document (uint n) +{ + return d->docMan->document (n); +} + +Document *DocumentManager::activeDocument () +{ + return d->docMan->activeDocument (); +} + +Document *DocumentManager::documentWithID (uint id) +{ + return d->docMan->documentWithID (id); +} + +int DocumentManager::findDocument (const KURL &url) +{ + return d->docMan->findDocument (url); +} + +bool DocumentManager::isOpen (const KURL &url) +{ + return d->docMan->isOpen (url); +} + +uint DocumentManager::documents () +{ + return d->docMan->documents (); +} + +Document *DocumentManager::openURL(const KURL&url,const QString &encoding,uint *id) +{ + return d->docMan->openURL (url, encoding, id); +} + +bool DocumentManager::closeDocument(Document *document) +{ + return d->docMan->closeDocument (document); +} + +bool DocumentManager::closeDocument(uint n) +{ + return d->docMan->closeDocument (n); +} + +bool DocumentManager::closeDocumentWithID(uint id) +{ + return d->docMan->closeDocument (id); +} + +bool DocumentManager::closeAllDocuments() +{ + return d->docMan->closeAllDocuments (); +} + +DocumentManager *documentManager () +{ + return application()->documentManager (); +} + +} + diff --git a/kate/interfaces/documentmanager.h b/kate/interfaces/documentmanager.h new file mode 100644 index 000000000..82a714aa6 --- /dev/null +++ b/kate/interfaces/documentmanager.h @@ -0,0 +1,111 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_DOCMANAGER_INCLUDE_ +#define _KATE_DOCMANAGER_INCLUDE_ + +#include +#include + +namespace Kate +{ +/** This interface provides access to the Kate Document Manager. +*/ +class KDE_EXPORT DocumentManager : public QObject +{ + friend class PrivateDocumentManager; + + Q_OBJECT + + public: + DocumentManager ( void *documentManager ); + virtual ~DocumentManager (); + + public: + /** Returns a pointer to the document indexed by n in the managers internal list. + */ + class Document *document (uint n = 0); + /** Returns a pointer to the currently active document or NULL if no document is open. + */ + class Document *activeDocument (); + /** Returns a pointer to the document with the given ID or NULL if no such document exists. + */ + class Document *documentWithID (uint id); + + /** Returns the ID of the document located at url if such a document is known by the manager. + */ + int findDocument (const KURL &url); + /** Returns true if the document located at url is open, otherwise false. + */ + bool isOpen (const KURL &url); + + /** returns the number of documents managed by this manager. + */ + uint documents (); + + /** open a document and return a pointer to the document, if you specify a pointer != 0 to the id parameter + * you will get the document id returned too + */ + class Document *openURL(const KURL&url,const QString &encoding=QString::null,uint *id =0); + /** close a document by pointer + */ + bool closeDocument(class Document *document); + /** close a document identified by the index + */ + bool closeDocument(uint n = 0); + /** close a document identified by the ID + */ + bool closeDocumentWithID(uint id); + /** close all documents + */ + bool closeAllDocuments(); + + #undef signals + #define signals public + signals: + #undef signals + #define signals protected + + /** + * emitted if the current doc changes (there need not to be a active document) + */ + void documentChanged (); + + /** + * this document has now been created + */ + void documentCreated (Kate::Document *document); + + /** + * the document with this number was deleted + */ + void documentDeleted (uint documentNumber); + + private: + class PrivateDocumentManager *d; +}; + +/** + * Returns the document manager object + * @return DocumentManager document manager object + */ +KDE_EXPORT DocumentManager *documentManager (); + +} + +#endif diff --git a/kate/interfaces/mainwindow.cpp b/kate/interfaces/mainwindow.cpp new file mode 100644 index 000000000..ad563d6ab --- /dev/null +++ b/kate/interfaces/mainwindow.cpp @@ -0,0 +1,82 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "mainwindow.h" +#include "mainwindow.moc" + +#include "documentmanager.h" +#include "plugin.h" +#include "viewmanager.h" +#include "toolviewmanager.h" +#include "pluginmanager.h" + +#include "../app/katemainwindow.h" +#include "../app/kateviewmanager.h" + +namespace Kate +{ + +class PrivateMainWindow + { + public: + PrivateMainWindow () + { + } + + ~PrivateMainWindow () + { + + } + + KateMainWindow *win; + }; + +MainWindow::MainWindow (void *mainWindow) : QObject ((KateMainWindow*) mainWindow) +{ + d = new PrivateMainWindow; + d->win = (KateMainWindow*) mainWindow; +} + +MainWindow::~MainWindow () +{ + delete d; +} + +KXMLGUIFactory *MainWindow::guiFactory() const +{ + return d->win->guiFactory(); +} + +ViewManager *MainWindow::viewManager () const +{ + return d->win->viewManager ()->viewManager (); +} + +class QWidget *MainWindow::centralWidget() const +{ + return d->win->centralWidget(); +} + +ToolViewManager *MainWindow::toolViewManager () const +{ + return d->win->toolViewManager (); +} + +} + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/interfaces/mainwindow.h b/kate/interfaces/mainwindow.h new file mode 100644 index 000000000..19d5170cb --- /dev/null +++ b/kate/interfaces/mainwindow.h @@ -0,0 +1,65 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_MAINWINDOW_INCLUDE_ +#define _KATE_MAINWINDOW_INCLUDE_ + +#include + +#include +#include + +namespace Kate +{ + +class ViewManager; + +class KDE_EXPORT MainWindow : public QObject +{ + friend class PrivateMainWindow; + + Q_OBJECT + + public: + MainWindow (void *mainWindow); + virtual ~MainWindow (); + + public: /*these are slots for kjs*/ + KXMLGUIFactory *guiFactory() const; + + public slots: + Kate::ViewManager *viewManager () const; + + public : + /** + * Access the widget (in the middle of the 4 sidebars) in which the editor + * component and the KateTabBar are embedded. This widget is a QVBox, so + * other child widgets can be embedded unter the editor widget. + */ + class QWidget *centralWidget() const; + class ToolViewManager *toolViewManager() const; + + private: + class PrivateMainWindow *d; +}; + +} + +#endif + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/kate/interfaces/plugin.cpp b/kate/interfaces/plugin.cpp new file mode 100644 index 000000000..3a540440f --- /dev/null +++ b/kate/interfaces/plugin.cpp @@ -0,0 +1,106 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "application.h" + +#include "plugin.h" +#include "plugin.moc" + +#include + +namespace Kate +{ + + class PrivatePlugin + { + public: + PrivatePlugin () + { + } + + ~PrivatePlugin () + { + } + }; + + class PrivatePluginViewInterface + { + public: + PrivatePluginViewInterface () + { + } + + ~PrivatePluginViewInterface () + { + } + + }; + +unsigned int Plugin::globalPluginNumber = 0; +unsigned int PluginViewInterface::globalPluginViewInterfaceNumber = 0; + +Plugin::Plugin( Application *application, const char *name ) : QObject (application, name ) +{ + globalPluginNumber++; + myPluginNumber = globalPluginNumber; +} + +Plugin::~Plugin() +{ +} + +unsigned int Plugin::pluginNumber () const +{ + return myPluginNumber; +} + +Application *Plugin::application () const +{ + return Kate::application(); +} + +PluginViewInterface::PluginViewInterface() +{ + globalPluginViewInterfaceNumber++; + myPluginViewInterfaceNumber = globalPluginViewInterfaceNumber; +} + +PluginViewInterface::~PluginViewInterface() +{ +} + +unsigned int PluginViewInterface::pluginViewInterfaceNumber () const +{ + return myPluginViewInterfaceNumber; +} + +Plugin *createPlugin ( const char* libname, Application *application, const char *name, const QStringList &args ) +{ + return KParts::ComponentFactory::createInstanceFromLibrary( libname, application, name, args); +} + +PluginViewInterface *pluginViewInterface (Plugin *plugin) +{ + if (!plugin) + return 0; + + return static_cast(plugin->qt_cast("Kate::PluginViewInterface")); +} + +} + diff --git a/kate/interfaces/plugin.h b/kate/interfaces/plugin.h new file mode 100644 index 000000000..57bddae71 --- /dev/null +++ b/kate/interfaces/plugin.h @@ -0,0 +1,87 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_PLUGIN_INCLUDE_ +#define _KATE_PLUGIN_INCLUDE_ + +#include +#include +#include + +#include + +namespace Kate +{ + +class Application; +class MainWindow; + +class KDE_EXPORT Plugin : public QObject +{ + friend class PrivatePlugin; + + Q_OBJECT + + public: + Plugin (Application *application = 0, const char *name = 0 ); + virtual ~Plugin (); + + unsigned int pluginNumber () const; + + Application *application() const; + + private: + class PrivatePlugin *d; + static unsigned int globalPluginNumber; + unsigned int myPluginNumber; +}; + +KDE_EXPORT Plugin *createPlugin ( const char* libname, Application *application = 0, const char *name = 0,const QStringList &args = QStringList() ); + +/* + * view plugin class + * this plugin will be bound to a ktexteditor::view + */ +class KDE_EXPORT PluginViewInterface +{ + friend class PrivatePluginViewInterface; + + public: + PluginViewInterface (); + virtual ~PluginViewInterface (); + + unsigned int pluginViewInterfaceNumber () const; + + /* + * will be called from the part to bound the plugin to a view + */ + virtual void addView (MainWindow *) = 0; + virtual void removeView (MainWindow *) = 0; + + private: + class PrivatePluginViewInterface *d; + static unsigned int globalPluginViewInterfaceNumber; + unsigned int myPluginViewInterfaceNumber; +}; + +KDE_EXPORT PluginViewInterface *pluginViewInterface (Plugin *plugin); + +} + +#endif diff --git a/kate/interfaces/pluginconfiginterface.cpp b/kate/interfaces/pluginconfiginterface.cpp new file mode 100644 index 000000000..594b73e5d --- /dev/null +++ b/kate/interfaces/pluginconfiginterface.cpp @@ -0,0 +1,63 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "pluginconfiginterface.h" + +#include "plugin.h" + +namespace Kate +{ + +class PrivatePluginConfigInterface +{ + public: + PrivatePluginConfigInterface() {} + ~PrivatePluginConfigInterface() {} +}; + +} + +using namespace Kate; + +unsigned int PluginConfigInterface::globalPluginConfigInterfaceNumber = 0; + +PluginConfigInterface::PluginConfigInterface() +{ + globalPluginConfigInterfaceNumber++; + myPluginConfigInterfaceNumber = globalPluginConfigInterfaceNumber++; + + d = new PrivatePluginConfigInterface(); +} + +PluginConfigInterface::~PluginConfigInterface() +{ + delete d; +} + +unsigned int PluginConfigInterface::pluginConfigInterfaceNumber () const +{ + return myPluginConfigInterfaceNumber; +} + +PluginConfigInterface *Kate::pluginConfigInterface (Plugin *plugin) +{ + if (!plugin) + return 0; + + return static_cast(plugin->qt_cast("Kate::PluginConfigInterface")); +} diff --git a/kate/interfaces/pluginconfiginterface.h b/kate/interfaces/pluginconfiginterface.h new file mode 100644 index 000000000..f626b1cde --- /dev/null +++ b/kate/interfaces/pluginconfiginterface.h @@ -0,0 +1,63 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __kate_pluginconfiginterface_h__ +#define __kate_pluginconfiginterface_h__ + +#include + +namespace Kate +{ + +/* +* This is an interface for the KTextEditor::Document/Plugin/ViewPlugin classes !!! +*/ +class KDE_EXPORT PluginConfigInterface +{ + friend class PrivatePluginConfigInterface; + + public: + PluginConfigInterface(); + virtual ~PluginConfigInterface(); + + unsigned int pluginConfigInterfaceNumber () const; + + // + // slots !!! + // + public: + /** + Read/Write the config to the standard place where this editor + part saves it config, say: read/save default values for that + editor part + */ + virtual void readConfig () = 0; + virtual void writeConfig () = 0; + + private: + class PrivatePluginConfigInterface *d; + static unsigned int globalPluginConfigInterfaceNumber; + unsigned int myPluginConfigInterfaceNumber; +}; + +class Plugin; +KDE_EXPORT PluginConfigInterface *pluginConfigInterface (Plugin *plugin); + +} + +#endif diff --git a/kate/interfaces/pluginconfiginterfaceextension.cpp b/kate/interfaces/pluginconfiginterfaceextension.cpp new file mode 100644 index 000000000..99cb824bd --- /dev/null +++ b/kate/interfaces/pluginconfiginterfaceextension.cpp @@ -0,0 +1,68 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "pluginconfiginterfaceextension.h" +#include "pluginconfiginterfaceextension.moc" + +#include "plugin.h" + +namespace Kate +{ + +class PrivatePluginConfigInterfaceExtension +{ + public: + PrivatePluginConfigInterfaceExtension() {} + ~PrivatePluginConfigInterfaceExtension() {} +}; + +} + +using namespace Kate; + +PluginConfigPage::PluginConfigPage ( QWidget *parent, const char *name ) : QWidget (parent, name) { } + +PluginConfigPage::~PluginConfigPage () { } + +unsigned int PluginConfigInterfaceExtension::globalPluginConfigInterfaceExtensionNumber = 0; + +PluginConfigInterfaceExtension::PluginConfigInterfaceExtension() +{ + globalPluginConfigInterfaceExtensionNumber++; + myPluginConfigInterfaceExtensionNumber = globalPluginConfigInterfaceExtensionNumber++; + + d = new PrivatePluginConfigInterfaceExtension(); +} + +PluginConfigInterfaceExtension::~PluginConfigInterfaceExtension() +{ + delete d; +} + +unsigned int PluginConfigInterfaceExtension::pluginConfigInterfaceExtensionNumber () const +{ + return myPluginConfigInterfaceExtensionNumber; +} + +PluginConfigInterfaceExtension *Kate::pluginConfigInterfaceExtension (Plugin *plugin) +{ + if (!plugin) + return 0; + + return static_cast(plugin->qt_cast("Kate::PluginConfigInterfaceExtension")); +} diff --git a/kate/interfaces/pluginconfiginterfaceextension.h b/kate/interfaces/pluginconfiginterfaceextension.h new file mode 100644 index 000000000..4c4169179 --- /dev/null +++ b/kate/interfaces/pluginconfiginterfaceextension.h @@ -0,0 +1,104 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __kate_pluginconfiginterfaceextension_h__ +#define __kate_pluginconfiginterfaceextension_h__ + +#include +#include +#include + +namespace Kate +{ + +class KDE_EXPORT PluginConfigPage : public QWidget +{ + Q_OBJECT + + public: + PluginConfigPage ( QWidget *parent=0, const char *name=0 ); + virtual ~PluginConfigPage (); + + // + // slots !!! + // + public: + /** + Applies the changes to the document + */ + virtual void apply () = 0; + + /** + Reset the changes + */ + virtual void reset () = 0; + + /** + Sets default options + */ + virtual void defaults () = 0; + + signals: + void changed(); +}; + +/* +* This is an interface for the KTextEditor::Document/Plugin/ViewPlugin classes !!! +*/ +class KDE_EXPORT PluginConfigInterfaceExtension +{ + friend class PrivatePluginConfigInterfaceExtension; + + public: + PluginConfigInterfaceExtension(); + virtual ~PluginConfigInterfaceExtension(); + + unsigned int pluginConfigInterfaceExtensionNumber () const; + + // + // slots !!! + // + public: + /** + Number of available config pages + */ + virtual uint configPages () const = 0; + + /** + returns config page with the given number, + config pages from 0 to configPages()-1 are available + if configPages() > 0 + */ + virtual PluginConfigPage *configPage (uint number = 0, QWidget *parent = 0, const char *name=0 ) = 0; + + virtual QString configPageName (uint number = 0) const = 0; + virtual QString configPageFullName (uint number = 0) const = 0; + virtual QPixmap configPagePixmap (uint number = 0, int size = KIcon::SizeSmall) const = 0; + + private: + class PrivatePluginConfigInterfaceExtension *d; + static unsigned int globalPluginConfigInterfaceExtensionNumber; + unsigned int myPluginConfigInterfaceExtensionNumber; +}; + +class Plugin; +KDE_EXPORT PluginConfigInterfaceExtension *pluginConfigInterfaceExtension (Plugin *plugin); + +} + +#endif diff --git a/kate/interfaces/pluginmanager.cpp b/kate/interfaces/pluginmanager.cpp new file mode 100644 index 000000000..2ea7c54b5 --- /dev/null +++ b/kate/interfaces/pluginmanager.cpp @@ -0,0 +1,78 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "pluginmanager.moc" + +#include "plugin.h" +#include "documentmanager.h" +#include "toolviewmanager.h" +#include "pluginmanager.h" + +#include "../app/katepluginmanager.h" +#include "../app/kateapp.h" + +namespace Kate +{ + +class PrivatePluginManager + { + public: + PrivatePluginManager () + { + } + + ~PrivatePluginManager () + { + } + + KatePluginManager *pluginMan; + }; + +PluginManager::PluginManager (void *pluginManager) : QObject ((KatePluginManager*) pluginManager) +{ + d = new PrivatePluginManager (); + d->pluginMan = (KatePluginManager*) pluginManager; +} + +PluginManager::~PluginManager () +{ + delete d; +} + +Plugin *PluginManager::plugin(const QString &name) +{ + return d->pluginMan->plugin(name); +} + +bool PluginManager::pluginAvailable(const QString &name) +{ + return d->pluginMan->pluginAvailable (name); +} + +Plugin *PluginManager::loadPlugin(const QString &name,bool permanent) +{ + return d->pluginMan->loadPlugin (name, permanent); +} + +void PluginManager::unloadPlugin(const QString &name,bool permanent) +{ + d->pluginMan->unloadPlugin (name, permanent); +} + +} + diff --git a/kate/interfaces/pluginmanager.h b/kate/interfaces/pluginmanager.h new file mode 100644 index 000000000..53279fd94 --- /dev/null +++ b/kate/interfaces/pluginmanager.h @@ -0,0 +1,70 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_PLUGINMANAGER_INCLUDE_ +#define _KATE_PLUGINMANAGER_INCLUDE_ + +#include +#include + +namespace Kate +{ +/** This interface provides access to the Kate Plugin Manager. +*/ +class KDE_EXPORT PluginManager : public QObject +{ + friend class PrivatePluginManager; + + Q_OBJECT + + public: + PluginManager ( void *pluginManager ); + virtual ~PluginManager (); + + public: + /** if the plugin with the library name "name" is loaded, a pointer to that plugin is returned */ + class Plugin *plugin(const QString &name); + + /** return true, if plugin is known to kate (either loaded or not loaded) + * + * This method is not used yet + */ + bool pluginAvailable(const QString &name); + + /** tries loading the specified plugin and returns a pointer to the new plugin or 0 + * if permanent is true (default value) the plugin will be loaded at the next kate startup + * + * This method is not used yet + */ + class Plugin *loadPlugin(const QString &name,bool permanent=true); + + /** unload the specified plugin. If the value permanent is true (default value), the plugin will not be + * loaded on kate's next startup. Even if it had been loaded with permanent=true. + * + * This method is not used yet + */ + void unloadPlugin(const QString &name,bool permanent=true); + + private: + class PrivatePluginManager *d; +}; + +} + +#endif diff --git a/kate/interfaces/toolviewmanager.cpp b/kate/interfaces/toolviewmanager.cpp new file mode 100644 index 000000000..9f96a476d --- /dev/null +++ b/kate/interfaces/toolviewmanager.cpp @@ -0,0 +1,85 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Joseph Wenninger + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "toolviewmanager.h" +#include "toolviewmanager.moc" + +#include "plugin.h" +#include "documentmanager.h" +#include "pluginmanager.h" + +#include "../app/katemainwindow.h" + +namespace Kate +{ + +class PrivateToolViewManager + { + public: + PrivateToolViewManager () + { + } + + ~PrivateToolViewManager () + { + } + + KateMainWindow *toolViewMan; + }; + +ToolViewManager::ToolViewManager (void *toolViewManager) : QObject ((KateMainWindow*) toolViewManager) +{ + d = new PrivateToolViewManager (); + d->toolViewMan = (KateMainWindow*) toolViewManager; +} + +ToolViewManager::~ToolViewManager () +{ + delete d; +} + +QWidget *ToolViewManager::createToolView (const QString &identifier, ToolViewManager::Position pos, const QPixmap &icon, const QString &text) +{ + return d->toolViewMan->createToolView (identifier, (KMultiTabBar::KMultiTabBarPosition)pos, icon, text); +} + +bool ToolViewManager::moveToolView (QWidget *widget, ToolViewManager::Position pos) +{ + if (!widget || !widget->qt_cast("KateMDI::ToolView")) + return false; + + return d->toolViewMan->moveToolView (static_cast(widget), (KMultiTabBar::KMultiTabBarPosition)pos); +} + +bool ToolViewManager::showToolView(QWidget *widget) +{ + if (!widget || !widget->qt_cast("KateMDI::ToolView")) + return false; + + return d->toolViewMan->showToolView (static_cast(widget)); +} + +bool ToolViewManager::hideToolView(QWidget *widget) +{ + if (!widget || !widget->qt_cast("KateMDI::ToolView")) + return false; + + return d->toolViewMan->hideToolView (static_cast(widget)); +} + +} diff --git a/kate/interfaces/toolviewmanager.h b/kate/interfaces/toolviewmanager.h new file mode 100644 index 000000000..0a1011181 --- /dev/null +++ b/kate/interfaces/toolviewmanager.h @@ -0,0 +1,96 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Joseph Wenninger + Copyright (C) 2002 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_TOOLVIEWMANAGER_INCLUDE_ +#define _KATE_TOOLVIEWMANAGER_INCLUDE_ + +#include +#include + +namespace Kate +{ + +/** + Interface to the toolviewmanager + */ +class KDE_EXPORT ToolViewManager : public QObject +{ + friend class PrivateToolViewManager; + + Q_OBJECT + + public: + /** + * Construtor, should not interest, internal usage + */ + ToolViewManager (void *toolViewManager); + + /** + * Desctructor + */ + virtual ~ToolViewManager (); + + public: + /** + * positions + */ + enum Position {Left, Right, Top, Bottom}; + + /** + * add a given widget to the given sidebar if possible, name is very important + * @param identifier unique identifier for this toolview + * @param pos position for the toolview, if we are in session restore, this is only a preference + * @param icon icon to use for the toolview + * @param text text to use in addition to icon + * @return created toolview on success or 0 + */ + QWidget *createToolView (const QString &identifier, ToolViewManager::Position pos, const QPixmap &icon, const QString &text); + + /** + * Move the toolview + * @param widget to show, widget given must be widget constructed by createToolView + * @param pos position to move widget to + * @return bool success + */ + bool moveToolView (QWidget *widget, ToolViewManager::Position pos); + + /** + * Show the toolview + * @param widget to show, widget given must be widget constructed by createToolView + * @return bool success + */ + bool showToolView (QWidget *widget); + + /** + * Hide the toolview + * @param widget to hide, widget given must be widget constructed by createToolView + * @return bool success + */ + bool hideToolView (QWidget *widget); + + private: + /** + * REALLY PRIVATE ;) + */ + class PrivateToolViewManager *d; +}; + +} + +#endif diff --git a/kate/interfaces/viewmanager.cpp b/kate/interfaces/viewmanager.cpp new file mode 100644 index 000000000..e2dbd34de --- /dev/null +++ b/kate/interfaces/viewmanager.cpp @@ -0,0 +1,73 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "viewmanager.h" +#include "viewmanager.moc" + +#include "plugin.h" +#include "documentmanager.h" +#include "toolviewmanager.h" +#include "pluginmanager.h" + +#include "../app/kateviewmanager.h" + +namespace Kate +{ + +class PrivateViewManager + { + public: + PrivateViewManager () + { + } + + ~PrivateViewManager () + { + } + + KateViewManager *viewMan; + }; + +ViewManager::ViewManager (void *viewManager) : QObject ((KateViewManager*) viewManager) +{ + d = new PrivateViewManager (); + d->viewMan = (KateViewManager*) viewManager; +} + +ViewManager::~ViewManager () +{ + delete d; +} + +View *ViewManager::activeView() +{ + return d->viewMan->activeView(); +} + +void ViewManager::activateView ( uint documentNumber ) +{ + d->viewMan->activateView( documentNumber ); +} + +void ViewManager::openURL (const KURL &url) +{ + d->viewMan->openURL (url, QString::null, true); +} + +} + diff --git a/kate/interfaces/viewmanager.h b/kate/interfaces/viewmanager.h new file mode 100644 index 000000000..ab7a74ce8 --- /dev/null +++ b/kate/interfaces/viewmanager.h @@ -0,0 +1,89 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_VIEWMANAGER_INCLUDE_ +#define _KATE_VIEWMANAGER_INCLUDE_ + +#include +#include + +namespace Kate +{ + +class View; + +/** + * Interface to the viewmanager + */ +class KDE_EXPORT ViewManager : public QObject +{ + friend class PrivateViewManager; + + Q_OBJECT + + public: + /** + * Construtor, should not interest, internal usage + */ + ViewManager (void *viewManager); + + /** + * Desctructor + */ + virtual ~ViewManager (); + + public slots: /*these are slots for kjs*/ + /** + * Returns a pointer to the currently active view + * @return View active view + */ + Kate::View *activeView (); + + /** + * Activates the view with the corresponding documentNumber + * @param documentNumber the document's number + */ + void activateView ( uint documentNumber ); + + /** + * Opens the file pointed to by URL + * @param url url to the file + */ + void openURL (const KURL &url); + + #undef signals + #define signals public + signals: + #undef signals + #define signals protected + + /** + * Active view has changed + */ + void viewChanged (); + + private: + /** + * REALLY PRIVATE ;) + */ + class PrivateViewManager *d; +}; + +} + +#endif diff --git a/kate/pics/Makefile.am b/kate/pics/Makefile.am new file mode 100644 index 000000000..d42127e99 --- /dev/null +++ b/kate/pics/Makefile.am @@ -0,0 +1,6 @@ +KDE_ICON = AUTO + +SUBDIRS = actions + +kate_pics_data_DATA = sessionchooser.png +kate_pics_datadir = $(kde_datadir)/kate/pics \ No newline at end of file diff --git a/kate/pics/actions/Makefile.am b/kate/pics/actions/Makefile.am new file mode 100644 index 000000000..6e254a421 --- /dev/null +++ b/kate/pics/actions/Makefile.am @@ -0,0 +1,2 @@ +kateiconsdir = $(kde_datadir)/kate/icons +kateicons_ICON = AUTO diff --git a/kate/pics/actions/cr16-action-curfiledir.png b/kate/pics/actions/cr16-action-curfiledir.png new file mode 100644 index 000000000..9b85f8c9f Binary files /dev/null and b/kate/pics/actions/cr16-action-curfiledir.png differ diff --git a/kate/pics/actions/cr16-action-highlighting.png b/kate/pics/actions/cr16-action-highlighting.png new file mode 100644 index 000000000..a204bfddf Binary files /dev/null and b/kate/pics/actions/cr16-action-highlighting.png differ diff --git a/kate/pics/actions/cr16-action-modified.png b/kate/pics/actions/cr16-action-modified.png new file mode 100644 index 000000000..41b3f4367 Binary files /dev/null and b/kate/pics/actions/cr16-action-modified.png differ diff --git a/kate/pics/actions/cr16-action-modmod.png b/kate/pics/actions/cr16-action-modmod.png new file mode 100644 index 000000000..888024d07 Binary files /dev/null and b/kate/pics/actions/cr16-action-modmod.png differ diff --git a/kate/pics/actions/cr16-action-modonhd.png b/kate/pics/actions/cr16-action-modonhd.png new file mode 100644 index 000000000..4ffdef7f3 Binary files /dev/null and b/kate/pics/actions/cr16-action-modonhd.png differ diff --git a/kate/pics/actions/cr16-action-null.png b/kate/pics/actions/cr16-action-null.png new file mode 100644 index 000000000..021451f7f Binary files /dev/null and b/kate/pics/actions/cr16-action-null.png differ diff --git a/kate/pics/actions/cr32-action-highlighting.png b/kate/pics/actions/cr32-action-highlighting.png new file mode 100644 index 000000000..5c8232f79 Binary files /dev/null and b/kate/pics/actions/cr32-action-highlighting.png differ diff --git a/kate/pics/actions/lo16-action-curfiledir.png b/kate/pics/actions/lo16-action-curfiledir.png new file mode 100644 index 000000000..b68a03b17 Binary files /dev/null and b/kate/pics/actions/lo16-action-curfiledir.png differ diff --git a/kate/pics/actions/lo16-action-indent.png b/kate/pics/actions/lo16-action-indent.png new file mode 100644 index 000000000..ab7ee7593 Binary files /dev/null and b/kate/pics/actions/lo16-action-indent.png differ diff --git a/kate/pics/actions/lo16-action-modified.png b/kate/pics/actions/lo16-action-modified.png new file mode 100644 index 000000000..6edb6969f Binary files /dev/null and b/kate/pics/actions/lo16-action-modified.png differ diff --git a/kate/pics/actions/lo16-action-modmod.png b/kate/pics/actions/lo16-action-modmod.png new file mode 100644 index 000000000..652d87d26 Binary files /dev/null and b/kate/pics/actions/lo16-action-modmod.png differ diff --git a/kate/pics/actions/lo16-action-modonhd.png b/kate/pics/actions/lo16-action-modonhd.png new file mode 100644 index 000000000..79e5791c6 Binary files /dev/null and b/kate/pics/actions/lo16-action-modonhd.png differ diff --git a/kate/pics/actions/lo16-action-null.png b/kate/pics/actions/lo16-action-null.png new file mode 100644 index 000000000..021451f7f Binary files /dev/null and b/kate/pics/actions/lo16-action-null.png differ diff --git a/kate/pics/actions/lo16-action-unindent.png b/kate/pics/actions/lo16-action-unindent.png new file mode 100644 index 000000000..119e76344 Binary files /dev/null and b/kate/pics/actions/lo16-action-unindent.png differ diff --git a/kate/pics/actions/lo22-action-indent.png b/kate/pics/actions/lo22-action-indent.png new file mode 100644 index 000000000..8eba60153 Binary files /dev/null and b/kate/pics/actions/lo22-action-indent.png differ diff --git a/kate/pics/actions/lo22-action-unindent.png b/kate/pics/actions/lo22-action-unindent.png new file mode 100644 index 000000000..26a013d7f Binary files /dev/null and b/kate/pics/actions/lo22-action-unindent.png differ diff --git a/kate/pics/hi128-app-kate.png b/kate/pics/hi128-app-kate.png new file mode 100644 index 000000000..dfa6aec3f Binary files /dev/null and b/kate/pics/hi128-app-kate.png differ diff --git a/kate/pics/hi128-app-kwrite.png b/kate/pics/hi128-app-kwrite.png new file mode 100644 index 000000000..fd4db26dc Binary files /dev/null and b/kate/pics/hi128-app-kwrite.png differ diff --git a/kate/pics/hi16-app-kate.png b/kate/pics/hi16-app-kate.png new file mode 100644 index 000000000..3c939e637 Binary files /dev/null and b/kate/pics/hi16-app-kate.png differ diff --git a/kate/pics/hi16-app-kwrite.png b/kate/pics/hi16-app-kwrite.png new file mode 100644 index 000000000..3c939e637 Binary files /dev/null and b/kate/pics/hi16-app-kwrite.png differ diff --git a/kate/pics/hi22-app-kate.png b/kate/pics/hi22-app-kate.png new file mode 100644 index 000000000..29c225bea Binary files /dev/null and b/kate/pics/hi22-app-kate.png differ diff --git a/kate/pics/hi22-app-kwrite.png b/kate/pics/hi22-app-kwrite.png new file mode 100644 index 000000000..29c225bea Binary files /dev/null and b/kate/pics/hi22-app-kwrite.png differ diff --git a/kate/pics/hi32-app-kate.png b/kate/pics/hi32-app-kate.png new file mode 100644 index 000000000..e4185bfe6 Binary files /dev/null and b/kate/pics/hi32-app-kate.png differ diff --git a/kate/pics/hi32-app-kwrite.png b/kate/pics/hi32-app-kwrite.png new file mode 100644 index 000000000..e4185bfe6 Binary files /dev/null and b/kate/pics/hi32-app-kwrite.png differ diff --git a/kate/pics/hi48-app-kate.png b/kate/pics/hi48-app-kate.png new file mode 100644 index 000000000..08c72efab Binary files /dev/null and b/kate/pics/hi48-app-kate.png differ diff --git a/kate/pics/hi48-app-kwrite.png b/kate/pics/hi48-app-kwrite.png new file mode 100644 index 000000000..08c72efab Binary files /dev/null and b/kate/pics/hi48-app-kwrite.png differ diff --git a/kate/pics/hi64-app-kate.png b/kate/pics/hi64-app-kate.png new file mode 100644 index 000000000..c553a93c2 Binary files /dev/null and b/kate/pics/hi64-app-kate.png differ diff --git a/kate/pics/hi64-app-kwrite.png b/kate/pics/hi64-app-kwrite.png new file mode 100644 index 000000000..c553a93c2 Binary files /dev/null and b/kate/pics/hi64-app-kwrite.png differ diff --git a/kate/pics/hisc-app-kate2.svgz b/kate/pics/hisc-app-kate2.svgz new file mode 100644 index 000000000..241e081d1 Binary files /dev/null and b/kate/pics/hisc-app-kate2.svgz differ diff --git a/kate/pics/hisc-app-kwrite2.svgz b/kate/pics/hisc-app-kwrite2.svgz new file mode 100644 index 000000000..241e081d1 Binary files /dev/null and b/kate/pics/hisc-app-kwrite2.svgz differ diff --git a/kate/pics/sessionchooser.png b/kate/pics/sessionchooser.png new file mode 100644 index 000000000..4c0a8865e Binary files /dev/null and b/kate/pics/sessionchooser.png differ diff --git a/kate/pics/sessionchooser.xcf b/kate/pics/sessionchooser.xcf new file mode 100644 index 000000000..e81b30f21 Binary files /dev/null and b/kate/pics/sessionchooser.xcf differ diff --git a/kate/utils/Makefile.am b/kate/utils/Makefile.am new file mode 100644 index 000000000..eda68c724 --- /dev/null +++ b/kate/utils/Makefile.am @@ -0,0 +1,16 @@ +INCLUDES = -I$(top_srcdir)/kate/utils $(all_includes) + +EXTRA_DIST = README + +lib_LTLIBRARIES = libkateutils.la + +libkateutils_la_SOURCES = dockviewbase.cpp messageview.cpp listboxview.cpp + +libkateutils_la_LDFLAGS = $(all_libraries) -no-undefined + +libkateutils_la_LIBADD = $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_KIO) + +libkateutils_la_METASOURCES = AUTO + +kateutilsinclude_HEADERS = dockviewbase.h messageview.h listboxview.h +kateutilsincludedir = $(includedir)/kate/utils diff --git a/kate/utils/README b/kate/utils/README new file mode 100644 index 000000000..262b108f0 --- /dev/null +++ b/kate/utils/README @@ -0,0 +1,29 @@ +README for libkateutils + +Contents: +* What it is +* Maintainer + +What it is +========== + +This library is a container for classes that may be usefull for +Kate and for kate plugins. If you have a class that you think would +be usefull for other plugins, ask the maintainer of this library +to put it here. + +If you find a class in a plugin (ore even elsewhere) that you need to +copy in order to use it inside kate or a kate plugin, consider debating with +the author of that class to move it here. + +To fit in, the class must be generic enough that it can be usefull for +many purposes. + +Apart from the convenience (and avoided copies of code) putting classes in this +library will help us maintain a common feel of how kate works. + +Maintainer +========== + +This library was started in july 2002 and is maintained by +Anders Lund diff --git a/kate/utils/dockviewbase.cpp b/kate/utils/dockviewbase.cpp new file mode 100644 index 000000000..54a4d6d6e --- /dev/null +++ b/kate/utils/dockviewbase.cpp @@ -0,0 +1,102 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "dockviewbase.h" +#include "dockviewbase.moc" + +#include +#include + +//#include + +namespace Kate { + +// data storage +class DockViewBasePrivate { + public: + QWidget *header; + QLabel *lTitle; + QLabel *lPrefix; +}; + +} + +Kate::DockViewBase::DockViewBase( QWidget* parent, const char* name ) + : QVBox( parent, name ), + d ( new Kate::DockViewBasePrivate ) +{ + init( QString::null, QString::null ); +} + +Kate::DockViewBase::DockViewBase( const QString &prefix, const QString &title, QWidget* parent, const char* name ) + : QVBox( parent, name ), + d ( new Kate::DockViewBasePrivate ) +{ + init( prefix, title ); +} + +Kate::DockViewBase::~DockViewBase() +{ + delete d; +} + +void Kate::DockViewBase::setTitlePrefix( const QString &prefix ) +{ + d->lPrefix->setText( prefix ); + d->lPrefix->show(); +} + +QString Kate::DockViewBase::titlePrefix() const +{ + return d->lPrefix->text(); +} + +void Kate::DockViewBase::setTitle( const QString &title ) +{ + d->lTitle->setText( title ); + d->lTitle->show(); +} + +QString Kate::DockViewBase::title() const +{ + return d->lTitle->text(); +} + +void Kate::DockViewBase::setTitle( const QString &prefix, const QString &title ) +{ + setTitlePrefix( prefix ); + setTitle( title ); +} + +void Kate::DockViewBase::init( const QString &prefix, const QString &title ) +{ + setSpacing( 4 ); + d->header = new QWidget( this ); + d->header->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed, true ) ); + QHBoxLayout *lo = new QHBoxLayout( d->header ); + lo->setSpacing( 6 ); + lo->insertSpacing( 0, 6 ); + d->lPrefix = new QLabel( title, d->header ); + lo->addWidget( d->lPrefix ); + d->lTitle = new QLabel( title, d->header ); + lo->addWidget( d->lTitle ); + lo->setStretchFactor( d->lTitle, 1 ); + lo->insertSpacing( -1, 6 ); + if ( prefix.isEmpty() ) d->lPrefix->hide(); + if ( title.isEmpty() ) d->lTitle->hide(); +} diff --git a/kate/utils/dockviewbase.h b/kate/utils/dockviewbase.h new file mode 100644 index 000000000..9e3010302 --- /dev/null +++ b/kate/utils/dockviewbase.h @@ -0,0 +1,102 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_DOCKVIEW_BASE_H_ +#define _KATE_DOCKVIEW_BASE_H_ + +#include + +/** +* Namespace collecting as much of the internal Kate classes as we +* can manage. +*/ +namespace Kate +{ + +/** + Base class for dockwidget views + This class creates a widget meant to be set as the main widget + for a KDockWidget. + + This class provides a title in two parts, titlePrefix and title. The + size policies are set so that neither will prevent resizing the view to + a width smaller than the texts, the titlePrefix (on the left) will remain + fully visible for as long as possible. + + Use the titlePrefix to describe the nature of the view contents, for + example "Messages". + + Use the title to inform the user what is currently in the view, + for example the name of a related file, a command or similar. + + To add widgets, just create them with this as the parent. + + @author Anders Lund +*/ + + +class DockViewBase : public QVBox { + Q_OBJECT + public: + /** + Create a KateDockViewBase. + */ + DockViewBase( QWidget *parent=0, const char *name=0 ); + + /** + Create a KateDockViewBase with the title prefix @p prefix + and the title @p title. + */ + DockViewBase( const QString &prefix, const QString &title, QWidget *parent=0, const char *name=0 ); + + ~DockViewBase(); + + /** + Set the title prefix to @p prefix. + */ + void setTitlePrefix( const QString &prefix ); + + /** + @return The title prefix. + */ + QString titlePrefix() const; + + /** + Set the title to @p title + */ + void setTitle( const QString &title ); + + /** + Convenience method, sets both the prefix and title + */ + void setTitle( const QString &prefix, const QString &title ); + + /** + @return the title of the KateDockViewBase + */ + QString title() const; + + private: + /** Private initialization */ + void init( const QString &, const QString &); + class DockViewBasePrivate *d; +}; + +} + +#endif // _KATE_DOCKVIEW_BASE_H_ diff --git a/kate/utils/listboxview.cpp b/kate/utils/listboxview.cpp new file mode 100644 index 000000000..69e103bad --- /dev/null +++ b/kate/utils/listboxview.cpp @@ -0,0 +1,57 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "listboxview.h" +#include "listboxview.moc" + +#include + +namespace Kate { + +// private storage +class ListboxViewPrivate { + public: + KListBox *listbox; +}; + +} + +Kate::ListboxView::ListboxView( QWidget *parent, const char *name ) + : Kate::DockViewBase( parent, name), + d( new Kate::ListboxViewPrivate) +{ + d->listbox = new KListBox( this ); +} + +Kate::ListboxView::ListboxView( const QString &titlePrefix, const QString &title, QWidget *parent, const char *name ) + : Kate::DockViewBase( titlePrefix, title, parent, name), + d( new Kate::ListboxViewPrivate) +{ + d->listbox = new KListBox( this ); +} + +Kate::ListboxView::~ListboxView() +{ + delete d; +} + +KListBox *Kate::ListboxView::listbox() +{ + return d->listbox; +} + diff --git a/kate/utils/listboxview.h b/kate/utils/listboxview.h new file mode 100644 index 000000000..233b4798a --- /dev/null +++ b/kate/utils/listboxview.h @@ -0,0 +1,44 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_LISTBOX_VIEW_H_ +#define _KATE_LISTBOX_VIEW_H_ + +#include "dockviewbase.h" + +class KListBox; + +namespace Kate +{ + +class ListboxView : public DockViewBase { + Q_OBJECT + public: + ListboxView( QWidget *parent=0, const char *name=0 ); + ListboxView( const QString &titlePrefix, const QString &title, QWidget *parent=0, const char *name=0 ); + ~ListboxView(); + + KListBox * listbox(); + + private: + class ListboxViewPrivate *d; +}; + +} + +#endif // _KATE_LISTBOX_VIEW_H_ diff --git a/kate/utils/messageview.cpp b/kate/utils/messageview.cpp new file mode 100644 index 000000000..2f0904433 --- /dev/null +++ b/kate/utils/messageview.cpp @@ -0,0 +1,46 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "messageview.h" +#include "messageview.moc" + +#include + +Kate::MessageView::MessageView( QWidget *parent, const char *name ) + : Kate::DockViewBase( parent, name ) +{ + m_view = new QTextBrowser( this ); + // m_view->setFormat( Qt::richText ); // should be!! + connect( m_view, SIGNAL( linkClicked( const QString & ) ), + SIGNAL( linkClicked( const QString & ) ) ); +} + +Kate::MessageView::~MessageView() +{ +} + +void Kate::MessageView::addMessage( const QString &msg ) +{ + m_view->append( msg ); + m_view->scrollToBottom(); +} + +void Kate::MessageView::clear() +{ + m_view->clear(); +} diff --git a/kate/utils/messageview.h b/kate/utils/messageview.h new file mode 100644 index 000000000..d6d330842 --- /dev/null +++ b/kate/utils/messageview.h @@ -0,0 +1,72 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Anders Lund + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 _KATE_MESSAGE_VIEW_H_ +#define _KATE_MESSAGE_VIEW_H_ + +#include "dockviewbase.h" + +/** + A simple message view for Kate plugins. + + This is a message view for displaying output from processes. + + It uses a QTextEdit in _ mode to display the text. + + You can use HTML links, for example to allow the user to go + to a line in a precessed document. + + Connect to the linkClicked() signal to process the links. + + @section Usage + + To use it in the intended way: + @li Create a KProcess (or derived class) + @li As the output of the process arrives, hand it over + using addText(). The view will add it to the end and + make sure it is scrolled to the end. + + Each time you restart the process, clear() the view. +*/ + +class QTextBrowser; + +namespace Kate +{ + +class MessageView : public DockViewBase { + Q_OBJECT + public: + MessageView( QWidget *parent=0, const char *name=0 ); + ~MessageView(); + + public slots: + void addMessage( const QString &msg ); + void clear(); + + signals: + void linkClicked( const QString & href ); + + private: + QTextBrowser *m_view; +}; + +} + +#endif // _KATE_MESSAGE_VIEW_H_ + diff --git a/kcheckpass/Makefile.am b/kcheckpass/Makefile.am new file mode 100644 index 000000000..bc8342301 --- /dev/null +++ b/kcheckpass/Makefile.am @@ -0,0 +1,26 @@ +## Makefile.am for kcheckpass +## written by Christian Esken +## + +INCLUDES= $(KDE_USE_FPIE) $(all_includes) + +bin_PROGRAMS = kcheckpass + +kcheckpass_SOURCES = kcheckpass.c \ + checkpass_etcpasswd.c checkpass_pam.c checkpass_shadow.c \ + checkpass_osfc2passwd.c checkpass_aix.c +kcheckpass_LDADD = -lkdefakes $(PASSWDLIBS) $(LIBSOCKET) +kcheckpass_LDFLAGS = $(KDE_USE_PIE) $(all_libraries) + +noinst_HEADERS = kcheckpass.h + +EXTRA_DIST = README + +PAM = $(KCHECKPASS_PAM_SERVICE) + +install-data-local: + -@test -n "$(DESTDIR)" || test -z "$(PAM)" || $(top_srcdir)/mkpamserv $(PAM) + +install-exec-hook: + @(chown 0 $(DESTDIR)$(bindir)/kcheckpass && chmod 4755 $(DESTDIR)$(bindir)/kcheckpass) \ + || echo "Error: Could not install kcheckpass as setuid root (possibly you won't be able to unlock)!!" diff --git a/kcheckpass/README b/kcheckpass/README new file mode 100644 index 000000000..cb517b3d2 --- /dev/null +++ b/kcheckpass/README @@ -0,0 +1,51 @@ +The KCheckPass authentication software: +----------------------------------------- + +KCheckPass is KDE's authentication program. It is meant to be +used by any software in need of user authentication, most +notably screensavers. + +It enhances security be the following means: + +- It's only a small program, which is hopefully simple enough to + allow it to be SUID root. Setting it to SUID root is necessary + on Shadow Password systems. +- No other program in need of user authentication, must be + SUID root. +- It provides a single implementation to check passwords. So one + only must take a closer look at KCheckPass to ensure password + security. It's much easier for programs using KCheckPass to + preserve security. + + +Technique: +---------- +KCheckPass is a simple password checker. Just invoke and +send it the password on stdin. + +If the password was accepted, the program exits with 0; +if it was rejected, it exits with 1. Any other exit +code signals an error. + + + +Compilation hints: +------------------ +Compile with -DHAVE_VSYSLOG if you have vsyslog(). +Compile with -DHAVE_PAM if you have a PAM system, and link with -lpam -ldl + (If libdl is present). +Compile with -DHAVE_SHADOW if you have a shadow password system. + +Copyright, Author and License notice: +------------------------------------- +Copyright (C) 1998, Caldera, Inc. +Released under the GNU General Public License + +Olaf Kirch General Framework and PAM support +Christian Esken Shadow and /etc/passwd support +Oswald Buddenhagen Binary conversation interface, etc. + +Some parts were taken from kscreensaver's passwd.cpp + +Currently this software is maintained by Oswald Buddenhagen . +Please send new authentication modules (checkpass_*.c) to me. diff --git a/kcheckpass/checkpass_aix.c b/kcheckpass/checkpass_aix.c new file mode 100644 index 000000000..8f06cfe67 --- /dev/null +++ b/kcheckpass/checkpass_aix.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2001 Reza Arbab + * Copyright (c) 2003 Oswald Buddenhagen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "kcheckpass.h" + +#ifdef HAVE_AIX_AUTH +#include +#include +#include +#include + +/* + * The AIX builtin authenticate() uses whichever method the system + * has been configured for. (/etc/passwd, DCE, etc.) + */ +int authenticate(const char *, const char *, int *, char **); + +AuthReturn Authenticate(const char *method, + const char *login, char *(*conv) (ConvRequest, const char *)) +{ + int result; + int reenter; /* Tells if authenticate is done processing or not. */ + char *passwd; + char *msg; /* Contains a prompt message or failure reason. */ + + if (!strcmp(method, "classic")) { + + if (!(passwd = conv(ConvGetHidden, 0))) + return AuthAbort; + + if ((result = authenticate(login, passwd, &reenter, &msg))) { + if (msg) { + conv(ConvPutError, msg); + free(msg); + } + dispose(passwd); + return AuthBad; + } + if (reenter) { + char buf[256]; + snprintf(buf, sizeof(buf), "More authentication data requested: %s\n", msg); + conv(ConvPutError, buf); + free(msg); + dispose(passwd); + return result == ENOENT || result == ESAD ? AuthBad : AuthError; + } + dispose(passwd); + return AuthOk; + + } else if (!strcmp(method, "generic")) { + + for (passwd = 0;;) { + if ((result = authenticate(login, passwd, &reenter, &msg))) { + if (msg) { + conv(ConvPutError, msg); + free(msg); + } + if (passwd) + dispose(passwd); + return result == ENOENT || result == ESAD ? AuthBad : AuthError; + } + if (passwd) + dispose(passwd); + if (!reenter) + break; + passwd = conv(ConvGetHidden, msg); + free(msg); + if (!passwd) + return AuthAbort; + } + return AuthOk; + + } else + return AuthError; + +} + +#endif diff --git a/kcheckpass/checkpass_etcpasswd.c b/kcheckpass/checkpass_etcpasswd.c new file mode 100644 index 000000000..1dbe06f70 --- /dev/null +++ b/kcheckpass/checkpass_etcpasswd.c @@ -0,0 +1,60 @@ +/* + * Copyright (c) 1998 Christian Esken + * Copyright (c) 2003 Oswald Buddenhagen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright (C) 1998, Christian Esken + */ + +#include "kcheckpass.h" + +#ifdef HAVE_ETCPASSWD + +/******************************************************************* + * This is the authentication code for /etc/passwd passwords + *******************************************************************/ + +#include +#include + +AuthReturn Authenticate(const char *method, + const char *login, char *(*conv) (ConvRequest, const char *)) +{ + struct passwd *pw; + char *passwd; + + if (strcmp(method, "classic")) + return AuthError; + + /* Get the password entry for the user we want */ + if (!(pw = getpwnam(login))) + return AuthBad; + + if (!*pw->pw_passwd) + return AuthOk; + + if (!(passwd = conv(ConvGetHidden, 0))) + return AuthAbort; + + if (!strcmp(pw->pw_passwd, crypt(passwd, pw->pw_passwd))) { + dispose(passwd); + return AuthOk; /* Success */ + } + dispose(passwd); + return AuthBad; /* Password wrong or account locked */ +} + +#endif diff --git a/kcheckpass/checkpass_osfc2passwd.c b/kcheckpass/checkpass_osfc2passwd.c new file mode 100644 index 000000000..d7663bdcc --- /dev/null +++ b/kcheckpass/checkpass_osfc2passwd.c @@ -0,0 +1,203 @@ +/* + * + * Copyright (C) 1999 Mark Davies + * Copyright (C) 2003 Oswald Buddenhagen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "kcheckpass.h" + +#ifdef HAVE_OSF_C2_PASSWD + +static char *osf1c2crypt(const char *pw, char *salt); +static int osf1c2_getprpwent(char *p, char *n, int len); + +/******************************************************************* + * This is the authentication code for OSF C2 security passwords + *******************************************************************/ + +#include +#include +#include + +AuthReturn Authenticate(const char *method, + const char *login, char *(*conv) (ConvRequest, const char *)) +{ + char *passwd; + char c2passwd[256]; + + if (strcmp(method, "classic")) + return AuthError; + + if (!osf1c2_getprpwent(c2passwd, login, sizeof(c2passwd))) + return AuthBad; + + if (!*c2passwd) + return AuthOk; + + if (!(passwd = conv(ConvGetHidden, 0))) + return AuthAbort; + + if (!strcmp(c2passwd, osf1c2crypt(passwd, c2passwd))) { + dispose(passwd); + return AuthOk; /* Success */ + } + dispose(passwd); + return AuthBad; /* Password wrong or account locked */ +} + + +/* +The following code was lifted from the file osfc2.c from the ssh 1.2.26 +distribution. Parts of the code that were not needed by kcheckpass +(notably the osf1c2_check_account_and_terminal() function and the code +to set the external variable days_before_password_expires have been +removed). The original copyright from the osfc2.c file is included +below. +*/ + +/* + +osfc2.c + +Author: Christophe Wolfhugel + +Copyright (c) 1995 Christophe Wolfhugel + +Free use of this file is permitted for any purpose as long as +this copyright is preserved in the header. + +This program implements the use of the OSF/1 C2 security extensions +within ssh. See the file COPYING for full licensing informations. + +*/ + +#include +#include +#include + +static int c2security = -1; +static int crypt_algo; + +static void +initialize_osf_security(int ac, char **av) +{ + FILE *f; + char buf[256]; + char siad[] = "siad_ses_init="; + + if (access(SIAIGOODFILE, F_OK) == -1) + { + /* Broken OSF/1 system, better don't run on it. */ + fprintf(stderr, SIAIGOODFILE); + fprintf(stderr, " does not exist. Your OSF/1 system is probably broken\n"); + exit(1); + } + if ((f = fopen(MATRIX_CONF, "r")) == NULL) + { + /* Another way OSF/1 is probably broken. */ + fprintf(stderr, "%s unreadable. Your OSF/1 system is probably broken.\n" + + MATRIX_CONF); + exit(1); + } + + /* Read matrix.conf to check if we run C2 or not */ + while (fgets(buf, sizeof(buf), f) != NULL) + { + if (strncmp(buf, siad, sizeof(siad) - 1) == 0) + { + if (strstr(buf, "OSFC2") != NULL) + c2security = 1; + else if (strstr(buf, "BSD") != NULL) + c2security = 0; + break; + } + } + fclose(f); + if (c2security == -1) + { + fprintf(stderr, "C2 security initialization failed : could not determine security level.\n"); + exit(1); + } + if (c2security == 1) + set_auth_parameters(ac, av); +} + + +static int +osf1c2_getprpwent(char *p, char *n, int len) +{ + time_t pschg, tnow; + + if (c2security == 1) + { + struct es_passwd *es; + struct pr_passwd *pr = getprpwnam(n); + if (pr) + { + strlcpy(p, pr->ufld.fd_encrypt, len); + crypt_algo = pr->ufld.fd_oldcrypt; + + tnow = time(NULL); + if (pr->uflg.fg_schange == 1) + pschg = pr->ufld.fd_schange; + else + pschg = 0; + if (pr->uflg.fg_template == 0) + { + /** default template, system values **/ + if (pr->sflg.fg_lifetime == 1) + if (pr->sfld.fd_lifetime > 0 && + pschg + pr->sfld.fd_lifetime < tnow) + return 1; + } + else /** user template, specific values **/ + { + es = getespwnam(pr->ufld.fd_template); + if (es) + { + if (es->uflg->fg_expire == 1) + if (es->ufld->fd_expire > 0 && + pschg + es->ufld->fd_expire < tnow) + return 1; + } + } + } + } + else + { + struct passwd *pw = getpwnam(n); + if (pw) + { + strlcpy(p, pw->pw_passwd, len); + return 1; + } + } + return 0; +} + +static char * +osf1c2crypt(const char *pw, char *salt) +{ + if (c2security == 1) { + return(dispcrypt(pw, salt, crypt_algo)); + } else + return(crypt(pw, salt)); +} + +#endif diff --git a/kcheckpass/checkpass_pam.c b/kcheckpass/checkpass_pam.c new file mode 100644 index 000000000..6f281165f --- /dev/null +++ b/kcheckpass/checkpass_pam.c @@ -0,0 +1,200 @@ +/* + * Copyright (C) 1998 Caldera, Inc. + * Copyright (C) 2003 Oswald Buddenhagen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kcheckpass.h" + +#ifdef HAVE_PAM + +#include +#include +#include +#include + +#ifdef HAVE_PAM_PAM_APPL_H +#include +#else +#include +#endif + +struct pam_data { + char *(*conv) (ConvRequest, const char *); + int abort:1; + int classic:1; +}; + +#ifdef PAM_MESSAGE_NONCONST +typedef struct pam_message pam_message_type; +typedef void *pam_gi_type; +#else +typedef const struct pam_message pam_message_type; +typedef const void *pam_gi_type; +#endif + +static int +PAM_conv (int num_msg, pam_message_type **msg, + struct pam_response **resp, + void *appdata_ptr) +{ + int count; + struct pam_response *repl; + struct pam_data *pd = (struct pam_data *)appdata_ptr; + + if (!(repl = calloc(num_msg, sizeof(struct pam_response)))) + return PAM_CONV_ERR; + + for (count = 0; count < num_msg; count++) + switch (msg[count]->msg_style) { + case PAM_TEXT_INFO: + pd->conv(ConvPutInfo, msg[count]->msg); + break; + case PAM_ERROR_MSG: + pd->conv(ConvPutError, msg[count]->msg); + break; + default: + switch (msg[count]->msg_style) { + case PAM_PROMPT_ECHO_ON: + 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); + break; +#ifdef PAM_BINARY_PROMPT + case PAM_BINARY_PROMPT: + repl[count].resp = pd->conv(ConvGetBinary, msg[count]->msg); + break; +#endif + default: + /* Must be an error of some sort... */ + goto conv_err; + } + if (!repl[count].resp) { + pd->abort = 1; + goto conv_err; + } + repl[count].resp_retcode = PAM_SUCCESS; + break; + } + *resp = repl; + return PAM_SUCCESS; + + conv_err: + for (; count >= 0; count--) + if (repl[count].resp) + switch (msg[count]->msg_style) { + case PAM_PROMPT_ECHO_OFF: + dispose(repl[count].resp); + break; +#ifdef PAM_BINARY_PROMPT + case PAM_BINARY_PROMPT: /* handle differently? */ +#endif + case PAM_PROMPT_ECHO_ON: + free(repl[count].resp); + break; + } + free(repl); + return PAM_CONV_ERR; +} + +static struct pam_data PAM_data; + +static struct pam_conv PAM_conversation = { + &PAM_conv, + &PAM_data +}; + +#ifdef PAM_FAIL_DELAY +static void +fail_delay(int retval ATTR_UNUSED, unsigned usec_delay ATTR_UNUSED, + void *appdata_ptr ATTR_UNUSED) +{} +#endif + + +AuthReturn Authenticate(const char *caller, const char *method, + const char *user, char *(*conv) (ConvRequest, const char *)) +{ + const char *tty; + pam_handle_t *pamh; + pam_gi_type pam_item; + const char *pam_service; + char pservb[64]; + int pam_error; + + openlog("kcheckpass", LOG_PID, LOG_AUTH); + + PAM_data.conv = conv; + if (strcmp(method, "classic")) { + sprintf(pservb, "%.31s-%.31s", caller, method); + pam_service = pservb; + } else { + PAM_data.classic = 1; + pam_service = caller; + } + pam_error = pam_start(pam_service, user, &PAM_conversation, &pamh); + if (pam_error != PAM_SUCCESS) + return AuthError; + + tty = ttyname(0); + if (!tty) + tty = getenv ("DISPLAY"); + + pam_error = pam_set_item (pamh, PAM_TTY, tty); + if (pam_error != PAM_SUCCESS) { + pam_end(pamh, pam_error); + return AuthError; + } + +# ifdef PAM_FAIL_DELAY + pam_set_item (pamh, PAM_FAIL_DELAY, (void *)fail_delay); +# endif + + pam_error = pam_authenticate(pamh, 0); + if (pam_error != PAM_SUCCESS) { + pam_end(pamh, pam_error); + switch (pam_error) { + case PAM_USER_UNKNOWN: + case PAM_AUTH_ERR: + case PAM_MAXTRIES: /* should handle this better ... */ + case PAM_AUTHINFO_UNAVAIL: /* returned for unknown users ... bogus */ + return AuthBad; + default: + return AuthError; + } + } + + /* just in case some module is stupid enough to ignore a preset PAM_USER */ + pam_error = pam_get_item (pamh, PAM_USER, &pam_item); + if (pam_error != PAM_SUCCESS) { + pam_end(pamh, pam_error); + return AuthError; + } + if (strcmp((const char *)pam_item, user)) { + pam_end(pamh, PAM_SUCCESS); /* maybe use PAM_AUTH_ERR? */ + return AuthBad; + } + + pam_error = pam_setcred(pamh, PAM_REFRESH_CRED); + /* ignore errors on refresh credentials. If this did not work we use the old once. */ + + pam_end(pamh, PAM_SUCCESS); + return AuthOk; +} + +#endif diff --git a/kcheckpass/checkpass_shadow.c b/kcheckpass/checkpass_shadow.c new file mode 100644 index 000000000..ec3a4e02a --- /dev/null +++ b/kcheckpass/checkpass_shadow.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 1998 Christian Esken + * Copyright (C) 2003 Oswald Buddenhagen + * + * This is a modified version of checkpass_shadow.cpp + * + * Modifications made by Thorsten Kukuk + * Mathias Kettner + * + * ------------------------------------------------------------ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kcheckpass.h" + +/******************************************************************* + * This is the authentication code for Shadow-Passwords + *******************************************************************/ + +#ifdef HAVE_SHADOW +#include +#include +#include + +#ifndef __hpux +#include +#endif + +AuthReturn Authenticate(const char *method, + const char *login, char *(*conv) (ConvRequest, const char *)) +{ + char *typed_in_password; + char *crpt_passwd; + char *password; + struct passwd *pw; + struct spwd *spw; + + if (strcmp(method, "classic")) + return AuthError; + + if (!(pw = getpwnam(login))) + return AuthAbort; + + spw = getspnam(login); + password = spw ? spw->sp_pwdp : pw->pw_passwd; + + if (!*password) + return AuthOk; + + if (!(typed_in_password = conv(ConvGetHidden, 0))) + return AuthAbort; + +#if defined( __linux__ ) && defined( HAVE_PW_ENCRYPT ) + crpt_passwd = pw_encrypt(typed_in_password, password); /* (1) */ +#else + crpt_passwd = crypt(typed_in_password, password); +#endif + + if (!strcmp(password, crpt_passwd )) { + dispose(typed_in_password); + return AuthOk; /* Success */ + } + dispose(typed_in_password); + return AuthBad; /* Password wrong or account locked */ +} + +/* + (1) Deprecated - long passwords have known weaknesses. Also, + pw_encrypt is non-standard (requires libshadow.a) while + everything else you need to support shadow passwords is in + the standard (ELF) libc. + */ +#endif diff --git a/kcheckpass/kcheckpass.c b/kcheckpass/kcheckpass.c new file mode 100644 index 000000000..6a0550969 --- /dev/null +++ b/kcheckpass/kcheckpass.c @@ -0,0 +1,448 @@ +/***************************************************************** + * + * kcheckpass - Simple password checker + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * + * kcheckpass is a simple password checker. Just invoke and + * send it the password on stdin. + * + * If the password was accepted, the program exits with 0; + * if it was rejected, it exits with 1. Any other exit + * code signals an error. + * + * It's hopefully simple enough to allow it to be setuid + * root. + * + * Compile with -DHAVE_VSYSLOG if you have vsyslog(). + * Compile with -DHAVE_PAM if you have a PAM system, + * and link with -lpam -ldl. + * Compile with -DHAVE_SHADOW if you have a shadow + * password system. + * + * Copyright (C) 1998, Caldera, Inc. + * Released under the GNU General Public License + * + * Olaf Kirch General Framework and PAM support + * Christian Esken Shadow and /etc/passwd support + * Roberto Teixeira other user (-U) support + * Oswald Buddenhagen Binary server mode + * + * Other parts were taken from kscreensaver's passwd.cpp. + * + *****************************************************************/ + +#include "kcheckpass.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Compatibility: accept some options from environment variables */ +#define ACCEPT_ENV + +#define THROTTLE 3 + +static int havetty, sfd = -1, nullpass; + +static char * +conv_legacy (ConvRequest what, const char *prompt) +{ + char *p, *p2; + int len; + char buf[1024]; + + switch (what) { + case ConvGetBinary: + break; + case ConvGetNormal: + /* there is no prompt == 0 case */ + if (!havetty) + break; + /* i guess we should use /dev/tty ... */ + fputs(prompt, stdout); + fflush(stdout); + if (!fgets(buf, sizeof(buf), stdin)) + return 0; + len = strlen(buf); + if (len && buf[len - 1] == '\n') + buf[--len] = 0; + return strdup(buf); + case ConvGetHidden: + if (havetty) { +#ifdef HAVE_GETPASSPHRASE + p = getpassphrase(prompt ? prompt : "Password: "); +#else + p = getpass(prompt ? prompt : "Password: "); +#endif + p2 = strdup(p); + memset(p, 0, strlen(p)); + return p2; + } else { + if (prompt) + break; + if ((len = read(0, buf, sizeof(buf) - 1)) < 0) { + message("Cannot read password\n"); + return 0; + } else { + if (len && buf[len - 1] == '\n') + --len; + buf[len] = 0; + p2 = strdup(buf); + memset(buf, 0, len); + return p2; + } + } + case ConvPutInfo: + message("Information: %s\n", prompt); + return 0; + case ConvPutError: + message("Error: %s\n", prompt); + return 0; + } + message("Authentication backend requested data type which cannot be handled.\n"); + return 0; +} + + +static int +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; +} + +static void +GRead (void *buf, int count) +{ + if (Reader (buf, count) != count) { + message ("Communication breakdown on read\n"); + exit(15); + } +} + +static void +GWrite (const void *buf, int count) +{ + if (write (sfd, buf, count) != count) { + message ("Communication breakdown on write\n"); + exit(15); + } +} + +static void +GSendInt (int val) +{ + GWrite (&val, sizeof(val)); +} + +static void +GSendStr (const char *buf) +{ + unsigned len = buf ? strlen (buf) + 1 : 0; + GWrite (&len, sizeof(len)); + GWrite (buf, len); +} + +static void +GSendArr (int len, const char *buf) +{ + GWrite (&len, sizeof(len)); + GWrite (buf, len); +} + +static int +GRecvInt (void) +{ + int val; + + GRead (&val, sizeof(val)); + return val; +} + +static char * +GRecvStr (void) +{ + unsigned len; + char *buf; + + if (!(len = GRecvInt())) + return (char *)0; + if (len > 0x1000 || !(buf = malloc (len))) { + message ("No memory for read buffer\n"); + exit(15); + } + GRead (buf, len); + buf[len - 1] = 0; /* we're setuid ... don't trust "them" */ + return buf; +} + +static char * +GRecvArr (void) +{ + unsigned len; + char *arr; + + if (!(len = (unsigned) GRecvInt())) + return (char *)0; + if (len > 0x10000 || !(arr = malloc (len))) { + message ("No memory for read buffer\n"); + exit(15); + } + GRead (arr, len); + return arr; +} + + +static char * +conv_server (ConvRequest what, const char *prompt) +{ + GSendInt (what); + switch (what) { + case ConvGetBinary: + { + unsigned const char *up = (unsigned const char *)prompt; + int len = up[3] | (up[2] << 8) | (up[1] << 16) | (up[0] << 24); + GSendArr (len, prompt); + return GRecvArr (); + } + case ConvGetNormal: + case ConvGetHidden: + { + char *msg; + GSendStr (prompt); + msg = GRecvStr (); + if (msg && (GRecvInt() & IsPassword) && !*msg) + nullpass = 1; + return msg; + } + case ConvPutInfo: + case ConvPutError: + default: + GSendStr (prompt); + return 0; + } +} + +void +message(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); +} + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +static void ATTR_NORETURN +usage(int exitval) +{ + message( + "usage: kcheckpass {-h|[-c caller] [-m method] [-U username|-S handle]}\n" + " options:\n" + " -h this help message\n" + " -U username authenticate the specified user instead of current user\n" + " -S handle operate in binary server mode on file descriptor handle\n" + " -c caller the calling application, effectively the PAM service basename\n" + " -m method use the specified authentication method (default: \"classic\")\n" + " exit codes:\n" + " 0 success\n" + " 1 invalid password\n" + " 2 cannot read password database\n" + " Anything else tells you something's badly hosed.\n" + ); + exit(exitval); +} + +int +main(int argc, char **argv) +{ +#ifdef HAVE_PAM + const char *caller = KCHECKPASS_PAM_SERVICE; +#endif + const char *method = "classic"; + const char *username = 0; +#ifdef ACCEPT_ENV + char *p; +#endif + struct passwd *pw; + int c, nfd, lfd; + uid_t uid; + time_t nexttime; + AuthReturn ret; + struct flock lk; + char fname[64], fcont[64]; + +#ifdef HAVE_OSF_C2_PASSWD + initialize_osf_security(argc, argv); +#endif + + /* Make sure stdout/stderr are open */ + for (c = 1; c <= 2; c++) { + if (fcntl(c, F_GETFL) == -1) { + if ((nfd = open("/dev/null", O_WRONLY)) < 0) { + message("cannot open /dev/null: %s\n", strerror(errno)); + exit(10); + } + if (c != nfd) { + dup2(nfd, c); + close(nfd); + } + } + } + + havetty = isatty(0); + + while ((c = getopt(argc, argv, "hc:m:U:S:")) != -1) { + switch (c) { + case 'h': + usage(0); + break; + case 'c': +#ifdef HAVE_PAM + caller = optarg; +#endif + break; + case 'm': + method = optarg; + break; + case 'U': + username = optarg; + break; + case 'S': + sfd = atoi(optarg); + break; + default: + message("Command line option parsing error\n"); + usage(10); + } + } + +#ifdef ACCEPT_ENV +# ifdef HAVE_PAM + if ((p = getenv("KDE_PAM_ACTION"))) + caller = p; +# endif + if ((p = getenv("KCHECKPASS_USER"))) + username = p; +#endif + + uid = getuid(); + if (!username) { + if (!(p = getenv("LOGNAME")) || !(pw = getpwnam(p)) || pw->pw_uid != uid) + if (!(p = getenv("USER")) || !(pw = getpwnam(p)) || pw->pw_uid != uid) + if (!(pw = getpwuid(uid))) { + message("Cannot determinate current user\n"); + return AuthError; + } + if (!(username = strdup(pw->pw_name))) { + message("Out of memory\n"); + return AuthError; + } + } + + /* + * Throttle kcheckpass invocations to avoid abusing it for bruteforcing + * the password. This delay belongs to the *previous* invocation, where + * we can't enforce it reliably (without risking giving away the result + * before it is due). We don't differentiate between success and failure - + * it's not expected to have a noticable adverse effect. + */ + if ( uid != geteuid() ) { + sprintf(fname, "/var/run/kcheckpass.%d", uid); + if ((lfd = open(fname, O_RDWR | O_CREAT | O_NOFOLLOW, 0600)) < 0) { + message("Cannot open lockfile\n"); + return AuthError; + } + + lk.l_type = F_WRLCK; + lk.l_whence = SEEK_SET; + lk.l_start = lk.l_len = 0; + if (fcntl(lfd, F_SETLKW, &lk)) { + message("Cannot obtain lock\n"); + return AuthError; + } + + if ((c = read(lfd, fcont, sizeof(fcont)-1)) > 0 && + (fcont[c] = '\0', sscanf(fcont, "%ld", &nexttime) == 1)) + { + time_t ct = time(0); + if (nexttime > ct && nexttime < ct + THROTTLE) + sleep(nexttime - ct); + } + + lseek(lfd, 0, SEEK_SET); + write(lfd, fcont, sprintf(fcont, "%lu\n", time(0) + THROTTLE)); + + close(lfd); + } + + /* Now do the fandango */ + ret = Authenticate( +#ifdef HAVE_PAM + caller, +#endif + method, + username, + sfd < 0 ? conv_legacy : conv_server); + + if (ret == AuthBad) { + message("Authentication failure\n"); + if (!nullpass) { + openlog("kcheckpass", LOG_PID, LOG_AUTH); + syslog(LOG_NOTICE, "Authentication failure for %s (invoked by uid %d)", username, uid); + } + } + + return ret; +} + +void +dispose(char *str) +{ + memset(str, 0, strlen(str)); + free(str); +} + +/***************************************************************** + The real authentication methods are in separate source files. + Look in checkpass_*.c +*****************************************************************/ diff --git a/kcheckpass/kcheckpass.h b/kcheckpass/kcheckpass.h new file mode 100644 index 000000000..5aaebf2da --- /dev/null +++ b/kcheckpass/kcheckpass.h @@ -0,0 +1,142 @@ +/***************************************************************** + * + * kcheckpass + * + * Simple password checker. Just invoke and send it + * the password on stdin. + * + * If the password was accepted, the program exits with 0; + * if it was rejected, it exits with 1. Any other exit + * code signals an error. + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright (C) 1998, Caldera, Inc. + * Released under the GNU General Public License + * + * Olaf Kirch General Framework and PAM support + * Christian Esken Shadow and /etc/passwd support + * Oswald Buddenhagen Binary server mode + * + * Other parts were taken from kscreensaver's passwd.cpp + *****************************************************************/ + +#ifndef KCHECKPASS_H_ +#define KCHECKPASS_H_ + +#include + +#ifdef HAVE_CRYPT_H +#include +#endif + +#ifdef HAVE_PATHS_H +#include +#endif + +#include +#include + +#ifndef _PATH_TMP +#define _PATH_TMP "/tmp/" +#endif + + +#ifdef ultrix +#include +#endif + +#include + +#ifdef OSF1_ENH_SEC +#include +#include +#endif + +/* Make sure there is only one! */ +#if defined(HAVE_PAM) +# undef HAVE_OSF_C2_PASSWD +# undef HAVE_SHADOW +#elif defined(HAVE_OSF_C2_PASSWD) +# undef HAVE_SHADOW +#elif defined(_AIX) +# define HAVE_AIX_AUTH +# undef HAVE_SHADOW +#elif !defined(HAVE_SHADOW) +# define HAVE_ETCPASSWD +#endif + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +# define ATTR_UNUSED __attribute__((unused)) +# define ATTR_NORETURN __attribute__((noreturn)) +# define ATTR_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +#else +# define ATTR_UNUSED +# define ATTR_NORETURN +# define ATTR_PRINTFLIKE(fmt,var) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* these must match kcheckpass' exit codes */ +typedef enum { + AuthOk = 0, + AuthBad = 1, + AuthError = 2, + AuthAbort = 3 +} AuthReturn; + +typedef enum { + ConvGetBinary, + ConvGetNormal, + ConvGetHidden, + ConvPutInfo, + ConvPutError +} ConvRequest; + +/* these must match the defs in kgreeterplugin.h */ +typedef enum { + IsUser = 1, /* unused in kcheckpass */ + IsPassword = 2 +} DataTag; + +/***************************************************************** + * Authenticates user + *****************************************************************/ +AuthReturn Authenticate( +#ifdef HAVE_PAM + const char *caller, +#endif + const char *method, + const char *user, + char *(*conv) (ConvRequest, const char *)); + +/***************************************************************** + * Output a message to stderr + *****************************************************************/ +void message(const char *, ...) ATTR_PRINTFLIKE(1, 2); + +/***************************************************************** + * Overwrite and free the passed string + *****************************************************************/ +void dispose(char *); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/kcminit/Makefile.am b/kcminit/Makefile.am new file mode 100644 index 000000000..fc77b98cc --- /dev/null +++ b/kcminit/Makefile.am @@ -0,0 +1,33 @@ +# +# Copyright (c) 1999 Matthias Hoelzer-Kluepfel +# Copyright (c) 2000 Matthias Elter +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +kdeinit_LTLIBRARIES = kcminit.la kcminit_startup.la +bin_PROGRAMS= +lib_LTLIBRARIES= + +kcminit_la_SOURCES = main.cpp main.skel +kcminit_la_LIBADD = $(LIB_KDEUI) $(LIB_KUTILS) +kcminit_la_LDFLAGS = $(all_libraries) -module -avoid-version + +kcminit_startup_la_SOURCES = main.cpp main.skel +kcminit_startup_la_LIBADD = $(LIB_KDEUI) $(LIB_KUTILS) +kcminit_startup_la_LDFLAGS = $(all_libraries) -module -avoid-version + +AM_CPPFLAGS = $(all_includes) +METASOURCES = AUTO diff --git a/kcminit/main.cpp b/kcminit/main.cpp new file mode 100644 index 000000000..5531b326e --- /dev/null +++ b/kcminit/main.cpp @@ -0,0 +1,251 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include + +#include "main.h" + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +static KCmdLineOptions options[] = +{ + { "list", I18N_NOOP("List modules that are run at startup"), 0 }, + { "+module", I18N_NOOP("Configuration module to run"), 0 }, + KCmdLineLastOption +}; + +static int ready[ 2 ]; +static bool startup = false; + +static void sendReady() +{ + if( ready[ 1 ] == -1 ) + return; + char c = 0; + write( ready[ 1 ], &c, 1 ); + close( ready[ 1 ] ); + ready[ 1 ] = -1; +} + +static void waitForReady() +{ + char c = 1; + close( ready[ 1 ] ); + read( ready[ 0 ], &c, 1 ); + close( ready[ 0 ] ); +} + +bool KCMInit::runModule(const QString &libName, KService::Ptr service) +{ + KLibLoader *loader = KLibLoader::self(); + KLibrary *lib = loader->library(QFile::encodeName(libName)); + if (lib) { + // get the init_ function + QString factory = QString("init_%1").arg(service->init()); + void *init = lib->symbol(factory.utf8()); + if (init) { + // initialize the module + kdDebug(1208) << "Initializing " << libName << ": " << factory << endl; + + void (*func)() = (void(*)())init; + func(); + return true; + } + loader->unloadLibrary(QFile::encodeName(libName)); + } + return false; +} + +void KCMInit::runModules( int phase ) +{ + // look for X-KDE-Init=... entries + for(KService::List::Iterator it = list.begin(); + it != list.end(); + ++it) { + KService::Ptr service = (*it); + + QString library = service->property("X-KDE-Init-Library", QVariant::String).toString(); + if (library.isEmpty()) + library = service->library(); + + if (library.isEmpty() || service->init().isEmpty()) + continue; // Skip + + // see ksmserver's README for the description of the phases + QVariant vphase = service->property("X-KDE-Init-Phase", QVariant::Int ); + int libphase = 1; + if( vphase.isValid() ) + libphase = vphase.toInt(); + + if( phase != -1 && libphase != phase ) + continue; + + QString libName = QString("kcm_%1").arg(library); + + // try to load the library + if (! alreadyInitialized.contains( libName.ascii() )) { + if (!runModule(libName, service)) { + libName = QString("libkcm_%1").arg(library); + if (! alreadyInitialized.contains( libName.ascii() )) { + runModule(libName, service); + alreadyInitialized.append( libName.ascii() ); + } + } else + alreadyInitialized.append( libName.ascii() ); + } + } +} + +KCMInit::KCMInit( KCmdLineArgs* args ) +: DCOPObject( "kcminit" ) +{ + QCString arg; + if (args->count() == 1) { + arg = args->arg(0); + } + + if (args->isSet("list")) + { + list = KService::allInitServices(); + + for(KService::List::Iterator it = list.begin(); + it != list.end(); + ++it) + { + KService::Ptr service = (*it); + if (service->library().isEmpty() || service->init().isEmpty()) + continue; // Skip + printf("%s\n", QFile::encodeName(service->desktopEntryName()).data()); + } + return; + } + + if (!arg.isEmpty()) { + + QString module = QFile::decodeName(arg); + if (!module.endsWith(".desktop")) + module += ".desktop"; + + KService::Ptr serv = KService::serviceByStorageId( module ); + if ( !serv || serv->library().isEmpty() || + serv->init().isEmpty()) { + kdError(1208) << i18n("Module %1 not found!").arg(module) << endl; + return; + } else + list.append(serv); + + } else { + + // locate the desktop files + list = KService::allInitServices(); + + } + + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + + // This key has no GUI apparently + KConfig config("kcmdisplayrc", true ); + config.setGroup("X11"); + bool multihead = !config.readBoolEntry( "disableMultihead", false) && + (ScreenCount(qt_xdisplay()) > 1); + // Pass env. var to kdeinit. + QCString name = "KDE_MULTIHEAD"; + QCString value = multihead ? "true" : "false"; + QByteArray params; + QDataStream stream(params, IO_WriteOnly); + stream << name << value; + kapp->dcopClient()->send("klauncher", "klauncher", "setLaunchEnv(QCString,QCString)", params); + setenv( name, value, 1 ); // apply effect also to itself + + if( startup ) + { + runModules( 0 ); + kapp->dcopClient()->send( "ksplash", "", "upAndRunning(QString)", QString("kcminit")); + sendReady(); + QTimer::singleShot( 300 * 1000, qApp, SLOT( quit())); // just in case + qApp->exec(); // wait for runPhase1() and runPhase2() + } + else + runModules( -1 ); // all phases +} + +KCMInit::~KCMInit() +{ + sendReady(); +} + +void KCMInit::runPhase1() +{ + runModules( 1 ); + emitDCOPSignal( "phase1Done()", QByteArray()); +} + +void KCMInit::runPhase2() +{ + runModules( 2 ); + emitDCOPSignal( "phase2Done()", QByteArray()); + qApp->exit( 0 ); +} + +extern "C" KDE_EXPORT int kdemain(int argc, char *argv[]) +{ + // kdeinit waits for kcminit to finish, but during KDE startup + // only important kcm's are started very early in the login process, + // the rest is delayed, so fork and make parent return after the initial phase + pipe( ready ); + if( fork() != 0 ) + { + waitForReady(); + return 0; + } + close( ready[ 0 ] ); + + startup = ( strcmp( argv[ 0 ], "kcminit_startup" ) == 0 ); // started from startkde? + + KLocale::setMainCatalogue("kcontrol"); + KAboutData aboutData( "kcminit", I18N_NOOP("KCMInit"), + "", + I18N_NOOP("KCMInit - runs startups initialization for Control Modules.")); + + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + + KApplication app; + app.dcopClient()->registerAs( "kcminit", false ); + KLocale::setMainCatalogue(0); + KCMInit kcminit( KCmdLineArgs::parsedArgs()); + return 0; +} + +#include "main.moc" diff --git a/kcminit/main.h b/kcminit/main.h new file mode 100644 index 000000000..f78aba9c4 --- /dev/null +++ b/kcminit/main.h @@ -0,0 +1,45 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef KCMINIT_H +#define KCMINIT_H + +#include +#include + +class KCmdLineArgs; + +class KCMInit : public QObject, public DCOPObject +{ + Q_OBJECT + K_DCOP + k_dcop: + void runPhase1(); + void runPhase2(); + public: + KCMInit( KCmdLineArgs* args ); + virtual ~KCMInit(); + private: + bool runModule(const QString &libName, KService::Ptr service); + void runModules( int phase ); + KService::List list; + QStrList alreadyInitialized; +}; + +#endif diff --git a/kcontrol/Makefile.am b/kcontrol/Makefile.am new file mode 100644 index 000000000..50e8242de --- /dev/null +++ b/kcontrol/Makefile.am @@ -0,0 +1,39 @@ + +if include_kcontrol_access +ACCESS_SUBDIR=access +endif + +if include_kcontrol_kfontinst +FONTINST_SUBDIR=kfontinst +endif + +if include_kcontrol_smartcard +KSMCARD_SUBDIR=smartcard +endif + +if include_kcontrol_usbview +USBVIEW_SUBDIR=usbview +endif + +if include_kcontrol_view1394 +VIEW1394_SUBDIR=view1394 +endif + +if include_kcontrol_randr +RANDR_SUBDIR=randr +endif + +if include_kcontrol_joystick +JOYSTICK_SUBDIR=joystick +endif + +# 'colors' and 'fonts' should come after 'krdb' +SUBDIRS = bell background dnssd filetypes samba krdb input info ioslaveinfo kdm\ + kicker locale launch keys kio konq style kded \ + konqhtml ebrowsing arts kcontrol knotify\ + clock pics $(ACCESS_SUBDIR) colors energy fonts css \ + icons screensaver taskbar crypto privacy smserver \ + konsole spellchecking $(USBVIEW_SUBDIR) \ + $(KSMCARD_SUBDIR) nics $(FONTINST_SUBDIR) $(RANDR_SUBDIR) \ + componentchooser performance xinerama $(VIEW1394_SUBDIR) display kthememanager \ + $(JOYSTICK_SUBDIR) diff --git a/kcontrol/TODO b/kcontrol/TODO new file mode 100644 index 000000000..b3b8d2971 --- /dev/null +++ b/kcontrol/TODO @@ -0,0 +1,168 @@ + +Welcome to the this-is-another-kcontrol-reorganization-attempt-but-this-time-it-will-be-good file! + +This file contain a list of various major changes for KControl(reorganization, broad technical changes etc.) planned for KDE4. I think it is a good idea if small changes in each KCM is not listed(if they not have a meaning in the bigger picture) otherwise this list will grow too big. +Feel free to discuss the ideas on kde-usability. +Of course, nothing in this file is set in stone, or is "correct" or "true" for that matter. + + ---These are only ideas.--- + + ---These are only ideas!--- + +---------- Renaming + +* Rename "Appearance & Themes" to "Appearance" + +* Rename "System Administration" to "System". + +* Rename "Display" to "Monitor", see the KCM guidelines + +* Rename "Peripherals" to "Hardware". + - remove settings-peripherals.directory + - Update kde-settings.menu and remove the Peripherals menu + - Convert any kcmmodules that haven't already to X-KDE-settings-hardware + +* Rename password & User Account - "User Account" + +* Rename "Component Chooser" to "Default Applications" Users want to set the default application handlers, not Choose a component (which they wouldn't have a clue what it was anyway)? + +---------- Reorganization/Moving + +* Move Background, Splash Screen, And Screen Saver to Desktop + +* Move Theme manger out of KControl as a standalone app (can still be a kcm modules code wise of course). + +* Move "Power Control/Laptop Battery" to "Hardware" (the only KCM left in that category). Note this is in kdeutils. It will also remove the top level Power Control so remove that in the settings.menu file + +* Move the laptop KCMs to "Hardware", from "System Administration". Note these are in kdeutils. + +* Move "User Account to System + +* Move Launch Feedback into Desktop/Behavior kcm as another tab. + +---------- Removing + +* "KDE Components/File Manager" - It's Konqueror specific. + +* "Internet & Network/Web Browser/" - It's Konqueror specific. Those apps(such as Quanta) which needs the configuration functionality can load the specific KCMs into their own configuration dialogs. + +* Security & Privacy/Crypto - It's Konqueror specific. + +* "KDE Performance" - It's Konqueror Performance. + +* Spelling - It is application specific and if they need it they will include the kcm in their configure dialog most (all?) already do. + +* Security & Privacy/Privacy - It should be a seperate utility in kdeutils. It does stuff, not configuring stuff + +---------- Combining Modules + +* Combine Desktop/Behavior and Desktop/Multiple + +* Move ability to configure Bell to Accessibility then remove "Sound & Multimedia/Bell" since it is a duplicate of the accessibility KCM. How on earth does such a thing slip through? :) + +* Move Window-Specific Settings into Window Behavior as another tab or Advanced? + +* Make a new "User Account" group with + - Session Manager + - System Administration/Paths + - Component Chooser (after renamed to "Default Applications") + +* The following container: +KCMODULECONTAINER("kcmfontinst, fonts", fonts ) +The desktop file is called "kcm_fonts" with "Name=Fonts" and "Categories=X-KDE-settings-appearance" + + +---------- Various other stuff + +* In a lot of cases there's an unnecessary use of "Manager" and "Configuration". We should not state the obvious and remove those parts. + +* Rename "KDE Wallet" to "Wallet"(people can't differentiate nor care about what is KDE and what's not. It is also irrelevant for the context). + +* Remove old categories, for example X-KDE-settings-peripherals. + +* Convert all options in "Internet & Network/Preferences" to KConfigXT and then remove the KCM. + +* Remove "KDE Components" and put the KCMs elsewhere, most of them in "System". Wake up: a non KDE hacker can't differentiate between KDE and other parts of the system. + +* We must stop differentiating between KDE and System/whatever. People *can't* tell the difference and it only clutters up the interface. KDE is THE computer/system. + +// Not sure where these next three are is this OLD and from KDE2 and has already been done? + +* Remove "Internet & Network/Email". It is replaced by the new kcm_useraccount + +* Remove "System Administration/User Info". It is replaced by the new kcm_useraccount + +* Remove "Privacy & Crypto/Passwords". It is replaced by the new kcm_useraccount. Probably. (awaiting comment from Aaron) + +* Tell Konqi to go burn the 11 tabs of keyboard options(5 KCMs). Because it is.. bizarre. Two KCMs with two tabs each is absolute maximum. One KCM with three tabs is quite ok too. + +* Put some common sense into phrases used here and there, Comments fields for example. Don't use "etc", paranteses, exlamation marks, smilies(haven't found any though). Don't phrase things like "Y configurates code part X"...... + +* Split "Sound & Multimedia/Sound System" into two KCMs(it currently consists of two tabs) and combine those two with "System Notifications" with the KCMODULECONTAINER macro into one KCM called "Sound System". Lots of the options in Sound System can be turned into KConfEdit options, mesa thinks. + + +---------Various technical, broad design shifts: -------------------- + +* Move the various KCMs in kdebase/kcontrol/* out to their respective app, as per the KCM Guidelines. + +* Convert KCMs to use ui Designer files + +* Namespace the KCMs desktop files to "kcm_*.desktop", as per KCM Guidelines. + +* A lot, perhaps even the majority, violate the HIG by not displaying +properly in 800x600 (is it 800x600 or 1024x768?). For a start, someone needs to iterate through all KCMs and file bug reports for each missbehaving. See the KDE UI Guidelines. + +* KCMs needs to be converted to KConfigXT and use the global kdeglobals KConfigXT object. + +* Tons of KCMs and applications have options for selecting binaries which they use(frontends etc.). We need to be a little consistent here and adopt a general policy in this issue. +If a binary is not in $PATH it is the distributors fault and not KDE. The reason we have a GUI is so people don't have to know about this kinds of internals. The options doesn't mean anything because users use KDE, they're not in run level 3("WTF? cdparanoia? diff? What's that?"). PATH options("Where to search for X") should be removed - it is up to the distributor. Options for selecting what binary to use should be moved out to KConfEdit - they have a use but are very rarely used. + +* Rewrite kcmshell to the new KCModuleProxy and fix bugs. Move it to kdelibs. + +-------------------------------------------------------------------------- + +Below is some old stuff, which was in this file. + + +File Browsing -> Filemanager +---------------------------- +Appearance (Rik was right here and I was wrong): Getting rid of "Standard Font" and "Normal Text Color" by putting "Filemanager Text" into "Look&Feel -> Colors -> Widget color" +Other: This tab should be removed: "Show network operations in a single window" should go either in "Behaviour" or into "Network -> KDE protocols Information". Also "Terminal program" appears for Konqueror-Settings as well as in the Kicker-Settings. There should only be one place which specifies which terminal should be used for all applications. + + +Help -> Index +------------- +This looks a bit crowdy. Adding a second Tab "Program Locations" which appears behind the "General tab" might be a good idea as the paths should be set automagically and user-interaction concerning this should only be necessary in case of failure. + +Look & Feel -> Desktop +---------------------- +Desktop: Looks overcrowded: +"Show Preview for:" should go into a tab "Previews" in File-Browsing -> File Associations. Malte is probably already working on this. +Appearance (Rik was right here): Getting rid of "Standard Font" and "Normal Text Color" by putting "Desktop Text" into "Look&Feel -> Colors -> Widget color" + +Groupboxes named "Behaviour", "Clicks on the desktop" and "Paths" would look much more tidy here ("path" could be removed from each item then and would make the dialog look more tidy). + +Look & Feel -> System-Notifications +----------------------------------- +The current dialog resembles a very good "advanced"-tab. It would be nice for the newbie if there was a +Tab for newbies in the first place which only shows the available Notification-themes ("Minimalistic", "Visually impaired", "Aureal impaired", "KDE-Standard"). +The current dialog should appear as an advanced tab behind the "Theme"-tab. + +Network -> Talk Configuration +----------------------------- +Answering Machine: A groupbox around "Address:, Subject:, First Line:" would be nice. That way one wouldn't need to mention "Mail" each time. The Groupbox could be named something like "Anwering Mail". +That way one would have a much cleaner layout and it would be much easier to see at once what the dialog is about. +Forward: Way too much text here. I see the point of having a direct explanation in the dialog. But this could look much friendlier using the following solution: +There should be a Textbox below the "Forward method"-Combobox. This Textbox only contains the information for the Forward-method which is currently selected (So the text changes each time a different Forward-method is selected). + +Sound -> Sound Server +--------------------- +As soon as more stuff is being added, a tab "Quality" might be a good idea. + +Web Browsing -> User Agent +-------------------------- +The Dialog suffers from the cockpit-dilemma. +All the new "Add"-checkboxes are only there for finetuning. Most of the time the useragent-strings should work +w/o the need to tune them this way. Better Solution: Remove the Customize-Group-box and simply add a Button "Customize ..." below the Text: "Current User Agent String: Mozilla/5.0 (comp.; Konq.orwhateveritis)". +After pressing the "Customize"-Button a dialog should pop up which contains all the nice +"Add"-checkboxes which have been added recently. diff --git a/kcontrol/access/Makefile.am b/kcontrol/access/Makefile.am new file mode 100644 index 000000000..f57c865b3 --- /dev/null +++ b/kcontrol/access/Makefile.am @@ -0,0 +1,30 @@ + +AM_CPPFLAGS= $(all_includes) +METASOURCES = AUTO + +bin_PROGRAMS = +lib_LTLIBRARIES = +kde_module_LTLIBRARIES = kcm_access.la +kdeinit_LTLIBRARIES = kaccess.la + +kaccess_la_SOURCES = kaccess.cpp main.cpp +kaccess_la_LDFLAGS = $(all_libraries) -module -avoid-version +kaccess_la_LIBADD = $(LIB_KDEUI) + +kcm_access_la_SOURCES = kcmaccess.cpp +kcm_access_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_access_la_LIBADD = $(LIB_KIO) + +noinst_HEADERS = kcmaccess.h + +xdg_apps_DATA = kcmaccess.desktop + +services_DATA = kaccess.desktop +servicesdir = $(kde_servicesdir) + +eventsrcdir = $(kde_datadir)/kaccess/ +eventsrc_DATA = eventsrc + +messages: + $(XGETTEXT) $(kaccess_la_SOURCES) -o $(podir)/kaccess.pot + $(XGETTEXT) $(kcm_access_la_SOURCES) -o $(podir)/kcmaccess.pot diff --git a/kcontrol/access/configure.in.in b/kcontrol/access/configure.in.in new file mode 100644 index 000000000..170fc8dea --- /dev/null +++ b/kcontrol/access/configure.in.in @@ -0,0 +1,7 @@ +ACCESS_SUBDIR= +KDE_CHECK_HEADER(X11/extensions/XKBstr.h, ACCESS_SUBDIR=access, , +[ +#include +]) + +AM_CONDITIONAL(include_kcontrol_access, test -n "$ACCESS_SUBDIR") diff --git a/kcontrol/access/eventsrc b/kcontrol/access/eventsrc new file mode 100644 index 000000000..185460ec4 --- /dev/null +++ b/kcontrol/access/eventsrc @@ -0,0 +1,1072 @@ +[!Global!] +IconName=kaccess +Comment=KDE Accessibility Tool +Comment[af]=KDE toeganklikheid program +Comment[be]=Інструмент даступнасці KDE +Comment[bg]=Равностоен достъп +Comment[bn]=কে.ডি.ই. সহায়ক প্রযুক্তি টুল +Comment[br]=Ostilh haezadusted KDE +Comment[bs]=KDE alat za pristupačnost +Comment[ca]=Eina d'accessibilitat KDE +Comment[cs]=KDE nástroj pro zpřístupnění +Comment[csb]=Nôrzãdze pòmòcë przistãpù KDE +Comment[cy]=Erfyn Hygyrchedd KDE +Comment[da]=KDE Tilgængelighedsværktøj +Comment[de]=KDE-Dienstprogramm für Zugangshilfen +Comment[el]=Εργαλείο προσβασιμότητας του KDE +Comment[eo]=KDE-ilo por Alirebleco +Comment[es]=Herramienta de accesibilidad de KDE +Comment[et]=KDE hõlbustusvahend +Comment[eu]=KDEren erabilerraztasun tresna +Comment[fa]=ابزار دستیابی‌پذیری KDE +Comment[fi]=KDE:n helppokäyttötoiminnot +Comment[fr]=Outil d'accessibilité de KDE +Comment[fy]=KDE Tagonklikens +Comment[ga]=Uirlis Inrochtaineachta KDE +Comment[gl]=Ferramenta de Acesibilidade de KDE +Comment[he]=כלי הנגישות של KDE +Comment[hr]=KDE alat pristupačnosti +Comment[hu]=KDE kezelési segédeszköz +Comment[is]=KDE aðgengistól +Comment[it]=Strumento per l'accessibilità di KDE +Comment[ja]=KDE アクセシビリティ支援ツール +Comment[ka]=KDE დამხმარე საშუალებები +Comment[kk]=KDE арнайы мүмкіндіктері +Comment[km]=ឧបករណ៍​មធ្យោបាយ​ងាយស្រួល KDE +Comment[ko]=KDE 접근성 도구 +Comment[mk]=Алатка за пристапливост во KDE +Comment[ms]=Alatan Kebolehcapaian KDE +Comment[nb]=Tilgjengelighetsverktøy for KDE +Comment[nds]=KDE-Warktüüch för Behinnerte +Comment[ne]=KDE पहुँचयोग्य उपकरण +Comment[nl]=KDE Toegankelijkheid +Comment[nn]=Tilgjengeverktøy for KDE +Comment[pa]=KDE ਸਹੂਲਤ ਸੰਦ +Comment[pl]=Narzędzie ułatwień dostępu KDE +Comment[pt]=Ferramenta de Acessibilidade do KDE +Comment[pt_BR]=Ferramenta de Acessibilidade do KDE +Comment[ro]=Utilitar de accesibilitate pentru KDE +Comment[ru]=Специальные возможности +Comment[se]=KDE reaidu álkkibut geavaheami várás +Comment[sk]=Nástroj na sprístupnenie KDE +Comment[sl]=Orodje za dostopnost KDE +Comment[sr]=KDE алатка за приступачност +Comment[sr@Latn]=KDE alatka za pristupačnost +Comment[sv]=Handikappverktyg för KDE +Comment[tg]=Барномаи Тавонёбии KDE +Comment[th]=เครื่องมือช่วยใช้งานโปรแกรม KDE +Comment[tr]=KDE Erişilebilirlik Aracı +Comment[uk]=Засіб доступності для KDE +Comment[uz]=KDE qulaylik vositasi +Comment[uz@cyrillic]=KDE қулайлик воситаси +Comment[vi]=Công cụ hỗ trợ người tàn tật cho KDE +Comment[wa]=Usteye d' accessibilité KDE +Comment[zh_CN]=KDE 辅助工具 +Comment[zh_TW]=KDE 無障礙工具 + +[modifierkey-latched] +Name=A modifier key has become active +Name[af]='n Verandering sleutel was geaktiveer +Name[be]=Задзейнічаная клавіша мадыфікацыі +Name[bg]=Клавиш модификатор е активен +Name[bn]=একটি মডিফায়ার কী সক্রিয় হয়েছে +Name[bs]=Modifikatorska tipka je postala aktivna +Name[ca]=S'ha activat una tecla modificadora +Name[cs]=Modifikační klávesa se stala aktivní +Name[csb]=Klawisza zjinaczi ùstôła włączonô +Name[da]=En ændringstast er blevet aktiv +Name[de]=Eine Sondertaste ist aktiv +Name[el]=Ενεργοποιήθηκε ένα πλήκτρο τροποποιητή +Name[eo]=Modifigita klavo aktiviĝis +Name[es]=Se ha activado una tecla modificadora +Name[et]=Muuteklahv muutus aktiivseks +Name[eu]=Tekla aldatzaile bat aktibatu da +Name[fa]=کلید تغییردهنده فعال شده است +Name[fi]=Muunnosnäppäin on aktivoitunut +Name[fr]=Une touche de modification est devenue active +Name[fy]=In modifkaasjetoets wurdt aktyf +Name[gl]=Activou-se unha tecla modificadora +Name[hr]=Tipka modifikatora je aktivirana +Name[hu]=Egy módosító billentyű aktívvá vált +Name[is]=Breytilykill er nú virkur +Name[it]=Un tasto modificatore è diventato attivo +Name[ja]=修飾キーがアクティブになりました +Name[kk]=Түрлендіру пернесі белсендірілді +Name[km]=គ្រាប់ចុច​កែប្រែ​មួយ​សកម្ម +Name[ko]=수정자 키가 활성화됨 +Name[lt]=Modifikavimo klavišas tapo aktyvus +Name[mk]=Некое копче за модификација стана активно +Name[nb]=En valgtast er tatt i bruk +Name[nds]=En Sünnertast is nu aktiv +Name[ne]=परिमार्जक कुञ्जी सक्रिय बनेको छ +Name[nl]=Een modificatietoets is geactiveerd +Name[nn]=Ein valtast er teken i bruk +Name[pa]=ਇੱਕ ਸਵਿੱਚ ਸੋਧਕ ਸਰਗਰਮ ਹੋ ਗਿਆ ਹA +Name[pl]=Klawisz modyfikujący został włączony +Name[pt]=Uma tecla modificadora ficou activa +Name[pt_BR]=Uma tecla modificadora tornou-se ativa +Name[ro]=Un modificator de taste a devenit activ +Name[ru]=Нажата клавиша модификатора +Name[se]=Válljenboallu lea aktiverejuvvon +Name[sk]=Modifikačný kláves je aktivovaný. +Name[sl]=Spremenilna tipka je omogočena +Name[sr]=Модификаторски тастер је активиран +Name[sr@Latn]=Modifikatorski taster je aktiviran +Name[sv]=En väljartangent har aktiverats +Name[tg]=Калиди ислоҳгар фаъол карда шуд +Name[th]=ปุ่มสำหรับเปลี่ยนหน้าที่ถูกเปิดใช้งาน +Name[uk]=Клавішу-модифікатор активовано +Name[vi]=Một phím bổ trợ đã được kích hoạt +Name[wa]=Ene tape di candjmint s' a rtrové en alaedje +Name[zh_CN]=修饰键变为激活 +Name[zh_TW]=輔助按鍵值已變為作用中 +Comment=A modifier key (e.g. Shift or Ctrl) has changed its state and is now active +Comment[af]='n Verandering sleutel (bv. Shift of Control) se toestand het verander en is nou aktief +Comment[be]=Клавіша мадыфікацыі (напр. Shift ці Ctrl) змяніла свой стан і зрабілася актыўнай +Comment[bg]=Клавиш модификатор (Shift или Ctrl) си промени състоянието и е активен сега +Comment[bn]=একটি মডিফায়ার কী (e.g. Shift বা Ctrl) অবস্থা পরিবর্তন করে এখন সক্রিয় হয়েছে +Comment[bs]=Modifikatorska tipka (npr. Shift ili Ctrl) je promijenila stanje i postala je aktivna +Comment[ca]=Una tecla modificadora (p.ex. Majús o Ctrl) ha canviat d'estat i ara està activa +Comment[cs]=Modifikační kláves (např. Shift nebo Control) změnila svůj stav a je nyní aktivní. +Comment[csb]=Klawisza zjinaczi (n.p. Shift czë Control) zmieniła stón ë je terô aktiwnô +Comment[da]=En ændringstast (f.eks., Shift eller Ctrl) har ændret sin tilstand og er nu aktiv +Comment[de]=Eine Sondertaste (z. B. Umschalt oder Strg) hat ihren Status geändert und ist jetzt aktiv +Comment[el]=Άλλαξε η κατάσταση ενός πλήκτρου τροποποιητή (π.χ. Shift ή Control) και τώρα είναι ενεργό +Comment[eo]=Modifa klavo (ekz. majuskliga klavo aŭ stirklavo) ŝanĝis sian staton kaj nun estas aktiva +Comment[es]=Una tecla modificadora (p.ej. Mayúsculas o Control) ha cambiado su estado y está activa ahora +Comment[et]=Muuteklahv (nt. Shift või Ctrl) muutis oma olekut ning on nüüd aktiivne +Comment[eu]=Tekla aldatzaile bat (hau da, Shift edo Kontrol) egoeraz aldatu da eta orain aktiboa da +Comment[fa]=یک کلید تغییردهنده )مثلاًً، تبدیل یا مهار( وضعیت خود را تغییر داده و اکنون فعال می‌باشد +Comment[fi]=Muunnosnäppäin (esim. Shift tai Ctrl) on vaihtanut tilaa ja on nyt aktiivinen +Comment[fr]=L'état d'une touche de modification (ex : Maj ou Ctrl) est modifié et elle est maintenant active +Comment[fy]=De tastân fan in modifikaasjetoets (sa as Shift of Control) is feroare en is no aktyf. +Comment[gl]=Unha tecla modificadora (ex. Alt ou Control) mudou de estado e agora está activa +Comment[hr]=Tipka modifikatora (npr. Shift ili Ctrl) promijenila je svoje stanje i sad je aktivna +Comment[hu]=Egy módosító billentyű (pl. a Shift vagy a Ctrl) állapota aktívvá változott +Comment[is]=Breytilykill (Shift eða Ctrl) hefur breytt um stöðu og er nú virkur +Comment[it]=Un tasto modificatore (es. Shift o Ctrl) ha cambiato stato ed è diventato attivo +Comment[ja]=修飾キー (Shift や Ctrl など) の状態が変更され、アクティブになりました +Comment[kk]=Түрледіру пернесі (Shift я Control секілді) күйін өзгертіп, енді белсенді +Comment[km]=គ្រាប់ចុច​កែប្រែ​មួយ (ឧ. ប្តូរ ឬ ពាក្យ​បញ្ជា) បាន​ផ្លាស់ប្តូរ​សភាព​របស់​វា ហើយឥឡូវ​នេះ​សកម្ម +Comment[ko]=Shift나 Control 키 같은 수정자 키의 상태가 바뀌었고 현재 사용 가능함 +Comment[lt]=Klavišo - modifikatoriaus (pvz., Lyg2(Shift) arba Vald(Ctrl)) būsena pakito ir jis dabar – aktyvus +Comment[mk]=Некое копче за модификација (пр. Shift или Ctrl) си ја смени состојбата и сега е активно +Comment[nb]=En valgtast (f.eks. «Shift» eller «Control») har endret status og er i bruk. +Comment[nds]=En Sünnertast (t.B. Ümschalt oder Strg) hett den Tostand ännert un is nu aktiv +Comment[ne]= परिमार्जक कुञ्जीले (जस्तै: Shift वा Ctrl) यसको स्थीति परिवर्तन गरेको छ र अहिले सक्रिय छ +Comment[nl]=De status van een modificatietoets (zoals Shift of Control) is gewijzigd en is nu actief +Comment[nn]=Ein valtast (t.d. «Shift» eller «Control») har endra statusen og er no i bruk +Comment[pl]=Klawisz modyfikujący (np. Shift lub Ctrl) zmienił stan i jest teraz włączony +Comment[pt]=Uma tecla modificadora (p.ex., o Shift ou o Ctrl) mudou o seu estado e ficou activa +Comment[pt_BR]=Uma tecla modificadora (p.ex. Shift ou Ctrl) mudou seu estado e agora está ativa +Comment[ro]=Un modificator de taste (cum ar fi Shift sau Ctrl) și-a schimbat starea și este acum activ +Comment[ru]=Нажата клавиша модификатора (например, Shift или Ctrl) +Comment[sk]=Modifikačný kláves (napr. Shift alebo Ctrl) zmenil svoj stav a je teraz aktívny. +Comment[sl]=Spremenilna tipka (npr. Shift ali Ctrl) je spremenila svoje stanje in je sedaj omogočena +Comment[sr]=Модификаторски тастер (нпр. Shift или Control) је променио стање и сада је активан +Comment[sr@Latn]=Modifikatorski taster (npr. Shift ili Control) je promenio stanje i sada je aktivan +Comment[sv]=En väljartangent (t.ex. Skift eller Ctrl) har ändrat tillstånd och är nu aktiv +Comment[tg]=Калиди ислоҳгар (мисоли, Shift ё Ctrl) вазъияти худ иваз кард ва ҳозир фаъол аст +Comment[th]=มีการเปลี่ยนสถานะปุ่มสำหรับเปลี่ยนหน้าที่ (เช่น Shift หรือ Control) และขณะนี้ เปิดใช้งาน +Comment[uk]=Клавіша-модифікатор (напр., Shift або Control) змінила свій стан і тепер активна +Comment[vi]=Một phím bổ trợ (như Shift hay Ctrl) đã thay đổi trạng thái và được kích hoạt +Comment[wa]=Ene tape di candjmint (metans SHIFT ou CTRL) a candjî si-estat et est asteure en alaedje +Comment[zh_CN]=修饰键(即 Shift 或 Ctrl)更改了其状态,现已激活 +Comment[zh_TW]=輔助按鍵 (例, Shift 或 Control) 已改變其狀態且目前為作用中 +default_sound=KDE_Click.wav +default_presentation=0 +nopresentation=236 + +[modifierkey-unlatched] +Name=A modifier key has become inactive +Name[af]='n Verandering sleutel was gedeaktiveer +Name[be]=Клавіша мадыфікацыі зрабілася неактыўнай +Name[bg]=Клавиш модификатор е неактивен +Name[bn]=একটি মডিফায়ার কী নিষ্ক্রীয় হয়েছে +Name[bs]=Modifikatorska tipka je postala neaktivna +Name[ca]=S'ha desactivat una tecla modificadora +Name[cs]=Modifikační klávesa se stala neaktivní +Name[csb]=Klawisza zjinaczi òstałą włączonô +Name[da]=En ændringstast er blevet deaktiveret +Name[de]=Eine Sondertaste ist nicht mehr aktiv +Name[el]=Απενεργοποιήθηκε ένα πλήκτρο τροποποιητή +Name[eo]=Modifa klavo malaktiviĝis +Name[es]=Se ha desactivado una tecla modificadora +Name[et]=Muuteklahv muutus mitteaktiivseks +Name[eu]=Tekla aldatzaile bat desaktibatu da +Name[fa]=کلید تغییردهنده غیرفعال شده است +Name[fi]=Muunnosnäppäin ei ole enää aktiivinen +Name[fr]=Une touche de modification est devenue inactive +Name[fy]=In modifikaasjetoets wurdt ynaktief +Name[gl]=Unha tecla modificadora foi desactivada +Name[hr]=Tipka modifikatora je deaktivirana +Name[hu]=Egy módosító billentyű inaktívvá vált +Name[is]=Breytilykill er nú óvirkur +Name[it]=Un tasto modificatore è diventato inattivo +Name[ja]=修飾キーが非アクティブになりました +Name[kk]=Түрлендіру пернесі белсендігін жоғалтты +Name[km]=គ្រាប់ចុច​កែប្រែ​មួយ​អសកម្ម​ហើយ +Name[ko]=수정자 키가 비활성화됨 +Name[lt]=Klavišas - modifikatorius tapo neaktyvus +Name[mk]=Некое копче за модификација стана неактивно +Name[nb]=En valgtast er blitt skrudd av +Name[nds]=En Sünnertast is nich mehr aktiv +Name[ne]=परिमार्जक कुञ्जी निस्क्रिय बनेको छ +Name[nl]=Een modificatietoets is gedeactiveerd +Name[nn]=Ein valtast er slått av +Name[pl]=Klawisz modyfikujący został wyłączony +Name[pt]=Uma tecla modificadora ficou inactiva +Name[pt_BR]=Uma tecla modificadora tornou-se inativa +Name[ro]=Un modificator de taste a devenit inactiv +Name[ru]=Отжата клавиша модификатора +Name[se]=Válljenboallu ii leat šat aktiivalaš +Name[sk]=Modifikačný kláves je neaktívny. +Name[sl]=Spremenilna tipka je onemogočena +Name[sr]=Модификаторски тастер је деактивиран +Name[sr@Latn]=Modifikatorski taster je deaktiviran +Name[sv]=En väljartangent har inaktiverats +Name[tg]=Калиди ислоҳгар ғайри фаъол карда шуд +Name[th]=ปุ่มสำหรับเปลี่ยนหน้าที่ถูกปิดการใช้งาน +Name[uk]=Клавішу-модифікатор деактивовано +Name[vi]=Một phím bổ trợ đã bị tắt +Name[wa]=Ene tape di candjmint s' a rtrové dismetowe +Name[zh_CN]=修饰键变为非激活 +Name[zh_TW]=輔助按鍵已變為非作用中 +Comment=A modifier key (e.g. Shift or Ctrl) has changed its state and is now inactive +Comment[af]='n Verandering sleutel (bv. Shift of Contorl) se toestand het verander en is nou onaktief +Comment[be]=Клавіша мадыфікацыі (напр. Shift ці Ctrl) змяніла свой стан і зрабілася неактыўнай +Comment[bg]=Клавиш модификатор (Shift или Ctrl) си промени състоянието и е неактивен сега +Comment[bn]=একটি মডিফায়ার কী (e.g. Shift বা Ctrl) অবস্থা পরিবর্তন করে এখন নিষ্ক্রীয় হয়েছে +Comment[bs]=Modifikatorska tipka (npr. Shift ili Ctrl) je promijenila stanje i sada je neaktivna +Comment[ca]=Una tecla modificadora (p.ex. Majús o Ctrl) ha canviat d'estat i ara està inactiva +Comment[cs]=Modifikační kláves (např. Shift nebo Control) změnila svůj stav a je nyní neaktivní. +Comment[csb]=Klawisza zjinaczi (n.p. Shift czë Control) zmieniła stón ë je terô aktiwnô +Comment[da]=En ændringstast (f.eks., Shift eller Ctrl) har ændret sin tilstand og er nu inaktiv +Comment[de]=Eine Sondertaste (z. B. Umschalt oder Strg) hat ihren Status geändert und ist jetzt inaktiv +Comment[el]=Άλλαξε η κατάσταση ενός πλήκτρου τροποποιητή (π.χ. Shift ή Control) και τώρα είναι ανενεργό +Comment[eo]=Modifa klavo (ekz. majuskliga klavo aŭ stirklavo) ŝanĝis sian staton kaj nun estas malaktiva +Comment[es]=Una tecla modificadora (p.ej. Mayúsculas o Control) ha cambiado su estado y ahora está inactiva +Comment[et]=Muuteklahv (nt. Shift või Ctrl) muutis oma olekut ning on nüüd mitteaktiivne +Comment[eu]=Tekla aldatzaile bat (hau da, Shift edo Kontrol) egoeraz aldatu da eta orain inaktiboa da +Comment[fa]=یک کلید تغییردهنده )مثلاً، تبدیل یا مهار( وضعیت خود را تغییر داده و اکنون غیر‌فعال می‌باشد +Comment[fi]=Muunnosnäppäin (esim. Shift tai Ctrl) on vaihtanut tilaa eikä ole enää aktiivinen +Comment[fr]=L'état d'une touche de modification (ex : Maj ou Ctrl) est modifié et elle est maintenant inactive +Comment[fy]=De tastân fan in modifikaasjetoets (sa as Shift of Control) is feroare en is no ynaktyf. +Comment[gl]=Unha tecla modificadora (ex. Alt ou Control) mudou de estado e agora está inactiva +Comment[hr]=Tipka modifikatora (npr. Shift ili Ctrl) promijenila je svoje stanje i sad nije aktivna +Comment[hu]=Egy módosító billentyű (pl. a Shift vagy a Ctrl) állapota inaktívvá változott +Comment[is]=Breytilykill (Shift eða Ctrl) hefur breytt um stöðu og er nú óvirkur +Comment[it]=Un tasto modificatore (es. Shift o Ctrl) ha cambiato stato ed è diventato inattivo +Comment[ja]=修飾キー (Shift や Ctrl など) の状態が変更され、非アクティブになりました +Comment[kk]=Түрледіру пернесі (Shift я Control секілді) күйін өзгертіп, енді белсенді емес +Comment[km]=គ្រាប់​ចុច​កែប្រែ (ឧ. ប្តូរ ឬ បញ្ជា) បាន​ផ្លាស់ប្តូរ​សភាព​របស់វា ហើយ ឥឡូវ​នេះ​អសកម្ម +Comment[ko]=Shift나 Control 키 같은 수정자 키의 상태가 바뀌었고 현재 사용 불가능함 +Comment[lt]=Klavišo - modifikatoriaus (pvz., Lyg2(Shift) arba Vald(Ctrl)) būsena pakito ir jis dabar - neaktyvus +Comment[mk]=Некое копче за модификација (пр. Shift или Ctrl) си ја смени состојбата и сега е неактивно +Comment[nb]=En valgtast (f.eks. «Shift» eller «Ctrl») har endret status og er ikke mer i bruk +Comment[nds]=En Sünnertast (t.B. Ümschalt oder Strg) hett den Tostand ännert un is nu inaktiv +Comment[ne]=परिमार्जक कुञ्जीले (जस्तै: Shift वा Ctrl) यसको स्थिति परिवर्तन गरेको छ र अहिले निस्क्रिय छ +Comment[nl]=De status van een modificatietoets (zoals Shift of Control) is gewijzigd en is nu inactief +Comment[nn]=Ein valtast (t.d. «Shift» eller «Ctrl») har endra statusen og er ikkje i bruk lenger +Comment[pl]=Klawisz modyfikujący (np. Shift lub Ctrl) zmienił stan i jest teraz wyłączony +Comment[pt]=Uma tecla modificadora (p.ex., o Shift ou o Ctrl) mudou o seu estado e ficou inactiva +Comment[pt_BR]=Uma tecla modificadora (p.ex. Shift ou Ctrl) mudou seu estado e agora está inativa +Comment[ro]=Un modificator de taste (cum ar fi Shift sau Ctrl) și-a schimbat starea și este acum inactiv +Comment[ru]=Деактивирована клавиша модификатора (например, Shift или Ctrl) +Comment[sk]=Modifikačný kláves (napr. Shift alebo Ctrl) zmenil svoj stav a je teraz neaktívny. +Comment[sl]=Spremenilna tipka (npr. Shift ali Ctrl) je spremenila svoje stanje in je sedaj oneomogočena +Comment[sr]=Модификаторски тастер (нпр. Shift или Control) је променио стање и више није активан +Comment[sr@Latn]=Modifikatorski taster (npr. Shift ili Control) je promenio stanje i više nije aktivan +Comment[sv]=En väljartangent (t.ex. Skift eller Ctrl) har ändrat tillstånd och är nu inaktiv +Comment[tg]=Калиди ислоҳгар (мисоли, Shift ё Ctrl) вазъияти худ иваз кард ва ҳозир ғайри фаъол аст +Comment[th]=มีการเปลี่ยนสถานะปุ่มสำหรับเปลี่ยนหน้าที่ (เช่น Shift หรือ Control) และขณะนี้ ถูกปิดการใช้งาน +Comment[uk]=Клавіша-модифікатор (напр., Shift або Control) змінила свій стан і тепер неактивна +Comment[vi]=Một phím bổ trợ (như Shift hay Ctrl) đã thay đổi trạng thái và đã bị tắt +Comment[wa]=Ene tape di candjmint (metans SHIFT ou CTRL) a candjî si-estat et n' est asteure pus en alaedje +Comment[zh_CN]=修饰键(即 Shift 或 Ctrl)更改了其状态,现已非激活 +Comment[zh_TW]=輔助按鍵 (例, Shift 或 Control) 已改變其狀態且目前為非作用中 +default_sound=KDE_Click.wav +default_presentation=0 +nopresentation=236 + +[modifierkey-locked] +Name=A modifier key has been locked +Name[af]='n Verandering sleutel was gesluit +Name[be]=Клавіша мадыфікацыі заблакаваная +Name[bg]=Клавиш модификатор е заключен +Name[bn]=একটি মডিফায়ার কী লক করা হয়েছে +Name[bs]=Modifikatorska tipka je zaključana +Name[ca]=S'ha bloquejat una tecla modificadora +Name[cs]=Modifikační klávesa byla zamčena +Name[csb]=Klawisza zjinaczi òstała zablokòwónô +Name[da]=En ændringstast er blevet låst +Name[de]=Eine Sondertaste wurde eingerastet +Name[el]=Ένα πλήκτρο τροποποιητή κλειδώθηκε +Name[eo]=Modifa klavo ŝlosiĝis +Name[es]=Se ha bloqueado una tecla modificadora +Name[et]=Muuteklahv on lukustatud +Name[eu]=Tekla aldatzaile bat blokeatu da +Name[fa]=کلید تغییردهنده قفل شده است +Name[fi]=Muunnosnäppäin on lukittu +Name[fr]=Une touche de modification a été verrouillée +Name[fy]=In modifikaasjetoets is beskoattele +Name[gl]=Unha tecla modificadora foi bloqueada +Name[hr]=Tipka modifikatora je zaključana +Name[hu]=Egy módosító billentyű zárolódott +Name[is]=Breytilykli hefur verið læst +Name[it]=Un tasto modificatore è stato bloccato +Name[ja]=修飾キーがロックされました +Name[kk]=Түрлендіру пернесі қосулы +Name[km]=គ្រាប់ចុច​កែប្រែ​មួយ​ត្រូវ​បាន​ចាក់សោ +Name[ko]=수정자 키가 잠김 +Name[lt]=Klavišas - modifikatorius buvo užrakintas +Name[mk]=Некое копче за модификација е заклучено +Name[nb]=En valgtast er blitt låst +Name[nds]=En Sünnertast wöör fastsett +Name[ne]=परिमार्जक कुञ्जीमा ताल्चा लागेको छ +Name[nl]=Een modificatietoets is vergrendeld +Name[nn]=Ein valtast er blitt låst +Name[pl]=Klawisz modyfikujący został zablokowany +Name[pt]=Uma tecla modificadora ficou bloqueada +Name[pt_BR]=Uma tecla modificadora foi bloqueada +Name[ro]=Un modificator de taste a fost blocat +Name[ru]=Клавиша модификатора зафиксирована +Name[se]=Válljenboallu lea lohkaduvvon +Name[sk]=Modifikačný kláves je zamknutý +Name[sl]=Spremenilna tipka je zaklenjena +Name[sr]=Модификаторски тастер је закључан +Name[sr@Latn]=Modifikatorski taster je zaključan +Name[sv]=En väljartangent har låsts +Name[tg]=Калиди ислоҳгар қулф карда шуд +Name[th]=ปุ่มเปลี่ยนหน้าที่ค้างอยู่ +Name[uk]=Клавішу-модифікатор заблоковано +Name[vi]=Một phím bổ trợ đã được khoá +Name[wa]=Ene tape di candjmint a stî serêye +Name[zh_CN]=修饰键现已锁定 +Name[zh_TW]=輔助按鍵已經鎖定 +Comment=A modifier key (e.g. Shift or Ctrl) has been locked and is now active for all of the following keypresses +Comment[af]='n Verandering sleutel (bv. Shift of Control) is gesluit en is nou aktief vir al die volgende sleutel ponse +Comment[be]=Клавіша мадыфікацыі (напр. Shift ці Ctrl) была заблакаваная і цяпер актыўная для ўсіх наступных націскаў іншых клавішаў +Comment[bg]=Клавиш модификатор е заключен и е активен за всички последващи клавиши +Comment[bn]=একটি মডিফায়ার কী (e.g. Shift বা Ctrl) লক করা হয়েছে এবং পরবর্তী সবকটি কী-র (key) জন্য সক্রিয় থাকবে +Comment[bs]=Modifikatorska tipka (npr. Shift ili Ctrl) je zaključana i sada je aktivna za sve naredne tipke +Comment[ca]=Una tecla modificadora (p.ex. Majús o Ctrl) s'ha bloquejat i ara està activa per a totes les pulsacions següents +Comment[cs]=Modifikační klávesa (např. Shift nebo Control) byla zamčena a je nyní aktivní pro všechny následující stisky kláves +Comment[csb]=Klawisz zjinaczi (np. Shift czë Control) òstôła zablokòwónô ë bãdze altiwòwónô przë nôslédnym wcësniãcô klawiszë +Comment[da]=En ændringstast (f.eks., Shift eller Ctrl) er blevet låst og er nu aktiv for alle følgende tastetryk +Comment[de]=Eine Sondertaste (z. B. Umschalt oder Strg) wurde eingerastet und bleibt für alle folgenden Tastendrücke aktiv +Comment[el]=Ένα πλήκτρο τροποποιητή (π.χ. Shift ή Control) κλειδώθηκε και είναι τώρα ενεργό για τα επόμενα πατήματα πλήκτρων +Comment[eo]=Modifa klavo (ekz. majuskliga klavo aŭ stirklavo) ŝlosiĝis kaj nun estas aktiva por sekvantaj klavpremoj +Comment[es]=Se ha bloqueado una tecla modificadora (p. ej. Mayúsculas o Control) y ahora está activa para el resto de las operaciones con el teclado +Comment[et]=Muuteklahv (nt. Shift või Ctrl) on lukustatud ja on nüüd aktiivne kõikide järgnevate klahvivajutuste jaoks +Comment[eu]=Tekla aldatzaile bat (hau da, Shift edo Kontrol) blokeatu da eta orain aktiboa da hurrengo tekla zapaketa guztiendako +Comment[fa]=یک کلید تغییردهنده )مثلاً، تبدیل یا مهار( قفل شده و اکنون برای همۀ فشارهای کلید زیر فعال می‌باشد +Comment[fi]=Muunnosnäppäin (esim. Shift tai Ctrl) on lukittu ja on nyt aktiivinen kaikille seuraaville näppäinpainalluksille +Comment[fr]=Une touche de modification (ex : Maj ou Ctrl) a été verrouillée et est maintenant active pour toutes les touches suivantes +Comment[fy]=In modifikaasjetoets (sa as Shift of Control) is beskoattele en is no aktyf foar de neikommende toetsoanslaggen +Comment[gl]=Unha tecla modificadora (ex. Alt ou Control) foi bloqueada e agora está activa para as seguintes combinacións +Comment[hr]=Tipka modifikatora (npr. Shift ili Ctrl) zaključana je i sad je aktivna tijekom svih sljedećih pritisaka na tipke +Comment[hu]=Egy módosító billentyű (pl. a Shift vagy a Ctrl) zárolódott, és ezután minden billentyűlenyomásnál aktív lesz +Comment[is]=Breytilykli (Shift eða Ctrl) hefur verið læst og er nú virkur fyrir eftirfarandi lyklaborðsaðgerðir +Comment[it]=Un tasto modificatore (es. Shift o Ctrl) è stato bloccato e adesso è attivo per le prossime immissioni +Comment[ja]=修飾キー (Shift や Ctrl など) がロックされ、続くキー押下のすべてに対してアクティブになりました +Comment[kk]=Түрлендіру пернесі (Shift я Control секілді) қосылып, енді келесі басылатын пернесінің әсерін түрлендіруге дайын +Comment[km]= គ្រាប់ចុច​កែប្រែ​មួយ (ឧ. ប្តូរ ឬ បញ្ជា) ត្រូវ​បាន​ចាក់សោ ហើយ ឥឡូវ​វាសកម្ម​សម្រាប់​ការសង្កត់​គ្រាប់ចុច​ខាងក្រោម​ទាំងអស់​ ។ +Comment[ko]=Shift나 Control 키 같은 수정자 키의 상태가 바뀌었고 현재 모든 키 입력에 대해서 활성화됨 +Comment[lt]=Klavišas - modifikatorius (pvz., Lyg2(Shift) arba Vald(Ctrl)) buvo užrakintas ir dabar visiems būsimiems klavišų paspaudimams yra aktyvus +Comment[mk]=Некое копче за модификација (пр. Shift или Ctrl) беше заклучено и сега е активно за сите наредни притиснати копчиња +Comment[nb]=En valgtast (f.eks. «Shift» eller «Ctrl») er blitt låst og er nå tilgjengelig for alle de følgende tastetrykkene +Comment[nds]=En Sünnertast (t.B. Ümschalt oder Strg) wöör fastsett un is nu aktiv för dat Drücken vun all nakamen Tasten +Comment[ne]=परिमार्जक कुञ्जीमा (जस्तै: Shift वा Ctrl) ताल्चा लागेको छ र अहिले निम्न कुञ्जी थिच्नेहरू सबैका लागि सक्रिय छन् +Comment[nl]=Een modificatietoets (zoals Shift of Control) is vergrendeld en is nu actief voor de volgende toetsaanslagen +Comment[nn]=Ein valtast (t.d. «Shift» eller «Ctrl») er blitt låst og vert no bruka saman med alle følgjande tastetrykk +Comment[pl]=Klawisz modyfikujący (np. Shift lub Ctrl) został zablokowany i będzie włączony przy następnych naciśnięciach klawiszy +Comment[pt]=Uma tecla modificadora (p.ex., o Shift ou o Ctrl) ficou bloqueada e está agora activa para todas as sequências de teclas seguintes +Comment[pt_BR]=Uma tecla modificadora (p.ex. Shift ou Ctrl) foi bloqueada e agora está ativa para todas as seqüências de teclas seguintes +Comment[ro]=Un modificator de taste (cum ar fi Shift sau Ctrl) a fost blocat și este acum activ pentru următoarele apăsări de taste +Comment[ru]=Клавиша модификатора (например, Shift или Ctrl) зафиксирована и активна при нажатии любых других клавиш +Comment[sk]=Modifikačný kláves (napr. Shift alebo Ctrl) je zamknutý a je teraz aktívny pre všetky nasledujúce stlačenia kláves +Comment[sl]=Spremenilna tipka (npr. Shift ali Ctrl) je zaklenjena in je sedaj omogočena za vse tipkanje v nadaljnje +Comment[sr]=Модификаторски тастер (нпр. Shift или Control) је закључан и сада је активан за све наредне притиске тастера +Comment[sr@Latn]=Modifikatorski taster (npr. Shift ili Control) je zaključan i sada je aktivan za sve naredne pritiske tastera +Comment[sv]=En väljartangent (t.ex. Skift eller Ctrl) har låsts och är nu aktiv för alla följande tangentnertryckningar +Comment[tg]=Калиди ислоҳгар (мисоли, Shift ё Ctrl) қулф карда буд лекин ҳозир ин фаъол аст барои ҳамаи пахшзаданиҳои оянда +Comment[th]=ปุ่มสำหรับเปลี่ยนหน้าที่ (เช่น Shift หรือ Control) ค้างอยู่ และขณะนี้จะถูกใช้งาน สำหรับการกดคีย์อื่นๆ ต่อจากนี้ทั้งหมด +Comment[uk]=Клавіша-модифікатор (напр., Shift або Control) була заблокована і тепер активна для всіх наступних натискань клавіш +Comment[vi]=Một phím bổ trợ (như Shift hay Ctrl) đã được khoá và từ giờ bạn có thể dùng nó khi gõ bàn phím +Comment[wa]=Ene tape di candjmint (metans SHIFT ou CTRL) a stî serêye et est asteure en alaedje po tos les tapes di tchôkeyes. +Comment[zh_CN]=修饰键(即 Shift 或 Ctrl)已被锁定,现在将适用于后续按键 +Comment[zh_TW]=輔助按鍵 (例, Shift 或 Control) 已經鎖定且目前對所有下列按下按鍵的動作為作用中 +default_sound=KDE_Click.wav +default_presentation=0 +nopresentation=236 + +[lockkey-locked] +Name=A lock key has been activated +Name[af]='n Sluit sleutel was geaktiveer +Name[be]=Клавіша блакіроўкі задзейнічаная +Name[bg]=Заключващ клавиш бе активиран +Name[bs]=Aktivirana je tipka za zaključavanje +Name[ca]=S'ha activat una tecla de bloqueig +Name[cs]=Klávesa zámku byla aktivována +Name[csb]=Klawisza blokadë je aktiwòwónô +Name[da]=En låsetast er blevet aktiveret +Name[de]=Eine Feststelltaste wurde aktiviert +Name[el]=Ένα πλήκτρο τροποποιητή ξεκλειδώθηκε +Name[eo]=Ŝlosa klavo aktiviĝis +Name[es]=Una tecla de bloqueo se ha activado +Name[et]=Lukustusklahv on aktiveeritud +Name[eu]=Tekla blokeaketa aktibatu da +Name[fa]=یک کلید قفل فعال شده است +Name[fi]=Lukitusnäppäin on aktivoitu +Name[fr]=Une touche de verrouillage a été activée +Name[fy]=In beskoatteltoets is aktivearre +Name[gl]=Activou-se unha tecla de bloqueo +Name[he]=מקש ננעל הופעל +Name[hr]=Tipka zaključavanja je aktivirana +Name[hu]=Egy zároló billentyű aktívvá vált +Name[is]=Læsilykill hefur verið virkjaður +Name[it]=Un tasto di blocco è stato attivato +Name[ja]=ロックキーがアクティブになりました +Name[ka]=დაბლოკვის ღილაკი გააქტივებულია +Name[kk]=Қосқыш перне белсенді +Name[km]=ការ​ចាក់សោ​គ្រាប់​ចុច​ត្រូវ​បាន​ធ្វើ​ឲ្យ​សកម្ម +Name[ko]=잠금 키가 활성화됨 +Name[lt]=Užrakto klavišas buvo aktyvuotas +Name[mk]=Некое копче за заклучување беше активирано +Name[nb]=En valgtast er blitt skrudd på +Name[nds]=En Faststelltast is nu aktiv +Name[ne]=एउटा ताल्चा लगाएको कुञ्जी सक्रिय पारिएको छ +Name[nl]=Een vergrendeltoets is geactiveerd +Name[nn]=Ein låsetast er blitt slått på +Name[pl]=Klawisz blokujący został włączony +Name[pt]=Uma tecla de bloqueio ficou activa +Name[pt_BR]=Uma tecla de bloqueio foi ativada +Name[ro]=O tastă de blocare a fost activată +Name[ru]=Активирована клавиша переключения режимов +Name[se]=Lohkadanboallu lea aktiverejuvvon +Name[sk]=Zamykací kláves je aktivny. +Name[sl]=Zaklenilna tipka je omogočena +Name[sr]=Тастер за закључавање је активиран +Name[sr@Latn]=Taster za zaključavanje je aktiviran +Name[sv]=En låstangent har aktiverats +Name[tg]=Калиди қулф фаъол карда шуд +Name[th]=ปุ่มล็อคเปิดใช้งาน +Name[uk]=Клавішу блокування активовано +Name[vi]=Một phím khoá đã được kích hoạt +Name[wa]=Ene tape po serer a stî metowe en alaedje +Name[zh_CN]=锁定键现已激活 +Name[zh_TW]=鎖定鍵已作用 +Comment=A lock key (e.g. Caps Lock or Num Lock) has changed its state and is now active +Comment[af]='n Sluit sleutel (bv. Caps Lock of Num Lock) se toestand het verander en is nou aktief +Comment[be]=Клавіша блакіроўкі (напр. Caps Lock ці Num Lock) змяніла свой стан і зрабілася актыўнай +Comment[bg]=Заключващ клавиш (Caps Lock или Num Lock) си промени състоянието и е неактивен сега +Comment[bs]=Tipka za zaključavanje (npr. Caps Lock ili Num Lock) je promijenila stanje i sada je aktivna +Comment[ca]=Una tecla de bloqueig (p.ex. BloqMajús o BloqNum) ha canviat d'estat i ara està activa +Comment[cs]=Klávesa zámku (např. Caps Lock nebo Num Lock) změnila svůj stav a je nyní aktivní +Comment[csb]=Klawisza blokadë (np. Caps Lock czë Num Lock) zmieniłą stón ë nie je terô aktiwnô +Comment[da]=En låsetast (f.eks., Caps Lock eller Num Lock) har ændret sin tilstand og er nu aktiv +Comment[de]=Eine Feststelltaste (z. B. die Hochstelltaste oder Num-Lock) hat ihren Status geändert und ist nun aktiv +Comment[el]=Ένα πλήκτρο κλειδώματος (π.χ. Caps Lock ή Num Lock) άλλαξε κατάσταση και είναι τώρα ανενεργό +Comment[eo]=Ŝlosa klavo (ekz. majuskla baskulo aŭ Cifera baskulo) ŝanĝis sian staton kaj nun estas aktiva +Comment[es]=Una tecla de bloqueo (p. ej., Bloq Mayús o Bloq Num) ha cambiado su estado y ahora está inactiva +Comment[et]=Lukustusklahv (nt. Caps Lock või Num Lock) muutis oma seisundit ning on nüüd mitteaktiivne +Comment[eu]=Tekla blokeatzaile bat (hau da, blok. maius. edo blok. zenb.) egoeraz aldatu da eta orain aktiboa da +Comment[fa]=یک کلید قفل )مثلاً ، قفل تبدیل یا قفل اعداد( وضعیت خود را تغییر داده و اکنون غیرفعال می‌باشد +Comment[fi]=Lukitusnäppäin (esim. CapsLock tai NumLock) on vaihtanut tilaansa ja on nyt aktiivinen +Comment[fr]=L'état d'une touche de verrouillage (ex : Verr. Maj ou Verr. Num.) est modifié et elle est maintenant inactive +Comment[fy]=De tastân fan in beskoatteltoets (sa as kaptaalskoattel of Nûm skoattel) is wizige en is no ynaktyf. +Comment[gl]=Unha tecla de bloqueo (ex., Bloq Maius ou Bloq Num) mudou de estado e agora está activa +Comment[he]=מקש ננעל (למשל Caps Lock או Num Lock) שינה את מצבו והוא כעת פעיל +Comment[hr]=Tipka zaključavanja (npr. CapsLock ili NumLock) promijenila je svoje stanje i sad je aktivna +Comment[hu]=Egy zároló billentyű (pl. a Caps Lock vagy a Num Lock) állapota aktívvá vált +Comment[is]=Læsilykill (Caps Lock eða Num Lock) hefur breytt um stöðu og er nú virkur +Comment[it]=Un tasto di blocco (es. Bloc Maiusc o Bloc Num) ha cambiato stato e adesso è inattivo +Comment[ja]=ロックキー (Caps Lock や Num Lock など) の状態が変更され、アクティブになりました +Comment[kk]=Қосқыш перне (Caps Lock я Num Lock) күйін өзгертіп, енді белсенді +Comment[km]=គ្រាប់​ចុច​ចាក់សោ (ឧ. ប្តូរ​ជាប់ ឬ Num Lock) បាន​ផ្លាស់ប្តូរ​សភាព​របស់​វា ហើយ ឥឡូវ​នេះ​វាអសកម្ម +Comment[ko]=Caps Lock이나 Num Lock 키 같은 잠금 키의 상태가 바뀌었고 현재 활성화됨 +Comment[lt]=Užrakto klavišo (pvz., Didž(Caps Lock) arba Sk(Num Lock)) būsena pakito ir jis dabar - aktyvus +Comment[mk]=Некое копче за заклучување (пр. Caps Lock или Num Lock) си ја смени состојбата и сега е неактивно +Comment[nb]=En låsetast (f.eks. «Caps Lock» eller «Num lock») har endret status og er nå skrudd på. +Comment[nds]=En Faststelltast (t.B. Tallenrast oder Grootschrieventast) hett den Tostand ännert un is nu aktiv +Comment[ne]=एउटा ताल्चा लगाउने कुञ्जीले (जस्तै: Caps Lock वा Num Lock) यसको स्थिति परिवर्तन गरेको छ र अहिले सक्रिय छ +Comment[nl]=De status van een vergrendeltoets (zoals Caps Lock of Num Lock) is gewijzigd en is nu inactief +Comment[nn]=Ein låsetast (t.d. «Caps Lock» eller «Num lock») har endra statusen og er no slått på +Comment[pl]=Klawisz blokujący (np. Caps Lock lub Num Lock) zmienił stan i jest teraz wyłączony +Comment[pt]=Uma tecla de bloqueio (p.ex., o Caps Lock ou o Num Lock) mudou o seu estado e ficou activa +Comment[pt_BR]=Uma tecla de bloqueio (p.ex. Caps Lock ou Num Lock) mudou seu estado e agora está ativa +Comment[ro]=O tastă de blocare (cur ar fi Caps Lock sau Num Lock) și-a schimbat starea și este acum activă +Comment[ru]=Активирована клавиша переключения режимов (например, Caps Lock или Num Lock) +Comment[sk]=Zamykací kláves (napr. Caps Lock alebo Num Lock) zmenil svoj stav a je teraz aktívny. +Comment[sl]=Zaklenilna tipka (npr. Caps Lock ali Num Lock) je spremenila svoje stanje in je sedaj omogočena +Comment[sr]=Тастер за закључавање (нпр. Caps Lock или Num Lock) је променио стање и сада је активан +Comment[sr@Latn]=Taster za zaključavanje (npr. Caps Lock ili Num Lock) je promenio stanje i sada je aktivan +Comment[sv]=En låstangent (t.ex. Caps Lock eller Num Lock) har ändrat tillstånd och är nu aktiv +Comment[tg]=Калиди қулф (мисоли, Caps Lock ё Num Lock) вазъияти худ иваз кард ва ҳозир фаъол аст +Comment[th]=มีการเปลี่ยนสถานะปุ่มล็อค (เช่น Caps Lock หรือ Num Lock) และขณะนี้เปิดการใช้งาน +Comment[uk]=Клавіша блокування (напр., Caps Lock або Num Lock) змінила свій стан і тепер активна +Comment[vi]=Một phím khoá (như Caps Lock hay Num Lock) đã thay đổi trạng thái và được kích hoạt +Comment[wa]=Ene tape po serer (metans CAPS LOCK ou NUM LOCK) a candjî d' esta et est asteure en alaedje +Comment[zh_CN]=锁定键(如 Caps Lock 或 Num Lock)更改了其状态,现已非激活 +Comment[zh_TW]=鎖定按鍵(例, 大寫鎖定或數字鎖定)已改變其狀態且目前為作用中 +default_sound=KDE_Click.wav +default_presentation=0 +nopresentation=236 + +[lockkey-unlocked] +Name=A lock key has been deactivated +Name[af]='n Sluit sleutel was gedeaktiveer +Name[be]=Клавіша блакіроўкі зрабілася неактыўнай +Name[bg]=Заключващ клавиш бе деактивиран +Name[bs]=Tipka za zaključavanje je deaktivirana +Name[ca]=S'ha desactivat una tecla de bloqueig +Name[cs]=Klávesa zámku byla deaktivována +Name[csb]=Klawisza blokadë nie je aktiwnô +Name[da]=En låsetast er blevet deaktiveret +Name[de]=Eine Feststelltaste wurde deaktiviert +Name[el]=Ένα πλήκτρο κλειδώματος απενεργοποιήθηκε +Name[eo]=Ŝlosa klavo malaktiviĝis +Name[es]=Una tecla de bloqueo se ha desactivado +Name[et]=Lukustusklahv on nüüd mitteaktiivne +Name[eu]=Tekla blokeaketa desaktibatu da +Name[fa]=کلید قفل غیرفعال شده است +Name[fi]=Lukitusnäppäin on nyt deaktivoitu +Name[fr]=Une touche de verrouillage a été désactivée +Name[fy]=In beskoatteltoets is ûntaktivearre +Name[gl]=Unha tecla de bloqueo foi desactivada +Name[he]=מקש ננעל נכבה +Name[hr]=Tipka zaključavanja je deaktivirana +Name[hu]=Egy zároló billentyű inaktívvá vált +Name[is]=Læsilykill hefur verið aftengdur +Name[it]=Un tasto di blocco è stato disattivato +Name[ja]=ロックキーが非アクティブになりました +Name[ka]=დაბლოკვის ღილაკი ამორთულია +Name[kk]=Қосқыш перне өшіруілі +Name[km]=គ្រាប់ចុច​ចាក់សោ​ត្រូវ​បាន​ធ្វើ​ឲ្យ​អសកម្ម +Name[ko]=잠금 키가 비활성화됨 +Name[lt]=Užrakto klavišas buvo išjungtas +Name[mk]=Некое копче за заклучување беше активирано +Name[nb]=En låsetast er blitt skrudd av +Name[nds]=En Faststelltast is nu nich mehr aktiv +Name[ne]=एउटा ताल्चा लगाउने कुञ्जी निस्क्रिय पारिएको छ +Name[nl]=Een vergrendeltoets is gedeactiveerd +Name[nn]=Ein låsetast er blitt slått av +Name[pl]=Klawisz blokujący został wyłączony +Name[pt]=Uma tecla de bloqueio ficou inactiva +Name[pt_BR]=Uma tecla de bloqueio foi desativada +Name[ro]=O tastă de blocare a fost deactivată +Name[ru]=Деактивирована клавиша переключения режимов +Name[se]=Lohkadanboallu ii leat šat aktiivalaš +Name[sk]=Zamykací kláves je neaktívny. +Name[sl]=Zaklenilna tipka je onemogočena +Name[sr]=Тастер за закључавање је деактивиран +Name[sr@Latn]=Taster za zaključavanje je deaktiviran +Name[sv]=En låstangent har inaktiverats +Name[tg]=Калиди қулф ғайри фаъол карда буд +Name[th]=ปุ่มล็อคถูกปิด +Name[uk]=Клавішу блокування деактивовано +Name[vi]=Một phím khoá đã bị tắt +Name[wa]=Ene tape po serer a stî dismetowe +Name[zh_CN]=锁定键现已非激活 +Name[zh_TW]=鎖定鍵已取消作用 +Comment=A lock key (e.g. Caps Lock or Num Lock) has changed its state and is now inactive +Comment[af]='n Sluit sleutel (bv. Caps Lock of Num Lock) se toestand het verander en is nou onaktief +Comment[be]=Клавіша блакіроўкі (напр. Caps Lock ці Num Lock) змяніла свой стан і зрабілася неактыўнай +Comment[bg]=Заключващ клавиш (Caps Lock или Num Lock) си промени състоянието и е неактивен сега +Comment[bs]=Tipka za zaključavanje (npr. Caps Lock ili Num Lock) je promijenila stanje i sada je neaktivna +Comment[ca]=Una tecla de bloqueig (p.ex. BloqMajús o BloqNum) ha canviat d'estat i ara està inactiva +Comment[cs]=Klávesa zámku (např. Caps Lock nebo Num Lock) změnila svůj stav a je nyní aktivní +Comment[csb]=Klawisza blokadë (np. Caps Lock czë Num Lock) zmieniła stón ë nie je terô aktiwnô +Comment[da]=En låsetast (f.eks., Caps Lock eller Num Lock) har ændret sin tilstand og er nu inaktiv +Comment[de]=Eine Feststelltaste (z. B. die Hochstelltaste oder Num-Lock) hat ihren Status geändert und ist nun inaktiv +Comment[el]=Ένα πλήκτρο κλειδώματος (π.χ. Caps Lock ή Num Lock) άλλαξε κατάσταση και είναι τώρα ανενεργό +Comment[eo]=baskula klavo (ekz. majuskla baskulo aŭ nombra baskulo) ŝanĝis staton, kaj jam ne estas aktiva +Comment[es]=Una tecla de bloqueo (p. ej., Bloq Mayús o Bloq Num) ha cambiado su estado y ahora está inactiva +Comment[et]=Lukustusklahv (nt. Caps Lock või Num Lock) muutis oma seisundit ning on nüüd mitteaktiivne +Comment[eu]=Tekla blokeatzaile bat (hau da, blok. maius. edo blok. zenb.) egoeraz aldatu da eta orain ez da aktiboa +Comment[fa]=یک کلید قفل )مثلاً، قفل تبدیل یا قفل اعداد( وضعیت خود را تغییر داده و اکنون غیرفعال می‌باشد +Comment[fi]=Lukitusnäppäin (esim. CapsLock tai NumLock) on vaihtanut tilaansa ja ei ole enää aktiivinen +Comment[fr]=L'état d'une touche de verrouillage (ex : Verr. Maj ou Verr. Num.) est modifié et elle est maintenant inactive +Comment[fy]=De tastân fan in beskoatteltoets (sa as kaptaalskoattel of Nûm skoattel) is wizige en is no ynaktyf. +Comment[gl]=Unha tecla de bloqueo (ex., Bloq Maius ou Bloq Num) mudou de estado e agora está inactiva +Comment[he]=מקש ננעל (למשל Caps Lock או Num Lock) שינה את מצבו והוא כעת לא פעיל (כבוי) +Comment[hr]=Tipka zaključavanja (npr. CapsLock ili NumLock) promijenila je svoje stanje i sad nije aktivna +Comment[hu]=Egy zároló billentyű (pl. a Caps Lock vagy a Num Lock) állapota inaktívvá vált +Comment[is]=Læsilykill (Caps Lock eða Num Lock) hefur breytt um stöðu og er nú óvirkur +Comment[it]=Un tasto di blocco (es. Bloc Maiusc o Bloc Num) ha cambiato stato e adesso è inattivo +Comment[ja]=ロックキー (Caps Lock や Num Lock など) の状態が変更され、非アクティブになりました +Comment[kk]=Қосқыш перне (Caps Lock я Num Lock) күйін өзгертіп, енді белсенді емес +Comment[km]=គ្រាប់​ចុច​ចាក់សោ (ឧ. ប្តូរ​ជាប់ ឬ Num Lock) បាន​ផ្លាស់ប្តូរ​សភាព​របស់​វា ហើយ ឥឡូវ​នេះ​វាអសកម្ម +Comment[ko]=Caps Lock이나 Num Lock 키 같은 잠금 키의 상태가 바뀌었고 현재 비활성화됨 +Comment[lt]=Užrakto klavišo (pvz., Didž(Caps Lock) arba Sk(Num Lock)) būsena pakito ir jis dabar - neaktyvus +Comment[mk]=Некое копче за заклучување (пр. Caps Lock или Num Lock) си ја смени состојбата и сега е неактивно +Comment[nb]=En låsetast (f.eks. «Caps Lock» eller «Num lock») har endret status og er nå skrudd av. +Comment[nds]=En Faststelltast (t.B. Tallenrast oder Grootschrieventast) hett den Tostand ännert un is nu inaktiv +Comment[ne]=एउटा ताल्चा लगाउने कुञ्जीले (जस्तै: Caps Lock वा Num Lock) यसको स्थिति परिवर्तन गरेको छ र अहिले निस्क्रिय छ +Comment[nl]=De status van een vergrendeltoets (zoals Caps Lock of Num Lock) is gewijzigd en is nu inactief +Comment[nn]=Ein låsetast (t.d. «Caps Lock» eller «Num lock») har endra statusen og er no slått av +Comment[pl]=Klawisz blokujący (np. Caps Lock lub Num Lock) zmienił stan i jest teraz wyłączony +Comment[pt]=Uma tecla de bloqueio (p.ex., o Caps Lock ou o Num Lock) mudou o seu estado e ficou inactiva +Comment[pt_BR]=Uma tecla de bloqueio (p.ex. Caps Lock ou Num Lock) mudou seu estado e agora está inativa +Comment[ro]=O tastă de blocare (cur ar fi Caps Lock sau Num Lock) și-a schimbat starea și este acum inactivă +Comment[ru]=Деактивирована клавиша переключения режимов (например, Caps Lock или Num Lock) +Comment[sk]=Zamykací kláves (napr. Caps Lock alebo Num Lock) zmenil svoj stav a je teraz neaktívny +Comment[sl]=Zaklenilna tipka (npr. Caps Lock ali Num Lock) je spremenila svoje stanje in je sedaj onemogočena +Comment[sr]=Тастер за закључавање (нпр. Caps Lock или Num Lock) је променио стање и више није активан +Comment[sr@Latn]=Taster za zaključavanje (npr. Caps Lock ili Num Lock) je promenio stanje i više nije aktivan +Comment[sv]=En låstangent (t.ex. Caps Lock eller Num Lock) har ändrat tillstånd och är nu inaktiv +Comment[tg]=Калиди қулф (мисоли, Caps Lock ё Num Lock) вазъияти худ иваз кард ва ҳозир ғайри фаъол аст +Comment[th]=มีการเปลี่ยนสถานะปุ่มล็อค (เช่น Caps Lock หรือ Num Lock) และขณะนี้ปิดการใช้งาน +Comment[uk]=Клавіша блокування (напр., Caps Lock або Num Lock) змінила свій стан і тепер неактивна +Comment[vi]=Một phím khoá (như Caps Lock hay Num Lock) đã thay đổi trạng thái và đã bị tắt +Comment[wa]=Ene tape po serer (metans CAPS LOCK ou NUM LOCK) a candjî d' esta et est asteure dismetowe +Comment[zh_CN]=锁定键(如 Caps Lock 或 Num Lock)更改了其状态,现已非激活 +Comment[zh_TW]=鎖定按鍵(例, 大寫鎖定或數字鎖定)已改變其狀態且目前為非作用中 +default_sound=KDE_Click.wav +default_presentation=0 +nopresentation=236 + +[stickykeys] +Name=Sticky keys has been enabled or disabled +Name[af]=Sticky sleutels was geaktiveer of gedeaktiveer +Name[be]=Ліпучыя клавішы былі ўключаны ці выключаны +Name[bg]=Залепващите клавиши бяха включени или изключени +Name[bs]=Ljepljive tipke su uključene ili isključene +Name[ca]=S'han habilitat o deshabilitat les tecles apegaloses +Name[cs]=Sticky klávesy byly povoleny nebo zakázány +Name[csb]=Klawisze przëlepieniô òstałë włączoné abò wëłączoné +Name[da]=Klæbrige taster er aktiveret eller deaktiveret +Name[de]=Klebende Tasten wurden aktiviert oder deaktiviert +Name[el]=Τα κολλημένα πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Name[eo]=Fiksaj klavoj validiĝis aŭ malvalidiĝis +Name[es]=Se han activado o desactivado las teclas pegajosas +Name[et]=Kleepuvad klahvid on keelatud või lubatud +Name[eu]=Tekla itsakorrak gaitu edo desgaitu dira +Name[fa]=کلیدهای چسبناک، فعال یا غیرفعال شده‌اند +Name[fi]=Tahmeat näppäimet on otettu käyttöön tai poistettu käytöstä +Name[fr]=L'automaintien des touches a été activé ou désactivé +Name[fy]=Plakkende toetsen binne aktivearre of deaktivearre +Name[gl]=As teclas pegadias foron ou activadas ou desactivadas +Name[he]=מקשים דביקים הופעלו או בוטלו +Name[hr]=Ljepljive tipke su omogućene ili onemogućene +Name[hu]=Ragadós billentyűk átkapcsolva +Name[is]=Slökkt eða kveikt hefur verið á klístruðum lyklum +Name[it]=La permanenza dei tasti è stata abilitata o disabilitata +Name[ja]=スティッキーキーを有効または無効にしました +Name[kk]=Жабысқақ пернелер рұксат етілген не етілмеген +Name[km]=គ្រាប់ចុច​ស្អិត​ត្រូវ​បានអនុញ្ញាត ឬ មិន​អនុញ្ញាត +Name[ko]=끈적이 키가 활성화되거나 비활성화됨 +Name[lt]=Lipnūs klavišai buvo įgalinti arba išjungti +Name[mk]=„Лепливи копчиња“ е овозможено или оневозможено +Name[nb]=Faste valgtaster er blitt skrudd av eller på +Name[nds]=De Metood "Backige Tasten" wöör an- oder utschalt +Name[ne]=टाँसिने कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Name[nl]=Plakkende toetsen zijn geactiveerd of gedeactiveerd +Name[nn]=Faste valtastar er blitt slått av eller på +Name[pl]=Lepkie klawisze zostały włączone lub wyłączone +Name[pt]=As teclas fixas ficaram activas ou inactivas +Name[pt_BR]=Teclas de aderência foram habilitadas ou desabilitadas +Name[ro]=Taste lipicioase (Sticky keys) au fost activate sau deactivate +Name[ru]=Включены или отключены "залипающие" клавиши +Name[sk]=Lepkavé klávesy zmenili svoj stav. +Name[sl]=Lepljive tipke so spremenile stanje +Name[sr]=Лепљиви тастери су укључени или искључени +Name[sr@Latn]=Lepljivi tasteri su uključeni ili isključeni +Name[sv]=Klistriga tangenter har aktiverats eller inaktiverats +Name[tg]=Калидҳои часпак фаъол ё ғайрифаъол мебошад +Name[th]=ปุ่มติดหนึบได้ถูกใช้งาน หรือ ถูกปิด +Name[uk]=Липкі клавіші було увімкнено або вимкнено +Name[vi]=Các phím dính đã được bật hoặc đã được tắt +Name[wa]=Les aclapantès tapes ont stî metowes en alaedje ou dismetowes +Name[zh_CN]=启用或禁用了粘滞键 +Name[zh_TW]=相黏鍵已啟用或停用 +Comment=Sticky keys has been enabled or disabled +Comment[af]=Sticky sleutels was geaktiveer of gedeaktiveer +Comment[be]=Ліпучыя клавішы былі ўключаны ці выключаны +Comment[bg]=Залепващите клавиши бяха включени или изключени +Comment[bs]=Ljepljive tipke su uključene ili isključene +Comment[ca]=S'han habilitat o deshabilitat les tecles apegaloses +Comment[cs]=Sticky klávesy byly povoleny nebo zakázány +Comment[csb]=Klawisze przëlemieniô òstałë włączoné abò wëłączoné +Comment[da]=Klæbrige taster er aktiveret eller deaktiveret +Comment[de]=Die Funktion "Klebende Tasten" wurde aktiviert bzw. deaktiviert +Comment[el]=Τα κολλημένα πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Comment[eo]=Fiksaj klavoj estas aktivigitaj aŭ malaktivigitaj +Comment[es]=Se han activado o desactivado las teclas pegajosas +Comment[et]=Kleepuvad klahvid on keelatud või lubatud +Comment[eu]=Tekla itsakorrak gaitu edo desgaitu dira +Comment[fa]=کلیدهای چسبناک، فعال یا غیرفعال شده‌اند +Comment[fi]=Tahmeat näppäimet on otettu käyttöön tai poistettu käytöstä +Comment[fr]=L'automaintien des touches a été activé ou désactivé +Comment[fy]=Plakkende toetsen binne aktivearre of deaktivearre +Comment[gl]=As teclas pegadias foron ou activadas ou desactivadas +Comment[he]=מקשים דביקים הופעלו או בוטלו +Comment[hr]=Ljepljive tipke su omogućene ili onemogućene +Comment[hu]=A ragadós billentyűk használatát ki- vagy bekapcsolták +Comment[is]=Slökkt eða kveikt hefur verið á klístruðum lyklum +Comment[it]=La permanenza dei tasti è stata abilitata o disabilitata +Comment[ja]=スティッキーキーを有効または無効にしました +Comment[kk]=Жабысқақ пернелер рұксат етілген не етілмеген +Comment[km]=គ្រាប់ចុច​ស្អិត​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Comment[ko]=끈적이 키가 활성화되거나 비활성화됨 +Comment[lt]=Lipnūs klavišai buvo įjungti arba išjungti +Comment[mk]=„Лепливи копчиња“ е овозможено или оневозможено +Comment[nb]=Faste valgtaster er blitt skrudd av eller på +Comment[nds]=De Metood "Backige Tasten" wöör an- oder utschalt +Comment[ne]=टाँसिने कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Comment[nl]=Plakkende toetsen zijn geactiveerd of gedeactiveerd +Comment[nn]=Faste valtaster er blitt slått av eller på +Comment[pl]=Lepkie klawisze zostały włączone lub wyłączone +Comment[pt]=As teclas fixas ficaram activas ou inactivas +Comment[pt_BR]=Teclas de aderência foram habilitadas ou desabilitadas +Comment[ro]=Taste lipicioase (Sticky keys) au fost activate sau deactivate +Comment[ru]=Включены или отключены "залипающие" клавиши +Comment[sk]=Lepkavé klávesy zmenili svoj stav. +Comment[sl]=Lepljive tipke so spremenile stanje in so sedaj omogočene ali onemogočene +Comment[sr]=Лепљиви тастери су укључени или искључени +Comment[sr@Latn]=Lepljivi tasteri su uključeni ili isključeni +Comment[sv]=Klistriga tangenter har aktiverats eller inaktiverats +Comment[tg]=Калидҳои часпак фаъол ё ғайрифаъол мебошад +Comment[th]=ปุ่มติดหนึบได้ถูกใช้งาน หรือ ถูกปิด +Comment[uk]=Липкі клавіші було увімкнено або вимкнено +Comment[vi]=Các phím dính đã được bật hoặc đã được tắt +Comment[wa]=Les aclapantès tapes ont stî metowes en alaedje ou dismetowes +Comment[zh_CN]=启用或禁用了粘滞键 +Comment[zh_TW]=相黏鍵已經被啟用或停用 +default_sound=KDE_Click.wav +default_presentation=16 +nopresentation=236 + +[slowkeys] +Name=Slow keys has been enabled or disabled +Name[af]=Stadige sleutels was geaktiveer of gedeaktiveer +Name[be]=Марудныя клавішы былі ўключаны ці выключаны +Name[bg]=Бавните клавиши бяха включени или изключени +Name[bs]=Spore tipke su uključene ili isključene +Name[ca]=S'han habilitat o deshabilitat les tecles lentes +Name[cs]=Pomalé klávesy byly povoleny nebo zakázány +Name[csb]=Pòwólné klawisze òstałë włączoné abò wëłączone +Name[da]=Langsomme taster er aktiveret eller deaktiveret +Name[de]=Langsame Tasten wurden aktiviert oder deaktiviert +Name[el]=Τα αργά πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Name[eo]=Malrapidklavoj validiĝis aŭ malvalidiĝis +Name[es]=Se han activado o desactivado las teclas lentas +Name[et]=Aeglased klahvid on keelatud või lubatud +Name[eu]=Tekla motelak gaitu edo desgaitu dira +Name[fa]=کلیدهای کند، فعال یا غیرفعال شده‌اند +Name[fi]=Hitaat näppäimet on otettu käyttöön tai poistettu käytöstä +Name[fr]=Les touches lentes ont été activées ou désactivées +Name[fy]=Trage toetsen binne aktivearre of ûntaktivearre +Name[gl]=As teclas lentas foron ou activadas ou desactivadas +Name[he]=מקשים אטיים הופעלו או בוטלו +Name[hr]=Spore tipke su omogućene ili onemogućene +Name[hu]=A lassú billentyűk használata átkapcsolva +Name[is]=Slökkt eða kveikt hefur verið á hægum lyklum +Name[it]=Il rallentamento dei tasti è stato abilitato o disabilitato +Name[ja]=スローキーを有効または無効にしました +Name[kk]=Баяу пернелер рұксат етілген не етілмеген +Name[km]=គ្រាប់ចុច​យឺត​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Name[ko]=느린 키가 활성화되거나 비활성화됨 +Name[lt]=Lėti klavišai buvo įgalinti arba išjungti +Name[mk]=„Спори копчиња“ е овозможено или оневозможено +Name[nb]=Trege taster er blitt skrudd av eller på +Name[nds]=De Metood "Langsam Tasten" wöör an- oder utschalt +Name[ne]=ढिलो कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Name[nl]=Langzame toetsten is geactiveerd of gedeactiveerd +Name[nn]=Trege tastar er blitt slått av eller på +Name[pl]=Powolne klawisze zostały włączone lub wyłączone +Name[pt]=As teclas lentas ficaram activas ou inactivas +Name[pt_BR]=Teclas lentas foram habilitadas ou desabilitadas +Name[ro]=Taste lente (Slow keys) au fost activate sau deactivate +Name[ru]=Включены или отключены замедленные клавиши +Name[sk]=Pomalé klávesy zmenili svoj stav. +Name[sl]=Počasne tipke so spremenile stanje +Name[sr]=Спори тастери су укључени или искључени +Name[sr@Latn]=Spori tasteri su uključeni ili isključeni +Name[sv]=Långsamma tangenter har aktiverats eller inaktiverats +Name[tg]=калиди сусткор фаъол ё ғайрифаъол мебошад +Name[th]=ปุ่มชะลอได้ถูกใช้งาน หรือถูกปิด +Name[uk]=Повільні клавіші було увімкнено або вимкнено +Name[vi]=Các phím chậm đã được bật hoặc đã được tắt +Name[wa]=Les londjinnès tapes ont stî metowes en alaedje ou dismetowes +Name[zh_CN]=启用或禁用了筛选键 +Name[zh_TW]=延遲鍵已啟用或停用 +Comment=Slow keys has been enabled or disabled +Comment[af]=Stadige sleutels was geaktiveer of gedeaktiveer +Comment[be]=Марудныя клавішы былі ўключаны ці выключаны +Comment[bg]=Бавните клавиши бяха включени или изключени +Comment[bs]=Spore tipke su uključene ili isključene +Comment[ca]=S'han habilitat o deshabilitat les tecles lentes +Comment[cs]=Pomalé klávesy byly povoleny nebo zakázány +Comment[csb]=Pòwólné klawisze òstałë włączoné abò wëłączone +Comment[da]=Langsomme taster er aktiveret eller deaktiveret +Comment[de]=Die Funktion "Langsame Tasten" wurde aktiviert bzw. deaktiviert +Comment[el]=Τα αργά πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Comment[eo]=Malrapidklavoj estas aktivigitaj aŭ malaktivigitaj +Comment[es]=Se han activado o desactivado las teclas pegajosas +Comment[et]=Aeglased klahvid on keelatud või lubatud +Comment[eu]=Tekla motelak gaitu edo desgaitu dira +Comment[fa]=کلیدهای چسبناک، فعال یا غیرفعال شده‌اند +Comment[fi]=Hitaat näppäimet on otettu käyttöön tai poistettu käytöstä +Comment[fr]=Les touches lentes ont été activées ou désactivées +Comment[fy]=Trage toetsen binne aktivearre of ûntaktivearre +Comment[gl]=As teclas lentas foron ou activadas ou desactivadas +Comment[he]=מקשים אטיים הופעלו או בוטלו +Comment[hr]=Spore tipke su omogućene ili onemogućene +Comment[hu]=A lassú billentyűk használatát ki- vagy bekapcsolták +Comment[is]=Slökkt eða kveikt hefur verið á hægum lyklum +Comment[it]=Il rallentamento dei tasti è stato abilitato o disabilitato +Comment[ja]=スローキーを有効または無効にしました +Comment[kk]=Баяу пернелер рұксат етілген не етілмеген +Comment[km]=គ្រាប់ចុច​យឺត​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Comment[ko]=느린 키가 활성화되거나 비활성화됨 +Comment[lt]=Lėti klavišai buvo įgalinti arba išjungti +Comment[mk]=„Спори копчиња“ е овозможено или оневозможено +Comment[nb]=Trege taster er blitt skrudd av eller på +Comment[nds]=De Metood "Langsam Tasten" wöör an- oder utschalt +Comment[ne]=ढिलो कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Comment[nl]=Langzame toetsten is geactiveerd of gedeactiveerd +Comment[nn]=Trege tastar er blitt slått av eller på +Comment[pl]=Powolne klawisze zostały włączone lub wyłączone +Comment[pt]=As teclas lentas ficaram activas ou inactivas +Comment[pt_BR]=Teclas lentas foram habilitadas ou desabilitadas +Comment[ro]=Taste lente (Slow keys) au fost activate sau deactivate +Comment[ru]=Включены или отключены замедленные клавиши +Comment[sk]=Pomalé klávesy zmenili svoj stav. +Comment[sl]=Počasne tipke so spremenile stanje in so sedaj omogočene ali onemogočene +Comment[sr]=Спори тастери су укључени или искључени +Comment[sr@Latn]=Spori tasteri su uključeni ili isključeni +Comment[sv]=Långsamma tangenter har aktiverats eller inaktiverats +Comment[tg]=Калиди сусткор фаъол ё ғайрифаъол мебошад +Comment[th]=ปุ่มชะลอได้ถูกใช้งาน หรือ ถูกปิด +Comment[uk]=Повільні клавіші було увімкнено або вимкнено +Comment[vi]=Các phím chậm đã được bật hoặc đã được tắt +Comment[wa]=Les londjinnès tapes ont stî metowes en alaedje ou dismetowes +Comment[zh_CN]=启用或禁用了筛选键 +Comment[zh_TW]=延遲鍵已經被啟用或停用 +default_sound=KDE_Click.wav +default_presentation=16 +nopresentation=236 + +[bouncekeys] +Name=Bounce keys has been enabled or disabled +Name[be]="Рухомыя"клавішы ўключаны ці выключаны +Name[bg]=Подскачащите клавиши бяха включени или изключени +Name[bs]=Odbijanje tipki je uključeno ili isključeno +Name[ca]=S'han habilitat o deshabilitat les tecles de repetició +Name[cs]=Vícenásobné opakování kláves bylo povoleno nebo zakázáno +Name[csb]=Òdbijające klawisze òstałë włączoné abò wëłączoné +Name[da]=Elastiske taster er aktiveret eller deaktiveret +Name[de]=Zurückschnellende Tasten wurden aktiviert oder deaktiviert +Name[el]=Τα πλήκτρα αναπήδησης ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Name[eo]=Prokrastaj klavoj validiĝis aŭ malvalidiĝis +Name[es]=Se han activado o desactivado las teclas de rebote +Name[et]=Põrkavad klahvid on keelatud või lubatud +Name[eu]=Errebotatze-teklak gaitu edo desgaitu dira +Name[fa]=کلیدهای واگشت، فعال یا غیرفعال شده‌اند +Name[fi]=Kimpoavat näppäimet on otettu käyttöön tai poistettu käytöstä +Name[fr]=Les touches non répétées ont été activées ou désactivées +Name[fy]=Stuiterjende toetsen binne aktivearre of ûntaktivearre +Name[gl]=As teclas de rebote foron ou activadas ou desactivadas +Name[he]=מקשים קפיציים הופעלו או בוטלו +Name[hr]=Obijanje tipki je omogućeno ili onemogućeno +Name[hu]=A visszaugró billentyűk átkapcsolva +Name[is]=Slökkt eða kveikt hefur verið á skoppandi lyklum +Name[it]=La pressione ravvicinata dei tasti è stata abilitata o disabilitata +Name[ja]=バウンスキーを有効または無効にしました +Name[kk]=Қалшылға қарсы пернелер рұксат етілген не етілмеген +Name[km]=គ្រាប់ចុច​លោត​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Name[ko]=튕김 키가 활성화되거나 비활성화됨 +Name[lt]=Tamprūs klavišai buvo įgalinti arba išjungti +Name[mk]=„Скокачки копчиња“ е овозможено или оневозможено +Name[nb]=Filtertaster er blitt skrudd av eller på +Name[nds]=De Metood "Springen Tasten" wöör an- oder utschalt +Name[ne]=कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Name[nl]=Stuiterende toetsen is geactiveerd of gedeactiveerd +Name[nn]=Filtertastar er blitt slått av eller på +Name[pl]=Odbijające klawisze zostały włączone lub wyłączone +Name[pt]=As teclas sonoras ficaram activas ou inactivas +Name[pt_BR]=Teclas lentas foram habilitadas ou desabilitadas +Name[ro]=Taste săltărețe (Bounce keys) au fost activate sau deactivate +Name[ru]=Включены или отключены "прыгающие" клавиши +Name[sk]=Bounce klávesy zmenili svoj stav. +Name[sl]=Odskočne tipke so spremenile stanje +Name[sr]=Одскачући тастери су укључени или искључени +Name[sr@Latn]=Odskačući tasteri su uključeni ili isključeni +Name[sv]=Studsande tangenter har aktiverats eller inaktiverats +Name[tg]=Калидҳои бонус фаъол ё ғайрифаъол мебошанд +Name[th]=ปุ่มสะท้อน ได้ถูกใช้งาน หรือถูกปิด +Name[uk]=Пружні клавіші було увімкнено або вимкнено +Name[vi]=Các phím nảy đã được bật hoặc đã được tắt +Name[wa]=Les tapes di ridjiblaedje ont stî metowes en alaedje ou dismetowes +Name[zh_CN]=启用或禁用了撞击键 +Name[zh_TW]=彈跳鍵已啟用或停用 +Comment=Bounce keys has been enabled or disabled +Comment[af]=Hop sleutels was geaktiveer of gedeaktiveer +Comment[be]="Рухомыя"клавішы ўключаны ці выключаны +Comment[bg]=Подскачащите клавиши бяха включени или изключени +Comment[bs]=Odbijanje tipki je uključeno ili isključeno +Comment[ca]=S'han habilitat o deshabilitat les tecles de repetició +Comment[cs]=Vícenásobné opakování kláves bylo povoleno nebo zakázáno +Comment[csb]=Òdbijające klawisze òstałë wëłączoné abò włączoné +Comment[da]=Elastiske taster er aktiveret eller deaktiveret +Comment[de]=Zurückschnellende Tasten wurden aktiviert oder deaktiviert +Comment[el]=Τα πλήκτρα αναπήδησης ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Comment[eo]=Prokrastaj klavoj estas aktivigitaj aŭ malaktivigitaj +Comment[es]=Se han activado o desactivado las teclas de rebote +Comment[et]=Põrkavad klahvid on keelatud või lubatud +Comment[eu]=Errebotatze-teklak gaitu edo desgaitu dira +Comment[fa]=کلیدهای واگشت، فعال یا غیرفعال شده‌اند +Comment[fi]=Kimpoavat näppäimet on otettu käyttöön tai poistettu käytöstä +Comment[fr]=Les touches non répétées ont été activées ou désactivées +Comment[fy]=Stuiterjende toetsen binne aktivearre of ûntaktivearre +Comment[gl]=As teclas de rebote foron ou activadas ou desactivadas +Comment[he]=מקשים קפיציים הופעלו או בוטלו +Comment[hr]=Obijanje tipki je omogućeno ili onemogućeno +Comment[hu]=A visszaugró billentyűk használatát ki- vagy bekapcsolták +Comment[is]=Slökkt eða kveikt hefur verið á skoppandi lyklum +Comment[it]=La pressione ravvicinata dei tasti è stata abilitata o disabilitata +Comment[ja]=バウンスキーを有効または無効にしました +Comment[kk]=Қалшылға қарсы пернелер рұксат етілген не етілмеген +Comment[km]=គ្រាប់ចុច​លោត​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Comment[ko]=튕김 키가 활성화되거나 비활성화됨 +Comment[lt]=Tamprūs klavišai buvo įgalinti arba išjungti +Comment[mk]=„Скокачки копчиња“ е овозможено или оневозможено +Comment[nb]=Filtertaster er blitt skrudd av eller på +Comment[nds]=De Metood "Springen Tasten" wöör an- oder utschalt +Comment[ne]=उफ्रिने कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Comment[nl]=Stuiterende toetsen is geactiveerd of gedeactiveerd +Comment[nn]=Filtertastar er blitt slått av eller på +Comment[pl]=Powolne klawisze zostały włączone lub wyłączone +Comment[pt]=As teclas sonoras ficaram activas ou inactivas +Comment[pt_BR]=Teclas lentas foram habilitadas ou desabilitadas +Comment[ro]=Taste săltărețe (Bounce keys) au fost activate sau deactivate +Comment[ru]=Включены или отключены "прыгающие" клавиши +Comment[sk]=Bounce klávesy zmenili svoj stav. +Comment[sl]=Odskočne tipke so spremenile stanje in so sedaj omogočene ali onemogočene +Comment[sr]=Одскачући тастери су укључени или искључени +Comment[sr@Latn]=Odskačući tasteri su uključeni ili isključeni +Comment[sv]=Studsande tangenter har aktiverats eller inaktiverats +Comment[tg]=Калидҳои бонус фаъол ё ғайрифаъоланд +Comment[th]=ปุ่มสะท้อนได้ถูกใช้งาน หรือ ถูกปิด +Comment[uk]=Пружні клавіші було увімкнено або вимкнено +Comment[vi]=Các phím nảy đã được bật hoặc đã được tắt +Comment[wa]=Les tapes di ridjiblaedje ont stî metowes en alaedje ou dismetowes +Comment[zh_CN]=启用或禁用了撞击键 +Comment[zh_TW]=彈跳鍵已經被啟用或停用 +default_sound=KDE_Click.wav +default_presentation=16 +nopresentation=236 + +[mousekeys] +Name=Mouse keys has been enabled or disabled +Name[af]=Muis sleutels was geaktiveer of gedeaktiveer +Name[be]=Кнопкі мышы былі ўключаны ці выключаны +Name[bg]=Клавишите за мишката бяха включени или изключени +Name[bs]=Tipke miša su uključene ili isključene +Name[ca]=S'han habilitat o deshabilitat les tecles de ratolí +Name[cs]=Klávesy myši byly povoleny nebo zakázány +Name[csb]=Klawisze mëszë òstałë włączoné abò wëłączoné +Name[da]=Musetaster er aktiveret eller deaktiveret +Name[de]=Maustasten wurden aktiviert oder deaktiviert +Name[el]=Τα πλήκτρα ποντικιού ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Name[eo]=Musklavoj validiĝis aŭ malvalidiĝis +Name[es]=Se han activado o desactivado las teclas de ratón +Name[et]=Hiire klahvid on keelatud või lubatud +Name[eu]=Saguaren teklak gaitu edo desgaitu egin dira +Name[fa]=کلیدهای موشی، فعال یا غیرفعال شده‌اند +Name[fi]=Hiiren näppäimet on otettu käyttöön tai poistettu käytöstä +Name[fr]=Les touches gérant la souris ont été activées ou désactivées +Name[fy]=Mûstoetsen binne aktivearre of ûntaktivearre +Name[gl]=As teclas de rato foron ou activadas ou desactivadas +Name[he]=מקשי העכבר בוטלו או הופעלו +Name[hr]=Mišolike tipke su omogućene ili onemogućene +Name[hu]=Az egérmozgató billentyűk átkapcsolva +Name[is]=Slökkt eða kveikt hefur verið á músarlyklum +Name[it]=Il mouse da tastiera è stato abilitato o disabilitato +Name[ja]=マウスキーを有効または無効にしました +Name[kk]=Тышқанды жылжытатын пернелер рұксат етілген не етілмеген +Name[km]=គ្រាប់​ចុច​កណ្តុរ​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Name[ko]=마우스 키가 활성화되거나 비활성화됨 +Name[lt]=Pelės klavišai buvo įgalinti arba išjungti +Name[mk]=„Копчиња на глушецот“ е овозможено или оневозможено +Name[nb]=Musetaster er blitt skrudd av eller på +Name[nds]=De Metood "Muustasten" wöör an- oder utschalt +Name[ne]=माउस कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Name[nl]=Muistoetsen is geactiveerd of gedeactiveerd +Name[nn]=Musetastar er blitt slått av eller på +Name[pa]=ਮਾਊਸ ਸਵਿੱਚਾਂ ਨੂੰ ਯੋਗ ਜਾਂ ਅਯੋਗ ਕੀਤਾ ਗਿਆ ਹੈ +Name[pl]=Klawisze myszy zostały włączone lub wyłączone +Name[pt]=O rato por teclado ficou activo ou inactivo +Name[pt_BR]=Teclas do mouse foram habilitadas ou desabilitadas +Name[ro]=Taste de maus au fost activate sau deactivate +Name[ru]=Нажаты или отжаты клавиши мыши +Name[sk]=Mouse klávesy zmenili svoj stav. +Name[sl]=Miškine tipke so spremenile stanje +Name[sr]=Тастери за миш су укључени или искључени +Name[sr@Latn]=Tasteri za miš su uključeni ili isključeni +Name[sv]=Mustangenter har aktiverats eller inaktiverats +Name[tg]=Тугмачаҳои мушуак фаъол ё ғайрифаъол мебошанд +Name[th]=ปุ่มแทนเมาส์ได้ถูกใช้งาน หรือ ถูกปิด +Name[uk]=Клавіші мишки було увімкнено або вимкнено +Name[vi]=Các phím chuột đã được bật hoặc đã được tắt +Name[wa]=Les tapes di sori ont stî metowes en alaedje ou dismetowes +Name[zh_CN]=启用或禁用了鼠标键 +Name[zh_TW]=滑鼠按鍵已啟用或停用 +Comment=Mouse keys has been enabled or disabled +Comment[af]=Muis sleutels was geaktiveer of gedeaktiveer +Comment[be]=Кнопкі мышы былі ўключаны ці выключаны +Comment[bg]=Клавишите за мишката бяха включени или изключени +Comment[bs]=Tipke miša su uključene ili isključene +Comment[ca]=S'han habilitat o deshabilitat les tecles de ratolí +Comment[cs]=Klávesy myši byly povoleny nebo zakázány +Comment[csb]=Klawisze mëszë òstałë włączoné abò wëłączoné +Comment[da]=Musetaster er aktiveret eller deaktiveret +Comment[de]=Die Funktion "Maustasten" wurde aktiviert oder deaktiviert +Comment[el]=Τα πλήκτρα ποντικιού ενεργοποιήθηκαν ή απενεργοποιήθηκαν +Comment[eo]=Musklavoj validiĝis aŭ malvalidiĝis +Comment[es]==Se han activado o desactivado las teclas de ratón +Comment[et]=Hiire klahvid on keelatud või lubatud +Comment[eu]=Saguaren teklak gaitu edo desgaitu egin dira +Comment[fa]=کلیدهای موشی، فعال یا غیرفعال شده‌اند +Comment[fi]=Hiiren näppäimet on otettu käyttöön tai poistettu käytöstä +Comment[fr]=Les touches gérant la souris ont été activées ou désactivées +Comment[fy]=Mûstoetsen binne aktivearre of ûntaktivearre +Comment[gl]=As teclas de rato foron ou activadas ou desactivadas +Comment[he]=מקשי העכבר בוטלו או הופעלו +Comment[hr]=Mišolike tipke su omogućene ili onemogućene +Comment[hu]=Az egérmozgató billentyűk használatát ki- vagy bekapcsolták +Comment[is]=Slökkt eða kveikt hefur verið á músarlyklum +Comment[it]=Il mouse da tastiera è stato abilitato o disabilitato +Comment[ja]=マウスキーを有効または無効にしました +Comment[kk]=Тышқанды жылжытатын пернелер рұксат етілген не етілмеген +Comment[km]=គ្រាប់ចុច​កណ្តុរ​ត្រូវ​បាន​អនុញ្ញាត ឬ មិន​អនុញ្ញាត +Comment[ko]=마우스 키가 활성화되거나 비활성화됨 +Comment[lt]=Pelės mygtukai buvo įgalinti arba išjungti +Comment[mk]=„Копчиња на глушецот“ е овозможено или оневозможено +Comment[nb]=Musetaster er blitt skrudd av eller på +Comment[nds]=De Metood "Muustasten" wöör an- oder utschalt +Comment[ne]=माउस कुञ्जीहरू सक्षम वा अक्षम पारिएको छ +Comment[nl]=Muistoetsen is geactiveerd of gedeactiveerd +Comment[nn]=Musetastar er blitt slått av eller på +Comment[pl]=Klawisze myszy zostały włączone lub wyłączone +Comment[pt]=O rato por teclado ficou activo ou inactivo +Comment[pt_BR]=Teclas do mouse foram habilitadas ou desabilitadas +Comment[ro]=Taste de maus au fost activate sau deactivate +Comment[ru]=Нажаты или отжаты клавиши мыши +Comment[sk]=Mouse klávesy zmenili svoj stav. +Comment[sl]=Miškine tipke so spremenile stanje in so sedaj omogočene ali onemogočene +Comment[sr]=Тастери за миш су укључени или искључени +Comment[sr@Latn]=Tasteri za miš su uključeni ili isključeni +Comment[sv]=Mustangenter har aktiverats eller inaktiverats +Comment[tg]=Тугмачаҳои мушуак фаъол ё ғайрифаъол мебошанд +Comment[th]=ปุ่มแทนเมาส์ได้ถูกใช้งาน หรือ ถูกปิด +Comment[uk]=Клавіші мишки було увімкнено або вимкнено +Comment[vi]=Các phím chuột đã được bật hoặc đã được tắt +Comment[wa]=Les tapes di sori ont stî metowes en alaedje ou dismetowes +Comment[zh_CN]=启用或禁用了鼠标键 +Comment[zh_TW]=滑鼠按鍵已經被啟用或停用 +default_sound=KDE_Click.wav +default_presentation=16 +nopresentation=236 diff --git a/kcontrol/access/kaccess.cpp b/kcontrol/access/kaccess.cpp new file mode 100644 index 000000000..5956697b9 --- /dev/null +++ b/kcontrol/access/kaccess.cpp @@ -0,0 +1,896 @@ +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#define XK_MISCELLANY +#define XK_XKB_KEYS +#include + + +#include "kaccess.moc" + +struct ModifierKey { + const unsigned int mask; + const KeySym keysym; + const char *name; + const char *lockedText; + const char *latchedText; + const char *unlatchedText; +}; + +static ModifierKey modifierKeys[] = { + { ShiftMask, 0, "Shift", + I18N_NOOP("The Shift key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Shift key is now active."), + I18N_NOOP("The Shift key is now inactive.") }, + { ControlMask, 0, "Control", + I18N_NOOP("The Ctrl key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Ctrl key is now active."), + I18N_NOOP("The Ctrl key is now inactive.") }, + { 0, XK_Alt_L, "Alt", + I18N_NOOP("The Alt key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Alt key is now active."), + I18N_NOOP("The Alt key is now inactive.") }, + { 0, 0, "Win", + I18N_NOOP("The Win key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Win key is now active."), + I18N_NOOP("The Win key is now inactive.") }, + { 0, XK_Meta_L, "Meta", + I18N_NOOP("The Meta key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Meta key is now active."), + I18N_NOOP("The Meta key is now inactive.") }, + { 0, XK_Super_L, "Super", + I18N_NOOP("The Super key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Super key is now active."), + I18N_NOOP("The Super key is now inactive.") }, + { 0, XK_Hyper_L, "Hyper", + I18N_NOOP("The Hyper key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Hyper key is now active."), + I18N_NOOP("The Hyper key is now inactive.") }, + { 0, 0, "Alt Graph", + I18N_NOOP("The Alt Gr key has been locked and is now active for all of the following keypresses."), + I18N_NOOP("The Alt Gr key is now active."), + I18N_NOOP("The Alt Gr key is now inactive.") }, + { 0, XK_Num_Lock, "Num Lock", + I18N_NOOP("The Num Lock key has been activated."), + "", + I18N_NOOP("The Num Lock key is now inactive.") }, + { LockMask, 0, "Caps Lock", + I18N_NOOP("The Caps Lock key has been activated."), + "", + I18N_NOOP("The Caps Lock key is now inactive.") }, + { 0, XK_Scroll_Lock, "Scroll Lock", + I18N_NOOP("The Scroll Lock key has been activated."), + "", + I18N_NOOP("The Scroll Lock key is now inactive.") }, + { 0, 0, "", "", "", "" } +}; + + +/********************************************************************/ + + +KAccessApp::KAccessApp(bool allowStyles, bool GUIenabled) + : KUniqueApplication(allowStyles, GUIenabled), _artsBellBlocked(false), + overlay(0), wm(0, KWinModule::INFO_DESKTOP) +{ + _activeWindow = wm.activeWindow(); + connect(&wm, SIGNAL(activeWindowChanged(WId)), this, SLOT(activeWindowChanged(WId))); + + artsBellTimer = new QTimer( this ); + connect( artsBellTimer, SIGNAL( timeout() ), SLOT( slotArtsBellTimeout() )); + + features = 0; + requestedFeatures = 0; + dialog = 0; + + initMasks(); + XkbStateRec state_return; + XkbGetState (qt_xdisplay(), XkbUseCoreKbd, &state_return); + unsigned char latched = XkbStateMods (&state_return); + unsigned char locked = XkbModLocks (&state_return); + state = ((int)locked)<<8 | latched; +} + +int KAccessApp::newInstance() +{ + KGlobal::config()->reparseConfiguration(); + readSettings(); + return 0; +} + +void KAccessApp::readSettings() +{ + KConfig *config = KGlobal::config(); + + // bell --------------------------------------------------------------- + + config->setGroup("Bell"); + _systemBell = config->readBoolEntry("SystemBell", true); + _artsBell = config->readBoolEntry("ArtsBell", false); + _artsBellFile = config->readPathEntry("ArtsBellFile"); + _visibleBell = config->readBoolEntry("VisibleBell", false); + _visibleBellInvert = config->readBoolEntry("VisibleBellInvert", false); + QColor def(Qt::red); + _visibleBellColor = config->readColorEntry("VisibleBellColor", &def); + _visibleBellPause = config->readNumEntry("VisibleBellPause", 500); + + // select bell events if we need them + int state = (_artsBell || _visibleBell) ? XkbBellNotifyMask : 0; + XkbSelectEvents(qt_xdisplay(), XkbUseCoreKbd, XkbBellNotifyMask, state); + + // deactivate system bell if not needed + if (!_systemBell) + XkbChangeEnabledControls(qt_xdisplay(), XkbUseCoreKbd, XkbAudibleBellMask, 0); + else + XkbChangeEnabledControls(qt_xdisplay(), XkbUseCoreKbd, XkbAudibleBellMask, XkbAudibleBellMask); + + // keyboard ------------------------------------------------------------- + + config->setGroup("Keyboard"); + + // get keyboard state + XkbDescPtr xkb = XkbGetMap(qt_xdisplay(), 0, XkbUseCoreKbd); + if (!xkb) + return; + if (XkbGetControls(qt_xdisplay(), XkbAllControlsMask, xkb) != Success) + return; + + // sticky keys + if (config->readBoolEntry("StickyKeys", false)) + { + if (config->readBoolEntry("StickyKeysLatch", true)) + xkb->ctrls->ax_options |= XkbAX_LatchToLockMask; + else + xkb->ctrls->ax_options &= ~XkbAX_LatchToLockMask; + if (config->readBoolEntry("StickyKeysAutoOff", false)) + xkb->ctrls->ax_options |= XkbAX_TwoKeysMask; + else + xkb->ctrls->ax_options &= ~XkbAX_TwoKeysMask; + if (config->readBoolEntry("StickyKeysBeep", false)) + xkb->ctrls->ax_options |= XkbAX_StickyKeysFBMask; + else + xkb->ctrls->ax_options &= ~XkbAX_StickyKeysFBMask; + xkb->ctrls->enabled_ctrls |= XkbStickyKeysMask; + } + else + xkb->ctrls->enabled_ctrls &= ~XkbStickyKeysMask; + + // toggle keys + if (config->readBoolEntry("ToggleKeysBeep", false)) + xkb->ctrls->ax_options |= XkbAX_IndicatorFBMask; + else + xkb->ctrls->ax_options &= ~XkbAX_IndicatorFBMask; + + // slow keys + if (config->readBoolEntry("SlowKeys", false)) { + if (config->readBoolEntry("SlowKeysPressBeep", false)) + xkb->ctrls->ax_options |= XkbAX_SKPressFBMask; + else + xkb->ctrls->ax_options &= ~XkbAX_SKPressFBMask; + if (config->readBoolEntry("SlowKeysAcceptBeep", false)) + xkb->ctrls->ax_options |= XkbAX_SKAcceptFBMask; + else + xkb->ctrls->ax_options &= ~XkbAX_SKAcceptFBMask; + if (config->readBoolEntry("SlowKeysRejectBeep", false)) + xkb->ctrls->ax_options |= XkbAX_SKRejectFBMask; + else + xkb->ctrls->ax_options &= ~XkbAX_SKRejectFBMask; + xkb->ctrls->enabled_ctrls |= XkbSlowKeysMask; + } + else + xkb->ctrls->enabled_ctrls &= ~XkbSlowKeysMask; + xkb->ctrls->slow_keys_delay = config->readNumEntry("SlowKeysDelay", 500); + + // bounce keys + if (config->readBoolEntry("BounceKeys", false)) { + if (config->readBoolEntry("BounceKeysRejectBeep", false)) + xkb->ctrls->ax_options |= XkbAX_BKRejectFBMask; + else + xkb->ctrls->ax_options &= ~XkbAX_BKRejectFBMask; + xkb->ctrls->enabled_ctrls |= XkbBounceKeysMask; + } + else + xkb->ctrls->enabled_ctrls &= ~XkbBounceKeysMask; + xkb->ctrls->debounce_delay = config->readNumEntry("BounceKeysDelay", 500); + + // gestures for enabling the other features + _gestures = config->readBoolEntry("Gestures", true); + if (_gestures) + xkb->ctrls->enabled_ctrls |= XkbAccessXKeysMask; + else + xkb->ctrls->enabled_ctrls &= ~XkbAccessXKeysMask; + + // timeout + if (config->readBoolEntry("AccessXTimeout", false)) + { + xkb->ctrls->ax_timeout = config->readNumEntry("AccessXTimeoutDelay", 30)*60; + xkb->ctrls->axt_opts_mask = 0; + xkb->ctrls->axt_opts_values = 0; + xkb->ctrls->axt_ctrls_mask = XkbStickyKeysMask | XkbSlowKeysMask; + xkb->ctrls->axt_ctrls_values = 0; + xkb->ctrls->enabled_ctrls |= XkbAccessXTimeoutMask; + } + else + xkb->ctrls->enabled_ctrls &= ~XkbAccessXTimeoutMask; + + // gestures for enabling the other features + if (_gestures && config->readBoolEntry("AccessXBeep", true)) + xkb->ctrls->ax_options |= XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask; + else + xkb->ctrls->ax_options &= ~(XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask); + + _gestureConfirmation = config->readBoolEntry("GestureConfirmation", true); + + _kNotifyModifiers = config->readBoolEntry("kNotifyModifiers", false); + _kNotifyAccessX = config->readBoolEntry("kNotifyAccessX", false); + + // mouse-by-keyboard ---------------------------------------------- + + config->setGroup("Mouse"); + + if (config->readBoolEntry("MouseKeys", false)) + { + xkb->ctrls->mk_delay = config->readNumEntry("MKDelay", 160); + + // Default for initial velocity: 200 pixels/sec + int interval = config->readNumEntry("MKInterval", 5); + xkb->ctrls->mk_interval = interval; + + // Default time to reach maximum speed: 5000 msec + xkb->ctrls->mk_time_to_max = config->readNumEntry("MKTimeToMax", + (5000+interval/2)/interval); + + // Default maximum speed: 1000 pixels/sec + // (The old default maximum speed from KDE <= 3.4 + // (100000 pixels/sec) was way too fast) + xkb->ctrls->mk_max_speed = config->readNumEntry("MKMaxSpeed", interval); + + xkb->ctrls->mk_curve = config->readNumEntry("MKCurve", 0); + xkb->ctrls->mk_dflt_btn = config->readNumEntry("MKDefaultButton", 0); + + xkb->ctrls->enabled_ctrls |= XkbMouseKeysMask; + } + else + xkb->ctrls->enabled_ctrls &= ~XkbMouseKeysMask; + + features = xkb->ctrls->enabled_ctrls & (XkbSlowKeysMask | XkbBounceKeysMask | XkbStickyKeysMask | XkbMouseKeysMask); + if (dialog == 0) + requestedFeatures = features; + // set state + XkbSetControls(qt_xdisplay(), XkbControlsEnabledMask | XkbMouseKeysAccelMask | XkbStickyKeysMask | XkbSlowKeysMask | XkbBounceKeysMask | XkbAccessXKeysMask | XkbAccessXTimeoutMask, xkb); + + // select AccessX events + XkbSelectEvents(qt_xdisplay(), XkbUseCoreKbd, XkbAllEventsMask, XkbAllEventsMask); + + if (!_artsBell && !_visibleBell && !_gestureConfirmation + && !_kNotifyModifiers && !_kNotifyAccessX) { + + // We will exit, but the features need to stay configured + uint ctrls = XkbStickyKeysMask | XkbSlowKeysMask | XkbBounceKeysMask | XkbMouseKeysMask | XkbAudibleBellMask | XkbControlsNotifyMask; + uint values = xkb->ctrls->enabled_ctrls & ctrls; + XkbSetAutoResetControls(qt_xdisplay(), ctrls, &ctrls, &values); + exit(0); + } else { + // reset them after program exit + uint ctrls = XkbStickyKeysMask | XkbSlowKeysMask | XkbBounceKeysMask | XkbMouseKeysMask | XkbAudibleBellMask | XkbControlsNotifyMask; + uint values = XkbAudibleBellMask; + XkbSetAutoResetControls(qt_xdisplay(), ctrls, &ctrls, &values); + } + + delete overlay; + overlay = 0; +} + +static int maskToBit (int mask) { + for (int i = 0; i < 8; i++) + if (mask & (1 << i)) + return i; + return -1; +} + +void KAccessApp::initMasks() { + for (int i = 0; i < 8; i++) + keys [i] = -1; + state = 0; + + for (int i = 0; strcmp (modifierKeys[i].name, "") != 0; i++) { + int mask = modifierKeys[i].mask; + if (mask == 0) + if (modifierKeys[i].keysym != 0) + mask = XkbKeysymToModifiers (qt_xdisplay(), modifierKeys[i].keysym); + else if (!strcmp(modifierKeys[i].name, "Win")) + mask = KKeyNative::modX(KKey::WIN); + else + mask = XkbKeysymToModifiers (qt_xdisplay(), XK_Mode_switch) + | XkbKeysymToModifiers (qt_xdisplay(), XK_ISO_Level3_Shift) + | XkbKeysymToModifiers (qt_xdisplay(), XK_ISO_Level3_Latch) + | XkbKeysymToModifiers (qt_xdisplay(), XK_ISO_Level3_Lock); + + int bit = maskToBit (mask); + if (bit != -1 && keys[bit] == -1) + keys[bit] = i; + } +} + + +bool KAccessApp::x11EventFilter(XEvent *event) +{ + // handle XKB events + if (event->type == xkb_opcode) + { + XkbAnyEvent *ev = (XkbAnyEvent*) event; + + switch (ev->xkb_type) { + case XkbStateNotify: + xkbStateNotify(); + break; + case XkbBellNotify: + xkbBellNotify((XkbBellNotifyEvent*)event); + break; + case XkbControlsNotify: + xkbControlsNotify((XkbControlsNotifyEvent*)event); + break; + } + return true; + } + + // process other events as usual + return KApplication::x11EventFilter(event); +} + + +void VisualBell::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + QTimer::singleShot(_pause, this, SLOT(hide())); +} + + +void KAccessApp::activeWindowChanged(WId wid) +{ + _activeWindow = wid; +} + + +void KAccessApp::xkbStateNotify () { + XkbStateRec state_return; + XkbGetState (qt_xdisplay(), XkbUseCoreKbd, &state_return); + unsigned char latched = XkbStateMods (&state_return); + unsigned char locked = XkbModLocks (&state_return); + int mods = ((int)locked)<<8 | latched; + + if (state != mods) { + if (_kNotifyModifiers) + for (int i = 0; i < 8; i++) { + if (keys[i] != -1) { + if ( (!*modifierKeys[keys[i]].latchedText) + && ( (((mods >> i) & 0x101) != 0) != (((state >> i) & 0x101) != 0) )) + { + if ((mods >> i) & 1) { + KNotifyClient::event (0, "lockkey-locked", i18n(modifierKeys[keys[i]].lockedText)); + } + else { + KNotifyClient::event (0, "lockkey-unlocked", i18n(modifierKeys[keys[i]].unlatchedText)); + } + } + else if ((*modifierKeys[keys[i]].latchedText) + && ( ((mods >> i) & 0x101) != ((state >> i) & 0x101) )) + { + if ((mods >> i) & 0x100) { + KNotifyClient::event (0, "modifierkey-locked", i18n(modifierKeys[keys[i]].lockedText)); + } + else if ((mods >> i) & 1) { + KNotifyClient::event (0, "modifierkey-latched", i18n(modifierKeys[keys[i]].latchedText)); + } + else { + KNotifyClient::event (0, "modifierkey-unlatched", i18n(modifierKeys[keys[i]].unlatchedText)); + } + } + } + } + state = mods; + } +} + +void KAccessApp::xkbBellNotify(XkbBellNotifyEvent *event) +{ + // bail out if we should not really ring + if (event->event_only) + return; + + // flash the visible bell + if (_visibleBell) + { + // create overlay widget + if (!overlay) + overlay = new VisualBell(_visibleBellPause); + + WId id = _activeWindow; + + NETRect frame, window; + NETWinInfo net(qt_xdisplay(), id, desktop()->winId(), 0); + + net.kdeGeometry(frame, window); + + overlay->setGeometry(window.pos.x, window.pos.y, window.size.width, window.size.height); + + if (_visibleBellInvert) + { + QPixmap screen = QPixmap::grabWindow(id, 0, 0, window.size.width, window.size.height); + QPixmap invert(window.size.width, window.size.height); + QPainter p(&invert); + p.setRasterOp(QPainter::NotCopyROP); + p.drawPixmap(0, 0, screen); + overlay->setBackgroundPixmap(invert); + } + else + overlay->setBackgroundColor(_visibleBellColor); + + // flash the overlay widget + overlay->raise(); + overlay->show(); + flushX(); + } + + // ask artsd to ring a nice bell + if (_artsBell && !_artsBellBlocked ) { + KAudioPlayer::play(_artsBellFile); + _artsBellBlocked = true; + artsBellTimer->start( 300, true ); + } +} + +QString mouseKeysShortcut (Display *display) { + // Calculate the keycode + KeySym sym = XK_MouseKeys_Enable; + KeyCode code = XKeysymToKeycode(display, sym); + if (code == 0) { + sym = XK_Pointer_EnableKeys; + code = XKeysymToKeycode(display, sym); + if (code == 0) + return ""; // No shortcut available? + } + + // Calculate the modifiers by searching the keysym in the X keyboard mapping + XkbDescPtr xkbdesc = XkbGetMap(display, XkbKeyTypesMask | XkbKeySymsMask, XkbUseCoreKbd); + + if (!xkbdesc) + return ""; // Failed to obtain the mapping from server + + bool found = false; + unsigned char modifiers = 0; + int groups = XkbKeyNumGroups(xkbdesc, code); + for (int grp = 0; grp < groups && !found; grp++) + { + int levels = XkbKeyGroupWidth(xkbdesc, code, grp); + for (int level = 0; level < levels && !found; level++) + { + if (sym == XkbKeySymEntry(xkbdesc, code, level, grp)) + { + // keysym found => determine modifiers + int typeIdx = xkbdesc->map->key_sym_map[code].kt_index[grp]; + XkbKeyTypePtr type = &(xkbdesc->map->types[typeIdx]); + for (int i = 0; i < type->map_count && !found; i++) + { + if (type->map[i].active && (type->map[i].level == level)) + { + modifiers = type->map[i].mods.mask; + found = true; + } + } + } + } + } + XkbFreeClientMap (xkbdesc, 0, true); + + if (!found) + return ""; // Somehow the keycode -> keysym mapping is flawed + + XEvent ev; + ev.xkey.display = display; + ev.xkey.keycode = code; + ev.xkey.state = 0; + KKey key = KKey(KKeyNative(&ev)); + QString keyname = key.toString(); + + unsigned int AltMask = KKeyNative::modX(KKey::ALT); + unsigned int WinMask = KKeyNative::modX(KKey::WIN); + unsigned int NumMask = KKeyNative::modXNumLock(); + unsigned int ScrollMask= KKeyNative::modXScrollLock(); + + unsigned int MetaMask = XkbKeysymToModifiers (display, XK_Meta_L); + unsigned int SuperMask = XkbKeysymToModifiers (display, XK_Super_L); + unsigned int HyperMask = XkbKeysymToModifiers (display, XK_Hyper_L); + unsigned int AltGrMask = XkbKeysymToModifiers (display, XK_Mode_switch) + | XkbKeysymToModifiers (display, XK_ISO_Level3_Shift) + | XkbKeysymToModifiers (display, XK_ISO_Level3_Latch) + | XkbKeysymToModifiers (display, XK_ISO_Level3_Lock); + + unsigned int mods = ShiftMask | ControlMask | AltMask | WinMask + | LockMask | NumMask | ScrollMask; + + AltGrMask &= ~mods; + MetaMask &= ~(mods | AltGrMask); + SuperMask &= ~(mods | AltGrMask | MetaMask); + HyperMask &= ~(mods | AltGrMask | MetaMask | SuperMask); + + if ((modifiers & AltGrMask) != 0) + keyname = i18n("AltGraph") + "+" + keyname; + if ((modifiers & HyperMask) != 0) + keyname = i18n("Hyper") + "+" + keyname; + if ((modifiers & SuperMask) != 0) + keyname = i18n("Super") + "+" + keyname; + if ((modifiers & WinMask) != 0) + keyname = i18n("Meta") + "+" + keyname; + if ((modifiers & WinMask) != 0) + keyname = KKey::modFlagLabel(KKey::WIN) + "+" + keyname; + if ((modifiers & AltMask) != 0) + keyname = KKey::modFlagLabel(KKey::ALT) + "+" + keyname; + if ((modifiers & ControlMask) != 0) + keyname = KKey::modFlagLabel(KKey::CTRL) + "+" + keyname; + if ((modifiers & ShiftMask) != 0) + keyname = KKey::modFlagLabel(KKey::SHIFT) + "+" + keyname; + + return keyname; +} + +void KAccessApp::createDialogContents() { + if (dialog == 0) { + dialog = new KDialogBase( + i18n("Warning"), + KDialogBase::Yes | KDialogBase::No, + KDialogBase::Yes, KDialogBase::Close, + 0, "AccessXWarning", true, true, + KStdGuiItem::cont(), KStdGuiItem::cancel()); + + QVBox *topcontents = new QVBox (dialog); + topcontents->setSpacing(KDialog::spacingHint()*2); + topcontents->setMargin(KDialog::marginHint()); + + QWidget *contents = new QWidget(topcontents); + QHBoxLayout * lay = new QHBoxLayout(contents); + lay->setSpacing(KDialog::spacingHint()); + + QLabel *label1 = new QLabel( contents); + QPixmap pixmap = KApplication::kApplication()->iconLoader()->loadIcon("messagebox_warning", KIcon::NoGroup, KIcon::SizeMedium, KIcon::DefaultState, 0, true); + if (pixmap.isNull()) + pixmap = QMessageBox::standardIcon(QMessageBox::Warning); + label1->setPixmap(pixmap); + + lay->addWidget( label1, 0, Qt::AlignCenter ); + lay->addSpacing(KDialog::spacingHint()); + + QVBoxLayout * vlay = new QVBoxLayout(lay); + + featuresLabel = new QLabel( "", contents ); + featuresLabel->setAlignment( WordBreak|AlignVCenter ); + vlay->addWidget( featuresLabel ); + vlay->addStretch(); + + QHBoxLayout * hlay = new QHBoxLayout(vlay); + + QLabel *showModeLabel = new QLabel( i18n("&When a gesture was used:"), contents ); + hlay->addWidget( showModeLabel ); + + showModeCombobox = new KComboBox (contents); + hlay->addWidget( showModeCombobox ); + showModeLabel->setBuddy(showModeCombobox); + showModeCombobox->insertItem ( i18n("Change Settings Without Asking"), 0); + showModeCombobox->insertItem ( i18n("Show This Confirmation Dialog"), 1); + showModeCombobox->insertItem ( i18n("Deactivate All AccessX Features & Gestures"), 2); + showModeCombobox->setCurrentItem (1); + + dialog->setMainWidget(topcontents); + dialog->enableButtonSeparator(false); + + connect (dialog, SIGNAL(yesClicked()), this, SLOT(yesClicked())); + connect (dialog, SIGNAL(noClicked()), this, SLOT(noClicked())); + connect (dialog, SIGNAL(closeClicked()), this, SLOT(dialogClosed())); + } +} + +void KAccessApp::xkbControlsNotify(XkbControlsNotifyEvent *event) +{ + unsigned int newFeatures = event->enabled_ctrls & (XkbSlowKeysMask | XkbBounceKeysMask | XkbStickyKeysMask | XkbMouseKeysMask); + + if (newFeatures != features) { + unsigned int enabled = newFeatures & ~features; + unsigned int disabled = features & ~newFeatures; + + if (!_gestureConfirmation) { + requestedFeatures = enabled | (requestedFeatures & ~disabled); + notifyChanges(); + features = newFeatures; + } + else { + // set the AccessX features back to what they were. We will + // apply the changes later if the user allows us to do that. + readSettings(); + + requestedFeatures = enabled | (requestedFeatures & ~disabled); + + enabled = requestedFeatures & ~features; + disabled = features & ~requestedFeatures; + + QStringList enabledFeatures; + QStringList disabledFeatures; + + if (enabled & XkbStickyKeysMask) + enabledFeatures << i18n("Sticky keys"); + else if (disabled & XkbStickyKeysMask) + disabledFeatures << i18n("Sticky keys"); + + if (enabled & XkbSlowKeysMask) + enabledFeatures << i18n("Slow keys"); + else if (disabled & XkbSlowKeysMask) + disabledFeatures << i18n("Slow keys"); + + if (enabled & XkbBounceKeysMask) + enabledFeatures << i18n("Bounce keys"); + else if (disabled & XkbBounceKeysMask) + disabledFeatures << i18n("Bounce keys"); + + if (enabled & XkbMouseKeysMask) + enabledFeatures << i18n("Mouse keys"); + else if (disabled & XkbMouseKeysMask) + disabledFeatures << i18n("Mouse keys"); + + QString question; + switch (enabledFeatures.count()) { + case 0: switch (disabledFeatures.count()) { + case 1: question = i18n("Do you really want to deactivate \"%1\"?") + .arg(disabledFeatures[0]); + break; + case 2: question = i18n("Do you really want to deactivate \"%1\" and \"%2\"?") + .arg(disabledFeatures[0]).arg(disabledFeatures[1]); + break; + case 3: question = i18n("Do you really want to deactivate \"%1\", \"%2\" and \"%3\"?") + .arg(disabledFeatures[0]).arg(disabledFeatures[1]) + .arg(disabledFeatures[2]); + break; + case 4: question = i18n("Do you really want to deactivate \"%1\", \"%2\", \"%3\" and \"%4\"?") + .arg(disabledFeatures[0]).arg(disabledFeatures[1]) + .arg(disabledFeatures[2]).arg(disabledFeatures[3]); + break; + } + break; + case 1: switch (disabledFeatures.count()) { + case 0: question = i18n("Do you really want to activate \"%1\"?") + .arg(enabledFeatures[0]); + break; + case 1: question = i18n("Do you really want to activate \"%1\" and to deactivate \"%2\"?") + .arg(enabledFeatures[0]).arg(disabledFeatures[0]); + break; + case 2: question = i18n("Do you really want to activate \"%1\" and to deactivate \"%2\" and \"%3\"?") + .arg(enabledFeatures[0]).arg(disabledFeatures[0]) + .arg(disabledFeatures[1]); + break; + case 3: question = i18n("Do you really want to activate \"%1\" and to deactivate \"%2\", \"%3\" and \"%4\"?") + .arg(enabledFeatures[0]).arg(disabledFeatures[0]) + .arg(disabledFeatures[1]).arg(disabledFeatures[2]); + break; + } + break; + case 2: switch (disabledFeatures.count()) { + case 0: question = i18n("Do you really want to activate \"%1\" and \"%2\"?") + .arg(enabledFeatures[0]).arg(enabledFeatures[1]); + break; + case 1: question = i18n("Do you really want to activate \"%1\" and \"%2\" and to deactivate \"%3\"?") + .arg(enabledFeatures[0]).arg(enabledFeatures[1]) + .arg(disabledFeatures[0]); + break; + case 2: question = i18n("Do you really want to activate \"%1\", and \"%2\" and to deactivate \"%3\" and \"%4\"?") + .arg(enabledFeatures[0]).arg(enabledFeatures[1]) + .arg(enabledFeatures[0]).arg(disabledFeatures[1]); + break; + } + break; + case 3: switch (disabledFeatures.count()) { + case 0: question = i18n("Do you really want to activate \"%1\", \"%2\" and \"%3\"?") + .arg(enabledFeatures[0]).arg(enabledFeatures[1]) + .arg(enabledFeatures[2]); + break; + case 1: question = i18n("Do you really want to activate \"%1\", \"%2\" and \"%3\" and to deactivate \"%4\"?") + .arg(enabledFeatures[0]).arg(enabledFeatures[1]) + .arg(enabledFeatures[2]).arg(disabledFeatures[0]); + break; + } + break; + case 4: question = i18n("Do you really want to activate \"%1\", \"%2\", \"%3\" and \"%4\"?") + .arg(enabledFeatures[0]).arg(enabledFeatures[1]) + .arg(enabledFeatures[2]).arg(enabledFeatures[3]); + break; + } + QString explanation; + if (enabledFeatures.count()+disabledFeatures.count() == 1) { + explanation = i18n("An application has requested to change this setting."); + + if (_gestures) { + if ((enabled | disabled) == XkbSlowKeysMask) + explanation = i18n("You held down the Shift key for 8 seconds or an application has requested to change this setting."); + else if ((enabled | disabled) == XkbStickyKeysMask) + explanation = i18n("You pressed the Shift key 5 consecutive times or an application has requested to change this setting."); + else if ((enabled | disabled) == XkbMouseKeysMask) { + QString shortcut = mouseKeysShortcut(qt_xdisplay()); + if (!shortcut.isEmpty() && !shortcut.isNull()) + explanation = i18n("You pressed %1 or an application has requested to change this setting.").arg(shortcut); + } + } + } + else { + if (_gestures) + explanation = i18n("An application has requested to change these settings, or you used a combination of several keyboard gestures."); + else + explanation = i18n("An application has requested to change these settings."); + } + + createDialogContents(); + featuresLabel->setText ( question+"\n\n"+explanation + +" "+i18n("These AccessX settings are needed for some users with motion impairments and can be configured in the KDE Control Center. You can also turn them on and off with standardized keyboard gestures.\n\nIf you do not need them, you can select \"Deactivate all AccessX features and gestures\".") ); + + KWin::setState( dialog->winId(), NET::KeepAbove ); + kapp->updateUserTimestamp(); + dialog->show(); + } + } +} + +void KAccessApp::notifyChanges() { + if (!_kNotifyAccessX) + return; + + unsigned int enabled = requestedFeatures & ~features; + unsigned int disabled = features & ~requestedFeatures; + + if (enabled & XkbSlowKeysMask) + KNotifyClient::event (0, "slowkeys", i18n("Slow keys has been enabled. From now on, you need to press each key for a certain length of time before it is accepted.")); + else if (disabled & XkbSlowKeysMask) + KNotifyClient::event (0, "slowkeys", i18n("Slow keys has been disabled.")); + + if (enabled & XkbBounceKeysMask) + KNotifyClient::event (0, "bouncekeys", i18n("Bounce keys has been enabled. From now on, each key will be blocked for a certain length of time after it is used.")); + else if (disabled & XkbBounceKeysMask) + KNotifyClient::event (0, "bouncekeys", i18n("Bounce keys has been disabled.")); + + if (enabled & XkbStickyKeysMask) + KNotifyClient::event (0, "stickykeys", i18n("Sticky keys has been enabled. From now on, modifier keys will stay latched after you have released them.")); + else if (disabled & XkbStickyKeysMask) + KNotifyClient::event (0, "stickykeys", i18n("Sticky keys has been disabled.")); + + if (enabled & XkbMouseKeysMask) + KNotifyClient::event (0, "mousekeys", i18n("Mouse keys has been enabled. From now on, you can use the number pad of your keyboard in order to control the mouse.")); + else if (disabled & XkbMouseKeysMask) + KNotifyClient::event (0, "mousekeys", i18n("Mouse keys has been disabled.")); +} + +void KAccessApp::applyChanges() { + notifyChanges(); + unsigned int enabled = requestedFeatures & ~features; + unsigned int disabled = features & ~requestedFeatures; + + KConfig *config = KGlobal::config(); + config->setGroup("Keyboard"); + + if (enabled & XkbSlowKeysMask) + config->writeEntry("SlowKeys", true); + else if (disabled & XkbSlowKeysMask) + config->writeEntry("SlowKeys", false); + + if (enabled & XkbBounceKeysMask) + config->writeEntry("BounceKeys", true); + else if (disabled & XkbBounceKeysMask) + config->writeEntry("BounceKeys", false); + + if (enabled & XkbStickyKeysMask) + config->writeEntry("StickyKeys", true); + else if (disabled & XkbStickyKeysMask) + config->writeEntry("StickyKeys", false); + + config->setGroup("Mouse"); + + if (enabled & XkbMouseKeysMask) + config->writeEntry("MouseKeys", true); + else if (disabled & XkbMouseKeysMask) + config->writeEntry("MouseKeys", false); + + config->sync(); +} + +void KAccessApp::yesClicked() { + if (dialog != 0) + dialog->deleteLater(); + dialog = 0; + + KConfig *config = KGlobal::config(); + config->setGroup("Keyboard"); + switch (showModeCombobox->currentItem()) { + case 0: + config->writeEntry("Gestures", true); + config->writeEntry("GestureConfirmation", false); + break; + default: + config->writeEntry("Gestures", true); + config->writeEntry("GestureConfirmation", true); + break; + case 2: + requestedFeatures = 0; + config->writeEntry("Gestures", false); + config->writeEntry("GestureConfirmation", false); + } + config->sync(); + + if (features != requestedFeatures) { + notifyChanges(); + applyChanges(); + } + readSettings(); +} + +void KAccessApp::noClicked() { + if (dialog != 0) + dialog->deleteLater(); + dialog = 0; + requestedFeatures = features; + + KConfig *config = KGlobal::config(); + config->setGroup("Keyboard"); + switch (showModeCombobox->currentItem()) { + case 0: + config->writeEntry("Gestures", true); + config->writeEntry("GestureConfirmation", false); + break; + default: + config->writeEntry("Gestures", true); + config->writeEntry("GestureConfirmation", true); + break; + case 2: + requestedFeatures = 0; + config->writeEntry("Gestures", false); + config->writeEntry("GestureConfirmation", true); + } + config->sync(); + + if (features != requestedFeatures) + applyChanges(); + readSettings(); +} + +void KAccessApp::dialogClosed() { + if (dialog != 0) + dialog->deleteLater(); + dialog = 0; + + requestedFeatures = features; +} + +void KAccessApp::slotArtsBellTimeout() +{ + _artsBellBlocked = false; +} + +void KAccessApp::setXkbOpcode(int opcode) +{ + xkb_opcode = opcode; +} diff --git a/kcontrol/access/kaccess.desktop b/kcontrol/access/kaccess.desktop new file mode 100644 index 000000000..6fbd7f668 --- /dev/null +++ b/kcontrol/access/kaccess.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Type=Service +Name=KDE Accessibility Tool +Name[af]=KDE toeganklikheid program +Name[ar]=أداة KDE لتسهيل الوصول +Name[az]=KDE Yetişmə Qabiliyyəti Vasitəsi +Name[be]=Інструмент даступнасці KDE +Name[bg]=Равностоен достъп +Name[bn]=কে.ডি.ই. সহায়ক প্রযুক্তি টুল +Name[br]=Ostilh haezadusted KDE +Name[bs]=KDE alat za pristupačnost +Name[ca]=Eina d'accessibilitat KDE +Name[cs]=Nástroj pro zpřístupnění prostředí KDE +Name[csb]=Pòmòce przistãpù KDE +Name[cy]=Erfyn Hygyrchedd KDE +Name[da]=KDE Tilgængelighedsværktøj +Name[de]=KDE-Zugangshilfe +Name[el]=Εργαλείο προσιτότητας του KDE +Name[eo]=KDE-ilo por Alirebleco +Name[es]=Herramienta de accesibilidad de KDE +Name[et]=KDE hõlbustusvahend +Name[eu]=KDEren erabilerraztasun tresna +Name[fa]=ابزار دستیابی‌پذیری KDE +Name[fi]=KDE:n helppokäyttötoiminnot +Name[fr]=Outil d'accessibilité de KDE +Name[fy]=KDE Tagonklikens +Name[ga]=Uirlis Inrochtaineachta KDE +Name[gl]=Ferramenta de Acesibilidade de KDE +Name[he]=כלי הנגישות של KDE +Name[hi]=केडीई एक्सेसिबिलिटी औजार +Name[hr]=KDE pristupačnost +Name[hu]=KDE kezelési segédeszköz +Name[is]=KDE aðgengistól +Name[it]=Strumento per l'accessibilità di KDE +Name[ja]=KDE アクセシビリティ支援ツール +Name[ka]=KDE-ს სპეცეციალური შესაძლებლობების ხელსაწყოები +Name[kk]=KDE арнайы мүмкіндіктер құралы +Name[km]=ឧបករណ៍​មធ្យោបាយងាយស្រួល KDE +Name[ko]=KDE 접근성 도구 +Name[lt]=KDE prieinamumo įrankis +Name[lv]=KDE pieejamības rīks +Name[mk]=Алатка за пристапливост во KDE +Name[ms]=Alat Keaksesan KDE +Name[mt]=Għodda KDE għall-aċċessibbiltà +Name[nb]=Tilgjengelighetsverktøy for KDE +Name[nds]=KDE-Warktüüch för Behinnerte +Name[ne]=KDE पहुँचयोग्य उपकरण +Name[nl]=KDE Toegankelijkheid +Name[nn]=Tilgjengeverktøy for KDE +Name[pa]=KDE ਸਹਾਇਕ ਸੰਦ +Name[pl]=Ułatwienia dostępu KDE +Name[pt]=Ferramenta de Acessibilidade do KDE +Name[pt_BR]=Ferramenta de Acessibilidade do KDE +Name[ro]=Utilitar de accesibilitate pentru KDE +Name[ru]=Специальные возможности +Name[rw]=Igikoresho cy'Ukugerwaho cya KDE +Name[se]=KDE reaidu álkkibut geavaheami várás +Name[sk]=KDE sprístupnenie +Name[sl]=Orodje za dostopnost KDE +Name[sr]=KDE алатка за приступачност +Name[sr@Latn]=KDE alatka za pristupačnost +Name[sv]=Handikappverktyg för KDE +Name[ta]=KDE அணுகும் கருவி +Name[tg]=Барномаи Тавонёбии KDE +Name[th]=เครื่องมือปรับแต่งการช่วยใารใช้ของงาน KDE +Name[tr]=KDE Erişilebilirlik Aracı +Name[tt]=KDE'neñ Qulaylıq Qoralı +Name[uk]=Утиліта керування доступності KDE +Name[uz]=KDE qulaylik vositasi +Name[uz@cyrillic]=KDE қулайлик воситаси +Name[vi]=Công cụ hỗ trợ người tàn tật cho KDE +Name[wa]=Usteye d' accessibilité KDE +Name[zh_CN]=KDE 辅助工具 +Name[zh_TW]=KDE 無障礙工具 +Exec=kaccess +X-DCOP-ServiceType=None +X-KDE-ParentApp=kcontrol +DocPath=kcontrol/kcmaccess/index.html diff --git a/kcontrol/access/kaccess.h b/kcontrol/access/kaccess.h new file mode 100644 index 000000000..d75d0bdb6 --- /dev/null +++ b/kcontrol/access/kaccess.h @@ -0,0 +1,114 @@ +#ifndef __K_ACCESS_H__ +#define __K_ACCESS_H__ + + +#include +#include + + +#include +#include + + +#include +#define explicit int_explicit // avoid compiler name clash in XKBlib.h +#include +#undef explicit + +class KDialogBase; +class QLabel; +class KComboBox; + +class KAccessApp : public KUniqueApplication +{ + Q_OBJECT + +public: + + KAccessApp(bool allowStyles=true, bool GUIenabled=true); + + bool x11EventFilter(XEvent *event); + + int newInstance(); + + void setXkbOpcode(int opcode); + +protected: + + void readSettings(); + + void xkbStateNotify(); + void xkbBellNotify(XkbBellNotifyEvent *event); + void xkbControlsNotify(XkbControlsNotifyEvent *event); + + +private slots: + + void activeWindowChanged(WId wid); + void slotArtsBellTimeout(); + void notifyChanges(); + void applyChanges(); + void yesClicked(); + void noClicked(); + void dialogClosed(); + +private: + void createDialogContents(); + void initMasks(); + + int xkb_opcode; + unsigned int features; + unsigned int requestedFeatures; + + bool _systemBell, _artsBell, _visibleBell, _visibleBellInvert; + bool _artsBellBlocked; + QString _artsBellFile; + QColor _visibleBellColor; + int _visibleBellPause; + + bool _gestures, _gestureConfirmation; + bool _kNotifyModifiers, _kNotifyAccessX; + + QWidget *overlay; + + QTimer *artsBellTimer; + + KWinModule wm; + + WId _activeWindow; + + KDialogBase *dialog; + QLabel *featuresLabel; + KComboBox *showModeCombobox; + + int keys[8]; + int state; +}; + + +class VisualBell : public QWidget +{ + Q_OBJECT + +public: + + VisualBell(int pause) + : QWidget(0, 0, WX11BypassWM), _pause(pause) + {}; + + +protected: + + void paintEvent(QPaintEvent *); + + +private: + + int _pause; + +}; + + + + +#endif diff --git a/kcontrol/access/kcmaccess.cpp b/kcontrol/access/kcmaccess.cpp new file mode 100644 index 000000000..661748e1d --- /dev/null +++ b/kcontrol/access/kcmaccess.cpp @@ -0,0 +1,805 @@ +/** + * kcmaccess.cpp + * + * Copyright (c) 2000 Matthias H�zer-Klpfel + * + */ + + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#define XK_MISCELLANY +#define XK_XKB_KEYS +#include + +#include "kcmaccess.moc" + + +ExtendedIntNumInput::ExtendedIntNumInput + (QWidget* parent, const char* name) + : KIntNumInput(parent, name) +{ +} + +ExtendedIntNumInput::~ExtendedIntNumInput () { +} + +void ExtendedIntNumInput::setRange(int min, int max, int step, bool slider) { + KIntNumInput::setRange (min,max,step, slider); + + if (slider) { + disconnect(m_slider, SIGNAL(valueChanged(int)), + m_spin, SLOT(setValue(int))); + disconnect(m_spin, SIGNAL(valueChanged(int)), + this, SLOT(spinValueChanged(int))); + + this->min = min; + this->max = max; + sliderMax = (int)floor (0.5 + + 2*(log(max)-log(min)) / (log(max)-log(max-1))); + m_slider->setRange(0, sliderMax); + m_slider->setSteps(step, sliderMax/10); + m_slider->setTickInterval(sliderMax/10); + + double alpha = sliderMax / (log(max) - log(min)); + double logVal = alpha * (log(value())-log(min)); + m_slider->setValue ((int)floor (0.5 + logVal)); + + connect(m_slider, SIGNAL(valueChanged(int)), + this, SLOT(slotSliderValueChanged(int))); + connect(m_spin, SIGNAL(valueChanged(int)), + this, SLOT(slotSpinValueChanged(int))); + } +} + +// Basically the slider values are logarithmic whereas +// spinbox values are linear. + +void ExtendedIntNumInput::slotSpinValueChanged(int val) +{ + + if(m_slider) { + double alpha = sliderMax / (log(max) - log(min)); + double logVal = alpha * (log(val)-log(min)); + m_slider->setValue ((int)floor (0.5 + logVal)); + } + + emit valueChanged(val); +} + +void ExtendedIntNumInput::slotSliderValueChanged(int val) +{ + double alpha = sliderMax / (log(max) - log(min)); + double linearVal = exp (val/alpha + log(min)); + m_spin->setValue ((int)floor(0.5 + linearVal)); +} + +static bool needToRunKAccessDaemon( KConfig *config ) +{ + // We always start the KAccess Daemon, if it is not needed, + // it will terminate itself after configuring the AccessX + // features. + return true; +} + +QString mouseKeysShortcut (Display *display) { + // Calculate the keycode + KeySym sym = XK_MouseKeys_Enable; + KeyCode code = XKeysymToKeycode(display, sym); + if (code == 0) { + sym = XK_Pointer_EnableKeys; + code = XKeysymToKeycode(display, sym); + if (code == 0) + return ""; // No shortcut available? + } + + // Calculate the modifiers by searching the keysym in the X keyboard mapping + XkbDescPtr xkbdesc = XkbGetMap(display, XkbKeyTypesMask | XkbKeySymsMask, XkbUseCoreKbd); + if (!xkbdesc) + return ""; // Failed to obtain the mapping from server + + bool found = false; + unsigned char modifiers = 0; + int groups = XkbKeyNumGroups(xkbdesc, code); + for (int grp = 0; grp < groups && !found; grp++) + { + int levels = XkbKeyGroupWidth(xkbdesc, code, grp); + for (int level = 0; level < levels && !found; level++) + { + if (sym == XkbKeySymEntry(xkbdesc, code, level, grp)) + { + // keysym found => determine modifiers + int typeIdx = xkbdesc->map->key_sym_map[code].kt_index[grp]; + XkbKeyTypePtr type = &(xkbdesc->map->types[typeIdx]); + for (int i = 0; i < type->map_count && !found; i++) + { + if (type->map[i].active && (type->map[i].level == level)) + { + modifiers = type->map[i].mods.mask; + found = true; + } + } + } + } + } + XkbFreeClientMap (xkbdesc, 0, true); + + if (!found) + return ""; // Somehow the keycode -> keysym mapping is flawed + + XEvent ev; + ev.xkey.display = display; + ev.xkey.keycode = code; + ev.xkey.state = 0; + KKey key = KKey(KKeyNative(&ev)); + QString keyname = key.toString(); + + unsigned int AltMask = KKeyNative::modX(KKey::ALT); + unsigned int WinMask = KKeyNative::modX(KKey::WIN); + unsigned int NumMask = KKeyNative::modXNumLock(); + unsigned int ScrollMask= KKeyNative::modXScrollLock(); + + unsigned int MetaMask = XkbKeysymToModifiers (display, XK_Meta_L); + unsigned int SuperMask = XkbKeysymToModifiers (display, XK_Super_L); + unsigned int HyperMask = XkbKeysymToModifiers (display, XK_Hyper_L); + unsigned int AltGrMask = XkbKeysymToModifiers (display, XK_Mode_switch) + | XkbKeysymToModifiers (display, XK_ISO_Level3_Shift) + | XkbKeysymToModifiers (display, XK_ISO_Level3_Latch) + | XkbKeysymToModifiers (display, XK_ISO_Level3_Lock); + + unsigned int mods = ShiftMask | ControlMask | AltMask | WinMask + | LockMask | NumMask | ScrollMask; + + AltGrMask &= ~mods; + MetaMask &= ~(mods | AltGrMask); + SuperMask &= ~(mods | AltGrMask | MetaMask); + HyperMask &= ~(mods | AltGrMask | MetaMask | SuperMask); + + if ((modifiers & AltGrMask) != 0) + keyname = i18n("AltGraph") + "+" + keyname; + if ((modifiers & HyperMask) != 0) + keyname = i18n("Hyper") + "+" + keyname; + if ((modifiers & SuperMask) != 0) + keyname = i18n("Super") + "+" + keyname; + if ((modifiers & WinMask) != 0) + keyname = KKey::modFlagLabel(KKey::WIN) + "+" + keyname; + if ((modifiers & AltMask) != 0) + keyname = KKey::modFlagLabel(KKey::ALT) + "+" + keyname; + if ((modifiers & ControlMask) != 0) + keyname = KKey::modFlagLabel(KKey::CTRL) + "+" + keyname; + if ((modifiers & ShiftMask) != 0) + keyname = KKey::modFlagLabel(KKey::SHIFT) + "+" + keyname; + + QString result; + if ((modifiers & ScrollMask) != 0) + if ((modifiers & LockMask) != 0) + if ((modifiers & NumMask) != 0) + result = i18n("Press %1 while NumLock, CapsLock and ScrollLock are active"); + else + result = i18n("Press %1 while CapsLock and ScrollLock are active"); + else if ((modifiers & NumMask) != 0) + result = i18n("Press %1 while NumLock and ScrollLock are active"); + else + result = i18n("Press %1 while ScrollLock is active"); + else if ((modifiers & LockMask) != 0) + if ((modifiers & NumMask) != 0) + result = i18n("Press %1 while NumLock and CapsLock are active"); + else + result = i18n("Press %1 while CapsLock is active"); + else if ((modifiers & NumMask) != 0) + result = i18n("Press %1 while NumLock is active"); + else + result = i18n("Press %1"); + + return result.arg(keyname); +} + +KAccessConfig::KAccessConfig(QWidget *parent, const char *) + : KCModule(parent, "kcmaccess") +{ + + KAboutData *about = + new KAboutData(I18N_NOOP("kaccess"), I18N_NOOP("KDE Accessibility Tool"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000, Matthias Hoelzer-Kluepfel")); + + about->addAuthor("Matthias Hoelzer-Kluepfel", I18N_NOOP("Author") , "hoelzer@kde.org"); + + setAboutData( about ); + + QVBoxLayout *main = new QVBoxLayout(this, 0, KDialogBase::spacingHint()); + QTabWidget *tab = new QTabWidget(this); + main->addWidget(tab); + + // bell settings --------------------------------------- + QWidget *bell = new QWidget(this); + + QVBoxLayout *vbox = new QVBoxLayout(bell, KDialogBase::marginHint(), + KDialogBase::spacingHint()); + + QGroupBox *grp = new QGroupBox(i18n("Audible Bell"), bell); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + QVBoxLayout *vvbox = new QVBoxLayout(grp->layout(), + KDialogBase::spacingHint()); + + systemBell = new QCheckBox(i18n("Use &system bell"), grp); + vvbox->addWidget(systemBell); + customBell = new QCheckBox(i18n("Us&e customized bell"), grp); + vvbox->addWidget(customBell); + QWhatsThis::add( systemBell, i18n("If this option is checked, the default system bell will be used. See the" + " \"System Bell\" control module for how to customize the system bell." + " Normally, this is just a \"beep\".") ); + QWhatsThis::add( customBell, i18n("Check this option if you want to use a customized bell, playing" + " a sound file. If you do this, you will probably want to turn off the system bell.

Please note" + " that on slow machines this may cause a \"lag\" between the event causing the bell and the sound being played.") ); + + QHBoxLayout *hbox = new QHBoxLayout(vvbox, KDialogBase::spacingHint()); + hbox->addSpacing(24); + soundEdit = new QLineEdit(grp); + soundLabel = new QLabel(soundEdit, i18n("Sound &to play:"), grp); + hbox->addWidget(soundLabel); + hbox->addWidget(soundEdit); + soundButton = new QPushButton(i18n("Browse..."), grp); + hbox->addWidget(soundButton); + QString wtstr = i18n("If the option \"Use customized bell\" is enabled, you can choose a sound file here." + " Click \"Browse...\" to choose a sound file using the file dialog."); + QWhatsThis::add( soundEdit, wtstr ); + QWhatsThis::add( soundLabel, wtstr ); + QWhatsThis::add( soundButton, wtstr ); + + connect(soundButton, SIGNAL(clicked()), this, SLOT(selectSound())); + + connect(customBell, SIGNAL(clicked()), this, SLOT(checkAccess())); + + connect(systemBell, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(customBell, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(soundEdit, SIGNAL(textChanged(const QString&)), this, SLOT(configChanged())); + + // ----------------------------------------------------- + + // visible bell ---------------------------------------- + grp = new QGroupBox(i18n("Visible Bell"), bell); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + visibleBell = new QCheckBox(i18n("&Use visible bell"), grp); + vvbox->addWidget(visibleBell); + QWhatsThis::add( visibleBell, i18n("This option will turn on the \"visible bell\", i.e. a visible" + " notification shown every time that normally just a bell would occur. This is especially useful" + " for deaf people.") ); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + invertScreen = new QRadioButton(i18n("I&nvert screen"), grp); + hbox->addWidget(invertScreen); + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + QWhatsThis::add( invertScreen, i18n("All screen colors will be inverted for the amount of time specified below.") ); + hbox->addSpacing(24); + flashScreen = new QRadioButton(i18n("F&lash screen"), grp); + hbox->addWidget(flashScreen); + QWhatsThis::add( flashScreen, i18n("The screen will turn to a custom color for the amount of time specified below.") ); + hbox->addSpacing(12); + colorButton = new KColorButton(grp); + colorButton->setFixedWidth(colorButton->sizeHint().height()*2); + hbox->addWidget(colorButton); + hbox->addStretch(); + QWhatsThis::add( colorButton, i18n("Click here to choose the color used for the \"flash screen\" visible bell.") ); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + + durationSlider = new ExtendedIntNumInput(grp); + durationSlider->setRange(100, 2000, 100); + durationSlider->setLabel(i18n("Duration:")); + durationSlider->setSuffix(i18n(" msec")); + hbox->addWidget(durationSlider); + QWhatsThis::add( durationSlider, i18n("Here you can customize the duration of the \"visible bell\" effect being shown.") ); + + connect(invertScreen, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(flashScreen, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(visibleBell, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(visibleBell, SIGNAL(clicked()), this, SLOT(checkAccess())); + connect(colorButton, SIGNAL(clicked()), this, SLOT(changeFlashScreenColor())); + + connect(invertScreen, SIGNAL(clicked()), this, SLOT(invertClicked())); + connect(flashScreen, SIGNAL(clicked()), this, SLOT(flashClicked())); + + connect(durationSlider, SIGNAL(valueChanged(int)), this, SLOT(configChanged())); + + vbox->addStretch(); + + // ----------------------------------------------------- + + tab->addTab(bell, i18n("&Bell")); + + + // modifier key settings ------------------------------- + QWidget *modifiers = new QWidget(this); + + vbox = new QVBoxLayout(modifiers, KDialog::marginHint(), KDialog::spacingHint()); + + grp = new QGroupBox(i18n("S&ticky Keys"), modifiers); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + stickyKeys = new QCheckBox(i18n("Use &sticky keys"), grp); + vvbox->addWidget(stickyKeys); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + stickyKeysLock = new QCheckBox(i18n("&Lock sticky keys"), grp); + hbox->addWidget(stickyKeysLock); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + stickyKeysAutoOff = new QCheckBox(i18n("Turn sticky keys off when two keys are pressed simultaneously"), grp); + hbox->addWidget(stickyKeysAutoOff); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + stickyKeysBeep = new QCheckBox(i18n("Use system bell whenever a modifier gets latched, locked or unlocked"), grp); + hbox->addWidget(stickyKeysBeep); + + grp = new QGroupBox(i18n("Locking Keys"), modifiers); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + toggleKeysBeep = new QCheckBox(i18n("Use system bell whenever a locking key gets activated or deactivated"), grp); + vvbox->addWidget(toggleKeysBeep); + + kNotifyModifiers = new QCheckBox(i18n("Use KDE's system notification mechanism whenever a modifier or locking key changes its state"), grp); + vvbox->addWidget(kNotifyModifiers); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addStretch(1); + kNotifyModifiersButton = new QPushButton(i18n("Configure System Notification..."), grp); + kNotifyModifiersButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + hbox->addWidget(kNotifyModifiersButton); + + connect(stickyKeys, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(stickyKeysLock, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(stickyKeysAutoOff, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(stickyKeys, SIGNAL(clicked()), this, SLOT(checkAccess())); + + connect(stickyKeysBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(toggleKeysBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(kNotifyModifiers, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(kNotifyModifiers, SIGNAL(clicked()), this, SLOT(checkAccess())); + connect(kNotifyModifiersButton, SIGNAL(clicked()), this, SLOT(configureKNotify())); + + vbox->addStretch(); + + tab->addTab(modifiers, i18n("&Modifier Keys")); + + // key filter settings --------------------------------- + QWidget *filters = new QWidget(this); + + vbox = new QVBoxLayout(filters, KDialog::marginHint(), KDialog::spacingHint()); + + grp = new QGroupBox(i18n("Slo&w Keys"), filters); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + slowKeys = new QCheckBox(i18n("&Use slow keys"), grp); + vvbox->addWidget(slowKeys); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + slowKeysDelay = new ExtendedIntNumInput(grp); + slowKeysDelay->setSuffix(i18n(" msec")); + slowKeysDelay->setRange(50, 10000, 100); + slowKeysDelay->setLabel(i18n("Acceptance dela&y:")); + hbox->addWidget(slowKeysDelay); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + slowKeysPressBeep = new QCheckBox(i18n("&Use system bell whenever a key is pressed"), grp); + hbox->addWidget(slowKeysPressBeep); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + slowKeysAcceptBeep = new QCheckBox(i18n("&Use system bell whenever a key is accepted"), grp); + hbox->addWidget(slowKeysAcceptBeep); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + slowKeysRejectBeep = new QCheckBox(i18n("&Use system bell whenever a key is rejected"), grp); + hbox->addWidget(slowKeysRejectBeep); + + grp = new QGroupBox(i18n("Bounce Keys"), filters); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + bounceKeys = new QCheckBox(i18n("Use bou&nce keys"), grp); + vvbox->addWidget(bounceKeys); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + bounceKeysDelay = new ExtendedIntNumInput(grp); + bounceKeysDelay->setSuffix(i18n(" msec")); + bounceKeysDelay->setRange(100, 5000, 100); + bounceKeysDelay->setLabel(i18n("D&ebounce time:")); + hbox->addWidget(bounceKeysDelay); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + bounceKeysRejectBeep = new QCheckBox(i18n("Use the system bell whenever a key is rejected"), grp); + hbox->addWidget(bounceKeysRejectBeep); + + connect(slowKeysDelay, SIGNAL(valueChanged(int)), this, SLOT(configChanged())); + connect(slowKeys, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(slowKeys, SIGNAL(clicked()), this, SLOT(checkAccess())); + + connect(slowKeysPressBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(slowKeysAcceptBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(slowKeysRejectBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + + connect(bounceKeysDelay, SIGNAL(valueChanged(int)), this, SLOT(configChanged())); + connect(bounceKeys, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(bounceKeysRejectBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(bounceKeys, SIGNAL(clicked()), this, SLOT(checkAccess())); + + vbox->addStretch(); + + tab->addTab(filters, i18n("&Keyboard Filters")); + + // gestures -------------------------------------------- + QWidget *features = new QWidget(this); + + vbox = new QVBoxLayout(features, KDialog::marginHint(), KDialog::spacingHint()); + + grp = new QGroupBox(i18n("Activation Gestures"), features); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + gestures = new QCheckBox(i18n("Use gestures for activating sticky keys and slow keys"), grp); + vvbox->addWidget(gestures); + QString shortcut = mouseKeysShortcut(this->x11Display()); + if (shortcut.isEmpty()) + QWhatsThis::add (gestures, i18n("Here you can activate keyboard gestures that turn on the following features: \n" + "Sticky keys: Press Shift key 5 consecutive times\n" + "Slow keys: Hold down Shift for 8 seconds")); + else + QWhatsThis::add (gestures, i18n("Here you can activate keyboard gestures that turn on the following features: \n" + "Mouse Keys: %1\n" + "Sticky keys: Press Shift key 5 consecutive times\n" + "Slow keys: Hold down Shift for 8 seconds").arg(shortcut)); + + timeout = new QCheckBox(i18n("Turn sticky keys and slow keys off after a certain period of inactivity"), grp); + vvbox->addWidget(timeout); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + timeoutDelay = new KIntNumInput(grp); + timeoutDelay->setSuffix(i18n(" min")); + timeoutDelay->setRange(1, 30, 4); + timeoutDelay->setLabel(i18n("Timeout:")); + hbox->addWidget(timeoutDelay); + + grp = new QGroupBox(i18n("Notification"), features); + grp->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(grp); + + vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint()); + + accessxBeep = new QCheckBox(i18n("Use the system bell whenever a gesture is used to turn an accessibility feature on or off"), grp); + vvbox->addWidget(accessxBeep); + + gestureConfirmation = new QCheckBox(i18n("Show a confirmation dialog whenever a keyboard accessibility feature is turned on or off"), grp); + vvbox->addWidget(gestureConfirmation); + QWhatsThis::add (gestureConfirmation, i18n("If this option is checked, KDE will show a confirmation dialog whenever a keyboard accessibility feature is turned on or off.\nBe sure you know what you are doing if you uncheck it, as the keyboard accessibility settings will then always be applied without confirmation.") ); + + kNotifyAccessX = new QCheckBox(i18n("Use KDE's system notification mechanism whenever a keyboard accessibility feature is turned on or off"), grp); + vvbox->addWidget(kNotifyAccessX); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addStretch(1); + kNotifyAccessXButton = new QPushButton(i18n("Configure System Notification..."), grp); + kNotifyAccessXButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + hbox->addWidget(kNotifyAccessXButton); + + connect(gestures, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(timeout, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(timeout, SIGNAL(clicked()), this, SLOT(checkAccess())); + connect(timeoutDelay, SIGNAL(valueChanged(int)), this, SLOT(configChanged())); + connect(accessxBeep, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(gestureConfirmation, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(kNotifyAccessX, SIGNAL(clicked()), this, SLOT(configChanged())); + connect(kNotifyAccessX, SIGNAL(clicked()), this, SLOT(checkAccess())); + connect(kNotifyAccessXButton, SIGNAL(clicked()), this, SLOT(configureKNotify())); + + vbox->addStretch(); + + tab->addTab(features, i18n("Activation Gestures")); + + load(); +} + + +KAccessConfig::~KAccessConfig() +{ +} + +void KAccessConfig::configureKNotify() +{ + KAboutData about(I18N_NOOP("kaccess"), + I18N_NOOP("KDE Accessibility Tool"), + 0); + KNotifyDialog::configure (this, 0, &about); +} + +void KAccessConfig::changeFlashScreenColor() +{ + invertScreen->setChecked(false); + flashScreen->setChecked(true); + configChanged(); +} + +void KAccessConfig::selectSound() +{ + QStringList list = KGlobal::dirs()->findDirs("sound", ""); + QString start; + if (list.count()>0) + start = list[0]; + // TODO: Why only wav's? How can I find out what artsd supports? + QString fname = KFileDialog::getOpenFileName(start, i18n("*.wav|WAV Files")); + if (!fname.isEmpty()) + soundEdit->setText(fname); +} + + +void KAccessConfig::configChanged() +{ + emit changed(true); +} + + +void KAccessConfig::load() +{ + load( false ); +} + +void KAccessConfig::load( bool useDefaults ) +{ + KConfig *config = new KConfig("kaccessrc", true, false); + + config->setGroup("Bell"); + config->setReadDefaults( useDefaults ); + + systemBell->setChecked(config->readBoolEntry("SystemBell", true)); + customBell->setChecked(config->readBoolEntry("ArtsBell", false)); + soundEdit->setText(config->readPathEntry("ArtsBellFile")); + + visibleBell->setChecked(config->readBoolEntry("VisibleBell", false)); + invertScreen->setChecked(config->readBoolEntry("VisibleBellInvert", true)); + flashScreen->setChecked(!invertScreen->isChecked()); + QColor def(Qt::red); + colorButton->setColor(config->readColorEntry("VisibleBellColor", &def)); + + durationSlider->setValue(config->readNumEntry("VisibleBellPause", 500)); + + + config->setGroup("Keyboard"); + + stickyKeys->setChecked(config->readBoolEntry("StickyKeys", false)); + stickyKeysLock->setChecked(config->readBoolEntry("StickyKeysLatch", true)); + stickyKeysAutoOff->setChecked(config->readBoolEntry("StickyKeysAutoOff", false)); + stickyKeysBeep->setChecked(config->readBoolEntry("StickyKeysBeep", true)); + toggleKeysBeep->setChecked(config->readBoolEntry("ToggleKeysBeep", false)); + kNotifyModifiers->setChecked(config->readBoolEntry("kNotifyModifiers", false)); + + slowKeys->setChecked(config->readBoolEntry("SlowKeys", false)); + slowKeysDelay->setValue(config->readNumEntry("SlowKeysDelay", 500)); + slowKeysPressBeep->setChecked(config->readBoolEntry("SlowKeysPressBeep", true)); + slowKeysAcceptBeep->setChecked(config->readBoolEntry("SlowKeysAcceptBeep", true)); + slowKeysRejectBeep->setChecked(config->readBoolEntry("SlowKeysRejectBeep", true)); + + bounceKeys->setChecked(config->readBoolEntry("BounceKeys", false)); + bounceKeysDelay->setValue(config->readNumEntry("BounceKeysDelay", 500)); + bounceKeysRejectBeep->setChecked(config->readBoolEntry("BounceKeysRejectBeep", true)); + + gestures->setChecked(config->readBoolEntry("Gestures", true)); + timeout->setChecked(config->readBoolEntry("AccessXTimeout", false)); + timeoutDelay->setValue(config->readNumEntry("AccessXTimeoutDelay", 30)); + + accessxBeep->setChecked(config->readBoolEntry("AccessXBeep", true)); + gestureConfirmation->setChecked(config->readBoolEntry("GestureConfirmation", false)); + kNotifyAccessX->setChecked(config->readBoolEntry("kNotifyAccessX", false)); + + delete config; + + checkAccess(); + + emit changed(useDefaults); +} + + +void KAccessConfig::save() +{ + KConfig *config= new KConfig("kaccessrc", false); + + config->setGroup("Bell"); + + config->writeEntry("SystemBell", systemBell->isChecked()); + config->writeEntry("ArtsBell", customBell->isChecked()); + config->writePathEntry("ArtsBellFile", soundEdit->text()); + + config->writeEntry("VisibleBell", visibleBell->isChecked()); + config->writeEntry("VisibleBellInvert", invertScreen->isChecked()); + config->writeEntry("VisibleBellColor", colorButton->color()); + + config->writeEntry("VisibleBellPause", durationSlider->value()); + + + config->setGroup("Keyboard"); + + config->writeEntry("StickyKeys", stickyKeys->isChecked()); + config->writeEntry("StickyKeysLatch", stickyKeysLock->isChecked()); + config->writeEntry("StickyKeysAutoOff", stickyKeysAutoOff->isChecked()); + config->writeEntry("StickyKeysBeep", stickyKeysBeep->isChecked()); + config->writeEntry("ToggleKeysBeep", toggleKeysBeep->isChecked()); + config->writeEntry("kNotifyModifiers", kNotifyModifiers->isChecked()); + + config->writeEntry("SlowKeys", slowKeys->isChecked()); + config->writeEntry("SlowKeysDelay", slowKeysDelay->value()); + config->writeEntry("SlowKeysPressBeep", slowKeysPressBeep->isChecked()); + config->writeEntry("SlowKeysAcceptBeep", slowKeysAcceptBeep->isChecked()); + config->writeEntry("SlowKeysRejectBeep", slowKeysRejectBeep->isChecked()); + + + config->writeEntry("BounceKeys", bounceKeys->isChecked()); + config->writeEntry("BounceKeysDelay", bounceKeysDelay->value()); + config->writeEntry("BounceKeysRejectBeep", bounceKeysRejectBeep->isChecked()); + + config->writeEntry("Gestures", gestures->isChecked()); + config->writeEntry("AccessXTimeout", timeout->isChecked()); + config->writeEntry("AccessXTimeoutDelay", timeoutDelay->value()); + + config->writeEntry("AccessXBeep", accessxBeep->isChecked()); + config->writeEntry("GestureConfirmation", gestureConfirmation->isChecked()); + config->writeEntry("kNotifyAccessX", kNotifyAccessX->isChecked()); + + + config->sync(); + + if (systemBell->isChecked() || + customBell->isChecked() || + visibleBell->isChecked()) + { + KConfig cfg("kdeglobals", false, false); + cfg.setGroup("General"); + cfg.writeEntry("UseSystemBell", true); + cfg.sync(); + } + + // make kaccess reread the configuration + // When turning things off, it needs to be done by kaccess, + // so don't actually kill it *shrug*. + if ( true /*needToRunKAccessDaemon( config )*/ ) + kapp->startServiceByDesktopName("kaccess"); + + else // don't need it -> kill it + { + DCOPRef kaccess( "kaccess", "qt/kaccess" ); + kaccess.send( "quit" ); + } + + delete config; + + emit changed(false); +} + + +void KAccessConfig::defaults() +{ + load( true ); +} + + +void KAccessConfig::invertClicked() +{ + flashScreen->setChecked(false); +} + + +void KAccessConfig::flashClicked() +{ + invertScreen->setChecked(false); +} + + +void KAccessConfig::checkAccess() +{ + bool custom = customBell->isChecked(); + soundEdit->setEnabled(custom); + soundButton->setEnabled(custom); + soundLabel->setEnabled(custom); + + bool visible = visibleBell->isChecked(); + invertScreen->setEnabled(visible); + flashScreen->setEnabled(visible); + colorButton->setEnabled(visible); + durationSlider->setEnabled(visible); + + bool sticky = stickyKeys->isChecked(); + stickyKeysLock->setEnabled(sticky); + stickyKeysAutoOff->setEnabled(sticky); + stickyKeysBeep->setEnabled(sticky); + + bool slow = slowKeys->isChecked(); + slowKeysDelay->setEnabled(slow); + slowKeysPressBeep->setEnabled(slow); + slowKeysAcceptBeep->setEnabled(slow); + slowKeysRejectBeep->setEnabled(slow); + + bool bounce = bounceKeys->isChecked(); + bounceKeysDelay->setEnabled(bounce); + bounceKeysRejectBeep->setEnabled(bounce); + + bool useTimeout = timeout->isChecked(); + timeoutDelay->setEnabled(useTimeout); +} + +extern "C" +{ + KDE_EXPORT KCModule *create_access(QWidget *parent, const char *name) + { + return new KAccessConfig(parent, name); + } + + /* This one gets called by kcminit + + */ + KDE_EXPORT void init_access() + { + KConfig *config = new KConfig("kaccessrc", true, false); + bool run = needToRunKAccessDaemon( config ); + + delete config; + if (run) + kapp->startServiceByDesktopName("kaccess"); + } +} + + diff --git a/kcontrol/access/kcmaccess.desktop b/kcontrol/access/kcmaccess.desktop new file mode 100644 index 000000000..7980cadec --- /dev/null +++ b/kcontrol/access/kcmaccess.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Icon=access +Type=Application +Exec=kcmshell kcmaccess +DocPath=kcontrol/kcmaccess/index.html + + +X-KDE-Library=access +X-KDE-Init=access +X-KDE-ParentApp=kcontrol + +Name=Accessibility +Name[af]=Toeganklikheid +Name[ar]=تسهيل الوصول +Name[az]=Yetişmə Qabiliyyəti +Name[be]=Даступнасць +Name[bg]=Равностоен достъп +Name[bn]=সহায়ক প্রযুক্তি +Name[br]=Haezadusted +Name[bs]=Pristupačnost +Name[ca]=Accessibilitat +Name[cs]=Zpřístupnění +Name[csb]=Pòmòce przistãpù +Name[cy]=Hygyrchedd +Name[da]=Tilgængelighed +Name[de]=Zugangshilfen +Name[el]=Προσιτότητα +Name[eo]=Alirebleco +Name[es]=Accesibilidad +Name[et]=Hõlbustus +Name[eu]=Erabilerraztasuna +Name[fa]=دستیابی‌پذیری +Name[fi]=Helppokäyttötoiminnot +Name[fr]=Accessibilité +Name[fy]=Tagonklikens +Name[ga]=Inrochtaineacht +Name[gl]=Accesibilidade +Name[he]=נגישות +Name[hi]=पहुँच +Name[hr]=Pristupačnost +Name[hu]=Kezelési segítség +Name[id]=Aksesibiliti +Name[is]=Aðgengi +Name[it]=Accessibilità +Name[ja]=アクセシビリティ +Name[ka]=სპეციალური შესაძლბლობები +Name[kk]=Арнайы мүмкіндіктер +Name[km]=ភាព​អាច​ចូល​ដំណើរការ​បាន +Name[ko]=내게 필요한 설정 +Name[lo]=ຄວາມສາມາດໃນການໃຊ້ງານ +Name[lt]=Prieinamumas +Name[lv]=Pieejamība +Name[mk]=Пристапливост +Name[mn]=Хэрэглэх тохь +Name[ms]=Kebolehcapaian +Name[mt]=Aċċessibiltà +Name[nb]=Tilgjengelighet +Name[nds]=Behinnertenhülp +Name[ne]=पहुँचता +Name[nl]=Toegankelijkheid +Name[nn]=Tilgjenge +Name[nso]=Botsenelo +Name[oc]=Accessibilitat +Name[pa]=ਸਹੂਲਤਾਂ +Name[pl]=Dostępność +Name[pt]=Acessibilidade +Name[pt_BR]=Acessibilidade +Name[ro]=Accesibilitate +Name[ru]=Специальные возможности +Name[rw]=Ukugerwaho +Name[se]=Álkkibut geavaheapmi +Name[sk]=Prístupnosť +Name[sl]=Dostopnost +Name[sr]=Приступачност +Name[sr@Latn]=Pristupačnost +Name[ss]=Kutfolakala kalula +Name[sv]=Handikappstöd +Name[ta]=அணுகல் +Name[te]=అందుబాటు +Name[tg]=Имконпазирӣ +Name[th]=ตัวช่วยในการใช้งาน +Name[tr]=Erişilebilirlik +Name[tt]=Qulaylıq +Name[uk]=Доступність +Name[uz]=Qulayliklar +Name[uz@cyrillic]=Қулайликлар +Name[ven]=Dzheneaho +Name[vi]=Hỗ trợ người tàn tật +Name[wa]=Accessibilité +Name[xh]=Unikezelo +Name[zh_CN]=辅助 +Name[zh_TW]=無障礙輔助 +Name[zu]=Ukungena + +Comment=Improve accessibility for disabled persons +Comment[af]=Verbeter toeganklikheid vir gestremde persone +Comment[ar]=تسهيل الاستخدام لذوي الاحتياجات الخاصة +Comment[az]=Yetişmə qabiliyyəti zəyif olanların həyatını asanlaşdırar +Comment[be]=Павялічвае даступнасць для людзей з фізічнымі адхіленнямі +Comment[bg]=Настройване на достъпа за хора с увреждания +Comment[bn]=অসমর্থ ব্যবহারকারীদের সহায়তা করার প্রযুক্তি +Comment[bs]=Bolja pristupačnost za osobe sa nedostacima +Comment[ca]=Accessibilitat millorada per a persones discapacitades +Comment[cs]=Zlepšení přístupnosti pro osoby s postižením +Comment[csb]=Pòprôwionô przistãpnosc dlô niefùlsprôwnëch lëdzi +Comment[cy]=Gwella hygyrchedd i bobl anabl +Comment[da]=Forbedr tilgængelighed for handicappede personer +Comment[de]=Verbesserte Benutzbarkeit für behinderte Menschen +Comment[el]=Βελτίωση της προσιτότητας για άτομα με ειδικές ανάγκες +Comment[eo]=Plibonigita alirebleco por handikapitoj +Comment[es]=Mejorar accesibilidad para discapacitados +Comment[et]=Puuetega inimestele mõeldud seaded +Comment[eu]=Erabilerraztasuna hobetzen du pertsona elbarrientzat +Comment[fa]=بهبود دستیابی‌پذیری برای اشخاص ناتوان +Comment[fi]=Käyttöä helpottavia asetuksia +Comment[fr]=Accessibilité améliorée pour les personnes handicapées +Comment[fy]=Ferbeterde tagonklikens foar brûkers mei in handikap +Comment[ga]=Feabhsaigh an inrochtaineacht do dhaoine míchumasaithe +Comment[gl]=Acesibilidade mellorada para persoas con discapacidades +Comment[he]=שיפור הנגישות עבור אנשים עם מגבלות +Comment[hi]=विकलांग व्यक्तियों के लिए पहुँच बेहतर बनाए +Comment[hr]=Unaprijedite pristupačnost osobama s invaliditetom +Comment[hu]=A számítógép kezelését segítő eszközök fogyatékosoknak +Comment[is]=Endurbætt aðgengi fyrir þá sem þurfa +Comment[it]=Accessibilità migliorata per le persone disabili +Comment[ja]=障害のある方達のためのアクセス改善 +Comment[ka]=ფიზიკური ნაკლოვანებბის მქონი ხალხისთვის სპეციალური შესაძლბლობები +Comment[kk]=Мүмкіншіліктері шектеулі адамдарға көмек +Comment[km]=បង្កើន​មធ្យោបាយ​ងាយស្រួល​សម្រាប់​មនុស្ស​ពិការ +Comment[ko]=장애인들을 위하여 접근성을 향상시킵니다 +Comment[lo]=ປັບຄ່າຄວາມສາມາດໃນການໃຊ້ງານສຳຫລັບຜູ້ທີ່ມີຄວາມສາມາດ +Comment[lt]=Pagerintas prieinamumas neįgaliems asmenims +Comment[lv]=Uzlabo pieejamību cilvekiem ar īpašām vajadzībām +Comment[mk]=Ја подобрува пристапливоста за хендикепирани лица +Comment[mn]=Гэмтэлтэй хүнд зориулан сайжруулсан хэрэглээ +Comment[ms]=Tingkatkan keaksesan bagi orang kurang upaya +Comment[mt]=Aċċessibbiltà aħjar għal persuni b'diżabilità +Comment[nb]=Forbedret tilgjengelighet for funksjonshemmede +Comment[nds]=Verbetert den Togang för Behinnerte +Comment[ne]=अक्षम व्यक्तिका लागि पहुँच क्षमता सुधार गर्नुहोस् +Comment[nl]=Verbeterde toegankelijkheid voor gebruikers met een handicap +Comment[nn]=Forbetra tilgjenge for funksjonshemma personar +Comment[nso]=Kaonafatsa botsenelo bja batho bao basa kgonego go itirela +Comment[pa]=ਅਪੰਗ ਵਿਅਕਤੀ ਲਈ ਸੁਧਾਰੀ ਸਹਾਇਤਾ +Comment[pl]=Poprawiona dostępność dla osób niepełnosprawnych +Comment[pt]=Acessibilidade melhorada para pessoas com necessidades especiais +Comment[pt_BR]=Melhora a acessibilidade para pessoas com deficiência +Comment[ro]=Îmbunătățește accesibilitate KDE pentru persoanele cu handicap +Comment[ru]=Специальные возможности для людей с физическими недостатками +Comment[rw]=Kongera ukugerwaho kw'abantu bahagaritswe +Comment[se]=Álkkibut geavaheapmi doaimmahehttejuvvon olbmuide +Comment[sk]=Zlepšenie prístupnosti pre postihnutých používateľov +Comment[sl]=Izboljšana dostopnost za prizadete osebe +Comment[sr]=Унапређује приступачност за хендикепиране особе +Comment[sr@Latn]=Unapređuje pristupačnost za hendikepirane osobe +Comment[ss]=Phucula kufinyelela kwebantfu labachwalile +Comment[sv]=Förbättrad tillgänglighet för handikappade personer +Comment[ta]=பார்க்க முடியாதவர்களுக்கு அணுகலை அதிகப்படுத்தவும் +Comment[tg]=Имкониятҳои махсус барои одамони нуқсони ҷисмонӣ +Comment[th]=ทำให้ความสามารถในการใช้งาน สำหรับผู้พิการดีขึ้น +Comment[tr]=Görme sorunu olanlar için erişilebilirlik seçenekleri +Comment[tt]=Ğäriplär öçen uñaylıqlar +Comment[uk]=Підвищення зручності для інвалідів +Comment[uz]=Nogiron kishilar uchun qulayliklar +Comment[uz@cyrillic]=Ногирон кишилар учун қулайликлар +Comment[ven]=Khwinifhadzani madzhenele uitela vhathu vha zwihole +Comment[vi]=Hỗ trợ người tàn tật +Comment[wa]=Amidrêye l' accessibilité po les mesplotchès djins +Comment[xh]=Phucula unikekezeleko lwabantu abakhubazekileyo +Comment[zh_CN]=方便残疾人使用的辅助功能 +Comment[zh_TW]=方便傷殘人士使用 +Comment[zu]=Ukwenza ukungena kwabantu abakhubazekile kube lula + +Keywords=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[af]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num bordjie +Keywords[az]=yetişmə,yetişmə qabiliyyəti,kar,əlil,çən,eşidilə bilən çən,görünür çən,Klaviatura,düymələr,yapışqan düymələr,hoppanan düymələr,yavaş düymələr,siçan yönləndirməsi,num pad +Keywords[be]=доступ,даступнасць,званок,гукавы сігнал,бачны сігнал,клавіятура,клавішы,"ліпучыя" клавішы,"рухомыя" клавішы,марудныя клавішы,навігацыя мышшу,лічбавая клавіятура,access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[bg]=достъп, увреждания, равностоен, равноправен, зрителни, зрителен, без зрение, access, accessibility, deaf, impaired, bell, audible bell, visible bell, Keyboard, keys, sticky keys, bounce keys, slow keys, mouse navigation, num pad +Keywords[ca]=accés,accessibilitat,sord,disminuït,timbre,timbre audible,timbre visible,Teclat,tecles,tecles apegaloses,tecles de repetició,tecles lentes,navegació del ratolí,teclat numèric +Keywords[cs]=Zpřístupnění,Hluchý,Slepý,Postižený,Zvonek,Slyšitelný zvonek,Viditelný zvonek,Klávesnice,Pomalé klávesy,Navigace myši,Num pad +Keywords[csb]=przistãp,przistãpnosc,głëchy,zwónk,słëszalny zwónk widzalny zwónk,klawiatura,klawisze,przëklejone klawisze,odbijanié klawiszów,pòwólné klawisze,nawigacëjô mëszą,numericznô klawiatura +Keywords[cy]=mynediad,hygyrchedd,byddar,cloch,cloch clywadwy,cloch gweladwy,bysellfwrdd,allweddell,bysell,bysell gludog,bysell sponcio,bysell araf,llywio llygoden,pad rhif +Keywords[da]=adgang,tilgængelighed,døv,handicappet,klokke,hørbar klokke,synlig klokke,Tastatur,taster,klæbrige taster,bounce-taster,langsomme taster,musenavigering,numerisk tastatur +Keywords[de]=Behinderung,Maussteuerung,Signale,Tastatur,Tasten,Taubheit,Verlangsamte Tasten,Zahlenblock,Zugang,Zugangshilfen +Keywords[el]=πρόσβαση,προσιτότητα,κωφός,impaired,κουδούνι,ακουστή ειδοποίηση,ορατή ειδοποίηση,Πληκτρολόγιο,πλήκτρα,κολλημένα πλήκτρα,πλήκτρα αναπήδησης,αργά πλήκτρα,πλοήγηση ποντικιού,αριθμητικό πληκτρολόγιο +Keywords[eo]=aliro,handikapito,malhelpito,pepo,videbla pepo,klavaro,klavoj,klavfikso, musnavigado,nombroklavaro +Keywords[es]=acceso,accesibilidad,sordo,disminuido,timbre,timbre audible,timbre visible,Teclado,teclas,teclas pegajosas,teclas de golpe,teclas lentas,navegación del ratón,teclado numérico +Keywords[et]=juurdepääs,kurt,puue,puudega,signaal,kuuldav signaal,visuaalne signaal,klaviatuur,klahvid,kleepuvad klahvid,põrkavad klahvid,aeglased klahvid,hiire liigutamine,numbriklaviatuur +Keywords[eu]=sarrera,erabilerraztasuna,gorra,elbarria,ezkila,ezkila entzungarria, ezkila ikusgarria,Teklatua,teklak,tekla itsaskorrak, bounce teklak,tekla geldoak,sagu bidezko arakaketa,tekla numerikoak +Keywords[fa]=دستیابی، دستیابی‌پذیری، ناشنوا، معلول، زنگ، زنگ شنیدنی، زنگ مرئی، صفحه کلید، کلیدها، کلیدهای چسبناک، کلیدهای واگشت، کلیدهای کند، ناوش موشی، صفحه اعداد +Keywords[fi]=käytettävyys,esteettömyys,kuuro,vammautunut,virheilmoitus,virheääni,näkyvä virheilmoitus,näppäimistö,näppäimet,alas jäävät näppäimet,toistavat näppäimet,hitaat näppäimet,hiirinavigointi,numeronäppäimistö +Keywords[fr]=accès,accessibilité,surdité,sourd,cloche,son,cloche visuelle,cloche sonore,clavier,touches,souris,touches lentes,touches rémanentes,cloche auditive,touches répétées,répétition des touches,auto-maintien des touches,maintien des touches,navigation à la souris,pointeur de souris,émulation du clavier,clavier numérique +Keywords[fy]=tagong,tagonklikens,dôf,handikap,beheind,bel,sinjalearing,sichtbermeldingen,Kaaiboerd,kaaien,kleef kaaien,kaaioanslag,Mûsnavigaasje,num pad,numeryske klavier +Keywords[ga]=rochtain,inrochtaineacht,bodhar,clog,clog inchloiste,clog infheicthe,Méarchlár,eochracha,eochracha greamaitheacha,eochracha preabtha,eochracha go mall,nascleanúint luiche,eochaircheap uimhriúil +Keywords[gl]=aceso,acesibilidade,impar,campá,badalada audíbel,badalada visíbel,teclado,teclas,teclas pegadias,teclas de repetición,teclas lentas,navegación do rato,teclado numérico +Keywords[he]=גישה,נגישות,חירשים,לקויים,פעמון,פעמון נשמע,פעמון חזותי,לוח,מקשים ,מקלדת ,מקשים,מקשים דביקים,מקשים מוקפצים,מקשים אטיים,ניווט עכבר,מקשי מספרים, access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[hi]=एक्सेस, पहुँच,बघिर,दुर्बल,घंटी,सुनने योग्य घंटी,दिखने योग्य घंटी,कुंजीपट,कुंजियाँ, चिपकी (स्टिकी) कुंजी,बाउंस कुंजी,धीमी कुंजी,माउस नेविगेशन,न्यूम पैड +Keywords[hr]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,pristup,pristupačnost,gluh,gluhoća,oštećenje,zvono,zvuk zvona,vidljivo zvono,tipkovnica,tipke,odbijanje tipki,spore tipke,navigacija mišem,numeričke tipke +Keywords[hu]=hozzáférés,segédeszközök,süket,fogyatékos,csengő,hallható csengetés,látható csengetés,billentyűzet,billentyűk,ragadós billentyűk,visszaugró billentyűk,lassú billentyűk,egérkezelés,numerikus billentyűzet +Keywords[is]=aðgangur,aðgengi,heyrnarlaus,fatlaður,píp,bjalla,sjáanleg bjalla,lyklaborð,takkar,músarnotkun,talnaborð +Keywords[it]=accesso,accessibilità,non udenti,portatori di handicap,campanella,campanella udibile,campanella visibile,tastiera,tasti,permanenza dei tasti,pressione ravvicinata dei tasti,rallentamento dei tasti,navigazione mouse,tastierino numerico +Keywords[ja]=アクセス,アクセシビリティ,聾唖,障害,ベル,音声ベル,視覚ベル,キーボート,キー,スティッキーキー,バウンスキー,スローキー,マウス補助,数字パッド +Keywords[km]=ចូល​ដំណើរការ,មធ្យោបាយ​ងាយស្រួល,ថ្លង់,ពិការ,កណ្ដឹង,កណ្ដឹង​ឭ,កណ្ដឹង​មើល​ឃើញ,ក្ដារចុច,គ្រាប់ចុច,គ្រាប់ចុច​ស្អិត,គ្រាប់ចុច​លោត,គ្រាប់ចុច​យឺត,ការ​រុករក​កណ្ដុរ,បន្ទះ​លេខ +Keywords[lt]=prieinamumas,kurčias,kurčnebylys,neįgalus,skambutis,girdimas,matomas skambutis,klaviatūra,mygtukai,prisegti mygtukai,lėti mygtukai,navigacija su pele +Keywords[lv]=pieeja,pieejamība,kurls,vājināts,zvans,dzirdams zvans,redzams zvans,Tastatūra,taustiņi,salīmētie taustiņi,elastīgie taustiņi,lēnie taustiņi,peles navigācija,num pads +Keywords[mk]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,пристап,пристапност,глув,хендикепиран,ѕвонче,звучно ѕвонче,визуелно ѕвонче,Тастатура,копчиња,лепливи копчиња,отскочни копчиња,бавни копчиња,навигација со глушецот,тастатура со бројки +Keywords[mn]=Гар,Гэмтэл,Дүлий,Сигнал,Товчилуур,Тооны хэсэг,Хандалт,Хулганы жолоодлого,Хэрэглэх тохь, Удаашруулсан товчилуур +Keywords[mt]=access,accessibility,aċċessibbiltà,deaf,trux,truxa,torox,impaired,ħadikappat,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[nb]=tilgang,tilgjengelighet,døv,handikappet,lyd,signal,bjelle,synlig signal,tastatur,taster,faste valgtaster,trege taster,filtertaster,musnavigering,numerisk tastatur +Keywords[nds]=Togang,accessibility,doof,Behinnerte,Pingel,höörbore Pingel,Ogenpingel,Tastatuur,Tasten,backige Tasten,springen Tasten,langsam Tasten,Muusnavigatschoon,Tallenblock +Keywords[ne]=पहुँच, पहुँचयोग्यता, डिफ, बिग्रेको, बेल, सुन्न सकिने बेल, हेर्न सकिने बेल, कुञ्जीपाटी, कुञ्जीहरू, टाँसिने कुञ्जीहरू, उफ्रिने कुञ्जीहरू, ढिलो कुञ्जीहरू, माउस नेभिगेसन, नम प्याड +Keywords[nl]=toegang,toegankelijkheid,doof,handicap,gehandicapt,bel,signalering,zichtbare meldingen,Keyboard,toetsenbord,keys,toetsen,vastgeplakte toetsen,toetsenaanslag,muisnavigatie,num pad,numerieke klavier +Keywords[nn]=tilgang,tilgjenge,døv,handikappa,lyd,signal,bjelle,synleg signal,tastatur,tastar,faste modifikasjonstastar,trege tastar,filtertastar,musnavigering,numerisk tastatur +Keywords[nso]=tsenelo,botsenelo,sefofu,kelekantswe,bell,bell yeo e kwagalago, bell yeo e bonagalago,Keyboard,ditobetswa,ditobetswa tseo di tiilego,ditobetswa tsago pampa,ditobetswa tsago nanya,navigation ya legotlo,num pad +Keywords[pa]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,ਕੀ-ਬੋਰਡ,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[pl]=dostęp,dostępność,głuchy,upośledzony,dzwonek,słyszalny dzwonek widzialny dzwonek,klawiatura,klawisze,klejące klawisze,odbijanie klawiszy,powolne klawisze,nawigacja myszą,klawiatura numeryczna +Keywords[pt]=acesso,acessibilidade,surdo,deficiente,campainha,campainha audível,campainha visível,teclado,teclas,teclas 'sticky',teclas 'bounce',teclas lentas,navegação com o rato,num pad +Keywords[pt_BR]=acesso,acessibilidade,surdo,deficiente,campainha,audível,campainha visível, teclado,teclas,teclas persistentes,teclas repetidas,teclas lentas,navegação do mouse,teclado numérico +Keywords[ro]=acces,accesibilitate,surd,handicap,difuzor,audibil,sunet vizibil,tastatură,taste,taste comutator,taste fără repetiție,taste lente,navigare mouse,tastatura numerică +Keywords[ru]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,залипающие клавиши,специальные возможности,клавиши +Keywords[rw]=kugera,ukugerwaho,ikitumva,cyononekaye,inzogera,inzogera yumvikana,inzogera igaragara,mwandikisho,buto,buto zifashe,buto zidunda,iyega ry'imbeba,agacemibare +Keywords[se]=álkkibut,bealljeheapmi,doaimmahehttejuvvon,jietna,signála,oaidnus signála,boallobeavdi,boalut,giddes boalut,sáhpannavigašuvdna,numerálaš boallobeavdi +Keywords[sk]=prístup,prístupnosť,hluchý,postihnutý,zvonček,hlasný zvonček,viditeľný zvonček, klávesnica,klávesy,lepivé klávesy,odrážané klávesy,pomalé klávesy,navigácia myšou,číslice +Keywords[sl]=dostop,dostopnost,gluh,gluhota,prizadetost,zvonec,vidni zvonec,zvonček,tipkovnica,tipke,lepljive tipke,počasne tipke,navigacija miške,numerična tipkovnica,invalidnost,invalid +Keywords[sr]=приступ,приступачност,глув,хендикепиран,звоно,звучно звоно,визуелно звоно,тастатура,тастери,лепљиви тастери,спори тастери,померање миша,нумеричка тастатура +Keywords[sr@Latn]=pristup,pristupačnost,gluv,hendikepiran,zvono,zvučno zvono,vizuelno zvono,tastatura,tasteri,lepljivi tasteri,spori tasteri,pomeranje miša,numerička tastatura +Keywords[sv]=tillgång,tillgänglighet,döv,handikappad,signal,ljudsignal,visuell signal,Tangentbord,tangenter,klistriga tangenter,studsande tangenter,långsamma tangenter,musnavigering,numeriskt tangentbord +Keywords[ta]=அணுகல்,அணுகும் முறை,காது கேளாத,ஆற்றல் குறைந்த,மணியோசை,காதால் கேட்கும் அளவிற்கு மணியோசை,தெரியும் மணியோசை,விசைபலகை,விசைகள்,ஒட்டும் விசைகள்,மீளும் தன்மையுடைய விசைகள்,மெதுவான விசைகள்,சுட்டிநாவிகேஷன்,எண்ணிக்கை அட்டை +Keywords[th]=การเข้าถึง,ความง่ายในการใช้งาน,หูหนวก,บกพร่อง,ออด, ออดใช้ฟัง,ออดใช้ดู,แป้นพิมพ์,ปุ่ม,ปุ่มติดหนึบ,ปุ่มสะท้อน, ปุ่มชะลอ,นำทางโดยเมาส์,แผงปุ่มตัวเลข +Keywords[tr]=erişim,erişilebilirlik,sağır,özürlü,zil,duyulabilir zil,görünür zil,Klavye,tuşlar,yapışkan tuşlar,zıplayan tuşlar,yavaş tuşlar,fare yönlendirmesi,num pad +Keywords[uk]=доступ,доступність,глухий,каліка,дзвінок,аудіодзвінок,відеодзвінок,клавіатура,клавіші,липкі клавіші,пружні клавіші,повільні клавіші,навігація миші,цифрова клавіатура +Keywords[ven]=dzhena,dzheneaho,dzingandevhe,bele,bele i pfalaho,bele i vhonalaho,khiibodo,khii,khii i nambatelaho,khii i fhufhaho,khii i lengaho,lwendo lwa mausu,num pad +Keywords[vi]=truy cập,hỗ trợ người tàn tật,điếc,bị thương,chuông,chuông kêu,chuông rung,bàn phím,phím,phím dính,phím nảy,phím chậm,di chuyển chuột,bàn phím số +Keywords[wa]=accès,accessibilité,sourd,mesplotche,cloke,clotche,veyåve,taprece,tapes,aclapantès tapes,tapes di ridjiblaedje,londjinnès tapes,naiviaedje al sori,num pad,xhilete,etindåve xhilete,veyåve xhilete +Keywords[xh]=nikezela,unikezelo,ayiva,yonakalisiwe,intsimbi,intsimbi evakalayo, intsimbi ebonakalayo,ibhodi yezitshixo,izitshixo,isithixo esincangathi, izitshixo ezilungisiweyo,izitshixo ezinengxolo,izitshixo ezicothayo,indlela yokubeka i mouse endaweni,inkatha ye num +Keywords[zh_CN]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,辅助功能,聋,键盘,粘滞键,撞击键,筛选键,鼠标导航,可视铃声,小键盘 +Keywords[zh_TW]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,使用,聾,鈴聲,聽得見的鈴,看得見的鈴,鍵盤,按鍵,滑鼠導向,數字鍵 +Keywords[zu]=ngena,ukungena,okuthuli,kukhubazekile,insimbi,insimbiezwakalayo, insimbi ebonakalayo,okhiye,okhiye abanamathelayo,okhiyeababhampayo,okhiye abahamba kancane,ukuzula kwe-mouse,num pad + +Categories=Qt;KDE;X-KDE-settings-accessibility; diff --git a/kcontrol/access/kcmaccess.h b/kcontrol/access/kcmaccess.h new file mode 100644 index 000000000..c40152324 --- /dev/null +++ b/kcontrol/access/kcmaccess.h @@ -0,0 +1,111 @@ +/** + * kcmaccess.h + * + * Copyright (c) 2000 Matthias H�zer-Klpfel + * + */ + +#ifndef __kcmaccess_h__ +#define __kcmaccess_h__ + + +#include +#include + + +class QCheckBox; +class QComboBox; +class QLabel; +class QLineEdit; +class QPushButton; +class QRadioButton; +class KColorButton; +class QSlider; +class KNumInput; +class KAboutData; + +class ExtendedIntNumInput : public KIntNumInput +{ + Q_OBJECT + + public: + /** + * Constructs an input control for integer values + * with base 10 and initial value 0. + */ + ExtendedIntNumInput(QWidget *parent=0, const char *name=0); + + /** + * Destructor + */ + virtual ~ExtendedIntNumInput(); + + /** + * @param min minimum value + * @param max maximum value + * @param step step size for the QSlider + * @param slider whether the slider is created or not + */ + void setRange(int min, int max, int step=1, bool slider=true); + + private slots: + void slotSpinValueChanged(int); + void slotSliderValueChanged(int); + + private: + int min, max; + int sliderMax; +}; + +class KAccessConfig : public KCModule +{ + Q_OBJECT + +public: + + KAccessConfig(QWidget *parent = 0L, const char *name = 0L); + virtual ~KAccessConfig(); + + void load(); + void load(bool useDefaults); + void save(); + void defaults(); + +protected slots: + + void configChanged(); + void checkAccess(); + void invertClicked(); + void flashClicked(); + void selectSound(); + void changeFlashScreenColor(); + void configureKNotify(); + +private: + + QCheckBox *systemBell, *customBell, *visibleBell; + QRadioButton *invertScreen, *flashScreen; + QLabel *soundLabel, *colorLabel; + QLineEdit *soundEdit; + QPushButton *soundButton; + KColorButton *colorButton; + ExtendedIntNumInput *durationSlider; + + QCheckBox *stickyKeys, *stickyKeysLock, *stickyKeysAutoOff; + QCheckBox *stickyKeysBeep, *toggleKeysBeep, *kNotifyModifiers; + QPushButton *kNotifyModifiersButton; + + QCheckBox *slowKeys, *bounceKeys; + ExtendedIntNumInput *slowKeysDelay, *bounceKeysDelay; + QCheckBox *slowKeysPressBeep, *slowKeysAcceptBeep; + QCheckBox *slowKeysRejectBeep, *bounceKeysRejectBeep; + + QCheckBox *gestures, *gestureConfirmation; + QCheckBox *timeout; + KIntNumInput *timeoutDelay; + QCheckBox *accessxBeep, *kNotifyAccessX; + QPushButton *kNotifyAccessXButton; +}; + + +#endif diff --git a/kcontrol/access/main.cpp b/kcontrol/access/main.cpp new file mode 100644 index 000000000..a2dd0d5c7 --- /dev/null +++ b/kcontrol/access/main.cpp @@ -0,0 +1,49 @@ + +#include "kaccess.h" +#include +#include +#include + +extern "C" KDE_EXPORT int kdemain(int argc, char * argv[] ) +{ + KAboutData about(I18N_NOOP("kaccess"), I18N_NOOP("KDE Accessibility Tool"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000, Matthias Hoelzer-Kluepfel")); + + about.addAuthor("Matthias Hoelzer-Kluepfel", I18N_NOOP("Author") , "hoelzer@kde.org"); + + KCmdLineArgs::init( argc, argv, &about ); + + if (!KAccessApp::start()) + return 0; + + // verify the Xlib has matching XKB extension + int major = XkbMajorVersion; + int minor = XkbMinorVersion; + if (!XkbLibraryVersion(&major, &minor)) + { + kdError() << "Xlib XKB extension does not match" << endl; + return 1; + } + kdDebug() << "Xlib XKB extension major=" << major << " minor=" << minor << endl; + + // we need an application object for qt_xdisplay() + KAccessApp app; + + // verify the X server has matching XKB extension + // if yes, the XKB extension is initialized + int opcode_rtrn; + int error_rtrn; + int xkb_opcode; + if (!XkbQueryExtension(qt_xdisplay(), &opcode_rtrn, &xkb_opcode, &error_rtrn, + &major, &minor)) + { + kdError() << "X server has not matching XKB extension" << endl; + return 1; + } + kdDebug() << "X server XKB extension major=" << major << " minor=" << minor << endl; + + app.setXkbOpcode(xkb_opcode); + app.disableSessionManagement(); + return app.exec(); +} diff --git a/kcontrol/accessibility/Makefile.am b/kcontrol/accessibility/Makefile.am new file mode 100644 index 000000000..67eb8957a --- /dev/null +++ b/kcontrol/accessibility/Makefile.am @@ -0,0 +1,15 @@ +AM_CPPFLAGS = $(all_includes) +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_accessibility.la + +kcm_accessibility_la_SOURCES = accessibility.cpp accessibilityconfigwidget.ui +kcm_accessibility_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_accessibility_la_LIBADD = $(LIB_KIO) + +noinst_HEADERS = accessibility.h + +xdg_apps_DATA = accessibility.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmaccessibility.pot diff --git a/kcontrol/accessibility/accessibility.cpp b/kcontrol/accessibility/accessibility.cpp new file mode 100644 index 000000000..de7b9953b --- /dev/null +++ b/kcontrol/accessibility/accessibility.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** + accessibility.cpp + KDE Control Accessibility module to control Bell, Keyboard and ?Mouse? + ------------------- + Copyright : (c) 2000 Matthias Hlzer-Klpfel + ------------------- + Original Author: Matthias Hlzer-Klpfel + Contributors: Jos Pablo Ezequiel "Pupeno" Fernndez + Current Maintainer: Jos Pablo Ezequiel "Pupeno" Fernndez + ****************************************************************************/ + +/**************************************************************************** + * * + * 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. * + * * + ****************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "accessibility.moc" + +typedef KGenericFactory AccessibilityFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_accessibility, AccessibilityFactory("kcmaccessibility") ) + +/** + * This function checks if the kaccess daemon needs to be run + * This function will be deprecated since the kaccess daemon will be part of kded + */ +// static bool needToRunKAccessDaemon( KConfig *config ){ +// KConfigGroup group( config, "Bell" ); +// +// if(!group.readBoolEntry("SystemBell", true)){ +// return true; +// } +// if(group.readBoolEntry("ArtsBell", false)){ +// return true; +// } +// if(group.readBoolEntry("VisibleBell", false)){ +// return true; +// } +// return false; // don't need it +// } + +AccessibilityConfig::AccessibilityConfig(QWidget *parent, const char *name, const QStringList &) + : AccessibilityConfigWidget( parent, name){ + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmaccessiblity"), I18N_NOOP("KDE Accessibility Tool"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000, Matthias Hoelzer-Kluepfel")); + + about->addAuthor("Matthias Hoelzer-Kluepfel", I18N_NOOP("Author") , "hoelzer@kde.org"); + about->addAuthor("Jos Pablo Ezequiel Fernndez", I18N_NOOP("Author") , "pupeno@kde.org"); + setAboutData( about ); + + kdDebug() << "Running: AccessibilityConfig::AccessibilityConfig(QWidget *parent, const char *name, const QStringList &)" << endl; + // TODO: set the KURL Dialog to open just audio files + connect( mainTab, SIGNAL(currentChanged(QWidget*)), this, SIGNAL(quickHelpChanged()) ); + load(); +} + + +AccessibilityConfig::~AccessibilityConfig(){ + kdDebug() << "Running: AccessibilityConfig::~AccessibilityConfig()" << endl; +} + +void AccessibilityConfig::load() +{ + load( false ); +} + +void AccessibilityConfig::load( bool useDefaults ) +{ + kdDebug() << "Running: AccessibilityConfig::load()" << endl; + + KConfig *bell = new KConfig("bellrc", true); + + bell->setReadDefaults( useDefaults ); + + bell->setGroup("General"); + systemBell->setChecked(bell->readBoolEntry("SystemBell", false)); + customBell->setChecked(bell->readBoolEntry("CustomBell", false)); + visibleBell->setChecked(bell->readBoolEntry("VisibleBell", false)); + + bell->setGroup("CustomBell"); + soundToPlay->setURL(bell->readPathEntry("Sound", "")); + + bell->setGroup("Visible"); + invertScreen->setChecked(bell->readBoolEntry("Invert", true)); + flashScreen->setChecked(bell->readBoolEntry("Flash", false)); + // TODO: There has to be a cleaner way. + QColor *redColor = new QColor(Qt::red); + flashScreenColor->setColor(bell->readColorEntry("FlashColor", redColor)); + delete redColor; + visibleBellDuration->setValue(bell->readNumEntry("Duration", 500)); + + delete bell; + emit changed( useDefaults ); +} + + +void AccessibilityConfig::save(){ + kdDebug() << "Running: AccessibilityConfig::save()" << endl; + + KConfig *bell = new KConfig("bellrc"); + + bell->setGroup("General"); + bell->writeEntry("SystemBell", systemBell->isChecked()); + bell->writeEntry("CustomBell", customBell->isChecked()); + bell->writeEntry("VisibleBell", visibleBell->isChecked()); + + bell->setGroup("CustomBell"); + bell->writePathEntry("Sound", soundToPlay->url()); + + bell->setGroup("Visible"); + bell->writeEntry("Invert", invertScreen->isChecked()); + bell->writeEntry("Flash", flashScreen->isChecked()); + bell->writeEntry("FlashColor", flashScreenColor->color()); + bell->writeEntry("Duration", visibleBellDuration->value()); + + bell->sync(); + delete bell; +} + + +void AccessibilityConfig::defaults() +{ + load( true ); +} diff --git a/kcontrol/accessibility/accessibility.desktop b/kcontrol/accessibility/accessibility.desktop new file mode 100644 index 000000000..2295b85c6 --- /dev/null +++ b/kcontrol/accessibility/accessibility.desktop @@ -0,0 +1,239 @@ +[Desktop Entry] +Exec=kcmshell accessibility +Icon=access +Type=Application + + +X-KDE-Library=accessibility +X-KDE-Factoryname=accessibility +X-KDE-ParentApp=kcontrol + +Name=Accessibility +Name[af]=Toeganklikheid +Name[ar]=تسهيل الوصول +Name[az]=Yetişmə Qabiliyyəti +Name[be]=Даступнасць +Name[bg]=Равностоен достъп +Name[bn]=সহায়ক প্রযুক্তি +Name[br]=Haezadusted +Name[bs]=Pristupačnost +Name[ca]=Accessibilitat +Name[cs]=Zpřístupnění +Name[csb]=Pòmòce przistãpù +Name[cy]=Hygyrchedd +Name[da]=Tilgængelighed +Name[de]=Zugangshilfen +Name[el]=Προσιτότητα +Name[eo]=Alirebleco +Name[es]=Accesibilidad +Name[et]=Hõlbustus +Name[eu]=Erabilerraztasuna +Name[fa]=دستیابی‌پذیری +Name[fi]=Helppokäyttötoiminnot +Name[fr]=Accessibilité +Name[fy]=Tagonklikens +Name[ga]=Inrochtaineacht +Name[gl]=Accesibilidade +Name[he]=נגישות +Name[hi]=पहुँच +Name[hr]=Pristupačnost +Name[hu]=Kezelési segítség +Name[id]=Aksesibiliti +Name[is]=Aðgengi +Name[it]=Accessibilità +Name[ja]=アクセシビリティ +Name[ka]=სპეციალური შესაძლბლობები +Name[kk]=Арнайы мүмкіндіктер +Name[km]=ភាព​អាច​ចូល​ដំណើរការ​បាន +Name[ko]=내게 필요한 설정 +Name[lo]=ຄວາມສາມາດໃນການໃຊ້ງານ +Name[lt]=Prieinamumas +Name[lv]=Pieejamība +Name[mk]=Пристапливост +Name[mn]=Хэрэглэх тохь +Name[ms]=Kebolehcapaian +Name[mt]=Aċċessibiltà +Name[nb]=Tilgjengelighet +Name[nds]=Behinnertenhülp +Name[ne]=पहुँचता +Name[nl]=Toegankelijkheid +Name[nn]=Tilgjenge +Name[nso]=Botsenelo +Name[oc]=Accessibilitat +Name[pa]=ਸਹੂਲਤਾਂ +Name[pl]=Dostępność +Name[pt]=Acessibilidade +Name[pt_BR]=Acessibilidade +Name[ro]=Accesibilitate +Name[ru]=Специальные возможности +Name[rw]=Ukugerwaho +Name[se]=Álkkibut geavaheapmi +Name[sk]=Prístupnosť +Name[sl]=Dostopnost +Name[sr]=Приступачност +Name[sr@Latn]=Pristupačnost +Name[ss]=Kutfolakala kalula +Name[sv]=Handikappstöd +Name[ta]=அணுகல் +Name[te]=అందుబాటు +Name[tg]=Имконпазирӣ +Name[th]=ตัวช่วยในการใช้งาน +Name[tr]=Erişilebilirlik +Name[tt]=Qulaylıq +Name[uk]=Доступність +Name[uz]=Qulayliklar +Name[uz@cyrillic]=Қулайликлар +Name[ven]=Dzheneaho +Name[vi]=Hỗ trợ người tàn tật +Name[wa]=Accessibilité +Name[xh]=Unikezelo +Name[zh_CN]=辅助 +Name[zh_TW]=無障礙輔助 +Name[zu]=Ukungena + +Comment=Improve accessibility for disabled persons +Comment[af]=Verbeter toeganklikheid vir gestremde persone +Comment[ar]=تسهيل الاستخدام لذوي الاحتياجات الخاصة +Comment[az]=Yetişmə qabiliyyəti zəyif olanların həyatını asanlaşdırar +Comment[be]=Павялічвае даступнасць для людзей з фізічнымі адхіленнямі +Comment[bg]=Настройване на достъпа за хора с увреждания +Comment[bn]=অসমর্থ ব্যবহারকারীদের সহায়তা করার প্রযুক্তি +Comment[bs]=Bolja pristupačnost za osobe sa nedostacima +Comment[ca]=Accessibilitat millorada per a persones discapacitades +Comment[cs]=Zlepšení přístupnosti pro osoby s postižením +Comment[csb]=Pòprôwionô przistãpnosc dlô niefùlsprôwnëch lëdzi +Comment[cy]=Gwella hygyrchedd i bobl anabl +Comment[da]=Forbedr tilgængelighed for handicappede personer +Comment[de]=Verbesserte Benutzbarkeit für behinderte Menschen +Comment[el]=Βελτίωση της προσιτότητας για άτομα με ειδικές ανάγκες +Comment[eo]=Plibonigita alirebleco por handikapitoj +Comment[es]=Mejorar accesibilidad para discapacitados +Comment[et]=Puuetega inimestele mõeldud seaded +Comment[eu]=Erabilerraztasuna hobetzen du pertsona elbarrientzat +Comment[fa]=بهبود دستیابی‌پذیری برای اشخاص ناتوان +Comment[fi]=Käyttöä helpottavia asetuksia +Comment[fr]=Accessibilité améliorée pour les personnes handicapées +Comment[fy]=Ferbeterde tagonklikens foar brûkers mei in handikap +Comment[ga]=Feabhsaigh an inrochtaineacht do dhaoine míchumasaithe +Comment[gl]=Acesibilidade mellorada para persoas con discapacidades +Comment[he]=שיפור הנגישות עבור אנשים עם מגבלות +Comment[hi]=विकलांग व्यक्तियों के लिए पहुँच बेहतर बनाए +Comment[hr]=Unaprijedite pristupačnost osobama s invaliditetom +Comment[hu]=A számítógép kezelését segítő eszközök fogyatékosoknak +Comment[is]=Endurbætt aðgengi fyrir þá sem þurfa +Comment[it]=Accessibilità migliorata per le persone disabili +Comment[ja]=障害のある方達のためのアクセス改善 +Comment[ka]=ფიზიკური ნაკლოვანებბის მქონი ხალხისთვის სპეციალური შესაძლბლობები +Comment[kk]=Мүмкіншіліктері шектеулі адамдарға көмек +Comment[km]=បង្កើន​មធ្យោបាយ​ងាយស្រួល​សម្រាប់​មនុស្ស​ពិការ +Comment[ko]=장애인들을 위하여 접근성을 향상시킵니다 +Comment[lo]=ປັບຄ່າຄວາມສາມາດໃນການໃຊ້ງານສຳຫລັບຜູ້ທີ່ມີຄວາມສາມາດ +Comment[lt]=Pagerintas prieinamumas neįgaliems asmenims +Comment[lv]=Uzlabo pieejamību cilvekiem ar īpašām vajadzībām +Comment[mk]=Ја подобрува пристапливоста за хендикепирани лица +Comment[mn]=Гэмтэлтэй хүнд зориулан сайжруулсан хэрэглээ +Comment[ms]=Tingkatkan keaksesan bagi orang kurang upaya +Comment[mt]=Aċċessibbiltà aħjar għal persuni b'diżabilità +Comment[nb]=Forbedret tilgjengelighet for funksjonshemmede +Comment[nds]=Verbetert den Togang för Behinnerte +Comment[ne]=अक्षम व्यक्तिका लागि पहुँच क्षमता सुधार गर्नुहोस् +Comment[nl]=Verbeterde toegankelijkheid voor gebruikers met een handicap +Comment[nn]=Forbetra tilgjenge for funksjonshemma personar +Comment[nso]=Kaonafatsa botsenelo bja batho bao basa kgonego go itirela +Comment[pa]=ਅਪੰਗ ਵਿਅਕਤੀ ਲਈ ਸੁਧਾਰੀ ਸਹਾਇਤਾ +Comment[pl]=Poprawiona dostępność dla osób niepełnosprawnych +Comment[pt]=Acessibilidade melhorada para pessoas com necessidades especiais +Comment[pt_BR]=Melhora a acessibilidade para pessoas com deficiência +Comment[ro]=Îmbunătățește accesibilitate KDE pentru persoanele cu handicap +Comment[ru]=Специальные возможности для людей с физическими недостатками +Comment[rw]=Kongera ukugerwaho kw'abantu bahagaritswe +Comment[se]=Álkkibut geavaheapmi doaimmahehttejuvvon olbmuide +Comment[sk]=Zlepšenie prístupnosti pre postihnutých používateľov +Comment[sl]=Izboljšana dostopnost za prizadete osebe +Comment[sr]=Унапређује приступачност за хендикепиране особе +Comment[sr@Latn]=Unapređuje pristupačnost za hendikepirane osobe +Comment[ss]=Phucula kufinyelela kwebantfu labachwalile +Comment[sv]=Förbättrad tillgänglighet för handikappade personer +Comment[ta]=பார்க்க முடியாதவர்களுக்கு அணுகலை அதிகப்படுத்தவும் +Comment[tg]=Имкониятҳои махсус барои одамони нуқсони ҷисмонӣ +Comment[th]=ทำให้ความสามารถในการใช้งาน สำหรับผู้พิการดีขึ้น +Comment[tr]=Görme sorunu olanlar için erişilebilirlik seçenekleri +Comment[tt]=Ğäriplär öçen uñaylıqlar +Comment[uk]=Підвищення зручності для інвалідів +Comment[uz]=Nogiron kishilar uchun qulayliklar +Comment[uz@cyrillic]=Ногирон кишилар учун қулайликлар +Comment[ven]=Khwinifhadzani madzhenele uitela vhathu vha zwihole +Comment[vi]=Hỗ trợ người tàn tật +Comment[wa]=Amidrêye l' accessibilité po les mesplotchès djins +Comment[xh]=Phucula unikekezeleko lwabantu abakhubazekileyo +Comment[zh_CN]=方便残疾人使用的辅助功能 +Comment[zh_TW]=方便傷殘人士使用 +Comment[zu]=Ukwenza ukungena kwabantu abakhubazekile kube lula + +Keywords=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[af]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num bordjie +Keywords[az]=yetişmə,yetişmə qabiliyyəti,kar,əlil,çən,eşidilə bilən çən,görünür çən,Klaviatura,düymələr,yapışqan düymələr,hoppanan düymələr,yavaş düymələr,siçan yönləndirməsi,num pad +Keywords[be]=доступ,даступнасць,званок,гукавы сігнал,бачны сігнал,клавіятура,клавішы,"ліпучыя" клавішы,"рухомыя" клавішы,марудныя клавішы,навігацыя мышшу,лічбавая клавіятура,access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[bg]=достъп, увреждания, равностоен, равноправен, зрителни, зрителен, без зрение, access, accessibility, deaf, impaired, bell, audible bell, visible bell, Keyboard, keys, sticky keys, bounce keys, slow keys, mouse navigation, num pad +Keywords[ca]=accés,accessibilitat,sord,disminuït,timbre,timbre audible,timbre visible,Teclat,tecles,tecles apegaloses,tecles de repetició,tecles lentes,navegació del ratolí,teclat numèric +Keywords[cs]=Zpřístupnění,Hluchý,Slepý,Postižený,Zvonek,Slyšitelný zvonek,Viditelný zvonek,Klávesnice,Pomalé klávesy,Navigace myši,Num pad +Keywords[csb]=przistãp,przistãpnosc,głëchy,zwónk,słëszalny zwónk widzalny zwónk,klawiatura,klawisze,przëklejone klawisze,odbijanié klawiszów,pòwólné klawisze,nawigacëjô mëszą,numericznô klawiatura +Keywords[cy]=mynediad,hygyrchedd,byddar,cloch,cloch clywadwy,cloch gweladwy,bysellfwrdd,allweddell,bysell,bysell gludog,bysell sponcio,bysell araf,llywio llygoden,pad rhif +Keywords[da]=adgang,tilgængelighed,døv,handicappet,klokke,hørbar klokke,synlig klokke,Tastatur,taster,klæbrige taster,bounce-taster,langsomme taster,musenavigering,numerisk tastatur +Keywords[de]=Behinderung,Maussteuerung,Signale,Tastatur,Tasten,Taubheit,Verlangsamte Tasten,Zahlenblock,Zugang,Zugangshilfen +Keywords[el]=πρόσβαση,προσιτότητα,κωφός,impaired,κουδούνι,ακουστή ειδοποίηση,ορατή ειδοποίηση,Πληκτρολόγιο,πλήκτρα,κολλημένα πλήκτρα,πλήκτρα αναπήδησης,αργά πλήκτρα,πλοήγηση ποντικιού,αριθμητικό πληκτρολόγιο +Keywords[eo]=aliro,handikapito,malhelpito,pepo,videbla pepo,klavaro,klavoj,klavfikso, musnavigado,nombroklavaro +Keywords[es]=acceso,accesibilidad,sordo,disminuido,timbre,timbre audible,timbre visible,Teclado,teclas,teclas pegajosas,teclas de golpe,teclas lentas,navegación del ratón,teclado numérico +Keywords[et]=juurdepääs,kurt,puue,puudega,signaal,kuuldav signaal,visuaalne signaal,klaviatuur,klahvid,kleepuvad klahvid,põrkavad klahvid,aeglased klahvid,hiire liigutamine,numbriklaviatuur +Keywords[eu]=sarrera,erabilerraztasuna,gorra,elbarria,ezkila,ezkila entzungarria, ezkila ikusgarria,Teklatua,teklak,tekla itsaskorrak, bounce teklak,tekla geldoak,sagu bidezko arakaketa,tekla numerikoak +Keywords[fa]=دستیابی، دستیابی‌پذیری، ناشنوا، معلول، زنگ، زنگ شنیدنی، زنگ مرئی، صفحه کلید، کلیدها، کلیدهای چسبناک، کلیدهای واگشت، کلیدهای کند، ناوش موشی، صفحه اعداد +Keywords[fi]=käytettävyys,esteettömyys,kuuro,vammautunut,virheilmoitus,virheääni,näkyvä virheilmoitus,näppäimistö,näppäimet,alas jäävät näppäimet,toistavat näppäimet,hitaat näppäimet,hiirinavigointi,numeronäppäimistö +Keywords[fr]=accès,accessibilité,surdité,sourd,cloche,son,cloche visuelle,cloche sonore,clavier,touches,souris,touches lentes,touches rémanentes,cloche auditive,touches répétées,répétition des touches,auto-maintien des touches,maintien des touches,navigation à la souris,pointeur de souris,émulation du clavier,clavier numérique +Keywords[fy]=tagong,tagonklikens,dôf,handikap,beheind,bel,sinjalearing,sichtbermeldingen,Kaaiboerd,kaaien,kleef kaaien,kaaioanslag,Mûsnavigaasje,num pad,numeryske klavier +Keywords[ga]=rochtain,inrochtaineacht,bodhar,clog,clog inchloiste,clog infheicthe,Méarchlár,eochracha,eochracha greamaitheacha,eochracha preabtha,eochracha go mall,nascleanúint luiche,eochaircheap uimhriúil +Keywords[gl]=aceso,acesibilidade,impar,campá,badalada audíbel,badalada visíbel,teclado,teclas,teclas pegadias,teclas de repetición,teclas lentas,navegación do rato,teclado numérico +Keywords[he]=גישה,נגישות,חירשים,לקויים,פעמון,פעמון נשמע,פעמון חזותי,לוח,מקשים ,מקלדת ,מקשים,מקשים דביקים,מקשים מוקפצים,מקשים אטיים,ניווט עכבר,מקשי מספרים, access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[hi]=एक्सेस, पहुँच,बघिर,दुर्बल,घंटी,सुनने योग्य घंटी,दिखने योग्य घंटी,कुंजीपट,कुंजियाँ, चिपकी (स्टिकी) कुंजी,बाउंस कुंजी,धीमी कुंजी,माउस नेविगेशन,न्यूम पैड +Keywords[hr]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,pristup,pristupačnost,gluh,gluhoća,oštećenje,zvono,zvuk zvona,vidljivo zvono,tipkovnica,tipke,odbijanje tipki,spore tipke,navigacija mišem,numeričke tipke +Keywords[hu]=hozzáférés,segédeszközök,süket,fogyatékos,csengő,hallható csengetés,látható csengetés,billentyűzet,billentyűk,ragadós billentyűk,visszaugró billentyűk,lassú billentyűk,egérkezelés,numerikus billentyűzet +Keywords[is]=aðgangur,aðgengi,heyrnarlaus,fatlaður,píp,bjalla,sjáanleg bjalla,lyklaborð,takkar,músarnotkun,talnaborð +Keywords[it]=accesso,accessibilità,non udenti,portatori di handicap,campanella,campanella udibile,campanella visibile,tastiera,tasti,permanenza dei tasti,pressione ravvicinata dei tasti,rallentamento dei tasti,navigazione mouse,tastierino numerico +Keywords[ja]=アクセス,アクセシビリティ,聾唖,障害,ベル,音声ベル,視覚ベル,キーボート,キー,スティッキーキー,バウンスキー,スローキー,マウス補助,数字パッド +Keywords[km]=ចូល​ដំណើរការ,មធ្យោបាយ​ងាយស្រួល,ថ្លង់,ពិការ,កណ្ដឹង,កណ្ដឹង​ឭ,កណ្ដឹង​មើល​ឃើញ,ក្ដារចុច,គ្រាប់ចុច,គ្រាប់ចុច​ស្អិត,គ្រាប់ចុច​លោត,គ្រាប់ចុច​យឺត,ការ​រុករក​កណ្ដុរ,បន្ទះ​លេខ +Keywords[lt]=prieinamumas,kurčias,kurčnebylys,neįgalus,skambutis,girdimas,matomas skambutis,klaviatūra,mygtukai,prisegti mygtukai,lėti mygtukai,navigacija su pele +Keywords[lv]=pieeja,pieejamība,kurls,vājināts,zvans,dzirdams zvans,redzams zvans,Tastatūra,taustiņi,salīmētie taustiņi,elastīgie taustiņi,lēnie taustiņi,peles navigācija,num pads +Keywords[mk]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,пристап,пристапност,глув,хендикепиран,ѕвонче,звучно ѕвонче,визуелно ѕвонче,Тастатура,копчиња,лепливи копчиња,отскочни копчиња,бавни копчиња,навигација со глушецот,тастатура со бројки +Keywords[mn]=Гар,Гэмтэл,Дүлий,Сигнал,Товчилуур,Тооны хэсэг,Хандалт,Хулганы жолоодлого,Хэрэглэх тохь, Удаашруулсан товчилуур +Keywords[mt]=access,accessibility,aċċessibbiltà,deaf,trux,truxa,torox,impaired,ħadikappat,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[nb]=tilgang,tilgjengelighet,døv,handikappet,lyd,signal,bjelle,synlig signal,tastatur,taster,faste valgtaster,trege taster,filtertaster,musnavigering,numerisk tastatur +Keywords[nds]=Togang,accessibility,doof,Behinnerte,Pingel,höörbore Pingel,Ogenpingel,Tastatuur,Tasten,backige Tasten,springen Tasten,langsam Tasten,Muusnavigatschoon,Tallenblock +Keywords[ne]=पहुँच, पहुँचयोग्यता, डिफ, बिग्रेको, बेल, सुन्न सकिने बेल, हेर्न सकिने बेल, कुञ्जीपाटी, कुञ्जीहरू, टाँसिने कुञ्जीहरू, उफ्रिने कुञ्जीहरू, ढिलो कुञ्जीहरू, माउस नेभिगेसन, नम प्याड +Keywords[nl]=toegang,toegankelijkheid,doof,handicap,gehandicapt,bel,signalering,zichtbare meldingen,Keyboard,toetsenbord,keys,toetsen,vastgeplakte toetsen,toetsenaanslag,muisnavigatie,num pad,numerieke klavier +Keywords[nn]=tilgang,tilgjenge,døv,handikappa,lyd,signal,bjelle,synleg signal,tastatur,tastar,faste modifikasjonstastar,trege tastar,filtertastar,musnavigering,numerisk tastatur +Keywords[nso]=tsenelo,botsenelo,sefofu,kelekantswe,bell,bell yeo e kwagalago, bell yeo e bonagalago,Keyboard,ditobetswa,ditobetswa tseo di tiilego,ditobetswa tsago pampa,ditobetswa tsago nanya,navigation ya legotlo,num pad +Keywords[pa]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,ਕੀ-ਬੋਰਡ,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad +Keywords[pl]=dostęp,dostępność,głuchy,upośledzony,dzwonek,słyszalny dzwonek widzialny dzwonek,klawiatura,klawisze,klejące klawisze,odbijanie klawiszy,powolne klawisze,nawigacja myszą,klawiatura numeryczna +Keywords[pt]=acesso,acessibilidade,surdo,deficiente,campainha,campainha audível,campainha visível,teclado,teclas,teclas 'sticky',teclas 'bounce',teclas lentas,navegação com o rato,num pad +Keywords[pt_BR]=acesso,acessibilidade,surdo,deficiente,campainha,audível,campainha visível, teclado,teclas,teclas persistentes,teclas repetidas,teclas lentas,navegação do mouse,teclado numérico +Keywords[ro]=acces,accesibilitate,surd,handicap,difuzor,audibil,sunet vizibil,tastatură,taste,taste comutator,taste fără repetiție,taste lente,navigare mouse,tastatura numerică +Keywords[ru]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,залипающие клавиши,специальные возможности,клавиши +Keywords[rw]=kugera,ukugerwaho,ikitumva,cyononekaye,inzogera,inzogera yumvikana,inzogera igaragara,mwandikisho,buto,buto zifashe,buto zidunda,iyega ry'imbeba,agacemibare +Keywords[se]=álkkibut,bealljeheapmi,doaimmahehttejuvvon,jietna,signála,oaidnus signála,boallobeavdi,boalut,giddes boalut,sáhpannavigašuvdna,numerálaš boallobeavdi +Keywords[sk]=prístup,prístupnosť,hluchý,postihnutý,zvonček,hlasný zvonček,viditeľný zvonček, klávesnica,klávesy,lepivé klávesy,odrážané klávesy,pomalé klávesy,navigácia myšou,číslice +Keywords[sl]=dostop,dostopnost,gluh,gluhota,prizadetost,zvonec,vidni zvonec,zvonček,tipkovnica,tipke,lepljive tipke,počasne tipke,navigacija miške,numerična tipkovnica,invalidnost,invalid +Keywords[sr]=приступ,приступачност,глув,хендикепиран,звоно,звучно звоно,визуелно звоно,тастатура,тастери,лепљиви тастери,спори тастери,померање миша,нумеричка тастатура +Keywords[sr@Latn]=pristup,pristupačnost,gluv,hendikepiran,zvono,zvučno zvono,vizuelno zvono,tastatura,tasteri,lepljivi tasteri,spori tasteri,pomeranje miša,numerička tastatura +Keywords[sv]=tillgång,tillgänglighet,döv,handikappad,signal,ljudsignal,visuell signal,Tangentbord,tangenter,klistriga tangenter,studsande tangenter,långsamma tangenter,musnavigering,numeriskt tangentbord +Keywords[ta]=அணுகல்,அணுகும் முறை,காது கேளாத,ஆற்றல் குறைந்த,மணியோசை,காதால் கேட்கும் அளவிற்கு மணியோசை,தெரியும் மணியோசை,விசைபலகை,விசைகள்,ஒட்டும் விசைகள்,மீளும் தன்மையுடைய விசைகள்,மெதுவான விசைகள்,சுட்டிநாவிகேஷன்,எண்ணிக்கை அட்டை +Keywords[th]=การเข้าถึง,ความง่ายในการใช้งาน,หูหนวก,บกพร่อง,ออด, ออดใช้ฟัง,ออดใช้ดู,แป้นพิมพ์,ปุ่ม,ปุ่มติดหนึบ,ปุ่มสะท้อน, ปุ่มชะลอ,นำทางโดยเมาส์,แผงปุ่มตัวเลข +Keywords[tr]=erişim,erişilebilirlik,sağır,özürlü,zil,duyulabilir zil,görünür zil,Klavye,tuşlar,yapışkan tuşlar,zıplayan tuşlar,yavaş tuşlar,fare yönlendirmesi,num pad +Keywords[uk]=доступ,доступність,глухий,каліка,дзвінок,аудіодзвінок,відеодзвінок,клавіатура,клавіші,липкі клавіші,пружні клавіші,повільні клавіші,навігація миші,цифрова клавіатура +Keywords[ven]=dzhena,dzheneaho,dzingandevhe,bele,bele i pfalaho,bele i vhonalaho,khiibodo,khii,khii i nambatelaho,khii i fhufhaho,khii i lengaho,lwendo lwa mausu,num pad +Keywords[vi]=truy cập,hỗ trợ người tàn tật,điếc,bị thương,chuông,chuông kêu,chuông rung,bàn phím,phím,phím dính,phím nảy,phím chậm,di chuyển chuột,bàn phím số +Keywords[wa]=accès,accessibilité,sourd,mesplotche,cloke,clotche,veyåve,taprece,tapes,aclapantès tapes,tapes di ridjiblaedje,londjinnès tapes,naiviaedje al sori,num pad,xhilete,etindåve xhilete,veyåve xhilete +Keywords[xh]=nikezela,unikezelo,ayiva,yonakalisiwe,intsimbi,intsimbi evakalayo, intsimbi ebonakalayo,ibhodi yezitshixo,izitshixo,isithixo esincangathi, izitshixo ezilungisiweyo,izitshixo ezinengxolo,izitshixo ezicothayo,indlela yokubeka i mouse endaweni,inkatha ye num +Keywords[zh_CN]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,辅助功能,聋,键盘,粘滞键,撞击键,筛选键,鼠标导航,可视铃声,小键盘 +Keywords[zh_TW]=access,accessibility,deaf,impaired,bell,audible bell,visible bell,Keyboard,keys,sticky keys,bounce keys,slow keys,mouse navigation,num pad,使用,聾,鈴聲,聽得見的鈴,看得見的鈴,鍵盤,按鍵,滑鼠導向,數字鍵 +Keywords[zu]=ngena,ukungena,okuthuli,kukhubazekile,insimbi,insimbiezwakalayo, insimbi ebonakalayo,okhiye,okhiye abanamathelayo,okhiyeababhampayo,okhiye abahamba kancane,ukuzula kwe-mouse,num pad + +Categories=Qt;KDE;X-KDE-settings-accessibility; diff --git a/kcontrol/accessibility/accessibility.h b/kcontrol/accessibility/accessibility.h new file mode 100644 index 000000000..ad94dcdcc --- /dev/null +++ b/kcontrol/accessibility/accessibility.h @@ -0,0 +1,71 @@ +/**************************************************************************** + accessibility.h + KDE Control Accessibility module to control Bell, Keyboard and ?Mouse? + ------------------- + Copyright : (c) 2000 Matthias Hlzer-Klpfel + ------------------- + Original Author: Matthias Hlzer-Klpfel + Contributors: Jos Pablo Ezequiel "Pupeno" Fernndez + Current Maintainer: Jos Pablo Ezequiel "Pupeno" Fernndez + ****************************************************************************/ + +/**************************************************************************** + * * + * 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. * + * * + ****************************************************************************/ + +#ifndef _ACCESSIBILITY_H_ +#define _ACCESSIBILITY_H_ + +#include + +#include "accessibilityconfigwidget.h" + +class AccessibilityConfig : public AccessibilityConfigWidget { + Q_OBJECT + + public: + /** + * Constructor + */ + AccessibilityConfig(QWidget *parent = 0L, const char *name = 0L, const QStringList &foo = QStringList()); + + /** + * Destructor + */ + virtual ~AccessibilityConfig(); + + /** + * This method is invoked whenever the module should read its + * configuration (most of the times from a config file) and update the + * user interface. This happens when the user clicks the "Reset" button in + * the control center, to undo all of his changes and restore the currently + * valid settings. NOTE that this is not called after the modules is loaded, + * so you probably want to call this method in the constructor. + */ + void load(); + void load( bool useDefaults ); + + /** + * This function gets called when the user wants to save the settings in + * the user interface, updating the config files or wherever the + * configuration is stored. The method is called when the user clicks "Apply" + * or "Ok". + */ + void save(); + + /** + * This function is called to set the settings in the module to sensible + * default values. It gets called when hitting the "Default" button. The + * default values should probably be the same as the ones the application + * uses when started without a config file. + */ + void defaults(); + +}; + +#endif // _ACCESSIBILITY_H_ diff --git a/kcontrol/accessibility/accessibilityconfigwidget.ui b/kcontrol/accessibility/accessibilityconfigwidget.ui new file mode 100644 index 000000000..5d0069a09 --- /dev/null +++ b/kcontrol/accessibility/accessibilityconfigwidget.ui @@ -0,0 +1,1630 @@ + +AccessibilityConfigWidget +José Pablo Ezequiel Fernández <pupeno@kde.org> + + + AccessibilityConfigWidget + + + + 0 + 0 + 552 + 419 + + + + Accessibility + + + + unnamed + + + 0 + + + + mainTab + + + + tab + + + &Bell + + + + unnamed + + + + audibleBellGroup + + + &Audible Bell + + + This is the configuration of the Audible Bell.<br> +It could be the system bell and/or a custom bell. + + + + unnamed + + + + systemBell + + + Use &system bell + + + If this option is checked, the default system bell will be used. See the "System Bell" control module for how to customize the system bell.<br> +Normally, this is just a "beep". + + + + + customBell + + + Use &customized bell + + + Check this option if you want to use a customized bell, playing a sound file. If you do this, you will probably want to turn off the system bell.<br> +Please note that on slow machines this may cause a "lag" between the event causing the bell and the sound being played. + + + + + soundToPlayLayout + + + + unnamed + + + + soundToPlaySpacer + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + soundToPlayLabel + + + false + + + Sound &to play: + + + soundToPlay + + + If the option "Use customized bell" is enabled, you can choose a sound file here. + + + + + soundToPlay + + + false + + + + + + + + + visibleBellGroup + + + &Visible Bell + + + + unnamed + + + + visibleBell + + + &Use visible bell + + + + + layout9 + + + + unnamed + + + + visibleBellDurationLayout + + + + unnamed + + + + visibleBellDuration + + + false + + + msec + + + 2000 + + + 100 + + + 100 + + + 500 + + + + + visibleBellDurationSlider + + + false + + + 100 + + + 2000 + + + 100 + + + 100 + + + 500 + + + Horizontal + + + Right + + + + + visibleBellDurationLabel + + + false + + + &Duration: + + + visibleBellDuration + + + + + + + visibleBellOptionsSpacer + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + inverFlashScreenButtonGroup + + + NoFrame + + + Plain + + + 0 + + + + + + true + + + + unnamed + + + 0 + + + + invertScreen + + + false + + + I&nvert screen + + + true + + + + + flashScreenLayout + + + + unnamed + + + + flashScreen + + + false + + + F&lash screen: + + + + + flashScreenColor + + + false + + + + + + + 255 + 0 + 0 + + + + + + flashScreenSpacer + + + Horizontal + + + Expanding + + + + 0 + 15 + + + + + + + + + + + + + + bellSpacer + + + Vertical + + + Expanding + + + + 20 + 0 + + + + + + + + tab + + + &Keyboard + + + + unnamed + + + + stickyKeysGroup + + + S&ticky Keys + + + + unnamed + + + + stickyKeys + + + Use &sticky keys + + + + + lockWithStickyKeysLayout + + + + unnamed + + + + lockWithStickyKeysSpacer + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + lockWithStickyKeys + + + false + + + &Lock with sticky keys + + + true + + + + + + + + + slowKeysGroup + + + Slo&w Keys + + + + unnamed + + + + slowKeys + + + &Use slow keys + + + + + slowKeysDelayLayout + + + + unnamed + + + + slowKeysDelay + + + false + + + msec + + + 2000 + + + 100 + + + 100 + + + 500 + + + + + slowKeysDelaySlider + + + false + + + 100 + + + 2000 + + + 100 + + + 100 + + + 500 + + + Horizontal + + + Right + + + + + slowKeysSpacer + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + slowKeysDelayLabel + + + false + + + &Duration: + + + slowKeysDelay + + + + + + + + + bounceKeysGroup + + + &Bounce Keys + + + + unnamed + + + + bounceKeys + + + Use bou&nce keys + + + + + bounceKeysDelayLayout + + + + unnamed + + + + bounceKeysDelaySlider + + + false + + + 100 + + + 2000 + + + 100 + + + 100 + + + 500 + + + Horizontal + + + Right + + + + + bounceKeysDelaySpacer + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + bounceKeysDelay + + + false + + + msec + + + 2000 + + + 100 + + + 100 + + + 500 + + + + + bounceKeysDelayLabel + + + false + + + Du&ration: + + + bounceKeysDelay + + + + + + + + + keyboardSpacer + + + Vertical + + + Expanding + + + + 21 + 61 + + + + + + + + tab + + + &Mouse + + + + unnamed + + + + mouseNavigationGroup + + + &Navigation + + + + unnamed + + + + moveWithKeyboard + + + Mo&ve mouse with keyboard + + + + + moveWithKeyboardLayout + + + + unnamed + + + + accelerationTime + + + false + + + 5000 + + + 1 + + + 250 + + + 1000 + + + + + accelerationTimeSlider + + + false + + + 1 + + + 5000 + + + 250 + + + 2500 + + + 1000 + + + Horizontal + + + Right + + + + + maximumSpeedLabel + + + false + + + Ma&ximum speed: + + + AlignVCenter|AlignRight + + + maximumSpeed + + + + + accelerationTimeLabel + + + false + + + Acceleration &time: + + + AlignVCenter|AlignRight + + + accelerationTime + + + + + accelerationDelaySlider + + + false + + + 1 + + + 1000 + + + 50 + + + 500 + + + 160 + + + Horizontal + + + Right + + + + + maximumSpeed + + + false + + + 1000 + + + 1 + + + 10 + + + 500 + + + + + repeatInterval + + + false + + + msec + + + 1000 + + + 1 + + + 10 + + + 5 + + + + + moveWithKeyboardSpacer + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + maximumSpeedSlider + + + false + + + 1 + + + 1000 + + + 10 + + + 100 + + + 500 + + + Horizontal + + + Right + + + 50 + + + + + repeatIntervalLabel + + + false + + + &Repeat interval: + + + AlignVCenter|AlignRight + + + repeatInterval + + + + + accelerationDelay + + + false + + + + 1 + 0 + 0 + 0 + + + + msec + + + 1000 + + + 1 + + + 50 + + + 160 + + + + + accelerationProfileLabel + + + false + + + Acceleration &profile: + + + AlignVCenter|AlignRight + + + accelerationProfile + + + + + accelerationProfile + + + false + + + 1000 + + + -1000 + + + 100 + + + + + accelerationProfileSlider + + + false + + + -1000 + + + 1000 + + + 100 + + + 1000 + + + Horizontal + + + Right + + + 100 + + + + + repeatInternalSlider + + + false + + + 1 + + + 1000 + + + 10 + + + 100 + + + 5 + + + Horizontal + + + Right + + + 50 + + + + + accelerationDelayLabel + + + false + + + &Acceleration delay: + + + AlignVCenter|AlignRight + + + accelerationDelay + + + + + + + + + mouseSpacer + + + Vertical + + + Expanding + + + + 20 + 1 + + + + + + + + + + + customBell + toggled(bool) + soundToPlay + setEnabled(bool) + + + customBell + toggled(bool) + soundToPlayLabel + setEnabled(bool) + + + visibleBellDuration + valueChanged(int) + visibleBellDurationSlider + setValue(int) + + + visibleBellDurationSlider + valueChanged(int) + visibleBellDuration + setValue(int) + + + slowKeysDelay + valueChanged(int) + slowKeysDelaySlider + setValue(int) + + + slowKeysDelaySlider + valueChanged(int) + slowKeysDelay + setValue(int) + + + bounceKeysDelay + valueChanged(int) + bounceKeysDelaySlider + setValue(int) + + + bounceKeysDelaySlider + valueChanged(int) + bounceKeysDelay + setValue(int) + + + visibleBell + toggled(bool) + invertScreen + setEnabled(bool) + + + visibleBell + toggled(bool) + flashScreen + setEnabled(bool) + + + visibleBell + toggled(bool) + AccessibilityConfigWidget + updateFlashScreenColor() + + + visibleBell + toggled(bool) + visibleBellDuration + setEnabled(bool) + + + visibleBell + toggled(bool) + visibleBellDurationLabel + setEnabled(bool) + + + visibleBell + toggled(bool) + visibleBellDurationSlider + setEnabled(bool) + + + flashScreen + toggled(bool) + flashScreenColor + setEnabled(bool) + + + stickyKeys + toggled(bool) + lockWithStickyKeys + setEnabled(bool) + + + slowKeys + toggled(bool) + slowKeysDelayLabel + setEnabled(bool) + + + slowKeys + toggled(bool) + slowKeysDelay + setEnabled(bool) + + + slowKeys + toggled(bool) + slowKeysDelaySlider + setEnabled(bool) + + + bounceKeys + toggled(bool) + bounceKeysDelayLabel + setEnabled(bool) + + + bounceKeys + toggled(bool) + bounceKeysDelay + setEnabled(bool) + + + bounceKeys + toggled(bool) + bounceKeysDelaySlider + setEnabled(bool) + + + accelerationDelay + valueChanged(int) + accelerationDelaySlider + setValue(int) + + + accelerationDelaySlider + valueChanged(int) + accelerationDelay + setValue(int) + + + repeatInterval + valueChanged(int) + repeatInternalSlider + setValue(int) + + + repeatInternalSlider + valueChanged(int) + repeatInterval + setValue(int) + + + accelerationTime + valueChanged(int) + accelerationTimeSlider + setValue(int) + + + accelerationTimeSlider + valueChanged(int) + accelerationTime + setValue(int) + + + maximumSpeed + valueChanged(int) + maximumSpeedSlider + setValue(int) + + + maximumSpeedSlider + valueChanged(int) + maximumSpeed + setValue(int) + + + accelerationProfile + valueChanged(int) + accelerationProfileSlider + setValue(int) + + + accelerationProfileSlider + valueChanged(int) + accelerationProfile + setValue(int) + + + moveWithKeyboard + toggled(bool) + accelerationDelayLabel + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationDelay + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationDelaySlider + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + repeatIntervalLabel + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + repeatInterval + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + repeatInternalSlider + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationTimeLabel + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationTime + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationTimeSlider + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + maximumSpeedLabel + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + maximumSpeed + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + maximumSpeedSlider + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationProfileLabel + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationProfile + setEnabled(bool) + + + moveWithKeyboard + toggled(bool) + accelerationProfileSlider + setEnabled(bool) + + + systemBell + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + customBell + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + soundToPlay + textChanged(const QString&) + AccessibilityConfigWidget + changed(bool) + + + visibleBell + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + invertScreen + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + flashScreen + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + flashScreenColor + changed(const QColor&) + AccessibilityConfigWidget + changed(bool) + + + visibleBellDuration + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + visibleBellDurationSlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + stickyKeys + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + lockWithStickyKeys + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + slowKeys + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + slowKeysDelay + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + slowKeysDelaySlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + bounceKeys + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + bounceKeysDelay + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + bounceKeysDelaySlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + moveWithKeyboard + toggled(bool) + AccessibilityConfigWidget + changed(bool) + + + accelerationDelay + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + accelerationDelaySlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + repeatInterval + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + repeatInternalSlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + accelerationTime + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + accelerationTimeSlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + maximumSpeed + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + maximumSpeedSlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + accelerationProfile + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + accelerationProfileSlider + valueChanged(int) + AccessibilityConfigWidget + changed(bool) + + + + mainTab + systemBell + customBell + soundToPlay + visibleBell + invertScreen + flashScreen + flashScreenColor + visibleBellDuration + visibleBellDurationSlider + stickyKeys + lockWithStickyKeys + slowKeys + slowKeysDelay + slowKeysDelaySlider + bounceKeys + bounceKeysDelay + bounceKeysDelaySlider + moveWithKeyboard + accelerationDelay + accelerationDelaySlider + repeatInterval + repeatInternalSlider + accelerationTime + accelerationTimeSlider + maximumSpeed + maximumSpeedSlider + accelerationProfile + accelerationProfileSlider + + + accessibilityconfigwidget.ui.h + kdialog.h + + + updateFlashScreenColor() + + + + + kcmodule.h + kurlrequester.h + klineedit.h + kpushbutton.h + knuminput.h + kcolorbutton.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + + diff --git a/kcontrol/accessibility/accessibilityconfigwidget.ui.h b/kcontrol/accessibility/accessibilityconfigwidget.ui.h new file mode 100644 index 000000000..38d44a502 --- /dev/null +++ b/kcontrol/accessibility/accessibilityconfigwidget.ui.h @@ -0,0 +1,22 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename functions or slots use +** Qt Designer which will update this file, preserving your code. Create an +** init() function in place of a constructor, and a destroy() function in +** place of a destructor. +*****************************************************************************/ + +void AccessibilityConfigWidget::updateFlashScreenColor(){ + flashScreenColor->setEnabled(flashScreen->isChecked()); +} + + +void AccessibilityConfigWidget::configChanged() +{ + +} + + + + diff --git a/kcontrol/accessibility/configure.in.in b/kcontrol/accessibility/configure.in.in new file mode 100644 index 000000000..c3f539bd5 --- /dev/null +++ b/kcontrol/accessibility/configure.in.in @@ -0,0 +1,3 @@ +ACCESSIBILITY_SUBDIR= +KDE_CHECK_HEADER(X11/extensions/XKBstr.h, ACCESSIBILITY_SUBDIR=accessibility) +AM_CONDITIONAL(include_kcontrol_accessibility, test -n "$ACCESSIBILITY_SUBDIR") diff --git a/kcontrol/accessibility/kcm_accessibility.kcfg b/kcontrol/accessibility/kcm_accessibility.kcfg new file mode 100644 index 000000000..ad9d0d450 --- /dev/null +++ b/kcontrol/accessibility/kcm_accessibility.kcfg @@ -0,0 +1,67 @@ + + + + + + + false + + + + false + + + + false + + + + + + + + + + + false + + + + true + + + + #FF0000 + + + + 500 + 3000 + + + + diff --git a/kcontrol/accessibility/settings.kcfgc b/kcontrol/accessibility/settings.kcfgc new file mode 100644 index 000000000..b0b7a9407 --- /dev/null +++ b/kcontrol/accessibility/settings.kcfgc @@ -0,0 +1,5 @@ +File=kcm_accessibility.kcfg +ClassName=Settings +Singleton=true +Mutators=true + diff --git a/kcontrol/arts/Makefile.am b/kcontrol/arts/Makefile.am new file mode 100644 index 000000000..f4b68cfa1 --- /dev/null +++ b/kcontrol/arts/Makefile.am @@ -0,0 +1,15 @@ +kde_module_LTLIBRARIES = kcm_arts.la + +kcm_arts_la_SOURCES = arts.cpp generaltab.ui hardwaretab.ui krichtextlabel.cpp + +kcm_arts_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_arts_la_LIBADD = $(LIB_KIO) $(LIB_KUTILS) -lkmid + +AM_CPPFLAGS = -I$(kde_includes)/arts $(all_includes) + +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmarts.pot + +xdg_apps_DATA = arts.desktop diff --git a/kcontrol/arts/arts.cpp b/kcontrol/arts/arts.cpp new file mode 100644 index 000000000..a8edb30a2 --- /dev/null +++ b/kcontrol/arts/arts.cpp @@ -0,0 +1,730 @@ +/* + + Copyright (C) 2000 Stefan Westerfeld + stefan@space.twc.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Permission is also granted to link this program with the Qt + library, treating Qt like a library that normally accompanies the + operating system kernel, whether or not that is in fact the case. + +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "arts.h" + +extern "C" { + KDE_EXPORT void init_arts(); + + KDE_EXPORT KCModule *create_arts(QWidget *parent, const char* /*name*/) + { + KGlobal::locale()->insertCatalogue("kcmarts"); + return new KArtsModule(parent, "kcmarts" ); + } +} + +static bool startArts() +{ + KConfig *config = new KConfig("kcmartsrc", true, false); + + config->setGroup("Arts"); + bool startServer = config->readBoolEntry("StartServer",true); + bool startRealtime = config->readBoolEntry("StartRealtime",true); + QString args = config->readEntry("Arguments","-F 10 -S 4096 -s 60 -m artsmessage -c drkonqi -l 3 -f"); + + delete config; + + if (startServer) + kapp->kdeinitExec(startRealtime?"artswrapper":"artsd", + QStringList::split(" ",args)); + return startServer; +} + +/* + * This function uses artsd -A to init audioIOList with the possible audioIO + * methods. Here is a sample output of artsd -A (note the two spaces before + * each "interesting" line are used in parsing: + * + * # artsd -A + * possible choices for the audio i/o method: + * + * toss Threaded Open Sound System + * esd Enlightened Sound Daemon + * null No audio input/output + * alsa Advanced Linux Sound Architecture + * oss Open Sound System + * + */ +void KArtsModule::initAudioIOList() +{ + KProcess* artsd = new KProcess(); + *artsd << "artsd"; + *artsd << "-A"; + + connect(artsd, SIGNAL(processExited(KProcess*)), + this, SLOT(slotArtsdExited(KProcess*))); + connect(artsd, SIGNAL(receivedStderr(KProcess*, char*, int)), + this, SLOT(slotProcessArtsdOutput(KProcess*, char*, int))); + + if (!artsd->start(KProcess::Block, KProcess::Stderr)) { + KMessageBox::error(0, i18n("Unable to start the sound server to " + "retrieve possible sound I/O methods.\n" + "Only automatic detection will be " + "available.")); + delete artsd; + } +} + +void KArtsModule::slotArtsdExited(KProcess* proc) +{ + latestProcessStatus = proc->exitStatus(); + delete proc; +} + +void KArtsModule::slotProcessArtsdOutput(KProcess*, char* buf, int len) +{ + // XXX(gioele): I suppose this will be called with full lines, am I wrong? + + QStringList availableIOs = QStringList::split("\n", QCString(buf, len)); + // valid entries have two leading spaces + availableIOs = availableIOs.grep(QRegExp("^ {2}")); + availableIOs.sort(); + + QString name, fullName; + QStringList::Iterator it; + for (it = availableIOs.begin(); it != availableIOs.end(); ++it) { + name = (*it).left(12).stripWhiteSpace(); + fullName = (*it).mid(12).stripWhiteSpace(); + audioIOList.append(new AudioIOElement(name, fullName)); + } +} + +KArtsModule::KArtsModule(QWidget *parent, const char *name) + : KCModule(parent, name), configChanged(false) +{ + setButtons(Default|Apply); + + setQuickHelp( i18n("

Sound System

Here you can configure aRts, KDE's sound server." + " This program not only allows you to hear your system sounds while simultaneously" + " listening to an MP3 file or playing a game with background music. It also allows you" + " to apply different effects to your system sounds and provides programmers with" + " an easy way to achieve sound support.")); + + initAudioIOList(); + + QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + QTabWidget *tab = new QTabWidget(this); + layout->addWidget(tab); + + general = new generalTab(tab); + hardware = new hardwareTab(tab); + //mixer = KCModuleLoader::loadModule("kmixcfg", tab); + //midi = new KMidConfig(tab, "kmidconfig"); + + general->layout()->setMargin( KDialog::marginHint() ); + hardware->layout()->setMargin( KDialog::marginHint() ); + general->latencyLabel->setFixedHeight(general->latencyLabel->fontMetrics().lineSpacing()); + + tab->addTab(general, i18n("&General")); + tab->addTab(hardware, i18n("&Hardware")); + + startServer = general->startServer; + networkTransparent = general->networkTransparent; + startRealtime = general->startRealtime; + autoSuspend = general->autoSuspend; + suspendTime = general->suspendTime; + + fullDuplex = hardware->fullDuplex; + customDevice = hardware->customDevice; + deviceName = hardware->deviceName; + customRate = hardware->customRate; + samplingRate = hardware->samplingRate; + + QString deviceHint = i18n("Normally, the sound server defaults to using the device called /dev/dsp for sound output. That should work in most cases. On some systems where devfs is used, however, you may need to use /dev/sound/dsp instead. Other alternatives are things like /dev/dsp0 or /dev/dsp1, if you have a soundcard that supports multiple outputs, or you have multiple soundcards."); + + QString rateHint = i18n("Normally, the sound server defaults to using a sampling rate of 44100 Hz (CD quality), which is supported on almost any hardware. If you are using certain Yamaha soundcards, you might need to configure this to 48000 Hz here, if you are using old SoundBlaster cards, like SoundBlaster Pro, you might need to change this to 22050 Hz. All other values are possible, too, and may make sense in certain contexts (i.e. professional studio equipment)."); + + QString optionsHint = i18n("This configuration module is intended to cover almost every aspect of the aRts sound server that you can configure. However, there are some things which may not be available here, so you can add command line options here which will be passed directly to artsd. The command line options will override the choices made in the GUI. To see the possible choices, open a Konsole window, and type artsd -h."); + + QWhatsThis::add(customDevice, deviceHint); + QWhatsThis::add(deviceName, deviceHint); + QWhatsThis::add(customRate, rateHint); + QWhatsThis::add(samplingRate, rateHint); + QWhatsThis::add(hardware->customOptions, optionsHint); + QWhatsThis::add(hardware->addOptions, optionsHint); + + hardware->audioIO->insertItem( i18n( "Autodetect" ) ); + for (AudioIOElement *a = audioIOList.first(); a != 0; a = audioIOList.next()) + hardware->audioIO->insertItem(i18n(a->fullName.utf8())); + + deviceManager = new DeviceManager(); + deviceManager->initManager(); + + QString s; + for ( int i = 0; i < deviceManager->midiPorts()+deviceManager->synthDevices(); i++) + { + if ( strcmp( deviceManager->type( i ), "" ) != 0 ) + s.sprintf( "%s - %s", deviceManager->name( i ), deviceManager->type( i ) ); + else + s.sprintf( "%s", deviceManager->name( i ) ); + + hardware->midiDevice->insertItem( s, i ); + + }; + + config = new KConfig("kcmartsrc"); + load(); + + suspendTime->setRange( 1, 999, 1, true ); + + connect(startServer,SIGNAL(clicked()),this,SLOT(slotChanged())); + connect(networkTransparent,SIGNAL(clicked()),this,SLOT(slotChanged())); + connect(startRealtime,SIGNAL(clicked()),this,SLOT(slotChanged())); + connect(fullDuplex,SIGNAL(clicked()),this,SLOT(slotChanged())); + connect(customDevice, SIGNAL(clicked()), SLOT(slotChanged())); + connect(deviceName, SIGNAL(textChanged(const QString&)), SLOT(slotChanged())); + connect(customRate, SIGNAL(clicked()), SLOT(slotChanged())); + connect(samplingRate, SIGNAL(valueChanged(const QString&)), SLOT(slotChanged())); +// connect(general->volumeSystray, SIGNAL(clicked()), this, SLOT(slotChanged()) ); + + connect(hardware->audioIO,SIGNAL(highlighted(int)),SLOT(slotChanged())); + connect(hardware->audioIO,SIGNAL(activated(int)),SLOT(slotChanged())); + connect(hardware->customOptions,SIGNAL(clicked()),SLOT(slotChanged())); + connect(hardware->addOptions,SIGNAL(textChanged(const QString&)),SLOT(slotChanged())); + connect(hardware->soundQuality,SIGNAL(highlighted(int)),SLOT(slotChanged())); + connect(hardware->soundQuality,SIGNAL(activated(int)),SLOT(slotChanged())); + connect(general->latencySlider,SIGNAL(valueChanged(int)),SLOT(slotChanged())); + connect(autoSuspend,SIGNAL(clicked()),SLOT(slotChanged())); + connect(suspendTime,SIGNAL(valueChanged(int)),SLOT(slotChanged())); + connect(general->testSound,SIGNAL(clicked()),SLOT(slotTestSound())); + connect(hardware->midiDevice, SIGNAL( highlighted(int) ), this, SLOT( slotChanged() ) ); + connect(hardware->midiDevice, SIGNAL( activated(int) ), this, SLOT( slotChanged() ) ); + connect(hardware->midiUseMapper, SIGNAL( clicked() ), this, SLOT( slotChanged() ) ); + connect(hardware->midiMapper, SIGNAL( textChanged( const QString& ) ), + this, SLOT( slotChanged() ) ); + + KAboutData *about = new KAboutData(I18N_NOOP("kcmarts"), + I18N_NOOP("The Sound Server Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1999 - 2001, Stefan Westerfeld")); + about->addAuthor("Stefan Westerfeld",I18N_NOOP("aRts Author") , "stw@kde.org"); + setAboutData(about); +} + +void KArtsModule::load( bool useDefaults ) +{ + config->setReadDefaults( useDefaults ); + config->setGroup("Arts"); + startServer->setChecked(config->readBoolEntry("StartServer",true)); + startRealtime->setChecked(config->readBoolEntry("StartRealtime",true) && + realtimeIsPossible()); + networkTransparent->setChecked(config->readBoolEntry("NetworkTransparent",false)); + fullDuplex->setChecked(config->readBoolEntry("FullDuplex",false)); + autoSuspend->setChecked(config->readBoolEntry("AutoSuspend",true)); + suspendTime->setValue(config->readNumEntry("SuspendTime",60)); + deviceName->setText(config->readEntry("DeviceName",QString::null)); + customDevice->setChecked(!deviceName->text().isEmpty()); + hardware->addOptions->setText(config->readEntry("AddOptions",QString::null)); + hardware->customOptions->setChecked(!hardware->addOptions->text().isEmpty()); + general->latencySlider->setValue(config->readNumEntry("Latency",250)); + + int rate = config->readNumEntry("SamplingRate",0); + if(rate) + { + customRate->setChecked(true); + samplingRate->setValue(rate); + } + else + { + customRate->setChecked(false); + samplingRate->setValue(44100); + } + + switch (config->readNumEntry("Bits", 0)) { + case 0: + hardware->soundQuality->setCurrentItem(0); + break; + case 16: + hardware->soundQuality->setCurrentItem(1); + break; + case 8: + hardware->soundQuality->setCurrentItem(2); + break; + } + + QString audioIO = config->readEntry("AudioIO", QString::null); + hardware->audioIO->setCurrentItem(0); + for(AudioIOElement *a = audioIOList.first(); a != 0; a = audioIOList.next()) + { + if(a->name == audioIO) // first item: "autodetect" + { + hardware->audioIO->setCurrentItem(audioIOList.at() + 1); + break; + } + + } + +// config->setGroup( "Mixer" ); +// general->volumeSystray->setChecked( config->readBoolEntry( "VolumeControlOnSystray", true ) ); + + KConfig *midiConfig = new KConfig( "kcmmidirc", true ); + + midiConfig->setGroup( "Configuration" ); + hardware->midiDevice->setCurrentItem( midiConfig->readNumEntry( "midiDevice", 0 ) ); + QString mapurl( midiConfig->readPathEntry( "mapFilename" ) ); + hardware->midiMapper->setURL( mapurl ); + hardware->midiUseMapper->setChecked( midiConfig->readBoolEntry( "useMidiMapper", false ) ); + hardware->midiMapper->setEnabled( hardware->midiUseMapper->isChecked() ); + + delete midiConfig; + + updateWidgets(); + emit changed( useDefaults ); +} + +KArtsModule::~KArtsModule() { + delete config; + audioIOList.setAutoDelete(true); + audioIOList.clear(); +} + +void KArtsModule::saveParams( void ) +{ + QString audioIO; + + int item = hardware->audioIO->currentItem() - 1; // first item: "default" + + if (item >= 0) { + audioIO = audioIOList.at(item)->name; + } + + QString dev = customDevice->isChecked() ? deviceName->text() : QString::null; + int rate = customRate->isChecked()?samplingRate->value() : 0; + QString addOptions; + if(hardware->customOptions->isChecked()) + addOptions = hardware->addOptions->text(); + + int latency = general->latencySlider->value(); + int bits = 0; + + if (hardware->soundQuality->currentItem() == 1) + bits = 16; + else if (hardware->soundQuality->currentItem() == 2) + bits = 8; + + config->setGroup("Arts"); + config->writeEntry("StartServer",startServer->isChecked()); + config->writeEntry("StartRealtime",startRealtime->isChecked()); + config->writeEntry("NetworkTransparent",networkTransparent->isChecked()); + config->writeEntry("FullDuplex",fullDuplex->isChecked()); + config->writeEntry("DeviceName",dev); + config->writeEntry("SamplingRate",rate); + config->writeEntry("AudioIO",audioIO); + config->writeEntry("AddOptions",addOptions); + config->writeEntry("Latency",latency); + config->writeEntry("Bits",bits); + config->writeEntry("AutoSuspend", autoSuspend->isChecked()); + config->writeEntry("SuspendTime", suspendTime->value()); + calculateLatency(); + // Save arguments string in case any other process wants to restart artsd. + + config->writeEntry("Arguments", + createArgs(networkTransparent->isChecked(), fullDuplex->isChecked(), + fragmentCount, fragmentSize, dev, rate, bits, + audioIO, addOptions, autoSuspend->isChecked(), + suspendTime->value() )); + +// config->setGroup( "Mixer" ); +// config->writeEntry( "VolumeControlOnSystray", general->volumeSystray->isChecked() ); + + KConfig *midiConfig = new KConfig( "kcmmidirc", false ); + + midiConfig->setGroup( "Configuration" ); + midiConfig->writeEntry( "midiDevice", hardware->midiDevice->currentItem() ); + midiConfig->writeEntry( "useMidiMapper", hardware->midiUseMapper->isChecked() ); + midiConfig->writePathEntry( "mapFilename", hardware->midiMapper->url() ); + + delete midiConfig; + + KConfig *knotifyConfig = new KConfig( "knotifyrc", false ); + + knotifyConfig->setGroup( "StartProgress" ); + knotifyConfig->writeEntry( "Arts Init", startServer->isChecked() ); + knotifyConfig->writeEntry( "Use Arts", startServer->isChecked() ); + + delete knotifyConfig; + + config->sync(); +} + +void KArtsModule::load() +{ + load( false ); +} + +void KArtsModule::save() +{ + if (configChanged) { + configChanged = false; + saveParams(); + restartServer(); + updateWidgets(); + } + emit changed( false ); +} + +int KArtsModule::userSavedChanges() +{ + int reply; + + if (!configChanged) + return KMessageBox::Yes; + + QString question = i18n("The settings have changed since the last time " + "you restarted the sound server.\n" + "Do you want to save them?"); + QString caption = i18n("Save Sound Server Settings?"); + reply = KMessageBox::questionYesNo(this, question, caption,KStdGuiItem::save(),KStdGuiItem::discard()); + if ( reply == KMessageBox::Yes) + { + configChanged = false; + saveParams(); + } + + return reply; +} + +void KArtsModule::slotTestSound() +{ + if (configChanged && (userSavedChanges() == KMessageBox::Yes) || !artsdIsRunning() ) + restartServer(); + + KProcess test; + test << "artsplay"; + test << locate("sound", "KDE_Startup_1.ogg"); + test.start(KProcess::DontCare); +} + +void KArtsModule::defaults() +{ + load( true ); +} + +void KArtsModule::calculateLatency() +{ + int latencyInBytes, latencyInMs; + + if(general->latencySlider->value() < 490) + { + int rate = customRate->isChecked() ? samplingRate->text().toLong() : 44100; + + if (rate < 4000 || rate > 200000) { + rate = 44100; + } + + int sampleSize = (hardware->soundQuality->currentItem() == 2) ? 2 : 4; + + latencyInBytes = general->latencySlider->value()*rate*sampleSize/1000; + + fragmentSize = 2; + do { + fragmentSize *= 2; + fragmentCount = latencyInBytes / fragmentSize; + } while (fragmentCount > 8 && fragmentSize != 4096); + + latencyInMs = (fragmentSize*fragmentCount*1000) / rate / sampleSize; + general->latencyLabel->setText( + i18n("%1 milliseconds (%2 fragments with %3 bytes)") + .arg(latencyInMs).arg(fragmentCount).arg(fragmentSize)); + } + else + { + fragmentCount = 128; + fragmentSize = 8192; + general->latencyLabel->setText(i18n("as large as possible")); + } +} + +void KArtsModule::updateWidgets() +{ + bool startServerIsChecked = startServer->isChecked(); + if (startRealtime->isChecked() && !realtimeIsPossible()) { + startRealtime->setChecked(false); + KMessageBox::error(this, i18n("Impossible to start aRts with realtime " + "priority because artswrapper is " + "missing or disabled")); + } + deviceName->setEnabled(customDevice->isChecked()); + QString audioIO; + int item = hardware->audioIO->currentItem() - 1; // first item: "default" + if (item >= 0) + { + audioIO = audioIOList.at(item)->name; + bool jack = (audioIO == QString::fromLatin1("jack")); + if(jack) + { + customRate->setChecked(false); + hardware->soundQuality->setCurrentItem(0); + autoSuspend->setChecked(false); + } + customRate->setEnabled(!jack); + hardware->soundQuality->setEnabled(!jack); + autoSuspend->setEnabled(!jack); + } + samplingRate->setEnabled(customRate->isChecked()); + hardware->addOptions->setEnabled(hardware->customOptions->isChecked()); + suspendTime->setEnabled(autoSuspend->isChecked()); + calculateLatency(); + + general->testSound->setEnabled(startServerIsChecked); + +// general->volumeSystray->setEnabled(startServerIsChecked); + general->networkedSoundGroupBox->setEnabled(startServerIsChecked); + general->realtimeGroupBox->setEnabled(startServerIsChecked); + general->autoSuspendGroupBox->setEnabled(startServerIsChecked); + hardware->setEnabled(startServerIsChecked); + hardware->midiMapper->setEnabled( hardware->midiUseMapper->isChecked() ); +} + +void KArtsModule::slotChanged() +{ + updateWidgets(); + configChanged = true; + emit changed(true); +} + +/* check if starting realtime would be possible */ +bool KArtsModule::realtimeIsPossible() +{ + static bool checked = false; + if (!checked) + { + KProcess* checkProcess = new KProcess(); + *checkProcess << "artswrapper"; + *checkProcess << "check"; + + connect(checkProcess, SIGNAL(processExited(KProcess*)), + this, SLOT(slotArtsdExited(KProcess*))); + if (!checkProcess->start(KProcess::Block)) + { + delete checkProcess; + realtimePossible = false; + } + else if (latestProcessStatus == 0) + { + realtimePossible = true; + } + else + { + realtimePossible = false; + } + + checked = true; + + } + return realtimePossible; +} + +void KArtsModule::restartServer() +{ + config->setGroup("Arts"); + bool starting = config->readBoolEntry("StartServer", true); + bool restarting = artsdIsRunning(); + + // Shut down knotify + DCOPRef("knotify", "qt/knotify").send("quit"); + + // Shut down artsd + KProcess terminateArts; + terminateArts << "artsshell"; + terminateArts << "terminate"; + terminateArts.start(KProcess::Block); + + if (starting) + { + // Wait for artsd to shutdown completely and then (re)start artsd again + KStartArtsProgressDialog dlg(this, "start_arts_progress", + restarting ? i18n("Restarting Sound System") : i18n("Starting Sound System"), + restarting ? i18n("Restarting sound system.") : i18n("Starting sound system.")); + dlg.exec(); + } + + // Restart knotify + kapp->startServiceByDesktopName("knotify"); +} + +bool KArtsModule::artsdIsRunning() +{ + KProcess check; + check << "artsshell"; + check << "status"; + check.start(KProcess::Block); + + return (check.exitStatus() == 0); +} + + +void init_arts() +{ + startArts(); +} + +QString KArtsModule::createArgs(bool netTrans, + bool duplex, int fragmentCount, + int fragmentSize, + const QString &deviceName, + int rate, int bits, const QString &audioIO, + const QString &addOptions, bool autoSuspend, + int suspendTime + ) +{ + QString args; + + if(fragmentCount) + args += QString::fromLatin1(" -F %1").arg(fragmentCount); + + if(fragmentSize) + args += QString::fromLatin1(" -S %1").arg(fragmentSize); + + if (!audioIO.isEmpty()) + args += QString::fromLatin1(" -a %1").arg(audioIO); + + if (duplex) + args += QString::fromLatin1(" -d"); + + if (netTrans) + args += QString::fromLatin1(" -n"); + + if (!deviceName.isEmpty()) + args += QString::fromLatin1(" -D ") + deviceName; + + if (rate) + args += QString::fromLatin1(" -r %1").arg(rate); + + if (bits) + args += QString::fromLatin1(" -b %1").arg(bits); + + if (autoSuspend && suspendTime) + args += QString::fromLatin1(" -s %1").arg(suspendTime); + + if (!addOptions.isEmpty()) + args += QChar(' ') + addOptions; + + args += QString::fromLatin1(" -m artsmessage"); + args += QString::fromLatin1(" -c drkonqi"); + args += QString::fromLatin1(" -l 3"); + args += QString::fromLatin1(" -f"); + + return args; +} + +KStartArtsProgressDialog::KStartArtsProgressDialog(KArtsModule *parent, const char *name, + const QString &caption, const QString &text) + : KProgressDialog(parent, name, caption, text, true), m_module(parent), m_shutdown(false) +{ + connect(&m_timer, SIGNAL(timeout()), this, SLOT(slotProgress())); + progressBar()->setTotalSteps(20); + m_timeStep = 700; + m_timer.start(m_timeStep); + setAutoClose(false); +} + +void +KStartArtsProgressDialog::slotProgress() +{ + int p = progressBar()->progress(); + if (p == 18) + { + progressBar()->reset(); + progressBar()->setProgress(1); + m_timeStep = m_timeStep * 2; + m_timer.start(m_timeStep); + } + else + { + progressBar()->setProgress(p+1); + } + + if (!m_shutdown) + { + // Wait for arts to shutdown + if (!m_module->artsdIsRunning()) + { + // Shutdown complete, restart + if (!startArts()) + slotFinished(); // Strange, it didn't start + else + m_shutdown = true; + } + } + + // Shut down completed? Wait for artsd to come up again + if (m_shutdown && m_module->artsdIsRunning()) + slotFinished(); // Restart complete +} + +void +KStartArtsProgressDialog::slotFinished() +{ + progressBar()->setProgress(20); + m_timer.stop(); + QTimer::singleShot(1000, this, SLOT(close())); +} + + +#ifdef I18N_ONLY + //lukas: these are hacks to allow translation of the following + I18N_NOOP("No Audio Input/Output"); + I18N_NOOP("Advanced Linux Sound Architecture"); + I18N_NOOP("Open Sound System"); + I18N_NOOP("Threaded Open Sound System"); + I18N_NOOP("Network Audio System"); + I18N_NOOP("Personal Audio Device"); + I18N_NOOP("SGI dmedia Audio I/O"); + I18N_NOOP("Sun Audio Input/Output"); + I18N_NOOP("Portable Audio Library"); + I18N_NOOP("Enlightened Sound Daemon"); + I18N_NOOP("MAS Audio Input/Output"); + I18N_NOOP("Jack Audio Connection Kit"); +#endif + +#include "arts.moc" diff --git a/kcontrol/arts/arts.desktop b/kcontrol/arts/arts.desktop new file mode 100644 index 000000000..cb7f28b61 --- /dev/null +++ b/kcontrol/arts/arts.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Exec=kcmshell arts +Icon=arts +Type=Application +DocPath=kcontrol/arts/index.html + + +X-KDE-Library=arts +X-KDE-Init=arts +X-KDE-ParentApp=kcontrol + +Name=Sound System +Name[af]=Klank Stelsel +Name[ar]=نظام الصوت +Name[az]=Səs Sistemi +Name[be]=Гукавая сістэма +Name[bg]=Аудио система +Name[bn]=সাউণ্ড সিস্টেম +Name[br]=Reizhiad Son +Name[bs]=Zvučni sistem +Name[ca]=Sistema de so +Name[cs]=Zvukový systém +Name[csb]=Zwãkòwô systema +Name[cy]=System Sain +Name[da]=Lydsystem +Name[de]=Sound-System +Name[el]=Σύστημα ήχου +Name[eo]=Sona Sistemo +Name[es]=Sistema de sonido +Name[et]=Helisüsteem +Name[eu]=Soinu sistema +Name[fa]=سیستم صوتی +Name[fi]=Äänijärjestelmä +Name[fr]=Système de sons +Name[fy]=Lûdssysteem +Name[ga]=Córas Fuaime +Name[gl]=Sistema de Son +Name[he]=מערכת צליל +Name[hi]=ध्वनि तंत्र +Name[hr]=Zvučni sustav +Name[hu]=Hangszolgáltatás +Name[id]=Sistem Suara +Name[is]=Hljóðkerfi +Name[it]=Sistema sonoro +Name[ja]=サウンドシステム +Name[ka]=ხმის სისტემა +Name[kk]=Дыбыс жүйесі +Name[km]=ប្រព័ន្ធ​សំឡេង +Name[lo]=ແບບModSystem +Name[lt]=Garso sistema +Name[lv]=Skaņas Sistēma +Name[mk]=Звучен систем +Name[mn]=Дуун-Систем +Name[ms]=Sistem Bunyi +Name[mt]=Sistema Awdjo +Name[nb]=Lydsystem +Name[nds]=Klangsysteem +Name[ne]=ध्वनि प्रणाली +Name[nl]=Geluidssysteem +Name[nn]=Lydsystem +Name[nso]=System ya Modumo +Name[pa]=ਧੁਨੀ ਸਿਸਟਮ +Name[pl]=System dźwiękowy +Name[pt]=Sistema de Som +Name[pt_BR]=Sistema de Som +Name[ro]=Sistemul de sunet +Name[ru]=Звуковая система +Name[rw]=Sistemu y'Ijwi +Name[se]=Jietnavuogádat +Name[sk]=Zvukový systém +Name[sl]=Zvočni sistem +Name[sr]=Звучни систем +Name[sr@Latn]=Zvučni sistem +Name[sv]=Ljudsystem +Name[ta]=ஒலி சாதனம் +Name[te]=శబ్ద వ్యవస్థ +Name[tg]=Системаи Садо +Name[th]=ระบบเสียง +Name[tr]=Ses Sistemi +Name[tt]=Tawış Sisteme +Name[uk]=Система звуку +Name[uz]=Tovush tizimi +Name[uz@cyrillic]=Товуш тизими +Name[ven]=Sisitemu ya Mubvumo +Name[vi]=Hệ thống âm thanh +Name[wa]=Sistinme di son +Name[xh]=Indlela yokusebenza Yesandi +Name[zh_CN]=声音系统 +Name[zh_TW]=聲音系統 +Name[zu]=Isistimu yomsindo + +Comment=Sound System Configuration +Comment[af]=Klank Stelsel Opstelling +Comment[ar]=إعداد نظام الصوت +Comment[az]=Səs Sistemi Qurğuları +Comment[be]=Настаўленні гукавай сістэмы +Comment[bg]=Настройване на аудио системата +Comment[bn]=সাউণ্ড সিস্টেম কনফিগারেশন +Comment[br]=Kefluniañ reizhiad ar son +Comment[bs]=Postavke zvučnog sistema +Comment[ca]=Configuració del sistema de so +Comment[cs]=Nastavení zvukového systému +Comment[csb]=Kònfigùracëjô zwãkòwi systemë +Comment[cy]=Ffurfweddu System Sain +Comment[da]=Opsætning af lydsystem +Comment[de]=Einrichtung des Sound-Systems +Comment[el]=Ρύθμιση συστήματος ήχου +Comment[eo]=Agordo de la sonoservo +Comment[es]=Configuración del sistema de sonido +Comment[et]=Helisüsteemi seadistamine +Comment[eu]=Soinu sistemaren konfigurazioa +Comment[fa]=پیکربندی سیستم صوتی +Comment[fi]=Äänijärjestelmän asetukset +Comment[fr]=Configuration du système de sons +Comment[fy]=Lûdssysteem Ynstelle +Comment[ga]=Cumraíocht an Chórais Fuaime +Comment[gl]=Configuración do Sistema de Son +Comment[he]=שינוי הגדרות מערכת הצליל +Comment[hi]=ध्वनि तंत्र कॉन्फ़िगरेशन +Comment[hr]=Konfiguracija zvučnog sustava +Comment[hu]=A hangszolgáltatás beállításai +Comment[id]=Konfigurasi Sistem Suara +Comment[is]=Stillingar hljóðkerfis vélarinnar +Comment[it]=Configurazione del sistema sonoro +Comment[ja]=サウンドシステムの設定 +Comment[ka]=ხმის სისტემის კონფიგურაცია +Comment[kk]=Дыбыс жүйесін баптау +Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​ប្រព័ន្ធ​សំឡេង +Comment[ko]=시스템 종소리 설정 +Comment[lo]=ປັບແຕ່ງເຊີບເວີຂອງລະບົບສງງ +Comment[lt]=Garso sistemos konfigūravimas +Comment[lv]=Skaņas sistēmas konfigurācija +Comment[mk]=Конфигурација на звучниот систем +Comment[mn]=Дууны-системийн тохируулга +Comment[ms]=Konfigurasi Sistem Bunyi +Comment[mt]=Konfigurazzjoni tas-Sound +Comment[nb]=Oppsett av lydsystemet +Comment[nds]=Instellen för dat Klangsysteem +Comment[ne]=ध्वनि प्रणाली कन्फिगरेसन +Comment[nl]=Geluidssysteem instellen +Comment[nn]=Oppsett av lydsystem +Comment[nso]=Peakanyo ya System ya Modumo +Comment[pa]=ਧੁਨੀ ਸਿਸਟਮ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja systemu dźwiękowego +Comment[pt]=Configuração do Sistema de Som +Comment[pt_BR]=Configuração do Sistema de Som +Comment[ro]=Configurează sistemul de sunet +Comment[ru]=Настройка звуковой системы +Comment[rw]=Iboneza rya Sisitemu y'Ijwi +Comment[se]=Jietnavuogádatheivehusat +Comment[sk]=Nastavenie zvukového systému +Comment[sl]=Nastavitve zvočnega sistema +Comment[sr]=Подешавање звучног система +Comment[sr@Latn]=Podešavanje zvučnog sistema +Comment[sv]=Anpassa ljudsystem +Comment[ta]=ஒலி சாதன அமைப்பு +Comment[te]=శబ్ద వ్యవస్థ అమరిక +Comment[tg]=Танзимоти системаи садо +Comment[th]=ปรับแต่งระบบเสียง +Comment[tr]=Ses Sistemi Yapılandırması +Comment[tt]=Tawış Sistemen Caylaw +Comment[uk]=Налаштування системи звуку +Comment[uz]=Tovush tizimini moslash +Comment[uz@cyrillic]=Товуш тизимини мослаш +Comment[ven]=Nzudzanyo ya sisitemu ya mubvumo +Comment[vi]=Cấu hình Hệ thống Âm thanh +Comment[wa]=Apontiaedje do sistinme di son +Comment[xh]=Uqwalaselo Lwendlela yokusebenza Yesandi +Comment[zh_CN]=声音系统配置 +Comment[zh_TW]=聲音系統組態 +Comment[zu]=Inhlanganiselo yesistimu yomsindo + +Keywords=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music +Keywords[az]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music, şəbəkə keçirgənliyi,keçirəenlik,üstünlük,dubleks,tam dubleks,qarşılıq müddəti +Keywords[be]=Гукавы сервер,гук,аўдыё,запуск,празрыстасць,сеткавая празрыстасць,прыярытэт,дуплекс,поўны дуплекс,час адказу,мікшэр,гучнасць,уваход,сінтэзатар,музыка,aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music +Keywords[bg]=аудио, звук, музика, aRts, Sound Server, artsd, Audio, Sound, startup, network transparency, transparency, priority, duplex, full duplex, response time, Mixer, Volume, KMix, Mix, login, MIDI, synthesizer, music +Keywords[ca]=aRts,Servidor de so,artsd,Àudio,So,engegada,transparència a xarxa,transparència,prioritat,duplex,full duplex,temps de resposta,Mesclador,Volum,KMix,Mix,accés,MIDI,sintetitzador,música +Keywords[cs]=aRts,Zvukový server,Zvuk,artsd,Audio,Spuštění,Priorita,Duplex, Plný duplex,Odezva,Směšovač,KMix,Přihlášení,MIDI,Hudba,Syntezátor,Hlasitost +Keywords[csb]=aRts, zwãkòwi serwer,artsd,Audio,Zwãk,zrësznié,przezérnota dlô séce,przezérnota,prioritet,dupleks,fùl dupleks,czas odpòwiesce,mikser,głosnosc, KMix,Mix,logòwanié,MIDI,syntezator,mùzyka,rozpòczãce robòtë +Keywords[cy]=aRTS,Gweinydd Sain,artsd,S?n,Sain,cychwyn,tryloywder rhwydwaith,tryloywder,blaenoriaeth,dyblyg,dyblyg llawn,amser ymateb,cymysgwr,sain,Kmix,Cymysgu,mewngofnodi,MIDI,syntheseisydd,cerdd +Keywords[da]=aRts,Lydserver,artsd,Audio,Lyd,opstart,netværksgennemsigtighed,prioritet,duplex,fuld duplex,svartid,Mixer,Lydstyrke,KMix,Mix,login,MIDI,synthesizer,musik +Keywords[de]=aRts,Soundserver,artsd,Audio,Klänge,Sound,Start,Netzwerktransparenz,Transparenz,Duplex,Voll-Duplex,Reaktionszeit,Priorität,Antwortzeit,Lautstärke, KMix,Mix,MIDI,Synthesizer,Musik,Anmeldung +Keywords[el]=aRts,Εξυπηρετητής ήχου,artsd,Ήχος,Ήχος,εκκίνηση,διαφάνεια δικτύου,διαφάνεια,προτεραιότητα,duplex,full duplex,χρόνος απόκρισης,Μείκτης,Ένταση,KMix,Μίξη,σύνδεση,MIDI,συνθεσάιζερ,μουσική +Keywords[en_GB]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesiser,music +Keywords[eo]=aRts,sonoservo,sonoj,artsd,lanĉo,reto,prioritato,dudirekta,reagtempo,Miksilo,KMix,Mix,MIDI,muziko +Keywords[es]=aRts,Servidor de sonido,artsd,Audio,Sonido,arranque,transparencia de red,transparencia,prioridad,duplex,full duplex,tiempo de respuesta, tiempo,Mezclador,Volumen,KMix,Mix,acceso,MIDI,sintetizador,música +Keywords[et]=aRts,heliserver,artsd,audio,heli,käivitamine,võrgu läbipaistvus,läbipaistvus,prioriteet,duplex,full duplex,reageerimise aeg,mikser,helitugevus,kmix,mix,sisselogimine,MIDI,süntesaator,muusika +Keywords[eu]=aRts,Soinu zerbitzaria,artsd,Audio,Soinua,abioa,sare transparentzia,transparentzoa,lehentasuna,duplex,full duplex,erantzun denbora,Nahasgailua,Bolumena,KMix,Mix,sarrera,MIDI,sintetizagailua,musika +Keywords[fa]= aRts، کارساز صوت، artsd ،صوتی، صوت، راه‌اندازی، شفافیت شبکه شفافیت، اولویت، دوسویه، تمام دوسویه، زمان پاسخ، مخلوط‌کن، حجم صدا، KMix ،Mix ،ورود ،MIDI ،ترکیب‌کننده، موسیقی +Keywords[fi]=aRts,äänipalvelin,artsd,ääni,käynnistys,verkkoläpinäkyvyys, ,prioriteetti,duplex,full duplex,vasteaika,mikseri,äänenvoimakkuus,KMix,MIDI, syntetisaattori,musiikki +Keywords[fr]=aRts,son,serveur de son,serveur sonore,bruit,artsd,audio,démarrage,transparence réseau,transparence,priorité,duplex,full duplex,temps de réponse,mixeur,volume,KMix,Mix,login,MIDI,synthétiseur,musique +Keywords[fy]=aRts,Lûd tsjinner,artsd,audio,Lûd,lûdstsjinner,Begjinne,netwurk ,netwurktransparâsje,priority,prioriteit,duplex,full duplex,response tiid,responstiid,folume,KMix,kanalen,login,oanmelde,synthesizer,muzyk,mixer,midi, +Keywords[ga]=aRts,Freastalaí Fuaime,artsd,Fuaim,tosú,trédhearcacht líonra,trédhearcacht,tosaíocht,déphléacsach,déphléacsach iomlán,aga freagartha,Meascthóir,Airde,KMix,Measc,logáil isteach,MIDI,sintéiseoir,ceol +Keywords[gl]=aRts,Servidor de Son,artsd,Audio,Son,comezo,transparéncia de rede,transparéncia,prioridade,duplex,full duplex,tempo de resposta,Mesturador,Volume,KMix,login,MIDI,sintetizador,música +Keywords[he]=aRts,שרת צליל,artsd,שמע,צליל,אתחול,שקיפות רשת,שקיפות,עדיפות,דו־כיווניות,דו־כיווניות מלאה,זמן תגובה,מערבל,עצמה,KMix,כניסה למערכת,MIDI,מידי,סינתסייזר,מוזיקה, aRts,Sound, Server,artsd,Audio, Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music +Keywords[hi]=ए-आरटीएस,ध्वनि सर्वर,एआरटीएसडी,ऑडियो,ध्वनि,स्टार्टअप,नेटवर्क ट्रांसपेरेंसी, ट्रांसपेरेंसी,प्राथमिकता,डुप्ले,फुल डुप्ले,प्रतिक्रिया समय,मिक्सर,आवाज़ निर्धारक,केमिक्स,मिक्स,लॉगइन,मिडी,सिंथेसाइजर,संगीत +Keywords[hr]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music,zvučni sustav,zvuk,pokretanje,mrežna transparentnost,transparentnost,priorite,vrijeme odziva,mikser,glasnoća,prijava,prijavljivanje,glazba,sintetizator +Keywords[hu]=aRts,hangszolgáltatás,artsd,audió,hang,indulás,hálózati láthatóság,láthatóság,prioritás,duplex,full duplex,válaszidő,hangkeverő,hangerő,KMix,Mix,bejelentkezés,MIDI,szintetizátor,zene +Keywords[is]=aRts,hljóðþjónn,hljóðmiðlari,artsd,hljóð,hljóð stillingar,ræsing,net,forgangur,tvíátta,svartími,mixer,MIDI,músík +Keywords[it]=aRts,server sonoro,artsd,audio,suono,avvio,trasparenza di rete,trasparenza,priorità,duplex,full duplex,tempo di risposta,Mixer,Volume, KMix,login,MIDI,sintetizzatore,musica +Keywords[ja]=aRts,サウンドサーバ,artsd,オーディオ,サウンド,スタートアップ,ネットワーク透過,透過,優先度,二重,全二重,反応時間,ミキサー,音量,KMix,Mix.ログイン,MIDI,シンセサイザー,音楽 +Keywords[ka]=aRts,ხმის სერვერი,artsd,აუდიო,ხმა,ჩატვირთვა,ქსელის გამჭირვალობა,გამჭირვალობა,პრიორიტეტი,დუპლექსი,მთლიანი დუპლექსი,გამოხმაურების დრო,მიქსერი,ხმა,KMix,Mix,ავტორიზაცია,MIDI,სინთეზატორი,მუსიკა +Keywords[km]=aRts,ម៉ាស៊ីន​បម្រើ​សំឡេង,artsd,អូឌីយ៉ូ,សំឡេង,ចាប់ផ្ដើម,ភាព​ថ្លា​របស់​បណ្ដាញ,ភាព​ថ្លា,អាទិភាព,ទ្វេ,ទ្វេទិស,រយៈពេល​ឆ្លើយតប,ឧបករណ៍​លាយ,ទំហំ​សំឡេង,KMix,លាយ,ចូល,MIDI,synthesizer,តន្ត្រី +Keywords[lt]=aRts,Garsų serveris,Sound Server,artsd,Audio,Sound,garsas,startup,įkrova,network transparency,tinklo skaidrumas,transparency,skaidrumas,priority,prioritetas,duplex,dupleksas,full duplex,pilnas dupleksas,response time,reakcijos laikas +Keywords[lv]=aRts,Skaņas Serveris,artsd,Audio,Skaņa,palaišanās,tīkla caurspīdīgums,caurspīdīgums,prioritāte,duplekss,pilns duplekss,atbildes laiks,Mikseris,Skaļums,KMix,Mix,login,MIDI,sintizators,mūzika +Keywords[mk]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music,Звучен сервер,Аудио,Звук,старт,мрежна транспарентност,транспарентност,приоритет,дуплекс,цел дуплекс,време на одговор,Миксер,Гласност,најава,синтисајзер,музика +Keywords[mn]=aRts,Дууны сервер,artsd,Дуу,Чимээ,Дуун,Эхлэл,Сүлжээ- Тунгалаг,Тунгалаг,Давхар,Бүтэн давхар,Хариулах хугацаа, Эрх,Дууны чанга, KMix,Mix,MIDI,Synthesizer,Хөгжим,Бүртгэл +Keywords[nb]=aRts,lydtjener,artsd,lyd,audio,oppstart,nettverkstransparens,transparens,prioritet,dupleks,full dupleks,svartid,responstid,mikser,volum,lydstyrke,KMix,innlogging,synt,musikk +Keywords[nds]=aRts,Sound Server,Klangserver,artsd,Audio,Klang,Kläng,Hoochfohren,Nettwarktransparenz,Transparenz,Prioriteet,duplex,vull duplex,Antwoorttiet,Mischer,Luutstärk,KMix,mischen,anmellen,MIDI,synthesizer,Musik,Klangteler +Keywords[ne]=aRts, ध्वनि सर्भर, artsd, अडियो, ध्वनि, सुरुआत, सञ्जाल पारदर्शिता, पारदर्शिता, प्राथमिकता, डुप्लेक्स, पूरा डुप्लेक्स, प्रतिक्रिया समय, मिश्रक, भोल्युम, KMix, मिश्रण, लगइन, MIDI, संश्लेषक, सङ्गीत +Keywords[nl]=aRts,sound server,artsd,audio,sound,geluidsserver,geluid,opstarten,netwerk ,netwerktransparantie,priority,prioriteit,duplex,full duplex,response time,responstijd,volume,KMix,kanalen,login,aanmelden,synthesizer,muziek,mixer,midi, +Keywords[nn]=aRts,lydtenar,artsd,lyd,audio,oppstart,nettverkstransparens,transparens,prioritet,dupleks,full dupleks,svartid,responstid,miksar,volum,lydstyrke,KMix,innlogging,synt,musikk +Keywords[nso]=aRts,Seabi sa Modumo,artsd,Kwagalo,Modumo,thomiso, bobontsha tsakamosola bja kgokagano,bobontsha tsaka mosola,kgethokgolo,kgatiso, kgatiso yeo e feleletsego,nako ya phetolo,Setswaki,Volume,KMix,Motswako,tsena,MIDI, mokopanyi,mmino +Keywords[pl]=aRts,Serwer dźwiękowy,artsd,Audio,Dźwięk,uruchomienie,przeźroczystość dla sieci,przeźroczystość,priorytet,dupleks,pełny dupleks,czas odpowiedzi,mikser,głośność, KMix,Mix,logowanie,MIDI,syntezator,muzyka,rozpoczęcie pracy +Keywords[pt]=aRts,servidor de som,artsd,áudio,som,iniciar,transparência de rede,transparência,prioridade,duplex,full duplex,tempo de resposta,mistura,volume,KMix,Misturador,MIDI,ligação,sintetizador,música +Keywords[pt_BR]=aRts,servidor de som,artsd,áudio,som,inicialização,transparência de rede,transparência,prioridade,duplex,full-duplex,tempo de resposta,mixer,volume,KMix,Mix,login,MIDI,sintetizador,música +Keywords[ro]=aRts,server de sunet,artsd,audio,sunet,pornire,startare,transparență de rețea,transparență,prioritate,duplex,duplex integral,timp de răspuns,mixer,volum,KMix,logare,MIDI,sintetizator,muzică +Keywords[ru]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,music,звук,звуковой сервер,дуплекс,музыка +Keywords[rw]=aRts,Seriveri y'Ijwi,artsd,Inyumvo,Ijwi,gutangira,ububonerane bw'urusobemiyoboro,ububonerane,uburenganzira,nzira-ebyiri,nzira-ebyiri zuzuye,igihe cy'igisubizo,Muvanga,Agahindurajwi,K-Kuvanga,Kuvanga,ifashayinjira,MIDI,inanga,umuziki +Keywords[se]=aRts,jietnabálvá,artsd,audio,jietna,álggaheapmi,fierpmádatjietna,prioritehta,duplex,full duplex,vástidanáigi,mixer,sisačáliheapmi,MIDI,synthesizer,musihkka +Keywords[sk]=aRts,Zvukový server,artsd,Zvuk,Audio,štart,sieťová transparencia,priehľadnosť,priorita,duplex,plný duplex,čas reakcie,mixér,hlasitosť,kmix,mix,prihlásenie,MIDI,syntezátor,hudba +Keywords[sl]=aRts,zvočni strežnik,artsd,avdio,zvok,zagon,omrežna prosojnost,prosojnost,prioriteta,dupleks,duplex,full duplex,čas odgovora,Mixer,glasnost,KMix,Mix,prijava,MIDI,sintesajzer,glasba +Keywords[sr]=aRts,Звучни сервер,artsd,Аудио,Звук,Покретање,мрежна транспарентност,транспарентност,приоритет,дуплекс,пуни-дуплекс,време одзива +Keywords[sr@Latn]=aRts,Zvučni server,artsd,Audio,Zvuk,Pokretanje,mrežna transparentnost,transparentnost,prioritet,dupleks,puni-dupleks,vreme odziva +Keywords[sv]=aRts,Ljudserver,artsd,Ljud,uppstart,nätverkstransparens,transparens,prioritet,duplex,full duplex,svarstid,Mixer,Volym,Kmix,Mixa,inloggning,MIDI,synthesizer,musik +Keywords[ta]=aRts,ஒலி சேவகன்,artsd,ஒலி,கேட்பு ஒலி,துவக்கம்,வலைதள ஊடகம்,ஊடகம்,முக்கியத்துவம்,இருதிசை,முழு இருதிசை,பதில் நேரம்,கலவை,ஒலியளவு,KMix,கல,நுழை,MIDI,இணைப்பாக்கி,இசை +Keywords[th]=aRts,Sound Server,artsd,Audio,เสียง,เริ่มต้น,network transparency,transparency,ลำดับก่อน,duplex,full duplex,เวลาในการตอบสนอง, มิกเซอร์,ระดับเสียง,KMix,Mix,ล็อกอิน,MIDI,synthesizer,ดนตรี +Keywords[tr]=aRts,Ses Sunucu,artsd,Ses,Ses,Başlangıç,ağ geçirgenliği,geçirgenlik,öncelik,dubleks,tam dubleks,karşılık süresi,MIDI,karıştırıcı,Kmix +Keywords[uk]=aRts,сервер звуку,artsd,аудіо,звук,запуск,прозорість мережі,прозорість,повний дуплекс,пріоритет,дуплекс,час відповіді,мікшер,гучність,KMix,MIDI,синтезатор,музика +Keywords[uz]=aRts,Tovush serveri,artsd,Audio,Tovush,startup,tarmoq shaffofligi,shaffoflik,muhimlik darajasi,dupleks,toʻliq dupleks,javob berish vaqti,Mikser,Tovush balandligi,KMix,Mix,kirish,MIDI,sintezator,musiqa +Keywords[uz@cyrillic]=aRts,Товуш сервери,artsd,Аудио,Товуш,startup,тармоқ шаффофлиги,шаффофлик,муҳимлик даражаси,дуплекс,тўлиқ дуплекс,жавоб бериш вақти,Миксер,Товуш баландлиги,KMix,Mix,кириш,MIDI,синтезатор,мусиқа +Keywords[ven]=aRts,Siva ya Mubvumo,artsd,Pfala,Mubvumo,thoma,vhudavhidzano ha khagala,khagala,tshipikwa,dubulekisi,dubulekisi yo fhelelaho, tshifhinga tshau fhindula,tshitanganisi,Volomu,KMix,Tanganisa, u loga,MIDI,tshiiti,muzika +Keywords[vi]=aRts,Trình phục vụ Âm thanh,artsd,Âm nhạc, âm thanh,khởi động,mạng trong suốt,trong suốt,ưu tiên,kép,kép hoàn toàn,phản hồi thời gian,Bộ hoà âm,Âm lượng,KMix,Trộn,đăng nhập,MIDI,Bộ tổng hợp âm nhạc,âm nhạc +Keywords[wa]=aRts,Sound Server,sierveu d' son,artsd,Audio,son,Sound,startup,enonde tot seu,transparince rantoele, transparince,prumîristé,duplex,full duplex,complet duplex,tins d' response,Mixer,maxheu,Volume,KMix,Mix,login,MIDI,synthesizer,forveyeu,muzike +Keywords[xh]=aRts,Umncedisi Wesandi,artsd,Evakalayo,qalisa kwakhona,umsebenzi womnatha obinisa ngaphaya, Isandi,Isandi,isiqalo,ubono ngaphaya komsebenzi womnatha,bona ngaphaya,intshukumo yokuqala,into ephindwe kabinini,into ephindwe kabini epheleleyo,ixesha lokujongana nokuthile +Keywords[zh_CN]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,声音服务器,声音,启动,网络透明,优先级,全双工,响应时间 +Keywords[zh_TW]=aRts,Sound Server,artsd,Audio,Sound,startup,network transparency,transparency,priority,duplex,full duplex,response time,Mixer,Volume,KMix,Mix,login,MIDI,synthesizer,musica,聲音伺服器,聲音,啟動,網路透明,優先級,全雙工,響應時間,混音器,音量,登入 +Keywords[zu]=aRts,Umlekeleli Womsindo,artsd,Okuzwakalayo,Umsindo,Isiqaliso, ukubonakala koxhumano olusakazekile,Ukubonakala ngale,ukubaluleka,okunezingxemye ezimbili,okunezingxenye ezimbili eziphendulanayo,isikhathi sokuphendula, Umxubi,Izinga lomsindo,KMix,Xuba,ngena ngaphakathi,MIDI,umlungisi womsindo, umculo + +Categories=Qt;KDE;X-KDE-settings-sound; diff --git a/kcontrol/arts/arts.h b/kcontrol/arts/arts.h new file mode 100644 index 000000000..e69f5767d --- /dev/null +++ b/kcontrol/arts/arts.h @@ -0,0 +1,135 @@ + /* + + Copyright (C) 2000 Stefan Westerfeld + stefan@space.twc.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Permission is also granted to link this program with the Qt + library, treating Qt like a library that normally accompanies the + operating system kernel, whether or not that is in fact the case. + + */ + +#ifndef KARTSCONFIG_H +#define KARTSCONFIG_H + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "generaltab.h" +#include "hardwaretab.h" + + +class KProcess; +class DeviceManager; + +class KArtsModule : public KCModule +{ + Q_OBJECT + +public: + + KArtsModule(QWidget *parent=0, const char *name=0); + ~KArtsModule(); + void saveParams( void ); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + + bool artsdIsRunning(); + +private slots: + + void slotChanged(); + void slotTestSound(); + void slotArtsdExited(KProcess* proc); + void slotProcessArtsdOutput(KProcess* p, char* buf, int len); + //void slotStartServerChanged(); + +private: + + void updateWidgets (); + void calculateLatency(); + QString createArgs(bool netTrans,bool duplex, int fragmentCount, + int fragmentSize, + const QString &deviceName, + int rate, int bits, const QString &audioIO, + const QString &addOptions, bool autoSuspend, + int suspendTime); + int userSavedChanges(); + + QCheckBox *startServer, *startRealtime, *networkTransparent, + *fullDuplex, *customDevice, *customRate, *autoSuspend; + QLineEdit *deviceName; + QSpinBox *samplingRate; + KIntNumInput *suspendTime; + generalTab *general; + hardwareTab *hardware; + KConfig *config; + DeviceManager *deviceManager; + int latestProcessStatus; + int fragmentCount; + int fragmentSize; + bool configChanged; + bool realtimePossible; + + class AudioIOElement { + public: + AudioIOElement(const QString &name, const QString &fullName) + : name(name), fullName(fullName) {;} + QString name; + QString fullName; + }; + + void initAudioIOList(); + QPtrList audioIOList; + + void restartServer(); + bool realtimeIsPossible(); +}; + + +class KStartArtsProgressDialog : public KProgressDialog +{ + Q_OBJECT +public: + KStartArtsProgressDialog(KArtsModule *parent, const char *name, + const QString &caption, const QString &text); +public slots: + void slotProgress(); + void slotFinished(); + +private: + QTimer m_timer; + int m_timeStep; + KArtsModule *m_module; + bool m_shutdown; +}; + +#endif + diff --git a/kcontrol/arts/generaltab.ui b/kcontrol/arts/generaltab.ui new file mode 100644 index 000000000..5b7ba7f79 --- /dev/null +++ b/kcontrol/arts/generaltab.ui @@ -0,0 +1,330 @@ + +generalTab + + + generalTab + + + + 0 + 0 + 637 + 613 + + + + + 0 + 450 + + + + + unnamed + + + + startServer + + + + 1 + + + + &Enable the sound system + + + true + + + If this option is enabled, the sound system will be loaded on KDE startup. +Recommended if you want sound. + + + + + frame3 + + + HLine + + + Sunken + + + + + networkedSoundGroupBox + + + true + + + Networked Sound + + + + unnamed + + + + textLabel1_2 + + + <i>Enable this option if you want to play sound on a remote computer or you want to be able to control sound on this system from another computer.</i> + + + + + networkTransparent + + + Enable &networked sound + + + This option allows sound requests coming in from over the network to be accepted, instead of just limiting the server to the local computer. + + + + + + + realtimeGroupBox + + + Skip Prevention + + + + unnamed + + + + textLabel1 + + + <i>If your sound is skipping during playback, enable running with highest possible priority. Increasing your sound buffer might also help.</i> + + + + + startRealtime + + + &Run with the highest possible priority (realtime priority) + + + true + + + On systems which support realtime scheduling, if you have sufficient permissions, this option will enable a very high priority for processing sound requests. + + + + + latencySlider + + + 10 + + + 500 + + + 150 + + + Horizontal + + + NoMarks + + + 50 + + + + + textLabel5 + + + Sound &buffer: + + + latencySlider + + + + + latencyLabel + + + <p align="right"><b>Huge</b> buffer, for <b>low-end</b> machines, <b>less skipping</b></p> + + + + + + + autoSuspendGroupBox + + + Auto-Suspend + + + + unnamed + + + + textLabel5_2 + + + <i>The KDE sound system takes exclusive control over your audio hardware, blocking programs that may wish to use it directly. If the KDE sound system sits idle it can give up this exclusive control.</i> + + + + + layout7 + + + + unnamed + + + + autoSuspend + + + true + + + &Auto-suspend if idle after: + + + true + + + The sound server will suspend itself if idle for this period of time. + + + + + suspendTime + + + seconds + + + + + spacer17_2 + + + Horizontal + + + Expanding + + + + 173 + 20 + + + + + + + + + + layout3 + + + + unnamed + + + + spacer3_2_2 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + testSound + + + + 5 + 1 + 0 + 0 + + + + Test &Sound + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + + + spacer5 + + + Vertical + + + Expanding + + + + 20 + 0 + + + + + + + + + krichtextlabel.h + + + + knuminput.h + knuminput.h + + diff --git a/kcontrol/arts/hardwaretab.ui b/kcontrol/arts/hardwaretab.ui new file mode 100644 index 000000000..c11f19962 --- /dev/null +++ b/kcontrol/arts/hardwaretab.ui @@ -0,0 +1,358 @@ + +hardwareTab + + + hardwareTab + + + + 0 + 0 + 372 + 357 + + + + + unnamed + + + + groupBox4 + + + GroupBoxPanel + + + Sunken + + + Select && Configure your Audio Device + + + + unnamed + + + + layout57 + + + + unnamed + + + + textLabel3_2 + + + + 1 + 5 + 0 + 0 + + + + &Select the audio device: + + + audioIO + + + + + audioIO + + + + 7 + 0 + 0 + 0 + + + + + + + + layout31 + + + + unnamed + + + + fullDuplex + + + &Full duplex + + + true + + + This enables the soundserver to record and play sound at the same time. If you use applications like Internet telephony, voice recognition or similar, you probably want this. + + + + + + + customOptions + + + Use other custom &options: + + + + + customDevice + + + Override &device location: + + + + + layout4 + + + + unnamed + + + + spacer2 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + textLabel2 + + + &Quality: + + + soundQuality + + + + + + Default + + + + + 16 Bits (high) + + + + + 8 Bits (low) + + + + soundQuality + + + + 5 + 0 + 0 + 0 + + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 0 + 20 + + + + + + + + customRate + + + Use &custom sampling rate: + + + + + layout6 + + + + unnamed + + + + samplingRate + + + true + + + + 5 + 0 + 0 + 0 + + + + Hz + + + 99999 + + + 10 + + + 44100 + + + + + spacer4 + + + Horizontal + + + Expanding + + + + 0 + 20 + + + + + + + + addOptions + + + false + + + + + deviceName + + + false + + + /dev/dsp + + + + + + + groupBox3 + + + Select your MIDI Device + + + + unnamed + + + + midiUseMapper + + + Use MIDI ma&pper: + + + + + textLabel4 + + + Select the &MIDI device: + + + deviceName + + + + + midiDevice + + + + 7 + 0 + 0 + 0 + + + + + + midiMapper + + + false + + + + + + + spacer17 + + + Vertical + + + Expanding + + + + 20 + 60 + + + + + + + diff --git a/kcontrol/arts/krichtextlabel.cpp b/kcontrol/arts/krichtextlabel.cpp new file mode 100644 index 000000000..7e292cde1 --- /dev/null +++ b/kcontrol/arts/krichtextlabel.cpp @@ -0,0 +1,115 @@ +/* This file is part of the KDE libraries + Copyright (C) 2005 Waldo Bastian + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 "krichtextlabel.h" + +#include +#include +#include + +#include + +static QString qrichtextify( const QString& text ) +{ + if ( text.isEmpty() || text[0] == '<' ) + return text; + + QStringList lines = QStringList::split('\n', text); + for(QStringList::Iterator it = lines.begin(); it != lines.end(); ++it) + { + *it = QStyleSheet::convertFromPlainText( *it, QStyleSheetItem::WhiteSpaceNormal ); + } + + return lines.join(QString::null); +} + +KRichTextLabel::KRichTextLabel( const QString &text , QWidget *parent, const char *name ) + : QLabel ( parent, name ) { + m_defaultWidth = QMIN(500, KGlobalSettings::desktopGeometry(this).width()*3/5); + setAlignment( Qt::WordBreak ); + setText(text); +} + +KRichTextLabel::KRichTextLabel( QWidget *parent, const char *name ) + : QLabel ( parent, name ) { + m_defaultWidth = QMIN(500, KGlobalSettings::desktopGeometry(this).width()*3/5); + setAlignment( Qt::WordBreak ); +} + +void KRichTextLabel::setDefaultWidth(int defaultWidth) +{ + m_defaultWidth = defaultWidth; + updateGeometry(); +} + +QSizePolicy KRichTextLabel::sizePolicy() const +{ + return QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum, false); +} + +QSize KRichTextLabel::minimumSizeHint() const +{ + QString qt_text = qrichtextify( text() ); + int pref_width = 0; + int pref_height = 0; + QSimpleRichText rt(qt_text, font()); + pref_width = m_defaultWidth; + rt.setWidth(pref_width); + int used_width = rt.widthUsed(); + 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; + } + + return QSize(pref_width, rt.height()); +} + +QSize KRichTextLabel::sizeHint() const +{ + return minimumSizeHint(); +} + +void KRichTextLabel::setText( const QString &text ) { + if (!text.startsWith("")) + QLabel::setText(""+text+""); + else + QLabel::setText(text); +} + +void KRichTextLabel::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +#include "krichtextlabel.moc" diff --git a/kcontrol/arts/krichtextlabel.h b/kcontrol/arts/krichtextlabel.h new file mode 100644 index 000000000..e03fe2509 --- /dev/null +++ b/kcontrol/arts/krichtextlabel.h @@ -0,0 +1,65 @@ +/* This file is part of the KDE libraries + Copyright (C) 2005 Waldo Bastian + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 KRICHTEXTLABEL_H +#define KRICHTEXTLABEL_H + +#include + +#include + +/** + * @short A replacement for QLabel that supports richtext and proper layout management + * + * @author Waldo Bastian + */ + +/* + * QLabel + */ +class KDEUI_EXPORT KRichTextLabel : public QLabel { + Q_OBJECT + +public: + /** + * Default constructor. + */ + KRichTextLabel( QWidget *parent, const char *name = 0 ); + KRichTextLabel( const QString &text, QWidget *parent, const char *name = 0 ); + + int defaultWidth() const { return m_defaultWidth; } + void setDefaultWidth(int defaultWidth); + + virtual QSize minimumSizeHint() const; + virtual QSize sizeHint() const; + QSizePolicy sizePolicy() const; + +public slots: + void setText( const QString & ); + +protected: + int m_defaultWidth; + +protected: + virtual void virtual_hook( int id, void* data ); +private: + class KRichTextLabelPrivate; + KRichTextLabelPrivate *d; +}; + +#endif // KRICHTEXTLABEL_H diff --git a/kcontrol/background/Makefile.am b/kcontrol/background/Makefile.am new file mode 100644 index 000000000..e1d847ead --- /dev/null +++ b/kcontrol/background/Makefile.am @@ -0,0 +1,27 @@ +SUBDIRS = . pics + +AM_CPPFLAGS = -I$(top_srcdir)/libkonq $(all_includes) + +kde_module_LTLIBRARIES = kcm_background.la + +kcm_background_la_SOURCES = main.cpp +kcm_background_la_LDFLAGS = $(KDE_RPATH) -module -avoid-version $(all_libraries) -no-undefined +kcm_background_la_LIBADD = libkcmbgnd.la libbgnd.la $(LIB_KFILE) $(LIB_KNEWSTUFF) + +METASOURCES = AUTO + +noinst_HEADERS = main.h \ + bgrender.h bgsettings.h \ + bgdialog.h bgadvanced.h bgwallpaper.h bgdefaults.h bgmonitor.h + +noinst_LTLIBRARIES = libbgnd.la libkcmbgnd.la +libbgnd_la_SOURCES = bgrender.cpp bgsettings.cpp +libkcmbgnd_la_SOURCES = bgdialog.cpp bgdialog_ui.ui bgwallpaper_ui.ui \ + bgwallpaper.cpp bgadvanced_ui.ui bgadvanced.cpp bgmonitor.cpp + +main.lo: bgdialog_ui.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmbackground.pot + +xdg_apps_DATA = background.desktop diff --git a/kcontrol/background/background.desktop b/kcontrol/background/background.desktop new file mode 100644 index 000000000..7329a2b27 --- /dev/null +++ b/kcontrol/background/background.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Exec=kcmshell background +Icon=background +Type=Application +DocPath=kcontrol/background/index.html + + +X-KDE-Library=background +X-KDE-FactoryName=background +X-KDE-ParentApp=kcontrol + +Name=Background +Name[af]=Agtergrond +Name[ar]=الخلفية +Name[az]=Arxa plan +Name[be]=Фон +Name[bg]=Фон на екрана +Name[bn]=পটভূমি +Name[br]=Drekleur +Name[bs]=Pozadina +Name[ca]=Fons +Name[cs]=Pozadí +Name[csb]=Spòdlé +Name[cy]=Cefndir +Name[da]=Baggrund +Name[de]=Hintergrund +Name[el]=Φόντο +Name[eo]=Fono +Name[es]=Fondo +Name[et]=Taust +Name[eu]=Atzeko planoa +Name[fa]=زمینه +Name[fi]=Tausta +Name[fr]=Fond d'écran +Name[fy]=Eftergrûn +Name[ga]=Cúlra +Name[gl]=Fondo +Name[he]=רקע +Name[hi]=पृष्ठभूमि +Name[hr]=Pozadina +Name[hu]=Háttér +Name[id]=Latarbelakang +Name[is]=Bakgrunnur +Name[it]=Sfondo +Name[ja]=背景 +Name[ka]=ფონი +Name[kk]=Аясы +Name[km]=ផ្ទៃ​ខាង​ក្រោយ +Name[lo]=ພື້ນຫລັງ +Name[lt]=Fonas +Name[lv]=Fons +Name[mk]=Подлога +Name[mn]=Дэвсгэр +Name[ms]=Latar Belakang +Name[nb]=Bakgrunn +Name[nds]=Achtergrund +Name[ne]=पृष्ठभूमि +Name[nl]=Achtergrond +Name[nn]=Bakgrunn +Name[nso]=Bokamorago +Name[oc]=Fons +Name[pa]=ਪਿੱਠਭੂਮੀ +Name[pl]=Tło +Name[pt]=Fundo do Ecrã +Name[pt_BR]=Fundo de tela +Name[ro]=Fundal +Name[ru]=Фон +Name[rw]=Mburabuzi +Name[se]=Duogáš +Name[sk]=Pozadie +Name[sl]=Ozadje +Name[sr]=Позадина +Name[sr@Latn]=Pozadina +Name[ss]=Lingemuva +Name[sv]=Bakgrund +Name[ta]=பின்னணி +Name[tg]=Пасзамина +Name[th]=พื้นหลัง +Name[tr]=Arkaplan +Name[tt]=Asyaq +Name[uk]=Тло +Name[uz]=Orqa fon +Name[uz@cyrillic]=Орқа фон +Name[ven]=Zwangamurahu +Name[vi]=Ảnh nền +Name[wa]=Fond +Name[xh]=Indawo yangasemva +Name[zh_CN]=背景 +Name[zh_TW]=背景 +Name[zu]=Inkundla yangemuva + +Comment=Change the background settings +Comment[af]=Verander die agtergrond instellings +Comment[ar]=تغيير تعيينات الخلفية +Comment[az]=Arxa plan qurğularını dəyişdirin +Comment[be]=Змяняе настаўленні фону +Comment[bg]=Настройване фона на работния плот +Comment[bn]=পটভূমি সেটিংস পরিবর্তন করুন +Comment[br]=Kemmañ kefluniadur an drekleur +Comment[bs]=Promijenite postavke pozadine +Comment[ca]=Canvia l'arranjament de la configuració del fons +Comment[cs]=Změna nastavení pozadí +Comment[csb]=Ùstôw spódkù +Comment[cy]=Newid gosodiadau'r cefndir +Comment[da]=Ændr baggrundsindstillinger +Comment[de]=Hintergrundeinstellungen ändern +Comment[el]=Αλλάξτε τις ρυθμίσεις του φόντου +Comment[eo]=Ŝanĝu la agordon de la fono +Comment[es]=Modificación de las preferencias del fondo +Comment[et]=Töölaua tausta seaded +Comment[eu]=Aldatu atzeko planoaren ezarpenak +Comment[fa]=تغییر تنظیمات زمینه +Comment[fi]=Muuta taustan asetuksia +Comment[fr]=Configuration du fond d'écran +Comment[fy]=Eftergrûnynstellings wizigje +Comment[ga]=Athraigh socruithe an chúlra +Comment[gl]=Cambiar as opcións do fondo +Comment[he]=שינוי הגדרות הרקע +Comment[hi]=पृष्ठभूमि सेटिंग बदलें +Comment[hr]=Promjena postavki pozadine +Comment[hu]=A háttérbeállítások megváltoztatása +Comment[id]=Ubah pengaturan latar belakang +Comment[is]=Stillingar bakgrunns +Comment[it]=Cambia le impostazioni dello sfondo +Comment[ja]=背景の設定を変更 +Comment[ka]=ფონის კონფიგურაციის შეცვლა +Comment[kk]=Үстел аясын түрлендіру +Comment[km]=ផ្លាស់ប្តូរការ​កំណត់​ផ្ទៃ​ខាង​ក្រោយ +Comment[lo]=ຕັ້ງຄ່າພື້ນຫລັງ +Comment[lt]=Keisti fono parinktis +Comment[lv]=Mainīt fona parametrus +Comment[mk]=Изменете ги поставувањата на подлогата +Comment[mn]=Дэвсгэр өөрчилөх +Comment[ms]=Ubah seting latar belakang +Comment[mt]=Ibdel il-konfigurazzjoni tal-isfond +Comment[nb]=Endre bakgrunnsinnstillingene +Comment[nds]=Achtergrundinstellen ännern +Comment[ne]=पृष्ठभूमि सेटिङ परिवर्तन गर्नुहोस् +Comment[nl]=Achtergrondinstellingen wijzigen +Comment[nn]=Endra bakgrunnsinnstillingane +Comment[nso]=Fetosa dipeakanyo tsa bokamorago +Comment[pa]=ਪਿੱਠਭੂਮੀ ਸੈਟਿੰਗ ਤਬਦੀਲ +Comment[pl]=Ustawienia tła +Comment[pt]=Alterar a configuração do fundo +Comment[pt_BR]=Muda as configurações do fundo da tela +Comment[ro]=Configurează setările fundalului +Comment[ru]=Настройка фона рабочего стола +Comment[rw]=Guhindura amagenamiterere ya mbuganyuma +Comment[se]=Rievdat duogášheivehusaid +Comment[sk]=Nastavenie pozadia +Comment[sl]=Spremeni nastavitve ozadja +Comment[sr]=Измена поставки позадине +Comment[sr@Latn]=Izmena postavki pozadine +Comment[ss]=Tjintja kuhleleka kwelingemuva +Comment[sv]=Anpassa bakgrundsinställningar +Comment[ta]=பின்னனி அமைப்பை மாற்று +Comment[tg]=Таъғири танзимоти пасзамина +Comment[th]=เปลี่ยนการตั้งค่าพื้นหลัง +Comment[tr]=Arkaplan ayarlarını değiştirir +Comment[tt]=Asyaq caylawın üzgärtü +Comment[uk]=Зміна параметрів тла +Comment[uz]=Orqa fonning moslamalarini oʻzgartirish +Comment[uz@cyrillic]=Орқа фоннинг мосламаларини ўзгартириш +Comment[ven]=Shandukisani mavhekanyele anga murahu +Comment[vi]=Thay đổi thiết lập ảnh nền +Comment[wa]=Candjî les apontiaedjes do fond del waitroûle +Comment[xh]=Tshintsha izicwangciso zendawo yangasemva +Comment[zh_CN]=更改背景设置 +Comment[zh_TW]=改變背景設定 +Comment[zu]=Shintsha izilungiselelo zendawo yangemuva + +Keywords=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap +Keywords[az]=arxa plan,masa üstü,rənglər,rənglər,rəsmlər,divar kağızları,qarışdırma,denge,ön yaddaş,çoxlu divar kağızları,pixmap +Keywords[be]=фон,працоўныя сталы,колеры,відарысы,малюнкі,шпалеры,баланс,кэш,некалькі шпалераў,background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap +Keywords[bg]=фон, изображение, работен, плот, работен плот, background, desktops, colors, colours, images, wallpapers, blending, balance, cache, multiple wallpapers, pixmap +Keywords[ca]=fons,escriptoris,colors,colors,imatges,paper pintat,barreja,balanç,cau,múltiples papers pintats,mapa de píxels +Keywords[cs]=Pozadí,Plochy,Barvy,Obrázky,Tapety,Směšování,Vyvážení,Cache,Pixmapa +Keywords[csb]=spódk,spòdlé,pùltë,biurka,farwë,òbrôzczi,tapetë,mieszanié,pòdrãcznô pamiãc,wielorazowé tapetë,bitmapa +Keywords[cy]=cefndir,penbwrdd,lliwiau,lliwiau,delweddau,papurau w?l,cymysgu,cydbwys,storfa,papurau w?l lluosog,picsfap +Keywords[da]=baggrund,desktoppe,farver,billeder,tapeter,blanding,balance,cache,flere tapeter,billede +Keywords[de]=Hintergrund,Arbeitsflächen,Desktop,Farben,Bilder,Hintergrundbilder,Überblendung,Pixmap,Cache,Zwischenspeicher +Keywords[el]=φόντο,επιφάνειες εργασίας,χρώματα,χρώματα,εικόνες,ταπετσαρίες,εξομάλυνση,ισορροπία,λανθάνουσα μνήμη,πολλαπλές ταπετσαρίες,pixmap +Keywords[en_GB]=background,desktops,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap +Keywords[eo]=fono,tabuloj,koloroj,bildoj,tapetoj,kolorŝanĝo,tenejo,rastrobildo +Keywords[es]=fondo,escritorios,colores,imágenes,tapices,mezcla,equilibrio,caché,tapices múltiples,mapa de píxeles,pixmap +Keywords[et]=taust,töölaud,töölauad,värvid,pildid,taustapildid,üleminek,tasakaal,vahemälu,pikselrastrid +Keywords[eu]=atzeko planoa,mahaigainak,kolorea,koloreak,irudiak,hormapaperak,nahasketa, oreka,katxea,hormapaper anitz,pixel mapa +Keywords[fa]=زمینه، رومیزیها، رنگها، رنگها، تصاویر، کاغذهای دیواری، مخلوط، توازن، نهانگاه، کاغذ دیواریهای متعدد، نگاشت بیت +Keywords[fi]=tausta,työpöydät,värit,kuvat,taustakuvat,sekoitus,välimuisti,useat taustakuvat,kuvakartat +Keywords[fr]=fond d'écran,fond,bureau,couleur,image,papier peint,image de fond,dégradé,cache,papiers peints multiples +Keywords[fy]=eftergrûn,buroblêden,kleur,kleuren,ôfbyldingen,behang,ferminge, balâns,lyts ûnthâld,meardere ôfbyldingen,pixmap,grafysk +Keywords[ga]=cúlra,deasca,dathanna,íomhánna,cúlbhrait,cumasc,cothrom,taisce,cúlbhrait iomadúla,mapa picteilíní +Keywords[gl]=fondo,escritórios,cores,imaxes,papeis tapiz,balance,cache,múltiples papeis tapiz,mapa de píxels +Keywords[he]=רקע,תמונות,background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple,wallpapers,pixmapפטים,עירוב,איזון,מטמון,טפטים,מרובים,צבעים,שולחנות עבודה, +Keywords[hi]=पृष्ठभूमि,डेस्कटॉप,रंग,अनेक रंग,छवि,वालपेपर,ब्लेंडिंग,बैलेंस,कैश,अनेक वालपेपर,पिक्समैप +Keywords[hr]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap,pozadina, radna površina,boje,boja,slike,slika radne površine,preklapanje,prozirnost,balans,pohrana,višestruke slike radne površine +Keywords[hu]=háttér,asztalok,színek,képek,tapéták,színkeverés,egyensúly,gyorstár,több tapéta,pixmap +Keywords[is]=bakgrunnur,skjáborð,litir,myndir,veggfóður,blöndun,jafnvægi,skyndiminni,mörg veggfóður,mynd,punktamynd,bitamynd +Keywords[it]=sfondo,desktop,colori,immagini,immagini di sfondo,sfumature,bilanciamento,cache,sfondi multipli +Keywords[ja]=背景,色,色付け,画像,壁紙,ブレンディング,バランス,キャッシュ,複数の壁紙,ピクスマップ +Keywords[km]=ផ្ទៃ​ខាង​ក្រោយ,ផ្ទៃតុ,ពណ៌,រូបភាព,ក្រដាស​បិទ​ជញ្ជាំង,ច្របល់,តុល្យភាព,ឃ្លាំង​សម្ងាត់,ក្រដាសបិទ​ជញ្ជាំង​ច្រើន,pixmap +Keywords[lt]=background,fonas,desktops,darbastaliai,colors,spalvos,colours,images,paveiksliukai,wallpapers,apmušalai,blending,balance,perėjimas,cache,kešas,krepšys,multiple wallpapers,pixmap,taškinė grafika +Keywords[lv]=fons,darbvirsmas,krāsu,krāsas,attēli,tapetes,saplūstošas,balanss,kešs,daudzas tapetes,piksmapi +Keywords[mk]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap,подлога,позадина,површини,бои,слики,позадини,мешање,рамнотежа,кеш,повеќе подлоги,повеќе позадини +Keywords[mn]=Дэвсгэр,Ажлын талбар,Desktop,Өнгө,Зураг,Дэвсгэр зураг,Анивчилт,Тэнцвэр,түр хадгалагч,pixmap +Keywords[nb]=bakgrunn,skrivebord,farger,bilder,bakgrunnsbilder,flere bakgrunnsbilder +Keywords[nds]=Achtergrund,Schriefdischen,Klören,Biller,wallpapers,blending,balance,Twischenspieker,multiple wallpapers,pixmap +Keywords[ne]=पृष्ठभूमि,डेस्कटप,रङ,रङ,छवि, क्यास,छवि,बहुविध वालपेपर,सन्तुलन,ब्लेन्डिङ पिक्सम्याप +Keywords[nl]=achtergrond,desktops,bureaubladen,kleur,kleuren,afbeeldingen,behang,wallpapers,gradiënt,vermenging,balans,cache,meerdere afbeeldingen,pixmap,graphics +Keywords[nn]=bakgrunn,skrivebord,fargar,bilete,bakgrunnsbilete,overgang,balanse,fleire bakgrunnsbilete +Keywords[nso]=bokamorago,di-desktop,mebala,mebala,ponagalo,wallpapers,blending,lekalekanya,polokelo,wallpapers tsa bontshi,pixmap +Keywords[pa]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap, ਵਾਲਪੇਪਰ, ਰੰਗ, ਚਿੱਤਰ, ਪਿੱਠਭੂਮੀ +Keywords[pl]=tło,pulpity,biurka,kolory,obrazki,tapety,mieszanie,równowaga,pamięć podręczna,wielokrotne tapety,mapa bitowa +Keywords[pt]=fundo,ecrãs,cores,imagens,papéis de parede,mistura,balanceamento,cache,múltiplos,imagem +Keywords[pt_BR]=fundo,áreas de trabalho,cores,imagens,papel de parede,mistura,balanço,cache,múltiplos papéis de parede,pixmap +Keywords[ro]=fundal,ecrane,culori,imagini,multiplu,amestecare,balans,cache,pixmap +Keywords[ru]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap,фон,изображение,обои,рабочий стол +Keywords[rw]=Mbuganyuma,ibiro,amabara,amabara,amashusho,impapurorukuta,ivanga,iringaniza,ubwihisho,impapurorukuta zitandukanye,ikaritapigisi +Keywords[se]=duogáš,čállinbeavddit,ivnnit,govat,duogášgovat,seaguheapmi,balánsa,máŋgá duogášgova +Keywords[sk]=pozadie,plochy,farby,obrázky,tapety,blending,rovnováha,cache,viacnásobné tapety,pixmap +Keywords[sl]=ozadje,namizja,barve,slike,tapete,več tapet,blending,pixmap +Keywords[sr]=позадина,радне површине,боје,слике,позадинске слике,претапање,баланс,кеш,вишеструке позадинске слике +Keywords[sr@Latn]=pozadina,radne površine,boje,slike,pozadinske slike,pretapanje,balans,keš,višestruke pozadinske slike +Keywords[sv]=bakgrund,skrivbord,färger,bilder,skrivbordsunderlägg,blandning,balans,cache,flera skrivbordsunderlägg,pixmapp +Keywords[ta]=பின்னணி,மேல்மேசை,வண்ணங்கள்,வண்ணங்கள்,சித்திரங்கள்,பின்னணி சித்திரங்கள்,கலத்தல்,மீதி,தற்காலிக,பலவகையான பின்னணி சித்திரங்கள்,பிக்ஸ்மாப் +Keywords[tg]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap, пасзамина +Keywords[th]=พื้นหลัง,พื้นที่ทำงาน,สี,ชุดสี,ภาพ,ภาพพื้นหลัง,สมดุล,แคช,พื้นหลังหลายภาพ,บิตแมพ +Keywords[tr]=artalan,masaüstü,renkler,renkler,resimler,duvar kağıtları,karıştırma,denge,ön bellek,çoklu duvar kağıtları,pixmap +Keywords[uk]=тло,стільниці,кольори,зображення,шпалери,перехід,баланс,кеш,декілька шпалери,pixmap,стільниці +Keywords[uz]=orqa fon,ish stollari,ranglar,rasmlar,wallpapers,blending,balance,kesh,multiple wallpapers,pixmap +Keywords[uz@cyrillic]=орқа фон,иш столлари,ранглар,расмлар,wallpapers,блендинг,balance,кэш,multiple wallpapers,pixmap +Keywords[ven]=murahu,desikithopo,mivhala,zwifanyiso,mabammbiri a luvhondoni,tanganisa,linganisa,cache,mabammbiri a luvhondoni manzhi,tsumbamashango ya phikisi +Keywords[vi]=nền,màn hình nền,màu,màu sắc,ảnh,ảnh nền,trộn,cân bằng,đệm,nhiều ảnh nền,mảng ảnh +Keywords[wa]=fond,sicribannes,coleurs,imaedjes,fond del waitroûle,maxhî,balance,muchete,sacwantes fonds d' waitroûle,pixmap +Keywords[xh]=indawo yangasemva,desktops,imibala,imibala,imifanekiso,amaphepha odonga,uxubo,isikali,indawo efihlakeleyo yokufihla izixhobo,amaphepha odonga amaninzi,imaphu ye pix +Keywords[zh_CN]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap,背景,桌面,颜色,图像,墙纸,混色,平衡,缓冲,多个墙纸,位图 +Keywords[zh_TW]=background,desktops,colors,colours,images,wallpapers,blending,balance,cache,multiple wallpapers,pixmap,背景,桌面,顏色,影像,桌布,混色,平衡,緩衝,多個桌布,位圖 +Keywords[zu]=inkundla yangemuva,ama-desktop,imibala,imibala,izithombe,amaphepha ezindonga,ukuxubanisa,ukulinganisa,cache,amaphepha ezindonga eziningi,pixmap + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/background/bgadvanced.cpp b/kcontrol/background/bgadvanced.cpp new file mode 100644 index 000000000..3218ec470 --- /dev/null +++ b/kcontrol/background/bgadvanced.cpp @@ -0,0 +1,507 @@ +/* vi: ts=8 sts=4 sw=4 + + This file is part of the KDE project, module kcmbackground. + + Copyright (C) 1999 Geert Jansen + Copyright (C) 2003 Waldo Bastian + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "bgrender.h" +#include "bgadvanced.h" +#include "bgadvanced_ui.h" + +#include + +/**** BGAdvancedDialog ****/ + +static QCString desktopConfigname() +{ + int desktop=0; + if (qt_xdisplay()) + desktop = DefaultScreen(qt_xdisplay()); + QCString name; + if (desktop == 0) + name = "kdesktoprc"; + else + name.sprintf("kdesktop-screen-%drc", desktop); + + return name; +} + + +BGAdvancedDialog::BGAdvancedDialog(KBackgroundRenderer *_r, + QWidget *parent, + bool m_multidesktop) + : KDialogBase(parent, "BGAdvancedDialog", + true, i18n("Advanced Background Settings"), + Ok | Cancel, Ok, true), + r(_r) +{ + dlg = new BGAdvancedBase(this); + setMainWidget(dlg); + + dlg->m_listPrograms->header()->setStretchEnabled ( true, 1 ); + dlg->m_listPrograms->setAllColumnsShowFocus(true); + + connect(dlg->m_listPrograms, SIGNAL(clicked(QListViewItem *)), + SLOT(slotProgramItemClicked(QListViewItem *))); + + // Load programs + QStringList lst = KBackgroundProgram::list(); + QStringList::Iterator it; + for (it=lst.begin(); it != lst.end(); ++it) + addProgram(*it); + + if (m_multidesktop) + { + KConfig cfg(desktopConfigname(), false, false); + cfg.setGroup( "General" ); + if (!cfg.readBoolEntry( "Enabled", true )) + { + dlg->m_groupIconText->hide(); + } + + dlg->m_spinCache->setSteps(512, 1024); + dlg->m_spinCache->setRange(0, 40960); + dlg->m_spinCache->setSpecialValueText(i18n("Unlimited")); + dlg->m_spinCache->setSuffix(i18n(" KB")); + + connect(dlg->m_buttonAdd, SIGNAL(clicked()), + SLOT(slotAdd())); + connect(dlg->m_buttonRemove, SIGNAL(clicked()), + SLOT(slotRemove())); + connect(dlg->m_buttonModify, SIGNAL(clicked()), + SLOT(slotModify())); + + connect(dlg->m_listPrograms, SIGNAL(doubleClicked(QListViewItem *)), + SLOT(slotProgramItemDoubleClicked(QListViewItem *))); + } + else + { + dlg->m_buttonAdd->hide(); + dlg->m_buttonRemove->hide(); + dlg->m_buttonModify->hide(); + dlg->m_groupIconText->hide(); + dlg->m_groupCache->hide(); + } + + connect( dlg->m_cbProgram, SIGNAL(toggled(bool)), + SLOT(slotEnableProgram(bool))); + + m_backgroundMode = m_oldBackgroundMode = r->backgroundMode(); + if (m_oldBackgroundMode == KBackgroundSettings::Program) + m_oldBackgroundMode = KBackgroundSettings::Flat; + + dlg->adjustSize(); + updateUI(); +} + +void BGAdvancedDialog::makeReadOnly() +{ + dlg->m_cbProgram->setEnabled(false); + dlg->m_listPrograms->setEnabled(false); +} + +void BGAdvancedDialog::setCacheSize(int s) +{ + dlg->m_spinCache->setValue(s); +} + +int BGAdvancedDialog::cacheSize() +{ + return dlg->m_spinCache->value(); +} + +QColor BGAdvancedDialog::textColor() +{ + return dlg->m_colorText->color(); +} + +void BGAdvancedDialog::setTextColor(const QColor &color) +{ + dlg->m_colorText->setColor(color); +} + +QColor BGAdvancedDialog::textBackgroundColor() +{ + return dlg->m_cbSolidTextBackground->isChecked() ? + dlg->m_colorTextBackground->color() : QColor(); +} + +void BGAdvancedDialog::setTextBackgroundColor(const QColor &color) +{ + dlg->m_colorTextBackground->blockSignals(true); + dlg->m_cbSolidTextBackground->blockSignals(true); + if (color.isValid()) + { + dlg->m_cbSolidTextBackground->setChecked(true); + dlg->m_colorTextBackground->setColor(color); + dlg->m_colorTextBackground->setEnabled(true); + } + else + { + dlg->m_cbSolidTextBackground->setChecked(false); + dlg->m_colorTextBackground->setColor(Qt::white); + dlg->m_colorTextBackground->setEnabled(false); + } + dlg->m_colorTextBackground->blockSignals(false); + dlg->m_cbSolidTextBackground->blockSignals(false); +} + +bool BGAdvancedDialog::shadowEnabled() +{ + return dlg->m_cbShadow->isChecked(); +} + +void BGAdvancedDialog::setShadowEnabled(bool enabled) +{ + dlg->m_cbShadow->setChecked(enabled); +} + +void BGAdvancedDialog::setTextLines(int lines) +{ + dlg->m_spinTextLines->setValue(lines); +} + +int BGAdvancedDialog::textLines() const +{ + return dlg->m_spinTextLines->value(); +} + +void BGAdvancedDialog::setTextWidth(int width) +{ + dlg->m_spinTextWidth->setValue(width); +} + +int BGAdvancedDialog::textWidth() const +{ + return dlg->m_spinTextWidth->value(); +} + +void BGAdvancedDialog::updateUI() +{ + QString prog = r->KBackgroundProgram::name(); + + dlg->m_cbProgram->blockSignals(true); + if ((r->backgroundMode() == KBackgroundSettings::Program) + && !prog.isEmpty()) + { + dlg->m_cbProgram->setChecked(true); + dlg->m_listPrograms->setEnabled(true); + dlg->m_buttonAdd->setEnabled(true); + dlg->m_buttonRemove->setEnabled(true); + dlg->m_buttonModify->setEnabled(true); + selectProgram(prog); + } + else + { + dlg->m_cbProgram->setChecked(false); + dlg->m_listPrograms->setEnabled(false); + dlg->m_buttonAdd->setEnabled(false); + dlg->m_buttonRemove->setEnabled(false); + dlg->m_buttonModify->setEnabled(false); + } + dlg->m_cbProgram->blockSignals(false); +} + +void BGAdvancedDialog::removeProgram(const QString &name) +{ + if (m_programItems.find(name)) + { + delete m_programItems[name]; + m_programItems.remove(name); + } +} + +void BGAdvancedDialog::addProgram(const QString &name) +{ + removeProgram(name); + + KBackgroundProgram prog(name); + if (prog.command().isEmpty() || (prog.isGlobal() && !prog.isAvailable())) + return; + + QListViewItem *item = new QListViewItem(dlg->m_listPrograms); + item->setText(0, prog.name()); + item->setText(1, prog.comment()); + item->setText(2, i18n("%1 min.").arg(prog.refresh())); + + m_programItems.insert(name, item); +} + +void BGAdvancedDialog::selectProgram(const QString &name) +{ + if (m_programItems.find(name)) + { + QListViewItem *item = m_programItems[name]; + dlg->m_listPrograms->ensureItemVisible(item); + dlg->m_listPrograms->setSelected(item, true); + m_selectedProgram = name; + } +} + +void BGAdvancedDialog::slotAdd() +{ + KProgramEditDialog dlg; + dlg.exec(); + if (dlg.result() == QDialog::Accepted) + { + QString program = dlg.program(); + addProgram(program); + selectProgram(program); + } +} + +void BGAdvancedDialog::slotRemove() +{ + if (m_selectedProgram.isEmpty()) + return; + + KBackgroundProgram prog(m_selectedProgram); + if (prog.isGlobal()) + { + KMessageBox::sorry(this, + i18n("Unable to remove the program: the program is global " + "and can only be removed by the system administrator."), + i18n("Cannot Remove Program")); + return; + } + if (KMessageBox::warningContinueCancel(this, + i18n("Are you sure you want to remove the program `%1'?") + .arg(prog.name()), + i18n("Remove Background Program"), + i18n("&Remove")) != KMessageBox::Continue) + return; + + prog.remove(); + removeProgram(m_selectedProgram); + m_selectedProgram = QString::null; +} + +/* + * Modify a program. + */ +void BGAdvancedDialog::slotModify() +{ + if (m_selectedProgram.isEmpty()) + return; + + KProgramEditDialog dlg(m_selectedProgram); + dlg.exec(); + if (dlg.result() == QDialog::Accepted) + { + QString program = dlg.program(); + if (program != m_selectedProgram) + { + KBackgroundProgram prog(m_selectedProgram); + prog.remove(); + removeProgram(m_selectedProgram); + } + addProgram(dlg.program()); + selectProgram(dlg.program()); + } +} + +void BGAdvancedDialog::slotProgramItemClicked(QListViewItem *item) +{ + if (item) + m_selectedProgram = item->text(0); + slotProgramChanged(); +} + +void BGAdvancedDialog::slotProgramItemDoubleClicked(QListViewItem *item) +{ + slotProgramItemClicked(item); + slotModify(); +} + +void BGAdvancedDialog::slotProgramChanged() +{ + if (dlg->m_cbProgram->isChecked() && !m_selectedProgram.isEmpty()) + m_backgroundMode = KBackgroundSettings::Program; + else + m_backgroundMode = m_oldBackgroundMode; +} + +void BGAdvancedDialog::slotEnableProgram(bool b) +{ + dlg->m_listPrograms->setEnabled(b); + if (b) + { + dlg->m_listPrograms->blockSignals(true); + QListViewItem *cur = dlg->m_listPrograms->currentItem(); + dlg->m_listPrograms->setSelected(cur, true); + dlg->m_listPrograms->ensureItemVisible(cur); + dlg->m_listPrograms->blockSignals(false); + slotProgramItemClicked(cur); + } + else + { + slotProgramChanged(); + } +} + +QString BGAdvancedDialog::backgroundProgram() const +{ + return m_selectedProgram; +} + +int BGAdvancedDialog::backgroundMode() const +{ + return m_backgroundMode; +} + +/**** KProgramEditDialog ****/ + +KProgramEditDialog::KProgramEditDialog(const QString &program, QWidget *parent, char *name) + : KDialogBase(parent, name, true, i18n("Configure Background Program"), + Ok | Cancel, Ok, true) +{ + QFrame *frame = makeMainWidget(); + + QGridLayout *grid = new QGridLayout(frame, 6, 2, 0, spacingHint()); + grid->addColSpacing(1, 300); + + QLabel *lbl = new QLabel(i18n("&Name:"), frame); + grid->addWidget(lbl, 0, 0); + m_NameEdit = new QLineEdit(frame); + lbl->setBuddy(m_NameEdit); + grid->addWidget(m_NameEdit, 0, 1); + + lbl = new QLabel(i18n("Co&mment:"), frame); + grid->addWidget(lbl, 1, 0); + m_CommentEdit = new QLineEdit(frame); + lbl->setBuddy(m_CommentEdit); + grid->addWidget(m_CommentEdit, 1, 1); + + lbl = new QLabel(i18n("Comman&d:"), frame); + grid->addWidget(lbl, 2, 0); + m_CommandEdit = new QLineEdit(frame); + lbl->setBuddy(m_CommandEdit); + grid->addWidget(m_CommandEdit, 2, 1); + + lbl = new QLabel(i18n("&Preview cmd:"), frame); + grid->addWidget(lbl, 3, 0); + m_PreviewEdit = new QLineEdit(frame); + lbl->setBuddy(m_PreviewEdit); + grid->addWidget(m_PreviewEdit, 3, 1); + + lbl = new QLabel(i18n("&Executable:"), frame); + grid->addWidget(lbl, 4, 0); + m_ExecEdit = new QLineEdit(frame); + lbl->setBuddy(m_ExecEdit); + grid->addWidget(m_ExecEdit, 4, 1); + + lbl = new QLabel(i18n("&Refresh time:"), frame); + grid->addWidget(lbl, 5, 0); + m_RefreshEdit = new QSpinBox(frame); + m_RefreshEdit->setRange(5, 60); + m_RefreshEdit->setSteps(5, 10); + m_RefreshEdit->setSuffix(i18n(" min")); + m_RefreshEdit->setFixedSize(m_RefreshEdit->sizeHint()); + lbl->setBuddy(m_RefreshEdit); + grid->addWidget(m_RefreshEdit, 5, 1, AlignLeft); + + m_Program = program; + if (m_Program.isEmpty()) { + KBackgroundProgram prog(i18n("New Command")); + int i = 1; + while (!prog.command().isEmpty()) + prog.load(i18n("New Command <%1>").arg(i++)); + m_NameEdit->setText(prog.name()); + m_NameEdit->setSelection(0, 100); + m_RefreshEdit->setValue(15); + return; + } + + // Fill in the fields + m_NameEdit->setText(m_Program); + KBackgroundProgram prog(m_Program); + m_CommentEdit->setText(prog.comment()); + m_ExecEdit->setText(prog.executable()); + m_CommandEdit->setText(prog.command()); + m_PreviewEdit->setText(prog.previewCommand()); + m_RefreshEdit->setValue(prog.refresh()); +} + + +QString KProgramEditDialog::program()const +{ + return m_NameEdit->text(); +} + +void KProgramEditDialog::slotOk() +{ + QString s = m_NameEdit->text(); + if (s.isEmpty()) { + KMessageBox::sorry(this, i18n("You did not fill in the `Name' field.\n" + "This is a required field.")); + return; + } + + KBackgroundProgram prog(s); + if ((s != m_Program) && !prog.command().isEmpty()) { + int ret = KMessageBox::warningContinueCancel(this, + i18n("There is already a program with the name `%1'.\n" + "Do you want to overwrite it?").arg(s),QString::null,i18n("Overwrite")); + if (ret != KMessageBox::Continue) + return; + } + + if (m_ExecEdit->text().isEmpty()) { + KMessageBox::sorry(this, i18n("You did not fill in the `Executable' field.\n" + "This is a required field.")); + return; + } + if (m_CommandEdit->text().isEmpty()) { + KMessageBox::sorry(this, i18n("You did not fill in the `Command' field.\n" + "This is a required field.")); + return; + } + + prog.setComment(m_CommentEdit->text()); + prog.setExecutable(m_ExecEdit->text()); + prog.setCommand(m_CommandEdit->text()); + prog.setPreviewCommand(m_PreviewEdit->text()); + prog.setRefresh(m_RefreshEdit->value()); + + prog.writeSettings(); + accept(); +} + + +#include "bgadvanced.moc" diff --git a/kcontrol/background/bgadvanced.h b/kcontrol/background/bgadvanced.h new file mode 100644 index 000000000..6ede665a1 --- /dev/null +++ b/kcontrol/background/bgadvanced.h @@ -0,0 +1,121 @@ +/* vi: ts=8 sts=4 sw=4 + + This file is part of the KDE project, module kcmbackground. + + Copyright (C) 1999 Geert Jansen + Copyright (C) 2003 Waldo Bastian + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 BGADVANCED_H +#define BGADVANCED_H + +#include +#include +#include + +#include + +class QLineEdit; +class QSpinBox; + +class BGAdvancedBase; +class KBackgroundRenderer; +class KBackgroundProgram; + +class BGAdvancedDialog : public KDialogBase +{ + Q_OBJECT +public: + BGAdvancedDialog(KBackgroundRenderer *_r, QWidget *parent, bool m_multidesktop); + + void setCacheSize(int s); + int cacheSize(); + QColor textColor(); + void setTextColor(const QColor &color); + QColor textBackgroundColor(); + void setTextBackgroundColor(const QColor &color); + bool shadowEnabled(); + void setShadowEnabled(bool enabled); + void setTextLines(int lines); + int textLines() const; + void setTextWidth(int width); + int textWidth() const; + + void updateUI(); + + void makeReadOnly(); + + QString backgroundProgram() const; + int backgroundMode() const; + +public slots: + void slotAdd(); + void slotRemove(); + void slotModify(); + +protected: + void addProgram(const QString &name); + void removeProgram(const QString &name); + void selectProgram(const QString &name); + +protected slots: + void slotProgramItemClicked(QListViewItem *item); + void slotProgramItemDoubleClicked(QListViewItem *item); + void slotProgramChanged(); + void slotEnableProgram(bool b); + +private: + KBackgroundRenderer *r; + + BGAdvancedBase *dlg; + + QWidget *m_pMonitor; + QDict m_programItems; + QString m_selectedProgram; + int m_oldBackgroundMode; + int m_backgroundMode; +}; + +/** + * Dialog to edit a background program. + */ +class KProgramEditDialog: public KDialogBase +{ + Q_OBJECT + +public: + KProgramEditDialog(const QString &program=QString::null, QWidget *parent=0L, + char *name=0L); + + /** The program name is here in case the user changed it */ + QString program()const; + +public slots: + void slotOk(); + +private: + QString m_Program; + QLineEdit *m_NameEdit, *m_CommentEdit; + QLineEdit *m_ExecEdit, *m_CommandEdit; + QLineEdit *m_PreviewEdit; + QSpinBox *m_RefreshEdit; + KBackgroundProgram *m_Prog; +}; + + +#endif + diff --git a/kcontrol/background/bgadvanced_ui.ui b/kcontrol/background/bgadvanced_ui.ui new file mode 100644 index 000000000..6aa3d436a --- /dev/null +++ b/kcontrol/background/bgadvanced_ui.ui @@ -0,0 +1,462 @@ + +BGAdvancedBase + + + BGAdvancedBase + + + + 0 + 0 + 511 + 454 + + + + + unnamed + + + 0 + + + + m_groupProgram + + + Background Program + + + + unnamed + + + 11 + + + + m_buttonAdd + + + false + + + &Add... + + + <qt> +<p>Click here if you want to add a program to the listbox. This button opens a dialog where you are asked to give details about the program you want to run. To successfully add a program, you must know if it is compatible, the name of the executable file and, if necessary, its options.</p> +<p>You usually can get the available options to a suitable program by typing in a terminal emulator the name of the executable file plus --help (foobar --help).</p> +</qt> + + + + + m_buttonRemove + + + false + + + &Remove + + + Click here to remove programs from this list. Please note that it does not remove the program from your system, it only removes it from the available options in the background drawing programs list. + + + + + m_buttonModify + + + false + + + &Modify... + + + <qt> +<p>Click here to modify the programs options. You usually can get the available options to a suitable program by typing in a terminal emulator the name of the executable file plus --help. (example: kwebdesktop --help).</p> +<p>One useful example is the program kwebdesktop. It draws a web page on the background of your desktop. You can use this program by selecting it on the listbox on the right, but it will draw a predefined web page. To change the web page it renders, select the kwebdesktop program on the listbox, then click here. A dialog will appear, allowing you to change the web page by replacing the old address (URL) with a new one.</p> +</qt> + + + + + spacer + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + Program + + + true + + + true + + + + + Comment + + + true + + + true + + + + + Refresh + + + true + + + true + + + + m_listPrograms + + + false + + + + 400 + 0 + + + + <qt> +<p>Select from this listbox the program you want to use to draw your desktop background.</p> +<p>The <b>Program</b> column shows the name of the program.<br> +The <b>Comment</b> column brings a short description.<br> +The <b>Refresh</b> column indicates the time interval between redraws of the desktop.</p> +<p>The <b>K Web Desktop</b> program (kwebdesktop) is worth noting: it draws a specified page of the web in your desktop. You can modify it, and the webpage it draws by selecting it here, then clicking on the <b>Modify</b> button.<br> +You can also add new compliant programs. To do that, click on the <b>Add</b> button.<br> +You can also remove programs from this list clicking on the <b>Remove</b> button. Please note that it does not remove the program from your system, it only removes it from the available options in this listbox.</p> +</qt> + + + + + m_cbProgram + + + Use the following program for drawing the background: + + + Check here if you want to allow a program to draw your desktop background. Below you can find the list of programs currently available for drawing the background. You may use one of the available programs, add new ones or modify the existing ones to fit your needs. + + + + + + + m_groupIconText + + + Background Icon Text + + + + unnamed + + + + m_colorText + + + + 1 + 0 + 0 + 0 + + + + + + + Click here to change the color of the desktop font. + + + + + textLabel6 + + + &Text color: + + + m_colorText + + + Click here to change the color of the desktop font. + + + + + spacer7 + + + Horizontal + + + Expanding + + + + 220 + 20 + + + + + + m_colorTextBackground + + + false + + + + + + Click here to select the solid background color. Choose a different color from the background text color to assure readability. + + + + + m_cbSolidTextBackground + + + &Use solid color behind text: + + + Check here if you want to use a solid background color. This is useful to ensure that the desktop text will be identifiable against all background colors and wallpapers, or in other words, that a background or wallpaper will not make a desktop text of a similar color difficult to read. + + + + + m_cbShadow + + + &Enable shadow + + + Check here to enable a shadow outline around the desktop font. This also improves the readability of the desktop text against backgrounds of a similar color. + + + + + textLabel6_2 + + + &Lines for icon text: + + + m_colorText + + + Choose here the maximum number of text lines below an icon on the desktop. Longer text will be truncated at the end of the last line. + + + + + m_spinTextLines + + + + + + 0 + + + Choose here the maximum number of text lines below an icon on the desktop. Longer text will be truncated at the end of the last line. + + + + + m_spinTextWidth + + + + + + Auto + + + 99999 + + + 0 + + + Choose here the maximum width of text lines (in pixel) below an icon on the desktop. If set to 'Auto' a default width based on the current font is used. + + + + + textLabel6_2_2 + + + &Width for icon text: + + + m_colorText + + + Choose here the maximum width of text lines (in pixel) below an icon on the desktop. If set to 'Auto' a default width based on the current font is used. + + + + + + + m_groupCache + + + Memory Usage + + + + unnamed + + + 11 + + + + m_lblCache + + + Size of background cache: + + + In this box you can enter how much memory KDE should use for caching the background(s). If you have different backgrounds for the different desktops caching can make switching desktops smoother at the expense of higher memory use. + + + + + m_spinCache + + + k + + + In this box you can enter how much memory KDE should use for caching the background(s). If you have different backgrounds for the different desktops caching can make switching desktops smoother at the expense of higher memory use. + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + spacer4 + + + Vertical + + + Expanding + + + + 20 + 16 + + + + + + + + + + m_cbProgram + toggled(bool) + m_buttonAdd + setEnabled(bool) + + + m_cbProgram + toggled(bool) + m_buttonRemove + setEnabled(bool) + + + m_cbProgram + toggled(bool) + m_buttonModify + setEnabled(bool) + + + m_cbProgram + toggled(bool) + m_listPrograms + setEnabled(bool) + + + m_cbSolidTextBackground + toggled(bool) + m_colorTextBackground + setEnabled(bool) + + + + m_cbProgram + m_listPrograms + m_buttonAdd + m_buttonRemove + m_buttonModify + m_colorText + m_cbSolidTextBackground + m_colorTextBackground + m_cbShadow + m_spinCache + + + kdialog.h + + + + + kcolorbutton.h + kcolorbutton.h + + diff --git a/kcontrol/background/bgdefaults.h b/kcontrol/background/bgdefaults.h new file mode 100644 index 000000000..99846f0b0 --- /dev/null +++ b/kcontrol/background/bgdefaults.h @@ -0,0 +1,38 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ +#ifndef __BGDefaults_h_Included__ +#define __BGDefaults_h_Included__ + + +// Globals +#define _defDrawBackgroundPerScreen false +#define _defCommonScreen true +#define _defCommonDesk true +#define _defDock true +#define _defExport false +#define _defLimitCache false +#define _defCacheSize 2048 + +#define _defShm false +// there are usually poor results with bpp<16 when tiling +#define _defMinOptimizationDepth 1 + +// Per desktop defaults +// Before you change this get in touch with me (torsten@kde.org) +// Thanks!! +#define _defColorA QColor("#003082") +#define _defColorB QColor("#C0C0C0") +#define _defBackgroundMode KBackgroundSettings::Flat +#define _defWallpaperMode KBackgroundSettings::NoWallpaper +#define _defMultiMode KBackgroundSettings::NoMulti +#define _defBlendMode KBackgroundSettings::NoBlending +#define _defBlendBalance 100 +#define _defReverseBlending false + +#endif // __BGDefaults_h_Included__ diff --git a/kcontrol/background/bgdialog.cpp b/kcontrol/background/bgdialog.cpp new file mode 100644 index 000000000..398e30d56 --- /dev/null +++ b/kcontrol/background/bgdialog.cpp @@ -0,0 +1,1279 @@ +/* + kate: space-indent on; indent-width 3; indent-mode cstyle; + + This file is part of the KDE libraries + + Copyright (c) 2005 David Saxton + Copyright (c) 2003 Waldo Bastian + Copyright (c) 1999 Geert Jansen + Copyright (c) 1996 Martin R. Jones + Copyright (c) 1997 Matthias Hoelzer + Copyright (c) 1997 Mark Donohoe + Copyright (c) 1998 Stephan Kulow + Copyright (c) 1998 Matej Koss + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "bgmonitor.h" +#include "bgwallpaper.h" +#include "bgadvanced.h" +#include "bgdialog.h" + +#define NR_PREDEF_PATTERNS 6 + +BGDialog::BGDialog(QWidget* parent, KConfig* _config, bool _multidesktop) + : BGDialog_UI(parent, "BGDialog") +{ + m_pGlobals = new KGlobalBackgroundSettings(_config); + m_pDirs = KGlobal::dirs(); + m_multidesktop = _multidesktop; + m_previewUpdates = true; + + m_numDesks = m_multidesktop ? KWin::numberOfDesktops() : 1; + m_numScreens = QApplication::desktop()->numScreens(); + + QCString multiHead = getenv("KDE_MULTIHEAD"); + if (multiHead.lower() == "true") + { + m_numScreens = 1; + } + + m_desk = m_multidesktop ? KWin::currentDesktop() : 1; + m_screen = QApplication::desktop()->screenNumber(this); + if (m_screen >= (int)m_numScreens) + m_screen = m_numScreens-1; + + m_eDesk = m_pGlobals->commonDeskBackground() ? 0 : m_desk; + getEScreen(); + m_copyAllDesktops = true; + m_copyAllScreens = true; + + if (!m_multidesktop) + { + m_pDesktopLabel->hide(); + m_comboDesktop->hide(); + } + + if (m_numScreens < 2) + { + m_comboScreen->hide(); + m_buttonIdentifyScreens->hide(); + m_screen = 0; + m_eScreen = 0; + } + + connect(m_buttonIdentifyScreens, SIGNAL(clicked()), SLOT(slotIdentifyScreens())); + + // preview monitor + m_pMonitorArrangement = new BGMonitorArrangement(m_screenArrangement, "monitor arrangement"); + connect(m_pMonitorArrangement, SIGNAL(imageDropped(const QString &)), SLOT(slotImageDropped(const QString &))); + if( m_multidesktop) + { + // desktop + connect(m_comboDesktop, SIGNAL(activated(int)), + SLOT(slotSelectDesk(int))); + } + if (m_numScreens > 1) + { + connect(m_comboScreen, SIGNAL(activated(int)), + SLOT(slotSelectScreen(int))); + } + + // background image settings + QIconSet iconSet = SmallIconSet(QString::fromLatin1("fileopen")); + QPixmap pixMap = iconSet.pixmap( QIconSet::Small, QIconSet::Normal ); + m_urlWallpaperButton->setIconSet( iconSet ); + m_urlWallpaperButton->setFixedSize( pixMap.width()+8, pixMap.height()+8 ); + QToolTip::add(m_urlWallpaperButton, i18n("Open file dialog")); + + connect(m_buttonGroupBackground, SIGNAL(clicked(int)), + SLOT(slotWallpaperTypeChanged(int))); + connect(m_urlWallpaperBox, SIGNAL(activated(int)), + SLOT(slotWallpaper(int))); + connect(m_urlWallpaperButton, SIGNAL(clicked()), + SLOT(slotWallpaperSelection())); + connect(m_comboWallpaperPos, SIGNAL(activated(int)), + SLOT(slotWallpaperPos(int))); + connect(m_buttonSetupWallpapers, SIGNAL(clicked()), + SLOT(slotSetupMulti())); + + // set up the background colour stuff + connect(m_colorPrimary, SIGNAL(changed(const QColor &)), + SLOT(slotPrimaryColor(const QColor &))); + connect(m_colorSecondary, SIGNAL(changed(const QColor &)), + SLOT(slotSecondaryColor(const QColor &))); + connect(m_comboPattern, SIGNAL(activated(int)), + SLOT(slotPattern(int))); + + // blend + connect(m_comboBlend, SIGNAL(activated(int)), SLOT(slotBlendMode(int))); + connect(m_sliderBlend, SIGNAL(valueChanged(int)), + SLOT(slotBlendBalance(int))); + connect(m_cbBlendReverse, SIGNAL(toggled(bool)), + SLOT(slotBlendReverse(bool))); + + // advanced options + connect(m_buttonAdvanced, SIGNAL(clicked()), + SLOT(slotAdvanced())); + + connect(m_buttonGetNew, SIGNAL(clicked()), + SLOT(slotGetNewStuff())); + + // renderers + m_renderer.resize(m_numDesks+1); + + if (m_numScreens > 1) + { + for (unsigned i = 0; i < m_numDesks+1; ++i) + { + m_renderer[i].resize(m_numScreens+2); + m_renderer[i].setAutoDelete(true); + + int eDesk = i>0 ? i-1 : 0; + + // Setup the merged-screen renderer + KBackgroundRenderer * r = new KBackgroundRenderer(eDesk, 0, false, _config); + m_renderer[i].insert( 0, r ); + connect( r, SIGNAL(imageDone(int,int)), SLOT(slotPreviewDone(int,int)) ); + + // Setup the common-screen renderer + r = new KBackgroundRenderer(eDesk, 0, true, _config); + m_renderer[i].insert( 1, r ); + connect( r, SIGNAL(imageDone(int,int)), SLOT(slotPreviewDone(int,int)) ); + + // Setup the remaining renderers for each screen + for (unsigned j=0; j < m_numScreens; ++j ) + { + r = new KBackgroundRenderer(eDesk, j, true, _config); + m_renderer[i].insert( j+2, r ); + connect( r, SIGNAL(imageDone(int,int)), SLOT(slotPreviewDone(int,int)) ); + } + } + } + else + { + for (unsigned i = 0; i < m_numDesks+1; ++i ) + { + m_renderer[i].resize(1); + m_renderer[i].setAutoDelete(true); + } + + // set up the common desktop renderer + KBackgroundRenderer * r = new KBackgroundRenderer(0, 0, false, _config); + m_renderer[0].insert(0, r); + connect(r, SIGNAL(imageDone(int,int)), SLOT(slotPreviewDone(int,int))); + + // set up all the other desktop renderers + for (unsigned i = 0; i < m_numDesks; ++i) + { + r = new KBackgroundRenderer(i, 0, false, _config); + m_renderer[i+1].insert(0, r); + connect(r, SIGNAL(imageDone(int,int)), SLOT(slotPreviewDone(int,int))); + } + } + + // Random or InOrder + m_slideShowRandom = eRenderer()->multiWallpaperMode(); + if (m_slideShowRandom == KBackgroundSettings::NoMultiRandom) + m_slideShowRandom = KBackgroundSettings::Random; + if (m_slideShowRandom == KBackgroundSettings::NoMulti) + m_slideShowRandom = KBackgroundSettings::InOrder; + + // Wallpaper Position + m_wallpaperPos = eRenderer()->wallpaperMode(); + if (m_wallpaperPos == KBackgroundSettings::NoWallpaper) + m_wallpaperPos = KBackgroundSettings::Centred; // Default + + if (KGlobal::dirs()->isRestrictedResource("wallpaper")) + { + m_urlWallpaperButton->hide(); + m_buttonSetupWallpapers->hide(); + m_radioSlideShow->hide(); + } + + initUI(); + updateUI(); + +#if (QT_VERSION-0 >= 0x030200) + connect( qApp->desktop(), SIGNAL( resized( int )), SLOT( desktopResized())); // RANDR support +#endif +} + +BGDialog::~BGDialog() +{ + delete m_pGlobals; +} + +KBackgroundRenderer * BGDialog::eRenderer() +{ + return m_renderer[m_eDesk][m_eScreen]; +} + +void BGDialog::getEScreen() +{ + if ( m_pGlobals->drawBackgroundPerScreen( m_eDesk>0 ? m_eDesk-1 : 0 ) ) + m_eScreen = m_pGlobals->commonScreenBackground() ? 1 : m_screen+2; + else + m_eScreen = 0; + + if ( m_numScreens == 1 ) + m_eScreen = 0; + else if ( m_eScreen > int(m_numScreens+1) ) + m_eScreen = m_numScreens+1; +} + +void BGDialog::makeReadOnly() +{ + m_pMonitorArrangement->setEnabled( false ); + m_comboScreen->setEnabled( false ); + m_comboDesktop->setEnabled( false ); + m_colorPrimary->setEnabled( false ); + m_colorSecondary->setEnabled( false ); + m_comboPattern->setEnabled( false ); + m_radioNoPicture->setEnabled( false ); + m_radioPicture->setEnabled( false ); + m_radioSlideShow->setEnabled( false ); + m_urlWallpaperBox->setEnabled( false ); + m_urlWallpaperButton->setEnabled( false ); + m_comboWallpaperPos->setEnabled( false ); + m_buttonSetupWallpapers->setEnabled( false ); + m_comboBlend->setEnabled( false ); + m_sliderBlend->setEnabled( false ); + m_cbBlendReverse->setEnabled( false ); + m_buttonAdvanced->setEnabled( false ); + m_buttonGetNew->setEnabled( false ); +} + +void BGDialog::load( bool useDefaults ) +{ + m_pGlobals->getConfig()->setReadDefaults( useDefaults ); + m_pGlobals->readSettings(); + m_eDesk = m_pGlobals->commonDeskBackground() ? 0 : m_desk; + getEScreen(); + + for (unsigned desk = 0; desk < m_renderer.size(); ++desk) + { + unsigned eDesk = desk>0 ? desk-1 : 0; + for (unsigned screen = 0; screen < m_renderer[desk].size(); ++screen) + { + unsigned eScreen = screen>1 ? screen-2 : 0; +// m_renderer[desk][screen]->load( eDesk, eScreen, (screen>0) ); + m_renderer[desk][screen]->load( eDesk, eScreen, (screen>0), useDefaults ); + } + } + + m_copyAllDesktops = true; + m_copyAllScreens = true; + + // Random or InOrder + m_slideShowRandom = eRenderer()->multiWallpaperMode(); + if (m_slideShowRandom == KBackgroundSettings::NoMultiRandom) + m_slideShowRandom = KBackgroundSettings::Random; + if (m_slideShowRandom == KBackgroundSettings::NoMulti) + m_slideShowRandom = KBackgroundSettings::InOrder; + + // Wallpaper Position + m_wallpaperPos = eRenderer()->wallpaperMode(); + if (m_wallpaperPos == KBackgroundSettings::NoWallpaper) + m_wallpaperPos = KBackgroundSettings::Centred; // Default + + updateUI(); + emit changed(useDefaults); +} + +void BGDialog::save() +{ + m_pGlobals->writeSettings(); + + // write out the common desktop or the "Desktop 1" settings + // depending on which are the real settings + // they both share Desktop[0] in the config file + // similar for screen... + + for (unsigned desk = 0; desk < m_renderer.size(); ++desk) + { + if (desk == 0 && !m_pGlobals->commonDeskBackground()) + continue; + + if (desk == 1 && m_pGlobals->commonDeskBackground()) + continue; + + for (unsigned screen = 0; screen < m_renderer[desk].size(); ++screen) + { + if (screen == 1 && !m_pGlobals->commonScreenBackground()) + continue; + + if (screen == 2 && m_pGlobals->commonScreenBackground()) + continue; + + m_renderer[desk][screen]->writeSettings(); + } + } + + emit changed(false); +} + +void BGDialog::defaults() +{ + load( true ); + eRenderer()->setWallpaper( eRenderer()->wallpaper() ); +} + +QString BGDialog::quickHelp() const +{ + return i18n("

Background

This module allows you to control the" + " appearance of the virtual desktops. KDE offers a variety of options" + " for customization, including the ability to specify different settings" + " for each virtual desktop, or a common background for all of them.

" + " The appearance of the desktop results from the combination of its" + " background colors and patterns, and optionally, wallpaper, which is" + " based on the image from a graphic file.

" + " The background can be made up of a single color, or a pair of colors" + " which can be blended in a variety of patterns. Wallpaper is also" + " customizable, with options for tiling and stretching images. The" + " wallpaper can be overlaid opaquely, or blended in different ways with" + " the background colors and patterns.

" + " KDE allows you to have the wallpaper change automatically at specified" + " intervals of time. You can also replace the background with a program" + " that updates the desktop dynamically. For example, the \"kdeworld\"" + " program shows a day/night map of the world which is updated periodically."); +} + +void BGDialog::slotIdentifyScreens() +{ + // Taken from PositionTab::showIdentify in kdebase/kcontrol/kicker/positiontab_impl.cpp + for(unsigned s = 0; s < m_numScreens; s++) + { + QLabel *screenLabel = new QLabel(0,"Screen Identify", WDestructiveClose | WStyle_Customize | WX11BypassWM); + + QFont identifyFont(KGlobalSettings::generalFont()); + identifyFont.setPixelSize(100); + screenLabel->setFont(identifyFont); + + screenLabel->setFrameStyle(QFrame::Panel); + screenLabel->setFrameShadow(QFrame::Plain); + + screenLabel->setAlignment(Qt::AlignCenter); + screenLabel->setNum(int(s + 1)); + // BUGLET: we should not allow the identification to be entered again + // until the timer fires. + QTimer::singleShot(1500, screenLabel, SLOT(close())); + + QPoint screenCenter(QApplication::desktop()->screenGeometry(s).center()); + QRect targetGeometry(QPoint(0,0),screenLabel->sizeHint()); + targetGeometry.moveCenter(screenCenter); + + screenLabel->setGeometry(targetGeometry); + + screenLabel->show(); + } +} + +void BGDialog::initUI() +{ + // Desktop names + for (unsigned i = 0; i < m_numDesks; ++i) + m_comboDesktop->insertItem(m_pGlobals->deskName(i)); + + // Screens + for (unsigned i = 0; i < m_numScreens; ++i) + m_comboScreen->insertItem( i18n("Screen %1").arg(QString::number(i+1)) ); + + // Patterns + m_comboPattern->insertItem(i18n("Single Color")); + m_comboPattern->insertItem(i18n("Horizontal Gradient")); + m_comboPattern->insertItem(i18n("Vertical Gradient")); + m_comboPattern->insertItem(i18n("Pyramid Gradient")); + m_comboPattern->insertItem(i18n("Pipecross Gradient")); + m_comboPattern->insertItem(i18n("Elliptic Gradient")); + + m_patterns = KBackgroundPattern::list(); + m_patterns.sort(); // Defined order + QStringList::Iterator it; + for (it=m_patterns.begin(); it != m_patterns.end(); ++it) + { + KBackgroundPattern pat(*it); + if (pat.isAvailable()) + m_comboPattern->insertItem(pat.comment()); + } + + loadWallpaperFilesList(); + + // Wallpaper tilings: again they must match the ones from bgrender.cc + m_comboWallpaperPos->insertItem(i18n("Centered")); + m_comboWallpaperPos->insertItem(i18n("Tiled")); + m_comboWallpaperPos->insertItem(i18n("Center Tiled")); + m_comboWallpaperPos->insertItem(i18n("Centered Maxpect")); + m_comboWallpaperPos->insertItem(i18n("Tiled Maxpect")); + m_comboWallpaperPos->insertItem(i18n("Scaled")); + m_comboWallpaperPos->insertItem(i18n("Centered Auto Fit")); + m_comboWallpaperPos->insertItem(i18n("Scale & Crop")); + + // Blend modes: make sure these match with kdesktop/bgrender.cc !! + m_comboBlend->insertItem(i18n("No Blending")); + m_comboBlend->insertItem(i18n("Flat")); + m_comboBlend->insertItem(i18n("Horizontal")); + m_comboBlend->insertItem(i18n("Vertical")); + m_comboBlend->insertItem(i18n("Pyramid")); + m_comboBlend->insertItem(i18n("Pipecross")); + m_comboBlend->insertItem(i18n("Elliptic")); + m_comboBlend->insertItem(i18n("Intensity")); + m_comboBlend->insertItem(i18n("Saturation")); + m_comboBlend->insertItem(i18n("Contrast")); + m_comboBlend->insertItem(i18n("Hue Shift")); +} + +void BGDialog::loadWallpaperFilesList() { + + // Wallpapers + // the following QMap is lower cased names mapped to cased names and URLs + // this way we get case insensitive sorting + QMap > papers; + + //search for .desktop files before searching for images without .desktop files + QStringList lst = m_pDirs->findAllResources("wallpaper", "*desktop", false, true); + QStringList files; + for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) + { + KSimpleConfig fileConfig(*it); + fileConfig.setGroup("Wallpaper"); + + QString imageCaption = fileConfig.readEntry("Name"); + QString fileName = fileConfig.readEntry("File"); + + if (imageCaption.isEmpty()) + { + imageCaption = fileName; + imageCaption.replace('_', ' '); + imageCaption = KStringHandler::capwords(imageCaption); + } + + // avoid name collisions + QString rs = imageCaption; + QString lrs = rs.lower(); + for (int n = 1; papers.find(lrs) != papers.end(); ++n) + { + rs = imageCaption + " (" + QString::number(n) + ')'; + lrs = rs.lower(); + } + int slash = (*it).findRev('/') + 1; + QString directory = (*it).left(slash); + bool canLoadScaleable = false; +#ifdef HAVE_LIBART + canLoadScaleable = true; +#endif + if ( fileConfig.readEntry("ImageType") == "pixmap" || canLoadScaleable ) { + papers[lrs] = qMakePair(rs, directory + fileName); + files.append(directory + fileName); + } + } + + //now find any wallpapers that don't have a .desktop file + lst = m_pDirs->findAllResources("wallpaper", "*", false, true); + for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) + { + if ( !(*it).endsWith(".desktop") && files.grep(*it).empty() ) { + // First try to see if we have a comment describing the image. If we do + // just use the first line of said comment. + KFileMetaInfo metaInfo(*it); + QString imageCaption; + + if (metaInfo.isValid() && metaInfo.item("Comment").isValid()) + imageCaption = metaInfo.item("Comment").string().section('\n', 0, 0); + + if (imageCaption.isEmpty()) + { + int slash = (*it).findRev('/') + 1; + int endDot = (*it).findRev('.'); + + // strip the extension if it exists + if (endDot != -1 && endDot > slash) + imageCaption = (*it).mid(slash, endDot - slash); + else + imageCaption = (*it).mid(slash); + + imageCaption.replace('_', ' '); + imageCaption = KStringHandler::capwords(imageCaption); + } + + // avoid name collisions + QString rs = imageCaption; + QString lrs = rs.lower(); + for (int n = 1; papers.find(lrs) != papers.end(); ++n) + { + rs = imageCaption + " (" + QString::number(n) + ')'; + lrs = rs.lower(); + } + papers[lrs] = qMakePair(rs, *it); + } + } + + KComboBox *comboWallpaper = m_urlWallpaperBox; + comboWallpaper->clear(); + m_wallpaper.clear(); + int i = 0; + for (QMap >::Iterator it = papers.begin(); + it != papers.end(); + ++it) + { + comboWallpaper->insertItem(it.data().first); + m_wallpaper[it.data().second] = i; + i++; + } +} + +void BGDialog::setWallpaper(const QString &s) +{ + KComboBox *comboWallpaper = m_urlWallpaperBox; + comboWallpaper->blockSignals(true); + + if (m_wallpaper.find(s) == m_wallpaper.end()) + { + int i = comboWallpaper->count(); + QString imageCaption; + int slash = s.findRev('/') + 1; + int endDot = s.findRev('.'); + + // strip the extension if it exists + if (endDot != -1 && endDot > slash) + imageCaption = s.mid(slash, endDot - slash); + else + imageCaption = s.mid(slash); + if (comboWallpaper->text(i-1) == imageCaption) + { + i--; + comboWallpaper->removeItem(i); + } + comboWallpaper->insertItem(imageCaption); + m_wallpaper[s] = i; + comboWallpaper->setCurrentItem(i); + } + else + { + comboWallpaper->setCurrentItem(m_wallpaper[s]); + } + comboWallpaper->blockSignals(false); +} + +void BGDialog::slotWallpaperSelection() +{ + KFileDialog dlg( QString::null, QString::null, this, + "file dialog", true ); + + KImageFilePreview* previewWidget = new KImageFilePreview(&dlg); + dlg.setPreviewWidget(previewWidget); + + QStringList mimeTypes = KImageIO::mimeTypes( KImageIO::Reading ); +#ifdef HAVE_LIBART + mimeTypes += "image/svg+xml"; +#endif + dlg.setFilter( mimeTypes.join( " " ) ); + dlg.setMode( KFile::File | KFile::ExistingOnly | KFile::LocalOnly ); + dlg.setCaption( i18n("Select Wallpaper") ); + + int j = m_urlWallpaperBox->currentItem(); + QString uri; + for(QMap::ConstIterator it = m_wallpaper.begin(); + it != m_wallpaper.end(); + ++it) + { + if (it.data() == j) + { + uri = it.key(); + break; + } + } + + if ( !uri.isEmpty() ) { + dlg.setSelection( uri ); + } + + if ( dlg.exec() == QDialog::Accepted ) + { + setWallpaper(dlg.selectedFile()); + + int optionID = m_buttonGroupBackground->id(m_radioPicture); + m_buttonGroupBackground->setButton( optionID ); + slotWallpaperTypeChanged( optionID ); + + emit changed(true); + } +} + +void BGDialog::updateUI() +{ + KBackgroundRenderer *r = eRenderer(); + m_comboDesktop->setCurrentItem(m_eDesk); + m_comboScreen->setCurrentItem(m_eScreen); + + m_colorPrimary->setColor(r->colorA()); + m_colorSecondary->setColor(r->colorB()); + + int wallpaperMode = r->wallpaperMode(); + int multiMode = r->multiWallpaperMode(); + + if (r->backgroundMode() == KBackgroundSettings::Program && + wallpaperMode == KBackgroundSettings::NoWallpaper) + groupBox3->setEnabled( false ); + else + groupBox3->setEnabled( true ); + + if ((multiMode == KBackgroundSettings::NoMultiRandom) || + (multiMode == KBackgroundSettings::NoMulti)) + { + // No wallpaper + if (wallpaperMode == KBackgroundSettings::NoWallpaper ) + { + m_urlWallpaperBox->setEnabled(false); + m_urlWallpaperButton->setEnabled(false); + m_buttonSetupWallpapers->setEnabled(false); + m_comboWallpaperPos->setEnabled(false); + m_lblWallpaperPos->setEnabled(false); + m_buttonGroupBackground->setButton( + m_buttonGroupBackground->id(m_radioNoPicture) ); + } + + // 1 Picture + else + { + m_urlWallpaperBox->setEnabled(true); + m_urlWallpaperButton->setEnabled(true); + m_buttonSetupWallpapers->setEnabled(false); + m_comboWallpaperPos->setEnabled(true); + m_lblWallpaperPos->setEnabled(true); + setWallpaper(r->wallpaper()); + m_buttonGroupBackground->setButton( + m_buttonGroupBackground->id(m_radioPicture) ); + } + } + + // Slide show + else + { + m_urlWallpaperBox->setEnabled(false); + m_urlWallpaperButton->setEnabled(false); + m_buttonSetupWallpapers->setEnabled(true); + m_comboWallpaperPos->setEnabled(true); + m_lblWallpaperPos->setEnabled(true); + m_buttonGroupBackground->setButton( + m_buttonGroupBackground->id(m_radioSlideShow) ); + } + + m_comboWallpaperPos->setCurrentItem(r->wallpaperMode()-1); + + bool bSecondaryEnabled = true; + m_comboPattern->blockSignals(true); + switch (r->backgroundMode()) { + case KBackgroundSettings::Flat: + m_comboPattern->setCurrentItem(0); + bSecondaryEnabled = false; + break; + + case KBackgroundSettings::Pattern: + { + int i = m_patterns.findIndex(r->KBackgroundPattern::name()); + if (i >= 0) + m_comboPattern->setCurrentItem(NR_PREDEF_PATTERNS+i); + else + m_comboPattern->setCurrentItem(0); + } + break; + + case KBackgroundSettings::Program: + m_comboPattern->setCurrentItem(0); + bSecondaryEnabled = false; + break; + + default: // Gradient + m_comboPattern->setCurrentItem( + 1 + r->backgroundMode() - KBackgroundSettings::HorizontalGradient); + break; + } + m_comboPattern->blockSignals(false); + + m_colorSecondary->setEnabled(bSecondaryEnabled); + + int mode = r->blendMode(); + + m_comboBlend->blockSignals(true); + m_sliderBlend->blockSignals(true); + + m_comboBlend->setCurrentItem(mode); + m_cbBlendReverse->setChecked(r->reverseBlending()); + m_sliderBlend->setValue( r->blendBalance() / 10 ); + + m_comboBlend->blockSignals(false); + m_sliderBlend->blockSignals(false); + + // turn it off if there is no background picture set! + setBlendingEnabled(wallpaperMode != KBackgroundSettings::NoWallpaper); + + // Start preview renderer(s) + if ( m_eScreen == 0 ) + { + r->setPreview( m_pMonitorArrangement->combinedPreviewSize() ); + r->start(true); + } + else if ( m_eScreen == 1 ) + { + r->setPreview( m_pMonitorArrangement->maxPreviewSize() ); + r->start(true); + } + else + { + for (unsigned j = 0; j < m_numScreens; ++j) + { + m_renderer[m_eDesk][j+2]->stop(); + m_renderer[m_eDesk][j+2]->setPreview( m_pMonitorArrangement->monitor(j)->size() ); + m_renderer[m_eDesk][j+2]->start(true); + } + } +} + +void BGDialog::slotPreviewDone(int desk_done, int screen_done) +{ + int currentDesk = (m_eDesk > 0) ? m_eDesk-1 : 0; + + if ( desk_done != currentDesk ) + return; + + if (!m_previewUpdates) + return; + + KBackgroundRenderer * r = m_renderer[m_eDesk][(m_eScreen>1) ? (screen_done+2) : m_eScreen]; + + if (r->image().isNull()) + return; + + r->saveCacheFile(); + + KPixmap pm; + if (QPixmap::defaultDepth() < 15) + pm.convertFromImage(r->image(), KPixmap::LowColor); + else + pm.convertFromImage(r->image()); + + if ( m_eScreen == 0 ) + { + m_pMonitorArrangement->setPixmap(pm); + } + else if ( m_eScreen == 1 ) + { + for (unsigned i = 0; i < m_pMonitorArrangement->numMonitors(); ++i) + m_pMonitorArrangement->monitor(i)->setPixmap(pm); + } + else + { + m_pMonitorArrangement->monitor(screen_done)->setPixmap(pm); + } +} + +void BGDialog::slotImageDropped(const QString &uri) +{ + setWallpaper(uri); + + int optionID = m_buttonGroupBackground->id(m_radioPicture); + m_buttonGroupBackground->setButton( optionID ); + slotWallpaperTypeChanged( optionID ); +} + +void BGDialog::slotWallpaperTypeChanged(int i) +{ + KBackgroundRenderer *r = eRenderer(); + r->stop(); + + // No picture + if (i == m_buttonGroupBackground->id(m_radioNoPicture)) //None + { + m_urlWallpaperBox->setEnabled(false); + m_urlWallpaperButton->setEnabled(false); + m_buttonSetupWallpapers->setEnabled(false); + m_comboWallpaperPos->setEnabled(false); + m_lblWallpaperPos->setEnabled(false); + r->setWallpaperMode(KBackgroundSettings::NoWallpaper); + + if (m_slideShowRandom == KBackgroundSettings::InOrder) + r->setMultiWallpaperMode(KBackgroundSettings::NoMulti); + else + r->setMultiWallpaperMode(KBackgroundSettings::NoMultiRandom); + + setBlendingEnabled(false); + } + + // Slide show + else if (i == m_buttonGroupBackground->id(m_radioSlideShow)) + { + m_urlWallpaperBox->setEnabled(false); + m_urlWallpaperButton->setEnabled(false); + m_buttonSetupWallpapers->setEnabled(true); + m_comboWallpaperPos->setEnabled(true); + m_lblWallpaperPos->setEnabled(true); + setBlendingEnabled(true); + + m_comboWallpaperPos->blockSignals(true); + m_comboWallpaperPos->setCurrentItem(m_wallpaperPos-1); + m_comboWallpaperPos->blockSignals(false); + + if (r->wallpaperList().count() == 0) + r->setWallpaperMode( KBackgroundSettings::NoWallpaper ); + else + r->setWallpaperMode(m_wallpaperPos); + + r->setMultiWallpaperMode(m_slideShowRandom); + setWallpaper(r->wallpaper()); + setBlendingEnabled(true); + } + + // 1 Picture + else if (i == m_buttonGroupBackground->id(m_radioPicture)) + { + m_urlWallpaperBox->setEnabled(true); + m_urlWallpaperButton->setEnabled(true); + m_buttonSetupWallpapers->setEnabled(false); + m_lblWallpaperPos->setEnabled(true); + m_comboWallpaperPos->setEnabled(true); + setBlendingEnabled(true); + + if (m_slideShowRandom == KBackgroundSettings::InOrder) + r->setMultiWallpaperMode(KBackgroundSettings::NoMulti); + else + r->setMultiWallpaperMode(KBackgroundSettings::NoMultiRandom); + + int j = m_urlWallpaperBox->currentItem(); + QString path; + for(QMap::ConstIterator it = m_wallpaper.begin(); + it != m_wallpaper.end(); + ++it) + { + if (it.data() == j) + { + path = it.key(); + break; + } + } + + KFileMetaInfo metaInfo(path); + if (metaInfo.isValid() && metaInfo.item("Dimensions").isValid()) + { + // If the image is greater than 800x600 default to using scaled mode, + // otherwise default to tiled. + + QSize s = metaInfo.item("Dimensions").value().toSize(); + if (s.width() >= 800 && s.height() >= 600) + m_wallpaperPos = KBackgroundSettings::Scaled; + else + m_wallpaperPos = KBackgroundSettings::Tiled; + } + else if (KMimeType::findByPath(path)->is("image/svg+xml")) + { + m_wallpaperPos = KBackgroundSettings::Scaled; + } + + r->setWallpaperMode(m_wallpaperPos); + m_comboWallpaperPos->blockSignals(true); + m_comboWallpaperPos->setCurrentItem(m_wallpaperPos-1); + m_comboWallpaperPos->blockSignals(false); + + r->setWallpaper(path); + } + + r->start(true); + m_copyAllDesktops = true; + m_copyAllScreens = true; + emit changed(true); +} + +void BGDialog::slotWallpaper(int) +{ + slotWallpaperTypeChanged(m_buttonGroupBackground->id(m_radioPicture)); + emit changed(true); +} + +void BGDialog::setBlendingEnabled(bool enable) +{ + int mode = eRenderer()->blendMode(); + + bool b = !(mode == KBackgroundSettings::NoBlending); + m_lblBlending->setEnabled(enable); + m_comboBlend->setEnabled(enable); + m_lblBlendBalance->setEnabled(enable && b); + m_sliderBlend->setEnabled(enable && b); + + b = !(mode < KBackgroundSettings::IntensityBlending); + m_cbBlendReverse->setEnabled(enable && b); +} + +void BGDialog::slotWallpaperPos(int mode) +{ + KBackgroundRenderer *r = eRenderer(); + + mode++; + m_wallpaperPos = mode; + + if (mode == r->wallpaperMode()) + return; + + r->stop(); + r->setWallpaperMode(mode); + r->start(true); + m_copyAllDesktops = true; + m_copyAllScreens = true; + emit changed(true); +} + +void BGDialog::slotSetupMulti() +{ + KBackgroundRenderer *r = eRenderer(); + + BGMultiWallpaperDialog dlg(r, topLevelWidget()); + if (dlg.exec() == QDialog::Accepted) { + r->stop(); + m_slideShowRandom = r->multiWallpaperMode(); + r->setWallpaperMode(m_wallpaperPos); + r->start(true); + m_copyAllDesktops = true; + m_copyAllScreens = true; + emit changed(true); + } +} + +void BGDialog::slotPrimaryColor(const QColor &color) +{ + KBackgroundRenderer *r = eRenderer(); + + if (color == r->colorA()) + return; + + r->stop(); + r->setColorA(color); + r->start(true); + m_copyAllDesktops = true; + m_copyAllScreens = true; + emit changed(true); +} + +void BGDialog::slotSecondaryColor(const QColor &color) +{ + KBackgroundRenderer *r = eRenderer(); + + if (color == r->colorB()) + return; + + r->stop(); + r->setColorB(color); + r->start(true); + m_copyAllDesktops = true; + m_copyAllScreens = true; + emit changed(true); +} + +void BGDialog::slotPattern(int pattern) +{ + KBackgroundRenderer *r = eRenderer(); + r->stop(); + bool bSecondaryEnabled = true; + if (pattern < NR_PREDEF_PATTERNS) + { + if (pattern == 0) + { + r->setBackgroundMode(KBackgroundSettings::Flat); + bSecondaryEnabled = false; + } + else + { + r->setBackgroundMode(pattern - 1 + KBackgroundSettings::HorizontalGradient); + } + } + else + { + r->setBackgroundMode(KBackgroundSettings::Pattern); + r->setPatternName(m_patterns[pattern - NR_PREDEF_PATTERNS]); + } + r->start(true); + m_colorSecondary->setEnabled(bSecondaryEnabled); + + m_copyAllDesktops = true; + m_copyAllScreens = true; + emit changed(true); +} + +void BGDialog::slotSelectScreen(int screen) +{ + // Copy the settings from "All screens" to all the other screens + // at a suitable point + if (m_pGlobals->commonScreenBackground() && (screen >1) && m_copyAllScreens) + { + // Copy stuff + for (unsigned desk = 0; desk < m_numDesks+1; ++desk ) + { + KBackgroundRenderer *master = m_renderer[desk][1]; + for (unsigned screen = 0; screen < m_numScreens; ++screen) + { + m_renderer[desk][screen+2]->copyConfig(master); + } + } + } + + if (screen == m_eScreen ) + { + return; // Nothing to do + } + + m_copyAllScreens = false; + + bool drawBackgroundPerScreen = screen > 0; + bool commonScreenBackground = screen < 2; + + // Update drawBackgroundPerScreen + if (m_eDesk == 0) + { + for (unsigned desk = 0; desk < m_numDesks; ++desk ) + m_pGlobals->setDrawBackgroundPerScreen(desk, drawBackgroundPerScreen); + } + else + { + m_pGlobals->setDrawBackgroundPerScreen(m_eDesk-1, drawBackgroundPerScreen); + } + + m_pGlobals->setCommonScreenBackground(commonScreenBackground); + + if (screen < 2) + emit changed(true); + else + { + for (unsigned i = 0; i < m_renderer[m_eDesk].size(); ++i) + { + if ( m_renderer[m_eDesk][i]->isActive() ) + m_renderer[m_eDesk][i]->stop(); + } + } + + m_eScreen = screen; + updateUI(); +} + +void BGDialog::slotSelectDesk(int desk) +{ + // Copy the settings from "All desktops" to all the other desktops + // at a suitable point. + if (m_pGlobals->commonDeskBackground() && (desk > 0) && m_copyAllDesktops) + { + // Copy stuff + for (unsigned screen = 0; screen < m_renderer[0].size(); ++screen ) + { + KBackgroundRenderer *master = m_renderer[0][screen]; + for (unsigned desk = 0; desk < m_numDesks; ++desk ) + { + m_renderer[desk+1][screen]->copyConfig(master); + } + } + } + + if (desk == m_eDesk) + { + return; // Nothing to do + } + + m_copyAllDesktops = false; + if (desk == 0) + { + if (m_pGlobals->commonDeskBackground()) + return; // Nothing to do + + m_pGlobals->setCommonDeskBackground(true); + emit changed(true); + } + else + { + for (unsigned i = 0; i < m_renderer[m_eDesk].size(); ++i) + { + if ( m_renderer[m_eDesk][i]->isActive() ) + m_renderer[m_eDesk][i]->stop(); + } + m_pGlobals->setCommonDeskBackground(false); + } + + m_eDesk = desk; + getEScreen(); + updateUI(); +} + +void BGDialog::slotAdvanced() +{ + KBackgroundRenderer *r = eRenderer(); + + m_previewUpdates = false; + BGAdvancedDialog dlg(r, topLevelWidget(), m_multidesktop); + + if (!m_pMonitorArrangement->isEnabled()) { + dlg.makeReadOnly(); + dlg.exec(); + return; + } + + dlg.setTextColor(m_pGlobals->textColor()); + dlg.setTextBackgroundColor(m_pGlobals->textBackgroundColor()); + dlg.setShadowEnabled(m_pGlobals->shadowEnabled()); + dlg.setTextLines(m_pGlobals->textLines()); + dlg.setTextWidth(m_pGlobals->textWidth()); + + if (m_pGlobals->limitCache()) + dlg.setCacheSize( m_pGlobals->cacheSize() ); + else + dlg.setCacheSize( 0 ); + + if( !dlg.exec()) + { + m_previewUpdates = true; + return; + } + + r->setBackgroundMode(dlg.backgroundMode()); + if (dlg.backgroundMode() == KBackgroundSettings::Program) + { + r->setProgram(dlg.backgroundProgram()); + } + + int cacheSize = dlg.cacheSize(); + if (cacheSize) + { + m_pGlobals->setCacheSize(cacheSize); + m_pGlobals->setLimitCache(true); + } + else + { + m_pGlobals->setLimitCache(false); + } + + m_pGlobals->setTextColor(dlg.textColor()); + m_pGlobals->setTextBackgroundColor(dlg.textBackgroundColor()); + m_pGlobals->setShadowEnabled(dlg.shadowEnabled()); + m_pGlobals->setTextLines(dlg.textLines()); + m_pGlobals->setTextWidth(dlg.textWidth()); + + r->stop(); + m_previewUpdates = true; + r->start(true); + + updateUI(); + m_copyAllDesktops = true; + emit changed(true); +} + +void BGDialog::slotGetNewStuff() +{ + //FIXME set this to a server when we get one + //should really be in a .rc file but could be either + //kcmshellrc or kcontrolrc + KConfig* config = KGlobal::config(); + config->setGroup("KNewStuff"); + config->writeEntry( "ProvidersUrl", "http://download.kde.org/khotnewstuff/wallpaper-providers.xml" ); + config->writeEntry( "StandardResource", "wallpaper" ); + config->sync(); + + KNS::DownloadDialog::open("wallpapers", i18n("Get New Wallpapers")); + loadWallpaperFilesList(); +} + +void BGDialog::slotBlendMode(int mode) +{ + if (mode == eRenderer()->blendMode()) + return; + + bool b = !(mode == KBackgroundSettings::NoBlending); + m_sliderBlend->setEnabled( b ); + m_lblBlendBalance->setEnabled( b ); + + b = !(mode < KBackgroundSettings::IntensityBlending); + m_cbBlendReverse->setEnabled(b); + emit changed(true); + + eRenderer()->stop(); + eRenderer()->setBlendMode(mode); + eRenderer()->start(true); +} + +void BGDialog::slotBlendBalance(int value) +{ + value = value*10; + if (value == eRenderer()->blendBalance()) + return; + emit changed(true); + + eRenderer()->stop(); + eRenderer()->setBlendBalance(value); + eRenderer()->start(true); +} + +void BGDialog::slotBlendReverse(bool b) +{ + if (b == eRenderer()->reverseBlending()) + return; + emit changed(true); + + eRenderer()->stop(); + eRenderer()->setReverseBlending(b); + eRenderer()->start(true); +} + +void BGDialog::desktopResized() +{ + for (unsigned i = 0; i < m_renderer.size(); ++i) + { + for (unsigned j = 0; j < m_renderer[i].size(); ++j ) + { + KBackgroundRenderer * r = m_renderer[i][j]; + if( r->isActive()) + r->stop(); + r->desktopResized(); + } + } + eRenderer()->start(true); +} + + +#include "bgdialog.moc" diff --git a/kcontrol/background/bgdialog.h b/kcontrol/background/bgdialog.h new file mode 100644 index 000000000..02fbf3f3a --- /dev/null +++ b/kcontrol/background/bgdialog.h @@ -0,0 +1,109 @@ +/* + This file is part of the KDE libraries + Copyright (c) 2003 Waldo Bastian + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 _BGDIALOG_H_ +#define _BGDIALOG_H_ + +#include +#include +#include + +#include "bgdialog_ui.h" +#include "bgrender.h" +#include "bgsettings.h" +#include "bgdefaults.h" + +class BGMonitorArrangement; +class KStandardDirs; + +class BGDialog : public BGDialog_UI +{ + Q_OBJECT +public: + BGDialog(QWidget* parent, KConfig* _config, bool _multidesktop = true); + ~BGDialog(); + + void load( bool useDefaults ); + void save(); + void defaults(); + + void makeReadOnly(); + + QString quickHelp() const; + +signals: + void changed(bool); + +protected: + void initUI(); + void updateUI(); + KBackgroundRenderer * eRenderer(); + + void setWallpaper(const QString &); + + void loadWallpaperFilesList(); + +protected slots: + void slotIdentifyScreens(); + void slotSelectScreen(int screen); + void slotSelectDesk(int desk); + void slotWallpaperTypeChanged(int i); + void slotWallpaper(int i); + void slotWallpaperPos(int); + void slotWallpaperSelection(); + void slotSetupMulti(); + void slotPrimaryColor(const QColor &color); + void slotSecondaryColor(const QColor &color); + void slotPattern(int pattern); + void slotImageDropped(const QString &uri); + void slotPreviewDone(int desk, int screen); + void slotAdvanced(); + void slotGetNewStuff(); + void slotBlendMode(int mode); + void slotBlendBalance(int value); + void slotBlendReverse(bool b); + void desktopResized(); + void setBlendingEnabled(bool); + +protected: + void getEScreen(); + KGlobalBackgroundSettings *m_pGlobals; + KStandardDirs *m_pDirs; + bool m_multidesktop; + + unsigned m_numDesks; + unsigned m_numScreens; + int m_desk; + int m_screen; + int m_eDesk; + int m_eScreen; + QValueVector< QPtrVector > m_renderer; // m_renderer[desk][screen] + QMap m_wallpaper; + QStringList m_patterns; + int m_slideShowRandom; // Remembers last Slide Show setting + int m_wallpaperPos; // Remembers last wallpaper pos + + BGMonitorArrangement * m_pMonitorArrangement; + + bool m_previewUpdates; + bool m_copyAllDesktops; + bool m_copyAllScreens; +}; + +#endif diff --git a/kcontrol/background/bgdialog_ui.ui b/kcontrol/background/bgdialog_ui.ui new file mode 100644 index 000000000..7cc6571d5 --- /dev/null +++ b/kcontrol/background/bgdialog_ui.ui @@ -0,0 +1,722 @@ + +BGDialog_UI + + + BGDialog_UI + + + + 0 + 0 + 603 + 433 + + + + + unnamed + + + 1 + + + + + m_pDesktopLabel + + + + 0 + 5 + 0 + 0 + + + + Setting for &desktop: + + + m_comboDesktop + + + Choose the desktop you wish to configure the background for from this list. If you want the same background settings to be applied to all desktops select the "All Desktops" option. + + + + + + All Desktops + + + + m_comboDesktop + + + true + + + + 0 + 0 + 0 + 0 + + + + Choose the desktop you wish to configure the background for from this list. If you want the same background settings to be applied to all desktops select the "All Desktops" option. + + + + + + Across All Screens + + + + + On Each Screen + + + + m_comboScreen + + + true + + + + 0 + 0 + 0 + 0 + + + + Choose the screen you wish to configure the background for from this list. + + + + + Spacer37 + + + Horizontal + + + Expanding + + + + 0 + 0 + + + + + + layout36 + + + + unnamed + + + + m_screenArrangement + + + + 0 + 1 + 0 + 0 + + + + + 100 + 0 + + + + + + layout35 + + + + unnamed + + + + unnamed + + + + spacer800 + + + Horizontal + + + Minimum + + + + 4 + 20 + + + + + + m_buttonIdentifyScreens + + + + 0 + 0 + 0 + 0 + + + + Identify Screens + + + Click this button to show the identifying number for each screen. + + + + + spacer810 + + + Horizontal + + + Minimum + + + + 4 + 20 + + + + + + + unnamed + + + + spacer80 + + + Horizontal + + + Minimum + + + + 4 + 20 + + + + + + m_buttonAdvanced + + + + 0 + 0 + 0 + 0 + + + + Advanced Options + + + Click this button to set the icon text colors and shadow, set up a program to run for the background picture or control the size of the background cache. + + + + + spacer81 + + + Horizontal + + + Minimum + + + + 4 + 20 + + + + + + + unnamed + + + + spacer80 + + + Horizontal + + + Minimum + + + + 4 + 20 + + + + + + m_buttonGetNew + + + + 0 + 0 + 0 + 0 + + + + Get New Wallpapers + + + Click this button to give you a list of new wallpapers to download from the Internet. + + + + + spacer81 + + + Horizontal + + + Minimum + + + + 4 + 20 + + + + + + + + + spacer13 + + + Vertical + + + MinimumExpanding + + + + 20 + 0 + + + + + + + + groupBox3 + + + Options + + + + unnamed + + + + m_lblWallpaperPos + + + Posi&tion: + + + m_comboWallpaperPos + + + <qt>You can choose here how a background picture is shown on the desktop: +<ul> +<li><em>Centered:</em> Center the picture on the desktop.</li> + <li><em>Tiled:</em> Tile the picture beginning at the top left of the desktop, so the desktop is totally covered up.</li> +<li><em>Center Tiled:</em> Center the picture on the desktop and then tile around it so that the background is totally covered up.</li> +<li><em>Centered Maxpect:</em> Magnify the picture without distorting it until it fills either the width or height of the desktop, and then center it on the desktop.</li> +<li><em>Scaled:</em> Magnify the picture, until the entire desktop is covered. This may result in some distortion of the picture.</li> +<li><em>Centered Auto Fit:</em> If the picture fits the desktop this mode works like the Centered option. If the picture is larger than the desktop it is scaled down to fit while keeping the aspect ratio.</li> +<li><em>Scale and Crop:</em> Magnify the picture without distorting it until it fills both the width and height of the desktop (cropping the picture if necessary), and then center it on the desktop.</li> +</ul></qt> + + + + + m_comboBlend + + + If you have selected to use a background picture you can choose various methods of blending the background colors with the picture. The default option of "No Blending" means that the picture simply obscures the background colors below. + + + + + layout31 + + + + unnamed + + + + m_colorPrimary + + + + + + Click to choose the primary background color. + + + + + m_colorSecondary + + + + + + Click to choose the secondary background color. If no secondary color is required by the pattern selected this button will be disabled. + + + + + + + m_lblColors + + + Co&lors: + + + m_comboPattern + + + + + m_lblBlending + + + &Blending: + + + m_comboBlend + + + + + layout23 + + + + unnamed + + + + m_lblBlendBalance + + + Balance: + + + m_sliderBlend + + + You can use this slider to control the degree of blending. You can experiment by moving the slider and looking at the effects in the preview image. + + + + + m_sliderBlend + + + -20 + + + 20 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + You can use this slider to control the degree of blending. You can experiment by moving the slider and looking at the effects in the preview image. + + + + + + + m_cbBlendReverse + + + Reverse roles + + + For some types of blending, you can reverse the role of the background and the picture by checking this option. + + + + + m_comboPattern + + + + 1 + 0 + 1 + 0 + + + + + + spacer6_2_2 + + + Vertical + + + Fixed + + + + 120 + 10 + + + + + + spacer6_2 + + + Vertical + + + Fixed + + + + 130 + 10 + + + + + + m_comboWallpaperPos + + + <qt>You can choose here how a background picture is shown on the desktop: +<ul> +<li><em>Centered:</em> Center the picture on the desktop.</li> + <li><em>Tiled:</em> Tile the picture beginning at the top left of the desktop, so the desktop is totally covered up.</li> +<li><em>Center Tiled:</em> Center the picture on the desktop and then tile around it so that the background is totally covered up.</li> +<li><em>Centered Maxpect:</em> Magnify the picture without distorting it until it fills either the width or height of the desktop, and then center it on the desktop.</li> +<li><em>Scaled:</em> Magnify the picture, until the entire desktop is covered. This may result in some distortion of the picture.</li> +<li><em>Centered Auto Fit:</em> If the picture fits the desktop this mode works like the Centered option. If the picture is larger than the desktop it is scaled down to fit while keeping the aspect ratio.</li> +<li><em>Scale and Crop:</em> Magnify the picture without distorting it until it fills both the width and height of the desktop (cropping the picture if necessary), and then center it on the desktop.</li> +</ul></qt> + + + + + + + m_buttonGroupBackground + + + Background + + + + unnamed + + + + m_radioNoPicture + + + &No picture + + + + + m_radioSlideShow + + + &Slide show: + + + + + m_radioPicture + + + &Picture: + + + true + + + + + spacer20 + + + Horizontal + + + Expanding + + + + 260 + 20 + + + + + + m_buttonSetupWallpapers + + + Set&up... + + + Click this button to select a set of images to be used as background pictures. One picture at a time will be shown for a specified amount of time, after which another image from the set will be shown. Images can be shown at random or in the order you specify them. + + + + + spacer19 + + + Horizontal + + + Expanding + + + + 110 + 16 + + + + + + m_urlWallpaperButton + + + + 0 + 0 + 0 + 0 + + + + + + + + + m_urlWallpaperBox + + + + 5 + 0 + 0 + 0 + + + + + + + + + + m_buttonGroupBackground + toggled(bool) + groupBox3 + setEnabled(bool) + + + + m_comboScreen + m_comboDesktop + m_radioPicture + m_urlWallpaperBox + m_urlWallpaperButton + m_buttonSetupWallpapers + m_comboWallpaperPos + m_comboPattern + m_colorPrimary + m_colorSecondary + m_comboBlend + m_sliderBlend + m_cbBlendReverse + m_buttonAdvanced + + + kcolorbutton.h + kcombobox.h + kurlrequester.h + kdialog.h + + + + + kcombobox.h + kcolorbutton.h + kcolorbutton.h + kcombobox.h + + diff --git a/kcontrol/background/bghash.h b/kcontrol/background/bghash.h new file mode 100644 index 000000000..932c6ebab --- /dev/null +++ b/kcontrol/background/bghash.h @@ -0,0 +1,22 @@ +#ifndef BGHASH_H +#define BGHASH_H + +/* + * QString -> int hash. From Qt's QGDict::hashKeyString(). + */ + +static int QHash(QString key) +{ + int g, h = 0; + const QChar *p = key.unicode(); + for (unsigned i=0; i < key.length(); i++) { + h = (h << 4) + p[i].cell(); + if ((g = (h & 0xf0000000))) + h ^= (g >> 24); + h &= ~g; + } + return h; +} + +#endif + diff --git a/kcontrol/background/bgmonitor.cpp b/kcontrol/background/bgmonitor.cpp new file mode 100644 index 000000000..6af2f7458 --- /dev/null +++ b/kcontrol/background/bgmonitor.cpp @@ -0,0 +1,220 @@ +/* vi: ts=8 sts=4 sw=4 + kate: space-indent on; indent-width 4; indent-mode cstyle; + + This file is part of the KDE project, module kcmbackground. + + Copyright (C) 2002 Laurent Montel + Copyright (C) 2003 Waldo Bastian + Copyright (C) 2005 David Saxton + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 +#include +#include +#include +#include +#include +#include +#include + +#include "bgmonitor.h" + +// Constants used (should they be placed somewhere?) +// Size of monitor image: 200x186 +// Geometry of "display" part of monitor image: (23,14)-[151x115] + +//BEGIN class BGMonitorArrangement +BGMonitorArrangement::BGMonitorArrangement(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + m_pBGMonitor.resize( QApplication::desktop()->numScreens(), 0l ); + + for (int screen = 0; screen < QApplication::desktop()->numScreens(); ++screen) + { + BGMonitorLabel * label = new BGMonitorLabel(this); + m_pBGMonitor[screen] = label; + + connect( label->monitor(), SIGNAL(imageDropped(const QString &)), this, SIGNAL(imageDropped(const QString &)) ); + } + + parent->setFixedSize(200, 186); + setFixedSize(200, 186); + updateArrangement(); +} + + +BGMonitor * BGMonitorArrangement::monitor( unsigned screen ) const +{ + return m_pBGMonitor[screen]->monitor(); +} + + +QRect BGMonitorArrangement::expandToPreview( QRect r ) const +{ + double scaleX = 200.0 / 151.0; + double scaleY = 186.0 / 115.0; + return QRect( int(r.x()*scaleX), int(r.y()*scaleY), int(r.width()*scaleX), int(r.height()*scaleY) ); +} + + +QSize BGMonitorArrangement::expandToPreview( QSize s ) const +{ + double scaleX = 200.0 / 151.0; + double scaleY = 186.0 / 115.0; + return QSize( int(s.width()*scaleX), int(s.height()*scaleY) ); +} + + +QPoint BGMonitorArrangement::expandToPreview( QPoint p ) const +{ + double scaleX = 200.0 / 151.0; + double scaleY = 186.0 / 115.0; + return QPoint( int(p.x()*scaleX), int(p.y()*scaleY) ); +} + + +void BGMonitorArrangement::updateArrangement() +{ + // In this function, sizes, etc have a normal value, and their "expanded" + // value. The expanded value is used for setting the size of the monitor + // image that contains the preview of the background. The monitor image + // will set the background preview back to the normal value. + + QRect overallGeometry; + for (int screen = 0; screen < QApplication::desktop()->numScreens(); ++screen) + overallGeometry |= QApplication::desktop()->screenGeometry(screen); + + QRect expandedOverallGeometry = expandToPreview(overallGeometry); + + double scale = QMIN( + double(width()) / double(expandedOverallGeometry.width()), + double(height()) / double(expandedOverallGeometry.height()) + ); + + m_combinedPreviewSize = overallGeometry.size() * scale; + + m_maxPreviewSize = QSize(0,0); + int previousMax = 0; + + for (int screen = 0; screen < QApplication::desktop()->numScreens(); ++screen) + { + QPoint topLeft = (QApplication::desktop()->screenGeometry(screen).topLeft() - overallGeometry.topLeft()) * scale; + QPoint expandedTopLeft = expandToPreview(topLeft); + + QSize previewSize = QApplication::desktop()->screenGeometry(screen).size() * scale; + QSize expandedPreviewSize = expandToPreview(previewSize); + + if ( (previewSize.width() * previewSize.height()) > previousMax ) + { + previousMax = previewSize.width() * previewSize.height(); + m_maxPreviewSize = previewSize; + } + + m_pBGMonitor[screen]->setPreviewPosition( QRect( topLeft, previewSize ) ); + m_pBGMonitor[screen]->setGeometry( QRect( expandedTopLeft, expandedPreviewSize ) ); + m_pBGMonitor[screen]->updateMonitorGeometry(); + } +} + + +void BGMonitorArrangement::resizeEvent( QResizeEvent * e ) +{ + QWidget::resizeEvent(e); + updateArrangement(); +} + + +void BGMonitorArrangement::setPixmap( const KPixmap & pm ) +{ + for (unsigned screen = 0; screen < m_pBGMonitor.size(); ++screen) + { + QRect position = m_pBGMonitor[screen]->previewPosition(); + + QPixmap monitorPixmap( position.size(), pm.depth() ); + copyBlt( &monitorPixmap, 0, 0, &pm, position.x(), position.y(), position.width(), position.height() ); + m_pBGMonitor[screen]->monitor()->setPixmap(monitorPixmap); + } +} +//END class BGMonitorArrangement + + + +//BEGIN class BGMonitorLabel +BGMonitorLabel::BGMonitorLabel(QWidget *parent, const char *name) + : QLabel(parent, name) +{ + setAlignment(AlignCenter); + setScaledContents(true); + setPixmap( QPixmap( locate("data", "kcontrol/pics/monitor.png") ) ); + m_pBGMonitor = new BGMonitor(this); + + QWhatsThis::add( this, i18n("This picture of a monitor contains a preview of what the current settings will look like on your desktop.") ); +} + + +void BGMonitorLabel::updateMonitorGeometry() +{ + double scaleX = double(width()) / double(sizeHint().width()); + double scaleY = double(height()) / double(sizeHint().height()); + + kdDebug() << k_funcinfo << " Setting geometry to " << QRect( int(23*scaleX), int(14*scaleY), int(151*scaleX), int(115*scaleY) ) << endl; + m_pBGMonitor->setGeometry( int(23*scaleX), int(14*scaleY), int(151*scaleX), int(115*scaleY) ); +} + + +void BGMonitorLabel::resizeEvent( QResizeEvent * e ) +{ + QWidget::resizeEvent(e); + updateMonitorGeometry(); +} +//END class BGMonitorLabel + + + +//BEGIN class BGMonitor +BGMonitor::BGMonitor(QWidget *parent, const char *name) + : QLabel(parent, name) +{ + setAlignment(AlignCenter); + setScaledContents(true); + setAcceptDrops(true); +} + + +void BGMonitor::dropEvent(QDropEvent *e) +{ + if (!KURLDrag::canDecode(e)) + return; + + KURL::List uris; + if (KURLDrag::decode(e, uris) && (uris.count() > 0)) { + // TODO: Download remote file + if (uris.first().isLocalFile()) + emit imageDropped(uris.first().path()); + } +} + +void BGMonitor::dragEnterEvent(QDragEnterEvent *e) +{ + if (KURLDrag::canDecode(e)) + e->accept(rect()); + else + e->ignore(rect()); +} +//END class BGMonitor + +#include "bgmonitor.moc" diff --git a/kcontrol/background/bgmonitor.h b/kcontrol/background/bgmonitor.h new file mode 100644 index 000000000..1e714194e --- /dev/null +++ b/kcontrol/background/bgmonitor.h @@ -0,0 +1,111 @@ +/* vi: ts=8 sts=4 sw=4 + kate: space-indent on; indent-width 4; indent-mode cstyle; + + This file is part of the KDE project, module kcmbackground. + + Copyright (C) 2002 Laurent Montel + Copyright (C) 2003 Waldo Bastian + Copyright (C) 2005 David Saxton + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 _BGMONITOR_H_ +#define _BGMONITOR_H_ + +#include +#include +#include + +class BGMonitor; +class BGMonitorLabel; +class KPixmap; + +/** + * This class arranges and resizes a set of monitor images according to the + * monitor geometries. + */ +class BGMonitorArrangement : public QWidget +{ + Q_OBJECT +public: + BGMonitorArrangement(QWidget *parent, const char *name=0L); + + /** + * Splits up the pixmap according to monitor geometries and sets each + * BGMonitor pixmap accordingly. + */ + void setPixmap( const KPixmap & pm ); + QSize combinedPreviewSize() const { return m_combinedPreviewSize; } + QSize maxPreviewSize() const { return m_maxPreviewSize; } + unsigned numMonitors() const { return m_pBGMonitor.size(); } + + BGMonitor * monitor( unsigned screen ) const; + void updateArrangement(); + +signals: + void imageDropped(const QString &); + +protected: + virtual void resizeEvent( QResizeEvent * ); + QRect expandToPreview( QRect r ) const; + QSize expandToPreview( QSize s ) const; + QPoint expandToPreview( QPoint p ) const; + + QValueVector m_pBGMonitor; + QSize m_combinedPreviewSize; + QSize m_maxPreviewSize; +}; + +/** + * Contains a BGMonitor. + */ +class BGMonitorLabel : public QLabel +{ +public: + BGMonitorLabel(QWidget *parent, const char *name=0L); + + BGMonitor * monitor() const { return m_pBGMonitor; } + void updateMonitorGeometry(); + + void setPreviewPosition( QRect r ) { m_previewPosition = r; } + QRect previewPosition() const { return m_previewPosition; } + +protected: + virtual void resizeEvent( QResizeEvent * ); + BGMonitor * m_pBGMonitor; + QRect m_previewPosition; +}; + + +/** + * This class handles drops on the preview monitor. + */ +class BGMonitor : public QLabel +{ + Q_OBJECT +public: + BGMonitor(QWidget *parent, const char *name=0L); + +signals: + void imageDropped(const QString &); + +protected: + virtual void dropEvent(QDropEvent *); + virtual void dragEnterEvent(QDragEnterEvent *); +}; + + +#endif diff --git a/kcontrol/background/bgrender.cpp b/kcontrol/background/bgrender.cpp new file mode 100644 index 000000000..f17892dce --- /dev/null +++ b/kcontrol/background/bgrender.cpp @@ -0,0 +1,1359 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; tab-width 8; indent-width 4; indent-mode cstyle; + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU Library General + * Public License. See the file "COPYING.LIB" for the exact licensing terms. + */ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LIBART +#include +#endif + +#include "bgdefaults.h" +#include "bghash.h" +#include "bgrender.h" + +#include + +#include + +/**** KBackgroundRenderer ****/ + + +KBackgroundRenderer::KBackgroundRenderer(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config) + : KBackgroundSettings(desk, screen, drawBackgroundPerScreen, config) +{ + m_State = 0; + m_isBusyCursor = false; + m_enableBusyCursor = false; + m_pDirs = KGlobal::dirs(); + m_rSize = m_Size = drawBackgroundPerScreen ? + QApplication::desktop()->screenGeometry(screen).size() : QApplication::desktop()->size(); + m_pProc = 0L; + m_Tempfile = 0L; + m_bPreview = false; + m_Cached = false; + m_TilingEnabled = false; + + m_pTimer = new QTimer(this); + connect(m_pTimer, SIGNAL(timeout()), SLOT(render())); +} + + +KBackgroundRenderer::~KBackgroundRenderer() +{ + cleanup(); + delete m_Tempfile; + m_Tempfile = 0; +} + + +void KBackgroundRenderer::setSize(const QSize &size) +{ + m_rSize = m_Size = size; +} + +/* + * Re-configure because the desktop has been resized. + */ +void KBackgroundRenderer::desktopResized() +{ + m_State = 0; + m_rSize = drawBackgroundPerScreen() ? + QApplication::desktop()->screenGeometry(screen()).size() : QApplication::desktop()->size(); + if( !m_bPreview ) + m_Size = m_rSize; +} + + +void KBackgroundRenderer::tile(QImage& dest, QRect rect, const QImage& src) +{ + rect &= dest.rect(); + + int x, y; + int h = rect.height(), w = rect.width(); + int offx = rect.x(), offy = rect.y(); + int sw = src.width(), sh = src.height(); + + for (y=offy; yname())); + pos += m_Tempfile->name().length() - 2; + break; + + case 'x': + num.setNum(m_Size.width()); + cmd.replace(pos, 2, num); + pos += num.length() - 2; + break; + + case 'y': + num.setNum(m_Size.height()); + cmd.replace(pos, 2, num); + pos += num.length() - 2; + break; + + case '%': + cmd.replace(pos, 2, "%"); + pos--; + break; + default: + ++pos; // avoid infinite loop + break; + } + + } + return cmd; +} + + +/* + * Create a background tile. If the background mode is `Program', + * this is asynchronous. + */ +int KBackgroundRenderer::doBackground(bool quit) +{ + if (m_State & BackgroundDone) + return Done; + int bgmode = backgroundMode(); + + if (!enabled()) + bgmode= Flat; + + if (quit) { + if (bgmode == Program && m_pProc) + m_pProc->kill(); + return Done; + } + + int retval = Done; + QString file; + + static unsigned int tileWidth = 0; + static unsigned int tileHeight = 0; + if( tileWidth == 0 ) + { + int tile_val = QPixmap::defaultDepth() >= 24 ? 1 : 2; + // some dithering may be needed even with bpb==15/16, so don't use tileWidth==1 + // for them + // with tileWidth>2, repainting the desktop causes nasty effect (XFree86 4.1.0 ) + if( XQueryBestTile( qt_xdisplay(), qt_xrootwin(), tile_val, tile_val, + &tileWidth, &tileHeight ) != Success ) + tileWidth = tileHeight = tile_val; // some defaults + } + switch (bgmode) { + + case Flat: + // this can be tiled correctly without problems + m_Background.create( tileWidth, tileHeight, 32); + m_Background.fill(colorA().rgb()); + break; + + case Pattern: + { + if (pattern().isEmpty()) + break; + file = m_pDirs->findResource("dtop_pattern", pattern()); + if (file.isEmpty()) + break; + + m_Background.load(file); + if (m_Background.isNull()) + break; + int w = m_Background.width(); + int h = m_Background.height(); + if ((w > m_Size.width()) || (h > m_Size.height())) { + w = QMIN(w, m_Size.width()); + h = QMIN(h, m_Size.height()); + m_Background = m_Background.copy(0, 0, w, h); + } + KImageEffect::flatten(m_Background, colorA(), colorB(), 0); + break; + } + case Program: + if (m_State & BackgroundStarted) + break; + m_State |= BackgroundStarted; + createTempFile(); + + file = buildCommand(); + if (file.isEmpty()) + break; + + delete m_pProc; + m_pProc = new KShellProcess; + *m_pProc << file; + connect(m_pProc, SIGNAL(processExited(KProcess *)), + SLOT(slotBackgroundDone(KProcess *))); + m_pProc->start(KShellProcess::NotifyOnExit); + retval = Wait; + break; + + case HorizontalGradient: + { + QSize size = m_Size; + // on <16bpp displays the gradient sucks when tiled because of dithering + if( canTile()) + size.setHeight( tileHeight ); + m_Background = KImageEffect::gradient(size, colorA(), colorB(), + KImageEffect::HorizontalGradient, 0); + break; + } + case VerticalGradient: + { + QSize size = m_Size; + // on <16bpp displays the gradient sucks when tiled because of dithering + if( canTile()) + size.setWidth( tileWidth ); + m_Background = KImageEffect::gradient(size, colorA(), colorB(), + KImageEffect::VerticalGradient, 0); + break; + } + case PyramidGradient: + m_Background = KImageEffect::gradient(m_Size, colorA(), colorB(), + KImageEffect::PyramidGradient, 0); + break; + + case PipeCrossGradient: + m_Background = KImageEffect::gradient(m_Size, colorA(), colorB(), + KImageEffect::PipeCrossGradient, 0); + break; + + case EllipticGradient: + m_Background = KImageEffect::gradient(m_Size, colorA(), colorB(), + KImageEffect::EllipticGradient, 0); + break; + } + + if (retval == Done) + m_State |= BackgroundDone; + + return retval; +} + + +int KBackgroundRenderer::doWallpaper(bool quit) +{ + if (m_State & WallpaperDone) + return Done; + + if (quit) + // currently no asynch. wallpapers + return Done; + + int wpmode= enabled()?wallpaperMode():NoWallpaper; + + m_Wallpaper = QImage(); + if (wpmode != NoWallpaper) { +wp_load: + if (currentWallpaper().isEmpty()) { + wpmode = NoWallpaper; + goto wp_out; + } + QString file = m_pDirs->findResource("wallpaper", currentWallpaper()); + if (file.isEmpty()) { + wpmode = NoWallpaper; + goto wp_out; + } + + // _Don't_ use KMimeType, as it relies on ksycoca which we really + // don't want in krootimage (kdm context). + //if ( KMimeType::findByPath( file )->is( "image/svg+xml" ) ) { + if (file.endsWith(".svg") || file.endsWith(".svgz")) { +#ifdef HAVE_LIBART + // Special stuff for SVG icons + KSVGIconEngine* svgEngine = new KSVGIconEngine(); + + //FIXME + //ksvgiconloader doesn't seem to let us find out the + //ratio of width to height so for the most part we just + //assume it's a square + int svgWidth; + int svgHeight; + switch (wpmode) + { + case Centred: + case CentredAutoFit: + svgHeight = (int)(m_Size.height() * 0.8); + svgWidth = svgHeight; + break; + case Tiled: + case CenterTiled: + svgHeight = (int)(m_Size.height() * 0.5); + svgWidth = svgHeight; + break; + case Scaled: + svgHeight = m_Size.height(); + svgWidth = m_Size.width(); + break; + case CentredMaxpect: + case ScaleAndCrop: + case TiledMaxpect: + svgHeight = m_Size.height(); + svgWidth = svgHeight; + break; + case NoWallpaper: + default: + kdWarning() << k_funcinfo << "unknown diagram type" << endl; + svgHeight = m_Size.height(); + svgWidth = svgHeight; + break; + } + //FIXME hack due to strangeness with + //background control modules + if ( svgHeight < 200 ) { + svgHeight *= 6; + svgWidth *= 6; + } + + if (svgEngine->load(svgWidth, svgHeight, file )) { + QImage *image = svgEngine->image(); + m_Wallpaper = *image; + delete image; + } else { + kdWarning() << "failed to load SVG file " << file << endl; + } + + delete svgEngine; +#else //not libart + kdWarning() << k_funcinfo + << "tried to load SVG file but libart not installed" << endl; +#endif + } else { + m_Wallpaper.load(file); + } + if (m_Wallpaper.isNull()) { + if (discardCurrentWallpaper()) + goto wp_load; + wpmode = NoWallpaper; + goto wp_out; + } + m_Wallpaper = m_Wallpaper.convertDepth(32, DiffuseAlphaDither); + + // If we're previewing, scale the wallpaper down to make the preview + // look more like the real desktop. + if (m_bPreview) { + int xs = m_Wallpaper.width() * m_Size.width() / m_rSize.width(); + int ys = m_Wallpaper.height() * m_Size.height() / m_rSize.height(); + if ((xs < 1) || (ys < 1)) + { + xs = ys = 1; + } + if( m_Wallpaper.size() != QSize( xs, ys )) + m_Wallpaper = m_Wallpaper.smoothScale(xs, ys); + } + + // HACK: Use KFileMetaInfo only when we're attached to DCOP. + // KFileMetaInfo needs ksycoca and so on, but this code is + // used also in krootimage (which in turn is used by kdm). + if( kapp->dcopClient()->isAttached()) { + KFileMetaInfo metaInfo(file); + if (metaInfo.isValid() && metaInfo.item("Orientation").isValid()) { + switch (metaInfo.item("Orientation").string().toInt()) { + case 2: + // Flipped horizontally + m_Wallpaper = m_Wallpaper.mirror(true, false); + break; + case 3: + // Rotated 180 degrees + m_Wallpaper = KImageEffect::rotate(m_Wallpaper, KImageEffect::Rotate180); + break; + case 4: + // Flipped vertically + m_Wallpaper = m_Wallpaper.mirror(false, true); + break; + case 5: + // Rotated 90 degrees & flipped horizontally + m_Wallpaper = KImageEffect::rotate(m_Wallpaper, KImageEffect::Rotate90).mirror(true, false); + break; + case 6: + // Rotated 90 degrees + m_Wallpaper = KImageEffect::rotate(m_Wallpaper, KImageEffect::Rotate90); + break; + case 7: + // Rotated 90 degrees & flipped vertically + m_Wallpaper = KImageEffect::rotate(m_Wallpaper, KImageEffect::Rotate90).mirror(false, true); + break; + case 8: + // Rotated 270 degrees + m_Wallpaper = KImageEffect::rotate(m_Wallpaper, KImageEffect::Rotate270); + break; + case 1: + default: + // Normal or invalid orientation + break; + } + } + } + } +wp_out: + + if (m_Background.isNull()) { + m_Background.create(8, 8, 32); + m_Background.fill(colorA().rgb()); + } + + int retval = Done; + + int w = m_Size.width(); // desktop width/height + int h = m_Size.height(); + + int ww = m_Wallpaper.width(); // wallpaper width/height + int wh = m_Wallpaper.height(); + + m_WallpaperRect = QRect(); // to be filled destination rectangle; may exceed desktop! + + switch (wpmode) + { + case NoWallpaper: + break; + case Centred: + m_WallpaperRect.setRect((w - ww) / 2, (h - wh) / 2, ww, wh); + break; + case Tiled: + m_WallpaperRect.setRect(0, 0, w, h); + break; + case CenterTiled: + m_WallpaperRect.setCoords(-ww + ((w - ww) / 2) % ww, -wh + ((h - wh) / 2) % wh, w-1, h-1); + break; + case Scaled: + ww = w; + wh = h; + if( m_WallpaperRect.size() != QSize( w, h )) + m_Wallpaper = m_Wallpaper.smoothScale( w, h ); + m_WallpaperRect.setRect(0, 0, w, h); + break; + case CentredAutoFit: + if( ww <= w && wh <= h ) { + m_WallpaperRect.setRect((w - ww) / 2, (h - wh) / 2, ww, wh); // like Centred + break; + } + // fall through + case CentredMaxpect: + { + double sx = (double) w / ww; + double sy = (double) h / wh; + if (sx > sy) { + ww = (int)(sy * ww); + wh = h; + } else { + wh = (int)(sx * wh); + ww = w; + } + if( m_WallpaperRect.size() != QSize( ww, wh )) + m_Wallpaper = m_Wallpaper.smoothScale(ww, wh); + m_WallpaperRect.setRect((w - ww) / 2, (h - wh) / 2, ww, wh); + break; + } + case TiledMaxpect: + { + double sx = (double) w / ww; + double sy = (double) h / wh; + if (sx > sy) { + ww = (int)(sy * ww); + wh = h; + } else { + wh = (int)(sx * wh); + ww = w; + } + if( m_WallpaperRect.size() != QSize( ww, wh )) + m_Wallpaper = m_Wallpaper.smoothScale(ww, wh); + m_WallpaperRect.setRect(0, 0, w, h); + break; + } + case ScaleAndCrop: + { + double sx = (double) w / ww; + double sy = (double) h / wh; + if (sx > sy) { + //Case 1: x needs bigger scaling. Lets increase x and leave part of y offscreen + ww = w; + wh=(int)(sx * wh); + } else { + //Case 2: y needs bigger scaling. Lets increase y and leave part of x offscreen + wh = h; + ww = (int)(sy*ww); + } + if( m_WallpaperRect.size() != QSize( ww, wh )) + m_Wallpaper = m_Wallpaper.smoothScale(ww, wh); + m_WallpaperRect.setRect((w - ww) / 2, (h - wh) / 2,w, h); + break; + } + } + + wallpaperBlend(); + + if (retval == Done) + m_State |= WallpaperDone; + + return retval; +} + +bool KBackgroundRenderer::canTile() const +{ + return m_TilingEnabled && optimize(); +} + +extern bool qt_use_xrender; // in Qt ( qapplication_x11.cpp ) + +void KBackgroundRenderer::wallpaperBlend() +{ + if( !enabled() || wallpaperMode() == NoWallpaper + || (blendMode() == NoBlending && ( qt_use_xrender || !m_Wallpaper.hasAlphaBuffer()))) { + fastWallpaperBlend(); + } + else { + fullWallpaperBlend(); + } +} + +// works only for NoBlending and no alpha in wallpaper +// but is much faster than QImage fidling +void KBackgroundRenderer::fastWallpaperBlend() +{ + m_Image = QImage(); + // copy background to m_pPixmap + if( !enabled() || (wallpaperMode() == NoWallpaper && canTile())) { + // if there's no wallpaper, no need to tile the pixmap to the size of desktop, as X does + // that automatically and using a smaller pixmap should save some memory + m_Pixmap.convertFromImage( m_Background ); + return; + } + else if( wallpaperMode() == Tiled && !m_Wallpaper.hasAlphaBuffer() && canTile() && !m_bPreview ) { + // tiles will be tiled by X automatically + if( useShm()) { + KPixmapIO io; + m_Pixmap = io.convertToPixmap( m_Wallpaper ); + } + else + m_Pixmap.convertFromImage( m_Wallpaper ); + return; + } + else if( m_WallpaperRect.contains( QRect( QPoint( 0, 0 ), m_Size )) + && !m_Wallpaper.hasAlphaBuffer()) // wallpaper covers all and no blending + m_Pixmap = QPixmap( m_Size ); + else if (m_Background.size() == m_Size) + m_Pixmap.convertFromImage( m_Background ); + else { + m_Pixmap = QPixmap( m_Size ); + QPainter p( &m_Pixmap ); + QPixmap pm; + pm.convertFromImage( m_Background ); + p.drawTiledPixmap( 0, 0, m_Size.width(), m_Size.height(), pm ); + } + + // paint/alpha-blend wallpaper to destination rectangle of m_pPixmap + if (m_WallpaperRect.isValid()) { + QPixmap wp_pixmap; + if( useShm() && !m_Wallpaper.hasAlphaBuffer()) { + KPixmapIO io; + wp_pixmap = io.convertToPixmap( m_Wallpaper ); + } + else + wp_pixmap.convertFromImage( m_Wallpaper ); + int ww = m_Wallpaper.width(); + int wh = m_Wallpaper.height(); + for (int y = m_WallpaperRect.top(); y < m_WallpaperRect.bottom(); y += wh) { + for (int x = m_WallpaperRect.left(); x < m_WallpaperRect.right(); x += ww) { + bitBlt( &m_Pixmap, x, y, &wp_pixmap, 0, 0, ww, wh ); + } + } + } +} + + +void KBackgroundRenderer::fullWallpaperBlend() +{ + m_Pixmap = QPixmap(); + int w = m_Size.width(); // desktop width/height + int h = m_Size.height(); + // copy background to m_pImage + if (m_Background.size() == m_Size) { + m_Image = m_Background.copy(); + + if (m_Image.depth() < 32) + m_Image = m_Image.convertDepth(32, DiffuseAlphaDither); + + } else { + m_Image.create(w, h, 32); + tile(m_Image, QRect(0, 0, w, h), m_Background); + } + + // blend wallpaper to destination rectangle of m_pImage + if (m_WallpaperRect.isValid()) + { + int blendFactor = 100; + if (blendMode() == FlatBlending) + blendFactor = (blendBalance()+200)/4; + int ww = m_Wallpaper.width(); + int wh = m_Wallpaper.height(); + for (int y = m_WallpaperRect.top(); y < m_WallpaperRect.bottom(); y += wh) { + for (int x = m_WallpaperRect.left(); x < m_WallpaperRect.right(); x += ww) { + blend(m_Image, QRect(x, y, ww, wh), m_Wallpaper, + QPoint(-QMIN(x, 0), -QMIN(y, 0)), blendFactor); + } + } + } + + + // blend whole desktop + if ( wallpaperMode() != NoWallpaper) { + int bal = blendBalance(); + + switch( blendMode() ) { + case HorizontalBlending: + KImageEffect::blend( m_Image, m_Background, + KImageEffect::HorizontalGradient, + bal, 100 ); + break; + + case VerticalBlending: + KImageEffect::blend( m_Image, m_Background, + KImageEffect::VerticalGradient, + 100, bal ); + break; + + case PyramidBlending: + KImageEffect::blend( m_Image, m_Background, + KImageEffect::PyramidGradient, + bal, bal ); + break; + + case PipeCrossBlending: + KImageEffect::blend( m_Image, m_Background, + KImageEffect::PipeCrossGradient, + bal, bal ); + break; + + case EllipticBlending: + KImageEffect::blend( m_Image, m_Background, + KImageEffect::EllipticGradient, + bal, bal ); + break; + + case IntensityBlending: + KImageEffect::modulate( m_Image, m_Background, reverseBlending(), + KImageEffect::Intensity, bal, KImageEffect::All ); + break; + + case SaturateBlending: + KImageEffect::modulate( m_Image, m_Background, reverseBlending(), + KImageEffect::Saturation, bal, KImageEffect::Gray ); + break; + + case ContrastBlending: + KImageEffect::modulate( m_Image, m_Background, reverseBlending(), + KImageEffect::Contrast, bal, KImageEffect::All ); + break; + + case HueShiftBlending: + KImageEffect::modulate( m_Image, m_Background, reverseBlending(), + KImageEffect::HueShift, bal, KImageEffect::Gray ); + break; + + case FlatBlending: + // Already handled + break; + } + } +} + +/* Alpha blend an area from with offset to rectangle of + * Default offset is QPoint(0, 0). + * blendfactor = [0, 100%] + */ +void KBackgroundRenderer::blend(QImage& dst, QRect dr, const QImage& src, QPoint soffs, int blendFactor) +{ + int x, y, a; + dr &= dst.rect(); + + for (y = 0; y < dr.height(); y++) { + if (dst.scanLine(dr.y() + y) && src.scanLine(soffs.y() + y)) { + QRgb *b, *d; + for (x = 0; x < dr.width(); x++) { + b = reinterpret_cast(dst.scanLine(dr.y() + y) + + (dr.x() + x) * sizeof(QRgb)); + d = reinterpret_cast(src.scanLine(soffs.y() + y) + + (soffs.x() + x) * sizeof(QRgb)); + a = (qAlpha(*d) * blendFactor) / 100; + *b = qRgb(qRed(*b) - (((qRed(*b) - qRed(*d)) * a) >> 8), + qGreen(*b) - (((qGreen(*b) - qGreen(*d)) * a) >> 8), + qBlue(*b) - (((qBlue(*b) - qBlue(*d)) * a) >> 8)); + } + } + } +} + + + +void KBackgroundRenderer::slotBackgroundDone(KProcess *process) +{ + Q_ASSERT(process == m_pProc); + m_State |= BackgroundDone; + + if (m_pProc->normalExit() && !m_pProc->exitStatus()) { + m_Background.load(m_Tempfile->name()); + m_State |= BackgroundDone; + } + + m_Tempfile->unlink(); + delete m_Tempfile; m_Tempfile = 0; + m_pTimer->start(0, true); + setBusyCursor(false); +} + + + +/* + * Starts the rendering process. + */ +void KBackgroundRenderer::start(bool enableBusyCursor) +{ + m_enableBusyCursor = enableBusyCursor; + setBusyCursor(true); + + m_Cached = false; + + m_State = Rendering; + m_pTimer->start(0, true); +} + + +/* + * This slot is connected to a timer event. It is called repeatedly until + * the rendering is done. + */ +void KBackgroundRenderer::render() +{ + setBusyCursor(true); + if (!(m_State & Rendering)) + return; + + if( !(m_State & InitCheck)) { + QString f = cacheFileName(); + if( useCacheFile()) { + QString w = m_pDirs->findResource("wallpaper", currentWallpaper()); + QFileInfo wi( w ); + QFileInfo fi( f ); + if( wi.lastModified().isValid() && fi.lastModified().isValid() + && wi.lastModified() < fi.lastModified()) { + QImage im; + if( im.load( f, "PNG" )) { + m_Image = im; + m_Pixmap = QPixmap( m_Size ); + m_Pixmap.convertFromImage( m_Image ); + m_Cached = true; + m_State |= InitCheck | BackgroundDone | WallpaperDone; + } + } + } + m_pTimer->start(0, true); + m_State |= InitCheck; + return; + } + + int ret; + + if (!(m_State & BackgroundDone)) { + ret = doBackground(); + if (ret != Wait) + m_pTimer->start(0, true); + return; + } + + // No async wallpaper + doWallpaper(); + + done(); + setBusyCursor(false); +} + + +/* + * Rendering is finished. + */ +void KBackgroundRenderer::done() +{ + setBusyCursor(false); + m_State |= AllDone; + emit imageDone(desk(), screen()); + if(backgroundMode() == Program && m_pProc && + m_pProc->normalExit() && m_pProc->exitStatus()) { + emit programFailure(desk(), m_pProc->exitStatus()); + } else if(backgroundMode() == Program && m_pProc && + !m_pProc->normalExit()) { + emit programFailure(desk(), -1); + } else if(backgroundMode() == Program) { + emit programSuccess(desk()); + } + +} + +/* + * This function toggles a busy cursor on and off, for use in rendering. + * It is useful because of the ASYNC nature of the rendering - it is hard + * to make sure we don't set the busy cursor twice, but only restore + * once. + */ +void KBackgroundRenderer::setBusyCursor(bool isBusy) { + if(m_isBusyCursor == isBusy) + return; + if (isBusy && !m_enableBusyCursor) + return; + m_isBusyCursor = isBusy; + if(isBusy) + QApplication::setOverrideCursor( KCursor::workingCursor() ); + else + QApplication::restoreOverrideCursor(); +} + +/* + * Stop the rendering. + */ +void KBackgroundRenderer::stop() +{ + if (!(m_State & Rendering)) + return; + + doBackground(true); + doWallpaper(true); + m_State = 0; +} + + +/* + * Cleanup after rendering. + */ +void KBackgroundRenderer::cleanup() +{ + setBusyCursor(false); + m_Background = QImage(); + m_Image = QImage(); + m_Pixmap = QPixmap(); + m_Wallpaper = QImage(); + delete m_pProc; m_pProc = 0L; + m_State = 0; + m_WallpaperRect = QRect(); + m_Cached = false; +} + + +void KBackgroundRenderer::setPreview(const QSize &size) +{ + if (size.isNull()) + m_bPreview = false; + else { + m_bPreview = true; + m_Size = size; + } +} + + +QPixmap KBackgroundRenderer::pixmap() +{ + if (m_State & AllDone) { + if( m_Pixmap.isNull()) + m_Pixmap.convertFromImage( m_Image ); + return m_Pixmap; + } + return QPixmap(); +} + +QImage KBackgroundRenderer::image() +{ + if (m_State & AllDone) { + if( m_Image.isNull()) + fullWallpaperBlend(); // create from m_Pixmap + return m_Image; + } + return QImage(); +} + + +void KBackgroundRenderer::load(int desk, int screen, bool drawBackgroundPerScreen, bool reparseConfig) +{ + if (m_State & Rendering) + stop(); + + cleanup(); + m_bPreview = false; + m_Size = m_rSize; + + KBackgroundSettings::load(desk, screen, drawBackgroundPerScreen, reparseConfig); +} + +void KBackgroundRenderer::createTempFile() +{ + if( !m_Tempfile ) + m_Tempfile = new KTempFile(); +} + +QString KBackgroundRenderer::cacheFileName() +{ + QString f = fingerprint(); + f.replace ( ':', '_' ); // avoid characters that shouldn't be in filenames + f.replace ( '/', '#' ); + f = locateLocal( "cache", QString( "background/%1x%2_%3.png" ) + .arg( m_Size.width()).arg( m_Size.height()).arg( f )); + return f; +} + +bool KBackgroundRenderer::useCacheFile() const +{ + if( !enabled()) + return false; + if( backgroundMode() == Program ) + return false; // don't cache these at all + if( wallpaperMode() == NoWallpaper ) + return false; // generating only background patterns should be always faster + QString file = currentWallpaper(); + if( file.endsWith(".svg") || file.endsWith(".svgz")) + return true; // cache these, they can be bloody slow + switch( backgroundMode()) + { + case NoWallpaper: + case Centred: + case Tiled: + case CenterTiled: + return false; // these don't need scaling + case CentredMaxpect: + case TiledMaxpect: + case Scaled: + case CentredAutoFit: + case ScaleAndCrop: + default: + return true; + } +} + +void KBackgroundRenderer::saveCacheFile() +{ + if( !( m_State & AllDone )) + return; + if( !useCacheFile()) + return; + if( m_Image.isNull()) + fullWallpaperBlend(); // generate from m_Pixmap + QString f = cacheFileName(); + if( KStandardDirs::exists( f ) || m_Cached ) + utime( QFile::encodeName( f ), NULL ); + else { + m_Image.save( f, "PNG" ); + // remove old entries from the cache + QDir dir( locateLocal( "cache", "background/" )); + if( const QFileInfoList* list = dir.entryInfoList( "*.png", QDir::Files, QDir::Time | QDir::Reversed )) { + int size = 0; + for( QFileInfoListIterator it( *list ); + QFileInfo* info = it.current(); + ++it ) + size += info->size(); + for( QFileInfoListIterator it( *list ); + QFileInfo* info = it.current(); + ++it ) { + if( size < 8 * 1024 * 1024 ) + break; + // keep everything newer than 10 minutes if the total size is less than 50M (just in case) + if( size < 50 * 1024 * 1024 + && ( time_t ) info->lastModified().toTime_t() >= time( NULL ) - 10 * 60 ) + break; + size -= info->size(); + QFile::remove( info->absFilePath()); + } + } + } +} + +//BEGIN class KVirtualBGRenderer +KVirtualBGRenderer::KVirtualBGRenderer( int desk, KConfig *config ) +{ + m_pPixmap = 0l; + m_desk = desk; + m_numRenderers = 0; + m_scaleX = 1; + m_scaleY = 1; + + // The following code is borrowed from KBackgroundSettings::KBackgroundSettings + if (!config) { + int screen_number = 0; + if (qt_xdisplay()) + screen_number = DefaultScreen(qt_xdisplay()); + QCString configname; + if (screen_number == 0) + configname = "kdesktoprc"; + else + configname.sprintf("kdesktop-screen-%drc", screen_number); + + m_pConfig = new KConfig(configname, false, false); + m_bDeleteConfig = true; + } else { + m_pConfig = config; + m_bDeleteConfig = false; + } + + initRenderers(); + m_size = QApplication::desktop()->size(); +} + +KVirtualBGRenderer::~KVirtualBGRenderer() +{ + for (unsigned i=0; ipixmap(); + + return *m_pPixmap; +} + + +bool KVirtualBGRenderer::needProgramUpdate() +{ + for (unsigned i=0; ibackgroundMode() == KBackgroundSettings::Program && + m_renderer[i]->KBackgroundProgram::needUpdate() ) + return true; + } + return false; +} + + +void KVirtualBGRenderer::programUpdate() +{ + for (unsigned i=0; ibackgroundMode() == KBackgroundSettings::Program && + m_renderer[i]->KBackgroundProgram::needUpdate() ) + { + m_renderer[i]->KBackgroundProgram::update(); + } + } +} + + +bool KVirtualBGRenderer::needWallpaperChange() +{ + for (unsigned i=0; ineedWallpaperChange() ) + return true; + } + return false; +} + + +void KVirtualBGRenderer::changeWallpaper() +{ + for (unsigned i=0; ichangeWallpaper(); + } +} + + +int KVirtualBGRenderer::hash() +{ + QString fp; + for (unsigned i=0; ifingerprint(); + } + //kdDebug() << k_funcinfo << " fp=\""<readBoolEntry( QString("DrawBackgroundPerScreen_%1").arg(m_desk), _defDrawBackgroundPerScreen ); + + m_bCommonScreen = m_pConfig->readBoolEntry("CommonScreen", _defCommonScreen); + + m_numRenderers = m_bDrawBackgroundPerScreen ? QApplication::desktop()->numScreens() : 1; + + m_bFinished.resize(m_numRenderers); + m_bFinished.fill(false); + + if (m_numRenderers == m_renderer.size()) + return; + + for (unsigned i=0; isetSize(renderSize(i)); + connect( r, SIGNAL(imageDone(int,int)), this, SLOT(screenDone(int,int)) ); + } +} + + +void KVirtualBGRenderer::load(int desk, bool reparseConfig) +{ + m_desk = desk; + + m_pConfig->setGroup("Background Common"); + m_bCommonScreen = m_pConfig->readBoolEntry("CommonScreen", _defCommonScreen); + + initRenderers(); + + for (unsigned i=0; iload(desk, eScreen, m_bDrawBackgroundPerScreen, reparseConfig); + } +} + + +void KVirtualBGRenderer::screenDone(int _desk, int _screen) +{ + Q_UNUSED(_desk); + Q_UNUSED(_screen); + + const KBackgroundRenderer * sender = dynamic_cast(this->sender()); + int screen = m_renderer.find(sender); + if (screen == -1) + //?? + return; + + m_bFinished[screen] = true; + + + if (m_pPixmap) + { + // There's more than one renderer, so we are drawing each output to our own pixmap + + QRect overallGeometry; + for (int i=0; i < QApplication::desktop()->numScreens(); ++i) + overallGeometry |= QApplication::desktop()->screenGeometry(i); + + QPoint drawPos = QApplication::desktop()->screenGeometry(screen).topLeft() - overallGeometry.topLeft(); + drawPos.setX( int(drawPos.x() * m_scaleX) ); + drawPos.setY( int(drawPos.y() * m_scaleY) ); + + QPixmap source = m_renderer[screen]->pixmap(); + QSize renderSize = this->renderSize(screen); + renderSize.setWidth( int(renderSize.width() * m_scaleX) ); + renderSize.setHeight( int(renderSize.height() * m_scaleY) ); + + QPainter p(m_pPixmap); + + if (renderSize == source.size()) + p.drawPixmap( drawPos, source ); + + else + p.drawTiledPixmap( drawPos.x(), drawPos.y(), renderSize.width(), renderSize.height(), source ); + + p.end(); + } + + for (unsigned i=0; i 1) + { + m_pPixmap = new QPixmap(m_size); + // If are screen sizes do not properly tile the overall virtual screen + // size, then we want the untiled parts to be black for use in desktop + // previews, etc + m_pPixmap->fill(Qt::black); + } + + m_bFinished.fill(false); + for (unsigned i=0; istart(); +} + + +void KVirtualBGRenderer::stop() +{ + for (unsigned i=0; istop(); +} + + +void KVirtualBGRenderer::cleanup() +{ + m_bFinished.fill(false); + + for (unsigned i=0; icleanup(); + + delete m_pPixmap; + m_pPixmap = 0l; +} + +void KVirtualBGRenderer::saveCacheFile() +{ + for (unsigned i=0; isaveCacheFile(); +} + +void KVirtualBGRenderer::enableTiling( bool enable ) +{ + for (unsigned i=0; ienableTiling( enable ); +} + +//END class KVirtualBGRenderer + + +#include "bgrender.moc" diff --git a/kcontrol/background/bgrender.h b/kcontrol/background/bgrender.h new file mode 100644 index 000000000..39e00ff5d --- /dev/null +++ b/kcontrol/background/bgrender.h @@ -0,0 +1,182 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; tab-width 8; indent-width 4; indent-mode cstyle; + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU Library General + * Public License. See the file "COPYING.LIB" for the exact licensing terms. + */ + +#ifndef BGRender_h_Included +#define BGRender_h_Included + +#include +#include +#include +#include + +#include "bgsettings.h" + +class QSize; +class QRect; +class QString; +class QTimer; + +class KConfig; +class KProcess; +class KTempFile; +class KShellProcess; +class KStandardDirs; + +/** + * This class renders a desktop background to a QImage. The operation is + * asynchronous: connect to the signal imageDone() to find out when the + * rendering is finished. It also has support for preview images, like + * the monitor in kcmdisplay. + */ +class KBackgroundRenderer: + public QObject, + public KBackgroundSettings +{ + Q_OBJECT + +public: + KBackgroundRenderer(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config=0); + ~KBackgroundRenderer(); + + void load(int desk, int screen, bool drawBackgroundPerScreen, bool reparseConfig=true); + + void setPreview(const QSize &size); + void setSize(const QSize &size); + + QPixmap pixmap(); + QImage image(); + bool isActive() { return m_State & Rendering; } + void cleanup(); + void saveCacheFile(); + void enableTiling( bool enable ) { m_TilingEnabled = enable; } + +public slots: + void start(bool enableBusyCursor = false); + void stop(); + void desktopResized(); + +signals: + void imageDone(int desk, int screen); + void programFailure(int desk, int exitstatus); //Guaranteed either programFailure or + void programSuccess(int desk); //programSuccess is emitted after imageDone + +private slots: + void slotBackgroundDone(KProcess *); + void render(); + void done(); + +private: + enum { Error, Wait, WaitUpdate, Done }; + enum { Rendering = 1, InitCheck = 2, + BackgroundStarted = 4, BackgroundDone = 8, + WallpaperStarted = 0x10, WallpaperDone = 0x20, + AllDone = 0x40 }; + + QString buildCommand(); + void createTempFile(); + void tile(QImage& dst, QRect rect, const QImage& src); + void blend(QImage& dst, QRect dr, const QImage& src, QPoint soffs = QPoint(0, 0), int blendFactor=100); + + void wallpaperBlend(); + void fastWallpaperBlend(); + void fullWallpaperBlend(); + + int doBackground(bool quit=false); + int doWallpaper(bool quit=false); + void setBusyCursor(bool isBusy); + QString cacheFileName(); + bool useCacheFile() const; + bool canTile() const; + + bool m_isBusyCursor; + bool m_enableBusyCursor; + bool m_bPreview; + int m_State; + bool m_Cached; + bool m_TilingEnabled; + + KTempFile* m_Tempfile; + QSize m_Size, m_rSize; + QRect m_WallpaperRect; + QImage m_Image, m_Background, m_Wallpaper; + QPixmap m_Pixmap; + QTimer *m_pTimer; + + KStandardDirs *m_pDirs; + KShellProcess *m_pProc; + +}; + +/** + * In xinerama mode, each screen is rendered seperately by KBackgroundRenderer. + * This class controls a set of renderers for a desktop, and coallates the + * images. Usage is similar to KBackgroundRenderer: connect to the imageDone + * signal. + */ +class KVirtualBGRenderer : public QObject +{ + Q_OBJECT +public: + KVirtualBGRenderer(int desk, KConfig *config=0l); + ~KVirtualBGRenderer(); + + KBackgroundRenderer * renderer(unsigned screen); + unsigned numRenderers() const { return m_numRenderers; } + + QPixmap pixmap(); + + void setPreview(const QSize & size); + + bool needProgramUpdate(); + void programUpdate(); + + bool needWallpaperChange(); + void changeWallpaper(); + + int hash(); + bool isActive(); + void setEnabled( bool enable ); + void desktopResized(); + + void load(int desk, bool reparseConfig=true); + void start(); + void stop(); + void cleanup(); + void saveCacheFile(); + void enableTiling( bool enable ); + +signals: + void imageDone(int desk); + +private slots: + void screenDone(int desk, int screen); + +private: + QSize renderSize(int screen); // the size the renderer should be + void initRenderers(); + + KConfig *m_pConfig; + float m_scaleX; + float m_scaleY; + int m_desk; + unsigned m_numRenderers; + bool m_bDrawBackgroundPerScreen; + bool m_bCommonScreen; + bool m_bDeleteConfig; + QSize m_size; + + QMemArray m_bFinished; + QPtrVector m_renderer; + QPixmap *m_pPixmap; +}; + + +#endif // BGRender_h_Included + diff --git a/kcontrol/background/bgsettings.cpp b/kcontrol/background/bgsettings.cpp new file mode 100644 index 000000000..9b657393f --- /dev/null +++ b/kcontrol/background/bgsettings.cpp @@ -0,0 +1,1267 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; indent-width 4; indent-mode cstyle; + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU Library General + * Public License. See the file "COPYING.LIB" for the exact licensing terms. + */ + +#include +#include +#include +#include + +// Clean up after X.h/Xlib.h +#undef Bool +#undef Unsorted + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bgdefaults.h" +#include "bghash.h" +#include "bgsettings.h" + + +/**** KBackgroundPattern ****/ + + +KBackgroundPattern::KBackgroundPattern(QString name) +{ + dirty = false; + hashdirty = true; + + m_pDirs = KGlobal::dirs(); + m_pDirs->addResourceType("dtop_pattern", m_pDirs->kde_default("data") + + "kdesktop/patterns"); + m_pConfig = 0L; + + m_Name = name; + if (m_Name.isEmpty()) + return; + + init(); + readSettings(); +} + + +KBackgroundPattern::~KBackgroundPattern() +{ + delete m_pConfig; +} + +void KBackgroundPattern::copyConfig(const KBackgroundPattern *settings) +{ + dirty = hashdirty = true; + m_Name = settings->m_Name; + m_Comment = settings->m_Comment; + m_Pattern = settings->m_Pattern; + m_File = settings->m_File; +} + +void KBackgroundPattern::load(QString name) +{ + m_Name = name; + init(); + readSettings(); +} + + +void KBackgroundPattern::init(bool force_rw) +{ + delete m_pConfig; + + m_File = m_pDirs->findResource("dtop_pattern", m_Name + ".desktop"); + if (force_rw || m_File.isEmpty()) { + m_File = m_pDirs->saveLocation("dtop_pattern") + m_Name + ".desktop"; + m_pConfig = new KSimpleConfig(m_File); + } else + m_pConfig = new KSimpleConfig(m_File); + + m_pConfig->setGroup("KDE Desktop Pattern"); + + QFileInfo fi(m_File); + m_bReadOnly = !fi.isWritable(); +} + + +void KBackgroundPattern::setComment(const QString &comment) +{ + if (m_Comment == comment) + return; + dirty = true; + m_Comment = comment; +} + + +void KBackgroundPattern::setPattern(QString pattern) +{ + if (m_Pattern == pattern) + return; + dirty = hashdirty = true; + m_Pattern = pattern; +} + + +void KBackgroundPattern::readSettings() +{ + dirty = false; + hashdirty = true; + + m_Pattern = m_pConfig->readPathEntry("File"); + m_Comment = m_pConfig->readEntry("Comment"); + if (m_Comment.isEmpty()) + m_Comment = m_File.mid(m_File.findRev('/')+1); +} + + +void KBackgroundPattern::writeSettings() +{ + if (!dirty) + return; + if (m_bReadOnly) + init(true); + + if ( !m_pConfig ) + return; // better safe than sorry + + m_pConfig->writePathEntry("File", m_Pattern); + m_pConfig->writeEntry("Comment", m_Comment); + m_pConfig->sync(); + dirty = false; +} + + +bool KBackgroundPattern::isAvailable() +{ + if (m_Pattern.isEmpty()) + return false; + QString file = m_Pattern; + if (file.at(0) != '/') + file = m_pDirs->findResource("dtop_pattern", file); + QFileInfo fi(file); + return (fi.exists()); +} + + +bool KBackgroundPattern::remove() +{ + if (m_bReadOnly) + return false; + return !unlink(QFile::encodeName(m_File)); +} + + +QString KBackgroundPattern::fingerprint() +{ + return m_File; +} + + +int KBackgroundPattern::hash() +{ + if (hashdirty) { + m_Hash = QHash(fingerprint()); + hashdirty = false; + } + return m_Hash; +} + + +/* static */ +QStringList KBackgroundPattern::list() +{ + KStandardDirs *dirs = KGlobal::dirs(); + dirs->addResourceType("dtop_pattern", dirs->kde_default("data") + + "kdesktop/patterns"); + QStringList lst = dirs->findAllResources("dtop_pattern", "*.desktop", + false, true); + QStringList::Iterator it; + for (it=lst.begin(); it!=lst.end(); ++it) { + // Strip path and suffix + int pos = (*it).findRev('/'); + if (pos != -1) + (*it) = (*it).mid(pos+1); + pos = (*it).findRev('.'); + if (pos != -1) + (*it) = (*it).left(pos); + } + return lst; +} + + +/**** KBackgroundProgram ****/ + + +KBackgroundProgram::KBackgroundProgram(QString name) +{ + dirty = false; + hashdirty = true; + + m_pDirs = KGlobal::dirs(); + m_pDirs->addResourceType("dtop_program", m_pDirs->kde_default("data") + + "kdesktop/programs"); + m_pConfig = 0L; + + // prevent updates when just constructed. + m_LastChange = (int) time(0L); + + m_Name = name; + if (m_Name.isEmpty()) + return; + + init(); + readSettings(); +} + + +KBackgroundProgram::~KBackgroundProgram() +{ + delete m_pConfig; +} + +void KBackgroundProgram::copyConfig(const KBackgroundProgram *settings) +{ + dirty = hashdirty = true; + m_Refresh = settings->m_Refresh; + m_LastChange = settings->m_LastChange; + m_Name = settings->m_Name; + m_Command = settings->m_Command; + m_PreviewCommand = settings->m_PreviewCommand; + m_Comment = settings->m_Comment; + m_Executable = settings->m_Executable; + m_File = settings->m_File; +} + + +void KBackgroundProgram::init(bool force_rw) +{ + delete m_pConfig; + + m_File = m_pDirs->findResource("dtop_program", m_Name + ".desktop"); + if (force_rw || m_File.isEmpty()) { + m_File = m_pDirs->saveLocation("dtop_program") + m_Name + ".desktop"; + m_pConfig = new KSimpleConfig(m_File); + m_bReadOnly = false; + } else { + m_pConfig = new KSimpleConfig(m_File); + m_bReadOnly = (m_File != locateLocal("dtop_program", m_Name + ".desktop")); + } + m_pConfig->setGroup("KDE Desktop Program"); +} + + +void KBackgroundProgram::load(const QString &name) +{ + m_Name = name; + init(); + readSettings(); +} + + +void KBackgroundProgram::setComment(const QString &comment) +{ + if (m_Comment == comment) + return; + dirty = true; + m_Comment = comment; +} + + +void KBackgroundProgram::setExecutable(const QString &executable) +{ + if (m_Executable == executable) + return; + dirty = true; + m_Executable = executable; +} + + +void KBackgroundProgram::setCommand(const QString &command) +{ + if (m_Command == command) + return; + dirty = hashdirty = true; + m_Command = command; +} + + +void KBackgroundProgram::setPreviewCommand(const QString &command) +{ + if (m_PreviewCommand == command) + return; + dirty = true; + m_PreviewCommand = command; +} + + +void KBackgroundProgram::setRefresh(int refresh) +{ + if (m_Refresh == refresh) + return; + dirty = hashdirty = true; + m_Refresh = refresh; +} + + +void KBackgroundProgram::readSettings() +{ + dirty = false; + hashdirty = true; + + m_Comment = m_pConfig->readEntry("Comment"); + m_Executable = m_pConfig->readPathEntry("Executable"); + m_Command = m_pConfig->readPathEntry("Command"); + m_PreviewCommand = m_pConfig->readPathEntry("PreviewCommand", m_Command); + m_Refresh = m_pConfig->readNumEntry("Refresh", 300); +} + + +void KBackgroundProgram::writeSettings() +{ + if (!dirty) + return; + if (m_bReadOnly) + init(true); + + if ( !m_pConfig ) + return; // better safe than sorry + + m_pConfig->writeEntry("Comment", m_Comment); + m_pConfig->writePathEntry("Executable", m_Executable); + m_pConfig->writePathEntry("Command", m_Command); + m_pConfig->writeEntry("PreviewCommand", m_PreviewCommand); + m_pConfig->writeEntry("Refresh", m_Refresh); + m_pConfig->sync(); + dirty = false; +} + + +bool KBackgroundProgram::isAvailable() +{ + return !m_pDirs->findExe(m_Executable).isEmpty(); +} + + +bool KBackgroundProgram::remove() +{ + if (m_bReadOnly) + return false; + return !unlink(QFile::encodeName(m_File)); +} + + +bool KBackgroundProgram::needUpdate() +{ + return (m_LastChange + 60*m_Refresh <= time(0L)); +} + + +void KBackgroundProgram::update() +{ + m_LastChange = (int) time(0L); +} + + +QString KBackgroundProgram::fingerprint() +{ + return QString("co:%1;re:%2").arg(m_Command).arg(m_Refresh); +} + + +int KBackgroundProgram::hash() +{ + if (hashdirty) { + m_Hash = QHash(fingerprint()); + hashdirty = false; + } + return m_Hash; +} + + +/* static */ +QStringList KBackgroundProgram::list() +{ + KStandardDirs *dirs = KGlobal::dirs(); + dirs->addResourceType("dtop_program", dirs->kde_default("data") + + "kdesktop/programs"); + QStringList lst = dirs->findAllResources("dtop_program", "*.desktop", + false, true); + QStringList::Iterator it; + for (it=lst.begin(); it!=lst.end(); ++it) { + // Strip path and suffix + int pos = (*it).findRev('/'); + if (pos != -1) + (*it) = (*it).mid(pos+1); + pos = (*it).findRev('.'); + if (pos != -1) + (*it) = (*it).left(pos); + } + return lst; +} + + +/**** KBackgroundSettings ****/ + + +KBackgroundSettings::KBackgroundSettings(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config) + : KBackgroundPattern(), + KBackgroundProgram() +{ + dirty = false; hashdirty = true; + m_bDrawBackgroundPerScreen = drawBackgroundPerScreen; + m_Desk = desk; + m_Screen = screen; + m_bEnabled = true; + + // Default values. + defColorA = _defColorA; + defColorB = _defColorB; + if (QPixmap::defaultDepth() > 8) + defBackgroundMode = _defBackgroundMode; + else + defBackgroundMode = Flat; + defWallpaperMode = _defWallpaperMode; + defMultiMode = _defMultiMode; + defBlendMode = _defBlendMode; + defBlendBalance = _defBlendBalance; + defReverseBlending = _defReverseBlending; + + m_MinOptimizationDepth = _defMinOptimizationDepth; + m_bShm = _defShm; + + // Background modes + #define ADD_STRING(ID) m_BMMap[#ID] = ID; m_BMRevMap[ID] = (char *) #ID; + ADD_STRING(Flat) + ADD_STRING(Pattern) + ADD_STRING(Program) + ADD_STRING(HorizontalGradient) + ADD_STRING(VerticalGradient) + ADD_STRING(PyramidGradient) + ADD_STRING(PipeCrossGradient) + ADD_STRING(EllipticGradient) + #undef ADD_STRING + + // Blend modes + #define ADD_STRING(ID) m_BlMMap[#ID] = ID; m_BlMRevMap[ID] = (char *) #ID; + ADD_STRING(NoBlending) + ADD_STRING(FlatBlending) + ADD_STRING(HorizontalBlending) + ADD_STRING(VerticalBlending) + ADD_STRING(PyramidBlending) + ADD_STRING(PipeCrossBlending) + ADD_STRING(EllipticBlending) + ADD_STRING(IntensityBlending) + ADD_STRING(SaturateBlending) + ADD_STRING(ContrastBlending) + ADD_STRING(HueShiftBlending) + #undef ADD_STRING + + // Wallpaper modes + #define ADD_STRING(ID) m_WMMap[#ID] = ID; m_WMRevMap[ID] = (char *) #ID; + ADD_STRING(NoWallpaper) + ADD_STRING(Centred) + ADD_STRING(Tiled) + ADD_STRING(CenterTiled) + ADD_STRING(CentredMaxpect) + ADD_STRING(TiledMaxpect) + ADD_STRING(Scaled) + ADD_STRING(CentredAutoFit) + ADD_STRING(ScaleAndCrop) + #undef ADD_STRING + + // Multiple wallpaper modes + #define ADD_STRING(ID) m_MMMap[#ID] = ID; m_MMRevMap[ID] = (char *) #ID; + ADD_STRING(NoMulti) + ADD_STRING(InOrder) + ADD_STRING(Random) + ADD_STRING(NoMultiRandom) + #undef ADD_STRING + + m_pDirs = KGlobal::dirs(); + + if (!config) { + int screen_number = 0; + if (qt_xdisplay()) + screen_number = DefaultScreen(qt_xdisplay()); + QCString configname; + if (screen_number == 0) + configname = "kdesktoprc"; + else + configname.sprintf("kdesktop-screen-%drc", screen_number); + + m_pConfig = new KConfig(configname, false, false); + m_bDeleteConfig = true; + } else { + m_pConfig = config; + m_bDeleteConfig = false; + } + + if (m_Desk == -1) + return; + + readSettings(); +} + + +KBackgroundSettings::~KBackgroundSettings() +{ + if (m_bDeleteConfig) + delete m_pConfig; +} + +void KBackgroundSettings::copyConfig(const KBackgroundSettings *settings) +{ + dirty = true; + hashdirty = true; + + m_ColorA = settings->m_ColorA; + m_ColorB = settings->m_ColorB; + m_Wallpaper = settings->m_Wallpaper; + m_WallpaperList = settings->m_WallpaperList; + m_WallpaperFiles = settings->m_WallpaperFiles; + + m_BackgroundMode = settings->m_BackgroundMode; + m_WallpaperMode = settings->m_WallpaperMode; + m_BlendMode = settings->m_BlendMode; + m_BlendBalance = settings->m_BlendBalance; + m_ReverseBlending = settings->m_ReverseBlending; + m_MinOptimizationDepth = settings->m_MinOptimizationDepth; + m_bShm = settings->m_bShm; + m_MultiMode = settings->m_MultiMode; + m_Interval = settings->m_Interval; + m_CurrentWallpaper = settings->m_CurrentWallpaper; + m_CurrentWallpaperName = settings->m_CurrentWallpaperName; + + KBackgroundPattern::copyConfig(settings); + KBackgroundProgram::copyConfig(settings); +} + + +void KBackgroundSettings::load(int desk, int screen, bool drawBackgroundPerScreen, bool reparseConfig) +{ + m_Desk = desk; + m_Screen = screen; + m_bDrawBackgroundPerScreen = drawBackgroundPerScreen; + readSettings(reparseConfig); +} + + +void KBackgroundSettings::setColorA(const QColor& color) +{ + if (m_ColorA == color) + return; + dirty = hashdirty = true; + m_ColorA = color; +} + + +void KBackgroundSettings::setColorB(const QColor& color) +{ + if (m_ColorB == color) + return; + dirty = hashdirty = true; + m_ColorB = color; +} + + +void KBackgroundSettings::setPatternName(QString name) +{ + int ohash = KBackgroundPattern::hash(); + KBackgroundPattern::load(name); + if (ohash == KBackgroundPattern::hash()) + return; + + dirty = hashdirty = true; + return; +} + + +void KBackgroundSettings::setProgram(QString name) +{ + int ohash = KBackgroundProgram::hash(); + KBackgroundProgram::load(name); + if (ohash == KBackgroundProgram::hash()) + return; + + dirty = hashdirty = true; + return; +} + + +void KBackgroundSettings::setBackgroundMode(int mode) +{ + if (m_BackgroundMode == mode) + return; + dirty = hashdirty = true; + m_BackgroundMode = mode; +} + +void KBackgroundSettings::setBlendMode(int mode) +{ + if (m_BlendMode == mode) + return; + dirty = hashdirty = true; + m_BlendMode = mode; +} + +void KBackgroundSettings::setBlendBalance(int value) +{ + if (m_BlendBalance == value) + return; + dirty = hashdirty = true; + m_BlendBalance = value; +} + +void KBackgroundSettings::setReverseBlending(bool value) +{ + if (m_ReverseBlending == value) + return; + dirty = hashdirty = true; + m_ReverseBlending = value; +} + + +void KBackgroundSettings::setWallpaper(QString wallpaper) +{ + dirty = hashdirty = true; + m_Wallpaper = wallpaper; +} + + +void KBackgroundSettings::setWallpaperMode(int mode) +{ + if (m_WallpaperMode == mode) + return; + dirty = hashdirty = true; + m_WallpaperMode = mode; +} + + +void KBackgroundSettings::setWallpaperList(QStringList list) +{ + KStandardDirs *d = KGlobal::dirs(); + if (m_WallpaperList == list) + return; + + dirty = hashdirty = true; + m_WallpaperList.clear(); + for(QStringList::ConstIterator it = list.begin(); + it != list.end(); ++it) + { + QString rpath = d->relativeLocation("wallpaper", *it); + m_WallpaperList.append( !rpath.isEmpty() ? rpath : *it ); + } + updateWallpaperFiles(); + // Try to keep the current wallpaper (-1 to set position to one before it) + m_CurrentWallpaper = m_WallpaperFiles.findIndex(m_CurrentWallpaperName) - 1; + changeWallpaper(m_CurrentWallpaper < 0); +} + + +void KBackgroundSettings::setWallpaperChangeInterval(int interval) +{ + if (m_Interval == interval) + return; + dirty = hashdirty = true; + m_Interval = interval; +} + + +void KBackgroundSettings::setMultiWallpaperMode(int mode) +{ + if (m_MultiMode == mode) + return; + dirty = hashdirty = true; + m_MultiMode = mode; + changeWallpaper(true); +} + + +void KBackgroundSettings::setMinOptimizationDepth(int mode) +{ + if (m_MinOptimizationDepth == mode) + return; + dirty = hashdirty = true; + m_MinOptimizationDepth = mode; +} + +bool KBackgroundSettings::optimize() const +{ + switch( m_MinOptimizationDepth ) + { + case AlwaysOpt : + return true; + case Opt16bpp : + return QPixmap::defaultDepth() >= 16; + case Opt15bpp : + return QPixmap::defaultDepth() >= 15; + case NeverOpt : + default : + return false; + } +} + +void KBackgroundSettings::setUseShm(bool use) +{ + if (m_bShm == use) + return; + dirty = hashdirty = true; + m_bShm = use; +} + +QString KBackgroundSettings::configGroupName() const +{ + QString screenName; + if (m_bDrawBackgroundPerScreen) + screenName = QString("Screen%1").arg(QString::number(m_Screen)); + return QString("Desktop%1%2").arg(m_Desk).arg(screenName); +} + +void KBackgroundSettings::readSettings(bool reparse) +{ + if (reparse) + m_pConfig->reparseConfiguration(); + + m_pConfig->setGroup(configGroupName()); + + // Background mode (Flat, div. Gradients, Pattern or Program) + m_ColorA = m_pConfig->readColorEntry("Color1", &defColorA); + m_ColorB = m_pConfig->readColorEntry("Color2", &defColorB); + + QString s = m_pConfig->readPathEntry("Pattern"); + if (!s.isEmpty()) + KBackgroundPattern::load(s); + + s = m_pConfig->readPathEntry("Program"); + if (!s.isEmpty()) + KBackgroundProgram::load(s); + + m_BackgroundMode = defBackgroundMode; + s = m_pConfig->readEntry("BackgroundMode", "invalid"); + + if (m_BMMap.contains(s)) { + int mode = m_BMMap[s]; + // consistency check + if ( ((mode != Pattern) && (mode != Program)) || + ((mode == Pattern) && !pattern().isEmpty()) || + ((mode == Program) && !command().isEmpty()) + ) + m_BackgroundMode = mode; + } + + m_BlendMode = defBlendMode; + s = m_pConfig->readEntry("BlendMode", "invalid"); + if (m_BlMMap.contains(s)) { + m_BlendMode = m_BlMMap[s]; + } + + m_BlendBalance = defBlendBalance; + int value = m_pConfig->readNumEntry( "BlendBalance", defBlendBalance); + if (value > -201 && value < 201) + m_BlendBalance = value; + + m_ReverseBlending = m_pConfig->readBoolEntry( "ReverseBlending", defReverseBlending); + + // Multiple wallpaper config + m_WallpaperList = m_pConfig->readPathListEntry("WallpaperList"); + + m_Interval = m_pConfig->readNumEntry("ChangeInterval", 60); + m_LastChange = m_pConfig->readNumEntry("LastChange", 0); + m_CurrentWallpaper = m_pConfig->readNumEntry("CurrentWallpaper", 0); + m_CurrentWallpaperName = m_pConfig->readEntry("CurrentWallpaperName"); + + m_MultiMode = defMultiMode; + s = m_pConfig->readEntry("MultiWallpaperMode"); + if (m_MMMap.contains(s)) { + int mode = m_MMMap[s]; + m_MultiMode = mode; + } + + updateWallpaperFiles(); + if( !m_CurrentWallpaperName.isEmpty()) + m_CurrentWallpaper = m_WallpaperFiles.findIndex(m_CurrentWallpaperName); + if(m_CurrentWallpaper < 0) + m_CurrentWallpaper = 0; + + // Wallpaper mode (NoWallpaper, div. tilings) + m_WallpaperMode = defWallpaperMode; + m_Wallpaper = m_pConfig->readPathEntry("Wallpaper"); + s = m_pConfig->readEntry("WallpaperMode", "invalid"); + if (m_WMMap.contains(s)) { + int mode = m_WMMap[s]; + // consistency check. + if ((mode == NoWallpaper) || !m_Wallpaper.isEmpty() || (m_MultiMode == InOrder || m_MultiMode == Random)) + m_WallpaperMode = mode; + } + + m_MinOptimizationDepth = m_pConfig->readNumEntry( "MinOptimizationDepth", + _defMinOptimizationDepth ); + m_bShm = m_pConfig->readBoolEntry( "UseSHM", _defShm ); + + dirty = reparse; hashdirty = true; +} + + +void KBackgroundSettings::writeSettings() +{ + KBackgroundPattern::writeSettings(); + KBackgroundProgram::writeSettings(); + + if (!dirty) + return; + + m_pConfig->setGroup(configGroupName()); + m_pConfig->writeEntry("Color1", m_ColorA); + m_pConfig->writeEntry("Color2", m_ColorB); + m_pConfig->writePathEntry("Pattern", KBackgroundPattern::name()); + m_pConfig->writeEntry("Program", KBackgroundProgram::name()); + m_pConfig->writeEntry("BackgroundMode", m_BMRevMap[m_BackgroundMode]); + m_pConfig->writePathEntry("Wallpaper", m_Wallpaper); + m_pConfig->writeEntry("WallpaperMode", m_WMRevMap[m_WallpaperMode]); + m_pConfig->writeEntry("MultiWallpaperMode", m_MMRevMap[m_MultiMode]); + m_pConfig->writeEntry("BlendMode", m_BlMRevMap[m_BlendMode]); + m_pConfig->writeEntry("BlendBalance", m_BlendBalance); + m_pConfig->writeEntry("ReverseBlending", m_ReverseBlending); + m_pConfig->writeEntry("MinOptimizationDepth", m_MinOptimizationDepth); + m_pConfig->writeEntry("UseSHM", m_bShm); + + m_pConfig->writePathEntry("WallpaperList", m_WallpaperList); + m_pConfig->writeEntry("ChangeInterval", m_Interval); + m_pConfig->writeEntry("LastChange", m_LastChange); + m_pConfig->deleteEntry("CurrentWallpaper"); // obsolete, remember name + m_pConfig->writeEntry("CurrentWallpaperName", m_CurrentWallpaperName); + + m_pConfig->sync(); + + dirty = false; +} + +/* + * (re)Build m_WallpaperFiles from m_WallpaperList + */ +void KBackgroundSettings::updateWallpaperFiles() +{ + QStringList::Iterator it; + m_WallpaperFiles.clear(); + for (it=m_WallpaperList.begin(); it!=m_WallpaperList.end(); ++it) { + QString file = locate("wallpaper", *it); + if (file.isEmpty()) + continue; + QFileInfo fi(file); + if (!fi.exists()) + continue; + if (fi.isFile() && fi.isReadable()) + m_WallpaperFiles.append(file); + if (fi.isDir()) { + QDir dir(file); + QStringList lst = dir.entryList(QDir::Files | QDir::Readable); + QStringList::Iterator it; + for (it=lst.begin(); it!=lst.end(); ++it) + { + file = dir.absFilePath(*it); + QFileInfo fi(file); + if (fi.isFile() && fi.isReadable()) + m_WallpaperFiles.append(file); + } + } + } + + if (m_MultiMode == Random) + randomizeWallpaperFiles(); +} + +// Randomize the m_WallpaperFiles in a non-repeating method. +void KBackgroundSettings::randomizeWallpaperFiles() +{ + if (m_WallpaperFiles.count() < 4) + return; + + KRandomSequence rseq; + QStringList tmpList = m_WallpaperFiles; + QStringList randomList; + randomList.append(tmpList.front()); + tmpList.pop_front(); + while(tmpList.count()) + { + randomList.insert(randomList.at( + rseq.getLong(randomList.count()+1)), + 1, tmpList.front()); + + tmpList.pop_front(); + } + m_WallpaperFiles = randomList; +} + +QStringList KBackgroundSettings::wallpaperList() const +{ + if ( m_WallpaperMode == NoWallpaper ) + return QStringList(); + if ( m_MultiMode == NoMulti || m_MultiMode == NoMultiRandom ) + return QStringList(m_Wallpaper); + return m_WallpaperList; +} + +QStringList KBackgroundSettings::wallpaperFiles() const +{ + if ( m_WallpaperMode == NoWallpaper ) + return QStringList(); + if ( m_MultiMode == NoMulti || m_MultiMode == NoMultiRandom ) + return QStringList(m_Wallpaper); + return m_WallpaperFiles; +} + +/* + * Select a new wallpaper from the list. + */ +void KBackgroundSettings::changeWallpaper(bool init) +{ + if (m_WallpaperFiles.count() == 0) { + if( init ) { + m_CurrentWallpaper = 0; + m_CurrentWallpaperName = QString(); + } + return; + } + + switch (m_MultiMode) { + case InOrder: + m_CurrentWallpaper++; + if (init || (m_CurrentWallpaper >= (int) m_WallpaperFiles.count())) + m_CurrentWallpaper = 0; + break; + + case Random: + // Random: m_WallpaperFiles is randomized in a non-repeating + // method. Hence we just increment the index. + m_CurrentWallpaper++; + if (init || (m_CurrentWallpaper >= (int) m_WallpaperFiles.count())) { + m_CurrentWallpaper = 0; + randomizeWallpaperFiles(); // Get a new random-ordered list. + } + break; + default: + break; + } + + m_CurrentWallpaperName = m_WallpaperFiles[ m_CurrentWallpaper ]; + m_LastChange = (int) time(0L); + m_pConfig->setGroup(configGroupName()); + m_pConfig->deleteEntry("CurrentWallpaper"); // obsolete, remember name + m_pConfig->writeEntry("CurrentWallpaperName", m_CurrentWallpaperName); + m_pConfig->writeEntry("LastChange", m_LastChange); + m_pConfig->sync(); + + hashdirty = true; +} + + +QString KBackgroundSettings::currentWallpaper() const +{ + if ( m_WallpaperMode == NoWallpaper ) + return QString::null; + if (m_MultiMode == NoMulti || m_MultiMode == NoMultiRandom) + return m_Wallpaper; + + if (m_CurrentWallpaper >= 0 && m_CurrentWallpaper < (int) m_WallpaperFiles.count()) + return m_WallpaperFiles[m_CurrentWallpaper]; + return QString::null; +} + +bool KBackgroundSettings::discardCurrentWallpaper() +{ + if (m_MultiMode == NoMulti || m_MultiMode == NoMultiRandom) + { + return false; + } + m_WallpaperFiles.remove(m_WallpaperFiles.at(m_CurrentWallpaper)); + --m_CurrentWallpaper; + changeWallpaper(); + + return true; +} + + +bool KBackgroundSettings::needWallpaperChange() +{ + if (m_MultiMode == NoMulti || m_MultiMode == NoMultiRandom) + return false; + + return ((m_LastChange + 60*m_Interval) <= time(0L)); +} + + +/* + * Create a fingerprint string for this config. Be somewhat (overly) carefull + * that only a different final result will give a different fingerprint. + */ + +QString KBackgroundSettings::fingerprint() +{ + QString s = QString("bm:%1;en:%2").arg(m_BackgroundMode).arg(m_bEnabled); + switch (m_BackgroundMode) { + case Flat: + s += QString("ca:%1;").arg(m_ColorA.rgb()); + break; + case Program: + s += QString("pr:%1;").arg(KBackgroundProgram::hash()); + break; + case Pattern: + s += QString("ca:%1;cb:%2;pt:%3;").arg(m_ColorA.rgb()) + .arg(m_ColorB.rgb()).arg(KBackgroundPattern::hash()); + break; + default: + s += QString("ca:%1;cb:%2;").arg(m_ColorA.rgb()).arg(m_ColorB.rgb()); + break; + } + + s += QString("wm:%1;").arg(m_WallpaperMode); + if (m_WallpaperMode != NoWallpaper) + { + Q_UINT32 rh = KGlobal::dirs()->calcResourceHash("wallpaper", currentWallpaper(), false); + s += QString("wp:%2:%1;").arg(rh).arg(currentWallpaper()); + + } + s += QString("blm:%1;").arg(m_BlendMode); + if (m_BlendMode != NoBlending) { + s += QString("blb:%1;").arg(m_BlendBalance); + s += QString("rbl:%1;").arg(int(m_ReverseBlending)); + } + s += QString::number( m_bShm ); + s += QString::number( m_MinOptimizationDepth ); + + return s; +} + + +int KBackgroundSettings::hash() +{ + if (hashdirty) { + m_Hash = QHash(fingerprint()); + hashdirty = false; + } + return m_Hash; +} + +void KBackgroundSettings::setEnabled(const bool enable) +{ + if (m_bEnabled == enable) + return; + + m_bEnabled= enable; + hashdirty = true; +} + +/**** KGlobalBackgroundSettings ****/ + +KGlobalBackgroundSettings::KGlobalBackgroundSettings(KConfig *_config) +{ + m_pConfig = _config; + + readSettings(); +} + + +QString KGlobalBackgroundSettings::deskName(int desk) +{ + return m_Names[desk]; +} + + +/* +void KGlobalBackgroundSettings::setDeskName(int desk, QString name) +{ + if (name == m_Names[desk]) + return; + dirty = true; + m_Names[desk] = name; +} +*/ + + +void KGlobalBackgroundSettings::setCacheSize(int size) +{ + if (size == m_CacheSize) + return; + dirty = true; + m_CacheSize = size; +} + + +void KGlobalBackgroundSettings::setLimitCache(bool limit) +{ + if (limit == m_bLimitCache) + return; + dirty = true; + m_bLimitCache = limit; +} + + +bool KGlobalBackgroundSettings::drawBackgroundPerScreen(int desk) const +{ + if ( desk > int(m_bDrawBackgroundPerScreen.size()) ) + return _defDrawBackgroundPerScreen; + return m_bDrawBackgroundPerScreen[desk]; +} + + +void KGlobalBackgroundSettings::setDrawBackgroundPerScreen(int desk, bool perScreen) +{ + if ( desk >= int(m_bDrawBackgroundPerScreen.size()) ) + return; + + if ( m_bDrawBackgroundPerScreen[desk] == perScreen ) + return; + + dirty = true; + m_bDrawBackgroundPerScreen[desk] = perScreen; +} + + +void KGlobalBackgroundSettings::setCommonScreenBackground(bool common) +{ + if (common == m_bCommonScreen) + return; + dirty = true; + m_bCommonScreen = common; +} + + +void KGlobalBackgroundSettings::setCommonDeskBackground(bool common) +{ + if (common == m_bCommonDesk) + return; + dirty = true; + m_bCommonDesk = common; +} + + +void KGlobalBackgroundSettings::setDockPanel(bool dock) +{ + if (dock == m_bDock) + return; + dirty = true; + m_bDock = dock; +} + + +void KGlobalBackgroundSettings::setExportBackground(bool _export) +{ + if (_export == m_bExport) + return; + dirty = true; + m_bExport = _export; +} + +void KGlobalBackgroundSettings::setTextColor(QColor _color) +{ + if (_color == m_TextColor) + return; + dirty = true; + m_TextColor = _color; +} + +void KGlobalBackgroundSettings::setTextBackgroundColor(QColor _color) +{ + if (_color == m_TextBackgroundColor) + return; + dirty = true; + m_TextBackgroundColor = _color; +} + +void KGlobalBackgroundSettings::setShadowEnabled(bool enabled) +{ + if (enabled == m_shadowEnabled) + return; + dirty = true; + m_shadowEnabled = enabled; +} + +void KGlobalBackgroundSettings::setTextLines(int lines) +{ + if (lines == m_textLines) + return; + dirty = true; + m_textLines = lines; +} + +void KGlobalBackgroundSettings::setTextWidth(int width) +{ + if (width == m_textWidth) + return; + dirty = true; + m_textWidth = width; +} + +void KGlobalBackgroundSettings::readSettings() +{ + m_pConfig->setGroup("Background Common"); + m_bCommonScreen = m_pConfig->readBoolEntry("CommonScreen", _defCommonScreen); + m_bCommonDesk = m_pConfig->readBoolEntry("CommonDesktop", _defCommonDesk); + m_bDock = m_pConfig->readBoolEntry("Dock", _defDock); + m_bExport = m_pConfig->readBoolEntry("Export", _defExport); + m_bLimitCache = m_pConfig->readBoolEntry("LimitCache", _defLimitCache); + m_CacheSize = m_pConfig->readNumEntry("CacheSize", _defCacheSize); + + m_Names.clear(); + NETRootInfo info( qt_xdisplay(), NET::DesktopNames | NET::NumberOfDesktops ); + m_bDrawBackgroundPerScreen.resize(info.numberOfDesktops()); + for ( int i = 0 ; i < info.numberOfDesktops() ; ++i ) + m_bDrawBackgroundPerScreen[i] = m_pConfig->readBoolEntry( QString("DrawBackgroundPerScreen_%1").arg(i), _defDrawBackgroundPerScreen ); + + m_TextColor = KGlobalSettings::textColor(); + m_pConfig->setGroup("FMSettings"); + m_TextColor = m_pConfig->readColorEntry("NormalTextColor", &m_TextColor); + m_TextBackgroundColor = m_pConfig->readColorEntry("ItemTextBackground"); + m_shadowEnabled = m_pConfig->readBoolEntry("ShadowEnabled", true); + m_textLines = m_pConfig->readNumEntry("TextHeight", DEFAULT_TEXTHEIGHT); + m_textWidth = m_pConfig->readNumEntry("TextWidth", DEFAULT_TEXTWIDTH); + + for ( int i = 0 ; i < info.numberOfDesktops() ; ++i ) + m_Names.append( QString::fromUtf8(info.desktopName(i+1)) ); + + dirty = false; +} + +void KGlobalBackgroundSettings::writeSettings() +{ + if (!dirty) + return; + + m_pConfig->setGroup("Background Common"); + m_pConfig->writeEntry("CommonScreen", m_bCommonScreen); + m_pConfig->writeEntry("CommonDesktop", m_bCommonDesk); + m_pConfig->writeEntry("Dock", m_bDock); + m_pConfig->writeEntry("Export", m_bExport); + m_pConfig->writeEntry("LimitCache", m_bLimitCache); + m_pConfig->writeEntry("CacheSize", m_CacheSize); + + for ( unsigned i = 0 ; i < m_bDrawBackgroundPerScreen.size() ; ++i ) + m_pConfig->writeEntry(QString("DrawBackgroundPerScreen_%1").arg(i), m_bDrawBackgroundPerScreen[i] ); + + m_pConfig->setGroup("FMSettings"); + m_pConfig->writeEntry("NormalTextColor", m_TextColor); + m_pConfig->writeEntry("ItemTextBackground", m_TextBackgroundColor); + m_pConfig->writeEntry("ShadowEnabled", m_shadowEnabled); + m_pConfig->writeEntry("TextHeight", m_textLines); + m_pConfig->writeEntry("TextWidth", m_textWidth); + + m_pConfig->sync(); + dirty = false; + + // tell kdesktop to get it's butt in gear and pick up the new settings + QByteArray data; + kapp->dcopClient()->send("kdesktop", "KDesktopIface", "configure()", data); +} + diff --git a/kcontrol/background/bgsettings.h b/kcontrol/background/bgsettings.h new file mode 100644 index 000000000..928f66360 --- /dev/null +++ b/kcontrol/background/bgsettings.h @@ -0,0 +1,372 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; indent-width 4; indent-mode cstyle; + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU Library General + * Public License. See the file "COPYING.LIB" for the exact licensing terms. + */ + +#ifndef __BGSettings_h_Included__ +#define __BGSettings_h_Included__ + + +#include +#include +#include + +template class QMap; +class KStandardDirs; +class KSimpleConfig; +class KConfig; +class QString; +class QImage; + +/** + * A class to manipulate/read/write/list KDE desktop patterns. + * + * A pattern is a raster image. An entry for earch pattern is + * stored as a .desktop file in $(datadir)/kdesktop/patterns. + */ +class KBackgroundPattern +{ +public: + KBackgroundPattern(QString name=QString::null); + ~KBackgroundPattern(); + + void copyConfig(const KBackgroundPattern*); + + QString name() const { return m_Name; } + void load(QString name); + + void setComment(const QString &comment); + QString comment() const {return m_Comment; } + + void setPattern(QString file); + QString pattern() const { return m_Pattern; } + + void readSettings(); + void writeSettings(); + + bool isAvailable(); + bool isGlobal()const { return m_bReadOnly; } + bool remove(); + + int hash(); + + static QStringList list(); + +private: + void init(bool force_rw=false); + QString fingerprint(); + + bool dirty, hashdirty; + bool m_bReadOnly; + int m_Hash; + QString m_Name, m_Comment; + QString m_Pattern, m_File; + KStandardDirs *m_pDirs; + KSimpleConfig *m_pConfig; +}; + + +/** + * A class to manipulate/read/write/list KDE desktop programs (a la xearth). + * + * A program is described by a string like: + * + * a_program -xres %x -yres %y -outfile %f + * + * Possible escape sequences: + * + * %x Horizontal resolution in pixels. + * %y Vertical resulution in pixels. + * %f Filename to dump to. + * + * An entry for each program is stored as a .desktop file in + * $(datadir)/kdesktop/programs. + */ +class KBackgroundProgram +{ +public: + KBackgroundProgram(QString name=QString::null); + ~KBackgroundProgram(); + + void copyConfig(const KBackgroundProgram*); + + QString name()const { return m_Name; } + void load(const QString & name); + + void setComment(const QString &comment); + QString comment()const { return m_Comment; } + + void setCommand(const QString &command); + QString command()const { return m_Command; } + + void setPreviewCommand(const QString &command); + QString previewCommand()const { return m_PreviewCommand; } + + void setRefresh(int refresh); + int refresh()const { return m_Refresh; } + + void setExecutable(const QString &executable); + QString executable()const { return m_Executable; } + + void readSettings(); + void writeSettings(); + + void update(); + bool needUpdate(); + + int hash(); + + bool isAvailable(); + bool isGlobal()const { return m_bReadOnly; } + bool remove(); + + static QStringList list(); + +private: + void init(bool force_rw=false); + QString fingerprint(); + + bool dirty, hashdirty; + bool m_bReadOnly; + int m_Refresh, m_Hash, m_LastChange; + QString m_Name, m_Command; + QString m_PreviewCommand, m_Comment; + QString m_Executable, m_File; + KStandardDirs *m_pDirs; + KSimpleConfig *m_pConfig; +}; + + +/** + * KBackgroundSettings: A class to read/write/manipulate + * KDE desktop settings. + */ +class KBackgroundSettings + : public KBackgroundPattern, + public KBackgroundProgram +{ +public: + /** + * @param drawBackgroundPerScreen if false, then all screens (in xinerama + * mode) will be treated as one big display, and the "screen" paramater + * will be ignored. + */ + KBackgroundSettings(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config); + ~KBackgroundSettings(); + + void copyConfig(const KBackgroundSettings*); + + bool drawBackgroundPerScreen() const { return m_bDrawBackgroundPerScreen; } + void setDrawBackgroundPerScreen(bool draw); + + int desk() const { return m_Desk; } + int screen() const { return m_Screen; } +// void load(int desk, int screen, bool drawBackgroundPerScreen, bool reparseConfig=true); + void load(int desk, int screen, bool drawBackgroundPerScreen, bool reparseConfig); + + void setColorA(const QColor &color); + QColor colorA() const { return m_ColorA; } + void setColorB(const QColor &color); + QColor colorB() const { return m_ColorB; } + + void setProgram(QString program); + void setPatternName(QString pattern); + + enum BackgroundMode { + Flat, Pattern, Program, + HorizontalGradient, VerticalGradient, PyramidGradient, + PipeCrossGradient, EllipticGradient, lastBackgroundMode + }; + void setBackgroundMode(int mode); + int backgroundMode() const { return m_BackgroundMode; } + + enum BlendMode { + NoBlending, FlatBlending, + HorizontalBlending, VerticalBlending, PyramidBlending, + PipeCrossBlending, EllipticBlending, + IntensityBlending, SaturateBlending, ContrastBlending, + HueShiftBlending, lastBlendMode + }; + void setBlendMode(int mode); + int blendMode() const { return m_BlendMode; } + + void setReverseBlending(bool value); + bool reverseBlending() const { return m_ReverseBlending; } + + void setBlendBalance(int value); + int blendBalance() const { return m_BlendBalance; } + + void setWallpaper(QString name); + QString wallpaper() const { return m_Wallpaper; } + + enum WallpaperMode { + NoWallpaper, Centred, Tiled, CenterTiled, CentredMaxpect, TiledMaxpect, + Scaled, CentredAutoFit, ScaleAndCrop, lastWallpaperMode + }; + void setWallpaperMode(int mode); + int wallpaperMode() const { return m_WallpaperMode; } + + void setWallpaperList(QStringList); + QStringList wallpaperList() const; + QStringList wallpaperFiles() const; + + void setWallpaperChangeInterval(int); + int wallpaperChangeInterval() const { return m_Interval; } + + enum MultiMode { + NoMulti, InOrder, Random, NoMultiRandom + }; + void setMultiWallpaperMode(int mode); + int multiWallpaperMode() const { return m_MultiMode; } + + enum MinOptDepth { + AlwaysOpt, Opt16bpp, Opt15bpp, NeverOpt }; + + void setMinOptimizationDepth( int mode ); + int minOptimizationDepth() const { return m_MinOptimizationDepth; } + bool optimize() const; + + void setUseShm( bool use ); + bool useShm() const { return m_bShm; } + + void changeWallpaper(bool init=false); + void updateWallpaperFiles(); + void randomizeWallpaperFiles(); + + QString currentWallpaper() const; + /** + * @return true if the currentWallpaper has changed + */ + bool discardCurrentWallpaper(); + int lastWallpaperChange() const { return m_LastChange; } + bool needWallpaperChange(); + + void readSettings(bool reparse=false); + void writeSettings(); + QString configGroupName() const; + + int hash(); + QString fingerprint(); + + void setEnabled( const bool enable ); + bool enabled() const { return m_bEnabled; } + +private: + void updateHash(); + + bool dirty; + bool hashdirty; + int m_Screen, m_Desk, m_Hash; + + QColor m_ColorA, defColorA; + QColor m_ColorB, defColorB; + QString m_Wallpaper; + QStringList m_WallpaperList, m_WallpaperFiles; + + int m_BackgroundMode, defBackgroundMode; + int m_WallpaperMode, defWallpaperMode; + int m_BlendMode, defBlendMode; + int m_BlendBalance, defBlendBalance; + bool m_ReverseBlending, defReverseBlending; + int m_MinOptimizationDepth; + bool m_bShm; + bool m_bDrawBackgroundPerScreen; + + int m_MultiMode, defMultiMode; + int m_Interval, m_LastChange; + int m_CurrentWallpaper; + QString m_CurrentWallpaperName; + + KConfig *m_pConfig; + KStandardDirs *m_pDirs; + bool m_bDeleteConfig; + bool m_bEnabled; + +public: + QMap m_BMMap; + QMap m_WMMap; + QMap m_MMMap; + QMap m_BlMMap; + char *m_BMRevMap[16]; + char *m_WMRevMap[16]; + char *m_MMRevMap[16]; + char *m_BlMRevMap[16]; +}; + + +/** + * A class to read/modify the global desktop background settings. + */ +class KGlobalBackgroundSettings +{ +public: + KGlobalBackgroundSettings(KConfig *config); + + QString deskName(int desk); + //void setDeskName(int desk, QString name); + + int cacheSize() { return m_CacheSize; } + void setCacheSize(int size); + + bool drawBackgroundPerScreen(int desk) const; + void setDrawBackgroundPerScreen(int desk, bool perScreen); + + bool limitCache() { return m_bLimitCache; } + void setLimitCache(bool limit); + + bool commonScreenBackground() { return m_bCommonScreen; } + void setCommonScreenBackground(bool common); + + bool commonDeskBackground() { return m_bCommonDesk; } + void setCommonDeskBackground(bool common); + + bool dockPanel() { return m_bDock; } + void setDockPanel(bool dock); + + bool exportBackground() {return m_bExport; } + void setExportBackground(bool _export); + + void setTextColor(QColor _color); + QColor textColor() const { return m_TextColor; } + + void setTextBackgroundColor(QColor _color); + QColor textBackgroundColor() const { return m_TextBackgroundColor; } + + void setShadowEnabled(bool enabled); + bool shadowEnabled() const { return m_shadowEnabled; } + + void setTextLines(int lines); + int textLines() const { return m_textLines; } + void setTextWidth(int width); + int textWidth() const { return m_textWidth; } + + void readSettings(); + void writeSettings(); + KConfig* getConfig() { return m_pConfig; } + +private: + bool dirty; + bool m_bCommonDesk; + bool m_bCommonScreen; + bool m_bDock; + bool m_bLimitCache, m_bExport; + int m_CacheSize; + QStringList m_Names; + + QColor m_TextColor; + QColor m_TextBackgroundColor; + bool m_shadowEnabled; + int m_textLines; + int m_textWidth; + KConfig *m_pConfig; + bool m_bDeleteConfig; + QValueVector m_bDrawBackgroundPerScreen; // m_bDrawBackgroundPerScreen[desk] +}; + + +#endif // __BGSettings_h_Included__ diff --git a/kcontrol/background/bgwallpaper.cpp b/kcontrol/background/bgwallpaper.cpp new file mode 100644 index 000000000..9786059eb --- /dev/null +++ b/kcontrol/background/bgwallpaper.cpp @@ -0,0 +1,238 @@ +/* vi: ts=8 sts=4 sw=4 + + This file is part of the KDE project, module kcmbackground. + + Copyright (C) 1999 Geert Jansen + Copyright (C) 2003 Waldo Bastian + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "bgsettings.h" +#include "bgwallpaper.h" +#include "bgwallpaper_ui.h" + +/**** BGMultiWallpaperList ****/ + +BGMultiWallpaperList::BGMultiWallpaperList(QWidget *parent, const char *name) + : QListBox(parent, name) +{ + setAcceptDrops(true); + setSelectionMode(QListBox::Extended); +} + + +void BGMultiWallpaperList::dragEnterEvent(QDragEnterEvent *ev) +{ + ev->accept(KURLDrag::canDecode(ev)); +} + + +void BGMultiWallpaperList::dropEvent(QDropEvent *ev) +{ + QStringList files; + KURL::List urls; + KURLDrag::decode(ev, urls); + for(KURL::List::ConstIterator it = urls.begin(); + it != urls.end(); ++it) + { + // TODO: Download remote files + if ((*it).isLocalFile()) + files.append((*it).path()); + } + insertStringList(files); +} + +bool BGMultiWallpaperList::hasSelection() +{ + for ( unsigned i = 0; i < count(); i++) + { + if ( item( i ) && item( i )->isSelected() ) + return true; + } + return false; +} + +void BGMultiWallpaperList::ensureSelectionVisible() +{ + for ( int i = topItem(); i < topItem() + numItemsVisible() - 1; i++) + if ( item( i ) && item( i )->isSelected() ) + return; + + for ( unsigned i = 0; i < count(); i++) + if ( item( i ) && item( i )->isSelected() ) + { + setTopItem( i ); + return; + } +} + +/**** BGMultiWallpaperDialog ****/ + +BGMultiWallpaperDialog::BGMultiWallpaperDialog(KBackgroundSettings *settings, + QWidget *parent, const char *name) + : KDialogBase(parent, name, true, i18n("Setup Slide Show"), + Ok | Cancel, Ok, true), m_pSettings(settings) +{ + dlg = new BGMultiWallpaperBase(this); + setMainWidget(dlg); + + dlg->m_spinInterval->setRange(1, 99999); + dlg->m_spinInterval->setSteps(1, 15); + dlg->m_spinInterval->setSuffix(i18n(" min")); + + // Load + dlg->m_spinInterval->setValue(QMAX(1,m_pSettings->wallpaperChangeInterval())); + + dlg->m_listImages->insertStringList(m_pSettings->wallpaperList()); + + if (m_pSettings->multiWallpaperMode() == KBackgroundSettings::Random) + dlg->m_cbRandom->setChecked(true); + + connect(dlg->m_buttonAdd, SIGNAL(clicked()), SLOT(slotAdd())); + connect(dlg->m_buttonRemove, SIGNAL(clicked()), SLOT(slotRemove())); + connect(dlg->m_buttonMoveUp, SIGNAL(clicked()), SLOT(slotMoveUp())); + connect(dlg->m_buttonMoveDown, SIGNAL(clicked()), SLOT(slotMoveDown())); + connect(dlg->m_listImages, SIGNAL(clicked ( QListBoxItem * )), SLOT(slotItemSelected( QListBoxItem *))); + dlg->m_buttonRemove->setEnabled( false ); + dlg->m_buttonMoveUp->setEnabled( false ); + dlg->m_buttonMoveDown->setEnabled( false ); + +} + +void BGMultiWallpaperDialog::slotItemSelected( QListBoxItem * ) +{ + dlg->m_buttonRemove->setEnabled( dlg->m_listImages->hasSelection() ); + setEnabledMoveButtons(); +} + +void BGMultiWallpaperDialog::setEnabledMoveButtons() +{ + bool hasSelection = dlg->m_listImages->hasSelection(); + QListBoxItem * item; + + item = dlg->m_listImages->firstItem(); + dlg->m_buttonMoveUp->setEnabled( hasSelection && item && !item->isSelected() ); + item = dlg->m_listImages->item( dlg->m_listImages->count() - 1 ); + dlg->m_buttonMoveDown->setEnabled( hasSelection && item && !item->isSelected() ); +} + +void BGMultiWallpaperDialog::slotAdd() +{ + QStringList mimeTypes = KImageIO::mimeTypes( KImageIO::Reading ); +#ifdef HAVE_LIBART + mimeTypes += "image/svg+xml"; +#endif + + KFileDialog fileDialog(KGlobal::dirs()->findDirs("wallpaper", "").first(), + mimeTypes.join( " " ), this, + 0L, true); + + fileDialog.setCaption(i18n("Select Image")); + KFile::Mode mode = static_cast (KFile::Files | + KFile::Directory | + KFile::ExistingOnly | + KFile::LocalOnly); + fileDialog.setMode(mode); + fileDialog.exec(); + QStringList files = fileDialog.selectedFiles(); + if (files.isEmpty()) + return; + + dlg->m_listImages->insertStringList(files); +} + +void BGMultiWallpaperDialog::slotRemove() +{ + int current = -1; + for ( unsigned i = 0; i < dlg->m_listImages->count();) + { + QListBoxItem * item = dlg->m_listImages->item( i ); + if ( item && item->isSelected()) + { + dlg->m_listImages->removeItem(i); + if (current == -1) + current = i; + } + else + i++; + } + if ((current != -1) && (current < (signed)dlg->m_listImages->count())) + dlg->m_listImages->setSelected(current, true); + + dlg->m_buttonRemove->setEnabled(dlg->m_listImages->hasSelection()); + + setEnabledMoveButtons(); +} + +void BGMultiWallpaperDialog::slotMoveUp() +{ + for ( unsigned i = 1; i < dlg->m_listImages->count(); i++) + { + QListBoxItem * item = dlg->m_listImages->item( i ); + if ( item && item->isSelected() ) + { + dlg->m_listImages->takeItem( item ); + dlg->m_listImages->insertItem( item, i - 1 ); + } + } + dlg->m_listImages->ensureSelectionVisible(); + setEnabledMoveButtons(); +} + +void BGMultiWallpaperDialog::slotMoveDown() +{ + for ( unsigned i = dlg->m_listImages->count() - 1; i > 0; i--) + { + QListBoxItem * item = dlg->m_listImages->item( i - 1 ); + if ( item && item->isSelected()) + { + dlg->m_listImages->takeItem( item ); + dlg->m_listImages->insertItem( item, i ); + } + } + dlg->m_listImages->ensureSelectionVisible(); + setEnabledMoveButtons(); +} + +void BGMultiWallpaperDialog::slotOk() +{ + QStringList lst; + for (unsigned i=0; i < dlg->m_listImages->count(); i++) + lst.append(dlg->m_listImages->text(i)); + m_pSettings->setWallpaperList(lst); + m_pSettings->setWallpaperChangeInterval(dlg->m_spinInterval->value()); + if (dlg->m_cbRandom->isChecked()) + m_pSettings->setMultiWallpaperMode(KBackgroundSettings::Random); + else + m_pSettings->setMultiWallpaperMode(KBackgroundSettings::InOrder); + accept(); +} + + +#include "bgwallpaper.moc" diff --git a/kcontrol/background/bgwallpaper.h b/kcontrol/background/bgwallpaper.h new file mode 100644 index 000000000..0ecc1e6a4 --- /dev/null +++ b/kcontrol/background/bgwallpaper.h @@ -0,0 +1,66 @@ +/* vi: ts=8 sts=4 sw=4 + + This file is part of the KDE project, module kcmbackground. + + Copyright (C) 1999 Geert Jansen + Copyright (C) 2003 Waldo Bastian + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 _BGWALLPAPER_H_ +#define _BGWALLPAPER_H_ + +#include +#include + +#include + +class BGMultiWallpaperBase; +class KBackgroundSettings; + +class BGMultiWallpaperList : public QListBox +{ +public: + BGMultiWallpaperList(QWidget *parent, const char *name); + + void dragEnterEvent(QDragEnterEvent *ev); + void dropEvent(QDropEvent *ev); + bool hasSelection(); + void ensureSelectionVisible(); +}; + +class BGMultiWallpaperDialog : public KDialogBase +{ + Q_OBJECT +public: + BGMultiWallpaperDialog(KBackgroundSettings *settings, QWidget *parent, const char *name=0); + +public slots: + void slotAdd(); + void slotRemove(); + void slotMoveUp(); + void slotMoveDown(); + void slotOk(); + void slotItemSelected( QListBoxItem * ); +private: + void setEnabledMoveButtons(); + + KBackgroundSettings *m_pSettings; + + BGMultiWallpaperBase *dlg; +}; + +#endif diff --git a/kcontrol/background/bgwallpaper_ui.ui b/kcontrol/background/bgwallpaper_ui.ui new file mode 100644 index 000000000..c3d9a9a40 --- /dev/null +++ b/kcontrol/background/bgwallpaper_ui.ui @@ -0,0 +1,167 @@ + +BGMultiWallpaperBase + + + BGMultiWallPaperBase + + + + 0 + 0 + 410 + 196 + + + + + unnamed + + + 0 + + + + textLabel2 + + + Show the following pictures: + + + + + m_cbRandom + + + &Show pictures in random order + + + + + layout3 + + + + unnamed + + + + textLabel1 + + + Change &picture after: + + + m_spinInterval + + + + + m_spinInterval + + + + + spacer4 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + layout4 + + + + unnamed + + + + m_listImages + + + + 3 + 3 + 0 + 0 + + + + + 300 + 100 + + + + + + m_buttonAdd + + + &Add... + + + + + spacer5 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + m_buttonRemove + + + &Remove + + + + + m_buttonMoveDown + + + Move &Down + + + + + m_buttonMoveUp + + + Move &Up + + + + + + + + bgwallpaper.h + kdialog.h + + + + diff --git a/kcontrol/background/main.cpp b/kcontrol/background/main.cpp new file mode 100644 index 000000000..433065c85 --- /dev/null +++ b/kcontrol/background/main.cpp @@ -0,0 +1,123 @@ +/* vi: ts=8 sts=4 sw=4 + * This file is part of the KDE project, module kcmbackground. + * Copyright (C) 1999 Geert Jansen + * Copyright (C) 2003 Waldo Bastian + * + * Based on old backgnd.cpp: + * + * Copyright (c) Martin R. Jones 1996 + * Converted to a kcc module by Matthias Hoelzer 1997 + * Gradient backgrounds by Mark Donohoe 1997 + * Pattern backgrounds by Stephan Kulow 1998 + * Randomizing & dnd & new display modes by Matej Koss 1998 + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bgdialog.h" + +#include "main.h" + +/* as late as possible, as it includes some X headers without protecting them */ +#include + +/**** DLL Interface ****/ +typedef KGenericFactory KBackGndFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_background, KBackGndFactory("kcmbackground")) + +/**** KBackground ****/ +KBackground::~KBackground( ) +{ + delete m_pConfig; +} + +KBackground::KBackground(QWidget *parent, const char *name, const QStringList &/* */) + : KCModule(KBackGndFactory::instance(), parent, name) +{ + int screen_number = 0; + if (qt_xdisplay()) + screen_number = DefaultScreen(qt_xdisplay()); + QCString configname; + if (screen_number == 0) + configname = "kdesktoprc"; + else + configname.sprintf("kdesktop-screen-%drc", screen_number); + m_pConfig = new KConfig(configname, false, false); + + QVBoxLayout *layout = new QVBoxLayout(this); + m_base = new BGDialog(this, m_pConfig); + setQuickHelp( m_base->quickHelp()); + layout->add(m_base); + layout->addStretch(); + + KImageIO::registerFormats(); + + // reparenting that is done. + setAcceptDrops(true); + + connect(m_base, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmbackground"), I18N_NOOP("KDE Background Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1997-2002 Martin R. Jones")); + + about->addAuthor("Waldo Bastian", 0, "bastian@kde.org"); + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + about->addAuthor("Martin R. Jones", 0, "jones@kde.org"); + about->addAuthor("Matthias Hoelzer-Kluepfel", 0, "mhk@kde.org"); + about->addAuthor("Stephan Kulow", 0, "coolo@kde.org"); + about->addAuthor("Mark Donohoe", 0, 0); + about->addAuthor("Matej Koss", 0 , 0); + + setAboutData( about ); +} + +void KBackground::load() +{ + load( false ); +} + +void KBackground::load( bool useDefaults ) +{ + m_base->load( useDefaults ); +} + + +void KBackground::save() +{ + m_base->save(); + + // reconfigure kdesktop. kdesktop will notify all clients + DCOPClient *client = kapp->dcopClient(); + if (!client->isAttached()) + client->attach(); + + int screen_number = 0; + if (qt_xdisplay()) + screen_number = DefaultScreen(qt_xdisplay()); + QCString appname; + if (screen_number == 0) + appname = "kdesktop"; + else + appname.sprintf("kdesktop-screen-%d", screen_number); + + client->send(appname, "KBackgroundIface", "configure()", ""); +} + +void KBackground::defaults() +{ + m_base->defaults(); +} + +#include "main.moc" diff --git a/kcontrol/background/main.h b/kcontrol/background/main.h new file mode 100644 index 000000000..a220b57b6 --- /dev/null +++ b/kcontrol/background/main.h @@ -0,0 +1,40 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kcmdisplay. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#ifndef __Bgnd_h_Included__ +#define __Bgnd_h_Included__ + +#include + +class KConfig; +class BGDialog; + +/** + * The Desktop/Background tab in kcontrol. + */ +class KBackground: public KCModule +{ + Q_OBJECT + +public: + KBackground(QWidget *parent, const char *name, const QStringList &); + ~KBackground(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +private: + BGDialog *m_base; + KConfig *m_pConfig; +}; + + +#endif // __Bgnd_h_Included__ diff --git a/kcontrol/background/pics/Makefile.am b/kcontrol/background/pics/Makefile.am new file mode 100644 index 000000000..d639379d0 --- /dev/null +++ b/kcontrol/background/pics/Makefile.am @@ -0,0 +1,5 @@ +pics_DATA = monitor.png +picsdir = $(kde_datadir)/kcontrol/pics + +EXTRA_DIST = $(pics_DATA) + diff --git a/kcontrol/background/pics/monitor.png b/kcontrol/background/pics/monitor.png new file mode 100644 index 000000000..ecd86b9e4 Binary files /dev/null and b/kcontrol/background/pics/monitor.png differ diff --git a/kcontrol/bell/Makefile.am b/kcontrol/bell/Makefile.am new file mode 100644 index 000000000..3c3d94181 --- /dev/null +++ b/kcontrol/bell/Makefile.am @@ -0,0 +1,15 @@ +kde_module_LTLIBRARIES = kcm_bell.la + +kcm_bell_la_SOURCES = bell.cpp + +kcm_bell_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_bell_la_LIBADD = -lkdeui + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = bell.moc + +messages: + $(XGETTEXT) $(kcm_bell_la_SOURCES) -o $(podir)/kcmbell.pot + +xdg_apps_DATA = bell.desktop diff --git a/kcontrol/bell/bell.cpp b/kcontrol/bell/bell.cpp new file mode 100644 index 000000000..707e6c151 --- /dev/null +++ b/kcontrol/bell/bell.cpp @@ -0,0 +1,256 @@ +/* + Copyright (c) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) + 1998 Bernd Wuebben + 2000 Matthias Elter + 2001 Carsten PFeiffer + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "bell.h" +#include "bell.moc" + +#include + +extern "C" +{ + KDE_EXPORT KCModule *create_bell(QWidget *parent, const char *) + { + return new KBellConfig(parent, "kcmbell"); + } + + KDE_EXPORT void init_bell() + { + XKeyboardState kbd; + XKeyboardControl kbdc; + + XGetKeyboardControl(kapp->getDisplay(), &kbd); + + KConfig config("kcmbellrc", true, false); + config.setGroup("General"); + + kbdc.bell_percent = config.readNumEntry("Volume", kbd.bell_percent); + kbdc.bell_pitch = config.readNumEntry("Pitch", kbd.bell_pitch); + kbdc.bell_duration = config.readNumEntry("Duration", kbd.bell_duration); + XChangeKeyboardControl(kapp->getDisplay(), + KBBellPercent | KBBellPitch | KBBellDuration, + &kbdc); + } +} + +KBellConfig::KBellConfig(QWidget *parent, const char *name): + KCModule(parent, name) +{ + QBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + int row = 0; + QGroupBox *box = new QGroupBox( i18n("Bell Settings"), this ); + box->setColumnLayout( 0, Qt::Horizontal ); + layout->addWidget(box); + layout->addStretch(); + QGridLayout *grid = new QGridLayout(box->layout(), KDialog::spacingHint()); + grid->setColStretch(0, 0); + grid->setColStretch(1, 1); + grid->addColSpacing(0, 30); + + m_useBell = new QCheckBox( i18n("&Use system bell instead of system notification" ), box ); + QWhatsThis::add(m_useBell, i18n("You can use the standard system bell (PC speaker) or a " + "more sophisticated system notification, see the " + "\"System Notifications\" control module for the " + "\"Something Special Happened in the Program\" event.")); + connect(m_useBell, SIGNAL( toggled( bool )), SLOT( useBell( bool ))); + row++; + grid->addMultiCellWidget(m_useBell, row, row, 0, 1); + + setQuickHelp( i18n("

System Bell

Here you can customize the sound of the standard system bell," + " i.e. the \"beep\" you always hear when there is something wrong. Note that you can further" + " customize this sound using the \"Accessibility\" control module; for example, you can choose" + " a sound file to be played instead of the standard bell.")); + + m_volume = new KIntNumInput(50, box); + m_volume->setLabel(i18n("&Volume:")); + m_volume->setRange(0, 100, 5); + m_volume->setSuffix("%"); + m_volume->setSteps(5,25); + grid->addWidget(m_volume, ++row, 1); + QWhatsThis::add( m_volume, i18n("Here you can customize the volume of the system bell. For further" + " customization of the bell, see the \"Accessibility\" control module.") ); + + m_pitch = new KIntNumInput(m_volume, 800, box); + m_pitch->setLabel(i18n("&Pitch:")); + m_pitch->setRange(20, 2000, 20); + m_pitch->setSuffix(i18n(" Hz")); + m_pitch->setSteps(40,200); + grid->addWidget(m_pitch, ++row, 1); + QWhatsThis::add( m_pitch, i18n("Here you can customize the pitch of the system bell. For further" + " customization of the bell, see the \"Accessibility\" control module.") ); + + m_duration = new KIntNumInput(m_pitch, 100, box); + m_duration->setLabel(i18n("&Duration:")); + m_duration->setRange(1, 1000, 50); + m_duration->setSuffix(i18n(" msec")); + m_duration->setSteps(20,100); + grid->addWidget(m_duration, ++row, 1); + QWhatsThis::add( m_duration, i18n("Here you can customize the duration of the system bell. For further" + " customization of the bell, see the \"Accessibility\" control module.") ); + + QBoxLayout *boxLayout = new QHBoxLayout(); + m_testButton = new QPushButton(i18n("&Test"), box, "test"); + boxLayout->addWidget(m_testButton, 0, AlignRight); + grid->addLayout( boxLayout, ++row, 1 ); + connect( m_testButton, SIGNAL(clicked()), SLOT(ringBell())); + QWhatsThis::add( m_testButton, i18n("Click \"Test\" to hear how the system bell will sound using your changed settings.") ); + + // watch for changes + connect(m_volume, SIGNAL(valueChanged(int)), SLOT(changed())); + connect(m_pitch, SIGNAL(valueChanged(int)), SLOT(changed())); + connect(m_duration, SIGNAL(valueChanged(int)), SLOT(changed())); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmbell"), I18N_NOOP("KDE Bell Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1997 - 2001 Christian Czezatke, Matthias Elter")); + + about->addAuthor("Christian Czezatke", I18N_NOOP("Original author"), "e9025461@student.tuwien.ac.at"); + about->addAuthor("Bernd Wuebben", 0, "wuebben@kde.org"); + about->addAuthor("Matthias Elter", I18N_NOOP("Current maintainer"), "elter@kde.org"); + about->addAuthor("Carsten Pfeiffer", 0, "pfeiffer@kde.org"); + setAboutData(about); + + load(); +} + +void KBellConfig::load() +{ + load( false ); +} + +void KBellConfig::load( bool useDefaults ) +{ + XKeyboardState kbd; + XGetKeyboardControl(kapp->getDisplay(), &kbd); + + m_volume->setValue(kbd.bell_percent); + m_pitch->setValue(kbd.bell_pitch); + m_duration->setValue(kbd.bell_duration); + + KConfig cfg("kdeglobals", false, false); + cfg.setReadDefaults( useDefaults ); + cfg.setGroup("General"); + m_useBell->setChecked(cfg.readBoolEntry("UseSystemBell", false)); + useBell(m_useBell->isChecked()); + emit changed( useDefaults ); +} + +void KBellConfig::save() +{ + XKeyboardControl kbd; + + int bellVolume = m_volume->value(); + int bellPitch = m_pitch->value(); + int bellDuration = m_duration->value(); + + kbd.bell_percent = bellVolume; + kbd.bell_pitch = bellPitch; + kbd.bell_duration = bellDuration; + XChangeKeyboardControl(kapp->getDisplay(), + KBBellPercent | KBBellPitch | KBBellDuration, + &kbd); + + KConfig config("kcmbellrc", false, false); + config.setGroup("General"); + config.writeEntry("Volume",bellVolume); + config.writeEntry("Pitch",bellPitch); + config.writeEntry("Duration",bellDuration); + + config.sync(); + + KConfig cfg("kdeglobals", false, false); + cfg.setGroup("General"); + cfg.writeEntry("UseSystemBell", m_useBell->isChecked()); + cfg.sync(); + + if (!m_useBell->isChecked()) + { + KConfig config("kaccessrc", false); + + config.setGroup("Bell"); + config.writeEntry("SystemBell", false); + config.writeEntry("ArtsBell", false); + config.writeEntry("VisibleBell", false); + } +} + +void KBellConfig::ringBell() +{ + if (!m_useBell->isChecked()) { + KNotifyClient::beep(); + return; + } + + // store the old state + XKeyboardState old_state; + XGetKeyboardControl(kapp->getDisplay(), &old_state); + + // switch to the test state + XKeyboardControl kbd; + kbd.bell_percent = m_volume->value(); + kbd.bell_pitch = m_pitch->value(); + if (m_volume->value() > 0) + kbd.bell_duration = m_duration->value(); + else + kbd.bell_duration = 0; + XChangeKeyboardControl(kapp->getDisplay(), + KBBellPercent | KBBellPitch | KBBellDuration, + &kbd); + // ring bell + XBell(kapp->getDisplay(),0); + + // restore old state + kbd.bell_percent = old_state.bell_percent; + kbd.bell_pitch = old_state.bell_pitch; + kbd.bell_duration = old_state.bell_duration; + XChangeKeyboardControl(kapp->getDisplay(), + KBBellPercent | KBBellPitch | KBBellDuration, + &kbd); +} + +void KBellConfig::defaults() +{ + load( true ); +} + +void KBellConfig::useBell( bool on ) +{ + m_volume->setEnabled( on ); + m_pitch->setEnabled( on ); + m_duration->setEnabled( on ); + m_testButton->setEnabled( on ); + changed(); +} diff --git a/kcontrol/bell/bell.desktop b/kcontrol/bell/bell.desktop new file mode 100644 index 000000000..5fbc7193e --- /dev/null +++ b/kcontrol/bell/bell.desktop @@ -0,0 +1,251 @@ +[Desktop Entry] +Exec=kcmshell bell +Icon=bell +Type=Application +DocPath=kcontrol/bell/index.html +Categories=Qt;KDE;X-KDE-settings-sound; + + +X-KDE-Library=bell +X-KDE-Init=bell +X-KDE-ParentApp=kcontrol + +Name=System Bell +Name[af]=Stelsel Klok +Name[ar]=جرس النظام +Name[az]=Sistem Zınqırovu +Name[be]=Сістэмны званок +Name[bg]=Системен звук +Name[bn]=সিস্টেম ঘণ্টা +Name[br]=Kloc'h ar reizhiad +Name[bs]=Sistemsko zvono +Name[ca]=Timbre del sistema +Name[cs]=Systémový zvonek +Name[csb]=Systemowi brzãczk +Name[cy]=Cloch Cysawd +Name[da]=Systemklokke +Name[de]=Signalton +Name[el]=Μεγαφωνάκι συστήματος +Name[eo]=Sistempepo +Name[es]=Timbre del sistema +Name[et]=Süsteemne signaal +Name[eu]=Sistemaren ezkila +Name[fa]=زنگ سیستم +Name[fi]=Järjestelmän varoitus +Name[fo]=Kervisklokka +Name[fr]=Cloche du système +Name[fy]=Systeembel +Name[ga]=Clog an Chórais +Name[gl]=Badalada do Sistema +Name[he]=פעמון המערכת +Name[hi]=तंत्र घंटी +Name[hr]=Sistemsko zvono +Name[hu]=Rendszercsengő +Name[id]=Bel Sistem +Name[is]=Kerfisbjalla +Name[it]=Campanella di sistema +Name[ja]=システムベル +Name[ka]=სისტემის ხმოვანი სიგნალი +Name[kk]=Жүйелік қоңырау +Name[km]=កណ្ដឹង​ប្រព័ន្ធ +Name[ko]=시스템 종소리 +Name[lo]=ກະດິງລະບົບ +Name[lt]=Sistemos skambutis +Name[lv]=Sistēmas Zvans +Name[mk]=Системско ѕвонче +Name[mn]=Сигналийн чимээ +Name[ms]=Loceng Sistem +Name[mt]=Spijker tas-sistema +Name[nb]=Systemlyd +Name[nds]=Systeempingel +Name[ne]=प्रणाली बेल +Name[nl]=Systeembel +Name[nn]=Systemlyd +Name[nso]=Bell ya System +Name[oc]=Timbre dèu sistemo +Name[pa]=ਸਿਸਟਮ ਘੰਟੀ +Name[pl]=Brzęczyk systemowy +Name[pt]=Campainha do Sistema +Name[pt_BR]=Campainha do sistema +Name[ro]=Sunet de difuzor +Name[ru]=Системный звуковой сигнал +Name[rw]=Inzogera Sisitemu +Name[se]=Vuogádatjietna +Name[sk]=Zvonček +Name[sl]=Sistemski zvonec +Name[sr]=Системско звоно +Name[sr@Latn]=Sistemsko zvono +Name[ss]=Umshini Bell +Name[sv]=Systemsummer +Name[ta]=அமைப்பு மணி +Name[te]=వ్యవస్థ గంట +Name[tg]=Занги система +Name[th]=ออดระบบ +Name[tr]=Sistem Zili +Name[tt]=Sistem Zile +Name[uk]=Системний дзвінок +Name[uz]=Tizim tovush signali +Name[uz@cyrillic]=Тизим товуш сигнали +Name[ven]=Bele ya sisitemu +Name[vi]=Chuông Hệ thống +Name[wa]=Xhîlete do sistinme +Name[xh]=Indlela yokusebenza Yentsimbi +Name[zh_CN]=系统铃声 +Name[zh_TW]=系統鈴聲 +Name[zu]=Insimbi yesistimu + +Comment=System Bell Configuration +Comment[af]=Stelsel Klok Opstelling +Comment[ar]=اعداد جرس النظام +Comment[az]=Sistem Səsləri Quraşdırması +Comment[be]=Настаўленне сістэмнага званка +Comment[bg]=Настройване звуковия сигнал на системата +Comment[bn]=সিস্টেম ঘণ্টা কনফিগারেশন +Comment[br]=Kefluniañ kloc'h ar reizhiad +Comment[bs]=Postavke za sistemsko zvono +Comment[ca]=Configuració del timbre del sistema +Comment[cs]=Nastavení systémového zvonku +Comment[csb]=Kònfigùracëjô systemòwégò brzãczka +Comment[cy]=Gosodiadau'r Cloch Cysawd +Comment[da]=Systemklokkeindstilling +Comment[de]=Einstellungen zum Signalton +Comment[el]=Ρυθμίσεις για το μεγαφωνάκι του συστήματός σας +Comment[eo]=Agordo de la sistempepo +Comment[es]=Configuración del timbre del sistema +Comment[et]=Süsteemse signaali seadistamine +Comment[eu]=Sistemaren ezkilaren konfigurazioa +Comment[fa]=پیکربندی زنگ سیستم +Comment[fi]=Järjestelmän varoitusäänen asetus +Comment[fo]=Uppseting av kervisklokka +Comment[fr]=Configuration de la cloche du système +Comment[fy]=Systeemlûden ynstelle +Comment[ga]=Cumraíocht Chloig an Chórais +Comment[gl]=Configuración da Badalada do Sistema +Comment[he]=שינוי הגדרות פעמון המערכת +Comment[hi]=तंत्र घंटी कॉन्फ़िगरेशन +Comment[hr]=Konfiguracija sistemskog zvona +Comment[hu]=A rendszercsengő beállításai +Comment[id]=Konfigurasi Sistem Bel +Comment[is]=Stillingar kerfishljóða +Comment[it]=Configurazione campanella di sistema +Comment[ja]=システムベルの設定 +Comment[ka]=სისტემის ხმოვანი სიგნალის კონფიგურაცია +Comment[kk]=Жүйелік қоңырауды баптау +Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​កណ្ដឹង​ប្រព័ន្ធ +Comment[ko]=시스템 종소리 설정 +Comment[lo]=ປັບແຕ່ງກະດິງລະບົບ +Comment[lt]=Sistemos skambučio derinimas +Comment[lv]=Sistēmas Zvana Konfigurācija +Comment[mk]=Конфигурација на системското ѕвонче +Comment[mn]=Сигналийн чимээ тохируулах +Comment[ms]=Konfigurasi Loceng Sistem +Comment[mt]=Konfigurazzjoni tal-ispijker tas-sistema +Comment[nb]=Systemlydoppsett +Comment[nds]=Systeempingel instellen +Comment[ne]=प्रणाली बेल कन्फिगरेसन +Comment[nl]=Systeemgeluiden instellen +Comment[nn]=Systemlydoppsett +Comment[nso]=Peakanyo ya Bell ya System +Comment[oc]=Configuracion dèu timbre dèu sistemo +Comment[pa]=ਸਿਸਟਮ ਘੰਟੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja brzęczka systemowego +Comment[pt]=Configuração da Campainha do Sistema +Comment[pt_BR]=Configuração da Campainha do Sistema +Comment[ro]=Configurează sunetul de difuzor +Comment[ru]=Настройка системного звукового сигнала +Comment[rw]=Iboneza ry'Inzogera Sisitemu +Comment[se]=Vuogádatjietnaheivehusat +Comment[sk]=Nastavenie zvončeka +Comment[sl]=Nastavitve sistemskega zvonca +Comment[sr]=Подешавање системског звона +Comment[sr@Latn]=Podešavanje sistemskog zvona +Comment[ss]=Kuhleleka kwebheli yemshini +Comment[sv]=Anpassa systemets summer +Comment[ta]=மணி,ஒலி,சத்தம்,உரப்பு,சுருதி,இடைவெளி +Comment[te]=వ్యవస్థ గంట అమరిక +Comment[tg]=Танзимоти занги системаы +Comment[th]=ปรับแต่งออดระบบ +Comment[tr]=Sistem Sesleri Yapılandırması +Comment[tt]=Sistem Zil Caylawı +Comment[uk]=Налаштування системного дзвінка +Comment[uz]=Tizim tovush signalini moslash +Comment[uz@cyrillic]=Тизим товуш сигналини мослаш +Comment[ven]=Nzudzanyo ya sisitemu ya Bele +Comment[vi]=Cấu hình Chuông Hệ thống +Comment[wa]=Apontiaedje del xhîlete do sistinme +Comment[xh]=Uqwalaselo Lwendlela Yentsimbi +Comment[zh_CN]=系统铃声配置 +Comment[zh_TW]=系統鈴聲組態 +Comment[zu]=Inhlanganiselo Yensimbi Yesistimu + +Keywords=Bell,Audio,Sound,Volume,Pitch,Duration +Keywords[az]=çən,Səs,Səs,Səs Qurğusu,Addım,Müddət +Keywords[be]=Званок,аўдыё,гук,гучнасць,Bell,Audio,Sound,Volume,Pitch,Duration +Keywords[bg]=звук, системен, говорител, сила, Bell, Audio, Sound, Volume, Pitch, Duration +Keywords[ca]=Timbre,Àudio,So,Volum,To,Durada +Keywords[cs]=Systémový zvonek,Audio,Zvuk,Hlasitost,Trvání +Keywords[csb]=brzãczk,audio,zwãk,głosnosc,tonacëjô,dérowanié +Keywords[cy]=Cloch,Awdio,S?n,Sain,Gogwydd,Hyd +Keywords[da]=Klokke,Audio,Lyd,Lydstyrke,Tonehøjde,Varighed +Keywords[de]=Signalton,Systemton,Klänge,Audio,Sound,Dauer,Lautstärke,Höhen +Keywords[el]=Μεγαφωνάκι,Audio,Ήχος,Ένταση,Τονισμός,Διάρκεια +Keywords[eo]=pepo,sonoro,sono,aŭdio,alteco,daŭro +Keywords[es]=Timbre,Audio,Sonido,Volumen,Tono,Duración +Keywords[et]=signaal,audio,heli,helitugevus,helikõrgus,kestvus +Keywords[eu]=Ezkila,Audioa,Soinua,Bolumena,Pitch-a,Iraupena +Keywords[fa]=زنگ، صوتی، صوت، حجم صدا، زیروبمی صدا، دوام +Keywords[fi]=Äänet,Piippaus,Ääni,Äänenvoimakkuus,Korkeus,Kesto +Keywords[fr]=cloche,audio,son,volume,durée,modulation,bip +Keywords[fy]=bel,audio,lûd,folume,singalering,lûd,duer,toan,toanen,toanhichte,systeemlûden,systeembel +Keywords[ga]=Clog,Fuaim,Airde,Fad +Keywords[gl]=Badalada,Audio,Son,Volume,Pitch,Duración +Keywords[he]=פעמון,שמע,צליל,עצמה,גובה,משך, Bell,Audio,Sound,Volume,Pitch,Duration +Keywords[hi]=घंटी,ऑडियो,ध्वनि,आवाज़ निर्धारक,पिच,अवधि +Keywords[hr]=Bell,Audio,Sound,Volume,Pitch,Duration,Zvono,Zvuk,Zvuci sustava,Sistemsko zvono,Glasnoća,Razdoblje +Keywords[hu]=csengő,audió,hang,hangerő,hangmagasság,időtartam +Keywords[id]=Bel,Audio,Suara,Volume,Pitch,Durasi +Keywords[is]=Kerfishljóð,hljóð,bjalla,styrkur,hljóðstyrkur,tónn,lengd,tónlengd +Keywords[it]=campanella,audio,suono,volume,tono,durata +Keywords[ja]=ベル,オーディオ,サウンド,音量,ピッチ,持続時間 +Keywords[ka]=ზარი, აუდიო, ხმა, ხმა, მიწოდება, ხანგრძლივობა +Keywords[km]=កណ្ដឹង,សោត,សំឡេង,កម្ពស់​សំឡេង,ថិរវេលា +Keywords[lo]=ກະດິງ,ລະບົບສງງ,ຄວາມດັງຂອງສງງ,ພິດສງງ, ດູເຣເຊິນ +Keywords[lt]=Bell,skambutis,Audio,Sound,garsas,Volume,garsumas,Pitch,aukštis,Duration,trukmė +Keywords[lv]=Zvans,Audio,Skaņa,Līmenis,Pīķis,Ilgums +Keywords[mk]=Bell,Audio,Sound,Volume,Pitch,Duration,Ѕвонче,Аудио,Звук,Гласност,Амплитуда,Траење +Keywords[mn]=Сигналийн чимээ,Системын чимээ,Чимээ,Дуу,Дууны чанга,Үргэлжилэл,Өндөр +Keywords[ms]=Loceng,Audio,Bunyi,Volum,Pic,Tempoh +Keywords[nb]=signal,audio,lyd,lydstyrke,volum,tone,lengde +Keywords[nds]=Pingel,Audio,Klang,Kläng,Luutstärk,Pitch,Duer +Keywords[ne]=बेल, अडियो, ध्वनि, भोल्युम, पिच, अन्तराल +Keywords[nl]=bel,audio,sound,volume,signalering,geluid,duur,toon,tonen,toonhoogte,systeemgeluiden,systeembel +Keywords[nn]=signal,audio,lyd,lydstyrke,volum,tone,lengd +Keywords[nso]=Bell,Audio,Modumo,Volume,Pitch,Nako +Keywords[pa]=Bell,Audio,Sound,Volume,Pitch,Duration, ਘੰਟੀ, ਆਡੀਓ, ਸਾਊਡ +Keywords[pl]=Brzęczyk,Audio,Dźwięk,Głośność,Tonacja,Trwanie +Keywords[pt]=Campainha,Áudio,Som,Volume,Frequência,Duração +Keywords[pt_BR]=Campainha,Áudio,Som,Volume,Tom,Duração +Keywords[ro]=difuzor,audio,sunet,volum,frecvență,durată +Keywords[rw]=Inzogera,Inyumvo,Ijwi,Agahindurajwi,Iyatura,Igihebimara +Keywords[se]=signála,audio,jietna,voluma,nuohtta,guhkkodat +Keywords[sk]=Zvonček,Audio,Zvuk,Hlasitosť,Výška,Trvanie +Keywords[sl]=zvonec,avdio,zvok,glasnost,višina,trajanje +Keywords[sr]=Звоно,Аудио,Звук,Јачина,Трајање +Keywords[sr@Latn]=Zvono,Audio,Zvuk,Jačina,Trajanje +Keywords[ss]=Ibheli,I-audio,Umsindvo,Ivolumu,I-pitch,Sikhatsi +Keywords[sv]=Summer,Ljud,Volym,Tonhöjd,Varaktighet +Keywords[ta]=மணி,ஒலி அமைப்பு,ஒலி,ஒலி,இடம்,நேர அளவு +Keywords[tg]=Bell,Audio,Sound,Volume,Pitch,Duration,Занг,Аудио,Садо +Keywords[th]=ออด,ระบบเสียง,เสียง,ความดังเสียง,พิทช์เสียง,ดูเรชัน +Keywords[tr]=zil,Ses,Ses,Ses Ayarı,Adım,Süre +Keywords[uk]=аудіо,гучність,висота,тривалість,гудок,звук +Keywords[uz]=Tovush signali,Audio,Tovush,Tovush balandligi,Pitch,Davom etishi +Keywords[uz@cyrillic]=Товуш сигнали,Аудио,Товуш,Товуш баландлиги,Pitch,Давом этиши +Keywords[ven]=Bele,Zwo u pfala,Mubvumo,Volomu,Fhufhela,Tshikhala +Keywords[vi]=Chuông,Âm nhạc,Âm thanh,Âm lượng,Âm sắc,Thời lượng +Keywords[wa]=Xhilete,Audio,Son,Volume,ton,hôteu,longueur +Keywords[xh]=Intsimbi,Evakalayo,iSandi,Umqulu,Uniko lobude obufunekayo,Ixesha ezalithatha +Keywords[zh_CN]=Bell,Audio,Sound,Volume,Pitch,Duration,响铃,音频,音量,音调,持续时间 +Keywords[zh_TW]=Bell,Audio,Sound,Volume,Pitch,Duration,響鈴,聲音,音量,音調,持續時間 +Keywords[zu]=Insimbi,Okuzwakalayo,Usimdo,Izinga lomsindo,Umnswininizo,Ubude besikhathi + diff --git a/kcontrol/bell/bell.h b/kcontrol/bell/bell.h new file mode 100644 index 000000000..ceaf875df --- /dev/null +++ b/kcontrol/bell/bell.h @@ -0,0 +1,54 @@ +/* + Copyright (c) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) + 1998 Bernd Wuebben + 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef __bell_h__ +#define __bell_h__ + +#include "kcmodule.h" + +class QCheckBox; +class KIntNumInput; +class QPushButton; + +class KBellConfig : public KCModule +{ + Q_OBJECT + + public: + KBellConfig(QWidget *parent, const char *name); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + + protected slots: + void ringBell(); + void useBell( bool ); + + private: + QPushButton *m_testButton; + KIntNumInput *m_volume; + KIntNumInput *m_pitch; + KIntNumInput *m_duration; + QCheckBox *m_useBell; +}; + +#endif diff --git a/kcontrol/clock/Makefile.am b/kcontrol/clock/Makefile.am new file mode 100644 index 000000000..0348e5878 --- /dev/null +++ b/kcontrol/clock/Makefile.am @@ -0,0 +1,15 @@ +kde_module_LTLIBRARIES = kcm_clock.la + +kcm_clock_la_SOURCES = dtime.cpp tzone.cpp main.cpp + +kcm_clock_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_clock_la_LIBADD = $(LIB_KIO) + +AM_CPPFLAGS = $(all_includes) + +METASOURCES = AUTO + +messages: + $(XGETTEXT) $(kcm_clock_la_SOURCES) -o $(podir)/kcmkclock.pot + +xdg_apps_DATA = clock.desktop diff --git a/kcontrol/clock/clock.desktop b/kcontrol/clock/clock.desktop new file mode 100644 index 000000000..1c3fc755a --- /dev/null +++ b/kcontrol/clock/clock.desktop @@ -0,0 +1,250 @@ +[Desktop Entry] +Type=Application +Exec=kcmshell kde-clock.desktop +Icon=date +DocPath=kcontrol/clock/index.html + + +X-KDE-Library=clock +X-KDE-RootOnly=true +X-KDE-SubstituteUID=true +X-KDE-ParentApp=kcontrol + +Name=Date & Time +Name[af]=Datum & Tyd +Name[ar]=التاريخ و الوقت +Name[az]=Tarix və Saat +Name[be]=Дата і час +Name[bg]=Дата и час +Name[bn]=তারিখ এবং সময় +Name[br]=Deiziad hag eur +Name[bs]=Datum i vrijeme +Name[ca]=Dia i hora +Name[cs]=Datum a čas +Name[csb]=Datum ë czas +Name[cy]=Dyddiad ac Amser +Name[da]=Dato og tid +Name[de]=Datum & Zeit +Name[el]=Ημερομηνία & Ώρα +Name[eo]=Dato kaj Tempo +Name[es]=Fecha y hora +Name[et]=Kuupäev ja kellaaeg +Name[eu]=Data eta ordua +Name[fa]=تاریخ و زمان +Name[fi]=Päivämäärä ja aika +Name[fo]=Dato og tíð +Name[fr]=Date et heure +Name[fy]=Datum en Tiid +Name[ga]=Dáta agus Am +Name[gl]=Data e Hora +Name[he]=תאריך ושעה +Name[hi]=तिथि व समय +Name[hr]=Datum i vrijeme +Name[hu]=Dátum és idő +Name[id]=Tanggal & Waktu +Name[is]=Dagssetning og tími +Name[it]=Data e ora +Name[ja]=日付と時間 +Name[ka]=თარიღი და დრო +Name[kk]=Күн мен уақыт +Name[km]=កាលបរិច្ឆេទ & ពេលវេលា +Name[ko]=날짜와 시간 +Name[lo]=ວັນແລະເວລາ +Name[lt]=Data ir laikas +Name[lv]=Datums un Laiks +Name[mk]=Датум и време +Name[mn]=Огноо & Цаг +Name[ms]=Tarikh & Masa +Name[mt]=Data u Ħin +Name[nb]=Dato og klokkeslett +Name[nds]=Datum & Tiet +Name[ne]=मिति र समय +Name[nl]=Datum en Tijd +Name[nn]=Dato og Tid +Name[nso]=Tsatsikgwedi & Nako +Name[oc]=Dia e ora +Name[pa]=ਮਿਤੀ ਅਤੇ ਸਮਾਂ +Name[pl]=Data i czas +Name[pt]=Data e Hora +Name[pt_BR]=Data & Hora +Name[ro]=Data și timpul +Name[ru]=Дата и время +Name[rw]=Itariki & Igihe +Name[se]=Dáhton ja áigi +Name[sk]=Dátum a čas +Name[sl]=Datum in čas +Name[sr]=Датум и време +Name[sr@Latn]=Datum i vreme +Name[ss]=Lisuku & sikhatsi +Name[sv]=Datum och tid +Name[ta]=தேதி & நேரம் +Name[te]=తేది & సమయం +Name[tg]=Таърих ва вақт +Name[th]=วันและเวลา +Name[tr]=Tarih ve Saat +Name[tt]=Waqıt & Zaman +Name[uk]=Дата і час +Name[uz]=Sana va vaqt +Name[uz@cyrillic]=Сана ва вақт +Name[ven]=Datumu & Tshifhinga +Name[vi]=Ngày & Giờ +Name[wa]=Date et eure +Name[xh]=Umhla & Ixesha +Name[zh_CN]=日期和时间 +Name[zh_TW]=日期和時間 +Name[zu]=Usuku & Isikhathi + +Comment=Date and time settings +Comment[af]=Datum en tyd instellings +Comment[ar]=تعيينات التاريخ و الوقت +Comment[az]=Tarix və saat qurğuları +Comment[be]=Настаўленне даты і часу +Comment[bg]=Настройване на датата и часа +Comment[bn]=তারিখ এবং সময় সেটিংস +Comment[br]=Kefluniañ an deiziad hag an eur +Comment[bs]=Podesite datum i vrijeme +Comment[ca]=Arranjament del dia i l'hora +Comment[cs]=Nastavení data a času +Comment[csb]=Ùstôw datuma ë czasu +Comment[cy]=Gosodiadau dyddiad ac amser +Comment[da]=Dato- og tidsindstillinger +Comment[de]=Einstellungen für Datum und Zeit +Comment[el]=Ρυθμίσεις ημερομηνίας και ώρας +Comment[eo]=Agordo de dato kaj tempo +Comment[es]=Preferencias sobre la fecha y hora +Comment[et]=Kuupäeva ja kellaaja seadistused +Comment[eu]=Data eta orduaren konfigurazioa +Comment[fa]=تنظیمات تاریخ و زمان +Comment[fi]=Päiväyksen ja ajan asetukset +Comment[fo]=Seta urið +Comment[fr]=Configuration de la date et de l'heure +Comment[fy]=Ynstelle fan datum en tiid +Comment[ga]=Socruithe dáta/ama +Comment[gl]=Configuración da data e a hora +Comment[he]=שינוי הגדרות התאריך והשעה +Comment[hi]=तारीख़ तथा समय का विन्यास +Comment[hr]=Postavke datuma i vremena +Comment[hu]=A dátum és az idő beállításai +Comment[id]=Seting tanggal dan waktu +Comment[is]=Stillingar dagssetningar og klukku +Comment[it]=Impostazione della data e dell'ora +Comment[ja]=日付と時間の設定 +Comment[ka]=თარიღისა და დროის კონფიგურაცია +Comment[kk]=Күн мен уақытты орнату +Comment[km]=ការ​កំណត់​កាលបរិច្ឆេទ និង​ពេលវេលា +Comment[ko]=날짜와 시간 설정 +Comment[lo]=ຕັ້ງຄ່າວັນແລະເວລາ +Comment[lt]=Datos ir laiko parametrai +Comment[lv]=Datuma un laika parametri +Comment[mk]=Поставувања на датум и време +Comment[mn]=Огноо ба цаг тохируулах +Comment[ms]=Seting tarikh & Masa +Comment[mt]=Konfigurazzjoni tad-data u l-ħin +Comment[nb]=Innstilling av dato og klokkeslett +Comment[nds]=Instellen vun Datum un Tiet +Comment[ne]=मिति र समय सेटिङ +Comment[nl]=Instellen van datum en tijd +Comment[nn]=Innstilling av dato og klokkeslett +Comment[nso]=Dipeakanyo tsa tsatsikgwedi le nako +Comment[oc]=Configuracion dèu dia e l'ora +Comment[pa]=ਮਿਤੀ ਅਤੇ ਸਮਾਂ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia daty i czasu +Comment[pt]=Configuração da data e hora +Comment[pt_BR]=Configurações de data e hora +Comment[ro]=Configurează data și ora sistemului +Comment[ru]=Настройка даты и времени +Comment[rw]=Amagenamiterere y'itariki n'igihe +Comment[se]=Dáhton- ja áigeheivehusat +Comment[sk]=Nastavenia dátumu a času +Comment[sl]=Nastavitve datuma in časa +Comment[sr]=Поставке за датум и време +Comment[sr@Latn]=Postavke za datum i vreme +Comment[ss]=Kuhleleka kwelilanga kanye nesikhatsi +Comment[sv]=Anpassa datum och tid +Comment[ta]=தேதி மற்றும் நேர அமைப்புகள் +Comment[te]=తేది మరయూ సమయం అమరికలు +Comment[tg]=Танзимоти таърих ва вақт +Comment[th]=ตั้งค่าวันและเวลา +Comment[tr]=Tarih ve saat ayarları +Comment[tt]=Waqıt-zaman caylaw +Comment[uk]=Налаштування дати і часу +Comment[uz]=Sana va vaqtning moslamalari +Comment[uz@cyrillic]=Сана ва вақтнинг мосламалари +Comment[ven]=Mavhekanyele a datumu na tshifhinga +Comment[vi]=Thiết lập ngày giờ +Comment[wa]=Apontiaedjes del date et l' eure +Comment[xh]=Izicwangciso zomhla kunye nexesha +Comment[zh_CN]=日期和时间设置 +Comment[zh_TW]=日期和時間設定值 +Comment[zu]=Izilungiso Zosuku kanye nesikhathi + +Keywords=clock,date,time,time zone +Keywords[af]=horlosie,date,time,time zone,datum,tyd,tyd sone +Keywords[ar]=الساعة,التاريخ,الوقت,المنطقة الزمنية +Keywords[az]=tarix,saat,saat zolağı,zaman zolağı, vaxt, vaxt zolağı +Keywords[be]=гадзіннік,дата,час,часавая зона,часавы пояс,clock,date,time,time zone +Keywords[bg]=дата, час, време, часови, пояс, clock, date, time, time zone +Keywords[br]=eurier,deiziad,amzer,takad-eur +Keywords[bs]=sat,datum,vrijeme,date,time,clock +Keywords[ca]=rellotge,data,hora,zona horària +Keywords[cs]=Datum,Čas,Časová zóna +Keywords[csb]=zédżer,datum,czas,czasowô cona +Keywords[cy]=cloc,dyddiad,amser,cylchfa amser +Keywords[da]=ur,dato,tid,tidszone +Keywords[de]=uhr,datum,zeit,zeitzone +Keywords[el]=ρολόι,ημερομηνία,ώρα,ζώνη ώρας +Keywords[eo]=horloĝo,dato,tempo,tempozono +Keywords[es]=reloj,fecha,hora,zona horaria +Keywords[et]=kell,kuupäev,kellaaeg,ajavöönd +Keywords[eu]=erlojua,data,ordua,ordu eremua +Keywords[fa]=ساعت، تاریخ، زمان، ناحیۀ زمان +Keywords[fi]=kello,päiväys,aika,aikavyöhyke +Keywords[fr]=horloge,date,heure,fuseau horaire +Keywords[fy]=datum,tiid,tiidszone,klok +Keywords[ga]=clog,dáta,am,crios ama +Keywords[gl]=data,reloxo,hora,zona horária +Keywords[he]=clock,date,time,time zoneשעון,תאריך,זמן,אזור זמן +Keywords[hi]=घड़ी,तारीख़,समय,समय क्षेत्र (टाइम ज़ोन) +Keywords[hr]=clock,date,time,time zone,datum,vrijeme,vremenska zona +Keywords[hu]=óra,dátum,idő,időzóna +Keywords[id]=jam,tanggal,waktu,zona waktu +Keywords[is]=dagssetning,klukka,tími +Keywords[it]=data,ora,fuso orario,orologio +Keywords[ja]=時刻,日付,時間,タイムゾーン +Keywords[ka]=საათი, თარიღი, დრო, დროიტი სარტყელი +Keywords[km]=នាឡិកា,កាលបរិច្ឆេទ,ពេលវេលា,តំបន់​ពេលវេលា +Keywords[lt]=laikrodis,data,laikas,laiko juosta +Keywords[lv]=pulkstenis,datums,laiks,laika zona +Keywords[mk]=часовник,датум,време,временска зона +Keywords[mn]=цаг,огноо,хугацаа,цагийн бүс +Keywords[ms]=jam,tarikh,masa,zon masa +Keywords[nb]=klokke,dato,tid,tidssone +Keywords[nds]=Klock,Datum,Tiet,Tietzone,Tietrebeet +Keywords[ne]=घडी, मिति, समय, टाइमजोन +Keywords[nl]=datum,tijd,tijdszone,klok +Keywords[nn]=klokke,dato,tid,tidssone +Keywords[pa]=clock,date,time,time zone,ਘੜੀ,ਸਮਾਂ,ਸਮਾਂ ਖੇਤਰ +Keywords[pl]=zegar, data, czas, strefa czasowa +Keywords[pt]=relógio,data,hora,fuso horário +Keywords[pt_BR]=relógio,data,hora,fuso horário +Keywords[ro]=ceas,dată,timp,ora,zona de timp +Keywords[rw]=Isaha,itariki,igihe,igihe fatizo +Keywords[se]=diibmu,dáhton,áigi,áigeavádat +Keywords[sk]=dátum,čas,časová zóna,hodiny +Keywords[sl]=datum,ura,čas,časovno območje,CET,SEČ +Keywords[sr]=date,time,time zone,датум,време,временска зона,датум,време,временска зона +Keywords[sr@Latn]=date,time,time zone,datum,vreme,vremenska zona,datum,vreme,vremenska zona +Keywords[sv]=klocka,datum,tid,tidszon +Keywords[ta]=கடிகாரம்,தேதி,நேரம்,நேர பகுதி +Keywords[tg]=соат,таърих,вақт,минтақаи вақт +Keywords[th]=นาฬิกา,วัน,เวลา,พื้นที่เวลา +Keywords[tr]=tarih,saat,saat dilimi,zaman,zaman dilimi +Keywords[uk]=дата,час,часовий пояс,годинник +Keywords[uz]=soat,sana,vaqt,vaqt zonasi +Keywords[uz@cyrillic]=соат,сана,вақт,вақт зонаси +Keywords[vi]=đồng hồ,ngày,giờ,múi giờ +Keywords[wa]=ôrlodje,date,eure,coisse d' eureye +Keywords[zh_CN]=clock,date,time,time zone,时钟,日期,时间,时区 +Keywords[zh_TW]=clock,日期,時間,時區 + +Categories=Qt;KDE;X-KDE-settings-system; diff --git a/kcontrol/clock/dtime.cpp b/kcontrol/clock/dtime.cpp new file mode 100644 index 000000000..ba8330c7a --- /dev/null +++ b/kcontrol/clock/dtime.cpp @@ -0,0 +1,449 @@ +/* + * dtime.cpp + * + * Copyright (C) 1998 Luca Montecchiani + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "dtime.h" +#include "dtime.moc" + +HMSTimeWidget::HMSTimeWidget(QWidget *parent, const char *name) : + KIntSpinBox(parent, name) +{ +} + +QString HMSTimeWidget::mapValueToText(int value) +{ + QString s = QString::number(value); + if( value < 10 ) { + s = "0" + s; + } + return s; +} + +Dtime::Dtime(QWidget * parent, const char *name) + : QWidget(parent, name) +{ + // ************************************************************* + // Start Dialog + // ************************************************************* + + // Time Server + + privateLayoutWidget = new QWidget( this, "layout1" ); + QHBoxLayout *layout1 = new QHBoxLayout( privateLayoutWidget, 0, 0, "ntplayout"); + + setDateTimeAuto = new QCheckBox( privateLayoutWidget, "setDateTimeAuto" ); + setDateTimeAuto->setText(i18n("Set date and time &automatically:")); + connect(setDateTimeAuto, SIGNAL(toggled(bool)), this, SLOT(serverTimeCheck())); + connect(setDateTimeAuto, SIGNAL(toggled(bool)), SLOT(configChanged())); + layout1->addWidget( setDateTimeAuto ); + + timeServerList = new QComboBox( false, privateLayoutWidget, "timeServerList" ); + connect(timeServerList, SIGNAL(activated(int)), SLOT(configChanged())); + connect(timeServerList, SIGNAL(textChanged(const QString &)), SLOT(configChanged())); + connect(setDateTimeAuto, SIGNAL(toggled(bool)), timeServerList, SLOT(setEnabled(bool))); + timeServerList->setEnabled(false); + timeServerList->setEditable(true); + layout1->addWidget( timeServerList ); + findNTPutility(); + + // Date box + QGroupBox* dateBox = new QGroupBox( this, "dateBox" ); + + QVBoxLayout *l1 = new QVBoxLayout( dateBox, KDialog::spacingHint() ); + + cal = new KDatePicker( dateBox ); + cal->setMinimumSize(cal->sizeHint()); + l1->addWidget( cal ); + QWhatsThis::add( cal, i18n("Here you can change the system date's day of the month, month and year.") ); + + // Time frame + QGroupBox* timeBox = new QGroupBox( this, "timeBox" ); + + QVBoxLayout *v2 = new QVBoxLayout( timeBox, KDialog::spacingHint() ); + + kclock = new Kclock( timeBox, "kclock" ); + kclock->setMinimumSize(150,150); + v2->addWidget( kclock ); + + QGridLayout *v3 = new QGridLayout( v2, 2, 9 ); + + // Even if the module's widgets are reversed (usually when using RTL + // languages), the placing of the time fields must always be H:M:S, from + // left to right. + bool isRTL = QApplication::reverseLayout(); + + QSpacerItem *spacer1 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + v3->addMultiCell(spacer1, 0, 1, 1, 1); + + hour = new HMSTimeWidget( timeBox ); + hour->setWrapping(true); + hour->setMaxValue(23); + hour->setValidator(new KStrictIntValidator(0, 23, hour)); + v3->addMultiCellWidget(hour, 0, 1, isRTL ? 6 : 2, isRTL ? 6 : 2 ); + + QLabel *dots1 = new QLabel(":", timeBox); + dots1->setMinimumWidth( 7 ); + dots1->setAlignment( QLabel::AlignCenter ); + v3->addMultiCellWidget(dots1, 0, 1, 3, 3 ); + + minute = new HMSTimeWidget( timeBox ); + minute->setWrapping(true); + minute->setMinValue(0); + minute->setMaxValue(59); + minute->setValidator(new KStrictIntValidator(0, 59, minute)); + v3->addMultiCellWidget(minute, 0, 1, 4, 4 ); + + QLabel *dots2 = new QLabel(":", timeBox); + dots2->setMinimumWidth( 7 ); + dots2->setAlignment( QLabel::AlignCenter ); + v3->addMultiCellWidget(dots2, 0, 1, 5, 5 ); + + second = new HMSTimeWidget( timeBox ); + second->setWrapping(true); + second->setMinValue(0); + second->setMaxValue(59); + second->setValidator(new KStrictIntValidator(0, 59, second)); + v3->addMultiCellWidget(second, 0, 1, isRTL ? 2 : 6, isRTL ? 2 : 6 ); + + v3->addColSpacing(7, 7); + + QString wtstr = i18n("Here you can change the system time. Click into the" + " hours, minutes or seconds field to change the relevant value, either" + " using the up and down buttons to the right or by entering a new value."); + QWhatsThis::add( hour, wtstr ); + QWhatsThis::add( minute, wtstr ); + QWhatsThis::add( second, wtstr ); + + QSpacerItem *spacer3 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + v3->addMultiCell(spacer3, 0, 1, 9, 9); + + QGridLayout *top = new QGridLayout( this, 2,2, KDialog::spacingHint() ); + + top->addWidget(dateBox, 1,0); + top->addWidget(timeBox, 1,1); + top->addMultiCellWidget(privateLayoutWidget, 0,0, 0,1); + + // ************************************************************* + // End Dialog + // ************************************************************* + + connect( hour, SIGNAL(valueChanged(int)), SLOT(set_time()) ); + connect( minute, SIGNAL(valueChanged(int)), SLOT(set_time()) ); + connect( second, SIGNAL(valueChanged(int)), SLOT(set_time()) ); + connect( cal, SIGNAL(dateChanged(QDate)), SLOT(changeDate(QDate))); + + connect( &internalTimer, SIGNAL(timeout()), SLOT(timeout()) ); + + load(); + + if (getuid() != 0) + { + cal->setEnabled(false); + hour->setEnabled(false); + minute->setEnabled(false); + second->setEnabled(false); + timeServerList->setEnabled(false); + setDateTimeAuto->setEnabled(false); + } + kclock->setEnabled(false); +} + +void Dtime::serverTimeCheck() { + bool enabled = !setDateTimeAuto->isChecked(); + cal->setEnabled(enabled); + hour->setEnabled(enabled); + minute->setEnabled(enabled); + second->setEnabled(enabled); + //kclock->setEnabled(enabled); +} + +void Dtime::findNTPutility(){ + KProcess proc; + proc << "which" << "ntpdate"; + proc.start(KProcess::Block); + if(proc.exitStatus() == 0) { + ntpUtility = "ntpdate"; + kdDebug() << "ntpUtility = " << ntpUtility.latin1() << endl; + return; + } + proc.clearArguments(); + proc << "which" << "rdate"; + proc.start(KProcess::Block); + if(proc.exitStatus() == 0) { + ntpUtility = "rdate"; + kdDebug() << "ntpUtility = " << ntpUtility.latin1() << endl; + return; + } + privateLayoutWidget->hide(); + kdDebug() << "ntpUtility not found!" << endl; +} + +void Dtime::set_time() +{ + if( ontimeout ) + return; + + internalTimer.stop(); + + time.setHMS( hour->value(), minute->value(), second->value() ); + kclock->setTime( time ); + + emit timeChanged( TRUE ); +} + +void Dtime::changeDate(QDate d) +{ + date = d; + emit timeChanged( TRUE ); +} + +void Dtime::configChanged(){ + emit timeChanged( TRUE ); +} + +void Dtime::load() +{ + KConfig config("kcmclockrc", true, false); + config.setGroup("NTP"); + timeServerList->insertStringList(QStringList::split(',', config.readEntry("servers", + i18n("Public Time Server (pool.ntp.org),\ +asia.pool.ntp.org,\ +europe.pool.ntp.org,\ +north-america.pool.ntp.org,\ +oceania.pool.ntp.org")))); + setDateTimeAuto->setChecked(config.readBoolEntry("enabled", false)); + + // Reset to the current date and time + time = QTime::currentTime(); + date = QDate::currentDate(); + cal->setDate(date); + + // start internal timer + internalTimer.start( 1000 ); + + timeout(); +} + +void Dtime::save() +{ + KConfig config("kcmclockrc", false, false); + config.setGroup("NTP"); + + // Save the order, but don't duplicate! + QStringList list; + if( timeServerList->count() != 0) + list.append(timeServerList->currentText()); + for ( int i=0; icount();i++ ) { + QString text = timeServerList->text(i); + if( list.find(text) == list.end()) + list.append(text); + // Limit so errors can go away and not stored forever + if( list.count() == 10) + break; + } + config.writeEntry("servers", list.join(",")); + config.writeEntry("enabled", setDateTimeAuto->isChecked()); + + if(setDateTimeAuto->isChecked() && !ntpUtility.isEmpty()){ + // NTP Time setting + QString timeServer = timeServerList->currentText(); + if( timeServer.find( QRegExp(".*\\(.*\\)$") ) != -1 ) { + timeServer.replace( QRegExp(".*\\("), "" ); + timeServer.replace( QRegExp("\\).*"), "" ); + // Would this be better?: s/^.*\(([^)]*)\).*$/\1/ + } + KProcess proc; + proc << ntpUtility << timeServer; + proc.start( KProcess::Block ); + if( proc.exitStatus() != 0 ){ + KMessageBox::error( this, i18n(QString("Unable to contact time server: %1.").arg(timeServer).latin1())); + setDateTimeAuto->setChecked( false ); + } + else { + // success + kdDebug() << "Set date from time server " << timeServer.latin1() << " success!" << endl; + } + } + else { + // User time setting + KProcess c_proc; + + // BSD systems reverse year compared to Susv3 +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) + BufS.sprintf("%04d%02d%02d%02d%02d.%02d", + date.year(), + date.month(), date.day(), + hour->value(), minute->value(), second->value()); +#else + BufS.sprintf("%02d%02d%02d%02d%04d.%02d", + date.month(), date.day(), + hour->value(), minute->value(), + date.year(), second->value()); +#endif + + kdDebug() << "Set date " << BufS << endl; + + c_proc << "date" << BufS; + c_proc.start( KProcess::Block ); + int result = c_proc.exitStatus(); + if (result != 0 +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) + && result != 2 // can only set local date, which is okay +#endif + ) { + KMessageBox::error( this, i18n("Can not set date.")); + return; + } + + // try to set hardware clock. We do not care if it fails + KProcess hwc_proc; + hwc_proc << "hwclock" << "--systohc"; + hwc_proc.start(KProcess::Block); + } + + // restart time + internalTimer.start( 1000 ); +} + +void Dtime::timeout() +{ + // get current time + time = QTime::currentTime(); + + ontimeout = TRUE; + second->setValue(time.second()); + minute->setValue(time.minute()); + hour->setValue(time.hour()); + ontimeout = FALSE; + + kclock->setTime( time ); +} + +QString Dtime::quickHelp() const +{ + return i18n("

Date & Time

This control module can be used to set the system date and" + " time. As these settings do not only affect you as a user, but rather the whole system, you" + " can only change these settings when you start the Control Center as root. If you do not have" + " the root password, but feel the system time should be corrected, please contact your system" + " administrator."); +} + +void Kclock::setTime(const QTime &time) +{ + this->time = time; + repaint(); +} + +void Kclock::paintEvent( QPaintEvent * ) +{ + if ( !isVisible() ) + return; + + QPainter paint; + paint.begin( this ); + + QPointArray pts; + QPoint cp = rect().center(); + int d = QMIN(width(),height()); + QColor hands = colorGroup().dark(); + QColor shadow = colorGroup().text(); + paint.setPen( shadow ); + paint.setBrush( shadow ); + paint.setViewport(4,4,width(),height()); + + for ( int c=0 ; c < 2 ; c++ ) + { + QWMatrix matrix; + matrix.translate( cp.x(), cp.y() ); + matrix.scale( d/1000.0F, d/1000.0F ); + + // lancetta delle ore + float h_angle = 30*(time.hour()%12-3) + time.minute()/2; + matrix.rotate( h_angle ); + paint.setWorldMatrix( matrix ); + pts.setPoints( 4, -20,0, 0,-20, 300,0, 0,20 ); + paint.drawPolygon( pts ); + matrix.rotate( -h_angle ); + + // lancetta dei minuti + float m_angle = (time.minute()-15)*6; + matrix.rotate( m_angle ); + paint.setWorldMatrix( matrix ); + pts.setPoints( 4, -10,0, 0,-10, 400,0, 0,10 ); + paint.drawPolygon( pts ); + matrix.rotate( -m_angle ); + + // lancetta dei secondi + float s_angle = (time.second()-15)*6; + matrix.rotate( s_angle ); + paint.setWorldMatrix( matrix ); + pts.setPoints(4,0,0,0,0,400,0,0,0); + paint.drawPolygon( pts ); + matrix.rotate( -s_angle ); + + // quadrante + for ( int i=0 ; i < 60 ; i++ ) + { + paint.setWorldMatrix( matrix ); + if ( (i % 5) == 0 ) + paint.drawLine( 450,0, 500,0 ); // draw hour lines + else paint.drawPoint( 480,0 ); // draw second lines + matrix.rotate( 6 ); + } + + paint.setPen( hands ); + paint.setBrush( hands ); + paint.setViewport(0,0,width(),height()); + } + paint.end(); +} + +QValidator::State KStrictIntValidator::validate( QString & input, int & d ) const +{ + if( input.isEmpty() ) + return Valid; + + State st = QIntValidator::validate( input, d ); + + if( st == Intermediate ) + return Invalid; + + return st; +} diff --git a/kcontrol/clock/dtime.h b/kcontrol/clock/dtime.h new file mode 100644 index 000000000..5fcbb62df --- /dev/null +++ b/kcontrol/clock/dtime.h @@ -0,0 +1,125 @@ +/* + * dtime.h + * + * Copyright (C) 1998 Luca Montecchiani + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef dtime_included +#define dtime_included + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +class Kclock; + +class HMSTimeWidget : public KIntSpinBox +{ + Q_OBJECT + public: + HMSTimeWidget(QWidget *parent=0, const char *name=0); + protected: + QString mapValueToText(int); +}; + +class Dtime : public QWidget +{ + Q_OBJECT + public: + Dtime( QWidget *parent=0, const char* name=0 ); + + void save(); + void load(); + + QString quickHelp() const; + +signals: + void timeChanged(bool); + + private slots: + void configChanged(); + void serverTimeCheck(); + void timeout(); + void set_time(); + void changeDate(QDate); + +private: + void findNTPutility(); + QString ntpUtility; + + QWidget* privateLayoutWidget; + QCheckBox *setDateTimeAuto; + QComboBox *timeServerList; + + KDatePicker *cal; + QComboBox *month; + QSpinBox *year; + + HMSTimeWidget *hour; + HMSTimeWidget *minute; + HMSTimeWidget *second; + + Kclock *kclock; + + QTime time; + QDate date; + QTimer internalTimer; + + QString BufS; + int BufI; + bool refresh; + bool ontimeout; +}; + +class Kclock : public QWidget +{ + Q_OBJECT + +public: + Kclock( QWidget *parent=0, const char *name=0 ) + : QWidget(parent, name) {}; + + void setTime(const QTime&); + +protected: + virtual void paintEvent( QPaintEvent *event ); + + +private: + QTime time; +}; + +class KStrictIntValidator : public QIntValidator +{ +public: + KStrictIntValidator(int bottom, int top, QWidget * parent, + const char * name = 0 ) + : QIntValidator(bottom, top, parent, name) {}; + + QValidator::State validate( QString & input, int & d ) const; +}; + +#endif // dtime_included diff --git a/kcontrol/clock/main.cpp b/kcontrol/clock/main.cpp new file mode 100644 index 000000000..8522973a1 --- /dev/null +++ b/kcontrol/clock/main.cpp @@ -0,0 +1,95 @@ +/* + * main.cpp + * + * Copyright (C) 1998 Luca Montecchiani + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ +#include + +#include +#include + +#include + +#include +#include +#include +#include + +#include "main.h" +#include "main.moc" + +#include "tzone.h" +#include "dtime.h" + +typedef KGenericFactory KlockModuleFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_clock, KlockModuleFactory("kcmkclock")) + +KclockModule::KclockModule(QWidget *parent, const char *name, const QStringList &) + : KCModule(KlockModuleFactory::instance(), parent, name) +{ + KAboutData *about = + new KAboutData(I18N_NOOP("kcmclock"), I18N_NOOP("KDE Clock Control Module"), + 0, 0, KAboutData::License_GPL, + "(c) 1996 - 2001 Luca Montecchiani"); + + about->addAuthor("Luca Montecchiani", I18N_NOOP("Original author"), "m.luca@usa.net"); + about->addAuthor("Paul Campbell", I18N_NOOP("Current Maintainer"), "paul@taniwha.com"); + about->addAuthor("Benjamin Meyer", I18N_NOOP("Added NTP support"), "ben+kcmclock@meyerhome.net"); + setAboutData( about ); + setQuickHelp( i18n("

Date & Time

This control module can be used to set the system date and" + " time. As these settings do not only affect you as a user, but rather the whole system, you" + " can only change these settings when you start the Control Center as root. If you do not have" + " the root password, but feel the system time should be corrected, please contact your system" + " administrator.")); + + KGlobal::locale()->insertCatalogue("timezones"); // For time zone translations + + QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + dtime = new Dtime(this); + layout->addWidget(dtime); + connect(dtime, SIGNAL(timeChanged(bool)), this, SIGNAL(changed(bool))); + + tzone = new Tzone(this); + layout->addWidget(tzone); + connect(tzone, SIGNAL(zoneChanged(bool)), this, SIGNAL(changed(bool))); + + layout->addStretch(); + + if(getuid() == 0) + setButtons(Help|Apply); + else + setButtons(Help); +} + +void KclockModule::save() +{ +// The order here is important + dtime->save(); + tzone->save(); + + // Tell the clock applet about the change so that it can update its timezone + kapp->dcopClient()->send( "kicker", "ClockApplet", "reconfigure()", QByteArray() ); +} + +void KclockModule::load() +{ + dtime->load(); + tzone->load(); +} + diff --git a/kcontrol/clock/main.h b/kcontrol/clock/main.h new file mode 100644 index 000000000..3c57469f0 --- /dev/null +++ b/kcontrol/clock/main.h @@ -0,0 +1,47 @@ +/* + * main.h + * + * Copyright (C) 1998 Luca Montecchiani + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ +#ifndef main_included +#define main_included + +#include + +class Dtime; +class Tzone; +class QTabWidget; + + +class KclockModule : public KCModule +{ + Q_OBJECT + +public: + KclockModule(QWidget *parent, const char *name, const QStringList &); + + void save(); + void load(); + +private: + QTabWidget *tab; + Tzone *tzone; + Dtime *dtime; +}; + +#endif // main_included diff --git a/kcontrol/clock/tzone.cpp b/kcontrol/clock/tzone.cpp new file mode 100644 index 000000000..fad22152a --- /dev/null +++ b/kcontrol/clock/tzone.cpp @@ -0,0 +1,200 @@ +/* + * tzone.cpp + * + * Copyright (C) 1998 Luca Montecchiani + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +//#include "xpm/world.xpm" +#include "tzone.h" +#include "tzone.moc" + +#if defined(USE_SOLARIS) +#include +#include +#include +#include +#include +#endif + +Tzone::Tzone(QWidget * parent, const char *name) + : QVGroupBox(parent, name) +{ + setTitle(i18n("To change the timezone, select your area from the list below")); + + tzonelist = new KTimezoneWidget(this, "ComboBox_1", &m_zoneDb); + connect( tzonelist, SIGNAL(selectionChanged()), SLOT(handleZoneChange()) ); + + m_local = new QLabel(this); + + load(); + + tzonelist->setEnabled(getuid() == 0); +} + +void Tzone::load() +{ + currentZone(); + + // read the currently set time zone + tzonelist->setSelected(m_zoneDb.local()->name(), true); +} + +void Tzone::currentZone() +{ + QString localZone(i18n("Current local timezone: %1 (%2)")); + QCString result(100); + + time_t now = time(0); + tzset(); + strftime(result.data(), result.size(), "%Z", localtime(&now)); + m_local->setText(localZone.arg(KTimezoneWidget::displayName(m_zoneDb.local())).arg(result)); +} + +// FIXME: Does the logic in this routine actually work correctly? For example, +// on non-Solaris systems which do not use /etc/timezone? +void Tzone::save() +{ + QStringList selectedZones(tzonelist->selection()); + + if (selectedZones.count() > 0) + { + // Find untranslated selected zone + QString selectedzone(selectedZones[0]); + +#if defined(USE_SOLARIS) // MARCO + + KTempFile tf( locateLocal( "tmp", "kde-tzone" ) ); + tf.setAutoDelete( true ); + QTextStream *ts = tf.textStream(); + +# ifndef INITFILE +# define INITFILE "/etc/default/init" +# endif + + QFile fTimezoneFile(INITFILE); + bool updatedFile = false; + + if (tf.status() == 0 && fTimezoneFile.open(IO_ReadOnly)) + { + bool found = false; + + QTextStream is(&fTimezoneFile); + + for (QString line = is.readLine(); !line.isNull(); + line = is.readLine()) + { + if (line.find("TZ=") == 0) + { + *ts << "TZ=" << selectedzone << endl; + found = true; + } + else + { + *ts << line << endl; + } + } + + if (!found) + { + *ts << "TZ=" << selectedzone << endl; + } + + updatedFile = true; + fTimezoneFile.close(); + } + + if (updatedFile) + { + ts->device()->reset(); + fTimezoneFile.remove(); + + if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate)) + { + QTextStream os(&fTimezoneFile); + + for (QString line = ts->readLine(); !line.isNull(); + line = ts->readLine()) + { + os << line << endl; + } + + fchmod(fTimezoneFile.handle(), + S_IXUSR | S_IRUSR | S_IRGRP | S_IXGRP | + S_IROTH | S_IXOTH); + fTimezoneFile.close(); + } + } + + + QString val = selectedzone; +#else + QFile fTimezoneFile("/etc/timezone"); + + if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) ) + { + QTextStream t(&fTimezoneFile); + t << selectedzone; + fTimezoneFile.close(); + } + + QString tz = "/usr/share/zoneinfo/" + selectedzone; + + kdDebug() << "Set time zone " << tz << endl; + + if (!QFile::remove("/etc/localtime")) + { + //After the KDE 3.2 release, need to add an error message + } + else + if (!KIO::NetAccess::file_copy(KURL(tz),KURL("/etc/localtime"))) + KMessageBox::error( 0, i18n("Error setting new timezone."), + i18n("Timezone Error")); + + QString val = ":" + tz; +#endif // !USE_SOLARIS + + setenv("TZ", val.ascii(), 1); + tzset(); + + } else { +#if !defined(USE_SOLARIS) // Do not update the System! + unlink( "/etc/timezone" ); + unlink( "/etc/localtime" ); + + setenv("TZ", "", 1); + tzset(); +#endif // !USE SOLARIS + } + + currentZone(); +} diff --git a/kcontrol/clock/tzone.h b/kcontrol/clock/tzone.h new file mode 100644 index 000000000..618cb10c6 --- /dev/null +++ b/kcontrol/clock/tzone.h @@ -0,0 +1,55 @@ +/* + * tzone.h + * + * Copyright (C) 1998 Luca Montecchiani + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef tzone_included +#define tzone_included + +#include +#include +#include + +class QComboBox; +class QLabel; + +class Tzone : public QVGroupBox +{ + Q_OBJECT + +public: + Tzone( QWidget *parent=0, const char* name=0 ); + + void save(); + void load(); + +signals: + void zoneChanged(bool); + +protected slots: + void handleZoneChange() {emit zoneChanged( TRUE );} + +private: + void currentZone(); + KTimezones m_zoneDb; + QLabel *m_local; + KTimezoneWidget *tzonelist; +}; + +#endif // tzone_included diff --git a/kcontrol/clock/xpm/kcmclock.xpm b/kcontrol/clock/xpm/kcmclock.xpm new file mode 100644 index 000000000..d04cee036 --- /dev/null +++ b/kcontrol/clock/xpm/kcmclock.xpm @@ -0,0 +1,47 @@ +/* XPM */ +static char*kcmclock[]={ +"34 34 10 1", +"% c none", +". c #f8fcf8", +"# c #787878", +"a c #000000", +"b c #b8bcb8", +"c c #0000f8", +"d c #780000", +"e c #f80000", +"f c #000078", +"g c #787800", +"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", +"%%%############%############a%%%%%", +"%%%#..........ba#...........#a%%%%", +"%%a#..........ba#...........#baa%%", +"%%a#....cc....ba#....ccc....#b#aa%", +"%%a#...ccc....a.ba..ccccc...#b#aa%", +"%%a#...ccc....aaaa..cc.cc...#b#aa%", +"%%a#....cc....ba#......cc...#b#aa%", +"%%a#....cc....ba#.....ccc...#b#aa%", +"%%a#....cc....ba#....ccc....#b#aa%", +"%%a#....cc....ba#...ccc.....#b#aa%", +"%%a#...cccc...a.ba..ccccc...#b#aa%", +"%%a#...cccc...aaaa..ccccc...#b#aa%", +"%%a#..........ba#...........#b#aa%", +"%%a#..........ba#...........#b#aa%", +"%%a#..aaaaaa.dddddd.aaaaaa..#b#aa%", +"%%a#.......ddeeeeeeda.......#b#aa%", +"%%a#..aaaadeeeadddeeeaaaaa..#b#aa%", +"%%a#.....deeaa....ddeea.....#b#aa%", +"%%a#....deea...ab...deea....#b#aa%", +"%%a#....dea..........dea....#b#aa%", +"%%a####deea....f.....deea####b#aa%", +"%%aa#bbdea.....f.g....deabbbbb#aa%", +"%%aa###dea.b...fg...a.dea######aa%", +"%%aaaaadea.a...fffb.b.deaaaaaaaaa%", +"%%%aaaadea....g.......deaaaaaaaa%%", +"%%%%%%%deea..g.......deea%%%%%%%%%", +"%%%%%%%%dea..........dea%%%%%%%%%%", +"%%%%%%%%deea...ba...deea%%%%%%%%%%", +"%%%%%%%%%deead....ddeea%%%%%%%%%%%", +"%%%%%%%%%%deeeddddeeea%%%%%%%%%%%%", +"%%%%%%%%%%%ddeeeeeeaa%%%%%%%%%%%%%", +"%%%%%%%%%%%%%aaaaaa%%%%%%%%%%%%%%%", +"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"}; diff --git a/kcontrol/clock/xpm/world.xpm b/kcontrol/clock/xpm/world.xpm new file mode 100644 index 000000000..a10a317cd --- /dev/null +++ b/kcontrol/clock/xpm/world.xpm @@ -0,0 +1,190 @@ +/* XPM */ +const char *world[] = { +"356 184 3 1", +". c #000078", +"# c #007800", +"a c #0000f8", +"....................................................................................................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"...................................................................................................................................................................................................................................................................................................................................................############.....", +"................................................................................................................................................................................................................................................................................................................................................################....", +".........................................................................................................................................................................................................................................................................................................###############....................#######################.", +".......................................................................................................................................................................................................................................................................................................##################...............############################", +"..................................................................................................................................................................................................................................................................................................########################.......###################################", +"...####.....................................................................##...................................................................................................................................................................................................................########################...####################################.###", +".#######...................................................................###....##.............................#.............................................................................................................................................................................#########################..#########################################.", +"########.........................................................#####....###..#.###............................####........................................................................................................................................................................##..####.##################..###########################################", +"######................................###.###...................######...#..#.###.............................####.....................................................................................................................................................................#...####..####......##########..#############################################", +"#####..........................#....#.#########...................###..##..##..#..............................###..##.................................................................................................................................................................###..######.....##############...#############################################", +"####..........................########...####................................................................##..#####...........................................................................................................................................................####..##...#######..############.....##############################################", +"##.............................########...........................................................................####...##.....................................................................................................................................................######.......######..##########.....################################################", +"##.............................##.######..........................................................................###..#####...............................................................................................................................................##....######.##....#####..##########...##################################################", +"##................................#####.##.............................................................................####.............................................................................................................................................#####.....##########.#####.#.##########..###################################################", +"##...............................######.###...............................................................................#............................................................................................................................................######....#.###..#####.###..#.#########...###################################################", +"###................................###...##..........................................##................................#####......................................................................................................................................####....##......#........#......##.#######........################################################", +"###.................................#...............................................####...............................#######..................................................................................................................................#####..................#...##..#.###.#######.......#################################################", +"#...............................................................................##.#####.......................##.#..#############..............................................................................................................................#####...##..####.########.#######.###..####..........######.########################################", +"#.............................................................................######........................#########################......................#####...............................................................................................####....##########.#######....####...#.##..............##.....#######################################", +"##...........................................................................######.......................###########################.....................#######...###...............................................................................................###########..######.##.#######.#####.....................#####################################", +"#..........................................................................#####.........................##########################........................#####....###.................................................................................................######......###...###.######.####.......................####################################", +"##.........................................................................####..........................########################...........................##.................................................................................................#######.................#...........##............................###################################", +"#.........................................................................####.....................###.######################.#..##............................#..............................................................................................#########.........#...######..####.......##.###....................###################################", +".........................................................................####............#.........##########################...#########....###..............###.............................................................................................########.........###..#####..#####..##..########...................###################################", +"........................................................................####.............##..###...##########################.#############.#######.............#.............................................................................................######..############..######..###..##############..................##################################.", +"........................................................................###.............####.#####..#################################################.........###..#.........................................................................................######.##############..######......####..##########.................##################################.", +"........................................................................####...........############..################################################........##########.............................#..........................................................###################....###..##....###...###########................#################################.", +"............................................##.##.......................####..........#####.###############################################################.##############.........................####.......................###.##.............................###################......####...###.#.#############.................##############################.", +"........................................##########.........................##.##.....#######.####################################################################################...................##.....................############..............................################.....#####..###.##.##############.............###############################..", +".....................................#############............................####...#######.######################################################################################.........#.............................##################...........##.##..........################..#######....##...###############............##############################...", +"...................................###################.#.......................#####..######..######################################################################################.#####.########...................###########################..################...##########.####..###.#####.....#.......##########............##############################...", +"...................................######################..............###..##.#####...#####..#######################################################################################################................##################################################.######..#.###..####.######...####.....########.................#########################....", +".................................##########################.....##...##################.####..############################################################################################################...........###################################################.##....###.#######.########..####....############...........########################.##.....", +"..................................###########################..###..########################.##############################################################################################################..........###################################################################################....####.#########.........######################.#.........", +".................................############################..###.##########################################################################################################################################...........#################################################################################...###.##########.#.......#####################............", +"...###...........................####################...####...##################################################################################################################################################....############################################.#.###################################........##############.......###################...........#.", +"#######.........................######################......######################################################################################################################################################..#############################################..##################################..........#######..####........##################...........###", +"########.......................##########..############.....######################################################################################################################################################..####################################################################################....############.#...........#############..#............###", +"#######........................##########...###########..############################################################################################################################################...#####.##.....####################################################################################..##############.............###########.................##", +"######.......................############...############..#########################################################################################################################################...................####################################################################################..##..#########.............###########..................#", +".##........................############...##########################################################################################################################################################..................##########################################################################....#...##........#####.#..............#########....................", +".............#............############...############################################################################################################################################################.................##########################################################################......##..#..........###................#######.....................", +"............##...........#############..###########################################################################################################################################################..................#####################################################.###################.......###..#.######....#.................#######.....................", +".........................############...##########.#################################################################################################################################..#########.......................#######################################################################...............#######......................######.....................", +".........................#############..######..##..###########################################################################################################################..##a#########.........................#######################################################################...............#########....#.................####.....................", +".........................##############..####..##############################################################################################################################.....#####..##............................################...##################################################................#########....#...................#......................", +".................#........############....#...#########################################################################################################################.#####....#####....................................########.##...........############################..##############...............###########.####.........................................", +".............#...#........##...#######......#######################################################################################################################.##...###....#####.....................................########...............#############################################.............#################........................................", +".............#.##...........##.######....#.#######################################################################################################################.............#####.........................................####.#...............############################################..............################........................................", +"..............###..........###.######...#######################################################################################################################.#.............#######.......................................####..#...............#################################################..........################.......................................", +"..............###..........####.####....#####################################################################################################################.................#######....................................#####...##.................#################################################....##.#################.......................................", +"...............###..........##..........####################################################################################################################.................#######....................................######........................##############################################.......##################.......................................", +"............###.###.........###.##..######################################################################################################################...................######....##..............................###.#...........................#################################################...#####################....................................", +"...........####..###........#############################################################################################################################....................######......#...........................#.##.............................#.################################################..#######################...................................", +"..........####..#####.....#################################################################################################################################..#..#............#####..................................##................................##################################################...#######################..................................", +"..........####..#####...#########################################################################################################################################.............###...............#.....................................................###################################################..#######################..................................", +"..........####.######..#########################################################################################################################################..............##.......................................................................#..################################################.########################.................................", +"...........##..######..##########################################################################################################################################.............#.............................................................................#############################################.#######################...................................", +".....................#############################################################################################################################################............#............................................................................####################################################################.....................................", +"..................################################################################################################################################################..........................................................................................###########################################################.....##...##.................................", +"...............##################################################################################################################################################..........#................................................................................###.##################################.##################.####.#....##..................................", +"................################################################################################################################################################..........##..................................................................................###################################...################.#####.....####.................................", +".................###############################################################################################################################################.......####...................................................................................####################################...###################......#####.................................", +"..................##########################################################################################################################################..........####....................................................................................#####################################...###############.#.......######................................", +"...................################################.#######################################################################################################..........####......................................................................................#####################################...#.############........#######................................", +"...................##############.################...##...#################################################################################################....##...###........................................................................................####################################.###..############............#.#................................", +".............####.##########..####.##############..........#############..#######.########################################################################.....###.............................................................................................####################################.###.###...######................................................", +"............#############.#....####.############............###########..#######..#######################################################################......####............................................................................................####################################.################................................................", +"............###########......#..####..#########.....###......##########.########..######################################################################......####.............................................................................................####################################.#####.##########................................................", +"............###########.....##...####..#########..#####################.#############################################################################.........###.............................................................................................######################################################................................................", +"............#########.......##.....###.########.#######################..###########################################################################..........#...............................................................................................###################################################...................................................", +"............#########.##.....#.....##...###############################..#########################################################################...........###...............................................................................................#################################################....................................................", +".............#######.............#.##....####.##########################..###############################################################...#..####..........###...............................................................................................################################################.............................................##......", +"..............#####.............##.......###..#########################...##############################################################.......####.........###.................................................................................................###############################################..............................................###....", +"...............###...#####.####.###......##.#..########################....#################################################################....####.......####.................................................................................................##############################################................................................##....", +"...................############............###..##...#.#####################################################################################....####....#######..................................................................................................##############################################.....................................................", +"...............#################............##....#.##.###################################################################################.......##..#########...................................................................................................##############################################.....................................................", +".............##################.............##...####..####################################################################################.....###..#######......................................................................................................###########################################.......................................................", +"............###################.........##........##..#####################################################################################.........#..####.........................................................................................................########################################........................................................", +"...........########################.....###..#........######################################################################################.......#######...........................................................................................................#####################################..........................................................", +"...........##########################..########.############################################################################################.......###.......##.......................................................................................................####################################..........................................................", +"...........#################################################################################################################################........#.........##......................................................................................................###.###############################...........................................................", +"...........###########################################.#####################################################################################..................#........................................................................................................######################.###...######..........................................................", +"..........############################################.#####################################################################################...................#........................................##..............................................................##.#################...#.......###..........................................................", +".........#############################################.##############.######################################################################.......#...........#.........................................###............................................................###.###############............###..#.......................................................", +".......###############################################..##############.###...##############################################################......#.............##........................................###..............................................................##.#############..............###.##......................................................", +"......#################################################.###############....#..############################################################......###.............##........................................................................................................###.############..............##...##.....................................................", +"......#################################################..##############...##...#.###########################..############################.##....#.............###...............................................####......................................................##.############..............##...###....................................................", +".....##################################################...#############..####.........#####################....##########################.###...................#..................................................###......................................................##.##########....................###....................................................", +".....###################################################..####################.........####################....#########################..##........................................................................####........................................................#########..............####....#....................................................", +"....#####################################################..####################.........###################....#######################....#............................................................................##.###.#...................................................########............######........................................................", +"....######################################################.###################..........###################...#################.###.......#.............................................................................####..###.................................................########.......###...########.....................................................", +"....#######################################################.##################...........#.##############.....################.##..............................................................................................##.................................................#########.....####........##...###................................................", +".....######################################################.#################..............#############.......###################..............................................................................................##.................................................#########...####..............####...............................................", +".....#######################################################.###############...............#############........#############..##.........#..........................................................................................................................................##############........####.######.##...........................................", +".....######################################################...##############...............###########...........############............###.......................#...................................................................................................................############..........#.........#..##........................................", +".....#######################################################..###########...................#########............#############...........###.......................#.....................................................................................................................########...##....................#.#.....................................#.", +".....########################################################.########......................#######..............#..###########...........##..............................................................................................................................................#.###########.....................##...................................##.", +".....########################################################..####..........................######............##...###########............##................................................................................................................................................##########......................#....................................#.", +".....##########################################################.##...........................#######..........###...############............#......................#...........................................................................................................................########......................#......................................", +".....###########################################################.............................#######...........##...###..#######...........#.#.....................#...............................................................................................................................###............###........#......................................", +"......#############################################################.####......................######..........##....###..######..........#..#.##....................................................................................................................................................###.........#######......#......................................", +"......#################################################################.......................####.............#...####...###...........##.#.#...........#..........................................................................................................................................###....#..###############.......................................", +".......################################################################........................##..#................###....##...........#...............##............................................................................................................................................#########################.....................................", +".......###############################################################............................###...............###................#....####.......###............................................................................................................................................#####.###################.....................................", +"........##############################################################............................####...............###.....................####......##........................#..........................................................................................................................###################.....................................", +".........##############.#############################################.............................###.................##..............##......###......#........................###.........................................................................................................................####################....................................", +"............########.....###########################################...............................#.............###..###...........#####........................................##.........................................................................................................................##########################..............................", +"...........................########################################...............................................#####.##.........######........................................##.........................................................................................................................###########################.............................", +"............................#######################################................................................####..##.......######..........................................#.........................................................................................................................###########################.............................", +".............................####################################...................................................###..###.....########......................................................................................................................................................#...........############################.............................", +"..............................###################################....................................................###..##....##########..###............................................................##..................................................................................##..........############################.............................", +".............................##################################......................................................####.......#########.####.......##....................................................##.................................................................................###.........#############################.............................", +"............................##################################........................................................######....#######..####.......####...................................................##..................................................................................##........###################################........................", +".............................################################..........................................................######...#######..####...##...####.###..................................................................................................................................##........####################################.......................", +"..............................###############################.............##...........................................######....######.#####.....##..########............................................................................................................................................#####################################.....................", +"...............................#############################.............###............................................#####......####..###...##.###.##########........##...............................................................................................................................##########################################.................", +"................................###########################.............###...............................................###............###.......#....############...####..........................##........###.......................................................................................##########################################.................", +".................................##########################.............##.................................................####........................###.##########.####.##........................##........###........................................................................................############################################..............", +"................................###########################.................................................................######..................#..##...#########.......#.........................##......####.........................................................................................###########################################..............", +".................................##########################..................................................................########.#....###.##...##......#########........####......................#.......##..........................................................................................###########################################..............", +".................................###########################...................................................................######.#######..#..............###..###........####.........................................................................................................................##########################################...............", +".................................############################..##.....................................................................#..###.###....................###..........###........................................................................................................................#########################################...............", +"..................................###########################..##................................................................................................................###.........................................................................................................................#######################################................", +"..................................###########################.......#................................................................................###........#...............................................###..........................................................................................######################################.................", +".................................############################.......###.............................................................................######.....###.....................................##......####...........................................................................................#####################################.................", +".................................############################......####............................................................................#######.....###......................................#.......##............................................................................................#####################################.................", +"................................#############################....#####.........................................................................############....####.....................#......................................................................................................................####################################.................", +"................................#############################...######........................................................................###############..#####...................###......................................................................................................................##################################..................", +"................................############################....######........................................................................###############.######.....................#.........#.#............................................................................................................################################..................", +".................................##########################....#######......................................................................########################..............................###...............................................................................................................###############################.................", +".................................########################......######........#.............................................................#########################..............................####..............................................................................................................###############################.................", +"..................................######################........#####.....##.#...........................................................#############################............................................................................#.................................................................##############################..................", +"..................................#####################........######.....##...........................................................################################..............##..........................................................####...............................................................#############################...................", +"..................................######################.......#####..................................................................##################################..............##..........................................................####..............................................................#############################...................", +"...................................#####################.......#####.................................................................###################################..............###...........................................................#...............................................................###########################.....................", +"...................................#####################.......#####................................................................#####################################..............................................................................##...........................................................#########################.......................", +"...................................####################..........##.................................................................######################################............................................................................####.........................................................##########################.......................", +"...................................###################..............................................................................#######################################.............................................................................##.........................................................#######################..........................", +"...................................##################..............................................................................########################################........................................................................................................................................#######################..........................", +"...................................##################...............................................................................########################################.......................................................................................................................................#######################..........................", +"....................................#################...............................................................................########################################.......................................................................................................................................######################...........................", +"....................................################.................................................................................#######################################.......................................................................................................................................#####################............................", +"....................................###############...................................................................................#####################################........................................................................................................................................#####################............................", +".....................................##############...................................................................................#####################################........................................................................................................................................####################.............................", +"......................................#############...................................................................................############....####################.........................................................................................................................................##################...............................", +"......................................###########.....................................................................................############......###.##############.........................................................................................................................................##################...............................", +"......................................#########.......................................................................................#######............#..#############..........................................................................................................................................###############.#................................", +"........................................####.........................................................................................####..................##############.....................#....................................................................................................................##############...................................", +"......................................................................................................................................##..................###############.....................##..................................................................................................................###############...................................", +".............................................................................................................................................................###########......................###.................................................................................................................###############...................................", +"..............................................................................................................................................................##########.......................###...............................................................................................................###############....................................", +"...............................................................................................................................................................#..###.#.........................####.............................................................................................................##############.....................................", +"...................................................................................................................................................................##..........................#####.............................................................................................................############.......................................", +"...............................................................................................................................................................................................####..............................................................................................................###########........................................", +"...................................................................................................................................................................#............................##..............................................................................................................###########.........................................", +"..................................................................................................................................................................###........................###.#................................................................................................................########..........................................", +"...................................................................................................................................................................####......................###..................................................................................................................#######...........................................", +"....................................................................................................................................................................##.....................####...................................................................................................................#######...........................................", +"..........................................................................................................................................................................................#####..................................................................................................................########...........................................", +".........................................................................................................................................................................................#####..................................................................................................................########............................................", +"........................................................................................................................................................................................#####...................................................................................................................#######.............................................", +"........................................................................................................................................................................................####....................................................................................................................#########...........................................", +"........................................................................................................................................................................................###.....................................................................................................................#########...........................................", +"................................................................................................................................................................................................................................................................................................................#########...........................................", +".......................................................................................##.......................................................................................................................................................................................................................########............................................", +"........................................................................................#.......................................................................................................................................................................................................................#######.............................................", +"................................................................................................................................................................................................................................................................................................................######.......####...................................", +".................................................................................................................................................................................................................................................................................................................#####......#####...................................", +"..........................................................................................#......................................................................................................................................................................................................................######......#......................................", +".........................................................................................###......................................................................................................................................................................................................................######............................................", +"..........................................................................................##.......................................................................................................................................................................................................................######...........................................", +"...................................................................................................................................................................................................................................................................................................................#######..........................................", +".....................................................................................................................................................................................................................................................................................................................####...........................................", +"......................................................................................................................................................................................................................................................................................................................##............................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................................................................................................", +"...................................................................................................................................................................................................................................................................................................................................................................."}; diff --git a/kcontrol/colors/Makefile.am b/kcontrol/colors/Makefile.am new file mode 100644 index 000000000..87f4048ef --- /dev/null +++ b/kcontrol/colors/Makefile.am @@ -0,0 +1,15 @@ +AM_CPPFLAGS = $(all_includes) + +kde_module_LTLIBRARIES = kcm_colors.la + +kcm_colors_la_SOURCES = colorscm.cpp widgetcanvas.cpp +kcm_colors_la_LDFLAGS = $(KDE_RPATH) -module -avoid-version $(all_libraries) -no-undefined +kcm_colors_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO) $(top_builddir)/kcontrol/krdb/libkrdb.la +METASOURCES = colorscm.moc widgetcanvas.moc + +noinst_HEADERS = colorscm.h widgetcanvas.h + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kcmcolors.pot + +xdg_apps_DATA = colors.desktop diff --git a/kcontrol/colors/colors.desktop b/kcontrol/colors/colors.desktop new file mode 100644 index 000000000..a13e45861 --- /dev/null +++ b/kcontrol/colors/colors.desktop @@ -0,0 +1,252 @@ +[Desktop Entry] +Exec=kcmshell colors +Icon=colorscm +Type=Application +DocPath=kcontrol/colors/index.html + + +X-KDE-Library=colors +X-KDE-FactoryName=colors +X-KDE-ParentApp=kcontrol + +Name=Colors +Name[af]=Kleure +Name[ar]=الألوان +Name[az]=Rənglər +Name[be]=Колеры +Name[bg]=Цветове +Name[bn]=রং +Name[br]=Livioù +Name[bs]=Boje +Name[cs]=Barvy +Name[csb]=Farwë +Name[cy]=Lliwiau +Name[da]=Farver +Name[de]=Farben +Name[el]=Χρώματα +Name[en_GB]=Colours +Name[eo]=Koloroj +Name[es]=Colores +Name[et]=Värvid +Name[eu]=Koloreak +Name[fa]=رنگها +Name[fi]=Värit +Name[fo]=Litir +Name[fr]=Couleurs +Name[fy]=Kleuren +Name[ga]=Dathanna +Name[gl]=Cores +Name[he]=צבעים +Name[hi]=रंग +Name[hr]=Boje +Name[hu]=Színek +Name[id]=Warna +Name[is]=Litir +Name[it]=Colori +Name[ja]=色 +Name[ka]=ცვეტები +Name[kk]=Түстер +Name[km]=ពណ៌ +Name[ko]=색 +Name[lo]=ສີ +Name[lt]=Spalvos +Name[lv]=Krāsas +Name[mk]=Бои +Name[mn]=Өнгө +Name[ms]=Warna +Name[mt]=Kuluri +Name[nb]=Farger +Name[nds]=Klören +Name[ne]=रङ +Name[nl]=Kleuren +Name[nn]=Fargar +Name[nso]=Mebala +Name[pa]=ਰੰਗ +Name[pl]=Kolory +Name[pt]=Cores +Name[pt_BR]=Cores +Name[ro]=Culori +Name[ru]=Цвета +Name[rw]=Amabara +Name[se]=Ivnnit +Name[sk]=Farby +Name[sl]=Barve +Name[sr]=Боје +Name[sr@Latn]=Boje +Name[ss]=Imibala +Name[sv]=Färger +Name[ta]=வண்ணங்கள் +Name[te]=రంగులు +Name[tg]=Рангҳо +Name[th]=สี +Name[tr]=Renkler +Name[tt]=Töslär +Name[uk]=Кольори +Name[uz]=Ranglar +Name[uz@cyrillic]=Ранглар +Name[ven]=Mivhala +Name[vi]=Màu +Name[wa]=Coleurs +Name[xh]=Imibala +Name[zh_CN]=颜色 +Name[zh_TW]=顏色 +Name[zu]=Imibala + +Comment=Color settings +Comment[af]=Kleur instellings +Comment[ar]=ضبط الألوان +Comment[az]=Rəng qurğuları +Comment[be]=Настаўленне колераў +Comment[bg]=Настройване цветовете на системата +Comment[bn]=রং সেটিংস +Comment[br]=Kefluniañ al livioù +Comment[bs]=Podešavanje boja +Comment[ca]=Arranjament dels colors +Comment[cs]=Nastavení barev +Comment[csb]=Ùstôw farwów +Comment[cy]=Gosodiadau lliwiau +Comment[da]=Farveindstillinger +Comment[de]=Einstellung der Bildschirmfarben +Comment[el]=Ρυθμίσεις χρωμάτων +Comment[en_GB]=Colour settings +Comment[eo]=Agordo de la koloroj +Comment[es]=Preferencias sobre los colores +Comment[et]=Värvide seadistused +Comment[eu]=Koloreen konfigurazioa +Comment[fa]=تنطیمات رنگها +Comment[fi]=Väriasetukset +Comment[fo]=Lituppseting +Comment[fr]=Configuration des couleurs +Comment[fy]=Kleuren ynstelle +Comment[ga]=Socruithe na ndathanna +Comment[gl]=Configuración das cores +Comment[he]=שינוי הגדרות הצבעים +Comment[hi]=रंग विन्यास +Comment[hr]=Postava boja +Comment[hu]=Színbeállítások +Comment[id]=Seting warna +Comment[is]=Stillingar lita +Comment[it]=Impostazioni dei colori +Comment[ja]=色の設定 +Comment[ka]=ფერების კონფიგურაცია +Comment[kk]=Түстерді орнату +Comment[km]=ការ​កំណត់​ពណ៌ +Comment[ko]=색 설정 +Comment[lo]=ຕັ້ງຄ່າສີ +Comment[lt]=Spalvų parametrai +Comment[lv]=Krāsu uzstādījumi +Comment[mk]=Поставувања за боите +Comment[mn]=Дэлгэцийн өнгө тохируулах +Comment[ms]=Seting warna +Comment[mt]=Konfigurazzjoni tal-kuluri +Comment[nb]=Fargeinnstillinger +Comment[nds]=Klören instellen +Comment[ne]=रङ सेटिङ +Comment[nl]=Kleuren instellen +Comment[nn]=Fargeinnstillingar +Comment[nso]=Dipeakanyo tsa mebala +Comment[oc]=Arranjament dèus colors +Comment[pa]=ਰੰਗ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia kolorów +Comment[pt]=Configuração das cores +Comment[pt_BR]=Configurações de cor +Comment[ro]=Configurează culorile ferestrelor +Comment[ru]=Настройка цветов +Comment[rw]=Amagenamiterere y'ibara +Comment[se]=Ivdneheivehusat +Comment[sk]=Nastavenie farieb +Comment[sl]=Nastavitve barv +Comment[sr]=Поставке боја +Comment[sr@Latn]=Postavke boja +Comment[ss]=Kuhleleka kwembala +Comment[sv]=Anpassa färger +Comment[ta]=வண்ண அமைப்புகள் +Comment[te]=రంగుల అమరికలు +Comment[tg]=Танзимоти ранг +Comment[th]=ตั้งค่าสี +Comment[tr]=Renk ayarları +Comment[tt]=Tös caylaw +Comment[uk]=Налаштування кольорів +Comment[uz]=Ranglarning moslamalari +Comment[uz@cyrillic]=Рангларнинг мосламалари +Comment[ven]=Mavhekanyele a muvhala +Comment[vi]=Thiết lập màu +Comment[wa]=Apontiaedje des coleurs +Comment[xh]=Izicwangciso zombala +Comment[zh_CN]=颜色设置 +Comment[zh_TW]=顏色設定 +Comment[zu]=Izilungiso zombala + +Keywords=colors,colours,scheme,contrast,Widget colors,Color Scheme +Keywords[af]=colors,colours,Skema,contrast,Widget colors,Color Skema +Keywords[az]=rənglər,sxem,kontrast,Rəng Cədvəli +Keywords[be]=колеры,схема,кантраст,колеры віджэтаў,колерная схема,colors,colours,scheme,contrast,Widget colors,Color Scheme +Keywords[bg]=цветове, схема, цветова, colors, colours, scheme, contrast, Widget colors, Color Scheme +Keywords[ca]=colors,esquema,contrast,colors d'estri,esquema de color +Keywords[cs]=Barvy,Schéma,Kontrast,Barevná schémata +Keywords[csb]=farwa,schema,kòntrast,farwë elementów òknów,schema farwów +Keywords[cy]=lliwiau,cynlluniau,cyferbyniad,lliwiau celfigion,Cynllun Lliw +Keywords[da]=farver,system,kontrast,Kontrolfarver,Farvesammensætning +Keywords[de]=Farben,Schema,Kontrast,Farbschema,Elemente +Keywords[el]=χρώματα,χρώματα,θέμα,αντίθεση,Χρώματα γραφικού συστατικού,Θέμα χρωμάτων +Keywords[en_GB]=colours,scheme,contrast,Widget colours,Colour Scheme +Keywords[eo]=koloroj,skemo,kontrasto,fenestraĵo-koloroj,koloraro +Keywords[es]=colores,esquema,contraste,Colores de los objetos visuales,Colores de los widgets,Esquema de colores +Keywords[et]=värvid,skeem,kontrast,värviskeem +Keywords[eu]=koloreak,antolamendua,kontrastea,Widget-en koloreak,Kolore eskema +Keywords[fa]=رنگها، رنگها، طرحواره، سایه روشن، رنگهای عنصر، طرحوارۀ رنگ +Keywords[fi]=väri,teema,kontrasti,työkalujen värit,väriteema +Keywords[fo]=litir +Keywords[fr]=couleurs,modèles de couleurs,contraste,couleur des éléments graphiques,modèle +Keywords[fy]=kleuren,kleur,skema,kontrast,widgetkleuren,kleurenskema +Keywords[ga]=dathanna,scéim,codarsnacht,dathanna giuirléidí,Scéim Dathanna +Keywords[gl]=cor,cores,esquema,contraste,cores dos widgets,Esquema das cores +Keywords[he]=colors,colours,scheme,contrast,Widget colors,Color,Schemeצבעים,תבנית,חדות,צבע פריטים,תבנית צבעים +Keywords[hi]=रंग,योजना,कंट्रास्ट,विजेट रंग,रंग योजना +Keywords[hr]=colors,colours,scheme,contrast,Widget colors,Color Scheme,boja,boje,shema,kontrast,Boje widgeta,Shema bojanja +Keywords[hu]=színek,séma,kontraszt,elemszín,színösszeállítás +Keywords[id]=warna,scheme,kontras, warna widget, warna scheme +Keywords[is]=litir,litur,skema,skerpa +Keywords[it]=colori,schema,contrasto,colore widget,colore elementi grafici,schema di colori +Keywords[ja]=色,スキーム,コントラスト,ウィジェット色,色スキーム +Keywords[km]=ពណ៌,គ្រោងការណ៍,កម្រិត​ពណ៌,ពណ៌​របស់​វត្ថុ​មើលឃើញ,គ្រោងការណ៍​ពណ៌ +Keywords[lt]=colors,colours,scheme,contrast,Widget colors,Color Scheme,spalvos,koloritai,schema,kontrastas, Valdiklių spalvos, Spalvų Schema +Keywords[lv]=krāsu,krāsas,shēma,kontrasts,Vidžeta krāsas,Krāsu Shēma +Keywords[mk]=colors,colours,scheme,contrast,Widget colors,Color Scheme,бои,шема,контраст,Шема на бои +Keywords[mn]=Өнгө,Схем,Эрчим,Өнгөний схем,Элемент +Keywords[ms]=warna,warna,skema, kontras, warna Widget,Skema Warna +Keywords[nb]=farger,oppsett,kontrast,elementfarger,fargeoppsett +Keywords[nds]=Klören,Schema,Kontrast,Bedeenelementen,Klöörschema +Keywords[ne]=रङ, रङ्ग, योजना, व्यतिरेक, विजेट रङ, रङ योजना +Keywords[nl]=kleuren,kleur,schema,contrast,widgetkleuren,kleurenschema +Keywords[nn]=fargar,oppsett,kontrast,elementfargar,fargeoppsett +Keywords[nso]=mebala,mebala,leano,phapano,Mebala ya Widget,Leano la Mmala +Keywords[pa]=colors,colours,scheme,contrast,Widget colors,Color Scheme,ਰੰਗ,ਸਕੀਮ +Keywords[pl]=kolory,schemat,kontrast,kolory elementów okienek,schemat kolorów +Keywords[pt]=cores,esquema,esquema,contraste,cores dos elementos,esquema de cor +Keywords[pt_BR]=cores,esquema,contraste,cores de controles,Esquema de cor +Keywords[ro]=culoare,culori,schemă,contrast,componente,schemă de culori +Keywords[rw]=Amabara,amabara,Igishushanyombonera,inyuranyamigaragarire, Amabara y'akabanga,Igishushombonera cy'ibara +Keywords[se]=ivnnit,coahkádusat,vuostálasvuohta,áhtaivnnit,ivdnečoahkádus +Keywords[sk]=farby,schémy,kontrast,farby prvkov,schéma farieb +Keywords[sl]=barva,barve,sheme,kontrast,nadzor gradnikov,barvna shema +Keywords[sr]=боје,шема,контраст,шема боја +Keywords[sr@Latn]=boje,šema,kontrast,šema boja +Keywords[ss]=mibala,mibala,inhlanganisela,kucatsanisa,mibala yesisetjentiswa,kwakheka kwembala +Keywords[sv]=färger,schema,kontrast,Komponentfärger,Färgschema +Keywords[ta]=வண்ணங்கள்,வண்ணங்கள்,திட்டம்,எதிரான,Widget வண்ணங்கள்,வண்ண முறை +Keywords[tg]=colors,colours,scheme,contrast,Widget colors,Color Scheme,рангҳо,рангҳо +Keywords[th]=สี,ชุดสี,ความตัดกันของสี,สีของคอนโทรล +Keywords[tr]=renkler,şema,kontrast,Renk Tablosu +Keywords[uk]=кольори,схема,контрастність,кольори віджетів,схема кольорів +Keywords[uz]=ranglar,qolip,kontrast,vidjet ranglari,rang qolipi +Keywords[uz@cyrillic]=ранглар,қолип,контраст,виджет ранглари,ранг қолипи +Keywords[ven]=mivhala,mivhala,tshikimu,mbambe,Widget mivhala,Tshikimu tsha Muvhala +Keywords[vi]=màu,màu sắc,sắc thái,tương phản,Màu của ô điều khiển,Sắc thái Màu +Keywords[wa]=coleurs,arindjmint,contrasse,coleurs d' ahesse,arindjmint di coleurs,arindjmints d' coleurs +Keywords[xh]=imibala,imibala,udweliso,isiboniso somahluko,Imibala ye widget,Udweliso Olunombala +Keywords[zh_CN]=colors,colours,scheme,contrast,Widget colors,Color Scheme,颜色,方案,对比,部件颜色,配色方案 +Keywords[zh_TW]=colors,colours,scheme,contrast,Widget colors,Color Scheme,顏色,對比,元件顏色,配色 +Keywords[zu]=imibala,imibala,iplani,ukugqama,imibala ye-Widget,Iplani Lombala + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/colors/colorscm.cpp b/kcontrol/colors/colorscm.cpp new file mode 100644 index 000000000..39e5574c2 --- /dev/null +++ b/kcontrol/colors/colorscm.cpp @@ -0,0 +1,980 @@ +// KDE Display color scheme setup module +// +// Copyright (c) Mark Donohoe 1997 +// +// Converted to a kcc module by Matthias Hoelzer 1997 +// Ported to Qt-2.0 by Matthias Ettrich 1999 +// Ported to kcontrol2 by Geert Jansen 1999 +// Made maintainable by Waldo Bastian 2000 + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined Q_WS_X11 && !defined K_WS_QTONLY +#include +#include +#endif + +#include "../krdb/krdb.h" + +#include "colorscm.h" + + +/**** DLL Interface ****/ +typedef KGenericFactory KolorFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_colors, KolorFactory("kcmcolors") ) + +class KColorSchemeEntry { +public: + KColorSchemeEntry(const QString &_path, const QString &_name, bool _local) + : path(_path), name(_name), local(_local) { } + + QString path; + QString name; + bool local; +}; + +class KColorSchemeList : public QPtrList { +public: + KColorSchemeList() + { setAutoDelete(true); } + + int compareItems(QPtrCollection::Item item1, QPtrCollection::Item item2) + { + KColorSchemeEntry *i1 = (KColorSchemeEntry*)item1; + KColorSchemeEntry *i2 = (KColorSchemeEntry*)item2; + if (i1->local != i2->local) + return i1->local ? -1 : 1; + return i1->name.localeAwareCompare(i2->name); + } +}; + +#define SIZE 8 + +// make a 24 * 8 pixmap with the main colors in a scheme +QPixmap mkColorPreview(const WidgetCanvas *cs) +{ + QPixmap group(SIZE*3,SIZE); + QPixmap block(SIZE,SIZE); + group.fill(QColor(0,0,0)); + block.fill(cs->back); bitBlt(&group,0*SIZE,0,&block,0,0,SIZE,SIZE); + block.fill(cs->window); bitBlt(&group,1*SIZE,0,&block,0,0,SIZE,SIZE); + block.fill(cs->aTitle); bitBlt(&group,2*SIZE,0,&block,0,0,SIZE,SIZE); + QPainter p(&group); + p.drawRect(0,0,3*SIZE,SIZE); + return group; +} + +/**** KColorScheme ****/ + +KColorScheme::KColorScheme(QWidget *parent, const char *name, const QStringList &) + : KCModule(KolorFactory::instance(), parent, name) +{ + nSysSchemes = 2; + + setQuickHelp( i18n("

Colors

This module allows you to choose" + " the color scheme used for the KDE desktop. The different" + " elements of the desktop, such as title bars, menu text, etc.," + " are called \"widgets\". You can choose the widget whose" + " color you want to change by selecting it from a list, or by" + " clicking on a graphical representation of the desktop.

" + " You can save color settings as complete color schemes," + " which can also be modified or deleted. KDE comes with several" + " predefined color schemes on which you can base your own.

" + " All KDE applications will obey the selected color scheme." + " Non-KDE applications may also obey some or all of the color" + " settings, if this option is enabled.")); + + KConfig *cfg = new KConfig("kcmdisplayrc"); + cfg->setGroup("X11"); + useRM = cfg->readBoolEntry("useResourceManager", true); + delete cfg; + + cs = new WidgetCanvas( this ); + cs->setCursor( KCursor::handCursor() ); + + // LAYOUT + + QGridLayout *topLayout = new QGridLayout( this, 3, 2, 0, + KDialog::spacingHint() ); + topLayout->setRowStretch(0,0); + topLayout->setRowStretch(1,0); + topLayout->setColStretch(0,1); + topLayout->setColStretch(1,1); + + cs->setFixedHeight(160); + cs->setMinimumWidth(440); + + QWhatsThis::add( cs, i18n("This is a preview of the color settings which" + " will be applied if you click \"Apply\" or \"OK\". You can click on" + " different parts of this preview image. The widget name in the" + " \"Widget color\" box will change to reflect the part of the preview" + " image you clicked.") ); + + connect( cs, SIGNAL( widgetSelected( int ) ), + SLOT( slotWidgetColor( int ) ) ); + connect( cs, SIGNAL( colorDropped( int, const QColor&)), + SLOT( slotColorForWidget( int, const QColor&))); + topLayout->addMultiCellWidget( cs, 0, 0, 0, 1 ); + + QGroupBox *group = new QVGroupBox( i18n("Color Scheme"), this ); + topLayout->addWidget( group, 1, 0 ); + + sList = new KListBox( group ); + mSchemeList = new KColorSchemeList(); + readSchemeNames(); + sList->setCurrentItem( 0 ); + connect(sList, SIGNAL(highlighted(int)), SLOT(slotPreviewScheme(int))); + + QWhatsThis::add( sList, i18n("This is a list of predefined color schemes," + " including any that you may have created. You can preview an existing" + " color scheme by selecting it from the list. The current scheme will" + " be replaced by the selected color scheme.

" + " Warning: if you have not yet applied any changes you may have made" + " to the current scheme, those changes will be lost if you select" + " another color scheme.") ); + + addBt = new QPushButton(i18n("&Save Scheme..."), group); + connect(addBt, SIGNAL(clicked()), SLOT(slotAdd())); + + QWhatsThis::add( addBt, i18n("Press this button if you want to save" + " the current color settings as a color scheme. You will be" + " prompted for a name.") ); + + removeBt = new QPushButton(i18n("R&emove Scheme"), group); + removeBt->setEnabled(FALSE); + connect(removeBt, SIGNAL(clicked()), SLOT(slotRemove())); + + QWhatsThis::add( removeBt, i18n("Press this button to remove the selected" + " color scheme. Note that this button is disabled if you do not have" + " permission to delete the color scheme.") ); + + importBt = new QPushButton(i18n("I&mport Scheme..."), group); + connect(importBt, SIGNAL(clicked()),SLOT(slotImport())); + + QWhatsThis::add( importBt, i18n("Press this button to import a new color" + " scheme. Note that the color scheme will only be available for the" + " current user." )); + + + QBoxLayout *stackLayout = new QVBoxLayout; + topLayout->addLayout(stackLayout, 1, 1); + + group = new QGroupBox(i18n("&Widget Color"), this); + stackLayout->addWidget(group); + QBoxLayout *groupLayout = new QVBoxLayout(group, 10); + groupLayout->addSpacing(10); + + wcCombo = new QComboBox(false, group); + for(int i=0; i < CSM_LAST;i++) + { + wcCombo->insertItem(QString::null); + } + + setColorName(i18n("Inactive Title Bar") , CSM_Inactive_title_bar); + setColorName(i18n("Inactive Title Text"), CSM_Inactive_title_text); + setColorName(i18n("Inactive Title Blend"), CSM_Inactive_title_blend); + setColorName(i18n("Active Title Bar"), CSM_Active_title_bar); + setColorName(i18n("Active Title Text"), CSM_Active_title_text); + setColorName(i18n("Active Title Blend"), CSM_Active_title_blend); + setColorName(i18n("Window Background"), CSM_Background); + setColorName(i18n("Window Text"), CSM_Text); + setColorName(i18n("Selected Background"), CSM_Select_background); + setColorName(i18n("Selected Text"), CSM_Select_text); + setColorName(i18n("Standard Background"), CSM_Standard_background); + setColorName(i18n("Standard Text"), CSM_Standard_text); + setColorName(i18n("Button Background"), CSM_Button_background); + setColorName(i18n("Button Text"), CSM_Button_text); + setColorName(i18n("Active Title Button"), CSM_Active_title_button); + setColorName(i18n("Inactive Title Button"), CSM_Inactive_title_button); + setColorName(i18n("Active Window Frame"), CSM_Active_frame); + setColorName(i18n("Active Window Handle"), CSM_Active_handle); + setColorName(i18n("Inactive Window Frame"), CSM_Inactive_frame); + setColorName(i18n("Inactive Window Handle"), CSM_Inactive_handle); + setColorName(i18n("Link"), CSM_Link); + setColorName(i18n("Followed Link"), CSM_Followed_Link); + setColorName(i18n("Alternate Background in Lists"), CSM_Alternate_background); + + wcCombo->adjustSize(); + connect(wcCombo, SIGNAL(activated(int)), SLOT(slotWidgetColor(int))); + groupLayout->addWidget(wcCombo); + + QWhatsThis::add( wcCombo, i18n("Click here to select an element of" + " the KDE desktop whose color you want to change. You may either" + " choose the \"widget\" here, or click on the corresponding part" + " of the preview image above.") ); + + colorButton = new KColorButton( group ); + connect( colorButton, SIGNAL( changed(const QColor &)), + SLOT(slotSelectColor(const QColor &))); + + groupLayout->addWidget( colorButton ); + + QWhatsThis::add( colorButton, i18n("Click here to bring up a dialog" + " box where you can choose a color for the \"widget\" selected" + " in the above list.") ); + + cbShadeList = new QCheckBox(i18n("Shade sorted column in lists"), this); + stackLayout->addWidget(cbShadeList); + connect(cbShadeList, SIGNAL(toggled(bool)), this, SLOT(slotShadeSortColumnChanged(bool))); + + QWhatsThis::add(cbShadeList, + i18n("Check this box to show the sorted column in a list with a shaded background")); + + group = new QGroupBox( i18n("Con&trast"), this ); + stackLayout->addWidget(group); + + QVBoxLayout *groupLayout2 = new QVBoxLayout(group, 10); + groupLayout2->addSpacing(10); + groupLayout = new QHBoxLayout; + groupLayout2->addLayout(groupLayout); + + sb = new QSlider( QSlider::Horizontal,group,"Slider" ); + sb->setRange( 0, 10 ); + sb->setFocusPolicy( QWidget::StrongFocus ); + connect(sb, SIGNAL(valueChanged(int)), SLOT(sliderValueChanged(int))); + + QWhatsThis::add(sb, i18n("Use this slider to change the contrast level" + " of the current color scheme. Contrast does not affect all of the" + " colors, only the edges of 3D objects.")); + + QLabel *label = new QLabel(sb, i18n("Low Contrast", "Low"), group); + groupLayout->addWidget(label); + groupLayout->addWidget(sb, 10); + label = new QLabel(group); + label->setText(i18n("High Contrast", "High")); + groupLayout->addWidget( label ); + + cbExportColors = new QCheckBox(i18n("Apply colors to &non-KDE applications"), this); + topLayout->addMultiCellWidget( cbExportColors, 2, 2, 0, 1 ); + connect(cbExportColors, SIGNAL(toggled(bool)), this, SLOT(changed())); + + QWhatsThis::add(cbExportColors, i18n("Check this box to apply the" + " current color scheme to non-KDE applications.")); + + load(); + + KAboutData* about = new KAboutData("kcmcolors", I18N_NOOP("Colors"), 0, 0, + KAboutData::License_GPL, + I18N_NOOP("(c) 1997-2005 Colors Developers"), 0, 0); + about->addAuthor("Mark Donohoe", 0, 0); + about->addAuthor("Matthias Hoelzer", 0, 0); + about->addAuthor("Matthias Ettrich", 0, 0); + about->addAuthor("Geert Jansen", 0, 0); + about->addAuthor("Waldo Bastian", 0, 0); + setAboutData( about ); +} + + +KColorScheme::~KColorScheme() +{ + delete mSchemeList; +} + +void KColorScheme::setColorName( const QString &name, int id ) +{ + wcCombo->changeItem(name, id); + cs->addToolTip( id, name ); +} + +void KColorScheme::load() +{ + load( false ); +} +void KColorScheme::load( bool useDefaults ) +{ + KConfig *config = KGlobal::config(); + config->setReadDefaults( useDefaults ); + config->setGroup("KDE"); + sCurrentScheme = config->readEntry("colorScheme"); + + sList->setCurrentItem(findSchemeByName(sCurrentScheme)); + readScheme(0); + + cbShadeList->setChecked(cs->shadeSortColumn); + + cs->drawSampleWidgets(); + slotWidgetColor(wcCombo->currentItem()); + sb->blockSignals(true); + sb->setValue(cs->contrast); + sb->blockSignals(false); + + KConfig cfg("kcmdisplayrc", true, false); + cfg.setGroup("X11"); + bool exportColors = cfg.readBoolEntry("exportKDEColors", true); + cbExportColors->setChecked(exportColors); + + emit changed( useDefaults ); +} + + +void KColorScheme::save() +{ + KConfig *cfg = KGlobal::config(); + cfg->setGroup( "General" ); + cfg->writeEntry("background", cs->back, true, true); + cfg->writeEntry("selectBackground", cs->select, true, true); + cfg->writeEntry("foreground", cs->txt, true, true); + cfg->writeEntry("windowForeground", cs->windowTxt, true, true); + cfg->writeEntry("windowBackground", cs->window, true, true); + cfg->writeEntry("selectForeground", cs->selectTxt, true, true); + cfg->writeEntry("buttonBackground", cs->button, true, true); + cfg->writeEntry("buttonForeground", cs->buttonTxt, true, true); + cfg->writeEntry("linkColor", cs->link, true, true); + cfg->writeEntry("visitedLinkColor", cs->visitedLink, true, true); + cfg->writeEntry("alternateBackground", cs->alternateBackground, true, true); + + cfg->writeEntry("shadeSortColumn", cs->shadeSortColumn, true, true); + + cfg->setGroup( "WM" ); + cfg->writeEntry("activeForeground", cs->aTxt, true, true); + cfg->writeEntry("inactiveBackground", cs->iaTitle, true, true); + cfg->writeEntry("inactiveBlend", cs->iaBlend, true, true); + cfg->writeEntry("activeBackground", cs->aTitle, true, true); + cfg->writeEntry("activeBlend", cs->aBlend, true, true); + cfg->writeEntry("inactiveForeground", cs->iaTxt, true, true); + cfg->writeEntry("activeTitleBtnBg", cs->aTitleBtn, true, true); + cfg->writeEntry("inactiveTitleBtnBg", cs->iTitleBtn, true, true); + cfg->writeEntry("frame", cs->aFrame, true, true); + cfg->writeEntry("inactiveFrame", cs->iaFrame, true, true); + cfg->writeEntry("handle", cs->aHandle, true, true); + cfg->writeEntry("inactiveHandle", cs->iaHandle, true, true); + + cfg->setGroup( "KDE" ); + cfg->writeEntry("contrast", cs->contrast, true, true); + cfg->writeEntry("colorScheme", sCurrentScheme, true, true); + cfg->sync(); + + // KDE-1.x support + KSimpleConfig *config = + new KSimpleConfig( QDir::homeDirPath() + "/.kderc" ); + config->setGroup( "General" ); + config->writeEntry("background", cs->back ); + config->writeEntry("selectBackground", cs->select ); + config->writeEntry("foreground", cs->txt, true, true); + config->writeEntry("windowForeground", cs->windowTxt ); + config->writeEntry("windowBackground", cs->window ); + config->writeEntry("selectForeground", cs->selectTxt ); + config->sync(); + delete config; + + KConfig cfg2("kcmdisplayrc", false, false); + cfg2.setGroup("X11"); + bool exportColors = cbExportColors->isChecked(); + cfg2.writeEntry("exportKDEColors", exportColors); + cfg2.sync(); + QApplication::syncX(); + + // Notify all qt-only apps of the KDE palette changes + uint flags = KRdbExportQtColors; + if ( exportColors ) + flags |= KRdbExportColors; + else + { +#if defined Q_WS_X11 && !defined K_WS_QTONLY + // Undo the property xrdb has placed on the root window (if any), + // i.e. remove all entries, including ours + XDeleteProperty( qt_xdisplay(), qt_xrootwin(), XA_RESOURCE_MANAGER ); +#endif + } + runRdb( flags ); // Save the palette to qtrc for KStyles + + // Notify all KDE applications + KIPC::sendMessageAll(KIPC::PaletteChanged); + + // Update the "Current Scheme" + int current = findSchemeByName(sCurrentScheme); + sList->setCurrentItem(0); + readScheme(0); + QPixmap preview = mkColorPreview(cs); + sList->changeItem(preview, sList->text(0), 0); + sList->setCurrentItem(current); + readScheme(current); + preview = mkColorPreview(cs); + sList->changeItem(preview, sList->text(current), current); + + emit changed(false); +} + + +void KColorScheme::defaults() +{ + load( true ); +} + +void KColorScheme::sliderValueChanged( int val ) +{ + cs->contrast = val; + cs->drawSampleWidgets(); + + sCurrentScheme = QString::null; + + emit changed(true); +} + + +void KColorScheme::slotSave( ) +{ + KColorSchemeEntry *entry = mSchemeList->at(sList->currentItem()-nSysSchemes); + if (!entry) return; + sCurrentScheme = entry->path; + KSimpleConfig *config = new KSimpleConfig(sCurrentScheme ); + int i = sCurrentScheme.findRev('/'); + if (i >= 0) + sCurrentScheme = sCurrentScheme.mid(i+1); + + config->setGroup("Color Scheme" ); + config->writeEntry("background", cs->back ); + config->writeEntry("selectBackground", cs->select ); + config->writeEntry("foreground", cs->txt ); + config->writeEntry("activeForeground", cs->aTxt ); + config->writeEntry("inactiveBackground", cs->iaTitle ); + config->writeEntry("inactiveBlend", cs->iaBlend ); + config->writeEntry("activeBackground", cs->aTitle ); + config->writeEntry("activeBlend", cs->aBlend ); + config->writeEntry("inactiveForeground", cs->iaTxt ); + config->writeEntry("windowForeground", cs->windowTxt ); + config->writeEntry("windowBackground", cs->window ); + config->writeEntry("selectForeground", cs->selectTxt ); + config->writeEntry("contrast", cs->contrast ); + config->writeEntry("buttonForeground", cs->buttonTxt ); + config->writeEntry("buttonBackground", cs->button ); + config->writeEntry("activeTitleBtnBg", cs->aTitleBtn); + config->writeEntry("inactiveTitleBtnBg", cs->iTitleBtn); + config->writeEntry("frame", cs->aFrame); + config->writeEntry("inactiveFrame", cs->iaFrame); + config->writeEntry("handle", cs->aHandle); + config->writeEntry("inactiveHandle", cs->iaHandle); + config->writeEntry("linkColor", cs->link); + config->writeEntry("visitedLinkColor", cs->visitedLink); + config->writeEntry("alternateBackground", cs->alternateBackground); + config->writeEntry("shadeSortColumn", cs->shadeSortColumn); + + delete config; +} + + +void KColorScheme::slotRemove() +{ + uint ind = sList->currentItem(); + KColorSchemeEntry *entry = mSchemeList->at(ind-nSysSchemes); + if (!entry) return; + + if (unlink(QFile::encodeName(entry->path).data())) { + KMessageBox::error( 0, + i18n("This color scheme could not be removed.\n" + "Perhaps you do not have permission to alter the file" + "system where the color scheme is stored." )); + return; + } + + sList->removeItem(ind); + mSchemeList->remove(entry); + + ind = sList->currentItem(); + entry = mSchemeList->at(ind-nSysSchemes); + if (!entry) return; + removeBt->setEnabled(entry ? entry->local : false); +} + + +/* + * Add a local color scheme. + */ +void KColorScheme::slotAdd() +{ + QString sName; + if (sList->currentItem() >= nSysSchemes) + sName = sList->currentText(); + + QString sFile; + + bool valid = false; + bool ok; + int exists = -1; + + while (!valid) + { + sName = KInputDialog::getText( i18n( "Save Color Scheme" ), + i18n( "Enter a name for the color scheme:" ), sName, &ok, this ); + if (!ok) + return; + + sName = sName.simplifyWhiteSpace(); + sFile = sName; + + int i = 0; + + exists = -1; + // Check if it's already there + for (i=0; i < (int) sList->count(); i++) + { + if (sName == sList->text(i)) + { + exists = i; + int result = KMessageBox::warningContinueCancel( this, + i18n("A color scheme with the name '%1' already exists.\n" + "Do you want to overwrite it?\n").arg(sName), + i18n("Save Color Scheme"), + i18n("Overwrite")); + if (result == KMessageBox::Cancel) + break; + } + } + if (i == (int) sList->count()) + valid = true; + } + + disconnect(sList, SIGNAL(highlighted(int)), this, + SLOT(slotPreviewScheme(int))); + + if (exists != -1) + { + sList->setFocus(); + sList->setCurrentItem(exists); + } + else + { + sFile = KGlobal::dirs()->saveLocation("data", "kdisplay/color-schemes/") + sFile + ".kcsrc"; + KSimpleConfig *config = new KSimpleConfig(sFile); + config->setGroup( "Color Scheme"); + config->writeEntry("Name", sName); + delete config; + + insertEntry(sFile, sName); + + } + slotSave(); + + QPixmap preview = mkColorPreview(cs); + int current = sList->currentItem(); + sList->changeItem(preview, sList->text(current), current); + connect(sList, SIGNAL(highlighted(int)), SLOT(slotPreviewScheme(int))); + slotPreviewScheme(current); +} + +void KColorScheme::slotImport() +{ + QString location = locateLocal( "data", "kdisplay/color-schemes/" ); + + KURL file ( KFileDialog::getOpenFileName(QString::null, "*.kcsrc", this) ); + if ( file.isEmpty() ) + return; + + //kdDebug() << "Location: " << location << endl; + if (!KIO::NetAccess::file_copy(file, KURL( location+file.fileName( false ) ) ) ) + { + KMessageBox::error(this, KIO::NetAccess::lastErrorString(),i18n("Import failed.")); + return; + } + else + { + QString sFile = location + file.fileName( false ); + KSimpleConfig *config = new KSimpleConfig(sFile); + config->setGroup( "Color Scheme"); + QString sName = config->readEntry("Name", i18n("Untitled Theme")); + delete config; + + + insertEntry(sFile, sName); + QPixmap preview = mkColorPreview(cs); + int current = sList->currentItem(); + sList->changeItem(preview, sList->text(current), current); + connect(sList, SIGNAL(highlighted(int)), SLOT(slotPreviewScheme(int))); + slotPreviewScheme(current); + } +} + +QColor &KColorScheme::color(int index) +{ + switch(index) { + case CSM_Inactive_title_bar: + return cs->iaTitle; + case CSM_Inactive_title_text: + return cs->iaTxt; + case CSM_Inactive_title_blend: + return cs->iaBlend; + case CSM_Active_title_bar: + return cs->aTitle; + case CSM_Active_title_text: + return cs->aTxt; + case CSM_Active_title_blend: + return cs->aBlend; + case CSM_Background: + return cs->back; + case CSM_Text: + return cs->txt; + case CSM_Select_background: + return cs->select; + case CSM_Select_text: + return cs->selectTxt; + case CSM_Standard_background: + return cs->window; + case CSM_Standard_text: + return cs->windowTxt; + case CSM_Button_background: + return cs->button; + case CSM_Button_text: + return cs->buttonTxt; + case CSM_Active_title_button: + return cs->aTitleBtn; + case CSM_Inactive_title_button: + return cs->iTitleBtn; + case CSM_Active_frame: + return cs->aFrame; + case CSM_Active_handle: + return cs->aHandle; + case CSM_Inactive_frame: + return cs->iaFrame; + case CSM_Inactive_handle: + return cs->iaHandle; + case CSM_Link: + return cs->link; + case CSM_Followed_Link: + return cs->visitedLink; + case CSM_Alternate_background: + return cs->alternateBackground; + } + + assert(0); // Should never be here! + return cs->iaTxt; // Silence compiler +} + + +void KColorScheme::slotSelectColor(const QColor &col) +{ + int selection; + selection = wcCombo->currentItem(); + + // Adjust the alternate background color if the standard color changes + // Only if the previous alternate color was not a user-configured one + // of course + if ( selection == CSM_Standard_background && + color(CSM_Alternate_background) == + KGlobalSettings::calculateAlternateBackgroundColor( + color(CSM_Standard_background) ) ) + { + color(CSM_Alternate_background) = + KGlobalSettings::calculateAlternateBackgroundColor( col ); + } + + color(selection) = col; + + cs->drawSampleWidgets(); + + sCurrentScheme = QString::null; + + emit changed(true); +} + + +void KColorScheme::slotWidgetColor(int indx) +{ + if (indx < 0) + indx = 0; + if (wcCombo->currentItem() != indx) + wcCombo->setCurrentItem( indx ); + + // Do not emit KCModule::changed() + colorButton->blockSignals( true ); + + QColor col = color(indx); + colorButton->setColor( col ); + colorPushColor = col; + + colorButton->blockSignals( false ); +} + + +void KColorScheme::slotColorForWidget(int indx, const QColor& col) +{ + if (wcCombo->currentItem() != indx) + wcCombo->setCurrentItem( indx ); + + slotSelectColor(col); +} + +void KColorScheme::slotShadeSortColumnChanged(bool b) +{ + cs->shadeSortColumn = b; + sCurrentScheme = QString::null; + + emit changed(true); +} + +/* + * Read a color scheme into "cs". + * + * KEEP IN SYNC with thememgr! + */ +void KColorScheme::readScheme( int index ) +{ + KConfigBase* config; + + QColor widget(239, 239, 239); + QColor kde34Blue(103,141,178); + QColor inactiveBackground(157,170,186); + QColor activeBackground(65,142,220); + QColor inactiveForeground(221,221,221); + QColor activeBlend(107,145,184); + QColor inactiveBlend(157,170,186); + QColor activeTitleBtnBg(220,220,220); + QColor inactiveTitleBtnBg(220,220,220); + QColor alternateBackground(237,244,249); + + QColor button; + if (QPixmap::defaultDepth() > 8) + button.setRgb(221, 223, 228 ); + else + button.setRgb(220, 220, 220); + + QColor link(0, 0, 238); + QColor visitedLink(82, 24,139); + + // note: keep default color scheme in sync with default Current Scheme + if (index == 1) { + sCurrentScheme = ""; + cs->txt = black; + cs->back = widget; + cs->select = kde34Blue; + cs->selectTxt = white; + cs->window = white; + cs->windowTxt = black; + cs->iaTitle = inactiveBackground; + cs->iaTxt = inactiveForeground; + cs->iaBlend = inactiveBlend; + cs->aTitle = activeBackground; + cs->aTxt = white; + cs->aBlend = activeBlend; + cs->button = button; + cs->buttonTxt = black; + cs->aTitleBtn = activeTitleBtnBg; + cs->iTitleBtn = inactiveTitleBtnBg; + cs->aFrame = cs->back; + cs->aHandle = cs->back; + cs->iaFrame = cs->back; + cs->iaHandle = cs->back; + cs->link = link; + cs->visitedLink = visitedLink; + cs->alternateBackground = alternateBackground; + + cs->contrast = 7; + cs->shadeSortColumn = KDE_DEFAULT_SHADE_SORT_COLUMN; + + return; + } + + if (index == 0) { + // Current scheme + config = KGlobal::config(); + config->setGroup("General"); + } else { + // Open scheme file + KColorSchemeEntry *entry = mSchemeList->at(sList->currentItem()-nSysSchemes); + if (!entry) return; + sCurrentScheme = entry->path; + config = new KSimpleConfig(sCurrentScheme, true); + config->setGroup("Color Scheme"); + int i = sCurrentScheme.findRev('/'); + if (i >= 0) + sCurrentScheme = sCurrentScheme.mid(i+1); + } + + cs->shadeSortColumn = config->readBoolEntry( "shadeSortColumn", KDE_DEFAULT_SHADE_SORT_COLUMN ); + + // note: defaults should be the same as the KDE default + cs->txt = config->readColorEntry( "foreground", &black ); + cs->back = config->readColorEntry( "background", &widget ); + cs->select = config->readColorEntry( "selectBackground", &kde34Blue ); + cs->selectTxt = config->readColorEntry( "selectForeground", &white ); + cs->window = config->readColorEntry( "windowBackground", &white ); + cs->windowTxt = config->readColorEntry( "windowForeground", &black ); + cs->button = config->readColorEntry( "buttonBackground", &button ); + cs->buttonTxt = config->readColorEntry( "buttonForeground", &black ); + cs->link = config->readColorEntry( "linkColor", &link ); + cs->visitedLink = config->readColorEntry( "visitedLinkColor", &visitedLink ); + QColor alternate = KGlobalSettings::calculateAlternateBackgroundColor(cs->window); + cs->alternateBackground = config->readColorEntry( "alternateBackground", &alternate ); + + if (index == 0) + config->setGroup( "WM" ); + + cs->iaTitle = config->readColorEntry("inactiveBackground", &inactiveBackground); + cs->iaTxt = config->readColorEntry("inactiveForeground", &inactiveForeground); + cs->iaBlend = config->readColorEntry("inactiveBlend", &inactiveBackground); + cs->iaFrame = config->readColorEntry("inactiveFrame", &cs->back); + cs->iaHandle = config->readColorEntry("inactiveHandle", &cs->back); + cs->aTitle = config->readColorEntry("activeBackground", &activeBackground); + cs->aTxt = config->readColorEntry("activeForeground", &white); + cs->aBlend = config->readColorEntry("activeBlend", &activeBlend); + cs->aFrame = config->readColorEntry("frame", &cs->back); + cs->aHandle = config->readColorEntry("handle", &cs->back); + // hack - this is all going away. For now just set all to button bg + cs->aTitleBtn = config->readColorEntry("activeTitleBtnBg", &activeTitleBtnBg); + cs->iTitleBtn = config->readColorEntry("inactiveTitleBtnBg", &inactiveTitleBtnBg); + + if (index == 0) + config->setGroup( "KDE" ); + + cs->contrast = config->readNumEntry( "contrast", 7 ); + if (index != 0) + delete config; +} + + +/* + * Get all installed color schemes. + */ +void KColorScheme::readSchemeNames() +{ + mSchemeList->clear(); + sList->clear(); + // Always a current and a default scheme + sList->insertItem( i18n("Current Scheme"), 0 ); + sList->insertItem( i18n("KDE Default"), 1 ); + nSysSchemes = 2; + + // Global + local schemes + QStringList list = KGlobal::dirs()->findAllResources("data", + "kdisplay/color-schemes/*.kcsrc", false, true); + + // And add them + for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) { + KSimpleConfig *config = new KSimpleConfig(*it); + config->setGroup("Color Scheme"); + QString str = config->readEntry("Name"); + if (str.isEmpty()) { + str = config->readEntry("name"); + if (str.isEmpty()) + continue; + } + mSchemeList->append(new KColorSchemeEntry(*it, str, !config->isImmutable())); + delete config; + } + + mSchemeList->sort(); + + for(KColorSchemeEntry *entry = mSchemeList->first(); entry; entry = mSchemeList->next()) + { + sList->insertItem(entry->name); + } + + for (uint i = 0; i < (nSysSchemes + mSchemeList->count()); i++) + { + sList->setCurrentItem(i); + readScheme(i); + QPixmap preview = mkColorPreview(cs); + sList->changeItem(preview, sList->text(i), i); + } + +} + +/* + * Find scheme based on filename + */ +int KColorScheme::findSchemeByName(const QString &scheme) +{ + if (scheme.isEmpty()) + return 0; + if (scheme == "") + return 1; + + QString search = scheme; + int i = search.findRev('/'); + if (i >= 0) + search = search.mid(i+1); + + i = 0; + + for(KColorSchemeEntry *entry = mSchemeList->first(); entry; entry = mSchemeList->next()) + { + KURL url; + url.setPath(entry->path); + if (url.fileName() == search) + return i+nSysSchemes; + i++; + } + + return 0; +} + + +void KColorScheme::slotPreviewScheme(int indx) +{ + readScheme(indx); + + // Set various appropriate for the scheme + + cbShadeList->setChecked(cs->shadeSortColumn); + + cs->drawSampleWidgets(); + sb->blockSignals(true); + sb->setValue(cs->contrast); + sb->blockSignals(false); + slotWidgetColor(wcCombo->currentItem()); + if (indx < nSysSchemes) + removeBt->setEnabled(false); + else + { + KColorSchemeEntry *entry = mSchemeList->at(indx-nSysSchemes); + removeBt->setEnabled(entry ? entry->local : false); + } + + emit changed((indx != 0)); +} + + +/* this function should dissappear: colorscm should work directly on a Qt palette, since + this will give us much more cusomization with qt-2.0. + */ +QPalette KColorScheme::createPalette() +{ + QColorGroup disabledgrp(cs->windowTxt, cs->back, cs->back.light(150), + cs->back.dark(), cs->back.dark(120), cs->back.dark(120), + cs->window); + + QColorGroup colgrp(cs->windowTxt, cs->back, cs->back.light(150), + cs->back.dark(), cs->back.dark(120), cs->txt, cs->window); + + colgrp.setColor(QColorGroup::Highlight, cs->select); + colgrp.setColor(QColorGroup::HighlightedText, cs->selectTxt); + colgrp.setColor(QColorGroup::Button, cs->button); + colgrp.setColor(QColorGroup::ButtonText, cs->buttonTxt); + return QPalette( colgrp, disabledgrp, colgrp); +} + +void KColorScheme::insertEntry(const QString &sFile, const QString &sName) +{ + KColorSchemeEntry *newEntry = new KColorSchemeEntry(sFile, sName, true); + mSchemeList->inSort(newEntry); + int newIndex = mSchemeList->findRef(newEntry)+nSysSchemes; + sList->insertItem(sName, newIndex); + sList->setCurrentItem(newIndex); +} + +#include "colorscm.moc" diff --git a/kcontrol/colors/colorscm.h b/kcontrol/colors/colorscm.h new file mode 100644 index 000000000..23b47c6a0 --- /dev/null +++ b/kcontrol/colors/colorscm.h @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------------- +// +// KDE Display color scheme setup module +// +// Copyright (c) Mark Donohoe 1997 +// + +#ifndef __COLORSCM_H__ +#define __COLORSCM_H__ + +#include +#include +#include +#include + +#include +#include + +#include "widgetcanvas.h" + +class QSlider; +class QComboBox; +class QPushButton; +class QCheckBox; +class QResizeEvent; +class KLineEdit; +class QPalette; +class KListBox; +class KColorButton; +class KConfig; +class KStdDirs; +class KColorSchemeList; + +/** + * The Desktop/Colors tab in kcontrol. + */ +class KColorScheme: public KCModule +{ + Q_OBJECT + +public: + KColorScheme(QWidget *parent, const char *name, const QStringList &); + ~KColorScheme(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +private slots: + void sliderValueChanged(int val); + void slotSave(); + void slotAdd(); + void slotRemove(); + void slotImport(); + void slotSelectColor(const QColor &col); + void slotWidgetColor(int); + void slotColorForWidget(int, const QColor &); + void slotPreviewScheme(int); + void slotShadeSortColumnChanged(bool); + +private: + void setColorName( const QString &name, int id ); + void readScheme(int index=0); + void readSchemeNames(); + void insertEntry(const QString &sFile, const QString &sName); + int findSchemeByName(const QString &scheme); + QPalette createPalette(); + + QColor &color(int index); + + int nSysSchemes; + bool useRM; + + QColor colorPushColor; + QSlider *sb; + QComboBox *wcCombo; + QPushButton *addBt, *removeBt, *importBt; + KListBox *sList; + KColorSchemeList *mSchemeList; + QString sCurrentScheme; + + KColorButton *colorButton; + WidgetCanvas *cs; + + QCheckBox *cbExportColors; + QCheckBox *cbShadeList; +}; + +#endif diff --git a/kcontrol/colors/stdclient_bitmaps.h b/kcontrol/colors/stdclient_bitmaps.h new file mode 100644 index 000000000..912040fe2 --- /dev/null +++ b/kcontrol/colors/stdclient_bitmaps.h @@ -0,0 +1,128 @@ +#ifndef __STDCLIENT_BITMAPS_H +#define __STDCLIENT_BITMAPS_H + +/** + * The standard client has the capability to color it's titlebar buttons + * according to the new color scheme. In order to do this it needs a bitmap + * for each shade which it draws into a pixmap with the appropriate color. + * These are all the bitmaps. + */ + +static unsigned char close_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x04, 0x08, 0x08, 0x04, 0x10, 0x02, + 0x20, 0x01, 0x40, 0x00, 0x40, 0x00, 0x20, 0x01, 0x10, 0x02, 0x08, 0x04, + 0x04, 0x08, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char close_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x18, 0x30, 0x30, 0x18, 0x60, 0x0c, + 0xc0, 0x06, 0x80, 0x03, 0x80, 0x03, 0xc0, 0x06, 0x60, 0x0c, 0x30, 0x18, + 0x18, 0x30, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char close_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x1c, 0x38, 0x38, 0x1c, 0x70, 0x0e, + 0xe0, 0x07, 0xc0, 0x03, 0xc0, 0x03, 0xe0, 0x07, 0x70, 0x0e, 0x38, 0x1c, + 0x1c, 0x38, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char iconify_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x03, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char iconify_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + +static unsigned char iconify_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x03, 0x80, 0x02, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char maximize_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x04, 0x00, 0x04, 0x08, 0x04, 0x08, + 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0xf4, 0x0f, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char maximize_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x08, 0x10, 0x08, 0x10, + 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, + 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char maximize_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0xfc, 0x1f, 0x0c, 0x18, 0x0c, 0x18, + 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, 0xfc, 0x1f, + 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char maximizedown_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x08, 0x10, + 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, + 0x08, 0x10, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char maximizedown_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x04, 0x00, 0x04, 0x08, + 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, + 0xf4, 0x0f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char maximizedown_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0xfc, 0x1f, 0x0c, 0x18, + 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x18, + 0xfc, 0x1f, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char menu_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x3f, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char menu_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char menu_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x3f, 0x04, 0x20, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pindown_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x1f, 0xa0, 0x03, + 0xb0, 0x01, 0x30, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pindown_gray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x80, 0x07, 0xc0, 0x03, 0xe0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pindown_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x10, 0x70, 0x20, 0x50, 0x20, + 0x48, 0x30, 0xc8, 0x38, 0x08, 0x1f, 0x08, 0x18, 0x10, 0x1c, 0x10, 0x0e, + 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pindown_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x1f, 0xf0, 0x3f, 0xf0, 0x3f, + 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0x0f, + 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pinup_white_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x11, + 0x3f, 0x15, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pinup_gray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x0a, 0xbf, 0x0a, 0x80, 0x15, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pinup_dgray_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x40, 0x31, 0x40, 0x2e, + 0x40, 0x20, 0x40, 0x20, 0x7f, 0x2a, 0x40, 0x3f, 0xc0, 0x31, 0xc0, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned char pinup_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0xc0, 0x31, 0xc0, 0x3f, + 0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0xc0, 0x3f, 0xc0, 0x31, 0xc0, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + +#endif diff --git a/kcontrol/colors/widgetcanvas.cpp b/kcontrol/colors/widgetcanvas.cpp new file mode 100644 index 000000000..42adcc3bb --- /dev/null +++ b/kcontrol/colors/widgetcanvas.cpp @@ -0,0 +1,596 @@ +// +// A special widget which draws a sample of KDE widgets +// It is used to preview color schemes +// +// Copyright (c) Mark Donohoe 1998 +// + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "widgetcanvas.h" +#include "widgetcanvas.moc" +#include "stdclient_bitmaps.h" + +static QPixmap* close_pix = 0; +static QPixmap* maximize_pix = 0; +static QPixmap* minimize_pix = 0; +static QPixmap* normalize_pix = 0; +static QPixmap* pinup_pix = 0; +static QPixmap* pindown_pix = 0; +static QPixmap* menu_pix = 0; + +static QPixmap* dis_close_pix = 0; +static QPixmap* dis_maximize_pix = 0; +static QPixmap* dis_minimize_pix = 0; +static QPixmap* dis_normalize_pix = 0; +static QPixmap* dis_pinup_pix = 0; +static QPixmap* dis_pindown_pix = 0; +static QPixmap* dis_menu_pix = 0; + + +WidgetCanvas::WidgetCanvas( QWidget *parent, const char *name ) + : QWidget( parent, name ), shadeSortColumn( true ) +{ + setMouseTracking( true ); + setBackgroundMode( NoBackground ); + setAcceptDrops( true); + setMinimumSize(200, 100); + currentHotspot = -1; +} + +void WidgetCanvas::addToolTip( int area, const QString &tip ) +{ + tips.insert(area, tip); +} + +void WidgetCanvas::paintEvent(QPaintEvent *) +{ + bitBlt( this, 0, 0, &smplw ); +} + +void WidgetCanvas::mousePressEvent( QMouseEvent *me ) +{ + for ( int i = 0; i < MAX_HOTSPOTS; i++ ) + if ( hotspots[i].rect.contains( me->pos() ) ) { + emit widgetSelected( hotspots[i].number ); + return; + } +} + +void WidgetCanvas::mouseMoveEvent( QMouseEvent *me ) +{ + for ( int i = 0; i < MAX_HOTSPOTS; i++ ) + if ( hotspots[i].rect.contains( me->pos() ) ) { + if ( i != currentHotspot ) { + QString tip = tips[hotspots[i].number]; + QToolTip::remove( this ); + QToolTip::add( this, tip ); + currentHotspot = i; + } + return; + } + + QToolTip::remove( this ); +} + +void WidgetCanvas::dropEvent( QDropEvent *e) +{ + QColor c; + if (KColorDrag::decode( e, c)) { + for ( int i = 0; i < MAX_HOTSPOTS; i++ ) + if ( hotspots[i].rect.contains( e->pos() ) ) { + emit colorDropped( hotspots[i].number, c); + return; + } + } +} + + +void WidgetCanvas::dragEnterEvent( QDragEnterEvent *e) +{ + e->accept( KColorDrag::canDecode( e)); +} + +void WidgetCanvas::paletteChange(const QPalette &) +{ + drawSampleWidgets(); +} + +void WidgetCanvas::resizeEvent(QResizeEvent *) +{ + drawSampleWidgets(); +} + +/* + * This is necessary because otherwise the scrollbar in drawSampleWidgets() + * doesn't show the first time. + */ +void WidgetCanvas::showEvent(QShowEvent *) +{ + drawSampleWidgets(); +} + +void WidgetCanvas::resetTitlebarPixmaps(const QColor &actMed, + const QColor &disMed) +{ + if(close_pix) delete close_pix; + if(maximize_pix) delete maximize_pix; + if(minimize_pix) delete minimize_pix; + if(normalize_pix) delete normalize_pix; + if(pinup_pix) delete pinup_pix; + if(pindown_pix) delete pindown_pix; + if(menu_pix) delete menu_pix; + + if(dis_close_pix) delete dis_close_pix; + if(dis_maximize_pix) delete dis_maximize_pix; + if(dis_minimize_pix) delete dis_minimize_pix; + if(dis_normalize_pix) delete dis_normalize_pix; + if(dis_pinup_pix) delete dis_pinup_pix; + if(dis_pindown_pix) delete dis_pindown_pix; + if(dis_menu_pix) delete dis_menu_pix; + + QPainter pact, pdis; + QBitmap bitmap; + QColor actHigh = actMed.light(150); + QColor actLow = actMed.dark(120); + QColor disHigh = disMed.light(150); + QColor disLow = disMed.dark(120); + + close_pix = new QPixmap(16, 16); + dis_close_pix = new QPixmap(16, 16); + pact.begin(close_pix); pdis.begin(dis_close_pix); + bitmap = QBitmap(16, 16, close_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, close_dgray_bits, true); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, close_mask_bits, true); + close_pix->setMask(bitmap); dis_close_pix->setMask(bitmap); + + minimize_pix = new QPixmap(16, 16); + dis_minimize_pix = new QPixmap(16, 16); + pact.begin(minimize_pix); pdis.begin(dis_minimize_pix); + bitmap = QBitmap(16, 16, iconify_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, iconify_dgray_bits, true); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, iconify_mask_bits, true); + minimize_pix->setMask(bitmap); dis_minimize_pix->setMask(bitmap); + + maximize_pix = new QPixmap(16, 16); + dis_maximize_pix = new QPixmap(16, 16); + pact.begin(maximize_pix); pdis.begin(dis_maximize_pix); + bitmap = QBitmap(16, 16, maximize_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, maximize_dgray_bits, true); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, maximize_mask_bits, true); + maximize_pix->setMask(bitmap); dis_maximize_pix->setMask(bitmap); + + normalize_pix = new QPixmap(16, 16); + dis_normalize_pix = new QPixmap(16, 16); + pact.begin(normalize_pix); pdis.begin(dis_normalize_pix); + bitmap = QBitmap(16, 16, maximizedown_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, maximizedown_dgray_bits, true); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, maximizedown_mask_bits, true); + normalize_pix->setMask(bitmap); dis_normalize_pix->setMask(bitmap); + + menu_pix = new QPixmap(16, 16); + dis_menu_pix = new QPixmap(16, 16); + pact.begin(menu_pix); pdis.begin(dis_menu_pix); + bitmap = QBitmap(16, 16, menu_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, menu_dgray_bits, true); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, menu_mask_bits, true); + menu_pix->setMask(bitmap); dis_menu_pix->setMask(bitmap); + + pinup_pix = new QPixmap(16, 16); + dis_pinup_pix = new QPixmap(16, 16); + pact.begin(pinup_pix); pdis.begin(dis_pinup_pix); + bitmap = QBitmap(16, 16, pinup_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, pinup_gray_bits, true); + pact.setPen(actMed); pdis.setPen(disMed); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, pinup_dgray_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, pinup_mask_bits, true); + pinup_pix->setMask(bitmap); dis_pinup_pix->setMask(bitmap); + + pindown_pix = new QPixmap(16, 16); + dis_pindown_pix = new QPixmap(16, 16); + pact.begin(pindown_pix); pdis.begin(dis_pindown_pix); + bitmap = QBitmap(16, 16, pindown_white_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actHigh); pdis.setPen(disHigh); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, pindown_gray_bits, true); + pact.setPen(actMed); pdis.setPen(disMed); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + bitmap = QBitmap(16, 16, pindown_dgray_bits, true); + bitmap.setMask(bitmap); + pact.setPen(actLow); pdis.setPen(disLow); + pact.drawPixmap(0, 0, bitmap); + pdis.drawPixmap(0, 0, bitmap); + pact.end(); pdis.end(); + bitmap = QBitmap(16, 16, pindown_mask_bits, true); + pindown_pix->setMask(bitmap); dis_pindown_pix->setMask(bitmap); + +} + +void WidgetCanvas::drawSampleWidgets() +{ + int textLen, tmp; + int highlightVal, lowlightVal; + + KConfig * c = new KConfig("kcmfonts"); + + // Keep in sync with kglobalsettings. + + QFont windowFontGuess(KGlobalSettings::generalFont().family(), 12, QFont::SansSerif, true); + windowFontGuess.setPixelSize(12); + + c->setGroup("WM"); + QFont windowFont = c->readFontEntry("activeFont", &windowFontGuess); + + c->setGroup("General"); + QFont defaultMenuFont = KGlobalSettings::menuFont(); + QFont menuFont = c->readFontEntry("menuFont", &defaultMenuFont); + + delete c; + c = 0; + + // Calculate the highlight and lowloght from contrast value and create + // color group from color scheme. + + highlightVal=100+(2*contrast+4)*16/10; + lowlightVal=100+(2*contrast+4)*10; + + QColorGroup cg( txt, back, + back.light(highlightVal), + back.dark(lowlightVal), + back.dark(120), + txt, window ); + + // We will need this brush. + + QBrush brush(SolidPattern); + brush.setColor( back ); + + // Create a scrollbar and redirect drawing into a temp. pixmap to save a + // lot of fiddly drawing later. + + QScrollBar *vertScrollBar = new QScrollBar( QScrollBar::Vertical, this ); + // TODO: vertScrollBar->setStyle( new QMotifStyle() ); + vertScrollBar->setGeometry( 400, 400, SCROLLBAR_SIZE, height()); + vertScrollBar->setRange( 0, 0 ); + vertScrollBar->setPalette( QPalette(cg,cg,cg)); + vertScrollBar->show(); + + QPixmap pm( vertScrollBar->width(), vertScrollBar->height() ); + pm.fill( back ); +#ifndef __osf__ + QPainter::redirect( vertScrollBar, &pm ); +#endif + vertScrollBar->repaint(); + QPainter::redirect( vertScrollBar, 0 ); + vertScrollBar->hide(); + + // Reset the titlebar pixmaps + resetTitlebarPixmaps(aTitleBtn, iTitleBtn); + + // Initialize the pixmap which we draw sample widgets into. + + smplw.resize(width(), height()); + //smplw.fill( parentWidget()->back() ); + smplw.fill( parentWidget()->colorGroup().mid() ); + + // Actually start painting in + + QPainter paint( &smplw ); + + // Inactive window + + qDrawWinPanel ( &paint, 15, 5, width()-48, height(), cg, FALSE, + &brush); + + paint.setBrush( iaTitle ); + paint.setPen( iaTitle ); + //paint.drawRect( 20, 10, width()-60, 20 ); + + KPixmap pmTitle; + pmTitle.resize( width()-160, 20 ); + + // Switched to vertical gradient because those kwin styles that + // use the gradient have it vertical. + KPixmapEffect::gradient(pmTitle, iaTitle, iaBlend, + KPixmapEffect::HorizontalGradient); + paint.drawPixmap( 60, 10, pmTitle ); + + + paint.setFont( windowFont ); + paint.setPen( iaTxt ); + paint.drawText( 65, 25, i18n("Inactive window") ); + textLen = paint.fontMetrics().width( i18n("Inactive window") ); + + tmp = width()-100; + paint.drawPixmap(22, 12, *dis_menu_pix); + paint.drawPixmap(42, 12, *dis_pinup_pix); + paint.drawPixmap(tmp+2, 12, *dis_minimize_pix); + paint.drawPixmap(tmp+22, 12, *dis_maximize_pix); + paint.drawPixmap(tmp+42, 12, *dis_close_pix); + + int spot = 0; + hotspots[ spot++ ] = + HotSpot( QRect( 65, 25-14, textLen, 14 ), CSM_Inactive_title_text ); + + hotspots[ spot++ ] = + HotSpot( QRect( 60, 10, (width()-160)/2, 20 ), CSM_Inactive_title_bar ); + + hotspots[ spot++ ] = + HotSpot( QRect( 60+(width()-160)/2, 10, + (width()-160)/2, 20 ), CSM_Inactive_title_blend ); + + hotspots[spot++] = + HotSpot(QRect(20, 12, 40, 20), CSM_Inactive_title_button); + hotspots[spot++] = + HotSpot(QRect(tmp, 12, 60, 20), CSM_Inactive_title_button); + + + // Active window + + qDrawWinPanel ( &paint, 20, 25+5, width()-40, height(), cg, FALSE, + &brush); + + paint.setBrush( aTitle );paint.setPen( aTitle ); + paint.drawRect( 65, 30+5, width()-152, 20 ); + + // Switched to vertical gradient because those kwin styles that + // use the gradient have it vertical. + pmTitle.resize( width()-152, 20 ); + KPixmapEffect::gradient(pmTitle, aTitle, aBlend, + KPixmapEffect::HorizontalGradient); + paint.drawPixmap( 65, 35, pmTitle ); + + paint.setFont( windowFont ); + paint.setPen( aTxt ); + paint.drawText( 75, 50, i18n("Active window") ); + textLen = paint.fontMetrics().width( i18n("Active window" )); + + tmp = width()-152+65; + paint.drawPixmap(27, 35, *menu_pix); + paint.drawPixmap(47, 35, *pinup_pix); + paint.drawPixmap(tmp+2, 35, *minimize_pix); + paint.drawPixmap(tmp+22, 35, *maximize_pix); + paint.drawPixmap(tmp+42, 35, *close_pix); + + hotspots[ spot++ ] = + HotSpot( QRect( 75, 50-14, textLen, 14 ), CSM_Active_title_text); + hotspots[ spot ++] = + HotSpot( QRect( 65, 35, (width()-152)/2, 20 ), CSM_Active_title_bar ); + hotspots[ spot ++] = + HotSpot( QRect( 65+(width()-152)/2, 35, + (width()-152)/2, 20 ), CSM_Active_title_blend ); + + hotspots[spot++] = + HotSpot(QRect(25, 35, 40, 20), CSM_Active_title_button); + hotspots[spot++] = + HotSpot(QRect(tmp, 35, 60, 20), CSM_Active_title_button); + + // Menu bar + + //qDrawShadePanel ( &paint, 25, 55, width()-52, 28, cg, FALSE, 2, &brush); + kapp->style().drawPrimitive(QStyle::PE_PanelMenuBar, &paint, + QRect(QPoint(25, 55), QSize(width()-52, 28)), cg); + + paint.setFont( menuFont ); + paint.setPen(txt ); + QString file = i18n("File"); + textLen = paint.fontMetrics().width( file ); + //qDrawShadePanel ( &paint, 30, 59, textLen + 10, 21, cg, FALSE, 2, &brush); + kapp->style().drawPrimitive(QStyle::PE_Panel, &paint, + QRect(30, 59, textLen + 10, 21), cg); + paint.drawText( 35, 74, file ); + + hotspots[ spot++ ] = + HotSpot( QRect( 35, 62, textLen, 14 ), CSM_Text ); + hotspots[ spot++ ] = + HotSpot( QRect( 27, 57, 33, 21 ), CSM_Background ); + + paint.setFont( menuFont ); + paint.setPen( txt ); + paint.drawText( 35 + textLen + 20, 74, i18n("Edit") ); + textLen = paint.fontMetrics().width( i18n("Edit") ); + + hotspots[ spot++ ] = HotSpot( QRect( 35 + textLen + 20, 62, textLen, 14 ), CSM_Text ); + + // Button Rects need to go before window + + // Frame and window contents + + brush.setColor( window ); + qDrawShadePanel ( &paint, 25, 80+5-4, width()-7-45-2, + height(), cg, TRUE, 2, &brush); + + // Standard text + QFont fnt = KGlobalSettings::generalFont(); + paint.setFont( fnt ); + paint.setPen( windowTxt ); + paint.drawText( 140, 127-20, i18n( "Standard text") ); + textLen = paint.fontMetrics().width( i18n("Standard text") ); + int column2 = 120 + textLen + 40 + 16; + + hotspots[ spot++ ] = + HotSpot( QRect( 140, 113-20, textLen, 14 ), CSM_Standard_text ); + + // Selected text + textLen = paint.fontMetrics().width( i18n("Selected text") ); + if (120 + textLen + 40 + 16 > column2) + column2 = 120 + textLen + 40 + 16; + + paint.setBrush( select );paint.setPen( select ); + paint.drawRect ( 120, 115, textLen+40, 32); + + paint.setFont( fnt ); + paint.setPen( selectTxt ); + paint.drawText( 140, 135, i18n( "Selected text") ); + + hotspots[ spot++ ] = + HotSpot( QRect( 140, 121, textLen, 14 ), CSM_Select_text ); + hotspots[ spot++ ] = + HotSpot( QRect( 120, 115, textLen+40, 32), CSM_Select_background ); // select bg + + // Link + paint.setPen( link ); + paint.drawText( column2+18, 127-20, i18n( "link") ); + textLen = paint.fontMetrics().width( i18n("link") ); + paint.drawLine( column2+18, 109, column2+18+textLen, 109); + + hotspots[ spot++ ] = + HotSpot( QRect( column2+18, 113-20, textLen, 17 ), CSM_Link ); + + int column3 = column2 + 25 + textLen; + // Followed Link + paint.setPen( visitedLink ); + paint.drawText( column3, 127-20, i18n( "followed link") ); + textLen = paint.fontMetrics().width( i18n("followed link") ); + paint.drawLine( column3, 109, column3+textLen, 109); + + hotspots[ spot++ ] = + HotSpot( QRect( column3, 113-20, textLen, 17 ), CSM_Followed_Link ); + + // Button + int xpos = column2; + int ypos = 115 + 2; + textLen = paint.fontMetrics().width(i18n("Push Button")); + hotspots[ spot++ ] = + HotSpot( QRect(xpos+16, ypos+((28-paint.fontMetrics().height())/2), + textLen, paint.fontMetrics().height()), CSM_Button_text ); + hotspots[ spot++ ] = + HotSpot( QRect(xpos, ypos, textLen+32, 28), CSM_Button_background ); + //brush.setColor( button ); + QColorGroup cg2(cg); + cg2.setColor(QColorGroup::Button, button); + cg2.setColor(QColorGroup::Background, window); + //qDrawWinButton(&paint, xpos, ypos, textLen+32, 28, cg, false, &brush); + kapp->style().drawPrimitive(QStyle::PE_ButtonCommand, &paint, + QRect(xpos, ypos, textLen+32, 28), cg2, QStyle::Style_Enabled | QStyle::Style_Raised); + paint.setPen(buttonTxt); + paint.drawText(xpos, ypos, textLen+32, 28, AlignCenter, + i18n("Push Button")); + + // Scrollbar + paint.drawPixmap(width()-55+27-16-2,80+5-2,pm); + + // Menu + + brush.setColor( back ); + + int textLenNew, textLenOpen, textLenSave; + + + textLenNew = paint.fontMetrics().width( i18n("New") ); + + hotspots[ spot++ ] = + HotSpot( QRect( 56, 83, textLenNew, 14 ), CSM_Text ); + + paint.setFont( menuFont ); + textLenOpen = paint.fontMetrics().width( i18n("Menu item", "Open") ); + + hotspots[ spot++ ] = + HotSpot( QRect( 56, 105, textLenOpen, 14 ), CSM_Text ); + + paint.setFont( menuFont ); + textLenSave = paint.fontMetrics().width( i18n("Menu item", "Save") ); + + QPopupMenu *popup = new QPopupMenu( this ); + popup->setFont( menuFont ); + popup->setPalette( QPalette(cg,cg,cg)); + popup->insertItem(i18n("New")); + popup->insertItem(i18n("Menu item", "Open")); + int id = popup->insertItem(i18n("Menu item", "Save")); + popup->setItemEnabled( id, false ); + + // HACK: Force Layouting + //Sad Eagle: sizeHint() forces layouting too, and it's a lot less visible + //popup->sizeHint(); // Breaks with Qt 3.3 + popup->resize(popup->sizeHint()); + + pm = QPixmap::grabWidget( popup ); + delete popup; + bitBlt(&smplw, 30, 80, &pm, 0, 0, pm.width(), pm.height()); + + hotspots[ spot++ ] = + HotSpot( QRect( 28, 78, 88, 77 ), CSM_Background ); + + hotspots[ spot++ ] = + HotSpot( QRect(25, 80+5-4, width()-7-45-2-16, height()), CSM_Standard_background ); + + + // Valance + + qDrawWinPanel ( &paint, 0, 0, width(), height(), + parentWidget()->colorGroup(), TRUE, 0); + + // Stop the painting + + hotspots[ spot++ ] = + HotSpot( QRect( 0, 0, width(), height() ), CSM_Background ); // ? + + repaint( FALSE ); +} diff --git a/kcontrol/colors/widgetcanvas.h b/kcontrol/colors/widgetcanvas.h new file mode 100644 index 000000000..e2f9bd057 --- /dev/null +++ b/kcontrol/colors/widgetcanvas.h @@ -0,0 +1,121 @@ +// +// A special widget which draws a sample of KDE widgets +// It is used to preview color schemes +// +// Copyright (c) Mark Donohoe 1998 +// + +#ifndef __WIDGETCANVAS_H__ +#define __WIDGETCANVAS_H__ + +#include +#include + +#define MAX_HOTSPOTS 28 +#define SCROLLBAR_SIZE 16 + +// These defines define the order of the colors in the combo box. +#define CSM_Standard_background 0 +#define CSM_Standard_text 1 +#define CSM_Select_background 2 +#define CSM_Select_text 3 +#define CSM_Link 4 +#define CSM_Followed_Link 5 +#define CSM_Background 6 +#define CSM_Text 7 +#define CSM_Button_background 8 +#define CSM_Button_text 9 +#define CSM_Active_title_bar 10 +#define CSM_Active_title_text 11 +#define CSM_Active_title_blend 12 +#define CSM_Active_title_button 13 +#define CSM_Inactive_title_bar 14 +#define CSM_Inactive_title_text 15 +#define CSM_Inactive_title_blend 16 +#define CSM_Inactive_title_button 17 +#define CSM_Active_frame 18 +#define CSM_Active_handle 19 +#define CSM_Inactive_frame 20 +#define CSM_Inactive_handle 21 +#define CSM_Alternate_background 22 +#define CSM_LAST 23 + +class QPixmap; +class QColor; +class QPainter; +class QEvent; + +class KPixmap; + +class HotSpot +{ +public: + HotSpot() {} + HotSpot( const QRect &r, int num ) + : rect(r), number(num) {} + + QRect rect; + int number; +}; + +class WidgetCanvas : public QWidget +{ + Q_OBJECT + +public: + WidgetCanvas( QWidget *parent=0, const char *name=0 ); + void drawSampleWidgets(); + void resetTitlebarPixmaps(const QColor &active, + const QColor &inactive); + void addToolTip( int area, const QString & ); + QPixmap smplw; + + QColor iaTitle; + QColor iaTxt; + QColor iaBlend; + QColor iaFrame; + QColor iaHandle; + QColor aTitle; + QColor aTxt; + QColor aBlend; + QColor aFrame; + QColor aHandle; + QColor back; + QColor txt; + QColor select; + QColor selectTxt; + QColor window; + QColor windowTxt; + QColor button; + QColor buttonTxt; + QColor aTitleBtn; + QColor iTitleBtn; + QColor link; + QColor visitedLink; + QColor alternateBackground; + + int contrast; + bool shadeSortColumn; + +signals: + void widgetSelected( int ); + void colorDropped( int, const QColor&); + +protected: + void redrawPopup(const QColorGroup &cg); + + virtual void paintEvent( QPaintEvent * ); + virtual void mousePressEvent( QMouseEvent * ); + virtual void mouseMoveEvent( QMouseEvent * ); + virtual void resizeEvent( QResizeEvent * ); + virtual void showEvent( QShowEvent * ); + virtual void dropEvent( QDropEvent *); + virtual void dragEnterEvent( QDragEnterEvent *); + void paletteChange( const QPalette & ); + + QMap tips; + HotSpot hotspots[MAX_HOTSPOTS]; + int currentHotspot; +}; + +#endif diff --git a/kcontrol/componentchooser/EXAMPLE.desktop b/kcontrol/componentchooser/EXAMPLE.desktop new file mode 100644 index 000000000..f5501162b --- /dev/null +++ b/kcontrol/componentchooser/EXAMPLE.desktop @@ -0,0 +1,159 @@ +Name=A nice name you have chosen for your interface +Name[af]='n oulike naam jy het gekies vir jou koppelvlak +Name[ar]=اسم ما اخترته من قبل للواجهة الخاصة بك +Name[az]=Ara üzünüzə seçdiyiniz ə'la ad +Name[be]=Файная назва, якую вы выбралі для свайго інтэрфейса +Name[bg]=Име на компонент +Name[bn]=আপনার ইন্টারফেসের জন্য আপনার পছন্দ করা সুন্দর একটা নাম +Name[bs]=Lijepo ime koje ste odabrali za vaš interfejs +Name[ca]=Un bonic nom que heu triat per a la interfície +Name[cs]=Hezký název pro vaše rozhraní +Name[csb]=Miłé miono, jaczé òstało wëbróné dlô programë +Name[cy]=Enw neis yr ydych wedi dewis am eich rhyngwyneb +Name[da]=Et godt navn som du har valgt for din grænseflade +Name[de]=Der von Ihnen gewählte Name für die Schnittstelle +Name[el]=Ένα όμορφο όνομα που έχετε επιλέξει για τη διασύνδεσή σας +Name[eo]=Plaĉa nomo, kiun vi elektis por via interfaco +Name[es]=Un bonito nombre de su elección para su interfaz +Name[et]=Mõni kena nimi, mille sa oma liidesele valinud oled +Name[eu]=Zure interfazerako aukeratu duzun izen dotorea +Name[fa]=لقبی که برای واسط خود انتخاب کرده‌اید +Name[fi]=Valittu nimi rajapinnalle +Name[fo]=Navn markamótsins +Name[fr]=Un joli nom que vous avez choisi pour votre interface +Name[fy]=In namme dy jo koazen ha foar jo ynterface +Name[gl]=Un bon nome que escolleu para a sua interface +Name[he]=שם שבחרת לממשק שלך +Name[hi]=आपने अपने इंटरफेस के लिए एक अच्छा नाम चुना है +Name[hr]=Naziv koji ste odabrali za vaše sučelje +Name[hu]=Egy Ön által választott név a felülethez +Name[is]=Vingjarnlegt nafn þú hefur valið fyrir umhverfið þitt +Name[it]=Un bel nome per la tua interfaccia +Name[ja]=あなたのインターフェースに素敵な名前を付けてください +Name[ka]=მშვენიერი სახელია ინტერფეისისთვის +Name[kk]=Интерфейсіңізге таңдаған атауыңыз +Name[km]=ឈ្មោះ​ល្អ​មួយ ដែល​អ្នក​បាន​ជ្រើស​សម្រាប់​ចំណុច​ប្រទាក់​របស់​អ្នក +Name[ko]=인터페이스에 지정할 이름 +Name[lo]=A nice name you have chosen for your interfaceName=A nice name you have chosen for your interface +Name[lt]=Gražus vardas, kurį Jūs pasirinkote savo sąsajai +Name[lv]=Jauks nosaukums, ko Jūs izvelējāties savam interfeisam +Name[mk]=Убаво име што сте го избрале за вашиот интерфејс +Name[mn]=Таны харьцах хэсэгт сонгосон нэр +Name[ms]=Nama yang anda pilih untuk antara muka anda +Name[mt]=Isem sabiħ li għażilt għall-interfaċċja tiegħek +Name[nb]=Et fint navn du har valgt for grensesnittet +Name[nds]=Dor hest Du Di'n smucken Naam för Dien Koppelsteed utsöcht +Name[ne]=तपाईँले इन्टरफेसका लागि रोजेको नाम राम्रो छ +Name[nl]=Een naam die u hebt gekozen voor uw interface +Name[nn]=Eit fint namn du har valt for grensesnittet +Name[nso]=Leina le lebotsana leo ole kgethetsego interface ya gago +Name[pa]=ਆਪਣੇ ਇੰਟਰਫੇਸ ਲਈ ਇੱਕ ਸੋਹਣਾ ਨਾਂ ਚੁਣੋ +Name[pl]=Zgrabna nazwa którą wybrałeś dla programu +Name[pt]=Um nome bonito que escolheu para a sua interface +Name[pt_BR]=Um bom nome que você escolheu para a sua interface +Name[ro]=Un nume drăguț ales de dumneavoastră pentru interfață +Name[ru]=имя, которое вы выбрали для своего интерфейса +Name[rw]=Izina ryiza wahisemo ry'imigaragarire yawe +Name[se]=Du lavtta čáppa namma +Name[sk]=Pekné meno pre vaše rozhranie +Name[sl]=Lepo ime, ki ste ga izbrali za svoj vmesnik +Name[sr]=Лепо име које сте изабрали за ваш интерфејс +Name[sr@Latn]=Lepo ime koje ste izabrali za vaš interfejs +Name[ss]=Ligama lelimnandzi lolikhetsele sichumanisi sakho +Name[sv]=Ett bra namn som du har valt för gränssnittet +Name[ta]=உங்கள் இடைமுகத்துக்கு நல்ல பெயரை தேர்ந்தெடுத்துள்ளீர்கள் +Name[tg]=Номи зебое ки барои робитаатон интихоб кардаед +Name[th]=ชื่อดีๆ ที่คุณเลือกสำหรับระบบติดต่อผู้ใช้ของคุณ +Name[tr]=İlginç bir oyun +Name[tt]=Üz yözara öçen saylanğan isem +Name[uk]=Гарна назва, вибрана вами для вашого інтерфейсу +Name[uz]=Interfeysingiz uchun chiroyli nom +Name[uz@cyrillic]=Интерфейсингиз учун чиройли ном +Name[ven]=Dziona la vhudi lenali nanga uitela tshikirini tsha khomupwutha yanu +Name[vi]=Một cái tên đẹp bạn đã chọn cho giao diện của bạn +Name[wa]=On clapant no k' vos avoz tchoezi po vost eterface +Name[xh]=Igama elihle olikhetileyo kujongano lwakho +Name[zh_CN]=选择您的界面的好名字 +Name[zh_TW]=您為您的界面選擇的好名字 +Name[zu]=Igama elihle olikhethele umxhumanisi wakho +Comment=A helpful description of the interface for the top right info box +Comment[af]='n hulpvaardig beskrywing van die koppelvlak vir die bo regterkant inligting boks +Comment[az]=Ara üzünüzün faydalı izahatı +Comment[be]=Карыснае апісанне інтэрфейсу для інфармацыйнай скрыні ў правым верхнім куце +Comment[bg]=Описание на компонент +Comment[bn]=ইন্টারফেসটির সহজবোধ্য বর্ণনা, উপরে ডানদিকের ইনফো বক্স-এর জন্য +Comment[bs]=Koristan opis interfejsa za info kocku gore-desno +Comment[ca]=Una útil descripció de la interfície per al rètol informatiu superior dret +Comment[cs]=Smysluplný popis vašeho rozhraní pro informační box +Comment[csb]=Pòmòcny òpis programë (dlô wëdowiédzë w oczénkù w prawim, górnym rogù) +Comment[cy]=Disgrifiad cymorthwyol o'r rhyngwyneb i'r blwch gwybodaeth top de +Comment[da]=En nyttig beskrivelse af grænsefladen for infofeltet øverst til højre +Comment[de]=Hilfreiche Beschreibung der Schnittstelle für das Infofeld rechts oben +Comment[el]=Μια χρήσιμη περιγραφή της διασύνδεσης για το πάνω δεξιά πλαίσιο πληροφοριών +Comment[eo]=helpema priskribo de le interfaco de la supre-dekstra infolisto +Comment[es]=Una descripción útil de la interfaz para el cuadro de información superior derecho +Comment[et]=Abiks kirjeldus +Comment[eu]=Goi-eskumako info kutxarako interfazearen deskripzio lagungarri bat +Comment[fa]=یک توصیف مفید واسط برای سمت راست بالای جعبه اطلاعات +Comment[fi]=Tässä pitäisi olla pieni kuvaus rajapinnasta oikean yläkulman laatikkoon +Comment[fo]=Lýsing av markamóti +Comment[fr]=Une description utile de l'interface pour la boîte d'informations en haut à droite +Comment[fy]=In helpzame omskriuwing fan de ynterface, Wat bedoelt is foar it ynformaasjefak rjochtboppe +Comment[gl]=Unha descrición da interface para o botón de información +Comment[he]=תיאור שימושי של הממשק בשביל תיבת המידע המוצגת מצד שמאל למעלה +Comment[hi]=ऊपरी दाएँ कोने के जानकारी बाक्स के इंटरफेस का उपयोगी वर्णन. +Comment[hr]=Koristan opis sučelja u info-okviru gore desno +Comment[hu]=A felület leírása a jobb felső sarokban található tájékoztató ablakhoz +Comment[is]=Jamm, hér ætti að vera smá lýsing á viðbótinni +Comment[it]=Un'utile descrizione dell'interfaccia per la casella delle informazioni +Comment[ja]=右上の情報ボックスのためのインターフェースに関する説明 +Comment[kk]=Жоғары оң жақ мәлімет коршау үшін интерфейстің сипаттамасы +Comment[km]=សេចក្ដី​ពណ៌នា​មាន​ប្រយោជន៍​របស់​ចំណុច​ប្រទាក់ សម្រាប់​ប្រអប់​ព័ត៌មាន​ខាង​លើ​ស្ដាំ +Comment[ko]=오른쪽 위 정보 상자의 인터페이스에 대한 설명 +Comment[lo]=ນີ້ເປັນລາຍລະອງດນ້ອຍໆກ່ງວກັບຮູຸບແບບສ່ວນ ຕິດຕໍ່ສຳຫລັບກ່ອງຂໍ້ມູນດ້ານຂວາເທິງ +Comment[lt]=Naudingas sąsajos aprašymas, skirtas viršutinei dešinei informacijos langelio daliai +Comment[mk]=Опис со објаснување за интерфејсот за горното десно поле за инфо. +Comment[mn]=Баруун дээд мэдээллийн самбарын хувьд харьцах хэсгийн ашигтай тодорхойлолт +Comment[ms]=Huraian antara muka yang sangat membantu untuk kotak maklumat kanan atas +Comment[mt]=Hawn ikteb deskrizzjoni qasira dwar l-interfaċċja għall-kaxxa ta' informazzjoni +Comment[nb]=Beskrivelse av grensesnittet for infoboksen øverst til høyre +Comment[nds]=En hölpsche Beschrieven vun de Koppelsteed för den Info-Kasten rechterhand baven +Comment[ne]=माथिको दायाँ सूचना बाकसका लागि इन्टरफेसको उपयोगी वर्णन +Comment[nl]=Een behulpzame omschrijving van de interface, bedoelt voor het informatievak rechts boven +Comment[nn]=Ei hjelpsam skildring av grensesnittet for infoboksen oppe til høgre +Comment[nso]=Thlaloso yeo e tletsego thuso ya interface ya lepokisi la tshedimoso la godimo kago lagoja +Comment[pa]=ਸੱਜੇ ਜਾਣਕਾਰੀ ਬਕਸੇ ਲਈ ਇੰਟਰਫੇਸ ਲ਼ਈ ਸਹਾਇਤਾ ਵੇਰਵਾ +Comment[pl]=Pomocny opis programu (dla informacji w okienku w prawym, górnym rogu) +Comment[pt]=Uma descrição útil da interface para a zona de informação do canto superior direito +Comment[pt_BR]=Uma descrição útil da interface para a caixa de informação superior direita +Comment[ro]=Aici trebuie să fie descrierea interfeței pentru căsuța din dreapta-sus +Comment[ru]=Полезное описание интерфейса в верхнем правом информационном окне +Comment[rw]=Umwirondoro ngirakamaro w'imigaragarire ujyanye n'agasanduku k'ibisobanuro hejuru iburyo +Comment[se]=Laktaválddahus maid infoboksa badjin olgešbealde geavaha. +Comment[sk]=Pomocný popis rozhrania pre informačný box v pravom hornom rohu +Comment[sl]=Primeren opis vmesnika za gornjo desno okno z informacijami +Comment[sr]=Опис интерфејса који сте изабрали за горњу десну инфо коцкицу +Comment[sr@Latn]=Opis interfejsa koji ste izabrali za gornju desnu info kockicu +Comment[ss]=Sichasiso lesinelusito sesichumanisi kwelibhokisi lemniningwane lesetulu ngesekudla +Comment[sv]=Hjälpsam beskrivning av gränssnittet för informationsrutan uppe till höger +Comment[ta]=மேல் வலது தகவல் பெட்டிக்கான பயனுள்ள விவர இடைமுகம் +Comment[tg]=Манфиати тавсифи робита дар тирезаи иттилооти самти рости боло +Comment[th]=นี่เป็นคำอธิบายเกี่ยวกับรูปแบบส่วนติดต่อสำหรับกล่องข้อมูลด้านขวาบน +Comment[tr]=Arayüzle ilgili yardım bilgisi +Comment[tt]=Yözara turında faydalı açıqlama öske uñ qırında +Comment[uk]=Допоміжний опис інтерфейсу для віконця інформації вгорі праворуч +Comment[ven]=Thalutshedzo yau thusa ya tshikirini tsha khomupwutha uitela bogisi la mafhungo la tshaula ntha +Comment[vi]=Một mô tả giao diện có ích cho hộp thông tin ở trên cùng bên phải +Comment[wa]=On discrijhaedje aidant d' l' eterface pol boesse d' informåcion e hôt a droete +Comment[xh]=Uchazo oluluncedo lojongano olungaphezulu ekunene kwebhokisi yolwazi +Comment[zh_CN]=右侧信息框中界面的简短描述 +Comment[zh_TW]=用於右上方資訊方塊界面的有用敘述 +Comment[zu]=Incazelo esizayo yomxhumanisi yebhokisi lolwazi eliphezulu ngakwesokudla + +configurationType=Possible values are component and application. Only component is handled at the moment though +ServiceTypeToConfigure=The service type, which should be configured. If this line is empty you have to provide a plugin (not supported yet) +MimeTypeOfInterest=A mimetype which should be used in conjunction with ServiceTypeToConfigure +defaultImplementation=The name of the default implementation as it would be returned by KService::desktopEntryName() +storeInFile=default_components //the file where the setting should be saved (default_components sounds reasonable for a central storage) +valueSection=The desktop section, where the setting should be stored +valueName=the name of the value entry diff --git a/kcontrol/componentchooser/Makefile.am b/kcontrol/componentchooser/Makefile.am new file mode 100644 index 000000000..3a63947a0 --- /dev/null +++ b/kcontrol/componentchooser/Makefile.am @@ -0,0 +1,15 @@ +SUBDIRS= . componentservices +AM_CPPFLAGS = -I../ -I$(top_srcdir)/kio -I$(top_srcdir) $(all_includes) + +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_componentchooser.la + +kcm_componentchooser_la_SOURCES = componentchooser_ui.ui componentconfig_ui.ui emailclientconfig_ui.ui terminalemulatorconfig_ui.ui browserconfig_ui.ui componentchooser.cpp kcm_componentchooser.cpp +kcm_componentchooser_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_componentchooser_la_LIBADD = $(LIB_KIO) + +xdg_apps_DATA = componentchooser.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmcomponentchooser.pot diff --git a/kcontrol/componentchooser/browserconfig_ui.ui b/kcontrol/componentchooser/browserconfig_ui.ui new file mode 100644 index 000000000..886724970 --- /dev/null +++ b/kcontrol/componentchooser/browserconfig_ui.ui @@ -0,0 +1,174 @@ + +BrowserConfig_UI + + + BrowserConfig_UI + + + + 0 + 0 + 394 + 324 + + + + + 3 + 3 + 0 + 0 + + + + + unnamed + + + 0 + + + + buttonGroup1 + + + NoFrame + + + + + + + unnamed + + + + label + + + <qt>Open <b>http</b> and <b>https</b> URLs</qt> + + + + + radioKIO + + + in an application based on the contents of the URL + + + true + + + + + radioExec + + + in the following browser: + + + + + layout3 + + + + unnamed + + + + spacer4_2 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + lineExec + + + false + + + + + btnSelectBrowser + + + false + + + + 1 + 1 + 0 + 0 + + + + ... + + + + + + + + + spacer9 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + radioExec + toggled(bool) + lineExec + setEnabled(bool) + + + radioExec + toggled(bool) + btnSelectBrowser + setEnabled(bool) + + + btnSelectBrowser + clicked() + BrowserConfig_UI + selectBrowser() + + + + kdialog.h + + + selectBrowser() + + + + diff --git a/kcontrol/componentchooser/componentchooser.cpp b/kcontrol/componentchooser/componentchooser.cpp new file mode 100644 index 000000000..792b250a0 --- /dev/null +++ b/kcontrol/componentchooser/componentchooser.cpp @@ -0,0 +1,530 @@ +/*************************************************************************** + componentchooser.cpp - description + ------------------- + copyright : (C) 2002 by Joseph Wenninger + email : jowenn@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License verstion 2 as * + * published by the Free Software Foundation * + * * + ***************************************************************************/ + +#include +#include + +#include "componentchooser.h" +#include "componentchooser.moc" + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MyListBoxItem: public QListBoxText +{ +public: + MyListBoxItem(const QString& text, const QString &file):QListBoxText(text),File(file){} + virtual ~MyListBoxItem(){;} + QString File; +}; + + +//BEGIN General kpart based Component selection + +CfgComponent::CfgComponent(QWidget *parent):ComponentConfig_UI(parent),CfgPlugin(){ + m_lookupDict.setAutoDelete(true); + m_revLookupDict.setAutoDelete(true); + connect(ComponentSelector,SIGNAL(activated(const QString&)),this,SLOT(slotComponentChanged(const QString&))); +} + +CfgComponent::~CfgComponent(){} + +void CfgComponent::slotComponentChanged(const QString&) { + emit changed(true); +} + +void CfgComponent::save(KConfig *cfg) { + // yes, this can happen if there are NO KTrader offers for this component + if (!m_lookupDict[ComponentSelector->currentText()]) + return; + + QString ServiceTypeToConfigure=cfg->readEntry("ServiceTypeToConfigure"); + KConfig *store = new KConfig(cfg->readPathEntry("storeInFile","null")); + store->setGroup(cfg->readEntry("valueSection")); + store->writePathEntry(cfg->readEntry("valueName","kcm_componenchooser_null"),*m_lookupDict[ComponentSelector->currentText()]); + store->sync(); + delete store; + emit changed(false); +} + +void CfgComponent::load(KConfig *cfg) { + + ComponentSelector->clear(); + m_lookupDict.clear(); + m_revLookupDict.clear(); + + QString ServiceTypeToConfigure=cfg->readEntry("ServiceTypeToConfigure"); + + QString MimeTypeOfInterest=cfg->readEntry("MimeTypeOfInterest"); + KTrader::OfferList offers = KTrader::self()->query(MimeTypeOfInterest, "'"+ServiceTypeToConfigure+"' in ServiceTypes"); + + for (KTrader::OfferList::Iterator tit = offers.begin(); tit != offers.end(); ++tit) + { + ComponentSelector->insertItem((*tit)->name()); + m_lookupDict.insert((*tit)->name(),new QString((*tit)->desktopEntryName())); + m_revLookupDict.insert((*tit)->desktopEntryName(),new QString((*tit)->name())); + } + + KConfig *store = new KConfig(cfg->readPathEntry("storeInFile","null")); + store->setGroup(cfg->readEntry("valueSection")); + QString setting=store->readEntry(cfg->readEntry("valueName","kcm_componenchooser_null")); + delete store; + if (setting.isEmpty()) setting=cfg->readEntry("defaultImplementation"); + QString *tmp=m_revLookupDict[setting]; + if (tmp) + for (int i=0;icount();i++) + if ((*tmp)==ComponentSelector->text(i)) + { + ComponentSelector->setCurrentItem(i); + break; + } + emit changed(false); +} + +void CfgComponent::defaults() +{ + //todo +} + +//END General kpart based Component selection + + + + + + +//BEGIN Email client config +CfgEmailClient::CfgEmailClient(QWidget *parent):EmailClientConfig_UI(parent),CfgPlugin(){ + pSettings = new KEMailSettings(); + + connect(kmailCB, SIGNAL(toggled(bool)), SLOT(configChanged()) ); + connect(txtEMailClient, SIGNAL(textChanged(const QString&)), SLOT(configChanged()) ); + connect(chkRunTerminal, SIGNAL(clicked()), SLOT(configChanged()) ); +} + +CfgEmailClient::~CfgEmailClient() { + delete pSettings; +} + +void CfgEmailClient::defaults() +{ + load(0L); +} + +void CfgEmailClient::load(KConfig *) +{ + QString emailClient = pSettings->getSetting(KEMailSettings::ClientProgram); + bool useKMail = (emailClient.isEmpty()); + + kmailCB->setChecked(useKMail); + otherCB->setChecked(!useKMail); + txtEMailClient->setText(emailClient); + txtEMailClient->setFixedHeight(txtEMailClient->sizeHint().height()); + chkRunTerminal->setChecked((pSettings->getSetting(KEMailSettings::ClientTerminal) == "true")); + + emit changed(false); + +} + +void CfgEmailClient::configChanged() +{ + emit changed(true); +} + +void CfgEmailClient::selectEmailClient() +{ + KURL::List urlList; + KOpenWithDlg dlg(urlList, i18n("Select preferred email client:"), QString::null, this); + // hide "Do not &close when command exits" here, we don't need it for a mail client + dlg.hideNoCloseOnExit(); + if (dlg.exec() != QDialog::Accepted) return; + QString client = dlg.text(); + + // get the preferred Terminal Application + KConfigGroup confGroup( KGlobal::config(), QString::fromLatin1("General") ); + QString preferredTerminal = confGroup.readPathEntry("TerminalApplication", QString::fromLatin1("konsole")); + preferredTerminal += QString::fromLatin1(" -e "); + + int len = preferredTerminal.length(); + bool b = client.left(len) == preferredTerminal; + if (b) client = client.mid(len); + if (!client.isEmpty()) + { + chkRunTerminal->setChecked(b); + txtEMailClient->setText(client); + } +} + + +void CfgEmailClient::save(KConfig *) +{ + if (kmailCB->isChecked()) + { + pSettings->setSetting(KEMailSettings::ClientProgram, QString::null); + pSettings->setSetting(KEMailSettings::ClientTerminal, "false"); + } + else + { + pSettings->setSetting(KEMailSettings::ClientProgram, txtEMailClient->text()); + pSettings->setSetting(KEMailSettings::ClientTerminal, (chkRunTerminal->isChecked()) ? "true" : "false"); + } + + // insure proper permissions -- contains sensitive data + QString cfgName(KGlobal::dirs()->findResource("config", "emails")); + if (!cfgName.isEmpty()) + ::chmod(QFile::encodeName(cfgName), 0600); + + kapp->dcopClient()->emitDCOPSignal("KDE_emailSettingsChanged()", QByteArray()); + + emit changed(false); +} + + +//END Email client config + + + +//BEGIN Terminal Emulator Configuration + +CfgTerminalEmulator::CfgTerminalEmulator(QWidget *parent):TerminalEmulatorConfig_UI(parent),CfgPlugin(){ + connect(terminalLE,SIGNAL(textChanged(const QString &)), this, SLOT(configChanged())); + connect(terminalCB,SIGNAL(toggled(bool)),this,SLOT(configChanged())); + connect(otherCB,SIGNAL(toggled(bool)),this,SLOT(configChanged())); +} + +CfgTerminalEmulator::~CfgTerminalEmulator() { +} + +void CfgTerminalEmulator::configChanged() +{ + emit changed(true); +} + +void CfgTerminalEmulator::defaults() +{ + load(0L); +} + + +void CfgTerminalEmulator::load(KConfig *) { + KConfig *config = new KConfig("kdeglobals", true); + config->setGroup("General"); + QString terminal = config->readPathEntry("TerminalApplication","konsole"); + if (terminal == "konsole") + { + terminalLE->setText("xterm"); + terminalCB->setChecked(true); + } + else + { + terminalLE->setText(terminal); + otherCB->setChecked(true); + } + delete config; + + emit changed(false); +} + +void CfgTerminalEmulator::save(KConfig *) { + + KConfig *config = new KConfig("kdeglobals"); + config->setGroup("General"); + config->writePathEntry("TerminalApplication",terminalCB->isChecked()?"konsole":terminalLE->text(), true, true); + config->sync(); + delete config; + + KIPC::sendMessageAll(KIPC::SettingsChanged); + kapp->dcopClient()->send("klauncher", "klauncher","reparseConfiguration()", QString::null); + + emit changed(false); +} + +void CfgTerminalEmulator::selectTerminalApp() +{ + KURL::List urlList; + KOpenWithDlg dlg(urlList, i18n("Select preferred terminal application:"), QString::null, this); + // hide "Run in &terminal" here, we don't need it for a Terminal Application + dlg.hideRunInTerminal(); + if (dlg.exec() != QDialog::Accepted) return; + QString client = dlg.text(); + + if (!client.isEmpty()) + { + terminalLE->setText(client); + } +} + +//END Terminal Emulator Configuration + +//BEGIN Browser Configuration + +CfgBrowser::CfgBrowser(QWidget *parent) : BrowserConfig_UI(parent),CfgPlugin(){ + connect(lineExec,SIGNAL(textChanged(const QString &)),this,SLOT(configChanged())); + connect(radioKIO,SIGNAL(toggled(bool)),this,SLOT(configChanged())); + connect(radioExec,SIGNAL(toggled(bool)),this,SLOT(configChanged())); +} + +CfgBrowser::~CfgBrowser() { +} + +void CfgBrowser::configChanged() +{ + emit changed(true); +} + +void CfgBrowser::defaults() +{ + load(0L); +} + + +void CfgBrowser::load(KConfig *) { + KConfig *config = new KConfig("kdeglobals", true); + config->setGroup("General"); + QString exec = config->readEntry("BrowserApplication"); + if (exec.isEmpty()) + { + radioKIO->setChecked(true); + m_browserExec = exec; + m_browserService = 0; + } + else + { + radioExec->setChecked(true); + if (exec.startsWith("!")) + { + m_browserExec = exec.mid(1); + m_browserService = 0; + } + else + { + m_browserService = KService::serviceByStorageId( exec ); + if (m_browserService) + m_browserExec = m_browserService->desktopEntryName(); + else + m_browserExec = QString::null; + } + } + + lineExec->setText(m_browserExec); + delete config; + + emit changed(false); +} + +void CfgBrowser::save(KConfig *) { + + KConfig *config = new KConfig("kdeglobals"); + config->setGroup("General"); + QString exec; + if (radioExec->isChecked()) + { + exec = lineExec->text(); + if (m_browserService && (exec == m_browserExec)) + exec = m_browserService->storageId(); // Use service + else + exec = "!" + exec; // Litteral command + } + config->writePathEntry("BrowserApplication", exec, true, true); + config->sync(); + delete config; + + KIPC::sendMessageAll(KIPC::SettingsChanged); + + emit changed(false); +} + +void CfgBrowser::selectBrowser() +{ + KURL::List urlList; + KOpenWithDlg dlg(urlList, i18n("Select preferred Web browser application:"), QString::null, this); + if (dlg.exec() != QDialog::Accepted) return; + m_browserService = dlg.service(); + if (m_browserService) + m_browserExec = m_browserService->desktopEntryName(); + else + m_browserExec = dlg.text(); + + lineExec->setText(m_browserExec); +} + +//END Terminal Emulator Configuration + +ComponentChooser::ComponentChooser(QWidget *parent, const char *name): + ComponentChooser_UI(parent,name), configWidget(0) { + + ComponentChooser_UILayout->setRowStretch(1, 1); + somethingChanged=false; + latestEditedService=""; + + QStringList dummy; + QStringList services=KGlobal::dirs()->findAllResources( "data","kcm_componentchooser/*.desktop",false,true,dummy); + for (QStringList::Iterator it=services.begin();it!=services.end();++it) + { + KSimpleConfig cfg(*it); + ServiceChooser->insertItem(new MyListBoxItem(cfg.readEntry("Name",i18n("Unknown")),(*it))); + + } + ServiceChooser->setFixedWidth(ServiceChooser->sizeHint().width()); + ServiceChooser->sort(); + connect(ServiceChooser,SIGNAL(highlighted(QListBoxItem*)),this,SLOT(slotServiceSelected(QListBoxItem*))); + ServiceChooser->setSelected(0,true); + slotServiceSelected(ServiceChooser->item(0)); + +} + +void ComponentChooser::slotServiceSelected(QListBoxItem* it) { + if (!it) return; + + if (somethingChanged) { + if (KMessageBox::questionYesNo(this,i18n("You changed the default component of your choice. Do you want to save that change now?"),QString::null,KStdGuiItem::save(),KStdGuiItem::discard())==KMessageBox::Yes) save(); + } + KSimpleConfig cfg(static_cast(it)->File); + + ComponentDescription->setText(cfg.readEntry("Comment",i18n("No description available"))); + ComponentDescription->setMinimumSize(ComponentDescription->sizeHint()); + + + QString cfgType=cfg.readEntry("configurationType"); + QWidget *newConfigWidget = 0; + if (cfgType.isEmpty() || (cfgType=="component")) + { + if (!(configWidget && configWidget->qt_cast("CfgComponent"))) + { + CfgComponent* cfgcomp = new CfgComponent(configContainer); + cfgcomp->ChooserDocu->setText(i18n("Choose from the list below which component should be used by default for the %1 service.").arg(it->text())); + newConfigWidget = cfgcomp; + } + else + { + static_cast(configWidget)->ChooserDocu->setText(i18n("Choose from the list below which component should be used by default for the %1 service.").arg(it->text())); + } + } + else if (cfgType=="internal_email") + { + if (!(configWidget && configWidget->qt_cast("CfgEmailClient"))) + { + newConfigWidget = new CfgEmailClient(configContainer); + } + + } + else if (cfgType=="internal_terminal") + { + if (!(configWidget && configWidget->qt_cast("CfgTerminalEmulator"))) + { + newConfigWidget = new CfgTerminalEmulator(configContainer); + } + + } + else if (cfgType=="internal_browser") + { + if (!(configWidget && configWidget->qt_cast("CfgBrowser"))) + { + newConfigWidget = new CfgBrowser(configContainer); + } + + } + + if (newConfigWidget) + { + configContainer->addWidget(newConfigWidget); + configContainer->raiseWidget(newConfigWidget); + configContainer->removeWidget(configWidget); + delete configWidget; + configWidget=newConfigWidget; + connect(configWidget,SIGNAL(changed(bool)),this,SLOT(emitChanged(bool))); + configContainer->setMinimumSize(configWidget->sizeHint()); + } + + if (configWidget) + static_cast(configWidget->qt_cast("CfgPlugin"))->load(&cfg); + + emitChanged(false); + latestEditedService=static_cast(it)->File; +} + + +void ComponentChooser::emitChanged(bool val) { + somethingChanged=val; + emit changed(val); +} + + +ComponentChooser::~ComponentChooser() +{ + delete configWidget; +} + +void ComponentChooser::load() { + if( configWidget ) + { + CfgPlugin * plugin = static_cast( + configWidget->qt_cast( "CfgPlugin" ) ); + if( plugin ) + { + KSimpleConfig cfg(latestEditedService); + plugin->load( &cfg ); + } + } +} + +void ComponentChooser::save() { + if( configWidget ) + { + CfgPlugin * plugin = static_cast( + configWidget->qt_cast( "CfgPlugin" ) ); + if( plugin ) + { + KSimpleConfig cfg(latestEditedService); + plugin->save( &cfg ); + } + } +} + +void ComponentChooser::restoreDefault() { + if (configWidget) + { + static_cast(configWidget->qt_cast("CfgPlugin"))->defaults(); + emitChanged(true); + } + +/* + txtEMailClient->setText("kmail"); + chkRunTerminal->setChecked(false); + + // Check if -e is needed, I do not think so + terminalLE->setText("xterm"); //No need for i18n + terminalCB->setChecked(true); + emitChanged(false); +*/ +} + +// vim: sw=4 ts=4 noet diff --git a/kcontrol/componentchooser/componentchooser.desktop b/kcontrol/componentchooser/componentchooser.desktop new file mode 100644 index 000000000..487fb04d4 --- /dev/null +++ b/kcontrol/componentchooser/componentchooser.desktop @@ -0,0 +1,237 @@ +[Desktop Entry] +Exec=kcmshell componentchooser +Icon=misc +Type=Application + + +X-KDE-Library=componentchooser + +X-KDE-ParentApp=kcontrol + +Name=Component Chooser +Name[af]=Komponent Kieser +Name[ar]=اختيار المكونات +Name[az]=Tərkib Hissəsi Seçicisi +Name[be]=Выбар кампанентаў +Name[bg]=Избор на компоненти +Name[bn]=কম্পোনেন্ট নির্বাচক +Name[br]=Dibaber ar parzhioù +Name[bs]=Izbornik komponenti +Name[ca]=Selector de components +Name[cs]=Výběr komponent +Name[csb]=Wëbiérk kòmpònentów +Name[cy]=Dewisydd Cydrannau +Name[da]=Komponentvælger +Name[de]=Komponentenauswahl +Name[el]=Επιλογέας συστατικών +Name[eo]=Komponenta Elektilo +Name[es]=Selector de componentes +Name[et]=Komponentide valija +Name[eu]=Osagai aukeratzailea +Name[fa]=انتخابگر مؤلفه +Name[fi]=Komponenttivalitsin +Name[fr]=Sélecteur de composants +Name[fy]=Komponintenkiezer +Name[ga]=Roghnóir Comhpháirte +Name[gl]=Selector de Compoñentes +Name[he]=בוחר הרכיבים +Name[hi]=अवयव चयनक +Name[hr]=Odabir komponenti +Name[hu]=Komponensválasztó +Name[id]=Pemilih Komponen +Name[is]=Einingaval +Name[it]=Scelta componenti +Name[ja]=コンポーネントの選択 +Name[ka]=კომპონენტების არჩევა +Name[kk]=Компонеттерін таңдау +Name[km]=កម្មវិធី​ជ្រើស​សមាសភាគ +Name[lo]=ເຄືອ່ງມືເລືອກຄອມໂພເນນ +Name[lt]=Komponentų parinkėjas +Name[lv]=Komponenšu izvēlētājs +Name[mk]=Избирач на компоненти +Name[mn]=Бүрэлдхүүн сонгогч +Name[ms]=Pemilih Komponen +Name[mt]=Agħżel komponent +Name[nb]=Komponentvelger +Name[nds]=Komponenten utsöken +Name[ne]=अवयव चयनकर्ता +Name[nl]=Componentenkiezer +Name[nn]=Komponentveljar +Name[nso]=Mokgethi wa Seripa +Name[pa]=ਭਾਗ ਚੋਣਕਾਰ +Name[pl]=Wybór komponentów +Name[pt]=Selector de Componentes +Name[pt_BR]=Seletor de Componentes +Name[ro]=Selector de componente +Name[ru]=Компоненты по умолчанию +Name[rw]=Mutoranya w'Inyangingo +Name[se]=Oasseválljejeaddji +Name[sk]=Výber komponentov +Name[sl]=Izbiralec komponent +Name[sr]=Изборник компоненти +Name[sr@Latn]=Izbornik komponenti +Name[ss]=Sikhetsi sencenye +Name[sv]=Komponentväljare +Name[ta]=கூறுதேர்வாளர் +Name[tg]=Интихоби қисматҳо +Name[th]=เครื่องมือเลือกคอมโพเน็นต์ +Name[tr]=Bileşen Seçici +Name[tt]=Komponent Saylağıç +Name[uk]=Селектор компонентів +Name[uz]=Komponentlarni tanlagich +Name[uz@cyrillic]=Компонентларни танлагич +Name[ven]=Tshinangi tsha tshipida +Name[vi]=Bộ chọn Thành phần +Name[wa]=Tchoezixheu d' componints +Name[xh]=Inxenye Yomkhethi +Name[zh_CN]=组件选择程序 +Name[zh_TW]=元件選擇程式 +Name[zu]=Umkhethi welunga +Comment=Choose the default components for various services +Comment[af]=Kies die verstek komponente vir verskeie dienste +Comment[ar]=لاختيار المكونات الافتراضية للخدمات المختلفة +Comment[az]=Müxtəlif xidmətlər üçün ön qurğulu tərkib hissəsini seçin +Comment[be]=Выбірае стандартныя кампаненты для розных сервісаў +Comment[bg]=Избор на предпочитани компоненти за е-поща, редактиране на текст и др. +Comment[bn]=বিভিন্ন সার্ভিসের জন্য ডিফল্ট কম্পোনেন্ট নির্বাচন করুন +Comment[bs]=Izaberite podrazumjevane komponente za razne usluge +Comment[ca]=Escull els components predeterminats per a diversos serveis +Comment[cs]=Vyberte výchozí komponenty pro různé služby +Comment[csb]=Wébiérk domëslnych kòmpònentów dlô wszelejaczich ùsłëżnotów +Comment[cy]=Dewiswch y cydrannau rhagosodedig i wasanaethau amrywiol +Comment[da]=Vælg standardkomponenterne for forskellige tjenester +Comment[de]=Die Standardkomponenten für diverse Dienste +Comment[el]=Επιλέξτε τα προκαθορισμένα συστατικά για διάφορες υπηρεσίες +Comment[eo]=Elektu la defaŭltajn komponentojn por diversaj servoj +Comment[es]=Elegir los componentes predeterminados para varios servicios +Comment[et]=Mitmete teenuste vaikekomponentide valimine +Comment[eu]=Hautatu zerbitzu batzuetarako osagai lehenetsiak +Comment[fa]=انتخاب مؤلفه‌های پیش‌فرض برای خدمات گوناگون +Comment[fi]=Calitse oletuskomponentit eri palveluille +Comment[fr]=Choix des composants par défaut pour différents services +Comment[fy]=Kies de standertkomponinten foar de ferskate tsjinsten +Comment[gl]=Escolla as compoñentes por defeito para varios servizos +Comment[he]=בחירת הרכיבים המשמשים כברירת מחדל עבור שירותים שונים +Comment[hi]=भिन्न सेवाओं के लिए डिफ़ॉल्ट अवयव चुनें +Comment[hr]=Odaberite zadane komponente za različite usluge +Comment[hu]=Az alapértelmezett komponensek kiválasztása a különféle szolgáltatásokhoz +Comment[is]=Velja sjálfgefnar einingar fyrir ýmsar þjónustur +Comment[it]=Scelta dei componenti predefiniti per vari servizi +Comment[ja]=各種サービスのための標準コンポーネントを選択 +Comment[ka]=თავდაპირველი კომპონენტების არჩევა სხვა და სხვა მომსახურეობებისთვის +Comment[kk]=Түрлі қызметтердің әдетті компоненттерін таңдау +Comment[km]=ជ្រើស​សមាសភាគ​លំនាំដើម សម្រាប់​សេវា​ផ្សេងៗ +Comment[ko]=다양한 서비스에 사용할 기본 구성 요소 설정 +Comment[lo]=ເລືອກຄອມໂພເນັນສຳຫລັບບໍລິການທົ່ວໄປ +Comment[lt]=Pasirinkite numatytus komponentus įvairioms tarnyboms +Comment[lv]=Izvēlieties noklusējuma komponentes dažādiem servisiem +Comment[mk]=Изберете ги стандардните компоненти за разните сервиси +Comment[mn]=Өөр үйлчилгээнүүдийн хувьд стандарт-бүрэлдхүүнүүд сонгох +Comment[ms]=Pilih komponen piawai untuk pelbagai servis +Comment[mt]=Agħżel il-komponenti impliċiti għal diversi servizzi +Comment[nb]=Velg standardkomponenter for ulike tjenester +Comment[nds]=Wähl de Standardprogrammen för Deensten ut +Comment[ne]=विविध सेवाका लागि पूर्वनिर्धारित अवयवहरू रोज्नुहोस् +Comment[nl]=Kies de standaardcomponenten voor diverse services +Comment[nn]=Vel standardkomponentar for ymse tenester +Comment[nso]=Kgethela ditirelo tseo di fapanego dikarolwana tsa thuso ya tshoganetso +Comment[pa]=ਵੱਖ ਵੱਖ ਸੇਵਾਵਾਂ ਲਈ ਮੂਲ ਇੰਦਰਾਜ਼ ਚੁਣੋ +Comment[pl]=Wybór domyślnych komponentów dla różnych usług +Comment[pt]=Escolha os componentes predefinidos para os vários serviços +Comment[pt_BR]=Escolha os componentes padrão para vários serviços +Comment[ro]=Alegeți componentele implicite pentru diferite servicii +Comment[ru]=Выбор основных компонентов разнообразных служб +Comment[rw]=Guhitamo inyangingo mburabuzi ku maserivise atandukanye +Comment[se]=Vállje bálválusaid standárdosiid +Comment[sk]=Výber štandardných komponentov pre rôzne služby +Comment[sl]=Izberite privzete komponente za različne storitve +Comment[sr]=Избор подразумеваних компоненти за разне сервисе +Comment[sr@Latn]=Izbor podrazumevanih komponenti za razne servise +Comment[sv]=Väljer normalkomponenter för olika sorters tjänster +Comment[ta]=பலவிதமான சேவைகளுக்கும் முன்னிருந்த பகுதிகளை தேர்வு செய்யவும் +Comment[tg]=Интихоби қисматҳои асосӣ барои хизматҳои гуногун +Comment[th]=เลือกคอมโพเน็นต์ปริยายสำหรับบริการต่างๆ +Comment[tr]=Çeşitli servisler için öntanımlı bileşenleri seçin +Comment[tt]=Törle xezmätlär öçen töp öleşlärne saylaw +Comment[uk]=Вибір типових компонентів для різноманітних служб +Comment[uz]=Turli xizmatlar uchun andoza komponentlarni tanlash +Comment[uz@cyrillic]=Турли хизматлар учун андоза компонентларни танлаш +Comment[ven]=Nangani zwipida zwa default uitela tshumelo dzo vhambanaho +Comment[vi]=Chọn các thành phần mặc định cho các dịch vụ khác nhau +Comment[wa]=Tchoezixhoz les prémetous componints po sacwants siervices +Comment[xh]=Khetha ingxenye zokungagqibekanga kweenkonzo eziliqela +Comment[zh_CN]=选择各种服务的默认组件 +Comment[zh_TW]=選擇各種服務的預設元件 +Comment[zu]=Khetha amalunga endalo emisebenzi eyahlukene + +Keywords=components,component chooser,resources, email client, terminal emulator +Keywords[af]=components,component chooser,resources, e-pos kliënt, terminaal emulasie +Keywords[be]=кампаненты,выбар кампанентаў,рэсурсы,кліент электроннай пошты,эмулятар тэрміналу,components,component chooser,resources, email client, terminal emulator +Keywords[bg]=е-поща, ел, поща, редактор, стандартен, компонент, модул, components, component chooser, resources, email client, terminal emulator +Keywords[bs]=komponente,izbornik komponenti,resursi, email klijent, simulator terminala +Keywords[ca]=components,selector de components,recursos, client de correu, emulador de terminal +Keywords[cs]=komponenty,výběr komponent,zdroje, emailový klient, emulace terminálu +Keywords[csb]=kòmpònentë,dzél,wëbiérk kòmpònentu,dostónki,pòcztowô programa,emùlator terminala +Keywords[cy]=cydrannau,dewisydd cydrannau,adnoddau,dibynnydd ebost,efelychwr terfynell +Keywords[da]=komponenter,komponentvælger,ressources, e-mail-klient, terminalemulator +Keywords[de]=Komponenten,Ressources,E-Mail-Programm,Terminal-Emulation +Keywords[el]=συστατικά,επιλογέας συστατικών,πόροι, πελάτης email, προσομοιωτής τερματικού +Keywords[eo]=komponentoj,komponenta elektilo,risurco,uzanta retpoŝtilo,terminala imitilo +Keywords[es]=componentes,selector de componentes,recursos,cliente de correo,emulador de terminal +Keywords[et]=komponendid,komponentide valija,ressursid,e-posti klient,terminaliemulaator +Keywords[eu]=osagai, osagai hautatzailea, baliabideak, posta elektroniko bezeroa, terminal emuladorea +Keywords[fa]=مؤلفه‌ها، انتخابگر مؤلفه، منابع، کارخواه رایانامه، مقلد رایانه +Keywords[fi]=komponentit, komponenttivalitsin,resurssit,sähköpostiohjelma,pääte-emulaatio +Keywords[fr]=composant,sélecteur de composants,ressources,client de courrier,email,émulateur de terminal +Keywords[fy]=komponintenkiezer,helpboarne,e-postprogramma,terminal emulator +Keywords[ga]=comhpháirteanna,roghnóir comhpháirte,acmhainní, cliant ríomhphoist, aithriseoir teirminéil +Keywords[gl]=compoñentes,selector de compoñentes,servizos, cliente de correo, emulador de terminal +Keywords[he]=, רכיבים,בוחר הרכיבים,משאבים,תוכנית דוא"ל ,הדמיית,מסוף,components,component chooser, resources, email client, terminal emulator +Keywords[hi]=अवयव,अवयव चयनक,संसाधन,ईमेल क्लाएंट,टर्मिनल एमुलेटर +Keywords[hr]=components,component chooser,resources, email client, terminal emulator,komponente,odabir komponenti,resursi,klijent e-pošte,emulator terminala +Keywords[hu]=komponensek,komponensválasztó,erőforrások,levelezőprogram,terminálemuláció +Keywords[is]=eining,einingar,einingaval,auðlindir,póstforrit,skjáhermir +Keywords[it]=componenti,scelta componenti,risorse,email,client di posta,posta elettronica,terminale,emulatore di terminale +Keywords[ja]=コンポーネント,選択,リソース,Eメール,クライアント,ターミナルエミュレータ +Keywords[ka]=კომპონენტი,კომპონენტის ამმჩევი,რესურსი,ელფოსტის ჩეთი, ტერმინალის ემულატორი +Keywords[km]=សមាសភាគ,កម្មវិធី​ជ្រើស​សមាសភាគ,ធនធាន,កម្មវិធី​អ៊ីមែល,វត្ថុ​ត្រាប់​តាម​ស្ថានីយ +Keywords[lo]=ຄອມໂພເນັດ,ເລືອກຄອມໂພເນັນ,ຊັບພະຍາກອນ +Keywords[lt]=components,component chooser,resources, email client, terminal emulator, komponentai, komponentų parinkėjas, resursai, e. pašto klientas, terminalo emuliatorius +Keywords[lv]=komponentes,komponenšu izvēlētājs,resursi,epasta klients,termināļa emulātors +Keywords[mk]=components,component chooser,resources,email client,terminal emulator,компоненти,избирач на компоненти,ресурси, е-поштенски клиент,терминалски емулатор +Keywords[mn]=Бүрэлдхүүнүүд,Нөөц,Э-Захиа-програм,Терминал-Эмулатор +Keywords[ms]=komponen, pemilih komponen, sumber, klien e-mel, pelagak terminal +Keywords[mt]=components,component chooser,resources, email client, terminal emulator, komponenti,riżorsi,imejl,klijent imejl,emulatur +Keywords[nb]=komponenter,komponentvelger,ressurser,e-postprogram,terminalemulator +Keywords[nds]=Komponenten,Komponenten wählen,Ressourcen,EMail Client,Nettpost-Programm,Terminalemulator +Keywords[ne]=टिप्पणी, अवयव छनौटकर्ता, संसाधनहरू, इमेल क्लाइन्ट, टर्मिनल इमुलेटेर +Keywords[nl]=componentenkiezer,gegevensbronnen,e-mailprogramma,terminal +Keywords[nn]=komponentar,komponentveljar,ressursar,e-postprogram,terminalemulator +Keywords[nso]=diripana,mokgethi wa seripana,didiriswa, moreki wa e-poso, moekisi wa terminal +Keywords[pa]=components,component chooser,resources, email client, terminal emulator,ਭਾਗ,ਸਰੋਤ +Keywords[pl]=komponenty,składniki,wybór komponentu,zasoby,program pocztowy,emulator terminala +Keywords[pt]=componentes,selector de componentes,recursos,cliente de e-mail,emulador de terminal +Keywords[pt_BR]=componentes,seletor de componentes,recursos,cliente de e-mail, emulador de terminal +Keywords[ro]=componente,selector componentă,resurse,client de email,emulator de terminal +Keywords[rw]=inyangingo,muhitamo w'inyangingo,ibikorana, umukiriya imeli, mukuruzi igihera +Keywords[se]=oasit,oasseválljejeaddji,resurssat,e-boasta prográmma,terminálemuláhtor +Keywords[sk]=komponenty,výber komponent,zdroje,e-mailový klient,terminál +Keywords[sl]=sestavni deli,komponente,izbiralec,izbirnik,terminalni emulator,odejmalec e-pošt +Keywords[sr]=компоненте,изборник компоненти,ресурси,клијент eлектронске поште,емулатор терминала,е-пошта +Keywords[sr@Latn]=komponente,izbornik komponenti,resursi,klijent elektronske pošte,emulator terminala,e-pošta +Keywords[sv]=komponenter,komponentväljare,resurser,e-postklient,terminalemulator +Keywords[ta]=பகுதிகள்,பகுதி தேர்ந்தெடுப்பான்,மூலங்கள், மின்னஞ்சல் உறுப்பினர், கடைசி போட்டியாளர் +Keywords[th]=คอมโพนเน็นต์,เลือกคอมโพเน็นต์,ทรัพยากรโปรแกรมรับส่งอีเมล,ตัวจำลองเทอร์มินัล +Keywords[tr]=bileşenler,bileşen seçici,kaynaklar,e-posta istemcisi,terminal emülasyonu +Keywords[uk]=компоненти,селектор компонентів,ресурси,клієнт ел. пошти,емулятор термінала +Keywords[uz]=komponentlar,komponent tanlagich,imkoniyatlar,xat-xabar klienti,terminal emulyatori +Keywords[uz@cyrillic]=компонентлар,компонент танлагич,имкониятлар,хат-хабар клиенти,терминал эмулятори +Keywords[ven]=Zwipida,tshipida,zwishumiswa,mushumisani wa email, tshitevhedzeli tsha theminala +Keywords[vi]=thành phần,bộ chọn thành phần,tài nguyên,trình thư,mô phỏng thiết bị cuối +Keywords[wa]=componints,thcoezixheu d' componint,rissources,cliyint emile,terminå +Keywords[xh]=iingxenye,umkhethi wengxenye,amacebo, umxhasi weposi, umlinganiseli wesiphelo sendlela +Keywords[zh_CN]=components,component chooser,resources, email client, terminal emulator,组件,组件选择程序,资源,电子邮件程序,终端仿真器 +Keywords[zh_TW]=components,component chooser,resources, email client, terminal emulator,元件,元件選擇程式,資源,電子郵件客戶端程式,終端機模擬程式 +Keywords[zu]=amalunga,umkhethi welunga,amathuluzi okusebenza,umxhasi weposi lekhomputha,umlingisi wethuluzi langaphandle + +Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcontrol/componentchooser/componentchooser.h b/kcontrol/componentchooser/componentchooser.h new file mode 100644 index 000000000..fdb863344 --- /dev/null +++ b/kcontrol/componentchooser/componentchooser.h @@ -0,0 +1,154 @@ +/*************************************************************************** + componentchooser.h - description + ------------------- + copyright : (C) 2002 by Joseph Wenninger + email : jowenn@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundationi * + * * + ***************************************************************************/ + +#ifndef _COMPONENTCHOOSER_H_ +#define _COMPONENTCHOOSER_H_ + +#include "componentchooser_ui.h" +#include "componentconfig_ui.h" +#include "emailclientconfig_ui.h" +#include "terminalemulatorconfig_ui.h" +#include "browserconfig_ui.h" +#include +#include + +#include + +class QListBoxItem; +class KEMailSettings; +class KConfig; + +/* The CfgPlugin class is an exception. It is LGPL. It will be parted of the plugin interface + which I plan for KDE 3.2. +*/ +class CfgPlugin +{ +public: + CfgPlugin(){}; + virtual ~CfgPlugin(){}; + virtual void load(KConfig *cfg)=0; + virtual void save(KConfig *cfg)=0; + virtual void defaults()=0; +}; + + +class CfgComponent: public ComponentConfig_UI,public CfgPlugin +{ +Q_OBJECT +public: + CfgComponent(QWidget *parent); + virtual ~CfgComponent(); + virtual void load(KConfig *cfg); + virtual void save(KConfig *cfg); + virtual void defaults(); + +protected: + QDict m_lookupDict,m_revLookupDict; + +protected slots: + void slotComponentChanged(const QString&); +signals: + void changed(bool); +}; + + +class CfgEmailClient: public EmailClientConfig_UI,public CfgPlugin +{ +Q_OBJECT +public: + CfgEmailClient(QWidget *parent); + virtual ~CfgEmailClient(); + virtual void load(KConfig *cfg); + virtual void save(KConfig *cfg); + virtual void defaults(); + +private: + KEMailSettings *pSettings; + +protected slots: + void selectEmailClient(); + void configChanged(); +signals: + void changed(bool); +}; + +class CfgTerminalEmulator: public TerminalEmulatorConfig_UI,public CfgPlugin +{ +Q_OBJECT +public: + CfgTerminalEmulator(QWidget *parent); + virtual ~CfgTerminalEmulator(); + virtual void load(KConfig *cfg); + virtual void save(KConfig *cfg); + virtual void defaults(); + +protected slots: + void selectTerminalApp(); + void configChanged(); + +signals: + void changed(bool); +}; + +class CfgBrowser: public BrowserConfig_UI,public CfgPlugin +{ +Q_OBJECT +public: + CfgBrowser(QWidget *parent); + virtual ~CfgBrowser(); + virtual void load(KConfig *cfg); + virtual void save(KConfig *cfg); + virtual void defaults(); + +protected slots: + void selectBrowser(); + void configChanged(); + +signals: + void changed(bool); +private: + QString m_browserExec; + KService::Ptr m_browserService; +}; + + +class ComponentChooser : public ComponentChooser_UI +{ + +Q_OBJECT + +public: + ComponentChooser(QWidget *parent=0, const char *name=0); + virtual ~ComponentChooser(); + void load(); + void save(); + void restoreDefault(); + +private: + QString latestEditedService; + bool somethingChanged; + QWidget *configWidget; + QVBoxLayout *myLayout; +protected slots: + void emitChanged(bool); + void slotServiceSelected(QListBoxItem *); + +signals: + void changed(bool); + +}; + + +#endif diff --git a/kcontrol/componentchooser/componentchooser_ui.ui b/kcontrol/componentchooser/componentchooser_ui.ui new file mode 100644 index 000000000..ed1ed7f7b --- /dev/null +++ b/kcontrol/componentchooser/componentchooser_ui.ui @@ -0,0 +1,133 @@ + +ComponentChooser_UI + + + ComponentChooser_UI + + + + 0 + 0 + 482 + 451 + + + + + 5 + 5 + 0 + 0 + + + + + unnamed + + + 0 + + + + GroupBox1 + + + + 1 + 1 + 1 + 0 + + + + Default Component + + + Here you can change the component program. Components are programs that handle basic tasks, like the terminal emulator, the text editor and the email client. Different KDE applications sometimes need to invoke a console emulator, send a mail or display some text. To do so consistently, these applications always call the same components. You can choose here which programs these components are. + + + + unnamed + + + 11 + + + + configContainer + + + + + + + GroupBox2 + + + + 1 + 1 + 0 + 0 + + + + Component Description + + + Here you can read a small description of the currently selected component. To change the selected component, click on the list to the left. To change the component program, please choose it below. + + + + unnamed + + + 11 + + + + ComponentDescription + + + + + + WordBreak|AlignTop + + + + + + + ServiceChooser + + + + 5 + 3 + 1 + 0 + + + + -1 + + + <qt> +<p>This list shows the configurable component types. Click the component you want to configure.</p> +<p>In this dialog you can change KDE default components. Components are programs that handle basic tasks, like the terminal emulator, the text editor and the email client. Different KDE applications sometimes need to invoke a console emulator, send a mail or display some text. To do so consistently, these applications always call the same components. Here you can select which programs these components are.</p> +</qt> + + + + + + klistbox.h + kdialog.h + + + + + klistbox.h + + diff --git a/kcontrol/componentchooser/componentconfig_ui.ui b/kcontrol/componentchooser/componentconfig_ui.ui new file mode 100644 index 000000000..d6a7bba87 --- /dev/null +++ b/kcontrol/componentchooser/componentconfig_ui.ui @@ -0,0 +1,63 @@ + +ComponentConfig_UI + + + ComponentConfig_UI + + + + 3 + 3 + 0 + 0 + + + + + unnamed + + + 0 + + + + ChooserDocu + + + + + + WordBreak|AlignVCenter + + + + + ComponentSelector + + + + + Spacer2 + + + Vertical + + + Expanding + + + + 0 + 91 + + + + + + + kcombobox.h + kdialog.h + + + + diff --git a/kcontrol/componentchooser/componentservices/Makefile.am b/kcontrol/componentchooser/componentservices/Makefile.am new file mode 100644 index 000000000..eea682ff8 --- /dev/null +++ b/kcontrol/componentchooser/componentservices/Makefile.am @@ -0,0 +1,3 @@ +kcm_ktexteditor_DATA = kcm_kemail.desktop kcm_terminal.desktop kcm_browser.desktop +kcm_ktexteditordir = $(kde_datadir)/kcm_componentchooser + diff --git a/kcontrol/componentchooser/componentservices/kcm_browser.desktop b/kcontrol/componentchooser/componentservices/kcm_browser.desktop new file mode 100644 index 000000000..481ba419c --- /dev/null +++ b/kcontrol/componentchooser/componentservices/kcm_browser.desktop @@ -0,0 +1,149 @@ +Name=Web Browser +Name[af]=Web Blaaier +Name[ar]=متصفح الشبكة +Name[az]=Veb Səyyahı +Name[be]=Вандроўнік па Сеціве +Name[bg]=Уеб браузър +Name[bn]=ওয়েব ব্রাউজার +Name[br]=Furcher an Internet +Name[bs]=Web preglednik +Name[ca]=Navegació Web +Name[cs]=Prohlížeč Webu +Name[csb]=Przezérnik WWW +Name[cy]=Porydd Gwê +Name[da]=Browser +Name[de]=Webbrowser +Name[el]=Περιηγητής ιστού +Name[eo]=TTT-legilo +Name[es]=Navegador Web +Name[et]=Veebilehitseja +Name[eu]=Web arakatzailea +Name[fa]=مرورگر وب‌‌ +Name[fi]=WWW-selain +Name[fo]=Vevlesari +Name[fr]=Navigateur web +Name[fy]=Webblêder +Name[ga]=Brabhsálaí Lín +Name[gl]=Navegador Web +Name[he]=דפדפן +Name[hi]=वेब ब्राउज़र +Name[hr]=Web preglednik +Name[hsb]=Web-browser +Name[hu]=Webböngésző +Name[id]=Peselancar Web +Name[is]=Vafri +Name[it]=Navigazione Web +Name[ja]=ウェブブラウザ +Name[ka]=ვებ ბრაუზერი +Name[kk]=Веб шолғыш +Name[km]=កម្មវិធី​រុករក​បណ្ដាញ +Name[ko]=웹 브라우저 +Name[lo]=ຮງກເບິ່ງຖານເບິ່ງຂໍ້ມູນ +Name[lt]=Žiniatinklio naršyklė +Name[lv]=Tīmekļa Pārlūks +Name[mk]=Веб-прелистувач +Name[mn]=Вэб-Хөтөч +Name[ms]=Pelayar Web +Name[nb]=Nettleser +Name[nds]=Nettkieker +Name[ne]=वेब ब्राउजर +Name[nl]=Webbrowser +Name[nn]=Nettlesar +Name[nso]=Seinyakisi sa Web +Name[pa]=ਵੈਬ ਝਲਕਾਰਾ +Name[pl]=Przeglądarka WWW +Name[pt]=Navegação Web +Name[pt_BR]=Navegador Web +Name[ro]=Navigator de web +Name[ru]=Браузер +Name[rw]=Mucukumbuzi Rubuga +Name[se]=Fierpmádatlogan +Name[sk]=Webový prehliadač +Name[sl]=Spletni brskalnik +Name[sr]=Веб прегледач +Name[sr@Latn]=Veb pregledač +Name[ss]=Ibrawuza ye-Web +Name[sv]=Webbläsning +Name[ta]=வலை உலாவி +Name[te]=వెబ్ బ్రౌజర్ +Name[tg]=Намоишгари Веб +Name[th]=เว็บเบราว์เซอร์ +Name[tr]=Web Tarayıcı +Name[uk]=Навігатор Тенет +Name[uz]=Veb-brauzer +Name[uz@cyrillic]=Веб-браузер +Name[ven]=Burausa ya Web +Name[vi]=Trình duyệt Mạng +Name[wa]=Betchteu waibe +Name[xh]=Umkhangeli zincwadi we Web +Name[zh_CN]=Web 浏览器 +Name[zh_TW]=網頁瀏覽器 +Name[zu]=Umcingi we-Web +Comment=Here you can configure your default web browser. All KDE applications in which you can select hyperlinks should honor this setting. +Comment[af]=Hier kan jy die standaard web blaaier opstel. Al die KDE programme waarin jy hiperskakels kan kies behoort hierdie instelling te gebruik. +Comment[be]=Тут вы можаце вызначыць для сябе стандартны вандроўнік па Сеціве. Усе праграмы KDE, у якіх вы можаце выбраць гіперспасылку, павінны выкарыстоўваць гэтае настаўленне. +Comment[bg]=Избор на предпочитан браузър. Всички програми на KDE ще ползват този компонент. +Comment[bn]=এখানে আপনি আপনার ডিফল্ট ওয়েব ব্রাউজার কনফিগার করতে পারেন। যে কোনো কে.ডি.ই. অ্যাপলিকেশনে একটি হাইপার-লিঙ্ক নির্বাচন করা হলে এই পছন্দটি ব্যবহার করা হবে। +Comment[bs]=Ovdje možete podesiti vaš podrazumijevani web preglednik. Svi KDE programi u kojima možete kliknuti na link bi trebali poštovati ovu postavku. +Comment[ca]=Aquí podeu configurar el vostre fullejador web per omissió. Totes les aplicacions KDE on podeu seleccionar hiperenllaços haurien de respectar aquest arranjament. +Comment[cs]=Tato služba umožňuje nastavit si výchozí prohlížeč. Všechny KDE aplikace, které vyžadují přístup k hypertextovým odkazům, by měly používat toto nastavení. +Comment[csb]=Tuwò je mòżno wëbrac domëslny przezérnik. Wszëtczé programë KDE, w jaczich brëkùje sã z lënkòw, mùszôłëbë ùżëwac tegò ùstôwù. +Comment[cy]=Dyma lle gallwch ffurfweddu eich porydd gwe rhagosodol. Dylai pob rhaglen KDE lle gallwch ddewis hypergysylltau ddefnyddio'r gosodiad yma. +Comment[da]=Her kan du indstille din standard-browser. Alle KDE-programmer hvor du kan vælge hyperlink skulle respektere denne indstilling. +Comment[de]=Hier können Sie Ihren Standard-Browser festlegen. Alle KDE-Programme, in denen Sie Verknüpfungen (Links) aufrufen können, benutzen diese Einstellung. +Comment[el]=Εδώ μπορείτε να ρυθμίσετε τον προκαθορισμένο περιηγητή ιστού σας. Όλες οι εφαρμογές του KDE στις οποίες μπορείτε να επιλέξετε υπερσυνδέσεις θα πρέπει να χρησιμοποιούν αυτή τη ρύθμιση. +Comment[en_GB]=Here you can configure your default web browser. All KDE applications in which you can select hyperlinks should honour this setting. +Comment[eo]=Tiu servo ebligas, ke vi elektas vian norman retumilon. Ĉiuj KDEaj aplikaĵoj, kiuj bezonas retumilon, uzos tiun agordon. +Comment[es]=Este servicio le permite configurar su navegador de Internet predeterminado. Todas las aplicaciones KDE que precisan acceso a hiperenlaces deberían reconocer esta opción. +Comment[et]=Siin saab seadistada vaikimisi kasutatavat veebilehitsejat. Kõik KDE rakendused, kus saab valida hüperlinke, peaksid siinsete seadistustega arvestama. +Comment[eu]=Hemen zure web arakatzaile lehenetsia konfigura dezakezu. Aukera honek estekak darabiltzaten KDEren aplikazio guztiei eragin behar die. +Comment[fa]=در اینجا می‌توانید مرورگر وب پیش‌فرض خود را پیکربندی کنید. همۀ کاربردهای KDE که می‌توانید ابرپیوندها را در آن گزینش کنید، باید این تنظیمات را قبول کنند. +Comment[fi]=Tämän palvelun avulla voit määritellä oletusselaimen. Kaikki selainta käyttävät KDE-sovellukset huomioivat tämän asetuksen. +Comment[fr]=Ce service vous permet de configurer votre navigateur internet par défaut. Toutes les applications KDE permettant de cliquer sur un lien hypertexte doivent accepter ce réglage. +Comment[fy]=Hjir kinne jo de standert web blêder ynstelle. Alle KDE-tapassingen weryn jo in hyperskeakel oanklikke kinne brûk meitsje fan dizze ynstelling +Comment[gl]=Aqui pode configurar o seu navegador predeterminado. Todas as aplicacións de KDE nas que poda premer en ligazóns farán uso deste. +Comment[he]=שירות זה מאפשר לך להגדיר את תוכנית הדוא"ל שתשמש כברירת מחדל. כל יישומי KDE שיזדקקו לגישה אל תוכנית דוא"ל יתחשבו בהגדרה זו. +Comment[hi]=यहाँ पर आप अपने डिफ़ॉल्ट वेब ब्राउज़र को कॉन्फ़िगर कर सकते हैं. सभी केडीई अनुप्रयोगों में जिसमें हायपरलिंक चुन सकते हैं, वे इस विन्यास का इस्तेमाल करेंगे. +Comment[hr]=Konfiguriranje zadanog web-preglednika. Sve KDE aplikacije unutar kojih odaberete (kliknete) hiperveze poštivat će ovaj odabir. +Comment[hu]=Itt lehet beállítani, mi legyen az alapértelmezett webböngésző. Az összes KDE-alkalmazásnak figyelembe kell vennie ezt az értéket levelezési funkció használata esetén. +Comment[is]=Þessi þjónusta leyfir þér að skilgreina sjálfgefinn vafra. Öll KDE forrit sem gera þér kleift að smella á tengla ættu að virða þessa stillingu. +Comment[it]=Definisci il tuo browser web predefinito. Tutte le applicazioni di KDE in cui è selezionabile un collegamento dovrebbero rispettare questa impostazione. +Comment[ja]=ここで標準のウェブブラウザを設定します。ハイパーリンクの選択が可能なすべての KDE アプリケーションは、この設定に従います。 +Comment[ka]=აქ შეიძლება სტანდარტული ვებ ბრაუზერის დაკონფიგურირება. KDE-ს ყველა პროგრამა, ვისაც შეუძლია ბმულების გამოძახება, გაითვალისწინებენ ამ პარამეტრს +Comment[kk]=Мұнда Сіз әдетті веб-браузеріңізді таңдай аласыз. Бүкіл KDE қолданбаларда гиперсілтемелерді түрткенде осы таңдау қолданылады. +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​កម្មវិធី​រុករក​បណ្ដាញ​លំនាំដើម​របស់​អ្នក ។ កម្មវិធី KDE ទាំងអស់​ដែល​អ្នក​អាច​ជ្រើស​តំណ​ខ្ពស់​ក្នុង គួរ​តែ​គោរព​ការ​កំណត់​នេះ ។ +Comment[ko]=여기에서 기본 웹 브라우저를 설정할 수 있습니다. 모든 KDE 프로그램에서 하이퍼링크를 처리하려면 이 설정을 따라야 합니다. +Comment[lt]=Ši tarnyba leidžia jums nustatyti Jūsų numatytą žiniatinklio naršyklę. Visos KDE programos, kuriose galima spragtelėti hipersaitus, turi atsižvelgti į šį nustatymą. +Comment[lv]=Šeit Jūs varat konfigurēt noklusējuma tīmekļa pārlūkprogrammu. Visas KDE aplikācijas, kurās Jūs varat klikšķināt uz hipersaitēm, izmantos šo parametru. +Comment[mk]=Тука може да го конфигурирате вашиот стандарден веб-прелистувач. Сите KDE-апликации во кои може да изберете хиперврски ќе го почитуваат ова поставување. +Comment[ms]=Di sini anda boleh konfigur pelayar web piawai anda.Semua aplikasi KDE yang di dalamnya anda boleh pilih hiperpautan hendaklah menerima seting ini. +Comment[mt]=Hawn tista' tikkonfigura l-browser impliċitu. Il-programmi kollha tal-KDE fejn tista' tagħżel hyperlink għandhom jużaw dan il-programm. +Comment[nb]=Her kan du sette opp nettleseren du bruker mest. Alle KDE-programmer der du kan velge hyperlenker skal bruke denne nettleseren. +Comment[nds]=Hier kannst Du Dien Standard-Nettkieker angeven. All KDE- Programmen, binnen de Du Hyperlinks bruken kannst, schullen dat ümsetten. +Comment[ne]=यहाँ तपाईँले पूर्वनिर्धारित वेब ब्राउजर कन्फिगर गर्न सक्नुहुन्छ । तपाईँले हाइपरलिङ्कहरू चयन गर्न सक्ने सबै KDE अनुप्रयोगहरूमा यो सेटिङ मान्नु पर्छ । +Comment[nl]=Hier kunt u uw standaard webbrowser instellen. Alle KDE-toepassingen waarin u een hyperkoppeling kunt aanklikken maken gebruik van deze instelling. +Comment[nn]=Med denne tenesta kan du setja opp standardnettlesaren. Alle KDE-program der du kan følgja hyperlenkjer skal bruka denne innstillinga. +Comment[pa]=ਇਥੇ ਤੁਸੀਂ ਆਪਣੇ ਮੂਲ ਵੈੱਬ ਝਲਕਾਰੇ ਦੀ ਸੰਰਚਨਾ ਕਰ ਸਕਦੇ ਹੋ।ਸਭ KDE ਕਾਰਜ, ਜਿਨਾਂ ਵਿੱਚ ਵੀ ਨੈੱਟ ਸੰਬੰਧ ਹਨ, ਇਸ ਸੈਟਿੰਗ ਦਾ ਸਨਮਾਨ ਕਰਨਗੇ। +Comment[pl]=Tu można wybrać domyślną przeglądarkę. Wszystkie programy KDE, w których korzysta się z odnośników, powinny używać tego ustawienia. +Comment[pt]=Este serviço permite-lhe configurar o seu navegador Web predefinido. Todas as aplicações do KDE onde possa seleccionar hiperligações deverão respeitar esta configuração. +Comment[pt_BR]=Aqui você pode configurar o seu navegador Internet padrão. Todas os aplicativos do KDE que precisarem acessar um site através de um link devem seguir esta configuração. +Comment[ro]=Aici puteți configura navigatorul de web implicit. Toate aplicațiile KDE în care puteți selecta o hiperlegătură ar trebui să onoreze această setare. +Comment[ru]=Здесь можно настроить веб-браузер по умолчанию. Все приложения KDE, в которых можно вызвать гиперссылку, будут использовать этот параметр. +Comment[rw]=Hano ushobora kuboneza mucukumbuzi y'urubuga mburabuzi. Amaporogaramu yose KDE muri yo ushobora guhitamo amahuzanyobora yakubahiriza iri genamiterere. +Comment[se]=Dáinna bálvalusain sáhtát heivehit standárda fierpmádatlogana. Buot KDE-prográmmain mas sáhttá čuovvut hyperliŋkkaid geavaha dán heivehusa. +Comment[sk]=Tu môžete nastaviť štandardný prehliadač. Všetky aplikácie KDE, v ktorým môžete aktivovať URL, by mali používať toto nastavenie. +Comment[sl]=Tu lahko nastavite vaš privzeti spletni brskalnik. Vsi programi za KDE, ki ga uporabljajo, bi morali upoštevati te nastavitve. +Comment[sr]=Овде можете да подесите ваш подразумевани веб прегледач. Сви KDE програми у којима можете да одаберете хипервезе требало би да поштују ово подешавање. +Comment[sr@Latn]=Ovde možete da podesite vaš podrazumevani veb pregledač. Svi KDE programi u kojima možete da odaberete hiperveze trebalo bi da poštuju ovo podešavanje. +Comment[sv]=Här kan du anpassa förvald webbläsare. Alla KDE-program där du kan välja hyperlänkar bör följa inställningen. +Comment[ta]=இந்த சேவை உங்களுடைய முன்னிருந்த மின் அஞ்சல்உறுப்பினர வடிவமைத்துக்கொள்ள அனுமதிக்கிறது. மின்அஞ்சல் உறுப்பினர் பயன்பாடுதேவைப்படுகிற எல்லா கேடிஇபயன்பாடுகளும் இந்த அமைப்பைநிறுவவேண்டும். +Comment[tg]=Ин сервиси коргири пешфарзи почтаи электроникиатонро танзим мекунед. Тамоми нармафзорҳои KDE ки ниёз ба дастраси ба коргири почтаи электроникӣ доранд аз ин танзимоти табии хоҳанд кард. +Comment[th]=คุณสามารถปรับแต่งเว็บบราวเซอร์ปริยายของคุณได้ที่นี่ แอพพลิเคชั่นของ KDE ทุกตัว ที่คุณสามารถเลือก hyperlink ได้จะทำตามค่าที่ตั้งนี้ +Comment[tr]=Burada öntanımlı web tarayıcınızı yapılandırabilrsiniz. Tüm KDE uygulamalarında bulunan bağlantılar bu seçenek kullanılarak açılacaktır. +Comment[tt]=Monda töp gizgeçeñne köyläp bula. Hiperlink saylanğan çaqta bar KDE-yazılımnar da bu köyläwlärne qullanırğa tieş. +Comment[uk]=Тут можна вказати ваш типовий навігатор Тенет. Всі програми KDE, які підтримують роботу з гіперпосиланнями повинні використовувати це налаштування. +Comment[vi]=Dịch vụ này cho phép bạn cấu hình trình duyệt mạng mặc định. Tất cả các chương trình của KDE có chứa liên kết mạng sẽ cần một trình duyệt dựa vào thiết lập này. +Comment[wa]=Vos ploz apontyî vaici vosse prémetou betchteu waibe. Tos les programes KDE ki vs poloz tchoezi des hårdeyes duvrént shure cisse tchuze. +Comment[zh_CN]=您可以在这里配置您默认的 Web 浏览器。您在所有 KDE 应用程序中单击超级链接时都应该遵从此设置。 +Comment[zh_TW]=您可以在這裡設定您的預設網頁瀏覽器。所有你可以選擇超連結的 KDE 應用程式都應該遵從這個設定。 +configurationType=internal_browser diff --git a/kcontrol/componentchooser/componentservices/kcm_kemail.desktop b/kcontrol/componentchooser/componentservices/kcm_kemail.desktop new file mode 100644 index 000000000..0952e56a7 --- /dev/null +++ b/kcontrol/componentchooser/componentservices/kcm_kemail.desktop @@ -0,0 +1,158 @@ +Name=Email Client +Name[af]=E-pos Kliënt +Name[ar]=زبون البريد الإلكتروني +Name[az]=Epoçt Alıcısı +Name[be]=Кліент электроннай пошты +Name[bg]=Пощенски клиент +Name[bn]=ই-মেইল ক্লায়েন্ট +Name[br]=Kliant Postel +Name[bs]=Email klijent +Name[ca]=Client de correu +Name[cs]=Emailový klient +Name[csb]=Pòcztowô programa +Name[cy]=Dibynnydd Ebost +Name[da]=E-mail-klient +Name[de]=E-Mail-Programm +Name[el]=Πελάτης email +Name[eo]=Retpoŝtkliento +Name[es]=Cliente de correo electrónico +Name[et]=E-posti klient +Name[eu]=Posta elektroniko bezeroa +Name[fa]=کارخواه رایانامه +Name[fi]=Sähköpostiohjelma +Name[fo]=Postforrit +Name[fr]=Client de courrier +Name[fy]=E-postprogramma +Name[ga]=Cliant Ríomhphoist +Name[gl]=Cliente de Correo-e +Name[he]=תוכנית דוא"ל +Name[hi]=ईमेल डाकिया +Name[hr]=Klijent e-pošte +Name[hu]=Levelezőprogram +Name[id]=Klien Mail +Name[is]=Póstforrit +Name[it]=Programma di posta elettronica +Name[ja]=メールクライアント +Name[ka]=საფოსტო კლიენტი +Name[kk]=Эл.пошта клиенті +Name[km]=កម្មវិធី​អ៊ីមែល +Name[ko]=전자 우편 클라이언트 +Name[lo]=ໄຄແອນ Alarm +Name[lt]=E. pašto klientas +Name[lv]=Epasta klients +Name[mk]=Клиент за е-пошта +Name[mn]=Захиа-програм +Name[ms]=Pelanggan E-mel +Name[mt]=Programm tal-imejl +Name[nb]=E-postprogram +Name[nds]=Nettpost-Programm +Name[ne]=इमेल क्लाइन्ट +Name[nl]=E-mailprogramma +Name[nn]=E-postprogram +Name[nso]=Moreki wa E-poso +Name[pa]=ਈ-ਮੇਲ ਕਲਾਂਈਟ +Name[pl]=Program pocztowy +Name[pt]=Cliente de E-mail +Name[pt_BR]=Cliente de E-mail +Name[ro]=Client de email +Name[ru]=Клиент электр. почты +Name[rw]=Umukiriya Imeli +Name[se]=E-boastaprográmma +Name[sk]=E-mailový klient +Name[sl]=Odjemalec e-pošte +Name[sr]=Е-поштански клијент +Name[sr@Latn]=E-poštanski klijent +Name[ss]=Likhasimende le email +Name[sv]=E-postklient +Name[ta]=மின்னஞ்சல் வேண்டி +Name[te]=ఈమెయిల్ క్లైంట్ +Name[tg]=Коргири почтаи электроникӣ +Name[th]=โปรแกรมรับส่งอีเมล +Name[tr]=E-posta Programı +Name[tt]=Email Klient +Name[uk]=Клієнт електронної пошти +Name[uz]=Xat-xabar klienti +Name[uz@cyrillic]=Хат-хабар клиенти +Name[ven]=Mushumisani wa Email +Name[vi]=Trình thư +Name[wa]=Cliyint d' emilaedje +Name[xh]=Umxhasi we Email +Name[zh_CN]=电子邮件客户程序 +Name[zh_TW]=電子郵件客戶端程式 +Name[zu]=Umxhasi weposi lekhomputha +Comment=This service allows you to configure your default email client. All KDE applications which need access to an email client application should honor this setting. +Comment[af]=Hierdie diens laat jou toe om jou standaard e-pos kliënt op te stel. Al die KDE programme wat toegang tot 'n e-pos kliënt benodig behoort hierdie instelling te gebruik. +Comment[ar]=هذه الخدمة تسمح لك بتهيئة برنامج البريد الافتراضي. جميع تطبيقات كيدي التي ستحتاج الى الوصول الى تطبيق بريد الكتروني يجب أن تتبع هذا الضبط. +Comment[be]=Гэты сервіс дазваляе вызначыць для сябе стандартны кліент электроннай пошты. Усе праграмы KDE, у якіх вы можаце выбраць гіперспасылку, павінны выкарыстоўваць гэтае настаўленне. +Comment[bg]=Избор на предпочитан пощенски клиент. Всички програми на KDE ще ползват този компонент. +Comment[bn]=এই সার্ভিসটির সাহায্যে আপনার ডিফল্ট ই-মেইল ক্লায়েন্ট কনফিগার করতে পারেন। যে কোনো কে.ডি.ই. অ্যাপলিকেশনের ই-মেইল ক্লায়েন্ট প্রয়োজন হলে এই নির্বাচন মানা উচিত। +Comment[bs]=Ovaj servis vam omogućuje da podesite vaš podrazumjevani email klijent. Sve KDE aplikacije kojima je potreban pristup email klijent aplikaciji bi trebale poštovati ovu postavku. +Comment[ca]=Aquest servei us permet configurar el vostre client de correu per omissió. Totes les aplicacions KDE que precisin d'accés a una aplicació de client de correu tindria que reconèixer aquesta opció. +Comment[cs]=Tato služba umožňuje nastavit si výchozího klienta emailu. Všechny KDE aplikace, které vyžadují přístup k emailové aplikaci, by měly používat toto nastavení. +Comment[csb]=Tuwò je mòżno wëbrac domëslną pòcztową programã. Wszëtczé programë KDE, w jaczich brëkùje sã z lënkòw, mùszôłëbë ùżëwac tegò ùstôwù. +Comment[cy]=Mae'r gwasanaeth ymayn gadael i chi ffurfweddu eich dibynnydd ebost cyffredinol. Dylai bob raglen KDE sydd angen cyrchiad i ddibynnydd ebost ddefnyddio'r gosodiad yma. +Comment[da]=Denne service tillader dig at indstille din e-mail-klient. Alle KDE-programmer der behøver adgang til en e-mail-klient skulle respektere denne indstilling. +Comment[de]=Hier können Sie Ihr E-Mail-Programm einrichten. Alle KDE-Anwendungen, die Zugriff auf ein solches Programm benötigen, sollten diese Einstellungen verwenden. +Comment[el]=Αυτή η υπηρεσία σας επιτρέπει να ρυθμίσετε τον προκαθορισμένο πελάτη email σας. Όλες οι εφαρμογές του KDE που χρειάζονται πρόσβαση σε μια εφαρμογή πελάτη email θα πρέπει να χρησιμοποιούν αυτή τη ρύθμιση. +Comment[en_GB]=This service allows you to configure your default email client. All KDE applications which need access to an email client application should honour this setting. +Comment[eo]=Tiu servo ebligas, ke vi elektas vian norman retpoŝtilon. Ĉiuj KDEaj aplikoj, kiuj bezonas retpoŝtilon, uzos tiun agordon. +Comment[es]=Este servicio le permite configurar su cliente de correo predefinido. Todas las aplicaciones KDE que precisan acceso a una aplicación de cliente de correo deberían reconocer esta opción. +Comment[et]=See teenus võimaldab sul määrata kindlaks vaikimisi kasutatava e-posti kliendi. Kõik KDE rakendused, mis vajavad mingil moel e-posti klienti, peaksid arvestama selle seadega. +Comment[eu]=Zerbitzu honen bidez zure posta eletronikoko bezero lehenetsia konfigura dezakezu. Posta elektroniko bezeroa behar duten KDE aplikazio guztiek ezarpen hau errespetatu egin beharko lukete. +Comment[fa]=این خدمت به شما اجازۀ پیکربندی کارخواه رایانامۀ پیش‌فرضتان را می‌دهد. همۀ کاربردهای KDE که نیاز به دستیابی به کاربردهای کارخواه رایانامه دارند، باید این تنظیم را قبول کنند. +Comment[fi]=Tämän palvelun avulla voit määritellä oletussähköpostiohjelman. Kaikki sähköpostiohjelmaa käyttävätKDE-sovellukset huomioivat tämän asetuksen. +Comment[fr]=Ce service vous permet de configurer votre client de courrier par défaut. Toutes les applications KDE qui ont besoin d'accéder à un client de courrier électronique doivent accepter ce réglage. +Comment[fy]=Mei dizze tsjinst kinne jo de standert e-postprogramma ynstelle. KDE-tapassingen dy tagong ta in e-postprogramma neadich ha sille dizze ynstellings brûke. +Comment[gl]=Este servizo permite-lle configurar o seu cliente de correo predeterminado. Todas as aplicacións de KDE que precisen aceso á aplicación de correo electrónico deberian ter en conta esta opción. +Comment[he]=שירות זה מאפשר לך להגדיר את תוכנית הדוא"ל שתשמש כברירת מחדל. כל יישומי KDE שיזדקקו לגישה אל תוכנית דוא"ל יתחשבו בהגדרה זו. +Comment[hi]=यह सेवा आपको आपके डिफ़ॉल्ट ईमेल क्लाएंट को कॉन्फ़िगर करने की स्वीकृति देती है. सभी केडीई अनुप्रयोग जो ईमेल क्लाएंट अनुप्रयोग एक्सेस करते हैं, वे इस विन्यास इस्तेमाल करेंगे. +Comment[hr]=Usluga koja omogućuje konfiguriranje zadanog klijenta e-pošte. Sve KDE aplikacije koje zahtijevaju pristup klijentu e-pošte poštivat će ovaj odabir. +Comment[hu]=Ez a szolgáltatás lehetővé teszi az alapértelmezett e-mail-kliens előírását. Az összes KDE-alkalmazásnak figyelembe kell vennie ezt az értéket a levelezőprogram elindításakor. +Comment[is]=Þessi þjónusta leyfir þér að skilgreina sjálfgefið tölvupóstforrit. Öll KDE forrit sem þurfa aðgengi að tölvupóstforriti ættu að virða þessa stillingu. +Comment[it]= Questo servizio ti permette di configurare il tuo programma di posta elettronica preferito. Tutte le applicazioni di KDE che avranno bisogno di accedere ad un programma di posta elettronica dovranno rispettare questa impostazione. +Comment[ja]=ここで標準のメールクライアントを設定します。メールクライアントを必要とするすべての KDE アプリケーションは、この設定に従います。 +Comment[ka]=აქ შეიძლება სტანდარტული საფოსტო კლიენტის დაკონფიგურირება. KDE-ს ყველა პროგრამა, ვისაც სჭირდება ფოსტა, გაითვალისწინებენ ამ პარამეტრს +Comment[kk]=Мұнда Сіз әдетті эл.пошта клиентін таңдай аласыз. Бүкіл KDE қолданбаларда эл.пошта керек болғанда осы таңдау қолданылады. +Comment[km]=សេវា​នេះ​អនុញ្ញាត​ឲ្យ​អ្នក​កំណត់​រចនាសម្ព័ន្ធ​កម្មវិធី​អ៊ីមែល​លំនាំដើម​របស់​អ្នក ។ កម្មវិធី KDE ទាំងអស់ ដែល​ត្រូវការ​ចូលដំណើរការ​កម្មវិធី​អ៊ីមែល គួរ​តែ​គោរព​ការ​កំណត់​នេះ ។ +Comment[ko]=이 서비스에서는 기본 전자 우편 클라이언트를 설정할 수 있습니다. 전자 우편 클라이언트에 접근하려고 하는 모든 KDE 프로그램에서는 이 설정을 따라야 합니다. +Comment[lt]=Ši tarnyba leidžia jums nustatyti Jūsų numatytą pašto klientą. Visos KDE programos, kurioms reikia e. pašto kliento programos, turėtų atsižvelgti į šį nustatymą. +Comment[lv]=Šis servis ļauj Jums konfigurēt noklusējuma epasta klientu. Visas KDE aplikācijas, kurām ir nepieciešams epasts, izmantos šo parametru. +Comment[mk]=Овој сервис ви овозможува да го конфигурирате вашиот стандарден клиент за електронска пошта. Сите KDE-апликации на кои им е потребен пристап до електронска пошта ќе ги почитуваат овие поставувања. +Comment[mn]=Та энд өөрийн захианы програмаа тохируулж болно. Захианы програмд хандах шаардлагатай бүх КДЭ-х.программууд энэ тохируулгыг хэрэглэх болно. +Comment[ms]=Servis ini membolehkan anda konfigur klien e-mel piawai anda. Semua aplikasi KDE yang perlu akses kepada aplikasi klien e-mel hendaklah menerima seting ini. +Comment[mt]=Dan is-servizz iħallik tikkonfigura programm tal-imejl impliċitu. Il-programmi ta' KDE kollha li jkollom bżonn iħaddmu programm tal-imejl għandhom itellgħu il-programm li tagħżel hawn. +Comment[nb]=Med denne tjenesten kan du sette opp standard-e-postprogrammet. Alle KDE-programmer som trenger tilgang til e-post bør ta hensyn til denne innstillinga. +Comment[nds]=Hier kannst Du Dien Standard-Nettpostprogramm angeven. All KDE- Programmen, de Togang to'n Nettpostprogramm bruukt, schullen dat denn anwennen. +Comment[ne]=यो सेवाले तपाईँलाई पूर्वनिर्धारित इमेल क्लाइन्ट कन्फिगर गर्न अनुमति दिन्छ । इमेल क्लाइन्ट अनुप्रयोग पहुँच आवश्यक पर्ने सबै KDE अनुप्रयोगहरूले यो सेटिङ मान्नु पर्छ । +Comment[nl]=Met deze service kunt u uw standaard e-mailprogramma instellen. KDE-toepassingen die toegang tot een e-mailprogramma nodig hebben zullen deze instellingen gebruiken. +Comment[nn]=Med denne tenesta kan du setja opp standard-e-postprogrammet. Alle KDE-program som treng tilgang til e-post bør følgja denne innstillinga. +Comment[nso]=Tirelo ye ego dumelela go beakanya moreki wa gago wa e-poso wa thuso ya tshoganetso. Ditshumiso kamoka tsa KDE tseo di hlokago tsenelo go tshomiso ya moreki wa e-poso di swanetse go hlompha dipeakanyo tse. +Comment[pa]=ਇਥੇ ਤੁਸੀਂ ਆਪਣੇ ਮੂਲ ਈ-ਮੇਲ ਕਲਾਂਈਟ ਦੀ ਸੰਰਚਨਾ ਕਰ ਸਕਦੇ ਹੋ। ਸਭ KDE ਕਾਰਜ, ਜਿਨਾਂ ਨੇ ਵੀ ਈ-ਮੇਲ ਕਲਾਂਈਟ ਵਰਤਣਾ ਹੈ, ਇਸ ਸੈਟਿੰਗ ਦਾ ਸਨਮਾਨ ਕਰਨਗੇ। +Comment[pl]=Tu można wybrać domyślny program pocztowy. Wszystkie programy KDE, które korzystają z poczty, powinny używać tego ustawienia. +Comment[pt]=Este serviço permite-lhe configurar o seu cliente de e-mail por omissão. Todas as aplicações do KDE que necessitem do acesso a um cliente de e-mail devem respeitar esta configuração. +Comment[pt_BR]=Este serviço permite a você configurar o seu cliente de e-mail padrão. Todas os aplicativos do KDE que precisarem acessar um cliente de e-mail devem seguir esta configuração. +Comment[ro]=Acest serviciu vă permite să configurați clientul de email implicit. Toate aplicațiile KDE care au nevoie de o aplicație client de email ar trebui să onoreze această setare. +Comment[ru]=Эта служба позволяет вам настроить почтовый клиент по умолчанию. Все приложения KDE, которым нужен почтовый клиент, будут использовать этот параметр. +Comment[rw]=Iyi serivisi ikwemerera kuboneza umukiriya imeli mburabuzi wawe. Porogaramu KDE zose zikeneye ukugera kuri porogaramu mukiriya imeli zizakurikiza iri genamiterere. +Comment[se]=Dáinna bálvalusain sáhtát heivehit standárd e-boastaprográmma. Buot KDE-prográmmat mat geavahit e-boastta berret dáid heivehusaid geavahit. +Comment[sk]=Táto služba umožňuje nastaviť štandardného klienta pošty. Všetky aplikácie KDE, ktoré používajú poštového klienta, by mali používať toto nastavenie. +Comment[sl]=Ta storitev vam omogoča nastavitev vašega privzetega e-poštnega odjemalca. Vsi programi za KDE, ki ga uporabljajo, bi morali upoštevati te nastavitve. +Comment[sr]=Овај сервис вам дозвољава да подесите подразумевани клијент за електронску пошту. Сви KDE програми, којима је потребан приступ електронској пошти, требало би да поштују ову поставку. +Comment[sr@Latn]=Ovaj servis vam dozvoljava da podesite podrazumevani klijent za elektronsku poštu. Svi KDE programi, kojima je potreban pristup elektronskoj pošti, trebalo bi da poštuju ovu postavku. +Comment[sv]=Den här tjänsten låter dig anpassa förvald e-postklient. Alla KDE-program som behöver använda e-postklient ska använda den här inställningen +Comment[ta]=இந்த சேவை உங்களுடைய முன்னிருந்த மின் அஞ்சல் உறுப்பினரை வடிவமைத்துக் கொள்ள அனுமதிக்கிறது. மின் அஞ்சல் உறுப்பினர் பயன்பாடு தேவைப்படுகிற எல்லா கேடிஇ பயன்பாடுகளும் இந்த அமைப்பை நிறுவவேண்டும். +Comment[tg]= Ин сервиси коргири пешфарзи почтаи электроникиатонро танзим мекунед. Тамоми нармафзорҳои KDE ки ниёз ба дастраси ба коргири почтаи электроникӣ доранд аз ин танзимоти табии хоҳанд кард. +Comment[th]=บริการนี้จะอนุญาตให้คุณตั้งโปรแกรมรับส่งอีเมลปริยายของคุณ แอพพลิเคชั่นของ KDE ทุกตัวซึ่งจำเป็นต้องใช้งานโปรแกรมรับส่งอีเมล จะทำตาม ค่าที่ตั้งนี้ +Comment[tr]=Bu servis öntanımlı e-posta istemcinizi seçmenize yardımcı olur. +Comment[tt]=Monda töp email-klienteñne köyläp bula. Email belän eşlägän çaqta bar KDE-yazılımnar da bu köyläwlärne qullanırğa tieş. +Comment[uk]=Ця служба дозволяє вам налаштувати ваш типовий клієнт електронної пошти. Всі програми KDE, яким потрібен доступ до клієнта ел. пошти повинні користуватися цими параметрами. +Comment[uz]=Bu xizmat andoza xat-xabar klientingizni moslash uchun imkoniyat yaratadi. Xat-xabar klienti kerak boʻlgan hamma KDE dasturlari shu moslamadan foydalanishi kerak. +Comment[uz@cyrillic]=Бу хизмат андоза хат-хабар клиентингизни мослаш учун имконият яратади. Хат-хабар клиенти керак бўлган ҳамма KDE дастурлари шу мосламадан фойдаланиши керак. +Comment[ven]=Tshumelo iyi ini tendela u dzudzanya mushumisani wa email ya default yanu. Apulifikhesheni dza KDE dzothe dzine dza toda apulifikhesheni ya mushimisani wa email i fanela u thonifha mavhekanyele aya. +Comment[vi]=Dịch vụ này cho phép bạn cấu hình trình thư mặc định. Tất cả các chương trình của KDE cần gửi thư điện tử đều dựa vào thiết lập này. +Comment[wa]=Ci siervice vos permete d' apontyî vosse prémetou cliyint d' emile. Tos les programes di KDE k' ont dandjî d' eployî on cliyint emile duvrént shure cisse tchuze. +Comment[xh]=Lenkonzo ikuvumela ukuba uqwalasele umxhasi wakho we email. Zonke izicelo ezidinga unikezelo kumxhasi we email wesicelo kufuneka yamkele esisicelo. +Comment[zh_CN]=此服务允许您配置您的默认电子邮件程序。所有需要访问电子邮件客户程序的 KDE 应用程序都遵从此设置。 +Comment[zh_TW]=這個服務允許您設定您的預設電子郵件客戶端程式。所有需要使用電子郵件客戶端應用程式的 KDE 應用程式都應該遵從這個設定。 +Comment[zu]=Lo msebenzi ukuvumela ukuthi uhlanganisele umxhasi weposi lekhomputha wendalo. Bonke abayaleli be-KDE abadinga ukungena kumyaleli womxhasi weposi lekhomputha kumele bahloniphe lesi silingiselelo. +configurationType=internal_email diff --git a/kcontrol/componentchooser/componentservices/kcm_terminal.desktop b/kcontrol/componentchooser/componentservices/kcm_terminal.desktop new file mode 100644 index 000000000..1bcd9171d --- /dev/null +++ b/kcontrol/componentchooser/componentservices/kcm_terminal.desktop @@ -0,0 +1,157 @@ +Name=Terminal Emulator +Name[af]=Terminaal Emulasie +Name[ar]=مضاهِ مطراف +Name[az]=Terminal Emulyasiyası +Name[be]=Эмулятар тэрміналу +Name[bg]=Конзолна програма +Name[bn]=টার্মিনাল এমুলেটর +Name[br]=Kendarvanerezh termenell +Name[bs]=Simulator terminala +Name[ca]=Emulador de terminal +Name[cs]=Emulátor terminálu +Name[csb]=Emùlator terminala +Name[cy]=Efelychydd Terfynell +Name[da]=terminalemulator +Name[de]=Terminal-Emulator +Name[el]=Προσομοιωτής τερματικού +Name[eo]=Terminalimitaĵo +Name[es]=Emulador de terminal +Name[et]=Terminaliemulaator +Name[eu]=Terminal emuladorea +Name[fa]=مقلد پایانه +Name[fi]=Komentoikkuna +Name[fo]=Útstøðshermari +Name[fr]=Émulateur de terminal +Name[fy]=Terminal +Name[ga]=Aithriseoir Teirminéil +Name[gl]=Emulador de Terminal +Name[he]=הדמיית מסוף +Name[hi]=टर्मिनल एमुलेटर +Name[hr]=Emulator terminala +Name[hu]=Parancsértelmező +Name[id]=Emulator Terminal +Name[is]=Skjáhermir KDE +Name[it]=Emulatore di terminale +Name[ja]=ターミナルエミュレータ +Name[ka]=ტერმინალის ემულატორი +Name[kk]=Терминал эмуляторы +Name[km]=វត្ថុ​ត្រាប់​តាម​ស្ថានីយ +Name[ko]=터미널 에뮬레이터 +Name[lo]=ຕົວຈຳລອງເທີມີນອນ +Name[lt]=Terminalo emuliatorius +Name[lv]=Termināla Emulators +Name[mk]=Терминалски емулатор +Name[mn]=Терминал-Эмулатор +Name[ms]=Pelagak Terminal +Name[mt]=Emulatur ta' terminal +Name[nb]=Terminalemulator +Name[nds]=Terminal-Emulator +Name[ne]=टर्मिनल इमुलेटर +Name[nl]=Terminal +Name[nn]=Terminalemulator +Name[nso]=Moekisi wa Terminal +Name[pa]=ਟਰਮੀਨਲ ਸਮਰੂਪ +Name[pl]=Emulator terminala +Name[pt]=Emulador de Terminal +Name[pt_BR]=Emulador de Terminal +Name[ro]=Emulator de terminal +Name[ru]=Эмулятор терминала +Name[rw]= Mukuruzi Ihera +Name[se]=Terminálemuláhtor +Name[sk]=Emulátor terminálu +Name[sl]=Terminalski emulator +Name[sr]=Емулатор терминала +Name[sr@Latn]=Emulator terminala +Name[ss]=Silingiseli sesikhungo +Name[sv]=Terminalemulator +Name[ta]=கடைசி போட்டியாளர் +Name[te]=టెర్మినల్ ఎములేటర్ +Name[tg]=Эмулятори поёна +Name[th]=โปรแกรมจำลองเทอร์มินัล +Name[tr]=Uçbirim Emülasyonu +Name[tt]=Terminal Emulatorı +Name[uk]=Емуляція терміналу +Name[uz]=Terminal emulyatori +Name[uz@cyrillic]=Терминал эмулятори +Name[ven]=Mulingedzisi wa theminala +Name[vi]=Mô phỏng thiết bị cuối +Name[wa]=Terminå +Name[xh]=Umzami kulinganisela ngokulinganayo Wendlela yesiphelo +Name[zh_CN]=终端仿真器 +Name[zh_TW]=終端機模擬程式 +Name[zu]=Umlingisi wangaphandle +Comment=This service allows you to configure your default terminal emulator. All KDE applications which invoke a terminal emulator application should honor this setting. +Comment[af]=Hierdie diens laat jou toe om jou standaard terminaal emuleerder op te stel. Al die KDE programme wat 'n terminaal skep behoort hierdie instelling te gebruik. +Comment[be]=Гэты сервіс дазваляе вызначыць для сябе стандартны эмулятар тэрміналу. Усе праграмы KDE, якія запускаюць эмулятар тэрміналу, павінны выкарыстоўваць гэтае настаўленне. +Comment[bg]=Избор на предпочитана конзолна програма. Всички програми на KDE ще ползват този компонент. +Comment[bn]=এই সার্ভিসটির সাহায্যে আপনার ডিফল্ট টার্মিনাল এমুলেটর কনফিগার করতে পারেন। যে কোনো কে.ডি.ই. অ্যাপলিকেশনের টার্মিনাল এমুলেটর চালানোর প্রয়োজন হলে এই নির্বাচন মানা উচিত। +Comment[bs]=Ovaj servis vam omogućuje da podesite vaš podrazumijevani simulator terminala. Sve KDE aplikacije kojima je potreban terminal bi trebale poštovati ovu postavku. +Comment[ca]=Aquest servei us permet configurar el vostre emulador de terminal per omissió. Totes les aplicacions KDE que precisin d'accés a una aplicació de client de correu tindria que reconèixer aquesta opció. +Comment[cs]=Tato služba umožňuje nastavit si výchozího emulátor terminálu. Všechny KDE aplikace, které spouští emulátor terminálu, by měly používat toto nastavení. +Comment[csb]=Tuwò je mòżno wëbrac domëslny emùlator terminala. Wszëtczé programë KDE, w jaczich brëkùje sã z lënkòw, mùszôłëbë ùżëwac tegò ùstôwù. +Comment[cy]=Mae'r gwasanaeth yma yn gadael i chi ffurfweddu eich efelychydd terfynell cyffredinol. Dylai pob rhaglen KDE sy'n cychwyn efelychydd terfynell ddefnyddio'r gosodiad yma. +Comment[da]=Denne service tillader dig at indstille din terminalemulator. Alle KDE-programmer der behøver adgang til en terminalemulator skulle respektere denne indstilling. +Comment[de]=Hier können Sie den voreingestellten Terminal-Emulator einrichten. Alle KDE-Anwendungen, die Zugriff auf ein solches Programm benötigen, sollten diese Einstellungen verwenden. +Comment[el]=Αυτή η υπηρεσία σας επιτρέπει να ρυθμίσετε τον προκαθορισμένο προσομοιωτή τερματικού σας. Όλες οι εφαρμογές του KDE που καλούν μια εφαρμογή προσομοιωτή τερματικού θα πρέπει να τηρούν αυτήν τη ρύθμιση. +Comment[en_GB]=This service allows you to configure your default terminal emulator. All KDE applications which invoke a terminal emulator application should honour this setting. +Comment[eo]=Tiu servo ebligas, ke vi elektas vian norman terminalon. Ĉiuj KDEaj aplikoj, kiuj bezonas terminalon, uzos tiun agordon. +Comment[es]=Este servicio le permite configurar su emulador de terminal predefinido. Todas las aplicaciones KDE que invoquen un emulador de terminal deberían reconocer esta opción. +Comment[et]=See teenus võimaldab sul määrata kindlaks vaikimisi kasutatava terminaliemulaatori. Kõik KDE rakendused, mis vajavad mingil moel terminaliemulaatorit, peaksid arvestama selle seadega. +Comment[eu]=Zerbitzu honen bidez zure terminal emuladore lehenetsia konfiguradezakezu. Terminal emuladore bati deitzen dioten KDEren aplikazio guztiek ezarpen hau onartu egin beharko lukete. +Comment[fa]=این خدمت به شما اجازۀ پیکربندی مقلد پایانۀ پیش‌فرضتان را می‌دهد. همۀ کاربردهای KDE که نیاز به دستیابی به کاربردهای کارخواه رایانامه دارند، باید این تنظیم را قبول کنند. +Comment[fi]=Tämän palvelun avulla voit asettaa oletus-komentoikkunaa. Kaikki komentoikkunaa käyttävät KDE-sovellukset huomioivat tämän asetuksen. +Comment[fr]=Ce service vous permet de configurer votre émulateur de terminal par défaut. Toutes les applications KDE qui appellent une application d'émulation de terminal doivent accepter ce réglage. +Comment[fy]=Mei dizze tsjinst kinne jo de standert terminalemulator ynstelle. Alle KDE-tapassingen dy in terminalemulator oanroppe sille brûk meitsje fan dizze ynstelling. +Comment[gl]=Este servizo permite-lle configurar o seu emulador de terminal predeterminado. Todas as aplicacións de KDE que invoquen a un emulador de terminal deberian facer caso desta opción. +Comment[he]=שירות זה מאפשר לך להגדיר את תוכנית הדמיית המסוף שתשמש כברירת מחדל. כל יישומי KDE שיקראו ליישום הדמיית מסוף יתחשבו בהגדרה זו. +Comment[hi]=यह सेवा आपको आपके डिफ़ॉल्ट टर्मिनल एमुलेटर को कॉन्फ़िगर करने की स्वीकृति देती है. सभी केडीई अनुप्रयोग जो टर्मिनल एमुलेटर अनुप्रयोग चालू करते हैं, वे इस विन्यास इस्तेमाल करेंगे. +Comment[hr]=Usluga koja omogućuje konfiguriranje zadanog emulatora terminala. Sve KDE aplikacije koje pozivaju aplikaciju emulatora terminala poštivat će ovaj odabir. +Comment[hu]=Ez a szolgáltatás lehetővé teszi az alapértelmezett parancsértelmező előírását. Az összes KDE-alkalmazásnak figyelembe kell vennie ezt az értéket a parancsértelmező elindításakor. +Comment[is]=Þessi þjónusta leyfir þér að skilgreina sjálfgefinn skjáhermi. Öll KDE forrit sem þurfa aðgengi að skjáhermi ættu að virða þessa stillingu. +Comment[it]= Questo servizio ti permette di configurare il tuo programma di emulazione terminale preferito. Tutte le applicazioni di KDE che avranno bisogno di aprire un terminale dovranno rispettare questa impostazione. +Comment[ja]=ここで標準のターミナルエミュレータを設定します。ターミナルエミュレータを起動するすべての KDE アプリケーションは、この設定に従います。 +Comment[ka]=Comment=აქ შეიძლება სტანდარტული ტერმინალის ემულატორის დაკონფიგურირება. KDE-ს ყველა პროგრამა, ვისაც სჭირდება ფოსტა, გაითვალისწინებენ ამ პარამეტრს +Comment[kk]=Мұнда Сіз әдетті терминал эмуляторын таңдай аласыз. Бүкіл KDE қолданбаларда терминал эмуляторы керек болғанда осы таңдау қолданылады. +Comment[km]=សេវា​នេះ​អនុញ្ញាត​ឲ្យ​អ្នក​កំណត់​រចនាសម្ព័ន្ធ វត្ថុ​ត្រាប់​តាម​ស្ថានីយ​លំនាំដើម​របស់​អ្នក ។ កម្មវិធី KDE ទាំងអស់ ដែល​ហៅ​វត្ថុ​ត្រាប់​តាម​ស្ថានីយ​មួយ គួរ​តែ​គោរព​ការ​កំណត់​នេះ ។ +Comment[ko]=이 서비스에서는 기본 터미널 에뮬레이터를 설정할 수 있습니다. 터미널 에뮬레이터에 접근하려고 하는 모든 KDE 프로그램에서는 이 설정을 따라야 합니다. +Comment[lt]=Ši tarnyba leidžia jumos nustatyti Jūsų numatytą pašto klientą. Visos KDE programos, kurios iškviečia terminalo emuliatoriaus programa, turėtų atsižvelgti į šį nustatymą. +Comment[lv]=Šis serviss Jums ļauj uzstādīt noklusējuma termināla emulātoru. Visas KDE aplikācijas, kurām vajag termināla emulātoru, izmantos šo parametru. +Comment[mk]=Овој сервис ви овозможува да го конфигурирате вашиот стандарден терминалски емулатор. Сите KDE-апликации кои стартуваат апликација во терминалски емулатор ќе ги почитуваат овие поставувања. +Comment[mn]=Энд та стандарт Терминал-Эмулатораа тохируулж болно. Терминал-Эмулатор програмд хандах шаардлагатай бүх КДЭ-х.программууд энэ тохируулгыг хэрэглэх болно. +Comment[ms]=Servis ini membolehkan anda konfigur pelagak terminal piawai. Semua aplikasi KDE yang membatalkan aplikasi pelagak terminal hendaklah menerima seting ini. +Comment[mt]=Dan is-servizz iħallik tikkonfigura emulatur ta' terminal impliċitu. Il-programmi ta' KDE kollha li jkollom bżonn iħaddmu emulatur ta' terminal għandhom itellgħu il-programm li tagħżel hawn. +Comment[nb]=Denne tjenesten lar deg velge hvilken terminalemulator du foretrekker. Alle KDE-program som starter en terminalemulator bør ta hensyn til disse innstillingene. +Comment[nds]=Hier kannst Du Dien Standard-Terminalemulator angeven. All KDE- Programmen, de en Terminalemulator starten wüllt, schullen dat denn anwennen. +Comment[ne]=यो सेवाले तपाईँलाई पूर्वनिर्धारित टर्मिनल इमुलेटर कन्फिगर गर्न अनुमति दिन्छ । टर्मिनल इमुलेटर आव्हान गर्ने सबै KDE अनुप्रयोगहरूले यो सेटिङ मान्नु पर्छ । +Comment[nl]=Met deze service kunt u uw standaard terminalemulator instellen. Alle KDE-toepassingen die een terminalemulator aanroepen zullen gebruik maken van deze instelling. +Comment[nn]=Med denne tenesta kan du setja oppp standardterminalemulatoren. Alle KDE-program som startar terminalemulatorar bør følgja denne innstillinga. +Comment[nso]=Tirelo ye ego dumelela go beakanya moekisi wa gago wa terminal wa thuso ya tshoganetso. Ditshomiso kamoka tsa KDE tseo di tlisago tshomiso ya moekisi wa bofelong di swanetse go hlompha peakanyo ye. +Comment[pa]=ਇਥੇ ਤੁਸੀਂ ਆਪਣੇ ਮੂਲ ਟਰਮੀਨਲ ਦੀ ਸੰਰਚਨਾ ਕਰ ਸਕਦੇ ਹੋ। ਸਭ KDE ਕਾਰਜ, ਜਿਨਾਂ ਵਿੱਚ ਵੀ ਟਰਮੀਨਲ ਲੋੜੀਦਾ ਹੈ, ਇਸ ਸੈਟਿੰਗ ਦਾ ਸਨਮਾਨ ਕਰਨਗੇ। +Comment[pl]=Tu można wybrać domyślny emulator terminala. Wszystkie programy KDE, które korzystają z terminala, powinny używać tego ustawienia. +Comment[pt]=Este serviço permite-lhe configurar o seu emulador de terminal por omissão. Todas as aplicações do KDE que invoquem um emulador de terminal devem respeitar esta configuração. +Comment[pt_BR]=Este serviço permite a você configurar o seu emulador de terminal padrão. Todos os aplicativos do KDE que precisarem acessar um emulador de terminal devem seguir esta configuração. +Comment[ro]=Acest serviciu vă permite să configurați emulatorul de terminal implicit. Toate aplicațiile de KDE care invocă un emulator de terminal ar trebuie să onoreze această setare. +Comment[ru]=Эта служба позволяет настроить эмулятор терминала по умолчанию. Все приложения KDE, которые вызывают эмулятор терминала, должны следовать этому параметру. +Comment[rw]=Iyi serivisi ikwemerera kuboneza mukuruzi igihera mburabuzi yawe. Porogaramu KDE zose zihamagara mukuruzi igihera zizakurikiza iri genamiterere. +Comment[se]=Dáinna bálvalusain sáhtát bidjat standárdterminálemuláhtora. Buot KDE-prográmmat mat álggahit terminálemuláhtoriid berret dán heivehusa geavahit. +Comment[sk]=Táto služba umožňuje nastaviť štandardný emulátor terminálu. Všetky aplikácie KDE, ktoré používajú emulátor terminálu, by mali používať toto nastavenie. +Comment[sl]=Ta storitev vam omogoča nastavitev vašega privzetega terminalskega emulatorja. Vsi programi za KDE, ki ga uporabljajo, bi morali upoštevati te nastavitve. +Comment[sr]=Овај сервис вам дозвољава да подесите подразумевани емулатор терминала. Сви KDE програми, који позивају емулатор терминала, требало би да поштују ову поставку. +Comment[sr@Latn]=Ovaj servis vam dozvoljava da podesite podrazumevani emulator terminala. Svi KDE programi, koji pozivaju emulator terminala, trebalo bi da poštuju ovu postavku. +Comment[sv]=Den här tjänsten låter dig anpassa din förvalda terminalemulator. Alla KDE-program som startar ett terminalprogram ska använda den här inställningen +Comment[ta]=இந்த சேவை உங்களுடைய முன்னிருந்த கடைசி போட்டியாளர வடிவமைத்துக் கொள்ள அனுமதிக்கிறது. கடைசி போட்டியாளர் பயன்பாடு தேவைப்படுகிற எல்லா கேடிஇ பயன்பாடுகளும் இந்த அமைப்பை நிறுவவேண்டும். +Comment[tg]= Ин сервис ба шумо иҷозат медиҳад эмулятори поёнаи пешфарзатонро танзим кунед. Тамоми нармафзорҳои KDE ки ба эмулятори поёна ниёз доранд ба ин танзимот эҳтиром хоҳанд гузошт. +Comment[th]=บริการนี้จะอนุญาตให้คุณปรับแต่งโปรแกรมจำลองเทอร์มินัลของคุณ แอพพลิเคชั่นของ KDE ทุกตัวที่เรียกใช้งานโปรแกรมจำลองเทอร์มินัลจะทำตาม ค่าที่ตั้งนี้ +Comment[tr]=Bu servis öntanımlı terminal emülatörünü seçmenize yardımcı olur. +Comment[tt]=Monda töp terminal emulatorıñnı köyläp bula. Terminal emulatorın çaqıru kiräk bulğan çaqta bar KDE-yazılımnar da bu köyläwlärne qullanırğa tieş. +Comment[uk]=Ця служба дає змогу вказати ваш типовий емулятор термінала. Всі програми KDE, яким потрібен доступ до емулятора термінала повинні використовувати це налаштування. +Comment[uz]=Bu xizmat andoza terminal emulyatoringizni moslash uchun imkoniyat yaratadi. Terminal emulyatori kerak boʻlgan hamma KDE dasturlari shu moslamadan foydalanishi kerak. +Comment[uz@cyrillic]=Бу хизмат андоза терминал эмуляторингизни мослаш учун имконият яратади. Терминал эмулятори керак бўлган ҳамма KDE дастурлари шу мосламадан фойдаланиши керак. +Comment[ven]=Tshumelo iyi ini tendela u dzudzanya tshilingedzi tsha theminala ya default. Apulifikhesheni dzothe dza KDE dzine dza shandukisa apulifikhesheni ya tshilingedzi tsha theminala dzi fanela u thonifha mavhekanyele aya. +Comment[vi]=Dịch vụ này cho phép bạn cấu hình trình mô phỏng thiết bị cuối mặc định. Tất cả các chương trình của KDE cần mở thiết bị đầu cuối đều dựa vào thiết lập này. +Comment[wa]=Ci siervice vos permete d' apontyî vosse prémetou terminå. Tos les programes di KDE ki dmandèt on terminå duvrént shure cisse tchuze +Comment[xh]=Lenkonzo ikuvumela ukuba ukwazi ukuqwalasela isiphelo esingagqibekanga sendlela yokulinganisa.Zonke izicelo ze KDE eziqalisa isicelo sesiphelo sendlela yokulinganisa kumele zisamkele esisicwangciso. +Comment[zh_CN]=此服务允许您配置您的默认终端仿真器。所有调用终端仿真程序的 KDE 应用程序都遵从此设置。 +Comment[zh_TW]=這個服務允許您設定您的預設終端機模擬程式。所有呼叫終端機模擬程式的 KDE 應用程式都應該遵從這個設定。 +Comment[zu]=Lo msebenzi ukuvumela ukuthi uhlanganisele umlingisi wangaphandle wendalo. Bonke abayaleli be-KDE ababiza umyaleli womlingisi wangaphandle bahloniphe lesi silingiselelo. +configurationType=internal_terminal diff --git a/kcontrol/componentchooser/emailclientconfig_ui.ui b/kcontrol/componentchooser/emailclientconfig_ui.ui new file mode 100644 index 000000000..d4cb44085 --- /dev/null +++ b/kcontrol/componentchooser/emailclientconfig_ui.ui @@ -0,0 +1,236 @@ + +EmailClientConfig_UI + + + EmailClientConfig_UI + + + true + + + + 0 + 0 + 388 + 267 + + + + + 3 + 3 + 0 + 0 + + + + + unnamed + + + 0 + + + + ButtonGroup2 + + + NoFrame + + + 0 + + + + + + + unnamed + + + 0 + + + + Layout4 + + + + unnamed + + + + txtEMailClient + + + false + + + + 1 + 0 + 1 + 0 + + + + + 0 + 0 + + + + <ul> <li>%t: Recipient's address</li> <li>%s: Subject</li> <li>%c: Carbon Copy (CC)</li> <li>%b: Blind Carbon Copy (BCC)</li> <li>%B: Template body text</li> <li>%A: Attachment </li> </ul> + + + Press this button to select your favorite email client. Please note that the file you select has to have the executable attribute set in order to be accepted.<br> You can also use several placeholders which will be replaced with the actual values when the email client is called:<ul> <li>%t: Recipient's address</li> <li>%s: Subject</li> <li>%c: Carbon Copy (CC)</li> <li>%b: Blind Carbon Copy (BCC)</li> <li>%B: Template body text</li> <li>%A: Attachment </li> </ul> + + + + + btnSelectEmail + + + false + + + ... + + + Click here to browse for the mail program file. + + + + + + + chkRunTerminal + + + false + + + &Run in terminal + + + Activate this option if you want the selected email client to be executed in a terminal (e.g. <em>Konsole</em>). + + + + + Spacer2 + + + Vertical + + + Expanding + + + + 0 + 16 + + + + + + kmailCB + + + &Use KMail as preferred email client + + + Kmail is the standard Mail program for the KDE desktop. + + + + + otherCB + + + Use a different &email client: + + + Select this option if you want to use any other mail program. + + + + + Spacer16 + + + Horizontal + + + Fixed + + + + 30 + 16 + + + + + + Spacer16_2 + + + Horizontal + + + Fixed + + + + 30 + 16 + + + + + + + + + + otherCB + toggled(bool) + chkRunTerminal + setEnabled(bool) + + + otherCB + toggled(bool) + txtEMailClient + setEnabled(bool) + + + otherCB + toggled(bool) + btnSelectEmail + setEnabled(bool) + + + btnSelectEmail + clicked() + EmailClientConfig_UI + selectEmailClient() + + + + kmailCB + otherCB + txtEMailClient + chkRunTerminal + + + kdialog.h + + + selectEmailClient() + + + + diff --git a/kcontrol/componentchooser/kcm_componentchooser.cpp b/kcontrol/componentchooser/kcm_componentchooser.cpp new file mode 100644 index 000000000..8e6ae7ba7 --- /dev/null +++ b/kcontrol/componentchooser/kcm_componentchooser.cpp @@ -0,0 +1,64 @@ +/*************************************************************************** + kcm_componentchooser.cpp - description + ------------------- + copyright : (C) 2002 by Joseph Wenninger + email : jowenn@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation * + * * + ***************************************************************************/ + +#include + +#include +#include + +#include "kcm_componentchooser.h" +#include "kcm_componentchooser.moc" + + +KCMComponentChooser::KCMComponentChooser( QWidget *parent, const char *name ): + KCModule(parent,name) { + + (new QVBoxLayout(this))->setAutoAdd(true); + m_chooser=new ComponentChooser(this,"ComponentChooser"); + connect(m_chooser,SIGNAL(changed(bool)),this,SIGNAL(changed(bool))); + setButtons( Help | Apply ); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmcomponentchooser"), I18N_NOOP("Component Chooser"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c), 2002 Joseph Wenninger")); + + about->addAuthor("Joseph Wenninger", 0 , "jowenn@kde.org"); + setAboutData( about ); + +} + +void KCMComponentChooser::load(){ + m_chooser->load(); +} + +void KCMComponentChooser::save(){ + m_chooser->save(); +} + +void KCMComponentChooser::defaults(){ + m_chooser->restoreDefault(); +} + + +extern "C" +{ + KDE_EXPORT KCModule *create_componentchooser( QWidget *parent, const char * ) + { + KGlobal::locale()->insertCatalogue("kcmcomponentchooser"); + return new KCMComponentChooser( parent, "kcmcomponentchooser" ); + } +} + diff --git a/kcontrol/componentchooser/kcm_componentchooser.h b/kcontrol/componentchooser/kcm_componentchooser.h new file mode 100644 index 000000000..eac9ad055 --- /dev/null +++ b/kcontrol/componentchooser/kcm_componentchooser.h @@ -0,0 +1,39 @@ +/*************************************************************************** + kcm_componentchooser.h - description + ------------------- + copyright : (C) 2002 by Joseph Wenninger + email : jowenn@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation * + * * + ***************************************************************************/ + +#ifndef _KCM_KTEXTEDITORCHOOSER_H_ +#define _KCM_KTEXTEDITORCHOOSER_H_ + +#include + +#include "componentchooser.h" + +class KAboutData; + +class KCMComponentChooser : public KCModule +{ + Q_OBJECT +public: + KCMComponentChooser( QWidget *parent = 0, const char *name = 0 ); + + void load(); + void save(); + void defaults(); + +private: + ComponentChooser *m_chooser; +}; + +#endif diff --git a/kcontrol/componentchooser/terminalemulatorconfig_ui.ui b/kcontrol/componentchooser/terminalemulatorconfig_ui.ui new file mode 100644 index 000000000..7d355fdd8 --- /dev/null +++ b/kcontrol/componentchooser/terminalemulatorconfig_ui.ui @@ -0,0 +1,194 @@ + +TerminalEmulatorConfig_UI + + + TerminalEmulatorConfig_UI + + + + 0 + 0 + 263 + 188 + + + + + 3 + 3 + 0 + 0 + + + + + unnamed + + + 0 + + + + ButtonGroup1 + + + NoFrame + + + 0 + + + + + + + unnamed + + + 0 + + + + Spacer4 + + + Vertical + + + Expanding + + + + 0 + 87 + + + + + + otherCB + + + Use a different &terminal program: + + + + + Spacer15 + + + Horizontal + + + Fixed + + + + 31 + 20 + + + + + + terminalCB + + + &Use Konsole as terminal application + + + + + Layout4 + + + + unnamed + + + + terminalLE + + + false + + + + 1 + 0 + 1 + 0 + + + + + 0 + 0 + + + + Press this button to select your favorite terminal client. Please note that the file you select has to have the executable attribute set in order to be accepted.<br> Also note that some programs that utilize Terminal Emulator will not work if you add command line arguments (Example: konsole -ls). + + + + + btnSelectTerminal + + + false + + + + 1 + 1 + 0 + 0 + + + + ... + + + Click here to browse for terminal program. + + + + + + + + + + + otherCB + toggled(bool) + terminalLE + setEnabled(bool) + + + otherCB + toggled(bool) + btnSelectTerminal + setEnabled(bool) + + + btnSelectTerminal + clicked() + TerminalEmulatorConfig_UI + selectTerminalApp() + + + + terminalCB + otherCB + terminalLE + + + kdialog.h + + + selectTerminalApp() + + + + diff --git a/kcontrol/crypto/Makefile.am b/kcontrol/crypto/Makefile.am new file mode 100644 index 000000000..73a79653d --- /dev/null +++ b/kcontrol/crypto/Makefile.am @@ -0,0 +1,19 @@ +AM_CPPFLAGS = $(all_includes) $(SSL_INCLUDES) +kde_module_LTLIBRARIES = kcm_crypto.la + +kcm_crypto_la_SOURCES = crypto.cpp certexport.cpp kdatetimedlg.cpp + +AM_CXXFLAGS = $(CXXFLAGS) -DLIBDIR=$(libdir) + +kcm_crypto_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) $(SSL_LDFLAGS) -module -avoid-version -no-undefined +kcm_crypto_la_LIBADD = -lkdeui $(LIB_KIO) $(LIBSSL) + +METASOURCES = AUTO + +noinst_HEADERS = crypto.h certexport.h kdatetimedlg.h + +messages: rc.cpp + : > rc.cpp + $(XGETTEXT) $(kcm_crypto_la_SOURCES) *.h -o $(podir)/kcmcrypto.pot + +xdg_apps_DATA = crypto.desktop diff --git a/kcontrol/crypto/README b/kcontrol/crypto/README new file mode 100644 index 000000000..f86d974f1 --- /dev/null +++ b/kcontrol/crypto/README @@ -0,0 +1,2 @@ +This needs to be updated to use libkssl instead of OpenSSL directly. + diff --git a/kcontrol/crypto/certexport.cpp b/kcontrol/crypto/certexport.cpp new file mode 100644 index 000000000..7c31bb84b --- /dev/null +++ b/kcontrol/crypto/certexport.cpp @@ -0,0 +1,148 @@ +/** + * certexport.cpp + * + * Copyright (c) 2001 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "certexport.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +KCertExport::KCertExport(QWidget *parent, const char *name) + : KDialog(parent, name, true) { +QGridLayout *grid = new QGridLayout(this, 9, 6, marginHint(), spacingHint()); + + setCaption(i18n("X509 Certificate Export")); + + QVButtonGroup *bg = new QVButtonGroup(i18n("Format"), this); + _pem = new QRadioButton(i18n("&PEM"), bg); + _netscape = new QRadioButton(i18n("&Netscape"), bg); + _der = new QRadioButton(i18n("&DER/ASN1"), bg); + _text = new QRadioButton(i18n("&Text"), bg); + grid->addMultiCellWidget(bg, 0, 4, 0, 3); + _pem->setChecked(true); + + grid->addMultiCellWidget(new QLabel(i18n("Filename:"), this), 5, 5, 0, 3); + + _filename = new KLineEdit(this); + grid->addMultiCellWidget(_filename, 6, 6, 0, 4); + connect(_filename, SIGNAL(textChanged(const QString &)), this, SLOT(slotTextChanged(const QString &))); + connect(_filename, SIGNAL(returnPressed()), this, SLOT(slotExport())); + + _choose = new QPushButton("...", this); + grid->addWidget(_choose, 6, 5); + connect(_choose, SIGNAL(clicked()), this, SLOT(slotChoose())); + + _export = new QPushButton(i18n("&Export"), this); + grid->addWidget(_export, 8, 4); + connect(_export, SIGNAL(clicked()), this, SLOT(slotExport())); + _export->setEnabled(false); + + _cancel = new QPushButton(i18n("&Cancel"), this); + grid->addWidget(_cancel, 8, 5); + connect(_cancel, SIGNAL(clicked()), this, SLOT(reject())); +} + + +KCertExport::~KCertExport() { + +} + + +void KCertExport::setCertificate(KSSLCertificate *c) { + _c = c; +} + + +void KCertExport::slotExport() { +QByteArray cert; +QString certt; + + if (_filename->text().isEmpty()) return; + + if (!_c) { + KMessageBox::sorry(this, i18n("Internal error. Please report to kfm-devel@kde.org."), i18n("SSL")); + return; + } + + if (_der->isChecked()) { + cert = _c->toDer(); + } else if (_pem->isChecked()) { + cert = _c->toPem(); + } else if (_text->isChecked()) { + certt = _c->toText(); + } else { // netscape + cert = _c->toNetscape(); + } + + if ((!_text->isChecked() && cert.size() <= 0) && certt.isEmpty()) { + KMessageBox::error(this, i18n("Error converting the certificate into the requested format."), i18n("SSL")); + reject(); + return; + } + + QFile outFile(_filename->text()); + + if (!outFile.open(IO_WriteOnly)) { + KMessageBox::error(this, i18n("Error opening file for output."), i18n("SSL")); + reject(); + return; + } + + if (_text->isChecked()) + outFile.writeBlock(certt.local8Bit(), certt.length()); + else outFile.writeBlock(cert); + + outFile.close(); + +accept(); +} + + +void KCertExport::slotChoose() { + //QString newFile = KFileDialog::getSaveFileName("::x509save", i18n("*.pem|Privacy Enhanced Mail Format\n*.der|DER/ASN1 Format")); + QString newFile = KFileDialog::getSaveFileName(QString::null, "application/x-x509-ca-cert"); + + // Dunno about this one yet + // \n*.ncert|Netscape certificate files"); + + if (!newFile.isEmpty()) _filename->setText(newFile); +} + + +void KCertExport::slotTextChanged(const QString& x) { + _export->setEnabled(!x.isEmpty()); +} + + +#include "certexport.moc" + diff --git a/kcontrol/crypto/certexport.h b/kcontrol/crypto/certexport.h new file mode 100644 index 000000000..983cf0804 --- /dev/null +++ b/kcontrol/crypto/certexport.h @@ -0,0 +1,55 @@ +/** + * certexport.h + * + * Copyright (c) 2001 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _CERTEXPORT_H +#define _CERTEXPORT_H + +#include + +class KLineEdit; +class QRadioButton; +class QPushButton; +class KSSLCertificate; + + +class KCertExport : public KDialog +{ + Q_OBJECT +public: + KCertExport(QWidget *parent = 0L, const char *name = 0L); + virtual ~KCertExport(); + + void setCertificate(KSSLCertificate *c); + +protected slots: + void slotExport(); + void slotChoose(); + void slotTextChanged(const QString &); + +private: + QPushButton *_export, *_cancel, *_choose; + QRadioButton *_pem, *_netscape, *_der, *_text; + KLineEdit *_filename; + + KSSLCertificate *_c; + +}; + +#endif diff --git a/kcontrol/crypto/certgen.ui b/kcontrol/crypto/certgen.ui new file mode 100644 index 000000000..19ee05535 --- /dev/null +++ b/kcontrol/crypto/certgen.ui @@ -0,0 +1,513 @@ + +D_GenCert + + + D_GenCert + + + + 0 + 0 + 539 + 367 + + + + Certificate Creation Wizard + + + + TextLabel2 + + + + 10 + 40 + 70 + 21 + + + + NoFrame + + + Plain + + + Passphrase: + + + + + TextLabel3 + + + + 10 + 100 + 90 + 21 + + + + Country code: + + + + + TextLabel4 + + + + 10 + 130 + 150 + 21 + + + + State or province (in full): + + + + + T_CertType + + + + 10 + 10 + 100 + 21 + + + + Certificate type: + + + + + TextLabel2_2 + + + + 10 + 70 + 120 + 21 + + + + Passphrase (verify): + + + + + TextLabel5 + + + + 10 + 160 + 30 + 21 + + + + City: + + + + + TextLabel6 + + + + 10 + 190 + 141 + 21 + + + + Organization name: + + + + + TextLabel7 + + + + 10 + 220 + 150 + 21 + + + + Organizational unit/group: + + + + + TextLabel8 + + + + 10 + 250 + 170 + 21 + + + + Full hostname of the server: + + + + + L_CertType + + + + 180 + 10 + 130 + 21 + + + + + + LineEdit3 + + + + 180 + 100 + 41 + 22 + + + + 2 + + + + + TextLabel9 + + + + 10 + 280 + 111 + 21 + + + + Email address: + + + + + LineEdit4_2_2_2 + + + + 180 + 220 + 121 + 22 + + + + 200 + + + + + LineEdit4_2_2_2_2 + + + + 180 + 250 + 121 + 22 + + + + 200 + + + + + LineEdit4_2_2_2_3 + + + + 180 + 280 + 121 + 22 + + + + 200 + + + + + E_Passphrase + + + + 180 + 40 + 130 + 22 + + + + 500 + + + Password + + + + + E_Passphrase_2 + + + + 180 + 70 + 131 + 22 + + + + 500 + + + Password + + + + + TextLabel10 + + + + 10 + 310 + 121 + 21 + + + + Days valid: + + + + + SpinBox1 + + + + 180 + 310 + 81 + 21 + + + + 365 + + + 1 + + + 365 + + + + + TextLabel11 + + + + 320 + 40 + 60 + 21 + + + + Digest: + + + + + CheckBox1 + + + + 320 + 10 + 80 + 21 + + + + Self sign + + + true + + + + + TextLabel12 + + + + 320 + 70 + 50 + 21 + + + + Alias: + + + + + LineEdit19 + + + + 380 + 70 + 131 + 22 + + + + + + LineEdit4_2_2 + + + + 180 + 190 + 121 + 22 + + + + 200 + + + + + LineEdit4_2 + + + + 180 + 160 + 121 + 22 + + + + 200 + + + + + ComboBox2 + + + + 380 + 40 + 130 + 21 + + + + + + CheckBox2 + + + + 320 + 100 + 161 + 21 + + + + Use DSA instead of RSA + + + + + TextLabel13 + + + + 320 + 130 + 71 + 21 + + + + Bit strength: + + + + + ComboBox5 + + + + 400 + 130 + 111 + 21 + + + + + + LineEdit4 + + + + 180 + 130 + 121 + 22 + + + + 200 + + + + + kdialog.h + + + + diff --git a/kcontrol/crypto/configure.in.in b/kcontrol/crypto/configure.in.in new file mode 100644 index 000000000..680e26e0a --- /dev/null +++ b/kcontrol/crypto/configure.in.in @@ -0,0 +1 @@ +KDE_CHECK_SSL diff --git a/kcontrol/crypto/crypto.cpp b/kcontrol/crypto/crypto.cpp new file mode 100644 index 000000000..f5c4b0099 --- /dev/null +++ b/kcontrol/crypto/crypto.cpp @@ -0,0 +1,2458 @@ +/** + * crypto.cpp + * + * Copyright (c) 2000-2005 George Staikos + * 2000 Carsten Pfeiffer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +// +// Attention. The suck factor on this code is increasing. It's a bit of a +// hack. It might be time to rewrite it soon. +// + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#ifdef HAVE_SSL +#define crypt _openssl_crypt +#include +#include +#include +#include +#include +#include +#include +#include +#undef crypt +#endif + +#include +#include + +#include "crypto.h" +#include "certexport.h" +#include "kdatetimedlg.h" + +using namespace KNetwork; + +typedef KGenericFactory KryptoFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_crypto, KryptoFactory("kcmcrypto") ) + +CipherItem::CipherItem( QListView *view, const QString& cipher, int bits, + int maxBits, KCryptoConfig *module ) + : QCheckListItem( view, QString::null, CheckBox ) +{ + m_cipher = cipher; + m_bits = bits; + m_module = module; + + QString tmp( i18n("%1 (%2 of %3 bits)") ); + setText( 0, tmp.arg( cipher ).arg( bits ).arg( maxBits )); +} + +void CipherItem::stateChange( bool ) +{ + m_module->configChanged(); +} + +QString CipherItem::configName() const +{ + QString cipherName("cipher_%1"); + return cipherName.arg( m_cipher ); +} + + + +OtherCertItem::OtherCertItem( QListView *view, const QString& sub, const QString& md5, bool perm, int policy, QDateTime exp, KCryptoConfig *module ) + : QListViewItem( view, QString::null ), _sub(sub), _md5(md5), _exp(exp), _perm(perm), _policy(policy) + +{ + m_module = module; +KSSLX509Map cert(sub); + setText(0, cert.getValue("O")); + setText(1, cert.getValue("CN").replace("\n", ", ")); + + if (_exp.date().year() > 3000 || _exp.date().year() < 1900) + _exp.setDate(QDate(3000,1,1)); +} + +void OtherCertItem::stateChange( bool ) +{ + m_module->configChanged(); +} + +QString OtherCertItem::configName() const +{ + return _sub; +} + + +YourCertItem::YourCertItem( QListView *view, QString pkcs, QString pass, QString name, KCryptoConfig *module ) + : QListViewItem( view, QString::null ) + +{ + m_module = module; +KSSLX509Map cert(name); + QString tmp = cert.getValue("CN").replace("\n", ", "); + setText(0, tmp); + setText(1, cert.getValue("Email")); + _pkcs = pkcs; + _name = name; + _pass = pass; +} + +void YourCertItem::stateChange( bool ) +{ + m_module->configChanged(); +} + +QString YourCertItem::configName() const +{ + return _name; +} + + + +CAItem::CAItem( QListView *view, QString name, QString cert, bool site, bool email, bool code, KCryptoConfig *module ) + : QListViewItem( view, QString::null ) + +{ + m_module = module; +KSSLX509Map mcert(name); +QString tmp; + setText(0, mcert.getValue("O")); + tmp = mcert.getValue("OU"); + tmp.replace("\n", ", "); + setText(1, tmp); + tmp = mcert.getValue("CN"); + tmp.replace("\n", ", "); + setText(2, tmp); + _name = name; + _cert = cert; + _site = site; + _email = email; + _code = code; + isNew = false; + modified = false; +} + +void CAItem::stateChange( bool ) +{ + m_module->configChanged(); +} + +QString CAItem::configName() const +{ + return _name; +} + + + + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + + + + +KCryptoConfig::KCryptoConfig(QWidget *parent, const char *name, const QStringList &) + : KCModule(KryptoFactory::instance(), parent, name) +{ +QGridLayout *grid; +QBoxLayout *top = new QVBoxLayout(this); +QString whatstr; + + setQuickHelp( i18n("

Crypto

This module allows you to configure SSL for" + " use with most KDE applications, as well as manage your personal" + " certificates and the known certificate authorities.")); + + ___lehack = false; + otherCertDelList.setAutoDelete(true); + yourCertDelList.setAutoDelete(true); + authDelList.setAutoDelete(true); + caDelList.setAutoDelete(true); + + _signers = new KSSLSigners; + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmcrypto"), I18N_NOOP("KDE Crypto Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000 - 2001 George Staikos")); + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + about->addAuthor("Carsten Pfeiffer", 0, "pfeiffer@kde.org"); + setAboutData( about ); + + /////////////////////////////////////////////////////////////////////////// + // Create the GUI here - there are currently a total of 6 tabs. + // The first is SSL and cipher related + // The second is OpenSSL settings + // The third is user's SSL certificate related + // The fourth is certificate authentication related + // The fifth is other SSL certificate related + // The sixth is CA related + // The seventh is misc. settings related (unimplemented) + // The eighth is peer [email] certificate related (unimplemented) + /////////////////////////////////////////////////////////////////////////// + + tabs = new QTabWidget(this); + top->addWidget(tabs); + + /////////////////////////////////////////////////////////////////////////// + // FIRST TAB + /////////////////////////////////////////////////////////////////////////// + tabSSL = new QFrame(this); + grid = new QGridLayout(tabSSL, 7, 2, KDialog::marginHint(), + KDialog::spacingHint() ); + mUseTLS = new QCheckBox(i18n("Enable &TLS support if supported by the server"), tabSSL); + connect(mUseTLS, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mUseTLS, 0, 0); + whatstr = i18n("TLS is the newest revision of the SSL protocol." + " It integrates better with other protocols and has" + " replaced SSL in protocols such as POP3 and SMTP."); + QWhatsThis::add(mUseTLS, whatstr); + + mUseSSLv2 = new QCheckBox(i18n("Enable SSLv&2"), tabSSL); + connect(mUseSSLv2, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mUseSSLv2, 1, 0); + whatstr = i18n("SSL v2 is the second revision of the SSL protocol." + " It is most common to enable v2 and v3."); + QWhatsThis::add(mUseSSLv2, whatstr); + + mUseSSLv3 = new QCheckBox(i18n("Enable SSLv&3"), tabSSL); + connect(mUseSSLv3, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mUseSSLv3, 1, 1); + whatstr = i18n("SSL v3 is the third revision of the SSL protocol." + " It is most common to enable v2 and v3."); + QWhatsThis::add(mUseSSLv3, whatstr); + +#ifdef HAVE_SSL + SSLv2Box = new QListView(tabSSL, "v2ciphers"); + (void) SSLv2Box->addColumn(i18n("SSLv2 Ciphers to Use")); + whatstr = i18n("Select the ciphers you wish to enable when using the" + " SSL v2 protocol. The actual protocol used will be" + " negotiated with the server at connection time."); + QWhatsThis::add(SSLv2Box, whatstr); + SSLv2Box->setSelectionMode(QListView::NoSelection); + + grid->addWidget( SSLv2Box, 2, 0 ); + connect( mUseSSLv2, SIGNAL( toggled( bool ) ), + SSLv2Box, SLOT( setEnabled( bool ))); +#else + QLabel *nossllabel = new QLabel(i18n("SSL ciphers cannot be configured" + " because this module was not linked" + " with OpenSSL."), tabSSL); + grid->addMultiCellWidget(nossllabel, 2, 2, 0, 1); + grid->addRowSpacing( 3, 100 ); // give minimum height to look better +#endif + + // no need to parse kdeglobals. + config = new KConfig("cryptodefaults", false, false); + policies = new KSimpleConfig("ksslpolicies", false); + pcerts = new KSimpleConfig("ksslcertificates", false); + authcfg = new KSimpleConfig("ksslauthmap", false); + +#ifdef HAVE_SSL + SSLv3Box = new QListView(tabSSL, "v3ciphers"); + (void) SSLv3Box->addColumn(i18n("SSLv3 Ciphers to Use")); + whatstr = i18n("Select the ciphers you wish to enable when using the" + " SSL v3 protocol. The actual protocol used will be" + " negotiated with the server at connection time."); + QWhatsThis::add(SSLv3Box, whatstr); + SSLv3Box->setSelectionMode(QListView::NoSelection); + grid->addWidget(SSLv3Box, 2, 1); + connect( mUseSSLv3, SIGNAL( toggled( bool ) ), + SSLv3Box, SLOT( setEnabled( bool ))); + + loadCiphers(); + + // + // CipherWizards + // + QHGroupBox *cwbg = new QHGroupBox(i18n("Cipher Wizard"), tabSSL); + QComboBox *cwcb = new QComboBox(cwbg); + grid->addMultiCellWidget(cwbg, 3, 3, 0, 1); + QString whatStr = i18n("Use these preconfigurations to more easily configure the SSL encryption settings. You can choose among the following modes:
    "); + + cwcb->insertItem(QString::null); + cwcb->insertItem(i18n("Most Compatible")); + whatStr += i18n("
  • Most Compatible: Select the settings found to be most compatible.
  • "); + cwcb->insertItem(i18n("US Ciphers Only")); + whatStr += i18n("
  • US Ciphers Only: Select only the US strong (>= 128 bit) encryption ciphers.
  • "); + cwcb->insertItem(i18n("Export Ciphers Only")); + whatStr += i18n("
  • Export Ciphers Only: Select only the weak ciphers (<= 56 bit).
  • "); + cwcb->insertItem(i18n("Enable All")); + whatStr += i18n("
  • Enable All: Select all SSL ciphers and methods.
"); + + QWhatsThis::add(cwcb, whatStr); + + connect(cwcb, SIGNAL(activated(int)), SLOT(slotSelectCipher(int))); + + + + +#endif + + mWarnOnEnter = new QCheckBox(i18n("Warn on &entering SSL mode"), tabSSL); + connect(mWarnOnEnter, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mWarnOnEnter, 5, 0); + whatstr = i18n("If selected, you will be notified when entering an SSL" + " enabled site"); + QWhatsThis::add(mWarnOnEnter, whatstr); + + mWarnOnLeave = new QCheckBox(i18n("Warn on &leaving SSL mode"), tabSSL); + connect(mWarnOnLeave, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mWarnOnLeave, 5, 1); + whatstr = i18n("If selected, you will be notified when leaving an SSL" + " based site."); + QWhatsThis::add(mWarnOnLeave, whatstr); + + mWarnOnUnencrypted = new QCheckBox(i18n("Warn on sending &unencrypted data"), tabSSL); + connect(mWarnOnUnencrypted, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mWarnOnUnencrypted, 6, 0); + whatstr = i18n("If selected, you will be notified before sending" + " unencrypted data via a web browser."); + QWhatsThis::add(mWarnOnUnencrypted, whatstr); + +#if 0 // NOT IMPLEMENTED IN KDE 3.0 + mWarnOnMixed = new QCheckBox(i18n("Warn on &mixed SSL/non-SSL pages"), tabSSL); + connect(mWarnOnMixed, SIGNAL(clicked()), SLOT(configChanged())); + grid->addWidget(mWarnOnMixed, 6, 1); + whatstr = i18n("If selected, you will be notified if you view a page" + " that has both encrypted and non-encrypted parts."); + QWhatsThis::add(mWarnOnMixed, whatstr); +#endif + + /////////////////////////////////////////////////////////////////////////// + // SECOND TAB + /////////////////////////////////////////////////////////////////////////// + +#ifdef HAVE_SSL + tabOSSL = new QFrame(this); + QBoxLayout *vbox = new QVBoxLayout(tabOSSL, KDialog::marginHint(), KDialog::spacingHint()); + + oInfo = new QVGroupBox(i18n("Path to OpenSSL Shared Libraries"), tabOSSL); + vbox->addWidget(oInfo); + oPath = new KURLRequester(oInfo); + oPath->setMode(KFile::Directory); + oTest = new QPushButton(i18n("&Test"), oInfo); + connect(oTest, SIGNAL(clicked()), SLOT(slotTestOSSL())); + + connect(oPath, SIGNAL(textChanged(const QString&)), SLOT(configChanged())); + + // + // Settings for the EGD + // + QFrame *eFrame = new QFrame(tabOSSL); + QVBoxLayout *egrid = new QVBoxLayout(eFrame); + mUseEGD = new QCheckBox(i18n("Use EGD"), eFrame); + connect(mUseEGD, SIGNAL(clicked()), SLOT(slotUseEGD())); + mUseEFile = new QCheckBox(i18n("Use entropy file"), eFrame); + connect(mUseEFile, SIGNAL(clicked()), SLOT(slotUseEFile())); + vbox->addWidget(eFrame); + egrid->addWidget(mUseEGD); + egrid->addWidget(mUseEFile); + QFrame *egdframe = new QFrame(tabOSSL); + QGridLayout *grid2 = new QGridLayout(egdframe, 2, 2, KDialog::marginHint(), + KDialog::spacingHint()); + mEGDLabel = new QLabel(i18n("Path to EGD:"), egdframe); + grid2->addWidget(mEGDLabel, 0, 0); + mEGDPath = new KURLRequester(egdframe); + grid2->addWidget(mEGDPath, 0, 1); + connect(mEGDPath, SIGNAL(textChanged(const QString&)), SLOT(configChanged())); + vbox->addWidget(egdframe); + whatstr = i18n("If selected, OpenSSL will be asked to use the entropy gathering" + " daemon (EGD) for initializing the pseudo-random number generator."); + QWhatsThis::add(mUseEGD, whatstr); + whatstr = i18n("If selected, OpenSSL will be asked to use the given file" + " as entropy for initializing the pseudo-random number generator."); + QWhatsThis::add(mUseEFile, whatstr); + whatstr = i18n("Enter the path to the socket created by the entropy gathering" + " daemon (or the entropy file) here."); + QWhatsThis::add(mEGDPath, whatstr); + whatstr = i18n("Click here to browse for the EGD socket file."); + QWhatsThis::add(mEGDPath, whatstr); + + vbox->addStretch(); +#endif + + + + /////////////////////////////////////////////////////////////////////////// + // THIRD TAB + /////////////////////////////////////////////////////////////////////////// + tabYourSSLCert = new QFrame(this); + +#ifdef HAVE_SSL + grid = new QGridLayout(tabYourSSLCert, 16, 6, KDialog::marginHint(), KDialog::spacingHint() ); + + yourSSLBox = new QListView(tabYourSSLCert); + yourSSLBox->setAllColumnsShowFocus(true); + whatstr = i18n("This list box shows which certificates of yours KDE" + " knows about. You can easily manage them from here."); + QWhatsThis::add(yourSSLBox, whatstr); + grid->addMultiCellWidget(yourSSLBox, 0, 5, 0, 4); + yourSSLBox->addColumn(i18n("Common Name")); + yourSSLBox->addColumn(i18n("Email Address")); + connect(yourSSLBox, SIGNAL(selectionChanged()), SLOT(slotYourCertSelect())); + + yourSSLImport = new QPushButton(i18n("I&mport..."), tabYourSSLCert); + connect(yourSSLImport, SIGNAL(clicked()), SLOT(slotYourImport())); + grid->addWidget(yourSSLImport, 0, 5); + + yourSSLExport = new QPushButton(i18n("&Export..."), tabYourSSLCert); + yourSSLExport->setEnabled(false); + connect(yourSSLExport, SIGNAL(clicked()), SLOT(slotYourExport())); + grid->addWidget(yourSSLExport, 1, 5); + + yourSSLRemove = new QPushButton(i18n("Remo&ve"), tabYourSSLCert); + yourSSLRemove->setEnabled(false); + connect(yourSSLRemove, SIGNAL(clicked()), SLOT(slotYourRemove())); + grid->addWidget(yourSSLRemove, 2, 5); + + yourSSLUnlock = new QPushButton(i18n("&Unlock"), tabYourSSLCert); + yourSSLUnlock->setEnabled(false); + connect(yourSSLUnlock, SIGNAL(clicked()), SLOT(slotYourUnlock())); + grid->addWidget(yourSSLUnlock, 3, 5); + + yourSSLVerify = new QPushButton(i18n("Verif&y"), tabYourSSLCert); + yourSSLVerify->setEnabled(false); + connect(yourSSLVerify, SIGNAL(clicked()), SLOT(slotYourVerify())); + grid->addWidget(yourSSLVerify, 4, 5); + + yourSSLPass = new QPushButton(i18n("Chan&ge Password..."), tabYourSSLCert); + yourSSLPass->setEnabled(false); + connect(yourSSLPass, SIGNAL(clicked()), SLOT(slotYourPass())); + grid->addWidget(yourSSLPass, 5, 5); + + grid->addMultiCellWidget(new KSeparator(KSeparator::HLine, tabYourSSLCert), 6, 6, 0, 5); + ySubject = KSSLInfoDlg::certInfoWidget(tabYourSSLCert, QString(QString::null)); + yIssuer = KSSLInfoDlg::certInfoWidget(tabYourSSLCert, QString(QString::null)); + grid->addMultiCellWidget(ySubject, 7, 11, 0, 2); + grid->addMultiCellWidget(yIssuer, 7, 11, 3, 5); + whatstr = i18n("This is the information known about the owner of the certificate."); + QWhatsThis::add(ySubject, whatstr); + whatstr = i18n("This is the information known about the issuer of the certificate."); + QWhatsThis::add(yIssuer, whatstr); + + grid->addWidget(new QLabel(i18n("Valid from:"), tabYourSSLCert), 12, 0); + grid->addWidget(new QLabel(i18n("Valid until:"), tabYourSSLCert), 13, 0); + yValidFrom = new QLabel(tabYourSSLCert); + grid->addWidget(yValidFrom, 12, 1); + yValidUntil = new QLabel(tabYourSSLCert); + grid->addWidget(yValidUntil, 13, 1); + whatstr = i18n("The certificate is valid starting at this date."); + QWhatsThis::add(yValidFrom, whatstr); + whatstr = i18n("The certificate is valid until this date."); + QWhatsThis::add(yValidUntil, whatstr); + grid->addWidget(new QLabel(i18n("MD5 digest:"), tabYourSSLCert), 14, 0); + yHash = new QLabel(tabYourSSLCert); + grid->addWidget(yHash, 14, 1); + whatstr = i18n("A hash of the certificate used to identify it quickly."); + QWhatsThis::add(yHash, whatstr); + +#if 0 + QHButtonGroup *ocbg = new QHButtonGroup(i18n("On SSL Connection..."), tabYourSSLCert); + yourSSLUseDefault = new QRadioButton(i18n("&Use default certificate"), ocbg); + yourSSLList = new QRadioButton(i18n("&List upon connection"), ocbg); + yourSSLDont = new QRadioButton(i18n("&Do not use certificates"), ocbg); + grid->addMultiCellWidget(ocbg, 14, 14, 0, 5); +#endif +#else + nossllabel = new QLabel(i18n("SSL certificates cannot be managed" + " because this module was not linked" + " with OpenSSL."), tabYourSSLCert); + grid->addMultiCellWidget(nossllabel, 3, 3, 0, 5); +#endif + + + /////////////////////////////////////////////////////////////////////////// + // FOURTH TAB + /////////////////////////////////////////////////////////////////////////// + tabAuth = new QFrame(this); + +#ifdef HAVE_SSL + grid = new QGridLayout(tabAuth, 20, 6, KDialog::marginHint(), KDialog::spacingHint()); + + grid->addMultiCellWidget(new QLabel(i18n("Default Authentication Certificate"), tabAuth), 0, 0, 0, 2); + defCertBG = new QVButtonGroup(i18n("Default Action"), tabAuth); + defSend = new QRadioButton(i18n("&Send"), defCertBG); + defPrompt = new QRadioButton(i18n("&Prompt"), defCertBG); + defDont = new QRadioButton(i18n("Do ¬ send"), defCertBG); + grid->addMultiCellWidget(defCertBG, 1, 3, 0, 2); + grid->addMultiCellWidget(new QLabel(i18n("Default certificate:"), tabAuth), 1, 1, 3, 5); + defCertBox = new KComboBox(false, tabAuth); + grid->addMultiCellWidget(defCertBox, 2, 2, 3, 5); + + grid->addMultiCellWidget(new KSeparator(KSeparator::HLine, tabAuth), 4, 4, 0, 5); + + + grid->addMultiCellWidget(new QLabel(i18n("Host authentication:"), tabAuth), 5, 5, 0, 1); + hostAuthList = new QListView(tabAuth); + hostAuthList->setAllColumnsShowFocus(true); + grid->addMultiCellWidget(hostAuthList, 6, 13, 0, 5); + hostAuthList->addColumn(i18n("Host")); + hostAuthList->addColumn(i18n("Certificate")); + hostAuthList->addColumn(i18n("Policy")); + + grid->addWidget(new QLabel(i18n("Host:"), tabAuth), 14, 0); + grid->addWidget(new QLabel(i18n("Certificate:"), tabAuth), 15, 0); + + authHost = new QLineEdit(tabAuth); + grid->addMultiCellWidget(authHost, 14, 14, 1, 4); + hostCertBox = new KComboBox(false, tabAuth); + grid->addMultiCellWidget(hostCertBox, 15, 15, 1, 4); + + hostCertBG = new QHButtonGroup(i18n("Action"), tabAuth); + hostSend = new QRadioButton(i18n("Send"), hostCertBG); + hostPrompt = new QRadioButton(i18n("Prompt"), hostCertBG); + hostDont = new QRadioButton(i18n("Do not send"), hostCertBG); + grid->addMultiCellWidget(hostCertBG, 16, 16, 0, 5); + + authAdd = new QPushButton(i18n("Ne&w"), tabAuth); + authRemove = new QPushButton(i18n("Remo&ve"), tabAuth); + grid->addWidget(authAdd, 17, 4); + grid->addWidget(authRemove, 17, 5); + + authHost->setEnabled(false); + hostCertBox->setEnabled(false); + hostCertBG->setEnabled(false); + authRemove->setEnabled(false); + + connect(defCertBox, SIGNAL(activated(int)), this, SLOT(configChanged())); + connect(defCertBG, SIGNAL(clicked(int)), this, SLOT(configChanged())); + connect(hostAuthList, SIGNAL(selectionChanged()), this, SLOT(slotAuthItemChanged())); + connect(authAdd, SIGNAL(clicked()), this, SLOT(slotNewHostAuth())); + connect(authRemove, SIGNAL(clicked()), this, SLOT(slotRemoveHostAuth())); + connect(authHost, SIGNAL(textChanged(const QString &)), this, SLOT(slotAuthText(const QString &))); + connect(hostCertBG, SIGNAL(clicked(int)), this, SLOT(slotAuthButtons())); + connect(hostCertBox, SIGNAL(activated(int)), this, SLOT(slotAuthCombo())); + +#else + nossllabel = new QLabel(i18n("SSL certificates cannot be managed" + " because this module was not linked" + " with OpenSSL."), tabAuth); + grid->addMultiCellWidget(nossllabel, 3, 3, 0, 5); +#endif + + + + /////////////////////////////////////////////////////////////////////////// + // FIFTH TAB + /////////////////////////////////////////////////////////////////////////// + tabOtherSSLCert = new QFrame(this); + +#ifdef HAVE_SSL + oGrid = grid = new QGridLayout(tabOtherSSLCert, 21, 6, KDialog::marginHint(), KDialog::spacingHint()); + + otherSSLBox = new QListView(tabOtherSSLCert); + otherSSLBox->setAllColumnsShowFocus(true); + connect(otherSSLBox, SIGNAL(selectionChanged()), SLOT(slotOtherCertSelect())); + whatstr = i18n("This list box shows which site and person certificates KDE" + " knows about. You can easily manage them from here."); + QWhatsThis::add(otherSSLBox, whatstr); + otherSSLBox->addColumn(i18n("Organization")); + otherSSLBox->addColumn(i18n("Common Name")); + grid->addMultiCellWidget(otherSSLBox, 0, 7, 0, 4); + + otherSSLExport = new QPushButton(i18n("&Export..."), tabOtherSSLCert); + connect(otherSSLExport, SIGNAL(clicked()), SLOT(slotExportCert())); + grid->addWidget(otherSSLExport, 0, 5); + whatstr = i18n("This button allows you to export the selected certificate" + " to a file of various formats."); + QWhatsThis::add(otherSSLExport, whatstr); + + otherSSLRemove = new QPushButton(i18n("&Remove"), tabOtherSSLCert); + connect(otherSSLRemove, SIGNAL(clicked()), SLOT(slotRemoveCert())); + grid->addWidget(otherSSLRemove, 1, 5); + whatstr = i18n("This button removes the selected certificate" + " from the certificate cache."); + QWhatsThis::add(otherSSLRemove, whatstr); + + otherSSLVerify = new QPushButton(i18n("&Verify"), tabOtherSSLCert); + connect(otherSSLVerify, SIGNAL(clicked()), SLOT(slotVerifyCert())); + grid->addWidget(otherSSLVerify, 2, 5); + whatstr = i18n("This button tests the selected certificate" + " for validity."); + QWhatsThis::add(otherSSLVerify, whatstr); + + otherSSLExport->setEnabled(false); + otherSSLVerify->setEnabled(false); + otherSSLRemove->setEnabled(false); + + grid->addMultiCellWidget(new KSeparator(KSeparator::HLine, tabOtherSSLCert), 8, 8, 0, 5); + oSubject = KSSLInfoDlg::certInfoWidget(tabOtherSSLCert, QString(QString::null)); + oIssuer = KSSLInfoDlg::certInfoWidget(tabOtherSSLCert, QString(QString::null)); + grid->addMultiCellWidget(oSubject, 9, 13, 0, 2); + grid->addMultiCellWidget(oIssuer, 9, 13, 3, 5); + whatstr = i18n("This is the information known about the owner of the certificate."); + QWhatsThis::add(oSubject, whatstr); + whatstr = i18n("This is the information known about the issuer of the certificate."); + QWhatsThis::add(oIssuer, whatstr); + + fromLabel = new QLabel(i18n("Valid from:"), tabOtherSSLCert); + untilLabel = new QLabel(i18n("Valid until:"), tabOtherSSLCert); + grid->addWidget(fromLabel, 14, 0); + grid->addWidget(untilLabel, 15, 0); + fromLabel->setEnabled(false); + untilLabel->setEnabled(false); + validFrom = new QLabel(tabOtherSSLCert); + grid->addWidget(validFrom, 14, 1); + validUntil = new QLabel(tabOtherSSLCert); + grid->addWidget(validUntil, 15, 1); + whatstr = i18n("The certificate is valid starting at this date."); + QWhatsThis::add(validFrom, whatstr); + whatstr = i18n("The certificate is valid until this date."); + QWhatsThis::add(validUntil, whatstr); + + cacheGroup = new QVButtonGroup(i18n("Cache"), tabOtherSSLCert); + cachePerm = new QRadioButton(i18n("Permanentl&y"), cacheGroup); + cacheUntil = new QRadioButton(i18n("&Until"), cacheGroup); + untilDate = new KURLLabel(QString::null, QString::null, cacheGroup); + cacheGroup->setEnabled(false); + grid->addMultiCellWidget(cacheGroup, 16, 19, 0, 2); + + cachePerm->setEnabled(false); + cacheUntil->setEnabled(false); + untilDate->setEnabled(false); + connect(cachePerm, SIGNAL(clicked()), SLOT(slotPermanent())); + connect(cacheUntil, SIGNAL(clicked()), SLOT(slotUntil())); + connect(untilDate, SIGNAL(leftClickedURL()), SLOT(slotDatePick())); + whatstr = i18n("Select here to make the cache entry permanent."); + QWhatsThis::add(cachePerm, whatstr); + whatstr = i18n("Select here to make the cache entry temporary."); + QWhatsThis::add(cacheUntil, whatstr); + whatstr = i18n("The date and time until the certificate cache entry should expire."); + QWhatsThis::add(untilDate, whatstr); + + policyGroup = new QVButtonGroup(i18n("Policy"), tabOtherSSLCert); + policyAccept = new QRadioButton(i18n("Accep&t"), policyGroup); + policyReject = new QRadioButton(i18n("Re&ject"), policyGroup); + policyPrompt = new QRadioButton(i18n("&Prompt"), policyGroup); + policyGroup->setEnabled(false); + grid->addMultiCellWidget(policyGroup, 16, 19, 3, 5); + connect(policyGroup, SIGNAL(clicked(int)), SLOT(slotPolicyChanged(int))); + whatstr = i18n("Select this to always accept this certificate."); + QWhatsThis::add(policyAccept, whatstr); + whatstr = i18n("Select this to always reject this certificate."); + QWhatsThis::add(policyReject, whatstr); + whatstr = i18n("Select this if you wish to be prompted for action when receiving this certificate."); + QWhatsThis::add(policyPrompt, whatstr); + grid->addWidget(new QLabel(i18n("MD5 digest:"), tabOtherSSLCert), 20, 0); + pHash = new QLabel(tabOtherSSLCert); + grid->addWidget(pHash, 20, 1); + whatstr = i18n("A hash of the certificate used to identify it quickly."); + QWhatsThis::add(pHash, whatstr); + +#else + nossllabel = new QLabel(i18n("SSL certificates cannot be managed" + " because this module was not linked" + " with OpenSSL."), tabOtherSSLCert); + grid->addMultiCellWidget(nossllabel, 1, 1, 0, 1); +#endif + + + /////////////////////////////////////////////////////////////////////////// + // SIXTH TAB + /////////////////////////////////////////////////////////////////////////// + tabSSLCA = new QFrame(this); + +#ifdef HAVE_SSL + grid = new QGridLayout(tabSSLCA, 11, 8, KDialog::marginHint(), KDialog::spacingHint()); + + caList = new QListView(tabSSLCA); + caList->setAllColumnsShowFocus(true); + whatstr = i18n("This list box shows which certificate authorities KDE" + " knows about. You can easily manage them from here."); + QWhatsThis::add(caList, whatstr); + grid->addMultiCellWidget(caList, 0, 3, 0, 6); + caList->addColumn(i18n("Organization")); + caList->addColumn(i18n("Organizational Unit")); + caList->addColumn(i18n("Common Name")); + connect(caList, SIGNAL(selectionChanged()), SLOT(slotCAItemChanged())); + + caSSLImport = new QPushButton(i18n("I&mport..."), tabSSLCA); + connect(caSSLImport, SIGNAL(clicked()), SLOT(slotCAImport())); + grid->addWidget(caSSLImport, 0, 7); + + caSSLRemove = new QPushButton(i18n("&Remove"), tabSSLCA); + connect(caSSLRemove, SIGNAL(clicked()), SLOT(slotCARemove())); + grid->addWidget(caSSLRemove, 1, 7); + caSSLRemove->setEnabled(false); + + caSSLRestore = new QPushButton(i18n("Res&tore"), tabSSLCA); + connect(caSSLRestore, SIGNAL(clicked()), SLOT(slotCARestore())); + grid->addWidget(caSSLRestore, 2, 7); + + caSubject = KSSLInfoDlg::certInfoWidget(tabSSLCA, QString(QString::null)); + caIssuer = KSSLInfoDlg::certInfoWidget(tabSSLCA, QString(QString::null)); + grid->addMultiCellWidget(caSubject, 4, 6, 0, 3); + grid->addMultiCellWidget(caIssuer, 4, 6, 4, 7); + + // Accept for Web Site Signing, Email Signing, Code Signing + caSite = new QCheckBox(i18n("Accept for site signing"), tabSSLCA); + caEmail = new QCheckBox(i18n("Accept for email signing"), tabSSLCA); + caCode = new QCheckBox(i18n("Accept for code signing"), tabSSLCA); + grid->addMultiCellWidget(caSite, 7, 7, 0, 3); + connect(caSite, SIGNAL(clicked()), SLOT(slotCAChecked())); + grid->addMultiCellWidget(caEmail, 8, 8, 0, 3); + connect(caEmail, SIGNAL(clicked()), SLOT(slotCAChecked())); + grid->addMultiCellWidget(caCode, 9, 9, 0, 3); + connect(caCode, SIGNAL(clicked()), SLOT(slotCAChecked())); + caSite->setEnabled(false); + caEmail->setEnabled(false); + caCode->setEnabled(false); + grid->addWidget(new QLabel(i18n("MD5 digest:"), tabSSLCA), 10, 0); + cHash = new QLabel(tabSSLCA); + grid->addWidget(cHash, 10, 1); + whatstr = i18n("A hash of the certificate used to identify it quickly."); + QWhatsThis::add(cHash, whatstr); + +#else + nossllabel = new QLabel(i18n("SSL certificates cannot be managed" + " because this module was not linked" + " with OpenSSL."), tabSSLCA); + grid->addMultiCellWidget(nossllabel, 1, 1, 0, 1); +#endif + + +#if 0 + /////////////////////////////////////////////////////////////////////////// + // SEVENTH TAB + /////////////////////////////////////////////////////////////////////////// + tabSSLCOpts = new QFrame(this); + +#ifdef HAVE_SSL + grid = new QGridLayout(tabSSLCOpts, 9, 4, KDialog::marginHint(), KDialog::spacingHint()); + mWarnSelfSigned = new QCheckBox(i18n("Warn on &self-signed certificates or unknown CA's"), tabSSLCOpts); + connect(mWarnSelfSigned, SIGNAL(clicked()), SLOT(configChanged())); + mWarnExpired = new QCheckBox(i18n("Warn on &expired certificates"), tabSSLCOpts); + connect(mWarnExpired, SIGNAL(clicked()), SLOT(configChanged())); + mWarnRevoked = new QCheckBox(i18n("Warn on re&voked certificates"), tabSSLCOpts); + connect(mWarnRevoked, SIGNAL(clicked()), SLOT(configChanged())); + grid->addMultiCellWidget(mWarnSelfSigned, 0, 0, 0, 3); + grid->addMultiCellWidget(mWarnExpired, 1, 1, 0, 3); + grid->addMultiCellWidget(mWarnRevoked, 2, 2, 0, 3); + + macCert = new QLineEdit(tabSSLCOpts); + grid->addMultiCellWidget(macCert, 4, 4, 0, 2); + + macBox = new QListBox(tabSSLCOpts); + whatstr = i18n("This list box shows which sites you have decided to accept" + " a certificate from even though the certificate might fail" + " the validation procedure."); + QWhatsThis::add(macBox, whatstr); + caSSLBox->setSelectionMode(QListBox::Single); + caSSLBox->setColumnMode(QListBox::FixedNumber); + grid->addMultiCellWidget(macBox, 5, 8, 0, 2); + + macAdd = new QPushButton(i18n("&Add"), tabSSLCOpts); + //connect(macAdd, SIGNAL(), SLOT()); + grid->addWidget(macAdd, 4, 3); + + macRemove = new QPushButton(i18n("&Remove"), tabSSLCOpts); + //connect(macRemove, SIGNAL(), SLOT()); + grid->addWidget(macRemove, 5, 3); + + macClear = new KPushButton(KGuiItem::clear(), tabSSLCOpts); + //connect(macAdd, SIGNAL(), SLOT()); + grid->addWidget(macClear, 6, 3); + +#else + nossllabel = new QLabel(i18n("These options are not configurable" + " because this module was not linked" + " with OpenSSL."), tabSSLCOpts); + grid->addMultiCellWidget(nossllabel, 1, 1, 0, 1); +#endif +#endif + + /////////////////////////////////////////////////////////////////////////// + // Add the tabs and startup + /////////////////////////////////////////////////////////////////////////// + tabs->addTab(tabSSL, i18n("SSL")); +#ifdef HAVE_SSL + tabs->addTab(tabOSSL, i18n("OpenSSL")); +#endif + tabs->addTab(tabYourSSLCert, i18n("Your Certificates")); + tabs->addTab(tabAuth, i18n("Authentication")); + tabs->addTab(tabOtherSSLCert, i18n("Peer SSL Certificates")); + tabs->addTab(tabSSLCA, i18n("SSL Signers")); + +#if 0 + tabs->addTab(tabSSLCOpts, i18n("Validation Options")); +#endif + + tabs->resize(tabs->sizeHint()); + load(); +} + +KCryptoConfig::~KCryptoConfig() +{ + delete config; + delete policies; + delete pcerts; + delete authcfg; + delete _signers; +} + +void KCryptoConfig::configChanged() +{ + emit changed(true); +} + +void KCryptoConfig::load() +{ + load( false ); +} + +void KCryptoConfig::load( bool useDefaults ) +{ + config->setReadDefaults( useDefaults ); +#ifdef HAVE_SSL + otherCertDelList.clear(); + yourCertDelList.clear(); + authDelList.clear(); + caDelList.clear(); + config->setGroup("TLS"); + mUseTLS->setChecked(config->readBoolEntry("Enabled", true)); + + config->setGroup("SSLv2"); + mUseSSLv2->setChecked(config->readBoolEntry("Enabled", true)); + + config->setGroup("SSLv3"); + mUseSSLv3->setChecked(config->readBoolEntry("Enabled", true)); + + config->setGroup("Warnings"); + mWarnOnEnter->setChecked(config->readBoolEntry("OnEnter", false)); + mWarnOnLeave->setChecked(config->readBoolEntry("OnLeave", true)); + mWarnOnUnencrypted->setChecked(config->readBoolEntry("OnUnencrypted", true)); + +#if 0 // NOT IMPLEMENTED IN KDE 2.0 + mWarnOnMixed->setChecked(config->readBoolEntry("OnMixed", true)); + + config->setGroup("Validation"); + mWarnSelfSigned->setChecked(config->readBoolEntry("WarnSelfSigned", true)); + mWarnExpired->setChecked(config->readBoolEntry("WarnExpired", true)); + mWarnRevoked->setChecked(config->readBoolEntry("WarnRevoked", true)); +#endif + + config->setGroup("EGD"); + slotUseEGD(); // set the defaults + if (config->readBoolEntry("UseEGD", false)) { + mUseEGD->setChecked(true); + slotUseEGD(); + } else if (config->readBoolEntry("UseEFile", false)) { + mUseEFile->setChecked(true); + slotUseEFile(); + } + mEGDPath->setURL(config->readPathEntry("EGDPath")); + + +#ifdef HAVE_SSL + config->setGroup("OpenSSL"); + oPath->setURL(config->readPathEntry("Path")); +#endif + + config->setGroup("SSLv2"); + CipherItem *item = static_cast(SSLv2Box->firstChild()); + while ( item ) { + item->setOn(config->readBoolEntry(item->configName(), + item->bits() >= 56)); + item = static_cast(item->nextSibling()); + } + + config->setGroup("SSLv3"); + item = static_cast(SSLv3Box->firstChild()); + while ( item ) { + item->setOn(config->readBoolEntry(item->configName(), + item->bits() >= 56)); + item = static_cast(item->nextSibling()); + } + + SSLv2Box->setEnabled( mUseSSLv2->isChecked() ); + SSLv3Box->setEnabled( mUseSSLv3->isChecked() ); + + QStringList groups = policies->groupList(); + + otherSSLBox->clear(); + for (QStringList::Iterator i = groups.begin(); i != groups.end(); ++i) { + if ((*i).isEmpty() || *i == "" || *i == "General") continue; + policies->setGroup(*i); + KSSLCertificate *cert = KSSLCertificate::fromString(policies->readEntry("Certificate", QString::null).local8Bit()); + if (cert) { + new OtherCertItem(otherSSLBox, cert->getSubject(), *i, + policies->readBoolEntry("Permanent", true), + policies->readNumEntry("Policy", 3), + policies->readDateTimeEntry("Expires"), this ); + delete cert; + } + } + + groups = pcerts->groupList(); + + yourSSLBox->clear(); + for (QStringList::Iterator i = groups.begin(); i != groups.end(); ++i) { + if ((*i).isEmpty() || *i == "") continue; + pcerts->setGroup(*i); + YourCertItem *j = new YourCertItem(yourSSLBox, + pcerts->readEntry("PKCS12Base64"), + pcerts->readEntry("Password"), + *i, this ); + j->setPassCache(QString::null); + } + + setAuthCertLists(); + + config->setGroup("Auth"); + QString whichAuth = config->readEntry("AuthMethod", "none"); + if (whichAuth == "send") + defCertBG->setButton(defCertBG->id(defSend)); + else if (whichAuth == "prompt") + defCertBG->setButton(defCertBG->id(defPrompt)); + else + defCertBG->setButton(defCertBG->id(defDont)); + + QString whichCert = config->readEntry("DefaultCert"); + defCertBox->setCurrentItem(0); + for (int i = 0; i < defCertBox->count(); i++) { + if (defCertBox->text(i) == whichCert) { + defCertBox->setCurrentItem(i); + break; + } + } + hostAuthList->clear(); + groups = authcfg->groupList(); + for (QStringList::Iterator i = groups.begin(); + i != groups.end(); + ++i) { + if ((*i).isEmpty() || *i == "") continue; + authcfg->setGroup(*i); + KSSLCertificateHome::KSSLAuthAction aa = KSSLCertificateHome::AuthDont; + if (authcfg->readBoolEntry("send", false) == true) + aa = KSSLCertificateHome::AuthSend; + else if (authcfg->readBoolEntry("prompt", false) == true) + aa = KSSLCertificateHome::AuthPrompt; + HostAuthItem *j = new HostAuthItem(hostAuthList, + KResolver::domainToAscii(*i), + authcfg->readEntry("certificate"), + this ); + j->setAction(aa); + j->setOriginalName(*i); + } + + groups = _signers->list(); + KConfig sigcfg("ksslcalist", true, false); + caList->clear(); + for (QStringList::Iterator i = groups.begin(); + i != groups.end(); + ++i) { + if ((*i).isEmpty() || *i == "") continue; + if (!sigcfg.hasGroup(*i)) continue; + sigcfg.setGroup(*i); + if (!sigcfg.hasKey("x509")) continue; + new CAItem(caList, + (*i), + sigcfg.readEntry("x509"), + sigcfg.readBoolEntry("site", false), + sigcfg.readBoolEntry("email", false), + sigcfg.readBoolEntry("code", false), + this ); + } + + slotCAItemChanged(); + slotOtherCertSelect(); + slotYourCertSelect(); +#endif + + emit changed( useDefaults ); +} + +void KCryptoConfig::save() +{ +#ifdef HAVE_SSL + if (!mUseSSLv2->isChecked() && + !mUseSSLv3->isChecked()) + KMessageBox::information(this, i18n("If you do not select at least one" + " SSL algorithm, either SSL will not" + " work or the application may be" + " forced to choose a suitable default."), + i18n("SSL")); + + config->setGroup("TLS"); + config->writeEntry("Enabled", mUseTLS->isChecked()); + + config->setGroup("SSLv2"); + config->writeEntry("Enabled", mUseSSLv2->isChecked()); + + config->setGroup("SSLv3"); + config->writeEntry("Enabled", mUseSSLv3->isChecked()); + + config->setGroup("Warnings"); + config->writeEntry("OnEnter", mWarnOnEnter->isChecked()); + config->writeEntry("OnLeave", mWarnOnLeave->isChecked()); + config->writeEntry("OnUnencrypted", mWarnOnUnencrypted->isChecked()); + + config->setGroup("EGD"); + config->writeEntry("UseEGD", mUseEGD->isChecked()); + config->writeEntry("UseEFile", mUseEFile->isChecked()); + config->writePathEntry("EGDPath", mEGDPath->url()); + +#if 0 // NOT IMPLEMENTED IN KDE 2.0 + config->writeEntry("OnMixed", mWarnOnMixed->isChecked()); + + config->setGroup("Validation"); + config->writeEntry("WarnSelfSigned", mWarnSelfSigned->isChecked()); + config->writeEntry("WarnExpired", mWarnExpired->isChecked()); + config->writeEntry("WarnRevoked", mWarnRevoked->isChecked()); +#endif + +#ifdef HAVE_SSL + config->setGroup("OpenSSL"); + config->writePathEntry("Path", oPath->url()); +#endif + + int ciphercount = 0; + config->setGroup("SSLv2"); + CipherItem *item = static_cast(SSLv2Box->firstChild()); + while ( item ) { + if (item->isOn()) { + config->writeEntry(item->configName(), true); + ciphercount++; + } else config->writeEntry(item->configName(), false); + + item = static_cast(item->nextSibling()); + } + + if (mUseSSLv2->isChecked() && ciphercount == 0) + KMessageBox::information(this, i18n("If you do not select at least one" + " cipher, SSLv2 will not work."), + i18n("SSLv2 Ciphers")); + + ciphercount = 0; + config->setGroup("SSLv3"); + item = static_cast(SSLv3Box->firstChild()); + while ( item ) { + if (item->isOn()) { + config->writeEntry(item->configName(), true); + ciphercount++; + } else config->writeEntry(item->configName(), false); + + item = static_cast(item->nextSibling()); + } + + KSSLCertificateCache _cc; + + if (mUseSSLv3->isChecked() && ciphercount == 0) + KMessageBox::information(this, i18n("If you do not select at least one" + " cipher, SSLv3 will not work."), + i18n("SSLv3 Ciphers")); + // SSL Policies code + for (OtherCertItem *x = otherCertDelList.first(); x != 0; x = otherCertDelList.next()) { + KSSLX509Map cert(x->configName()); + QString thisCN = cert.getValue("CN"); + _cc.removeByCN(thisCN); + otherCertDelList.remove(x); + } + // Go through the non-deleted ones and save them + for (OtherCertItem *x = + static_cast(otherSSLBox->firstChild()); + x; + x = static_cast(x->nextSibling())) { + KSSLX509Map cert(x->configName()); + QString thisCN = cert.getValue("CN"); + QDateTime expires = x->getExpires(); + _cc.modifyByCN(thisCN, (KSSLCertificateCache::KSSLCertificatePolicy)x->getPolicy(), x->isPermanent(), expires); + } + + // SSL Personal certificates code + for (YourCertItem *x = yourCertDelList.first(); x != 0; x = yourCertDelList.next()) { + pcerts->deleteGroup(x->configName()); + yourCertDelList.remove(x); + } + // Go through the non-deleted ones and save them + for (YourCertItem *x = + static_cast(yourSSLBox->firstChild()); + x; + x = static_cast(x->nextSibling())) { + pcerts->setGroup(x->configName()); + pcerts->writeEntry("PKCS12Base64", x->getPKCS()); + pcerts->writeEntry("Password", x->getPass()); + } + + bool doGen = false; + + // CA certificates code + for (CAItem *x = caDelList.first(); x != 0; x = caDelList.next()) { + _signers->remove(x->configName()); + caDelList.remove(x); + doGen = true; + } + + // Go through the non-deleted ones and save them + for (CAItem *x = static_cast(caList->firstChild()); x; + x = static_cast(x->nextSibling())) { + if (!x->modified && !x->isNew) continue; + if (x->isNew) { + x->isNew = false; + _signers->addCA(x->getCert(), + x->getSite(), + x->getEmail(), + x->getCode()); + } else { + _signers->setUse(x->configName(), + x->getSite(), + x->getEmail(), + x->getCode()); + } + x->modified = false; + doGen = true; + } + + if (doGen) genCAList(); + + + config->setGroup("Auth"); + QString whichAuth = config->readEntry("AuthMethod", "none"); + if (defCertBG->selected() == defSend) + config->writeEntry("AuthMethod", "send"); + else if (defCertBG->selected() == defPrompt) + config->writeEntry("AuthMethod", "prompt"); + else + config->writeEntry("AuthMethod", "none"); + + if (defCertBox->currentItem() == 0) + config->writeEntry("DefaultCert", QString::null); + else config->writeEntry("DefaultCert", defCertBox->currentText()); + + for (HostAuthItem *x = authDelList.first(); x != 0; x = authDelList.next()) { + authcfg->deleteGroup(x->configName()); + authDelList.remove(x); + } + + for (HostAuthItem *x = + static_cast(hostAuthList->firstChild()); + x; + x = static_cast(x->nextSibling())) { + if (!x->originalName().isNull()) + authcfg->deleteGroup(x->originalName()); + } + + for (HostAuthItem *x = + static_cast(hostAuthList->firstChild()); + x; + x = static_cast(x->nextSibling())) { + authcfg->setGroup(KResolver::domainToAscii(x->configName())); + authcfg->writeEntry("certificate", x->getCertName()); + authcfg->writeEntry("prompt", (x->getAction() == KSSLCertificateHome::AuthPrompt)); + authcfg->writeEntry("send", (x->getAction() == KSSLCertificateHome::AuthSend)); + } + +#endif + + config->sync(); + policies->sync(); + pcerts->sync(); + authcfg->sync(); + + // insure proper permissions -- contains sensitive data + QString cfgName(KGlobal::dirs()->findResource("config", "cryptodefaults")); + if (!cfgName.isEmpty()) + ::chmod(QFile::encodeName(cfgName), 0600); + + emit changed(false); +} + +void KCryptoConfig::defaults() +{ + load( true ); +} + +void KCryptoConfig::genCAList() { + _signers->regenerate(); + +} + +void KCryptoConfig::slotSelectCipher(int id) { + switch(id) { + case 1: + cwCompatible(); + break; + case 2: + cwUS(); + break; + case 3: + cwExp(); + break; + case 4: + cwAll(); + } +} + +void KCryptoConfig::cwCompatible() { + #ifdef HAVE_SSL + CipherItem *item; + for ( item = static_cast(SSLv2Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( item->bits() >= 56 && item->bits() <= 128 ); + } + + for ( item = static_cast(SSLv3Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( item->bits() >= 56 && item->bits() <= 128 ); + } + + mUseTLS->setChecked(true); + mUseSSLv2->setChecked(true); + mUseSSLv3->setChecked(true); + configChanged(); + #endif +} + + +void KCryptoConfig::cwUS() { + #ifdef HAVE_SSL + CipherItem *item; + for ( item = static_cast(SSLv2Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( item->bits() >= 128 ); + } + + for ( item = static_cast(SSLv3Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( item->bits() >= 128 ); + } + + configChanged(); + #endif +} + + +void KCryptoConfig::cwExp() { + #ifdef HAVE_SSL + CipherItem *item; + for ( item = static_cast(SSLv2Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( item->bits() <= 56 && item->bits() > 0); + } + + for ( item = static_cast(SSLv3Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( item->bits() <= 56 && item->bits() > 0); + } + + configChanged(); + #endif +} + + +void KCryptoConfig::cwAll() { + #ifdef HAVE_SSL + CipherItem *item; + for ( item = static_cast(SSLv2Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( true ); + } + + for ( item = static_cast(SSLv3Box->firstChild()); item; + item = static_cast(item->nextSibling()) ) { + item->setOn( true ); + } + + mUseTLS->setChecked(true); + mUseSSLv2->setChecked(true); + mUseSSLv3->setChecked(true); + configChanged(); + #endif +} + + + +void KCryptoConfig::slotExportCert() { +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); + if (x) { + policies->setGroup(x->getMD5()); + KSSLCertificate *cert = KSSLCertificate::fromString(policies->readEntry("Certificate", QString::null).local8Bit()); + if (cert) { + KCertExport kce; + kce.setCertificate(cert); + kce.exec(); + delete cert; + } else KMessageBox::sorry(this, i18n("Could not open the certificate."), + i18n("SSL")); + } +} + + + +void KCryptoConfig::slotRemoveCert() { +QListViewItem *act = otherSSLBox->selectedItem(); +OtherCertItem *x = static_cast(act); + if (x) { + QListViewItem *next = act->itemBelow(); + if (!next) next = act->itemAbove(); + otherSSLBox->takeItem(x); + otherCertDelList.append(x); + configChanged(); + if (next) otherSSLBox->setSelected(next, true); + } +} + + + +void KCryptoConfig::slotVerifyCert() { +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); + if (!x) return; + + policies->setGroup(x->getMD5()); + KSSLCertificate *cert = KSSLCertificate::fromString(policies->readEntry("Certificate", QString::null).local8Bit()); + + if (!cert) { + KMessageBox::error(this, i18n("Error obtaining the certificate."), i18n("SSL")); + return; + } + + cert->chain().setCertChain(policies->readListEntry("Chain")); + + KSSLCertificate::KSSLValidation v = cert->revalidate(KSSLCertificate::SSLServer); + + /* + * Don't enable this until we keep this info in the cache + if (v != KSSLCerticiate::Ok) + v = cert->revalidate(KSSLCertificate::SMIMESign); + if (v != KSSLCerticiate::Ok) + v = cert->revalidate(KSSLCertificate::SMIMEEncrypt); + */ + + if (v == KSSLCertificate::Ok) { + KMessageBox::information(this, i18n("This certificate passed the verification tests successfully."), i18n("SSL")); + } else { + KMessageBox::detailedError(this, i18n("This certificate has failed the tests and should be considered invalid."), KSSLCertificate::verifyText(v), i18n("SSL")); + } + + delete cert; +} + + + +void KCryptoConfig::slotUntil() { +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); + + cachePerm->setChecked(false); + untilDate->setEnabled(true); + + if (!x) return; + x->setPermanent(false); + + configChanged(); +} + + + +void KCryptoConfig::slotPermanent() { +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); + + cacheUntil->setChecked(false); + untilDate->setEnabled(false); + + if (!x) return; + x->setPermanent(true); + + configChanged(); +} + + + +void KCryptoConfig::slotPolicyChanged(int id) { +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); +if (!x) return; + + if (id == policyGroup->id(policyAccept)) { + x->setPolicy(KSSLCertificateCache::Accept); + } else if (id == policyGroup->id(policyReject)) { + x->setPolicy(KSSLCertificateCache::Reject); + } else if (id == policyGroup->id(policyPrompt)) { + x->setPolicy(KSSLCertificateCache::Prompt); + } + + configChanged(); +} + + + +void KCryptoConfig::slotDatePick() { +KDateTimeDlg kdtd; +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); + + if (!x || !untilDate->isEnabled()) return; + +QDateTime qdt = x->getExpires(); + + kdtd.setDateTime(qdt); + int rc = kdtd.exec(); + if (rc == KDialog::Accepted) { + x->setExpires(kdtd.getDateTime()); + untilDate->setText(KGlobal::locale()->formatDateTime(x->getExpires())); + configChanged(); + } +} + + + +void KCryptoConfig::slotOtherCertSelect() { +OtherCertItem *x = static_cast(otherSSLBox->selectedItem()); +QString iss = QString::null; + if (x) { + otherSSLExport->setEnabled(true); + otherSSLVerify->setEnabled(true); + otherSSLRemove->setEnabled(true); + + fromLabel->setEnabled(true); + untilLabel->setEnabled(true); + policyGroup->setEnabled(true); + cacheGroup->setEnabled(true); + cachePerm->setEnabled(true); + cacheUntil->setEnabled(true); + policies->setGroup(x->getMD5()); + + KSSLCertificate *cert = KSSLCertificate::fromString(policies->readEntry("Certificate", QString::null).local8Bit()); + + if (cert) { + QPalette cspl; + iss = cert->getIssuer(); + cspl = validFrom->palette(); + if (QDateTime::currentDateTime(Qt::UTC) < cert->getQDTNotBefore()) { + cspl.setColor(QColorGroup::Foreground, QColor(196,33,21)); + } else { + cspl.setColor(QColorGroup::Foreground, QColor(42,153,59)); + } + validFrom->setPalette(cspl); + + cspl = validUntil->palette(); + if (QDateTime::currentDateTime(Qt::UTC) > cert->getQDTNotAfter()) { + cspl.setColor(QColorGroup::Foreground, QColor(196,33,21)); + } else { + cspl.setColor(QColorGroup::Foreground, QColor(42,153,59)); + } + validUntil->setPalette(cspl); + + validFrom->setText(cert->getNotBefore()); + validUntil->setText(cert->getNotAfter()); + untilDate->setText(x ? KGlobal::locale()->formatDateTime(x->getExpires()) + : KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(Qt::UTC))); + untilDate->setEnabled(x && !x->isPermanent()); + pHash->setText(cert->getMD5DigestText()); + delete cert; + } else { + validFrom->setText(QString::null); + validUntil->setText(QString::null); + pHash->clear(); + } + + switch(x->getPolicy()) { + case KSSLCertificateCache::Accept: + policyGroup->setButton(policyGroup->id(policyAccept)); + break; + case KSSLCertificateCache::Reject: + policyGroup->setButton(policyGroup->id(policyReject)); + break; + case KSSLCertificateCache::Prompt: + policyGroup->setButton(policyGroup->id(policyPrompt)); + break; + } + + cachePerm->setChecked(x->isPermanent()); + cacheUntil->setChecked(!x->isPermanent()); + + } else { + otherSSLExport->setEnabled(false); + otherSSLVerify->setEnabled(false); + otherSSLRemove->setEnabled(false); + fromLabel->setEnabled(false); + untilLabel->setEnabled(false); + policyGroup->setEnabled(false); + cacheGroup->setEnabled(false); + cachePerm->setChecked(false); + cacheUntil->setChecked(false); + policyAccept->setChecked(false); + policyReject->setChecked(false); + policyPrompt->setChecked(false); + cachePerm->setEnabled(false); + cacheUntil->setEnabled(false); + validFrom->setText(QString::null); + validUntil->setText(QString::null); + untilDate->setText(QString::null); + untilDate->setEnabled(false); + pHash->clear(); + } + + + oSubject->setValues(x ? x->getSub() : QString(QString::null)); + oIssuer->setValues(iss); + +} + + +void KCryptoConfig::slotYourImport() { + + QString certFile = KFileDialog::getOpenFileName(QString::null, "application/x-pkcs12"); + if (certFile.isEmpty()) + return; + +#ifdef HAVE_SSL +KSSLPKCS12 *cert = NULL; +QCString pass; + +TryImportPassAgain: + int rc = KPasswordDialog::getPassword(pass, i18n("Certificate password")); + if (rc != KPasswordDialog::Accepted) return; + + cert = KSSLPKCS12::loadCertFile(certFile, QString(pass)); + + if (!cert) { + rc = KMessageBox::warningYesNo(this, i18n("The certificate file could not be loaded. Try a different password?"), i18n("SSL"),i18n("Try"),i18n("Do Not Try")); + if (rc == KMessageBox::Yes) goto TryImportPassAgain; + return; + } + + // At this point, we know that we can read the certificate in. + // The procedure will be to convert it to Base64 in it's raw form + // and add it to the ListView - eventually going into the SimpleConfig. + + // FIXME: prompt if the user wants the password stored along with the + // certificate + + QString name = cert->getCertificate()->getSubject(); + for (YourCertItem *i = + static_cast(yourSSLBox->firstChild()); + i; + i = static_cast(i->nextSibling())) { + if (i->configName() == name) { + rc = KMessageBox::warningContinueCancel(this, i18n("A certificate with that name already exists. Are you sure that you wish to replace it?"), i18n("SSL"), i18n("Replace")); + if (rc == KMessageBox::Cancel) { + delete cert; + return; + } + yourSSLBox->takeItem(i); + yourCertDelList.append(i); + } + } + + new YourCertItem(yourSSLBox, + cert->toString(), + QString::null, // the password - don't store it yet! + name, + this ); + + setAuthCertLists(); + configChanged(); + delete cert; +#endif + + offerImportToKMail( certFile ); +} + + +void KCryptoConfig::slotYourExport() { +YourCertItem *x = static_cast(yourSSLBox->selectedItem()); + if (!x) return; + + KSSLPKCS12 *pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPass()); + if (!pkcs) + pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPassCache()); + if (!pkcs) { + QString pprompt = i18n("Enter the certificate password:"); + QCString oldpass; + do { + int i = KPasswordDialog::getPassword(oldpass, pprompt); + if (i != KPasswordDialog::Accepted) return; + pkcs = KSSLPKCS12::fromString(x->getPKCS(), oldpass); + pprompt = i18n("Decoding failed. Please try again:"); + } while (!pkcs); + x->setPassCache(oldpass); + slotYourUnlock(); + } + + // For now, we will only export to PKCS#12 + QString certFile = KFileDialog::getSaveFileName(QString::null, + "application/x-pkcs12"); + if (certFile.isEmpty()) + return; + + if (!pkcs->toFile(certFile)) + KMessageBox::sorry(this, i18n("Export failed."), i18n("SSL")); +} + + +void KCryptoConfig::slotYourVerify() { +YourCertItem *x = static_cast(yourSSLBox->selectedItem()); +QString iss; + if (!x) return; + + KSSLPKCS12 *pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPass()); + if (!pkcs) + pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPassCache()); + if (!pkcs) { + QString pprompt = i18n("Enter the certificate password:"); + QCString oldpass; + do { + int i = KPasswordDialog::getPassword(oldpass, pprompt); + if (i != KPasswordDialog::Accepted) return; + pkcs = KSSLPKCS12::fromString(x->getPKCS(), oldpass); + pprompt = i18n("Decoding failed. Please try again:"); + } while (!pkcs); + x->setPassCache(oldpass); + slotYourUnlock(); + } + + KSSLCertificate::KSSLValidation v = pkcs->revalidate(KSSLCertificate::SSLClient); + if (v != KSSLCertificate::Ok) + v = pkcs->revalidate(KSSLCertificate::SMIMEEncrypt); + if (v != KSSLCertificate::Ok) + v = pkcs->revalidate(KSSLCertificate::SMIMESign); + + if (v == KSSLCertificate::Ok) { + KMessageBox::information(this, i18n("This certificate passed the verification tests successfully."), i18n("SSL")); + } else { + KMessageBox::detailedError(this, i18n("This certificate has failed the tests and should be considered invalid."), KSSLCertificate::verifyText(v), i18n("SSL")); + } + + delete pkcs; +} + + +void KCryptoConfig::slotYourRemove() { +YourCertItem *x = static_cast(yourSSLBox->selectedItem()); + if (x) { + yourSSLBox->takeItem(x); + yourCertDelList.append(x); + setAuthCertLists(); + configChanged(); + } +} + + +void KCryptoConfig::slotYourUnlock() { +YourCertItem *x = static_cast(yourSSLBox->selectedItem()); +QString iss; + if (!x || !yourSSLUnlock->isEnabled()) return; + + KSSLPKCS12 *pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPass()); + if (!pkcs) + pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPassCache()); + if (!pkcs) { + QString pprompt = i18n("Enter the certificate password:"); + QCString oldpass; + do { + int i = KPasswordDialog::getPassword(oldpass, pprompt); + if (i != KPasswordDialog::Accepted) return; + pkcs = KSSLPKCS12::fromString(x->getPKCS(), oldpass); + pprompt = i18n("Decoding failed. Please try again:"); + } while (!pkcs); + x->setPassCache(oldpass); + } + + // update the info + iss = pkcs->getCertificate()->getIssuer(); + ySubject->setValues(x ? x->getName() : QString(QString::null)); + yIssuer->setValues(iss); + QPalette cspl; + KSSLCertificate *cert = pkcs->getCertificate(); + cspl = yValidFrom->palette(); + if (QDateTime::currentDateTime(Qt::UTC) < cert->getQDTNotBefore()) { + cspl.setColor(QColorGroup::Foreground, QColor(196,33,21)); + } else { + cspl.setColor(QColorGroup::Foreground, QColor(42,153,59)); + } + yValidFrom->setPalette(cspl); + + cspl = yValidUntil->palette(); + if (QDateTime::currentDateTime(Qt::UTC) > cert->getQDTNotAfter()) { + cspl.setColor(QColorGroup::Foreground, QColor(196,33,21)); + } else { + cspl.setColor(QColorGroup::Foreground, QColor(42,153,59)); + } + yValidUntil->setPalette(cspl); + + yValidFrom->setText(cert->getNotBefore()); + yValidUntil->setText(cert->getNotAfter()); + yHash->setText(cert->getMD5DigestText()); + yourSSLUnlock->setEnabled(false); + delete pkcs; +} + + +void KCryptoConfig::slotYourCertSelect() { +YourCertItem *x = static_cast(yourSSLBox->selectedItem()); +QString iss; + + yourSSLExport->setEnabled(x != NULL); + yourSSLPass->setEnabled(x != NULL); + yourSSLUnlock->setEnabled(false); + yourSSLVerify->setEnabled(x != NULL); + yourSSLRemove->setEnabled(x != NULL); + + if (x) { + KSSLPKCS12 *pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPass()); + if (pkcs) { + QPalette cspl; + KSSLCertificate *cert = pkcs->getCertificate(); + iss = cert->getIssuer(); + cspl = yValidFrom->palette(); + if (QDateTime::currentDateTime(Qt::UTC) < cert->getQDTNotBefore()) { + cspl.setColor(QColorGroup::Foreground, QColor(196,33,21)); + } else { + cspl.setColor(QColorGroup::Foreground, QColor(42,153,59)); + } + yValidFrom->setPalette(cspl); + + cspl = yValidUntil->palette(); + if (QDateTime::currentDateTime(Qt::UTC) > cert->getQDTNotAfter()) { + cspl.setColor(QColorGroup::Foreground, QColor(196,33,21)); + } else { + cspl.setColor(QColorGroup::Foreground, QColor(42,153,59)); + } + yValidUntil->setPalette(cspl); + + yValidFrom->setText(cert->getNotBefore()); + yValidUntil->setText(cert->getNotAfter()); + yHash->setText(cert->getMD5DigestText()); + delete pkcs; + } else { + yourSSLUnlock->setEnabled(x != NULL); + yHash->clear(); + } + } else { + yHash->clear(); + } + + ySubject->setValues(x ? x->getName() : QString(QString::null)); + yIssuer->setValues(iss); +} + + +void KCryptoConfig::slotYourPass() { +YourCertItem *x = static_cast(yourSSLBox->selectedItem()); +QCString oldpass = ""; + if (!x) return; + + KSSLPKCS12 *pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPass()); + if (!pkcs) + pkcs = KSSLPKCS12::fromString(x->getPKCS(), x->getPassCache()); + if (!pkcs) { + QString pprompt = i18n("Enter the OLD password for the certificate:"); + do { + int i = KPasswordDialog::getPassword(oldpass, pprompt); + if (i != KPasswordDialog::Accepted) break; + pkcs = KSSLPKCS12::fromString(x->getPKCS(), oldpass); + pprompt = i18n("Decoding failed. Please try again:"); + } while (!pkcs); + } + + if (pkcs) { + x->setPassCache(oldpass); + slotYourUnlock(); + KPasswordDialog *kpd = new KPasswordDialog(KPasswordDialog::NewPassword, false, 0, this); + kpd->setPrompt(i18n("Enter the new certificate password")); + kpd->setAllowEmptyPasswords(true); + + int i = kpd->exec(); + if (i == KPasswordDialog::Accepted) { + QCString pass = kpd->password(); + pkcs->changePassword(QString(oldpass), QString(pass)); + x->setPKCS(pkcs->toString()); + x->setPassCache(pass); + configChanged(); + } + delete kpd; + delete pkcs; + } +} + + +void KCryptoConfig::slotCAImport() { + QString certFile = KFileDialog::getOpenFileName(QString::null, "application/x-x509-ca-cert"); + + if (certFile.isEmpty()) + 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(); + X509_LOOKUP *certLookup = KOSSL::self()->X509_STORE_add_lookup(certStore, KOSSL::self()->X509_LOOKUP_file()); + + if (certLookup && + 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); + if (!x5o) continue; + + if (x5o->type != X509_LU_X509) continue; + + X509 *x5 = x5o->data.x509; + if (!x5) continue; + + // Easier to use in this form + KSSLCertificate *x = KSSLCertificate::fromX509(x5); + + // Only import CA's + if (!x || !x->x509V3Extensions().certTypeCA()) { + if (x) { + QString emsg = x->getSubject() + ":\n" + + i18n("This is not a signer certificate."); + KMessageBox::error(this, + emsg, + i18n("SSL")); + delete x; + } + continue; + } + + QString name = x->getSubject(); + + // search for dups + for (CAItem *m = static_cast(caList->firstChild()); + m; + m = static_cast(m->nextSibling())) { + if (m->configName() == name) { + KSSLCertificate *y = KSSLCertificate::fromString(m->getCert().local8Bit()); + if (!y) continue; + if (*x == *y) { + QString emsg = name + ":\n" + + i18n("You already have this signer certificate installed."); + KMessageBox::error(this, + emsg, + i18n("SSL")); + delete x; + delete y; + x = NULL; + break; + } + delete y; + } + } + + if (!x) continue; + + // Ok, add it to the list + (new CAItem(caList, + name, + x->toString(), + true, true, true, this) + )->isNew = true; + delete x; + } + + // Can the PEM code be wiped out now? + } else { // try to load it manually as a single X.509 DER encoded + // ASSUMPTION: we only read one certificate in this code + QFile qf(certFile); + QString name; + QString certtext; + KSSLCertificate *x; + qf.open(IO_ReadOnly); + qf.readLine(certtext, qf.size()); + + if (certStore) { KOSSL::self()->X509_STORE_free(certStore); + certStore = NULL; } + + if (certtext.contains("-----BEGIN CERTIFICATE-----")) { + qf.reset(); + certtext = QString::null; + while (!qf.atEnd()) { + QString xx; + qf.readLine(xx, qf.size()); + certtext += xx; + } + certtext = certtext.replace("-----BEGIN CERTIFICATE-----", QString::null); + certtext = certtext.replace("-----END CERTIFICATE-----", QString::null); + certtext = certtext.stripWhiteSpace(); + certtext = certtext.replace("\n", QString::null); + } else { + // Must [could?] be DER + qf.close(); + qf.open(IO_ReadOnly); + char *cr; + cr = new char[qf.size()+1]; + qf.readBlock(cr, qf.size()); + QByteArray qba; + qba.duplicate(cr, qf.size()); + certtext = KCodecs::base64Encode(qba); + delete [] cr; + } + + qf.close(); + + x = KSSLCertificate::fromString(certtext.latin1()); + + if (!x) { + KMessageBox::sorry(this, + i18n("The certificate file could not be loaded."), + i18n("SSL")); + return; + } + + if (!x->x509V3Extensions().certTypeCA()) { + KMessageBox::sorry(this, + i18n("This is not a signer certificate."), + i18n("SSL")); + return; + } + + name = x->getSubject(); + + for (CAItem *i = static_cast(caList->firstChild()); + i; + i = static_cast(i->nextSibling())) { + if (i->configName() == name) { + KSSLCertificate *y = KSSLCertificate::fromString(i->getCert().local8Bit()); + if (!y) continue; + if (*x == *y) { + KMessageBox::error(this, + i18n("You already have this signer certificate installed."), + i18n("SSL")); + delete x; + delete y; + return; + } + delete y; + } + } + + (new CAItem(caList, name, x->toString(), true, true, true, this))->isNew = true; + + delete x; + } + + + if (certStore) KOSSL::self()->X509_STORE_free(certStore); + + configChanged(); +#undef sk_free +#undef sk_num +#undef sk_value +#endif + + offerImportToKMail( certFile ); +} + +void KCryptoConfig::offerImportToKMail( const QString& certFile ) +{ + if ( KMessageBox::questionYesNo( this, i18n( "Do you want to make this certificate available to KMail as well?" ), QString::null, i18n("Make Available"), i18n("Do Not Make Available") ) == KMessageBox::Yes ) { + KProcess proc; + proc << "kleopatra"; + proc << "--import-certificate"; + proc << certFile; + if ( !proc.start( KProcess::DontCare ) ) + KMessageBox::error( this, i18n( "Could not execute Kleopatra. You might have to install or update the kdepim package." ) ); + } +} + + +void KCryptoConfig::slotCARemove() { +CAItem *x = static_cast(caList->selectedItem()); + if (x) { + caList->takeItem(x); + caDelList.append(x); + configChanged(); + slotCAItemChanged(); + } +} + + +void KCryptoConfig::slotCARestore() { + + int rc = KMessageBox::warningContinueCancel(this, i18n("This will revert your certificate signers database to the KDE default.\nThis operation cannot be undone.\nAre you sure you wish to continue?"), i18n("SSL"),i18n("Revert")); + if (rc == KMessageBox::Cancel) { + return; + } + +// For now, we just rm the existing file and rebuild + + QString path = KGlobal::dirs()->saveLocation("config"); + + path += "/ksslcalist"; + + QFile::remove(path); + + // Remove all our old work and rebuild the GUI/List + caDelList.clear(); + caList->clear(); + + + QStringList groups = _signers->list(); + KConfig sigcfg("ksslcalist", true, false); + + for (QStringList::Iterator i = groups.begin(); + i != groups.end(); + ++i) { + if ((*i).isEmpty() || *i == "") continue; + if (!sigcfg.hasGroup(*i)) continue; + sigcfg.setGroup(*i); + if (!sigcfg.hasKey("x509")) continue; + new CAItem(caList, + (*i), + sigcfg.readEntry("x509", QString::null), + sigcfg.readBoolEntry("site", false), + sigcfg.readBoolEntry("email", false), + sigcfg.readBoolEntry("code", false), + this ); + } + + genCAList(); + slotCAItemChanged(); +} + + +void KCryptoConfig::slotCAItemChanged() { +CAItem *x = static_cast(caList->selectedItem()); + if (x) { + caSSLRemove->setEnabled(true); + caSubject->setValues(x ? x->getName() : QString(QString::null)); + KSSLCertificate *cert = KSSLCertificate::fromString(x->getCert().local8Bit()); + if (!cert) { + caIssuer->setValues(QString(QString::null)); + caSite->setEnabled(false); + caEmail->setEnabled(false); + caCode->setEnabled(false); + caSite->setChecked(false); + caEmail->setChecked(false); + caCode->setChecked(false); + cHash->clear(); + } else { + caSite->setEnabled(cert->x509V3Extensions().certTypeSSLCA()); + caEmail->setEnabled(cert->x509V3Extensions().certTypeEmailCA()); + caCode->setEnabled(cert->x509V3Extensions().certTypeCodeCA()); + caSite->setChecked(x->getSite()); + caEmail->setChecked(x->getEmail()); + caCode->setChecked(x->getCode()); + caIssuer->setValues(cert->getIssuer()); + cHash->setText(cert->getMD5DigestText()); + delete cert; + } + } else { + caSSLRemove->setEnabled(false); + caSite->setEnabled(false); + caEmail->setEnabled(false); + caCode->setEnabled(false); + caSubject->setValues(QString(QString::null)); + caIssuer->setValues(QString(QString::null)); + cHash->clear(); + } +} + + +void KCryptoConfig::slotCAChecked() { +CAItem *x = static_cast(caList->selectedItem()); + if (x) { + x->setSite(caSite->isChecked()); + x->setEmail(caEmail->isChecked()); + x->setCode(caCode->isChecked()); + x->modified = true; + configChanged(); + } +} + + + +void KCryptoConfig::slotNewHostAuth() { + HostAuthItem *j = new HostAuthItem(hostAuthList, + QString::null, + QString::null, + this ); + j->setAction(KSSLCertificateHome::AuthSend); + hostAuthList->setSelected(j, true); + authHost->setEnabled(true); + hostCertBox->setEnabled(true); + hostCertBG->setEnabled(true); + authRemove->setEnabled(true); + + hostCertBG->setButton(0); + + authHost->setFocus(); +} + + + +void KCryptoConfig::slotRemoveHostAuth() { +QListViewItem *act = hostAuthList->selectedItem(); +HostAuthItem *x = static_cast(act); + + if (x) { + QListViewItem *next = act->itemBelow(); + if (!next) next = act->itemAbove(); + hostAuthList->takeItem(x); + authDelList.append(x); + configChanged(); + if (next) hostAuthList->setSelected(next, true); + } +} + + +void KCryptoConfig::slotAuthItemChanged() { +HostAuthItem *x = static_cast(hostAuthList->selectedItem()); + +if (x) { + // Make sure the fields are enabled + authHost->setEnabled(true); + hostCertBox->setEnabled(true); + hostCertBG->setEnabled(true); + authRemove->setEnabled(true); + + // Populate the fields + switch(x->getAction()) { + case KSSLCertificateHome::AuthSend: + hostCertBG->setButton(hostCertBG->id(hostSend)); + break; + case KSSLCertificateHome::AuthPrompt: + hostCertBG->setButton(hostCertBG->id(hostPrompt)); + break; + case KSSLCertificateHome::AuthDont: + hostCertBG->setButton(hostCertBG->id(hostDont)); + break; + default: + hostSend->setChecked(false); + hostPrompt->setChecked(false); + hostDont->setChecked(false); + break; + } + + ___lehack = true; + authHost->setText(x->configName()); + ___lehack = false; + hostCertBox->setCurrentItem(0); + + QString theCert = x->getCertName(); + for (int i = 0; i < hostCertBox->count(); i++) { + if (hostCertBox->text(i) == theCert) { + hostCertBox->setCurrentItem(i); + break; + } + } +} else { + authHost->clear(); + authHost->setEnabled(false); + hostCertBox->setEnabled(false); + hostCertBG->setEnabled(false); + authRemove->setEnabled(false); +} +} + + +void KCryptoConfig::slotAuthText(const QString &t) { +if (___lehack) return; +HostAuthItem *x = static_cast(hostAuthList->selectedItem()); + +if (x) { + x->setHost(t); +configChanged(); +} +} + + + +void KCryptoConfig::slotAuthButtons() { +HostAuthItem *x = static_cast(hostAuthList->selectedItem()); + +if (x) { + KSSLCertificateHome::KSSLAuthAction aa = KSSLCertificateHome::AuthDont; + int sel = hostCertBG->id(hostCertBG->selected()); + + if (sel == hostCertBG->id(hostSend)) + aa = KSSLCertificateHome::AuthSend; + else if (sel == hostCertBG->id(hostPrompt)) + aa = KSSLCertificateHome::AuthPrompt; + else + aa = KSSLCertificateHome::AuthDont; + + x->setAction(aa); +configChanged(); +} +} + + +void KCryptoConfig::slotAuthCombo() { +HostAuthItem *x = static_cast(hostAuthList->selectedItem()); + + if (x) { + if (hostCertBox->currentItem() == 0) + x->setCertName(QString::null); + else x->setCertName(hostCertBox->currentText()); + configChanged(); + } +} + + +void KCryptoConfig::slotTestOSSL() { +KOSSL::self()->destroy(); + +if (!KOSSL::self()->hasLibSSL()) { + KMessageBox::detailedSorry(this, + i18n("Failed to load OpenSSL."), + i18n("libssl was not found or successfully loaded."), + i18n("OpenSSL")); + return; +} + +if (!KOSSL::self()->hasLibCrypto()) { + KMessageBox::detailedSorry(this, + i18n("Failed to load OpenSSL."), + i18n("libcrypto was not found or successfully loaded."), + i18n("OpenSSL")); + return; +} + + KMessageBox::information(this, i18n("OpenSSL was successfully loaded."), i18n("OpenSSL")); +} + + +void KCryptoConfig::slotUseEGD() { + if (mUseEGD->isChecked()) { + mUseEFile->setChecked(false); + } + mEGDLabel->setText(i18n("Path to EGD:")); + mEGDPath->setEnabled(mUseEGD->isChecked()); + mEGDLabel->setEnabled(mUseEGD->isChecked()); + configChanged(); +} + + +void KCryptoConfig::slotUseEFile() { + if (mUseEFile->isChecked()) { + mUseEGD->setChecked(false); + } + mEGDLabel->setText(i18n("Path to entropy file:")); + mEGDPath->setEnabled(mUseEFile->isChecked()); + mEGDLabel->setEnabled(mUseEFile->isChecked()); + configChanged(); +} + + +// Lets make this a separate module. it's a whole lot of work and can really be +// encompassed in a separate module quite nicely. +void KCryptoConfig::slotGeneratePersonal() { +#if 0 + QStringList qslCertTypes; + + qslCertTypes << i18n("Personal SSL") + << i18n("Server SSL") + << i18n("S/MIME") + << i18n("PGP") + << i18n("GPG") + << i18n("SSL Personal Request") + << i18n("SSL Server Request") + << i18n("Netscape SSL") + << i18n("Server certificate authority", "Server CA") + << i18n("Personal certificate authority", "Personal CA") + << i18n("Secure MIME certificate authority", "S/MIME CA"); +#endif + +} + + +#ifdef HAVE_SSL +// This gets all the available ciphers from OpenSSL +bool KCryptoConfig::loadCiphers() { +unsigned int i; +SSL_CTX *ctx; +SSL *ssl; +SSL_METHOD *meth; + + SSLv2Box->clear(); + SSLv3Box->clear(); + + meth = SSLv2_client_method(); + SSLeay_add_ssl_algorithms(); + ctx = SSL_CTX_new(meth); + if (ctx == NULL) return false; + + ssl = SSL_new(ctx); + if (!ssl) return false; + + CipherItem *item; + for (i=0; ; i++) { + int j, k; + SSL_CIPHER *sc; + sc = (meth->get_cipher)(i); + if (!sc) + break; + // Leak of sc*? + QString scn(sc->name); + if (scn.contains("ADH-") || scn.contains("NULL-") || scn.contains("DES-CBC3-SHA") || scn.contains("FZA-")) { + continue; + } + k = SSL_CIPHER_get_bits(sc, &j); + + item = new CipherItem( SSLv2Box, sc->name, k, j, this ); + } + + if (ctx) SSL_CTX_free(ctx); + if (ssl) SSL_free(ssl); + + // We repeat for SSLv3 + meth = SSLv3_client_method(); + SSLeay_add_ssl_algorithms(); + ctx = SSL_CTX_new(meth); + if (ctx == NULL) return false; + + ssl = SSL_new(ctx); + if (!ssl) return false; + + for (i=0; ; i++) { + int j, k; + SSL_CIPHER *sc; + sc = (meth->get_cipher)(i); + if (!sc) + break; + // Leak of sc*? + QString scn(sc->name); + if (scn.contains("ADH-") || scn.contains("NULL-") || scn.contains("DES-CBC3-SHA") || scn.contains("FZA-")) { + continue; + } + k = SSL_CIPHER_get_bits(sc, &j); + + item = new CipherItem( SSLv3Box, sc->name, k, j, this ); + } + + if (ctx) SSL_CTX_free(ctx); + if (ssl) SSL_free(ssl); + +return true; +} +#endif + + +void KCryptoConfig::setAuthCertLists() { +QString oldDef, oldHost; +bool noneDef, noneHost; + +// get the old setting + oldDef = defCertBox->currentText(); + oldHost = hostCertBox->currentText(); + noneDef = (0 == defCertBox->currentItem()); + noneHost = (0 == hostCertBox->currentItem()); + +// repopulate + defCertBox->clear(); + hostCertBox->clear(); + QStringList defCertStrList; // = KSSLCertificateHome::getCertificateList(); + defCertStrList.append(i18n("None")); + for (YourCertItem *x = static_cast(yourSSLBox->firstChild()); + x; + x = static_cast(x->nextSibling())) { + defCertStrList.append(x->configName()); + } + defCertBox->insertStringList(defCertStrList); + hostCertBox->insertStringList(defCertStrList); + +// try to restore it + + defCertBox->setCurrentItem(0); + if (!noneDef) { + for (int i = 0; i < defCertBox->count(); i++) { + if (defCertBox->text(i) == oldDef) { + defCertBox->setCurrentItem(i); + break; + } + } + } + + if (!noneDef && defCertBox->currentItem() == 0) configChanged(); + + hostCertBox->setCurrentItem(0); + if (!noneHost) { + for (int i = 0; i < hostCertBox->count(); i++) { + if (hostCertBox->text(i) == oldHost) { + hostCertBox->setCurrentItem(i); + break; + } + } + } + + if (!noneHost && hostCertBox->currentItem() == 0) configChanged(); + + // Update the host entries too + for (HostAuthItem *x = + static_cast(hostAuthList->firstChild()); + x; + x = static_cast(x->nextSibling())) { + QString newValue = QString::null; + for (int i = 1; i < hostCertBox->count(); i++) { + if (hostCertBox->text(i) == x->getCertName()) { + newValue = x->getCertName(); + break; + } + } + if (newValue != x->getCertName()) configChanged(); + x->setCertName(newValue); + } + + +} + +#include "crypto.moc" diff --git a/kcontrol/crypto/crypto.desktop b/kcontrol/crypto/crypto.desktop new file mode 100644 index 000000000..127f1adab --- /dev/null +++ b/kcontrol/crypto/crypto.desktop @@ -0,0 +1,229 @@ +[Desktop Entry] +Icon=encrypted +Type=Application +Exec=kcmshell crypto +DocPath=kcontrol/crypto/index.html + +X-KDE-Library=crypto +X-KDE-ParentApp=kcontrol + +Name=Crypto +Name[af]=Kripto +Name[ar]=التشفير +Name[az]=Şifrləmə +Name[be]=Крыптаграфія +Name[bg]=Шифроване +Name[bn]=ক্রিপ্টো +Name[br]=Krypto +Name[cs]=Kryptografie +Name[csb]=Kriptografijô +Name[da]=Krypto +Name[de]=Verschlüsselung +Name[el]=Κρυπτογραφία +Name[eo]=Ĉifrado +Name[es]=Criptografía +Name[et]=Krüpto +Name[fa]=رمز +Name[fi]=Salaus +Name[fo]=Brongling +Name[fr]=Cryptographie +Name[fy]=kryptografie +Name[ga]=Criptiú +Name[gl]=Cifrado +Name[he]=הצפנה +Name[hi]=क्रिप्टो +Name[hr]=Šifriranje +Name[hu]=Titkosítás +Name[id]=Kripto +Name[is]=Dulritun +Name[it]=Crittografia +Name[ja]=暗号 +Name[ka]=კრიპტოგრაფია +Name[kk]=Криптография +Name[lo]=ການເຂົ້າລະຫັດ +Name[lt]=Šifravimas +Name[lv]=Kripto +Name[mk]=Криптографија +Name[mn]=Түлхүүрлэлт +Name[mt]=Kriptografija +Name[nb]=Kryptering +Name[nds]=Verslöteln +Name[ne]=क्रिप्टो +Name[nl]=Cryptografie +Name[nn]=Krypto +Name[nso]=Tshiro +Name[pl]=Kryptografia +Name[pt]=Cifra +Name[pt_BR]=Criptografia +Name[ro]=Criptografie +Name[ru]=Криптография +Name[se]=Kryptografija +Name[sk]=Šifrovanie +Name[sl]=Kripto +Name[sr]=Криптографија +Name[sr@Latn]=Kriptografija +Name[sv]=Krypto +Name[ta]=சங்கேத +Name[te]=క్రిప్టో +Name[tg]=Рамзӣ +Name[th]=การเข้ารหัส +Name[tr]=Şifreleme +Name[tt]=Serläw +Name[uk]=Криптографія +Name[uz]=Kripto +Name[uz@cyrillic]=Крипто +Name[vi]=Mật mã +Name[wa]=Criptografeye +Name[xh]=Imfihlo +Name[zh_CN]=加密 +Name[zh_TW]=加密 +Comment=Configure SSL, manage certificates, and other cryptography settings +Comment[af]=Konfigureer Ssl, bestuur sertifikate, en ander kriptografie instellings +Comment[ar]=قم بتهيئة SSL و ادارة الشهادات اضافة الى اعدادات الضبط الأخرى +Comment[az]=SSL,vəsiqə,vəsiqə qurğuları,digər şifrləmə qurğuları +Comment[be]=Настаўленне SSL, кіраванне сертыфікатамі і іншыя настаўленні крыптаграфіі +Comment[bg]=Настройване и управление на удостоверения за шифроване +Comment[bn]=এস-এস-এল কনফিগার করুন, সার্টিফিকেট ম্যানেজ করুন এবং ক্রিপ্টোগ্রাফী সংক্রান্ত অন্যান্য মানসমূহ বেছে নিন +Comment[bs]=Podešavanje SSL, upravljanje certifikatima i ostalim kriptografskim postavkama +Comment[ca]=Aquí podeu configurar SSL, gestionar certificats, i altres valors de la criptografia +Comment[cs]=Nastavení SSL, správa certifikátů a ostatní kryptografická nastavení +Comment[csb]=Kònfigùracëjô SSL, sprôwianié certifikatama, jinszé kriptograficzné ùstôwë +Comment[cy]=Ffurfweddu SSL, rheoli tystysgrifau a gosodiadau cryptograffeg eraill +Comment[da]=Indstil SSL, håndtér certifikater og andre kryptografiske indstillinger +Comment[de]=SSL einrichten, Zertifikate verwalten und andere Einstellungen zur Verschlüsselung von Daten vornehmen +Comment[el]=Ρύθμιση SSL, διαχείριση πιστοποιητικών, και άλλες ρυθμίσεις κρυπτογραφίας +Comment[eo]=Agordo de SSL, administrado de atestiloj ktp. +Comment[es]=Configura SSL, administra los certificados y otras preferencias de criptografía. +Comment[et]=SSL seadistamine, sertifikaatide haldamine jms. +Comment[eu]=SSL konfiguratu, ziurtagiriak eta kriptografiaren beste ezarpen bazuk kudeatu +Comment[fa]=پیکربندی SSL، گواهی‌نامه‌های مدیر و دیگر تنظیمات رمزنگاری +Comment[fi]=SSL-, sertifikaatti- ja muut salausasetukset +Comment[fr]=Configuration de SSL, de la cryptographie et gestion des certificats +Comment[fy]=Hjir kinne jo SSL, sertifikatenbehear en oare kryptografyske ynstellings wizigje +Comment[ga]=Cumraigh SSL, bainistigh teastais, agus socruithe cripteagrafaíochta eile +Comment[gl]=Configurar SSL, xestionar certificados, e outras configuracións de cifrado +Comment[he]=שינוי ההגדרות של SSL, ניהול תעודות, והגדרות הצפנה אחרות +Comment[hi]=कॉन्फ़िगर एसएसएल, प्रमाणपत्र प्रबंधन, तथा अन्य क्रिप्टोग्राफी विन्यास करे +Comment[hr]=Konfiguriranje SSL-a, upravljanje potvrdama i ostalim postavkama šifriranja +Comment[hu]=Az SSL beállítása, a tanúsítványok kezelése és más titkosítási beállítások +Comment[id]=Konfigurasi SSL, manaje sertifikat, dan seting kriptografi lainnya +Comment[is]=Stilla SSL, vinna með skilríki og aðrar stillingar dulritunar +Comment[it]=Configura SSL, gestisce certificati e altre impostazioni crittografiche +Comment[ja]=SSL の設定、証明書の管理、その他の暗号作成形式の設定 +Comment[ka]= SSL კონფიგურაცია, სერთიფიკატის მენეჯმენტი და სხვა კრიპტოგრაფიული ელემენტების კონფიგურაცია +Comment[kk]=SSL-ді баптау, сертификаттарды және басқа шифрлау параметрлерді басқару +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ SSL, គ្រប់គ្រង​វិញ្ញាបនបត្រ និង​ការ​កំណត់​រហស្សលិខសាស្ត្រ +Comment[lo]=ປັບແຕ່ງ SSL, ຈັດການໃບຮັບຮອງແລະຕັ້ງການເຂົ້າລະຫັດອື່ນໆ +Comment[lt]=Derina SSL, tvarko sertifikatus ir kitus šifravimo parametrus +Comment[lv]=Konfigurēt SSL, pārvaldīt sertifikātus un citus kriptogrāfijas parametrus +Comment[mk]=Конфигурација на SSL, менаџмент на сертификати\nи други криптографски поставувања +Comment[mn]=SSL, Үнэмлэх зохицуулах, ба бусад нууцлалт тохируулах +Comment[ms]=Konfigur SSL, urus sijil, dan seting kriptografi lain +Comment[mt]=Ikkonfigura l-SSL, immaniġġja ċertifikati, u konfigurazzjoni oħra tal-kriptografija +Comment[nb]=Innstilling av SSL, behandling av sertifikater og andre krypteringsinnstillinger +Comment[nds]=SSL instellen, Zertifikaten plegen, un annere Verslöteln-Instellen +Comment[ne]=SSL कन्फिगर गर्नुहोस्, प्रमाणपत्रहरू र अन्य गुप्तलेखन सेटिङ प्रबन्ध गर्नुहोस् +Comment[nl]=Hier kunt u SSL, certificatenbeheer en andere cryptografische instellingen wijzigen +Comment[nn]=Oppsett av SSL, sertifikat og andre krypteringsinnstillingar +Comment[nso]=Beakanya SSL, laola dikgonthisiso, le dipeakanyo tsedingwe tsa tshiro +Comment[oc]=Configura SSL, gestiona certificats, e autres valors de criptografia +Comment[pa]=SSL ਸੰਰਚਨਾ,ਸਰਟੀਫਕੇਟ ਅਤੇ ਕਰੋਫਟੋਗਰਾਫੀ ਸੈਟਿੰਗ +Comment[pl]=Konfiguracja SSL, zarządzanie certyfikatami, inne ustawienia kryptograficzne +Comment[pt]=Configurar o SSL, gerir certificados e outras configurações de cifra +Comment[pt_BR]=Configura SSL, gerencia certificados e outras configurações de criptografia +Comment[ro]=Configurează SSL, administrează certificate și alte setări criptografice +Comment[ru]=Настройка SSL, управление сертификатами и другими параметрами шифрования +Comment[rw]=Kuboneza SSL, kuyobora impamyabushobozi , n'andi magenamiterere y'umukonobanga. +Comment[se]=Heivet SSL:a, fuolat duođaštusaid, ja eará kryptografiija heivehusaid +Comment[sk]=Konfigurácia SSL, správa certifikátov a iné kryptografické nastavenia +Comment[sl]=Nastavite SSL, urejajte certifikate in ostale nastavitve šifriranja +Comment[sr]=Подесите SSL, управљајте сертификатима и другим крииптографским поставкама +Comment[sr@Latn]=Podesite SSL, upravljajte sertifikatima i drugim kriiptografskim postavkama +Comment[sv]=Anpassa SSL, hantera certifikat, samt andra kryptografiska inställningar +Comment[ta]=SSLஐ அமை , சான்றிதழ்களை கையாளு, மற்றும் ரகசிய அமைப்புகளை வடிவமை +Comment[tg]= Мудирияти эътиборномаҳо, ва соири танзими SSL, танзимоти рамзнагузорӣ +Comment[th]=ปรับแต่ง SSL, จัดการใบรับรอง และตั้งการการเข้ารหัสอื่น ๆ +Comment[tr]=SSL,sertifika,sertifika ayarları,diğer şifreleme ayarları +Comment[tt]=SSL, tanıqlıqlar, şulay uq başqa serläw çaraların caylaw üzäge bu +Comment[uk]=Налаштування SSL, керування сертифікатами та іншими параметрами криптографії +Comment[uz]=SSL'ni moslash, sertifikatlarni boshqarish va boshqa kriptografiya moslamalari +Comment[uz@cyrillic]=SSL'ни мослаш, сертификатларни бошқариш ва бошқа криптография мосламалари +Comment[ven]=Khonifiga SSL, i laula sethifikheithi, na dzine mbekanyo dza khiraiputogirafi +Comment[vi]=Cấu hình SSL, quản lí giấy chứng nhận và các thiết lập về mật mã khác +Comment[wa]=Apontiaedje SSL, manaedje les acertinaedjes et ls ôtès tchuzes di criptografeye +Comment[xh]=Qwalasela i SSL, yenza iziqinisekiso, kunye nezinye izicwangciso zokufihlakeleyo +Comment[zh_CN]=配置 SSL,管理证书和其它加密设置 +Comment[zh_TW]=設定 SSL、管理憑證和其它的加密設定 +Comment[zu]=Hlanganisela i-SSL, phatha izitifiketi, kanye nezinye izilungiselelo zokuqaqa umbhalo ongaqondakali + +Keywords=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security +Keywords[ar]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,تشفير,التشفير,شهادات,الشهادات,الشفرات,آمن,الأمن +Keywords[az]=Şifr,şifrləmə,kriptoqrafiya,SSL,https,vəsiqə,TLS,təhlüükəsizlik,e'tibarlı +Keywords[be]=Крыптаграфія,шыфраванне,бяспека,бяспечны,Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security +Keywords[bg]=шифър, шифроване, удостоверения, удостоверение, сигурност, сертификат, сертификати, шифри, ключове, Crypto, Krypto, Cryptography, encryption, SSL, https, certificates, ciphers, TLS, secure, security +Keywords[ca]=Cripto,Kripto,Criptografia,xifrat,SSL,https,certificats,xifres,TLS,segur,seguretat +Keywords[cs]=Kryptografie,Šifrování,SSL,https,Certifikáty,Kódy,Krypto,TLS,bezpečnost +Keywords[csb]=Krypto,Kriptografijô,szifrowanié,SSL,https,cerifikatë,szifrë,TLS,bezpieczno,bezpiek +Keywords[cy]=Crypto,Krypto,Cryptograffaeth,amgryptio,SSL,https,tystysgrifau,seifferau,TLS,diogel,diogelwch +Keywords[da]=Crypto,Krypto,Kryptografi,kryptering,SSL,https,certifikater,chifre,TLS,sikker,sikkerhed +Keywords[de]=Chiffrierung,Crypto,Krypto,Kryptographie,Verschlüsselung,SSL,https,Zertifikate,TLS,Sicherheit +Keywords[el]=Κρυπτογραφία,Krypto,Κρυπτογράφηση,κρυπτογράφηση,SSL,https,πιστοποιητικά,ciphers,TLS,ασφαλές,ασφάλεια +Keywords[eo]=ĉifrado,SSL,HTTPS,atestoj,ĉifroj,TLS,sekureco +Keywords[es]=Criptografía,cifra,SSL,https,certificados,cifrados,TLS,seguro,seguridad +Keywords[et]=Crypto,krüpto,krüptograafia,krüptimine,SSL,https,sertifikaadid,šifrid,TLS,turvaline,turvalisus +Keywords[eu]=Crypto,Krypto,Kriptografia,enkriptazioa,SSL,https,ziurtagiriak,zifratuak,TLS,segurua,segurtasuna +Keywords[fa]=Crypto، Krypto، رمزنگاری، رمزبندی،SSL، https،گواهی‌نامه‌ها، رمزها، TLS،امن، امنیت +Keywords[fi]=Salaus,Krypto,SSL,https,sertifikaatit,salaukset,TLS,turvallinen,turvallisuus +Keywords[fr]=cryptographie,cryptage,encryptage,chiffrage,SSL,https,certificats,codes,TLS,sécurisé,sécurité +Keywords[fy]=crypto,krypto,kryptografie,fersifering,ssl,https,sertifikaten,siferje,tls,befeiliging,feilig,kodearring,kodearre,fersifering +Keywords[ga]=Krypto,rúnscríobh,criptiú,incriptiúchán,SSL,https,teastais,sifir,TLS,daingean,slándáil +Keywords[gl]=Criptografia,krypto,cripto,cifrado,SSL,https,certificados,ciphers,TLS,seguro,seguridade +Keywords[he]=מאובטח,אבטחה,TLS,תעודות,צפנים,https,SSL,הצפנה,Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security +Keywords[hi]=क्रिप्टो,क्रिप्टोग्राफी,एनक्रिप्शन,एसएसएल,एचटीटीपीएस,प्रमाणपत्र,साइफर्स,टीएलएस,सुरक्षित,सुरक्षा +Keywords[hr]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,Šifriranje,šifriranje,šifre,šifra,potvrde,sigurnost,osigurano +Keywords[hu]=Crypto,Krypto,kriptográfia,titkosítás,SSL,https,tanúsítványok,kódolás,TLS,biztonságos,biztonság +Keywords[id]=Kripto,Kriptografi,enkripsi,SSL,https,sertifikat,ciphers,TLS,secure,security +Keywords[is]=Dulritun,Dulmál,Krypto,SSL,https,skilríki,brenglun,TLS,öryggi,öruggt +Keywords[it]=crittografia,cifratura,SSL,https,certificati,cifrari,TLS,sicuro,sicurezza +Keywords[ja]=暗号化,Krypto,暗号作成形式,暗号化,SSL,http,証明書,暗号,TLS,セキュア,セキュリティ +Keywords[km]=Crypto,Krypto,រហស្សលិខសាស្ត្រ,ការ​បម្លែង​ជា​កូដ,SSL,https,វិញ្ញាបនបត្រ,សរសេរ​សម្ងាត់,TLS,សុវត្ថិភាព +Keywords[lt]=Crypto,Krypto,Cryptography,kriptografija,encryption,šifravimas,SSL,https,certificates,sertifikatai,ciphers,šifrai,TLS,secure,saugus,security,saugumas,apsauga +Keywords[lv]=Kripto,Kriptogrāfija,kodēšana,SSL,https,sertifkāti,kiperi,TLS,droši,drošība +Keywords[mk]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,Крипто,Криптографија,енкрипција,сертификати,шифри,сигурно,сигурност +Keywords[mn]=Шифрлэх,Crypto,Krypto,Түлхүүрлэлт,Нууцлалт,SSL,https,Үнэмлэх,TLS,Хамгаалалт +Keywords[mt]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,kriptografija +Keywords[nb]=Krypto,Kryptering,SSL,https,sertifikater,TTL,sikkerhet,sikker +Keywords[nds]=Crypto,Krypto,Kryptografie,verslöteln,SSL,https,Zertifikaten,ciphers,TLS,seker,Sekerheit +Keywords[ne]=क्रिप्टो, क्राइप्टो, गुप्तलेखन, समक्रमण, SSL, https, प्रमाणपत्र, गुप्त, TLS, सुरक्षण, सुरक्षा +Keywords[nl]=crypto,krypto,cryptografie,encryptie,ssl,https,certificaten,ciphers,tls,beveiliging,veilig,codering,gecodeerd,versleuteling +Keywords[nn]=Crypto,Krypto,kryptering,SSL,https,sertifikat,TLS,sikker,tryggleik +Keywords[nso]=Tshiro,Krypto,Tshiro,sesiro,SSL,https,dikgonthisiso,ciphers,TSL, sireletsa,tshireletso +Keywords[pa]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security, ਸੁਰੱਖਿਆ, ਇਕਰਿਪਸ਼ਨ +Keywords[pl]=Krypto,Kryptografia,szyfrowanie,SSL,https,certyfikaty,szyfry,TLS,bezpieczny,bezpieczeństwo +Keywords[pt]=Cifra,Criptografia,cifra,SSL,https,certificados,cifras,TLS,seguro,segurança,encriptação +Keywords[pt_BR]=Cripto,Krypto,Criptografia,criptografia,SSL,https,certificados,cifras, TLS,seguro,segurança +Keywords[ro]=crypto,criptografie,criptare,SSL,https,certificate,cifrare,TLS,sigur,securitate +Keywords[ru]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,сертификат,сертификаты,шифрование,подпись +Keywords[rw]=Crypto,Krypto,Umukonobanga,isobeka,SSL,https,impamyabushobozi,imibarebanga,TLS,byizewe,umutekano +Keywords[se]=Krypto,krypteren,SSL,https,duođaštusat,cipherat,sihkkarvuohtta,TLS +Keywords[sk]=Crypto,Krypto,Kryptografia,kryptovanie,SSL,https,certifikáty,šifra,TLS,zabezpečenie,bezpečnosť +Keywords[sl]=Kripto,Kriptografija,šifriranje,SSL,https,certifikati,šifrirni algoritmi,TLS,varnost,varno +Keywords[sr]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,Крипто,Криптографија,енкрипција,сертификати,шифре,безбедност +Keywords[sr@Latn]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,Kripto,Kriptografija,enkripcija,sertifikati,šifre,bezbednost +Keywords[sv]=Crypto,Krypto,Kryptografi,kryptering,SSL,https,certifikat,krypton,TLS,säkra,säkerhet +Keywords[ta]=ரகசிய,ரகசிய,ரகசியமான,சங்கேதம்,SSL,https,சான்றிதழ்கள்,ciphers,TLS,பாதுகாப்பான,பாதுகாப்பு +Keywords[tg]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,рамз,рамзгузорӣ,амният +Keywords[th]=เข้ารหัส,Krypto,Cryptography,การเข้ารหัส,SSL,https,ใบรับรอง,ciphers,TLS,ปลอดภัย,ความปลอดภัย +Keywords[tr]=Şifre,şifreleme,şifrebilim,SSL,https,sertifika,TLS,güvenlik,güvenli +Keywords[uk]=криптографія,криптографія,Cryptography,шифрування,SSL,https,TLS,сертифікати,шифри,Crypto,Krypto,безпека,безпечність +Keywords[uz]=SSL,https,TLS,Kripto,Kriptografiya,kodlash,sertifikatlar,shifr,xavfsiz,xavfsizlik +Keywords[uz@cyrillic]=SSL,https,TLS,Крипто,Криптография,кодлаш,сертификатлар,шифр,хавфсиз,хавфсизлик +Keywords[ven]=Crypto,Krypto,Cryptography,encryption,SSL,https,sethifikheithi,ciphers,TLS,tsireledza,vhutsireledzi +Keywords[vi]=Mật mã,Mã khoá,Mật mã học,mã hóa,SSL,https,giấy chứng nhận,phá mã,TLS,bảo mật,sự bảo mật +Keywords[wa]=Crypto,Krypto,criptografeye,SSL,https,certificates,acertinaedjes,ciphers,TLS,secure,security,såve,såvrité +Keywords[xh]=Imfihlo,Imfihlo,Okufihlakeleyo,ufihlo,SSL,https,iziqinisekiso,imibhalo efihlakeleyo,TLS,khusela,ukhuseleko +Keywords[zh_CN]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,加密,加密学,证书,密码,安全 +Keywords[zh_TW]=Crypto,Krypto,Cryptography,encryption,SSL,https,certificates,ciphers,TLS,secure,security,加密,加密學,証書,密碼,安全 +Keywords[zu]=Crypto,Krypto,Ukuqaqa umbhalo ongaqondakali,SSL,https, izitifiketi,imibhalo yekhodi,TLS,vikela,ukuvikela + +Categories=Qt;KDE;X-KDE-settings-security; diff --git a/kcontrol/crypto/crypto.h b/kcontrol/crypto/crypto.h new file mode 100644 index 000000000..4d335570a --- /dev/null +++ b/kcontrol/crypto/crypto.h @@ -0,0 +1,362 @@ +/** + * crypto.h + * + * Copyright (c) 2000-2001 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _CRYPTO_H +#define _CRYPTO_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +class QGridLayout; +class QVButtonGroup; + +class KComboBox; +class KCryptoConfig; +class KPushButton; +class KSSLCertBox; +class KSSLSigners; +class KURLLabel; +class KURLRequester; + +class CipherItem : public QCheckListItem +{ +public: + CipherItem( QListView *view, const QString& cipher, int bits, int maxBits, + KCryptoConfig *module ); + ~CipherItem() {} + + void setCipher( const QString& cipher ) { m_cipher = cipher; } + const QString& cipher() const { return m_cipher; } + void setBits( int bits ) { m_bits = bits; } + int bits() const { return m_bits; } + + QString configName() const; + +protected: + virtual void stateChange( bool ); + +private: + int m_bits; + QString m_cipher; + KCryptoConfig *m_module; // just to call configChanged() +}; + + + +class OtherCertItem : public QListViewItem +{ +public: + OtherCertItem(QListView *view, const QString& sub, const QString& md5, bool perm, int policy, QDateTime exp, KCryptoConfig *module ); + ~OtherCertItem() {} + + QString configName() const; + const QString& getSub() { return _sub; } + int getPolicy() { return _policy; } + const QString& getMD5() { return _md5; } + bool isPermanent() { return _perm; } + QDateTime getExpires() { return _exp; } + void setPolicy(int x) { _policy = x; } + void setPermanent(bool x) { _perm = x; } + void setExpires(QDateTime x) { _exp = x; } + +protected: + virtual void stateChange( bool ); + +private: + QString _sub, _md5; + KCryptoConfig *m_module; // just to call configChanged() + QDateTime _exp; + bool _perm; + int _policy; +}; + + + + +class YourCertItem : public QListViewItem +{ +public: + YourCertItem(QListView *view, QString pkcs, QString pass, QString name, KCryptoConfig *module ); + ~YourCertItem() {} + + QString configName() const; + QString& getPKCS() { return _pkcs; } + void setPKCS(QString pkcs) { _pkcs = pkcs; } + QString& getPass() { return _pass; } + void setPass(QString pass) { _pass = pass; } + QString& getName() { return _name; } + void setName(QString name) { _name = name; } + QString& getPassCache() { return _cpass; } + void setPassCache(QString pass) { _cpass = pass; } + +protected: + virtual void stateChange( bool ); + +private: + QString _pkcs; + QString _pass; + QString _cpass; + QString _name; + KCryptoConfig *m_module; // just to call configChanged() +}; + + + + +class CAItem : public QListViewItem +{ +public: + CAItem(QListView *view, QString name, QString cert, bool site, bool email, bool code, KCryptoConfig *module ); + ~CAItem() {} + + QString configName() const; + QString& getName() { return _name; } + void setName(QString name) { _name = name; } + + inline QString getCert() const { return _cert; } + inline bool getSite() const { return _site; } + inline bool getEmail() const { return _email; } + inline bool getCode() const { return _code; } + inline void setSite(bool x) { _site = x; } + inline void setEmail(bool x) { _email = x; } + inline void setCode(bool x) { _code = x; } + + bool isNew, modified; + +protected: + virtual void stateChange( bool ); + +private: + QString _name; + QString _cert; + bool _site, _email, _code; + KCryptoConfig *m_module; // just to call configChanged() +}; + + + + + +class HostAuthItem : public QListViewItem +{ +public: + HostAuthItem(QListView *view, QString host, QString name, KCryptoConfig *module ) : QListViewItem(view, QString::null ) { + _name = name; _host = host; + m_module = module; + setText(0, _host); + setText(1, _name); + _oname = QString::null; + } + ~HostAuthItem() {} + + void setAction(KSSLCertificateHome::KSSLAuthAction aa) { + _aa = aa; + switch (aa) { + case KSSLCertificateHome::AuthSend: + setText(2, i18n("Send")); + break; + case KSSLCertificateHome::AuthDont: + setText(2, i18n("Don't Send")); + break; + case KSSLCertificateHome::AuthPrompt: + setText(2, i18n("Prompt")); + break; + default: + break; + } + } + KSSLCertificateHome::KSSLAuthAction getAction() const { return _aa; } + QString configName() const { return _host; } + QString getCertName() const { return _name; } + void setCertName(QString name) { _name = name; setText(1, name); } + void setHost(QString name) { _host = name; setText(0, name); } + void setOriginalName(QString oname) { _oname = oname; } + QString originalName() const { return _oname; } + +protected: + +private: + QString _host; + QString _name, _oname; + KSSLCertificateHome::KSSLAuthAction _aa; + KCryptoConfig *m_module; // just to call configChanged() +}; + + + + + +class KCryptoConfig : public KCModule +{ + Q_OBJECT +public: + KCryptoConfig(QWidget *parent = 0L, const char *name = 0L, const QStringList &list = QStringList()); + virtual ~KCryptoConfig(); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + +#ifdef HAVE_SSL + bool loadCiphers(); +#endif + +public slots: + void configChanged(); + + void slotGeneratePersonal(); + void slotUseEGD(); + void slotUseEFile(); + void slotSelectCipher(int id); + + void slotTestOSSL(); + + void slotExportCert(); + void slotRemoveCert(); + void slotVerifyCert(); + void slotOtherCertSelect(); + void slotPolicyChanged(int id); + void slotPermanent(); + void slotUntil(); + void slotDatePick(); + + void slotYourImport(); + void slotYourExport(); + void slotYourVerify(); + void slotYourRemove(); + void slotYourUnlock(); + void slotYourPass(); + void slotYourCertSelect(); + + void slotNewHostAuth(); + void slotRemoveHostAuth(); + void slotAuthItemChanged(); + void slotAuthText(const QString &t); + void slotAuthButtons(); + void slotAuthCombo(); + + void slotCAImport(); + void slotCARemove(); + void slotCARestore(); + void slotCAItemChanged(); + void slotCAChecked(); + +protected: + void cwCompatible(); + void cwUS(); + void cwExp(); + void cwAll(); + +private: + + void offerImportToKMail( const QString& certFile ); + void setAuthCertLists(); + void genCAList(); + + QTabWidget *tabs; + QWidget *tabSSL, *tabOSSL; + + QWidget *tabYourSSLCert, *tabOtherSSLCert, *tabSSLCA, *tabSSLCOpts, *tabAuth; + + QListView *SSLv2Box, *SSLv3Box; + QCheckBox *mUseTLS, *mUseSSLv2, *mUseSSLv3; + QCheckBox *mWarnOnEnter, *mWarnOnLeave; + + /* EGD stuff */ + QLabel *mEGDLabel; + KURLRequester *mEGDPath; + QCheckBox *mUseEGD; + QCheckBox *mUseEFile; + + /* CipherWizards */ + QPushButton *mCWall, *mCWus, *mCWexp, *mCWcompatible; + + QCheckBox *mWarnOnUnencrypted, *mWarnOnMixed; + QListView *yourSSLBox, *otherSSLBox, *caList; + QCheckBox *mWarnSelfSigned, *mWarnExpired, *mWarnRevoked; + QPushButton *macAdd, *macRemove; + KPushButton *macClear; + QListBox *macBox; + QPushButton *otherSSLExport, *otherSSLView, *otherSSLRemove, *otherSSLVerify; + QPushButton *yourSSLImport, *yourSSLPass, *yourSSLRemove, *yourSSLExport, + *yourSSLUnlock, *yourSSLVerify; + QRadioButton *yourSSLUseDefault, *yourSSLList, *yourSSLDont; + QLineEdit *macCert; + KSSLCertBox *oSubject, *oIssuer; + KSSLCertBox *ySubject, *yIssuer; + QGridLayout *oGrid; + + QVButtonGroup *policyGroup; + QVButtonGroup *cacheGroup; + QRadioButton *policyAccept, *policyReject, *policyPrompt; + QRadioButton *cacheUntil, *cachePerm; + QLabel *fromLabel, *untilLabel; + QLabel *validFrom, *validUntil; + QLabel *yValidFrom, *yValidUntil; + KURLLabel *untilDate; + + QVGroupBox *oInfo; + KURLRequester *oPath; + QPushButton *oTest; + QPtrList otherCertDelList; + QPtrList yourCertDelList; + QPtrList caDelList; + + /* Personal Cert Policies tab */ + KComboBox *defCertBox; + KComboBox *hostCertBox; + QVButtonGroup *defCertBG; + QHButtonGroup *hostCertBG; + QRadioButton *defSend, *defPrompt, *defDont; + QRadioButton *hostSend, *hostPrompt, *hostDont; + QListView *hostAuthList; + QPushButton *authAdd, *authRemove; + QLineEdit *authHost; + QPtrList authDelList; + QLabel *yHash, *pHash; + + /* CA stuff */ + KSSLCertBox *caSubject, *caIssuer; + QPushButton *caSSLImport, *caSSLRemove, *caSSLRestore; + QCheckBox *caSite, *caEmail, *caCode; + KSSLSigners *_signers; + QLabel *cHash; + + KConfig *config; + KSimpleConfig *policies, *pcerts, *authcfg; + KConfig *cacfg; + + bool ___lehack; // to hack around a lineedit problem +}; + +#endif diff --git a/kcontrol/crypto/kdatetimedlg.cpp b/kcontrol/crypto/kdatetimedlg.cpp new file mode 100644 index 000000000..26001afdd --- /dev/null +++ b/kcontrol/crypto/kdatetimedlg.cpp @@ -0,0 +1,118 @@ +/** + * kdatetimedlg.cpp + * + * Copyright (c) 2001 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "kdatetimedlg.h" +#include +#include +#include +#include +#include +#include +#include +#include + +KDateTimeDlg::KDateTimeDlg(QWidget *parent, const char *name) + : KDialog(parent, name, true) { +QGridLayout *grid = new QGridLayout(this, 9, 6, marginHint(), spacingHint()); + + setCaption(i18n("Date & Time Selector")); + + _date = new KDatePicker(this); + grid->addMultiCellWidget(_date, 0, 5, 0, 5); + + grid->addWidget(new QLabel(i18n("Hour:"), this), 7, 0); + _hours = new KIntNumInput(this); + _hours->setRange(0, 23, 1, false); + grid->addWidget(_hours, 7, 1); + + grid->addWidget(new QLabel(i18n("Minute:"), this), 7, 2); + _mins = new KIntNumInput(this); + _mins->setRange(0, 59, 1, false); + grid->addWidget(_mins, 7, 3); + + grid->addWidget(new QLabel(i18n("Second:"), this), 7, 4); + _secs = new KIntNumInput(this); + _secs->setRange(0, 59, 1, false); + grid->addWidget(_secs, 7, 5); + + _ok = new KPushButton(KStdGuiItem::ok(), this); + grid->addWidget(_ok, 8, 4); + connect(_ok, SIGNAL(clicked()), SLOT(accept())); + + _cancel = new KPushButton(KStdGuiItem::cancel(), this); + grid->addWidget(_cancel, 8, 5); + connect(_cancel, SIGNAL(clicked()), SLOT(reject())); + +} + + +KDateTimeDlg::~KDateTimeDlg() { + +} + + +QDate KDateTimeDlg::getDate() { + return _date->date(); +} + + +QTime KDateTimeDlg::getTime() { +QTime rc(_hours->value(), _mins->value(), _secs->value()); +return rc; +} + + +QDateTime KDateTimeDlg::getDateTime() { +QDateTime qdt; +QTime qtime(_hours->value(), _mins->value(), _secs->value()); + + qdt.setDate(_date->date()); + qdt.setTime(qtime); + +return qdt; +} + + +void KDateTimeDlg::setDate(const QDate& qdate) { + _date->setDate(qdate); +} + + +void KDateTimeDlg::setTime(const QTime& qtime) { + _hours->setValue(qtime.hour()); + _mins->setValue(qtime.minute()); + _secs->setValue(qtime.second()); +} + + +void KDateTimeDlg::setDateTime(const QDateTime& qdatetime) { + _date->setDate(qdatetime.date()); + _hours->setValue(qdatetime.time().hour()); + _mins->setValue(qdatetime.time().minute()); + _secs->setValue(qdatetime.time().second()); +} + + +#include "kdatetimedlg.moc" + diff --git a/kcontrol/crypto/kdatetimedlg.h b/kcontrol/crypto/kdatetimedlg.h new file mode 100644 index 000000000..3f25cad2b --- /dev/null +++ b/kcontrol/crypto/kdatetimedlg.h @@ -0,0 +1,60 @@ +/** + * kdatetimedlg.h + * + * Copyright (c) 2001 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _KDATETIMEDLG_H +#define _KDATETIMEDLG_H + +#include + +class KDatePicker; +class KIntNumInput; +class KPushButton; +class QDate; +class QTime; +class QDateTime; + +class KDateTimeDlgPrivate; + +class KDateTimeDlg : public KDialog +{ + Q_OBJECT +public: + KDateTimeDlg(QWidget *parent = 0L, const char *name = 0L); + virtual ~KDateTimeDlg(); + + virtual QTime getTime(); + virtual QDate getDate(); + virtual QDateTime getDateTime(); + + virtual void setDate(const QDate& qdate); + virtual void setTime(const QTime& qtime); + virtual void setDateTime(const QDateTime& qdatetime); + +protected slots: + +private: + KPushButton *_ok, *_cancel; + KDatePicker *_date; + KIntNumInput *_hours, *_mins, *_secs; + + KDateTimeDlgPrivate *d; +}; + +#endif diff --git a/kcontrol/css/Makefile.am b/kcontrol/css/Makefile.am new file mode 100644 index 000000000..9f55b5a75 --- /dev/null +++ b/kcontrol/css/Makefile.am @@ -0,0 +1,16 @@ +AM_CPPFLAGS = $(all_includes) + +template_DATA = template.css +templatedir = $(kde_datadir)/kcmcss + +kde_module_LTLIBRARIES = kcm_css.la +kcm_css_la_SOURCES = template.cpp cssconfig.ui csscustom.ui kcmcss.cpp preview.ui +kcm_css_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_css_la_LIBADD = -lkdeui $(LIB_KIO) + +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmcss.pot + +xdg_apps_DATA = kcmcss.desktop diff --git a/kcontrol/css/cssconfig.ui b/kcontrol/css/cssconfig.ui new file mode 100644 index 000000000..c3d064b48 --- /dev/null +++ b/kcontrol/css/cssconfig.ui @@ -0,0 +1,242 @@ + +CSSConfigDialog + + + CSSConfigDialog + + + + 0 + 0 + 487 + 195 + + + + + + + + <b>Stylesheets</b><p>See http://www.w3.org/Style/CSS for further information on cascading style sheets.</p> + + + + unnamed + + + 0 + + + 0 + + + + ButtonGroup1 + + + + 3 + 5 + 0 + 0 + + + + Stylesheets + + + true + + + <b>Stylesheets</b><p>Use this groupbox to determine how Konqueror will render style sheets.</p> + + + + unnamed + + + 11 + + + 6 + + + + useDefault + + + Us&e default stylesheet + + + true + + + <b>Use default stylesheet</b><p>Select this option to use the default stylesheet.</p> + + + + + useUser + + + Use &user-defined stylesheet + + + <b>Use user-defined stylesheet</b><p>If this box is checked, Konqueror will try to load a user-defined style sheet as specified in the location below. The style sheet allows you to completely override the way web pages are rendered in your browser. The file specified should contain a valid style sheet (see http://www.w3.org/Style/CSS for further information on cascading style sheets).</p> + + + + + layout3 + + + + unnamed + + + + spacer9_2 + + + Horizontal + + + Fixed + + + + 16 + 20 + + + + + + urlRequester + + + false + + + + + + + useAccess + + + + 3 + 0 + 0 + 0 + + + + U&se accessibility stylesheet + + + <b>Use accessibility stylesheet</b><p>Selecting this option will allow you to define a default font, font size, and font color with a few simple clicks of the mouse. Simply wander over to the Customize... dialog and pick out your desired options.</p> + + + + + layout2 + + + + unnamed + + + + spacer9 + + + Horizontal + + + Fixed + + + + 16 + 20 + + + + + + customize + + + false + + + Custom&ize... + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 451 + 20 + + + + + + + + + + spacer11 + + + Vertical + + + Expanding + + + + 20 + 50 + + + + + + + + useAccess + toggled(bool) + customize + setEnabled(bool) + + + useUser + toggled(bool) + urlRequester + setEnabled(bool) + + + + kdialog.h + + + + + kurlrequester.h + klineedit.h + kpushbutton.h + + diff --git a/kcontrol/css/csscustom.ui b/kcontrol/css/csscustom.ui new file mode 100644 index 000000000..b19e08baf --- /dev/null +++ b/kcontrol/css/csscustom.ui @@ -0,0 +1,554 @@ + +CSSCustomDialog + + + CSSCustomDialog + + + + 0 + 0 + 584 + 456 + + + + <b>Stylesheets</b><p>See http://www.w3.org/Style/CSS for further information on cascading style sheets.</p> + + + + unnamed + + + + GroupBox3 + + + + 5 + 3 + 0 + 0 + + + + Font Size + + + + unnamed + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 12 + + + + + 14 + + + + + 16 + + + + + 20 + + + + + 24 + + + + + 32 + + + + + 48 + + + + + 64 + + + + basefontsize + + + + 3 + 1 + 0 + 0 + + + + true + + + + + txtFontsize + + + Base font si&ze: + + + basefontsize + + + + + dontScale + + + + 3 + 0 + 0 + 0 + + + + &Use same size for all elements + + + <b>Use same size for all elements</b><p>Select this option to override custom font sizes in favor of the base font size. All fonts will be displayed in the same size.</p> + + + + + + + GroupBox3_2 + + + Images + + + <b>Images</b><p> + + + + unnamed + + + + hideImages + + + &Suppress images + + + <b>Suppress images</b><p>Selecting this will prevent Konqueror from loading images.</p> + + + + + hideBackground + + + Suppress background images + + + true + + + <b>Suppress background images</b><p>Selecting this option will prevent Konqueror from loading background images.</p> + + + + + + + GroupBox7 + + + Font Family + + + <b>Font family</b><p>A font family is a group of fonts that resemble one another, with family members that are e.g. bold, italic, or any number of the above.</p> + + + + unnamed + + + + txtBaseFontFamily + + + Base fa&mily: + + + fontFamily + + + + + fontFamily + + + + 3 + 0 + 0 + 0 + + + + <p>This is the currently selected font family</p> + + + + + Spacer7 + + + Horizontal + + + Expanding + + + + 0 + 20 + + + + + + sameFamily + + + Use same family for all text + + + <b>Use same family for all text</b><p>Select this option to override custom fonts everywhere in favor of the base font.</p> + + + + + + + Spacer5_2 + + + Vertical + + + Expanding + + + + 20 + 0 + + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + preview + + + &Preview + + + <b>Preview</b><p>Click on this button to see what your selections look like in action.</p> + + + + + Spacer1_4 + + + Horizontal + + + Expanding + + + + 0 + 20 + + + + + + + + ButtonGroup2 + + + Colors + + + false + + + true + + + + unnamed + + + + blackOnWhite + + + &Black on white + + + true + + + <b>Black on White</b><p>This is what you normally see.</p> + + + + + whiteOnBlack + + + &White on black + + + <b>White on Black</b><p>This is your classic inverse color scheme.</p> + + + + + customColor + + + Cus&tom + + + <b>Custom</b><p>Select this option to define a custom color for the default font.</p> + + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + foregroundColor + + + + + + <b>Foreground color</b><p>The foreground color is the color that the text is drawn in.</p> + + + + + Spacer9 + + + Horizontal + + + Expanding + + + + 0 + 20 + + + + + + Spacer1 + + + Horizontal + + + Fixed + + + + 21 + 20 + + + + + + Spacer1_2 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + Spacer8 + + + Horizontal + + + Expanding + + + + 0 + 20 + + + + + + txtForeground + + + &Foreground: + + + foregroundColor + + + <b>Foreground color</b><p>The foreground color is the color that the text is drawn in.</p> + + + + + backgroundColor + + + + + + <b>Background</b><p>Behind this door lays the ability to choose a custom default background.</p> + + + + + txtBackground + + + Bac&kground: + + + backgroundColor + + + <b>Background</b><p>This background color is the one displayed behind the text by default. A background image will override this.</p> + + + + + + + sameColor + + + Use same color for all text + + + <b>Use same color for all text</b><p>Select this option to apply your chosen color to the default font as well as any custom fonts as specified in a stylesheet.</p> + + + + + + + + + + fontFamily + sameFamily + basefontsize + dontScale + blackOnWhite + backgroundColor + foregroundColor + sameColor + hideImages + hideBackground + preview + + + kcolorbutton.h + kdialog.h + + + + + kcolorbutton.h + kcolorbutton.h + + diff --git a/kcontrol/css/kcmcss.cpp b/kcontrol/css/kcmcss.cpp new file mode 100644 index 000000000..bd72a1375 --- /dev/null +++ b/kcontrol/css/kcmcss.cpp @@ -0,0 +1,385 @@ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cssconfig.h" +#include "csscustom.h" +#include "template.h" +#include "preview.h" + +#include "kcmcss.h" + +typedef KGenericFactory CSSFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_css, CSSFactory("kcmcss") ) + +CSSConfig::CSSConfig(QWidget *parent, const char *name, const QStringList &) + : KCModule(CSSFactory::instance(), parent, name) +{ + customDialogBase = new KDialogBase(this, "customCSSDialog", true, QString::null, + KDialogBase::Close, KDialogBase::Close, true ); + customDialog = new CSSCustomDialog(customDialogBase); + customDialogBase->setMainWidget(customDialog); + configDialog = new CSSConfigDialog(this); + + setQuickHelp( i18n("

Konqueror Stylesheets

This module allows you to apply your own color" + " and font settings to Konqueror by using" + " stylesheets (CSS). You can either specify" + " options or apply your own self-written" + " stylesheet by pointing to its location.
" + " Note that these settings will always have" + " precedence before all other settings made" + " by the site author. This can be useful to" + " visually impaired people or for web pages" + " that are unreadable due to bad design.")); + + + QStringList fonts; + KFontChooser::getFontList(fonts, 0); + customDialog->fontFamily->insertStringList(fonts); + + connect(configDialog->useDefault, SIGNAL(clicked()), + SLOT(changed())); + connect(configDialog->useAccess, SIGNAL(clicked()), + SLOT(changed())); + connect(configDialog->useUser, SIGNAL(clicked()), + SLOT(changed())); + connect(configDialog->urlRequester, SIGNAL(textChanged(const QString&)), + SLOT(changed())); + connect(configDialog->customize, SIGNAL(clicked()), + SLOT(slotCustomize())); + connect(customDialog->basefontsize, SIGNAL(highlighted(int)), + SLOT(changed())); + connect(customDialog->basefontsize, SIGNAL(textChanged(const QString&)), + SLOT(changed())); + connect(customDialog->dontScale, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->blackOnWhite, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->whiteOnBlack, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->customColor, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->foregroundColor, SIGNAL(changed(const QColor &)), + SLOT(changed())); + connect(customDialog->backgroundColor, SIGNAL(changed(const QColor &)), + SLOT(changed())); + connect(customDialog->fontFamily, SIGNAL(highlighted(int)), + SLOT(changed())); + connect(customDialog->fontFamily, SIGNAL(textChanged(const QString&)), + SLOT(changed())); + connect(customDialog->sameFamily, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->preview, SIGNAL(clicked()), + SLOT(slotPreview())); + connect(customDialog->sameColor, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->hideImages, SIGNAL(clicked()), + SLOT(changed())); + connect(customDialog->hideBackground, SIGNAL(clicked()), + SLOT(changed())); + + QVBoxLayout *vbox = new QVBoxLayout(this, 0, 0); + vbox->addWidget(configDialog); + + load(); +} + +void CSSConfig::load() +{ + load( false ); +} + +void CSSConfig::load( bool useDefaults ) +{ + KConfig *c = new KConfig("kcmcssrc", false, false); + c->setReadDefaults( useDefaults ); + + c->setGroup("Stylesheet"); + QString u = c->readEntry("Use", "default"); + configDialog->useDefault->setChecked(u == "default"); + configDialog->useUser->setChecked(u == "user"); + configDialog->useAccess->setChecked(u == "access"); + configDialog->urlRequester->setURL(c->readEntry("SheetName")); + + c->setGroup("Font"); + customDialog->basefontsize->setEditText(QString::number(c->readNumEntry("BaseSize", 12))); + customDialog->dontScale->setChecked(c->readBoolEntry("DontScale", false)); + + QString fname = c->readEntry("Family", "Arial"); + for (int i=0; i < customDialog->fontFamily->count(); ++i) + if (customDialog->fontFamily->text(i) == fname) + { + customDialog->fontFamily->setCurrentItem(i); + break; + } + + customDialog->sameFamily->setChecked(c->readBoolEntry("SameFamily", false)); + + c->setGroup("Colors"); + QString m = c->readEntry("Mode", "black-on-white"); + customDialog->blackOnWhite->setChecked(m == "black-on-white"); + customDialog->whiteOnBlack->setChecked(m == "white-on-black"); + customDialog->customColor->setChecked(m == "custom"); + customDialog->backgroundColor->setColor(c->readColorEntry("BackColor", &Qt::white)); + customDialog->foregroundColor->setColor(c->readColorEntry("ForeColor", &Qt::black)); + customDialog->sameColor->setChecked(c->readBoolEntry("SameColor", false)); + + // Images + c->setGroup("Images"); + customDialog->hideImages->setChecked(c->readBoolEntry("Hide", false)); + customDialog->hideBackground->setChecked(c->readBoolEntry("HideBackground", true)); + + delete c; + + emit changed( useDefaults ); +} + + +void CSSConfig::save() +{ + // write to config file + KConfig *c = new KConfig("kcmcssrc", false, false); + + c->setGroup("Stylesheet"); + if (configDialog->useDefault->isChecked()) + c->writeEntry("Use", "default"); + if (configDialog->useUser->isChecked()) + c->writeEntry("Use", "user"); + if (configDialog->useAccess->isChecked()) + c->writeEntry("Use", "access"); + c->writeEntry("SheetName", configDialog->urlRequester->url()); + + c->setGroup("Font"); + c->writeEntry("BaseSize", customDialog->basefontsize->currentText()); + c->writeEntry("DontScale", customDialog->dontScale->isChecked()); + c->writeEntry("SameFamily", customDialog->sameFamily->isChecked()); + c->writeEntry("Family", customDialog->fontFamily->currentText()); + + c->setGroup("Colors"); + if (customDialog->blackOnWhite->isChecked()) + c->writeEntry("Mode", "black-on-white"); + if (customDialog->whiteOnBlack->isChecked()) + c->writeEntry("Mode", "white-on-black"); + if (customDialog->customColor->isChecked()) + c->writeEntry("Mode", "custom"); + c->writeEntry("BackColor", customDialog->backgroundColor->color()); + c->writeEntry("ForeColor", customDialog->foregroundColor->color()); + c->writeEntry("SameColor", customDialog->sameColor->isChecked()); + + c->setGroup("Images"); + c->writeEntry("Hide", customDialog->hideImages->isChecked()); + c->writeEntry("HideBackground", customDialog->hideBackground->isChecked()); + + c->sync(); + delete c; + + // generate CSS template + QString templ = locate("data", "kcmcss/template.css"); + QString dest; + if (!templ.isEmpty()) + { + CSSTemplate css(templ); + + dest = kapp->dirs()->saveLocation("data", "kcmcss"); + dest += "/override.css"; + + css.expand(dest, cssDict()); + } + + // make konqueror use the right stylesheet + c = new KConfig("konquerorrc", false, false); + + c->setGroup("HTML Settings"); + c->writeEntry("UserStyleSheetEnabled", !configDialog->useDefault->isChecked()); + + if (configDialog->useUser->isChecked()) + c->writeEntry("UserStyleSheet", configDialog->urlRequester->url()); + if (configDialog->useAccess->isChecked()) + c->writeEntry("UserStyleSheet", dest); + + c->sync(); + delete c; + emit changed(false); +} + + +void CSSConfig::defaults() +{ + load( true ); +} + + +QString px(int i, double scale) +{ + QString px; + px.setNum(static_cast(i * scale)); + px += "px"; + return px; +} + + +QMap CSSConfig::cssDict() +{ + QMap dict; + + // Fontsizes ------------------------------------------------------ + + int bfs = customDialog->basefontsize->currentText().toInt(); + dict.insert("fontsize-base", px(bfs, 1.0)); + + if (customDialog->dontScale->isChecked()) + { + dict.insert("fontsize-small-1", px(bfs, 1.0)); + dict.insert("fontsize-large-1", px(bfs, 1.0)); + dict.insert("fontsize-large-2", px(bfs, 1.0)); + dict.insert("fontsize-large-3", px(bfs, 1.0)); + dict.insert("fontsize-large-4", px(bfs, 1.0)); + dict.insert("fontsize-large-5", px(bfs, 1.0)); + } + else + { + // TODO: use something harmonic here + dict.insert("fontsize-small-1", px(bfs, 0.8)); + dict.insert("fontsize-large-1", px(bfs, 1.2)); + dict.insert("fontsize-large-2", px(bfs, 1.4)); + dict.insert("fontsize-large-3", px(bfs, 1.5)); + dict.insert("fontsize-large-4", px(bfs, 1.6)); + dict.insert("fontsize-large-5", px(bfs, 1.8)); + } + + // Colors -------------------------------------------------------- + + if (customDialog->blackOnWhite->isChecked()) + { + dict.insert("background-color", "White"); + dict.insert("foreground-color", "Black"); + } + else if (customDialog->whiteOnBlack->isChecked()) + { + dict.insert("background-color", "Black"); + dict.insert("foreground-color", "White"); + } + else + { + dict.insert("background-color", customDialog->backgroundColor->color().name()); + dict.insert("foreground-color", customDialog->foregroundColor->color().name()); + } + + if (customDialog->sameColor->isChecked()) + dict.insert("force-color", "! important"); + else + dict.insert("force-color", ""); + + // Fonts ------------------------------------------------------------- + dict.insert("font-family", customDialog->fontFamily->currentText()); + if (customDialog->sameFamily->isChecked()) + dict.insert("force-font", "! important"); + else + dict.insert("force-font", ""); + + // Images + + if (customDialog->hideImages->isChecked()) + dict.insert("display-images", "background-image : none ! important"); + else + dict.insert("display-images", ""); + if (customDialog->hideBackground->isChecked()) + dict.insert("display-background", "background-image : none ! important"); + else + dict.insert("display-background", ""); + + return dict; +} + + +void CSSConfig::slotCustomize() +{ + customDialogBase->exec(); +} + + +void CSSConfig::slotPreview() +{ + + QStyleSheetItem *h1 = new QStyleSheetItem(QStyleSheet::defaultSheet(), "h1"); + QStyleSheetItem *h2 = new QStyleSheetItem(QStyleSheet::defaultSheet(), "h2"); + QStyleSheetItem *h3 = new QStyleSheetItem(QStyleSheet::defaultSheet(), "h3"); + QStyleSheetItem *text = new QStyleSheetItem(QStyleSheet::defaultSheet(), "p"); + + // Fontsize + + int bfs = customDialog->basefontsize->currentText().toInt(); + text->setFontSize(bfs); + if (customDialog->dontScale->isChecked()) + { + h1->setFontSize(bfs); + h2->setFontSize(bfs); + h3->setFontSize(bfs); + } + else + { + h1->setFontSize(static_cast(bfs * 1.8)); + h2->setFontSize(static_cast(bfs * 1.6)); + h3->setFontSize(static_cast(bfs * 1.4)); + } + + // Colors + + QColor back, fore; + + if (customDialog->blackOnWhite->isChecked()) + { + back = Qt::white; + fore = Qt::black; + } + else if (customDialog->whiteOnBlack->isChecked()) + { + back = Qt::black; + fore = Qt::white; + } + else + { + back = customDialog->backgroundColor->color(); + fore = customDialog->foregroundColor->color(); + } + + h1->setColor(fore); + h2->setColor(fore); + h3->setColor(fore); + text->setColor(fore); + + // Fonts + + h1->setFontFamily(customDialog->fontFamily->currentText()); + h2->setFontFamily(customDialog->fontFamily->currentText()); + h3->setFontFamily(customDialog->fontFamily->currentText()); + text->setFontFamily(customDialog->fontFamily->currentText()); + + // Show the preview + PreviewDialog *dlg = new PreviewDialog(this, 0, true); + dlg->preview->setPaper(back); + dlg->preview->viewport()->setFont(QFont(KGlobalSettings::generalFont().family(), bfs)); + + dlg->exec(); + + delete dlg; +} + + + + +#include "kcmcss.moc" + diff --git a/kcontrol/css/kcmcss.desktop b/kcontrol/css/kcmcss.desktop new file mode 100644 index 000000000..d5a1116f6 --- /dev/null +++ b/kcontrol/css/kcmcss.desktop @@ -0,0 +1,233 @@ +[Desktop Entry] +Icon=stylesheet +Type=Application +Exec=kcmshell kcmcss +DocPath=kcontrol/kcmcss/index.html + + +X-KDE-Library=css +X-KDE-FactoryName=kcmcss +X-KDE-ParentApp=kcontrol + +Name=Stylesheets +Name[af]=Stylblaaie +Name[az]=Stylesheet +Name[be]=Табліцы стыляў +Name[bg]=CSS стилове +Name[bn]=স্টাইলশিট +Name[br]=Folennoù c'hiz +Name[ca]=Fulls d'estil +Name[cs]=Soubory se styly +Name[csb]=Bôdżi sztélów +Name[cy]=Dalennau arddull +Name[da]=Stilark +Name[de]=Stilvorlagen +Name[el]=Φύλλα στυλ +Name[eo]=Stildifinoj +Name[es]=Hojas de estilo +Name[et]=Laaditabelid +Name[eu]=Estilo orriak +Name[fa]=صفحه سبکها +Name[fi]=Tyylisivut +Name[fo]=Sniðørk +Name[fr]=Feuilles de style +Name[fy]=Stylblêden +Name[ga]=Stílbhileoga +Name[gl]=Follas de Estilo +Name[he]=גיליונות סגנון +Name[hi]=स्टाइलशीट +Name[hr]=Stilska oblikovanja +Name[hu]=Stíluslapok +Name[is]=Stílblöð +Name[it]=Fogli di stile +Name[ja]=スタイルシート +Name[kk]=CSS стильдері +Name[km]=សន្លឹក​រចនាប័ទ្ម +Name[ko]=스타일시트 +Name[lo]=ສະຕາຍຊິດ +Name[lt]=Stiliaus aprašymai +Name[mk]=Дизајни на страница +Name[mn]=Хэлбэрт хуудас +Name[ms]=Lemabaran Gaya +Name[nb]=Stilsett +Name[nds]=Stilvörlagen +Name[ne]= शैलीपाना +Name[nl]=Stijlbladen +Name[nn]=Stilsett +Name[nso]=Matlakala a mokgwa +Name[pl]=Arkusze stylów +Name[pt]=Folhas de estilo +Name[pt_BR]=Folhas de estilo +Name[ro]=Foi de stil +Name[ru]=Стили CSS +Name[rw]=Impapuromisusire +Name[se]=Stiilaárkkat +Name[sk]=Štýly +Name[sl]=Slogovne predloge +Name[sr]=Описи стилова +Name[sr@Latn]=Opisi stilova +Name[ss]=Emashidi yetitayhela +Name[sv]=Stilmallar +Name[ta]=அமைக்கும் பாணி +Name[tg]=Намуди варақа +Name[th]=สไตล์ชีต +Name[tr]=Stil Kağıtları +Name[tt]=Bizütabaq +Name[uk]=Таблиці стилів +Name[uz]=Staylshitlar +Name[uz@cyrillic]=Стайлшитлар +Name[ven]=Siatari la Tshitaela +Name[vi]=Kiểu dáng mẫu +Name[wa]=Foyes di stîle +Name[xh]=Amakhasi ohlobo oluthile +Name[zh_CN]=样式表 +Name[zh_TW]=樣式表單 +Name[zu]=Amakhasi esitayela +Comment=Configure the stylesheets used to render web pages +Comment[af]=Konfigureer die stylblaaie gebruik word na interpreteer web bladsye +Comment[az]=Veb səhifələrində işlədilən tərz laylarını quraşdır +Comment[be]=Настаўленне табліц стыляў для малявання старонак Сеціва +Comment[bg]=Настройване на използваните CSS стилове в уеб страниците +Comment[bn]=ওয়েব পেজ দেখাতে ব্যবহৃত বিভিন্ন স্টাইলশিট কনফিগার করুন +Comment[br]=Kefluniañ ar folennoù c'hiz evit ar pajennoù gwiad +Comment[bs]=Podesite stilove koji se koriste za prikazivanje web stranica +Comment[ca]=Aquí podeu configurar els fulls d'estil emprats per a renderitzar les pàgines web +Comment[cs]=Zde je možné nastavit styly používané pro zobrazování HTML +Comment[csb]=Kònfigùracëjô bògów sztélów do wëskrzënianiô internetowich starnów +Comment[cy]=Ffurfweddu'r dalennau arddull sy'n trosi tudalennau gwe. +Comment[da]=Indstil stilark brugt til at vise netsider +Comment[de]=Stilvorlagen für die Anzeige von HTML-Seiten einrichten +Comment[el]=Ρυθμίστε τα φύλλα στυλ που χρησιμοποιούνται για την εμφάνιση των ιστοσελίδων +Comment[eo]=Agordo de la stildifinoj por HTML-prezento +Comment[es]=Configuración de las hojas de estilo usadas para mostrar páginas web +Comment[et]=Laaditabelite seadistamine veebilehtede renderdamiseks +Comment[eu]=Kondiguratu HTML errenderizatzeko erabilitako estilo orriak +Comment[fa]=پیکربندی صفحه سبکهای مورد استفادۀ پرداخت صفحات وب +Comment[fi]=WWW-sivuilla käytettävien tyylisivujen asetukset +Comment[fr]=Configuration des feuilles de style utilisées pour l'affichage HTML +Comment[fy]=Hjir kinne jo de stylblêden ynstelle dy brûkt wurde foar de werjefte fan websiden +Comment[ga]=Cumraigh na stílbhileoga a úsáidtear chun leathanaigh ghréasáin a rindreáil +Comment[gl]=Configurar as follas de estilo empregadas para visualizar páxinas +Comment[he]=שינוי הגדרות גיליונות הסגנון המשמשים להצגת דפי אינטרנט +Comment[hi]=वेब पृष्ठ प्रस्तुत करने के लिए उपयोग में आने वाले स्टाइलशीट कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje stilskih oblikovanja koja se upotrebljavaju za prikaz web sadržaja +Comment[hu]=A weboldalak megjelenítéséhez használt stíluslapok beállításai +Comment[is]=Stilla stílblöð sem vinna á HTML skrám +Comment[it]=Configura i fogli di stile da usare per visualizzare le pagine web +Comment[ja]=ウェブページのレンダリングに使用するスタイルシートを設定 +Comment[ka]=CSS კონფიგურაცია ვებ გვერდების ასახვისთვის +Comment[kk]=Веб-парақтарды көрсеткенде қолданатын CSS-стильдерді баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​សន្លឹក​រចនាប័ទ្ម ដែល​ប្រើ​ដើម្បី​បង្ហាញ​ទំព័រ​បណ្ដាញ +Comment[ko]=웹 페이지를 나타내는 스타일시트를 설정합니다 +Comment[lo]=ປັບແຕ່ງສະຕາຍຊິດໃນການສະແດງຜົນ HTML +Comment[lt]=Konfigūruoti stiliaus aprašymus naudojamus tinklalapių atvaizdavimui +Comment[lv]=Konfigurēt stilus, ko izmantos tīmekļa lapu attainošanai +Comment[mk]=Конфигурирајте ги страниците со дизајн\nшто се користат за прикажување веб-страници +Comment[mn]=Хэлбэрт хуудас хэрэглэдэг HTML-хуудсуудын тохируулга +Comment[ms]=Konfigur lembaran gaya yang digunakan untuk merealisasikan laman web +Comment[mt]=Ikkonfigura l-istylesheets li jintużaw biex juru paġni fuq il-web. +Comment[nb]=Her kan du sette opp stilsett for visning av nettsider +Comment[nds]=Stell de Stilvörlaag in, de för't Wiesen vun Nettsieden bruukt warrt +Comment[ne]=रेन्डर वेब पृष्ठहरू प्रयोग गर्ने शैलीपाना कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de stijlbladen instellen die gebruikt worden voor de weergave van webpagina's +Comment[nn]=Oppsett av stilsett for vising av nettsider +Comment[nso]=Beakanya matlakala a mokgwa ao a somisitswego go neela matlakala a web +Comment[pa]= ਵੈਬ ਸਫਿਆਂ ਨੂੰ ਪੇਸ਼ ਕਰਨ ਲਈ ਸਾਰਣੀਕਾਰ ਸ਼ੀਟਾਂ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja arkuszy stylów do wyświetlania stron internetowych +Comment[pt]=Configuração das folhas de estilo, usadas para mostrar as páginas Web +Comment[pt_BR]=Configura as folhas de estilo utilizadas para renderizar páginas da web +Comment[ro]=Configurează foile de stil utilizate la randarea paginilor de web +Comment[ru]=Настройка стилей CSS, используемых при показа веб-страниц +Comment[rw]=Kuboneza impapuromisusire zikoreshwa mu gutanga amapaji rubugamakuru +Comment[se]=Heivet stiilaárkkaid mainna čájeha HTML-siidduid +Comment[sk]=Nastavenie štýlov používaných pre zobrazovanie HTML +Comment[sl]=Nastavite slogovne predloge za upodabljanje HTML +Comment[sr]=Подешавање стилова који се користе за приказ веб страница +Comment[sr@Latn]=Podešavanje stilova koji se koriste za prikaz veb stranica +Comment[sv]=Anpassa stilmallarna som används för att visa webbsidor +Comment[ta]=வலை பக்கங்கள் நடைமுறைக்கு பயன்படுத்தப்பட்ட பாணிபட்டியல்களை வடிவமை +Comment[tg]=Танзимоти услуби CSS, дар вақти равшан созии варақаҳои вэб истифода мешаванд. +Comment[th]=ปรับแต่งสไตล์ชีตที่ใช้ในการแสดงผล HTML +Comment[tr]=Stylesheet ayarlarını yapın +Comment[tt]=Web-bitlär eşkärtkändä qullanıla torğan tışlaw caylawları +Comment[uk]=Налаштування таблиць стилів для відображення сторінок Тенет +Comment[uz]=Veb-sahifalarni koʻrsatishda ishlatiladigan CSS uslublarini moslash +Comment[uz@cyrillic]=Веб-саҳифаларни кўрсатишда ишлатиладиган CSS услубларини мослаш +Comment[ven]=Dzudzanyani tshitaela tsha siatari tshino shumiswa u nekedza masiatari a webu +Comment[vi]=Cấu hình kiểu dáng mẫu được dùng để hỗ trợ trang mạng +Comment[wa]=Apontyî les foyes di stîle eployeyes ezès pådjes waibe +Comment[xh]=Qwalasela uhlobo lwamakhasi asebenziswa ukuchaza amaphepha e web +Comment[zh_CN]=配置用来渲染网页的样式表 +Comment[zh_TW]=設定用來顯示網頁的樣式表單 +Comment[zu]=Hlanganisela amakhasi esitayela asetshenziswa ukunikeza amakhasi e-web + +Keywords=CSS,HTML,style,stylesheet,accessibility +Keywords[az]=CSS,HTML,style,tərz,stylesheet,yetişmə,yetişmə qabiliyyəti +Keywords[be]=Стыль,табліца стыляў,даступнасць,CSS,HTML,style,stylesheet,accessibility +Keywords[bg]=стил, стилове, страници, достъпност, CSS, HTML, style, stylesheet, accessibility +Keywords[br]=CSS,HTML,giz,folenn c'hiz,haezadusted +Keywords[ca]=CSS,HTML,estil,full d'estil,accessibilitat +Keywords[cs]=CSS,HTML,styl,style,stylesheet,zpřístupnění +Keywords[csb]=CSS,HTML,sztél,bòga sztélu,przistãpnosc +Keywords[cy]=CSS,HTML,ardull,dalen arddull,hygyrchedd +Keywords[da]=CSS,HTML,stil,stilark,tilgængelighed +Keywords[de]=CSS,HTML,Stylesheet,Stilvorlagen,Zugangshilfen +Keywords[el]=CSS,HTML,στυλ,φύλλο στυλ,προσιτότητα +Keywords[eo]=CSS,HTML,stilo,stildifino,alirebleco +Keywords[es]=CSS,HTML,estilo,hoja de estilo,accesibilidad +Keywords[et]=CSS,HTML,stiil,laaditabel +Keywords[eu]=CSS,HTML,estiloa,estilo orria,erabilerraztasuna +Keywords[fa]=CSS، زنگام، سبک، صفحه سبک، دستیابی‌پذیری +Keywords[fi]=CSS,HTML,tyyli,tyylimäärittely,esteettömyys +Keywords[fo]=CSS,HTML,snið,sniðørk,sniðark +Keywords[fr]=CSS,HTML,style,feuille de style,accessibilité +Keywords[fy]=CSS,HTML,styl,stylblêd,tagonklikens,stylblêden +Keywords[ga]=CSS,HTML,stíl,stílbhileog,inrochtaineacht +Keywords[gl]=CSS,HTML,estilo,follas de estilo,acesibilidade +Keywords[he]=CSS,HTML,סגנון,גיליון סגנון,נגישות,style,stylesheet,accessibility +Keywords[hi]=सीएसएस,एचटीएमएल,स्टाइल,स्टाइलशीट,पहुँच +Keywords[hr]=CSS,HTML,style,stylesheet,accessibility,stil,stilsko oblikovanje,pristupačnost +Keywords[hu]=CSS,HTML,stílus,stíluslap,elérhetőség +Keywords[id]=Gaya,style,theme,themes,tampilan,aksesbilitas +Keywords[is]=CSS,HTML,stíll,stílblað,aðgengi,aðgengilegheit,aðgangur +Keywords[it]=CSS,HTML,stile,fogli di stile,stylesheet,accessibilità +Keywords[ja]=CSS,HTML,スタイル,スタイルシート,アクセシビリティ +Keywords[km]=CSS,HTML,រចនាប័ទ្ម,សន្លឹក​រចនាប័ទ្ម,ភាព​អាច​ចូល​ដំណើរការ​បាន +Keywords[ko]=CSS,HTML,스타일,스타일시트,접근성 +Keywords[lt]=CSS,HTML,style,stylesheet,accessibility,stilius,stiliaus aprašymas +Keywords[lv]=CSS,HTML,stils,stilusaraksts,pieejamība +Keywords[mk]=CSS,HTML,style,stylesheet,accessibility,стил,страница,дизајн,пристапност +Keywords[mn]=CSS,HTML,Stylesheet,Хэлбэрт хуудас,Хэрэглэх тохь +Keywords[mt]=CSS,HTML,style,stylesheet,accessibility,aċċessibbiltà +Keywords[nb]=CSS,HTML,stil,stilsett,tilgjengelighet +Keywords[nds]=CSS,HTML,Stil,Stilvörlaag,Behinnerte +Keywords[ne]=CSS, HTML, शैली, शैलीपाना, पहुँचता +Keywords[nl]=CSS,HTML,stijl,stylesheet,toegankelijkheid,stijlbladen +Keywords[nn]=CSS,HTML,stilsett,tilgjenge,brukarstilsett +Keywords[nso]=CSS,HTML,mokgwa,letlakala la mokgwa,tsenelo +Keywords[pa]=CSS,HTML,style,stylesheet,accessibility, ਸ਼ੈਲੀ +Keywords[pl]=CSS,HTML,styl,arkusz stylu,dostępność +Keywords[pt]=CSS,HTML,estilo,stylesheet,acessibilidade +Keywords[pt_BR]=CSS,HTML,estilo,folha de estilo,acessibilidade +Keywords[ro]=CSS,HTML,stil,foi de stil,accesibilitate +Keywords[rw]=CSS,HTML,imisusire,urupapuromisusire,ukugerwaho +Keywords[se]=CSS,HTML,stiila,stiilaárka +Keywords[sk]=CSS,HTML,štýl,style,stylesheet,prístupnosť +Keywords[sl]=CSS,HTML,slog,slogovne predloge,dostopnost +Keywords[sr]=CSS,HTML,style,stylesheet,accessibility,стил,опис стила,приступачност +Keywords[sr@Latn]=CSS,HTML,style,stylesheet,accessibility,stil,opis stila,pristupačnost +Keywords[sv]=CSS,HTML,stil,stilmall,handikappstöd +Keywords[ta]=CSS,HTML,பாணிe,விரிப்பட்டியல்,அணுகல் +Keywords[tr]=CSS,HTML,style,stil,stylesheet,erişim,erişilebilirlik +Keywords[uk]=CSS,HTML,стиль,таблиця стилів,доступність +Keywords[uz]=CSS,HTML,uslub,stylesheet,qulayliklar +Keywords[uz@cyrillic]=CSS,HTML,услуб,stylesheet,қулайликлар +Keywords[ven]=CSS,HTML,tshitaela,siatari la tshitaela,u dzhenea +Keywords[vi]=CSS,HTML,kiểu dáng,kiểu dáng mẫu,hỗ trợ người tàn tật +Keywords[wa]=CSS,HTML,style,stylesheet,accessibility,stîle,foye di stîle,accessibilité +Keywords[xh]=CSS,HTML,uhlobo,ikhasi lohlobo oluthile,unikezelo +Keywords[zh_CN]=CSS,HTML,style,stylesheet,accessibility,风格,样式表,辅助功能 +Keywords[zh_TW]=CSS,HTML,style,stylesheet,accessibility,風格,風格表單,可用性 +Keywords[zu]=CSS,HTML,isitayela,ikhasi lesitayela,ukungena + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/css/kcmcss.h b/kcontrol/css/kcmcss.h new file mode 100644 index 000000000..decf5c3a3 --- /dev/null +++ b/kcontrol/css/kcmcss.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2000 Matthias Hoelzer-Kluepfel + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __KCMCSS_H__ +#define __KCMCSS_H__ + + +#include + +#include + + +class CSSConfigDialog; +class CSSCustomDialog; +class KDialogBase; + + +class CSSConfig : public KCModule +{ + Q_OBJECT + +public: + + CSSConfig(QWidget *parent = 0L, const char *name = 0L, const QStringList &list =QStringList() ); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + +public slots: + + void slotPreview(); + void slotCustomize(); + +private: + + QMap cssDict(); + + CSSConfigDialog *configDialog; + CSSCustomDialog *customDialog; + KDialogBase *customDialogBase; +}; + + +#endif diff --git a/kcontrol/css/preview.ui b/kcontrol/css/preview.ui new file mode 100644 index 000000000..438d40d37 --- /dev/null +++ b/kcontrol/css/preview.ui @@ -0,0 +1,95 @@ + +PreviewDialog + + + PreviewDialog + + + + 0 + 0 + 558 + 349 + + + + Preview + + + + unnamed + + + + Line1 + + + 5 + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + preview + + + <qt> + +<h1>Heading 1</h1><br/> +<h2>Heading 2</h2><br/> +<h3>Heading 3</h3><br/> + +<p>User defined stylesheets allow increased +accessibility for visually handicapped +people.</p> + +</qt> + + + + + PushButton2 + + + &OK + + + true + + + + + + + PushButton2 + clicked() + PreviewDialog + accept() + + + + kseparator.h + kdialog.h + + + + + kseparator.h + + diff --git a/kcontrol/css/template.cpp b/kcontrol/css/template.cpp new file mode 100644 index 000000000..94eba6053 --- /dev/null +++ b/kcontrol/css/template.cpp @@ -0,0 +1,45 @@ + + +#include + + +#include "template.h" + + +bool CSSTemplate::expand(QString destname, const QMap &dict) +{ + QFile inf(_filename); + if (!inf.open(IO_ReadOnly)) + return false; + QTextStream is(&inf); + + QFile outf(destname); + if (!outf.open(IO_WriteOnly)) + return false; + QTextStream os(&outf); + + QString line; + while (!is.eof()) + { + line = is.readLine(); + + int start = line.find('$'); + if (start >= 0) + { + int end = line.find('$', start+1); + if (end >= 0) + { + QString expr = line.mid(start+1, end-start-1); + QString res = dict[expr]; + + line.replace(start, end-start+1, res); + } + } + os << line << endl; + } + + inf.close(); + outf.close(); + + return true; +} diff --git a/kcontrol/css/template.css b/kcontrol/css/template.css new file mode 100644 index 000000000..dd2afaba9 --- /dev/null +++ b/kcontrol/css/template.css @@ -0,0 +1,77 @@ +/* + * Font sizes + */ + +* { + font-size : $fontsize-base$ ! important; +} + +SMALL, SUB, SUP { + font-size : $fontsize-small-1$ ! important; +} + +BIG { + font-size : $fontsize-large-1$ ! important; +} + +H1, H1 A { + font-size : $fontsize-large-5$ ! important; +} + +H2, H2 A { + font-size : $fontsize-large-4$ ! important; +} + +H3, H3 A { + font-size : $fontsize-large-3$ ! important; +} + +H4, H4 A { + font-size : $fontsize-large-2$ ! important; +} + +H5, H5 A { + font-size : $fontsize-large-1$ ! important; +} + + +/* + * Colors + */ + +* { + background : $background-color$ ! important; + color : $foreground-color$ + $force-color$; +} + +BODY { + color : $foreground-color$ ! important; +} + +TABLE, TD { + border-color : $foreground-color$; +} + + +/* + * Font family + */ + +* { + font-family : $font-family$ + $force-font$; +} + + +/* + * Images + */ + +IMG { + $display-images$; +} + +BODY { + $display-background$; +} diff --git a/kcontrol/css/template.h b/kcontrol/css/template.h new file mode 100644 index 000000000..2b701a238 --- /dev/null +++ b/kcontrol/css/template.h @@ -0,0 +1,21 @@ +#ifndef __TEMPLATE_H__ +#define __TEMPLATE_H__ + + +#include +#include + +class CSSTemplate +{ +public: + + CSSTemplate(QString fname) : _filename(fname) {}; + bool expand(QString destname, const QMap &dict); + +protected: + QString _filename; + +}; + + +#endif diff --git a/kcontrol/display/Makefile.am b/kcontrol/display/Makefile.am new file mode 100644 index 000000000..442639b38 --- /dev/null +++ b/kcontrol/display/Makefile.am @@ -0,0 +1,16 @@ +kde_module_LTLIBRARIES = kcm_display.la + +kcm_display_la_SOURCES = display.cpp + +kcm_display_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_display_la_LIBADD = $(LIB_KUTILS) +AM_CPPFLAGS = $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = display.h + +xdg_apps_DATA = display.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/display.pot diff --git a/kcontrol/display/display.cpp b/kcontrol/display/display.cpp new file mode 100644 index 000000000..1c514810c --- /dev/null +++ b/kcontrol/display/display.cpp @@ -0,0 +1,110 @@ +/* This file is part of the KDE project + Copyright (C) 2003-2004 Nadeem Hasan + + 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. +*/ + +#include +#include +#include + +#include +#include +#include + +#include "display.h" + +typedef KGenericFactory DisplayFactory; +K_EXPORT_COMPONENT_FACTORY ( kcm_display, DisplayFactory( "display" ) ) + +KCMDisplay::KCMDisplay( QWidget *parent, const char *name, const QStringList& ) + : KCModule( parent, name ) + , m_changed(false) +{ + m_tabs = new QTabWidget( this ); + + addTab( "randr", i18n( "Size && Orientation" ) ); + addTab( "nvidiadisplay", i18n( "Graphics Adaptor" ) ); + addTab( "nvidia3d", i18n( "3D Options" ) ); + addTab( "kgamma", i18n( "Monitor Gamma" ) ); + if ( QApplication::desktop()->isVirtualDesktop() ) + addTab( "xinerama", i18n( "Multiple Monitors" ) ); + addTab( "energy", i18n( "Power Control" ) ); + + QVBoxLayout *top = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + top->addWidget( m_tabs ); + + setButtons( Apply|Help ); + load(); +} + +void KCMDisplay::addTab( const QString &name, const QString &label ) +{ + QWidget *page = new QWidget( m_tabs, name.latin1() ); + QVBoxLayout *top = new QVBoxLayout( page, KDialog::marginHint() ); + + KCModule *kcm = KCModuleLoader::loadModule( name, page ); + + if ( kcm ) + { + top->addWidget( kcm ); + m_tabs->addTab( page, label ); + + connect( kcm, SIGNAL( changed(bool) ), SLOT( moduleChanged(bool) ) ); + m_modules.insert(kcm, false); + } + else + delete page; +} + +void KCMDisplay::load() +{ + for (QMap::ConstIterator it = m_modules.begin(); it != m_modules.end(); ++it) + it.key()->load(); +} + +void KCMDisplay::save() +{ + for (QMap::Iterator it = m_modules.begin(); it != m_modules.end(); ++it) + if (it.data()) + it.key()->save(); +} + +void KCMDisplay::moduleChanged( bool isChanged ) +{ + QMap::Iterator currentModule = m_modules.find(static_cast(const_cast(sender()))); + Q_ASSERT(currentModule != m_modules.end()); + if (currentModule.data() == isChanged) + return; + + currentModule.data() = isChanged; + + bool c = false; + + for (QMap::ConstIterator it = m_modules.begin(); it != m_modules.end(); ++it) { + if (it.data()) { + c = true; + break; + } + } + + if (m_changed != c) { + m_changed = c; + emit changed(c); + } +} + +#include "display.moc" diff --git a/kcontrol/display/display.desktop b/kcontrol/display/display.desktop new file mode 100644 index 000000000..8ed7bbdc5 --- /dev/null +++ b/kcontrol/display/display.desktop @@ -0,0 +1,154 @@ +[Desktop Entry] +Icon=kscreensaver +Type=Application +Exec=kcmshell display +DocPath=kcontrol/kcmdisplay/index.html + +X-KDE-Library=display +X-KDE-FactoryName=display +X-KDE-ParentApp=kcontrol +Name=Display +Name[af]=Skerm +Name[ar]=عرض +Name[az]=Displey +Name[be]=Манітор +Name[bg]=Монитор +Name[bn]=ডিসপ্লে +Name[br]=Diskwel +Name[bs]=Ekran +Name[ca]=Pantalla +Name[cs]=Obrazovka +Name[csb]=Ekran +Name[cy]= Arddangos +Name[da]=Skærm +Name[de]=Anzeige +Name[el]=Οθόνη +Name[eo]=Vidigilo +Name[es]=Pantalla +Name[et]=Monitor +Name[eu]=Pantaila +Name[fa]=نمایش +Name[fi]=Näyttö +Name[fr]=Affichage +Name[fy]=Byldskerm +Name[gl]=Pantalla +Name[he]=תצוגה +Name[hi]=रूप-रंग +Name[hr]=Zaslon +Name[hu]=Képernyő +Name[is]=Skjár +Name[ja]=ディスプレイ +Name[ka]=ჩვენება +Name[kk]=Дисплей +Name[km]=បង្ហាញ +Name[ko]=디스플레이 +Name[lt]=Ekranas +Name[lv]=Ekrāns +Name[mk]=Приказ +Name[mn]=Дэлгэц +Name[ms]=Paparan +Name[mt]=Skrin +Name[nb]=Skjerm +Name[nds]=Dorstellen +Name[ne]=प्रदर्शन गर्नुहोस् +Name[nl]=Beeldscherm +Name[nn]=Skjerm +Name[pa]=ਝਲਕ +Name[pl]=Ekran +Name[pt]=Ecrã +Name[pt_BR]=Tela +Name[ro]=Monitor +Name[ru]=Дисплей +Name[rw]=Kwerekana +Name[se]=Šearbma +Name[sk]=Displej +Name[sl]=Zaslon +Name[sr]=Екран +Name[sr@Latn]=Ekran +Name[sv]=Bildskärm +Name[ta]=காட்சி +Name[tg]=Намоиш +Name[th]=การแสดงผล +Name[tr]=Görüntü +Name[tt]=Kürsätü +Name[uk]=Дисплей +Name[uz]=Displey +Name[uz@cyrillic]=Дисплей +Name[vi]=Hiển thị +Name[wa]=Håynaedje +Name[zh_CN]=显示 +Name[zh_TW]=顯示 +Comment=Display Settings +Comment[af]=Skerm Instellings +Comment[ar]=إعدادت العرض +Comment[az]=Displey Qurğuları +Comment[be]=Настаўленні манітора +Comment[bg]=Настройване на екрана +Comment[bn]=ডিসপ্লে সেটিংস +Comment[br]=Kefluniañ an diskwel +Comment[bs]=Postavke ekrana +Comment[ca]=Arranjament de la pantalla +Comment[cs]=Nastavení obrazovky +Comment[csb]=Ùstôw ekranu +Comment[cy]=Gosodiadau Arddangos +Comment[da]=Opsætning af skærm +Comment[de]=Anzeige-Einstellungen +Comment[el]=Ρυθμίσεις οθόνης +Comment[eo]=Vidigila Agordo +Comment[es]=Preferencias de la pantalla +Comment[et]=Monitoride seadistused +Comment[eu]=Pantailaren konfigurazioa +Comment[fa]=نمایش تنظیمات +Comment[fi]=Näytön asetukset +Comment[fr]=Paramètres d'affichage +Comment[fy]=Byldskerm ynstellings +Comment[ga]=Socruithe an Scáileáin +Comment[gl]=Opcións da Pantalla +Comment[he]=הגדרות תצוגה +Comment[hi]=रूप-रंग विन्यास +Comment[hr]=Postavke zaslona +Comment[hu]=Képernyőbeállítások +Comment[is]=Stillingar skjás +Comment[it]=Impostazioni del display +Comment[ja]=ディスプレイの設定 +Comment[ka]=დისპლეის კონფიგურირება +Comment[kk]=Дисплей баптаулары +Comment[km]=កំណត់​ការ​បង្ហាញ +Comment[ko]=디스플레이 설정 +Comment[lt]=Ekrano parametrai +Comment[lv]=Ekrāna parametri +Comment[mk]=Поставувања на приказот +Comment[mn]=Дэлгэц тохируулга +Comment[ms]=Seting Paparan +Comment[mt]=Konfigurazzjoni tal-iskrin +Comment[nb]=Skjerminnstillinger +Comment[nds]=Dorstellen inrichten +Comment[ne]=सेटिङ प्रदर्शन गर्नुहोस् +Comment[nl]=Beeldscherminstellingen +Comment[nn]=Skjerminnstillingar +Comment[pa]=ਝਲਕ ਸੰਰਚਨਾ +Comment[pl]=Ustawienia ekranu +Comment[pt]=Configuração do ecrã +Comment[pt_BR]=Configurações da Tela +Comment[ro]=Configurează monitorul +Comment[ru]=Настройка дисплея +Comment[rw]=Kwerekana Amagenamiterere +Comment[se]=Šearbmaheivehusat +Comment[sk]=Nastavenie displeja +Comment[sl]=Nastavitve zaslona +Comment[sr]=Подешавања екрана +Comment[sr@Latn]=Podešavanja ekrana +Comment[sv]=Anpassa bildskärm +Comment[ta]=அமைப்புகளை காட்டு +Comment[tg]=Танзимоти намоиш +Comment[th]=ตั้งค่าการแสดงผล +Comment[tr]=Görüntü Ayarları +Comment[tt]=Küräk Caylaw +Comment[uk]=Налаштування дисплея +Comment[uz]=Displeyning moslamalari +Comment[uz@cyrillic]=Дисплейнинг мосламалари +Comment[vi]=Thiết lập Hiển thị +Comment[wa]=Apontiaedjes do Håynaedje +Comment[zh_CN]=显示设置 +Comment[zh_TW]=顯示設定 +Categories=Qt;KDE;X-KDE-settings-hardware; diff --git a/kcontrol/display/display.h b/kcontrol/display/display.h new file mode 100644 index 000000000..d07695320 --- /dev/null +++ b/kcontrol/display/display.h @@ -0,0 +1,48 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Nadeem Hasan + + 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 DISPLAY_H +#define DISPLAY_H + +#include + +class QTabWidget; + +class KCMDisplay : public KCModule +{ + Q_OBJECT + + public: + KCMDisplay( QWidget *parent, const char *name, const QStringList& ); + void load(); + void save(); + + private slots: + void moduleChanged(bool isChanged); + + private: + void addTab( const QString &name, const QString &label ); + + QTabWidget *m_tabs; + QMap m_modules; + bool m_changed; +}; + +#endif // DISPLAY_H + diff --git a/kcontrol/dnssd/Makefile.am b/kcontrol/dnssd/Makefile.am new file mode 100644 index 000000000..892244300 --- /dev/null +++ b/kcontrol/dnssd/Makefile.am @@ -0,0 +1,12 @@ +INCLUDES = $(all_includes) +METASOURCES = AUTO +kde_module_LTLIBRARIES = kcm_kdnssd.la +kcm_kdnssd_la_LDFLAGS = -avoid-version -module -no-undefined $(all_libraries) +kcm_kdnssd_la_SOURCES = configdialog.ui kcmdnssd.cpp kcmdnssd.h + +xdg_apps_DATA = kcm_kdnssd.desktop +kcm_kdnssd_la_LIBADD = $(LIB_KDNSSD) $(LIB_KDEUI) + +messages: rc.cpp + $(EXTRACTRC) *.ui *.rc >> rc.cpp + $(XGETTEXT) $(kcm_kdnssd_la_SOURCES) rc.cpp -o $(podir)/kcmkdnssd.pot diff --git a/kcontrol/dnssd/configdialog.ui b/kcontrol/dnssd/configdialog.ui new file mode 100644 index 000000000..83808d1bb --- /dev/null +++ b/kcontrol/dnssd/configdialog.ui @@ -0,0 +1,304 @@ + +ConfigDialog + + + ConfigDialog + + + + 0 + 0 + 571 + 486 + + + + + 7 + 7 + 0 + 0 + + + + + 0 + 0 + + + + MyDialog1 + + + + unnamed + + + + tabs + + + + tab + + + &General + + + + unnamed + + + + kcfg_BrowseLocal + + + Browse local networ&k + + + Browse local network (domain .local) using multicast DNS. + + + + + kcfg_DomainList + + + + 7 + 7 + 0 + 0 + + + + Additional Domains + + + List of Internet domains that will be browsed for services. Do not put .local here - it +is configured with 'Browse local network' option above. + + + + + kcfg_PublishType + + + + 5 + 0 + 0 + 0 + + + + Publishing Mode + + + + LANButtor + + + + 11 + 23 + 618 + 22 + + + + Loc&al network + + + false + + + Advertise services on local network (in domain .local) using multicast DNS. + + + + + WANButton + + + true + + + + 11 + 51 + 618 + 22 + + + + &Wide area network + + + Advertise services on Internet domain using public IP. To have this option working you need to configure wide area operation in using administrator mode + + + + + + + + tab + + + W&ide area + + + + unnamed + + + + layout7 + + + + unnamed + + + + textLabel2 + + + Shared secret: + + + + + spacer4 + + + Horizontal + + + Expanding + + + + 130 + 21 + + + + + + hostedit + + + Name of this machine. Must be in fully qualified form (host.domain) + + + + + secretedit + + + Optional shared secret used for authorization of DNS dynamic updates. + + + + + domainLabel + + + true + + + Domain: + + + + + textLabel1 + + + Hostname: + + + + + domainedit + + + true + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 90 + 20 + + + + + + spacer5 + + + Horizontal + + + Expanding + + + + 90 + 21 + + + + + + + + spacer7 + + + Vertical + + + Expanding + + + + 50 + 110 + + + + + + + + + + radioButton2_2_toggled(bool) + + + kcmodule.h + + + + kcmodule.h + keditlistbox.h + klineedit.h + klineedit.h + kpassdlg.h + klineedit.h + + diff --git a/kcontrol/dnssd/kcm_kdnssd.desktop b/kcontrol/dnssd/kcm_kdnssd.desktop new file mode 100644 index 000000000..8b949e370 --- /dev/null +++ b/kcontrol/dnssd/kcm_kdnssd.desktop @@ -0,0 +1,154 @@ +[Desktop Entry] +Comment=Configure service discovery +Comment[af]=Stel dienste ontdekker op +Comment[ar]=إعداد إكتشاف الخدمات +Comment[be]=Настаўленні пошуку сервісаў +Comment[bg]=Настройване откриването на услуги +Comment[bn]=সার্ভিস উদ্ঘাটন কনফিগার করুন +Comment[bs]=Podesite otkrivanje servisa +Comment[ca]=Configura el descobriment de serveis +Comment[cs]=Nastavení hledání služeb +Comment[csb]=Kòfigùracëjô wëkrëwaniô ùsłëżnotów +Comment[da]=Indstil opdagelse af tjeneste +Comment[de]=Diensteerkennung einrichten +Comment[el]=Ρύθμιση εύρεσης υπηρεσιών +Comment[eo]=Agordu servo-seĉadon +Comment[es]=Configura el buscador de servicios +Comment[et]=Teenuste tuvastamise seadistamine +Comment[eu]=Konfiguratu igartze zerbitzua +Comment[fa]=پیکربندی کشف خدمت +Comment[fi]=Asetuspalvelimen löytäminen +Comment[fr]=Configuration de la découverte de service +Comment[fy]=Tsjinst waarnimming ynstellen +Comment[ga]=Cumraigh fionnachtain seirbhísí +Comment[gl]=Configurar o descubremento de servizos +Comment[he]=הגדרת זיהוי השירותים +Comment[hi]=सेवा डिस्कवरी कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje usluge discovery +Comment[hu]=A szolgáltatásdetektálás beállításai +Comment[is]=Stilla uppgötvun þjónustna +Comment[it]=Configura scoperta servizi +Comment[ja]=サービスディスカバリの設定 +Comment[ka]=სერვისის არმოჩენის კონფიგურირება +Comment[kk]=Қызыметтерді байқауды баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​រកឃើញ​សេវា +Comment[ko]=서비스 발견 설정 +Comment[lt]=Konfigūruoti tarnybų radimą +Comment[lv]=Konfigurē servisu atrašanu +Comment[mk]=Конфигурирајте го откривањето сервиси +Comment[ms]=Konfigur penemuan servis +Comment[nb]=Sett opp oppdagingstjenesten +Comment[nds]=Dat Finnen vun Deensten inrichten +Comment[ne]=पत्ता लगाउने कार्य कन्फिगर गर्नुहोस् +Comment[nl]=Dienstwaarneming instellen +Comment[nn]=Set opp oppdagingstenesta +Comment[pa]=ਸੇਵਾ ਖੋਜ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja wykrywania usług +Comment[pt]=Configurar a descoberta de serviços +Comment[pt_BR]=Configurar o serviço discovery +Comment[ro]=Configurează serviciul de descoperire +Comment[ru]=Настройка обнаружения сервисов +Comment[rw]=Kuboneza ivumbura serivisi +Comment[se]=Heivet bálvalusáicama +Comment[sk]=Nastavenie služby Discovery +Comment[sl]=Nastavi odkrivanje storitev +Comment[sr]=Подешавање откривања сервиса +Comment[sr@Latn]=Podešavanje otkrivanja servisa +Comment[sv]=Anpassa tjänstupptäckt +Comment[ta]=சர்வீஸ் டிஸ்கவரியை வடிவமை +Comment[tg]=Танзими хизмати ихтироъ +Comment[th]=ปรับแต่งการค้นพบบริการ +Comment[tr]=Hizmet araştırmasını yapılandır +Comment[tt]=Xezmätlär tabu caylawı +Comment[uk]=Налаштування знаходження служб +Comment[uz]=Tarmoqdagi xizmatlarni qidirishni moslash +Comment[uz@cyrillic]=Тармоқдаги хизматларни қидиришни мослаш +Comment[vi]=Cấu hình dịch vụ khám phá +Comment[wa]=Apontiaedjes do discovraedje do siervice +Comment[zh_CN]=配置探索服务 +Comment[zh_TW]=設定服務偵測 +Exec=kcmshell kcm_kdnssd +GenericName= +GenericName[ko]=일반 +Icon=blockdevice +MimeType= +Name=Service Discovery +Name[af]=Dienste ontdekker +Name[ar]=إكتشاف الخدمات +Name[be]=Пошук сервісаў +Name[bg]=Откриване на услуги +Name[bn]=সার্ভিস উদ্ঘাটন +Name[bs]=Otkrivanje servisa +Name[ca]=Descobriment de serveis +Name[cs]=Hledání služeb +Name[csb]=Wëkrëwanié ùsłëżnotów +Name[da]=Opdagelse af tjenester +Name[de]=Dienste-Suche +Name[el]=Εύρεση υπηρεσιών +Name[eo]=Servo-Serĉado +Name[es]=Buscador de servicios +Name[et]=Teenuste tuvastamine +Name[eu]=Igartze zerbitzua +Name[fa]=کشف خدمت +Name[fi]=Palvelut +Name[fr]=Découverte de service +Name[fy]=Tsjinst warskôging +Name[ga]=Fionnachtain Seirbhísí +Name[gl]=Descubremento de Servizos +Name[he]=זיהוי שירותים +Name[hi]=सेवा डिस्कवरी +Name[hr]=Usluga Discovery +Name[hu]=Zeroconf-beállítások +Name[is]=Uppgötvun þjónustu +Name[it]=Scoperta servizi +Name[ja]=サービスディスカバリ +Name[ka]=სერვისის აღმოჩენა +Name[kk]=Қызметтерді байқау +Name[km]=ការ​រកឃើញ​សេវា +Name[ko]=서비스 발견 +Name[lt]=Tarnybų radimas +Name[lv]=Servisu atklāšana +Name[mk]=Откривање сервиси +Name[ms]=Penemuan Servis +Name[nb]=Oppdaging av tjenester +Name[nds]=Deensten finnen +Name[ne]=पत्ता लगाउने कार्य +Name[nl]=Dienstwaarneming +Name[nn]=Oppdaging av tenester +Name[pa]=ਸੇਵਾ ਖੋਜ +Name[pl]=Wykrywanie usług +Name[pt]=Descoberta de Serviços +Name[pt_BR]=Serviço Discovery +Name[ro]=Descoperire servicii +Name[ru]=Обнаружение служб +Name[rw]=Ivumbura rya Serivisi +Name[se]=Bálvalusáican +Name[sk]=Služba Discovery +Name[sl]=Odkrivanje storitev +Name[sr]=Откривање сервиса +Name[sr@Latn]=Otkrivanje servisa +Name[sv]=Tjänstupptäckt +Name[ta]=சர்வீஸ் டிஸ்கவரி +Name[tg]=Хизмати ихтироъ +Name[th]=การค้นพบบริการ +Name[tr]=Hizmet Araştırması +Name[tt]=Xezmätlär Tabu +Name[uk]=Знаходження служб +Name[uz]=Tarmoqdagi xizmatlarni qidirish +Name[uz@cyrillic]=Тармоқдаги хизматларни қидириш +Name[vi]=Dịch vụ Khám phá +Name[wa]=Discovraedje di siervices +Name[zh_CN]=服务探索 +Name[zh_TW]=服務偵測 +Path= +StartupNotify=true +Terminal=false +Type=Application +X-DCOP-ServiceType= +X-KDE-HasReadOnlyMode=false +X-KDE-Library=kdnssd +X-KDE-ModuleType=Library +X-KDE-ParentApp=kcontrol +X-KDE-SubstituteUID=false +X-KDE-RootOnly=true +Categories=Qt;KDE;X-KDE-settings-network; diff --git a/kcontrol/dnssd/kcmdnssd.cpp b/kcontrol/dnssd/kcmdnssd.cpp new file mode 100644 index 000000000..d86cc2897 --- /dev/null +++ b/kcontrol/dnssd/kcmdnssd.cpp @@ -0,0 +1,142 @@ +/*************************************************************************** + * Copyright (C) 2004,2005 by Jakub Stachowski * + * qbast@go2.pl * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "kcmdnssd.h" +#include +#include +#include + +#define MDNSD_CONF "/etc/mdnsd.conf" +#define MDNSD_PID "/var/run/mdnsd.pid" + +typedef KGenericFactory KCMDnssdFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kdnssd, KCMDnssdFactory("kcmkdnssd")) + +KCMDnssd::KCMDnssd(QWidget *parent, const char *name, const QStringList&) + : ConfigDialog(parent, name), m_wdchanged(false) +{ + setAboutData(new KAboutData(I18N_NOOP("kcm_kdnssd"), + I18N_NOOP("ZeroConf configuration"),0,0,KAboutData::License_GPL, + I18N_NOOP("(C) 2004,2005 Jakub Stachowski"))); + setQuickHelp(i18n("Setup services browsing with ZeroConf")); + if (geteuid()!=0) tabs->removePage(tab_2); // normal user cannot change wide-area settings + // show only global things in 'administrator mode' to prevent confusion + else if (getenv("KDESU_USER")!=0) tabs->removePage(tab); + addConfig(DNSSD::Configuration::self(),this); + // it is host-wide setting so it has to be in global config file + domain = new KSimpleConfig( QString::fromLatin1( KDE_CONFDIR "/kdnssdrc" )); + domain->setGroup("publishing"); + load(); + connect(hostedit,SIGNAL(textChanged(const QString&)),this,SLOT(wdchanged())); + connect(secretedit,SIGNAL(textChanged(const QString&)),this,SLOT(wdchanged())); + connect(domainedit,SIGNAL(textChanged(const QString&)),this,SLOT(wdchanged())); + if (DNSSD::Configuration::self()->publishDomain().isEmpty()) WANButton->setEnabled(false); +} + +KCMDnssd::~KCMDnssd() +{ + delete domain; +} + +void KCMDnssd::save() +{ + KCModule::save(); + if (geteuid()==0 && m_wdchanged) saveMdnsd(); + domain->setFileWriteMode(0644); // this should be readable for everyone + domain->writeEntry("PublishDomain",domainedit->text()); + domain->sync(); + KIPC::sendMessageAll((KIPC::Message)KIPCDomainsChanged); +} + +void KCMDnssd::load() +{ + KCModule::load(); + if (geteuid()==0) loadMdnsd(); +} + +// hack to work around not working isModified() for KPasswordEdit +void KCMDnssd::wdchanged() +{ + WANButton->setEnabled(!domainedit->text().isEmpty() && !hostedit->text().isEmpty()); + changed(); + m_wdchanged=true; +} + +void KCMDnssd::loadMdnsd() +{ + QFile f(MDNSD_CONF); + if (!f.open(IO_ReadWrite)) return; + QTextStream stream(&f); + QString line; + while (!stream.atEnd()) { + line = stream.readLine(); + mdnsdLines.insert(line.section(' ',0,0,QString::SectionSkipEmpty), + line.section(' ',1,-1,QString::SectionSkipEmpty)); + } + if (!mdnsdLines["zone"].isNull()) domainedit->setText(mdnsdLines["zone"]); + if (!mdnsdLines["hostname"].isNull()) hostedit->setText(mdnsdLines["hostname"]); + if (!mdnsdLines["secret-64"].isNull()) secretedit->setText(mdnsdLines["secret-64"]); +} + +bool KCMDnssd::saveMdnsd() +{ + mdnsdLines["zone"]=domainedit->text(); + mdnsdLines["hostname"]=hostedit->text(); + if (!secretedit->text().isEmpty()) mdnsdLines["secret-64"]=QString(secretedit->password()); + else mdnsdLines.remove("secret-64"); + QFile f(MDNSD_CONF); + bool newfile=!f.exists(); + if (!f.open(IO_WriteOnly)) return false; + QTextStream stream(&f); + for (QMap::ConstIterator it=mdnsdLines.begin();it!=mdnsdLines.end(); + ++it) stream << it.key() << " " << (*it) << "\n"; + f.close(); + // if it is new file, then make it only accessible for root as it can contain shared + // secret for dns server. + if (newfile) chmod(MDNSD_CONF,0600); + f.setName(MDNSD_PID); + if (!f.open(IO_ReadOnly)) return true; // it is not running so no need to signal + QString line; + if (f.readLine(line,16)<1) return true; + unsigned int pid = line.toUInt(); + if (pid==0) return true; // not a pid + kill(pid,SIGHUP); + return true; +} + +#include "kcmdnssd.moc" diff --git a/kcontrol/dnssd/kcmdnssd.h b/kcontrol/dnssd/kcmdnssd.h new file mode 100644 index 000000000..2e66f6a8f --- /dev/null +++ b/kcontrol/dnssd/kcmdnssd.h @@ -0,0 +1,49 @@ +/*************************************************************************** + * Copyright (C) 2004,2005 by Jakub Stachowski * + * qbast@go2.pl * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef _KCMDNSSD_H_ +#define _KCMDNSSD_H_ + +#include + +#include +#include + +class KSimpleConfig; +class KCMDnssd: public ConfigDialog +{ + Q_OBJECT + +public: + KCMDnssd( QWidget *parent=0, const char *name=0, const QStringList& = QStringList() ); + ~KCMDnssd(); + virtual void save(); + virtual void load(); +private slots: + void wdchanged(); +private: + void loadMdnsd(); + bool saveMdnsd(); + QMap mdnsdLines; + bool m_wdchanged; + KSimpleConfig* domain; +}; + +#endif diff --git a/kcontrol/ebrowsing/Makefile.am b/kcontrol/ebrowsing/Makefile.am new file mode 100644 index 000000000..dfb9fdbe8 --- /dev/null +++ b/kcontrol/ebrowsing/Makefile.am @@ -0,0 +1,21 @@ + +SUBDIRS = plugins + +AM_CPPFLAGS = -I$(srcdir)/plugins/ikws $(all_includes) + +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_kurifilt.la +kcm_kurifilt_la_SOURCES = filteropts.cpp main.cpp + +kcm_kurifilt_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_kurifilt_la_LIBADD = $(LIB_KSYCOCA) +# Don't link this lib to the plugins. They are dlopened and linking to them +# results in crashes when closing kcmshell. +# plugins/ikws/libkuriikwsfilter.la plugins/shorturi/libkshorturifilter.la + +messages: rc.cpp + $(EXTRACTRC) plugins/*/*.ui >> rc.cpp + $(XGETTEXT) *.cpp plugins/ikws/*.cpp plugins/shorturi/*.cpp -o $(podir)/kcmkurifilt.pot + +xdg_apps_DATA = ebrowsing.desktop diff --git a/kcontrol/ebrowsing/ebrowsing.desktop b/kcontrol/ebrowsing/ebrowsing.desktop new file mode 100644 index 000000000..a0bf4593b --- /dev/null +++ b/kcontrol/ebrowsing/ebrowsing.desktop @@ -0,0 +1,237 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/ebrowsing/index.html +Icon=enhanced_browsing +Exec=kcmshell ebrowsing + + +X-KDE-Library=kurifilt +X-KDE-FactoryName=kurifilt +X-KDE-ParentApp=kcontrol + +Name=Web Shortcuts +Name[af]=Web Kortpaaie +Name[ar]=إختصارات الشبكة +Name[az]=Veb Qısa Yolları +Name[be]=Скароты Сеціва +Name[bg]=Уеб съкращения +Name[bn]=ওয়েব শর্টকাট +Name[br]=Berradennoù ar gwiad +Name[bs]=Web kratice +Name[ca]=Dreceres web +Name[cs]=Webové zkratky +Name[csb]=Sécowé skrodzënë +Name[cy]=Byr-lwybrau Gwe +Name[da]=Net-genveje +Name[de]=Webkürzel +Name[el]=Συντομεύσεις ιστού +Name[eo]=TTT Klavokombinoj +Name[es]=Accesos rápidos para web +Name[et]=Veebi kiirkorraldused +Name[eu]=Web lasterbideak +Name[fa]=میان‌برهای وب +Name[fi]=WWW-pikavalinnat +Name[fr]=Raccourcis Web +Name[fy]=Webskeakels +Name[ga]=Aicearraí Gréasáin +Name[gl]=Atallos Web +Name[he]=קיצורי דרך אינטרנטיים +Name[hi]=वेब शॉर्टकट +Name[hr]=Internetski prečaci +Name[hu]=Keresési azonosítók +Name[is]=Vefskammstafanir +Name[it]=Scorciatoie del web +Name[ja]=ウェブショートカット +Name[ka]=ვებგვერდების მალსახმობი +Name[kk]=Веб қысқартулары +Name[km]=ផ្លូវកាត់​បណ្ដាញ +Name[ko]=웹 바로 가기 +Name[lo]=ປຸ່ມພິມພັລດ +Name[lt]=Žiniatinklio trumpės +Name[lv]=Tīmekļa īsinājumikonas +Name[mk]=Интернет-кратенки +Name[mn]=Вэб-богино товчилуур +Name[ms]=Jalan Pintas Web +Name[nb]=Nettsnarveier +Name[nds]=Söökafkörten +Name[ne]=वेब सर्टकट +Name[nl]=Webkoppelingen +Name[nn]=Vevsnarvegar +Name[nso]=Ditselakopana tsa Web +Name[pa]=ਵੈਬ ਸ਼ਾਰਟਕੱਟ +Name[pl]=Skróty sieciowe +Name[pt]=Atalhos Web +Name[pt_BR]=Atalhos da Web +Name[ro]=Acceleratori de web +Name[ru]=Сокращения Веб +Name[rw]=Amahinanzira y'Urubugamakuru +Name[se]=Fierpmádatlávkestagat +Name[sk]=Internetové skratky +Name[sl]=Spletne bližnjice +Name[sr]=Веб пречице +Name[sr@Latn]=Veb prečice +Name[ss]=Tindlela letimfunshane te web +Name[sv]=Webbgenvägar +Name[ta]=வலை குறுக்கு வழிகள் +Name[te]=వెబ్ శీఘ్ర మార్గాలు +Name[tg]=Мухтасаркунии Вэб +Name[th]=ทางลัดเว็บ +Name[tr]=Web Kısayolları +Name[tt]=Web Qısqartmaları +Name[uk]=Скорочення Тенет +Name[uz]=Veb-qisqartmalari +Name[uz@cyrillic]=Веб-қисқартмалари +Name[ven]=Tshikhau tsha webu +Name[vi]=Đường tắt Mạng +Name[wa]=Rascourtis waibe +Name[xh]=Ezimfutshane ze Web +Name[zh_CN]=速搜 +Name[zh_TW]=網頁捷徑 +Name[zu]=Izindlela Ezimfishane ze-Web + +Comment=Configure enhanced browsing +Comment[af]=Konfigureer verbeterde blaaiïng +Comment[ar]=إعداد التصفح المحسّن +Comment[az]=Təkmilləşdirilmiş gəzintini quraşdır +Comment[be]=Настаўленні прасунутага вандравання +Comment[bg]=Настройване на уеб съкращения и бързи препратки +Comment[bn]=বর্ধিত ব্রাউজিং কনফিগার করুন +Comment[br]=Kefluniañ ar furchal gwellaet +Comment[bs]=Podesite napredno pregledavanje +Comment[ca]=Aquí podeu configurar la navegació millorada +Comment[cs]=Nastavení rozšířeného prohledávání +Comment[csb]=Kònfigùracëjô rozszérzonëch cechów przezéraniô +Comment[cy]=Ffurfweddu pori uchel +Comment[da]=Indstil udvidet netsøgning +Comment[de]=Die Verwendung von Webkürzeln einrichten +Comment[el]=Ρυθμίστε την εμπλουτισμένη περιήγηση +Comment[eo]=Agordo de rapidserĉo, ŝlosilvortoj ktp. +Comment[es]=Configuración de la navegación mejorada +Comment[et]=Täiustatud lehitsemise konfigureerimine +Comment[eu]=Konfiguratu arakatze hobetua +Comment[fa]=پیکربندی مرور بهبودیافته +Comment[fi]=Muokkaa selaimen lisäasetuksia +Comment[fr]=Configuration de la navigation avancée +Comment[fy]=Hjir kinne jo it avansearre blêdzjen ynstelle +Comment[ga]=Cumraigh brabhsáil fheabhsaithe +Comment[gl]=Configurar a Navegación Mellorada +Comment[he]=שינוי הגדרות הגלישה המשופרת +Comment[hi]=एनहेंस्ड ब्राउज़िंग कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje poboljšanog pregledavanja +Comment[hu]=A keresési beállításokat lehet módosítani +Comment[is]=Hér getur þú stillt endurbætur á vefskoðara +Comment[it]=Configurazione della navigazione avanzata +Comment[ja]=拡張ブラウズの設定 +Comment[kk]=Вебті шарлағанда қолданатын қысқартулар +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​រុករក​ឲ្យ​កាន់​តែ​ប្រសើរ +Comment[ko]=확장 브라우징 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການຮງກເບິ່ງເວບເພດຈ໌ຂັ້ນກ້າວຫນ້າໄດ້ດັ່ງນີ້ +Comment[lt]=Konfigūruoti išplėstinį naršymą +Comment[lv]=Šeit Jūs varat nokonfigurēt Uzlaboto Pārlūkošanu +Comment[mk]=Конфигурирајте го напредното прелистување +Comment[mn]=Интернэт-хайлттай нэгжилт тохируулах +Comment[ms]=Konfigur pelayaran lanjutan +Comment[mt]=Ikkonfigura l-browsing estiż +Comment[nb]=Oppsett av utvidet surfing +Comment[nds]=Söökafkörten för't gaue Söken in't Nett inrichten +Comment[ne]=बढाइएको ब्राउजिङ कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u het geavanceerd browsen instellen +Comment[nn]=Oppsett av utvida surfing +Comment[nso]=Beakanya boinyakisi bjo bo hlohleleditswego +Comment[pa]=ਸਹਾਇਕ ਝਲਕਾਰਾ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja rozszerzonych cech przeglądania +Comment[pt]=Configuração da navegação melhorada +Comment[pt_BR]=Configura a navegação melhorada +Comment[ro]=Configurează navigarea de web avansată +Comment[ru]=Сокращения, используемые при просмотре Веб +Comment[rw]=Kuboneza icukumbura rivuguruye +Comment[se]=Heivet viiddiduvvon fierbmegolgama +Comment[sk]=Nastaenie rozšíreného prehliadača +Comment[sl]=Nastavite izboljšano brskanje +Comment[sr]=Подешавање побољшаног прегледања +Comment[sr@Latn]=Podešavanje poboljšanog pregledanja +Comment[sv]=Anpassa utökad webbläsning +Comment[ta]= மேம்படுத்தப்பட்ட தேடுதலை அமை +Comment[tg]=Мухтасаркунӣ, дар вақти тасвири Вэб истифода мешаванд +Comment[th]=ปรับแต่งการเรียกดูแบบเพิ่มความสามารถ +Comment[tr]=Gelişkin taramayı buradan yapılandırabilirsiniz +Comment[tt]=Köçäytelgän gizü caylawı +Comment[uk]=Налаштування спецфункцій навігації +Comment[uz]=Tezlashtirilgan veb-koʻrishni moslash +Comment[uz@cyrillic]=Тезлаштирилган веб-кўришни мослаш +Comment[ven]=Dzudzanyani burausu yo engedzhwaho +Comment[vi]=Cấu hình Duyệt Nâng cao +Comment[wa]=Apontyî li naiviaedje waibe avancî +Comment[xh]=Qwalasela ukhangelo lwencwadi olongezelelweyo +Comment[zh_CN]=配置增强浏览特性 +Comment[zh_TW]=設定增強式瀏覽 +Comment[zu]=Hlannganisela ukucinga okujulile + +Keywords=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts +Keywords[af]=Verbeterde Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts +Keywords[ar]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,التصفح المحسن,التصفح,الشبكة العالمية,الإنترنت مفاتيح الإنترنت,فلاتر الإنترنت,شبكة,الشبكة,محركات البحث,اختصارات,الاختصارات +Keywords[az]=Təkmilləşmiş Darama,Darama,WWW,İnternet,İnternet Açar Kəliimələri,İnternet Süzgəcləri,Şəbəkə,Qısa yollar,Qısa yol düymələri +Keywords[be]=Палепшанае вандраванне,вандраванне,прагляд,Інэтрнэт,ключавыя словы,фільтры,сетка,рухавікі пошуку,машыны пошуку,скароты,Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts +Keywords[bg]=съкращения, сърфиране, разширено, уеб, препратка, връзка, хипервръзка, Enhanced Browsing, Browsing, WWW, Internet, Internet Keywords, Internet Filters, Network, Search Engines, Shortcuts +Keywords[ca]=Navegació millorada,Navegació,WWW,Internet,Paraules clau d'Internet,Filtres d'Internet,Xarxa,Motors de recerca,Dreceres +Keywords[cs]=Rozšířené procházení,Procházení,WWW,Internet,Klíčová slova internetu,Internetové filtry,Síť,Zkratky,Vyhledávací stroje +Keywords[csb]=Rozszérzoné przezéranié,przezéranié,WWW,Internet,kluczowé słowa w Internece,filtrë w Internece,séc,szëkôrze,skrodzënë +Keywords[cy]=Pori Uchel,Pori,WWW,Rhyngrwyd,Allweddair Rhyngrwyd,Hidl Rhyngrwyd,Rhwydwaith,Peiriannau Chwilio,Llwybrau Byr +Keywords[da]=Udvidet netsøgning,Netsøgning,www,Internet,Internet-nøgleord,Internet-filtre,Søgemaskiner,Genveje +Keywords[de]=Browsen,Erweitertes Browsen,WWW,Internet,Stichwörter,Filter,Netz,Internetfilter,Suchmaschinen,Kurzbefehle,Netzwerk +Keywords[el]=Εμπλουτισμένη περιήγηση,Περιήγηση,WWW,Διαδίκτυο,Λέξεις κλειδιά διαδικτύου,Φίλτρα διαδικτύου,Δίκτυο,Μηχανές αναζήτησης,Συντομεύσεις +Keywords[eo]=progresintoj,TTT,krozado,WWW,Interreto,filtrilo,reto,serĉiloj,mallongigoj +Keywords[es]=Navegación Mejorada,Navegación,WWW,Internet,Palabras clave de Internet,Filtros de Internet,Red,Motores de búsqueda,Accesos directos +Keywords[et]=Täiustatud lehitsemine,lehitsemine,WWW,internet,interneti võtmesõnad,interneti filtrid,võrk,otsingumootorid,kiirkorraldused +Keywords[eu]=Arakatze hobetua,Arakatzea,WWW,Internet,Interneteko hitz gakoak, Interneteko irakazkiak,Sarea,Bilaketa motorea,Lasterbideak +Keywords[fa]=مرور بهبودیافته، مرور، WWW، اینترنت، کلیدواژه‌های اینترنت، پالایه‌های اینترنت، شبکه، موتورهای جستجو، میان‌برها +Keywords[fi]=Edistynyt selailu,selailu,WWW,Internet,Internet-hakusanat,Internet suodattimet,Verkko,Hakukoneet,Pikavalinnat +Keywords[fr]=navigation avancée,navigation,www,web,internet,mots clés internet,filtres internet,réseau,moteurs de recherche,raccourcis +Keywords[fy]=avansearre browsen,browsing,blêdzje,blêdzjen,www,ynternet,ynternet kaaiwurden,surfen,ynternetsykwurden,sykmasines,sykmotors, snelskeakels,ynternetfilters,Netwurk,blêdzje avensearre +Keywords[ga]=Brabhsáil Fheabhsaithe,Brabhsáil,WWW,Idirlíon,Eochairfhocail Idirlín,Scagairí Idirlín,Líonra,Innill Chuardaigh,Aicearraí +Keywords[gl]=Navegación Mellorada,Navegación,WWW,Internet,Palabras chave de Internet,Filtros de Internet,Rede,Ferramentas de Procura,Atallos +Keywords[he]=מילות מפתח אינטרנטיות,מסננים אינטרנטיים,רשת,מנועי חיפוש,קיצורי דרך,WWW,גלישה משופרת,גלישה,רשת,אינטרנט,Enhanced Browsing,Browsing,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts +Keywords[hi]=एनहैंस्ड ब्राउज़िंग,ब्राउज़िंग,डब्ल्यूडब्ल्यूडब्ल्यू,इंटरनेट,इंटरनेट की-वर्ड्स,इंटरनेट फ़िल्टर्स,नेटवर्क,सर्च इंजिन्स,शॉर्टकट्स +Keywords[hr]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,poboljšano pregledavanje,pregledavanje,ključne riječi,filtri,mreža,tražilice,prečaci +Keywords[hu]=böngészéskönnyítés,böngészés,WWW,internet,internetes kulcsszavak,internetes szűrők,hálózat,keresőszolgáltatók,keresési azonosítók +Keywords[id]=Browsing yang disempurnakan,browsing,WWW,Internet,Intranet Keywords,Internet Filter,Jaringan,Search Engines,Shortcuts +Keywords[is]=endurbætur,vefskoðun,vafri,flakka,WWW,Internet,Internet leitarorð,net,tenglar,tengill,hlekkur,hlekkir,leitarvél,internet +Keywords[it]=navigazione avanzata,navigazione,WWW,Internet,parole chiave Internet,filtri Internet,rete,scorciatoie,motori di ricerca +Keywords[ja]=拡張ブラウズ,ブラウズ,WWW,インターネット,インターネットキーワード,インターネットフィルタ,ネットワーク,検索エンジン,ショートカット +Keywords[km]=រុករក​កាន់​តែ​ប្រសើរ,ការ​រុករក,WWW,អ៊ិនធឺណិត,ពាក្យ​គន្លឹះ​អ៊ិនធឺណិត,តម្រង​អ៊ិនធឺណិត,បណ្ដាញ,ម៉ាស៊ីន​ស្វែងរក,ផ្លូវកាត់ +Keywords[lt]=Enhanced Browsing,Išplėstinis naršymas,WWW,voratinklis,Internet,Internetas,Internet Keywords,Interneto raktažodžiai,Internet Filters,Interneto filtrai,Network,tinklas,Search Engines,paieškos stotys,Shortcuts,nuorodos +Keywords[lv]=Uzlabota Pārlūkošana,Pārlūkošana,WWW,Internets,Interneta Atslēgas vārdi,Interneta Filtri,Tīkls,Meklēšanas dzinēji,ĪsinājumIkonas +Keywords[mk]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,унапредено прелистување,Прелистување,Интернет,Клучни Интернет зборови,Интернет филтри,Мрежа,Пребарувачки сервиси,Кратенки +Keywords[mn]=Нэгжих,Өргөтгөсөн нэгжилт,WWW,Интернэт,Түлхүүр үг,Шүүлт,Сүлжээ, Интернэт-Шүүлт, Хайлтын машин,Богино тушаал,Сүлжээ +Keywords[nb]=utvidet surfing,surfing,WWW,internett,internettnøkkelord,internettfilter,nettverk,verdensveven,søkemotorer,søking,snarveier +Keywords[nds]=Enhanced Browsing,Nettkieken,WWW,Internet,Internet Slötelwöör,Internet Filter,Nettwark,Söökmaschinen,Afkörten,Söökafkörten +Keywords[ne]=बढाइएको ब्राउजिङ, ब्राउजिङ, WWW, इन्टरनेट, इन्टरनेट शब्दकुञ्जीहरू, इन्टरनेट फिल्टरहरू, सञ्जाल, खोजी इन्जीनहरू, सर्टकट +Keywords[nl]=geavanceerd browsen,browsing,www,internet,internet keywords,surfen,internetzoektermen,zoekmachines,search engines,snelkoppelingen,internetfilters,Netwerk,verbeterd browsen +Keywords[nn]=utvida surfing,surfing,WWW,internett,internettnøkkelord,internettfilter,nettverk,verdsveven,søkjemotorar,søkjing,snarvegar +Keywords[nso]=Boinyakisi bjo bo Hlohleleditswego,Boinyakisi,WWW,Internet, Mantsuhlokwa a Internet ,Disekodi tsa Internet,Kgokagano,Di-Engine tsa Nyako, Ditselakopana +Keywords[pa]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,ਇੰਟਰਨੈਟ,ਇੰਟਰਨੈਟ ਸ਼ਬਦ,ਇੰਟਰਨੈਟ ਫਿਲਟਰ, ਨੈਟਵਰਕ +Keywords[pl]=Rozszerzone przeglądanie,przeglądanie,WWW,Internet,słowa kluczowe w Internecie,filtry w Internecie,sieć,przeszukiwarki,skróty +Keywords[pt]=navegação melhorada,navegação,WWW,internet,palavras-chave da internet,filtros internet,rede,motores de busca,atalhos +Keywords[pt_BR]=navegação melhorada,navegação,WWW,Internet,palavras-chave Internet, filtros Internet,rede,mecanismos de procura,atalhos +Keywords[ro]=navigare avansată,răsfoire,WWW,Internet,cuvinte cheie Internet,filtre Internet,rețea,motoare de căutare,acceleratori +Keywords[rw]=Icukumbura Ritunganye,Icukumbura,WWW,Interineti, Amagamborufunguzo Interineti,Muyunguruzi wa Interineti,Urusobemiyoboro, Mushakisha, Amahinanzira +Keywords[sk]=Rozšírené prehliadanie,Prehliadač,Prehliadanie,WWW,Internet, Sieť,Klávesové skratky,Internetové kľúčové slová,Vyhľadávacie stroje,Skratky +Keywords[sl]=izboljšano brskanje,brskanje,WWW,splet,internet,ključne besede interneta,filtri interneta,omrežje,iskalni stroji,bližnjice +Keywords[sr]=Enhanced Browsing,Browsing,WWW,Интернет,Интернет Keywords,Интернет Filters,Network,Search Engines,Shortcuts,Прегледање,Мрежа,Пречице +Keywords[sr@Latn]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,Pregledanje,Mreža,Prečice +Keywords[sv]=Utökad webbläsning,Surfning,WWW,Internet,Internetsökord,Nätverk,Sökmotorer,Internetfilter,Genvägar +Keywords[ta]= அதிகப்படுத்தப்பட்ட உலாவுதல்,உலாவுதல்,WWW,இணைதளம்,இணைய முக்கிய வார்த்தைகள்,இணையதள வடிகட்டிகள்,வலைப்பின்னல்,தேடு இயந்திரங்கள்,குறுக்கு வழிகள் +Keywords[th]=การเรียกดูแบบเพิ่มความสามารถ,การเรียกดู,WWW,อินเทอร์เน็ต,คำค้นทางอินเทอร์เน็ต,ตัวกรองทางอินเทอร์เน็ต,Network,เครื่องมือค้นหา,ทางลัด +Keywords[tr]=Gelişkin Tarama,Tarama,WWW,İnternet,İnternet Anahtar Kelimeleri,İnternet Süzgeçleri,Ağ,Kısayollar,Kısayol tuşları +Keywords[uk]=додаткова навігація,навігація,Browsing,WWW,Інтернет,Тенета,Internet,Мережа,машини пошуку,фільтри Інтернет,посилання +Keywords[uz]=Tezlashtirilgan veb-koʻrish,Qisqartmalar,WWW,Internet,Internet kalit soʻzlari,Internet filterlari,Tarmoq,Qidirish vositasi,Qisqartmalar +Keywords[uz@cyrillic]=Тезлаштирилган веб-кўриш,Қисқартмалар,WWW,Интернет,Интернет калит сўзлари,Интернет филтерлари,Тармоқ,Қидириш воситаси,Қисқартмалар +Keywords[ven]=Burausu yo Engedzhaho,WWW,Inithanete,Khii dza maipfi dza Inithanete,Dzifilithara dza Inithanethe,Vhukwamani,Mutshini wau toda,Zwa tshikhau +Keywords[vi]=Duyệt Nâng cao,Duyệt,WWW,Internet,Từ khoá Internet,Bộ lọc Internet,Mạng,Tìm kiếm,Đường tắt +Keywords[wa]=Naiviaedje waibe avancî,naivyî,naiviaedje,betchteu,waibe,WWW,internet,daegntoele,rascourtis waibe,passetes waibe,rantoele,ricwerreces,rascourtis +Keywords[xh]=Ukhangelo zincwadi olomeleziweyo,Khangela iincwadi,WWW,Amagama angundoqo e Internet,Amacebo okucoca ulwelo e Internet,Umsebenzi womnatha,Iinjini Zophendlo,Iindlela ezimfutshane +Keywords[zh_CN]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,增强浏览,浏览,Internet 关键字,Internet 过滤,网络,搜索引擎,快捷方式,速搜 +Keywords[zh_TW]=Enhanced Browsing,Browsing,WWW,Internet,Internet Keywords,Internet Filters,Network,Search Engines,Shortcuts,增強瀏覽,瀏覽,網際網路,網路,搜尋引擎,捷徑 +Keywords[zu]=Ukucinga okujulile,Ukucinga,WWW,Internet,Amagama abalulekile e-Internet,Amahluzo,Uxhumano olusakazekile,Izinjini zokusesha, Izindlela ezimfushane + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/ebrowsing/filteropts.cpp b/kcontrol/ebrowsing/filteropts.cpp new file mode 100644 index 000000000..ae2127380 --- /dev/null +++ b/kcontrol/ebrowsing/filteropts.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2000 Yves Arrouye + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include +#include + +#include +#include + +#include "filteropts.h" + +FilterOptions::FilterOptions(QWidget *parent, const char *name) + :KCModule(parent, name) +{ + + QGridLayout *lay = new QGridLayout(this, 1, 1, 10, 5); + + lay->addWidget(new QLabel(i18n("Under construction..."), this), 0, 0); + lay->activate(); + +} + +void FilterOptions::load( bool useDefaults ) +{ + +} + +void FilterOptions::save() +{ +} + +void FilterOptions::defaults() +{ + load( true ); +} + +void FilterOptions::moduleChanged(bool state) +{ + emit changed(state); +} + +#include "filteropts.moc" diff --git a/kcontrol/ebrowsing/filteropts.h b/kcontrol/ebrowsing/filteropts.h new file mode 100644 index 000000000..f8a530b4a --- /dev/null +++ b/kcontrol/ebrowsing/filteropts.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2000 Yves Arrouye + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __FILTEROPTS_H___ +#define __FILTEROPTS_H___ + +#include + +class QListBox; + +class FilterOptions : public KCModule +{ + Q_OBJECT + +public: + FilterOptions(QWidget *parent = 0, const char *name = 0); + + void load( bool useDefaults ); + void save(); + void defaults(); + +protected slots: + void moduleChanged(bool state); + +private: + QListBox* m_lbFilterList; +}; + +#endif + diff --git a/kcontrol/ebrowsing/main.cpp b/kcontrol/ebrowsing/main.cpp new file mode 100644 index 000000000..8c7ab1e5d --- /dev/null +++ b/kcontrol/ebrowsing/main.cpp @@ -0,0 +1,131 @@ +/* + * main.cpp + * + * Copyright (c) 2000 Yves Arrouye + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include "filteropts.h" +#include "main.h" + +typedef KGenericFactory KURIFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kurifilt, KURIFactory("kcmkurifilt") ) + +class FilterOptions; + +KURIFilterModule::KURIFilterModule(QWidget *parent, const char *name, const QStringList &) + :KCModule(KURIFactory::instance(), parent, name) +{ + + filter = KURIFilter::self(); + + setQuickHelp( i18n("

Enhanced Browsing

In this module you can configure some enhanced browsing" + " features of KDE.

Internet Keywords

Internet Keywords let you" + " type in the name of a brand, a project, a celebrity, etc... and go to the" + " relevant location. For example you can just type" + " \"KDE\" or \"K Desktop Environment\" in Konqueror to go to KDE's homepage." + "

Web Shortcuts

Web Shortcuts are a quick way of using Web search engines. For example, type \"altavista:frobozz\"" + " or \"av:frobozz\" and Konqueror will do a search on AltaVista for \"frobozz\"." + " Even easier: just press Alt+F2 (if you have not" + " changed this shortcut) and enter the shortcut in the KDE Run Command dialog.")); + + QVBoxLayout *layout = new QVBoxLayout(this); + +#if 0 + opts = new FilterOptions(this); + tab->addTab(opts, i18n("&Filters")); + connect(opts, SIGNAL(changed(bool)), SIGNAL(changed(bool))); +#endif + + modules.setAutoDelete(true); + + QMap helper; + QPtrListIterator it = filter->pluginsIterator(); + for (; it.current(); ++it) + { + KCModule *module = it.current()->configModule(this, 0); + if (module) + { + modules.append(module); + helper.insert(it.current()->configName(), module); + connect(module, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + } + } + + if (modules.count() > 1) + { + QTabWidget *tab = new QTabWidget(this); + + QMapIterator it2; + for (it2 = helper.begin(); it2 != helper.end(); ++it2) + { + tab->addTab(it2.data(), it2.key()); + } + + tab->showPage(modules.first()); + widget = tab; + } + else if (modules.count() == 1) + { + widget = modules.first(); + layout->setMargin(-KDialog::marginHint()); + } + + layout->addWidget(widget); +} + +void KURIFilterModule::load() +{ + QPtrListIterator it(modules); + for (; it.current(); ++it) + { + it.current()->load(); + } +} + +void KURIFilterModule::save() +{ + QPtrListIterator it(modules); + for (; it.current(); ++it) + { + it.current()->save(); + } +} + +void KURIFilterModule::defaults() +{ + QPtrListIterator it(modules); + for (; it.current(); ++it) + { + it.current()->defaults(); + } +} + +#include "main.moc" diff --git a/kcontrol/ebrowsing/main.h b/kcontrol/ebrowsing/main.h new file mode 100644 index 000000000..6b9a0aa21 --- /dev/null +++ b/kcontrol/ebrowsing/main.h @@ -0,0 +1,51 @@ +/* + * main.h + * + * Copyright (c) 2000 Yves Arrouye + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __MAIN_H__ +#define __MAIN_H__ + +#include + +class KURIFilter; + +class KURIFilterModule : public KCModule { + Q_OBJECT + +public: + KURIFilterModule(QWidget *parent, const char *name, const QStringList &); + + void load(); + void load(bool useDefaults ); + void save(); + void defaults(); + +private: + KURIFilter *filter; + + QWidget *widget; + FilterOptions *opts; + QPtrList modules; +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/Makefile.am b/kcontrol/ebrowsing/plugins/Makefile.am new file mode 100644 index 000000000..df9163228 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/Makefile.am @@ -0,0 +1,3 @@ + +SUBDIRS = ikws shorturi localdomain + diff --git a/kcontrol/ebrowsing/plugins/ikws/Makefile.am b/kcontrol/ebrowsing/plugins/ikws/Makefile.am new file mode 100644 index 000000000..9fbde1ecb --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/Makefile.am @@ -0,0 +1,31 @@ +## Makefile.am of kdebase/kcontrol/ebrowsing/plugins/ikws + +SUBDIRS = searchproviders + +AM_CPPFLAGS = $(all_includes) + +METASOURCES = AUTO + +kde_module_LTLIBRARIES = libkuriikwsfilter.la libkurisearchfilter.la + +libkuriikwsfilter_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +libkuriikwsfilter_la_LIBADD = $(LIB_KSYCOCA) $(LIB_KDEUI) + +libkurisearchfilter_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +libkurisearchfilter_la_LIBADD = $(LIB_KSYCOCA) $(LIB_KDEUI) + +libkuriikwsfilter_la_SOURCES = kuriikwsfiltereng.cpp kuriikwsfilter.skel \ + kuriikwsfilter.cpp searchprovider.cpp + +libkurisearchfilter_la_SOURCES = kurisearchfilter.cpp kurisearchfilter.skel \ + kuriikwsfiltereng.cpp ikwsopts.cpp searchproviderdlg.cpp searchprovider.cpp \ + searchproviderdlg_ui.ui ikwsopts_ui.ui + +update_DATA = kuriikwsfilter.upd +updatedir = $(kde_datadir)/kconf_update + +service_DATA = kuriikwsfilter.desktop kurisearchfilter.desktop +servicedir = $(kde_servicesdir) + +servicetypes_DATA = searchprovider.desktop +servicetypesdir = $(kde_servicetypesdir) diff --git a/kcontrol/ebrowsing/plugins/ikws/ikwsopts.cpp b/kcontrol/ebrowsing/plugins/ikws/ikwsopts.cpp new file mode 100644 index 000000000..6c055255d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/ikwsopts.cpp @@ -0,0 +1,492 @@ +/* + * Copyright (c) 2000 Yves Arrouye + * Copyright (c) 2001, 2002 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ikwsopts.h" +#include "ikwsopts_ui.h" +#include "kuriikwsfiltereng.h" +#include "searchprovider.h" +#include "searchproviderdlg.h" + + +class SearchProviderItem : public QCheckListItem +{ +public: + SearchProviderItem(QListView *parent, SearchProvider *provider) + :QCheckListItem(parent, provider->name(), CheckBox), m_provider(provider) + { + update(); + } + + virtual ~SearchProviderItem() + { + delete m_provider; + } + + void update() + { + setText(0, m_provider->name()); + setText(1, m_provider->keys().join(",")); + } + + SearchProvider *provider() const { return m_provider; } + +private: + SearchProvider *m_provider; +}; + +FilterOptions::FilterOptions(KInstance *instance, QWidget *parent, const char *name) + :KCModule(instance, parent, name) +{ + QVBoxLayout *mainLayout = new QVBoxLayout( this, KDialog::marginHint(), + KDialog::spacingHint()); + + m_dlg = new FilterOptionsUI (this); + mainLayout->addWidget(m_dlg); + + m_dlg->lvSearchProviders->header()->setLabel(0, SmallIconSet("bookmark"),i18n("Name")); + m_dlg->lvSearchProviders->setSorting(0); + + // Load the options + load(); +} + +QString FilterOptions::quickHelp() const +{ + return i18n("In this module you can configure the web shortcuts feature. " + "Web shortcuts allow you to quickly search or lookup words on " + "the Internet. For example, to search for information about the " + "KDE project using the Google engine, you simply type gg:KDE " + "or google:KDE." + "

If you select a default search engine, normal words or phrases " + "will be looked up at the specified search engine by simply typing " + "them into applications, such as Konqueror, that have built-in support " + "for such a feature."); +} + +void FilterOptions::load() +{ + load( false ); +} + +void FilterOptions::load( bool useDefaults ) +{ + // Clear state first. + m_dlg->lvSearchProviders->clear(); + + KConfig config( KURISearchFilterEngine::self()->name() + "rc", false, false ); + + config.setReadDefaults( useDefaults ); + + config.setGroup("General"); + + QString defaultSearchEngine = config.readEntry("DefaultSearchEngine"); + + m_favoriteEngines.clear(); + m_favoriteEngines << "google" << "google_groups" << "google_news" << "webster" << "dmoz" << "wikipedia"; + m_favoriteEngines = config.readListEntry("FavoriteSearchEngines", m_favoriteEngines); + + const KTrader::OfferList services = KTrader::self()->query("SearchProvider"); + + for (KTrader::OfferList::ConstIterator it = services.begin(); + it != services.end(); ++it) + { + displaySearchProvider(new SearchProvider(*it), + ((*it)->desktopEntryName() == defaultSearchEngine)); + } + + bool webShortcutsEnabled = config.readBoolEntry("EnableWebShortcuts", true); + m_dlg->cbEnableShortcuts->setChecked( webShortcutsEnabled ); + + setDelimiter (config.readNumEntry ("KeywordDelimiter", ':')); + + // Update the GUI to reflect the config options read above... + setWebShortcutState(); + + if (m_dlg->lvSearchProviders->childCount()) + m_dlg->lvSearchProviders->setSelected(m_dlg->lvSearchProviders->firstChild(), true); + + // Connect all the signals/slots... + connect(m_dlg->cbEnableShortcuts, SIGNAL(clicked()), this, + SLOT(setWebShortcutState())); + connect(m_dlg->cbEnableShortcuts, SIGNAL(clicked()), this, + SLOT(configChanged())); + + connect(m_dlg->lvSearchProviders, SIGNAL(selectionChanged(QListViewItem *)), + this, SLOT(updateSearchProvider())); + connect(m_dlg->lvSearchProviders, SIGNAL(doubleClicked(QListViewItem *)), + this, SLOT(changeSearchProvider())); + connect(m_dlg->lvSearchProviders, SIGNAL(returnPressed(QListViewItem *)), + this, SLOT(changeSearchProvider())); + connect(m_dlg->lvSearchProviders, SIGNAL(executed(QListViewItem *)), + this, SLOT(checkFavoritesChanged())); + connect(m_dlg->lvSearchProviders, SIGNAL(spacePressed(QListViewItem *)), + this, SLOT(checkFavoritesChanged())); + connect(m_dlg->lvSearchProviders, SIGNAL(pressed(QListViewItem *)), + this, SLOT(checkFavoritesChanged())); + + connect(m_dlg->cmbDefaultEngine, SIGNAL(activated(const QString &)), this, + SLOT(configChanged())); + connect(m_dlg->cmbDelimiter, SIGNAL(activated(const QString &)), this, + SLOT(configChanged())); + + connect(m_dlg->pbNew, SIGNAL(clicked()), this, SLOT(addSearchProvider())); + connect(m_dlg->pbChange, SIGNAL(clicked()), this, SLOT(changeSearchProvider())); + connect(m_dlg->pbDelete, SIGNAL(clicked()), this, SLOT(deleteSearchProvider())); + + emit changed( useDefaults ); +} + +char FilterOptions::delimiter () +{ + switch (m_dlg->cmbDelimiter->currentItem()) + { + case 1: + return ' '; + case 0: + default: + return ':'; + }; +} + +void FilterOptions::setDelimiter (char sep) +{ + switch (sep) + { + case ' ': + m_dlg->cmbDelimiter->setCurrentItem (1); + break; + case ':': + default: + m_dlg->cmbDelimiter->setCurrentItem (0); + }; +} + +void FilterOptions::save() +{ + KConfig config( KURISearchFilterEngine::self()->name() + "rc", false, false ); + + config.setGroup("General"); + config.writeEntry("EnableWebShortcuts", m_dlg->cbEnableShortcuts->isChecked()); + config.writeEntry("KeywordDelimiter", delimiter() ); + + QString engine; + + if (m_dlg->cmbDefaultEngine->currentItem() != 0) + engine = m_dlg->cmbDefaultEngine->currentText(); + + config.writeEntry("DefaultSearchEngine", m_defaultEngineMap[engine]); + + // kdDebug () << "Engine: " << m_defaultEngineMap[engine] << endl; + + int changedProviderCount = 0; + QString path = kapp->dirs()->saveLocation("services", "searchproviders/"); + + m_favoriteEngines.clear(); + + for (QListViewItemIterator it(m_dlg->lvSearchProviders); it.current(); ++it) + { + SearchProviderItem *item = dynamic_cast(it.current()); + + Q_ASSERT(item); + + SearchProvider *provider = item->provider(); + + QString name = provider->desktopEntryName(); + + if (item->isOn()) + m_favoriteEngines << name; + + if (provider->isDirty()) + { + changedProviderCount++; + + if (name.isEmpty()) + { + // New provider + // Take the longest search shortcut as filename, + // if such a file already exists, append a number and increase it + // until the name is unique + for (QStringList::ConstIterator it = provider->keys().begin(); it != provider->keys().end(); ++it) + { + if ((*it).length() > name.length()) + name = (*it).lower(); + } + for (int suffix = 0; ; ++suffix) + { + QString located, check = name; + if (suffix) + check += QString().setNum(suffix); + if ((located = locate("services", "searchproviders/" + check + ".desktop")).isEmpty()) + { + name = check; + break; + } + else if (located.left(path.length()) == path) + { + // If it's a deleted (hidden) entry, overwrite it + if (KService(located).isDeleted()) + break; + } + } + } + + KSimpleConfig service(path + name + ".desktop"); + service.setGroup("Desktop Entry"); + service.writeEntry("Type", "Service"); + service.writeEntry("ServiceTypes", "SearchProvider"); + service.writeEntry("Name", provider->name()); + service.writeEntry("Query", provider->query(), true, false, true); + service.writeEntry("Keys", provider->keys()); + service.writeEntry("Charset", provider->charset()); + + // we might be overwriting a hidden entry + service.writeEntry("Hidden", false); + } + } + + for (QStringList::ConstIterator it = m_deletedProviders.begin(); + it != m_deletedProviders.end(); ++it) + { + QStringList matches = kapp->dirs()->findAllResources("services", "searchproviders/" + *it + ".desktop"); + + // Shouldn't happen + if (!matches.count()) + continue; + + if (matches.count() == 1 && matches[0].left(path.length()) == path) + { + // If only the local copy existed, unlink it + // TODO: error handling + QFile::remove(matches[0]); + continue; + } + KSimpleConfig service(path + *it + ".desktop"); + service.setGroup("Desktop Entry"); + service.writeEntry("Type", "Service"); + service.writeEntry("ServiceTypes", "SearchProvider"); + service.writeEntry("Hidden", true); + } + + config.writeEntry("FavoriteSearchEngines", m_favoriteEngines); + config.sync(); + + emit changed(false); + + // Update filters in running applications... + (void) DCOPRef("*", "KURIIKWSFilterIface").send("configure"); + (void) DCOPRef("*", "KURISearchFilterIface").send("configure"); + + // If the providers changed, tell sycoca to rebuild its database... + if (changedProviderCount) + KService::rebuildKSycoca(this); +} + +void FilterOptions::defaults() +{ + load( true ); +} + +void FilterOptions::configChanged() +{ + // kdDebug () << "FilterOptions::configChanged: TRUE" << endl; + emit changed(true); +} + +void FilterOptions::checkFavoritesChanged() +{ + QStringList currentFavoriteEngines; + for (QListViewItemIterator it(m_dlg->lvSearchProviders); it.current(); ++it) + { + SearchProviderItem *item = dynamic_cast(it.current()); + + Q_ASSERT(item); + + if (item->isOn()) + currentFavoriteEngines << item->provider()->desktopEntryName(); + } + + if (!(currentFavoriteEngines==m_favoriteEngines)) { + m_favoriteEngines=currentFavoriteEngines; + configChanged(); + } +} + +void FilterOptions::setWebShortcutState() +{ + bool use_keywords = m_dlg->cbEnableShortcuts->isChecked(); + m_dlg->lvSearchProviders->setEnabled(use_keywords); + m_dlg->pbNew->setEnabled(use_keywords); + m_dlg->pbChange->setEnabled(use_keywords); + m_dlg->pbDelete->setEnabled(use_keywords); + m_dlg->lbDelimiter->setEnabled (use_keywords); + m_dlg->cmbDelimiter->setEnabled (use_keywords); + m_dlg->lbDefaultEngine->setEnabled (use_keywords); + m_dlg->cmbDefaultEngine->setEnabled (use_keywords); +} + +void FilterOptions::addSearchProvider() +{ + SearchProviderDialog dlg(0, this); + if (dlg.exec()) + { + m_dlg->lvSearchProviders->setSelected(displaySearchProvider(dlg.provider()), true); + configChanged(); + } +} + +void FilterOptions::changeSearchProvider() +{ + SearchProviderItem *item = dynamic_cast(m_dlg->lvSearchProviders->currentItem()); + Q_ASSERT(item); + + SearchProviderDialog dlg(item->provider(), this); + + if (dlg.exec()) + { + m_dlg->lvSearchProviders->setSelected(displaySearchProvider(dlg.provider()), true); + configChanged(); + } +} + +void FilterOptions::deleteSearchProvider() +{ + SearchProviderItem *item = dynamic_cast(m_dlg->lvSearchProviders->currentItem()); + Q_ASSERT(item); + + // Update the combo box to go to None if the fallback was deleted. + int current = m_dlg->cmbDefaultEngine->currentItem(); + for (int i = 1, count = m_dlg->cmbDefaultEngine->count(); i < count; ++i) + { + if (m_dlg->cmbDefaultEngine->text(i) == item->provider()->name()) + { + m_dlg->cmbDefaultEngine->removeItem(i); + if (i == current) + m_dlg->cmbDefaultEngine->setCurrentItem(0); + else if (current > i) + m_dlg->cmbDefaultEngine->setCurrentItem(current - 1); + + break; + } + } + + if (item->nextSibling()) + m_dlg->lvSearchProviders->setSelected(item->nextSibling(), true); + else if (item->itemAbove()) + m_dlg->lvSearchProviders->setSelected(item->itemAbove(), true); + + if (!item->provider()->desktopEntryName().isEmpty()) + m_deletedProviders.append(item->provider()->desktopEntryName()); + + delete item; + updateSearchProvider(); + configChanged(); +} + +void FilterOptions::updateSearchProvider() +{ + m_dlg->pbChange->setEnabled(m_dlg->lvSearchProviders->currentItem()); + m_dlg->pbDelete->setEnabled(m_dlg->lvSearchProviders->currentItem()); +} + +SearchProviderItem *FilterOptions::displaySearchProvider(SearchProvider *p, bool fallback) +{ + // Show the provider in the list. + SearchProviderItem *item = 0L; + + QListViewItemIterator it(m_dlg->lvSearchProviders); + + for (; it.current(); ++it) + { + if (it.current()->text(0) == p->name()) + { + item = dynamic_cast(it.current()); + Q_ASSERT(item); + break; + } + } + + if (item) + item->update (); + else + { + // Put the name in the default search engine combo box. + int itemCount; + int totalCount = m_dlg->cmbDefaultEngine->count(); + + item = new SearchProviderItem(m_dlg->lvSearchProviders, p); + + if (m_favoriteEngines.find(p->desktopEntryName())!=m_favoriteEngines.end()) + item->setOn(true); + + for (itemCount = 1; itemCount < totalCount; itemCount++) + { + if (m_dlg->cmbDefaultEngine->text(itemCount) > p->name()) + { + int currentItem = m_dlg->cmbDefaultEngine->currentItem(); + m_dlg->cmbDefaultEngine->insertItem(p->name(), itemCount); + m_defaultEngineMap[p->name ()] = p->desktopEntryName (); + if (currentItem >= itemCount) + m_dlg->cmbDefaultEngine->setCurrentItem(currentItem+1); + break; + } + } + + // Append it to the end of the list... + if (itemCount == totalCount) + { + m_dlg->cmbDefaultEngine->insertItem(p->name(), itemCount); + m_defaultEngineMap[p->name ()] = p->desktopEntryName (); + } + + if (fallback) + m_dlg->cmbDefaultEngine->setCurrentItem(itemCount); + } + + if (!it.current()) + m_dlg->lvSearchProviders->sort(); + + return item; +} + +#include "ikwsopts.moc" diff --git a/kcontrol/ebrowsing/plugins/ikws/ikwsopts.h b/kcontrol/ebrowsing/plugins/ikws/ikwsopts.h new file mode 100644 index 000000000..b533fb9a7 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/ikwsopts.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2000 Yves Arrouye + * Copyright (c) 2002, 2003 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __IKWSOPTS_H___ +#define __IKWSOPTS_H___ + +#include +#include + +#include +#include + +class FilterOptionsUI; +class SearchProvider; +class SearchProviderItem; + +class FilterOptions : public KCModule +{ + Q_OBJECT + +public: + FilterOptions(KInstance *instance, QWidget *parent = 0, const char *name = 0); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + QString quickHelp() const; + +protected slots: + void configChanged(); + void checkFavoritesChanged(); + + void setWebShortcutState(); + + void addSearchProvider(); + void changeSearchProvider(); + void deleteSearchProvider(); + void updateSearchProvider(); + +private: + SearchProviderItem *displaySearchProvider(SearchProvider *p, bool fallback = false); + + void setDelimiter (char); + char delimiter (); + + // The names of the providers that the user deleted, + // these are marked as deleted in the user's homedirectory + // on save if a global service file exists for it. + QStringList m_deletedProviders; + QMap m_defaultEngineMap; + QStringList m_favoriteEngines; + + FilterOptionsUI* m_dlg; +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/ikws/ikwsopts_ui.ui b/kcontrol/ebrowsing/plugins/ikws/ikwsopts_ui.ui new file mode 100644 index 000000000..fdeeb27ca --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/ikwsopts_ui.ui @@ -0,0 +1,258 @@ + +FilterOptionsUI + + + FilterOptionsUI + + + + 0 + 0 + 360 + 327 + + + + + unnamed + + + 0 + + + + cbEnableShortcuts + + + &Enable Web shortcuts + + + <qt> +Enable shortcuts that allow you to quickly search for information on the web. For example, entering the shortcut <b>gg:KDE</b> will result in a search of the word <b>KDE</b> on the Google(TM) search engine. +</qt> + + + + + layout10 + + + + unnamed + + + + lbDelimiter + + + + 0 + 5 + 0 + 0 + + + + &Keyword delimiter: + + + cmbDelimiter + + + Choose the delimiter that separates the keyword from the phrase or word to be searched. + + + + + lbDefaultEngine + + + true + + + + 0 + 5 + 0 + 0 + + + + Default &search engine: + + + cmbDefaultEngine + + + <qt> +Select the search engine to use for input boxes that provide automatic lookup services when you type in normal words and phrases instead of a URL. To disable this feature select <b>None</b> from the list. +</qt> + + + + + + None + + + + cmbDefaultEngine + + + + 5 + 0 + 0 + 0 + + + + <qt> +Select the search engine to use for input boxes that provide automatic lookup services when you type in normal words and phrases instead of a URL. To disable this feature select <b>None</b> from the list. +</qt> + + + + + pbChange + + + false + + + Chan&ge... + + + Modify a search provider. + + + + + pbDelete + + + false + + + De&lete + + + Delete the selected search provider. + + + + + pbNew + + + &New... + + + Add a search provider. + + + + + spacer1 + + + Vertical + + + Expanding + + + + 21 + 170 + + + + + + + Name + + + true + + + true + + + + + Shortcuts + + + true + + + true + + + + lvSearchProviders + + + + 5 + 5 + 1 + 1 + + + + true + + + AllColumns + + + 0 + + + List of search providers, their associated shortcuts and whether they shall be listed in menus. + + + + + + Colon + + + + + Space + + + + cmbDelimiter + + + + 5 + 0 + 0 + 0 + + + + Choose the delimiter that separates the keyword from the phrase or word to be searched. + + + + + + + + cbEnableShortcuts + lvSearchProviders + pbNew + pbChange + pbDelete + cmbDefaultEngine + cmbDelimiter + + + diff --git a/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.cpp b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.cpp new file mode 100644 index 000000000..a7e2e5239 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.cpp @@ -0,0 +1,81 @@ +/* This file is part of the KDE project + Copyright (C) 1999 Simon Hausmann + Copyright (C) 2000 Yves Arrouye + Copyright (C) 2002, 2003 Dawit Alemayehu + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include + +#include +#include +#include +#include +#include + +#include "ikwsopts.h" +#include "kuriikwsfiltereng.h" +#include "kuriikwsfilter.h" + +/** + * IMPORTANT: If you change anything here, please run the regression test + * kdelibs/kio/tests/kurifiltertest + */ + +typedef KGenericFactory KAutoWebSearchFactory; +K_EXPORT_COMPONENT_FACTORY (libkuriikwsfilter, KAutoWebSearchFactory("kcmkurifilt")) + +KAutoWebSearch::KAutoWebSearch(QObject *parent, const char *name, const QStringList&) + :KURIFilterPlugin(parent, name ? name : "kuriikwsfilter", 1.0), + DCOPObject("KURIIKWSFilterIface") +{ +} + +KAutoWebSearch::~KAutoWebSearch() +{ +} + +void KAutoWebSearch::configure() +{ + if ( KURISearchFilterEngine::self()->verbose() ) + kdDebug() << "KAutoWebSearch::configure: Config reload requested..." << endl; + + KURISearchFilterEngine::self()->loadConfig(); +} + +bool KAutoWebSearch::filterURI( KURIFilterData &data ) const +{ + if (KURISearchFilterEngine::self()->verbose()) + kdDebug() << "KAutoWebSearch::filterURI: '" << data.uri().url() << "'" << endl; + + KURL u = data.uri(); + if ( u.pass().isEmpty() ) + { + QString result = KURISearchFilterEngine::self()->autoWebSearchQuery( data.typedString() ); + if( !result.isEmpty() ) + { + if ( KURISearchFilterEngine::self()->verbose() ) + kdDebug () << "Filtered URL: " << result << endl; + + setFilteredURI( data, KURL( result ) ); + setURIType( data, KURIFilterData::NET_PROTOCOL ); + return true; + } + } + return false; +} + +#include "kuriikwsfilter.moc" diff --git a/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.desktop b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.desktop new file mode 100644 index 000000000..bf223f22b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.desktop @@ -0,0 +1,70 @@ +[Desktop Entry] +Type=Service +Name=InternetKeywordsFilter +Name[af]=Internetsleutelwoordefilter +Name[az]=İnternetAçarKəliməSüzgəci +Name[be]=Фільтр ключавых словаў +Name[br]=SilGerioùAlc'hwezArKenrouedad +Name[ca]=Filtre de paraules clau d'Internet +Name[csb]=Filter internetowëch kluczowëch słów +Name[cy]=HidlAllweddeiriauRhyngrwyd +Name[da]=InternetNøgleordsFilter +Name[de]=Internet-Stichwort-Filter +Name[el]=Φίλτρο λέξεων κλειδιών διαδικτύου +Name[eo]=Filtrilo por interretaj ŝlosilvortoj +Name[es]=Filtro de palabras clave de Internet +Name[et]=Interneti võtmesõnade filter +Name[eu]=Interneteko gako-hitzen iragazkia +Name[fa]=پالایۀ واژه‌های کلیدی اینترنت +Name[fr]=Mots clés internet +Name[fy]=YnternetSykwurdenFilter +Name[hi]=इंटरनेट की-वर्ड्स फ़िल्टर +Name[hr]=Filtar internetskih ključnih riječi +Name[hu]=Internetes kulcsszavak szűrője +Name[id]=FilterInternetKeyword +Name[is]=InternetStikkorðaSía +Name[ja]=インターネットキーワードフィルタ +Name[ka]=ინტერნეტ საკვანძო სიტყვების ფილტრი +Name[kk]=Интернет түйінді сөздер сүзгісі +Name[lo]=ຕົວກອງຄຳຄົ້ນຫາເທິງອິນເຕີເນັດ +Name[lt]=InternetoRaktažodžiųfiltras +Name[lv]=InternetAtslēgasvārduFiltrs +Name[mn]=Интернэт-Түлхүүр үг-Шүүгч +Name[nb]=Filter for Internettnøkkelord +Name[nds]=Filter för Internet-Slötelwöör +Name[ne]=इन्टरनेट शब्दकुञ्जी फिल्टर +Name[nl]=InternetZoektermenFilter +Name[nn]=Filter for Internettnøkkelord +Name[nso]=Sesekodi sa Mantsuhlokwa a Internet +Name[oc]=Filtre de paraules clau Internet +Name[pa]=ਇੰਟਰਨੈੱਟ ਸ਼ਬਦ ਫਿਲਟਰ +Name[pl]=Filtr internetowych słów kluczowych +Name[pt]=Filtro de Palavras-chave na Internet +Name[pt_BR]=Filtro de Palavras-chave da Internet +Name[ro]=Filtru de cuvinte cheie Internet +Name[ru]=Фильтр ключевых слов Интернет +Name[rw]=MuyunguruziAmagamborufunguzoInterineti +Name[sk]=Filter Klávesových skratiek pre Internet +Name[sl]=Filter ključnih besed za internet +Name[sr]=Филтер кључних речи Интернета +Name[sr@Latn]=Filter ključnih reči Interneta +Name[sv]=Internetsökordsfilter +Name[ta]=தேடல் மூலச்சொற்கள் வடிகட்டி +Name[te]=ఇంటర్నెట్ కీలకపదాల గలని +Name[tg]=Софи калидвожаҳои интернет +Name[th]=ตัวกรองคำค้นหาบนอินเทอร์เน็ต +Name[tr]=İnternetAnahtarKelimeSüzgeci +Name[tt]=İnternetTöpsüzSözgeçe +Name[uk]=Фільтр ключових слів Інтернет +Name[uz]=Internet kalit soʻzlar filteri +Name[uz@cyrillic]=Интернет калит сўзлар филтери +Name[ven]=Filithara ya Khiimaipfi ya Inithanete +Name[vi]=Trình lọc các từ khoá Mạng +Name[wa]=PasseteMotsClésDelDaegntoele +Name[xh]=Amagama Angundoqo ecebo lokucoca ulwelo e Internet +Name[zh_CN]=Internet 关键字过滤 +Name[zh_TW]=Internet 關鍵字過濾 +Name[zu]=Ihluzo lamagama abalulekile e-Internet +X-KDE-Library=libkuriikwsfilter +ServiceTypes=KURIFilter/Plugin +InitialPreference=1 diff --git a/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.h b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.h new file mode 100644 index 000000000..e286b3bd6 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.h @@ -0,0 +1,48 @@ +/* This file is part of the KDE project + Copyright (C) 1999 Simon Hausmann + Copyright (C) 2000 Yves Arrouye + Copyright (C) 2002, 2003 Dawit Alemayehu + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __KURIIKWSFILTER_H__ +#define __KURIIKWSFILTER_H__ + +#include +#include + +#include + +class KInstance; + +class KAutoWebSearch : public KURIFilterPlugin, public DCOPObject +{ + K_DCOP + Q_OBJECT +public: + KAutoWebSearch(QObject *parent = 0, const char *name = 0, + const QStringList &args = QStringList() ); + ~KAutoWebSearch(); + + virtual bool filterURI( KURIFilterData& ) const; + +k_dcop: + virtual void configure(); +}; + +#endif + diff --git a/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.upd b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.upd new file mode 100644 index 000000000..61d11999d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfilter.upd @@ -0,0 +1,7 @@ +Id=post-kde3.1/cvs +File=kuriikwsfilterrc +Group=General +Key=SearchEngineShortcutsEnabled,EnableWebShortcuts +Key=InternetKeywordsSearchFallback,DefaultSearchEngine +RemoveKey=InternetKeywordsEnabled +RemoveKey=InternetKeywordsSelectedEngine \ No newline at end of file diff --git a/kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.cpp b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.cpp new file mode 100644 index 000000000..9cf0cf94d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.cpp @@ -0,0 +1,540 @@ + +/* This file is part of the KDE project + + Copyright (C) 2002, 2003 Dawit Alemayehu + Copyright (C) 2000 Yves Arrouye + Copyright (C) 1999 Simon Hausmann + + Advanced web shortcuts: + Copyright (C) 2001 Andreas Hochsteger + + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kuriikwsfiltereng.h" +#include "searchprovider.h" + +#define PIDDBG kdDebug(7023) << "(" << getpid() << ") " +#define PDVAR(n,v) PIDDBG << n << " = '" << v << "'\n" + +/** + * IMPORTANT: If you change anything here, please run the regression test + * kdelibs/kio/tests/kurifiltertest + */ + +KURISearchFilterEngine *KURISearchFilterEngine::s_pSelf = 0; +static KStaticDeleter kurisearchfilterengsd; + +KURISearchFilterEngine::KURISearchFilterEngine() +{ + loadConfig(); +} + +QString KURISearchFilterEngine::webShortcutQuery( const QString& typedString ) const +{ + QString result; + + if (m_bWebShortcutsEnabled) + { + QString search = typedString; + int pos = search.find(m_cKeywordDelimiter); + + QString key; + if (pos > -1) + key = search.left(pos); + else if (m_cKeywordDelimiter == ' ' && !search.isEmpty()) + key = search; + + if (!key.isEmpty() && !KProtocolInfo::isKnownProtocol( key )) + { + // Make web shortcut keywords case-insensitive, i.e. + // kde == KDE == Kde == kDe == kdE + SearchProvider *provider = SearchProvider::findByKey(key.lower()); + + if (provider) + { + result = formatResult(provider->query(), provider->charset(), + QString::null, search.mid(pos+1), true); + delete provider; + } + } + } + + return result; +} + + +QString KURISearchFilterEngine::autoWebSearchQuery( const QString& typedString ) const +{ + QString result; + + if (m_bWebShortcutsEnabled && !m_defaultSearchEngine.isEmpty()) + { + // Make sure we ignore supported protocols, e.g. "smb:", "http:" + int pos = typedString.find(':'); + + if (pos == -1 || !KProtocolInfo::isKnownProtocol(typedString.left(pos))) + { + SearchProvider *provider = SearchProvider::findByDesktopName(m_defaultSearchEngine); + + if (provider) + { + result = formatResult (provider->query(), provider->charset(), + QString::null, typedString, true); + delete provider; + } + } + } + + return result; +} + +QCString KURISearchFilterEngine::name() const +{ + return "kuriikwsfilter"; +} + +KURISearchFilterEngine* KURISearchFilterEngine::self() +{ + if (!s_pSelf) + kurisearchfilterengsd.setObject( s_pSelf, new KURISearchFilterEngine ); + return s_pSelf; +} + +QStringList KURISearchFilterEngine::modifySubstitutionMap(SubstMap& map, + const QString& query) const +{ + // Returns the number of query words + QString userquery = query; + + // Do some pre-encoding, before we can start the work: + { + int start = 0; + int pos = 0; + QRegExp qsexpr("\\\"[^\\\"]*\\\""); + + // Temporary substitute spaces in quoted strings (" " -> "%20") + // Needed to split user query into StringList correctly. + while ((pos = qsexpr.search(userquery, start)) >= 0) + { + int i = 0; + int n = 0; + QString s = userquery.mid (pos, qsexpr.matchedLength()); + while ((i = s.find(" ")) != -1) + { + s = s.replace (i, 1, "%20"); + n++; + } + start = pos + qsexpr.matchedLength() + 2*n; // Move after last quote + userquery = userquery.replace (pos, qsexpr.matchedLength(), s); + } + } + + // Split user query between spaces: + QStringList l = QStringList::split(" ", userquery.simplifyWhiteSpace()); + + // Back-substitute quoted strings (%20 -> " "): + { + int i = 0; + while ((i = userquery.find("%20")) != -1) + userquery = userquery.replace(i, 3, " "); + + for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) + *it = (*it).replace("%20", " "); + } + + PIDDBG << "Generating substitution map:\n"; + // Generate substitution map from user query: + for (unsigned int i=0; i<=l.count(); i++) + { + int j = 0; + int pos = 0; + QString v = ""; + QString nr = QString::number(i); + + // Add whole user query (\{0}) to substitution map: + if (i==0) + v = userquery; + // Add partial user query items to substitution map: + else + v = l[i-1]; + + // Back-substitute quoted strings (%20 -> " "): + while ((j = v.find("%20")) != -1) + v = v.replace(j, 3, " "); + + // Insert partial queries (referenced by \1 ... \n) to map: + map.replace(QString::number(i), v); + PDVAR (" map['" + nr + "']", map[nr]); + + // Insert named references (referenced by \name) to map: + j = 0; + if ((i>0) && (pos = v.find("=")) > 0) + { + QString s = v.mid(pos + 1); + QString k = v.left(pos); + + // Back-substitute references contained in references (e.g. '\refname' substitutes to 'thisquery=\0') + while ((j = s.find("%5C")) != -1) s = s.replace(j, 3, "\\"); + map.replace(k, s); + PDVAR (" map['" + k + "']", map[k]); + } + } + + return l; +} + +static QString encodeString(const QString &s, int mib) +{ + QStringList l = QStringList::split(" ", s, true); + for(QStringList::Iterator it = l.begin(); + it != l.end(); ++it) + { + *it = KURL::encode_string(*it, mib); + } + return l.join("+"); +} + +QString KURISearchFilterEngine::substituteQuery(const QString& url, SubstMap &map, const QString& userquery, const int encodingMib) const +{ + QString newurl = url; + QStringList ql = modifySubstitutionMap (map, userquery); + int count = ql.count(); + + // Check, if old style '\1' is found and replace it with \{@} (compatibility mode): + { + int pos = -1; + if ((pos = newurl.find("\\1")) >= 0) + { + PIDDBG << "WARNING: Using compatibility mode for newurl='" << newurl + << "'. Please replace old style '\\1' with new style '\\{0}' " + "in the query definition.\n"; + newurl = newurl.replace(pos, 2, "\\{@}"); + } + } + + PIDDBG << "Substitute references:\n"; + // Substitute references (\{ref1,ref2,...}) with values from user query: + { + int pos = 0; + QRegExp reflist("\\\\\\{[^\\}]+\\}"); + + // Substitute reflists (\{ref1,ref2,...}): + while ((pos = reflist.search(newurl, 0)) >= 0) + { + bool found = false; + + //bool rest = false; + QString v = ""; + QString rlstring = newurl.mid(pos + 2, reflist.matchedLength() - 3); + PDVAR (" reference list", rlstring); + + // \{@} gets a special treatment later + if (rlstring == "@") + { + v = "\\@"; + found = true; + } + + // TODO: strip whitespaces around commas + QStringList rl = QStringList::split(",", rlstring); + unsigned int i = 0; + + while ((i= 0) + { + int pos = rlitem.find("-"); + int first = rlitem.left(pos).toInt(); + int last = rlitem.right(rlitem.length()-pos-1).toInt(); + + if (first == 0) + first = 1; + + if (last == 0) + last = count; + + for (int i=first; i<=last; i++) + { + v += map[QString::number(i)] + " "; + // Remove used value from ql (needed for \{@}): + ql[i-1] = ""; + } + + v = v.stripWhiteSpace(); + if (!v.isEmpty()) + found = true; + + PDVAR (" range", QString::number(first) + "-" + QString::number(last) + " => '" + v + "'"); + v = encodeString(v, encodingMib); + } + else if ( rlitem.startsWith("\"") && rlitem.endsWith("\"") ) + { + // Use default string from query definition: + found = true; + QString s = rlitem.mid(1, rlitem.length() - 2); + v = encodeString(s, encodingMib); + PDVAR (" default", s); + } + else if (map.contains(rlitem)) + { + // Use value from substitution map: + found = true; + PDVAR (" map['" + rlitem + "']", map[rlitem]); + v = encodeString(map[rlitem], encodingMib); + + // Remove used value from ql (needed for \{@}): + QString c = rlitem.left(1); + if (c=="0") + { + // It's a numeric reference to '0' + for (QStringList::Iterator it = ql.begin(); it!=ql.end(); ++it) + (*it) = ""; + } + else if ((c>="0") && (c<="9")) + { + // It's a numeric reference > '0' + int n = rlitem.toInt(); + ql[n-1] = ""; + } + else + { + // It's a alphanumeric reference + QStringList::Iterator it = ql.begin(); + while ((it != ql.end()) && ((rlitem + "=") != (*it).left(rlitem.length()+1))) + ++it; + if ((rlitem + "=") == (*it).left(rlitem.length()+1)) + (*it) = ""; + } + + // Encode '+', otherwise it would be interpreted as space in the resulting url: + int vpos = 0; + while ((vpos = v.find('+')) != -1) + v = v.replace (vpos, 1, "%2B"); + + } + else if (rlitem == "@") + { + v = "\\@"; + PDVAR (" v", v); + } + + i++; + } + + newurl = newurl.replace(pos, reflist.matchedLength(), v); + } + + // Special handling for \{@}; + { + PDVAR (" newurl", newurl); + // Generate list of unmatched strings: + QString v = ""; + for (unsigned int i=0; i 0) + return QString::null; + + // Debug info of map: + if (!map.isEmpty()) + { + PIDDBG << "Got non-empty substitution map:\n"; + for(SubstMap::Iterator it = map.begin(); it != map.end(); ++it) + PDVAR (" map['" + it.key() + "']", it.data()); + } + + // Create a codec for the desired encoding so that we can transcode the user's "url". + QString cseta = cset1; + if (cseta.isEmpty()) + cseta = "iso-8859-1"; + + QTextCodec *csetacodec = QTextCodec::codecForName(cseta.latin1()); + if (!csetacodec) + { + cseta = "iso-8859-1"; + csetacodec = QTextCodec::codecForName(cseta.latin1()); + } + + // Decode user query: + QString userquery = KURL::decode_string(query, 106 /* utf-8*/); + + PDVAR ("user query", userquery); + PDVAR ("query definition", url); + + // Add charset indicator for the query to substitution map: + map.replace("ikw_charset", cseta); + + // Add charset indicator for the fallback query to substitution map: + QString csetb = cset2; + if (csetb.isEmpty()) + csetb = "iso-8859-1"; + map.replace("wsc_charset", csetb); + + QString newurl = substituteQuery (url, map, userquery, csetacodec->mibEnum()); + + PDVAR ("substituted query", newurl); + + return newurl; +} + +void KURISearchFilterEngine::loadConfig() +{ + // Migrate from the old format, this block should remain until + // we can assume "every" user has upgraded to a KDE version that + // contains the sycoca based search provider configuration (malte). + // TODO: Remove in KDE 4 !!! This has been here a sufficient amount of time... + { + KSimpleConfig oldConfig(kapp->dirs()->saveLocation("config") + QString(name()) + "rc"); + oldConfig.setGroup("General"); + + if (oldConfig.hasKey("SearchEngines")) + { + // User has an old config file in his local config dir + PIDDBG << "Migrating config file to .desktop files..." << endl; + QString fallback = oldConfig.readEntry("InternetKeywordsSearchFallback"); + QStringList engines = oldConfig.readListEntry("SearchEngines"); + for (QStringList::ConstIterator it = engines.begin(); it != engines.end(); ++it) + { + if (!oldConfig.hasGroup(*it + " Search")) + continue; + + oldConfig.setGroup(*it + " Search"); + QString query = oldConfig.readEntry("Query"); + QStringList keys = oldConfig.readListEntry("Keys"); + QString charset = oldConfig.readEntry("Charset"); + oldConfig.deleteGroup(*it + " Search"); + + QString name; + for (QStringList::ConstIterator key = keys.begin(); key != keys.end(); ++key) + { + // take the longest key as name for the .desktop file + if ((*key).length() > name.length()) + name = *key; + } + + if (*it == fallback) + fallback = name; + SearchProvider *provider = SearchProvider::findByKey(name); + + if (provider) + { + // If this entry has a corresponding global entry + // that comes with KDE's default configuration, + // compare both and if thei're equal, don't + // create a local copy + if (provider->name() == *it && provider->query() == query && + provider->keys() == keys && (provider->charset() == charset || + (provider->charset().isEmpty() && charset.isEmpty()))) + { + PIDDBG << *it << " is unchanged, skipping" << endl; + continue; + } + + delete provider; + } + + KSimpleConfig desktop(kapp->dirs()->saveLocation("services", "searchproviders/") + name + ".desktop"); + desktop.setGroup("Desktop Entry"); + desktop.writeEntry("Type", "Service"); + desktop.writeEntry("ServiceTypes", "SearchProvider"); + desktop.writeEntry("Name", *it); + desktop.writeEntry("Query", query); + desktop.writeEntry("Keys", keys); + desktop.writeEntry("Charset", charset); + + PIDDBG << "Created searchproviders/" << name << ".desktop for " << *it << endl; + } + + oldConfig.deleteEntry("SearchEngines", false); + oldConfig.setGroup("General"); + oldConfig.writeEntry("InternetKeywordsSearchFallback", fallback); + + PIDDBG << "...completed" << endl; + } + } + + PIDDBG << "Keywords Engine: Loading config..." << endl; + + // Load the config. + KConfig config( name() + "rc", false, false ); + config.setGroup( "General" ); + + m_cKeywordDelimiter = config.readNumEntry("KeywordDelimiter", ':'); + m_bWebShortcutsEnabled = config.readBoolEntry("EnableWebShortcuts", true); + m_defaultSearchEngine = config.readEntry("DefaultSearchEngine"); + m_bVerbose = config.readBoolEntry("Verbose", false); + + // Use either a white space or a : as the keyword delimiter... + if (strchr (" :",m_cKeywordDelimiter) == 0) + m_cKeywordDelimiter = ':'; + + PIDDBG << "Keyword Delimiter: " << m_cKeywordDelimiter << endl; + PIDDBG << "Default Search Engine: " << m_defaultSearchEngine << endl; + PIDDBG << "Web Shortcuts Enabled: " << m_bWebShortcutsEnabled << endl; + PIDDBG << "Verbose: " << m_bVerbose << endl; +} diff --git a/kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.h b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.h new file mode 100644 index 000000000..d45c17033 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kuriikwsfiltereng.h @@ -0,0 +1,77 @@ +/* This file is part of the KDE project + + Copyright (C) 2002,2003 Dawit Alemayehu + Copyright (C) 1999 Simon Hausmann + Copyright (C) 1999 Yves Arrouye + + Advanced web shortcuts + Copyright (C) 2001 Andreas Hochsteger + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef __KURISearchFILTERENGINE_H__ +#define __KURISearchFILTERENGINE_H__ + +#include +#include + +#include + +class KURL; + + +class KURISearchFilterEngine +{ +public: + typedef QMap SubstMap; + + KURISearchFilterEngine(); + ~KURISearchFilterEngine() {}; + + QCString name() const; + + QString webShortcutQuery (const QString&) const; + + QString autoWebSearchQuery (const QString&) const; + + bool verbose() const { return m_bVerbose; } + + void loadConfig(); + + static KURISearchFilterEngine *self(); + +protected: + QString formatResult (const QString& url, const QString& cset1, const QString& cset2, + const QString& query, bool isMalformed) const; + + QString formatResult (const QString& url, const QString& cset1, const QString& cset2, + const QString& query, bool isMalformed, SubstMap& map) const; + +private: + QStringList modifySubstitutionMap (SubstMap& map, const QString& query) const; + + QString substituteQuery (const QString& url, SubstMap &map, + const QString& userquery, const int encodingMib) const; + + bool m_bVerbose; + bool m_bWebShortcutsEnabled; + char m_cKeywordDelimiter; + + QString m_defaultSearchEngine; + static KURISearchFilterEngine *s_pSelf; +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.cpp b/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.cpp new file mode 100644 index 000000000..d56220935 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.cpp @@ -0,0 +1,90 @@ +/* This file is part of the KDE project + Copyright (C) 1999 Simon Hausmann + Copyright (C) 2000 Yves Arrouye + Copyright (C) 2002, 2003 Dawit Alemayehu + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include + +#include +#include +#include +#include + +#include "ikwsopts.h" +#include "kuriikwsfiltereng.h" +#include "kurisearchfilter.h" + +/** + * IMPORTANT: If you change anything here, please run the regression test + * kdelibs/kio/tests/kurifiltertest + */ + +typedef KGenericFactory KURISearchFilterFactory; +K_EXPORT_COMPONENT_FACTORY(libkurisearchfilter, KURISearchFilterFactory("kcmkurifilt")) + +KURISearchFilter::KURISearchFilter(QObject *parent, const char *name, + const QStringList &) + :KURIFilterPlugin(parent, name ? name : "kurisearchfilter", 1.0), + DCOPObject("KURISearchFilterIface") +{ +} + +KURISearchFilter::~KURISearchFilter() +{ +} + +void KURISearchFilter::configure() +{ + if ( KURISearchFilterEngine::self()->verbose() ) + kdDebug() << "KURISearchFilter::configure: Config reload request..." << endl; + + KURISearchFilterEngine::self()->loadConfig(); +} + +bool KURISearchFilter::filterURI( KURIFilterData &data ) const +{ + if ( KURISearchFilterEngine::self()->verbose() ) + kdDebug() << "KURISearchFilter::filterURI: '" << data.typedString() << "'" << endl; + + QString result = KURISearchFilterEngine::self()->webShortcutQuery( data.typedString() ); + + if ( !result.isEmpty() ) + { + if ( KURISearchFilterEngine::self()->verbose() ) + kdDebug() << "Filtered URL: " << result << endl; + + setFilteredURI( data, KURL( result ) ); + setURIType( data, KURIFilterData::NET_PROTOCOL ); + return true; + } + + return false; +} + +KCModule *KURISearchFilter::configModule(QWidget *parent, const char *) const +{ + return new FilterOptions( KURISearchFilterFactory::instance(), parent, "kcmkurifilt"); +} + +QString KURISearchFilter::configName() const +{ + return i18n("Search F&ilters"); +} + +#include "kurisearchfilter.moc" diff --git a/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.desktop b/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.desktop new file mode 100644 index 000000000..0b1a36cfd --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.desktop @@ -0,0 +1,68 @@ +[Desktop Entry] +Type=Service +Name=SearchKeywordsFilter +Name[af]=Soektogsleutelwoordfilter +Name[az]=DaramaKəliməSüzgəci +Name[be]=Фільтр пошуку ключавых словаў +Name[br]=SilGerioùAlc'hwezKlask +Name[ca]=Filtre de paraules de recerca +Name[csb]=Filter kluczowëch słów +Name[cy]=HidlChwilioAllweddeiriau +Name[da]=SøgNøgleordsFilter +Name[de]=Suchstichwort-Filter +Name[el]=Φίλτρο λέξεων κλειδιών αναζήτησης +Name[eo]=Filtrilo por serĉaj ŝlosilvortoj +Name[es]=Filtro de palabras clave de búsqueda +Name[eu]=Bilaketarako gako-hitzen iragazkia +Name[fa]=پالایۀ واژه‌های کلیدی جستجو +Name[fr]=Filtre de mots clés de recherche +Name[fy]=SykwurdenFilter +Name[he]=מסנן מילות מפתח לחיפוש +Name[hi]=सर्च की-वर्ड्स फ़िल्टर +Name[hr]=Filtar ključnih riječi pretraživanja +Name[hu]=Kulcsszavak keresési szűrője +Name[id]=FilterPencarianKeyword +Name[is]=StikkorðaLeitarSía +Name[ja]=キーワード検索フィルタ +Name[ka]=ძიების საკვანძო სიტყვების ფილტრი +Name[kk]=Іздеу түйінді сөздер сүзгісі +Name[lo]=ຕົວກອງຄຳຄົ້ນຫາ +Name[lt]=PaieškosRaktažodžiųFiltras +Name[lv]=MeklēšanasAtslēgasvārduFiltrs +Name[mn]=Хайх түлхүүр үг-Шүүгч +Name[nds]=Filter för Söökafkörten +Name[ne]=शब्दकुञ्जी फिल्टर खोजी गर्नुहोस् +Name[nl]=ZoekTermenFilter +Name[nso]=Sesekodi sa Mantsuhlokwa a Nyako +Name[oc]=Filtre de paraules de cerca +Name[pa]=ਖੋਜ ਸ਼ਬਦ ਫਿਲਟਰ +Name[pl]=Filtr słów kluczowych +Name[pt]=Filtro de Palavras-chave de Busca +Name[pt_BR]=Filtro de Procura de Palavras-Chave +Name[ro]=Filtru de cuvinte cheie de căutare +Name[ru]=Фильтр ключевых слов поиска +Name[rw]=MuyunguruziAmagamborufunguzoIshakisha +Name[sk]=Filter Kľúčových slov Hľadania +Name[sl]=Filter ključnih besed za iskanje +Name[sr]=Филтер речи за претраживање +Name[sr@Latn]=Filter reči za pretraživanje +Name[sv]=Sökordsökningsfilter +Name[ta]=முக்கிய வார்த்தைகள் வடிகட்டியை தேடு +Name[te]=అన్వెషణ కీలకపదాల గలని +Name[tg]=Софи калидвожаҳои ҷустуҷӯӣ +Name[th]=ตัวกรองคำค้นหา +Name[tr]=TaramaKelimeSüzgeci +Name[tt]=EzläwTöpsuzSözgeçe +Name[uk]=Фільтр ключових слів Інтернет +Name[uz]=Qidirish kalit soʻzlar filteri +Name[uz@cyrillic]=Қидириш калит сўзлар филтери +Name[ven]=Filithara ya Khiimaipfi yau setsha +Name[vi]=Trình tìm các từ khoá +Name[wa]=PasseteCweraedjeDiMotsClés +Name[xh]=Phendla Amagama Angundoqo Ecebo Lokucoca Ulwelo +Name[zh_CN]=搜索关键字过滤 +Name[zh_TW]=搜索關鍵字過濾 +Name[zu]=Ihluzo lamagama abalulekile okusesha +X-KDE-Library=libkurisearchfilter +ServiceTypes=KURIFilter/Plugin +InitialPreference=4 diff --git a/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.h b/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.h new file mode 100644 index 000000000..0b8dd1b14 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/kurisearchfilter.h @@ -0,0 +1,50 @@ +/* This file is part of the KDE project + Copyright (C) 1999 Simon Hausmann + Copyright (C) 2000 Yves Arrouye + Copyright (C) 2002, 2003 Dawit Alemayehu + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __KURISEARCHFILTER_H__ +#define __KURISEARCHFILTER_H__ + +#include +#include + +#include + +class KInstance; + +class KURISearchFilter : public KURIFilterPlugin, public DCOPObject +{ + Q_OBJECT + K_DCOP +public: + KURISearchFilter(QObject *parent = 0, const char *name = 0, + const QStringList &args = QStringList() ); + ~KURISearchFilter(); + + virtual bool filterURI( KURIFilterData& ) const; + virtual KCModule *configModule(QWidget *parent = 0, const char *name = 0) const; + virtual QString configName() const; + +k_dcop: + virtual void configure(); +}; + +#endif + diff --git a/kcontrol/ebrowsing/plugins/ikws/searchprovider.cpp b/kcontrol/ebrowsing/plugins/ikws/searchprovider.cpp new file mode 100644 index 000000000..c9e13dc1f --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchprovider.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2000 Malte Starostik + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include "searchprovider.h" + +SearchProvider::SearchProvider(const KService::Ptr service) + : m_dirty(false) +{ + m_desktopEntryName = service->desktopEntryName(); + m_name = service->name(); + m_query = service->property("Query").toString(); + m_keys = service->property("Keys").toStringList(); + m_charset = service->property("Charset").toString(); +} + +void SearchProvider::setName(const QString &name) +{ + if (m_name == name) + return; + m_name = name; + m_dirty = true; +} + +void SearchProvider::setQuery(const QString &query) +{ + if (m_query == query) + return; + m_query = query; + m_dirty = true; +} + +void SearchProvider::setKeys(const QStringList &keys) +{ + if (m_keys == keys) + return; + m_keys = keys; + m_dirty = true; +} + +void SearchProvider::setCharset(const QString &charset) +{ + if (m_charset == charset) + return; + m_charset = charset; + m_dirty = true; +} + +SearchProvider *SearchProvider::findByDesktopName(const QString &name) +{ + KService::Ptr service = + KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(name)); + return service ? new SearchProvider(service) : 0; +} + +SearchProvider *SearchProvider::findByKey(const QString &key) +{ + KTrader::OfferList providers = + KTrader::self()->query("SearchProvider", QString("'%1' in Keys").arg(key)); + return providers.count() ? new SearchProvider(providers[0]) : 0; +} + diff --git a/kcontrol/ebrowsing/plugins/ikws/searchprovider.desktop b/kcontrol/ebrowsing/plugins/ikws/searchprovider.desktop new file mode 100644 index 000000000..35bb3242a --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchprovider.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=SearchProvider +Comment=Search Engine +Comment[af]=Soektog Masjien +Comment[ar]=محرك البحث +Comment[az]=Axtarış Mühərriki +Comment[be]=Рухавік пошуку +Comment[bn]=সার্চ ইঞ্জিন +Comment[br]=Keflusker klask +Comment[bs]=Tražilica +Comment[ca]=Motor de recerca +Comment[cs]=Vyhledávací stroj +Comment[csb]=Szëkôrz +Comment[cy]=Peiriant Chwilio +Comment[da]=Søgemaskine +Comment[de]=Suchmaschine +Comment[el]=Μηχανή αναζήτησης +Comment[eo]=Serĉilo +Comment[es]=Motor de búsqueda +Comment[et]=Otsingumootor +Comment[eu]=Bilaketa motorea +Comment[fa]=موتور جستجو +Comment[fi]=Hakukone +Comment[fo]=Leitiskipan +Comment[fr]=Moteur de recherche +Comment[fy]=Sykmasine +Comment[ga]=Inneall Cuardaigh +Comment[gl]=Ferramenta de Procura +Comment[he]=מנוע חיפוש +Comment[hi]=खोज इंजिन +Comment[hr]=Tražilica +Comment[hu]=Keresőmotor +Comment[is]=Leitarvél +Comment[it]=Motore di ricerca +Comment[ja]=検索エンジン +Comment[ka]=საძიებო სისტემა +Comment[kk]=Іздеу құралы +Comment[km]=ម៉ាស៊ីន​ស្វែងរក +Comment[ko]=검색 엔진 +Comment[lo]=ກົນໄກການຄົ້ນຫາ +Comment[lt]=Paieškos tarnyba +Comment[lv]=Meklēšanas dzinējs +Comment[mk]=Машина за пребарување +Comment[mn]=Хайлтын машин +Comment[ms]=Enjin Carian +Comment[mt]=Magna tat-Tfittxija +Comment[nb]=Søkemotor +Comment[nds]=Söökmaschien +Comment[ne]=इन्जीन खोज्नुहोस् +Comment[nl]=Zoekmachine +Comment[nn]=Søkjemotor +Comment[nso]=Engine ya Nyako +Comment[pa]=ਖੋਜ ਇੰਜਣ +Comment[pl]=Wyszukiwarka +Comment[pt]=Motor de Busca +Comment[pt_BR]=Mecanismo de procura +Comment[ro]=Motor de căutare +Comment[ru]=Поисковая машина +Comment[rw]=Moteri Ishakisha +Comment[se]=Ohcanmotor +Comment[sk]=Vyhľadávač +Comment[sl]=Iskalnik +Comment[sr]=Претраживачка машина +Comment[sr@Latn]=Pretraživačka mašina +Comment[ss]=Injini yekusesha +Comment[sv]=Sökmotor +Comment[ta]=தேடு இயந்திரம் +Comment[tg]=Мошини ҷустуҷӯӣ +Comment[th]=เครื่องมือสำหรับค้นหา +Comment[tr]=Arama Motoru +Comment[tt]=Ezläw Maşínası +Comment[uk]=Механізм пошуку +Comment[uz]=Qidirish vositasi +Comment[uz@cyrillic]=Қидириш воситаси +Comment[ven]=Nzhini yau setsha +Comment[vi]=Máy Tìm kiếm +Comment[wa]=Ricwerrece +Comment[xh]=Phendla Injini +Comment[zh_CN]=搜索引擎 +Comment[zh_TW]=搜索引擎 +Comment[zu]=Injini Yokusesha + +[PropertyDef::Keys] +Type=QStringList + +[PropertyDef::Query] +Type=QString + +[PropertyDef::Charset] +Type=QString diff --git a/kcontrol/ebrowsing/plugins/ikws/searchprovider.h b/kcontrol/ebrowsing/plugins/ikws/searchprovider.h new file mode 100644 index 000000000..b7916892c --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchprovider.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2000 Malte Starostik + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __SEARCHPROVIDER_H___ +#define __SEARCHPROVIDER_H___ + +#include + +class SearchProvider +{ +public: + SearchProvider() : m_dirty(false) {}; + SearchProvider(const KService::Ptr service); + + const QString &desktopEntryName() const { return m_desktopEntryName; } + const QString &name() const { return m_name; } + const QString &query() const { return m_query; } + const QStringList &keys() const { return m_keys; } + const QString &charset() const { return m_charset; } + bool isDirty() const { return m_dirty; } + + void setName(const QString &); + void setQuery(const QString &); + void setKeys(const QStringList &); + void setCharset(const QString &); + + static SearchProvider *findByDesktopName(const QString &); + static SearchProvider *findByKey(const QString &); +private: + QString m_desktopEntryName; + QString m_name; + QString m_query; + QStringList m_keys; + QString m_charset; + + bool m_dirty; +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.cpp b/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.cpp new file mode 100644 index 000000000..ca7161b1c --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2000 Malte Starostik + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "searchproviderdlg_ui.h" +#include "searchproviderdlg.h" +#include "searchprovider.h" + +SearchProviderDialog::SearchProviderDialog(SearchProvider *provider, + QWidget *parent, const char *name) + :KDialogBase(parent, name, true, QString::null, Ok|Cancel), + m_provider(provider) +{ + m_dlg = new SearchProviderDlgUI (this); + setMainWidget(m_dlg); + + enableButtonSeparator(true); + + m_dlg->leQuery->setMinimumWidth(kapp->fontMetrics().maxWidth() * 40); + + connect(m_dlg->leName, SIGNAL(textChanged(const QString &)), SLOT(slotChanged())); + connect(m_dlg->leQuery, SIGNAL(textChanged(const QString &)), SLOT(slotChanged())); + connect(m_dlg->leShortcut, SIGNAL(textChanged(const QString &)), SLOT(slotChanged())); + + // Data init + QStringList charsets = KGlobal::charsets()->availableEncodingNames(); + charsets.prepend(i18n("Default")); + m_dlg->cbCharset->insertStringList(charsets); + + if (m_provider) + { + setPlainCaption(i18n("Modify Search Provider")); + m_dlg->leName->setText(m_provider->name()); + m_dlg->leQuery->setText(m_provider->query()); + m_dlg->leShortcut->setText(m_provider->keys().join(",")); + m_dlg->cbCharset->setCurrentItem(m_provider->charset().isEmpty() ? 0 : charsets.findIndex(m_provider->charset())); + m_dlg->leName->setEnabled(false); + m_dlg->leQuery->setFocus(); + } + else + { + setPlainCaption(i18n("New Search Provider")); + m_dlg->leName->setFocus(); + enableButton(Ok, false); + } +} + +void SearchProviderDialog::slotChanged() +{ + enableButton(Ok, !(m_dlg->leName->text().isEmpty() + || m_dlg->leShortcut->text().isEmpty() + || m_dlg->leQuery->text().isEmpty())); +} + +void SearchProviderDialog::slotOk() +{ + if ((m_dlg->leQuery->text().find("\\{") == -1) + && KMessageBox::warningContinueCancel(0, + i18n("The URI does not contain a \\{...} placeholder for the user query.\n" + "This means that the same page is always going to be visited, " + "regardless of what the user types."), + QString::null, i18n("Keep It")) == KMessageBox::Cancel) + return; + + if (!m_provider) + m_provider = new SearchProvider; + m_provider->setName(m_dlg->leName->text().stripWhiteSpace()); + m_provider->setQuery(m_dlg->leQuery->text().stripWhiteSpace()); + m_provider->setKeys(QStringList::split(",", m_dlg->leShortcut->text().stripWhiteSpace())); + m_provider->setCharset(m_dlg->cbCharset->currentItem() ? m_dlg->cbCharset->currentText() : QString::null); + KDialog::accept(); +} + +#include "searchproviderdlg.moc" diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.h b/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.h new file mode 100644 index 000000000..5abb2f057 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000 Malte Starostik + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __SEARCHPROVIDERDLG_H___ +#define __SEARCHPROVIDERDLG_H___ + +#include + +class SearchProvider; +class SearchProviderDlgUI; + +class SearchProviderDialog : public KDialogBase +{ + Q_OBJECT + +public: + SearchProviderDialog(SearchProvider *provider, QWidget *parent = 0, const char *name = 0); + + SearchProvider *provider() { return m_provider; } + +protected slots: + void slotChanged(); + void slotOk(); + +private: + SearchProvider *m_provider; + SearchProviderDlgUI *m_dlg; +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg_ui.ui b/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg_ui.ui new file mode 100644 index 000000000..1a507c0ff --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviderdlg_ui.ui @@ -0,0 +1,137 @@ + +SearchProviderDlgUI + + + SearchProviderDlgUI + + + + 0 + 0 + 399 + 206 + + + + + unnamed + + + 0 + + + + leName + + + Enter the human readable name of the search provider here. + + + + + lbCharset + + + &Charset: + + + cbCharset + + + Select the character set that will be used to encode your search query + + + + + lbQuery + + + Search &URI: + + + leQuery + + + <qt> +Enter the URI that is used to do a search on the search engine here.<br/>The whole text to be searched for can be specified as \{@} or \{0}.<br/> +Recommended is \{@}, since it removes all query variables (name=value) from the resulting string whereas \{0} will be substituted with the unmodified query string.<br/>You can use \{1} ... \{n} to specify certain words from the query and \{name} to specify a value given by 'name=value' in the user query.<br/>In addition it is possible to specify multiple references (names, numbers and strings) at once (\{name1,name2,...,"string"}).<br/>The first matching value (from the left) will be used as substitution value for the resulting URI.<br/>A quoted string can be used as default value if nothing matches from the left of the reference list. +</qt> + + + + + lbName + + + Search &provider name: + + + leName + + + Enter the human readable name of the search provider here. + + + + + leShortcut + + + <qt> +The shortcuts entered here can be used as a pseudo-URI scheme in KDE. For example, the shortcut <b>av</b> can be used as in <b>av</b>:<b>my search</b> +</qt> + + + + + lbShortcut + + + UR&I shortcuts: + + + leShortcut + + + <qt> +The shortcuts entered here can be used as a pseudo-URI scheme in KDE. For example, the shortcut <b>av</b> can be used as in <b>av</b>:<b>my search</b> +</qt> + + + + + leQuery + + + <qt> +Enter the URI that is used to do a search on the search engine here.<br/>The whole text to be searched for can be specified as \{@} or \{0}.<br/> +Recommended is \{@}, since it removes all query variables (name=value) from the resulting string whereas \{0} will be substituted with the unmodified query string.<br/>You can use \{1} ... \{n} to specify certain words from the query and \{name} to specify a value given by 'name=value' in the user query.<br/>In addition it is possible to specify multiple references (names, numbers and strings) at once (\{name1,name2,...,"string"}).<br/>The first matching value (from the left) will be used as substitution value for the resulting URI.<br/>A quoted string can be used as default value if nothing matches from the left of the reference list. +</qt> + + + + + cbCharset + + + Select the character set that will be used to encode your search query. + + + + + + + + leName + leQuery + leShortcut + cbCharset + + + + klineedit.h + klineedit.h + klineedit.h + kcombobox.h + + diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/Makefile.am b/kcontrol/ebrowsing/plugins/ikws/searchproviders/Makefile.am new file mode 100644 index 000000000..66a6ab8bf --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/Makefile.am @@ -0,0 +1,91 @@ +# List generated with ls -1 *.desktop | sed -e 's/^/\t\t/;s/$/ \\/' +services_DATA = \ + acronym.desktop \ + alexa.desktop \ + alexa_url.desktop \ + alltheweb.desktop \ + altavista.desktop \ + amg.desktop \ + appsy.desktop \ + austronaut.desktop \ + backports.desktop \ + bugft.desktop \ + bugno.desktop \ + call.desktop \ + cia.desktop \ + citeseer.desktop \ + cpan.desktop \ + ctan_cat.desktop \ + ctan.desktop \ + dbug.desktop \ + de2en.desktop \ + de2fr.desktop \ + deb.desktop \ + dmoz.desktop \ + docbook.desktop \ + doi.desktop \ + en2de.desktop \ + en2es.desktop \ + en2fr.desktop \ + en2it.desktop \ + es2en.desktop \ + excite.desktop \ + feedster.desktop \ + foldoc.desktop \ + fr2de.desktop \ + fr2en.desktop \ + freedb.desktop \ + freshmeat.desktop \ + froogle.desktop \ + fsd.desktop \ + google_advanced.desktop \ + google.desktop \ + google_groups.desktop \ + google_images.desktop \ + google_lucky.desktop \ + google_movie.desktop \ + google_news.desktop \ + gracenote.desktop \ + grec.desktop \ + hotbot.desktop \ + hyperdictionary.desktop \ + hyperdictionary_thesaurus.desktop \ + imdb.desktop \ + it2en.desktop \ + jeeves.desktop \ + kde.desktop \ + kde_websvn.desktop \ + katatudo.desktop \ + leo.desktop \ + lycos.desktop \ + mamma.desktop \ + metacrawler.desktop \ + msdn.desktop \ + netcraft.desktop \ + nl-telephone.desktop \ + nl-teletekst.desktop \ + pgpkeys.desktop \ + php.desktop \ + python.desktop \ + qt.desktop \ + qt3.desktop \ + rae.desktop \ + rfc.desktop \ + rpmfind.desktop \ + ruby_application_archive.desktop \ + seek.desktop \ + sourceforge.desktop \ + technorati.desktop \ + technoratitags.desktop \ + thesaurus.desktop \ + tvtome.desktop \ + uspto.desktop \ + vivisimo.desktop \ + voila.desktop \ + webster.desktop \ + whatis.desktop \ + wikipedia.desktop \ + wiktionary.desktop \ + wordref.desktop + +servicesdir = $(kde_servicesdir)/searchproviders diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/acronym.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/acronym.desktop new file mode 100644 index 000000000..ddd1039d4 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/acronym.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Type=Service +Name=Acronym Database +Name[af]=Akroniem Databasis +Name[ar]=قاعدة بيانات النحت الأوائلي ( Acronym ) +Name[az]=Akronim Kəlimə Databeyzi +Name[be]=Скарачэнні +Name[bn]=অ্যাক্রোনিম ডেটাবেস +Name[bs]=Baza akronima +Name[ca]=Base de dades d'acrònims +Name[cs]=Databáze akronymů +Name[csb]=Baza akronimów +Name[cy]=Cronfa Llythrenwau +Name[da]=Akronymdatabase +Name[de]=Acronym-Datenbank +Name[el]=Βάση δεδομένων αρκτικόλεξου +Name[eo]=Mallongigo-datumbazo +Name[es]=Base de datos Acronym +Name[et]=Akronüümide andmebaas +Name[eu]=Acronym datu-basea +Name[fa]=دادگان سرنام +Name[fi]=Akronyymitietokanta +Name[fo]=Styttingardátugrunnur +Name[fr]=Base de données Acronym +Name[fy]=Acroniemen databank +Name[ga]=Bunachar Sonraí Acrainmeacha +Name[gl]=Base de Datos de Acrónimos +Name[he]=בסיס נתונים של מילים נרדפות +Name[hi]=एक्रोनिम डाटाबेस +Name[hr]=Baza podataka kratica +Name[hu]=Mozaikszó-adatbázis +Name[is]=Samheitagrunnur +Name[it]=Database acronimi +Name[ka]=აკრონიმთა ბაზა +Name[kk]=Қысқартулар дерек қоры +Name[km]=មូលដ្ឋាន​ទិន្នន័យ​អក្សរ​កាត់ +Name[ko]=두문자어 정보 +Name[lo]=ຖານຂໍ້ມູນ Acronym +Name[lt]=Akronimų duomenų bazė +Name[lv]=Akronīmu Datubāze +Name[mk]=База на податоци со акроними +Name[mn]=Acronym-Өгөгдлийн бааз +Name[ms]=Pangkalan Data Akronim +Name[mt]=Database ta' taqsiriet +Name[nb]=Forkortingsdatabase +Name[nds]=Akronüm-Datenbank +Name[ne]=एक्रोनम डेटाबेस +Name[nl]=Acroniemen database +Name[nn]=Forkortingsdatabase +Name[nso]=Database ya Acronym +Name[pa]=ਅਕਰੋਨਮ ਡਾਟਾਬੇਸ +Name[pl]=Baza akronimów +Name[pt]=Base de Dados de Acrónimos +Name[pt_BR]=Banco de Acrônimos +Name[ro]=Bază de date de acronime +Name[ru]=База данных акронимов +Name[rw]=Ububikoshingiro bw'Impine +Name[se]=Oanádusdiehtovuođđu +Name[sk]=Databáza skratiek +Name[sl]=Zbirka okrajšav +Name[sr]=База скраћеница +Name[sr@Latn]=Baza skraćenica +Name[ss]=Silulu semniningwane yetifinyeto +Name[ta]=குறுஞ்சொற் தரவுத்தளம் +Name[tg]=Бонки иттилооти маҳқуф +Name[th]=ฐานข้อมูล Acronym +Name[tr]=Eş Kelime Veritabanı +Name[tt]=Qısqartma Biremlege +Name[uk]=База даних акронімів +Name[uz]=Qisqartma maʼlumot bazasi +Name[uz@cyrillic]=Қисқартма маълумот базаси +Name[ven]=Databeizi ya tshikau +Name[vi]=Cơ sở dữ liệu Viết tắt +Name[wa]=Båzes di dnêyes d' acronimes +Name[xh]=Isiseko sedata Segama elenziwe ngonoobumba bamanye amagama +Name[zh_CN]=首字母缩写数据库 +Name[zh_TW]=Acronym 資料庫 +Name[zu]=Isiqu sedata samagama asho okufanayo +ServiceTypes=SearchProvider +Keys=ad,acro,acronym +Query=http://www.chemie.de/tools/acronym.php3?language=e&acronym=\\{@} +Query[ne]=http://www.chemie.de/tools/acronym.php3?language=eacronym=\\{@} +Query[sk]=http://www.chemie.de/tools/acronym.php3?language=sk&acronym=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa.desktop new file mode 100644 index 000000000..aaa75e772 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Service +Name=Alexa +Name[bn]=অ্যালেক্সা +Name[eo]=Aleksa +Name[hi]=अलेक्सा +Name[lo]=ສຸວັນທອງ +Name[ne]=एलेक्सा +Name[pa]=ਅਲੀਕਸਾ +Name[ta]=அலெக்சா +Name[te]=ఎలెక్సా +ServiceTypes=SearchProvider +Keys=al,alexa +Query=http://info.alexa.com/search?q=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa_url.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa_url.desktop new file mode 100644 index 000000000..70b93be4d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/alexa_url.desktop @@ -0,0 +1,43 @@ +[Desktop Entry] +Type=Service +Name=Alexa URL +Name[bn]=অ্যালেক্সা ইউ-আর-এল +Name[br]=URL Alexa +Name[ca]=URL d'Alexa +Name[csb]=Lënk Alexa +Name[da]=Alexa-URL +Name[de]=Alexa-Adresse +Name[eo]=Aleksa URL +Name[es]=URL de Alexa +Name[fa]=نشانی وب Alexa +Name[fr]=URL Alexa +Name[fy]=Alexa URL-adres +Name[ga]=URL Alexa +Name[he]=כתובת של Alexa +Name[hi]=एलेक्सा यूआरएल +Name[is]=Alexa slóð +Name[it]=URL Alexa +Name[lo]=ສຸວັນທອງ +Name[mn]=Alexa-Хаяг +Name[ms]=URL Alexa +Name[mt]=URL Alexa +Name[nb]=Alexa-nettadresse +Name[ne]=एलेक्सा यूआरएल +Name[nl]=Alexa URL-adres +Name[nso]=URL ya Alexa +Name[pa]=ਅਲੀਕਸਾ URL +Name[pl]=Odnośnik Alexa +Name[pt]=URL do Alexa +Name[pt_BR]=URL do Alexa +Name[ro]=URL Alexa +Name[sl]=URL Alexe +Name[ss]=I-URL ye Alexa +Name[sv]=Alexa webbadress +Name[ta]=அலெக்சா URL +Name[te]=ఎలెక్సా యూ అర్ ఎల్ +Name[vi]=Địa chỉ Alexa +Name[wa]=URL d' Alexa +Name[zu]=I-URL ye-Alexa +ServiceTypes=SearchProvider +Keys=alu,url +Query=http://info.alexa.com/data/details?url=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/alltheweb.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/alltheweb.desktop new file mode 100644 index 000000000..fca85d4d2 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/alltheweb.desktop @@ -0,0 +1,45 @@ +[Desktop Entry] +Type=Service +Name=AllTheWeb fast +Name[af]=Allesvandieweb vinnige +Name[az]=AllTheWeb +Name[ca]=AllTheWeb ràpid +Name[csb]=AllTheWeb - tekstë, filmë, teledisczi, serwerë FTP +Name[cy]=AllTheWeb cyflym +Name[da]=AllTheWeb hurtigt +Name[eo]=La tuta teksaĵo rapide +Name[es]=AllTheWeb de Fast +Name[fa]=سرعت AllTheWeb +Name[gl]=AllTheWeb rápido +Name[hi]=आल-द-वेब फास्ट +Name[hr]=AllTheWeb brzo +Name[hu]=AllTheWeb (gyors) +Name[is]=AllTheWeb hratt +Name[it]=AllTheWeb veloce +Name[km]=AllTheWeb លឿន +Name[lo]=AlltheWebfast +Name[ne]=सबै वेब छिटो +Name[nn]=AllTheWeb Fast +Name[nso]=Web Kamoka ka lebelo +Name[pa]=ਸਭ ਵੈਬ ਤੇਜ਼ +Name[pl]=AllTheWeb - teksty, filmy, teledyski, serwery FTP +Name[pt]=AllThe Web fast +Name[pt_BR]=AllTheWeb +Name[ro]=AllTheWeb rapid +Name[rw]=Imbugamakuru Zose zihuta +Name[sl]=AllTheWeb hitro +Name[sv]=AllTheWeb snabb +Name[ta]=எல்லா வலைப்பின்னலும் விரைவாக உள்ளது +Name[th]=AllTheWeb หารวดเร็ว +Name[tr]=AllTheWeb +Name[tt]=AllTheWeb +Name[uz]=Butun vebni (tez) +Name[uz@cyrillic]=Бутун вебни (тез) +Name[ven]=Webu dzothe ngau tavhanya +Name[vi]=Tìm mọi trang mạng nhanh +Name[wa]=AllTheWeb rade +Name[xh]=Yonke i Web ngokukhawuleza +Name[zu]=Yonke i-Web ngokushesha +ServiceTypes=SearchProvider +Keys=atw,alltheweb +Query=http://www.alltheweb.com/search?exec=FAST+Search&type=all&query=\\{@}&cat=web diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/altavista.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/altavista.desktop new file mode 100644 index 000000000..42b273d68 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/altavista.desktop @@ -0,0 +1,23 @@ +[Desktop Entry] +Type=Service +Name=AltaVista +Name[af]=Altavista +Name[csb]=AltaVista - szëkôrz starnów WWW +Name[eo]=Altavisto +Name[et]=Altavista +Name[hi]=अल्टाविस्टा +Name[lo]=Altavista +Name[ne]=अल्टाभिस्टा +Name[pa]=ਅਲਟਾ ਵੀਸਟਾ +Name[pl]=AltaVista - wyszukiwarka stron WWW +Name[sv]=Altavista +Name[ta]=அல்டாவிஸ்டா +Name[te]=ఆల్టావిస్టా +Name[th]=อัลต้าวิสต้า +ServiceTypes=SearchProvider +Keys=av,altavista +Query=http://www.altavista.com/cgi-bin/query?pg=q&kl=XX&stype=stext&q=\\{@} +Query[nb]=http://no.altavista.com/cgi-bin/query?pg=q&kl=XX&stype=stext&q=\\{@} +Query[ne]=http://www.altavista.com/cgi-bin/query?pg=qkl=XX&stype=stext&q=\\{@} +Query[nn]=http://no.altavista.com/cgi-bin/query?pg=q&kl=XX&stype=stext&q=\\{@} +Query[ro]=http://www.altavista.com/cgi-bin/query?pg=q&kl=ro&stype=stext&q=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/amg.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/amg.desktop new file mode 100644 index 000000000..908f3fee8 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/amg.desktop @@ -0,0 +1,49 @@ +[Desktop Entry] +Hidden=false +Keys=amg +Name=All Music Guide +Name[ar]=مرشد لكل الموسيقى +Name[az]=Geniş Musiqi Rəhbəri +Name[bn]=অল মিউজিক গাইড +Name[bs]=Vodič za svu muziku +Name[ca]=Guia per a tota la música +Name[csb]=Mùzyczny prowôdnik +Name[cy]=Canllaw Cerdd +Name[da]=All musik-guide +Name[el]=Οδηγός All Music +Name[eo]=Konciza muzik-gvidlibro +Name[es]=Guía All Music +Name[eu]=All Music gida +Name[fa]=کل راهنمای موسیقی +Name[fr]=Guide All Music +Name[gl]=Guia de Toda a Música +Name[he]=מדריך למוסיקה +Name[hi]=सम्पूर्ण संगीत मार्गदर्शिका +Name[hr]=Glazbeni vodič +Name[is]=Tónlistarhandbók +Name[it]=Guida All Music +Name[km]=មគ្គុទ្ទេសក៍​តន្ត្រី​ទាំងអស់ +Name[ms]=Panduan Semua Muzik +Name[ne]=सबै सङ्गीत मार्गदर्शक +Name[pa]=ਸਭ ਸੰਗੀਤ ਗਾਈਡ +Name[pl]=Przewodnik muzyczny +Name[pt]=Guia 'Toda a Música' +Name[pt_BR]=Guia All Music +Name[ro]=Ghid muzical complet +Name[rw]=Inyifashisho y'Imiziki Yose +Name[sl]=Vodnik All Music +Name[sr]=Свемузички водич +Name[sr@Latn]=Svemuzički vodič +Name[sv]=Guiden All Musik +Name[ta]=அனைத்து இசை துணை +Name[tg]=Ҳамаи мусиқихо +Name[tr]=Müzik Kılavuzu +Name[tt]=All Music +Name[vi]=Hướng dẫn Âm nhạc +Name[wa]=Guide All Music +Name[zh_CN]=全音乐指南 +Name[zh_TW]=所有音樂指南 +Query=http://www.allmusic.com/cg/amg.dll?p=amg&opt1=1&sql=\\{@} +Query[ne]=http://www.allmusic.com/cg/amg.dll?p=amgopt1=1&sql=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/appsy.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/appsy.desktop new file mode 100644 index 000000000..13584e1f3 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/appsy.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +Type=Service +Name=KDE App Search +Name[af]=KDE App Soektog +Name[ar]=بحث عن تطبيقات KDE +Name[az]=KDE Proqram Axtarışı +Name[be]=Пошук праграмаў KDE +Name[bn]=কে.ডি.ই. অ্যাপলিকেশন অনুসন্ধান +Name[bs]=KDE App tražilica +Name[ca]=Recerca d'aplicacions KDE +Name[cs]=Vyhledávání KDE aplikací +Name[csb]=Szëkba programów KDE +Name[cy]=KDE App Chwilio +Name[da]=KDE Prog-søgning +Name[de]=Programmsuche +Name[el]=Αναζήτηση εφαρμογών του KDE +Name[eo]=KDE app-serĉo +Name[es]=Búsqueda de apps. de KDE +Name[et]=KDE rakenduste otsing +Name[eu]=KDEren aplikazio bilaketa +Name[fa]=جستجوی کاربرد KDE +Name[fi]=KDE-sovellusten haku +Name[fo]=KDE Forritsleitan +Name[fr]=Application de recherche de KDE +Name[fy]=Programma's sykje +Name[ga]=Cuardach Feidhmchláir KDE +Name[gl]=Procura de Aplicacións de KDE +Name[he]=חיפוש יישומי KDE +Name[hi]=केडीई एप खोज +Name[hr]=KDE pretraživanje aplikacija +Name[hu]=KDE alkalmazások keresése +Name[it]=Ricerca applicazioni di KDE +Name[ja]=KDE アプリケーション検索 +Name[ka]=KDE–ს პროგრამების ძებნა +Name[kk]=KDE қолданбаларын табу +Name[km]=ស្វែងរក​កម្មវិធី KDE +Name[ko]=KDE 프로그램 검색 +Name[lo]=ຝຣັ່ງເສດ +Name[lt]=KDE programų paieška +Name[lv]=KDE programmu meklēšana +Name[mk]=Пребарување за KDE-апликации +Name[mn]=Програм хайх +Name[ms]=Carian Aplikasi KDE +Name[mt]=Fittex Programmi KDE +Name[nb]=KDE programsøk +Name[nds]=KDE Programmsöök +Name[ne]=KDE App खोजी +Name[nl]=Programma's zoeken +Name[nn]=KDE Programsøk +Name[nso]=Nyako ya App ya KDE +Name[pa]=KDE ਕਾਰਜ ਖੋਜ +Name[pl]=Wyszukiwanie programów KDE +Name[pt]=Pesquisa de Aplicações do KDE +Name[pt_BR]=Busca por aplicativos do KDE +Name[ro]=Căutare aplicații KDE +Name[ru]=Поиск приложений +Name[rw]=Ishakisha rya KDE App +Name[se]=KDE prográmmaohci +Name[sk]=Hľadanie aplikácií KDE +Name[sl]=Iskanje programov za KDE +Name[sr]=Претраживање KDE програма +Name[sr@Latn]=Pretraživanje KDE programa +Name[ss]=Kusesha kwe App ku KDE +Name[sv]=KDE-programsökning +Name[ta]=KDE App தேடுதல் +Name[te]=కెడిఈ కార్యక్రమాల అన్వెషణ +Name[tg]=Ҷустуҷӯи барномаи KDE +Name[th]=ค้นหาแอพพลิเคชั่น KDE +Name[tr]=KDE Uygulama Arayıcı +Name[tt]=KDE App Ezläw +Name[uk]=Пошук програм KDE +Name[uz]=KDE dasturlarida qidirish +Name[uz@cyrillic]=KDE дастурларида қидириш +Name[ven]=U setsha ha apulifikhesheni ya KDE +Name[vi]=Tìm Ứng dụng KDE +Name[wa]=Programe di cweraedje di KDE +Name[xh]=Uphendlo lwe KDE App +Name[zh_CN]=KDE 应用程序搜索 +Name[zh_TW]=KDE 程式搜尋 +Name[zu]=Usesho lwe-App lwe-KDE +ServiceTypes=SearchProvider +Keys=apps,appsy +Query=http://www.kde-apps.org/content/search.php?search=Search&name=\\{@} +Query[ne]=http://www.kde-apps.org/content/search.php?search=Searchname=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/austronaut.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/austronaut.desktop new file mode 100644 index 000000000..9dddb3a59 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/austronaut.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Type=Service +Name=AustroNaut +Name[af]=Ruimtevaarder +Name[bn]=অস্ট্রো-নট +Name[eo]=Aŭstronaŭto +Name[hi]=आस्ट्रोनॉट +Name[ne]=एस्ट्रोनट +Name[pa]=ਅਸਟਰੋਨਾਊਟ +Name[sv]=Astronaut +Name[ta]=ஆஸ்ட்ரோநட் +Name[te]=ఆస్ట్రొనాట్ +Name[zu]=Umuntu wasemkhathini +ServiceTypes=SearchProvider +Keys=austro,austronaut +Query=http://austronaut.at/page.php?begriff=\{@}&wo=at +Query[ko]=http://austronaut.at/page.php?begriff=\\{@}&wo=at +Query[ne]=http://austronaut.at/page.php?begriff=\{@}wo=at diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/backports.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/backports.desktop new file mode 100644 index 000000000..ac9c933fb --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/backports.desktop @@ -0,0 +1,66 @@ +[Desktop Entry] +Keys=backports +Name=Debian Backports Search +Name[af]=Debian Backports Soektog +Name[az]=Debian Backports Axtarışı +Name[be]=Пошук Debian Backports +Name[bn]=ডেবিয়ান ব্যাকপোর্ট অনুসন্ধান +Name[ca]=Cerca de reratransports Debian +Name[cs]=Vyhledávání v Debian Backports +Name[csb]=Szëkba starszëch paczétów Debiana +Name[da]=Debian Backports søgning +Name[de]=Suche für Debian Backports +Name[el]=Αναζήτηση νέων Πακέτων Debian για σταθερή έκδοση +Name[eo]=Retradukaĵa serĉo de Debiano +Name[es]=Búsqueda de backports de Debian +Name[et]=Debiani backport'ide otsing +Name[eu]=Debian Backports bilaketa +Name[fa]=جستجوی پس‌درگاههای دبیان +Name[fi]=Debianin takaisinsovittamishaku +Name[fr]=Recherche dans le système de rétroportage de Debian +Name[gl]=Procura de Backports de Debian +Name[he]=חיפוש של backports עבור דביאן +Name[hi]=डेबियन बैकपोर्ट्स खोज +Name[hr]=Debian pretraživanje povratnih portova +Name[hu]=Debian Backports-keresés +Name[is]=Debian Backports leit +Name[it]=Ricerca Debian backports +Name[ja]=Debian バックポート検索 +Name[kk]=Debian порттарын табу +Name[km]=ស្វែងរក Debian Backports +Name[ko]=데비안 백포트 검색 +Name[lt]=Debian Backports paieška +Name[mk]=Пребарување во Debian Backports +Name[ms]=Carian Port Belakang Debian +Name[mt]=Tfittxija tal-Backports tad-Debian +Name[nb]=Søk etter tilbakeporta Debian-pakker +Name[nds]=Söök na Debian-Backports +Name[ne]=डेबियन ब्याकस्पोर्टस खोजी +Name[nn]=Søk etter tilbakeporta Debian-pakkar +Name[pa]=ਡੇਬੀਅਨ ਬੈਕਪੋਰਟ ਖੋਜ +Name[pl]=Wyszukiwanie starszych pakietów Debiana +Name[pt]=Procura de Transposições para Versões Anteriores da Debian +Name[pt_BR]=Busca de Backports Debian +Name[ro]=Căutare în sistemul Debian Backports +Name[ru]=Поиск портов Debian +Name[rw]=Ishakisha ImiyoboroInyuma Debiyani +Name[se]=Oza maŋosportejuvvon Debian-páhkaid +Name[sk]=Hľadanie v Debian Backports +Name[sl]=Iskanje po prenosih v Debian +Name[sr]=Debian-ова Backports претрага +Name[sr@Latn]=Debian-ova Backports pretraga +Name[sv]=Sökning i Debians uppdateringar +Name[ta]=டெபியன் பின்முனையங்கள் தேடல் +Name[te]=డెబియన్ బేక్ పొర్ట్ల అన్వెషణ +Name[tg]=Ҷустуҷӯи Debian Backports +Name[th]=ค้นหา Debian Backports +Name[tr]=Debian Arkakapı Arama +Name[tt]=Debian Portların Ezläw +Name[uk]=Пошук серед додаткових пакетів Debian +Name[vi]=Tìm kiếm trên Cổng sau Debian +Name[wa]=Cweraedje Backports Debian +Name[zh_CN]=Debian 后端搜索 +Name[zh_TW]=Debian Backports 搜尋 +Query=http://www.backports.org/package.php?search=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/bugft.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/bugft.desktop new file mode 100644 index 000000000..1984716d1 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/bugft.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Keys=bugft +Name=KDE Bug Database Fulltext Search +Name[af]=KDE Fout Databasis voltext Soektog +Name[ar]=بحث عن نص كلي في قاعدة بيانات عيوب كيدي +Name[az]=KDE Xəta Databeyzi Tam Sözcük Axtarışı +Name[be]=Паўнатэкставы пошук па базе памылак KDE +Name[bn]=কে.ডি.ই. বাগ ডেটাবেস-এ পূর্ণ টেক্সট অনুসন্ধান +Name[bs]=Tekstualna pretraga KDE baze bugova +Name[ca]=Cercador de text per la base de dades d'errors de KDE +Name[cs]=Plnotextové vyhledávání v databázi chyb KDE +Name[csb]=Baza felów KDE - szëkba w òpisach felów +Name[cy]=Chwilio Llawn-destun y Gronfa Gwallau KDE +Name[da]=Fuldtekst-søgning i KDE's fejldatabase +Name[de]=KDE-Problemdatenbank: Volltextsuche +Name[el]=Αναζήτηση πλήρους κειμένου στη βάση δεδομένων σφαλμάτων του KDE +Name[eo]=Plenteksta serĉo en la KDEa Erarodatumbazo +Name[es]=Búsqueda textual en la base de datos de fallos de KDE +Name[et]=Täisteksti otsing KDE vigade andmebaasist +Name[eu]=KDEren akatsen datu-baseko testu erako bilaketa +Name[fa]=جستجوی متن کامل دادگان اشکال KDE +Name[fi]=KDE-vikailmoitustietokannan tekstihaku +Name[fo]=Leita í villudátugrunnur KDE's +Name[fr]=Recherche de bogue de KDE par texte +Name[fy]=KDE Bug Databank - folsleine-tekst-sykaksje +Name[gl]=Procura de Texto Completo na Base de Datos de Erros de KDE +Name[he]=חיפוש של טקסט מלא ברשימת באגים של KDE +Name[hi]=केडीई बग डाटाबेस संपूर्ण-पाठ खोज +Name[hr]=Pretraga KDE baze podataka o nedostacima pomoću potpunog teksta +Name[hu]=A KDE hibaadatbázis teljes szöveges keresési eszköze +Name[is]=Leit eftir orðum í KDE villugagnagrunni +Name[it]=Ricerca testo completo nel Database dei bug di KDE +Name[ja]=KDE バグデータベース全文検索 +Name[ka]=KDE–ს შეცდომების ძებნა სრული ტექსტით +Name[kk]=KDE қателер дерек қорында толық мәтінді іздеу +Name[km]=ស្វែងរក​ជា​អត្ថបទ​ពេញលេញ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ​កំហុស KDE +Name[ko]=KDE 버그 데이터베이스 전체 텍스트 검색 +Name[lo]=ຄົ້ນຫາຖານຂໍ້ມູນບັກ KDE ແບບຂໍ້ຄວາມ +Name[lv]=KDE Kļūdu Datubāzes pilnteksta meklēšana +Name[mk]=База на податоци со бубачки од KDE, пребарување по цел текст +Name[mn]=КДЭ-Асуудлын бааз: Бүтэн текст хайх +Name[ms]=Carian Teks Penuh Pangkalan Data Pepijat +Name[mt]=Database ta' bugs tal-KDE - tfittxija bil-kliem +Name[nb]=Fulltekstsøk i feildatabasen til KDE +Name[nds]=KDE Fehler-Datenbank: Vulltext-Söök +Name[ne]=KDE बग डेटाबेस फुलटेक्स्ट खोजी +Name[nl]=KDE Bug Database - volledige-tekst-zoekactie +Name[nn]=Fulltekstsøk i feildatabasen til KDE +Name[nso]=Nyako ya Sengwalwana seo se Tletsego sa Database ya Bug ya KDE +Name[pa]=KDE ਬੱਗ ਡਾਟਾਬੇਸ ਪੂਰਾ-ਪਾਠ ਖੋਜ +Name[pl]=Baza błędów KDE - wyszukiwanie w opisach błędów +Name[pt]=Pesquisa por Nome Completo na Base de Dados de Erros do KDE +Name[pt_BR]=Procura por texto no banco de erros do KDE +Name[ro]=Baza de date de erori KDE - căutare integrală de text +Name[ru]=Полнотекстовый поиск ошибок в базе KDE +Name[rw]=Ishakisha Mwandikowuzuye ry'Ububikoshingiro bw'Ikosaporogaramu KDE +Name[se]=KDE dihkkediehtovuođu ollesteakstaohcan +Name[sk]=Hľadanie fulltext v KDE databáze chýb +Name[sl]=Iskanje besedila po zbirki hroščev v KDE +Name[sr]=KDE база грешака са подршком за пуну претрагу текста +Name[sr@Latn]=KDE baza grešaka sa podrškom za punu pretragu teksta +Name[sv]=Textsökning i KDE:s feldatabas +Name[ta]=KDE பிழை தகவல்தள முழு உரை தேடுதல் +Name[te]=కెడిఈ తప్పుల డాటాబేస్ పూర్తి వచన అన్వెషణ +Name[tg]=Ҷустуҷӯи тамоми матни бонки иттилооти ишколоти KDE +Name[th]=ค้นหาฐานข้อมูลบัก KDE แบบครบถ้วน +Name[tr]=KDE Hata Veritabanı Tam Sözcük Arama +Name[tt]=KDE Bet Biremlegendä Mäten buyınça Ezläw +Name[uk]=Повнотекстовий пошук у базі даних KDE +Name[uz]=KDE xato maʼlumot bazasi (butun matnni qidirish) +Name[uz@cyrillic]=KDE хато маълумот базаси (бутун матнни қидириш) +Name[ven]=Databeizi ya KDE baga ya manwalwafhelela a u todulusa +Name[vi]=Tìm kiếm cơ sở dữ liệu lỗi của KDE, dùng toàn bộ dòng từ khoá đã nhập +Name[wa]=Cweraedje di tecse el båze di dnêyes des bugs di KDE +Name[xh]=Uphendlo lwesiseko sedata ye KDE Bug Olubhaliweyo ngokupheleleyo +Name[zh_CN]=KDE 错误数据库全文检索 +Name[zh_TW]=KDE 臭蟲資料庫全文檢索 +Name[zu]=Usesho lwe-KDE lombhalo ogcwele lwesiqu sedata sedata +Query=http://bugs.kde.org/simple_search.cgi?id=\\{1}+\\{2}+\\{3}+\\{4}+\\{5}+\\{6}+\\{7}+\\{8}+\\{9} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/bugno.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/bugno.desktop new file mode 100644 index 000000000..4e495a4a5 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/bugno.desktop @@ -0,0 +1,82 @@ +[Desktop Entry] +Keys=bug,bugno,bugnr +Name=KDE Bug Database Bug Number Search +Name[af]=Kde Fout Databasis Fout Nommer Soektog +Name[ar]=بحث عن رقم عيب في قاعدة بيانات عيوب كيدي +Name[az]=KDE Xəta Databeyzi Xəta Numarasıyla Axtarış +Name[be]=Пошук па нумару памылкі ў базе памылак KDE +Name[bn]=কে.ডি.ই. বাগ ডেটাবেস-এ বাগ সংখ্যা অনুসন্ধান +Name[bs]=Numerička pretraga KDE baze bugova +Name[ca]=Cercador per número per la base de dades d'errors de KDE +Name[cs]=Vyhledávání v databázi chyb KDE podle čísla chyby +Name[csb]=Baza felów KDE - szëkba pò numrze felë +Name[cy]=Chwilio Rhif Gwall y Gronfa Gwallau KDE +Name[da]=Nummersøgning i KDE's fejldatabase +Name[de]=KDE-Problemdatenbank: Suche nach Nummer +Name[el]=Αναζήτηση αριθμού σφάλματος στη βάση δεδομένων σφαλμάτων του KDE +Name[eo]=Serĉo laŭ numero en la KDEa Erarodatumbazo +Name[es]=Búsqueda de número de fallo en la base de datos de fallos de KDE +Name[et]=Veanumbri otsing KDE vigade andmebaasist +Name[eu]=Akats zenbakiaren bidezko bilaketa KDEren akats datu-basean +Name[fa]=جستجوی شمارۀ اشکال دادگان اشکال KDE +Name[fi]=KDE-vikailmoitustietokannan numerohaku +Name[fo]=Leita í villudátugrunnur KDE's (nýt villunummar) +Name[fr]=Recherche de bogue de KDE par numéro +Name[fy]=KDE Bug Databank - sykje op breknûmer +Name[gl]=Procura Numérica na Base de Datos de Erros de KDE +Name[he]=חיפוש מספר באג ברשימת הבאגים של KDE +Name[hi]=केडीई बग डाटाबेस बग संख्या खोज +Name[hr]=Pretraga KDE baze podataka o nedostacima pomoću broja nedostatka +Name[hu]=A KDE hibaadatbázis hibaszám-keresési eszköze +Name[is]=Leit eftir númerum í KDE villugagnagrunni +Name[it]=Ricerca per numero nel Database dei bug di KDE +Name[ja]=KDE バグデータベース バグ番号検索 +Name[ka]=KDE–ს შეცდომების ძებნა ნომრების მიხედვით +Name[kk]=KDE қателер дерек қорында қате нөмірі бойынша іздеу +Name[km]=ស្វែងរក​លេខ​កំហុស​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ​កំហុស KDE +Name[ko]=KDE 버그 데이터베이스 버그 번호 검색 +Name[lo]=ຄົ້ນຫາຖານຂໍ້ມູນບັກ KDE ແບບຫມາຍເລກ +Name[lt]=Paieška KDE ydų duombazėje pagal klaidos numerį +Name[lv]=KDE Kļūdu Datubāze Meklēšana pēc Kļūdas Numura +Name[mk]=База на податоци со бубачки од KDE, пребарување по броеви +Name[mn]=КДЭ-Асуудлын бааз: Дугаараар хайх +Name[ms]=Carian Bilangan Pepijat Pangkalan Data Pepijat KDE +Name[mt]=Database ta' BUGS tal-KDE - tfittxija bin-numru tal-bug +Name[nb]=Feilnummersøk i feildatabasen til KDE +Name[nds]=KDE Fehler-Datenbank: Fehlernummer-Söök +Name[ne]=KDE बग डेटाबेस बग सङ्ख्या खोजी +Name[nl]=KDE Bug Database - zoeken op bugnummer +Name[nn]=Feilnummersøk i feildatabasen til KDE +Name[nso]=Nyako ya Nomoro ya Bug ya Database ya Bug ya KDE +Name[pa]=KDE ਬੱਗ ਡਾਟਾਬੇਸ ਬੱਗ ਨੰਬਰ ਖੋਜ +Name[pl]=Baza błędów KDE - wyszukiwanie po numerze błędu +Name[pt]=Pesquisa por Número na Base de Dados de Erros do KDE +Name[pt_BR]=Procura por número no banco de erros do KDE +Name[ro]=Baza de date de erori KDE- căutare după număr +Name[ru]=Поиск по номеру в базе ошибок KDE +Name[rw]=Ishakisha Umubare w'ikosaporogaramu ry'Ububikoshingiro bw'Ikosaporogaramu KDE +Name[se]=KDE dihkkediehtovuođu dihkkenummir ohcan +Name[sk]=Hľadanie podľa čísla chyby v KDE databáze chýb +Name[sl]=Iskanje v zbirki hroščev KDE po številki hrošča +Name[sr]=KDE-ова база грешака, претраживање по броју грешке +Name[sr@Latn]=KDE-ova baza grešaka, pretraživanje po broju greške +Name[sv]=Felnummersökning i KDE:s feldatabas +Name[ta]=கேடிஇ பிழையான தகவல்தள பிழையான எண் தேடுதல் +Name[te]=కెడిఈ తప్పుల డాటాబేస్ తప్పు సంఖ్య అన్వెషణ +Name[tg]=Бар ҳисби KDE ҷустуҷӯи бонки иттилооти ишколоти шумора +Name[th]=ค้นหาฐานข้อมูลบัก KDE แบบหมายเลข +Name[tr]=KDE Hata Veritabanı Hata Numarasıyla Arama +Name[tt]=KDE Bet Biremlegendä Bicra Sanı buyınça Ezläw +Name[uk]=Пошук у базі даних помилок KDE по номеру +Name[uz]=KDE xato maʼlumot bazasi (xatoning raqamini qidirish) +Name[uz@cyrillic]=KDE хато маълумот базаси (хатонинг рақамини қидириш) +Name[ven]=Databeizi ya baga ya KDE baga yau todulusa nomboro +Name[vi]=Tìm kiếm số thứ tự của lỗi trong cơ sở dữ liệu lỗi của KDE +Name[wa]=Cweraedje di nombe el båze di dnêyes des bugs di KDE +Name[xh]=KDE Uphendlo Lwenani Legciwane Isiseko se data Segciwane +Name[zh_CN]=KDE 错误数据库按错误编号搜索 +Name[zh_TW]=KDE 臭蟲資料庫按錯誤編號搜索 +Name[zu]=Usesho lwe-KDE lwenombolo yegciwane lwesiqu sedata segciwane +Query=http://bugs.kde.org/show_bug.cgi?id=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/call.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/call.desktop new file mode 100644 index 000000000..527bf39f1 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/call.desktop @@ -0,0 +1,70 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=qrz,call +Name=QRZ.com Callsign Database +Name[af]=QRZ.com Callsign databasis +Name[az]=QRZ.com Callsign Databeyzi +Name[be]=База дадзеных QRZ.com Callsign +Name[bn]=QRZ.com কল-সাইন ডেটাবেস +Name[bs]=QRZ.com baza pozivnih brojeva +Name[ca]=Base de dades d'indicatius de QRZ.com +Name[cs]=Databáze volacích znaků QRZ.com +Name[csb]=QRZ.com - baza radiowëch wëwòłaniów +Name[cy]=Cronfa Ddata Arwydd-galwad QRZ.com +Name[da]=QRZ.com callsign-database +Name[de]=QRZ.com Callsign-Datenbank +Name[el]=QRZ.com βάση δεδομένων τηλεπικοινωνίας +Name[eo]=Voksigno-datumbazo ĉe QRZ.com +Name[es]=Base de datos callsign QRZ.com +Name[et]=QRZ.com callsign andmebaas +Name[eu]=QRZ.com callsign datu-basea +Name[fa]=دادگان QRZ.com Callsign +Name[fi]=QRZ.com-kutsumerkkitietokanta +Name[fr]=Base de données QRZ.com callsign +Name[fy]=QRZ.com callsign database +Name[gl]=Base de Datos Callsign QRZ.com +Name[hi]=QRZ.com काल-साइन डाटाबेस +Name[hr]=QRZ.com baza podataka pozivnih znakova +Name[hu]=QRZ.com hívójel-adatbázis +Name[is]=QRZ.com kallmerkjagrunnur +Name[it]=Database dei segnali di chiamata QRZ.com +Name[ja]=QRZ.com Callsign データベース +Name[kk]=QRZ.com шақыру атаулар дерек қоры +Name[km]=មូលដ្ឋាន​ទិន្នន័យ QRZ.com Callsign +Name[ko]=QRZ.com 호출 부호 데이터베이스 +Name[lt]=QRZ.com callsign duomenų bazė +Name[lv]=QRZ.com izsaukuma signālu datubāze +Name[mk]=База на податоци QRZ.com callsign +Name[mt]=Database ta' "callsigns" QRZ.com +Name[nb]=QRZ.com database for kallesignal +Name[nds]=QRZ.com Callsign-Datenbank +Name[ne]=QRZ.com कलसाइन डेटाबेस +Name[nl]=QRZ.com callsign database +Name[nn]=QRZ.com database for kallesignal +Name[pa]=QRZ.com Callsign ਡਾਟਾਬੇਸ +Name[pl]=QRZ.com - baza wywołań radiowych +Name[pt]=Base de Dados de Chamada do QRZ.com +Name[pt_BR]=Banco QRZ.com +Name[ro]=Baza de date de indicative QRZ.com +Name[ru]=База позывных QRZ.com +Name[rw]=Ububikoshingiro Ihamagarayingira QRZ.com +Name[se]=QRZ.com gohččonsignálaid diehtovuođđu +Name[sk]=Databáza skratiek QRZ.com +Name[sl]=Zbirka okrajšav QRZ.com +Name[sr]=QRZ.com callsign база података +Name[sr@Latn]=QRZ.com callsign baza podataka +Name[sv]=Databas för QRZ.com-anropssignaler +Name[ta]=QRZ.com அழைப்புநுழை தகவல்தளம் +Name[tg]=Базаи иттилооти QRZ.com callsign +Name[th]=ฐานข้อมูล QRZ.com Callsign +Name[tr]=QRZ.com Aramaişaret Veritabanı +Name[tt]=QRZ.com Imlaw-Biremlege +Name[uk]=База даних callsign QRZ.com +Name[vi]=Cơ sở dữ liệu callsign QRZ.com +Name[wa]=Båze di dnêyes callsign QRZ.com +Name[zh_CN]=QRZ.com Callsign 数据库 +Name[zh_TW]=QRZ.com Callsign 資料庫 +Query=http://www.qrz.com/database?callsign=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/cia.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/cia.desktop new file mode 100644 index 000000000..1bd7725f2 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/cia.desktop @@ -0,0 +1,45 @@ +[Desktop Entry] +Hidden=false +Keys=cia +Name=CIA World Factbook +Name[af]=CIA Wêreld Feiteboek +Name[bn]=সি-আই-এ ওয়ার্ল্ড ফ্যাক্টবুক +Name[cs]=Světová kniha faktů CIA +Name[csb]=Swiatowé wëdarzenia CIA (CIA World Factbook) +Name[da]=CIA Bog over verdens fakta +Name[el]=Παγκόσμιο βιβλίο γεγονότων της CIA +Name[eo]=CIA Monda faktlibro +Name[es]=Libro del estado del mundo de la CIA +Name[eu]=CIA World Fact Book +Name[fy]=CIA Wrâld Feitboek +Name[hr]=CIA činjenice iz svijeta +Name[id]=Buku Fakta Dunia CIA +Name[it]=World Fact Book della CIA +Name[ka]=CIA მსოფლიო ფაქტები +Name[km]=សៀវភៅ​ការ​ពិត​នៃ​ពិភពលោក​របស់ CIA +Name[ko]=CIA 월드 팩트 북 +Name[lt]=CŽV pasaulio faktų knyga +Name[ms]=Buku Fakta Dunia CIA +Name[ne]=CIA वर्ल्ड फ्याक्टबुक +Name[pa]=CIA ਸੰਸਾਰ ਜਾਣਕਾਰੀ ਕਿਤਾਬ +Name[pl]=Światowe wydarzenia CIA (CIA World Factbook) +Name[pt_BR]=CIA World Fact Book +Name[ro]=CIA World Fact Book +Name[ru]=Всемирная книга фактов (ЦРУ) +Name[se]=CIA:a máilbmediehtogirji +Name[sk]=CIA svetová kniha faktov +Name[sr]=Књига светских чињеница CIA-е +Name[sr@Latn]=Knjiga svetskih činjenica CIA-e +Name[sv]=CIA-världsfaktabok +Name[tg]=CIA Ҷаҳонӣ китоби аслан +Name[tr]=CIA Dünya Gerçekleri Kitabı +Name[uk]=Світова книга фактів ЦРУ +Name[vi]=Sách sự thật Thế giới CIA +Query=http://www.google.com/search?q=allintitle%3A\\{@}+world+factbook+site%3Awww.cia.gov&ie=UTF-8&btnI=I%27m+Feeling+Lucky +Query[fi]=http://www.google.fi/search?q=allintitle%3A\\{@}+world+factbook+site%3Awww.cia.gov&ie=UTF-8&btnI=I%27m+Feeling+Lucky +Query[he]=http://www.google.co.il/search?q=allintitle%3A\\{@}+world+factbook+site%3Awww.cia.gov&ie=UTF-8&btnI=I%27m+Feeling+Lucky +Query[ja]=http://www.google.com/search?q=allintitle%3A\\{@}+world+fact+book+site%3Awww.cia.gov&ie=UTF-8&btnI=I%27m+Feeling+Lucky +Query[nds]=http://www.google.com/search?q=allintitle%3A\\{@}+world+fact+book+site%3Awww.cia.gov&ie=UTF-8&btnI=I%27m+Feeling+Lucky +Query[th]=http://www.google.com/search?q=allintitle%3A\\{@}+world+fact+book+site%3Awww.cia.gov&ie=UTF-8&btnI=I%27m+Feeling+Lucky +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/citeseer.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/citeseer.desktop new file mode 100644 index 000000000..c92d86d0b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/citeseer.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=cite,cs +Name=CiteSeer: Scientific Literature Digital Library +Name[af]=CiteSeer: Wetenskaplike Digitale Literatuur Biblioteek +Name[az]=CiteSeer: Elmi Ədəbiyyat Dijital Kitabxanası +Name[be]=CiteSeer: Лічбавая бібліятэка навуковай літаратуры +Name[bn]=CiteSeer: বিজ্ঞানসাহিত্যের ডিজিটাল লাইব্রেরী +Name[bs]=CiteSeer: digitalna biblioteka naučne literature +Name[ca]=CiteSeer: Biblioteca digital de literatura científica +Name[cs]=CiteSeer: Vědecká digitální knihovna +Name[csb]=CiteSeer - Nôùkòwô elektronicznô bibloteka +Name[cy]=CiteSeer: Llyfgell Digidol Llenyddiaeth Gwyddonol +Name[da]=CiteSeer: Digitalt bibliotek for digital litteratur +Name[de]=CiteSeer: Digitale Bibliothek für wissenschaftliche Literatur +Name[el]=CiteSeer: Ψηφιακή βιβλιοθήκη επιστημονικής βιβλιογραφίας +Name[eo]=CiteSeer: Sciencoliteratura biblioteko cifereca +Name[es]=CiteSeer: Biblioteca digital de literatura científica +Name[et]=CiteSeer: Teaduskirjanduse digitaalraamatukogu +Name[eu]=CiteSeer: Zientzia-literatur liburutegi digitala +Name[fa]=CiteSeer: کتابخانۀ رقمی ادبیات علمی +Name[fi]=CiteSeer: Tieteellisten tekstien digitaalinen kirjasto +Name[fr]=CiteSeer : Bibliothèque numérique de littérature scientifique +Name[ga]=CiteSeer: Leabharlann Dhigiteach den Litríocht Eolaíochta +Name[gl]=CiteSeer: Libraria Dixital de Literatura Científica +Name[he]=CiteSeer: ספרית ספרות דיגיטלית מדעית +Name[hi]=CiteSeer: वैज्ञानिक साहित्य डिजिटल पुस्तकालय +Name[hr]=CiteSeer: Digitalna knjižnica znanstvene literature +Name[hu]=CiteSeer: tudományos szakirodalom digitális könyvtára +Name[it]=CiteSeer: Biblioteca digitale di letteratura scientifica +Name[ja]=CiteSeer: 学術電子論文ブラウザ +Name[kk]=CiteSeer: ғылыми әдебиет цифрлық кітапханасы +Name[km]=CiteSeer ៖ បណ្ណាល័យ​ឌីជីថល​អក្សរសាស្ត្រ​វិទ្យាសាស្ត្រ +Name[ko]=CiteSeer: 과학적 문학 디지털 도서관 +Name[lt]=CiteSeer: Mokslinės literatūros skaitmeninė biblioteka +Name[lv]=CiteSeer: Zinātniskās literatūras elektroniskā bibliotēka +Name[mk]=CiteSeer: дигитална библиотека со научна литература +Name[mn]=CiteSeer: Шинжлэх ухаан уран зохиолын дижитал сан +Name[ms]=CiteSeer: Pustaka Digital Risalah Sains +Name[nb]=CiteSeer: Digitalt bibliotek for vitenskaplig litteratur +Name[nds]=CiteSeer: Digitale Bibliotheek för wetenschaplich Literatuur +Name[ne]=CiteSeer: वैज्ञानिक साहित्य डिजिटल लाइब्रेरी +Name[nn]=CiteSeer: Digitalt bibliotek for vitskapleg litteratur +Name[pa]=CiteSeer: ਵਿਗਿਆਨਕ ਸਾਹਿਤ ਡਿਜ਼ੀਟਲ ਲਾਇਬਰੇਰੀ +Name[pl]=CiteSeer - elektroniczna biblioteka naukowa +Name[pt]=CiteSeer: Biblioteca Digital de Literatura Científica +Name[pt_BR]=CiteSeer: Biblioteca Digital de Literatura Científica +Name[ro]=CiteSeer: Biblioteca digitală de literatură științifică +Name[ru]=CiteSeer: цифровая библиотека научной литературы +Name[rw]=UmuhanuziKuvuga: Isomero Bimenyetsomibare ry'Ubuvanganzo Buhanga +Name[se]=CiteSeer:Digitálalaš bibliotehka mas lea dieđálaš litteratuvra +Name[sk]=CiteSeer: Digitálna knižnica vedeckej literatúry +Name[sl]=CiteSeer: Digitalna knjižnica znanstvene literature +Name[sr]=CiteSeer: Дигитална библиотека научне литературе +Name[sr@Latn]=CiteSeer: Digitalna biblioteka naučne literature +Name[sv]=CiteSeer: Digitalt bibliotek med vetenskaplig litteratur +Name[ta]=சைட்சீர்: அறிவியல் சம்மந்தமான கல்வி டிஜிட்டல் நூலகம் +Name[tg]= CiteSeer: Китобхонаи digital-и адабиёти умумӣ +Name[th]=CiteSeer: ห้องสมุดดิจิตอลของข้อเขียนทางวิทยาศาสตร์ +Name[tr]=CiteSeer: Bilimsel Literatür Kütüphanesi +Name[tt]=CiteSeer: Fänni Eşlär buyınça Online-Kitapxänä +Name[uk]=CiteSeer: цифрова бібліотека наукової літератури +Name[uz]=CiteSeer: Aniq fanlar uchun elektron kutubxona +Name[uz@cyrillic]=CiteSeer: Аниқ фанлар учун электрон кутубхона +Name[vi]=CiteSeer:Thư viện khoa học & văn học số hoá +Name[wa]=CiteSeer: Didjitåle livreye di literateure siyintifike +Name[zh_TW]=CiteSeer: 科學文獻數位圖書館 +Query=http://citeseer.ist.psu.edu/cs?q=\\{@}&submit=Search+Documents&cs=1 +Query[ne]=http://citeseer.ist.psu.edu/cs?q=\\{@}submit=Search+Documents&cs=1 +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/cpan.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/cpan.desktop new file mode 100644 index 000000000..fe2503e13 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/cpan.desktop @@ -0,0 +1,53 @@ +[Desktop Entry] +Keys=cpan +Name=CPAN - Comprehensive Perl Archive Network +Name[af]=CPAN - Omvattende Perl Argief Netwerk +Name[bn]=CPAN - কমপ্রিহেনসিভ পার্ল আর্কাইভ নেটওয়ার্ক +Name[bs]=CPAN - Mreža sveobuhvatne Perl arhive +Name[ca]=CPAN - Xarxa comprensible de l'arxiu Perl +Name[csb]=CPAN - archiwa skriptów Perl +Name[cy]=CPAN - Rhwydwaith Archif Cynhwysfawr Perl +Name[da]=CPAN - omfattende Perl-arkivnetværk +Name[de]=CPAN - Umfassendes Perl-Archiv +Name[el]=CPAN - Περιεκτικό δίκτυο αρχειοθήκης perl +Name[eo]=CPAN - Ampleksa Perl-arĥiv-reto +Name[es]=CPAN - Red de archivos Perl comprensibles +Name[eu]=CPAN - Perl fitxategi sare ulergarria +Name[fa]=CPAN - شبکۀ‌ وسیع بایگانی پرل +Name[fr]=CPAN (Comprehensive Perl Archive Network) +Name[gl]=CPAN - Colección de Materiais Acerca de Perl +Name[hi]=CPAN - कॉम्प्रेहेंसिव पर्ल आर्काइव नेटवर्क +Name[hr]=CPAN - Perl mreža sveobuhvatne arhive +Name[kk]=CPAN - Perl скрипттер архив желісі +Name[lo]=CPAN-Comprehensive perlArchive Network +Name[lt]=CPAN – Visapusiško Perlo Archyvo Tinklas +Name[lv]=CPAN - Visaptverošs Perl arhīvu tīkls +Name[mk]=CPAN - Обемна мрежа со Perl архиви +Name[mn]=CPAN - Өргөн хүрээтэй Perl-Архив +Name[mt]=CPAN - Databażi komprensiv ta' arkivji Perl +Name[nb]=CPAN -– Perl-arkiv: «Comprehensive Perl Archive Network» +Name[ne]=CPAN - व्यापक पर्ल सङ्ग्रह सञ्जाल +Name[nn]=CPAN – Perl-arkiv: «Comprehensive Perl Archive Network» +Name[nso]=Kgokagano ya Polokelo ya Perl ya Kelelo ya Godimo +Name[pa]=CPAN - ਪੈਰਾ ਪਰਲ ਆਰਚੀਵ ਨੈੱਟਵਰਕ +Name[pl]=CPAN - archiwum skryptów Perl +Name[pt_BR]=CPAN +Name[ro]=CPAN - Arhiva completă de programe Perl +Name[ru]=CPAN - архив скриптов Perl +Name[rw]=CPAN - Urusobemiyoboro rw'Ubushyinguro Perl Rwuzuye +Name[se]=CPAN – Perl-vuorká: «Comprehensive Perl Archive Network» +Name[sl]=CPAN - Omrežje obsežnega arhiva za Perl +Name[ta]=CPAN -பரந்த பர்ல் ஆவண வலைப்பின்னல் +Name[tg]=CPAN -Шабакаи ҳаматарафаи архиви Perl +Name[tr]=CPAN - Detaylı Perl Arşiv Ağı +Name[tt]=CPAN - Perl Tuplamalar Çeltäre +Name[uk]=CPAN - Всеосяжна мережа архівів Perl +Name[uz]=CPAN - Perl boʻyicha mukammal arxiv tarmogʻi +Name[uz@cyrillic]=CPAN - Perl бўйича мукаммал архив тармоғи +Name[ven]=CPAN - Vhudavhidzani ha Mbeazwakale ya Perl vhu Pfalaho +Name[vi]=CPAN - Mạng lưới lưu trữ Perl đầy đủ +Name[xh]=CPAN - Enomxholo Perl Indawo yokugcina Yomsebenzi womnatha +Name[zh_TW]=CPAN - 全面的 Perl 收集網路 +Query=http://search.cpan.org/search?mode=\\{mode,2,"dist"}&query=\\{query,q,1} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan.desktop new file mode 100644 index 000000000..824a7f8b0 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan.desktop @@ -0,0 +1,54 @@ +[Desktop Entry] +Keys=ctan +Name=CTAN - Comprehensive TeX Archive Network +Name[af]=CTAN - Omvattende Tex Argief Netwerk +Name[bn]=CTAN - কমপ্রিহেনসিভ টেক আর্কাইভ নেটওয়ার্ক +Name[bs]=CTAN - Mreža sveobuhvatne TeX arhive +Name[ca]=CTAN - Xarxa extensa d'arxius TeX +Name[csb]=CTAN - archiwa TeX-a +Name[cy]=CTAN - Rhwydwaith Archif Cynhwysfawr TeX +Name[da]=CTAN - omfattende TeX-arkivnetværk +Name[de]=CTAN - Umfassendes TeX-Archiv +Name[el]=CTAN - Περιεκτικό δίκτυο αρχειοθήκης TeX +Name[eo]=CTAN - Ampleksa TeX-arĥiv-reto +Name[es]=CTAN - Red de archivos TeX comprensivos +Name[eu]=CTAN - TeX fitxategi sare ulergarria +Name[fa]=CTAN - شبکۀ وسیع بایگانی TeX +Name[fr]=CTAN (Comprehensive TeX Archive Network) +Name[hi]=CTAN - कॉम्प्रेहेंसिव टीईएक्स आर्काइव नेटवर्क +Name[hr]=CTAN - TeX mreža sveobuhvatne arhive +Name[kk]=CTAN - TeX архив желісі +Name[lt]=CTAN – Visapusiško TeX Archyvo Tinklas +Name[lv]=CTAN - Visaptverošs TeX Arhīvu Tīkls +Name[mk]=CTAN - Обемна мрежа со TeX архиви +Name[mn]=CTAN - Өргөн хүрээтэй TeX-Архив +Name[ms]=CTAN - Rangkaian Arkib TeX Komprehensif +Name[mt]=CTAN - Databażi komprensiv ta' arkivji TeX +Name[nb]=CTAN -– TeX-arkiv: «Comprehensive TeX Archive Network» +Name[ne]=CTAN - व्यापक TeX सङ्ग्रह सञ्जाल +Name[nn]=CTAN – TeX-arkiv: «Comprehensive TeX Archive Network» +Name[nso]=Kgokagano ya Polokelo ya TeX ya Kelelo ya Godimo +Name[pa]=CTAN - ਪੈਰਾ TeX ਆਰਚੀਵ ਨੈੱਟਵਰਕ +Name[pl]=CTAN - archiwum TeX-a +Name[pt_BR]=CTAN +Name[ro]=CTAN - Arhiva completă de programe TeX +Name[ru]=CTAN - архив TeX +Name[rw]=CTAN - Urusobemiyoboro rw'Ubushyinguro TeX Rwuzuye +Name[se]=CTAN – TeX-vuorká: «Comprehensive TeX Archive Network» +Name[sl]=CPAN - Omrežje obsežnega arhiva za TeX +Name[ta]=CTAN - முழுமையான TeX ஆவண வலைப்பின்னல் +Name[tg]=CTAN -Шабакаи ҳаматарафаи архиви TeX +Name[tr]=CTAN - Detaylı TeX Arşiv Ağı +Name[tt]=CTAN - TeX Tuplamalar Çeltäre +Name[uk]=CTAN - Всеосяжна мережа архівів TeX +Name[uz]=CTAN - TeX boʻyicha mukammal arxiv tarmogʻi +Name[uz@cyrillic]=CTAN - TeX бўйича мукаммал архив тармоғи +Name[ven]=CTAN - Vhudavhidzani ha Mbeazwakale ya TeX Vhupfalaho +Name[vi]=CTAN - Mạng lưới lưu trữ TeX đầy đủ +Name[xh]=CTAN - Enomxholo TeX Indawo yokugcina Yomsebenzi womnatha +Name[zh_TW]=CTAN - 全面的 Tex 收集網路 +Query=http://tug.ctan.org/cgi-bin/filenameSearch.py?action=/search/&filename=\\{ at } +Query[ja]=http://tug.ctan.org/tools/filenamesearch.py?action=/search/&filename=\\\\{ at } +Query[tg]=http://tug.ctan.org/cgi-bin/filenameSearch.py?action=/search/&filename=\\{ аз } +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan_cat.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan_cat.desktop new file mode 100644 index 000000000..faa4f7fce --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/ctan_cat.desktop @@ -0,0 +1,77 @@ +[Desktop Entry] +Keys=ctan_cat +Name=CTAN Catalog +Name[af]=CTAN Katalogus +Name[az]=CTAN Kataloqu +Name[be]=Каталог CTAN +Name[bn]=CTAN ক্যাটালগ +Name[br]=Katalog CTAN +Name[bs]=CTAN katalog +Name[ca]=Catàleg CTAN +Name[cs]=CTAN katalog +Name[csb]=CTAN - katalog TeX-owëch paczétów +Name[cy]=Catalog CTAN +Name[da]=CTAN-katalog +Name[de]=CTAN-Katalog +Name[el]=Κατάλογος CTAN +Name[en_GB]=CTAN Catalogue +Name[eo]=CTAN-Katalogo +Name[es]=Catálogo CTAN +Name[et]=CTAN kataloog +Name[eu]=CTAN Katalogoa +Name[fa]=فهرست CTAN +Name[fi]=CTAN-katalogi +Name[fr]=Catalogue du CTAN +Name[fy]=CTAN Catalogus +Name[ga]=Catalóg CTAN +Name[gl]=Catálogo CTAN +Name[he]=קטלוג CTAN +Name[hi]=CTAN कैटलॉग +Name[hr]=CTAN katalog +Name[id]=Katalog CTAN +Name[is]=CTAN Catalogue +Name[it]=Catalogo CTAN +Name[ja]=CTAN カタログ +Name[ka]=CTAN კატალოგი +Name[kk]=CTAN каталогы +Name[km]=កាតាឡុក CTAN +Name[ko]=CTAN 카달로그 +Name[lt]=CTAN katalogas +Name[lv]=CTAN Katalogs +Name[mk]=Каталог од CTAN +Name[mn]=CTAN Катлог +Name[ms]=Katalog CTAN +Name[mt]=Katalgu CTAN +Name[nb]=CTAN-katalog +Name[nds]=CTAN Kataloog +Name[ne]=CTAN विवरणिका +Name[nl]=CTAN Catalogus +Name[nn]=CTAN-katalog +Name[pa]=CTAN ਸੂਚੀ +Name[pl]=CTAN - katalog pakietów TeX-owych +Name[pt]=Catálogo do CTAN +Name[pt_BR]=Catálogo CTAN +Name[ro]=Catalog CTAN +Name[ru]=Каталог CTAN +Name[rw]=Ububikobisobanuro CTAN +Name[se]=CTAN-kataloga +Name[sk]=Katalóg CTAN +Name[sl]=Katalog CTAN +Name[sr]=CTAN Каталог +Name[sr@Latn]=CTAN Katalog +Name[sv]=CTAN-katalog +Name[ta]=CTAN வகை +Name[tg]=Каталоги CTAN +Name[th]=แคตตาล็อก CTAN +Name[tr]=CTAN Kataloğu +Name[tt]=CTAN Törgäge +Name[uk]=Каталог CTAN +Name[uz]=CTAN katalogi +Name[uz@cyrillic]=CTAN каталоги +Name[vi]=Thư mục CTAN +Name[wa]=Catalogue do CTAN +Name[zh_CN]=CTAN 目录 +Name[zh_TW]=CTAN 目錄 +Query=http://www.ctan.org/tools/cataloguesearch?action=/search/&catstring=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/dbug.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/dbug.desktop new file mode 100644 index 000000000..d580154e2 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/dbug.desktop @@ -0,0 +1,67 @@ +[Desktop Entry] +Keys=dbug +Name=Debian BTS Bug Search +Name[af]=Debian BTS Fout Soektog +Name[az]=Debian BTS Xəta Axtarışı +Name[be]=Пошук памылак Debian BTS +Name[bn]=ডেবিয়ান বি-টি-এস বাগ অনুসন্ধান +Name[bs]=Debian BTS pretraga bugova +Name[ca]=Cerca d'errors Debian BTS +Name[cs]=Hledání chyb Debianu +Name[csb]=Szëkba felów Debiana +Name[cy]=Chwiliad Nam BTS Debian +Name[da]=Debian BTS fejlsøgning +Name[de]=Debian BTS-Programmfehlersuche +Name[el]=Σύστημα εντοπισμού σφαλμάτων του Debian +Name[eo]=Eraroserĉo de Debiano +Name[es]=Búsqueda de fallos BTS de Debian +Name[et]=Debiani BTS veaotsing +Name[eu]=Debianen BTS akats bilaketa +Name[fa]=جستجوی اشکال BTS دبیان +Name[fi]=Debianin vikajärjestelmän haku +Name[fr]=Recherche dans le système de gestion des bogues Debian +Name[gl]=Procura de Erros en Debian BTS +Name[he]=חיפוש BTS במערכת דביאן +Name[hi]=डेबियन बीटीएस बग खोज +Name[hr]=Debian BTS pretraživanje nedostataka +Name[hu]=Debian BTS hibakereső +Name[is]=Debian BTS villuleit +Name[it]=Ricerca bug Debian BTS +Name[ja]=Debian BTS バグ検索 +Name[kk]=Debian қателер тіркеу жүйесінде іздеу +Name[km]=ស្វែងរក​កំហុស Debian BTS +Name[ko]=데비안 BTS 버그 검색 +Name[lt]=Debian BTS yda paieška +Name[lv]=Debian BTS kļūdu meklēšana +Name[mk]=Debian BTS пребарување на бубачки +Name[ms]=Carian Pepijat BTS Debian +Name[nb]=Søk etter lus i Debian BTS +Name[nds]=Debian-BTS-Fehlersöök +Name[ne]=डेबियन BTS बग खोज्नुहोस् +Name[nn]=Søk etter lus i Debian BTS +Name[pa]=ਡੇਬੀਅਨ BTS ਬੱਗ ਖੋਜ +Name[pl]=Wyszukiwanie błędów Debiana +Name[pt]=Procura de Erros no Debian BTS +Name[pt_BR]=Busca de bugs Debian +Name[ro]=Căutare în sistemul Debian de raportare a erorilor +Name[ru]=Поиск в системе учёта ошибок Debian +Name[rw]=Ishakisha ry'Ikosaporogaramu BTS Debiyani +Name[se]=Oza dihkiid Debian BTS:as +Name[sk]=Hľadanie chýb na Debian BTS +Name[sl]=Iskanje po hroščih Debian BTS +Name[sr]=Debian-ова BTS претрага грешака +Name[sr@Latn]=Debian-ova BTS pretraga grešaka +Name[sv]=Sökning i Debians felspårningssystem +Name[ta]=டெபியன் BTS பிழை தேடல் +Name[te]=డెబియన్ బిటిఎస్ తప్పుల అన్వెషణ +Name[th]=ค้นหาบักของ Debian BTS +Name[tr]=Debian BTS Hata Arama +Name[tt]=Debian'nıñ BTS (Bet Tabu Sisteme) +Name[uk]=Пошук у системі стеження за помилками для Debian +Name[vi]=Tìm kiếm lỗi Debian BTS +Name[wa]=Cweraedje di Bug BTS Debian +Name[zh_CN]=Debian BTS Bug 搜索 +Name[zh_TW]=Debian BTS 臭蟲搜尋 +Query=http://bugs.debian.org/\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/de2en.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/de2en.desktop new file mode 100644 index 000000000..c8717a2d4 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/de2en.desktop @@ -0,0 +1,69 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=de2en +Name=dict.cc Translation: German to English +Name[ar]=dict.cc ترجمة من : الألمانية إلى الإنكليزية +Name[be]=dict.cc Пераклад: з нямецкай на англійскую +Name[bs]=dict.cc prijevod: njemački u engleski +Name[ca]=Traducció dict.cc: Alemany - Anglès +Name[cs]=Překlad dic.cc: z němčiny do angličtiny +Name[csb]=dict.cc: miemiecczi -> anielsczi +Name[da]=dict.cc oversættelse: Tysk til engelsk +Name[de]=dict.cc-Übersetzung: Deutsch/Englisch +Name[el]=Μετάφραση dict.cc: Γερμανικά σε Αγγλικά +Name[eo]=dict.cc Traduko: Germana al Angla +Name[es]=dict.cc Traducción: alemán a inglés +Name[et]=dict.cc tõlkimine: saksa->inglise +Name[eu]=dict.cc itzulpena: Alemanatik ingelera +Name[fa]=ترجمۀ dict.cc: آلمانی به انگلیسی +Name[fi]=dict.cc Käännös: saksasta englanniksi +Name[fr]=Traduction dict.cc : Allemand en Anglais +Name[fy]=dict.cc-oersetting Dûts nei Ingelsk +Name[ga]=dist.cc Aistriúchán: Gearmáinis go Béarla +Name[gl]=Tradución dict.cc: Alemán a Inglés +Name[he]=תרגום dict.cc: גרמני־אנגלי +Name[hi]=dict.cc अनुवादः जर्मन से अंग्रेजी +Name[hr]=dict.cc Prijevod: njemački na engleski +Name[hu]=Dict.cc - Fordítás németről angolra +Name[is]=dict.cc Þýðing: Þýska til ensku +Name[it]=Traduzioni dict.cc: dal tedesco all'inglese +Name[ja]=dict.cc ドイツ語-英語翻訳 +Name[kk]=dict.cc аудармашы: неміс тілінен ағылшынға +Name[km]=dict.cc ៖ បកប្រែ​ពី​ភាសា​អាល្លឺម៉ង់​ទៅ​អង់គ្លេស +Name[ko]=dict.cc 번역: 독일어에서 영어로 +Name[lt]=dict.cc vertimas: iš vokiečių į anglų +Name[lv]=dict.cc Tulkošana: no Vācu uz Angļu +Name[mk]=dict.cc превод: од германски на англиски +Name[nb]=dict.cc Oversettelse fra tysk til engelsk +Name[nds]=dict.cc Översetten: Hoochdüütsch na Engelsch +Name[ne]=dict.cc अनुवाद: जर्मनीलाई अङ्ग्रेजीमा +Name[nl]=dict.cc-vertaling: Duits naar Engels +Name[nn]=dict.cc Omsetjing: Tysk til engelsk +Name[pa]=dict.cc ਅਨੁਵਾਦ: ਜਰਮਨ ਤੋਂ ਅੰਗਰੇਜ਼ੀ +Name[pl]=dict.cc: niemiecki -> angielski +Name[pt]=Tradução do dict.cc: Alemão para Inglês +Name[pt_BR]=dict.cc - Tradução: Alemão para Inglês +Name[ro]=Traducere dict.cc: germană la engleză +Name[ru]=Переводчик dictcc.com: немецко-английский +Name[rw]=dict.cc Ivunura: Ikidage mu Cyongereza +Name[se]=dict.cc Jorgaleapmi: Duiskkagielas eŋgelašgillii +Name[sk]=dict.cc Preklad z nemčiny do angličtiny +Name[sl]=Prevod dict.cc: nemščina v angleščino +Name[sr]=Превод на dict.cc: са немачког на енглески +Name[sr@Latn]=Prevod na dict.cc: sa nemačkog na engleski +Name[sv]=dict.cc översättning: tyska till engelska +Name[ta]=dict.cc Translation மொழிப்பெயர்ப்பு: ஜெர்மன் மொழியில் இருந்து ஆங்கிலத்துக்கு +Name[te]=dict.cc అనువాదం: జెర్మన్ నుంచి ఆంగ్లం కు +Name[th]=dict.cc แปลภาษาเยอรมันเป็นอังกฤษ +Name[tr]=dict.cc Çevirisi: Almancadan İngilizceye +Name[tt]=dict.cc Tärcemä: Almança -› İnglizçä +Name[uk]=dict.cc: переклад з німецької на англійську +Name[uz]=dict.cc tarjima: Nemischadan Inglizchaga +Name[uz@cyrillic]=dict.cc таржима: Немисчадан Инглизчага +Name[vi]=dict.cc Dịch: Tiếng Đức sang tiếng Anh +Name[wa]=Ratournadje dict.cc: Almand viè inglès +Name[zh_TW]=dict.cc 翻譯: 德文至英文 +Query=http://www.dict.cc/?s=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/de2fr.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/de2fr.desktop new file mode 100644 index 000000000..646f3313e --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/de2fr.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Type=Service +Name=LEO - Translate Between German and French +Name[af]=LEO - Vertaal tussn Duits en Fraans +Name[ar]=LEO - ترجمة ألمانية فرنسية +Name[be]=LEO - Пераклад з нямецкай на французскую і наадварот +Name[bn]=লিও - জার্মান থেকে ফরাসী বা ফরাসী থেকে জার্মান-এ অনুবাদ করুন +Name[bs]=LEO prijevod: njemački u francuski +Name[ca]=LEO - Tradueix entre alemany i francès +Name[cs]=LEO - překlad mezi němčinou a francouzštinou +Name[csb]=LEO - dolmaczenié miemiecczi -> francësczi +Name[da]=LEO - Oversæt mellem tysk og fransk +Name[de]=LEO - Übersetzung Deutsch/Französisch +Name[el]=LEO - Μετάφραση μεταξύ Γερμανικών και Γαλλικών +Name[eo]=LEO - Traduko inter la germana kaj la franca +Name[es]=LEO - Traducción entre alemán y francés +Name[et]=LEO - tõlkimine: saksa-prantsuse +Name[eu]=LEO - Itzuli alemana eta ingelesaren artean +Name[fa]=LEO - ترجمه بین آلمانی و فرانسوی +Name[fi]=LEO - Käännä saksan ja ranskan välillä +Name[fr]=LEO - Traduction Allemand - Français +Name[fy]=LEO -oersetting tusken Dûtsk en Frânsk +Name[ga]=LEO - Aistrigh idir Gearmáinis agus Fraincis +Name[gl]=LEO - Tradución entre Alemán e Francés +Name[he]=LEO - תרגום בין גרמנית לצרפתית +Name[hi]=लिओ - जर्मनी तथा फ्रेंच के बीच अनुवाद +Name[hr]=LEO - Prevođenje između njemačkog i francuskog +Name[hu]=LEO - Fordítás németről franciára (mindkét irányban) +Name[is]=LEO - Þýða á milli þýsku og frönsku +Name[it]=LEO - Traduzioni dal tedesco al francese +Name[ja]=LEO - ドイツ語-フランス語間の翻訳 +Name[ka]=LEO - გერმანულ-ფრანგული მთარგმნელი +Name[kk]=LEO - неміс және француз тілдер арасында аудару +Name[km]=LEO - បកប្រែ​រវាង​ភាសា​អាល្លឺម៉ង់ និង​អង់គ្លេស +Name[ko]=LEO - 독일어에서 프랑스어로 번역 +Name[lt]=LEO - vertimas iš vokiečių į prancūzų ir atvirkščiai +Name[lv]=LEO - Tulkot no Vācu uz Franču +Name[mk]=LEO - превод меѓу германски и француски +Name[nb]=LEO – Oversettelse fra tysk til fransk +Name[nds]=LEO - Översetten twischen Hoochdüütsch un Franzöösch +Name[ne]=LEO - जर्मनी र फ्रान्सेलीमा अनुवाद गर्नुहोस् +Name[nl]=LEO - vertaling tussen Duits en Frans +Name[nn]=LEO – Omsetjing frå tysk til fransk +Name[pa]=LEO -ਜਰਮਨ ਅਤੇ ਫਰੈਂਚ ਵਿੱਚ ਅਨੁਵਾਦ +Name[pl]=LEO - tłumaczenie niemiecki -> francuski +Name[pt]=LEO - Traduzir Entre Alemão e Francês +Name[pt_BR]=LEO - Tradução entre Alemão e Francês +Name[ro]=LEO - Traduce între germană și franceză +Name[ru]=LEO - немецко-французский перевод +Name[rw]=LEO - Kuvunura Hagati y'Ikidage n'Igifaransa +Name[se]=LEO – Jorgal duiskka- ja fránskkagiela gaskkas +Name[sk]=LEO - Preklad z nemčiny do francúzštiny +Name[sl]=LEO - Prevod med nemščino in francoščino +Name[sr]=LEO — превод између немачког и француског +Name[sr@Latn]=LEO — prevod između nemačkog i francuskog +Name[sv]=LEO - översätt från tyska till franska +Name[ta]=LEO - ஜெர்மன் மற்றும் ப்ரென்ச் இடையே மொழிப்பெயர்க்கவும் +Name[te]=లియొ - జెర్మన్ మరయూ ఫ్రెంచ్ మద్య అనువాదం +Name[tg]=LEO - Тарҷума мобайни Олмонӣ ва Фаронсавӣ +Name[th]=LEO - แปลภาษาเยอรมัน<->ฝรั่งเศส +Name[tr]=LEO - Almancadan Fransızcaya Çeviri +Name[tt]=LEO - Tärcemä: Almança -› Fransça +Name[uk]=LEO - переклад між німецькою та французькою +Name[uz]=LEO - Nemischadan Fransuzchaga tarjima +Name[uz@cyrillic]=LEO - Немисчадан Французчага таржима +Name[vi]=LEO - Dịch tiếng Đức sang tiếng Pháp +Name[wa]=LEO - Ratourner etur l' almand et l' francès +Name[zh_TW]=LEO - 翻譯德語和法語 +ServiceTypes=SearchProvider +Keys=de2fr +Query=http://dict.leo.org/?lp=frde&search=\\{@} +Query[ne]=http://dict.leo.org/?lp=frdesearch=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/deb.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/deb.desktop new file mode 100644 index 000000000..7422c8776 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/deb.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Keys=deb +Name=Debian Package Search +Name[af]=Debian Paket Soektog +Name[az]=Debian Paket Axtarışı +Name[be]=Пошук пакетаў Debian +Name[bn]=ডেবিয়ান প্যাকেজ অনুসন্ধান +Name[br]=Klask ur pakad Debian +Name[bs]=Pretraga Debian paketa +Name[ca]=Cerca de paquets Debian +Name[cs]=Hledání Debian balíčků +Name[csb]=Szëkba paczetów Debiana +Name[da]=Debian pakkesøgning +Name[de]=Debian-Paketsuche +Name[el]=Αναζήτηση πακέτων Debian +Name[eo]=Pakaĵa serĉo de Debiano +Name[es]=Búsqueda de paquetes de Debian +Name[et]=Debiani paketiotsing +Name[eu]=Debianen pakete bilaketa +Name[fa]=جستجوی بستۀ دبیان +Name[fi]=Debianin pakettihaku +Name[fr]=Recherche dans le système de paquetages Debian +Name[gl]=Procura de Pacotes Debian +Name[he]=חיפוש חבילות דביאן +Name[hi]=डेबियन पैकेज खोज +Name[hr]=Debian pretraživanje paketa +Name[hu]=Debian csomagkereső +Name[id]=Cari Paket Debian +Name[is]=Debian pakkaleit +Name[it]=Ricerca pacchetti debian +Name[ja]=Debian パッケージ検索 +Name[ka]=Debian-ის პაკეტის ძიება +Name[kk]=Debian дестелерін табу +Name[km]=ស្វែងរក​កញ្ចប់ Debian +Name[ko]=데비안 꾸러미 검색 +Name[lt]=Debian paketų paieška +Name[lv]=Debian Pakotņu meklēšana +Name[mk]=Пребарување на Debian-пакети +Name[ms]=Carian Pakej Debian +Name[mt]=Tfittxija tal-pakkett Debian +Name[nb]=Søk etter Debian-pakker +Name[nds]=Debian-Paketsöök +Name[ne]=डेबियन प्याकेज खोज्नुहोस् +Name[nn]=Søk etter Debian-pakkar +Name[pa]=ਡੇਬੀਅਨ ਪੈਕੇਜ ਖੋਜ +Name[pl]=Wyszukiwanie pakietów Debiana +Name[pt]=Procura de Pacotes da Debian +Name[pt_BR]=Busca de Pacotes Debian +Name[ro]=Căutare în sistemul Debian de pachete +Name[ru]=Поиск пакетов Debian +Name[rw]=Ishakisha rya Rukomatanya Debiyani +Name[se]=Oza Debian-páhkaid +Name[sk]=Hľadanie balíkov Debian +Name[sl]=Iskanje po paketih Debian +Name[sr]=Претрага Debian-ових пакета +Name[sr@Latn]=Pretraga Debian-ovih paketa +Name[sv]=Sökning i Debians paket +Name[ta]=டெபியன் BTS பிழை தேடல் +Name[tg]=Ҷустуҷӯи Debian Package +Name[th]=ค้นหาแพคเกจของ Debian +Name[tr]=Debian Paket Arama +Name[tt]=Debian Tuplamaların Ezläw +Name[uk]=Пошук пакунків для Debian +Name[uz]=Debian paketlarini qidirish +Name[uz@cyrillic]=Debian пакетларини қидириш +Name[vi]=Tìm kiếm gói Debian +Name[wa]=Cweraedje di pakets Debian +Name[zh_CN]=Debian 软件包搜索 +Name[zh_TW]=Debian 套件搜尋 +Query=http://packages.debian.org/\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/dmoz.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/dmoz.desktop new file mode 100644 index 000000000..5715e5161 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/dmoz.desktop @@ -0,0 +1,51 @@ +[Desktop Entry] +Type=Service +Name=Open Directory +Name[az]=Açıq Qovluq +Name[bn]=ওপেন ডিরেক্টরি +Name[br]=Digeriñ ur renkell +Name[bs]=Otvoreni direktorij (DMOZ) +Name[csb]=Open Directory - Ôpen katalog starnów WWW +Name[cy]=Cyfeiriadur Agored +Name[da]=Åben mappe +Name[eo]=Malfermu dosierujon +Name[es]=Directorio abierto +Name[eu]=Irekitako direktorioa +Name[fa]=باز کردن فهرست راهنما +Name[fi]=Avoin kansio +Name[fo]=Opin Alnótsskránni +Name[fy]=Iepen Directory +Name[gl]=Directorio Aberto +Name[he]=תיקייה פתוחה +Name[hi]=ओपन डिरेक्ट्री +Name[id]=Buka Direktori +Name[ka]=ღია კატალოგები +Name[kk]=Ашық каталог +Name[km]=ថត​បើក​ចំហ +Name[mk]=Отворен директориум +Name[mn]=Лавлах нээх +Name[ne]=डाइरेक्टरी खोल्नुहोस् +Name[pa]=ਖੁੱਲੀ ਡਾਇਰੈਕਟਰੀ +Name[pl]=Open Directory - katalog stron WWW +Name[ro]=Director web open-source +Name[ru]=Открытый каталог +Name[rw]= Gufungura Inkoranyamagambo +Name[sl]=Odpri imenik +Name[sr]=Отворени адресар +Name[sr@Latn]=Otvoreni adresar +Name[sv]=Öppen katalog +Name[ta]=அடைவை திற +Name[te]=ఒపెన్ డైరెక్టరి +Name[tg]=Кушодани феҳраст +Name[tt]=Açıq Törgäk +Name[uk]=Відкритий каталог +Name[ven]=Tsumbavhulwo yo Vuleaho +Name[vi]=Thư mục mở +Name[wa]=Drovi ridant +Name[xh]=Vula Ulawulo +Name[zh_TW]=開啟目錄 +Name[zu]=Vula Uhlu lwamafayela +ServiceTypes=SearchProvider +Keys=dmoz,odp +Query=http://search.dmoz.org/cgi-bin/search?search=\\{@} +Query[ne]=http://search.dmoz.org/cgi-bin/search?खोज्नुहोस्=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/docbook.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/docbook.desktop new file mode 100644 index 000000000..fd422d7ba --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/docbook.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=db,docbook +Name=DocBook - The Definitive Guide +Name[af]=Docbook - Die Definitiewe Gids +Name[ar]=DocBook - المرشد النهائي +Name[az]=DocBook - Bələdçi +Name[be]=DocBook - Падручнік +Name[bn]=ডকবুক - দি ডেফিনিটিভ গাইড +Name[bs]=DocBook - Konačni priručnik +Name[ca]=DocBook - La guia definitiva +Name[csb]=DocBook (systema dokùmentacëji) - pòdrãcznik +Name[cy]=DocBook - Y Canllaw Awdurdodol +Name[da]=DocBook - den definitive guide +Name[de]=DocBook - Definitive Einführung +Name[el]=DocBook - Ο απόλυτος οδηγός +Name[eo]=DocBook - La definitiva manlibro +Name[es]=DocBook - La guía definitiva +Name[eu]=DocBook - Behin-betiko gida +Name[fa]=DocBook - راهنمای صریح +Name[gl]=DocBook - A Guia Definitiva +Name[he]=DocBook - המדריך האולטימטיבי +Name[hi]=डॉकबुक - निर्णायक मार्गदर्शक +Name[hr]=DocBook - Definitivni vodič +Name[is]=DocBook - Opinbera handbókin +Name[it]=DocBook - La guida definitiva +Name[ja]=DocBook - 完全ガイド +Name[ka]=DocBook - განსაზღვრებები +Name[kk]=DocBook - толық бағыттамасы +Name[km]=DocBook - មគ្គុទ្ទេសក៍​ច្បាស់លាស់ +Name[ko]=DocBook - 명확한 가이드 +Name[lo]=DocBook -the Definitive Guide +Name[lt]=DocBook – galutinis vadovas +Name[lv]=DocBook - Izsmeļošs Ceļvedis +Name[mk]=DocBook - дефинитивниот водач +Name[mn]=DocBook - Тодорхой зааварчилгаа +Name[ms]=DocBook - Panduan Definitif +Name[nb]=DocBook – Den endelige guiden +Name[nds]=DocBook - De Inföhren +Name[ne]=DocBook - निर्णायक मार्गदर्शक +Name[nn]=DocBook – The Definitive Guide +Name[nso]=DocBook - Keletso yeo e Feleletsego +Name[pa]=DocBook - ਨਿਸ਼ਚਿਤ ਗਾਈਡ +Name[pl]=DocBook (system dokumentacji) - podręcznik +Name[pt]=DocBook - O Guia Definitivo +Name[pt_BR]=DocBook - O Guia Definitivo +Name[ro]=DocBook - Ghidul de referință +Name[ru]=DocBook - полное руководство +Name[rw]=IgitaboInyandiko - Inyifashisho ya Nyuma +Name[se]=DocBook – The Definitive Guide +Name[sl]=DocBook - Popolni vodič +Name[sr]=DocBook — Дефинитивни водич +Name[sr@Latn]=DocBook — Definitivni vodič +Name[sv]=Den slutgiltiga guiden till docbook +Name[ta]=Docபுத்தகம் - விளக்கமான வழிகாட்டி +Name[tg]=DocBook - Роҳнамои таърифӣ +Name[tr]=DocBook - Eksiksiz Rehber +Name[tt]=DocBook - Tulı Qullanma +Name[uk]=Посібник визначень DocBook +Name[uz]=DocBook - toʻliq qoʻllanma +Name[uz@cyrillic]=DocBook - тўлиқ қўлланма +Name[ven]=DocBook - Tsumbavhulwo i Talutshedzaho +Name[vi]=DocBook - Hướng dẫn Đầy đủ +Name[wa]=DocBook - Li guide definitif +Name[xh]=DocBook - Incwadi Echazayo +Name[zh_CN]=DocBook - 权威的指南 +Name[zh_TW]=DocBook - 終極指南 +Name[zu]=DocBook - Umbonisi ochazayo +Query=http://www.docbook.org/tdg/en/html/\\{1}.html +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/doi.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/doi.desktop new file mode 100644 index 000000000..07b5a0a52 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/doi.desktop @@ -0,0 +1,63 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=doi +Name=Digital Object Identifier +Name[ar]=مُعرّف الكائن الرّقمي +Name[az]=Dijital Obyekt Bildiricisi +Name[bn]=ডিজিটাল অবজেক্ট আইডেন্টিফায়ার +Name[bs]=Digitalni identifikator objekta +Name[ca]=Identificador d'objecte digital +Name[cs]=Digitální identifikátor objektu +Name[csb]=Cëfrowi identifikator òbiektu (DOI) +Name[cy]=Dynodydd Gwrthrych Digidol +Name[da]=Digital objekt-identifikator +Name[de]=Identifizierung digitaler Objekte +Name[el]=Αναγνώριση ψηφιακών αντικειμένων +Name[eo]=Cifereca objektnomo +Name[es]=Identificador de objeto digital +Name[eu]=Objektu digital identifikatzailea +Name[fa]=شناسۀ شئ دیجیتال +Name[fi]=Digitaalinen objektitunniste +Name[he]=מזהה אובייקט דיגיטלי +Name[hi]=डिजिटल ऑब्जेक्ट पहचानकर्ता +Name[hr]=Prepoznavanje digitalnog objekta +Name[hu]=Digitális objektumazonosító (DOI) +Name[is]=Stafrænn hlutaauðkennir +Name[it]=Identificatore oggetti digitali +Name[ja]=デジタルオブジェクト識別子 +Name[ka]=ციფრული ობიექტის ამომცნობი +Name[kk]=Цифрлық нысандарды танушы +Name[lt]=Skaitmeninių objektų identifikatorius +Name[lv]=Digitālo objektu Meklētājs +Name[mk]=Идентификатор на дигитален објект +Name[mn]=Дижитал объект ялгагч +Name[ms]=Pengenal Pasti Objek Digital +Name[nb]=Digitalt objektnavn +Name[ne]=डिजिटल वस्तु पहिचायक +Name[nn]=Digitalt objektnamn +Name[pa]=ਡਿਜ਼ੀਟਲ ਇਕਾਈ ਪਛਾਣਕਾਰ +Name[pl]=Cyfrowy identyfikator obiektu (DOI) +Name[pt_BR]=Identificador de Objeto Digital +Name[ro]=Identificator digital obiect +Name[ru]=Идентификатор цифровых объектов +Name[rw]=Ikiranga Igikoresho Bimenyetsomibare +Name[se]=Digitálalaš objeaktanamma +Name[sk]=Identifikátor digitálnych objektov +Name[sl]=Identifikator digitalnega predmeta +Name[sr]=Идентификатор дигиталног објекта +Name[sr@Latn]=Identifikator digitalnog objekta +Name[sv]=Identifikation av digitala objekt +Name[ta]=எண்ணிய பொருள் அடையாளங்காட்டி +Name[tg]=Муайянкунандаи мавзӯъҳои рақамӣ +Name[th]=ตัวระบุวัตถุดิจิตอล +Name[tr]=Sayısal Nesne Kimlikleyici +Name[tt]=Sanlı Cisem Ayırğıçı +Name[uk]=Цифровий ідентифікатор об'єкта +Name[vi]=Số chứng minh vật thể +Name[wa]=Idintifieu di didjitås agayons +Name[zh_TW]=數位物件識別 +Query=http://dx.doi.org/\\{@} +Query[sk]=http://dx.doi.org/\\{@ +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2de.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2de.desktop new file mode 100644 index 000000000..3e5861baf --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2de.desktop @@ -0,0 +1,73 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=en2de +Name=dict.cc Translation: English to German +Name[af]=dict.cc Vertaling: Engels na Duits +Name[ar]=dict.cc ترجمة : من الإنكليزية إلى الألمانية +Name[be]=dict.cc Пераклад: з англійскай на нямецкую +Name[bn]=dict.cc অনুবাদ: ইংরাজি থেকে জার্মান +Name[bs]=dict.cc prijevod: engleski u njemački +Name[ca]=Traducció dict.cc: Anglès - Alemany +Name[cs]=Překlad dict.cc: z angličtiny do němčiny +Name[csb]=dict.cc: anielsczi -> miemiecczi +Name[da]=dict.cc oversættelse: Engelsk til tysk +Name[de]=dict.cc-Übersetzung: Englisch/Deutsch +Name[el]=dict.cc Μετάφραση: Αγγλικά σε Γερμανικά +Name[eo]=dict.cc Traduko: Angla al Germana +Name[es]=dict.cc Tranducción: inglés a alemán +Name[et]=dict.cc tõlkimine: inglise->saksa +Name[eu]=dict.cc Itzulpena: ingelesetik alemanerara +Name[fa]=ترجمۀ dict.cc: انگلیسی به آلمانی +Name[fi]=dict.cc käännös: englannista saksaksi +Name[fr]=Traduction dict.cc : Anglais en Allemand +Name[fy]=dict.cc-oersetting: Ingelsk nei Dûtsk +Name[ga]=dict.cc Aistriúchán: Béarla go Gearmáinis +Name[gl]=Tradución dict.cc: Inglés a Alemán +Name[he]=תרגום dict.cc: אנגלי־גרמני +Name[hi]=dict.cc अनुवादः अंग्रेजी से जर्मन +Name[hr]=dict.cc Prijevod: engleski na njemački +Name[hu]=Dict.cc - Fordítás angolról németre +Name[is]=dict.cc Þýðing: Enska í þýsku +Name[it]=Traduzione dict.cc: dall'inglese al tedesco +Name[ja]=dict.cc 英語-ドイツ語翻訳 +Name[ka]=dict.cc თარგმნა: ინგლისურ-გერმანული +Name[kk]=dict.cc аудармашы: ағылшын тілінен немісшеге +Name[km]=dict.cc ៖ បកប្រែ​ពី​ភាសា​អង់គ្លេស​ទៅ​អាល្លឺម៉ង់ +Name[ko]=dict.cc 번역: 영어에서 독일어로 +Name[lt]=dict.cc vertimas: iš anglų į vokiečių +Name[lv]=dict.cc Tulkošana: no Angļu uz Vācu +Name[mk]=dict.cc превод: од англиски на германски +Name[nb]=dict.cc Oversettelse fra engelsk til tysk +Name[nds]=dict.cc Översetten: Engelsch na Hoochdüütsch +Name[ne]=dict.cc अनुवाद: अङ्ग्रेजीलाई जर्मनीमा +Name[nl]=dict.cc-vertaling: Engels naar Duits +Name[nn]=dict.cc Omsetjing: Engelsk til tysk +Name[pa]=dict.cc ਅਨੁਵਾਦ: ਅੰਗਰੇਜ਼ੀ ਤੋਂ ਜਰਮਨ +Name[pl]=dict.cc: angielski -> niemiecki +Name[pt]=Tradução do dict.cc: Inglês para Alemão +Name[pt_BR]=dict.cc - Tradução: Inglês para Alemão +Name[ro]=Traducere dict.cc: engleză la germană +Name[ru]=Переводчик dict.cc: англо-немецкий +Name[rw]=dict.cc Ivunura:Icyongereza mu Kidage +Name[se]=dict.cc Jorgaleapmi: Eŋgelasgielas duiskkagillii +Name[sk]=dict.cc Preklad z angličtiny do nemčiny +Name[sl]=Prevod dict.cc: angleščina v nemščino +Name[sr]=Превод на dict.cc: са енглеског на немачки +Name[sr@Latn]=Prevod na dict.cc: sa engleskog na nemački +Name[sv]=dict.cc översättning: engelska till tyska +Name[ta]=dict.cc Translation மொழிபெயர்ப்பு: ஆங்கிலத்தில் இருந்து ஜெர்மன் மொழிக்கு +Name[te]=dict.cc అనువాదం: ఆంగ్లం నుంచి జెర్మన్ కు +Name[tg]=dict.cc Тарҷума: аз Англисӣ ба Олмонӣ +Name[th]=dict.cc แปลภาษาเยอรมันเป็นอังกฤษ +Name[tr]=dict.cc Çevirisi: İngilizceden Almancaya +Name[tt]=dict.cc Tärcemä: İnglizçä -› Almança +Name[uk]=dict.cc: переклад з англійської на німецьку +Name[uz]=dict.cc tarjima: Inglizchadan Nemischaga +Name[uz@cyrillic]=dict.cc таржима: Инглизчадан Немисчага +Name[vi]=dict.cc Dịch: Tiếng Anh sang tiếng Đức +Name[wa]=Ratournaedje dict.cc di l' inglès viè l' almand +Name[zh_TW]=dict.cc 翻譯: 英文至德文 +Query=http://www.dict.cc/?s=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2es.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2es.desktop new file mode 100644 index 000000000..06a71322e --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2es.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=en2es +Name=WordReference.com Translation: English to Spanish +Name[af]=WordReference.com Vertaling: Engels na Spaans +Name[ar]=ترجمة WordReference.com : من الإنكليزية إلى الإسبانية +Name[az]=WordReference.com Tərcümə: İngiliscədən İspancaya +Name[be]=WordReference.com Пераклад: з англійскай на гішпанскую +Name[bn]=WordReference.com অনুবাদ: ইংরাজি থেকে স্প্যানিশ +Name[bs]=WordReference.com prijevod: engleski u španski +Name[ca]=Traducció WordReference.com: Anglès - Espanyol +Name[cs]=Překlad WordReference.com: z angličtiny do španělštiny +Name[csb]=WordReference.com: anielsczi -> szpańsczi +Name[cy]=Cyfieithiad WordReference.com: Saesneg i Sbaeneg +Name[da]=WordReference.com oversættelse: Engelsk til spansk +Name[de]=WordReference.com-Übersetzung: Englisch/Spanisch +Name[el]=WordReference.com Μετάφραση: Αγγλικά σε Ισπανικά +Name[eo]=WordReference.com Traduko: angla al hispana +Name[es]=WordReference.com Traducción: inglés a español +Name[et]=WordReference.com tõlkimine: inglise->hispaania +Name[eu]=WordReference.com Itzulpena: ingelesetik gaztelerara +Name[fa]=ترجمۀ WordReference.com: انگلیسی به اسپانیایی +Name[fi]=WordReference.com-käännös: englannista espanjaksi +Name[fr]=Traduction sur WordReference.com : Anglais en Espagnol +Name[fy]=WordReference.com-oersetting: Ingelsk nei Spaansk +Name[ga]=Aistriúchán WordReference.com: Béarla go Spáinnis +Name[gl]=Tradución WordReference.com: Inglés a Español +Name[he]=תרגום WordReference.com: אנגלי־ספרדי +Name[hi]=WordReference.com अनुवादः अंग्रेजी से स्पेनी +Name[hr]=WordReference.com prijevod: engleski u španjolski +Name[hu]=WordReference.com fordítás: angolról spanyolra +Name[is]=WordReference.com þýðing: Ensk/spönsk +Name[it]=Traduzione WordReference.com: dall'inglese allo spagnolo +Name[ja]=WordReference.com 英語-スペイン語翻訳 +Name[kk]=WordReference.com ағылшын тілінен испаншаға аудару +Name[km]=WordReference.com ៖ បកប្រែ​ពី​ភាសា​អង់គ្លេស​ទៅ​អេស្ប៉ាញ +Name[ko]=WordReference.com 번역: 영어에서 스페인어로 +Name[lt]=WordReference.com vertimas: iš anglų į ispanų +Name[lv]=WordReference.com Tulkošana: no Angļu uz Spāņu +Name[mk]=WordReference.com превод: од англиски на шпански +Name[mt]=Traduzzjoni WordReference.com: Ingliż għall-iSpanjol +Name[nb]=WordReference.com – oversettelse fra engelsk til spansk +Name[nds]=WordReference.com Översetten: Engelsch na Spaansch +Name[ne]=WordReference.com Translation: अङ्ग्रेजीलाई स्पेनीसमा +Name[nl]=WordReference.com-vertaling: Engels naar Spaans +Name[nn]=WordReference.com – omsetjing: engelsk til spansk +Name[pa]=WordReference.com ਅਨੁਵਾਦ:ਅੰਗਰੇਜ਼ੀ ਤੋਂ ਸਪੇਨੀ +Name[pl]=WordReference.com: angielski -> hiszpański +Name[pt]=Tradução do WordReference.com: Inglês para Espanhol +Name[pt_BR]=WordReference.com - Tradução: Inglês para Espanhol +Name[ro]=Traducere WordReference.com: engleză la spaniolă +Name[ru]=Переводчик WordReference.com: англо-испанский +Name[rw]=WordReference.com Ivunura: Icyongereza mu Gisipanyore +Name[se]=WordReference.com – jorgaleapmi: eŋgelasgielas spánskkagillii +Name[sk]=WordReference.com preklad z angličtiny do španieštiny +Name[sl]=Prevod WordReference.com: angleščina v španščino +Name[sr]=Превод на WordReference.com: са енглеског на шпански +Name[sr@Latn]=Prevod na WordReference.com: sa engleskog na španski +Name[sv]=Wordreference.com översättning: engelska till spanska +Name[ta]=WordReference.com மொழிபெயர்ப்பு: ஆங்கிலத்தில் இருந்து ஸ்பானிஷ் மொழிக்கு +Name[te]=WordReference.com అనువాదం: ఆంగ్లం నుంచి స్పానిష్ కు +Name[tg]=WordReference.com Тарҷума: Аз Англисӣ ба Испанӣ +Name[th]=WordReference.com แปลภาษาอังกฤษเป็นสเปน +Name[tr]=WordReference.com Çevirisi: İngilizceden İspanyolcaya +Name[tt]=WordReference.com Tärcemäse: İnglizçä -› İspança +Name[uk]=WordReference.com: переклад з англійської на іспанську +Name[uz]=WordReference.com tarjima: Inglizchadan Ispanchaga +Name[uz@cyrillic]=WordReference.com таржима: Инглизчадан Испанчага +Name[vi]=WordReference.com Dịch: tiếng Anh sang tiếng Tây Ban Nha +Name[wa]=WordReference.com ratournaedje di l' inglès viè l' espagnol +Name[zh_CN]=WordReference.com 翻译:英语译西班牙语 +Name[zh_TW]=WordReference.com 翻譯: 英文至西班牙文 +Query=http://www.wordreference.com/es/translation.asp?tranword=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2fr.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2fr.desktop new file mode 100644 index 000000000..545d8fc2b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2fr.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=en2fr +Name=WordReference.com Translation: English to French +Name[af]=WordReference.com Vertaling: Engels na Fraans +Name[ar]=ترجمة WordReference.com : من الإنجليزية إلى الفرنسية +Name[az]=WordReference.com Tərcümə: İngiliscədən Fransızcaya +Name[be]=WordReference.com Пераклад: з англійскай на французскую +Name[bn]=WordReference.com অনুবাদ: ইংরাজি থেকে ফরাসী +Name[bs]=WordReference.com prijevod: engleski u francuski +Name[ca]=Traducció WordReference.com: Anglès - Francès +Name[cs]=Překlad WordReference.com: z angličtiny do francouzštiny +Name[csb]=WordReference.com: anielsczi -> francësczi +Name[cy]=Cyfieithiad WordReference.com: Saesneg i Ffrangeg +Name[da]=WordReference.com oversættelse: Engelsk til fransk +Name[de]=WordReference.com-Übersetzung: Englisch/Französisch +Name[el]=WordReference.com Μετάφραση: Αγγλικά σε Γαλλικά +Name[eo]=WordReference.com Traduko: angla al franca +Name[es]=WordReference.com Traducción: inglés a francés +Name[et]=WordReference.com tõlkimine: inglise->prantsuse +Name[eu]=WordReference.com Itzulpena: ingelesetik frantsesera +Name[fa]=ترجمۀ WordReference.com: انگلیسی به فرانسوی +Name[fi]=WordReference.com-käännös: englannista ranskaksi +Name[fr]=Traduction sur WordReference.com : Anglais en Français +Name[fy]=WordReference.com-oersetting: Ingelsk nei Frânsk +Name[ga]=Aistriúchán WordReference.com: Béarla go Fraincis +Name[gl]=Tradución WordReference.com: Inglés a Francés +Name[he]=תרגום WordReference.com: אנגלי־צרפתי +Name[hi]=WordReference.com अनुवादः अंग्रेजी से फ्रांसीसी +Name[hr]=WordReference.com prijevod: engleski na francuski +Name[hu]=WordReference.com fordítás: angolról franciára +Name[is]=WordReference.com þýðing: Ensk/frönsk +Name[it]=Traduzione WordReference.com: dall'inglese al francese +Name[ja]=WordReference.com 英語-フランス語翻訳 +Name[kk]=WordReference.com ағылшын тілінен французшаға аудару +Name[km]=WordReference.com ៖ បកប្រែ​ពី​ភាសា​អង់គ្លេស​ទៅ​បារាំង +Name[ko]=WordReference.com 번역: 영어에서 프랑스어로 +Name[lt]=WordReference.com vertimas: iš anglų į prancūzų +Name[lv]=WordReference.com Tulkošana: no Angļu uz Franču +Name[mk]=WordReference.com превод: од англиски на француски +Name[mt]=Traduzzjoni WordReference.com: Ingliż għall-Franċiż +Name[nb]=WordReference.com – oversettelse fra engelsk til fransk +Name[nds]=WordReference.com Översetten: Engelsch na Franzöösch +Name[ne]=WordReference.com Translation: अङ्ग्रेजीलाई फ्रेन्चमा +Name[nl]=WordReference.com-vertaling: Engels naar Frans +Name[nn]=WordReference.com – omsetjing: engelsk til fransk +Name[pa]=WordReference.com ਅਨੁਵਾਦ:ਅੰਗਰੇਜ਼ੀ ਤੋਂ ਫਰੈਂਚ +Name[pl]=WordReference.com: angielski -> francuski +Name[pt]=Tradução do WordReference.com: Inglês para Francês +Name[pt_BR]=WordReference.com - Tradução: Inglês para Francês +Name[ro]=Traducere WordReference.com: engleză la franceză +Name[ru]=Переводчик WordReference.com: англо-французский +Name[rw]=WordReference.com Ivunura: Icyongereza mu Gifaransa +Name[se]=WordReference.com – jorgaleapmi: eŋgelasgielas fránskkagillii +Name[sk]=WordReference.com preklad z angličtiny do francúzštiny +Name[sl]=Prevod WordReference.com: angleščina v francoščino +Name[sr]=Превод на WordReference.com: са енглеског на француски +Name[sr@Latn]=Prevod na WordReference.com: sa engleskog na francuski +Name[sv]=Wordreference.com översättning: engelska till franska +Name[ta]=WordReference.com மொழிபெயர்ப்பு: ஆங்கிலத்தில் இருந்து ப்ரென்சு மொழிக்கு +Name[te]=WordReference.com అనువాదం: ఆంగ్లం నుంచి ఫ్రెంచి కు +Name[tg]=WordReference.com Тарҷума: Аз Англисӣ ба Фаронсавӣ +Name[th]=WordReference.com แปลภาษาอังกฤษเป็นฝรั่งเศส +Name[tr]=WordReference.com Çevirisi: İngilizceden Fransızcaya +Name[tt]=WordReference.com Tärcemäse: İnglizçä -› Fransça +Name[uk]=WordReference.com: переклад з англійської на французьку +Name[uz]=WordReference.com tarjima: Inglizchadan Fransuzchaga +Name[uz@cyrillic]=WordReference.com таржима: Инглизчадан Французчага +Name[vi]=WordReference.com Dịch: Tiếng Anh sang tiếng Pháp +Name[wa]=WordReference.com ratournaedje di l' inglès viè l' francès +Name[zh_CN]=WordReference.com 翻译:英语译法语 +Name[zh_TW]=WordReference.com 翻譯: 英文至法文 +Query=http://www.wordreference.com/fr/Translation.asp?enfr=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2it.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2it.desktop new file mode 100644 index 000000000..f4db13931 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/en2it.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=en2it +Name=WordReference.com Translation: English to Italian +Name[af]=WordReference.com Vertaling: Engels na Italiaans +Name[ar]=ترجمة WordReference.com: من الإنجليزية إلى الإيطالية +Name[az]=WordReference.com Tərcümə: İngiliscədən İtalyancaya +Name[be]=WordReference.com Пераклад: з англійскай на італійскую +Name[bn]=WordReference.com অনুবাদ: ইংরাজি থেকে ইতালীয় +Name[bs]=WordReference.com prijevod: engleski u italijanski +Name[ca]=Traducció WordReference.com: Anglès - Italià +Name[cs]=Překlad WordReference.com: z angličtiny do italštiny +Name[csb]=WordReference.com: anielsczi -> italsczi +Name[cy]=Cyfieithiad WordReference.com: Saesneg i Eidaleg +Name[da]=WordReference.com oversættelse: Engelsk til italiensk +Name[de]=WordReference.com-Übersetzung: Englisch/Italienisch +Name[el]=WordReference.com Μετάφραση: Αγγλικά σε Ιταλικά +Name[eo]=WordReference.com Traduko: angla al itala +Name[es]=WordReference.com Traducción: inglés a italiano +Name[et]=WordReference.com tõlkimine: inglise->itaalia +Name[eu]=WordReference.com Itzulpena: ingelesetik italierara +Name[fa]=ترجمۀ WordReference.com: انگلیسی به ایتالیایی +Name[fi]=WordReference.com-käännös: englannista italiaksi +Name[fr]=Traduction sur WordReference.com : Anglais en Italien +Name[fy]=WordReference.com-oersetting: Ingelsk nei Italiaansk +Name[ga]=Aistriúchán WordReference.com: Béarla go Iodáilis +Name[gl]=Tradución WordReference.com: Inglés a Italiano +Name[he]=תרגום WordReference.com: אנגלי־איטלקי +Name[hi]=WordReference.com अनुवादः अंग्रेजी से इतालवी +Name[hr]=WordReference.com Prijevod: engleski na talijanski +Name[hu]=WordReference.com fordítás: angolról olaszra +Name[is]=WordReference.com þýðing: Ensk/ítölsk +Name[it]=Traduzione WordReference.com: dall'inglese all'italiano +Name[ja]=WordReference.com 英語-イタリア語翻訳 +Name[kk]=WordReference.com ағылшын тілінен итальяншаға аудару +Name[km]=WordReference.com ៖ បកប្រែ​ពី​ភាសា​អង់គ្លេស​ទៅ​អ៊ីតាលី +Name[ko]=WordReference.com 번역: 영어에서 이탈리아어로 +Name[lt]=WordReference.com vertimas: iš anglų į italų +Name[lv]=WordReference.com Tulkošana: no Angļu uz Itāļu +Name[mk]=WordReference.com превод: од англиски на италијански +Name[mt]=Trasuzzjoni WordReference.com: Ingliż għat-Taljan +Name[nb]=WordReference.com – oversettelse fra engelsk til italiensk +Name[nds]=WordReference.com Översetten: Engelsch na Italieensch +Name[ne]=WordReference.com Translation: अङ्ग्रेजीलाई इटलीमा +Name[nl]=WordReference.com-vertaling: Engels naar Italiaans +Name[nn]=WordReference.com – omsetjing: engelsk til italiensk +Name[pa]=WordReference.com ਅਨੁਵਾਦ:ਅੰਗਰੇਜ਼ੀ ਤੋਂ ਇਤਾਲਵੀ +Name[pl]=WordReference.com: angielski -> włoski +Name[pt]=Tradução do WordReference.com: Inglês para Italiano +Name[pt_BR]=WordReference.com - Tradução: Inglês para Italiano +Name[ro]=Traducere WordReference.com: engleză la italiană +Name[ru]=Переводчик WordReference.com: англо-итальянский +Name[rw]=WordReference.com Ivunura: Icyongereza mu Gitaliyani +Name[se]=WordReference.com – jorgaleapmi: eŋgelasgielas italialašgillii +Name[sk]=WordReference.com preklad z angličtiny do talianštiny +Name[sl]=Prevod WordReference.com: angleščina v italijanščino +Name[sr]=Превод на WordReference.com: са енглеског на италијански +Name[sr@Latn]=Prevod na WordReference.com: sa engleskog na italijanski +Name[sv]=Wordreference.com översättning: engelska till italienska +Name[ta]=WordReference.com மொழிபெயர்ப்பு: ஆங்கிலத்தில் இருந்து இத்தாலிய மொழிக்கு +Name[te]=WordReference.com అనువాదం: ఆంగ్లం నుంచి ఇటాలియన్ కు +Name[tg]=WordReference.com Тарҷума: Аз Англисӣ ба Итолиёгӣ +Name[th]=WordReference.com แปลภาษาอังกฤษเป็นอิตาเลี่ยน +Name[tr]=WordReference.com Çevirisi: İngilizceden İtalyancaya +Name[tt]=WordReference.com Tärcemäse: İnglizçä -› İtalça +Name[uk]=WordReference.com: переклад з англійської на італійську +Name[uz]=WordReference.com tarjima: Inglizchadan Italyanchaga +Name[uz@cyrillic]=WordReference.com таржима: Инглизчадан Италянчага +Name[vi]=WordReference.com Dịch: Tiếng Anh sang tiếng Ý +Name[wa]=WordReference.com ratournaedje di l' inglès viè l' itålyin +Name[zh_CN]=WordReference.com 翻译:英语译意大利语 +Name[zh_TW]=WordReference.com 翻譯: 英文至義大利文 +Query=http://www.wordreference.com/it/translation.asp?enit=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/es2en.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/es2en.desktop new file mode 100644 index 000000000..48e49a249 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/es2en.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=es2en +Name=WordReference.com Translation: Spanish to English +Name[af]=WordReference.com Vertaling: Spaans na Engels +Name[ar]=ترجمة WordReference.com : من الأسبانية إلى الإنجليزية +Name[az]=WordReference.com Tərcümə: İspancadan İngiliscəyə +Name[be]=WordReference.com Пераклад: з гішпанскай на англійскую +Name[bn]=WordReference.com অনুবাদ: স্প্যানিশ থেকে ইংরাজি +Name[bs]=WordReference.com prijevod: španski u engleski +Name[ca]=Traducció WordReference.com: Espanyol - Anglès +Name[cs]=Překlad WordReference.com: ze španělštiny do angličtiny +Name[csb]=WordReference.com: szpańsczi -> anielsczi +Name[cy]=Cyfieithiad WordReference.com: Sbaeneg i Saesneg +Name[da]=WordReference.com oversættelse: Spansk til engelsk +Name[de]=WordReference.com-Übersetzung: Spanisch/Englisch +Name[el]=WordReference.com Μετάφραση: Ισπανικά σε Αγγλικά +Name[eo]=WordReference.com Traduko: hispana al angla +Name[es]=WordReference.com Traducción: español a inglés +Name[et]=WordReference.com tõlkimine: hispaania->inglise +Name[eu]=WordReference.com Itzulpena: gazteleratik ingelesera +Name[fa]=ترجمۀ WordReference.com: اسپانیایی به انگلیسی +Name[fi]=WordReference.com-käännös: espanjasta englanniksi +Name[fr]=Traduction sur WordReference.com : Espagnol en Anglais +Name[fy]=WordReference.com-oersetting: Spaansk nei Ingelsk +Name[ga]=WordReference.com Aistriúchán: Spáinnis go Béarla +Name[gl]=Tradución WordReference.com: Español a Inglés +Name[he]=תרגום WordReference.com: ספרדי־אנגלי +Name[hi]=WordReference.com अनुवादः स्पेनी से अंग्रेजी +Name[hr]=WordReference.com Prijevod: španjolski na engleski +Name[hu]=WordReference.com fordítás: spanyolról angolra +Name[is]=WordReference.com þýðing: Spönsk/ensk +Name[it]=Traduzione WordReference.com: dallo spagnolo all'inglese +Name[ja]=WordReference.com スペイン語-英語翻訳 +Name[kk]=WordReference.com испан тілінен ағылшынға аудару +Name[km]=WordReference.com ៖ បកប្រែ​ពី​ភាសា​អេស្ប៉ាញ​ទៅ​អង់គ្លេស +Name[ko]=WordReference.com 번역: 스페인어에서 영어로 +Name[lt]=WordReference.com vertimas: iš ispanų į anglų +Name[lv]=WordReference.com Tulkošana: no Spāņu uz Angļu +Name[mk]=WordReference.com превод: од шпански на англиски +Name[mt]=Traduzzjoni WordReference.com: Spanjol għall-Ingliż +Name[nb]=WordReference.com – oversettelse fra spansk til engelsk +Name[nds]=WordReference.com Översetten: Spaansch na Engelsch +Name[ne]=WordReference.com Translation: स्पेनिसलाई अङ्ग्रेजीमा +Name[nl]=WordReference.com-vertaling: Spaans naar Engels +Name[nn]=WordReference.com – omsetjing: spansk til engelsk +Name[pa]=WordReference.com ਅਨੁਵਾਦ:ਸਪੇਨੀ ਤੋਂ ਅੰਗਰੇਜ਼ੀ +Name[pl]=WordReference.com: hiszpański -> angielski +Name[pt]=Tradução do WordReference.com: Espanhol para Inglês +Name[pt_BR]=WordReference.com - Tradução: Espanhol para Inglês +Name[ro]=Traducere WordReference.com: spaniolă la engleză +Name[ru]=Переводчик WordReference.com: испанско-английский +Name[rw]=WordReference.com Ivunura: Igisipanyore mu Cyongereza +Name[se]=WordReference.com – jorgaleapmi: spánskkagielas eŋgelasgillii +Name[sk]=WordReference.com preklad zo španieštiny do angličtiny +Name[sl]=Prevod WordReference.com: španščina v angleščino +Name[sr]=Превод на WordReference.com: са шпанског на енглески +Name[sr@Latn]=Prevod na WordReference.com: sa španskog na engleski +Name[sv]=Wordreference.com översättning: spanska till engelska +Name[ta]=WordReference.com மொழிபெயர்ப்பு: ஸ்பானிஷ் மொழியில் இருந்து ஆங்கிலத்துக்கு +Name[te]=WordReference.com అనువాదం: స్పానిష్ నుంచి ఆంగ్లం కు +Name[tg]=WordReference.com Тарҷума: Аз Испанӣ ба Англисӣ +Name[th]=WordReference.com แปลภาษาสเปนเป็นอังกฤษ +Name[tr]=WordReference.com Çevirisi: İspanyolcadan İngilizceye +Name[tt]=WordReference.com Tärcemäse: İspança -› İnglizçä +Name[uk]=WordReference.com: переклад з іспанської на англійську +Name[uz]=WordReference.com tarjima: Ispanchadan Inglizchaga +Name[uz@cyrillic]=WordReference.com таржима: Испанчадан Инглизчага +Name[vi]=WordReference.com Dịch: Tiếng Tây Ban Nha sang tiếng Anh +Name[wa]=WordReference.com ratournaedje do castiyan viè l' inglès +Name[zh_CN]=WordReference.com 翻译:西班牙语译英语 +Name[zh_TW]=WordReference.com 翻譯: 西班牙文至英文 +Query=http://www.wordreference.com/es/en/translation.asp?spen=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/excite.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/excite.desktop new file mode 100644 index 000000000..f889c0257 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/excite.desktop @@ -0,0 +1,22 @@ +[Desktop Entry] +Type=Service +Name=Excite +Name[bn]=এক্সসাইট +Name[csb]=Excite - szëkôrz starnów WWW +Name[eo]=Ekscito +Name[hi]=एक्साइट +Name[ne]=उत्तेजना +Name[nso]=Thabisa +Name[pa]=ਐਕਸਾਟੀ +Name[pl]=Excite - wyszukiwarka stron WWW +Name[rw]=Gusembura +Name[ss]=Jabulisa +Name[ta]=ஆச்சர்யம் +Name[te]=ఎక్సైట్ +Name[ven]=Takadza +Name[vi]=Tra Excite +Name[zu]=Jabulisa +ServiceTypes=SearchProvider +Keys=ex,excite +Query=http://search.excite.com/search.gw?search=\\{@} +Query[en_GB]=http://www.excite.co.uk/search/web/results?q=\\{@}&c=web diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/feedster.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/feedster.desktop new file mode 100644 index 000000000..4843936df --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/feedster.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Type=Service +Name=Feedster +Name[bn]=ফীডস্টার +Name[hi]=फीडस्टर +Name[ja]=Feedster 検索 +Name[ne]=फेडस्टर +Name[pa]=ਫੀਡਸਟੀਰ +Name[ta]=பீட்ஸ்டர் +Name[te]=ఫీడ్ స్టర్ +Name[th]=Feedster หาบล็อก +Name[vi]=Tra Feedster +ServiceTypes=SearchProvider +Keys=blog,rss,feedster +Query=http://www.feedster.com/search.php?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[he]=http://www.feedster.com/search.php?q=\\{@}&ie=UTF8&oe=UTF-88 +Query[ne]=http://www.feedster.com/search.php?q=\\{@}ie=UTF-8&oe=UTF-8 +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/foldoc.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/foldoc.desktop new file mode 100644 index 000000000..2ff15b7a7 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/foldoc.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Type=Service +Name=Free On-Line Dictionary of Computing +Name[af]=Gratis Aanlyn Woordeboek van Rekenaars +Name[ar]=قاموس الحاسوب و البرمجة المجاني على الخط +Name[az]=Onlayn Kompüter Lüğəti +Name[be]=Свабодны кампутарны слоўнік +Name[bn]=কমপিউটিং-এর ফ্রী অন-লাইন অভিধান +Name[bs]=Besplatni on-line rječnik računarstva (FOLDOC) +Name[ca]=Diccionari lliure d'informàtica en línia +Name[cs]=Online slovník výp. techniky +Name[csb]=Wòlnoprzistãpny kòmpùtrowi słowôrz +Name[cy]=Geiriadur Rhydd Ar-lein o Gyfrifiaduro +Name[da]=Gratis online-computerordbog +Name[el]=Ελεύθερο διαδικτυακό λεξικό υπολογιστών +Name[eo]=Libera reta vortaro de komputado +Name[es]=Free On-Line Dictionary Of Computing +Name[et]=Vaba arvutialane võrgusõnastik +Name[eu]=Konputazioari buruzko lineako hiztegi librea +Name[fa]=واژه‌نامۀ برخط رایگان محاسبات +Name[fi]=Vapaa tietokonealan sanasto +Name[fr]=Dictionnaire de l'informatique gratuit en ligne +Name[fy]=Free On-Line Dictionary Of Computing (IT-wurdboek) +Name[gl]=Diccionario Libre En liña da Computación +Name[he]=מילון מחשוב מקוון חופשי +Name[hi]=कम्प्यूटर कार्य हेतु मुफ्त ऑन-लाइन शब्दकोश +Name[hr]=Slobodan internetski rječnik računarstva +Name[hu]=Szabad hozzáférésű számítástechnikai szótár +Name[is]=Ókeypis tölvuorðabók á Netinu +Name[it]=Dizionario libero on-line di informatica +Name[ja]=コンピューティングに関するフリーオンライン辞書 +Name[ka]=თავისუფალი კომპიუტერული წებ ლექსიკონი +Name[kk]=Ашық компьютерлік онлайн сөздігі +Name[km]=វចនានុក្រម​កុំព្យូទ័រ​លើ​បណ្ដាញ មិន​គិត​ថ្លៃ +Name[ko]=무료 온라인 컴퓨터 사전 +Name[lt]=Nemokamas kompiuterijos žodynas tinkle +Name[lv]=Bezmaksas Datorikas vārdnīca +Name[mk]=Слободен мрежен речник за компјутери +Name[ms]=Kamus Perkomputeran Dalam Talian Percuma +Name[mt]=Dizzjunarju tal-Compjuters Online B'xejn (FOLDOC) +Name[nb]=Gratis engelsk dataordbok på nett +Name[nds]=Free On-Line Dictionary Of Computing +Name[ne]=कम्प्युटिङको अन-लाइन शब्दकोश +Name[nl]=Free On-Line Dictionary Of Computing (IT-woordenboek) +Name[nn]=Free On-Line Dictionary Of Computing +Name[pa]=ਕੰਪਿਊਟਰ ਦਾ ਆਨ-ਲਾਈਨ ਮੁਫਤ ਸ਼ਬਦ-ਕੋਸ਼ +Name[pl]=Darmowy słownik informatyczny +Name[pt]=Dicionário Livre de Computação On-Line +Name[pt_BR]=Dicionário de Computação On-line Gratuito +Name[ro]=Dicționar on-line gratuit despre calculatoare +Name[ru]=Свободный онлайн-словарь по информатике +Name[rw]=Inkoranyamagambo ya Mudasobwa kuri Interineti y'Ubuntu +Name[sk]=Free On-Line Dictionary Of Computing +Name[sl]=Free On-Line Dictionary Of Computing +Name[sr]=Бесплатни On-Line речник за рачунаре +Name[sr@Latn]=Besplatni On-Line rečnik za računare +Name[sv]=Free On-Line Dictionary Of Computing (en datortermsordlista) +Name[ta]=கணிப்பொறி அகராதி வலைதளத்தில் இலவசமாக +Name[tg]=Луғати озоди дар шабакаи онлайн вуҷуддоштаи информатика +Name[th]=พจนานุกรมสำหรับวิทยาการคอมพิวเตอร์ แบบออนไลน์ +Name[tr]=Ücretsiz Çevrimiçi Bilişim Sözlüğü +Name[tt]=Sanaq Tarmağı buyınça On-Line Süzlek +Name[uk]=Вільний словник з інформатики в мережі +Name[uz]=Kompyuter atamalari boʻyicha Internet lugʻat +Name[uz@cyrillic]=Компьютер атамалари бўйича Интернет луғат +Name[vi]=Từ điển Tin học Trực tuyến Miễn phí +Name[wa]=Diccionaire informatike libe so les fyis +Name[zh_CN]=Free On-Line Dictionary Of Computing +Name[zh_TW]=免費的線上電腦辭典 +ServiceTypes=SearchProvider +Keys=fd,foldoc +Query=http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2de.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2de.desktop new file mode 100644 index 000000000..c73229494 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2de.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Type=Service +Name=LEO - Translate Between French and German +Name[af]=LEO - Vertaal tussen Fraans en Duits +Name[ar]=LEO - ترجم بين الألمانية و الفرنسية +Name[be]=LEO - Пераклад з французскай на нямецкую і наадварот +Name[bn]=লিও - জার্মান থেকে ফরাসী বা ফরাসী থেকে জার্মান-এ অনুবাদ করুন +Name[bs]=LEO prijevod: francuski u njemački +Name[ca]=LEO - Tradueix entre francès i alemany +Name[cs]=LEO - překlad mezi francouzštinou a němčinou +Name[csb]=LEO - dolmaczenié: francësczi ->miemiecczi +Name[da]=LEO - Oversæt mellem fransk og tysk +Name[de]=LEO - Übersetzung Französisch/Deutsch +Name[el]=LEO - Μετάφραση μεταξύ Γαλλικών και Γερμανικών +Name[eo]=LEO - Traduko inter la franca kaj la germana +Name[es]=LEO - Traducción entre francés y alemán +Name[et]=LEO - tõlkimine: prantsuse-saksa +Name[eu]=LEO - itzuli alemana eta frantsearen artean +Name[fa]=LEO - ترجمۀ بین فرانسوی و آلمانی +Name[fi]=LEO - Käännä ranskan ja saksan välillä +Name[fr]=LEO - Traduction Français - Allemand +Name[fy]=LEO - oersetting tusken Fransk en Dûtsk +Name[ga]=LEO - Aistriúchán idir Fraincis agus Gearmáinis +Name[gl]=LEO -Tradución entre Francés e Alemán +Name[he]=LEO - תרגום צרפתי-אנגלי +Name[hi]=लिओ - फ्रांसीसी तथा जर्मनी के बीच अनुवाद +Name[hr]=LEO - Prevođenje između francuskog i njemačkog +Name[hu]=LEO - Fordítás franciáról németre (mindkét irányban) +Name[is]=LEO - Þýða á milli frönsku og þýsku +Name[it]=LEO - Traduzione dal francese al tedesco +Name[ja]=LEO - フランス語-ドイツ語間の翻訳 +Name[ka]=LEO - ფრანგულ-გერმანული მთარგმნელი +Name[kk]=LEO - француз және неміс тілдер арасында аудару +Name[km]=LEO - បកប្រែ​រវាង​ភាសា​បារាំង និង​អាល្លឺម៉ង់ +Name[ko]=LEO - 프랑스어와 독일어 사이 번역 +Name[lt]=LEO - vertimas iš prancūzų į vokiečių ir atvirkščiai +Name[lv]=LEO - Tulkot no Franču uz Vācu +Name[mk]=LEO - превод меѓу француски и германски +Name[nb]=LEO – Oversettelse fra fransk til tysk +Name[nds]=LEO - Översetten twischen Franzöösch un Hoochdüütsch +Name[ne]=LEO - फ्रेन्च र जर्मनमा अनुवाद गर्नुहोस् +Name[nl]=LEO - vertaling tussen Frans en Duits +Name[nn]=LEO – Omsetjing frå fransk til tysk +Name[pa]=LEO - ਫਰੈਂਚ ਤੇ ਜਰਮਨ ਵਿੱਚ ਅਨੁਵਾਦ +Name[pl]=LEO - tłumaczenie: francuski ->niemiecki +Name[pt]=LEO - Traduzir Entre Francês e Alemão +Name[pt_BR]=LEO - Tradução entre Francês e Alemão +Name[ro]=LEO - Traducere între franceză și germană +Name[ru]=LEO - французско-немецкий перевод +Name[rw]=LEO - Kuvunura Hagati y'Igifaransa n'Icyongereza +Name[se]=LEO – jorgal fránskka- ja duiskkagiela gaskkas +Name[sk]=LEO - Preklad z francúzštiny do nemčiny +Name[sl]=LEO - Prevod med francoščino in nemščino +Name[sr]=LEO — превод између француског и немачког +Name[sr@Latn]=LEO — prevod između francuskog i nemačkog +Name[sv]=LEO - översätt från franska till tyska +Name[ta]=LEO - ப்ரென்ச் மற்றும் ஜெர்மன் இடையே மொழிப்பெயர்க்கவும் +Name[te]=లియొ - ఫ్రెంచ్ మరయూ జెర్మన్ మద్య అనువాదం +Name[tg]=LEO - Тарҷума дар байни Фрасавию Олмонӣ +Name[th]=LEO - แปลภาษา ฝรั่งเศส <-> เยอรมัน +Name[tr]=LEO - Fransızcadan Almancaya Çeviri +Name[tt]=LEO - Tärcemä: Fransça -› Almança +Name[uk]=LEO - переклад між французькою та німецькою +Name[uz]=LEO - Fransuzchadan Nemischaga tarjima +Name[uz@cyrillic]=LEO - Французчадан Немисчага таржима +Name[vi]=LEO - Dịch tiếng Pháp sang tiếng Đức +Name[wa]=LEO - Ratournaedje do francès viè l' almand +Name[zh_TW]=LEO - 翻譯法語和德語 +ServiceTypes=SearchProvider +Keys=fr2de +Query=http://dict.leo.org/?lp=frde&search=\\{@} +Query[ne]=http://dict.leo.org/?lp=frdesearch=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2en.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2en.desktop new file mode 100644 index 000000000..44694be00 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/fr2en.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=fr2en +Name=WordReference.com Translation: French to English +Name[af]=WordReference.com Vertaling: Fraans na Engels +Name[ar]=ترجمة WordReference.com: من الفرنسية إلى الإنجليزية +Name[az]=WordReference.com Tərcümə: Fransızcadan İngiliscəyə +Name[be]=Пераклад WordReference.com: з французскай на англійскую +Name[bn]=WordReference.com অনুবাদ: ফরাসী থেকে ইংরাজি +Name[bs]=WordReference.com prijevod: francuski u engleski +Name[ca]=Traducció WordReference.com: Francès - Anglès +Name[cs]=Překlad WordReference.com: z francouzštiny do angličtiny +Name[csb]=WordReference.com: francësczi -> anielsczi +Name[cy]=Cyfieithiad WordReference.com: Ffrangeg i Saesneg +Name[da]=WordReference.com oversættelse: Fransk til engelsk +Name[de]=WordReference.com-Übersetzung: Französisch/Englisch +Name[el]=WordReference.com Μετάφραση: Γαλλικά σε Αγγλικά +Name[eo]=WordReference.com Traduko: franca al angla +Name[es]=WordReference.com Traducción: francés a inglés +Name[et]=WordReference.com tõlkimine: prantsuse->inglise +Name[eu]=WordReference.com Itzulpena: frantsesetik ingelesera +Name[fa]=ترجمۀ WordReference.com: فرانسوی به انگلیسی +Name[fi]=WordReference.com-käännös: ranskasta englanniksi +Name[fr]=Traduction sur WordReference.com : Français en Anglais +Name[fy]=WordReference.com-oersetting: Frânsk nei Ingelsk +Name[ga]=Aistriúchán WordReference.com: Fraincis go Béarla +Name[gl]=Tradución WordReference.com: Francés a Inglés +Name[he]=תרגום WordReference.com: צרפתי־אנגלי +Name[hi]=WordReference.com अनुवादः फ्रांसीसी से अंग्रेजी +Name[hr]=WordReference.com Prijevod: francuski na engleski +Name[hu]=WordReference.com fordítás: franciáról angolra +Name[is]=WordReference.com þýðing: Frönsk/ensk +Name[it]=Traduzione WordReference.com: dal francese all'inglese +Name[ja]=WordReference.com フランス語-英語翻訳 +Name[kk]=WordReference.com француз тілінен ағылшынға аудару +Name[km]=WordReference.com ៖ បកប្រែ​ពី​ភាសា​បារាំង​ទៅ​អង់គ្លេស +Name[ko]=WordReference.com 번역: 프랑스어에서 영어로 +Name[lt]=WordReference.com vertimas: iš prancūzų į anglų +Name[lv]=WordReference.com Tulkošana: no Franču uz Angļu +Name[mk]=WordReference.com превод: од француски на англиски +Name[mt]=Traduzzjoni WordReference.com: Franċiż għall-Ingliż +Name[nb]=WordReference.com – oversettelse fra fransk til engelsk +Name[nds]=WordReference.com Översetten: Franzöösch na Engelsch +Name[ne]=WordReference.com Translation: फ्रेन्चलाई अङ्ग्रेजीमा +Name[nl]=WordReference.com-vertaling: Frans naar Engels +Name[nn]=WordReference.com – omsetjing: fransk til engelsk +Name[pa]=WordReference.com ਅਨੁਵਾਦ:ਫਰੈਂਚ ਤੋਂ ਅੰਗਰੇਜ਼ੀ +Name[pl]=WordReference.com: francuski -> angielski +Name[pt]=Tradução do WordReference.com: Francês para Inglês +Name[pt_BR]=WordReference.com - Tradução: Francês para Inglês +Name[ro]=Traducere WordReference.com: franceză la engleză +Name[ru]=Переводчик WordReference.com: французско-английский +Name[rw]=WordReference.com Ivunura: Igifaransa mu Cyongereza +Name[se]=WordReference.com – jorgaleapmi: fránskkagielas eŋgelasgillii +Name[sk]=WordReference.com preklad z francúzštiny do angličtiny +Name[sl]=Prevod WordReference.com: francoščina v angleščino +Name[sr]=Превод на WordReference.com: са француског на енглески +Name[sr@Latn]=Prevod na WordReference.com: sa francuskog na engleski +Name[sv]=Wordreference.com översättning: franska till engelska +Name[ta]=WordReference.com மொழிபெயர்ப்பு: பிரென்சு மொழியில் இருந்து ஆங்கிலத்துக்கு +Name[te]=WordReference.com అనువాదం: ఫ్రెంచి నుంచి ఆంగ్లం కు +Name[tg]=WordReference.com Тарҷума: аз Франсавӣ ба Англисӣ +Name[th]=WordReference.com แปลภาษาฝรั่งเศสเป็นอังกฤษ +Name[tr]=WordReference.com Çevirisi: Fransızcadan İngilizceye +Name[tt]=WordReference.com Tärcemäse: Fransça -› İnglizçä +Name[uk]=WordReference.com: переклад з французької на англійську +Name[uz]=WordReference.com tarjima: Fransuzchadan Inglizchaga +Name[uz@cyrillic]=WordReference.com таржима: Французчадан Инглизчага +Name[vi]=WordReference.com Dịch: tiếng Pháp sang tiếng Anh +Name[wa]=WordReference.com ratournaedje do francès viè l' inglès +Name[zh_CN]=WordReference.com 翻译:法语译英语 +Name[zh_TW]=WordReference.com 翻譯: 法文至英文 +Query=http://www.wordreference.com/fr/en/translation.asp?fren=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/freedb.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/freedb.desktop new file mode 100644 index 000000000..0ee044112 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/freedb.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Type=Service +Name=FreeDB +Name[bn]=ফ্রী-ডি.বি. +Name[eo]=Libera Datumbazo +Name[hi]=फ्री-डीबी +Name[ne]=नि: शुल्क DB +Name[ta]=இலவசடிபி +Name[te]=ఫ్రీడిబి +Name[tg]=ОзодиDB +Name[vi]=Tra FreeDB +ServiceTypes=SearchProvider +Keys=fdb,freedb +Query=http://www.freedb.org/freedb_search.php?words=\\{@} +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/freshmeat.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/freshmeat.desktop new file mode 100644 index 000000000..598c26a06 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/freshmeat.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Type=Service +Name=Freshmeat +Name[bn]=ফ্রেশমীট +Name[csb]=Freshmeat - szëkôrz programów +Name[hi]=फ्रेशमीट +Name[mn]=Шинэмах +Name[ne]=फ्रेसमिट +Name[nso]=Nama ye Botse +Name[pa]=ਤਾਜ਼ਾ +Name[pl]=Freshmeat - wyszukiwarka programów +Name[ta]=புது இறைச்சி +Name[te]=ఫ్రెష్ మీట్ +Name[ven]=Namathethe +Name[vi]=Tra Freshmeat +Name[zu]=Inyama yamanje +ServiceTypes=SearchProvider +Keys=fm,freshmeat +Query=http://freshmeat.net/search/?q=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/froogle.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/froogle.desktop new file mode 100644 index 000000000..2cb235ac1 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/froogle.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Service +Name=Froogle +Name[bn]=ফ্রুগল্ +Name[hi]=फ्रूगल +Name[ja]=Froogle 商品検索 +Name[ne]=फ्रुगल +Name[pa]=ਫਰੂਗਲ +Name[ta]=ஃப்ரூகுல் +Name[te]=ఫ్రూగుల్ +Name[th]=Froogle หาสินค้าผ่าน google +Name[vi]=Tra Froogle +ServiceTypes=SearchProvider +Keys=froogle +Query=http://froogle.google.com/froogle?q=\\{@} +Query[en_GB]=http://froogle.google.co.uk/froogle?q=\\{@} +Query[nb]=http://froogle.google.no/froogle?q=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/fsd.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/fsd.desktop new file mode 100644 index 000000000..ed09b4b7e --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/fsd.desktop @@ -0,0 +1,66 @@ +[Desktop Entry] +Type=Service +Name=FSF/UNESCO Free Software Directory +Name[af]=FSF/UNESCO Gratis Sagteware Gids +Name[ar]=دليل FSF/UNESCO للبرامج الحرّة +Name[be]=Каталог свабоднага праграмнага забеспячэння FSF/UNESCO +Name[bn]=FSF/UNESCO ফ্রী সফ্‌টওয়্যার ডিরেক্টরি +Name[br]=Renkell meziantoù frank FSF/UNESCO +Name[bs]=FSF/UNESCO imenik slobodnog softvera +Name[ca]=Directori de programari lliure FSF/UNESCO +Name[cs]=Adresář svobodného softwaru FSF/UNESCO +Name[csb]=Wòlnoprzistãpny katalog programów FSF/UNESCO +Name[da]=FSF/UNESCO Free Software katalog +Name[eo]=FSF/UNESCO Libera Programa Dosierujo +Name[es]=Directorio de software libre de FSF/UNESCO +Name[eu]=FSF/UNESCO Free Software direktorioa +Name[fa]=واژه‌نامۀ نرم‌افزار آزاد FSF/UNESCO +Name[fi]=FSF/UNESCO Vapaa ohjelmien hakemisto +Name[fr]=Catalogue de logiciels libres FSF/UNESCO +Name[ga]=Eolaire Saorbhogearraí FSF/UNESCO +Name[gl]=Directório de Software Libre FSF/UNESCO +Name[he]=ספריית תוכנה חופשית של FSF/UNESCO +Name[hi]=एफएसएफ/यूनेस्को फ्री सॉफ़्टवेयर डिरेक्ट्री +Name[hr]=FSF/UNESCO mapa slobodnog softvera +Name[hu]=FSF/UNESCO szabadszoftver-gyűjtemény +Name[it]=Elenco software libero FSF/UNESCO +Name[ja]=FSF/UNESCO フリーソフトウェア ディレクトリ +Name[ka]=FSF/UNESCO თავისუფალი პროგრამების კატალოგი +Name[kk]=FSF/UNESCO ашық бағдарламалық жасау каталогы +Name[km]=ថត​កម្មវិធី​ឥត​គិត​ថ្លៃ​របស់ FSF/UNESCO +Name[ko]=FSF/UNESCO 자유 소프트웨어 디렉터리 +Name[lt]=FSF/UNESCO laisvos programinės įrangos katalogas +Name[lv]=FSF/UNESCO Brīvās programmatūras krātuve +Name[mk]=Каталог на слободен софтвер на FSF/UNESCO +Name[ms]=Direktori Perisian Percuma FSF/UNESCO +Name[nb]=FSF/UNESCO-katalogen over fri programvare +Name[nds]=FSF/UNESCO-Verteken mit fre'e Programmen +Name[ne]=FSF/UNESCO नि: शुल्क सफ्टवेयर शब्दकोश +Name[nn]=FSF/UNESCO-katalogen over fri programvare +Name[pa]=FSF/UNESCO ਮੁਕਤ ਸਾਫਟਵੇਅਰ ਡਾਇਰੈਕਟਰੀ +Name[pl]=Słownik darmowego oprogramowania FSF/UNESCO +Name[pt]=Directoria de Software Livre FSF/UNESCO +Name[pt_BR]=Diretório de Software Livre - FSF/UNESCO +Name[ro]=Director de software liber FSF/UNESCO +Name[ru]=Каталог свободного ПО FSF/UNESCO +Name[rw]=Ububiko Porogaramu y'Ubuntu FSF/UNESCO +Name[sk]=FSF/UNESCO Adresár voľného softwaru +Name[sl]=Imenik prostega programja FSF/UNESCO +Name[sr]=Адресар слободног софтвера FSF-а/UNESCO-а +Name[sr@Latn]=Adresar slobodnog softvera FSF-a/UNESCO-a +Name[sv]=FSF/UNESCO katalog över fri programvara +Name[ta]=FSF/UNESCO இலவச மென்பொருள் அடைவு +Name[tg]=FSF/UNESCO директорияи озоди шабакаи локалӣ +Name[th]=FSF/UNESCO ไดเร็คทอรีซอฟท์แวร์เสรี +Name[tr]=FSF/UNESCO Ücretsiz Yazılım Dizini +Name[tt]=FSF/UNESCO'nıñ Buş Yazılımnar Törgäge +Name[uk]=Словник з вільного програмного забезпечення FSF/UNESCO +Name[vi]=Thư mục Phần mềm Tự do FSF/UNESCO +Name[wa]=Livreye di libes programes FSF/UNESCO +Name[zh_TW]=FSF/UNESCO 自由軟體目錄 +ServiceTypes=SearchProvider +Keys=fsd +Query=http://directory.fsf.org/search/?query=\\{@} +Query[nds]=http://directory.fsf.org/search/fsd-search.py?q=\\{@} + + diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google.desktop new file mode 100644 index 000000000..535fff91f --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google.desktop @@ -0,0 +1,31 @@ +[Desktop Entry] +Type=Service +Name=Google +Name[bn]=গুগল্ +Name[csb]=Google - szëkôrz starnów WWW +Name[fa]=گوگل +Name[he]=גוגל +Name[hi]=गूगल +Name[mn]=Гооглэ +Name[ne]=गुगल +Name[pl]=Google - wyszukiwarka stron WWW +Name[ta]=கூகுல் +Name[te]=గూగుల్ +Name[th]=กูเกิ้ล +ServiceTypes=SearchProvider +Keys=gg,google +Query=http://www.google.com/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[de]=http://www.google.de/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[en_GB]=http://www.google.co.uk/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[fi]=http://www.google.fi/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[fr]=http://www.google.fr/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[he]=http://www.google.co.il/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[it]=http://www.google.it/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[nb]=http://www.google.no/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[ne]=http://www.google.com/search?q=\\{@}ie=UTF-8&oe=UTF-8 +Query[nl]=http://www.google.nl/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[nn]=http://www.google.com/search?hl=nn&q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[pt]=http://www.google.pt/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[wa]=http://www.google.be/search?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[zh_TW]=http://www.google.com.tw/search?q=\\{@}&ie=UTF-8&oe=UTF-8&hl=zh-TW +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_advanced.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_advanced.desktop new file mode 100644 index 000000000..121ca5e1b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_advanced.desktop @@ -0,0 +1,95 @@ +[Desktop Entry] +Keys=ggx +Name=Google Advanced Search +Name[af]=Google Gevorderde Soektog +Name[ar]=بحث Google المتقدم +Name[az]=Google Təkmilləşdirilmiş Axtarış +Name[be]=Адмысловы пошук Google +Name[bn]=গুগল্ অগ্রসর অনুসন্ধান +Name[br]=Klask Google barek +Name[bs]=Google napredno pretraživanje +Name[ca]=Recerca avançada de Google +Name[cs]=Rozšířené hledání (Google) +Name[csb]=Google - awansowónô szëkba +Name[cy]=Chwilio Uwch Google +Name[da]=Google avanceret søgning +Name[de]=Erweiterte Google-Suche +Name[el]=Προχωρημένη αναζήτηση του Google +Name[eo]=Detala serĉo ĉe "Google" +Name[es]=Búsqueda avanzada de Google +Name[et]=Google täpsem otsing +Name[eu]=Googleren bilaketa aurreratua +Name[fa]=جستجوی پیشرفتۀ گوگل +Name[fi]=Googlen lisähaku +Name[fo]=Google (tilkomin leiting) +Name[fr]=Recherche avancée avec Google +Name[fy]=Google Avansearre Sykje +Name[ga]=Cuardach Casta Google +Name[gl]=Procura Avanzada de Google +Name[he]=חיפוש מתקדם של גוגל +Name[hi]=गूगल विस्तृत खोज +Name[hr]=Google napredno pretraživanje +Name[hu]=Google részletes keresés +Name[is]=Google - Nánar +Name[it]=Ricerca avanzate di Google +Name[ja]=Google 検索オプション +Name[ka]=Google დეტალური ძიება +Name[kk]=Google кеңейтілген іздеу +Name[km]=ស្វែងរក​កម្រិត​ខ្ពស់​តាម​រយៈ Google +Name[ko]=Google 고급 검색 +Name[lt]=Išplėsta Google paieška +Name[lv]=Google Uzlabotā Meklēšana +Name[mk]=Google - напредно пребарување +Name[mn]=Өргөтгсөн Гооглэ-хайлт +Name[ms]=Carian Lanjutan Google +Name[mt]=Tfittxija avvanzata Google +Name[nb]=Google avansert søk +Name[nds]=Google sien verwiederte Söök +Name[ne]=गुगल उन्नत खोजी +Name[nl]=Google geavanceerd zoeken +Name[nn]=Google avansert søk +Name[nso]=Nyako yeo e Beetswegopele ya Google +Name[pa]=Google ਤਕਨੀਕੀ ਖੋਜ +Name[pl]=Google - wyszukiwanie zaawansowane +Name[pt]=Pesquisa Avançada do Google +Name[pt_BR]=Procura Avançada do Google +Name[ro]=Căutare avansată Google +Name[ru]=Google - продвинутый поиск +Name[rw]=Ishakisha Rihanitse rya Google +Name[se]=Dárkilis ohcan Google báikkis +Name[sk]=Pokročilé hľadanie Google +Name[sl]=Napredno iskanje z Google +Name[sr]=Google-ово напредно претраживање +Name[sr@Latn]=Google-ovo napredno pretraživanje +Name[ss]=Kusesha lokusembili kwe Google +Name[sv]=Google avancerad sökning +Name[ta]=கூகுல் மேம்படுத்தப்பட்ட தேடுதல் +Name[te]=గూగుల్ మరింత నిసిస్టమైన అన్వెషణ +Name[tg]=Ҷустуҷӯи пешрафта дар Google +Name[th]=ค้นหาด้วยกูเกิ้ลแบบขั้นสูง +Name[tr]=Google Gelişmiş Arayıcı +Name[tt]=Google aşa Tögäl Ezläw +Name[uk]=Складний пошук на Google +Name[uz]=Google - Ilgʻor qidirish +Name[uz@cyrillic]=Google - Илғор қидириш +Name[ven]=U setsha ho Engedzeaho ha Google +Name[vi]=Tra cứu Nâng cao Google +Name[wa]=Ricweraedje avancî di Google +Name[xh]=Uphendlo Olubhekisa phambili lwe Google +Name[zh_CN]=Google 高级搜索 +Name[zh_TW]=Google 進階搜尋 +Name[zu]=Usesho lwezinga eliphezulu lwe-Google +Query=http://www.google.com/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[en_GB]=http://www.google.co.uk/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[es]=http://www.google.com/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i" }&as_sitesearch=\\{site}&safe=\\{safe, "active"}&ie=UTF-8&oe=UTF-8 +Query[fi]=http://www.google.fi/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[fr]=http://www.google.fr/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[he]=http://www.google.co.il/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[nb]=http://www.google.no/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[nl]=http://www.google.nl/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[nn]=http://www.google.com/search?hl=nn&as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[pt]=http://www.google.pt/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Query[wa]=http://www.google.be/search?as_q=\\{all,@}&num=\\{num,"10"}&btnG=Google+Search&as_epq=\\{exact,""}&as_oq=\\{any,""}&as_eq=\\{without,""}&lr=\\{lang,""}&as_ft=\\{ft,"i"}&as_filetype=\\{filetype,""}&as_qdr=\{date,"all"}&as_occt=\\{occ,"any"}&as_dt=\\{siteop,"i"}&as_sitesearch=\\{site}&safe=\\{safe,"active"}&ie=UTF-8&oe=UTF-8 +Charset=utf8 +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_groups.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_groups.desktop new file mode 100644 index 000000000..ee9f24f3a --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_groups.desktop @@ -0,0 +1,89 @@ +[Desktop Entry] +Type=Service +Name=Google Groups +Name[af]=Google Groepe +Name[ar]=مجموعات Google +Name[az]=Google Qroupları +Name[be]=Групы Google +Name[bn]=গুগল্ গ্রুপস +Name[br]=Stroladoù Google +Name[bs]=Google Grupe +Name[ca]=Grups a Google +Name[cs]=Google - diskuzní skupiny +Name[csb]=Google - archiwa diskùsjowëch karnów +Name[cy]=Grwpiau Google +Name[da]=Google-grupper +Name[de]=Google-Newsgruppen +Name[el]=Ομάδες του Google +Name[eo]=Forumserĉo ĉe "Google" +Name[es]=Grupos de Google +Name[et]=Google uudisegrupid +Name[eu]=Google taldeak +Name[fa]=گروههای گوگل +Name[fi]=Googlen keskusteluryhmät +Name[fr]=Groupes Google +Name[fy]=Google Diskusjegroepen +Name[ga]=Grúpaí Google +Name[gl]=Grupos de Google +Name[he]=קבוצות גוגל +Name[hi]=गूगल समूह +Name[hr]=Google Grupe +Name[is]=Google - Ráðstefnur +Name[it]=Google gruppi +Name[ja]=Google グループ +Name[ka]=Google ჯგუფები +Name[kk]=Google топтары +Name[km]=ក្រុម Google +Name[ko]=Google 그룹스 +Name[lt]=Google grupės +Name[lv]=Google Grupas +Name[mk]=Google-групи +Name[mn]=Гооглэ-Мэдээлэл +Name[ms]=Kumpulan Google +Name[mt]=Gruppi Google +Name[nb]=Google-grupper +Name[ne]=गुगल समूह +Name[nl]=Google Groepen +Name[nso]=Dihlopha tsa Google +Name[pa]=Google ਗਰੁੱਪ +Name[pl]=Google - archiwum grup dyskusyjnych +Name[pt]=Grupos do Google +Name[pt_BR]=Grupos do Google +Name[ro]=Grupuri Google +Name[ru]=Группы Google +Name[rw]=Amatsinda Google +Name[sk]=Diskusné skupiny Google +Name[sl]=Skupine Google +Name[sr]=Google-ове групе +Name[sr@Latn]=Google-ove grupe +Name[ss]=Emacembu ye Google +Name[sv]=Google-grupper +Name[ta]=கூகுல் குழுக்கள் +Name[te]=గూగుల్ గుంపులు +Name[tg]=Гурӯҳҳои Google +Name[th]=กลุ่มข่าวกูเกิ้ล +Name[tr]=Google Grupları +Name[tt]=Google Törkemnäre +Name[uk]=Групи Google +Name[uz]=Google - Guruhlar +Name[uz@cyrillic]=Google - Гуруҳлар +Name[ven]=Tshigwada tsha Google +Name[vi]=Nhóm Google +Name[wa]=Groupes Google +Name[xh]=Amaqela e Google +Name[zh_CN]=Google 兴趣组 +Name[zh_TW]=Google 群組 +Name[zu]=Amaqembu e-Google +ServiceTypes=SearchProvider +Keys=ggg,groups,dj,deja +Query=http://groups.google.com/groups?oi=djq&as_q=\\{@} +Query[en_GB]=http://groups.google.co.uk/groups?oi=djq&as_q=\\{@} +Query[fr]=http://groups.google.fr/groups?oi=djq&as_q=\\{@} +Query[he]=http://groups.google.co.il/groups?oi=djq&as_q=\\{@} +Query[nb]=http://groups.google.no/groups?hl=nn&oi=djq&as_q=\\{@} +Query[ne]=http://groups.google.com/groups?oi=djqas_q=\\{@} +Query[nl]=http://groups.google.nl/groups?oi=djq&as_q=\\{@} +Query[nn]=http://groups.google.com/groups?hl=nn&oi=djq&as_q=\\{@} +Query[pt]=http://groups.google.pt/groups?oi=djq&as_q=\\{@} +Query[wa]=http://groups.google.be/groups?oi=djq&as_q=\\{@} +Query[zh_TW]=http://groups.google.com.tw/groups?oi=djq&as_q=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_images.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_images.desktop new file mode 100644 index 000000000..e0b808df9 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_images.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Type=Service +Name=Google Image Search +Name[af]=Google Beeld Soektog +Name[ar]=بحث صور Google +Name[az]=Google Rəsm Axtarıcısı +Name[be]=Пошук відарысаў Google +Name[bn]=গুগল্ চিত্র অনুসন্ধান +Name[br]=Klask skeudennoù Google +Name[bs]=Google traženje slika +Name[ca]=Recerca d'imatges a Google +Name[cs]=Hledání obrázků (Google) +Name[csb]=Google - szëkba òbrôzków +Name[cy]=Chwilio Delweddau Google +Name[da]=Google billedsøgning +Name[de]=Google-Bildsuche +Name[el]=Αναζήτηση εικόνων του Google +Name[eo]=Bildoserĉo ce "Google" +Name[es]=Búsqueda de imágenes de Google +Name[et]=Google piltide otsing +Name[eu]=Google irudi bilaketa +Name[fa]=جستجوی تصویر گوگل +Name[fi]=Googlen kuvahaku +Name[fo]=Google (myndaleiting) +Name[fr]=Recherche d'images avec Google +Name[fy]=Google printsjesykjen +Name[ga]=Cuardach Íomhá Google +Name[gl]=Procura de Imaxes de Google +Name[he]=חיפוש תמונות של גוגל +Name[hi]=गूगल छवि खोज +Name[hr]=Google pretraživanje slika +Name[hu]=Google képkereső +Name[is]=Google - Myndaleit +Name[it]=Ricerca immagini di Google +Name[ja]=Google 画像検索 +Name[ka]=Google ნახატის ძიება +Name[kk]=Google кескіндерді табу +Name[km]=ស្វែងរក​រូបភាព​តាម​រយៈ Google +Name[ko]=Google 이미지 검색 +Name[lt]=Google paveikslėlių paieška +Name[lv]=Google Attēlu Meklēšana +Name[mk]=Google - пребарување на слики +Name[mn]=Гооглэ-Зураг хайлт +Name[ms]=Carian Imej Google +Name[mt]=Fittex stampi fuq Google +Name[nb]=Bildesøk i Google +Name[nds]=Google sien Biller-Söök +Name[ne]=गुगल छवि खोजी +Name[nl]=Google afbeeldingen zoeken +Name[nn]=Google biletsøk +Name[nso]=Nyako ya Ponagalo ya Google +Name[pa]=Google ਚਿੱਤਰ ਖੋਜ +Name[pl]=Google - wyszukiwanie zdjęć +Name[pt]=Pesquisa de Imagens do Google +Name[pt_BR]=Busca de Imagens do Google +Name[ro]=Căutare de imagini Google +Name[ru]=Рисунки Google +Name[rw]=Ishakisha Ishusho Google +Name[se]=Oza govaid Google báikkis +Name[sk]=Hľadanie obrázkov Google +Name[sl]=Iskanje slik z Google +Name[sr]=Google-ово претраживање слика +Name[sr@Latn]=Google-ovo pretraživanje slika +Name[ss]=Kusesha kwemfanekiso ku Google +Name[sv]=Google bildsökning +Name[ta]=கூகுல் சித்திர தேடு +Name[te]=గూగుల్ బొమ్మల అన్వెషణ +Name[tg]=Ҷусуҷӯи тасвири Google +Name[th]=ค้นหาภาพด้วยกูเกิ้ล +Name[tr]=Google Resim Arayıcı +Name[tt]=Google aşa Sürät Ezläw +Name[uk]=Пошук зображень на Google +Name[uz]=Google - Rasm qidirish +Name[uz@cyrillic]=Google - Расм қидириш +Name[ven]=U setsha nga Tshivhoni tsha Google +Name[vi]=Tìm kiếm Hình ảnh Google +Name[wa]=Cweraedje d' imådjes avou Google +Name[xh]=Uphendlo Lomfanekiso we Google +Name[zh_CN]=Google 图像搜索 +Name[zh_TW]=Google 圖片搜尋 +Name[zu]=Ukusesha isithombe kwe-Google +ServiceTypes=SearchProvider +Keys=ggi,images +Query=http://images.google.com/images?q=\\{@} +Query[en_GB]=http://images.google.co.uk/images?q=\\{@} +Query[fr]=http://images.google.fr/images?q=\\{@} +Query[he]=http://images.google.co.il/images?q=\\{@} +Query[nb]=http://images.google.no/images?hl=nn&q=\\{@} +Query[nl]=http://images.google.nl/images?q=\\{@} +Query[nn]=http://images.google.com/images?hl=nn&q=\\{@} +Query[pt]=http://images.google.pt/images?q=\\{@} +Query[ru]=http://images.google.com/images?q=\\{@}&hl=ru&ie=UTF-8&oe=UTF-8 +Query[wa]=http://images.google.be/images?q=\\{@} +Query[zh_TW]=http://images.google.com.tw/images?q=\\{@}&hl=zh-TW diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_lucky.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_lucky.desktop new file mode 100644 index 000000000..f72e175d6 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_lucky.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Type=Service +Name=Google (I'm Feeling Lucky) +Name[af]=Google (Vat 'n kaans) +Name[ar]=Google (ضربة حظ) +Name[az]=Google (Eləbil Bəxtim Gətirəcək) +Name[be]=Google (Мне пашанцуе) +Name[bg]=Google (I"m Feeling Lucky) +Name[bn]=গুগল্ (ভাগ্যবান মনে করছি) +Name[bs]=Google (Osjećam se sretno) +Name[ca]=Google (Avui tinc sort!) +Name[cs]=Google (Zkusím štěstí) +Name[csb]=Google - "Szczestlëwé trafienié" +Name[cy]=Google(Dwi'n Teimlo'n Lwcus) +Name[da]=Google (Jeg føler mig heldig) +Name[de]=Google ("Auf gut Glück!") +Name[el]=Google (Αισθάνομαι τυχερός) +Name[eo]=Google (je bonŝanco) +Name[es]=Google (Me siento afortunado) +Name[et]=Google (Ehk veab) +Name[eu]=Google (Zorte onean nago) +Name[fa]=گوگل )یا شانس و یا اقبال( +Name[fi]=Google (Kokeile onneasi) +Name[fo]=Google (ein heppin dagur) +Name[fr]=Google (J'ai de la chance) +Name[fy]=Google (Ik doch in gok) +Name[ga]=Google (Tá an t-ádh orm inniu) +Name[gl]=Google (Sinto-me Afortunado) +Name[he]=גוגל (יותר מזל משכל) +Name[hi]=गूगल (आज मेरी क़िस्मत चमक़ी है) +Name[hr]=Google (osjećam se sretnim) +Name[is]=Google (Ég er heppin(n) í dag) +Name[it]=Google (Mi sento fortunato) +Name[ka]=Google (გამიმართლა) +Name[kk]=Google (Сәтті сынап көрелік) +Name[km]=Google (ខ្ញុំ​មាន​អារម្មណ៍​ថា​សំណាង) +Name[ko]=Google (운 좋은 예감) +Name[lt]=Google (Man sekasi!) +Name[lv]=Google (Es jūtos laimīgs) +Name[mk]=Google Од прва рака +Name[mn]=Гооглэ ("Азтай байг!") +Name[ms]=Google (Saya Rasa Bertuah) +Name[mt]=Google (inħossni xxurtjat) +Name[nb]=Google (prøv lykken) +Name[nds]=Google op goot Glück +Name[ne]=गुगल (मैले भाग्यमानी अनुभव गर्दैछु) +Name[nl]=Google (Ik doe een gok) +Name[nn]=Google (Eg prøver lykka) +Name[nso]=Google (Ke Ikwa Mahlatse) +Name[pa]=Google (ਮੈਂ ਖੁਸ਼ਨਸੀਬ ਹਾਂ) +Name[pl]=Google - "Szczęśliwy traf" +Name[pt]=Google (Sinto-me Com Sorte) +Name[pt_BR]=Google (Estou com sorte) +Name[ro]=Google (Mă simt norocos) +Name[ru]=Google (Мне повезёт!) +Name[rw]=Google (Ndumva Nezerewe) +Name[se]=Google (Geahččalan lihkku) +Name[sk]=Google (Cítim sa štastne) +Name[sl]=Google (Počutim se srečnega) +Name[sr]=Google (Добијам из прве) +Name[sr@Latn]=Google (Dobijam iz prve) +Name[ss]=Google (Ngitiva nginenhlanhla) +Name[sv]=Google (Jag har tur) +Name[ta]=கூகுல் (நான் அதிர்ஷ்டசாலியாக உணர்கிறேன்) +Name[te]=గూగుల్ (నెరుగా వెబ్ లొ ప్రవేశించు) +Name[tg]=Google (Бо бахт ва бо иқбол) +Name[th]=Google (ดีใจจัง ค้นแล้วเจอเลย) +Name[tr]=Google +Name[tt]=Google (Yaqşı Sizämen!) +Name[uk]=Google (Я - везунчик) +Name[uz]=Google (Omadim borga oʻxshaydi) +Name[uz@cyrillic]=Google (Омадим борга ўхшайди) +Name[ven]=Google (Ndi pfa ndina Mashudu) +Name[vi]=Google (Xem một trang) +Name[wa]=Cweraedje d' imådjes avou Google (Dji tchai roed dsu) +Name[zh_CN]=Google (手气不错) +Name[zh_TW]=Google (好手氣) +Name[zu]=Google (Ngizizwa Ngisenhlanhleni) +ServiceTypes=SearchProvider +Keys=ggl,gglucky +Query=http://www.google.com/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[csb]=http://www.google.pl/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[en_GB]=http://www.google.co.uk/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[fi]=http://www.google.fi/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[fr]=http://www.google.fr/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[he]=http://www.google.co.il/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[it]=http://www.google.it/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[nb]=http://www.google.no/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[nl]=http://www.google.nl/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[pl]=http://www.google.pl/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[pt]=http://www.google.pt/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[wa]=http://www.google.be/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8 +Query[zh_TW]=http://www.google.com.tw/search?q=\\{@}&btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8&hl=zh-TW +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_movie.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_movie.desktop new file mode 100644 index 000000000..47d53118f --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_movie.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Type=Service +Name=Google Movies +Name[af]=Google Films +Name[ar]=أفلام Google +Name[be]=Фільмы Google +Name[bn]=গুগল্ মুভিস্ +Name[br]=Filmoù Google +Name[bs]=Google filmovi +Name[ca]=Pel·lícules Google +Name[cs]=Google filmy +Name[csb]=Google - filmë +Name[da]=Google film +Name[de]=Google Filme +Name[el]=Google ταινίες +Name[eo]=Google Filmoj +Name[es]=Películas de Google +Name[eu]=Google pelikulak +Name[fa]=فیلمهای Google +Name[fi]=Googlen elokuvat +Name[fr]=Google Vidéos +Name[fy]=Google Films +Name[ga]=Scannáin Google +Name[gl]=Películas de Google +Name[he]=הסרטים של גוגל +Name[hr]=Google filmovi +Name[is]=Google kvikmyndir +Name[it]=Google filmati +Name[ka]=Google ფილმები +Name[kk]=Google фильмдер +Name[km]=កុនតាម​រយៈ Google +Name[ko]=Google 영화 +Name[lt]=Google filmai +Name[mk]=Google - филмови +Name[ms]=Wayang Google +Name[nb]=Google, filmer +Name[nds]=Google Filmen +Name[ne]=गुगल चलचित्र +Name[nn]=Google filmar +Name[pa]=Google ਫਿਲਮਾਂ +Name[pl]=Google - filmy +Name[pt]=Filmes do Google +Name[ro]=Filme Google +Name[ru]=Видео Google +Name[rw]=Filimi za Google +Name[se]=Google filmmat +Name[sk]=Google filmy +Name[sr]=Google филмови +Name[sr@Latn]=Google filmovi +Name[sv]=Google filmer +Name[ta]=கூகுல் படங்கள் +Name[te]=గూగుల్ చలనచిత్రాలు +Name[tg]=Филмҳои Google +Name[th]=ค้นหาภาพยนตร์ด้วยกูเกิ้ล +Name[tr]=Google Filmleri +Name[tt]=Google Tasmaları +Name[uk]=Фільми на Google +Name[uz]=Google - Kino +Name[uz@cyrillic]=Google - Кино +Name[vi]=Tìm phim ảnh qua Google +Name[zh_TW]=Google 電影 +ServiceTypes=SearchProvider +Keys=ggmovie +Query=http://www.google.com/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[csb]=http://www.google.pl/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[en_GB]=http://www.google.co.uk/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[he]=http://www.google.co.il/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[ja]=http://www.google.com/search?q=movie:\\{@}&ie=UTF-8&oe=UTF-8 +Query[ko]=http://www.google.com/search?q=movie:\\{@}&ie=UTF-8&oe=UTF-8 +Query[nb]=http://www.google.no/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[ne]=http://www.google.com/search?q=movie:\{@}ie=UTF-8&oe=UTF-8 +Query[nn]=http://www.google.no/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[pl]=http://www.google.pl/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8 +Query[tg]=http://www.google.com/search?q=филми:\\{@}&ie=UTF-8&oe=UTF-8 +Query[zh_TW]=http://www.google.com.tw/search?q=movie:\{@}&ie=UTF-8&oe=UTF-8&hl=zh-TW +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_news.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_news.desktop new file mode 100644 index 000000000..f8521c3a3 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/google_news.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Type=Service +Name=Google News +Name[af]=Google Nuus +Name[ar]=أخبار Google +Name[az]=Google Xəbərlər +Name[be]=Навіны Google +Name[bn]=গুগল্ সংবাদ +Name[br]=Keleier Google +Name[bs]=Google vijesti +Name[ca]=Notícies de Google +Name[csb]=Google - nowinë +Name[cy]=Newyddion Google +Name[da]=Google nyheder +Name[el]=Google νέα +Name[eo]=Google Novaĵoj +Name[es]=Noticias de Google +Name[fa]=اخبار گوگل +Name[fi]=Googlen uutiset +Name[fr]=Google Informations +Name[fy]=Google-nijs +Name[ga]=Nuacht Google +Name[gl]=Novas de Google +Name[he]=חדשות גוגל +Name[hi]=गूगल समाचार +Name[hr]=Google novosti +Name[hu]=Google hírek +Name[is]=Google fréttir +Name[it]=Google notizie +Name[ja]=Google ニュース +Name[ka]=Google სიახლეები +Name[kk]=Google жаңалықтар +Name[km]=ព័ត៌មាន​តាម​រយៈ Google +Name[ko]=Google 뉴스 +Name[lt]=Google naujienos +Name[lv]=Google Ziņas +Name[mk]=Google Вести +Name[mn]=Гооглэ мэдээ +Name[ms]=Berita Google +Name[mt]=Aħbarijiet Google +Name[nb]=Google nyheter +Name[nds]=Google Narichten +Name[ne]=गुगल समाचार +Name[nl]=Google-nieuws +Name[nn]=Google nyhende +Name[pa]=Google ਖ਼ਬਰਾਂ +Name[pl]=Google - wiadomości +Name[pt]=Notícias Google +Name[pt_BR]=Notícias do Google +Name[ro]=Știri Google +Name[ru]=Новости Google +Name[rw]=Amakuru za Google +Name[se]=Google ođđasat +Name[sk]=Google správy +Name[sr]=Google новости +Name[sr@Latn]=Google novosti +Name[sv]=Google diskussionsgrupper +Name[ta]=கூகுல் செய்திகள் +Name[te]=గూగుల్ వార్తలు +Name[tg]=Ахбори Google +Name[th]=ข่าวจากกูเกิ้ล +Name[tr]=Google Haberleri +Name[tt]=Google Yañalıqları +Name[uk]=Новини Google +Name[uz]=Google - Yangiliklar +Name[uz@cyrillic]=Google - Янгиликлар +Name[vi]=Tin tức Google +Name[wa]=Noveles Google +Name[zh_CN]=Google 新闻 +Name[zh_TW]=Google 新聞 +ServiceTypes=SearchProvider +Keys=ggn,googlenews +Query=http://news.google.com/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[en_GB]=http://news.google.co.uk/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[fi]=http://news.google.fi/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[fr]=http://news.google.fr/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[he]=http://news.google.co.il/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[it]=http://news.google.it/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[nb]=http://news.google.no/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[ne]=http://news.google.com/news?q=\\{@}ie=UTF-8&oe=UTF-8 +Query[nl]=http://news.google.nl/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[pt]=http://news.google.pt/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[wa]=http://news.google.be/news?q=\\{@}&ie=UTF-8&oe=UTF-8 +Query[zh_TW]=http://news.google.com.tw/news?q=\\{@}&ie=UTF-8&oe=UTF-8&hl=zh-TW +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/gracenote.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/gracenote.desktop new file mode 100644 index 000000000..04a6655c8 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/gracenote.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Service +Name=Gracenote +Name[bn]=গ্রেস-নোট +Name[eo]=Ornamaĵo +Name[hi]=ग्रेसनोट +Name[ne]=ग्रेसनोट +Name[pa]=ਗਰੇਸਨੋਟ +Name[rw]=AkandikoImpuwe +Name[ta]=க்ரேஸ்நோட் +Name[te]=గ్రెస్ నోట్ +Name[th]=Gracenote ค้นหาดนตรี, วิดิโอ +Name[vi]=Tra Gracenote +ServiceTypes=SearchProvider +Keys=gn,gracenote +Query=http://www.gracenote.com/music/search-adv.html?q=\\{@} +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/grec.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/grec.desktop new file mode 100644 index 000000000..295637533 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/grec.desktop @@ -0,0 +1,65 @@ +[Desktop Entry] +Charset=ISO-8859-15 +Hidden=false +Keys=grec +Name=Great Dictionary of the Catalan Language (GRan Enciclopèdia Catalana) +Name[af]=Groot woordeboek van die Catalan Taal +Name[be]=Вялікі слоўнік каталонскай мовы (GRan Enciclopèdia Catalana) +Name[bn]=কাটালান ভাষার অভিধান (GRan Enciclopèdia Catalana) +Name[bs]=Veliki rječnik katalonskog jezika (GRan Enciclopèdia Catalana) +Name[ca]=Gran diccionari de la Llengua Catalana (Grup Enciclopèdia Catalana) +Name[cs]=Velký katalánský slovník (GRan Enciclopèdia Catalana) +Name[csb]=Wiôldżi słowôrz katalońsczégò jãzëka (GRan Enciclopèdia Catalana) +Name[da]=Storartet ordbog for det katalanske sprog (GRan Enciclopèdia Catalana) +Name[de]=Großes Wörterbuch der Katalanischen Sprache (GRan Enciclopèdia Catalana) +Name[el]=Μεγάλο Λεξικό της Καταλανικής Γλώσσας (GRan Enciclopèdia Catalana) +Name[eo]=Granda Vortaro de la Kataluna lingvo (GRan Enciclopèdia Catalana) +Name[es]=Gran enciclopedia catalana +Name[et]=Suur katalaani sõnaraamat (GRan Enciclopèdia Catalana) +Name[eu]=Katalaniera hiztegia (GRan Enciclopèdia Catalana) +Name[fa]=واژه‌نامۀ بزرگ زبان کاتالان (GRan Enciclopèdia Catalana) +Name[fi]=Catalanian suuri sanakirja (GRan Enciclopèdia Catalana) +Name[fr]=Grand dictionnaire du langage catalan (GRan Enciclopèdia Catalana) +Name[ga]=OllFhoclóir Catalóinise (GRan Enciclopèdia Catalana) +Name[gl]=Grande Enciclopèdia Catalana +Name[he]=המילון הגדול של השפה הקטלנית (GRan Enciclopèdia Catalana) +Name[hr]=Veliki rječnik katalonskog jezika (GRan Enciclopèdia Catalana) +Name[hu]=Katalán nagyszótár (GRan Enciclopèdia Catalana) +Name[is]=Stóra orðabók katalónska tungumálsins (GRan Enciclopèdia Catalana) +Name[it]=Grande dizionario della lingua catalana (GRan Enciclopèdia Catalana) +Name[ja]=カタロニア語大辞典 (GRan Enciclopèdia Catalana) +Name[kk]=Каталан тілдің үлкен сөздігі (GRan Enciclopèdia Catalana) +Name[km]=វចនានុក្រម​ភាសា​កាតាឡាន (GRan Enciclopèdia Catalana) +Name[ko]=카탈루냐어 대사전 (GRan Enciclopèdia Catalana) +Name[lt]=Puikus katalonų kalbos žodynas (GRan Enciclopèdia Catalana) +Name[mk]=Голем речник на каталонскиот јазик (GRan Enciclopèdia Catalana) +Name[ms]=Kamus Besar Bahasa Catalan (GRan Enciclopèdia Catalana) +Name[nb]=Den store, katalanske ordboka (GRan Enciclopèdia Catalana) +Name[nds]=Groot Wöörbook vun de Katalaansche Spraak (GRan Enciclopèdia Catalana) +Name[ne]=क्याटालान भाषाको ठूलो शब्दकोश (GRan इनसाइक्लोपिडीया कातालान) +Name[nl]=Catalaanse Encyclopedie +Name[nn]=Den store, katalanske ordboka (GRan Enciclopèdia Catalana) +Name[pa]=ਕਾਟਾਲਾਨ ਭਾਸ਼ਾ ਲਈ ਮਹਾਨ ਕੋਸ਼ (GRan ਵਿਸ਼ਵਕੋਸ਼ ਕਾਟਾਲਾਨਾ) +Name[pl]=Wielki słownik języka katalońskiego (GRan Enciclopèdia Catalana) +Name[pt]=Grande Dicionário da Língua Catalã (GRan Enciclopèdia Catalana) +Name[pt_BR]=Dicionário no Idioma Catalão (GRan Enciclopèdia Catalana) +Name[ru]=Большой словарь каталонского языка (GRan Enciclopèdia Catalana) +Name[rw]=Inkoranyamagambo Nini y'Ururimi rwa Katalani (GRan Enciclopèdia Catalana) +Name[se]=Katalangiela stuorra sátnegirji (GRan Enciclopèdia Catalana) +Name[sk]=Veľký slovník katalánskeho jazyka (GRan Enciclopèdia Catalana) +Name[sl]=Veliki slovar katalonščine (GRan Enciclopèdia Catalana) +Name[sr]=Велики речник каталонског језика (Gran Enciclopèdia Catalana) +Name[sr@Latn]=Veliki rečnik katalonskog jezika (Gran Enciclopèdia Catalana) +Name[sv]=Stor ordbok för katalanska språket (Gran Enciclopèdia Catalana) +Name[ta]=கேடலன் மொழியின் அகராதி (GRan Enciclopèdia Catalana) +Name[tg]=Ташкилдиҳии луғат барои забони Catalan (GRan Enciclopèdia Catalana) +Name[th]=พจนานุกรมที่ยิ่งใหญ่ของภาษาคาตะลาน(GRan Enciclopรจdia Catalana) +Name[tr]=Katalanca Büyük Sözlük (GRan Enciclopèdia Catalana) +Name[tt]=Katalan Teleneñ Olı Süzlege +Name[uk]=Великий словник каталонської мови (GRan Enciclopèdia Catalana) +Name[vi]=Tra Từ điển Lớn của tiếng Catalan (GRan Enciclopèdia Catalana) +Name[wa]=Grand motî do catalan lingaedje (GRan Enciclopèdia Catalana) +Name[zh_TW]=很棒的加泰隆尼亞語文字典 (GRan Enciclopèdia Catalana) +Query=http://www.grec.net/cgibin/lexicx.pgm?GECART=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/hotbot.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/hotbot.desktop new file mode 100644 index 000000000..c555088ac --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/hotbot.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Type=Service +Name=Hotbot +Name[bn]=হটবট +Name[csb]=Hotbot - szëkôrz starnów WWW +Name[hi]=हॉटबॉट +Name[ne]=हटबोट +Name[pa]=ਹੋਟਬੋਟ +Name[pl]=Hotbot - wyszukiwarka stron WWW +Name[ta]=ஹாட்பாட் +Name[te]=హాట్ బాట్ +Name[ven]=Bot yau fhisa +Name[vi]=Tra Hotbot +ServiceTypes=SearchProvider +Keys=hb,hotbot +Query=http://hotbot.lycos.com/?MT=\\{@}&SM=MC&DV=0&LG=any&DC=10&DE=2 +Query[en_GB]=http://search.hotbot.co.uk/cgi-bin/pursuit?query=\\{@}&cat=hb_loc&enc=utf-8&SITE=uk&command= +Query[ne]=http://hotbot.lycos.com/?MT=\\{@}SM=MC&DV=0&LG=any&DC=10&DE=2 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary.desktop new file mode 100644 index 000000000..54627f6c6 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Service +Name=HyperDictionary.com +Name[csb]=HyperDictionary.com - słowôrz +Name[hi]=हायपर-डिक्शनरी.कॉम +Name[hu]=HyperDirectory.com +Name[pl]=HyperDictionary.com - słownik +Name[sv]=Hyperdictionary.com +Name[ta]=திறந்த அடைவு +ServiceTypes=SearchProvider +Keys=hd,hyperdict +Query=http://www.hyperdictionary.com/search.aspx?define=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary_thesaurus.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary_thesaurus.desktop new file mode 100644 index 000000000..aa66572c4 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/hyperdictionary_thesaurus.desktop @@ -0,0 +1,65 @@ +[Desktop Entry] +Type=Service +Name=HyperDictionary.com Thesaurus +Name[ar]=مرادفات HyperDictionary.com +Name[az]=HyperDictionary.com Tezaurus +Name[be]=Тэзаўрус HyperDictionary.com +Name[bn]=HyperDictionary.com থেসরাস (সমার্থক ও বিপরীত শব্দ) +Name[br]=Tezorus HyperDictionary.com +Name[bs]=HyperDictionary.com rječnik +Name[cs]=Tezaurus HyperDictionary.com +Name[csb]=HyperDictionary.com - słowôrz blëskòznacznëch słów (thesarus) +Name[cy]=Thesawrws HyperDictionary.com +Name[de]=HyperDictionary.com: Thesaurus +Name[el]=Θησαυρός λέξεων HyperDictionary.com +Name[eo]=HyperDictionary.com-tezaŭro +Name[es]=Tesaurus de HyperDictionary.com +Name[et]=HyperDictionary.com tesaurus +Name[eu]=HyperDictionary.com Thesaurus-a +Name[fa]=فرهنگ جامع HyperDictionary.com +Name[fi]=HyperDictionary.com-sanakirja +Name[fr]=Thésaurus HyperDictionary.com +Name[ga]=Teasáras HyperDictionary.com +Name[he]=HyperDictionary.com - מילים נרדפות +Name[hi]=हायपर-डिक्शनरी.कॉम समांतर शब्दकोश +Name[hr]=HyperDictionary.com rječnik sinonima +Name[hu]=HyperDictionary.com szinonimaszótár +Name[is]=HyperDictionary.com samheitaorðabók +Name[it]=Sinonimi HyperDictionary.com +Name[ja]=HyperDictionary.com シソーラス +Name[ka]=Тезаурус HyperDictionary.com +Name[kk]=HyperDictionary.com тезаурус +Name[km]=កម្រង​វេវចនសព្ទ HyperDictionary.com +Name[ko]=HyperDictionary.com 시소러스 +Name[lt]=Merriam-Webster sinonimų žodynas +Name[lv]=HyperDictionary.com Tēzaurs +Name[mk]=HyperDictionary.com Енциклопедија +Name[mt]=Teżawru HyperDictionary.com +Name[nb]=HyperDictionary.com, synonymordbok +Name[nds]=HyperDictionary.com-Synonümwöörbook +Name[pa]=HyperDictionary.com ਥੀਸਾਰਸ ਕੋਸ਼ +Name[pl]=HyperDictionary.com - słownik wyrazów bliskoznacznych +Name[pt]=Gramática do HyperDictionary.com +Name[ro]=Dicționarul HyperDictionary.com +Name[ru]=Тезаурус HyperDictionary.com +Name[rw]=Impuzansobanuro HyperDictionary.com +Name[sk]=HyperDictionary.com - slovník synoným +Name[sl]=Tezaver HyperDictionary.com +Name[sr]=Речник синонима на HyperDictionary.com +Name[sr@Latn]=Rečnik sinonima na HyperDictionary.com +Name[sv]=HyperDictionary.com synonymlexikon +Name[ta]=HyperDictionary.com சொற்களஞ்சியம் +Name[th]=HyperDictionary.com อรรถาพิธาน +Name[tr]=HyperDictionary.com Terimler +Name[tt]=HyperDictionary.com Süznämäse +Name[uk]=Словник синонімів HyperDictionary.com +Name[uz]=HyperDictionary.com lugʻati +Name[uz@cyrillic]=HyperDictionary.com луғати +Name[vi]=Từ điển đồng nghĩa HyperDictionary.com +Name[wa]=HyperDictionary.com +Name[zh_CN]=HyperDictionary.com 宝藏 +Name[zh_TW]=HyperDictionary.com 辭典 +ServiceTypes=SearchProvider +Keys=hdt,hd-ths,hd-thesaurus +Query=http://www.hyperdictionary.com/search.aspx?Dict=T&define=\\{@} +Query[ne]=http://www.hyperdictionary.com/search.aspx?Dict=Tdefine=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/imdb.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/imdb.desktop new file mode 100644 index 000000000..c2dc64cd3 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/imdb.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Type=Service +Name=Internet Movie Database +Name[af]=Internet Film Databasis +Name[ar]=قاعدة بيانات الأفلام على الإنترنت +Name[az]=İnternet Film Databeyzi +Name[be]=База звестак аб фільмах +Name[bn]=ইন্টারনেট চলচ্চিত্র ডেটাবেস +Name[br]=Stlennvon filmoù Internet +Name[bs]=Internet baza filmova +Name[ca]=Base de dades de pel·lícules a Internet +Name[cs]=Internetová databáze filmů +Name[csb]=Internetowô baza filmów (IMDB) +Name[cy]=Cronfa Ffilmiau y Rhyngrwyd +Name[da]=Internetfilm-database +Name[de]=Internet-Filmdatenbank +Name[el]=Βάση δεδομένων ταινιών στο διαδίκτυο +Name[eo]=Reta Filmdatumbazo +Name[es]=Base de datos de internet de películas +Name[et]=Interneti filmide andmebaas +Name[eu]=Interneteko filmeen datu-basea +Name[fa]=دادگان فیلم اینترنت +Name[fy]=Ynternetfilm-databank +Name[gl]=Base de Datos de Filmes de Internet +Name[he]=מסד נתונים מקוון לסרטים +Name[hi]=इंटरनेट चलचित्र डाटाबेस +Name[hr]=Internetska baza podataka filmova +Name[hu]=Internetes filmadatbázis (IMDb) +Name[is]=Internet kvikmyndagagnagrunnurinn +Name[it]=Database internet dei film +Name[ja]=インターネット映画データベース +Name[kk]=Internet фильмдер қоры +Name[km]=មូលដ្ឋាន​ទិន្នន័យ​ភាពយន្ត​តាម​អ៊ិនធឺណិត +Name[ko]=인터넷 영화 데이터베이스 +Name[lo]=ເດມອນ Write ຂອງ KDE +Name[lt]=Interneto kinofilmų duomenų bazė +Name[lv]=Interneta Filmu Datubāze +Name[mk]=Интернет база на филмови +Name[mn]=Интернэт кино өгөгдлийн бааз +Name[ms]=Pangkalan Data Wayang Internet +Name[nb]=Internett filmdatabase +Name[nds]=Internet-Filmdatenbank +Name[ne]=इन्टरनेट चलचित्र डेटावेस +Name[nl]=Internetfilm-database +Name[pa]=ਇੰਟਰਨੈੱਟ ਫਿਲਮ ਡਾਟਾਬੇਸ +Name[pl]=Internetowa baza filmów (IMDB) +Name[pt_BR]=Base de dados de filmes na Internet +Name[ro]=Bază de date Internet de filme +Name[ru]=Интернет-база кинофильмов (imdb) +Name[rw]=Ububikoshingiro bwa Filimi Interineti +Name[sk]=Internetová databáza filmov +Name[sl]=Internetna zbirka filmov +Name[sr]=База података о филмовима на Интернету +Name[sr@Latn]=Baza podataka o filmovima na Internetu +Name[sv]=Internet filmdatabas +Name[ta]=வலைதள திரைப்பட தகவல்தளம் +Name[te]=ఇంటర్నెట్ చలన చిత్ర డాటాబేస్ +Name[tg]=Базаи иттилооти филм дар интернет +Name[th]=ฐานข้อมูลภาพยนตร์ +Name[tr]=İnternet Film Veritabanı +Name[tt]=Päräwezdäge Tasmalar Biremlege +Name[uk]=База даних кінофільмів в Інтернет +Name[uz]=Internetdagi kino maʼlumot bazasi +Name[uz@cyrillic]=Интернетдаги кино маълумот базаси +Name[vi]=Cơ sở dữ liệu Phim ảnh trên Mạng +Name[wa]=Båze di dnêyes di films sol Daegntoele +Name[zh_CN]=互联网电影数据库 +Name[zh_TW]=Internet 電影資料庫 +ServiceTypes=SearchProvider +Keys=imdb +Query=http://imdb.com/Find?\\{@} +Query[en_GB]=http://imdb.co.uk/Find?\\{@} +Query[it]=http://italian.imdb.com/Find?\\{@} + diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/it2en.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/it2en.desktop new file mode 100644 index 000000000..cc4b867f8 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/it2en.desktop @@ -0,0 +1,75 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=it2en +Name=WordReference.com Translation: Italian to English +Name[af]=WordReference.com Vertaling: Italiaans na Engels +Name[ar]=ترجمة WordReference.com: الإيطالية إلى الإنجليزية +Name[az]=WordReference.com Tərcümə: İtalyancadan İngiliscəyə +Name[be]=WordReference.com Пераклад: з італійскай на англійскую +Name[bn]=WordReference.com অনুবাদ: ইতালীয় থেকে ইংরাজি +Name[bs]=WordReference.com prijevod: italijanski u engleski +Name[ca]=Traducció WordReference.com: Italià - Anglès +Name[cs]=Překlad WordReference.com: z italštiny do angličtiny +Name[csb]=WordReference.com: italsczi -> anielsczi +Name[cy]=Cyfieithiad WordReference.com: Eidaleg i Saesneg +Name[da]=WordReference.com oversættelse: Italiensk til engelsk +Name[de]=WordReference.com-Übersetzung: Italienisch/Englisch +Name[el]=WordReference.com Μετάφραση: Ιταλικά σε Αγγλικά +Name[eo]=WordReference.com Traduko: itala al angla +Name[es]=WordReference.com Traducción: italiano a inglés +Name[et]=WordReference.com tõlkimine: itaalia->inglise +Name[eu]=WordReference.com Itzulpena: italieratik ingelesera +Name[fa]=ترجمۀ WordReference.com: ایتالیایی به انگلیسی +Name[fi]=WordReference.com-käännös: italiasta englanniksi +Name[fr]=Traduction sur WordReference.com : Italien en Anglais +Name[fy]=WordReference.com-oersetting: Italiaansk nei Ingelsk +Name[ga]=Aistriúchán WordReference.com: Iodáilis go Béarla +Name[gl]=Tradución WordReference.com: Italiano a Inglés +Name[he]=תרגום WordReference.com: איטלקי־אנגלי +Name[hi]=WordReference.com अनुवादः इतालवी से अंग्रेजी +Name[hr]=WordReference.com Prijevod: talijanski na engleski +Name[hu]=WordReference.com fordítás: olaszról angolra +Name[is]=WordReference.com þýðing: Ítölsk/ensk +Name[it]=Traduzione WordReference.com: dall'italiano all'inglese +Name[ja]=WordReference.com イタリア語-英語翻訳 +Name[kk]=WordReference.com итальян тілінен ағылшынға аудару +Name[km]=WordReference.com ៖ បកប្រែ​ពី​ភាសា​អ៊ីតាលី​ទៅ​អង់គ្លេស +Name[ko]=WordReference.com 번역: 이탈리아어에서 영어로 +Name[lt]=WordReference.com vertimas: iš italų į anglų +Name[lv]=WordReference.com Tulkošana: no Itāļu uz Angļu +Name[mk]=WordReference.com превод: од италијански на англиски +Name[mt]=Traduzzjoni WordReference.com: Taljan għall-Ingliż +Name[nb]=WordReference.com – oversettelse fra italiensk til engelsk +Name[nds]=WordReference.com Översetten: Italieensch na Engelsch +Name[ne]=WordReference.com Translation: इटालियनलाई अङ्ग्रेजीमा +Name[nl]=WordReference.com-vertaling: Italiaans naar Engels +Name[nn]=WordReference.com – omsetjing: italiensk til engelsk +Name[pa]=WordReference.com ਅਨੁਵਾਦ:ਇਤਾਲਵੀ ਤੋਂ ਅੰਗਰੇਜ਼ੀ +Name[pl]=WordReference.com: włoski -> angielski +Name[pt]=Traduções do WordReference.com: Italiano para Inglês +Name[pt_BR]=WordReference.com - Tradução: Italiano para Inglês +Name[ro]=Traducere WordReference.com: italiană la engleză +Name[ru]=Переводчик WordReference.com: итальянско-английский +Name[rw]=WordReference.com Ivunura: Igitaliyani mu Cyongereza +Name[se]=WordReference.com – jorgaleapmi: italialašgielas eŋgelasgillii +Name[sk]=WordReference.com preklad z talianštiny do angličtiny +Name[sl]=Prevod WordReference.com: italijanščina v angleščino +Name[sr]=Превод на WordReference.com: са италијанског на енглески +Name[sr@Latn]=Prevod na WordReference.com: sa italijanskog na engleski +Name[sv]=Wordreference.com översättning: italienska till engelska +Name[ta]=WordReference.com மொழிபெயர்ப்பு: இத்தாலிய மொழியில் இருந்து ஆங்கிலத்துக்கு +Name[tg]=WordReference.com Тарҷума: аз Итолиёгӣ ба Англисӣ +Name[th]=WordReference.com แปลภาษาอิตาเลียนเป็นอังกฤษ +Name[tr]=WordReference.com Çevirisi: İtalyancadan İngilizceye +Name[tt]=WordReference.com Tärcemäse: İtalça -› İnglizçä +Name[uk]=WordReference.com: переклад з італійської на англійську +Name[uz]=WordReference.com tarjima: Italyanchadan Inglizchaga +Name[uz@cyrillic]=WordReference.com таржима: Италянчадан Инглизчага +Name[vi]=WordReference.com Dịch: Tiếng Ý sang tiếng Anh +Name[wa]=WordReference.com ratournaedje di l' itålyin viè l' inglès +Name[zh_CN]=WordReference.com 翻译:意大利语译英语 +Name[zh_TW]=WordReference.com 翻譯: 義大利文至英文 +Query=http://www.wordreference.com/it/en/translation.asp?iten=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/jeeves.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/jeeves.desktop new file mode 100644 index 000000000..b1fc478fd --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/jeeves.desktop @@ -0,0 +1,30 @@ +[Desktop Entry] +Type=Service +Name=Ask Jeeves +Name[af]=Vra Jeeves +Name[br]=Klask digant Jeeves +Name[csb]=Ask Jeeves - spëtôj ò cos +Name[de]=Frag Jeeves +Name[eo]=Demandu Jeeves +Name[fa]=پرسیدن Jeeves +Name[fo]=Spyr Jeeves +Name[he]=שאל את Jeeves +Name[hi]=आस्क जीव्स +Name[hr]=Pitajte Jeevesa +Name[is]=Spyrja Jeeves +Name[mk]=Прашајте го Jeeves +Name[mn]=Frag Jeeves +Name[nds]=Fraag Jeeves +Name[ne]=आस्क जीभेज +Name[nso]=Botsisa Jeeves +Name[pl]=Ask Jeeves - zapytaj o coś +Name[ss]=Buta Jeeves +Name[ta]=ஜீவசை கேள் +Name[te]=జీవ్స్ ను అడగండి +Name[th]=ถามจีฟส์ +Name[ven]=Vhudzisani Jeeves +Name[vi]=Hỏi Jeeves +ServiceTypes=SearchProvider +Keys=ask,jeeves +Query=http://www.ask.com/main/askJeeves.asp?origin=0&qSource=4&site_name=Jeeves&metasearch=yes&ask=\\{@} +Query[en_GB]=http://www.ask.co.uk/main/askJeeves.asp?origin=0&qSource=4&site_name=Jeeves&metasearch=yes&ask=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/katatudo.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/katatudo.desktop new file mode 100644 index 000000000..ac220a515 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/katatudo.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Type=Service +Name=KataTudo +Name[bn]=কাটা-টুডো +Name[eo]=Katatudo +Name[eu]=Kata Tudo +Name[hi]=केएटीए ट्यूडो +Name[ne]=काता टुडो +Name[ta]=காட்டா ட்யூடோ +Name[te]=కటాటుడొ +ServiceTypes=SearchProvider +Keys=kt,katatudo +Query=http://www.katatudo.com.br/busca/resultado.php?q=\\{@}&onde=&b=Buscar +Query[ne]=http://www.katatudo.com.br/busca/resultado.php?q=\\{@}onde=&b=Buscar +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/kde.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/kde.desktop new file mode 100644 index 000000000..f5a96f71e --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/kde.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=kde +Name=KDE API Documentation +Name[af]=KDE API Dokumentasie +Name[ar]=توثيق واجهة برمجة تطبيقات (API) كيدي +Name[az]=KDE API Sənədləri +Name[be]=Дакументацыя па KDE API +Name[bn]=কে.ডি.ই. এ-পি-আই নির্দেশিকা +Name[br]=Teuliadur API KDE +Name[bs]=KDE API dokumentacija +Name[ca]=Documentació de l'API de KDE +Name[cs]=KDE API dokumentace +Name[csb]=Dokùmentacëjô API KDE +Name[cy]=Dogfenniaeth API KDE +Name[da]=KDE API Dokumentation +Name[de]=KDE-API-Dokumentation +Name[el]=Τεκμηρίωση KDE API +Name[eo]=KDE API Dokumentaro +Name[es]=Documentación de la API de KDE +Name[et]=KDE API dokumentatsioon +Name[eu]=KDEren API dokumentazioa +Name[fa]=مستندات KDE ِAPI +Name[fi]=KDE APIn dokumentaatio +Name[fr]=Documentation de l'API de KDE +Name[fy]=KDE API Dokumintaasje +Name[ga]=Doiciméadú API KDE +Name[gl]=Documentación da API de KDE +Name[he]=תיעוד ממשק תכנות יישומים ב־KDE +Name[hi]=केडीई एपीआई दस्तावेज़ीकरण +Name[hr]=KDE API dokumentacija +Name[hu]=A KDE API dokumentációja +Name[id]=Dokumentasi API KDE +Name[is]=KDE forritunarviðmótsleiðbeiningar +Name[it]=Documentazione della API di KDE +Name[ja]=KDE API 文書 +Name[kk]=KDE API құжаттамасы +Name[km]=ឯកសារ API របស់ KDE +Name[ko]=KDE API 문서 +Name[lt]=KDE API dokumentacija +Name[lv]=KDE API Dokumentācija +Name[mk]=KDE API документација +Name[mn]=KDE API баримтжуулалт +Name[ms]=Dokumentasi API KDE +Name[mt]=Dokumentazzjoni tal-API ta' KDE +Name[nb]=KDE API-dokumentasjon +Name[nds]=KDE-API-Dokmentatschoon +Name[ne]=KDE API कागजात +Name[nl]=KDE API Documentatie +Name[nn]=KDE API-dokumentasjon +Name[pa]=KDE API ਦਸਤਾਵੇਜ਼ +Name[pl]=Dokumentacja API KDE +Name[pt]=Documentação da API do KDE +Name[pt_BR]=Documentação da API do KDE +Name[ro]=Documentația API KDE +Name[ru]=Документация KDE API +Name[rw]=Ikoreshanyandiko KDE API +Name[se]=KDE API-dokumentašuvdna +Name[sk]=KDE dokumentácia API +Name[sl]=Dokumentacija KDE API +Name[sr]=Документација API-ја KDE-а +Name[sr@Latn]=Dokumentacija API-ja KDE-a +Name[sv]=Dokumentation av KDE:s programmeringsgränssnitt +Name[ta]=KDE API ஆவணமாக்கல் +Name[tg]=Мустанадоти KDE API +Name[th]=เอกสารอธิบาย API บน KDE +Name[tr]=KDE API Belgeleri +Name[tt]=KDE API Qullanması +Name[uk]=Документація по API KDE +Name[uz]=KDE API boʻyicha qoʻllanmalar +Name[uz@cyrillic]=KDE API бўйича қўлланмалар +Name[vi]=Tài liệu về API của KDE +Name[wa]=Documintåcion di l' API di KDE +Name[zh_CN]=KDE API 文档 +Name[zh_TW]=KDE API 文件 +Query=http://developer.kde.org/documentation/library/classmapper.php?class=\\{@} +Query[bg]=http://developer.kde.org/documentation/library/classmapper.php?class=\ +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/kde_websvn.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/kde_websvn.desktop new file mode 100644 index 000000000..6dd1ce121 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/kde_websvn.desktop @@ -0,0 +1,32 @@ +[Desktop Entry] +Type=Service +Name=KDE WebSVN +Name[bn]=কে.ডি.ই. ওয়েব-এস.ভি.এন +Name[br]=WebSVN KDE +Name[ca]=WebSVN de KDE +Name[csb]=WebSVN dlô KDE +Name[es]=WebSVN de KDE +Name[fi]=KDE:n WebSVN +Name[fr]=WebSVN de KDE +Name[ga]=WebSVN KDE +Name[gl]=WebCVS de KDE +Name[it]=SVN web di KDE +Name[nds]=KDE-WebSVN +Name[ne]=KDE वेब एसभीएन +Name[pl]=WebSVN dla KDE +Name[pt]=WebSVN do KDE +Name[pt_BR]=WebSVN do KDE +Name[sr]=KDE-ов WebSVN +Name[sr@Latn]=KDE-ov WebSVN +Name[sv]=KDE-webbsvn +Name[te]=కెడిఈ వెబె ఎస్ వి ఎన్ +Name[tg]=KDE ВэбSVN +Name[th]=SVN บนเว็บของ KDE +Name[vi]=Tra KDE WebSVN +Name[wa]=WebSVN di KDE +ServiceTypes=SearchProvider +Keys=websvn,kdesvn,ksvn,kvs +Query=http://websvn.kde.org/\\{@} +Query[ja]=http://webcvs.kde.org/\\{@} +Query[se]=http://webcvs.kde.org/\\{@} + diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/leo.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/leo.desktop new file mode 100644 index 000000000..87e961e5e --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/leo.desktop @@ -0,0 +1,49 @@ +[Desktop Entry] +Type=Service +Name=LEO-Translate +Name[af]=LEO-Vertaal +Name[ar]=LEO-ترجم +Name[bs]=LEO-Prevodilac +Name[csb]=LEO - dwastarnowi anielskò-miemiecczi +Name[cy]=LEO-Cyfieithu +Name[de]=LEO-Übersetzung +Name[eo]=LEO-Tradukilo +Name[fa]=LEO - ترجمه کردن +Name[fi]=LEO-käännös +Name[fo]=LEO-Umset +Name[fy]=LEO-oersetting (oersetting: Dûtsk-Ingelsk-Dûtsk) +Name[ga]=Aistriúchán LEO +Name[he]=LEO־תרגום +Name[hi]=लिओ-अनुवाद +Name[hr]=LEO-Prijevod +Name[is]=LEO-þýðandi +Name[km]=LEO-បកប្រែ +Name[ko]=LEO-번역 +Name[lv]=LEO-Tulkot +Name[mk]=LEO - превод +Name[mn]=LEO-Орчуулга +Name[ms]=LEO-Terjemah +Name[nb]=LEO-oversetter +Name[nds]=LEO-Översetten +Name[ne]=LEO-अनुवाद +Name[nl]=LEO-Translate (Vertaling Duits-Engels-Duits) +Name[nso]=Thlathollo ya LEO +Name[pa]=LEO-ਅਨੁਵਾਦ +Name[pl]=LEO - dwustronny słownik angielsko-niemiecki +Name[pt_BR]=LEO-Tradutor +Name[rw]=LEO-Kuvunura +Name[ss]=Humusha LEO +Name[ta]=லியோ-மொழிபெயர்ப்பு +Name[te]=లియొ-అనువాదం +Name[tg]=LEO-Тарҷума +Name[tt]=LEO-Tärcemä +Name[uz]=LEO tarjima +Name[uz@cyrillic]=LEO таржима +Name[ven]=Hu dologa-LEO +Name[vi]=Dịch bằng LEO +Name[wa]=Ratournaedje LEO +Name[xh]=LEO-Guqulela +Name[zu]=Uguqulelo-LEO +ServiceTypes=SearchProvider +Keys=leo +Query=http://dict.leo.org/?search=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/lycos.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/lycos.desktop new file mode 100644 index 000000000..ba6b44c12 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/lycos.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Service +Name=Lycos +Name[bn]=লাইকস +Name[csb]=Lycos - szëkôrz starnów WWW +Name[hi]=लायकोस +Name[ne]=लाइकस +Name[pa]=ਲੁਕੋਸ +Name[pl]=Lycos - wyszukiwarka stron WWW +Name[ta]=லைகோஸ் +Name[te]=లైకోస్ +Name[th]=ไลคอส +Name[vi]=Tra Lycos +ServiceTypes=SearchProvider +Keys=lycos,ly +Query=http://www.lycos.com/cgi-bin/pursuit?cat=dir&query=\\{@} +Query[ne]=http://www.lycos.com/cgi-bin/pursuit?cat=dirquery=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/mamma.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/mamma.desktop new file mode 100644 index 000000000..2e104f15b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/mamma.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Type=Service +Name=Mamma - Mother of all Search Engines +Name[af]=Mamma - Moeder van alle Soektog Enjins +Name[ar]=Mama -أم جميع محركات البحث +Name[az]=Mamma - Bütün axtarış mühərriklərinin Anası +Name[be]=Mamma - Маці ўсіх рухавікоў пошуку +Name[br]=Mamma - Mamm pep keflusker klask +Name[bs]=Mamma - Majka svih tražilica +Name[ca]=Mamma - La mare de tots els motors de recerca +Name[cs]=Mamma +Name[csb]=Mamma - mëmka wszëstczich szëkôrzów +Name[cy]=Mamma - Mam holl Beiriannau Chwilio +Name[da]=Mamma - moderen til alle søgemaskiner +Name[de]=Mamma - Die Mutter aller Suchmaschinen +Name[el]=Mamma - Η μητέρα όλων των μηχανών αναζήτησης +Name[eo]=Mamma - Patrino de ĉiuj retserĉiloj +Name[es]=Mamma - La madre de todos los motores de búsqueda +Name[et]=Mamma - kõigi otsingumootorite ema +Name[eu]=Mamma - Bilaketa motore guztien ama +Name[fa]=Mamma - مادر همۀ موتورهای جستجو +Name[fr]=Mamma - La mère de tous les moteurs de recherche +Name[fy]=Mamma - mem fan alle sykmasines +Name[gl]=Mamma - Mai dos Motores de Procura +Name[he]=Mamma - האימא של כל מנועי החיפוש +Name[hi]=मम्मा- सभी खोज इंजिन की अम्मा +Name[hr]=Mamma - Majka svih tražilica +Name[hu]=Mamma +Name[is]=Mamma - Mamma allra leitarvéla +Name[it]=Mamma - Madre di tutti i motori di ricerca +Name[kk]=Mamma - бүкіл іздеу жүйелерінің анасы +Name[km]=Mamma - កំពូល​ម៉ាស៊ីន​ស្វែងរក +Name[ko]=Mamma - 모든 검색 엔진의 어머니 +Name[lt]=Mamma – visų paieškų motina +Name[lv]=Mamma - Visu Meklēšanas Dinēju Māte +Name[mk]=Mamma - мајката на сите пребарувачки сервиси +Name[mn]=Mamma - Бүх хайлтын машины эх +Name[ms]=Mamma -Ibu semua Enjin Carian +Name[nb]=Mamma – alle søkemotorers mor +Name[nds]=Mamma - de Moder vun all Söökmaschinen +Name[ne]=Mamma - सबै खोज्ने इन्जिनको जननी +Name[nl]=Mamma - moeder van alle zoekmachines +Name[nn]=Mamma – Mother of all Search Engines +Name[nso]=Mamma - Mme wa Di-Engine kamoka tsa Nyako +Name[pa]=ਮਾਮਾ -ਸਭ ਖੋਜ ਇੰਜਣਾਂ ਦੀ ਮਾਂ +Name[pl]=Mamma - matka wszystkich przeszukiwarek +Name[pt]=Mamma - Mãe de Todos os Motores de Busca +Name[pt_BR]=Mamma - Mãe de todos os mecanismos de busca +Name[ro]=Mamma - Mama tuturor motoarelor de căutare +Name[ru]=Mamma - мать всех поисковых систем +Name[rw]=Mamma - Nyina w'Imoteri z'ishakisha zose +Name[se]=Mamma – Mother of all Search Engines +Name[sl]=Mamma - Mati vseh iskalnikov +Name[sr]=Mamma - Мајка свих претраживачких мотора +Name[sr@Latn]=Mamma - Majka svih pretraživačkih motora +Name[ss]=Mamma - make wato tonkhe tinjinin tekusesha +Name[sv]=Mamma - Moder till alla sökmotorer +Name[ta]=மம்மா - தேடு இயந்திரங்களின் தாய் +Name[tg]=Mamma - Модари ҳамаи мошинҳои ҷустуҷӯ +Name[th]=มามา - มารดาของเครื่องมือค้นหาทั้งปวง +Name[tr]=Mamma - Bütün arama motorlarının Annesi +Name[tt]=Mamma - Bar Ezläw-Maşínalarnıñ Anası +Name[uk]=Mamma - мати всіх пошукових машин +Name[uz]=Mamma - Hamma qidirish vositalarining onasi +Name[uz@cyrillic]=Mamma - Ҳамма қидириш воситаларининг онаси +Name[ven]=Mamma - Mmea nzhini dzothe dzau setsha +Name[vi]=Mamma - Người mẹ của tất cả các máy truy tìm dữ liệu +Name[wa]=Mamma - Li mame di tos les cwirress +Name[xh]=Mamma - Umama weenjini zonke zophendlo +Name[zh_CN]=Mamma - 所有搜索引擎之母 +Name[zh_TW]=Mamma - 搜尋引擎之母 +Name[zu]=Mamma - Umama wazo zonke Izinjini Zokusesha +ServiceTypes=SearchProvider +Keys=mm,mamma +Query=http://www.mamma.com/Mamma?lang=1&timeout=4&qtype=0&query=\\{@} +Query[ne]=http://www.mamma.com/Mamma?lang=1timeout=4&qtype=0&query=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/metacrawler.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/metacrawler.desktop new file mode 100644 index 000000000..0c3fc2edf --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/metacrawler.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Type=Service +Name=MetaCrawler +Name[af]=Metacrawler +Name[ar]=MetaCrwaler +Name[bn]=মেটা-ক্রলার +Name[csb]=MetaCrawler - szëkôrz starnów WWW +Name[hi]=मेटा-क्राउलर +Name[ne]=मेटा क्रवलर +Name[pa]=ਮੈਟਾਕਰਾਵਲੀਰ +Name[pl]=MetaCrawler - wyszukiwarka stron WWW +Name[rw]=Ikiziga-buhoroKidasanzwe +Name[ta]=மெடா க்ராவ்லெர் +Name[te]=మెటా క్రాలర్ +Name[th]=เมทาคลอเรอร์ +Name[ven]=Tshikokovhi tsha Meta +Name[vi]=Tra MetaCrawler +ServiceTypes=SearchProvider +Keys=mc,meta,metacrawler +Query=http://search.metacrawler.com/crawler?general=\\{@}&method=0&cat=Web&target=metaworld&redirect=web&rpp=20&hpe=10®ion=0&timeout=0&sort=0&format=beta99&theme=classic&refer=mc-search&refer=mc-search diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/msdn.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/msdn.desktop new file mode 100644 index 000000000..5a9fc733c --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/msdn.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Type=Service +Name=Microsoft Developer Network Search +Name[af]=Microsoft Developer Network Soektog +Name[ar]=بحث في شبكة مطوري مايكروسوفت +Name[be]=Пошук у сетцы для распрацоўшчыкаў Microsoft +Name[bn]=মাইক্রোসফট ডেভেলপার নেটওয়ার্ক অনুসন্ধান +Name[bs]=Microsoft Developer Network (MSDN) pretraga +Name[ca]=Xarxa de recerca del desenvolupador de Microsoft +Name[cs]=Vyhledávání v Microsoft Developer Network +Name[csb]=MSDN - dostónczi dlô programistów +Name[cy]=Chwilio Rhwydwaith Datblygwyr Microsoft +Name[da]=Søgning i Microsoft Developer Network +Name[de]=Microsoft Developer Network Suche +Name[el]=Microsoft - δικτυακή αναζήτηση προγραμματιστή +Name[eo]=Serĉo en la Mikrosofta-programisto-reto +Name[es]=Red de búsqueda del desarrollador de Microsoft +Name[et]=Microsoft Developer Network otsing +Name[eu]=Microsoft-en garatzaileen sare bilaketa +Name[fa]=جستجوی شبکۀ توسعه‌دهندۀ مایکروسافت +Name[fi]=Microsoft Developer Network -haku +Name[fy]=Microsoft Developer Network Search +Name[ga]=Cuardach Microsoft Developer Network +Name[gl]=Procura na Rede de Desenvolvemento de Microsoft +Name[hi]=माइक्रोसॉफ्ट डेवलपर नेटवर्क खोज +Name[hr]=Microsoft Developer Network pretraga +Name[is]=Microsoft Developer Network leit +Name[it]=Ricerca Microsoft Developer Network +Name[ja]=Microsoft Developer Network 検索 +Name[kk]=Microsoft Developer Network-те іздеу +Name[km]=ស្វែងរក​តាម​រយៈ​បណ្ដាញ​អ្នក​អភិវឌ្ឍន៍ Microsoft +Name[ko]=Microsoft Developer Network 검색 +Name[lt]=Microsoft Developer Network Paieška +Name[lv]=Microsoft Izstrādātāju Tīkla Meklēšana +Name[mn]=Microsoft Developer Network хайлт +Name[ms]=Carian Rangkaian Pembangun Microsoft +Name[mt]=Tfittxija fuq Microsoft Developer Network +Name[nb]=Microsoft Developer Network-søk +Name[ne]=माइक्रोसफ्ट विकासकर्ता सञ्जाल खोज्नुहोस् +Name[nl]=Microsoft Developer Network Search +Name[nn]=Microsoft Developer Network-søk +Name[nso]=Nyako ya Kgokagano ya Mohlabolli wa Microsoft +Name[pa]=ਮਾਈਕਰੋਸਾਫਟ ਖੋਜੀ ਨੈੱਟਵਰਕ ਖੋਜ +Name[pl]=MSDN - zasoby dla programistów +Name[pt]=Pesquisa na Microsoft Developer Network +Name[pt_BR]=Busca no MDN (Microsoft Developer Network) +Name[ro]=Căutare în Microsoft Developer Network +Name[ru]=Поиск в Microsoft Developer Network +Name[rw]=Ishakisha rya Mukoraporogaramu Urusobemiyoboro Microsoft +Name[se]=Oza Microsoft Developer Network báikkis +Name[sk]=Hľadanie Microsoft Developer Network +Name[sl]=Iskalnik po razvijalnem omrežju Microsofta +Name[sr]=Претраживање Мреже Microsoft-ових развијача (MSDN) +Name[sr@Latn]=Pretraživanje Mreže Microsoft-ovih razvijača (MSDN) +Name[ss]=Kusesha kweluchungechunge lesindlondlobalisi seMicrosoft +Name[sv]=Sökning i Microsoft Developer Network +Name[ta]=மைக்ரோசாப்ட் டெவலப்பர் வலைத்தள தேடுதல் +Name[tg]=Ҷустуҷӯи шабакаи барноманависони Microsoft +Name[th]=เครื่องมือค้นหาเกี่ยวกับเครือข่ายผู้พัฒนาของไมโครซอฟต์ +Name[tr]=Microsoft Developer Network Tarayıcı +Name[tt]=Microsoft Developer Network eçendä Ezläw +Name[uk]=Пошук в Microsoft Developer Network +Name[uz]=Microsoft Developer Network'da qidirish +Name[uz@cyrillic]=Microsoft Developer Network'да қидириш +Name[ven]=Vhukwamani hau setsha ha mubveledzi wa Microsoft +Name[vi]=Mạng Truy tìm cho Lập trình viên Microsoft +Name[wa]=Cweraedje sol Rantoele des Programeus Microsoft +Name[xh]=Uphendlo Womsebenzi womnatha Wombhekisi phambili we Microsoft +Name[zh_CN]=MSDN 微软开发者网络搜索 +Name[zh_TW]=微軟開發者網路搜尋 +Name[zu]=Usesho Loxhumano olusakazekile Lomthuthukisi we-Microsoft +ServiceTypes=SearchProvider +Keys=msdn +Query=http://msdn.microsoft.com/library/shared/searchtab/searchHandoff.asp?handoffurl=%2Fisapi%2Fgosearch.asp%3FTARGET%3D%2Fus%2Fdev%2Fdefault.asp&stcfg=d%3A%2Fhttp%2Fcnfg.xml&qu=\\{@}&btnSearch=GO diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/netcraft.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/netcraft.desktop new file mode 100644 index 000000000..d2ea4be81 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/netcraft.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Service +Name=Netcraft +Name[bn]=নেট-ক্রাফ্ট +Name[fy]=Netcraft +Name[hi]=नेटक्राफ्ट +Name[mn]=Нэтскафе +Name[ne]=नेटक्राफ्ट +Name[pa]=ਨੈੱਟਕਰਾਫਟ +Name[ta]=நெட்க்ராஃப்ட் +Name[te]=నెట్ క్రాఫ్ట్ +Name[tg]=Шабакаи craft +Name[th]=เน็ตคราฟต์ +Name[vi]=Tra Netcraft +ServiceTypes=SearchProvider +Keys=nc,netcraft +Query=http://uptime.netcraft.com/up/graph?site=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-telephone.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-telephone.desktop new file mode 100644 index 000000000..7abbad0e1 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-telephone.desktop @@ -0,0 +1,71 @@ +[Desktop Entry] +Name=Telephonebook Search Provider +Name[af]=Telefoonbok soektog verskaffer +Name[ar]=مزود البحث في دليل الهاتف +Name[az]=Telephonebook Axtarış Xidmətçisi +Name[be]=Пошук тэлефонаў +Name[bn]=টেলিফোন-বুক অনুসন্ধান সরবরাহকারী +Name[bs]=Telephonebook pretraga +Name[ca]=Proveïdor de cerques a la guia de telèfons +Name[cs]=Poskytovatel prohledávání tel. seznamu +Name[csb]=Szëkôrz Telephonebook +Name[cy]= Darparydd Chwiliadau Llyfr Ffôn +Name[da]=Telefonbog-søgeudbyder +Name[de]=Telefonbuchsuche +Name[el]=Πάροχος αναζήτησης Telephonebook +Name[eo]=Telefonlibro-serĉprovizanto +Name[es]=Proveedor de búsqueda de teléfonos +Name[et]=Hollandi telefoniraamatu otsingumootor +Name[eu]=Telephonebook bilaketa hornitzailea +Name[fa]=فراهم‌کنندۀ جستجوی دفتر تلفن +Name[fi]=Puhelinluettelohaku +Name[fr]=Moteur de recherche Telephonebook +Name[fy]=Tillefoanboek-sykmasine +Name[gl]=Fornecedor de Procuras na Guia Telefónica +Name[he]=חיפוש ספר של ספר טלפונים +Name[hi]=टेलिफोनबुक खोज प्रदायक +Name[hr]=Davatelj usluge pretraživanja imenika +Name[hu]=Telefonkönyv (NL) +Name[is]=Leitarvél fyrir símaskrár +Name[it]=Motore di ricerca Elencotelefonico +Name[ja]=Telephonebook 検索プロバイダ +Name[km]=អ្នក​ផ្ដល់​សេវា​ស្វែងរក​សៀវភៅ​លេខ​ទូរស័ព្ទ +Name[ko]=전화번호부 검색 공급자 +Name[lt]=Telefono knygų paieškos teikėjas +Name[lv]=Tālruņa katalogu meklēšanas sniedzējs +Name[mk]=Telephonebook сервис за пребарување +Name[ms]=Penyedia Carian Buku Telefon +Name[mt]=Telephonebook search provider +Name[nb]=Søkemotor for telefonkataloger +Name[nds]=In't Telefoonbook söken (Nedderlannen) +Name[ne]=टेलिफोन पुस्तिका खोजी प्रदायक +Name[nl]=Telefoonboek-zoekmachine +Name[nn]=Søkjemotor for telefonkatalog +Name[pa]=ਟੈਲੀਫੋਨ ਖੋਜ ਪੇਸ਼ਕਾਰ +Name[pl]=Wyszukiwarka Telephonebook +Name[pt]=Motor de Busca de Lista Telefónica +Name[pt_BR]=Guia Telefônico On-line +Name[ro]=Căutare în cartea de telefoane +Name[rw]=Utanga Ishakisha Agatabotelefone +Name[se]=Ohcanmotor telefonkatalogaid várás +Name[sk]=Hľadanie v telefónnom zozname +Name[sl]=Ponudnik iskanja po telefonskem imeniku +Name[sr]=Провајдер за претрагу телефонског именика +Name[sr@Latn]=Provajder za pretragu telefonskog imenika +Name[sv]=Söktjänst för telefonkatalog +Name[ta]=தொலைபேசிபுத்தக தேடுதலை அளிப்பான் +Name[tg]=Фароҳамкунандаи ҷустуҷӯи китобчаи рӯйхати телефонҳо +Name[th]=ผู้ให้บริการค้นหาสมุดโทรศัพท์ +Name[tr]=Telefon Defteri Arama Sağlayıcı +Name[tt]=Telefon Kitaplarında Ezläw +Name[uk]=Провайдер пошуку Telephonebook +Name[uz]=Telefonlar daftarida qidirish +Name[uz@cyrillic]=Телефонлар дафтарида қидириш +Name[vi]=Nhà cung cấp dịch vụ Tìm kiếm qua Danh bạ điện thoại +Name[wa]=Dineu d' cweraedje di live di limeros d' telefone +Name[zh_CN]=Telephonebook 搜索提供者 +Name[zh_TW]=電話號碼簿搜尋提供者 +Type=Service +ServiceTypes=SearchProvider +Keys=telnl,telefoon +Query=http://www.detelefoongids.nl/tginl.dll?action=white&type=search&resultsperpage=25&pagestart=1&source=searchcategory&name2=\\{1}&name=&initials=&city=\\{2}&citycode=&zipcode4=&street=&area=conditional&areacode=®ion=&subscription=&country=&catcode=&dcity=\\{2}&dname=\\{1}&dwhere=\\{2}&partnerid= diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-teletekst.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-teletekst.desktop new file mode 100644 index 000000000..d305fd88b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/nl-teletekst.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Name=Teletekst Search Provider +Name[af]=Teleteks soektog verskaffer +Name[ar]=مزود البحث Teletekst +Name[az]=Teletekst Axtarış Xidmətçisi +Name[be]=Пошук тэлетэксту +Name[bn]=Teletekst অনুসন্ধান সরবরাহকারী +Name[bs]=Teletekst pretraga +Name[ca]=Proveïdor de cerca a Teletekst +Name[cs]=Poskytovatel Teletekstového prohledávání +Name[csb]=Szëkôrz Teletekst +Name[cy]= Darparwr Chwiliadau Teletekst +Name[da]=Teletekst-søgeudbyder +Name[de]=Teletekst-Suche +Name[el]=Πάροχος αναζήτησης Teletekst +Name[eo]=Teletekst-serĉprovizanto +Name[es]=Proveedor de búsqueda Teletekst +Name[et]=Hollandi teleteksti otsingumootor +Name[eu]=Teletekst bilaketa hornitzailea +Name[fa]=فراهم‌کنندۀ جستجوی پیام‌نما +Name[fi]=Teleteksti-palveluntarjoaja +Name[fr]=Moteur de recherche Teletekst +Name[fy]=Teletekst-sykmasine +Name[ga]=Cuardach Teletekst +Name[gl]=Fornecedor de Procuras Teletekst +Name[he]=חיפוש ספק שירות של Teletekst +Name[hi]=टेलिटेक्स्ट खोज प्रदायक +Name[hr]=Davatelj usluge pretraživanja teleteksta +Name[hu]=Teletekst keresőszolgáltatás +Name[is]=Teletekst leitarvél +Name[it]=Motore di ricerca Teletekst +Name[ja]=Teletekst 検索プロバイダ +Name[ka]=Teletekst ძიების პროვაიდერი +Name[km]=Teletekst ៖ អ្នក​ផ្ដល់​សេវា​ស្វែងរក +Name[ko]=Teletekst 검색 공급자 +Name[lt]=Teleteksto paieškos teikėjas +Name[lv]=Teleteksta meklēšanas sniedzējs +Name[mk]=Телетекст сервис за пребарување +Name[ms]=Penyedia Carian Teletekst +Name[mt]=Tfittxika teletekst +Name[nb]=Søkemotor for teletekst +Name[nds]=In "Teletekst" söken (Nedderlannen) +Name[ne]=टेलिटेक्स्ट खोजी प्रदायक +Name[nl]=Teletekst-zoekmachine +Name[nn]=Søkjemotoren Teletekst +Name[pa]=ਟੇਲੇਟੇਕਸਟ ਖੋਜ ਪੇਸ਼ਕਾਰ +Name[pl]=Wyszukiwarka Teletekst +Name[pt]=Motor de Busca Teletekst +Name[pt_BR]=Provedor de buscas Teletekst +Name[ro]=Căutare Teletekst +Name[ru]=Поиск телетекста +Name[rw]=Utanga Ishakisha Teletekst +Name[se]=Ohcanmotor Teletekst +Name[sk]=Poskytovateľ hľadania Teletekst +Name[sl]=Ponudnik iskanja po teletekstu +Name[sr]=Провајдер за телетекст претрагу +Name[sr@Latn]=Provajder za teletekst pretragu +Name[sv]=Teletekst söktjänst +Name[ta]=Teletekst தேடுதல் அளிப்பான் +Name[tg]=Фароҳамкунандаи ҷустуҷӯи Тексти телевизионӣ +Name[th]=ผู้ให้บริการการค้นหา Teleteskst +Name[tr]=Teletekst Arama Sağlayıcı +Name[tt]=Teletekst Ezläw +Name[uk]=Провайдер пошуку Teletekst +Name[uz]=Teletekstda qidirish +Name[uz@cyrillic]=Телетекстда қидириш +Name[vi]=Nhà cung cấp dịch vụ Tìm kiếm Teletekst +Name[wa]=Dineu di cweraedje Teletecse +Name[zh_CN]=Teletekst 搜索提供者 +Name[zh_TW]=Teletekst 搜尋提供者 +Type=Service +ServiceTypes=SearchProvider +Keys=tt,teletekst +Query=http://teletekst.nos.nl/gif/\\{@}-01.html diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/pgpkeys.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/pgpkeys.desktop new file mode 100644 index 000000000..c1b128780 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/pgpkeys.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +Keys=pgp,pgpkeys +Name=OpenPGP Key Search +Name[af]=OpenPGP Sleutel Soektog +Name[ar]=بحث مفاتيح OpenPGP +Name[az]=OpenPGP Açar Axtarışı +Name[be]=Пошук ключа OpenPGP +Name[bn]=ওপেন-পিজিপি কী (key) অনুসন্ধান +Name[bs]=Tražilica OpenPGP ključeva +Name[ca]=Recerca de claus OpenPGP +Name[cs]=Vyhledávání OpenPGP klíčů +Name[csb]=Szëkôrz kluczów OpenPGP +Name[cy]=Chwilio Allwedd PGPAgored +Name[da]=OpenPGP-nøglesøgning +Name[de]=Suche nach OpenPGP-Schlüssel +Name[el]=Αναζήτηση κλειδιού OpenPGP +Name[eo]=OpenPGP-serĉo +Name[es]=Búsqueda de clave OpenPGP +Name[et]=OpenPGP võtme otsing +Name[eu]=OpenPGP gako bilaketa +Name[fa]=جستجوی کلید OpenPGP +Name[fi]=OpenPGP-avainhaku +Name[fo]=OpenPGP lyklaleiting +Name[fr]=Clé de recherche OpenPGP +Name[fy]=Sykje nei OpenPGP-Kaaien +Name[gl]=Procura de Chaves de OpenPGP +Name[he]=חיפוש מפתחות OpenPGP +Name[hi]=ओपनपीजीपी कुंजी खोज +Name[hr]=Pretraživanje OpenPGP ključeva +Name[hu]=OpenPGP kulcskereső +Name[is]=OpenPGP lykilleit +Name[it]=Ricerca chiavi OpenPGP +Name[ja]=OpenPGP キー検索 +Name[ka]=OpenPGP კოდის ძიება +Name[kk]=OpenPGP кілттерін табу +Name[km]=ស្វែងរក​កូនសោ​តាម​រយៈ OpenPGP +Name[ko]=OpenPGP 키 검색 +Name[lt]=OpenPGP raktų paieška +Name[lv]=OpenPGP Atslēgu meklēšana +Name[mk]=Пребарување на OpenPGP клучеви +Name[mn]=OpenPGP-түлхүүрээр хайх +Name[ms]=Carian Kekunci OpenPGP +Name[mt]=Tfittxija għal ċifrarju OpenPGP +Name[nb]=OpenPGP nøkkelsøk +Name[nds]=OpenPGP-Slötel-Söök +Name[ne]=खुला PGP कुञ्जी खोजी +Name[nl]=Zoeken naar OpenPGP-sleutels +Name[nn]=OpenPGP-nøkkelsøk +Name[nso]=Nyako ya Senotlelo sa PGP yeo e bulegilego +Name[pa]=OpenPGP ਕੁੰਜੀ ਖੋਜ +Name[pl]=Przeszukiwarka kluczy OpenPGP +Name[pt]=Pesquisa de Chaves do OpenPGP +Name[pt_BR]=Busca de Chaves OpenPGP +Name[ro]=Căutare chei OpenPGP +Name[ru]=Поиск ключей OpenPGP +Name[rw]=Ishakisha Ijambo GufunguraPGP +Name[se]=Oza OpenPGP-čoavdagiid +Name[sk]=Hľadanie kľúčov OpenPGP +Name[sl]=Iskanje ključa OpenPGP +Name[sr]=Претраживање OpenPGP кључева +Name[sr@Latn]=Pretraživanje OpenPGP ključeva +Name[ss]=Vula kusesha lokuyinhloko kwePGP +Name[sv]=OpenPGP-nyckelsökning +Name[ta]=OpenPGP வார்த்தை தேடுதல் +Name[te]=ఒపెన్ పిజిపి కీ అన్వెషణ +Name[tg]=Ҷустуҷӯи калиди OpenPGP +Name[th]=ค้นหารหัส OpenPGP +Name[tr]=OpenPGP anahtar Arayıcı +Name[tt]=OpenPGP Açqıç Ezläw +Name[uk]=Пошук ключів OpenPGP +Name[uz]=OpenPGP kalitlarni qidirish +Name[uz@cyrillic]=OpenPGP калитларни қидириш +Name[ven]=U setsha ha khii ya PGP yo vuleaho +Name[vi]=Tìm kiếm bằng từ khoá của OpenPGP +Name[wa]=Cweraedje d' ene clé OpenPGP +Name[xh]=Uphendlo Lwesitshixo se OpenPGP +Name[zh_CN]=OpenPGP 关键字搜索 +Name[zh_TW]=OpenPGP 金鑰搜尋 +Name[zu]=OpenPGP Usesho olubalulekile +Query=http://pgp.dtype.org:11371/pks/lookup?search=\\{@}&op=vindex +Query[ne]=http://pgp.dtype.org:11371/pks/lookup?search=\\{@}op=vindex +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/php.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/php.desktop new file mode 100644 index 000000000..5289cd38d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/php.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Keys=php +Name=PHP Search +Name[af]=PHP Soektog +Name[ar]=بحث PHP +Name[az]=PHP Axtarışı +Name[be]=Пошук PHP +Name[bn]=পি-এইচ-পি অনুসন্ধান +Name[br]=Klask PHP +Name[bs]=PHP Tražilica +Name[ca]=Recerca PHP +Name[cs]=Vyhledávání PHP +Name[csb]=PHP Szëkba +Name[cy]=Chwilio PHP +Name[da]=PHP-søgning +Name[el]=Αναζήτηση PHP +Name[eo]=PHP-serĉo +Name[es]=Búsqueda PHP +Name[eu]=PHP bilaketa +Name[fa]=جستجوی PHP +Name[fi]=PHP-haku +Name[fr]=Recherche PHP +Name[fy]=PHP-sykaksje +Name[ga]=Cuardach PHP +Name[gl]=Procura PHP +Name[he]=חיפוש PHP +Name[hi]=पीएचपी खोज +Name[hr]=PHP pretraživanje +Name[is]=PHP leit +Name[it]=Ricerca PHP +Name[ja]=PHP 検索 +Name[ka]=PHP ძიება +Name[kk]=PHP іздеуі +Name[km]=ស្វែងរក PHP +Name[ko]=PHP 검색 +Name[lt]=PHP paieška +Name[lv]=PHP Meklēšana +Name[mk]=Пребарување за PHP +Name[mn]=PHP хайлт +Name[ms]=Carian PHP +Name[mt]=Tfittxija PHP +Name[nb]=PHP-søk +Name[nds]=PHP-Söök +Name[ne]=PHP खोजी +Name[nl]=PHP-zoekactie +Name[nn]=PHP-søk +Name[nso]=Nyako ya PHP +Name[pa]=PHP ਖੋਜ +Name[pl]=PHP (język skryptowy)- dokumentacja +Name[pt]=Pesquisa de PHP +Name[pt_BR]=Busca PHP +Name[ro]=Căutare PHP +Name[ru]=Поиск PHP +Name[rw]=Ishakisha PHP +Name[se]=PHP-ohcan +Name[sk]=Hľadanie PHP +Name[sl]=Iskanje po PHP +Name[sr]=PHP претраживање +Name[sr@Latn]=PHP pretraživanje +Name[ss]=Kusesha kwe PHP +Name[sv]=PHP search +Name[ta]=PHP தேடு +Name[te]=పి హెచ్ పి అన్వెషణ +Name[tg]=Ҷустуҷӯи PHP +Name[th]=ค้นหาเกี่ยวกับ PHP +Name[tr]=PHP Arayıcı +Name[tt]=PHP Ezläw +Name[uk]=Пошук PHP +Name[uz]=PHP qidirish +Name[uz@cyrillic]=PHP қидириш +Name[ven]=U setsha ha PHP +Name[vi]=Tìm kiếm PHP +Name[wa]=Cweraedje PHP +Name[xh]=Uphendlo lwe PHP +Name[zh_CN]=PHP 搜索 +Name[zh_TW]=PHP 搜尋 +Name[zu]=Usesho lwe-PHP +Query=http://www.php.net/search.php?show=\\{mode,"manual"}&pattern=\\{@} +Query[ne]=http://www.php.net/search.php?show=\\{mode,"manual"}pattern=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/python.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/python.desktop new file mode 100644 index 000000000..2825c073d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/python.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=py,python +Name=Python Reference Manual +Name[af]=Python Verwysing Handleiding +Name[ar]=كتيب Python المصدري +Name[az]=Python Əl Kitabcığı +Name[be]=Падручнік Python +Name[bn]=পাইথন রেফারেন্স ম্যানুয়াল +Name[bs]=Python referentni priručnik +Name[ca]=Manual de referència de Python +Name[cs]=Manuál jazyka Python +Name[csb]=Python - pòdrãcznik +Name[cy]=Llawlyfr Cyfeiriol Python +Name[da]=Python reference-manual +Name[de]=Python-Handbuch +Name[el]=Εγχειρίδιο αναφοράς Python +Name[eo]=Pitono-manlibro +Name[es]=Manual de referencia de Python +Name[eu]=Python-en erreferentzia eskuliburua +Name[fa]=راهنمای مرجع Python +Name[fi]=Pythonin referenssimanuaali +Name[fr]=Manuel de référence de Python +Name[ga]=Lámhleabhar Python +Name[gl]=Manual de Referéncia de Python +Name[he]=תיעוד של פייתון +Name[hi]=पायथन रेफरेंस मेनुअल +Name[hr]=Python referentni priručnik +Name[hu]=Python referencia-kézikönyv +Name[id]=Manual Referensi Python +Name[is]=Python Handbók +Name[it]=Manuale di riferimento di Python +Name[ja]=Python リファレンスマニュアル +Name[kk]=Python анықтамасы +Name[km]=សៀវភៅ​យោង Python +Name[ko]=Python 참조 설명서 +Name[lt]=Python vadovas-žinynas +Name[lv]=Python Rokasgrāmata +Name[mk]=Референтен прирачник за Python +Name[mn]=Python-Гарын авлага +Name[ms]=Manual Rujukan Python +Name[mt]=Manwal tal-Python +Name[nb]=Referansehåndbok for Python +Name[nds]=Python-Referenzhandbook +Name[ne]=पाइथन सन्दर्भ म्यानुअल +Name[nn]=Python-referansehandbok +Name[nso]=Manual wa Tebeledisiso ya Python +Name[pa]=Python ਹਵਾਲਾ ਦਸਤਾਵੇਜ਼ +Name[pl]=Python (język programowania)- podręcznik +Name[pt]=Manual de Referência do Python +Name[pt_BR]=Manual de Referência do Python +Name[ro]=Manualul de referință Python +Name[ru]=Справочник по Python +Name[rw]=Igitabo cy'Imikorere ya Python +Name[se]=Python-referánsagiehtagirji +Name[sl]=Referenčni priročnik za python +Name[sr]=Референтно упутство за Python +Name[sr@Latn]=Referentno uputstvo za Python +Name[sv]=Python referensmanual +Name[ta]=பைதான் பார்வை கையேடு +Name[tg]=Маълумотнома аз Python +Name[th]=คู่มืออ้างอิงเกี่ยวกับ Python +Name[tr]=Python Başvuru Elkitabı +Name[tt]=Python Qullanması +Name[uk]=Довідник по Python +Name[uz]=Python uchun koʻllanma +Name[uz@cyrillic]=Python учун кўлланма +Name[ven]=Tshifanyisi tsha Manyuala tsha Python +Name[vi]=Sách Tham khảo Python +Name[wa]=Manuel di referince di Python +Name[xh]=Ubhekiso lwe Python yesandla +Name[zh_CN]=Python 参考手册 +Name[zh_TW]=Python 參考手冊 +Name[zu]=Incwadi yokuqondiwe ye-Python +Query=http://www.google.com/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +Query[en_GB]=http://www.google.co.uk/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +Query[fr]=http://www.google.fr/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +Query[fy]=http://www.google.nl/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +Query[nb]=http://www.google.no/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +Query[nl]=http://www.google.nl/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +Query[pt]=http://www.google.pt/search?sourceid=python-search&q=\{@}&submit=Search&q=site%3Apython.org +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/qt.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/qt.desktop new file mode 100644 index 000000000..2ee904fd9 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/qt.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=qt +Name=Latest Qt Online Documentation +Name[af]=Nuutste Qt Aanlyn Dokumentasie +Name[ar]=آخر وثائق مساعدة Qt +Name[az]=Onlayn Qt Sənədləri +Name[be]=Найноўшая дакументацыя па Qt +Name[bn]=কিউ-টি অনলাইন ডকুমেন্টেশন +Name[bs]=Najnovija Qt online dokumentacija +Name[ca]=L'última documentació en línia de Qt +Name[cs]=Nejnovější online dokumentace Qt +Name[csb]=Slédnô dokùmentacëjô Qt +Name[cy]=Dogfennaeth Diweddar QT Online +Name[da]=Nyeste Qt online-dokumentation +Name[de]=Aktuelle Qt-Online-Dokumentation +Name[el]=Τελευταία τεκμηρίωση του Qt στο διαδίκτυο +Name[eo]=La plej aktuala reta QT Dokumentaro +Name[es]=Ultima documentación Qt en línea +Name[et]=Qt uusim dokumentatsioon võrgus +Name[eu]=Azken Qt lineako dokumentazioa +Name[fa]=آخرین مستندات برخط Qt +Name[fi]=Uusin Qt-dokumentaatio +Name[fr]=La dernière documentation en ligne de Qt +Name[fy]=Nijste Qt Online-dokumintaasje +Name[ga]=Doiciméadú Ar Líne Is Déanaí Qt4 +Name[gl]=Última Documentación en Liña de Qt +Name[he]=תיעוד מקוון מעודכן של Qt +Name[hi]=नवीनतम क्यूटी आनलाइन दस्तावेज़ +Name[hr]=Najnovija Qt dokumentacija na Internetu +Name[hu]=A legfrissebb Qt online dokumentáció +Name[id]=Dokumentasi Qt Online Terbaru +Name[is]=Nýjustu Qt handbækurnar +Name[it]=Ultima documentazione online delle Qt +Name[ja]=Qt 最新オンラインドキュメント +Name[kk]=Qt-ның ең жаңа желідегі құжаттамасы +Name[km]=ឯកសារ​ថ្មី​បំផុត​លើ​បណ្ដាញ​របស់ Qt +Name[ko]=최신 Qt 온라인 문서 +Name[lt]=Naujausia Qt dokumentacija tinkle +Name[lv]=Jaunākā Qt Dokumentācija +Name[mk]=Последната Qt-документација на мрежа +Name[mn]=Хамгийн сүүлийн Qt онлайн баримтжуулалт +Name[ms]=Dokumentasi Dalam Talian Kuantiti Terakhir +Name[mt]=Dokumentazzjoni Qt Online +Name[nb]=Nyeste QT-dokumentasjon på nett +Name[nds]=Niegst Online-Dokmentatschoon vun Qt +Name[ne]=नवीनतम Qt अनलाइन मिसिलीकरण +Name[nl]=Nieuwste Qt Online-documentatie +Name[nn]=Nyaste QT-dokumentasjon på nett +Name[pa]=ਤਾਜ਼ਾ Qt ਆਨਲਾਈਨ ਦਸਤਾਵੇਜ਼ +Name[pl]=Najnowsza dokumentacja Qt +Name[pt]=Última Documentação 'Online' do Qt +Name[pt_BR]=Documentação on-line da última versão da Qt +Name[ro]=Documentația Qt on-line +Name[ru]=Наиболее свежая онлайн-документация Qt +Name[rw]=Ikoreshanyandiko Interineti rya Vuba Qt +Name[se]=Ođđamus Qt-dokumentašuvdna fierpmádagas +Name[sk]=Posledná online dokumentácia Qt +Name[sl]=Najnovejša spletna dokumentacija za Qt +Name[sr]=Најновија документација Qt-а на вези +Name[sr@Latn]=Najnovija dokumentacija Qt-a na vezi +Name[sv]=Senaste Qt-direktdokumentation +Name[ta]=புதிய க்யூ டீ இணை ஆவணப்பதிவு +Name[tg]=Ҷадидтарин мустанадҳои рӯи хати Qt +Name[th]=เอกสารออนไลน์ล่าสุดเกี่ยวกับ Qt +Name[tr]=Güncel Çevrimiçi Qt Dökümantasyonu +Name[tt]=Qt'nıñ Online Qullanması +Name[uk]=Остання документація Qt онлайн +Name[uz]=Qt uchun koʻllanma +Name[uz@cyrillic]=Qt учун кўлланма +Name[vi]=Tài liệu Trực tuyến Mới nhất của Qt +Name[wa]=Documintåcion di Qt so les fyis +Name[zh_CN]=最新的 Qt 在线文档 +Name[zh_TW]=最新的 Qt 線上文件 +Query=http://doc.trolltech.com/latest/\\{@}.html +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/qt3.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/qt3.desktop new file mode 100644 index 000000000..bc59a41ac --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/qt3.desktop @@ -0,0 +1,71 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=qt3 +Name=Qt3 Online Documentation +Name[af]=Qt3 Aanlyn Dokumentasie +Name[ar]=توثيق Qt3 على الخط +Name[be]=Дакументацыя Qt3 +Name[bn]=কিউ-টি-৩ অনলাইন ডকুমেন্টেশন +Name[br]=Teuliadur Qt3 enlinenn +Name[bs]=Qt3 online dokumentacija +Name[ca]=Documentació en línia de Qt3 +Name[cs]=Online dokumentace Qt3 +Name[csb]=Dokùmentacëjô online Qt3 +Name[da]=Qt3 online-dokumentation +Name[de]=Online-Dokumentation zu Qt3 +Name[el]=Τεκμηρίωση του Qt3 στο διαδίκτυο +Name[eo]=Reta QT Dokumentaro +Name[es]=Documentación Qt3 en línea +Name[et]=Qt3 dokumentatsioon võrgus +Name[eu]=Qt3 lineako dokumentazioa +Name[fa]=مستندات برخط Qt3 +Name[fi]=QT3:n verkkodokumentaatio +Name[fr]=Documentation en ligne de Qt +Name[fy]=Qt3 online dokumintaasje +Name[ga]=Doiciméadú Ar Líne Qt3 +Name[gl]=Documentación en Liña de Qt3 +Name[he]=תיעוד מקוון מעודכן של Qt3 +Name[hr]=Qt dokumentacija na Internetu +Name[hu]=Qt3 online dokumentáció +Name[id]=Dokumentasi Online Qt3 +Name[is]=Qt handbækur á Netinu +Name[it]=Documentazione online delle Qt3 +Name[ja]=Qt3 オンラインドキュメント +Name[ka]=Qt3 ინტერნეტ დოკუმენტაცია +Name[kk]=Qt3 желідегі құжаттамасы +Name[km]=ឯកសារ​ថ្មី​បំផុត​លើ​បណ្ដាញ​របស់ Qt3 +Name[ko]=Qt3 온라인 문서 +Name[lt]=Qt3 dokumentacija internete +Name[mk]=Документација за Qt3 на мрежа +Name[ms]=Dokumentasi Dalam Talian Qt3 +Name[nb]=QT3-dokumentasjon på nett +Name[nds]=Qt3-Online-Dokmentatschoon +Name[ne]=Qt3 अनलाइन मिसिलीकरण +Name[nl]=Qt3 online documentatie +Name[nn]=QT3-dokumentasjon på nett +Name[pa]=Qt3 ਆਨਲਾਇਨ ਦਸਤਾਵੇਜ਼ +Name[pl]=Dokumentacja Qt3 w sieci +Name[pt]=Documentação 'Online' do Qt3 +Name[pt_BR]=Documentação on-line da Qt3 +Name[ro]=Documentația Qt online +Name[ru]=Документация Qt3 +Name[se]=Qt3-dokumentašuvdna fierpmádagas +Name[sk]=Qt3 online dokumentácia +Name[sl]=Spletna dokumentacija za Qt3 +Name[sr]=Документација на вези за Qt3 +Name[sr@Latn]=Dokumentacija na vezi za Qt3 +Name[sv]=Qt3-direktdokumentation +Name[tg]=Мустанадҳои шабакаи локалии Qt3 +Name[th]=เอกสารออนไลน์เกี่ยวกับ Qt3 +Name[tr]=Qt3 Çevrimiçi Dökümantasyonu +Name[uk]=Документація Qt3 +Name[uz]=Qt3 uchun koʻllanma +Name[uz@cyrillic]=Qt3 учун кўлланма +Name[vi]=Tài liệu Trực tuyến của Qt3 +Name[wa]=Documintåcion di Qt3 so les fyis +Name[zh_CN]=Qt3 在线文档 +Name[zh_TW]=Qt3 線上文件 +Query=http://doc.trolltech.com/3.3/\\{@}.html +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/rae.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/rae.desktop new file mode 100644 index 000000000..b87befb0a --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/rae.desktop @@ -0,0 +1,77 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=rae +Name=Dictionary of the Spanish Academy (RAE) +Name[af]=Woordeboek van die Spaanse Akademie (RAE) +Name[ar]=قاموس الأكاديمية الأسبانية (RAE) +Name[az]=İspan Akademiyası Lüğəti (RAE) +Name[be]=Слоўнік Гішпанскай акадэміі (RAE) +Name[bn]=স্প্যানিশ অ্যাকাডেমীর অভিধান (RAE) +Name[br]=Geriaoueg akadamiezh spaniolek (RAE) +Name[bs]=Rječnik Španske akademije (RAE) +Name[ca]=Diccionari de l'Acadèmia Espanyola (RAE) +Name[cs]=Slovník Špenělské akademie +Name[csb]=Słowôrz Szpańsczi Akademijë (RAE) +Name[cy]=Geiriadur yr Academi Sbaeneg (RAE) +Name[da]=Ordbog fra det spanske akademi (RAE) +Name[de]=Lexikon der spanischen Akademie (RAE) +Name[el]=Λεξικό της ισπανικής ακαδημίας (RAE) +Name[eo]=Vortaro de la Reĝa Akademio Hispana +Name[es]=Diccionario de la Real Academia de la Lengua Española (RAE) +Name[et]=Hispaania akadeemia (RAE) sõnaraamat +Name[eu]=Gazteleraren Akademiaren hiztegia (RAE) +Name[fa]=واژه‌نامۀ فرهنگستان اسپانیایی (RAE) +Name[fi]=Espanjalaisen akatemian sanakirja (RAE) +Name[fr]=Dictionaire de la Spanish Academy (RAE) +Name[fy]=Wurdboek fan de Spaanske akademy (RAE) +Name[gl]=Dicionario da Academia Española (RAE) +Name[he]=מילון של האקדמיה הספרדית (RAE) +Name[hi]=स्पेनी अकादमी का शब्दकोश(RAE) +Name[hr]=Rječnik španjolske akademije (RAE) +Name[hu]=A Spanyol Akadémia címjegyzéke (RAE) +Name[is]=Orðabók spönsku akademíunnar (RAE) +Name[it]=Dizionario della Accademia Spagnola (RAE) +Name[ja]=スペイン大学辞書 +Name[kk]=Испан Академиясының сөздігі (RAE) +Name[km]=វចនានុក្រម Spanish Academy (RAE) +Name[ko]=스페인 아카데미 사전 (RAE) +Name[lt]=Ispanijos akademijos (RAE) žodynas +Name[lv]=Spāņu Akadēmijas (RAE) vārdnīca +Name[mk]=Речник на Шпанската академија (RAE) +Name[mn]=Испани акдемийн толь бичиг (RAE) +Name[ms]=Kamus Akademi Bahasa Sepanyol (RAE) +Name[mt]=Dizzjunarju tal-Akkademja Spanjola (RAE) +Name[nb]=Ordboka til det spanske akademiet (RAE) +Name[nds]=Nakieksel vun de Spaansche Akademie (RAE) +Name[ne]=स्पेनी प्रतिष्ठानको शब्दकोश (RAE) +Name[nl]=Woordenboek van de Spaanse academie (RAE) +Name[nn]=Ordboka til det spanske akademiet (RAE) +Name[pa]=ਸਪੇਨੀ ਐਕਡਮੀ ਦਾ ਸ਼ਬਦ-ਕੋਸ਼ (RAE) +Name[pl]=Słownik Akademii Hiszpańskiej (RAE) +Name[pt]=Dicionário da Academia Espanhola (RAE) +Name[pt_BR]=Dicionário da Academia Espanhola (RAE) +Name[ro]=Dicționarul Academiei Spaniole (RAE) +Name[ru]=Словарь Испанской Академии (RAE) +Name[rw]=Inkoranyamagambo y'Ishyirahamwe-intiti rya Esipanye (RAE) +Name[se]=Spanialaš akademiija sátnegirji (RAE) +Name[sk]=Slovník Španielskej akadémie (RAE) +Name[sl]=Slovar Španske akademije (RAE) +Name[sr]=Речник шпанске академије (RAE) +Name[sr@Latn]=Rečnik španske akademije (RAE) +Name[sv]=Spanska akademins ordbok (RAE) +Name[ta]= ஸ்பெனிஷ் அகேடமியின் அகராதி(RAE) +Name[tg]=Луғати академии Испаниёӣ (RAE) +Name[th]=พจนานุกรมของ Spanish Academy (RAE) +Name[tr]=İspanyol Akademisinin Sözlüğü (RAE) +Name[tt]=İspan Akademineñ Süzlege (RAE) +Name[uk]=Словник Іспанської академії (RAE) +Name[uz]=Ispan akademiyasining (RAE) lugʻati +Name[uz@cyrillic]=Испан академиясининг (RAE) луғати +Name[vi]=Từ điển của Viện hàn lâm Tây Ban Nha (RAE) +Name[wa]=Diccionaire del Royåle Academeye Espagnole (RAE) +Name[zh_CN]=西班牙学院的字典(RAE) +Name[zh_TW]=西班牙金像獎字典 (RAE) +Query=http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=\\{@}&FORMATO=ampliado +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/rfc.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/rfc.desktop new file mode 100644 index 000000000..a11b090b0 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/rfc.desktop @@ -0,0 +1,57 @@ +[Desktop Entry] +Keys=rfc,rfcs +Name=IETF Requests for Comments +Name[af]=IETF Versoeke vir Kommentaar +Name[ar]=طلبات IETF للتعليقات +Name[az]=IETF Şərh İstəyi +Name[be]=Запыты каментараў IETF +Name[bs]=IETF Requests for Comments (RFC) +Name[ca]=Requeriments per a comentaris de la IETF +Name[csb]=IETF - dokùmentë RFC (sztandardë ë protokòłë) +Name[cy]=Ceisiadau am Sylwadau IETF +Name[el]=IETF ερωτήσεις για σχόλια +Name[eo]=IETF-Komentodokumento (RFC) +Name[fa]=درخواست IETF برای توضیحات +Name[fi]=IETF-kommenttipyynnöt (RFC) +Name[fr]=RFC IETF +Name[gl]=IETF Peticións de Comentarios +Name[hi]=IETF निवेदन, टिप्पणी के लिए +Name[hr]=IETF zahtjevi za komentarima +Name[hu]=IETF RFC-k (Request for Comments) +Name[is]=IETF Requests for Comments (RFC) +Name[it]=RFC di IETF +Name[kk]=IETF пайымдаманы сұрау (RFC) +Name[km]=សំណើ​សុំ​សេចក្ដី​អធិប្បាយ​តាម​រយៈ IETF +Name[ko]=IETF RFC +Name[lv]=IETF Komentāru Pieprasījums +Name[mk]=IETF Барања за коментари (rfc) +Name[ms]=Permintaan Komen IETF +Name[nds]=RFCs (IETF-"Requests for Comments") +Name[ne]=टिप्पणीका लागि IETF अनुरोध +Name[nso]=Dikgopelo tsa IETF tsa Dipolelwana +Name[pa]=ਟਿੱਪਣੀ ਲਈ IETF ਬੇਨਤੀ +Name[pl]=IETF - dokumenty RFC (standardy i protokoły) +Name[pt]=Pedidos de Comentários do IETF +Name[pt_BR]=RFC (Requests for Comments) +Name[ro]=RFC-uri IETF +Name[ru]=Запросы для комментариев IETF (RFC) +Name[rw]=Ibisabwa IETF bijyanye n'IIbisobanuro +Name[sl]=Zahteve IETF za komentarje +Name[sr]=IETF-ови захтеви за коментаре +Name[sr@Latn]=IETF-ovi zahtevi za komentare +Name[ta]=IETF குறிப்புகளுக்கான வேண்டுதல்கள் +Name[tg]=Барои назри IETF-и дархост +Name[th]=การร้องขอ IETF สำหรับคำอธิบาย +Name[tr]=IETF Yorum istemleri +Name[tt]=IETF-Açıqlama Soraw +Name[uk]=Запит коментарів (RFC) IETF +Name[ven]=IETF i humbela Mahumbulwa +Name[vi]=Yêu cầu Bình luận IETF +Name[wa]=Ricweraedjes po des rawetes IETF +Name[xh]=Izicelo Zogqabazo ze IETF +Name[zh_CN]=IETF 评论请求 +Name[zh_TW]=IETF RFC 文件 +Name[zu]=Izicelo ze-IETF zemibono +Query=http://www.ietf.org/rfc/rfc\\{@}.txt +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/rpmfind.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/rpmfind.desktop new file mode 100644 index 000000000..a6e407083 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/rpmfind.desktop @@ -0,0 +1,44 @@ +[Desktop Entry] +Type=Service +Name=RPM-Find +Name[af]=RPM-Vind +Name[be]=Пошук RPM +Name[csb]=Rpmfind - szëkôrz paczétów RPM +Name[de]=RPM-Suche +Name[el]=RPM-Αναζήτηση +Name[eo]=RPM-trovilo +Name[fa]=یافتن RPM +Name[fi]=RPM-haku +Name[fo]=RPM-finn +Name[hi]=आरपीएम-फाइंड +Name[hr]=RPM traženje +Name[is]=RPM-leit +Name[ka]=RPM-პოვნა +Name[kk]=RPM-ды табу +Name[km]=រក RPM +Name[ko]=RPM 찾기 +Name[lv]=RPM-Meklēšana +Name[mk]=RPM-барање +Name[mn]=RPM-хайлт +Name[ne]=RPM-फेला पार्नुहोस् +Name[nso]=RPM-Hwetsa +Name[pl]=Rpmfind - wyszukiwarka pakietów RPM +Name[ro]=Căutare pachete RPM +Name[ru]=Поиск RPM +Name[rw]=Kubona-RPM +Name[ss]=Tfola i-RPM +Name[ta]=RPM-தேடு +Name[tg]=Ҷустуҷӯи RPM +Name[th]=ค้นหา RPM +Name[tt]=RPM-Ezläw +Name[uz]=RPM qidirish +Name[uz@cyrillic]=RPM қидириш +Name[ven]=RPM-Toda +Name[vi]=Tìm RPM +Name[xh]=RPM-Fumana +Name[zu]=RPM-Thola +ServiceTypes=SearchProvider +Keys=rf,rpmfind +Query=http://www.rpmfind.net/linux/rpm2html/search.php?query=\{@} +Query[en_GB]=http://fr.rpmfind.net/linux/rpm2html/search.php?query=\{@} +Query[ko]=http://www.rpmfind.net/linux/rpm2html/search.php?query=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/ruby_application_archive.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/ruby_application_archive.desktop new file mode 100644 index 000000000..6f165eb65 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/ruby_application_archive.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Type=Service +Name=Ruby Application Archive +Name[af]=Ruby Aansoek Argief +Name[ar]=أرشيف تطبيقات Ruby +Name[az]=Ruby Proqram Arxivçisi +Name[be]=Архіў праграмаў Ruby +Name[bn]=রুবি অ্যাপলিকেশন আর্কাইভ +Name[br]=Diell arloadoù Ruby +Name[bs]=Ruby arhiva aplikacija +Name[ca]=Arxiu d'aplicacions Ruby +Name[cs]=Archív aplikací Ruby +Name[csb]=Ruby - archiwa programów +Name[cy]=Archif Cymhwysiadau Ruby +Name[da]=Ruby programarkiv +Name[el]=Αρχειοθήκη εφαρμογών Ruby +Name[eo]=Aplikaĵoaĥivo por "Ruby" +Name[es]=Archivo de aplicación Ruby +Name[eu]=Ruby aplikazio fitxategia +Name[fa]=بایگانی کاربرد Ruby +Name[fi]=Ruby-sovelluspaketti +Name[fr]=Archive d'application Ruby +Name[fy]=Ruby programma-argyf +Name[ga]=Cartlann Feidhmchlár Ruby +Name[gl]=Arquivo de Aplicacións Ruby +Name[he]=מאגר יישומי Ruby +Name[hi]=रूबी अनुप्रयोग आर्काइव +Name[hr]=Arhiva Ruby aplikacija +Name[hu]=Ruby alkalmazásarchívum +Name[id]=Arsip Aplikasi Ruby +Name[it]=Archivio di applicazioni Ruby +Name[ja]=Ruby アプリケーションアーカイブ +Name[kk]=Ruby қолданбалар архиві +Name[km]=ប័ណ្ណសារ​កម្មវិធី Ruby +Name[ko]=Ruby 프로그램 저장소 +Name[lt]=Ruby taikomųjų programų archyvas +Name[lv]=Ruby Aplikāciju Arhīvs +Name[mk]=Архива со Ruby-апликации +Name[ms]=Arkib Aplikasi Ruby +Name[mt]=Arkivju ta' programmi Ruby +Name[nb]=Ruby programarkiv +Name[nds]=Ruby-Programmarchiv +Name[ne]=रुबी अनुप्रयोग सङ्ग्रह +Name[nl]=Ruby programma-archief +Name[nn]=Ruby-programarkiv +Name[nso]=Polokelo ya Tshomiso ya Ruby +Name[pa]=Ruby ਕਾਰਜ ਆਰਚੀਵ +Name[pl]=Ruby (język programowania) - programy +Name[pt]=Arquivo de Aplicações Ruby +Name[pt_BR]=Arquivo de Aplicativos Ruby +Name[ro]=Arhiva de aplicații Ruby +Name[ru]=Архив приложений Ruby +Name[rw]=Ubushyinguro bwa Porogaramu Ruby +Name[se]=Ruby-prográmmavuorká +Name[sl]=Arhiv programov Ruby +Name[sr]=Архива Ruby програма +Name[sr@Latn]=Arhiva Ruby programa +Name[ta]=ரூபி பயன்பாட்டு களஞ்சியம் +Name[tg]=Архиви барномаи Ruby +Name[th]=คลังแอพพลิเคชันภาษารูบี้ +Name[tr]=Ruby Uygulama Arşivi +Name[tt]=Ruby Yazılımnar Turlaması +Name[uz]=Ruby dastur arxivi +Name[uz@cyrillic]=Ruby дастур архиви +Name[ven]=Apulifikhesheni ya Vhulungazwakale ya Ruby +Name[vi]=Thư mục lưu trữ Ứng dụng Ruby +Name[wa]=Årtchive di programes Ruby +Name[xh]=Indawo ye Ruby yokugcina Isicelo +Name[zh_TW]=Ruby 應用程式檔案庫 +Name[zu]=Umqulu Womyaleli we-Ruby +ServiceTypes=SearchProvider +Keys=raa +Query=http://raa.ruby-lang.org/search.rhtml?search=\\{@} +Query[fy]=http://www.ruby-lang.org/en/raa-list.rhtml?name=\\{@} +Query[ja]=http://raa.ruby-lang.org/search.rhtml?name=\\{@} +Query[ko]=http://www.ruby-lang.org/en/raa-list.rhtml?name=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/seek.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/seek.desktop new file mode 100644 index 000000000..55351db8f --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/seek.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Service +Name=GO.com +Name[de]=go.com +Name[eo]=Go.com +Name[hi]=गो.कॉम +Name[mn]=go.com +Name[nso]=EYA.com +ServiceTypes=SearchProvider +Keys=seek +Query=http://www.go.com/Titles?col=WW&qt=\\{@}&svx=home_searchbox&sv=IS&lk=noframeso diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/sourceforge.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/sourceforge.desktop new file mode 100644 index 000000000..3a04f92a2 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/sourceforge.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Keys=sf,sourceforge +Name=SourceForge +Name[af]=Sourceforge +Name[bn]=সোর্স-ফর্জ +Name[csb]=SourceForge - ùdbë +Name[eo]=Programforĝejo +Name[fo]=Sourceforge +Name[hi]=सोर्स-फोर्ज +Name[ne]=सोर्स फर्ज +Name[nso]=Bofora bja Mothopo +Name[pl]=SourceForge - projekty +Name[rw]=GucuraInkomoko +Name[ta]=மூலத்திருட்டு +Name[te]=సొర్స్ ఫొర్జ్ +Name[vi]=Tra SourceForge +Query=http://sourceforge.net/search/?type_of_search=\\{type,"soft"}&exact=\{exact,"0"}&words=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/technorati.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/technorati.desktop new file mode 100644 index 000000000..6a82f51a1 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/technorati.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Service +Name=Technorati +Name[bn]=টেক্‌নোক্রেটি +Name[csb]=Technorati - blodżi +Name[lt]=Technorati paieška +Name[ne]=टेक्नोरती +Name[vi]=Tra từ Kĩ thuật bằng Technorati +ServiceTypes=SearchProvider +Keys=tr,technorati +Query=http://technorati.com/cosmos/search.html?sourceid=kde-search&url=\\{@} +Query[ja]=http://technorati.com/cosmos/search.html?sourceid=kde-search&url=\\\\{@} +Query[ne]=http://technorati.com/cosmos/search.html?sourceid=kde-searchurl=\\{@} +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/technoratitags.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/technoratitags.desktop new file mode 100644 index 000000000..ce7dd5056 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/technoratitags.desktop @@ -0,0 +1,55 @@ +[Desktop Entry] +Type=Service +Name=Technorati Tags +Name[be]=Тэгі Technorati +Name[bn]=টেক্‌নোক্রেটি ট্যাগ +Name[br]=Liketennoù Technorati +Name[bs]=Technorati tagove +Name[ca]=Etiquetes Technorati +Name[cs]=Technorati značky +Name[csb]=Merczi Technorati +Name[da]=Technorati mærker +Name[de]=Technorati Themen +Name[el]=Ετικέτες Technorati +Name[eo]=Technorati-aj Etikedoj +Name[es]=Etiquetas de Technorati +Name[et]=Technorati sildid +Name[eu]=Technorati etiketak +Name[fa]=برچسبهای Technorati +Name[fi]=Technorati-tunnisteet +Name[fr]=Balises Technorati +Name[fy]=Technorati-markearring +Name[ga]=Clibeanna Technorati +Name[gl]=Etiquetas Technorati +Name[hr]=Technorati oznake +Name[is]=Technorati tög +Name[it]=Tag di technorati +Name[ja]=Technorati Tag +Name[ka]=Technorati-ს ჭდეები +Name[ko]=Technorati 태그 +Name[nb]=Technorati-tagger +Name[nds]=Technorati-Themas +Name[ne]=टेक्नोरती ट्याग +Name[nl]=Technorati-tags +Name[nn]=Technorati-taggar +Name[pa]=Technorati ਟੈਗ +Name[pl]=Znaczniki Technorati +Name[pt]=Marcas do Technorati +Name[pt_BR]=Tags do Technorati +Name[ro]=Etichete Technorati +Name[ru]=Статьи Technorati +Name[rw]=Amatagi ya Technorati +Name[se]=Technorati gilkorat +Name[sr]=Technorati ознаке +Name[sr@Latn]=Technorati oznake +Name[sv]=Technorati-taggar +Name[tg]=Тегҳои Technorati +Name[uk]=Статті Technorati +Name[vi]=Nhãn Technorati +Name[wa]=Tags Technorati +ServiceTypes=SearchProvider +Keys=tags,tag,technoratitags +Query=http://technorati.com/tag/\\{@}?sourceid=kde-search +Query[ja]=http://technorati.com/tag/\\\\{@}?sourceid=kde-search +Query[tg]=http://technorati.com/tag/\\{@}?sourceid=kde-ҷустуҷӯ +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/thesaurus.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/thesaurus.desktop new file mode 100644 index 000000000..f1c9576c0 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/thesaurus.desktop @@ -0,0 +1,63 @@ +[Desktop Entry] +Type=Service +Name=Merriam-Webster Thesaurus +Name[ar]=قاموس مصطلحات Merriam-Webster +Name[be]=Тэзаўрус Merriam-Webster +Name[bn]=মেরিয়াম-ওয়েবস্টার থেসরাস +Name[br]=Tezorus Merriam-Webster +Name[ca]=Tesaurus Merriam-Webster +Name[cs]=Slovník synonym Merriam-Webster +Name[csb]=Merriam-Webster - słowôrz blëskòznacznrch słowów (thesaurus) +Name[cy]=Thesawrws Merriam-Webster +Name[da]=Merriam-Webster-begrebsordbog +Name[el]=Θησαυρός λέξεων Merriam-Webster +Name[eo]=Merriam - Webster-tezaŭro +Name[es]=Sinónimos Merriam-Webster +Name[et]=Merriam-Websteri tesaurus +Name[eu]=Merriam-Webster thesaurus-a +Name[fa]=فرهنگ جامع Merriam-Webster +Name[fi]=Merriam-Webster-synonyymit +Name[fr]=Thésaurus Merriam-Webster +Name[ga]=Teasáras Merriam-Webster +Name[he]=מילים נרדפות Merriam-Webster +Name[hi]=मरियम-वेबस्टर शब्दकोश +Name[hr]=Merriam-Webster rječnik sinonima +Name[hu]=Merriam-Webster szinonimaszótár +Name[is]=Merriam-Webster samheitaorðabók +Name[it]=Dizionario dei sinonimi Merriam-Webster +Name[kk]=Merriam-Webster тезаурусы +Name[km]=កម្រង​វេវចន​សព្ទ Merriam-Webster +Name[ko]=Merriam-Webster 시소러스 +Name[lv]=Merriam-Webster Enciklopēdija +Name[mk]=Merriam-Webster Енциклопедија +Name[mt]=Teżawru Merriam-Webster +Name[nb]=Merrian-Webster Thesaurus +Name[nds]=Merriam-Webster-Thesaurus +Name[ne]=मेरियम-वेबस्टर पर्यायकोष +Name[pa]=Merriam-ਵੈੱਬ ਥੀਸਾਰਸ ਕੋਸ਼ +Name[pl]=Merriam-Webster - słownik wyrazów bliskoznacznych +Name[pt]=Merriam-Gramática do Webster +Name[ro]=Dicționarul Merriam-Webster +Name[ru]=Тезаурус Merriam-Webster +Name[rw]=Impuzansobanuro Merriam-Webster +Name[sk]=Merriam-Webster Synonymá +Name[sl]=Merriam-Websterjev tezaver +Name[sr]=Речник синонима Меријам-Вебстер +Name[sr@Latn]=Rečnik sinonima Merijam-Vebster +Name[sv]=Merriam-Websters synonymlexikon +Name[ta]=மெர்ரியம்-வெப்ஸ்டர் சொற்களஞ்சியம் +Name[tg]=Тезауруси Merriam-Webster +Name[th]=พจนานุกรมคำพ้องเมอเรียม-เว็บสเตอร์ +Name[tt]=Merriam-Webster Süznämäse +Name[uk]=Словник синонімів Merriam-Webster +Name[uz]=Merriam-Vebster lugʻati +Name[uz@cyrillic]=Мерриам-Вебстер луғати +Name[vi]=Từ điển đồng nghĩa Merriam-Webster +Name[wa]=Diccionaire inglès Merriam-Webster +Name[zh_CN]=韦氏辞典 +Name[zh_TW]=韋氏辭典 +Name[zu]=Incawdi yamagama afanayo ye-Merriam-Webster +ServiceTypes=SearchProvider +Keys=ths,thesaurus +Query=http://www.m-w.com/cgi-bin/thesaurus?book=Thesaurus&va=\\{@} +Query[ne]=http://www.m-w.com/cgi-bin/thesaurus?book=Thesaurusva=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/tvtome.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/tvtome.desktop new file mode 100644 index 000000000..a24f74287 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/tvtome.desktop @@ -0,0 +1,24 @@ +[Desktop Entry] +Charset=utf8 +Keys=tvtome +Name=TV Tome +Name[be]=Хатняе ТБ +Name[bn]=টিভি টোম +Name[da]=TV-Tome +Name[eu]=TV toma +Name[nb]=Stor TV +Name[ne]=टीभी टोम +Name[nn]=Stor TV +Name[rw]=Igice TV +Name[sv]=TV-tome +Name[te]=టివి టొమ్ +Name[tg]=Томи левизиони Хона +Name[th]=ทีวีทอร์ม +Name[tr]=TV Kanalları +Name[vi]=Tra Quyển TV +ServiceTypes=SearchProvider +Query=http://www.tv.com/search.php?type=11&stype=all&qs=\\{@}&x=0&y=0 +Query[ja]=http://www.tv.com/search.php?type=11&stype=all&qs=\\\\{@}&x=0&y=0 +Query[ne]=http://www.tv.com/search.php?type=11stype=all&qs=\\{@}&x=0&y=0 +Query[tg]=http://www.tv.com/search.php?type=11&stype=ҳама&qs=\\{@}&x=0&y=0 +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/uspto.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/uspto.desktop new file mode 100644 index 000000000..6bed5bc9b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/uspto.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=uspto +Name=U.S. Patent Database +Name[af]=Amerikaanse Patente Databasis +Name[ar]=قاعدة البيانات U.S. Patent Database +Name[be]=База звестак аб патэнтах ЗША +Name[bn]=মার্কিন পেটেন্ট ডেটাবেস +Name[bs]=SAD baza patenata +Name[ca]=Base de dades de patents U.S. +Name[cs]=Patentová databáze USA +Name[csb]=Baza patentów USA +Name[da]=U.S. Patent-database +Name[de]=U.S.-Patentdatenbank +Name[eo]=U.S. Rajtaj datumbazoj +Name[es]=Base de datos de patentes de EEUU +Name[et]=USA patentide andmebaas +Name[eu]=EEBB patente datu-basea +Name[fa]=دادگان امتیاز امریکایی +Name[fi]=Yhdysvaltojen patenttitietokanta +Name[fr]=Base de données des brevets aux U.S.A +Name[fy]=U.S. Patent-database +Name[gl]=Base de Datos de Patentes dos E.E.U.U +Name[he]=מסד הפטנטים של ארה"ב +Name[hi]=यूएस पेटेन्ट डाटाबेस +Name[hr]=Američka patentna baza podataka +Name[hu]=Amerikai szabadalmi adatbázis +Name[id]=Basisdata Paten Amerika Serikat +Name[is]=Gagnagrunnur einkaleyfisstofu Bandaríkjana +Name[it]=Database brevetti U.S.A. +Name[ja]=米国特許データベース +Name[ka]=აშშ პატენტების მონაცემთა ბაზა +Name[kk]=АҚШ патенттер қоры +Name[km]=មូលដ្ឋាន​ទិន្នន័យ​ប៉ាតង់​សហរដ្ឋ​អាមេរិក +Name[ko]=미국 특허 데이터베이스 +Name[lt]=JAV patentų duomenų bazė +Name[lv]=ASV patentu datubāze +Name[mk]=База со патенти во САД +Name[ms]=Pangkalan Data Paten A.S. +Name[nb]=US patentdatabase +Name[nds]=Datenbank mit de Patenten vun de USA +Name[ne]=यूएस प्याटेन्ट डेटाबेस +Name[nl]=U.S. Patent-database +Name[nn]=US patentdatabase +Name[pa]=U.S. Patent ਡਾਟਾਬੇਸ +Name[pl]=Baza patentów USA +Name[pt]=Base de Dados de Patentes dos EUA +Name[pt_BR]=Base de dados de patentes dos EUA +Name[ro]=Baza de date de patente S.U.A. +Name[ru]=База патентов США +Name[rw]=Ububikoshingiro Ipatanti bwa Leta Zunze Ubumwa z'Amerika +Name[se]=Amerihká patenta diehtovuođđu +Name[sk]=U.S. patentová databáza +Name[sl]=Zbirka patentov U.S. Patent Database +Name[sr]=База патената САД +Name[sr@Latn]=Baza patenata SAD +Name[sv]=Förenta staternas patentdatabas +Name[ta]=U.S.காப்புரிமை தரவுதளம் +Name[te]=యూఎస్ పెటెంట్ డాటాబేస్ +Name[tg]=Патенти базаи маълумотҳои Иолоти Муттаҳида +Name[th]=ฐานข้อมูลสิทธิบัตรของสหรัฐอเมริกาฯ +Name[tr]=U.S. Patent Veritabanı +Name[tt]=AQŞ Patentlar Tuplaması +Name[uk]=База даних патентів в США +Name[uz]=AQSH patent maʼlumot bazasi +Name[uz@cyrillic]=АҚШ патент маълумот базаси +Name[vi]=Cơ sở dữ liệu Bằng sáng chế Hoa Kỳ +Name[wa]=Båze di dnêyes des brevets U.S. +Name[zh_CN]=美国专利数据库 +Name[zh_TW]=U.S. 專利權資料庫 +Query=http://patft.uspto.gov/netacgi/nph-Parser?TERM1=\\{@}&Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/srchnum.htm&r=0&f=S&l=50 +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/vivisimo.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/vivisimo.desktop new file mode 100644 index 000000000..4fb6d0551 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/vivisimo.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Service +Name=Vivisimo +Name[bn]=ভিভিসিমো +Name[hi]=विविसिमो +Name[ka]=ვივისიმო +Name[ne]=भिभिसिमो +Name[pa]=ਵੀਵੀਸੀਮੋ +Name[ta]=விவிசிமோ +Name[te]=వివిస్మొ +Name[vi]=Tra Vivisimo +ServiceTypes=SearchProvider +Keys=vi +Query=http://vivisimo.com/search?query=\\{@}&se=Yahoo%2CAltaVista%2CMSN%2CFast%2COD%2CExcite%2CDirectHit%2CLooksmart%2CEuroseek&x=49&y=16 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/voila.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/voila.desktop new file mode 100644 index 000000000..034213e7b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/voila.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Service +Name=Voila +Name[bn]=ভয়লা +Name[hi]=वाइला +Name[ne]=भोइला +Name[pa]=ਵੋਈਲਾ +Name[ta]=வாய்லா +Name[te]=వొయిలా +Name[th]=เวยลา +Name[vi]=Tra Voila +Name[wa]=Voilà +ServiceTypes=SearchProvider +Keys=voila +Query=http://search.ke.voila.fr/S/voila?lg=fr&profil=geeks&rtype=kw&bhv=web_mondial&rdata=\\{@} +Query[ja]=http://search.ke.voila.fr/S/voila?lg=fr&profil=geeks&rtype=kw&bhv=web_mondial&rdata=\\\\{@} +Query[sk]=http://search.ke.voila.fr/S/voila?lg=fr&profil=geeks&rtype=kw&bhv=web_mondial&rdata=\\{@ diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/webster.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/webster.desktop new file mode 100644 index 000000000..bcb5fe583 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/webster.desktop @@ -0,0 +1,73 @@ +[Desktop Entry] +Type=Service +Name=Merriam-Webster Dictionary +Name[af]=Merriam-Webster Woordeboek +Name[ar]=قاموس Merriam-Webster +Name[az]=Merriam-Webster Sözlüyü +Name[be]=Слоўнік Merriam-Webster +Name[bn]=মেরিয়াম-ওয়েবস্টার অভিধান +Name[br]=Geriaoueg Merriam-Webster +Name[bs]=Merriam-Webster rječnik +Name[ca]=Diccionari Merriam-Webster +Name[cs]=Slovník Merriam-Webster +Name[csb]=Merriam-Webster - słowôrz +Name[cy]=Geiriadur Merriam-Webster +Name[da]=Merriam-Webster-ordbog +Name[de]=Merriam-Webster-Dictionary +Name[el]=Λεξικό Merriam-Webster +Name[eo]=Merriam - Webster-vortaro +Name[es]=Diccionario Merriam-Webster +Name[et]=Merriam-Websteri sõnaraamat +Name[eu]=Merriam-Webster hiztegia +Name[fa]=واژه‌نامۀ Merriam-Webster +Name[fi]=Merriam-Webster-sanakirja +Name[fr]=Dictionnaire Merriam-Webster +Name[ga]=Foclóir Merriam-Webster +Name[hi]=मरियम-वेबस्टर शब्दकोश +Name[hr]=Merriam-Webster rječnik +Name[hu]=Merriam-Webster szótár +Name[is]=Merriam-Webster orðabókin +Name[it]=Dizionario Merriam-Webster +Name[ka]=Словарь Merriam-Webster +Name[kk]=Merriam-Webster сөздігі +Name[km]=វចនានុក្រម Merriam-Webster +Name[ko]=Merriam-Webster 사전 +Name[lv]=Merriam-Webster Vārdnīca +Name[mk]=Merriam-Webster Речник +Name[mt]=Dizzjunarju Merriam-Webster +Name[nds]=Merriam-Webster-Wöörbook +Name[ne]=मेरियम-वेबस्टर शब्दकोश +Name[nso]=Pukuntsu ya Merriam-Webster +Name[pa]=Merriam-ਵੈਬਸਟੀਰ ਸ਼ਬਦ-ਕੋਸ਼ +Name[pl]=Merriam-Webster - słownik +Name[pt]=Merriam-Dicionário do Webster +Name[pt_BR]=Dicionário Merriam-Webster +Name[ro]=Dicționarul Merriam-Webster +Name[ru]=Словарь Merriam-Webster +Name[rw]=Inkoranyamagambo Merriam-Webster +Name[sk]=Slovník Merriam-Webster +Name[sl]=Slovar Merriam-Webster +Name[sr]=Речник Меријам-Вебстер +Name[sr@Latn]=Rečnik Merijam-Vebster +Name[ss]=Sichazimagama se Merriam-Webster +Name[sv]=Merriam-Websters ordlexikon +Name[ta]=மெர்ரியம்-வெப்ஸ்டர் அகராதி +Name[te]=మెర్రియం-వెబ్స్టర్ నిఘంటువు +Name[tg]=Луғати Merriam-Webster +Name[th]=พจนานุกรมเมอร์เรียม-เว็บสเตอร์ +Name[tr]=Merriam-Webster Sözlüğü +Name[tt]=Merriam-Webster Süzlege +Name[uk]=Словник Merriam-Webster +Name[uz]=Merriam-Webster lugʻati +Name[uz@cyrillic]=Merriam-Webster луғати +Name[ven]=Bugu ya Thalutshedza maipfi ya Merrian-Webster +Name[vi]=Từ điển Merriam-Webster +Name[wa]=Diccionaire inglès Merriam-Webster +Name[xh]= Dikshinari ye Merriam-Webster +Name[zh_CN]=韦氏词典 +Name[zh_TW]=韋氏詞典 +Name[zu]=Isichazamagama se-Merriam-Webster +ServiceTypes=SearchProvider +Keys=dict,webster +Query=http://www.m-w.com/cgi-bin/dictionary?book=Dictionary&va=\\{@} +Query[ne]=http://www.m-w.com/cgi-bin/dictionary?book=Dictionaryva=\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/whatis.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/whatis.desktop new file mode 100644 index 000000000..1cf117c27 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/whatis.desktop @@ -0,0 +1,71 @@ +[Desktop Entry] +Type=Service +Name=Whatis Query +Name[af]=Whatis navraag +Name[az]=Whatis Sorğusu +Name[be]=Запыт Whatis +Name[bn]=Whatis জিজ্ঞাসা +Name[br]=Klask Whatis +Name[bs]=Whatis upit +Name[ca]=Consulta Whatis +Name[cs]=Dotaz 'Co je?' +Name[csb]=Whatis - infòrmaticznô baza wiedzbë +Name[cy]=Ymholiad Beth-yw-Hwn +Name[da]=Whatis-forespørgsel +Name[de]=Whatis-Abfrage +Name[el]=Ερώτηση Whatis +Name[eo]=Kio-estas-demando +Name[es]=Consulta Whatis +Name[et]=Whatis päring +Name[eu]=Whatis bilaketa +Name[fa]=پرس‌وجوی Whatis +Name[fi]=Whatis-haku +Name[fr]=Requête whatis +Name[ga]=Iarratas Whatis +Name[gl]=Pergunta a Whatis +Name[he]=שאילתת Whatis +Name[hi]=व्हाट-इज़ क्वेरी +Name[hr]=Whatis propitivanje +Name[hu]=Whatis-lekérdezés +Name[is]=Whatis fyrirspurn +Name[it]=Richiesta whatis +Name[ja]=Whatis 検索 +Name[ka]=მოთხოვნა - რა არის +Name[kk]=Whatis сұранысы +Name[km]=សំណួរ Whatis +Name[lt]=Whatis užklausa +Name[lv]=Whatis pieprasījums +Name[mk]=Whatis прашалник +Name[ms]=WPertanyaan Apa itu +Name[mt]=Tfittxija Whatis +Name[nb]=Forespørsel i databasen «Whatis» +Name[nds]=Whatis-Anfraag +Name[ne]=Whatis क्वेरी +Name[nn]=Whatis-oppslag +Name[pa]=ਇਹ ਕੀ ਸਵਾਲ +Name[pl]=Whatis - informatyczna baza wiedzy +Name[pt]=Pesquisa 'O Que é Isto?' +Name[pt_BR]=Busca Whatis +Name[ro]=Interogare "Ce înseamnă asta" +Name[ru]=Запрос whatis +Name[rw]=Ikibazo ni iki +Name[se]=Whatis-jearaldat +Name[sk]=Otázka "Čo to je?" +Name[sl]=Poizvedba Whatis +Name[sr]=Whatis упит +Name[sr@Latn]=Whatis upit +Name[sv]=Vad är det här-fråga +Name[ta]=கேள்வி என்றால் என்ன +Name[tg]=Ҷустуҷӯъ чист +Name[th]=การค้นหา Whatis +Name[tr]=Nedir Sorgusu +Name[tt]=Whatis Sorawı +Name[uk]=Запит "Що це" +Name[vi]=Hỏi Whatis +Name[wa]=Cweraedje Whatis +Name[zh_CN]=Whatis 查询 +Name[zh_TW]=Whatis 查詢 +ServiceTypes=SearchProvider +Keys=wi,whatis +Query=http://whatis.techtarget.com/wsearchResults/1,290214,,00.html?query=\\{@} +Query[ja]=http://whatis.techtarget.com/wsearchResults/1,290214,,00.html?query=\\\\{@} diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/wikipedia.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/wikipedia.desktop new file mode 100644 index 000000000..5bc56d83e --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/wikipedia.desktop @@ -0,0 +1,94 @@ +[Desktop Entry] +Type=Service +Name=Wikipedia - The Free Encyclopedia +Name[af]=Wikipedia - Die gratis ensiklopidie +Name[ar]=الموسوعة الحرّة Wikipedia +Name[az]=Wikipedia - Pulsuz Ensiklopediya +Name[be]=Wikipedia - Свабодная Энцыклапедыя +Name[bn]=উইকিপেডিয়া - মুক্ত বিশ্বকোষ +Name[br]=Wikipedia - Ar geriadur ouiziegezh frank +Name[bs]=Wikipedia - Slobodna enciklopedija +Name[ca]=Viquipèdia - L'enciclopèdia lliure +Name[cs]=Wikipedia - volně dostupná encyklopedie +Name[csb]=Wikipedijô - wòlnô encyklopedijô +Name[cy]=Wikipedia - Y Gwyddoniadur Rhydd +Name[da]=Wikipedia - Det frie leksikon +Name[de]=Wikipedia - Die freie Enzyklopädie +Name[el]=Wikipedia - Η ελεύθερη εγκυκλοπαίδεια +Name[eo]=Vikipedio - la libera enciklopedio +Name[es]=Wikipedia - La enciclopedia libre +Name[et]=Wikipedia - Vaba entsüklopeedia +Name[eu]=Wikipedia - Entziklopedia librea +Name[fa]=Wikipedia - دایره‌المعارف آزاد +Name[fi]=Wikipedia - Vapaa tietosanakirja +Name[fr]=Wikipedia - L'encyclopédie libre +Name[fy]=Wikipedia - de frije ensyklopedy +Name[ga]=Wikipedia - An Chiclipéid Shaor +Name[gl]=Wikipedia - A Enciclopédia Libre +Name[he]=וויקיפדיה - האנציקלופדיה החופשית +Name[hi]=विकिपेडिया- मुफ्त विश्वकोश +Name[hr]=Wikipedia - besplatna enciklopedija +Name[hu]=Wikipedia +Name[is]=Wikipedia - Frjálst alfræðiorðasafn +Name[it]=Wikipedia - L'enciclopedia libera +Name[ja]=Wikipedia - フリーな百科事典 +Name[ka]=ვიკიპედია - ღია ენციკლოპედია +Name[kk]=Wikipedia - ашық энциклопедия +Name[km]=Wikipedia - សព្វវចនាធិប្បាយ​ឥត​គិត​ថ្លៃ +Name[ko]=위키백과 - 우리 모두의 백과사전 +Name[lt]=Wikipedia - laisva enciklopedija +Name[lv]=Wikipedia - Brīvā enciklopēdija +Name[mk]=Википедија - Слободната енциклопедија +Name[mn]=Wikipedia - Чөлөөт толь бичиг +Name[ms]=Wikipedia - Ensiklopedia Percuma +Name[mt]=Wikipedia - L-Enċiklopedija Ħielsa +Name[nb]=Wikipedia – det frie leksikonet +Name[nds]=Wikipedia - dat fre'e Nakieksel +Name[ne]=विकिपिडिया - नि: शुल्क इन्साइक्लोपेडिया +Name[nl]=Wikipedia - de vrije encyclopedie +Name[nn]=Wikipedia – det frie leksikonet +Name[pa]=ਵਿੱਕੀਪੀਡਿਆ - ਮੁਫਤ ਵਿਸ਼ਵਕੋਸ਼ +Name[pl]=Wikipedia - otwarta encyklopedia +Name[pt]=Wikipedia - A Enciclopédia Livre +Name[pt_BR]=Wikipedia - A Enciclopédia Livre +Name[ro]=Wikipedia - Enciclopedia liberă +Name[ru]=Wikipedia - свободная энциклопедия +Name[rw]=Wikipedia - Inkoranya y'Ubuntu +Name[se]=Wikipedia – fridja leksikona +Name[sk]=Wikipedia - voľne dostupná encyklopédia +Name[sl]=Wikipedia - Prosta enciklopedija +Name[sr]=Wikipedia — слободна енциклопедија +Name[sr@Latn]=Wikipedia — slobodna enciklopedija +Name[sv]=Wikipedia - den fria encyklopedin +Name[ta]=விகிபிடியா - இலவச கலைக்களஞ்சியம் +Name[te]=వికీపీడియా - స్వేఛ్ఛా విజ్ఞాన సర్వస్వము +Name[tg]=Wikipedia - Энсиклопедияи озод +Name[th]=วิกิพีเดีย - สารานุกรมฟรี +Name[tr]=Wikipedia - Ücretsiz Ansiklopedi +Name[tt]=Wikipedia - Buşlay Ensiklopedia +Name[uk]=Wikipedia - вільна енциклопедія +Name[uz]=Wikipedia - Erkin ensiklopediya +Name[uz@cyrillic]=Wikipedia - Эркин энциклопедия +Name[vi]=Wikipedia - Bách khoa toàn thư mở +Name[wa]=Wikipedia - Li libe eciclopedeye (walon) +Name[zh_CN]=维基百科 - 免费的百科全书 +Name[zh_TW]=Wikipedia - 免費的 Encyclopedia +ServiceTypes=SearchProvider +Keys=wp +Query=http://en.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[de]=http://de.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[fi]=http://fi.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[fr]=http://fr.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[fy]=http://fy.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[it]=http://it.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[ko]=http://ko.wikipedia.org/wiki/Special:Search?search=\\{@}&go=Go +Query[nb]=http://no.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[ne]=http://en.wikipedia.org/wiki/Special:Search?search=\{@}go=Go +Query[nl]=http://nl.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[pa]=http://en.wikipedia.org/wiki/Special:Search?search=\{@}&go=ਜਾਓ +Query[pl]=http://pl.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[tt]=http://tt.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[vi]=http://vi.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[wa]=http://wa.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[zh_CN]=http://zh.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/wiktionary.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/wiktionary.desktop new file mode 100644 index 000000000..f4dfa192d --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/wiktionary.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Type=Service +Name=Wiktionary - The Free Dictionary +Name[af]=Wiktionary - Die gratis woordeboek +Name[ar]=القاموس المجاني Wiktionary +Name[be]=Wiktionary - Свабодны Слоўнік +Name[bn]=ইউক্‌শনারি - মুক্ত অভিধান +Name[br]=Wiktionary - Ar geriadur frank +Name[bs]=Wiktionary - Slobodni rječnik +Name[ca]=Viccionari - El diccionari lliure +Name[cs]=Wiktionary - volně dostupný slovník +Name[csb]=Wiktionary - wòlny słowôrz +Name[da]=Wiktionary - Den frie ordbog +Name[de]=Wiktionary - Das freie Wörterbuch +Name[el]=Wiktionary - Το ελεύθερο λεξικό +Name[eo]=Vikivortaro - la libera vortaro +Name[es]=Wikitionary - El diccionario libre +Name[et]=Wiktionary - Vaba sõnaraamat +Name[eu]=Wiktionary - Hiztegi librea +Name[fa]=Wiktionary - واژه‌نامۀ آزاد +Name[fi]=Wiktionary - Vapaa sanakirja +Name[fr]=Wiktionary - Le dictionnaire libre +Name[fy]=Wiktionary - It frije wurdboek +Name[ga]=Wiktionary - An Foclóir Saor +Name[gl]=Wiktionary - O dicionario libre +Name[he]=וויקימילון - המילון החופשי +Name[hr]=Wiktionary - besplatna enciklopedija +Name[hu]=Wiktionary +Name[is]=Wiktionary - Frjálsa orðabókin +Name[ja]=Wictionary - フリーな辞書 +Name[ka]=Wiktionary - თავისუფალი ლექსიკონი +Name[kk]=Wiktionary - ашық сөздік +Name[km]=Wikipedia - វចនានុក្រម​ឥតគិតថ្លៃ +Name[ko]=위키낱말사전 +Name[lt]=Wiktionary - laisvasis žodynas +Name[mk]=Wiktionary - Слободниот речник +Name[nb]=Wiktionary – den frie ordboka +Name[nds]=Wiktionary - dat fre'e Wöörbook (engl.) +Name[ne]=विक्सनरी - नि: शुल्क शब्दकोश +Name[nl]=Wiktionary - het vrije woordenboek +Name[nn]=Wikipedia – det frie oppslagsverket +Name[pa]=ਵਿੱਕੀਸ਼ਨਰੀ - ਮੁਫਤ ਸ਼ਬਦ-ਕੋਸ਼ +Name[pl]=Wiktionary - Otwarty słownik +Name[pt]=Wiktionary - O Dicionário Livre +Name[pt_BR]=Wiktionary - O Dicionário Livre +Name[ro]=Wiktionary - Dictionarul liber +Name[ru]=Wiktionary - свободный словарь +Name[se]=Wiktinary – fridja sátnegirji +Name[sk]=Wiktionary = voľne dostupný slovník +Name[sl]=Wiktionary - Prosti slovar +Name[sr]=Wiktionary — слободан речник +Name[sr@Latn]=Wiktionary — slobodan rečnik +Name[sv]=Wiktionary - den fria ordboken +Name[te]=విక్షనరి - స్వేఛ్ఛా పదకోశము +Name[tg]=Wiktionary - Энсиклопедияи озод +Name[th]=วิกิชันนารี - พจนานุุกรมฟรี +Name[tr]=Wiktionary - Ücretsiz Ansiklopedi +Name[tt]=Wiktionary - Buşlay Süzlek +Name[uk]=Wiktionary - вільний словник +Name[uz]=Wiktionary - Erkin lugʻat +Name[uz@cyrillic]=Wiktionary - Эркин луғат +Name[vi]=Wiktionary - Từ điển mở +Name[wa]=Wikitionary - Li libe motî (inglès) +Name[zh_CN]=维基字典 - 免费的字典 +Name[zh_TW]=Wiktionary - 免費的字典 +ServiceTypes=SearchProvider +Keys=wt,wikt +Query=http://en.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[csb]=http://pl.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[eo]=http://eo.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[fr]=http://fr.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[fy]=http://fy.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[he]=http://he.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[ko]=http://ko.wiktionary.org/wiki/Special:Search?search=\\{@}&go=Go +Query[nb]=http://no.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[ne]=http://en.wiktionary.org/wiki/Special:Search?search=\{@}go=Go +Query[nl]=http://nl.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[nn]=http://en.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[pa]=http://en.wiktionary.org/wiki/Special:Search?search=\{@}&go=ਜਾਓ +Query[pl]=http://pl.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[tg]=http://en.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[th]=http://en.wikipedia.org/wiki/Special:Search?search=\{@}&go=Go +Query[tt]=http://tt.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Query[zh_CN]=http://zh.wiktionary.org/wiki/Special:Search?search=\{@}&go=Go +Charset=utf8 diff --git a/kcontrol/ebrowsing/plugins/ikws/searchproviders/wordref.desktop b/kcontrol/ebrowsing/plugins/ikws/searchproviders/wordref.desktop new file mode 100644 index 000000000..2a3d70523 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/ikws/searchproviders/wordref.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=wordref +Name=WordReference.com English Dictionary +Name[af]=WordReference.com Engelse Woordeboek +Name[ar]=القاموس الإنجليزي من WordReference.com +Name[az]=WordReference.com İngiliscə Lüğət +Name[be]=WordReference.com Ангельскі слоўнік +Name[bn]=WordReference.com ইংরাজি অভিধান +Name[br]=Geriaoueg saozneg WordReference.com +Name[bs]=WordReference.com Engleski rječnik +Name[ca]=WordReference.com diccionari anglès +Name[cs]=Anglický slovník WordReference.com +Name[csb]=WordReference.com: anielsczi słowôrz +Name[cy]=Geiriadur Saesneg WorldReference.com +Name[da]=WordReference.com engelsk ordbog +Name[de]=WordReference.com: Englischwörterbuch +Name[el]=WordReference.com αγγλικό λεξικό +Name[eo]=WordReference.com angla vortaro +Name[es]=WordReference.com diccionario de inglés +Name[et]=WordReference.com inglise keele sõnaraamat +Name[eu]=WordReference.com Itzulpena: Ingeles hiztegia +Name[fa]=واژه‌نامۀ انگلیسی WordReference.com +Name[fi]=WordReference.comin englannin kielen sanasto +Name[fr]=Dictionnaire anglais de WordReference.com +Name[fy]=WordReference.com Ingelsk wurdboek +Name[ga]=Foclóir Béarla WordReference.com +Name[gl]=WordReference.com Dicionario de Inglés +Name[he]=WordReference.com - מילון אנגלי +Name[hi]=वर्डरेफ़रेंस.कॉम अंग्रेज़ी शब्दकोश +Name[hr]=WordReference.com engleski rječnik +Name[hu]=WordReference.com angol szótár +Name[is]=WordReference.com ensk orðabók +Name[it]=WordReference.com dizionario inglese +Name[ja]=WordReference.com 英語辞書 +Name[kk]=WordReference.com ағылшын сөздігі +Name[km]=វចនានុក្រម​អង់គ្លេស WordReference.com +Name[ko]=WordReference.com 영어 사전 +Name[lt]=WordReference.com anglų kalbos žodynas +Name[lv]=WordReference.com Angļu valodas vārdnīca +Name[mk]=WordReference.com Англиски речник +Name[mn]=WordReference.com Англи толь бичиг +Name[mt]=WordReference.com Dizzjunarju Ingliż +Name[nb]=WordReference.com, engelsk ordbok +Name[nds]=WordReference.com Engelsch Nakieksel +Name[ne]=WordReference.com अङ्ग्रेजी शब्दकोश +Name[nl]=WordReference.com Engels woordenboek +Name[nn]=WordReference.com engelsk ordbok +Name[pa]=WordReference.com ਅੰਗਰੇਜ਼ੀ ਸ਼ਬਦ-ਕੋਸ਼ +Name[pl]=WordReference.com: słownik angielski +Name[pt]=Dicionário Inglês WordReference.com +Name[pt_BR]=Dicionário de Inglês WordReference.com +Name[ro]=Dicționarul englez WordReference.com +Name[ru]=Английский словарь WordReference.com +Name[rw]=Inkoranyamagambo y'Icyongereza WordReference.com +Name[se]=WordReference.com eŋgelaš sátnegirji +Name[sk]=Anglický slovník WordReference.com +Name[sl]=Angleški slovar WordReference.com +Name[sr]=Енглески речник на WordReference.com +Name[sr@Latn]=Engleski rečnik na WordReference.com +Name[sv]=Wordreference.com engelsk ordbok +Name[ta]=WordReference.com ஆங்கில அகராதி +Name[te]=WordReference.com ఆంగ్ల నిఘంటువు +Name[tg]=WordReference.com Луғати Англисӣ +Name[th]=WordReference.com พจนานุกรมอังกฤษ +Name[tr]=WordReference.com İngilizce Sözlük +Name[tt]=WordReference.com: İngliz Süzlege +Name[uk]=Англійський словник WordReference.com +Name[uz]=WordReference.com Inglizcha lugʻat +Name[uz@cyrillic]=WordReference.com Инглизча луғат +Name[vi]=Từ điển tiếng Anh WordReference.com +Name[wa]=WordReference.com diccionaire inglès +Name[zh_CN]=WordReference.com 英语字典 +Name[zh_TW]=WordReference.com 英文字典 +Query=http://www.wordreference.com/english/definition.asp?en=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/kcontrol/ebrowsing/plugins/localdomain/Makefile.am b/kcontrol/ebrowsing/plugins/localdomain/Makefile.am new file mode 100644 index 000000000..cb524dd4b --- /dev/null +++ b/kcontrol/ebrowsing/plugins/localdomain/Makefile.am @@ -0,0 +1,20 @@ +## Makefile.am of kdebase/kcontrol/ebrowsing/plugins/localdomain + +AM_CPPFLAGS = $(all_includes) -DQT_NO_CAST_ASCII + +kde_module_LTLIBRARIES = liblocaldomainurifilter.la + +liblocaldomainurifilter_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +liblocaldomainurifilter_la_LIBADD = $(LIB_KIO) $(LIB_KDEUI) $(LIB_KDECORE) + +liblocaldomainurifilter_la_SOURCES = localdomainurifilter.cpp localdomainurifilter.skel + +service_DATA = localdomainurifilter.desktop +servicedir = $(kde_servicesdir) + +METASOURCES = AUTO + +bin_PROGRAMS = klocaldomainurifilterhelper + +klocaldomainurifilterhelper_SOURCES = klocaldomainurifilterhelper.c +klocaldomainurifilterhelper_LDADD = $(LIBSOCKET) diff --git a/kcontrol/ebrowsing/plugins/localdomain/klocaldomainurifilterhelper.c b/kcontrol/ebrowsing/plugins/localdomain/klocaldomainurifilterhelper.c new file mode 100644 index 000000000..2f61d6824 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/localdomain/klocaldomainurifilterhelper.c @@ -0,0 +1,60 @@ +/* + kshorturifilterhelper.cpp + + This file is part of the KDE project + Copyright (C) 2002 Lubos Lunak + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +/* Helper for localdomainurifilter for finding out if a host exist */ + +#ifndef NULL +#define NULL 0 +#endif + +#include +#include +#include + +int main( int argc, char* argv[] ) +{ + struct hostent* ent; + + if( argc != 2 ) + return 2; + + ent = gethostbyname( argv[ 1 ] ); + if (ent) + { + int i; + int found = 0; + /* try to find the same fully qualified name first */ + for( i = 0; + ent->h_aliases[ i ] != NULL; + ++i ) + { + if( strncmp( argv[ 1 ], ent->h_aliases[ i ], strlen( argv[ 1 ] )) == 0 ) + { + found = 1; + fputs( ent->h_aliases[ i ], stdout ); + break; + } + } + if( !found ) + fputs( ent->h_name, stdout ); + } + + return (ent != NULL || h_errno == NO_ADDRESS) ? 0 : 1; +} diff --git a/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.cpp b/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.cpp new file mode 100644 index 000000000..3bd247729 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.cpp @@ -0,0 +1,117 @@ +/* + localdomainfilter.cpp + + This file is part of the KDE project + Copyright (C) 2002 Lubos Lunak + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include + +#include "localdomainurifilter.h" + +#include +#include +#include + +#include +#include + +#define HOSTPORT_PATTERN "[a-zA-Z0-9][a-zA-Z0-9+-]*(?:\\:[0-9]{1,5})?(?:/[\\w:@&=+$,-.!~*'()]*)*" + +/** + * IMPORTANT: If you change anything here, please run the regression test + * kdelibs/kio/tests/kurifiltertest + */ + +LocalDomainURIFilter::LocalDomainURIFilter( QObject *parent, const char *name, + const QStringList & /*args*/ ) + : KURIFilterPlugin( parent, name ? name : "localdomainurifilter", 1.0 ), + DCOPObject( "LocalDomainURIFilterIface" ), + last_time( 0 ), + m_hostPortPattern( QString::fromLatin1(HOSTPORT_PATTERN) ) +{ + configure(); +} + +bool LocalDomainURIFilter::filterURI( KURIFilterData& data ) const +{ + KURL url = data.uri(); + QString cmd = url.url(); + + kdDebug() << "LocalDomainURIFilter::filterURI: " << url << endl; + + if( m_hostPortPattern.exactMatch( cmd ) && + isLocalDomainHost( cmd ) ) + { + cmd.prepend( QString::fromLatin1("http://") ); + setFilteredURI( data, KURL( cmd ) ); + setURIType( data, KURIFilterData::NET_PROTOCOL ); + + kdDebug() << "FilteredURI: " << data.uri() << endl; + return true; + } + + return false; +} + +// if it's e.g. just 'www', try if it's a hostname in the local search domain +bool LocalDomainURIFilter::isLocalDomainHost( QString& cmd ) const +{ + // find() returns -1 when no match -> left()/truncate() are noops then + QString host( cmd.left( cmd.find( '/' ) ) ); + host.truncate( host.find( ':' ) ); // Remove port number + + if( !(host == last_host && last_time > time( NULL ) - 5 ) ) { + + QString helper = KStandardDirs::findExe(QString::fromLatin1( "klocaldomainurifilterhelper" )); + if( helper.isEmpty()) + return last_result = false; + + m_fullname = QString::null; + + KProcess proc; + proc << helper << host; + connect( &proc, SIGNAL(receivedStdout(KProcess *, char *, int)), + SLOT(receiveOutput(KProcess *, char *, int)) ); + if( !proc.start( KProcess::NotifyOnExit, KProcess::Stdout )) + return last_result = false; + + last_host = host; + last_time = time( (time_t *)0 ); + + last_result = proc.wait( 1 ) && proc.normalExit() && !proc.exitStatus(); + + if( !m_fullname.isEmpty() ) + cmd.replace( 0, host.length(), m_fullname ); + } + + return last_result; +} + +void LocalDomainURIFilter::receiveOutput( KProcess *, char *buf, int ) +{ + m_fullname = QFile::decodeName( buf ); +} + +void LocalDomainURIFilter::configure() +{ + // nothing +} + +K_EXPORT_COMPONENT_FACTORY( liblocaldomainurifilter, + KGenericFactory( "kcmkurifilt" ) ) + +#include "localdomainurifilter.moc" diff --git a/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.desktop b/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.desktop new file mode 100644 index 000000000..57826630a --- /dev/null +++ b/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.desktop @@ -0,0 +1,48 @@ +[Desktop Entry] +Type=Service +Name=LocalDomainFilter +Name[af]=Plaaslike domein filter +Name[az]=YerliDomenSüzgəci +Name[ca]=Filtre de dominis locals +Name[cs]=Filtr pro lokální doménu +Name[csb]=Filter môlowi domenë +Name[cy]=HidlParthLleol +Name[el]=Φίλτρο τοπικού τομέα +Name[eo]=LokaRetejo-filtrilo +Name[es]=FiltrodeDominioLocal +Name[eu]=Domeinu lokal iragazkia +Name[fr]=Filtre de domaine local +Name[fy]=Lokaaldomeinfilter +Name[he]=מסנן תחומים מקומיים +Name[hi]=लोकल-डोमेन-फ़िल्टर +Name[hr]=Filtar lokalnih domena +Name[hu]=HelyiTartománySzűrő +Name[it]=FiltroDominioLocale +Name[lo]=ຕົວກອງການບີບຂອງ KDE +Name[lv]=LokāloDomēnuFiltrs +Name[mt]=FiltruDominjiLokali +Name[nds]=Filter för LocalDomain +Name[ne]=स्थानीय डोमेन फिल्टर +Name[nl]=Lokaaldomeinfilter +Name[nso]=Sesekodi sa Tikologo ya Selegae +Name[pa]=ਲੋਕਲ ਡੋਮੇਨ ਫਿਲਟਰ +Name[pl]=Filtr lokalnej domeny +Name[pt_BR]=Filtro de Domínio Local +Name[ro]=Filtru de domeniu local +Name[rw]=MuyunguruziIndangarubugaYahafi +Name[sk]=Filter lokálnej domény +Name[sl]=FilterLokalneDomene +Name[sv]=Filter för lokal domän +Name[ta]=உள்பகுதிவடிகட்டி +Name[te]=స్థానిక డొమెయిన్ గలని +Name[th]=ตัวกรองโดเมนท้องถื่น +Name[uk]=Фільтр локальних доменів +Name[ven]=Filithara ya tshigwada ya henefhano +Name[vi]=Lọc Tên miền Địa phương +Name[wa]=PasseteLocåDominne +Name[zh_CN]=本地域名过滤 +Name[zh_TW]=區域網域過濾器 +Name[zu]=Ihluzo Lendawo Yaseduze +X-KDE-Library=liblocaldomainurifilter +ServiceTypes=KURIFilter/Plugin +InitialPreference=2 diff --git a/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.h b/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.h new file mode 100644 index 000000000..465214e69 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/localdomain/localdomainurifilter.h @@ -0,0 +1,65 @@ +/* + localdomainurifilter.h + + This file is part of the KDE project + Copyright (C) 2002 Lubos Lunak + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef _LOCALDOMAINURIFILTER_H_ +#define _LOCALDOMAINURIFILTER_H_ + +#include + +#include +#include +#include +#include + +class KInstance; +class KProcess; + +/* + This filter takes care of hostnames in the local search domain. + If you're in domain domain.org which has a host intranet.domain.org + and the typed URI is just intranet, check if there's a host + intranet.domain.org and if yes, it's a network URI. +*/ + +class LocalDomainURIFilter : public KURIFilterPlugin, public DCOPObject +{ + K_DCOP + Q_OBJECT + + public: + LocalDomainURIFilter( QObject* parent, const char* name, const QStringList& args ); + virtual bool filterURI( KURIFilterData &data ) const; + + k_dcop: + virtual void configure(); + + private: + bool isLocalDomainHost( QString& cmd ) const; + mutable QString last_host; + mutable bool last_result; + mutable time_t last_time; + mutable QString m_fullname; + QRegExp m_hostPortPattern; + + private slots: + void receiveOutput( KProcess *, char *, int ); +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/shorturi/Makefile.am b/kcontrol/ebrowsing/plugins/shorturi/Makefile.am new file mode 100644 index 000000000..134881987 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/shorturi/Makefile.am @@ -0,0 +1,18 @@ +## Makefile.am of kdebase/kcontrol/ebrowsing/plugins/shorturi + +AM_CPPFLAGS = $(all_includes) -DQT_NO_CAST_ASCII + +kde_module_LTLIBRARIES = libkshorturifilter.la + +libkshorturifilter_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +libkshorturifilter_la_LIBADD = $(LIB_KSYCOCA) $(LIB_KDEUI) + +libkshorturifilter_la_SOURCES = kshorturifilter.cpp kshorturifilter.skel + +service_DATA = kshorturifilter.desktop +servicedir = $(kde_servicesdir) + +rc_DATA = kshorturifilterrc +rcdir = $(kde_confdir) + +METASOURCES = AUTO diff --git a/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.cpp b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.cpp new file mode 100644 index 000000000..3c0677b0f --- /dev/null +++ b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.cpp @@ -0,0 +1,554 @@ +/* -*- c-basic-offset: 2 -*- + + kshorturifilter.h + + This file is part of the KDE project + Copyright (C) 2000 Dawit Alemayehu + Copyright (C) 2000 Malte Starostik + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "kshorturifilter.h" + +#define FQDN_PATTERN "(?:[a-zA-Z0-9][a-zA-Z0-9+-]*\\.[a-zA-Z]+)" +#define IPv4_PATTERN "[0-9]{1,3}\\.[0-9]{1,3}(?:\\.[0-9]{0,3})?(?:\\.[0-9]{0,3})?" +#define IPv6_PATTERN "^\\[.*\\]" +#define ENV_VAR_PATTERN "\\$[a-zA-Z_][a-zA-Z0-9_]*" + +#define QFL1(x) QString::fromLatin1(x) + + /** + * IMPORTANT: + * If you change anything here, please run the regression test + * kdelibs/kio/tests/kurifiltertest. + * + * If you add anything here, make sure to add a corresponding + * test code to kdelibs/kio/tests/kurifiltertest. + */ + +typedef QMap EntryMap; + +static bool isValidShortURL( const QString& cmd, bool verbose = false ) +{ + // Examples of valid short URLs: + // "kde.org", "foo.bar:8080", "user@foo.bar:3128" + // "192.168.1.0", "127.0.0.1:3128" + // "[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]" + QRegExp exp; + + // Match FQDN_PATTERN + exp.setPattern( QFL1(FQDN_PATTERN) ); + if ( cmd.contains( exp ) ) + { + if (verbose) + kdDebug() << "KShortURIFilter::isValidShortURL: " << cmd + << " matches FQDN_PATTERN" << endl; + + // bug 133687 +#if 0 + // stuff like wallpaper.png matches the FQDN_PATTERN but is most + // likely not a domain + if (KMimeType::findByPath(cmd, 0, true /* fast mode */) != KMimeType::defaultMimeTypePtr()) + return false; +#endif + + return true; + } + + // Match IPv4 addresses + exp.setPattern( QFL1(IPv4_PATTERN) ); + if ( cmd.contains( exp ) ) + { + if (verbose) + kdDebug() << "KShortURIFilter::isValidShortURL: " << cmd + << " matches IPv4_PATTERN" << endl; + return true; + } + + // Match IPv6 addresses + exp.setPattern( QFL1(IPv6_PATTERN) ); + if ( cmd.contains( exp ) ) + { + if (verbose) + kdDebug() << "KShortURIFilter::isValidShortURL: " << cmd + << " matches IPv6_PATTERN" << endl; + return true; + } + + if (verbose) + kdDebug() << "KShortURIFilter::isValidShortURL: '" << cmd + << "' is not a short URL." << endl; + + return false; +} + +static QString removeArgs( const QString& _cmd ) +{ + QString cmd( _cmd ); + + if( cmd[0] != '\'' && cmd[0] != '"' ) + { + // Remove command-line options (look for first non-escaped space) + int spacePos = 0; + + do + { + spacePos = cmd.find( ' ', spacePos+1 ); + } while ( spacePos > 1 && cmd[spacePos - 1] == '\\' ); + + if( spacePos > 0 ) + { + cmd = cmd.left( spacePos ); + //kdDebug() << k_funcinfo << "spacePos=" << spacePos << " returning " << cmd << endl; + } + } + + return cmd; +} + +KShortURIFilter::KShortURIFilter( QObject *parent, const char *name, + const QStringList & /*args*/ ) + :KURIFilterPlugin( parent, name ? name : "kshorturifilter", 1.0), + DCOPObject("KShortURIFilterIface") +{ + configure(); +} + +bool KShortURIFilter::filterURI( KURIFilterData& data ) const +{ + /* + * Here is a description of how the shortURI deals with the supplied + * data. First it expands any environment variable settings and then + * deals with special shortURI cases. These special cases are the "smb:" + * URL scheme which is very specific to KDE, "#" and "##" which are + * shortcuts for man:/ and info:/ protocols respectively. It then handles + * local files. Then it checks to see if the URL is valid and one that is + * supported by KDE's IO system. If all the above checks fails, it simply + * lookups the URL in the user-defined list and returns without filtering + * if it is not found. TODO: the user-defined table is currently only manually + * hackable and is missing a config dialog. + */ + + KURL url = data.uri(); + QString cmd = data.typedString(); + bool isMalformed = !url.isValid(); + //kdDebug() << "url=" << url.url() << " cmd=" << cmd << " isMalformed=" << isMalformed << endl; + + if (!isMalformed && + (url.protocol().length() == 4) && + (url.protocol() != QString::fromLatin1("http")) && + (url.protocol()[0]=='h') && + (url.protocol()[1]==url.protocol()[2]) && + (url.protocol()[3]=='p')) + { + // Handle "encrypted" URLs like: h++p://www.kde.org + url.setProtocol( QString::fromLatin1("http")); + setFilteredURI( data, url); + setURIType( data, KURIFilterData::NET_PROTOCOL ); + return true; + } + + // TODO: Make this a bit more intelligent for Minicli! There + // is no need to make comparisons if the supplied data is a local + // executable and only the argument part, if any, changed! (Dawit) + // You mean caching the last filtering, to try and reuse it, to save stat()s? (David) + + const QString starthere_proto = QFL1("start-here:"); + if (cmd.find(starthere_proto, 0, true) == 0 ) + { + setFilteredURI( data, KURL("system:/") ); + setURIType( data, KURIFilterData::LOCAL_DIR ); + return true; + } + + // Handle MAN & INFO pages shortcuts... + const QString man_proto = QFL1("man:"); + const QString info_proto = QFL1("info:"); + if( cmd[0] == '#' || + cmd.find( man_proto, 0, true ) == 0 || + cmd.find( info_proto, 0, true ) == 0 ) + { + if( cmd.left(2) == QFL1("##") ) + cmd = QFL1("info:/") + cmd.mid(2); + else if ( cmd[0] == '#' ) + cmd = QFL1("man:/") + cmd.mid(1); + + else if ((cmd==info_proto) || (cmd==man_proto)) + cmd+='/'; + + setFilteredURI( data, KURL( cmd )); + setURIType( data, KURIFilterData::HELP ); + return true; + } + + // Detect UNC style (aka windows SMB) URLs + if ( cmd.startsWith( QString::fromLatin1( "\\\\") ) ) + { + // make sure path is unix style + cmd.replace('\\', '/'); + cmd.prepend( QString::fromLatin1( "smb:" ) ); + setFilteredURI( data, KURL( cmd )); + setURIType( data, KURIFilterData::NET_PROTOCOL ); + return true; + } + + bool expanded = false; + + // Expanding shortcut to HOME URL... + QString path; + QString ref; + QString query; + QString nameFilter; + + if (KURL::isRelativeURL(cmd) && QDir::isRelativePath(cmd)) { + path = cmd; + } + else + { + if (url.isLocalFile()) + { + // Split path from ref/query if the path exists + // but not for "/tmp/a#b", if "a#b" is an existing file, + // or for "/tmp/a?b" (#58990) + if ( ( url.hasRef() || !url.query().isEmpty() ) // avoid the calling exists() when not needed + && QFile::exists(url.path()) + && !url.path().endsWith(QFL1("/")) ) // /tmp/?foo is a namefilter, not a query + { + path = url.path(); + ref = url.ref(); + query = url.query(); + if (path.isEmpty() && url.hasHost()) + path = '/'; + } + else + { + path = cmd; + } + } + } + + if( path[0] == '~' ) + { + int slashPos = path.find('/'); + if( slashPos == -1 ) + slashPos = path.length(); + if( slashPos == 1 ) // ~/ + { + path.replace ( 0, 1, QDir::homeDirPath() ); + } + else // ~username/ + { + QString user = path.mid( 1, slashPos-1 ); + struct passwd *dir = getpwnam(user.local8Bit().data()); + if( dir && strlen(dir->pw_dir) ) + { + path.replace (0, slashPos, QString::fromLocal8Bit(dir->pw_dir)); + } + else + { + QString msg = dir ? i18n("%1 does not have a home folder.").arg(user) : + i18n("There is no user called %1.").arg(user); + setErrorMsg( data, msg ); + setURIType( data, KURIFilterData::ERROR ); + // Always return true for error conditions so + // that other filters will not be invoked !! + return true; + } + } + expanded = true; + } + else if ( path[0] == '$' ) { + // Environment variable expansion. + QRegExp r (QFL1(ENV_VAR_PATTERN)); + if ( r.search( path ) == 0 ) + { + const char* exp = getenv( path.mid( 1, r.matchedLength() - 1 ).local8Bit().data() ); + if(exp) + { + path.replace( 0, r.matchedLength(), QString::fromLocal8Bit(exp) ); + expanded = true; + } + } + } + + if ( expanded ) + { + // Look for #ref again, after $ and ~ expansion (testcase: $QTDIR/doc/html/functions.html#s) + // Can't use KURL here, setPath would escape it... + int pos = path.find('#'); + if ( pos > -1 ) + { + ref = path.mid( pos + 1 ); + path = path.left( pos ); + //kdDebug() << "Extracted ref: path=" << path << " ref=" << ref << endl; + } + } + + + bool isLocalFullPath = (!path.isEmpty() && path[0] == '/'); + + // Checking for local resource match... + // Determine if "uri" is an absolute path to a local resource OR + // A local resource with a supplied absolute path in KURIFilterData + QString abs_path = data.absolutePath(); + + bool canBeAbsolute = (isMalformed && !abs_path.isEmpty()); + bool canBeLocalAbsolute = (canBeAbsolute && abs_path[0] =='/'); + bool exists = false; + + /*kdDebug() << "abs_path=" << abs_path << " malformed=" << isMalformed + << " canBeLocalAbsolute=" << canBeLocalAbsolute << endl;*/ + + struct stat buff; + if ( canBeLocalAbsolute ) + { + QString abs = QDir::cleanDirPath( abs_path ); + // combine absolute path (abs_path) and relative path (cmd) into abs_path + int len = path.length(); + if( (len==1 && path[0]=='.') || (len==2 && path[0]=='.' && path[1]=='.') ) + path += '/'; + //kdDebug() << "adding " << abs << " and " << path << endl; + abs = QDir::cleanDirPath(abs + '/' + path); + //kdDebug() << "checking whether " << abs << " exists." << endl; + // Check if it exists + if( stat( QFile::encodeName(abs).data(), &buff ) == 0 ) + { + path = abs; // yes -> store as the new cmd + exists = true; + isLocalFullPath = true; + } + } + + if( isLocalFullPath && !exists ) + { + exists = ( stat( QFile::encodeName(path).data() , &buff ) == 0 ); + + if ( !exists ) { + // Support for name filter (/foo/*.txt), see also KonqMainWindow::detectNameFilter + // If the app using this filter doesn't support it, well, it'll simply error out itself + int lastSlash = path.findRev( '/' ); + if ( lastSlash > -1 && path.find( ' ', lastSlash ) == -1 ) // no space after last slash, otherwise it's more likely command-line arguments + { + QString fileName = path.mid( lastSlash + 1 ); + QString testPath = path.left( lastSlash + 1 ); + if ( ( fileName.find( '*' ) != -1 || fileName.find( '[' ) != -1 || fileName.find( '?' ) != -1 ) + && stat( QFile::encodeName(testPath).data(), &buff ) == 0 ) + { + nameFilter = fileName; + kdDebug() << "Setting nameFilter to " << nameFilter << endl; + path = testPath; + exists = true; + } + } + } + } + + //kdDebug() << "path =" << path << " isLocalFullPath=" << isLocalFullPath << " exists=" << exists << endl; + if( exists ) + { + KURL u; + u.setPath(path); + u.setRef(ref); + u.setQuery(query); + + if (kapp && !kapp->authorizeURLAction( QString::fromLatin1("open"), KURL(), u)) + { + // No authorisation, we pretend it's a file will get + // an access denied error later on. + setFilteredURI( data, u ); + setURIType( data, KURIFilterData::LOCAL_FILE ); + return true; + } + + // Can be abs path to file or directory, or to executable with args + bool isDir = S_ISDIR( buff.st_mode ); + if( !isDir && access ( QFile::encodeName(path).data(), X_OK) == 0 ) + { + //kdDebug() << "Abs path to EXECUTABLE" << endl; + setFilteredURI( data, u ); + setURIType( data, KURIFilterData::EXECUTABLE ); + return true; + } + + // Open "uri" as file:/xxx if it is a non-executable local resource. + if( isDir || S_ISREG( buff.st_mode ) ) + { + //kdDebug() << "Abs path as local file or directory" << endl; + if ( !nameFilter.isEmpty() ) + u.setFileName( nameFilter ); + setFilteredURI( data, u ); + setURIType( data, ( isDir ) ? KURIFilterData::LOCAL_DIR : KURIFilterData::LOCAL_FILE ); + return true; + } + + // Should we return LOCAL_FILE for non-regular files too? + kdDebug() << "File found, but not a regular file nor dir... socket?" << endl; + } + + // Let us deal with possible relative URLs to see + // if it is executable under the user's $PATH variable. + // We try hard to avoid parsing any possible command + // line arguments or options that might have been supplied. + QString exe = removeArgs( cmd ); + //kdDebug() << k_funcinfo << "findExe with " << exe << endl; + if( data.checkForExecutables() && !KStandardDirs::findExe( exe ).isNull() ) + { + //kdDebug() << "EXECUTABLE exe=" << exe << endl; + setFilteredURI( data, KURL( exe )); + // check if we have command line arguments + if( exe != cmd ) + setArguments(data, cmd.right(cmd.length() - exe.length())); + setURIType( data, KURIFilterData::EXECUTABLE ); + return true; + } + + // Process URLs of known and supported protocols so we don't have + // to resort to the pattern matching scheme below which can possibly + // be slow things down... + if ( !isMalformed && !isLocalFullPath ) + { + const QStringList protocols = KProtocolInfo::protocols(); + for( QStringList::ConstIterator it = protocols.begin(); it != protocols.end(); ++it ) + { + if( (url.protocol() == *it) ) + { + setFilteredURI( data, url ); + if ( *it == QFL1("man") || *it == QFL1("help") ) + setURIType( data, KURIFilterData::HELP ); + else + setURIType( data, KURIFilterData::NET_PROTOCOL ); + return true; + } + } + } + + // Okay this is the code that allows users to supply custom matches for + // specific URLs using Qt's regexp class. This is hard-coded for now. + // TODO: Make configurable at some point... + if ( !cmd.contains( ' ' ) ) + { + QValueList::ConstIterator it; + for( it = m_urlHints.begin(); it != m_urlHints.end(); ++it ) + { + QRegExp match( (*it).regexp ); + if ( match.search( cmd, 0 ) == 0 ) + { + //kdDebug() << "match - prepending " << (*it).prepend << endl; + cmd.prepend( (*it).prepend ); + setFilteredURI( data, KURL( cmd ) ); + setURIType( data, (*it).type ); + return true; + } + } + + // If cmd is NOT a local resource, check if it is a valid "shortURL" + // candidate and append the default protocol the user supplied. (DA) + if ( isMalformed && isValidShortURL(cmd, m_bVerbose) ) + { + if (m_bVerbose) + kdDebug() << "Valid short url, from malformed url -> using default proto=" + << m_strDefaultProtocol << endl; + + cmd.insert( 0, m_strDefaultProtocol ); + setFilteredURI( data, KURL( cmd )); + setURIType( data, KURIFilterData::NET_PROTOCOL ); + return true; + } + } + + // If we previously determined that the URL might be a file, + // and if it doesn't exist, then error + if( isLocalFullPath && !exists ) + { + KURL u; + u.setPath(path); + u.setRef(ref); + + if (kapp && !kapp->authorizeURLAction( QString::fromLatin1("open"), KURL(), u)) + { + // No authorisation, we pretend it exists and will get + // an access denied error later on. + setFilteredURI( data, u ); + setURIType( data, KURIFilterData::LOCAL_FILE ); + return true; + } + //kdDebug() << "fileNotFound -> ERROR" << endl; + setErrorMsg( data, i18n( "The file or folder %1 does not exist." ).arg( data.uri().prettyURL() ) ); + setURIType( data, KURIFilterData::ERROR ); + return true; + } + + // If we reach this point, we cannot filter this thing so simply return false + // so that other filters, if present, can take a crack at it. + return false; +} + +KCModule* KShortURIFilter::configModule( QWidget*, const char* ) const +{ + return 0; //new KShortURIOptions( parent, name ); +} + +QString KShortURIFilter::configName() const +{ + return i18n("&ShortURLs"); +} + +void KShortURIFilter::configure() +{ + KConfig config( name() + QFL1("rc"), false, false ); + m_bVerbose = config.readBoolEntry( "Verbose", false ); + + if ( m_bVerbose ) + kdDebug() << "KShortURIFilter::configure: Config reload request..." << endl; + + m_strDefaultProtocol = config.readEntry( "DefaultProtocol", QFL1("http://") ); + EntryMap patterns = config.entryMap( QFL1("Pattern") ); + const EntryMap protocols = config.entryMap( QFL1("Protocol") ); + config.setGroup("Type"); + + for( EntryMap::Iterator it = patterns.begin(); it != patterns.end(); ++it ) + { + QString protocol = protocols[it.key()]; + if (!protocol.isEmpty()) + { + int type = config.readNumEntry(it.key(), -1); + if (type > -1 && type <= KURIFilterData::UNKNOWN) + m_urlHints.append( URLHint(it.data(), protocol, static_cast(type) ) ); + else + m_urlHints.append( URLHint(it.data(), protocol) ); + } + } +} + +K_EXPORT_COMPONENT_FACTORY( libkshorturifilter, + KGenericFactory( "kcmkurifilt" ) ) + +#include "kshorturifilter.moc" diff --git a/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.desktop b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.desktop new file mode 100644 index 000000000..b681deb90 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.desktop @@ -0,0 +1,54 @@ +[Desktop Entry] +Type=Service +Name=ShortURIFilter +Name[af]=KortURIfilter +Name[az]=KısaURISüzgeci +Name[br]=SilURLBerr +Name[ca]=Filtre d'URI curt +Name[csb]=Filter krótczich URI +Name[cy]=HidlURIByr +Name[da]=KortURIFilter +Name[de]=Kurz-URL-Filter +Name[el]=Φίλτρο σύντομων URI +Name[eo]=Mallonga URI-filtrilo +Name[es]=Filtro de URIs cortas +Name[et]=Lühikeste URLide filter +Name[eu]=URL laburren iragazkia +Name[fo]=Stutt URI-filtur +Name[fr]=Filtres d'URL courtes +Name[he]=מסנן כתובות קצרות +Name[hi]=शॉर्ट-यूआरआई-फ़िल्टर +Name[hr]=Filtar kratkih URI-a +Name[hu]=RövidURISzűrő +Name[id]=FilterURIPendek +Name[it]=Filtro di URI brevi +Name[ja]=ショート URI フィルタ +Name[lv]=ĪssURIFiltrs +Name[mn]=Богино-URL-Шүүлтүүр +Name[nds]=KortURI-Filter +Name[ne]=छोटो URI फिल्टर +Name[nso]=Sesekodi se Sekopana sa URI +Name[oc]=Filtre d'URI curta +Name[pa]=ShortURI ਫਿਲਟਰ +Name[pl]=Filtr Krótkich URI +Name[pt_BR]=Filtro URI +Name[ro]=Filtru de URI-uri scurte +Name[rw]=MuyunguruziURINgufi +Name[sk]=KrátkyURIFilter +Name[sl]=FilterZaKratkeURI +Name[sv]=Kortwebbadressfilter +Name[ta]=சிறியtவலைப்பின்னல்வடிகட்டி +Name[te]=చిన్న యు ఆర్ ఐ గలని +Name[tg]=КӯтоҳиURI-и софӣ +Name[th]=ตัวกรองURIแบบสั้น +Name[tr]=KısaURISüzgeci +Name[tt]=Qısqa URI Sözgeç +Name[uk]=Фільтр коротких URI +Name[ven]=Filithara thukhu ya URI +Name[vi]=Lọc Địa chỉ URI Ngắn +Name[wa]=PasseteCoutURI +Name[zh_CN]=短 URI 过滤 +Name[zh_TW]=短 URI 過濾器 +X-KDE-Library=libkshorturifilter +ServiceTypes=KURIFilter/Plugin +InitialPreference=5 diff --git a/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.h b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.h new file mode 100644 index 000000000..c6603da19 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilter.h @@ -0,0 +1,111 @@ +/* + kshorturifilter.h + + This file is part of the KDE project + Copyright (C) 2000 Dawit Alemayehu + Copyright (C) 2000 Malte Starostik + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef _KSHORTURIFILTER_H_ +#define _KSHORTURIFILTER_H_ + +#include +#include +#include + +class KInstance; + +/** +* This is short URL filter class. +* +* @short A filter that converts short URLs into fully qualified ones. +* +* @author Dawit Alemayehu +* @author Malte Starostik +*/ +class KShortURIFilter : public KURIFilterPlugin , public DCOPObject +{ + K_DCOP + Q_OBJECT +public: + + /** + * Creates a Short URI filter object + * + * @param parent the parent of this class. + * @param name the internal name for this object. + */ + KShortURIFilter( QObject *parent = 0, const char *name = 0, + const QStringList &args = QStringList() ); + + /** + * Destructor + */ + virtual ~KShortURIFilter() {}; + + /** + * Converts short URIs into fully qualified valid URIs + * whenever possible. + * + * Parses any given invalid URI to determine whether it + * is a known short URI and converts it to its fully + * qualified version. + * + * @param data the data to be filtered + * @return true if the url has been filtered + */ + virtual bool filterURI( KURIFilterData &data ) const; + + /** + * Returns the name of the config module for + * this plugin. + * + * @return the name of the config module. + */ + virtual QString configName() const; + + /** + * Returns an instance of the module used to configure + * this object. + * + * @return the config module + */ + virtual KCModule* configModule( QWidget*, const char* ) const; + +public: +k_dcop: + virtual void configure(); + +private: + + struct URLHint + { + URLHint() {} + URLHint( QString r, QString p, + KURIFilterData::URITypes t = KURIFilterData::NET_PROTOCOL ) + : regexp(r), prepend(p), type(t) {} + QString regexp; // if this matches, then... + QString prepend; // ...prepend this to the url + KURIFilterData::URITypes type; + }; + + QValueList m_urlHints; + QString m_strDefaultProtocol; + bool m_bVerbose; +}; + +#endif diff --git a/kcontrol/ebrowsing/plugins/shorturi/kshorturifilterrc b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilterrc new file mode 100644 index 000000000..c98db1803 --- /dev/null +++ b/kcontrol/ebrowsing/plugins/shorturi/kshorturifilterrc @@ -0,0 +1,7 @@ +[Pattern] +kdemailto=^(\w+)(?:[.]\w+)?@(\w+)(?:[.]\w+)+$ +kdeftp=^ftp(?:\.\w+)?\.\D{2,}(?:[0-9]{1,5})? + +[Protocol] +kdemailto=mailto: +kdeftp=ftp:// diff --git a/kcontrol/energy/Makefile.am b/kcontrol/energy/Makefile.am new file mode 100644 index 000000000..ea6578582 --- /dev/null +++ b/kcontrol/energy/Makefile.am @@ -0,0 +1,18 @@ +SUBDIRS= . pics + +AM_CPPFLAGS = $(all_includes) $(DPMSINC) + +kde_module_LTLIBRARIES = kcm_energy.la + +kcm_energy_la_SOURCES = energy.cpp +kcm_energy_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined +kcm_energy_la_LIBADD = $(DPMSLIB) $(LIB_KDEUI) $(LIB_KIO) +METASOURCES = energy.moc + +noinst_HEADERS = energy.h + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kcmenergy.pot + +energy_data_DATA = energy.desktop +energy_datadir = $(kde_appsdir)/.hidden diff --git a/kcontrol/energy/configure.in.in b/kcontrol/energy/configure.in.in new file mode 100644 index 000000000..7c9f247da --- /dev/null +++ b/kcontrol/energy/configure.in.in @@ -0,0 +1 @@ +AC_HAVE_DPMS() diff --git a/kcontrol/energy/energy.cpp b/kcontrol/energy/energy.cpp new file mode 100644 index 000000000..af3c4965d --- /dev/null +++ b/kcontrol/energy/energy.cpp @@ -0,0 +1,442 @@ +/* vi: ts=8 sts=4 sw=4 + * + * + * + * This file is part of the KDE project, module kcontrol. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + * + * Based on kcontrol1 energy.cpp, Copyright (c) 1999 Tom Vijlbrief + */ + + +/* + * KDE Energy setup module. + */ + +#include + +#if !defined(QT_CLEAN_NAMESPACE) +#define QT_CLEAN_NAMESPACE +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "energy.h" + + +#ifdef HAVE_DPMS +#include +extern "C" { +#include +Status DPMSInfo ( Display *, CARD16 *, BOOL * ); +Bool DPMSCapable( Display * ); +int __kde_do_not_unload = 1; + +#ifndef HAVE_DPMSCAPABLE_PROTO +Bool DPMSCapable ( Display * ); +#endif + +#ifndef HAVE_DPMSINFO_PROTO +Status DPMSInfo ( Display *, CARD16 *, BOOL * ); +#endif +} + +#if defined(XIMStringConversionRetrival) || defined (__sun) || defined(__hpux) +extern "C" { +#endif + Bool DPMSQueryExtension(Display *, int *, int *); + Status DPMSEnable(Display *); + Status DPMSDisable(Display *); + Bool DPMSGetTimeouts(Display *, CARD16 *, CARD16 *, CARD16 *); + Bool DPMSSetTimeouts(Display *, CARD16, CARD16, CARD16); +#if defined(XIMStringConversionRetrival) || defined (__sun) || defined(__hpux) +} +#endif +#endif + +static const int DFLT_STANDBY = 0; +static const int DFLT_SUSPEND = 30; +static const int DFLT_OFF = 60; + + +/**** DLL Interface ****/ + +extern "C" { + + KDE_EXPORT KCModule *create_energy(QWidget *parent, char *) { + return new KEnergy(parent, "kcmenergy"); + } + + KDE_EXPORT void init_energy() { +#ifdef HAVE_DPMS + KConfig *cfg = new KConfig("kcmdisplayrc", true /*readonly*/, false /*no globals*/); + cfg->setGroup("DisplayEnergy"); + + Display *dpy = qt_xdisplay(); + CARD16 pre_configured_status; + BOOL pre_configured_enabled; + CARD16 pre_configured_standby; + CARD16 pre_configured_suspend; + CARD16 pre_configured_off; + bool enabled; + CARD16 standby; + CARD16 suspend; + CARD16 off; + int dummy; + /* query the running X server if DPMS is supported */ + if (DPMSQueryExtension(dpy, &dummy, &dummy) && DPMSCapable(dpy)) { + DPMSGetTimeouts(dpy, &pre_configured_standby, &pre_configured_suspend, &pre_configured_off); + DPMSInfo(dpy, &pre_configured_status, &pre_configured_enabled); + /* let the user override the settings */ + enabled = cfg->readBoolEntry("displayEnergySaving", pre_configured_enabled); + standby = cfg->readNumEntry("displayStandby", pre_configured_standby/60); + suspend = cfg->readNumEntry("displaySuspend", pre_configured_suspend/60); + off = cfg->readNumEntry("displayPowerOff", pre_configured_off/60); + } else { + /* provide our defauts */ + enabled = true; + standby = DFLT_STANDBY; + suspend = DFLT_SUSPEND; + off = DFLT_OFF; + } + + delete cfg; + + KEnergy::applySettings(enabled, standby, suspend, off); +#endif + } +} + +/**** KEnergy ****/ + +KEnergy::KEnergy(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + m_bChanged = false; + m_bEnabled = false; + m_Standby = DFLT_STANDBY; + m_Suspend = DFLT_SUSPEND; + m_Off = DFLT_OFF; + m_bDPMS = false; + m_bMaintainSanity = true; + + setQuickHelp( i18n("

Display Power Control

If your display supports" + " power saving features, you can configure them using this module.

" + " There are three levels of power saving: standby, suspend, and off." + " The greater the level of power saving, the longer it takes for the" + " display to return to an active state.

" + " To wake up the display from a power saving mode, you can make a small" + " movement with the mouse, or press a key that is not likely to cause" + " any unintentional side-effects, for example, the \"Shift\" key.")); + +#ifdef HAVE_DPMS + int dummy; + m_bDPMS = DPMSQueryExtension(qt_xdisplay(), &dummy, &dummy); +#endif + + QVBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); + QHBoxLayout *hbox = new QHBoxLayout(); + top->addLayout(hbox); + + QLabel *lbl; + if (m_bDPMS) { + m_pCBEnable= new QCheckBox(i18n("&Enable display power management" ), this); + connect(m_pCBEnable, SIGNAL(toggled(bool)), SLOT(slotChangeEnable(bool))); + hbox->addWidget(m_pCBEnable); + QWhatsThis::add( m_pCBEnable, i18n("Check this option to enable the" + " power saving features of your display.") ); + } else { + lbl = new QLabel(i18n("Your display does not support power saving."), this); + hbox->addWidget(lbl); + } + + KURLLabel *logo = new KURLLabel(this); + logo->setURL("http://www.energystar.gov"); + logo->setPixmap(QPixmap(locate("data", "kcontrol/pics/energybig.png"))); + logo->setTipText(i18n("Learn more about the Energy Star program")); + logo->setUseTips(true); +connect(logo, SIGNAL(leftClickedURL(const QString&)), SLOT(openURL(const QString &))); + + hbox->addStretch(); + hbox->addWidget(logo); + + // Sliders + m_pStandbySlider = new KIntNumInput(m_Standby, this); + m_pStandbySlider->setLabel(i18n("&Standby after:")); + m_pStandbySlider->setRange(0, 120, 10); + m_pStandbySlider->setSuffix(i18n(" min")); + m_pStandbySlider->setSpecialValueText(i18n("Disabled")); + connect(m_pStandbySlider, SIGNAL(valueChanged(int)), SLOT(slotChangeStandby(int))); + top->addWidget(m_pStandbySlider); + QWhatsThis::add( m_pStandbySlider, i18n("Choose the period of inactivity" + " after which the display should enter \"standby\" mode. This is the" + " first level of power saving.") ); + + m_pSuspendSlider = new KIntNumInput(m_pStandbySlider, m_Suspend, this); + m_pSuspendSlider->setLabel(i18n("S&uspend after:")); + m_pSuspendSlider->setRange(0, 120, 10); + m_pSuspendSlider->setSuffix(i18n(" min")); + m_pSuspendSlider->setSpecialValueText(i18n("Disabled")); + connect(m_pSuspendSlider, SIGNAL(valueChanged(int)), SLOT(slotChangeSuspend(int))); + top->addWidget(m_pSuspendSlider); + QWhatsThis::add( m_pSuspendSlider, i18n("Choose the period of inactivity" + " after which the display should enter \"suspend\" mode. This is the" + " second level of power saving, but may not be different from the first" + " level for some displays.") ); + + m_pOffSlider = new KIntNumInput(m_pSuspendSlider, m_Off, this); + m_pOffSlider->setLabel(i18n("&Power off after:")); + m_pOffSlider->setRange(0, 120, 10); + m_pOffSlider->setSuffix(i18n(" min")); + m_pOffSlider->setSpecialValueText(i18n("Disabled")); + connect(m_pOffSlider, SIGNAL(valueChanged(int)), SLOT(slotChangeOff(int))); + top->addWidget(m_pOffSlider); + QWhatsThis::add( m_pOffSlider, i18n("Choose the period of inactivity" + " after which the display should be powered off. This is the" + " greatest level of power saving that can be achieved while the" + " display is still physically turned on.") ); + + top->addStretch(); + + if (m_bDPMS) + setButtons( KCModule::Help | KCModule::Default | KCModule::Apply ); + else + setButtons( KCModule::Help ); + + m_pConfig = new KConfig("kcmdisplayrc", false /*readwrite*/, false /*no globals*/); + m_pConfig->setGroup("DisplayEnergy"); + + load(); +} + + +KEnergy::~KEnergy() +{ + delete m_pConfig; +} + + +void KEnergy::load() +{ + load( false ); +} + +void KEnergy::load( bool useDefaults ) +{ + m_pConfig->setReadDefaults( useDefaults ); + readSettings(); + showSettings(); + + emit changed( useDefaults ); +} + + +void KEnergy::save() +{ + writeSettings(); + applySettings(m_bEnabled, m_Standby, m_Suspend, m_Off); + + emit changed(false); +} + + +void KEnergy::defaults() +{ + load( true ); +} + + +void KEnergy::readSettings() +{ + m_bEnabled = m_pConfig->readBoolEntry("displayEnergySaving", false); + m_Standby = m_pConfig->readNumEntry("displayStandby", DFLT_STANDBY); + m_Suspend = m_pConfig->readNumEntry("displaySuspend", DFLT_SUSPEND); + m_Off = m_pConfig->readNumEntry("displayPowerOff", DFLT_OFF); + + m_StandbyDesired = m_Standby; + m_SuspendDesired = m_Suspend; + m_OffDesired = m_Off; + + m_bChanged = false; +} + + +void KEnergy::writeSettings() +{ + if (!m_bChanged) + return; + + m_pConfig->writeEntry( "displayEnergySaving", m_bEnabled); + m_pConfig->writeEntry("displayStandby", m_Standby); + m_pConfig->writeEntry("displaySuspend", m_Suspend); + m_pConfig->writeEntry("displayPowerOff", m_Off); + + m_pConfig->sync(); + m_bChanged = false; +} + + +void KEnergy::showSettings() +{ + m_bMaintainSanity = false; + + if (m_bDPMS) + m_pCBEnable->setChecked(m_bEnabled); + + m_pStandbySlider->setEnabled(m_bEnabled); + m_pStandbySlider->setValue(m_Standby); + m_pSuspendSlider->setEnabled(m_bEnabled); + m_pSuspendSlider->setValue(m_Suspend); + m_pOffSlider->setEnabled(m_bEnabled); + m_pOffSlider->setValue(m_Off); + + m_bMaintainSanity = true; +} + + +extern "C" { + int dropError(Display *, XErrorEvent *); + typedef int (*XErrFunc) (Display *, XErrorEvent *); +} + +int dropError(Display *, XErrorEvent *) +{ + return 0; +} + +/* static */ +void KEnergy::applySettings(bool enable, int standby, int suspend, int off) +{ +#ifdef HAVE_DPMS + XErrFunc defaultHandler; + defaultHandler = XSetErrorHandler(dropError); + + Display *dpy = qt_xdisplay(); + + int dummy; + bool hasDPMS = DPMSQueryExtension(dpy, &dummy, &dummy); + if (hasDPMS) { + if (enable) { + DPMSEnable(dpy); + DPMSSetTimeouts(dpy, 60*standby, 60*suspend, 60*off); + } else + DPMSDisable(dpy); + } else + qWarning("Server has no DPMS extension"); + + XFlush(dpy); + XSetErrorHandler(defaultHandler); +#else + /* keep gcc silent */ + if (enable | standby | suspend | off) + /* nothing */ ; +#endif +} + + +void KEnergy::slotChangeEnable(bool ena) +{ + m_bEnabled = ena; + m_bChanged = true; + + m_pStandbySlider->setEnabled(ena); + m_pSuspendSlider->setEnabled(ena); + m_pOffSlider->setEnabled(ena); + + emit changed(true); +} + + +void KEnergy::slotChangeStandby(int value) +{ + m_Standby = value; + + if ( m_bMaintainSanity ) { + m_bMaintainSanity = false; + m_StandbyDesired = value; + if ((m_Suspend > 0 && m_Standby > m_Suspend) || + (m_SuspendDesired && m_Standby >= m_SuspendDesired) ) + m_pSuspendSlider->setValue(m_Standby); + if ((m_Off > 0 && m_Standby > m_Off) || + (m_OffDesired && m_Standby >= m_OffDesired) ) + m_pOffSlider->setValue(m_Standby); + m_bMaintainSanity = true; + } + + m_bChanged = true; + emit changed(true); +} + + +void KEnergy::slotChangeSuspend(int value) +{ + m_Suspend = value; + + if ( m_bMaintainSanity ) { + m_bMaintainSanity = false; + m_SuspendDesired = value; + if (m_Suspend == 0 && m_StandbyDesired > 0) + m_pStandbySlider->setValue( m_StandbyDesired ); + else if (m_Suspend < m_Standby || m_Suspend <= m_StandbyDesired ) + m_pStandbySlider->setValue(m_Suspend); + if ((m_Off > 0 && m_Suspend > m_Off) || + (m_OffDesired && m_Suspend >= m_OffDesired) ) + m_pOffSlider->setValue(m_Suspend); + m_bMaintainSanity = true; + } + + m_bChanged = true; + emit changed(true); +} + + +void KEnergy::slotChangeOff(int value) +{ + m_Off = value; + + if ( m_bMaintainSanity ) { + m_bMaintainSanity = false; + m_OffDesired = value; + if (m_Off == 0 && m_StandbyDesired > 0) + m_pStandbySlider->setValue( m_StandbyDesired ); + else if (m_Off < m_Standby || m_Off <= m_StandbyDesired ) + m_pStandbySlider->setValue(m_Off); + if (m_Off == 0 && m_SuspendDesired > 0) + m_pSuspendSlider->setValue( m_SuspendDesired ); + else if (m_Off < m_Suspend || m_Off <= m_SuspendDesired ) + m_pSuspendSlider->setValue(m_Off); + m_bMaintainSanity = true; + } + + m_bChanged = true; + emit changed(true); +} + +void KEnergy::openURL(const QString &URL) +{ + new KRun(KURL( URL )); +} + +#include "energy.moc" diff --git a/kcontrol/energy/energy.desktop b/kcontrol/energy/energy.desktop new file mode 100644 index 000000000..bf856866a --- /dev/null +++ b/kcontrol/energy/energy.desktop @@ -0,0 +1,242 @@ +[Desktop Entry] +Exec=kcmshell energy +Icon=energy_star +DocPath=kcontrol/energy/index.html +Type=Application +X-KDE-Library=energy +X-KDE-Init=energy +X-KDE-ParentApp=kcontrol +X-KDE-Init-Phase=2 + +Name=Power Control +Name[af]=Krag Beheer +Name[ar]=التحكّم بالطّاقة +Name[az]=Güc İdarəsi +Name[be]=Кіраванне сілкаваннем +Name[bg]=Електрозахранване +Name[bn]=পাওয়ার নিয়ন্ত্রণ +Name[br]=Renadur ar gremm +Name[bs]=Ušteda energije +Name[ca]=Control d'energia +Name[cs]=Správa napájení +Name[csb]=Kòntrola sëłë +Name[cy]=Rheoli Pŵer +Name[da]=Strømstyring +Name[de]=Energiekontrolle +Name[el]=Έλεγχος ισχύος +Name[eo]=Elektrostirilo +Name[es]=Control de energía +Name[et]=Voolutarve +Name[eu]=Energia kontrola +Name[fa]=کنترل توان +Name[fi]=Virranhallinta +Name[fo]=Orkustýring +Name[fr]=Contrôle de l'énergie +Name[fy]=Enerzjybehear +Name[ga]=Rialú Cumhachta +Name[gl]=Control da Enerxéa +Name[he]=צריכת חשמל +Name[hi]=बिज़ली नियंत्रण +Name[hr]=Ušteda energije +Name[hsb]=Milina +Name[hu]=Energiakezelés +Name[id]=Kontrol Power +Name[is]=Orkustilling +Name[it]=Controllo energia +Name[ja]=電源管理 +Name[ka]=კვების კონტროლი +Name[kk]=Қуаттандыруды бақылау +Name[km]=ការ​ត្រួត​ពិនិត្យ​ថាមពល +Name[ko]=전원 관리 +Name[lo]=ຄວບຄຸມການໃຊ້ພະລັງງານ +Name[lt]=Energijos kontrolė +Name[lv]=Energo Kontrole +Name[mk]=Контрола на енергија +Name[mn]=Энергийн удирдлага +Name[ms]=Kawalan Kuasa +Name[mt]=Kontroll tal-konsum +Name[nb]=Strømkontroll +Name[nds]=Stroomkuntrull +Name[ne]=शक्ति नियन्त्रण +Name[nl]=Energiebeheer +Name[nn]=Straumkontroll +Name[nso]=Taolo ya Matla +Name[oc]=Contròle d'alimentacion +Name[pa]=ਊਰਜਾ ਕੰਟਰੋਲ +Name[pl]=Zasilanie +Name[pt]=Controlo de Energia +Name[pt_BR]=Controle de Energia +Name[ro]=Control energie +Name[ru]=Управление питанием +Name[rw]=Igenzura ry'Umuriro +Name[se]=El-rávdnje stivren +Name[sk]=Ovládanie spotreby +Name[sl]=Nadzor energije +Name[sr]=Контрола енергије +Name[sr@Latn]=Kontrola energije +Name[ss]=Kulawulwa kwemlilo +Name[sv]=Strömsparfunktion +Name[ta]=மின்னோட்ட கட்டுப்பாடு +Name[te]=విద్యుత్ నియంత్రణ +Name[tg]=Идораи қувваи барқ +Name[th]=ควบคุมการใช้พลังงาน +Name[tr]=Güç Denetimi +Name[tt]=Qüät İdäräse +Name[uk]=Керування живленням +Name[uz]=Elektr taʼminotni boshqarish +Name[uz@cyrillic]=Электр таъминотни бошқариш +Name[ven]=Ndanguli ya maanda +Name[vi]=Điều khiển Nguồn điện +Name[wa]=Controle di l' alimintåcion +Name[xh]=Ulawulo Lwamandla +Name[zh_CN]=电源控制 +Name[zh_TW]=電源控制 +Name[zu]=Ukulawulwa kwamandla + +Comment=Settings for display power management +Comment[af]=Instellings vir die vertoon van die krag bestuurder +Comment[ar]=تعيينات إدخار الطاقة للشاشة +Comment[az]=Displey gec idarəsi qurğuları +Comment[be]=Кіраванне сілкаваннем манітора +Comment[bg]=Настройване на електрозахранването +Comment[bn]=ডিসপ্লের বৈদ্যুতিক শক্তি ব্যবহার সংক্রান্ত সেটিংস +Comment[br]=Kefluniadur renadur gremm an diskwell +Comment[bs]=Postavke uštede energije monitora (ekrana) +Comment[ca]=Arranjaments per al control d'energia a la pantalla +Comment[cs]=Nastavení pro správu šetření napájení +Comment[csb]=Nastôw sprôwianiô sëłą +Comment[cy]=Gosodiadau i rheoli pw?r y dangosydd +Comment[da]=Indstilling for visning af strømstyring +Comment[de]=Stromspareinstellungen für Ihren Monitor bzw. Ihr Display +Comment[el]=Ρυθμίσεις για την προβολή της διαχείρισης ενέργειας +Comment[eo]=Agordo por de la elektrouzado de via ekrano +Comment[es]=Preferencias para la pantalla de control de energía +Comment[et]=Ekraani voolutarbe juhtimise seaded +Comment[eu]=Pantailaren energia kudeatzeko ezarpenak +Comment[fa]=تنظیمات برای نمایش مدیریت توان +Comment[fi]=Asetukset näytön virranhallinnalle +Comment[fr]=Paramètres de la gestion d'énergie pour l'affichage +Comment[fy]=Ynstellings foar energybesparring foar byldskerms +Comment[gl]=Configuracións para a xestión de enerxia da pantalla +Comment[he]=שינוי הגדרות ניהול צריכת החשמל של התצוגה +Comment[hi]=बिज़ली नियंत्रण प्रदर्शक के लिए विन्यास +Comment[hr]=Postavke za štednju energije zaslona +Comment[hu]=A képernyő energiatakarékossági beállításai +Comment[is]=Stillingar fyrir orkustýringu skjás +Comment[it]=Impostazioni per la gestione dell'energia dello schermo. +Comment[ja]=ディスプレイの電源管理の設定 +Comment[ka]=დისპლეის კვების მონეჯმენტის კონფიგურაცია +Comment[kk]=Дисплейді қуаттандыруды басқаруын баптау +Comment[km]=ការ​កំណត់​សម្រាប់​គ្រប់គ្រង​ថាមពល​ការ​បង្ហាញ +Comment[ko]=디스플레이 전원 관리 설정 +Comment[lo]=ຕັ້ງຄ່າສຳລັບການປະຫຍັດພະລັງງານຂອງລະບົບສະແດງຜົນ +Comment[lt]=Parinktys displėjaus energijos tvarkymui +Comment[lv]=Ekrāna enorgotaupības parametri +Comment[mk]=Поставувања за менаџмент на енергијата за екранот +Comment[mn]=Дэлгэцийн тань энерги-тохируулга +Comment[ms]=Seting untuk pengurusan kuasa paparan +Comment[mt]=Setings għall-kontroll tal-konsum tal-iskrin +Comment[nb]=Innstillinger for strømkontroll av skjerm +Comment[nds]=Stroomspoorinstellen för den Schirm +Comment[ne]=प्रर्दशन शक्ति व्यवस्थापनका लागि सेटिङ +Comment[nl]=Instellingen voor energiebesparing voor monitors/displays +Comment[nn]=Innstillingar for straumkontroll av skjerm +Comment[nso]=Dipeakanyo tsa taolo ya matla a pontsho +Comment[pa]=ਊਰਜਾ ਪਰਬੰਧਨ ਝਲਕ ਲਈ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia zarządzania mocą +Comment[pt]=Configurações para a gestão de energia do ecrã +Comment[pt_BR]= Configurações para o gerenciamento de energia do monitor +Comment[ro]=Setări pentru controlul energiei consumate de monitor +Comment[ru]=Настройка управления питанием дисплея +Comment[rw]=Amagenamiterere yo kwerekana icunga ry'umuriro +Comment[se]=Heivehusat mat stivrejit rávdnji šerbmii +Comment[sk]=Nastavenie šetrenia energiou obrazovky +Comment[sl]=Nastavitve za nadzor energije zaslona +Comment[sr]=Поставке за управаљање енергијом екрана +Comment[sr@Latn]=Postavke za upravaljanje energijom ekrana +Comment[ss]=Kuhleleka kwekubonisa kuphatfwa kwemandla +Comment[sv]=Inställning av skärmens strömsparfunktion +Comment[ta]=மின்சார மேலாண்மைக்கான அமைப்புகள் +Comment[tg]=Танзимоти мудирияти барқии намоишгар +Comment[th]=ตั้งค่าสำหรับการประหยัดพลังงานของระบบแสดงผล +Comment[tr]=Ekran güç yöneticisi ayarları +Comment[tt]=Küräk qüäten idäräläw caylawları +Comment[uk]=Налаштування керування живленням дисплея +Comment[uz]=Displeyning elektr taʼminoti uchun moslamalar +Comment[uz@cyrillic]=Дисплейнинг электр таъминоти учун мосламалар +Comment[ven]=Mavhekanyele au sumbedza ndangulo ya maanda +Comment[vi]=Thiết lập cho quản lý nguồn điện +Comment[wa]=Tchuzes po håyner l' manaedjmint d' enerdjeye +Comment[xh]=Izicwangciso zoboniso lophatho lwamandla +Comment[zh_CN]=显示器电源管理设置 +Comment[zh_TW]=顯示器電源管理的設定值 +Comment[zu]=Izilungiselelo zokuvezwa kokuphathwa kwamandla + +Keywords=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,power +Keywords[az]=enerji,apm,acpi,zamanaşımı,boşaltma,güç,karartma,ekran +Keywords[be]=энергія,зберагальнік,збераганне,тэрмін чакання,ачышчэнне,выключэнне,сілкаванне,сон,energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,power +Keywords[bg]=ток, захранване, прекъсване, батерия, батерии, контакт, energy, saver, apm, acpi, dpms, timeout, blanking, stand by, suspend, power +Keywords[ca]=energia,salva,apm,acpi,dpms,expiració,en blanc,en espera, suspès,corrent +Keywords[cs]=Energie,Úspora,APM,ACPI,Časový limit,Vypnutí,Napájení,Šetřič,Spořič +Keywords[csb]=sëła, energijô,zachòwëwanié,apm,acpi,dpms,limit czasu,zaczôrnienié,wëłączanié, ùspienié,zasëlanié +Keywords[cy]=ynni,arbedwr,apm,acpi,dpms,goroedi,gwagu,sefyll wrthlaw,seibio, pwer +Keywords[da]=energi,sparer,apm,acpi,dpms,timeout,udløb,gør blank,standby,suspendér,strøm +Keywords[de]=Energie,APM,ACPI,DPMS,Zeitüberlauf,Timeout,Standby,Bereitschaft +Keywords[el]=ενέργεια,εξοικονόμηση,apm,acpi,dpms,χρονικό όριο,blanking,αναμονή,παύση,ισχύς +Keywords[eo]=energio,sekurigo,APM,ACPI,tempolimo,ekrano,kurteno,nigrigo, dormigo,malŝalto +Keywords[es]=energía,ahorro,APM,ACPI,tiempo de expiración,apagar monitor,modo de espera,suspender +Keywords[et]=energia,säästja,apm,acpi,dpms,taimaut,energiasääst,passiivne +Keywords[eu]=energia,babeslea,apm,acpi,dpms,denbora-muga,monitorea itzali, zain,suspenditu,indarra +Keywords[fa]=انرژی، محافظ، apm، acpi، dpms، اتمام وقت، فاصله‌گذاری، نیمه روشن، معلق، توان +Keywords[fi]=energia,säästö,apm,acpi,dpms,aikavalvonta,sammutus,valmiustila,teho +Keywords[fr]=énergie,économie,apm,acpi,suspension,suspendre,tension,éteindre,extinction,veille,mise en veille,alimentation +Keywords[fy]=energy,besparring,apm,acpi,tiidslimyt,sliepstân,stand-by,suspend,power,wachtstân,laptop,byldskerm,monitor,display,timeout +Keywords[ga]=cumhacht,sábhálaí,apm,acpi,dpms,teorainn ama,bánú,croch,fuinneamh +Keywords[gl]=enerxia,aforro,apm,acpi,dpms,tempo de espera,espera,suspender,timeout,bloqueo +Keywords[he]=זמן מוקצב,האפלה,המתנה,חשמל,dpms,acpi,apm,אנרגיה,חיסכון, energy,saver,timeout,blanking,stand y,suspend,power +Keywords[hi]=बिज़ली,रक्षक,एपीएम,एसीपीआई,डीपीएमएस,टाइम-आउट,ब्लैंकिंग,स्टैंड-बाय,सस्पैंड,उर्जा +Keywords[hr]=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,power,štednja energije,energija,štednja,crnilo +Keywords[hu]=energia,kímélő,apm,acpi,dpms,időtúllépés,képernyőkioltás,készenlét,felfüggesztés,tápfeszültség +Keywords[id]=energi,hemat,apm,acpi,timeout,blanking,stand by,suspend,Power +Keywords[is]=orka,sparnaður,svæfing,apm,slökkva,svæfa,kveikja,dpms,tímamörk +Keywords[it]=energia,risparmio,apm,acpi,tempo massimo,schermo nero,stand by,sospensione,corrente +Keywords[ja]=電源,節約,apm,acpi,dpms,タイムアウト,ブランク,スタンバイ,サスペンド,パワー +Keywords[ka]=ენერგია,შემნახველი, apm, acpi, dpms, დროის ამოწურვა, გასუფთავება, მზაობა, გაუქმება, კვება +Keywords[km]=ថាមពល,អ្នក​សង្គ្រោះ,apm,acpi,dpms,អស់​ពេល,ទទេ,ឈប់​មួយ​ភ្លែត,ឈប់​បណ្ដោះ​អាសន្ន +Keywords[lt]=energija,saugojimas,apm,acpi,pertrauka,gesinimas,stabdymas, pristabdymas,energija +Keywords[lv]=enerģija,glabātājs,apm,acpi,dpms,taimauts,tukšs,gaidīt,izslēgt,iemidzināt,Barošana +Keywords[mk]=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,power,енергија,штедач,истек на време +Keywords[mn]=Энерги,APM,ACPI,DPMS,Хугацаа хэтрэлт,Standby,Бэлэн байдал +Keywords[mt]=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,power,dawl,enerġija,elettriku,konsum +Keywords[nb]=energi,sparing,apm,acpi,dpms,tidsgrense,tom skjerm,ventemodus,hvilemodus,dvalemodus,strøm +Keywords[nds]=Energie,sporen,apm,acpi,dpms,timeout,blanking,stand by,suspend,Energie +Keywords[ne]=शक्ति, बचतकर्ता, apm, acpi, dpms, समय समाप्त, रिक्त, उभिनु, निलम्बन, सामर्थ्य +Keywords[nl]=energie,besparing,apm,acpi,tijdslimiet,slaapstand,stand-by,suspend,power,wachtstand,laptop,beeldscherm,monitor,display,timeout +Keywords[nn]=energi,sparing,apm,acpi,dpms,tidsgrense,tom skjerm,standby,suspend,straum,dvale +Keywords[nso]=maatla,seboloki,apm,acpi,dpms,feletswe ke nako,ga ena selo, moemalegato,koba bonakwana,matla +Keywords[pa]=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,ਊਰਜਾ,ਮੁਅੱਤਲ +Keywords[pl]=energia,zachowywanie,apm,acpi,dpms,limit czasu,wygaszenie ekranu,wyłączanie,uśpienie,hibernacja,zasilanie +Keywords[pt]=energia,poupança,apm,acpi,temporizador,stand by,suspender,alimentação +Keywords[pt_BR]=energia,poupar,APM,ACPI,dpms,tempo limite,desligamento,em espera,suspender,Força +Keywords[ro]=energie,salvare,apm,acpi,dpms,temporizare,stinge,stand by,suspendare,rețea electrică +Keywords[rw]=ingufu,mubika,apm,acpi,dpms,igihecyarenze,kugira ahatanditseho, kuba witeguye,gusubika,umuriro +Keywords[se]=árja,siestin,acpm,acpi,dpms,áigemearri,guorus šearbma,standby,suspend,el-rávdnji +Keywords[sk]=energia,apm,acpi,vypnúť,timeout,zhasnúť,suspend,stand by,šetrič +Keywords[sl]=energija,ohranjevalnik,varčevalnik,apm,acpi,suspend,potek,zatemnitev,energija +Keywords[sr]=енергија,штедња,apm,acpi,timeout,blanking,stand by,suspend,напајање +Keywords[sr@Latn]=energija,štednja,apm,acpi,timeout,blanking,stand by,suspend,napajanje +Keywords[sv]=energi,spar,apm,acpi,dpms,tidsgräns,viloläge,vänteläge,ström +Keywords[ta]=சக்தி,சேமிப்பான்,apm,acpi,dpms,நேரமுடிவு,இடைவெளி விடுதல்,ஆதாரம்,நீக்கம்,மின்சக்தி +Keywords[th]=พลังงาน,ประหยัด,apm,acpi,dpms,หมดเวลา,ว่าง,เตรียมตัว,ปิดชั่วคราว,พลัง +Keywords[tr]=enerji,apm,acpi,dpms,zaman aşımı,boşaltma,bekleme,karartma,güç +Keywords[uk]=енергія,живлення,зберігач,apm,acpi, тайм-аут,гасіння,режим чергування,призупинення +Keywords[uz]=energiya,tejash,apm,acpi,dpms,taymaut,blanking,stand by,suspend,elektr taʼminoti +Keywords[uz@cyrillic]=энергия,тежаш,apm,acpi,dpms,таймаут,blanking,stand by,suspend,электр таъминоти +Keywords[ven]=maanda,muvhulungi,apm,acpi,u fhela ha tshifhinga,blanking,zwanagatsini,phandela,Maanda +Keywords[vi]=năng lượng,tiết kiệm,apm,acpi,dpms,hết giờ,mất điện,tạm nghỉ,treo,công suất +Keywords[wa]=enerdjeye,schaper,schapeu,apm,acpi,dpms,timeout,blanking,stand by,suspend,power,djoker +Keywords[xh]=amandla,umgcini,apm,acpi,dpms,ixesha lokuphuma,engenambhalo,umphumzi,gxotha,amandla +Keywords[zh_CN]=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,power,能源,节省,超时,黑屏,待机,休眠,电源 +Keywords[zh_TW]=energy,saver,apm,acpi,dpms,timeout,blanking,stand by,suspend,Power,能源,省電器,逾時,轉暗,待機,休眠,電源 +Keywords[zu]=umdlandla,umgcini,apm,acpi,isikhathi sokuphuma,ukuvimbela,lindela lengisa,amandla + diff --git a/kcontrol/energy/energy.h b/kcontrol/energy/energy.h new file mode 100644 index 000000000..d41b89e26 --- /dev/null +++ b/kcontrol/energy/energy.h @@ -0,0 +1,68 @@ +/* vi: ts=8 sts=4 sw=4 + * + * + * + * This file is part of the KDE project, module kcontrol. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + * + * Based on kcontrol1 energy.h, Copyright (c) 1999 Tom Vijlbrief. + */ + +#ifndef __Energy_h_Included__ +#define __Energy_h_Included__ + +#include +#include + +class QCheckBox; +class KIntNumInput; +class KConfig; + +extern "C" void init_energy(); + +/** + * The Desktop/Energy tab in kcontrol. + */ +class KEnergy: public KCModule +{ + Q_OBJECT + +public: + KEnergy(QWidget *parent, const char *name); + ~KEnergy(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +private slots: + void slotChangeEnable(bool); + void slotChangeStandby(int); + void slotChangeSuspend(int); + void slotChangeOff(int); + void openURL(const QString &); + +private: + void readSettings(); + void writeSettings(); + void showSettings(); + + static void applySettings(bool, int, int, int); + friend void init_energy(); + + bool m_bChanged, m_bDPMS, m_bEnabled, m_bMaintainSanity; + int m_Standby, m_Suspend, m_Off; + int m_StandbyDesired, m_SuspendDesired, m_OffDesired; + + QCheckBox *m_pCBEnable; + KIntNumInput *m_pStandbySlider; + KIntNumInput *m_pSuspendSlider; + KIntNumInput *m_pOffSlider; + KConfig *m_pConfig; +}; + +#endif // __Energy_h_Included__ diff --git a/kcontrol/energy/pics/Makefile.am b/kcontrol/energy/pics/Makefile.am new file mode 100644 index 000000000..a53060d03 --- /dev/null +++ b/kcontrol/energy/pics/Makefile.am @@ -0,0 +1,5 @@ +pics_DATA = energybig.png lo-energy.png +picsdir = $(kde_datadir)/kcontrol/pics + +EXTRA_DIST = $(pics_DATA) + diff --git a/kcontrol/energy/pics/energybig.png b/kcontrol/energy/pics/energybig.png new file mode 100644 index 000000000..1a79fe748 Binary files /dev/null and b/kcontrol/energy/pics/energybig.png differ diff --git a/kcontrol/energy/pics/lo-energy.png b/kcontrol/energy/pics/lo-energy.png new file mode 100644 index 000000000..9706644b1 Binary files /dev/null and b/kcontrol/energy/pics/lo-energy.png differ diff --git a/kcontrol/filetypes/Makefile.am b/kcontrol/filetypes/Makefile.am new file mode 100644 index 000000000..b47763254 --- /dev/null +++ b/kcontrol/filetypes/Makefile.am @@ -0,0 +1,29 @@ +AM_CPPFLAGS = $(all_includes) + +kcm_filetypes_la_LIBADD = libfiletypes.la $(LIB_KIO) +kcm_filetypes_la_LDFLAGS = -module -avoid-version -no-undefined $(all_libraries) +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_filetypes.la + +kcm_filetypes_la_SOURCES = control.cpp + +noinst_HEADERS = filetypesview.h filetypedetails.h filegroupdetails.h \ + kservicelistwidget.h typeslistitem.h newtypedlg.h \ + kserviceselectdlg.h + +bin_PROGRAMS = keditfiletype + +noinst_LTLIBRARIES = libfiletypes.la +libfiletypes_la_SOURCES = filetypesview.cpp filetypedetails.cpp filegroupdetails.cpp \ + kservicelistwidget.cpp typeslistitem.cpp newtypedlg.cpp \ + kserviceselectdlg.cpp + +keditfiletype_SOURCES = keditfiletype.cpp +keditfiletype_LDADD = libfiletypes.la $(LIB_KIO) +keditfiletype_LDFLAGS = $(KDE_RPATH) $(all_libraries) + +messages: + $(XGETTEXT) *.cpp -o $(podir)/filetypes.pot + +xdg_apps_DATA = filetypes.desktop diff --git a/kcontrol/filetypes/control.cpp b/kcontrol/filetypes/control.cpp new file mode 100644 index 000000000..55e98d95e --- /dev/null +++ b/kcontrol/filetypes/control.cpp @@ -0,0 +1,11 @@ +#include "filetypesview.h" + +extern "C" +{ + KDE_EXPORT KCModule *create_filetypes(QWidget *parent, const char *) + { + return new FileTypesView(parent, "filetypes"); + } + +} + diff --git a/kcontrol/filetypes/filegroupdetails.cpp b/kcontrol/filetypes/filegroupdetails.cpp new file mode 100644 index 000000000..a8895965a --- /dev/null +++ b/kcontrol/filetypes/filegroupdetails.cpp @@ -0,0 +1,65 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ +#include "filegroupdetails.h" +#include "typeslistitem.h" +#include +#include +#include +#include +#include +#include + +FileGroupDetails::FileGroupDetails(QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + QWidget * parentWidget = this; + QVBoxLayout *secondLayout = new QVBoxLayout(parentWidget, + 0, KDialog::spacingHint()); + + m_autoEmbed = new QVButtonGroup( i18n("Left Click Action"), parentWidget ); + m_autoEmbed->layout()->setSpacing( KDialog::spacingHint() ); + secondLayout->addWidget( m_autoEmbed ); + // The order of those two items is very important. If you change it, fix typeslistitem.cpp ! + new QRadioButton( i18n("Show file in embedded viewer"), m_autoEmbed ); + new QRadioButton( i18n("Show file in separate viewer"), m_autoEmbed ); + connect(m_autoEmbed, SIGNAL( clicked( int ) ), SLOT( slotAutoEmbedClicked( int ) )); + + QWhatsThis::add( m_autoEmbed, i18n("Here you can configure what the Konqueror file manager" + " will do when you click on a file belonging to this group. Konqueror can display the file in" + " an embedded viewer or start up a separate application. You can change this setting for a" + " specific file type in the 'Embedding' tab of the file type configuration.") ); + + secondLayout->addStretch(); +} + +void FileGroupDetails::setTypeItem( TypesListItem * item ) +{ + Q_ASSERT( item->isMeta() ); + m_item = item; + m_autoEmbed->setButton( item ? item->autoEmbed() : -1 ); +} + +void FileGroupDetails::slotAutoEmbedClicked(int button) +{ + if ( !m_item ) + return; + m_item->setAutoEmbed( button ); + emit changed(true); +} + +#include "filegroupdetails.moc" diff --git a/kcontrol/filetypes/filegroupdetails.h b/kcontrol/filetypes/filegroupdetails.h new file mode 100644 index 000000000..1716954f3 --- /dev/null +++ b/kcontrol/filetypes/filegroupdetails.h @@ -0,0 +1,50 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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 _FILEGROUPDETAILS_H +#define _FILEGROUPDETAILS_H + +#include +class TypesListItem; +class QButtonGroup; + +/** + * This widget contains the details for a filetype group. + * Currently this only involves the embedding configuration. + */ +class FileGroupDetails : public QWidget +{ + Q_OBJECT +public: + FileGroupDetails(QWidget *parent = 0, const char *name = 0); + + void setTypeItem( TypesListItem * item ); + +signals: + void changed(bool); + +protected slots: + void slotAutoEmbedClicked(int button); + +private: + TypesListItem * m_item; + + // Embedding config + QButtonGroup *m_autoEmbed; +}; + +#endif diff --git a/kcontrol/filetypes/filetypedetails.cpp b/kcontrol/filetypes/filetypedetails.cpp new file mode 100644 index 000000000..436fd138d --- /dev/null +++ b/kcontrol/filetypes/filetypedetails.cpp @@ -0,0 +1,299 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "kservicelistwidget.h" +#include "filetypedetails.h" +#include "typeslistitem.h" + +FileTypeDetails::FileTypeDetails( QWidget * parent, const char * name ) + : QTabWidget( parent, name ), m_item( 0L ) +{ + QString wtstr; + // First tab - General + QWidget * firstWidget = new QWidget(this); + QVBoxLayout *firstLayout = new QVBoxLayout(firstWidget,KDialog::marginHint(), + KDialog::spacingHint()); + + QHBoxLayout *hBox = new QHBoxLayout(0L, 0, KDialog::spacingHint()); + firstLayout->addLayout(hBox, 1); + + iconButton = new KIconButton(firstWidget); + iconButton->setIconType(KIcon::Desktop, KIcon::MimeType); + connect(iconButton, SIGNAL(iconChanged(QString)), SLOT(updateIcon(QString))); + + iconButton->setFixedSize(70, 70); + hBox->addWidget(iconButton); + + QWhatsThis::add( iconButton, i18n("This button displays the icon associated" + " with the selected file type. Click on it to choose a different icon.") ); + + QGroupBox *gb = new QGroupBox(i18n("Filename Patterns"), firstWidget); + hBox->addWidget(gb); + + QGridLayout *grid = new QGridLayout(gb, 3, 2, KDialog::marginHint(), + KDialog::spacingHint()); + grid->addRowSpacing(0, fontMetrics().lineSpacing()); + + extensionLB = new QListBox(gb); + connect(extensionLB, SIGNAL(highlighted(int)), SLOT(enableExtButtons(int))); + grid->addMultiCellWidget(extensionLB, 1, 2, 0, 0); + grid->setRowStretch(0, 0); + grid->setRowStretch(1, 1); + grid->setRowStretch(2, 0); + + QWhatsThis::add( extensionLB, i18n("This box contains a list of patterns that can be" + " used to identify files of the selected type. For example, the pattern *.txt is" + " associated with the file type 'text/plain'; all files ending in '.txt' are recognized" + " as plain text files.") ); + + addExtButton = new QPushButton(i18n("Add..."), gb); + addExtButton->setEnabled(false); + connect(addExtButton, SIGNAL(clicked()), + this, SLOT(addExtension())); + grid->addWidget(addExtButton, 1, 1); + + QWhatsThis::add( addExtButton, i18n("Add a new pattern for the selected file type.") ); + + removeExtButton = new QPushButton(i18n("Remove"), gb); + removeExtButton->setEnabled(false); + connect(removeExtButton, SIGNAL(clicked()), + this, SLOT(removeExtension())); + grid->addWidget(removeExtButton, 2, 1); + + QWhatsThis::add( removeExtButton, i18n("Remove the selected filename pattern.") ); + + gb = new QGroupBox(i18n("Description"), firstWidget); + firstLayout->addWidget(gb); + + gb->setColumnLayout(1, Qt::Horizontal); + description = new KLineEdit(gb); + connect(description, SIGNAL(textChanged(const QString &)), + SLOT(updateDescription(const QString &))); + + wtstr = i18n("You can enter a short description for files of the selected" + " file type (e.g. 'HTML Page'). This description will be used by applications" + " like Konqueror to display directory content."); + QWhatsThis::add( gb, wtstr ); + QWhatsThis::add( description, wtstr ); + + serviceListWidget = new KServiceListWidget( KServiceListWidget::SERVICELIST_APPLICATIONS, firstWidget ); + connect( serviceListWidget, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); + firstLayout->addWidget(serviceListWidget, 5); + + // Second tab - Embedding + QWidget * secondWidget = new QWidget(this); + QVBoxLayout *secondLayout = new QVBoxLayout(secondWidget, KDialog::marginHint(), + KDialog::spacingHint()); + + m_autoEmbed = new QVButtonGroup( i18n("Left Click Action"), secondWidget ); + m_autoEmbed->layout()->setSpacing( KDialog::spacingHint() ); + secondLayout->addWidget( m_autoEmbed, 1 ); + + m_autoEmbed->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)0, m_autoEmbed->sizePolicy().hasHeightForWidth() ) ); + + // The order of those three items is very important. If you change it, fix typeslistitem.cpp ! + new QRadioButton( i18n("Show file in embedded viewer"), m_autoEmbed ); + new QRadioButton( i18n("Show file in separate viewer"), m_autoEmbed ); + m_rbGroupSettings = new QRadioButton( i18n("Use settings for '%1' group"), m_autoEmbed ); + connect(m_autoEmbed, SIGNAL( clicked( int ) ), SLOT( slotAutoEmbedClicked( int ) )); + + m_chkAskSave = new QCheckBox( i18n("Ask whether to save to disk instead"), m_autoEmbed); + connect(m_chkAskSave, SIGNAL( toggled(bool) ), SLOT( slotAskSaveToggled(bool) )); + + QWhatsThis::add( m_autoEmbed, i18n("Here you can configure what the Konqueror file manager" + " will do when you click on a file of this type. Konqueror can display the file in" + " an embedded viewer or start up a separate application. If set to 'Use settings for G group'," + " Konqueror will behave according to the settings of the group G this type belongs to," + " for instance 'image' if the current file type is image/png.") ); + + secondLayout->addSpacing(10); + + embedServiceListWidget = new KServiceListWidget( KServiceListWidget::SERVICELIST_SERVICES, secondWidget ); + embedServiceListWidget->setMinimumHeight( serviceListWidget->sizeHint().height() ); + connect( embedServiceListWidget, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); + secondLayout->addWidget(embedServiceListWidget, 3); + + addTab( firstWidget, i18n("&General") ); + addTab( secondWidget, i18n("&Embedding") ); +} + +void FileTypeDetails::updateRemoveButton() +{ + removeExtButton->setEnabled(extensionLB->count()>0); +} + +void FileTypeDetails::updateIcon(QString icon) +{ + if (!m_item) + return; + + m_item->setIcon(icon); + + emit changed(true); +} + +void FileTypeDetails::updateDescription(const QString &desc) +{ + if (!m_item) + return; + + m_item->setComment(desc); + + emit changed(true); +} + +void FileTypeDetails::addExtension() +{ + if ( !m_item ) + return; + + bool ok; + QString ext = KInputDialog::getText( i18n( "Add New Extension" ), + i18n( "Extension:" ), "*.", &ok, this ); + if (ok) { + extensionLB->insertItem(ext); + QStringList patt = m_item->patterns(); + patt += ext; + m_item->setPatterns(patt); + updateRemoveButton(); + emit changed(true); + } +} + +void FileTypeDetails::removeExtension() +{ + if (extensionLB->currentItem() == -1) + return; + if ( !m_item ) + return; + QStringList patt = m_item->patterns(); + patt.remove(extensionLB->text(extensionLB->currentItem())); + m_item->setPatterns(patt); + extensionLB->removeItem(extensionLB->currentItem()); + updateRemoveButton(); + emit changed(true); +} + +void FileTypeDetails::slotAutoEmbedClicked( int button ) +{ + if ( !m_item || (button > 2)) + return; + + m_item->setAutoEmbed( button ); + + updateAskSave(); + + emit changed(true); +} + +void FileTypeDetails::updateAskSave() +{ + if ( !m_item ) + return; + + int button = m_item->autoEmbed(); + if (button == 2) + { + bool embedParent = TypesListItem::defaultEmbeddingSetting(m_item->majorType()); + emit embedMajor(m_item->majorType(), embedParent); + button = embedParent ? 0 : 1; + } + + QString mimeType = m_item->name(); + + QString dontAskAgainName; + + if (button == 0) // Embedded + dontAskAgainName = "askEmbedOrSave"+mimeType; + else + dontAskAgainName = "askSave"+mimeType; + + KSharedConfig::Ptr config = KSharedConfig::openConfig("konquerorrc", false, false); + config->setGroup("Notification Messages"); + bool ask = config->readEntry(dontAskAgainName).isEmpty(); + m_item->getAskSave(ask); + + bool neverAsk = false; + + if (button == 0) + { + KMimeType::Ptr mime = KMimeType::mimeType( mimeType ); + // Don't ask for: + // - html (even new tabs would ask, due to about:blank!) + // - dirs obviously (though not common over HTTP :), + // - images (reasoning: no need to save, most of the time, because fast to see) + // e.g. postscript is different, because takes longer to read, so + // it's more likely that the user might want to save it. + // - multipart/* ("server push", see kmultipart) + // - other strange 'internal' mimetypes like print/manager... + if ( mime->is( "text/html" ) || + mime->is( "text/xml" ) || + mime->is( "inode/directory" ) || + mimeType.startsWith( "image" ) || + mime->is( "multipart/x-mixed-replace" ) || + mime->is( "multipart/replace" ) || + mimeType.startsWith( "print" ) ) + { + neverAsk = true; + } + } + + m_chkAskSave->blockSignals(true); + m_chkAskSave->setChecked(ask && !neverAsk); + m_chkAskSave->setEnabled(!neverAsk); + m_chkAskSave->blockSignals(false); +} + +void FileTypeDetails::slotAskSaveToggled(bool askSave) +{ + if (!m_item) + return; + + m_item->setAskSave(askSave); + emit changed(true); +} + +void FileTypeDetails::setTypeItem( TypesListItem * tlitem ) +{ + m_item = tlitem; + if ( tlitem ) + iconButton->setIcon(tlitem->icon()); + else + iconButton->resetIcon(); + description->setText(tlitem ? tlitem->comment() : QString::null); + if ( tlitem ) + m_rbGroupSettings->setText( i18n("Use settings for '%1' group").arg( tlitem->majorType() ) ); + extensionLB->clear(); + addExtButton->setEnabled(true); + removeExtButton->setEnabled(false); + + serviceListWidget->setTypeItem( tlitem ); + embedServiceListWidget->setTypeItem( tlitem ); + m_autoEmbed->setButton( tlitem ? tlitem->autoEmbed() : -1 ); + m_rbGroupSettings->setEnabled( tlitem->canUseGroupSetting() ); + + if ( tlitem ) + extensionLB->insertStringList(tlitem->patterns()); + else + extensionLB->clear(); + + updateAskSave(); +} + +void FileTypeDetails::enableExtButtons(int /*index*/) +{ + removeExtButton->setEnabled(true); +} + +#include "filetypedetails.moc" diff --git a/kcontrol/filetypes/filetypedetails.h b/kcontrol/filetypes/filetypedetails.h new file mode 100644 index 000000000..6f9a0a548 --- /dev/null +++ b/kcontrol/filetypes/filetypedetails.h @@ -0,0 +1,64 @@ +#ifndef _FILETYPEDETAILS_H +#define _FILETYPEDETAILS_H + +#include +class TypesListItem; +class KIconButton; +class QLineEdit; +class QListBox; +class QButtonGroup; +class QCheckBox; +class QRadioButton; +class QPushButton; +class KServiceListWidget; + +/** + * This widget contains the right part of the file type configuration + * dialog, that shows the details for a file type. + * It is implemented as a separate class so that it can be used by + * the keditfiletype program to show the details of a single mimetype. + */ +class FileTypeDetails : public QTabWidget +{ + Q_OBJECT +public: + FileTypeDetails(QWidget *parent = 0, const char *name = 0); + + void setTypeItem( TypesListItem * item ); + +protected: + void updateRemoveButton(); + void updateAskSave(); + +signals: + void embedMajor(const QString &major, bool &embed); // To adjust whether major type is being embedded + void changed(bool); + +protected slots: + void updateIcon(QString icon); + void updateDescription(const QString &desc); + void addExtension(); + void removeExtension(); + void enableExtButtons(int index); + void slotAutoEmbedClicked(int button); + void slotAskSaveToggled(bool); + +private: + TypesListItem * m_item; + + // First tab - General + KIconButton *iconButton; + QListBox *extensionLB; + QPushButton *addExtButton, *removeExtButton; + QLineEdit *description; + KServiceListWidget *serviceListWidget; + + // Second tab - Embedding + QButtonGroup *m_autoEmbed; + KServiceListWidget *embedServiceListWidget; + QRadioButton *m_rbOpenSeparate; + QCheckBox *m_chkAskSave; + QRadioButton *m_rbGroupSettings; +}; + +#endif diff --git a/kcontrol/filetypes/filetypes.desktop b/kcontrol/filetypes/filetypes.desktop new file mode 100644 index 000000000..372af2213 --- /dev/null +++ b/kcontrol/filetypes/filetypes.desktop @@ -0,0 +1,235 @@ +[Desktop Entry] +Icon=filetypes +Type=Application +Exec=kcmshell filetypes +DocPath=kcontrol/filetypes/index.html +Categories=Qt;KDE;X-KDE-settings-components; + + +X-KDE-Library=filetypes +X-KDE-ParentApp=kcontrol + +Name=File Associations +Name[af]=Lêer Assosiasies +Name[ar]=ارتباطات الملفات +Name[az]=Fayl Əlaqələri +Name[be]=Асацыяцыі файлаў +Name[bg]=Файлови асоциации +Name[bn]=ফাইল অ্যাসোসিয়েশন +Name[br]=Kevreañ restroù +Name[bs]=Asociranje datoteka +Name[ca]=Associacions de fitxers +Name[cs]=Asociace souborů +Name[csb]=Pòwiązania lopków +Name[cy]=Cysylltiadau Ffeiliau +Name[da]=Filassociationer +Name[de]=Dateizuordnungen +Name[el]=Συσχετίσεις αρχείων +Name[eo]=Dosiertipoj +Name[es]=Asociaciones de archivo +Name[et]=Failide seosed +Name[eu]=Fitxategi elkarketak +Name[fa]=انجمنهای پرونده +Name[fi]=Tiedostosidokset +Name[fr]=Associations de fichiers +Name[fy]=Triemassosjaasjes +Name[gl]=Asociacións de Ficheiros +Name[he]=שיוכי קבצים +Name[hi]=फ़ाइल असोसिएशन +Name[hr]=Pridruživanja datoteka +Name[hu]=Fájltársítások +Name[id]=Asosiasi File +Name[is]=Skráavensl +Name[it]=Associazioni file +Name[ja]=ファイルの関連付け +Name[ka]=ფაილთა მიბმა +Name[kk]=Файл сәйкестіктері +Name[km]=ទំនាក់​ទំនង​ឯកសារ +Name[ko]=파일 연결 +Name[lo]=ການກຳນົດໃຊ້ແຟ້ມ +Name[lt]=Bylų asociacijos +Name[lv]=Failu Asociācijas +Name[mk]=Асоцијации на датотеки +Name[mn]=Файл холбоосууд +Name[mt]=Assoċjazzjonijiet tal-Fajls +Name[nb]=Filtilknytninger +Name[nds]=Datei-Toornen +Name[ne]=फाइल संयोजन +Name[nl]=Bestandsassociaties +Name[nn]=Filtilknytingar +Name[nso]=Dikopantsho tsa Difaele +Name[oc]=Associacions de fiquièrs +Name[pa]=ਫਾਇਲ ਸਬੰਧ +Name[pl]=Skojarzenia plików +Name[pt]=Associação de Ficheiros +Name[pt_BR]=Associações de arquivos +Name[ro]=Asociere fișiere +Name[ru]=Привязки файлов +Name[rw]=Ishyirahamwe ry'Idosiye +Name[se]=Fiilačatnagasat +Name[sk]=Asociácie súborov +Name[sl]=Datotečne povezave +Name[sr]=Придружења фајловима +Name[sr@Latn]=Pridruženja fajlovima +Name[sv]=Filbindningar +Name[ta]=கோப்பு ஒருங்கமைப்புகள் +Name[tg]=Вобастагонии Файл +Name[th]=กำหนดการใช้แฟ้ม +Name[tr]=Dosya İlişkileri +Name[tt]=Kiremnär Kileşterü +Name[uk]=Асоціації файлів +Name[uz]=Fayl turi bilan\nbogʻliqlar +Name[uz@cyrillic]=Файл тури билан\nбоғлиқлар +Name[ven]=U fanyisa faela +Name[vi]=Kiểu tập tin +Name[wa]=Elaxhaedjes di fitchîs +Name[xh]=Uyelemaniso Lwefayile +Name[zh_CN]=文件关联 +Name[zh_TW]=檔案關聯 +Name[zu]=Ubudlelwano befayela + +Comment=Configure file associations +Comment[af]=Konfigureer lêer assosiasies +Comment[ar]=إعداد إرتباطات الملفات +Comment[az]=Fayl əlaqələrini quraşdır +Comment[be]=Настаўленні асацыяцыяў файлаў +Comment[bg]=Настройване и асоцииране на файлови типове с програми +Comment[bn]=ফাইল অ্যাসোসিয়েশন কনফিগার করুন +Comment[br]=Kefluniañ kevreañ restroù +Comment[bs]=Podesite asocijacije datoteka +Comment[ca]=Configura les associacions de fitxers +Comment[cs]=Nastavení asociací souborů +Comment[csb]=Konfigùracëjô pòwiązaniów lopków +Comment[cy]=Ffurfweddu cysylltiadau ffeiliau +Comment[da]=Indstil filassociationer +Comment[de]=Dateizuordnungen vornehmen +Comment[el]=Ρύθμιση των συσχετίσεων αρχείων +Comment[eo]=Agordu de ligo de programoj al dosiertipoj +Comment[es]=Configuración de asociaciones de archivos +Comment[et]=Failide seoste seadistamine +Comment[eu]=Fitxategi elkarketak konfiguratzen ditu +Comment[fa]=پیکربندی انجمنهای پرونده +Comment[fi]=Tiedostosidokset +Comment[fr]=Configuration des associations de fichiers +Comment[fy]=Hjir kinne jo de triemassosjaasjes ynstelle +Comment[gl]=Configurar as asociacións de ficheiros +Comment[he]=שינוי הגדרות שיוכי הקבצים +Comment[hi]=फ़ाइल असोसिएशन कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje pridruživanja datoteka +Comment[hu]=A fájlhozzárendelések módosítása +Comment[is]=Stilla skráavensl +Comment[it]=Configura associazioni dei file +Comment[ja]=ファイルの関連付けを設定 +Comment[ka]=ფაილთა მიბმის კონფიგურირება +Comment[kk]=Файл сәйкестіктерін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ទំនាក់​ទំនង​ឯកសារ +Comment[ko]=파일 연결 설정 +Comment[lo]=ບັນທຶກຄ່າປັບແຕ່ງຂອງການເລີ່ມລະບົບ +Comment[lt]=Konfigūruoti bylų sietis +Comment[lv]=Konfigurēt failu asociācijas +Comment[mk]=Конфигурирајте ги асоцијациите на датотеките +Comment[mn]=Файлын холбоосуудыг тохируулах +Comment[mt]=Ikkonfigura assoċjazzjoni ta' fajls +Comment[nb]=Sette opp filtilknytninger +Comment[nds]=Instellen, welk Dateitypen welk Programmen tohöört +Comment[ne]=फाइल संयोजन कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de bestandsassociaties instellen +Comment[nn]=Set opp filassosiasjonar +Comment[nso]=Beakanya dikopantsho tsa difaele +Comment[pa]=ਫਾਇਲ ਸਬੰਧ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja skojarzeń plików +Comment[pt]=Configuração das associações de ficheiros +Comment[pt_BR]=Configura associações de arquivos +Comment[ro]=Configurează asocierea fișierelor cu aplicații +Comment[ru]=Настройка привязки файлов +Comment[rw]=Kuboneza Ishyirahamwe ry'Idosiye +Comment[se]=Heivet fiilačatnagasaid +Comment[sk]=Nastavenie asociácií súborov +Comment[sl]=Nastavi datotečne povezave +Comment[sr]=Подешавање придружења фајловима +Comment[sr@Latn]=Podešavanje pridruženja fajlovima +Comment[sv]=Anpassa filbindningar +Comment[ta]=ஒருங்கிணைப்புகளை வடிவமை +Comment[tg]=Танзими вобастагони Файл +Comment[th]=ปรับแต่งการเรียกใช้งานแฟ้ม +Comment[tr]=Dosya bağıntılarını yapılandır +Comment[tt]=Biremnärne yazılımnarğa totaştırıp kileşterü +Comment[uk]=Налаштування асоціацій файлів +Comment[uz]=Fayl turi bilan bogʻliqlarni moslash +Comment[uz@cyrillic]=Файл тури билан боғлиқларни мослаш +Comment[ven]=Nzudzanyo yau fanyisa ha faela +Comment[vi]=Cấu hình kiểu tập tin +Comment[wa]=Apontiaedjes des elaxhaedjes di fitchîs +Comment[xh]=Qwalasela uloyamiso lwefayile +Comment[zh_CN]=配置文件关联 +Comment[zh_TW]=設定檔案關聯 +Comment[zu]=Hlanganisela ubudlelwano befayela + +Keywords=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern +Keywords[ar]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,ملفات,أنواع الملفات, أنواع Mime,ارتباطات الملفات,ملفات,الملفات,نسق,الأنساق,النسق. +Keywords[az]=Fayl Növləri,Fayl Əlaqələri,Mime Növləri,Fayl Qəlibləri,Fayllar +Keywords[be]=Тыпы файлаў,асацыяцыі файлаў,сувязі файлаў,тыпы MIME,шаблоны файлаў,файлы,шаблон,Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern +Keywords[bg]=файл, файлове, асоциация, асоциации, връзки, изпълнение, връзка, програма, тип на файл, тип, Filetypes, File Associations, Mime Types, File Patterns, Files, Pattern +Keywords[ca]=Tipus de fitxer,Associacions de fitxers,Tipus Mime,Patrons de fitxer,Fitxers,Patró +Keywords[cs]=Typy souborů,Asociace souborů,MIME typy,Vzory souborů,Soubory,Vzor +Keywords[csb]=ôrt lopków,pòwiązania lopków,ôrtë MIME,mùster lopków,lopczi,mùster +Keywords[cy]=Mathau o Ffeiliau,Cysylltiadau Ffeil,Mathau o Mime,Patrymau Ffeil,Ffeiliau,Patrwm +Keywords[da]=Filtyper,Filassociationer,Mimetyper,Filmønstre,Filer,mønstre +Keywords[de]=Dateitypen,Dateizuordnungen,MIME-Typen,Dateimuster,Filter,Muster,Dateien +Keywords[el]=Τύποι αρχείων,Συσχετίσεις αρχείων,Τύποι mime,Μοτίβα αρχείων,Αρχεία,Μοτίβο +Keywords[eo]=dosiertipoj,asocioj,MIME,dosieroj,ŝablonoj,dosieroj,MIME-tipoj +Keywords[es]=Tipos de archivo,Asociaciones de archivo,Tipos MIME,Patrones de archivo,Archivos,Patrón +Keywords[et]=Failitüübid,Failide seosed,MIME tüübid,failimustrid,failid,mustrid +Keywords[eu]=Fitxategi motak,Fitxategi elkarketak,Mime motak, Fitxategi ereduak,Fitxategiak,Eredua +Keywords[fa]=انواع پرونده، انجمنهای پرونده، انواع مایم، الگوهای پرونده، پرونده‌ها، الگو +Keywords[fi]=Tiedostotyypit,Tiedostosidokset,Mimetyypit,Tiedostokuviot,Tiedostot,Kuvio +Keywords[fo]=fíla,fílir,fíluslag +Keywords[fr]=types de fichiers,associations de fichiers,types MIME,motifs de fichier,fichiers,motif,extension,extensions de fichiers,applications +Keywords[fy]=Triemtypen,Triemtaheaksels,Triemassosjaasjes,mime types,Triempatroanen,Taheaksels,Triemmen +Keywords[gl]=Tipos de ficheiro, Asociacións de ficheiro,Tipos Mime,Patróns de ficheiro,Ficheiros,Patrón +Keywords[he]=תבניות קבצים,קבצים,תבנית,סוגי קבצים,שיוכי קבצים,טיפוסי,Mime,Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern +Keywords[hi]=फ़ाइल क़िस्म,फ़ाइल असोसिएशन,माइम क़िस्म,फ़ाइल पैटर्न,फ़ाइलें,पैटर्न +Keywords[hr]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,Vrste datoteka,Pridruživanje datoteka,MIME vrste,Uzorci datoteka,datoteke,uzorci +Keywords[hu]=fájltípusok,fájlhozzárendelések,MIME-típusok,fájlminták,fájlok,minta +Keywords[id]=TipeFile,Asosiasi File,Mime Types,Pattern File,Files,Pattern +Keywords[is]=Skráartegund,Skráavensl,Samhengi skráa,skráarbindingar,Mime-tög,síur,skrár,mynstur +Keywords[it]=tipi di file,associazioni file,tipi MIME,MIME,pattern dei file,file,motivi dei file,schemi +Keywords[ja]=ファイルタイプ,ファイルの関連付け,マイムタイプ,ファイルパターン,ファイル,パターン +Keywords[km]=ប្រភេទ​ឯកសារ,ទំនាក់​ទំនង​ឯកសារ,ប្រភេទ Mime,លំនាំ​ឯកសារ,ឯកសារ,លំនាំ +Keywords[lt]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,Bylų tipai,Bylų Asociacijos,Mime Tipai,Bylų modeliai,Bylos,Modeliai, bylų sietys +Keywords[lv]=Failutipi,Failu Asociācijas,Maime Tipi,Failu Maskas,Faili,Maskas +Keywords[mk]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,Типови на датотеки,Асоцијации на датотеки,типови,Датотеки +Keywords[mn]=Файлын төрөл,Файлын холбоос,MIME-төрөл,Файл загвар,Шүүлтүүр,Загвар,Файлууд +Keywords[mt]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,Fajls,Assoċjazzjoni,Assoċjazzjonijiet +Keywords[nb]=Filtyper,Filtilknytninger,Mime-typer,Filmønster,filer +Keywords[nds]=Dateitypen,Datei-Tohören,Mime Typen,Dateimuster,Datei,Muster +Keywords[ne]=फाइल प्रकार, फाइल संयोजन, माइम प्रकार, फाइल बाँन्की, फाइलहरू, बाँन्की +Keywords[nl]=bestandstypen,bestandsextensies,bestandsassociaties,mime types,bestandspatronen,extensies,bestanden +Keywords[nn]=filtypar,filtilknytingar,MIME-typar,filmønster,filer,mønster +Keywords[nso]=Mehuta ya difaele,Dikopantsho tsa Difaele,Mehuta ya Kekiso,Mekgwa ya Difaele,Difaele,Mokgwa +Keywords[pa]=Filetypes,File Associations,Mime Types,File Patterns,ਫਾਇਲਾਂ,Pattern,ਫਾਇਲ ਕਿਸਮ,ਫਾਇਲ ਸਬੰਧ +Keywords[pl]=Typy plików,skojarzenia plików,typy MIME,wzorce plików,pliki,wzorzec +Keywords[pt]=tipos de ficheiros,associações a ficheiros,tipos mime,padrões de ficheiros,ficheiros,padrão +Keywords[pt_BR]=tipos de arquivo,associações de arquivo,tipos MIME,padrões de arquivo,arquivos,MIME,padrão +Keywords[ro]=tipuri de fișiere,asocieri fișiere,tipuri MIME,modele de fișiere,fișiere +Keywords[rw]=Amokodosiye,Amashyirahamwe dosiye,Amoko Mime,Amashusho Dosiye,Amadosiye,Igishushanyo +Keywords[se]=Fiilašlájat,Fiilačatnagasat,Mime-šlájat,Fiilaminsttar, fiillat,minsttar +Keywords[sk]=Typy súborov,Prípony,Mime typy,Súbory,Vzorky,Vzorky súborov +Keywords[sl]=vrste datotek,vezi datotek,vzorci datotek,datoteke,vzorec +Keywords[sr]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,врсте фајлова,узорци фајлова,узорак,придружење,MIME типови +Keywords[sr@Latn]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,vrste fajlova,uzorci fajlova,uzorak,pridruženje,MIME tipovi +Keywords[sv]=Filtyper,Filbindningar,Mime-typer,Filmönster,Filer,Mönster +Keywords[ta]=கோப்பு வகைகள்,கோப்பு சேர்ப்புகள், மைம் வகைகள், கோப்பு மாதிரிகள்,கோப்புகள்,மாதிரிகள் +Keywords[th]=ประเภทแฟ้ม,กำหนดการใช้แฟ้ม,ประเภท Mime,รูปแบบแฟ้ม,แฟ้ม,รูปแบบ +Keywords[tr]=Dosya Türleri,Dosya İlişkileri,Mime Türleri,Dosya Kalıpları,Dosyalar +Keywords[uk]=типи файлів,асоціації файлів,типи MIME,MIME,шаблони файлів,файли,взірці,файли +Keywords[uz]=Fayl turlari,Fayl bilan bogʻlangan dasturlar,MIME turlari,Fayl namunalari,Fayllar,Namuna +Keywords[uz@cyrillic]=Файл турлари,Файл билан боғланган дастурлар,MIME турлари,Файл намуналари,Файллар,Намуна +Keywords[ven]=Tshakha dza faela,U fanyisa ha Faela,Tshakha dza Maimi,Phathene ya Faela,Dzifaela,Phathene +Keywords[vi]=Kiểu tập tin,Đuôi tập tin,Kiểu MIME,Mẫu tập tin,Tập tin, Mẫu +Keywords[wa]=Sôre di fitchî,sôrt di fitchî,elaxhaedje di fitchî,Sôre MIME, Sôrt MIME,Modeles di fitchî,Fitchîs,Modele +Keywords[xh]=Iindidi zefayile,Unxubelelaniso lwefayile,Iindidi zeMime,Imilinganiselo yefayile,Iifayile,Umlinganiselo +Keywords[zh_CN]=Filetypes,File Associations,Mime Types,File Patterns,Files,文件类型,文件关联,Mime 类型,文件模式,文件 +Keywords[zh_TW]=Filetypes,File Associations,Mime Types,File Patterns,Files,Pattern,檔案類型,檔案關聯,MIME 類型,檔案樣式,檔案,樣式 +Keywords[zu]=Izinhlobo zamafayela, Ubudlelwano bamafayela,Izinhlobo zamafayela,Amaphethini amafayela,Iphethini + diff --git a/kcontrol/filetypes/filetypesview.cpp b/kcontrol/filetypes/filetypesview.cpp new file mode 100644 index 000000000..4088e9eee --- /dev/null +++ b/kcontrol/filetypes/filetypesview.cpp @@ -0,0 +1,440 @@ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "newtypedlg.h" +#include "filetypedetails.h" +#include "filegroupdetails.h" +#include "filetypesview.h" +#include + +FileTypesView::FileTypesView(QWidget *p, const char *name) + : KCModule(p, name) +{ + m_konqConfig = KSharedConfig::openConfig("konquerorrc", false, false); + + setQuickHelp( i18n("

File Associations

" + " This module allows you to choose which applications are associated" + " with a given type of file. File types are also referred to MIME types" + " (MIME is an acronym which stands for \"Multipurpose Internet Mail" + " Extensions\".)

A file association consists of the following:" + "

  • Rules for determining the MIME-type of a file, for example" + " the filename pattern *.kwd, which means 'all files with names that end" + " in .kwd', is associated with the MIME type \"x-kword\";
  • " + "
  • A short description of the MIME-type, for example the description" + " of the MIME type \"x-kword\" is simply 'KWord document';
  • " + "
  • An icon to be used for displaying files of the given MIME-type," + " so that you can easily identify the type of file in, say, a Konqueror" + " view (at least for the types you use often);
  • " + "
  • A list of the applications which can be used to open files of the" + " given MIME-type -- if more than one application can be used then the" + " list is ordered by priority.
" + " You may be surprised to find that some MIME types have no associated" + " filename patterns; in these cases, Konqueror is able to determine the" + " MIME-type by directly examining the contents of the file.")); + + setButtons(Help | Apply | Cancel | Ok); + QString wtstr; + + QHBoxLayout *l = new QHBoxLayout(this, 0, KDialog::marginHint()); + QGridLayout *leftLayout = new QGridLayout(0, 4, 3); + leftLayout->setSpacing( KDialog::spacingHint() ); + leftLayout->setColStretch(1, 1); + + l->addLayout( leftLayout ); + + QLabel *patternFilterLBL = new QLabel(i18n("F&ind filename pattern:"), this); + leftLayout->addMultiCellWidget(patternFilterLBL, 0, 0, 0, 2); + + patternFilterLE = new KLineEdit(this); + patternFilterLBL->setBuddy( patternFilterLE ); + leftLayout->addMultiCellWidget(patternFilterLE, 1, 1, 0, 2); + + connect(patternFilterLE, SIGNAL(textChanged(const QString &)), + this, SLOT(slotFilter(const QString &))); + + wtstr = i18n("Enter a part of a filename pattern. Only file types with a " + "matching file pattern will appear in the list."); + + QWhatsThis::add( patternFilterLE, wtstr ); + QWhatsThis::add( patternFilterLBL, wtstr ); + + typesLV = new KListView(this); + typesLV->setRootIsDecorated(true); + typesLV->setFullWidth(true); + + typesLV->addColumn(i18n("Known Types")); + leftLayout->addMultiCellWidget(typesLV, 2, 2, 0, 2); + connect(typesLV, SIGNAL(selectionChanged(QListViewItem *)), + this, SLOT(updateDisplay(QListViewItem *))); + connect(typesLV, SIGNAL(doubleClicked(QListViewItem *)), + this, SLOT(slotDoubleClicked(QListViewItem *))); + + QWhatsThis::add( typesLV, i18n("Here you can see a hierarchical list of" + " the file types which are known on your system. Click on the '+' sign" + " to expand a category, or the '-' sign to collapse it. Select a file type" + " (e.g. text/html for HTML files) to view/edit the information for that" + " file type using the controls on the right.") ); + + QPushButton *addTypeB = new QPushButton(i18n("Add..."), this); + connect(addTypeB, SIGNAL(clicked()), SLOT(addType())); + leftLayout->addWidget(addTypeB, 3, 0); + + QWhatsThis::add( addTypeB, i18n("Click here to add a new file type.") ); + + m_removeTypeB = new QPushButton(i18n("&Remove"), this); + connect(m_removeTypeB, SIGNAL(clicked()), SLOT(removeType())); + leftLayout->addWidget(m_removeTypeB, 3, 2); + m_removeTypeB->setEnabled(false); + + QWhatsThis::add( m_removeTypeB, i18n("Click here to remove the selected file type.") ); + + // For the right panel, prepare a widget stack + m_widgetStack = new QWidgetStack(this); + + l->addWidget( m_widgetStack ); + + // File Type Details + m_details = new FileTypeDetails( m_widgetStack ); + connect( m_details, SIGNAL( changed(bool) ), + this, SLOT( setDirty(bool) ) ); + connect( m_details, SIGNAL( embedMajor(const QString &, bool &) ), + this, SLOT( slotEmbedMajor(const QString &, bool &))); + m_widgetStack->addWidget( m_details, 1 /*id*/ ); + + // File Group Details + m_groupDetails = new FileGroupDetails( m_widgetStack ); + connect( m_groupDetails, SIGNAL( changed(bool) ), + this, SLOT( setDirty(bool) ) ); + m_widgetStack->addWidget( m_groupDetails, 2 /*id*/ ); + + // Widget shown on startup + m_emptyWidget = new QLabel( i18n("Select a file type by name or by extension"), m_widgetStack); + m_emptyWidget->setAlignment(AlignCenter); + + m_widgetStack->addWidget( m_emptyWidget, 3 /*id*/ ); + + m_widgetStack->raiseWidget( m_emptyWidget ); + + QTimer::singleShot( 0, this, SLOT( init() ) ); // this takes some time + + connect( KSycoca::self(), SIGNAL( databaseChanged() ), SLOT( slotDatabaseChanged() ) ); +} + +FileTypesView::~FileTypesView() +{ +} + +void FileTypesView::setDirty(bool state) +{ + emit changed(state); + m_dirty = state; +} + +void FileTypesView::init() +{ + show(); + setEnabled( false ); + + setCursor( KCursor::waitCursor() ); + readFileTypes(); + unsetCursor(); + + setDirty(false); + setEnabled( true ); +} + +// only call this method once on startup, then never again! Otherwise, newly +// added Filetypes will be lost. +void FileTypesView::readFileTypes() +{ + typesLV->clear(); + m_majorMap.clear(); + m_itemList.clear(); + TypesListItem::reset(); + + TypesListItem *groupItem; + KMimeType::List mimetypes = KMimeType::allMimeTypes(); + QValueListIterator it2(mimetypes.begin()); + for (; it2 != mimetypes.end(); ++it2) { + QString mimetype = (*it2)->name(); + int index = mimetype.find("/"); + QString maj = mimetype.left(index); + QString min = mimetype.right(mimetype.length() - index+1); + + QMapIterator mit = m_majorMap.find( maj ); + if ( mit == m_majorMap.end() ) { + groupItem = new TypesListItem( typesLV, maj ); + m_majorMap.insert( maj, groupItem ); + } + else + groupItem = mit.data(); + + TypesListItem *item = new TypesListItem(groupItem, (*it2)); + m_itemList.append( item ); + } + updateDisplay(0L); + +} + +void FileTypesView::slotEmbedMajor(const QString &major, bool &embed) +{ + TypesListItem *groupItem; + QMapIterator mit = m_majorMap.find( major ); + if ( mit == m_majorMap.end() ) + return; + + groupItem = mit.data(); + + embed = (groupItem->autoEmbed() == 0); +} + +void FileTypesView::slotFilter(const QString & patternFilter) +{ + // one of the few ways to clear a listview without destroying the + // listviewitems and without making QListView crash. + QListViewItem *item; + while ( (item = typesLV->firstChild()) ) { + while ( item->firstChild() ) + item->takeItem( item->firstChild() ); + + typesLV->takeItem( item ); + } + + // insert all items and their group that match the filter + QPtrListIterator it( m_itemList ); + while ( it.current() ) { + if ( patternFilter.isEmpty() || + !((*it)->patterns().grep( patternFilter, false )).isEmpty() ) { + + TypesListItem *group = m_majorMap[ (*it)->majorType() ]; + // QListView makes sure we don't insert a group-item more than once + typesLV->insertItem( group ); + group->insertItem( *it ); + } + ++it; + } +} + +void FileTypesView::addType() +{ + QStringList allGroups; + QMapIterator it = m_majorMap.begin(); + while ( it != m_majorMap.end() ) { + allGroups.append( it.key() ); + ++it; + } + + NewTypeDialog m(allGroups, this); + + if (m.exec()) { + QListViewItemIterator it(typesLV); + QString loc = m.group() + "/" + m.text() + ".desktop"; + loc = locateLocal("mime", loc); + KMimeType::Ptr mimetype = new KMimeType(loc, + m.group() + "/" + m.text(), + QString(), QString(), + QStringList()); + + TypesListItem *group = m_majorMap[ m.group() ]; + if ( !group ) + { + //group = new TypesListItem( + //TODO ! (The combo in NewTypeDialog must be made editable again when that happens) + Q_ASSERT(group); + } + + // find out if our group has been filtered out -> insert if necessary + QListViewItem *item = typesLV->firstChild(); + bool insert = true; + while ( item ) { + if ( item == group ) { + insert = false; + break; + } + item = item->nextSibling(); + } + if ( insert ) + typesLV->insertItem( group ); + + TypesListItem *tli = new TypesListItem(group, mimetype, true); + m_itemList.append( tli ); + + group->setOpen(true); + typesLV->setSelected(tli, true); + + setDirty(true); + } +} + +void FileTypesView::removeType() +{ + TypesListItem *current = (TypesListItem *) typesLV->currentItem(); + + if ( !current ) + return; + + // Can't delete groups + if ( current->isMeta() ) + return; + // nor essential mimetypes + if ( current->isEssential() ) + return; + + QListViewItem *li = current->itemAbove(); + if (!li) + li = current->itemBelow(); + if (!li) + li = current->parent(); + + removedList.append(current->name()); + current->parent()->takeItem(current); + m_itemList.removeRef( current ); + setDirty(true); + + if ( li ) + typesLV->setSelected(li, true); +} + +void FileTypesView::slotDoubleClicked(QListViewItem *item) +{ + if ( !item ) return; + item->setOpen( !item->isOpen() ); +} + +void FileTypesView::updateDisplay(QListViewItem *item) +{ + if (!item) + { + m_widgetStack->raiseWidget( m_emptyWidget ); + m_removeTypeB->setEnabled(false); + return; + } + + bool wasDirty = m_dirty; + + TypesListItem *tlitem = (TypesListItem *) item; + if (tlitem->isMeta()) // is a group + { + m_widgetStack->raiseWidget( m_groupDetails ); + m_groupDetails->setTypeItem( tlitem ); + m_removeTypeB->setEnabled(false); + } + else + { + m_widgetStack->raiseWidget( m_details ); + m_details->setTypeItem( tlitem ); + m_removeTypeB->setEnabled( !tlitem->isEssential() ); + } + + // Updating the display indirectly called change(true) + if ( !wasDirty ) + setDirty(false); +} + +bool FileTypesView::sync( QValueList& itemsModified ) +{ + bool didIt = false; + // first, remove those items which we are asked to remove. + QStringList::Iterator it(removedList.begin()); + QString loc; + + for (; it != removedList.end(); ++it) { + didIt = true; + KMimeType::Ptr m_ptr = KMimeType::mimeType(*it); + + loc = m_ptr->desktopEntryPath(); + loc = locateLocal("mime", loc); + + KDesktopFile config(loc, false, "mime"); + config.writeEntry("Type", "MimeType"); + config.writeEntry("MimeType", m_ptr->name()); + config.writeEntry("Hidden", true); + } + + // now go through all entries and sync those which are dirty. + // don't use typesLV, it may be filtered + QMapIterator it1 = m_majorMap.begin(); + while ( it1 != m_majorMap.end() ) { + TypesListItem *tli = *it1; + if (tli->isDirty()) { + kdDebug() << "Entry " << tli->name() << " is dirty. Saving." << endl; + tli->sync(); + itemsModified.append( tli ); + didIt = true; + } + ++it1; + } + QPtrListIterator it2( m_itemList ); + while ( it2.current() ) { + TypesListItem *tli = *it2; + if (tli->isDirty()) { + kdDebug() << "Entry " << tli->name() << " is dirty. Saving." << endl; + tli->sync(); + itemsModified.append( tli ); + didIt = true; + } + ++it2; + } + + m_konqConfig->sync(); + + setDirty(false); + return didIt; +} + +void FileTypesView::load() +{ + readFileTypes(); +} + +void FileTypesView::save() +{ + m_itemsModified.clear(); + if (sync(m_itemsModified)) { + // only rebuild if sync() was necessary + KService::rebuildKSycoca(this); + KIPC::sendMessageAll(KIPC::SettingsChanged); + } +} + +void FileTypesView::slotDatabaseChanged() +{ + if ( KSycoca::self()->isChanged( "mime" ) ) + { + // ksycoca has new KMimeTypes objects for us, make sure to update + // our 'copies' to be in sync with it. Not important for OK, but + // important for Apply (how to differentiate those 2?). + // See BR 35071. + QValueList::Iterator it = m_itemsModified.begin(); + for( ; it != m_itemsModified.end(); ++it ) { + QString name = (*it)->name(); + if ( removedList.find( name ) == removedList.end() ) // if not deleted meanwhile + (*it)->refresh(); + } + m_itemsModified.clear(); + } +} + +void FileTypesView::defaults() +{ +} + +#include "filetypesview.moc" + diff --git a/kcontrol/filetypes/filetypesview.h b/kcontrol/filetypes/filetypesview.h new file mode 100644 index 000000000..bc6323d85 --- /dev/null +++ b/kcontrol/filetypes/filetypesview.h @@ -0,0 +1,73 @@ +#ifndef _FILETYPESVIEW_H +#define _FILETYPESVIEW_H + +#include +#include + +#include +#include + +#include "typeslistitem.h" + +class QLabel; +class KListView; +class QListViewItem; +class QListBox; +class QPushButton; +class KIconButton; +class QLineEdit; +class QComboBox; +class FileTypeDetails; +class FileGroupDetails; +class QWidgetStack; + +class FileTypesView : public KCModule +{ + Q_OBJECT +public: + FileTypesView(QWidget *p = 0, const char *name = 0); + ~FileTypesView(); + + void load(); + void save(); + void defaults(); + +protected slots: + /** fill in the various graphical elements, set up other stuff. */ + void init(); + + void addType(); + void removeType(); + void updateDisplay(QListViewItem *); + void slotDoubleClicked(QListViewItem *); + void slotFilter(const QString &patternFilter); + void setDirty(bool state); + + void slotDatabaseChanged(); + void slotEmbedMajor(const QString &major, bool &embed); + +protected: + void readFileTypes(); + bool sync( QValueList& itemsModified ); + +private: + KListView *typesLV; + QPushButton *m_removeTypeB; + + QWidgetStack * m_widgetStack; + FileTypeDetails * m_details; + FileGroupDetails * m_groupDetails; + QLabel * m_emptyWidget; + + QLineEdit *patternFilterLE; + QStringList removedList; + bool m_dirty; + QMap m_majorMap; + QPtrList m_itemList; + + QValueList m_itemsModified; + + KSharedConfig::Ptr m_konqConfig; +}; + +#endif diff --git a/kcontrol/filetypes/keditfiletype.cpp b/kcontrol/filetypes/keditfiletype.cpp new file mode 100644 index 000000000..6c5c4eb6c --- /dev/null +++ b/kcontrol/filetypes/keditfiletype.cpp @@ -0,0 +1,182 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ +#include "filetypedetails.h" +#include "typeslistitem.h" +#include "keditfiletype.h" + +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef Q_WS_X11 +#include +#include +#endif + +FileTypeDialog::FileTypeDialog( KMimeType::Ptr mime ) + : KDialogBase( 0L, 0, false, QString::null, /* Help | */ Cancel | Apply | Ok, + Ok, false ) +{ + init( mime, false ); +} + +FileTypeDialog::FileTypeDialog( KMimeType::Ptr mime, bool newItem ) + : KDialogBase( 0L, 0, false, QString::null, /* Help | */ Cancel | Apply | Ok, + Ok, false ) +{ + init( mime, newItem ); +} + +void FileTypeDialog::init( KMimeType::Ptr mime, bool newItem ) +{ + m_details = new FileTypeDetails( this ); + QListView * dummyListView = new QListView( m_details ); + dummyListView->hide(); + m_item = new TypesListItem( dummyListView, mime, newItem ); + m_details->setTypeItem( m_item ); + + // This code is very similar to kcdialog.cpp + setMainWidget( m_details ); + connect(m_details, SIGNAL(changed(bool)), this, SLOT(clientChanged(bool))); + // TODO setHelp() + enableButton(Apply, false); + + connect( KSycoca::self(), SIGNAL( databaseChanged() ), SLOT( slotDatabaseChanged() ) ); +} + +void FileTypeDialog::save() +{ + if (m_item->isDirty()) { + m_item->sync(); + KService::rebuildKSycoca(this); + } +} + +void FileTypeDialog::slotApply() +{ + save(); +} + +void FileTypeDialog::slotOk() +{ + save(); + accept(); +} + +void FileTypeDialog::clientChanged(bool state) +{ + // enable/disable buttons + enableButton(User1, state); + enableButton(Apply, state); +} + +void FileTypeDialog::slotDatabaseChanged() +{ + if ( KSycoca::self()->isChanged( "mime" ) ) + { + m_item->refresh(); + } +} + +#include "keditfiletype.moc" + +static KCmdLineOptions options[] = +{ + { "parent ", I18N_NOOP("Makes the dialog transient for the window specified by winid"), 0 }, + { "+mimetype", I18N_NOOP("File type to edit (e.g. text/html)"), 0 }, + KCmdLineLastOption +}; + +int main(int argc, char ** argv) +{ + KLocale::setMainCatalogue("filetypes"); + KAboutData aboutData( "keditfiletype", I18N_NOOP("KEditFileType"), "1.0", + I18N_NOOP("KDE file type editor - simplified version for editing a single file type"), + KAboutData::License_GPL, + I18N_NOOP("(c) 2000, KDE developers") ); + aboutData.addAuthor("Preston Brown",0, "pbrown@kde.org"); + aboutData.addAuthor("David Faure",0, "faure@kde.org"); + + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + KApplication app; + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->count() == 0) + KCmdLineArgs::usage(); + + QString arg = args->arg(0); + + bool createType = arg.startsWith( "*" ); + + KMimeType::Ptr mime; + + if ( createType ) { + QString mimeString = "application/x-kdeuser%1"; + QString loc; + int inc = 0; + do { + ++inc; + loc = locateLocal( "mime", mimeString.arg( inc ) + ".desktop" ); + } + while ( QFile::exists( loc ) ); + + QStringList patterns; + if ( arg.length() > 2 ) + patterns << arg.lower() << arg.upper(); + QString comment; + if ( arg.startsWith( "*." ) && arg.length() >= 3 ) { + QString type = arg.mid( 3 ).prepend( arg[2].upper() ); + comment = i18n( "%1 File" ).arg( type ); + } + mime = new KMimeType( loc, mimeString.arg( inc ), QString::null, comment, patterns ); + } + else { + mime = KMimeType::mimeType( arg ); + if (!mime) + kdFatal() << "Mimetype " << arg << " not found" << endl; + } + + FileTypeDialog dlg( mime, createType ); +#if defined Q_WS_X11 + if( args->isSet( "parent" )) { + bool ok; + long id = args->getOption("parent").toLong(&ok); + if (ok) + XSetTransientForHint( qt_xdisplay(), dlg.winId(), id ); + } +#endif + args->clear(); + if ( !createType ) + dlg.setCaption( i18n("Edit File Type %1").arg(mime->name()) ); + else { + dlg.setCaption( i18n("Create New File Type %1").arg(mime->name()) ); + dlg.enableButton( KDialogBase::Apply, true ); + } + app.setMainWidget( &dlg ); + dlg.show(); // non-modal + + return app.exec(); +} + diff --git a/kcontrol/filetypes/keditfiletype.h b/kcontrol/filetypes/keditfiletype.h new file mode 100644 index 000000000..3ae7c0e35 --- /dev/null +++ b/kcontrol/filetypes/keditfiletype.h @@ -0,0 +1,54 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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 __keditfiletype_h +#define __keditfiletype_h + +#include +#include + +class TypesListItem; +class FileTypeDetails; + +// A dialog for ONE file type to be edited. +class FileTypeDialog : public KDialogBase +{ + Q_OBJECT +public: + FileTypeDialog( KMimeType::Ptr mime ); + FileTypeDialog( KMimeType::Ptr mime, bool newItem ); + +protected slots: + + //virtual void slotDefault(); + //virtual void slotUser1(); // Reset + virtual void slotApply(); + virtual void slotOk(); + void clientChanged(bool state); + void slotDatabaseChanged(); + +protected: + void save(); + +private: + void init( KMimeType::Ptr mime, bool newItem ); + FileTypeDetails * m_details; + TypesListItem * m_item; +}; + +#endif + diff --git a/kcontrol/filetypes/kservicelistwidget.cpp b/kcontrol/filetypes/kservicelistwidget.cpp new file mode 100644 index 000000000..ed6819a37 --- /dev/null +++ b/kcontrol/filetypes/kservicelistwidget.cpp @@ -0,0 +1,444 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Waldo Bastian + Copyright (C) 2003 David Faure + Copyright (C) 2002 Daniel Molkentin + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "kservicelistwidget.h" +#include "kserviceselectdlg.h" +#include "typeslistitem.h" +#include +#include + +KServiceListItem::KServiceListItem( KService *pService, int kind ) + : QListBoxText(), desktopPath(pService->desktopEntryPath()) +{ + if ( kind == KServiceListWidget::SERVICELIST_APPLICATIONS ) + setText( pService->name() ); + else + setText( i18n( "%1 (%2)" ).arg( pService->name() ).arg( pService->desktopEntryName() ) ); + + bool isApplication = pService->type() == "Application"; + if (!isApplication) + localPath = locateLocal("services", desktopPath); + else + localPath = pService->locateLocal(); +} + +bool KServiceListItem::isImmutable() +{ + return !checkAccess(localPath, W_OK); +} + +KServiceListWidget::KServiceListWidget(int kind, QWidget *parent, const char *name) + : QGroupBox( kind == SERVICELIST_APPLICATIONS ? i18n("Application Preference Order") + : i18n("Services Preference Order"), parent, name ), + m_kind( kind ), m_item( 0L ) +{ + QWidget * gb = this; + QGridLayout * grid = new QGridLayout(gb, 7, 2, KDialog::marginHint(), + KDialog::spacingHint()); + grid->addRowSpacing(0, fontMetrics().lineSpacing()); + grid->setRowStretch(1, 1); + grid->setRowStretch(2, 1); + grid->setRowStretch(3, 1); + grid->setRowStretch(4, 1); + grid->setRowStretch(5, 1); + grid->setRowStretch(6, 1); + + servicesLB = new QListBox(gb); + connect(servicesLB, SIGNAL(highlighted(int)), SLOT(enableMoveButtons(int))); + grid->addMultiCellWidget(servicesLB, 1, 6, 0, 0); + connect( servicesLB, SIGNAL( doubleClicked ( QListBoxItem * )), this, SLOT( editService())); + + QString wtstr = + (kind == SERVICELIST_APPLICATIONS ? + i18n("This is a list of applications associated with files of the selected" + " file type. This list is shown in Konqueror's context menus when you select" + " \"Open With...\". If more than one application is associated with this file type," + " then the list is ordered by priority with the uppermost item taking precedence" + " over the others.") : + i18n("This is a list of services associated with files of the selected" + " file type. This list is shown in Konqueror's context menus when you select" + " a \"Preview with...\" option. If more than one application is associated with this file type," + " then the list is ordered by priority with the uppermost item taking precedence" + " over the others.")); + + QWhatsThis::add( gb, wtstr ); + QWhatsThis::add( servicesLB, wtstr ); + + servUpButton = new QPushButton(i18n("Move &Up"), gb); + servUpButton->setEnabled(false); + connect(servUpButton, SIGNAL(clicked()), SLOT(promoteService())); + grid->addWidget(servUpButton, 2, 1); + + QWhatsThis::add( servUpButton, kind == SERVICELIST_APPLICATIONS ? + i18n("Assigns a higher priority to the selected\n" + "application, moving it up in the list. Note: This\n" + "only affects the selected application if the file type is\n" + "associated with more than one application.") : + i18n("Assigns a higher priority to the selected\n" + "service, moving it up in the list.")); + + servDownButton = new QPushButton(i18n("Move &Down"), gb); + servDownButton->setEnabled(false); + connect(servDownButton, SIGNAL(clicked()), SLOT(demoteService())); + grid->addWidget(servDownButton, 3, 1); + + QWhatsThis::add( servDownButton, kind == SERVICELIST_APPLICATIONS ? + i18n("Assigns a lower priority to the selected\n" + "application, moving it down in the list. Note: This \n" + "only affects the selected application if the file type is\n" + "associated with more than one application."): + i18n("Assigns a lower priority to the selected\n" + "service, moving it down in the list.")); + + servNewButton = new QPushButton(i18n("Add..."), gb); + servNewButton->setEnabled(false); + connect(servNewButton, SIGNAL(clicked()), SLOT(addService())); + grid->addWidget(servNewButton, 1, 1); + + QWhatsThis::add( servNewButton, i18n( "Add a new application for this file type." ) ); + + + servEditButton = new QPushButton(i18n("Edit..."), gb); + servEditButton->setEnabled(false); + connect(servEditButton, SIGNAL(clicked()), SLOT(editService())); + grid->addWidget(servEditButton, 4, 1); + + QWhatsThis::add( servEditButton, i18n( "Edit command line of the selected application." ) ); + + + servRemoveButton = new QPushButton(i18n("Remove"), gb); + servRemoveButton->setEnabled(false); + connect(servRemoveButton, SIGNAL(clicked()), SLOT(removeService())); + grid->addWidget(servRemoveButton, 5, 1); + + QWhatsThis::add( servRemoveButton, i18n( "Remove the selected application from the list." ) ); +} + +void KServiceListWidget::setTypeItem( TypesListItem * item ) +{ + m_item = item; + if ( servNewButton ) + servNewButton->setEnabled(true); + // will need a selection + servUpButton->setEnabled(false); + servDownButton->setEnabled(false); + + if ( servRemoveButton ) + servRemoveButton->setEnabled(false); + if ( servEditButton ) + servEditButton->setEnabled(false); + + servicesLB->clear(); + servicesLB->setEnabled(false); + + if ( item ) + { + QStringList services = ( m_kind == SERVICELIST_APPLICATIONS ) + ? item->appServices() + : item->embedServices(); + + if (services.count() == 0) { + servicesLB->insertItem(i18n("None")); + } else { + for ( QStringList::Iterator it = services.begin(); + it != services.end(); it++ ) + { + KService::Ptr pService = KService::serviceByDesktopPath( *it ); + + if (pService) + servicesLB->insertItem( new KServiceListItem(pService, m_kind) ); + } + servicesLB->setEnabled(true); + } + } +} + +void KServiceListWidget::promoteService() +{ + if (!servicesLB->isEnabled()) { + KNotifyClient::beep(); + return; + } + + unsigned int selIndex = servicesLB->currentItem(); + if (selIndex == 0) { + KNotifyClient::beep(); + return; + } + + QListBoxItem *selItem = servicesLB->item(selIndex); + servicesLB->takeItem(selItem); + servicesLB->insertItem(selItem, selIndex-1); + servicesLB->setCurrentItem(selIndex - 1); + + updatePreferredServices(); + + emit changed(true); +} + +void KServiceListWidget::demoteService() +{ + if (!servicesLB->isEnabled()) { + KNotifyClient::beep(); + return; + } + + unsigned int selIndex = servicesLB->currentItem(); + if (selIndex == servicesLB->count() - 1) { + KNotifyClient::beep(); + return; + } + + QListBoxItem *selItem = servicesLB->item(selIndex); + servicesLB->takeItem(selItem); + servicesLB->insertItem(selItem, selIndex+1); + servicesLB->setCurrentItem(selIndex + 1); + + updatePreferredServices(); + + emit changed(true); +} + +void KServiceListWidget::addService() +{ + if (!m_item) + return; + + KService::Ptr service = 0L; + if ( m_kind == SERVICELIST_APPLICATIONS ) + { + KOpenWithDlg dlg(m_item->name(), QString::null, 0L); + dlg.setSaveNewApplications(true); + if (dlg.exec() != QDialog::Accepted) + return; + + service = dlg.service(); + + Q_ASSERT(service); + if (!service) + return; // Don't crash if KOpenWith wasn't able to create service. + } + else + { + KServiceSelectDlg dlg(m_item->name(), QString::null, 0L); + if (dlg.exec() != QDialog::Accepted) + return; + service = dlg.service(); + Q_ASSERT(service); + if (!service) + return; + } + + // if None is the only item, then there currently is no default + if (servicesLB->text(0) == i18n("None")) { + servicesLB->removeItem(0); + servicesLB->setEnabled(true); + } + else + { + // check if it is a duplicate entry + for (unsigned int index = 0; index < servicesLB->count(); index++) + if (static_cast( servicesLB->item(index) )->desktopPath + == service->desktopEntryPath()) + return; + } + + servicesLB->insertItem( new KServiceListItem(service, m_kind), 0 ); + servicesLB->setCurrentItem(0); + + updatePreferredServices(); + + emit changed(true); +} + +void KServiceListWidget::editService() +{ + if (!m_item) + return; + int selected = servicesLB->currentItem(); + if ( selected >= 0 ) { + + // Only edit applications, not services as + // they don't have any parameters + if ( m_kind == SERVICELIST_APPLICATIONS ) + { + // Just like popping up an add dialog except that we + // pass the current command line as a default + QListBoxItem *selItem = servicesLB->item(selected); + + KService::Ptr service = KService::serviceByDesktopPath( + ((KServiceListItem*)selItem)->desktopPath ); + if (!service) + return; + + QString path = service->desktopEntryPath(); + + // If the path to the desktop file is relative, try to get the full + // path from KStdDirs. + path = locate("apps", path); + KURL serviceURL; + serviceURL.setPath( path ); + KFileItem item( serviceURL, "application/x-desktop", KFileItem::Unknown ); + KPropertiesDialog dlg( &item, this, 0, true /*modal*/, false /*no auto-show*/ ); + if ( dlg.exec() != QDialog::Accepted ) + return; + + // Reload service + service = KService::serviceByDesktopPath( + ((KServiceListItem*)selItem)->desktopPath ); + if (!service) + return; + + // Remove the old one... + servicesLB->removeItem( selected ); + + // ...check that it's not a duplicate entry... + bool addIt = true; + for (unsigned int index = 0; index < servicesLB->count(); index++) + if (static_cast( servicesLB->item(index) )->desktopPath + == service->desktopEntryPath()) { + addIt = false; + break; + } + + // ...and add it in the same place as the old one: + if ( addIt ) { + servicesLB->insertItem( new KServiceListItem(service, m_kind), selected ); + servicesLB->setCurrentItem(selected); + } + + updatePreferredServices(); + + emit changed(true); + } + } +} + +void KServiceListWidget::removeService() +{ + if (!m_item) return; + // Here are some strings already so that we don't have to break translations + // later on. + QString msg1 = i18n("The service %1 can not be removed."); + QString msg2 = i18n("The service is listed here because it has been associated " + "with the %1 (%2) file type and files of type " + "%3 (%4) are per definition also of type " + "%5."); + QString msg3 = i18n("Either select the %1 file type to remove the " + "service from there or move the service down " + "to deprecate it."); + QString msg4 = i18n("Do you want to remove the service from the %1 " + "file type or from the %2 file type?"); + + int selected = servicesLB->currentItem(); + + if ( selected >= 0 ) { + // Check if service is associated with this mimetype or with one of its parents + KServiceListItem *serviceItem = static_cast(servicesLB->item(selected)); + KMimeType::Ptr mimetype = m_item->findImplicitAssociation(serviceItem->desktopPath); + if (serviceItem->isImmutable()) + { + KMessageBox::sorry(this, i18n("You are not authorized to remove this service.")); + } + else if (mimetype) + { + KMessageBox::sorry(this, ""+msg1.arg(serviceItem->text())+"

"+ + msg2.arg(mimetype->name()).arg(mimetype->comment()). + arg(m_item->name()).arg(m_item->comment()). + arg(mimetype->name())+"

"+ + msg3.arg(mimetype->name())); + } + else + { + servicesLB->removeItem( selected ); + updatePreferredServices(); + + emit changed(true); + } + } + + if ( servRemoveButton && servicesLB->currentItem() == -1 ) + servRemoveButton->setEnabled(false); + + if ( servEditButton && servicesLB->currentItem() == -1 ) + servEditButton->setEnabled(false); +} + +void KServiceListWidget::updatePreferredServices() +{ + if (!m_item) + return; + QStringList sl; + unsigned int count = servicesLB->count(); + + for (unsigned int i = 0; i < count; i++) { + KServiceListItem *sli = (KServiceListItem *) servicesLB->item(i); + sl.append( sli->desktopPath ); + } + if ( m_kind == SERVICELIST_APPLICATIONS ) + m_item->setAppServices(sl); + else + m_item->setEmbedServices(sl); +} + +void KServiceListWidget::enableMoveButtons(int index) +{ + if (servicesLB->count() <= 1) + { + servUpButton->setEnabled(false); + servDownButton->setEnabled(false); + } + else if ((uint) index == (servicesLB->count() - 1)) + { + servUpButton->setEnabled(true); + servDownButton->setEnabled(false); + } + else if (index == 0) + { + servUpButton->setEnabled(false); + servDownButton->setEnabled(true); + } + else + { + servUpButton->setEnabled(true); + servDownButton->setEnabled(true); + } + + if ( servRemoveButton ) + servRemoveButton->setEnabled(true); + + if ( servEditButton ) + servEditButton->setEnabled(true && ( m_kind == SERVICELIST_APPLICATIONS ) ); +} + +#include "kservicelistwidget.moc" diff --git a/kcontrol/filetypes/kservicelistwidget.h b/kcontrol/filetypes/kservicelistwidget.h new file mode 100644 index 000000000..fb20d1c64 --- /dev/null +++ b/kcontrol/filetypes/kservicelistwidget.h @@ -0,0 +1,77 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Waldo Bastian + Copyright (C) 2003 David Faure + Copyright (C) 2002 Daniel Molkentin + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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 _KSERVICELISTWIDGET_H +#define _KSERVICELISTWIDGET_H + +#include +#include +class TypesListItem; +class QLineEdit; +class QPushButton; +class KService; + +class KServiceListItem : public QListBoxText +{ +public: + KServiceListItem( KService *pService, int kind ); + bool isImmutable(); + QString desktopPath; + QString localPath; +}; + +/** + * This widget holds a list of services, with 5 buttons to manage it. + * It's a separate class so that it can be used by both tabs of the + * module, once for applications and once for services. + * The "kind" is determined by the argument given to the constructor. + */ +class KServiceListWidget : public QGroupBox +{ + Q_OBJECT +public: + enum { SERVICELIST_APPLICATIONS, SERVICELIST_SERVICES }; + KServiceListWidget(int kind, QWidget *parent = 0, const char *name = 0); + + void setTypeItem( TypesListItem * item ); + +signals: + void changed(bool); + +protected slots: + void promoteService(); + void demoteService(); + void addService(); + void editService(); + void removeService(); + void enableMoveButtons(int index); + +protected: + void updatePreferredServices(); + +private: + int m_kind; + QListBox *servicesLB; + QPushButton *servUpButton, *servDownButton; + QPushButton *servNewButton, *servEditButton, *servRemoveButton; + TypesListItem *m_item; +}; + +#endif diff --git a/kcontrol/filetypes/kserviceselectdlg.cpp b/kcontrol/filetypes/kserviceselectdlg.cpp new file mode 100644 index 000000000..c3a925218 --- /dev/null +++ b/kcontrol/filetypes/kserviceselectdlg.cpp @@ -0,0 +1,66 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +#include "kserviceselectdlg.h" +#include "kserviceselectdlg.moc" +#include "kservicelistwidget.h" + +#include + +#include +#include + +KServiceSelectDlg::KServiceSelectDlg( const QString& /*serviceType*/, const QString& /*value*/, QWidget *parent ) + : KDialogBase( parent, "serviceSelectDlg", true, + i18n( "Add Service" ), Ok|Cancel, Ok ) +{ + QVBox *vbox = new QVBox ( this ); + + vbox->setSpacing( KDialog::spacingHint() ); + new QLabel( i18n( "Select service:" ), vbox ); + m_listbox=new KListBox( vbox ); + + // Can't make a KTrader query since we don't have a servicetype to give, + // we want all services that are not applications....... + // So we have to do it the slow way + // ### Why can't we query for KParts/ReadOnlyPart as the servicetype? Should work fine! + KService::List allServices = KService::allServices(); + QValueListIterator it(allServices.begin()); + for ( ; it != allServices.end() ; ++it ) + if ( (*it)->hasServiceType( "KParts/ReadOnlyPart" ) ) + { + m_listbox->insertItem( new KServiceListItem( (*it), KServiceListWidget::SERVICELIST_SERVICES ) ); + } + + m_listbox->sort(); + m_listbox->setMinimumHeight(350); + m_listbox->setMinimumWidth(300); + connect(m_listbox,SIGNAL(doubleClicked ( QListBoxItem * )),SLOT(slotOk())); + setMainWidget(vbox); +} + +KServiceSelectDlg::~KServiceSelectDlg() +{ +} + +KService::Ptr KServiceSelectDlg::service() +{ + unsigned int selIndex = m_listbox->currentItem(); + KServiceListItem *selItem = static_cast(m_listbox->item(selIndex)); + return KService::serviceByDesktopPath( selItem->desktopPath ); +} diff --git a/kcontrol/filetypes/kserviceselectdlg.h b/kcontrol/filetypes/kserviceselectdlg.h new file mode 100644 index 000000000..05a2d4e9d --- /dev/null +++ b/kcontrol/filetypes/kserviceselectdlg.h @@ -0,0 +1,47 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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 __kserviceselectdlg_h +#define __kserviceselectdlg_h +#include +#include + +class KServiceSelectDlg : public KDialogBase +{ + Q_OBJECT +public: + /** + * Create a dialog to select a service (not application) for a given service type. + * + * @param serviceType the service type we want to choose a service for. + * @param value is the initial service to select (not implemented currently) + * @param parent parent widget + */ + KServiceSelectDlg( const QString& serviceType, const QString& value = QString::null, QWidget *parent = 0L ); + + ~KServiceSelectDlg(); + + /** + * @return the chosen service + */ + KService::Ptr service(); +private: + KListBox * m_listbox; +}; + +#endif diff --git a/kcontrol/filetypes/newtypedlg.cpp b/kcontrol/filetypes/newtypedlg.cpp new file mode 100644 index 000000000..24760cf1d --- /dev/null +++ b/kcontrol/filetypes/newtypedlg.cpp @@ -0,0 +1,57 @@ + +#include +#include +#include +#include + +#include +#include + +#include "newtypedlg.h" + +NewTypeDialog::NewTypeDialog(QStringList groups, + QWidget *parent, const char *name) + : KDialogBase(parent, name, true, i18n( "Create New File Type" ), + Ok|Cancel, Ok, true) +{ + QFrame *main = makeMainWidget(); + QVBoxLayout *topl = new QVBoxLayout(main, 0, spacingHint()); + + QGridLayout *grid = new QGridLayout(2, 2); + grid->setColStretch(1, 1); + topl->addLayout(grid); + + QLabel *l = new QLabel(i18n("Group:"), main); + grid->addWidget(l, 0, 0); + + groupCombo = new QComboBox(main); + //groupCombo->setEditable( true ); M.O.: Currently, the code in filetypesview isn't capable of handling + //new top level types; so better not let them be added than crash. + groupCombo->insertStringList(groups); + grid->addWidget(groupCombo, 0, 1); + + QWhatsThis::add( groupCombo, i18n("Select the category under which" + " the new file type should be added.") ); + + l = new QLabel(i18n("Type name:"), main); + grid->addWidget(l, 1, 0); + + typeEd = new KLineEdit(main); + grid->addWidget(typeEd, 1, 1); + + typeEd->setFocus(); + + // Set a minimum size so that caption is not half-hidden + setMinimumSize( 300, 50 ); +} + +QString NewTypeDialog::group() const +{ + return groupCombo->currentText(); +} + + +QString NewTypeDialog::text() const +{ + return typeEd->text(); +} diff --git a/kcontrol/filetypes/newtypedlg.h b/kcontrol/filetypes/newtypedlg.h new file mode 100644 index 000000000..386b5fcdb --- /dev/null +++ b/kcontrol/filetypes/newtypedlg.h @@ -0,0 +1,28 @@ +#ifndef _NEWTYPEDLG_H +#define _NEWTYPEDLG_H + +#include +#include +#include + +class KLineEdit; +class QComboBox; + +/** + * A dialog for creating a new file type, with + * a combobox for choosing the group and a line-edit + * for entering the name of the file type + */ +class NewTypeDialog : public KDialogBase +{ +public: + NewTypeDialog(QStringList groups, QWidget *parent = 0, + const char *name = 0); + QString group() const; + QString text() const; +private: + KLineEdit *typeEd; + QComboBox *groupCombo; +}; + +#endif diff --git a/kcontrol/filetypes/typeslistitem.cpp b/kcontrol/filetypes/typeslistitem.cpp new file mode 100644 index 000000000..88f3c8035 --- /dev/null +++ b/kcontrol/filetypes/typeslistitem.cpp @@ -0,0 +1,579 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Waldo Bastian + Copyright (C) 2003 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +#include +#include +#include +#include +#include +#include + +#include "typeslistitem.h" + +QMap< QString, QStringList >* TypesListItem::s_changedServices; +static KStaticDeleter< QMap< QString, QStringList > > deleter; + +TypesListItem::TypesListItem(QListView *parent, const QString & major) + : QListViewItem(parent), metaType(true), m_bNewItem(false), m_askSave(2) +{ + initMeta(major); + setText(0, majorType()); +} + +TypesListItem::TypesListItem(TypesListItem *parent, KMimeType::Ptr mimetype, bool newItem) + : QListViewItem(parent), metaType(false), m_bNewItem(newItem), m_askSave(2) +{ + init(mimetype); + setText(0, minorType()); +} + +TypesListItem::TypesListItem(QListView *parent, KMimeType::Ptr mimetype) + : QListViewItem(parent), metaType(false), m_bNewItem(false), m_askSave(2) +{ + init(mimetype); + setText(0, majorType()); +} + +TypesListItem::TypesListItem(QListView *parent, KMimeType::Ptr mimetype, bool newItem) + : QListViewItem(parent), metaType(false), m_bNewItem(newItem), m_askSave(2) +{ + init(mimetype); + setText(0, majorType()); +} + +TypesListItem::~TypesListItem() +{ +} + +void TypesListItem::initMeta( const QString & major ) +{ + m_bFullInit = true; + m_mimetype = 0L; + m_major = major; + KSharedConfig::Ptr config = KSharedConfig::openConfig("konquerorrc", false, false); + config->setGroup("EmbedSettings"); + bool defaultValue = defaultEmbeddingSetting( major ); + m_autoEmbed = config->readBoolEntry( QString::fromLatin1("embed-")+m_major, defaultValue ) ? 0 : 1; +} + +bool TypesListItem::defaultEmbeddingSetting( const QString& major ) +{ + // embedding is false by default except for image/* + return ( major=="image" ); +} + +void TypesListItem::setup() +{ + if (m_mimetype) + { + setPixmap(0, m_mimetype->pixmap(KIcon::Small, IconSize(KIcon::Small))); + } + QListViewItem::setup(); +} + +void TypesListItem::init(KMimeType::Ptr mimetype) +{ + m_bFullInit = false; + m_mimetype = mimetype; + + int index = mimetype->name().find("/"); + if (index != -1) { + m_major = mimetype->name().left(index); + m_minor = mimetype->name().right(mimetype->name().length() - + (index+1)); + } else { + m_major = mimetype->name(); + m_minor = ""; + } + m_comment = mimetype->comment(QString(), false); + m_icon = mimetype->icon(QString(), false); + m_patterns = mimetype->patterns(); + m_autoEmbed = readAutoEmbed( mimetype ); +} + +int TypesListItem::readAutoEmbed( KMimeType::Ptr mimetype ) +{ + QVariant v = mimetype->property( "X-KDE-AutoEmbed" ); + if ( v.isValid() ) + return (v.toBool() ? 0 : 1); + else if ( !mimetype->property( "X-KDE-LocalProtocol" ).toString().isEmpty() ) + return 0; // embed by default for zip, tar etc. + else + return 2; +} + +QStringList TypesListItem::appServices() const +{ + if (!m_bFullInit) + { + TypesListItem *that = const_cast(this); + that->getServiceOffers(that->m_appServices, that->m_embedServices); + that->m_bFullInit = true; + } + return m_appServices; +} + +QStringList TypesListItem::embedServices() const +{ + if (!m_bFullInit) + { + TypesListItem *that = const_cast(this); + that->getServiceOffers(that->m_appServices, that->m_embedServices); + that->m_bFullInit = true; + } + return m_embedServices; +} + +void TypesListItem::getServiceOffers( QStringList & appServices, QStringList & embedServices ) const +{ + KServiceTypeProfile::setConfigurationMode(); + + KServiceTypeProfile::OfferList offerList = + KServiceTypeProfile::offers(m_mimetype->name(), "Application"); + QValueListIterator it(offerList.begin()); + for (; it != offerList.end(); ++it) + if ((*it).allowAsDefault()) + appServices.append((*it).service()->desktopEntryPath()); + + offerList = KServiceTypeProfile::offers(m_mimetype->name(), "KParts/ReadOnlyPart"); + for ( it = offerList.begin(); it != offerList.end(); ++it) + embedServices.append((*it).service()->desktopEntryPath()); + + KServiceTypeProfile::unsetConfigurationMode(); +} + +bool TypesListItem::isMimeTypeDirty() const +{ + if ( m_bNewItem ) + return true; + if ((m_mimetype->name() != name()) && + (name() != "application/octet-stream")) + { + kdDebug() << "Mimetype Name Dirty: old=" << m_mimetype->name() << " name()=" << name() << endl; + return true; + } + if (m_mimetype->comment(QString(), false) != m_comment) + { + kdDebug() << "Mimetype Comment Dirty: old=" << m_mimetype->comment(QString(),false) << " m_comment=" << m_comment << endl; + return true; + } + if (m_mimetype->icon(QString(), false) != m_icon) + { + kdDebug() << "Mimetype Icon Dirty: old=" << m_mimetype->icon(QString(),false) << " m_icon=" << m_icon << endl; + return true; + } + + if (m_mimetype->patterns() != m_patterns) + { + kdDebug() << "Mimetype Patterns Dirty: old=" << m_mimetype->patterns().join(";") + << " m_patterns=" << m_patterns.join(";") << endl; + return true; + } + + if ( readAutoEmbed( m_mimetype ) != (int)m_autoEmbed ) + return true; + return false; +} + +bool TypesListItem::isDirty() const +{ + if ( !m_bFullInit) + { + return false; + } + + if ( m_bNewItem ) + { + kdDebug() << "New item, need to save it" << endl; + return true; + } + + if ( !isMeta() ) + { + QStringList oldAppServices; + QStringList oldEmbedServices; + getServiceOffers( oldAppServices, oldEmbedServices ); + + if (oldAppServices != m_appServices) + { + kdDebug() << "App Services Dirty: old=" << oldAppServices.join(";") + << " m_appServices=" << m_appServices.join(";") << endl; + return true; + } + if (oldEmbedServices != m_embedServices) + { + kdDebug() << "Embed Services Dirty: old=" << oldEmbedServices.join(";") + << " m_embedServices=" << m_embedServices.join(";") << endl; + return true; + } + if (isMimeTypeDirty()) + return true; + } + else + { + KSharedConfig::Ptr config = KSharedConfig::openConfig("konquerorrc", false, false); + config->setGroup("EmbedSettings"); + bool defaultValue = defaultEmbeddingSetting(m_major); + unsigned int oldAutoEmbed = config->readBoolEntry( QString::fromLatin1("embed-")+m_major, defaultValue ) ? 0 : 1; + if ( m_autoEmbed != oldAutoEmbed ) + return true; + } + + if (m_askSave != 2) + return true; + + // nothing seems to have changed, it's not dirty. + return false; +} + +void TypesListItem::sync() +{ + Q_ASSERT(m_bFullInit); + if ( isMeta() ) + { + KSharedConfig::Ptr config = KSharedConfig::openConfig("konquerorrc", false, false); + config->setGroup("EmbedSettings"); + config->writeEntry( QString::fromLatin1("embed-")+m_major, m_autoEmbed == 0 ); + return; + } + + if (m_askSave != 2) + { + KSharedConfig::Ptr config = KSharedConfig::openConfig("konquerorrc", false, false); + config->setGroup("Notification Messages"); + if (m_askSave == 0) + { + // Ask + config->deleteEntry("askSave"+name()); + config->deleteEntry("askEmbedOrSave"+name()); + } + else + { + // Do not ask, open + config->writeEntry("askSave"+name(), "no" ); + config->writeEntry("askEmbedOrSave"+name(), "no" ); + } + } + + if (isMimeTypeDirty()) + { + // We must use KConfig otherwise config.deleteEntry doesn't + // properly cancel out settings already present in system files. + KConfig config( m_mimetype->desktopEntryPath(), false, false, "mime" ); + config.setDesktopGroup(); + + config.writeEntry("Type", "MimeType"); + config.writeEntry("MimeType", name()); + config.writeEntry("Icon", m_icon); + config.writeEntry("Patterns", m_patterns, ';'); + config.writeEntry("Comment", m_comment); + config.writeEntry("Hidden", false); + + if ( m_autoEmbed == 2 ) + config.deleteEntry( QString::fromLatin1("X-KDE-AutoEmbed"), false ); + else + config.writeEntry( QString::fromLatin1("X-KDE-AutoEmbed"), m_autoEmbed == 0 ); + + m_bNewItem = false; + } + + KConfig profile("profilerc", false, false); + + // Deleting current contents in profilerc relating to + // this service type + // + QStringList groups = profile.groupList(); + + for (QStringList::Iterator it = groups.begin(); + it != groups.end(); it++ ) + { + profile.setGroup(*it); + + // Entries with Preference <= 0 or AllowAsDefault == false + // are not in m_services + if ( profile.readEntry( "ServiceType" ) == name() + && profile.readNumEntry( "Preference" ) > 0 + && profile.readBoolEntry( "AllowAsDefault" ) ) + { + profile.deleteGroup( *it ); + } + } + + // Save preferred services + // + + groupCount = 1; + + saveServices( profile, m_appServices, "Application" ); + saveServices( profile, m_embedServices, "KParts/ReadOnlyPart" ); + + // Handle removed services + + KServiceTypeProfile::setConfigurationMode(); + KServiceTypeProfile::OfferList offerList = + KServiceTypeProfile::offers(m_mimetype->name(), "Application"); + offerList += KServiceTypeProfile::offers(m_mimetype->name(), "KParts/ReadOnlyPart"); + KServiceTypeProfile::unsetConfigurationMode(); + + QValueListIterator it_srv(offerList.begin()); + + for (; it_srv != offerList.end(); ++it_srv) { + + + KService::Ptr pService = (*it_srv).service(); + + bool isApplication = pService->type() == "Application"; + if (isApplication && !pService->allowAsDefault()) + continue; // Only those which were added in init() + + // Look in the correct list... + if ( (isApplication && ! m_appServices.contains( pService->desktopEntryPath() )) + || (!isApplication && !m_embedServices.contains( pService->desktopEntryPath() )) + ) { + // The service was in m_appServices but has been removed + // create a new .desktop file without this mimetype + + if( s_changedServices == NULL ) + deleter.setObject( s_changedServices, new QMap< QString, QStringList > ); + QStringList mimeTypeList = s_changedServices->contains( pService->desktopEntryPath()) + ? (*s_changedServices)[ pService->desktopEntryPath() ] : pService->serviceTypes(); + + if ( mimeTypeList.contains( name() ) ) { + // The mimetype is listed explicitly in the .desktop files, so + // just remove it and we're done + KConfig *desktop; + if ( !isApplication ) + { + desktop = new KConfig(pService->desktopEntryPath(), false, false, "services"); + } + else + { + QString path = pService->locateLocal(); + KConfig orig(pService->desktopEntryPath(), true, false, "apps"); + desktop = orig.copyTo(path); + } + desktop->setDesktopGroup(); + + mimeTypeList = s_changedServices->contains( pService->desktopEntryPath()) + ? (*s_changedServices)[ pService->desktopEntryPath() ] : desktop->readListEntry("MimeType", ';'); + + // Remove entry and the number that might follow. + QStringList::Iterator it; + for(;(it = mimeTypeList.find(name())) != mimeTypeList.end();) + { + it = mimeTypeList.remove(it); + if (it != mimeTypeList.end()) + { + // Check next item + bool numeric; + (*it).toInt(&numeric); + if (numeric) + mimeTypeList.remove(it); + } + } + + desktop->writeEntry("MimeType", mimeTypeList, ';'); + + // if two or more types have been modified, and they use the same service, + // accumulate the changes + (*s_changedServices)[ pService->desktopEntryPath() ] = mimeTypeList; + + desktop->sync(); + delete desktop; + } + else { + // The mimetype is not listed explicitly so it can't + // be removed. Preference = 0 handles this. + + // Find a group header. The headers are just dummy names as far as + // KUserProfile is concerned, but using the mimetype makes it a + // bit more structured for "manual" reading + while ( profile.hasGroup( + name() + " - " + QString::number(groupCount) ) ) + groupCount++; + + profile.setGroup( name() + " - " + QString::number(groupCount) ); + + profile.writeEntry("Application", pService->storageId()); + profile.writeEntry("ServiceType", name()); + profile.writeEntry("AllowAsDefault", true); + profile.writeEntry("Preference", 0); + } + } + } +} + +static bool inheritsMimetype(KMimeType::Ptr m, const QStringList &mimeTypeList) +{ + for(QStringList::ConstIterator it = mimeTypeList.begin(); + it != mimeTypeList.end(); ++it) + { + if (m->is(*it)) + return true; + } + + return false; +} + +KMimeType::Ptr TypesListItem::findImplicitAssociation(const QString &desktop) +{ + KService::Ptr s = KService::serviceByDesktopPath(desktop); + if (!s) return 0; // Hey, where did that one go? + + if( s_changedServices == NULL ) + deleter.setObject( s_changedServices, new QMap< QString, QStringList > ); + QStringList mimeTypeList = s_changedServices->contains( s->desktopEntryPath()) + ? (*s_changedServices)[ s->desktopEntryPath() ] : s->serviceTypes(); + + for(QStringList::ConstIterator it = mimeTypeList.begin(); + it != mimeTypeList.end(); ++it) + { + if ((m_mimetype->name() != *it) && m_mimetype->is(*it)) + { + return KMimeType::mimeType(*it); + } + } + return 0; +} + +void TypesListItem::saveServices( KConfig & profile, QStringList services, const QString & genericServiceType ) +{ + QStringList::Iterator it(services.begin()); + for (int i = services.count(); it != services.end(); ++it, i--) { + + KService::Ptr pService = KService::serviceByDesktopPath(*it); + if (!pService) continue; // Where did that one go? + + // Find a group header. The headers are just dummy names as far as + // KUserProfile is concerned, but using the mimetype makes it a + // bit more structured for "manual" reading + while ( profile.hasGroup( name() + " - " + QString::number(groupCount) ) ) + groupCount++; + + profile.setGroup( name() + " - " + QString::number(groupCount) ); + + profile.writeEntry("ServiceType", name()); + profile.writeEntry("GenericServiceType", genericServiceType); + profile.writeEntry("Application", pService->storageId()); + profile.writeEntry("AllowAsDefault", true); + profile.writeEntry("Preference", i); + + // merge new mimetype + if( s_changedServices == NULL ) + deleter.setObject( s_changedServices, new QMap< QString, QStringList > ); + QStringList mimeTypeList = s_changedServices->contains( pService->desktopEntryPath()) + ? (*s_changedServices)[ pService->desktopEntryPath() ] : pService->serviceTypes(); + + if (!mimeTypeList.contains(name()) && !inheritsMimetype(m_mimetype, mimeTypeList)) + { + KConfig *desktop; + if ( pService->type() == QString("Service") ) + { + desktop = new KConfig(pService->desktopEntryPath(), false, false, "services"); + } + else + { + QString path = pService->locateLocal(); + KConfig orig(pService->desktopEntryPath(), true, false, "apps"); + desktop = orig.copyTo(path); + } + + desktop->setDesktopGroup(); + mimeTypeList = s_changedServices->contains( pService->desktopEntryPath()) + ? (*s_changedServices)[ pService->desktopEntryPath() ] : desktop->readListEntry("MimeType", ';'); + mimeTypeList.append(name()); + + desktop->writeEntry("MimeType", mimeTypeList, ';'); + desktop->sync(); + delete desktop; + + // if two or more types have been modified, and they use the same service, + // accumulate the changes + (*s_changedServices)[ pService->desktopEntryPath() ] = mimeTypeList; + } + } +} + +void TypesListItem::setIcon( const QString& icon ) +{ + m_icon = icon; + setPixmap( 0, SmallIcon( icon ) ); +} + +bool TypesListItem::isEssential() const +{ + QString n = name(); + if ( n == "application/octet-stream" ) + return true; + if ( n == "inode/directory" ) + return true; + if ( n == "inode/directory-locked" ) + return true; + if ( n == "inode/blockdevice" ) + return true; + if ( n == "inode/chardevice" ) + return true; + if ( n == "inode/socket" ) + return true; + if ( n == "inode/fifo" ) + return true; + if ( n == "application/x-shellscript" ) + return true; + if ( n == "application/x-executable" ) + return true; + if ( n == "application/x-desktop" ) + return true; + return false; +} + +void TypesListItem::refresh() +{ + kdDebug() << "TypesListItem refresh " << name() << endl; + m_mimetype = KMimeType::mimeType( name() ); +} + +void TypesListItem::reset() +{ + if( s_changedServices ) + s_changedServices->clear(); +} + +void TypesListItem::getAskSave(bool &_askSave) +{ + if (m_askSave == 0) + _askSave = true; + if (m_askSave == 1) + _askSave = false; +} + +void TypesListItem::setAskSave(bool _askSave) +{ + if (_askSave) + m_askSave = 0; + else + m_askSave = 1; +} + +bool TypesListItem::canUseGroupSetting() const +{ + // "Use group settings" isn't available for zip, tar etc.; those have a builtin default... + bool hasLocalProtocolRedirect = !m_mimetype->property( "X-KDE-LocalProtocol" ).toString().isEmpty(); + return !hasLocalProtocolRedirect; +} + diff --git a/kcontrol/filetypes/typeslistitem.h b/kcontrol/filetypes/typeslistitem.h new file mode 100644 index 000000000..5f44e9864 --- /dev/null +++ b/kcontrol/filetypes/typeslistitem.h @@ -0,0 +1,118 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Waldo Bastian + Copyright (C) 2003 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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 _TYPESLISTITEM_H +#define _TYPESLISTITEM_H + +#include + +#include +#include + +class TypesListItem : public QListViewItem +{ +public: + /** + * Create a filetype group + */ + TypesListItem(QListView *parent, const QString & major ); + + /** + * Create a filetype item inside a group + */ + TypesListItem(TypesListItem *parent, KMimeType::Ptr mimetype, bool newItem=false); + + /** + * Create a filetype item not inside a group (used by keditfiletype) + */ + TypesListItem(QListView *parent, KMimeType::Ptr mimetype); + + /** + * Create a filetype item not inside a group (used by keditfiletype) + * KDE4: merge with previous + */ + TypesListItem(QListView *parent, KMimeType::Ptr mimetype, bool newItem); + + ~TypesListItem(); + + QString name() const { return m_major + "/" + m_minor; } + QString majorType() const { return m_major; } + QString minorType() const { return m_minor; } + void setMinor(QString m) { m_minor = m; } + QString comment() const { return m_comment; } + void setComment(QString c) { m_comment = c; } + /** + * Returns true if "this" is a group + */ + bool isMeta() const { return metaType; } + /** + * Returns true if the type is essential, i.e. can't be deleted + * (see KMimeType::checkEssentialMimeTypes) + */ + bool isEssential() const; + QString icon() const { return m_icon; } + void setIcon(const QString& i); + QStringList patterns() const { return m_patterns; } + void setPatterns(const QStringList &p) { m_patterns = p; } + QStringList appServices() const; + void setAppServices(const QStringList &dsl) { m_appServices = dsl; } + QStringList embedServices() const; + void setEmbedServices(const QStringList &dsl) { m_embedServices = dsl; } + int autoEmbed() const { return m_autoEmbed; } + void setAutoEmbed( int a ) { m_autoEmbed = a; } + const KMimeType::Ptr& mimeType() const { return m_mimetype; } + bool canUseGroupSetting() const; + + void getAskSave(bool &); + void setAskSave(bool); + + // Whether the service s lists this mimetype explicitly + KMimeType::Ptr findImplicitAssociation(const QString &desktop); + + bool isMimeTypeDirty() const; // whether the mimetype .desktop file needs saving + bool isDirty() const; + void sync(); + void setup(); + void refresh(); // update m_mimetype from ksycoca when Apply is pressed + + static bool defaultEmbeddingSetting( const QString& major ); + static void reset(); + +private: + void getServiceOffers( QStringList & appServices, QStringList & embedServices ) const; + void saveServices( KConfig & profile, QStringList services, const QString & servicetype2 ); + void initMeta( const QString & major ); + void init(KMimeType::Ptr mimetype); + static int readAutoEmbed( KMimeType::Ptr mimetype ); + + KMimeType::Ptr m_mimetype; + unsigned int groupCount:16; // shared between saveServices and sync + unsigned int m_autoEmbed:2; // 0 yes, 1 no, 2 use group setting + unsigned int metaType:1; + unsigned int m_bNewItem:1; + unsigned int m_bFullInit:1; + unsigned int m_askSave:2; // 0 yes, 1 no, 2 default + QString m_major, m_minor, m_comment, m_icon; + QStringList m_patterns; + QStringList m_appServices; + QStringList m_embedServices; + static QMap< QString, QStringList >* s_changedServices; +}; + +#endif diff --git a/kcontrol/fonts/Makefile.am b/kcontrol/fonts/Makefile.am new file mode 100644 index 000000000..5fe7aa2cf --- /dev/null +++ b/kcontrol/fonts/Makefile.am @@ -0,0 +1,21 @@ +noinst_LTLIBRARIES = libkxftconfig.la + +libkxftconfig_la_SOURCES = kxftconfig.cpp +libkxftconfig_la_LIBADD = $(LIBFONTCONFIG_LIBS) +libkxftconfig_la_LDFLAGS = $(LIBFONTCONFIG_RPATH) + +AM_CPPFLAGS = $(all_includes) $(LIBFONTCONFIG_CFLAGS) $(FREETYPE2_CFLAGS) -D_LARGEFILE64_SOURCE + +kde_module_LTLIBRARIES = kcm_fonts.la + +kcm_fonts_la_SOURCES = fonts.cpp +kcm_fonts_la_LDFLAGS = $(KDE_RPATH) $(LIBFONTCONFIG_RPATH) $(FREETYPE2_LDFLAGS) -module -avoid-version $(all_libraries) -no-undefined +kcm_fonts_la_LIBADD = libkxftconfig.la $(top_builddir)/kcontrol/krdb/libkrdb.la $(LIB_KDEUI) $(LIBFONTCONFIG_LIBS) +METASOURCES = AUTO + +noinst_HEADERS = fonts.h kxftconfig.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmfonts.pot + +xdg_apps_DATA = fonts.desktop diff --git a/kcontrol/fonts/configure.in.in b/kcontrol/fonts/configure.in.in new file mode 100644 index 000000000..0ecc46d91 --- /dev/null +++ b/kcontrol/fonts/configure.in.in @@ -0,0 +1,57 @@ +KDE_FIND_PATH(fontconfig-config, FONTCONFIG_CONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/bin /usr/local/bin /opt/local/bin], [ + KDE_FIND_PATH(pkg-config, PKGCONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/bin /usr/local/bin /opt/local/bin], [ + AC_MSG_WARN([Could not find neither pkg-config nor fontconfig-config, check http://www.fontconfig.org/ ]) + ]) +]) + +if test -n "$PKGCONFIG"; then + vers=`$PKGCONFIG fontconfig --modversion 2>/dev/null | sed -e 's/libfontconfig //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` + if test -n "$vers" && test "$vers" -ge 1000000 + then + LIBFONTCONFIG_LIBS="`$PKGCONFIG fontconfig --libs`" + LIBFONTCONFIG_RPATH= + for args in $LIBFONTCONFIG_LIBS; do + case $args in + -L*) + LIBFONTCONFIG_RPATH="$LIBFONTCONFIG_RPATH $args" + ;; + esac + done + LIBFONTCONFIG_RPATH=`echo $LIBFONTCONFIG_RPATH | sed -e "s/-L/-R/g"` + LIBFONTCONFIG_CFLAGS="`$PKGCONFIG fontconfig --cflags`" + + AC_DEFINE_UNQUOTED(HAVE_FONTCONFIG, 1, [Defines if your system has the libfontconfig library]) + fi +fi + +if test -n "$FONTCONFIG_CONFIG"; then + vers=`$FONTCONFIG_CONFIG --version 2>/dev/null | sed -e 's/libfontconfig //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` + if test -n "$vers" && test "$vers" -ge 1000000 + then + LIBFONTCONFIG_LIBS="`$FONTCONFIG_CONFIG --libs`" + LIBFONTCONFIG_RPATH= + for args in $LIBFONTCONFIG_LIBS; do + case $args in + -L*) + LIBFONTCONFIG_RPATH="$LIBFONTCONFIG_RPATH $args" + ;; + esac + done + LIBFONTCONFIG_RPATH=`echo $LIBFONTCONFIG_RPATH | sed -e "s/-L/-R/g"` + LIBFONTCONFIG_CFLAGS="`$FONTCONFIG_CONFIG --cflags`" + + AC_DEFINE_UNQUOTED(HAVE_FONTCONFIG, 1, [Defines if your system has the libfontconfig library]) + fi +fi + +AC_SUBST(LIBFONTCONFIG_LIBS) +AC_SUBST(LIBFONTCONFIG_CFLAGS) +AC_SUBST(LIBFONTCONFIG_RPATH) + +if pkg-config --exists freetype2 2>/dev/null; then + FREETYPE2_CFLAGS=`pkg-config --cflags freetype2` + FREETYPE2_LDFLAGS=`pkg-config --libs freetype2` + AC_DEFINE(HAVE_FREETYPE2, 1, [Define if you have FreeType2 library]) +fi +AC_SUBST(FREETYPE2_CFLAGS) +AC_SUBST(FREETYPE2_LDFLAGS) diff --git a/kcontrol/fonts/fonts.cpp b/kcontrol/fonts/fonts.cpp new file mode 100644 index 000000000..8cb1cbafc --- /dev/null +++ b/kcontrol/fonts/fonts.cpp @@ -0,0 +1,802 @@ +// KDE Display fonts setup tab +// +// Copyright (c) Mark Donohoe 1997 +// lars Knoll 1999 +// Rik Hemsley 2000 +// +// Ported to kcontrol2 by Geert Jansen. + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_FREETYPE2 +#include +#ifdef FT_LCD_FILTER_H +#include FT_FREETYPE_H +#include FT_LCD_FILTER_H +#endif +#endif + +#include "../krdb/krdb.h" +#include "fonts.h" +#include "fonts.moc" + +#include + +#include + +// X11 headers +#undef Bool +#undef Unsorted +#undef None + +static const char *aa_rgb_xpm[]={ +"12 12 3 1", +"a c #0000ff", +"# c #00ff00", +". c #ff0000", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa"}; +static const char *aa_bgr_xpm[]={ +"12 12 3 1", +". c #0000ff", +"# c #00ff00", +"a c #ff0000", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa", +"....####aaaa"}; +static const char *aa_vrgb_xpm[]={ +"12 12 3 1", +"a c #0000ff", +"# c #00ff00", +". c #ff0000", +"............", +"............", +"............", +"............", +"############", +"############", +"############", +"############", +"aaaaaaaaaaaa", +"aaaaaaaaaaaa", +"aaaaaaaaaaaa", +"aaaaaaaaaaaa"}; +static const char *aa_vbgr_xpm[]={ +"12 12 3 1", +". c #0000ff", +"# c #00ff00", +"a c #ff0000", +"............", +"............", +"............", +"............", +"############", +"############", +"############", +"############", +"aaaaaaaaaaaa", +"aaaaaaaaaaaa", +"aaaaaaaaaaaa", +"aaaaaaaaaaaa"}; + +static const char** aaPixmaps[]={ aa_rgb_xpm, aa_bgr_xpm, aa_vrgb_xpm, aa_vbgr_xpm }; + +/**** DLL Interface ****/ +typedef KGenericFactory FontFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_fonts, FontFactory("kcmfonts") ) + +/**** FontUseItem ****/ + +FontUseItem::FontUseItem( + QWidget * parent, + const QString &name, + const QString &grp, + const QString &key, + const QString &rc, + const QFont &default_fnt, + bool f +) + : KFontRequester(parent, 0L, f), + _rcfile(rc), + _rcgroup(grp), + _rckey(key), + _default(default_fnt) +{ + KAcceleratorManager::setNoAccel( this ); + setTitle( name ); + readFont( false ); +} + +void FontUseItem::setDefault() +{ + setFont( _default, isFixedOnly() ); +} + +void FontUseItem::readFont( bool useDefaults ) +{ + KConfigBase *config; + + bool deleteme = false; + if (_rcfile.isEmpty()) + config = KGlobal::config(); + else + { + config = new KConfig(_rcfile, true); + deleteme = true; + } + + config->setReadDefaults( useDefaults ); + + config->setGroup(_rcgroup); + QFont tmpFnt(_default); + setFont( config->readFontEntry(_rckey, &tmpFnt), isFixedOnly() ); + if (deleteme) delete config; +} + +void FontUseItem::writeFont() +{ + KConfigBase *config; + + if (_rcfile.isEmpty()) { + config = KGlobal::config(); + config->setGroup(_rcgroup); + config->writeEntry(_rckey, font(), true, true); + } else { + config = new KSimpleConfig(locateLocal("config", _rcfile)); + config->setGroup(_rcgroup); + config->writeEntry(_rckey, font()); + config->sync(); + delete config; + } +} + +void FontUseItem::applyFontDiff( const QFont &fnt, int fontDiffFlags ) +{ + QFont _font( font() ); + + if (fontDiffFlags & KFontChooser::FontDiffSize) { + _font.setPointSize( fnt.pointSize() ); + } + if (fontDiffFlags & KFontChooser::FontDiffFamily) { + if (!isFixedOnly()) _font.setFamily( fnt.family() ); + } + if (fontDiffFlags & KFontChooser::FontDiffStyle) { + _font.setBold( fnt.bold() ); + _font.setItalic( fnt.italic() ); + _font.setUnderline( fnt.underline() ); + } + + setFont( _font, isFixedOnly() ); +} + +/**** FontAASettings ****/ + +FontAASettings::FontAASettings(QWidget *parent) + : KDialogBase(parent, "FontAASettings", true, i18n("Configure Anti-Alias Settings"), Ok|Cancel, Ok, true), + changesMade(false) +{ + QWidget *mw=new QWidget(this); + QGridLayout *layout=new QGridLayout(mw, 1, 1, 0, KDialog::spacingHint()); + + excludeRange=new QCheckBox(i18n("E&xclude range:"), mw), + layout->addWidget(excludeRange, 0, 0); + excludeFrom=new KDoubleNumInput(0, 72, 8.0, 1, 1, mw), + excludeFrom->setSuffix(i18n(" pt")); + layout->addWidget(excludeFrom, 0, 1); + excludeToLabel=new QLabel(i18n(" to "), mw); + layout->addWidget(excludeToLabel, 0, 2); + excludeTo=new KDoubleNumInput(0, 72, 15.0, 1, 1, mw); + excludeTo->setSuffix(i18n(" pt")); + layout->addWidget(excludeTo, 0, 3); + + useSubPixel=new QCheckBox(i18n("&Use sub-pixel hinting:"), mw); + layout->addWidget(useSubPixel, 1, 0); + + QWhatsThis::add(useSubPixel, i18n("If you have a TFT or LCD screen you" + " can further improve the quality of displayed fonts by selecting" + " this option.
Sub-pixel hinting is also known as ClearType(tm).
" + "
This will not work with CRT monitors.")); + + subPixelType=new QComboBox(false, mw); + layout->addMultiCellWidget(subPixelType, 1, 1, 1, 3); + + QWhatsThis::add(subPixelType, i18n("In order for sub-pixel hinting to" + " work correctly you need to know how the sub-pixels of your display" + " are aligned.
" + " On TFT or LCD displays a single pixel is actually composed of" + " three sub-pixels, red, green and blue. Most displays" + " have a linear ordering of RGB sub-pixel, some have BGR.")); + + for(int t=KXftConfig::SubPixel::None+1; t<=KXftConfig::SubPixel::Vbgr; ++t) + subPixelType->insertItem(QPixmap(aaPixmaps[t-1]), KXftConfig::description((KXftConfig::SubPixel::Type)t)); + +#ifdef HAVE_FONTCONFIG + QLabel *hintingLabel=new QLabel(i18n("Hinting style: "), mw); + layout->addWidget(hintingLabel, 2, 0); + hintingStyle=new QComboBox(false, mw); + layout->addMultiCellWidget(hintingStyle, 2, 2, 1, 3); + for(int s=KXftConfig::Hint::NotSet+1; s<=KXftConfig::Hint::Full; ++s) + hintingStyle->insertItem(KXftConfig::description((KXftConfig::Hint::Style)s)); + + QString hintingText(i18n("Hinting is a process used to enhance the quality of fonts at small sizes.")); + QWhatsThis::add(hintingStyle, hintingText); + QWhatsThis::add(hintingLabel, hintingText); +#endif + load(); + enableWidgets(); + setMainWidget(mw); + + connect(excludeRange, SIGNAL(toggled(bool)), SLOT(changed())); + connect(useSubPixel, SIGNAL(toggled(bool)), SLOT(changed())); + connect(excludeFrom, SIGNAL(valueChanged(double)), SLOT(changed())); + connect(excludeTo, SIGNAL(valueChanged(double)), SLOT(changed())); + connect(subPixelType, SIGNAL(activated(const QString &)), SLOT(changed())); +#ifdef HAVE_FONTCONFIG + connect(hintingStyle, SIGNAL(activated(const QString &)), SLOT(changed())); +#endif +} + +bool FontAASettings::load() +{ + return load( false ); +} + + +bool FontAASettings::load( bool useDefaults ) +{ + double from, to; + KXftConfig xft(KXftConfig::constStyleSettings); + + + if(xft.getExcludeRange(from, to)) + excludeRange->setChecked(true); + else + { + excludeRange->setChecked(false); + from=8.0; + to=15.0; + } + + excludeFrom->setValue(from); + excludeTo->setValue(to); + + KXftConfig::SubPixel::Type spType; + + if(!xft.getSubPixelType(spType) || KXftConfig::SubPixel::None==spType) + useSubPixel->setChecked(false); + else + { + int idx=getIndex(spType); + + if(idx>-1) + { + useSubPixel->setChecked(true); + subPixelType->setCurrentItem(idx); + } + else + useSubPixel->setChecked(false); + } + +#ifdef HAVE_FONTCONFIG + KXftConfig::Hint::Style hStyle; + + if(!xft.getHintStyle(hStyle) || KXftConfig::Hint::NotSet==hStyle) + { + KConfig kglobals("kdeglobals", false, false); + + kglobals.setReadDefaults( useDefaults ); + + kglobals.setGroup("General"); + hStyle=KXftConfig::Hint::Medium; + xft.setHintStyle(hStyle); + xft.apply(); // Save this setting + kglobals.writeEntry("XftHintStyle", KXftConfig::toStr(hStyle)); + kglobals.sync(); + runRdb(KRdbExportXftSettings); + } + + hintingStyle->setCurrentItem(getIndex(hStyle)); +#endif + + enableWidgets(); + + return xft.getAntiAliasing(); +} + +bool FontAASettings::save( bool useAA ) +{ + KXftConfig xft(KXftConfig::constStyleSettings); + KConfig kglobals("kdeglobals", false, false); + + kglobals.setGroup("General"); + + xft.setAntiAliasing( useAA ); + + if(excludeRange->isChecked()) + xft.setExcludeRange(excludeFrom->value(), excludeTo->value()); + else + xft.setExcludeRange(0, 0); + + KXftConfig::SubPixel::Type spType(useSubPixel->isChecked() + ? getSubPixelType() + : KXftConfig::SubPixel::None); + + xft.setSubPixelType(spType); + kglobals.writeEntry("XftSubPixel", KXftConfig::toStr(spType)); + kglobals.writeEntry("XftAntialias", useAA); + + bool mod=false; +#ifdef HAVE_FONTCONFIG + KXftConfig::Hint::Style hStyle(getHintStyle()); + + xft.setHintStyle(hStyle); + + QString hs(KXftConfig::toStr(hStyle)); + + if(!hs.isEmpty() && hs!=kglobals.readEntry("XftHintStyle")) + { + kglobals.writeEntry("XftHintStyle", hs); + mod=true; + } +#endif + kglobals.sync(); + + if(!mod) + mod=xft.changed(); + + xft.apply(); + + return mod; +} + +void FontAASettings::defaults() +{ + load( true ); +} + +int FontAASettings::getIndex(KXftConfig::SubPixel::Type spType) +{ + int pos=-1; + int index; + + for(index=0; indexcount(); ++index) + if(subPixelType->text(index)==KXftConfig::description(spType)) + { + pos=index; + break; + } + + return pos; +} + +KXftConfig::SubPixel::Type FontAASettings::getSubPixelType() +{ + int t; + + for(t=KXftConfig::SubPixel::None; t<=KXftConfig::SubPixel::Vbgr; ++t) + if(subPixelType->currentText()==KXftConfig::description((KXftConfig::SubPixel::Type)t)) + return (KXftConfig::SubPixel::Type)t; + + return KXftConfig::SubPixel::None; +} + +#ifdef HAVE_FONTCONFIG +int FontAASettings::getIndex(KXftConfig::Hint::Style hStyle) +{ + int pos=-1; + int index; + + for(index=0; indexcount(); ++index) + if(hintingStyle->text(index)==KXftConfig::description(hStyle)) + { + pos=index; + break; + } + + return pos; +} + + +KXftConfig::Hint::Style FontAASettings::getHintStyle() +{ + int s; + + for(s=KXftConfig::Hint::NotSet; s<=KXftConfig::Hint::Full; ++s) + if(hintingStyle->currentText()==KXftConfig::description((KXftConfig::Hint::Style)s)) + return (KXftConfig::Hint::Style)s; + + return KXftConfig::Hint::Medium; +} +#endif + +void FontAASettings::enableWidgets() +{ + excludeFrom->setEnabled(excludeRange->isChecked()); + excludeTo->setEnabled(excludeRange->isChecked()); + excludeToLabel->setEnabled(excludeRange->isChecked()); + subPixelType->setEnabled(useSubPixel->isChecked()); +#ifdef FT_LCD_FILTER_H + static int ft_has_subpixel = -1; + if( ft_has_subpixel == -1 ) { + FT_Library ftLibrary; + if(FT_Init_FreeType(&ftLibrary) == 0) { + ft_has_subpixel = ( FT_Library_SetLcdFilter(ftLibrary, FT_LCD_FILTER_DEFAULT ) + == FT_Err_Unimplemented_Feature ) ? 0 : 1; + FT_Done_FreeType(ftLibrary); + } + } + useSubPixel->setEnabled(ft_has_subpixel); + subPixelType->setEnabled(ft_has_subpixel); +#endif +} + +void FontAASettings::changed() +{ + changesMade=true; + enableWidgets(); +} + +int FontAASettings::exec() +{ + int i=KDialogBase::exec(); + + if(!i) + load(); // Reset settings... + + return i && changesMade; +} + +/**** KFonts ****/ + +static QCString desktopConfigName() +{ + int desktop=0; + if (qt_xdisplay()) + desktop = DefaultScreen(qt_xdisplay()); + QCString name; + if (desktop == 0) + name = "kdesktoprc"; + else + name.sprintf("kdesktop-screen-%drc", desktop); + + return name; +} + +KFonts::KFonts(QWidget *parent, const char *name, const QStringList &) + : KCModule(FontFactory::instance(), parent, name) +{ + QStringList nameGroupKeyRc; + + nameGroupKeyRc + << i18n("General") << "General" << "font" << "" + << i18n("Fixed width") << "General" << "fixed" << "" + << i18n("Toolbar") << "General" << "toolBarFont" << "" + << i18n("Menu") << "General" << "menuFont" << "" + << i18n("Window title") << "WM" << "activeFont" << "" + << i18n("Taskbar") << "General" << "taskbarFont" << "" + << i18n("Desktop") << "FMSettings" << "StandardFont" << desktopConfigName(); + + QValueList defaultFontList; + + // Keep in sync with kdelibs/kdecore/kglobalsettings.cpp + + QFont f0("Sans Serif", 10); + QFont f1("Monospace", 10); + QFont f2("Sans Serif", 10); + QFont f3("Sans Serif", 9, QFont::Bold); + QFont f4("Sans Serif", 10); + + f0.setPointSize(10); + f1.setPointSize(10); + f2.setPointSize(10); + f3.setPointSize(9); + f4.setPointSize(10); + + defaultFontList << f0 << f1 << f2 << f0 << f3 << f4 << f0; + + QValueList fixedList; + + fixedList + << false + << true + << false + << false + << false + << false + << false; + + QStringList quickHelpList; + + quickHelpList + << i18n("Used for normal text (e.g. button labels, list items).") + << i18n("A non-proportional font (i.e. typewriter font).") + << i18n("Used to display text beside toolbar icons.") + << i18n("Used by menu bars and popup menus.") + << i18n("Used by the window titlebar.") + << i18n("Used by the taskbar.") + << i18n("Used for desktop icons."); + + QVBoxLayout * layout = + new QVBoxLayout(this, 0, KDialog::spacingHint()); + + QGridLayout * fontUseLayout = + new QGridLayout(layout, nameGroupKeyRc.count() / 4, 3); + + fontUseLayout->setColStretch(0, 0); + fontUseLayout->setColStretch(1, 1); + fontUseLayout->setColStretch(2, 0); + + QValueList::ConstIterator defaultFontIt(defaultFontList.begin()); + QValueList::ConstIterator fixedListIt(fixedList.begin()); + QStringList::ConstIterator quickHelpIt(quickHelpList.begin()); + QStringList::ConstIterator it(nameGroupKeyRc.begin()); + + unsigned int count = 0; + + while (it != nameGroupKeyRc.end()) { + + QString name = *it; it++; + QString group = *it; it++; + QString key = *it; it++; + QString file = *it; it++; + + FontUseItem * i = + new FontUseItem( + this, + name, + group, + key, + file, + *defaultFontIt++, + *fixedListIt++ + ); + + fontUseList.append(i); + connect(i, SIGNAL(fontSelected(const QFont &)), SLOT(fontSelected())); + + QLabel * fontUse = new QLabel(name+":", this); + QWhatsThis::add(fontUse, *quickHelpIt++); + + fontUseLayout->addWidget(fontUse, count, 0); + fontUseLayout->addWidget(i, count, 1); + + ++count; + } + + QHBoxLayout *hblay = new QHBoxLayout(layout, KDialog::spacingHint()); + hblay->addStretch(); + QPushButton * fontAdjustButton = new QPushButton(i18n("Ad&just All Fonts..."), this); + QWhatsThis::add(fontAdjustButton, i18n("Click to change all fonts")); + hblay->addWidget( fontAdjustButton ); + connect(fontAdjustButton, SIGNAL(clicked()), SLOT(slotApplyFontDiff())); + + layout->addSpacing(KDialog::spacingHint()); + + QGridLayout* lay = new QGridLayout(layout, 2, 4, KDialog::spacingHint()); + lay->setColStretch( 3, 10 ); + QLabel* label = new QLabel( i18n( "Use a&nti-aliasing:" ), this ); + lay->addWidget( label, 0, 0 ); + cbAA = new QComboBox( this ); + cbAA->insertItem( i18n( "Enabled" )); // change AASetting type if order changes + cbAA->insertItem( i18n( "System settings" )); + cbAA->insertItem( i18n( "Disabled" )); + QWhatsThis::add(cbAA, i18n("If this option is selected, KDE will smooth the edges of curves in " + "fonts.")); + aaSettingsButton = new QPushButton( i18n( "Configure..." ), this); + connect(aaSettingsButton, SIGNAL(clicked()), SLOT(slotCfgAa())); + label->setBuddy( cbAA ); + lay->addWidget( cbAA, 0, 1 ); + lay->addWidget( aaSettingsButton, 0, 2 ); + connect(cbAA, SIGNAL(activated(int)), SLOT(slotUseAntiAliasing())); + + label = new QLabel( i18n( "Force fonts DPI:" ), this ); + lay->addWidget( label, 1, 0 ); + comboForceDpi = new QComboBox( this ); + label->setBuddy( comboForceDpi ); + comboForceDpi->insertItem( i18n( "Disabled" )); // change DPISetti ng type if order changes + comboForceDpi->insertItem( i18n( "96 DPI" )); + comboForceDpi->insertItem( i18n( "120 DPI" )); + QString whatsthis = i18n( + "

This option forces a specific DPI value for fonts. It may be useful" + " when the real DPI of the hardware is not detected properly and it" + " is also often misused when poor quality fonts are used that do not" + " look well with DPI values other than 96 or 120 DPI.

" + "

The use of this option is generally discouraged. For selecting proper DPI" + " value a better option is explicitly configuring it for the whole X server if" + " possible (e.g. DisplaySize in xorg.conf or adding -dpi value to" + " ServerLocalArgs= in $KDEDIR/share/config/kdm/kdmrc). When fonts do not render" + " properly with real DPI value better fonts should be used or configuration" + " of font hinting should be checked.

" ); + QWhatsThis::add(comboForceDpi, whatsthis); + connect( comboForceDpi, SIGNAL( activated( int )), SLOT( changed())); + lay->addWidget( comboForceDpi, 1, 1 ); + + layout->addStretch(1); + + aaSettings=new FontAASettings(this); + + load(); +} + +KFonts::~KFonts() +{ + fontUseList.setAutoDelete(true); + fontUseList.clear(); +} + +void KFonts::fontSelected() +{ + emit changed(true); +} + +void KFonts::defaults() +{ + load( true ); + aaSettings->defaults(); +} + +void KFonts::load() +{ + load( false ); +} + + +void KFonts::load( bool useDefaults ) +{ + for ( uint i = 0; i < fontUseList.count(); i++ ) + fontUseList.at( i )->readFont( useDefaults ); + + useAA_original = useAA = aaSettings->load( useDefaults ) ? AAEnabled : AADisabled; + cbAA->setCurrentItem( useAA ); + + KConfig cfgfonts("kcmfonts", true); + cfgfonts.setGroup("General"); + int dpicfg = cfgfonts.readNumEntry( "forceFontDPI", 0 ); + DPISetting dpi = dpicfg == 120 ? DPI120 : dpicfg == 96 ? DPI96 : DPINone; + comboForceDpi->setCurrentItem( dpi ); + dpi_original = dpi; + if( cfgfonts.readBoolEntry( "dontChangeAASettings", true )) { + useAA_original = useAA = AASystem; + cbAA->setCurrentItem( useAA ); + } + aaSettingsButton->setEnabled( cbAA->currentItem() == AAEnabled ); + + emit changed( useDefaults ); +} + +void KFonts::save() +{ + + for ( FontUseItem* i = fontUseList.first(); i; i = fontUseList.next() ) + i->writeFont(); + KGlobal::config()->sync(); + + KConfig cfgfonts("kcmfonts"); + cfgfonts.setGroup("General"); + DPISetting dpi = static_cast< DPISetting >( comboForceDpi->currentItem()); + const int dpi2value[] = { 0, 96, 120 }; + cfgfonts.writeEntry( "forceFontDPI", dpi2value[ dpi ] ); + cfgfonts.writeEntry( "dontChangeAASettings", cbAA->currentItem() == AASystem ); + cfgfonts.sync(); + // if the setting is reset in the module, remove the dpi value, + // otherwise don't explicitly remove it and leave any possible system-wide value + if( dpi == DPINone && dpi_original != DPINone ) { + KProcIO proc; + proc << "xrdb" << "-quiet" << "-remove" << "-nocpp"; + proc.writeStdin( QCString( "Xft.dpi" ), true ); + proc.closeWhenDone(); + proc.start( KProcess::Block ); + } + + // KDE-1.x support + KSimpleConfig* config = new KSimpleConfig( QDir::homeDirPath() + "/.kderc" ); + config->setGroup( "General" ); + for ( FontUseItem* i = fontUseList.first(); i; i = fontUseList.next() ) { + if("font"==i->rcKey()) + QSettings().writeEntry("/qt/font", i->font().toString()); + kdDebug(1208) << "write entry " << i->rcKey() << endl; + config->writeEntry( i->rcKey(), i->font() ); + } + config->sync(); + delete config; + + KIPC::sendMessageAll(KIPC::FontChanged); + + kapp->processEvents(); // Process font change ourselves + + bool aaSave = false; + // Don't overwrite global settings unless explicitly asked for - e.g. the system + // fontconfig setup may be much more complex than this module can provide. + // TODO: With NoChange the changes already made by this module should be reverted somehow. + if( cbAA->currentItem() != AASystem ) + aaSave = aaSettings->save( useAA == AAEnabled ); + + if( aaSave || (useAA != useAA_original) || dpi != dpi_original) { + KMessageBox::information(this, + i18n( + "

Some changes such as anti-aliasing will only affect newly started applications.

" + ), i18n("Font Settings Changed"), "FontSettingsChanged", false); + useAA_original = useAA; + dpi_original = dpi; + } + + runRdb(KRdbExportXftSettings); + + emit changed(false); +} + + +void KFonts::slotApplyFontDiff() +{ + QFont font = QFont(fontUseList.first()->font()); + int fontDiffFlags = 0; + int ret = KFontDialog::getFontDiff(font,fontDiffFlags); + + if (ret == KDialog::Accepted && fontDiffFlags) + { + for ( int i = 0; i < (int) fontUseList.count(); i++ ) + fontUseList.at( i )->applyFontDiff( font,fontDiffFlags ); + emit changed(true); + } +} + +void KFonts::slotUseAntiAliasing() +{ + useAA = static_cast< AASetting >( cbAA->currentItem()); + aaSettingsButton->setEnabled( cbAA->currentItem() == AAEnabled ); + emit changed(true); +} + +void KFonts::slotCfgAa() +{ + if(aaSettings->exec()) + { + emit changed(true); + } +} + +// vim:ts=2:sw=2:tw=78 diff --git a/kcontrol/fonts/fonts.desktop b/kcontrol/fonts/fonts.desktop new file mode 100644 index 000000000..060772797 --- /dev/null +++ b/kcontrol/fonts/fonts.desktop @@ -0,0 +1,239 @@ +[Desktop Entry] +Exec=kcmshell fonts +Icon=fonts +Type=Application +DocPath=kcontrol/fonts/index.html + + +X-KDE-Library=fonts +X-KDE-FactoryName=fonts +X-KDE-ParentApp=kcontrol + +Name=Fonts +Name[af]=Skriftipes +Name[ar]=المحارف +Name[az]=Yazı növləri +Name[be]=Шрыфты +Name[bg]=Шрифтове +Name[bn]=ফন্ট +Name[br]=Fontoù +Name[bs]=Fontovi +Name[ca]=Lletres +Name[cs]=Písma +Name[csb]=Fòntë +Name[cy]=Ffontiau +Name[da]=Skrifttyper +Name[de]=Schriftarten +Name[el]=Γραμματοσειρές +Name[eo]=Tiparoj +Name[es]=Tipos de letra +Name[et]=Fondid +Name[eu]=Letra-tipoak +Name[fa]=قلمها +Name[fi]=Kirjasimet +Name[fr]=Polices +Name[fy]=Lettertypen +Name[ga]=Clónna +Name[gl]=Fontes +Name[he]=גופנים +Name[hi]=फ़ॉन्ट्स +Name[hr]=Fontovi +Name[hu]=Betűtípusok +Name[is]=Letur +Name[it]=Tipi di carattere +Name[ja]=フォント +Name[ka]=ფონტები +Name[kk]=Қаріптер +Name[km]=ពុម្ពអក្សរ +Name[ko]=글꼴 +Name[lo]=ຮູບແບບຕົວອັກສອນ +Name[lt]=Šriftai +Name[lv]=Fonti +Name[mk]=Фонтови +Name[mn]=Бичгүүд +Name[ms]=Fon +Name[nb]=Skrifttype +Name[nds]=Schriftoorden +Name[ne]=फन्ट +Name[nl]=Lettertypen +Name[nn]=Skrifttypar +Name[nso]=Difonto +Name[pa]=ਫੋਂਟ +Name[pl]=Czcionki +Name[pt]=Tipos de Letra +Name[pt_BR]=Fontes +Name[ro]=Fonturi +Name[ru]=Шрифты +Name[rw]=Imyandikire +Name[se]=Fonttat +Name[sk]=Písma +Name[sl]=Pisave +Name[sr]=Фонтови +Name[sr@Latn]=Fontovi +Name[ss]=Timo tetinhlamvu temagama +Name[sv]=Teckensnitt +Name[ta]=எழுத்துருக்கள் +Name[tg]=Ҳарфҳо +Name[th]=แบบอักษร +Name[tr]=Yazıtipleri +Name[tt]=Yazu +Name[uk]=Шрифти +Name[uz]=Shriftlar +Name[uz@cyrillic]=Шрифтлар +Name[ven]=Fontu +Name[vi]=Phông chữ +Name[wa]=Fontes +Name[xh]=Uhlobo lwamagama +Name[zh_CN]=字体 +Name[zh_TW]=字型 +Name[zu]=Izinhlobo zamagama + +Comment=Font settings +Comment[af]=Skrif tipe instellings +Comment[ar]=تعيينات المحرف +Comment[az]=Yazı növü qurğuları +Comment[be]=Настаўленні шрыфтоў +Comment[bg]=Настройване шрифтовете на системата +Comment[bn]=ফন্ট সেটিংস +Comment[br]=Kefluniañ ar fontoù +Comment[bs]=Postavke fontova +Comment[ca]=Arranjament de les lletres +Comment[cs]=Nastavení písem +Comment[csb]=Nastôw fòntów +Comment[cy]=Gosodiadau Ffontiau +Comment[da]=Skrifttypeindstillinger +Comment[de]=Schriftarten-Einstellungen +Comment[el]=Ρυθμίσεις γραμματοσειρών +Comment[eo]=Tiparagordo +Comment[es]=Opciones de los tipos de letra +Comment[et]=Fontide seadistused +Comment[eu]=Letra-tipoen konfigurazioa +Comment[fa]=تنظیمات قلم +Comment[fi]=Kirjasinten asetukset +Comment[fr]=Configuration des police de caractères +Comment[fy]=Lettertypen ynstellings +Comment[ga]=Socruithe na gclónna +Comment[gl]=Configuración das fontes +Comment[he]=שינוי הגדרות הגופנים +Comment[hi]=फ़ॉन्ट्स विन्यास +Comment[hr]=Postavke fontova +Comment[hu]=Betűtípus-beállítások +Comment[id]=Seting font +Comment[is]=Stillingar leturs +Comment[it]=Impostazioni tipi di carattere +Comment[ja]=フォントの設定 +Comment[ka]=ფონტების კონფიგურაცია +Comment[kk]=Қаріптерді орнату +Comment[km]=ការ​កំណត់​ពុម្ពអក្សរ +Comment[ko]=글꼴 설정 +Comment[lo]=ຕັ້ງຄ່າຮູບແບບຕົວອັກສອນ +Comment[lt]=Šriftų nustatymai +Comment[lv]=Fontu parametri +Comment[mk]=Поставувања на фонтовите +Comment[mn]=Бичиг тохируулах +Comment[ms]=Seting Fon +Comment[mt]=Konfigurazzjoni tal-fonts +Comment[nb]=Skriftinnstillinger +Comment[nds]=Schriftoorden instellen +Comment[ne]=फन्ट सेटिङ +Comment[nl]=Lettertypeninstellingen +Comment[nn]=Skriftinnstillingar +Comment[nso]=Dipeakanyo tsa difonto +Comment[oc]=Arranjament de les fonts +Comment[pa]=ਫੋਂਟ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia czcionek +Comment[pt]=Configuração dos tipos de letra +Comment[pt_BR]=Configuraçõess de Fontes +Comment[ro]=Configurează fonturile de sistem +Comment[ru]=Настройка шрифтов +Comment[rw]=Amagenamiterere y'imyandikire +Comment[se]=Fontaheivehusat +Comment[sk]=Nastavenie písiem +Comment[sl]=Nastavitve pisav +Comment[sr]=Поставке фонта +Comment[sr@Latn]=Postavke fonta +Comment[sv]=Anpassa teckensnitt +Comment[ta]=எழுத்துரு அமைப்புகள் +Comment[tg]=Танзимоти ҳарфҳо +Comment[th]=ตั้งค่าแบบอักษร +Comment[tr]=Yazıtipi ayarları +Comment[tt]=Yazu şäkellären caylaw +Comment[uk]=Налаштування шрифтів +Comment[uz]=Shriftlarni moslash +Comment[uz@cyrillic]=Шрифтларни мослаш +Comment[ven]=Mavhekanyele a fontu +Comment[vi]=Thiết lập phông chữ +Comment[wa]=Apontiaedje des fontes +Comment[xh]=Izicwangciso zohlobo lwamagama +Comment[zh_CN]=字体设置 +Comment[zh_TW]=字型設定 +Comment[zu]=Izilungiselelo Zohlobo lwamagama + +Keywords=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title +Keywords[ar]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,خطوط,حجم الخط,لوحة التحكم,محارف,المحارف,أسطح المكتب,مدير الملفات,أشرطة الأدوات,قائمة,عنوان النافذة,عنوان +Keywords[az]=yazı növləri,yazı böyüklüyü,tərz,hərf köməsi,panel,kicker,idarə masası,masa üstü,masa üstləri,Vasitə Çubuğu,Menyu,Pəncərə Başlığı,Başlıq +Keywords[be]=шрыфты,памер шрыфту,стылі,знаказборы,знакавыя зборы,панэль,панэль кіравання,працоўныя сталы,працоўны стол,кіраўнік файлаў,панэлі начынняў,панэль начыння,меню,загаловак акна,загаловак,назва,fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title +Keywords[bg]=шрифт, шрифтове, размер, символи, знаци, системен панел, fonts, font size, styles, charsets, character sets, panel, kicker, control panel, desktops, FileManager, Toolbars, Menu, Window Title, Title +Keywords[ca]=lletres,mida de lletra,estils,jocs de caràcters,plafó,kicker,plafó de control,escriptoris,Gestor de fitxers,Barres d'eines,Menú,Títol de finestra,Títol +Keywords[cs]=Písma,Velikost písem,Styly,Znaková sada,Panel,Kicker,Ovládací centrum,Plocha,Správce souborů,Nástrojová lišta,Nabídka,Titulek okna,Titulek +Keywords[csb]=fòntë,miara fòntu,sztél,zestôw znaków,panel,kicker,panel sterowaniô,pùltë,biurka,menedżera lopków,lëstwë nôrzãdzów,menu,titel òkna,titel +Keywords[cy]=ffontiau,maint ffontiau,arddulliau,setiau nodau,panel,ciciwr,rheolydd panel,penbyrddau,Rheolwr Ffeiliau,Barrau Offer,Dewislen,Teitl Ffenestr,Teitl +Keywords[da]=skrifttyper,skriftstørrelse,stil,tegnsæt,panel,kicker,kontrolpanel,desktoppe,Filhåndtering,Værktøjslinje,Menu,Vinduestitel,Titel +Keywords[de]=Schriftarten,Schriftgrößen,Zeichensätze,Kontrollleiste,Panel,Kicker,Stile,Dateimanager,Arbeitsflächen,Werkzeugleisten,Menüs,Fenstertitel,Titel +Keywords[el]=γραμματοσειρές,μέγεθος γραμματοσειράς,στυλ,σύνολα χαρακτήρων,σύνολα χαρακτήρων,πίνακας,kicker,πίνακας ελέγχου,επιφάνειες εργασίας,Διαχειριστής αρχείων,Γραμμές εργαλείων,Μενού,Τίτλος παραθύρου,Τίτλος +Keywords[eo]=tiparo,grandeco,stilo,signaro,panelo,lanĉilo,stirpanelo,tabuloj,dosieradministrilo,ilobretoj,menuo,fenestrotitolo,titolo +Keywords[es]=tipos de letra,tamaño del tipo de letra,estilos,mapas de caracteres,panel,kicker,panel de control,escritorios,Gestor de archivos,Barras de herramientas,Menú,Título de la ventana,Título +Keywords[et]=fondid,font,fondi suurus,stiil,kooditabel,paneel,kicker,juhtimiskeskus,töölauad,failihaldur,tööriistaribad,menüü,akna pealdis,pealdis +Keywords[eu]=letra-tipoak,letra-tipoa,neurria,estiloak,karaktere-multzoak,karactere ezarpenak ,panela,kicker,kontrol panela,mahaigainak,Fitxategi kudeatzailea,Tresna-barrak, Menua,Leihoaren titulua,Titulua +Keywords[fa]=قلمها، اندازۀ قلم، سبکها، نویسه‌گان، نویسه‌گان، تابلو، kicker، تابلوی کنترل، رومیزیها، مدیر پرونده، میله ابزارها، گزینگان، عنوان پنجره، عنوان +Keywords[fi]=kirjasimet,kirjasin,kirjasimen koko,tyyli,merkistö,paneeli,kicker,ohjauspaneeli,työpöydät,Tiedostonhallinta,Työkalurivit,Valikko,Ikkunan otsikko,Otsikko +Keywords[fr]=polices,police,taille de police,jeu de caractères,tableau de bord,kicker,bureau,bureaux,gestionnaire de fichiers,gestion de fichiers,barre d'outils,menu,titre de fenêtre,titre,fenêtre,barre de menus,barres de menus,barres d'outils +Keywords[fy]=fonts,font,letters,lettertypen,lettertypes,tekenset,karakterferzamling,paniel,kicker,Konfiguraasjesintrum,styl,triembehearder,wurkbalke,menu,Finster,titel,finstertitel,desktops,buroblêden +Keywords[ga]=clónna,clófhoirne,clómhéid,stíleanna,tacair charachtair,painéal,kicker,painéal rialaithe,deasca,Bainisteoir Comhad,Barraí Uirlisí,Roghchlár,Teideal Fuinneoige,Teideal +Keywords[gl]=fontes,tamaño da fonte,estilos,codificación,conxunto de carácteres,painel,kicker,painel de control,escritórios,Xestor de Ficheiros,Barras de ferramentas,Menu,Título da Fiestra,Título +Keywords[he]=לוח הבקרה,שולחנות עבודה,מנהל קבצים,סרגלי כלים,תפריט,כותרת, חלון,כותרת,גופנים,גודל גופן,סגנונות,מערכי תווים,לוח, fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title +Keywords[hi]=फ़ॉन्ट्स, फ़ॉन्ट्स आकार,शैली,कैरसेट,कैरेक्टर सेट्स,फलक,किकर, नियंत्रण फलक,डेस्कटॉप,फ़ाइल प्रबंधक,औज़ार पट्टी,मेन्यू,विंडो शीर्षक,शीर्षक +Keywords[hr]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,fontovi,veličina fonta,stilovi,znakovi,ploča,radna površina,alatne trake,izbornik,naslov prozora,naslov,upravljanje datotekama +Keywords[hu]=betűtípusok,betűméret,stílusok,karakterkészletek,panel,Kicker,vezérlőközpont,asztalok,fájlkezelő,eszköztár,menü,ablakcím,címsor +Keywords[id]=fonts,font,ukuran font,gaya,charset,panel,kicker,panel kontroldesktops,FileManager,Toolbars,Menu,Window Title,Title +Keywords[is]=letur,leturstærð,leturgerð,stafatafla,spjald,stillingar,spjald,kicker,gluggar,titill,titilrönd +Keywords[it]=tipi di carattere,caratteri,dimensione carattere,stile,insieme di caratteri,pannello,kicker,pannello di controllo,desktop,file manager,barre degli strumenti,menu,finestre,titolo finestra,titolo +Keywords[ja]=フォント,フォントサイズ,スタイル,文字セットパネル,kicker,コントロールパネル,デスクトップ,ファイルマネージャ,ツールバー,メニュー,ウィンドウタイトル,タイトル +Keywords[ka]=ფონტები,ფონტების ზომა,სტილები,სიმბოლოების რუქა,სიმბოლოების რუქა,პანელი,kicker,კონტროლის პანელი,სამუშაო მაგიდები,ფაილის მენეჯერი,ინსტრუმენტთა პანელი,მენიუ,ფანჯრის სათაური,სათაური +Keywords[km]=ពុម្ពអក្សរ,ទំហំ​ពុម្ពអក្សរ,រចនាប័ទ្ម,តួអក្សរ,សំណុំ​តួអក្សរ,បន្ទះ,kicker,ស្លាបព្រិល​បញ្ជា,ផ្ទៃតុ,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,របារ​ឧបករណ៍,ម៉ឺនុយ,ចំណងជើង​បង្អួច,ចំណងជើង +Keywords[lt]=fonts,šriftai,font size,šrifto dydis,styles,stiliai,charsets,kodavimas,koduotė,simbolių rinkinys,panel,pultas,kicker,control panel,Valdymo Centras,desktops,darbastaliai,FileManager,failų tvarkyklė,Toolbars,įrankinės,įrankių juostos,Menu,meniu,Window Title,Title,antraštė +Keywords[lv]=fonti,fonta izmērs,stili,čārseti,simbolu komplekti,panelis,kikers,vadības panelis,darbvirsmas,FailuMenedžeris,Rīkjoslas,Izvēlne,Loga Titli,Titli +Keywords[mk]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,фонтови,големина на фонтови,стилови,знаковно множество,знаковни множества,панел,контролен панел,површини,лентасо алатки,алатки,Мени,Наслов на прозорец,Наслов +Keywords[mn]=Бичгүүд,Бичгийн хэмжээ,Тэмдэгтүүд,Удирдах самбар,Самбар,Дамжуулагч,Хэлбэр,Файл удирдагч,Ажлын тавцан,Багаж самбар,Цэс,Цонхны толгой,Гарчиг +Keywords[nb]=skrift,skrifttyper,skriftstørrelse,stil,tegnsett,panel,kicker,kontrollpanel,skrivebord,filbehandler,verktøylinjer,meny,vindustittel,tittel +Keywords[nds]=Schriftoorden,Schriftgrött,Stilen,Tekensetten,Paneel,kicker,Kuntrullbalken,Schriefdischen,Dateimanager,Dateipleger,Warktüüchbalken,Menü,Finstertitel,Titel +Keywords[nl]=fonts,font,letters,lettertypen,lettertypes,tekenset,tekenverzamelingen,paneel,kicker,configuratiecentrum,stijl,bestandsbeheerder,werkbalk,menu,venster,titel,venstertitel,desktops,bureaubladen +Keywords[nn]=skrift,skrift,skriftstorleik,stil,teiknsett,panel,kicker,kontrollpanel,skrivebord,filhandsamar,verktøylinjer,meny,vindaugstittel,tittel +Keywords[nso]=difonto,bogolo bja difonto,mokgwa,charsets,dipeakanyo tsa dihlaka, panel,seragi,panel ya taolo,di-desktop,Molaodi wa Faele,Di-bar tsa Dibereka,Menu, Sehlogo sa Window,Sehlogo +Keywords[pa]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,ਫੋਂਟ,ਫੋਂਟ ਅਕਾਰ,ਕੰਟਰੋਲ ਪੈਨਲ,ਵੇਹੜਾ,ਫਾਇਲ ਮੈਨੇਜਰ,ਮੇਨੂ,ਟਾਇਟਲ +Keywords[pl]=czcionki,rozmiar czcionki,styl,zestaw znaków,panel,kicker,panel sterowania,pulpity,biurka,menedżer plików,paski narzędzi,menu,tytuł okna,tytuł +Keywords[pt]=tipo de letra,tipos de letra,fontes,fonte,tamanho de fonte,estilo,mapa de caracteres,painel,kicker,painel de controlo,ecrãs,gestor de ficheiros,barras de ferramentas,menu,título da janela,título +Keywords[pt_BR]=fontes,letras,tipos de letra,tamanho de fonte,tamanho de letra,estilo,conjunto de caracteres,painel,gerenciador de janelas,painel de controle,áreas de trabalho,Gerenciador de arquivos,barras de ferramentas,título da janela,título +Keywords[ro]=fonturi,font,mărime,stil,set de caractere,panou,kicker,panou de control,ecrane,manager de fișiere,bară de unelte,meniu,titlu fereastră,titlu +Keywords[rw]=Imyandikire,ingano y'imyandikire,imisusire,itsinda-nyuguti,amatsinday'inyuguti,umwanya,igitera,umwanya w'igenzura,ibiro,Mucungadosiye, Imyanyabikoresho,ibikubiyemo,Umutwe w'idirishya,Umutwe +Keywords[se]=fonttat,fontasturrodat,stiila,charsets,character sets,panela,kicker,stivrenpanela, čállinbeavddit,fiilagieđahalli,neavvoholggat,fálut,lásenamahusat,namahus +Keywords[sk]=písma,písmo,veľkosť písma,panel,ovládací panel,znakové sady,kódovanie,štýly,kicker,plochy,Správca súborov,Panely nástrojov,Ponuka,menu,titulok,titulok okna +Keywords[sl]=pisava,pisave,velikost pisave,slog,stil,znakovni nabor,pult,kicker,nadzorna plošča,upravitelj datotek,upravitelj,orodna vrstica,naslov okna,naslov +Keywords[sr]=fonts,фонт size,styles,charsets,character sets,панел,kicker,control панел,desktops,FileManager,Toolbars,Menu,Window Title,Title,стилови,мени,прозор,трака са алатима,менаџер фајлова,радна површина,скуп знакова +Keywords[sr@Latn]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,stilovi,meni,prozor,traka sa alatima,menadžer fajlova,radna površina,skup znakova +Keywords[sv]=typsnitt,teckensnitt,typsnittstorlek,teckensnittstorlek,stil,teckenkodning,panel,kicker,kontrollpanel,inställningscentral,Filhanterare,Verktygsrader,Meny,Fönstertitel,Titel +Keywords[ta]=எழுத்துருக்கள்,எழுத்துரு அளவு,பாணிகள்,எழுத்து அமைப்பு,எழுத்து அமைப்புகள்,பலகம்,கிக்கர்,கட்டுப்பாட்டு பலகம்,மேல்மேசைகள்,கோப்பு மேலாளர்,கருவிப்பட்டிகள்,பட்டியல்,சாளர தலைப்பு,தலைப்பு +Keywords[th]=แบบอักษร,ขนาดแบบอักษร,ลักษณะ,ชุดรหัสอักขระ,ชุดอักขระ,พาเนล,คิกเกอร์,ถาดควบคุม,พื้นที่ทำงาน,จัดการแฟ้ม,แถบเครื่องมือ,เมนู,แถบหัวเรื่องหน้าต่าง,แถบหัวเรื่อง +Keywords[tr]=yazıtipleri,yazı boyutu,stil,karakter kümesi,panel,kicker,denetim masası,masaüstü,masaüstleri,Araç Çubuğu,Menü,Pencere Başlığı,Başlık +Keywords[uk]=шрифти,шрифт,розмір шрифту,стиль,набір символів,панель,kicker,панель керування,стільниці,панель інструментів,меню,заголовок вікна,заголовок +Keywords[uz]=shriftlar,shriftning oʻlchami,uslublar,belgi toʻplami,kodlash usuli,panel,boshqaruv paneli,ish stollari,Fayl boshqaruvchisi,Asboblar paneli,Menyu,Oynaning sarlavhasi,Sarlavha +Keywords[uz@cyrillic]=шрифтлар,шрифтнинг ўлчами,услублар,белги тўплами,кодлаш усули,панел,бошқарув панели,иш столлари,Файл бошқарувчиси,Асбоблар панели,Меню,Ойнанинг сарлавҳаси,Сарлавҳа +Keywords[ven]=Dzifontu,saizi ya Fontu,Zwitaela,Tshasete,Mubvumbedzhwa,Phanele,Murahi,Phanele yau langula,desikithopo,Mulanguli wa faela,bara ya tshishumiswa,Menu,thoho ya windo,Thoho +Keywords[vi]=Phông chữ,cỡ,kiểu,bảng mã,bộ ký tự,bảng,thanh đẩy,bảng điều khiển,màn hình nền,Trình quản lý Tập tin,Thanh công cụ,Thực đơn,Tên Cửa sổ,Tên +Keywords[wa]=fonte,fontes,grandeu del fonte,stîle,miernowes,cråsses,clintcheyes,ecôdaedjes,djeu di caracteres,scriftôr,kicker,cinte di contrôle,scribannes,Manaedjeu di fitchîs,Bår d' usteyes,Menu,Dressêye,Tite do purnea,Bår di tite,Tite +Keywords[xh]=ubungakanani bamagama,ubungakanani begama,iintlobo,iicharset,amaqela abasebenzi,iqela labantu benjongo ethile,umkhabi,iqela labantu abalawulayo benjongo ethile,desktops,Umphathi wefayile iibar zesixhobo,Menu,Umxholo we Window,Umxholo +Keywords[zh_CN]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,字体,字体大小,风格,字符集,面板,控制面板,桌面,文件管理器,工具条,菜单,窗口标题,标题 +Keywords[zh_TW]=fonts,font size,styles,charsets,character sets,panel,kicker,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,字型,字型大小,風格,字元,字元集,面板,控制面板,桌面,檔案管理程式,工具列,選單,視窗標題,標題 +Keywords[zu]=Izinhlobo zamagama,uhlobo lwamagama,izitayela,charsets, amaqoqo ezaimpawu,kicker,lawula,iwindi lemininingwane,ama-desktop,Imenenja yefayela,amabha amathuluzi,Imenu,Isihloko se-Window,Isihloko + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/fonts/fonts.h b/kcontrol/fonts/fonts.h new file mode 100644 index 000000000..ca1ab7729 --- /dev/null +++ b/kcontrol/fonts/fonts.h @@ -0,0 +1,124 @@ +//----------------------------------------------------------------------------- +// +// kdisplay, fonts tab +// +// Copyright (c) Mark Donohoe 1997 +// Lars Knoll 1999 + +#ifndef FONTS_H +#define FONTS_H + +#include + +#include +#include +#include +#include + +#include "kxftconfig.h" + +class QCheckBox; +class QComboBox; +class KDoubleNumInput; +class FontAASettings; + +class FontUseItem : public KFontRequester +{ + Q_OBJECT + +public: + FontUseItem(QWidget * parent, const QString &name, const QString &grp, + const QString &key, const QString &rc, const QFont &default_fnt, + bool fixed = false); + + void readFont( bool useDefaults ); + void writeFont(); + void setDefault(); + void applyFontDiff(const QFont &fnt, int fontDiffFlags); + + const QString& rcFile() { return _rcfile; } + const QString& rcGroup() { return _rcgroup; } + const QString& rcKey() { return _rckey; } + +private: + QString _rcfile; + QString _rcgroup; + QString _rckey; + QFont _default; +}; + +class FontAASettings : public KDialogBase +{ + Q_OBJECT + +public: + + FontAASettings(QWidget *parent); + + bool save( bool useAA ); + bool load(); + bool load( bool useDefaults ); + void defaults(); + int getIndex(KXftConfig::SubPixel::Type spType); + KXftConfig::SubPixel::Type getSubPixelType(); +#ifdef HAVE_FONTCONFIG + int getIndex(KXftConfig::Hint::Style hStyle); + KXftConfig::Hint::Style getHintStyle(); +#endif + void enableWidgets(); + int exec(); + +protected slots: + + void changed(); + +private: + + QCheckBox *excludeRange; + QCheckBox *useSubPixel; + KDoubleNumInput *excludeFrom; + KDoubleNumInput *excludeTo; + QComboBox *subPixelType; +#ifdef HAVE_FONTCONFIG + QComboBox *hintingStyle; +#endif + QLabel *excludeToLabel; + bool changesMade; +}; + +/** + * The Desktop/fonts tab in kcontrol. + */ +class KFonts : public KCModule +{ + Q_OBJECT + +public: + KFonts(QWidget *parent, const char *name, const QStringList &); + ~KFonts(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +protected slots: + void fontSelected(); + void slotApplyFontDiff(); + void slotUseAntiAliasing(); + void slotCfgAa(); + +private: + enum AASetting { AAEnabled, AASystem, AADisabled }; + enum DPISetting { DPINone, DPI96, DPI120 }; + AASetting useAA, useAA_original; + DPISetting dpi_original; + QComboBox *cbAA; + QComboBox* comboForceDpi; + QPushButton *aaSettingsButton; + QPtrList fontUseList; + FontAASettings *aaSettings; +}; + +#endif + diff --git a/kcontrol/fonts/kxftconfig.cpp b/kcontrol/fonts/kxftconfig.cpp new file mode 100644 index 000000000..833e31118 --- /dev/null +++ b/kcontrol/fonts/kxftconfig.cpp @@ -0,0 +1,1544 @@ +/* + Copyright (c) 2002 Craig Drummond + + 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 "kxftconfig.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_FONTCONFIG +#include +#include +#include +#include +#endif + +using namespace std; + +QString KXftConfig::contractHome(QString path) +{ + if (!path.isEmpty() && '/'==path[0]) + { + QString home(QDir::homeDirPath()); + + if(path.startsWith(home)) + { + unsigned int len = home.length(); + + if(path.length() == len || path[len] == '/') + return path.replace(0, len, QString::fromLatin1("~")); + } + } + + return path; +} + +QString KXftConfig::expandHome(QString path) +{ + if(!path.isEmpty() && '~'==path[0]) + return 1==path.length() ? QDir::homeDirPath() : path.replace(0, 1, QDir::homeDirPath()); + + return path; +} + +static int point2Pixel(double point) +{ + return (int)(((point*QPaintDevice::x11AppDpiY())/72.0)+0.5); +} + +static int pixel2Point(double pixel) +{ + return (int)(((pixel*72.0)/(double)QPaintDevice::x11AppDpiY())+0.5); +} + +static bool equal(double d1, double d2) +{ + return (fabs(d1 - d2) < 0.0001); +} + +static QString dirSyntax(const QString &d) +{ + if(!d.isNull()) + { + QString ds(d); + + ds.replace("//", "/"); + + int slashPos=ds.findRev('/'); + + if(slashPos!=(((int)ds.length())-1)) + ds.append('/'); + + return ds; + } + + return d; +} + +static QString xDirSyntax(const QString &d) +{ + if(!d.isNull()) + { + QString ds(d); + int slashPos=ds.findRev('/'); + + if(slashPos==(((int)ds.length())-1)) + ds.remove(slashPos, 1); + return ds; + } + + return d; +} + +static bool check(const QString &path, unsigned int fmt, bool checkW=false) +{ + KDE_struct_stat info; + QCString pathC(QFile::encodeName(path)); + + return 0==KDE_lstat(pathC, &info) && (info.st_mode&S_IFMT)==fmt && (!checkW || 0==::access(pathC, W_OK)); +} + +inline bool fExists(const QString &p) +{ + return check(p, S_IFREG, false); +} + +inline bool dWritable(const QString &p) +{ + return check(p, S_IFDIR, true); +} + +inline bool dExists(const QString &p) +{ + return check(p, S_IFDIR, false); +} + +static QString getDir(const QString &f) +{ + QString d(f); + + int slashPos=d.findRev('/'); + + if(-1!=slashPos) + d.remove(slashPos+1, d.length()); + + return dirSyntax(d); +} + +static time_t getTimeStamp(const QString &item) +{ + KDE_struct_stat info; + + return !item.isNull() && 0==KDE_lstat(QFile::encodeName(item), &info) ? info.st_mtime : 0; +} + +#ifdef HAVE_FONTCONFIG + +inline QString fileSyntax(const QString &f) { return xDirSyntax(f); } +// +// Obtain location of config file to use. +// +// For system, prefer the following: +// +// <...>/config.d/00kde.conf = preferred method from FontConfig >= 2.3 +// <...>/local.conf +// +// Non-system, prefer: +// +// $HOME/<...>/.fonts.conf +// $HOME/<...>/fonts.conf +// +QString getConfigFile(bool system) +{ +#if (FC_VERSION>=20300) + static const char * constKdeRootFcFile="00kde.conf"; +#endif + + FcStrList *list=FcConfigGetConfigFiles(FcConfigGetCurrent()); + QStringList files; + FcChar8 *file; + QString home(dirSyntax(QDir::homeDirPath())); + + while((file=FcStrListNext(list))) + { + QString f((const char *)file); + + if(fExists(f)) + { + if(system || 0==fileSyntax(f).find(home)) // For nonsystem, only consider file within $HOME + files.append(f); + } +#if (FC_VERSION>=20300) + if(system && dExists(f) && (-1!=f.find(QRegExp("/conf\\.d/?$")) || -1!=f.find(QRegExp("/conf\\.d?$"))) ) + return dirSyntax(f)+constKdeRootFcFile; // This ones good enough for me! +#endif + } + + // + // Go through list of files, looking for the preferred one... + if(files.count()) + { + QStringList::Iterator it(files.begin()), + end(files.end()); + + for(; it!=end; ++it) + if(-1!=(*it).find(QRegExp(system ? "/local\\.conf$" : "/\\.?fonts\\.conf$"))) + return *it; + return files.front(); // Just return the 1st one... + } + else + return system ? "/etc/fonts/local.conf" : fileSyntax(home+"/.fonts.conf"); // Hmmm... no known files? +} + +static QString getEntry(QDomElement element, const char *type, unsigned int numAttributes, ...) +{ + if(numAttributes==element.attributes().length()) + { + va_list args; + unsigned int arg; + bool ok=true; + + va_start(args, numAttributes); + + for(arg=0; arg &list) +{ + KXftConfig::ListItem *cur; + + for(cur=list.first(); cur; cur=list.next()) + if(!cur->added()) + return cur; + return NULL; +} +#endif + +static KXftConfig::ListItem * getLastItem(QPtrList &list) +{ + KXftConfig::ListItem *cur; + + for(cur=list.last(); cur; cur=list.prev()) + if(!cur->added()) + return cur; + return NULL; +} + +#ifndef HAVE_FONTCONFIG +static const QString defaultPath("/usr/X11R6/lib/X11/XftConfig"); +static const QString defaultUserFile(".xftconfig"); +static const char * constSymEnc="\"glyphs-fontspecific\""; + +static const QString constConfigFiles[]= +{ + defaultPath, + + "/etc/X11/XftConfig", + QString::null +}; +#endif + +KXftConfig::KXftConfig(int required, bool system) + : m_required(required), +#ifdef HAVE_FONTCONFIG + m_doc("fontconfig"), +#else + m_size(0), + m_data(NULL), +#endif + m_system(system) +{ +#ifdef HAVE_FONTCONFIG + m_file=getConfigFile(system); + kdDebug(1208) << "Using fontconfig file:" << m_file << endl; + m_antiAliasing = aliasingEnabled(); +#else + if(system) + { + int f; + + for(f=0; !constConfigFiles[f].isNull(); ++f) + if(fExists(constConfigFiles[f])) + m_file=constConfigFiles[f]; + + if(m_file.isNull()) + m_file=defaultPath; + } + else + m_file= QString(QDir::homeDirPath()+"/"+defaultUserFile); +#endif +#ifndef HAVE_FONTCONFIG + m_symbolFamilies.setAutoDelete(true); +#endif + m_dirs.setAutoDelete(true); + reset(); +} + +KXftConfig::~KXftConfig() +{ +#ifndef HAVE_FONTCONFIG + delete [] m_data; + m_data=NULL; +#endif +} + +bool KXftConfig::reset() +{ + bool ok=false; + + m_madeChanges=false; +#ifdef HAVE_FONTCONFIG + m_hint.reset(); + m_hinting.reset(); +#else + m_symbolFamilies.clear(); +#endif + m_dirs.clear(); + m_excludeRange.reset(); + m_excludePixelRange.reset(); + m_subPixel.reset(); + +#ifdef HAVE_FONTCONFIG + QFile f(m_file); + + if(f.open(IO_ReadOnly)) + { + m_time=getTimeStamp(m_file); + ok=true; + m_doc.clear(); + + if(m_doc.setContent(&f)) + readContents(); + f.close(); + } + else + ok=!fExists(m_file) && dWritable(getDir(m_file)); + + if(m_doc.documentElement().isNull()) + m_doc.appendChild(m_doc.createElement("fontconfig")); +#else + QFile f(m_file); + + m_size=0; + delete [] m_data; + m_data=NULL; + + if(f.open(IO_Raw|IO_ReadOnly)) + { + m_time=getTimeStamp(m_file); + m_size=f.size(); + ok=true; + + if(m_size>0) + { + m_data=new char [m_size+1]; + + if(m_data) + { + f.readBlock(m_data, m_size); + m_data[m_size]='\0'; + readContents(); + } + } + f.close(); + } + else + ok=!fExists(m_file) && dWritable(getDir(m_file)); +#endif + + if(ok && m_required&ExcludeRange) + { + // + // Check exclude range values - i.e. size and pixel size... + if(!equal(0, m_excludeRange.from) || !equal(0, m_excludeRange.to)) // If "size" range is set, ensure "pixelsize" matches... + { + double pFrom=(double)point2Pixel(m_excludeRange.from), + pTo=(double)point2Pixel(m_excludeRange.to); + + if(!equal(pFrom, m_excludePixelRange.from) || !equal(pTo, m_excludePixelRange.to)) + { + m_excludePixelRange.from=pFrom; + m_excludePixelRange.to=pTo; + m_madeChanges=true; + apply(); + } + } + else if(!equal(0, m_excludePixelRange.from) || !equal(0, m_excludePixelRange.to)) // "pixelsize" set, but not "size" !!! + { + m_excludeRange.from=(int)pixel2Point(m_excludePixelRange.from); + m_excludeRange.to=(int)pixel2Point(m_excludePixelRange.to); + m_madeChanges=true; + apply(); + } + } + + return ok; +} + +bool KXftConfig::apply() +{ + bool ok=true; + + if(m_madeChanges) + { + // + // Check if file has been written since we last read it. If it has, then re-read and add any + // of our changes... + if(fExists(m_file) && getTimeStamp(m_file)!=m_time) + { + KXftConfig newConfig(m_required, m_system); + QStringList list; + QStringList::Iterator it; + + if(m_required&Dirs) + { + list=getDirs(); + for(it=list.begin(); it!=list.end(); ++it) + newConfig.addDir(*it); + } + + if(m_required&ExcludeRange) + newConfig.setExcludeRange(m_excludeRange.from, m_excludeRange.to); + if(m_required&SubPixelType) + newConfig.setSubPixelType(m_subPixel.type); +#ifdef HAVE_FONTCONFIG + if(m_required&HintStyle) + newConfig.setHintStyle(m_hint.style); + if(m_required&AntiAlias) + newConfig.setAntiAliasing(m_antiAliasing.set); +#else + if(m_required&SymbolFamilies) + { + list=getSymbolFamilies(); + for(it=list.begin(); it!=list.end(); ++it) + newConfig.addSymbolFamily(*it); + } +#endif + + ok=newConfig.changed() ? newConfig.apply() : true; + if(ok) + reset(); + else + m_time=getTimeStamp(m_file); + } + else + { + if(m_required&ExcludeRange) + { + // Ensure these are always equal... + m_excludePixelRange.from=(int)point2Pixel(m_excludeRange.from); + m_excludePixelRange.to=(int)point2Pixel(m_excludeRange.to); + } + +#ifdef HAVE_FONTCONFIG + FcAtomic *atomic=FcAtomicCreate((const unsigned char *)((const char *)(QFile::encodeName(m_file)))); + + ok=false; + if(atomic) + { + if(FcAtomicLock(atomic)) + { + FILE *f=fopen((char *)FcAtomicNewFile(atomic), "w"); + + if(f) + { + if(m_required&Dirs) + { + applyDirs(); + removeItems(m_dirs); + } + if(m_required&SubPixelType) + applySubPixelType(); + if(m_required&HintStyle) + applyHintStyle(); + if(m_required&AntiAlias) + applyAntiAliasing(); + if(m_required&ExcludeRange) + { + applyExcludeRange(false); + applyExcludeRange(true); + } + + // + // Check document syntax... + const char qtXmlHeader[] = ""; + const char xmlHeader[] = ""; + const char qtDocTypeLine[] = ""; + const char docTypeLine[] = ""; + + QString str(m_doc.toString()); + int idx; + + if(0!=str.find("start < first->start)) + { + first=fdi; + type=Dirs; + } + if(m_required&SymbolFamilies && NULL!=(ffi=getFirstItem(m_symbolFamilies)) && (NULL==first || ffi->start < first->start)) + { + first=ffi; + type=SymbolFamilies; + } + if(m_required&SubPixelType && NULL!=m_subPixel.start && (NULL==first || m_subPixel.start < first->start)) + { + first=&m_subPixel; + type=SubPixelType; + } + if(m_required&ExcludeRange) + if(NULL!=m_excludeRange.start && (NULL==first || m_excludeRange.start < first->start)) + { + first=&m_excludeRange; + type=ExcludeRange; + pixel=false; + } + else if(NULL!=m_excludePixelRange.start && (NULL==first || m_excludePixelRange.start < first->start)) + { + first=&m_excludePixelRange; + type=ExcludeRange; + pixel=true; + } + + if(first && first->start!=pos) + f.write(pos, first->start-pos); + + if(0!=type) + pos=first->end+1; + + switch(type) + { + case Dirs: + if(!first->toBeRemoved) + outputDir(f, fdi->str); + m_dirs.remove(fdi); + if(fdi==ldi) + outputNewDirs(f); + break; + case SymbolFamilies: + if(!first->toBeRemoved) + outputSymbolFamily(f, ffi->str); + m_symbolFamilies.remove(ffi); + if(ffi==lfi) + outputNewSymbolFamilies(f); + break; + case SubPixelType: + if(!first->toBeRemoved) + outputSubPixelType(f, false); + m_subPixel.start=NULL; + break; + case ExcludeRange: + if(!first->toBeRemoved) + outputExcludeRange(f, false, pixel); + m_excludeRange.start=NULL; + break; + case 0: // 0 => All read in entries written... + if(m_size && (pos < m_data+m_size)) + f.write(pos, (m_data+m_size)-pos); + default: + finished=true; + break; + } + }; + + outputNewDirs(f); + outputNewSymbolFamilies(f); + outputSubPixelType(f, true); + outputExcludeRange(f, true, false); + outputExcludeRange(f, true, true); + f.close(); + reset(); // Re-read contents... + } + else + ok=false; +#endif + } + } + + return ok; +} + +bool KXftConfig::getSubPixelType(SubPixel::Type &type) +{ + type=m_subPixel.type; + return SubPixel::None!=m_subPixel.type; +} + +void KXftConfig::setSubPixelType(SubPixel::Type type) +{ + if(type!=m_subPixel.type) + { + m_subPixel.type=type; + m_madeChanges=true; + } +} + +#ifdef HAVE_FONTCONFIG +bool KXftConfig::getHintStyle(Hint::Style &style) +{ + if(Hint::NotSet!=m_hint.style && !m_hint.toBeRemoved) + { + style=m_hint.style; + return true; + } + else + return false; +} + +void KXftConfig::setHintStyle(Hint::Style style) +{ + if((Hint::NotSet==style && Hint::NotSet!=m_hint.style && !m_hint.toBeRemoved) || + (Hint::NotSet!=style && (style!=m_hint.style || m_hint.toBeRemoved)) ) + { + m_hint.toBeRemoved=(Hint::NotSet==style); + m_hint.style=style; + m_madeChanges=true; + } + + if(Hint::NotSet!=style) + setHinting(Hint::None!=m_hint.style); +} + +void KXftConfig::setHinting(bool set) +{ + if(set!=m_hinting.set) + { + m_hinting.set=set; + m_madeChanges=true; + } +} +#endif + +bool KXftConfig::getExcludeRange(double &from, double &to) +{ + if(!equal(0, m_excludeRange.from) || !equal(0,m_excludeRange.to)) + { + from=m_excludeRange.from; + to=m_excludeRange.to; + return true; + } + else + return false; +} + + +void KXftConfig::setExcludeRange(double from, double to) +{ + double f=fromstr)) + return true; + + return false; +#else + return NULL!=findItem(m_dirs, dir); +#endif +} + +KXftConfig::ListItem * KXftConfig::findItem(QPtrList &list, const QString &i) +{ + ListItem *item; + + for(item=list.first(); item; item=list.next()) + if(item->str==i) + break; + + return item; +} + +void KXftConfig::clearList(QPtrList &list) +{ + ListItem *item; + + for(item=list.first(); item; item=list.next()) + removeItem(list, item); +} + +QStringList KXftConfig::getList(QPtrList &list) +{ + QStringList res; + ListItem *item; + + for(item=list.first(); item; item=list.next()) + if(!item->toBeRemoved) + res.append(item->str); + + return res; +} + +void KXftConfig::addItem(QPtrList &list, const QString &i) +{ + ListItem *item=findItem(list, i); + + if(!item) + { + list.append(new ListItem(i +#ifndef HAVE_FONTCONFIG + , NULL, NULL +#endif + )); + m_madeChanges=true; + } + else + item->toBeRemoved=false; +} + +void KXftConfig::removeItem(QPtrList &list, ListItem *item) +{ + if(item) + { + if(item->added()) + list.remove(item); + else + item->toBeRemoved=true; + m_madeChanges=true; + } +} + +void KXftConfig::readContents() +{ +#ifdef HAVE_FONTCONFIG + QDomNode n = m_doc.documentElement().firstChild(); + + while(!n.isNull()) + { + QDomElement e = n.toElement(); + + if(!e.isNull()) + if("dir"==e.tagName()) + { + if(m_required&Dirs) + m_dirs.append(new ListItem(expandHome(dirSyntax(e.text())), n)); + } + else if("match"==e.tagName()) + { + QString str; + + switch(e.childNodes().count()) + { + case 1: + if(m_required&SubPixelType && "font"==e.attribute("target")) + { + QDomElement ene=e.firstChild().toElement(); + + if(!ene.isNull() && "edit"==ene.tagName()) + if(!(str=getEntry(ene, "const", 2, "name", "rgba", "mode", "assign")).isNull()) + { + m_subPixel.node=n; + m_subPixel.type=strToType(str.latin1()); + } + else if(!(str=getEntry(ene, "const", 2, "name", "hintstyle", "mode", "assign")).isNull()) + { + m_hint.node=n; + m_hint.style=strToStyle(str.latin1()); + } + else if(!(str=getEntry(ene, "bool", 2, "name", "hinting", "mode", "assign")).isNull()) + { + m_hinting.node=n; + m_hinting.set=str.lower()!="false"; + } + else if(!(str=getEntry(ene, "bool", 2, "name", "antialias", "mode", "assign")).isNull()) + { + m_antiAliasing.node=n; + m_antiAliasing.set=str.lower()!="false"; + } + } + break; + case 3: + if(m_required&ExcludeRange && "font"==e.attribute("target")) // CPD: Is target "font" or "pattern" ???? + { + bool foundFalse=false; + QDomNode en=e.firstChild(); + QString family; + double from=-1.0, + to=-1.0, + pixelFrom=-1.0, + pixelTo=-1.0; + + while(!en.isNull()) + { + QDomElement ene=en.toElement(); + + if(!ene.isNull()) + if("test"==ene.tagName()) + { + // kcmfonts used to write incorrectly more or less instead of more_eq and less_eq, so read both, + // first the old (wrong) one then the right one + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "size", "compare", "more")).isNull()) + from=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "size", "compare", "more_eq")).isNull()) + from=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "size", "compare", "less")).isNull()) + to=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "size", "compare", "less_eq")).isNull()) + to=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "pixelsize", "compare", "more")).isNull()) + pixelFrom=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "pixelsize", "compare", "more_eq")).isNull()) + pixelFrom=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "pixelsize", "compare", "less")).isNull()) + pixelTo=str.toDouble(); + if(!(str=getEntry(ene, "double", 3, "qual", "any", "name", "pixelsize", "compare", "less_eq")).isNull()) + pixelTo=str.toDouble(); + } + else if("edit"==ene.tagName() && "false"==getEntry(ene, "bool", 2, "name", "antialias", "mode", "assign")) + foundFalse=true; + + en=en.nextSibling(); + } + + if((from>=0 || to>=0) && foundFalse) + { + m_excludeRange.from=from < to ? from : to; + m_excludeRange.to =from < to ? to : from; + m_excludeRange.node=n; + } + else if((pixelFrom>=0 || pixelTo>=0) && foundFalse) + { + m_excludePixelRange.from=pixelFrom < pixelTo ? pixelFrom : pixelTo; + m_excludePixelRange.to =pixelFrom < pixelTo ? pixelTo : pixelFrom; + m_excludePixelRange.node=n; + } + } + break; + default: + break; + } + } + n=n.nextSibling(); + } +#else + static const int constMaxDataLen=2048; + + char *from=NULL, + *ptr=m_data, + *eostr=NULL, + data[constMaxDataLen]; + + if(m_required&Dirs) + while((ptr=getKey(ptr, "dir"))) + { + from=ptr; + ptr+=4; + while(isWhiteSpace(*ptr)) + ptr++; + + if(*ptr=='\"') + { + ptr++; + if(NULL!=(eostr=strchr(ptr, '\"')) && eostr-ptr")||skipToken(&ptr, "<")) && + readNum(&ptr, &efrom) && skipToken(&ptr, "any") && skipToken(&ptr, "size") && + (skipToken(&ptr, "<")||skipToken(&ptr, ">")) && readNum(&ptr, &eto) && skipToken(&ptr, "edit") && + skipToken(&ptr, "antialias") && skipToken(&ptr, "=") && skipToken(&ptr, "false") && skipToken(&ptr, ";")) + { + while(*ptr!='\n' && *ptr!='\0' && isWhiteSpace(*ptr)) + ptr++; + m_excludeRange.from=efrom")||skipToken(&ptr, "<")) && + readNum(&ptr, &efrom) && skipToken(&ptr, "any") && skipToken(&ptr, "pixelsize") && + (skipToken(&ptr, "<")||skipToken(&ptr, ">")) && readNum(&ptr, &eto) && skipToken(&ptr, "edit") && + skipToken(&ptr, "antialias") && skipToken(&ptr, "=") && skipToken(&ptr, "false") && skipToken(&ptr, ";")) + { + while(*ptr!='\n' && *ptr!='\0' && isWhiteSpace(*ptr)) + ptr++; + m_excludePixelRange.from=efromtoBeRemoved && item->node.isNull()) + { + QDomElement newNode = m_doc.createElement("dir"); + QDomText text = m_doc.createTextNode(contractHome(xDirSyntax(item->str))); + + newNode.appendChild(text); + + if(last) + m_doc.documentElement().insertAfter(newNode, last->node); + else + m_doc.documentElement().appendChild(newNode); + } +} + +void KXftConfig::applySubPixelType() +{ + QDomElement matchNode = m_doc.createElement("match"), + typeNode = m_doc.createElement("const"), + editNode = m_doc.createElement("edit"); + QDomText typeText = m_doc.createTextNode(toStr(m_subPixel.type)); + + matchNode.setAttribute("target", "font"); + editNode.setAttribute("mode", "assign"); + editNode.setAttribute("name", "rgba"); + editNode.appendChild(typeNode); + typeNode.appendChild(typeText); + matchNode.appendChild(editNode); + if(m_subPixel.node.isNull()) + m_doc.documentElement().appendChild(matchNode); + else + m_doc.documentElement().replaceChild(matchNode, m_subPixel.node); + m_subPixel.node=matchNode; +} + +void KXftConfig::applyHintStyle() +{ + applyHinting(); + + if(Hint::NotSet==m_hint.style || m_hint.toBeRemoved) + { + if(!m_hint.node.isNull()) + { + m_doc.documentElement().removeChild(m_hint.node); + m_hint.node.clear(); + } + } + else + { + QDomElement matchNode = m_doc.createElement("match"), + typeNode = m_doc.createElement("const"), + editNode = m_doc.createElement("edit"); + QDomText typeText = m_doc.createTextNode(toStr(m_hint.style)); + + matchNode.setAttribute("target", "font"); + editNode.setAttribute("mode", "assign"); + editNode.setAttribute("name", "hintstyle"); + editNode.appendChild(typeNode); + typeNode.appendChild(typeText); + matchNode.appendChild(editNode); + if(m_hint.node.isNull()) + m_doc.documentElement().appendChild(matchNode); + else + m_doc.documentElement().replaceChild(matchNode, m_hint.node); + m_hint.node=matchNode; + } +} + +void KXftConfig::applyHinting() +{ + QDomElement matchNode = m_doc.createElement("match"), + typeNode = m_doc.createElement("bool"), + editNode = m_doc.createElement("edit"); + QDomText typeText = m_doc.createTextNode(m_hinting.set ? "true" : "false"); + + matchNode.setAttribute("target", "font"); + editNode.setAttribute("mode", "assign"); + editNode.setAttribute("name", "hinting"); + editNode.appendChild(typeNode); + typeNode.appendChild(typeText); + matchNode.appendChild(editNode); + if(m_hinting.node.isNull()) + m_doc.documentElement().appendChild(matchNode); + else + m_doc.documentElement().replaceChild(matchNode, m_hinting.node); + m_hinting.node=matchNode; +} + +void KXftConfig::applyExcludeRange(bool pixel) +{ + Exclude &range=pixel ? m_excludePixelRange : m_excludeRange; + + if(equal(range.from, 0) && equal(range.to, 0)) + { + if(!range.node.isNull()) + { + m_doc.documentElement().removeChild(range.node); + range.node.clear(); + } + } + else + { + QString fromString, + toString; + + fromString.setNum(range.from); + toString.setNum(range.to); + + QDomElement matchNode = m_doc.createElement("match"), + fromTestNode = m_doc.createElement("test"), + fromNode = m_doc.createElement("double"), + toTestNode = m_doc.createElement("test"), + toNode = m_doc.createElement("double"), + editNode = m_doc.createElement("edit"), + boolNode = m_doc.createElement("bool"); + QDomText fromText = m_doc.createTextNode(fromString), + toText = m_doc.createTextNode(toString), + boolText = m_doc.createTextNode("false"); + + matchNode.setAttribute("target", "font"); // CPD: Is target "font" or "pattern" ???? + fromTestNode.setAttribute("qual", "any"); + fromTestNode.setAttribute("name", pixel ? "pixelsize" : "size"); + fromTestNode.setAttribute("compare", "more_eq"); + fromTestNode.appendChild(fromNode); + fromNode.appendChild(fromText); + toTestNode.setAttribute("qual", "any"); + toTestNode.setAttribute("name", pixel ? "pixelsize" : "size"); + toTestNode.setAttribute("compare", "less_eq"); + toTestNode.appendChild(toNode); + toNode.appendChild(toText); + editNode.setAttribute("mode", "assign"); + editNode.setAttribute("name", "antialias"); + editNode.appendChild(boolNode); + boolNode.appendChild(boolText); + matchNode.appendChild(fromTestNode); + matchNode.appendChild(toTestNode); + matchNode.appendChild(editNode); + + if(!m_antiAliasing.node.isNull()) + m_doc.documentElement().removeChild(range.node); + m_doc.documentElement().appendChild(matchNode); + range.node=matchNode; + } +} + +void KXftConfig::removeItems(QPtrList &list) +{ + ListItem *item; + QDomElement docElem = m_doc.documentElement(); + + for(item=list.first(); item; item=list.next()) + if(item->toBeRemoved && !item->node.isNull()) + docElem.removeChild(item->node); +} +#else +void KXftConfig::outputDir(std::ofstream &f, const QString &str) +{ + f << "dir \"" << contractHome(xDirSyntax(str)).local8Bit() << "\"" << endl; +} + +void KXftConfig::outputNewDirs(std::ofstream &f) +{ + ListItem *item; + + for(item=m_dirs.first(); item; item=m_dirs.next()) + if(!item->toBeRemoved && NULL==item->start) + outputDir(f, item->str); + m_dirs.clear(); +} + +void KXftConfig::outputSymbolFamily(std::ofstream &f, const QString &str) +{ + f << "match any family == \"" << str.local8Bit() << "\" edit encoding = " << constSymEnc << ';' << endl; +} + +void KXftConfig::outputNewSymbolFamilies(std::ofstream &f) +{ + ListItem *item; + + for(item=m_symbolFamilies.first(); item; item=m_symbolFamilies.next()) + if(!item->toBeRemoved && NULL==item->start) + outputSymbolFamily(f, item->str); + m_symbolFamilies.clear(); +} + +void KXftConfig::outputSubPixelType(std::ofstream &f, bool ifNew) +{ + if((ifNew && NULL==m_subPixel.end) || (!ifNew && NULL!=m_subPixel.end)) + f << "match edit rgba = " << toStr(m_subPixel.type) << ';' << endl; +} + +void KXftConfig::outputExcludeRange(std::ofstream &f, bool ifNew, bool pixel) +{ + Exclude &range=pixel ? m_excludePixelRange : m_excludeRange; + + if(((ifNew && NULL==range.end) || (!ifNew && NULL!=range.end)) && + (!equal(range.from,0) || !equal(range.to,0))) + { + if(pixel) + f << "match any pixelsize > "; + else + f << "match any size > "; + + f << range.from; + if(pixel) + f << " any pixelsize < "; + else + f << " any size < "; + f << range.to << " edit antialias = false;" << endl; +} +} + +#endif + +#ifdef HAVE_FONTCONFIG +bool KXftConfig::getAntiAliasing() const +{ + return m_antiAliasing.set; +} + +void KXftConfig::setAntiAliasing( bool set ) +{ + if ((set && !m_antiAliasing.set) || (!set && m_antiAliasing.set)) + { + m_antiAliasing.set = set; + m_madeChanges = true; + } +} + +void KXftConfig::applyAntiAliasing() +{ + QDomElement matchNode = m_doc.createElement("match"), + typeNode = m_doc.createElement("bool"), + editNode = m_doc.createElement("edit"); + QDomText typeText = m_doc.createTextNode(m_antiAliasing.set ? "true" : "false"); + + matchNode.setAttribute("target", "font"); + editNode.setAttribute("mode", "assign"); + editNode.setAttribute("name", "antialias"); + editNode.appendChild(typeNode); + typeNode.appendChild(typeText); + matchNode.appendChild(editNode); + if(!m_antiAliasing.node.isNull()) + m_doc.documentElement().removeChild(m_antiAliasing.node); + m_doc.documentElement().appendChild(matchNode); + m_antiAliasing.node=matchNode; +} + +// KXftConfig only parses one config file, user's .fonts.conf usually. +// If that one doesn't exist, then KXftConfig doesn't know if antialiasing +// is enabled or not. So try to find out the default value from the default font. +// Maybe there's a better way *shrug*. +bool KXftConfig::aliasingEnabled() +{ + FcPattern *pattern = FcPatternCreate(); + FcConfigSubstitute(0, pattern, FcMatchPattern); + FcDefaultSubstitute(pattern); + FcResult result; + FcPattern *f = FcFontMatch( 0, pattern, &result ); + FcBool antialiased = FcTrue; + FcPatternGetBool( f, FC_ANTIALIAS, 0, &antialiased ); + FcPatternDestroy( f ); + FcPatternDestroy( pattern ); + return antialiased == FcTrue; +} + +#else + +void KXftConfig::setAntiAliasing( bool set ) +{ + QSettings().writeEntry("/qt/useXft", set); + if (set) + QSettings().writeEntry("/qt/enableXft", set); +} + +bool KXftConfig::getAntiAliasing() const +{ + return QSettings().readBoolEntry("/qt/useXft"); +} + + +#endif diff --git a/kcontrol/fonts/kxftconfig.h b/kcontrol/fonts/kxftconfig.h new file mode 100644 index 000000000..6828f1d88 --- /dev/null +++ b/kcontrol/fonts/kxftconfig.h @@ -0,0 +1,277 @@ +#ifndef __KXFTCONFIG_H__ +#define __KXFTCONFIG_H__ + +/* + Copyright (c) 2002 Craig Drummond + + 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. +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_FONTCONFIG +#include +#endif + +class KXftConfig +{ + public: + + enum RequiredData + { + Dirs = 0x01, + SubPixelType = 0x02, + ExcludeRange = 0x04, + AntiAlias = 0x08, +#ifdef HAVE_FONTCONFIG + HintStyle = 0x10 +#else + SymbolFamilies = 0x10 +#endif + }; + +#ifdef HAVE_FONTCONFIG + static const int constStyleSettings=SubPixelType|ExcludeRange|AntiAlias|HintStyle; +#else + static const int constStyleSettings=SubPixelType|ExcludeRange|AntiAlias|SymbolFamilies; +#endif + + struct Item + { +#ifdef HAVE_FONTCONFIG + Item(QDomNode &n) : node(n), toBeRemoved(false) {} + Item() : toBeRemoved(false) {} + virtual void reset() { node.clear(); toBeRemoved=false; } + bool added() { return node.isNull(); } + + QDomNode node; +#else + Item(char *s, char *e) : start(s), end(e), toBeRemoved(false) {} + virtual void reset() { start=end=NULL; toBeRemoved=false; } + bool added() { return NULL==start; } + + char *start, + *end; +#endif + virtual ~Item() {}; + bool toBeRemoved; + }; + + struct ListItem : public Item + { +#ifdef HAVE_FONTCONFIG + ListItem(const QString &st, QDomNode &n) : Item(n), str(st) {} + ListItem(const QString &st) : str(st) {} +#else + ListItem(const QString &st, char *s=NULL, char *e=NULL) : Item(s, e), str(st) {} +#endif + + QString str; + }; + + struct SubPixel : public Item + { + enum Type + { + None, + Rgb, + Bgr, + Vrgb, + Vbgr + }; + +#ifdef HAVE_FONTCONFIG + SubPixel(Type t, QDomNode &n) : Item(n), type(t) {} + SubPixel(Type t=None) : type(t) {} +#else + SubPixel(Type t=None, char *s=NULL, char *e=NULL) : Item(s, e), type(t) {} +#endif + void reset() { Item::reset(); type=None; } + + Type type; + }; + + struct Exclude : public Item + { +#ifdef HAVE_FONTCONFIG + Exclude(double f, double t, QDomNode &n) : Item(n), from(f), to(t) {} + Exclude(double f=0, double t=0) : from(f), to(t) {} +#else + Exclude(double f=0, double t=0, char *s=NULL, char *e=NULL) : Item(s, e), from(f), to(t) {} +#endif + void reset() { Item::reset(); from=to=0; } + + double from, + to; + }; + +#ifdef HAVE_FONTCONFIG + struct Hint : public Item + { + enum Style + { + NotSet, + None, + Slight, + Medium, + Full + }; + + Hint(Style s, QDomNode &n) : Item(n), style(s) {} + Hint(Style s=NotSet) : style(s) {} + + void reset() { Item::reset(); style=NotSet; } + + Style style; + }; + + struct Hinting : public Item + { + Hinting(bool s, QDomNode &n) : Item(n), set(s) {} + Hinting(bool s=true) : set(s) {} + + void reset() { Item::reset(); set=true; } + + bool set; + }; + + struct AntiAliasing : public Item + { + AntiAliasing(bool s, QDomNode &n) : Item(n), set(s) {} + AntiAliasing(bool s=true) : set(s) {} + + void reset() { Item::reset(); set=true; } + + bool set; + }; +#endif + + public: + + static QString contractHome(QString path); + static QString expandHome(QString path); + + // + // Constructor + // required - This should be a bitmask of 'RequiredData', and indicates the data to be + // read/written to the config file. It is intended that the 'fonts' KControl + // module will use KXftConfig::SubPixelType|KXftConfig::ExcludeRange, and the + // font installer will use KXftConfig::Dirs|KXftConfig::SymbolFamilies. + // + // system - Indicates if the system-wide config file, or the users ~/.xftconfig file + // should be used. Only the font-installer should access the system file (and then + // only if run as root. + KXftConfig(int required, bool system=false); + + virtual ~KXftConfig(); + + bool reset(); + bool apply(); + bool getSubPixelType(SubPixel::Type &type); + void setSubPixelType(SubPixel::Type type); // SubPixel::None => turn off sub-pixel hinting + bool getExcludeRange(double &from, double &to); + void setExcludeRange(double from, double to); // from:0, to:0 => turn off exclude range + void addDir(const QString &d); + void removeDir(const QString &d); + void clearDirs() { clearList(m_dirs); } + QStringList getDirs() { return getList(m_dirs); } +#ifdef HAVE_FONTCONFIG + bool getHintStyle(Hint::Style &style); + void setHintStyle(Hint::Style style); +#else + void addSymbolFamily(const QString &f) { addItem(m_symbolFamilies, f); } + void removeSymbolFamily(const QString &f) { removeItem(m_symbolFamilies, f); } + void clearSymbolFamilies() { clearList(m_symbolFamilies); } + QStringList getSymbolFamilies() { return getList(m_symbolFamilies); } +#endif + void setAntiAliasing(bool set); + bool getAntiAliasing() const; + bool changed() { return m_madeChanges; } + static QString description(SubPixel::Type t); + static const char * toStr(SubPixel::Type t); +#ifdef HAVE_FONTCONFIG + static QString description(Hint::Style s); + static const char * toStr(Hint::Style s); +#endif + bool hasDir(const QString &d); + + private: + + ListItem * findItem(QPtrList &list, const QString &i); + void clearList(QPtrList &list); + static QStringList getList(QPtrList &list); + void addItem(QPtrList &list, const QString &i); + void removeItem(QPtrList &list, ListItem *item); + void removeItem(QPtrList &list, const QString &i) { removeItem(list, findItem(list, i)); } + void readContents(); +#ifdef HAVE_FONTCONFIG + void applyDirs(); +#if 0 + void applySymbolFamilies(); +#endif + void applySubPixelType(); + void applyHintStyle(); + void applyAntiAliasing(); + void setHinting(bool set); + void applyHinting(); + void applyExcludeRange(bool pixel); + void removeItems(QPtrList &list); +#else + void outputDir(std::ofstream &f, const QString &str); + void outputNewDirs(std::ofstream &f); + void outputSymbolFamily(std::ofstream &f, const QString &str); + void outputNewSymbolFamilies(std::ofstream &f); + void outputSubPixelType(std::ofstream &f, bool ifNew); + void outputExcludeRange(std::ofstream &f, bool ifNew, bool pixel); +#endif + + private: + + SubPixel m_subPixel; + Exclude m_excludeRange, + m_excludePixelRange; +#ifdef HAVE_FONTCONFIG + Hint m_hint; + Hinting m_hinting; + AntiAliasing m_antiAliasing; + bool aliasingEnabled(); +#else + QPtrList m_symbolFamilies; +#endif + QPtrList m_dirs; + QString m_file; + int m_required; +#ifdef HAVE_FONTCONFIG + QDomDocument m_doc; +#else + int m_size; + char *m_data; +#endif + bool m_madeChanges, + m_system; + time_t m_time; +}; + +#endif diff --git a/kcontrol/icons/Makefile.am b/kcontrol/icons/Makefile.am new file mode 100644 index 000000000..4e00a730c --- /dev/null +++ b/kcontrol/icons/Makefile.am @@ -0,0 +1,25 @@ +AM_CPPFLAGS = $(all_includes) + +kde_module_LTLIBRARIES = kcm_icons.la + +kcm_icons_la_SOURCES = iconthemes.cpp icons.cpp main.cpp +kcm_icons_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined +kcm_icons_la_LIBADD = $(LIB_KIO) + +METASOURCES = AUTO + +noinst_HEADERS = icons.h iconthemes.h main.h + +check_PROGRAMS = testicons +testicons_SOURCES = testicons.cpp +testicons_LDFLAGS = $(all_libraries) +testicons_LDADD = $(LIB_KDEUI) icons.lo + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kcmicons.pot + +xdg_apps_DATA = icons.desktop + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/Themes + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/Themes/iconthemes.desktop diff --git a/kcontrol/icons/icons.cpp b/kcontrol/icons/icons.cpp new file mode 100644 index 000000000..85a72e075 --- /dev/null +++ b/kcontrol/icons/icons.cpp @@ -0,0 +1,666 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kcmdisplay. + * Copyright (C) 2000 Geert Jansen + * with minor additions and based on ideas from + * Torsten Rahn * + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "icons.h" + +/**** KIconConfig ****/ + +KIconConfig::KIconConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + + QGridLayout *top = new QGridLayout(this, 2, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + top->setColStretch(0, 1); + top->setColStretch(1, 1); + + // Use of Icon at (0,0) - (1, 0) + QGroupBox *gbox = new QGroupBox(i18n("Use of Icon"), this); + top->addMultiCellWidget(gbox, 0, 1, 0, 0); + QBoxLayout *g_vlay = new QVBoxLayout(gbox, + KDialog::marginHint(), + KDialog::spacingHint()); + g_vlay->addSpacing(fontMetrics().lineSpacing()); + mpUsageList = new QListBox(gbox); + connect(mpUsageList, SIGNAL(highlighted(int)), SLOT(slotUsage(int))); + g_vlay->addWidget(mpUsageList); + + KSeparator *sep = new KSeparator( KSeparator::HLine, this ); + top->addWidget(sep, 1, 1); + // Preview at (2,0) - (2, 1) + QGridLayout *g_lay = new QGridLayout(4, 3, KDialog::marginHint(), 0); + top->addMultiCellLayout(g_lay, 2, 2, 0, 1); + g_lay->addRowSpacing(0, fontMetrics().lineSpacing()); + + QPushButton *push; + + push = addPreviewIcon(0, i18n("Default"), this, g_lay); + connect(push, SIGNAL(clicked()), SLOT(slotEffectSetup0())); + push = addPreviewIcon(1, i18n("Active"), this, g_lay); + connect(push, SIGNAL(clicked()), SLOT(slotEffectSetup1())); + push = addPreviewIcon(2, i18n("Disabled"), this, g_lay); + connect(push, SIGNAL(clicked()), SLOT(slotEffectSetup2())); + + m_pTab1 = new QWidget(this, "General Tab"); + top->addWidget(m_pTab1, 0, 1); + + QGridLayout *grid = new QGridLayout(m_pTab1, 4, 3, 10, 10); + grid->setColStretch(1, 1); + grid->setColStretch(2, 1); + + + // Size + QLabel *lbl = new QLabel(i18n("Size:"), m_pTab1); + lbl->setFixedSize(lbl->sizeHint()); + grid->addWidget(lbl, 0, 0, Qt::AlignLeft); + mpSizeBox = new QComboBox(m_pTab1); + connect(mpSizeBox, SIGNAL(activated(int)), SLOT(slotSize(int))); + lbl->setBuddy(mpSizeBox); + grid->addWidget(mpSizeBox, 0, 1, Qt::AlignLeft); + + mpDPCheck = new QCheckBox(i18n("Double-sized pixels"), m_pTab1); + connect(mpDPCheck, SIGNAL(toggled(bool)), SLOT(slotDPCheck(bool))); + grid->addMultiCellWidget(mpDPCheck, 1, 1, 0, 1, Qt::AlignLeft); + + mpAnimatedCheck = new QCheckBox(i18n("Animate icons"), m_pTab1); + connect(mpAnimatedCheck, SIGNAL(toggled(bool)), SLOT(slotAnimatedCheck(bool))); + grid->addMultiCellWidget(mpAnimatedCheck, 2, 2, 0, 1, Qt::AlignLeft); + + top->activate(); + + init(); + read(); + apply(); + preview(); +} + +KIconConfig::~KIconConfig() +{ + delete mpEffect; +} + +QPushButton *KIconConfig::addPreviewIcon(int i, const QString &str, QWidget *parent, QGridLayout *lay) +{ + QLabel *lab = new QLabel(str, parent); + lay->addWidget(lab, 1, i, AlignCenter); + mpPreview[i] = new QLabel(parent); + mpPreview[i]->setAlignment(AlignCenter); + mpPreview[i]->setMinimumSize(105, 105); + lay->addWidget(mpPreview[i], 2, i); + QPushButton *push = new QPushButton(i18n("Set Effect..."), parent); + lay->addWidget(push, 3, i, AlignCenter); + return push; +} + +void KIconConfig::init() +{ + mpLoader = KGlobal::iconLoader(); + mpConfig = KGlobal::config(); + mpEffect = new KIconEffect; + mpTheme = mpLoader->theme(); + mUsage = 0; + for (int i=0; iinsertItem(i18n("Desktop/File Manager")); + mpUsageList->insertItem(i18n("Toolbar")); + mpUsageList->insertItem(i18n("Main Toolbar")); + mpUsageList->insertItem(i18n("Small Icons")); + mpUsageList->insertItem(i18n("Panel")); + mpUsageList->insertItem(i18n("All Icons")); + + // For reading the configuration + mGroups += "Desktop"; + mGroups += "Toolbar"; + mGroups += "MainToolbar"; + mGroups += "Small"; + mGroups += "Panel"; + + mStates += "Default"; + mStates += "Active"; + mStates += "Disabled"; +} + +void KIconConfig::initDefaults() +{ + mDefaultEffect[0].type = KIconEffect::NoEffect; + mDefaultEffect[1].type = KIconEffect::NoEffect; + mDefaultEffect[2].type = KIconEffect::ToGray; + mDefaultEffect[0].transparant = false; + mDefaultEffect[1].transparant = false; + mDefaultEffect[2].transparant = true; + mDefaultEffect[0].value = 1.0; + mDefaultEffect[1].value = 1.0; + mDefaultEffect[2].value = 1.0; + mDefaultEffect[0].color = QColor(144,128,248); + mDefaultEffect[1].color = QColor(169,156,255); + mDefaultEffect[2].color = QColor(34,202,0); + mDefaultEffect[0].color2 = QColor(0,0,0); + mDefaultEffect[1].color2 = QColor(0,0,0); + mDefaultEffect[2].color2 = QColor(0,0,0); + + const int defDefSizes[] = { 32, 22, 22, 16, 32 }; + + KIcon::Group i; + QStringList::ConstIterator it; + for(it=mGroups.begin(), i=KIcon::FirstGroup; it!=mGroups.end(); ++it, i++) + { + mbDP[i] = false; + mbChanged[i] = true; + mbAnimated[i] = false; + if (mpTheme) + mSizes[i] = mpTheme->defaultSize(i); + else + mSizes[i] = defDefSizes[i]; + + mEffects[i][0] = mDefaultEffect[0]; + mEffects[i][1] = mDefaultEffect[1]; + mEffects[i][2] = mDefaultEffect[2]; + } + // Animate desktop icons by default + int group = mGroups.findIndex( "Desktop" ); + if ( group != -1 ) + mbAnimated[group] = true; + + // This is the new default in KDE 2.2, in sync with the kiconeffect of kdelibs Nolden 2001/06/11 + int activeState = mStates.findIndex( "Active" ); + if ( activeState != -1 ) + { + int group = mGroups.findIndex( "Desktop" ); + if ( group != -1 ) + { + mEffects[ group ][ activeState ].type = KIconEffect::ToGamma; + mEffects[ group ][ activeState ].value = 0.7; + } + + group = mGroups.findIndex( "Panel" ); + if ( group != -1 ) + { + mEffects[ group ][ activeState ].type = KIconEffect::ToGamma; + mEffects[ group ][ activeState ].value = 0.7; + } + } +} + +void KIconConfig::read() +{ + if (mpTheme) + { + for (KIcon::Group i=KIcon::FirstGroup; iquerySizes(i); + + mTheme = mpTheme->current(); + mExample = mpTheme->example(); + } + else + { + for (KIcon::Group i=KIcon::FirstGroup; i(); + + mTheme = QString::null; + mExample = QString::null; + } + + initDefaults(); + + int i, j, effect; + QStringList::ConstIterator it, it2; + for (it=mGroups.begin(), i=0; it!=mGroups.end(); ++it, i++) + { + mbChanged[i] = false; + + mpConfig->setGroup(*it + "Icons"); + mSizes[i] = mpConfig->readNumEntry("Size", mSizes[i]); + mbDP[i] = mpConfig->readBoolEntry("DoublePixels", mbDP[i]); + mbAnimated[i] = mpConfig->readBoolEntry("Animated", mbAnimated[i]); + + for (it2=mStates.begin(), j=0; it2!=mStates.end(); ++it2, j++) + { + QString tmp = mpConfig->readEntry(*it2 + "Effect"); + if (tmp == "togray") + effect = KIconEffect::ToGray; + else if (tmp == "colorize") + effect = KIconEffect::Colorize; + else if (tmp == "togamma") + effect = KIconEffect::ToGamma; + else if (tmp == "desaturate") + effect = KIconEffect::DeSaturate; + else if (tmp == "tomonochrome") + effect = KIconEffect::ToMonochrome; + else if (tmp == "none") + effect = KIconEffect::NoEffect; + else continue; + mEffects[i][j].type = effect; + mEffects[i][j].value = mpConfig->readDoubleNumEntry(*it2 + "Value"); + mEffects[i][j].color = mpConfig->readColorEntry(*it2 + "Color"); + mEffects[i][j].color2 = mpConfig->readColorEntry(*it2 + "Color2"); + mEffects[i][j].transparant = mpConfig->readBoolEntry(*it2 + "SemiTransparent"); + } + } +} + +void KIconConfig::apply() +{ + mpUsageList->setCurrentItem(mUsage); + + int delta = 1000, dw, index = -1, size = 0, i; + QValueList::Iterator it; + mpSizeBox->clear(); + if (mUsage < KIcon::LastGroup) { + for (it=mAvSizes[mUsage].begin(), i=0; it!=mAvSizes[mUsage].end(); ++it, i++) + { + mpSizeBox->insertItem(QString().setNum(*it)); + dw = abs(mSizes[mUsage] - *it); + if (dw < delta) + { + delta = dw; + index = i; + size = *it; + } + + } + if (index != -1) + { + mpSizeBox->setCurrentItem(index); + mSizes[mUsage] = size; // best or exact match + } + mpDPCheck->setChecked(mbDP[mUsage]); + mpAnimatedCheck->setChecked(mbAnimated[mUsage]); + } +} + +void KIconConfig::preview(int i) +{ + // Apply effects ourselves because we don't want to sync + // the configuration every preview. + + int viewedGroup = (mUsage == KIcon::LastGroup) ? KIcon::FirstGroup : mUsage; + + QPixmap pm = mpLoader->loadIcon(mExample, KIcon::NoGroup, mSizes[viewedGroup]); + QImage img = pm.convertToImage(); + if (mbDP[viewedGroup]) + { + int w = img.width() * 2; + img = img.smoothScale(w, w); + } + + Effect &effect = mEffects[viewedGroup][i]; + + img = mpEffect->apply(img, effect.type, + effect.value, effect.color, effect.color2, effect.transparant); + pm.convertFromImage(img); + mpPreview[i]->setPixmap(pm); +} + +void KIconConfig::preview() +{ + preview(0); + preview(1); + preview(2); +} + +void KIconConfig::load() +{ + load( false ); +} + +void KIconConfig::load( bool useDefaults ) +{ + mpConfig = KGlobal::config(); + mpConfig->setReadDefaults( useDefaults ); + read(); + apply(); + for (int i=0; isetGroup(*it + "Icons"); + mpConfig->writeEntry("Size", mSizes[i], true, true); + mpConfig->writeEntry("DoublePixels", mbDP[i], true, true); + mpConfig->writeEntry("Animated", mbAnimated[i], true, true); + for (it2=mStates.begin(), j=0; it2!=mStates.end(); ++it2, j++) + { + QString tmp; + switch (mEffects[i][j].type) + { + case KIconEffect::ToGray: + tmp = "togray"; + break; + case KIconEffect::ToGamma: + tmp = "togamma"; + break; + case KIconEffect::Colorize: + tmp = "colorize"; + break; + case KIconEffect::DeSaturate: + tmp = "desaturate"; + break; + case KIconEffect::ToMonochrome: + tmp = "tomonochrome"; + break; + default: + tmp = "none"; + break; + } + mpConfig->writeEntry(*it2 + "Effect", tmp, true, true); + mpConfig->writeEntry(*it2 + "Value", mEffects[i][j].value, true, true); + mpConfig->writeEntry(*it2 + "Color", mEffects[i][j].color, true, true); + mpConfig->writeEntry(*it2 + "Color2", mEffects[i][j].color2, true, true); + mpConfig->writeEntry(*it2 + "SemiTransparent", mEffects[i][j].transparant, true, true); + } + } + + mpConfig->sync(); + + emit changed(false); + + // Emit KIPC change message. + for (int i=0; isetEnabled(false); + mpDPCheck->setEnabled(false); + mpAnimatedCheck->setEnabled( mUsage == KIcon::Panel ); + } + else + { + mpSizeBox->setEnabled(true); + mpDPCheck->setEnabled(true); + mpAnimatedCheck->setEnabled( mUsage == KIcon::Desktop ); + } + + apply(); + preview(); +} + +void KIconConfig::EffectSetup(int state) +{ + int viewedGroup = (mUsage == KIcon::LastGroup) ? KIcon::FirstGroup : mUsage; + + QPixmap pm = mpLoader->loadIcon(mExample, KIcon::NoGroup, mSizes[viewedGroup]); + QImage img = pm.convertToImage(); + if (mbDP[viewedGroup]) + { + int w = img.width() * 2; + img = img.smoothScale(w, w); + } + + QString caption; + switch (state) + { + case 0 : caption = i18n("Setup Default Icon Effect"); break; + case 1 : caption = i18n("Setup Active Icon Effect"); break; + case 2 : caption = i18n("Setup Disabled Icon Effect"); break; + } + + KIconEffectSetupDialog dlg(mEffects[viewedGroup][state], mDefaultEffect[state], caption, img); + + if (dlg.exec() == QDialog::Accepted) + { + if (mUsage == KIcon::LastGroup) { + for (int i=0; isetColStretch(0,1); + top->addColSpacing(1,10); + top->setColStretch(2,2); + top->setRowStretch(1,1); + + lbl = new QLabel(i18n("&Effect:"), page); + lbl->setFixedSize(lbl->sizeHint()); + top->addWidget(lbl, 0, 0, Qt::AlignLeft); + mpEffectBox = new QListBox(page); + mpEffectBox->insertItem(i18n("No Effect")); + mpEffectBox->insertItem(i18n("To Gray")); + mpEffectBox->insertItem(i18n("Colorize")); + mpEffectBox->insertItem(i18n("Gamma")); + mpEffectBox->insertItem(i18n("Desaturate")); + mpEffectBox->insertItem(i18n("To Monochrome")); + mpEffectBox->setMinimumWidth( 100 ); + connect(mpEffectBox, SIGNAL(highlighted(int)), SLOT(slotEffectType(int))); + top->addMultiCellWidget(mpEffectBox, 1, 2, 0, 0, Qt::AlignLeft); + lbl->setBuddy(mpEffectBox); + + mpSTCheck = new QCheckBox(i18n("&Semi-transparent"), page); + connect(mpSTCheck, SIGNAL(toggled(bool)), SLOT(slotSTCheck(bool))); + top->addWidget(mpSTCheck, 3, 0, Qt::AlignLeft); + + frame = new QGroupBox(i18n("Preview"), page); + top->addMultiCellWidget(frame, 0, 1, 1, 1); + grid = new QGridLayout(frame, 2, 1, marginHint(), spacingHint()); + grid->addRowSpacing(0, fontMetrics().lineSpacing()); + grid->setRowStretch(1, 1); + + mpPreview = new QLabel(frame); + mpPreview->setAlignment(AlignCenter); + mpPreview->setMinimumSize(105, 105); + grid->addWidget(mpPreview, 1, 0); + + mpEffectGroup = new QGroupBox(i18n("Effect Parameters"), page); + top->addMultiCellWidget(mpEffectGroup, 2, 3, 1, 1); + grid = new QGridLayout(mpEffectGroup, 3, 2, marginHint(), spacingHint()); + grid->addRowSpacing(0, fontMetrics().lineSpacing()); + + mpEffectLabel = new QLabel(i18n("&Amount:"), mpEffectGroup); + grid->addWidget(mpEffectLabel, 1, 0); + mpEffectSlider = new QSlider(0, 100, 5, 10, QSlider::Horizontal, mpEffectGroup); + mpEffectLabel->setBuddy( mpEffectSlider ); + connect(mpEffectSlider, SIGNAL(valueChanged(int)), SLOT(slotEffectValue(int))); + grid->addWidget(mpEffectSlider, 1, 1); + + mpEffectColor = new QLabel(i18n("Co&lor:"), mpEffectGroup); + grid->addWidget(mpEffectColor, 2, 0); + mpEColButton = new KColorButton(mpEffectGroup); + mpEffectColor->setBuddy( mpEColButton ); + connect(mpEColButton, SIGNAL(changed(const QColor &)), + SLOT(slotEffectColor(const QColor &))); + grid->addWidget(mpEColButton, 2, 1); + + mpEffectColor2 = new QLabel(i18n("&Second color:"), mpEffectGroup); + grid->addWidget(mpEffectColor2, 3, 0); + mpECol2Button = new KColorButton(mpEffectGroup); + mpEffectColor2->setBuddy( mpECol2Button ); + connect(mpECol2Button, SIGNAL(changed(const QColor &)), + SLOT(slotEffectColor2(const QColor &))); + grid->addWidget(mpECol2Button, 3, 1); + + init(); + preview(); +} + +KIconEffectSetupDialog::~KIconEffectSetupDialog() +{ + delete mpEffect; +} + +void KIconEffectSetupDialog::init() +{ + mpEffectBox->setCurrentItem(mEffect.type); + mpEffectSlider->setEnabled(mEffect.type != KIconEffect::NoEffect); + mpEColButton->setEnabled(mEffect.type == KIconEffect::Colorize || mEffect.type == KIconEffect::ToMonochrome); + mpECol2Button->setEnabled(mEffect.type == KIconEffect::ToMonochrome); + mpEffectSlider->setValue((int) (100.0 * mEffect.value + 0.5)); + mpEColButton->setColor(mEffect.color); + mpECol2Button->setColor(mEffect.color2); + mpSTCheck->setChecked(mEffect.transparant); +} + +void KIconEffectSetupDialog::slotEffectValue(int value) +{ + mEffect.value = 0.01 * value; + preview(); +} + +void KIconEffectSetupDialog::slotEffectColor(const QColor &col) +{ + mEffect.color = col; + preview(); +} + +void KIconEffectSetupDialog::slotEffectColor2(const QColor &col) +{ + mEffect.color2 = col; + preview(); +} + +void KIconEffectSetupDialog::slotEffectType(int type) +{ + mEffect.type = type; + mpEffectGroup->setEnabled(mEffect.type != KIconEffect::NoEffect); + mpEffectSlider->setEnabled(mEffect.type != KIconEffect::NoEffect); + mpEffectColor->setEnabled(mEffect.type == KIconEffect::Colorize || mEffect.type == KIconEffect::ToMonochrome); + mpEColButton->setEnabled(mEffect.type == KIconEffect::Colorize || mEffect.type == KIconEffect::ToMonochrome); + mpEffectColor2->setEnabled(mEffect.type == KIconEffect::ToMonochrome); + mpECol2Button->setEnabled(mEffect.type == KIconEffect::ToMonochrome); + preview(); +} + +void KIconEffectSetupDialog::slotSTCheck(bool b) +{ + mEffect.transparant = b; + preview(); +} + +void KIconEffectSetupDialog::slotDefault() +{ + mEffect = mDefaultEffect; + init(); + preview(); +} + +void KIconEffectSetupDialog::preview() +{ + QPixmap pm; + QImage img = mExample.copy(); + img = mpEffect->apply(img, mEffect.type, + mEffect.value, mEffect.color, mEffect.color2, mEffect.transparant); + pm.convertFromImage(img); + mpPreview->setPixmap(pm); +} + +#include "icons.moc" diff --git a/kcontrol/icons/icons.desktop b/kcontrol/icons/icons.desktop new file mode 100644 index 000000000..966b377b9 --- /dev/null +++ b/kcontrol/icons/icons.desktop @@ -0,0 +1,249 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/icons/index.html +Icon=icons +Exec=kcmshell icons + + +X-KDE-Library=icons +X-KDE-FactoryName=icons +X-KDE-ParentApp=kcontrol + +Name=Icons +Name[af]=Ikoone +Name[ar]=الأيقونات +Name[az]=Timsallar +Name[be]=Значкі +Name[bg]=Икони +Name[bn]=আইকন +Name[br]=Arlunioù +Name[bs]=Ikone +Name[ca]=Icones +Name[cs]=Ikony +Name[csb]=Ikònë +Name[cy]=Eicon +Name[da]=Ikoner +Name[de]=Symbole +Name[el]=Εικονίδια +Name[eo]=Piktogramoj +Name[es]=Iconos +Name[et]=Ikoonid +Name[eu]=Ikonoak +Name[fa]=شمایلها +Name[fi]=Kuvakkeet +Name[fr]=Icônes +Name[fy]=Byldkaikes +Name[ga]=Deilbhíní +Name[gl]=Iconas +Name[he]=סמלים +Name[hi]=प्रतीक +Name[hr]=Ikone +Name[hu]=Ikonok +Name[id]=Ikon +Name[is]=Táknmyndir +Name[it]=Icone +Name[ja]=アイコン +Name[ka]=ხატულები +Name[kk]=Таңбашалар +Name[km]=រូបតំណាង +Name[ko]=아이콘 +Name[lo]=ໄອຄອນ +Name[lt]=Ženkliukai +Name[lv]=Ikonas +Name[mk]=Икони +Name[mn]=Тэмдэг +Name[ms]=Ikon +Name[mt]=Ikoni +Name[nb]=Ikoner +Name[nds]=Lüttbiller +Name[ne]=प्रतिमा +Name[nl]=Pictogrammen +Name[nn]=Ikon +Name[nso]=Diemedi +Name[oc]=Icones +Name[pa]=ਆਈਕਾਨ +Name[pl]=Ikony +Name[pt]=Ícones +Name[pt_BR]=Ícones +Name[ro]=Iconițe +Name[ru]=Значки +Name[rw]=Agashushondanga +Name[se]=Govažat +Name[sk]=Ikony +Name[sl]=Ikone +Name[sr]=Иконе +Name[sr@Latn]=Ikone +Name[ss]=Timeleli +Name[sv]=Ikoner +Name[ta]=சின்னங்கள் +Name[te]=ప్రతిమలు +Name[tg]=Нишонаҳо +Name[th]=ไอคอน +Name[tr]=Simgeler +Name[tt]=Tamğalar +Name[uk]=Піктограми +Name[uz]=Nishonchalar +Name[uz@cyrillic]=Нишончалар +Name[ven]=Aikhono +Name[vi]=Biểu tượng +Name[wa]=Imådjetes +Name[xh]=Imphawu zemmifanekiso +Name[zh_CN]=图标 +Name[zh_TW]=圖示 +Name[zu]=Izimpawu zezithombe + +Comment=Customize KDE Icons +Comment[af]=Pasmaak Kde Ikoone +Comment[ar]=تخصيص أيقونات KDE الإعتيادية +Comment[az]=KDE Timsallarını Xüsusiləşdirir +Comment[be]=Настаўленні значак KDE +Comment[bg]=Настройване и избор на тема с икони +Comment[bn]=কে.ডি.ই. আইকন বেছে নিন +Comment[br]=Neuziañ arlunioù KDE +Comment[bs]=Podesite KDE ikone +Comment[ca]=Configura les icones del KDE +Comment[cs]=Přizpůsobení ikon KDE +Comment[csb]=Dopasëjë ikònë KDE +Comment[cy]=Addasu Eiconau KDE +Comment[da]=Brugerdefinér KDE-ikoner +Comment[de]=KDE-Symbole einrichten +Comment[el]=Προσαρμογή των εικονιδίων του KDE +Comment[en_GB]=Customise KDE Icons +Comment[eo]=Agordo de KDE-piktogramoj +Comment[es]=Personaliza los iconos de KDE +Comment[et]=KDE ikoonide kohandamine +Comment[eu]=Pertsonalizatu KDEren ikonoak +Comment[fa]=سفارشی‌سازی شمایلهای KDE +Comment[fi]=Muokkaa KDE:n kuvakkeita +Comment[fr]=Personnalisation des icônes de KDE +Comment[fy]=KDE-byldkaikes oanpasse +Comment[ga]=Saincheap Deilbhíní KDE +Comment[gl]=Personaliza as Iconas de KDE +Comment[he]=שינוי הגדרות הסמלים של KDE +Comment[hi]=केडीई प्रतीक मनपसंद बनाएँ +Comment[hr]=Prilagođavanje KDE ikona +Comment[hu]=A KDE ikonok testreszabása +Comment[id]=Customize Ikon KDE +Comment[is]=Stilla táknmyndir KDE +Comment[it]=Personalizza le icone di KDE +Comment[ja]=KDE アイコンをカスタマイズ +Comment[ka]=KDE–ს ხატულების კონფიგურაცია +Comment[kk]=KDE таңбашаларын баптау +Comment[km]=ប្ដូរ​រូបតំណាង KDE តាម​បំណង +Comment[ko]=KDE 아이콘 사용자 정의 +Comment[lo]=ເລືອກໄອຄອນຂອງ KDE ເອງ +Comment[lt]=KDE ženkliukų derinimas +Comment[lv]=Pielāgot KDE Ikonas +Comment[mk]=Прилагоди ги иконите на KDE +Comment[mn]=КДЭ-Тэмдэг тохируулах +Comment[ms]=Ikon KDE Langganan +Comment[mt]=Agħżel ikoni ġodda għal KDE +Comment[nb]=Tilpass ikonene i KDE +Comment[nds]=Lüttbiller för KDE utsöken +Comment[ne]=केडीई प्रतिमा अनुकूलन गर्नुहोस् +Comment[nl]=KDE-pictogrammen aanpassen +Comment[nn]=Tilpass KDE-ikon +Comment[nso]=Amanya Diemedi tsa KDE +Comment[oc]=Configura les icones KDE +Comment[pa]=KDE ਆਈਕਾਨ ਪਸੰਦ +Comment[pl]=Dostosuj ikony KDE +Comment[pt]=Alterar os Ícones do KDE +Comment[pt_BR]=Personalizar os ícones do KDE +Comment[ro]=Personalizează iconițele KDE +Comment[ru]=Настройка значков +Comment[rw]=Kugena imiterere y'udushushondanga twa KDE +Comment[se]=Heivet KDE-govažiid +Comment[sk]=Zmena ikon v KDE +Comment[sl]=Nastavitve ikon za KDE +Comment[sr]=Прилагоди KDE иконе +Comment[sr@Latn]=Prilagodi KDE ikone +Comment[sv]=Anpassa KDE:s ikoner +Comment[ta]=KDE சின்னங்களை தனதாக்கு +Comment[tg]=Мизроб кардани нишонаҳои KDE +Comment[th]=กำหนดไอคอนของ KDE +Comment[tr]=KDE Simgelerini Özelleştirir +Comment[tt]=KDE İkonnarın caylaw +Comment[uk]=Налаштування піктограм KDE +Comment[uz]=KDE nishonchalarini moslash +Comment[uz@cyrillic]=KDE нишончаларини мослаш +Comment[ven]=Customize dziaikhonu dza KDE +Comment[vi]=Tuỳ chọn các Biểu tượng của KDE +Comment[wa]=Imådjetes KDE da vosse +Comment[xh]=Yenza Imphawu zomfanekiso ze KDE Ngokwemfuneko +Comment[zh_CN]=定制 KDE 图标 +Comment[zh_TW]=自訂 KDE 圖示 +Comment[zu]=Yenza Izimpawu zezithombe ze-KDE ngokwemfuneko + +Keywords=icons,effects,size,hicolor,locolor +Keywords[ar]=icons,effects,size,hicolor,locolor,أيقونات,تأثيرات,حجم لون عالي,لون مخفض,الحجم,التأثيرات,الأيقونات +Keywords[az]=timsallar,effektlər,böyüklük,yüksək rəng,alçaq rəng +Keywords[be]=значкі,эфекты,памер,кантраст,высокі кантраст,нізкі кантраст,icons,effects,size,hicolor,locolor +Keywords[bg]=икона, икони, icons, effects, size, hicolor, locolor +Keywords[br]=arlunioù,efedoù,ment,liv,liv izel +Keywords[bs]=icons,effects,size,hicolor,locolor,ikone,efekti,veličina +Keywords[ca]=icones,efectes,mida,hicolor,locolor +Keywords[cs]=Ikony,Efekty,Velikost,HiColor,LoColor +Keywords[csb]=ikònë,efektë,miara,wiele farwów,mało farwów +Keywords[cy]=eicon,effeithiau,maint,lliw uchel,lliw isel +Keywords[da]=ikoner,effekter,størrelse,højfarve,lavfarve +Keywords[de]=Symbole,Icons,Effekte,Größe,64000-Farben,8-Bit-Farben +Keywords[el]=εικονίδια,εφέ,μέγεθος,hicolor,locolor +Keywords[en_GB]=icons,effects,size,hicolour,locolour +Keywords[eo]=piktogramoj,efektoj,grandeco,koloro +Keywords[es]=iconos,efectos,tamaño,alta profundidad,baja profundidad +Keywords[et]=ikoonid,efektid,suurus,värv +Keywords[eu]=ikonoak,efektuak,neurria,hicolor,locolor +Keywords[fa]=شمایلها، جلوه‌ها، اندازه، پررنگ، کم‌رنگ +Keywords[fi]=kuvakkeet,tehosteet,koko,korkeaväri,matalaväri +Keywords[fr]=icônes,effets,taille,hicolor,locolor,coloré +Keywords[fy]=iconen,byldkaikes,effekten,grutte,ôfmjiting,formaat,kleuren,hege,lege +Keywords[gl]=iconas,efeitos,tamaño,moitas cores,poucas cores +Keywords[he]=סמלים,אפקטים,גודל,צבע גבוה,צבע נמוך,icons,effects,size,hicolor,locolor +Keywords[hi]=प्रतीक,प्रभाव,आकार,अधिक-रंग,कम-रंग +Keywords[hr]=icons,effects,size,hicolor,locolor,ikone,efekti,veličina,boja +Keywords[hu]=ikonok,effektek,méret,sokszínű,színszegény,színes +Keywords[id]=ikon,efek,ukuran,hicolor,locolor +Keywords[is]=táknmynd,tákn,teikn,áhrif,stærð,hágæði,lágæði,litur,litir +Keywords[it]=icone,effetti,dimensione,molti colori,pochi colori +Keywords[ja]=アイコン,効果,サイズ,ハイカラー,ローカラー +Keywords[ka]=ხატულები,ეფექტები,ზომა,მაღალი გარჩევადობა,დაბალი გარჩევადობა +Keywords[km]=រូបតំណាង,បែបបទ,ទំហំ,ពណ៌​ខ្ពស់,ពណ៌​ទាប +Keywords[lo]=ໄອຄອນ,ເອຟເຟັກ,ຂະຫນາດ,ຄວາມລະອງດສີ ຫລາຍ,ຄວາມລະອງດສີຫນ້ອຍ +Keywords[lt]=ženkliukai,piktogramos,efektai,dydis,hispalva,lospalva +Keywords[lv]=ikonas,efekti,lielums,hicolor,locolor +Keywords[mk]=icons,effects,size,hicolor,locolor,икони,ефекти,големина,високи бои,ниски бои +Keywords[mn]=Тэмдэг,Icons,Нөлөө,Хэмжээ,64000-Өнгө,8бит-Өнгө +Keywords[nb]=ikoner,effekter,størrelse,mange farger,få farger +Keywords[nds]=Lüttbiller,Effekten,Grött,hicolor,locolor +Keywords[ne]=प्रतिमा, प्रभाव, साइज, हाइकलर, लोकलर +Keywords[nl]=iconen,pictogrammen,effecten,grootte,afmeting,formaat,kleuren +Keywords[nn]=ikon,effektar,storleik,mange fargar,få fargar +Keywords[nso]=diemedi,dikamego,bogolo,mmala wa godimo,mmala wa tlase +Keywords[oc]=icones,efectes,talha,hicolor,locolor +Keywords[pa]=icons,effects,size,hicolor,locolor,ਆਈਕਾਨ,ਪਰਭਾਵ,ਅਕਾਰ +Keywords[pl]=ikony,efekty,rozmiar,wiele kolorów,mało kolorów +Keywords[pt]=ícones,efeitos,tamanho,muitas cores,poucas cores +Keywords[pt_BR]=ícones,efeitos,tamanho,alta resolução,baixa resolução +Keywords[ro]=iconițe,efecte,mărime,culori multe,culori puține +Keywords[rw]=Udushushondanga,ingaruka,ingano,ibara-hejuru,ibara-hasi +Keywords[se]=govažat,effects,sturrodat,máŋga ivnni,unnan ivnnit +Keywords[sk]=ikony,ikonky,veľkosť,hicolor,locolor +Keywords[sl]=ikone,efekti,velikost,barve +Keywords[sr]=icons,effects,size,hicolor,locolor,иконе,ефекти,величина,пуно боја,мало боја +Keywords[sr@Latn]=icons,effects,size,hicolor,locolor,ikone,efekti,veličina,puno boja,malo boja +Keywords[sv]=ikoner,effekter,storlek,många färger,få färger +Keywords[ta]=சின்னங்கள்,விளைவுகள்,அளவு,அதிக வண்ணம்,குறைந்த வண்ணம் +Keywords[th]=ไอคอน,เอฟเฟ็กต์,ขนาด,ความละเอียดสีมาก,ความละเอียดสีน้อย +Keywords[tr]=simgeler,efektler,boyut,yüksek renk,düşük renk +Keywords[uk]=піктограми,icons,ефекти,розмір,кольори +Keywords[uz]=nishonchalar,effektlar,oʻlchami +Keywords[uz@cyrillic]=нишончалар,эффектлар,ўлчами +Keywords[ven]=dziaikhono,zwivhangi,saizi,muvhala wa ntha,muvhala wa fhasi +Keywords[vi]=biểu tượng,hiệu ứng,cỡ,màu tươi,màu thẫm +Keywords[wa]=imådjetes,efets,grandeu,hicolor,locolor +Keywords[xh]=imphawu zomfanekiso,iziphumo,ubungakanani,hicolor,locolor +Keywords[zh_CN]=icons,effects,size,hicolor,locolor,图标,效果,大小,高色彩,低色彩 +Keywords[zh_TW]=icons,effects,size,hicolor,locolor,圖示,效果,大小,高彩,低彩 +Keywords[zu]=izimpawu,imiphumela,usayizi,umbala ophezulu,umbala ophansi + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/icons/icons.h b/kcontrol/icons/icons.h new file mode 100644 index 000000000..93171f6d1 --- /dev/null +++ b/kcontrol/icons/icons.h @@ -0,0 +1,152 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kcmdisplay. + * Copyright (C) 2000 Geert Jansen + * with minor additions and based on ideas from + * Torsten Rahn + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#ifndef __icons_h__ +#define __icons_h__ + +#include +#include +#include + +#include +#include + +class QCheckBox; +class QColor; +class QComboBox; +class QGridLayout; +class QGroupBox; +class QIconView; +class QLabel; +class QListBox; +class QListView; +class QPushButton; +class QSlider; +class QTabWidget; +class QWidget; + +class KColorButton; +class KConfig; +class KIconEffect; +class KIconLoader; +class KIconTheme; + +struct Effect +{ + int type; + float value; + QColor color; + QColor color2; + bool transparant; +}; + + +/** + * The General Icons tab in kcontrol. + */ +class KIconConfig: public KCModule +{ + Q_OBJECT + +public: + KIconConfig(QWidget *parent, const char *name=0); + ~KIconConfig(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + void preview(); + +private slots: + void slotEffectSetup0() { EffectSetup(0); } + void slotEffectSetup1() { EffectSetup(1); } + void slotEffectSetup2() { EffectSetup(2); } + + void slotUsage(int index); + void slotSize(int index); + void slotDPCheck(bool check); + void slotAnimatedCheck(bool check); + +private: + void preview(int i); + void EffectSetup(int state); + QPushButton *addPreviewIcon(int i, const QString &str, QWidget *parent, QGridLayout *lay); + void init(); + void initDefaults(); + void read(); + void apply(); + + + bool mbDP[6], mbChanged[6], mbAnimated[6]; + int mSizes[6]; + QValueList mAvSizes[6]; + + Effect mEffects[6][3]; + Effect mDefaultEffect[3]; + + int mUsage; + QString mTheme, mExample; + QStringList mGroups, mStates; + + KIconEffect *mpEffect; + KIconTheme *mpTheme; + KIconLoader *mpLoader; + KConfig *mpConfig; + + typedef QLabel *QLabelPtr; + QLabelPtr mpPreview[3]; + + QListBox *mpUsageList; + QComboBox *mpSizeBox; + QCheckBox *mpDPCheck, *wordWrapCB, *underlineCB, *mpAnimatedCheck; + QTabWidget *m_pTabWidget; + QWidget *m_pTab1; +}; + +class KIconEffectSetupDialog: public KDialogBase +{ + Q_OBJECT + +public: + KIconEffectSetupDialog(const Effect &, const Effect &, + const QString &, const QImage &, + QWidget *parent=0L, char *name=0L); + ~KIconEffectSetupDialog(); + Effect effect() { return mEffect; } + +protected: + void preview(); + void init(); + +protected slots: + void slotEffectValue(int value); + void slotEffectColor(const QColor &col); + void slotEffectColor2(const QColor &col); + void slotEffectType(int type); + void slotSTCheck(bool b); + void slotDefault(); + +private: + KIconEffect *mpEffect; + QListBox *mpEffectBox; + QCheckBox *mpSTCheck; + QSlider *mpEffectSlider; + KColorButton *mpEColButton; + KColorButton *mpECol2Button; + Effect mEffect; + Effect mDefaultEffect; + QImage mExample; + QGroupBox *mpEffectGroup; + QLabel *mpPreview, *mpEffectLabel, *mpEffectColor, *mpEffectColor2; +}; + +#endif diff --git a/kcontrol/icons/iconthemes.cpp b/kcontrol/icons/iconthemes.cpp new file mode 100644 index 000000000..a79ad6ddf --- /dev/null +++ b/kcontrol/icons/iconthemes.cpp @@ -0,0 +1,452 @@ +/** + * Copyright (c) 2000 Antonio Larrosa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#undef Unsorted +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef HAVE_LIBART +#include +#endif + +#include "iconthemes.h" + +IconThemesConfig::IconThemesConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + QVBoxLayout *topLayout = new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + + QFrame *m_preview=new QFrame(this); + m_preview->setMinimumHeight(50); + + QHBoxLayout *lh2=new QHBoxLayout( m_preview ); + m_previewExec=new QLabel(m_preview); + m_previewExec->setPixmap(DesktopIcon("exec")); + m_previewFolder=new QLabel(m_preview); + m_previewFolder->setPixmap(DesktopIcon("folder")); + m_previewDocument=new QLabel(m_preview); + m_previewDocument->setPixmap(DesktopIcon("document")); + + lh2->addStretch(10); + lh2->addWidget(m_previewExec); + lh2->addStretch(1); + lh2->addWidget(m_previewFolder); + lh2->addStretch(1); + lh2->addWidget(m_previewDocument); + lh2->addStretch(10); + + + m_iconThemes=new KListView(this,"IconThemeList"); + m_iconThemes->addColumn(i18n("Name")); + m_iconThemes->addColumn(i18n("Description")); + m_iconThemes->setAllColumnsShowFocus( true ); + m_iconThemes->setFullWidth(true); + connect(m_iconThemes,SIGNAL(selectionChanged(QListViewItem *)), + SLOT(themeSelected(QListViewItem *))); + + QPushButton *installButton=new QPushButton( i18n("Install New Theme..."), + this, "InstallNewTheme"); + connect(installButton,SIGNAL(clicked()),SLOT(installNewTheme())); + m_removeButton=new QPushButton( i18n("Remove Theme"), + this, "RemoveTheme"); + connect(m_removeButton,SIGNAL(clicked()),SLOT(removeSelectedTheme())); + + topLayout->addWidget( + new QLabel(i18n("Select the icon theme you want to use:"), this)); + topLayout->addWidget(m_preview); + topLayout->addWidget(m_iconThemes); + QHBoxLayout *lg = new QHBoxLayout(topLayout, KDialog::spacingHint()); + lg->addWidget(installButton); + lg->addWidget(m_removeButton); + + loadThemes(); + + load(); + + m_iconThemes->setFocus(); +} + +IconThemesConfig::~IconThemesConfig() +{ +} + +QListViewItem *IconThemesConfig::iconThemeItem(const QString &name) +{ + QListViewItem *item; + for ( item=m_iconThemes->firstChild(); item ; item=item->nextSibling() ) + if (m_themeNames[item->text(0)]==name) return item; + + return 0L; +} + +void IconThemesConfig::loadThemes() +{ + m_iconThemes->clear(); + m_themeNames.clear(); + QStringList themelist(KIconTheme::list()); + QString name; + QString tname; + QStringList::Iterator it; + for (it=themelist.begin(); it != themelist.end(); ++it) + { + KIconTheme icontheme(*it); + if (!icontheme.isValid()) kdDebug() << "notvalid\n"; + if (icontheme.isHidden()) continue; + + name=icontheme.name(); + tname=name; + + // Just in case we have duplicated icon theme names on separate directories + for (int i=2; m_themeNames.find(tname)!=m_themeNames.end() ; i++) + tname=QString("%1-%2").arg(name).arg(i); + + m_iconThemes->insertItem(new QListViewItem(m_iconThemes,name, + icontheme.description())); + + m_themeNames.insert(name,*it); + + } +} + +void IconThemesConfig::installNewTheme() +{ + KURL themeURL = KURLRequesterDlg::getURL(QString::null, this, + i18n("Drag or Type Theme URL")); + kdDebug() << themeURL.prettyURL() << endl; + + if (themeURL.url().isEmpty()) return; + + QString themeTmpFile; + // themeTmpFile contains the name of the downloaded file + + if (!KIO::NetAccess::download(themeURL, themeTmpFile, this)) { + QString sorryText; + if (themeURL.isLocalFile()) + sorryText = i18n("Unable to find the icon theme archive %1."); + else + sorryText = i18n("Unable to download the icon theme archive;\n" + "please check that address %1 is correct."); + KMessageBox::sorry(this, sorryText.arg(themeURL.prettyURL())); + return; + } + + QStringList themesNames = findThemeDirs(themeTmpFile); + if (themesNames.isEmpty()) { + QString invalidArch(i18n("The file is not a valid icon theme archive.")); + KMessageBox::error(this, invalidArch); + + KIO::NetAccess::removeTempFile(themeTmpFile); + return; + } + + if (!installThemes(themesNames, themeTmpFile)) { + //FIXME: make me able to know what is wrong.... + // QStringList instead of bool? + QString somethingWrong = + i18n("A problem occurred during the installation process; " + "however, most of the themes in the archive have been installed"); + KMessageBox::error(this, somethingWrong); + } + + KIO::NetAccess::removeTempFile(themeTmpFile); + + KGlobal::instance()->newIconLoader(); + loadThemes(); + + QListViewItem *item=iconThemeItem(KIconTheme::current()); + m_iconThemes->setSelected(item, true); + updateRemoveButton(); +} + +bool IconThemesConfig::installThemes(const QStringList &themes, const QString &archiveName) +{ + bool everythingOk = true; + QString localThemesDir(locateLocal("icon", "./")); + + KProgressDialog progressDiag(this, "themeinstallprogress", + i18n("Installing icon themes"), + QString::null, + true); + progressDiag.setAutoClose(true); + progressDiag.progressBar()->setTotalSteps(themes.count()); + progressDiag.show(); + + KTar archive(archiveName); + archive.open(IO_ReadOnly); + kapp->processEvents(); + + const KArchiveDirectory* rootDir = archive.directory(); + + KArchiveDirectory* currentTheme; + for (QStringList::ConstIterator it = themes.begin(); + it != themes.end(); + ++it) { + progressDiag.setLabel( + i18n("Installing %1 theme") + .arg(*it)); + kapp->processEvents(); + + if (progressDiag.wasCancelled()) + break; + + currentTheme = dynamic_cast( + const_cast( + rootDir->entry(*it))); + if (currentTheme == NULL) { + // we tell back that something went wrong, but try to install as much + // as possible + everythingOk = false; + continue; + } + + currentTheme->copyTo(localThemesDir + *it); + progressDiag.progressBar()->advance(1); + } + + archive.close(); + return everythingOk; +} + +QStringList IconThemesConfig::findThemeDirs(const QString &archiveName) +{ + QStringList foundThemes; + + KTar archive(archiveName); + archive.open(IO_ReadOnly); + const KArchiveDirectory* themeDir = archive.directory(); + + KArchiveEntry* possibleDir = 0L; + KArchiveDirectory* subDir = 0L; + + // iterate all the dirs looking for an index.theme or index.desktop file + QStringList entries = themeDir->entries(); + for (QStringList::Iterator it = entries.begin(); + it != entries.end(); + ++it) { + possibleDir = const_cast(themeDir->entry(*it)); + if (possibleDir->isDirectory()) { + subDir = dynamic_cast( possibleDir ); + if (subDir && (subDir->entry("index.theme") != NULL || + subDir->entry("index.desktop") != NULL)) + foundThemes.append(subDir->name()); + } + } + + archive.close(); + return foundThemes; +} + +void IconThemesConfig::removeSelectedTheme() +{ + QListViewItem *selected = m_iconThemes->selectedItem(); + if (!selected) + return; + + QString question=i18n("Are you sure you want to remove the " + "%1 icon theme?
" + "
" + "This will delete the files installed by this theme.
"). + arg(selected->text(0)); + + bool deletingCurrentTheme=(selected==iconThemeItem(KIconTheme::current())); + + int r=KMessageBox::warningContinueCancel(this,question,i18n("Confirmation"),KStdGuiItem::del()); + if (r!=KMessageBox::Continue) return; + + KIconTheme icontheme(m_themeNames[selected->text(0)]); + + // delete the index file before the async KIO::del so loadThemes() will + // ignore that dir. + unlink(QFile::encodeName(icontheme.dir()+"/index.theme").data()); + unlink(QFile::encodeName(icontheme.dir()+"/index.desktop").data()); + KIO::del(KURL( icontheme.dir() )); + + KGlobal::instance()->newIconLoader(); + + loadThemes(); + + QListViewItem *item=0L; + //Fallback to the default if we've deleted the current theme + if (!deletingCurrentTheme) + item=iconThemeItem(KIconTheme::current()); + if (!item) + item=iconThemeItem(KIconTheme::defaultThemeName()); + + m_iconThemes->setSelected(item, true); + updateRemoveButton(); + + if (deletingCurrentTheme) // Change the configuration + save(); +} + +void IconThemesConfig::updateRemoveButton() +{ + QListViewItem *selected = m_iconThemes->selectedItem(); + bool enabled = false; + if (selected) + { + KIconTheme icontheme(m_themeNames[selected->text(0)]); + QFileInfo fi(icontheme.dir()); + enabled = fi.isWritable(); + // Don't let users remove the current theme. + if(m_themeNames[selected->text(0)] == KIconTheme::current() || + m_themeNames[selected->text(0)] == KIconTheme::defaultThemeName()) + enabled = false; + } + m_removeButton->setEnabled(enabled); +} + +void IconThemesConfig::themeSelected(QListViewItem *item) +{ +#ifdef HAVE_LIBART + KSVGIconEngine engine; +#endif + QString dirName(m_themeNames[item->text(0)]); + KIconTheme icontheme(dirName); + if (!icontheme.isValid()) kdDebug() << "notvalid\n"; + + updateRemoveButton(); + const int size = icontheme.defaultSize(KIcon::Desktop); + + KIcon icon=icontheme.iconPath("exec.png", size, KIcon::MatchBest); + if (!icon.isValid()) { +#ifdef HAVE_LIBART + icon=icontheme.iconPath("exec.svg", size, KIcon::MatchBest); + if(engine.load(size, size, icon.path)) + m_previewExec->setPixmap(*engine.image()); + else { + icon=icontheme.iconPath("exec.svgz", size, KIcon::MatchBest); + if(engine.load(size, size, icon.path)) + m_previewExec->setPixmap(*engine.image()); + } +#endif + } + else + m_previewExec->setPixmap(QPixmap(icon.path)); + + icon=icontheme.iconPath("folder.png",size,KIcon::MatchBest); + if (!icon.isValid()) { +#ifdef HAVE_LIBART + icon=icontheme.iconPath("folder.svg", size, KIcon::MatchBest); + if(engine.load(size, size, icon.path)) + m_previewFolder->setPixmap(*engine.image()); + else { + icon=icontheme.iconPath("folder.svgz", size, KIcon::MatchBest); + if(engine.load(size, size, icon.path)) + m_previewFolder->setPixmap(*engine.image()); + } +#endif + } + else + m_previewFolder->setPixmap(QPixmap(icon.path)); + + icon=icontheme.iconPath("txt.png",size,KIcon::MatchBest); + if (!icon.isValid()) { +#ifdef HAVE_LIBART + icon=icontheme.iconPath("txt.svg", size, KIcon::MatchBest); + if(engine.load(size, size, icon.path)) + m_previewDocument->setPixmap(*engine.image()); + else { + icon=icontheme.iconPath("txt.svgz", size, KIcon::MatchBest); + if(engine.load(size, size, icon.path)) + m_previewDocument->setPixmap(*engine.image()); + } +#endif + } + else + m_previewDocument->setPixmap(QPixmap(icon.path)); + + emit changed(true); + m_bChanged = true; +} + +void IconThemesConfig::load() +{ + m_defaultTheme=iconThemeItem(KIconTheme::current()); + m_iconThemes->setSelected(m_defaultTheme, true); + updateRemoveButton(); + + emit changed(false); + m_bChanged = false; +} + +void IconThemesConfig::save() +{ + if (!m_bChanged) + return; + QListViewItem *selected = m_iconThemes->selectedItem(); + if (!selected) + return; + + KSimpleConfig *config = new KSimpleConfig("kdeglobals", false); + config->setGroup("Icons"); + config->writeEntry("Theme", m_themeNames[selected->text(0)]); + delete config; + + KIconTheme::reconfigure(); + emit changed(false); + + for (int i=0; isetEnabled(false); +} + +void IconThemesConfig::defaults() +{ + if (m_iconThemes->currentItem()==m_defaultTheme) return; + + m_iconThemes->setSelected(m_defaultTheme, true); + updateRemoveButton(); + + emit changed(true); + m_bChanged = true; +} + +#include "iconthemes.moc" diff --git a/kcontrol/icons/iconthemes.h b/kcontrol/icons/iconthemes.h new file mode 100644 index 000000000..d6d1a9e91 --- /dev/null +++ b/kcontrol/icons/iconthemes.h @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2000 Antonio Larrosa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef ICONTHEMES_H +#define ICONTHEMES_H + +#include +#include +#include + +class QPushButton; +class DeviceManager; +class QCheckBox; +class QStringList; + + +class IconThemesConfig : public KCModule +{ + Q_OBJECT + +public: + IconThemesConfig(QWidget *parent = 0L, const char *name = 0L); + virtual ~IconThemesConfig(); + + void loadThemes(); + bool installThemes(const QStringList &themes, const QString &archiveName); + QStringList findThemeDirs(const QString &archiveName); + + void updateRemoveButton(); + + void load(); + void save(); + void defaults(); + + int buttons(); + +protected slots: + void themeSelected(QListViewItem *item); + void installNewTheme(); + void removeSelectedTheme(); + +private: + QListViewItem *iconThemeItem(const QString &name); + + KListView *m_iconThemes; + QPushButton *m_removeButton; + + QLabel *m_previewExec; + QLabel *m_previewFolder; + QLabel *m_previewDocument; + QListViewItem *m_defaultTheme; + QMap m_themeNames; + bool m_bChanged; +}; + +#endif // ICONTHEMES_H + diff --git a/kcontrol/icons/main.cpp b/kcontrol/icons/main.cpp new file mode 100644 index 000000000..fe8c8c1b3 --- /dev/null +++ b/kcontrol/icons/main.cpp @@ -0,0 +1,105 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include +#include + +#include "icons.h" +#include "iconthemes.h" +#include "main.h" + +/**** DLL Interface ****/ +typedef KGenericFactory IconsFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_icons, IconsFactory("kcmicons") ) + +/**** IconModule ****/ + +IconModule::IconModule(QWidget *parent, const char *name, const QStringList &) + : KCModule(IconsFactory::instance(), parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + tab = new QTabWidget(this); + layout->addWidget(tab); + + tab1 = new IconThemesConfig(this, "themes"); + tab->addTab(tab1, i18n("&Theme")); + connect(tab1, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool))); + + tab2 = new KIconConfig(this, "effects"); + tab->addTab(tab2, i18n("Ad&vanced")); + connect(tab2, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool))); + + KAboutData* about = new KAboutData("kcmicons", I18N_NOOP("Icons"), "3.0", + I18N_NOOP("Icons Control Panel Module"), + KAboutData::License_GPL, + I18N_NOOP("(c) 2000-2003 Geert Jansen"), 0, 0); + about->addAuthor("Geert Jansen", 0, "jansen@kde.org"); + about->addAuthor("Antonio Larrosa Jimenez", 0, "larrosa@kde.org"); + about->addCredit("Torsten Rahn", 0, "torsten@kde.org"); + setAboutData( about ); +} + + +void IconModule::load() +{ + tab1->load(); + tab2->load(); +} + + +void IconModule::save() +{ + tab1->save(); + tab2->save(); +} + + +void IconModule::defaults() +{ + tab1->defaults(); + tab2->defaults(); +} + + +void IconModule::moduleChanged(bool state) +{ + emit changed(state); +} + +QString IconModule::quickHelp() const +{ + return i18n("

Icons

" + "This module allows you to choose the icons for your desktop.

" + "To choose an icon theme, click on its name and apply your choice by pressing the \"Apply\" button below. If you do not want to apply your choice you can press the \"Reset\" button to discard your changes.

" + "

By pressing the \"Install New Theme\" button you can install your new icon theme by writing its location in the box or browsing to the location." + " Press the \"OK\" button to finish the installation.

" + "

The \"Remove Theme\" button will only be activated if you select a theme that you installed using this module." + " You are not able to remove globally installed themes here.

" + "

You can also specify effects that should be applied to the icons.

"); +} + + + +#include "main.moc" diff --git a/kcontrol/icons/main.h b/kcontrol/icons/main.h new file mode 100644 index 000000000..90892351f --- /dev/null +++ b/kcontrol/icons/main.h @@ -0,0 +1,55 @@ +/* + * main.h + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __MAIN_H__ +#define __MAIN_H__ + + +#include +#include + +class IconModule : public KCModule +{ + Q_OBJECT + +public: + IconModule(QWidget *parent, const char *name, const QStringList &); + + void load(); + void save(); + void defaults(); + QString quickHelp() const; + +protected slots: + void moduleChanged(bool state); + +private: + QTabWidget *tab; + + KCModule *tab1; + KCModule *tab2; +}; + + +#endif diff --git a/kcontrol/icons/testicons.cpp b/kcontrol/icons/testicons.cpp new file mode 100644 index 000000000..d47f8af72 --- /dev/null +++ b/kcontrol/icons/testicons.cpp @@ -0,0 +1,13 @@ +/* Test programme for icons setup module. */ + +#include +#include "icons.h" + +int main(int argc, char **argv) +{ + KApplication app(argc, argv, "testicons"); + KIconConfig *w = new KIconConfig(0L, "testicons"); + app.setMainWidget(w); + w->show(); + return app.exec(); +} diff --git a/kcontrol/icons/uninstall.desktop b/kcontrol/icons/uninstall.desktop new file mode 100644 index 000000000..e1e3e1732 --- /dev/null +++ b/kcontrol/icons/uninstall.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/kcontrol/info/AUTHORS b/kcontrol/info/AUTHORS new file mode 100644 index 000000000..752630926 --- /dev/null +++ b/kcontrol/info/AUTHORS @@ -0,0 +1,32 @@ +Info Module: + + Original (means: insufficient) implementation: + + Matthias Hoelzer + + +Various authors contributed the code for non-Linux systems, among them: + + David Brownlee [NetBSD] + Jaromir Dolecek [NetBSD] + Paul Kendall [IRIX] + Vladimir Kushnir [FreeBSD] + Aubert Pierre [HP-UX] + Alex Zepeda [FreeBSD] + Sebestyen Zoltan [FreeBSD] + +Conversion to kcontrol applet: + + Matthias Hoelzer + + +Added more informations for Linux and HP-UX (empty functions for the other systems): + + Helge Deller + (Added: pci, dma, interrupts, sound, X-server, devices, ioports, partitions, SCSI) + + Hey! FreeBSD's got Sound, XServer, devices, partitions and SCSI info for + FreeBSD now too, compliments of your truly. + Alex Zepeda + +Have YOU seen the glove of K? diff --git a/kcontrol/info/ChangeLog b/kcontrol/info/ChangeLog new file mode 100644 index 000000000..675fc34c9 --- /dev/null +++ b/kcontrol/info/ChangeLog @@ -0,0 +1,27 @@ +1998-11-09 Alex Zepeda + + * info_fbsd.cpp: Fix the SCSI information, so that it's actually + displayed (only if info can be found). However, either kcminfo or + camcontrol needs to be suid root. Your choice. + + * info_fbsd.cpp: Add a few (hopefully) useful comments, and tidy up + some of the code. + +1998-12-08 Helge Deller + + * info.cpp: + fixed the column-width of KTabListboxes, where only one column was/is visible. + If more than one column is used, then the called function should set the width ! + + * added sections to the online-help in the /doc-directory + +1998-12-08 Duncan Haldane + + * info_linux.cpp: + made the sound info look first for /dev/sndstat, before /proc/sound. + Introduced #defines for all the hard-coded /proc/* files to make subsequent + changes easier. + + * expanded the descriptions in the online help. + + * deleted processor.xpm and memory.xpm (no longer needed) diff --git a/kcontrol/info/Makefile.am b/kcontrol/info/Makefile.am new file mode 100644 index 000000000..4b65dc07f --- /dev/null +++ b/kcontrol/info/Makefile.am @@ -0,0 +1,22 @@ +kde_module_LTLIBRARIES = kcm_info.la + +if COMPILE_GL_INFO +AM_CXXFLAGS = -DINFO_OPENGL_AVAILABLE +endif + +kcm_info_la_SOURCES = main.cpp memory.cpp opengl.cpp + +kcm_info_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined $(FRAMEWORK_COREAUDIO) +kcm_info_la_LIBADD = $(LIBALIB) $(LIB_KDEUI) $(LIB_TRU64_MACH) $(LIBCFG) $(LIBODM) $(LIBKSTAT) $(LIBDEVINFO) $(GLLIB) +METASOURCES = AUTO + +AM_CPPFLAGS= $(all_includes) $(GLINC) + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kcminfo.pot + + +xdg_apps_DATA = memory.desktop processor.desktop dma.desktop \ + interrupts.desktop ioports.desktop opengl.desktop pci.desktop sound.desktop \ + devices.desktop scsi.desktop partitions.desktop xserver.desktop \ + cdinfo.desktop diff --git a/kcontrol/info/cdinfo.desktop b/kcontrol/info/cdinfo.desktop new file mode 100644 index 000000000..b5a441e47 --- /dev/null +++ b/kcontrol/info/cdinfo.desktop @@ -0,0 +1,166 @@ +[Desktop Entry] +Exec=kcmshell cdinfo +Icon=kcmdevices +Type=Application +DocPath=kinfocenter/cdinfo/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=cdinfo +X-KDE-ParentApp=kinfocenter + +Name=CD-ROM Information +Name[bg]=CD-ROM +Name[bn]=সিডি-রম তথ্য +Name[ca]=Informació del CD-ROM +Name[cs]=Informace o CD-ROM +Name[csb]=Wëdowiédzô ò CD-ROMie +Name[da]=Cd-rom-information +Name[de]=CD-ROM-Information +Name[el]=Πληροφορίες CD-ROM +Name[eo]=Lumdiska Informo +Name[es]=Información de CD-ROM +Name[et]=CD-seadme info +Name[fa]=اطلاعات دیسک فشرده +Name[fi]=CD-ROM tiedot +Name[fr]=Informations sur le CD-Rom +Name[fy]=Kompaktskiif ynformaasje +Name[gl]=Información do CD-ROM +Name[he]=מידע אודות תקליטורים +Name[hr]=CD-ROM podaci +Name[hu]=CD-ROM-jellemzők +Name[id]=Informasi CD-ROM +Name[is]=Upplýsingar um CD-ROM +Name[it]=Informazioni CD-ROM +Name[ja]=CD-ROM 情報 +Name[kk]=CD-ROM мәліметі +Name[km]=ព័ត៌មាន​ស៊ីឌីរ៉ូម +Name[ko]=DMA 정보 +Name[lt]=CD-ROM informacija +Name[nb]=Informasjon om CD-ROM +Name[nds]=CD-ROM-Informatschonen +Name[ne]=सीडी रोम जानकारी +Name[nl]=Informatie over CD-ROM +Name[nn]=CD-ROM-informasjon +Name[pa]=CD-ROM ਜਾਣਕਾਰੀ +Name[pl]=Informacja o CD-ROM-ie +Name[pt]=Informação do CD-ROM +Name[pt_BR]=Informações do CD-ROM +Name[ro]=Informații CD-ROM +Name[ru]=Сведения о CD-ROM +Name[sk]=Informácie o CD-ROM +Name[sl]=Podatki o CD-ROMu +Name[sr]=Информације о CD-ROM-у +Name[sr@Latn]=Informacije o CD-ROM-u +Name[sv]=Cdrom-Information +Name[te]=సీడీ-రామ్ సమాచారం +Name[tg]=Иттилооти CD-ROM +Name[th]=ข้อมูลของ CD-ROM +Name[tr]=CD-ROM Bilgisi +Name[uk]=Інформація CD-ROM +Name[uz]=CD-ROM uskunasi +Name[uz@cyrillic]=CD-ROM ускунаси +Name[vi]=Thông tin đĩa CD-ROM +Name[wa]=Informåcions do CD-ROM +Name[zh_TW]=光碟機資訊 + +Comment=CD/DVD Drive Capabilites +Comment[bg]=Информация за CD/DVD устройството +Comment[bn]=সিডি/ডিভিডি ড্রাইভ-এর ক্ষমতাবলী +Comment[ca]=Capacitats del dispositiu CD/DVD +Comment[cs]=Kompatibilita CD/DVD mechaniky +Comment[csb]=Mòżlëwòtë nëka CD/DVD +Comment[da]=Cd- eller dvd-enhedens formåen +Comment[de]=CD/DVD-Laufwerkeigenschaften +Comment[el]=Δυνατότητες οδηγού CD/DVD +Comment[eo]=LD/DVDa legilaj eblecoj +Comment[es]=Posibilidades del dispositivo CD/ DVD +Comment[et]=CD/DVD-seadme omadused +Comment[fa]=قابلیتهای گردانندۀ CD/DVD +Comment[fi]=CD/DVD-aseman ominaisuudet +Comment[fr]=Capacités du lecteur de CD / DVD +Comment[fy]=Kompakt-/Dûbelskiif skriuwmooglikheden +Comment[gl]=Funcións do Dispositivo de CD/DVD +Comment[he]=מאפייני תקליטור או צורב +Comment[hr]=CD/DVD mogućnosti pogona +Comment[hu]=CD/DVD-meghajtó jellemzői +Comment[is]=Geta CD/DVD tækis +Comment[it]=Caratteristiche lettore CD/DVD +Comment[ja]=CD/DVD ドライブの機能 +Comment[kk]=CD/DVD дискжетек мүмкіндіктері +Comment[km]=សមត្ថភាព​ដ្រាយ​ស៊ីឌី/ឌីវីឌី +Comment[lt]=CD/DVD įrenginio galimybės +Comment[nb]=CD/DVD-drevets muligheter +Comment[nds]=CD/DVD-Loopwarkkönen +Comment[ne]=सीडी/डीभीडी ड्राइभ क्षमता +Comment[nl]=Mogelijkheden van CD/DVD-station +Comment[nn]=Eigenskapar til CD/DVD-spelar +Comment[pa]=CD/DVD ਡਰਾਇਵ ਸਮੱਰਥਾ +Comment[pl]=Możliwości napędu CD/DVD +Comment[pt]=Capacidades da Unidade de CD/DVD +Comment[pt_BR]=Capacidades do Drive de CD/DVD +Comment[ro]=Capabilități unitate CD/DVD +Comment[ru]=Возможности привода CD/DVD +Comment[sk]=Schopnosti CD/DVD zariadenia +Comment[sl]=Zmožnosti pogona CD/DVD +Comment[sr]=Могућности CD/DVD уређаја +Comment[sr@Latn]=Mogućnosti CD/DVD uređaja +Comment[sv]=Cd- eller dvd-enhetens förmågor +Comment[te]=సీడి/డివిడి డ్రైవ్ సామర్ద్యాలు +Comment[tg]=Захираҳои дастгоҳи CD/DVD +Comment[th]=ความสามารถของไดรฟ CD/DVD +Comment[tr]=CD/DVD Sürücü Becerileri +Comment[uk]=Можливості приводу КД/DVD +Comment[uz]=CD/DVD uskunasi haqida maʼlumot +Comment[uz@cyrillic]=CD/DVD ускунаси ҳақида маълумот +Comment[vi]=Khả năng ổ đĩa CD/DVD +Comment[wa]=Usteyes di léjheu CD/DVD +Comment[zh_TW]=CD/DVD 相容性 + +Keywords=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities +Keywords[bg]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities, информация за CD-ROM, CD устройство +Keywords[ca]=Informació del CD-ROM,CD-ROM,CD,Dispositiu CD ,Capacitats d'escriptura +Keywords[cs]=Informace o CD, mechanice a možnostech vypalovačky +Keywords[csb]=Wëdowiédzô CD-ROM,CD-ROM,CD,Nëk CD,Mòżlëwòtë nagrëwôcza +Keywords[da]=Cdrom-information,cdrom,cd,cd-enhed,brænderens formåen +Keywords[de]=CD-ROM-Information,CD-ROM,CD,CD Drive,Writer Capabilities +Keywords[el]=Πληροφορίες CD-ROM,CD-ROM,CD,Οδηγός CD,Δυνατότητες εγγραφέα +Keywords[eo]=Lumdiska informoj,Lumdikso,Lumdiskigilo,Lumdiska registrilo +Keywords[es]=Información CD-ROM,CD-ROM,CD,Dispositivo CD,Capacidades de escritura +Keywords[et]=CD-seadme info,CD-ROM,CD,CD-seade,kirjuti omadused +Keywords[fa]=اطلاعات دیسک فشرده، دیسک فشرده، دیسک فشرده، گردانندۀ دیسک فشرده، قابلیتهای رایتر +Keywords[fi]=CD-ROM tiedot,CD-ROM,CD,CD-asema,Kirjoitusominaisuudet +Keywords[fr]=CD-ROM Informations,CD-ROM,CD,lecteur CD,capacités,graveur,fonctionnalités +Keywords[fy]=Kompaktskiif ynformaasje,CD-ROM,CD,CD stasjon,Skriuwmooglikheden +Keywords[gl]=Información do CD-ROM,CD-ROM,CD,Dispositivo de CD,Funcións de Gravación +Keywords[he]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities, מידע אודות תקליטורים, תקליטור, תקליטור, צורב, סידי, סידי־רום, סידי-רום +Keywords[hr]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,CD-ROM podaci, CD pogon,mogućnosti pogona +Keywords[hu]=CD-ROM-jellemzők,CD-ROM,CD,CD-meghajtó,CD-író,írási jellemzők +Keywords[is]=CD-ROM upplýsingar,CD-ROM,CD,CD drif,geta skrifara +Keywords[it]=Informazioni CD-ROM,CD-ROM,CD,Lettore CD,Caratteristiche del masterizzatore +Keywords[ja]=CD-ROM情報,CD-ROM,CD,CDドライブ,ライター機能 +Keywords[km]=ព័ត៌មាន​ស៊ីឌីរ៉ូម,ស៊ីឌីរ៉ូម,ស៊ីឌី,ដ្រាយស៊ីឌី,សមត្ថភាព​ក្បាល​សរសេរ +Keywords[lt]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,rašymas,diskas, CD įrenginys +Keywords[nb]=CD-ROM informasjon,CD-ROM,CD,CD-drev, skrivermuligheter +Keywords[nds]=CD-ROM-Informatschonen,CD-ROM,CD,CD-Loopwark,Loopwarkkönen,Könen +Keywords[ne]=सीडी रोम जानकारी, सीडी रोम,सीडी,सीडी ड्राइभ, लेखकको क्षमता +Keywords[nl]=Informatie over CD-ROM,CD-ROM,CD,CD station,schrijver,CD-schrijver,schrijfmogelijkheden,CD-station +Keywords[nn]=CD-ROM-informasjon,CD-ROM,CD,CD-spelar,brennareigenskapar +Keywords[pl]=Informacja CD-ROM,CD-ROM,CD,Napęd CD,Możliwości nagrywarki +Keywords[pt]=Informação do CD-ROM,CD-ROM,CD,Leitor de CD,Capacidades do Gravador +Keywords[pt_BR]=Informações do CD-ROM,CD-ROM,CD,Drive de CD,Capacidades do Gravador +Keywords[ro]=Informații CD-ROM Information,CD-ROM,CD,Unitate CD,Capabilități inscriptor +Keywords[ru]=Сведения о CD-ROM, CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,возможности привода,привод +Keywords[sk]=CD-ROM informácie,CD-ROM,CD,CD Drive,Writer Capabilities +Keywords[sl]=Podatki o CD-ROMu,CD,Pogon CD,Zmožnosti zapisovalnika,DVD +Keywords[sr]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,информације CD,уређај,могућности,писач +Keywords[sr@Latn]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,informacije CD,uređaj,mogućnosti,pisač +Keywords[sv]=cdrom-information,cdrom,cd,cd-enhet,brännarens förmåga +Keywords[tg]=Иттилооти CD-ROM,CD-ROM,CD,Дастгоҳи CD, Захираҳои сабткунӣ +Keywords[th]=-ข้อมูล CD-ROM,CD-ROM,CD,ไดรฟ CD,ความสามารถของเครื่องเขียน +Keywords[tr]=CD-ROM Bilgileri,CD-ROM,CD,CD Drive,Yazıcının Özellikleri +Keywords[uk]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,Інформація CD-ROM,CD-ROM,КД,Привід КД,Можливості приводу запису +Keywords[vi]=Thông tin đĩa CD-ROM,CD-ROM,CD, ổ đĩa CD, Khả năng ổ ghi +Keywords[wa]=Informåcion do CD-ROM,CD-ROM,CD,léjheu d' CD,Usteyes di scrijhaedje + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/configure.in.bot b/kcontrol/info/configure.in.bot new file mode 100644 index 000000000..c66a13f88 --- /dev/null +++ b/kcontrol/info/configure.in.bot @@ -0,0 +1,13 @@ +if test x$have_gl = xno; then + echo "" + echo "You are missing" + if test "$ac_cv_header_GL_gl_h" = "no"; then + echo " - OpenGL (mesa)" + fi + if test "$ac_cv_header_GL_glu_h" = "no"; then + echo " - GLU" + fi + echo "OpenGL information module has been disabled." + echo "" + all_tests=bad +fi diff --git a/kcontrol/info/configure.in.in b/kcontrol/info/configure.in.in new file mode 100644 index 000000000..9bc6d1c4b --- /dev/null +++ b/kcontrol/info/configure.in.in @@ -0,0 +1,22 @@ +# libmach for Tru64 +# linux/raw.h for Linux +# devinfo.h, libdevinfo for the list of {IRQ,DMA,IOPORTS/MEMRANGES} for FreeBSD + +case "$host" in + *-*-osf*) + AC_CHECK_LIB(mach, vm_statistics, LIB_TRU64_MACH="-lmach")dnl + ;; + *-*-linux*) + AC_CHECK_HEADERS(linux/raw.h sys/raw.h)dnl + ;; + *-*-freebsd*) + AC_CHECK_HEADERS(devinfo.h) + AC_CHECK_LIB(devinfo, devinfo_foreach_rman, LIBDEVINFO="-ldevinfo") + ;; +esac +AC_SUBST(LIB_TRU64_MACH) + +AC_HAVE_GL( have_gl=yes, have_gl=no ) +AM_CONDITIONAL(COMPILE_GL_INFO, test x$have_gl = xyes) + +KDE_CHECK_LONG_LONG diff --git a/kcontrol/info/devices.desktop b/kcontrol/info/devices.desktop new file mode 100644 index 000000000..171224aa6 --- /dev/null +++ b/kcontrol/info/devices.desktop @@ -0,0 +1,246 @@ +[Desktop Entry] +Exec=kcmshell devices +Icon=kcmdevices +Type=Application +DocPath=kinfocenter/devices/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=devices +X-KDE-ParentApp=kinfocenter + +Name=Devices +Name[af]=Toestelle +Name[ar]=الأجهزة +Name[az]=Avadanlıqlar +Name[be]=Прылады +Name[bg]=Устройства +Name[bn]=ডিভাইস +Name[br]=Trobarzhelloù +Name[bs]=Uređaji +Name[ca]=Dispositius +Name[cs]=Zařízení +Name[csb]=Ùrządzenia +Name[cy]=Dyfeisiau +Name[da]=Enheder +Name[de]=Geräte +Name[el]=Συσκευές +Name[eo]=Aparatoj +Name[es]=Dispositivos +Name[et]=Seadmed +Name[eu]=Gailuak +Name[fa]=دستگاهها +Name[fi]=Laitteet +Name[fr]=Périphériques +Name[fy]=Apparaten +Name[ga]=Gléasanna +Name[gl]=Dispositivos +Name[he]=התקנים +Name[hi]=औज़ार +Name[hr]=Uređaji +Name[hu]=Eszközök +Name[id]=Divais +Name[is]=Tæki +Name[it]=Periferiche +Name[ja]=デバイス +Name[ka]=მოწყობილობები +Name[kk]=Құрылғылар +Name[km]=ឧបករណ៍ +Name[ko]=장치 +Name[lo]=ອຸປະກອນ +Name[lt]=Įrenginiai +Name[lv]=Iekārtas +Name[mk]=Уреди +Name[mn]=Төхөөрөмж +Name[ms]=Peranti +Name[nb]=Enheter +Name[nds]=Reedschappen +Name[ne]=यन्त्र +Name[nl]=Apparaten +Name[nn]=Einingar +Name[nso]=Maano +Name[oc]=Dispositius +Name[pa]=ਜੰਤਰ +Name[pl]=Urządzenia +Name[pt]=Dispositivos +Name[pt_BR]=Dispositivos +Name[ro]=Dispozitive +Name[ru]=Устройства +Name[rw]=Apareye +Name[se]=Ovttadagat +Name[sk]=Zariadenia +Name[sl]=Enote +Name[sr]=Уређаји +Name[sr@Latn]=Uređaji +Name[ss]=Tisetjentiswa +Name[sv]=Enheter +Name[ta]=சாதனங்கள் +Name[te]=పరికరాలు +Name[tg]=Дастгоҳҳо +Name[th]=อุปกรณ์ +Name[tr]=Aygıtlar +Name[tt]=Cıhazlar +Name[uk]=Пристрої +Name[uz]=Uskunalar +Name[uz@cyrillic]=Ускуналар +Name[ven]=Maano +Name[vi]=Thiết bị +Name[wa]=Éndjins +Name[xh]=Amacebo +Name[zh_CN]=设备 +Name[zh_TW]=設備 +Name[zu]=Amathuluzi anenjongo + +Comment=Attached devices information +Comment[af]=Gekoppelde toestelle informasie +Comment[ar]=معلومات الأجهزة المرتبطة +Comment[az]=Bağlanmış avadanlıqlar haqqında mə'lumat +Comment[be]=Інфармацыя аб далучаных прыладах +Comment[bg]=Информация за системните устройства +Comment[bn]=সংলগ্ন ডিভাইস সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn an trobarzhelloù luget +Comment[bs]=Informacije o priključenim uređajima +Comment[ca]=Informació dels dispositius connectats +Comment[cs]=Informace o připojených zařízeních +Comment[csb]=Wëdowiédzô ò włączonëch ùrządzeniach +Comment[cy]=Gwybodaeth am ddyfeisiau wedi'i gysylltu +Comment[da]=Information om tilkoblede enheder +Comment[de]=Informationen zu angeschlossenen Geräten +Comment[el]=Πληροφορίες για τις συνδεδεμένες συσκευές +Comment[eo]=Informo pri kunmetitaj aparatoj +Comment[es]=Información sobre los dispositivos conectados +Comment[et]=Info ühendatud seadmete kohta +Comment[eu]=Uztartuta dauden gailuei buruzko informazioa +Comment[fa]=اطلاعات دستگاههای پیوست‌شده +Comment[fi]=Tietoja liitetyistä laitteista +Comment[fr]=Informations sur les périphériques montés +Comment[fy]=Ynformaasje oer oansletten apparaten +Comment[gl]=Información dos dispositivos conectados +Comment[he]=מידע על ההתקנים המחוברים +Comment[hi]=औज़ार जानकारी संलग्न +Comment[hr]=Podaci o priključenim uređajima +Comment[hu]=A csatlakoztatott eszközök jellemzői +Comment[id]=Informasi divais terkait +Comment[is]=Upptalning á tækjum tölvu +Comment[it]=Informazioni sulle periferiche connesse +Comment[ja]=接続されているデバイスの情報 +Comment[ka]=ცნობები მიერთებულ მოწყობილობებზე +Comment[kk]=Қосылған құрылғылар туралы +Comment[km]=ព័ត៌មាន​ឧបករណ៍​ដែល​បាន​ភ្ជាប់ +Comment[ko]=장착된 장치 정보 +Comment[lo]=ຂໍ້ມູນອຸປະກອນທີ່ຕໍ່ຢູ່ +Comment[lt]=Prijungtų įrenginių informacija +Comment[lv]=Pievienoto iekārtu informācija +Comment[mk]=Информации за прикачени уреди +Comment[mn]=Залгаатай төхөөрөмжийн мэдээллүүд +Comment[ms]=Maklumat Peranti Terlampir +Comment[mt]=Informazzjoni dwar devices imwaħħlin +Comment[nb]=Informasjon om tilkoblede enheter +Comment[nds]=Informatschoon över de tokoppelten Reedschappen +Comment[ne]=सङ्लग्न गरिएका यन्त्रहरू सूचना +Comment[nl]=Informatie over aangesloten apparaten +Comment[nn]=Informasjon om tilkopla einingar +Comment[nso]=Tshedimoso ya maano yeo e kgwathisitswego +Comment[oc]=Informacion dèus dispositius connectats +Comment[pa]=ਜੁੜੇ ਜੰਤਰਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o włączonych urządzeniach +Comment[pt]=Informações sobre os Dispositivos +Comment[pt_BR]=Informações sobre dispositivos conectados +Comment[ro]=Informații despre dispozitivele instalate +Comment[ru]=Сведения о подключенных устройствах +Comment[rw]=Ibisobanuro by'amapareye afasheho +Comment[se]=Dieđuid laktašuvvon ovttadagaid birra +Comment[sk]=Informácie o pripojených zariadeniach +Comment[sl]=Informacije o priklopljenih enotah +Comment[sr]=Информације о прикаченим уређајима +Comment[sr@Latn]=Informacije o prikačenim uređajima +Comment[sv]=Information om anslutna enheter +Comment[ta]=சேர்க்கப்பட்ட சாதனங்கள் தகவல் +Comment[te]=చేర్చిన పరికరాల సమాచారం +Comment[tg]=Иттилооти дастгоҳҳои бастанд +Comment[th]=ข้อมูลอุปกรณ์ที่ต่ออยู่ +Comment[tr]=Bağlanmış aygıtlar hakkında bilgi +Comment[tt]=Totaştırılğan cıhazlar turında belem +Comment[uk]=Інформація щодо приєднаних пристроїв +Comment[uz]=Ulangan uskunalar haqida maʼlumot +Comment[uz@cyrillic]=Уланган ускуналар ҳақида маълумот +Comment[ven]=Maitele a mafhungo o kwamanywaho +Comment[vi]=Thông tin về thiết bị kèm +Comment[wa]=Informåcion des éndjins d' ataetchîs +Comment[xh]=Ulwazi lwamacebo afakelweyo +Comment[zh_CN]=附加的设备信息 +Comment[zh_TW]=附加的設備資訊 +Comment[zu]=Ulwazi lwamathuluzi anenjongo ananyathiseliwe + +Keywords=dev,Devices,System Information,Information +Keywords[ar]=dev,Devices,System Information,Information,أجهزة,معلومات النظام,معلومات +Keywords[az]=dev,Avadanlıqlar,Sistem Haqqında Mə'lumat, Mə'lumat +Keywords[be]=прылады,прылада,сістэмная інфармацыя,інфармацыя,dev,Devices,System Information,Information +Keywords[bg]=информация, система, системна, устройства, устройство, dev, Devices, System Information, Information +Keywords[br]=trobarzhell,titouroù reizhiad,titouroù +Keywords[bs]=dev,Devices,System Information,Information,uređaji,uređaj,sustav,informacije o sustavu +Keywords[ca]=dev,dispositius,Informació del sistema,Informació +Keywords[cs]=dev,Zařízení,Systémové informace,Informace +Keywords[csb]=dev,systemòwé ùrządzenia,wëdowiédzô ò systemie,wëdowiédzô, infòrmacëjô +Keywords[cy]=dyf,Dyfeisiau,Gwybodaeth Cysawd,Gwybodaeth +Keywords[da]=dev,Enheder,Systeminformation,Information +Keywords[de]=Geräte,Devices,Systeminformation,Information +Keywords[el]=dev,Συσκευές,Πληροφορίες συστήματος,Πληροφορίες +Keywords[eo]=aparato,dev,sistemo,operaciumo,informo +Keywords[es]=Dispositivos,Información del sistema +Keywords[et]=dev,Seadmed,Süsteemi informatsioon,Informatsioon +Keywords[eu]=dev,Dispositiboak,Sistemaren informazioa,informazioa +Keywords[fa]=dev،دستگاهها، اطلاعات سیستم، اطلاعات +Keywords[fi]=dev,Laitteet,Järjestelmätiedot,Tiedot +Keywords[fr]=dev,périphériques,information,informations système +Keywords[fy]=dev,devices,systeemynformaasje,ynformaasje,apparaten,apparaatbehear +Keywords[ga]=dev,Gléasanna,Eolas faoin Chóras,Eolas +Keywords[gl]=dev,Dispositivo,Información do Sistema,Información +Keywords[he]=התקנים,מידע מערכת,מידע,dev,Devices,System Information,Information +Keywords[hi]=डेव,औज़ार,तंत्र जानकारी,जानकारी +Keywords[hr]=dev,Devices,System Information,Information,uređaji,uređaj,sustav,podaci o sustavu,podaci +Keywords[hu]=dev,eszközök,rendszerinformáci,információ +Keywords[id]=dev,Devices,Informasi Sistem,Informasi +Keywords[is]=dev,tæki,jaðartæki,upplýsingar,kerfi +Keywords[it]=dev,dispositivi,periferiche,informazioni sul sistema,informazioni +Keywords[ja]=dev,デバイスシステム,システムの情報,情報 +Keywords[km]=ឧបករណ៍,ព័ត៌មាន​ប្រព័ន្ធ,ព័ត៌មាន +Keywords[lt]=dev,Įrenginiai,Sistemos Informacija,Informacija +Keywords[lv]=iek,Iekārtas,Sistēmas Informācija,Informācija +Keywords[mk]=dev,Devices,System Information,Information,Уреди,Информации за системот,Информација +Keywords[mn]=dev,Төхөөрөмж,Системийн мэдээлэл,Мэдээлэл +Keywords[nb]=dev,enheter,systeminformasjon,Informasjon +Keywords[nds]=dev,Reedschappen,Systeeminformatschoon,Informatschoon +Keywords[ne]=डेभ, यन्त्र, प्रणाली सूचना, सूचना +Keywords[nl]=dev,devices,systeeminformatie,informatie,apparaten,apparaatbeheer +Keywords[nn]=dev,eining,einingar,systeminformasjon,informasjon +Keywords[nso]=dev,Maano,Tshedimoso ya System,Tshedimoso +Keywords[oc]=dev,dispositius,Informacion dèu sistemo,Informacion +Keywords[pa]=dev,ਜੰਤਰ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=dev,Urządzenia systemowe,informacja o systemie,Informacja +Keywords[pt]=dev,dispositivos,informações de sistema,informação +Keywords[pt_BR]=dev,Dispositivos,Informações de sistema,Informações,Informação +Keywords[ro]=dev,dispozitive,informații sistem,informații +Keywords[rw]=dev,Apareye,Amakuru Sisitemu,Amakuru +Keywords[se]=dev,ovttadat,ovttadagat,vuogádatdiehtu,diehtu +Keywords[sk]=dev,Zariadenia,Systém Informácie +Keywords[sl]=dev,naprave,informacije o sistemu,informacije +Keywords[sr]=dev,Devices,System Information,Information,уређаји,системске информације,информације +Keywords[sr@Latn]=dev,Devices,System Information,Information,uređaji,sistemske informacije,informacije +Keywords[sv]=enhet,Enheter,Systeminformation,Information +Keywords[ta]=dev,சாதனங்கள், கணினித் தகவல், தகவல் +Keywords[tg]=dev,Дастгоҳҳо,Иттилооти система,Иттилоот +Keywords[th]=dev,อุปกรณ์,ข้อมูลระบบ,ข้อมูล +Keywords[tr]=dev,Aygıtlar,Sistem Hakkında Bilgi, Bilgi +Keywords[uk]=пристрої,інформація,dev,devices,system-information,information +Keywords[uz]=dev,Uskunalar,Maʼlumot,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=dev,Ускуналар,Маълумот,Тизим ҳақида маълумот +Keywords[ven]=dev,Maano,Mafhungo a sisitemu,Mafhungo +Keywords[vi]=dev,Thiết bị,Thông tin Hệ thống,Thông tin +Keywords[wa]=dev,Devices,System Information,Information,informåcion do sistinme, informåcion,éndjins +Keywords[xh]=dev,Amacebo,Ulwazi lwendlela,Ulwazi +Keywords[zh_CN]=dev,Devices,System Information,Information,设备,系统信息,信息 +Keywords[zh_TW]=dev,Devices,System Information,Information,設備,系統資訊,資訊 +Keywords[zu]=dev,Amathuluzi anenjongo,Ulwazi lwesistimu,Ulwazi + diff --git a/kcontrol/info/dma.desktop b/kcontrol/info/dma.desktop new file mode 100644 index 000000000..e420acaea --- /dev/null +++ b/kcontrol/info/dma.desktop @@ -0,0 +1,248 @@ +[Desktop Entry] +Exec=kcmshell dma +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/dma/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=dma +X-KDE-ParentApp=kinfocenter + +Name=DMA-Channels +Name[af]=Dma-kanale +Name[az]=DMA Kanalları +Name[be]=Каналы DMA +Name[bg]=DMA канали +Name[bn]=ডি.এম.এ-চ্যানেল +Name[br]=Kanolioù DMA +Name[bs]=DMA-Kanali +Name[ca]=Canals DMA +Name[cs]=DMA kanály +Name[csb]=Kanałë DMA +Name[cy]=Sianeli DMA +Name[da]=DMA-kanaler +Name[de]=DMA-Kanäle +Name[el]=Κανάλια DMA +Name[eo]=DMA-kanaloj +Name[es]=Canales DMA +Name[et]=DMA kanalid +Name[eu]=DMA-Kanalak +Name[fa]=مجراهای دستیابی مستقیم به حافظه +Name[fi]=DMA-kanavat +Name[fr]=Canaux DMA +Name[fy]=DMA-kanalen +Name[ga]=Cainéil-DMA +Name[gl]=Canles de DMA +Name[he]=גישה ישירה לזיכרון +Name[hi]=डीएमए-चैनल्स +Name[hr]=DMA kanali +Name[hu]=DMA-csatornák +Name[id]=Channels-DMA +Name[is]=DMA-brautir +Name[it]=Canali DMA +Name[ja]=DMA チャンネル +Name[ka]=DMA არხები +Name[kk]=DMA-арналар +Name[km]=ផ្លូវ DMA +Name[ko]=DMA 채널 +Name[lo]=ຊາແນລDMA +Name[lt]=DMA-Kanalai +Name[lv]=DMA-Kanāli +Name[mk]=DMA-канали +Name[mn]=DMA-Сувгууд +Name[ms]=Saluran DMA +Name[nb]=DMA-kanaler +Name[nds]=DMA-Kanaals +Name[ne]=DMA-च्यानल +Name[nl]=DMA-kanalen +Name[nn]=DMA-kanalar +Name[nso]=Dikanale tsa DMA +Name[oc]=Canals DMA +Name[pa]=DMA-ਚੈਨਲ +Name[pl]=Kanały DMA +Name[pt]=Canais de DMA +Name[pt_BR]=Canais DMA +Name[ro]=Canale DMA +Name[ru]=Каналы DMA +Name[rw]=Imirongomakuru-DMA +Name[se]=DMA-kanálat +Name[sk]=DMA kanály +Name[sl]=Kanali DMA +Name[sr]=DMA канали +Name[sr@Latn]=DMA kanali +Name[ss]=Migudvu ye DMa +Name[sv]=DMA-kanaler +Name[ta]=DMA-வழிமுறைகள் +Name[te]=డిఎంఏ-చానెళ్ళు +Name[tg]=Каналҳои-DMA +Name[th]=ช่อง DMA +Name[tr]=DMA Kanalları +Name[tt]=DMA-Yullar +Name[uk]=Канали ПДП +Name[uz]=DMA kanallari +Name[uz@cyrillic]=DMA каналлари +Name[ven]=Tshanele ya DMA +Name[vi]=Kênh DMA +Name[wa]=Canås DMA +Name[xh]=DMA-Imijelo +Name[zh_CN]=DMA 通道 +Name[zh_TW]=DMA 通道 +Name[zu]=Imigudu-DMA + +Comment=DMA information +Comment[af]=Dma informasie +Comment[ar]=معلومات DMA +Comment[az]=DMA haqqında mə'lumat +Comment[be]=Інфармацыя аб DMA +Comment[bg]=Информация за DMA +Comment[bn]=ডি.এম.এ. সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn an DMA +Comment[bs]=DMA informacije +Comment[ca]=Informació de la DMA +Comment[cs]=Informace o DMA +Comment[csb]=Wëdowiédzô ò DMA +Comment[cy]=Gwybodaeth DMA +Comment[da]=DMA-information +Comment[de]=Informationen zu DMA +Comment[el]=Πληροφορίες για τα DMA +Comment[eo]=DMA-informo +Comment[es]=Información sobre DMA +Comment[et]=DMA kanalite info +Comment[eu]=DMAri buruzko informazioa +Comment[fa]=اطلاعات دسترسی مستقیم به حافظه +Comment[fi]=DMA-tietoja +Comment[fr]=Informations DMA +Comment[fy]=DMA-ynformatie +Comment[ga]=Eolas faoi DMA +Comment[gl]=Información de DMA +Comment[he]=מידע על ערוצי הגישה הישירה לזיכרון +Comment[hi]=डीएमए जानकारी +Comment[hr]=DMA podaci +Comment[hu]=DMA-információk +Comment[id]=Informasi DMA +Comment[is]=Upplýsingar um DMA-brautir +Comment[it]=Informazioni sul DMA +Comment[ja]=DMA 情報 +Comment[ka]=ინფორმაცია DMA–ს შესახებ +Comment[kk]=DMA мәліметі +Comment[km]=ព័ត៌មាន DMA +Comment[ko]=DMA 정보 +Comment[lt]=DMA informacija +Comment[lv]=DMA informācija +Comment[mk]=Информации за DMA +Comment[mn]=DMA-н мэдээлэл +Comment[ms]=Maklumat DMA +Comment[mt]=Informazzjoni dwar DMA +Comment[nb]=DMA-informasjon +Comment[nds]=Informatschoon över DMA +Comment[ne]=DMA सूचना +Comment[nl]=DMA-informatie +Comment[nn]=DMA-informasjon +Comment[nso]=Tshedimoso ya DMA +Comment[oc]=Informacion de DMA +Comment[pa]=DMA ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o DMA +Comment[pt]=Informação do DMA +Comment[pt_BR]=Informações de DMA +Comment[ro]=Informații despre canalele DMA +Comment[ru]=Сведения о DMA +Comment[rw]=Ibisobanuro DMA +Comment[se]=DMA-diehtu +Comment[sk]=Informácie o DMA +Comment[sl]=Informacija o neposrednem dostopu do pomnilnika (DMA) +Comment[sr]=DMA информације +Comment[sr@Latn]=DMA informacije +Comment[ss]=Imininingwaneye DMA +Comment[sv]=DMA-information +Comment[ta]=DMA தகவல் +Comment[te]=డిఎంఏ సమాచారం +Comment[tg]=Иттилооти DMA +Comment[th]=ข้อมูล DMA +Comment[tr]=DMA hakkında bilgi +Comment[tt]=DMA turında +Comment[uk]=Інформація щодо ПДП +Comment[uz]=DMA haqida maʼlumot +Comment[uz@cyrillic]=DMA ҳақида маълумот +Comment[ven]=Mafhungo a DMA +Comment[vi]=Thông tin DMA +Comment[wa]=Informåcion so les canås DMA +Comment[xh]=DMA ulwazi +Comment[zh_CN]=DMA 信息 +Comment[zh_TW]=DMA 資訊 +Comment[zu]=Ulwazi lwe-DMA + +Keywords=dma,DMA-Channels,System Information +Keywords[af]=dma,DMA-Channels,System Informasie +Keywords[az]=dma,DMA-Kanalları,Sistem Haqqında Mə'lumat +Keywords[be]=каналы DMA,сістэмная інфармацыя,dma,DMA-Channels,System Information +Keywords[bg]=информация, система, системна, канали, канал, dma, DMA-Channels, System Information +Keywords[br]=dma,kanolioù DMA,titoutoù reizhoad +Keywords[bs]=dma,DMA-Channels,System Information,DMA-kanali,informacije o sustavu +Keywords[ca]=dma,Canals DMA,informació del sistema +Keywords[cs]=dma,DMA kanály,Informace o systému +Keywords[csb]=dma,kanałë DMA,wëdowiédzô ò systemie +Keywords[cy]=dma,Sianeli DMA,Gwybodaeth Cysawd +Keywords[da]=dma,DMA-kanaler,Systeminformation +Keywords[de]=DMA,DMA-Kanäle,Systeminformation,Information +Keywords[el]=dma,Κανάλια DMA,Πληροφορίες συστήματος +Keywords[eo]=DMA,kanaloj,sistemo,operaciumo,informo +Keywords[es]=DMA,Canales DMA,Información del sistema +Keywords[et]=dma,DMA kanalid,süsteemi informatsioon +Keywords[eu]=dma,DMA-Kanalak,Sistemaren informazioa +Keywords[fa]=dma ،مجراهای دستیابی مستقیم به حافظه، اطلاعات سیستم +Keywords[fi]=dma,DMA-kanavat,Järjestelmätiedot +Keywords[fr]=dma,canaux DMA,informations système +Keywords[fy]=dma,DMA-channels,systeemynformaasje,DMA-kanalen +Keywords[ga]=dma,Cainéil-DMA,Eolas faoin Chóras +Keywords[gl]=dma,Canles de DMA,Canales DMA,Información do Sistema +Keywords[he]=ערוצי גישה ישירה לזיכרון,מידע מערכת,DMA,DMA-Channels,System Information +Keywords[hi]=डीएमए,डीएमए-चैनल्स,तंत्र जानकारी +Keywords[hr]=dma,DMA-Channels,System Information,DMA kanali,podaci o sustavu +Keywords[hu]=DMA,DMA-csatornák,DMA-csatorna,rendszerinformáció +Keywords[id]=dma,DMA-Channels,Informasi Sistem +Keywords[is]=DMA-brautir,DMA-rásir +Keywords[it]=DMA,canali DMA,informazioni sul sistema +Keywords[ja]=dma,DMA-チャンネル,システムの情報 +Keywords[ka]=dma,DMA-არხები,ინფორმაცია სისტემის შესახებ +Keywords[km]=dma,ផ្លូវ DMA,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lo]=dma,DMA-Channels,System InformationKeywords=dma,DMA-Channels,System Information +Keywords[lt]=dma,DMA-Kanalai,Sistemos Informacija +Keywords[lv]=dma,DMA-Kanāli,Sistēmas Informācija +Keywords[mk]=dma,DMA-Channels,System Information,DMA канали,канали,Информации за системот +Keywords[mn]=DMA,DMA-сувгууд,Системийн мэдээлэл,Мэдээлэл +Keywords[nb]=dma,DMA-kanaler,Systeminformasjon +Keywords[nds]=dms,DMA-Kanaals,Systeeminformatschoon +Keywords[ne]=dma, DMA-च्यानल, प्रणाली सूचना +Keywords[nl]=dma,DMA-channels,systeeminformatie,DMA-kanalen +Keywords[nn]=dma,DMA-kanalar,systeminformasjon +Keywords[nso]=dma,Dikanale tsa DMA,Tshedimoso ya System +Keywords[oc]=dma,Canals DMA,informacion dèu sistemo +Keywords[pa]=dma,DMA-Channels,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=dma,kanały DMA,informacja o systemie +Keywords[pt]=dma,canais dma,informações de sistema +Keywords[pt_BR]=DMA,canais DMA,canal DMA,informações de sistema +Keywords[ro]=dma,canale DMA,informații despre sistem +Keywords[rw]=dma,Imirongomakuru-DMA,Amakuru Sisitemu +Keywords[se]=dma,DMA-kanálat,vuogádatdiehtu +Keywords[sk]=dma,DMA-kanály,Systémové Informácie +Keywords[sl]=dma,kanali DMA,informacije o sistemu +Keywords[sr]=dma,DMA-Channels,System Information,канали,системске информације +Keywords[sr@Latn]=dma,DMA-Channels,System Information,kanali,sistemske informacije +Keywords[sv]=dma,DMA-kanaler,Systeminformation +Keywords[ta]=dma,DMA-வழிமுறைகள்,அமைப்பு தகவல் +Keywords[tg]=dma,Каналҳои-DMA,Иттилооти система +Keywords[th]=dma,ช่อง DMA,ข้อมูลระบบ +Keywords[tr]=dma,DMA-Kanalları,Sistem Hakkında Bilgi +Keywords[uk]=dma,канал ПДП, інформація,system-information,information +Keywords[uz]=dma,DMA kanallari,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=dma,DMA каналлари,Тизим ҳақида маълумот +Keywords[ven]=dma,Dzitshanele dza DMA,Mafhungo a sisitemu +Keywords[vi]=dma,Kênh DMA,Thông tin Hệ thống +Keywords[wa]=informåcion do sistinme,dma,Canås DMA +Keywords[xh]=dma,DMA-Imijelo,Ulwazi Lwendlela yokusebenza +Keywords[zh_CN]=dma,DMA-Channels,System Information,DMA 通道,系统信息 +Keywords[zh_TW]=dma,DMA-Channels,System Information,DMA通道,系統資訊 +Keywords[zu]=dma,Imigudu-DMA,Ulwazi lwesistimu + diff --git a/kcontrol/info/info.cpp b/kcontrol/info/info.cpp new file mode 100644 index 000000000..ea74ed9ac --- /dev/null +++ b/kcontrol/info/info.cpp @@ -0,0 +1,495 @@ +/* + Main Widget for showing system-dependent information. + (But all functions in THIS FILE should be system independent !) + + (C) 1998-2003 by Helge Deller + + ** main.cpp includes this file ! ** + + This source-file includes another system-dependet sourcefile called + info_.cpp + which should define one or more of the following defines to + indicate, that this information is really available. + + #define INFO_CPU_AVAILABLE + #define INFO_IRQ_AVAILABLE + #define INFO_DMA_AVAILABLE + #define INFO_PCI_AVAILABLE + #define INFO_IOPORTS_AVAILABLE + #define INFO_SOUND_AVAILABLE + #define INFO_DEVICES_AVAILABLE + #define INFO_SCSI_AVAILABLE + #define INFO_PARTITIONS_AVAILABLE + #define INFO_XSERVER_AVAILABLE + + right now, there is the problem, that also the .desktop-files should + depend on the systemname, so that only available .desktop-files will + be copied to kde/applnk/Settings/Information !! +*/ + +#include +#include +#include + +#include +#include +#include + +#include "info.h" /* include the forward declares... */ + +#include + +/* All Functions GetInfo_xyz() can set GetInfo_ErrorString, when a special + error-message should be shown to the user.... + If GetInfo_ErrorString is not modified in the function, the default string + DEFAULT_ERRORSTRING will be used... +*/ + +static QString *GetInfo_ErrorString; /* should always point to: + KInfoListWidget::ErrorString */ +static bool sorting_allowed; /* is sorting allowed by user ? */ + + + +#if defined(__linux__) +# define DEFAULT_ERRORSTRING QString::null /* i18n("Maybe the proc-filesystem is not enabled in Linux-Kernel.") */ +#elif defined(__hpux) +# define DEFAULT_ERRORSTRING QString::null +#else +#define DEFAULT_ERRORSTRING i18n("Maybe this system is not completely supported yet :-(") +#endif + + + + + +/* easier to read with such a define ! */ +#define I18N_MAX(txt,in,fm,maxw) \ + { int n = fm.width(txt=in); if (n>maxw) maxw=n; } + +#define PIXEL_ADD 20 // add x Pixel to multicolumns.. + +#define HEXDIGITS (sizeof(int)*8/4) /* 4 Bytes = 32 Bits = 8 Hex-Digits */ + +static const QString Value( int val, int numbers=1 ) +{ + return KGlobal::locale()->formatNumber(val, 0).rightJustify(numbers); +} + +static const QString HexStr(unsigned long val, int digits ) +{ + QString hexstr; + int i; + hexstr = QString::fromLatin1("0x%1").arg(val, digits, 16/*=HEX*/); + for (i=hexstr.length()-1; i>0; --i) + if (hexstr[i]==' ') + hexstr[i] = '0'; + return hexstr; +} + +static struct _event_table { + const char *name; + long value; +} event_table[] = { + { "KeyPressMask", KeyPressMask }, + { "KeyReleaseMask", KeyReleaseMask }, + { "ButtonPressMask", ButtonPressMask }, + { "ButtonReleaseMask", ButtonReleaseMask }, + { "EnterWindowMask", EnterWindowMask }, + { "LeaveWindowMask", LeaveWindowMask }, + { "PointerMotionMask", PointerMotionMask }, + { "PointerMotionHintMask", PointerMotionHintMask }, + { "Button1MotionMask", Button1MotionMask }, + { "Button2MotionMask", Button2MotionMask }, + { "Button3MotionMask", Button3MotionMask }, + { "Button4MotionMask", Button4MotionMask }, + { "Button5MotionMask", Button5MotionMask }, + { "ButtonMotionMask", ButtonMotionMask }, + { "KeymapStateMask", KeymapStateMask }, + { "ExposureMask", ExposureMask }, + { "VisibilityChangeMask", VisibilityChangeMask }, + { "StructureNotifyMask", StructureNotifyMask }, + { "ResizeRedirectMask", ResizeRedirectMask }, + { "SubstructureNotifyMask", SubstructureNotifyMask }, + { "SubstructureRedirectMask",SubstructureRedirectMask }, + { "FocusChangeMask", FocusChangeMask }, + { "PropertyChangeMask", PropertyChangeMask }, + { "ColormapChangeMask", ColormapChangeMask }, + { "OwnerGrabButtonMask", OwnerGrabButtonMask }, + { 0L, 0 }}; + + +static QListViewItem* XServer_fill_screen_info( QListViewItem *lBox, QListViewItem *last, + Display *dpy, int scr, int default_scr) +{ + unsigned width, height; + double xres, yres; + int i, + ndepths, + *depths; + Screen *s = ScreenOfDisplay(dpy,scr); /* opaque structure */ + QListViewItem *item; + + /* + * there are 2.54 centimeters to an inch; so there are 25.4 millimeters. + * + * dpi = N pixels / (M millimeters / (25.4 millimeters / 1 inch)) + * = N pixels / (M inch / 25.4) + * = N * 25.4 pixels / M inch + */ + + xres = ((double)(DisplayWidth(dpy,scr) *25.4)/DisplayWidthMM(dpy,scr) ); + yres = ((double)(DisplayHeight(dpy,scr)*25.4)/DisplayHeightMM(dpy,scr)); + + item = new QListViewItem(lBox,last, i18n("Screen # %1").arg((int)scr,-1), + (scr==default_scr) ? i18n("(Default Screen)") : QString::null ); + item->setExpandable(true); + if (scr==default_scr) + item->setOpen(true); + last = new QListViewItem(item, i18n("Dimensions"), + i18n("%1 x %2 Pixel (%3 x %4 mm)") + .arg( (int)DisplayWidth(dpy,scr) ) + .arg( (int)DisplayHeight(dpy,scr) ) + .arg( (int)DisplayWidthMM(dpy,scr) ) + .arg( (int)DisplayHeightMM (dpy,scr) )); + + last = new QListViewItem(item, last, i18n("Resolution"), + i18n("%1 x %2 dpi") + .arg( (int)(xres+0.5) ) + .arg( (int)(yres+0.5) )); + + ndepths = 0; + depths = 0; + depths = XListDepths (dpy, scr, &ndepths); + if (depths) { + QString txt; + + for (i = 0; i < ndepths; i++) { + txt = txt + Value(depths[i]); + if (i < ndepths - 1) + txt = txt + QString::fromLatin1(", "); + } + + last = new QListViewItem(item, last, i18n("Depths (%1)").arg(ndepths,-1), txt); + XFree((char *) depths); + } + + last = new QListViewItem(item, last, i18n("Root Window ID"), + HexStr((unsigned long)RootWindow(dpy,scr),HEXDIGITS)); + last = new QListViewItem(item, last, i18n("Depth of Root Window"), + (DisplayPlanes (dpy, scr) == 1) + ? i18n("%1 plane").arg(DisplayPlanes(dpy,scr)) /*singular*/ + : i18n("%1 planes").arg(DisplayPlanes(dpy,scr)));/*plural*/ + last = new QListViewItem(item, last, i18n("Number of Colormaps"), + i18n("minimum %1, maximum %2") + .arg((int)MinCmapsOfScreen(s)).arg((int)MaxCmapsOfScreen(s))); + last = new QListViewItem(item, last, i18n("Default Colormap"), + Value((int)DefaultColormap(dpy,scr))); + last = new QListViewItem(item, last, i18n("Default Number of Colormap Cells"), + Value((int)DisplayCells(dpy, scr))); + last = new QListViewItem(item, last, i18n("Preallocated Pixels"), + i18n("Black %1, White %2") + .arg(KGlobal::locale()->formatNumber(BlackPixel(dpy,scr), 0)) + .arg(KGlobal::locale()->formatNumber(WhitePixel(dpy,scr), 0))); + + QString YES(i18n("Yes")); + QString NO(i18n("No")); + last = new QListViewItem(item, last, i18n("Options"), + i18n("backing-store: %1, save-unders: %2") + .arg( (DoesBackingStore(s) == NotUseful) ? NO : + ((DoesBackingStore(s) == Always) ? YES : i18n("When mapped")) ) + .arg( DoesSaveUnders(s) ? YES : NO )); + + XQueryBestSize (dpy, CursorShape, RootWindow(dpy,scr), 65535, 65535, + &width, &height); + last = new QListViewItem(item, last, i18n("Largest Cursor"), + (width == 65535 && height == 65535) + ? i18n("unlimited") : QString::fromLatin1("%1 x %2").arg(width).arg(height)); + + last = new QListViewItem(item, last, i18n("Current Input Event Mask"), + HexStr((unsigned long)EventMaskOfScreen(s),HEXDIGITS)); + item = last; + struct _event_table *etp; + for (etp=event_table; etp->name; etp++) { + if (EventMaskOfScreen(s) & etp->value) + item = new QListViewItem(last, item, + i18n("Event = %1").arg(HexStr(etp->value,HEXDIGITS)), + etp->name ); + } + + return item; +} + +static const QString Order( int order ) +{ + if (order==LSBFirst) return i18n("LSBFirst"); else + if (order==MSBFirst) return i18n("MSBFirst"); else + return i18n("Unknown Order %1").arg(order); +} + +static const QString BitString( unsigned long n ) +{ + return i18n("1 Bit", "%n Bits", n); // singular & plural form of "%d Bit" +} + +static const QString ByteString( unsigned long n ) +{ + /* explanation in BR #52640 (http://bugs.kde.org/show_bug.cgi?id=52640) */ + if (n == 1) + return i18n("1 Byte"); // singular form: "1 Byte" (yes, it's "1", not "%1"!) + + return i18n("%1 Bytes") // plural form: "%1 Bytes" + .arg(KGlobal::locale()->formatNumber(n,0)); +} + +static bool GetInfo_XServer_Generic( QListView *lBox ) +{ + /* Many parts of this source are taken from the X11-program "xdpyinfo" */ + + int i,n; + long req_size; + + Display *dpy; + XPixmapFormatValues *pmf; + + QString str,txt; + QListViewItem *last, *item, *next; + + dpy = XOpenDisplay(0); + if (!dpy) + return false; + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + sorting_allowed = false; + + next = new QListViewItem(lBox, i18n("Server Information")); + next->setPixmap(0, SmallIcon("kcmx")); + next->setOpen(true); + next->setSelectable(false); + next->setExpandable(false); + + last = new QListViewItem(next, i18n("Name of the Display"), + DisplayString(dpy)); + + last = new QListViewItem(next, last, i18n("Vendor String"), QString::fromLatin1(ServerVendor(dpy))); + last = new QListViewItem(next, last, i18n("Vendor Release Number"), + Value((int)VendorRelease(dpy))); + + last = new QListViewItem(next, last, i18n("Version Number"), + QString::fromLatin1("%1.%2").arg((int)ProtocolVersion(dpy)) + .arg((int)ProtocolRevision(dpy))); + + last = item = new QListViewItem(next, last, i18n("Available Screens")); + last->setOpen(true); + last->setExpandable(true); + for (i=0; isetOpen(true); + } + + last = new QListViewItem( next, last, i18n("Supported Extensions") ); + item = last; + + int extCount; + char **extensions = XListExtensions( dpy, &extCount ); + for ( i = 0; i < extCount; i++ ) { + item = new QListViewItem( last, item, QString::fromLatin1( extensions[i] ) ); + } + XFreeExtensionList( extensions ); + + pmf = XListPixmapFormats(dpy, &n); + last = item = new QListViewItem(next, last, i18n("Supported Pixmap Formats")); + if (pmf) { + last->setExpandable(true); + for (i=0; isetExpandable(true); + item = new QListViewItem(last, item, i18n("Unit"), + Value(BitmapUnit(dpy)) ); + item = new QListViewItem(last, item, i18n("Order"), + Order(BitmapBitOrder(dpy))); + item = new QListViewItem(last, item, i18n("Padding"), + Value(BitmapPad(dpy))); + + last = new QListViewItem(next, last, i18n("Image Byte Order"), + Order(ImageByteOrder(dpy))); + + XCloseDisplay (dpy); + return true; +} + + + +/* +*************************************************************************** +*************************************************************************** +*************************************************************************** +*/ + + + +void KInfoListWidget::load() +{ + bool ok = false; + + lBox->clear(); + + /* Delete the user-visible ErrorString, before calling the + retrieve-function. If the function wants the widget to show + another string, then it change *GetInfo_ErrorString ! */ + ErrorString = i18n("No information available about %1.").arg(title) + + QString::fromLatin1("\n\n") + DEFAULT_ERRORSTRING; + GetInfo_ErrorString = &ErrorString; /* save the address of ErrorString */ + + sorting_allowed = true; /* the functions may set that */ + lBox->setSorting(-1); /* No Sorting per default */ + + if (getlistbox) + ok = (*getlistbox)(lBox); /* retrieve the information */ + + if (lBox->header()->count()<=1) + lBox->addColumn(title); /* set default title */ + + /* is the user allowed to use sorting ? */ + lBox->header()->setClickEnabled(sorting_allowed); + lBox->header()->setFont(KGlobalSettings::generalFont()); + lBox->setShowSortIndicator(sorting_allowed); + + if (ok) + { + widgetStack->raiseWidget(lBox); + } + else + { + NoInfoText->setText(ErrorString); + widgetStack->raiseWidget(NoInfoText); + } + + emit changed(false); +} + + +QString KInfoListWidget::quickHelp() const +{ + return i18n("

System Information

" + " All the information modules return information about a certain" + " aspect of your computer hardware or your operating system." + " Not all modules are available on all hardware architectures" + " and/or operating systems." ); +} + + +KInfoListWidget::KInfoListWidget(const QString &_title, QWidget *parent, const char *name, + bool _getlistbox(QListView *lbox)) + : KCModule(parent, name), + title(_title) +{ + KAboutData *about = + new KAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("KDE Panel System Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1998 - 2002 Helge Deller")); + + about->addAuthor("Helge Deller", 0, "deller@kde.org"); + setAboutData( about ); + + setButtons(KCModule::Help); + getlistbox = _getlistbox; + GetInfo_ErrorString = 0; + QHBoxLayout *layout = new QHBoxLayout(this, 0, KDialog::spacingHint()); + widgetStack = new QWidgetStack(this); + layout->addWidget(widgetStack); + lBox = new QListView(widgetStack); + widgetStack->addWidget(lBox, 0); + lBox->setMinimumSize(200,120); + lBox->setFont(KGlobalSettings::generalFont()); /* default font */ + lBox->setAllColumnsShowFocus(true); + QWhatsThis::add( lBox, i18n( "This list displays system information on the selected category." ) ); + NoInfoText = new QLabel(widgetStack); + widgetStack->addWidget(NoInfoText, 1); + NoInfoText->setAlignment(AlignCenter | WordBreak); + widgetStack->raiseWidget(NoInfoText); + load(); +} + + + +/* Helper-function to read output from an external program */ +static int GetInfo_ReadfromPipe( QListView *lBox, const char *FileName, bool WithEmptyLines = true ) +{ + FILE *pipe; + QListViewItem* olditem = 0L; + QString s; + + if ((pipe = popen(FileName, "r")) == NULL) { + pclose(pipe); + return 0; + } + + QTextStream t(pipe, IO_ReadOnly); + + while (!t.atEnd()) { + s = t.readLine(); + if (!WithEmptyLines && s.length()==0) + continue; + olditem = new QListViewItem(lBox, olditem, s); + } + + pclose(pipe); + + return (lBox->childCount()); +} + +/* +*************************************************************************** +** Include system-specific code ** +*************************************************************************** +*/ + +#ifdef __linux__ +#include "info_linux.cpp" +#elif defined(sgi) && sgi +#include "info_sgi.cpp" +#elif defined(__FreeBSD__) || defined (__DragonFly__) +#include "info_fbsd.cpp" +#elif __hpux +#include "info_hpux.cpp" +#elif __NetBSD__ +#include "info_netbsd.cpp" +#elif __OpenBSD__ +#include "info_openbsd.cpp" +#elif defined(__svr4__) && defined(sun) +#include "info_solaris.cpp" +#elif __svr4__ +#include "info_svr4.cpp" +#elif _AIX +#include "info_aix.cpp" +#elif defined(__APPLE__) +#include "info_osx.cpp" +#else +#include "info_generic.cpp" /* Default for unsupportet systems.... */ +#endif + +/* +*************************************************************************** +** End of: Include system-specific code ** +*************************************************************************** +*/ diff --git a/kcontrol/info/info.h b/kcontrol/info/info.h new file mode 100644 index 000000000..c55c1b2a5 --- /dev/null +++ b/kcontrol/info/info.h @@ -0,0 +1,53 @@ +#ifndef _INFO_H_ +#define _INFO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "config.h" + +/* function call-back-prototypes... */ + +bool GetInfo_CPU( QListView *lBox ); +bool GetInfo_IRQ( QListView *lBox ); +bool GetInfo_DMA( QListView *lBox ); +bool GetInfo_PCI( QListView *lBox ); +bool GetInfo_IO_Ports( QListView *lBox ); +bool GetInfo_Sound( QListView *lBox ); +bool GetInfo_Devices( QListView *lBox ); +bool GetInfo_SCSI( QListView *lBox ); +bool GetInfo_Partitions( QListView *lBox ); +bool GetInfo_XServer_and_Video( QListView *lBox ); +bool GetInfo_CD_ROM( QListView *lBox ); /* New CD-ROM Info */ +extern bool GetInfo_OpenGL( QListView *lBox ); + +class KInfoListWidget : public KCModule +{ +public: + KInfoListWidget(const QString &_title, QWidget *parent, const char *name=0, bool _getlistbox (QListView *)=0); + + virtual void load(); + virtual QString quickHelp() const; + +private: + QListView *lBox; + bool (*getlistbox) (QListView *); + QString title; + + QLabel *NoInfoText; + QString ErrorString; + QWidgetStack *widgetStack; +}; + +#endif diff --git a/kcontrol/info/info_aix.cpp b/kcontrol/info/info_aix.cpp new file mode 100644 index 000000000..8aaee4f6d --- /dev/null +++ b/kcontrol/info/info_aix.cpp @@ -0,0 +1,486 @@ +/* + * info_aix.cpp + * + * Reza Arbab + * + * GetInfo_Partitions() and its helpers (get_fs_usage, fs_adjust_blocks) + * taken from info_hpux.cpp. + * + */ + +#include +#define class _class +#include +#include +#include +#undef class +#include +#include +#include +#include + +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PCI_AVAILABLE + +#include +#include +#include +#include +#include + +#define INFO_PARTITIONS_AVAILABLE + +#include +#include + +#define INFO_CPU_AVAILABLE + +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_XSERVER_AVAILABLE + +char * +device_description(struct CuDv *cudv) +{ + char *desc = NULL; + struct PdDv *pddv = cudv->PdDvLn; /* link to Predefined Devices database */ + nl_catd cat; + + cat = catopen("/usr/lib/methods/devices.cat", NL_CAT_LOCALE); + if ((int)cat == -1) + return NULL; + + desc = strdup( catgets(cat, pddv->setno, pddv->msgno, "N/A") ); + catclose(cat); + + return desc; +} + +bool +list_devices(QListView *lBox, char *criteria) +{ + struct CuDv *cudv; /* Customized Devices */ + struct listinfo info; + int i; + char *cudv_desc; + QString cudv_status; + QListViewItem *lastitem = NULL; + + lBox->addColumn(i18n("Name")); + lBox->addColumn(i18n("Status")); + lBox->addColumn(i18n("Location")); + lBox->addColumn(i18n("Description")); + + if (odm_initialize() == -1) + { + kdError(0) << "odm_initialize() failed: odmerrno = " << odmerrno << endl; + return(false); + } + + cudv = (struct CuDv *) odm_get_list(CuDv_CLASS, criteria, &info, 100, 2); + + if ((int)cudv == -1) + { + odm_terminate(); + kdError(0) << "odm_get_list() failed: odmerrno = " << odmerrno << endl; + return(false); + } + else if (!cudv) /* empty list */ + { + odm_terminate(); + return(true); + } + + for (i=0; iaddColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + if (uname(&info) == -1) + { + kdError(0) << "uname() failed: errno = " << errno << endl; + return false; + } + + strncat(model_ID, info.machine+8, 2); /* we want the ninth and tenth digits */ + strncat(cpu_ID, info.machine+2, 6); + + if (strcmp(model_ID, "4C") == 0) /* need to use a different model_ID and model table */ + { + if (odm_initialize() == -1) + kdError(0) << "odm_initialize() failed: odmerrno = " << odmerrno << endl; + else + { + struct CuAt cuat; /* Customized Device attribute */ + + /* equivalent to uname -M */ + if ( odm_get_first(CuAt_CLASS, (char *)"name='sys0' and attribute='modelname'", &cuat) ) + { + strcpy(model_ID, cuat.value); + table = _4C_models; + } + + odm_terminate(); + } + } + + lastitem = new QListViewItem(lBox, lastitem, QString("CPU ID"), QString(cpu_ID)); + lastitem = new QListViewItem(lBox, lastitem, QString("Node"), QString(info.nodename)); + lastitem = new QListViewItem(lBox, lastitem, QString("OS"), QString(info.sysname) + + QString(" ") + QString(info.version) + QString(".") + QString(info.release)); + + for (i=0; *(table[i].model_ID); i++) + if (strcmp(model_ID, table[i].model_ID) == 0) + { + lastitem = new QListViewItem(lBox, lastitem, QString("Machine Type"), QString(table[i].machine_type)); + lastitem = new QListViewItem(lBox, lastitem, QString("Architecture"), QString(chip_name[table[i].architecture])); + lastitem = new QListViewItem(lBox, lastitem, QString("Speed"), QString(table[i].processor_speed) + QString(" Mhz")); + break; + } + + return(true); +} + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool +GetInfo_PCI( QListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*/pci/*'"); +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView * ) +{ + return false; +} + +bool +GetInfo_Devices( QListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*'"); +} + +bool +GetInfo_SCSI( QListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*/scsi/*'"); +} + +/* Parts taken from fsusage.c from the Midnight Commander (mc) + + Copyright (C) 1991, 1992 Free Software Foundation, In + + Return the number of TOSIZE-byte blocks used by + BLOCKS FROMSIZE-byte blocks, rounding away from zero. + TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */ + +static long fs_adjust_blocks(long blocks, int fromsize, int tosize) +{ + if (tosize <= 0) + abort (); + if (fromsize <= 0) + return -1; + + if (fromsize == tosize) /* E.g., from 512 to 512. */ + return blocks; + else if (fromsize > tosize) /* E.g., from 2048 to 512. */ + return blocks * (fromsize / tosize); + else /* E.g., from 256 to 512. */ + return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize); +} + +/* Fill in the fields of FSP with information about space usage for + the filesystem on which PATH resides. + Return 0 if successful, -1 if not. */ + +#define CONVERT_BLOCKS(b) fs_adjust_blocks ((b), fsd.f_bsize, 512) + +static int get_fs_usage (char *path, long *l_total, long *l_avail) +{ struct statfs fsd; /* 4.3BSD, SunOS 4, HP-UX, AIX. */ + unsigned long fsu_blocks,fsu_bfree,fsu_bavail; + + *l_total = *l_avail = 0; + if (statfs (path, &fsd) < 0) + return -1; + + fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks); + fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree); + fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail); + + *l_avail = getuid () ? fsu_bavail/2 : fsu_bfree/2; + *l_total = fsu_blocks/2; + + return 0; +} + + +// Some Ideas taken from garbazo from his source in info_fbsd.cpp + +bool +GetInfo_Partitions ( QListView *lbox ) +{ + #define NUMCOLS 5 + QString Title[NUMCOLS]; + int n; + + struct fstab *fstab_ent; + struct statvfs svfs; + long total,avail; + QString str; + QString MB(i18n("MB")+ " "); // International Text for MB=Mega-Byte + + if (setfsent() != 1) // Try to open fstab + return false; + + Title[0] = i18n("Device"); + Title[1] = i18n("Mount Point"); + Title[2] = i18n("FS Type"); + Title[3] = i18n("Total Size"); + Title[4] = i18n("Free Size"); + + for (n=0; naddColumn(Title[n] ); + } + + while ((fstab_ent=getfsent())!=NULL) { + /* fstab_ent->fs_type holds only "rw","xx","ro"... */ + memset(&svfs,0,sizeof(svfs)); + statvfs(fstab_ent->fs_file,&svfs); + get_fs_usage(fstab_ent->fs_file, &total, &avail); + + if (!strcmp(fstab_ent->fs_type,FSTAB_XX)) // valid drive ? + svfs.f_basetype[0] = 0; + + if(svfs.f_basetype[0]) { + new QListViewItem(lbox, QString(fstab_ent->fs_spec), + QString(fstab_ent->fs_file) + QString(" "), + (svfs.f_basetype[0] ? QString(svfs.f_basetype) : i18n("n/a")), + Value((total+512)/1024,6) + MB, + Value((avail+512)/1024,6) + MB); + } + else { + new QListViewItem(lbox, QString(fstab_ent->fs_spec), + QString(fstab_ent->fs_file) + QString(" "), + (svfs.f_basetype[0] ? QString(svfs.f_basetype) : i18n("n/a"))); + } + + } + endfsent(); + + return true; +} diff --git a/kcontrol/info/info_fbsd.cpp b/kcontrol/info/info_fbsd.cpp new file mode 100644 index 000000000..6e936801a --- /dev/null +++ b/kcontrol/info/info_fbsd.cpp @@ -0,0 +1,457 @@ +/* + * info_fbsd.cpp is part of the KDE program kcminfo. This displays + * various information about the system (hopefully a FreeBSD system) + * it's running on. + * + * All of the devinfo bits were blatantly stolen from the devinfo utility + * provided with FreeBSD 5.0 (and later). No gross hacks were harmed + * during the creation of info_fbsd.cpp. Thanks Mike. + */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include +#include + +//#if __FreeBSD_version >= 500042 +// #define we should have devinfo.h +//#else +// #define we probably don't have devinfo.h +//#endif + +#ifdef HAVE_DEVINFO_H + extern "C" { + #include + } +#endif + +#include +#include +#include + +#include +#include +#include +#include +#include + +class Device { +public: + Device (QString n=QString::null, QString d=QString::null) + {name=n; description=d;} + QString name, description; +}; + +void ProcessChildren(QString name); +QString GetController(const QString &line); +Device *GetDevice(const QString &line); + +#ifdef HAVE_DEVINFO_H +extern "C" { + int print_irq(struct devinfo_rman *rman, void *arg); + int print_dma(struct devinfo_rman *rman, void *arg); + int print_ioports(struct devinfo_rman *rman, void *arg); + int print_resource(struct devinfo_res *res, void *arg); +} +#endif + +bool GetInfo_CPU (QListView *lBox) +{ + // Modified 13 July 2000 for SMP by Brad Hughes - bhughes@trolltech.com + + int ncpu; + size_t len; + + len = sizeof(ncpu); + sysctlbyname("hw.ncpu", &ncpu, &len, NULL, 0); + + QString cpustring; + for (int i = ncpu; i > 0; i--) { + /* Stuff for sysctl */ + char *buf; + int i_buf; + + // get the processor model + sysctlbyname("hw.model", NULL, &len, NULL, 0); + buf = new char[len]; + sysctlbyname("hw.model", buf, &len, NULL, 0); + + // get the TSC speed if we can + len = sizeof(i_buf); + if (sysctlbyname("machdep.tsc_freq", &i_buf, &len, NULL, 0) != -1) { + cpustring = i18n("CPU %1: %2, %3 MHz").arg(i).arg(buf).arg(i_buf/1000000); + } else { + cpustring = i18n("CPU %1: %2, unknown speed").arg(i).arg(buf); + } + + /* Put everything in the listbox */ + new QListViewItem(lBox, cpustring); + + /* Clean up after ourselves, this time I mean it ;-) */ + delete buf; + } + + return true; +} + +bool GetInfo_IRQ (QListView *lbox) +{ +#ifdef HAVE_DEVINFO_H + /* systat lists the interrupts assigned to devices as well as how many were + generated. Parsing its output however is about as fun as a sandpaper + enema. The best idea would probably be to rip out the guts of systat. + Too bad it's not very well commented */ + /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) + return false; + devinfo_foreach_rman(print_irq, lbox); + return true; +#else + return false; +#endif +} + +bool GetInfo_DMA (QListView *lbox) +{ +#ifdef HAVE_DEVINFO_H + /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) + return false; + devinfo_foreach_rman(print_dma, lbox); + return true; +#else + return false; +#endif +} + +bool GetInfo_IO_Ports (QListView *lbox) +{ +#ifdef HAVE_DEVINFO_H + /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) + return false; + devinfo_foreach_rman(print_ioports, lbox); + return true; +#else + return false; +#endif +} + +bool GetInfo_Sound (QListView *lbox) +{ + QFile *sndstat = new QFile("/dev/sndstat"); + QTextStream *t; + QString s; + QListViewItem *olditem = 0; + + if (!sndstat->exists() || !sndstat->open(IO_ReadOnly)) { + + s = i18n("Your sound system could not be queried. /dev/sndstat does not exist or is not readable."); + olditem = new QListViewItem(lbox, olditem, s); + } else { + t = new QTextStream(sndstat); + while (!(s=t->readLine()).isNull()) { + olditem = new QListViewItem(lbox, olditem, s); + } + + delete t; + sndstat->close(); + } + + delete sndstat; + return true; +} + +bool GetInfo_SCSI (QListView *lbox) +{ + FILE *pipe; + QFile *camcontrol = new QFile("/sbin/camcontrol"); + QTextStream *t; + QString s; + QListViewItem *olditem = 0; + + if (!camcontrol->exists()) { + s = i18n ("SCSI subsystem could not be queried: /sbin/camcontrol could not be found"); + olditem = new QListViewItem(lbox, olditem, s); + } else if ((pipe = popen("/sbin/camcontrol devlist 2>&1", "r")) == NULL) { + s = i18n ("SCSI subsystem could not be queried: /sbin/camcontrol could not be executed"); + olditem = new QListViewItem(lbox, olditem, s); + } else { + + /* This prints out a list of all the scsi devies, perhaps eventually we could + parse it as opposed to schlepping it into a listbox */ + + t = new QTextStream(pipe, IO_ReadOnly); + + while (true) { + s = t->readLine(); + if ( s.isEmpty() ) + break; + olditem = new QListViewItem(lbox, olditem, s); + } + + delete t; + pclose(pipe); + } + + delete camcontrol; + + if (!lbox->childCount()) + return false; + + return true; +} + +bool GetInfo_PCI (QListView *lbox) +{ + FILE *pipe; + QFile *pcicontrol; + QString s, cmd; + QListViewItem *olditem = 0; + + pcicontrol = new QFile("/usr/sbin/pciconf"); + + if (!pcicontrol->exists()) { + delete pcicontrol; + pcicontrol = new QFile("/usr/X11R6/bin/scanpci"); + if (!pcicontrol->exists()) { + delete pcicontrol; + pcicontrol = new QFile("/usr/X11R6/bin/pcitweak"); + if (!pcicontrol->exists()) { + QString s; + s = i18n("Could not find any programs with which to query your system's PCI information"); + (void) new QListViewItem(lbox, 0, s); + delete pcicontrol; + return true; + } else { + cmd = "/usr/X11R6/bin/pcitweak -l 2>&1"; + } + } else { + cmd = "/usr/X11R6/bin/scanpci"; + } + } else { + cmd = "/usr/sbin/pciconf -l -v 2>&1"; + } + delete pcicontrol; + + if ((pipe = popen(cmd.latin1(), "r")) == NULL) { + s = i18n ("PCI subsystem could not be queried: %1 could not be executed").arg(cmd); + olditem = new QListViewItem(lbox, olditem, s); + } else { + + /* This prints out a list of all the pci devies, perhaps eventually we could + parse it as opposed to schlepping it into a listbox */ + + pclose(pipe); + GetInfo_ReadfromPipe(lbox, cmd.latin1(), true); + } + + if (!lbox->childCount()) { + s = i18n("The PCI subsystem could not be queried, this may need root privileges."); + olditem = new QListViewItem(lbox, olditem, s); + return true; + } + + return true; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + struct fstab *fstab_ent; + + if (setfsent() != 1) /* Try to open fstab */ { + int s_err = errno; + QString s; + s = i18n("Could not check filesystem info: "); + s += strerror(s_err); + (void)new QListViewItem(lbox, 0, s); + } else { + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Mount Options")); + + while ((fstab_ent=getfsent())!=NULL) { + new QListViewItem(lbox, fstab_ent->fs_spec, + fstab_ent->fs_file, fstab_ent->fs_vfstype, + fstab_ent->fs_mntops); + } + + lbox->setSorting(0); + lbox->header()->setClickEnabled(true); + + endfsent(); /* Close fstab */ + } + return true; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} + +bool GetInfo_Devices (QListView *lbox) +{ + QFile *f = new QFile("/var/run/dmesg.boot"); + if (f->open(IO_ReadOnly)) { + QTextStream qts(f); + QDict lv_items; + Device *dev; + QString line, controller; + lbox->setRootIsDecorated(true); + lbox->addColumn("Device"); + lbox->addColumn("Description"); + while ( !(line=qts.readLine()).isNull() ) { + controller = GetController(line); + if (controller.isNull()) + continue; + dev=GetDevice(line); + if (!dev) + continue; + // Ewww assuing motherboard is the only toplevel controller is rather gross + if (controller == "motherboard") { + if (!lv_items[dev->name]) { + lv_items.insert(dev->name, new QListViewItem(lbox, dev->name, dev->description) ); + } + } else { + QListViewItem *parent=lv_items[controller]; + if (parent && !lv_items[dev->name]) { + lv_items.insert(dev->name, new QListViewItem(parent, dev->name, dev->description) ); + } + } + } + return true; + } + return false; +} + +QString GetController(const QString &line) +{ + if ( ( (line.startsWith("ad")) || (line.startsWith("afd")) || (line.startsWith("acd")) ) && (line.find(":") < 6) ) { + QString controller = line; + controller.remove(0, controller.find(" at ")+4); + if (controller.find("-slave") != -1) { + controller.remove(controller.find("-slave"), controller.length()); + } else if (controller.find("-master") != -1) { + controller.remove(controller.find("-master"), controller.length()); + } else + controller=QString::null; + if (!controller.isNull()) + return controller; + } + if (line.find(" on ") != -1) { + QString controller; + controller = line; + controller.remove(0, controller.find(" on ")+4); + if (controller.find(" ") != -1) + controller.remove(controller.find(" "), controller.length()); + return controller; + } + return QString::null; +} + +Device *GetDevice(const QString &line) +{ + Device *dev; + int colon = line.find(":"); + if (colon == -1) + return 0; + dev = new Device; + dev->name = line.mid(0, colon); + dev->description = line.mid(line.find("<")+1, line.length()); + dev->description.remove(dev->description.find(">"), dev->description.length()); + return dev; +} + +#ifdef HAVE_DEVINFO_H + +int print_irq(struct devinfo_rman *rman, void *arg) +{ + QListView *lbox = (QListView *)arg; + if (strcmp(rman->dm_desc, "Interrupt request lines")==0) { + (void)new QListViewItem(lbox, 0, rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_dma(struct devinfo_rman *rman, void *arg) +{ + QListView *lbox = (QListView *)arg; + if (strcmp(rman->dm_desc, "DMA request lines")==0) { + (void)new QListViewItem(lbox, lbox->lastItem(), rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_ioports(struct devinfo_rman *rman, void *arg) +{ + QListView *lbox = (QListView *)arg; + + if (strcmp(rman->dm_desc, "I/O ports")==0) { + (void)new QListViewItem(lbox, lbox->lastItem(), rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + else if (strcmp(rman->dm_desc, "I/O memory addresses")==0) { + (void)new QListViewItem(lbox, lbox->lastItem(), rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_resource(struct devinfo_res *res, void *arg) +{ + struct devinfo_dev *dev; + struct devinfo_rman *rman; + int hexmode; + + QListView *lbox; + + lbox = (QListView *)arg; + + QString s, tmp; + + rman = devinfo_handle_to_rman(res->dr_rman); + hexmode = (rman->dm_size > 100) || (rman->dm_size == 0); + tmp.sprintf(hexmode ? "0x%lx" : "%lu", res->dr_start); + s += tmp; + if (res->dr_size > 1) { + tmp.sprintf(hexmode ? "-0x%lx" : "-%lu", + res->dr_start + res->dr_size - 1); + s += tmp; + } + + dev = devinfo_handle_to_device(res->dr_device); + if ((dev != NULL) && (dev->dd_name[0] != 0)) { + tmp.sprintf(" (%s)", dev->dd_name); + } else { + tmp.sprintf(" ----"); + } + s += tmp; + + (void)new QListViewItem(lbox, lbox->lastItem(), s); + return(0); +} + +#endif diff --git a/kcontrol/info/info_generic.cpp b/kcontrol/info/info_generic.cpp new file mode 100644 index 000000000..5ef80dcca --- /dev/null +++ b/kcontrol/info/info_generic.cpp @@ -0,0 +1,88 @@ +/* + + 1998 by Helge Deller (deller@gmx.de) + free source under GPL + + !!!!! this file will be included by info.cpp !!!!! +*/ + + +// Default for unsupportet systems + +// the following defines are not really ok here, but maybe we should show, what +// Information could be displayed here.... + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE +#define INFO_CD_ROM_AVAILABLE + + +/* all following functions should return TRUE, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + + +bool GetInfo_CPU( QListView * ) +{ + return false; +} + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView * ) +{ + return false; +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView * ) +{ + return false; +} + +bool GetInfo_Devices( QListView * ) +{ + return false; +} + +bool GetInfo_SCSI( QListView * ) +{ + return false; +} + +bool GetInfo_Partitions( QListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + +/* Generic GetInfo? ~Jahshan */ +bool GetInfo_CD_ROM(QListView * lBox) +{ + return false; +} diff --git a/kcontrol/info/info_hpux.cpp b/kcontrol/info/info_hpux.cpp new file mode 100644 index 000000000..dc0684ab5 --- /dev/null +++ b/kcontrol/info/info_hpux.cpp @@ -0,0 +1,785 @@ + +/* + !!!!! this file will be included by info.cpp !!!!! + + Mostly written 1998-1999 by Helge Deller (deller@gmx.de), + with some pieces of code from Aubert Pierre. + + Last modified: done: + 1999-06-21 added more models to the lookup-table (deller) + 1999-06-18 added support for 64-Bit HP-UX in CPU-detection(deller) + 1999-05-04 added audio(alib)-support (deller) + 1999-04-27 [tested with HP-UX 10.20 (HP9000/715/64-EISA)] + added support for nearly all categories + (means: not finished!) + 1998-11-01 first, nearly empty version (deller) + with a little source for CPU from Aubert Pierre +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define INFO_CPU_AVAILABLE +# define INFO_CPU_MODEL "/bin/model" // as pipe !! + +#define INFO_IRQ_AVAILABLE + +#define INFO_DMA_AVAILABLE + +#define INFO_PCI_AVAILABLE +# define INFO_PCI "" // Please, who know it ???? +# define INFO_PCI_EISA "/etc/eisa/system.sci" // File ! + +#define INFO_IOPORTS_AVAILABLE +# define INFO_IOPORTS_1 "/etc/dmesg" // as pipe ! +# define INFO_IOPORTS_2 "/usr/sbin/dmesg" // as pipe ! + +#define INFO_SOUND_AVAILABLE + +#define INFO_DEVICES_AVAILABLE +# define INFO_DEVICES "/etc/ioscan" // as pipe !! + +#define INFO_SCSI_AVAILABLE + +#define INFO_PARTITIONS_AVAILABLE +# define INFO_PARTITIONS_1 FSTAB // = "/etc/fstab" (in fstab.h) +# define INFO_PARTITIONS_2 "/etc/checklist" + +#define INFO_XSERVER_AVAILABLE + + + +/* The following table is from an HP-UX 10.20 System + build out of the files + "/usr/lib/sched.models" + or + "/opt/langtools/lib/sched.models" + If you have more entries, then please add them or send them to me! +*/ + +// entries for PA_REVISION[] +enum V_ENTRIES + { V_1x0, + V_1x1, V_1x1a, V_1x1b, V_1x1c, V_1x1d, V_1x1e, + V_2x0, + V_LAST }; + +static const char PA_REVISION[V_LAST][7] + = { "1.0", + "1.1", "1.1a", "1.1b", "1.1c", "1.1d", "1.1e", + "2.0" }; + +// entries for PA_NAME[] +enum PA_ENTRIES + { PA7000, + PA7100, PA7100LC, PA7200, PA7300, + PA8000, PA8200, PA8500, + PARISC_PA_LAST }; + +static const char PA_NAME[PARISC_PA_LAST][11] + = { "PA7000", + "PA7100", "PA7100LC", "PA7200", "PA7300", + "PA8000", "PA8200", "PA8500" }; + +struct _type_LOOKUPTABLE { + char Name[8]; + unsigned short parisc_rev; // = enum V_ENTRIES + unsigned short parisc_name; // = enum PA_ENTRIES +}; + + +static const struct _type_LOOKUPTABLE PA_LOOKUPTABLE[] = { +/* VERSION A.00.07 + (there seems to exist several different files with same version-number !)*/ +{ "600" ,V_1x0 ,PA7000 }, +{ "635" ,V_1x0 ,PA7000 }, +{ "645" ,V_1x0 ,PA7000 }, +{ "700" ,V_1x1 ,PA7000 }, +{ "705" ,V_1x1a ,PA7000 }, +{ "710" ,V_1x1a ,PA7000 }, +{ "712" ,V_1x1c ,PA7100LC }, +{ "715" ,V_1x1c ,PA7100LC }, +{ "720" ,V_1x1a ,PA7000 }, +{ "722" ,V_1x1c ,PA7100LC }, +{ "725" ,V_1x1c ,PA7100LC }, +{ "728" ,V_1x1d ,PA7200 }, +{ "730" ,V_1x1a ,PA7000 }, +{ "735" ,V_1x1b ,PA7100 }, +{ "742" ,V_1x1b ,PA7100 }, +{ "743" ,V_1x1b ,PA7100 }, // or a 1.1c,PA7100LC !! +{ "744" ,V_1x1e ,PA7300 }, +{ "745" ,V_1x1b ,PA7100 }, +{ "747" ,V_1x1b ,PA7100 }, +{ "750" ,V_1x1a ,PA7000 }, +{ "755" ,V_1x1b ,PA7100 }, +{ "770" ,V_1x1d ,PA7200 }, +{ "777" ,V_1x1d ,PA7200 }, +{ "778" ,V_1x1e ,PA7300 }, +{ "779" ,V_1x1e ,PA7300 }, +{ "780" ,V_2x0 ,PA8000 }, +{ "781" ,V_2x0 ,PA8000 }, +{ "782" ,V_2x0 ,PA8200 }, +{ "783" ,V_2x0 ,PA8500 }, +{ "785" ,V_2x0 ,PA8500 }, +{ "800" ,V_1x0 ,PA7000 }, // and one with: 2.0 / PA8000 +{ "801" ,V_1x1c ,PA7100LC }, +{ "802" ,V_2x0 ,PA8000 }, +{ "803" ,V_1x1e ,PA7300 }, +{ "804" ,V_2x0 ,PA8000 }, +{ "806" ,V_1x1c ,PA7100LC }, +{ "807" ,V_1x1a ,PA7000 }, +{ "808" ,V_1x0 ,PA7000 }, +{ "809" ,V_1x1d ,PA7200 }, +{ "810" ,V_2x0 ,PA8000 }, +{ "811" ,V_1x1c ,PA7100LC }, +{ "813" ,V_1x1e ,PA7300 }, +{ "815" ,V_1x0 ,PA7000 }, +{ "816" ,V_1x1c ,PA7100LC }, +{ "817" ,V_1x1a ,PA7000 }, +{ "819" ,V_1x1d ,PA7200 }, +{ "820" ,V_2x0 ,PA8000 }, +{ "821" ,V_1x1d ,PA7200 }, +{ "822" ,V_1x0 ,PA7000 }, +{ "825" ,V_1x0 ,PA7000 }, +{ "826" ,V_1x1c ,PA7100LC }, +{ "827" ,V_1x1a ,PA7000 }, +{ "829" ,V_1x1d ,PA7200 }, +{ "831" ,V_1x1d ,PA7200 }, +{ "832" ,V_1x0 ,PA7000 }, +{ "834" ,V_1x0 ,PA7000 }, +{ "835" ,V_1x0 ,PA7000 }, +{ "837" ,V_1x1a ,PA7000 }, +{ "839" ,V_1x1d ,PA7200 }, +{ "840" ,V_1x0 ,PA7000 }, +{ "841" ,V_1x1d ,PA7200 }, +{ "842" ,V_1x0 ,PA7000 }, +{ "845" ,V_1x0 ,PA7000 }, +{ "847" ,V_1x1a ,PA7000 }, +{ "849" ,V_1x1d ,PA7200 }, +{ "850" ,V_1x0 ,PA7000 }, +{ "851" ,V_1x1d ,PA7200 }, +{ "852" ,V_1x0 ,PA7000 }, +{ "855" ,V_1x0 ,PA7000 }, +{ "856" ,V_1x1c ,PA7100LC }, +{ "857" ,V_1x1a ,PA7000 }, +{ "859" ,V_1x1d ,PA7200 }, +{ "860" ,V_1x0 ,PA7000 }, +{ "861" ,V_2x0 ,PA8000 }, +{ "865" ,V_1x0 ,PA7000 }, +{ "869" ,V_1x1d ,PA7200 }, +{ "870" ,V_1x0 ,PA7000 }, +{ "871" ,V_2x0 ,PA8000 }, +{ "877" ,V_1x1a ,PA7000 }, +{ "879" ,V_2x0 ,PA8000 }, +{ "887" ,V_1x1b ,PA7100 }, +{ "889" ,V_2x0 ,PA8000 }, +{ "890" ,V_1x0 ,PA7000 }, +{ "891" ,V_1x1b ,PA7100 }, +{ "892" ,V_1x1b ,PA7100 }, +{ "893" ,V_2x0 ,PA8000 }, +{ "895" ,V_2x0 ,PA8000 }, +{ "896" ,V_2x0 ,PA8000 }, +{ "897" ,V_1x1b ,PA7100 }, +{ "898" ,V_2x0 ,PA8200 }, +{ "899" ,V_2x0 ,PA8200 }, +{ "900" ,V_1x0 ,PA7000 }, +{ "B115" ,V_1x1e ,PA7300 }, +{ "B120" ,V_1x1e ,PA7300 }, +{ "B132L" ,V_1x1e ,PA7300 }, +{ "B160L" ,V_1x1e ,PA7300 }, +{ "B180L" ,V_1x1e ,PA7300 }, +{ "C100" ,V_1x1d ,PA7200 }, +{ "C110" ,V_1x1d ,PA7200 }, +{ "C115" ,V_1x1e ,PA7300 }, +{ "C120" ,V_1x1e ,PA7300 }, +{ "C130" ,V_2x0 ,PA8000 }, +{ "C140" ,V_2x0 ,PA8000 }, +{ "C160L" ,V_1x1e ,PA7300 }, +{ "C160" ,V_2x0 ,PA8000 }, +{ "C180L" ,V_1x1e ,PA7300 }, +{ "C180-XP" ,V_2x0 ,PA8000 }, +{ "C180" ,V_2x0 ,PA8000 }, +{ "C200+" ,V_2x0 ,PA8200 }, +{ "C230+" ,V_2x0 ,PA8200 }, +{ "C240+" ,V_2x0 ,PA8200 }, +{ "CB260" ,V_2x0 ,PA8200 }, +{ "D200" ,V_1x1d ,PA7200 }, // or: 1.1c, PA7100LC +{ "D210" ,V_1x1d ,PA7200 }, // or: 1.1c, PA7100LC +{ "D220" ,V_1x1e ,PA7300 }, +{ "D230" ,V_1x1e ,PA7300 }, +{ "D250" ,V_1x1d ,PA7200 }, +{ "D260" ,V_1x1d ,PA7200 }, +{ "D270" ,V_2x0 ,PA8000 }, +{ "D280" ,V_2x0 ,PA8000 }, +{ "D310" ,V_1x1c ,PA7100LC }, +{ "D320" ,V_1x1e ,PA7300 }, +{ "D330" ,V_1x1e ,PA7300 }, +{ "D350" ,V_1x1d ,PA7200 }, +{ "D360" ,V_1x1d ,PA7200 }, +{ "D370" ,V_2x0 ,PA8000 }, +{ "D380" ,V_2x0 ,PA8000 }, +{ "D400" ,V_1x1d ,PA7200 }, +{ "D410" ,V_1x1d ,PA7200 }, +{ "D650" ,V_2x0 ,PA8000 }, +{ "DX0" ,V_1x1c ,PA7100LC }, +{ "DX5" ,V_1x1c ,PA7100LC }, +{ "DXO" ,V_1x1c ,PA7100LC }, +{ "E25" ,V_1x1c ,PA7100LC }, +{ "E35" ,V_1x1c ,PA7100LC }, +{ "E45" ,V_1x1c ,PA7100LC }, +{ "E55" ,V_1x1c ,PA7100LC }, +{ "F10" ,V_1x1a ,PA7000 }, +{ "F20" ,V_1x1a ,PA7000 }, +{ "F30" ,V_1x1a ,PA7000 }, +{ "G30" ,V_1x1a ,PA7000 }, +{ "G40" ,V_1x1a ,PA7000 }, +{ "G50" ,V_1x1b ,PA7100 }, +{ "G60" ,V_1x1b ,PA7100 }, +{ "G70" ,V_1x1b ,PA7100 }, +{ "H20" ,V_1x1a ,PA7000 }, +{ "H30" ,V_1x1a ,PA7000 }, +{ "H40" ,V_1x1a ,PA7000 }, +{ "H50" ,V_1x1b ,PA7100 }, +{ "H60" ,V_1x1b ,PA7100 }, +{ "H70" ,V_1x1b ,PA7100 }, +{ "I30" ,V_1x1a ,PA7000 }, +{ "I40" ,V_1x1a ,PA7000 }, +{ "I50" ,V_1x1b ,PA7100 }, +{ "I60" ,V_1x1b ,PA7100 }, +{ "I70" ,V_1x1b ,PA7100 }, +{ "J200" ,V_1x1d ,PA7200 }, +{ "J210XC" ,V_1x1d ,PA7200 }, +{ "J210" ,V_1x1d ,PA7200 }, +{ "J220" ,V_2x0 ,PA8000 }, +{ "J2240" ,V_2x0 ,PA8200 }, +{ "J280" ,V_2x0 ,PA8000 }, +{ "J282" ,V_2x0 ,PA8000 }, +{ "J400" ,V_2x0 ,PA8000 }, +{ "J410" ,V_2x0 ,PA8000 }, +{ "K100" ,V_1x1d ,PA7200 }, +{ "K200" ,V_1x1d ,PA7200 }, +{ "K210" ,V_1x1d ,PA7200 }, +{ "K230" ,V_1x1d ,PA7200 }, +{ "K250" ,V_2x0 ,PA8000 }, +{ "K260" ,V_2x0 ,PA8000 }, +{ "K370" ,V_2x0 ,PA8200 }, +{ "K380" ,V_2x0 ,PA8200 }, +{ "K400" ,V_1x1d ,PA7200 }, +{ "K410" ,V_1x1d ,PA7200 }, +{ "K420" ,V_1x1d ,PA7200 }, +{ "K430" ,V_1x1d ,PA7200 }, +{ "K450" ,V_2x0 ,PA8000 }, +{ "K460" ,V_2x0 ,PA8000 }, +{ "K470" ,V_2x0 ,PA8200 }, +{ "K570" ,V_2x0 ,PA8200 }, +{ "K580" ,V_2x0 ,PA8200 }, +{ "S700i" ,V_1x1e ,PA7300 }, +{ "S715" ,V_1x1e ,PA7300 }, +{ "S744" ,V_1x1e ,PA7300 }, +{ "S760" ,V_1x1e ,PA7300 }, +{ "T500" ,V_1x1c ,PA7100LC }, // or: 1.1b, PA7100 +{ "T520" ,V_1x1b ,PA7100 }, +{ "T540" ,V_2x0 ,PA8000 }, +{ "T600" ,V_2x0 ,PA8000 }, +{ "V2000" ,V_2x0 ,PA8000 }, +{ "V2200" ,V_2x0 ,PA8200 }, +{ "V2250" ,V_2x0 ,PA8200 }, +{ "V2500" ,V_2x0 ,PA8500 }, + +{ "" ,0 ,0 } /* Last Entry has to be empty. */ +}; + + + +/* Helper-Functions */ + +// Value() is defined in info.cpp !!! + +static bool Find_in_LOOKUPTABLE( QListView *lBox, char *machine ) +{ char *Machine; + int len; + const struct _type_LOOKUPTABLE *Entry = PA_LOOKUPTABLE; + QString str; + QListViewItem* olditem = 0; + + + Machine = machine; // machine is like: "9000/715/D" + while ((*Machine) && (*Machine!='/')) + ++Machine; + + if (*Machine) + ++Machine; + else + Machine=machine; + + len = strlen(Machine); + + while (Entry->Name[0]) + { if (strncmp(Entry->Name,Machine,len)==0) + { + olditem = new QListViewItem(lBox, olditem, i18n("PA-RISC Processor"), + QString(PA_NAME[Entry->parisc_name])); + olditem = new QListViewItem(lBox, olditem, i18n("PA-RISC Revision"), + QString("PA-RISC ") + QString(PA_REVISION[Entry->parisc_rev])); + return true; + } + else + ++Entry; // next Entry ! + } + + return false; +} + + +/* all following functions should return true, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + + +bool GetInfo_CPU( QListView *lBox ) +{ + FILE *pipe; + QFile *model; + + struct pst_dynamic psd; + struct pst_static pst; + struct pst_processor pro; + struct utsname info; + QString str,str2; + QListViewItem* olditem = 0; + int maxwidth,i; + + if((pstat_getstatic(&pst, sizeof(pst), (size_t)1, 0) == -1) || + (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0)== -1)) { + *GetInfo_ErrorString = i18n("Could not get Information."); /* Error */ + return false; + } + + maxwidth = 0; + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + + uname(&info); + + olditem = new QListViewItem(lBox, olditem, i18n("Machine"), info.machine); + + model = new QFile(INFO_CPU_MODEL); + if (model->exists()) + { if ((pipe = popen(INFO_CPU_MODEL, "r"))) + { QTextStream *t = new QTextStream(pipe, IO_ReadOnly); + str = t->readLine(); + olditem = new QListViewItem(lBox, olditem, i18n("Model"), str); + delete t; + } + delete pipe; + } + delete model; + + olditem = new QListViewItem(lBox, olditem, i18n("Machine Identification Number"), + strlen(info.__idnumber) ? QString(info.__idnumber) : i18n("(none)") ); + + if (psd.psd_proc_cnt<=0) + psd.psd_proc_cnt=1; // Minimum one CPU ! + + olditem = new QListViewItem(lBox, olditem, i18n("Number of Active Processors"), + Value(psd.psd_proc_cnt)); + + pstat_getprocessor( &pro, sizeof(pro), 1, 0 ); + olditem = new QListViewItem(lBox, olditem, i18n("CPU Clock"), + Value(pro.psp_iticksperclktick/10000) + " " + i18n("MHz")); + + switch(sysconf(_SC_CPU_VERSION)) + { case CPU_HP_MC68020: str2 = "Motorola 68020"; break; + case CPU_HP_MC68030: str2 = "Motorola 68030"; break; + case CPU_HP_MC68040: str2 = "Motorola 68040"; break; + case CPU_PA_RISC1_0: str2 = "PA-RISC 1.0"; break; + case CPU_PA_RISC1_1: str2 = "PA-RISC 1.1"; break; + case CPU_PA_RISC1_2: str2 = "PA-RISC 1.2"; break; + case CPU_PA_RISC2_0: +#if defined(_SC_KERNEL_BITS) + switch (sysconf(_SC_KERNEL_BITS)) { + case 64: str2 = "PA-RISC 2.0w (64 bit)"; break; + case 32: str2 = "PA-RISC 2.0n (32 bit)"; break; + default: str2 = "PA-RISC 2.0"; break; + }; break; +#else /* !defined(_SC_KERNEL_BITS) */ + str2 = "PA-RISC 2.0"; break; +#endif + default: str2 = i18n("(unknown)"); break; + } + + olditem = new QListViewItem(lBox, olditem, i18n("CPU Architecture"), str2); + + Find_in_LOOKUPTABLE( lBox, info.machine );// try to get extended Information. + + for (i=PS_PA83_FPU; i<=PS_PA89_FPU; ++i) { + if ((1<<(i-1)) & pro.psp_coprocessor.psc_present) { + str = QString( (i==PS_PA83_FPU) ? "PS_PA83_FPU":"PS_PA89_FPU" ) + + QString(" (") + + QString(((1<<(i-1))&pro.psp_coprocessor.psc_enabled) ? + i18n("enabled") : i18n("disabled") ) + + QString(")"); + + olditem = new QListViewItem(lBox, olditem, i18n("Numerical Coprocessor (FPU)"), str); + } + }// for(coprocessor..) + + str = Value(((pst.physical_memory*pst.page_size)/1024/1024)) + + QString(" ") + + i18n("MB"); // Mega-Byte + olditem = new QListViewItem(lBox, olditem, i18n("Total Physical Memory"), str); + + str = Value(pst.page_size) + QString(" ") + i18n("Bytes"); + olditem = new QListViewItem(lBox, olditem, i18n("Size of One Page"), str); + + return true; +} + +bool GetInfo_ReadfromFile( QListView *lBox, const char *Name ) +{ + char buf[2048]; + + QFile *file = new QFile(Name); + QListViewItem* olditem = 0; + + if(!file->open(IO_ReadOnly)) { + delete file; + return false; + } + + while (file->readLine(buf,sizeof(buf)-1) >= 0) + { if (strlen(buf)) + olditem = new QListViewItem(lBox, olditem, QString::fromLocal8Bit(buf)); + } + + file->close(); + delete file; + return (lBox->childCount()); +} + + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView *lBox ) +{ + return( GetInfo_ReadfromFile(lBox,INFO_PCI) + + GetInfo_ReadfromFile(lBox,INFO_PCI_EISA) ); +} + +bool GetInfo_IO_Ports( QListView *lBox ) +{ + if (GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_1, false )) + return true; + else + return GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_2, false ); +} + + +bool GetInfo_Devices( QListView *lBox ) +{ + return GetInfo_ReadfromPipe( lBox, INFO_DEVICES, false ); +} + +bool GetInfo_SCSI( QListView *lBox ) +{ + return GetInfo_Devices( lBox ); +} +/* Parts taken from fsusage.c from the Midnight Commander (mc) + + Copyright (C) 1991, 1992 Free Software Foundation, In + + Return the number of TOSIZE-byte blocks used by + BLOCKS FROMSIZE-byte blocks, rounding away from zero. + TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */ + +static long fs_adjust_blocks(long blocks, int fromsize, int tosize) +{ + if (tosize <= 0) + abort (); + if (fromsize <= 0) + return -1; + + if (fromsize == tosize) /* E.g., from 512 to 512. */ + return blocks; + else if (fromsize > tosize) /* E.g., from 2048 to 512. */ + return blocks * (fromsize / tosize); + else /* E.g., from 256 to 512. */ + return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize); +} + +/* Fill in the fields of FSP with information about space usage for + the filesystem on which PATH resides. + Return 0 if successful, -1 if not. */ + +#define CONVERT_BLOCKS(b) fs_adjust_blocks ((b), fsd.f_bsize, 512) + +static int get_fs_usage (char *path, long *l_total, long *l_avail) +{ struct statfs fsd; /* 4.3BSD, SunOS 4, HP-UX, AIX. */ + unsigned long fsu_blocks,fsu_bfree,fsu_bavail; + + *l_total = *l_avail = 0; + if (statfs (path, &fsd) < 0) + return -1; + + fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks); + fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree); + fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail); + + *l_avail = getuid () ? fsu_bavail/2 : fsu_bfree/2; + *l_total = fsu_blocks/2; + + return 0; +} + + +// Some Ideas taken from garbazo from his source in info_fbsd.cpp + +bool GetInfo_Partitions (QListView *lbox) +{ + #define NUMCOLS 5 + QString Title[NUMCOLS]; + int n; + + struct fstab *fstab_ent; + struct statvfs svfs; + long total,avail; + QString str; + QString MB(i18n("MB")+ " "); // International Text for MB=Mega-Byte + + if (setfsent() != 1) // Try to open fstab + return false; + + Title[0] = i18n("Device"); + Title[1] = i18n("Mount Point"); + Title[2] = i18n("FS Type"); + Title[3] = i18n("Total Size"); + Title[4] = i18n("Free Size"); + + for (n=0; naddColumn(Title[n] ); + } + + while ((fstab_ent=getfsent())!=NULL) { + /* fstab_ent->fs_type holds only "rw","xx","ro"... */ + memset(&svfs,0,sizeof(svfs)); + statvfs(fstab_ent->fs_file,&svfs); + get_fs_usage(fstab_ent->fs_file, &total, &avail); + + if (!strcmp(fstab_ent->fs_type,FSTAB_XX)) // valid drive ? + svfs.f_basetype[0] = 0; + + if(svfs.f_basetype[0]) { + new QListViewItem(lbox, QString(fstab_ent->fs_spec), + QString(fstab_ent->fs_file) + QString(" "), + (svfs.f_basetype[0] ? QString(svfs.f_basetype) : i18n("n/a")), + Value((total+512)/1024,6) + MB, + Value((avail+512)/1024,6) + MB); + } + else { + new QListViewItem(lbox, QString(fstab_ent->fs_spec), + QString(fstab_ent->fs_file) + QString(" "), + (svfs.f_basetype[0] ? QString(svfs.f_basetype) : i18n("n/a"))); + } + + } + endfsent(); + + return true; +} + + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + lBox = lBox; + return GetInfo_XServer_Generic( lBox ); +} + + + + + +#ifndef HAVE_ALIB_H + +bool GetInfo_Sound( QListView *lBox ) +{ lBox = lBox; + *GetInfo_ErrorString = i18n("Audio-Support (Alib) was disabled during configuration and compile-time."); + return false; +} + +#else // defined(HAVE_ALIB_H) + +#include "Alib.h" + +static const char formatNames[6][15] = { + "ADFUnknown", "ADFMuLaw", "ADFALaw", + "ADFLin16", "ADFLin8", "ADFLin8Offset" }; + +/* handle typo in 1st release of Alib.h */ +#ifndef ARightOutputChMask +#define ARightOutputChMask ARighOutputChMask +#endif + + +bool GetInfo_Sound( QListView *lBox ) +{ + Audio *audio; + long status; + char server[80]; + int i; + + QString str,str2; + QListViewItem* olditem = 0; + + // server = Hostname.... + server[0] = 0; + audio = AOpenAudio( server, &status ); + if( status ) { + *GetInfo_ErrorString = i18n("Unable to open Audio-Server (Alib)."); + return false; + } + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + + olditem = new QListViewItem(lBox, olditem, i18n("Audio Name"), QString(audio->audio_name)); + olditem = new QListViewItem(lBox, olditem, i18n("Vendor"), QString(audio->vendor)); + olditem = new QListViewItem(lBox, olditem, i18n("Alib Version"), + Value(audio->alib_major_version) + QString(".") + + Value(audio->alib_minor_version)); + + olditem = new QListViewItem(lBox, olditem, i18n("Protocol Revision"), + Value(audio->proto_major_version) + QString(".") + + Value(audio->proto_minor_version)); + + olditem = new QListViewItem(lBox, olditem, i18n("Vendor Number"), + Value(audio->vnumber)); + + olditem = new QListViewItem(lBox, olditem, i18n("Release"), + Value(audio->release)); + + olditem = new QListViewItem(lBox, olditem, i18n("Byte Order"), + QString((audio->byte_order==ALSBFirst)? i18n("ALSBFirst (LSB)"): + ((audio->byte_order==AMSBFirst)? i18n("AMSBFirst (MSB)"): + i18n("Invalid Byteorder.")) )); + + olditem = new QListViewItem(lBox, olditem, i18n("Bit Order"), + QString((audio->sound_bit_order==ALeastSignificant)? + i18n("ALeastSignificant (LSB)") : + ((audio->sound_bit_order==AMostSignificant) ? + i18n("AMostSignificant (MSB)"):i18n("Invalid Bitorder.")) )); + + olditem = new QListViewItem(lBox, olditem, i18n("Data Formats")); + for ( i = 0; i < audio->n_data_format; i++ ) { + if (audio->data_format_list[i] <= ADFLin8Offset) + new QListViewItem(olditem, QString(formatNames[audio->data_format_list[i]])); + } + olditem->setOpen(true); + + olditem = new QListViewItem(lBox, olditem, i18n("Sampling Rates")); + for ( i = 0; i < audio->n_sampling_rate; i++ ) { + new QListViewItem(olditem, Value(audio->sampling_rate_list[i])); + } + olditem->setOpen(true); + + olditem = new QListViewItem(lBox, olditem, i18n("Input Sources")); + if ( audio->input_sources & AMonoMicrophoneMask ) + new QListViewItem(olditem, i18n("Mono-Microphone")); + if ( audio->input_sources & AMonoAuxiliaryMask ) + new QListViewItem(olditem, i18n("Mono-Auxiliary")); + if ( audio->input_sources & ALeftMicrophoneMask ) + new QListViewItem(olditem, i18n("Left-Microphone")); + if ( audio->input_sources & ARightMicrophoneMask ) + new QListViewItem(olditem, i18n("Right-Microphone")); + if ( audio->input_sources & ALeftAuxiliaryMask ) + new QListViewItem(olditem, i18n("Left-Auxiliary")); + if ( audio->input_sources & ARightAuxiliaryMask ) + new QListViewItem(olditem, i18n("Right-Auxiliary")); + olditem->setOpen(true); + + olditem = new QListViewItem(lBox, olditem,i18n("Input Channels")); + if ( audio->input_channels & AMonoInputChMask ) + new QListViewItem(olditem, i18n("Mono-Channel")); + if ( audio->input_channels & ALeftInputChMask ) + new QListViewItem(olditem, i18n("Left-Channel")); + if ( audio->input_channels & ARightInputChMask ) + new QListViewItem(olditem, i18n("Right-Channel")); + olditem->setOpen(true); + + olditem = new QListViewItem(lBox, olditem, i18n("Output Destinations")); + if ( audio->output_destinations & AMonoIntSpeakerMask ) + new QListViewItem(olditem, i18n("Mono-InternalSpeaker")); + if ( audio->output_destinations & AMonoJackMask ) + new QListViewItem(olditem, i18n("Mono-Jack")); + if ( audio->output_destinations & ALeftIntSpeakerMask ) + new QListViewItem(olditem, i18n("Left-InternalSpeaker")); + if ( audio->output_destinations & ARightIntSpeakerMask ) + new QListViewItem(olditem, i18n("Right-InternalSpeaker")); + if ( audio->output_destinations & ALeftJackMask ) + new QListViewItem(olditem, i18n("Left-Jack")); + if ( audio->output_destinations & ARightJackMask ) + new QListViewItem(olditem, i18n("Right-Jack")); + olditem->setOpen(true); + + olditem = new QListViewItem(lBox, olditem, i18n("Output Channels")); + if ( audio->output_channels & AMonoOutputChMask ) + new QListViewItem(olditem, i18n("Mono-Channel")); + if ( audio->output_channels & ALeftOutputChMask ) + new QListViewItem(olditem, i18n("Left-Channel")); + if ( audio->output_channels & ARightOutputChMask ) + new QListViewItem(olditem, i18n("Right-Channel")); + olditem->setOpen(true); + + + olditem = new QListViewItem(lBox, olditem, i18n("Gain")); + new QListViewItem(olditem, i18n("Input Gain Limits"), + Value(audio->max_input_gain)); + new QListViewItem(olditem,i18n("Output Gain Limits"), + Value(audio->min_output_gain) + QString(" ") + + Value(audio->max_output_gain)); + new QListViewItem(olditem, i18n("Monitor Gain Limits"), + Value(audio->min_monitor_gain) + QString(" ") + + Value(audio->max_monitor_gain)); + new QListViewItem(olditem, i18n("Gain Restricted"), + Value(audio->gm_gain_restricted)); + olditem->setOpen(true); + + + olditem = new QListViewItem(lBox, olditem,i18n("Lock"), + Value(audio->lock)); + olditem = new QListViewItem(lBox, olditem, i18n("Queue Length"), + Value(audio->qlen)); + olditem = new QListViewItem(lBox, olditem, i18n("Block Size"), + Value(audio->block_size)); + olditem = new QListViewItem(lBox, olditem, i18n("Stream Port (decimal)"), + Value(audio->stream_port)); + olditem = new QListViewItem(lBox, olditem, i18n("Ev Buffer Size"), + Value(audio->ev_buf_size)); + olditem = new QListViewItem(lBox, olditem, i18n("Ext Number"), + Value(audio->ext_number)); + + ACloseAudio( audio, &status ); + + return true; +} + +#endif // defined(HAVE_ALIB_H) diff --git a/kcontrol/info/info_linux.cpp b/kcontrol/info/info_linux.cpp new file mode 100644 index 000000000..9d29e890e --- /dev/null +++ b/kcontrol/info/info_linux.cpp @@ -0,0 +1,595 @@ +/* + + Linux-specific Information about the Hardware. + + (C) Copyright 1998-2006 by Helge Deller + (C) Copyright 2006 by Jahshan Bhatti (CD-ROM Info) + + To do (maybe?): + - include Information about XFree86 and/or Accelerated X + (needs to change configure-skript, to see, if Header-files are available !) + - maybe also include information about the video-framebuffer devices + - rewrite detection-routines (maybe not to use the /proc-fs) + - more & better sound-information + + /dev/sndstat support added: 1998-12-08 Duncan Haldane (f.d.m.haldane@cwix.com) + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_FSTAB_H /* some Linux-versions don't have fstab.h */ +# include +# include +# define INFO_PARTITIONS_FULL_INFO /* show complete info */ +#elif defined HAVE_MNTENT_H /* but maybe they have mntent.h ? */ +# include +# include +# define INFO_PARTITIONS_FULL_INFO /* show complete info */ +#else +# undef INFO_PARTITIONS_FULL_INFO /* no partitions-info */ +#endif + +#include + +#include +#include +#include + +#define INFO_CPU_AVAILABLE +#define INFO_CPU "/proc/cpuinfo" + +#define INFO_IRQ_AVAILABLE +#define INFO_IRQ "/proc/interrupts" + +#define INFO_DMA_AVAILABLE +#define INFO_DMA "/proc/dma" + +#define INFO_PCI_AVAILABLE +#define INFO_PCI "/proc/pci" + +#define INFO_IOPORTS_AVAILABLE +#define INFO_IOPORTS "/proc/ioports" + +#define INFO_SOUND_AVAILABLE +#define INFO_DEV_SNDSTAT "/dev/sndstat" +#define INFO_SOUND "/proc/sound" +#define INFO_ASOUND "/proc/asound/oss/sndstat" +#define INFO_ASOUND09 "/proc/asound/sndstat" + +#define INFO_DEVICES_AVAILABLE +#define INFO_DEVICES "/proc/devices" +#define INFO_MISC "/proc/misc" + +#define INFO_SCSI_AVAILABLE +#define INFO_SCSI "/proc/scsi/scsi" + +#define INFO_PARTITIONS_AVAILABLE +#define INFO_PARTITIONS "/proc/partitions" +#define INFO_MOUNTED_PARTITIONS "/etc/mtab" /* on Linux... */ + +#define INFO_XSERVER_AVAILABLE + +#define INFO_CD_ROM_AVAILABLE +#define INFO_CD_ROM "/proc/sys/dev/cdrom/info" /* Feature 47242 */ + + +#define MAXCOLUMNWIDTH 600 + +bool GetInfo_ReadfromFile(QListView * lbox, const char *FileName, + const QChar& splitChar, + QListViewItem * lastitem = 0, + QListViewItem ** newlastitem = 0) +{ + bool added = false; + QFile file(FileName); + + if (!file.exists()) { + return false; + } + + if (!file.open(IO_ReadOnly)) { + /* *GetInfo_ErrorString = + i18n("You do not have read-access for the file %1!\nPlease ask your system-administrator for advice!") + .arg(FileName); + */ + return false; + } + QTextStream stream(&file); + QString line; + + while (!stream.atEnd()) { + QString s1, s2; + line = stream.readLine(); + if (!line.isEmpty()) { + if (!splitChar.isNull()) { + int pos = line.find(splitChar); + s1 = line.left(pos-1).stripWhiteSpace(); + s2 = line.mid(pos+1).stripWhiteSpace(); + } + else + s1 = line; + } + lastitem = new QListViewItem(lbox, lastitem, s1, s2); + added = true; + } + + file.close(); + if (newlastitem) + *newlastitem = lastitem; + + return added; +} + + + + +bool GetInfo_CPU(QListView * lBox) +{ + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + return GetInfo_ReadfromFile(lBox, INFO_CPU, ':'); +} + + +bool GetInfo_IRQ(QListView * lBox) +{ + lBox->setFont(KGlobalSettings::fixedFont()); + return GetInfo_ReadfromFile(lBox, INFO_IRQ, 0); +} + +bool GetInfo_DMA(QListView * lBox) +{ + QFile file(INFO_DMA); + + lBox->addColumn(i18n("DMA-Channel")); + lBox->addColumn(i18n("Used By")); + + if (file.exists() && file.open(IO_ReadOnly)) { + QTextStream stream(&file); + QString line; + QListViewItem *child=0L; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + QRegExp rx("^\\s*(\\S+)\\s*:\\s*(\\S+)"); + if (-1 != rx.search(line)) { + child = new QListViewItem(lBox,child,rx.cap(1),rx.cap(2)); + } + } + } + file.close(); + } else { + return false; + } + + return true; +} + +bool GetInfo_PCI(QListView * lBox) +{ + int num; + sorting_allowed = false; /* no sorting by user */ + + /* ry to get the output of the lspci package first */ + if ((num = GetInfo_ReadfromPipe(lBox, "lspci -v", true)) || + (num = GetInfo_ReadfromPipe(lBox, "/sbin/lspci -v", true)) || + (num = GetInfo_ReadfromPipe(lBox, "/usr/sbin/lspci -v", true)) || + (num = GetInfo_ReadfromPipe(lBox, "/usr/local/sbin/lspci -v", true))) + return num; + + /* if lspci failed, read the contents of /proc/pci */ + return GetInfo_ReadfromFile(lBox, INFO_PCI, 0); +} + +bool GetInfo_IO_Ports(QListView * lBox) +{ + lBox->addColumn(i18n("I/O-Range")); + lBox->addColumn(i18n("Used By")); + return GetInfo_ReadfromFile(lBox, INFO_IOPORTS, ':'); +} + +bool GetInfo_Sound(QListView * lBox) +{ + sorting_allowed = false; /* no sorting by user */ + if (GetInfo_ReadfromFile(lBox, INFO_DEV_SNDSTAT, 0)) + return true; + else if (GetInfo_ReadfromFile(lBox, INFO_SOUND, 0)) + return true; + else if (GetInfo_ReadfromFile(lBox, INFO_ASOUND, 0)) + return true; + else + return GetInfo_ReadfromFile(lBox, INFO_ASOUND09, 0); +} + +bool GetInfo_Devices(QListView * lBox) +{ + QFile file; + QListViewItem *misc=0L; + + lBox->setRootIsDecorated(true); + lBox->addColumn(i18n("Devices")); + lBox->addColumn(i18n("Major Number")); + lBox->addColumn(i18n("Minor Number")); + + file.setName(INFO_DEVICES); + if (file.exists() && file.open(IO_ReadOnly)) { + QTextStream stream(&file); + QString line; + QListViewItem *parent=0L, *child=0L; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + if (-1 != line.find("character device",0,false)) { + parent = new QListViewItem(lBox,parent,i18n("Character Devices")); + parent->setPixmap(0,SmallIcon("chardevice")); + parent->setOpen(true); + } else if (-1 != line.find("block device",0,false)) { + parent = new QListViewItem(lBox,parent,i18n("Block Devices")); + parent->setPixmap(0,SmallIcon("blockdevice")); + parent->setOpen(true); + } else { + QRegExp rx("^\\s*(\\S+)\\s+(\\S+)"); + if (-1 != rx.search(line)) { + if (parent) { + child = new QListViewItem(parent,child,rx.cap(2),rx.cap(1)); + } else { + child = new QListViewItem(lBox,parent,rx.cap(2),rx.cap(1)); + } + if (rx.cap(2)=="misc") { + misc=child; + } + } + } + } + } + file.close(); + } else { + return false; + } + + file.setName(INFO_MISC); + if (misc && file.exists() && file.open(IO_ReadOnly)) { + QTextStream stream(&file); + QString line; + QListViewItem *child=0L; + + misc->setText(0,i18n("Miscellaneous Devices")); + misc->setPixmap(0,SmallIcon("memory")); + misc->setOpen(true); + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + QRegExp rx("^\\s*(\\S+)\\s+(\\S+)"); + if (-1 != rx.search(line)) { + child = new QListViewItem(misc,child,rx.cap(2),"10",rx.cap(1)); + } + } + } + file.close(); + } + + return true; +} + +bool GetInfo_SCSI(QListView * lBox) +{ + return GetInfo_ReadfromFile(lBox, INFO_SCSI, 0); +} + +static void cleanPassword(QString & str) +{ + int index = 0; + QString passwd("password="); + + while (index >= 0) + { + index = str.find(passwd, index, FALSE); + if (index >= 0) { + index += passwd.length(); + while (index < (int) str.length() && + str[index] != ' ' && str[index] != ',') + str[index++] = '*'; + } + } +} + +#ifndef INFO_PARTITIONS_FULL_INFO + +bool GetInfo_Partitions(QListView * lBox) +{ + return GetInfo_ReadfromFile(lBox, INFO_PARTITIONS, 0); +} + +#else /* INFO_PARTITIONS_FULL_INFO */ + +// Some Ideas taken from garbazo from his source in info_fbsd.cpp + +#if SIZEOF_LONG > 4 +#define LONG_TYPE unsigned long +#else +#ifdef HAVE_LONG_LONG +#define LONG_TYPE unsigned long long +#else +/* On 32-bit systems we would get an overflow in unsigned int for + drives bigger than 4GB. Let's use the ugly type double ! */ +#define LONG_TYPE double +#endif +#endif + + + +#if ( defined(HAVE_LINUX_RAW_H) || defined(HAVE_SYS_RAW_H) ) && defined(HAVE_SYS_IOCTL_H) && defined(__GNUC__) && !defined(__STRICT_ANSI__) +#include +#include + +#if defined(HAVE_SYS_RAW_H) +#include +#elif defined(HAVE_LINUX_RAW_H) +#include +#endif + +/* + * get raw device bindings and information + */ +void Get_LinuxRawDevices(QListView *lbox) +{ + int f, i, err; + int new_raw_devs = 1; + struct raw_config_request rq; + QString devname; + QString MB(i18n("MB")); /* "MB" = "Mega-Byte" */ + + /* try to open the raw device control file */ + f = open("/dev/rawctl", O_RDWR); + if (f == -1) { + f = open("/dev/raw", O_RDWR); + new_raw_devs = 0; + } + if (f == -1) + return; + + for (i=1; i<256; i++) { + rq.raw_minor = i; + if (ioctl(f, RAW_GETBIND, &rq)) + continue; + if (!rq.block_major) /* unbound ? */ + continue; + unsigned int minor = rq.block_minor; + char first_letter; + switch ((int)rq.block_major) { + + /* IDE drives */ + case 3: first_letter = 'a'; + set_ide_name: + devname = QString("/dev/hd%1%2") + .arg(QChar(first_letter + minor/64)) + .arg(minor&63); + break; + case 22:first_letter = 'c'; goto set_ide_name; + case 33:first_letter = 'e'; goto set_ide_name; + case 34:first_letter = 'g'; goto set_ide_name; + case 56:first_letter = 'i'; goto set_ide_name; + case 57:first_letter = 'k'; goto set_ide_name; + case 88:first_letter = 'm'; goto set_ide_name; + case 89:first_letter = 'o'; goto set_ide_name; + case 90:first_letter = 'q'; goto set_ide_name; + case 91:first_letter = 's'; goto set_ide_name; + + /* SCSI drives */ + case 8: first_letter = 'a'; + set_scsi_name: + devname = QString("/dev/sd%1%2") + .arg(QChar(first_letter + minor/16)) + .arg(minor&15); + break; + case 65:first_letter = 'q'; goto set_scsi_name; + + /* Compaq /dev/cciss devices */ + case 104: case 105: case 106: + case 107: case 108: case 109: + devname = QString("/dev/cciss/c%1d%2") + .arg((int)rq.block_major-104) + .arg(minor&15); + break; + + /* Compaq Intelligent Drive Array (ida) */ + case 72: case 73: case 74: case 75: + case 76: case 77: case 78: case 79: + devname = QString("/dev/ida/c%1d%2") + .arg((int)rq.block_major-72) + .arg(minor&15); + break; + + default: devname = QString("%1/%2") + .arg((int)rq.block_major) + .arg(minor); + + } + + /* TODO: get device size */ + QString size = ""; + + new QListViewItem(lbox, devname, + QString(new_raw_devs ? "/dev/raw/raw%1" : "/dev/raw%1").arg(i), + "raw", size, " ", ""); + } + close(f); +} +#else +#define Get_LinuxRawDevices(x) /* nothing */ +#endif + +bool GetInfo_Partitions(QListView * lbox) +{ +#define NUMCOLS 6 + QString Title[NUMCOLS]; + QStringList Mounted_Partitions; + bool found_in_List; + int n; + +#ifdef HAVE_FSTAB_H + struct fstab *fstab_ent; +# define FS_NAME fstab_ent->fs_spec // device-name +# define FS_FILE fstab_ent->fs_file // mount-point +# define FS_TYPE fstab_ent->fs_vfstype // fs-type +# define FS_MNTOPS fstab_ent->fs_mntops // mount-options +#else + struct mntent *mnt_ent; + FILE *fp; +# define FS_NAME mnt_ent->mnt_fsname // device-name +# define FS_FILE mnt_ent->mnt_dir // mount-point +# define FS_TYPE mnt_ent->mnt_type // fs-type +# define FS_MNTOPS mnt_ent->mnt_opts // mount-options +#endif + + struct statfs sfs; + LONG_TYPE total, avail; + QString str, mountopts; + QString MB(i18n("MB")); /* "MB" = "Mega-Byte" */ + + +#ifdef HAVE_FSTAB_H + if (setfsent() == 0) /* Try to open fstab */ + return false; +#else + if (!(fp = setmntent("/etc/fstab", "r"))) + return false; +#endif + + /* read the list of already mounted file-systems.. */ + QFile *file = new QFile(INFO_MOUNTED_PARTITIONS); + if (file->open(IO_ReadOnly)) { + char buf[1024]; + while (file->readLine(buf, sizeof( buf )) > 0) { + str = QString::fromLocal8Bit(buf); + if (str.length()) { + int p = str.find(' '); /* find first space. */ + if (p) + str.remove(p, 1024); /* erase all chars including space. */ + Mounted_Partitions.append(str); + } + } + file->close(); + } + delete file; + + /* create the header-tables */ + MB = QString(" ") + MB; + Title[0] = i18n("Device"); + Title[1] = i18n("Mount Point"); + Title[2] = i18n("FS Type"); + Title[3] = i18n("Total Size"); + Title[4] = i18n("Free Size"); + Title[5] = i18n("Mount Options"); + + for (n = 0; n < NUMCOLS; ++n) + lbox->addColumn(Title[n]); + + /* loop through all partitions... */ +#ifdef HAVE_FSTAB_H + while ((fstab_ent = getfsent()) != NULL) +#else + while ((mnt_ent = getmntent(fp)) != NULL) +#endif + { + total = avail = 0; /* initialize size.. */ + found_in_List = (Mounted_Partitions.contains(FS_NAME) > 0); + if (found_in_List && statfs(FS_FILE, &sfs) == 0) { + total = ((LONG_TYPE) sfs.f_blocks) * sfs.f_bsize; + avail = (getuid()? sfs.f_bavail : sfs.f_bfree) + * ((LONG_TYPE) sfs.f_bsize); + }; + /* + if (stat(fstab_ent->fs_file,&st)!=0) + total = 0; + if (!S_ISDIR(st.st_mode)) + total = 0; + */ + mountopts = FS_MNTOPS; + cleanPassword(mountopts); + if (total) + new QListViewItem(lbox, QString(FS_NAME) + " ", + QString(FS_FILE) + " ", + QString(FS_TYPE) + " ", + Value((int) (((total / 1024) + 512) / 1024), + 6) + MB, + Value((int) (((avail / 1024) + 512) / 1024), + 6) + MB, mountopts); + else + new QListViewItem(lbox, QString(FS_NAME), QString(FS_FILE), + QString(FS_TYPE), " ", " ", mountopts); + } + +#ifdef HAVE_FSTAB_H + endfsent(); /* close fstab.. */ +#else + endmntent(fp); /* close fstab.. */ +#endif + + /* get raw device entires if available... */ + Get_LinuxRawDevices(lbox); + + sorting_allowed = true; /* sorting by user allowed ! */ + lbox->setSorting(1); + + return true; +} +#endif /* INFO_PARTITIONS_FULL_INFO */ + + + + +bool GetInfo_XServer_and_Video(QListView * lBox) +{ + return GetInfo_XServer_Generic(lBox); +} + +/* GetInfo for CD-ROM Info by Jahshan Bhatti */ +bool GetInfo_CD_ROM(QListView * lBox) +{ + QFile file(INFO_CD_ROM); + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + if (file.exists() && file.open(IO_ReadOnly)) { + QRegExp rx("(.+):\\s+(\\S.*)"); + QTextStream stream(&file); + QString line; + QListViewItem *child = NULL; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + if (-1 != rx.search(line)) { + QString text = rx.cap(1); + QString value = rx.cap(2); + if (!text.contains('#')) { + if (value == "0") + value = KStdGuiItem::no().plainText(); + if (value == "1") + value = KStdGuiItem::yes().plainText(); + } + child = new QListViewItem(lBox,child,text,value); + } + } else { + child = new QListViewItem(lBox,child,QString::null,QString::null); + } + } + file.close(); + } else { + return false; + } + + return true; +} + diff --git a/kcontrol/info/info_netbsd.cpp b/kcontrol/info/info_netbsd.cpp new file mode 100644 index 000000000..228e32fb0 --- /dev/null +++ b/kcontrol/info/info_netbsd.cpp @@ -0,0 +1,353 @@ +/* + * info_netbsd.cpp is part of the KDE program kcminfo. This displays + * various information about the NetBSD system it's running on. + * + * Originally written by Jaromir Dolecek . CPU info + * code has been imported from implementation of processor.cpp for KDE 1.0 + * by David Brownlee as found in NetBSD packages collection. + * Hubert Feyer enhanced the sound information printing + * quite a lot, too. + * + * The code is placed into public domain. Do whatever you want with it. + */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#include +#include +#include +#include +#include /* for NULL */ +#include /* for malloc(3) */ +#include + +#include +#include +#include +#include + +#include +#include /* for KIO::convertSize() */ + +typedef struct + { + int string; + int name; + const char *title; + } hw_info_mib_list_t; + +bool GetInfo_CPU(QListView *lBox) +{ + static hw_info_mib_list_t hw_info_mib_list[]= { + { 1, HW_MODEL, "Model" }, + { 1, HW_MACHINE, "Machine" }, + { 1, HW_MACHINE_ARCH, "Architecture" }, + { 0, HW_NCPU, "Number of CPUs" }, + { 0, HW_PAGESIZE, "Pagesize" }, + { 0,0,0 } + }; + hw_info_mib_list_t *hw_info_mib; + + int mib[2], num; + char *buf; + size_t len; + QString value; + + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + for ( hw_info_mib = hw_info_mib_list ; hw_info_mib->title ; ++hw_info_mib ) + { + mib[0] = CTL_HW; + mib[1] = hw_info_mib->name; + if ( hw_info_mib->string ) { + sysctl(mib,2,NULL,&len,NULL,0); + if ( (buf = (char*)malloc(len)) ) { + sysctl(mib,2,buf,&len,NULL,0); + value = QString::fromLocal8Bit(buf); + free(buf); + } + else { + value = QString("Unknown"); + } + } + else { + len = sizeof(num); + sysctl(mib,2,&num,&len,NULL,0); + value = QString::number(num); + } + new QListViewItem(lBox, hw_info_mib->title, value); + } + + return true; +} + +// this is used to find out which devices are currently +// on system +static bool GetDmesgInfo(QListView *lBox, const char *filter, + void func(QListView *, QString s)) +{ + QFile *dmesg = new QFile("/var/run/dmesg.boot"); + bool usepipe = false; + FILE *pipe = NULL; + QTextStream *t; + bool seencpu = false; + QString s; + bool found = false; + + if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { + t = new QTextStream(dmesg); + } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); + if (!pipe) return false; + usepipe = true; + t = new QTextStream(pipe, IO_ReadOnly); + } + + QListViewItem *olditem = NULL; + while(!(s = t->readLine().local8Bit()).isEmpty()) { + if (!seencpu) { + if (s.contains("cpu")) + seencpu = true; + else + continue; + } + if (s.contains("boot device") || + s.contains("WARNING: old BSD partition ID!")) + break; + + if (!filter + || (filter[0] == '^' && s.find(&filter[1]) == 0) + || (filter[0] != '^' && s.contains(filter))) { + if (func) + func(lBox, s); + else + olditem = new QListViewItem(lBox, olditem, s); + found = true; + } + } + + delete t; + if (pipe) + pclose(pipe); + else { + dmesg->close(); + delete dmesg; + } + + return found; +} + + +void +AddIRQLine(QListView *lBox, QString s) +{ + int pos, irqnum; + char numstr[3]; + + pos = s.find(" irq "); + irqnum = (pos < 0) ? 0 : atoi(&s.ascii()[pos+5]); + if (irqnum) + snprintf(numstr, 3, "%02d", irqnum); + else { + // this should never happen + strcpy(numstr, "??"); + } + + new QListViewItem(lBox, numstr, s); +} + +bool GetInfo_IRQ (QListView *lBox) +{ + lBox->addColumn(i18n("IRQ")); + lBox->addColumn(i18n("Device")); + lBox->setSorting(0); + lBox->setShowSortIndicator(FALSE); + (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + return true; +} + +bool GetInfo_DMA (QListView *) +{ + return false; +} + +bool GetInfo_PCI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "at pci", NULL)) + new QListViewItem(lbox, i18n("No PCI devices found.")); + return true; +} + +bool GetInfo_IO_Ports (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "port 0x", NULL)) + new QListViewItem(lbox, i18n("No I/O port devices found.")); + return true; +} + +bool GetInfo_Sound (QListView *lbox) +{ + lbox->setSorting(false); + + if (!GetDmesgInfo(lbox, "audio", NULL)) + new QListViewItem(lbox, i18n("No audio devices found.")); + + // append information for each audio devices found + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s; + int pos, len; + const char *start; + char *dev; + + s = lvitem->text(0); + // The autoconf message is in form 'audio0 at auvia0: ...' + if (s.find("audio") == 0 && (pos = s.find(" at ")) > 0) { + pos += 4; // skip " at " + start = s.ascii() + pos; + len = (int) strcspn(start, ":\n\t "); + dev = (char *) malloc(1 + len + 1); + sprintf(dev, "^%.*s", len, start); /* safe */ + + GetDmesgInfo(lbox, dev, NULL); + + free(dev); + } + } + + return true; +} + +bool GetInfo_Devices (QListView *lBox) +{ + (void) GetDmesgInfo(lBox, NULL, NULL); + return true; +} + +bool GetInfo_SCSI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new QListViewItem(lbox, i18n("No SCSI devices found.")); + + // remove the 'waiting %d seconds for devices to settle' message + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s = lvitem->text(0); + + if (s.contains("seconds for devices to settle")) { + lbox->removeItem(lvitem); + break; + } + } + + return true; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + int num; // number of mounts + // FIXME: older pkgsrc patches checked ST_RDONLY for this declaration + // what is ST_RDONLY and how does it affect getmntinfo? + struct statfs *mnt; // mount data pointer + + // get mount info + if (!(num=getmntinfo(&mnt, MNT_WAIT))) { + kdError() << "getmntinfo failed" << endl; + return false; + } + + // table headers + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Total Size")); + lbox->addColumn(i18n("Free Size")); + lbox->addColumn(i18n("Total Nodes")); + lbox->addColumn(i18n("Free Nodes")); + lbox->addColumn(i18n("Flags")); + + // mnt points into a static array (no need to free it) + for(; num--; ++mnt) { + unsigned long long big[2]; + QString vv[5]; + + big[0] = big[1] = mnt->f_bsize; // coerce the product + big[0] *= mnt->f_blocks; + big[1] *= mnt->f_bavail; // FIXME: use f_bfree if root? + + // convert to strings + vv[0] = KIO::convertSize(big[0]); + vv[1] = QString::fromLatin1("%1 (%2%%)") + .arg(KIO::convertSize(big[1])) + .arg(mnt->f_blocks ? mnt->f_bavail*100/mnt->f_blocks : 0); + + // FIXME: these two are large enough to punctuate + vv[2] = QString::number(mnt->f_files); + vv[3] = QString::fromLatin1("%1 (%2%%) ") + .arg(mnt->f_ffree) + .arg(mnt->f_files ? mnt->f_ffree*100/mnt->f_files : 0); + + vv[4] = QString::null; +#define MNTF(x) if (mnt->f_flags & MNT_##x) vv[4] += QString::fromLatin1(#x " "); + MNTF(ASYNC) + MNTF(DEFEXPORTED) + MNTF(EXKERB) + MNTF(EXNORESPORT) + MNTF(EXPORTANON) + MNTF(EXPORTED) + MNTF(EXPUBLIC) + MNTF(EXRDONLY) + MNTF(IGNORE) + MNTF(LOCAL) + MNTF(NOATIME) + MNTF(NOCOREDUMP) + MNTF(NODEV) + MNTF(NODEVMTIME) + MNTF(NOEXEC) + MNTF(NOSUID) + MNTF(QUOTA) + MNTF(RDONLY) + MNTF(ROOTFS) + MNTF(SOFTDEP) + MNTF(SYMPERM) + MNTF(SYNCHRONOUS) + MNTF(UNION) +#undef MNTF + + // put it in the table + // FIXME: there're more data but we have limited args (this is wrong! just add!) + new QListViewItem(lbox, + // FIXME: names need pad space + mnt->f_mntfromname, + mnt->f_mntonname, + mnt->f_fstypename, + vv[0], vv[1], vv[2], vv[3], vv[4]); + } + + // job well done + return true; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} diff --git a/kcontrol/info/info_openbsd.cpp b/kcontrol/info/info_openbsd.cpp new file mode 100644 index 000000000..92995fd78 --- /dev/null +++ b/kcontrol/info/info_openbsd.cpp @@ -0,0 +1,313 @@ +/* + * info_netbsd.cpp is part of the KDE program kcminfo. This displays + * various information about the OpenBSD system it's running on. + * + * Originally written by Jaromir Dolecek . CPU info + * code has been imported from implementation of processor.cpp for KDE 1.0 + * by David Brownlee as found in NetBSD packages collection. + * Hubert Feyer enhanced the sound information printing + * quite a lot, too. + * + * The code is placed into public domain. Do whatever you want with it. + */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#include +#include +#include +#include /* for NULL */ +#include /* for malloc(3) */ + +#include +#include +#include +#include + +#include + +typedef struct + { + int string; + int name; + const char *title; + } hw_info_mib_list_t; + +bool GetInfo_CPU(QListView *lBox) +{ + static hw_info_mib_list_t hw_info_mib_list[]= { + { 1, HW_MODEL, "Model" }, + { 1, HW_MACHINE, "Machine" }, + { 0, HW_NCPU, "Number of CPUs" }, + { 0, HW_PAGESIZE, "Pagesize" }, + { 0,0,0 } + }; + hw_info_mib_list_t *hw_info_mib; + + int mib[2], num; + char *buf; + size_t len; + QString value; + + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + for ( hw_info_mib = hw_info_mib_list ; hw_info_mib->title ; ++hw_info_mib ) + { + mib[0] = CTL_HW; + mib[1] = hw_info_mib->name; + if ( hw_info_mib->string ) { + sysctl(mib,2,NULL,&len,NULL,0); + if ( (buf = (char*)malloc(len)) ) { + sysctl(mib,2,buf,&len,NULL,0); + value = QString::fromLocal8Bit(buf); + free(buf); + } + else { + value = QString("Unknown"); + } + } + else { + len = sizeof(num); + sysctl(mib,2,&num,&len,NULL,0); + value.sprintf("%d", num); + } + new QListViewItem(lBox, hw_info_mib->title, value); + } + + return true; +} + +// this is used to find out which devices are currently +// on system +static bool GetDmesgInfo(QListView *lBox, const char *filter, + void func(QListView *, QString s, void **, bool)) +{ + QFile *dmesg = new QFile("/var/run/dmesg.boot"); + bool usepipe=false; + FILE *pipe=NULL; + QTextStream *t; + bool seencpu=false; + void *opaque=NULL; + QString s; + bool found=false; + + if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { + t = new QTextStream(dmesg); + } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); + if (!pipe) return false; + usepipe = true; + t = new QTextStream(pipe, IO_ReadOnly); + } + + QListViewItem *olditem = NULL; + while(!(s = t->readLine()).isNull()) { + if (!seencpu) { + if (s.contains("cpu")) + seencpu = true; + else + continue; + } + if (s.contains("boot device") || + s.contains("WARNING: old BSD partition ID!")) + break; + + if (!filter || s.contains(filter)) { + if (func) { + func(lBox, s, &opaque, false); + } + else { + olditem = new QListViewItem(lBox, olditem, s); + } + found = true; + } + } + if (func) { + func(lBox, s, &opaque, true); + } + //lBox->triggerUpdate(); + + delete t; + if (pipe) { + pclose(pipe); + } + else { + dmesg->close(); + delete dmesg; + } + + return found; +} + + +void AddIRQLine(QListView *lBox, QString s, void **opaque, bool ending) +{ + QStrList *strlist = (QStrList *) *opaque; + const char *str; + int pos, irqnum=0; + const char *p; + p = s.latin1(); + + if (!strlist) { + strlist = new QStrList(); + *opaque = (void *) strlist; + } + if (ending) { + str = strlist->first(); + for(;str; str = strlist->next()) { + new QListViewItem(lBox, str); + } + delete strlist; + return; + } + + pos = s.find(" irq "); + irqnum = (pos < 0) ? 0 : atoi(&p[pos+5]); + if (irqnum) { + s.sprintf("%02d%s", irqnum, p); + } + else { + s.sprintf("??%s", p); + } + strlist->inSort(s.latin1()); +} + +bool GetInfo_IRQ (QListView *lBox) +{ + lBox->addColumn(i18n("IRQ")); + lBox->addColumn(i18n("Device")); + (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + return true; +} + +bool GetInfo_DMA (QListView *) +{ + return false; +} + +bool GetInfo_PCI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "at pci", NULL)) + new QListViewItem(lbox, i18n("No PCI devices found.")); + return true; +} + +bool GetInfo_IO_Ports (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "port 0x", NULL)) + new QListViewItem(lbox, i18n("No I/O port devices found.")); + return true; +} + +bool GetInfo_Sound (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "audio", NULL)) + new QListViewItem(lbox, i18n("No audio devices found.")); + + // append information on any audio devices found + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s; + int pos, len; + const char *start, *end; + char *dev; + + s = lvitem->text(0); + if ((pos = s.find("at ")) >= 0) { + pos += 3; // skip "at " + start = end = s.ascii(); + for(; (*end!=':') && (*end!='\n'); end++); + len = end - start; + dev = (char *) malloc(len + 1); + strncpy(dev, start, len); + dev[len] = '\0'; + + GetDmesgInfo(lbox, dev, NULL); + + free(dev); + } + } + + return true; +} + +bool GetInfo_Devices (QListView *lBox) +{ + (void) GetDmesgInfo(lBox, NULL, NULL); + return true; +} + +bool GetInfo_SCSI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new QListViewItem(lbox, i18n("No SCSI devices found.")); + return true; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + QString s; + char *line, *orig_line; + const char *device, *mountpoint, *type, *flags; + FILE *pipe = popen("/sbin/mount", "r"); + QTextStream *t; + + if (!pipe) { + kdError(0) << i18n("Unable to run /sbin/mount.") << endl; + return false; + } + t = new QTextStream(pipe, IO_ReadOnly); + + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Mount Options")); + + QListViewItem *olditem = 0; + while (!(s = t->readLine()).isNull()) { + orig_line = line = strdup(s.latin1()); + + device = strsep(&line, " "); + + (void) strsep(&line, " "); // consume word "on" + mountpoint = strsep(&line, " "); + + (void) strsep(&line, " "); // consume word "type" + type = strsep(&line, " "); + + flags = line; + + olditem = new QListViewItem(lbox, olditem, device, mountpoint, + type, flags); + + free(orig_line); + } + + delete t; + pclose(pipe); + return true; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} diff --git a/kcontrol/info/info_osx.cpp b/kcontrol/info/info_osx.cpp new file mode 100644 index 000000000..25f23c2d9 --- /dev/null +++ b/kcontrol/info/info_osx.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2003 Benjamin Reed + * + * info_osx.cpp is part of the KDE program kcminfo. Copied wholesale + * from info_fbsd.cpp =) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#define INFO_CPU_AVAILABLE +//#define INFO_IRQ_AVAILABLE +//#define INFO_DMA_AVAILABLE +//#define INFO_PCI_AVAILABLE +//#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#ifdef HAVE_COREAUDIO +#include +#endif + +#include + +bool GetInfo_CPU (QListView *lBox) +{ + + QString cpustring; + + kern_return_t ret; + struct host_basic_info basic_info; + unsigned int count=HOST_BASIC_INFO_COUNT; + + ret=host_info(mach_host_self(), HOST_BASIC_INFO, + (host_info_t)&basic_info, &count); + if (ret != KERN_SUCCESS) { + kdDebug() << "unable to get host information from mach" << endl; + return false; + } else { + kdDebug() << "got Host Info: (" << basic_info.avail_cpus << ") CPUs available" << endl; + const NXArchInfo *archinfo; + archinfo=NXGetArchInfoFromCpuType(basic_info.cpu_type, basic_info.cpu_subtype); + new QListViewItem(lBox, i18n("Kernel is configured for %1 CPUs").arg(basic_info.max_cpus)); + for (int i = 1; i <= basic_info.avail_cpus; i++) { + cpustring = i18n("CPU %1: %2").arg(i).arg(archinfo->description); + new QListViewItem(lBox, cpustring); + } + return true; + } + return false; +} + +bool GetInfo_IRQ (QListView *) +{ + return false; +} + +bool GetInfo_DMA (QListView *) +{ + return false; +} + +bool GetInfo_PCI (QListView *) +{ + return false; +} + +bool GetInfo_IO_Ports (QListView *) +{ + return false; +} + +bool GetInfo_Sound (QListView *lBox) +{ +#ifdef HAVE_COREAUDIO +#define kMaxStringSize 1024 + OSStatus status; + AudioDeviceID gOutputDeviceID; + unsigned long propertySize; + char deviceName[kMaxStringSize]; + char manufacturer[kMaxStringSize]; + propertySize = sizeof(gOutputDeviceID); + status = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &propertySize, &gOutputDeviceID); + if (status) { + kdDebug() << "get default output device failed, status = " << (int)status << endl; + return false; + } + + if (gOutputDeviceID != kAudioDeviceUnknown) { + + propertySize = kMaxStringSize; + + /* Device Name */ + status = AudioDeviceGetProperty(gOutputDeviceID, 1, 0, kAudioDevicePropertyDeviceName, &propertySize, deviceName); + if (status) { + kdDebug() << "get device name failed, status = " << (int)status << endl; + return false; + } + new QListViewItem(lBox, i18n("Device Name: %1").arg(deviceName)); + + /* Manufacturer */ + status = AudioDeviceGetProperty(gOutputDeviceID, 1, 0, kAudioDevicePropertyDeviceManufacturer, &propertySize, manufacturer); + if (status) { + kdDebug() << "get manufacturer failed, status = " << (int)status << endl; + return false; + } + new QListViewItem(lBox, i18n("Manufacturer: %1").arg(manufacturer)); + return true; + } else { + return false; + } +#else + return false; +#endif +} + +bool GetInfo_SCSI (QListView *lbox) +{ + return false; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + return false; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} + +bool GetInfo_Devices (QListView *lbox) +{ + return false; +} diff --git a/kcontrol/info/info_sgi.cpp b/kcontrol/info/info_sgi.cpp new file mode 100644 index 000000000..2cd1a1e30 --- /dev/null +++ b/kcontrol/info/info_sgi.cpp @@ -0,0 +1,82 @@ +/* info_sgi.cpp + + !!!!! this file will be included by info.cpp !!!!! +*/ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* all following functions should return TRUE, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + + +#include + +bool GetInfo_CPU( QListView *lBox ) +{ + QString str; + char buf[256]; + + sysinfo(SI_ARCHITECTURE, buf, sizeof(buf)); + str = QString::fromLocal8Bit(buf); + new QListViewItem(lBox, str); + return true; +} + + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView * ) +{ + return false; +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView * ) +{ + return false; +} + +bool GetInfo_Devices( QListView * ) +{ + return false; +} + +bool GetInfo_SCSI( QListView * ) +{ + return false; +} + +bool GetInfo_Partitions( QListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + diff --git a/kcontrol/info/info_solaris.cpp b/kcontrol/info/info_solaris.cpp new file mode 100644 index 000000000..761200e75 --- /dev/null +++ b/kcontrol/info/info_solaris.cpp @@ -0,0 +1,705 @@ +/* + * info_solaris.cpp + * + * Torsten Kasch + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LIBDEVINFO_H +#include +#include +#include +#include +#include +#include +#include +#endif /* HAVE_LIBDEVINFO_H */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +bool GetInfo_CPU( QListView *lBox ) { + + kstat_ctl_t *kctl; + kstat_t *ksp; + kstat_named_t *kdata; + char cputype[16], + fputype[16]; + char *timetxt; + char *ptr; + uint32_t i, ncpus; + unsigned long state_begin; + QString state; + QString mhz; + QString inst; + + /* + * get a kstat handle first and update the user's kstat chain + */ + if( (kctl = kstat_open()) == NULL ) { + return false; + } + while( kstat_chain_update( kctl ) != 0 ) + ; + + /* + * get the # of CPUs + */ + if( (ksp = kstat_lookup( kctl, "unix", 0, "system_misc" )) == NULL ) { + return false; + } + if( kstat_read( kctl, ksp, NULL ) == -1 ) { + return false; + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "ncpus" ); + if( kdata != NULL ) { + ncpus = kdata->value.ui32; + } else { + ncpus = 0; + } + + lBox->addColumn( i18n( "Instance" )); + lBox->addColumn( i18n( "CPU Type" )); + lBox->addColumn( i18n( "FPU Type" )); + lBox->addColumn( i18n( "MHz" )); + lBox->addColumn( i18n( "State" )); + + /* + * get the per-processor info + */ + for( i = 0; i < ncpus; i++ ) { + + if( (ksp = kstat_lookup( kctl, "cpu_info", i, NULL )) == NULL ){ + return false; + } + + if( kstat_read( kctl, ksp, NULL ) == -1 ) { + return false; + } + + inst.setNum( i ); + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "cpu_type" ); + if( kdata != NULL ) { + strcpy( cputype, kdata->value.c ); + } else { + sprintf( cputype, "???" ); + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "fpu_type" ); + if( kdata != NULL ) { + strcpy( fputype, kdata->value.c ); + } else { + sprintf( fputype, "???" ); + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "clock_MHz" ); + if( kdata != NULL ) { + mhz.setNum( kdata->value.ul ); + } else { + mhz.setNum( 0 ); + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "state" ); + if( kdata != NULL ) { + state = QString( kdata->value.c ); + } else { + state = "???"; + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "state_begin" ); + if( kdata != NULL ) { + state_begin = kdata->value.i32; + if( (timetxt = ctime( (time_t *) &state_begin )) != NULL ) { + ptr = strrchr( timetxt, '\n' ); + *ptr = '\0'; + state += " since " + QString( timetxt ); + } + } + + new QListViewItem( lBox, inst, cputype, fputype, mhz, state ); + } + + // sorting_allowed = true; + lBox->setSorting( 0 ); + + return true; +} + +bool GetInfo_IRQ( QListView * ) { + return false; +} + +bool GetInfo_DMA( QListView * ) { + return false; +} + +bool GetInfo_PCI( QListView * ) { + return false; +} + +bool GetInfo_IO_Ports( QListView * ) { + return false; +} + +bool GetInfo_Sound( QListView * ) { + return false; +} + +bool GetInfo_SCSI( QListView * ) { + return false; +} + +bool GetInfo_Partitions( QListView *lBox ) { + + FILE *mnttab; + struct mnttab mnt; + struct statvfs statbuf; + fsblkcnt_t tmp; + QString total; + QString avail; + time_t mnttime; + char *timetxt; + char *ptr; + + if( (mnttab = fopen( MNTTAB, "r" )) == NULL ) { + return false; + } + + /* + * set up column headers + */ + lBox->addColumn( i18n( "Device" )); + lBox->addColumn( i18n( "Mount Point" )); + lBox->addColumn( i18n( "FS Type" )); + lBox->addColumn( i18n( "Total Size" )); + // XXX: FIXME: how do I set column alignment correctly? + lBox->setColumnAlignment( 3, 2 ); + lBox->addColumn( i18n( "Free Size" )); + // XXX: FIXME: how do I set column alignment correctly? + lBox->setColumnAlignment( 4, 2 ); + lBox->addColumn( i18n( "Mount Time" )); + lBox->addColumn( i18n( "Mount Options" )); + + /* + * get info about mounted file systems + */ + rewind( mnttab ); + while( getmntent( mnttab, &mnt ) == 0 ) { + /* + * skip fstype "nfs" and "autofs" for two reasons: + * o if the mountpoint is visible, the fs is not + * necessarily available (autofs option "-nobrowse") + * and we don't want to mount every remote fs just + * to get its size, do we? + * o the name "Partitions" for this statistics implies + * "local file systems only" + */ + if( (strcmp( mnt.mnt_fstype, "nfs" ) == 0) + || (strcmp( mnt.mnt_fstype, "autofs" ) == 0) ) + continue; + if( statvfs( mnt.mnt_mountp, &statbuf ) == 0 ) { + if( statbuf.f_blocks > 0 ) { + /* + * produce output in KB, MB, or GB for + * readability -- unfortunately, this + * breaks sorting for these columns... + */ + tmp = statbuf.f_blocks + * (statbuf.f_frsize / 1024); + if( tmp > 9999 ) { + tmp /= 1024; + if( tmp > 9999 ) { + tmp /= 1024; + total.setNum( tmp ); + total += " G"; + } else { + total.setNum( tmp ); + total += " M"; + } + } else { + total.setNum( tmp ); + total += " K"; + } +// avail.setNum( statbuf.f_bavail ); +// avail += " K"; + tmp = statbuf.f_bavail + * (statbuf.f_frsize / 1024); + if( tmp > 9999 ) { + tmp /= 1024; + if( tmp > 9999 ) { + tmp /= 1024; + avail.setNum( tmp ); + avail += " G"; + } else { + avail.setNum( tmp ); + avail += " M"; + } + } else { + avail.setNum( tmp ); + avail += " K"; + } + } else { + total = "-"; + avail = "-"; + } + } else { + total = "???"; + avail = "???"; + } + /* + * ctime() adds a '\n' which we have to remove + * so that we get a one-line output for the QListViewItem + */ + mnttime = (time_t) atol( mnt.mnt_time ); + if( (timetxt = ctime( &mnttime )) != NULL ) { + ptr = strrchr( timetxt, '\n' ); + *ptr = '\0'; + } + + new QListViewItem( + lBox, + mnt.mnt_special, + mnt.mnt_mountp, + mnt.mnt_fstype, + total, + avail, + QString( timetxt ), + mnt.mnt_mntopts + ); + } + fclose( mnttab ); + + lBox->setSorting( 0 ); + // sorting_allowed = true; + + return true; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) { + return GetInfo_XServer_Generic( lBox ); +} + +#ifdef HAVE_LIBDEVINFO_H +/* + * get Solaris' device configuration data through libdevinfo(3) + * and display it in a prtconf(1M) style tree + * + * NOTE: though the devinfo library seems to be present on earlier + * Solaris releases, this interface is documented to be available + * since Solaris 7 (libdevinfo.h is missing on pre-Solaris 7 systems) + * + * documentation for libdevinfo(3) including code samples on which + * this implementation is based on is available at + * http://soldc.sun.com/developer/support/driver/wps/libdevinfo/ + */ + +/* + * we start with various helper routines for GetInfo_Devices() + */ + +/* + * mktree() -- break up the device path and place its components + * into the tree widget + */ +QListViewItem *mktree( QListViewItem *top, const char *path ) { + + QListViewItem *parent, + *previous, + *result; + char *str = strdup( path ), + *token; + + /* + * start at "/" + */ + parent = top; + result = (*top).firstChild(); + previous = (*top).firstChild(); + + token = strtok( str, "/" ); + while( token != NULL ) { + /* + * find insert pos: + * try to match the node at the current level + * + * NOTE: this implementation assumes that there are + * no two nodes with identical names at the + * same level of the device tree + */ + while( result != NULL ) { + if( strcmp( token, (*result).text( 0 ).latin1()) == 0 ) + break; + previous = result; + result = (*result).nextSibling(); + } + if( result == NULL ) { + /* + * we haven't found the node, create a new one + */ + result = new QListViewItem( parent, + previous, + token ); + } else { + /* + * we've found the node + */ + parent = result; + previous = NULL; + if( (*result).firstChild() == NULL ) { + /* + * create new node during next iteration + */ + result->setExpandable( true ); + result->setOpen( false ); + } else { + /* + * follow the child path + */ + result = (*result).firstChild(); + } + } + token = strtok( NULL, "/" ); + } + free( str ); + + return( result ); +} + +/* + * prop_type_str() -- return the property type as a string + */ +char *prop_type_str( di_prop_t prop ) { + + switch( di_prop_type( prop )) { + case DI_PROP_TYPE_UNDEF_IT: + return( "undefined" ); + case DI_PROP_TYPE_BOOLEAN: + return( "BOOL" ); + case DI_PROP_TYPE_INT: + return( "INT" ); + case DI_PROP_TYPE_STRING: + return( "STRING" ); + case DI_PROP_TYPE_BYTE: + return( "BYTE" ); + default: + return( "unknown" ); + } +} + +/* + * prop_type_guess() -- guess the property type + */ +int prop_type_guess( uchar_t *data, int len ) { + + int slen; + int guess; + int i, c; + + if( len < 0 ) + return( -1 ); + else if( len == 0 ) + return( DI_PROP_TYPE_BOOLEAN ); + + slen = 0; + guess = DI_PROP_TYPE_STRING; + + for( i = 0; i < len; i++ ) { + c = (int) data[i]; + switch( c ) { + case 0: + if( i == (len - 1 )) + break; + if( slen == 0 ) + guess = DI_PROP_TYPE_BYTE; + else + guess = slen = 0; + break; + default: + if( ! isprint( c )) + guess = DI_PROP_TYPE_BYTE; + else + slen++; + } + if( guess != DI_PROP_TYPE_STRING ) + break; + } + +// if( (guess == DI_PROP_TYPE_BYTE) && (len % sizeof( int ) == 0 )) +// guess = DI_PROP_TYPE_INT; + + return( guess ); +} + +/* + * dump_minor_node() -- examine a device minor node + * this routine gets passed to di_walk_node() + */ +int dump_minor_node( di_node_t node, di_minor_t minor, void *arg ) { + + QListViewItem *item; + QString majmin; + char *type; + dev_t dev; + + item = new QListViewItem( (QListViewItem *) arg, + di_minor_name( minor )); + item->setExpandable( true ); + item->setOpen( false ); + new QListViewItem( item, i18n( "Spectype:" ), + (di_minor_spectype( minor ) == S_IFCHR) + ? i18n( "character special" ) + : i18n( "block special" )); + type = di_minor_nodetype( minor ); + new QListViewItem( item, i18n( "Nodetype:" ), + (type == NULL) ? "NULL" : type ); + + if( (dev = di_minor_devt( minor )) != DDI_DEV_T_NONE ) { + majmin.sprintf( "%ld/%ld", major( dev ), minor( dev )); + new QListViewItem( item, i18n( "Major/Minor:" ), majmin ); + } + + if( di_minor_next( node, minor ) == DI_MINOR_NIL ) + return( DI_WALK_TERMINATE ); + else + return( DI_WALK_CONTINUE ); +} + +/* + * propvalue() -- return the property value + */ +QString propvalue( di_prop_t prop ) { + + int type; + int i, n; + char *strp; + int *intp; + uchar_t *bytep; + QString result; + + /* + * Since a lot of printable strings seem to be tagged as 'byte', + * we're going to guess, if the property is not STRING or INT + * The actual type is shown in the info tree, though. + */ + type = di_prop_type( prop ); + if( (type != DI_PROP_TYPE_STRING) && (type != DI_PROP_TYPE_INT) ) { + n = di_prop_bytes( prop, &bytep ); + type = prop_type_guess( bytep, n ); + } + + result = ""; + switch( type ) { + case DI_PROP_TYPE_STRING: + if( (n = di_prop_strings( prop, &strp )) < 0 ) { + result = "(error)"; + } else { + for( i = 0; i < n; i++ ) { + result += "\""; + result += strp; + result += "\" "; + strp += strlen( strp ) + 1; + } + } + break; + case DI_PROP_TYPE_INT: + if( (n = di_prop_ints( prop, &intp )) < 0 ) { + result = "(error)"; + } else { + for( i = 0; i < n; i++ ) { + QString tmp; + tmp.setNum( intp[i] ); + result += tmp; + result += " "; + } + } + break; + case DI_PROP_TYPE_BOOLEAN: + /* + * hmm, Sun's sample code handles the existence + * of a boolean property as "true", whereas + * prtconf(1M) obviously does not (Sol8, at least) + * -- we're doing the same and handle "bool" as "byte" + */ + case DI_PROP_TYPE_BYTE: + if( (n = di_prop_bytes( prop, &bytep )) < 0 ) { + result = "(error)"; + } else { + if( n == 0 ) { + result = i18n( "(no value)" ); + break; + } + result = "0x"; + for( i = 0; i < n; i++ ) { + QString tmp; + unsigned byte = (unsigned) bytep[i]; + tmp.sprintf( "%2.2x", byte ); + result += tmp; + } + } + break; + default: + result = "???"; + } + + return( result ); +} + +/* + * dump_node() -- examine a device node and its children + * this routine gets passed to di_walk_node() + */ +int dump_node( di_node_t node, void *arg ) { + + QListViewItem *top = (QListViewItem *) arg, + *parent, + *previous; + char *path; + char *drivername; + char *names; + QString compatnames; + int i, n; + di_prop_t prop; + + path = di_devfs_path( node ); + + /* + * if this is the root node ("/"), initialize the tree + */ + if( strlen( path ) == 1 ) { + top->setText( 0, QString( di_binding_name( node ))); + top->setPixmap( 0, SmallIcon( "kcmdevices" )); + top->setOpen( true ); + top->setSelectable( false ); + top->setExpandable( false ); + } + + /* + * place the node in the tree + */ + parent = mktree( top, path ); + + /* + * we have to handle the root node differently... + */ + if( strlen( path ) > 1 ) { + parent->setExpandable( true ); + parent->setOpen( false ); + } else { + previous = parent; + parent = top; + } + + /* + * node name and physical device path + */ + drivername = di_driver_name( node ); + previous = new QListViewItem( parent, + i18n( "Driver Name:" ), + (drivername == NULL) + ? i18n( "(driver not attached)" ) + : drivername ); + previous = new QListViewItem( parent, previous, + i18n( "Binding Name:" ), di_binding_name( node )); + + n = di_compatible_names( node, &names ); + if( n < 1 ) { + compatnames = i18n( "(none)" ); + } else { + for( i = 0; i < n; i++ ) { + compatnames += names; + compatnames += " "; + names += strlen( names ) + 1; + } + } + + previous = new QListViewItem( parent, previous, + i18n( "Compatible Names:" ), compatnames ); + + previous = new QListViewItem( parent, previous, + i18n( "Physical Path:" ), QString( path )); + + /* + * dump the node's property list (if any) + */ + if( (prop = di_prop_next( node, DI_PROP_NIL )) != DI_PROP_NIL ) { + previous = new QListViewItem( parent, previous, i18n( "Properties" )); + previous->setExpandable( true ); + previous->setOpen( false ); + do { + /* + * property type & value + */ + QListViewItem *tmp, + *prev; + tmp = new QListViewItem( previous, di_prop_name( prop )); + tmp->setExpandable( true ); + tmp->setOpen( false ); + prev = new QListViewItem( tmp, i18n( "Type:" ), + prop_type_str( prop )); + new QListViewItem( tmp, prev, i18n( "Value:" ), + propvalue( prop )); + } while( (prop = di_prop_next( node, prop )) != DI_PROP_NIL ); + } + + /* + * if there are minor nodes, expand the tree appropriately + */ + if( di_minor_next( node, DI_MINOR_NIL ) != DI_MINOR_NIL ) { + previous = new QListViewItem( parent, previous, i18n( "Minor Nodes" )); + previous->setExpandable( true ); + previous->setOpen( false ); + di_walk_minor( node, NULL, 0, previous, dump_minor_node ); + } + + return( DI_WALK_CONTINUE ); +} + +bool GetInfo_Devices( QListView *lBox ) { + + QListViewItem *top; + di_node_t root_node; + + /* + * create a snapshot of the device tree + */ + if( (root_node = di_init( "/", DINFOCPYALL )) == DI_NODE_NIL ) { + return( false ); + } + // XXX: might try to di_prom_init() here as well (if we're setgid sys) + + /* + * prepare the tree widget + */ + lBox->addColumn( i18n( "Device Information" )); + lBox->addColumn( i18n( "Value" )); + + top = new QListViewItem( lBox ); + + /* + * traverse the device tree + */ + di_walk_node( root_node, DI_WALK_CLDFIRST, top, dump_node ); + + di_fini( root_node ); + + sorting_allowed = false; + return true; +} + +#else /* ! HAVE_LIBDEVINFO_H */ +bool GetInfo_Devices( QListView * ) { + return false; +} +#endif /* ! HAVE_LIBDEVINFO_H */ diff --git a/kcontrol/info/info_svr4.cpp b/kcontrol/info/info_svr4.cpp new file mode 100644 index 000000000..2509aa062 --- /dev/null +++ b/kcontrol/info/info_svr4.cpp @@ -0,0 +1,132 @@ +/* + info_svr4.cpp + + UNIX System V Release 4 specific Information about the Hardware. + Appropriate for SCO OpenServer and UnixWare. + Written 20-Feb-99 by Ronald Joe Record (rr@sco.com) + Initially based on info_sgi.cpp +*/ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + +#define INFO_DEV_SNDSTAT "/dev/sndstat" + +#include + +/* all following functions should return true, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + +bool GetInfo_ReadfromFile( QListView *lBox, char *Name, char splitchar ) +{ + QString str; + char buf[512]; + + QFile *file = new QFile(Name); + QListViewItem* olditem = 0; + + if(!file->open(IO_ReadOnly)) { + delete file; + return false; + } + + while (file->readLine(buf,sizeof(buf)-1) > 0) { + if (strlen(buf)) { + char *p=buf; + if (splitchar!=0) /* remove leading spaces between ':' and the following text */ + while (*p) { + if (*p==splitchar) { + *p++ = ' '; + while (*p==' ') ++p; + *(--p) = splitchar; + ++p; + } + else ++p; + } + + QString s1 = QString::fromLocal8Bit(buf); + QString s2 = s1.mid(s1.find(splitchar)+1); + + s1.truncate(s1.find(splitchar)); + if(!(s1.isEmpty() || s2.isEmpty())) + olditem = new QListViewItem(lBox, olditem, s1, s2); + } + } + file->close(); + + delete file; + return true; +} + +bool GetInfo_CPU( QListView *lBox ) +{ + char buf[256]; + + sysinfo(SI_ARCHITECTURE, buf, sizeof(buf)); + new QListViewItem(lBox, QString::fromLocal8Bit(buf)); + return true; +} + + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView *lBox ) +{ + char buf[256]; + + sysinfo(SI_BUSTYPES, buf, sizeof(buf)); + new QListViewItem(lBox, QString::fromLocal8Bit(buf)); + return true; +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView *lBox ) +{ + if ( GetInfo_ReadfromFile( lBox, INFO_DEV_SNDSTAT, 0 )) + return true; + else + return false; +} + +bool GetInfo_Devices( QListView * ) +{ + return false; +} + +bool GetInfo_SCSI( QListView * ) +{ + return false; +} + +bool GetInfo_Partitions( QListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + diff --git a/kcontrol/info/interrupts.desktop b/kcontrol/info/interrupts.desktop new file mode 100644 index 000000000..a18bde656 --- /dev/null +++ b/kcontrol/info/interrupts.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Exec=kcmshell interrupts +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/interrupts/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=irq +X-KDE-ParentApp=kinfocenter + +Name=Interrupts +Name[ar]=مفاتيح الإنقطاع +Name[az]=Kəsmələr +Name[be]=Перапыненні +Name[bg]=Прекъсвания +Name[bn]=ইনটরাপ্ট +Name[br]=Spanoù +Name[bs]=Interapti +Name[ca]=Interrupcions +Name[cs]=Přerušení +Name[csb]=Przerwania +Name[cy]=Ymyriadau +Name[el]=Διακοπές +Name[eo]=Interrompoj +Name[es]=Interrupciones +Name[et]=Katkestused +Name[eu]=Etenaldiak +Name[fa]=وقفه‌ها +Name[fi]=Keskeytykset +Name[fr]=Interruptions +Name[fy]=Underbrekkings +Name[ga]=Idirbhristeacha +Name[gl]=Interrupcións +Name[he]=פסיקה +Name[hi]=इंटरप्ट +Name[hr]=Presretanja +Name[hu]=Megszakítások +Name[is]=Ígrip +Name[it]=Interrupt +Name[ja]=割り込み +Name[ka]=წყვიტავს +Name[kk]=Үзілімдер +Name[km]=រំខាន +Name[ko]=인터럽트 +Name[lo]=ອິນເຕີຣັບ +Name[lt]=Pertrauktys +Name[lv]=Pārtraukumi +Name[mk]=Прекини +Name[mn]=Тасалдлууд +Name[ms]=Sampukan +Name[nb]=Avbruddslinjer +Name[ne]=रोकावट +Name[nn]=Avbrot +Name[nso]=Ditshitiso +Name[oc]=Interrupcions +Name[pa]=ਰੁਕਾਵਟ +Name[pl]=Przerwania +Name[pt]=Interrupções +Name[pt_BR]=Interrupções +Name[ro]=Întreruperi +Name[ru]=Прерывания +Name[rw]=Amarogoya +Name[se]=Gaskkaldumit +Name[sk]=Prerušenia +Name[sl]=Prekinitve +Name[sr]=Прекиди +Name[sr@Latn]=Prekidi +Name[sv]=Avbrott +Name[ta]=குறுக்கீடுகள் +Name[te]=ఇంటెరప్టులు +Name[tg]=Қатъ шудан +Name[th]=อินเตอร์รัพต์ +Name[tr]=Kesmeler +Name[tt]=Özderülär +Name[uk]=Перепини +Name[uz]=Toʻxtalishlar +Name[uz@cyrillic]=Тўхталишлар +Name[ven]=Dzithithiso +Name[vi]=Gián đoạn +Name[xh]=Iziphazamiso +Name[zh_CN]=中断 +Name[zh_TW]=中斷 +Name[zu]=Iziphazamiso + +Comment=Interrupt information +Comment[af]=Interrupt informasie +Comment[ar]=معلومات مفاتيح الإنقطاع +Comment[az]=Kəsmələr haqqında mə'lumat +Comment[be]=Інфармацыя аб перапыненнях +Comment[bg]=Информация за прекъсванията в системата +Comment[bn]=ইনটরাপ্ট তথ্য +Comment[br]=Titouroù diwar-benn ar spanoù +Comment[bs]=Informacije o interaptima +Comment[ca]=Informació de les interrupcions +Comment[cs]=Informace o přerušeních +Comment[csb]=Wëdowiédzô ò przerwaniach +Comment[cy]=Gwybodaeth Ymyriadau +Comment[da]=Interrupt-information +Comment[de]=Informationen zu Interrupts +Comment[el]=Πληροφορίες για τις διακοπές +Comment[eo]=Informo pri interrompoj +Comment[es]=Información sobre las interrupciones +Comment[et]=Katkestuste info +Comment[eu]=Etenaldiei buruzko informazioa +Comment[fa]=اطلاعات وقفه +Comment[fi]=Keskeytystietoja +Comment[fr]=Informations sur les interruptions +Comment[fy]=Underbrekking ynformaasje +Comment[gl]=Información das interrupcións +Comment[he]=מידע על בקשת הפסיקה +Comment[hi]=इंटरप्ट जानकारी +Comment[hr]=Podaci o presretanjima +Comment[hu]=A megszakítások jellemzői +Comment[id]=Informasi interrupt +Comment[is]=Upplýsingar um ígrip (IRQ) +Comment[it]=Informazioni sugli interrupt +Comment[ja]=割り込みの情報 +Comment[ka]=ინფორმაცია შეწყვეტყის შესახებ +Comment[kk]=Үзілім мәліметі +Comment[km]=ព័ត៌មាន​រំខាន +Comment[ko]=인터럽트 정보 +Comment[lo]=ຂໍ້ມູນອິນເຕີຣັບ +Comment[lt]=Pertraukčių informacija +Comment[lv]=Pārtraukumu informācija +Comment[mk]=Информации за прекините +Comment[mn]=Тасалдлын мэдээллүүд +Comment[ms]=Maklumat Sampukan +Comment[mt]=Informazzjoni dwar l-interrupts +Comment[nb]=Avbruddslinjeinformasjon +Comment[nds]=Interruptinformatschoon +Comment[ne]=रोकावट सूचना +Comment[nl]=Interrupt-informatie +Comment[nn]=Avbrotsinformasjon +Comment[nso]=Tshedimoso ya Tshitiso +Comment[oc]=Informacion de les interrupcions +Comment[pa]=ਰੁਕਾਵਟ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o przerwaniach +Comment[pt]=Informação das interrupções +Comment[pt_BR]=Informações sobre as interrupções +Comment[ro]=Informații despre întreruperile alocate +Comment[ru]=Сведения о прерываниях +Comment[rw]=Ibisobanuro by'irogoya +Comment[se]=Dieđut gaskkaldumiid birra +Comment[sk]=Informácie o prerušeniach +Comment[sl]=Podatki o prekinitvah +Comment[sr]=Информације о прекидима +Comment[sr@Latn]=Informacije o prekidima +Comment[sv]=Avbrottsinformation +Comment[ta]=குறுக்கீட்டுத தகவல் +Comment[te]=ఇంటెరప్ట్ సమాచారం +Comment[tg]=Ахборот дар бораи қатъ шавӣ +Comment[th]=ข้อมูลอินเตอร์รัพต์ +Comment[tr]=Kesmeler hakkında bilgi +Comment[tt]=Özgeçlär turında +Comment[uk]=Інформація щодо перепини +Comment[uz]=Toʻxtalish haqida maʼlumot +Comment[uz@cyrillic]=Тўхталиш ҳақида маълумот +Comment[ven]=U thithisa mafhungo +Comment[vi]=Thông tin về các gián đoạn +Comment[wa]=Informåcion so Interrupt +Comment[xh]=Phazamisa ulwazi +Comment[zh_CN]=中断信息 +Comment[zh_TW]=中斷資訊 +Comment[zu]=Ulwazi lweziphazamiso + +Keywords=Interrupts,IRQ,System Information +Keywords[af]=Interrupts,IRQ,System Informasie +Keywords[az]=Kəsmələr,IRQ,Sistem haqqında mə'lumat +Keywords[be]=Перапыненні,сістэмная інфармацыя,Interrupts,IRQ,System Information +Keywords[bg]=информация, система, системна, прекъсване, прекъсвания, програмни, Interrupts, IRQ, System Information +Keywords[br]=spanoù,IRQ,titouroù reizhiad +Keywords[bs]=Interrupts,IRQ,System Information,informacije o sustavu,interupti +Keywords[ca]=Interrupcions, IRQ, informació del sistema +Keywords[cs]=Přerušení,IRQ,Informace o systému +Keywords[csb]=Przerwania,IRQ,wëdowiédzô ò systemie +Keywords[cy]=Ymyriadau,IRQ,Gwybodaeth Cysawd +Keywords[da]=Interrupts,IRQ,Systeminformation +Keywords[de]=Interrupts,IRQ,Systeminformation +Keywords[el]=Διακοπές,IRQ,Πληροφορίες συστήματος +Keywords[eo]=Interrompoj,IRQ,sistemo,informo,operaciumo +Keywords[es]=Interrupciones,IRQ,Información del sistema +Keywords[et]=Katkestused,IRQ,Süsteemi informatsioon +Keywords[eu]=Etenaldiak,IRQ,Sistemaren informazioa +Keywords[fa]=وقفه‌ها، IRQ، اطلاعات سیستم +Keywords[fi]=Keskeytykset,IRQ,Järjestelmätiedot +Keywords[fr]=interruptions,IRQ,informations système,irq +Keywords[fy]=Underbrekkings,IRQ,systeemynformaasje +Keywords[gl]=Interrupcións,IRQ,Información do Sistema +Keywords[he]=בקשת פסיקה,מידע מערכת,IRQ,פסיקה,Interrupts,IRQ,System Information +Keywords[hi]=इंटरप्ट्स,आईआरक्यू,तंत्र जानकारी +Keywords[hr]=Interrupts,IRQ,System Information,Presretanja,Podaci o sustavu +Keywords[hu]=megszakítások,IRQ,rendszerinformáció +Keywords[id]=Interrupts,IRQ,Informasi Sistem +Keywords[is]=rofbeiðni,ígrip,IRQ,Interrupt,kerfi,upplýsingar +Keywords[it]=interrupt,IRQ,informazioni sul sistema +Keywords[ja]=割り込み,IRQ,システムの情報 +Keywords[ka]=წყვიტავს,IRQ,ინფორმაცია სისტემის შესახებ +Keywords[km]=រំខាន,IRQ,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[ko]=인터럽트,IRQ,시스템 정보 +Keywords[lo]=ອິນເຕີຣັບ,IRQ,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Pertrauktys,IRQ,Sistemos Informacija +Keywords[lv]=Pārtraukumi,IRQ,Sistēmas Informācija +Keywords[mk]=Interrupts,IRQ,System Information,Прекини,Информации за системот +Keywords[mn]=Тасалдлууд,IRQ,Системийн мэдээлэл +Keywords[nb]=Avbrudd,IRQ,Systeminformasjon +Keywords[nds]=Interrupts,IRQ,Systeeminformatschoon +Keywords[ne]=रोकावट, IRQ, प्रणाली सूचना +Keywords[nl]=interrupts,IRQ,systeeminformatie +Keywords[nn]=avbrot,IRQ,systeminformasjon +Keywords[nso]=Ditshitiso,IRQ,Tshedimoso ya System +Keywords[oc]=Interrupcions, IRQ, informacion dèu sistemo +Keywords[pa]=Interrupts,IRQ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਰੁਕਾਵਟ +Keywords[pl]=Przerwania,IRQ,informacja o systemie +Keywords[pt]=interrupções,IRQ,informações sobre o sistema +Keywords[pt_BR]=Interrupções,IRQ,Informações do sistema +Keywords[ro]=întreruperi,IRQ,informații despre sistem +Keywords[rw]=Amarogoya,IRQ,Amakuru Sisitemu +Keywords[se]=Gaskkaldumit,IRQ,vuogádatdieđut +Keywords[sk]=Prerušenia,IRQ,Systémové informácie +Keywords[sl]=prekinitve,IRQ,sistemski podatki +Keywords[sr]=Interrupts,IRQ,System Information,прекиди,системске информације +Keywords[sr@Latn]=Interrupts,IRQ,System Information,prekidi,sistemske informacije +Keywords[sv]=Avbrott,IRQ,Systeminformation +Keywords[ta]=குறுக்கீடுகள்,IRQ, கணினித் தகவல் +Keywords[te]=ఇంటెరప్ట్, ఐ ఆర్ క్యు, వ్యవస్థ సమాచారం +Keywords[th]=อินเตอร์รัพต์,IRQ,ข้อมูลระบบ +Keywords[tr]=Kesmeler,IRQ,Sistem hakkında bilgi +Keywords[uk]=перепини,interrupts,irq,system-information +Keywords[uz]=Toʻxtalishlar,IRQ,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Тўхталишлар,IRQ,Тизим ҳақида маълумот +Keywords[ven]=U thithisa,IRQ,Mafhungo a Sisitemu +Keywords[vi]=Gián đoạn,IRQ,Thông tin Hệ thống +Keywords[wa]=Interrupts,IRQ,informåcion do sistinme +Keywords[xh]=Iziphazamiso,IRQ,Ulwazi lwendlela +Keywords[zh_CN]=Interrupts,中断,IRQ,System Information,系统信息 +Keywords[zh_TW]=Interrupts,IRQ,System Information,中斷,系統資訊 +Keywords[zu]=Iziphazamiso,IRQ,Ulwazi lwesistimu + diff --git a/kcontrol/info/ioports.desktop b/kcontrol/info/ioports.desktop new file mode 100644 index 000000000..f66b81288 --- /dev/null +++ b/kcontrol/info/ioports.desktop @@ -0,0 +1,242 @@ +[Desktop Entry] +Exec=kcmshell ioports +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/ioports/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=ioports +X-KDE-ParentApp=kinfocenter + +Name=IO-Ports +Name[af]=Io-poorte +Name[ar]=منافذ الإدخال و الإخراج +Name[az]=G/Ç Qapıları +Name[be]=Парты ўводу/вываду +Name[bg]=Вход/изход +Name[br]=Porzhioù ED +Name[bs]=IO-Portovi +Name[ca]=Ports E/S +Name[cs]=Vstupně/výstupní-porty +Name[csb]=Pòrtë wéńdzeniô/wińdzeniô +Name[cy]=Pyrth-IO +Name[da]=IO-porte +Name[de]=Ein/Ausgabe-Ports +Name[el]=Θύρες Ι/Ο +Name[eo]=Eneligaj-pordoj +Name[es]=Puertos de E/S +Name[et]=IO pordid +Name[eu]=IO-atakak +Name[fa]=درگاههای ورودی خروجی +Name[fi]=IO-portit +Name[fr]=Ports d'entrées / sorties +Name[fy]=IO-Poarten +Name[ga]=Poirt I/A +Name[gl]=Portos de E/S +Name[he]=קלט־פלט +Name[hi]=आईओ-पोर्ट् +Name[hr]=IO portovi +Name[hu]=IO-portok +Name[id]=Port-IO +Name[is]=Inn-/úttaksport +Name[it]=Porte di I/O +Name[ja]=IO ポート +Name[ka]=IO–პორტები +Name[kk]=Енгізу-шығару порттары +Name[km]=ច្រក IO +Name[ko]=IO 포트 +Name[lo]=ພອດ IO +Name[lt]=IO-portai +Name[lv]=IO-Porti +Name[mk]=В/И-порти +Name[mn]=Оролт/Гаралтын-портууд +Name[ms]=Port IO +Name[nb]=IO-porter +Name[nds]=IO-Porten +Name[ne]=IO-पोर्ट +Name[nl]=IO-Poorten +Name[nn]=IU-portar +Name[nso]=Maboemong a IO +Name[oc]=Ports E/S +Name[pa]=IO-ਪੋਰਟ +Name[pl]=Porty wejścia/wyjścia +Name[pt]=Portos de E/S +Name[pt_BR]=Portas de E/S +Name[ro]=Porturi I/O +Name[ru]=Порты ввода/вывода +Name[rw]=Imiyoboro-IO +Name[se]=SO-verráhat +Name[sk]=V/V porty +Name[sl]=V/I vrata +Name[sr]=IO портови +Name[sr@Latn]=IO portovi +Name[ss]=Tikhungo te-IO +Name[sv]=I/O-portar +Name[ta]=IO-முனையங்கள் +Name[te]=ఐఓ-పోర్టులు +Name[tg]=Даргоҳҳои дохил/баромад +Name[th]=พอร์ตข้อมูลเข้า/ออก +Name[tr]=G/Ç Portları +Name[tt]=Kerü/Çığu Portları +Name[uk]=Порти В/В +Name[uz]=K/Ch portlar +Name[uz@cyrillic]=К/Ч портлар +Name[vi]=Cổng vào ra (VR) +Name[wa]=Pôrts I/R +Name[xh]=IO-Ufako +Name[zh_CN]=IO 端口 +Name[zu]=Izikhumulo-IO + +Comment=IO-port information +Comment[af]=Io-poort informasie +Comment[ar]=معلومات منافذ الإدخال و الإخارج +Comment[az]=Giriş Çıktı portları haqqında mə'lumat +Comment[be]=Інфармацыя аб партах уводу/вываду +Comment[bg]=Информация за входно-изходните портове +Comment[bn]=আই-ও পোর্ট সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar porzhioù ED +Comment[bs]=Informacije o IO-portovima +Comment[ca]=Informació dels ports E/S +Comment[cs]=Informace o vstupně/výstupních-portech +Comment[csb]=Wëdowiédzô ò pòrtach wéńdzeniô/wińdzeniô +Comment[cy]=Gwybodaeth Porth-IO +Comment[da]=IO-portinformation +Comment[de]=Informationen zu benutzten Ein/Ausgabe-Ports +Comment[el]=Πληροφορίες για τις θύρες εισόδου-εξόδου +Comment[eo]=Informo pri Eneligaj-pordoj +Comment[es]=Información sobre los puertos de E/S +Comment[et]=IO portide info +Comment[eu]=IO-atakei buruzko informazioa +Comment[fa]=اطلاعات درگاههای ورودی خروجی +Comment[fi]=IO-porttitiedot +Comment[fr]=Informations sur les ports d'entrées / sorties +Comment[fy]=IO-poarteynformaasje +Comment[ga]=Eolas faoi Phoirt I/A +Comment[gl]=Información dos portos de E/S +Comment[he]=מידע על יציאות הקלט־פלט +Comment[hi]=आईओ-पोर्ट् जानकारी +Comment[hr]=Podaci o IO portovima +Comment[hu]=A ki- és bemeneti portok jellemzői +Comment[id]=Informasi Port-IO +Comment[is]=Upplýsingar um inn-/úttaksport +Comment[it]=Informazioni sulle porte di I/O +Comment[ja]=IO ポートの情報 +Comment[ka]=ინფორმაცია IO–პორტების შესახებ +Comment[kk]=Енгізу-шығару порттар мәліметі +Comment[km]=ព័ត៌មាន​ច្រក IO +Comment[ko]=IO-주소 정보 +Comment[lo]=ຂໍ້ມູນພັອດ IO +Comment[lt]=IO-porto informacija +Comment[lv]=IO-portu informācija +Comment[mk]=Информации за влезно/излезните порти +Comment[mn]=Хэрэглэгдсэн Оролт/Гаралтын-портын мэдээлэл +Comment[ms]=Maklumat port IO +Comment[mt]=Informazzjoni dwar IO-port +Comment[nb]=IO-portinformasjon +Comment[nds]=IO-Port-Informatschoon +Comment[ne]=IO-पोर्ट सूचना +Comment[nl]=IO-poortinformatie +Comment[nn]=IU-port-informasjon +Comment[nso]=Tshedimoso ya maboemong a IO +Comment[oc]=Informacion dèus ports E/S +Comment[pa]=IO-ਪੋਰਟ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o portach wejścia/wyjścia +Comment[pt]=Informação sobre os portos de E/S +Comment[pt_BR]=Informações sobre as portas de E/S +Comment[ro]=Informații despre porturile I/O +Comment[ru]=Сведения о портах ввода/вывода +Comment[rw]=Ibisobanuro by'umuyoboro-IO +Comment[se]=SO-verráhatdieđut +Comment[sk]=Informácie o IO portoch +Comment[sl]=Podatki o vhodno/izhodnih vratih +Comment[sr]=Информације о IO портовима +Comment[sr@Latn]=Informacije o IO portovima +Comment[sv]=Information om I/O-portar +Comment[ta]=IO-முனைய தகவல் +Comment[te]=ఐఓ-పోర్టుల సమాచారం +Comment[tg]=Иттилооти даргоҳиҳои дохил/баромад +Comment[th]=ข้อมูลพอร์ตข้อมูลเข้า/ออก +Comment[tr]=Girdi Çıktı portları hakkında bilgi +Comment[tt]=Kerü/çığu portları turında +Comment[uk]=Інформація щодо портів вводу/виводу +Comment[uz]=Kirish/chiqish portlar haqida maʼlumot +Comment[uz@cyrillic]=Кириш/чиқиш портлар ҳақида маълумот +Comment[ven]=Mafhungo a IO-port +Comment[vi]=Thông tin về cổng VR +Comment[wa]=Informåcion so les pôrts d' Intrêye/Rexhowe +Comment[xh]=IO-ulwazi lwezibuko +Comment[zh_CN]=IO 端口信息 +Comment[zh_TW]=IO-Port 資訊 +Comment[zu]=Ulwazi lwe-isikhumulo-IO + +Keywords=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information +Keywords[af]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Informasie +Keywords[az]=GÇ,G/Ç,GÇ Qapıları,G/Ç Qapıları, Qapılar,GÇ-Aralığı,G/Ç-Aralığı,Sistem +Keywords[be]=Увод'вывад,парты ўводу/вываду,парты,сістэмная інфармацыя,IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information +Keywords[bg]=информация, система, системна, вход, входно, изход, изходно, порт, портове, IO, I/O, IO-Ports, I/O-Ports, Ports, IO-Range, I/O-Range, System Information +Keywords[br]=ED,E/D,porzhioù E/D,porzhioù,rummad ED,rummadE/D,titouroù ar reizhiad +Keywords[bs]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,IO-portovi,I/O-portovi,portovi,IO-raspon,I/O-raspon,informacije o sustavu +Keywords[ca]=ES,E/S,Ports d'ES,Ports d'E/S,Ports,Abast d'ES,Abast d'E/S,Informació del sistema +Keywords[cs]=IO,I/O,IO-porty,I/O-porty,Porty,Rozsah IO,Rozsah I/O,Informace o systému +Keywords[csb]=IO,I/O,pòrtë IO,pòrtë I/O,portë,òbjim IO,òbjim I/O,wëdowiédzô ò systemie +Keywords[cy]=IO,I/O,Pyrth-IO,Pyrth-I/O,Pyrth,Amrediad-IO,Amrediad-I/O,Gwybodaeth Cysawd +Keywords[da]=IO,I/O,IO-porte,I/O-Porte,Porte,IO-område,I/O-område,Systeminformation +Keywords[de]=Ein/Ausgabe,IO,I/O,IO-ports,I/O-Ports,Ports,IO-Bereich,I/O-Bereich,Systeminformation +Keywords[el]=ΕΕ,Ε/Ε,Θύρες ΕΕ,Θύρες Ε/Ε,Θύρες,Εύρος ΕΕ,Εύρος Ε/Ε,Πληροφορίες συστήματος +Keywords[eo]=IO,I/O,en,el,eneligo,pordoj,sistemo,operaciumo,informo +Keywords[es]=ES,E/S,Puertos de ES,Puertos de E/S,Puertos,Intervalo de ES,Intervalo de E/S,Información del sistema +Keywords[et]=IO,I/O,IO pordid,I/O pordid,pordid,IO piirkond,I/O piirkond,Süsteemi info +Keywords[eu]=IO,I/O,IO-atakak,Atakak,IO-barrutia,I/O-barrutia,Sistemaren informazioa +Keywords[fa]=ورودی خروجی، ورودی/خروجی، درگاههای ورودی خروجی، درگاهها، گسترۀ ورودی خروجی، گسترۀ ورودی/خروجی، اطلاعات سیستم +Keywords[fi]=IO,I/O,IO-Portit,I/O-Portit,Portit,I/O-alue,Järjestelmätiedot +Keywords[fr]=io,i/o,entrées-sorties,ports,ports d'entrées-sorties,informations système,plage d'entrées-sorties +Keywords[fy]=IO,I/O,IO-Ports,I/O-Ports,ports,IO-Range,I/O-Range,systeemynformaasje,IO-poarten +Keywords[gl]=IO,I/O,E/S,Portos IO,Portos E/S,Rango IO,Rango E/S,Información do Sistema +Keywords[he]=קלט־פלט,יציאות קלט־פלט,יציאות,טווח קלט־פלט,מידע,מערכת,IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information +Keywords[hi]=आईओ,आई/ओ,आईओ-पोर्ट्,आई/ओ-पोर्ट्,पोर्ट्,आईओ-रेंज,आई/ओ-रेंज,तंत्र जानकारी +Keywords[hr]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,IO portovi,IO raspon,Podaci o sustavu +Keywords[hu]=IO,I/O,IO-portok,I/O-portok,portok,IO-tartomány,I/O tartomány,rendszerinformáció +Keywords[id]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,Informasi Sistem +Keywords[is]=Inntak,úttak,I/O,Port,upplýsingar,kerfi +Keywords[it]=IO,I/O,porte di IO,porte di I/O,porte,intervallo di IO,intervallo di I/O,informazioni sul sistema +Keywords[ja]=IO,I/O,IO-ポート,I/O-ポート,ポート,IO-レンジ,I/O-レンジ,システムの情報 +Keywords[km]=IO,I/O,ច្រក IO,ច្រក I/O,ច្រក,ជួរ IO,ជួរ I/O,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lt]=IO,I/O,IO-Ports,IO-portai,I/O-Ports,I/O-prievadai,Ports,prievadai,IO-Range,IO zona,I/O-Range,I/O zona,System Information,sisteminė informacija +Keywords[lv]=IO,I/O,IO-Porti,I/O-Porti,Porti,IO-Diapazons,I/O-Diapazons,Sistēmas Informācija +Keywords[mk]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,ВИ,В/И,ВИ-порти,В/И-порти,Порти,В/И-опсег,В/И-опсег,Информации за системот +Keywords[mn]=Оролт/Гаралт,IO,I/O,IO-порт,I/O-Порт,Портууд,IO-талбар,I/O-талбар, Системийн мэдээлэл +Keywords[nb]=IO,I/O,IO-porter,I/O-porter,port,IO-område,I/O-område,IU,I/U,IU-porter,I/U-porter,port,IU-område,I/U-område,Systeminformasjon +Keywords[nds]=IO,I/O,IO-Porten,I/O-Porten,Porten,IO-Range,I/O-Range,IO-Rebeet,I/O-Rebeet,Systeeminformatschoon +Keywords[ne]=IO, I/O, IO-पोर्टहरू, I/O-पोर्टहरू, पोर्टहरू, IO-दायरा, आगत/निर्गत दायरा, प्रणाली सूचना +Keywords[nl]=IO,I/O,IO-Ports,I/O-Ports,ports,IO-Range,I/O-Range,systeeminformatie,IO-poorten +Keywords[nn]=IU,I/U,IO,I/O,IU-portar,I/U-portar,portar,IU-område,I/U-område,systeminformasjon +Keywords[nso]=IO,I/O,Maboemong a IO,Maboemong a I/O,Maboemong,IO-Range, Tshedimoso ya I/O-Range,Tshedimoso ya System +Keywords[oc]=ES,E/S,Ports d'ES,Ports d'E/S,Ports,Rang d'ES,Rang d'E/S,Informacion dèu sistemo +Keywords[pa]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=IO,I/O,porty IO,porty I/O,porty,zakres IO,zakres I/O,informacja o systemie +Keywords[pt]=ES,E/S,portos E/S,portos,gama de E/S,informações de sistema +Keywords[pt_BR]=ES,E/S,Portas E/S,Portas de E/S,Portas,Faixa de E/S,Faixa de E/S,Informações de sistema +Keywords[ro]=I/E,IE,IO,I/O,porturi IO,porturi,domeniu IO,domeniu I/O,informații despre sistem +Keywords[rw]=IO,I/O,Imiyoboro-IO,Imiyoboro-I/O,Imiyoboro,Igice-IO,Igice-I/O, Amakuru Sisitemu +Keywords[se]=SO,S/O,IO,I/O,SO-verráhat,S/O-verráhat,verráhat,SO-gaska,S/O-gaska, vuogádatdiehtu +Keywords[sk]=IO,I/O,IO-Ports,I/O-Porty,Porty,IO-Range,I/O-Range,Systém Informácie +Keywords[sl]=VI,V/I,V/I-vrata,VI-vrata,vrata,VI-obseg,V/I-obseg,informacije o sistemu +Keywords[sr]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,портови,порт,системске информације +Keywords[sr@Latn]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,portovi,port,sistemske informacije +Keywords[sv]=IO,I/O,IO-portar,I/O-portar,Ports,IO-område,I/O-område,Systeminformation +Keywords[ta]=IO,I/O,IO-முனையங்கள்,I/O-முனையங்கள்,முனையங்கள்,IO-நிலை,I/O-நிலை,அமைப்பு தகவல் +Keywords[th]=นำเข้านำออก,นำเข้า/นำออก,พอร์ตนำเข้านำออก,พอร์ตนำเข้า/นำออก,พอร์ต, แนวการนำเข้านำออก,แนวการนำเข้า/นำออก,ข้อมูลระบบ +Keywords[tr]=GÇ,G/Ç,GÇ Portları,G/Ç Portları, Portlar,GÇ-Aralığı,G/Ç-Aralığı,Sistem +Keywords[uk]=порти вводу/виводу,ВВ,в/в,порти,io,i/o,io-ports,i/p-ports,ports,system information +Keywords[uz]=K/Ch portlar,Portlar,K/Ch chegarasi,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=К/Ч портлар,Портлар,К/Ч чегараси,Тизим ҳақида маълумот +Keywords[ven]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,Mafhungo a Sisitemu +Keywords[vi]=VR,V/R,Cổng VR,Cổng V/R,Cổng,Vùng VR,Vùng VR,Thông tin Hệ thống +Keywords[wa]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,Sinformåcion do sistinme,I/R,poirts I/R,pôrts I/R,pôrts,poirts +Keywords[xh]=IO,I/O,IO-Amazibuko,I/O-Amazibuko,Amazibuko,IO-Beka ngendlela,Ulwazi lwendlela +Keywords[zh_CN]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,IO 端口,I/O 端口,端口,IO 范围,I/O 范围,系统信息 +Keywords[zh_TW]=IO,I/O,IO-Ports,Ports,IO-Range,I/O-Range,System Information,IO 範圍,I/O 範圍,系統資訊 +Keywords[zu]=IO,I/O,Izikhumulo-IO,Izikhumulo-I/O,Izikhumulo,IO-Umbandela,I/O-Umbandela, Ulwazi Lwesistimu + diff --git a/kcontrol/info/main.cpp b/kcontrol/info/main.cpp new file mode 100644 index 000000000..7992fbc37 --- /dev/null +++ b/kcontrol/info/main.cpp @@ -0,0 +1,151 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + + +#include "memory.h" + + +/* we have to include the info.cpp-file, to get the DEFINES about possible properties. + example: we need the "define INFO_CPU_AVAILABLE" */ +#include "info.cpp" + + +extern "C" +{ + + KDE_EXPORT KCModule *create_cpu(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_CPU_AVAILABLE + return new KInfoListWidget(i18n("Processor(s)"), parent, "kcminfo", GetInfo_CPU); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_irq(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_IRQ_AVAILABLE + return new KInfoListWidget(i18n("Interrupt"), parent, "kcminfo", GetInfo_IRQ); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_pci(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_PCI_AVAILABLE + return new KInfoListWidget(i18n("PCI"), parent, "kcminfo", GetInfo_PCI); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_dma(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_DMA_AVAILABLE + return new KInfoListWidget(i18n("DMA-Channel"), parent, "kcminfo", GetInfo_DMA); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_ioports(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_IOPORTS_AVAILABLE + return new KInfoListWidget(i18n("I/O-Port"), parent, "kcminfo", GetInfo_IO_Ports); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_sound(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_SOUND_AVAILABLE + return new KInfoListWidget(i18n("Soundcard"), parent, "kcminfo", GetInfo_Sound); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_scsi(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_SCSI_AVAILABLE + return new KInfoListWidget(i18n("SCSI"), parent, "kcminfo", GetInfo_SCSI); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_devices(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_DEVICES_AVAILABLE + return new KInfoListWidget(i18n("Devices"), parent, "kcminfo", GetInfo_Devices); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_partitions(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_PARTITIONS_AVAILABLE + return new KInfoListWidget(i18n("Partitions"), parent, "kcminfo", GetInfo_Partitions); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_xserver(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_XSERVER_AVAILABLE + return new KInfoListWidget(i18n("X-Server"), parent, "kcminfo", GetInfo_XServer_and_Video); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_memory(QWidget *parent, const char * /*name*/) + { + return new KMemoryWidget(parent, "kcminfo"); + } + + KDE_EXPORT KCModule *create_opengl(QWidget *parent, const char * ) + { +#ifdef INFO_OPENGL_AVAILABLE + return new KInfoListWidget(i18n("OpenGL"), parent, "kcminfo", GetInfo_OpenGL); +#else + return 0; +#endif + } + +/* create_cdinfo function for CD-ROM Info ~Jahshan */ + KDE_EXPORT KCModule *create_cdinfo(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_CD_ROM_AVAILABLE + return new KInfoListWidget(i18n("CD-ROM Info"), parent, "kcminfo", GetInfo_CD_ROM); +#else + return 0; +#endif + } + +} diff --git a/kcontrol/info/memory.cpp b/kcontrol/info/memory.cpp new file mode 100644 index 000000000..9743087dd --- /dev/null +++ b/kcontrol/info/memory.cpp @@ -0,0 +1,480 @@ +/* + * memory.cpp + * + * prints memory-information and shows a graphical display. + * + * Copyright (c) 1999-2002 Helge Deller + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * + */ + +#include /* for BSD */ + +#include +#include +#include +#include + +#include +#include +#include + +#include "memory.h" + +enum { /* entries for Memory_Info[] */ + TOTAL_MEM = 0, /* total physical memory (without swaps) */ + FREE_MEM, /* total free physical memory (without swaps) */ +#if !defined(__svr4__) || !defined(sun) +#if !defined(__NetBSD__) && !defined(__OpenBSD__) + SHARED_MEM, /* shared memory size */ + BUFFER_MEM, /* buffered memory size */ +#else + ACTIVE_MEM, + INACTIVE_MEM, +#endif +#endif + CACHED_MEM, /* cache memory size (located in ram) */ + SWAP_MEM, /* total size of all swap-partitions */ + FREESWAP_MEM, /* free memory in swap-partitions */ + MEM_LAST_ENTRY +}; + +/* + all update()-functions should put either + their results _OR_ the value NO_MEMORY_INFO into Memory_Info[] +*/ +static t_memsize Memory_Info[MEM_LAST_ENTRY]; + +#define MEMORY(x) ((t_memsize) (x)) /* it's easier... */ +#define NO_MEMORY_INFO MEMORY(-1) /* DO NOT CHANGE */ +#define ZERO_IF_NO_INFO(value) ((value) != NO_MEMORY_INFO ? (value) : 0) + + +/******************/ +/* Implementation */ +/******************/ + +static QLabel *MemSizeLabel[MEM_LAST_ENTRY][2]; + +enum { MEM_RAM_AND_HDD, MEM_RAM, MEM_HDD, MEM_LAST }; +static QWidget *Graph[MEM_LAST]; +static QLabel *GraphLabel[MEM_LAST]; + +#define SPACING 16 + +static QString formatted_unit(t_memsize value) +{ + if (value > (1024 * 1024)) + if (value > (1024 * 1024 * 1024)) + return i18n("%1 GB").arg(KGlobal::locale()->formatNumber(value / (1024 * 1024 * 1024.0), 2)); + else + return i18n("%1 MB").arg(KGlobal::locale()->formatNumber(value / (1024 * 1024.0), 2)); + else + return i18n("%1 KB").arg(KGlobal::locale()->formatNumber(value / 1024.0, 2)); +} + +KMemoryWidget::KMemoryWidget(QWidget * parent, const char *name) +: KCModule(parent, name) +{ + + KAboutData *about = + new KAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("KDE Panel Memory Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1998 - 2002 Helge Deller")); + + about->addAuthor("Helge Deller", 0, "deller@gmx.de"); + setAboutData( about ); + + QString title, initial_str; + QLabel *Widget = 0; + int i, j; + + ram_colors_initialized = + swap_colors_initialized = + all_colors_initialized = false; + + setButtons(Help); + + /* default string for no Information... */ + Not_Available_Text = i18n("Not available."); + + QVBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + QHBoxLayout *hbox = new QHBoxLayout(); + top->addLayout(hbox); + + /* stretch the left side */ + hbox->addStretch(); + + /* first create the Informationtext-Widget */ + QVBoxLayout *vbox = new QVBoxLayout(hbox, 0); + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) { + switch (i) { + case TOTAL_MEM: + title = i18n("Total physical memory:"); + break; + case FREE_MEM: + title = i18n("Free physical memory:"); + break; +#if !defined(__svr4__) || !defined(sun) +#if !defined(__NetBSD__) && !defined(__OpenBSD__) + case SHARED_MEM: + title = i18n("Shared memory:"); + break; + case BUFFER_MEM: + title = i18n("Disk buffers:"); + break; +#else + case ACTIVE_MEM: + title = i18n("Active memory:"); + break; + case INACTIVE_MEM: + title = i18n("Inactive memory:"); + break; +#endif +#endif + case CACHED_MEM: + title = i18n("Disk cache:"); + break; + case SWAP_MEM: + vbox->addSpacing(SPACING); + title = i18n("Total swap memory:"); + break; + case FREESWAP_MEM: + title = i18n("Free swap memory:"); + break; + default: + title = ""; + break; + }; + Widget = new QLabel(title, this); + Widget->setAlignment(AlignLeft); + vbox->addWidget(Widget, 1); + } + + /* then the memory-content-widgets */ + for (j = 0; j < 2; j++) { + vbox = new QVBoxLayout(hbox, 0); + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) { + if (i == SWAP_MEM) + vbox->addSpacing(SPACING); + Widget = new QLabel(this); + Widget->setAlignment(AlignRight); + MemSizeLabel[i][j] = Widget; + vbox->addWidget(Widget, 1); + } + } + + /* stretch the right side */ + hbox->addStretch(); + + KSeparator *line = new KSeparator(KSeparator::HLine, this); + top->addWidget(line); + + /* now the Graphics */ + QString hint; + hbox = new QHBoxLayout(top, 1); + for (i = MEM_RAM_AND_HDD; i < MEM_LAST; i++) { + hbox->addSpacing(SPACING); + vbox = new QVBoxLayout(hbox); + + switch (i) { + case MEM_RAM_AND_HDD: + title = i18n("Total Memory"); + hint = i18n("This graph gives you an overview of the " + "total sum of physical and virtual memory " + "in your system."); + break; + case MEM_RAM: + title = i18n("Physical Memory"); + hint = i18n("This graph gives you an overview of " + "the usage of physical memory in your system." + "

Most operating systems (including Linux) " + "will use as much of the available physical " + "memory as possible as disk cache, " + "to speed up the system performance. " + "

This means that if you have a small amount " + "of Free Physical Memory and a large amount of " + "Disk Cache Memory, your system is well " + "configured."); + break; + case MEM_HDD: + title = i18n("Swap Space"); + hint = i18n("The swap space is the virtual memory " + "available to the system. " + "

It will be used on demand and is provided " + "through one or more swap partitions and/or swap files."); + break; + default: + hint = title = QString::null; + break; + }; + + if (hint.length()) + hint = "" + hint + ""; + + Widget = new QLabel("" + title + "", this); + Widget->setAlignment(AlignCenter); + QToolTip::add(Widget, hint); + vbox->addWidget(Widget); + vbox->addSpacing(SPACING / 2); + + QWidget *g = new QWidget(this); + g->setMinimumWidth(2 * SPACING); + g->setMinimumHeight(3 * SPACING); + g->setBackgroundMode(NoBackground); + QToolTip::add(g, hint); // add the tooltip + Graph[i] = g; + vbox->addWidget(g, 2); + vbox->addSpacing(SPACING / 2); + + Widget = new QLabel(this); /* xx MB used. */ + Widget->setAlignment(AlignCenter); + QToolTip::add(Widget, hint); + GraphLabel[i] = Widget; + vbox->addWidget(Widget); + } + hbox->addSpacing(SPACING); + + timer = new QTimer(this); + timer->start(100); + QObject::connect(timer, SIGNAL(timeout()), this, + SLOT(update_Values())); + + update(); +} + +KMemoryWidget::~KMemoryWidget() +{ + /* stop the timer */ + timer->stop(); +} + + +QString KMemoryWidget::quickHelp() const +{ + return i18n("

Memory Information

" + " This display shows you the current memory usage of your system." + " The values are updated on a regular basis and give you an" + " overview of the physical and virtual used memory." ); +} + + +/* Graphical Memory Display */ +bool KMemoryWidget::Display_Graph(int widgetindex, + int count, + t_memsize total, + t_memsize * used, + QColor * color, + QString *text) +{ + QWidget *graph = Graph[widgetindex]; + int width = graph->width(); + int height = graph->height(); + QPixmap pm(width, height); + QPainter paint; + + paint.begin(&pm, this); + + QPen pen(QColor(0, 0, 0)); + + if (! ZERO_IF_NO_INFO(total)) { + paint.fillRect(1, 1, width - 2, height - 2, + QBrush(QColor(128, 128, 128))); + paint.setPen(pen); + paint.drawRect(graph->rect()); + GraphLabel[widgetindex]->setText(Not_Available_Text); + paint.end(); + bitBlt(graph, 0, 0, &pm); + return false; + } + + int startline = height-2; + int percent, localheight; + t_memsize last_used = 0; + + while (count--) { + last_used = *used; + +#ifdef HAVE_LONG_LONG + percent = (((long long)last_used) * 100) / total; +#else + /* prevent integer overflow with usage of double type */ + percent = (int) ((((double)last_used) * 100) / total); +#endif + + if (count) + localheight = ((height-2) * percent) / 100; + else + localheight = startline; + + if (localheight>0) { + paint.fillRect(1, startline, width-2, -localheight, *color); + + if (localheight >= SPACING) { + paint.drawText(0, startline-localheight, width, localheight, + AlignCenter | WordBreak, + QString("%1 %2%").arg(*text).arg(percent)); + } + } + + startline -= localheight; + + ++used; + ++color; + ++text; + } + + /* draw surrounding box */ + paint.setPen(pen); + QRect r = graph->rect(); + qDrawShadePanel(&paint, r.x(), r.y(), r.width(), r.height(), palette().active(), true, 1); + paint.end(); + bitBlt(graph, 0, 0, &pm); + + GraphLabel[widgetindex]->setText(i18n("%1 free").arg(formatted_unit(last_used))); + + return true; +} + +/* update_Values() is the main-loop for updating the Memory-Information */ +void KMemoryWidget::update_Values() +{ + int i; + bool ok1; + QLabel *label; + t_memsize used[5]; + + update(); /* get the Information from memory_linux, memory_fbsd */ + + /* update the byte-strings */ + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; i++) { + label = MemSizeLabel[i][0]; + if (Memory_Info[i] == NO_MEMORY_INFO) + label->clear(); + else + label->setText(i18n("%1 bytes ="). + arg(KGlobal::locale()-> + formatNumber(Memory_Info[i], 0))); + } + + /* update the MB-strings */ + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; i++) { + label = MemSizeLabel[i][1]; + label->setText((Memory_Info[i] != NO_MEMORY_INFO) + ? formatted_unit(Memory_Info[i]) + : Not_Available_Text); + } + + /* display graphical output (ram, hdd, at last: HDD+RAM) */ + /* be careful ! Maybe we have not all info available ! */ + + /* RAM usage: */ + /* don't rely on the SHARED_MEM value since it may refer to + * the size of the System V sharedmem in 2.4.x. Calculate instead! */ + + used[1] = 0; +#if !defined(__svr4__) || !defined(sun) +#if !defined(__NetBSD__) && !defined(__OpenBSD__) + used[1] = ZERO_IF_NO_INFO(Memory_Info[BUFFER_MEM]); +#endif +#endif + used[2] = ZERO_IF_NO_INFO(Memory_Info[CACHED_MEM]); + used[3] = ZERO_IF_NO_INFO(Memory_Info[FREE_MEM]); + used[0] = ZERO_IF_NO_INFO(Memory_Info[TOTAL_MEM]) - used[1] - used[2] - used[3]; + if (!ram_colors_initialized) { + ram_colors_initialized = true; + ram_text[0] = i18n("Application Data"); + ram_colors[0] = COLOR_USED_MEMORY; /* used+shared */ + ram_text[1] = i18n("Disk Buffers"); + ram_colors[1] = QColor(24,131,5); /* buffer */ + ram_text[2] = i18n("Disk Cache"); + ram_colors[2] = QColor(33,180,7); /* cached */ + ram_text[3] = i18n("Free Physical Memory"); + ram_colors[3] = COLOR_FREE_MEMORY; /* free */ + } + ok1 = Display_Graph(MEM_RAM, 4, Memory_Info[TOTAL_MEM], + used, ram_colors, ram_text); + + /* SWAP usage: */ + used[1] = ZERO_IF_NO_INFO(Memory_Info[FREESWAP_MEM]); + used[0] = ZERO_IF_NO_INFO(Memory_Info[SWAP_MEM]) - used[1]; + if (!swap_colors_initialized) { + swap_colors_initialized = true; + swap_text[0] = i18n("Used Swap"); + swap_colors[0] = COLOR_USED_SWAP; /* used */ + swap_text[1] = i18n("Free Swap"); + swap_colors[1] = COLOR_FREE_MEMORY; /* free */ + } + Display_Graph(MEM_HDD, 2, Memory_Info[SWAP_MEM], + used, swap_colors, swap_text); + + /* RAM + SWAP usage: */ + if (Memory_Info[SWAP_MEM] == NO_MEMORY_INFO || + Memory_Info[FREESWAP_MEM] == NO_MEMORY_INFO) + Memory_Info[SWAP_MEM] = Memory_Info[FREESWAP_MEM] = 0; + + used[1] = Memory_Info[SWAP_MEM] - Memory_Info[FREESWAP_MEM]; + used[2] = Memory_Info[FREE_MEM] + Memory_Info[FREESWAP_MEM]; + used[0] = (Memory_Info[TOTAL_MEM]+Memory_Info[SWAP_MEM])-used[1]-used[2]; + if (!all_colors_initialized) { + all_colors_initialized = true; + all_text[0] = i18n("Used Physical Memory"); + all_colors[0] = COLOR_USED_MEMORY; /* used ram */ + all_text[1] = i18n("Used Swap"); + all_colors[1] = COLOR_USED_SWAP; /* used swap */ + all_text[2] = i18n("Total Free Memory"); + all_colors[2] = COLOR_FREE_MEMORY; /* free ram+swap*/ + } + Display_Graph(MEM_RAM_AND_HDD, 3, + ok1 ? Memory_Info[TOTAL_MEM] + Memory_Info[SWAP_MEM] + : NO_MEMORY_INFO, + used, all_colors, all_text); +} + + +/* Include system-specific code */ + +#ifdef __linux__ +#include "memory_linux.cpp" +#elif defined(__APPLE__) +#include "memory_osx.cpp" +#elif defined(sgi) && sgi +#include "memory_sgi.cpp" +#elif defined(__svr4__) && defined(sun) +#include "memory_solaris.cpp" +#elif defined(__FreeBSD__) || defined(__DragonFly__) +#include "memory_fbsd.cpp" +#elif defined(__hpux) +#include "memory_hpux.cpp" +#elif defined(__NetBSD__) || defined(__OpenBSD__) +#include "memory_netbsd.cpp" +#elif __osf__ +#include "memory_tru64.cpp" +#else + +/* Default for unsupported systems */ +void KMemoryWidget::update() +{ + int i; + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) + Memory_Info[i] = NO_MEMORY_INFO; +} + +#endif +#include "memory.moc" diff --git a/kcontrol/info/memory.desktop b/kcontrol/info/memory.desktop new file mode 100644 index 000000000..f9aca9869 --- /dev/null +++ b/kcontrol/info/memory.desktop @@ -0,0 +1,248 @@ +[Desktop Entry] +Exec=kcmshell memory +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/memory/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=memory +X-KDE-ParentApp=kinfocenter + +Name=Memory +Name[af]=Geheue +Name[ar]=الذاكرة +Name[az]=Yaddaş +Name[be]=Памяць +Name[bg]=Памет +Name[bn]=মেমরি +Name[br]=Memor +Name[bs]=Memorija +Name[ca]=Memòria +Name[cs]=Paměť +Name[csb]=Pamiãc +Name[cy]=Cof +Name[da]=Hukommelse +Name[de]=Speicher +Name[el]=Μνήμη +Name[eo]=Memoro +Name[es]=Memoria +Name[et]=Mälu +Name[eu]=Memoria +Name[fa]=حافظه +Name[fi]=Muisti +Name[fr]=Mémoire +Name[fy]=Unthâld +Name[ga]=Cuimhne +Name[gl]=Memória +Name[he]=זיכרון +Name[hi]=मेमोरी +Name[hr]=Memorija +Name[hu]=Memória +Name[is]=Minni +Name[it]=Memoria +Name[ja]=メモリ +Name[ka]=მეხსიერება +Name[kk]=Жады +Name[km]=សតិ +Name[ko]=메모리 +Name[lo]=ຫນ່ວຍຄວາມຈຳ +Name[lt]=Atmintis +Name[lv]=Atmiņa +Name[mk]=Меморија +Name[mn]=Санах ой +Name[ms]=Ingatan +Name[mt]=Memorja +Name[nb]=Minne +Name[nds]=Spieker +Name[ne]=स्मृति +Name[nl]=Geheugen +Name[nn]=Minne +Name[nso]=Kelelo +Name[oc]=Memòria +Name[pa]=ਮੈਮੋਰੀ +Name[pl]=Pamięć +Name[pt]=Memória +Name[pt_BR]=Memória +Name[ro]=Memorie +Name[ru]=Память +Name[rw]=Umwanyabubiko +Name[se]=Muitu +Name[sk]=Pamäť +Name[sl]=Pomnilnik +Name[sr]=Меморија +Name[sr@Latn]=Memorija +Name[ss]=Inkhumbulo +Name[sv]=Minne +Name[ta]=நினைவு +Name[te]=మెమొరి +Name[tg]=Хотира +Name[th]=หน่วยความจำ +Name[tr]=Bellek +Name[tt]=Xäter +Name[uk]=Пам'ять +Name[uz]=Xotira +Name[uz@cyrillic]=Хотира +Name[ven]=Muhumbulo +Name[vi]=Bộ nhớ +Name[wa]=Memwere +Name[xh]=Inkumbulo +Name[zh_CN]=内存 +Name[zh_TW]=記憶體 +Name[zu]=Inkumbulo + +Comment=Memory information +Comment[af]=Geheue informasie +Comment[ar]=معلومات الذاكرة +Comment[az]=Yaddaş haqqında mə'lumat +Comment[be]=Інфармацыя аб памяці +Comment[bg]=Информация за системната памет +Comment[bn]=মেমরি সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar memor +Comment[bs]=Informacije o memoriji +Comment[ca]=Informació de la memòria +Comment[cs]=Informace o paměti +Comment[csb]=Wëdowiédzô ò pamiãcë +Comment[cy]=Gwybodaeth Cof +Comment[da]=Information om hukommelsen +Comment[de]=Informationen zum Speicher +Comment[el]=Πληροφορίες για τη Μνήμη +Comment[eo]=Informo pri memoro +Comment[es]=Información sobre la memoria +Comment[et]=Mäluga seotud info +Comment[eu]=Memoriari buruzko informazioa +Comment[fa]=اطلاعات حافظه +Comment[fi]=Tietoja muistista +Comment[fr]=Informations sur la mémoire +Comment[fy]=Unthâld ynformaasje +Comment[gl]=Información da memória +Comment[he]=מידע על הזיכרון +Comment[hi]=मेमोरी जानकारी +Comment[hr]=Podaci o memoriji +Comment[hu]=A memória jellemzői +Comment[id]=Informasi Memory +Comment[is]=Upplýsingar um vinnsluminni +Comment[it]=Informazioni sulla memoria +Comment[ja]=メモリの情報 +Comment[ka]=ინფორმაცია მეხსიერების შესახებ +Comment[kk]=Жад мәліметі +Comment[km]=ព័ត៌មាន​សតិ +Comment[ko]=메모리 정보 +Comment[lo]=ຂໍ້ມູນຫນ່ວຍຄວາມຈຳ +Comment[lt]=Atminties informacija +Comment[lv]=Atmiņas informācija +Comment[mk]=Информации за меморијата +Comment[mn]=Санах ойн мэдээлэл +Comment[ms]=Maklumat ingatan +Comment[mt]=Informazzjoni dwar memorja +Comment[nb]=Minneinformasjon +Comment[nds]=Informatschoon över den Spieker +Comment[ne]=स्मृति सूचना +Comment[nl]=Geheugeninformatie +Comment[nn]=Minneinformasjon +Comment[nso]=Tshedimoso ya Kelelo +Comment[oc]=Informacion de la memòria +Comment[pa]=ਮੈਮੋਰੀ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o pamięci +Comment[pt]=Informações sobre a memória +Comment[pt_BR]=Informações sobre memória +Comment[ro]=Informații despre utilizarea memoriei +Comment[ru]=Сведения о использовании памяти +Comment[rw]=Ibisobanuro by'umwanyabubiko +Comment[se]=Muitodiehtu +Comment[sk]=Informácie o pamäti +Comment[sl]=Podatki o pomnilniku +Comment[sr]=Информације о меморији +Comment[sr@Latn]=Informacije o memoriji +Comment[ss]=Umniningwane wenkhumbulo +Comment[sv]=Minnesinformation +Comment[ta]=நினைவுத் தகவல் +Comment[te]=మెమొరి సమాచారం +Comment[tg]=Иттилооти хотира +Comment[th]=ข้อมูลหน่วยความจำ +Comment[tr]=Bellek hakkında bilgi +Comment[tt]=Xäter turında +Comment[uk]=Інформація щодо пам'яті +Comment[uz]=Xotira haqida maʼlumot +Comment[uz@cyrillic]=Хотира ҳақида маълумот +Comment[ven]=Muhumbulo wa mafhungo +Comment[vi]=Thông tin về bộ nhớ +Comment[wa]=Informåcion sol memwere +Comment[xh]=Ulwazi lwenkumbulo +Comment[zh_CN]=内存信息 +Comment[zh_TW]=記憶體資訊資訊 +Comment[zu]=Ulwazi lwenkumbulo + +Keywords=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information +Keywords[af]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Informasie +Keywords[ar]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,الذاكرة,ذاكرة,لاذاكرة العشوائية,الذاكرة الافتراضية,الذاكرة المادية,الذاكرة المشتركة,التبديل, معلومات النظام +Keywords[az]=Yaddaş,RAM,Virtual yaddaş,Fiziki yaddaş,Paylaşılan yaddaş,Dəyiş-toqquş Haqqında Mə'lumat +Keywords[be]=Памяць,віртуальная памяць,фізічная памяць,падкачка,сістэмная інфармацыя,Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information +Keywords[bg]=информация, система, системна, памет, физическа, виртуална, кеш, реална, Memory, RAM, Virtual memory, Physical memory, Shared memory, Swap, System Information +Keywords[br]=memor,RAM,memor c'halloudel,memor fizikel,memor rannet,disloañ,titouroù reizhiad +Keywords[bs]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,memorija,fizička memorija,informacije o sustavu,dijeljena memorija +Keywords[ca]=Memòria,RAM,Memòria virtual,memòria física,memòria compartida,intercanvi,Informació del sistema +Keywords[cs]=Paměť,RAM,Virtuální paměť,Fyzická paměť,Sdílená paměť,Swap,Informace o systému +Keywords[csb]=pamiãc,RAM,wirtualnô pamiãc,fizycznô pamiãc,zbiérnô pamiãc,lopk wëmianë,particëjô wëmianë,wëdowiédzô ò systemie +Keywords[cy]=Cof,RAM,Cof rhith,Cof corfforol,Cof cyfrannol,Swap,Gwybodaeth Cysawd +Keywords[da]=Hukommelse,Ram,Virtuel hukommelse,Fysisk hukommelse,Delt hukommelse,Swap,Systeminformation +Keywords[de]=Speicher,RAM,Virtueller Speicher,Physischer Speicher,Shared Memory,Auslagerung,Swap,Systeminformation +Keywords[el]=Μνήμη,RAM,Εικονική μνήμη,Φυσική μνήμη,Μοιρασμένη μνήμη,Αντιμετάθεση,Πληροφορίες συστήματος +Keywords[eo]=memoro,RAM,virtuala,fizika,komunuza,sistemo,operaciumo,informo +Keywords[es]=Memoria,RAM,Memoria virtual,Memoria física,Memoria compartida,Swap,Intercambio,Información del sistema +Keywords[et]=Mälu,RAM,Virtuaalmälu,Füüsiline mälu,Jagatud mälu,Swap,Saaleala,Süsteemi info +Keywords[eu]=Memoria,RAM,Memoria birtuala,Memoria fisikoa,Partekatutako memoria, Swap,Sistemaren informazioa +Keywords[fa]=حافظه، حافظه با دستیابی تصادفی، حافظۀ مجازی، حافظۀ فیزیکی، حافظۀ مشترک، مبادله کردن، اطلاعات سیستم +Keywords[fi]=Muisti,RAM,Virtuaalimuisti,Fyysinen muisti,Jaettu muisti,Järjestelmätiedot +Keywords[fr]=mémoire,RAM,mémoire virtuelle,mémoire physique,mémoire partagée,swap,partition d'échange,informations système,ram +Keywords[fy]=memory,RAM,virtual memory,physical memory,shared memory,swap,systeemynformaasje,ûnthâld,wikselûnthâld,,virtueel ûnthâld,fysiek ûnthâld,dield ûnthâld, +Keywords[ga]=Cuimhne,RAM,Cuimhne fhíorúil,Cuimhne ábhartha,Comhchuimhne,Cuimhne bhabhtála,Eolas faoin Chóras +Keywords[gl]=Memória,RAM,Memória virtual,Memória física,Memória compartida,Swap,Intercámbio,Información do Sistema +Keywords[he]=זיכרון פנימי,זיכרון וירטואלי,זיכרון משותף,תחלופה,מידע, מערכת,RAM,זיכרון,Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information +Keywords[hi]=मेमोरी,रैम,आभासी मेमोरी,वास्तविक मेमोरी,साझेदारी मेमोरी,अदला-बदली(स्वैप),तंत्र जानकारी +Keywords[hr]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,Memorija,Virtualana memorija,Fizička memorija,Dijeljena memorija,Podaci o sustavu +Keywords[hu]=memória,RAM,virtuális memória,fizikai memória,megosztott memória,lapozómemória,lapozó,swap,rendszerinformáció +Keywords[id]=Memory,RAM,Memory Virtual,Memory fisik,memory shared,Swap,Informasi Sistem +Keywords[is]=Minni,vinnsluminni,sýndarminni,samnýtt minni,biðminni,diskminni,kerfi,upplýsingar +Keywords[it]=memoria,RAM,memoria virtuale,memoria fisica,memoria condivisa,swap,informazioni sul sistema +Keywords[ja]=メモリ,RAM,仮想メモリ,物理メモリ,共有メモリ, スワップ, システム情報 +Keywords[ka]=მეხსიერება,RAM,ვირტუალური მეხსეირება,ფიზიკური მეხსიერება,საერთო მეხსიერება,მიმოცვლის ფაილია,ინფორმაცია სისტემის შესახებ +Keywords[km]=សតិ,RAM,សតិ​និមិត្ត,សតិ​ពិត,សតិ​រួម,Swap,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lo]=ຫນ່ວຍຄວາມຈຳ,ແຣມ,ຫນ່ວຍຄວາມຈຳສະເຫມືອນ,ຫນ່ວຍຄວາມຈຳຈິງ,ຫນ່ວຍຄວາມຈຳທີ່ໃໍຊ້ຮ່ວມກັນ,ສະວອປ,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Memory,atmintis,RAM,atmintinė,Virtual memory,virtuali atmintis,Physical memory,fizinė atmintis,Shared memory,bendro naudojimo atmintis,Swap,System Information,sisteminė informacija +Keywords[lv]=Atmiņa,RAM,Virtuālā atmiņa,Fiziskā atmiņa,Koplietošanas atmiņa,Svaps,Sistēmas Informācija +Keywords[mk]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,Меморија,Виртуелна меморија,Физичка меморија,Заедничка меморија,Информации за системот +Keywords[mn]=Санах ой,RAM,Виртуал санах ой,Физик санах ой,Хамтарсан санах ой,Хадгалалт,Зөөлт,Системийн мэдээлэл +Keywords[nb]=Minne,RAM,Kunstig minne,Fysisk minne,Delt minne,Vekselsminne,Systeminformasjon +Keywords[nds]=Spieker,RAM,Virtuell Spieker,Physikaalsch Spieker,Deelt Spieker,Swap,Utlager-Spieker,utlagern,Systeeminformatschoon +Keywords[ne]=स्मृति, RAM, अवास्तविक स्मृति, भौतीक स्मृति, साझेदारी स्मृति, स्वाप, प्रणाली सूचना +Keywords[nl]=memory,RAM,virtual memory,physical memory,shared memory,swap,systeeminformatie,geheugen,wisselgeheugen,virtueel geheugen,fysiek geheugen,gedeeld geheugen +Keywords[nn]=minne,RAM,virtuelt minne,fysisk minne,delt minne,veksleminne,systeminformasjon +Keywords[nso]=Kelelo,RAM,Kelelo ye Maatla,Kelelo ya kantle,Kelelo yeo e abaganwego,Swap,Tshedimoso ya System +Keywords[oc]=Memòria,RAM,Memòria virtual,memòria física,memòria compartida,intercanvi,Informacion dèu sistemo +Keywords[pa]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,ਮੈਮੋਰੀ,ਭੌਤਿਕ ਮੈਮੋਰੀ,ਸਾਂਝੀ ਮੈਮੋਰੀ,ਸਵੈਪ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਰੈਮ +Keywords[pl]=pamięć,RAM,pamięć wirtualna,pamięć fizyczna,pamięć współdzielona,plik wymiany,partycja wymiany,informacja o systemie +Keywords[pt]=memória,RAM,memória virtual,memória física,memória partilhada,swap,informações do sistema +Keywords[pt_BR]=Memória,RAM,Memória virtual,Memória física,Memória compartilhada,Swap,Troca,Informações de sistema +Keywords[ro]=memorie,RAM,memorie virtuală,memorie fizică,memorie partajată,swap,informații despre sistem +Keywords[rw]=Umwanyabubiko,RAM,Umwanyabubiko utagaragara,Ububiko bufatika,Ububiko busangiwe,Guhinduranya,Ibisobanuro Sisitemu +Keywords[se]=muitu,RAM,virtuella muitu,fysálaš muitu,juohkojuvvon muitu,vuorromuitu, vuogádatdiehtu +Keywords[sk]=Pamäť,RAM,Virtuálna pamäť,zdieľaná pamäť,swap,Systémové informácie +Keywords[sl]=pomnilnik,RAM,navidezni pomnilnik,fizični pomnilnik,deljeni pomnilnik,izmenjalni prostor,informacije o sistemu +Keywords[sr]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,меморија,виртуелна меморија,физичка меморија,дељена меморија,системске информације +Keywords[sr@Latn]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,memorija,virtuelna memorija,fizička memorija,deljena memorija,sistemske informacije +Keywords[sv]=Minne,RAM,Virtuellt minne,Fysiskt minne,Delat minne,Swapp,Systeminformation +Keywords[ta]=நினைவகம், RAM,மய் நிகர் நினைவகம், பருநிலை நினைவகம், பகிர்வு நினைவகம், மாறுகொள், அமைப்புத்தகவல் +Keywords[th]=หน่วยความจำ,แรม,หน่วยความจำเสมือน,หน่วยความจำจริง,หน่วยความจำที่ใช้ร่วมกัน,สว้อป,ข้อมูลระบบ +Keywords[tr]=Bellek,RAM,Sanal bellek,Fiziksel bellek,Paylaşılan bellek,Takas,Sistem Hakkında Bilgi +Keywords[uk]=пам'ять,RAM,віртуальна пам'ять,фізична пам'ять,спільна пам'ять,свопінг,swap,інформація,система +Keywords[uz]=Xotira,RAM,Virtual xotira,Physical memory,Boʻlishilgan xotira,Svop,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Хотира,RAM,Виртуал хотира,Physical memory,Бўлишилган хотира,Своп,Тизим ҳақида маълумот +Keywords[ven]=Muhumbulo,RAM,Muhumbulo wa vitshuala,muhumbulo zwao,muhumbulo wo kovhekanywaho,swap,mafhungo a sisitemu +Keywords[vi]=Bộ nhớ,RAM,Bộ nhớ ảo,Bộ nhớ vật lý,Bộ nhớ dùng chung,Bộ nhỡ tráo đổi,Thông tin Hệ thống +Keywords[wa]=memwere,RAM,forveyowememwere,memwere fizike,pårtaedjeye memwere,Swap,informåcion do sistinme +Keywords[xh]=Inkumbulo,RAM,Inkumbulo yobume,Inkumbulo yomzimba,Inkumbulo yokwahlulelana,Ukutshintshiselana,Ulwazi lwendlela +Keywords[zh_CN]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,内存,虚拟存储,物理存储,共享内存,交换,系统信息 +Keywords[zh_TW]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,記憶體,虛擬記憶體,實體記憶體,共享記憶體,系統資訊 +Keywords[zu]=Inkumbulo,RAM,Inkumbulo yamanga,Inkumbulo siqu,Inkumbulo yokwabelana,Shintshanisa,Ulwazi Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/memory.h b/kcontrol/info/memory.h new file mode 100644 index 000000000..7f6778c75 --- /dev/null +++ b/kcontrol/info/memory.h @@ -0,0 +1,67 @@ +#ifndef _MEMORY_H_KDEINFO_INCLUDED_ +#define _MEMORY_H_KDEINFO_INCLUDED_ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef HAVE_LONG_LONG +/* better to use long-long, because some 32bit-machines have more total + memory (with swap) than just the 4GB which fits into a 32bit-long */ +typedef unsigned long long t_memsize; +#else +typedef unsigned long t_memsize; +#endif + +#define COLOR_USED_MEMORY QColor(255,0,0) +#define COLOR_USED_SWAP QColor(255,134,64) +#define COLOR_FREE_MEMORY QColor(127,255,212) + +class KMemoryWidget:public KCModule { + Q_OBJECT + + public: + KMemoryWidget(QWidget * parent, const char *name = 0); + ~KMemoryWidget(); + + QString quickHelp() const; + + private: + QString Not_Available_Text; + QTimer *timer; + + bool ram_colors_initialized, + swap_colors_initialized, + all_colors_initialized; + + QColor ram_colors[4]; + QString ram_text[4]; + + QColor swap_colors[2]; + QString swap_text[2]; + + QColor all_colors[3]; + QString all_text[3]; + + void update(); + + bool Display_Graph(int widgetindex, + int count, + t_memsize total, + t_memsize *used, + QColor *color, + QString *text); + public slots: + void update_Values(); +}; + + +#endif // _MEMORY_H_KDEINFO_INCLUDED_ + diff --git a/kcontrol/info/memory_fbsd.cpp b/kcontrol/info/memory_fbsd.cpp new file mode 100644 index 000000000..80a28749e --- /dev/null +++ b/kcontrol/info/memory_fbsd.cpp @@ -0,0 +1,89 @@ + +#include +#include +#include + +#include + +#include +#include +#include + +void KMemoryWidget::update() +{ + char blah[10], buf[80], *used_str, *total_str; + /* Stuff for sysctl */ + int memory; + size_t len; + /* Stuff for swap display */ + int used, total, _free; + FILE *pipe; + + len=sizeof(memory); + sysctlbyname("hw.physmem", &memory, &len, NULL, 0); + + snprintf(blah, 10, "%d", memory); + // Numerical values + + // total physical memory (without swap space) + Memory_Info[TOTAL_MEM] = MEMORY(memory); + + // added by Brad Hughes bhughes@trolltech.com + struct vmtotal vmem; + + #warning "FIXME: Memory_Info[CACHED_MEM]" + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; + + // The sysctls don't work in a nice manner under FreeBSD v2.2.x + // so we assume that if sysctlbyname doesn't return what we + // prefer, assume it's the old data types. FreeBSD prior + // to 4.0-R isn't supported by the rest of KDE, so what is + // this code doing here. + + len = sizeof(vmem); + if (sysctlbyname("vm.vmmeter", &vmem, &len, NULL, 0) == 0) + Memory_Info[SHARED_MEM] = MEMORY(vmem.t_armshr) * PAGE_SIZE; + else + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; + + int buffers; + len = sizeof (buffers); + if ((sysctlbyname("vfs.bufspace", &buffers, &len, NULL, 0) == -1) || !len) + Memory_Info[BUFFER_MEM] = NO_MEMORY_INFO; + else + Memory_Info[BUFFER_MEM] = MEMORY(buffers); + + // total free physical memory (without swap space) + int free; + len = sizeof (buffers); + if ((sysctlbyname("vm.stats.vm.v_free_count", &free, &len, NULL, 0) == -1) || !len) + Memory_Info[FREE_MEM] = NO_MEMORY_INFO; + else + Memory_Info[FREE_MEM] = MEMORY(free) * getpagesize(); + + // Q&D hack for swap display. Borrowed from xsysinfo-1.4 + if ((pipe = popen("/usr/sbin/pstat -ks", "r")) == NULL) { + used = total = 1; + return; + } + + fgets(buf, sizeof(buf), pipe); + fgets(buf, sizeof(buf), pipe); + fgets(buf, sizeof(buf), pipe); + fgets(buf, sizeof(buf), pipe); + pclose(pipe); + + strtok(buf, " "); + total_str = strtok(NULL, " "); + used_str = strtok(NULL, " "); + used = atoi(used_str); + total = atoi(total_str); + + _free=total-used; + + // total size of all swap-partitions + Memory_Info[SWAP_MEM] = MEMORY(total) * 1024; + + // free memory in swap-partitions + Memory_Info[FREESWAP_MEM] = MEMORY(_free) * 1024; +} diff --git a/kcontrol/info/memory_hpux.cpp b/kcontrol/info/memory_hpux.cpp new file mode 100644 index 000000000..4fefdfb35 --- /dev/null +++ b/kcontrol/info/memory_hpux.cpp @@ -0,0 +1,92 @@ +/* + + This file will be included by memory.cpp ! + + HP-UX is really ugly to retrieve information from ! + Implemented on 24.04.1999 by Helge Deller (deller@gmx.de) + Tested on an HP9000/715/64 under HPUX-10.20. + Updated for QT 2.0 on 27.04.1999 (deller) + + Sorry, but I don't know, who implemented the first (little) version of + update(), but it showed wrong sizes ! + + Many thanks goes also to Mike Romberg, who implemented such functions in + the program "xosview". Here's his copyright: + Copyright (c) 1994, 1995 by Mike Romberg ( romberg@fsl.noaa.gov ) + +*/ + +#include +#include +#include +#include + + +#define MAX_SWAP_AREAS 16 + +void KMemoryWidget::update() +{ + int page_size,i; + unsigned long total_mem, total_free, + total_physical, total_swap, free_physical, + used_physical, used_swap, free_swap; + + struct pst_static pststatic; + struct pst_dynamic stats; + struct pst_vminfo vmstats; + unsigned long fields_[4]; + struct pst_swapinfo swapinfo; + + pstat_getstatic( &pststatic, sizeof( struct pst_static ), (size_t)1, 0); + total_physical = pststatic.physical_memory; + page_size = (int)pststatic.page_size; + + pstat_getdynamic(&stats, sizeof( pst_dynamic ), (size_t)1, 0); + pstat_getvminfo(&vmstats, sizeof(vmstats), (size_t)1, 0); + + fields_[0] = stats.psd_rmtxt + stats.psd_arm; // TEXT + fields_[1] = stats.psd_rm - stats.psd_rmtxt; // USED + fields_[2] = total_physical - fields_[0] - fields_[1] - stats.psd_free; //OTHER + fields_[3] = stats.psd_free; // FREE + + used_physical = (total_physical - fields_[3]) * page_size; + total_physical *= page_size; + free_physical = (total_physical - used_physical); + + + /* Now check the SWAP-AREAS !! */ + + total_swap = free_swap = 0; + + for (i = 0 ; i < MAX_SWAP_AREAS ; i++) + { + pstat_getswap(&swapinfo, sizeof(swapinfo), (size_t)1, i); + if (swapinfo.pss_idx == (unsigned)i) + { + swapinfo.pss_nfpgs *= 4; // nfpgs is in 512 Byte Blocks.... + if (swapinfo.pss_nblksenabled == 0) // == 0 ?? + swapinfo.pss_nblksenabled = swapinfo.pss_nfpgs; + total_swap += (((unsigned long)swapinfo.pss_nblksenabled) * 1024); + free_swap += (((unsigned long)swapinfo.pss_nfpgs ) * 1024); + } + } + + used_swap = total_swap - free_swap; + + + /* Now display the results */ + + total_mem = total_physical; // + total_swap; + total_free = (total_physical - used_physical);// + free_swap; + + Memory_Info[TOTAL_MEM] = MEMORY(total_mem); // total physical memory (without swaps) + Memory_Info[FREE_MEM] = MEMORY(total_free);// total free physical memory (without swaps) + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; /* FIXME ?? */ + Memory_Info[BUFFER_MEM] = MEMORY(fields_[2])*page_size; /* FIXME ?? */ + Memory_Info[SWAP_MEM] = MEMORY(total_swap); // total size of all swap-partitions + Memory_Info[FREESWAP_MEM] = MEMORY(free_swap); // free memory in swap-partitions +#ifdef __GNUC__ +#warning "FIXME: Memory_Info[CACHED_MEM]" +#endif + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram +} diff --git a/kcontrol/info/memory_linux.cpp b/kcontrol/info/memory_linux.cpp new file mode 100644 index 000000000..c393c01e7 --- /dev/null +++ b/kcontrol/info/memory_linux.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +void KMemoryWidget::update() +{ + struct sysinfo info; + + sysinfo(&info); /* Get Information from system... */ + + /* + * The sysinfo.mem_unit member variable is not available in older 2.4 kernels. + * If you have troubles compiling this code, set mem_unit to "1". + */ + + const int mem_unit = info.mem_unit; + + Memory_Info[TOTAL_MEM] = MEMORY(info.totalram) * mem_unit; // total physical memory (without swaps) + Memory_Info[FREE_MEM] = MEMORY(info.freeram) * mem_unit; // total free physical memory (without swaps) + Memory_Info[SHARED_MEM] = MEMORY(info.sharedram) * mem_unit; + Memory_Info[BUFFER_MEM] = MEMORY(info.bufferram) * mem_unit; + Memory_Info[SWAP_MEM] = MEMORY(info.totalswap) * mem_unit; // total size of all swap-partitions + Memory_Info[FREESWAP_MEM] = MEMORY(info.freeswap) * mem_unit; // free memory in swap-partitions + + QFile file("/proc/meminfo"); + if (file.open(IO_ReadOnly)) { + char buf[512]; + while (file.readLine(buf, sizeof(buf) - 1) > 0) { + if (strncmp(buf,"Cached:",7)==0) { + unsigned long v; + v = strtoul(&buf[7],NULL,10); + Memory_Info[CACHED_MEM] = MEMORY(v) * 1024; // Cached memory in RAM + } + } + file.close(); + } +} + diff --git a/kcontrol/info/memory_netbsd.cpp b/kcontrol/info/memory_netbsd.cpp new file mode 100644 index 000000000..39beeaa33 --- /dev/null +++ b/kcontrol/info/memory_netbsd.cpp @@ -0,0 +1,114 @@ + +#include +#if __NetBSD_Version__ > 103080000 +#define UVM +#endif +#if defined(__OpenBSD__) +#define UVM +#endif + +#include +#include +#include +#include +#ifdef UVM +#include +#else +#include +#endif + +void KMemoryWidget::update() +{ + int mib[2]; + size_t len; +#ifdef UVM +#if __NetBSD_Version__ > 499000100 /* 4.99.2+ */ + struct uvmexp_sysctl uvmexp; +#else + struct uvmexp uvmexp; +#endif +#else /* !UVM */ + struct swapent *swaplist; + int64_t nswap, rnswap, totalswap, freeswap, usedswap; +#endif +#if __NetBSD_Version__ > 106170000 /* 1.6Q+ */ + quad_t memory; +#else + int memory; +#endif + + /* memory */ +#if __NetBSD_Version__ > 106170000 /* 1.6Q+ */ + mib[0] = CTL_HW; + mib[1] = HW_PHYSMEM64; +#else + mib[0] = CTL_HW; + mib[1] = HW_PHYSMEM; +#endif + len = sizeof(memory); + if( sysctl(mib,2,&memory,&len,NULL,0)< 0 ) + Memory_Info[TOTAL_MEM] = NO_MEMORY_INFO; + else + Memory_Info[TOTAL_MEM] = memory; + +#ifdef UVM + mib[0] = CTL_VM; +#if __NetBSD_Version__ > 499000100 /* 4.99.2+ */ + mib[1] = VM_UVMEXP2; +#else + mib[1] = VM_UVMEXP; +#endif + len = sizeof(uvmexp); + if ( sysctl(mib, 2, &uvmexp, &len, NULL, 0) < 0 ) { + Memory_Info[FREE_MEM] = NO_MEMORY_INFO; + Memory_Info[ACTIVE_MEM] = NO_MEMORY_INFO; + Memory_Info[INACTIVE_MEM] = NO_MEMORY_INFO; + Memory_Info[SWAP_MEM] = NO_MEMORY_INFO; + Memory_Info[FREESWAP_MEM] = NO_MEMORY_INFO; + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; + } else { + t_memsize pgsz = MEMORY(uvmexp.pagesize); + Memory_Info[FREE_MEM] = pgsz * uvmexp.free; + Memory_Info[ACTIVE_MEM] = pgsz * uvmexp.active; + Memory_Info[INACTIVE_MEM] = pgsz * uvmexp.inactive; + Memory_Info[SWAP_MEM] = pgsz * uvmexp.swpages; + Memory_Info[FREESWAP_MEM] = pgsz * (uvmexp.swpages - uvmexp.swpginuse); +#if __NetBSD_Version__ > 106000000 + Memory_Info[CACHED_MEM] = pgsz * (uvmexp.filepages + uvmexp.execpages); +#else + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; +#endif + } +#else + Memory_Info[FREE_MEM] = NO_MEMORY_INFO; + Memory_Info[ACTIVE_MEM] = NO_MEMORY_INFO; + Memory_Info[INACTIVE_MEM] = NO_MEMORY_INFO; + + /* swap */ + totalswap = freeswap = usedswap = 0; + nswap = swapctl(SWAP_NSWAP,0,0); + if ( nswap > 0 ) { + if ( (swaplist = (struct swapent *)malloc(nswap * sizeof(*swaplist))) ) { + rnswap = swapctl(SWAP_STATS,swaplist,nswap); + if ( rnswap < 0 || rnswap > nswap ) + totalswap = freeswap = -1; /* Error */ + else { + while ( rnswap-- > 0 ) { + totalswap += swaplist[rnswap].se_nblks; + usedswap += swaplist[rnswap].se_inuse; + } + freeswap = totalswap - usedswap; + } + } else + totalswap = freeswap = -1; /* Error */ + + if ( totalswap == -1 ) { + Memory_Info[SWAP_MEM] = NO_MEMORY_INFO; + Memory_Info[FREESWAP_MEM] = NO_MEMORY_INFO; + } else { + Memory_Info[SWAP_MEM] = MEMORY(totalswap); + Memory_Info[FREESWAP_MEM] = MEMORY(freeswap); + } + } +#endif +} diff --git a/kcontrol/info/memory_osx.cpp b/kcontrol/info/memory_osx.cpp new file mode 100644 index 000000000..9c18c4a6e --- /dev/null +++ b/kcontrol/info/memory_osx.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2003 Benjamin Reed + * + * memory_osx.cpp is part of the KDE program kcminfo. Copied wholesale + * from memory_fbsd.cpp =) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void KMemoryWidget::update() +{ + + vm_statistics_data_t vm_info; + mach_msg_type_number_t info_count; + DIR *dirp; + struct dirent *dp; + t_memsize total; + + info_count = HOST_VM_INFO_COUNT; + if (host_statistics(mach_host_self (), HOST_VM_INFO, (host_info_t)&vm_info, &info_count)) { + kdDebug() << "could not get memory statistics" << endl; + return; + } + + Memory_Info[TOTAL_MEM] = MEMORY(vm_info.active_count + vm_info.inactive_count + + vm_info.free_count + vm_info.wire_count) * vm_page_size; + Memory_Info[FREE_MEM] = MEMORY(vm_info.free_count) * vm_page_size; + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; + Memory_Info[BUFFER_MEM] = NO_MEMORY_INFO; + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; + + dirp = opendir("/private/var/vm"); + if (!dirp) { + kdDebug() << "unable to open /private/var/vm" << endl; + return; + } + + total = 0; + + while ((dp = readdir (dirp)) != NULL) { + struct stat sb; + char fname [MAXNAMLEN]; + + if (strncmp (dp->d_name, "swapfile", 8)) + continue; + + strcpy (fname, "/private/var/vm/"); + strcat (fname, dp->d_name); + if (stat (fname, &sb) < 0) + continue; + + total += sb.st_size; + } + closedir (dirp); + + info_count = HOST_VM_INFO_COUNT; + if (host_statistics (mach_host_self (), HOST_VM_INFO, + (host_info_t) &vm_info, &info_count)) { + kdDebug() << "unable to get VM info" << endl; + } + + Memory_Info[SWAP_MEM] = total; + // off_t used = (vm_info.pageouts - vm_info.pageins) * vm_page_size; + Memory_Info[FREESWAP_MEM] = NO_MEMORY_INFO; + + /* free = MEMORY(vm_info.free_count) * vm_page_size; + used = MEMORY(vm_info.active_count) * vm_page_size; + total = MEMORY(vm_info.active_count + vm_info.inactive_count + + vm_info.free_count + vm_info.wire_count) * vm_page_size; */ + +} diff --git a/kcontrol/info/memory_sgi.cpp b/kcontrol/info/memory_sgi.cpp new file mode 100644 index 000000000..2bc0d0c65 --- /dev/null +++ b/kcontrol/info/memory_sgi.cpp @@ -0,0 +1,75 @@ + +#include +#include +#include +#include + +// The following define is needed for SGI IRIX 6.2 +#define _KMEMUSER +#include + +#include +#include + +#ifndef UBSIZE +#define UBSIZE 512 +#endif + + +void KMemoryWidget::update() +{ + int pagesize = getpagesize(); + + struct rminfo rmi; + if( sysmp(MP_SAGET, MPSA_RMINFO, &rmi, sizeof(rmi)) == -1 ) + return; + Memory_Info[TOTAL_MEM] = MEMORY(rmi.physmem) * pagesize; // total physical memory (without swaps) + Memory_Info[FREE_MEM] = MEMORY(rmi.freemem) * pagesize; // total free physical memory (without swaps) + Memory_Info[BUFFER_MEM] = MEMORY(rmi.bufmem) * pagesize; + + + //FIXME: Memory_Info[CACHED_MEM]" + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram + + long val; + swapctl(SC_GETSWAPTOT, &val); + Memory_Info[SWAP_MEM] = MEMORY(val) * UBSIZE; // total size of all swap-partitions + + swapctl(SC_GETFREESWAP, &val); + Memory_Info[FREESWAP_MEM] = MEMORY(val) * UBSIZE; // free memory in swap-partitions + +#ifndef MPKA_SHMINFO + /* Irix 6.5 (also 6.4?) */ + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; +#else + FILE *kmem = fopen("/dev/kmem", "r"); + if( kmem == 0 ) { + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; + return; + } + + long shmip = sysmp(MP_KERNADDR, MPKA_SHMINFO); + fseek( kmem, shmip, 0 ); + struct shminfo shmi; + fread( &shmi, sizeof(shmi), 1, kmem ); + + long shmem = sysmp(MP_KERNADDR, MPKA_SHM); + + val = 0; + long pos; + struct shmid_ds shmid; + for( int i=0 ; i + */ + +#include +#include +#include + +/* Stop from crapping out on 32-bit architectures. */ + +#if !defined(_LP64) && _FILE_OFFSET_BITS == 64 +# undef _FILE_OFFSET_BITS +# define _FILE_OFFSET_BITS 32 +#endif + +#include +#include +#include + +#define PAGETOK(a) (( (t_memsize) sysconf( _SC_PAGESIZE )) * (t_memsize) a) + +void KMemoryWidget::update() { + + kstat_ctl_t *kctl; + kstat_t *ksp; + kstat_named_t *kdata; + + /* + * get a kstat handle first and update the user's kstat chain + */ + if( (kctl = kstat_open()) == NULL ) + return; + while( kstat_chain_update( kctl ) != 0 ) + ; + + /* + * traverse the kstat chain to find the appropriate kstat + */ + if( (ksp = kstat_lookup( kctl, "unix", 0, "system_pages" )) == NULL ) + return; + + if( kstat_read( kctl, ksp, NULL ) == -1 ) + return; + + /* + * lookup the data + */ +#if 0 + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "physmem" ); + if( kdata != NULL ) { + Memory_Info[TOTAL_MEM] = PAGETOK(kdata->value.ui32); + } +#endif + Memory_Info[TOTAL_MEM] = PAGETOK(sysconf(_SC_PHYS_PAGES)); + + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "freemem" ); + if( kdata != NULL ) + Memory_Info[FREE_MEM] = PAGETOK(kdata->value.ui32); + +#warning "FIXME: Memory_Info[CACHED_MEM]" + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram + + kstat_close( kctl ); + + /* + * Swap Info + */ + + struct anoninfo am_swap; + long swaptotal; + long swapfree; + long swapused; + + swaptotal = swapused = swapfree = 0L; + + /* + * Retrieve overall swap information from anonymous memory structure - + * which is the same way "swap -s" retrieves it's statistics. + * + * swapctl(SC_LIST, void *arg) does not return what we are looking for. + */ + + if (swapctl(SC_AINFO, &am_swap) == -1) + return; + + swaptotal = am_swap.ani_max; + swapused = am_swap.ani_resv; + swapfree = swaptotal - swapused; + + Memory_Info[SWAP_MEM] = PAGETOK(swaptotal); + Memory_Info[FREESWAP_MEM] = PAGETOK(swapfree); +} diff --git a/kcontrol/info/memory_tru64.cpp b/kcontrol/info/memory_tru64.cpp new file mode 100644 index 000000000..667ffbcca --- /dev/null +++ b/kcontrol/info/memory_tru64.cpp @@ -0,0 +1,83 @@ +/* + * This is memory_tru64.cpp to retrieve memory information under Tru64/Alpha. + * + * Implemented by Tom Leitner, Tom@radar.tu-graz.ac.at + * + * WARNING: This module requires linking with -lmach + * + * This routine is based on m_decosf1.c from the "top" program written by: + * + * AUTHOR: Anthony Baxter, + * + */ + +#include +#include +#include +#include +#include +#include +extern "C" { +#include +} +#include + +#define pagetob(size) (MEMORY(1024L) * ((long) (size) << (long) pageshift)) +#define LOG1024 10 + +extern "C" void vm_statistics(task_t, vm_statistics_data_t*); + +void KMemoryWidget::update() +{ + int pageshift; /* log base 2 of the pagesize */ + register int pagesize; + vm_statistics_data_t vmstats; + int swap_pages=0,swap_free=0,i; + struct tbl_swapinfo swbuf; + + /* get the page size with "getpagesize" and calculate pageshift from it */ + + pagesize = getpagesize(); + pageshift = 0; + while (pagesize > 1) { + pageshift++; + pagesize >>= 1; + } + + /* we only need the amount of log(2)1024 for our conversion */ + + pageshift -= LOG1024; + + /* memory information */ + /* this is possibly bogus - we work out total # pages by */ + /* adding up the free, active, inactive, wired down, and */ + /* zero filled. Anyone who knows a better way, TELL ME! */ + /* Change: dont use zero filled. */ + + (void) ::vm_statistics(::task_self(), &vmstats); + + /* thanks DEC for the table() command. No thanks at all for */ + /* omitting the man page for it from OSF/1 1.2, and failing */ + /* to document SWAPINFO in the 1.3 man page. Lets hear it for */ + /* include files. */ + + i=0; + while(table(TBL_SWAPINFO,i,&swbuf,1,sizeof(struct tbl_swapinfo))>0) { + swap_pages += swbuf.size; + swap_free += swbuf.free; + i++; + } + Memory_Info[TOTAL_MEM] = pagetob((vmstats.free_count + + vmstats.active_count + + vmstats.inactive_count + + vmstats.wire_count)); + Memory_Info[FREE_MEM] = pagetob(vmstats.free_count); + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; /* FIXME ?? */ + Memory_Info[BUFFER_MEM] = NO_MEMORY_INFO; /* FIXME ?? */ +#ifdef __GNUC__ +#warning "FIXME: Memory_Info[CACHED_MEM]" +#endif + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; /* cached memory in ram */ + Memory_Info[SWAP_MEM] = pagetob(swap_pages); + Memory_Info[FREESWAP_MEM] = pagetob(swap_free); +} diff --git a/kcontrol/info/opengl.cpp b/kcontrol/info/opengl.cpp new file mode 100644 index 000000000..66266abdf --- /dev/null +++ b/kcontrol/info/opengl.cpp @@ -0,0 +1,673 @@ +/*************************************************************************** + * * + * Copyright (C) 2004 by Ilya Korniyko * + * Adapted from Brian Paul's glxinfo from Mesa demos (http:/www.mesa3d.org) + * Copyright (C) 1999-2002 Brian Paul * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#if defined(INFO_OPENGL_AVAILABLE) + +#define KCMGL_DO_GLU + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#ifdef KCMGL_DO_GLU +#include +#endif + +#include +#include +#include + +#include +#include +#include + +static bool IsDirect; + +static struct glinfo { + const char *serverVendor; + const char *serverVersion; + const char *serverExtensions; + const char *clientVendor; + const char *clientVersion; + const char *clientExtensions; + const char *glxExtensions; + const char *glVendor; + const char *glRenderer; + const char *glVersion; + const char *glExtensions; + const char *gluVersion; + const char *gluExtensions; + char *displayName; +} gli; + +static struct { + QString module, + pci, + vendor, + device, + subvendor, + rev; +} dri_info; + +static int ReadPipe(QString FileName, QStringList &list) +{ + FILE *pipe; + + if ((pipe = popen(FileName.ascii(), "r")) == NULL) { + pclose(pipe); + return 0; + } + + QTextStream t(pipe, IO_ReadOnly); + + while (!t.atEnd()) list.append(t.readLine()); + + pclose(pipe); + return list.count(); +} + +#if defined(Q_OS_LINUX) + +#define INFO_DRI "/proc/dri/0/name" + +static bool get_dri_device() +{ + QFile file; + file.setName(INFO_DRI); + if (!file.exists() || !file.open(IO_ReadOnly)) + return false; + + QTextStream stream(&file); + QString line = stream.readLine(); + if (!line.isEmpty()) { + dri_info.module = line.mid(0, line.find(0x20)); + + // possible formats, for regression testing + // line = " PCI:01:00:0"; + // line = " pci:0000:01:00.0" + QRegExp rx = QRegExp("\\b[Pp][Cc][Ii][:]([0-9a-fA-F]+[:])?([0-9a-fA-F]+[:][0-9a-fA-F]+[:.][0-9a-fA-F]+)\\b"); + if (rx.search(line)>0) { + dri_info.pci = rx.cap(2); + int end = dri_info.pci.findRev(':'); + int end2 = dri_info.pci.findRev('.'); + if (end2>end) end=end2; + dri_info.pci[end]='.'; + + QString cmd = QString("lspci -m -v -s ") + dri_info.pci; + QStringList pci_info; + int num; + if (((num = ReadPipe(cmd, pci_info)) || + (num = ReadPipe("/sbin/"+cmd, pci_info)) || + (num = ReadPipe("/usr/sbin/"+cmd, pci_info)) || + (num = ReadPipe("/usr/local/sbin/"+cmd, pci_info))) && num>=7) { + for (int i=2; i<=6; i++) { + line = pci_info[i]; + line.remove(QRegExp("[^:]*:[ ]*")); + switch (i){ + case 2: dri_info.vendor = line; break; + case 3: dri_info.device = line; break; + case 4: dri_info.subvendor = line; break; + case 6: dri_info.rev = line; break; + } + } + return true; + } + } + } + + return false; +} + +#elif defined(Q_OS_FREEBSD) + +static bool get_dri_device() { + + QStringList pci_info; + if (ReadPipe("sysctl -n hw.dri.0.name",pci_info)) { + dri_info.module = pci_info[0].mid(0, pci_info[0].find(0x20)); + } + return false; +} + +#else + +static bool get_dri_device() { return false; } + +#endif + +static void +mesa_hack(Display *dpy, int scrnum) +{ + static int attribs[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DEPTH_SIZE, 1, + GLX_STENCIL_SIZE, 1, + GLX_ACCUM_RED_SIZE, 1, + GLX_ACCUM_GREEN_SIZE, 1, + GLX_ACCUM_BLUE_SIZE, 1, + GLX_ACCUM_ALPHA_SIZE, 1, + GLX_DOUBLEBUFFER, + None + }; + XVisualInfo *visinfo; + + visinfo = glXChooseVisual(dpy, scrnum, attribs); + if (visinfo) + XFree(visinfo); +} + + +static void +print_extension_list(const char *ext, QListViewItem *l1) +{ + int i, j; + + if (!ext || !ext[0]) + return; + QString qext = QString::fromLatin1(ext); + QListViewItem *l2 = NULL; + + i = j = 0; + while (1) { + if (ext[j] == ' ' || ext[j] == 0) { + /* found end of an extension name */ + const int len = j - i; + /* print the extension name between ext[i] and ext[j] */ + if (!l2) l2 = new QListViewItem(l1, qext.mid(i, len)); + else l2 = new QListViewItem(l1, l2, qext.mid(i, len)); + i=j; + if (ext[j] == 0) { + break; + } + else { + i++; + j++; + if (ext[j] == 0) + break; + } + } + j++; + } +} + +#if defined(GLX_ARB_get_proc_address) && defined(__GLXextFuncPtr) +extern "C" { + extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *); +} +#endif + +static void +print_limits(QListViewItem *l1, const char * glExtensions, bool GetProcAddress) +{ + /* TODO + GL_SAMPLE_BUFFERS + GL_SAMPLES + GL_COMPRESSED_TEXTURE_FORMATS +*/ + + if (!glExtensions) + return; + + struct token_name { + GLuint type; // count and flags, !!! count must be <=2 for now + GLenum token; + const QString name; + }; + + struct token_group { + int count; + int type; + const token_name *group; + const QString descr; + const char *ext; + }; + + QListViewItem *l2 = NULL, *l3 = NULL; +#if defined(PFNGLGETPROGRAMIVARBPROC) + PFNGLGETPROGRAMIVARBPROC kcm_glGetProgramivARB = NULL; +#endif + + #define KCMGL_FLOAT 128 + #define KCMGL_PROG 256 + #define KCMGL_COUNT_MASK(x) (x & 127) + #define KCMGL_SIZE(x) (sizeof(x)/sizeof(x[0])) + + const struct token_name various_limits[] = { + { 1, GL_MAX_LIGHTS, i18n("Max. number of light sources") }, + { 1, GL_MAX_CLIP_PLANES, i18n("Max. number of clipping planes") }, + { 1, GL_MAX_PIXEL_MAP_TABLE, i18n("Max. pixel map table size") }, + { 1, GL_MAX_LIST_NESTING, i18n("Max. display list nesting level") }, + { 1, GL_MAX_EVAL_ORDER, i18n("Max. evaluator order") }, + { 1, GL_MAX_ELEMENTS_VERTICES, i18n("Max. recommended vertex count") }, + { 1, GL_MAX_ELEMENTS_INDICES, i18n("Max. recommended index count") }, +#ifdef GL_QUERY_COUNTER_BITS + { 1, GL_QUERY_COUNTER_BITS, i18n("Occlusion query counter bits")}, +#endif +#ifdef GL_MAX_VERTEX_UNITS_ARB + { 1, GL_MAX_VERTEX_UNITS_ARB, i18n("Max. vertex blend matrices") }, +#endif +#ifdef GL_MAX_PALETTE_MATRICES_ARB + { 1, GL_MAX_PALETTE_MATRICES_ARB, i18n("Max. vertex blend matrix palette size") }, +#endif + {0,0,0} + }; + + const struct token_name texture_limits[] = { + { 1, GL_MAX_TEXTURE_SIZE, i18n("Max. texture size") }, + { 1, GL_MAX_TEXTURE_UNITS_ARB, i18n("Num. of texture units") }, + { 1, GL_MAX_3D_TEXTURE_SIZE, i18n("Max. 3D texture size") }, +#ifdef GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB + { 1, GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, i18n("Max. cube map texture size") }, +#endif +#ifdef GL_MAX_RECTANGLE_TEXTURE_SIZE_NV + { 1, GL_MAX_RECTANGLE_TEXTURE_SIZE_NV, i18n("Max. rectangular texture size") }, +#endif +#ifdef GL_MAX_TEXTURE_LOD_BIAS_EXT + { 1 | KCMGL_FLOAT, GL_MAX_TEXTURE_LOD_BIAS_EXT, i18n("Max. texture LOD bias") }, +#endif +#ifdef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT + { 1, GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, i18n("Max. anisotropy filtering level") }, +#endif +#ifdef GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB + { 1, GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, i18n("Num. of compressed texture formats") }, +#endif + {0,0,0} + }; + + const struct token_name float_limits[] = { + { 2 | KCMGL_FLOAT, GL_ALIASED_POINT_SIZE_RANGE, "ALIASED_POINT_SIZE_RANGE" }, + { 2 | KCMGL_FLOAT, GL_SMOOTH_POINT_SIZE_RANGE, "SMOOTH_POINT_SIZE_RANGE" }, + { 1 | KCMGL_FLOAT, GL_SMOOTH_POINT_SIZE_GRANULARITY,"SMOOTH_POINT_SIZE_GRANULARITY"}, + { 2 | KCMGL_FLOAT, GL_ALIASED_LINE_WIDTH_RANGE, "ALIASED_LINE_WIDTH_RANGE" }, + { 2 | KCMGL_FLOAT, GL_SMOOTH_LINE_WIDTH_RANGE, "SMOOTH_LINE_WIDTH_RANGE" }, + { 1 | KCMGL_FLOAT, GL_SMOOTH_LINE_WIDTH_GRANULARITY,"SMOOTH_LINE_WIDTH_GRANULARITY"}, + {0,0,0} + }; + + const struct token_name stack_depth[] = { + { 1, GL_MAX_MODELVIEW_STACK_DEPTH, "MAX_MODELVIEW_STACK_DEPTH" }, + { 1, GL_MAX_PROJECTION_STACK_DEPTH, "MAX_PROJECTION_STACK_DEPTH" }, + { 1, GL_MAX_TEXTURE_STACK_DEPTH, "MAX_TEXTURE_STACK_DEPTH" }, + { 1, GL_MAX_NAME_STACK_DEPTH, "MAX_NAME_STACK_DEPTH" }, + { 1, GL_MAX_ATTRIB_STACK_DEPTH, "MAX_ATTRIB_STACK_DEPTH" }, + { 1, GL_MAX_CLIENT_ATTRIB_STACK_DEPTH, "MAX_CLIENT_ATTRIB_STACK_DEPTH" }, + { 1, GL_MAX_COLOR_MATRIX_STACK_DEPTH, "MAX_COLOR_MATRIX_STACK_DEPTH" }, +#ifdef GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB + { 1, GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB,"MAX_MATRIX_PALETTE_STACK_DEPTH"}, +#endif + {0,0,0} + }; + +#ifdef GL_ARB_fragment_program + const struct token_name arb_fp[] = { + { 1, GL_MAX_TEXTURE_COORDS_ARB, "MAX_TEXTURE_COORDS" }, + { 1, GL_MAX_TEXTURE_IMAGE_UNITS_ARB, "MAX_TEXTURE_IMAGE_UNITS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, "MAX_PROGRAM_ENV_PARAMETERS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, "MAX_PROGRAM_LOCAL_PARAMETERS" }, + { 1, GL_MAX_PROGRAM_MATRICES_ARB, "MAX_PROGRAM_MATRICES" }, + { 1, GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB, "MAX_PROGRAM_MATRIX_STACK_DEPTH" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_INSTRUCTIONS_ARB, "MAX_PROGRAM_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, "MAX_PROGRAM_ALU_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, "MAX_PROGRAM_TEX_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, "MAX_PROGRAM_TEX_INDIRECTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEMPORARIES_ARB, "MAX_PROGRAM_TEMPORARIES" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_PARAMETERS_ARB, "MAX_PROGRAM_PARAMETERS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_ATTRIBS_ARB, "MAX_PROGRAM_ATTRIBS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, "MAX_PROGRAM_NATIVE_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, "MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, "MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, "MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, "MAX_PROGRAM_NATIVE_TEMPORARIES" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, "MAX_PROGRAM_NATIVE_PARAMETERS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, "MAX_PROGRAM_NATIVE_ATTRIBS" }, + {0,0,0} + }; +#endif + +#ifdef GL_ARB_vertex_program + const struct token_name arb_vp[] = { +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB,"MAX_PROGRAM_ENV_PARAMETERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB,"MAX_PROGRAM_LOCAL_PARAMETERS"}, +{ 1, GL_MAX_VERTEX_ATTRIBS_ARB, "MAX_VERTEX_ATTRIBS"}, +{ 1, GL_MAX_PROGRAM_MATRICES_ARB,"MAX_PROGRAM_MATRICES"}, +{ 1, GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB,"MAX_PROGRAM_MATRIX_STACK_DEPTH"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_INSTRUCTIONS_ARB,"MAX_PROGRAM_INSTRUCTIONS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEMPORARIES_ARB,"MAX_PROGRAM_TEMPORARIES"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_PARAMETERS_ARB,"MAX_PROGRAM_PARAMETERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_ATTRIBS_ARB,"MAX_PROGRAM_ATTRIBS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB,"MAX_PROGRAM_ADDRESS_REGISTERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB,"MAX_PROGRAM_NATIVE_INSTRUCTIONS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB,"MAX_PROGRAM_NATIVE_TEMPORARIES"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB,"MAX_PROGRAM_NATIVE_PARAMETERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB,"MAX_PROGRAM_NATIVE_ATTRIBS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB ,"MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS"}, +{0,0,0} +}; +#endif + +#ifdef GL_ARB_vertex_shader + const struct token_name arb_vs[] = { + { 1, GL_MAX_VERTEX_ATTRIBS_ARB,"MAX_VERTEX_ATTRIBS"}, + { 1, GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB,"MAX_VERTEX_UNIFORM_COMPONENTS"}, + { 1, GL_MAX_VARYING_FLOATS_ARB,"MAX_VARYING_FLOATS"}, + { 1, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB,"MAX_COMBINED_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB,"MAX_VERTEX_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_TEXTURE_IMAGE_UNITS_ARB,"MAX_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_TEXTURE_COORDS_ARB,"MAX_TEXTURE_COORDS"}, + {0,0,0} + }; +#endif + +#ifdef GL_ARB_fragment_shader + const struct token_name arb_fs[] = { + { 1, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB,"MAX_FRAGMENT_UNIFORM_COMPONENTS"}, + { 1, GL_MAX_TEXTURE_IMAGE_UNITS_ARB,"MAX_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_TEXTURE_COORDS_ARB,"MAX_TEXTURE_COORDS"}, + {0,0,0} + }; +#endif + + const struct token_name frame_buffer_props[] = { + { 2, GL_MAX_VIEWPORT_DIMS, i18n("Max. viewport dimensions") }, + { 1, GL_SUBPIXEL_BITS, i18n("Subpixel bits") }, + { 1, GL_AUX_BUFFERS, i18n("Aux. buffers")}, + {0,0,0} + }; + + const struct token_group groups[] = + { + {KCMGL_SIZE(frame_buffer_props), 0, frame_buffer_props, i18n("Frame buffer properties"), NULL}, + {KCMGL_SIZE(various_limits), 0, texture_limits, i18n("Texturing"), NULL}, + {KCMGL_SIZE(various_limits), 0, various_limits, i18n("Various limits"), NULL}, + {KCMGL_SIZE(float_limits), 0, float_limits, i18n("Points and lines"), NULL}, + {KCMGL_SIZE(stack_depth), 0, stack_depth, i18n("Stack depth limits"), NULL}, +#ifdef GL_ARB_vertex_program + {KCMGL_SIZE(arb_vp), GL_VERTEX_PROGRAM_ARB, arb_vp, "ARB_vertex_program", "GL_ARB_vertex_program"}, +#endif +#ifdef GL_ARB_fragment_program + {KCMGL_SIZE(arb_fp), GL_FRAGMENT_PROGRAM_ARB, arb_fp, "ARB_fragment_program", "GL_ARB_fragment_program"}, +#endif +#ifdef GL_ARB_vertex_shader + {KCMGL_SIZE(arb_vs), 0, arb_vs, "ARB_vertex_shader", "GL_ARB_vertex_shader"}, +#endif +#ifdef GL_ARB_fragment_shader + {KCMGL_SIZE(arb_fs), 0, arb_fs, "ARB_fragment_shader", "GL_ARB_fragment_shader"}, +#endif + }; + +#if defined(GLX_ARB_get_proc_address) && defined(PFNGLGETPROGRAMIVARBPROC) + if (GetProcAddress && strstr(glExtensions, "GL_ARB_vertex_program")) + kcm_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC) glXGetProcAddressARB((const GLubyte *)"glGetProgramivARB"); +#endif + + for (uint i = 0; itype; cur_token++) { + + bool tfloat = cur_token->type & KCMGL_FLOAT; + int count = KCMGL_COUNT_MASK(cur_token->type); + GLint max[2]={0,0}; + GLfloat fmax[2]={0.0,0.0}; + +#if defined(PFNGLGETPROGRAMIVARBPROC) && defined(GL_ARB_vertex_program) + bool tprog = cur_token->type & KCMGL_PROG; + if (tprog && kcm_glGetProgramivARB) + kcm_glGetProgramivARB(groups[i].type, cur_token->token, max); + else +#endif + if (tfloat) glGetFloatv(cur_token->token, fmax); + else glGetIntegerv(cur_token->token, max); + + if (glGetError() == GL_NONE) { + QString s; + if (!tfloat && count == 1) s = QString::number(max[0]); else + if (!tfloat && count == 2) s = QString("%1, %2").arg(max[0]).arg(max[1]); else + if (tfloat && count == 2) s = QString("%1 - %2").arg(fmax[0],0,'f',6).arg(fmax[1],0,'f',6); else + if (tfloat && count == 1) s = QString::number(fmax[0],'f',6); + if (l3) l3 = new QListViewItem(l2, l3, cur_token->name, s); + else l3 = new QListViewItem(l2, cur_token->name, s); + + } + } + + } +} + + +static QListViewItem *print_screen_info(QListViewItem *l1, QListViewItem *after) +{ + QListViewItem *l2 = NULL, *l3 = NULL; + + if (after) l1= new QListViewItem(l1,after,IsDirect ? i18n("Direct Rendering") : i18n("Indirect Rendering")); + else l1= new QListViewItem(l1,IsDirect ? i18n("Direct Rendering") : i18n("Indirect Rendering")); + if (IsDirect) + if (get_dri_device()) { + l2 = new QListViewItem(l1, i18n("3D Accelerator")); + l2->setOpen(true); + l3 = new QListViewItem(l2, l3, i18n("Vendor"), dri_info.vendor); + l3 = new QListViewItem(l2, l3, i18n("Device"), dri_info.device); + l3 = new QListViewItem(l2, l3, i18n("Subvendor"), dri_info.subvendor); + l3 = new QListViewItem(l2, l3, i18n("Revision"), dri_info.rev); + } + else l2=new QListViewItem(l1, l2, i18n("3D Accelerator"),i18n("unknown")); + if (l2) l2 = new QListViewItem(l1, l2, i18n("Driver")); + else l2 = new QListViewItem(l1, i18n("Driver")); + l2->setOpen(true); + + l3 = new QListViewItem(l2, i18n("Vendor"),gli.glVendor); + l3 = new QListViewItem(l2, l3, i18n("Renderer"), gli.glRenderer); + l3 = new QListViewItem(l2, l3, i18n("OpenGL version"), gli.glVersion); + + if (IsDirect) { + if (!dri_info.module) dri_info.module = i18n("unknown"); + l3 = new QListViewItem(l2, l3, i18n("Kernel module"), dri_info.module); + } + + l3 = new QListViewItem(l2, l3, i18n("OpenGL extensions")); + print_extension_list(gli.glExtensions,l3); + + l3 = new QListViewItem(l2, l3, i18n("Implementation specific")); + print_limits(l3, gli.glExtensions, strstr(gli.clientExtensions, "GLX_ARB_get_proc_address") != NULL); + + return l1; +} + +void print_glx_glu(QListViewItem *l1, QListViewItem *l2) +{ + QListViewItem *l3; + + l2=new QListViewItem(l1, l2, i18n("GLX")); + l3 = new QListViewItem(l2, i18n("server GLX vendor"),gli.serverVendor); + l3 = new QListViewItem(l2, l3, i18n("server GLX version"),gli.serverVersion); + l3 = new QListViewItem(l2, l3, i18n("server GLX extensions")); + print_extension_list(gli.serverExtensions,l3); + + l3 = new QListViewItem(l2, l3, i18n("client GLX vendor"),gli.clientVendor); + l3 = new QListViewItem(l2, l3, i18n("client GLX version"),gli.clientVersion); + l3 = new QListViewItem(l2, l3, i18n("client GLX extensions")); + print_extension_list(gli.clientExtensions,l3); + l3 = new QListViewItem(l2, l3, i18n("GLX extensions")); + print_extension_list(gli.glxExtensions,l3); + +#ifdef KCMGL_DO_GLU + l2 = new QListViewItem(l1, l2, i18n("GLU")); + l3 = new QListViewItem(l2, i18n("GLU version"), gli.gluVersion); + l3 = new QListViewItem(l2, l3, i18n("GLU extensions")); + print_extension_list(gli.gluExtensions,l3); +#endif + +} + +static QListViewItem *get_gl_info(Display *dpy, int scrnum, Bool allowDirect,QListViewItem *l1, QListViewItem *after) +{ + Window win; + int attribSingle[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + None }; + int attribDouble[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DOUBLEBUFFER, + None }; + + XSetWindowAttributes attr; + unsigned long mask; + Window root; + GLXContext ctx; + XVisualInfo *visinfo; + int width = 100, height = 100; + QListViewItem *result = after; + + root = RootWindow(dpy, scrnum); + + visinfo = glXChooseVisual(dpy, scrnum, attribSingle); + if (!visinfo) { + visinfo = glXChooseVisual(dpy, scrnum, attribDouble); + if (!visinfo) { + kdDebug() << "Error: couldn't find RGB GLX visual\n"; + return result; + } + } + + attr.background_pixel = 0; + attr.border_pixel = 0; + attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone); + attr.event_mask = StructureNotifyMask | ExposureMask; + mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; + win = XCreateWindow(dpy, root, 0, 0, width, height, + 0, visinfo->depth, InputOutput, + visinfo->visual, mask, &attr); + + ctx = glXCreateContext( dpy, visinfo, NULL, allowDirect ); + if (!ctx) { + kdDebug() << "Error: glXCreateContext failed\n"; + XDestroyWindow(dpy, win); + return result; + } + + if (glXMakeCurrent(dpy, win, ctx)) { + gli.serverVendor = glXQueryServerString(dpy, scrnum, GLX_VENDOR); + gli.serverVersion = glXQueryServerString(dpy, scrnum, GLX_VERSION); + gli.serverExtensions = glXQueryServerString(dpy, scrnum, GLX_EXTENSIONS); + gli.clientVendor = glXGetClientString(dpy, GLX_VENDOR); + gli.clientVersion = glXGetClientString(dpy, GLX_VERSION); + gli.clientExtensions = glXGetClientString(dpy, GLX_EXTENSIONS); + gli.glxExtensions = glXQueryExtensionsString(dpy, scrnum); + gli.glVendor = (const char *) glGetString(GL_VENDOR); + gli.glRenderer = (const char *) glGetString(GL_RENDERER); + gli.glVersion = (const char *) glGetString(GL_VERSION); + gli.glExtensions = (const char *) glGetString(GL_EXTENSIONS); + gli.displayName = NULL; +#ifdef KCMGL_DO_GLU + gli.gluVersion = (const char *) gluGetString(GLU_VERSION); + gli.gluExtensions = (const char *) gluGetString(GLU_EXTENSIONS); +#endif + IsDirect = glXIsDirect(dpy, ctx); + + result = print_screen_info(l1, after); + } + else { + kdDebug() << "Error: glXMakeCurrent failed\n"; + } + + glXDestroyContext(dpy, ctx); + XDestroyWindow(dpy, win); + return result; + +} + + +static bool GetInfo_OpenGL_Generic( QListView *lBox ) +{ + QListViewItem *l1, *l2 = NULL; + + char *displayName = NULL; + Display *dpy; + int numScreens, scrnum; + + dpy = XOpenDisplay(displayName); + if (!dpy) { +// kdDebug() << "Error: unable to open display " << displayName << endl; + return false; + } + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + + l1 = new QListViewItem(lBox, i18n("Name of the Display"), DisplayString(dpy)); + l1->setOpen(true); + l1->setSelectable(false); + l1->setExpandable(false); + + numScreens = ScreenCount(dpy); + + scrnum = 0; +#ifdef KCMGL_MANY_SCREENS + for (; scrnum < numScreens; scrnum++) +#endif + { + mesa_hack(dpy, scrnum); + + l2 = get_gl_info(dpy, scrnum, true, l1, l2); + if (l2) l2->setOpen(true); + + if (IsDirect) l2 = get_gl_info(dpy, scrnum, false, l1, l2); + +// TODO print_visual_info(dpy, scrnum, mode); + } + if (l2) + print_glx_glu(l1, l2); + else + KMessageBox::error(0, i18n("Could not initialize OpenGL")); + + XCloseDisplay(dpy); + return true; + } + +bool GetInfo_OpenGL(QListView * lBox) +{ + return GetInfo_OpenGL_Generic(lBox); +} + +#endif /* INFO_OPENGL_AVAILABLE */ + diff --git a/kcontrol/info/opengl.desktop b/kcontrol/info/opengl.desktop new file mode 100644 index 000000000..07d6b76ce --- /dev/null +++ b/kcontrol/info/opengl.desktop @@ -0,0 +1,147 @@ +[Desktop Entry] +Exec=kcmshell opengl +Icon=kcmopengl +Type=Application +DocPath=kinfocenter/opengl/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=opengl +X-KDE-ParentApp=kinfocenter + +Name=OpenGL +Name[bn]=ওপেন-জি-এল +Name[hi]=ओपन-जीएल +Name[ne]=खुला GL +Name[rw]=GufunguraGL +Name[ta]=ஓபன் ஜிஎல் +Name[te]=ఓపెన్ జిఎల్ + +Comment=OpenGL information +Comment[af]=OpenGL informasie +Comment[ar]=معلومات OpenGL +Comment[az]=OpenGL mə'lumatı +Comment[be]=Інфармацыя аб OpenGL +Comment[bg]=Информация за OpenGL +Comment[bn]=ওপেন-জি-এল সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn OpenGL +Comment[bs]=Informacije o OpenGL-u +Comment[ca]=Informació OpenGL +Comment[cs]=Informace o OpenGL +Comment[csb]=Wëdowiédzô ò OpenGL +Comment[da]=OpenGL-information +Comment[de]=Informationen zu OpenGL +Comment[el]=Πληροφορίες OpenGL +Comment[eo]=OpenGLa informo +Comment[es]=Información OpenGL +Comment[et]=OpenGL info +Comment[eu]=OpenGL informazioa +Comment[fa]=اطلاعات OpenGL +Comment[fi]=OpenGL-tiedot +Comment[fr]=Informations OpenGL +Comment[fy]=OpenGL-ynformaasje +Comment[ga]=Eolas faoi OpenGL +Comment[gl]=Información de OpenGL +Comment[he]=מידע אודות OpenGL +Comment[hi]=ओपन-जीएल जानकारी +Comment[hr]=OpenGL podaci +Comment[hu]=OpenGL-jellemzők +Comment[id]=Informasi OpenGL +Comment[is]=OpenGL upplýsingar +Comment[it]=Informazioni sull'OpenGL +Comment[ja]=OpenGL 情報 +Comment[ka]=ცნობები OpenGL -ს შესახებ +Comment[kk]=OpenGL мәліметі +Comment[km]=ព័ត៌មាន OpenGL +Comment[ko]=OpenGL 정보 +Comment[lt]=OpenGL informacija +Comment[lv]=OpenGL informācija +Comment[mk]=Информации за OpenGL +Comment[ms]=Maklumat OpenGL +Comment[mt]=Informazzjoni dwar OpenGL +Comment[nb]=OpenGL-informasjon +Comment[nds]=OpenGL-Informatschoon +Comment[ne]=खुला GL सूचना +Comment[nl]=OpenGL-informatie +Comment[nn]=OpenGL-informasjon +Comment[pa]=OpenGL ਜਾਣਕਾਰੀ +Comment[pl]=Informacje OpenGL +Comment[pt]=Informação sobre OpenGL +Comment[pt_BR]=Informações sobre OpenGL +Comment[ro]=Informații OpenGL +Comment[ru]=Сведения о OpenGL +Comment[rw]= Ibisobanuro GufunguraGL +Comment[se]=OpenGL-diehtu +Comment[sk]=Informácie o OpenGL +Comment[sl]=Informacije o OpenGL +Comment[sr]=Информације о OpenGL-у +Comment[sr@Latn]=Informacije o OpenGL-u +Comment[sv]=Information om OpenGL +Comment[ta]=ஓபன் ஜிஎல் தகவல் +Comment[te]=ఓపెన్ జిఎల్ సమాచారం +Comment[tg]=КушоданGL ахбор +Comment[th]=ข้อมูล OpenGL +Comment[tr]=OpenGL Bilgisi +Comment[tt]=OpenGL turında +Comment[uk]=Інформація про OpenGL +Comment[uz]=OpenGL haqida maʼlumot +Comment[uz@cyrillic]=OpenGL ҳақида маълумот +Comment[vi]=Thông tin về OpenGL +Comment[wa]=Informåcion so OpenGL +Comment[zh_CN]=OpenGL 信息 +Comment[zh_TW]=OpenGL 資訊 + +Keywords=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display +Keywords[az]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display, Displey, Avadanlıq,Qrafika +Keywords[be]=Відэакарта,паскарэнне,графіка,сервер X,дысплей,экран,OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display +Keywords[bg]=видеокарта, хардуер,екран, ускорение, графика, OpenGL, DRI, GLX, 3D, VideoCard, Hardware Acceleration, Graphics, X, X11, Xserver, X-Server, XFree86, Display +Keywords[bs]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Grafika +Keywords[ca]=OpenGL,DRI,GLX,3D,Targeta de vídeo,Hardware Acceleració,Gràfics,X,X11,Xserver,Servidor X,XFree86,Pantalla +Keywords[cs]=OpenGL,DRI,GLX,3D,videokarta,akcelerace,grafika,X,X11,Xserver,X-Server,XFree86,Display +Keywords[csb]=OpenGL,DRI,GLX,3D,graficznô karta,grafika,X,X11,Xserver,X-Server,XFree86,ekran +Keywords[da]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Grafik,X,X11,Xserver,X-Server,XFree86,Skærm +Keywords[el]=OpenGL,DRI,GLX,3D,Κάρτα Γραφικών,Υλικό Επιτάχυνση,Γραφικά,X,X11,Xserver,X-Server,XFree86,Οθόνη +Keywords[eo]=OpenGL,DRI,GLX,3D,VideoCard,Hardware akcelo,grafikoj,X,X11,Xserver,X-Server,XFree86,ekrano +Keywords[es]=OpenGL,DRI,GLX,3D,Tarjeta, Grafica,Hardware Aceleradora,Gráficos,X,X11,Xserver,X-Server,XFree86,Monitor +Keywords[et]=OpenGL,DRI,GLX,3D,Videokaart,Riistvaraline kiirendus,Graafika,X,X11,Xserver,X-Server,XFree86,Kuva +Keywords[fa]=OpenGL، DRI، GLX، سه بعدی، کارت ویدیو، شتاب‌دهی سخت‌افزار، نگاره‌ای ، X، X11، Xserver، کارساز، XFree86، صفحه نمایش +Keywords[fr]=OpenGL,DRI,GLX,3D,carte graphique,carte vidéo,accélération matérielle,graphismes,X,X11,serveur X,XServer,XFree86,affichage +Keywords[fy]=OpenGL,DRI,GLX,3D,grafyske kaart,hurd guod -fersnelling,grafysk,graphics,X,X11,Xserver,X-Server,XFree86,display,byldskerm +Keywords[ga]=OpenGL,DRI,GLX,3D,FísChárta,Luasú Crua-Earraí,Grafaic,X,X11,Freastalaí-X,XFree86,Scáileán +Keywords[gl]=OpenGL,DRI,GLX,3D,Tarxeta de Vídeo,Aceleración por Hardware,Graficos,X,X11,Xserver,X-Server,XFree86,Display,Pantalla +Keywords[he]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration, Graphics,X,X11,Xserver,X-Server,XFree86,Display,האצה, כרטיס, כרטיס מסך, מסך, תצוגה +Keywords[hi]=ओपन-जीएल,डीआरआई,जीएलएक्स,3डी,वीडियो-कार्ड,हार्डवेयर एस्सेलरेशन,ग्राफिक्स,एक्स,एक्स11,एक्स-सर्वर,एक्ससर्वर,एक्सफ्री86,प्रदर्शक +Keywords[hr]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Video kartica,Grafička kartica,Hradversko ubrzavanje,Grafika,X poslužitelj,Zaslon +Keywords[hu]=OpenGL,DRI,GLX,3D,videokártya,hardveres gyorsítás,grafika,X,X11,Xserver,X-Server,XFree86,képernyő +Keywords[is]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,vélbúnaðarhröðun,Graphics,grafík,X,X11,Xserver,Xþjónn, X-Server,X-þjónn,XFree86,Display,skjár +Keywords[it]=OpenGL,DRI,GLX,3D,SchedaVideo,Video,Accelerazione Hardware,Grafica,X,X11,Xserver,X-Server,XFree86,Display,Server X +Keywords[ka]=OpenGL,DRI,GLX,3D,ვიდეოდაფა,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display +Keywords[km]=OpenGL,DRI,GLX,3D,ប័ណ្ណ​វីដេអូ,បន្ទះ​បង្កើន​ល្បឿន​ផ្នែក​រឹង,Graphics,X,X11,Xserver,X-Server,XFree86,បង្ហាញ +Keywords[lt]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Video plokštė,aparatūros greitinimas,grafika +Keywords[lv]=OpenGL,DRI,GLX,3D,VideoKarte,Dzelžu paātrināšana,Grafika,X,X11,Xserveris,X-Serveris,XFree86,Ekrāns +Keywords[mk]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Видео-картичка,Хардверско забрзување,Графика,екран,приказ +Keywords[nb]=OpenGL,DRI,GLX,3D,skjermkort,maskinvareakselerasjon,bilde,X,X11,X-tenar,XFree86,skjerm +Keywords[nds]=OpenGL,DRI,GLX,3D,Videokort,Hardware Acceleration,Grafik,X,X11,Xserver,X-Server,XFree86,Display,Dorstellen,Beslünigen +Keywords[ne]=खुला GL, DRI, GLX, 3D,भिडियो कार्ड, हार्डवेयर गतिवर्धन, ग्राफिक्स, X, X11, Xसर्भर, X-सर्भर, X स्वतन्त्र 86, प्रदर्शन गर्नुहोस् +Keywords[nl]=OpenGL,DRI,GLX,3D,videokaart,hardware-acceleratie,grafisch,graphics,X,X11,Xserver,X-Server,XFree86,display,beeldscherm +Keywords[nn]=OpenGL,DRI,GLX,3D,skjermkort,maskinvareakselerasjon,grafikk,X,X11,X-tenar,XFree86,skjerm +Keywords[pa]=OpenGL,DRI,GLX,3D,ਵੀਡਿਓਕਾਰਡ, ਹਾਰਡਵੇਅਰ ਪਰਵੇਸ਼ਕ,ਗਰਾਫਿਕਸ,X,X11,Xserver,X-Server,XFree86,ਦਰਿਸ਼ +Keywords[pl]=OpenGL,DRI,GLX,3D,karta graficzna,grafika,X,X11,Xserver,X-Server,XFree86,ekran +Keywords[pt]=OpenGL,DRI,GLX,3D,Placa Vídeo,Aceleração por Hardware,Gráficos,X,X11,Servidor X,XFree86,Ecrã +Keywords[pt_BR]=OpenGL,DRI,GLX,3D,Placa de Vídeo,Aceleração de Hardware,Gráficos,X,X11,Servidor X,X Server,XFree86,Display +Keywords[ro]=OpenGL,DRI,GLX,3D,placă video,accelerare hardware,grafică,X,X11,Xserver,X-Server,XFree86,monitor +Keywords[rw]=GufunguraGL,DRI,GLX,3D,IkaritaVidewo,Ukwihutisha Imashini,Ibishushanyo,X,X11,Xseriveri,X-Seriveri,XFree86,Kwerekana +Keywords[sl]=OpenGL,DRI,GLX,3D,Strojna pospešitev,Grafika,X,X11,Xserver,X-Server,X-stežnik,X,XFree86,Zaslon +Keywords[sr]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,видео картица,хардверско убрзање,графика +Keywords[sr@Latn]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,video kartica,hardversko ubrzanje,grafika +Keywords[sv]=OpenGL,DRI,GLX,3D,videokort,hårdvaruacceleration,grafik,X,X11,Xserver,X-server,Xfree86,skärm +Keywords[ta]=ஓபன் ஜிஎல்,டிஆரை,ஜிஎல்X,முப்பரிமாணம்,வீடியோஅட்டை,வன்பொருள் முடுக்கம்,சித்திரங்கள்,X,X11,Xசேவகன்,X-சேவகன்,XFree86,காட்டு +Keywords[th]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,จอแสดงผล +Keywords[tr]=OpenGL,DRI,GLX,3D,VideoCard,Video kartı,Donanım Hızlandırma,Grafik,X,X11,Xserver,X-Server,X-Sunucu,Xsunucu,XFree86,Görüntü +Keywords[uk]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,відео карта,3D акселерація,графіка,X сервер,монітор +Keywords[vi]=OpenGL,DRI,GLX,3D,Bo mạch Video,Tăng tốc Phần cứng,Đồ hoạ,X,X11,Trình phục vụ Xserver,Trình phục vụ - X,XFree86,Hiển thị +Keywords[wa]=OpenGL,DRI,GLX,3D,VideoCard,cåte videyo,Hardware Acceleration,Graphike,X,X11,Xserver,sierveu X,X-Server,XFree86,Display,håynaedje +Keywords[zh_CN]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,显卡,硬件加速,图形,X 服务器,显示 +Keywords[zh_TW]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,顯示卡,硬體加速,圖形,顯示 + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/partitions.desktop b/kcontrol/info/partitions.desktop new file mode 100644 index 000000000..89851a34e --- /dev/null +++ b/kcontrol/info/partitions.desktop @@ -0,0 +1,246 @@ +[Desktop Entry] +Exec=kcmshell partitions +Icon=kcmpartitions +Type=Application +DocPath=kinfocenter/partitions/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=partitions +X-KDE-ParentApp=kinfocenter + + +Name=Partitions +Name[af]=Partisies +Name[ar]=أقسام القرص الصلب +Name[az]=Sabit Disk Bölmələri +Name[be]=Раздзелы +Name[bg]=Дялове +Name[bn]=পার্টিশন +Name[br]=Parzhadurioù +Name[bs]=Particije +Name[ca]=Particions +Name[cs]=Oddíly disků +Name[csb]=Particëje +Name[cy]=Rhaniadau +Name[da]=Partitioner +Name[de]=Partitionen +Name[el]=Κατατμήσεις +Name[eo]=Subdiskoj +Name[es]=Particiones +Name[et]=Partitsioonid +Name[eu]=Zatiketak +Name[fa]=افرازها +Name[fi]=Osiot +Name[fy]=Partities +Name[ga]=Deighiltí +Name[gl]=Particións +Name[he]=מחיצות +Name[hi]=पार्टीशन्स +Name[hr]=Particije +Name[hu]=Partíciók +Name[id]=Partisi +Name[is]=Disksneiðar +Name[it]=Partizioni +Name[ja]=パーティション +Name[ka]=განაყოფები +Name[kk]=Бөлімдері +Name[km]=ភាគ +Name[ko]=파티션 +Name[lo]=ພາຕີຊັນ +Name[lt]=Skirsniai +Name[lv]=Partīcijas +Name[mk]=Партиции +Name[mn]=Хуваалтууд +Name[ms]=Petak +Name[mt]=Partitizzjonijiet +Name[nb]=Partisjoner +Name[nds]=Partitschonen +Name[ne]=विभाजन +Name[nl]=Partities +Name[nn]=Partisjonar +Name[nso]=Dikaroganyo +Name[oc]=Particions +Name[pa]=ਭਾਗ +Name[pl]=Partycje +Name[pt]=Partições +Name[pt_BR]=Partições +Name[ro]=Partiții +Name[ru]=Разделы +Name[rw]=Ibicedisiki +Name[se]=Partišuvnnat +Name[sk]=Diskové oddiely +Name[sl]=Particije +Name[sr]=Партиције +Name[sr@Latn]=Particije +Name[sv]=Partitioner +Name[ta]=பகுதிகள்(பங்கீடுகள்) +Name[te]=విభజనలు +Name[tg]=Тақсимоти диски сахт +Name[th]=พาร์ติชัน +Name[tr]=Disk Bölümleri +Name[tt]=Bülemnär +Name[uk]=Розділи диску +Name[uz]=Diskning qismlari +Name[uz@cyrillic]=Дискнинг қисмлари +Name[vi]=Phân vùng +Name[wa]=Pårticions +Name[xh]=Ulwahlulo ngokwamaqhekeza +Name[zh_CN]=分区 +Name[zh_TW]=磁碟分割區 +Name[zu]=Izahluko + +Comment=Partition information +Comment[af]=Partisie informasie +Comment[ar]=معلومات أقسام القرص الصلب +Comment[az]=Bölmələr Haqqında Mə'lumat +Comment[be]=Інфармацыя аб раздзелах +Comment[bg]=Информация за дяловете и дисковете +Comment[bn]=পার্টিশন সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar parzhadur +Comment[bs]=Informacije o particijama +Comment[ca]=Informació de particions +Comment[cs]=Informace o oddílech disků +Comment[csb]=Wëdowiédzô ò particëjach +Comment[cy]=Gwybodaeth rhaniad +Comment[da]=Information om partitionerne +Comment[de]=Informationen zur Partitionierung +Comment[el]=Πληροφορίες για τις κατατμήσεις +Comment[eo]=Informo pri subdiskoj +Comment[es]=Información sobre las particiones +Comment[et]=Partitsioonide info +Comment[eu]=Zatiketei buruzko informazioa +Comment[fa]=اطلاعات افرازها +Comment[fi]=Osiotiedot +Comment[fr]=Informations sur les partitions +Comment[fy]=Partitie-ynformaasje +Comment[gl]=Información das particións +Comment[he]=מידע על מחיצות +Comment[hi]=पार्टीशन जानकारी +Comment[hr]=Podaci o particijama +Comment[hu]=A partíciók adatai +Comment[id]=Informasi partisi +Comment[is]=Upplýsingar um skipulag disksneiða +Comment[it]=Informazioni sulle partizioni +Comment[ja]=パーティションの情報 +Comment[ka]=ცნობები გამოყენებული რესურსების შესახებ +Comment[kk]=Диск бөлімдер мәліметі +Comment[km]=ព័ត៌មាន​ភាគ +Comment[ko]=파티션 정보 +Comment[lo]=ຂໍ້ມູນພາຕີຊັນ +Comment[lt]=Skirsnių informacija +Comment[lv]=Partīciju informācija +Comment[mk]=Информации за партициите +Comment[mn]=Хуваалтын мэдээлэл +Comment[ms]=Maklumat petak +Comment[mt]=Informazzjoni dwar partizzjonijiet +Comment[nb]=Partisjoninformasjon +Comment[nds]=Informatschoon över de Partitschonen +Comment[ne]=विभाजन सूचना +Comment[nl]=Partitie-informatie +Comment[nn]=Partisjonsinformasjon +Comment[nso]=Tshedimoso ya Dikaroganyo +Comment[oc]=Informacion de particions +Comment[pa]=ਭਾਗ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o partycjach dyskowych +Comment[pt]=Informação sobre as partições +Comment[pt_BR]=Informações sobre partições +Comment[ro]=Informații despre partiții +Comment[ru]=Сведения о использовании разделов +Comment[rw]=Ibisobanuro Igicedisiki +Comment[se]=Partišuvdnadiehtu +Comment[sk]=Informácie o diskových oddieloch +Comment[sl]=Podatki o particijah +Comment[sr]=Информације о партицијама +Comment[sr@Latn]=Informacije o particijama +Comment[sv]=Partitionsinformation +Comment[ta]=பகுதி தகவல் +Comment[te]=విభజనల సమాచారం +Comment[tg]=Иттилооти тақсимот +Comment[th]=ข้อมูลพาร์ติชัน +Comment[tr]=Bölümleme hakkında bilgi +Comment[tt]=Bülemnär turında +Comment[uk]=Інформація щодо розділів диску +Comment[uz]=Diskning qismlari haqida maʼlumot +Comment[uz@cyrillic]=Дискнинг қисмлари ҳақида маълумот +Comment[ven]=Mafhungo au kovhekana +Comment[vi]=Thông tin về phân vùng +Comment[wa]=Informåcion sol pårtixhaedje del deure plake +Comment[xh]=Ulwazi lowahlulelwano ngokwamaqhekeza +Comment[zh_CN]=分区信息 +Comment[zh_TW]=磁碟分割區資訊 +Comment[zu]=Ulwazi Lokwehlukanisa + +Keywords=Partitions,Harddrive,HD,System Information +Keywords[af]=Partitions,Harddrive,HD,System Informasie +Keywords[ar]=Partitions,Harddrive,HD,System Information,القرص الصلب,الأقراص الصلبة,معلومات النظام +Keywords[az]=Partitions,Harddrive,HD,System Information,Bölmələr,Sabit disk,HD,Sistem Haqqında Mə'lumat +Keywords[be]=Раздзелы,Жорсткі дыск,Сістэмная інфармацыя,Partitions,Harddrive,HD,System Information +Keywords[bg]=информация, система, системна, дял, дялове, диск, твърд, хард, Partitions, Harddrive, HD, System Information +Keywords[br]=Parzhadur,pladenn galet,HD,titouroù reizhiad +Keywords[bs]=Partitions,Harddrive,HD,System Information,Particije,hard disk,informacije o sustavu +Keywords[ca]=Particions,disc dur,HD,Informació del sistema +Keywords[cs]=Oddíly disku,Pevný disk,HD,Informace o systému +Keywords[csb]=particëje,cwiardi disk,HD,wëdowiédzô ò systemie +Keywords[cy]=Rhaniadau,Disg Caled,DC,Gwybodaeth Cysawd +Keywords[da]=Partitioner,Harddisk,HD,Systeminformation +Keywords[de]=Partitionen,Festplatten,Laufwerke,HD,Systeminformation +Keywords[el]=Κατατμήσεις,Σκληρός Δίσκος,HD,Πληροφορίες συστήματος +Keywords[eo]=subdisko,disko,sistemo,operaciumo,informo +Keywords[es]=Particiones,Disco duro,Información del sistema +Keywords[et]=Partitsioonid,kõvaketas,HD,Süsteemi info +Keywords[eu]=Zatiketak,Disko gogorra,HD,Sistemaren informazioa +Keywords[fa]=افرازها، گردانندۀ سخت ،HD ،اطلاعات سیستم +Keywords[fi]=Osiot,Kiintolevy,HD,Järjestelmätiedot +Keywords[fr]=partitions,disque dur,HD,DD,informations système +Keywords[fy]=partities,Hardrive, HD,systeemynformaasje,fêste skiif +Keywords[ga]=Deighiltí,Tiomántán Crua,HD,Eolas faoin Chóras +Keywords[gl]=Particións,Disco duro,HD,Información do Sistema +Keywords[he]=מחיצות,כונן קשיח,מידע מערכת, Partitions,Harddrive,HD,System Information +Keywords[hi]=पार्टीशन्स,हार्डड्राइव,एचडी,तंत्र जानकारी +Keywords[hr]=Partitions,Harddrive,HD,System Information,Particije,hard disk,Podaci o sustavu,Tvrdi disk +Keywords[hu]=partíciók,merevlemez,HD,rendszerinformáció +Keywords[id]=Partisi,Harddrive,HD,Informasi Sistem +Keywords[is]=Sneiðar,Disksneiðar,Harðir diskar,Harður diskur,kerfi,upplýsingar +Keywords[it]=partizioni,disco rigido,hard disk,HD,informazioni sul sistema +Keywords[ja]=パーティション,ハードドライブ,HD,システムの情報 +Keywords[km]=ភាគ,ដ្រាយ​រឹង,HD,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lo]=ພາຕີຊັນ,ຮາດໄດຣຟ์,HD,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Skirsniai,Kietasis diskas,HD,Sistemos Informacija +Keywords[lv]=Partīcijas,CietaisDisks,HD,Sistēmas Informācija +Keywords[mk]=Partitions,Harddrive,HD,System Information,Партиции,Тврд диск,Информации за системот +Keywords[mn]=Хуваалтууд,Хатуу диск,Диск хөтлөгч,HD,Системийн мэдээлэл +Keywords[nb]=Partisjoner,Platelager,Harddisk,HD,Systeminformasjon +Keywords[nds]=Partitschonen,Fastplaat,HD,Systeeminformatschoon +Keywords[ne]=विभाजन, हार्ड ड्राइभ,HD, प्रणाली सूचना +Keywords[nl]=partities,harddrive,HD,systeeminformatie,harde schijf +Keywords[nn]=partisjonar,harddisk,HD,systeminformasjon +Keywords[nso]=Dikaroganyo,Kotlelo ye Bothata,HD,Tshedimoso ya System +Keywords[oc]=Particions,disc dur,HD,Informacion dèu sistemo +Keywords[pa]=Partitions,Harddrive,HD,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਭਾਗ,ਹਾਰਡ ਡਿਸਕ +Keywords[pl]=partycje,twardy dysk,HD,informacja o systemie +Keywords[pt]=partições,disco rígido,HD,informações do sistema +Keywords[pt_BR]=Partições,Disco Rígido,Informações de sistema +Keywords[ro]=partiții,harddisk,hard-disk,HD,hdd,informații despre sistem +Keywords[rw]=Ibicedisiki,Ububikodisiki,HD,Amakuru Sisitemu +Keywords[se]=partišuvnnat,garraskearru,HD,vuogádatdieđut +Keywords[sk]=Partície,oddiely,Pevný disk,HD,Systémové informácie +Keywords[sl]=particije,trdi disk,HD,informacije o sistemu +Keywords[sr]=Partitions,Harddrive,HD,System Information,партиције,харддиск,системске информације +Keywords[sr@Latn]=Partitions,Harddrive,HD,System Information,particije,harddisk,sistemske informacije +Keywords[sv]=Partitioner,Hårddisk,HD,Systeminformation +Keywords[ta]=பகுதிகள், வன் சாதனம்,எச்டி,அமைப்பு தகவல் +Keywords[th]=พาร์ติชัน,ฮาร์ดไดรฟ์,HD,ข้อมูลระบบ +Keywords[tr]=Bölümleme,Sabitdisk,HD,Sistem Hakkında Bilgi +Keywords[uk]=розділи диску,жорсткий диск,HD,системна інформація +Keywords[uz]=Diskning qismlari,qattiq disk,HD,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Дискнинг қисмлари,қаттиқ диск,HD,Тизим ҳақида маълумот +Keywords[ven]=Partitions,Harddrive,HD,Mafhungo a sisitemu +Keywords[vi]=Phân vùng,Ổ cứng,HD,Thông tin Hệ thống +Keywords[wa]=pårticions,deure plake,HD,informåcion do sistinme +Keywords[xh]=Ulwahlulelwano ngokwamaqhekeza,Harddrive,HD,Ulwazi lwendlela yokusebenza +Keywords[zh_CN]=Partitions,Harddrive,HD,System Information,分区,硬盘,系统信息 +Keywords[zh_TW]=Partitions,Harddrive,HD,System Information,磁碟分割區,硬式磁碟機,硬碟,系統資訊 +Keywords[zu]=Izahluko,Harddrive,HD,Ulwazi Lwesistimu + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/pci.desktop b/kcontrol/info/pci.desktop new file mode 100644 index 000000000..9ee4452b3 --- /dev/null +++ b/kcontrol/info/pci.desktop @@ -0,0 +1,180 @@ +[Desktop Entry] +Exec=kcmshell pci +Icon=kcmpci +Type=Application +DocPath=kinfocenter/pci/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=pci +X-KDE-ParentApp=kinfocenter + +Name=PCI +Name[bn]=পি-সি-আই +Name[cs]=PCI sběrnice +Name[he]=התקני PCI +Name[hi]=पीसीआई +Name[is]=PCI-braut +Name[lo]=ອຸປະກອນ PCI +Name[ne]=पीसीआई +Name[ro]=Magistrala PCI +Name[ru]=Шина PCI +Name[te]=పిసిఐ +Name[th]=อุปกรณ์ PCI +Name[uk]=Шина PCI + +Comment=PCI information +Comment[af]=PCI informasie +Comment[ar]=معلومات PCI +Comment[az]=PCI haqqında mə'lumat +Comment[be]=Інфармацыя аб PCI +Comment[bg]=Информация за PCI шината +Comment[bn]=পি-সি-আই তথ্য +Comment[br]=Titouroù diwar-benn ar PCI +Comment[bs]=Informacije o PCI uređajima +Comment[ca]=Informació de PCI +Comment[cs]=Informace o PCI +Comment[csb]=Wëdowiédzô ò PCI +Comment[cy]=Gwybodaeth PCI +Comment[da]=PCI-information +Comment[de]=Informationen zu PCI +Comment[el]=Πληροφορίες PCI +Comment[eo]=Informo pri PCI +Comment[es]=Información sobre los dispositivos PCI +Comment[et]=PCI info +Comment[eu]=PCIri buruzko informazioa +Comment[fa]=اطلاعات PCI +Comment[fi]=PCI-tietoja +Comment[fr]=Informations PCI +Comment[fy]=PCI-Ynformaasje +Comment[ga]=Eolas PCI +Comment[gl]=Información de PCI +Comment[he]=מידע על התקני PCI +Comment[hi]=पीसीआई जानकारी +Comment[hr]=Podaci o PCI sabirnici +Comment[hu]=PCI-információk +Comment[id]=Informasi PCI +Comment[is]=Upplýsingar um PCI-braut +Comment[it]=Informazioni sul bus PCI +Comment[ja]=PCI の情報 +Comment[ka]=ცნობები PCI მოწყობილობების შესახებ +Comment[kk]=PCI құрылғылар мәліметі +Comment[km]=ព័ត៌មាន PCI +Comment[ko]=PCI 정보 +Comment[lo]=ຂໍ້ມູນອຸປະກອນ PCI +Comment[lt]=PCI informacija +Comment[lv]=PCI informācija +Comment[mk]=Информации за PCI +Comment[mn]=PCI-н мэдээлэл +Comment[ms]=Maklumat PCI +Comment[mt]=Informazzjoni dwar PCI +Comment[nb]=PCI-informasjon +Comment[nds]=Informatschoon över PCI +Comment[ne]=पीसीआई सूचना +Comment[nl]=PCI-informatie +Comment[nn]=PCI-informasjon +Comment[nso]=Tshedimoso ya PCI +Comment[oc]=Informacion de PCI +Comment[pa]=PCI ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o PCI +Comment[pt]=Informação sobre o PCI +Comment[pt_BR]=Informações PCI +Comment[ro]=Informații despre magistrala PCI +Comment[ru]=Сведения о устройствах PCI +Comment[rw]= Ibisobanuro PCI +Comment[se]=PCI-diehtu +Comment[sk]=Informácie o PCI +Comment[sl]=Podatki o vodilu PCI +Comment[sr]=PCI информације +Comment[sr@Latn]=PCI informacije +Comment[ss]=Umniningwane we PCI +Comment[sv]=PCI-information +Comment[ta]=PCI தகவல் +Comment[te]=పిసిఐ సమాచారం +Comment[tg]=Иттилооти PCI +Comment[th]=ข้อมูลอุปกรณ์ PCI +Comment[tr]=PCI hakkında bilgi +Comment[tt]=PCI turında +Comment[uk]=Інформація щодо шини PCI +Comment[uz]=PCI uskunalar haqida maʼlumot +Comment[uz@cyrillic]=PCI ускуналар ҳақида маълумот +Comment[ven]=Mafhungo a PCI +Comment[vi]=Thông tin về PCI +Comment[wa]=Informåcion so PCI +Comment[xh]=Inkcukacha ye PCI +Comment[zh_CN]=PCI 信息 +Comment[zh_TW]=PCI 資訊 +Comment[zu]=Ulwazi lwe-PCI + +Keywords=PCI,PCI-Devices,PCI-Bus,System Information +Keywords[af]=PCI,PCI-Devices,PCI-Bus,System Informasie +Keywords[ar]=PCI,أجهزة PCI,PCI-Bus,معلومات النظام +Keywords[az]=PCI,PCI-Avadanlıqları,PCI-Bus,Sistem Haqqında Mə'lumat +Keywords[be]=Прылады PCI,Сістэмная інфармацыя,PCI,PCI-Devices,PCI-Bus,System Information +Keywords[bg]=информация, система, системна, шина, PCI, PCI-Devices, PCI-Bus, System Information +Keywords[br]=PCI,trobarzhelloù PCI,bus PCI,titouroù reizhiad +Keywords[bs]=PCI,PCI-Devices,PCI-Bus,System Information,PCI uređaji,PCI-uređaji,PCI-sabirnica,informacije o sustavu +Keywords[ca]=PCI,Dispositius PCI,Bus PCI,Informació del sistema +Keywords[cs]=PCI,PCI-zařízení,PCI-sběrnice,Informace o systému +Keywords[csb]=PCI,ùrządzenia PCI,magistrala PCI,wëdowiédzô ò systemie +Keywords[cy]=PCI,Dyfeisiau-PCI,Bws-PCI,Gwybodaeth Cysawd +Keywords[da]=PCI,PCI-enheder,PCI-bus,Systeminformation +Keywords[de]=PCI,PCI-Geräte,PCI-Bus,Systeminformation +Keywords[el]=PCI,Συσκευές PCI,Δίαυλος PCI,Πληροφορίες συστήματος +Keywords[eo]=PCI,aparato,buso,sistemo,operaciumo,informo +Keywords[es]=PCI,Dispositivos PCI,Bus PCI,Información del sistema +Keywords[et]=PCI,PCi seadmed,PCI siin,Süsteemi info +Keywords[eu]=PCI,PCI-gailuak,PCI busa,Sistemaren informazioa +Keywords[fa]=PCI ،دستگاههای PCI ،گذرگاه PCI ،اطلاعات سیستم +Keywords[fi]=PCI,PCI-Laitteet,PCI-Väylä,Järjestelmätiedot +Keywords[fr]=PCI,périphériques PCI,bus PCI,informations système,pci +Keywords[fy]=PCI,PCI-devices,PCI-bus,systeemynformaasje,PCI-apparaten +Keywords[gl]=PCI,Dispositivos PCI,Bus PCI,Información do Sistema +Keywords[he]=מידע מערכת,אפיק PCI,התקני PCI,PCI,System Information +Keywords[hi]=पीसीआई,पीसीआई-औज़ार,पीसीआई-बस,तंत्र जानकारी +Keywords[hr]=PCI,PCI-Devices,PCI-Bus,System Information,PCI uređaji,PCI sabirnica,Podaci o sustavu +Keywords[hu]=PCI,PCI-eszközök,PCI-busz,rendszerinformáció +Keywords[id]=PCI,PCI-Divais,PCI-Bus,Informasi Sistem +Keywords[is]=PCI-tæki,PCI-braut,kerfi,upplýsingar +Keywords[it]=PCI,dispositivi PCI,bus PCI,informazioni sul sistema +Keywords[ja]=PCI,PCI-デバイス,PCI-バス,システムの情報 +Keywords[km]=PCI,ឧបករណ៍ PCI,ខ្សែ​បញ្ជូន PCI,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lo]=ອຸປະກອນ PCI,ບັສ PCI,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=PCI,PCI-įrenginiai,PCI-Bus,Sistemos Informacija +Keywords[lv]=PCI,PCI-Iekārtas,PCI-Šina,Sistēmas Informācija +Keywords[mk]=PCI,PCI-Devices,PCI-Bus,System Information,PCI уреди,PCI магистрала,PCI собирница,Информации за системот +Keywords[mn]=PCI,PCI-төхөөрөмж,PCI-Bus,Системийн мэдээлэл +Keywords[nb]=PCI,PCI-enheter,PCI-buss,Systeminformasjon +Keywords[nds]=PCI,PCI-Reedschappen,PCI Bus,Systeeminformatschoon +Keywords[ne]=पीसीआई, पीसीआई-यन्त्र, पीसीआई-बस, प्रणाली सूचना +Keywords[nl]=PCI,PCI-devices,PCI-bus,systeeminformatie,PCI-apparaten +Keywords[nn]=PCI,PCI-einingar,PCI-buss,systeminformasjon +Keywords[nso]=PCI,Maano a PCI,PCI-Bus,Tshedimoso ya System +Keywords[oc]=PCI,Dispositius PCI,Bus PCI,Informacion dèu sistemo +Keywords[pa]=PCI,PCI-ਜੰਤਰ,PCI-Bus,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=PCI,urządzenia PCI,magistrala PCI,informacja o systemie +Keywords[pt]=PCI,dispositivos PCI,bus PCI,informações do sistema +Keywords[pt_BR]=PCI,dispositivos PCI,Barramento PCI,Barramento PCI,Informações de sistema +Keywords[ro]=PCI,dispozitive PCI,bus PCI,informații despre sistem +Keywords[rw]=PCI,Apareye-PCI,Bisi-PCI,Amakuru Sisitemu +Keywords[se]=PCI,PCI-ovttadagat,PCI-bussa,vuogádatdiehtu +Keywords[sk]=PCI,PCI-zariadenia,PCI-zbernica,Systémové informácie +Keywords[sl]=PCI,naprave PCI,vodilo PCI,informacije o sistemu +Keywords[sr]=PCI,PCI-Devices,PCI-Bus,System Information,PCI уређаји,PCI магистрала,системске информације +Keywords[sr@Latn]=PCI,PCI-Devices,PCI-Bus,System Information,PCI uređaji,PCI magistrala,sistemske informacije +Keywords[sv]=PCI,PCI-enheter,PCI-buss,Systeminformation +Keywords[ta]=PCI,PCI-சாதனங்கள்,PCI-பஸ்,சாதன தகவல் +Keywords[te]=పిసిఐ,పిసిఐ-పరికరాలు,పిసిఐ-బస్, వ్యవస్థ సమాచారం +Keywords[th]=อุปกรณ์ PCI,บัส PCI,ข้อมูลระบบ +Keywords[tr]=PCI,PCI-Aygıtları,PCI-Bus,Sistem Hakkında Bilgi +Keywords[uk]=PCI,пристрої PCI,шина PCI,системна інформація +Keywords[uz]=PCI,PCI uskunalari,PCI-Bus,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=PCI,PCI ускуналари,PCI-Bus,Тизим ҳақида маълумот +Keywords[ven]=PCI,Maano a PCI,PCI Bus,Mafhungo a sisitemu +Keywords[vi]=PCI,Thiết bị PCI,Thông tin Hệ thống +Keywords[wa]=PCI,éndjins PCI,Bus PCI,informåcion do sistinme +Keywords[xh]=PCI,PCI-Amacebo,PCI-Ibhasi,Ulwazi lwendlela +Keywords[zh_CN]=PCI,PCI-Devices,PCI-Bus,System Information,PCI 设备,PCI 总线,系统信息 +Keywords[zh_TW]=PCI,PCI-Devices,PCI-Bus,System Information,PCI 設備,PCI 匯流排,系統資訊 +Keywords[zu]=PCI,Amathuluzi-PCI,Ibhasi-PCI,Ulwaz Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/processor.desktop b/kcontrol/info/processor.desktop new file mode 100644 index 000000000..580aa7e3a --- /dev/null +++ b/kcontrol/info/processor.desktop @@ -0,0 +1,249 @@ +[Desktop Entry] +Exec=kcmshell processor +Icon=kcmprocessor +Type=Application +DocPath=kinfocenter/processor/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=cpu +X-KDE-ParentApp=kinfocenter + +Name=Processor +Name[af]=Verwerker +Name[ar]=المعالج +Name[az]=İşlədici +Name[be]=Працэсар +Name[bg]=Процесор +Name[bn]=প্রসেসর +Name[br]=Kewerier +Name[bs]=Procesor +Name[ca]=Processador +Name[cs]=Procesor +Name[csb]=Procesora +Name[cy]=Prosesydd +Name[de]=Prozessor +Name[el]=Επεξεργαστής +Name[eo]=Procezilo +Name[es]=Procesador +Name[et]=Protsessor +Name[eu]=Prozesagailua +Name[fa]=پردازنده +Name[fi]=Prosessori +Name[fr]=Processeur +Name[fy]=Ferwurkingsienheid +Name[ga]=Próiseálaí +Name[gl]=Procesador +Name[he]=מעבד +Name[hi]=प्रोसेसर +Name[hr]=Procesor +Name[hu]=Processzor +Name[id]=Prosesor +Name[is]=Örgjörvi +Name[it]=Processore +Name[ja]=プロセッサ +Name[ka]=პროცესორი +Name[kk]=Процессор +Name[km]=ខួរក្បាល +Name[ko]=프로세서 +Name[lo]=ໂພຣເຊັດເຊີ +Name[lt]=Procesorius +Name[lv]=Procesors +Name[mk]=Процесор +Name[mn]=Процессор +Name[ms]=Pemproses +Name[mt]=CPU +Name[nb]=Prosessor +Name[nds]=Perzesser +Name[ne]=प्रोसेसर +Name[nn]=Prosessor +Name[nso]=Mophethagatsi +Name[oc]=Processador +Name[pa]=ਪਰੋਸੈਸਰ +Name[pl]=Procesor +Name[pt]=Processador +Name[pt_BR]=Processador +Name[ro]=Procesor +Name[ru]=Процессор +Name[rw]=Munonosora +Name[se]=Doaimmár +Name[sk]=Procesor +Name[sl]=Procesor +Name[sr]=Процесор +Name[sr@Latn]=Procesor +Name[ss]=Sichubi +Name[ta]=செயல்முறையாக்கம் +Name[te]=ప్రాసెసర్ +Name[tg]=Протсессор +Name[th]=หน่วยประมวลผล +Name[tr]=İşlemci +Name[tt]=Prosessor +Name[uk]=Процесор +Name[uz]=Protsessor +Name[uz@cyrillic]=Процессор +Name[ven]=Mubveledzi +Name[vi]=Bộ vi xử lý +Name[wa]=Processeu +Name[xh]=Umqhubekekisi phambili +Name[zh_CN]=处理器 +Name[zh_TW]=處理器 +Name[zu]=Umqhubekisi + +Comment=Processor information +Comment[af]=Verwerker informasie +Comment[ar]=معلومات المعالج +Comment[az]=İşlədici haqqında mə'lumat +Comment[be]=Інфармацыя аб працэсары +Comment[bg]=Информация за процесора(ите) на системата +Comment[bn]=প্রসেসর তথ্য +Comment[br]=Titouroù diwar-benn ar c'hewerier +Comment[bs]=Informacije o procesoru +Comment[ca]=Informació del processador +Comment[cs]=Informace o procesoru +Comment[csb]=Wëdowiédzô ò procesorze +Comment[cy]=Gwybodaeth prosesydd +Comment[da]=Information om processoren +Comment[de]=Informationen zum Prozessor +Comment[el]=Πληροφορίες για τον επεξεργαστή +Comment[eo]=Informo pri procezilo +Comment[es]=Información sobre el procesador +Comment[et]=Protsessori info +Comment[eu]=Prozesagailuari buruzko informazioa +Comment[fa]=اطلاعات پردازنده +Comment[fi]=Tietoja prosessorista +Comment[fr]=Informations sur le processeur +Comment[fy]=Ferwurkingsienheid ynformaasje +Comment[ga]=Eolas faoin phróiseálaí +Comment[gl]=Información do Procesador +Comment[he]=מידע על המעבד +Comment[hi]=प्रोसेसर जानकारी +Comment[hr]=Podaci o procesoru +Comment[hu]=A processzor jellemzői +Comment[id]=Informasi Prosesor +Comment[is]=Upplýsingar um örgjörva +Comment[it]=Informazioni sul processore +Comment[ja]=プロセッサの情報 +Comment[ka]=ინფორმაცია პროცესორის შესახებ +Comment[kk]=Процессор мәліметі +Comment[km]=ព័ត៌មាន​ខួរក្បាល +Comment[ko]=프로세서 정보 +Comment[lo]=ຂໍ້ມູນໂພຣເຊັດເຊີ +Comment[lt]=Procesoriaus informacija +Comment[lv]=Procesora informācija +Comment[mk]=Информации за процесорот +Comment[mn]=Процессорын мэдээлэл +Comment[ms]=Maklumat pemproses +Comment[mt]=Informazzjoni dwar CPU +Comment[nb]=Prosessorinformasjon +Comment[nds]=Informatschoon över den Perzesser +Comment[ne]=प्रोसेसर सूचना +Comment[nl]=Processorinformatie +Comment[nn]=Prosessorinformasjon +Comment[nso]=Tshedimoso ya Mophethagatsi +Comment[oc]=Informacion dèu processador +Comment[pa]=ਪਰੋਸੈਸਰ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o procesorze +Comment[pt]=Informação sobre o processador +Comment[pt_BR]=Informações sobre o processador +Comment[ro]=Informații despre parametrii microprocesorului +Comment[ru]=Сведения о процессоре +Comment[rw]= Ibisobanuro bya Munonosora +Comment[se]=Doaimmárdieđut +Comment[sk]=Informácie o procesore +Comment[sl]=Podatki o procesorju +Comment[sr]=Информације о процесору +Comment[sr@Latn]=Informacije o procesoru +Comment[ss]=Umniningwane wesichubi +Comment[sv]=Processorinformation +Comment[ta]=செயல்முறை தகவல் +Comment[te]=ప్రాసెసర్ సమాచారం +Comment[tg]=Иттилооти Протсессор +Comment[th]=ข้อมูลหน่วยประมวลผล +Comment[tr]=İşlemci hakkında bilgi +Comment[tt]=Processor turında +Comment[uk]=Інформація щодо процесора +Comment[uz]=Protsessor haqida maʼlumot +Comment[uz@cyrillic]=Процессор ҳақида маълумот +Comment[ven]=Mafhungo a mubveledzi +Comment[vi]=Thông tin về bộ vi xử lý +Comment[wa]=Informåcion sol processeu +Comment[xh]=Inkcukacha yenkcukacha +Comment[zh_CN]=处理器信息 +Comment[zh_TW]=處理器資訊 +Comment[zu]=Ulwazi lomqhubekisi + +Keywords=Processor,CPU,FPU,MHz,System Information +Keywords[af]=Processor,CPU,FPU,MHz,System Informasie +Keywords[ar]=المعالج,CPU,FPU,MHz,معلومات النظام +Keywords[az]=İşlədici,MİB,FPU,MHz,Sistem Haqqında Mə'lumat +Keywords[be]=Працэсар,МГц,Сістэмная інфармацыя,Processor,CPU,FPU,MHz,System Information +Keywords[bg]=информация, система, системна, процесор, Processor, CPU, FPU, MHz, System Information +Keywords[br]=Kewerier,UTK,UNS,MHz,titouroù reizhiad +Keywords[bs]=Processor,CPU,FPU,MHz,System Information,procesor,informacije o sustavu +Keywords[ca]=Processador,CPU,FPU,MHz,Informació del sistema +Keywords[cs]=Procesor,CPU,FPU,MHz,Informace o systému +Keywords[csb]=procesora,CPU,JAL,FPU,MHz,wëdowiédzô ò systemie +Keywords[cy]=Prosesydd,CPU,FPU,MHz,Gwybodaeth Cysawd +Keywords[da]=Processor,CPU,FPU,MHz,Systeminformation +Keywords[de]=Prozessor,CPU,FPU,MHz,Systeminformation +Keywords[el]=Επεξεργαστής,KME,FPU,Πληροφορίες συστήματος +Keywords[eo]=procezilo,CPU,FPU,MHz,frekvenco,sistemo,operaciumo,informo +Keywords[es]=Procesador,CPU,FPU,MHz,Información del sistema +Keywords[et]=Protsessor,CPU,FPU,MHz,Süsteemi info +Keywords[eu]=Prozesagailua,CPU,FPU,MHz,Sistemaren informazioa +Keywords[fa]=پردازنده، واحد پردازش مرکزی، FPU، مگاهرتز، اطلاعات سیستم +Keywords[fi]=Prosessori,CPU,FPU,MHz,Järjestelmätiedot +Keywords[fr]=processeur,CPU,FPU,MHz,informations système,cpu +Keywords[fy]=Processor,Ferwurkingsienheid,CPU,FPU,MHz,Systeemynformaasje +Keywords[ga]=Próiseálaí,CPU,LAP,FPU,MHz,Eolas faoin Chóras +Keywords[gl]=Procesador,CPU,FPU,MHz,Información do Sistema +Keywords[he]=FPU,מעבד,מעבד מתמטי,מגה־הרץ,מידע מערכת,System Information +Keywords[hi]=प्रोसेसर,सीपीयू,एफपीयू,एमएचज़ेड,तंत्र जानकारी +Keywords[hr]=Processor,CPU,FPU,MHz,System Information,procesor,Podaci o sustavu +Keywords[hu]=processzor,CPU,FPU,MHz,rendszerinformáció +Keywords[id]=Prosesor,CPU,FPU,MHz,Informasi Sistem +Keywords[is]=örgjörvi,örgjörfi,Gjörvi,kerfi,upplýsingar,CPU,MHz,FPUz +Keywords[it]=processore,CPU,FPU,MHz,informazioni sul sistema +Keywords[ja]=プロセッサ,CPU,FPU,MHz,システムの情報 +Keywords[ka]=პროცესორი,CPU,FPU,MHz,ინფორმაცია სისტემის შესახებ +Keywords[km]=ខួរក្បាល,CPU,FPU,MHz,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lo]=ໂພຣເຊັດເຊີ,CPU,FPU,MHz,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Procesorius,CPU,FPU,MHz,Sistemos Informacija +Keywords[lv]=Procesors,CPU,FPU,MHz,Sistēmas Informācija +Keywords[mk]=Processor,CPU,FPU,MHz,System Information,Процесор,Информации за системот +Keywords[mn]=Процессор,CPU,FPU,MHz,Системийн мэдээлэл +Keywords[ms]=Pemproses,CPU,FPU,MHz,Maklumat Sistem +Keywords[nb]=Prosessor,CPU,FPU,Sentralenhet,MHz,Systeminformasjon +Keywords[nds]=Perzesser,CPU,FPU,MHz,Systeeminformatschoon +Keywords[ne]=प्रोसेसर, सीपीयू, एफपीयू, एमएचजेड, प्रणाली सूचना +Keywords[nl]=processor,CPU,FPU,MHz,systeeminformatie +Keywords[nn]=prosessor,CPU,FPU,MHz,systeminformasjon +Keywords[nso]=Mophethagatsi,CPU,FPU,MHz,Tshedimoso ya System +Keywords[oc]=Processador,CPU,FPU,MHz,Informacion dèu sistemo +Keywords[pa]=ਪਰੋਸੈਸਰ,CPU,FPU,MHz,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=procesor,CPU,JAL,FPU,MHz,informacja o systemie +Keywords[pt]=processador,CPU,FPU,MHz,informações do sistema +Keywords[pt_BR]=Processador,CPU,FPU,MHz,Informações de sistema +Keywords[ro]=procesor,microprocesor,CPU,FPU,MHz,informații despre sistem +Keywords[rw]=Munonosora,CPU,FPU,MHz,Amakuru Sisitemu +Keywords[se]=Doaimmár,CPU,FPU,MHz,vuogádatdieđut +Keywords[sk]=Procesor,CPU,FPU,MHz,Systémové Informácie +Keywords[sl]=procesor,CPE,CPU,FPU,MHz,informacije o sistemu +Keywords[sr]=Processor,CPU,FPU,MHz,System Information,процесор,системске информације +Keywords[sr@Latn]=Processor,CPU,FPU,MHz,System Information,procesor,sistemske informacije +Keywords[sv]=Processor,CPU,FPU,MHz,Systeminformation +Keywords[ta]=செயலி,CPU,FPU,MHz,அமைப்புத் தகவல் +Keywords[te]=ప్రాసెసర్, సిపియు, ఎఫ్ పి యు, ఎం హెర్జ్, వ్యవస్థ సమాచారం +Keywords[th]=โพรเซสเซอร์,หน่วยประมวลผล,CPU,FPU,MHz,ข้อมูลระบบ +Keywords[tr]=İşlemci,MİB,FPU,MHz,Sistem Hakkında Bilgi +Keywords[uk]=процесор,CPU,FPU,МГц,системна інформація +Keywords[uz]=Protsessor,CPU,FPU,MGs,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Процессор,CPU,FPU,МГц,Тизим ҳақида маълумот +Keywords[ven]=Mubveledzi,CPU,FPU,MHz,Mafhungo a sisitemu +Keywords[vi]=Bộ vi xử lý,CPU,FPU,Mhz,Thông tin Hệ thống +Keywords[wa]=Processeu,CPU,FPU,MHz,informåcion do sistinme +Keywords[xh]=Umqhubekekisi,CPU,FPU,MHz,Inkcukacha Yendlela yokusebenza +Keywords[zh_CN]=Processor,CPU,FPU,MHz,System Information,处理器,系统信息 +Keywords[zh_TW]=Processor,CPU,FPU,MHz,System Information,處理器,中央處理器,浮點運算器,系統資訊 +Keywords[zu]=Umqhubekisi,CPU,FPU,MHz,Ulwazi Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/scsi.desktop b/kcontrol/info/scsi.desktop new file mode 100644 index 000000000..9b62edbf7 --- /dev/null +++ b/kcontrol/info/scsi.desktop @@ -0,0 +1,177 @@ +[Desktop Entry] +Exec=kcmshell scsi +Icon=kcmscsi +Type=Application +DocPath=kinfocenter/scsi/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=scsi +X-KDE-ParentApp=kinfocenter + +Name=SCSI +Name[af]=Scsi +Name[bn]=স্কাসি +Name[fa]=اسکازی +Name[he]=התקני SCSI +Name[hi]=एससीएसआई +Name[is]=SCSI-tæki +Name[lo]=ອຸປະກອນ SCSI +Name[ne]=एससीएसआई +Name[ro]=Magistrala SCSI +Name[th]=อุปกรณ์ SCSI + +Comment=SCSI information +Comment[af]=Scsi informasie +Comment[ar]=معلومات SCSI +Comment[az]=SCSI haqqında mə'lumat +Comment[be]=Інфармацыя аб SCSI +Comment[bg]=Информация за SCSI шината +Comment[bn]=স্কাসি (SCSI) তথ্য +Comment[br]=Titouroù diwar-benn ar SCSI +Comment[bs]=Informacije o SCSI uređajima +Comment[ca]=Informació de SCSI +Comment[cs]=Informace o SCSI +Comment[csb]=Wëdowiédzô ò SCSI +Comment[cy]=Gwybodaeth SCSI +Comment[da]=SCSI-information +Comment[de]=Informationen zu SCSI-Geräten +Comment[el]=Πληροφορίες SCSI +Comment[eo]=Informo pri SCSI +Comment[es]=Información sobre los dispositivos SCSI +Comment[et]=SCSI info +Comment[eu]=SCSIri buruzko informazioa +Comment[fa]=اطلاعات اسکازی +Comment[fi]=SCSI-tietoja +Comment[fr]=Informations SCSI +Comment[fy]=SCSI-ynformaasje +Comment[ga]=Eolas SCSI +Comment[gl]=Información de SCSI +Comment[he]=מידע על SCSI +Comment[hi]=एससीएसआई जानकारी +Comment[hr]=Podaci o SCSI sabirnici +Comment[hu]=SCSI-információk +Comment[id]=Informasi SCSI +Comment[is]=Upplýsingar um SCSI-tæki +Comment[it]=Informazioni sul bus SCSI +Comment[ja]=SCSI の情報 +Comment[ka]=ინფორმაცია SCSI–ს შესახებ +Comment[kk]=SCSI құрылғылар мәліметі +Comment[km]=ព័ត៌មាន SCSI +Comment[ko]=SCSI 정보 +Comment[lo]=ຂໍ້ມູນອຸປະກອນ SCSI +Comment[lt]=SCSI informacija +Comment[lv]=SCSI informācija +Comment[mk]=Информации за SCSI +Comment[mn]=SCSI-төхөөрөмжийн мэдээлэл +Comment[ms]=Maklumat SCSI +Comment[mt]=Informazzjoni dwar SCSI +Comment[nb]=SCSI-informasjon +Comment[nds]=Informatschoon över SCSI +Comment[ne]=एससीएसआई सूचना +Comment[nl]=SCSI-informatie +Comment[nn]=SCSI-informasjon +Comment[nso]=Tshedimoso ya SCSI +Comment[oc]=Informacion de SCSI +Comment[pa]=SCSI ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o SCSI +Comment[pt]=Informação sobre o SCSI +Comment[pt_BR]=Informações sobre SCSI +Comment[ro]=Informații despre magistrala SCSI +Comment[ru]=Сведения о устройствах SCSI +Comment[rw]= Ibisobanuro SCSI +Comment[se]=SCSI-diehtu +Comment[sk]=Informácie o SCSI +Comment[sl]=Podatki o vodilu SCSI +Comment[sr]=Информације о SCSI уређајима +Comment[sr@Latn]=Informacije o SCSI uređajima +Comment[ss]=Umniningwane weSCSI +Comment[sv]=SCSI-information +Comment[ta]=SCSI தகவல் +Comment[te]=SCSI సమాచారం +Comment[tg]=Иттилооти SCSI +Comment[th]=ข้อมูลอุปกรณ์ SCSI +Comment[tr]=SCSI hakkında bilgi +Comment[tt]=SCSI turında +Comment[uk]=Інформація щодо SCSI +Comment[uz]=SCSI uskunalar haqida maʼlumot +Comment[uz@cyrillic]=SCSI ускуналар ҳақида маълумот +Comment[ven]=Mafhungo a SCSI +Comment[vi]=Thông tin về SCSI +Comment[wa]=Informåcion so SCSI +Comment[xh]=Inkcukacha ye SCSI +Comment[zh_CN]=SCSI 信息 +Comment[zh_TW]=SCSI 資訊 +Comment[zu]=Ulwazi lwe-SCSI + +Keywords=SCSI,SCSI-Bus,System Information +Keywords[af]=SCSI,SCSI-Bus,System Informasie +Keywords[az]=SCSI,SCSI-Bus,Sistem Haqqında Mə'lumat +Keywords[be]=Шына SCSI,Сістэмная інфармацыя,SCSI,SCSI-Bus,System Information +Keywords[bg]=информация, система, системна, шина, SCSI, SCSI-Bus, System Information +Keywords[br]=SCSI,bus SCSI,titouroù reizhiad +Keywords[bs]=SCSI,SCSI-Bus,System Information,SCSI-sabirnica,informacije o sustavu +Keywords[ca]=SCSI,Bus SCSI,Informació del sistema +Keywords[cs]=SCSI,SCSI-sběrnice,Informace o systému +Keywords[csb]=SCSI,magistrala SCSI,wëdowiédzô ò systemie +Keywords[cy]=SCSI,Bws-SCSI,Gwybodaeth Cysawd +Keywords[da]=SCSI,SCSI-bus,Systeminformation +Keywords[de]=SCSI,SCSI-Bus,Systeminformation +Keywords[el]=SCSI,Δίαυλος SCSI,Πληροφορίες συστήματος +Keywords[eo]=SCSI,buso,sistemo,operaciumo,informo +Keywords[es]=SCSI,Bus SCSI,Información del sistema +Keywords[et]=SCSI,SCSI siin,Süsteemi info +Keywords[eu]=SCSI,SCSI busa,Sistemaren informazioa +Keywords[fa]=اسکازی، گذرگاه اسکازی، اطلاعات سیستم +Keywords[fi]=SCSI,SCSI-Väylä,Järjestelmätiedot +Keywords[fr]=SCSI,bus SCSI,informations système,scsi +Keywords[fy]=SCSI,SCSI-bus,systeemynformaasje +Keywords[ga]=SCSI,Bus SCSI,Eolas faoin Chóras +Keywords[gl]=SCSI,Bus SCSI,Información do Sistema +Keywords[he]=מידע מערכת,אפיק SCSI,SCSI,SCSI-Bus,System Information +Keywords[hi]=एससीएसआई,एससीएसआई-बस,तंत्र जानकारी +Keywords[hr]=SCSI,SCSI-Bus,System Information,Podaci o sustavu,SCSI sabirnica +Keywords[hu]=SCSI,SCSI-busz,rendszerinformáció +Keywords[id]=SCSI,SCSI-Bus,Informasi Sistem +Keywords[is]=SCSI-braut,kerfi,upplýsingar +Keywords[it]=SCSI,bus SCSI,informazioni sul sistema +Keywords[ja]=SCSI,SCSI-バス,システムの情報 +Keywords[km]=SCSI,ខ្សែ​បញ្ជូន SCSI,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lo]=ອຸູປະກອນ SCSI,ບັສ SCSI,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=SCSI,SCSI-Bus,Sistemos Informacija +Keywords[lv]=SCSI,SCSI-Šina,Sistēmas Informācija +Keywords[mk]=SCSI,SCSI-Bus,System Information,SCSI магистрала, SCSI собирница,Информации за системот, +Keywords[mn]=SCSI,SCSI-Bus,Системийн мэдээлэл +Keywords[nb]=SCSI,SCSI-buss,Systeminformasjon +Keywords[nds]=SCSI,SCSI-Bus,Systeeminformatschoon +Keywords[ne]=एससीएसआई, एससीएसआई-बस, प्रणाली सूचना +Keywords[nl]=SCSI,SCSI-bus,systeeminformatie +Keywords[nn]=SCSI,SCSI-buss,systeminformasjon +Keywords[nso]=SCSI,SCSI-Bus,Tshedimoso ya System +Keywords[oc]=SCSI,Bus SCSI,Informacion dèu sistemo +Keywords[pa]=SCSI,SCSI-Bus,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=SCSI,magistrala SCSI,informacja o systemie +Keywords[pt]=SCSI,bus SCSI,informações do sistema +Keywords[pt_BR]=SCSI,Barramento SCSI,Informações de sistema +Keywords[ro]=SCSI,magistrala SCSI,bus SCSI,informații despre sistem +Keywords[rw]=SCSI,Bisi-SCSI,Amakuru Sisitemu +Keywords[se]=SCSI,SCSI-bussa,vuogádatdiehtu +Keywords[sk]=SCSI,SCSI-zbernica,Systémové Informácie +Keywords[sl]=SCSI,vodilo SCSI,informacije o sistemu +Keywords[sr]=SCSI,SCSI-Bus,System Information,SCSI магистрала,системске информације +Keywords[sr@Latn]=SCSI,SCSI-Bus,System Information,SCSI magistrala,sistemske informacije +Keywords[sv]=SCSI,SCSI-buss,Systeminformation +Keywords[ta]=SCSI,SCSI-பஸ்,அமைப்பு தகவல் +Keywords[th]=อุปกรณ์ SCSI,บัส SCSI,ข้อมูลระบบ +Keywords[tr]=SCSI,SCSI-Bus,Sistem Hakkında Bilgi +Keywords[uk]=SCSI,шина SCSI,системна інформація +Keywords[uz]=SCSI,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=SCSI,Тизим ҳақида маълумот +Keywords[ven]=SCSI,SCSI-Bus,Mafhungo a sisitemu +Keywords[vi]=SCSI,SCSI-Bus,Thông tin Hệ thống +Keywords[wa]=SCSI,Bus SCSI,informåcion do sistinme +Keywords[xh]=SCSI,SCSI-Ibhasi,Ulwazi lwendlela +Keywords[zh_CN]=SCSI,SCSI-Bus,System Information,SCSI 总线,系统信息 +Keywords[zh_TW]=SCSI,SCSI-Bus,System Information,系統資訊 +Keywords[zu]=SCSI,Ibhasi-SCSI,Ulwazi Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/sound.desktop b/kcontrol/info/sound.desktop new file mode 100644 index 000000000..6a96da85d --- /dev/null +++ b/kcontrol/info/sound.desktop @@ -0,0 +1,243 @@ +[Desktop Entry] +Exec=kcmshell sound +Icon=kcmsound +Type=Application +DocPath=kinfocenter/sound/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=sound +X-KDE-ParentApp=kinfocenter + +Name=Sound +Name[af]=Klank +Name[ar]=الصوت +Name[az]=Səs +Name[be]=Гук +Name[bg]=Аудио +Name[bn]=সাউণ্ড +Name[br]=Son +Name[bs]=Zvuk +Name[ca]=So +Name[cs]=Zvuk +Name[csb]=Zwãk +Name[cy]=Sain +Name[da]=Lyd +Name[el]=Ήχος +Name[eo]=Sono +Name[es]=Sonido +Name[et]=Heli +Name[eu]=Soinua +Name[fa]=صوت +Name[fi]=Ääni +Name[fo]=Ljóð +Name[fr]=Son +Name[fy]=Lûd +Name[ga]=Fuaim +Name[gl]=Son +Name[he]=צליל +Name[hi]=ध्वनि +Name[hr]=Zvuk +Name[hu]=Hang +Name[id]=Suara +Name[is]=Hljóð +Name[it]=Suono +Name[ja]=サウンド +Name[ka]=ხმა +Name[kk]=Дыбыс +Name[km]=សំឡេង +Name[ko]=소리 +Name[lo]=ລະບົບສງງ +Name[lt]=Garsas +Name[lv]=Skaņa +Name[mk]=Звук +Name[mn]=Чимээ +Name[ms]=Bunyi +Name[mt]=Ħsejjes +Name[nb]=Lyd +Name[nds]=Kläng +Name[ne]=ध्वनि +Name[nl]=Geluid +Name[nn]=Lyd +Name[nso]=Modumo +Name[oc]=Son +Name[pa]=ਧੁਨੀ +Name[pl]=Dźwięk +Name[pt]=Som +Name[pt_BR]=Som +Name[ro]=Sunet +Name[ru]=Звук +Name[rw]=ijwi +Name[se]=Jietna +Name[sk]=Zvuk +Name[sl]=Zvok +Name[sr]=Звук +Name[sr@Latn]=Zvuk +Name[ss]=Umsindvo +Name[sv]=Ljud +Name[ta]=ஒலி +Name[te]=శబ్దం +Name[tg]=Садо +Name[th]=ระบบเสียง +Name[tr]=Ses +Name[tt]=Tawış +Name[uk]=Звук +Name[uz]=Tovush +Name[uz@cyrillic]=Товуш +Name[ven]=Mubvumo +Name[vi]=Âm thanh +Name[wa]=Son +Name[xh]=Isandi +Name[zh_CN]=音效 +Name[zh_TW]=音效 +Name[zu]=Umsindo + +Comment=Sound information +Comment[af]=Klank informasie +Comment[ar]=معلومات الصوت +Comment[az]=Səs haqqında mə'lumat +Comment[be]=Інфармацыя аб гуку +Comment[bg]=Информация за аудио системата +Comment[bn]=শব্দ সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar son +Comment[bs]=Informacije o zvuku +Comment[ca]=Informació del so +Comment[cs]=Informace o zvuku +Comment[csb]=Wëdowiédzô ò nastôwach zwãkù +Comment[cy]=Gwybodaeth Sain +Comment[da]=Information om lyd +Comment[de]=Informationen zur Soundkarte +Comment[el]=Πληροφορίες για τον Ήχο +Comment[eo]=Informo pri Sono +Comment[es]=Información sobre el sonido +Comment[et]=Heliseadmete info +Comment[eu]=Soinuari buruzko informazioa +Comment[fa]=اطلاعات صوتی +Comment[fi]=Äänitiedot +Comment[fr]=Informations sur le son +Comment[fy]=Lûdssysteemynformaasje +Comment[ga]=Eolas fuaime +Comment[gl]=Información do Son +Comment[he]=מידע על צליל +Comment[hi]=ध्वनि जानकारी +Comment[hr]=Podaci o zvuku +Comment[hu]=A hangkezelés jellemzői +Comment[id]=Informasi Suara +Comment[is]=Upplýsingar um hljóð +Comment[it]=Informazioni sul suono +Comment[ja]=サウンドの情報 +Comment[ka]=ინფორმაცია ხმის შესახებ +Comment[kk]=Дыбыс мәліметі +Comment[km]=ព័ត៌មាន​សំឡេង +Comment[ko]=소리 정보 +Comment[lo]=ຂໍ້ມູນລະບົບສງງ +Comment[lt]=Garso informacija +Comment[lv]=Skaņas informācija +Comment[mk]=Информации за звукот +Comment[mn]=Дууны картын мэдээлэл +Comment[ms]=Maklumat bunyi +Comment[mt]=Informazzjoni dwar Ħsejjes +Comment[nb]=Lydinformasjon +Comment[nds]=Klang-Informatschoon +Comment[ne]=ध्वनि सूचना +Comment[nl]=Geluidssysteeminformatie +Comment[nn]=Lydinformasjon +Comment[nso]=Tshedimoso ya Modumo +Comment[oc]=Informacion dèu son +Comment[pa]=ਧੁਨੀ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o ustawieniach dźwięku +Comment[pt]=Informação sobre o som +Comment[pt_BR]=Informações sobre o Som +Comment[ro]=Informații despre placa de sunet +Comment[ru]=Сведения о звуке +Comment[rw]= Ibisobanuro by'Ijwi +Comment[se]=Jietnadiehtu +Comment[sk]=Informácie o zvuku +Comment[sl]=Podatki o zvoku +Comment[sr]=Информације о звуку +Comment[sr@Latn]=Informacije o zvuku +Comment[ss]=Umniningwane wemsidvo +Comment[sv]=Ljudinformation +Comment[ta]=ஒலித் தகவல் +Comment[te]=శబ్ద సమాచారం +Comment[tg]=Иттилооти садо +Comment[th]=ข้อมูลระบบเสียง +Comment[tr]=Ses hakkında bilgi +Comment[tt]=Tawış turında +Comment[uk]=Інформація щодо звукової карти +Comment[uz]=Tovush haqida maʼlumot +Comment[uz@cyrillic]=Товуш ҳақида маълумот +Comment[ven]=Mafhungo a mubvumo +Comment[vi]=Thông tin về âm thanh +Comment[wa]=Informåcion sol son +Comment[xh]=Inkcukacha yesandi +Comment[zh_CN]=音响效果信息 +Comment[zh_TW]=音效資訊 +Comment[zu]=Ulwazi Lomsindo + +Keywords=Sound,Audio,Soundcard,MIDI,OSS,System Information +Keywords[af]=Sound,Audio,Soundcard,Midi,OSS,System Informasie +Keywords[az]=Sound,Audio,Soundcard,MIDI,OSS,System Information,Səs,Səskartı,Midi,OSS,Sistem Haqqında Mə'lumat +Keywords[be]=Гук,Аўдыё,Гукавая карта,Сістэмная інфармацыя,Сінтэзатар,Sound,Audio,Soundcard,MIDI,OSS,System Information +Keywords[bg]=информация, система, системна, аудио, звук Sound, Audio, Soundcard, MIDI, OSS, System Information +Keywords[br]=Son,klevet,kartenn son,MIDI,OSS,titouroù reizhiad +Keywords[bs]=Sound,Audio,Soundcard,Midi,OSS,System Information,Zvuk,Informacije o sistemu,Zvučna kartica +Keywords[ca]=So,Àudio,tarja de so,MIDI,OSS,Informació del sistema +Keywords[cs]=Zvuk,Audio,Zvuková karta,Midi,OSS,Informace o systému +Keywords[csb]=zwãk,audio,zwãkòwô karta,Midi,OSS,wëdowiédzô ò systemie +Keywords[cy]=Sain,Swn,Cerdyn Sain,Midi,OSS,Gwybodaeth Gysawd +Keywords[da]=Lyd,Audio,Lydkort,MIDI,OSS,Systeminformation +Keywords[de]=Klänge,Sound,Audio,Soundkarte,Systemklänge,Midi,OSS,Systeminformation +Keywords[el]=Ήχος,Μουσική,Κάρτα ήχου,MIDI,OSS,Πληροφορίες συστήματος +Keywords[eo]=Sonoro,Sono,Aŭdio,Sonorkarto,MIDI,OSS,sistemo,informo,operaciumo +Keywords[es]=Sonido,Audio,Tarjeta de sonido,MIDI,OSS,Información del sistema +Keywords[et]=Heli,Audio,Helikaart,MIDI,OSS,Süsteemi info +Keywords[eu]=Soinua,Audioa,Soinu txartela,Midi,OSS,Sistemaren informazioa +Keywords[fa]=صوت، صوتی، کارت صوتی ،MIDI ،OSS ،اطلاعات سیستم +Keywords[fi]=Ääni,Äänikortti,Midi,OSS,Järjestelmätiedot +Keywords[fr]=son,audio,carte son,midi,OSS,informations système +Keywords[fy]=lûd,audio,soundcard,midi,OSS,systeemynformaasje,ALSA,lûdskaart +Keywords[ga]=Fuaim,Cárta Fuaime,MIDI,OSS,Eolas faoin Chóras +Keywords[gl]=Son,Audio,Tarxeta de son,Midi,OSS,Información do Sistema +Keywords[he]=מידע מערכת,OSS,Midi,צליל,שמע,כרטיס קול,מידי,Sound, Audio,Soundcard,MIDI,OSS,System Information +Keywords[hi]=ध्वनि,ऑडियो,साउंडकार्ड,मिडी,ओएसएस,तंत्र जानकारी +Keywords[hr]=Sound,Audio,Soundcard,Midi,OSS,System Information,Zvuk,Podaci o sustavu,Zvučna kartica +Keywords[hu]=hang,audió,hangkártya,MIDI,OSS,rendszerinformáció +Keywords[id]=Sound,Audio,KartuSuara,Midi,OSS,Informasi Sistem +Keywords[is]=Hljóð,Hljóðkort,kerfi,upplýsingar,OSS,MIDI +Keywords[it]=suono,audio,scheda sonora,MIDI,OSS,informazioni sul sistema +Keywords[ja]=サウンド,オーディオ,サウンドカード,MIDI,OSS,システムの情報 +Keywords[ka]=ხმა,აუდიო,აუდიოდაბა,MIDI,OSS,ინფორმაცია სისტემის შესახებ +Keywords[km]=សំឡេង,សោត,បន្ទះ​សំឡេង,MIDI,OSS,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lt]=Garsas,Audio,Garso korta,Midi,OSS,Sistemos informacija +Keywords[lv]=Skaņa,Audio,Skaņaskarte,MIDI,OSS,Sistēmas Informācija +Keywords[mk]=Sound,Audio,Soundcard,MIDI,OSS,System Information,Звук,Аудио,Звучна картичка,Информации за системот +Keywords[mt]=Sound,Audio,Soundcard,MIDI,OSS,System Information,Ħsejjes +Keywords[nb]=Lyd,Lydkort,Midi,OSS,Systeminformasjon +Keywords[nds]=Klang,Audio,Soundkort,Midi,OSS,Systeeminformatschoon +Keywords[ne]=ध्वनि, अडियो, ध्वनि कार्ड, MIDI, OSS, प्रणाली सूचना +Keywords[nl]=geluid,audio,soundcard,midi,OSS,systeeminformatie,ALSA,geluidskaart +Keywords[nn]=lyd,lydkort,MIDI,OSS,systeminformasjon +Keywords[pa]=Sound,Audio,Soundcard,MIDI,OSS,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਆਡੀਓ,ਸਾਊਂਡਕਾਰਡ +Keywords[pl]=dźwięk,audio,karta dźwiekowa,Midi,OSS,informacja o systemie +Keywords[pt]=som,áudio,placa de som,midi,oss,informações de sistema +Keywords[pt_BR]=Som,Áudio,placa de som,MIDI,OSS,Informações de sistema +Keywords[ro]=sunet,audio,placă de sunet,card de sunet,MIDI,OSS,informații despre sistem +Keywords[rw]=Ijwi,Inyumvo,Ikaritaijwi,MIDI,OSS,Amakuru Sisitemu +Keywords[se]=jietna,jietnagoarta,midi,OSS,vuogádatdiehtu +Keywords[sk]=Zvuk,Zvuky,Zvuková karta,MIDI,OSS,Systémové Informácie +Keywords[sl]=zvok,glasba,zvočna kartica,avdio,midi,OSS,informacije o sistemu +Keywords[sr]=Sound,Аудио,Soundcard,Midi,OSS,System Information,Звук,Аудио,звучна карта,звучна картица,миди,системске информације +Keywords[sr@Latn]=Sound,Audio,Soundcard,Midi,OSS,System Information,Zvuk,Audio,zvučna karta,zvučna kartica,midi,sistemske informacije +Keywords[sv]=Ljud,Ljudkort,Midi,OSS,Systeminformation +Keywords[ta]=ஒலி,ஒலி அமைப்பு,ஒலி அட்டை,மிடி,OSS,சாதன தகவல் +Keywords[th]=เสียง,ระบบเสียง,แผงวงจรเสียง,มิดี้,OSS,ข้อมูลระบบ +Keywords[tr]=Ses,Seskartı,Midi,OSS,Sistem Bilgisi,MIDI +Keywords[uk]=звук,аудіо,sound,audio,звукова плата,midi,oss,системна інформація +Keywords[uz]=MIDI,OSS,Tovush,Audio,Tovush kartasi,Tizm haqida maʼlumot +Keywords[uz@cyrillic]=MIDI,OSS,Товуш,Аудио,Товуш картаси,Тизм ҳақида маълумот +Keywords[vi]=Âm thanh,âm,Bo mạch âm thanh,Midi,OSS,Thông tin Hệ thống +Keywords[wa]=Son,Audiocåte son,MIDI,OSS,informåcion do sistinme +Keywords[zh_CN]=Sound,Audio,Soundcard,MIDI,OSS,System Information,音频,音响,声卡,系统信息 +Keywords[zh_TW]=Sound,Audio,Soundcard,Midi,OSS,系統資訊 +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/xserver.desktop b/kcontrol/info/xserver.desktop new file mode 100644 index 000000000..1751a4b6e --- /dev/null +++ b/kcontrol/info/xserver.desktop @@ -0,0 +1,227 @@ +[Desktop Entry] +Exec=kcmshell xserver +Icon=kcmx +Type=Application +DocPath=kinfocenter/xserver/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=xserver +X-KDE-ParentApp=kinfocenter + +Name=X-Server +Name[af]=X-bediener +Name[ar]=خادم X +Name[az]=X-Vericisi +Name[be]=Сервер X +Name[bg]=Сървър X +Name[bn]=এক্স-সার্ভার +Name[br]=Servijer X +Name[ca]=Servidor X +Name[csb]=X-Serwera +Name[cy]=Gweinydd-X +Name[da]=X-server +Name[el]=Εξυπηρετητής-X +Name[eo]=X-servilo +Name[es]=Servidor X +Name[et]=X'i server +Name[eu]=X zerbitzaria +Name[fa]=کارساز X +Name[fi]=X-palvelin +Name[fr]=Serveur X +Name[ga]=Freastalaí X +Name[gl]=Servidor X +Name[he]=שרת X +Name[hi]=एक्स-सर्वर +Name[hr]=X-poslužitelj +Name[hu]=X-kiszolgáló +Name[id]=Server-X +Name[is]=X-þjónn +Name[it]=Server X +Name[ja]=X サーバ +Name[ka]=X-სერვერი +Name[kk]=X-сервер +Name[ko]=X 서버 +Name[lo]=ເຊີຟເວີ X +Name[lt]=X-Serveris +Name[lv]=X-Serveris +Name[mk]=X-сервер +Name[mn]=X-Сервер +Name[ms]=Pelayan X +Name[nb]=X-tjener +Name[ne]=X-सर्भर +Name[nl]=X-server +Name[nn]=X-tenar +Name[nso]=Moabi wa X +Name[oc]=Servor X +Name[pa]=X-ਸਰਵਰ +Name[pl]=X-Serwer +Name[pt]=Servidor X +Name[pt_BR]=Servidor X +Name[ro]=Server X +Name[ru]=X-сервер +Name[rw]=X-Seriveri +Name[se]=X-bálvá +Name[sl]=Strežnik X +Name[sr]=X-Сервер +Name[ss]=Sigcini X +Name[sv]=X-server +Name[ta]=X-சேவகன் +Name[te]=ఎక్స్-సెర్వర్ +Name[tg]=Сервери-X +Name[th]=เซิร์ฟเวอร์ X +Name[tr]=X-Sunucusu +Name[uz@cyrillic]=X-Сервер +Name[ven]=Siva ya X +Name[vi]=Trình phục vụ X +Name[wa]=Siervieu X +Name[xh]=Umncedisi we-X +Name[zh_CN]=X 服务器 +Name[zh_TW]=X 伺服器 +Name[zu]=Umlekeleli we-X + +Comment=X-Server information +Comment[af]=X-bediener informasie +Comment[ar]=معلومات عن خادم X +Comment[az]=X-Vericisi haqqında mə'lumat +Comment[be]=Інфармацыя аб серверы X +Comment[bg]=Информация за сървъра X +Comment[bn]=এক্স-সার্ভার সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar servijer X +Comment[bs]=Informacije o X-Serveru +Comment[ca]=Informació del servidor X +Comment[cs]=Informace o X-Serveru +Comment[csb]=Wëdowiédzô ò X-serwerze +Comment[cy]=Gwybodaeth Gweinydd-X +Comment[da]=Information om X-serveren +Comment[de]=Informationen zum X-Server +Comment[el]=Πληροφορίες εξυπηρετητή X +Comment[eo]=Informo pri X-servilo +Comment[es]=Información sobre el servidor X +Comment[et]=X'i serveri info +Comment[eu]=X zerbitzariari buruzko informazioa +Comment[fa]=اطلاعات کارساز X +Comment[fi]=X-palvelimen tiedot +Comment[fr]=Informations sur le serveur X +Comment[fy]=X-Server-ynformaasje +Comment[ga]=Eolas faoin bhfreastalaí X +Comment[gl]=Información do Servidor X +Comment[he]=מידע על שרת ה־X +Comment[hi]=एक्स-सर्वर जानकारी +Comment[hr]=Podaci o X-poslužitelju +Comment[hu]=Az X-kiszolgáló jellemzői +Comment[id]=Informasi Server-X +Comment[is]=Upplýsingar um X-þjón +Comment[it]= Informazioni sul server X +Comment[ja]=X サーバの情報 +Comment[ka]=ინფორმაცია X-სერვერის შესახებ +Comment[kk]=X-сервер мәліметі +Comment[km]=ព័ត៌មាន X-Server +Comment[ko]=X 서버 정보 +Comment[lo]=ຂໍ້ມູນເຊີຟເວີ X +Comment[lt]=X-Serverio informacija +Comment[lv]=X-Servera informācija +Comment[mk]=Информации за X-серверот +Comment[mn]=X-серверийн мэдээлэл +Comment[ms]=Maklumat Pelayan X +Comment[mt]=Informazzjoni dwar X-Server +Comment[nb]=X-tjenerinformasjon +Comment[nds]=Informatschoon över den X-Server +Comment[ne]=X-सर्भर सूचना +Comment[nl]=X-Server-informatie +Comment[nn]=X-tenarinformasjon +Comment[nso]=Moabi wa Tshedimoso ya X +Comment[oc]=Informacion dèu servor X +Comment[pa]=X-ਸਰਵਰ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o X-serwerze +Comment[pt]=Informações sobre o servidor X +Comment[pt_BR]=Informações do servidor X +Comment[ro]=Informații despre serverul X +Comment[ru]=Сведения об X-сервере +Comment[rw]=Ibisobanuro bya X-Seriveri +Comment[se]=X-bálvádiehtu +Comment[sk]=Informácie o X serveri +Comment[sl]=Podatki o strežniku X +Comment[sr]=Информације о X серверу +Comment[sr@Latn]=Informacije o X serveru +Comment[ss]=Umniningwane wesigcini X +Comment[sv]=X-serverinformation +Comment[ta]=X-சேவகன் தகவல் +Comment[te]=ఎక్స్-సెర్వర్ సమాచారం +Comment[tg]=Иттилооти Сервери-X +Comment[th]=ข้อมูลเซิร์ฟเวอร์ X +Comment[tr]=X-Sunucusu hakkında bilgi +Comment[tt]=X-Server turında +Comment[uk]=Інформація щодо X-Server +Comment[uz]=X-Server haqida maʼlumot +Comment[uz@cyrillic]=X-Сервер ҳақида маълумот +Comment[ven]=Mafhungo a siva ya X +Comment[vi]=Thông tin về trình phục vụ X +Comment[wa]=Informåcion sol sierveu X +Comment[xh]=Ulwazi lomncedisi we-X +Comment[zh_CN]=X 服务器信息 +Comment[zh_TW]=X 伺服器資訊 +Comment[zu]=Ulwazi lomlekeleli we-X + +Keywords=X,X-Server,XServer,XFree86,Display,VideoCard,System Information +Keywords[az]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X-Verici,XVerici,XFree86,Displey,Sistem Haqqında Mə'lumat +Keywords[be]=Сервер X,Дысплей,Відэакарта,Сістэмная інфармацыя,X,X-Server,XServer,XFree86,Display,VideoCard,System Information +Keywords[bg]=екран, видеокарта, системна информация, сървър, X, X-Server, XServer, XFree86, Display, VideoCard, System Information +Keywords[br]=X,servijer X,XServer,XFree86,diskwel,kartenn video,titouroù reizhiad +Keywords[bs]=X,X-Server,XServer,XFree86,VideoCard,Display,System Information, Ekran, Informacije o sistemu +Keywords[ca]=X,Servidor X,XServer,XFree86,Monitor,Targeta de video,Informació del sistema +Keywords[cs]=X,X-server,XServer,XFree86,Obrazovka,Informace o systému,Videokarta +Keywords[csb]=X,X serwera,Xserwera,XFree86,graficznô karta,grafika,wëdowiédzô ò systemie +Keywords[da]=X,X-server,Xserver,XFree86,Skærm,Videokort,Systeminformation +Keywords[el]=X,Εξυπηρετητής-X,XServer,XFree86,Οθόνη,Κάρτα Γραφικών, Πληροφορίες συστήματος +Keywords[eo]=X,X-servilo,XFree86,ekrano,fenestroj,sistemo,operaciumo,informo +Keywords[es]=X,X-Server,XServer,XFree86,Monitor,Tarjeta, Gráfica,Sistema,Información +Keywords[et]=X,X'i server,X Server,XFree86,Ekraan,Videokaart,Süsteemi info +Keywords[eu]=X,X-Server,XServer,XFree86,Display,VideoCard,sistema informazioa +Keywords[fa]=X، کارساز، X، XServer، XFree86، صفحه نمایش، کارت ویدیو، اطلاعات سیستم +Keywords[fr]=X,serveur X,XFree86,XServer,moniteur,affichage,informations système,xfree,carte vidéo,carte graphique +Keywords[fy]=X,X-Server,XServer,XFree86,display,systeemynformaasje,byldskerm,grafyske kaart +Keywords[ga]=X,Freastalaí-X,XFree86,Scáileán,Físchárta,Eolas faoin Chóras +Keywords[gl]=X,Servidor X,XServer,XFree86,Pantalla,Display,Información do Sistema +Keywords[he]=תצוגה,מידע מערכת,XFree86,שרת X,X, כרטיס מסך,X-Server,XServer,XFree86,Display,VideoCard, System Information, Xorg +Keywords[hi]=एक्स,एक्स-सर्वर,एक्ससर्वर,एक्सफ्री86,प्रदर्शक,वीडियोकार्ड,तंत्र जानकारी +Keywords[hr]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X-poslužitelj,X poslužitelj,Zaslon,Video kartica,Grafička kartica,Podaci o sustavu +Keywords[hu]=X,X-kiszolgáló,XServer,XFree86,képernyő,videokártya,rendszerinformáció +Keywords[id]=X,Server-X,XServer,XFree86,Tampilan,KartuVideo,Informasi Sistem +Keywords[is]=X,X-Server,X-þjónn,XServer,Xþjónn,XFree86,Display,skjár, VideoCard,skjákort,System Information,kerfisupplýsingar +Keywords[it]=X,Server X,XServer,XFree86,display,schermo,informazioni sul sistema,SchedaVideo +Keywords[ja]=X,X-サーバ,Xサーバ,XFree86,ディスプレイ,システム情報 +Keywords[ka]=X,X-სერვერი,Xსერვერი,XFree86,დსიპლეი, ვიდეოდაფა,ინფორმაცია სისტების შესახებ +Keywords[km]=X,X-Server,XServer,XFree86,បង្ហាញ,បន្ទះ​វីដេអូ,ព័ត៌មាន​ប្រព័ន្ធ +Keywords[lt]=X,X-Serveris,XServer,XFree86,Displėjus,Video plokštė,Sistemos informacija +Keywords[lv]=X,X-Serveris,XServeris,XFree86,Ekrāns,Sistēmas Informācija +Keywords[mk]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X сервер,Екран,Видеокартичка,Информации за системот +Keywords[mt]=X,X-Server,XServer,XFree86,Display,System Information +Keywords[nb]=X,X-tjener,Xtjener,XFree86,skjerm,videokort,systeminformasjon +Keywords[nds]=X,X-Server,XServer,XFree86,Display,Dorstellen,Videokort,Systeeminformatschoon +Keywords[ne]=X, X-सर्भर, Xसर्भर, Xस्वतन्त्र 86, प्रदर्शन गर्नुहोस्, भिडियो कार्ड, प्रणाली सूचना +Keywords[nl]=X,X-Server,XServer,XFree86,display,systeeminformatie,beeldscherm,videokaart +Keywords[nn]=X,X-tenar,XServer,XFree86,skjerm,skjermkort,systeminformasjon +Keywords[pa]=X,X-Server,XServer,XFree86,ਦਰਿਸ਼,ਵੀਡਿਓ ਕਾਰਡ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=X,X serwer,Xserwer,XFree86,karta graficzna,grafika,informacja o systemie +Keywords[pt]=X,servidor X,XServer,XFree86,ecrã,placa de vídeo,informações de sistema +Keywords[pt_BR]=X,Servidor X,XFree,XFree86,Display,Tela,Placa de Vídeo,Informações do sistema +Keywords[ro]=X,server X,XServer,XFree86,ecran,afișare,placă video,informații despre sistem +Keywords[rw]=X,X-Seriveri,XSeriveri,XFree86,Kwerekana,IkaritaVidewo,Amakuru Sisitemu +Keywords[sk]=X,X-Server,XServer,XFree86,Display,VideoCard,Systémové Information +Keywords[sl]=X,strežnik X,X-strežnik,XServer,XFree86,zaslon,grafična kartica,Podatki o sistemu,sistemske informacije +Keywords[sr]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,екран,видео картица +Keywords[sr@Latn]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,ekran,video kartica +Keywords[sv]=X,X-server,Xserver,Xfree86,skärm,videokort,systeminformation +Keywords[ta]=X,X-சேவகன்,Xசேவகன்,XFree86, காட்சி,படக்காட்சிஅட்டை,அமைப்பு தகவல் +Keywords[th]=X,เซิร์ฟเวอร์ X,XServer,XFree86,จอแสดงผล,แผงวงจรวิดีโอ,ข้อมูลระบบ +Keywords[tr]=X,X-Server,XServer,X sunucu, X-sunucu,Xsunucu,XFree86,Görüntü,Video Kartı,Sistem Bilgisi +Keywords[uk]=X,X-Server,XServer,XFree86,Display,системна інформація,монітор,X сервер,відео карта +Keywords[uz]=X,X server,XFree86,xorg,X-Server,Displey,video karta,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=X,X сервер,XFree86,xorg,X-Сервер,Дисплей,видео карта,Тизим ҳақида маълумот +Keywords[vi]=X,Trình phục vụ X,XServer,XFree86,Màn hình,Thông tin Hệ thống +Keywords[wa]=X,X-Server,XServer,sierveu X,XFree86,håynaedje,Display,cåte videyo,informåcion do sistinme +Keywords[zh_CN]=X,X-Server,XServer,XFree86,Display,VideoCard,System InformationX 服务器,显示器,显卡,系统信息 +Keywords[zh_TW]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X 伺服器,X伺服器,顯示器,顯示卡,系統資訊 + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/input/AUTHORS b/kcontrol/input/AUTHORS new file mode 100644 index 000000000..525df4d20 --- /dev/null +++ b/kcontrol/input/AUTHORS @@ -0,0 +1,7 @@ +Mouse & Keyboard Configuration Modules: + + Pat Dowler (dowler@pt1B1106.FSH.UVic.CA) + +Conversion to kcontrol applet: + + Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de) \ No newline at end of file diff --git a/kcontrol/input/ChangeLog b/kcontrol/input/ChangeLog new file mode 100644 index 000000000..2d9b8d545 --- /dev/null +++ b/kcontrol/input/ChangeLog @@ -0,0 +1,11 @@ +2002-07-01 Fabian Wolf + * added option to select a white cursor + +2000-03-14 David Faure + + * mouse.cpp: Added global settings for SC/DC/AutoSelect/ChangeCursor + * mousedefaults.h: New file, to store default values + +1998-11-30 Alex Zepeda + + * Makefile.am: Move all the icons into pics/ && pics/mini/ diff --git a/kcontrol/input/Makefile.am b/kcontrol/input/Makefile.am new file mode 100644 index 000000000..7a852aa3e --- /dev/null +++ b/kcontrol/input/Makefile.am @@ -0,0 +1,47 @@ +if have_xcursor +THEMEPAGE_SUBDIR = xcursor +THEMEPAGE_INCLUDES = -I$(srcdir)/xcursor +THEMEPAGE_LIB = xcursor/libthemepage.la +else +THEMEPAGE_SUBDIR = core +THEMEPAGE_INCLUDES = -I$(srcdir)/core +THEMEPAGE_LIB = core/libthemepage.la +endif + +SUBDIRS = $(THEMEPAGE_SUBDIR) pics + +AM_CPPFLAGS = $(USB_CFLAGS) $(THEMEPAGE_INCLUDES) $(all_includes) + +bin_PROGRAMS = kapplymousetheme + +kapplymousetheme_SOURCES = kapplymousetheme.cpp +kapplymousetheme_LDFLAGS = $(all_libraries) +kapplymousetheme_LDADD = $(LIB_XCURSOR) $(LIB_X11) + +kde_module_LTLIBRARIES = kcm_input.la + +kcm_input_la_SOURCES = mouse.cpp kmousedlg.ui main.cpp logitechmouse.cpp logitechmouse_base.ui +kcm_input_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_input_la_LIBADD = $(THEMEPAGE_LIB) $(XTESTLIB) $(LIB_KIO) $(LIB_XCURSOR) $(USB_LIBS) + +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp */*.cpp -o $(podir)/kcminput.pot + +xdg_apps_DATA = mouse.desktop + +fontdir = $(kde_datadir)/kcminput +font_DATA = cursor_large_black.pcf.gz cursor_large_white.pcf.gz cursor_small_white.pcf.gz +EXTRA_DIST = $(font_DATA) + +update_DATA = mouse_cursor_theme.upd + +updatedir = $(kde_datadir)/kconf_update + +install-data-hook: + $(mkinstalldirs) $(DESTDIR)$(datadir)/fonts/override + -mkfontdir $(DESTDIR)$(datadir)/fonts/override +##I'd like to install this automatically, but it only works on Linux, and I don't want to break things... +## $(INSTALL_DATA) $(srcdir)/consoleUserPerms $(DESTDIR)/etc/hotplug/usb/consoleUserPerms +## $(INSTALL_DATA) $(srcdir)/logitechmouse.usermap $(DESTDIR)/etc/hotplug/usb/logitechmouse.usermap diff --git a/kcontrol/input/configure.in.bot b/kcontrol/input/configure.in.bot new file mode 100644 index 000000000..08bf95ca5 --- /dev/null +++ b/kcontrol/input/configure.in.bot @@ -0,0 +1,5 @@ +if test "x$with_libusb" = xcheck && test "x$have_libusb" = xno; then + echo "" + echo "Logitech mouse support is disabled. Provide libusb to enable it." + echo "" +fi diff --git a/kcontrol/input/configure.in.in b/kcontrol/input/configure.in.in new file mode 100644 index 000000000..0d656e2dc --- /dev/null +++ b/kcontrol/input/configure.in.in @@ -0,0 +1,26 @@ +AC_ARG_WITH(libusb, + [AC_HELP_STRING(--with-libusb, + [enable control of some mouse models through libusb @<:@default=check@:>@])], + [], with_libusb=check) + +USB_LIBS= +USB_CFLAGS= +have_libusb=no +if test "x$with_libusb" != xno; then + AC_PATH_PROG(LIBUSBCONFIG,libusb-config,no) + if test $LIBUSBCONFIG != "no"; then + USB_LIBS="$($LIBUSBCONFIG --libs)" + USB_CFLAGS="$($LIBUSBCONFIG --cflags)" + + AC_CHECK_LIB(usb,main, + [have_libusb=yes + AC_DEFINE(HAVE_LIBUSB, 1, [Defined if you have libusb])], + [], [$USB_LIBS] + ) + fi + if test "x$with_libusb" != xcheck && test "x$have_libusb" = xno; then + AC_MSG_ERROR([--with-libusb was given, but test for libusb failed]) + fi +fi +AC_SUBST(USB_LIBS) +AC_SUBST(USB_CFLAGS) diff --git a/kcontrol/input/consoleUserPerms b/kcontrol/input/consoleUserPerms new file mode 100755 index 000000000..015df642f --- /dev/null +++ b/kcontrol/input/consoleUserPerms @@ -0,0 +1,42 @@ +#!/bin/bash +# +# /etc/hotplug/usb/consoleUserPerms +# +# Sets up newly plugged in USB device so that the user who owns +# the console according to pam_console can access it from user space +# +# Note that for this script to work, you'll need all of the following: +# a) a line in the file /etc/hotplug/usb.usermap or another usermap file +# in /etc/hotplug/usb/ that corresponds to the device you are using. +# b) a setup using pam_console creates the respective lock files +# containing the name of the respective user. You can check for that +# by executing "echo `cat /var/{run,lock}/console.lock`" and +# verifying the appropriate user is mentioned somewhere there. +# c) a Linux kernel supporting hotplug and usbdevfs +# d) the hotplug package (http://linux-hotplug.sourceforge.net/) +# +# In the usermap file, the first field "usb module" should be named +# "consoleUserPerms" to invoke this script. +# + +if [ "${ACTION}" = "add" ] && [ -f "${DEVICE}" ] +then + # New code, using lock files instead of copying /dev/console permissions + # This also works with non-kdm logins (e.g. on a virtual terminal) + # Idea and code from Nalin Dahyabhai + if [ -f /var/run/console.lock ] + then + CONSOLEOWNER=`cat /var/run/console.lock` + elif [ -f /var/lock/console.lock ] + then + CONSOLEOWNER=`cat /var/lock/console.lock` + else + CONSOLEOWNER= + fi + if [ -n "$CONSOLEOWNER" ] + then + chmod 0000 "${DEVICE}" + chown "$CONSOLEOWNER" "${DEVICE}" + chmod 0600 "${DEVICE}" + fi +fi diff --git a/kcontrol/input/core/Makefile.am b/kcontrol/input/core/Makefile.am new file mode 100644 index 000000000..3c73ba8b0 --- /dev/null +++ b/kcontrol/input/core/Makefile.am @@ -0,0 +1,7 @@ +AM_CPPFLAGS = $(all_includes) + +noinst_LTLIBRARIES = libthemepage.la +libthemepage_la_SOURCES = themepage.cpp +METASOURCES = AUTO +noinst_HEADERS = themepage.h bitmaps.h + diff --git a/kcontrol/input/core/bitmaps.h b/kcontrol/input/core/bitmaps.h new file mode 100644 index 000000000..9f44c3d5d --- /dev/null +++ b/kcontrol/input/core/bitmaps.h @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2003 Fredrik Hglund + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __BITMAPS_H +#define __BITMAPS_H + + +static const char* const arrow_large_black_xpm[] = { +"24 24 3 1", +"# c None", +"a c #000000", +". c #ffffff", +"#####..#################", +"#####.a.################", +"#####.aa.###############", +"#####.aaa.##############", +"#####.aaaa.#############", +"#####.aaaaa.############", +"#####.aaaaaa.###########", +"#####.aaaaaaa.##########", +"#####.aaaaaaaa.#########", +"#####.aaaaaaaaa.########", +"#####.aaaaaaaaaa.#######", +"#####.aaaaaaaaaaa.######", +"#####.aaaaaaaaaaaa.#####", +"#####.aaaaaaaa....######", +"#####.aaaaaaa.##########", +"#####.aaa.aaaa.#########", +"#####.aa.#.aaa.#########", +"#####.a.##.aaaa.########", +"#####..####.aaa.########", +"###########.aaaa.#######", +"############.aaa.#######", +"############.aaa.#######", +"#############...########", +"########################"}; + + +static const char* const arrow_small_black_xpm[]={ +"24 24 3 1", +"# c None", +"a c #000000", +". c #ffffff", +"########################", +"########################", +"########################", +"########################", +"#######..###############", +"#######.a.##############", +"#######.aa.#############", +"#######.aaa.############", +"#######.aaaa.###########", +"#######.aaaaa.##########", +"#######.aaaaaa.#########", +"#######.aaaaaaa.########", +"#######.aaaaaaaa.#######", +"#######.aaaaa....#######", +"#######.aa.aa.##########", +"#######.a.#.aa.#########", +"#######..##.aa.#########", +"############.aa.########", +"############.aa.########", +"#############..#########", +"########################", +"########################", +"########################", +"########################"}; + + +static const char* const arrow_large_white_xpm[] = { +"24 24 3 1", +"# c None", +"a c #ffffff", +". c #000000", +"#####..#################", +"#####.a.################", +"#####.aa.###############", +"#####.aaa.##############", +"#####.aaaa.#############", +"#####.aaaaa.############", +"#####.aaaaaa.###########", +"#####.aaaaaaa.##########", +"#####.aaaaaaaa.#########", +"#####.aaaaaaaaa.########", +"#####.aaaaaaaaaa.#######", +"#####.aaaaaaaaaaa.######", +"#####.aaaaaaaaaaaa.#####", +"#####.aaaaaaaa....######", +"#####.aaaaaaa.##########", +"#####.aaa.aaaa.#########", +"#####.aa.#.aaa.#########", +"#####.a.##.aaaa.########", +"#####..####.aaa.########", +"###########.aaaa.#######", +"############.aaa.#######", +"############.aaa.#######", +"#############...########", +"########################"}; + + +static const char* const arrow_small_white_xpm[]={ +"24 24 3 1", +"# c None", +"a c #ffffff", +". c #000000", +"########################", +"########################", +"########################", +"########################", +"#######..###############", +"#######.a.##############", +"#######.aa.#############", +"#######.aaa.############", +"#######.aaaa.###########", +"#######.aaaaa.##########", +"#######.aaaaaa.#########", +"#######.aaaaaaa.########", +"#######.aaaaaaaa.#######", +"#######.aaaaa....#######", +"#######.aa.aa.##########", +"#######.a.#.aa.#########", +"#######..##.aa.#########", +"############.aa.########", +"############.aa.########", +"#############..#########", +"########################", +"########################", +"########################", +"########################"}; + +#endif diff --git a/kcontrol/input/core/themepage.cpp b/kcontrol/input/core/themepage.cpp new file mode 100644 index 000000000..d83b28cb7 --- /dev/null +++ b/kcontrol/input/core/themepage.cpp @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2003 Fredrik Hglund + * + * Based on the large cursor code written by Rik Hemsley, + * Copyright (c) 2000 Rik Hemsley + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "themepage.h" +#include "themepage.moc" + +#include "bitmaps.h" + + +namespace { + // Listview columns + enum Columns { NameColumn = 0, DescColumn, /* hidden */ DirColumn }; +} + + +ThemePage::ThemePage( QWidget* parent, const char* name ) + : QWidget( parent, name ) +{ + QBoxLayout *layout = new QVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setMargin( KDialog::marginHint() ); + layout->setSpacing( KDialog::spacingHint() ); + + new QLabel( i18n("Select the cursor theme you want to use:"), this ); + + // Create the theme list view + listview = new KListView( this ); + listview->setFullWidth( true ); + listview->setAllColumnsShowFocus( true ); + listview->addColumn( i18n("Name") ); + listview->addColumn( i18n("Description") ); + + connect( listview, SIGNAL(selectionChanged(QListViewItem*)), + SLOT(selectionChanged(QListViewItem*)) ); + + insertThemes(); +} + + +ThemePage::~ThemePage() +{ +} + + +void ThemePage::selectionChanged( QListViewItem *item ) +{ + selectedTheme = item->text( DirColumn ); + emit changed( selectedTheme != currentTheme ); +} + + +void ThemePage::save() +{ + if ( currentTheme == selectedTheme ) + return; + + bool whiteCursor = selectedTheme.right( 5 ) == "White"; + bool largeCursor = selectedTheme.left( 5 ) == "Large"; + + KConfig c( "kcminputrc" ); + c.setGroup( "Mouse" ); + c.writeEntry( "LargeCursor", largeCursor ); + c.writeEntry( "WhiteCursor", whiteCursor ); + + currentTheme = selectedTheme; + + fixCursorFile(); + + KMessageBox::information( this, i18n("You have to restart KDE for these " + "changes to take effect."), i18n("Cursor Settings Changed"), + "CursorSettingsChanged" ); +} + +void ThemePage::load() +{ + load( false ); +} + +void ThemePage::load( bool useDefaults ) +{ + bool largeCursor, whiteCursor; + + KConfig c( "kcminputrc" ); + + c.setReadDefaults( useDefaults ); + + c.setGroup( "Mouse" ); + largeCursor = c.readBoolEntry( "LargeCursor", false ); + whiteCursor = c.readBoolEntry( "WhiteCursor", false ); + + if ( largeCursor ) + currentTheme = whiteCursor ? "LargeWhite" : "LargeBlack"; + else + currentTheme = whiteCursor ? "SmallWhite" : "SmallBlack"; + + selectedTheme = currentTheme; + QListViewItem *item = listview->findItem( currentTheme, DirColumn ); + item->setSelected( true ); +} + + +void ThemePage::defaults() +{ + load( true ); +} + + +void ThemePage::insertThemes() +{ + KListViewItem *item; + + item = new KListViewItem( listview, i18n("Small black"), + i18n("Small black cursors"), "SmallBlack" ); + item->setPixmap( 0, QPixmap( arrow_small_black_xpm ) ); + listview->insertItem( item ); + + item = new KListViewItem( listview, i18n("Large black"), + i18n("Large black cursors"), "LargeBlack" ); + item->setPixmap( 0, QPixmap( arrow_large_black_xpm ) ); + listview->insertItem( item ); + + item = new KListViewItem( listview, i18n("Small white"), + i18n("Small white cursors"), "SmallWhite" ); + item->setPixmap( 0, QPixmap( arrow_small_white_xpm ) ); + listview->insertItem( item ); + + item = new KListViewItem( listview, i18n("Large white"), + i18n("Large white cursors"), "LargeWhite" ); + item->setPixmap( 0, QPixmap( arrow_large_white_xpm ) ); + listview->insertItem( item ); +} + + +void ThemePage::fixCursorFile() +{ + // Make sure we have the 'font' resource dir registered and can find the + // override dir. + // + // Next, if the user wants large cursors, copy the font + // cursor_large.pcf.gz to (localkdedir)/share/fonts/override/cursor.pcf.gz. + // Else remove the font cursor.pcf.gz from (localkdedir)/share/fonts/override. + // + // Run mkfontdir to update fonts.dir in that dir. + + KGlobal::dirs()->addResourceType( "font", "share/fonts/" ); + KIO::mkdir( KURL::fromPathOrURL(QDir::homeDirPath() + "/.fonts/kde-override") ); + QString overrideDir = QDir::homeDirPath() + "/.fonts/kde-override/"; + + KURL installedFont; + installedFont.setPath( overrideDir + "cursor.pcf.gz" ); + + if ( currentTheme == "SmallBlack" ) + KIO::NetAccess::del( installedFont, this ); + else { + KURL source; + + if ( currentTheme == "LargeBlack" ) + source.setPath( locate("data", "kcminput/cursor_large_black.pcf.gz") ); + else if ( currentTheme == "LargeWhite" ) + source.setPath( locate("data", "kcminput/cursor_large_white.pcf.gz") ); + else if ( currentTheme == "SmallWhite" ) + source.setPath( locate("data", "kcminput/cursor_small_white.pcf.gz") ); + + KIO::NetAccess::file_copy( source, installedFont, -1, true ); + } + + QString cmd = KGlobal::dirs()->findExe( "mkfontdir" ); + if ( !cmd.isEmpty() ) + { + KProcess p; + p << cmd << overrideDir; + p.start(KProcess::Block); + } +} + +// vim: set noet ts=4 sw=4: diff --git a/kcontrol/input/core/themepage.h b/kcontrol/input/core/themepage.h new file mode 100644 index 000000000..491c11f75 --- /dev/null +++ b/kcontrol/input/core/themepage.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2003 Fredrik Hglund + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __THEMEPAGE_H +#define __THEMEPAGE_H + +class KListView; +class QListViewItem; + +class ThemePage : public QWidget +{ + Q_OBJECT + + public: + ThemePage( QWidget* parent = 0, const char* name = 0 ); + ~ThemePage(); + + // Called by the KCM + void save(); + void load(); + void load( bool useDefaults ); + void defaults(); + + signals: + void changed( bool ); + + private slots: + void selectionChanged( QListViewItem * ); + + private: + void insertThemes(); + void fixCursorFile(); + + KListView *listview; + QString currentTheme, selectedTheme; +}; + +#endif // __THEMEPAGE_H + +// vim: set noet ts=4 sw=4: diff --git a/kcontrol/input/cursor_large.bdf b/kcontrol/input/cursor_large.bdf new file mode 100644 index 000000000..241189286 --- /dev/null +++ b/kcontrol/input/cursor_large.bdf @@ -0,0 +1,4447 @@ +STARTFONT 2.1 +FONT cursor +SIZE 47 78 78 +FONTBOUNDINGBOX 45 42 -21 -23 +STARTPROPERTIES 13 +COPYRIGHT "(C) 2000 Rik Hemsley " +POINT_SIZE 470 +FONT "cursor" +WEIGHT 10 +RESOLUTION 107 +RESOLUTION_X 78 +RESOLUTION_Y 78 +X_HEIGHT -1 +QUAD_WIDTH 20 +DEFAULT_CHAR 0 +FONT_ASCENT 23 +FONT_DESCENT 24 +_XMBDFED_INFO "Edited with xmbdfed 4.3." +ENDPROPERTIES +CHARS 154 +STARTCHAR D +ENCODING 0 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 1 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C002 +ENCODING 2 +SWIDTH 1139 0 +DWIDTH 58 0 +BBX 12 21 -10 -22 +BITMAP +0010 +0030 +0070 +00F0 +01F0 +03F0 +07F0 +0FF0 +1FF0 +3FF0 +7FF0 +FFF0 +0FF0 +07F0 +0F70 +0E30 +1E10 +1C00 +3C00 +3800 +3800 +ENDCHAR +STARTCHAR C003 +ENCODING 3 +SWIDTH 1414 0 +DWIDTH 72 0 +BBX 14 23 -11 -23 +BITMAP +000C +001C +003C +007C +00FC +01FC +03FC +07FC +0FFC +1FFC +3FFC +7FFC +FFFC +7FFC +07FC +0FFC +0FBC +1F9C +1F0C +3F00 +3E00 +3E00 +1C00 +ENDCHAR +STARTCHAR C004 +ENCODING 4 +SWIDTH 137 0 +DWIDTH 7 0 +BBX 11 15 -4 -2 +BITMAP +FFE0 +FFE0 +FFE0 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR C004 +ENCODING 5 +SWIDTH 176 0 +DWIDTH 9 0 +BBX 15 17 -6 -3 +BITMAP +3FF8 +7FFC +7FFC +7FFC +3FF8 +07C0 +07C0 +07C0 +07C0 +FFFE +7FFC +3FF8 +1FF0 +0FE0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR C004 +ENCODING 6 +SWIDTH 137 0 +DWIDTH 7 0 +BBX 11 15 -4 -16 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +FFE0 +FFE0 +FFE0 +ENDCHAR +STARTCHAR C004 +ENCODING 7 +SWIDTH 176 0 +DWIDTH 9 0 +BBX 15 17 -6 -17 +BITMAP +0100 +0380 +07C0 +0FE0 +1FF0 +3FF8 +7FFC +FFFE +07C0 +07C0 +07C0 +07C0 +3FF8 +7FFC +7FFC +7FFC +3FF8 +ENDCHAR +STARTCHAR D +ENCODING 8 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 9 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 10 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 11 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C014 +ENCODING 12 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 21 21 0 -3 +BITMAP +E00000 +E00000 +E00000 +E00100 +E00380 +E087C0 +E0CF80 +E0FF00 +E0FE00 +E0FC00 +E0FC00 +E0FE00 +E0FF00 +E00000 +E00000 +E00000 +E00000 +E00000 +FFFFF8 +FFFFF8 +FFFFF8 +ENDCHAR +STARTCHAR C014 +ENCODING 13 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 23 23 -1 -4 +BITMAP +700000 +F80000 +F80000 +F80080 +F881C0 +F8C3E0 +F8E7F0 +F8FFE0 +F8FFC0 +F8FF80 +F8FF00 +F8FF00 +F8FF80 +F8FFC0 +F8FFE0 +F80000 +F80000 +F80000 +FFFFFC +FFFFFE +FFFFFE +FFFFFE +FFFFFC +ENDCHAR +STARTCHAR C014 +ENCODING 14 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 21 21 -18 -3 +BITMAP +000038 +000038 +000038 +040038 +0E0038 +1F0838 +0F9838 +07F838 +03F838 +01F838 +01F838 +03F838 +07F838 +000038 +000038 +000038 +000038 +000038 +FFFFF8 +FFFFF8 +FFFFF8 +ENDCHAR +STARTCHAR C014 +ENCODING 15 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 23 23 -19 -4 +BITMAP +00001C +00003E +00003E +02003E +07023E +0F863E +1FCE3E +0FFE3E +07FE3E +03FE3E +01FE3E +01FE3E +03FE3E +07FE3E +0FFE3E +00003E +00003E +00003E +7FFFFE +FFFFFE +FFFFFE +FFFFFE +7FFFFE +ENDCHAR +STARTCHAR C020 +ENCODING 16 +SWIDTH 216 0 +DWIDTH 11 0 +BBX 19 20 -8 -3 +BITMAP +00E000 +00E000 +00E000 +00E000 +00E000 +00E000 +00E000 +0FFE00 +07FC00 +03F800 +01F000 +00E000 +004000 +000000 +000000 +000000 +000000 +FFFFE0 +FFFFE0 +FFFFE0 +ENDCHAR +STARTCHAR C020 +ENCODING 17 +SWIDTH 235 0 +DWIDTH 12 0 +BBX 21 22 -9 -4 +BITMAP +007000 +00F800 +00F800 +00F800 +00F800 +00F800 +00F800 +1FFFC0 +0FFF80 +07FF00 +03FE00 +01FC00 +00F800 +007000 +002000 +000000 +000000 +7FFFF0 +FFFFF8 +FFFFF8 +FFFFF8 +7FFFF0 +ENDCHAR +STARTCHAR D +ENCODING 18 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 19 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 20 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 21 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C026 +ENCODING 22 +SWIDTH 137 0 +DWIDTH 7 0 +BBX 11 20 -4 -21 +BITMAP +0400 +0400 +0E00 +0E00 +1F00 +1F00 +3F80 +3F80 +7FC0 +7FC0 +FFE0 +CE60 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0400 +ENDCHAR +STARTCHAR C026 +ENCODING 23 +SWIDTH 157 0 +DWIDTH 8 0 +BBX 13 22 -5 -22 +BITMAP +0200 +0700 +0700 +0F80 +0F80 +1FC0 +1FC0 +3FE0 +3FE0 +7FF0 +7FF0 +FFF8 +FFF8 +6FB0 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR D +ENCODING 24 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 25 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 26 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 27 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 28 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 29 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR quotedbl +ENCODING 30 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 24 23 -10 -13 +BITMAP +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +002800 +FFC7FF +FF83FF +FFC7FF +002800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +ENDCHAR +STARTCHAR numbersign +ENCODING 31 +SWIDTH 294 0 +DWIDTH 15 0 +BBX 26 25 -11 -14 +BITMAP +001C0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +7FF7FF80 +FFE3FFC0 +FFC1FFC0 +FFE3FFC0 +7FF7FF80 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +001C0000 +ENDCHAR +STARTCHAR D +ENCODING 32 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 33 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 24 23 -10 -13 +BITMAP +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +002800 +FFC7FF +FF83FF +FFC7FF +002800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +ENDCHAR +STARTCHAR numbersign +ENCODING 35 +SWIDTH 294 0 +DWIDTH 15 0 +BBX 26 25 -11 -14 +BITMAP +001C0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +7FF7FF80 +FFE3FFC0 +FFC1FFC0 +FFE3FFC0 +7FF7FF80 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +001C0000 +ENDCHAR +STARTCHAR D +ENCODING 36 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 37 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 38 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 39 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 40 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 41 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 15 23 -6 -13 +BITMAP +0100 +0380 +07C0 +0FE0 +1FF0 +3FF8 +7BBC +F39E +638C +0380 +0380 +0380 +0380 +0380 +E38C +F39E +7BBC +3FF8 +1FF0 +0FE0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 196 0 +DWIDTH 10 0 +BBX 17 25 -7 -14 +BITMAP +008000 +01C000 +03E000 +07F000 +0FF800 +1FFC00 +3FFE00 +7FFF00 +FFFF80 +7BEF00 +33E600 +03E000 +03E000 +03E000 +33E600 +7BEF00 +FFFF80 +7FFF00 +3FFE00 +1FFC00 +0FF800 +07F000 +03E000 +01C000 +008000 +ENDCHAR +STARTCHAR C002 +ENCODING 44 +SWIDTH 1139 0 +DWIDTH 58 0 +BBX 12 21 -10 -22 +BITMAP +0010 +0030 +0070 +00F0 +01F0 +03F0 +07F0 +0FF0 +1FF0 +3FF0 +7FF0 +FFF0 +0FF0 +07F0 +0F70 +0E30 +1E10 +1C00 +3C00 +3800 +3800 +ENDCHAR +STARTCHAR C003 +ENCODING 45 +SWIDTH 1414 0 +DWIDTH 72 0 +BBX 14 23 -11 -23 +BITMAP +000C +001C +003C +007C +00FC +01FC +03FC +07FC +0FFC +1FFC +3FFC +7FFC +FFFC +7FFC +07FC +0FFC +0FBC +1F9C +1F0C +3F00 +3E00 +3E00 +1C00 +ENDCHAR +STARTCHAR C002 +ENCODING 46 +SWIDTH 1139 0 +DWIDTH 58 0 +BBX 12 21 -10 -22 +BITMAP +0010 +0030 +0070 +00F0 +01F0 +03F0 +07F0 +0FF0 +1FF0 +3FF0 +7FF0 +FFF0 +0FF0 +07F0 +0F70 +0E30 +1E10 +1C00 +3C00 +3800 +3800 +ENDCHAR +STARTCHAR C003 +ENCODING 47 +SWIDTH 1414 0 +DWIDTH 72 0 +BBX 14 23 -11 -23 +BITMAP +000C +001C +003C +007C +00FC +01FC +03FC +07FC +0FFC +1FFC +3FFC +7FFC +FFFC +7FFC +07FC +0FFC +0FBC +1F9C +1F0C +3F00 +3E00 +3E00 +1C00 +ENDCHAR +STARTCHAR D +ENCODING 48 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 49 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR 2 +ENCODING 50 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 21 23 -9 -13 +BITMAP +00F800 +C3FE00 +E7FF80 +FFC3C0 +DF00E0 +CE0060 +C60020 +C30000 +FF8000 +FF8000 +000000 +000000 +000000 +000FF8 +000FF8 +000618 +200318 +300398 +3C07D8 +1E1FF8 +0FFF38 +03FE18 +00F800 +ENDCHAR +STARTCHAR 2 +ENCODING 51 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 21 23 -9 -13 +BITMAP +00F800 +C3FE00 +E7FF80 +FFC3C0 +FF00E0 +FE0060 +FE0020 +FF0000 +FF8000 +FF8000 +000000 +000000 +000000 +000FF8 +000FF8 +0007F8 +2003F8 +3003F8 +3C07F8 +1E1FF8 +0FFF38 +03FE18 +00F800 +ENDCHAR +STARTCHAR 4 +ENCODING 52 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 27 27 -12 -15 +BITMAP +00040000 +000E0000 +001F0000 +003F8000 +007FC000 +007FC000 +000E0000 +000E0000 +000E0000 +0C0E0600 +1C0E0700 +3C0E0780 +7FFFFFC0 +FFFFFFE0 +7FFFFFC0 +3C0E0780 +1C0E0700 +0C0E0600 +000E0000 +000E0000 +000E0000 +007FC000 +007FC000 +003F8000 +001F0000 +000E0000 +00040000 +ENDCHAR +STARTCHAR 4 +ENCODING 53 +SWIDTH 314 0 +DWIDTH 16 0 +BBX 29 29 -13 -16 +BITMAP +00020000 +00070000 +000F8000 +001FC000 +003FE000 +007FF000 +007FF000 +003FE000 +000F8000 +060F8300 +0F0F8780 +1F0F87C0 +3FFFFFE0 +7FFFFFF0 +FFFFFFF8 +7FFFFFF0 +3FFFFFE0 +1F0F87C0 +0F0F8780 +060F8300 +000F8000 +003FE000 +007FF000 +007FF000 +003FE000 +001FC000 +000F8000 +00070000 +00020000 +ENDCHAR +STARTCHAR D +ENCODING 54 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 55 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 56 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 57 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR less +ENCODING 58 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 23 21 -21 -21 +BITMAP +001FFC +00FFFE +01E006 +0307FC +060FF8 +0C0060 +0C07C0 +0C0FC0 +0C0060 +1E07C0 +330FC0 +6180C0 +C0C780 +C06F00 +603C00 +318C00 +199800 +0C3000 +066000 +03C000 +018000 +ENDCHAR +STARTCHAR equal +ENCODING 59 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 23 21 -21 -21 +BITMAP +001FFC +00FFFE +01FFFE +03FFFC +07FFF8 +0FFFE0 +0FFFC0 +0FFFC0 +0FFFE0 +1FFFC0 +3FFFC0 +7FFFC0 +FFFF80 +FFFF00 +7FFC00 +3FFC00 +1FF800 +0FF000 +07E000 +03C000 +018000 +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 962 0 +DWIDTH 49 0 +BBX 23 21 1 -21 +BITMAP +7FF000 +FFFE00 +C00F00 +7FC180 +3FE0C0 +0C0060 +07C060 +07E060 +0C0060 +07C0F0 +07E198 +06030C +03C606 +01EC06 +00780C +006318 +003330 +001860 +000CC0 +000780 +000300 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 923 0 +DWIDTH 47 0 +BBX 23 21 1 -21 +BITMAP +7FF000 +FFFE00 +FFFF00 +7FFF80 +3FFFC0 +0FFFE0 +07FFE0 +07FFE0 +0FFFE0 +07FFF0 +07FFF8 +07FFFC +03FFFE +01FFFE +007FFC +007FF8 +003FF0 +001FE0 +000FC0 +000780 +000300 +ENDCHAR +STARTCHAR D +ENCODING 62 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 63 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 64 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 65 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 66 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 67 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C020 +ENCODING 70 +SWIDTH 216 0 +DWIDTH 11 0 +BBX 20 19 0 -11 +BITMAP +E00000 +E00000 +E00000 +E00000 +E00800 +E01800 +E03800 +E07800 +E0FFF0 +E1FFF0 +E0FFF0 +E07800 +E03800 +E01800 +E00800 +E00000 +E00000 +E00000 +E00000 +ENDCHAR +STARTCHAR C020 +ENCODING 71 +SWIDTH 235 0 +DWIDTH 12 0 +BBX 22 21 -1 -12 +BITMAP +700000 +F80000 +F80000 +F80200 +F80600 +F80E00 +F81E00 +F83E00 +F87FF8 +F8FFFC +F9FFFC +F8FFFC +F87FF8 +F83E00 +F81E00 +F80E00 +F80600 +F80200 +F80000 +F80000 +700000 +ENDCHAR +STARTCHAR D +ENCODING 72 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 73 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 74 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 75 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 76 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 77 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 78 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 79 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 80 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 81 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 82 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 83 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 84 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 85 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +D800 +CC00 +CC00 +6600 +6600 +3300 +3300 +1980 +1980 +0CC0 +0CC0 +0660 +0660 +03F0 +0330 +01F0 +00E0 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FC00 +7E00 +7E00 +3F00 +3F00 +1F80 +1F80 +0FC0 +0FC0 +07E0 +07E0 +03F0 +03F0 +01F0 +00E0 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 353 0 +DWIDTH 18 0 +BBX 17 17 1 -2 +BITMAP +003F80 +007F00 +00FC00 +01F000 +03C000 +07FE00 +01FC00 +03F000 +07C000 +0F0000 +1FF000 +07E000 +0F8000 +1E0000 +380000 +600000 +800000 +ENDCHAR +STARTCHAR X +ENCODING 89 +SWIDTH 392 0 +DWIDTH 20 0 +BBX 20 19 0 -3 +BITMAP +001FF0 +003FE0 +007FC0 +00FF80 +01FE00 +03FFC0 +07FF80 +0FFF00 +03FE00 +07F800 +0FFE00 +1FFC00 +3FF800 +0FF000 +0FC000 +3F0000 +7C0000 +F00000 +C00000 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 15 15 -6 -9 +BITMAP +0380 +0380 +0380 +0380 +0380 +0380 +FFFE +FFFE +FFFE +0380 +0380 +0380 +0380 +0380 +0380 +ENDCHAR +STARTCHAR Z +ENCODING 91 +SWIDTH 196 0 +DWIDTH 10 0 +BBX 17 17 -7 -10 +BITMAP +01C000 +03E000 +03E000 +03E000 +03E000 +03E000 +7FFF00 +FFFF80 +FFFF80 +FFFF80 +7FFF00 +03E000 +03E000 +03E000 +03E000 +03E000 +01C000 +ENDCHAR +STARTCHAR D +ENCODING 92 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 93 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C002 +ENCODING 94 +SWIDTH 1139 0 +DWIDTH 58 0 +BBX 12 21 -10 -22 +BITMAP +0010 +0030 +0070 +00F0 +01F0 +03F0 +07F0 +0FF0 +1FF0 +3FF0 +7FF0 +FFF0 +0FF0 +07F0 +0F70 +0E30 +1E10 +1C00 +3C00 +3800 +3800 +ENDCHAR +STARTCHAR C003 +ENCODING 95 +SWIDTH 1414 0 +DWIDTH 72 0 +BBX 14 23 -11 -23 +BITMAP +000C +001C +003C +007C +00FC +01FC +03FC +07FC +0FFC +1FFC +3FFC +7FFC +FFFC +7FFC +07FC +0FFC +0FBC +1F9C +1F0C +3F00 +3E00 +3E00 +1C00 +ENDCHAR +STARTCHAR C020 +ENCODING 96 +SWIDTH 216 0 +DWIDTH 11 0 +BBX 20 19 -17 -11 +BITMAP +000070 +000070 +000070 +000070 +010070 +018070 +01C070 +01E070 +FFF070 +FFF870 +FFF070 +01E070 +01C070 +018070 +010070 +000070 +000070 +000070 +000070 +ENDCHAR +STARTCHAR C020 +ENCODING 97 +SWIDTH 235 0 +DWIDTH 12 0 +BBX 22 21 -18 -12 +BITMAP +000038 +00007C +00007C +01007C +01807C +01C07C +01E07C +01F07C +7FF87C +FFFC7C +FFFE7C +FFFC7C +7FF87C +01F07C +01E07C +01C07C +01807C +01007C +00007C +00007C +000038 +ENDCHAR +STARTCHAR D +ENCODING 98 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 99 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 100 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 101 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 102 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 103 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 104 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 105 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 157 0 +DWIDTH 8 0 +BBX 13 20 -5 -2 +BITMAP +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +FFF8 +7FF0 +3FE0 +1FC0 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 176 0 +DWIDTH 9 0 +BBX 15 22 -6 -3 +BITMAP +06C0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +7FFC +FFFE +7FFC +3FF8 +1FF0 +0FE0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 25 13 -12 -7 +BITMAP +02002000 +06003000 +0E003800 +1E003C00 +3FFFFE00 +7FFFFF00 +FE003F80 +7FFFFF00 +3FFFFE00 +1E003C00 +0E003800 +06003000 +02002000 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 274 0 +DWIDTH 14 0 +BBX 27 15 -13 -8 +BITMAP +01001000 +03803800 +07803C00 +0F803E00 +1FFFFF00 +3FFFFF80 +7FFFFFC0 +FFFFFFE0 +7FFFFFC0 +3FFFFF80 +1FFFFF00 +0F803E00 +07803C00 +03803800 +01001000 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 412 0 +DWIDTH 21 0 +BBX 20 13 1 -8 +BITMAP +020000 +060000 +0E0000 +1E0000 +3FFFF0 +7FFFF0 +FE0000 +7FFFF0 +3FFFF0 +1E0000 +0E0000 +060000 +020000 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 22 15 0 -9 +BITMAP +010000 +038000 +078000 +0F8000 +1FFFF8 +3FFFFC +7FFFFC +FFFFF8 +7FFFFC +3FFFFC +1FFFF8 +0F8000 +078000 +038000 +010000 +ENDCHAR +STARTCHAR n +ENCODING 112 +SWIDTH 412 0 +DWIDTH 21 0 +BBX 20 13 -18 -8 +BITMAP +000400 +000600 +000700 +000780 +FFFFC0 +FFFFE0 +0007F0 +FFFFE0 +FFFFC0 +000780 +000700 +000600 +000400 +ENDCHAR +STARTCHAR o +ENCODING 113 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 22 15 -19 -9 +BITMAP +000200 +000700 +000780 +0007C0 +7FFFE0 +FFFFF0 +FFFFF8 +7FFFFC +FFFFF8 +FFFFF0 +7FFFE0 +0007C0 +000780 +000700 +000200 +ENDCHAR +STARTCHAR j +ENCODING 114 +SWIDTH 157 0 +DWIDTH 8 0 +BBX 13 20 -5 -21 +BITMAP +0200 +0700 +0F80 +1FC0 +3FE0 +7FF0 +FFF8 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +ENDCHAR +STARTCHAR k +ENCODING 115 +SWIDTH 176 0 +DWIDTH 9 0 +BBX 15 22 -6 -22 +BITMAP +0100 +0380 +07C0 +0FE0 +1FF0 +3FF8 +7FFC +FFFE +7FFC +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +06C0 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 137 0 +DWIDTH 7 0 +BBX 13 25 -5 -14 +BITMAP +0200 +0700 +0F80 +1FC0 +3FE0 +7FF0 +FFF8 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +FFF8 +7FF0 +3FE0 +1FC0 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 157 0 +DWIDTH 8 0 +BBX 15 27 -6 -15 +BITMAP +0100 +0380 +07C0 +0FE0 +1FF0 +3FF8 +7FFC +FFFE +7FFC +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +0FE0 +7FFC +FFFE +7FFC +3FF8 +1FF0 +0FE0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR D +ENCODING 118 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 119 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 120 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 121 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 122 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 123 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 39 0 +DWIDTH 2 0 +BBX 15 26 -13 -22 +BITMAP +000A +0054 +00A0 +0000 +1CAA +1D54 +1C00 +1C20 +3E14 +7F0A +FF80 +C180 +C180 +C180 +C180 +C180 +C180 +C180 +FF80 +FF80 +FF80 +FF80 +C180 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR bar +ENCODING 125 +SWIDTH 39 0 +DWIDTH 2 0 +BBX 15 26 -13 -22 +BITMAP +000E +007C +00E0 +0000 +1CFE +1DFE +1C00 +1C60 +3E3C +7F0E +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR D +ENCODING 126 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 127 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 128 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 129 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR quotedbl +ENCODING 130 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 24 23 -10 -13 +BITMAP +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +002800 +FFC7FF +FF83FF +FFC7FF +002800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +003800 +ENDCHAR +STARTCHAR numbersign +ENCODING 131 +SWIDTH 294 0 +DWIDTH 15 0 +BBX 26 25 -11 -14 +BITMAP +001C0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +7FF7FF80 +FFE3FFC0 +FFC1FFC0 +FFE3FFC0 +7FF7FF80 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +003E0000 +001C0000 +ENDCHAR +STARTCHAR D +ENCODING 132 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 133 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C014 +ENCODING 134 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 21 21 0 -21 +BITMAP +FFFFF8 +FFFFF8 +FFFFF8 +E00000 +E00000 +E00000 +E00000 +E00000 +E0FF00 +E0FE00 +E0FC00 +E0FC00 +E0FE00 +E0FF00 +E0CF80 +E087C0 +E00380 +E00100 +E00000 +E00000 +E00000 +ENDCHAR +STARTCHAR C014 +ENCODING 135 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 23 23 -1 -22 +BITMAP +FFFFFC +FFFFFE +FFFFFE +FFFFFE +FFFFFC +F80000 +F80000 +F80000 +F8FFE0 +F8FFC0 +F8FF80 +F8FF00 +F8FF00 +F8FF80 +F8FFC0 +F8FFE0 +F8E7F0 +F8C3E0 +F881C0 +F80080 +F80000 +F80000 +700000 +ENDCHAR +STARTCHAR C014 +ENCODING 136 +SWIDTH 510 0 +DWIDTH 26 0 +BBX 21 21 -18 -21 +BITMAP +FFFFF8 +FFFFF8 +FFFFF8 +000038 +000038 +000038 +000038 +000038 +07F838 +03F838 +01F838 +01F838 +03F838 +07F838 +0F9838 +1F0838 +0E0038 +040038 +000038 +000038 +000038 +ENDCHAR +STARTCHAR C014 +ENCODING 137 +SWIDTH 432 0 +DWIDTH 22 0 +BBX 23 23 -19 -22 +BITMAP +7FFFFE +FFFFFE +FFFFFE +FFFFFE +7FFFFE +00003E +00003E +00003E +0FFE3E +07FE3E +03FE3E +01FE3E +01FE3E +03FE3E +07FE3E +0FFE3E +1FCE3E +0F863E +07023E +02003E +00003E +00003E +00001C +ENDCHAR +STARTCHAR C020 +ENCODING 138 +SWIDTH 216 0 +DWIDTH 11 0 +BBX 19 20 -8 -20 +BITMAP +FFFFE0 +FFFFE0 +FFFFE0 +000000 +000000 +000000 +000000 +004000 +00E000 +01F000 +03F800 +07FC00 +0FFE00 +00E000 +00E000 +00E000 +00E000 +00E000 +00E000 +00E000 +ENDCHAR +STARTCHAR C020 +ENCODING 139 +SWIDTH 235 0 +DWIDTH 12 0 +BBX 21 22 -9 -21 +BITMAP +7FFFF0 +FFFFF8 +FFFFF8 +FFFFF8 +7FFFF0 +000000 +000000 +002000 +007000 +00F800 +01FC00 +03FE00 +07FF00 +0FFF80 +1FFFC0 +00F800 +00F800 +00F800 +00F800 +00F800 +00F800 +007000 +ENDCHAR +STARTCHAR D +ENCODING 140 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 141 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 142 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 143 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 144 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 145 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 146 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 147 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR D +ENCODING 148 +SWIDTH 255 0 +DWIDTH 13 0 +BBX 12 21 1 -22 +BITMAP +8000 +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FF00 +FE00 +EF00 +C700 +8780 +0380 +03C0 +01C0 +01C0 +ENDCHAR +STARTCHAR E +ENCODING 149 +SWIDTH 530 0 +DWIDTH 27 0 +BBX 14 23 0 -23 +BITMAP +C000 +E000 +F000 +F800 +FC00 +FE00 +FF00 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FF80 +FFC0 +F7C0 +E7E0 +C3E0 +03F0 +01F0 +01F0 +00E0 +ENDCHAR +STARTCHAR C226 +ENCODING 150 +SWIDTH 235 0 +DWIDTH 12 0 +BBX 23 37 -10 -20 +BITMAP +007C00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +03FF80 +0FFFE0 +1F01F0 +3C0078 +383838 +70381C +70381C +60380C +E0380E +E0380E +E0380E +E03C0E +E01E0E +600F0C +70079C +70031C +380038 +3C0078 +1F01F0 +0FFFE0 +03FF80 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +007C00 +ENDCHAR +STARTCHAR C226 +ENCODING 151 +SWIDTH 235 0 +DWIDTH 12 0 +BBX 23 37 -10 -20 +BITMAP +007C00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +03FF80 +0FFFE0 +1FFFF0 +3FFFF8 +3FFFF8 +7FFFFC +7FFFFC +7FFFFC +FFFFFE +FFFFFE +FFFFFE +FFFFFE +FFFFFE +7FFFFC +7FFFFC +7FFFFC +3FFFF8 +3FFFF8 +1FFFF0 +0FFFE0 +03FF80 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +00FE00 +007C00 +ENDCHAR +STARTCHAR C230 +ENCODING 152 +SWIDTH 373 0 +DWIDTH 19 0 +BBX 11 21 -4 -12 +BITMAP +FBE0 +FFE0 +1F00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +1F00 +FFE0 +FBE0 +ENDCHAR +STARTCHAR C231 +ENCODING 153 +SWIDTH 157 0 +DWIDTH 8 0 +BBX 13 23 -5 -13 +BITMAP +7DF0 +FFF8 +FFF8 +7FF0 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +7FF0 +FFF8 +FFF8 +7DF0 +ENDCHAR +ENDFONT diff --git a/kcontrol/input/cursor_large_black.pcf.gz b/kcontrol/input/cursor_large_black.pcf.gz new file mode 100644 index 000000000..900a1dd58 Binary files /dev/null and b/kcontrol/input/cursor_large_black.pcf.gz differ diff --git a/kcontrol/input/cursor_large_white.pcf.gz b/kcontrol/input/cursor_large_white.pcf.gz new file mode 100644 index 000000000..83935e1de Binary files /dev/null and b/kcontrol/input/cursor_large_white.pcf.gz differ diff --git a/kcontrol/input/cursor_small_white.pcf.gz b/kcontrol/input/cursor_small_white.pcf.gz new file mode 100644 index 000000000..694cf5bfc Binary files /dev/null and b/kcontrol/input/cursor_small_white.pcf.gz differ diff --git a/kcontrol/input/kapplymousetheme.cpp b/kcontrol/input/kapplymousetheme.cpp new file mode 100644 index 000000000..99d6d1077 --- /dev/null +++ b/kcontrol/input/kapplymousetheme.cpp @@ -0,0 +1,92 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * Copyright (c) 2005 Lubos Lunak + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include + +#ifdef HAVE_XCURSOR +# include +#endif + +static Display* dpy; +static Display* qt_xdisplay() { return dpy; }\ +static Window qt_xrootwin() { return DefaultRootWindow( dpy ); } + +bool isEmpty( const char* str ) + { + if( str == NULL ) + return true; + while( isspace( *str )) + ++str; + return *str == '\0'; + } + +int main( int argc, char* argv[] ) + { + if( argc != 3 ) + return 1; + dpy = XOpenDisplay( NULL ); + if( dpy == NULL ) + return 2; + int ret = 0; +#ifdef HAVE_XCURSOR + const char* theme = argv[ 1 ]; + const char* size = argv[ 2 ]; + + // Note: If you update this code, update kapplymousetheme as well. + + // use a default value for theme only if it's not configured at all, not even in X resources + if( isEmpty( theme ) + && isEmpty( XGetDefault( qt_xdisplay(), "Xcursor", "theme" )) + && isEmpty( XcursorGetTheme( qt_xdisplay()))) + { + theme = "default"; + ret = 10; // means to switch to default + } + + // Apply the KDE cursor theme to ourselves + if( !isEmpty( theme )) + XcursorSetTheme(qt_xdisplay(), theme ); + + if (!isEmpty( size )) + XcursorSetDefaultSize(qt_xdisplay(), atoi( size )); + + // Load the default cursor from the theme and apply it to the root window. + Cursor handle = XcursorLibraryLoadCursor(qt_xdisplay(), "left_ptr"); + XDefineCursor(qt_xdisplay(), qt_xrootwin(), handle); + XFreeCursor(qt_xdisplay(), handle); // Don't leak the cursor + +#else + ( void ) qt_xdisplay(); + ( void ) qt_xrootwin(); + ( void ) argv; +#endif + XCloseDisplay( dpy ); + return ret; + } diff --git a/kcontrol/input/kmousedlg.ui b/kcontrol/input/kmousedlg.ui new file mode 100644 index 000000000..01ba9966f --- /dev/null +++ b/kcontrol/input/kmousedlg.ui @@ -0,0 +1,378 @@ + +KMouseDlg + + + KMouseDlg + + + + 0 + 0 + 568 + 434 + + + + + unnamed + + + + handedBox + + + + 5 + 4 + 0 + 0 + + + + GroupBoxPanel + + + Sunken + + + Button Order + + + true + + + true + + + + unnamed + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer53 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + rightHanded + + + Righ&t handed + + + true + + + + + leftHanded + + + Le&ft handed + + + + + mousePix + + + + 0 + 0 + 0 + 0 + + + + + 150 + 115 + + + + true + + + + + + + cbScrollPolarity + + + Re&verse scroll direction + + + Change the direction of scrolling for the mouse wheel or the 4th and 5th mouse buttons. + + + + + GroupBox1 + + + Icons + + + + unnamed + + + + doubleClick + + + Dou&ble-click to open files and folders (select icons on first click) + + + false + + + + + Line1 + + + HLine + + + Sunken + + + Horizontal + + + + + cbVisualActivate + + + Visual f&eedback on activation + + + + + cb_pointershape + + + Cha&nge pointer shape over icons + + + true + + + + + cbAutoSelect + + + A&utomatically select icons + + + + + Spacer6 + + + Horizontal + + + Fixed + + + + 20 + 60 + + + + + + layout7 + + + + unnamed + + + + lb_short + + + Short + + + + + slAutoSelect + + + + 250 + 0 + + + + 2000 + + + Horizontal + + + + + Spacer8 + + + Horizontal + + + Expanding + + + + 230 + 20 + + + + + + lDelay + + + Dela&y: + + + slAutoSelect + + + + + lb_long + + + Long + + + AlignVCenter|AlignRight + + + + + + + + + Spacer3 + + + Horizontal + + + Fixed + + + + 20 + 21 + + + + + + singleClick + + + &Single-click to open files and folders + + + true + + + + + + + Spacer7 + + + Vertical + + + Expanding + + + + 20 + 16 + + + + + + + + singleClick + toggled(bool) + cb_pointershape + setEnabled(bool) + + + singleClick + toggled(bool) + cbAutoSelect + setEnabled(bool) + + + cbAutoSelect + toggled(bool) + slAutoSelect + setEnabled(bool) + + + + rightHanded + leftHanded + singleClick + cb_pointershape + cbAutoSelect + slAutoSelect + doubleClick + cbVisualActivate + + + kdialog.h + + + + diff --git a/kcontrol/input/logitechmouse.cpp b/kcontrol/input/logitechmouse.cpp new file mode 100644 index 000000000..1b8132a7e --- /dev/null +++ b/kcontrol/input/logitechmouse.cpp @@ -0,0 +1,417 @@ +/* + * logitechmouse.cpp + * + * Copyright (C) 2004 Brad Hards + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#ifdef HAVE_LIBUSB +#include + +#include "logitechmouse.h" + +LogitechMouse::LogitechMouse( struct usb_device *usbDev, int mouseCapabilityFlags, QWidget* parent, const char* name ) + : LogitechMouseBase( parent, name, 0 ) +{ + if ( !name ) + setName( "LogitechMouse" ); + + cordlessNameLabel->setText( i18n("Mouse type: %1").arg( this->name() ) ); + + m_mouseCapabilityFlags = mouseCapabilityFlags; + + m_usbDeviceHandle = usb_open( usbDev ); + + if ( 0 == m_usbDeviceHandle ) { + kdWarning() << "Error opening usbfs file: " << usb_strerror() << endl; + return; + } + + if ( mouseCapabilityFlags & USE_CH2 ) { + m_useSecondChannel = 0x0100; + } else { + m_useSecondChannel = 0x0000; + } + + permissionProblemText->hide(); + + if ( mouseCapabilityFlags & HAS_RES ) { + updateResolution(); + resolutionSelector->setEnabled( TRUE ); + + connect( button400cpi, SIGNAL( clicked() ), parent, SLOT( changed() ) ); + connect( button800cpi, SIGNAL( clicked() ), parent, SLOT( changed() ) ); + + if ( 4 == resolution() ) { + button800cpi->setChecked( TRUE ); + } else if ( 3 == resolution() ) { + button400cpi->setChecked( TRUE ); + } else { + // it must have failed, try to help out + resolutionSelector->setEnabled(FALSE); + permissionProblemText->show(); + } + } + + if ( mouseCapabilityFlags & HAS_CSR ) { + + initCordlessStatusReporting(); + + // Do a name + cordlessNameLabel->setText( i18n("Mouse type: %1").arg( cordlessName() ) ); + cordlessNameLabel->setEnabled( TRUE ); + + // Display the battery power level - the level gets updated in updateGUI() + batteryBox->setEnabled( TRUE ); + + // Channel + channelSelector->setEnabled( TRUE ); + // if the channel is changed, we need to turn off the timer, otherwise it + // just resets the button to reflect the current status. The timer is + // started again when we applyChanges() + connect( channel1, SIGNAL( clicked() ), this, SLOT( stopTimerForNow() ) ); + connect( channel1, SIGNAL( clicked() ), parent, SLOT( changed() ) ); + if ( isDualChannelCapable() ) { + channel2->setEnabled( TRUE ); + connect( channel2, SIGNAL( clicked() ), this, SLOT( stopTimerForNow() ) ); + connect( channel2, SIGNAL( clicked() ), parent, SLOT( changed() ) ); + } + + updateGUI(); + } + +} + +LogitechMouse::~LogitechMouse() +{ + usb_close( m_usbDeviceHandle ); +} + +void LogitechMouse::initCordlessStatusReporting() +{ + updateCordlessStatus(); + doUpdate = new QTimer( this ); // will be automatically deleted + connect( doUpdate, SIGNAL( timeout() ), this, SLOT( updateGUI() ) ); + doUpdate->start( 20000 ); +} + +void LogitechMouse::updateCordlessStatus() +{ + QByteArray status(8); + + int result = usb_control_msg( m_usbDeviceHandle, + USB_TYPE_VENDOR | USB_ENDPOINT_IN,0x09, + (0x0003 | m_useSecondChannel), + (0x0000 | m_useSecondChannel), + status.data(), + 0x0008, + 1000); + + if (0 > result) { + // We probably have a permission problem + channelSelector->setEnabled( FALSE ); + batteryBox->setEnabled( FALSE ); + cordlessNameLabel->hide(); + permissionProblemText->show(); + } else { + // kdDebug() << "P6 (connect status): " << (status[0] & 0xFF) << endl; + if ( status[0] & 0x20 ) { // mouse is talking + m_connectStatus = ( status[0] & 0x80 ); + m_mousePowerup = ( status[0] & 0x40 ); + m_receiverUnlock = ( status[0] & 0x10 ); + m_waitLock = ( status[0] & 0x08 ); + } + + // kdDebug() << "P0 (receiver type): " << (status[1] & 0xFF) << endl; + /* + 0x38 = pid C501 + 0x39 = pid C502 + 0x3B = pid C504 + 0x3C = pid C508 + 0x3D = pid C506 + 0x3E = pid C505 + */ + + m_cordlessNameIndex = (status[2] & 0xFF); + + m_batteryLevel = (status[3] & 0x07 ); + if ( status[3] & 0x08 ) { + m_channel = 2; + } else { + m_channel = 1; + } + + m_cordlessSecurity = ( ( status[4] ) & ( status[5] << 8 ) ); + + m_caseShape = ( status[6] & 0x7F ); + + // kdDebug() << "PB1 (device Capabilities): " << (status[7] & 0xFF) << endl; + m_numberOfButtons = 2 + ( status[7] & 0x07 ); // 9 means something more than 8 + m_twoChannelCapable = ( status[7] & 0x40 ); + m_verticalRoller = ( status[7] & 0x08 ); + m_horizontalRoller = ( status[7] & 0x10 ); + m_has800cpi = ( status[7] & 0x20 ); + } + +} + +void LogitechMouse::updateGUI() +{ + updateCordlessStatus(); + + batteryBar->setProgress( batteryLevel() ); + + if ( isDualChannelCapable() ) { + if ( 2 == channel() ) { + channel2->setChecked( TRUE ); + } else if ( 1 == channel() ) { + channel1->setChecked( TRUE ); + } // else it might have failed - we don't do anything + } +} + +void LogitechMouse::stopTimerForNow() +{ + doUpdate->stop(); +} + +void LogitechMouse::applyChanges() +{ + if ( m_mouseCapabilityFlags & HAS_RES ) { + if ( ( resolution() == 4 ) && ( button400cpi->isChecked() ) ) { + // then we are in 800cpi mode, but want 400cpi + setLogitechTo400(); + } else if ( ( resolution() == 3 ) && (button800cpi->isChecked() ) ) { + // then we are in 400 cpi mode, but want 800 cpi + setLogitechTo800(); + } + } + + if ( isDualChannelCapable() ) { + if ( ( channel() == 2 ) && ( channel1->isChecked() ) ) { + // we are on channel 2, but want channel 1 + setChannel1(); + KMessageBox::information(this, i18n("RF channel 1 has been set. Please press Connect button on mouse to re-establish link"), i18n("Press Connect Button") ); + } else if ( ( channel() == 1 ) && ( channel2->isChecked() ) ) { + // we are on channel 1, but want channel 2 + setChannel2(); + KMessageBox::information(this, i18n("RF channel 2 has been set. Please press Connect button on mouse to re-establish link"), i18n("Press Connect Button") ); + } + + initCordlessStatusReporting(); + } +} + +void LogitechMouse::save(KConfig * /*config*/) +{ + kdDebug() << "Logitech mouse settings not saved - not implemented yet" << endl; +} + +Q_UINT8 LogitechMouse::resolution() +{ + // kdDebug() << "resolution: " << m_resolution << endl; + if ( 0 == m_resolution ) { + updateResolution(); + } + return m_resolution; +} + +void LogitechMouse::updateResolution() +{ + char resolution; + + int result = usb_control_msg( m_usbDeviceHandle, + USB_TYPE_VENDOR | USB_ENDPOINT_IN, + 0x01, + 0x000E, + 0x0000, + &resolution, + 0x0001, + 100); + + // kdDebug() << "resolution is: " << resolution << endl; + if (0 > result) { + kdWarning() << "Error getting resolution from device : " << usb_strerror() << endl; + m_resolution = 0; + } else { + m_resolution = resolution; + } +} + +void LogitechMouse::setLogitechTo800() +{ + int result = usb_control_msg( m_usbDeviceHandle, + USB_TYPE_VENDOR, + 0x02, + 0x000E, + 4, + NULL, + 0x0000, + 100); + if (0 > result) { + kdWarning() << "Error setting resolution on device: " << usb_strerror() << endl; + } +} + +void LogitechMouse::setLogitechTo400() +{ + int result = usb_control_msg( m_usbDeviceHandle, + USB_TYPE_VENDOR, + 0x02, + 0x000E, + 3, + NULL, + 0x0000, + 100); + if (0 > result) { + kdWarning() << "Error setting resolution on device: " << usb_strerror() << endl; + } +} + +Q_UINT8 LogitechMouse::batteryLevel() +{ + return m_batteryLevel; +} + + +Q_UINT8 LogitechMouse::channel() +{ + return m_channel; +} + +bool LogitechMouse::isDualChannelCapable() +{ + return m_twoChannelCapable; +} + +void LogitechMouse::setChannel1() +{ + int result = usb_control_msg( m_usbDeviceHandle, + USB_TYPE_VENDOR, + 0x02, + (0x0008 | m_useSecondChannel), + (0x0000 | m_useSecondChannel), + NULL, + 0x0000, + 1000); + + if (0 > result) { + kdWarning() << "Error setting mouse to channel 1 : " << usb_strerror() << endl; + } + +} + +void LogitechMouse::setChannel2() +{ + int result = usb_control_msg( m_usbDeviceHandle, + USB_TYPE_VENDOR, + 0x02, + (0x0008 | m_useSecondChannel), + (0x0001 | m_useSecondChannel), + NULL, + 0x0000, + 1000); + + if (0 > result) { + kdWarning() << "Error setting mouse to channel 2 : " << usb_strerror() << endl; + } + +} + +QString LogitechMouse::cordlessName() +{ + switch ( m_cordlessNameIndex ) { + case 0x00: + return i18n( "none" ); + break; + case 0x04: + return i18n( "Cordless Mouse" ); + break; + case 0x05: + return i18n( "Cordless Wheel Mouse" ); + break; + case 0x06: + return i18n( "Cordless MouseMan Wheel" ); + break; + case 0x07: + return i18n( "Cordless Wheel Mouse" ); + break; + case 0x08: + return i18n( "Cordless Wheel Mouse" ); + break; + case 0x09: + return i18n( "Cordless TrackMan Wheel" ); + break; + case 0x0A: + return i18n( "TrackMan Live" ); + break; + case 0x0C: + return i18n( "Cordless TrackMan FX" ); + break; + case 0x0D: + return i18n( "Cordless MouseMan Optical" ); + break; + case 0x0E: + return i18n( "Cordless Optical Mouse" ); + break; + case 0x0F: + return i18n( "Cordless Mouse" ); + break; + case 0x12: + return i18n( "Cordless MouseMan Optical (2ch)" ); + break; + case 0x13: + return i18n( "Cordless Optical Mouse (2ch)" ); + break; + case 0x14: + return i18n( "Cordless Mouse (2ch)" ); + break; + case 0x82: + return i18n( "Cordless Optical TrackMan" ); + break; + case 0x8A: + return i18n( "MX700 Cordless Optical Mouse" ); + break; + case 0x8B: + return i18n( "MX700 Cordless Optical Mouse (2ch)" ); + break; + default: + return i18n( "Unknown mouse"); + } +} + +#include "logitechmouse.moc" + +#endif + diff --git a/kcontrol/input/logitechmouse.h b/kcontrol/input/logitechmouse.h new file mode 100644 index 000000000..8c7ef06d3 --- /dev/null +++ b/kcontrol/input/logitechmouse.h @@ -0,0 +1,102 @@ +/* + * logitechmouse.h + * + * Copyright (C) 2004 Brad Hards + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __LOGITECHMOUSE_H__ +#define __LOGITECHMOUSE_H__ + +#include +#include +#include +#include +#include + +#include + +#include + +#include "logitechmouse_base.h" + +#include + +#define VENDOR_LOGITECH 0x046D +#define HAS_RES 0x01 /* mouse supports variable resolution */ +#define HAS_SS 0x02 /* mouse supports smart scroll control */ +#define HAS_CSR 0x04 /* mouse supports cordless status reporting and control */ +#define HAS_SSR 0x08 /* mouse supports smart scroll reporting */ +#define USE_CH2 0x10 /* mouse needs to use the second channel */ + + +class LogitechMouse : public LogitechMouseBase +{ + Q_OBJECT + +public: + LogitechMouse( struct usb_device *usbDev, int mouseCapabilityFlags, QWidget* parent = 0, const char* name = 0 ); + ~LogitechMouse(); + void applyChanges(); + void save(KConfig *config); + +protected slots: + void setChannel1(); + void setChannel2(); + void updateGUI(); + void stopTimerForNow(); + +private: + void initCordlessStatusReporting(); + void updateCordlessStatus(); + + void setLogitechTo400(); + void setLogitechTo800(); + + QString cordlessName(); + Q_UINT8 resolution(); + void updateResolution(); + Q_UINT8 batteryLevel(); + Q_UINT8 channel(); + bool isDualChannelCapable(); + + QTimer *doUpdate; + + struct usb_dev_handle *m_usbDeviceHandle; + bool m_connectStatus; // true if the CONNECT button on the mouse is pressed + bool m_mousePowerup; // true if we are doing "just out of the box" auto-locking + bool m_receiverUnlock; // true if mouse has been disconnected by a long press + // of the receiver's CONNECT button + bool m_waitLock; // true if receiver searching for new mouse because the + // CONNECT button on the receiver was pressed + Q_UINT8 m_batteryLevel; + Q_UINT8 m_channel; + Q_UINT8 m_cordlessNameIndex; // this gets convered into a QString in cordlessName() + Q_UINT16 m_cordlessSecurity; + Q_UINT16 m_useSecondChannel; + Q_UINT8 m_caseShape; + Q_UINT8 m_numberOfButtons; + Q_UINT8 m_resolution; + bool m_twoChannelCapable; // true if the mouse supports dual channels + bool m_verticalRoller; // true if the mouse has a vertical roller (wheel) + bool m_horizontalRoller; // true if the mouse has a horizontal roller (wheel) + bool m_has800cpi; // true if the mouse does 800cpi resolution + int m_mouseCapabilityFlags; +}; + +#endif + diff --git a/kcontrol/input/logitechmouse.usermap b/kcontrol/input/logitechmouse.usermap new file mode 100644 index 000000000..65da520c5 --- /dev/null +++ b/kcontrol/input/logitechmouse.usermap @@ -0,0 +1,35 @@ +# script match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info +# Wheel Mouse Optical +consoleUserPerms 0x0003 0x046d 0xc00e 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MouseMan Traveler +consoleUserPerms 0x0003 0x046d 0xc00f 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MouseMan Dual Optical +consoleUserPerms 0x0003 0x046d 0xc012 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MX310 Optical Mouse +consoleUserPerms 0x0003 0x046d 0xc01b 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MX510 Optical Mouse +consoleUserPerms 0x0003 0x046d 0xc01d 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MX300 Optical Mouse +consoleUserPerms 0x0003 0x046d 0xc024 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MX500 Optical Mouse +consoleUserPerms 0x0003 0x046d 0xc025 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# iFeel Mouse +consoleUserPerms 0x0003 0x046d 0xc031 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Mouse Receiver +consoleUserPerms 0x0003 0x046d 0xc501 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Dual Receiver +consoleUserPerms 0x0003 0x046d 0xc502 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Cordless Freedom Optical +consoleUserPerms 0x0003 0x046d 0xc504 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Cordless Elite Duo +consoleUserPerms 0x0003 0x046d 0xc505 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MX700 Optical Mouse +consoleUserPerms 0x0003 0x046d 0xc506 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Cordless Optical Trackman +consoleUserPerms 0x0003 0x046d 0xc508 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Cordless MX Duo Receiver +consoleUserPerms 0x0003 0x046d 0xc50b 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# MX100 Laser Mouse +consoleUserPerms 0x0003 0x046d 0xc50e 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Receiver for Cordless Presenter +consoleUserPerms 0x0003 0x046d 0xc702 0x0000 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 diff --git a/kcontrol/input/logitechmouse_base.ui b/kcontrol/input/logitechmouse_base.ui new file mode 100644 index 000000000..5c9c1cd9a --- /dev/null +++ b/kcontrol/input/logitechmouse_base.ui @@ -0,0 +1,153 @@ + +LogitechMouseBase + + + LogitechMouseBase + + + + 0 + 0 + 458 + 383 + + + + + unnamed + + + + cordlessNameLabel + + + Cordless Name + + + + + permissionProblemText + + + You have a Logitech Mouse connected, and libusb was found at compile time, but it was not possible to access this mouse. This is probably caused by a permissions problem - you should consult the manual on how to fix this. + + + WordBreak|AlignVCenter + + + + + resolutionSelector + + + false + + + Sensor Resolution + + + true + + + + unnamed + + + + button400cpi + + + 400 counts per inch + + + 1 + + + + + button800cpi + + + 800 counts per inch + + + 1 + + + + + + + batteryBox + + + false + + + Battery Level + + + + unnamed + + + + batteryBar + + + 7 + + + + + + + channelSelector + + + false + + + RF Channel + + + true + + + + unnamed + + + + channel1 + + + Channel 1 + + + true + + + 3 + + + + + channel2 + + + false + + + Channel 2 + + + 3 + + + + + + + + diff --git a/kcontrol/input/main.cpp b/kcontrol/input/main.cpp new file mode 100644 index 000000000..f0a464adc --- /dev/null +++ b/kcontrol/input/main.cpp @@ -0,0 +1,96 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include + +#include + +#ifdef HAVE_XCURSOR +# include +#endif + +#include "mouse.h" + +extern "C" +{ + KDE_EXPORT KCModule *create_mouse(QWidget *parent, const char *) + { + return new MouseConfig(parent, "kcminput"); + } + + KDE_EXPORT void init_mouse() + { + KConfig *config = new KConfig("kcminputrc", true, false); // Read-only, no globals + MouseSettings settings; + settings.load(config); + settings.apply(true); // force + +#ifdef HAVE_XCURSOR + config->setGroup("Mouse"); + QCString theme = QFile::encodeName(config->readEntry("cursorTheme", QString())); + QCString size = config->readEntry("cursorSize", QString()).local8Bit(); + + // Note: If you update this code, update kapplymousetheme as well. + + // use a default value for theme only if it's not configured at all, not even in X resources + if( theme.isEmpty() + && QCString( XGetDefault( qt_xdisplay(), "Xcursor", "theme" )).isEmpty() + && QCString( XcursorGetTheme( qt_xdisplay())).isEmpty()) + { + theme = "default"; + } + + // Apply the KDE cursor theme to ourselves + if( !theme.isEmpty()) + XcursorSetTheme(qt_xdisplay(), theme.data()); + + if (!size.isEmpty()) + XcursorSetDefaultSize(qt_xdisplay(), size.toUInt()); + + // Load the default cursor from the theme and apply it to the root window. + Cursor handle = XcursorLibraryLoadCursor(qt_xdisplay(), "left_ptr"); + XDefineCursor(qt_xdisplay(), qt_xrootwin(), handle); + XFreeCursor(qt_xdisplay(), handle); // Don't leak the cursor + + // Tell klauncher to set the XCURSOR_THEME and XCURSOR_SIZE environment + // variables when launching applications. + DCOPRef klauncher("klauncher"); + if( !theme.isEmpty()) + klauncher.send("setLaunchEnv", QCString("XCURSOR_THEME"), theme); + if( !size.isEmpty()) + klauncher.send("setLaunchEnv", QCString("XCURSOR_SIZE"), size); +#endif + + delete config; + } +} + + diff --git a/kcontrol/input/mouse.cpp b/kcontrol/input/mouse.cpp new file mode 100644 index 000000000..56e737135 --- /dev/null +++ b/kcontrol/input/mouse.cpp @@ -0,0 +1,838 @@ +/* + * mouse.cpp + * + * Copyright (c) 1997 Patrick Dowler dowler@morgul.fsh.uvic.ca + * + * Layout management, enhancements: + * Copyright (c) 1999 Dirk A. Mueller + * + * SC/DC/AutoSelect/ChangeCursor: + * Copyright (c) 2000 David Faure + * + * Double click interval, drag time & dist + * Copyright (c) 2000 Bernd Gehrmann + * + * Large cursor support + * Visual activation TODO: speed + * Copyright (c) 2000 Rik Hemsley + * + * White cursor support + * TODO: give user the option to choose a certain cursor font + * -> Theming + * + * General/Advanced tabs + * Copyright (c) 2000 Brad Hughes + * + * redesign for KDE 2.2 + * Copyright (c) 2001 Ralf Nolden + * + * Logitech mouse support + * Copyright (C) 2004 Brad Hards + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#undef Below +#undef Above +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "mouse.h" + +#include +#include +#include +#include + +#undef Below + +MouseConfig::MouseConfig (QWidget * parent, const char *name) + : KCModule(parent, name) +{ + + + setQuickHelp( i18n("

Mouse

This module allows you to choose various" + " options for the way in which your pointing device works. Your" + " pointing device may be a mouse, trackball, or some other hardware" + " that performs a similar function.")); + + QString wtstr; + + QBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + tabwidget = new QTabWidget(this); + top->addWidget(tabwidget); + + tab1 = new KMouseDlg(this); + QButtonGroup *group = new QButtonGroup( tab1 ); + group->setExclusive( true ); + group->hide(); + group->insert( tab1->singleClick ); + group->insert( tab1->doubleClick ); + + tabwidget->addTab(tab1, i18n("&General")); + + connect(tab1->handedBox, SIGNAL(clicked(int)), this, SLOT(changed())); + connect(tab1->handedBox, SIGNAL(clicked(int)), this, SLOT(slotHandedChanged(int))); + + wtstr = i18n("If you are left-handed, you may prefer to swap the" + " functions of the left and right buttons on your pointing device" + " by choosing the 'left-handed' option. If your pointing device" + " has more than two buttons, only those that function as the" + " left and right buttons are affected. For example, if you have" + " a three-button mouse, the middle button is unaffected."); + QWhatsThis::add( tab1->handedBox, wtstr ); + + connect(tab1->doubleClick, SIGNAL(clicked()), SLOT(changed())); + + wtstr = i18n("The default behavior in KDE is to select and activate" + " icons with a single click of the left button on your pointing" + " device. This behavior is consistent with what you would expect" + " when you click links in most web browsers. If you would prefer" + " to select with a single click, and activate with a double click," + " check this option."); + QWhatsThis::add( tab1->doubleClick, wtstr ); + + wtstr = i18n("Activates and opens a file or folder with a single click."); + QWhatsThis::add( tab1->singleClick, wtstr ); + + + connect(tab1->cbAutoSelect, SIGNAL(clicked()), this, SLOT(changed())); + + wtstr = i18n("If you check this option, pausing the mouse pointer" + " over an icon on the screen will automatically select that icon." + " This may be useful when single clicks activate icons, and you" + " want only to select the icon without activating it."); + QWhatsThis::add( tab1->cbAutoSelect, wtstr ); + +// slAutoSelect = new QSlider(0, 2000, 10, 0, QSlider::Horizontal, tab1); + tab1->slAutoSelect->setSteps( 125, 125 ); + tab1->slAutoSelect->setTickmarks( QSlider::Below ); + tab1->slAutoSelect->setTickInterval( 250 ); + tab1->slAutoSelect->setTracking( true ); + + wtstr = i18n("If you have checked the option to automatically select" + " icons, this slider allows you to select how long the mouse pointer" + " must be paused over the icon before it is selected."); + QWhatsThis::add( tab1->slAutoSelect, wtstr ); + + wtstr = i18n("Show feedback when clicking an icon"); + QWhatsThis::add( tab1->cbVisualActivate, wtstr ); + + connect(tab1->slAutoSelect, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(tab1->cbVisualActivate, SIGNAL(clicked()), this, SLOT(changed())); + + connect(tab1->cb_pointershape, SIGNAL(clicked()), this, SLOT(changed())); + + connect(tab1->singleClick, SIGNAL(clicked()), this, SLOT(changed())); + connect(tab1->singleClick, SIGNAL(clicked()), this, SLOT(slotClick())); + + connect( tab1->doubleClick, SIGNAL( clicked() ), this, SLOT( slotClick() ) ); + connect( tab1->cbAutoSelect, SIGNAL( clicked() ), this, SLOT( slotClick() ) ); + + // Only allow setting reversing scroll polarity if we have scroll buttons + unsigned char map[20]; + if ( XGetPointerMapping(kapp->getDisplay(), map, 20) >= 5 ) + { + tab1->cbScrollPolarity->setEnabled( true ); + tab1->cbScrollPolarity->show(); + } + else + { + tab1->cbScrollPolarity->setEnabled( false ); + tab1->cbScrollPolarity->hide(); + } + connect(tab1->cbScrollPolarity, SIGNAL(clicked()), this, SLOT(changed())); + connect(tab1->cbScrollPolarity, SIGNAL(clicked()), this, SLOT(slotScrollPolarityChanged())); + + // Cursor theme tab + themetab = new ThemePage(this); + connect(themetab, SIGNAL(changed(bool)), SLOT(changed())); + tabwidget->addTab(themetab, i18n("&Cursor Theme")); + + // Advanced tab + tab2 = new QWidget(0, "Advanced Tab"); + tabwidget->addTab(tab2, i18n("Advanced")); + + QBoxLayout *lay = new QVBoxLayout(tab2, KDialog::marginHint(), + KDialog::spacingHint()); + + accel = new KDoubleNumInput(1, 20, 2, 0.1, 1, tab2); + accel->setLabel(i18n("Pointer acceleration:")); + accel->setSuffix("x"); + lay->addWidget(accel); + connect(accel, SIGNAL(valueChanged(double)), this, SLOT(changed())); + + wtstr = i18n("This option allows you to change the relationship" + " between the distance that the mouse pointer moves on the" + " screen and the relative movement of the physical device" + " itself (which may be a mouse, trackball, or some other" + " pointing device.)

" + " A high value for the acceleration will lead to large" + " movements of the mouse pointer on the screen even when" + " you only make a small movement with the physical device." + " Selecting very high values may result in the mouse pointer" + " flying across the screen, making it hard to control."); + QWhatsThis::add( accel, wtstr ); + + thresh = new KIntNumInput(accel, 20, tab2); + thresh->setLabel(i18n("Pointer threshold:")); + thresh->setRange(0,20,1); + thresh->setSteps(1,1); + lay->addWidget(thresh); + connect(thresh, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(thresh, SIGNAL(valueChanged(int)), this, SLOT(slotThreshChanged(int))); + slotThreshChanged(thresh->value()); + + wtstr = i18n("The threshold is the smallest distance that the" + " mouse pointer must move on the screen before acceleration" + " has any effect. If the movement is smaller than the threshold," + " the mouse pointer moves as if the acceleration was set to 1X;

" + " thus, when you make small movements with the physical device," + " there is no acceleration at all, giving you a greater degree" + " of control over the mouse pointer. With larger movements of" + " the physical device, you can move the mouse pointer" + " rapidly to different areas on the screen."); + QWhatsThis::add( thresh, wtstr ); + + // It would be nice if the user had a test field. + // Selecting such values in milliseconds is not intuitive + doubleClickInterval = new KIntNumInput(thresh, 2000, tab2); + doubleClickInterval->setLabel(i18n("Double click interval:")); + doubleClickInterval->setRange(0, 2000, 100); + doubleClickInterval->setSuffix(i18n(" msec")); + doubleClickInterval->setSteps(100, 100); + lay->addWidget(doubleClickInterval); + connect(doubleClickInterval, SIGNAL(valueChanged(int)), this, SLOT(changed())); + + wtstr = i18n("The double click interval is the maximal time" + " (in milliseconds) between two mouse clicks which" + " turns them into a double click. If the second" + " click happens later than this time interval after" + " the first click, they are recognized as two" + " separate clicks."); + QWhatsThis::add( doubleClickInterval, wtstr ); + + lay->addSpacing(15); + + dragStartTime = new KIntNumInput(doubleClickInterval, 2000, tab2); + dragStartTime->setLabel(i18n("Drag start time:")); + dragStartTime->setRange(0, 2000, 100); + dragStartTime->setSuffix(i18n(" msec")); + dragStartTime->setSteps(100, 100); + lay->addWidget(dragStartTime); + connect(dragStartTime, SIGNAL(valueChanged(int)), this, SLOT(changed())); + + wtstr = i18n("If you click with the mouse (e.g. in a multi-line" + " editor) and begin to move the mouse within the" + " drag start time, a drag operation will be initiated."); + QWhatsThis::add( dragStartTime, wtstr ); + + dragStartDist = new KIntNumInput(dragStartTime, 20, tab2); + dragStartDist->setLabel(i18n("Drag start distance:")); + dragStartDist->setRange(1, 20, 1); + dragStartDist->setSteps(1,1); + lay->addWidget(dragStartDist); + connect(dragStartDist, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(dragStartDist, SIGNAL(valueChanged(int)), this, SLOT(slotDragStartDistChanged(int))); + slotDragStartDistChanged(dragStartDist->value()); + + wtstr = i18n("If you click with the mouse and begin to move the" + " mouse at least the drag start distance, a drag" + " operation will be initiated."); + QWhatsThis::add( dragStartDist, wtstr); + + wheelScrollLines = new KIntNumInput(dragStartDist, 3, tab2); + wheelScrollLines->setLabel(i18n("Mouse wheel scrolls by:")); + wheelScrollLines->setRange(1, 12, 1); + wheelScrollLines->setSteps(1,1); + lay->addWidget(wheelScrollLines); + connect(wheelScrollLines, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(wheelScrollLines, SIGNAL(valueChanged(int)), SLOT(slotWheelScrollLinesChanged(int))); + slotWheelScrollLinesChanged(wheelScrollLines->value()); + + wtstr = i18n("If you use the wheel of a mouse, this value determines the number of lines to scroll for each wheel movement. Note that if this number exceeds the number of visible lines, it will be ignored and the wheel movement will be handled as a page up/down movement."); + QWhatsThis::add( wheelScrollLines, wtstr); + lay->addStretch(); + +{ + QWidget *mouse = new QWidget(this, "Mouse Navigation"); + tabwidget->addTab(mouse, i18n("Mouse Navigation")); + + + QBoxLayout *vbox = new QVBoxLayout(mouse, KDialog::marginHint(), + KDialog::spacingHint()); + + QVBoxLayout *vvbox = new QVBoxLayout(mouse->layout(), KDialog::spacingHint()); + + mouseKeys = new QCheckBox(i18n("&Move pointer with keyboard (using the num pad)"), mouse); + vvbox->addWidget(mouseKeys); + + QBoxLayout *hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + mk_delay = new KIntNumInput(mouse); + mk_delay->setLabel(i18n("&Acceleration delay:"), AlignVCenter); + mk_delay->setSuffix(i18n(" msec")); + mk_delay->setRange(1, 1000, 50); + hbox->addWidget(mk_delay); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + mk_interval = new KIntNumInput(mk_delay, 0, mouse); + mk_interval->setLabel(i18n("R&epeat interval:"), AlignVCenter); + mk_interval->setSuffix(i18n(" msec")); + mk_interval->setRange(1, 1000, 10); + hbox->addWidget(mk_interval); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + mk_time_to_max = new KIntNumInput(mk_interval, 0, mouse); + mk_time_to_max->setLabel(i18n("Acceleration &time:"), AlignVCenter); + mk_time_to_max->setRange(100, 10000, 200); + mk_time_to_max->setSuffix(i18n(" msec")); + hbox->addWidget(mk_time_to_max); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + mk_max_speed = new KIntNumInput(mk_time_to_max, 0, mouse); + mk_max_speed->setLabel(i18n("Ma&ximum speed:"), AlignVCenter); + mk_max_speed->setRange(1, 2000, 20); + mk_max_speed->setSuffix(i18n(" pixel/sec")); + hbox->addWidget(mk_max_speed); + + hbox = new QHBoxLayout(vvbox, KDialog::spacingHint()); + hbox->addSpacing(24); + mk_curve = new KIntNumInput(mk_max_speed, 0, mouse); + mk_curve->setLabel(i18n("Acceleration &profile:"), AlignVCenter); + mk_curve->setRange(-1000, 1000, 100); + hbox->addWidget(mk_curve); + + connect(mouseKeys, SIGNAL(clicked()), this, SLOT(checkAccess())); + connect(mouseKeys, SIGNAL(clicked()), this, SLOT(changed())); + connect(mk_delay, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(mk_interval, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(mk_time_to_max, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(mk_max_speed, SIGNAL(valueChanged(int)), this, SLOT(changed())); + connect(mk_curve, SIGNAL(valueChanged(int)), this, SLOT(changed())); + + vbox->addStretch(); +} + + settings = new MouseSettings; + + // This part is for handling features on Logitech USB mice. + // It only works if libusb is available. +#ifdef HAVE_LIBUSB + + struct device_table { + int idVendor; + int idProduct; + QString Model; + QString Name; + int flags; + } device_table[] = { + { VENDOR_LOGITECH, 0xC00E, "M-BJ58", "Wheel Mouse Optical", HAS_RES }, + { VENDOR_LOGITECH, 0xC00F, "M-BJ79", "MouseMan Traveler", HAS_RES }, + { VENDOR_LOGITECH, 0xC012, "M-BL63B", "MouseMan Dual Optical", HAS_RES }, + { VENDOR_LOGITECH, 0xC01B, "M-BP86", "MX310 Optical Mouse", HAS_RES }, + { VENDOR_LOGITECH, 0xC01D, "M-BS81A", "MX510 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR }, + { VENDOR_LOGITECH, 0xC024, "M-BP82", "MX300 Optical Mouse", HAS_RES }, + { VENDOR_LOGITECH, 0xC025, "M-BP81A", "MX500 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR }, + { VENDOR_LOGITECH, 0xC031, "M-UT58A", "iFeel Mouse (silver)", HAS_RES }, + { VENDOR_LOGITECH, 0xC501, "C-BA4-MSE", "Mouse Receiver", HAS_CSR }, + { VENDOR_LOGITECH, 0xC502, "C-UA3-DUAL", "Dual Receiver", HAS_CSR | USE_CH2}, + { VENDOR_LOGITECH, 0xC504, "C-BD9-DUAL", "Cordless Freedom Optical", HAS_CSR | USE_CH2 }, + { VENDOR_LOGITECH, 0xC505, "C-BG17-DUAL", "Cordless Elite Duo", HAS_SS | HAS_SSR | HAS_CSR | USE_CH2}, + { VENDOR_LOGITECH, 0xC506, "C-BF16-MSE", "MX700 Optical Mouse", HAS_SS | HAS_CSR }, + { VENDOR_LOGITECH, 0xC508, "C-BA4-MSE", "Cordless Optical TrackMan", HAS_SS | HAS_CSR }, + { VENDOR_LOGITECH, 0xC50B, "967300-0403", "Cordless MX Duo Receiver", HAS_SS|HAS_CSR }, + { VENDOR_LOGITECH, 0xC50E, "M-RAG97", "MX1000 Laser Mouse", HAS_SS | HAS_CSR }, + { VENDOR_LOGITECH, 0xC512, "M-RAK89B", "Cordless Desktop Pro LX700", HAS_CSR | USE_CH2 }, + { VENDOR_LOGITECH, 0xC702, "C-UF15", "Receiver for Cordless Presenter", HAS_CSR }, + { 0, 0, QString(), QString(), 0 } + }; + + usb_init(); + usb_find_busses(); + usb_find_devices(); + + struct usb_bus *bus; + struct usb_device *dev; + + for (bus = usb_busses; bus; bus = bus->next) { + for (dev = bus->devices; dev; dev = dev->next) { + for (int n = 0; device_table[n].idVendor; n++) + if ( (device_table[n].idVendor == dev->descriptor.idVendor) && + (device_table[n].idProduct == dev->descriptor.idProduct) ) { + // OK, we have a device that appears to be one of the ones we support + LogitechMouse *mouse = new LogitechMouse( dev, device_table[n].flags, this, device_table[n].Name.latin1() ); + settings->logitechMouseList.append(mouse); + tabwidget->addTab( (QWidget*)mouse, device_table[n].Name ); + } + } + } + +#endif + + load(); + + KAboutData* about = new KAboutData("kcmmouse", I18N_NOOP("Mouse"), 0, 0, + KAboutData::License_GPL, I18N_NOOP("(c) 1997 - 2005 Mouse developers")); + about->addAuthor("Patrick Dowler", 0, 0); + about->addAuthor("Dirk A. Mueller", 0, 0); + about->addAuthor("David Faure", 0, 0); + about->addAuthor("Bernd Gehrmann", 0, 0); + about->addAuthor("Rik Hemsley", 0, 0); + about->addAuthor("Brad Hughes", 0, 0); + about->addAuthor("Ralf Nolden", 0, 0); + about->addAuthor("Brad Hards", 0, 0); + setAboutData( about ); +} + +void MouseConfig::checkAccess() +{ + mk_delay->setEnabled(mouseKeys->isChecked()); + mk_interval->setEnabled(mouseKeys->isChecked()); + mk_time_to_max->setEnabled(mouseKeys->isChecked()); + mk_max_speed->setEnabled(mouseKeys->isChecked()); + mk_curve->setEnabled(mouseKeys->isChecked()); +} + + +MouseConfig::~MouseConfig() +{ + delete settings; +} + +double MouseConfig::getAccel() +{ + return accel->value(); +} + +void MouseConfig::setAccel(double val) +{ + accel->setValue(val); +} + +int MouseConfig::getThreshold() +{ + return thresh->value(); +} + +void MouseConfig::setThreshold(int val) +{ + thresh->setValue(val); +} + + +int MouseConfig::getHandedness() +{ + if (tab1->rightHanded->isChecked()) + return RIGHT_HANDED; + else + return LEFT_HANDED; +} + +void MouseConfig::setHandedness(int val) +{ + tab1->rightHanded->setChecked(false); + tab1->leftHanded->setChecked(false); + if (val == RIGHT_HANDED){ + tab1->rightHanded->setChecked(true); + tab1->mousePix->setPixmap(locate("data", "kcminput/pics/mouse_rh.png")); + } + else{ + tab1->leftHanded->setChecked(true); + tab1->mousePix->setPixmap(locate("data", "kcminput/pics/mouse_lh.png")); + } +} + +void MouseConfig::load() +{ + load( false ); +} + +void MouseConfig::load( bool useDefaults ) +{ + + KConfig config( "kcminputrc", true ); + + config.setReadDefaults( useDefaults ); + + settings->load(&config); + + tab1->rightHanded->setEnabled(settings->handedEnabled); + tab1->leftHanded->setEnabled(settings->handedEnabled); + if ( tab1->cbScrollPolarity->isEnabled() ) + tab1->cbScrollPolarity->setEnabled(settings->handedEnabled); + tab1->cbScrollPolarity->setChecked( settings->reverseScrollPolarity ); + + setAccel(settings->accelRate); + setThreshold(settings->thresholdMove); + setHandedness(settings->handed); + + doubleClickInterval->setValue(settings->doubleClickInterval); + dragStartTime->setValue(settings->dragStartTime); + dragStartDist->setValue(settings->dragStartDist); + wheelScrollLines->setValue(settings->wheelScrollLines); + + tab1->singleClick->setChecked( settings->singleClick ); + tab1->doubleClick->setChecked(!settings->singleClick); + tab1->cb_pointershape->setChecked(settings->changeCursor); + tab1->cbAutoSelect->setChecked( settings->autoSelectDelay >= 0 ); + if ( settings->autoSelectDelay < 0 ) + tab1->slAutoSelect->setValue( 0 ); + else + tab1->slAutoSelect->setValue( settings->autoSelectDelay ); + tab1->cbVisualActivate->setChecked( settings->visualActivate ); + slotClick(); + + + KConfig ac("kaccessrc", true); + + ac.setGroup("Mouse"); + mouseKeys->setChecked(ac.readBoolEntry("MouseKeys", false)); + mk_delay->setValue(ac.readNumEntry("MKDelay", 160)); + + int interval = ac.readNumEntry("MKInterval", 5); + mk_interval->setValue(interval); + + // Default time to reach maximum speed: 5000 msec + int time_to_max = ac.readNumEntry("MKTimeToMax", + (5000+interval/2)/interval); + time_to_max = ac.readNumEntry("MK-TimeToMax", + time_to_max*interval); + mk_time_to_max->setValue(time_to_max); + + // Default maximum speed: 1000 pixels/sec + // (The old default maximum speed from KDE <= 3.4 + // (100000 pixels/sec) was way too fast) + long max_speed = ac.readNumEntry("MKMaxSpeed", interval); + max_speed = max_speed * 1000 / interval; + if (max_speed > 2000) + max_speed = 2000; + max_speed = ac.readNumEntry("MK-MaxSpeed", max_speed); + mk_max_speed->setValue(max_speed); + + mk_curve->setValue(ac.readNumEntry("MKCurve", 0)); + + themetab->load(); + + checkAccess(); + changed( useDefaults ); +} + +void MouseConfig::save() +{ + settings->accelRate = getAccel(); + settings->thresholdMove = getThreshold(); + settings->handed = getHandedness(); + + settings->doubleClickInterval = doubleClickInterval->value(); + settings->dragStartTime = dragStartTime->value(); + settings->dragStartDist = dragStartDist->value(); + settings->wheelScrollLines = wheelScrollLines->value(); + settings->singleClick = !tab1->doubleClick->isChecked(); + settings->autoSelectDelay = tab1->cbAutoSelect->isChecked()? tab1->slAutoSelect->value():-1; + settings->visualActivate = tab1->cbVisualActivate->isChecked(); +// settings->changeCursor = tab1->singleClick->isChecked(); + settings->changeCursor = tab1->cb_pointershape->isChecked(); + settings->reverseScrollPolarity = tab1->cbScrollPolarity->isChecked(); + + settings->apply(); + KConfig config( "kcminputrc" ); + settings->save(&config); + + KConfig ac("kaccessrc", false); + + ac.setGroup("Mouse"); + + int interval = mk_interval->value(); + ac.writeEntry("MouseKeys", mouseKeys->isChecked()); + ac.writeEntry("MKDelay", mk_delay->value()); + ac.writeEntry("MKInterval", interval); + ac.writeEntry("MK-TimeToMax", mk_time_to_max->value()); + ac.writeEntry("MKTimeToMax", + (mk_time_to_max->value() + interval/2)/interval); + ac.writeEntry("MK-MaxSpeed", mk_max_speed->value()); + ac.writeEntry("MKMaxSpeed", + (mk_max_speed->value()*interval + 500)/1000); + ac.writeEntry("MKCurve", mk_curve->value()); + ac.sync(); + + themetab->save(); + + // restart kaccess + kapp->startServiceByDesktopName("kaccess"); + + KCModule::changed(false); + +} + +void MouseConfig::defaults() +{ + load( true ); +} + +void MouseConfig::slotClick() +{ + // Autoselect has a meaning only in single-click mode + tab1->cbAutoSelect->setEnabled(!tab1->doubleClick->isChecked() || tab1->singleClick->isChecked()); + // Delay has a meaning only for autoselect + bool bDelay = tab1->cbAutoSelect->isChecked() && ! tab1->doubleClick->isChecked(); + tab1->slAutoSelect->setEnabled( bDelay ); + tab1->lDelay->setEnabled( bDelay ); + tab1->lb_short->setEnabled( bDelay ); + tab1->lb_long->setEnabled( bDelay ); + +} + +/** No descriptions */ +void MouseConfig::slotHandedChanged(int val){ + if(val==RIGHT_HANDED) + tab1->mousePix->setPixmap(locate("data", "kcminput/pics/mouse_rh.png")); + else + tab1->mousePix->setPixmap(locate("data", "kcminput/pics/mouse_lh.png")); + settings->m_handedNeedsApply = true; +} + +void MouseSettings::load(KConfig *config) +{ + int accel_num, accel_den, threshold; + double accel; + XGetPointerControl( kapp->getDisplay(), + &accel_num, &accel_den, &threshold ); + accel = float(accel_num) / float(accel_den); + + // get settings from X server + int h = RIGHT_HANDED; + unsigned char map[20]; + num_buttons = XGetPointerMapping(kapp->getDisplay(), map, 20); + + handedEnabled = true; + + // ## keep this in sync with KGlobalSettings::mouseSettings + if( num_buttons == 1 ) + { + /* disable button remapping */ + handedEnabled = false; + } + else if( num_buttons == 2 ) + { + if ( (int)map[0] == 1 && (int)map[1] == 2 ) + h = RIGHT_HANDED; + else if ( (int)map[0] == 2 && (int)map[1] == 1 ) + h = LEFT_HANDED; + else + /* custom button setup: disable button remapping */ + handedEnabled = false; + } + else + { + middle_button = (int)map[1]; + if ( (int)map[0] == 1 && (int)map[2] == 3 ) + h = RIGHT_HANDED; + else if ( (int)map[0] == 3 && (int)map[2] == 1 ) + h = LEFT_HANDED; + else + { + /* custom button setup: disable button remapping */ + handedEnabled = false; + } + } + + config->setGroup("Mouse"); + double a = config->readDoubleNumEntry("Acceleration",-1); + if (a == -1) + accelRate = accel; + else + accelRate = a; + + int t = config->readNumEntry("Threshold",-1); + if (t == -1) + thresholdMove = threshold; + else + thresholdMove = t; + + QString key = config->readEntry("MouseButtonMapping"); + if (key == "RightHanded") + handed = RIGHT_HANDED; + else if (key == "LeftHanded") + handed = LEFT_HANDED; + else if (key == NULL) + handed = h; + reverseScrollPolarity = config->readBoolEntry( "ReverseScrollPolarity", false ); + m_handedNeedsApply = false; + + // SC/DC/AutoSelect/ChangeCursor + config->setGroup("KDE"); + doubleClickInterval = config->readNumEntry("DoubleClickInterval", 400); + dragStartTime = config->readNumEntry("StartDragTime", 500); + dragStartDist = config->readNumEntry("StartDragDist", 4); + wheelScrollLines = config->readNumEntry("WheelScrollLines", 3); + + singleClick = config->readBoolEntry("SingleClick", KDE_DEFAULT_SINGLECLICK); + autoSelectDelay = config->readNumEntry("AutoSelectDelay", KDE_DEFAULT_AUTOSELECTDELAY); + visualActivate = config->readBoolEntry("VisualActivate", KDE_DEFAULT_VISUAL_ACTIVATE); + changeCursor = config->readBoolEntry("ChangeCursor", KDE_DEFAULT_CHANGECURSOR); +} + +void MouseConfig::slotThreshChanged(int value) +{ + thresh->setSuffix(i18n(" pixel", " pixels", value)); +} + +void MouseConfig::slotDragStartDistChanged(int value) +{ + dragStartDist->setSuffix(i18n(" pixel", " pixels", value)); +} + +void MouseConfig::slotWheelScrollLinesChanged(int value) +{ + wheelScrollLines->setSuffix(i18n(" line", " lines", value)); +} + +void MouseSettings::apply(bool force) +{ + XChangePointerControl( kapp->getDisplay(), + true, true, int(qRound(accelRate*10)), 10, thresholdMove); + + // 256 might seems extreme, but X has already been known to return 32, + // and we don't want to truncate things. Xlib limits the table to 256 bytes, + // so it's a good uper bound.. + unsigned char map[256]; + num_buttons = XGetPointerMapping(kapp->getDisplay(), map, 256); + + int remap=(num_buttons>=1); + if (handedEnabled && (m_handedNeedsApply || force)) { + if( num_buttons == 1 ) + { + map[0] = (unsigned char) 1; + } + else if( num_buttons == 2 ) + { + if (handed == RIGHT_HANDED) + { + map[0] = (unsigned char) 1; + map[1] = (unsigned char) 3; + } + else + { + map[0] = (unsigned char) 3; + map[1] = (unsigned char) 1; + } + } + else // 3 buttons and more + { + if (handed == RIGHT_HANDED) + { + map[0] = (unsigned char) 1; + map[1] = (unsigned char) middle_button; + map[2] = (unsigned char) 3; + } + else + { + map[0] = (unsigned char) 3; + map[1] = (unsigned char) middle_button; + map[2] = (unsigned char) 1; + } + if( num_buttons >= 5 ) + { + // Apps seem to expect logical buttons 4,5 are the vertical wheel. + // With mice with more than 3 buttons (not including wheel) the physical + // buttons mapped to logical 4,5 may not be physical 4,5 , so keep + // this mapping, only possibly reversing them. + int pos; + for( pos = 0; pos < num_buttons; ++pos ) + if( map[pos] == 4 || map[pos] == 5 ) + break; + if( pos < num_buttons - 1 ) + { + map[pos] = reverseScrollPolarity ? (unsigned char) 5 : (unsigned char) 4; + map[pos+1] = reverseScrollPolarity ? (unsigned char) 4 : (unsigned char) 5; + } + } + } + int retval; + if (remap) + while ((retval=XSetPointerMapping(kapp->getDisplay(), map, + num_buttons)) == MappingBusy) + /* keep trying until the pointer is free */ + { }; + m_handedNeedsApply = false; + } + + // This iterates through the various Logitech mice, if we have support. + #ifdef HAVE_LIBUSB + LogitechMouse *logitechMouse; + for (logitechMouse = logitechMouseList.first(); logitechMouse; logitechMouse = logitechMouseList.next() ) { + logitechMouse->applyChanges(); + } + #endif +} + +void MouseSettings::save(KConfig *config) +{ + config->setGroup("Mouse"); + config->writeEntry("Acceleration",accelRate); + config->writeEntry("Threshold",thresholdMove); + if (handed == RIGHT_HANDED) + config->writeEntry("MouseButtonMapping",QString("RightHanded")); + else + config->writeEntry("MouseButtonMapping",QString("LeftHanded")); + config->writeEntry( "ReverseScrollPolarity", reverseScrollPolarity ); + + config->setGroup("KDE"); + config->writeEntry("DoubleClickInterval", doubleClickInterval, true, true); + config->writeEntry("StartDragTime", dragStartTime, true, true); + config->writeEntry("StartDragDist", dragStartDist, true, true); + config->writeEntry("WheelScrollLines", wheelScrollLines, true, true); + config->writeEntry("SingleClick", singleClick, true, true); + config->writeEntry("AutoSelectDelay", autoSelectDelay, true, true ); + config->writeEntry("VisualActivate", visualActivate, true, true); + config->writeEntry("ChangeCursor", changeCursor, true, true); + // This iterates through the various Logitech mice, if we have support. +#ifdef HAVE_LIBUSB + LogitechMouse *logitechMouse; + for (logitechMouse = logitechMouseList.first(); logitechMouse; logitechMouse = logitechMouseList.next() ) { + logitechMouse->save(config); + } +#endif + config->sync(); + KIPC::sendMessageAll(KIPC::SettingsChanged, KApplication::SETTINGS_MOUSE); +} + +void MouseConfig::slotScrollPolarityChanged() +{ + settings->m_handedNeedsApply = true; +} + +#include "mouse.moc" diff --git a/kcontrol/input/mouse.desktop b/kcontrol/input/mouse.desktop new file mode 100644 index 000000000..fe0f30281 --- /dev/null +++ b/kcontrol/input/mouse.desktop @@ -0,0 +1,242 @@ +[Desktop Entry] +Exec=kcmshell mouse +Icon=mouse +Type=Application +DocPath=kcontrol/mouse/index.html + + +X-KDE-Library=input +X-KDE-FactoryName=mouse +X-KDE-Init=mouse +X-KDE-ParentApp=kcontrol + +Name=Mouse +Name[af]=Muis +Name[ar]=الفأرة +Name[az]=Siçan +Name[be]=Мыш +Name[bg]=Мишка +Name[bn]=মাউস +Name[br]=Logodenn +Name[bs]=Miš +Name[ca]=Ratolí +Name[cs]=Myš +Name[csb]=Mësz +Name[cy]=Llygoden +Name[da]=Mus +Name[de]=Maus +Name[el]=Ποντίκι +Name[eo]=Muso +Name[es]=Ratón +Name[et]=Hiir +Name[eu]=Sagua +Name[fa]=موشی +Name[fi]=Hiiri +Name[fr]=Souris +Name[fy]=Mûs +Name[ga]=Luch +Name[gl]=Rato +Name[he]=עכבר +Name[hi]=माउस +Name[hr]=Miš +Name[hu]=Egér +Name[is]=Mús +Name[ja]=マウス +Name[ka]=თაგვი +Name[kk]=Тышқан +Name[km]=កណ្ដុរ +Name[ko]=마우스 +Name[lo]=ເມົາສ໌ +Name[lt]=Pelė +Name[lv]=Pele +Name[mk]=Глушец +Name[mn]=Хулгана +Name[ms]=Tetikus +Name[mt]=Maws +Name[nb]=Mus +Name[nds]=Muus +Name[ne]=माउस +Name[nl]=Muis +Name[nn]=Mus +Name[nso]=Legotlo +Name[oc]=Ratolí +Name[pa]=ਮਾਊਸ +Name[pl]=Mysz +Name[pt]=Rato +Name[ru]=Мышь +Name[rw]=Imbeba +Name[se]=Sáhpán +Name[sk]=Myš +Name[sl]=Miška +Name[sr]=Миш +Name[sr@Latn]=Miš +Name[ss]=Ligundvwane +Name[sv]=Mus +Name[ta]=சுட்டி +Name[te]=మౌస్ +Name[tg]=Муш +Name[th]=เม้าส์ +Name[tr]=Fare +Name[tt]=Küse +Name[uk]=Мишка +Name[uz]=Sichqoncha +Name[uz@cyrillic]=Сичқонча +Name[ven]=Mausu +Name[vi]=Chuột +Name[wa]=Sori +Name[zh_CN]=鼠标 +Name[zh_TW]=滑鼠 +Name[zu]=i-Mouse + +Comment=Mouse settings +Comment[af]=Muis instellings +Comment[ar]=اعدادات الفأرة +Comment[az]=Siçan qurğuları +Comment[be]=Настаўленні мышы +Comment[bg]=Настройване на мишката +Comment[bn]=মাউস সেটিংস +Comment[br]=Kefluniañ al logodenn +Comment[bs]=Podešavanje miša +Comment[ca]=Arranjament del ratolí +Comment[cs]=Nastavení myši +Comment[csb]=Nastôw mëszë +Comment[cy]=Gosodiadau Llygoden +Comment[da]=Opsætning af mus +Comment[de]=Einstellung der Maus +Comment[el]=Ρυθμίσεις Ποντικιού +Comment[eo]=Agordo de la muso +Comment[es]=Preferencias sobre el ratón +Comment[et]=Hiire seadistused +Comment[eu]=Saguaren konfigurazioa +Comment[fa]=تنظیمات موشی +Comment[fi]=Hiiriasetukset +Comment[fr]=Configuration de la souris +Comment[fy]=Mûsynstellings +Comment[ga]=Socruithe luiche +Comment[gl]=Configuración do rato +Comment[he]=שינוי הגדרות העכבר +Comment[hi]=माउस विन्यास +Comment[hr]=Postavke miša +Comment[hu]=Az egér beállításai +Comment[id]=Seting Mouse +Comment[is]=Stillingar músar +Comment[it]=Impostazione del mouse +Comment[ja]=マウスの設定 +Comment[ka]=თაგვის კონფიგურაცია +Comment[kk]=Тышқан баптаулары +Comment[km]=ការ​កំណត់​កណ្ដុរ +Comment[ko]=마우스 설정 +Comment[lo]=ຂໍ້ມູນຄວາມສະແດງຕົວເຄື່ອງມືຂອງຜູ້ໃຊ້ +Comment[lt]=Pelės parametrai +Comment[lv]=Peles parametri +Comment[mk]=Поставувања на глушецот +Comment[mn]=Хулгана тохируулга +Comment[ms]=Seting tetikus +Comment[mt]=Konfigurazzjoni tal-Maws +Comment[nb]=Musinnstillinger +Comment[nds]=Muus instellen +Comment[ne]=माउस सेटिङ +Comment[nl]=Muisinstellingen +Comment[nn]=Musinnstillingar +Comment[nso]=Dipeakanyo tsa Legotlo +Comment[oc]=Arranjament dèu ratolí +Comment[pa]=ਮਾਊਸ ਸੈਟਿੰਗ +Comment[pl]=Ustawienia myszy +Comment[pt]=Configuração do rato +Comment[pt_BR]=Configurações do mouse +Comment[ro]=Configurează mouse-ul +Comment[ru]=Настройка мыши +Comment[rw]=Amagenamiterere y'Imbeba +Comment[se]=Sáhpánheivehusat +Comment[sk]=Nastavenie myši +Comment[sl]=Nastavitve miške +Comment[sr]=Поставке миша +Comment[sr@Latn]=Postavke miša +Comment[ss]=Kuhlelwka kweligundvwane +Comment[sv]=Anpassa mus +Comment[ta]=சுட்டி அமைப்புகள் +Comment[te]=మౌస్ అమరికలు +Comment[tg]=Танзимоти муш +Comment[th]=ตั้งค่าเม้าส์ +Comment[tr]=Fare ayarları +Comment[tt]=Küse Caylaw +Comment[uk]=Налаштування миші +Comment[uz]=Sichqonchaning moslamalari +Comment[uz@cyrillic]=Сичқончанинг мосламалари +Comment[ven]=Mavhekanyele a Mausu +Comment[vi]=Thiết lập chuột +Comment[wa]=Apontiaedjes del sori +Comment[xh]=Izicwangciso ze mouse +Comment[zh_CN]=鼠标设置 +Comment[zh_TW]=滑鼠設定 +Comment[zu]=Izilungiselelo ze-Mouse + +Keywords=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed +Keywords[af]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handig,left handig +Keywords[ar]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,الفأرة,تسارع الفأرة,الحد الأقضى للفأرة,فأرة,.أزرار الفأرة, اختيار,مؤشر,الاختيار,المؤشر,أجهزة الادخال,.خريطة الأزرار,نقر,أبقونات,ارجاع,مؤشرات,سحب, نقر مزدوج,خريطة,أيمن,أعسر +Keywords[az]=siçan,Siçan Sür'ətləndirmə,Siçan sərhədi,Siçan Düymələri,Seçim,ox şəkli,giriş avadanlıqları,Düymə Xəritəsi,Tıqlama,timsallar,əks təs'ir,İşarətçilər,Daşı,Cüt Tıqla,xəritələmə,sağ əlli,sol əlli +Keywords[be]=Мыш,Паскарэнне мышы,Кнопкі мышы,Вылучэнне,Форма курсора,Прылады ўводу,Прызначэнне кнопак,Дзеянне кнопак,Націск,значкі,Указальнік,Курсор,Перацягваць,Двайны націск,для левай рукі,для правай рукі,Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed +Keywords[bg]=настройки, мишка, посочващо, устройство, Mouse, Mouse acceleration, Mouse threshold, Mouse buttons, Selection, Cursor Shape, Input Devices, Button Mapping, Click, icons, feedback, Pointers, Drag, DoubleClick, mapping, right handed, left handed +Keywords[ca]=Ratolí,acceleració del ratolí,llindar del ratolí,botons del ratolí,selecció,forma del cursor,dispositius d'entrada,mapejat de botons,clic,icones,realimentació,apuntadors,arrossegar,clic doble,mapejat,dretà,esquerrà +Keywords[cs]=Myš,Akcelerace myši,Práh myši,Tlačítka myši,Výběr,Tvar kurzoru,Vstupní zařízení,Mapování tlačítek,Kurzor,Kliknutí,Odezva,Dvojité kliknutí,Pravák,Levák +Keywords[csb]=Mësz,przërëchlënié mëszë,Próg mëszë,Knąpë mëszë,Zaznaczenié,Sztôłt kùrsora,Ùrządzenia wéńdzeniô,mapòwanié knąpów,klëkniãce,ikònë,widzałé efektë,wskôzywôczë,przecyganié,podwójné klëkniãce,mapòwanié,prawòrãczny,lewòrãczny +Keywords[cy]=Llygoden,Cyflymu Llygoden,Trothwy Llygoden,Botymau Llygoden,Dewis,Si?p Cyrchydd,Dyfeisiau Mewnbwn,Mapio Botymau, Clic,eiconau,adborth,Pwyntyddion,Llusgo,Clic Dwbl,mapio,llaw dde,llaw chwith +Keywords[da]=Mus,Museacceleration,Musegrænse,Museknapper,Markering,Markørform,Inddataenheder,Knap-mapping,Klik,ikoner,feedback,Pegere, Træk,Dobbeltklik,mapping,højrehåndet,venstrehåndet +Keywords[de]=Maus,Mausbeschleunigung,Mausschwellenwert,Maustasten,Auswahl,Cursor,Cursorform,Eingabegeräte,Knöpfe,Buttons,Zuordnungen,Klicks,Zeigegeräte,Doppelklick,Rechtshänder,Linkshänder +Keywords[el]=Ποντίκι,Επιτάχυνση δρομέα,Κατώφλι ποντικιού,Πλήκτρα ποντικιού,Επιλογή,Σχήμα Δρομέα,Συσκευές Εισόδου,Χαρτογράφηση πλήκτρων,Κλικ,εικονίδια,ανάδραση,Δείκτες,Σύρσιμο,Διπλό κλικ,αντιστοίχηση,δεξιόχειρας,αριστερόχειρας +Keywords[eo]=muso,akcelado,butonoj,elekto,montrilo,kursoro,enigo,aparatoj,butonsignifo,klako,piktogramoj,reago,montriloj,ŝovado,trenado,duklako,dekstrmanulo,maldekstramanulo +Keywords[es]=Ratón,Aceleración del ratón,Umbral del ratón,Botones del ratón,Selección,Forma del cursor,Dispositivos de entrada,Asignaciones de botones,Pulsación,iconos,notificación,Punteros,Arrastrar,Doble pulsación,asignaciones,diestro,zurdo +Keywords[et]=hiir,hiire kiirendus,hiire lävi,hiire nupud,valimine,kursori kuju,sisendseadmed,nuppude asetus,klikk,klõps,ikoonid,tagasiside,kursorid,lohistamine,topeltklikk,topeltklõps,asetus,paremakäeline,vasakukäeline +Keywords[eu]=Sagua,Saguaren azelerazioa,Saguaren atalasea,Saguarenbotoiak,Hautespena,Kurtsorearen itxura,Sarrera dispositiboak,Botoien esleipena,Klika,ikonoak,atzeraelikadura,Geziak,Arrastatu,Klik bikoitza,esleipenak, eskuinak,ezkertiak +Keywords[fa]=موشی، شتاب‌دهی موشی، آستانۀ موشی، دکمه‌های موشی، گزینش، شکل مکان‌نما، دستگاههای ورودی، نگاشت دکمه، فشار دادن، شمایلها، بازخورد، اشاره‌گرها، کشیدن، دو بار فشار دادن، نگاشت، راست‌دست، چپ‌دست +Keywords[fi]=Hiiri,Hiiren kiihdytys,Hiiren raja-arvo,Hiiren painikkeet,Valinta,Osoittimen muoto,Syöttölaitteet,Painikkeiden järjestys,Napsautus,kuvakkeet,palaute,Osoittimet,Vedä,Tuplanapsautus,järjestys,oikeakätinen,vasenkätinen +Keywords[fr]=souris,accélération de la souris,seuil de la souris,boutons de la souris,sélection,forme du curseur,périphériques d'entrée,curseur,clic,icônes,gaucher,droitier,double clic,simple clic,clic gauche,clic droit +Keywords[fy]=Mûs,Mûs fluggens,Mûsknoppen,seleksje,rinnerke-úterlik,ynfier devices,ynfierapparaten,knopyndieling,klikken,Ikoanen,icons,Oanwizers,pointers,drag,slepe,dûbelklikken,loftshandich,rjochtshandich.râneapparaten +Keywords[gl]=Rato,Aceleración do rato,Umbral do rato,botóns do rato,Selección,Forma do Cursores,Dispositivos de Entrada,Mapa do botón,Clic,iconas,indicador,Ponteiros,Arrastar,DobreClic,mapear,dereiteiro,esquerdeiro +Keywords[he]=עכבר,תאוצת עכבר,סף עכבר,לחצני עכבר,בחירה,צורת מצביע,התקני קלט,לחיצה,סמלים,תגובה,מצביעים,גרירה,לחיצה כפולה,תצורה,ימני,שמאלי,תצורת לחצנים, Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed +Keywords[hi]=माउस,माउस त्वरण,माउस दहलीज,माउस बटन,चयन,संकेतक आकार,इनपुट औज़ार,बटन मैपिंग,क्लिक,प्रतीक,फ़ीडबैक,प्वाइंटर्स,खींचें,डबल-क्लिक,मैपिंग,दाहिने हाथ वाला, खब्बू(बाएँ हाथ वाला) +Keywords[hr]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,Miš,Ubrzavanje miša,Prag miša,Tipke miša,Odabir,Oblik pokazivača,Ulazni uređaji,Mapiranje tipki,Klikanje,ikone,povratni podaci,Pokazivači,Prevlačenje,Dvostruki klik,mapiranje,desnoruk,ljevoruk +Keywords[hu]=egér,egérgyorsítás,egérérzékenység,egérgombok,kiválasztás,kurzoralak,beviteli eszközök,gombhozzárendelés,kattintás,ikonok,visszajelzés,mutatók,húzás,dupla kattintás,hozzárendelés,jobbkezes,balkezes +Keywords[id]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input DevicesButton Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed +Keywords[is]=Næmni músar,bendill,inntakstæki,hröðun,örvhentur,rétthentur,smella,tákn,bendill,tvísmella +Keywords[it]=mouse,accelerazione del mouse,soglia del mouse,tasti del mouse,selezione,forma del cursore,dispositivi di input,mappatura dei tasti,clic,icone,puntatori,trascinamento,doppio clic,mouse per mancini,mancini +Keywords[ja]=マウス,マウスの加速,マウスのしきい,マウスボタン,選択,カーソルの形,入力デバイス,入力デバイス,ボタンの割り当て,クリック,アイコン,フィードバック,ポインタ,ドラッグ,ダブルクリック,割り当て,右利き,左利き +Keywords[km]=កណ្ដុរ,ការ​បង្កើន​ល្បឿង​កណ្ដុរ,កម្រិត​ពន្លឺ​កណ្ដុរ,ប៊ូតុង​កណ្ដុរ,ការ​ជ្រើស,រាង​ទស្សន៍​ទ្រនិច,ឧបករណ៍​បញ្ចូល,ប្លង់​ប៊ូតុង,ចុច,រូបតំណាង,មតិ​រិះគន់,ទ្រនិច,អូស,ចុច​ទ្វេដង,ធ្វើ​ប្លង់,ដៃ​ស្ដាំ,ដៃ​ឆ្វេង +Keywords[lo]=ເມົາສ໌,ການເພີ້ມຄວາມໄວຂອງເມົາສ໌,ໄລຍະຕົວຊີ້ຂອງເມົາສ໌, ປຸ່ມເມົາສ໌,ການເລືອກ,ຮູບຮ່າງເຄີເຊີ,ອຸປະກອນນຳເຂົ້າ,ການຈັບຄູ່ປຸ່ມ,ຄລິກ,ໄອຄອນ,ຕົວຊີ້,ລາກ,ດັບເບີ້ນຄລິກ,ການແມບປຸ່ມ,ໃຊ້ມືຊ້າຍ, ໃຊ້ມືຂວາ +Keywords[lt]=Mouse,pelė,Mouse acceleration,pelės pagreitinimas,Mouse threshold,Mouse buttons,pelės mygtukai,Selection,pažymėjimas,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,right handed,left handed,kairiarankė +Keywords[lv]=Pele,Peles paātrinājums,Peles slieksnis,Peles taustiņi,Izvēle,Kursora Forma,Ievades Iekārtas,Pogu Sasaiste,Klikšķis,ikonas,atpakaļsaite,Rādītāji,Vilkt,Dubultklikšķis,sasaiste,labās rokas,kreisās rokas +Keywords[mk]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,Глушец,Забрзување на глушец,Граница на глушец,Копчиња на глушец,Селекција,Избор,Форма на курсор,Влезни уреди,Мапирање на копче,Клик,икони,Покажувачи,Влечи,Двоен клик,мапирање,деснорак,леворак +Keywords[mn]=Хулгана,Хулгана-хурдасгуур, Хулгана-хязгаар,Хулгана товшуур,Сонголт, Түүчээ,Түүчээний хэлбэр,Оролтын төхөөрөмж,Товч,Товшилуур,Холбоос,Товшилт, Зурах төхөөрөмж,Давхар товшилт,Баруун гарын, Зүүн гарын +Keywords[mt]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,Maws,lemini,xellugi +Keywords[nb]=Mus,musehastighet,museknapper,valg,merking,kursoregenskaper,pekeregenskaper,innenheter,inn-enheter,knappetilordning,trykk,klikk,pekere,dra,dobbeltklikk, høyrehendt,venstrehendt +Keywords[nds]=Muus,Muus-Gauheit,Muus-Grenzweert,Muusknööp,Utwahl,Knooptoornen, Wieserform,Ingaavreedschappen,Klicken,Lüttbiller,Torüchmellen,Wieser,Dregen,Dubbelklick,Toornen,Rechtpoot,Linkpoot +Keywords[ne]=माउस, माउस गतिवर्धन, माउस थ्रेसहोल्ड, माउस बटनहरू, चयन, कर्सर आकार, आगत यन्त्रहरू, बटन मिलाउने, क्लिक, प्रतिमा, पृष्ठपोषण, सूचक, तान्नुहोस्, डबल क्लिक गर्नुहोस्, मिलाउनुहोस्, दायाँ, बायाँ +Keywords[nl]=muis,muissnelheid,muisknoppen,selectie,cursor-uiterlijk,input devices,invoerapparaten,knopindeling,klikken,iconen,pictogrammen,icons,aanwijzers,pointers,drag,verslepen,dubbelklikken,linkshandig,rechtshandig.randapparaten +Keywords[nn]=mus,musakselerasjon,musterskel,musknappar,val,peikar,peikarform,inneiningar,knappar,klikk,ikon,tilbakemelding,dra,dobbeltklikk,høgrehendt,venstrehendt +Keywords[nso]=Legotlo,Koketso ya legotlo,Threshold ya legotlo,Ditobetswa tsa legotlo, Kgetho,Sebopego sa Cursor,Maano a Tsenyo,Mapping Setobetswa,Tobetsa, diemedi,phetolo,Disupi,Topa,Tobetsopedi,mapping,swerwe ka lagoja,swerwe ka lanngele +Keywords[pa]=ਮਾਊਸ,ਮਾਊਸ ਪ੍ਰਵੇਸ਼,ਮਾਊਸ threshold,ਮਾਊਸ buttons,Selection,CursorShape,Input ਜੰਤਰ,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,righthanded,left handed,ਕਲਿੱਕ,ਆਈਕਾਨ +Keywords[pl]=Mysz,Akceleracja myszy,Próg myszy,Przyciski myszy,Zaznaczenie,Kształt kursora,Urządzenia wejściowe,mapowanie przycisków,kliknięcie,ikony,widoczne efekty,wskaźniki,przeciąganie,podwójne kliknięcie,mapowanie,praworęczny,leworęczny +Keywords[pt]=rato,aceleração do rato,limite do rato,botões do rato,selecção,forma do cursor,dispositivos de entrada,atribuição de botões,click,ícones,feedback,cursores,arrastar,duplo 'click',atribuição,destro,esquerdino +Keywords[pt_BR]=Mouse,aceleração do mouse,limiar do mouse, botões do mouse,Seleção,Formato do Cursor,Dispositivos de entrada,mapeamento de botões,clique,ícones,retorno,ponteiros,arrastar,clique duplo,mapeamento,destro,canhoto +Keywords[ro]=mouse,accelerație mouse,prag mouse,butoane mouse,selecție,formă cursor,dispozitive de intrare,mapare butoane,clicuri,iconițe,răspuns,pointeri,indicatori,tragere,dublu clic,dreptaci,stîngaci,drag-and-drop +Keywords[rw]=Imbeba,Ukwihutisha imbeba,Intambwe y'imbeba,Buto z'imbeba, Ihitamo,Imisusire y'inyoborayandika,Apareye z'Icyinjira,Guhuza buto,Gukanda,udushushondanga,inkurikizi,Mweretsi,Gukurura,GukandaKabiri,guhuza,kiganza iburyo, kiganza ibumoso. +Keywords[se]=sáhpán,sáhpánaksellerašuvdna,sáhpánšielbma,sáhpánboalut, merken, njoallahápmi,sisaovttadagat,boalut,coahkkalit,govažat,feedback,geassit, duppalcoahkkaleapmi,olgešgiehtat,gurutgiehtat +Keywords[sk]=Myš,rýchlosť myši,tlačidlá myši,Označenie,kurzor,Vstupné zariadenia,výber,tvar kurzoru,mapovanie tlačidiel,klik,kliknutie,ikony,ťahanie,dvojité kliknutie,dvojklik,mapovanie,praváci,ľaváci +Keywords[sl]=miška,pospešitev miške,gumbi miške,izbira,oblika kazalca,vhodne enote,preslikava gumbov,klik,ikone,povratna informacija,kazalci,potegni,dvojni klik,preslikava,levičarji,desničarji +Keywords[sr]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,миш,убрзавање миша,означавање,избор,облик показивача,показивач,мапирање дугмади,клик,иконе,показивачи,превуци,двоклик,мапирање,леворуки,десноруки +Keywords[sr@Latn]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,miš,ubrzavanje miša,označavanje,izbor,oblik pokazivača,pokazivač,mapiranje dugmadi,klik,ikone,pokazivači,prevuci,dvoklik,mapiranje,levoruki,desnoruki +Keywords[sv]=Mus,Musacceleration,Muströskel,Musknappar,Val,Markörutseende,Inmatningsenheter,Knapptolkning,klickning,ikoner,respons,Pekare,Drag,Dubbelklick,Tolkning,högerhänt,vänsterhänt +Keywords[ta]=சுட்டி, முடுக்கப்பட்ட சுட்டி , சுட்டி பட்டன், தேர்வுகள், காட்டியின் வடிவம், உள்ளிடும் சாதனம், பட்டன் பொருத்தல், க்ளிக், சின்னம், கருத்து , காட்டிகள், இழு, இரண்டுமுறை க்ளிக், பொருத்து,வலதுகை பழக்கம், இடது கை பழக்கம். +Keywords[th]=เม้าส์,การเร่งความเร็วของเม้าส์,ระยะตัวชี้ของเม้าส์,ปุ่มเม้าส์,การเลือก,รูปร่างเคอร์เซอร์,อุปกรณ์นำเข้า,การจับคู่ปุ่ม,คลิ้ก,ไอคอน,ตัวชี้,ลาก,ดับเบิลคลิ้ก,การแมพปุ่ม,ใช้มือซ้าย,ใช้มือขวา +Keywords[tr]=fare,Fare Hızlandırma,Fare eşiği,Fare Tuşları,Seçim,imleç şekli,girdi aygıtları,Tuş Haritası,Tıklama,simgeler,geri besleme,İşaretçiler,Taşı,Çift Tıkla,haritalama,sağ elli,sol elli +Keywords[uk]=Миша,Mouse,прискорення миші,поріг миші,кнопки миші,вибір,форма курсора,вхідні пристрої,відповідність клавіш,клацання,піктограми,зворотній зв'язок,вказівники,перетягнути,подвійне клацання,відображення,лівша,правша +Keywords[uz]=Sichqoncha,Sichqonchani tezlashtirish,Mouse threshold,Sichqonchaning tugmalari,Tanlash,Kursorning shakillari,Kiritish uskunasi,Tugmani aniqlash,Bosish,nishonchalar,feedback,Koʻrsatgichlar,Drag,Ikki marta bosish,mapping,chap qoʻl,oʻng qoʻl +Keywords[uz@cyrillic]=Сичқонча,Сичқончани тезлаштириш,Mouse threshold,Сичқончанинг тугмалари,Танлаш,Курсорнинг шакиллари,Киритиш ускунаси,Тугмани аниқлаш,Босиш,нишончалар,feedback,Кўрсатгичлар,Drag,Икки марта босиш,mapping,чап қўл,ўнг қўл +Keywords[ven]=Mausu,U gonyisa mausu,mausu,bathene ya mausu,nanga,tshivhumbeo tsha Cursor,maano a InputSedzulusa bathene,u putedza,aikhonoPhindulo,vhasumbedzi,kokodza,uputedza luvhili,utalulusa,tshaula,tshamonde +Keywords[vi]=Chuột,Gia tốc chuột,Giới hạn chuột,Nút chuột,Chọn,Kiểu dáng Con trỏ,Thiết bị Nhập,Ánh xạ Nút,Nhấn,biểu tượng,phản hồi,Con trỏ,Kéo,Nhấn đúp,ánh xạ,thuận tay phải,thuận tay trái +Keywords[wa]=Sori,botons del sori,foime del fletche,éndjins d' intrêye,clitche,clitchî,imådjetes,ritour,pondjeu,bodjî,dobe clitchî,dobe clitche,hintche mwin,gôchî,droetî +Keywords[xh]=Mouse,Unyuso lwesantya seMouse,Ungeno lwe Mouse,Amaqhosha eMouse,Ukhetho,Ukumila kwesalathisi,Amacebo egalelo,Ukucetywa kwamaqhosha,Nqakraza,ii-icon, isiphumo,Izalathi,Tsala,Nqakraza kabini,iyaceba,isandla sokunene,isandla sasekhohlo +Keywords[zh_CN]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,鼠标,鼠标加速,鼠标加速阈值,鼠标按钮,选择,光标形状,输入设备,按钮映射,单击,图标,反馈,拖放,双击,映射,右手习惯,左手习惯 +Keywords[zh_TW]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,mapping,right handed,left handed,滑鼠,滑鼠游標加速,滑鼠游標加速間距,滑鼠按鈕,選擇,指標外觀,輸入設備,按鍵對應,單擊,圖示,反饋,指標,拖放,雙擊,映射,習慣右手,習慣左手 +Keywords[zu]=i-Mouse,Ukugijimisa kwe-Mouse,i-Mouse threshold, Izinkinobho ze-Mouse,Ukhetho,Isimo senkomba,Amthuluzi Omphumela wangaphakathi,Ukuqondanisa Izinkinobho,Cofa,Izimpawu zezithombe, umphumela obuyayo,Izinkomba zendawo yokubhala,Hudula,Cofa-kabili, ukuqondanisa,okwesanadla sangakwesokudla,okwesandla sangakwesokunxele +Categories=Qt;KDE;X-KDE-settings-hardware; diff --git a/kcontrol/input/mouse.h b/kcontrol/input/mouse.h new file mode 100644 index 000000000..005c7a2fc --- /dev/null +++ b/kcontrol/input/mouse.h @@ -0,0 +1,156 @@ +/* + * mouse.h + * + * Copyright (c) 1997 Patrick Dowler dowler@morgul.fsh.uvic.ca + * + * Layout management, enhancements: + * Copyright (c) 1999 Dirk A. Mueller + * + * SC/DC/AutoSelect/ChangeCursor: + * Copyright (c) 2000 David Faure + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __MOUSECONFIG_H__ +#define __MOUSECONFIG_H__ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#ifdef HAVE_LIBUSB +#include "logitechmouse.h" +#endif + +#include +#include "kmousedlg.h" +#include "themepage.h" + +#define RIGHT_HANDED 0 +#define LEFT_HANDED 1 + +class QCheckBox; +class QSlider; +class QTabWidget; + +class MouseSettings +{ +public: + void save(KConfig *); + void load(KConfig *); + void apply(bool force=false); +public: + int num_buttons; + int middle_button; + bool handedEnabled; + bool m_handedNeedsApply; + int handed; + double accelRate; + int thresholdMove; + int doubleClickInterval; + int dragStartTime; + int dragStartDist; + bool singleClick; + int autoSelectDelay; + int visualActivate; + bool changeCursor; + int wheelScrollLines; + bool reverseScrollPolarity; + + #ifdef HAVE_LIBUSB + // TODO: In Qt4, replace with a better container. + QPtrList logitechMouseList; + #endif +}; + +class MouseConfig : public KCModule +{ + Q_OBJECT +public: + MouseConfig(QWidget *parent=0, const char* name=0); + ~MouseConfig(); + + void save(); + void load(); + void load( bool useDefaults ); + void defaults(); + +private slots: + + void slotClick(); + /** No descriptions */ + void slotHandedChanged(int val); + void slotScrollPolarityChanged(); + void checkAccess(); + void slotThreshChanged(int value); + void slotDragStartDistChanged(int value); + void slotWheelScrollLinesChanged(int value); + +private: + + double getAccel(); + int getThreshold(); + int getHandedness(); + + void setAccel(double); + void setThreshold(int); + void setHandedness(int); + + KDoubleNumInput *accel; + KIntNumInput *thresh; + KIntNumInput *doubleClickInterval; + KIntNumInput *dragStartTime; + KIntNumInput *dragStartDist; + KIntNumInput *wheelScrollLines; + + QButtonGroup *handedBox; +// QRadioButton *leftHanded, *rightHanded; +// QCheckBox *doubleClick; +// QCheckBox *cbAutoSelect; + QLabel *lDelay; +// QSlider *slAutoSelect; +// QCheckBox *cbVisualActivate; +// QCheckBox *cbCursor; +// QCheckBox *cbLargeCursor; + + QTabWidget *tabwidget; + QWidget *tab2; + KMouseDlg* tab1; + ThemePage* themetab; + MouseSettings *settings; + + QCheckBox *mouseKeys; + KIntNumInput *mk_delay, *mk_interval, *mk_time_to_max, *mk_max_speed, + *mk_curve; + + +}; + +#endif + diff --git a/kcontrol/input/mouse_cursor_theme.upd b/kcontrol/input/mouse_cursor_theme.upd new file mode 100644 index 000000000..da71abb19 --- /dev/null +++ b/kcontrol/input/mouse_cursor_theme.upd @@ -0,0 +1,5 @@ +Id=kde3.4.99 +File=kdeglobals,kcminputrc +Group=KDE,Mouse +Options=overwrite +Key=cursorTheme diff --git a/kcontrol/input/pics/Makefile.am b/kcontrol/input/pics/Makefile.am new file mode 100644 index 000000000..fa9cd0d71 --- /dev/null +++ b/kcontrol/input/pics/Makefile.am @@ -0,0 +1,3 @@ +kcminput_pics_data_DATA = mouse_rh.png mouse_lh.png +kcminput_pics_datadir = $(kde_datadir)/kcminput/pics + diff --git a/kcontrol/input/pics/mouse_lh.png b/kcontrol/input/pics/mouse_lh.png new file mode 100644 index 000000000..acec7fe85 Binary files /dev/null and b/kcontrol/input/pics/mouse_lh.png differ diff --git a/kcontrol/input/pics/mouse_lh.svgz b/kcontrol/input/pics/mouse_lh.svgz new file mode 100644 index 000000000..9bf18f4f9 Binary files /dev/null and b/kcontrol/input/pics/mouse_lh.svgz differ diff --git a/kcontrol/input/pics/mouse_rh.png b/kcontrol/input/pics/mouse_rh.png new file mode 100644 index 000000000..de5cd8a86 Binary files /dev/null and b/kcontrol/input/pics/mouse_rh.png differ diff --git a/kcontrol/input/pics/mouse_rh.svgz b/kcontrol/input/pics/mouse_rh.svgz new file mode 100644 index 000000000..5597f588f Binary files /dev/null and b/kcontrol/input/pics/mouse_rh.svgz differ diff --git a/kcontrol/input/xcursor/Makefile.am b/kcontrol/input/xcursor/Makefile.am new file mode 100644 index 000000000..9ef9c9bbf --- /dev/null +++ b/kcontrol/input/xcursor/Makefile.am @@ -0,0 +1,7 @@ +AM_CPPFLAGS = $(all_includes) + +noinst_LTLIBRARIES = libthemepage.la +libthemepage_la_SOURCES = themepage.cpp previewwidget.cpp +METASOURCES = AUTO +noinst_HEADERS = themepage.h previewwidget.h + diff --git a/kcontrol/input/xcursor/previewwidget.cpp b/kcontrol/input/xcursor/previewwidget.cpp new file mode 100644 index 000000000..36108ef36 --- /dev/null +++ b/kcontrol/input/xcursor/previewwidget.cpp @@ -0,0 +1,353 @@ +/* + * Copyright (C) 2003 Fredrik Hglund + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "previewwidget.h" + + +extern bool qt_has_xft; +extern bool qt_use_xrender; + + +namespace { + + // Preview cursors + const char *cursor_names[] = + { + "left_ptr", + "left_ptr_watch", + "watch", + "hand2", + "question_arrow", + "sb_h_double_arrow", + "sb_v_double_arrow", + "bottom_left_corner", + "bottom_right_corner", + "fleur", + "pirate", + "cross", + "X_cursor", + "right_ptr", + "right_side", + "right_tee", + "sb_right_arrow", + "sb_right_tee", + "base_arrow_down", + "base_arrow_up", + "bottom_side", + "bottom_tee", + "center_ptr", + "circle", + "dot", + "dot_box_mask", + "dot_box_mask", + "double_arrow", + "draped_box", + "left_side", + "left_tee", + "ll_angle", + "top_side", + "top_tee", + }; + + const int numCursors = 6; // The number of cursors in the above list to be previewed + const int previewSize = 24; // The cursor size to be used in the preview widget + const int cursorSpacing = 20; +} + + +class PreviewCursor +{ + public: + PreviewCursor(); + ~PreviewCursor(); + + void load( const QString &, const QString & ); + const Picture picture() const { return m_pict; } + const Cursor handle() const { return m_handle; } + const int width() const { return m_width; } + const int height() const { return m_height; } + + private: + Picture createPicture( const XcursorImage* ) const; + void cropCursorImage( XcursorImage*& ) const; + Picture m_pict; + Cursor m_handle; + int m_width; + int m_height; +}; // class PreviewCursor + + +PreviewCursor::PreviewCursor() : + m_pict( 0 ), m_handle( 0 ), m_width( 0 ), m_height( 0 ) +{ +} + + +void PreviewCursor::load( const QString &name, const QString &theme ) +{ + Display *dpy = QPaintDevice::x11AppDisplay(); + + if ( m_pict ) XRenderFreePicture( dpy, m_pict ); + if ( m_handle ) XFreeCursor( dpy, m_handle ); + m_pict = 0; + m_handle = 0; + m_width = m_height = 0; + + // Load the preview cursor image + XcursorImage *image = + XcursorLibraryLoadImage( name.latin1(), theme.latin1(), previewSize ); + + // If the theme doesn't have this cursor, load the default cursor for now + if ( !image ) + image = XcursorLibraryLoadImage( "left_ptr", theme.latin1(), previewSize ); + + // TODO The old classic X cursors + if ( !image ) + return; + + // Auto-crop the image (some cursor themes use a fixed image size + // for all cursors, and doing this results in correctly centered images) + cropCursorImage( image ); + + m_pict = createPicture( image ); + m_width = image->width; + m_height = image->height; + + // Scale the image if its height is greater than 2x the requested size + if ( m_height > previewSize * 2.0 ) { + double factor = double( previewSize * 2.0 / m_height ); + XTransform xform = { + {{ XDoubleToFixed(1.0), XDoubleToFixed(0), XDoubleToFixed(0) }, + { XDoubleToFixed(0), XDoubleToFixed(1.0), XDoubleToFixed(0) }, + { XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(factor) }} + }; + XRenderSetPictureTransform( dpy, m_pict, &xform ); + m_width = int( m_width * factor ); + m_height = int( m_height * factor ); + } + + // We don't need this image anymore + XcursorImageDestroy( image ); + + // Load the actual cursor we will use + int size = XcursorGetDefaultSize( dpy ); + XcursorImages *images = XcursorLibraryLoadImages( name.latin1(), theme.latin1(), size ); + + if ( images ) { + m_handle = XcursorImagesLoadCursor( dpy, images ); + XcursorImagesDestroy( images ); + } else { + images = XcursorLibraryLoadImages( "left_ptr", theme.latin1(), size ); + m_handle = XcursorImagesLoadCursor( dpy, images ); + XcursorImagesDestroy( images ); + } +} + + +PreviewCursor::~PreviewCursor() +{ + if ( m_handle ) XFreeCursor( QPaintDevice::x11AppDisplay(), m_handle ); + if ( m_pict ) XRenderFreePicture( QPaintDevice::x11AppDisplay(), m_pict ); +} + + +Picture PreviewCursor::createPicture( const XcursorImage* image ) const +{ + Display *dpy = QPaintDevice::x11AppDisplay(); + + XImage ximage; + ximage.width = image->width; + ximage.height = image->height; + ximage.xoffset = 0; + ximage.format = ZPixmap; + ximage.data = reinterpret_cast( image->pixels ); + ximage.byte_order = ImageByteOrder( dpy ); + ximage.bitmap_unit = 32; + ximage.bitmap_bit_order = ximage.byte_order; + ximage.bitmap_pad = 32; + ximage.depth = 32; + ximage.bits_per_pixel = 32; + ximage.bytes_per_line = image->width * 4; + ximage.red_mask = 0x00ff0000; + ximage.green_mask = 0x0000ff00; + ximage.blue_mask = 0x000000ff; + ximage.obdata = 0; + + XInitImage( &ximage ); + + Pixmap pix = XCreatePixmap( dpy, DefaultRootWindow(dpy), ximage.width, ximage.height, 32 ); + GC gc = XCreateGC( dpy, pix, 0, NULL ); + XPutImage( dpy, pix, gc, &ximage, 0, 0, 0, 0, ximage.width, ximage.height ); + XFreeGC( dpy, gc ); + + XRenderPictFormat *fmt = XRenderFindStandardFormat( dpy, PictStandardARGB32 ); + Picture pict = XRenderCreatePicture( dpy, pix, fmt, 0, NULL ); + XFreePixmap( dpy, pix ); + + return pict; +} + + +void PreviewCursor::cropCursorImage( XcursorImage *&image ) const +{ + // Calculate the auto-crop rectangle + QRect r( QPoint( image->width, image->height ), QPoint() ); + XcursorPixel *pixels = image->pixels; + for ( int y = 0; y < int(image->height); y++ ) { + for ( int x = 0; x < int(image->width); x++ ) { + if ( *(pixels++) >> 24 ) { + if ( x < r.left() ) r.setLeft( x ); + if ( x > r.right() ) r.setRight( x ); + if ( y < r.top() ) r.setTop( y ); + if ( y > r.bottom() ) r.setBottom( y ); + } + } + } + + // Normalize the rectangle + r = r.normalize(); + + // Don't crop the image if the size isn't going to change + if ( r.width() == int( image->width ) && r.height() == int( image->height ) ) + return; + + // Create the new image + XcursorImage *cropped = XcursorImageCreate( r.width(), r.height() ); + XcursorPixel *src = image->pixels + r.top() * image->width + r.left(); + XcursorPixel *dst = cropped->pixels; + for ( int y = 0; y < r.height(); y++, src += (image->width - r.width()) ) { + for ( int x = 0; x < r.width(); x++ ) { + *(dst++) = *(src++); + } + } + + // Destroy the original + XcursorImageDestroy( image ); + image = cropped; +} + + + +// ------------------------------------------------------------------------------------------------ + + + +PreviewWidget::PreviewWidget( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + cursors = new PreviewCursor* [ numCursors ]; + for ( int i = 0; i < numCursors; i++ ) + cursors[i] = new PreviewCursor; + + current = -1; + setMouseTracking( true ); + setFixedHeight( previewSize + 20 ); +} + + +PreviewWidget::~PreviewWidget() +{ + for ( int i = 0; i < numCursors; i++ ) + delete cursors[i]; + + delete [] cursors; +} + + +void PreviewWidget::setTheme( const QString &theme ) +{ + setUpdatesEnabled( false ); + + int minHeight = previewSize + 20; // Minimum height of the preview widget + int maxHeight = height(); // Tallest cursor height + int maxWidth = previewSize; // Widest cursor width + + for ( int i = 0; i < numCursors; i++ ) { + cursors[i]->load( cursor_names[i], theme.latin1() ); + if ( cursors[i]->width() > maxWidth ) + maxWidth = cursors[i]->width(); + if ( cursors[i]->height() > maxHeight ) + maxHeight = cursors[i]->height(); + } + + current = -1; + setFixedSize( ( maxWidth + cursorSpacing ) * numCursors, kMax( maxHeight, minHeight ) ); + setUpdatesEnabled( true ); + repaint( false ); +} + + +void PreviewWidget::paintEvent( QPaintEvent * ) +{ + QPixmap buffer( size() ); + QPainter p( &buffer ); + p.fillRect( rect(), colorGroup().brush( QColorGroup::Background ) ); + Picture dest; + + if ( !qt_has_xft || !qt_use_xrender ) { + XRenderPictFormat *fmt = XRenderFindVisualFormat( x11Display(), (Visual*)buffer.x11Visual() ); + dest = XRenderCreatePicture( x11Display(), buffer.handle(), fmt, 0, NULL ); + } else + dest = buffer.x11RenderHandle(); + + int rwidth = width() / numCursors; + + for ( int i = 0; i < numCursors; i++ ) { + if ( cursors[i]->picture() ) { + XRenderComposite( x11Display(), PictOpOver, + cursors[i]->picture(), 0, dest, 0, 0, 0, 0, + rwidth * i + (rwidth - cursors[i]->width()) / 2, + (height() - cursors[i]->height()) / 2, + cursors[i]->width(), cursors[i]->height() ); + } + } + + bitBlt( this, 0, 0, &buffer ); + + if ( !qt_has_xft || !qt_use_xrender ) + XRenderFreePicture( x11Display(), dest ); +} + + +void PreviewWidget::mouseMoveEvent( QMouseEvent *e ) +{ + int pos = e->x() / ( width() / numCursors ); + + if ( pos != current && pos < numCursors ) { + XDefineCursor( x11Display(), winId(), cursors[pos]->handle() ); + current = pos; + } +} + + +// vim: set noet ts=4 sw=4: diff --git a/kcontrol/input/xcursor/previewwidget.h b/kcontrol/input/xcursor/previewwidget.h new file mode 100644 index 000000000..1c1d12c0f --- /dev/null +++ b/kcontrol/input/xcursor/previewwidget.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2003 Fredrik Hglund + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __CURSORPREVIEW_H +#define __CURSORPREVIEW_H + + +class PreviewCursor; + + +class PreviewWidget : public QWidget +{ + public: + PreviewWidget( QWidget *parent = NULL, const char *name = NULL ); + ~PreviewWidget(); + + void setTheme( const QString & ); + + void paintEvent( QPaintEvent * ); + void mouseMoveEvent( QMouseEvent * ); + + private: + PreviewCursor **cursors; + int current; +}; // class CursorPreview + + + +#endif + +// vim: set noet ts=4 sw=4: diff --git a/kcontrol/input/xcursor/themepage.cpp b/kcontrol/input/xcursor/themepage.cpp new file mode 100644 index 000000000..96e3e6871 --- /dev/null +++ b/kcontrol/input/xcursor/themepage.cpp @@ -0,0 +1,637 @@ +/* + * Copyright (C) 2003 Fredrik H�lund + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // for getenv() + +#include "themepage.h" +#include "themepage.moc" + +#include "previewwidget.h" + +#include +#include + +// Check for older version +#if !defined(XCURSOR_LIB_MAJOR) && defined(XCURSOR_MAJOR) +# define XCURSOR_LIB_MAJOR XCURSOR_MAJOR +# define XCURSOR_LIB_MINOR XCURSOR_MINOR +#endif + +namespace { + // Listview icon size + const int iconSize = 24; + + // Listview columns + enum Columns { NameColumn = 0, DescColumn, /* hidden */ DirColumn }; +} + +struct ThemeInfo { + QString path; // Path to the cursor theme + bool writable; // Theme directory is writable +}; + + +ThemePage::ThemePage( QWidget* parent, const char* name ) + : QWidget( parent, name ), selectedTheme( NULL ), currentTheme( NULL ) +{ + QBoxLayout *layout = new QVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setMargin( KDialog::marginHint() ); + layout->setSpacing( KDialog::spacingHint() ); + + new QLabel( i18n("Select the cursor theme you want to use (hover preview to test cursor):"), this ); + + // Create the preview widget + preview = new PreviewWidget( new QHBox( this ) ); + + // Create the theme list view + listview = new KListView( this ); + listview->setFullWidth( true ); + listview->setAllColumnsShowFocus( true ); + listview->addColumn( i18n("Name") ); + listview->addColumn( i18n("Description") ); + + connect( listview, SIGNAL(selectionChanged(QListViewItem*)), + SLOT(selectionChanged(QListViewItem*)) ); + + themeDirs = getThemeBaseDirs(); + insertThemes(); + + QHBox *hbox = new QHBox( this ); + hbox->setSpacing( KDialog::spacingHint() ); + installButton = new QPushButton( i18n("Install New Theme..."), hbox ); + removeButton = new QPushButton( i18n("Remove Theme"), hbox ); + + connect( installButton, SIGNAL( clicked() ), SLOT( installClicked() ) ); + connect( removeButton, SIGNAL( clicked() ), SLOT( removeClicked() ) ); + + // Disable the install button if ~/.icons isn't writable + QString path = QDir::homeDirPath() + "/.icons"; + QFileInfo icons = QFileInfo( path ); + + if ( ( icons.exists() && !icons.isWritable() ) || + ( !icons.exists() && !QFileInfo( QDir::homeDirPath() ).isWritable() ) ) + installButton->setEnabled( false ); + + if ( !themeDirs.contains( path ) ) + installButton->setEnabled( false ); + + selectionChanged( listview->currentItem() ); +} + + +ThemePage::~ThemePage() +{ +} + + +void ThemePage::save() +{ + if ( currentTheme == selectedTheme ) + return; + + KConfig c( "kcminputrc" ); + c.setGroup( "Mouse" ); + c.writeEntry( "cursorTheme", selectedTheme != "system" ? selectedTheme : QString::null ); + + KMessageBox::information( this, i18n("You have to restart KDE for these " + "changes to take effect."), i18n("Cursor Settings Changed"), + "CursorSettingsChanged" ); + + currentTheme = selectedTheme; +} + +void ThemePage::load() +{ + load( false ); +} + +void ThemePage::load( bool useDefaults ) +{ + // Get the name of the theme libXcursor currently uses + const char *theme = XcursorGetTheme( x11Display() ); + currentTheme = theme; + + // Get the name of the theme KDE is configured to use + KConfig c( "kcminputrc" ); + c.setReadDefaults( useDefaults ); + c.setGroup( "Mouse" ); + currentTheme = c.readEntry( "cursorTheme", currentTheme ); + if( currentTheme.isEmpty()) + currentTheme = "system"; + + // Find the theme in the listview and select it + QListViewItem *item = listview->findItem( currentTheme, DirColumn ); + if( !item ) + item = listview->findItem( "system", DirColumn ); + selectedTheme = item->text( DirColumn ); + listview->setSelected( item, true ); + listview->ensureItemVisible( item ); + + // Update the preview widget as well + if ( preview ) + preview->setTheme( selectedTheme ); + + // Disable the listview if we're in kiosk mode + if ( c.entryIsImmutable( "cursorTheme" ) ) + listview->setEnabled( false ); +} + + +void ThemePage::defaults() +{ + load( true ); +} + + +void ThemePage::selectionChanged( QListViewItem *item ) +{ + if ( !item ) + { + removeButton->setEnabled( false ); + return; + } + + selectedTheme = item->text( DirColumn ); + + // Update the preview widget + if ( preview ) + preview->setTheme( selectedTheme ); + + removeButton->setEnabled( themeInfo[ selectedTheme ] && themeInfo[ selectedTheme ]->writable ); + + emit changed( currentTheme != selectedTheme ); +} + + +void ThemePage::installClicked() +{ + // Get the URL for the theme we're going to install + KURL url = KURLRequesterDlg::getURL( QString::null, this, i18n( "Drag or Type Theme URL" ) ); + if ( url.isEmpty() ) + return; + + QString tmpFile; + if ( !KIO::NetAccess::download( url, tmpFile, this ) ) { + QString text; + + if ( url.isLocalFile() ) + text = i18n( "Unable to find the cursor theme archive %1." ); + else + text = i18n( "Unable to download the cursor theme archive; " + "please check that the address %1 is correct." ); + + KMessageBox::sorry( this, text.arg( url.prettyURL() ) ); + return; + } + + if ( !installThemes( tmpFile ) ) + KMessageBox::error( this, i18n( "The file %1 does not appear to be a valid " + "cursor theme archive.").arg( url.fileName() ) ); + + KIO::NetAccess::removeTempFile( tmpFile ); +} + + +void ThemePage::removeClicked() +{ + QString question = i18n( "Are you sure you want to remove the " + "%1 cursor theme?
" + "This will delete all the files installed by this theme.
") + .arg( listview->currentItem()->text( NameColumn ) ); + + // Get confirmation from the user + int answer = KMessageBox::warningContinueCancel( this, question, i18n( "Confirmation" ), KStdGuiItem::del() ); + if ( answer != KMessageBox::Continue ) + return; + + // Delete the theme from the harddrive + KURL u; + u.setPath( themeInfo[ selectedTheme ]->path ); + KIO::del( u ); + + // Remove the theme from the listview and from the themeinfo dict + delete listview->findItem( selectedTheme, DirColumn ); + themeInfo.remove( selectedTheme ); + listview->setSelected( listview->currentItem(), true ); + + // TODO: + // Since it's possible to substitute cursors in a system theme by adding a local + // theme with the same name, we shouldn't remove the theme from the list if it's + // still available elsewhere. This could be solved by calling insertThemes() here, + // but since KIO::del() is an asynchronos operation, the theme we're deleting will + // be readded to the list again before KIO has removed it. +} + + +bool ThemePage::installThemes( const QString &file ) +{ + KTar archive( file ); + + if ( !archive.open( IO_ReadOnly ) ) + return false; + + const KArchiveDirectory *archiveDir = archive.directory(); + QStringList themeDirs; + + const QStringList entries = archiveDir->entries(); + for ( QStringList::ConstIterator it = entries.begin(); it != entries.end(); ++it ) + { + const KArchiveEntry *entry = archiveDir->entry( *it ); + if ( entry->isDirectory() && entry->name().lower() != "default" ) { + const KArchiveDirectory *dir = static_cast< const KArchiveDirectory* >( entry ); + if ( dir->entry( "index.theme" ) && dir->entry( "cursors" ) ) + themeDirs << dir->name(); + } + } + + if ( themeDirs.count() < 1 ) + return false; + + const QString destDir = QDir::homeDirPath() + "/.icons/"; + KStandardDirs::makeDir( destDir ); // Make sure the directory exists + + for ( QStringList::ConstIterator it = themeDirs.begin(); it != themeDirs.end(); ++it ) + { + // Check if a theme with that name already exists + if ( QDir( destDir ).exists( *it ) ) { + const QString question = i18n( "A theme named %1 already exists in your icon " + "theme folder. Do you want replace it with this one?" ).arg( *it ); + int answer = KMessageBox::warningContinueCancel( this, question, i18n( "Overwrite Theme?"), i18n("Replace") ); + if ( answer != KMessageBox::Continue ) + continue; + + // ### If the theme that's being replaced is the current theme, it + // will cause cursor inconsistencies in newly started apps. + } + + // ### Should we check if a theme with the same name exists in a global theme dir? + // If that's the case it will effectively replace it, even though the global theme + // won't be deleted. Checking for this situation is easy, since the global theme + // will be in the listview. Maybe this should never be allowed since it might + // result in strange side effects (from the average users point of view). OTOH + // a user might want to do this 'upgrade' a global theme. + + const QString dest = destDir + *it; + const KArchiveDirectory *dir = static_cast< const KArchiveDirectory* >( archiveDir->entry( *it ) ); + dir->copyTo( dest ); + insertTheme( dest ); + } + + listview->sort(); + + archive.close(); + return true; +} + + +void ThemePage::insertTheme( const QString &path ) +{ + QString dirName = QDir( path ).dirName(); + + // Defaults in case there's no name or comment field. + QString name = dirName; + QString desc = i18n( "No description available" ); + QString sample = "left_ptr"; + + KSimpleConfig c( path + "/index.theme", true ); // Open read-only + c.setGroup( "Icon Theme" ); + + // Don't insert the theme if it's hidden. + if ( c.readBoolEntry( "Hidden", false ) ) + return; + + // ### If the theme is hidden, the user will probably find it strange that it + // doesn't appear in the list view. There also won't be a way for the user + // to delete the theme using the KCM. Perhaps a warning about this should + // be issued, and the user given a chance to undo the installation. + + // Read the name, description and sample cursor + name = c.readEntry( "Name", name ); + desc = c.readEntry( "Comment", desc ); + sample = c.readEntry( "Example", sample ); + + // Create a ThemeInfo object if one doesn't already exist, and fill in the members + ThemeInfo *info = themeInfo[ dirName ]; + if ( !info ) { + info = new ThemeInfo; + themeInfo.insert( dirName, info ); + } + + info->path = path; + info->writable = true; + + // If an item with the same name already exists, remove it + delete listview->findItem( dirName, DirColumn ); + + // Create the listview item and insert it into the list. + KListViewItem *item = new KListViewItem( listview, name, desc, /*hidden*/ dirName ); + item->setPixmap( NameColumn, createIcon( dirName, sample ) ); + listview->insertItem( item ); +} + + +const QStringList ThemePage::getThemeBaseDirs() const +{ +#if XCURSOR_LIB_MAJOR == 1 && XCURSOR_LIB_MINOR < 1 + // These are the default paths Xcursor will scan for cursor themes + QString path( "~/.icons:/usr/share/icons:/usr/share/pixmaps:/usr/X11R6/lib/X11/icons" ); + + // If XCURSOR_PATH is set, use that instead of the default path + char *xcursorPath = std::getenv( "XCURSOR_PATH" ); + if ( xcursorPath ) + path = xcursorPath; +#else + // Get the search patch from Xcursor + QString path = XcursorLibraryPath(); +#endif + // Expand all occurences of ~ to the home dir + path.replace( "~/", QDir::homeDirPath() + '/' ); + return QStringList::split( ':', path ); +} + + +bool ThemePage::isCursorTheme( const QString &theme, const int depth ) const +{ + // Prevent infinate recursion + if ( depth > 10 ) + return false; + + // Search each icon theme directory for 'theme' + for ( QStringList::ConstIterator it = themeDirs.begin(); it != themeDirs.end(); ++it ) + { + QDir dir( *it ); + if ( !dir.exists() ) + continue; + + const QStringList subdirs( dir.entryList( QDir::Dirs ) ); + if ( subdirs.contains( theme ) ) + { + const QString path = *it + '/' + theme; + const QString indexfile = path + "/index.theme"; + const bool haveIndexFile = dir.exists( indexfile ); + const bool haveCursors = dir.exists( path + "/cursors" ); + QStringList inherit; + + // Return true if we have a cursors subdirectory + if ( haveCursors ) + return true; + + // Parse the index.theme file if one exists + if ( haveIndexFile ) + { + KSimpleConfig c( indexfile, true ); // Open read-only + c.setGroup( "Icon Theme" ); + inherit = c.readListEntry( "Inherits" ); + } + + // Recurse through the list of inherited themes + for ( QStringList::ConstIterator it2 = inherit.begin(); it2 != inherit.end(); ++it2 ) + { + if ( *it2 == theme ) // Avoid possible DoS + continue; + + if ( isCursorTheme( *it2, depth + 1 ) ) + return true; + } + } + } + + return false; +} + + +void ThemePage::insertThemes() +{ + // Scan each base dir for cursor themes and add them to the listview. + // An icon theme is considered to be a cursor theme if it contains + // a cursors subdirectory or if it inherits a cursor theme. + for ( QStringList::ConstIterator it = themeDirs.begin(); it != themeDirs.end(); ++it ) + { + QDir dir( *it ); + if ( !dir.exists() ) + continue; + + QStringList subdirs( dir.entryList( QDir::Dirs ) ); + subdirs.remove( "." ); + subdirs.remove( ".." ); + + for ( QStringList::ConstIterator it = subdirs.begin(); it != subdirs.end(); ++it ) + { + // Only add the theme if we don't already have a theme with that name + // in the list. Xcursor will use the first theme it finds in that + // case, and since we use the same search order that should also be + // the theme we end up adding to the list. + if ( listview->findItem( *it, DirColumn ) ) + continue; + + const QString path = dir.path() + '/' + *it; + const QString indexfile = path + "/index.theme"; + const bool haveIndexFile = dir.exists( *it + "/index.theme" ); + const bool haveCursors = dir.exists( *it + "/cursors" ); + + // If the directory doesn't have a cursors subdir and lack an + // index.theme file it's definately not a cursor theme + if ( !haveIndexFile && !haveCursors ) + continue; + + // Defaults in case there's no index.theme file or it lacks + // a name and a comment field. + QString name = *it; + QString desc = i18n( "No description available" ); + QString sample = "left_ptr"; + + // Parse the index.theme file if the theme has one. + if ( haveIndexFile ) + { + KSimpleConfig c( indexfile, true ); + c.setGroup( "Icon Theme" ); + + // Skip this theme if it's hidden. + if ( c.readBoolEntry( "Hidden", false ) ) + continue; + + // If there's no cursors subdirectory we'll do a recursive scan + // to check if the theme inherits a theme with one. + if ( !haveCursors ) + { + bool result = false; + QStringList inherit = c.readListEntry( "Inherits" ); + for ( QStringList::ConstIterator it2 = inherit.begin(); it2 != inherit.end(); ++it2 ) + if ( result = isCursorTheme( *it2 ) ) + break; + + // If this theme doesn't inherit a cursor theme, proceed + // to the next theme in the list. + if ( !result ) + continue; + } + + // Read the name, description and sample cursor + name = c.readEntry( "Name", name ); + desc = c.readEntry( "Comment", desc ); + sample = c.readEntry( "Example", sample ); + } + + // Create a ThemeInfo object, and fill in the members + ThemeInfo *info = new ThemeInfo; + info->path = path; + info->writable = QFileInfo( path ).isWritable(); + themeInfo.insert( *it, info ); + + // Create the listview item and insert it into the list. + KListViewItem *item = new KListViewItem( listview, name, desc, /*hidden*/ *it ); + item->setPixmap( NameColumn, createIcon( *it, sample ) ); + listview->insertItem( item ); + } + } + + // Note: If a default theme dir wasn't found in the above search, Xcursor will + // default to using the cursor font. + + // Sort the theme list + listview->sort(); + + KListViewItem *item = new KListViewItem( listview, ' ' + i18n( "No theme" ), i18n( "The old classic X cursors") , /*hidden*/ "none" ); + listview->insertItem( item ); + item = new KListViewItem( listview, ' ' + i18n( "System theme" ), i18n( "Do not change cursor theme") , /*hidden*/ "system" ); + listview->insertItem( item ); + // no ThemeInfo object for this one +} + + +QPixmap ThemePage::createIcon( const QString &theme, const QString &sample ) const +{ + XcursorImage *xcur; + QPixmap pix; + + xcur = XcursorLibraryLoadImage( sample.latin1(), theme.latin1(), iconSize ); + if ( !xcur ) xcur = XcursorLibraryLoadImage( "left_ptr", theme.latin1(), iconSize ); + + if ( xcur ) { + // Calculate an auto-crop rectangle for the cursor image + // (helps with cursors converted from windows .cur or .ani files) + QRect r( QPoint( xcur->width, xcur->height ), QPoint() ); + XcursorPixel *src = xcur->pixels; + + for ( int y = 0; y < int( xcur->height ); y++ ) { + for ( int x = 0; x < int( xcur->width ); x++ ) { + if ( *(src++) >> 24 ) { + if ( x < r.left() ) r.setLeft( x ); + if ( x > r.right() ) r.setRight( x ); + if ( y < r.top() ) r.setTop( y ); + if ( y > r.bottom() ) r.setBottom( y ); + } + } + } + + // Normalize the rectangle + r = r.normalize(); + + // Calculate the image size + int size = kMax( iconSize, kMax( r.width(), r.height() ) ); + + // Create the intermediate QImage + QImage image( size, size, 32 ); + image.setAlphaBuffer( true ); + + // Clear the image + Q_UINT32 *dst = reinterpret_cast( image.bits() ); + for ( int i = 0; i < image.width() * image.height(); i++ ) + dst[i] = 0; + + // Compute the source and destination offsets + QPoint dstOffset( (image.width() - r.width()) / 2, (image.height() - r.height()) / 2 ); + QPoint srcOffset( r.topLeft() ); + + dst = reinterpret_cast( image.scanLine(dstOffset.y()) ) + dstOffset.x(); + src = reinterpret_cast( xcur->pixels ) + srcOffset.y() * xcur->width + srcOffset.x(); + + // Copy the XcursorImage into the QImage, converting it from premultiplied + // to non-premultiplied alpha and cropping it if needed. + for ( int y = 0; y < r.height(); y++ ) + { + for ( int x = 0; x < r.width(); x++, dst++, src++ ) { + const Q_UINT32 pixel = *src; + + const Q_UINT8 a = qAlpha( pixel ); + const Q_UINT8 r = qRed( pixel ); + const Q_UINT8 g = qGreen( pixel ); + const Q_UINT8 b = qBlue( pixel ); + + if ( !a || a == 255 ) { + *dst = pixel; + } else { + float alpha = a / 255.0; + *dst = qRgba( int(r / alpha), int(g / alpha), int(b / alpha), a ); + } + } + dst += ( image.width() - r.width() ); + src += ( xcur->width - r.width() ); + } + + // Scale down the image if we need to + if ( image.width() > iconSize || image.height() > iconSize ) + image = image.smoothScale( iconSize, iconSize, QImage::ScaleMin ); + + pix.convertFromImage( image ); + XcursorImageDestroy( xcur ); + } else { + + QImage image( iconSize, iconSize, 32 ); + image.setAlphaBuffer( true ); + + Q_UINT32 *data = reinterpret_cast< Q_UINT32* >( image.bits() ); + for ( int i = 0; i < image.width() * image.height(); i++ ) + data[ i ] = 0; + + pix.convertFromImage( image ); + } + + return pix; +} + + +// vim: set noet ts=4 sw=4: diff --git a/kcontrol/input/xcursor/themepage.h b/kcontrol/input/xcursor/themepage.h new file mode 100644 index 000000000..7d4dec675 --- /dev/null +++ b/kcontrol/input/xcursor/themepage.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2003 Fredrik Hglund + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __THEMEPAGE_H +#define __THEMEPAGE_H + +#include + + +class KListView; +class QString; +class PreviewWidget; +class QStringList; +class QListViewItem; +class QPushButton; + +struct ThemeInfo; + + +class ThemePage : public QWidget +{ + Q_OBJECT + + public: + ThemePage( QWidget* parent = 0, const char* name = 0 ); + ~ThemePage(); + + // Called by the KCM + void save(); + void load(); + void load( bool useDefaults ); + void defaults(); + + signals: + void changed( bool ); + + private slots: + void selectionChanged( QListViewItem * ); + void installClicked(); + void removeClicked(); + + private: + bool installThemes( const QString &file ); + void insertTheme( const QString & ); + const QStringList getThemeBaseDirs() const; + bool isCursorTheme( const QString &theme, const int depth = 0 ) const; + void insertThemes(); + QPixmap createIcon( const QString &, const QString & ) const; + + KListView *listview; + PreviewWidget *preview; + QPushButton *installButton, *removeButton; + QString selectedTheme; + QString currentTheme; + QStringList themeDirs; + QDict themeInfo; +}; + +#endif // __THEMEPAGE_H + +// vim: set noet ts=4 sw=4: diff --git a/kcontrol/ioslaveinfo/Makefile.am b/kcontrol/ioslaveinfo/Makefile.am new file mode 100644 index 000000000..14150d57c --- /dev/null +++ b/kcontrol/ioslaveinfo/Makefile.am @@ -0,0 +1,21 @@ +kde_module_LTLIBRARIES = kcm_ioslaveinfo.la + +kcm_ioslaveinfo_la_SOURCES = kcmioslaveinfo.cpp + +kcm_ioslaveinfo_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_ioslaveinfo_la_LIBADD = -lkdeui $(LIB_KIO) + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kcmioslaveinfo.pot + +xdg_apps_DATA = ioslaveinfo.desktop + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/Information + +# $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/Network/ioslaveinfo.desktop + diff --git a/kcontrol/ioslaveinfo/ioslaveinfo.desktop b/kcontrol/ioslaveinfo/ioslaveinfo.desktop new file mode 100644 index 000000000..a9ece6f71 --- /dev/null +++ b/kcontrol/ioslaveinfo/ioslaveinfo.desktop @@ -0,0 +1,237 @@ +[Desktop Entry] +Comment=Information about the available protocols +Comment[af]=Informasie aangaande die beskikbaar protokolle +Comment[ar]=معلومات عن الموافيق المتوفرة +Comment[az]=Mövcud protokollar haqqında mə'lumat +Comment[be]=Інфармацыя аб наяўных пратаколах +Comment[bg]=Информация за поддържаните протоколи +Comment[bn]=বিভিন্ন প্রোটোকল সম্বন্ধে তথ্য +Comment[bs]=Informacije o dostupnim protokolima +Comment[ca]=Informació sobre els protocols disponibles +Comment[cs]=Informace o dostupných protokolech +Comment[csb]=Wëdowiédzô ò przistãpnëch protokòłach +Comment[cy]=Gwybodaeth am y protocolau sydd ar gael +Comment[da]=Information om de tilgængelige protokoller +Comment[de]=Information zu den verfügbaren Ein-/Ausgabemodulen +Comment[el]=Πληροφορίες για τα διαθέσιμα πρωτόκολλα +Comment[eo]=Informo pri la uzeblaj protokoloj +Comment[es]=Información sobre los protocolos disponibles +Comment[et]=Olemasolevate IO moodulite (ioslave) info +Comment[eu]=Produktu eskuragarriei buruzko informazioa +Comment[fa]=اطلاعاتی دربارۀ قراردادهای قابل دسترس +Comment[fi]=Tietoja saatavilla olevista yhteyskäytännöistä +Comment[fr]=Informations sur les protocoles disponibles +Comment[fy]=Ynformaasje oer de beskikbere protokollen +Comment[ga]=Eolas faoi na bprótacail atá ar fáil +Comment[gl]=Información acerca dos protocolos diponíbeis +Comment[he]=מידע על הפרוטוקולים הזמינים +Comment[hi]=उपलब्ध प्रोटोकॉल्स के बारे में जानकारी +Comment[hr]=Podaci o raspoloživim protokolima +Comment[hu]=A rendelkezésre álló protokollok jellemzői +Comment[id]=Informasi tentang protokol yang tersedia +Comment[is]=Upplýsingar um nothæfar samskiptareglur +Comment[it]=Informazioni sui protocolli disponibili +Comment[ja]=利用可能なプロトコルの情報 +Comment[ka]=ინფორმაცია ხელმისაწვდომი პროტოკოების შესახებ +Comment[kk]=Енгізу-шығару протоколдар туралы мәлімет +Comment[km]=ព័ត៌មាន​អំពី​ពិធីការ​ដែល​អាច​រក​បាន +Comment[ko]=사용 가능한 프로토콜 정보 +Comment[lo]=ຂໍ້ມູນກ່ງວກັບໂປຣໂຕຄອນທີ່ມີຢູ່ +Comment[lt]=Informacija apie esamus protokolus +Comment[lv]=Informācija par pieejamajiem protokoliem +Comment[mk]=Информации за достапните протоколи +Comment[mn]=Бэлэн байгаа оролт/гаралтын-модулын мэдээлэл +Comment[ms]=Maklumat tentang protokol yang boleh didapatkan +Comment[mt]=Informazzjoni dwar il-protokolli li hawn +Comment[nb]=Informasjon om de tilgjengelige protokollene +Comment[nds]=Informatschoon över de verföögboren Protokollen +Comment[ne]=उपलब्ध प्रोटोकलका बारेमा सूचना +Comment[nl]=Informatie over de beschikbare protocollen +Comment[nn]=Informasjon om dei tilgjengelege protokollane +Comment[nso]=Tshedimoso kaga melao yeo elego gona +Comment[pa]=ਉਪਲੱਬਧ ਪਰੋਟੋਕਾਲ ਬਾਰੇ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o dostępnych protokołach +Comment[pt]=Informações sobre os protocolos disponíveis +Comment[pt_BR]=Informações sobre os protocolos disponíveis +Comment[ro]=Informații despre protocoalele disponibile +Comment[ru]=Сведения о протоколах ввода-вывода +Comment[rw]=Ibisobanuro birebana na porotokole ziboneka +Comment[se]=Dieđut olamuttus protokollaid birra +Comment[sk]=Informácia o dostupných protokoloch +Comment[sl]=Podatki o razpoložljivih protokolih +Comment[sr]=Информације о доступним протоколима +Comment[sr@Latn]=Informacije o dostupnim protokolima +Comment[sv]=Information om tillgängliga protokoll +Comment[ta]=கிடைக்கக்கூடிய நெறிமுறைகள் பற்றிய தகவல் +Comment[tg]=Иттилооти дар мавриди қарордодҳои мавҷуд буда +Comment[th]=ข้อมูลเกี่ยวกับโปรโตคอลที่มีอยู่ +Comment[tr]=Mevcut protokoller hakkında bilgi +Comment[tt]=Bar bulğan protokollar turında +Comment[uk]=Інформація про наявні протоколи +Comment[uz]=Mavjud protokollar haqida maʼlumot +Comment[uz@cyrillic]=Мавжуд протоколлар ҳақида маълумот +Comment[ven]=Mafhungo ngaha purotokolo ire hone +Comment[vi]=Thông tin về các giao thức có thể dùng +Comment[wa]=Informåcion so les protocoles k' i gn a +Comment[xh]=Ulwazi malunga nemithetho elandelwayo ekhoyo +Comment[zh_CN]=可用协议的信息 +Comment[zh_TW]=可用協定的資訊 +Comment[zu]=Ulwazi mayelana nemithetho elandelwayo ekhona +DocPath=kinfocenter/protocols/index.html +Exec=kcmshell ioslaveinfo +Icon=history +Keywords=Protocol,IO slaves,Slaves,Network,Information,Timeout +Keywords[ar]=الميفاق,IO Slaves,Slaves,الشبكة,معلومات نفاذ الوقت +Keywords[az]=Protokol, IO Kölələri, Kölələr, Şəbəkə,Mə'lumat, Vaxt Dolması +Keywords[be]=Пратакол,Сетка,Інфармацыя,Тэрмін чакання,Protocol,IO slaves,Slaves,Network,Information,Timeout +Keywords[bg]=информация, система, системна, протокол, протоколи, наличен, поддържан, Protocol, IO slaves, Slaves, Network, Information, Timeout +Keywords[ca]=Protocol,esclaus IO,Esclaus,Xarxa,Informació,Temps d'expiració +Keywords[cs]=Protokol,Vstupně/výstupní moduly,Síť,Informace,Časový limit +Keywords[csb]=Protokół,procedurë wé/wi,wëkonëjący dzéjaniô wé/wi,Séc,wëdowiédzô,Limit czasu +Keywords[cy]=Protocol,Gweision IO,Gweision,Rhwydwaith,Gwybodaeth,Goramser +Keywords[da]=Protokol,IO-slaver,Slaver,Netværk,Information,Tid,Udløb,Timeout +Keywords[de]=Protokolle,Information,Ein/Ausgabe,Ein-/Ausgabemodule,IO-Slaves,Netzwerk,Zeitlimit,Timeout +Keywords[el]=Πρωτόκολλο,slaves ΕΕ,Slaves,Δίκτυο,Πληροφορίες,Χρονικό όριο +Keywords[eo]=Protokolo,Enel-sklavoj,sklavoj,reto,informo,tempolimo +Keywords[es]=Protocolo,Slaves de E/S,Slaves,Red,Información,Tiempo de expiración +Keywords[et]=protokoll,IO moodulid,moodulid,võrk,info,taimaut,aegumine +Keywords[eu]=Protocol,IO morroiak,Morroiak,Sarea,Informazioa,Denbora-muga +Keywords[fa]=قرارداد، IO slaves، Slaves، شبکه، اطلاعات، اتمام وقت +Keywords[fi]=Protokolla,Yhteyskäytäntö,KIO,KIO-palvelu,Verkko,Aikavalvonta,aikakatkaisu +Keywords[fr]=protocole,modules,entrées/sorties,réseau,informations,délai +Keywords[fy]=protocol,IO slaves,slaves,network,ynformaasje,timeout,netwurk,tiidslimyt +Keywords[gl]=Protocolo,escravos IO,Escravos,Rede,Información,Tempo de agarda,Timeout +Keywords[he]=פרוטוקול,עבדי קלט־פלט,רשת,מידע,זמן מוקצב, Protocol,IO slaves,Slaves,Network,Information,Timeout +Keywords[hi]=प्रोटोकॉल,आईओ स्लैव्स,स्लैव्स,नेटवर्क,जानकारी,टाइमआउट +Keywords[hr]=Protocol,IO slaves,Slaves,Network,Information,Timeout,Protokol,IO podčinjeni,Podčinjeni,Mreža,Podaci,Istek +Keywords[hu]=protokoll,KDE protokollok,protokoll,hálózat,információ,időtúllépés +Keywords[is]=Samskiptareglur,IO þrælar,þrælar,staðarnet,net,upplýsingar,útrunninn tími +Keywords[it]=protocollo,IO slave,slave,rete,informazioni,tempo massimo +Keywords[ja]=プロトコル,IO,スレイブ,スレーブ,ネットワーク,情報,タイムアウト +Keywords[km]=ពិធីការ,IO កូនចៅ,កូនចៅ,បណ្ដាញ,ព័ត៌មាន,អស់​ពេល +Keywords[lo]=ໂປຣໂຕຄອນ,IO slaves,Slaves,ລະບົບເຄືອຂ່າຍ,ຂໍ້ມູນ,ຫມົດເວລາ +Keywords[lt]=Protocol,IO slaves,Slaves,Network,Information,Timeout,protokolas,tinklas,informacija,laiko pasibaigimas +Keywords[lv]=Protokols,IO vergi,Vergi,Tīkls,Informācija,Noildze +Keywords[mk]=Protocol,IO slaves,Slaves,Network,Information,Timeout,Протокол,Мрежа,Информации,Истек на време +Keywords[mn]=Протокол,Мэдээлэл,Оролт/Гаралт,IO-Slaves,Сүлжээ, Хугацааны хязгаар,Хугацаа хэтрэлт +Keywords[nb]=Protokoll,IO-slaver,Slaver,Nettverk,Informasjon,Ventetid +Keywords[nds]=Protokoll,In-/Utgaavdeensten,IO,Deensten,Nettwark,Informatschoon,Timeout,Tietgrenz +Keywords[ne]=प्रोटोकल, IO स्लेभ, स्लेभहरू, सञ्जाल, सूचना, समय समाप्त +Keywords[nl]=protocol,IO slaves,slaves,network,informatie,timeout,netwerk,tijdslimiet +Keywords[nn]=protokoll,IU-slavar,slavar,nettverk,informasjon,tidsgrense +Keywords[nso]=Molao,Makgoba a IO,Makgoba,Kgokagano,Tshedimoso, Nako e fedile +Keywords[pa]=Protocol,IO slaves,Slaves,Network,Information,Timeout,ਪਰੋਟੋਕਾਲ,ਨੈਟਵਰਕ +Keywords[pl]=Protokół,procedury we/wy,wykonujący operacje we/wy,Sieć,Informacje,Limit czasu +Keywords[pt]=Protocolo,IO slaves,Slaves,Rede,Informações,Timeout,Tempo-limite +Keywords[pt_BR]=Protocolos,escravos de ES,Escravos,Rede,Informações,Timeout +Keywords[ro]=samba,dispozitive I/O,sclavi,rețea,informații +Keywords[rw]=Porotokole,Abagaragu IO,Abagaragu,Urusobemiyoboro,Amakuru, Igihecyarenze +Keywords[se]=protokolla,SO-slávat,slávat,fierbmi,diehtu,dieđut,áigemearri +Keywords[sk]=Protokol,Klienti IO,klienti,Sieť,Informácie +Keywords[sl]=protokol,podrejeni V/I,podrejeni,omrežje,podatki,zakasnitev +Keywords[sr]=Protocol,IO slaves,Slaves,Network,Information,Timeout,протокол,мрежа,информације,прекорачење времена +Keywords[sr@Latn]=Protocol,IO slaves,Slaves,Network,Information,Timeout,protokol,mreža,informacije,prekoračenje vremena +Keywords[sv]=Protokoll,I/O-slavar,Slavar,Nätverk,Information,Timeout,Tidsgräns +Keywords[ta]=நெறிமுறை,IO சேவகன்,சேவகன்கள்,வலைப்பின்னல்,தகவல்,நேரம் முடிந்தது +Keywords[th]=โปรโตคอล,IO slaves,Slaves,ระบบเครือข่าย,ข้อมูล,หมดเวลา +Keywords[tr]=protokol,G/Ç aracısı,aracı,Ağ,Bilgi,zaman aşımı +Keywords[uk]=протокол,підлеглі В/В,підлеглі,мережа,інформація,тайм-аут +Keywords[uz]=Protokol,KCH-sleyvlar,Sleyvlar,Tarmoq,Maʼlumot,Taymaut +Keywords[uz@cyrillic]=Протокол,КЧ-слейвлар,Слейвлар,Тармоқ,Маълумот,Таймаут +Keywords[ven]=Purotokolo,dziphuli dza IO,Dziphuli,Vhudavhidzani,mafhungo,u fhela ha tshifhinga +Keywords[vi]=Giao thức,Đầy tớ Vào ra (VR),Đầy tớ,Mạng,Thông tin,Hạn định thời gian +Keywords[wa]=Protocole,IO slaves,Slaves,rantoele,Informåcion,Timeout +Keywords[xh]=Imithetho elandelwayo,IO izicaka,Izicaka,Umsebenzi womtya,Ulwazi, Ixesha lokuphuma +Keywords[zh_CN]=Protocol,IO slaves,Slaves,Network,Information,Timeout,协议,网络,信息,超时 +Keywords[zh_TW]=Protocol,IO slaves,Slaves,Network,Information,Timeout,協定,網路,資訊,作業逾時 +Keywords[zu]=Umthetho olandelwayo,IO slaves,Izigqila,Uxhumano olusakazekile, Ulwazi,Isikhathi sokuphuma +Name=Protocols +Name[af]=Protokolle +Name[ar]=الموافيق +Name[az]=Protokollar +Name[be]=Пратаколы +Name[bg]=Протоколи +Name[bn]=প্রোটোকল +Name[br]=Komenadoù +Name[bs]=Protokoli +Name[cs]=Protokoly +Name[csb]=Protokòłë +Name[cy]=Protocolau +Name[da]=Protokoller +Name[de]=Ein-/Ausgabemodule +Name[el]=Πρωτόκολλα +Name[eo]=Protokoloj +Name[es]=Protocolos +Name[et]=IO moodulid +Name[eu]=Protokoloak +Name[fa]=قراردادها +Name[fi]=Yhteyskäytännöt +Name[fr]=Protocoles +Name[fy]=Protokollen +Name[ga]=Prótacail +Name[gl]=Protocolos +Name[he]=פרוטוקולים +Name[hi]=प्रोटोकॉल्स +Name[hr]=Protokoli +Name[hu]=Protokollok +Name[id]=Protokol +Name[is]=Samskiptareglur +Name[it]=Protocolli +Name[ja]=プロトコル +Name[ka]=პროტოკოლები +Name[kk]=Протоколдар +Name[km]=ពិធីការ +Name[ko]=프로토콜 +Name[lo]=ໂປຣໂຕຄອລ +Name[lt]=Protokolai +Name[lv]=Protokoli +Name[mk]=Протоколи +Name[mn]=Оролт/Гаралт-модул +Name[ms]=Protokol +Name[mt]=Protokolli +Name[nb]=Protokoller +Name[nds]=Protokollen +Name[ne]=प्रोटोकल +Name[nl]=Protocollen +Name[nn]=Protokollar +Name[nso]=Melao +Name[pa]=ਪਰੋਟੋਕਾਲ +Name[pl]=Protokoły +Name[pt]=Protocolos +Name[pt_BR]=Protocolos +Name[ro]=Protocoale +Name[ru]=Протоколы +Name[rw]=Amaporotocole +Name[se]=Protokollat +Name[sk]=Protokoly +Name[sl]=Protokoli +Name[sr]=Протоколи +Name[sr@Latn]=Protokoli +Name[ss]=Imitsetfo yekutfumela +Name[sv]=Protokoll +Name[ta]=நெறிமுறைகள் +Name[te]=ప్రొటొకాల్లు +Name[tg]=Қарордодҳо +Name[th]=โปรโตคอล +Name[tr]=Protokoller +Name[tt]=Protokollar +Name[uk]=Протоколи +Name[uz]=Protokollar +Name[uz@cyrillic]=Протоколлар +Name[ven]=Purotokolo +Name[vi]=Giao thức +Name[wa]=Protocoles +Name[xh]=Umthetho olandelwayo +Name[zh_CN]=协议 +Name[zh_TW]=協定 +Name[zu]=Imithetho elandelwayo +SwallowExec= +SwallowTitle= +Terminal=false +Type=Application +X-KDE-FactoryName=ioslaveinfo +X-KDE-Library=ioslaveinfo + +X-KDE-ParentApp=kinfocenter + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/ioslaveinfo/kcmioslaveinfo.cpp b/kcontrol/ioslaveinfo/kcmioslaveinfo.cpp new file mode 100644 index 000000000..cb4cfdaea --- /dev/null +++ b/kcontrol/ioslaveinfo/kcmioslaveinfo.cpp @@ -0,0 +1,148 @@ +/* + * kcmioslaveinfo.cpp + * + * Copyright 2001 Alexander Neundorf + * Copyright 2001 George Staikos + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kcmioslaveinfo.h" + +typedef KGenericFactory SlaveFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_ioslaveinfo, SlaveFactory("kcmioslaveinfo") ) + +KCMIOSlaveInfo::KCMIOSlaveInfo(QWidget *parent, const char *name, const QStringList &) + :KCModule(SlaveFactory::instance(), parent,name),m_ioslavesLb(0),m_tfj(0) +{ + QVBoxLayout *layout=new QVBoxLayout(this, 0, KDialog::spacingHint()); + + setQuickHelp( i18n("

IO slaves

Gives you an overview of the installed ioslaves.")); + setButtons( KCModule::Help ); + + QLabel* label=new QLabel(i18n("Available IO slaves:"),this); + QHBox *hbox=new QHBox(this); + m_ioslavesLb=new KListBox(hbox); + m_ioslavesLb->setMinimumSize(fontMetrics().width("blahfaselwhatever----"),10); + connect( m_ioslavesLb, SIGNAL( selectionChanged( QListBoxItem * ) ), SLOT( showInfo( QListBoxItem * ) ) ); + //TODO make something useful after 2.1 is released + m_info=new KTextBrowser(hbox); + hbox->setSpacing(KDialog::spacingHint()); + + layout->addWidget(label); + layout->addWidget(hbox); + hbox->setStretchFactor(m_ioslavesLb,1); + hbox->setStretchFactor(m_info,5); + + QStringList protocols=KProtocolInfo::protocols(); + for (QStringList::Iterator it=protocols.begin(); it!=protocols.end(); ++it) + { + QString proto = *it; + m_ioslavesLb->insertItem( SmallIcon( KProtocolInfo::icon( proto )), + proto ); + }; + m_ioslavesLb->sort(); + m_ioslavesLb->setSelected(0, true); + + setButtons(KCModule::Help); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmioslaveinfo"), + I18N_NOOP("KDE Panel System Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2001 - 2002 Alexander Neundorf")); + + about->addAuthor("Alexander Neundorf", 0, "neundorf@kde.org"); + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + setAboutData( about ); + +} + +void KCMIOSlaveInfo::slaveHelp( KIO::Job *, const QByteArray &data) +{ + if ( data.size() == 0 ) { // EOF + int index = helpData.find( "toUnicode( helpData ); + index = text.find( "
" ); + text = text.mid( index ); + index = text.find( "setText(text); + return; + } + helpData += data; +} + +void KCMIOSlaveInfo::slotResult(KIO::Job *) +{ + m_tfj = 0; +} + +void KCMIOSlaveInfo::showInfo(const QString& protocol) +{ + QString file = QString("kioslave/%1.docbook").arg( protocol ); + file = KGlobal::locale()->langLookup( file ); + if (m_tfj) + { + m_tfj->kill(); + m_tfj = 0; + } + + if (!file.isEmpty()) + { + helpData.truncate( 0 ); + m_tfj = KIO::get( KURL( QString("help:/kioslave/%1.html").arg( protocol ) ), true, false ); + connect( m_tfj, SIGNAL( data( KIO::Job *, const QByteArray &) ), SLOT( slaveHelp( KIO::Job *, const QByteArray &) ) ); + connect( m_tfj, SIGNAL( result( KIO::Job * ) ), SLOT( slotResult( KIO::Job * ) ) ); + return; + } + m_info->setText(i18n("Some info about protocol %1:/ ...").arg(protocol)); +} + +void KCMIOSlaveInfo::showInfo(QListBoxItem *item) +{ + if (item==0) + return; + showInfo( item->text() ); +} + +#include "kcmioslaveinfo.moc" + diff --git a/kcontrol/ioslaveinfo/kcmioslaveinfo.h b/kcontrol/ioslaveinfo/kcmioslaveinfo.h new file mode 100644 index 000000000..87eda14b4 --- /dev/null +++ b/kcontrol/ioslaveinfo/kcmioslaveinfo.h @@ -0,0 +1,61 @@ +/* + * kcmioslaveinfo.h + * + * Copyright 2001 Alexander Neundorf + * Copyright 2001 George Staikos + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#ifndef kcmioslaveinfo_h_included +#define kcmioslaveinfo_h_included + +#include +#include + +#include +#include +#include +#include +#include + +class KIOTimeoutControl; +class QTabWidget; +class QSpinBox; +class KConfig; + +class KCMIOSlaveInfo : public KCModule +{ + Q_OBJECT +public: + KCMIOSlaveInfo(QWidget *parent = 0L, const char *name = 0L, const QStringList &lits=QStringList() ); + +protected: + KListBox *m_ioslavesLb; + KTextBrowser *m_info; + QCString helpData; + KIO::Job *m_tfj; + +protected slots: + + void showInfo(const QString& protocol); + void showInfo(QListBoxItem *item); + void slaveHelp( KIO::Job *, const QByteArray &data); + void slotResult( KIO::Job * ); + +}; +#endif diff --git a/kcontrol/ioslaveinfo/uninstall.desktop b/kcontrol/ioslaveinfo/uninstall.desktop new file mode 100644 index 000000000..e1e3e1732 --- /dev/null +++ b/kcontrol/ioslaveinfo/uninstall.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/kcontrol/joystick/Makefile.am b/kcontrol/joystick/Makefile.am new file mode 100644 index 000000000..269dec101 --- /dev/null +++ b/kcontrol/joystick/Makefile.am @@ -0,0 +1,17 @@ +AM_CPPFLAGS = $(all_includes) +METASOURCES = AUTO + +# Install this plugin in the KDE modules directory +kde_module_LTLIBRARIES = kcm_joystick.la + +kcm_joystick_la_SOURCES = joystick.cpp joywidget.cpp poswidget.cpp joydevice.cpp caldialog.cpp +kcm_joystick_la_LIBADD = $(LIB_KDEUI) +kcm_joystick_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined + +xdg_apps_DATA = joystick.desktop + +messages: + $(XGETTEXT) *.cpp -o $(podir)/joystick.pot + +noinst_HEADERS = joywidget.h joywidget.h poswidget.h joydevice.h caldialog.h + diff --git a/kcontrol/joystick/caldialog.cpp b/kcontrol/joystick/caldialog.cpp new file mode 100644 index 000000000..f8340d03c --- /dev/null +++ b/kcontrol/joystick/caldialog.cpp @@ -0,0 +1,193 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "caldialog.h" +#include "joydevice.h" + +#include +#include +#include +#include + +#include +#include +#include + +//-------------------------------------------------------------- + +CalDialog::CalDialog(QWidget *parent, JoyDevice *joy) + : KDialogBase(parent, "calibrateDialog", true, + i18n("Calibration"), + KDialogBase::Cancel|KDialogBase::User1, KDialogBase::User1, true, KGuiItem(i18n("Next"))), + joydev(joy) +{ + QVBox *main = makeVBoxMainWidget(); + + text = new QLabel(main); + text->setMinimumHeight(200); + valueLbl = new QLabel(main); +} + +//-------------------------------------------------------------- + +void CalDialog::calibrate() +{ + text->setText(i18n("Please wait a moment to calculate the precision")); + setResult(-1); + show(); + + // calibrate precision (which min,max delivers the joystick in its center position) + // get values through the normal idle procedure + QTimer ti; + ti.start(2000, true); // single shot in 2 seconds + + // normally I'd like to hide the 'Next' button in this step, + // but it does not work - which means: in the steps after the first, + // the 'Next' button does not have the focus (to be the default button) + + do + { + qApp->processEvents(2000); + } + while ( ti.isActive() && (result() != QDialog::Rejected) ); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + joydev->calcPrecision(); + + int i, lastVal; + int min[2], center[2], max[2]; + QString hint; + + for (i = 0; i < joydev->numAxes(); i++) + { + if ( i == 0 ) + hint = i18n("(usually X)"); + else if ( i == 1 ) + hint = i18n("(usually Y)"); + else + hint = ""; + + // minimum position + text->setText(i18n("Calibration is about to check the value range your device delivers.

" + "Please move axis %1 %2 on your device to the minimum position.

" + "Press any button on the device or click on the 'Next' button " + "to continue with the next step.
").arg(i+1).arg(hint)); + waitButton(i, true, lastVal); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + joydev->resetMinMax(i, lastVal); + if ( result() != -2 ) waitButton(i, false, lastVal); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + min[0] = joydev->axisMin(i); + min[1] = joydev->axisMax(i); + + // center position + text->setText(i18n("Calibration is about to check the value range your device delivers.

" + "Please move axis %1 %2 on your device to the center position.

" + "Press any button on the device or click on the 'Next' button " + "to continue with the next step.
").arg(i+1).arg(hint)); + waitButton(i, true, lastVal); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + joydev->resetMinMax(i, lastVal); + if ( result() != -2 ) waitButton(i, false, lastVal); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + center[0] = joydev->axisMin(i); + center[1] = joydev->axisMax(i); + + // maximum position + text->setText(i18n("Calibration is about to check the value range your device delivers.

" + "Please move axis %1 %2 on your device to the maximum position.

" + "Press any button on the device or click on the 'Next' button " + "to continue with the next step.
").arg(i+1).arg(hint)); + waitButton(i, true, lastVal); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + joydev->resetMinMax(i, lastVal); + if ( result() != -2 ) waitButton(i, false, lastVal); + + if ( result() == QDialog::Rejected ) return; // user cancelled the dialog + + max[0] = joydev->axisMin(i); + max[1] = joydev->axisMax(i); + + joydev->calcCorrection(i, min, center, max); + } + + JoyDevice::ErrorCode ret = joydev->applyCalibration(); + + if ( ret != JoyDevice::SUCCESS ) + { + KMessageBox::error(this, joydev->errText(ret), i18n("Communication Error")); + reject(); + } + + KMessageBox::information(this, i18n("You have successfully calibrated your device"), i18n("Calibration Success")); + accept(); +} + +//-------------------------------------------------------------- + +void CalDialog::waitButton(int axis, bool press, int &lastVal) +{ + JoyDevice::EventType type; + int number, value; + bool button = false; + lastVal = 0; + + setResult(-1); + // loop until the user presses a button on the device or on the dialog + do + { + qApp->processEvents(100); + + if ( joydev->getEvent(type, number, value) ) + { + button = ( (type == JoyDevice::BUTTON) && (press ? (value == 1) : (value == 0)) ); + + if ( (type == JoyDevice::AXIS) && (number == axis) ) + valueLbl->setText(i18n("Value Axis %1: %2").arg(axis+1).arg(lastVal = value)); + } + } + while ( !button && (result() == -1) ); +} + +//-------------------------------------------------------------- +// Next button + +void CalDialog::slotUser1() +{ + setResult(-2); +} + +//-------------------------------------------------------------- + +#include "caldialog.moc" + +//-------------------------------------------------------------- diff --git a/kcontrol/joystick/caldialog.h b/kcontrol/joystick/caldialog.h new file mode 100644 index 000000000..678a0a2d1 --- /dev/null +++ b/kcontrol/joystick/caldialog.h @@ -0,0 +1,54 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef _CALDIALOG_H_ +#define _CALDIALOG_H_ + +#include + +class QLabel; + +class JoyDevice; + +// the dialog which tells the user all steps to calibrate the device + +class CalDialog : public KDialogBase +{ + Q_OBJECT + + public: + CalDialog(QWidget *parent, JoyDevice *joy); + + void calibrate(); + + private: + void waitButton(int axis, bool press, int &lastVal); + + private slots: + virtual void slotUser1(); + + private: + JoyDevice *joydev; + + QLabel *text; + QLabel *valueLbl; +}; + +#endif diff --git a/kcontrol/joystick/configure.in.in b/kcontrol/joystick/configure.in.in new file mode 100644 index 000000000..a76ab434a --- /dev/null +++ b/kcontrol/joystick/configure.in.in @@ -0,0 +1,7 @@ +case "$host" in + *-*-linux*) + FOUND_LINUX=yes + ;; +esac + +AM_CONDITIONAL(include_kcontrol_joystick, test "$FOUND_LINUX" = "yes") diff --git a/kcontrol/joystick/joydevice.cpp b/kcontrol/joystick/joydevice.cpp new file mode 100644 index 000000000..2c1a16ce7 --- /dev/null +++ b/kcontrol/joystick/joydevice.cpp @@ -0,0 +1,397 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "joydevice.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//-------------------------------------------------------------- + +JoyDevice::JoyDevice(const QString &devicefile) + : devName(devicefile), joyFd(-1), buttons(0), axes(0), + amin(0), amax(0), corr(0), origCorr(0) +{ +} + +//-------------------------------------------------------------- + +QString JoyDevice::errText(ErrorCode code) const +{ + switch ( code ) + { + case SUCCESS: return ""; + + case OPEN_FAILED: + { + return i18n("The given device %1 could not be opened: %2") + .arg(devName).arg(strerror(errno)); + } + + case NO_JOYSTICK: + { + return i18n("The given device %1 is not a joystick.").arg(devName); + } + + case ERR_GET_VERSION: + { + return i18n("Could not get kernel driver version for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + case WRONG_VERSION: + { + int version = 0; + int fd = ::open(devName.latin1(), O_RDONLY); + if ( fd != -1 ) + { + ::ioctl(fd, JSIOCGVERSION, &version); + ::close(fd); + } + + return i18n("The current running kernel driver version (%1.%2.%3) is not the one this module was compiled for (%4.%5.%6).") + .arg(version >> 16).arg((version >> 8) & 0xFF).arg(version & 0xFF) + .arg(JS_VERSION >> 16).arg((JS_VERSION >> 8) & 0xFF).arg(JS_VERSION & 0xFF); + } + + case ERR_GET_BUTTONS: + { + return i18n("Could not get number of buttons for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + case ERR_GET_AXES: + { + return i18n("Could not get number of axes for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + case ERR_GET_CORR: + { + return i18n("Could not get calibration values for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + case ERR_RESTORE_CORR: + { + return i18n("Could not restore calibration values for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + case ERR_INIT_CAL: + { + return i18n("Could not initialize calibration values for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + case ERR_APPLY_CAL: + { + return i18n("Could not apply calibration values for joystick device %1: %2") + .arg(devName).arg(strerror(errno)); + } + + default: return i18n("internal error - code %1 unknown").arg(int(code)); + } +} + +//-------------------------------------------------------------- + +JoyDevice::ErrorCode JoyDevice::open() +{ + if ( joyFd != -1 ) return JoyDevice::SUCCESS; // already open + + int fd = ::open(devName.latin1(), O_RDONLY); + + if ( fd == -1 ) + return JoyDevice::OPEN_FAILED; + + // we could open the devicefile, now check if a joystick is attached + char name[128]; + + if ( ::ioctl(fd, JSIOCGNAME(sizeof(name)), &name) == -1 ) + { + ::close(fd); + return JoyDevice::NO_JOYSTICK; + } + + // check the kernel driver version + int version; + if ( ::ioctl(fd, JSIOCGVERSION, &version) == -1 ) + { + ::close(fd); + return JoyDevice::ERR_GET_VERSION; + } + + if ( version != JS_VERSION ) + { + ::close(fd); + return JoyDevice::WRONG_VERSION; + } + + char bt = 0, ax = 0; + if ( ::ioctl(fd, JSIOCGBUTTONS, &bt) == -1 ) + { + ::close(fd); + return JoyDevice::ERR_GET_BUTTONS; + } + + if ( ::ioctl(fd, JSIOCGAXES, &ax) == -1 ) + { + ::close(fd); + return JoyDevice::ERR_GET_AXES; + } + + struct js_corr *oldCorr = new struct js_corr[ax]; + + if ( ::ioctl(fd, JSIOCGCORR, oldCorr) == -1 ) + { + ::close(fd); + delete [] oldCorr; + return JoyDevice::ERR_GET_CORR; + } + + descr = name; + joyFd = fd; + axes = ax; + buttons = bt; + origCorr = oldCorr; + corr = new struct js_corr[axes]; + + amin = new int[axes]; + amax = new int[axes]; + + int i; + + for (i = 0; i < axes; i++) + resetMinMax(i); + + return JoyDevice::SUCCESS; +} + +//-------------------------------------------------------------- + +void JoyDevice::close() +{ + if ( joyFd == -1 ) return; + + ::close(joyFd); + + joyFd = -1; + descr = ""; + + delete [] amin; + delete [] amax; + amin = 0; + amax = 0; + + delete [] corr; + corr = 0; + delete [] origCorr; + origCorr = 0; +} + +//-------------------------------------------------------------- + +int JoyDevice::axisMin(int axis) const +{ + if ( (axis < 0) || (axis >= axes) ) return 0; + + return amin[axis]; +} + +//-------------------------------------------------------------- + +int JoyDevice::axisMax(int axis) const +{ + if ( (axis < 0) || (axis >= axes) ) return 0; + + return amax[axis]; +} + +//-------------------------------------------------------------- + +JoyDevice::ErrorCode JoyDevice::initCalibration() +{ + if ( joyFd == -1 ) return JoyDevice::ERR_INIT_CAL; + + int i; + + // Reset all current correction values + for (i = 0; i < axes; i++) + { + corr[i].type = JS_CORR_NONE; + corr[i].prec = 0; + } + + if ( ::ioctl(joyFd, JSIOCSCORR, corr) == -1 ) + return JoyDevice::ERR_INIT_CAL; + + for (i = 0; i < axes; i++) + corr[i].type = JS_CORR_BROKEN; + + return JoyDevice::SUCCESS; +} + +//-------------------------------------------------------------- + +JoyDevice::ErrorCode JoyDevice::applyCalibration() +{ + if ( joyFd == -1 ) return JoyDevice::ERR_APPLY_CAL; + + if ( ::ioctl(joyFd, JSIOCSCORR, corr) == -1 ) + return JoyDevice::ERR_APPLY_CAL; + + return JoyDevice::SUCCESS; +} + +//-------------------------------------------------------------- + +void JoyDevice::resetMinMax(int axis, int value) +{ + amin[axis] = value; + amax[axis] = value; +} + +//-------------------------------------------------------------- + +void JoyDevice::calcPrecision() +{ + if ( !corr ) return; + + int i; + + for (i = 0; i < axes; i++) + { + corr[i].prec = amax[i] - amin[i]; + kdDebug() << "Precision for axis: " << i << ": " << corr[i].prec << endl; + } +} + +//-------------------------------------------------------------- + +JoyDevice::ErrorCode JoyDevice::restoreCorr() +{ + if ( joyFd == -1 ) return JoyDevice::SUCCESS; + + if ( ::ioctl(joyFd, JSIOCSCORR, origCorr) == -1 ) + return JoyDevice::ERR_RESTORE_CORR; + else + return JoyDevice::SUCCESS; +} + +//-------------------------------------------------------------- + +JoyDevice::~JoyDevice() +{ + close(); +} + +//-------------------------------------------------------------- + +bool JoyDevice::getEvent(JoyDevice::EventType &type, int &number, int &value) +{ + number = value = 0; + + int ret; + + fd_set readSet; + + FD_ZERO(&readSet); + FD_SET(joyFd, &readSet); + + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 100000; + + ret = ::select(joyFd + 1, &readSet, 0, 0, &timeout); + + if ( ret == 1 ) // got an event from the joystick + { + struct js_event e; + + if ( ::read(joyFd, &e, sizeof(struct js_event)) == sizeof(struct js_event) ) + { + if ( e.type & JS_EVENT_BUTTON ) + { + type = JoyDevice::BUTTON; + value = e.value; + number = e.number; + + return true; + } + + if ( e.type & JS_EVENT_AXIS ) + { + type = JoyDevice::AXIS; + value = e.value; + number = e.number; + + // store min, max values + if ( e.value < amin[number] ) amin[number] = e.value; + if ( e.value > amax[number] ) amax[number] = e.value; + + return true; + } + } + } + + return false; // no event +} + +//-------------------------------------------------------------- + +void JoyDevice::calcCorrection(int axis, int *min, int *center, int *max) +{ + const int MIN = 0; + const int MAX = 1; + + double a, b, c, d; + + a = center[MIN]; // inputs.cmin[1]; + b = center[MAX]; // inputs.cmax[1]; + c = 32767.0 / (center[MIN] - min[MAX]); // (inputs.cmin[1] - inputs.cmax[0]); + d = 32767.0 / (max[MIN] - center[MAX]); // (inputs.cmin[2] - inputs.cmax[1]); + + corr[axis].coef[0] = (int)rint(a); + corr[axis].coef[1] = (int)rint(b); + corr[axis].coef[2] = (int)rint(c*16384.0); + corr[axis].coef[3] = (int)rint(d*16384.0); + + kdDebug() << "min min: " << min[0] << " max: " << min[1] << endl; + kdDebug() << "max min: " << max[0] << " max: " << max[1] << endl; + kdDebug() << "Correction values for axis: " << axis << ": " + << corr[axis].coef[0] << ", " + << corr[axis].coef[1] << ", " + << corr[axis].coef[2] << ", " + << corr[axis].coef[3] << endl; +} + +//-------------------------------------------------------------- diff --git a/kcontrol/joystick/joydevice.h b/kcontrol/joystick/joydevice.h new file mode 100644 index 000000000..b84464241 --- /dev/null +++ b/kcontrol/joystick/joydevice.h @@ -0,0 +1,110 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef _JOYDEVICE_H_ +#define _JOYDEVICE_H_ + +#include + +#include +#undef __STRICT_ANSI__ +#include +#define __STRICT_ANSI__ + +// helper class which holds all current values, file descriptor, etc. for +// one device +class JoyDevice +{ + public: + enum ErrorCode + { + SUCCESS, + OPEN_FAILED, + NO_JOYSTICK, + WRONG_VERSION, + ERR_GET_VERSION, + ERR_GET_BUTTONS, + ERR_GET_AXES, + ERR_GET_CORR, + ERR_RESTORE_CORR, + ERR_INIT_CAL, + ERR_APPLY_CAL + }; + + enum EventType + { + BUTTON, + AXIS + }; + + // devicefile to use, e.g. "/dev/js0" + JoyDevice(const QString &devicefile); + ~JoyDevice(); + + // returns one of the error-codes from above + ErrorCode open(); + + // return descriptive error text for given error code + QString errText(ErrorCode code) const; + + int fd() const { return joyFd; } + void close(); + ErrorCode restoreCorr(); + + // return devicefilename from constructor + const QString &device() const { return devName; } + + // descriptive text for this device read from the driver + QString text() const { return descr; } + + int numButtons() const { return buttons; } + int numAxes() const { return axes; } + int axisMin(int axis) const; + int axisMax(int axis) const; + + // read next event from device; returns true if there was an event during the short timeout + bool getEvent(JoyDevice::EventType &type, int &number, int &value); + + // methods for calibration + ErrorCode initCalibration(); // must be called first + void calcPrecision(); + + void resetMinMax(int axis, int value = 0); + + // calculate correction values + // min[2], center[2], max[2], index 0 == minimum, index 1 == maximum + void calcCorrection(int axis, int *min, int *center, int *max); + ErrorCode applyCalibration(); + + private: + QString devName; // device filename + QString descr; // descriptive text + int joyFd; + + int buttons; + int axes; + int *amin; // axes min values + int *amax; // axes max values + + struct js_corr *corr; // calibration values during the calib. steps + struct js_corr *origCorr; // original calibration correction values +}; + +#endif diff --git a/kcontrol/joystick/joystick.cpp b/kcontrol/joystick/joystick.cpp new file mode 100644 index 000000000..75115fcb7 --- /dev/null +++ b/kcontrol/joystick/joystick.cpp @@ -0,0 +1,123 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include + +#include "joystick.h" +#include "joywidget.h" +#include "joydevice.h" + +//--------------------------------------------------------------------------------------------- + +typedef KGenericFactory JoystickFactory; +K_EXPORT_COMPONENT_FACTORY(kcm_joystick, JoystickFactory("joystick")) + +extern "C" +{ + KDE_EXPORT bool test_joystick() + { /* Code stolen from JoyWidget::init() */ + int i; + char dev[30]; + + for (i = 0; i < 5; i++) // check the first 5 devices + { + sprintf(dev, "/dev/js%d", i); // first look in /dev + JoyDevice *joy = new JoyDevice(dev); + + if ( joy->open() != JoyDevice::SUCCESS ) + { + delete joy; + sprintf(dev, "/dev/input/js%d", i); // then look in /dev/input + joy = new JoyDevice(dev); + + if ( joy->open() != JoyDevice::SUCCESS ) + { + delete joy; + continue; // try next number + } + } + + return true; /* We have at least one joystick and should hence be shown */ + } + return false; + } +} + +//--------------------------------------------------------------------------------------------- + +joystick::joystick(QWidget *parent, const char *name, const QStringList &) + : KCModule(JoystickFactory::instance(), parent, name) +{ + setAboutData( new KAboutData("kcmjoystick", I18N_NOOP("KDE Joystick Control Module"), "1.0", + I18N_NOOP("KDE Control Center Module to test Joysticks"), + KAboutData::License_GPL, "(c) 2004, Martin Koller", + 0, "m.koller@surfeu.at")); + + setQuickHelp( i18n("

Joystick

" + "This module helps to check if your joystick is working correctly.
" + "If it delivers wrong values for the axes, you can try to solve this with " + "the calibration.
" + "This module tries to find all available joystick devices " + "by checking /dev/js[0-4] and /dev/input/js[0-4]
" + "If you have another device file, enter it in the combobox.
" + "The Buttons list shows the state of the buttons on your joystick, the Axes list " + "shows the current value for all axes.
" + "NOTE: the current Linux device driver (Kernel 2.4, 2.6) can only autodetect" + "
    " + "
  • 2-axis, 4-button joystick
  • " + "
  • 3-axis, 4-button joystick
  • " + "
  • 4-axis, 4-button joystick
  • " + "
  • Saitek Cyborg 'digital' joysticks
  • " + "
" + "(For details you can check your Linux source/Documentation/input/joystick.txt)" + )); + + joyWidget = new JoyWidget(this); + + setMinimumSize(joyWidget->minimumSize()); + + setButtons(KCModule::Default); +} + +//--------------------------------------------------------------------------------------------- + +void joystick::load() +{ + joyWidget->init(); +} + +//--------------------------------------------------------------------------------------------- + +void joystick::defaults() +{ + joyWidget->resetCalibration(); + + emit changed(true); +} + +//--------------------------------------------------------------------------------------------- + +//--------------------------------------------------------------------------------------------- + +#include "joystick.moc" diff --git a/kcontrol/joystick/joystick.desktop b/kcontrol/joystick/joystick.desktop new file mode 100644 index 000000000..92166c544 --- /dev/null +++ b/kcontrol/joystick/joystick.desktop @@ -0,0 +1,177 @@ +[Desktop Entry] +Comment=joystick - a kcontrol module to test joysticks +Comment[af]=joystick - 'n beheer module om joysticks mee te toets +Comment[be]=Модуль настаўлення джойстыка +Comment[bg]=Настройване на джойстика +Comment[bn]=joystick - জয়-স্টিক পরীক্ষা করার জন্য একটি নিয়ন্ত্রণ মডিউল +Comment[bs]=joystick - KControl modul za testiranje džojstika +Comment[ca]=Joystick - un mòdul de kcontrol per a provar palanques de control +Comment[cs]=Ovládací modul pro testování joysticků +Comment[csb]=joystick - mòduł Centróm kòntrolë dlô testowaniô joysticków +Comment[cy]=joystick - modiwl kcontrol i brofi ffyn rheoli +Comment[da]=joystick - et kcontrol modul til at test joystick +Comment[de]=Joystick-Testmodul +Comment[el]=χειριστήριο - ένα άρθρωμα ελέγχου χειριστηρίων +Comment[eo]=stirstango - kontrola modulo por testi stirstangojn +Comment[es]=joystick - un módulo de kcontrol para probar joysticks +Comment[et]=juhtpult - KDE juhtimiskeskuse moodul juhtpultide testimiseks +Comment[eu]=joystick - joystickak aztertzeko kontrol modulua +Comment[fa]=اهرم کنترل - پیمانۀ kcontrol برای آزمایش اهرمهای کنترل +Comment[fi]=peliohjain - KDE:n ohjauskeskuksen moduuli peliohjainta varten +Comment[fr]=joystick - un module pour tester les joysticks +Comment[fy]=joystick - in Konfiguraasjemodule foar it teste fan joysticks +Comment[gl]=joystick - un módulo de kcontrol para probar joysticks +Comment[he]=ג'ויסטיק - מודול לבדיקת ג'ויסטיקים +Comment[hi]=जॉयस्टिक - जॉयस्टिक को जाँचने का एक के-कंट्रोल मॉड्यूल +Comment[hr]=joystick - kcontrol modul za ispitivanje igraće palice +Comment[hu]=Botkormányok tesztelése, kalibrálása +Comment[is]=joystick - kcontrol stjórneining til að prófa stýripinna +Comment[it]=joystick - un modulo di kcontrol per provare i joystick +Comment[ja]=ジョイスティックをテストする kcontrol モジュール +Comment[ka]=joystick - kcontrol მოდული ჯოისტიკის ტესტირებისთვის +Comment[kk]=joystick - джойстикты сынау kcontrol модулі +Comment[km]=យ៉យស្ទីក - ម៉ូឌុល kcontrol ដើម្បី​សាកល្បង​យ៉យស្ទីក +Comment[ko]=joystick - 조이스틱을 테스트하기 위한 kcontrol 모듈 +Comment[lt]=valdymo svirtis - kcontrol modulis valdymo svirčių išbandymui +Comment[lv]=kursorsvira - kkontroles modulis kursorsviru testēšanai +Comment[mk]=joystick - модул на kcontrol за тестирање џојстици +Comment[mt]=joystick - modulu ta' kcontrol biex tittestja joysticks +Comment[nb]=Styrepinne – en kcontrolmodul for å prøve ut styrepinner +Comment[nds]=joystick - Moduul för't Utproberen vun Joysticks +Comment[ne]=जोयस्टिक - जोयस्टिक परीक्षण गर्ने के नियन्त्रण मोड्युल +Comment[nl]=joystick - een configuratiemodule voor het testen van joysticks +Comment[nn]=Styrespak – ein kontrollmodul for å prøva ut styrepinnar +Comment[pa]=joystick - ਜਾਏਸਟਿੱਕ ਜਾਂਚ ਲਈ ਕੇਕੰਟਰੋਲ ਮੈਡੀਊਲ +Comment[pl]=joystick - moduł Centrum sterowania do testowania joysticków +Comment[pt]=joystick - um módulo do kcontrol para testar joysticks +Comment[pt_BR]=joystick - um módulo de controle para testes de joysticks +Comment[ro]=Un modul pentru testarea joystick-urilor +Comment[ru]=joystick - модуль kcontrol для проверки джойстика +Comment[rw]=Agakoreshamukino - igice cya k-igenzura mu gusuzuma udukoreshamikino +Comment[se]=Stivrensággi – stivrenmoduvla mainna geahččala stivrensákkiid +Comment[sk]=Ovládací modul pre test joysticku +Comment[sl]=joystick - modul Nadzornega središča za preizkus igralnih palic +Comment[sr]=џојстик - модул контролног центра за тестирање џојстика +Comment[sr@Latn]=džojstik - modul kontrolnog centra za testiranje džojstika +Comment[sv]=Styrspak: en inställningsmodul för att testa styrspakar +Comment[ta]=இயக்கும் கருவி - கேகண்ட்ரோல் கூறு இயக்கும் கருவியை பரிசோதிக்கிறது +Comment[tg]=ҷостик - модули kидора барои санҷиши ҷостикҳо +Comment[th]=จอยสติก - โมดูลของศูนย์ควบคุม KDE สำหรับตรวจสอบจอยสติก +Comment[tr]=oyun kumandası - oyun kumandalarını denemek için bir kcontrol modülü +Comment[tt]=Joystik sınaw öçen kcontrol modulı +Comment[uk]=Джойстик - модуль центру керування для тестування джойстиків +Comment[uz]=Joystik uchun boshqaruv moduli +Comment[uz@cyrillic]=Жойстик учун бошқарув модули +Comment[vi]=cần điều khiển - một mô đun điều khiển KDE đêr kiểm tra cần lái +Comment[wa]=djîsse di djeu - on module di kcontrol po sayî les djîsses di djeu +Comment[zh_CN]=joystick - 测试游戏杆的 kcontrol 模块 +Comment[zh_TW]=搖桿 - 用來測試搖桿的 kcontrol 模組 +Exec=kcmshell joystick +Keywords=joystick,gamepad +Keywords[be]=Джойстык,joystick,gamepad +Keywords[bg]=джойстик, игра, игри, управление, joystick, gamepad +Keywords[bs]=joystick,gamepad,džojstik +Keywords[csb]=joystick,gamepad,dżojstik +Keywords[cy]=ffôn reoli,pad gêm +Keywords[da]=joystick,spilleplade +Keywords[de]=Joystick,Gamepad,Spiele +Keywords[el]=χειριστήριο,χειριστήριο κονσόλας παιχνιδιών +Keywords[eo]=stirstango,stirstangoj,ludotabuleto +Keywords[et]=juhtpult,mängupult +Keywords[fa]=اهرم کنترل، صفحه بازی +Keywords[fi]=joystick,peliohjain +Keywords[fr]=joystick,gamepad,manette de jeu +Keywords[ga]=luamhán stiúrtha,ceap cluiche +Keywords[he]=joystick,gamepad,ג'ויסטיק,גויסטיק +Keywords[hi]=जॉयस्टिक,गेमपेड +Keywords[hr]=joystick,gamepad,igraća palica,igraća konzola +Keywords[hu]=botkormány,joystick,gamepad +Keywords[is]=joystick,gamepad,stýripinni +Keywords[ja]=joystick,gamepad,ジョイスティック,ゲームパッド +Keywords[km]=យ៉យស្ទីក,បន្ទះ​ល្បែង +Keywords[lt]=valdymo svirtis, joystick,gamepad +Keywords[lv]=kursorsvira,spēļu pults +Keywords[nb]=styrepinne,spillkontroll +Keywords[ne]=जोयस्टिक, गेमप्याड +Keywords[nn]=styrespak,spelkontroll +Keywords[pa]=joystick,gamepad,ਜਾਏਸਟਿੱਕ +Keywords[pl]=joystick,gamepad,dżojstik +Keywords[pt_BR]=joystick,gamepad, jogos +Keywords[rw]=agakoreshamukino, umwanyaumukino +Keywords[se]=stivrensággi,speallanstivrran +Keywords[sl]=joystick,gamepad,igralna palica,igralni plošček +Keywords[sr]=joystick,gamepad,џојстик +Keywords[sr@Latn]=joystick,gamepad,džojstik +Keywords[sv]=styrspak,spelkonsol +Keywords[ta]=இயக்கும் கருவி, விளையாட்டு பலகை +Keywords[te]=జాయ్ స్టిక్, గేమ్ పాడ్ +Keywords[th]=จอยสติก,แป้นคุมเกม,gamepad +Keywords[tr]=oyun çubuğu +Keywords[uk]=джойстик,gamepad +Keywords[uz]=joystik,geympad +Keywords[uz@cyrillic]=жойстик,геймпад +Keywords[vi]=cần điều khiển,bàn điều khiển trò chơi +Keywords[wa]=joystick,gamepad,djîsse,djîsse di djeu +Keywords[zh_CN]=joystick,gamepad,游戏杆,手柄 +Keywords[zh_TW]=joystick,gamepad,搖桿,遊戲台 +Name=Joystick +Name[be]=Джойстык +Name[bg]=Джойстик +Name[bn]=জয়-স্টিক +Name[br]=Lanker-c'hoari +Name[ca]=Palanca de control +Name[cy]=Ffôn reoli +Name[el]=Χειριστήριο +Name[eo]=Stirstango +Name[et]=Juhtpult +Name[fa]=اهرم کنترل +Name[fi]=Peliohjain +Name[ga]=Luamhán Stiúrtha +Name[he]=ג'ויסטיק +Name[hi]=जॉयस्टिक +Name[hr]=Igraća palica +Name[hu]=Botkormány +Name[is]=Stýripinnar +Name[ja]=ジョイスティック +Name[ka]=ჯოისტიკი +Name[kk]=Джойстик +Name[km]=យ៉យស្ទីក +Name[ko]=조이스틱 +Name[lo]=จอยสติ๊ก +Name[lt]=Valdymo svirtis +Name[lv]=Kursorsvira +Name[ms]=Kayu Bidik +Name[nb]=Styrepinne +Name[ne]=जोयस्टिक +Name[nn]=Styrespak +Name[oc]=Palanca de jogs +Name[pa]=ਜਾਏਸਟਿੱਕ +Name[ru]=Джойстик +Name[rw]=Agakoreshamukino +Name[se]=Stivrensággi +Name[sl]=Igralna palica +Name[sr]=Џојстик +Name[sr@Latn]=Džojstik +Name[sv]=Styrspak +Name[ta]=இயக்கு கருவி +Name[te]=జాయ్ స్టిక్ +Name[th]=จอยสติก +Name[tr]=Oyun Çubuğu +Name[tt]=Joystik +Name[uk]=Джойстик +Name[uz]=Joystik +Name[uz@cyrillic]=Жойстик +Name[ven]=Thambo dzau tumanya na tshishumiswa +Name[vi]=Cần điều khiển +Name[wa]=Djîsse di djeu +Name[xh]=Uvuyo +Name[zh_CN]=游戏杆 +Name[zh_TW]=玩具 +Name[zu]=Induku yenjabulo +Terminal=false +Type=Application +X-KDE-FactoryName=kcm_joystick +X-KDE-Library=joystick +X-KDE-Test-Module=true +Icon=joystick +Categories=Qt;KDE;X-KDE-settings-hardware; diff --git a/kcontrol/joystick/joystick.h b/kcontrol/joystick/joystick.h new file mode 100644 index 000000000..819a5f70d --- /dev/null +++ b/kcontrol/joystick/joystick.h @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef _JOYSTICK_H_ +#define _JOYSTICK_H_ + +#include + +class JoyWidget; + +class joystick: public KCModule +{ + Q_OBJECT + + public: + joystick(QWidget *parent = 0, const char *name = 0, const QStringList &list = QStringList()); + + virtual void load(); + virtual void defaults(); + + private: + JoyWidget *joyWidget; +}; + +#endif diff --git a/kcontrol/joystick/joywidget.cpp b/kcontrol/joystick/joywidget.cpp new file mode 100644 index 000000000..a4d42e3f1 --- /dev/null +++ b/kcontrol/joystick/joywidget.cpp @@ -0,0 +1,379 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#include "joywidget.h" +#include "joydevice.h" +#include "poswidget.h" +#include "caldialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +//-------------------------------------------------------------- +static QString PRESSED = I18N_NOOP("PRESSED"); +//-------------------------------------------------------------- + +JoyWidget::JoyWidget(QWidget *parent, const char *name) + : QWidget(parent, name), idle(0), joydev(0) +{ + QVBox *mainVbox = new QVBox(parent); + mainVbox->setSpacing(KDialog::spacingHint()); + + // create area to show an icon + message if no joystick was detected + { + messageBox = new QHBox(mainVbox); + messageBox->setSpacing(KDialog::spacingHint()); + QLabel *icon = new QLabel(messageBox); + icon->setPixmap(KGlobal::iconLoader()->loadIcon("messagebox_warning", KIcon::NoGroup, + KIcon::SizeMedium, KIcon::DefaultState, 0, true)); + icon->setFixedSize(icon->sizeHint()); + message = new QLabel(messageBox); + messageBox->hide(); + } + + QHBox *devHbox = new QHBox(mainVbox); + new QLabel(i18n("Device:"), devHbox); + device = new QComboBox(true, devHbox); + device->setInsertionPolicy(QComboBox::NoInsertion); + connect(device, SIGNAL(activated(const QString &)), this, SLOT(deviceChanged(const QString &))); + devHbox->setStretchFactor(device, 3); + + QHBox *hbox = new QHBox(mainVbox); + hbox->setSpacing(KDialog::spacingHint()); + + QVBox *vboxLeft = new QVBox(hbox); + vboxLeft->setSpacing(KDialog::spacingHint()); + + new QLabel(i18n("Position:"), vboxLeft); + xyPos = new PosWidget(vboxLeft); + trace = new QCheckBox(i18n("Show trace"), mainVbox); + connect(trace, SIGNAL(toggled(bool)), this, SLOT(traceChanged(bool))); + + QVBox *vboxMid = new QVBox(hbox); + vboxMid->setSpacing(KDialog::spacingHint()); + + QVBox *vboxRight = new QVBox(hbox); + vboxRight->setSpacing(KDialog::spacingHint()); + + // calculate the column width we need + QFontMetrics fm(font()); + int colWidth = QMAX(fm.width(PRESSED), fm.width("-32767")) + 10; // -32767 largest string + + new QLabel(i18n("Buttons:"), vboxMid); + buttonTbl = new QTable(0, 1, vboxMid); + buttonTbl->setReadOnly(true); + buttonTbl->horizontalHeader()->setLabel(0, i18n("State")); + buttonTbl->horizontalHeader()->setClickEnabled(false); + buttonTbl->horizontalHeader()->setResizeEnabled(false); + buttonTbl->verticalHeader()->setClickEnabled(false); + buttonTbl->verticalHeader()->setResizeEnabled(false); + buttonTbl->setColumnWidth(0, colWidth); + + new QLabel(i18n("Axes:"), vboxRight); + axesTbl = new QTable(0, 1, vboxRight); + axesTbl->setReadOnly(true); + axesTbl->horizontalHeader()->setLabel(0, i18n("Value")); + axesTbl->horizontalHeader()->setClickEnabled(false); + axesTbl->horizontalHeader()->setResizeEnabled(false); + axesTbl->verticalHeader()->setClickEnabled(false); + axesTbl->verticalHeader()->setResizeEnabled(false); + axesTbl->setColumnWidth(0, colWidth); + + // calibrate button + calibrate = new QPushButton(i18n("Calibrate"), mainVbox); + connect(calibrate, SIGNAL(clicked()), this, SLOT(calibrateDevice())); + calibrate->setEnabled(false); + + // set up a timer for idle processing of joystick events + idle = new QTimer(this); + connect(idle, SIGNAL(timeout()), this, SLOT(checkDevice())); + + // check which devicefiles we have + init(); + + vboxLeft->adjustSize(); + vboxMid->adjustSize(); + vboxRight->adjustSize(); + hbox->adjustSize(); + mainVbox->adjustSize(); + + setMinimumSize(mainVbox->size()); +} + +//-------------------------------------------------------------- + +JoyWidget::~JoyWidget() +{ + delete joydev; +} + +//-------------------------------------------------------------- + +void JoyWidget::init() +{ + // check which devicefiles we have + int i; + bool first = true; + char dev[30]; + + device->clear(); + buttonTbl->setNumRows(0); + axesTbl->setNumRows(0); + + for (i = 0; i < 5; i++) // check the first 5 devices + { + sprintf(dev, "/dev/js%d", i); // first look in /dev + JoyDevice *joy = new JoyDevice(dev); + + if ( joy->open() != JoyDevice::SUCCESS ) + { + delete joy; + sprintf(dev, "/dev/input/js%d", i); // then look in /dev/input + joy = new JoyDevice(dev); + + if ( joy->open() != JoyDevice::SUCCESS ) + { + delete joy; + continue; // try next number + } + } + + // we found one + + device->insertItem(QString("%1 (%2)").arg(joy->text()).arg(joy->device())); + + // display values for first device + if ( first ) + { + showDeviceProps(joy); // this sets the joy object into this->joydev + first = false; + } + else + delete joy; + } + + /* KDE 4: Remove this check(and i18n) when all KCM wrappers properly test modules */ + if ( device->count() == 0 ) + { + messageBox->show(); + message->setText(QString("%1").arg( + i18n("No joystick device automatically found on this computer.
" + "Checks were done in /dev/js[0-4] and /dev/input/js[0-4]
" + "If you know that there is one attached, please enter the correct device file."))); + } +} + +//-------------------------------------------------------------- + +void JoyWidget::traceChanged(bool state) +{ + xyPos->showTrace(state); +} + +//-------------------------------------------------------------- + +void JoyWidget::restoreCurrDev() +{ + if ( !joydev ) // no device open + { + device->setCurrentText(""); + calibrate->setEnabled(false); + } + else + { + // try to find the current open device in the combobox list + QListBoxItem *item; + item = device->listBox()->findItem(joydev->device(), Qt::Contains); + + if ( !item ) // the current open device is one the user entered (not in the list) + device->setCurrentText(joydev->device()); + else + device->setCurrentText(item->text()); + } +} + +//-------------------------------------------------------------- + +void JoyWidget::deviceChanged(const QString &dev) +{ + // find "/dev" in given string + int start, stop; + QString devName; + + if ( (start = dev.find("/dev")) == -1 ) + { + KMessageBox::sorry(this, + i18n("The given device name is invalid (does not contain /dev).\n" + "Please select a device from the list or\n" + "enter a device file, like /dev/js0."), i18n("Unknown Device")); + + restoreCurrDev(); + return; + } + + if ( (stop = dev.find(")", start)) != -1 ) // seems to be text selected from our list + devName = dev.mid(start, stop - start); + else + devName = dev.mid(start); + + if ( joydev && (devName == joydev->device()) ) return; // user selected the current device; ignore it + + JoyDevice *joy = new JoyDevice(devName); + JoyDevice::ErrorCode ret = joy->open(); + + if ( ret != JoyDevice::SUCCESS ) + { + KMessageBox::error(this, joy->errText(ret), i18n("Device Error")); + + delete joy; + restoreCurrDev(); + return; + } + + showDeviceProps(joy); +} + +//-------------------------------------------------------------- + +void JoyWidget::showDeviceProps(JoyDevice *joy) +{ + joydev = joy; + + buttonTbl->setNumRows(joydev->numButtons()); + + axesTbl->setNumRows(joydev->numAxes()); + if ( joydev->numAxes() >= 2 ) + { + axesTbl->verticalHeader()->setLabel(0, "1(x)"); + axesTbl->verticalHeader()->setLabel(1, "2(y)"); + } + + calibrate->setEnabled(true); + idle->start(0); + + // make both tables use the same space for header; this looks nicer + buttonTbl->setLeftMargin(QMAX(buttonTbl->verticalHeader()->width(), + axesTbl->verticalHeader()->width())); + axesTbl->setLeftMargin(buttonTbl->verticalHeader()->width()); +} + +//-------------------------------------------------------------- + +void JoyWidget::checkDevice() +{ + if ( !joydev ) return; // no open device yet + + JoyDevice::EventType type; + int number, value; + + if ( !joydev->getEvent(type, number, value) ) + return; + + if ( type == JoyDevice::BUTTON ) + { + if ( value == 0 ) // button release + buttonTbl->setText(number, 0, "-"); + else + buttonTbl->setText(number, 0, PRESSED); + } + + if ( type == JoyDevice::AXIS ) + { + if ( number == 0 ) // x-axis + xyPos->changeX(value); + + if ( number == 1 ) // y-axis + xyPos->changeY(value); + + axesTbl->setText(number, 0, QString("%1").arg(int(value))); + } +} + +//-------------------------------------------------------------- + +void JoyWidget::calibrateDevice() +{ + if ( !joydev ) return; // just to be save + + JoyDevice::ErrorCode ret = joydev->initCalibration(); + + if ( ret != JoyDevice::SUCCESS ) + { + KMessageBox::error(this, joydev->errText(ret), i18n("Communication Error")); + return; + } + + if ( KMessageBox::messageBox(this, KMessageBox::Information, + i18n("Calibration is about to check the precision.

" + "Please move all axes to their center position and then " + "do not touch the joystick anymore.

" + "Click OK to start the calibration.
"), + i18n("Calibration"), + KStdGuiItem::ok(), KStdGuiItem::cancel()) != KMessageBox::Ok ) + return; + + idle->stop(); // stop the joystick event getting; this must be done inside the calibrate dialog + + CalDialog dlg(this, joydev); + dlg.calibrate(); + + // user cancelled somewhere during calibration, therefore the device is in a bad state + if ( dlg.result() == QDialog::Rejected ) + joydev->restoreCorr(); + + idle->start(0); // continue with event getting +} + +//-------------------------------------------------------------- + +void JoyWidget::resetCalibration() +{ + if ( !joydev ) return; // just to be save + + JoyDevice::ErrorCode ret = joydev->restoreCorr(); + + if ( ret != JoyDevice::SUCCESS ) + { + KMessageBox::error(this, joydev->errText(ret), i18n("Communication Error")); + } + else + { + KMessageBox::information(this, + i18n("Restored all calibration values for joystick device %1.").arg(joydev->device()), + i18n("Calibration Success")); + } +} + +//-------------------------------------------------------------- + +#include "joywidget.moc" diff --git a/kcontrol/joystick/joywidget.h b/kcontrol/joystick/joywidget.h new file mode 100644 index 000000000..5f561c0e5 --- /dev/null +++ b/kcontrol/joystick/joywidget.h @@ -0,0 +1,79 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef _JOYWIDGET_H_ +#define _JOYWIDGET_H_ + +#include + +class JoyDevice; + +class PosWidget; +class QLabel; +class QTable; +class QTimer; +class QComboBox; +class QPushButton; +class QCheckBox; +class QHBox; + +// the widget which displays all buttons, values, etc. +class JoyWidget : public QWidget +{ + Q_OBJECT + + public: + JoyWidget(QWidget *parent = 0, const char *name = 0); + + ~JoyWidget(); + + // initialize list of possible devices and open the first available + void init(); + + public slots: + // reset calibration values to their value when this KCM was started + void resetCalibration(); + + private slots: + void checkDevice(); + void deviceChanged(const QString &dev); + void traceChanged(bool); + void calibrateDevice(); + + private: + void showDeviceProps(JoyDevice *joy); // fill widgets with given device parameters + void restoreCurrDev(); // restores the content of the combobox to reflect the current open device + + private: + QHBox *messageBox; + QLabel *message; // in case of no device, show here a message rather than in a dialog + QComboBox *device; + PosWidget *xyPos; + QTable *buttonTbl; + QTable *axesTbl; + QCheckBox *trace; + QPushButton *calibrate; + + QTimer *idle; + + JoyDevice *joydev; +}; + +#endif diff --git a/kcontrol/joystick/poswidget.cpp b/kcontrol/joystick/poswidget.cpp new file mode 100644 index 000000000..54e619d7a --- /dev/null +++ b/kcontrol/joystick/poswidget.cpp @@ -0,0 +1,138 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#include "poswidget.h" + +#include + +#define XY_WIDTH 220 +#define MARK_WIDTH 10 + +//----------------------------------------------------------------- + +PosWidget::PosWidget(QWidget *parent, const char *name) + : QWidget(parent, name, WRepaintNoErase), x(0), y(0), trace(false) +{ + setMinimumSize(XY_WIDTH, XY_WIDTH); + setMaximumSize(XY_WIDTH, XY_WIDTH); + setPaletteBackgroundColor(Qt::white); +} + +//----------------------------------------------------------------- + +void PosWidget::paintEvent(QPaintEvent *) +{ + QPainter paint(this); + + paint.drawRect(0, 0, width(), height()); + paint.setPen(Qt::gray); + + // draw a center grid + paint.drawLine(XY_WIDTH/2, 1, + XY_WIDTH/2, XY_WIDTH - 2); + + paint.drawLine(1, XY_WIDTH/2, + XY_WIDTH - 2, XY_WIDTH/2); + + // draw the current position marker + paint.setPen(Qt::blue); + + paint.drawLine(x - MARK_WIDTH/2, y - MARK_WIDTH/2, + x + MARK_WIDTH/2, y + MARK_WIDTH/2); + + paint.drawLine(x - MARK_WIDTH/2, y + MARK_WIDTH/2, + x + MARK_WIDTH/2, y - MARK_WIDTH/2); +} + +//----------------------------------------------------------------- + +void PosWidget::changeX(int newX) +{ + // transform coordinates from joystick to widget coordinates + newX = int((newX/65535.0)*XY_WIDTH + XY_WIDTH/2); + + if ( x == newX ) return; // avoid unnecessary redraw + + eraseOld(); + + x = newX; +} + +//----------------------------------------------------------------- + +void PosWidget::changeY(int newY) +{ + // transform coordinates from joystick to widget coordinates + newY = int((newY/65535.0)*XY_WIDTH + XY_WIDTH/2); + + if ( y == newY ) return; // avoid unnecessary redraw + + eraseOld(); + + y = newY; +} + +//----------------------------------------------------------------- + +void PosWidget::showTrace(bool t) +{ + trace = t; + + if ( !trace ) + { + erase(); + update(); + } +} + +//----------------------------------------------------------------- + +void PosWidget::eraseOld() +{ + QPainter paint(this); + + //paint.eraseRect(x - MARK_WIDTH/2, y - MARK_WIDTH/2, MARK_WIDTH + 1, MARK_WIDTH + 1); + + // erase previous cross (don't use eraseRect() so that trace flags will be not destroyed so much) + paint.setPen(Qt::white); + + paint.drawLine(x - MARK_WIDTH/2, y - MARK_WIDTH/2, + x + MARK_WIDTH/2, y + MARK_WIDTH/2); + + paint.drawLine(x - MARK_WIDTH/2, y + MARK_WIDTH/2, + x + MARK_WIDTH/2, y - MARK_WIDTH/2); + + if ( trace ) // show previous position with a smaller black cross + { + paint.setPen(Qt::black); + + paint.drawLine(x - 2, y - 2, + x + 2, y + 2); + + paint.drawLine(x - 2, y + 2, + x + 2, y - 2); + } + + update(); +} + +//----------------------------------------------------------------- + +#include "poswidget.moc" diff --git a/kcontrol/joystick/poswidget.h b/kcontrol/joystick/poswidget.h new file mode 100644 index 000000000..9151da57f --- /dev/null +++ b/kcontrol/joystick/poswidget.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (C) 2003 by Martin Koller * + * m.koller@surfeu.at * + * This file is part of the KDE Control Center Module for Joysticks * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef _POSWIDGET_H_ +#define _POSWIDGET_H_ + +#include + +/** + Widget to display the joystick-selected (x,y) position +*/ +class PosWidget : public QWidget +{ + Q_OBJECT + + public: + PosWidget(QWidget *parent = 0, const char *name = 0); + + void changeX(int x); + void changeY(int y); + + // define if a trace of the moving joystick shall be displayed + // setting it to false will erase all previous marks from the widget + // NOTE: the traced positions are not stored and will be erased if the widget is covered/redisplayed + void showTrace(bool t); + + protected: + virtual void paintEvent(QPaintEvent *); + + private: + void eraseOld(); + + private: + int x, y; + bool trace; +}; + +#endif diff --git a/kcontrol/kcontrol/KControl.desktop b/kcontrol/kcontrol/KControl.desktop new file mode 100644 index 000000000..c174a867a --- /dev/null +++ b/kcontrol/kcontrol/KControl.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Exec=kcontrol -caption "%c" %i %m +Icon=kcontrol +Type=Application +DocPath=kcontrol/index.html +X-KDE-StartupNotify=true + +Name=Control Center +Name[af]=Beheer Sentrum +Name[ar]=مركز التحكم +Name[az]=İdarə Mərkəzi +Name[be]=Цэнтр кіравання +Name[bg]=Контролен център +Name[bn]=নিয়ন্ত্রণ কেন্দ্র +Name[br]=Kreizenn ren +Name[bs]=Kontrolni centar +Name[ca]=Centre de control +Name[cs]=Ovládací centrum +Name[csb]=Centróm kòntrolë +Name[cy]=Canolfan Rheoli +Name[da]=Kontrolcenter +Name[de]=Kontrollzentrum +Name[el]=Κέντρο ελέγχου +Name[en_GB]=Control Centre +Name[eo]=Stircentro +Name[es]=Centro de control +Name[et]=Juhtimiskeskus +Name[eu]=Kontrol gunea +Name[fa]=مرکز کنترل +Name[fi]=Ohjauskeskus +Name[fr]=Centre de configuration de KDE +Name[fy]=Konfiguraasjesintrum +Name[ga]=Lárionad Rialaithe +Name[gl]=Centro de Control +Name[he]=מרכז הבקרה +Name[hi]=नियंत्रण केंद्र +Name[hr]=Upravljačko središte +Name[hu]=Vezérlőpult +Name[id]=Pusat Kontrol +Name[is]=Stjórnborð +Name[it]=Centro di controllo +Name[ja]=コントロールセンター +Name[ka]=საკონტროლო ცენტრი +Name[kk]=Басқару орталығы +Name[km]=មជ្ឈមណ្ឌល​បញ្ជា +Name[ko]=제어판 모듈 +Name[lo]=ສູນຄວບຄຸມ +Name[lt]=Valdymo centras +Name[lv]=Vadības Centrs +Name[mk]=Контролен центар +Name[mn]=Удирдах төв +Name[ms]=Pusat Kawalan +Name[mt]=Ċentru tal-Kontroll +Name[nb]=Kontrollpanel +Name[nds]=Kuntrullzentrum +Name[ne]=नियन्त्रण केन्द्र +Name[nl]=Configuratiecentrum +Name[nn]=Kontrollsenter +Name[nso]=Bogare bja Taolo +Name[oc]=Centre de control +Name[pa]=ਕੰਟਰੋਲ ਕੇਂਦਰ +Name[pl]=Centrum sterowania +Name[pt]=Centro de Controlo +Name[pt_BR]=Centro de Controle +Name[ro]=Centrul de control +Name[ru]=Центр управления +Name[rw]=Kugenzura Hagati +Name[se]=Stivrenguovddáš +Name[sk]=Ovládacie Centrum +Name[sl]=Nadzorno središče +Name[sr]=Контролни центар +Name[sr@Latn]=Kontrolni centar +Name[ss]=Sikhungo sekulawula +Name[sv]=Inställningscentralen +Name[ta]=கட்டுப்பாட்டு மையம் +Name[te]=అధికార కేంద్రం +Name[tg]=Маркази контрол +Name[th]=ศูนย์ควบคุม +Name[tr]=Kontrol Merkezi +Name[tt]=İdärä Üzäge +Name[uk]=Центр керування +Name[uz]=Boshqaruv markazi +Name[uz@cyrillic]=Бошқарув маркази +Name[ven]=Senthara ya vhulanguli +Name[vi]=Trung tâm Điều khiển +Name[wa]=Cinte di contrôle +Name[xh]=Umbindi Wolawulo +Name[zh_CN]=控制中心 +Name[zh_TW]=控制中心 +Name[zu]=Indawo Yokulawula + +X-DCOP-ServiceType=Unique +Categories=Qt;KDE;Core; diff --git a/kcontrol/kcontrol/KControl_NoDisplay.desktop b/kcontrol/kcontrol/KControl_NoDisplay.desktop new file mode 100644 index 000000000..f19e757f0 --- /dev/null +++ b/kcontrol/kcontrol/KControl_NoDisplay.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Exec=kcontrol -caption "%c" %i %m +Icon=kcontrol +Type=Application +DocPath=kcontrol/index.html +X-KDE-StartupNotify=true + +Name=Control Center +Name[af]=Beheer Sentrum +Name[ar]=مركز التحكم +Name[az]=İdarə Mərkəzi +Name[be]=Цэнтр кіравання +Name[bg]=Контролен център +Name[bn]=নিয়ন্ত্রণ কেন্দ্র +Name[br]=Kreizenn ren +Name[bs]=Kontrolni centar +Name[ca]=Centre de control +Name[cs]=Ovládací centrum +Name[csb]=Centróm kòntrolë +Name[cy]=Canolfan Rheoli +Name[da]=Kontrolcenter +Name[de]=Kontrollzentrum +Name[el]=Κέντρο ελέγχου +Name[en_GB]=Control Centre +Name[eo]=Stircentro +Name[es]=Centro de control +Name[et]=Juhtimiskeskus +Name[eu]=Kontrol gunea +Name[fa]=مرکز کنترل +Name[fi]=Ohjauskeskus +Name[fr]=Centre de configuration de KDE +Name[fy]=Konfiguraasjesintrum +Name[ga]=Lárionad Rialaithe +Name[gl]=Centro de Control +Name[he]=מרכז הבקרה +Name[hi]=नियंत्रण केंद्र +Name[hr]=Upravljačko središte +Name[hu]=Vezérlőpult +Name[id]=Pusat Kontrol +Name[is]=Stjórnborð +Name[it]=Centro di controllo +Name[ja]=コントロールセンター +Name[ka]=საკონტროლო ცენტრი +Name[kk]=Басқару орталығы +Name[km]=មជ្ឈមណ្ឌល​បញ្ជា +Name[ko]=제어판 모듈 +Name[lo]=ສູນຄວບຄຸມ +Name[lt]=Valdymo centras +Name[lv]=Vadības Centrs +Name[mk]=Контролен центар +Name[mn]=Удирдах төв +Name[ms]=Pusat Kawalan +Name[mt]=Ċentru tal-Kontroll +Name[nb]=Kontrollpanel +Name[nds]=Kuntrullzentrum +Name[ne]=नियन्त्रण केन्द्र +Name[nl]=Configuratiecentrum +Name[nn]=Kontrollsenter +Name[nso]=Bogare bja Taolo +Name[oc]=Centre de control +Name[pa]=ਕੰਟਰੋਲ ਕੇਂਦਰ +Name[pl]=Centrum sterowania +Name[pt]=Centro de Controlo +Name[pt_BR]=Centro de Controle +Name[ro]=Centrul de control +Name[ru]=Центр управления +Name[rw]=Kugenzura Hagati +Name[se]=Stivrenguovddáš +Name[sk]=Ovládacie Centrum +Name[sl]=Nadzorno središče +Name[sr]=Контролни центар +Name[sr@Latn]=Kontrolni centar +Name[ss]=Sikhungo sekulawula +Name[sv]=Inställningscentralen +Name[ta]=கட்டுப்பாட்டு மையம் +Name[te]=అధికార కేంద్రం +Name[tg]=Маркази контрол +Name[th]=ศูนย์ควบคุม +Name[tr]=Kontrol Merkezi +Name[tt]=İdärä Üzäge +Name[uk]=Центр керування +Name[uz]=Boshqaruv markazi +Name[uz@cyrillic]=Бошқарув маркази +Name[ven]=Senthara ya vhulanguli +Name[vi]=Trung tâm Điều khiển +Name[wa]=Cinte di contrôle +Name[xh]=Umbindi Wolawulo +Name[zh_CN]=控制中心 +Name[zh_TW]=控制中心 +Name[zu]=Indawo Yokulawula + +X-DCOP-ServiceType=Unique +NoDisplay=true diff --git a/kcontrol/kcontrol/Makefile.am b/kcontrol/kcontrol/Makefile.am new file mode 100644 index 000000000..2f2c3a6bc --- /dev/null +++ b/kcontrol/kcontrol/Makefile.am @@ -0,0 +1,53 @@ +# +# Copyright (c) 1999 Matthias Hoelzer-Kluepfel +# Copyright (c) 2000 Matthias Elter +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +AM_CPPFLAGS= $(all_includes) +METASOURCES = AUTO + +SUBDIRS = . about + +bin_PROGRAMS = +lib_LTLIBRARIES = +kdeinit_LTLIBRARIES = kcontrol.la + +kcontrol_la_SOURCES = main.cpp toplevel.cpp indexwidget.cpp \ + helpwidget.cpp dockcontainer.cpp aboutwidget.cpp \ + moduletreeview.cpp moduleiconview.cpp \ + moduleIface.cpp moduleIface.skel global.cpp modules.cpp \ + proxywidget.cpp kcrootonly.cpp searchwidget.cpp + +kcontrol_la_LIBADD = $(LIB_KDEUI) $(LIB_KUTILS) $(LIB_KHTML) +kcontrol_la_LDFLAGS = $(all_libraries) -module -avoid-version + +rccontroldir = $(kde_datadir)/kcontrol +rccontrol_DATA = kcontrolui.rc +rcinfodir = $(kde_datadir)/kinfocenter +rcinfo_DATA = kinfocenterui.rc + +xdg_apps_DATA = KControl.desktop kinfocenter.desktop + +install-data-local: + @-rm -f $(DESTDIR)$(kde_bindir)/kinfocenter + $(mkinstalldirs) $(DESTDIR)$(kde_bindir) + @$(LN_S) kcontrol $(DESTDIR)$(kde_bindir)/kinfocenter + +KDE_ICON=AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcontrol.pot diff --git a/kcontrol/kcontrol/about/Makefile.am b/kcontrol/kcontrol/about/Makefile.am new file mode 100644 index 000000000..14e035db7 --- /dev/null +++ b/kcontrol/kcontrol/about/Makefile.am @@ -0,0 +1,6 @@ +about_DATA = \ + top-right-kcontrol.png \ + main.html \ + kcontrol.css + +aboutdir = $(kde_datadir)/kcontrol/about diff --git a/kcontrol/kcontrol/about/kcontrol.css b/kcontrol/kcontrol/about/kcontrol.css new file mode 100644 index 000000000..7e17e6a0d --- /dev/null +++ b/kcontrol/kcontrol/about/kcontrol.css @@ -0,0 +1,54 @@ + +#headerR { + position: absolute; + right: 0px; + width: 430px; + height: 131px; + background-image: url(top-right-kcontrol.png); +} + +#title { + right: 80px; + font-size: x-large; +} + +#tagline { + right: 80px; + font-size: x-small; + text-shadow: #c8c8c8 0px 0px 3px; + +} + +#barCenter { + font-size: x-small; +} + +#tableTitle { + font-weight: bold; + padding-bottom: 1ex; +} + +.kc_table { + font-size: x-small; + width: 100%; +} + +.kc_leftcol { + width: 30%; +} + +.kc_rightcol { + font-weight: bold; +} + +.kc_use_text { + margin-bottom: 0; + font-size: xx-small; +} + +.kcm_link { + color: #000; +} + +/* vim:set sw=2 et nocindent smartindent: */ + diff --git a/kcontrol/kcontrol/about/main.html b/kcontrol/kcontrol/about/main.html new file mode 100644 index 000000000..65a0a4c02 --- /dev/null +++ b/kcontrol/kcontrol/about/main.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +
\n"; +#define KC_HTMLROW( a, b ) "\n" + content += KC_HTMLROW( version_text, KCGlobal::kdeVersion() ); + content += KC_HTMLROW( user_text, KCGlobal::userName() ); + content += KC_HTMLROW( host_text, KCGlobal::hostName() ); + content += KC_HTMLROW( system_text, KCGlobal::systemName() ); + content += KC_HTMLROW( release_text, KCGlobal::systemRelease() ); + content += KC_HTMLROW( machine_text, KCGlobal::systemMachine() ); +#undef KC_HTMLROW + content += "
" + i18n( a ) + "" + b + "
\n"; + content += "

" + i18n( use_text ) + "

\n"; + } + else + { + KIconLoader *loader = KGlobal::instance()->iconLoader(); + QString iconPath; + if (!_icon.isEmpty()) { + iconPath = loader->iconPath( _icon, KIcon::Toolbar ); + content += "
 " + _caption + "
"; + } + + content += "\n"; + // traverse the list + QListViewItem* pEntry = _category; + while (pEntry != NULL) + { + QString szName; + QString szComment; + ConfigModule *module = static_cast(pEntry)->module(); + /* TODO: work out link */ + content += "\n"; + pEntry = pEntry->nextSibling(); + } + content += "
"; + if (module) + { + szName = module->moduleName(); + szComment = module->comment(); + iconPath = loader->iconPath( module->icon(), KIcon::Small ); + + content += " " + szName + "" + szComment; + KURL moduleURL( QString("kcm://%1").arg(QString().sprintf("%p",module)) ); + QString linkURL( moduleURL.url() ); + content = content.arg( linkURL ); + _moduleMap.insert( linkURL, module ); + } + else + { + szName = static_cast(pEntry)->caption(); + content += szName + "" + szName; + } + content += "
"; + } + _viewer->begin(KURL( file )); + _viewer->write( res.arg( content ) ); + _viewer->end(); +} + +void AboutWidget::slotModuleLinkClicked( const KURL& url ) +{ + ConfigModule* module; + module = _moduleMap[url.url()]; + if ( module ) + emit moduleSelected( module ); +} + diff --git a/kcontrol/kcontrol/aboutwidget.h b/kcontrol/kcontrol/aboutwidget.h new file mode 100644 index 000000000..e0b51fd54 --- /dev/null +++ b/kcontrol/kcontrol/aboutwidget.h @@ -0,0 +1,68 @@ +/* + Copyright (c) 2000,2001 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __aboutwidget_h__ +#define __aboutwidget_h__ + +#include +#include +#include + +class KCModuleInfo; +class QPixmap; +class KPixmap; +class ConfigModule; +class KHTMLPart; +class KURL; + +class AboutWidget : public QHBox +{ + Q_OBJECT + +public: + AboutWidget(QWidget *parent, const char *name=0, QListViewItem* category=0, const QString &caption=QString::null); + + /** + * Set a new category without creating a new AboutWidget if there is + * one visible already (reduces flicker) + */ + void setCategory( QListViewItem* category, const QString& icon, const QString& caption); + +signals: + void moduleSelected(ConfigModule *); + +private slots: + void slotModuleLinkClicked( const KURL& ); + +private: + /** + * Update the pixmap to be shown. Called from resizeEvent and from + * setCategory. + */ + void updatePixmap(); + + bool _moduleList; + QListViewItem* _category; + QString _icon; + QString _caption; + KHTMLPart *_viewer; + QMap _moduleMap; +}; + +#endif diff --git a/kcontrol/kcontrol/cr128-app-kcontrol.png b/kcontrol/kcontrol/cr128-app-kcontrol.png new file mode 100644 index 000000000..99a89e323 Binary files /dev/null and b/kcontrol/kcontrol/cr128-app-kcontrol.png differ diff --git a/kcontrol/kcontrol/cr16-app-kcontrol.png b/kcontrol/kcontrol/cr16-app-kcontrol.png new file mode 100644 index 000000000..64bf8b71d Binary files /dev/null and b/kcontrol/kcontrol/cr16-app-kcontrol.png differ diff --git a/kcontrol/kcontrol/cr32-app-kcontrol.png b/kcontrol/kcontrol/cr32-app-kcontrol.png new file mode 100644 index 000000000..6537ba75e Binary files /dev/null and b/kcontrol/kcontrol/cr32-app-kcontrol.png differ diff --git a/kcontrol/kcontrol/cr48-app-kcontrol.png b/kcontrol/kcontrol/cr48-app-kcontrol.png new file mode 100644 index 000000000..bde85be5f Binary files /dev/null and b/kcontrol/kcontrol/cr48-app-kcontrol.png differ diff --git a/kcontrol/kcontrol/cr64-app-kcontrol.png b/kcontrol/kcontrol/cr64-app-kcontrol.png new file mode 100644 index 000000000..4d4db5d65 Binary files /dev/null and b/kcontrol/kcontrol/cr64-app-kcontrol.png differ diff --git a/kcontrol/kcontrol/dockcontainer.cpp b/kcontrol/kcontrol/dockcontainer.cpp new file mode 100644 index 000000000..be2587114 --- /dev/null +++ b/kcontrol/kcontrol/dockcontainer.cpp @@ -0,0 +1,257 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "dockcontainer.h" +#include "dockcontainer.moc" + +#include "global.h" +#include "modules.h" +#include "proxywidget.h" + +class ModuleTitle : public QHBox +{ + public: + ModuleTitle( QWidget *parent, const char *name=0 ); + ~ModuleTitle() {} + + void showTitleFor( ConfigModule *module ); + void clear(); + + protected: + QLabel *m_icon; + QLabel *m_name; +}; + +ModuleTitle::ModuleTitle( QWidget *parent, const char *name ) + : QHBox( parent, name ) +{ + QWidget *spacer = new QWidget( this ); + spacer->setFixedWidth( KDialog::marginHint()-KDialog::spacingHint() ); + m_icon = new QLabel( this ); + m_name = new QLabel( this ); + + QFont font = m_name->font(); + font.setPointSize( font.pointSize()+1 ); + font.setBold( true ); + m_name->setFont( font ); + + setSpacing( KDialog::spacingHint() ); + if ( QApplication::reverseLayout() ) + { + spacer = new QWidget( this ); + setStretchFactor( spacer, 10 ); + } + else + setStretchFactor( m_name, 10 ); +} + +void ModuleTitle::showTitleFor( ConfigModule *config ) +{ + if ( !config ) + return; + + QWhatsThis::remove( this ); + QWhatsThis::add( this, config->comment() ); + KIconLoader *loader = KGlobal::instance()->iconLoader(); + QPixmap icon = loader->loadIcon( config->icon(), KIcon::NoGroup, 22 ); + m_icon->setPixmap( icon ); + m_name->setText( config->moduleName() ); + + show(); +} + +void ModuleTitle::clear() +{ + m_icon->setPixmap( QPixmap() ); + m_name->setText( QString::null ); + kapp->processEvents(); +} + +ModuleWidget::ModuleWidget( QWidget *parent, const char *name ) + : QVBox( parent, name ) +{ + QHBox* titleLine = new QHBox( this, "titleLine"); + m_title = new ModuleTitle( titleLine, "m_title" ); + QPushButton *helpButton = new QPushButton( titleLine ); + helpButton->setIconSet( SmallIconSet("help") ); + connect (helpButton, SIGNAL( clicked() ), this, SIGNAL( helpRequest() ) ); + m_body = new QVBox( this, "m_body" ); + setStretchFactor( m_body, 10 ); +} + +ProxyWidget *ModuleWidget::load( ConfigModule *module ) +{ + m_title->clear(); + ProxyWidget *proxy = module->module(); + + if ( proxy ) + { + proxy->reparent(m_body, 0, QPoint(0,0), false); + proxy->show(); + m_title->showTitleFor( module ); + } + + return proxy; +} + +DockContainer::DockContainer(QWidget *parent) + : QWidgetStack(parent, "DockContainer") + , _basew(0L) + , _module(0L) +{ + _busyw = new QLabel(i18n("Loading..."), this); + _busyw->setAlignment(AlignCenter); + _busyw->setTextFormat(RichText); + _busyw->setGeometry(0,0, width(), height()); + addWidget( _busyw ); + + _modulew = new ModuleWidget( this, "_modulew" ); + connect (_modulew, SIGNAL( helpRequest() ), SLOT( slotHelpRequest() ) ); + addWidget( _modulew ); +} + +DockContainer::~DockContainer() +{ + deleteModule(); +} + +void DockContainer::setBaseWidget(QWidget *widget) +{ + removeWidget( _basew ); + delete _basew; + _basew = 0; + if (!widget) return; + + _basew = widget; + + addWidget( _basew ); + raiseWidget( _basew ); + + emit newModule(widget->caption(), "", ""); +} + +ProxyWidget* DockContainer::loadModule( ConfigModule *module ) +{ + QApplication::setOverrideCursor( waitCursor ); + + ProxyWidget *widget = _modulew->load( module ); + + if (widget) + { + _module = module; + connect(_module, SIGNAL(childClosed()), SLOT(removeModule())); + connect(_module, SIGNAL(changed(ConfigModule *)), + SIGNAL(changedModule(ConfigModule *))); + connect(widget, SIGNAL(quickHelpChanged()), SLOT(quickHelpChanged())); + + raiseWidget( _modulew ); + emit newModule(widget->caption(), module->docPath(), widget->quickHelp()); + } + else + { + raiseWidget( _basew ); + emit newModule(_basew->caption(), "", ""); + } + + QApplication::restoreOverrideCursor(); + + return widget; +} + +bool DockContainer::dockModule(ConfigModule *module) +{ + if (module == _module) return true; + + if (_module && _module->isChanged()) + { + + int res = KMessageBox::warningYesNoCancel(this, +module ? +i18n("There are unsaved changes in the active module.\n" + "Do you want to apply the changes before running " + "the new module or discard the changes?") : +i18n("There are unsaved changes in the active module.\n" + "Do you want to apply the changes before exiting " + "the Control Center or discard the changes?"), + i18n("Unsaved Changes"), + KStdGuiItem::apply(), + KStdGuiItem::discard()); + if (res == KMessageBox::Yes) + _module->module()->applyClicked(); + if (res == KMessageBox::Cancel) + return false; + } + + raiseWidget( _busyw ); + kapp->processEvents(); + + deleteModule(); + if (!module) return true; + + ProxyWidget *widget = loadModule( module ); + + KCGlobal::repairAccels( topLevelWidget() ); + return ( widget!=0 ); +} + +void DockContainer::removeModule() +{ + raiseWidget( _basew ); + deleteModule(); + + if (_basew) + emit newModule(_basew->caption(), "", ""); + else + emit newModule("", "", ""); +} + +void DockContainer::deleteModule() +{ + if(_module) { + _module->deleteClient(); + _module = 0; + } +} + +void DockContainer::quickHelpChanged() +{ + if (_module && _module->module()) + emit newModule(_module->module()->caption(), _module->docPath(), _module->module()->quickHelp()); +} + +void DockContainer::slotHelpRequest() +{ + if (_module && _module->module()) + _module->module()->helpClicked(); +} diff --git a/kcontrol/kcontrol/dockcontainer.h b/kcontrol/kcontrol/dockcontainer.h new file mode 100644 index 000000000..94494cac5 --- /dev/null +++ b/kcontrol/kcontrol/dockcontainer.h @@ -0,0 +1,86 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __dockcontainer_h__ +#define __dockcontainer_h__ + +#include +#include + +class ConfigModule; +class ModuleTitle; +class ProxyWidget; +class QLabel; + +class ModuleWidget : public QVBox +{ + Q_OBJECT + + public: + ModuleWidget( QWidget *parent, const char *name ); + ~ModuleWidget() {} + + ProxyWidget* load( ConfigModule *module ); + + signals: + void helpRequest(); + + protected: + ModuleTitle *m_title; + QVBox *m_body; +}; + +class DockContainer : public QWidgetStack +{ + Q_OBJECT + +public: + DockContainer(QWidget *parent=0); + virtual ~DockContainer(); + + void setBaseWidget(QWidget *widget); + QWidget *baseWidget() { return _basew; } + + bool dockModule(ConfigModule *module); + ConfigModule *module() { return _module; } + +public slots: + void removeModule(); + +protected slots: + void quickHelpChanged(); + void slotHelpRequest(); + +protected: + void deleteModule(); + ProxyWidget* loadModule( ConfigModule *module ); + +signals: + void newModule(const QString &name, const QString& docPath, const QString &quickhelp); + void changedModule(ConfigModule *module); + +private: + QWidget *_basew; + QLabel *_busyw; + ModuleWidget *_modulew; + ConfigModule *_module; + +}; + +#endif diff --git a/kcontrol/kcontrol/global.cpp b/kcontrol/kcontrol/global.cpp new file mode 100644 index 000000000..83d2052b2 --- /dev/null +++ b/kcontrol/kcontrol/global.cpp @@ -0,0 +1,116 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "global.h" + +bool KCGlobal::_root = false; +bool KCGlobal::_infocenter = false; +QStringList KCGlobal::_types; +QString KCGlobal::_uname = ""; +QString KCGlobal::_hname = ""; +QString KCGlobal::_kdeversion = ""; +QString KCGlobal::_isystem = ""; +QString KCGlobal::_irelease = ""; +QString KCGlobal::_iversion = ""; +QString KCGlobal::_imachine = ""; +IndexViewMode KCGlobal::_viewmode = Icon; +KIcon::StdSizes KCGlobal::_iconsize = KIcon::SizeMedium; +QString KCGlobal::_baseGroup = ""; + +void KCGlobal::init() +{ + char buf[256]; + buf[0] = '\0'; + if (!gethostname(buf, sizeof(buf))) + buf[sizeof(buf)-1] ='\0'; + QString hostname(buf); + + setHostName(hostname); + setUserName(KUser().loginName()); + setRoot(getuid() == 0); + + setKDEVersion(KDE::versionString()); + + struct utsname info; + uname(&info); + + setSystemName(info.sysname); + setSystemRelease(info.release); + setSystemVersion(info.version); + setSystemMachine(info.machine); +} + +void KCGlobal::setType(const QCString& s) +{ + QString string = s.lower(); + _types = QStringList::split(',', string); +} + +QString KCGlobal::baseGroup() +{ + if ( _baseGroup.isEmpty() ) + { + KServiceGroup::Ptr group = KServiceGroup::baseGroup( _infocenter ? "info" : "settings" ); + if (group) + { + _baseGroup = group->relPath(); + kdDebug(1208) << "Found basegroup = " << _baseGroup << endl; + return _baseGroup; + } + // Compatibility with old behaviour, in case of missing .directory files. + if (_baseGroup.isEmpty()) + { + if (_infocenter) + { + kdWarning() << "No K menu group with X-KDE-BaseGroup=info found ! Defaulting to Settings/Information/" << endl; + _baseGroup = QString::fromLatin1("Settings/Information/"); + } + else + { + kdWarning() << "No K menu group with X-KDE-BaseGroup=settings found ! Defaulting to Settings/" << endl; + _baseGroup = QString::fromLatin1("Settings/"); + } + } + } + return _baseGroup; +} + +void KCGlobal::repairAccels( QWidget * tw ) +{ + QObjectList * l = tw->queryList( "QAccel" ); + QObjectListIt it( *l ); // iterate over the buttons + QObject * obj; + while ( (obj=it.current()) != 0 ) { // for each found object... + ++it; + ((QAccel*)obj)->repairEventFilter(); + } + delete l; // delete the list, not the objects +} diff --git a/kcontrol/kcontrol/global.h b/kcontrol/kcontrol/global.h new file mode 100644 index 000000000..71fbb55c3 --- /dev/null +++ b/kcontrol/kcontrol/global.h @@ -0,0 +1,76 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __global_h__ +#define __global_h__ + +#include + +#include +#include +#include + +enum IndexViewMode {Icon, Tree}; + +class KCGlobal +{ +public: + + static void init(); + + static bool isInfoCenter() { return _infocenter; } + static bool root() { return _root; } + static QStringList types() { return _types; } + static QString userName() { return _uname; } + static QString hostName() { return _hname; } + static QString kdeVersion() { return _kdeversion; } + static QString systemName() { return _isystem; } + static QString systemRelease() { return _irelease; } + static QString systemVersion() { return _iversion; } + static QString systemMachine() { return _imachine; } + static IndexViewMode viewMode() { return _viewmode; } + static KIcon::StdSizes iconSize() { return _iconsize; } + static QString baseGroup(); + + static void setIsInfoCenter(bool b) { _infocenter = b; } + static void setRoot(bool r) { _root = r; } + static void setType(const QCString& s); + static void setUserName(const QString& n){ _uname = n; } + static void setHostName(const QString& n){ _hname = n; } + static void setKDEVersion(const QString& n){ _kdeversion = n; } + static void setSystemName(const QString& n){ _isystem = n; } + static void setSystemRelease(const QString& n){ _irelease = n; } + static void setSystemVersion(const QString& n){ _iversion = n; } + static void setSystemMachine(const QString& n){ _imachine = n; } + static void setViewMode(IndexViewMode m) { _viewmode = m; } + static void setIconSize(KIcon::StdSizes s) { _iconsize = s; } + + static void repairAccels( QWidget * tw ); + +private: + static bool _root; + static bool _infocenter; + static QStringList _types; + static QString _uname, _hname, _isystem, _irelease, _iversion, _imachine, _kdeversion; + static IndexViewMode _viewmode; + static KIcon::StdSizes _iconsize; + static QString _baseGroup; +}; + +#endif diff --git a/kcontrol/kcontrol/helpwidget.cpp b/kcontrol/kcontrol/helpwidget.cpp new file mode 100644 index 000000000..b53fbc8a9 --- /dev/null +++ b/kcontrol/kcontrol/helpwidget.cpp @@ -0,0 +1,96 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include + +#include +#include +#include +#include +#include + +#include "global.h" +#include "helpwidget.h" + +HelpWidget::HelpWidget(QWidget *parent) : QWhatsThis(parent) +{ + setBaseText(); +} + +void HelpWidget::setText(const QString& docPath, const QString& text) +{ + docpath = docPath; + if (text.isEmpty() && docPath.isEmpty()) + setBaseText(); + else if (docPath.isEmpty()) + helptext = text; + else + helptext = (text + i18n("

Use the \"What's This?\" (Shift+F1) to get help on specific options.

To read the full manual click here.

") + .arg(docPath.local8Bit())); +} + +void HelpWidget::setBaseText() +{ + if (KCGlobal::isInfoCenter()) + helptext = (i18n("

KDE Info Center

" + "There is no quick help available for the active info module." + "

" + "Click here to read the general Info Center manual.") ); + else + helptext = (i18n("

KDE Control Center

" + "There is no quick help available for the active control module." + "

" + "Click here to read the general Control Center manual.") ); +} + +QString HelpWidget::text() const +{ + return helptext; +} + +bool HelpWidget::clicked(const QString & _url) +{ + if ( _url.isNull() ) + return true; + + if ( _url.find('@') > -1 ) { + kapp->invokeMailer(_url); + return true; + } + + KProcess process; + KURL url(KURL("help:/"), _url); + + if (url.protocol() == "help" || url.protocol() == "man" || url.protocol() == "info") { + process << "khelpcenter" + << url.url(); + process.start(KProcess::DontCare); + } else { + new KRun(url); + } + return true; +} + +void HelpWidget::handbookRequest() +{ + if (docpath.isEmpty()) + kdWarning() << "No handbook defined" << endl; + + clicked(docpath); +} diff --git a/kcontrol/kcontrol/helpwidget.h b/kcontrol/kcontrol/helpwidget.h new file mode 100644 index 000000000..08e495096 --- /dev/null +++ b/kcontrol/kcontrol/helpwidget.h @@ -0,0 +1,43 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __helpwidget_h__ +#define __helpwidget_h__ + +class QWidget; +class QWhatsThis; + +class HelpWidget : public QWhatsThis +{ +public: + HelpWidget(QWidget *parent); + + void setText( const QString& docPath, const QString& text); + void setBaseText(); + QString text() const; + + bool clicked(const QString &); + void handbookRequest(); + +private: + QString docpath; + QString helptext; +}; + +#endif diff --git a/kcontrol/kcontrol/indexwidget.cpp b/kcontrol/kcontrol/indexwidget.cpp new file mode 100644 index 000000000..d427b5707 --- /dev/null +++ b/kcontrol/kcontrol/indexwidget.cpp @@ -0,0 +1,142 @@ +/* + Copyright (c) 2000 Matthias Elter + Copyright (c) 2003 Frauke Oster + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include + + +#include "indexwidget.h" +#include "indexwidget.moc" +#include "moduletreeview.h" +#include "moduleiconview.h" + +IndexWidget::IndexWidget(ConfigModuleList *modules, QWidget *parent ,const char *name) + : QWidgetStack(parent, name) + , _tree(0L) + , _icon(0L) + , _modules(modules) + , viewMode(Icon) +{ + activateView(Icon); +} + +IndexWidget::~IndexWidget() {} + +void IndexWidget::reload() +{ + if (_icon) + _icon->fill(); +} + +QListViewItem *IndexWidget::firstTreeViewItem() +{ + if (_tree) + return _tree->firstChild(); + else + return 0L; +} + + +void IndexWidget::resizeEvent(QResizeEvent *e) +{ + QWidgetStack::resizeEvent( e ); +} + +void IndexWidget::moduleSelected(ConfigModule *m) +{ + const QObject *obj = sender(); + if(!m) return; + + emit moduleActivated(m); + + if (obj->inherits("ModuleIconView") && _tree) + { + _tree->makeVisible(m); + + _tree->disconnect(SIGNAL(moduleSelected(ConfigModule*))); + _tree->makeSelected(m); + connect(_tree, SIGNAL(moduleSelected(ConfigModule*)), + this, SLOT(moduleSelected(ConfigModule*))); + } + else if (obj->inherits("ModuleTreeView") && _icon) + { + _icon->makeVisible(m); + + _icon->disconnect(SIGNAL(moduleSelected(ConfigModule*))); + _icon->makeSelected(m); + connect(_icon, SIGNAL(moduleSelected(ConfigModule*)), + this, SLOT(moduleSelected(ConfigModule*))); + } +} + +void IndexWidget::makeSelected(ConfigModule *module) +{ + if (_icon) + { + _icon->disconnect(SIGNAL(moduleSelected(ConfigModule*))); + _icon->makeSelected(module); + connect(_icon, SIGNAL(moduleSelected(ConfigModule*)), + this, SLOT(moduleSelected(ConfigModule*))); + } + if (_tree) + { + _tree->disconnect(SIGNAL(moduleSelected(ConfigModule*))); + _tree->makeSelected(module); + connect(_tree, SIGNAL(moduleSelected(ConfigModule*)), + this, SLOT(moduleSelected(ConfigModule*))); + } +} + +void IndexWidget::makeVisible(ConfigModule *module) +{ + if (_icon) + _icon->makeVisible(module); + if (_tree) + _tree->makeVisible(module); +} + +void IndexWidget::activateView(IndexViewMode mode) +{ + viewMode = mode; + + if (mode == Icon) + { + if (!_icon) + { + _icon=new ModuleIconView(_modules, this); + _icon->fill(); + connect(_icon, SIGNAL(moduleSelected(ConfigModule*)), + this, SLOT(moduleSelected(ConfigModule*))); + } + raiseWidget( _icon ); + } + else + { + if (!_tree) + { + _tree=new ModuleTreeView(_modules, this); + _tree->fill(); + connect(_tree, SIGNAL(moduleSelected(ConfigModule*)), + this, SLOT(moduleSelected(ConfigModule*))); + connect(_tree, SIGNAL(categorySelected(QListViewItem*)), + this, SIGNAL(categorySelected(QListViewItem*))); + } + raiseWidget( _tree ); + } +} diff --git a/kcontrol/kcontrol/indexwidget.h b/kcontrol/kcontrol/indexwidget.h new file mode 100644 index 000000000..0a358aa2e --- /dev/null +++ b/kcontrol/kcontrol/indexwidget.h @@ -0,0 +1,64 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __indexwidget_h__ +#define __indexwidget_h__ + +#include + +#include "global.h" + +class ConfigModuleList; +class ConfigModule; +class ModuleTreeView; +class ModuleIconView; + +class IndexWidget : public QWidgetStack +{ + Q_OBJECT + +public: + IndexWidget(ConfigModuleList *list, QWidget *parent, const char *name=0); + virtual ~IndexWidget(); + + QListViewItem *firstTreeViewItem(); +public slots: + void makeVisible(ConfigModule *module); + void makeSelected(ConfigModule *module); + void activateView(IndexViewMode); + void reload(); + +protected slots: + void moduleSelected(ConfigModule *); + +signals: + void moduleActivated(ConfigModule *module); + void categorySelected(QListViewItem *); + +protected: + void resizeEvent(QResizeEvent *e); + +private: + ModuleTreeView *_tree; + ModuleIconView *_icon; + ConfigModuleList *_modules; + IndexViewMode viewMode; +}; + +#endif diff --git a/kcontrol/kcontrol/kcontrolui.rc b/kcontrol/kcontrol/kcontrolui.rc new file mode 100644 index 000000000..92867beb3 --- /dev/null +++ b/kcontrol/kcontrol/kcontrolui.rc @@ -0,0 +1,20 @@ + + + + &View + &Mode + + + + Icon &Size + + + + + + + + + + + diff --git a/kcontrol/kcontrol/kcrootonly.cpp b/kcontrol/kcontrol/kcrootonly.cpp new file mode 100644 index 000000000..5d3a0ce27 --- /dev/null +++ b/kcontrol/kcontrol/kcrootonly.cpp @@ -0,0 +1,38 @@ +/* + Copyright (c) 2001 Waldo Bastian + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include + +#include + +#include "kcrootonly.h" + +KCRootOnly::KCRootOnly(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + QVBoxLayout *layout=new QVBoxLayout(this); + QLabel *label = new QLabel(i18n("You need super user privileges to run this control module.
" + "Click on the \"Administrator Mode\" button below."), this); + layout->addWidget(label); + label->setAlignment(AlignCenter); + label->setTextFormat(RichText); + label->setMinimumSize(label->sizeHint()); +} + + diff --git a/kcontrol/kcontrol/kcrootonly.h b/kcontrol/kcontrol/kcrootonly.h new file mode 100644 index 000000000..e04df7c80 --- /dev/null +++ b/kcontrol/kcontrol/kcrootonly.h @@ -0,0 +1,12 @@ + +#ifndef _kcontrol_kcrootonly_ +#define _kcontrol_kcrootonly_ + +#include + +class KCRootOnly: public KCModule { +public: + KCRootOnly(QWidget *parent, const char *name); +}; + +#endif diff --git a/kcontrol/kcontrol/kinfocenter.desktop b/kcontrol/kcontrol/kinfocenter.desktop new file mode 100644 index 000000000..cd3e27f0a --- /dev/null +++ b/kcontrol/kcontrol/kinfocenter.desktop @@ -0,0 +1,109 @@ +[Desktop Entry] +Exec=kinfocenter -caption "%c" %i %m +Icon=hwinfo +Type=Application +DocPath=kinfocenter/index.html +X-KDE-StartupNotify=true +OnlyShowIn=KDE; + +Name=KInfoCenter +Name[af]=Inligting Sentrum +Name[be]=Цэнтр інфармацыі +Name[bn]=কে-ইনফো-সেন্টার +Name[csb]=Centróm wëdowiédzë +Name[de]=Infozentrum +Name[el]=Κέντρο πληροφοριών +Name[et]=KDE infokeskus +Name[he]=מרכז המידע +Name[ja]=インフォセンター +Name[mk]=КИнфоцентар +Name[nds]=KDE-Infozentrum +Name[ne]=के सूचना केन्द्र +Name[pa]=ਜਾਣਕਾਰੀ ਕੇਂਦਰ +Name[pl]=Centrum informacyjne +Name[pt_BR]=Centro de Informações do KDE +Name[ro]=Centrul de informații KDE +Name[rw]=K-AmakuruHagati +Name[sk]=KDE Informačné centrum +Name[sv]=Informationscentralen +Name[ta]=கேதகவல் மையம் +Name[te]=కెఇన్ఫొసెంటర్ +Name[tg]=КМаркази иттилоот +Name[th]=ศูนย์ข้อมูล K +Name[tr]=KDE Bilgi Merkezi +Name[uz]=Maʼlumot markazi +Name[uz@cyrillic]=Маълумот маркази +Name[vi]=Trung tâm Thông tin KDE +Name[wa]=Cinte d' informåcion KInfo +GenericName=Info Center +GenericName[af]=Inligting Sentrum +GenericName[be]=Цэнтр інфармацыі +GenericName[bg]=Информационен център +GenericName[bn]=তথ্য কেন্দ্র +GenericName[br]=Kreizenn Titouroù +GenericName[bs]=Info centar +GenericName[ca]=Centre d'informació +GenericName[cs]=Informační centrum +GenericName[csb]=Centróm wëdowiédzë +GenericName[cy]=Canolfan Gwybodaeth +GenericName[da]=Infocenter +GenericName[de]=Infozentrum +GenericName[el]=Κέντρο πληροφοριών +GenericName[en_GB]=Info Centre +GenericName[eo]=Infocentro +GenericName[es]=Centro de información +GenericName[et]=Infokeskus +GenericName[eu]=Info gunea +GenericName[fa]=مرکز اطلاعات +GenericName[fi]=Infokeskus +GenericName[fr]=Centre d'informations +GenericName[fy]=Ynformaasjesintrum +GenericName[ga]=Lárionad Eolais +GenericName[gl]=Centro de Información +GenericName[he]=מרכז המידע +GenericName[hr]=Info središte +GenericName[hu]=Rendszerinformáció +GenericName[is]=Upplýsingaborð +GenericName[it]=Centro informazioni +GenericName[ja]=インフォセンター +GenericName[ka]=საინფორმაციო ცენტრი +GenericName[kk]=Мәлімет орталығы +GenericName[km]=មជ្ឈមណ្ឌល​ព័ត៌មាន +GenericName[ko]=정보 센터 +GenericName[lt]=Info centras +GenericName[mk]=Информативен центар +GenericName[ms]=Pusat Maklumat +GenericName[nb]=KDEs informasjonssenter +GenericName[nds]=Infozentrum +GenericName[ne]=सूचना केन्द्र +GenericName[nl]=Informatiecentrum +GenericName[nn]=KDEs informasjonssenter +GenericName[pa]=ਜਾਣਕਾਰੀ ਕੇਂਦਰ +GenericName[pl]=Centrum informacyjne +GenericName[pt]=Centro de Informações +GenericName[pt_BR]=Centro de Informações +GenericName[ro]=Centru de informații +GenericName[ru]=Центр информации +GenericName[rw]=Amakuru Hagati +GenericName[se]=Diehtoguovddáš +GenericName[sk]=Informačné centrum +GenericName[sl]=Informacijsko središče +GenericName[sr]=Информациони центар +GenericName[sr@Latn]=Informacioni centar +GenericName[sv]=Informationscentralen +GenericName[ta]=தகவல் மையம் +GenericName[te]=సమాచార కేంద్రం +GenericName[tg]=Маркази иттилоот +GenericName[th]=ศูนย์ข้อมูล +GenericName[tr]=Bilgi Merkezi +GenericName[tt]=Beleşmä Üzäge +GenericName[uk]=Центр інформації +GenericName[uz]=Maʼlumot markazi +GenericName[uz@cyrillic]=Маълумот маркази +GenericName[vi]=Trung tâm Thông tin +GenericName[wa]=Cinte di contrôle +GenericName[zh_CN]=信息中心 +GenericName[zh_TW]=資訊中心 + +X-DCOP-ServiceType=Unique +Categories=Qt;KDE;System; diff --git a/kcontrol/kcontrol/kinfocenterui.rc b/kcontrol/kcontrol/kinfocenterui.rc new file mode 100644 index 000000000..92867beb3 --- /dev/null +++ b/kcontrol/kcontrol/kinfocenterui.rc @@ -0,0 +1,20 @@ + + + + &View + &Mode + + + + Icon &Size + + + + + + + + + + + diff --git a/kcontrol/kcontrol/main.cpp b/kcontrol/kcontrol/main.cpp new file mode 100644 index 000000000..90e63583c --- /dev/null +++ b/kcontrol/kcontrol/main.cpp @@ -0,0 +1,153 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + + +/** + * Howto debug: + * start "kcontrol --nofork" in a debugger. + * + * If you want to test with command line arguments you need + * -after you have started kcontrol in the debugger- + * open another shell and run kcontrol with the desired + * command line arguments. + * + * The command line arguments will be passed to the version of + * kcontrol in the debugger via DCOP and will cause a call + * to newInstance(). + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include "main.h" +#include "main.moc" +#include "toplevel.h" +#include "global.h" +#include "moduleIface.h" + +#include "version.h" + +KControlApp::KControlApp() + : KUniqueApplication() + , toplevel(0) +{ + toplevel = new TopLevel(); + + setMainWidget(toplevel); + KGlobal::setActiveInstance(this); + + // KUniqueApplication does dcop regitration for us + ModuleIface *modIface = new ModuleIface(toplevel, "moduleIface"); + + connect (modIface, SIGNAL(helpClicked()), toplevel, SLOT(slotHelpRequest())); + connect (modIface, SIGNAL(handbookClicked()), toplevel, SLOT(slotHandbookRequest())); + + QRect desk = KGlobalSettings::desktopGeometry(toplevel); + KConfig *config = KGlobal::config(); + config->setGroup("General"); + // Initial size is: + // never bigger than workspace as reported by desk + // 940x700 on 96 dpi, 12 pt font + // 800x600 on 72 dpi, 12 pt font + // --> 368 + 6 x dpiX, 312 + 4 x dpiY + // Adjusted for font size + QPaintDeviceMetrics pdm(toplevel); + int fontSize = toplevel->fontInfo().pointSize(); + if (fontSize == 0) + fontSize = (toplevel->fontInfo().pixelSize() * 72) / pdm.logicalDpiX(); + int x = config->readNumEntry(QString::fromLatin1("InitialWidth %1").arg(desk.width()), + QMIN( desk.width(), 368 + (6*pdm.logicalDpiX()*fontSize)/12 ) ); + int y = config->readNumEntry(QString::fromLatin1("InitialHeight %1").arg(desk.height()), + QMIN( desk.height(), 312 + (4*pdm.logicalDpiX()*fontSize)/12 ) ); + toplevel->resize(x,y); +} + +KControlApp::~KControlApp() +{ + if (toplevel) + { + KConfig *config = KGlobal::config(); + config->setGroup("General"); + QWidget *desk = QApplication::desktop(); + config->writeEntry(QString::fromLatin1("InitialWidth %1").arg(desk->width()), toplevel->width()); + config->writeEntry(QString::fromLatin1("InitialHeight %1").arg(desk->height()), toplevel->height()); + config->sync(); + } + delete toplevel; +} + +extern "C" KDE_EXPORT int kdemain(int argc, char *argv[]) +{ + KLocale::setMainCatalogue("kcontrol"); + KAboutData aboutKControl( "kcontrol", I18N_NOOP("KDE Control Center"), + KCONTROL_VERSION, I18N_NOOP("The KDE Control Center"), KAboutData::License_GPL, + I18N_NOOP("(c) 1998-2004, The KDE Control Center Developers")); + + KAboutData aboutKInfoCenter( "kinfocenter", I18N_NOOP("KDE Info Center"), + KCONTROL_VERSION, I18N_NOOP("The KDE Info Center"), KAboutData::License_GPL, + I18N_NOOP("(c) 1998-2004, The KDE Control Center Developers")); + + QCString argv_0 = argv[0]; + KAboutData *aboutData; + if (argv_0.right(11) == "kinfocenter") + { + aboutData = &aboutKInfoCenter; + KCGlobal::setIsInfoCenter(true); + kdDebug(1208) << "Running as KInfoCenter!\n" << endl; + } + else + { + aboutData = &aboutKControl; + KCGlobal::setIsInfoCenter(false); + } + + + if (argv_0.right(11) == "kinfocenter") + aboutData->addAuthor("Helge Deller", I18N_NOOP("Current Maintainer"), "deller@kde.org"); + else + aboutData->addAuthor("Daniel Molkentin", I18N_NOOP("Current Maintainer"), "molkentin@kde.org"); + + aboutData->addAuthor("Matthias Hoelzer-Kluepfel",0, "hoelzer@kde.org"); + aboutData->addAuthor("Matthias Elter",0, "elter@kde.org"); + aboutData->addAuthor("Matthias Ettrich",0, "ettrich@kde.org"); + aboutData->addAuthor("Waldo Bastian",0, "bastian@kde.org"); + + KCmdLineArgs::init( argc, argv, aboutData ); + KUniqueApplication::addCmdLineOptions(); + + KCGlobal::init(); + + if (!KControlApp::start()) { + kdDebug(1208) << "kcontrol is already running!\n" << endl; + return (0); + } + + KControlApp app; + + // show the whole stuff + app.mainWidget()->show(); + + return app.exec(); +} diff --git a/kcontrol/kcontrol/main.h b/kcontrol/kcontrol/main.h new file mode 100644 index 000000000..783e10001 --- /dev/null +++ b/kcontrol/kcontrol/main.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __main_h__ +#define __main_h__ + +#include + +class TopLevel; + +class KControlApp : public KUniqueApplication +{ + Q_OBJECT + +public: + KControlApp(); + virtual ~KControlApp(); + +private: + + TopLevel *toplevel; + +}; + +#endif diff --git a/kcontrol/kcontrol/moduleIface.cpp b/kcontrol/kcontrol/moduleIface.cpp new file mode 100644 index 000000000..b58f06c26 --- /dev/null +++ b/kcontrol/kcontrol/moduleIface.cpp @@ -0,0 +1,58 @@ +/* + Copyright (c) 2001 Daniel Molkentin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include "moduleIface.h" +#include "moduleIface.moc" + +#include +#include + +ModuleIface::ModuleIface(QObject *parent, const char *name) + : QObject(parent, name), DCOPObject(name) { + + _parent = static_cast(parent); + +} + +ModuleIface::~ModuleIface() { +} + +QFont ModuleIface::getFont() { + return _parent->font(); +} + +QPalette ModuleIface::getPalette(){ + kdDebug(1208) << "Returned Palette" << endl; + return _parent->palette(); +} + +QString ModuleIface::getStyle() { + KConfig config( "kdeglobals" ); + config.setGroup( "General" ); + return config.readEntry("widgetStyle"); +} + +void ModuleIface::invokeHandbook() { + emit handbookClicked(); +} + +void ModuleIface::invokeHelp() { + emit helpClicked(); +} + diff --git a/kcontrol/kcontrol/moduleIface.h b/kcontrol/kcontrol/moduleIface.h new file mode 100644 index 000000000..8c034d5cd --- /dev/null +++ b/kcontrol/kcontrol/moduleIface.h @@ -0,0 +1,54 @@ +/* + Copyright (c) 2001 Daniel Molkentin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __moduleIface_h__ +#define __moduleIface_h__ + +#include + +#include +#include +#include + +class ModuleIface : public QObject, public DCOPObject { + +Q_OBJECT +K_DCOP + +public: + ModuleIface(QObject *parent, const char *name); + ~ModuleIface(); + +k_dcop: + QFont getFont(); + QPalette getPalette(); + QString getStyle(); + void invokeHandbook(); + void invokeHelp(); + +signals: + void handbookClicked(); + void helpClicked(); + +private: + QWidget *_parent; + +}; + +#endif diff --git a/kcontrol/kcontrol/moduleiconview.cpp b/kcontrol/kcontrol/moduleiconview.cpp new file mode 100644 index 000000000..041e6709c --- /dev/null +++ b/kcontrol/kcontrol/moduleiconview.cpp @@ -0,0 +1,170 @@ +/* + Copyright (c) 2000 Matthias Elter + Copyright (c) 2003 Daniel Molkentin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include + +#include +#include +#include +#include + +#include + +#include "moduleiconview.h" +#include "moduleiconview.moc" +#include "modules.h" +#include "global.h" + + +ModuleIconView::ModuleIconView(ConfigModuleList *list, QWidget * parent, const char * name) + : KListView(parent, name) + , _path(KCGlobal::baseGroup()) + , _modules(list) +{ + setSorting(1, true); + addColumn(QString::null); + + // Needed to enforce a cut of the items label rather than + // showing a horizontal scrollbar + setResizeMode(LastColumn); + + header()->hide(); + + // This is intentionally _not_ connected with executed(), since + // honoring doubleclick doesn't make any sense here (changed by + // large user demand) + connect(this, SIGNAL(clicked(QListViewItem*)), + this, SLOT(slotItemSelected(QListViewItem*))); +} + +void ModuleIconView::makeSelected(ConfigModule *m) +{ + if (!m) return; + + for (QListViewItem *i = firstChild(); i; i = i->nextSibling()) + { + if(static_cast(i)->module() == m) + { + setSelected(i, true); + break; + } + } +} + +void ModuleIconView::makeVisible(ConfigModule *m) +{ + if (!m) return; + QString tmp = _modules->findModule(m); + if (tmp.isEmpty()) + return; + + _path = tmp; + fill(); +} + +void ModuleIconView::fill() +{ + clear(); + + QPixmap icon; + // add our "up" icon if we aren't top level + if (_path != KCGlobal::baseGroup()) + { + icon = loadIcon( "back" ); + // go-back node + ModuleIconItem *i = new ModuleIconItem(this, i18n("Back"), icon); + i->setOrderNo(0); + int last_slash = _path.findRev('/', -2); + if (last_slash == -1) + i->setTag(QString::null); + else + i->setTag(_path.left(last_slash+1)); + } + + int c = 0; + QStringList submenus = _modules->submenus(_path); + for (QStringList::Iterator it = submenus.begin(); it != submenus.end(); ++it ) + { + QString path = (*it); + + KServiceGroup::Ptr group = KServiceGroup::group(path); + if (!group || !group->isValid()) + continue; + + icon = loadIcon( group->icon() ); + + ModuleIconItem *i = new ModuleIconItem(this, group->caption(), icon); + i->setTag(path); + i->setOrderNo(++c); + } + + c = 0; + QPtrList moduleList = _modules->modules(_path); + for (ConfigModule *module=moduleList.first(); module != 0; module=moduleList.next()) + { + icon = loadIcon( module->icon() ); + + ModuleIconItem *i = new ModuleIconItem(this, module->moduleName(), icon, module); + i->setOrderNo(++c); + } +} + +void ModuleIconView::slotItemSelected(QListViewItem* item) +{ + QApplication::restoreOverrideCursor(); + if (!item) return; + + if (static_cast(item)->module()) + { + emit moduleSelected(static_cast(item)->module()); + } + else + { + _path = static_cast(item)->tag(); + fill(); + setCurrentItem(firstChild()); + } +} + +void ModuleIconView::keyPressEvent(QKeyEvent *e) +{ + if( e->key() == Key_Return + || e->key() == Key_Enter + || e->key() == Key_Space) + { + if (currentItem()) + slotItemSelected(currentItem()); + } + else + { + KListView::keyPressEvent(e); + } +} + +QPixmap ModuleIconView::loadIcon( const QString &name ) +{ + QPixmap icon = DesktopIcon( name, KCGlobal::iconSize() ); + + if(icon.isNull()) + icon = DesktopIcon( "folder", KCGlobal::iconSize() ); + + return icon; +} diff --git a/kcontrol/kcontrol/moduleiconview.h b/kcontrol/kcontrol/moduleiconview.h new file mode 100644 index 000000000..4f38a1cad --- /dev/null +++ b/kcontrol/kcontrol/moduleiconview.h @@ -0,0 +1,86 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __moduleiconview_h__ +#define __moduleiconview_h__ + +#include + +class ConfigModule; +class ConfigModuleList; + +class ModuleIconItem : public KListViewItem +{ + +public: + ModuleIconItem(QListView *parent, const QString& text, const QPixmap& pm, ConfigModule *m = 0) + : KListViewItem(parent, text) + , _tag(QString::null) + , _module(m) + { + setPixmap(0, pm); + } + + void setConfigModule(ConfigModule* m) { _module = m; } + void setTag(const QString& t) { _tag = t; } + void setOrderNo(int order) + { + QString s; + setText(1, s.sprintf( "%02d", order ) ); + } + + ConfigModule* module() { return _module; } + QString tag() { return _tag; } + + +private: + QString _tag; + ConfigModule *_module; +}; + +class ModuleIconView : public KListView +{ + Q_OBJECT + +public: + ModuleIconView(ConfigModuleList *list, QWidget * parent = 0, const char * name = 0); + + void makeSelected(ConfigModule* module); + void makeVisible(ConfigModule *module); + void fill(); + +signals: + void moduleSelected(ConfigModule*); + +protected slots: + void slotItemSelected(QListViewItem*); + +protected: + void keyPressEvent(QKeyEvent *); + QPixmap loadIcon( const QString &name ); + +private: + QString _path; + ConfigModuleList *_modules; + +}; + + + +#endif diff --git a/kcontrol/kcontrol/modulemenu.cpp b/kcontrol/kcontrol/modulemenu.cpp new file mode 100644 index 000000000..02becb29a --- /dev/null +++ b/kcontrol/kcontrol/modulemenu.cpp @@ -0,0 +1,105 @@ +this file is currently not used. +this message breaks compilation. +that is intentional :-] + +/* + Copyright (c) 2000 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "modulemenu.h" +#include "modulemenu.moc" +#include "modules.h" +#include "global.h" + + +ModuleMenu::ModuleMenu(ConfigModuleList *list, QWidget * parent, const char * name) + : KPopupMenu(parent, name) + , _modules(list) +{ + // use large id's to start with... + id = 10000; + + fill(this, KCGlobal::baseGroup()); + + connect(this, SIGNAL(activated(int)), this, SLOT(moduleSelected(int))); +} + +void ModuleMenu::fill(KPopupMenu *parentMenu, const QString &parentPath) +{ + QStringList subMenus = _modules->submenus(parentPath); + for(QStringList::ConstIterator it = subMenus.begin(); + it != subMenus.end(); ++it) + { + QString path = *it; + KServiceGroup::Ptr group = KServiceGroup::group(path); + if (!group) + continue; + + // create new menu + KPopupMenu *menu = new KPopupMenu(parentMenu); + connect(menu, SIGNAL(activated(int)), this, SLOT(moduleSelected(int))); + + // Item names may contain ampersands. To avoid them being converted to + // accelators, replace them with two ampersands. + QString name = group->caption(); + name.replace("&", "&&"); + + parentMenu->insertItem(KGlobal::iconLoader()->loadIcon(group->icon(), KIcon::Desktop, KIcon::SizeSmall) + , name, menu); + + fill(menu, path); + } + + ConfigModule *module; + QPtrList moduleList = _modules->modules(parentPath); + for (module=moduleList.first(); module != 0; module=moduleList.next()) + { + // Item names may contain ampersands. To avoid them being converted to + // accelators, replace them with two ampersands. + QString name = module->moduleName(); + name.replace("&", "&&"); + + int realid = parentMenu->insertItem(KGlobal::iconLoader()->loadIcon(module->icon(), KIcon::Desktop, KIcon::SizeSmall) + , name, id); + _moduleDict.insert(realid, module); + + id++; + } + +} + +void ModuleMenu::moduleSelected(int id) +{ + kdDebug(1208) << "Item " << id << " selected" << endl; + ConfigModule *module = _moduleDict[id]; + if (module) + emit moduleActivated(module); +} diff --git a/kcontrol/kcontrol/modulemenu.h b/kcontrol/kcontrol/modulemenu.h new file mode 100644 index 000000000..b08140bfc --- /dev/null +++ b/kcontrol/kcontrol/modulemenu.h @@ -0,0 +1,65 @@ +this file is currently not used. +this message breaks compilation. +that is intentional :-] + +/* + Copyright (c) 2000 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef __modulemenu_h__ +#define __modulemenu_h__ + + +#include +#include +#include +#include +#include +#include + +#include + + +class ConfigModule; +class ConfigModuleList; + + +class ModuleMenu : public KPopupMenu +{ + Q_OBJECT + +public: + ModuleMenu(ConfigModuleList *list, QWidget * parent = 0, const char * name = 0); + +signals: + void moduleActivated(ConfigModule*); + +private slots: + void moduleSelected(int id); + +protected: + void fill(KPopupMenu *parentMenu, const QString &parentPath); + +private: + int id; + + ConfigModuleList *_modules; + QIntDict _moduleDict; +}; + + +#endif diff --git a/kcontrol/kcontrol/modules.cpp b/kcontrol/kcontrol/modules.cpp new file mode 100644 index 000000000..b6d8a2693 --- /dev/null +++ b/kcontrol/kcontrol/modules.cpp @@ -0,0 +1,345 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "modules.h" +#include "modules.moc" +#include "global.h" +#include "proxywidget.h" +#include +#include "kcrootonly.h" + +#include + + +template class QPtrList; + + +ConfigModule::ConfigModule(const KService::Ptr &s) + : KCModuleInfo(s), _changed(false), _module(0), _embedWidget(0), + _rootProcess(0), _embedLayout(0), _embedFrame(0), _embedStack(0) +{ +} + +ConfigModule::~ConfigModule() +{ + deleteClient(); +} + +ProxyWidget *ConfigModule::module() +{ + if (_module) + return _module; + + bool run_as_root = needsRootPrivileges() && (getuid() != 0); + + KCModule *modWidget = 0; + + if (run_as_root && isHiddenByDefault()) + modWidget = new KCRootOnly(0, "root_only"); + else + modWidget = KCModuleLoader::loadModule(*this); + + if (modWidget) + { + + _module = new ProxyWidget(modWidget, moduleName(), "", run_as_root); + connect(_module, SIGNAL(changed(bool)), this, SLOT(clientChanged(bool))); + connect(_module, SIGNAL(closed()), this, SLOT(clientClosed())); + connect(_module, SIGNAL(handbookRequest()), this, SIGNAL(handbookRequest())); + connect(_module, SIGNAL(helpRequest()), this, SIGNAL(helpRequest())); + connect(_module, SIGNAL(runAsRoot()), this, SLOT(runAsRoot())); + + return _module; + } + + return 0; +} + +void ConfigModule::deleteClient() +{ + if (_embedWidget) + XKillClient(qt_xdisplay(), _embedWidget->embeddedWinId()); + + delete _rootProcess; + _rootProcess = 0; + + delete _embedWidget; + _embedWidget = 0; + delete _embedStack; + _embedStack = 0; + delete _embedFrame; + _embedFrame = 0; + kapp->syncX(); + + if(_module) + _module->close(true); + _module = 0; + + delete _embedLayout; + _embedLayout = 0; + + KCModuleLoader::unloadModule(*this); + _changed = false; +} + +void ConfigModule::clientClosed() +{ + deleteClient(); + + emit changed(this); + emit childClosed(); +} + + +void ConfigModule::clientChanged(bool state) +{ + setChanged(state); + emit changed(this); +} + + +void ConfigModule::runAsRoot() +{ + if (!_module) + return; + + delete _rootProcess; + delete _embedWidget; + delete _embedLayout; + delete _embedStack; + + // create an embed widget that will embed the + // kcmshell running as root + _embedLayout = new QVBoxLayout(_module->parentWidget()); + _embedFrame = new QVBox( _module->parentWidget() ); + _embedFrame->setFrameStyle( QFrame::Box | QFrame::Raised ); + QPalette pal( red ); + pal.setColor( QColorGroup::Background, + _module->parentWidget()->colorGroup().background() ); + _embedFrame->setPalette( pal ); + _embedFrame->setLineWidth( 2 ); + _embedFrame->setMidLineWidth( 2 ); + _embedLayout->addWidget(_embedFrame,1); + // cannot reparent anything else inside QXEmbed, so put the busy label separately + _embedStack = new QWidgetStack(_embedFrame); + _embedWidget = new KControlEmbed(_embedStack); + _module->hide(); + _embedFrame->show(); + QLabel *_busy = new QLabel(i18n("Loading..."), _embedStack); + _busy->setAlignment(AlignCenter); + _busy->setTextFormat(RichText); + _busy->setGeometry(0,0, _module->width(), _module->height()); + _busy->show(); + _embedStack->raiseWidget(_busy); + connect(_embedWidget, SIGNAL( windowEmbedded(WId)), SLOT( embedded())); + + // prepare the process to run the kcmshell + QString cmd = service()->exec().stripWhiteSpace(); + bool kdeshell = false; + if (cmd.left(5) == "kdesu") + { + cmd = cmd.remove(0,5).stripWhiteSpace(); + // remove all kdesu switches + while( cmd.length() > 1 && cmd[ 0 ] == '-' ) + { + int pos = cmd.find( ' ' ); + cmd = cmd.remove( 0, pos ).stripWhiteSpace(); + } + } + + if (cmd.left(8) == "kcmshell") + { + cmd = cmd.remove(0,8).stripWhiteSpace(); + kdeshell = true; + } + + // run the process + QString kdesu = KStandardDirs::findExe("kdesu"); + if (!kdesu.isEmpty()) + { + _rootProcess = new KProcess; + *_rootProcess << kdesu; + *_rootProcess << "--nonewdcop"; + // We have to disable the keep-password feature because + // in that case the modules is started through kdesud and kdesu + // returns before the module is running and that doesn't work. + // We also don't have a way to close the module in that case. + *_rootProcess << "--n"; // Don't keep password. + if (kdeshell) { + *_rootProcess << QString("%1 %2 --embed %3 --lang %4").arg(locate("exe", "kcmshell")).arg(cmd).arg(_embedWidget->winId()).arg(KGlobal::locale()->language()); + } + else { + *_rootProcess << QString("%1 --embed %2 --lang %3").arg(cmd).arg(_embedWidget->winId()).arg( KGlobal::locale()->language() ); + } + + connect(_rootProcess, SIGNAL(processExited(KProcess*)), this, SLOT(rootExited(KProcess*))); + + if ( !_rootProcess->start(KProcess::NotifyOnExit) ) + { + delete _rootProcess; + _rootProcess = 0L; + } + + return; + } + + // clean up in case of failure + delete _embedStack; + _embedStack = 0; + delete _embedFrame; + _embedWidget = 0; + delete _embedLayout; + _embedLayout = 0; + _module->show(); +} + + +void ConfigModule::rootExited(KProcess *) +{ + if (_embedWidget->embeddedWinId()) + XDestroyWindow(qt_xdisplay(), _embedWidget->embeddedWinId()); + + delete _embedWidget; + _embedWidget = 0; + + delete _rootProcess; + _rootProcess = 0; + + delete _embedLayout; + _embedLayout = 0; + + delete _module; + _module=0; + + _changed = false; + emit changed(this); + emit childClosed(); +} + +void ConfigModule::embedded() +{ + _embedStack->raiseWidget(_embedWidget); // put it above the busy label +} + +const KAboutData *ConfigModule::aboutData() const +{ + if (!_module) return 0; + return _module->aboutData(); +} + + +ConfigModuleList::ConfigModuleList() +{ + setAutoDelete(true); + subMenus.setAutoDelete(true); +} + +void ConfigModuleList::readDesktopEntries() +{ + readDesktopEntriesRecursive( KCGlobal::baseGroup() ); +} + +bool ConfigModuleList::readDesktopEntriesRecursive(const QString &path) +{ + + KServiceGroup::Ptr group = KServiceGroup::group(path); + + if (!group || !group->isValid()) return false; + + KServiceGroup::List list = group->entries(true, true); + + if( list.isEmpty() ) + return false; + + Menu *menu = new Menu; + subMenus.insert(path, menu); + + for( KServiceGroup::List::ConstIterator it = list.begin(); + it != list.end(); it++) + { + KSycocaEntry *p = (*it); + if (p->isType(KST_KService)) + { + KService *s = static_cast(p); + if (!kapp->authorizeControlModule(s->menuId())) + continue; + + ConfigModule *module = new ConfigModule(s); + if (module->library().isEmpty()) + { + delete module; + continue; + } + + append(module); + menu->modules.append(module); + } + else if (p->isType(KST_KServiceGroup) && + readDesktopEntriesRecursive(p->entryPath()) ) + menu->submenus.append(p->entryPath()); + + } + return true; +} + +QPtrList ConfigModuleList::modules(const QString &path) +{ + Menu *menu = subMenus.find(path); + if (menu) + return menu->modules; + + return QPtrList(); +} + +QStringList ConfigModuleList::submenus(const QString &path) +{ + Menu *menu = subMenus.find(path); + if (menu) + return menu->submenus; + + return QStringList(); +} + +QString ConfigModuleList::findModule(ConfigModule *module) +{ + QDictIterator it(subMenus); + Menu *menu; + for(;(menu = it.current());++it) + { + if (menu->modules.containsRef(module)) + return it.currentKey(); + } + return QString::null; +} diff --git a/kcontrol/kcontrol/modules.h b/kcontrol/kcontrol/modules.h new file mode 100644 index 000000000..f2364698d --- /dev/null +++ b/kcontrol/kcontrol/modules.h @@ -0,0 +1,136 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef MODULES_H +#define MODULES_H + +#include +#include +#include +#include + +template class QPtrList; +class QStringList; +class KAboutData; +class KCModule; +class ProxyWidget; +class KProcess; +class QXEmbed; +class QVBoxLayout; +class QVBox; +class QWidgetStack; + +class ConfigModule : public QObject, public KCModuleInfo +{ + Q_OBJECT + +public: + + ConfigModule(const KService::Ptr &s); + ~ConfigModule(); + + bool isChanged() { return _changed; }; + void setChanged(bool changed) { _changed = changed; }; + + bool isActive() { return _module != 0; }; + ProxyWidget *module(); + const KAboutData *aboutData() const; + + +public slots: + + void deleteClient(); + + +private slots: + + void clientClosed(); + void clientChanged(bool state); + void runAsRoot(); + void rootExited(KProcess *proc); + void embedded(); + + +signals: + + void changed(ConfigModule *module); + void childClosed(); + void handbookRequest(); + void helpRequest(); + + +private: + + bool _changed; + ProxyWidget *_module; + QXEmbed *_embedWidget; + KProcess *_rootProcess; + QVBoxLayout *_embedLayout; + QVBox *_embedFrame; + QWidgetStack *_embedStack; + +}; + +class ConfigModuleList : public QPtrList +{ +public: + + ConfigModuleList(); + + void readDesktopEntries(); + bool readDesktopEntriesRecursive(const QString &path); + + /** + * Returns all submenus of the submenu identified by path + */ + QPtrList modules(const QString &path); + + /** + * Returns all modules of the submenu identified by path + */ + QStringList submenus(const QString &path); + + /** + * Returns the path of the submenu the module is in + */ + QString findModule(ConfigModule *module); + +protected: + + class Menu + { + public: + QPtrList modules; + QStringList submenus; + }; + + QDict subMenus; +}; + +class KControlEmbed : public QXEmbed + { + Q_OBJECT + public: + KControlEmbed( QWidget* w ) : QXEmbed( w ) {} + virtual void windowChanged( WId w ) { if( w ) emit windowEmbedded( w ); } + signals: + void windowEmbedded( WId w ); + }; + +#endif diff --git a/kcontrol/kcontrol/moduletreeview.cpp b/kcontrol/kcontrol/moduletreeview.cpp new file mode 100644 index 000000000..f933cfcef --- /dev/null +++ b/kcontrol/kcontrol/moduletreeview.cpp @@ -0,0 +1,377 @@ +/* + Copyright (c) 2000 Matthias Elter + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "moduletreeview.h" +#include "moduletreeview.moc" +#include "modules.h" +#include "global.h" + +static QPixmap appIcon(const QString &iconName) +{ + QString path; + QPixmap normal = KGlobal::iconLoader()->loadIcon(iconName, KIcon::Small, 0, KIcon::DefaultState, &path, true); + // make sure they are not larger than KIcon::SizeSmall + if (normal.width() > KIcon::SizeSmall || normal.height() > KIcon::SizeSmall) + { + QImage tmp = normal.convertToImage(); + tmp = tmp.smoothScale(KIcon::SizeSmall, KIcon::SizeSmall); + normal.convertFromImage(tmp); + } + return normal; +} + +class ModuleTreeWhatsThis : public QWhatsThis +{ +public: + ModuleTreeWhatsThis( ModuleTreeView* tree) + : QWhatsThis( tree ), treeView( tree ) {} + ~ModuleTreeWhatsThis(){}; + + + QString text( const QPoint & p) { + ModuleTreeItem* i = (ModuleTreeItem*) treeView->itemAt( p ); + if ( i && i->module() ) { + return i->module()->comment(); + } else if ( i ) { + return i18n("The %1 configuration group. Click to open it.").arg( i->text(0) ); + } + return i18n("This treeview displays all available control modules. Click on one of the modules to receive more detailed information."); + } + +private: + ModuleTreeView* treeView; +}; + +ModuleTreeView::ModuleTreeView(ConfigModuleList *list, QWidget * parent, const char * name) + : KListView(parent, name) + , _modules(list) +{ + addColumn(QString::null); + setColumnWidthMode (0, QListView::Maximum); + setAllColumnsShowFocus(true); + setResizeMode(QListView::AllColumns); + setRootIsDecorated(true); + setHScrollBarMode(AlwaysOff); + header()->hide(); + + new ModuleTreeWhatsThis( this ); + + connect(this, SIGNAL(clicked(QListViewItem*)), + this, SLOT(slotItemSelected(QListViewItem*))); +} + +void ModuleTreeView::fill() +{ + clear(); + + QStringList subMenus = _modules->submenus(KCGlobal::baseGroup()); + for(QStringList::ConstIterator it = subMenus.begin(); + it != subMenus.end(); ++it) + { + QString path = *it; + ModuleTreeItem* menu = new ModuleTreeItem(this); + menu->setGroup(path); + fill(menu, path); + } + + ConfigModule *module; + QPtrList moduleList = _modules->modules(KCGlobal::baseGroup()); + for (module=moduleList.first(); module != 0; module=moduleList.next()) + { + new ModuleTreeItem(this, module); + } +} + +void ModuleTreeView::fill(ModuleTreeItem *parent, const QString &parentPath) +{ + QStringList subMenus = _modules->submenus(parentPath); + for(QStringList::ConstIterator it = subMenus.begin(); + it != subMenus.end(); ++it) + { + QString path = *it; + ModuleTreeItem* menu = new ModuleTreeItem(parent); + menu->setGroup(path); + fill(menu, path); + } + + ConfigModule *module; + QPtrList moduleList = _modules->modules(parentPath); + for (module=moduleList.first(); module != 0; module=moduleList.next()) + { + new ModuleTreeItem(parent, module); + } +} + + + +QSize ModuleTreeView::sizeHint() const +{ + return QListView::sizeHint().boundedTo( + QSize( fontMetrics().maxWidth()*35, QWIDGETSIZE_MAX) ); +} + +void ModuleTreeView::makeSelected(ConfigModule *module) +{ + ModuleTreeItem *item = static_cast(firstChild()); + + updateItem(item, module); +} + +void ModuleTreeView::updateItem(ModuleTreeItem *item, ConfigModule *module) +{ + while (item) + { + if (item->childCount() != 0) + updateItem(static_cast(item->firstChild()), module); + if (item->module() == module) + { + setSelected(item, true); + break; + } + item = static_cast(item->nextSibling()); + } +} + +/* +void ModuleTreeView::expandItem(QListViewItem *item, QPtrList *parentList) +{ + while (item) + { + setOpen(item, parentList->contains(item)); + + if (item->childCount() != 0) + expandItem(item->firstChild(), parentList); + item = item->nextSibling(); + } +} +*/ +void ModuleTreeView::makeVisible(ConfigModule *module) +{ + QString path = _modules->findModule(module); + if (path.startsWith(KCGlobal::baseGroup())) + path = path.mid(KCGlobal::baseGroup().length()); + + QStringList groups = QStringList::split('/', path); + + ModuleTreeItem *item = 0; + QStringList::ConstIterator it; + for (it=groups.begin(); it != groups.end(); ++it) + { + if (item) + item = static_cast(item->firstChild()); + else + item = static_cast(firstChild()); + + while (item) + { + if (item->tag() == *it) + { + setOpen(item, true); + break; + } + item = static_cast(item->nextSibling()); + } + if (!item) + break; // Not found (?) + } + + // make the item visible + if (item) + ensureItemVisible(item); +} + +void ModuleTreeView::slotItemSelected(QListViewItem* item) +{ + if (!item) return; + + if (static_cast(item)->module()) + { + emit moduleSelected(static_cast(item)->module()); + return; + } + else + { + emit categorySelected(item); + } + + setOpen(item, !item->isOpen()); + + /* + else + { + QPtrList parents; + + QListViewItem* i = item; + while(i) + { + parents.append(i); + i = i->parent(); + } + + //int oy1 = item->itemPos(); + //int oy2 = mapFromGlobal(QCursor::pos()).y(); + //int offset = oy2 - oy1; + + expandItem(firstChild(), &parents); + + //int x =mapFromGlobal(QCursor::pos()).x(); + //int y = item->itemPos() + offset; + //QCursor::setPos(mapToGlobal(QPoint(x, y))); + } + */ +} + +void ModuleTreeView::keyPressEvent(QKeyEvent *e) +{ + if (!currentItem()) return; + + if(e->key() == Key_Return + || e->key() == Key_Enter + || e->key() == Key_Space) + { + //QCursor::setPos(mapToGlobal(QPoint(10, currentItem()->itemPos()+5))); + slotItemSelected(currentItem()); + } + else + KListView::keyPressEvent(e); +} + + +ModuleTreeItem::ModuleTreeItem(QListViewItem *parent, ConfigModule *module) + : QListViewItem(parent) + , _module(module) + , _tag(QString::null) + , _maxChildIconWidth(0) +{ + if (_module) + { + setText(0, " " + module->moduleName()); + _icon = module->icon(); + setPixmap(0, appIcon(_icon)); + } +} + +ModuleTreeItem::ModuleTreeItem(QListView *parent, ConfigModule *module) + : QListViewItem(parent) + , _module(module) + , _tag(QString::null) + , _maxChildIconWidth(0) +{ + if (_module) + { + setText(0, " " + module->moduleName()); + _icon = module->icon(); + setPixmap(0, appIcon(_icon)); + } +} + +ModuleTreeItem::ModuleTreeItem(QListViewItem *parent, const QString& text) + : QListViewItem(parent, " " + text) + , _module(0) + , _tag(QString::null) + , _maxChildIconWidth(0) + {} + +ModuleTreeItem::ModuleTreeItem(QListView *parent, const QString& text) + : QListViewItem(parent, " " + text) + , _module(0) + , _tag(QString::null) + , _maxChildIconWidth(0) + {} + +void ModuleTreeItem::setPixmap(int column, const QPixmap& pm) +{ + if (!pm.isNull()) + { + ModuleTreeItem* p = dynamic_cast(parent()); + if (p) + p->regChildIconWidth(pm.width()); + } + + QListViewItem::setPixmap(column, pm); +} + +void ModuleTreeItem::regChildIconWidth(int width) +{ + if (width > _maxChildIconWidth) + _maxChildIconWidth = width; +} + +void ModuleTreeItem::paintCell( QPainter * p, const QColorGroup & cg, int column, int width, int align ) +{ + if (!pixmap(0)) + { + int offset = 0; + ModuleTreeItem* parentItem = dynamic_cast(parent()); + if (parentItem) + { + offset = parentItem->maxChildIconWidth(); + } + + if (offset > 0) + { + QPixmap pixmap(offset, offset); + pixmap.fill(Qt::color0); + pixmap.setMask(pixmap.createHeuristicMask()); + QBitmap mask( pixmap.size(), true ); + pixmap.setMask( mask ); + QListViewItem::setPixmap(0, pixmap); + } + } + + QListViewItem::paintCell( p, cg, column, width, align ); +} + + +void ModuleTreeItem::setGroup(const QString &path) +{ + KServiceGroup::Ptr group = KServiceGroup::group(path); + QString defName = path.left(path.length()-1); + int pos = defName.findRev('/'); + if (pos >= 0) + defName = defName.mid(pos+1); + if (group && group->isValid()) + { + _icon = group->icon(); + setPixmap(0, appIcon(_icon)); + setText(0, " " + group->caption()); + setTag(defName); + setCaption(group->caption()); + } + else + { + // Should not happen: Installation problem + // Let's try to fail softly. + setText(0, " " + defName); + setTag(defName); + } +} diff --git a/kcontrol/kcontrol/moduletreeview.h b/kcontrol/kcontrol/moduletreeview.h new file mode 100644 index 000000000..ecdd2d938 --- /dev/null +++ b/kcontrol/kcontrol/moduletreeview.h @@ -0,0 +1,95 @@ +/* + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __moduletreeview_h__ +#define __moduletreeview_h__ + +#include +#include +#include +#include +#include + + +class ConfigModule; +class ConfigModuleList; +class QPainter; + +class ModuleTreeItem : public QListViewItem +{ + +public: + ModuleTreeItem(QListViewItem *parent, ConfigModule *module = 0); + ModuleTreeItem(QListViewItem *parent, const QString& text); + ModuleTreeItem(QListView *parent, ConfigModule *module = 0); + ModuleTreeItem(QListView *parent, const QString& text); + + void setTag(const QString& tag) { _tag = tag; } + void setCaption(const QString& caption) { _caption = caption; } + void setModule(ConfigModule *m) { _module = m; } + QString tag() const { return _tag; }; + QString caption() const { return _caption; }; + QString icon() const { return _icon; }; + ConfigModule *module() { return _module; }; + void regChildIconWidth(int width); + int maxChildIconWidth() { return _maxChildIconWidth; } + + void setPixmap(int column, const QPixmap& pm); + void setGroup(const QString &path); + +protected: + void paintCell( QPainter * p, const QColorGroup & cg, int column, int width, int align ); + +private: + ConfigModule *_module; + QString _tag; + QString _caption; + int _maxChildIconWidth; + QString _icon; +}; + +class ModuleTreeView : public KListView +{ + Q_OBJECT + +public: + ModuleTreeView(ConfigModuleList *list, QWidget * parent = 0, const char * name = 0); + + void makeSelected(ConfigModule* module); + void makeVisible(ConfigModule *module); + void fill(); + QSize sizeHint() const; + +signals: + void moduleSelected(ConfigModule*); + void categorySelected(QListViewItem*); + +protected slots: + void slotItemSelected(QListViewItem*); + +protected: + void updateItem(ModuleTreeItem *item, ConfigModule* module); + void keyPressEvent(QKeyEvent *); + void fill(ModuleTreeItem *parent, const QString &parentPath); + +private: + ConfigModuleList *_modules; +}; + +#endif diff --git a/kcontrol/kcontrol/proxywidget.cpp b/kcontrol/kcontrol/proxywidget.cpp new file mode 100644 index 000000000..6654bfe14 --- /dev/null +++ b/kcontrol/kcontrol/proxywidget.cpp @@ -0,0 +1,323 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include // for getuid() + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "global.h" +#include "proxywidget.h" +#include "proxywidget.moc" + +#include +#include + +class WhatsThis : public QWhatsThis +{ +public: + WhatsThis( ProxyWidget* parent ) + : QWhatsThis( parent ), proxy( parent ) {} + ~WhatsThis(){}; + + + QString text( const QPoint & ) { + if ( !proxy->quickHelp().isEmpty() ) + return proxy->quickHelp(); + else + return i18n("The currently loaded configuration module."); + } + +private: + ProxyWidget* proxy; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +static void setVisible(QPushButton *btn, bool vis) +{ + if (vis) + btn->show(); + else + btn->hide(); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + + +class RootInfoWidget : public QLabel +{ +public: + RootInfoWidget(QWidget *parent, const char *name); + void setRootMsg(const QString& s) { setText(s); } +}; + +RootInfoWidget::RootInfoWidget(QWidget *parent, const char *name = 0) + : QLabel(parent, name) +{ + setFrameShape(QFrame::Box); + setFrameShadow(QFrame::Raised); + + setText(i18n("Changes in this module require root access.
" + "Click the \"Administrator Mode\" button to " + "allow modifications in this module.")); + + QWhatsThis::add(this, i18n("This module requires special permissions, probably " + "for system-wide modifications; therefore, it is " + "required that you provide the root password to be " + "able to change the module's properties. If you " + "do not provide the password, the module will be " + "disabled.")); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +class ProxyView : public QScrollView +{ +public: + ProxyView(KCModule *client, const QString& title, QWidget *parent, bool run_as_root, const char *name); + +private: + virtual void resizeEvent(QResizeEvent *); + + QWidget *contentWidget; + KCModule *client; + bool scroll; +}; + +class ProxyContentWidget : public QWidget +{ +public: + ProxyContentWidget( QWidget* parent ) : QWidget( parent ) {} + ~ProxyContentWidget(){} + + // this should be really done by qscrollview in AutoOneFit mode! + QSize sizeHint() const { return minimumSizeHint(); } +}; + + +ProxyView::ProxyView(KCModule *_client, const QString&, QWidget *parent, bool run_as_root, const char *name) + : QScrollView(parent, name), client(_client) +{ + setResizePolicy(QScrollView::AutoOneFit); + setFrameStyle( NoFrame ); + contentWidget = new ProxyContentWidget( viewport() ); + + QVBoxLayout* vbox = new QVBoxLayout( contentWidget ); + + if (run_as_root && _client->useRootOnlyMsg()) // notify the user + { + RootInfoWidget *infoBox = new RootInfoWidget(contentWidget); + vbox->addWidget( infoBox ); + QString msg = _client->rootOnlyMsg(); + if (!msg.isEmpty()) + infoBox->setRootMsg(msg); + vbox->setSpacing(KDialog::spacingHint()); + } + client->reparent(contentWidget,0,QPoint(0,0),true); + vbox->addWidget( client ); + vbox->activate(); // make sure we have a proper minimumSizeHint + addChild(contentWidget); +} + +void ProxyView::resizeEvent(QResizeEvent *e) +{ + QScrollView::resizeEvent(e); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + + +ProxyWidget::ProxyWidget(KCModule *client, QString title, const char *name, + bool run_as_root) + : QWidget(0, name) + , _client(client) +{ + setCaption(title); + + if (getuid()==0 ) { + // Make root modules look as similar as possible... + QCString replyType; + QByteArray replyData; + + if (kapp->dcopClient()->call("kcontrol", "moduleIface", "getPalette()", QByteArray(), + replyType, replyData)) + if ( replyType == "QPalette") { + QDataStream reply( replyData, IO_ReadOnly ); + QPalette pal; + reply >> pal; + setPalette(pal); + } +/* // Doesn't work ... + if (kapp->dcopClient()->call("kcontrol", "moduleIface", "getStyle()", QByteArray(), + replyType, replyData)) + if ( replyType == "QString") { + QDataStream reply( replyData, IO_ReadOnly ); + QString style; + reply >> style; + setStyle(style); + } +*/ + if (kapp->dcopClient()->call("kcontrol", "moduleIface", "getFont()", QByteArray(), + replyType, replyData)) + if ( replyType == "QFont") { + QDataStream reply( replyData, IO_ReadOnly ); + QFont font; + reply >> font; + setFont(font); + } + } + + view = new ProxyView(client, title, this, run_as_root, "proxyview"); + (void) new WhatsThis( this ); + + connect(_client, SIGNAL(changed(bool)), SLOT(clientChanged(bool))); + connect(_client, SIGNAL(quickHelpChanged()), SIGNAL(quickHelpChanged())); + + _sep = new KSeparator(KSeparator::HLine, this); + + _handbook= new KPushButton( KGuiItem(KStdGuiItem::help().text(),"contents"), this ); + _default = new KPushButton( KStdGuiItem::defaults(), this ); + _apply = new KPushButton( KStdGuiItem::apply(), this ); + _reset = new KPushButton( KGuiItem( i18n( "&Reset" ), "undo" ), this ); + _root = new KPushButton( KGuiItem(i18n( "&Administrator Mode" )), this ); + + bool mayModify = (!run_as_root || !_client->useRootOnlyMsg()) && !KCGlobal::isInfoCenter(); + + // only enable the requested buttons + int b = _client->buttons(); + setVisible(_handbook, (b & KCModule::Help)); + setVisible(_default, mayModify && (b & KCModule::Default)); + setVisible(_apply, mayModify && (b & KCModule::Apply)); + setVisible(_reset, mayModify && (b & KCModule::Apply)); + setVisible(_root, run_as_root); + + // disable initial buttons + _apply->setEnabled( false ); + _reset->setEnabled( false ); + + connect(_handbook, SIGNAL(clicked()), SLOT(handbookClicked())); + connect(_default, SIGNAL(clicked()), SLOT(defaultClicked())); + connect(_apply, SIGNAL(clicked()), SLOT(applyClicked())); + connect(_reset, SIGNAL(clicked()), SLOT(resetClicked())); + connect(_root, SIGNAL(clicked()), SLOT(rootClicked())); + + QVBoxLayout *top = new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + top->addWidget(view); + top->addWidget(_sep); + + QHBoxLayout *buttons = new QHBoxLayout(top, 4); + buttons->addWidget(_handbook); + buttons->addWidget(_default); + if (run_as_root) + { + buttons->addWidget(_root); + } + + buttons->addStretch(1); + if (mayModify) + { + buttons->addWidget(_apply); + buttons->addWidget(_reset); + } + + top->activate(); +} + +ProxyWidget::~ProxyWidget() +{ + delete _client; +} + +QString ProxyWidget::quickHelp() const +{ + if (_client) + return _client->quickHelp(); + else + return ""; +} + +void ProxyWidget::handbookClicked() +{ + if (getuid()!=0) + emit handbookRequest(); + else + kapp->dcopClient()->send("kcontrol", "moduleIface", "invokeHandbook()", QByteArray()); +} + +void ProxyWidget::helpClicked() +{ + if (getuid()!=0) + emit helpRequest(); + else + kapp->dcopClient()->send("kcontrol", "moduleIface", "invokeHelp()", QByteArray()); +} + +void ProxyWidget::defaultClicked() +{ + clientChanged(true); + _client->defaults(); +} + +void ProxyWidget::applyClicked() +{ + _client->save(); + clientChanged(false); +} + +void ProxyWidget::resetClicked() +{ + _client->load(); + clientChanged(false); +} + +void ProxyWidget::rootClicked() +{ + emit runAsRoot(); +} + +void ProxyWidget::clientChanged(bool state) +{ + _apply->setEnabled(state); + _reset->setEnabled(state); + + // forward the signal + emit changed(state); +} + +const KAboutData *ProxyWidget::aboutData() const +{ + return _client->aboutData(); +} + +// vim: sw=2 sts=2 et diff --git a/kcontrol/kcontrol/proxywidget.h b/kcontrol/kcontrol/proxywidget.h new file mode 100644 index 000000000..a06e571de --- /dev/null +++ b/kcontrol/kcontrol/proxywidget.h @@ -0,0 +1,82 @@ +/* + + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + + + +#ifndef __PROXYWIDGET_H__ +#define __PROXYWIDGET_H__ + + +class QWidget; +class QPushButton; +class QFrame; + +class KCModule; +class KAboutData; + +#include "dockcontainer.h" +#include + +class ProxyView; + +class ProxyWidget : public QWidget +{ + Q_OBJECT + +public: + + ProxyWidget(KCModule *client, QString title, const char *name=0, bool run_as_root = false); + ~ProxyWidget(); + + QString quickHelp() const; + const KAboutData *aboutData() const; + +public slots: + + void handbookClicked(); + void helpClicked(); + void defaultClicked(); + void applyClicked(); + void resetClicked(); + void rootClicked(); + + void clientChanged(bool state); + + +signals: + + void closed(); + void handbookRequest(); + void helpRequest(); + void changed(bool state); + void runAsRoot(); + void quickHelpChanged(); + +private: + + QPushButton *_handbook, *_default, *_apply, *_reset, *_root; + QFrame *_sep; + KCModule *_client; + ProxyView *view; + +}; + + +#endif diff --git a/kcontrol/kcontrol/searchwidget.cpp b/kcontrol/kcontrol/searchwidget.cpp new file mode 100644 index 000000000..9701d2d20 --- /dev/null +++ b/kcontrol/kcontrol/searchwidget.cpp @@ -0,0 +1,205 @@ +/* + Copyright (c) 2000 Matthias Elter + Copyright (c) 2004 Daniel Molkentin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "searchwidget.h" +#include "searchwidget.moc" + +/** + * Helper class for sorting icon modules by name without losing the fileName ID + */ +class ModuleItem : public QListBoxPixmap +{ +public: + ModuleItem(ConfigModule *module, QListBox * listbox = 0) : + QListBoxPixmap(listbox, + KGlobal::iconLoader()->loadIcon(module->icon(), KIcon::Desktop, KIcon::SizeSmall), + module->moduleName()) + , m_module(module) + { + + } + + ConfigModule *module() const { return m_module; }; + +protected: + ConfigModule *m_module; + +}; + +KeywordListEntry::KeywordListEntry(const QString& name, ConfigModule* module) + : _name(name) +{ + if(module) + _modules.append(module); +} + +void KeywordListEntry::addModule(ConfigModule* module) +{ + if(module) + _modules.append(module); +} + +SearchWidget::SearchWidget(QWidget *parent , const char *name) + : QWidget(parent, name) +{ + _keywords.setAutoDelete(true); + + QVBoxLayout * l = new QVBoxLayout(this, 0, 2); + + // keyword list + _keyList = new KListBox(this); + QLabel *keyl = new QLabel(_keyList, i18n("&Keywords:"), this); + + l->addWidget(keyl); + l->addWidget(_keyList); + + // result list + _resultList = new KListBox(this); + QLabel *resultl = new QLabel(_resultList, i18n("&Results:"), this); + + l->addWidget(resultl); + l->addWidget(_resultList); + + + connect(_keyList, SIGNAL(highlighted(const QString&)), + this, SLOT(slotKeywordSelected(const QString&))); + + connect(_resultList, SIGNAL(selected(QListBoxItem*)), + this, SLOT(slotModuleSelected(QListBoxItem *))); + connect(_resultList, SIGNAL(clicked(QListBoxItem *)), + this, SLOT(slotModuleClicked(QListBoxItem *))); +} + +void SearchWidget::populateKeywordList(ConfigModuleList *list) +{ + ConfigModule *module; + + // loop through all control modules + for (module=list->first(); module != 0; module=list->next()) + { + if (module->library().isEmpty()) + continue; + + // get the modules keyword list + QStringList kw = module->keywords(); + kw << module->moduleName(); + + // loop through the keyword list to populate _keywords + for(QStringList::ConstIterator it = kw.begin(); it != kw.end(); ++it) + { + QString name = (*it).lower(); + bool found = false; + + // look if _keywords already has an entry for this keyword + for(KeywordListEntry *k = _keywords.first(); k != 0; k = _keywords.next()) + { + // if there is an entry for this keyword, add the module to the entries modul list + if (k->moduleName() == name) + { + k->addModule(module); + found = true; + break; + } + } + + // if there is entry for this keyword, create a new one + if (!found) + { + KeywordListEntry *k = new KeywordListEntry(name, module); + _keywords.append(k); + } + } + } + populateKeyListBox("*"); +} + +void SearchWidget::populateKeyListBox(const QString& s) +{ + _keyList->clear(); + + QStringList matches; + + for(KeywordListEntry *k = _keywords.first(); k != 0; k = _keywords.next()) + { + if ( QRegExp(s, false, true).search(k->moduleName()) >= 0) + matches.append(k->moduleName().stripWhiteSpace()); + } + + for(QStringList::ConstIterator it = matches.begin(); it != matches.end(); it++) + _keyList->insertItem(*it); + + _keyList->sort(); +} + +void SearchWidget::populateResultListBox(const QString& s) +{ + _resultList->clear(); + + QPtrList results; + + for(KeywordListEntry *k = _keywords.first(); k != 0; k = _keywords.next()) + { + if (k->moduleName() == s) + { + QPtrList modules = k->modules(); + + for(ConfigModule *m = modules.first(); m != 0; m = modules.next()) + new ModuleItem(m, _resultList); + } + } + + _resultList->sort(); +} + +void SearchWidget::searchTextChanged(const QString & s) +{ + QString regexp = s; + regexp += "*"; + populateKeyListBox(regexp); + if (_keyList->count()==1) + _keyList->setSelected(0,true); +} + +void SearchWidget::slotKeywordSelected(const QString & s) +{ + populateResultListBox(s); +} + +void SearchWidget::slotModuleSelected(QListBoxItem *item) +{ + if (item) + emit moduleSelected( static_cast(item)->module() ); +} + +void SearchWidget::slotModuleClicked(QListBoxItem *item) +{ + if (item) + emit moduleSelected( static_cast(item)->module() ); +} diff --git a/kcontrol/kcontrol/searchwidget.h b/kcontrol/kcontrol/searchwidget.h new file mode 100644 index 000000000..99aceb7e8 --- /dev/null +++ b/kcontrol/kcontrol/searchwidget.h @@ -0,0 +1,78 @@ +/* + Copyright (c) 2000 Matthias Elter + Copyright (c) 2004 Daniel Molkentin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __searchwidget_h__ +#define __searchwidget_h__ + +#include +#include +#include +#include + +#include "modules.h" + +class KListBox; +class KLineEdit; +class QListBoxItem; + +class KeywordListEntry +{ + public: + KeywordListEntry(const QString& name, ConfigModule* module); + + void addModule(ConfigModule* module); + + QString moduleName() { return _name; } + QPtrList modules() { return _modules; } + + private: + QString _name; + QPtrList _modules; + +}; + +class SearchWidget : public QWidget +{ + Q_OBJECT + +public: + SearchWidget(QWidget *parent, const char *name=0); + + void populateKeywordList(ConfigModuleList *list); + void searchTextChanged(const QString &); + +signals: + void moduleSelected(ConfigModule *); + +protected: + void populateKeyListBox(const QString& regexp); + void populateResultListBox(const QString& keyword); + +protected slots: + void slotKeywordSelected(const QString &); + void slotModuleSelected(QListBoxItem *item); + void slotModuleClicked(QListBoxItem *item); + +private: + KListBox *_keyList, *_resultList; + QPtrList _keywords; +}; + +#endif diff --git a/kcontrol/kcontrol/toplevel.cpp b/kcontrol/kcontrol/toplevel.cpp new file mode 100644 index 000000000..c7a47e372 --- /dev/null +++ b/kcontrol/kcontrol/toplevel.cpp @@ -0,0 +1,526 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "indexwidget.h" +#include "searchwidget.h" +#include "helpwidget.h" +#include "aboutwidget.h" +#include "proxywidget.h" +#include "moduletreeview.h" +#include + +#include "toplevel.h" +#include "toplevel.moc" + +TopLevel::TopLevel(const char* name) + : KMainWindow( 0, name, WStyle_ContextHelp ) + , _active(0), dummyAbout(0) +{ + setCaption(QString::null); + + report_bug = 0; + + // read settings + KConfig *config = KGlobal::config(); + config->setGroup("Index"); + QString viewmode = config->readEntry("ViewMode", "Tree"); + + if (viewmode == "Tree") + KCGlobal::setViewMode(Tree); + else + KCGlobal::setViewMode(Icon); + + QString size = config->readEntry("IconSize", "Medium"); + if (size == "Small") + KCGlobal::setIconSize(KIcon::SizeSmall); + else if (size == "Large") + KCGlobal::setIconSize(KIcon::SizeLarge); + else if (size == "Huge") + KCGlobal::setIconSize(KIcon::SizeHuge); + else + KCGlobal::setIconSize(KIcon::SizeMedium); + + // initialize the entries + _modules = new ConfigModuleList(); + _modules->readDesktopEntries(); + + for ( ConfigModule* m = _modules->first(); m; m = _modules->next() ) { + connect( m, SIGNAL( handbookRequest() ), this, SLOT( slotHandbookRequest() ) ); + connect( m, SIGNAL( helpRequest() ), this, SLOT( slotHelpRequest() ) ); + } + + // create the layout box + _splitter = new QSplitter( QSplitter::Horizontal, this ); + + QFrame* leftFrame = new QFrame ( _splitter ); + QBoxLayout *leftFrameLayout = new QVBoxLayout( leftFrame ); + + QFrame* mSearchFrame = new QFrame( leftFrame ); + leftFrameLayout->addWidget( mSearchFrame ); + + QBoxLayout *searchLayout = new QHBoxLayout( mSearchFrame ); + searchLayout->setSpacing( KDialog::spacingHint() ); + searchLayout->setMargin( 6 ); + + QPushButton *clearButton = new QPushButton( mSearchFrame ); + clearButton->setIconSet( KApplication::reverseLayout() ? + SmallIconSet( "clear_left" ) : SmallIconSet("locationbar_erase") ); + searchLayout->addWidget( clearButton ); + QToolTip::add( clearButton, i18n("Clear search") ); + + QLabel *label = new QLabel(i18n("Search:"), mSearchFrame ); + searchLayout->addWidget( label ); + + KLineEdit *searchEdit = new KLineEdit( mSearchFrame ); + clearButton->setFixedHeight( searchEdit->height() ); + connect( clearButton, SIGNAL( clicked() ), searchEdit, SLOT( clear() ) ); + label->setBuddy( searchEdit ); + searchLayout->addWidget( searchEdit ); + connect( searchEdit, SIGNAL( textChanged( const QString & ) ), + SLOT( slotSearchChanged(const QString &) ) ); + + // create the left hand side under search + _stack = new QWidgetStack( leftFrame ); + leftFrameLayout->addWidget( _stack ); + + // index tab + _index = new IndexWidget(_modules, this); + connect(_index, SIGNAL(moduleActivated(ConfigModule*)), + this, SLOT(activateModule(ConfigModule*))); + _stack->addWidget( _index ); + + connect(_index, SIGNAL(categorySelected(QListViewItem*)), + this, SLOT(categorySelected(QListViewItem*))); + + // search tab + _search = new SearchWidget(this); + _search->populateKeywordList(_modules); + connect(_search, SIGNAL(moduleSelected(ConfigModule *)), + this, SLOT(activateModule(ConfigModule *))); + + _stack->addWidget( _search ); + + // set up the right hand side (the docking area) + _dock = new DockContainer( _splitter ); + + // help widget + _help = new HelpWidget(_dock); + + _stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); + + // Restore sizes + config->setGroup("General"); + QValueList sizes = config->readIntListEntry( "SplitterSizes" ); + if (!sizes.isEmpty()) + _splitter->setSizes(sizes); + + // That one does the trick ... + _splitter->setResizeMode( leftFrame, QSplitter::KeepSize ); + + connect(_dock, SIGNAL(newModule(const QString&, const QString&, const QString&)), + this, SLOT(newModule(const QString&, const QString&, const QString&))); + connect(_dock, SIGNAL(changedModule(ConfigModule*)), + SLOT(changedModule(ConfigModule*))); + + // set the main view + setCentralWidget( _splitter ); + + // initialize the GUI actions + setupActions(); + + // activate defaults + if (KCGlobal::viewMode() == Tree) { + activateTreeView(); + tree_view->setChecked(true); + } + else { + activateIconView(); + icon_view->setChecked(true); + } + + // insert the about widget + if (KCGlobal::isInfoCenter()) + { + AboutWidget *aw = new AboutWidget( this, 0, _index->firstTreeViewItem()); + connect( aw, SIGNAL( moduleSelected( ConfigModule * ) ), + SLOT( activateModule( ConfigModule * ) ) ); + _dock->setBaseWidget( aw ); + KWin::setIcons( winId(), + KGlobal::iconLoader()->loadIcon("hwinfo", KIcon::NoGroup, 32 ), + KGlobal::iconLoader()->loadIcon("hwinfo", KIcon::NoGroup, 16 ) ); + } + else + { + AboutWidget *aw = new AboutWidget(this); + connect( aw, SIGNAL( moduleSelected( ConfigModule * ) ), + SLOT( activateModule( ConfigModule * ) ) ); + _dock->setBaseWidget(aw); + } +} + +TopLevel::~TopLevel() +{ + KConfig *config = KGlobal::config(); + config->setGroup("Index"); + if (KCGlobal::viewMode() == Tree) + config->writeEntry("ViewMode", "Tree"); + else + config->writeEntry("ViewMode", "Icon"); + + switch (KCGlobal::iconSize()) + { + case KIcon::SizeSmall: + config->writeEntry("IconSize", "Small"); + break; + case KIcon::SizeLarge: + config->writeEntry("IconSize", "Large"); + break; + case KIcon::SizeHuge: + config->writeEntry("IconSize", "Huge"); + break; + default: + config->writeEntry("IconSize", "Medium"); + break; + } + + config->setGroup("General"); + config->writeEntry("SplitterSizes", _splitter->sizes()); + + config->sync(); + + delete _modules; +} + +bool TopLevel::queryClose() +{ + return _dock->dockModule(0); +} + +void TopLevel::setupActions() +{ + KStdAction::quit(this, SLOT(close()), actionCollection()); + KStdAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), +actionCollection()); + icon_view = new KRadioAction + (i18n("&Icon View"), 0, this, SLOT(activateIconView()), + actionCollection(), "activate_iconview"); + icon_view->setExclusiveGroup( "viewmode" ); + + tree_view = new KRadioAction + (i18n("&Tree View"), 0, this, SLOT(activateTreeView()), + actionCollection(), "activate_treeview"); + tree_view->setExclusiveGroup( "viewmode" ); + + icon_small = new KRadioAction + (i18n("&Small"), 0, this, SLOT(activateSmallIcons()), + actionCollection(), "activate_smallicons"); + icon_small->setExclusiveGroup( "iconsize" ); + + icon_medium = new KRadioAction + (i18n("&Medium"), 0, this, SLOT(activateMediumIcons()), + actionCollection(), "activate_mediumicons"); + icon_medium->setExclusiveGroup( "iconsize" ); + + icon_large = new KRadioAction + (i18n("&Large"), 0, this, SLOT(activateLargeIcons()), + actionCollection(), "activate_largeicons"); + icon_large->setExclusiveGroup( "iconsize" ); + + icon_huge = new KRadioAction + (i18n("&Huge"), 0, this, SLOT(activateHugeIcons()), + actionCollection(), "activate_hugeicons"); + icon_huge->setExclusiveGroup( "iconsize" ); + + about_module = new KAction(i18n("About Current Module"), 0, this, SLOT(aboutModule()), actionCollection(), "help_about_module"); + about_module->setEnabled(false); + + // I need to add this so that each module can get a bug reported, + // and not just KControl + if (KCGlobal::isInfoCenter()) + createGUI("kinfocenterui.rc"); + else + createGUI("kcontrolui.rc"); + + report_bug = actionCollection()->action("help_report_bug"); + report_bug->setText(i18n("&Report Bug...")); + report_bug->disconnect(); + connect(report_bug, SIGNAL(activated()), SLOT(reportBug())); +} + +void TopLevel::activateIconView() +{ + KCGlobal::setViewMode(Icon); + _index->activateView(Icon); + + icon_small->setEnabled(true); + icon_medium->setEnabled(true); + icon_large->setEnabled(true); + icon_huge->setEnabled(true); + + switch(KCGlobal::iconSize()) + { + case KIcon::SizeSmall: + icon_small->setChecked(true); + break; + case KIcon::SizeLarge: + icon_large->setChecked(true); + break; + case KIcon::SizeHuge: + icon_huge->setChecked(true); + break; + default: + icon_medium->setChecked(true); + break; + } +} + +void TopLevel::activateTreeView() +{ + KCGlobal::setViewMode(Tree); + _index->activateView(Tree); + + icon_small->setEnabled(false); + icon_medium->setEnabled(false); + icon_large->setEnabled(false); + icon_huge->setEnabled(false); +} + +void TopLevel::activateSmallIcons() +{ + KCGlobal::setIconSize(KIcon::SizeSmall); + _index->reload(); +} + +void TopLevel::activateMediumIcons() +{ + KCGlobal::setIconSize(KIcon::SizeMedium); + _index->reload(); +} + +void TopLevel::activateLargeIcons() +{ + KCGlobal::setIconSize(KIcon::SizeLarge); + _index->reload(); +} + +void TopLevel::activateHugeIcons() +{ + KCGlobal::setIconSize(KIcon::SizeHuge); + _index->reload(); +} + +void TopLevel::newModule(const QString &name, const QString& docPath, const QString &quickhelp) +{ + setCaption(name, false); + + _help->setText( docPath, quickhelp ); + + if (!report_bug) return; + + if(name.isEmpty()) + report_bug->setText(i18n("&Report Bug...")); + else + report_bug->setText(i18n("Report Bug on Module %1...").arg( handleAmpersand( name))); +} + +void TopLevel::changedModule(ConfigModule *changed) +{ + if (!changed) + return; + setCaption(changed->moduleName(), changed->isChanged() ); +} + +void TopLevel::categorySelected(QListViewItem *category) +{ + if (_active) + { + if (_active->isChanged()) + { + int res = KMessageBox::warningYesNoCancel(this, _active ? + i18n("There are unsaved changes in the active module.\n" + "Do you want to apply the changes before running " + "the new module or discard the changes?") : + i18n("There are unsaved changes in the active module.\n" + "Do you want to apply the changes before exiting " + "the Control Center or discard the changes?"), + i18n("Unsaved Changes"), + KStdGuiItem::apply(), + KStdGuiItem::discard()); + if (res == KMessageBox::Yes) + _active->module()->applyClicked(); + else if (res == KMessageBox::Cancel) + return; + } + } + _dock->removeModule(); + about_module->setText( i18n( "About Current Module" ) ); + about_module->setIconSet( QIconSet() ); + about_module->setEnabled( false ); + + // insert the about widget + QListViewItem *firstItem = category->firstChild(); + QString caption = static_cast(category)->caption(); + QString icon = static_cast(category)->icon(); + if( _dock->baseWidget()->isA( "AboutWidget" ) ) + { + static_cast( _dock->baseWidget() )->setCategory( firstItem, icon, caption); + } + else + { + AboutWidget *aw = new AboutWidget( this, 0, firstItem, caption ); + connect( aw, SIGNAL( moduleSelected( ConfigModule * ) ), + SLOT( activateModule( ConfigModule * ) ) ); + _dock->setBaseWidget( aw ); + } +} + + +void TopLevel::activateModule(ConfigModule *mod) +{ + if ( _dock->module() == mod ) + return; + + // tell the index to display the module + _index->makeVisible(mod); + + // tell the index to mark this module as loaded + _index->makeSelected(mod); + + // dock it + if (!_dock->dockModule(mod)) + { + if ( _dock->module() ) + { + _index->makeVisible(_active); + _index->makeSelected(_active); + } + return; + } + + _active=mod; + + if (mod->aboutData()) + { + about_module->setText(i18n("Help menu->about ", "About %1").arg( + handleAmpersand( mod->moduleName()))); + about_module->setIcon(mod->icon()); + about_module->setEnabled(true); + } + else + { + about_module->setText(i18n("About Current Module")); + about_module->setIconSet(QIconSet()); + about_module->setEnabled(false); + } +} + +void TopLevel::deleteDummyAbout() +{ + delete dummyAbout; + dummyAbout = 0; +} + +void TopLevel::slotSearchChanged(const QString& search) +{ + if (search.isEmpty()) + _stack->raiseWidget(_index); + else + { + _stack->raiseWidget(_search); + _search->searchTextChanged(search); + } +} + +void TopLevel::slotHelpRequest() +{ + _help->display(_help->text(), QCursor::pos ( ), _dock); +} + +void TopLevel::slotHandbookRequest() +{ + _help->handbookRequest(); +} + +void TopLevel::reportBug() +{ + // this assumes the user only opens one bug report at a time + static char buffer[128]; + + dummyAbout = 0; + bool deleteit = false; + + if (!_active) // report against kcontrol + dummyAbout = const_cast(KGlobal::instance()->aboutData()); + else + { + if (_active->aboutData()) + dummyAbout = const_cast(_active->aboutData()); + else + { + snprintf(buffer, sizeof(buffer), "kcm%s", _active->library().latin1()); + dummyAbout = new KAboutData(buffer, _active->moduleName().utf8(), "2.0"); + deleteit = true; + } + } + KBugReport *br = new KBugReport(this, false, dummyAbout); + if (deleteit) + connect(br, SIGNAL(finished()), SLOT(deleteDummyAbout())); + else + dummyAbout = 0; + br->show(); +} + +void TopLevel::aboutModule() +{ + KAboutApplication dlg(_active->aboutData()); + dlg.exec(); +} + +QString TopLevel::handleAmpersand( QString modulename ) const +{ + if( modulename.contains( '&' )) // double it + { + for( int i = modulename.length(); + i >= 0; + --i ) + if( modulename[ i ] == '&' ) + modulename.insert( i, "&" ); + } + return modulename; +} diff --git a/kcontrol/kcontrol/toplevel.h b/kcontrol/kcontrol/toplevel.h new file mode 100644 index 000000000..02e42a49e --- /dev/null +++ b/kcontrol/kcontrol/toplevel.h @@ -0,0 +1,106 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + Copyright (c) 2000 Matthias Elter + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __TOPLEVEL_H__ +#define __TOPLEVEL_H__ + +#include +#include + + +class QSplitter; +class QWidgetStack; + +class KToggleAction; +class KAction; + +class DockContainer; +class IndexWidget; +class SearchWidget; +class HelpWidget; +class ConfigModule; +class ConfigModuleList; +class ModuleTitle; + +class TopLevel : public KMainWindow +{ + Q_OBJECT + +public: + TopLevel( const char* name=0 ); + ~TopLevel(); + +protected: + void setupActions(); + +protected slots: + void activateModule(ConfigModule *); + void categorySelected(QListViewItem *category); + void newModule(const QString &name, const QString& docPath, const QString &quickhelp); + void activateIconView(); + void activateTreeView(); + + void reportBug(); + void aboutModule(); + + void activateSmallIcons(); + void activateMediumIcons(); + void activateLargeIcons(); + void activateHugeIcons(); + + void deleteDummyAbout(); + + void slotSearchChanged(const QString &); + void slotHandbookRequest(); + void slotHelpRequest(); + + void changedModule(ConfigModule *changed); + + bool queryClose(); + +private: + + QString handleAmpersand( QString ) const; + + QSplitter *_splitter; + QWidgetStack *_stack; + DockContainer *_dock; + ModuleTitle *_title; + + KToggleAction *tree_view, *icon_view; + KToggleAction *icon_small, *icon_medium, *icon_large, *icon_huge; + KAction *report_bug, *about_module; + + IndexWidget *_index; + SearchWidget *_search; + HelpWidget *_help; + + ConfigModule *_active; + ConfigModuleList *_modules; + + /** + * if someone wants to report a bug + * against a module with no about data + * we construct one for him + **/ + KAboutData *dummyAbout; +}; + +#endif diff --git a/kcontrol/kcontrol/version.h b/kcontrol/kcontrol/version.h new file mode 100644 index 000000000..f35192739 --- /dev/null +++ b/kcontrol/kcontrol/version.h @@ -0,0 +1,2 @@ +#include +#define KCONTROL_VERSION KDE_VERSION_STRING diff --git a/kcontrol/kded/Makefile.am b/kcontrol/kded/Makefile.am new file mode 100644 index 000000000..af2d54142 --- /dev/null +++ b/kcontrol/kded/Makefile.am @@ -0,0 +1,15 @@ +kde_module_LTLIBRARIES = kcm_kded.la + +kcm_kded_la_SOURCES = kcmkded.cpp + +kcm_kded_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_kded_la_LIBADD = $(LIB_KIO) + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmkded.pot + +xdg_apps_DATA = kcmkded.desktop diff --git a/kcontrol/kded/kcmkded.cpp b/kcontrol/kded/kcmkded.cpp new file mode 100644 index 000000000..e30d73b6f --- /dev/null +++ b/kcontrol/kded/kcmkded.cpp @@ -0,0 +1,363 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Daniel Molkentin + + 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. +*/ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kcmkded.h" +#include "kcmkded.moc" + +typedef KGenericFactory KDEDFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kded, KDEDFactory( "kcmkded" ) ) + + +KDEDConfig::KDEDConfig(QWidget* parent, const char* name, const QStringList &) : + KCModule( KDEDFactory::instance(), parent, name ) +{ + KAboutData *about = + new KAboutData( I18N_NOOP( "kcmkded" ), I18N_NOOP( "KDE Service Manager" ), + 0, 0, KAboutData::License_GPL, + I18N_NOOP( "(c) 2002 Daniel Molkentin" ) ); + about->addAuthor("Daniel Molkentin",0,"molkentin@kde.org"); + setAboutData( about ); + + setQuickHelp( i18n("

Service Manager

This module allows you to have an overview of all plugins of the " + "KDE Daemon, also referred to as KDE Services. Generally, there are two types of service:

" + "
  • Services invoked at startup
  • Services called on demand
" + "

The latter are only listed for convenience. The startup services can be started and stopped. " + "In Administrator mode, you can also define whether services should be loaded at startup.

" + "

Use this with care: some services are vital for KDE; do not deactivate services if you" + " do not know what you are doing.

")); + + RUNNING = i18n("Running")+" "; + NOT_RUNNING = i18n("Not running")+" "; + + QVBoxLayout *lay = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + + QGroupBox *gb = new QVGroupBox(i18n("Load-on-Demand Services"), this ); + QWhatsThis::add(gb, i18n("This is a list of available KDE services which will " + "be started on demand. They are only listed for convenience, as you " + "cannot manipulate these services.")); + lay->addWidget( gb ); + + _lvLoD = new KListView( gb ); + _lvLoD->addColumn(i18n("Service")); + _lvLoD->addColumn(i18n("Description")); + _lvLoD->addColumn(i18n("Status")); + _lvLoD->setAllColumnsShowFocus(true); + _lvLoD->header()->setStretchEnabled(true, 1); + + gb = new QVGroupBox(i18n("Startup Services"), this ); + QWhatsThis::add(gb, i18n("This shows all KDE services that can be loaded " + "on KDE startup. Checked services will be invoked on next startup. " + "Be careful with deactivation of unknown services.")); + lay->addWidget( gb ); + + _lvStartup = new KListView( gb ); + _lvStartup->addColumn(i18n("Use")); + _lvStartup->addColumn(i18n("Service")); + _lvStartup->addColumn(i18n("Description")); + _lvStartup->addColumn(i18n("Status")); + _lvStartup->setAllColumnsShowFocus(true); + _lvStartup->header()->setStretchEnabled(true, 2); + + KButtonBox *buttonBox = new KButtonBox( gb, Horizontal); + _pbStart = buttonBox->addButton( i18n("Start")); + _pbStop = buttonBox->addButton( i18n("Stop")); + + _pbStart->setEnabled( false ); + _pbStop->setEnabled( false ); + + connect(_pbStart, SIGNAL(clicked()), SLOT(slotStartService())); + connect(_pbStop, SIGNAL(clicked()), SLOT(slotStopService())); + connect(_lvStartup, SIGNAL(selectionChanged(QListViewItem*)), SLOT(slotEvalItem(QListViewItem*)) ); + + load(); +} + +void setModuleGroup(KConfig *config, const QString &filename) +{ + QString module = filename; + int i = module.findRev('/'); + if (i != -1) + module = module.mid(i+1); + i = module.findRev('.'); + if (i != -1) + module = module.left(i); + + config->setGroup(QString("Module-%1").arg(module)); +} + +bool KDEDConfig::autoloadEnabled(KConfig *config, const QString &filename) +{ + setModuleGroup(config, filename); + return config->readBoolEntry("autoload", true); +} + +void KDEDConfig::setAutoloadEnabled(KConfig *config, const QString &filename, bool b) +{ + setModuleGroup(config, filename); + return config->writeEntry("autoload", b); +} + +void KDEDConfig::load() { + load ( false ); +} + + +void KDEDConfig::load( bool useDefaults ) { + KConfig kdedrc("kdedrc", true, false); + kdedrc.setReadDefaults( useDefaults ); + + _lvStartup->clear(); + _lvLoD->clear(); + + QStringList files; + KGlobal::dirs()->findAllResources( "services", + QString::fromLatin1( "kded/*.desktop" ), + true, true, files ); + + QListViewItem* item = 0L; + CheckListItem* clitem; + for ( QStringList::ConstIterator it = files.begin(); it != files.end(); ++it ) { + + if ( KDesktopFile::isDesktopFile( *it ) ) { + KDesktopFile file( *it, true, "services" ); + + if ( file.readBoolEntry("X-KDE-Kded-autoload") ) { + clitem = new CheckListItem(_lvStartup, QString::null); + connect(clitem, SIGNAL(changed(QCheckListItem*)), SLOT(slotItemChecked(QCheckListItem*))); + clitem->setOn(autoloadEnabled(&kdedrc, *it)); + item = clitem; + item->setText(1, file.readName()); + item->setText(2, file.readComment()); + item->setText(3, NOT_RUNNING); + item->setText(4, file.readEntry("X-KDE-Library")); + } + else if ( file.readBoolEntry("X-KDE-Kded-load-on-demand") ) { + item = new QListViewItem(_lvLoD, file.readName()); + item->setText(1, file.readComment()); + item->setText(2, NOT_RUNNING); + item->setText(4, file.readEntry("X-KDE-Library")); + } + } + } + + getServiceStatus(); + emit changed( useDefaults ); +} + +void KDEDConfig::save() { + QCheckListItem* item = 0L; + + QStringList files; + KGlobal::dirs()->findAllResources( "services", + QString::fromLatin1( "kded/*.desktop" ), + true, true, files ); + + KConfig kdedrc("kdedrc", false, false); + + for ( QStringList::ConstIterator it = files.begin(); it != files.end(); ++it ) { + + if ( KDesktopFile::isDesktopFile( *it ) ) { + + KConfig file( *it, false, false, "services" ); + file.setGroup("Desktop Entry"); + + if (file.readBoolEntry("X-KDE-Kded-autoload")){ + + item = static_cast(_lvStartup->findItem(file.readEntry("X-KDE-Library"),4)); + if (item) { + // we found a match, now compare and see what changed + setAutoloadEnabled(&kdedrc, *it, item->isOn()); + } + } + } + } + kdedrc.sync(); + + DCOPRef( "kded", "kded" ).call( "reconfigure" ); + QTimer::singleShot(0, this, SLOT(slotServiceRunningToggled())); +} + + +void KDEDConfig::defaults() +{ + load( true ); +} + + +void KDEDConfig::getServiceStatus() +{ + QCStringList modules; + QCString replyType; + QByteArray replyData; + + + if (!kapp->dcopClient()->call( "kded", "kded", "loadedModules()", QByteArray(), + replyType, replyData ) ) { + + _lvLoD->setEnabled( false ); + _lvStartup->setEnabled( false ); + KMessageBox::error(this, i18n("Unable to contact KDED.")); + return; + } + else { + + if ( replyType == "QCStringList" ) { + QDataStream reply(replyData, IO_ReadOnly); + reply >> modules; + } + } + + for( QListViewItemIterator it( _lvLoD); it.current() != 0; ++it ) + it.current()->setText(2, NOT_RUNNING); + for( QListViewItemIterator it( _lvStartup); it.current() != 0; ++it ) + it.current()->setText(3, NOT_RUNNING); + for ( QCStringList::Iterator it = modules.begin(); it != modules.end(); ++it ) + { + QListViewItem *item = _lvLoD->findItem(*it, 4); + if ( item ) + { + item->setText(2, RUNNING); + } + + item = _lvStartup->findItem(*it, 4); + if ( item ) + { + item->setText(3, RUNNING); + } + } +} + +void KDEDConfig::slotReload() +{ + QString current = _lvStartup->currentItem()->text(4); + load(); + QListViewItem *item = _lvStartup->findItem(current, 4); + if (item) + _lvStartup->setCurrentItem(item); +} + +void KDEDConfig::slotEvalItem(QListViewItem * item) +{ + if (!item) + return; + + if ( item->text(3) == RUNNING ) { + _pbStart->setEnabled( false ); + _pbStop->setEnabled( true ); + } + else if ( item->text(3) == NOT_RUNNING ) { + _pbStart->setEnabled( true ); + _pbStop->setEnabled( false ); + } + else // Error handling, better do nothing + { + _pbStart->setEnabled( false ); + _pbStop->setEnabled( false ); + } + + getServiceStatus(); +} + +void KDEDConfig::slotServiceRunningToggled() +{ + getServiceStatus(); + slotEvalItem(_lvStartup->currentItem()); +} + +void KDEDConfig::slotStartService() +{ + QCString service = _lvStartup->currentItem()->text(4).latin1(); + + QByteArray data, replyData; + QCString replyType; + QDataStream arg( data, IO_WriteOnly ); + arg << service; + if (kapp->dcopClient()->call( "kded", "kded", "loadModule(QCString)", data, replyType, replyData ) ) { + QDataStream reply(replyData, IO_ReadOnly); + if ( replyType == "bool" ) + { + bool result; + reply >> result; + if ( result ) + slotServiceRunningToggled(); + else + KMessageBox::error(this, i18n("Unable to start service.")); + } else { + kdDebug() << "loadModule() on kded returned an unexpected type of reply: " << replyType << endl; + } + } + else { + KMessageBox::error(this, i18n("Unable to contact KDED.")); + } +} + +void KDEDConfig::slotStopService() +{ + QCString service = _lvStartup->currentItem()->text(4).latin1(); + kdDebug() << "Stopping: " << service << endl; + QByteArray data; + QDataStream arg( data, IO_WriteOnly ); + + arg << service; + if (kapp->dcopClient()->send( "kded", "kded", "unloadModule(QCString)", data ) ) { + slotServiceRunningToggled(); + } + else { + KMessageBox::error(this, i18n("Unable to stop service.")); + } + +} + +void KDEDConfig::slotItemChecked(QCheckListItem*) +{ + emit changed(true); +} + +CheckListItem::CheckListItem(QListView *parent, const QString &text) + : QObject(parent), + QCheckListItem(parent, text, CheckBox) +{ } + +void CheckListItem::stateChange(bool on) +{ + QCheckListItem::stateChange(on); + emit changed(this); +} diff --git a/kcontrol/kded/kcmkded.desktop b/kcontrol/kded/kcmkded.desktop new file mode 100644 index 000000000..fe45333a3 --- /dev/null +++ b/kcontrol/kded/kcmkded.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Exec=kcmshell kcmkded +Icon=services +Type=Application + + +X-KDE-Library=kded +X-KDE-Factoryname=kded +X-KDE-ParentApp=kcontrol + +Name=Service Manager +Name[af]=Diens Bestuurder +Name[ar]=مدبر الخدمات +Name[az]=Xidmət İdarəçisi +Name[be]=Кіраўнік сервісаў +Name[bg]=Системни услуги +Name[bn]=সার্ভিস ম্যানেজার +Name[br]=Merour ar servijoù +Name[bs]=Upravljač servisa +Name[ca]=Gestor del servei +Name[cs]=Správce služeb +Name[csb]=Menedżer ùsłëżnotów +Name[cy]=Rheolydd Gwasanaethau +Name[da]=Service-håndtering +Name[de]=Diensteverwaltung +Name[el]=Διαχειριστής υπηρεσιών +Name[eo]=Servo-Administrilo +Name[es]=Gestor de servicios +Name[et]=Teenuste haldur +Name[eu]=Zerbitzu kudeatzailea +Name[fa]=مدیر خدمت +Name[fi]=Palvelunhallinta +Name[fr]=Gestionnaire de services +Name[fy]=KDE-systeemtsjinsten +Name[ga]=Bainisteoir Seirbhíse +Name[gl]=Xestor de Servizos +Name[he]=מנהל השירותים +Name[hi]=सेवा प्रबंधक +Name[hr]=Upravljanje uslugama +Name[hu]=Szolgáltatások +Name[is]=Þjónustustjóri +Name[it]=Gestione servizi +Name[ja]=サービスマネージャ +Name[ka]=სერვის მენეჯერი +Name[kk]=Қызметтерді басқару +Name[km]=កម្មវិធី​គ្រប់គ្រង​សេវា +Name[ko]=서비스 관리자 +Name[lo]=ຕົວຈັດການ Dhcp +Name[lt]=Tarnybų tvarkyklė +Name[lv]=Servisu Menedžeris +Name[mk]=Менаџер на сервиси +Name[mn]=Үйлчилгээ удирдагч +Name[ms]=Pengurus Servis +Name[mt]=Manager tas-servizzi +Name[nb]=Tjenestebehandler +Name[nds]=Deenstpleger +Name[ne]=सेवा प्रबन्धक +Name[nl]=KDE-systeemdiensten +Name[nn]=Tenestehandsamar +Name[nso]=Molaodi wa Tirelo +Name[pa]=ਸੇਵਾਵਾਂ ਮੈਨੇਜਰ +Name[pl]=Menedżer usług +Name[pt]=Gestor de Serviços +Name[pt_BR]=Gerenciador de Serviços +Name[ro]=Managerul de servicii +Name[ru]=Управление службами +Name[rw]=MugengaSerivise +Name[se]=Bálvalusgieđahalli +Name[sk]=Správca služieb +Name[sl]=Upravitelj storitev +Name[sr]=Менаџер сервиса +Name[sr@Latn]=Menadžer servisa +Name[sv]=Tjänsthanterare +Name[ta]=சேவை மேலாளர் +Name[tg]=Мудири хидмат +Name[th]=ตัวจัดการรบริการ +Name[tr]=Servis Yöneticisi +Name[tt]=Xezmät İdäräçe +Name[uk]=Менеджер служб +Name[uz]=Xizmat boshqaruvchisi +Name[uz@cyrillic]=Хизмат бошқарувчиси +Name[ven]=Mulanguli wa tshumelo +Name[vi]=Trình quản lý Dịch vụ +Name[wa]=Manaedjeu di siervices +Name[xh]=Umphathi Wenkonzo +Name[zh_CN]=服务管理器 +Name[zh_TW]=服務管理程式 +Name[zu]=Imenenja Yomsebenzi +Comment=System Services Configuration +Comment[af]=Stelsel Dienste Opstelling +Comment[ar]=تهيئة خدمات النظام +Comment[az]=Sistem Xidmətləri Qurğuları +Comment[be]=Настаўленні сістэмных сервісаў +Comment[bg]=Настройване на системните услуги +Comment[bn]=সিস্টেম সার্ভিস কনফিগারেশন +Comment[br]=Kefluniadur servijerien ar reiziad +Comment[bs]=Postavke sistemskih servisa +Comment[ca]=Configura els serveis del sistema +Comment[cs]=Nastavení systémových služeb +Comment[csb]=Kònfigùracëjô systemòwëch ùsłëżnotów +Comment[cy]=Ffurfweddu Gwasanaethau Cysawd +Comment[da]=Opsætning af systemtjenester +Comment[de]=Einrichtung von Systemdiensten +Comment[el]=Ρύθμιση των υπηρεσιών συστήματος +Comment[eo]=Agordo de la sistemservoj +Comment[es]=Configuración de los servicios del sistema +Comment[et]=Süsteemsete teenuste seadistamine +Comment[eu]=Sistemaren zerbitzuen konfigurazioa +Comment[fa]=پیکربندی خدمات سیستم +Comment[fi]=Järjestelmän palveluiden asetus +Comment[fr]=Configuration des services du système +Comment[fy]=KDE-systeemtsjinsten ynstelle +Comment[ga]=Cumraíocht seirbhísí an chórais +Comment[gl]=Configuración dos Servizos do Sistema +Comment[he]=שינוי הגדרות שירותי המערכת +Comment[hi]=तंत्र सेवा कॉन्फ़िगरेशन +Comment[hr]=Konfiguracija usluga sustava +Comment[hu]=A rendszerszolgáltatások beállításai +Comment[is]=Stillingar kerfisþjónusta +Comment[it]=Configurazione dei servizi di sistema +Comment[ja]=システムサービスの設定 +Comment[ka]=სისტემური სერვისების კონფიგურაცია +Comment[kk]=Жүйелік қызметтерді баптау +Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​សេវា​ប្រព័ន្ធ +Comment[ko]=KDE 서비스 설정 +Comment[lo]=ປັບແຕ່ງອອດລະບົບ +Comment[lt]=Sistemos tarnybų konfigūravimas +Comment[lv]=Sistēmas Servisu Konfigurācija +Comment[mk]=Конфигурација на системските сервиси +Comment[mn]=Системийн үйлчилгээний тохируулга +Comment[ms]=Konfigurasi Servis Sistem +Comment[mt]=Konfigurazzjoni tas-servizzi tas-sistema +Comment[nb]=Systemtjenesteinnstillinger +Comment[nds]=Systeemdeensten instellen +Comment[ne]=प्रणाली सेवा कन्फिगरेसन +Comment[nl]=KDE-systeemdiensten instellen +Comment[nn]=Oppsett av systemtenester +Comment[nso]=Peakanyo ya Ditirelo tsa System +Comment[pa]=ਸਿਸਟਮ ਸੇਵਾਵਾਂ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja usług systemowych +Comment[pt]=Configuração dos Serviços do Sistema +Comment[pt_BR]=Configuração de Serviços do Sistema +Comment[ro]=Configurează serviciile de sistem +Comment[ru]=Настройка системных служб +Comment[rw]=Iboneza rya Serivise Sisitemu +Comment[se]=Vuogádatbálvalusaid heiveheapmi +Comment[sk]=Nastavenie systémových služieb +Comment[sl]=Nastavitve sistemskih storitev +Comment[sr]=Подешавање системских сервиса +Comment[sr@Latn]=Podešavanje sistemskih servisa +Comment[sv]=Anpassa systemets tjänster +Comment[ta]=சாதன சேவை அமைப்பு +Comment[tg]=Танзими хидматҳои система +Comment[th]=ปรับแต่งบริการของระบบ +Comment[tr]=Sistem Servisleri Yapılandırması +Comment[tt]=Sistem Xezmätlären Caylawçı +Comment[uk]=Конфігурація служб систем +Comment[uz]=Tizimning xizmatlarini moslash +Comment[uz@cyrillic]=Тизимнинг хизматларини мослаш +Comment[ven]=Bzudzanyo ya tshumelo ya sisitemu +Comment[vi]=Cấu hình Dịch vụ Hệ thống +Comment[wa]=Apontiaedje des siervices do sistinme +Comment[xh]=Uqwalaselo Lweenkonzo Zendlela zokuseneza +Comment[zh_CN]=系统服务配置 +Comment[zh_TW]=系統服務組態 +Comment[zu]=Inhlanganisela Yemisebenzi Yesistimu +Keywords=KDED,Daemon,Services +Keywords[ar]=KDED,Daemon,Services,مراقب,خدمات +Keywords[az]=KDED,Demon,Xidmətlər +Keywords[be]=Дэман,Сервісы,KDED,Daemon,Services +Keywords[bg]=услуга, обслужване, сървър, демон, KDED, Daemon, Services +Keywords[br]=KDED,Diaoul,Servijoù +Keywords[ca]=KDED,Dimoni,Serveis +Keywords[cs]=KDED,démon,služby +Keywords[csb]=KDED,demóna,ùsłëżnotë +Keywords[cy]=KDED,Daemon,Gwasanaethau +Keywords[da]=KDED,Dæmon,Tjenester +Keywords[de]=KDED,Dämon,Dienst,Daemon,Services,Dienste +Keywords[el]=KDED,Δαίμονας,Υπηρεσίες +Keywords[eo]=KDED,demono,servoj +Keywords[es]=KDED,Demonio,servicios +Keywords[et]=KDED,deemon,teenused +Keywords[eu]=KDED,Daemon-a,Zerbitzuak +Keywords[fa]=KDED،شبح، خدمات +Keywords[fi]=KDED,Palvelin,Palvelut +Keywords[fr]=KDED,Daemon,Démon,Services +Keywords[fy]=KDED,Daemon,services,tsjinsten,systeemtsjinsten,systeem +Keywords[ga]=KDED,Deamhan,Seirbhísí +Keywords[gl]=KDED,Demo,Servizos +Keywords[he]=KDED,תהליך רקע,שירותים,Daemon,Services +Keywords[hi]=केडीईडी,डेमन,सेवाएँ +Keywords[hr]=KDED,Daemon,Services,Demon,Usluge +Keywords[hu]=KDED,démon,szolgáltatás +Keywords[is]=KDED,þjónn,Þjónustur,púki,þræll +Keywords[it]=KDED,demone,servizi +Keywords[ja]=KDED,デーモン,サービス +Keywords[km]=KDED,Daemon,សេវា +Keywords[lt]=KDED,Daemon,Services, demonas,tarnybos +Keywords[lv]=KDED,Dēmoni,Servisi +Keywords[mn]=КДЭХ,Хэвтүүл,Services,Үйлчилгээ +Keywords[ms]=KDED,Daemon,Servis +Keywords[mt]=KDED,Daemon,Services,servizzi +Keywords[nb]=KDED,nisse,tjenester,daemon +Keywords[nds]=KDED,Daemon,Services,Dämoon,Deenst,Deensten +Keywords[ne]=KDED, डेइमन, सेवा +Keywords[nl]=KDED,Daemon,services,diensten,systeemdiensten,systeem +Keywords[nn]=KDED,daemon,nisse,tenester +Keywords[nso]=KDED,Daemon,Ditirelo +Keywords[pa]=KDED,Daemon,Services,ਸੇਵਾਵਾਂ +Keywords[pl]=KDED,demon,usługi +Keywords[pt]=KDED,Servidor,Serviços +Keywords[pt_BR]=KDED,Servidor,Serviços +Keywords[ro]=KDED,demon,servicii +Keywords[ru]=KDED,Daemon,Services,службы,служба +Keywords[rw]=KDED, Dayimoni,Serivise +Keywords[se]=KDED,daemon,bálvalusat +Keywords[sk]=KDED,Daemon,služby +Keywords[sl]=KDED,demon,storitve +Keywords[sr]=KDED, Демон, Сервиси +Keywords[sr@Latn]=KDED, Demon, Servisi +Keywords[sv]=KDED,Demon,Tjänster +Keywords[ta]=KDED,டேமான்,சேவைகள் +Keywords[th]=KDED,เดมอน,บริการ +Keywords[tr]=KDED,program,servisler +Keywords[uk]=KDED,демон,служби +Keywords[uz]=KDED,xizmat,xizmatlar +Keywords[uz@cyrillic]=KDED,хизмат,хизматлар +Keywords[ven]=KDED,Daemon,Dzitshumelo +Keywords[vi]=KDED,Trình nền,Dịch vụ +Keywords[wa]=KDED,Daemon,Services,demon,siervices +Keywords[xh]=KDED,Daemon,Iinkonzo +Keywords[zh_CN]=KDED,Daemon,Services,守护程序,服务 +Keywords[zh_TW]=KDED,Daemon,Services,伺服程式,服務 +Keywords[zu]=KDED,Daemon,Imisebenzi + +Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcontrol/kded/kcmkded.h b/kcontrol/kded/kcmkded.h new file mode 100644 index 000000000..b945ff52f --- /dev/null +++ b/kcontrol/kded/kcmkded.h @@ -0,0 +1,78 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Daniel Molkentin + + 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 KCMKDED_H +#define KCMKDED_H + +#include + +#include + +class KListView; + +class QStringList; +class QPushButton; + +class KDEDConfig : public KCModule +{ +Q_OBJECT +public: + KDEDConfig(QWidget* parent, const char* name= 0L, const QStringList& foo = QStringList()); + ~KDEDConfig() {}; + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + +protected slots: + void slotReload(); + void slotStartService(); + void slotStopService(); + void slotServiceRunningToggled(); + void slotEvalItem(QListViewItem *item); + void slotItemChecked(QCheckListItem *item); + void getServiceStatus(); + + bool autoloadEnabled(KConfig *config, const QString &filename); + void setAutoloadEnabled(KConfig *config, const QString &filename, bool b); + +private: + KListView *_lvLoD; + KListView *_lvStartup; + QPushButton *_pbStart; + QPushButton *_pbStop; + + QString RUNNING; + QString NOT_RUNNING; +}; + +class CheckListItem : public QObject, public QCheckListItem +{ + Q_OBJECT +public: + CheckListItem(QListView* parent, const QString &text); + ~CheckListItem() { } +signals: + void changed(QCheckListItem*); +protected: + virtual void stateChange(bool); +}; + +#endif // KCMKDED_H + diff --git a/kcontrol/kdm/AUTHORS b/kcontrol/kdm/AUTHORS new file mode 100644 index 000000000..61d720a4d --- /dev/null +++ b/kcontrol/kdm/AUTHORS @@ -0,0 +1,6 @@ +KDM - The KDE Display Manager - written by Steffen Hansen + +The KDE Display Manager Configuration module - +written by Thomas Tanghus + +Currently maintend by Oswald Buddenhagen diff --git a/kcontrol/kdm/ChangeLog b/kcontrol/kdm/ChangeLog new file mode 100644 index 000000000..d49bb2548 --- /dev/null +++ b/kcontrol/kdm/ChangeLog @@ -0,0 +1,16 @@ +2002-07-11 Oswald Buddenhagen + * Reworked "Users" and "Convenience" tabs + +2001-01-15 Oswald Buddenhagen + * Several new fields in different tabs for some new features + +2000-12-06 Oswald Buddenhagen + * New "Convenience" tab supporting the new automation features + * Some changes to the "Users" tab + * Few bug fixes + +1998-04-28 Thomas Tanghus + * Improved geometry management. + +1998-05-14 Thomas Tanghus + * Fixed bug with "ShutDownButton=...". diff --git a/kcontrol/kdm/Makefile.am b/kcontrol/kdm/Makefile.am new file mode 100644 index 000000000..2a210a1b9 --- /dev/null +++ b/kcontrol/kdm/Makefile.am @@ -0,0 +1,19 @@ +kde_module_LTLIBRARIES = kcm_kdm.la + +# _don't_ add a theme configurator!! +kcm_kdm_la_SOURCES = background.cpp kdm-appear.cpp kdm-font.cpp kdm-shut.cpp \ + kdm-users.cpp kdm-conv.cpp main.cpp kbackedcombobox.cpp + +kcm_kdm_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) -module -avoid-version -no-undefined +kcm_kdm_la_LIBADD = $(top_builddir)/kcontrol/background/libkcmbgnd.la $(top_builddir)/kcontrol/background/libbgnd.la $(LIB_KIO) $(LIB_KNEWSTUFF) + +AM_CPPFLAGS= -I$(top_builddir)/kcontrol/background \ + -I$(top_srcdir)/kcontrol/background \ + -I$(top_srcdir)/kdesktop $(all_includes) + +METASOURCES = AUTO + +messages: + $(XGETTEXT) $(kcm_kdm_la_SOURCES) -o $(podir)/kdmconfig.pot + +xdg_apps_DATA = kdm.desktop diff --git a/kcontrol/kdm/background.cpp b/kcontrol/kdm/background.cpp new file mode 100644 index 000000000..19c962a1d --- /dev/null +++ b/kcontrol/kdm/background.cpp @@ -0,0 +1,111 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kcmdisplay. + * Copyright (C) 1999 Geert Jansen + * + * Modified 2000.07.14 by Brad Hughes + * Improve layout and consistency with KDesktop's background selection + * + * Based on old backgnd.cpp: + * + * Copyright (c) Martin R. Jones 1996 + * Converted to a kcc module by Matthias Hoelzer 1997 + * Gradient backgrounds by Mark Donohoe 1997 + * Pattern backgrounds by Stephan Kulow 1998 + * Randomizing & dnd & new display modes by Matej Koss 1998 + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include "../background/bgsettings.h" +#include "../background/bgdialog.h" +#include "background.h" +#include +#include +#include + +extern KSimpleConfig *config; + +KBackground::KBackground(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + + // Enabling checkbox + m_pCBEnable = new QCheckBox( i18n("E&nable background"), this ); + QWhatsThis::add( m_pCBEnable, + i18n("If this is checked, KDM will use the settings below for the background." + " If it is disabled, you have to look after the background yourself." + " This is done by running some program (possibly xsetroot) in the script" + " specified in the Setup= option in kdmrc (usually Xsetup).") ); + config->setGroup( "X-*-Greeter" ); + m_simpleConf=new KSimpleConfig(config->readEntry( "BackgroundCfg",KDE_CONFDIR "/kdm/backgroundrc" ) ); + m_background = new BGDialog( this, m_simpleConf, false ); + + connect(m_background, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + + // Top layout + QVBoxLayout *top = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint() ); + top->addWidget(m_pCBEnable); + top->addWidget(m_background); + top->addStretch(); + connect( m_pCBEnable, SIGNAL(toggled( bool )), SLOT(slotEnableChanged()) ); +} + +KBackground::~KBackground() +{ + delete m_simpleConf; +} + +void KBackground::slotEnableChanged() +{ + bool en = m_pCBEnable->isChecked(); + m_background->setEnabled( en ); + emit changed ( true ); +} + +void KBackground::makeReadOnly() +{ + m_pCBEnable->setEnabled(false); + m_background->makeReadOnly(); +} + +void KBackground::load() +{ + m_pCBEnable->setChecked( config->readBoolEntry( "UseBackground", true ) ); + m_background->load(false); + slotEnableChanged(); + emit changed(false); +} + + +void KBackground::save() +{ + kdDebug() << "Saving stuff..." << endl; + config->writeEntry( "UseBackground", m_pCBEnable->isChecked() ); + m_background->save(); + emit changed(false); +} + + +void KBackground::defaults() +{ + m_pCBEnable->setChecked( true ); + slotEnableChanged(); + m_background->defaults(); + emit changed(true); +} + +#include "background.moc" diff --git a/kcontrol/kdm/background.h b/kcontrol/kdm/background.h new file mode 100644 index 000000000..bc1e48213 --- /dev/null +++ b/kcontrol/kdm/background.h @@ -0,0 +1,50 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kcmdisplay. + * Copyright (C) 1999 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#ifndef __Bgnd_h_Included__ +#define __Bgnd_h_Included__ + +#include +#include + + +class KSimpleConfig; +class BGDialog; +class KGlobalBackgroundSettings; +class QCheckBox; +class QLabel; + +class KBackground: public QWidget +{ + Q_OBJECT +public: + KBackground(QWidget *parent=0, const char *name=0); + ~KBackground(); + + void load(); + void save(); + void defaults(); + void makeReadOnly(); +signals: + void changed(bool); + +private slots: + void slotEnableChanged(); +private: + void init(); + void apply(); + + QCheckBox *m_pCBEnable; + QLabel *m_pMLabel; + KSimpleConfig *m_simpleConf; + BGDialog *m_background; +}; + + +#endif // __Bgnd_h_Included__ diff --git a/kcontrol/kdm/kbackedcombobox.cpp b/kcontrol/kdm/kbackedcombobox.cpp new file mode 100644 index 000000000..97759db5a --- /dev/null +++ b/kcontrol/kdm/kbackedcombobox.cpp @@ -0,0 +1,40 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 2004-2005 Oswald Buddenhagen + + 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 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 "kbackedcombobox.h" + +void KBackedComboBox::insertItem( const QString &id, const QString &name ) +{ + id2name[id] = name; + name2id[name] = id; + KComboBox::insertItem( name ); +} + +void KBackedComboBox::setCurrentId( const QString &id ) +{ + if (id2name.contains( id )) + setCurrentItem( id2name[id] ); + else + setCurrentItem( 0 ); +} + +const QString &KBackedComboBox::currentId() const +{ + return name2id[currentText()]; +} diff --git a/kcontrol/kdm/kbackedcombobox.h b/kcontrol/kdm/kbackedcombobox.h new file mode 100644 index 000000000..3b006f23f --- /dev/null +++ b/kcontrol/kdm/kbackedcombobox.h @@ -0,0 +1,38 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 2004-2005 Oswald Buddenhagen + + 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 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 KBACKEDCOMBOBOX_H +#define KBACKEDCOMBOBOX_H + +#include + +class KBackedComboBox : public KComboBox { + +public: + KBackedComboBox( QWidget *parent ) : KComboBox( false, parent ) {} + void insertItem( const QString &id, const QString &name ); + void setCurrentId( const QString &id ); + const QString ¤tId() const; + +private: + QMap id2name, name2id; + +}; + +#endif // KBACKEDCOMBOBOX_H diff --git a/kcontrol/kdm/kdm-appear.cpp b/kcontrol/kdm/kdm-appear.cpp new file mode 100644 index 000000000..684371d74 --- /dev/null +++ b/kcontrol/kdm/kdm-appear.cpp @@ -0,0 +1,516 @@ +/* + This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997-1998 Thomas Tanghus (tanghus@earthling.net) + + 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 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 +#include + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kdm-appear.h" +#include "kbackedcombobox.h" + +extern KSimpleConfig *config; + + +KDMAppearanceWidget::KDMAppearanceWidget(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + QString wtstr; + + QVBoxLayout *vbox = new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint(), "vbox"); + QGroupBox *group = new QGroupBox(i18n("Appearance"), this); + vbox->addWidget(group); + + QGridLayout *grid = new QGridLayout( group, 5, 2, KDialog::marginHint(), + KDialog::spacingHint(), "grid"); + grid->addRowSpacing(0, group->fontMetrics().height()); + grid->setColStretch(0, 1); + grid->setColStretch(1, 1); + + QHBoxLayout *hlay = new QHBoxLayout( KDialog::spacingHint() ); + grid->addMultiCellLayout(hlay, 1,1, 0,1); + greetstr_lined = new KLineEdit(group); + QLabel *label = new QLabel(greetstr_lined, i18n("&Greeting:"), group); + hlay->addWidget(label); + connect(greetstr_lined, SIGNAL(textChanged(const QString&)), + SLOT(changed())); + hlay->addWidget(greetstr_lined); + wtstr = i18n("This is the \"headline\" for KDM's login window. You may want to " + "put some nice greeting or information about the operating system here.

" + "KDM will substitute the following character pairs with the " + "respective contents:

    " + "
  • %d -> current display
  • " + "
  • %h -> host name, possibly with domain name
  • " + "
  • %n -> node name, most probably the host name without domain name
  • " + "
  • %s -> the operating system
  • " + "
  • %r -> the operating system's version
  • " + "
  • %m -> the machine (hardware) type
  • " + "
  • %% -> a single %
  • " + "
" ); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( greetstr_lined, wtstr ); + + + QGridLayout *hglay = new QGridLayout( 3, 4, KDialog::spacingHint() ); + grid->addMultiCellLayout(hglay, 2,4, 0,0); + + label = new QLabel(i18n("Logo area:"), group); + hglay->addWidget(label, 0, 0); + QVBoxLayout *vlay = new QVBoxLayout( KDialog::spacingHint() ); + hglay->addMultiCellLayout(vlay, 0,0, 1,2); + noneRadio = new QRadioButton( i18n("logo area", "&None"), group ); + clockRadio = new QRadioButton( i18n("Show cloc&k"), group ); + logoRadio = new QRadioButton( i18n("Sho&w logo"), group ); + QButtonGroup *buttonGroup = new QButtonGroup( group ); + label->setBuddy( buttonGroup ); + connect( buttonGroup, SIGNAL(clicked(int)), SLOT(slotAreaRadioClicked(int)) ); + connect( buttonGroup, SIGNAL(clicked(int)), SLOT(changed()) ); + buttonGroup->hide(); + buttonGroup->insert(noneRadio, KdmNone); + buttonGroup->insert(clockRadio, KdmClock); + buttonGroup->insert(logoRadio, KdmLogo); + vlay->addWidget(noneRadio); + vlay->addWidget(clockRadio); + vlay->addWidget(logoRadio); + wtstr = i18n("You can choose to display a custom logo (see below), a clock or no logo at all."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( noneRadio, wtstr ); + QWhatsThis::add( logoRadio, wtstr ); + QWhatsThis::add( clockRadio, wtstr ); + + logoLabel = new QLabel(i18n("&Logo:"), group); + logobutton = new QPushButton(group); + logoLabel->setBuddy( logobutton ); + logobutton->setAutoDefault(false); + logobutton->setAcceptDrops(true); + logobutton->installEventFilter(this); // for drag and drop + connect(logobutton, SIGNAL(clicked()), SLOT(slotLogoButtonClicked())); + hglay->addWidget(logoLabel, 1, 0); + hglay->addWidget(logobutton, 1, 1, AlignCenter); + hglay->addRowSpacing(1, 110); + wtstr = i18n("Click here to choose an image that KDM will display. " + "You can also drag and drop an image onto this button " + "(e.g. from Konqueror)."); + QWhatsThis::add( logoLabel, wtstr ); + QWhatsThis::add( logobutton, wtstr ); + hglay->addRowSpacing( 2, KDialog::spacingHint()); + hglay->setColStretch( 3, 1); + + + hglay = new QGridLayout( 2, 3, KDialog::spacingHint() ); + grid->addLayout(hglay, 2, 1); + + label = new QLabel(i18n("Position:"), group); + hglay->addMultiCellWidget(label, 0,1, 0,0, AlignVCenter); + QValidator *posValidator = new QIntValidator(0, 100, group); + QLabel *xLineLabel = new QLabel(i18n("&X:"), group); + hglay->addWidget(xLineLabel, 0, 1); + xLineEdit = new QLineEdit (group); + connect( xLineEdit, SIGNAL( textChanged(const QString&) ), SLOT( changed() )); + hglay->addWidget(xLineEdit, 0, 2); + xLineLabel->setBuddy(xLineEdit); + xLineEdit->setValidator(posValidator); + QLabel *yLineLabel = new QLabel(i18n("&Y:"), group); + hglay->addWidget(yLineLabel, 1, 1); + yLineEdit = new QLineEdit (group); + connect( yLineEdit, SIGNAL( textChanged(const QString&) ), SLOT( changed() )); + hglay->addWidget(yLineEdit, 1, 2); + yLineLabel->setBuddy(yLineEdit); + yLineEdit->setValidator(posValidator); + wtstr = i18n("Here you specify the relative coordinates (in percent) of the login dialog's center."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( xLineLabel, wtstr ); + QWhatsThis::add( xLineEdit, wtstr ); + QWhatsThis::add( yLineLabel, wtstr ); + QWhatsThis::add( yLineEdit, wtstr ); + hglay->setColStretch( 3, 1); + hglay->setRowStretch( 2, 1); + + + hglay = new QGridLayout( 2, 3, KDialog::spacingHint() ); + grid->addLayout(hglay, 3, 1); + hglay->setColStretch(3, 1); + + guicombo = new KBackedComboBox(group); + guicombo->insertItem( "", i18n("") ); + loadGuiStyles(guicombo); + guicombo->listBox()->sort(); + label = new QLabel(guicombo, i18n("GUI s&tyle:"), group); + connect(guicombo, SIGNAL(activated(int)), SLOT(changed())); + hglay->addWidget(label, 0, 0); + hglay->addWidget(guicombo, 0, 1); + wtstr = i18n("You can choose a basic GUI style here that will be " + "used by KDM only."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( guicombo, wtstr ); + + colcombo = new KBackedComboBox(group); + colcombo->insertItem( "", i18n("") ); + loadColorSchemes(colcombo); + colcombo->listBox()->sort(); + label = new QLabel(colcombo, i18n("&Color scheme:"), group); + connect(colcombo, SIGNAL(activated(int)), SLOT(changed())); + hglay->addWidget(label, 1, 0); + hglay->addWidget(colcombo, 1, 1); + wtstr = i18n("You can choose a basic Color Scheme here that will be " + "used by KDM only."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( colcombo, wtstr ); + + echocombo = new KBackedComboBox(group); + echocombo->insertItem("NoEcho", i18n("No Echo")); + echocombo->insertItem("OneStar", i18n("One Star")); + echocombo->insertItem("ThreeStars", i18n("Three Stars")); + label = new QLabel(echocombo, i18n("Echo &mode:"), group); + connect(echocombo, SIGNAL(activated(int)), SLOT(changed())); + hglay->addWidget(label, 2, 0); + hglay->addWidget(echocombo, 2, 1); + wtstr = i18n("You can choose whether and how KDM shows your password when you type it."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( echocombo, wtstr ); + + + // The Language group box + group = new QGroupBox(0, Vertical, i18n("Locale"), this); + vbox->addWidget(group); + + langcombo = new KLanguageButton(group); + loadLanguageList(langcombo); + connect(langcombo, SIGNAL(activated(const QString &)), SLOT(changed())); + label = new QLabel(langcombo, i18n("Languag&e:"), group); + QGridLayout *hbox = new QGridLayout( group->layout(), 2, 2, KDialog::spacingHint() ); + hbox->setColStretch(1, 1); + hbox->addWidget(label, 1, 0); + hbox->addWidget(langcombo, 1, 1); + wtstr = i18n("Here you can choose the language used by KDM. This setting does not affect" + " a user's personal settings; that will take effect after login."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( langcombo, wtstr ); + + + vbox->addStretch(1); + +} + +void KDMAppearanceWidget::makeReadOnly() +{ + disconnect( logobutton, SIGNAL(clicked()), + this, SLOT(slotLogoButtonClicked()) ); + logobutton->setAcceptDrops(false); + greetstr_lined->setReadOnly(true); + noneRadio->setEnabled(false); + clockRadio->setEnabled(false); + logoRadio->setEnabled(false); + xLineEdit->setEnabled(false); + yLineEdit->setEnabled(false); + guicombo->setEnabled(false); + colcombo->setEnabled(false); + echocombo->setEnabled(false); + langcombo->setEnabled(false); +} + +void KDMAppearanceWidget::loadLanguageList(KLanguageButton *combo) +{ + QStringList langlist = KGlobal::dirs()->findAllResources("locale", + QString::fromLatin1("*/entry.desktop")); + langlist.sort(); + for ( QStringList::ConstIterator it = langlist.begin(); + it != langlist.end(); ++it ) + { + QString fpath = (*it).left((*it).length() - 14); + int index = fpath.findRev('/'); + QString nid = fpath.mid(index + 1); + + KSimpleConfig entry(*it); + entry.setGroup(QString::fromLatin1("KCM Locale")); + QString name = entry.readEntry(QString::fromLatin1("Name"), i18n("without name")); + combo->insertLanguage(nid, name, QString::fromLatin1("l10n/"), QString::null); + } +} + +void KDMAppearanceWidget::loadColorSchemes(KBackedComboBox *combo) +{ + // XXX: Global + local schemes + QStringList list = KGlobal::dirs()-> + findAllResources("data", "kdisplay/color-schemes/*.kcsrc", false, true); + for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) + { + KSimpleConfig config(*it, true); + config.setGroup("Color Scheme"); + + QString str; + if (!(str = config.readEntry("Name")).isEmpty() || + !(str = config.readEntry("name")).isEmpty()) + { + QString str2 = (*it).mid( (*it).findRev( '/' ) + 1 ); // strip off path + str2.setLength( str2.length() - 6 ); // strip off ".kcsrc + combo->insertItem( str2, str ); + } + } +} + +void KDMAppearanceWidget::loadGuiStyles(KBackedComboBox *combo) +{ + // XXX: Global + local schemes + QStringList list = KGlobal::dirs()-> + findAllResources("data", "kstyle/themes/*.themerc", false, true); + for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) + { + KSimpleConfig config(*it, true); + + if (!(config.hasGroup("KDE") && config.hasGroup("Misc"))) + continue; + + config.setGroup("Desktop Entry"); + if (config.readBoolEntry("Hidden", false)) + continue; + + config.setGroup("KDE"); + QString str2 = config.readEntry("WidgetStyle"); + if (str2.isNull()) + continue; + + config.setGroup("Misc"); + combo->insertItem( str2, config.readEntry("Name") ); + } +} + +bool KDMAppearanceWidget::setLogo(QString logo) +{ + QString flogo = logo.isEmpty() ? + locate("data", QString::fromLatin1("kdm/pics/kdelogo.png") ) : + logo; + QImage p(flogo); + if (p.isNull()) + return false; + if (p.width() > 100 || p.height() > 100) + p = p.smoothScale(100, 100, QImage::ScaleMin); + logobutton->setPixmap(p); + uint bd = style().pixelMetric( QStyle::PM_ButtonMargin ) * 2; + logobutton->setFixedSize(p.width() + bd, p.height() + bd); + logopath = logo; + return true; +} + + +void KDMAppearanceWidget::slotLogoButtonClicked() +{ + KImageIO::registerFormats(); + KFileDialog dialogue(locate("data", QString::fromLatin1("kdm/pics/")), + KImageIO::pattern( KImageIO::Reading ), + this, 0, true); + dialogue.setOperationMode( KFileDialog::Opening ); + dialogue.setMode( KFile::File | KFile::LocalOnly ); + + KImageFilePreview* imagePreview = new KImageFilePreview( &dialogue ); + dialogue.setPreviewWidget( imagePreview ); + if (dialogue.exec() == QDialog::Accepted) { + if ( setLogo(dialogue.selectedFile()) ) { + changed(); + } + } +} + + +void KDMAppearanceWidget::slotAreaRadioClicked(int id) +{ + logobutton->setEnabled( id == KdmLogo ); + logoLabel->setEnabled( id == KdmLogo ); +} + + +bool KDMAppearanceWidget::eventFilter(QObject *, QEvent *e) +{ + if (e->type() == QEvent::DragEnter) { + iconLoaderDragEnterEvent((QDragEnterEvent *) e); + return true; + } + + if (e->type() == QEvent::Drop) { + iconLoaderDropEvent((QDropEvent *) e); + return true; + } + + return false; +} + +void KDMAppearanceWidget::iconLoaderDragEnterEvent(QDragEnterEvent *e) +{ + e->accept(KURLDrag::canDecode(e)); +} + + +KURL *decodeImgDrop(QDropEvent *e, QWidget *wdg); + +void KDMAppearanceWidget::iconLoaderDropEvent(QDropEvent *e) +{ + KURL pixurl; + bool istmp; + + KURL *url = decodeImgDrop(e, this); + if (url) { + + // we gotta check if it is a non-local file and make a tmp copy at the hd. + if(!url->isLocalFile()) { + pixurl.setPath(KGlobal::dirs()->resourceDirs("data").last() + + "kdm/pics/" + url->fileName()); + KIO::NetAccess::copy(*url, pixurl, parentWidget()); + istmp = true; + } else { + pixurl = *url; + istmp = false; + } + + // By now url should be "file:/..." + if (!setLogo(pixurl.path())) { + KIO::NetAccess::del(pixurl, parentWidget()); + QString msg = i18n("There was an error loading the image:\n" + "%1\n" + "It will not be saved.") + .arg(pixurl.path()); + KMessageBox::sorry(this, msg); + } + + delete url; + } +} + + +void KDMAppearanceWidget::save() +{ + config->setGroup("X-*-Greeter"); + + config->writeEntry("GreetString", greetstr_lined->text()); + + config->writeEntry("LogoArea", noneRadio->isChecked() ? "None" : + logoRadio->isChecked() ? "Logo" : "Clock" ); + + config->writeEntry("LogoPixmap", KGlobal::iconLoader()->iconPath(logopath, KIcon::Desktop, true)); + + config->writeEntry("GUIStyle", guicombo->currentId()); + + config->writeEntry("ColorScheme", colcombo->currentId()); + + config->writeEntry("EchoMode", echocombo->currentId()); + + config->writeEntry("GreeterPos", xLineEdit->text() + ',' + yLineEdit->text()); + + config->writeEntry("Language", langcombo->current()); +} + + +void KDMAppearanceWidget::load() +{ + config->setGroup("X-*-Greeter"); + + // Read the greeting string + greetstr_lined->setText(config->readEntry("GreetString", i18n("Welcome to %s at %n"))); + + // Regular logo or clock + QString logoArea = config->readEntry("LogoArea", "Logo" ); + if (logoArea == "Clock") { + clockRadio->setChecked(true); + slotAreaRadioClicked(KdmClock); + } else if (logoArea == "Logo") { + logoRadio->setChecked(true); + slotAreaRadioClicked(KdmLogo); + } else { + noneRadio->setChecked(true); + slotAreaRadioClicked(KdmNone); + } + + // See if we use alternate logo + setLogo(config->readEntry("LogoPixmap")); + + // Check the GUI type + guicombo->setCurrentId(config->readEntry("GUIStyle")); + + // Check the Color Scheme + colcombo->setCurrentId(config->readEntry("ColorScheme")); + + // Check the echo mode + echocombo->setCurrentId(config->readEntry("EchoMode", "OneStar")); + + QStringList sl = config->readListEntry( "GreeterPos" ); + if (sl.count() != 2) { + xLineEdit->setText( "50" ); + yLineEdit->setText( "50" ); + } else { + xLineEdit->setText( sl.first() ); + yLineEdit->setText( sl.last() ); + } + + // get the language + langcombo->setCurrentItem(config->readEntry("Language", "C")); +} + + +void KDMAppearanceWidget::defaults() +{ + greetstr_lined->setText( i18n("Welcome to %s at %n") ); + logoRadio->setChecked( true ); + slotAreaRadioClicked( KdmLogo ); + setLogo( "" ); + guicombo->setCurrentId( "" ); + colcombo->setCurrentId( "" ); + echocombo->setCurrentItem( "OneStar" ); + + xLineEdit->setText( "50" ); + yLineEdit->setText( "50" ); + + langcombo->setCurrentItem( "en_US" ); +} + +QString KDMAppearanceWidget::quickHelp() const +{ + return i18n("

KDM - Appearance

Here you can configure the basic appearance" + " of the KDM login manager, i.e. a greeting string, an icon etc.

" + " For further refinement of KDM's appearance, see the \"Font\" and \"Background\" " + " tabs."); +} + + +void KDMAppearanceWidget::changed() +{ + emit changed(true); +} + +#include "kdm-appear.moc" diff --git a/kcontrol/kdm/kdm-appear.h b/kcontrol/kdm/kdm-appear.h new file mode 100644 index 000000000..991b6e4e0 --- /dev/null +++ b/kcontrol/kdm/kdm-appear.h @@ -0,0 +1,95 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997 Thomas Tanghus (tanghus@earthling.net) + + 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 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 __KDMAPPEAR_H__ +#define __KDMAPPEAR_H__ + + +#include +#include +#include +#include + +#include +#include +#include + + +#include "klanguagebutton.h" + +class QComboBox; +class KBackedComboBox; +class QLabel; +class QRadioButton; +class QLineEdit; +class KLineEdit; + + +class KDMAppearanceWidget : public QWidget +{ + Q_OBJECT + +public: + KDMAppearanceWidget(QWidget *parent, const char *name=0); + + void load(); + void save(); + void defaults(); + void makeReadOnly(); + QString quickHelp() const; + + void loadColorSchemes(KBackedComboBox *combo); + void loadGuiStyles(KBackedComboBox *combo); + void loadLanguageList(KLanguageButton *combo); + + bool eventFilter(QObject *, QEvent *); + +signals: + void changed( bool state ); + +protected: + void iconLoaderDragEnterEvent(QDragEnterEvent *event); + void iconLoaderDropEvent(QDropEvent *event); + bool setLogo(QString logo); + +private slots: + void slotAreaRadioClicked(int id); + void slotLogoButtonClicked(); + void changed(); + +private: + enum { KdmNone, KdmClock, KdmLogo }; + QLabel *logoLabel; + QPushButton *logobutton; + KLineEdit *greetstr_lined; + QString logopath; + QRadioButton *noneRadio; + QRadioButton *clockRadio; + QRadioButton *logoRadio; + QLineEdit *xLineEdit; + QLineEdit *yLineEdit; + KBackedComboBox *guicombo; + KBackedComboBox *colcombo; + KBackedComboBox *echocombo; + KLanguageButton *langcombo; + +}; + +#endif diff --git a/kcontrol/kdm/kdm-conv.cpp b/kcontrol/kdm/kdm-conv.cpp new file mode 100644 index 000000000..71d292c5f --- /dev/null +++ b/kcontrol/kdm/kdm-conv.cpp @@ -0,0 +1,362 @@ +/* This file is part of the KDE Display Manager Configuration package + + Copyright (C) 2000 Oswald Buddenhagen + Based on several other files. + + 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 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 +#include + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "kdm-conv.h" + +extern KSimpleConfig *config; + +KDMConvenienceWidget::KDMConvenienceWidget(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + QString wtstr; + + QLabel *paranoia = new QLabel( i18n("

Attention!
Read help!
"), this ); + + QSizePolicy vpref( QSizePolicy::Minimum, QSizePolicy::Fixed ); + + alGroup = new QVGroupBox( i18n("Enable Au&to-Login"), this ); + alGroup->setCheckable( true ); + alGroup->setSizePolicy( vpref ); + + QWhatsThis::add( alGroup, i18n("Turn on the auto-login feature." + " This applies only to KDM's graphical login." + " Think twice before enabling this!") ); + connect(alGroup, SIGNAL(toggled(bool)), SLOT(slotChanged())); + + QWidget *hlpw1 = new QWidget( alGroup ); + userlb = new KComboBox( hlpw1 ); + u_label = new QLabel( userlb, i18n("Use&r:"), hlpw1 ); + QGridLayout *hlpl1 = new QGridLayout(hlpw1, 2, 2, 0, KDialog::spacingHint()); + hlpl1->setColStretch(2, 1); + hlpl1->addWidget(u_label, 0, 0); + hlpl1->addWidget(userlb, 0, 1); + connect(userlb, SIGNAL(highlighted(int)), SLOT(slotChanged())); + wtstr = i18n("Select the user to be logged in automatically."); + QWhatsThis::add( u_label, wtstr ); + QWhatsThis::add( userlb, wtstr ); + delaysb = new QSpinBox( 0, 3600, 5, hlpw1 ); + delaysb->setSpecialValueText( i18n("delay", "none") ); + delaysb->setSuffix( i18n("seconds", " s") ); + d_label = new QLabel( delaysb, i18n("D&elay:"), hlpw1 ); + hlpl1->addWidget(d_label, 1, 0); + hlpl1->addWidget(delaysb, 1, 1); + connect(delaysb, SIGNAL(valueChanged(int)), SLOT(slotChanged())); + wtstr = i18n("The delay (in seconds) before the automatic login kicks in. " + "This feature is also known as \"timed login\"."); + QWhatsThis::add( d_label, wtstr ); + QWhatsThis::add( delaysb, wtstr ); + againcb = new QCheckBox( i18n("P&ersistent"), alGroup ); + connect( againcb, SIGNAL(toggled(bool)), SLOT(slotChanged()) ); + QWhatsThis::add( againcb, i18n("Normally, automatic login is performed only " + "when KDM starts up. If this is checked, automatic login will kick in " + "after finishing a session as well.") ); + autoLockCheck = new QCheckBox( i18n("Loc&k session"), alGroup ); + connect( autoLockCheck, SIGNAL(toggled(bool)), SLOT(slotChanged()) ); + QWhatsThis::add( autoLockCheck, i18n("If checked, the automatically started session " + "will be locked immediately (provided it is a KDE session). This can " + "be used to obtain a super-fast login restricted to one user.") ); + + + puGroup = new QVButtonGroup(i18n("Preselect User"), this ); + puGroup->setSizePolicy( vpref ); + + connect(puGroup, SIGNAL(clicked(int)), SLOT(slotPresChanged())); + connect(puGroup, SIGNAL(clicked(int)), SLOT(slotChanged())); + npRadio = new QRadioButton(i18n("preselected user", "&None"), puGroup); + ppRadio = new QRadioButton(i18n("Prev&ious"), puGroup); + QWhatsThis::add( ppRadio, i18n("Preselect the user that logged in previously. " + "Use this if this computer is usually used several consecutive times by one user.") ); + spRadio = new QRadioButton(i18n("Specif&y"), puGroup); + QWhatsThis::add( spRadio, i18n("Preselect the user specified in the combo box below. " + "Use this if this computer is predominantly used by a certain user.") ); + QWidget *hlpw = new QWidget(puGroup); + puserlb = new KComboBox(true, hlpw); + pu_label = new QLabel(puserlb, i18n("Us&er:"), hlpw); + connect(puserlb, SIGNAL(textChanged(const QString &)), SLOT(slotChanged())); + wtstr = i18n("Select the user to be preselected for login. " + "This box is editable, so you can specify an arbitrary non-existent " + "user to mislead possible attackers."); + QWhatsThis::add( pu_label, wtstr ); + QWhatsThis::add( puserlb, wtstr ); + QBoxLayout *hlpl = new QHBoxLayout(hlpw, 0, KDialog::spacingHint()); + hlpl->addWidget(pu_label); + hlpl->addWidget(puserlb); + hlpl->addStretch( 1 ); + cbjumppw = new QCheckBox(i18n("Focus pass&word"), puGroup); + QWhatsThis::add( cbjumppw, i18n("When this option is on, KDM will place the cursor " + "in the password field instead of the user field after preselecting a user. " + "Use this to save one key press per login, if the preselection usually does not need to " + "be changed.") ); + connect(cbjumppw, SIGNAL(toggled(bool)), SLOT(slotChanged())); + + npGroup = new QVGroupBox(i18n("Enable Password-&Less Logins"), this ); + npGroup->setCheckable( true ); + + QWhatsThis::add( npGroup, i18n("When this option is checked, the checked users from" + " the list below will be allowed to log in without entering their" + " password. This applies only to KDM's graphical login." + " Think twice before enabling this!") ); + + connect(npGroup, SIGNAL(toggled(bool)), SLOT(slotChanged())); + + pl_label = new QLabel(i18n("No password re&quired for:"), npGroup); + npuserlv = new KListView(npGroup); + pl_label->setBuddy(npuserlv); + npuserlv->addColumn(QString::null); + npuserlv->header()->hide(); + npuserlv->setResizeMode(QListView::LastColumn); + QWhatsThis::add(npuserlv, i18n("Check all users you want to allow a password-less login for." + " Entries denoted with '@' are user groups. Checking a group is like checking all users in that group.")); + connect( npuserlv, SIGNAL(clicked( QListViewItem * )), + SLOT(slotChanged()) ); + + btGroup = new QVGroupBox( i18n("Miscellaneous"), this ); + + cbarlen = new QCheckBox(i18n("Automatically log in again after &X server crash"), btGroup); + QWhatsThis::add( cbarlen, i18n("When this option is on, a user will be" + " logged in again automatically when their session is interrupted by an" + " X server crash; note that this can open a security hole: if you use" + " a screen locker than KDE's integrated one, this will make" + " circumventing a password-secured screen lock possible.") ); + connect(cbarlen, SIGNAL(toggled(bool)), SLOT(slotChanged())); + + QGridLayout *main = new QGridLayout(this, 5, 2, 10); + main->addWidget(paranoia, 0, 0); + main->addWidget(alGroup, 1, 0); + main->addWidget(puGroup, 2, 0); + main->addMultiCellWidget(npGroup, 0,3, 1,1); + main->addMultiCellWidget(btGroup, 4,4, 0,1); + main->setColStretch(0, 1); + main->setColStretch(1, 2); + main->setRowStretch(3, 1); + + connect( userlb, SIGNAL(activated( const QString & )), + SLOT(slotSetAutoUser( const QString & )) ); + connect( puserlb, SIGNAL(textChanged( const QString & )), + SLOT(slotSetPreselUser( const QString & )) ); + connect( npuserlv, SIGNAL(clicked( QListViewItem * )), + SLOT(slotUpdateNoPassUser( QListViewItem * )) ); + +} + +void KDMConvenienceWidget::makeReadOnly() +{ + ((QWidget*)alGroup->child("qt_groupbox_checkbox"))->setEnabled(false); + userlb->setEnabled(false); + delaysb->setEnabled(false); + againcb->setEnabled(false); + autoLockCheck->setEnabled(false); + ((QWidget*)npGroup->child("qt_groupbox_checkbox"))->setEnabled(false); + npuserlv->setEnabled(false); + cbarlen->setEnabled(false); + npRadio->setEnabled(false); + ppRadio->setEnabled(false); + spRadio->setEnabled(false); + puserlb->setEnabled(false); + cbjumppw->setEnabled(false); +} + +void KDMConvenienceWidget::slotPresChanged() +{ + bool en = spRadio->isChecked(); + pu_label->setEnabled(en); + puserlb->setEnabled(en); + cbjumppw->setEnabled(!npRadio->isChecked()); +} + +void KDMConvenienceWidget::save() +{ + config->setGroup("X-:0-Core"); + config->writeEntry( "AutoLoginEnable", alGroup->isChecked() ); + config->writeEntry( "AutoLoginUser", userlb->currentText() ); + config->writeEntry( "AutoLoginDelay", delaysb->value() ); + config->writeEntry( "AutoLoginAgain", againcb->isChecked() ); + config->writeEntry( "AutoLoginLocked", autoLockCheck->isChecked() ); + + config->setGroup("X-:*-Core"); + config->writeEntry( "NoPassEnable", npGroup->isChecked() ); + config->writeEntry( "NoPassUsers", noPassUsers ); + + config->setGroup("X-*-Core"); + config->writeEntry( "AutoReLogin", cbarlen->isChecked() ); + + config->setGroup("X-:*-Greeter"); + config->writeEntry( "PreselectUser", npRadio->isChecked() ? "None" : + ppRadio->isChecked() ? "Previous" : + "Default" ); + config->writeEntry( "DefaultUser", puserlb->currentText() ); + config->writeEntry( "FocusPasswd", cbjumppw->isChecked() ); +} + + +void KDMConvenienceWidget::load() +{ + config->setGroup("X-:0-Core"); + bool alenable = config->readBoolEntry( "AutoLoginEnable", false); + autoUser = config->readEntry( "AutoLoginUser" ); + delaysb->setValue( config->readNumEntry( "AutoLoginDelay", 0 ) ); + againcb->setChecked( config->readBoolEntry( "AutoLoginAgain", false ) ); + autoLockCheck->setChecked( config->readBoolEntry( "AutoLoginLocked", false ) ); + if (autoUser.isEmpty()) + alenable=false; + alGroup->setChecked( alenable ); + + config->setGroup("X-:*-Core"); + npGroup->setChecked(config->readBoolEntry( "NoPassEnable", false) ); + noPassUsers = config->readListEntry( "NoPassUsers"); + + config->setGroup("X-*-Core"); + cbarlen->setChecked(config->readBoolEntry( "AutoReLogin", false) ); + + config->setGroup("X-:*-Greeter"); + QString presstr = config->readEntry( "PreselectUser", "None" ); + if (presstr == "Previous") + ppRadio->setChecked(true); + else if (presstr == "Default") + spRadio->setChecked(true); + else + npRadio->setChecked(true); + preselUser = config->readEntry( "DefaultUser" ); + cbjumppw->setChecked(config->readBoolEntry( "FocusPasswd", false) ); + + slotPresChanged(); +} + + +void KDMConvenienceWidget::defaults() +{ + alGroup->setChecked(false); + delaysb->setValue(0); + againcb->setChecked(false); + autoLockCheck->setChecked(false); + npRadio->setChecked(true); + npGroup->setChecked(false); + cbarlen->setChecked(false); + cbjumppw->setChecked(false); + autoUser = ""; + preselUser = ""; + noPassUsers.clear(); + + slotPresChanged(); +} + + +void KDMConvenienceWidget::slotChanged() +{ + emit changed(true); +} + +void KDMConvenienceWidget::slotSetAutoUser( const QString &user ) +{ + autoUser = user; +} + +void KDMConvenienceWidget::slotSetPreselUser( const QString &user ) +{ + preselUser = user; +} + +void KDMConvenienceWidget::slotUpdateNoPassUser( QListViewItem *item ) +{ + if ( !item ) + return; + QCheckListItem *itm = (QCheckListItem *)item; + QStringList::iterator it = noPassUsers.find( itm->text() ); + if (itm->isOn()) { + if (it == noPassUsers.end()) + noPassUsers.append( itm->text() ); + } else { + if (it != noPassUsers.end()) + noPassUsers.remove( it ); + } +} + +void KDMConvenienceWidget::slotClearUsers() +{ + userlb->clear(); + puserlb->clear(); + npuserlv->clear(); + if (!autoUser.isEmpty()) + userlb->insertItem(autoUser); + if (!preselUser.isEmpty()) + puserlb->insertItem(preselUser); +} + +void KDMConvenienceWidget::slotAddUsers(const QMap &users) +{ + QMapConstIterator it; + for (it = users.begin(); it != users.end(); ++it) { + if (it.data() > 0) { + if (it.key() != autoUser) + userlb->insertItem(it.key()); + if (it.key() != preselUser) + puserlb->insertItem(it.key()); + } + if (it.data() != 0) + (new QCheckListItem(npuserlv, it.key(), QCheckListItem::CheckBox))-> + setOn(noPassUsers.find(it.key()) != noPassUsers.end()); + } + + if (userlb->listBox()) + userlb->listBox()->sort(); + + if (puserlb->listBox()) + puserlb->listBox()->sort(); + + npuserlv->sort(); + userlb->setCurrentItem(autoUser); + puserlb->setCurrentItem(preselUser); +} + +void KDMConvenienceWidget::slotDelUsers(const QMap &users) +{ + QMapConstIterator it; + for (it = users.begin(); it != users.end(); ++it) { + if (it.data() > 0) { + if (it.key() != autoUser && userlb->listBox()) + delete userlb->listBox()-> + findItem( it.key(), ExactMatch | CaseSensitive ); + if (it.key() != preselUser && puserlb->listBox()) + delete puserlb->listBox()-> + findItem( it.key(), ExactMatch | CaseSensitive ); + } + if (it.data() != 0) + delete npuserlv->findItem( it.key(), 0 ); + } +} + +#include "kdm-conv.moc" diff --git a/kcontrol/kdm/kdm-conv.h b/kcontrol/kdm/kdm-conv.h new file mode 100644 index 000000000..c00128629 --- /dev/null +++ b/kcontrol/kdm/kdm-conv.h @@ -0,0 +1,84 @@ +/* This file is part of the KDE Display Manager Configuration package + + Copyright (C) 2000 Oswald Buddenhagen + Based on several other files. + + 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 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 __KDMCONV_H__ +#define __KDMCONV_H__ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + + +class KDMConvenienceWidget : public QWidget +{ + Q_OBJECT + +public: + KDMConvenienceWidget(QWidget *parent=0, const char *name=0); + + void load(); + void save(); + void defaults(); + void makeReadOnly(); + +public slots: + void slotClearUsers(); + void slotAddUsers(const QMap &); + void slotDelUsers(const QMap &); + + +signals: + void changed( bool state ); + +private slots: + void slotPresChanged(); + void slotChanged(); + void slotSetAutoUser( const QString &user ); + void slotSetPreselUser( const QString &user ); + void slotUpdateNoPassUser( QListViewItem *item ); + +private: + QGroupBox *alGroup, *puGroup, *npGroup, *btGroup; + QCheckBox *againcb, *cbarlen, *cbjumppw, *autoLockCheck; + QRadioButton *npRadio, *ppRadio, *spRadio; + KComboBox *userlb, *puserlb; + QSpinBox *delaysb; + KListView *npuserlv; + QLabel *u_label, *d_label, *pu_label, *w_label, *n_label, *pl_label; + QString autoUser, preselUser; + QStringList noPassUsers; +}; + +#endif + + diff --git a/kcontrol/kdm/kdm-font.cpp b/kcontrol/kdm/kdm-font.cpp new file mode 100644 index 000000000..da67e5eaa --- /dev/null +++ b/kcontrol/kdm/kdm-font.cpp @@ -0,0 +1,134 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997 Thomas Tanghus (tanghus@earthling.net) + + 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 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 +#include + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "kdm-font.h" + + +extern KSimpleConfig *config; + +KDMFontWidget::KDMFontWidget(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + QGridLayout *ml = new QGridLayout(this, 5, 2, KDialog::marginHint(), KDialog::spacingHint()); + QLabel *label = new QLabel(i18n("&General:"), this); + stdFontChooser = new KFontRequester(this); + label->setBuddy(stdFontChooser); + QWhatsThis::add( stdFontChooser, i18n("This changes the font which is used for all the text in the login manager except for the greeting and failure messages.") ); + connect(stdFontChooser, SIGNAL(fontSelected(const QFont&)),this,SLOT(configChanged())); + ml->addWidget(label, 1, 0); + ml->addWidget(stdFontChooser, 1, 1); + + label = new QLabel(i18n("&Failures:"), this); + failFontChooser = new KFontRequester(this); + label->setBuddy(failFontChooser); + QWhatsThis::add( failFontChooser, i18n("This changes the font which is used for failure messages in the login manager.") ); + connect(failFontChooser, SIGNAL(fontSelected(const QFont&)),this,SLOT(configChanged())); + ml->addWidget(label, 2, 0); + ml->addWidget(failFontChooser, 2, 1); + + label = new QLabel(i18n("Gree&ting:"), this); + greetingFontChooser = new KFontRequester(this); + label->setBuddy(greetingFontChooser); + QWhatsThis::add( greetingFontChooser, i18n("This changes the font which is used for the login manager's greeting.") ); + connect(greetingFontChooser, SIGNAL(fontSelected(const QFont&)),this,SLOT(configChanged())); + ml->addWidget(label, 3, 0); + ml->addWidget(greetingFontChooser, 3, 1); + + aacb = new QCheckBox (i18n("Use anti-aliasing for fonts"), this); + QWhatsThis::add( aacb, i18n("If you check this box and your X-Server has the Xft extension, " + "fonts will be antialiased (smoothed) in the login dialog.") ); + connect(aacb, SIGNAL(toggled ( bool )),this,SLOT(configChanged())); + ml->addMultiCellWidget(aacb, 4, 4, 0, 1); + ml->setRowStretch(5, 10); +} + +void KDMFontWidget::makeReadOnly() +{ + stdFontChooser->button()->setEnabled(false); + failFontChooser->button()->setEnabled(false); + greetingFontChooser->button()->setEnabled(false); + aacb->setEnabled(false); +} + +void KDMFontWidget::configChanged() +{ + emit changed(true); +} + +void KDMFontWidget::set_def() +{ + stdFontChooser->setFont(QFont("Sans Serif", 10)); + failFontChooser->setFont(QFont("Sans Serif", 10, QFont::Bold)); + greetingFontChooser->setFont(QFont("Serif", 20)); +} + +void KDMFontWidget::save() +{ + config->setGroup("X-*-Greeter"); + + // write font + config->writeEntry("StdFont", stdFontChooser->font()); + config->writeEntry("GreetFont", greetingFontChooser->font()); + config->writeEntry("FailFont", failFontChooser->font()); + config->writeEntry("AntiAliasing", aacb->isChecked()); +} + + +void KDMFontWidget::load() +{ + set_def(); + + config->setGroup("X-*-Greeter"); + + // Read the fonts + QFont font = stdFontChooser->font(); + stdFontChooser->setFont(config->readFontEntry("StdFont", &font)); + font = failFontChooser->font(); + failFontChooser->setFont(config->readFontEntry("FailFont", &font)); + font = greetingFontChooser->font(); + greetingFontChooser->setFont(config->readFontEntry("GreetFont", &font)); + + aacb->setChecked(config->readBoolEntry("AntiAliasing")); +} + + +void KDMFontWidget::defaults() +{ + set_def(); + aacb->setChecked(false); +} + +#include "kdm-font.moc" diff --git a/kcontrol/kdm/kdm-font.h b/kcontrol/kdm/kdm-font.h new file mode 100644 index 000000000..232db3cb4 --- /dev/null +++ b/kcontrol/kdm/kdm-font.h @@ -0,0 +1,57 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997 Thomas Tanghus (tanghus@earthling.net) + + 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 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 __KDMFONT_H__ +#define __KDMFONT_H__ + +#include + +class KFontRequester; +class QCheckBox; + +class KDMFontWidget : public QWidget +{ + Q_OBJECT + +public: + KDMFontWidget(QWidget *parent=0, const char *name=0); + + void load(); + void save(); + void defaults(); + void makeReadOnly(); + +signals: + void changed( bool state ); + +protected slots: + void configChanged(); + void set_def(); + +private: + QCheckBox *aacb; + KFontRequester *greetingFontChooser; + KFontRequester *failFontChooser; + KFontRequester *stdFontChooser; +}; + + +#endif + + diff --git a/kcontrol/kdm/kdm-shut.cpp b/kcontrol/kdm/kdm-shut.cpp new file mode 100644 index 000000000..c958e1464 --- /dev/null +++ b/kcontrol/kdm/kdm-shut.cpp @@ -0,0 +1,227 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997-1998 Thomas Tanghus (tanghus@earthling.net) + + 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 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 +#include + + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "kdm-shut.h" +#include "kbackedcombobox.h" + +extern KSimpleConfig *config; + + +KDMSessionsWidget::KDMSessionsWidget(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + QString wtstr; + + + QGroupBox *group0 = new QGroupBox( i18n("Allow Shutdown"), this ); + + sdlcombo = new QComboBox( FALSE, group0 ); + sdllabel = new QLabel (sdlcombo, i18n ("&Local:"), group0); + sdlcombo->insertItem(i18n("Everybody"), SdAll); + sdlcombo->insertItem(i18n("Only Root"), SdRoot); + sdlcombo->insertItem(i18n("Nobody"), SdNone); + connect(sdlcombo, SIGNAL(activated(int)), SLOT(changed())); + sdrcombo = new QComboBox( FALSE, group0 ); + sdrlabel = new QLabel (sdrcombo, i18n ("&Remote:"), group0); + sdrcombo->insertItem(i18n("Everybody"), SdAll); + sdrcombo->insertItem(i18n("Only Root"), SdRoot); + sdrcombo->insertItem(i18n("Nobody"), SdNone); + connect(sdrcombo, SIGNAL(activated(int)), SLOT(changed())); + QWhatsThis::add( group0, i18n("Here you can select who is allowed to shutdown" + " the computer using KDM. You can specify different values for local (console) and remote displays. " + "Possible values are:
    " + "
  • Everybody: everybody can shutdown the computer using KDM
  • " + "
  • Only root: KDM will only allow shutdown after the user has entered the root password
  • " + "
  • Nobody: nobody can shutdown the computer using KDM
") ); + + + QGroupBox *group1 = new QGroupBox( i18n("Commands"), this ); + + shutdown_lined = new KURLRequester(group1); + QLabel *shutdown_label = new QLabel(shutdown_lined, i18n("H&alt:"), group1); + connect(shutdown_lined, SIGNAL(textChanged(const QString&)), + SLOT(changed())); + wtstr = i18n("Command to initiate the system halt. Typical value: /sbin/halt"); + QWhatsThis::add( shutdown_label, wtstr ); + QWhatsThis::add( shutdown_lined, wtstr ); + + restart_lined = new KURLRequester(group1); + QLabel *restart_label = new QLabel(restart_lined, i18n("Reb&oot:"), group1); + connect(restart_lined, SIGNAL(textChanged(const QString&)), + SLOT(changed())); + wtstr = i18n("Command to initiate the system reboot. Typical value: /sbin/reboot"); + QWhatsThis::add( restart_label, wtstr ); + QWhatsThis::add( restart_lined, wtstr ); + + + QGroupBox *group4 = new QGroupBox( i18n("Miscellaneous"), this ); + + bm_combo = new KBackedComboBox( group4 ); + bm_combo->insertItem("None", i18n("boot manager", "None")); + bm_combo->insertItem("Grub", i18n("Grub")); +#if defined(__linux__) && ( defined(__i386__) || defined(__amd64__) ) + bm_combo->insertItem("Lilo", i18n("Lilo")); +#endif + QLabel *bm_label = new QLabel( bm_combo, i18n("Boot manager:"), group4 ); + connect(bm_combo, SIGNAL(activated(int)), SLOT(changed())); + wtstr = i18n("Enable boot options in the \"Shutdown...\" dialog."); + QWhatsThis::add( bm_label, wtstr ); + QWhatsThis::add( bm_combo, wtstr ); + + QBoxLayout *main = new QVBoxLayout( this, 10 ); + QGridLayout *lgroup0 = new QGridLayout( group0, 1, 1, 10); + QGridLayout *lgroup1 = new QGridLayout( group1, 1, 1, 10); + QGridLayout *lgroup4 = new QGridLayout( group4, 1, 1, 10); + + main->addWidget(group0); + main->addWidget(group1); + main->addWidget(group4); + main->addStretch(); + + lgroup0->addRowSpacing(0, group0->fontMetrics().height()/2); + lgroup0->addColSpacing(2, KDialog::spacingHint() * 2); + lgroup0->setColStretch(1, 1); + lgroup0->setColStretch(4, 1); + lgroup0->addWidget(sdllabel, 1, 0); + lgroup0->addWidget(sdlcombo, 1, 1); + lgroup0->addWidget(sdrlabel, 1, 3); + lgroup0->addWidget(sdrcombo, 1, 4); + + lgroup1->addRowSpacing(0, group1->fontMetrics().height()/2); + lgroup1->addColSpacing(2, KDialog::spacingHint() * 2); + lgroup1->setColStretch(1, 1); + lgroup1->setColStretch(4, 1); + lgroup1->addWidget(shutdown_label, 1, 0); + lgroup1->addWidget(shutdown_lined, 1, 1); + lgroup1->addWidget(restart_label, 1, 3); + lgroup1->addWidget(restart_lined, 1, 4); + + lgroup4->addRowSpacing(0, group4->fontMetrics().height()/2); + lgroup4->addWidget(bm_label, 1, 0); + lgroup4->addWidget(bm_combo, 1, 1); + lgroup4->setColStretch(2, 1); + + main->activate(); + +} + +void KDMSessionsWidget::makeReadOnly() +{ + sdlcombo->setEnabled(false); + sdrcombo->setEnabled(false); + + restart_lined->lineEdit()->setReadOnly(true); + restart_lined->button()->setEnabled(false); + shutdown_lined->lineEdit()->setReadOnly(true); + shutdown_lined->button()->setEnabled(false); + + bm_combo->setEnabled(false); +} + +void KDMSessionsWidget::writeSD(QComboBox *combo) +{ + QString what; + switch (combo->currentItem()) { + case SdAll: what = "All"; break; + case SdRoot: what = "Root"; break; + default: what = "None"; break; + } + config->writeEntry( "AllowShutdown", what); +} + +void KDMSessionsWidget::save() +{ + config->setGroup("X-:*-Core"); + writeSD(sdlcombo); + + config->setGroup("X-*-Core"); + writeSD(sdrcombo); + + config->setGroup("Shutdown"); + config->writeEntry("HaltCmd", shutdown_lined->url(), true); + config->writeEntry("RebootCmd", restart_lined->url(), true); + + config->writeEntry("BootManager", bm_combo->currentId()); +} + +void KDMSessionsWidget::readSD(QComboBox *combo, QString def) +{ + QString str = config->readEntry("AllowShutdown", def); + SdModes sdMode; + if(str == "All") + sdMode = SdAll; + else if(str == "Root") + sdMode = SdRoot; + else + sdMode = SdNone; + combo->setCurrentItem(sdMode); +} + +void KDMSessionsWidget::load() +{ + config->setGroup("X-:*-Core"); + readSD(sdlcombo, "All"); + + config->setGroup("X-*-Core"); + readSD(sdrcombo, "Root"); + + config->setGroup("Shutdown"); + restart_lined->setURL(config->readEntry("RebootCmd", "/sbin/reboot")); + shutdown_lined->setURL(config->readEntry("HaltCmd", "/sbin/halt")); + + bm_combo->setCurrentId(config->readEntry("BootManager", "None")); +} + + + +void KDMSessionsWidget::defaults() +{ + restart_lined->setURL("/sbin/reboot"); + shutdown_lined->setURL("/sbin/halt"); + + sdlcombo->setCurrentItem(SdAll); + sdrcombo->setCurrentItem(SdRoot); + + bm_combo->setCurrentId("None"); +} + + +void KDMSessionsWidget::changed() +{ + emit changed(true); +} + +#include "kdm-shut.moc" diff --git a/kcontrol/kdm/kdm-shut.h b/kcontrol/kdm/kdm-shut.h new file mode 100644 index 000000000..8bad7d5a0 --- /dev/null +++ b/kcontrol/kdm/kdm-shut.h @@ -0,0 +1,64 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997 Thomas Tanghus (tanghus@earthling.net) + + 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 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 __KDMSESS_H__ +#define __KDMSESS_H__ + + +#include + +class QComboBox; +class QCheckBox; +class KURLRequester; +class KBackedComboBox; + +class KDMSessionsWidget : public QWidget +{ + Q_OBJECT + +public: + KDMSessionsWidget(QWidget *parent=0, const char *name=0); + + void load(); + void save(); + void defaults(); + void makeReadOnly(); + + enum SdModes { SdAll, SdRoot, SdNone }; + +signals: + void changed( bool state ); + +protected slots: + void changed(); + +private: + void readSD (QComboBox *, QString); + void writeSD (QComboBox *); + + QComboBox *sdlcombo, *sdrcombo; + QLabel *sdllabel, *sdrlabel; + KURLRequester *restart_lined, *shutdown_lined; + KBackedComboBox *bm_combo; +}; + + +#endif + + diff --git a/kcontrol/kdm/kdm-users.cpp b/kcontrol/kdm/kdm-users.cpp new file mode 100644 index 000000000..d8a540bd3 --- /dev/null +++ b/kcontrol/kdm/kdm-users.cpp @@ -0,0 +1,500 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997 Thomas Tanghus (tanghus@earthling.net) + + 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 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 +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kdm-users.h" + +#include + + +extern KSimpleConfig *config; + +KDMUsersWidget::KDMUsersWidget(QWidget *parent, const char *name) + : QWidget(parent, name) +{ +#ifdef __linux__ + struct stat st; + if (!stat( "/etc/debian_version", &st )) { /* debian */ + defminuid = "1000"; + defmaxuid = "29999"; + } else if (!stat( "/usr/portage", &st )) { /* gentoo */ + defminuid = "1000"; + defmaxuid = "65000"; + } else if (!stat( "/etc/mandrake-release", &st )) { /* mandrake - check before redhat! */ + defminuid = "500"; + defmaxuid = "65000"; + } else if (!stat( "/etc/redhat-release", &st )) { /* redhat */ + defminuid = "100"; + defmaxuid = "65000"; + } else /* if (!stat( "/etc/SuSE-release", &st )) */ { /* suse */ + defminuid = "500"; + defmaxuid = "65000"; + } +#else + defminuid = "1000"; + defmaxuid = "65000"; +#endif + + // We assume that $kde_datadir/kdm exists, but better check for pics/ and pics/users, + // and create them if necessary. + config->setGroup( "X-*-Greeter" ); + m_userPixDir = config->readEntry( "FaceDir", KGlobal::dirs()->resourceDirs("data").last() + "kdm/faces" ) + '/'; + m_notFirst = false; + QDir testDir( m_userPixDir ); + if ( !testDir.exists() && !testDir.mkdir( testDir.absPath() ) && !geteuid() ) + KMessageBox::sorry( this, i18n("Unable to create folder %1").arg( testDir.absPath() ) ); + chmod( QFile::encodeName( m_userPixDir ), 0755 ); + + m_defaultText = i18n(""); + + QString wtstr; + + minGroup = new QGroupBox( 2, Horizontal, i18n("System U&IDs"), this ); + QWhatsThis::add( minGroup, i18n("Users with a UID (numerical user identification) outside this range will not be listed by KDM and this setup dialog." + " Note that users with the UID 0 (typically root) are not affected by this and must be" + " explicitly hidden in \"Not hidden\" mode.")); + QSizePolicy sp_ign_fix( QSizePolicy::Ignored, QSizePolicy::Fixed ); + QValidator *valid = new QIntValidator( 0, 999999, minGroup ); + QLabel *minlab = new QLabel( i18n("Below:"), minGroup ); + leminuid = new KLineEdit( minGroup ); + minlab->setBuddy( leminuid ); + leminuid->setSizePolicy( sp_ign_fix ); + leminuid->setValidator( valid ); + connect( leminuid, SIGNAL(textChanged( const QString & )), SLOT(slotChanged()) ); + connect( leminuid, SIGNAL(textChanged( const QString & )), SLOT(slotMinMaxChanged()) ); + QLabel *maxlab = new QLabel( i18n("Above:"), minGroup ); + lemaxuid = new KLineEdit( minGroup ); + maxlab->setBuddy( lemaxuid ); + lemaxuid->setSizePolicy( sp_ign_fix ); + lemaxuid->setValidator( valid ); + connect(lemaxuid, SIGNAL(textChanged( const QString & )), SLOT(slotChanged()) ); + connect(lemaxuid, SIGNAL(textChanged( const QString & )), SLOT(slotMinMaxChanged()) ); + + usrGroup = new QButtonGroup( 5, Qt::Vertical, i18n("Users"), this ); + connect( usrGroup, SIGNAL(clicked( int )), SLOT(slotShowOpts()) ); + connect( usrGroup, SIGNAL(clicked( int )), SLOT(slotChanged()) ); + cbshowlist = new QCheckBox( i18n("Show list"), usrGroup ); + QWhatsThis::add( cbshowlist, i18n("If this option is checked, KDM will show a list of users," + " so users can click on their name or image rather than typing in their login.") ); + cbcomplete = new QCheckBox( i18n("Autocompletion"), usrGroup ); + QWhatsThis::add( cbcomplete, i18n("If this option is checked, KDM will automatically complete" + " user names while they are typed in the line edit.") ); + cbinverted = new QCheckBox( i18n("Inverse selection"), usrGroup ); + QWhatsThis::add( cbinverted, i18n("This option specifies how the users for \"Show list\" and \"Autocompletion\"" + " are selected in the \"Select users and groups\" list: " + "If not checked, select only the checked users. " + "If checked, select all non-system users, except the checked ones.")); + cbusrsrt = new QCheckBox( i18n("Sor&t users"), usrGroup ); + connect( cbusrsrt, SIGNAL(toggled( bool )), SLOT(slotChanged()) ); + QWhatsThis::add( cbusrsrt, i18n("If this is checked, KDM will alphabetically sort the user list." + " Otherwise users are listed in the order they appear in the password file.") ); + + wstack = new QWidgetStack( this ); + s_label = new QLabel( wstack, i18n("S&elect users and groups:"), this ); + optinlv = new KListView( this ); + optinlv->addColumn( i18n("Selected Users") ); + optinlv->setResizeMode( QListView::LastColumn ); + QWhatsThis::add( optinlv, i18n("KDM will show all checked users. Entries denoted with '@' are user groups. Checking a group is like checking all users in that group.") ); + wstack->addWidget( optinlv ); + connect( optinlv, SIGNAL(clicked( QListViewItem * )), + SLOT(slotUpdateOptIn( QListViewItem * )) ); + connect( optinlv, SIGNAL(clicked( QListViewItem * )), + SLOT(slotChanged()) ); + optoutlv = new KListView( this ); + optoutlv->addColumn( i18n("Hidden Users") ); + optoutlv->setResizeMode( QListView::LastColumn ); + QWhatsThis::add( optoutlv, i18n("KDM will show all non-checked non-system users. Entries denoted with '@' are user groups. Checking a group is like checking all users in that group.") ); + wstack->addWidget( optoutlv ); + connect( optoutlv, SIGNAL(clicked( QListViewItem * )), + SLOT(slotUpdateOptOut( QListViewItem * )) ); + connect( optoutlv, SIGNAL(clicked( QListViewItem * )), + SLOT(slotChanged()) ); + + faceGroup = new QButtonGroup( 5, Qt::Vertical, i18n("User Image Source"), this ); + QWhatsThis::add( faceGroup, i18n("Here you can specify where KDM will obtain the images that represent users." + " \"Admin\" represents the global folder; these are the pictures you can set below." + " \"User\" means that KDM should read the user's $HOME/.face.icon file." + " The two selections in the middle define the order of preference if both sources are available.") ); + connect( faceGroup, SIGNAL(clicked( int )), SLOT(slotFaceOpts()) ); + connect( faceGroup, SIGNAL(clicked( int )), SLOT(slotChanged()) ); + rbadmonly = new QRadioButton( i18n("Admin"), faceGroup ); + rbprefadm = new QRadioButton( i18n("Admin, user"), faceGroup ); + rbprefusr = new QRadioButton( i18n("User, admin"), faceGroup ); + rbusronly = new QRadioButton( i18n("User"), faceGroup ); + + QGroupBox *picGroup = new QVGroupBox( i18n("User Images"), this ); + QWidget *hlpw = new QWidget( picGroup ); + usercombo = new KComboBox( hlpw ); + QWhatsThis::add( usercombo, i18n("The user the image below belongs to.") ); + connect( usercombo, SIGNAL(activated( int )), + SLOT(slotUserSelected()) ); + QLabel *userlabel = new QLabel( usercombo, i18n("User:"), hlpw ); + userbutton = new QPushButton( hlpw ); + userbutton->setAcceptDrops( true ); + userbutton->installEventFilter( this ); // for drag and drop + uint sz = style().pixelMetric( QStyle::PM_ButtonMargin ) * 2 + 48; + userbutton->setFixedSize( sz, sz ); + connect( userbutton, SIGNAL(clicked()), + SLOT(slotUserButtonClicked()) ); + QToolTip::add( userbutton, i18n("Click or drop an image here") ); + QWhatsThis::add( userbutton, i18n("Here you can see the image assigned to the user selected in the combo box above. Click on the image button to select from a list" + " of images or drag and drop your own image on to the button (e.g. from Konqueror).") ); + rstuserbutton = new QPushButton( i18n("Unset"), hlpw ); + QWhatsThis::add( rstuserbutton, i18n("Click this button to make KDM use the default image for the selected user.") ); + connect( rstuserbutton, SIGNAL(clicked()), + SLOT(slotUnsetUserPix()) ); + QGridLayout *hlpl = new QGridLayout( hlpw, 3, 2, 0, KDialog::spacingHint() ); + hlpl->addWidget( userlabel, 0, 0 ); +// hlpl->addSpacing( KDialog::spacingHint() ); + hlpl->addWidget( usercombo, 0, 1 ); + hlpl->addMultiCellWidget( userbutton, 1,1, 0,1, AlignHCenter ); + hlpl->addMultiCellWidget( rstuserbutton, 2,2, 0,1, AlignHCenter ); + + QHBoxLayout *main = new QHBoxLayout( this, 10 ); + + QVBoxLayout *lLayout = new QVBoxLayout( main, 10 ); + lLayout->addWidget( minGroup ); + lLayout->addWidget( usrGroup ); + lLayout->addStretch( 1 ); + + QVBoxLayout *mLayout = new QVBoxLayout( main, 10 ); + mLayout->addWidget( s_label ); + mLayout->addWidget( wstack ); + mLayout->setStretchFactor( wstack, 1 ); + main->setStretchFactor( mLayout, 1 ); + + QVBoxLayout *rLayout = new QVBoxLayout( main, 10 ); + rLayout->addWidget( faceGroup ); + rLayout->addWidget( picGroup ); + rLayout->addStretch( 1 ); + +} + +void KDMUsersWidget::makeReadOnly() +{ + leminuid->setReadOnly(true); + lemaxuid->setReadOnly(true); + cbshowlist->setEnabled(false); + cbcomplete->setEnabled(false); + cbinverted->setEnabled(false); + cbusrsrt->setEnabled(false); + rbadmonly->setEnabled(false); + rbprefadm->setEnabled(false); + rbprefusr->setEnabled(false); + rbusronly->setEnabled(false); + wstack->setEnabled(false); + disconnect( userbutton, SIGNAL(clicked()), this, SLOT(slotUserButtonClicked()) ); + userbutton->setAcceptDrops(false); + rstuserbutton->setEnabled(false); +} + +void KDMUsersWidget::slotShowOpts() +{ + bool en = cbshowlist->isChecked() || cbcomplete->isChecked(); + cbinverted->setEnabled( en ); + cbusrsrt->setEnabled( en ); + wstack->setEnabled( en ); + wstack->raiseWidget( cbinverted->isChecked() ? optoutlv : optinlv ); + en = cbshowlist->isChecked(); + faceGroup->setEnabled( en ); + if (!en) { + usercombo->setEnabled( false ); + userbutton->setEnabled( false ); + rstuserbutton->setEnabled( false ); + } else + slotFaceOpts(); +} + +void KDMUsersWidget::slotFaceOpts() +{ + bool en = !rbusronly->isChecked(); + usercombo->setEnabled( en ); + userbutton->setEnabled( en ); + if (en) + slotUserSelected(); + else + rstuserbutton->setEnabled( false ); +} + +void KDMUsersWidget::slotUserSelected() +{ + QString user = usercombo->currentText(); + QImage p; + if (user != m_defaultText && + p.load( m_userPixDir + user + ".face.icon" )) { + rstuserbutton->setEnabled( !getuid() ); + } else { + p.load( m_userPixDir + ".default.face.icon" ); + rstuserbutton->setEnabled( false ); + } + userbutton->setPixmap( p.smoothScale( 48, 48, QImage::ScaleMin ) ); +} + + +void KDMUsersWidget::changeUserPix(const QString &pix) +{ + QString user( usercombo->currentText() ); + if (user == m_defaultText) + { + user = ".default"; + if (KMessageBox::questionYesNo(this, i18n("Save image as default image?"),QString::null,KStdGuiItem::save(),KStdGuiItem::cancel()) + != KMessageBox::Yes) + return; + } + + QImage p( pix ); + if (p.isNull()) { + KMessageBox::sorry( this, + i18n("There was an error loading the image\n" + "%1").arg( pix ) ); + return; + } + + p = p.smoothScale( 48, 48, QImage::ScaleMin ); + QString userpix = m_userPixDir + user + ".face.icon"; + if (!p.save( userpix, "PNG" )) + KMessageBox::sorry(this, + i18n("There was an error saving the image:\n%1") + .arg( userpix ) ); + else + chmod( QFile::encodeName( userpix ), 0644 ); + + slotUserSelected(); +} + +void KDMUsersWidget::slotUserButtonClicked() +{ + KFileDialog dlg(m_notFirst ? QString::null : + KGlobal::dirs()->resourceDirs("data").last() + "kdm/pics/users", + KImageIO::pattern( KImageIO::Reading ), + this, 0, true); + dlg.setOperationMode( KFileDialog::Opening ); + dlg.setCaption( i18n("Choose Image") ); + dlg.setMode( KFile::File | KFile::LocalOnly ); + + KImageFilePreview *ip = new KImageFilePreview( &dlg ); + dlg.setPreviewWidget( ip ); + if (dlg.exec() != QDialog::Accepted) + return; + m_notFirst = true; + + changeUserPix( dlg.selectedFile() ); +} + +void KDMUsersWidget::slotUnsetUserPix() +{ + QFile::remove( m_userPixDir + usercombo->currentText() + ".face.icon" ); + slotUserSelected(); +} + +bool KDMUsersWidget::eventFilter(QObject *, QEvent *e) +{ + if (e->type() == QEvent::DragEnter) { + QDragEnterEvent *ee = (QDragEnterEvent *) e; + ee->accept( KURLDrag::canDecode(ee) ); + return true; + } + + if (e->type() == QEvent::Drop) { + userButtonDropEvent((QDropEvent *) e); + return true; + } + + return false; +} + +KURL *decodeImgDrop(QDropEvent *e, QWidget *wdg); + +void KDMUsersWidget::userButtonDropEvent(QDropEvent *e) +{ + KURL *url = decodeImgDrop(e, this); + if (url) { + QString pixpath; + KIO::NetAccess::download(*url, pixpath, parentWidget()); + changeUserPix( pixpath ); + KIO::NetAccess::removeTempFile(pixpath); + delete url; + } +} + +void KDMUsersWidget::save() +{ + config->setGroup( "X-*-Greeter" ); + + config->writeEntry( "MinShowUID", leminuid->text() ); + config->writeEntry( "MaxShowUID", lemaxuid->text() ); + + config->writeEntry( "UserList", cbshowlist->isChecked() ); + config->writeEntry( "UserCompletion", cbcomplete->isChecked() ); + config->writeEntry( "ShowUsers", + cbinverted->isChecked() ? "NotHidden" : "Selected" ); + config->writeEntry( "SortUsers", cbusrsrt->isChecked() ); + + config->writeEntry( "HiddenUsers", hiddenUsers ); + config->writeEntry( "SelectedUsers", selectedUsers ); + + config->writeEntry( "FaceSource", + rbadmonly->isChecked() ? "AdminOnly" : + rbprefadm->isChecked() ? "PreferAdmin" : + rbprefusr->isChecked() ? "PreferUser" : "UserOnly" ); +} + + +void KDMUsersWidget::updateOptList( QListViewItem *item, QStringList &list ) +{ + if ( !item ) + return; + QCheckListItem *itm = (QCheckListItem *)item; + QStringList::iterator it = list.find( itm->text() ); + if (itm->isOn()) { + if (it == list.end()) + list.append( itm->text() ); + } else { + if (it != list.end()) + list.remove( it ); + } +} + +void KDMUsersWidget::slotUpdateOptIn( QListViewItem *item ) +{ + updateOptList( item, selectedUsers ); +} + +void KDMUsersWidget::slotUpdateOptOut( QListViewItem *item ) +{ + updateOptList( item, hiddenUsers ); +} + +void KDMUsersWidget::slotClearUsers() +{ + optinlv->clear(); + optoutlv->clear(); + usercombo->clear(); + usercombo->insertItem( m_defaultText ); +} + +void KDMUsersWidget::slotAddUsers(const QMap &users) +{ + QMapConstIterator it; + for (it = users.begin(); it != users.end(); ++it) { + const QString *name = &it.key(); + (new QCheckListItem(optinlv, *name, QCheckListItem::CheckBox))-> + setOn(selectedUsers.find(*name) != selectedUsers.end()); + (new QCheckListItem(optoutlv, *name, QCheckListItem::CheckBox))-> + setOn(hiddenUsers.find(*name) != hiddenUsers.end()); + if ((*name)[0] != '@') + usercombo->insertItem(*name); + } + optinlv->sort(); + optoutlv->sort(); + if (usercombo->listBox()) + usercombo->listBox()->sort(); +} + +void KDMUsersWidget::slotDelUsers(const QMap &users) +{ + QMapConstIterator it; + for (it = users.begin(); it != users.end(); ++it) { + const QString *name = &it.key(); + if (usercombo->listBox()) + delete usercombo->listBox()->findItem( *name, ExactMatch | CaseSensitive ); + delete optinlv->findItem( *name, 0 ); + delete optoutlv->findItem( *name, 0 ); + } +} + +void KDMUsersWidget::load() +{ + QString str; + + config->setGroup("X-*-Greeter"); + + selectedUsers = config->readListEntry( "SelectedUsers"); + hiddenUsers = config->readListEntry( "HiddenUsers"); + + leminuid->setText(config->readEntry("MinShowUID", defminuid)); + lemaxuid->setText(config->readEntry("MaxShowUID", defmaxuid)); + + cbshowlist->setChecked( config->readBoolEntry( "UserList", true ) ); + cbcomplete->setChecked( config->readBoolEntry( "UserCompletion", false ) ); + cbinverted->setChecked( config->readEntry( "ShowUsers" ) != "Selected" ); + cbusrsrt->setChecked(config->readBoolEntry("SortUsers", true)); + + QString ps = config->readEntry( "FaceSource" ); + if (ps == QString::fromLatin1("UserOnly")) + rbusronly->setChecked(true); + else if (ps == QString::fromLatin1("PreferUser")) + rbprefusr->setChecked(true); + else if (ps == QString::fromLatin1("PreferAdmin")) + rbprefadm->setChecked(true); + else + rbadmonly->setChecked(true); + + slotUserSelected(); + + slotShowOpts(); + slotFaceOpts(); +} + +void KDMUsersWidget::defaults() +{ + leminuid->setText( defminuid ); + lemaxuid->setText( defmaxuid ); + cbshowlist->setChecked( true ); + cbcomplete->setChecked( false ); + cbinverted->setChecked( true ); + cbusrsrt->setChecked( true ); + rbadmonly->setChecked( true ); + hiddenUsers.clear(); + selectedUsers.clear(); + slotShowOpts(); + slotFaceOpts(); +} + +void KDMUsersWidget::slotMinMaxChanged() +{ + emit setMinMaxUID( leminuid->text().toInt(), lemaxuid->text().toInt() ); +} + +void KDMUsersWidget::slotChanged() +{ + emit changed(true); +} + +#include "kdm-users.moc" diff --git a/kcontrol/kdm/kdm-users.h b/kcontrol/kdm/kdm-users.h new file mode 100644 index 000000000..b54d96ff8 --- /dev/null +++ b/kcontrol/kdm/kdm-users.h @@ -0,0 +1,106 @@ +/* This file is part of the KDE Display Manager Configuration package + Copyright (C) 1997 Thomas Tanghus (tanghus@earthling.net) + + 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 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 __KDMUSERS_H__ +#define __KDMUSERS_H__ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + + +class KDMUsersWidget : public QWidget +{ + Q_OBJECT + +public: + KDMUsersWidget( QWidget *parent = 0, const char *name = 0 ); + + void load(); + void save(); + void defaults(); + void makeReadOnly(); + + bool eventFilter( QObject *o, QEvent *e ); + +public slots: + void slotClearUsers(); + void slotAddUsers( const QMap & ); + void slotDelUsers( const QMap & ); + +signals: + void changed( bool state ); + void setMinMaxUID( int, int ); + +private slots: + void slotMinMaxChanged(); + void slotShowOpts(); + void slotUpdateOptIn( QListViewItem *item ); + void slotUpdateOptOut( QListViewItem *item ); + void slotUserSelected(); + void slotUnsetUserPix(); + void slotFaceOpts(); + void slotUserButtonClicked(); + void slotChanged(); + +private: + void updateOptList( QListViewItem *item, QStringList &list ); + void userButtonDropEvent( QDropEvent *e ); + void changeUserPix( const QString & ); + + QGroupBox *minGroup; // top left + QLineEdit *leminuid, *lemaxuid; + + QButtonGroup *usrGroup; // right below + QCheckBox *cbshowlist, *cbcomplete, *cbinverted, *cbusrsrt; + + QLabel *s_label; // middle + QWidgetStack *wstack; + KListView *optoutlv, *optinlv; + + QButtonGroup *faceGroup; // right + QRadioButton *rbadmonly, *rbprefadm, *rbprefusr, *rbusronly; + + KComboBox *usercombo; // right below + QPushButton *userbutton; + QPushButton *rstuserbutton; + + QString m_userPixDir; + QString m_defaultText; + QStringList hiddenUsers, selectedUsers; + QString defminuid, defmaxuid; + + bool m_notFirst; +}; + +#endif + + diff --git a/kcontrol/kdm/kdm.desktop b/kcontrol/kdm/kdm.desktop new file mode 100644 index 000000000..c3f85d4b7 --- /dev/null +++ b/kcontrol/kdm/kdm.desktop @@ -0,0 +1,243 @@ +[Desktop Entry] +Exec=kcmshell kdm +Icon=kdmconfig +Type=Application +DocPath=kdm/index.html#configuring-kdm + +X-KDE-SubstituteUID=true + +X-KDE-Library=kdm +X-KDE-RootOnly=true + +X-KDE-ParentApp=kcontrol + +Name=Login Manager +Name[af]=Aanteken Bestuurder +Name[ar]=مسيير تسجيل الدخول +Name[az]=İclas Açma İdarəcisi +Name[be]=Кіраўнік уваходу +Name[bg]=Вход в системата +Name[bn]=লগ-ইন ম্যানেজার +Name[br]=Merour ereañ +Name[bs]=Login menadžer +Name[ca]=Gestor d'accés +Name[cs]=Správce přihlášení +Name[csb]=Menedżer logòwaniô +Name[cy]=Rheolydd Mewngofnodi +Name[da]=Login-håndtering +Name[de]=Anmeldungsmanager +Name[el]=Διαχειριστής σύνδεσης +Name[eo]=Salutilo +Name[es]=Gestor de acceso +Name[et]=Sisselogimise haldur +Name[eu]=Saio-hasieraren kudeatzailea +Name[fa]=مدیر ورود +Name[fi]=Sisäänkirjautumisasetukset +Name[fr]=Gestionnaire de connexion +Name[fy]=Oanmeldskerm +Name[ga]=Bainisteoir Logála Isteach +Name[gl]=Xestor de Login +Name[he]=מנהל הכניסה למערכת +Name[hi]=लॉगइन प्रबंधक +Name[hr]=Upravljanje prijavljivanjem +Name[hu]=Bejelentkező felület (KDM) +Name[id]=Manajer Login +Name[is]=Innstimplunarstjóri +Name[it]=Gestione degli accessi +Name[ja]=ログインマネージャ +Name[ka]=შესვლის მენეჯერი +Name[kk]=Жүйеге кіруді басқару +Name[km]=កម្មវិធី​គ្រប់គ្រង​ការ​ចូល +Name[ko]=로그인 관리자 +Name[lo]=ຈັດການລັອກອິນ +Name[lt]=Registravimosi tvarkyklė +Name[lv]=Pieteikšanās Menedžeris +Name[mk]=Менаџер на најави +Name[mn]=Нэвтрэлт удирдагч +Name[ms]=Pengurus Login +Name[mt]=Manager tal-Login +Name[nb]=Innloggingsbehandler +Name[nds]=Anmellen-Schirm +Name[ne]=लगइन प्रबन्धक +Name[nl]=Aanmeldscherm +Name[nn]=Innloggingshandsamar +Name[nso]=Molaodi wa Tseno +Name[oc]=Gestionari de connexion +Name[pa]=ਲਾਗ ਮੈਨੇਜਰ +Name[pl]=Menedżer logowania +Name[pt]=Gestor de Autenticação +Name[pt_BR]=Gerenciador de Login +Name[ro]=Managerul de logare +Name[ru]=Менеджер входа в систему +Name[rw]=Mugenga w'Ifashayinjira +Name[se]=Sisačálihangieđahalli +Name[sk]=Správca prihlásenia +Name[sl]=Upravitelj prijav +Name[sr]=Менаџер пријављивања +Name[sr@Latn]=Menadžer prijavljivanja +Name[sv]=Inloggningshanterare +Name[ta]=நுழைவு மேலாளர் +Name[te]=లాగిన్ అభికర్త +Name[tg]=Мудири вуруд +Name[th]=ตัวจัดการการล็อกอิน +Name[tr]=Giriş Yöneticisi +Name[tt]=Kerü İdäçese +Name[uk]=Менеджер реєстрації +Name[uz]=Kirish boshqaruvchisi +Name[uz@cyrillic]=Кириш бошқарувчиси +Name[ven]=Mulanguli wa u loga +Name[vi]=Trình quản lí Đăng nhập +Name[wa]=Manaedjeu d' elodjaedje +Name[xh]=Umphathi Wegama elithile +Name[zh_CN]=登录管理器 +Name[zh_TW]=登錄管理程式 +Name[zu]=Imenenja yokungena ngaphakathi + +Comment=Configure the login manager (KDM) +Comment[af]=Konfigureer die aanteken bestuurder (Kdm) +Comment[ar]=إعداد مسيير الدخول (KDM) +Comment[az]=Giriş İdarəçisi (KDM) Qurğuları +Comment[be]=Настаўленні кіраўніка ўваходу (KDM) +Comment[bg]=Настройване на графичната системата за вход +Comment[bn]=লগ-ইন ম্যানেজার কনফিগার করুন +Comment[br]=Kefluniañ ar merour ereañ (KDM) +Comment[bs]=Podesite menadžer prijavom (KDM) +Comment[ca]=Configura el gestor d'accés (KDM) +Comment[cs]=Nastavení správce přihlášení (KDM) +Comment[csb]=Kònfigùracëjô menedżera logòwaniô (KDM) +Comment[cy]=Ffurfweddu y rheolydd mewngofnodi (KDM) +Comment[da]=Indstil indlogningshåndtering (KDM) +Comment[de]=Anmeldungsmanager KDM einrichten +Comment[el]=Ρυθμίστε το διαχειριστή σύνδεσης (KDM) +Comment[eo]=Agordu la salutadminstrilon (KDM) +Comment[es]=Configura el gestor de acceso (KDM) +Comment[et]=Sisselogimise halduri seadistamine (KDM) +Comment[eu]=Konfiguratu saio-hasieraren kudeatzailea (KDM) +Comment[fa]=پیکربندی مدیر ورود (KDM) +Comment[fi]=Sisäänkirjautumisasetukset +Comment[fr]=Configuration du gestionnaire de connexion (KDM) +Comment[fy]=Hjir kinne jo it oanmeldskerm ynstelle (KDM) +Comment[ga]=Cumraigh an bainisteoir logála isteach (KDM) +Comment[gl]=Configurar o xestor de início (KDM) +Comment[he]=שינוי הגדרות מנהל הכניסה למערכת (KDM) +Comment[hi]=लॉगइन प्रबंधक कॉन्फ़िगर करें (केडीएम) +Comment[hr]=Konfiguriranje upravljanja prijavljivanja (KDM) +Comment[hu]=A KDE grafikus bejelentkező felületének beállításai +Comment[is]=Stilla innstimplunarstjórann (KDM) +Comment[it]=Configurazione della gestione degli accessi (KDM) +Comment[ja]=ログインマネージャ (KDM) の設定 +Comment[ka]=შევლის მენეჯერის კონფიგურირება (KDM) +Comment[kk]=Жүйеге кіруді басқаруын (KDM) баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​កម្មវិធី​គ្រប់គ្រង​ការ​ចូល (KDM) +Comment[ko]=로그인 관리자 KDM 설정 +Comment[lo]=ປັບແຕ່ງປລັກອິນແລະການເຊື່ອມ ຕໍ່ສຳລັບລະບົບ KDB +Comment[lt]=Konfigūruoti registravimos tvarkyklę (KDM) +Comment[lv]=Konfigure pieteiksanās menedžeri KDM +Comment[mk]=Конфигурирајте го менаџерот на најави (KDM) +Comment[mn]=Нэвтрэлт удирдагч KDM тохируулах +Comment[ms]=Konfigur pengurus login (KDM) +Comment[mt]=Ikkonfigura l-manager tal-logins (KDM) +Comment[nb]=Tilpass innlogin­gsbehandler (KDM) +Comment[nds]=Den Anmellen-Schirm instellen (KDM) +Comment[ne]=लगइन प्रबन्धक (KDM) कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u het aanmeldscherm (KDM) instellen +Comment[nn]=Set opp innloggingshandsamaren (KDM) +Comment[nso]=Beakanya molaodoi wa tseno (KDM) +Comment[pa]=ਲਾਗਆਨ ਮੈਨੇਜਰ ਸੰਰਚਨਾ(KDM) +Comment[pl]=Konfiguracja menedżera logowania (KDM) +Comment[pt]=Configuração do gestor de autenticação (KDM) +Comment[pt_BR]=Configura o gerenciador de login (KDM) +Comment[ro]=Configurează managerul de logare grafică (KDM) +Comment[ru]=Настройка менеджера входа в систему (KDM) +Comment[rw]=Kuboneza mugenga w'ifashayinjira (KDM) +Comment[se]=Heivet sisačálihangieđahalli (KDM) +Comment[sk]=Nastavenie správcu prihlásenia (KDM) +Comment[sl]=Nastavitve upravitelja prijav (KDM) +Comment[sr]=Подешавање менаџера за пријављивање (KDM) +Comment[sr@Latn]=Podešavanje menadžera za prijavljivanje (KDM) +Comment[sv]=Anpassa inloggningshanteraren (KDM) +Comment[ta]=புகுபதிகை மேலாளரை அமை (KDM) +Comment[tg]=Танзими мудири вуруд (KDM) +Comment[th]=ปรับแต่งเครื่องมือจัดการการล็อกอิน (KDM) +Comment[tr]=Giriş yöneticisini yapılandır (KDM) +Comment[tt]=Kerü idäräçen caylaw urını (KDM) +Comment[uk]=Налаштування менеджера реєстрації (KDM) +Comment[uz]=Tizimga kirish boshqaruvchisini (KDM) moslash +Comment[uz@cyrillic]=Тизимга кириш бошқарувчисини (KDM) мослаш +Comment[ven]=Ni nga dzudzanya mulanguli wau loga (KDM) +Comment[vi]=Cấu hình trình đăng nhập (KDM) +Comment[wa]=Apontyî l' manaedjeu d' elodjaedje (KDM) +Comment[xh]=Qwalasela umphathi wegama elithile (KDM) +Comment[zh_CN]=配置登录管理器(KDM) +Comment[zh_TW]=設定登入管理程式 (KDM) +Comment[zu]=Hlanganisela imenenja yokungena ngaphakathi (KDM) + +Keywords=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart +Keywords[ar]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,مدير العرض,المستخدمون مستخدمون,المستخدمين,مستخدمين,دخول,الدخول,تحية,التحية,اللغة,المظهر, البلد,الخطوط,الخط,خطوط,خط,خلفية,ورق حائط,جلسات,اغلاق,اعادة تشغيل +Keywords[az]=kdm,görünüş idarəçi,xdm,istifadəçilər,iclas açma,qarşılama,loqo,tərzlər,dil,ölkə,yazı növləri,arxa plan,divar kağızları,iclaslar,qapat,təkrar başlat +Keywords[be]=кіраўнік дысплея,кіраўнік уваходу,карыстальнікі,уваход,запрашэнне,лагатып,стылі,стыль,мова,краіна,шрыфты,фон,шпалеры,сесіі,сесія,выключэнне,перазагрузка,kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart +Keywords[bg]=графична, система, вход, влизане, включване, потребител, kdm, display manager, xdm, users, login, greeting, Logo, styles, language, country, fonts, background, wallpapers, sessions, shutdown, restart +Keywords[ca]=kdm,administrador de la pantalla,xdm,usuaris,accés,salutació,Logo,estils,llengua,país,lletres,fons,tapissos,sessions,apagar,reiniciar +Keywords[cs]=kdm,Správce obrazovky,xdm,Uživatelé,Přihlášení,Uvítání,Logo,Styly,Jazyk,Země,Písma,pozadí,Tapety,Relace,Sezení,Vypnutí,Restart +Keywords[csb]=kdm,menedżer ekranu,xdm,brëkòwnicë,logòwanié,przëwitanié,Logò,sztéle,jãzëk,kraj,fòntë,spódk,tapetë,spòdlë,sesëje,zamkniãce systemë,resztart,zôczãce robòtë +Keywords[cy]=kdm,rheolydd y dangosydd,xdm,defnyddwyr,mewngofnodi,cyfarchiad,Logo,arddulliau,iaith,gwlad,ffontiau,cefndir,papurau wal,sesiynau,cau,ailgychwyn +Keywords[da]=kdm,skærmhåndtering,xdm,brugere,login,hilsen,Logo,stil, sprog,land,skrifttyper,baggrund,tapeter,sessioner,luk ned,genstart +Keywords[de]=Kdm,Display Manager,Xdm,Benutzer,Login,Logo,Stile,Sprachen,Länder,Schriften,Hintergründe,Hintergrundbilder,Beenden,Neustart +Keywords[el]=kdm,διαχειριστής οθόνης,xdm,χρήστες,σύνδεση,χαιρετισμός,Λογότυπο,στυλ,γλώσσα,χώρα,γραμματοσειρές,φόντο,ταπετσαρίες,συνεδρίες,τερματισμός,επανεκκίνηση +Keywords[eo]=kdm,ekrano,,xdm,uzantoj,saluto,emblemo,stilo,lingvo,lando,tiparo,fono,tapeto,seanco,adaiaŭo,relanĉo +Keywords[es]=kdm,gestor de pantalla,xdm,usuarios,entrada,acceso,saludo,Logo,estilos,idioma,país,tipos de letra,fondo,tapices,sesiones,apagar,reiniciar +Keywords[et]=kdm,ekraanihaldur,xdm,kasutajad,sisselogimine,tervitus,logo,stiil,keel,riik,fondid,taust,taustapilt,seansid,töö lõpetamine,taaskäivitamine +Keywords[eu]=kdm,pantaila kudeatzailea,xdm,erabiltzaileak,Saio hasiera,agurra,Logoa,estiloak,hizkuntza, herrialdea,letra-tipoak,atzeko planoa,horma-irudiak,saioak,itzali,berrabiarazi +Keywords[fa]=kdm، مدیر نمایش، xdm، کاربران، ورود، تبریک، آرمِ، سبک، زبان، کشور، قلمها، زمینه، کاغذهای دیواری، نشستها، تعطیل، بازآغازی +Keywords[fi]=kdm,näytönhallinta ,xdm,käyttäjät,sisäänkirjautuminen,tervehdys,Logo,tyylit,kieli,maa,kirjasimet,tausta,istunnot,sammutus,uudelleenkäynnistys +Keywords[fr]=kdm,gestionnaire d'affichage,xdm,utilisateurs,login,connexion,bienvenue,message de bienvenue,Logo,styles,langue,pays,style,police,fond d'écran,papier peint,session,arrêt,logout,redémarrage,reboot +Keywords[fy]=kdm,display manager,xdm,users,login,begroeting,oanmelde,brûkers,Oanmeldbehearder,logo,stylen,taal,language,country,lân,fonts,lettertypen,eftergrûn,wallpapers,behang,sesjes,shutdown,restart,ôfslute,opnij begjinne,oanmelde +Keywords[ga]=kdm,bainisteoir scáileáin,xdm,úsáideoirí,logáil isteach,fáilte,Lógó,stíleanna,teanga,tír,clónna,clófhoirne,cúlra,cúlbhrait,seisiúin,múchadh,atosú +Keywords[gl]=kdm,xestor de entrada,xdm,usuarios,identificación,Logo,estilos,lingua,país,fontes,fondo,papeis tapiz,sesións,apagado,reinício +Keywords[he]=משתמשים,כניסה למערכת,כניסה,לוגו,סגנונות,שפה,מדינה,גופנים,רקע,טפטים,הפעלות,כיבוי,הפעלה,מחדש,מנהל,תצוגה,display,manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart +Keywords[hi]=केडीएम,प्रकटन प्रबंधक,एक्स-डीएम,उपयोक्ता,लॉगइन,शुभकामनाएँ,लोगो,पृष्ठभूमि,वालपेपर्स,सत्र,बन्द, फिर से चालू +Keywords[hr]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,upravljanje zaslona,korisnici,prijava,pozdrav,stilovi,jezik,država,zemlja,fontovi,pozadina,pozadina radne površine,sesije,gašenje,ponovno pokretanje +Keywords[hu]=kdm,képernyőkezelő,xdm,felhasználók,bejelentkezés,üdvözlés,embléma,stílusok,nyelv,ország,betűtípusok,háttér,tapéták,munkafolyamatok,leállítás,újraindítás +Keywords[is]=kdm,skjár,gluggastjóri,innskráning,innstimplun,snið,tungumál,land,letur,bakgrunnur,bakgrunnar,veggfóður,setur,slökkva,endurræsa +Keywords[it]=kdm,display manager,gestione degli utenti,xdm,utenti,login,accesso,benvenuto,logo,stile,lingua,stato,paese,tipi di carattere,sfondo,immagine di sfondo,sessioni,riavvio,spegnimento,gestione degli accessi +Keywords[ja]=kdm,ディスプレイマネージャ,xdm,ユーザ,ログイン,あいさつ,ロゴ,スタイル,言語,国,フォント,背景,壁紙,セッション,シャットダウン,再起動 +Keywords[km]=kdm,កម្មវិធី​គ្រប់គ្រង​ការ​បង្ហាញ,xdm,អ្នក​ប្រើ,ចូល,ស្វាគមន៍,រូបសញ្ញា,រចនាប័ទ្ម,ភាសា,ប្រទេស,ពុម្ពអក្សរ,ផ្ទៃ​ខាង​ក្រោយ,ក្រដាស​បិទ​ជញ្ជាំង,សម័យ,បិទ,ចាប់ផ្ដើម​ឡើង​វិញ +Keywords[lt]=kdm,display manager,ekrano tvarkyklė,xdm,users,naudotojai,login,registracija,greeting,pasveikinimas,Logo, styles,stiliai,language,country,fonts,background,wallpapers,sessions, shutdown,restart +Keywords[lv]=kdm,displeja menedžeris,xdm,lietotāji,pieteikšanās,apsveikums,Logo,stili,valoda,valsts,fonti,fons,tapetes,sesijas,nošaut,pārstartēt +Keywords[mk]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,менаџер на екран,корисници,најава,поздрав,Лого,стилови,јазик,земја,фонтови,подлога,позадина,сесии,исклучување,рестартирање +Keywords[mn]=Kdm,Display Manager,Xdm,Хэрэглэгч,Login,Logo,Хэлбэр,Хэл,Улс,Бичиг,Дэвсгэр,Дэвсгэр зураг,Дуусгах,Шинээр эхлүүлэх +Keywords[mt]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,merħba,lingwa,pajjiż,sfond,itfi,irristartja +Keywords[nb]=kdm,skjermbehandler,xdm,brukere,innlogging,velkomst,logo,stiler,språk,land,skrifttyper,bakgrunn,bakgrunnsbilde,økter,skru av,slå av,omstart +Keywords[nds]=kdm,Startschirm,xdm,Bruker,anmellen,greeting,Logo,Stilen,Spraak,Land,Schriftoorden,Achtergrund,Tapeten,Törns,Utmaken,Nieg starten +Keywords[ne]=kdm, प्रदर्शन प्रबन्धक, xdm, प्रयोगकर्ताहरू, लगइन, अभिवादन, परिचायक चिन्ह, शैलीहरू, भाषा, देश, फन्टहरू, पृष्ठभूमि,वालपेपरहरू, सत्र, बन्द गर्नुहोस्, फेरि सुरु गर्नुहोस् +Keywords[nl]=kdm,display manager,xdm,users,login,begroeting,inloggen,gebruikers,loginbeheerder,logo,stijlen,taal,language,country,land,fonts,lettertypen,achtergrond,wallpapers,behang,sessies,shutdown,restart,afsluiten,herstarten,aanmelden,opstarten +Keywords[nn]=kdm,xdm,brukarar,innlogging,helsing,logo,stil,språk,land,skrifttypar,bakgrunn,bakgrunnsbilete,økt,avslutt,slå av,omstart +Keywords[nso]=kdm,molaodi wa pontsho,xdm,badirisi,tseno,madume,Logo,mekgwa,leleme,naga,difonto,bokamorago,di-wallpaper,ditiragalo,timo,thomaleswa +Keywords[pa]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart, ਲੋਗੋ, ਭਾਸ਼ਾ, ਦੇਸ਼, ਫੋਂਟ, ਲਾਗਿੰਨ, ਉਪਭੋਗੀ,ਸ਼ੈਸ਼ਨ +Keywords[pl]=kdm,menedżer ekranu,xdm,użytkownicy,logowanie,powitanie,Logo,style,jezyk,kraj,czcionki,tło,tapety,sesje,zamknięcie systemu,restart,rozpoczęcie pracy +Keywords[pt]=kdm,gestor de 'logins',xdm,utilizadores,saudação,logótipo,estilos,língua,país,tipos de letra,fundo,papéis de parede,sessões,terminar,reiniciar +Keywords[pt_BR]=kdm,gerenciador de tela, xdm,usuários,login,saudação,Logo,estilos,linguagem,país,fontes, papéis de parede,sessões,desligar,reiniciar +Keywords[ro]=kdm,manager de ecran,xdm,utilizatori,logare,întîmpinare,logo,stiluri,limbaj,țară,fonturi,fundal,imagini de fundal,sesiuni,oprire,restartare +Keywords[ru]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,перезагрузка,сеанс,шрифты,страна,фон,стили,обои +Keywords[rw]=kdm,kwerekana umuyobozi,xdm,abakoresha,ifashayinjira,gusuhuza,ikirango,imisusire,ururimi,igihugu,imyandikire,mbuganyuma,impapurorukuta,imikoro,kuzimya,kongera gutangiza +Keywords[se]=kdm,xdm,geavaheaddjit,sisačáliheapmi,dearvvuođat,logo,stiila,giella,riika, fonttat,duogáš,duogášgovva,bargovuorut,heaittihit,časkit eret,ođđasit álggahit +Keywords[sk]=kdm,správca obrazovky,Login manažér,správca prihlásenia,xdm,používatelia,prihlásenie,login,privítanie,logo,štýly,jazyk,krajina,pozadie,tapety,sedenia,vypnutie,reset,reštart +Keywords[sl]=kdm,upravitelj zaslona,upravljalnik,xdm,uporabniki,prijava,login,pozdrav,logo,slogi,jezik,država,pisave,ozadje,tapete,seje,ugasnitev,vnovičen zagon +Keywords[sr]=kdm,display manager,xdm,users,login,greeting,Лого,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,менаџер,пријављивање,стил,језик,земља,фонтови,позадина,сесије,гашење +Keywords[sr@Latn]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,menadžer,prijavljivanje,stil,jezik,zemlja,fontovi,pozadina,sesije,gašenje +Keywords[sv]=kdm,display manager,xdm,användare,inloggning,välkomsttext,Logo,stilar,språk,land,teckensnitt,bakgrund,skrivbordsunderlägg,sessioner,stäng av,starta om +Keywords[ta]=கேடிஎம்,காட்சி மேலாளர்,xdm,பயன்படுத்துபவர்,உள்நுழை,வாழ்த்து,சின்னம்,பாணிகள்,மொழி,நாடு,எழுத்துருக்கள்,பின்னணி,வால்பேப்பர்கள்,பகுதிகள்,முடித்தல்,தொடங்குதல் +Keywords[th]=kdm,ตัวจัดการจอแสดงผล,xdm,ผู้ใช้,ล็อกอิน, ทักทาย,โลโก้,รูปแบบ,ภาษา,ประเทศ,แบบอักษร,พื้นหลัง, วอลล์เปเปอร์,วาระ,ปิด,เริ่มการทำงานใหม่ +Keywords[tr]=kdm,görüntü yönetici,xdm,kullanıcılar,oturum açma,karşılama,logo,stiller,dil,ülke,yazı tipleri,artalan,duvar kağıtları,oturumlar,kapat,tekrar başlat +Keywords[uk]=kdm,менеджер дисплеїв,xdm,користувачі,реєстрація,привітання,логотип,стилі,мова,країна,шрифти,тло,шпалери,сеанси,вимикання,перезапуск +Keywords[uz]=kdm,kirish boshqaruvchisi,xdm,foydalanuvchilar,kirish,salomlashish,Belgi,uslublar,til,davlat,shriftlar,orqa fon,seanslar,oʻchirish,oʻchirib-yoqish +Keywords[uz@cyrillic]=kdm,кириш бошқарувчиси,xdm,фойдаланувчилар,кириш,саломлашиш,Белги,услублар,тил,давлат,шрифтлар,орқа фон,сеанслар,ўчириш,ўчириб-ёқиш +Keywords[ven]=kdm,mulanguli wau vhonisa,xdm,vhashumisi,u loga,dzindumeliso,logo,zwitaela,luambo,shango,fontu,murahu,mabammbiri a luvhondoni,tshitenwa,thutha,thomolosa +Keywords[vi]=kdm,quản lý hiển thị,xdm,người dùng,đăng nhập,chào hỏi,Biểu trưng,kiểu,ngôn ngữ,quốc gia,phông chữ,nền,ảnh nền,phiên đăng nhập,tắt máy,khởi động lại +Keywords[wa]=kdm,manaedjeu d' håynaedje,xdm,uzeus,login,wilikom,greeting,Logo,styles,stîles,lingaedje,payi,fontes,fond,fond del waitroûle,sessions,distinde,dislodjî,elodjî,s' elodjî,renonder +Keywords[xh]=kdm,umphathi womboniso,xdm,abasebenzisi,igama elithile,umbuliso,ilogo,iintlobo,ulwimi,ilizwe,ubungakanani bamagama, imvelaphi,amaphepha odonga,iintlanganiso,vala,qala kwakhona +Keywords[zh_CN]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,显示管理器,用户,登录,欢迎辞,标志,风格,语言,国家,字体,背景,墙纸,会话,关机,重启动 +Keywords[zh_TW]=kdm,display manager,xdm,users,login,greeting,Logo,styles,language,country,fonts,background,wallpapers,sessions,shutdown,restart,顯示管理程式,使用者,登入,歡迎,風格,語言,國家,字型,背景,底圖,工作階段,關機,重新啟動 +Keywords[zu]=kdm,Imenenja yokuveza,xdm,abasebenzisi,ukungena ngaphakathi,isibingelelo,Isiqubulo,izitayela,ulimi,izwe,izinhlobo zamagama, inkundla yangemuva,emaphepha ezindonga,iziqendu,vala,phinda uqale + +Categories=Qt;KDE;X-KDE-settings-system; diff --git a/kcontrol/kdm/main.cpp b/kcontrol/kdm/main.cpp new file mode 100644 index 000000000..12c356e5c --- /dev/null +++ b/kcontrol/kdm/main.cpp @@ -0,0 +1,336 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include + +#include +#include +#include +#include +#include + +#include "kdm-appear.h" +#include "kdm-font.h" +#include "kdm-users.h" +#include "kdm-shut.h" +#include "kdm-conv.h" + +#include "main.h" +#include "background.h" + +#include +#include +#include +#include +#include +#include + +typedef KGenericFactory KDMFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kdm, KDMFactory("kdmconfig") ) + +KURL *decodeImgDrop(QDropEvent *e, QWidget *wdg) +{ + KURL::List uris; + + if (KURLDrag::decode(e, uris) && (uris.count() > 0)) { + KURL *url = new KURL(uris.first()); + + KImageIO::registerFormats(); + if( KImageIO::canRead(KImageIO::type(url->fileName())) ) + return url; + + QStringList qs = QStringList::split('\n', KImageIO::pattern()); + qs.remove(qs.begin()); + + QString msg = i18n( "%1 " + "does not appear to be an image file.\n" + "Please use files with these extensions:\n" + "%2") + .arg(url->fileName()) + .arg(qs.join("\n")); + KMessageBox::sorry( wdg, msg); + delete url; + } + return 0; +} + +KSimpleConfig *config; + +KDModule::KDModule(QWidget *parent, const char *name, const QStringList &) + : KCModule(KDMFactory::instance(), parent, name) + , minshowuid(0) + , maxshowuid(0) + , updateOK(false) +{ + KAboutData *about = + new KAboutData(I18N_NOOP("kcmkdm"), I18N_NOOP("KDE Login Manager Config Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1996 - 2005 The KDM Authors")); + + about->addAuthor("Thomas Tanghus", I18N_NOOP("Original author"), "tanghus@earthling.net"); + about->addAuthor("Steffen Hansen", 0, "hansen@kde.org"); + about->addAuthor("Oswald Buddenhagen", I18N_NOOP("Current maintainer"), "ossi@kde.org"); + + setQuickHelp( i18n( "

Login Manager

In this module you can configure the " + "various aspects of the KDE Login Manager. This includes " + "the look and feel as well as the users that can be " + "selected for login. Note that you can only make changes " + "if you run the module with superuser rights. If you have not started the KDE " + "Control Center with superuser rights (which is absolutely the right thing to " + "do, by the way), click on the Modify button to acquire " + "superuser rights. You will be asked for the superuser password." + "

Appearance

On this tab page, you can configure how " + "the Login Manager should look, which language it should use, and which " + "GUI style it should use. The language settings made here have no influence on " + "the user's language settings." + "

Font

Here you can choose the fonts that the Login Manager should use " + "for various purposes like greetings and user names. " + "

Background

If you want to set a special background for the login " + "screen, this is where to do it." + "

Shutdown

Here you can specify who is allowed to shutdown/reboot the machine " + "and whether a boot manager should be used." + "

Users

On this tab page, you can select which users the Login Manager " + "will offer you for logging in." + "

Convenience

Here you can specify a user to be logged in automatically, " + "users not needing to provide a password to log in, and other convenience features.
" + "Note, that these settings are security holes by their nature, so use them very carefully.")); + + setAboutData( about ); + + setlocale( LC_COLLATE, "C" ); + + KGlobal::locale()->insertCatalogue("kcmbackground"); + + QStringList sl; + QMap tgmap; + QMap::Iterator tgmapi; + QMap::ConstIterator tgmapci; + QMap >::Iterator umapi; + + struct passwd *ps; + for (setpwent(); (ps = getpwent()); ) { + QString un( QFile::decodeName( ps->pw_name ) ); + if (usermap.find( un ) == usermap.end()) { + usermap.insert( un, QPair( ps->pw_uid, sl ) ); + if ((tgmapi = tgmap.find( ps->pw_gid )) != tgmap.end()) + (*tgmapi).append( un ); + else + tgmap[ps->pw_gid] = un; + } + } + endpwent(); + + struct group *grp; + for (setgrent(); (grp = getgrent()); ) { + QString gn( QFile::decodeName( grp->gr_name ) ); + bool delme = false; + if ((tgmapi = tgmap.find( grp->gr_gid )) != tgmap.end()) { + if ((*tgmapi).count() == 1 && (*tgmapi).first() == gn) + delme = true; + else + for (QStringList::ConstIterator it = (*tgmapi).begin(); + it != (*tgmapi).end(); ++it) + usermap[*it].second.append( gn ); + tgmap.remove( tgmapi ); + } + if (!*grp->gr_mem || + (delme && !grp->gr_mem[1] && gn == QFile::decodeName( *grp->gr_mem ))) + continue; + do { + QString un( QFile::decodeName( *grp->gr_mem ) ); + if ((umapi = usermap.find( un )) != usermap.end()) { + if ((*umapi).second.find( gn ) == (*umapi).second.end()) + (*umapi).second.append( gn ); + } else + kdWarning() << "group '" << gn << "' contains unknown user '" << un << "'" << endl; + } while (*++grp->gr_mem); + } + endgrent(); + + for (tgmapci = tgmap.begin(); tgmapci != tgmap.end(); ++tgmapci) + kdWarning() << "user(s) '" << tgmapci.data().join(",") + << "' have unknown GID " << tgmapci.key() << endl; + + config = new KSimpleConfig( QString::fromLatin1( KDE_CONFDIR "/kdm/kdmrc" )); + + QVBoxLayout *top = new QVBoxLayout(this); + tab = new QTabWidget(this); + + // ***** + // _don't_ add a theme configurator until the theming engine is _really_ done!! + // ***** + + appearance = new KDMAppearanceWidget(this); + tab->addTab(appearance, i18n("A&ppearance")); + connect(appearance, SIGNAL(changed(bool)), SIGNAL( changed(bool))); + + font = new KDMFontWidget(this); + tab->addTab(font, i18n("&Font")); + connect(font, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + + background = new KBackground(this); + tab->addTab(background, i18n("&Background")); + connect(background, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + + sessions = new KDMSessionsWidget(this); + tab->addTab(sessions, i18n("&Shutdown")); + connect(sessions, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + + users = new KDMUsersWidget(this, 0); + tab->addTab(users, i18n("&Users")); + connect(users, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + connect(users, SIGNAL(setMinMaxUID(int,int)), SLOT(slotMinMaxUID(int,int))); + connect(this, SIGNAL(addUsers(const QMap &)), users, SLOT(slotAddUsers(const QMap &))); + connect(this, SIGNAL(delUsers(const QMap &)), users, SLOT(slotDelUsers(const QMap &))); + connect(this, SIGNAL(clearUsers()), users, SLOT(slotClearUsers())); + + convenience = new KDMConvenienceWidget(this, 0); + tab->addTab(convenience, i18n("Con&venience")); + connect(convenience, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + connect(this, SIGNAL(addUsers(const QMap &)), convenience, SLOT(slotAddUsers(const QMap &))); + connect(this, SIGNAL(delUsers(const QMap &)), convenience, SLOT(slotDelUsers(const QMap &))); + connect(this, SIGNAL(clearUsers()), convenience, SLOT(slotClearUsers())); + + load(); + if (getuid() != 0 || !config->checkConfigFilesWritable( true )) { + appearance->makeReadOnly(); + font->makeReadOnly(); + background->makeReadOnly(); + users->makeReadOnly(); + sessions->makeReadOnly(); + convenience->makeReadOnly(); + } + top->addWidget(tab); +} + +KDModule::~KDModule() +{ + delete config; +} + +void KDModule::load() +{ + appearance->load(); + font->load(); + background->load(); + users->load(); + sessions->load(); + convenience->load(); + propagateUsers(); +} + + +void KDModule::save() +{ + appearance->save(); + font->save(); + background->save(); + users->save(); + sessions->save(); + convenience->save(); + config->sync(); +} + + +void KDModule::defaults() +{ + if ( getuid() == 0 ) + { + appearance->defaults(); + font->defaults(); + background->defaults(); + users->defaults(); + sessions->defaults(); + convenience->defaults(); + propagateUsers(); + } +} + +void KDModule::propagateUsers() +{ + groupmap.clear(); + emit clearUsers(); + QMap lusers; + QMapConstIterator > it; + QStringList::ConstIterator jt; + QMap::Iterator gmapi; + for (it = usermap.begin(); it != usermap.end(); ++it) { + int uid = it.data().first; + if (!uid || (uid >= minshowuid && uid <= maxshowuid)) { + lusers[it.key()] = uid; + for (jt = it.data().second.begin(); jt != it.data().second.end(); ++jt) + if ((gmapi = groupmap.find( *jt )) == groupmap.end()) { + groupmap[*jt] = 1; + lusers['@' + *jt] = -uid; + } else + (*gmapi)++; + } + } + emit addUsers(lusers); + updateOK = true; +} + +void KDModule::slotMinMaxUID(int min, int max) +{ + if (updateOK) { + QMap alusers, dlusers; + QMapConstIterator > it; + QStringList::ConstIterator jt; + QMap::Iterator gmapi; + for (it = usermap.begin(); it != usermap.end(); ++it) { + int uid = it.data().first; + if (!uid) continue; + if ((uid >= minshowuid && uid <= maxshowuid) && + !(uid >= min && uid <= max)) { + dlusers[it.key()] = uid; + for (jt = it.data().second.begin(); + jt != it.data().second.end(); ++jt) { + gmapi = groupmap.find( *jt ); + if (!--(*gmapi)) { + groupmap.remove( gmapi ); + dlusers['@' + *jt] = -uid; + } + } + } else + if ((uid >= min && uid <= max) && + !(uid >= minshowuid && uid <= maxshowuid)) { + alusers[it.key()] = uid; + for (jt = it.data().second.begin(); + jt != it.data().second.end(); ++jt) + if ((gmapi = groupmap.find( *jt )) == groupmap.end()) { + groupmap[*jt] = 1; + alusers['@' + *jt] = -uid; + } else + (*gmapi)++; + } + } + emit delUsers(dlusers); + emit addUsers(alusers); + } + minshowuid = min; + maxshowuid = max; +} + +#include "main.moc" diff --git a/kcontrol/kdm/main.h b/kcontrol/kdm/main.h new file mode 100644 index 000000000..5e8da66b8 --- /dev/null +++ b/kcontrol/kdm/main.h @@ -0,0 +1,83 @@ +/* + * main.h + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __kdm_main_h +#define __kdm_main_h + +#include +#include + +#include + +class KDMAppearanceWidget; +class KDMFontWidget; +class KDMSessionsWidget; +class KDMUsersWidget; +class KDMConvenienceWidget; +class KBackground; + +class KDModule : public KCModule +{ + Q_OBJECT + +public: + + KDModule(QWidget *parent, const char *name, const QStringList &); + ~KDModule(); + + void load(); + void save(); + void defaults(); + +public slots: + + void slotMinMaxUID(int min, int max); + +signals: + + void clearUsers(); + void addUsers(const QMap &); + void delUsers(const QMap &); + +private: + + QTabWidget *tab; + + KDMAppearanceWidget *appearance; + KBackground *background; + KDMFontWidget *font; + KDMSessionsWidget *sessions; + KDMUsersWidget *users; + KDMConvenienceWidget *convenience; + + QMap > usermap; + QMap groupmap; + int minshowuid, maxshowuid; + bool updateOK; + + void propagateUsers(); + +}; + +#endif + diff --git a/kcontrol/keys/ChangeLog b/kcontrol/keys/ChangeLog new file mode 100644 index 000000000..b8ef570df --- /dev/null +++ b/kcontrol/keys/ChangeLog @@ -0,0 +1,26 @@ +1999-08-19 Duncan Haldane + * removed left-over commented out code from change + decribed below, and adjusted help doc names to + index-1.html + +1999-02-28 Duncan Haldane + * commented out those unnecessary debug calls. + in keyconfig.cpp + +1998-12-19 Duncan Haldane + * Converted global.cpp, global.h to keyconfig.cpp, + keyconfig.h, that can now be used to configure both + the standard keys and the global keys + in the same sophisticated manner as + global.cpp did for just the global keys. + * converted main.cpp to use keyconfig.cpp rather than + global.cpp and standard.cpp for standard and globall + key configuration. KGlobalConfig and KStdConfig disappear. + (KGlobalConfig is renamed to KKeyConfig) + * appropriate changes to Makefile.am. + * standard key binding are now #include'd from + stdbindings.cpp + * standard.cpp, standard.h are left here for now. + The entries that used to use them in main.cpp and + Makefile.am are just commented out for now. + \ No newline at end of file diff --git a/kcontrol/keys/Makefile.am b/kcontrol/keys/Makefile.am new file mode 100644 index 000000000..ec706a7b1 --- /dev/null +++ b/kcontrol/keys/Makefile.am @@ -0,0 +1,22 @@ +kde_module_LTLIBRARIES = kcm_keys.la + +kcm_keys_la_SOURCES = shortcuts.cpp modifiers.cpp main.cpp khotkeys.cpp treeview.cpp commandShortcuts.cpp +kcm_keys_la_LIBADD = -lkdeui -lkio +kcm_keys_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +messages: + customkeys=`grep "^.include .\.\." keyconfig.cpp | sed -e "s#.*\"\(.*\)\"#\1#"` ;\ + $(XGETTEXT) $(kcm_keys_la_SOURCES) $$customkeys -o $(podir)/kcmkeys.pot + +update_DATA = kaccel.upd +update_SCRIPTS = convertShortcuts.pl +updatedir = $(kde_datadir)/kconf_update + +xdg_apps_DATA = keys.desktop + +scheme_DATA = wm3.kksrc kde3.kksrc kde4.kksrc win3.kksrc win4.kksrc mac4.kksrc unix3.kksrc +schemedir = $(kde_datadir)/kcmkeys diff --git a/kcontrol/keys/README b/kcontrol/keys/README new file mode 100644 index 000000000..14e09f73e --- /dev/null +++ b/kcontrol/keys/README @@ -0,0 +1,7 @@ +CHANGES V0.2 +- Global keys stored by default in ~/.kde/share/config/kdeglobals + [Global Keys] group +- KKeyDialog checks new key choices against exising bindings for the widget +and against entries in .kderc [Global Keys] +- kcmkeys now has two standard kcontrol pages - one for standard desktop +accelerators and one for global keybindings. diff --git a/kcontrol/keys/commandShortcuts.cpp b/kcontrol/keys/commandShortcuts.cpp new file mode 100644 index 000000000..446cd24ac --- /dev/null +++ b/kcontrol/keys/commandShortcuts.cpp @@ -0,0 +1,243 @@ +/* + * commandShortcuts.h + * + * Copyright (c) 2003 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "commandShortcuts.h" +#include "treeview.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +static bool treeFilled = false; +CommandShortcutsModule::CommandShortcutsModule( QWidget *parent, const char *name ) +: QWidget( parent, name ) +{ + treeFilled = false; + initGUI(); +} + +CommandShortcutsModule::~CommandShortcutsModule() +{ +} + +// Called when [Reset] is pressed +void CommandShortcutsModule::load() +{ + defaults(); +} + +void CommandShortcutsModule::save() +{ + for (treeItemListIterator it(m_changedItems); it.current(); ++it) + { + KHotKeys::changeMenuEntryShortcut(it.current()->storageId(), it.current()->accel()); + } + m_changedItems.clear(); +} + +void CommandShortcutsModule::defaults() +{ + m_tree->clear(); + m_tree->fill(); +} + +QString CommandShortcutsModule::quickHelp() const +{ + return i18n("

Command Shortcuts

Using key bindings you can configure applications " + "and commands to be triggered when you press a key or a combination of keys."); +} + +void CommandShortcutsModule::initGUI() +{ + QVBoxLayout* mainLayout = new QVBoxLayout(this, KDialog::marginHint()); + mainLayout->addSpacing( KDialog::marginHint() ); + + KActiveLabel* label = new KActiveLabel(this); + label->setText(i18n("Below is a list of known commands which you may assign keyboard shortcuts to. " + "To edit, add or remove entries from this list use the " + "KDE menu editor.")); + label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + disconnect(label, SIGNAL(linkClicked(const QString &)), label, SLOT(openLink(const QString &))); + connect(label, SIGNAL(linkClicked(const QString &)), this, SLOT(launchMenuEditor())); + mainLayout->addWidget(label); + + m_tree = new AppTreeView(this, "appTreeView"); + m_tree->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + mainLayout->setStretchFactor(m_tree, 10); + mainLayout->addWidget(m_tree); + QWhatsThis::add(m_tree, + i18n("This is a list of all the desktop applications and commands " + "currently defined on this system. Click to select a command to " + "assign a keyboard shortcut to. Complete management of these " + "entries can be done via the menu editor program.")); + connect(m_tree, SIGNAL(entrySelected(const QString&, const QString &, bool)), + this, SLOT(commandSelected(const QString&, const QString &, bool))); + connect(m_tree, SIGNAL(doubleClicked(QListViewItem *, const QPoint &, int)), + this, SLOT(commandDoubleClicked(QListViewItem *, const QPoint &, int))); + m_shortcutBox = new QButtonGroup(i18n("Shortcut for Selected Command"), this); + mainLayout->addWidget(m_shortcutBox); + QHBoxLayout* buttonLayout = new QHBoxLayout(m_shortcutBox, KDialog::marginHint() * 2); + buttonLayout->addSpacing( KDialog::marginHint() ); + + m_noneRadio = new QRadioButton(i18n("no key", "&None"), m_shortcutBox); + QWhatsThis::add(m_noneRadio, i18n("The selected command will not be associated with any key.")); + buttonLayout->addWidget(m_noneRadio); + m_customRadio = new QRadioButton(i18n("C&ustom"), m_shortcutBox); + QWhatsThis::add(m_customRadio, + i18n("If this option is selected you can create a customized key binding for the" + " selected command using the button to the right.") ); + buttonLayout->addWidget(m_customRadio); + m_shortcutButton = new KKeyButton(m_shortcutBox); + QWhatsThis::add(m_shortcutButton, + i18n("Use this button to choose a new shortcut key. Once you click it, " + "you can press the key-combination which you would like to be assigned " + "to the currently selected command.")); + buttonLayout->addSpacing(KDialog::spacingHint() * 2); + buttonLayout->addWidget(m_shortcutButton); + connect(m_shortcutButton, SIGNAL(capturedShortcut(const KShortcut&)), + this, SLOT(shortcutChanged(const KShortcut&))); + connect(m_customRadio, SIGNAL(toggled(bool)), m_shortcutButton, SLOT(setEnabled(bool))); + connect(m_noneRadio, SIGNAL(toggled(bool)), this, SLOT(shortcutRadioToggled(bool))); + buttonLayout->addStretch(1); +} + +void CommandShortcutsModule::launchMenuEditor() +{ + if ( KApplication::startServiceByDesktopName( "kmenuedit", + QString::null /*url*/, + 0 /*error*/, + 0 /*dcopservice*/, + 0 /*pid*/, + "" /*startup_id*/, + true /*nowait*/ ) != 0 ) + { + KMessageBox::error(this, + i18n("The KDE menu editor (kmenuedit) could not be launched.\n" + "Perhaps it is not installed or not in your path."), + i18n("Application Missing")); + } +} + + +void CommandShortcutsModule::shortcutRadioToggled(bool remove) +{ + AppTreeItem *item = static_cast(m_tree->currentItem()); + if (!item || item->isDirectory()) + { + return; + } + + if (remove) + { + m_shortcutButton->setShortcut(QString::null, false); + item->setAccel(QString::null); + if (m_changedItems.findRef(item) == -1) + { + m_changedItems.append(item); + } + emit changed(true); + } + else + { + m_shortcutButton->captureShortcut(); + } +} + +void CommandShortcutsModule::shortcutChanged(const KShortcut& shortcut) +{ + AppTreeItem *item = static_cast(m_tree->currentItem()); + if (!item || item->isDirectory()) + { + return; + } + + QString accel = shortcut.toString(); + bool hasAccel = !accel.isEmpty(); + m_noneRadio->blockSignals(true); + m_noneRadio->setChecked(!hasAccel); + m_customRadio->setChecked(hasAccel); + m_shortcutButton->setShortcut(accel, false); + item->setAccel(accel); + m_noneRadio->blockSignals(false); + if (m_changedItems.findRef(item) == -1) + { + m_changedItems.append(item); + } + + emit changed( true ); +} + +void CommandShortcutsModule::showing(QWidget* w) +{ + if (w != this || treeFilled) + { + return; + } + + m_tree->fill(); + if (m_tree->firstChild()) + { + m_tree->setSelected(m_tree->firstChild(), true); + } + else + { + m_shortcutBox->setEnabled(false); + } + treeFilled = true; +} + +void CommandShortcutsModule::commandSelected(const QString& /* path */, const QString & accel, bool isDirectory) +{ + m_noneRadio->blockSignals(true); + m_shortcutBox->setEnabled(!isDirectory); + if (!isDirectory) + { + bool hasAccel = !accel.isEmpty(); + m_noneRadio->setChecked(!hasAccel); + m_customRadio->setChecked(hasAccel); + m_shortcutButton->setShortcut(accel, false); + } + m_noneRadio->blockSignals(false); +} + +void CommandShortcutsModule::commandDoubleClicked(QListViewItem *item, const QPoint &, int) +{ + if (!item) + { + return; + } + AppTreeItem *rl_item = static_cast(item); + if ( rl_item->isDirectory()) + return; + + m_shortcutButton->captureShortcut(); +} + +#include "commandShortcuts.moc" diff --git a/kcontrol/keys/commandShortcuts.h b/kcontrol/keys/commandShortcuts.h new file mode 100644 index 000000000..3bc492f17 --- /dev/null +++ b/kcontrol/keys/commandShortcuts.h @@ -0,0 +1,75 @@ +/* + * commandShortcuts.h + * + * Copyright (c) 2003 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __COMMAND_SHORTCUTS_MODULE_H +#define __COMMAND_SHORTCUTS_MODULE_H + +#include +#include +#include + +class AppTreeView; +class AppTreeItem; +class QButtonGroup; +class QRadioButton; +class KKeyButton; +class QListViewItem; + +typedef QPtrList treeItemList; +typedef QPtrListIterator treeItemListIterator; + +class CommandShortcutsModule : public QWidget +{ + Q_OBJECT + public: + CommandShortcutsModule( QWidget *parent = 0, const char *name = 0 ); + ~CommandShortcutsModule(); + + void load(); + void save(); + void defaults(); + QString quickHelp() const; + + signals: + void changed( bool ); + + public slots: + void showing(QWidget*); + + protected slots: + void commandSelected(const QString&, const QString &, bool); + void shortcutChanged(const KShortcut& shortcut); + void shortcutRadioToggled(bool remove); + void commandDoubleClicked(QListViewItem *item, const QPoint &, int); + void launchMenuEditor(); + + protected: + void initGUI(); + + private: + AppTreeView* m_tree; + QButtonGroup* m_shortcutBox; + QRadioButton* m_noneRadio; + QRadioButton* m_customRadio; + KKeyButton* m_shortcutButton; + treeItemList m_changedItems; +}; + +#endif // __COMMAND_SHORTCUTS_MODULE_H diff --git a/kcontrol/keys/convertShortcuts.pl b/kcontrol/keys/convertShortcuts.pl new file mode 100755 index 000000000..9dc216ac6 --- /dev/null +++ b/kcontrol/keys/convertShortcuts.pl @@ -0,0 +1,58 @@ +#!/usr/bin/perl +$keys=0; +foreach (<>) { + if(/^\[.*\]/) { $keys=0; } + if($keys==1) { + ($oldkey) = ($_ =~ /([^=]*)=.*/); + s/^Execute Command/Run Command/; + s/^Execute command/Run Command/; + s/^Lock screen/Lock Session/; + s/^Lock Screen/Lock Session/; + s/^Mouse emulation/Mouse Emulation/; + s/^Next keyboard layout/Switch to Next Keyboard Layout/; + s/Switch To Next Keyboard Layout/Switch to Next Keyboard Layout/; + s/^Screenshot of desktop/Desktop Screenshot/; + s/^Pop-up window operations menu/Window Operations Menu/; + s/^toggle-clipboard-actions/Enable\/Disable Clipboard Actions/; + s/^Screenshot of active window/Window Screenshot/; + s/^Show taskmanager/Show Taskmanager/; + s/^Show window list/Show Window List/; + s/^show-klipper-popupmenu/Show Klipper Popup-Menu/; + s/^Switch desktop left/Switch One Desktop to the Left/; + s/^Switch desktop right/Switch One Desktop to the Right/; + s/^Switch desktop down/Switch One Desktop Down/; + s/^Switch desktop up/Switch One Desktop Up/; + s/^Switch to desktop /Switch to Desktop /; + s/^Switch desktop next/Switch to Next Desktop/; + s/^Switch desktop previous/Switch to Previous Desktop/; + s/^Toggle Show Desktop/Toggle Showing Desktop/; + s/^Toggle raise and lower/Toggle Window Raise\/Lower/; + s/^Walk back through desktop list/Walk Through Desktop List \(Reverse\)/; + s/^Walk back through desktops/Walk Through Desktops \(Reverse\)/; + s/^Walk back through windows/Walk Through Windows \(Reverse\)/; + s/^Walk through desktop list/Walk Through Desktop List/; + s/^Walk through desktops/Walk Through Desktops/; + s/^Walk through windows/Walk Through Windows/; + s/^Window close/Window Close/; + s/^Window iconify/Window Iconify/; + s/^Window lower/Window Lower/; + s/^Window maximize/Window Maximize/; + s/^Window maximize horizontal/Window Maximize Horizontal/; + s/^Window maximize vertical/Window Maximize Vertical/; + s/^Window move/Window Move/; + s/^Window raise/Window Raise/; + s/^Window resize/Window Resize/; + s/^Window shade/Window Shade/; + s/^Window to Desktop /Window to Desktop /; + s/^Window to next desktop/Window to Next Desktop/; + s/^Window to previous desktop/Window to Previous Desktop/; + s/^repeat-last-klipper-action/Show Klipper Popup-Menu/; + ($newkey) = ($_ =~ /([^=]*)=.*/); + if ($oldkey ne $newkey) { + print "# DELETE " . $oldkey . "\n"; + print $_ + } + } + if(/\[Global Keys\]/) { $keys=1; print $_; } + if(/\[Global Shortcuts\]/) { $keys=1; print $_; } +} diff --git a/kcontrol/keys/kaccel.upd b/kcontrol/keys/kaccel.upd new file mode 100644 index 000000000..711919cdb --- /dev/null +++ b/kcontrol/keys/kaccel.upd @@ -0,0 +1,3 @@ +Id=kde3.3/r1 +File=kdeglobals +Script=convertShortcuts.pl,perl diff --git a/kcontrol/keys/kaccelaction.h b/kcontrol/keys/kaccelaction.h new file mode 100644 index 000000000..2e1f78643 --- /dev/null +++ b/kcontrol/keys/kaccelaction.h @@ -0,0 +1,205 @@ +// THIS FILE IS A COPY OF kdelibs/kdecore/kaccelaction.h AND MUST BE KEPT +// IN SYNC WITH THAT FILE. + +/* This file is part of the KDE libraries + Copyright (C) 2001,2002 Ellis Whitehead + + 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 _KACCELACTION_H +#define _KACCELACTION_H + +#include +#include +#include +#include + +#include + +class KAccelBase; + +class QObject; +class KConfig; +class KConfigBase; + +/* + KAccelAction holds information an a given action, such as "Run Command" + + 1) KAccelAction = "Run Command" + Default3 = "Alt+F2" + Default4 = "Meta+Enter;Alt+F2" + 1) KShortcut = "Meta+Enter" + 1) KKeySequence = "Meta+Enter" + 1) KKey = "Meta+Enter" + 1) Meta+Enter + 2) Meta+Keypad_Enter + 2) KShortcut = "Alt+F2" + 1) KKeySequence = "Alt+F2" + 1) Alt+F2 + 2) KAccelAction = "Something" + Default3 = "" + Default4 = "" + 1) KShortcut = "Meta+X,Asterisk" + 1) KKeySequence = "Meta+X,Asterisk" + 1) KKey = "Meta+X" + 1) Meta+X + 2) KKey = "Asterisk" + 1) Shift+8 (English layout) + 2) Keypad_Asterisk +*/ + +//--------------------------------------------------------------------- +// KAccelAction +//--------------------------------------------------------------------- + +class KAccelAction +{ + public: + KAccelAction(); + KAccelAction( const KAccelAction& ); + KAccelAction( const QString& sName, const QString& sLabel, const QString& sWhatsThis, + const KShortcut& cutDef3, const KShortcut& cutDef4, + const QObject* pObjSlot, const char* psMethodSlot, + bool bConfigurable, bool bEnabled ); + ~KAccelAction(); + + void clear(); + bool init( const QString& sName, const QString& sLabel, const QString& sWhatsThis, + const KShortcut& cutDef3, const KShortcut& cutDef4, + const QObject* pObjSlot, const char* psMethodSlot, + bool bConfigurable, bool bEnabled ); + + KAccelAction& operator=( const KAccelAction& ); + + const QString& name() const { return m_sName; } + const QString& label() const { return m_sLabel; } + const QString& whatsThis() const { return m_sWhatsThis; } + const KShortcut& shortcut() const { return m_cut; } + const KShortcut& shortcutDefault() const; + const KShortcut& shortcutDefault3() const { return m_cutDefault3; } + const KShortcut& shortcutDefault4() const { return m_cutDefault4; } + const QObject* objSlotPtr() const { return m_pObjSlot; } + const char* methodSlotPtr() const { return m_psMethodSlot; } + bool isConfigurable() const { return m_bConfigurable; } + bool isEnabled() const { return m_bEnabled; } + + void setName( const QString& ); + void setLabel( const QString& ); + void setWhatsThis( const QString& ); + bool setShortcut( const KShortcut& rgCuts ); + void setSlot( const QObject* pObjSlot, const char* psMethodSlot ); + void setConfigurable( bool ); + void setEnabled( bool ); + + int getID() const { return m_nIDAccel; } + void setID( int n ) { m_nIDAccel = n; } + bool isConnected() const; + + bool setKeySequence( uint i, const KKeySequence& ); + void clearShortcut(); + bool contains( const KKeySequence& ); + + QString toString() const; + QString toStringInternal() const; + + static bool useFourModifierKeys(); + static void useFourModifierKeys( bool ); + + protected: + QString m_sName, + m_sLabel, + m_sWhatsThis; + KShortcut m_cut; + KShortcut m_cutDefault3, m_cutDefault4; + const QObject* m_pObjSlot; + const char* m_psMethodSlot; + bool m_bConfigurable, + m_bEnabled; + int m_nIDAccel; + uint m_nConnections; + + void incConnections(); + void decConnections(); + + private: + static int g_bUseFourModifierKeys; + class KAccelActionPrivate* d; + + friend class KAccelActions; + friend class KAccelBase; +}; + +//--------------------------------------------------------------------- +// KAccelActions +//--------------------------------------------------------------------- + +class KAccelActions +{ + public: + KAccelActions(); + KAccelActions( const KAccelActions& ); + virtual ~KAccelActions(); + + void clear(); + bool init( const KAccelActions& ); + bool init( KConfigBase& config, const QString& sGroup ); + + void updateShortcuts( KAccelActions& ); + + int actionIndex( const QString& sAction ) const; + KAccelAction* actionPtr( uint ); + const KAccelAction* actionPtr( uint ) const; + KAccelAction* actionPtr( const QString& sAction ); + const KAccelAction* actionPtr( const QString& sAction ) const; + KAccelAction* actionPtr( KKeySequence cut ); + KAccelAction& operator []( uint ); + const KAccelAction& operator []( uint ) const; + + KAccelAction* insert( const QString& sAction, const QString& sLabel, const QString& sWhatsThis, + const KShortcut& rgCutDefaults3, const KShortcut& rgCutDefaults4, + const QObject* pObjSlot = 0, const char* psMethodSlot = 0, + bool bConfigurable = true, bool bEnabled = true ); + KAccelAction* insert( const QString& sName, const QString& sLabel ); + bool remove( const QString& sAction ); + + bool readActions( const QString& sConfigGroup = "Shortcuts", KConfigBase* pConfig = 0 ); + bool writeActions( const QString& sConfigGroup = "Shortcuts", KConfigBase* pConfig = 0, + bool bWriteAll = false, bool bGlobal = false ) const; + + void emitKeycodeChanged(); + + uint count() const; + + protected: + KAccelBase* m_pKAccelBase; + KAccelAction** m_prgActions; + uint m_nSizeAllocated, m_nSize; + + void resize( uint ); + void insertPtr( KAccelAction* ); + + private: + class KAccelActionsPrivate* d; + + KAccelActions( KAccelBase* ); + void initPrivate( KAccelBase* ); + KAccelActions& operator =( KAccelActions& ); + + friend class KAccelBase; +}; + +#endif // _KACCELACTION_H diff --git a/kcontrol/keys/kde3.kksrc b/kcontrol/keys/kde3.kksrc new file mode 100644 index 000000000..b42508a78 --- /dev/null +++ b/kcontrol/keys/kde3.kksrc @@ -0,0 +1,192 @@ +[Settings] +Name=KDE Default for 3 Modifier Keys +Name[af]=Standaard KDE vir 3 verandering sleutels +Name[be]=Стандартны для KDE з трыма клавішамі мадыфікацыі +Name[bg]=KDE (с 3 модификационни клавиша) +Name[bs]=KDE standardno za 3 modifikatorske tipke +Name[ca]=Omissió KDE per a 3 tecles modificadores +Name[cs]=Výchozí pro KDE (3 modifikátory) +Name[csb]=Domëslny nastôw KDE dlô 3 klawiszów zjinaczi +Name[cy]=Rhagosodion KDE i 3 Bysell Addasu +Name[da]=KDE-standard med 3 modifikatortaster +Name[de]=KDE-Standard für 3 Sondertasten +Name[el]=Προεπιλογή KDE με 3 πλήκτρα αλλαγής +Name[eo]=KDE-defaŭlto por 3 modifaj klavoj +Name[es]=Predeterminado de KDE de 3 modificadores de teclado +Name[et]=KDE vaikeskeem 3 muuteklahviga +Name[eu]=KDE lehenetsia 3 tekla modifikatzailekin +Name[fa]=پیش‌فرض KDE برای ۳ کلید تغییردهندۀ +Name[fi]=KDE oletus 3:lle muokkausnäppäimelle +Name[fr]=KDE par défaut pour 3 touches de modifications +Name[fy]=KDE-standert foar 3 modifikaasjetoetsen +Name[gl]=Predeterminado de KDE para 3 Teclas Modificadoras +Name[he]=ברירת המחדל של KDE עבור 3 כפתורים +Name[hr]=KDE zadano za 3 modifikatorske tipke +Name[hu]=KDE-s alapértelmezés (3 módosító billentyűvel) +Name[is]=Sjálfgefið KDE fyrir 3 breytilykla +Name[it]=Predefinito di KDE per 3 tasti modificatori +Name[ja]=KDE 標準 (3 モディファイアキー) +Name[kk]=3 түрлендіру перне үшін KDE-нің әдетті баптауы +Name[km]=KDE លំនាំដើម​សម្រាប់​គ្រាប់ចុច​កែប្រែ ៣ +Name[ko]=세 개의 수정자 키를 사용하는 KDE 기본값 +Name[lo]=ຄ່າປະລິຍາຍຂອງ KDE ສຳລັບປຸ່ມໃຊ້ຮ່ວມ 3 ປຸ່ມ +Name[lt]=KDE numatytoji 3 klavišams - modifikatoriams +Name[mk]=KDE-стандардно за 3 копчиња-модификатори +Name[mn]=3 сэлгүүр товчилуурын КДЭ-Стандарт +Name[ms]=Piawai KDE untuk 3 Kekunci Pengubah Suai +Name[nb]=KDE-standard for tre valgtaster +Name[nds]=KDE-Standard för 3 Sünnertasten +Name[ne]=३ परिमार्जक कुञ्जीका लागि पूर्वनिर्धारित KDE +Name[nl]=KDE-standaard voor 3 modificatietoetsen +Name[nn]=KDE-standard med tre valtastar +Name[nso]=Thuso ya Tshoganetso ya KDE ya Dinotlelo tse 3 tsa Kaonafatso +Name[pa]=3 ਮੋਡੀਫਾਇਰ ਸਵਿੱਚਾਂ ਲਈ KDE ਮੂਲ +Name[pl]=Ustawienia domyślne KDE dla 3 klawiszy modyfikatorów +Name[pt]=Predefinição do KDE para 3 Teclas Modificadoras +Name[pt_BR]=Padrão do KDE para 3 Teclas Modificadoras +Name[ro]=KDE implicit pentru 3 taste modificator +Name[ru]=KDE с тремя клавишами-модификаторами +Name[rw]=Mburabuzi KDE ya Buto 3 Muhindura +Name[se]=KDE-standárda mas leat golbma válljeboalu +Name[sk]=KDE nastavenia pre 3 modifikačné klávesy +Name[sl]=Privzeto za 3 spremenilne tipke +Name[sr]=KDE подразумевано за 3 модификаторска тастера +Name[sr@Latn]=KDE podrazumevano za 3 modifikatorska tastera +Name[sv]=KDE-förinställt med 3 väljartangenter +Name[tg]=Пешфарзи KDE барои 3 калидҳои ислоҳӣ +Name[th]=ค่าปริยายของ KDE สำหรับปุ่มเปลี่ยนหน้าที่ 3 ปุ่ม +Name[tr]=3 Değiştirici Anahtar için KDE Varsayılan +Name[tt]=KDE üzeneken, 3 Üzgärtkeç Töymä öçen +Name[uk]=Типова для KDE з 3 модифікаторами +Name[ven]=Default ya KDE ya khii tharu dzau lugisela +Name[vi]=Mặc định KDE cho 3 Phím Bổ trợ +Name[wa]=Pémetou KDE po 3 tapes di candjmints +Name[xh]=KDE Engagqibekanga ye 3 Izitsixo Mofifier +Name[zh_CN]=三个修饰键的 KDE 默认值 +Name[zh_TW]=KDE 預設使用 3 個輔助按鍵 (Alt/Ctrl/Shift) +Name[zu]=Okwendalo kwe-KDE okusetshenziselwa okhiye bokulungisa abangu-3 +Uses Win Modifier=false + +[Global Shortcuts] +Desktop Screenshot=Ctrl+Print +Enable/Disable Clipboard Actions=Alt+Ctrl+X +Run Command=Alt+F2 +Halt Computer=none +Halt without Confirmation=none +Kill Window=Alt+Ctrl+Escape +Lock Session=Alt+Ctrl+L +Logout=Alt+Ctrl+Delete +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=Alt+Ctrl+R +Mouse Emulation=Alt+F12 +Popup Launch Menu=Alt+F1 +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=Alt+Ctrl+V +Show Taskmanager=Ctrl+Escape +Show Window List=Alt+F5 +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Alt+Ctrl+K +Switch to Desktop 1=Ctrl+F1 +Switch to Desktop 10=Ctrl+F10 +Switch to Desktop 11=Ctrl+F11 +Switch to Desktop 12=Ctrl+F12 +Switch to Desktop 13=Ctrl+Shift+F1 +Switch to Desktop 14=Ctrl+Shift+F2 +Switch to Desktop 15=Ctrl+Shift+F3 +Switch to Desktop 16=Ctrl+Shift+F4 +Switch to Desktop 2=Ctrl+F2 +Switch to Desktop 3=Ctrl+F3 +Switch to Desktop 4=Ctrl+F4 +Switch to Desktop 5=Ctrl+F5 +Switch to Desktop 6=Ctrl+F6 +Switch to Desktop 7=Ctrl+F7 +Switch to Desktop 8=Ctrl+F8 +Switch to Desktop 9=Ctrl+F9 +Switch to Next Desktop=none +Switch to Previous Desktop=none +Toggle Showing Desktop=Alt+Ctrl+D +Toggle Window Raise/Lower=none +Walk Through Desktop List=Ctrl+Tab +Walk Through Desktop List (Reverse)=Ctrl+Shift+Tab +Walk Through Desktops=none +Walk Through Desktops (Reverse)=none +Walk Through Windows=Alt+Tab +Walk Through Windows (Reverse)=Alt+Shift+Tab +Window Close=Alt+F4 +Window Iconify=none +Window Lower=none +Window Maximize=none +Window Maximize Horizontal=none +Window Maximize Vertical=none +Window Move=none +Window Operations Menu=Alt+F3 +Window Raise=none +Window Resize=none +Window Screenshot=Alt+Print +Window Shade=none +Window to Desktop 1=none +Window to Desktop 10=none +Window to Desktop 11=none +Window to Desktop 12=none +Window to Desktop 13=none +Window to Desktop 14=none +Window to Desktop 15=none +Window to Desktop 16=none +Window to Desktop 2=none +Window to Desktop 3=none +Window to Desktop 4=none +Window to Desktop 5=none +Window to Desktop 6=none +Window to Desktop 7=none +Window to Desktop 8=none +Window to Desktop 9=none +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+B +Back=Alt+Left +Close=Ctrl+W +Copy=Ctrl+C;Ctrl+Insert +Cut=Ctrl+X;Shift+Delete +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+F +FindNext=F3 +FindPrev=Shift+F3 +Forward=Alt+Right +GotoLine=Ctrl+G +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V;Shift+Insert +PopupMenuContext=Menu +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit=Ctrl+Q +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll=Ctrl+A +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/keys/kde4.kksrc b/kcontrol/keys/kde4.kksrc new file mode 100644 index 000000000..367bc41d6 --- /dev/null +++ b/kcontrol/keys/kde4.kksrc @@ -0,0 +1,192 @@ +[Settings] +Name=KDE Default for 4 Modifier Keys +Name[af]=Standaard KDE vir 4 verandering sleutels +Name[be]=Стандартны для KDE з чатырма клавішамі мадыфікацыі +Name[bg]=KDE (с 4 модификационни клавиша) +Name[bs]=KDE standardno za 4 modifikatorske tipke +Name[ca]=Omissió KDE per a 4 tecles modificadores +Name[cs]=Výchozí pro KDE (4 modifikátory) +Name[csb]=Domëslny nastôw KDE dlô 4 klawiszów zjinaczi +Name[cy]=Rhagosodion KDE i 4 Bysell Addasu +Name[da]=KDE-standard med 4 modifikatortaster +Name[de]=KDE-Standard für 4 Sondertasten +Name[el]=Προεπιλογή KDE με 4 πλήκτρα αλλαγής +Name[eo]=KDE-defaŭlto por 4 modifaj klavoj +Name[es]=Predeterminado de KDE de 4 modificadores de teclado +Name[et]=KDE vaikeskeem 4 muuteklahviga +Name[eu]=KDE lehenetsia 4 tekla modifikatzailekin +Name[fa]=پیش‌فرض KDE برای ۴ کلید تغییردهندۀ +Name[fi]=KDE oletus 4:lle muokkausnäppäimelle +Name[fr]=KDE par défaut pour 4 touches de modifications +Name[fy]=KDE-standert foar 4 modifikaasjetoetsen +Name[gl]=Predeterminado de KDE para 4 Teclas Modificadoras +Name[he]=ברירת המחדל של KDE עבור 4 כפתורים +Name[hr]=KDE zadano za 4 modifikatorske tipke +Name[hu]=KDE-s alapértelmezés (4 módosító billentyűvel) +Name[is]=Sjálfgefið KDE fyrir 4 breytilykla +Name[it]=Predefinito di KDE per 4 tasti modificatori +Name[ja]=KDE 標準 (4 モディファイアキー) +Name[kk]=4 түрлендіру перне үшін KDE-нің әдетті баптауы +Name[km]=KDE លំនាំដើម​សម្រាប់​គ្រាប់ចុច​កែប្រែ ៤ +Name[ko]=네 개의 수정자 키를 사용하는 KDE 기본값 +Name[lo]=ຄ່າປະລິຍາຍຂອງ KDE ສຳລັບປຸ່ມໃຊ້ຮ່ວມ 4 ປຸ່່ມ +Name[lt]=KDE numatytoji 4 klavišams - modifikatoriams +Name[mk]=KDE-стандардно за 4 копчиња-модификатори +Name[mn]=4 сэлгүүр товчилуурын КДЭ-Стандарт +Name[ms]=Piawai KDE untuk 4 Kekunci Pengubah Suai +Name[nb]=KDE-standard for fire valgtaster +Name[nds]=KDE-Standard för 4 Sünnertasten +Name[ne]=४ परिमार्जक कुञ्जीका लागि पूर्वनिर्धारित KDE +Name[nl]=KDE-standaard voor 4 modificatietoetsen +Name[nn]=KDE-standard med fire valtastar +Name[nso]=Thuso ya Tshoganetso ya KDE ya Dinotlelo tse 4 tsa Kaonafatso +Name[pa]=4 ਮੋਡੀਫਾਇਰ ਸਵਿੱਚਾਂ ਲਈ KDE ਮੂਲ +Name[pl]=Ustawienia domyślne KDE dla 4 klawiszy modyfikatorów +Name[pt]=Predefinição do KDE para 4 Teclas Modificadoras +Name[pt_BR]=Padrão do KDE para 4 Teclas Modificadoras +Name[ro]=KDE implicit pentru 4 taste modificator +Name[ru]=KDE с четырьмя клавишами-модификаторами +Name[rw]=Mburabuzi KDE ya Buto 4 Muhindura +Name[se]=KDE-standárda mas leat njeallje válljenboalu +Name[sk]=KDE nastavenia pre 4 modifikačné klávesy +Name[sl]=Privzeto za 4 spremenilne tipke +Name[sr]=KDE подразумевано за 4 модификаторска тастера +Name[sr@Latn]=KDE podrazumevano za 4 modifikatorska tastera +Name[sv]=KDE-förinställt med 4 väljartangenter +Name[tg]=Пешфарзи KDE барои 4 калидҳои ислоҳӣ +Name[th]=ค่าปริยายของ KDE สำหรับปุ่มเปลี่ยนหน้าที่ 4 ปุ่ม +Name[tr]=4 Değiştirici Anahtar için KDE Varsayılan +Name[tt]=KDE üzeneken, 4 Üzgärtkeç Töymä öçen +Name[uk]=Типова для KDE з 4 модифікаторами +Name[ven]=Default ya KDE ya khii nna dzau lugisela +Name[vi]=Mặc định KDE cho 4 Phím Bổ trợ +Name[wa]=Pémetou KDE po 4 tapes di candjmints +Name[xh]=KDE Engagqibekanga ye 4 Izitsixo Mofifier +Name[zh_CN]=四个修饰键的 KDE 默认值 +Name[zh_TW]=KDE 預設使用 4 個輔助按鍵 (Meta/Alt/Ctrl/Shift) +Name[zu]=Okwendalo kwe-KDE okusetshenziselwa okhiye bokulungisa abangu-4 +Uses Win Modifier=true + +[Global Shortcuts] +Desktop Screenshot=Win+Print +Enable/Disable Clipboard Actions=Win+Ctrl+X +Run Command=Win+Return;Alt+F2 +Halt Computer=none +Halt without Confirmation=none +Kill Window=Win+Ctrl+Delete +Lock Session=Win+ScrollLock +Logout=Win+Escape +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=Win+Ctrl+R +Mouse Emulation=none +Popup Launch Menu=Win+Menu +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=Win+Ctrl+V +Show Taskmanager=Win+Ctrl+Pause +Show Window List=Win+0 +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Win+Ctrl+K +Switch to Desktop 1=Win+F1 +Switch to Desktop 10=Win+F10 +Switch to Desktop 11=none +Switch to Desktop 12=none +Switch to Desktop 13=none +Switch to Desktop 14=none +Switch to Desktop 15=none +Switch to Desktop 16=none +Switch to Desktop 2=Win+F2 +Switch to Desktop 3=Win+F3 +Switch to Desktop 4=Win+F4 +Switch to Desktop 5=Win+F5 +Switch to Desktop 6=Win+F6 +Switch to Desktop 7=Win+F7 +Switch to Desktop 8=Win+F8 +Switch to Desktop 9=Win+F9 +Switch to Next Desktop=none +Switch to Previous Desktop=none +Toggle Showing Desktop=Win+Ctrl+D +Toggle Window Raise/Lower=none +Walk Through Desktop List=none +Walk Through Desktop List (Reverse)=none +Walk Through Desktops=Win+Tab +Walk Through Desktops (Reverse)=Win+Shift+Tab +Walk Through Windows=Alt+Tab +Walk Through Windows (Reverse)=Alt+Shift+Tab +Window Close=Alt+Escape;Alt+F4 +Window Iconify=Win+Minus +Window Lower=none +Window Maximize=Win+Plus +Window Maximize Horizontal=Win+Equal +Window Maximize Vertical=Win+Bar +Window Move=none +Window Operations Menu=Alt+Menu +Window Raise=none +Window Resize=none +Window Screenshot=Alt+Print +Window Shade=Win+Underscore +Window to Desktop 1=Win+Alt+F1 +Window to Desktop 10=Win+Alt+F10 +Window to Desktop 11=none +Window to Desktop 12=none +Window to Desktop 13=none +Window to Desktop 14=none +Window to Desktop 15=none +Window to Desktop 16=none +Window to Desktop 2=Win+Alt+F2 +Window to Desktop 3=Win+Alt+F3 +Window to Desktop 4=Win+Alt+F4 +Window to Desktop 5=Win+Alt+F5 +Window to Desktop 6=Win+Alt+F6 +Window to Desktop 7=Win+Alt+F7 +Window to Desktop 8=Win+Alt+F8 +Window to Desktop 9=Win+Alt+F9 +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+B +Back=Alt+Left +Close=Ctrl+Escape;Ctrl+W +Copy=Ctrl+C;Ctrl+Insert +Cut=Ctrl+X;Shift+Delete +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+F +FindNext=F3 +FindPrev=Shift+F3 +Forward=Alt+Right +GotoLine=Ctrl+G +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V;Shift+Insert +PopupMenuContext=Menu +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit=Ctrl+Q +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll=Ctrl+A +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/keys/keyconfig.cpp b/kcontrol/keys/keyconfig.cpp new file mode 100644 index 000000000..89a32cf5e --- /dev/null +++ b/kcontrol/keys/keyconfig.cpp @@ -0,0 +1,545 @@ +// +// KDE Shortcut config module +// +// Copyright (c) Mark Donohoe 1998 +// Copyright (c) Matthias Ettrich 1998 +// Converted to generic key configuration module, Duncan Haldane 1998. +// Layout fixes copyright (c) 2000 Preston Brown + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include // Used in KKeyModule::init() + +#include "keyconfig.h" +#include "keyconfig.moc" + +#define KICKER_ALL_BINDINGS + +//---------------------------------------------------------------------------- + +KKeyModule::KKeyModule( QWidget *parent, bool isGlobal, bool bSeriesOnly, bool bSeriesNone, const char *name ) + : QWidget( parent, name ) +{ + init( isGlobal, bSeriesOnly, bSeriesNone ); +} + +KKeyModule::KKeyModule( QWidget *parent, bool isGlobal, const char *name ) + : QWidget( parent, name ) +{ + init( isGlobal, false, false ); +} + +void KKeyModule::init( bool isGlobal, bool _bSeriesOnly, bool bSeriesNone ) +{ + QString wtstr; + + KeyType = isGlobal ? "global" : "standard"; + + bSeriesOnly = _bSeriesOnly; + + kdDebug(125) << "KKeyModule::init() - Get default key bindings." << endl; + if ( KeyType == "global" ) { + KAccelActions* keys = &actions; +// see also KKeyModule::init() below !!! +#define NOSLOTS +#define KShortcuts KAccelShortcuts +#include "../../kwin/kwinbindings.cpp" +#include "../../kicker/kicker/core/kickerbindings.cpp" +#include "../../kicker/taskbar/taskbarbindings.cpp" +#include "../../kdesktop/kdesktopbindings.cpp" +#include "../../klipper/klipperbindings.cpp" +#include "../../kxkb/kxkbbindings.cpp" +#undef KShortcuts + KeyScheme = "Global Key Scheme"; + KeySet = "Global Keys"; + // Sorting Hack: I'll re-write the module once feature-adding begins again. + if( bSeriesOnly || bSeriesNone ) { + for( uint i = 0; i < actions.size(); i++ ) { + QString sConfigKey = actions[i].m_sName; + //kdDebug(125) << "sConfigKey: " << sConfigKey << endl; + int iLastSpace = sConfigKey.findRev( ' ' ); + bool bIsNum = false; + if( iLastSpace >= 0 ) + sConfigKey.mid( iLastSpace+1 ).toInt( &bIsNum ); + + kdDebug(125) << "sConfigKey: " << sConfigKey + << " bIsNum: " << bIsNum + << " bSeriesOnly: " << bSeriesOnly << endl; + if( ((bSeriesOnly && !bIsNum) || (bSeriesNone && bIsNum)) && !sConfigKey.contains( ':' ) ) { + actions.removeAction( sConfigKey ); + i--; + } + } + } + } + + if ( KeyType == "standard" ) { + for(uint i=0; isetCurrentItem( 0 ); + connect( sList, SIGNAL( highlighted( int ) ), + SLOT( slotPreviewScheme( int ) ) ); + + QLabel *label = new QLabel( sList, i18n("&Key Scheme"), this ); + + wtstr = i18n("Here you can see a list of the existing key binding schemes with 'Current scheme'" + " referring to the settings you are using right now. Select a scheme to use, remove or" + " change it."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( sList, wtstr ); + + addBt = new QPushButton( i18n("&Save Scheme..."), this ); + connect( addBt, SIGNAL( clicked() ), SLOT( slotAdd() ) ); + QWhatsThis::add(addBt, i18n("Click here to add a new key bindings scheme. You will be prompted for a name.")); + + removeBt = new QPushButton( i18n("&Remove Scheme"), this ); + removeBt->setEnabled(FALSE); + connect( removeBt, SIGNAL( clicked() ), SLOT( slotRemove() ) ); + QWhatsThis::add( removeBt, i18n("Click here to remove the selected key bindings scheme. You can not" + " remove the standard system wide schemes, 'Current scheme' and 'KDE default'.") ); + + // Hack to get this setting only displayed once. It belongs in main.cpp instead. + // That move will take a lot of UI redesigning, though, so i'll do it once CVS + // opens up for feature commits again. -- ellis + /* Needed to remove because this depended upon non-BC changes in KeyEntry.*/ + // If this is the "Global Keys" section of the KDE Control Center: + if( isGlobal && !bSeriesOnly ) { + preferMetaBt = new QCheckBox( i18n("Prefer 4-modifier defaults"), this ); + if( !KKeySequence::keyboardHasMetaKey() ) + preferMetaBt->setEnabled( false ); + preferMetaBt->setChecked( KKeySequence::useFourModifierKeys() ); + connect( preferMetaBt, SIGNAL(clicked()), SLOT(slotPreferMeta()) ); + QWhatsThis::add( preferMetaBt, i18n("If your keyboard has a Meta key, but you would " + "like KDE to prefer the 3-modifier configuration defaults, then this option " + "should be unchecked.") ); + } else + preferMetaBt = 0; + + KSeparator* line = new KSeparator( KSeparator::HLine, this ); + + kc = new KeyChooserSpec( actions, this, isGlobal ); + connect( kc, SIGNAL(keyChange()), this, SLOT(slotKeyChange()) ); + + readScheme(); + + QGridLayout *topLayout = new QGridLayout( this, 6, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + topLayout->addWidget(label, 0, 0); + topLayout->addMultiCellWidget(sList, 1, 2, 0, 0); + topLayout->addWidget(addBt, 1, 1); + topLayout->addWidget(removeBt, 2, 1); + if( preferMetaBt ) + topLayout->addWidget(preferMetaBt, 3, 0); + topLayout->addMultiCellWidget(line, 4, 4, 0, 1); + topLayout->addRowSpacing(3, 15); + topLayout->addMultiCellWidget(kc, 5, 5, 0, 1); + + setMinimumSize(topLayout->sizeHint()); +} + +KKeyModule::~KKeyModule (){ + //kdDebug() << "KKeyModule destructor" << endl; + delete kc; + delete sFileList; +} + +bool KKeyModule::writeSettings( const QString& sGroup, KConfig* pConfig ) +{ + kc->commitChanges(); + actions.writeActions( sGroup, pConfig, true, false ); + return true; +} + +bool KKeyModule::writeSettingsGlobal( const QString& sGroup ) +{ + kc->commitChanges(); + actions.writeActions( sGroup, 0, true, true ); + return true; +} + +void KKeyModule::load() +{ + kc->listSync(); +} + +/*void KKeyModule::save() +{ + if( preferMetaBt ) + KKeySequence::useFourModifierKeys( preferMetaBt->isChecked() ); + + kc->commitChanges(); + actions.writeActions( KeySet, 0, true, true ); + if ( KeyType == "global" ) { + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + // TODO: create a reconfigureKeys() method. + kapp->dcopClient()->send("kwin", "", "reconfigure()", ""); + kapp->dcopClient()->send("kdesktop", "", "configure()", ""); + kapp->dcopClient()->send("kicker", "Panel", "configure()", ""); + } +}*/ + +void KKeyModule::defaults() +{ + if( preferMetaBt ) + preferMetaBt->setChecked( false ); + KKeySequence::useFourModifierKeys( false ); + kc->allDefault(); +} + +/*void KKeyModule::slotRemove() +{ + QString kksPath = + KGlobal::dirs()->saveLocation("data", "kcmkeys/" + KeyType); + + QDir d( kksPath ); + if (!d.exists()) // what can we do? + return; + + d.setFilter( QDir::Files ); + d.setSorting( QDir::Name ); + d.setNameFilter("*.kksrc"); + + uint ind = sList->currentItem(); + + if ( !d.remove( *sFileList->at( ind ) ) ) { + KMessageBox::sorry( 0, + i18n("This key scheme could not be removed.\n" + "Perhaps you do not have permission to alter the file " + "system where the key scheme is stored." )); + return; + } + + sList->removeItem( ind ); + sFileList->remove( sFileList->at(ind) ); +}*/ + +void KKeyModule::slotKeyChange() +{ + emit keyChange(); + //emit keysChanged( &dict ); +} + +/*void KKeyModule::slotSave( ) +{ + KSimpleConfig config(*sFileList->at( sList->currentItem() ) ); + // global=true is necessary in order to + // let both 'Global Shortcuts' and 'Shortcut Sequences' be + // written to the same scheme file. + kc->commitChanges(); + actions.writeActions( KeyScheme, &config, KeyType == "global", KeyType == "global" ); +}*/ + +void KKeyModule::slotPreferMeta() +{ + kc->setPreferFourModifierKeys( preferMetaBt->isChecked() ); +} + +void KKeyModule::readScheme( int index ) +{ + kdDebug(125) << "readScheme( " << index << " )\n"; + if( index == 1 ) + kc->allDefault( false ); + //else if( index == 2 ) + // kc->allDefault( true ); + else { + KConfigBase* config = 0; + if( index == 0 ) config = new KConfig( "kdeglobals" ); + //else config = new KSimpleConfig( *sFileList->at( index ), true ); + + actions.readActions( (index == 0) ? KeySet : KeyScheme, config ); + kc->listSync(); + delete config; + } +} + +/*void KKeyModule::slotAdd() +{ + QString sName; + + if ( sList->currentItem() >= nSysSchemes ) + sName = sList->currentText(); + SaveScm ss( 0, "save scheme", sName ); + + bool nameValid; + QString sFile; + int exists = -1; + + do { + + nameValid = TRUE; + + if ( ss.exec() ) { + sName = ss.nameLine->text(); + if ( sName.stripWhiteSpace().isEmpty() ) + return; + + sName = sName.simplifyWhiteSpace(); + sFile = sName; + + int ind = 0; + while ( ind < (int) sFile.length() ) { + + // parse the string for first white space + + ind = sFile.find(" "); + if (ind == -1) { + ind = sFile.length(); + break; + } + + // remove from string + + sFile.remove( ind, 1); + + // Make the next letter upper case + + QString s = sFile.mid( ind, 1 ); + s = s.upper(); + sFile.replace( ind, 1, s ); + + } + + exists = -1; + for ( int i = 0; i < (int) sList->count(); i++ ) { + if ( sName.lower() == (sList->text(i)).lower() ) { + exists = i; + + int result = KMessageBox::warningContinueCancel( 0, + i18n("A key scheme with the name '%1' already exists.\n" + "Do you want to overwrite it?\n").arg(sName), + i18n("Save Key Scheme"), + i18n("Overwrite")); + if (result == KMessageBox::Continue) + nameValid = true; + else + nameValid = false; + } + } + } else return; + + } while ( nameValid == FALSE ); + + disconnect( sList, SIGNAL( highlighted( int ) ), this, + SLOT( slotPreviewScheme( int ) ) ); + + + QString kksPath = KGlobal::dirs()->saveLocation("data", "kcmkeys/"); + + QDir d( kksPath ); + if ( !d.exists() ) + if ( !d.mkdir( kksPath ) ) { + qWarning("KKeyModule: Could not make directory to store user info."); + return; + } + + kksPath += KeyType ; + kksPath += "/"; + + d.setPath( kksPath ); + if ( !d.exists() ) + if ( !d.mkdir( kksPath ) ) { + qWarning("KKeyModule: Could not make directory to store user info."); + return; + } + + sFile.prepend( kksPath ); + sFile += ".kksrc"; + if (exists == -1) + { + sList->insertItem( sName ); + sList->setFocus(); + sList->setCurrentItem( sList->count()-1 ); + sFileList->append( sFile ); + } + else + { + sList->setFocus(); + sList->setCurrentItem( exists ); + } + + KSimpleConfig *config = + new KSimpleConfig( sFile ); + + config->setGroup( KeyScheme ); + config->writeEntry( "Name", sName ); + delete config; + + slotSave(); + + connect( sList, SIGNAL( highlighted( int ) ), this, + SLOT( slotPreviewScheme( int ) ) ); + + slotPreviewScheme( sList->currentItem() ); +}*/ + +/*void KKeyModule::slotPreviewScheme( int indx ) +{ + readScheme( indx ); + + // Set various appropriate for the scheme + + if ( indx < nSysSchemes || + (*sFileList->at(indx)).contains( "/global-" ) || + (*sFileList->at(indx)).contains( "/app-" ) ) { + removeBt->setEnabled( FALSE ); + } else { + removeBt->setEnabled( TRUE ); + } +}*/ + +/*void KKeyModule::readSchemeNames( ) +{ + QStringList schemes = KGlobal::dirs()->findAllResources("data", "kcmkeys/" + KeyType + "/*.kksrc"); + //QRegExp r( "-kde[34].kksrc$" ); + QRegExp r( "-kde3.kksrc$" ); + + sList->clear(); + sFileList->clear(); + sList->insertItem( i18n("Current Scheme"), 0 ); + sFileList->append( "Not a kcsrc file" ); + sList->insertItem( i18n("KDE Traditional"), 1 ); + sFileList->append( "Not a kcsrc file" ); + //sList->insertItem( i18n("KDE Extended (With 'Win' Key)"), 2 ); + //sList->insertItem( i18n("KDE Default for 4 Modifiers (Meta/Alt/Ctrl/Shift)"), 2 ); + //sFileList->append( "Not a kcsrc file" ); + nSysSchemes = 2; + + // This for system files + for ( QStringList::ConstIterator it = schemes.begin(); it != schemes.end(); ++it) { + // KPersonalizer relies on .kksrc files containing all the keyboard shortcut + // schemes for various setups. It also requires the KDE defaults to be in + // a .kksrc file. The KDE defaults shouldn't be listed here. + //if( r.search( *it ) != -1 ) + // continue; + + KSimpleConfig config( *it, true ); + // TODO: Put 'Name' in "Settings" group + config.setGroup( KeyScheme ); + QString str = config.readEntry( "Name" ); + + sList->insertItem( str ); + sFileList->append( *it ); + } +}*/ + +/*void KKeyModule::updateKeys( const KAccelActions* map_P ) + { + kc->updateKeys( map_P ); + }*/ + +// write all the global keys to kdeglobals +// this is needed to be able to check for conflicts with global keys in app's keyconfig +// dialogs, kdeglobals is empty as long as you don't apply any change in controlcenter/keys +void KKeyModule::init() +{ + kdDebug(125) << "KKeyModule::init()\n"; + + /*kdDebug(125) << "KKeyModule::init() - Initialize # Modifier Keys Settings\n"; + KConfigGroupSaver cgs( KGlobal::config(), "Keyboard" ); + QString fourMods = KGlobal::config()->readEntry( "Use Four Modifier Keys", KAccel::keyboardHasMetaKey() ? "true" : "false" ); + KAccel::useFourModifierKeys( fourMods == "true" ); + bool bUseFourModifierKeys = KAccel::useFourModifierKeys(); + KGlobal::config()->writeEntry( "User Four Modifier Keys", bUseFourModifierKeys ? "true" : "false", true, true ); + */ + KAccelActions* keys = new KAccelActions(); + + kdDebug(125) << "KKeyModule::init() - Load Included Bindings\n"; +// this should match the included files above +#define NOSLOTS +#define KShortcuts KAccelShortcuts +#include "../../klipper/klipperbindings.cpp" +#include "../../kwin/kwinbindings.cpp" +#include "../../kicker/kicker/core/kickerbindings.cpp" +#include "../../kicker/taskbar/taskbarbindings.cpp" +#include "../../kdesktop/kdesktopbindings.cpp" +#include "../../kxkb/kxkbbindings.cpp" +#undef KShortcuts + + kdDebug(125) << "KKeyModule::init() - Read Config Bindings\n"; + keys->readActions( "Global Keys" ); + + { + KSimpleConfig cfg( "kdeglobals" ); + cfg.deleteGroup( "Global Keys" ); + } + + kdDebug(125) << "KKeyModule::init() - Write Config Bindings\n"; + keys->writeActions( "Global Keys", 0, true, true ); +} + +//----------------------------------------------------------------- +// KeyChooserSpec +//----------------------------------------------------------------- + +KeyChooserSpec::KeyChooserSpec( KAccelActions& actions, QWidget* parent, bool bGlobal ) + : KKeyChooser( actions, parent, bGlobal, false, true ), m_bGlobal( bGlobal ) + { + //if( global ) + // globalDict()->clear(); // don't check against global keys twice + } + +/*void KeyChooserSpec::updateKeys( const KAccelActions* map_P ) + { + if( global ) + { + stdDict()->clear(); + for( KAccelActions::ConstIterator gIt( map_P->begin()); + gIt != map_P->end(); + ++gIt ) + { + int* keyCode = new int; + *keyCode = ( *gIt ).aConfigKeyCode; + stdDict()->insert( gIt.key(), keyCode); + } + } + else + { + globalDict()->clear(); + for( KAccelActions::ConstIterator gIt( map_P->begin()); + gIt != map_P->end(); + ++gIt ) + { + int* keyCode = new int; + *keyCode = ( *gIt ).aConfigKeyCode; + globalDict()->insert( gIt.key(), keyCode); + } + } + } +*/ diff --git a/kcontrol/keys/keyconfig.h b/kcontrol/keys/keyconfig.h new file mode 100644 index 000000000..cba853e4d --- /dev/null +++ b/kcontrol/keys/keyconfig.h @@ -0,0 +1,90 @@ +// +// KDE Shortcut config module +// +// Copyright (c) Mark Donohoe 1998 +// Copyright (c) Matthias Ettrich 1998 +// Converted to generic key configuration module, Duncan Haldane 1998. + +#ifndef __KEYCONFIG_H__ +#define __KEYCONFIG_H__ + +#include +#include + +#include +#include +//#include +#include + +class QCheckBox; + +class KeyChooserSpec; + +class KKeyModule : public QWidget +{ + Q_OBJECT +public: + KAccelActions actions; + //KAccelActions dict; + KeyChooserSpec *kc; + + KKeyModule( QWidget *parent, bool isGlobal, bool bSeriesOnly, bool bSeriesNone, const char *name = 0 ); + KKeyModule( QWidget *parent, bool isGlobal, const char *name = 0 ); + ~KKeyModule (); + +protected: + void init( bool isGlobal, bool bSeriesOnly, bool bSeriesNone ); + +public: + virtual void load(); + //virtual void save(); + virtual void defaults(); + static void init(); + + bool writeSettings( const QString& sGroup, KConfig* pConfig ); + bool writeSettingsGlobal( const QString& sGroup ); + +public slots: + //void slotPreviewScheme( int ); + //void slotAdd(); + //void slotSave(); + //void slotRemove(); + void slotKeyChange(); + void slotPreferMeta(); + //void updateKeys( const KAccelActions* map_P ); + //void readSchemeNames(); + +signals: + void keyChange(); + //void keysChanged( const KAccelActions* map_P ); + +protected: + QListBox *sList; + QStringList *sFileList; + QPushButton *addBt; + QPushButton *removeBt; + QCheckBox *preferMetaBt; + int nSysSchemes; + bool bSeriesOnly; + + void readScheme( int index=0 ); + + QString KeyType; + QString KeyScheme; + QString KeySet; + +}; + +class KeyChooserSpec : public KKeyChooser +{ + Q_OBJECT +public: + KeyChooserSpec( KAccelActions& actions, QWidget* parent, + bool bGlobal ); + //void updateKeys( const KAccelActions* map_P ); +protected: + bool m_bGlobal; +}; + +#endif + diff --git a/kcontrol/keys/keys.desktop b/kcontrol/keys/keys.desktop new file mode 100644 index 000000000..b39bab385 --- /dev/null +++ b/kcontrol/keys/keys.desktop @@ -0,0 +1,239 @@ +[Desktop Entry] +Exec=kcmshell keys +Icon=key_bindings +Type=Application +DocPath=kcontrol/keys/index.html + + +X-KDE-Library=keys +X-KDE-Init=keys +X-KDE-ParentApp=kcontrol + +Name=Keyboard Shortcuts +Name[af]=Sleutelbord Kortpaaie +Name[ar]=إختصارات لوحة المفاتيح +Name[az]=Klaviatura Qısa Yolları +Name[be]=Клавіятурныя скароты +Name[bg]=Бързи клавиши +Name[bn]=কীবোর্ড শর্টকাট +Name[br]=Berradennoù ar stokellaoueg +Name[bs]=Prečice tastature +Name[ca]=Dreceres de teclat +Name[cs]=Klávesové zkratky +Name[csb]=Klawiszowé skrodzënë +Name[cy]=Llwybrau Byr Bysellfwrdd +Name[da]=Tastaturgenveje +Name[de]=Tastenkürzel +Name[el]=Συντομεύσεις πληκτρολογίου +Name[eo]=Klavkombinoj +Name[es]=Accesos rápidos de teclado +Name[et]=Kiirklahvid +Name[eu]=Laster-teklak +Name[fa]=میان‌برهای صفحه‌ کلید +Name[fi]=Näppäimistön pikavalinnat +Name[fr]=Raccourcis clavier +Name[fy]=Fluchtoetsen +Name[ga]=Aicearraí Méarchláir +Name[gl]=Atallos de Teclado +Name[he]=קיצורי מקשים +Name[hi]=कुंजीपट शॉर्टकट +Name[hr]=Prečaci tipkovnice +Name[hu]=Billentyűparancsok +Name[is]=Flýtilyklar +Name[it]=Scorciatoie della tastiera +Name[ja]=キーボードショートカット +Name[ka]=კლავიშების მალსახმობი +Name[kk]=Перне тіркесімдер +Name[km]=ផ្លូវកាត់​ក្ដារចុច +Name[ko]=키보드 단축키 +Name[lo]=ການຈັດວາງແປ້ນພິມ +Name[lt]=Spartieji klavišai +Name[lv]=Tastatūras saīsnes +Name[mk]=Кратенки на тастатурата +Name[mn]=Гарын богино товчилуур +Name[ms]=Jalan Pintas Papan Kekunci +Name[mt]=Taqsiriet tat-tastiera +Name[nb]=Hurtigtaster +Name[nds]=Tastkombinatschonen +Name[ne]=कुञ्जीपाटी सर्टकट +Name[nl]=Sneltoetsen +Name[nn]=Snøggtastar +Name[nso]=Ditselakopana tsa Keyboard +Name[pa]=ਕੀ-ਬੋਰਡ ਸ਼ਾਰਟਕੱਟ +Name[pl]=Skróty klawiszowe +Name[pt]=Atalhos do Teclado +Name[pt_BR]=Atalhos de teclado +Name[ro]=Acceleratori de tastatură +Name[ru]=Комбинации клавиш +Name[rw]=Amahinanzira ya Mwandikisho +Name[se]=Jođánisboalut +Name[sk]=Klávesové skratky +Name[sl]=Bližnjice na tipkovnici +Name[sr]=Пречице са тастатуре +Name[sr@Latn]=Prečice sa tastature +Name[sv]=Snabbtangenter +Name[ta]=விசைப்பலகை குறுக்கு வழிகள் +Name[te]=కీబొర్డ్ శీఘ్రమార్గాలు +Name[tg]=Забонаки кнопкаҳои тез +Name[th]=ปุ่มพิมพ์ลัด +Name[tr]=Klavye Kısayolları +Name[tt]=Töylek Qısqartmaları +Name[uk]=Скорочення клавіатури +Name[uz]=Tugmalar birikmasi +Name[uz@cyrillic]=Тугмалар бирикмаси +Name[ven]=Tshikhau tsha khiibodo +Name[vi]=Gõ tắt trên Bàn phím +Name[wa]=Rascourtis taprece +Name[xh]=Indlela ezimfutshane Zebhodi yezitshixo +Name[zh_CN]=键盘快捷键 +Name[zh_TW]=鍵盤捷徑 +Name[zu]=Izindlela Ezimfushane zebhodi yokhiye + +Comment=Configuration of keybindings +Comment[af]=Opstelling van sleutel bindinge +Comment[az]=Düymə bağlarının quraşdırılması +Comment[be]=Настаўленні клавішных скаротаў +Comment[bg]=Настройване на бързите клавиши +Comment[bn]=কী-বাইন্ডিং কনফিগারেশন +Comment[br]=Kefluniañ ereoù stokell +Comment[bs]=Podešavanje značenja tipki +Comment[ca]=Configuració dels lligams de tecles +Comment[cs]=Nastavení klávesových zkratek +Comment[csb]=Nastôw klawiszowëch skrodzënów +Comment[cy]=Furfweddiad o rwymiadau bysell +Comment[da]=Indstilling af tastebindinger +Comment[de]=Einrichtung von Tastenzuordnungen +Comment[el]=Ρύθμιση συνδυασμών πλήκτρων +Comment[eo]=Agordo de klavsignifoj, klavkombinoj +Comment[es]=Configuración de las asociaciones de las teclas +Comment[et]=Kiirklahvide seadistamine +Comment[eu]=Tekla elkarketen konfigurazioa +Comment[fa]=پیکربندی مقیدسازیهای کلید +Comment[fi]=Näppäinsidosten asetukset +Comment[fr]=Configuration des raccourcis clavier +Comment[fy]=Ynstellings foar fluchtoetsen +Comment[gl]=Configuración dos atallos de teclado +Comment[he]=שינוי הגדרות מיפוי המקשים +Comment[hi]=की-बाइंडिंग का कॉन्फ़िगरेशन +Comment[hr]=Konfiguriranje prečaca tipkovnice +Comment[hu]=A billentyűparancsok beállításai +Comment[id]=Konfigurasi keybindings +Comment[is]=Stillingar altækra flýtihnappa +Comment[it]=Configurazione delle associazioni di tasti +Comment[ja]=キーバインディングの設定 +Comment[ka]=კლავიშთა წყვილების კონფიგურაცია +Comment[kk]=Перне тіркесімдерді баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​ចង​គ្រាប់ចុច +Comment[ko]=키 바인딩 설정 +Comment[lo]=ປັບແຕ່ງການຈັບຄູ່ປຸ່ມພິມ +Comment[lt]=Klavišų siečių derinimas +Comment[lv]=Taustiņsasaistes konfigurēšana +Comment[mk]=Конфигурација на врски меѓу копчиња и акции +Comment[mn]=Товчилуур холболтын тохируулга +Comment[ms]=Konfigurasi untuk pengikatan kekunci +Comment[mt]=Konfigurazzjoni ta' assoċjazzjonijiet tat-tasti +Comment[nb]=Oppsett av hurtigtaster +Comment[nds]=Instellen vun Tastkombinatschonen +Comment[ne]=कुञ्जी बाइन्डिङहरूको कन्फिगरेसन +Comment[nl]=Instellingen voor sneltoetsen +Comment[nn]=Oppsett av snøggtastar +Comment[nso]=Peakanyo ya ditlemaganyo tsa dinotlelo +Comment[oc]=Configuracion dèus lligams de tecles +Comment[pa]=ਕੀਬਾਇਡ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Ustawienia skrótów klawiszowych +Comment[pt]=Configuração das teclas +Comment[pt_BR]=Configuração dos atalhos de teclado +Comment[ro]=Configurează asocierile de taste +Comment[ru]=Настройка комбинаций клавиш +Comment[rw]=Iboneza ry'amahuza-buto +Comment[se]=Jođánisboaluid heiveheapmi +Comment[sk]=Konfigurácia globálnych klávesových skratiek +Comment[sl]=Nastavitve tipkovnih vezi +Comment[sr]=Подешавање пречица са тастатуре +Comment[sr@Latn]=Podešavanje prečica sa tastature +Comment[sv]=Anpassa kortkommandon +Comment[ta]=விசைசேர்வுகளுக்கான வடிவமைப்பு +Comment[tg]=Танзими аъмоли калидҳо +Comment[th]=ปรับแต่งปุ่มพิมพ์ลัด +Comment[tr]=Tuş bağıntılarının yapılandırılması +Comment[tt]=Töymä berläşmälären caylaw +Comment[uk]=Налаштування прив'язок клавіш +Comment[uz]=Tugmalar birikmasini moslash +Comment[uz@cyrillic]=Тугмалар бирикмасини мослаш +Comment[ven]=Nzudzanyo yau tanganyisa dzikhii +Comment[vi]=Cấu hình các tổ hợp phím +Comment[wa]=Apontiaedje des rascourtis di tapes +Comment[xh]=Uqwalaselo lwezibopheleo zesitshixo +Comment[zh_CN]=键绑定配置 +Comment[zh_TW]=按鍵關聯設定 +Comment[zu]=Inhlanganiselo yezibopho zokhiye + +Keywords=Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts +Keywords[af]=Keys,Global sleutel bindings,sleutel scheme,sleutel bindings,kortpaaie,application kortpaaie +Keywords[ar]=مفايتح، مفاتيح الاختصارات العامّة، خريطة المفاتيح، مفاتيح الاختصارات، اختصارات، اختصارات تطبيقات +Keywords[az]=düymələr,Qlobal Düymə bağlantıları,Düymə planı,düymə bağlamaları,qısa yollar,proqram qısa yolları +Keywords[be]=Клавішы,Глабальныя скароты,Схема клавішаў,Скароты,Скароты праграмы,Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts +Keywords[bg]=бърз, клавиш, бързи, достъп, клавишна, комбинация, Keys, Global key bindings, Key scheme, Key bindings, shortcuts, application shortcuts +Keywords[ca]=Tecles,lligams de tecles globals,Esquema de tecla,Lligams de tecles,dreceres,dreceres d'aplicació +Keywords[cs]=Klávesy,Globální klávesové zkratky,Schéma kláves,Klávesové zkratky,Zkratky,Aplikační zkratky,Vazby,Klávesové vazby +Keywords[csb]=Klawisze,globalné klawiszowé skrodzënë,schematë skrodzënów,sparłączenia klawiszów,skrodzënë dlô programów +Keywords[cy]=Bysell,Rhwymiadau bysell eang,Cynllun bysell,Llwybrau byr,Llwybrau byr y rhaglen +Keywords[da]=Taster,Globale tastebindinger,Tastesystem,Tastebindinger,genveje,programgenveje +Keywords[de]=Tasten,Tastenzuordnung,Tastenkürzel,Kurzbefehle,Tastenschema,Tastaturlayout +Keywords[el]=Πλήκτρα,Καθολικοί συνδυασμοί πλήκτρων,Θέμα πλήκτρων,Συνδυασμοί πλήκτρων,συντομεύσεις,συντομεύσεις εφαρμογών +Keywords[eo]=klavoj,malloka,signifoj,asocioj,kombinoj,klavkombinoj +Keywords[es]=Teclas,Asociaciones de teclas globales,Esquema de teclas,Asociaciones de teclas,accesos directos,accesos directos de aplicaciones +Keywords[et]=klahvid,globaalsed kiirklahvid,klahviskeem,kiirklahvid,klahvide seosed,rakenduste kiirklahvid +Keywords[eu]=Teklak,tekla elkarketa globalak,teklen eskema,tekla elkarketak lasterbideak,aplikazio lasterbideak +Keywords[fa]=کلیدها، مقیدسازیهای کلید سراسری، طرحوارۀ کلید، مقیدسازیهای کلید، میان‌برها، میان‌برهای کاربرد +Keywords[fi]=Näppäimet,Yleiset näppäinsidokset,Näppäinteema,Näppäinsidokset,pikavalinnat,sovellusten pikavalinnat +Keywords[fr]=touches,raccourcis globaux,modèle de raccourcis,raccourcis clavier,clavier,raccourcis d'applications,applications,raccourcis communs +Keywords[fy]=keys,toetsen,toetsyndielingen,toetsbiningen,key bindings,fluchtoetsen,globaal +Keywords[gl]=Teclas,Atallos de teclado globais,Esquema de teclas,Atallos de teclado,combinacións de teclas,atallos de aplicacións +Keywords[he]=מקשים,מיפוי מקשים גלובליים,תצורת מקשים,מיפוי מקשים,קיצורי דרך,קיצורי דרך של יישומים, Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts +Keywords[hi]=कुंजियाँ,ग्लोबल की-बाइंडिंग्स,कुंजी योजना,की-बाइंडिंग्स,शॉर्टकट्स,अनुप्रयोग शॉर्टकट्स +Keywords[hr]=Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts,Tipke,Prečaci tipkovnice,Raspored tipki,prečaci,prečaci aplikacija +Keywords[hu]=billentyűk,globális billentyűhozzárendelés,billentyűkiosztás,billentyűparancsok,gyorsbillentyűk +Keywords[id]=Keys,Key bindings Global,Key sheme,Key bindings,shortcuts,application shortcuts +Keywords[is]=Lyklar,Hnappar,Flýtihnappar,Flýtilyklar,Lyklabindingar +Keywords[it]=tasti,associazioni globali di tasti,schema di tasti,associazioni di tasti,scorciatoie,scorciatoie delle applicazioni +Keywords[ja]=キー,グローバルキー,キーバインド,Key sheme,キーバインド,ショートカット,アプリケーションショートカット +Keywords[km]=គ្រាប់ចុច,ការ​ចង​គ្រាប់ចុច​សកល,គំនូរ​បំព្រួញ​គ្រាប់ចុច,ការ​ចង​គ្រាប់ចុច,ផ្លូវកាត់,ផ្លូវកាត់​កម្មវិធី +Keywords[lo]=ປຸ່ມພິມ,ປຸ່ມພິມສ່ວນກາງູ,ຊຸດປຸ່ມພິມ,ການຈັບຄູ່ປຸ່ມພິມ,ປຸ່ມພິມລັດ,ແປ້ນພິມລັດ,ປຸ່ມພິມລັດອະພລິເຄຊັນ +Keywords[lt]=Keys,klavišai,Global key bindings,klavišų sietis,Key scheme,klavišų schema,klavišų išdėstymas,Key bindings,shortcuts,spartieji klavišai,application shortcuts,programų spartieji klavišai +Keywords[lv]=Taustiņi,Globālās taustiņu sasaistes,Taustiņu shēma,Taustiņu sasaistes,īsinājumikonas,aplikāciju īsinājumikonas +Keywords[mk]=Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts,Копчиња,Глобални врски на копчиња,Шема на копчиња,Врски на копчиња,кратенки,апликациони кратенки +Keywords[mn]=Товчилуур,Товчилуур холболт,Богино товчилуур, Богино тушаал,Товчилуурын схем,Гарын байрлал +Keywords[nb]=taster,generelle hurtigtaster,hurtigtaster,snarveier,programsnarveier +Keywords[nds]=Tasten,Globale Tastkombinatschonen,Tastschema,Tastkombinatschonen,Programmtasten +Keywords[ne]=कुञ्जी, विश्वब्यापी कुञ्जी बाइन्डिङ, कुञ्जी योजना, कुञ्जी बाइन्डिङ, सर्टकट, अनुप्रयोग सर्टकट +Keywords[nl]=keys,toetsen,toetsenindeling,toetsenbindingen,key bindings,sneltoetsen,globale toetsenbindingen +Keywords[nn]=tastar,globale snøggtastar,tasteoppsett,snøggtastar,snarvegar,programsnarvegar +Keywords[nso]=Dinotlelo,Ditlemo tsa dinotlelo tsa boditshabatshaba,Leano la dinotlelo, Ditselakopana,ditselakopana tsa tshomiso +Keywords[pl]=Klawisze,globalne skróty klawiszowe,schematy skrótów,powiązania klawiszów,skróty dla programów +Keywords[pt]=teclas,teclas globais,esquema de teclas,atribuições de teclas,atalhos,atalhos da aplicação +Keywords[pt_BR]=Teclas,Teclas de atalho globais,esquema de teclado,teclas de atalho,atalhos de aplicativos +Keywords[ro]=taste,asocieri globale de taste,schemă taste,asocieri taste,acceleratori,acceleratori aplicații,scurtături +Keywords[ru]=Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts,клавиши,комбинации клавиш +Keywords[rw]=Buto,Amahuza buto rusange,Igishushanyombonera cya buto,Amahuza buto,amahinanzira, amahinanzira ya porogaramu +Keywords[se]=boalut,oppalaš jođánisboalut,boalločoahkádusat,boalločatnasat,njuolgobálgát,prográmmanjuolgabálgát +Keywords[sk]=Klávesy,Globálne klávesové skratky,schéma kláves,klávesové skratky +Keywords[sl]=tipke,globalne vezi tipk,razporeditev tipk,vezi tipk,tipkovne vezi +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 kortkommandon,bindningar,Tangentbindningar,genvägar,programgenvägar +Keywords[ta]=விசைகள்,உலகலாவிய விசை பிணைப்புகள்,விசை திட்டம்,விசை பிணைப்புகள்,குறுக்குவழிகள்,பயன்பாட்டுக் குறுக்குவழிகள் +Keywords[th]=ปุ่มพิมพ์,ปุ่มพิมพ์ส่วนกลาง,ชุดปุ่มพิมพ์,การจับคู่ปุ่มพิมพ์,ปุ่มพิมพ์ลัด,แป้นพิมพ์ลัด,ปุ่มพิมพ์ลัดแอพพลิเคชัน +Keywords[tr]=tuşlar,Küresel Tuş bağlantıları,Tuş planı,tuş bağlamaları,kısayollar,uygulama kısayolları +Keywords[uk]=клавіші,глобальні прив'язки клавіш,схема клавіш,прив'язка клавіш +Keywords[uz]=Tugmalar,Umumiy tugmalar birikmasi,Tugma qolipi,Tugmalar birikmasi,tugma va dastur birikmasi +Keywords[uz@cyrillic]=Тугмалар,Умумий тугмалар бирикмаси,Тугма қолипи,Тугмалар бирикмаси,тугма ва дастур бирикмаси +Keywords[ven]=Dzikhii,u badekanywa ha khii dzothe,tshikimu tsha khii,u badekanywa ha khii,tshikhau,tshikhau tsha apulifikhesheni +Keywords[vi]=Phím,tổ hợp phím toàn cục,phối hợp phím,gõ tắt với tổ hợp phím,gõ tắt cho ứng dụng +Keywords[wa]=tapes,globås rascourtis di tapes,adjinçmint del taprece,rascourtis di tapes,rascourtis,rascourtis d' programes +Keywords[xh]=Izitshixo,Izibophelelo zesitshixo esiNgqukuva,Udweliso lwesitshixo,Izibophelelo zesitshixo,iindlela ezimfutshane,izicelo zeendlela ezimfutshane +Keywords[zh_CN]=Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts,键,全局键绑定,键盘布局,键绑定,快捷键,程序快捷键 +Keywords[zh_TW]=Keys,Global key bindings,Key scheme,Key bindings,shortcuts,application shortcuts,按鍵,全域按建連結,鍵盤配置,按鍵連結,快速鍵,應用程式捷徑 +Keywords[zu]=Okhiye,Izibopho zokhiye zezizwe,Iplani lokhiye,Izibopho zokhiye,izindlela ezimfushane,izindlela ezimfushane zomyaleli + +Categories=Qt;KDE;X-KDE-settings-accessibility; diff --git a/kcontrol/keys/khotkeys.cpp b/kcontrol/keys/khotkeys.cpp new file mode 100644 index 000000000..869cab71a --- /dev/null +++ b/kcontrol/keys/khotkeys.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2000 Matthias Elter + * Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include +#include "khotkeys.h" + +extern "C" +{ + static void (*khotkeys_init_2)( void ); + static void (*khotkeys_cleanup_2)( void ); + static QString (*khotkeys_get_menu_entry_shortcut_2)( const QString& entry_P ); + static QString (*khotkeys_change_menu_entry_shortcut_2)( const QString& entry_P, + const QString& shortcut_P ); + static bool (*khotkeys_menu_entry_moved_2)( const QString& new_P, const QString& old_P ); + static void (*khotkeys_menu_entry_deleted_2)( const QString& entry_P ); +} + +static bool khotkeys_present = false; +static bool khotkeys_inited = false; + +bool KHotKeys::init() +{ + khotkeys_inited = true; + KLibrary* lib = KLibLoader::self()->library( "kcm_khotkeys.la" ); + if( lib == NULL ) return false; + + khotkeys_init_2 = ( void (*)(void)) ( lib->symbol( "khotkeys_init" )); + khotkeys_cleanup_2 = ( void (*)(void)) ( lib->symbol( "khotkeys_cleanup" )); + khotkeys_get_menu_entry_shortcut_2 = + ( QString (*)( const QString& )) + ( lib->symbol( "khotkeys_get_menu_entry_shortcut" )); + khotkeys_change_menu_entry_shortcut_2 = + ( QString (*)( const QString&, const QString& )) + ( lib->symbol( "khotkeys_change_menu_entry_shortcut" )); + khotkeys_menu_entry_moved_2 = + ( bool (*)( const QString&, const QString& )) + ( lib->symbol( "khotkeys_menu_entry_moved" )); + khotkeys_menu_entry_deleted_2 = + ( void (*)( const QString& )) + ( lib->symbol( "khotkeys_menu_entry_deleted" )); + if( khotkeys_init_2 + && khotkeys_cleanup_2 + && khotkeys_get_menu_entry_shortcut_2 + && khotkeys_change_menu_entry_shortcut_2 + && khotkeys_menu_entry_moved_2 + && khotkeys_menu_entry_deleted_2 ) + { + khotkeys_init_2(); + khotkeys_present = true; + return true; + } + return false; +} + +void KHotKeys::cleanup() +{ + if( khotkeys_inited ) + khotkeys_cleanup_2(); + khotkeys_inited = false; +} + +bool KHotKeys::present() +{ + if( !khotkeys_inited ) + init(); + return khotkeys_present; +} + +QString KHotKeys::getMenuEntryShortcut( const QString& entry_P ) +{ + if( !khotkeys_inited ) + init(); + if( !khotkeys_present ) + return ""; + return khotkeys_get_menu_entry_shortcut_2( entry_P ); +} + +QString KHotKeys::changeMenuEntryShortcut( const QString& entry_P, + const QString shortcut_P ) + { + if( !khotkeys_inited ) + init(); + if( !khotkeys_present ) + return ""; + return khotkeys_change_menu_entry_shortcut_2( entry_P, shortcut_P ); + } + +bool KHotKeys::menuEntryMoved( const QString& new_P, const QString& old_P ) +{ + if( !khotkeys_inited ) + init(); + if( !khotkeys_present ) + return ""; + return khotkeys_menu_entry_moved_2( new_P, old_P ); +} + +void KHotKeys::menuEntryDeleted( const QString& entry_P ) +{ + if( !khotkeys_inited ) + init(); + if( !khotkeys_present ) + return; + khotkeys_menu_entry_deleted_2( entry_P ); +} diff --git a/kcontrol/keys/khotkeys.h b/kcontrol/keys/khotkeys.h new file mode 100644 index 000000000..90ea17985 --- /dev/null +++ b/kcontrol/keys/khotkeys.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2000 Matthias Elter + * Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef __khotkeys_public_h__ +#define __khotkeys_public_h__ + +#include + +// see kdebase/khotkeys/kcontrol for info on these + +class KHotKeys +{ +public: + static bool init(); + static void cleanup(); + static bool present(); + static QString getMenuEntryShortcut( const QString& entry_P ); + static QString changeMenuEntryShortcut( const QString& entry_P, + const QString shortcut_P ); + static bool menuEntryMoved( const QString& new_P, const QString& old_P ); + static void menuEntryDeleted( const QString& entry_P ); +}; + +#endif diff --git a/kcontrol/keys/mac4.kksrc b/kcontrol/keys/mac4.kksrc new file mode 100644 index 000000000..0968a2472 --- /dev/null +++ b/kcontrol/keys/mac4.kksrc @@ -0,0 +1,197 @@ +[Settings] +Name=Mac Scheme +Name[af]=Mac Tema +Name[be]=Схема Mac +Name[bg]=Mac +Name[bn]=ম্যাক্ স্কীম +Name[br]=Steuñv Mac +Name[bs]=Mac šema +Name[ca]=Esquema Mac +Name[cs]=Mac schéma +Name[csb]=Mòtiw Mac-a +Name[cy]=Cynllun Mac +Name[da]=Mac-system +Name[de]=Mac-Design +Name[el]=Μορφή Mac +Name[eo]=Makintoŝa aranĝo +Name[es]=Tema Mac +Name[et]=Maci skeem +Name[eu]=Mac eskema +Name[fa]=طرحوارۀ مکینتاش +Name[fi]=Mac-skeema +Name[fr]=Thème Mac +Name[fy]=Mac-skema +Name[ga]=Scéim Mac +Name[gl]=Esquema Mac +Name[he]=ערכת Mac +Name[hr]=Mac shema +Name[hu]=Mac +Name[id]=Skema Mac +Name[is]=Mac þema +Name[it]=Schema Mac +Name[ja]=Macintosh スキーマ +Name[ka]=Mac სქემა +Name[kk]=Mac сұлбасы +Name[km]=គំនូរ​បំព្រួញ Mac +Name[ko]=Mac 배열 +Name[lo]=ຊຸດຮູບແບບ Mac +Name[lt]=Mac schema +Name[mk]=Mac-шема +Name[mn]=Mac-Схем +Name[nb]=Mac-oppsett +Name[nds]=Mac-Vörbild +Name[ne]=म्याक योजना +Name[nl]=Mac-schema +Name[nn]=Mac-oppsett +Name[nso]=Leano la Mac +Name[pa]=Mac ਸਰੂਪ +Name[pl]=Motyw Mac-a +Name[pt]=Esquema do Mac +Name[pt_BR]=Esquema Mac +Name[ro]=Schemă Mac +Name[ru]=Mac +Name[rw]=Igishushanyombonera Mac +Name[se]=Mac-coakkáldat +Name[sk]=Mac schéma +Name[sl]=Shema Mac +Name[sr]=Mac-ова шема +Name[sr@Latn]=Mac-ova šema +Name[sv]=Mac schema +Name[th]=ใช้แบบของ MAC +Name[tr]=Mac Şeması +Name[tt]=Mac buyınça +Name[uk]=Схема Макінтошу +Name[uz]=Mac mavzusi +Name[uz@cyrillic]=Mac мавзуси +Name[ven]=Tshikimu tsha Mac +Name[vi]=Phối hợp của Mac +Name[wa]=Tinme Mac +Name[xh]=Udweliso lwe Mac +Name[zh_CN]=Mac 方案 +Name[zh_TW]=Mac 按鍵配置 +Name[zu]=Iplani le-Mac +Uses Win Modifier=true + +[Global Shortcuts] +Desktop Screenshot=Ctrl+Shift+3 +Enable/Disable Clipboard Actions=Alt+Ctrl+X +Run Command=Alt+F2 +Halt Computer=none +Halt without Confirmation=none +Kill Window=Alt+Ctrl+Escape +Lock Session=Alt+Ctrl+L +Logout=Alt+Ctrl+Delete +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=Alt+Ctrl+R +Mouse Emulation=none +Popup Launch Menu=Alt+F1 +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=Alt+Ctrl+V +Show Taskmanager=Ctrl+Escape +Show Window List=Alt+F5 +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Alt+Ctrl+K +Switch to Desktop 1=Ctrl+F1 +Switch to Desktop 10=Ctrl+F10 +Switch to Desktop 11=Ctrl+F11 +Switch to Desktop 12=Ctrl+F12 +Switch to Desktop 13=Ctrl+Shift+F1 +Switch to Desktop 14=Ctrl+Shift+F2 +Switch to Desktop 15=Ctrl+Shift+F3 +Switch to Desktop 16=Ctrl+Shift+F4 +Switch to Desktop 2=Ctrl+F2 +Switch to Desktop 3=Ctrl+F3 +Switch to Desktop 4=Ctrl+F4 +Switch to Desktop 5=Ctrl+F5 +Switch to Desktop 6=Ctrl+F6 +Switch to Desktop 7=Ctrl+F7 +Switch to Desktop 8=Ctrl+F8 +Switch to Desktop 9=Ctrl+F9 +Switch to Next Desktop=none +Switch to Previous Desktop=none +Toggle Showing Desktop=Alt+Ctrl+D +Toggle Window Raise/Lower=Ctrl+E +Walk Through Desktop List=none +Walk Through Desktop List (Reverse)=none +Walk Through Desktops=Alt+Tab +Walk Through Desktops (Reverse)=Alt+Shift+Tab +Walk Through Windows=Ctrl+Tab +Walk Through Windows (Reverse)=Ctrl+Shift+Tab +Window Close=Alt+F4 +Window Iconify=none +Window Lower=none +Window Maximize=none +Window Maximize Horizontal=none +Window Maximize Vertical=none +Window Move=none +Window Operations Menu=Alt+F3 +Window Raise=none +Window Resize=none +Window Screenshot=Ctrl+Shift+4 +Window Shade=none +Window to Desktop 1=none +Window to Desktop 10=none +Window to Desktop 11=none +Window to Desktop 12=none +Window to Desktop 13=none +Window to Desktop 14=none +Window to Desktop 15=none +Window to Desktop 16=none +Window to Desktop 2=none +Window to Desktop 3=none +Window to Desktop 4=none +Window to Desktop 5=none +Window to Desktop 6=none +Window to Desktop 7=none +Window to Desktop 8=none +Window to Desktop 9=none +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+B +Back=Alt+Left +Close=Ctrl+W +Copy=Ctrl+C +Cut=Ctrl+X +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+F +FindNext=Ctrl+G +FindPrev=Ctrl+Shift+G +Forward=Alt+Right +GotoLine=none +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V +PopupMenuContext=Menu +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit=Ctrl+Q +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll=Ctrl+A +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/keys/main.cpp b/kcontrol/keys/main.cpp new file mode 100644 index 000000000..c03c26f91 --- /dev/null +++ b/kcontrol/keys/main.cpp @@ -0,0 +1,203 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include +#include +#include + +#include "commandShortcuts.h" +#include "main.h" +#include "modifiers.h" +#include "shortcuts.h" +#include "khotkeys.h" + +/* +| Shortcut Schemes | Modifier Keys | + +o Current scheme o New scheme o Pre-set scheme +| KDE Traditional |v|| +[] Prefer 4-modifier defaults + +o Current scheme +o New scheme +o Pre-set scheme + | KDE Traditional |v|| +[] Prefer 4-modifier defaults + +Global Shortcuts +*/ +KeyModule::KeyModule( QWidget *parent, const char *name ) +: KCModule( parent, name ) +{ + setQuickHelp( i18n("

Keyboard Shortcuts

Using shortcuts you can configure certain actions to be" + " triggered when you press a key or a combination of keys, e.g. Ctrl+C is normally bound to" + " 'Copy'. KDE allows you to store more than one 'scheme' of shortcuts, so you might want" + " to experiment a little setting up your own scheme, although you can still change back to the" + " KDE defaults.

In the 'Global Shortcuts' tab you can configure non-application-specific" + " bindings, like how to switch desktops or maximize a window; in the 'Application Shortcuts' tab" + " you will find bindings typically used in applications, such as copy and paste.")); + + initGUI(); +} + +KeyModule::~KeyModule() +{ + KHotKeys::cleanup(); +} + +void KeyModule::initGUI() +{ + m_pTab = new QTabWidget( this ); + QVBoxLayout *l = new QVBoxLayout(this); + l->addWidget(m_pTab); + + m_pShortcuts = new ShortcutsModule( this ); + m_pTab->addTab( m_pShortcuts, i18n("Shortcut Schemes") ); + connect( m_pShortcuts, SIGNAL(changed(bool)), SIGNAL(changed(bool)) ); + + m_pCommandShortcuts = new CommandShortcutsModule ( this ); + m_pTab->addTab( m_pCommandShortcuts, i18n("Command Shortcuts") ); + connect( m_pCommandShortcuts, SIGNAL(changed(bool)), SIGNAL(changed(bool)) ); + connect( m_pTab, SIGNAL(currentChanged(QWidget*)), m_pCommandShortcuts, SLOT(showing(QWidget*)) ); + + m_pModifiers = new ModifiersModule( this ); + m_pTab->addTab( m_pModifiers, i18n("Modifier Keys") ); + connect( m_pModifiers, SIGNAL(changed(bool)), SIGNAL(changed(bool)) ); +} + +void KeyModule::load() +{ + load( false ); +} + +// Called when [Reset] is pressed +void KeyModule::load( bool useDefaults ) +{ + kdDebug(125) << "KeyModule::load()" << endl; + m_pShortcuts->load(); + m_pCommandShortcuts->load(); + m_pModifiers->load( useDefaults ); + + emit changed( useDefaults ); +} + +// When [Apply] or [OK] are clicked. +void KeyModule::save() +{ + kdDebug(125) << "KeyModule::save()" << endl; + m_pShortcuts->save(); + m_pCommandShortcuts->save(); + m_pModifiers->save(); +} + +void KeyModule::defaults() +{ + kdDebug(125) << "KeyModule::defaults()" << endl; + m_pShortcuts->defaults(); + m_pCommandShortcuts->defaults(); + m_pModifiers->defaults(); +} + +void KeyModule::resizeEvent( QResizeEvent * ) +{ + m_pTab->setGeometry( 0, 0, width(), height() ); +} + +//---------------------------------------------------- + +extern "C" +{ + KDE_EXPORT KCModule *create_keys(QWidget *parent, const char * /*name*/) + { + // What does this do? Why not insert klipper and kxkb, too? --ellis, 2002/01/15 + KGlobal::locale()->insertCatalogue("kwin"); + KGlobal::locale()->insertCatalogue("kdesktop"); + KGlobal::locale()->insertCatalogue("kicker"); + return new KeyModule(parent, "kcmkeys"); + } + + KDE_EXPORT void initModifiers() + { + kdDebug(125) << "KeyModule::initModifiers()" << endl; + + KConfigGroupSaver cgs( KGlobal::config(), "Keyboard" ); + bool bMacSwap = KGlobal::config()->readBoolEntry( "Mac Modifier Swap", false ); + if( bMacSwap ) + ModifiersModule::setupMacModifierKeys(); + } + + KDE_EXPORT void init_keys() + { + kdDebug(125) << "KeyModule::init()\n"; + + /*kdDebug(125) << "KKeyModule::init() - Initialize # Modifier Keys Settings\n"; + KConfigGroupSaver cgs( KGlobal::config(), "Keyboard" ); + QString fourMods = KGlobal::config()->readEntry( "Use Four Modifier Keys", KAccel::keyboardHasMetaKey() ? "true" : "false" ); + KAccel::useFourModifierKeys( fourMods == "true" ); + bool bUseFourModifierKeys = KAccel::useFourModifierKeys(); + KGlobal::config()->writeEntry( "User Four Modifier Keys", bUseFourModifierKeys ? "true" : "false", true, true ); + */ + KAccelActions* keys = new KAccelActions(); + + kdDebug(125) << "KeyModule::init() - Load Included Bindings\n"; +// this should match the included files above +#define NOSLOTS +#define SHIFT Qt::SHIFT +#define CTRL Qt::CTRL +#define ALT Qt::ALT +#include "../../klipper/klipperbindings.cpp" +#include "../../kwin/kwinbindings.cpp" +#define KICKER_ALL_BINDINGS +#include "../../kicker/kicker/core/kickerbindings.cpp" +#include "../../kicker/taskbar/taskbarbindings.cpp" +#include "../../kdesktop/kdesktopbindings.cpp" +#include "../../kxkb/kxkbbindings.cpp" + + // Write all the global keys to kdeglobals. + // This is needed to be able to check for conflicts with global keys in app's keyconfig + // dialogs, kdeglobals is empty as long as you don't apply any change in controlcenter/keys. + // However, avoid writing at every KDE startup, just update them after every rebuild of this file. + KConfigGroup group( KGlobal::config(), "Global Shortcuts" ); + if( group.readEntry( "Defaults timestamp" ) != __DATE__ __TIME__ ) { + kdDebug(125) << "KeyModule::init() - Read Config Bindings\n"; + // Check for old group, + if( KGlobal::config()->hasGroup( "Global Keys" ) ) { + keys->readActions( "Global Keys" ); + KGlobal::config()->deleteGroup( "Global Keys", true, true ); + } + keys->readActions( "Global Shortcuts" ); + KGlobal::config()->deleteGroup( "Global Shortcuts", true, true ); + + kdDebug(125) << "KeyModule::init() - Write Config Bindings\n"; + keys->writeActions( "Global Shortcuts", 0, true, true ); + group.writeEntry( "Defaults timestamp", __DATE__ __TIME__, true, true ); + } + delete keys; + + initModifiers(); + } +} + +#include "main.moc" diff --git a/kcontrol/keys/main.h b/kcontrol/keys/main.h new file mode 100644 index 000000000..5cabba122 --- /dev/null +++ b/kcontrol/keys/main.h @@ -0,0 +1,57 @@ +/* + * main.h + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __keys_main_h +#define __keys_main_h + +#include +#include + +class CommandShortcutsModule; +class ShortcutsModule; +class ModifiersModule; + +class KeyModule : public KCModule +{ + Q_OBJECT + public: + KeyModule( QWidget *parent, const char *name ); + ~KeyModule(); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + + protected: + void initGUI(); + void resizeEvent( QResizeEvent* ); + + private: + QTabWidget* m_pTab; + CommandShortcutsModule* m_pCommandShortcuts; + ShortcutsModule* m_pShortcuts; + ModifiersModule* m_pModifiers; +}; + +#endif diff --git a/kcontrol/keys/modifiers.cpp b/kcontrol/keys/modifiers.cpp new file mode 100644 index 000000000..8391c7938 --- /dev/null +++ b/kcontrol/keys/modifiers.cpp @@ -0,0 +1,354 @@ +#include "modifiers.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define XK_MISCELLANY +#define XK_XKB_KEYS +#include +#include +#include +#include +#include +#undef NONE + +/*Modifier Scheme + PC: Shift/Ctrl/Alt/Win + Mac: Shift/Command/Apple/Alt + Custom + +X11 +Modifier XMod Label +Shift Shift [Shift] +Ctrl Control [Ctrl] Ctrl|Apple +Alt [Mod1] [Alt] Alt|Command +Win [Mod4] [Win] Win|Alt|Meta|Super|Hyper +Extra1 [] [] User definable + + Shift + Lock Caps_Lock + Control Control_L, Control_R + Mod1 Alt_L, Alt_R + Mod2 Num_Lock + Mod3 Mode_switch + Mod4 Super_L, Super_R + Mod5 Scroll_Lock +*/ + +//For Mac keyboards: +//1) labels: Shift | Ctrl | Option | Command +//2) swap Ctrl & Command + +ModifiersModule::ModifiersModule( QWidget *parent, const char *name ) +: QWidget( parent, name ) +{ + initGUI(); + load( false ); +} + +void ModifiersModule::load( bool useDefaults ) +{ + KConfig *c = KGlobal::config(); + + c->setReadDefaults( useDefaults ); + + c->setGroup( "Keyboard" ); + + m_sLabelCtrlOrig = c->readEntry( "Label Ctrl", "Ctrl" ); + m_sLabelAltOrig = c->readEntry( "Label Alt", "Alt" ); + m_sLabelWinOrig = c->readEntry( "Label Win", "Win" ); + + m_bMacKeyboardOrig = c->readBoolEntry( "Mac Keyboard", false ); + m_bMacSwapOrig = m_bMacKeyboardOrig && c->readBoolEntry( "Mac Modifier Swap", false ); + + updateWidgetData(); +} + +// When [Apply] or [OK] are clicked. +void ModifiersModule::save() +{ + kdDebug(125) << "ModifiersModule::save()" << endl; + + KConfigGroupSaver cgs( KGlobal::config(), "Keyboard" ); + + if( m_plblCtrl->text() != "Ctrl" ) + KGlobal::config()->writeEntry( "Label Ctrl", m_plblCtrl->text(), true, true ); + else + KGlobal::config()->deleteEntry( "Label Ctrl", false, true ); + + if( m_plblAlt->text() != "Alt" ) + KGlobal::config()->writeEntry( "Label Alt", m_plblAlt->text(), true, true ); + else + KGlobal::config()->deleteEntry( "Label Alt", false, true ); + + if( m_plblWin->text() != "Win" ) + KGlobal::config()->writeEntry( "Label Win", m_plblWin->text(), true, true ); + else + KGlobal::config()->deleteEntry( "Label Win", false, true ); + + if( m_pchkMacKeyboard->isChecked() ) + KGlobal::config()->writeEntry( "Mac Keyboard", true, true, true ); + else + KGlobal::config()->deleteEntry( "Mac Keyboard", false, true ); + + bool bMacSwap = m_pchkMacKeyboard->isChecked() && m_pchkMacSwap->isChecked(); + if( bMacSwap ) + KGlobal::config()->writeEntry( "Mac Modifier Swap", true, true, true ); + else + KGlobal::config()->deleteEntry( "Mac Modifier Swap", false, true ); + + KGlobal::config()->sync(); + + if( m_bMacSwapOrig != bMacSwap ) { + if( bMacSwap ) + setupMacModifierKeys(); + else + kapp->kdeinitExec("kxkb"); + m_bMacSwapOrig = bMacSwap; + updateWidgets(); + } +} + +void ModifiersModule::defaults() +{ + load( true ); +} + +#define SET_CODE_SYM( iCode, sym ) \ + if( iCode >= keyCodeMin && iCode <= keyCodeMax ) \ + rgKeySyms[(iCode-keyCodeMin) * nSymsPerCode] = sym; +#define SET_MOD_CODE( iMod, code1, code2 ) \ + xmk->modifiermap[iMod * xmk->max_keypermod + 0] = code1; \ + xmk->modifiermap[iMod * xmk->max_keypermod + 1] = code2; +void ModifiersModule::setupMacModifierKeys() +{ + const int CODE_Ctrl_L = 0x25, CODE_Ctrl_R = 0x6d; + const int CODE_Win_L = 0x73, CODE_Win_R = 0x74; + //const int CODE_Alt_L = 0x40, CODE_Alt_R = 0x71; + int keyCodeMin, keyCodeMax, nKeyCodes, nSymsPerCode; + + XDisplayKeycodes( qt_xdisplay(), &keyCodeMin, &keyCodeMax ); + nKeyCodes = keyCodeMax - keyCodeMin + 1; + KeySym* rgKeySyms = XGetKeyboardMapping( qt_xdisplay(), keyCodeMin, nKeyCodes, &nSymsPerCode ); + XModifierKeymap* xmk = XGetModifierMapping( qt_xdisplay() ); + + SET_CODE_SYM( CODE_Ctrl_L, XK_Super_L ) + SET_CODE_SYM( CODE_Ctrl_R, XK_Super_R ) + SET_CODE_SYM( CODE_Win_L, XK_Control_L ) + SET_CODE_SYM( CODE_Win_R, XK_Control_R ) + //SET_CODE_SYM( CODE_Win_L, XK_Alt_L ) + //SET_CODE_SYM( CODE_Win_R, XK_Alt_R ) + //SET_CODE_SYM( CODE_Alt_L, XK_Control_L ) + //SET_CODE_SYM( CODE_Alt_R, XK_Control_R ) + + SET_MOD_CODE( ControlMapIndex, CODE_Win_L, CODE_Win_R ); + SET_MOD_CODE( Mod4MapIndex, CODE_Ctrl_L, CODE_Ctrl_R ); + //SET_MOD_CODE( ControlMapIndex, CODE_Alt_L, CODE_Alt_R ); + //SET_MOD_CODE( Mod1MapIndex, CODE_Win_L, CODE_Win_R ); + //SET_MOD_CODE( Mod4MapIndex, CODE_Ctrl_L, CODE_Ctrl_R ); + + XSetModifierMapping( qt_xdisplay(), xmk ); + XChangeKeyboardMapping( qt_xdisplay(), keyCodeMin, nSymsPerCode, rgKeySyms, nKeyCodes ); + XFree( rgKeySyms ); + XFreeModifiermap( xmk ); +} +#undef SET_CODE_SYM + +void ModifiersModule::initGUI() +{ + QGridLayout* pLayoutTop = new QGridLayout( this, 6, 2, KDialog::marginHint() ); + pLayoutTop->setColStretch( 1, 1 ); + + QGroupBox* pGroup = new QGroupBox( 2, Qt::Horizontal, i18n("KDE Modifiers"), this ); + pLayoutTop->addWidget( pGroup, 0, 0 ); + + QLabel* plbl = new QLabel( i18n("Modifier"), pGroup ); + QFont font = plbl->font(); + font.setUnderline( true ); + font.setWeight( QFont::Bold ); + plbl->setFont( font ); + plbl = new QLabel( i18n("X11-Mod"), pGroup ); + plbl->setFont( font ); + + new QLabel( i18n("QAccel", "Shift"), pGroup ); + new QLabel( "shift", pGroup ); + + m_plblCtrl = new QLabel( i18n("QAccel", "Ctrl"), pGroup ); + new QLabel( "control", pGroup ); + + m_plblAlt = new QLabel( i18n("QAccel", "Alt"), pGroup ); + new QLabel( "mod1", pGroup ); + + m_plblWin = new QLabel( i18n("Win"), pGroup ); + m_plblWinModX = new QLabel( "", pGroup ); + /*m_pcbWinX = newModXComboBox( pGroup ); + int i; + switch( KKeyNative::modX(KKey::WIN) ) { + case Mod2Mask: i = 1; break; + case Mod3Mask: i = 2; break; + case Mod4Mask: i = 3; break; + case Mod5Mask: i = 5; break; + default: i = 0; + } + m_pcbWinX->setCurrentItem( i );*/ + + m_pchkMacKeyboard = new QCheckBox( i18n("Macintosh keyboard"), this ); + m_pchkMacKeyboard->setChecked( m_bMacKeyboardOrig ); + connect( m_pchkMacKeyboard, SIGNAL(clicked()), SLOT(slotMacKeyboardClicked()) ); + pLayoutTop->addWidget( m_pchkMacKeyboard, 1, 0 ); + + m_pchkMacSwap = new QCheckBox( i18n("MacOS-style modifier usage"), this ); + m_pchkMacSwap->setChecked( m_bMacSwapOrig ); + QWhatsThis::add( m_pchkMacSwap, + i18n("Checking this box will change your X Modifier Mapping to " + "better reflect the standard MacOS modifier key usage. " + "It allows you to use Command+C for Copy, for instance, " + "instead of the PC standard of Ctrl+C. " + "Command will be used for application and console commands, " + "Option as a command modifier and for navigating menus and dialogs, " + "and Control for window manager commands.") ); + connect( m_pchkMacSwap, SIGNAL(clicked()), SLOT(slotMacSwapClicked()) ); + pLayoutTop->addWidget( m_pchkMacSwap, 2, 0 ); + + //------------------ + pLayoutTop->addRowSpacing( 3, KDialog::spacingHint() * 3 ); + + pGroup = new QGroupBox( 1, Qt::Horizontal, i18n("X Modifier Mapping"), this ); + pLayoutTop->addWidget( pGroup, 4, 0 ); + + m_plstXMods = new KListView( pGroup ); + m_plstXMods->setSorting( -1 ); + m_plstXMods->setSelectionMode( QListView::NoSelection ); + m_plstXMods->setAllColumnsShowFocus( true ); + m_plstXMods->addColumn( i18n("X11-Mod") ); + + new KListViewItem( m_plstXMods, "mod5" ); + new KListViewItem( m_plstXMods, "mod4" ); + new KListViewItem( m_plstXMods, "mod3" ); + new KListViewItem( m_plstXMods, "mod2" ); + new KListViewItem( m_plstXMods, "mod1" ); + new KListViewItem( m_plstXMods, "control" ); + new KListViewItem( m_plstXMods, "lock" ); + new KListViewItem( m_plstXMods, "shift" ); + + //------------------ + pLayoutTop->setRowStretch( 5, 1 ); + + updateWidgets(); +} + +/*KComboBox* ModifiersModule::newModXComboBox( QWidget* parent ) +{ + KComboBox* pcb = new KComboBox( parent ); + pcb->insertItem( "" ); + pcb->insertItem( "mod2" ); + pcb->insertItem( "mod3" ); + pcb->insertItem( "mod4" ); + pcb->insertItem( "mod5" ); + return pcb; +}*/ + +void ModifiersModule::updateWidgetData() +{ + m_plblCtrl->setText( m_sLabelCtrlOrig ); + m_plblAlt->setText( m_sLabelAltOrig ); + m_plblWin->setText( m_sLabelWinOrig ); + m_pchkMacKeyboard->setChecked( m_bMacKeyboardOrig ); + m_pchkMacSwap->setChecked( m_bMacSwapOrig ); + m_pchkMacSwap->setEnabled( m_bMacKeyboardOrig ); +} + +void ModifiersModule::updateWidgets() +{ + if( m_pchkMacKeyboard->isChecked() ) { + // If keys are swapped around to reflect MacOS norms: + if( m_pchkMacSwap->isChecked() ) { + m_plblCtrl->setText( i18n("Command") ); // Ctrl in Alt's place + m_plblAlt->setText( i18n("Option") ); // Alt in Win's place + m_plblWin->setText( i18n("Control") ); // Win in Ctrl's place + } else { + m_plblCtrl->setText( i18n("Control") ); // Ctrl labeled Control + m_plblAlt->setText( i18n("Option") ); // Alt labeled Command + m_plblWin->setText( i18n("Command") ); // Win labeled Option + } + m_pchkMacSwap->setEnabled( true ); + } else { + m_plblCtrl->setText( i18n("QAccel", "Ctrl") ); + m_plblAlt->setText( i18n("QAccel", "Alt") ); + m_plblWin->setText( i18n("Win") ); + m_pchkMacSwap->setEnabled( false ); + } + + XModifierKeymap* xmk = XGetModifierMapping( qt_xdisplay() ); + + for( int iKey = m_plstXMods->columns()-1; iKey < xmk->max_keypermod; iKey++ ) + m_plstXMods->addColumn( i18n("Key %1").arg(iKey+1) ); + + //int iModWinDef = -1; + for( int iMod = 0; iMod < 8; iMod++ ) { + // Find the default modifier index for the Win key. + /*if( iMod > Mod2Index ) { + uint symX = XKeycodeToKeysym( qt_xdisplay(), xmk->modifiermap[xmk->max_keypermod * iMod], 0 ); + if( symX == XK_Super_L || symX == XK_Super_R ) + iModWinDef = iMod; + else if( iModWinDef == -1 && (symX == XK_Meta_L || symX == XK_Meta_R) ) + iModWinDef = iMod; + }*/ + + // Insert items into X modifier map list + for( int iKey = 0; iKey < xmk->max_keypermod; iKey++ ) { + uint symX = XKeycodeToKeysym( qt_xdisplay(), xmk->modifiermap[xmk->max_keypermod * iMod + iKey], 0 ); + m_plstXMods->itemAtIndex( iMod )->setText( 1 + iKey, XKeysymToString( symX ) ); + } + } + + XFreeModifiermap( xmk ); + + int i; + switch( KKeyNative::modX(KKey::WIN) ) { + case Mod2Mask: i = 2; break; + case Mod3Mask: i = 3; break; + case Mod4Mask: i = 4; break; + case Mod5Mask: i = 5; break; + default: i = 0; + } + if( i != 0 ) + m_plblWinModX->setText( "mod" + QString::number(i) ); + else + m_plblWinModX->setText( "<" + i18n("None") + ">" ); +} + +void ModifiersModule::slotMacKeyboardClicked() +{ + updateWidgets(); + emit changed( true ); +} + +void ModifiersModule::slotMacSwapClicked() +{ + if( m_pchkMacKeyboard->isChecked() && !KKeyNative::keyboardHasWinKey() ) { + KMessageBox::sorry( this, + i18n("You can only activate this option if your " + "X keyboard layout has the 'Super' or 'Meta' keys " + "properly configured as modifier keys."), + "Incompatibility" ); + m_pchkMacSwap->setChecked( false ); + } else { + updateWidgets(); + emit changed( true ); + } +} + +#include "modifiers.moc" diff --git a/kcontrol/keys/modifiers.h b/kcontrol/keys/modifiers.h new file mode 100644 index 000000000..60ce76ae9 --- /dev/null +++ b/kcontrol/keys/modifiers.h @@ -0,0 +1,49 @@ +#ifndef __MODIFIERS_MODULE_H +#define __MODIFIERS_MODULE_H + +#include + +class QCheckBox; +class QLabel; +class KComboBox; +class KListView; + +class ModifiersModule : public QWidget +{ + Q_OBJECT + public: + ModifiersModule( QWidget *parent = 0, const char *name = 0 ); + + void load( bool useDefaults ); + void save(); + void defaults(); + + static void setupMacModifierKeys(); + + signals: + void changed( bool ); + + protected: + bool m_bMacKeyboardOrig, m_bMacSwapOrig; + QString m_sLabelCtrlOrig, m_sLabelAltOrig, m_sLabelWinOrig; + + QLabel* m_plblCtrl, * m_plblAlt, * m_plblWin; + QLabel* m_plblWinModX; + QCheckBox* m_pchkMacKeyboard; + KListView* m_plstXMods; + QCheckBox* m_pchkMacSwap; + + void initGUI(); + // Places the values in the *Orig variables into their + // respective widgets. + void updateWidgetData(); + // Updates the labels according to the check-box settings + // and also reads in the X modifier map. + void updateWidgets(); + + protected slots: + void slotMacKeyboardClicked(); + void slotMacSwapClicked(); +}; + +#endif diff --git a/kcontrol/keys/shortcuts.cpp b/kcontrol/keys/shortcuts.cpp new file mode 100644 index 000000000..e65364f4c --- /dev/null +++ b/kcontrol/keys/shortcuts.cpp @@ -0,0 +1,435 @@ +/* + * shortcuts.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * Copyright (c) 2001 Ellis Whitehead + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "shortcuts.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ShortcutsModule::ShortcutsModule( QWidget *parent, const char *name ) +: QWidget( parent, name ) +{ + initGUI(); +} + +ShortcutsModule::~ShortcutsModule() +{ + delete m_pListGeneral; + delete m_pListSequence; + delete m_pListApplication; +} + +// Called when [Reset] is pressed +void ShortcutsModule::load() +{ + kdDebug(125) << "ShortcutsModule::load()" << endl; + slotSchemeCur(); +} + +// When [Apply] or [OK] are clicked. +void ShortcutsModule::save() +{ + kdDebug(125) << "ShortcutsModule::save()" << endl; + + // FIXME: This isn't working. Why? -- ellis, 2002/01/27 + // Check for old group, + if( KGlobal::config()->hasGroup( "Keys" ) ) { + KGlobal::config()->deleteGroup( "Keys", true, true ); + } + KGlobal::config()->sync(); + + m_pkcGeneral->commitChanges(); + m_pkcSequence->commitChanges(); + m_pkcApplication->save(); + + m_actionsGeneral.writeActions( "Global Shortcuts", 0, true, true ); + m_actionsSequence.writeActions( "Global Shortcuts", 0, true, true ); + + KIPC::sendMessageAll( KIPC::SettingsChanged, KApplication::SETTINGS_SHORTCUTS ); +} + +void ShortcutsModule::defaults() +{ + m_pkcGeneral->allDefault(); + m_pkcSequence->allDefault(); + m_pkcApplication->allDefault(); +} + +QString ShortcutsModule::quickHelp() const +{ + return i18n("

Key Bindings

Using key bindings you can configure certain actions to be" + " triggered when you press a key or a combination of keys, e.g. Ctrl+C is normally bound to" + " 'Copy'. KDE allows you to store more than one 'scheme' of key bindings, so you might want" + " to experiment a little setting up your own scheme while you can still change back to the" + " KDE defaults.

In the tab 'Global Shortcuts' you can configure non-application specific" + " bindings like how to switch desktops or maximize a window. In the tab 'Application Shortcuts'" + " you will find bindings typically used in applications, such as copy and paste."); +} + +void ShortcutsModule::initGUI() +{ + kdDebug(125) << "A-----------" << endl; + KAccelActions* keys = &m_actionsGeneral; +// see also KShortcutsModule::init() below !!! +#define NOSLOTS +#define KICKER_ALL_BINDINGS +#include "../../kwin/kwinbindings.cpp" +#include "../../kicker/kicker/core/kickerbindings.cpp" +#include "../../kicker/taskbar/taskbarbindings.cpp" +#include "../../kdesktop/kdesktopbindings.cpp" +#include "../../klipper/klipperbindings.cpp" +#include "../../kxkb/kxkbbindings.cpp" + + kdDebug(125) << "B-----------" << endl; + m_actionsSequence.init( m_actionsGeneral ); + + kdDebug(125) << "C-----------" << endl; + createActionsGeneral(); + kdDebug(125) << "D-----------" << endl; + createActionsSequence(); + kdDebug(125) << "E-----------" << endl; + + kdDebug(125) << "F-----------" << endl; + QVBoxLayout* pVLayout = new QVBoxLayout( this, KDialog::marginHint() ); + + pVLayout->addSpacing( KDialog::marginHint() ); + + // (o) [Current ] ( ) New + + QHBoxLayout *pHLayout = new QHBoxLayout( pVLayout, KDialog::spacingHint() ); + QButtonGroup* pGroup = new QButtonGroup( this ); + pGroup->hide(); + + m_prbPre = new QRadioButton( "", this ); + connect( m_prbPre, SIGNAL(clicked()), SLOT(slotSchemeCur()) ); + pGroup->insert( m_prbPre ); + pHLayout->addWidget( m_prbPre ); + + m_pcbSchemes = new KComboBox( this ); + m_pcbSchemes->setMinimumWidth( 100 ); + m_pcbSchemes->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ); + connect( m_pcbSchemes, SIGNAL(activated(int)), SLOT(slotSelectScheme(int)) ); + pHLayout->addWidget( m_pcbSchemes ); + + pHLayout->addSpacing( KDialog::marginHint() ); + + m_pbtnRemove = new QPushButton( i18n("&Remove"), this ); + m_pbtnRemove->setEnabled( false ); + connect( m_pbtnRemove, SIGNAL(clicked()), SLOT(slotRemoveScheme()) ); + QWhatsThis::add( m_pbtnRemove, i18n("Click here to remove the selected key bindings scheme. You cannot" + " remove the standard system-wide schemes 'Current scheme' and 'KDE default'.") ); + pHLayout->addWidget( m_pbtnRemove ); + + pHLayout->addSpacing( KDialog::marginHint() * 3 ); + + m_prbNew = new QRadioButton( i18n("New scheme"), this ); + m_prbNew->setEnabled( false ); + pGroup->insert( m_prbNew ); + pHLayout->addWidget( m_prbNew ); + + m_pbtnSave = new QPushButton( i18n("&Save..."), this ); + m_pbtnSave->setEnabled( false ); + QWhatsThis::add( m_pbtnSave, i18n("Click here to add a new key bindings scheme. You will be prompted for a name.") ); + connect( m_pbtnSave, SIGNAL(clicked()), SLOT(slotSaveSchemeAs()) ); + pHLayout->addWidget( m_pbtnSave ); + + pHLayout->addStretch( 1 ); + + m_pTab = new QTabWidget( this ); + m_pTab->setMargin( KDialog::marginHint() ); + pVLayout->addWidget( m_pTab ); + + m_pListGeneral = new KAccelShortcutList( m_actionsGeneral, true ); + m_pkcGeneral = new KKeyChooser( m_pListGeneral, this, KKeyChooser::Global, false ); + m_pTab->addTab( m_pkcGeneral, i18n("&Global Shortcuts") ); + connect( m_pkcGeneral, SIGNAL(keyChange()), SLOT(slotKeyChange()) ); + + m_pListSequence = new KAccelShortcutList( m_actionsSequence, true ); + m_pkcSequence = new KKeyChooser( m_pListSequence, this, KKeyChooser::Global, false ); + m_pTab->addTab( m_pkcSequence, i18n("Shortcut Se&quences") ); + connect( m_pkcSequence, SIGNAL(keyChange()), SLOT(slotKeyChange()) ); + + m_pListApplication = new KStdAccel::ShortcutList; + m_pkcApplication = new KKeyChooser( m_pListApplication, this, KKeyChooser::Standard, false ); + m_pTab->addTab( m_pkcApplication, i18n("App&lication Shortcuts") ); + connect( m_pkcApplication, SIGNAL(keyChange()), SLOT(slotKeyChange()) ); + + kdDebug(125) << "G-----------" << endl; + readSchemeNames(); + + kdDebug(125) << "I-----------" << endl; + slotSchemeCur(); + + kdDebug(125) << "J-----------" << endl; +} + +void ShortcutsModule::createActionsGeneral() +{ + KAccelActions& actions = m_actionsGeneral; + + for( uint i = 0; i < actions.count(); i++ ) { + QString sConfigKey = actions[i].name(); + //kdDebug(125) << "sConfigKey: " << sConfigKey << endl; + int iLastSpace = sConfigKey.findRev( ' ' ); + bool bIsNum = false; + if( iLastSpace >= 0 ) + sConfigKey.mid( iLastSpace+1 ).toInt( &bIsNum ); + + //kdDebug(125) << "sConfigKey: " << sConfigKey + // << " bIsNum: " << bIsNum << endl; + if( bIsNum && !sConfigKey.contains( ':' ) ) { + actions[i].setConfigurable( false ); + actions[i].setName( QString::null ); + } + } +} + +void ShortcutsModule::createActionsSequence() +{ + KAccelActions& actions = m_actionsSequence; + + for( uint i = 0; i < actions.count(); i++ ) { + QString sConfigKey = actions[i].name(); + //kdDebug(125) << "sConfigKey: " << sConfigKey << endl; + int iLastSpace = sConfigKey.findRev( ' ' ); + bool bIsNum = false; + if( iLastSpace >= 0 ) + sConfigKey.mid( iLastSpace+1 ).toInt( &bIsNum ); + + //kdDebug(125) << "sConfigKey: " << sConfigKey + // << " bIsNum: " << bIsNum << endl; + if( !bIsNum && !sConfigKey.contains( ':' ) ) { + actions[i].setConfigurable( false ); + actions[i].setName( QString::null ); + } + } +} + +void ShortcutsModule::readSchemeNames() +{ + QStringList schemes = KGlobal::dirs()->findAllResources("data", "kcmkeys/*.kksrc"); + + m_pcbSchemes->clear(); + m_rgsSchemeFiles.clear(); + + i18n("User-Defined Scheme"); + m_pcbSchemes->insertItem( i18n("Current Scheme") ); + m_rgsSchemeFiles.append( "cur" ); + + // This for system files + for ( QStringList::ConstIterator it = schemes.begin(); it != schemes.end(); ++it) { + // KPersonalizer relies on .kksrc files containing all the keyboard shortcut + // schemes for various setups. It also requires the KDE defaults to be in + // a .kksrc file. The KDE defaults shouldn't be listed here. + //if( r.search( *it ) != -1 ) + // continue; + + KSimpleConfig config( *it, true ); + config.setGroup( "Settings" ); + QString str = config.readEntry( "Name" ); + + m_pcbSchemes->insertItem( str ); + m_rgsSchemeFiles.append( *it ); + } +} + +void ShortcutsModule::resizeEvent( QResizeEvent * ) +{ + //m_pTab->setGeometry(0,0,width(),height()); +} + +void ShortcutsModule::slotSchemeCur() +{ + kdDebug(125) << "ShortcutsModule::slotSchemeCur()" << endl; + //m_pcbSchemes->setCurrentItem( 0 ); + slotSelectScheme(); +} + +void ShortcutsModule::slotKeyChange() +{ + kdDebug(125) << "ShortcutsModule::slotKeyChange()" << endl; + m_prbNew->setEnabled( true ); + m_prbNew->setChecked( true ); + m_pbtnSave->setEnabled( true ); + emit changed( true ); +} + +void ShortcutsModule::slotSelectScheme( int ) +{ + i18n("Your current changes will be lost if you load another scheme before saving this one."); + kdDebug(125) << "ShortcutsModule::slotSelectScheme( " << m_pcbSchemes->currentItem() << " )" << endl; + QString sFilename = m_rgsSchemeFiles[ m_pcbSchemes->currentItem() ]; + + if( sFilename == "cur" ) { + // TODO: remove nulls params + m_pkcGeneral->syncToConfig( "Global Shortcuts", 0, true ); + m_pkcSequence->syncToConfig( "Global Shortcuts", 0, true ); + m_pkcApplication->syncToConfig( "Shortcuts", 0, false ); + } else { + KSimpleConfig config( sFilename ); + config.setGroup( "Settings" ); + //m_sBaseSchemeFile = config.readEntry( "Name" ); + + // If the user's keyboard layout doesn't support the Win key, + // but this layout scheme requires it, + if( !KKeyNative::keyboardHasWinKey() + && config.readBoolEntry( "Uses Win Modifier", false ) ) { + // TODO: change "Win" to Win's label. + int ret = KMessageBox::warningContinueCancel( this, + i18n("This scheme requires the \"%1\" modifier key, which is not " + "available on your keyboard layout. Do you wish to view it anyway?" ) + .arg(i18n("Win")) ); + if( ret == KMessageBox::Cancel ) + return; + } + + m_pkcGeneral->syncToConfig( "Global Shortcuts", &config, true ); + m_pkcSequence->syncToConfig( "Global Shortcuts", &config, true ); + m_pkcApplication->syncToConfig( "Shortcuts", &config, false ); + } + + m_prbPre->setChecked( true ); + m_prbNew->setEnabled( false ); + m_pbtnSave->setEnabled( false ); + emit changed(true); +} + +void ShortcutsModule::slotSaveSchemeAs() +{ + QString sName, sFile; + bool bNameValid, ok; + int iScheme = -1; + + sName = m_pcbSchemes->currentText(); + + do { + bNameValid = true; + + sName = KInputDialog::getText( i18n( "Save Key Scheme" ), + i18n( "Enter a name for the key scheme:" ), sName, &ok, this ); + + if( ok ) { + sName = sName.simplifyWhiteSpace(); + sFile = sName; + + int ind = 0; + while( ind < (int) sFile.length() ) { + // parse the string for first white space + ind = sFile.find(" "); + if( ind == -1 ) { + ind = sFile.length(); + break; + } + + // remove from string + sFile.remove( ind, 1 ); + + // Make the next letter upper case + QString s = sFile.mid( ind, 1 ); + s = s.upper(); + sFile.replace( ind, 1, s ); + } + + iScheme = -1; + for( int i = 0; i < (int) m_pcbSchemes->count(); i++ ) { + if( sName.lower() == (m_pcbSchemes->text(i)).lower() ) { + iScheme = i; + + int result = KMessageBox::warningContinueCancel( 0, + i18n("A key scheme with the name '%1' already exists;\n" + "do you want to overwrite it?\n").arg(sName), + i18n("Save Key Scheme"), + i18n("Overwrite")); + bNameValid = (result == KMessageBox::Continue); + } + } + } else + return; + } while( !bNameValid ); + + disconnect( m_pcbSchemes, SIGNAL(activated(int)), this, SLOT(slotSelectScheme(int)) ); + + QString kksPath = KGlobal::dirs()->saveLocation( "data", "kcmkeys/" ); + + QDir dir( kksPath ); + if( !dir.exists() && !dir.mkdir( kksPath ) ) { + qWarning("KShortcutsModule: Could not make directory to store user info."); + return; + } + + sFile.prepend( kksPath ); + sFile += ".kksrc"; + if( iScheme == -1 ) { + m_pcbSchemes->insertItem( sName ); + //m_pcbSchemes->setFocus(); + m_pcbSchemes->setCurrentItem( m_pcbSchemes->count()-1 ); + m_rgsSchemeFiles.append( sFile ); + } else { + //m_pcbSchemes->setFocus(); + m_pcbSchemes->setCurrentItem( iScheme ); + } + + KSimpleConfig *config = new KSimpleConfig( sFile ); + + config->setGroup( "Settings" ); + config->writeEntry( "Name", sName ); + delete config; + + saveScheme(); + + connect( m_pcbSchemes, SIGNAL(activated(int)), SLOT(slotSelectScheme(int)) ); + slotSelectScheme(); +} + +void ShortcutsModule::saveScheme() +{ + QString sFilename = m_rgsSchemeFiles[ m_pcbSchemes->currentItem() ]; + KSimpleConfig config( sFilename ); + + m_pkcGeneral->commitChanges(); + m_pkcSequence->commitChanges(); + m_pkcApplication->commitChanges(); + + m_pListGeneral->writeSettings( "Global Shortcuts", &config, true ); + m_pListSequence->writeSettings( "Global Shortcuts", &config, true ); + m_pListApplication->writeSettings( "Shortcuts", &config, true ); +} + +void ShortcutsModule::slotRemoveScheme() +{ +} + +#include "shortcuts.moc" diff --git a/kcontrol/keys/shortcuts.h b/kcontrol/keys/shortcuts.h new file mode 100644 index 000000000..a16a619e3 --- /dev/null +++ b/kcontrol/keys/shortcuts.h @@ -0,0 +1,77 @@ +/* + * shortcuts.h + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __SHORTCUTS_MODULE_H +#define __SHORTCUTS_MODULE_H + +#include +#include +#include +#include +#include "kaccelaction.h" +#include +#include + +class ShortcutsModule : public QWidget +{ + Q_OBJECT + public: + ShortcutsModule( QWidget *parent = 0, const char *name = 0 ); + ~ShortcutsModule(); + + void load(); + void save(); + void defaults(); + QString quickHelp() const; + + protected: + void initGUI(); + void createActionsGeneral(); + void createActionsSequence(); + void readSchemeNames(); + void saveScheme(); + void resizeEvent(QResizeEvent *e); + + signals: + void changed( bool ); + + protected slots: + void slotSchemeCur(); + void slotKeyChange(); + void slotSelectScheme( int = 0 ); + void slotSaveSchemeAs(); + void slotRemoveScheme(); + + private: + QTabWidget* m_pTab; + QRadioButton *m_prbPre, *m_prbNew; + KComboBox* m_pcbSchemes; + QPushButton* m_pbtnSave, * m_pbtnRemove; + int m_nSysSchemes; + QStringList m_rgsSchemeFiles; + KAccelActions m_actionsGeneral, m_actionsSequence;//, m_actionsApplication; + KShortcutList* m_pListGeneral, * m_pListSequence, * m_pListApplication; + KKeyChooser* m_pkcGeneral, * m_pkcSequence, * m_pkcApplication; +}; + +#endif // __SHORTCUTS_MODULE_H diff --git a/kcontrol/keys/treeview.cpp b/kcontrol/keys/treeview.cpp new file mode 100644 index 000000000..0c2056766 --- /dev/null +++ b/kcontrol/keys/treeview.cpp @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2000 Matthias Elter + * Copyright (C) 2001-2002 Raffaele Sandrini + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "treeview.h" +#include "treeview.moc" +#include "khotkeys.h" + +AppTreeItem::AppTreeItem(QListViewItem *parent, const QString& storageId) + : KListViewItem(parent), m_init(false), m_storageId(storageId) {} + +AppTreeItem::AppTreeItem(QListViewItem *parent, QListViewItem *after, const QString& storageId) + : KListViewItem(parent, after), m_init(false), m_storageId(storageId) {} + +AppTreeItem::AppTreeItem(QListView *parent, const QString& storageId) + : KListViewItem(parent), m_init(false), m_storageId(storageId) {} + +AppTreeItem::AppTreeItem(QListView *parent, QListViewItem *after, const QString& storageId) + : KListViewItem(parent, after), m_init(false), m_storageId(storageId) {} + +void AppTreeItem::setName(const QString &name) +{ + m_name = name; + setText(0, m_name); +} + +void AppTreeItem::setAccel(const QString &accel) +{ + m_accel = accel; + int temp = accel.find(';'); + if (temp != -1) + { + setText(1, accel.left(temp)); + setText(2, accel.right(accel.length() - temp - 1)); + } + else + { + setText(1, m_accel); + setText(2, QString::null); + } +} + +void AppTreeItem::setOpen(bool o) +{ + if (o && !m_directoryPath.isEmpty() && !m_init) + { + m_init = true; + AppTreeView *tv = static_cast(listView()); + tv->fillBranch(m_directoryPath, this); + } + QListViewItem::setOpen(o); +} + +static QPixmap appIcon(const QString &iconName) +{ + QPixmap normal = SmallIcon( iconName ); + // make sure they are not larger than 20x20 + if (normal.width() > 20 || normal.height() > 20) + { + QImage tmp = normal.convertToImage(); + tmp = tmp.smoothScale(20, 20); + normal.convertFromImage(tmp); + } + return normal; +} + + +AppTreeView::AppTreeView( QWidget *parent, const char *name ) + : KListView(parent, name) +{ + setFrameStyle(QFrame::WinPanel | QFrame::Sunken); + setAllColumnsShowFocus(true); + setRootIsDecorated(true); + setSorting(-1); + setAcceptDrops(false); + setDragEnabled(false); + setMinimumWidth(240); + setResizeMode(AllColumns); + + addColumn(i18n("Command")); + addColumn(i18n("Shortcut")); + addColumn(i18n("Alternate")); + + connect(this, SIGNAL(clicked( QListViewItem* )), + SLOT(itemSelected( QListViewItem* ))); + + connect(this,SIGNAL(selectionChanged ( QListViewItem * )), + SLOT(itemSelected( QListViewItem* ))); +} + +AppTreeView::~AppTreeView() +{ +} + +void AppTreeView::fill() +{ + QApplication::setOverrideCursor(Qt::WaitCursor); + clear(); + fillBranch(QString::null, 0); + QApplication::restoreOverrideCursor(); +} + +void AppTreeView::fillBranch(const QString& rPath, AppTreeItem *parent) +{ + // get rid of leading slash in the relative path + QString relPath = rPath; + if(relPath[0] == '/') + relPath = relPath.mid(1, relPath.length()); + + // We ask KSycoca to give us all services (sorted). + KServiceGroup::Ptr root = KServiceGroup::group(relPath); + + if (!root || !root->isValid()) + return; + + KServiceGroup::List list = root->entries(true); + + QListViewItem *after = 0; + + for(KServiceGroup::List::ConstIterator it = list.begin(); + it != list.end(); ++it) + { + KSycocaEntry * e = *it; + + if (e->isType(KST_KServiceGroup)) + { + KServiceGroup::Ptr g(static_cast(e)); + QString groupCaption = g->caption(); + + // Item names may contain ampersands. To avoid them being converted + // to accelerators, replace them with two ampersands. + groupCaption.replace("&", "&&"); + + AppTreeItem *item; + if (parent == 0) + item = new AppTreeItem(this, after, QString::null); + else + item = new AppTreeItem(parent, after, QString::null); + + item->setName(groupCaption); + item->setPixmap(0, appIcon(g->icon())); + item->setDirectoryPath(g->relPath()); + item->setExpandable(true); + after = item; + } + else if (e->isType(KST_KService)) + { + KService::Ptr s(static_cast(e)); + QString serviceCaption = s->name(); + + // Item names may contain ampersands. To avoid them being converted + // to accelerators, replace them with two ampersands. + serviceCaption.replace("&", "&&"); + + AppTreeItem* item; + if (parent == 0) + item = new AppTreeItem(this, after, s->storageId()); + else + item = new AppTreeItem(parent, after, s->storageId()); + + item->setName(serviceCaption); + item->setAccel(KHotKeys::getMenuEntryShortcut(s->storageId())); + item->setPixmap(0, appIcon(s->icon())); + + after = item; + } + } +} + +void AppTreeView::itemSelected(QListViewItem *item) +{ + AppTreeItem *_item = static_cast(item); + + if(!item) return; + + emit entrySelected(_item->storageId(), _item->accel(), _item->isDirectory()); +} + +QStringList AppTreeView::fileList(const QString& rPath) +{ + QString relativePath = rPath; + + // truncate "/.directory" + int pos = relativePath.findRev("/.directory"); + if (pos > 0) relativePath.truncate(pos); + + QStringList filelist; + + // loop through all resource dirs and build a file list + QStringList resdirlist = KGlobal::dirs()->resourceDirs("apps"); + for (QStringList::ConstIterator it = resdirlist.begin(); it != resdirlist.end(); ++it) + { + QDir dir((*it) + "/" + relativePath); + if(!dir.exists()) continue; + + dir.setFilter(QDir::Files); + dir.setNameFilter("*.desktop;*.kdelnk"); + + // build a list of files + QStringList files = dir.entryList(); + for (QStringList::ConstIterator it = files.begin(); it != files.end(); ++it) { + // does not work?! + //if (filelist.contains(*it)) continue; + + if (relativePath.isEmpty()) { + filelist.remove(*it); // hack + filelist.append(*it); + } + else { + filelist.remove(relativePath + "/" + *it); //hack + filelist.append(relativePath + "/" + *it); + } + } + } + return filelist; +} + +QStringList AppTreeView::dirList(const QString& rPath) +{ + QString relativePath = rPath; + + // truncate "/.directory" + int pos = relativePath.findRev("/.directory"); + if (pos > 0) relativePath.truncate(pos); + + QStringList dirlist; + + // loop through all resource dirs and build a subdir list + QStringList resdirlist = KGlobal::dirs()->resourceDirs("apps"); + for (QStringList::ConstIterator it = resdirlist.begin(); it != resdirlist.end(); ++it) + { + QDir dir((*it) + "/" + relativePath); + if(!dir.exists()) continue; + dir.setFilter(QDir::Dirs); + + // build a list of subdirs + QStringList subdirs = dir.entryList(); + for (QStringList::ConstIterator it = subdirs.begin(); it != subdirs.end(); ++it) { + if ((*it) == "." || (*it) == "..") continue; + // does not work?! + // if (dirlist.contains(*it)) continue; + + if (relativePath.isEmpty()) { + dirlist.remove(*it); //hack + dirlist.append(*it); + } + else { + dirlist.remove(relativePath + "/" + *it); //hack + dirlist.append(relativePath + "/" + *it); + } + } + } + return dirlist; +} diff --git a/kcontrol/keys/treeview.h b/kcontrol/keys/treeview.h new file mode 100644 index 000000000..d376bc00d --- /dev/null +++ b/kcontrol/keys/treeview.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2000 Matthias Elter + * Copyright (C) 2001-2002 Raffaele Sandrini +#include + +class QPopupMenu; +class KActionCollection; +class KDesktopFile; + +class AppTreeItem : public KListViewItem +{ + +public: + AppTreeItem(QListViewItem *parent, const QString& storageId); + AppTreeItem(QListViewItem *parent, QListViewItem *after, const QString& storageId); + AppTreeItem(QListView *parent, const QString& storageId); + AppTreeItem(QListView *parent, QListViewItem* after, const QString& storageId); + + QString storageId() const { return m_storageId; } + void setDirectoryPath(const QString& path) { m_directoryPath = path; } + + QString name() const { return m_name; } + void setName(const QString &name); + + QString accel() const { return m_accel; } + void setAccel(const QString &accel); + + bool isDirectory() const { return !m_directoryPath.isEmpty(); } + + virtual void setOpen(bool o); + +private: + bool m_init : 1; + QString m_storageId; + QString m_name; + QString m_directoryPath; + QString m_accel; +}; + +class AppTreeView : public KListView +{ + friend class AppTreeItem; + Q_OBJECT +public: + AppTreeView(QWidget *parent=0, const char *name=0); + ~AppTreeView(); + void fill(); + +signals: + void entrySelected(const QString&, const QString &, bool); + +protected slots: + void itemSelected(QListViewItem *); + +protected: + void fillBranch(const QString& relPath, AppTreeItem* parent); + + QStringList fileList(const QString& relativePath); + QStringList dirList(const QString& relativePath); +}; + + +#endif diff --git a/kcontrol/keys/unix3.kksrc b/kcontrol/keys/unix3.kksrc new file mode 100644 index 000000000..8ac722ec6 --- /dev/null +++ b/kcontrol/keys/unix3.kksrc @@ -0,0 +1,198 @@ +[Settings] +Name=UNIX Scheme +Name[af]=UNIX Tema +Name[be]=Схема UNIX +Name[bg]=UNIX +Name[bn]=ইউনিক্স স্কীম +Name[br]=Steuñv UNIX +Name[bs]=UNIX šema +Name[ca]=Esquema UNIX +Name[cs]=Unixové schéma +Name[csb]=Mòtiw Uniksa +Name[cy]=Cynllun UNIX +Name[da]=UNIX-system +Name[de]=UNIX-Design +Name[el]=UNIX Μορφή +Name[eo]=Uniksa aranĝo +Name[es]=Esquema UNIX +Name[et]=UNIX-i skeem +Name[eu]=UNIX eskema +Name[fa]=طرحوارۀ یونیکس +Name[fi]=UNIX-skeema +Name[fr]=Thème UNIX +Name[fy]=UNIX-skema +Name[ga]=Scéim UNIX +Name[gl]=Esquema UNIX +Name[he]=ערכת UNIX +Name[hr]=UNIX shema +Name[hu]=UNIX +Name[id]=Skema UNIX +Name[is]=UNIX þema +Name[it]=Schema UNIX +Name[ja]=UNIX スキーマ +Name[ka]=UNIX სქემა +Name[kk]=UNIX сұлбасы +Name[km]=គំនូរ​បំព្រួញ UNIX +Name[ko]=UNIX 배열 +Name[lo]=ຊຸດຮູບແບບ KWM +Name[lt]=UNIX schema +Name[mk]=UNIX-шема +Name[mn]=UNIX-Схем +Name[nb]=UNIX-oppsett +Name[nds]=UNIX-Vörbild +Name[ne]=यूनिक्स योजना +Name[nl]=UNIX-schema +Name[nn]=UNIX-oppsett +Name[nso]=Leano la UNIX +Name[pa]=UNIX ਸਰੂਪ +Name[pl]=Motyw Uniksa +Name[pt]=Esquema do UNIX +Name[pt_BR]=Esquema UNIX +Name[ro]=Schemă UNIX +Name[ru]=UNIX +Name[rw]=Igishushanyombonera UNIX +Name[se]=UNIX-čoahkkáldat +Name[sk]=UNIX schéma +Name[sl]=Shema UNIX +Name[sr]=UNIX-овска шема +Name[sr@Latn]=UNIX-ovska šema +Name[sv]=Unix schema +Name[tg]=Нақшаи UNIX +Name[th]=ใช้แบบของ UNIX +Name[tr]=UNIX Şeması +Name[tt]=UNIX buyınça +Name[uk]=Схема UNIX +Name[uz]=UNIX mavzusi +Name[uz@cyrillic]=UNIX мавзуси +Name[ven]=Tshikimu tsha UNIX +Name[vi]=Phối hợp của Unix +Name[wa]=Tinme UNIX +Name[xh]=Udweliso lwe UNIX +Name[zh_CN]=Unix 方案 +Name[zh_TW]=UNIX 按鍵配置 +Name[zu]=iplani le-UNIX +Uses Win Modifier=false + +[Global Shortcuts] +Desktop Screenshot=none +Enable/Disable Clipboard Actions=none +Run Command=Alt+F2 +Halt Computer=none +Halt without Confirmation=none +Kill Window=Alt+F9 +Lock Session=Alt+Ctrl+L +Logout=Alt+Ctrl+Delete +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=Alt+Ctrl+R +Mouse Emulation=Alt+F12 +Popup Launch Menu=Alt+F1 +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=none +Show Taskmanager=Ctrl+Escape +Show Window List=none +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Alt+Ctrl+K +Switch to Desktop 1=Ctrl+F1 +Switch to Desktop 10=Ctrl+F10 +Switch to Desktop 11=Ctrl+F11 +Switch to Desktop 12=Ctrl+F12 +Switch to Desktop 13=Ctrl+Shift+F1 +Switch to Desktop 14=Ctrl+Shift+F2 +Switch to Desktop 15=Ctrl+Shift+F3 +Switch to Desktop 16=Ctrl+Shift+F4 +Switch to Desktop 2=Ctrl+F2 +Switch to Desktop 3=Ctrl+F3 +Switch to Desktop 4=Ctrl+F4 +Switch to Desktop 5=Ctrl+F5 +Switch to Desktop 6=Ctrl+F6 +Switch to Desktop 7=Ctrl+F7 +Switch to Desktop 8=Ctrl+F8 +Switch to Desktop 9=Ctrl+F9 +Switch to Next Desktop=none +Switch to Previous Desktop=none +Toggle Showing Desktop=Alt+Ctrl+D +Toggle Window Raise/Lower=none +Walk Through Desktop List=none +Walk Through Desktop List (Reverse)=Ctrl+Shift+Tab +Walk Through Desktops=Ctrl+Tab +Walk Through Desktops (Reverse)=none +Walk Through Windows=Alt+F11 +Walk Through Windows (Reverse)=Alt+Shift+Tab +Window Close=none +Window Iconify=Alt+F4 +Window Lower=none +Window Maximize=Alt+Shift+F3 +Window Maximize Horizontal=none +Window Maximize Vertical=none +Window Move=Alt+F5 +Window Operations Menu=none +Window Raise=none +Window Resize=Alt+F6 +Window Screenshot=none +Window Shade=none +Window to Desktop 1=none +Window to Desktop 10=none +Window to Desktop 11=none +Window to Desktop 12=none +Window to Desktop 13=none +Window to Desktop 14=none +Window to Desktop 15=none +Window to Desktop 16=none +Window to Desktop 2=none +Window to Desktop 3=none +Window to Desktop 4=none +Window to Desktop 5=none +Window to Desktop 6=none +Window to Desktop 7=none +Window to Desktop 8=none +Window to Desktop 9=none +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+B +Back=Alt+Left +Close=Ctrl+W +Copy=Ctrl+C +Cut=Ctrl+X +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+S +FindNext=F3 +FindPrev=Shift+F3 +Forward=Alt+Right +GotoLine=Ctrl+G +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V +PopupMenuContext=Menu +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit=Ctrl+Q +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll= +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/keys/win3.kksrc b/kcontrol/keys/win3.kksrc new file mode 100644 index 000000000..926f83670 --- /dev/null +++ b/kcontrol/keys/win3.kksrc @@ -0,0 +1,198 @@ +[Settings] +Name=Windows Scheme (Without Win Key) +Name[af]=Venster Skema (Sonder Win Sleutel) +Name[be]=Схема Windows (без клавішы "Win") +Name[bg]=Windows (без клавиша Win) +Name[bn]=উইণ্ডোস্ স্কীম (উইন্ কী ব্যতীত) +Name[br]=Steuñv Windows (hep stokell Win) +Name[bs]=Windows šema (bez Win tipke) +Name[ca]=Esquema Windows (sense la tecla Win) +Name[cs]=Schéma Windows (bez klávesy Win) +Name[csb]=Mòtiw Windows (bez klawiszë Win) +Name[cy]=Cynllun Windows (Heb Allwedd Win) +Name[da]=Windows-system (uden Win-tast) +Name[de]=Windows-Design (ohne Windows-Taste) +Name[el]=Μορφή Windows (Δίχως Win Πλήκτρο) +Name[eo]=Vindoza aranĝo (sen Vindozoklavo) +Name[es]=Esquema Windows (Sin tecla Win) +Name[et]=Windowsi skeem (ilma Win-klahvita) +Name[eu]=Windows eskema (Win teklarik gabe) +Name[fa]=طرحوارۀ ویندوز( بدون کلید پنجره) +Name[fi]=Windows-skeema (ilman Win-näppäintä) +Name[fr]=Thème Windows (sans la touche « Win ») +Name[fy]=Windows-skema (sûnder Win-toets) +Name[ga]=Scéim Windows (Gan Eochair Win) +Name[gl]=Esquema Windows (Sen Tecla de Windows) +Name[he]=ערכת חלונות (ללא מקש Win) +Name[hr]=Windows shema (bez Windows tipki) +Name[hu]=Windows (Win billentyű nélkül) +Name[id]=Skema Windows (Tanpa Tombol Win) +Name[is]=Windowsþema (án Win lykils) +Name[it]=Schema Windows (senza tasto Win) +Name[ja]=Windows スキーマ (Win キーなし) +Name[kk]=Windows сұлбасы (Win пернесіз) +Name[km]=គំនូរ​បំព្រួញ Windows (គ្មាន​គ្រាប់ចុច​រូប​បង្អួច) +Name[ko]=윈도 배열 (윈도 키 사용 안함) +Name[lo]=ຊຸດຮູບແບບວິນໂດ (ບໍ່ມີປຸ່ມ Win) +Name[lt]=Windows schema (be Win klavišo) +Name[mk]=Windows-шема (без копчето Win) +Name[mn]=Windows-Схем (Win-товчгүй) +Name[ms]=Skim Tetingkap (Tanpa Kekunci Win) +Name[nb]=Windows-oppsett (uten Windows-tast) +Name[nds]=Windows-Vörbild (ahn Windows-Tast) +Name[ne]=विण्डोज योजना (विन कुञ्जी बाहेक) +Name[nl]=Windows-schema (zonder Win-toets) +Name[nn]=Windows-oppsett (utan Windows-tast) +Name[nso]=Leano la Window (Kantle le Senotlelo sa Phenyo) +Name[pa]=Windows ਸਕੀਮ (ਬਿਨਾਂ Win ਸਵਿੱਚ) +Name[pl]=Motyw Windows (bez klawisza Win) +Name[pt]=Esquema do Windows (Sem Tecla Win) +Name[pt_BR]=Esquema Windows (sem a tecla Win) +Name[ro]=Schemă Windows (fără tasta Win) +Name[ru]=Windows (без клавиши Win) +Name[rw]=Igishushanyombonera cy'Amadirishya (Nta Buto Win) +Name[se]=Windows-čoakkáldat (Windows-boalu haga) +Name[sk]=Windows schéma (bez klávesu Win) +Name[sl]=Shema Windows (brez tipke Win) +Name[sr]=Windows-ова шема (без тастера Win) +Name[sr@Latn]=Windows-ova šema (bez tastera Win) +Name[sv]=Windows schema (utan Win-tangent) +Name[tg]=Нақшаи тирезаҳо (Бе калиди Win) +Name[th]=ใช้แบบของวินโดวส์ (ไม่มีปุ่ม Win) +Name[tr]=Windows Şeması (Win Key'siz) +Name[tt]=Windows buyınça (Win-töymäsez) +Name[uk]=Схема Windows (без клавіші Win) +Name[uz]=Windows qolipi (Win tugmasi bilan) +Name[uz@cyrillic]=Windows қолипи (Win тугмаси билан) +Name[ven]=Tshikimu tsha dziWindo (isina Meta/Win-Key) +Name[vi]=Phối hợp của Windows (không có phím Cửa sổ) +Name[wa]=Tinme Windows (sins l' tape Win) +Name[xh]=Window Yodweliso (Ngaphandle kwe Win key) +Name[zh_CN]=Windows 方案(无 Win 键) +Name[zh_TW]=Windows 按鍵配置 (無 Win 鍵) +Name[zu]=Iplani lama-Window (Ngaphandle kukakhiye we-Win) +Uses Win Modifier=false + +[Global Shortcuts] +Desktop Screenshot=Ctrl+Print +Enable/Disable Clipboard Actions=none +Run Command=none +Halt Computer=none +Halt without Confirmation=none +Kill Window=none +Lock Session=none +Logout=none +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=none +Mouse Emulation=none +Popup Launch Menu=Ctrl+Escape +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=none +Show Taskmanager=Alt+Ctrl+Delete +Show Window List=none +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Alt+Ctrl+K +Switch to Desktop 1=none +Switch to Desktop 10=none +Switch to Desktop 11=none +Switch to Desktop 12=none +Switch to Desktop 13=none +Switch to Desktop 14=none +Switch to Desktop 15=none +Switch to Desktop 16=none +Switch to Desktop 2=none +Switch to Desktop 3=none +Switch to Desktop 4=none +Switch to Desktop 5=none +Switch to Desktop 6=none +Switch to Desktop 7=none +Switch to Desktop 8=none +Switch to Desktop 9=none +Switch to Next Desktop=Alt+Shift+Tab +Switch to Previous Desktop=none +Toggle Showing Desktop=Alt+Ctrl+D +Toggle Window Raise/Lower=none +Walk Through Desktop List=none +Walk Through Desktop List (Reverse)=none +Walk Through Desktops=Alt+Ctrl+Tab +Walk Through Desktops (Reverse)=Alt+Ctrl+Shift+Tab +Walk Through Windows=Alt+Tab +Walk Through Windows (Reverse)=Alt+Shift+Tab +Window Close=Alt+F4 +Window Iconify=none +Window Lower=none +Window Maximize=none +Window Maximize Horizontal=none +Window Maximize Vertical=none +Window Move=none +Window Operations Menu=Alt+Space +Window Raise=none +Window Resize=none +Window Screenshot=Alt+Print +Window Shade=none +Window to Desktop 1=none +Window to Desktop 10=none +Window to Desktop 11=none +Window to Desktop 12=none +Window to Desktop 13=none +Window to Desktop 14=none +Window to Desktop 15=none +Window to Desktop 16=none +Window to Desktop 2=none +Window to Desktop 3=none +Window to Desktop 4=none +Window to Desktop 5=none +Window to Desktop 6=none +Window to Desktop 7=none +Window to Desktop 8=none +Window to Desktop 9=none +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+D +Back=Alt+Left +Close=Ctrl+F4;Ctrl+W +Copy=Ctrl+C;Ctrl+Insert +Cut=Ctrl+X;Shift+Delete +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+F +FindNext=F3 +FindPrev=Shift+F3 +Forward=Alt+Right +GotoLine=Ctrl+G +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V;Shift+Insert +PopupMenuContext=F10 +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit= +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll=Ctrl+A +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/keys/win4.kksrc b/kcontrol/keys/win4.kksrc new file mode 100644 index 000000000..1abb69313 --- /dev/null +++ b/kcontrol/keys/win4.kksrc @@ -0,0 +1,198 @@ +[Settings] +Name=Windows Scheme (With Win Key) +Name[af]=Windows Skema (Met Win Sleutel) +Name[be]=Схема Windows (з клавішай "Win") +Name[bg]=Windows (с клавиша Win) +Name[bn]=উইণ্ডোস্ স্কীম (উইন্ কী সমেত) +Name[br]=Steuñv Windows (gant stokell Win) +Name[bs]=Windows šema (sa Win tipkom) +Name[ca]=Esquema Windows (amb la tecla Win) +Name[cs]=Schéma Windows (s klávesou Win) +Name[csb]=Mòtiw Windows (z klawiszą Win) +Name[cy]=Cynllun Windows (Gyda'r Allwedd Win) +Name[da]=Windows-system (med Win-tast) +Name[de]=Windows-Design (mit Windows-Taste) +Name[el]=Μορφή Windows (Με Win Πλήκτρο) +Name[eo]=Vindoza aranĝo (kun Vindozoklavo) +Name[es]=Esquema Windows (Con tecla Win) +Name[et]=Windowsi skeem (Win-klahviga) +Name[eu]=Windows eskema (Win teklarekin) +Name[fa]=طرحوارۀ پنجره( با کلید پنجره) +Name[fi]=Windows-skeema (Win-näppäimellä) +Name[fr]=Thème Windows (avec la touche « Win ») +Name[fy]=Windows-skema (mei Win-toets) +Name[ga]=Scéim Windows (Le hEochair Win) +Name[gl]=Esquema de Windows (Con Tecla de Windows) +Name[he]=ערכת חלונות (עם מקש Win) +Name[hr]=Windows shema (s Windows tipkama) +Name[hu]=Windows (Win billentyűvel) +Name[id]=Skema Windows (Dengan Tombol Win) +Name[is]=Windowsþema (með Win lykli) +Name[it]=Schema Windows (con tasto Win) +Name[ja]=Windows スキーマ (Win キーあり) +Name[ka]=Windows სქემა (Win კლავიშით) +Name[kk]=Windows сұлбасы (Win пернемен) +Name[km]=គំនូរ​បំព្រួញ Windows (មាន​គ្រាប់ចុច​រូប​បង្អួច) +Name[ko]=윈도 배열 (윈도 키 사용) +Name[lo]=ຊຸດຮູບແບບວິນໂດ (ມີປຸ່ມ Win) +Name[lt]=Windows schema (su Win klavišu) +Name[mk]=Windows-шема (со копчето Win) +Name[mn]=Windows-Схем (Win-Товчтой) +Name[nb]=Windows-oppsett (med Windows-tast) +Name[nds]=Windows-Vörbild (mit Windows-Tast) +Name[ne]=विण्डोज योजना (विन कुञ्जीसँग) +Name[nl]=Windows-schema (met Win-toets) +Name[nn]=Windows-oppsett (med Windows-tast) +Name[nso]=Leano la Window (Le Senotlelo sa Phenyo) +Name[pa]=Windows ਸਕੀਮ (Win ਸਵਿੱਚ ਨਾਲ) +Name[pl]=Motyw Windows (z klawiszem Win) +Name[pt]=Esquema do Windows (Sem Tecla Win) +Name[pt_BR]=Esquema Windows (com a tecla Win) +Name[ro]=Schemă Windows (cu tasta Win) +Name[ru]=Windows (поддержка клавиши Win) +Name[rw]=Igishushanyombonera cy'Amadirishya (Na Buto Win) +Name[se]=Windows-čoakkáldat (Windows-boaluin) +Name[sk]=Windows schéma (s klávesom Win) +Name[sl]=Shema Windows (s tipko Win) +Name[sr]=Windows-ова шема (са тастером Win) +Name[sr@Latn]=Windows-ova šema (sa tasterom Win) +Name[sv]=Windows schema (med Win-tangent) +Name[tg]=Нақшаи тирезаҳо (Бо калиди Win) +Name[th]=ใช้แบบของวินโดวส์ (มีปุ่ม Win) +Name[tr]=Windows Şeması (Win Key İle) +Name[tt]=Windows buyınça (Win-töymäle) +Name[uk]=Схема Windows (з клавішею Win) +Name[uz]=Windows qolipi (Win tugmasiz) +Name[uz@cyrillic]=Windows қолипи (Win тугмасиз) +Name[ven]=TShikimu tsha dziwindo (irena Meta/Win-Key) +Name[vi]=Phối hợp của Windows (có phím Cửa sổ) +Name[wa]=Tinme Windows (avou l' tape Win) +Name[xh]=Windows Ezingagqibekanga (Nge Win-key) +Name[zh_CN]=Windows 方案(有 Win 键) +Name[zh_TW]=Windows 按鍵配置 (有 Win 鍵) +Name[zu]=Iplani lama-Window (Kukhona ukhiye we-Win) +Uses Win Modifier=true + +[Global Shortcuts] +Desktop Screenshot=Print +Enable/Disable Clipboard Actions=none +Run Command=Win+R +Halt Computer=none +Halt without Confirmation=none +Kill Window=none +Lock Session=none +Logout=none +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=none +Mouse Emulation=none +Popup Launch Menu=Ctrl+Escape +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=none +Show Taskmanager=Alt+Ctrl+Delete +Show Window List=none +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Alt+Ctrl+K +Switch to Desktop 1=Win+F1 +Switch to Desktop 10=Win+F10 +Switch to Desktop 11=none +Switch to Desktop 12=none +Switch to Desktop 13=none +Switch to Desktop 14=none +Switch to Desktop 15=none +Switch to Desktop 16=none +Switch to Desktop 2=Win+F2 +Switch to Desktop 3=Win+F3 +Switch to Desktop 4=Win+F4 +Switch to Desktop 5=Win+F5 +Switch to Desktop 6=Win+F6 +Switch to Desktop 7=Win+F7 +Switch to Desktop 8=Win+F8 +Switch to Desktop 9=Win+F9 +Switch to Next Desktop=none +Switch to Previous Desktop=none +Toggle Showing Desktop=Win+D;Win+M +Toggle Window Raise/Lower=none +Walk Through Desktop List=none +Walk Through Desktop List (Reverse)=none +Walk Through Desktops=Win+Tab +Walk Through Desktops (Reverse)=Win+Shift+Tab +Walk Through Windows=Alt+Tab +Walk Through Windows (Reverse)=Alt+Shift+Tab +Window Close=Alt+F4 +Window Iconify=none +Window Lower=none +Window Maximize=none +Window Maximize Horizontal=none +Window Maximize Vertical=none +Window Move=none +Window Operations Menu=Alt+Space +Window Raise=none +Window Resize=none +Window Screenshot=Alt+Print +Window Shade=none +Window to Desktop 1=none +Window to Desktop 10=none +Window to Desktop 11=none +Window to Desktop 12=none +Window to Desktop 13=none +Window to Desktop 14=none +Window to Desktop 15=none +Window to Desktop 16=none +Window to Desktop 2=none +Window to Desktop 3=none +Window to Desktop 4=none +Window to Desktop 5=none +Window to Desktop 6=none +Window to Desktop 7=none +Window to Desktop 8=none +Window to Desktop 9=none +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+D +Back=Alt+Left +Close=Ctrl+F4;Ctrl+W +Copy=Ctrl+C;Ctrl+Insert +Cut=Ctrl+X;Shift+Delete +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+F +FindNext=F3 +FindPrev=Shift+F3 +Forward=Alt+Right +GotoLine=Ctrl+G +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V;Shift+Insert +PopupMenuContext=F10 +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit= +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll=Ctrl+A +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/keys/wm3.kksrc b/kcontrol/keys/wm3.kksrc new file mode 100644 index 000000000..6c6ef61e5 --- /dev/null +++ b/kcontrol/keys/wm3.kksrc @@ -0,0 +1,188 @@ +[Settings] +Name=WindowMaker (3 Modifier Keys) +Name[af]=WindowMaker (3 verandering sleutels) +Name[be]=WindowMaker (тры клавішы мадыфікацыі) +Name[bg]=WindowMaker (с 3 модификационни клавиша) +Name[bn]=উইণ্ডো-মেকার (৩-টি মডিফায়ার কী) +Name[bs]=WindowMaker (3 modificirajuće tipke) +Name[ca]=WindowMaker (3 tecles modificadores) +Name[cs]=WindowMaker (3 modifikátory) +Name[csb]=WindowMaker (3 klawisze zjinaczi) +Name[cy]=WindowMaker (3 Bysell Addasu) +Name[da]=Windowmaker (3 modifikatortaster) +Name[de]=WindowMaker (3 Sondertasten) +Name[el]=WindowMaker (3 πλήκτρα αλλαγής) +Name[eo]=WindoMaker (3 modifaj klavoj) +Name[es]=WindowMaker (3 teclas de modificación) +Name[et]=WindowMaker (3 muuteklahviga) +Name[eu]=WindowMaker (3 tekla modifikatzailekin) +Name[fa]=WindowMaker (۳کلید تغییردهندۀ) +Name[fi]=WindowMaker (3 muokkausnäppäintä) +Name[fr]=WindowMaker (3 touches de modifications) +Name[fy]=WindowMaker (3 modifikaasjetoetsen) +Name[ga]=WindowMaker (3 Eochair Mhionathraithe) +Name[gl]=WindowMaker (3 Teclas Modificadoras) +Name[he]=WindowMaker (עם שלושה מצבים) +Name[hr]=WindowMaker (3 modifikatorske tipke) +Name[hu]=WindowMaker (3 módosító billentyű) +Name[is]=WindowMaker (3 breytilyklar) +Name[it]=WindowMaker (3 tasti modificatori) +Name[ja]=WindowMaker (3 モディファイアキー) +Name[ka]=WindowMaker (3 ცვლადი კლავიში) +Name[kk]=WindowMaker (3 түрлендіру перне) +Name[km]=WindowMaker (គ្រាប់ចុច​កែប្រែ ៣) +Name[ko]=WindowMaker (수정자 키 세 개) +Name[lt]=WindowMaker (3 klavišai - modifikatoriai) +Name[mk]=WindowMaker (3 копчиња-модификатори) +Name[mn]=WindowMaker (3 сэлгүүр товчилуур) +Name[nb]=WindowMaker (tre valgtaster) +Name[nds]=WindowMaker (3 Sünnertasten) +Name[ne]=विण्डोज निर्माता (३ परिमार्जक कुञ्जीहरू) +Name[nl]=WindowMaker (3 modificatietoetsen) +Name[nn]=WindowMaker (tre valtastar) +Name[pa]=WindowMaker (3 ਸੋਧ ਸਵਿੱਚਾਂ) +Name[pl]=WindowMaker (3 klawisze modyfikatorów) +Name[pt]=WindowMaker (3 Teclas Modificadoras) +Name[pt_BR]=WindowMaker (3 teclas modificadoras) +Name[ro]=WindowMaker (3 taste modificator) +Name[ru]=WindowMaker (3 клавиши-модификатора) +Name[rw]=MukoraDirishya (Muhindura Buto 3) +Name[se]=WindowMaker (golbma válljenboaluiguin) +Name[sk]=WindowMaker (3 modifikačné klávesy) +Name[sl]=WindowMaker (3 spremenilne tipke) +Name[sr]=WindowMaker (3 модификаторска тастера) +Name[sr@Latn]=WindowMaker (3 modifikatorska tastera) +Name[sv]=Windowmaker (3 väljartangenter) +Name[tg]=СозандаиТиреза (3 калиди ислоҳ) +Name[th]=วินโดวเมคเกอร์ (ใช้ปุ่มเปลี่ยนหน้าที่ 3ปุ่ม) +Name[tr]=WindowMaker (3 Değiştirici Anahtar) +Name[tt]=WindowMaker (3 Üzgärtkeç Töymä) +Name[uk]=WindowMaker (3 модифікатори) +Name[vi]=WindowMaker (3 Phím Bổ trợ) +Name[wa]=WindowMaker (3 tapes di candjmint) +Name[zh_CN]=WindowMaker (三个修饰键) +Name[zh_TW]=WindowMaker (3 個輔助按鍵) + +[Global Shortcuts] +Desktop Screenshot=Ctrl+Print +Enable/Disable Clipboard Actions=Alt+Ctrl+X +Run Command=Alt+F2 +Halt Computer=none +Halt without Confirmation=none +Kill Window=Alt+Ctrl+Escape +Lock Session=Alt+Ctrl+L +Logout=Alt+Ctrl+Delete +Logout without Confirmation=none +Manually Invoke Action on Current Clipboard=Alt+Ctrl+R +Mouse Emulation=Alt+F12 +Popup Launch Menu=Alt+F1 +Reboot Computer=none +Reboot without Confirmation=none +Show Klipper Popup-Menu=Alt+Ctrl+V +Show Taskmanager=Ctrl+Escape +Show Window List=Alt+F5 +Switch One Desktop Down=none +Switch One Desktop to the Left=none +Switch One Desktop to the Right=none +Switch One Desktop Up=none +Switch to Next Keyboard Layout=Alt+Ctrl+K +Switch to Desktop 1=Alt+1 +Switch to Desktop 10=Alt+Shift+1 +Switch to Desktop 11=Alt+Shift+2 +Switch to Desktop 12=Alt+Shift+3 +Switch to Desktop 13=Alt+Shift+4 +Switch to Desktop 14=Alt+Shift+5 +Switch to Desktop 15=Alt+Shift+6 +Switch to Desktop 16=Alt+Shift+7 +Switch to Desktop 2=Alt+2 +Switch to Desktop 3=Alt+3 +Switch to Desktop 4=Alt+4 +Switch to Desktop 5=Alt+5 +Switch to Desktop 6=Alt+6 +Switch to Desktop 7=Alt+7 +Switch to Desktop 8=Alt+8 +Switch to Desktop 9=Alt+9 +Switch to Next Desktop=none +Switch to Previous Desktop=none +Toggle Showing Desktop=Alt+Ctrl+D +Toggle Window Raise/Lower=none +Walk Through Desktop List=Ctrl+Tab +Walk Through Desktop List (Reverse)=Ctrl+Shift+Tab +Walk Through Desktops=none +Walk Through Desktops (Reverse)=none +Walk Through Windows=Alt+Tab +Walk Through Windows (Reverse)=Alt+Shift+Tab +Window Close=Alt+Escape +Window Iconify=none +Window Lower=none +Window Maximize=none +Window Maximize Horizontal=none +Window Maximize Vertical=none +Window Move=none +Window Operations Menu=Alt+F3 +Window Raise=none +Window Resize=none +Window Screenshot=Alt+Print +Window Shade=none +Window to Desktop 1=Alt+Ctrl+1 +Window to Desktop 10=Alt+Ctrl+Shift+1 +Window to Desktop 11=Alt+Ctrl+Shift+2 +Window to Desktop 12=Alt+Ctrl+Shift+3 +Window to Desktop 13=Alt+Ctrl+Shift+4 +Window to Desktop 14=Alt+Ctrl+Shift+5 +Window to Desktop 15=Alt+Ctrl+Shift+6 +Window to Desktop 16=Alt+Ctrl+Shift+7 +Window to Desktop 2=Alt+Ctrl+2 +Window to Desktop 3=Alt+Ctrl+3 +Window to Desktop 4=Alt+Ctrl+4 +Window to Desktop 5=Alt+Ctrl+5 +Window to Desktop 6=Alt+Ctrl+6 +Window to Desktop 7=Alt+Ctrl+7 +Window to Desktop 8=Alt+Ctrl+8 +Window to Desktop 9=Alt+Ctrl+9 +Window to Next Desktop=none +Window to Previous Desktop=none + +[Shortcuts] +AddBookmark=Ctrl+B +Back=Alt+Left +Close=Ctrl+W +Copy=Ctrl+C;Ctrl+Insert +Cut=Ctrl+X;Shift+Delete +DeleteWordBack=Ctrl+Backspace +DeleteWordForward=Ctrl+Delete +Deselect=Ctrl+Shift+A +End=Ctrl+End +Find=Ctrl+F +FindNext=F3 +FindPrev=Shift+F3 +Forward=Alt+Right +GotoLine=Ctrl+G +Help=F1 +Home=Ctrl+Home +Insert=Ctrl+Insert +New=Ctrl+N +Next=Next +NextCompletion=Ctrl+Down +Open=Ctrl+O +Paste=Ctrl+V;Shift+Insert +PopupMenuContext=Menu +PrevCompletion=Ctrl+Up +Print=Ctrl+P +Prior=Prior +Quit=Ctrl+Q +Redo=Ctrl+Shift+Z +Reload=F5 +Replace=Ctrl+R +RotateDown=Down +RotateUp=Up +Save=Ctrl+S +SelectAll=Ctrl+A +ShowMenubar=Ctrl+M +SubstringCompletion=Ctrl+T +TextCompletion=Ctrl+E +Undo=Ctrl+Z +Up=Alt+Up +WhatsThis=Shift+F1 +ZoomIn=Ctrl+Plus +ZoomOut=Ctrl+Minus diff --git a/kcontrol/kfontinst/AUTHORS b/kcontrol/kfontinst/AUTHORS new file mode 100644 index 000000000..afabc4a80 --- /dev/null +++ b/kcontrol/kfontinst/AUTHORS @@ -0,0 +1 @@ +Craig Drummond diff --git a/kcontrol/kfontinst/ChangeLog b/kcontrol/kfontinst/ChangeLog new file mode 100644 index 000000000..b00a53f1e --- /dev/null +++ b/kcontrol/kfontinst/ChangeLog @@ -0,0 +1,490 @@ +KDE3.4 -> KDE3.5 +================ +1. When copying a file out of fonts sub-system, copy as filename, or .fonts.tar.gz + in the case of multiple font files mapped to the same font name. + + e.g. Times New Roman -> times.ttf + Helvetica, Bold Oblique-> Hevetica, Bold Oblique.fonts.tar.gz + Which contains: + 75dpi_helvBO10.pcf.gz + 75dpi_helvBO12.pcf.gz + 100dpi_helvBO10.pcf.gz + 100dpi_helvBO12.pcf.gz + ...etc + +2. New mimetype: fonts/package - to cater for the above. +3. Add settings to enable/disable configuring fonts for legacy X, and Ghostscript + (X defaults to true, and Ghostscript defaults to false) +4. Show mime-type in detailed view. +5. Simple font sample printing - but only of installed fonts! +6. Add toggle button to control display of bitmap fonts. + +KDE3.3 -> KDE3.4 +================ +1. Font listing comes from fontconfig. This means that fonts will be grouped, i.e. + previously each size of a bitmap font was shown seperately, now only 1 font + will be displayed which represents all sizes. +2. Only fonts, and not folders (except System and Personal), are now shown. +3. Creation of afms from pfa/pfb and a pfm file. +4. Previews are drawn via Xft - previously FreeType was called directly. +5. New font preview look. +6. No longer dependant upon file extension. +7. Check for FPE of "fontconfig" -> if set, then no need to configure X core fonts. + +KDE3.2 -> KDE3.3 +================ +1. List fonts as "Full Name" -> i.e. "Times New Roman". +2. Preview of bitmap fonts. +3. No fontname-title in thumbnails - as fonts:/ lists the fontnames! +4. When copying to fonts:/ (as non-root) only ask for destination if more than 5 seconds + since previously asked. +5. Add a konqueror service menu "Install" +6. Use FreeType2 for reading Type1 - instead of parsing the pfa/pfb header. +7. FamilyName is now the fonts *real* family name - no adding of style information. +8. Add extra style information (which was previously added to FamilyName) into the XLFD. +9. Consider regular weight to be medium (same as mkfontscale). +10. Default to width=normal, weight=medium if not set. +11. Allow change of preview string. +12. Allow zooming in/out of preview. +13. Waterfall font preview. +14. Use font preview part in the KControl module - less code duplication. +15. Include simple fontviwer app - basically just an application wrapper for the viewpart. + +KDE3.1 -> KDE3.2 +================ +1. Re-designed (yet again...) to be a kio slave. As a user, starting fonts:/ will display + + Personal Lists contents of $HOME/.fonts and $KDEHOME/share/fonts (where previous installer installed to) + Fonts are installed to $HOME/.fonts + + System Lists contents of /usr/local/share/fonts, /usr/share/fonts, and /usr/X11R6/lib/X11/fonts + Fonts are installed to /usr/local/share/fonts (as per FHS) + + To install fonts system wide, just drop onto "System" and root's password will be asked + for. + + As root, fonts:/ will show the same as fonts:/System (but without the System part...) + +2. New kcontrol module that uses fonts:/ +3. Removed: + AFM creation -- only really required (TTF wise) for SO <6.0 + StarOffice configuration (S0 6.0 / OO.o is *much* better anyway) +4. X font server (xfs) - if used - is refreshed by seding a SIGUSR1 instead of + relying on a /etc/init.d/xfs script. This is much more portable. +5. Simple FontView part for konqueror - this is basically a big re-sizable preview of the font. +6. Speed up creation of fonts.dir and fonts.scale - by reading in any existing files, and using the + entries from these instead of loading and testing the font (if listed). +7. Better font preview and thumbnails. +8. Only add a dir to fontpath if fonts.dir has greater than 0 entries! +9. Use /etc/fonts/local.conf as root fontconfig file. +10. Only add dirs to fontconfig if *not* a sub-dir of an existing dir. +11. Ensure that top-level fonts dir is always in fontpath. +12. A Fontmap file is created in each sub dir, which is then combined into 1 top level Fontmap file. + ~/.fonts/Fontmap for normal users, and /etc/fonts/Fontmap for root. +13. Modify /Fontmap to contain: + (/etc/fonts/Fontmap) .runlibfile + ...as this is the system-wide Fontmap file created. As for the per-user, one, hmmm... +14. When a folder is configured, ensure fonts.dir/fonts.scale/Fontmap/.fonts-config-timestamp (SuSE + specific) all have the same timestamp (if they exist). Helps to discover if a folder has been + modified - in which case it needs to be reconfigured (and should happen automatically). +15. Add support for TrueType Collections (.ttc), and OpenType (.otf) fonts. Currently TTC's are only + configured for X - need to also configure GS to see other faces. +16. CID fonts are *not* handled - therefore don't list the X11 CID directory, and don't let users + try to create this. +17. Don't list "encodings" in fonts:/System - and don't allow users to create this. +18. Use XFree86's libfontenc (if found) to read font-encodings. +19. Handle 1bpp glyphs in thumbnail code. +20. Ensure X fontpaths *never* end in "/" - i.e. when write XF86Config, xfs/config, + or fontpaths remove any trailing "/" +21. When adding/removing an unscaled dir from X font path, ensure ":unscaled" is + part of the path! +22. Call fc-cache on top-level dir, not on each dir. +23. Use "~" in Xft config and user X config files -> e.g. /home/user/.fonts -> ~/.fonts +24. Remove top-level dir spec from top-level fontmap, e.g. + + TimesNewRomanPSMT (/home/user/.fonts/wibble/times.ttf); + + ...becomes... + + TimesNewRomanPSMT (wibble/times.ttf); + +25. Add meta-data for AFM files to KFile plugin. + +0.11-> KDE3.1 +============= +1. Re-design of UI - removed "Install From" view. +2. Created a KIO/thumbnail font preview class. +3. Fonts are installed/uninstalled on "Apply". +4. Settings are saved on "Apply". +5. Settings tab simplified - some uneccesary settings removed. +6. Removal of Anti-Alias tab - relevant settings moved to kcmfonts. +7. Add kfile-plugin to display Meta data for fonts. +8. Remove settings wizard. +9. Drop use of internal version numbering - not tagging CVS anyway, so whats the point? +10. DCOP interface. +11. Remember size of main window when run via kcmshell. + +0.10->0.11 (KDE3.0) +=================== +1. Port to KDE3/Qt3. +2. Add support for CUPS's Fontmap. +3. Create backups of system files. +4. When install symbol encoding fonts, set encoding to "glyphs-fontspecific" in XftConfig. +5. When install monospaced fonts, set spacing to mono in XftConfig. +6. When first run (as root) - checks XFree86 config file to see if a font server is being used, if + so then fs/config is used as the config file, and "/etc/rc.d/init.d/xfs restart" is selected as + as the X refresh command. +7. Only install fonts that are useable. +8. Add checkbox to enable overwriting of existing AFMs. +9. Remember open directories in advanced mode. +10. Add support for .Z compressed Bitmap fonts. +11. Read Type1 encodings from .afm files if listed as "array" in pfa/pfb. + +0.10b11->0.10 +============= +1. Version added to KDE CVS. +2. Modified some keyboard shortcuts to remove conflicts. +3. Disable "Touch" and "Delete" folder if top-level X fonts dir is selected. + +0.10b10->0.10b11 (Test version...) +================ +1. Removed "root"/"Modify" and "Help" buttons - this gives more space to font lists, plus when using "root"/"Modify" root's + config files are not being saved. +2. "IsFixedPitch" flag in AFMs produced incorrectly - was outputing "false" for monospaced fonts! +3. Added rounding to AFM metric scaling. +4. When creating AFMs, check that each characters' BBox is within the main BBox - this is a quick fix for wingdings.afm, + which seems to be giving incorrect results. +5. StarOffice 6 / OpenOffice only need AFM files for Type1 fonts - plus no config files need to be altered. Therefore, added the ability to + select which font types AFMs should be created for. +6. Output *all* characters from a font into the AFM file. +7. Fixed a bug with Full/Family name in Speedo fonts. +8. For TrueType, Type1, and Speedo fonts - family name is obtained by using the fonts' FullName, remove FamilyName (read from file), remove + any weight, width, or italic designation, and re-add FamilyName. (This is because some fonts are named + , and was previously being lost). +9. When adding encodings to lists, check that they aren't alredy inserted. + +0.10b9->0.10b10 (Test version...) +=============== +1. Fixed a problem with non-enabled install button in basic mode - again, thanks to Hardy Griech for spotting this. + +0.10b8->0.10b9 (Test version...) +============== + +*** NOTE +*** Please remove any Kfontinst generated StarOffice psstd.fonts and Ghostscript Fontmap output before using this version + +1. StarOffice psstd.fonts generated output is no longer marked line-by line, instead it is marked as a section, e.g. + + # kfontinst /usr/X11R6/lib/X11/fonts/TrueType + + # kfontinst /usr/X11R6/lib/X11/fonts/TrueType + + ...Likewise for Ghostscript's Fontmap + +2. Limited generated StarOffice psstd.fonts lines to 126 characters, and lines longher than this will not be output. It appears + as if this is the max line len StarOffice will accept - thanks to Hardy Griech for discovering this. +3. Fixed a bug where a static pointer was not reset to NULL when module was unloaded. +4. When chekcing ps-fonts, I was looking for the string "%!PS-Adbobe", however the hershey fonts just has "%!FontType" - therefore + I've change the code to just look for "%!" +5. For pcf fonts, look for FAMILY as well as FAMILY_NAME +6. Construct name from xlfd for bitmap fonts where can't get seperate components + +0.10b7->0.10b8 (Test version...) +============== + +*** NOTE +*** Please remove any Kfontinst generated Ghostscript and/or StarOffice output before using this version + +1. Forgot to extract foundry from bitmap fonts - however, changed bitmap Xlfd creation, see below. +2. Extract Xlfd from Bitmap fonts directly - not all fonts have each seperate component available. Thanks to Claudio Bandaloukas + for helping me discover the various bugs with Bitmap output. +3. When displaying bitmap details, if individual entries (family, point size, etc) can't be read, then the + Xlfd will be displayed. +4. Ghostscript & StarOffice include guards changed from "kfontinst" to "kfi" -- this will *require" removing of any previous output! +5. Shortened generated TrueType foundry fields - to help with StarOffice + +0.10b6->0.10b7 (Test version...) +============== +1. Fixed a bug with string-to-width conversion for Type1 and bitmap fonts +2. Fixed some compile bugs if no Xft.h found +3. Remove any fonts.alias when deleting a dir +4. When try to open Type1 or Speedo fonts, check magic numbers - for Speedo check char[0]=='D' or 'd', char[1]==num, char[2]=='.', and char[3]==num + +0.10b5->0.10b6 (Test version...) +============== +1. Fonts with "Normal" weight now installed as "Medium" +2. Added support for "Oblique" in xlfd +3. Check is performed to see if destination is writeable before enabling "Install" button, likewise for the "Remove" button. + +0.10b4->0.10b5 (Test version...) +============== +1. Forgot to reset the made-changes state of XftConfig when saved! +2. Add a validator to math & edit line-edits to disallow usage of double-quotes & tabs +3. Select correct default entries for field-name combos when adding an XftRule. +4. Removed check for number of items in match list, as these are not always required (such as for the sub-pixel hinting + rule.) +5. When setting rgba - use symbolic name - previously always setting to 0! +6. Modified help a little +7. Reduced Advanced mode list-view treeStepSize to 10 pixels (from default of 20), this makes it easier for browsing + /usr/X11R6/lib/X11/fonts/etc... +8. Fixed bug where could not remove Xft exclude range! +9. Fixed a bug where uninstalled items could cause duplicates in "Install from" list. +10. Renamed the "Configure System" button to "Apply" - this should make the neccessity of the option more obvious. +11. Fixed display of uninstall folder. +12. Added "include" and "includeif" directives from XftConfig to editor. + +0.10b3->0.10b4 (Test version...) +============== + +*** NOTE +*** Please delete your existing ~/.kde/share/config/kfontinstrc -or- ~/.kde2/share/config/kfontinstrc file +*** before using this version + +1. Added support for X font server config files. +2. Show "unscaled" directories in italic. +3. Abilty to set directories as scaled/unscaled. +4. Modified GUI slightly so that it works beter with Liquid style. +5. Added chack to make sure XftConfig file exists before trying to parse. +6. Advanced editing of XftConfig. +7. Added help on XftConfig - from Danny Tholen (obiwan@mailmij.org) +8. Removed some memory leaks +10. Default folders changed for non-root users. KFontinst will now (upon initial start-up) select the following: + + X fonts dir: $KDEHOME/share/fonts + XConfig file: $KDEHOME/share/fonts/fontpaths + XftConfig file: $HOME/.xftconfig + Fontmap file: $KDEHOME/share/fonts/Fontmap + + ...This should make it possible for users to install fonts without being root. However, problems may arrise when + configuring StarOffice - as this requires some other files to be modified, which won't be possible if SO has been installed + by root. + + ...Also to accomplish this, some changes are needed to 'startkde' - see file README.startkde + +11. Because of the above, when started as non-root, KFontinst will create Type1 and TrueType sub-folders in + $KDEHOME/share/fonts - if they do not already exist. +12. Moved XftConfig stuff from a sub-page of settings tab into its own tab. +13. Added question dialog if module is unloaded before system has been configured. +14. Added ability to "touch" a X font folder - marking it as being modified, so that a re-configure of the that folder + can be done in order to create AFMs, modify encoding, etc. + +0.10b2->0.10b3 (Test version...) +============== +1. When locating Ghostscript's Fontmap file, sub-directories (up to a level of 4) are searched - this allows + for the possiblity of users using a different version of Ghostscript. +2. Create a fonts.scale as well as fonts.dir - just incase another program runs mkfontdir. +3. Fixed an error when creating AFMs for some symbol-encoded fonts. +4. Re-worded SettingsWizard "Folders/Files" tab. +5. Added a checkbox to Ghostscript configuration. +6. Added support for XftConfig. +7. Added/fixed support of Type1 fonts with no FullName or FamilyName fields - such as the hershey fonts. +8. Fixed some bugs when configuring with --enable-final. +9. Basic html help added. + +0.10b1->0.10b2 (Test version...) +============== +1. Minor compile error (struct declared as private, but used elsewhere!) + +0.9.2->0.10b1 (Test version...) +============= +1. Almost a complete re-write, +2. Handles Speedo, and Bitmap fonts +3. fonts.dir & encodings.dir are now created internally - no need for ttmkfdir +4. Re-design of GUI. +5. Advanced mode where X11 folder structure is displayed and all font types may be installed - and a Basic + mode where the X11 folder structure is hidden, and only TrueType and Type1 fonts may be installed. +6. Settings wizard. +7. Application is now a kcontrol module. +8. Complete X11 fonts directory structure is now managed - no need for seperate 'Managed' directory. +9. X11.PS is no longer created, instead the StarOffice printer file (*.PS) is now modified. +10. Ported to FreeType2. +11. Support more encodings - encodings combos now list standard encodings as well as those read from + .enc(.gz) files. +12. Internal AMF creator for Type1 and TrueType fonts - ttf2pt1 and pf2afm.ps are no longer used/supplied. +13. Removed the 'Process AFMs' & 'Delete AFMs' options - all AFMs are created be KFontinst, therefore they + should be OK for StarOffice and AbiWord. +14. If a writable XF86Config file is found - then complete folders may be installed, and folders in the X11 + directory may be uninstalled or disabled (i.e. the folder is not deleted, but it's entry is removed from + the XF86Config file). +15. No longer supply .enc files with KFontinst - they should be provided by the distro. + +0.9.1->0.9.2 +============ +1. Removed a bug where the "Configure System" menu entry was always disabled! +2. Spelling error in Settings dialog. +3. t1lib has problems with some of the fonts supplied with Adobe acrobat - therefore, if t1lib fails to load the + font, then KFontinst itself will try to read the header information (although no preview will be available, + everything else should still work). +4. Fixed multiple installing of programs in other/ directory. For instance KFontinst's version of ttmkfdir + was being installed into $(PREFIX) (usually /usr/bin) as well as $(KDE_DATADIR)/kfontinst - this was incorrect + as KFontinst will only use the version in $(KDE_DATADIR)/kfontinst, and it was possible that a previous version + of ttmkfdir (such as that supplied with XFree86) would have been overwritten. +5. Fixed bug where the user was allowed to select (and subsequently install) fonts which could not be loaded correctly. +6. Added the ability to enter a custom preview string. + +0.9->0.9.1 +========== +1. Fixed a few compile errors. +2. Fix to html formatting error. +3. Fixed a ./configure error if t1lib was not found (the string NO was being used as the + librarary name, instead of an empty string!) +4. Modified the reading of Type1 header information. + +0.8.3->0.9 +========== +1. Converted to KDE2. +2. Rearranged this file! +3. Removed command line interface - KDE2's command line stuff is way different! +4. Re-created dialogs with Qt designer. +5. Removed ProgressDialog, and replaced with a progress bar on a new statusbar. +6. Modified configure script to check for FreeType & t1lib. +7. If an encoding (not unicode) is selected, then the .enc file is copied to the X11 fonts directory. +8. As with the .enc files, the StarOffice .xpp files are also copied, and no longer just sym linked. +9. Removed enabling/disabing of Configure System button. +10. Fontmap.X11 is no longer created, instead the real Fontmap file itself is modified. + +0.8.2->0.8.3 +============ +1. Modified 'kfontinst.kdelnk' so that kdesu is now used - so that a user will automatically be prompted + for the root password. +2. Modified dialogs to use the KDE caption ("Font Installer") instead of the app name ("kfontinst") +3. Corrected size of Configure dialog. +4. Fixed a minor bug where if all fonts were uninstalled, the 'Configure System' button was disabled - therefore not + allowing you to activate the changes! +5. Added a command line interface. (type 'kfontinst --help' for details) +6. Added option to automatically fix TTF postscript names upon install. + +0.8.1->0.8.2 +============ +1. Fixed a bug which always had SO configuration disabled! +2. Fixed a bug when selecting Unicode encoding. +3. Changed "Fonts/Uninstalled" menu entry to "Fonts/Disk" +4. Added keyboard short-cuts to dialogs + +0.8->0.8.1 +========== +1. Fixed a bug where X configuration would fail if no TT fonts present. +2. If no fonts are installed, then the system configuration button/menu-entry is now disabled. +3. Changed menu structure to add 'Fonts' menu. + +0.7.4->0.8 +========== +1. Changed location of StarOffice stuf from

/xp3 to just + -- As StarOffice 5.2 has 'xp3' within a 'share' sub-dir. +2. Changed structure of config file to be more modular. +3. Modified internal code structure to allow easier additon of extra apps to be configured. (NOTE: If any + apps need to be configured, then I'll also [later on] modify the Settings & Configure dialogs to + accomodate these.) +4. Because of 3, added a 'StarOffice' check to the settings dialog. If this is not seleted, then no check + is performed to make sure the SO dir is OK - and the option to config SO is diabled on the config dialog. +5. Added check when installing font to make sure that it's not already installed. + +0.7.3->0.7.4 +============ +1. Changed location of Fontmap.X11 -- from /lib/Fontmap.X11 to + /Fontmap.X11. As it seems some ghostscript installations don't + have the 'lib' sub directory. +2. Improved the documentation a little - added a FAQ section + +0.7.2->0.7.3 +============ +1. Very minor bug fix. + +0.7.1->0.7.2 +============ +1. Added more detailed error messages when system configuration fails. + +0.7->0.7.1 +========== +1. Removed lots of debug info from ttf2pt1, and afm.pl -- this should drastically speed up afm creation. +2. Modified ttf2pt1 to accept a parameter to just create .afm files +3. Added option to modify a .afm file when installing. +4. Added "Unicode" to list of encodings that can be used. +5. Removed kfontinst-cp1252.enc, kfontinst-cp1252.xpp -- these were hacks anyway, and seing as Qt2 is going to + support cp1252 by a hard-coded codec, there's no real point... +6. Rearranged the Configure System dialog - so that Force AFM regeneration is grouped next to the Generate AFMs option. +7. Encoding files now stored in /share/apps/kfontinst/Encodings + +0.6.1->0.7 +========== +1. Modified ttmkfdir & ttf2pt1 to allow usage of X11 style font re-encoding files. +2. Because .enc files are now used by kfontinst, removed the possibility of using gzipped encodings. +3. Added the ability to delete an installed font's .afm file. +4. Fixed a bug in the TtfPsNameFixer class - this would cause ttf2pt1 to creash when accessing a modified font! +5. Font encodings are now stored in /share/x11encodings +6. Removed the reencode shell script, as the encodng is all done by ttmkfdir. +7. Removed xfinst shell script - handled internally. +8. Supplied a kfontinst-cp1252 encoding - with the ugly single-quotes normaly found in .ttf files remapped to + the nice looking ones. +9. Added functionality, when configuring StarOffice, to select an appropriate xprinter.prolog for the selected + encoding (if one exists)... + +0.6->0.6.1 +========== +1. Fixed a display bug in the 'Un/Exclude from StarOffice" options. + +0.5->0.6 +======== +1. Added the ability to 'fix' the postscript names in a ttf file. +2. Fixed some missing changes to help files. + +0.4->0.5 +======== +1. Discovered a patch that modifies StarOffice's xprinter.prolog so that font's don't need to be modified + to use the microsoft cp1252 enocding scheme. (Previosuly the PS output from StarOffice would not print + OK with ghostscript - when using extra characters - unless the .ttf file was modified.) +2. Because of 1, removed the abilty to modify a TrueType font's internal charactermap - this was a hack anyway. +3. xfinst now uses mkfontdir to create encodings.dir - instead of kfontinst's install procedure copying a standard + one in (this didn't actually work...) +4. As kfontinst no longer reads the .enc files themselves, added the ability to use .enc.gz files as well + when selecting an encoding for X. +5. Re-wrote xfinst & reencode to be plain 'sh' scripts, as opposed to 'tcsh' scripts. + +0.3->0.4 +======== +1. All X fonts will now be placed with in a directory - "Managed" - this makes things easier for + AbiWord, and maybe others. +2. encodings.dir & Encodings/ will now be placed within this new "Managed" dir. +3. Only 1 StarOffice .PS file will be created - X11.PS +4. Only 1 Fontmap will be created - Fontmap.X11 - and this will be placed within + /lib +5. Because of 4, an option has been added to the Settings dialog to specify the location of + Ghostscript. +6. Because of 1, removed the font option from the Configure dialog. +7. Fixed an error with getting PS name from TT font - PS names are not allowed to have spaces, but in + fences.ttf it does. FontEngine.cpp will now check for, and fix, this - using the same 'algorithm' as that + of ttf2pt1 (which means the names will tie up with those in the .afm files). +8. Added some improvements to control of dialogs. + +0.2.1->0.3 +========== +1. Reverted back to naming .afm files .afm - and renaming any conflicting fonts. +2. Speeded up copying of files - by copying preview bitmap as opposed to regenerating it! +3. Removed need for FontMetrics directory - .afm files now placed within TrueType or Type1 dir, + and sym links are produced for StarOffice. + + 1. & 3. should now make things easier for AbiWord. + +4. Fixed output of Fontmap so that "URW Gothic" will be aliased as "UrwGothic-Roman" (etc.) as + this is what Qt will output. +5. Added more processing of .afm files - this makes them OK for AbiWord. + +0.2->0.2.1 +========== +1. Modified start-up progress dailog, and added progress dialogs to main window when scanning + fonts. These will only appear if numTTfonts>X || numT1fonts>Y + +0.1->0.2 +======== +1. Combined views of installed TrueType and Type1 fonts into 1 list. +2. When uninstalling a font, can now move the font to another directory - or delete. +3. Used t1lib so that Type1 fonts can also be previewed. +4. Changed Fontmap creator to dynamically allocate memory for each font-category. +5. .afm files are now named as ..afm - this removes the need + for renaming the .afm file if there exists Type1 and TrueType fonts with the same + fontname. +6. Removed the re-scanning of the install directories whenever a font is added. +7. Added support for extra Type1 font weights. +8. Added a start-up screen to inform the user that the installed/disk fonts are being scanned. +9. When exiting, confirmation is now only asked if the system has been changed and not + reconfigured. diff --git a/kcontrol/kfontinst/Makefile.am b/kcontrol/kfontinst/Makefile.am new file mode 100644 index 000000000..963ec3c93 --- /dev/null +++ b/kcontrol/kfontinst/Makefile.am @@ -0,0 +1,14 @@ +if include_fontinst_tn +FONTINST_TN_SUBDIR=thumbnail +FONTINST_VP_SUBDIR=viewpart +endif + +SUBDIRS = lib $(FONTINST_TN_SUBDIR) $(FONTINST_VP_SUBDIR) kcmfontinst kfile-plugin kfontinst kio + +EXTRA_DIST = TODO + +konqservicedir = $(kde_datadir)/konqueror/servicemenus +konqservice_DATA = installfont.desktop + +messages: rc.cpp + $(XGETTEXT) rc.cpp */*.cpp */*.h -o $(podir)/kfontinst.pot diff --git a/kcontrol/kfontinst/TODO b/kcontrol/kfontinst/TODO new file mode 100644 index 000000000..94466e61c --- /dev/null +++ b/kcontrol/kfontinst/TODO @@ -0,0 +1 @@ +1. Support other X server config file types - if there are any other types... diff --git a/kcontrol/kfontinst/configure.in.bot b/kcontrol/kfontinst/configure.in.bot new file mode 100644 index 000000000..99042cbdb --- /dev/null +++ b/kcontrol/kfontinst/configure.in.bot @@ -0,0 +1,12 @@ +dnl put here things which have to be done as very last part of configure + +if test -z "$FONTINST_SUBDIR"; then + echo "" + echo "KFontInstall control module got disabled from compilation" + echo "because of missing FreeType 2.x libraries/headers." + echo "You can download the freetype library from http://www.freetype.org/." + echo "" + all_tests=bad +fi + + diff --git a/kcontrol/kfontinst/configure.in.in b/kcontrol/kfontinst/configure.in.in new file mode 100644 index 000000000..df6d3d34c --- /dev/null +++ b/kcontrol/kfontinst/configure.in.in @@ -0,0 +1,155 @@ +FONTINST_SUBDIR="" +FONTINST_TN="" + +# Check for FreeType... +KFI_FOUND_FREETYPE=0 + +KDE_FIND_PATH(freetype-config, FREETYPE_CONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/bin /usr/local/bin /opt/local/bin], [ + AC_MSG_WARN([Could not find libfreetype anywhere, check http://www.freetype.org/]) + ]) + +if test -n "$FREETYPE_CONFIG"; then + vers=`$FREETYPE_CONFIG --version 2>/dev/null | sed -e 's/libfreetype //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` + if test -n "$vers" && test "$vers" -ge 9002003 + then + LIBFREETYPE_LIBS="`$FREETYPE_CONFIG --libs`" + LIBFREETYPE_RPATH= + for args in $LIBFREETYPE_LIBS; do + case $args in + -L*) + LIBFREETYPE_RPATH="$LIBFREETYPE_RPATH $args" + ;; + esac + done + LIBFREETYPE_RPATH=`echo $LIBFREETYPE_RPATH | sed -e "s/-L/-R/g"` + LIBFREETYPE_CFLAGS="`$FREETYPE_CONFIG --cflags`" + KFI_FOUND_FREETYPE=1 + else + AC_MSG_WARN([You need at least FreeType 2.1.3]) + fi +fi + +if test "$KFI_FOUND_FREETYPE" -eq 1; then + AC_SUBST(LIBFREETYPE_LIBS) + AC_SUBST(LIBFREETYPE_CFLAGS) + AC_SUBST(LIBFREETYPE_RPATH) + + KFI_FOUND_FONTCONFIG=0 + # check for fontconfig... + KDE_FIND_PATH(fontconfig-config, FONTCONFIG_CONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/bin /usr/local/bin /opt/local/bin], [ + KDE_FIND_PATH(pkg-config, PKGCONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/bin /usr/local/bin /opt/local/bin], [ + AC_MSG_WARN([Could not find neither pkg-config nor fontconfig-config, check http://www.fontconfig.org/ ]) + ]) + ]) + + if test -n "$PKGCONFIG"; then + vers=`$PKGCONFIG fontconfig --modversion 2>/dev/null | sed -e 's/libfontconfig //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` + if test -n "$vers" && test "$vers" -ge 2000000 ; then + LIBFONTCONFIG_LIBS="`$PKGCONFIG fontconfig --libs`" + LIBFONTCONFIG_RPATH= + for args in $LIBFONTCONFIG_LIBS; do + case $args in + -L*) + LIBFONTCONFIG_RPATH="$LIBFONTCONFIG_RPATH $args" + ;; + esac + done + LIBFONTCONFIG_RPATH=`echo $LIBFONTCONFIG_RPATH | sed -e "s/-L/-R/g"` + LIBFONTCONFIG_CFLAGS="`$PKGCONFIG fontconfig --cflags`" + KFI_FOUND_FONTCONFIG=1 + fi + fi + + if test -n "$FONTCONFIG_CONFIG"; then + vers=`$FONTCONFIG_CONFIG --version 2>/dev/null | sed -e 's/libfontconfig //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` + if test -n "$vers" && test "$vers" -ge 2000000 ; then + LIBFONTCONFIG_LIBS="`$FONTCONFIG_CONFIG --libs`" + LIBFONTCONFIG_RPATH= + for args in $LIBFONTCONFIG_LIBS; do + case $args in + -L*) + LIBFONTCONFIG_RPATH="$LIBFONTCONFIG_RPATH $args" + ;; + esac + done + LIBFONTCONFIG_RPATH=`echo $LIBFONTCONFIG_RPATH | sed -e "s/-L/-R/g"` + LIBFONTCONFIG_CFLAGS="`$FONTCONFIG_CONFIG --cflags`" + KFI_FOUND_FONTCONFIG=1 + fi + fi + + if test "$KFI_FOUND_FONTCONFIG" -eq 1; then + AC_SUBST(LIBFONTCONFIG_LIBS) + AC_SUBST(LIBFONTCONFIG_CFLAGS) + AC_SUBST(LIBFONTCONFIG_RPATH) + + # Check OS... + AC_MSG_CHECKING([OS]) + case "$host" in + *-*-linux*) UNAME='Linux' ;; + *-*-freebsd*) UNAME='FreeBSD' ;; + *-*-kfreebsd-gnu*) UNAME='GNU/kFreeBSD' ;; + *-*-netbsd*) UNAME='NetBSD' ;; + *-*-solaris*) UNAME='Solaris' ;; + *-*-irix*) UNAME='Irix' ;; + *-*-aix*) UNAME='AIX' ;; + *-*-hpux*) UNAME='HPUX' ;; + *-*-darwin*) UNAME='Darwin' ;; + *) UNAME='Unknown' ;; + esac + AC_MSG_RESULT($UNAME) + AC_SUBST(UNAME) + + # Check for fontenc... + ac_font_enc_headers=0 + KDE_CHECK_HEADER(X11/fonts/fontenc.h,[ac_font_enc_headers=1]) + if test "$ac_font_enc_headers" = "0"; then + AC_MSG_WARN(FontEnc headers not found. FontEnc support disabled) + else + ac_LDFLAGS_save="$LDFLAGS" + ld_shared_flag= + KDE_CHECK_COMPILER_FLAG(shared, [ld_shared_flag="-shared"]) + LDFLAGS="$LDFLAGS $ld_shared_flag $all_libraries -lz" + KDE_CHECK_LIB(fontenc,FontEncDirectory,ac_font_enc_lib=1,ac_font_enc_lib=0) + if test "$ac_font_enc_lib" = "1"; then + LIB_FONT_ENC="-lfontenc" + AC_DEFINE(HAVE_FONT_ENC, 1, [Defines if you have FontEnc]) + fi + LDFLAGS="$ac_LDFLAGS_save" + fi + AC_SUBST(LIB_FONT_ENC) + + FONTINST_SUBDIR="kfontinst" + # Check for Xft... + ac_xft_headers=0 + ac_CXXFLAGS_save="$CXXFLAGS" + ac_CFLAGS_save="$CFLAGS" + ac_CPPFLAGS_save="$CPPFLAGS" + CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $LIBFREETYPE_CFLAGS" + CFLAGS="$CXXFLAGS" + CPPFLAGS="$CXXFLAGS" + + AC_CHECK_HEADER(X11/Xft/Xft.h, [ac_xft_headers=1]) + if test "$ac_xft_headers" -eq 1 ; then + LIBXFT_LIB=-lXft + AC_SUBST(LIBXFT_LIB) + else + AC_MSG_WARN([Missing Xft headers - disabling font previews!]) + fi + CXXFLAGS="$ac_CXXFLAGS_save" + CFLAGS="$ac_CFLAGS_save" + CPPFLAGS="$ac_CPPFLAGS_save" + else + AC_MSG_WARN([Missing FontConfig - disabling kfontinst!]) + fi +else + AC_MSG_WARN([Missing FreeType2 - disabling kfontinst!]) +fi + +AM_CONDITIONAL(include_fontinst_tn, test "$ac_xft_headers" -eq 1) + +if test "$ac_xft_headers" -eq 1 ; then + AC_DEFINE(HAVE_XFT, 1, [Defines if you have Xft]) +fi + +AM_CONDITIONAL(include_kcontrol_kfontinst, test -n "$FONTINST_SUBDIR") diff --git a/kcontrol/kfontinst/installfont.desktop b/kcontrol/kfontinst/installfont.desktop new file mode 100644 index 000000000..5286ce4ec --- /dev/null +++ b/kcontrol/kfontinst/installfont.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +ServiceTypes=application/x-font-ttf,application/x-font-type1,application/x-font-speedo,application/x-font-bdf,application/x-font-pcf,application/x-font-snf,application/x-font-otf,application/x-font-ttc,application/x-afm +Actions=installFont; + +[Desktop Action installFont] +Name=Install +Name[af]=Installeer +Name[ar]=ثبت +Name[be]=Устанавіць +Name[bg]=Инсталиране +Name[bn]=ইনস্টল +Name[br]=Staliañ +Name[bs]=Instaliraj +Name[ca]=Instal·la +Name[cs]=Instalovat +Name[csb]=Instalëjë +Name[cy]=Gosod +Name[da]=Installér +Name[de]=Installieren +Name[el]=Εγκατάσταση +Name[eo]=Instali +Name[es]=Instalar +Name[et]=Paigaldamine +Name[eu]=Instalatu +Name[fa]=نصب +Name[fi]=Asenna +Name[fr]=Installer +Name[fy]=Ynstallearje +Name[ga]=Suiteáil +Name[gl]=Instalar +Name[he]=התקנה +Name[hi]=संस्थापित +Name[hr]=Instaliraj +Name[hu]=Telepítő +Name[is]=Setja upp +Name[it]=Installa +Name[ja]=インストール +Name[ka]=ინსტალაცია +Name[kk]=Орнату +Name[km]=ដំឡើង +Name[ko]=설치... +Name[lt]=Įdiegti +Name[lv]=Instalēt +Name[mk]=Инсталирај +Name[ms]=Pasang +Name[mt]=Installa +Name[nb]=Installer +Name[nds]=Installeren +Name[ne]=स्थापना गर्नुहोस् +Name[nl]=Installeren +Name[nn]=Installer +Name[pa]=ਇੰਸਟਾਲ +Name[pl]=Instaluj +Name[pt]=Instalar +Name[pt_BR]=Instalar +Name[ro]=Instalare +Name[ru]=Установка +Name[rw]=Kwinjizaporogaramu +Name[se]=Sajáiduhte +Name[sk]=Inštalácia +Name[sl]=Namesti +Name[sr]=Инсталирај +Name[sr@Latn]=Instaliraj +Name[sv]=Installera +Name[ta]=நிறுவி +Name[te]=స్థాపించు +Name[tg]=Гузоштан +Name[th]=ติดตั้ง +Name[tr]=Kur +Name[tt]=Quyu +Name[uk]=Встановлення +Name[uz]=Oʻrnatish +Name[uz@cyrillic]=Ўрнатиш +Name[vi]=Cài đặt +Name[wa]=Astaler +Name[zh_CN]=安装 +Name[zh_TW]=安裝 +Icon=fonts +Exec=kfmclient copy %U fonts:/ diff --git a/kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp b/kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp new file mode 100644 index 000000000..4a6b0b3ee --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp @@ -0,0 +1,647 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CKCmFontInst +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 26/04/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "KCmFontInst.h" +#include "KfiConstants.h" +#include "PrintDialog.h" +#include "SettingsDialog.h" +#ifdef HAVE_XFT +#include "KfiPrint.h" +#include "FcEngine.h" +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Misc.h" +#include "KFileFontIconView.h" +#include "KFileFontView.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CFG_GROUP "Main Settings" +#define CFG_LISTVIEW "ListView" +#define CFG_PATH "Path" +#define CFG_SPLITTER_SIZES "SplitterSizes" +#define CFG_SHOW_BITMAP "ShowBitmap" +#define CFG_FONT_SIZE "FontSize" + +typedef KGenericFactory FontInstallFactory; +K_EXPORT_COMPONENT_FACTORY(kcm_fontinst, FontInstallFactory("kcmfontinst")) + +namespace KFI +{ + +CKCmFontInst::CKCmFontInst(QWidget *parent, const char *, const QStringList&) + : KCModule(parent, "kfontinst"), +#ifdef HAVE_XFT + itsPreview(NULL), +#endif + itsConfig(KFI_UI_CFG_FILE) +{ + KGlobal::locale()->insertCatalogue(KFI_CATALOGUE); + + KAboutData* about = new KAboutData("kcmfontinst", + I18N_NOOP("KDE Font Installer"), + 0, 0, + KAboutData::License_GPL, + I18N_NOOP("GUI front end to the fonts:/ ioslave.\n" + "(c) Craig Drummond, 2000 - 2004")); + about->addAuthor("Craig Drummond", I18N_NOOP("Developer and maintainer"), "craig@kde.org"); + setAboutData(about); + + const char *appName=KCmdLineArgs::appName(); + + itsEmbeddedAdmin=Misc::root() && (NULL==appName || strcmp("kcontrol", appName) && + KCmdLineArgs::parsedArgs()->isSet("embed")); + + itsStatusLabel = new QLabel(this); + itsStatusLabel->setFrameShape(QFrame::Panel); + itsStatusLabel->setFrameShadow(QFrame::Sunken); + itsStatusLabel->setLineWidth(1); + + itsConfig.setGroup(CFG_GROUP); + + QFrame *fontsFrame; +#ifdef HAVE_XFT + KLibFactory *factory=KLibLoader::self()->factory("libkfontviewpart"); + + if(factory) + { + itsSplitter=new QSplitter(this); + fontsFrame=new QFrame(itsSplitter), + itsPreview=(KParts::ReadOnlyPart *)factory->create(itsSplitter, "kcmfontinst", "KParts::ReadOnlyPart"); + itsSplitter->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + + QValueList sizes(itsConfig.readIntListEntry(CFG_SPLITTER_SIZES)); + + if(2!=sizes.count()) + { + sizes.clear(); + sizes+=250; + sizes+=150; + } + itsSplitter->setSizes(sizes); + } + else + { +#endif + fontsFrame=new QFrame(this); + fontsFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); +#ifdef HAVE_XFT + } +#endif + + QGridLayout *fontsLayout=new QGridLayout(fontsFrame, 1, 1, 0, 1); + QVBoxLayout *layout=new QVBoxLayout(this, 0, KDialog::spacingHint()); + KToolBar *toolbar=new KToolBar(this); + bool showBitmap(itsConfig.readBoolEntry(CFG_SHOW_BITMAP, false)); + + fontsFrame->setLineWidth(0); + toolbar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + toolbar->setMovingEnabled(false); + + QString previousPath=itsConfig.readEntry(CFG_PATH); + + itsDirOp = new KDirOperator(Misc::root() ? QString("fonts:/") : QString("fonts:/")+i18n(KFI_KIO_FONTS_USER), + fontsFrame); + itsDirOp->setViewConfig(&itsConfig, "ListView Settings"); + itsDirOp->setMinimumSize(QSize(96, 64)); + setMimeTypes(showBitmap); + itsDirOp->dirLister()->setMainWindow(this); + itsDirOp->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + fontsLayout->addMultiCellWidget(itsDirOp, 0, 0, 0, 1); + + KPushButton *button=new KPushButton(KGuiItem(i18n("Add Fonts..."), "newfont"), fontsFrame); + connect(button, SIGNAL(clicked()), SLOT(addFonts())); + button->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + fontsLayout->addWidget(button, 1, 0); + fontsLayout->addItem(new QSpacerItem(4, 4, QSizePolicy::Expanding, QSizePolicy::Minimum)); + + layout->addWidget(toolbar); +#ifdef HAVE_XFT + layout->addWidget(itsPreview ? itsSplitter : fontsFrame); +#else + layout->addWidget(fontsFrame); +#endif + layout->addWidget(itsStatusLabel); + + setButtons(0); + setRootOnlyMsg(i18n("The fonts shown are your personal fonts.
To see (and install) " + "system-wide fonts, click on the \"Administrator Mode\" button below.")); + setUseRootOnlyMsg(true); + itsDirOp->setMode(KFile::Files); + + // + // Now for the hack! + KAction *act; + KActionMenu *topMnu=dynamic_cast(itsDirOp->actionCollection()->action("popupMenu")); + + itsViewMenuAct=dynamic_cast(itsDirOp->actionCollection()->action("view menu")); + topMnu->popupMenu()->clear(); + connect(topMnu->popupMenu(), SIGNAL(aboutToShow()), SLOT(setupMenu())); + if((act=itsDirOp->actionCollection()->action("up"))) + act->disconnect(SIGNAL(activated()), itsDirOp, SLOT(cdUp())); + if((act=itsDirOp->actionCollection()->action("home"))) + act->disconnect(SIGNAL(activated()), itsDirOp, SLOT(home())); + if((act=itsDirOp->actionCollection()->action("back"))) + act->disconnect(SIGNAL(activated()), itsDirOp, SLOT(back())); + if((act=itsDirOp->actionCollection()->action("forward"))) + act->disconnect(SIGNAL(activated()), itsDirOp, SLOT(forward())); + + if((act=itsDirOp->actionCollection()->action("reload"))) + act->plug(toolbar); + + topMnu->insert(itsViewMenuAct); + + if((itsIconAct=dynamic_cast(itsDirOp->actionCollection()->action("short view")))) + { + disconnect(itsIconAct, SIGNAL(activated()), itsDirOp, SLOT(slotSimpleView())); + connect(itsIconAct, SIGNAL(activated()), SLOT(iconView())); + itsIconAct->plug(toolbar); + } + + if((itsListAct=dynamic_cast(itsDirOp->actionCollection()->action("detailed view")))) + { + disconnect(itsListAct, SIGNAL(activated()), itsDirOp, SLOT(slotDetailedView())); + connect(itsListAct, SIGNAL(activated()), SLOT(listView())); + itsListAct->plug(toolbar); + } + + itsShowBitmapAct=new KToggleAction(i18n("Show Bitmap Fonts"), "font_bitmap", 0, this, SLOT(filterFonts()), + itsDirOp->actionCollection(), "showbitmap"); + itsShowBitmapAct->setChecked(showBitmap); + itsShowBitmapAct->plug(toolbar); + + toolbar->insertLineSeparator(); + + act=new KAction(i18n("Add Fonts..."), "newfont", 0, this, SLOT(addFonts()), itsDirOp->actionCollection(), "addfonts"); + act->plug(toolbar); + topMnu->insert(act); + + if((itsDeleteAct=itsDirOp->actionCollection()->action("delete"))) + { + itsDeleteAct->plug(toolbar); + itsDeleteAct->setEnabled(false); + topMnu->insert(itsDeleteAct); + disconnect(itsDeleteAct, SIGNAL(activated()), itsDirOp, SLOT(deleteSelected())); + connect(itsDeleteAct, SIGNAL(activated()), this, SLOT(removeFonts())); + } + + toolbar->insertLineSeparator(); + act=new KAction(i18n("Configure..."), "configure", 0, this, SLOT(configure()), itsDirOp->actionCollection(), "configure"); + act->plug(toolbar); +#ifdef HAVE_XFT + toolbar->insertLineSeparator(); + act=new KAction(i18n("Print..."), "fileprint", 0, this, SLOT(print()), itsDirOp->actionCollection(), "print"); + act->plug(toolbar); +#endif + + if( (itsSepDirsAct=itsDirOp->actionCollection()->action("separate dirs")) && + (itsShowHiddenAct=itsDirOp->actionCollection()->action("show hidden"))) + { + //disconnect(itsViewMenuAct->popupMenu(), SIGNAL(aboutToShow()), itsDirOp, SLOT(insertViewDependentActions())); + connect(itsViewMenuAct->popupMenu(), SIGNAL(aboutToShow()), SLOT(setupViewMenu())); + setupViewMenu(); + } + +#ifdef HAVE_XFT + if(itsPreview) + { + KActionCollection *previewCol=itsPreview->actionCollection(); + + if(previewCol && previewCol->count()>0 && (act=previewCol->action("changeText"))) + act->plug(toolbar); + } +#endif + + // + // Set view... + if(itsConfig.readBoolEntry(CFG_LISTVIEW, true)) + listView(); + else + iconView(); + + itsDirOp->dirLister()->setShowingDotFiles(true); + + connect(itsDirOp, SIGNAL(fileHighlighted(const KFileItem *)), SLOT(fileHighlighted(const KFileItem *))); + connect(itsDirOp, SIGNAL(finishedLoading()), SLOT(loadingFinished())); + connect(itsDirOp, SIGNAL(dropped(const KFileItem *, QDropEvent *, const KURL::List &)), + SLOT(dropped(const KFileItem *, QDropEvent *, const KURL::List &))); + connect(itsDirOp->dirLister(), SIGNAL(infoMessage(const QString &)), SLOT(infoMessage(const QString &))); + connect(itsDirOp, SIGNAL(updateInformation(int, int)), SLOT(updateInformation(int, int))); +} + +CKCmFontInst::~CKCmFontInst() +{ +#ifdef HAVE_XFT + if(itsPreview) + { + itsConfig.setGroup(CFG_GROUP); + itsConfig.writeEntry(CFG_SPLITTER_SIZES, itsSplitter->sizes()); + } +#endif + delete itsDirOp; +} + +void CKCmFontInst::setMimeTypes(bool showBitmap) +{ + QStringList mimeTypes; + + mimeTypes << "application/x-font-ttf" + << "application/x-font-otf" + << "application/x-font-ttc" + << "application/x-font-type1"; + if(showBitmap) + mimeTypes << "application/x-font-pcf" + << "application/x-font-bdf"; + + itsDirOp->setMimeFilter(mimeTypes); +} + +void CKCmFontInst::filterFonts() +{ + setMimeTypes(itsShowBitmapAct->isChecked()); + itsDirOp->rereadDir(); + itsConfig.setGroup(CFG_GROUP); + itsConfig.writeEntry(CFG_SHOW_BITMAP, itsShowBitmapAct->isChecked()); + if(itsEmbeddedAdmin) + itsConfig.sync(); +} + +QString CKCmFontInst::quickHelp() const +{ + return Misc::root() + ? i18n("

Font Installer

This module allows you to" + //" install TrueType, Type1, Speedo, and Bitmap" + " install TrueType, Type1, and Bitmap" + " fonts.

You may also install fonts using Konqueror:" + " type fonts:/ into Konqueror's location bar" + " and this will display your installed fonts. To install a" + " font, simply copy one into the folder.

") + : i18n("

Font Installer

This module allows you to" + //" install TrueType, Type1, Speedo, and Bitmap" + " install TrueType, Type1, and Bitmap" + " fonts.

You may also install fonts using Konqueror:" + " type fonts:/ into Konqueror's location bar" + " and this will display your installed fonts. To install a" + " font, simply copy it into the appropriate folder - " + " \"Personal\" for fonts available to just yourself, or " + " \"System\" for system-wide fonts (available to all).

" + "

NOTE: As you are not logged in as \"root\", any" + " fonts installed will only be available to you. To install" + " fonts system-wide, use the \"Administrator Mode\"" + " button to run this module as \"root\".

"); +} + +void CKCmFontInst::listView() +{ + CKFileFontView *newView=new CKFileFontView(itsDirOp, "detailed view"); + + itsDirOp->setView(newView); + itsListAct->setChecked(true); + itsConfig.setGroup(CFG_GROUP); + itsConfig.writeEntry(CFG_LISTVIEW, true); + if(itsEmbeddedAdmin) + itsConfig.sync(); + itsDirOp->setAcceptDrops(true); +} + +void CKCmFontInst::iconView() +{ + CKFileFontIconView *newView=new CKFileFontIconView(itsDirOp, "simple view"); + + itsDirOp->setView(newView); + itsIconAct->setChecked(true); + itsConfig.setGroup(CFG_GROUP); + itsConfig.writeEntry(CFG_LISTVIEW, false); + if(itsEmbeddedAdmin) + itsConfig.sync(); + itsDirOp->setAcceptDrops(true); +} + +void CKCmFontInst::setupMenu() +{ + itsDirOp->setupMenu(KDirOperator::SortActions|/*KDirOperator::FileActions|*/KDirOperator::ViewActions); +} + +void CKCmFontInst::setupViewMenu() +{ + itsViewMenuAct->remove(itsSepDirsAct); + itsViewMenuAct->remove(itsShowHiddenAct); +} + +void CKCmFontInst::fileHighlighted(const KFileItem *item) +{ + const KFileItemList *list=itsDirOp->selectedItems(); + + itsDeleteAct->setEnabled(list && list->count()); + +#ifdef HAVE_XFT + if(itsPreview) + { + // + // Generate preview... + const KFileItem *previewItem=item + ? item + : list && 1==list->count() + ? list->getFirst() + : NULL; + + if(previewItem && list && list->contains(previewItem)) // OK, check its been selected - not deselected!!! + itsPreview->openURL(previewItem->url()); + } +#endif +} + +void CKCmFontInst::loadingFinished() +{ + QListView *lView=dynamic_cast(itsDirOp->view()); + + if(lView) + lView->sort(); + else + { + QIconView *iView=dynamic_cast(itsDirOp->view()); + + if(iView) + iView->sort(); + } + fileHighlighted(NULL); +} + +void CKCmFontInst::addFonts() +{ + KURL::List list=KFileDialog::getOpenURLs(QString::null, "application/x-font-ttf application/x-font-otf " + "application/x-font-ttc application/x-font-type1 " + "application/x-font-pcf application/x-font-bdf", + //"application/x-font-snf application/x-font-speedo", + this, i18n("Add Fonts")); + + if(list.count()) + addFonts(list, itsDirOp->url()); +} + +void CKCmFontInst::removeFonts() +{ + if(itsDirOp->selectedItems()->isEmpty()) + KMessageBox::information(this, i18n("You did not select anything to delete."), i18n("Nothing to Delete")); + else + { + KURL::List urls; + QStringList files; + KFileItemListIterator it(*(itsDirOp->selectedItems())); + + for(; it.current(); ++it) + { + KURL url((*it)->url()); + + url.setQuery(KFI_KIO_NO_CLEAR); + files.append((*it)->text()); + urls.append(url); + } + + bool doIt=false; + + switch(files.count()) + { + case 0: + break; + case 1: + doIt = KMessageBox::Continue==KMessageBox::warningContinueCancel(this, + i18n("Do you really want to delete\n '%1'?").arg(files.first()), + i18n("Delete Font"), KStdGuiItem::del()); + break; + default: + doIt = KMessageBox::Continue==KMessageBox::warningContinueCancelList(this, + i18n("Do you really want to delete this font?", "Do you really want to delete these %n fonts?", + files.count()), + files, i18n("Delete Fonts"), KStdGuiItem::del()); + } + + if(doIt) + { + KIO::DeleteJob *job = KIO::del(urls, false, true); + connect(job, SIGNAL(result(KIO::Job *)), this, SLOT(delResult(KIO::Job *))); + job->setWindow(this); + job->setAutoErrorHandlingEnabled(true, this); + } + } +} + +void CKCmFontInst::configure() +{ + CSettingsDialog(this).exec(); +} + +void CKCmFontInst::print() +{ +#ifdef HAVE_XFT + KFileItemList list; + bool ok=false; + + for (KFileItem *item=itsDirOp->view()->firstFileItem(); item && !ok; item=itsDirOp->view()->nextItem(item)) + if(Print::printable(item->mimetype())) + ok=true; + + if(ok) + { + const KFileItemList *list=itsDirOp->selectedItems(); + bool select=false; + + if(list) + { + KFileItemList::Iterator it(list->begin()), + end(list->end()); + + for(; it!=end && !select; ++it) + if(Print::printable((*it)->mimetype())) + select=true; + } + + CPrintDialog dlg(this); + + itsConfig.setGroup(CFG_GROUP); + if(dlg.exec(select, itsConfig.readNumEntry(CFG_FONT_SIZE, 1))) + { + static const int constSizes[]={0, 12, 18, 24, 36, 48}; + + QStringList items; + QValueVector sizes; + CFcEngine engine; + + if(dlg.outputAll()) + { + for (KFileItem *item=itsDirOp->view()->firstFileItem(); item; item=itsDirOp->view()->nextItem(item)) + items.append(item->name()); + } + else + { + KFileItemList::Iterator it(list->begin()), + end(list->end()); + + for(; it!=end; ++it) + items.append((*it)->name()); + } + Print::printItems(items, constSizes[dlg.chosenSize()], this, engine); + itsConfig.writeEntry(CFG_FONT_SIZE, dlg.chosenSize()); + if(itsEmbeddedAdmin) + itsConfig.sync(); + } + } + else + KMessageBox::information(this, i18n("There are no printable fonts.\nYou can only print non-bitmap fonts."), + i18n("Cannot Print")); +#endif +} + +void CKCmFontInst::dropped(const KFileItem *i, QDropEvent *, const KURL::List &urls) +{ + if(urls.count()) + addFonts(urls, i && i->isDir() ? i->url() : itsDirOp->url()); +} + +void CKCmFontInst::infoMessage(const QString &msg) +{ + itsStatusLabel->setText(msg); +} + +static QString family(const QString &name) +{ + int commaPos=name.find(','); + + return -1==commaPos ? name : name.left(commaPos); +} + +void CKCmFontInst::updateInformation(int, int fonts) +{ + KIO::filesize_t size=0; + QString text(i18n("One Font", "%n Fonts", fonts)); + QStringList families; + + if(fonts>0) + { + KFileItem *item=NULL; + + for (item=itsDirOp->view()->firstFileItem(); item; item=itsDirOp->view()->nextItem(item)) + { + QString fam(family(item->text())); + + size+=item->size(); + if(-1==families.findIndex(fam)) + families+=fam; + } + } + + if(fonts>0) + { + text+=" "; + text+=i18n("(%1 Total)").arg(KIO::convertSize(size)); + } + text+=" - "; + text+=i18n("One Family", "%n Families", families.count()); + itsStatusLabel->setText(text); +} + +void CKCmFontInst::delResult(KIO::Job *job) +{ + // + // To speed up font deletion, we dont rescan font list each time - so after this has completed, we need + // to refresh font list before updating the directory listing... + QByteArray packedArgs; + QDataStream stream(packedArgs, IO_WriteOnly); + + stream << KFI::SPECIAL_RESCAN; + + KIO::NetAccess::synchronousRun(KIO::special(KFI_KIO_FONTS_PROTOCOL ":/", packedArgs), this); + jobResult(job); +} + +void CKCmFontInst::jobResult(KIO::Job *job) +{ + // + // Force an update of the view. For some reason the view is not automatically updated when + // run in embedded mode - e.g. from the "Admin" mode button on KControl. + itsDirOp->dirLister()->updateDirectory(itsDirOp->url()); + if(job && 0==job->error()) + KMessageBox::information(this, +#ifdef HAVE_XFT + i18n("

Please note that any open applications will need to be restarted in order " + "for any changes to be noticed.

(You will also have to restart this application " + "in order to use its print function on any newly installed fonts.)

"), +#else + i18n("Please note that any open applications will need to be restarted in order " + "for any changes to be noticed."), +#endif + i18n("Success"), "KFontinst_WarnAboutFontChangesAndOpenApps"); +} + +void CKCmFontInst::addFonts(const KURL::List &src, const KURL &dest) +{ + if(src.count()) + { + KURL::List copy(src); + KURL::List::ConstIterator it; + + // + // Check if font has any associated AFM or PFM file... + for(it=src.begin(); it!=src.end(); ++it) + { + KURL::List associatedUrls; + + Misc::getAssociatedUrls(*it, associatedUrls, false, this); + copy+=associatedUrls; + } + + KIO::CopyJob *job=KIO::copy(copy, dest, true); + connect(job, SIGNAL(result(KIO::Job *)), this, SLOT(jobResult(KIO::Job *))); + job->setWindow(this); + job->setAutoErrorHandlingEnabled(true, this); + } +} + +} + +#include "KCmFontInst.moc" diff --git a/kcontrol/kfontinst/kcmfontinst/KCmFontInst.h b/kcontrol/kfontinst/kcmfontinst/KCmFontInst.h new file mode 100644 index 000000000..add6c4c36 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/KCmFontInst.h @@ -0,0 +1,116 @@ +#ifndef __KCM_FONT_INST_H__ +#define __KCM_FONT_INST_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CKCmFontInst +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 26/04/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#ifdef HAVE_XFT +#include +#endif + +class KDirOperator; +class KAction; +class KRadioAction; +class KActionMenu; +class KToggleAction; +class KFileItem; +class QLabel; +class QSplitter; +class QDropEvent; +class KFileItem; + +namespace KFI +{ + +class CKCmFontInst : public KCModule +{ + Q_OBJECT + + public: + + CKCmFontInst(QWidget *parent=NULL, const char *name=NULL, const QStringList &list=QStringList()); + virtual ~CKCmFontInst(); + + void setMimeTypes(bool showBitmap); + + public slots: + + void filterFonts(); + QString quickHelp() const; + void listView(); + void iconView(); + void setupMenu(); + void setupViewMenu(); + void fileHighlighted(const KFileItem *item); + void loadingFinished(); + void addFonts(); + void removeFonts(); + void configure(); + void print(); + void dropped(const KFileItem *i, QDropEvent *e, const KURL::List &urls); + void infoMessage(const QString &msg); + void updateInformation(int dirs, int fonts); + void delResult(KIO::Job *job); + void jobResult(KIO::Job *job); + + private: + + void addFonts(const KURL::List &src, const KURL &dest); + + private: + + KDirOperator *itsDirOp; + KURL itsTop; + KToggleAction *itsShowBitmapAct; + KAction *itsSepDirsAct, + *itsShowHiddenAct, + *itsDeleteAct; + KRadioAction *itsListAct, + *itsIconAct; + KActionMenu *itsViewMenuAct; +#ifdef HAVE_XFT + KParts::ReadOnlyPart *itsPreview; +#endif + QSplitter *itsSplitter; + KConfig itsConfig; + bool itsEmbeddedAdmin; + QLabel *itsStatusLabel; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kcmfontinst/KFileFontIconView.cpp b/kcontrol/kfontinst/kcmfontinst/KFileFontIconView.cpp new file mode 100644 index 000000000..d814d0c6b --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/KFileFontIconView.cpp @@ -0,0 +1,88 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CKFileFontIconView +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 31/05/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include "KFileFontIconView.h" + +namespace KFI +{ + +// CPD: KDE4 should make acceptDrag() virtual there fore can get rid of all these ::contentsX functions... +void CKFileFontIconView::contentsDragEnterEvent(QDragEnterEvent *e) +{ + if(acceptDrag(e)) + KFileIconView::contentsDragEnterEvent(e); + else + e->ignore(); +} + +void CKFileFontIconView::contentsDragMoveEvent(QDragMoveEvent *e) +{ + if(acceptDrag(e)) + KFileIconView::contentsDragMoveEvent(e); + else + e->ignore(); +} + +void CKFileFontIconView::contentsDropEvent(QDropEvent *e) +{ + contentsDragLeaveEvent(NULL); + + if(acceptDrag(e)) + KFileIconView::contentsDropEvent(e); + else + e->ignore(); +} + +bool CKFileFontIconView::acceptDrag(QDropEvent *e) const +{ +#if 0 // Crashes - seems to be called to quick??? + bool ok=false; + KURL::List urls; + + if(KURLDrag::canDecode(e) && (e->source()!=const_cast(this)) && + (QDropEvent::Copy==e->action() || QDropEvent::Move==e->action()) && + KURLDrag::decode(e, urls) && !urls.isEmpty()) + { + KURL::List::Iterator it; + + ok=true; + for(it=urls.begin(); ok && it!=urls.end(); ++it) + if(!CFontEngine::isAFontOrAfm(QFile::encodeName((*it).path()))) + ok=false; + } + + return ok; +#endif + return KURLDrag::canDecode(e) && (e->source()!= const_cast(this)) && + (QDropEvent::Copy==e->action() || QDropEvent::Move==e->action()); +} + +} diff --git a/kcontrol/kfontinst/kcmfontinst/KFileFontIconView.h b/kcontrol/kfontinst/kcmfontinst/KFileFontIconView.h new file mode 100644 index 000000000..936bb5bca --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/KFileFontIconView.h @@ -0,0 +1,55 @@ +#ifndef __KFILE_FONT_ICON_VIEW_H__ +#define __KFILE_FONT_ICON_VIEW_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CKFileFontIconView +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 01/08/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include + +namespace KFI +{ + +class CKFileFontIconView : public KFileIconView +{ + public: + + CKFileFontIconView(QWidget *parent, const char *name) : KFileIconView(parent, name) {} + virtual ~CKFileFontIconView() {} + + protected: + + // DND support + void contentsDragEnterEvent(QDragEnterEvent *e); + void contentsDragMoveEvent(QDragMoveEvent *e); + void contentsDropEvent(QDropEvent *e); + bool acceptDrag(QDropEvent *e) const; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp b/kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp new file mode 100644 index 000000000..7346ca6c8 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp @@ -0,0 +1,645 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : CKFileFontView +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 31/05/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003 +//////////////////////////////////////////////////////////////////////////////// + +// +// NOTE: HEAVILY copied from kfiledetailview.cpp... +// +// Copyright (C) 1997 Stephan Kulow +// 2000, 2001 Carsten Pfeiffer +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "KFileFontView.h" + +#define COL_NAME 0 +#define COL_SIZE 1 +#define COL_TYPE 2 + +class CKFileFontView::CKFileFontViewPrivate +{ + public: + + CKFileFontViewPrivate() : itsDropItem(0) {} + + CFontListViewItem *itsDropItem; + QTimer itsAutoOpenTimer; +}; + +CKFileFontView::CKFileFontView(QWidget *parent, const char *name) + : KListView(parent, name), + KFileView(), + d(new CKFileFontViewPrivate()) +{ + itsSortingCol = COL_NAME; + itsBlockSortingSignal = false; + setViewName(i18n("Detailed View")); + + addColumn(i18n("Name")); + addColumn(i18n("Size")); + addColumn(i18n("Type")); + setShowSortIndicator(true); + setAllColumnsShowFocus(true); + setDragEnabled(false); + + connect(header(), SIGNAL(sectionClicked(int)), SLOT(slotSortingChanged(int))); + connect(this, SIGNAL(returnPressed(QListViewItem *)), SLOT(slotActivate(QListViewItem *))); + connect(this, SIGNAL(clicked(QListViewItem *, const QPoint&, int)), SLOT(selected( QListViewItem *))); + connect(this, SIGNAL(doubleClicked(QListViewItem *, const QPoint &, int)), SLOT(slotActivate(QListViewItem *))); + connect(this, SIGNAL(contextMenuRequested(QListViewItem *, const QPoint &, int)), + this, SLOT(slotActivateMenu(QListViewItem *, const QPoint &))); + + // DND + connect(&(d->itsAutoOpenTimer), SIGNAL(timeout()), this, SLOT(slotAutoOpen())); + setSelectionMode(KFileView::selectionMode()); + itsResolver = new KMimeTypeResolver(this); +} + +CKFileFontView::~CKFileFontView() +{ + delete itsResolver; + delete d; +} + +void CKFileFontView::setSelected(const KFileItem *info, bool enable) +{ + if (info) + { + // we can only hope that this casts works + CFontListViewItem *item = (CFontListViewItem*)info->extraData(this); + + if (item) + KListView::setSelected(item, enable); + } +} + +void CKFileFontView::setCurrentItem(const KFileItem *item) +{ + if (item) + { + CFontListViewItem *it = (CFontListViewItem*) item->extraData(this); + + if (it) + KListView::setCurrentItem(it); + } +} + +KFileItem * CKFileFontView::currentFileItem() const +{ + CFontListViewItem *current = static_cast(currentItem()); + + return current ? current->fileInfo() : NULL; +} + +void CKFileFontView::clearSelection() +{ + KListView::clearSelection(); +} + +void CKFileFontView::selectAll() +{ + if (KFile::NoSelection!=KFileView::selectionMode() && KFile::Single!=KFileView::selectionMode()) + KListView::selectAll(true); +} + +void CKFileFontView::invertSelection() +{ + KListView::invertSelection(); +} + +void CKFileFontView::slotActivateMenu(QListViewItem *item,const QPoint& pos) +{ + if (!item) + sig->activateMenu(0, pos); + else + { + CFontListViewItem *i = (CFontListViewItem*) item; + sig->activateMenu(i->fileInfo(), pos); + } +} + +void CKFileFontView::clearView() +{ + itsResolver->m_lstPendingMimeIconItems.clear(); + KListView::clear(); +} + +void CKFileFontView::insertItem(KFileItem *i) +{ + KFileView::insertItem(i); + + CFontListViewItem *item = new CFontListViewItem((QListView*) this, i); + + setSortingKey(item, i); + + i->setExtraData(this, item); + + if (!i->isMimeTypeKnown()) + itsResolver->m_lstPendingMimeIconItems.append(item); +} + +void CKFileFontView::slotActivate(QListViewItem *item) +{ + if (item) + { + const KFileItem *fi = ((CFontListViewItem*)item)->fileInfo(); + + if (fi) + sig->activate(fi); + } +} + +void CKFileFontView::selected(QListViewItem *item) +{ + if (item && !(KApplication::keyboardMouseState() & (ShiftButton|ControlButton)) && + KGlobalSettings::singleClick()) + { + const KFileItem *fi = ((CFontListViewItem*)item)->fileInfo(); + + if (fi && (fi->isDir() || !onlyDoubleClickSelectsFiles())) + sig->activate(fi); + } +} + +void CKFileFontView::highlighted( QListViewItem *item ) +{ + if (item) + { + const KFileItem *fi = ((CFontListViewItem*)item)->fileInfo(); + + if (fi) + sig->highlightFile(fi); + } +} + +void CKFileFontView::setSelectionMode(KFile::SelectionMode sm) +{ + disconnect(SIGNAL(selectionChanged()), this); + disconnect(SIGNAL(selectionChanged(QListViewItem *)), this); + + switch (sm) + { + case KFile::Multi: + QListView::setSelectionMode(QListView::Multi); + break; + case KFile::Extended: + QListView::setSelectionMode(QListView::Extended); + break; + case KFile::NoSelection: + QListView::setSelectionMode(QListView::NoSelection); + break; + default: // fall through + case KFile::Single: + QListView::setSelectionMode(QListView::Single); + break; + } + + // for highlighting + if (KFile::Multi==sm || KFile::Extended==sm) + connect(this, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged())); + else + connect(this, SIGNAL(selectionChanged(QListViewItem *)), SLOT(highlighted(QListViewItem * ))); +} + +bool CKFileFontView::isSelected(const KFileItem *i) const +{ + if (!i) + return false; + else + { + CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); + + return (item && item->isSelected()); + } +} + +void CKFileFontView::updateView(bool b) +{ + if (b) + { + QListViewItemIterator it((QListView*)this); + + for (; it.current(); ++it) + { + CFontListViewItem *item=static_cast(it.current()); + + item->setPixmap(0, item->fileInfo()->pixmap(KIcon::SizeSmall)); + } + } +} + +void CKFileFontView::updateView(const KFileItem *i) +{ + if (i) + { + CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); + + if (item) + { + item->init(); + setSortingKey(item, i); + } + } +} + +void CKFileFontView::setSortingKey(CFontListViewItem *item, const KFileItem *i) +{ + QDir::SortSpec spec = KFileView::sorting(); + + if (spec&QDir::Size) + item->setKey(sortingKey(i->size(), i->isDir(), spec)); + else + item->setKey(sortingKey(i->text(), i->isDir(), spec)); +} + +void CKFileFontView::removeItem(const KFileItem *i) +{ + if (i) + { + CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); + + itsResolver->m_lstPendingMimeIconItems.remove(item); + delete item; + + KFileView::removeItem(i); + } +} + +void CKFileFontView::slotSortingChanged(int col) +{ + QDir::SortSpec sort = sorting(); + int sortSpec = -1; + bool reversed = col == itsSortingCol && (sort & QDir::Reversed) == 0; + itsSortingCol = col; + + switch(col) + { + case COL_NAME: + sortSpec = (sort & ~QDir::SortByMask | QDir::Name); + break; + case COL_SIZE: + sortSpec = (sort & ~QDir::SortByMask | QDir::Size); + break; + // the following columns have no equivalent in QDir, so we set it + // to QDir::Unsorted and remember the column (itsSortingCol) + case COL_TYPE: + sortSpec = (sort & ~QDir::SortByMask | QDir::Time); + break; + default: + break; + } + + if (reversed) + sortSpec|=QDir::Reversed; + else + sortSpec&=~QDir::Reversed; + + if (sort & QDir::IgnoreCase) + sortSpec|=QDir::IgnoreCase; + else + sortSpec&=~QDir::IgnoreCase; + + KFileView::setSorting(static_cast(sortSpec)); + + KFileItem *item; + KFileItemListIterator it(*items()); + + if ( sortSpec & QDir::Size ) + { + for (; (item = it.current()); ++it ) + { + CFontListViewItem *i = viewItem(item); + i->setKey(sortingKey(item->size(), item->isDir(), sortSpec)); + } + } + else + for (; (item = it.current()); ++it ) + { + CFontListViewItem *i = viewItem(item); + + i->setKey(sortingKey(i->text(itsSortingCol), item->isDir(), sortSpec)); + } + + KListView::setSorting(itsSortingCol, !reversed); + KListView::sort(); + + if (!itsBlockSortingSignal) + sig->changeSorting( static_cast( sortSpec ) ); +} + +void CKFileFontView::setSorting(QDir::SortSpec spec) +{ + if (spec & QDir::Size) + itsSortingCol=COL_SIZE; + else + itsSortingCol=COL_NAME; + + // inversed, because slotSortingChanged will reverse it + if (spec & QDir::Reversed) + spec = (QDir::SortSpec) (spec & ~QDir::Reversed); + else + spec = (QDir::SortSpec) (spec | QDir::Reversed); + + KFileView::setSorting((QDir::SortSpec) spec); + + // don't emit sortingChanged() when called via setSorting() + itsBlockSortingSignal = true; // can't use blockSignals() + slotSortingChanged(itsSortingCol); + itsBlockSortingSignal = false; +} + +void CKFileFontView::ensureItemVisible(const KFileItem *i) +{ + if (i) + { + CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); + + if ( item ) + KListView::ensureItemVisible(item); + } +} + +// we're in multiselection mode +void CKFileFontView::slotSelectionChanged() +{ + sig->highlightFile(NULL); +} + +KFileItem * CKFileFontView::firstFileItem() const +{ + CFontListViewItem *item = static_cast(firstChild()); + + return item ? item->fileInfo() : NULL; +} + +KFileItem * CKFileFontView::nextItem(const KFileItem *fileItem) const +{ + if (fileItem) + { + CFontListViewItem *item = viewItem(fileItem); + + return item && item->itemBelow() ? ((CFontListViewItem*) item->itemBelow())->fileInfo() : NULL; + } + + return firstFileItem(); +} + +KFileItem * CKFileFontView::prevItem(const KFileItem *fileItem) const +{ + if (fileItem) + { + CFontListViewItem *item = viewItem(fileItem); + + return item && item->itemAbove() ? ((CFontListViewItem*) item->itemAbove())->fileInfo() : NULL; + } + + return firstFileItem(); +} + +void CKFileFontView::keyPressEvent(QKeyEvent *e) +{ + KListView::keyPressEvent(e); + + if (Key_Return==e->key() || Key_Enter==e->key()) + if (e->state() & ControlButton) + e->ignore(); + else + e->accept(); +} + +// +// mimetype determination on demand +// +void CKFileFontView::mimeTypeDeterminationFinished() +{ + // anything to do? +} + +void CKFileFontView::determineIcon(CFontListViewItem *item) +{ + item->fileInfo()->determineMimeType(); + updateView(item->fileInfo()); +} + +void CKFileFontView::listingCompleted() +{ + itsResolver->start(); +} + +QDragObject *CKFileFontView::dragObject() +{ + // create a list of the URL:s that we want to drag + KURL::List urls; + KFileItemListIterator it(* KFileView::selectedItems()); + QPixmap pixmap; + QPoint hotspot; + + for ( ; it.current(); ++it ) + urls.append( (*it)->url() ); + + if(urls.count()> 1) + pixmap = DesktopIcon("kmultiple", KIcon::SizeSmall); + if(pixmap.isNull()) + pixmap = currentFileItem()->pixmap(KIcon::SizeSmall); + + hotspot.setX(pixmap.width() / 2); + hotspot.setY(pixmap.height() / 2); + + QDragObject *dragObject=new KURLDrag(urls, widget()); + + if(dragObject) + dragObject->setPixmap(pixmap, hotspot); + + return dragObject; +} + +void CKFileFontView::slotAutoOpen() +{ + d->itsAutoOpenTimer.stop(); + + if(d->itsDropItem) + { + KFileItem *fileItem = d->itsDropItem->fileInfo(); + + if (fileItem && !fileItem->isFile() && (fileItem->isDir() || fileItem->isLink())) + sig->activate(fileItem); + } +} + +bool CKFileFontView::acceptDrag(QDropEvent *e) const +{ +#if 0 // Following doesn't seem to work, why??? + bool ok=false; + KURL::List urls; + + + if((e->source()!=const_cast(this)) && + (QDropEvent::Copy==e->action() || QDropEvent::Move==e->action()) && + KURLDrag::decode(e, urls) && !urls.isEmpty()) + { + KURL::List::Iterator it; + + ok=true; + for(it=urls.begin(); ok && it!=urls.end(); ++it) + if(!CFontEngine::isAFontOrAfm(QFile::encodeName((*it).path()))) + ok=false; + } + + return ok; +#endif + + return KURLDrag::canDecode(e) && (e->source()!= const_cast(this)) && + (QDropEvent::Copy==e->action() || QDropEvent::Move==e->action()); +} + +void CKFileFontView::contentsDragEnterEvent(QDragEnterEvent *e) +{ + if (!acceptDrag(e)) // can we decode this ? + e->ignore(); // No + else + { + e->acceptAction(); // Yes + + if((dropOptions() & AutoOpenDirs)) + { + CFontListViewItem *item = dynamic_cast(itemAt(contentsToViewport(e->pos()))); + if (item) // are we over an item ? + { + d->itsDropItem = item; + d->itsAutoOpenTimer.start(autoOpenDelay()); // restart timer + } + else + { + d->itsDropItem = 0; + d->itsAutoOpenTimer.stop(); + } + } + } +} + +void CKFileFontView::contentsDragMoveEvent(QDragMoveEvent *e) +{ + if (!acceptDrag(e)) // can we decode this ? + e->ignore(); // No + else + { + e->acceptAction(); // Yes + + if ((dropOptions() & AutoOpenDirs)) + { + CFontListViewItem *item = dynamic_cast(itemAt(contentsToViewport(e->pos()))); + + if (item) // are we over an item ? + { + if (d->itsDropItem != item) + { + d->itsDropItem = item; + d->itsAutoOpenTimer.start(autoOpenDelay()); // restart timer + } + } + else + { + d->itsDropItem = 0; + d->itsAutoOpenTimer.stop(); + } + } + } +} + +void CKFileFontView::contentsDragLeaveEvent(QDragLeaveEvent *) +{ + d->itsDropItem = 0; + d->itsAutoOpenTimer.stop(); +} + +void CKFileFontView::contentsDropEvent(QDropEvent *e) +{ + d->itsDropItem = 0; + d->itsAutoOpenTimer.stop(); + + if (!acceptDrag(e)) // can we decode this ? + e->ignore(); // No + else + { + e->acceptAction(); // Yes + + CFontListViewItem *item = dynamic_cast(itemAt(contentsToViewport(e->pos()))); + KFileItem *fileItem = item ? item->fileInfo() : 0; + KURL::List urls; + + emit dropped(e, fileItem); + + if(KURLDrag::decode(e, urls) && !urls.isEmpty()) + { + emit dropped(e, urls, fileItem ? fileItem->url() : KURL()); + sig->dropURLs(fileItem, e, urls); + } + } +} + +void CKFileFontView::readConfig(KConfig *kc, const QString &group) +{ + restoreLayout(kc, group.isEmpty() ? QString("CFileFontView") : group); + slotSortingChanged(sortColumn()); +} + +void CKFileFontView::writeConfig(KConfig *kc, const QString &group) +{ + saveLayout(kc, group.isEmpty() ? QString("CFileFontView") : group); +} + +///////////////////////////////////////////////////////////////// + +void CFontListViewItem::init() +{ + CFontListViewItem::setPixmap(COL_NAME, itsInf->pixmap(KIcon::SizeSmall)); + + setText(COL_NAME, itsInf->text()); + setText(COL_SIZE, itsInf->isDir() ? "" : KGlobal::locale()->formatNumber(itsInf->size(), 0)); + setText(COL_TYPE, itsInf->mimeComment()); +} + +void CKFileFontView::virtual_hook(int id, void *data) +{ + KListView::virtual_hook(id, data); + KFileView::virtual_hook(id, data); +} + +#include "KFileFontView.moc" diff --git a/kcontrol/kfontinst/kcmfontinst/KFileFontView.h b/kcontrol/kfontinst/kcmfontinst/KFileFontView.h new file mode 100644 index 000000000..a58f9d908 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/KFileFontView.h @@ -0,0 +1,219 @@ +#ifndef __KFILE_FONT_VIEW_H__ +#define __KFILE_FONT_VIEW_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : CKFileFontView +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 31/05/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003 +//////////////////////////////////////////////////////////////////////////////// + +// +// NOTE: HEAVILY copied from kfiledetailview.cpp... +// +// Copyright (C) 1997 Stephan Kulow +// 2000, 2001 Carste + +class KFileItem; +class QWidget; +class QKeyEvent; + +#include +#include + +#include "kfileview.h" + +/** + * An item for the listiew, that has a reference to its corresponding + * @ref KFileItem. + */ +class CFontListViewItem : public KListViewItem +{ + public: + + CFontListViewItem(QListView *parent, const QString &text, const QPixmap &icon, KFileItem *fi) + : KListViewItem(parent, text), + itsInf(fi) + { + setPixmap(0, icon); + setText(0, text); + } + + CFontListViewItem(QListView *parent, KFileItem *fi) + : KListViewItem(parent), + itsInf(fi) + { + init(); + } + + CFontListViewItem(QListView *parent, const QString &text, const QPixmap &icon, KFileItem *fi, QListViewItem *after) + : KListViewItem(parent, after), + itsInf(fi) + { + setPixmap(0, icon); + setText(0, text); + } + + ~CFontListViewItem() { itsInf->removeExtraData(listView()); } + + /** + * @returns the corresponding KFileItem + */ + KFileItem *fileInfo() const { return itsInf; } + + virtual QString key( int /*column*/, bool /*ascending*/ ) const { return itsKey; } + + void setKey( const QString& key ) { itsKey = key; } + + QRect rect() const + { + QRect r = listView()->itemRect(this); + + return QRect(listView()->viewportToContents(r.topLeft()), QSize(r.width(), r.height())); + } + + void init(); + + private: + + KFileItem *itsInf; + QString itsKey; + + class CFontListViewItemPrivate; + + CFontListViewItemPrivate *d; +}; + +/** + * A list-view capable of showing @ref KFileItem'. Used in the filedialog + * for example. Most of the documentation is in @ref KFileView class. + * + * @see KDirOperator + * @see KCombiView + * @see KFileIconView + */ +class CKFileFontView : public KListView, public KFileView +{ + Q_OBJECT + + public: + + CKFileFontView(QWidget *parent, const char *name); + virtual ~CKFileFontView(); + + virtual QWidget * widget() { return this; } + virtual void clearView(); + virtual void setAutoUpdate(bool) {} // ### unused. remove in KDE4 + virtual void setSelectionMode( KFile::SelectionMode sm ); + virtual void updateView(bool b); + virtual void updateView(const KFileItem *i); + virtual void removeItem(const KFileItem *i); + virtual void listingCompleted(); + virtual void setSelected(const KFileItem *i, bool b); + virtual bool isSelected(const KFileItem *i) const; + virtual void clearSelection(); + virtual void selectAll(); + virtual void invertSelection(); + virtual void setCurrentItem( const KFileItem *i); + virtual KFileItem * currentFileItem() const; + virtual KFileItem * firstFileItem() const; + virtual KFileItem * nextItem(const KFileItem *i) const; + virtual KFileItem * prevItem(const KFileItem *i) const; + virtual void insertItem( KFileItem *i); + + void readConfig(KConfig *kc, const QString &group); + void writeConfig(KConfig *kc, const QString &group); + + // implemented to get noticed about sorting changes (for sortingIndicator) + virtual void setSorting(QDir::SortSpec s); + void ensureItemVisible(const KFileItem *i); + + // for KMimeTypeResolver + void mimeTypeDeterminationFinished(); + void determineIcon(CFontListViewItem *item); + QScrollView * scrollWidget() const { return (QScrollView*) this; } + + signals: + // The user dropped something. + // fileItem points to the item dropped on or can be 0 if the + // user dropped on empty space. + void dropped(QDropEvent *event, KFileItem *fileItem); + // The user dropped the URLs urls. + // url points to the item dropped on or can be empty if the + // user dropped on empty space. + void dropped(QDropEvent *event, const KURL::List &urls, const KURL &url); + + protected: + + virtual void keyPressEvent(QKeyEvent *e); + // DND support + QDragObject * dragObject(); + void contentsDragEnterEvent(QDragEnterEvent *e); + void contentsDragMoveEvent(QDragMoveEvent *e); + void contentsDragLeaveEvent(QDragLeaveEvent *e); + void contentsDropEvent(QDropEvent *e); + bool acceptDrag(QDropEvent *e) const; + + int itsSortingCol; + + protected slots: + + void slotSelectionChanged(); + + private slots: + + void slotSortingChanged(int c); + void selected(QListViewItem *item); + void slotActivate(QListViewItem *item); + void highlighted(QListViewItem *item); + void slotActivateMenu(QListViewItem *item, const QPoint& pos); + void slotAutoOpen(); + + private: + + virtual void insertItem(QListViewItem *i) { KListView::insertItem(i); } + virtual void setSorting(int i, bool b) { KListView::setSorting(i, b); } + virtual void setSelected(QListViewItem *i, bool b) { KListView::setSelected(i, b); } + + inline CFontListViewItem * viewItem( const KFileItem *item ) const + { + return item ? (CFontListViewItem *) item->extraData(this) : NULL; + } + + void setSortingKey( CFontListViewItem *item, const KFileItem *i); + + bool itsBlockSortingSignal; + KMimeTypeResolver *itsResolver; + + protected: + + virtual void virtual_hook(int id, void *data); + + private: + + class CKFileFontViewPrivate; + CKFileFontViewPrivate *d; +}; + +#endif diff --git a/kcontrol/kfontinst/kcmfontinst/Makefile.am b/kcontrol/kfontinst/kcmfontinst/Makefile.am new file mode 100644 index 000000000..7a4c78920 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/Makefile.am @@ -0,0 +1,31 @@ +if include_fontinst_tn +FONTINST_PRINT_INC=-I$(srcdir)/../viewpart +FONTINST_PRINT_LIB=../viewpart/libkfontinstprint.la +endif + +kde_module_LTLIBRARIES = kcm_fontinst.la +kcm_fontinst_la_LIBADD = $(LIB_KIO) $(FONTINST_PRINT_LIB) $(LIBFREETYPE_LIBS) $(LIBFONTCONFIG_LIBS) ../lib/libkfontinst.la +METASOURCES = AUTO +kcm_fontinst_la_LDFLAGS = $(KDE_PLUGIN) $(all_libraries) $(KDE_RPATH) -module -avoid-version -no-undefined +AM_CPPFLAGS = -I$(srcdir)/../lib $(FONTINST_PRINT_INC) -I$(srcdir)/../../fonts $(all_includes) $(LIBFREETYPE_CFLAGS) $(LIBFONTCONFIG_CFLAGS) + +xdg_apps_DATA = kcmfontinst.desktop + +kcm_fontinst_la_SOURCES = \ + KCmFontInst.cpp \ + KFileFontIconView.cpp \ + KFileFontView.cpp \ + PrintDialog.cpp \ + SettingsDialog.cpp + +EXTRA_DIST = \ + $(xdg_apps_DATA) \ + KCmFontInst.h \ + KFileFontIconView.h \ + KFileFontView.h \ + PrintDialog.h \ + SettingsDialog.h + +noinst_HEADERS = $(EXTRA_DIST) + +KDE_ICON = AUTO diff --git a/kcontrol/kfontinst/kcmfontinst/PrintDialog.cpp b/kcontrol/kfontinst/kcmfontinst/PrintDialog.cpp new file mode 100644 index 000000000..e902fa1e1 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/PrintDialog.cpp @@ -0,0 +1,74 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CPrintDialog +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 12/05/2005 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2005 +//////////////////////////////////////////////////////////////////////////////// + +#include "PrintDialog.h" +#include +#include +#include +#include + +namespace KFI +{ + +CPrintDialog::CPrintDialog(QWidget *parent) + : KDialogBase(Plain, i18n("Print Font Samples"), Ok|Cancel, Ok, parent, NULL, true, false) +{ + QFrame *page=plainPage(); + QGridLayout *layout=new QGridLayout(page, 1, 1, 0, spacingHint()); + + layout->addWidget(new QLabel(i18n("Output:"), page), 0, 0); + itsOutput=new QComboBox(page); + itsOutput->insertItem(i18n("All Fonts"), 0); + itsOutput->insertItem(i18n("Selected Fonts"), 1); + layout->addWidget(itsOutput, 0, 1); + layout->addWidget(new QLabel(i18n("Font size:"), page), 1, 0); + itsSize=new QComboBox(page); + itsSize->insertItem(i18n("Waterfall"), 0); + itsSize->insertItem(i18n("12pt"), 1); + itsSize->insertItem(i18n("18pt"), 2); + itsSize->insertItem(i18n("24pt"), 3); + itsSize->insertItem(i18n("36pt"), 4); + itsSize->insertItem(i18n("48pt"), 5); + layout->addWidget(itsSize, 1, 1); + layout->addItem(new QSpacerItem(2, 2), 2, 1); +} + +bool CPrintDialog::exec(bool select, int size) +{ + if(!select) + { + itsOutput->setCurrentItem(0); + itsOutput->setEnabled(false); + } + else + itsOutput->setCurrentItem(1); + itsSize->setCurrentItem(size); + return QDialog::Accepted==QDialog::exec(); +} + +} diff --git a/kcontrol/kfontinst/kcmfontinst/PrintDialog.h b/kcontrol/kfontinst/kcmfontinst/PrintDialog.h new file mode 100644 index 000000000..9be67f6d4 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/PrintDialog.h @@ -0,0 +1,56 @@ +#ifndef __PRINT_DIALOG_H__ +#define __PRINT_DIALOG_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CPrintDialog +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 12/05/2005 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2005 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include + +namespace KFI +{ + +class CPrintDialog : public KDialogBase +{ + public: + + CPrintDialog(QWidget *parent); + + bool exec(bool select, int size); + int chosenSize() { return itsSize->currentItem(); } + bool outputAll() { return 0==itsOutput->currentItem(); } + + private: + + QComboBox *itsOutput, + *itsSize; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kcmfontinst/SettingsDialog.cpp b/kcontrol/kfontinst/kcmfontinst/SettingsDialog.cpp new file mode 100644 index 000000000..255fca709 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/SettingsDialog.cpp @@ -0,0 +1,99 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CSettingsDialog +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 10/05/2005 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2005 +//////////////////////////////////////////////////////////////////////////////// + +#include "SettingsDialog.h" +#include "KfiConstants.h" +#include "Misc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace KFI +{ + +CSettingsDialog::CSettingsDialog(QWidget *parent) + : KDialogBase(parent, "settingsdialog", true, i18n("Settings"), + KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true) +{ + QVBox *page = makeVBoxMainWidget(); + + itsDoX=new QCheckBox(i18n("Configure fonts for legacy X applications"), page); + QWhatsThis::add(itsDoX, i18n("

Modern applications use a system called \"FontConfig\" to obtain the list of fonts. " + "Older applications, such as OpenOffice 1.x, GIMP 1.x, etc. use the previous \"core X fonts\" mechanism for " + "this.

Selecting this option will inform the installer to create the necessary files so that these " + "older applications can use the fonts you install.

Please note, however, that this will slow down " + "the installation process.

")); + itsDoGs=new QCheckBox(i18n("Configure fonts for Ghostscript"), page); + QWhatsThis::add(itsDoGs, i18n("

When printing, most applications create what is know as PostScript. This is then sent to a special " + "application, named Ghostscript, which can interpret the PostScript and send the appropriate instructions " + "to your printer. If your application does not embed whatever fonts it uses into the PostScript, then " + "Ghostscript needs to be informed as to which fonts you have installed, and where they are located.

" + "

Selecting this option will create the necessary Ghostscript config files.

Please note, however, " + "that this will also slow down the installation process.

As most applications can, and do, embed " + "the fonts into the PostScript before sending this to Ghostscript, this option can safely be disabled.")); + + KConfig cfg(Misc::root() ? KFI_ROOT_CFG_FILE : KFI_CFG_FILE); + + itsDoX->setChecked(cfg.readBoolEntry(KFI_CFG_X_KEY, KFI_DEFAULT_CFG_X)); + itsDoGs->setChecked(cfg.readBoolEntry(KFI_CFG_GS_KEY, KFI_DEFAULT_CFG_GS)); +} + +void CSettingsDialog::slotOk() +{ + KConfig cfg(Misc::root() ? KFI_ROOT_CFG_FILE : KFI_CFG_FILE); + + bool oldDoX=cfg.readBoolEntry(KFI_CFG_X_KEY, KFI_DEFAULT_CFG_X), + oldDoGs=cfg.readBoolEntry(KFI_CFG_GS_KEY, KFI_DEFAULT_CFG_GS); + + cfg.writeEntry(KFI_CFG_X_KEY, itsDoX->isChecked()); + cfg.writeEntry(KFI_CFG_GS_KEY, itsDoGs->isChecked()); + cfg.sync(); + + if( ((!oldDoX && itsDoX->isChecked()) || (!oldDoGs && itsDoGs->isChecked())) && + KMessageBox::Yes==KMessageBox::questionYesNo(this, i18n("You have enabled a previously disabled option. Would you like the config " + "files updated now? (Normally they are only updated upon installing, or " + "removing, a font.)"), QString::null, i18n("Update"),i18n("Do Not Update"))) + { + QByteArray packedArgs; + QDataStream stream(packedArgs, IO_WriteOnly); + + stream << KFI::SPECIAL_RECONFIG; + + KIO::NetAccess::synchronousRun(KIO::special(KFI_KIO_FONTS_PROTOCOL ":/", packedArgs), this); + } + + hide(); +} + +} diff --git a/kcontrol/kfontinst/kcmfontinst/SettingsDialog.h b/kcontrol/kfontinst/kcmfontinst/SettingsDialog.h new file mode 100644 index 000000000..b41820e38 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/SettingsDialog.h @@ -0,0 +1,57 @@ +#ifndef __SETTINGS_DIALOG_H__ +#define __SETTINGS_DIALOG_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CSettingsDialog +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 10/05/2005 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2005 +//////////////////////////////////////////////////////////////////////////////// + +#include + +class QCheckBox; + +namespace KFI +{ + +class CSettingsDialog : public KDialogBase +{ + public: + + CSettingsDialog(QWidget *parent); + + private slots: + + void slotOk(); + + private: + + QCheckBox *itsDoX, + *itsDoGs; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kcmfontinst/cr16-action-newfont.png b/kcontrol/kfontinst/kcmfontinst/cr16-action-newfont.png new file mode 100644 index 000000000..61eef357e Binary files /dev/null and b/kcontrol/kfontinst/kcmfontinst/cr16-action-newfont.png differ diff --git a/kcontrol/kfontinst/kcmfontinst/cr22-action-newfont.png b/kcontrol/kfontinst/kcmfontinst/cr22-action-newfont.png new file mode 100644 index 000000000..049197a35 Binary files /dev/null and b/kcontrol/kfontinst/kcmfontinst/cr22-action-newfont.png differ diff --git a/kcontrol/kfontinst/kcmfontinst/cr32-action-newfont.png b/kcontrol/kfontinst/kcmfontinst/cr32-action-newfont.png new file mode 100644 index 000000000..9cd3d57bc Binary files /dev/null and b/kcontrol/kfontinst/kcmfontinst/cr32-action-newfont.png differ diff --git a/kcontrol/kfontinst/kcmfontinst/kcmfontinst.desktop b/kcontrol/kfontinst/kcmfontinst/kcmfontinst.desktop new file mode 100644 index 000000000..e8460ab49 --- /dev/null +++ b/kcontrol/kfontinst/kcmfontinst/kcmfontinst.desktop @@ -0,0 +1,235 @@ +[Desktop Entry] +Exec=kcmshell kcmfontinst +Icon=fonts +Type=Application +DocPath=kcontrol/kcmfontinst/index.html + + +X-KDE-Library=fontinst +X-KDE-FactoryName=fontinst +X-KDE-RootOnly=true + +X-KDE-ParentApp=kcontrol + +Name=Font Installer +Name[af]=Skrif tipe Installeerder +Name[ar]=مثبت المحارف +Name[az]=Yazı Növü Qurucusu +Name[be]=Устаноўка шрыфтоў +Name[bg]=Шрифтове +Name[bn]=ফন্ট ইনস্টলার +Name[br]=Stalianer an nodrezhoù +Name[bs]=Dodavanje fontova +Name[ca]=Instal·lador de lletres +Name[cs]=Instalátor písem +Name[csb]=Instalownik fòntów +Name[cy]=Gosodydd Ffontiau +Name[da]=Skrifttype-installering +Name[de]=Schriftarteninstallation +Name[el]=Εγκαταστάτης γραμματοσειρών +Name[eo]=Tiparinstalilo +Name[es]=Instalador de tipos de letra +Name[et]=Fontide paigaldaja +Name[eu]=Letra tipoak instalatzeko tresna +Name[fa]=نصب‌کنندۀ قلم +Name[fi]=Kirjasinasentaja +Name[fr]=Installateur de polices +Name[fy]=Lettertype-Ynstalaasje +Name[ga]=Suiteálaí Clófhoirne +Name[gl]=Instalador de Fontes +Name[he]=מתקין הגופנים +Name[hi]=फ़ॉन्ट संस्थापक +Name[hr]=Instaliranje fontova +Name[hu]=Betűtípus-telepítő +Name[is]=KDE letursækir +Name[it]=Installatore dei tipi di carattere +Name[ja]=フォントインストーラ +Name[ka]=ფონტების დაყენება +Name[kk]=Қаріптерді орнату +Name[km]=កម្មវិធី​ដំឡើង​ពុម្ពអក្សរ +Name[ko]=글꼴 설치기 +Name[lo]=ຕິດຕັ້ງຮູບແບບຕົວອັກສອນ +Name[lt]=Šriftų diegiklis +Name[lv]=Fontu Instalators +Name[mk]=Инсталатор на фонтови +Name[mn]=Бичиг-Суулгалт +Name[ms]=Pemasang Fon +Name[mt]=Installatur ta' fonts +Name[nb]=Skriftinstallering +Name[nds]=Schriftoorden installeren +Name[ne]=फन्ट स्थापक +Name[nl]=Lettertype-installatie +Name[nn]=Skriftinstallering +Name[nso]=Motsenyi wa Fonto +Name[pa]=ਫੋਂਟ ਇੰਸਟਾਲਰ +Name[pl]=Instalator czcionek +Name[pt]=Instalador de Tipos de Letra +Name[pt_BR]=Instalador de Fontes +Name[ro]=Instalare fonturi +Name[ru]=Установка шрифтов +Name[rw]=Mwinjizaporogaramu Imyandikire +Name[se]=Fontasajáiduhttejeaddji +Name[sk]=Inštalátor písiem +Name[sl]=Namestilnik pisav +Name[sr]=Инсталатор фонтова +Name[sr@Latn]=Instalator fontova +Name[sv]=Installation av teckensnitt +Name[ta]=எழுத்துரு நிறுவுதல் +Name[tg]=Барпо кардани ҳарфҳо +Name[th]=ตัวติดตั้งแบบอักษร +Name[tr]=Yazıtipi Kurucusu +Name[tt]=Yazu Quydırğıç +Name[uk]=Встановлення шрифтів +Name[uz]=Shrift oʻrnatgich +Name[uz@cyrillic]=Шрифт ўрнатгич +Name[ven]=Mudzhenisi wa Fontu +Name[vi]=Cài đặt Phông chữ +Name[wa]=Astaleu di fontes +Name[xh]=Umfaki Wohlobo lwegama +Name[zh_CN]=字体安装程序 +Name[zh_TW]=字型安裝程式 +Name[zu]=Umfakeli Wohlobo lwamagama + +Comment=Install & preview fonts +Comment[af]=Installeer & voorskou skriftipes +Comment[ar]=تثبيت و معاينة المحارف +Comment[az]=Yazı növü qur & nümayiş et +Comment[be]=Устаноўка і прагляд шрыфтоў +Comment[bg]=Инсталиране и преглед на шрифтове +Comment[bn]=ফন্ট ইনস্টল এবং প্রাক্‌দর্শন করুন +Comment[br]=Staliañ ha rakgwel an nodrezhoù +Comment[bs]=Dodavanje i pregledanje fontova +Comment[ca]=Instal·la i previsualitza lletres +Comment[cs]=Instalace a náhled písem +Comment[csb]=Instalacëjô ë pòdzérk fòntów +Comment[cy]=Gosod a rhagolygu ffontiau +Comment[da]=Installér og forhåndsvis skrifttyper +Comment[de]=Schriftarten installieren und betrachten +Comment[el]=Εγκατάσταση & προεπισκόπηση γραμματοσειρών +Comment[eo]=Instalas kaj prezentas tiparojn +Comment[es]=Instalar y previsualizar tipos de letra +Comment[et]=Fontide paigaldamine ja eelvaatlus +Comment[eu]=Instalatu eta aurreikusi letra tipoak +Comment[fa]=نصب و پیش‌نمایش قلمها +Comment[fi]=Asenna ja esikatsele kirjasimia +Comment[fr]=Pour installer et afficher des polices de caractères +Comment[fy]=Lettertypen ynstallearje en besjen +Comment[ga]=Suiteáil & Réamhamharc na gClónna +Comment[gl]=Instalar e antever fontes +Comment[he]=התקנה ותצוגה מקדימה של גופנים +Comment[hi]=फ़ॉन्ट्स संस्थापित व पूर्वावलोकन करें +Comment[hr]=Instaliranje i pregled fontova +Comment[hu]=Betűtípusok telepítése, áttekintése +Comment[is]=Setja inn & forskoða letur +Comment[it]=Installa e mostra anteprime dei caratteri +Comment[ja]=フォントのインストールとプレビュー +Comment[ka]=ფონტების დაყენება და დათვალიერება +Comment[kk]=Қаріптерді орнату және қарап-шығу +Comment[km]=ដំឡើង & មើល​ពុម្ពអក្សរ​ជា​មុន +Comment[ko]=글꼴 설치, 미리보기, 관리 +Comment[lo]=ຕິດຕັ້ງແລະສະແດງຕົວຢ່າງຮູບແບບຕົວອັກສອນ +Comment[lt]=Instaliuoja ir peržiūri šriftus +Comment[lv]=Instalē un apskata fontus +Comment[mk]=Инсталирај и прегледај фонтови +Comment[mn]=Бичиг суулгах ба харах +Comment[ms]=Pasang & prapapar fon +Comment[mt]=Installa u ara fonts +Comment[nb]=Installer og forhåndsvis skrifttyper +Comment[nds]=Schriftoorden installeren & ankieken +Comment[ne]=फन्ट स्थापना र पूर्वावलोकन गर्नुहोस् +Comment[nl]=Lettertypen installeren en bekijken +Comment[nn]=Installer og vis skrifter +Comment[nso]=Tsenya & Bonelapele difonto +Comment[pa]=ਫੋਂਟ ਝਲਕ ਤੇ ਇੰਸਟਾਲ +Comment[pl]=Instalacja i podgląd czcionek +Comment[pt]=Instalar e antever tipos de letra +Comment[pt_BR]=Instalar & pré-visualizar fontes +Comment[ro]=Instalează și previzualizează fonturi +Comment[ru]=Установка и просмотр шрифтов +Comment[rw]=Kwinjiza & kugaragazambere imyandikire +Comment[se]=Sajáiduhtte ja čájet fonttaid +Comment[sk]=Inštaluje a zobrazuje písma +Comment[sl]=Namesti in prikaže pisave +Comment[sr]=Инсталација и преглед фонтова +Comment[sr@Latn]=Instalacija i pregled fontova +Comment[sv]=Installera och förhandsgranska teckensnitt +Comment[ta]=எழுத்துருக்களை நிறுவி காட்டு +Comment[tg]=Барпо кардан ва тамошои ҳарфҳо +Comment[th]=ติดตั้งและแสดงตัวอย่างแบบอักษร +Comment[tr]=Yazıtiplerini kur ve önizle +Comment[tt]=Yazu şäkellären quyu/tikşerü urını +Comment[uk]=Встановлення та перегляд шрифтів +Comment[uz]=Shriftlarni oʻrnatish va koʻrib chiqish +Comment[uz@cyrillic]=Шрифтларни ўрнатиш ва кўриб чиқиш +Comment[ven]=Dzhenisani & vhonelani phanda dzifontu +Comment[vi]=Cài đặt & xem trước phông chữ +Comment[wa]=Astalaedje et håynaedje des fontes +Comment[xh]=Faka & yenza imboniso yohlobo lwamagama +Comment[zh_CN]=安装和预览字体 +Comment[zh_TW]=安裝並預覽字型 +Comment[zu]=Fakela & buka ngaphambili izinhlobo zamagama + +Keywords=font,fonts,installer,truetype,type1,speedo,bitmap +Keywords[be]=Шрыфт,Шрыфты,Устаноўка,font,fonts,installer,truetype,type1,speedo,bitmap +Keywords[bg]=шрифт, шрифтове, преглед, печат, font, fonts, installer, truetype, type1, speedo, bitmap +Keywords[br]=nodrezh,nodrezhoù,stalier,truetype,type1,speedo,bitmap +Keywords[bs]=font,fonts,installer,truetype,type1,speedo,bitmap,fontovi,instalacija +Keywords[ca]=lletra,lletres,instal·lador,truetype,type1,speedo,bitmap +Keywords[cs]=písmo,písma,instalátor,truetype,type1,speedo,bitmap +Keywords[csb]=fòntë,font,instalownik,truetype,type1,speedo +Keywords[cy]=ffont,ffontiau,wynebfath, wynebfathau,arsefydlydd,truetype,type1,math 1,speedo,didfap +Keywords[da]=skrifttype,skrifttyper,installatør,truetype,type1,speedo,bitmap +Keywords[de]=Fonts,Schriftarten,Installation,TrueType,Type1,Speedo,Bitmapschriften +Keywords[el]=γραμματοσειρά,γραμματοσειρές,εγκαταστάτης,truetype,type1,speedo,bitmap +Keywords[eo]=tiparo,tiparoj,instalilo,ŝangebla,neŝangebla +Keywords[es]=tipo de letra,tipos de letra,instalador,truetype,type1,speedo,bitmap +Keywords[et]=font,fondid,paigaldaja,truetype,type1,speedo,bitmap +Keywords[eu]=letra-tipoa,letra-tipoak,instalatzailea,truetype,type1,speedo,bitmap +Keywords[fa]=قلم، قلمها، نصب‌کننده، قلم حقیقی، نوع۱ ،speedo، نگاشت بیت، +Keywords[fi]=kirjasin,kirjasimet,fontti,fontit,asentaja,truetype,type1,speedo,bitmap +Keywords[fr]=police,polices,installeur,installateur,truetype,type1,speedo,bitmap +Keywords[fy]=letters,lettertypen,fonts,Ynstalaasje,truetype,type1,speedo,bitmap +Keywords[ga]=cló,clónna,clófhoirne,suiteálaí,truetype,type1,speedo,mapa giotán,giotánmhapach +Keywords[gl]=fonte,fontes,instalador,truetype,type1,speedo,bitmap +Keywords[he]=גופנים,גופן, מתקין, TrueType, Type1, speedo, מפת סיביות, bitmap, font,fonts,installer,truetype,type1,speedo,bitmap +Keywords[hi]=फ़ॉन्ट,फ़ॉन्ट्स,संस्थापक,ट्रू-टाइप,टाइप-1,स्पीडो,बिटमैप +Keywords[hr]=font,fonts,installer,truetype,type1,speedo,bitmap,fontovi,instaliranje,TTF +Keywords[hu]=betűtípus,betűtípusok,telepítő,TrueType,Type1,Speedo,bittérkép +Keywords[is]=font,fonts,installer,truetype,type1,speedo,bitmap,letur +Keywords[it]=font,caratteri,installatore,truetype,type1,speedo,bitmap,tipi di carattere +Keywords[ja]=フォント,インストーラ,truetype,type1,speedo,bitmap,ビットマップ +Keywords[ka]=ფონტი,ფონტები,დასაყენებელი,truetype,type1,speedo,bitmap +Keywords[km]=ពុម្ពអក្សរ,កម្មវិធី​ដំឡើង,truetype,type1,speedo,bitmap +Keywords[lt]=šriftas,šriftai,įdiegimas,truetype,type1,speedo,bitmap +Keywords[lv]=fonti,fonts,instalēt,truetype,type1,speedo,bitmap +Keywords[mk]=font,fonts,installer,truetype,type1,speedo,bitmap,фонт,фонтови,инсталатор +Keywords[nb]=skrift,skrifter,skrifttype,skrifttyper,installer,truetype,type1,speedo,bitmap +Keywords[nds]=Schriftoort,Schriftoorden,Installeren,TrueType,Type1,Speedo,Bitmap +Keywords[ne]=फन्ट, फन्टहरू, स्थापक, ट्रु टाइप, टाइप १, स्पेडो, बिटम्याप +Keywords[nl]=letters,lettertypen,fonts,installatie,truetype,type1,speedo,bitmap +Keywords[nn]=skrift,skrifter,installering,truetype,type1,speedo,bitmap +Keywords[pa]=font,fonts,installer,truetype,type1,speedo,bitmap, ਫੋਂਟ, ਇੰਸਟਾਲਰ +Keywords[pl]=czcionka,czcionki,font,instalator,truetype,type1,speedo +Keywords[pt]=tipo de letra,tipos de letra,instalador,truetype,type1,speedo,imagem +Keywords[pt_BR]=fonte,fontes,instalador,truetype,type1,speedo,bitmap +Keywords[ro]=font,fonturi,instalator,truetype,type1,speedo,bitmap +Keywords[ru]=font,fonts,installer,truetype,type1,speedo,bitmap,шрифты +Keywords[rw]=Imyandikire,imyandikire,mwinjiza,ubwokonyabwo,ubwoko1,umuvuduko,bitimapu +Keywords[se]=fonta,fonttat,sajáiduhttejeaddji,truetype,type1,speedo,bitmap +Keywords[sk]=písmo,písma,inštalátor,truetype,type1,speedo,bitmap +Keywords[sl]=pisava,pisave,namestilnik,truetype,type1,speedo,bitmap +Keywords[sr]=font,fonts,installer,truetype,type1,speedo,bitmap,фонт,фонтови,инсталер,битмапа +Keywords[sr@Latn]=font,fonts,installer,truetype,type1,speedo,bitmap,font,fontovi,instaler,bitmapa +Keywords[sv]=teckensnitt,installation,truetype,type1,speedo,bitmap +Keywords[ta]=எழுத்துரு,எழுத்துருக்கள்,அமர்வர்,மெய்வகை,வகை1,speedo,பிட்படம் +Keywords[th]=แบบอักษร,ตัวติดตั้ง,ทรูไทป์,ไทป์1,speedo,บิตแมป +Keywords[tr]=yazıtipi,yazıtipleri,kurucu,truetype,type1,speedo,bitmap +Keywords[uk]=шрифт, шрифти,встановлення,векторний,растровий,truetype,type1,speedo +Keywords[uz]=shrift,shriftlar,oʻrnatuvchi,bitmap,truetype,type1,speedo +Keywords[uz@cyrillic]=шрифт,шрифтлар,ўрнатувчи,битмап,truetype,type1,speedo +Keywords[vi]=phông chữ,các phông chữ,trình cài đặt,truetype,kiểu 1,tốc độ gõ,mảng ảnh +Keywords[wa]=fonte,fontes,astaleu,truetype,type1,speedo,bitmap +Keywords[zh_CN]=font,fonts,installer,truetype,type1,speedo,bitmap,字体,安装程序,位图字体 +Keywords[zh_TW]=font,fonts,installer,truetype,type1,speedo,bitmap,字型,安裝程式,點陣 + +Categories=Qt;KDE;X-KDE-settings-system; diff --git a/kcontrol/kfontinst/kfile-plugin/KFileFont.cpp b/kcontrol/kfontinst/kfile-plugin/KFileFont.cpp new file mode 100644 index 000000000..31fbaa83e --- /dev/null +++ b/kcontrol/kfontinst/kfile-plugin/KFileFont.cpp @@ -0,0 +1,422 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::KFileFont +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 20/03/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "KFileFont.h" +#include "KfiConstants.h" +#include +#include +#include +#include + +static void addEntry(int face, QString &existing, const QString &add) +{ + if(face>0) + existing.append(", "); + existing.append(add); +} + +static int strToWeight(const QString &str) +{ + if(NULL==str) + return FC_WEIGHT_MEDIUM; + else if(str.contains("Bold", false)) + return FC_WEIGHT_BOLD; + else if(str.contains("Heavy", false)) + return FC_WEIGHT_HEAVY; + else if(str.contains("Black", false)) + return FC_WEIGHT_BLACK; + else if(str.contains("ExtraBold", false)) + return FC_WEIGHT_EXTRABOLD; + else if(str.contains("UltraBold", false)) + return FC_WEIGHT_ULTRABOLD; + else if(str.contains("ExtraLight", false)) + return FC_WEIGHT_EXTRALIGHT; + else if(str.contains("UltraLight", false)) + return FC_WEIGHT_ULTRALIGHT; + else if(str.contains("Light", false)) + return FC_WEIGHT_LIGHT; + else if(str.contains("Medium", false) || str.contains("Normal", false) || str.contains("Roman", false)) + return FC_WEIGHT_MEDIUM; + else if(str.contains("Regular", false)) + return FC_WEIGHT_REGULAR; + else if(str.contains("SemiBold", false)) + return FC_WEIGHT_SEMIBOLD; + else if(str.contains("DemiBold", false)) + return FC_WEIGHT_DEMIBOLD; + else if(str.contains("Thin", false)) + return FC_WEIGHT_THIN; + else if(str.contains("Book", false)) + return FC_WEIGHT_NORMAL; + else if(str.contains("Demi", false)) + return FC_WEIGHT_NORMAL; + else + return FC_WEIGHT_MEDIUM; +} + +#ifndef KFI_FC_NO_WIDTHS +static int strToWidth(const QString &str) +{ + if(str.isEmpty()) + return FC_WIDTH_NORMAL; + else if(str.contains("UltraCondensed", false)) + return FC_WIDTH_ULTRACONDENSED; + else if(str.contains("ExtraCondensed", false)) + return FC_WIDTH_EXTRACONDENSED; + else if(str.contains("SemiCondensed", false)) + return FC_WIDTH_SEMICONDENSED; + else if(str.contains("Condensed", false)) + return FC_WIDTH_CONDENSED; + else if(str.contains("SemiExpanded", false)) + return FC_WIDTH_SEMIEXPANDED; + else if(str.contains("UltraExpanded", false)) + return FC_WIDTH_ULTRAEXPANDED; + else if(str.contains("ExtraExpanded", false)) + return FC_WIDTH_EXTRAEXPANDED; + else if(str.contains("Expanded", false)) + return FC_WIDTH_EXPANDED; + else + return FC_WIDTH_NORMAL; +} +#endif + +struct FoundryMap +{ + const char *noticeStr, + *foundry; + unsigned short len; +}; + +static const FoundryMap map[]= // These are (mainly) taken from type1inst +{ + { "Bigelow", "B&H", 3}, + { "Adobe", "Adobe", 5}, + { "Bitstream", "Bitstream", 9}, + { "Monotype", "Monotype", 8}, + { "Linotype", "Linotype", 8}, + { "LINOTYPE-HELL", "Linotype", 0}, + { "IBM", "IBM", 3}, + { "URW", "URW", 3}, + { "International Typeface Corporation", "ITC", 3}, + { "Tiro Typeworks", "Tiro", 4}, + { "XFree86", "XFree86", 7}, + { "Microsoft", "Microsoft", 9}, + { "Omega", "Omega", 5}, + { "Font21", "Hwan", 4}, + { "HanYang System", "Hanyang", 7}, + { "Richard Mitchell", "Mitchell", 8}, + { "Doug Miles", "Miles", 5}, + { "Hank Gillette", "Gillette", 8}, + { "Three Islands Press", "3ip", 3}, + { "MacroMind", "Macromind", 9}, + { "MWSoft", "MWSoft", 6}, + { "Digiteyes Multimedia", "DigitEyes", 9}, + { "ZSoft", "ZSoft", 5}, + { "Title Wave", "Titlewave", 9}, + { "Southern Software", "Southern", 8}, + { "Reasonable Solutions", "Reasonable", 10}, + { "David Rakowski", "Rakowski", 8}, + { "D. Rakowski", "Rakowski", 0}, + { "S. G. Moye", "Moye", 4}, + { "S.G. Moye", "Moye", 0}, + { "Andrew s. Meit", "Meit", 4}, + { "A.S.Meit", "Meit", 0}, + { "Hershey", "Hershey", 7}, + { "FontBank", "FontBank", 8}, + { "A. Carr", "Carr", 4}, + { "Brendel Informatik", "Brendel", 7}, + { "Jonathan Brecher", "Brecher", 7}, + { "SoftMaker", "Softmaker", 9}, + { "LETRASET", "Letraset", 8}, + { "Corel Corp", "Corel", 5}, + { "PUBLISHERS PARADISE", "Paradise", 8}, + { "Publishers Paradise", "Paradise", 0}, + { "Allied Corporation", "Allied", 6}, + { NULL, NULL, 0} +}; + +static const char * getFoundry(const char *notice) +{ + const FoundryMap *entry; + + if(notice) + for(entry=map; NULL!=entry->foundry; entry++) + if(NULL!=strstr(notice, entry->noticeStr)) + return entry->foundry; + + return NULL; +} + +static bool readAfm(const QString &file, QString &full, QString &family, QString &foundry, QString &weight, +#ifndef KFI_FC_NO_WIDTHS + QString &width, +#endif + QString &spacing, QString &slant) +{ + QFile f(file); + bool foundName=false, + foundFamily=false; + int intSpacing=FC_PROPORTIONAL, +#ifndef KFI_FC_NO_WIDTHS + intWidth=FC_WIDTH_NORMAL, +#endif + intWeight=FC_WEIGHT_NORMAL, + intSlant=FC_SLANT_ROMAN, + intItalic=FC_SLANT_ROMAN; + + if(f.open(IO_ReadOnly)) + { + QTextStream stream(&f); + QString line; + bool inMetrics=false; + + while(!stream.atEnd()) + { + line=stream.readLine(); + line=line.simplifyWhiteSpace(); + + if(inMetrics) + { + if(0==line.find("FullName ")) + { + full=line.mid(9); +#ifndef KFI_FC_NO_WIDTHS + intWidth=strToWidth(full); +#endif + foundName=true; + } + else if(0==line.find("FamilyName ")) + { + family=line.mid(11); + foundFamily=true; + } + else if(0==line.find("Weight ")) + intWeight=strToWeight(line.mid(7)); + else if(0==line.find("ItalicAngle ")) + intSlant=0.0f==line.mid(12).toFloat() ? FC_SLANT_ROMAN : FC_SLANT_ITALIC; + else if(0==line.find("IsFixedPitch ")) + intSpacing=0==line.mid(13).find("false", 0, false) ? FC_PROPORTIONAL : FC_MONO; + else if(0==line.find("Notice ")) + foundry=getFoundry(line.mid(7).latin1()); + else if(0==line.find("StartCharMetrics")) + break; + } + else + if(0==line.find("StartFontMetrics")) + inMetrics=true; + }; + f.close(); + + if(!foundFamily && foundName) + { + family=full; + foundFamily=true; + } + + if(foundName && FC_SLANT_ITALIC==intItalic && (-1!=full.find("Oblique") || -1!=full.find("Slanted"))) + intItalic=FC_SLANT_OBLIQUE; + } + + if(foundName && foundFamily) + { + weight=KFI::CFcEngine::weightStr(intWeight, false); +#ifndef KFI_FC_NO_WIDTHS + width=KFI::CFcEngine::widthStr(intWidth, false); +#endif + slant=KFI::CFcEngine::slantStr(intSlant, false); + spacing=KFI::CFcEngine::spacingStr(intSpacing); + + if(foundry.isEmpty()) + foundry=i18n(KFI_UNKNOWN_FOUNDRY); + + return true; + } + + return false; +} + +typedef KGenericFactory KFileFontPluginFactory; +K_EXPORT_COMPONENT_FACTORY(kfile_font, KFileFontPluginFactory("kfontinst")) + +namespace KFI +{ + +KFileFontPlugin::KFileFontPlugin(QObject *parent, const char *name, const QStringList& args) + : KFilePlugin(parent, name, args) +{ + KGlobal::locale()->insertCatalogue(KFI_CATALOGUE); + + addMimeType("application/x-font-ttf"), + addMimeType("application/x-font-type1"); + //addMimeType("application/x-font-speedo"); + addMimeType("application/x-font-bdf"); + addMimeType("application/x-font-pcf"); + //addMimeType("application/x-font-snf"); + addMimeType("application/x-font-otf"); + addMimeType("application/x-font-ttc"); + addMimeType("application/x-afm"); +} + +void KFileFontPlugin::addMimeType(const char *mime) +{ + KFileMimeTypeInfo *info=addMimeTypeInfo(mime); + KFileMimeTypeInfo::GroupInfo *group=addGroupInfo(info, "General", i18n("General")); + + addItemInfo(group, "Full", i18n("Full Name"), QVariant::String); + addItemInfo(group, "Family", i18n("Family"), QVariant::String); + addItemInfo(group, "Foundry", i18n("Foundry"), QVariant::String); + addItemInfo(group, "Weight", i18n("Weight"), QVariant::String); +#ifndef KFI_FC_NO_WIDTHS + addItemInfo(group, "Width", i18n("Width"), QVariant::String); +#endif + addItemInfo(group, "Spacing", i18n("Spacing"), QVariant::String); + addItemInfo(group, "Slant", i18n("Slant"), QVariant::String); +} + +bool KFileFontPlugin::readInfo(KFileMetaInfo& info, uint what) +{ + QString full, + lastFull, + family, + foundry, + weight, +#ifndef KFI_FC_NO_WIDTHS + width, +#endif + spacing, + slant, + fullAll, + familyAll, + foundryAll, + weightAll, +#ifndef KFI_FC_NO_WIDTHS + widthAll, +#endif + spacingAll, + slantAll; + KURL url(info.url()); + QString fName; + bool fontsProt = KFI_KIO_FONTS_PROTOCOL == url.protocol(), + fileProt = "file" == url.protocol(), + downloaded = false, + status = false; + + what=0; + + if(!fontsProt && !fileProt && KIO::NetAccess::download(url, fName, NULL)) + { + downloaded=true; + url=KURL(fName); + } + + if(downloaded || fontsProt || fileProt) + { + if("application/x-afm"==info.mimeType()) // Then fontconfig can't give us the data :-( + status=readAfm(url.path(), fullAll, familyAll, foundryAll, weightAll, +#ifndef KFI_FC_NO_WIDTHS + widthAll, +#endif + spacingAll, slantAll); + else + for(int face=0; face<10; ++face) // How to get num faces from fontconfig? don't know - so just try 1st 10... + { + if(itsEngine.getInfo(url, face, full, family, foundry, weight, +#ifndef KFI_FC_NO_WIDTHS + width, +#endif + spacing, slant) && + !full.isEmpty() && full!=lastFull) + { + addEntry(face, fullAll, full); + lastFull=full; + + if(KFileMetaInfo::Fastest!=what) + { + addEntry(face, familyAll, family); + if(0==face) + { + foundryAll=foundry; + + if(foundryAll.isEmpty()) + foundryAll=i18n(KFI_UNKNOWN_FOUNDRY); + else + { + // Try to make sure foundry is capitalised, and looks the same as that of + // any AFM. + foundryAll[0]=foundryAll[0].upper(); + + const FoundryMap *entry; + + for(entry=map; NULL!=entry->foundry; entry++) + if(foundryAll.length()==entry->len && foundryAll.contains(entry->foundry, false)) + { + foundryAll=entry->foundry; + break; + } + } + } + addEntry(face, weightAll, weight); +#ifndef KFI_FC_NO_WIDTHS + addEntry(face, widthAll, width); +#endif + addEntry(face, spacingAll, spacing); + addEntry(face, slantAll, slant); + } + status=true; + } + else + break; + } + + if(status) + { + KFileMetaInfoGroup group; + + group=appendGroup(info, "General"); + appendItem(group, "Full", fullAll); + + if(KFileMetaInfo::Fastest!=what) + { + appendItem(group, "Family", familyAll); + appendItem(group, "Foundry", foundryAll); + appendItem(group, "Weight", weightAll); +#ifndef KFI_FC_NO_WIDTHS + appendItem(group, "Width", widthAll); +#endif + appendItem(group, "Spacing", spacingAll); + appendItem(group, "Slant", slantAll); + } + } + + if(downloaded) + KIO::NetAccess::removeTempFile(fName); + } + + return status; +} + +} diff --git a/kcontrol/kfontinst/kfile-plugin/KFileFont.h b/kcontrol/kfontinst/kfile-plugin/KFileFont.h new file mode 100644 index 000000000..b06ab2a57 --- /dev/null +++ b/kcontrol/kfontinst/kfile-plugin/KFileFont.h @@ -0,0 +1,58 @@ +#ifndef __KFILE_FONT_H__ +#define __KFILE_FONT_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFileFont +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 20/03/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include "FcEngine.h" + +namespace KFI +{ + +class KFileFontPlugin : public KFilePlugin +{ + public: + + KFileFontPlugin(QObject *parent, const char *name, const QStringList& args); + virtual ~KFileFontPlugin() {} + + bool readInfo(KFileMetaInfo& info, uint what = KFileMetaInfo::Fastest); + + private: + + void addMimeType(const char *mime); + + private: + + CFcEngine itsEngine; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kfile-plugin/Makefile.am b/kcontrol/kfontinst/kfile-plugin/Makefile.am new file mode 100644 index 000000000..7f136357f --- /dev/null +++ b/kcontrol/kfontinst/kfile-plugin/Makefile.am @@ -0,0 +1,13 @@ +kde_module_LTLIBRARIES = kfile_font.la + +kfile_font_la_SOURCES = KFileFont.cpp +kfile_font_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIBFREETYPE_RPATH) -module $(KDE_PLUGIN) +kfile_font_la_LIBADD = $(LIB_KIO) $(LIBFREETYPE_LIBS) ../lib/libkfontinst.la + +kdelnkdir = $(kde_servicesdir) +kde_services_DATA = kfile_font.desktop + +AM_CPPFLAGS = -I$(srcdir)/../lib -I$(srcdir)/../../fonts $(all_includes) $(LIBFREETYPE_CFLAGS) + +METASOURCES = AUTO +noinst_HEADERS = KFileFont.h diff --git a/kcontrol/kfontinst/kfile-plugin/kfile_font.desktop b/kcontrol/kfontinst/kfile-plugin/kfile_font.desktop new file mode 100644 index 000000000..7ac0a499f --- /dev/null +++ b/kcontrol/kfontinst/kfile-plugin/kfile_font.desktop @@ -0,0 +1,86 @@ +[Desktop Entry] +Type=Service +Name=Font Information +Name[af]=Skrif tipe Informasie +Name[ar]=معلومات المحرف +Name[az]=Yazı Növü Mə'lumatı +Name[be]=Інфармацыя аб шрыфце +Name[bg]=Информация за шрифт +Name[bn]=ফন্ট তথ্য +Name[br]=Titouroù diwar-benn ar font +Name[bs]=Informacije o fontu +Name[ca]=Informació de la lletra +Name[cs]=Informace o písmu +Name[csb]=Wëdowiédzô ò fòntach +Name[cy]=Gwybodaeth Ffont +Name[da]=Skrifttypeinformation +Name[de]=Schriftarteninformation +Name[el]=Πληροφορίες γραμματοσειράς +Name[eo]=Tiparinformo +Name[es]=Información del tipo de letra +Name[et]=Fondi info +Name[eu]=Letra-tipoei buruzko informazioa +Name[fa]=اطلاعات قلم +Name[fi]=Kirjasintiedot +Name[fr]=Informations sur les polices +Name[fy]=Lettertype-Ynformaasje +Name[ga]=Eolas Clófhoirne +Name[gl]=Información da Fonte +Name[he]=מידע גופנים +Name[hi]=फ़ॉन्ट जानकारी +Name[hr]=Podaci o fontu +Name[hu]=Betűtípus-jellemzők +Name[id]=Informasi Font +Name[is]=Leturupplýsingar +Name[it]=Informazioni caratteri +Name[ja]=フォント情報 +Name[ka]=ინფორმაცია ფონტის შესახებ +Name[kk]=Қаріп мәліметі +Name[km]=ព័ត៌មាន​ពុម្ពអក្សរ +Name[ko]=연락처 정보 +Name[lo]=ຂໍ້ມູນຕ່າງໆ +Name[lt]=Šrifto(-ų) informacija +Name[lv]=Fontu Informācija +Name[mk]=Информации за фонтовите +Name[mn]=Бичиг-Мэдээлэл +Name[ms]=Maklumat Fon +Name[mt]=Informazzjoni dwar font +Name[nb]=Skriftinformasjon +Name[nds]=Schriftoort-Informatschoon +Name[ne]=फन्ट सूचना +Name[nl]=Lettertype-informatie +Name[nn]=Skriftinformasjon +Name[nso]=Tshedimoso ya Fonto +Name[pa]=ਫੋਂਟ ਜਾਣਕਾਰੀ +Name[pl]=Informacje o czcionkach +Name[pt]=Informação do Tipo de Letra +Name[pt_BR]=Informações sobre a Fonte +Name[ro]=Informații font +Name[ru]=Сведения о шрифте +Name[rw]=Amakuru y'Imyandikire +Name[se]=Fontadieđut +Name[sk]=Informácie o písmach +Name[sl]=Informacije o pisavi +Name[sr]=Информације о фонту +Name[sr@Latn]=Informacije o fontu +Name[sv]=Teckensnittsinformation +Name[ta]=எழுத்துரு தகவல் +Name[tg]=Иттилооти ҳарфҳо +Name[th]=ข้อมูลแบบอักษร +Name[tr]=Yazıtipi Bilgisi +Name[tt]=Yazu Turında +Name[uk]=Інформація про шрифти +Name[uz]=Shrift haqida maʼlumot +Name[uz@cyrillic]=Шрифт ҳақида маълумот +Name[ven]=Mafhungo a fontu +Name[vi]=Thông tin về Phông chữ +Name[wa]=Informåcion sol fonte +Name[xh]=Ulwazi Lohlobo lwamagama +Name[zh_CN]=字体信息 +Name[zh_TW]=字型資訊 +Name[zu]=Ulwazi lohlobo lwamagama +ServiceTypes=KFilePlugin +X-KDE-Library=kfile_font +MimeType=application/x-font-ttf;application/x-font-type1;application/x-font-bdf;application/x-font-pcf;application/x-font-otf;application/x-font-ttc;application/x-afm +PreferredGroups=General +PreferredItems=Full,Family,Foundry,Weight,Width,Spacing,Slant diff --git a/kcontrol/kfontinst/kfontinst/FontEngine.cpp b/kcontrol/kfontinst/kfontinst/FontEngine.cpp new file mode 100644 index 000000000..ff5dcd623 --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/FontEngine.cpp @@ -0,0 +1,376 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontEngine +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 29/04/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + + +#include "FontEngine.h" +#include "Misc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include FT_SFNT_NAMES_H +#include FT_TRUETYPE_IDS_H +#include FT_TRUETYPE_TABLES_H +#include FT_TYPE1_TABLES_H + +namespace KFI +{ + +bool CFontEngine::openFont(const QString &file, int face) +{ + bool ok=false; + + if(file==itsPath && face==itsFaceIndex) + { + ok=NONE!=itsType; + } + else + { + closeFont(); + + itsWeight=WEIGHT_MEDIUM; + itsItalic=ITALIC_NONE; + itsPath=file; + itsFaceIndex=face; + itsPsName=QString(); + + if(!openFontFt(file) && !itsPsName.isEmpty()) + itsType=NONE; + } + + return NONE!=itsType; +} + +void CFontEngine::closeFont() +{ + closeFaceFt(); + itsPath=QString::null; + itsFaceIndex=-1; + itsType=NONE; +} + +QString CFontEngine::weightStr(enum EWeight w) +{ + switch(w) + { + case WEIGHT_THIN: + return "Thin"; + case WEIGHT_ULTRA_LIGHT: + return "UltraLight"; + case WEIGHT_EXTRA_LIGHT: + return "ExtraLight"; + case WEIGHT_DEMI: + return "Demi"; + case WEIGHT_LIGHT: + return "Light"; + case WEIGHT_BOOK: + return "Book"; + case WEIGHT_MEDIUM: + return "Medium"; + case WEIGHT_REGULAR: + return "Regular"; + case WEIGHT_SEMI_BOLD: + return "SemiBold"; + case WEIGHT_DEMI_BOLD: + return "DemiBold"; + case WEIGHT_BOLD: + return "Bold"; + case WEIGHT_EXTRA_BOLD: + return "ExtraBold"; + case WEIGHT_ULTRA_BOLD: + return "UltraBold"; + case WEIGHT_HEAVY: + return "Heavy"; + case WEIGHT_BLACK: + return "Black"; + case WEIGHT_UNKNOWN: + default: + return "Medium"; + } +} + +CFontEngine::EWeight CFontEngine::strToWeight(const char *str) +{ + if(NULL==str) + return WEIGHT_MEDIUM; // WEIGHT_UNKNOWN; + else if(kasciistricmp(str, "Bold")==0) + return WEIGHT_BOLD; + else if(kasciistricmp(str, "Black")==0) + return WEIGHT_BLACK; + else if(kasciistricmp(str, "ExtraBold")==0) + return WEIGHT_EXTRA_BOLD; + else if(kasciistricmp(str, "UltraBold")==0) + return WEIGHT_ULTRA_BOLD; + else if(kasciistricmp(str, "ExtraLight")==0) + return WEIGHT_EXTRA_LIGHT; + else if(kasciistricmp(str, "UltraLight")==0) + return WEIGHT_ULTRA_LIGHT; + else if(kasciistricmp(str, "Light")==0) + return WEIGHT_LIGHT; + else if(kasciistricmp(str, "Medium")==0 || kasciistricmp(str, "Normal")==0 || kasciistricmp(str, "Roman")==0) + return WEIGHT_MEDIUM; + else if(kasciistricmp(str, "Regular")==0) + return WEIGHT_MEDIUM; // WEIGHT_REGULAR; + else if(kasciistricmp(str, "Demi")==0) + return WEIGHT_DEMI; + else if(kasciistricmp(str, "SemiBold")==0) + return WEIGHT_SEMI_BOLD; + else if(kasciistricmp(str, "DemiBold")==0) + return WEIGHT_DEMI_BOLD; + else if(kasciistricmp(str, "Thin")==0) + return WEIGHT_THIN; + else if(kasciistricmp(str, "Book")==0) + return WEIGHT_BOOK; + else + return WEIGHT_MEDIUM; // WEIGHT_UNKNOWN; +} + +static void removeSymbols(QString &str) +{ + str.replace(QRegExp("[\\-\\[\\]()]"), " "); + + int len=str.length(); + QChar space(' '); + + for(int c=0; c0x7E) + str[c]=space; + + str=str.simplifyWhiteSpace(); + str=str.stripWhiteSpace(); +} + +static bool lookupName(FT_Face face, int nid, int pid, int eid, FT_SfntName *nameReturn) +{ + int n = FT_Get_Sfnt_Name_Count(face); + + if(n>0) + { + int i; + FT_SfntName name; + + for(i=0; i 0) + { + *nameReturn = name; + return true; + } + } + } + + return false; +} + +static QCString getName(FT_Face face, int nid) +{ + FT_SfntName name; + QCString str; + + if(lookupName(face, nid, TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, &name) || + lookupName(face, nid, TT_PLATFORM_APPLE_UNICODE, -1, &name)) + for(unsigned int i=0; i < name.string_len / 2; i++) + str+=0 == name.string[2*i] ? name.string[(2*i)+1] : '_'; + else if(lookupName(face, nid, TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, &name)) // Pretend that Apple Roman is ISO 8859-1 + for(unsigned int i=0; i < name.string_len; i++) + str+=name.string[i]; + + return str; +} + +bool CFontEngine::openFontFt(const QString &file) +{ + enum ETtfWeight + { + TTF_WEIGHT_UNKNOWN = 0, + TTF_WEIGHT_THIN = 100 +50, + TTF_WEIGHT_EXTRALIGHT = 200 +50, + TTF_WEIGHT_LIGHT = 300 +50, + TTF_WEIGHT_NORMAL = 400 +50, + TTF_WEIGHT_MEDIUM = 500 +50, + TTF_WEIGHT_SEMIBOLD = 600 +50, + TTF_WEIGHT_BOLD = 700 +50, + TTF_WEIGHT_EXTRABOLD = 800 +50, + TTF_WEIGHT_BLACK = 900 +50 + }; + + bool status=FT_New_Face(itsFt.library, QFile::encodeName(file), 0, &itsFt.face) ? false : true; + + if(status) + itsFt.open=true; + + PS_FontInfoRec t1info; + + if(0==FT_Get_PS_Font_Info(itsFt.face, &t1info)) + { + itsFamily=t1info.family_name; + itsType=TYPE_1; + } + else + { + itsFamily=getName(itsFt.face, TT_NAME_ID_FONT_FAMILY); + itsType=TRUE_TYPE; + } + + if(itsFamily.isEmpty()) + itsFamily=FT_Get_Postscript_Name(itsFt.face); + + if(itsFamily.isEmpty()) + status=false; // Hmm... couldn't find any of the names! + + if(status) + { + removeSymbols(itsFamily); + itsPsName=(FT_Get_Postscript_Name(itsFt.face)); + + if(TYPE_1==itsType) + { + itsWeight=strToWeight(t1info.weight); + itsItalic=t1info.italic_angle <= -4 || t1info.italic_angle >= 4 ? ITALIC_ITALIC : ITALIC_NONE; + } + else // TrueType... + { + TT_Postscript *post=NULL; + TT_OS2 *os2=NULL; + TT_Header *head=NULL; + bool gotItalic=false; + + if(NULL==(os2=(TT_OS2 *)FT_Get_Sfnt_Table(itsFt.face, ft_sfnt_os2)) || 0xFFFF==os2->version) + itsWeight=WEIGHT_UNKNOWN; + else + { + FT_UShort weight=(os2->usWeightClass>0 && os2->usWeightClass<100) ? os2->usWeightClass*100 : os2->usWeightClass; + + if(weightfsSelection&(1 << 5)) + itsWeight=WEIGHT_BOLD; + else + itsWeight=WEIGHT_UNKNOWN; + + itsItalic=os2->fsSelection&(1 << 0) ? ITALIC_ITALIC : ITALIC_NONE; + gotItalic=true; + } + + if(WEIGHT_UNKNOWN==itsWeight) + itsWeight=NULL!=(head=(TT_Header *)FT_Get_Sfnt_Table(itsFt.face, ft_sfnt_head)) && head->Mac_Style & 1 + ? WEIGHT_BOLD + : WEIGHT_MEDIUM; + + if(!gotItalic && (head!=NULL || NULL!=(head=(TT_Header *)FT_Get_Sfnt_Table(itsFt.face, ft_sfnt_head)))) + { + gotItalic=true; + itsItalic=head->Mac_Style & 2 ? ITALIC_ITALIC: ITALIC_NONE; + } + + if(!gotItalic && NULL!=(post=(TT_Postscript *)FT_Get_Sfnt_Table(itsFt.face, ft_sfnt_post))) + { + struct TFixed + { + TFixed(unsigned long v) : upper(v>>16), lower(v&0xFFFF) {} + + short upper, + lower; + + float value() { return upper+(lower/65536.0); } + }; + + gotItalic=true; + itsItalic=0.0f==((TFixed)post->italicAngle).value() ? ITALIC_NONE : ITALIC_ITALIC; + } + } + } + + if(!status) + closeFaceFt(); + + return status; +} + +void CFontEngine::closeFaceFt() +{ + if(itsFt.open) + { + FT_Done_Face(itsFt.face); + itsFt.open=false; + } +} + +CFontEngine::TFtData::TFtData() + : open(false) +{ + if(FT_Init_FreeType(&library)) + { + std::cerr << "ERROR: FreeType2 failed to initialise\n"; + exit(0); + } +} + +CFontEngine::TFtData::~TFtData() +{ + FT_Done_FreeType(library); +} + +} diff --git a/kcontrol/kfontinst/kfontinst/FontEngine.h b/kcontrol/kfontinst/kfontinst/FontEngine.h new file mode 100644 index 000000000..06218c0ae --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/FontEngine.h @@ -0,0 +1,142 @@ +#ifndef __FONT_ENGINE_H__ +#define __FONT_ENGINE_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontEngine +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 29/04/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include FT_FREETYPE_H +#include +#include + +namespace KFI +{ + +class CFontEngine +{ + public: + + enum EType + { + // These have PS Info / support AFM stuff... + TRUE_TYPE, + TT_COLLECTION, + TYPE_1, + NONE + }; + + enum EWeight + { + WEIGHT_UNKNOWN=0, + WEIGHT_THIN, + WEIGHT_ULTRA_LIGHT, + WEIGHT_EXTRA_LIGHT, + WEIGHT_DEMI, + WEIGHT_LIGHT, + WEIGHT_BOOK, + WEIGHT_MEDIUM, + WEIGHT_REGULAR, + WEIGHT_SEMI_BOLD, + WEIGHT_DEMI_BOLD, + WEIGHT_BOLD, + WEIGHT_EXTRA_BOLD, + WEIGHT_ULTRA_BOLD, + WEIGHT_HEAVY, + WEIGHT_BLACK + }; + + enum EItalic + { + ITALIC_NONE, + ITALIC_ITALIC, + ITALIC_OBLIQUE + }; + + private: + + struct TFtData + { + TFtData(); + ~TFtData(); + + FT_Library library; + FT_Face face; + bool open; + }; + + public: + + CFontEngine() : itsType(NONE) { } + ~CFontEngine() { closeFont(); } + + static EType getType(const char *fname); + static QString weightStr(EWeight w); + static QString italicStr(EItalic i) { return ITALIC_NONE==i ? "r" : ITALIC_ITALIC==i ? "i" : "o"; } + + // + // General functions - these should be used instead of specfic ones below... + // + bool openFont(const QString &file, int face=0); + void closeFont(); + + // + const QString & getFamilyName() { return itsFamily; } + const QString & getPsName() { return itsPsName; } + EWeight getWeight() { return itsWeight; } + EItalic getItalic() { return itsItalic; } + EType getType() { return itsType; } + int getNumFaces() { return itsFt.open ? itsFt.face->num_faces : 1; } + bool hasPsInfo() { return itsType!=NONE; } + + static EWeight strToWeight(const char *str); + + private: + + bool openFontFt(const QString &file); + void closeFaceFt(); + + private: + + EWeight itsWeight; + EType itsType; + EItalic itsItalic; + QString itsFamily, + itsPsName, + itsPath; + int itsNumFaces, + itsFaceIndex; // Only for TTC fonts - at the moment... + TFtData itsFt; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kfontinst/Fontmap.cpp b/kcontrol/kfontinst/kfontinst/Fontmap.cpp new file mode 100644 index 000000000..0f8178dee --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/Fontmap.cpp @@ -0,0 +1,596 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Namespae : KFI::Fontmap +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 06/06/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "Fontmap.h" +#include "FontEngine.h" +#include "XConfig.h" +#include "FcEngine.h" +#include "KfiConstants.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +static const char * findSpace(const char *str) +{ + while(str && *str!=' ' && *str!='\t') + str++; + + return str; +} + +static bool parseLine(const char *line, QString &ps, QString &fname, bool &isAlias) +{ + static const int constMaxLen = 127; + static const int constFileMaxLen = 1023; + + // + // Format: + // "/ () ; " + // "/ /real ; " + + char a[constMaxLen+1], + b[constFileMaxLen+1]; + + const char *slash1=strchr(line, '/'), + *space1=slash1 ? findSpace(slash1) : NULL, //strchr(slash1, ' ') : NULL, + *ob=slash1 ? strchr(slash1, '(') : NULL, + *cb=ob ? strchr(ob, ')') : NULL, + *slash2=space1 && !ob && !cb ? strchr(space1, '/') : NULL, + *space2=slash2 ? findSpace(slash2) : NULL, // strchr(slash2, ' ') : NULL, + *semic=cb || space2 ? strchr(cb ? cb : space2, ';') : NULL; + + if(semic && space1-slash1 "TimesNewRoman" +static QString createX11PsName(const QString &font) +{ + QString newName(font); + unsigned int ch; + bool newWord=true; + + newName.replace(QRegExp("\\-"), "_"); + + for(ch=0; chfileName() && ".."!=fInfo->fileName()) + if(fInfo->isDir()) + { + if(!(str=locateFile(QFile::encodeName(fInfo->filePath()+"/"), file, level+1)).isEmpty()) + return str; + } + else + if(fInfo->fileName()==file) + return fInfo->filePath(); + } + } + } + + return QString::null; +} + +static QString locateFile(const char *file, const char **dirs) +{ + int d; + QString str; + + for(d=0; dirs[d]; ++d) + if(!(str=locateFile(dirs[d], file)).isEmpty()) + return str; + + return QString::null; +} + +#define FONTMAP "Fontmap" + +namespace KFI +{ + +namespace Fontmap +{ + +bool create(const QString &dir, CFontEngine &fe) +{ + bool root(Misc::root()), + added=false; + QString fmapDir(Misc::dirSyntax(root ? KFI_ROOT_CFG_DIR : dir)); + CFile old(fmapDir); + QStringList entries; + int i; + FcPattern *pat = FcPatternCreate(); + FcObjectSet *os = FcObjectSetBuild(FC_FILE, FC_SCALABLE, (void*)0); + FcFontSet *fs = FcFontList(0, pat, os); + + FcPatternDestroy(pat); + FcObjectSetDestroy(os); + + for (i = 0; infont; i++) + { + QString fName(Misc::fileSyntax(CFcEngine::getFcString(fs->fonts[i], FC_FILE))); + FcBool scalable=FcFalse; + + if(!fName.isEmpty() && (root || dir.isEmpty() || 0==fName.find(dir)) && + FcResultMatch==FcPatternGetBool(fs->fonts[i], FC_SCALABLE, 0, &scalable) && scalable) + { + const QStringList *existing=old.getEntries(fName); + + if(existing && existing->count()) + entries+=(*existing); + else + { + int face=0, + numFaces=0; + + do + { + if(fe.openFont(fName, face)) + { + if(fe.hasPsInfo()) + { + if(0==numFaces) + numFaces=fe.getNumFaces(); // Only really for TTC files... + + // + // Add real + addEntry(entries, fe.getPsName(), fName, fmapDir); + added=true; + + // + // Add fake entries for X11 generated names + switch(fe.getWeight()) + { + case CFontEngine::WEIGHT_MEDIUM: + case CFontEngine::WEIGHT_REGULAR: + { + QString x11Ps(createX11PsName(fe.getFamilyName())); + + if(CFontEngine::ITALIC_ITALIC!=fe.getItalic() && + CFontEngine::ITALIC_OBLIQUE!=fe.getItalic()) + addAliasEntry(entries, + createName(x11Ps, "Roman", + getItalicStr(fe.getItalic())), + fe.getPsName()); + addAliasEntry(entries, + createName(x11Ps, NULL, getItalicStr(fe.getItalic())), + fe.getPsName()); + break; + } + case CFontEngine::WEIGHT_UNKNOWN: + break; + default: + addAliasEntry(entries, + createName(createX11PsName(fe.getFamilyName()), + CFontEngine::weightStr(fe.getWeight()), + getItalicStr(fe.getItalic())), + fe.getPsName()); + } + } + fe.closeFont(); + } + } + while(++facegsLine) + { + in.clear(); + in.seekg(0, ios::end); + int size= (streamoff) in.tellg(); + in.seekg(0, ios::beg); + + char *buffer=new char[size+strlen(fmap)+strlen(constRLF)+5]; + + if(buffer) + { + bool added=false; + + buffer[0]='\0'; + lineNum=0; + + do + { + in.getline(line, constMaxLineLen); + + if(in.good()) + { + line[constMaxLineLen-1]='\0'; + + if(lineNum>=ncLine && !added) + { + strcat(buffer, "("); + strcat(buffer, fmap); + strcat(buffer, ") "); + strcat(buffer, constRLF); + strcat(buffer, "\n"); + added=true; + } + + if(lineNum!=kfiLine) + { + strcat(buffer, line); + strcat(buffer, "\n"); + } + lineNum++; + } + } + while(!in.eof()); + + in.close(); + + if(added) // Don't re-write GS's Fontmap unless we've actually added something... + { + KSaveFile out(gsFile); + QTextStream *stream=out.textStream(); + + if(stream) + *stream << buffer; + } + delete [] buffer; + } + } + } + } + } + + return status; +} + +CFile::CFile(const QString &dir) + : itsDir(dir), + itsLineCount(0) +{ + ifstream f(QFile::encodeName(dir+FONTMAP)); + + itsEntries.setAutoDelete(true); + + if(f) + { + static const int constMaxLine=512; + + char line[constMaxLine+1]; + TEntry *current=NULL; + + while(!f.eof()) + { + f.getline(line, constMaxLine); + + if(!f.eof()) + { + QString ps, + fname; + bool isAlias; + + if(parseLine(line, ps, fname, isAlias)) + { + itsLineCount++; + + TEntry *entry=getEntry(¤t, fname, isAlias); + + if(!isAlias && entry && entry->psName.isEmpty()) + entry->psName=ps; + + if(entry) + entry->entries.append(line); + } + } + } + f.close(); + } +} + +const QStringList * CFile::getEntries(const QString &fname) +{ + TEntry *entry=findEntry(0==fname.find(itsDir) ? fname.mid(itsDir.length()) : fname, false); + + return entry ? &entry->entries : NULL; +} + +CFile::TEntry * CFile::findEntry(const QString &fname, bool isAlias) +{ + TEntry *entry=NULL; + + for(entry=itsEntries.first(); entry; entry=itsEntries.next()) + if(isAlias ? entry->psName==fname : entry->filename==fname) + break; + + return entry; +} + +CFile::TEntry * CFile::getEntry(TEntry **current, const QString &fname, bool isAlias) +{ + // + // See if its the current one... + if(*current && (isAlias ? (*current)->psName==fname : (*current)->filename==fname)) + return *current; + + // + // See if its already known... + TEntry *entry=findEntry(fname, isAlias); + + // + // If not found, then create a new entry + if(!entry) + { + entry=new TEntry(fname); + itsEntries.append(entry); + } + + *current=entry; + return entry; +} + +} + +} diff --git a/kcontrol/kfontinst/kfontinst/Fontmap.h b/kcontrol/kfontinst/kfontinst/Fontmap.h new file mode 100644 index 000000000..28d5c9d7e --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/Fontmap.h @@ -0,0 +1,79 @@ +#ifndef __FONTMAP_H__ +#define __FONTMAP_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Namespace : KFI::Fontmap +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 06/06/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include + +namespace KFI +{ + +class CFontEngine; + +namespace Fontmap +{ + class CFile + { + private: + + struct TEntry + { + TEntry(const QString &fname) : filename(fname) {} + + QString filename, + psName; + QStringList entries; + }; + + public: + + CFile(const QString &dir); + + const QStringList * getEntries(const QString &fname); + unsigned int getLineCount() { return itsLineCount; } + + private: + + TEntry * findEntry(const QString &fname, bool isAlias=false); + TEntry * getEntry(TEntry **current, const QString &fname, bool isAlias=false); + + private: + + QString itsDir; + QPtrList itsEntries; + unsigned int itsLineCount; + }; + + extern bool create(const QString &dir, CFontEngine &fe); +} + +} + +#endif diff --git a/kcontrol/kfontinst/kfontinst/GetPid.c b/kcontrol/kfontinst/kfontinst/GetPid.c new file mode 100644 index 000000000..015ea7ce9 --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/GetPid.c @@ -0,0 +1,519 @@ +/* +//////////////////////////////////////////////////////////////////////////////// +// +// File Name : GetPid.c +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 19/03/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003 +//////////////////////////////////////////////////////////////////////////////// +*/ + +#include +#include +#include + +#if defined(__DragonFly__) +#include +#endif + +#include + +#ifndef __cplusplus +#define bool unsigned int +#define false 0 +#define true (!false) +#endif + +#define BUFSIZE 1024 +#define PROCDIR "/proc" + +/* + Get process ID - using name of exe and parent process ID + + Implemented for: + + Linux Tested on Linux 2.4 + FreeBSD Tested on FreeBSD 5.1 by Brian Ledbetter + NetBSD + Irix + Solaris Tested on Solaris 8 x86 by Torsten Kasch + HP-UX Tested on HP-UX B.11.11 U 9000/800 + AIX + ...else parse output of "ps -eaf" + + + Some sections of this code are copied from / inspired by ksysguard, + Copyright (c) 1999 - 2001 Chris Schlaeger + + To test this file, do the following: + + 1. Compile this file as follows: + + gcc GetPid.c -DTEST_GETPID -DOS_Linux -o tst + + ...replace OS_Linux with your particular OS type: OS_FreeBSD, OS_NetBSD, OS_Irix, OS_Solaris, + OS_HPUX, or OS_AIX + + 2. Start a program - such as "vi" + 3. Do a "ps -eaf" to ensure there is *only one* process called "vi" + 4. Get the parent process ID of your "vi" above + 5. Call tst with that value -e.g. vi ppid=23 then ./tst vi 23 + ...this should then print out the process ID of "vi" + 6. Email me and let me know if it works! +*/ + +#if defined OS_Linux || defined __Linux__ + +#include +#include + +#define FOUND_NAME 1 +#define FOUND_PPID 2 +#define FOUND_ALL (FOUND_NAME+FOUND_PPID) + +unsigned int kfi_getPid(const char *proc, unsigned int ppid) +{ + bool error=false; + unsigned int pid=0; + DIR *dir; + struct dirent *entry; + + /* read in current process list via the /proc filesystem entry */ + if(NULL!=(dir=opendir(PROCDIR))) + { + while((entry=readdir(dir)) && !error) + if(isdigit(entry->d_name[0])) + { + char buf[BUFSIZE]; + FILE *fd; + + snprintf(buf, BUFSIZE-1, PROCDIR"/%d/status", atoi(entry->d_name)); + + if(NULL!=(fd=fopen(buf, "r"))) + { + char format[32], + tagformat[32], + tag[32], + name[64]; + int found=0; + + found=0; + sprintf(format, "%%%d[^\n]\n", (int) sizeof(buf) - 1); + sprintf(tagformat, "%%%ds", (int) sizeof(tag) - 1); + for(;foundd_name); + } + fclose(fd); + } + } + closedir(dir); + } + + return error ? 0 : pid; +} + +#elif defined OS_FreeBSD || defined OS_NetBSD || defined __FreeBSD__ || defined __NetBSD__ || defined OS_Darwin + +#include +#include +#include +#include +#include +#if __FreeBSD_version > 500015 +#include +#endif +#include +#include +#include +#include +unsigned int kfi_getPid(const char *proc, unsigned int ppid) +{ + bool error=false; + unsigned int pid=0; + int mib[4]; + size_t len, + num; + struct kinfo_proc *p; + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_ALL; + sysctl(mib, 3, NULL, &len, NULL, 0); + p=(struct kinfo_proc*)malloc(len); + sysctl(mib, 3, p, &len, NULL, 0); + + for(num=0; num < len / sizeof(struct kinfo_proc) && !error; num++) + { + struct kinfo_proc proc_p; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; +#if __FreeBSD_version >= 500015 + mib[3] = p[num].ki_pid; +#elif defined(__DragonFly__) && __DragonFly_version >= 190000 + mib[3] = p[num].kp_pid; +#else + mib[3] = p[num].kp_proc.p_pid; +#endif + + len=sizeof(proc_p); + if(-1==sysctl(mib, 4, &proc_p, &len, NULL, 0) || !len) + break; + else + { +#if __FreeBSD_version >= 500015 + if(proc_p.ki_ppid==ppid && p[num].ki_comm && 0==strcmp(p[num].ki_comm, proc)) + if(pid) + error=true; + else + pid=p[num].ki_pid; +#elif defined (__DragonFly__) && __DragonFly_version >= 190000 + if(proc_p.kp_ppid==ppid && p[num].kp_comm && 0==strcmp(p[num].kp_comm, proc)) + if(pid) + error=true; + else + pid=p[num].kp_pid; +#else +#if defined(__DragonFly__) + if(proc_p.kp_eproc.e_ppid==ppid && p[num].kp_thread.td_comm && 0==strcmp(p[num].kp_thread.td_comm, proc)) +#else + if(proc_p.kp_eproc.e_ppid==ppid && p[num].kp_proc.p_comm && 0==strcmp(p[num].kp_proc.p_comm, proc)) +#endif + if(pid) + error=true; + else + pid=p[num].kp_proc.p_pid; +#endif + } + } + free(p); + + return error ? 0 : pid; +} + +#elif defined OS_Irix || defined OS_Solaris + +#include +#include +#include +#include +#include +#include +#include +#ifdef OS_Solaris + +#if (!defined(_LP64)) && (_FILE_OFFSET_BITS - 0 == 64) +#define PROCFS_FILE_OFFSET_BITS_HACK 1 +#undef _FILE_OFFSET_BITS +#else +#define PROCFS_FILE_OFFSET_BITS_HACK 0 +#endif + +#include + +#if (PROCFS_FILE_OFFSET_BITS_HACK - 0 == 1) +#define _FILE_OFFSET_BITS 64 +#endif + +#else +#include +#include +#endif +#include + +unsigned int kfi_getPid(const char *proc, pid_t ppid) +{ + DIR *procdir; + bool error=false; + pid_t pid=(pid_t)0; + + if(NULL!=(procdir=opendir(PROCDIR))) + { + struct dirent *de; + + rewinddir(procdir); + while((de=readdir(procdir)) && !error) + if('.'==de->d_name[0]) + continue; + else + { + int fd; + char buf[BUFSIZE]; +#ifdef OS_Solaris + psinfo_t psinfo; + + snprintf(buf, BUFSIZE - 1, "%s/%s/psinfo", PROCDIR, de->d_name); +#else + prpsinfo_t psinfo; + + sprintf(buf, PROCDIR"/pinfo/%ld", pid); +#endif + + if((fd=open(buf, O_RDONLY))<0) + continue; + +#ifdef OS_Solaris + if(sizeof(psinfo_t)!=read(fd, &psinfo, sizeof(psinfo_t))) +#else + if(ioctl(fd, PIOCPSINFO, &psinfo)<0) +#endif + { + close(fd); + continue; + } + close(fd); + + if(psinfo.pr_ppid==ppid && psinfo.pr_fname && 0==strcmp(psinfo.pr_fname, proc)) + if(pid) + error=true; + else + pid=psinfo.pr_pid; + } + closedir(procdir); + } + + return error ? 0 : pid; +} + +#elif defined OS_HPUX + +#include +#define MAX_PROCS 50 + +unsigned int kfi_getPid(const char *proc, unsigned int ppid) +{ + bool error=false; + unsigned int pid=0; + int i, + count, + idx=0; + struct pst_status pst[MAX_PROCS]; + + while((count=pstat_getproc(&pst[0], sizeof(pst[0]), MAX_PROCS, idx)) > 0 && !error) + { + for (i = 0; i +#define MAX_PROCS 50 + +unsigned int kfi_getPid(const char *proc, unsigned int ppid) +{ + bool error=false; + unsigned int pid=0; + int i, + count, + idx=0; + struct procsinfo pi[MAX_PROCS]; + + while((count=getprocs(&pi, sizeof(pi[0]), 0, 0, &pid, 1)) >0 && !error) + { + for (i = 0; i +#include +#include + +#define FOUND_PID 1 +#define FOUND_PPID 2 +#define FOUND_CMD 4 +#define FOUND_ALL (FOUND_PID+FOUND_PPID+FOUND_CMD) + +static int checkCmd(const char *proc, const char *cmd) +{ + int len=(int)strlen(cmd), + ch; + + if(len>1) + for(ch=len-2; ch>=0; --ch) + if('/'==cmd[ch]) + return strcmp(proc, &cmd[ch+1]); + + return strcmp(proc, cmd); +} + +unsigned int kfi_getPid(const char *proc, unsigned int ppid) +{ + bool error=false; + unsigned int pid=0; + static int pid_c=-1, + ppid_c=-1, + time_c=-1, + cmd_c=-1; + + char cmd[BUFSIZE+1]; + FILE *p; + + /* If this function has been run before, and we know the column positions, then we can grep for just our command */ + if(-1!=pid_c && -1!=ppid_c && -1!=time_c && -1!=cmd_c) + snprintf(cmd, BUFSIZE, "ps -eaf | grep %s", proc); + else + strcpy(cmd, "ps -eaf"); + + if(NULL!=(p=popen(cmd, "r"))) + { + char line[BUFSIZE+1]; + int c=0; + char *linep=NULL, + *token=NULL; + + /* Read 1st line to determine columns... */ + if((-1==pid_c || -1==ppid_c || -1==time_c || -1==cmd_c) && NULL!=fgets(line, BUFSIZE, p)) + { + for(linep=line; -1==pid_c || -1==ppid_c || -1==time_c || -1==cmd_c; linep=NULL) + if(NULL!=(token=strtok(linep, " \t\n"))) + { + if(0==strcmp("PID", token)) + pid_c=c; + else if(0==strcmp("PPID", token)) + ppid_c=c; + else if(NULL!=strstr("TIME", token)) + time_c=c; + else if(0==strcmp("COMMAND", token) || 0==strcmp("CMD", token)) + cmd_c=c; + c++; + } + else + break; + } + + /* If all column headings read, then look for details... */ + if(-1!=pid_c && -1!=ppid_c && -1!=time_c && -1!=cmd_c) + while(NULL!=fgets(line, BUFSIZE, p) && !error) + { + int found=0, + ps_pid=0, + offset=0; + + c=0; + for(linep=line; FOUND_ALL!=found; linep=NULL) + if(NULL!=(token=strtok(linep, " \t\n"))) + { + if(c==pid_c) + { + found|=FOUND_PID; + ps_pid=atoi(token); + } + else if(c==ppid_c) + { + if(((unsigned int)atoi(token))!=ppid) + break; + found|=FOUND_PPID; + } + else if(c==time_c) + offset=isdigit(token[0]) ? 0 : 1; + else if(c==(cmd_c+offset)) + { + if(0!=checkCmd(proc, token)) + break; + found|=FOUND_CMD; + } + c++; + } + else + break; + + if(FOUND_ALL==found) + { + if(pid) + error=true; + else + pid=ps_pid; + } + } + pclose(p); + } + + return error ? 0 : pid; +} + +#endif + +#ifdef TEST_GETPID +int main(int argc, char *argv[]) +{ + if(3==argc) + printf("PID %u\n", kfi_getPid(argv[1], atoi(argv[2]))); + else + printf("Usage: %s \n", argv[0]); + return 0; +} +#endif diff --git a/kcontrol/kfontinst/kfontinst/Main.cpp b/kcontrol/kfontinst/kfontinst/Main.cpp new file mode 100644 index 000000000..2da9a8997 --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/Main.cpp @@ -0,0 +1,335 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// File Name : Main.cpp +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 20/03/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "Misc.h" +#include "FontEngine.h" +#include "Fontmap.h" +#include "XConfig.h" +#include "kxftconfig.h" +#include +#include +#include + +// +// Bug#99335 Solaris 2.6 does not have getopt.h :-( +#ifdef HAVE_GETOPT_H +#include +#else +#include +#endif +#include + +#define KFI_XF86CFG "XF86Config" +#define KFI_XORGCFG "xorg.conf" + +static const char * getFile(const char *entry, const char **posibilities) +{ + if(KFI::Misc::fExists(entry)) + return entry; + else + { + int f; + + for(f=0; posibilities[f]; ++f) + if(KFI::Misc::fExists(posibilities[f])) + break; + + return posibilities[f]; + } +} + +static const char * constXConfigFiles[]= +{ + "/etc/X11/"KFI_XORGCFG, + "/etc/X11/"KFI_XORGCFG"-4", + "/etc/"KFI_XORGCFG, + "/usr/X11R6/etc/X11/"KFI_XORGCFG, + "/usr/X11R6/etc/X11/"KFI_XORGCFG"-4", + "/usr/X11R6/lib/X11/"KFI_XORGCFG, + "/usr/X11R6/lib/X11/"KFI_XORGCFG"-4", + + "/etc/X11/"KFI_XF86CFG"-4", + "/etc/X11/"KFI_XF86CFG, + "/etc/"KFI_XF86CFG"-4", + "/etc/"KFI_XF86CFG, + "/usr/X11R6/etc/X11/"KFI_XF86CFG"-4", + "/usr/X11R6/etc/X11/"KFI_XF86CFG, + "/usr/X11R6/lib/X11/"KFI_XF86CFG"-4", + "/usr/X11R6/lib/X11/"KFI_XF86CFG, + + NULL +}; + +static const char * constXfsConfigFiles[]= +{ + "/etc/X11/fs/config", + "/usr/openwin/lib/X11/fonts/fontserver.cfg", + NULL +}; + +KFI::CXConfig * getXCfg(bool root) +{ + if(root) + { + // + // Try to determine location for X and xfs config files... + // ...note on some systems (Solaris and HP-UX) only the xfs file will be found + bool xfs=false; + KFI::CXConfig *xcfg=NULL; + QString xConfigFile=getFile(QFile::encodeName(constXConfigFiles[0]), constXConfigFiles), + xfsConfigFile=getFile(QFile::encodeName(constXfsConfigFiles[0]), constXfsConfigFiles); + + // If found xfs, but not X - then assume that xfs is being used... + if(!xfsConfigFile.isEmpty() && xConfigFile.isEmpty()) + xfs=true; + else if(!xConfigFile.isEmpty()) // Read xConfig file to determine which one... + { + xcfg=new KFI::CXConfig(KFI::CXConfig::X11, xConfigFile); + + if(!xfsConfigFile.isEmpty() && xcfg->xfsInPath()) + { + delete xcfg; + xfs=true; + } + } + + // OK, if still set to X11 config, but this mentions fontconfig FPE, then delete - as we're not interested + // anymore... + if(xcfg && xcfg->fcInPath()) + delete xcfg; + + return xfs ? new KFI::CXConfig(KFI::CXConfig::XFS, xfsConfigFile) : xcfg; + } + + return NULL; +} + +static void usage(char *app) +{ + std::cerr << "Usage: " << app << " [OPTIONS]... [FOLDER]..." << std::endl + << std::endl + << " Helper application for KDE's fonts:/ ioslave." << std::endl + << std::endl +#ifdef HAVE_GETOPT_H + << " -x, --configure_x Configure FOLDER for regular x - i.e." << std::endl + << " create fonts.dir, fonts.scale and encodngs.dir" << std::endl + << std::endl + << " -g, --configure_gs Create Fontmap file. If run as root, then " << std::endl + << " no paramter is required as all fonts are " << std::endl + << " configured, and Fontmap placed in /etc/fonts" << std::endl + << " For non-root, fonts located in FOLDER are" << std::endl + << " configured, and Fontmap placed there." << std::endl + << std::endl + << " -f, --add_to_fc_cfg Add FOLDER to fontconfig config files." << std::endl + << std::endl + << " -a, --add_to_x_cfg Add FOLDER to X config files only when run as root.," << std::endl + << std::endl + << " -r, --refresh_x Refresh X." << std::endl + << std::endl + << " -s, --refresh_xfs Refresh Xfs." << std::endl +#else + << " -x Configure FOLDER for regular x - i.e." << std::endl + << " create fonts.dir, fonts.scale and encodngs.dir" << std::endl + << std::endl + << " -g Create Fontmap file. If run as root, then " << std::endl + << " no paramter is required as all fonts are " << std::endl + << " configured, and Fontmap placed in /etc/fonts" << std::endl + << " For non-root, fonts located in FOLDER are" << std::endl + << " configured, and Fontmap placed there." << std::endl + << std::endl + << " -f Add FOLDER to fontconfig config files." << std::endl + << std::endl + << " -a Add FOLDER to X config files only when run as root.," << std::endl + << std::endl + << " -r Refresh X." << std::endl + << std::endl + << " -s Refresh Xfs." << std::endl +#endif + << std::endl + << std::endl + << " (C) Craig Drummond, 2003, 2004." << std::endl + << std::endl; + + exit(-1); +} + +void refresh(bool refreshX, bool refreshXfs, bool root) +{ + if(refreshX) + KFI::CXConfig::refreshPaths(false); + if(refreshXfs && root) + KFI::CXConfig::refreshPaths(true); +} + +int main(int argc, char *argv[]) +{ +#ifdef HAVE_GETOPT_H + static struct option options[]= + { + { "configure_x", 0, 0, 'x' }, + { "configure_gs", 0, 0, 'g' }, + { "add_to_fc_cfg", 0, 0, 'f' }, + { "add_to_x_cfg", 0, 0, 'a' }, + { "refresh_x", 0, 0, 'r' }, + { "refresh_xfs", 0, 0, 's' }, + { 0, 0, 0, 0 } + }; +#endif + + int c=0, + rv=0; + bool doX=false, + doGs=false, + addToX=false, + addToFc=false, + refreshX=false, + refreshXfs=false, + root=KFI::Misc::root(); + +#ifdef HAVE_GETOPT_H + int optIndex; + while(-1!=(c=getopt_long(argc, argv, "xgfars", options, &optIndex))) +#else + while(-1!=(c=getopt(argc, argv, "xgfars"))) +#endif + switch(c) + { + case 'x': + doX=true; + break; + case 'g': + doGs=true; + break; + case 'f': + addToFc=true; + break; + case 'a': + addToX=true; + break; + case 'r': + refreshX=true; + break; + case 's': + refreshXfs=true; + break; + case '?': + usage(argv[0]); + break; + } + + int left=argc-optind; + bool folderRequired=doX || addToX || addToFc || (!root && doGs); + + if (left>1 || (0==left && folderRequired) || (!doX && !doGs && !addToX && !addToFc)) + usage(argv[0]); + else + { + QString folder; + + if(folderRequired) + { + folder=argv[optind]; + unsigned int len=folder.length(); + + // Remove quotes... + if( (folder[0]==QChar('\'') || folder[0]==QChar('\"')) && + (folder[len-1]==QChar('\'') || folder[len-1]==QChar('\"'))) + folder=folder.mid(1, len-2); + folder=KFI::Misc::dirSyntax(folder); + } + + if(folderRequired && !KFI::Misc::dExists(folder)) + { + std::cerr << "ERROR: " << QFile::encodeName(folder) << " does not exist!" << std::endl; + rv=-2; + } + else + { + if(!folder.isEmpty()) + { + if(0==rv && addToFc) + { + // + // Only add folder to fontconfig's config if its not already there... + FcStrList *list=FcConfigGetFontDirs(FcConfigGetCurrent()); + FcChar8 *dir; + bool found=false; + + while((dir=FcStrListNext(list))) + if(0==KFI::Misc::dirSyntax((const char *)dir).find(folder)) + found=true; + + if(!found) + { + KXftConfig *xft=new KXftConfig(KXftConfig::Dirs, root); + + xft->addDir(folder); + rv=xft->apply() ? 0 : -3; + delete xft; + } + } + + if(0==rv && addToX && root) + { + KFI::CXConfig *x=NULL; + + if((x=getXCfg(true))) + { + x->addPath(folder); + rv=x->writeConfig() ? 0 : -4; + delete x; + } + else + rv=-5; + } + } + + if(0==rv && (doX || doGs)) + { + if(0==rv && doX) + rv=KFI::CXConfig::configureDir(folder) ? 0 : -5; + + refresh(refreshX, refreshXfs, root); + + if(0==rv && doGs) + { + KFI::CFontEngine fe; + rv=KFI::Fontmap::create(root ? QString::null : folder, fe) ? 0 : -6; + } + } + else if(0==rv) + refresh(refreshX, refreshXfs, root); + } + } + + return rv; +} diff --git a/kcontrol/kfontinst/kfontinst/Makefile.am b/kcontrol/kfontinst/kfontinst/Makefile.am new file mode 100644 index 000000000..3cfcfa689 --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/Makefile.am @@ -0,0 +1,16 @@ +bin_PROGRAMS = kfontinst +kfontinst_SOURCES = \ +Main.cpp \ +FontEngine.cpp \ +Fontmap.cpp \ +GetPid.c \ +XConfig.cpp + +noinst_HEADERS= \ +FontEngine.h \ +Fontmap.h \ +XConfig.h + +kfontinst_LDADD = ../../fonts/libkxftconfig.la $(LIBFONTCONFIG_LIBS) $(LIBFREETYPE_LIBS) $(LIBZ) $(LIB_KIO) ../lib/libkfontinst.la +kfontinst_LDFLAGS = $(all_libraries) $(LIBFONTCONFIG_RPATH) $(LIBFREETYPE_RPATH) $(KDE_RPATH) +AM_CPPFLAGS= -DOS_$(UNAME) -I$(srcdir)/../lib -I$(srcdir)/../../fonts $(all_includes) $(LIBFREETYPE_CFLAGS) $(LIBFONTCONFIG_CFLAGS) diff --git a/kcontrol/kfontinst/kfontinst/XConfig.cpp b/kcontrol/kfontinst/kfontinst/XConfig.cpp new file mode 100644 index 000000000..490c8dfe5 --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/XConfig.cpp @@ -0,0 +1,760 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CXConfig +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 05/05/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "XConfig.h" +#include "FontEngine.h" +#include "kxftconfig.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined OS_Irix || defined OS_Solaris +extern "C" unsigned int kfi_getPid(const char *proc, pid_t ppid); +#else +extern "C" unsigned int kfi_getPid(const char *proc, unsigned int ppid); +#endif + +#define UNSCALED ":unscaled" + +namespace KFI +{ + +CXConfig::CXConfig(EType type, const QString &file) + : itsType(type), + itsFileName(file), + itsOk(false), + itsWritable(false) +{ + itsPaths.setAutoDelete(true); + readConfig(); +} + +bool CXConfig::configureDir(const QString &dir) +{ + // + // On systems without mkfontscale, the following will fail, so cant base + // return value upon that - hence only check return value of mkfontdir + Misc::doCmd("mkfontscale", QFile::encodeName(dir)); + return Misc::doCmd("mkfontdir", QFile::encodeName(dir)); +} + +bool CXConfig::readConfig() +{ + itsOk=false; + + switch(itsType) + { + case XFS: + itsOk=processXfs(true); + break; + case X11: + itsOk=processX11(true); + break; + } + + if(itsOk) + itsWritable=Misc::fExists(itsFileName) ? Misc::fWritable(itsFileName) + : Misc::dWritable(Misc::getDir(itsFileName)); + else + itsWritable=false; + + return itsOk; +} + +bool CXConfig::writeConfig() +{ + bool written=false; + + // + // Check if file has been written since we last read it. If so, then re-read + // and add any new paths that we've added... + if(Misc::fExists(itsFileName) && Misc::getTimeStamp(itsFileName)!=itsTime) + { + CXConfig newConfig(itsType, itsFileName); + + if(newConfig.ok()) + { + TPath *path; + + for(path=itsPaths.first(); path; path=itsPaths.next()) + if(TPath::DIR==path->type && !path->orig) + newConfig.addPath(path->dir, path->unscaled); + + written=newConfig.madeChanges() ? newConfig.writeConfig() : true; + } + } + else + switch(itsType) + { + case XFS: + written=processXfs(false); + break; + case X11: + written=processX11(false); + break; + } + if(written) + readConfig(); + + return written; +} + +bool CXConfig::madeChanges() +{ + if(itsOk && itsWritable) + { + TPath *path; + + for(path=itsPaths.first(); path; path=itsPaths.next()) + if(!path->orig) + return true; + } + + return false; +} + +void CXConfig::addPath(const QString &dir, bool unscaled) +{ + if(itsWritable) + { + QString ds(Misc::dirSyntax(dir)); + + if(Misc::dExists(dir)) + { + TPath *path=findPath(ds); + + if(NULL==path) + itsPaths.append(new TPath(ds, unscaled, TPath::DIR, false)); + } + } +} + +bool CXConfig::inPath(TPath::EType type) +{ + if(itsOk && X11==itsType) + { + TPath *path=NULL; + + for(path=itsPaths.first(); path; path=itsPaths.next()) + if(type==path->type) + return true; + } + + return false; +} + +void CXConfig::refreshPaths(bool xfs) +{ + if(xfs) + { + if(Misc::root()) + { + unsigned int xfsPid=kfi_getPid("xfs", 1); + + if(xfsPid) + { + QString pid; + + kill(xfsPid, SIGUSR1); + } + } + } + else + Misc::doCmd("xset", "fp", "rehash"); +} + +CXConfig::TPath * CXConfig::findPath(const QString &dir) +{ + TPath *path=NULL; + QString ds(Misc::dirSyntax(dir)); + + for(path=itsPaths.first(); path; path=itsPaths.next()) + if(path->dir==ds) + return path; + + return NULL; +} + +static void processPath(char *str, QString &path, bool &unscaled) +{ + char *unsc=NULL; + + unscaled=false; + + if(NULL!=(unsc=strstr(str, UNSCALED))) + { + *unsc='\0'; + unscaled=true; + } + + path=str; + + if(str[strlen(str)-1]!='/') + path+="/"; +} + +inline bool isWhitespace(char ch) +{ + return (' '==ch || '\t'==ch || '\n'==ch) ? true : false; +} + +static unsigned int commentChars(char *buffer) +{ + unsigned int num=0; + + if(buffer[0]=='#') + for(num=1; num=buffer; ch--) + if(*ch=='\n') + break; + else if(*ch=='#') + return true; + } + + return false; +} + +static char * locateSection(char *buffer, const char *section) +{ + const char *sectionMarker ="Section"; + const int sectionMarkerLen=7; + + char *s=NULL, + *buf=buffer; + + do + { + s=strstr(buf, sectionMarker); + + if(s) + { + bool com=commentedOut(buffer, s); + + buf=s+sectionMarkerLen; + if(com) + s=NULL; + else + { + // Skip any whitespace + for(s+=sectionMarkerLen; s && isWhitespace(*s); s++) + ; + + // Now check section type + if(s && s==strstr(s, section)) // If found, then again skip past whitespace + for(s+=strlen(section); s && isWhitespace(*s); s++) + ; + else + s=NULL; + } + } + else + break; + } + while(!s); + + return s; +} + +static const char *endSectionMarker ="EndSection"; +static const int endSectionMarkerLen=10; + +static char *locateEndSection(char *buffer) +{ + char *s=NULL, + *buf=buffer; + + do + { + s=strstr(buf, endSectionMarker); + + if(s) + { + bool com=commentedOut(buffer, s); + + buf=s+endSectionMarkerLen; + if(com) + s=NULL; + } + else + break; + } + while(!s); + + return s; +} + +static char * getItem(char **start, char **end, const char *key, unsigned int &size, bool remove, char *buffer) +{ + static const int constMaxItemLen = 1024; + static char item[constMaxItemLen+1]; + + unsigned int keyLen=strlen(key); + + char *s=NULL, + *buf=*start; + + do + { + s=strstr(buf, key); + + if(s && s<*end) + { + bool com=commentedOut(buf, s); + + buf=s+keyLen; + if(com) + s=NULL; + else + { + char *beg=s; + // Skip any whitespace + for(s+=keyLen; s && isWhitespace(*s); s++) + ; + + if(s && *s=='\"' && s<*end) + { + char *e=strchr(s+1, '\"'), + *nl=strchr(s+1, '\n'); + + if(e && e<*end && (!nl || nl>e) && e-s<=constMaxItemLen) + { + memcpy(item, s+1, (e-s)-1); + item[(e-s)-1]='\0'; + + if(remove) + { + for(beg--; beg>=buffer && *beg!='\n' && *beg !='\"'; beg--) + ; + if(!nl) + nl=e+1; + memmove(beg, nl, ((buffer+size)-nl)+1); + size-=nl-beg; + *end-=nl-beg; + } + else + *start=e+1; + + return item; + } + else + s=NULL; + } + else + s=NULL; + } + } + else + break; + } + while(!s); + + return NULL; +} + +bool CXConfig::processX11(bool read) +{ + std::ifstream x11(QFile::encodeName(itsFileName)); + bool ok=false; + + if(x11) + { + itsTime=Misc::getTimeStamp(itsFileName); + + bool closed=false; + + x11.seekg(0, std::ios::end); + unsigned int size=(std::streamoff) x11.tellg(); + + if(read) + itsPaths.clear(); + + if(size<65536) // Just incase... + { + char *buffer=new char [size+1]; + + if(buffer) + { + x11.seekg(0, std::ios::beg); + x11.read(buffer, size); + + if(x11.good()) + { + char *filesStart=NULL, + *filesEnd=NULL; + + closed=true; + x11.close(); + buffer[size]='\0'; + + if(NULL!=(filesStart=locateSection(buffer, "\"Files\"")) && NULL!=(filesEnd=locateEndSection(filesStart))) + { + char *pos=filesStart, + *item; + + while(NULL!=(item=getItem(&pos, &filesEnd, "FontPath", size, !read, buffer))) + if(read) // Then save paths... + { + QString path; + bool unscaled; + + processPath(item, path, unscaled); + + if(NULL==findPath(path)) + itsPaths.append(new TPath(path, unscaled, TPath::getType(path))); + } + + if(read) + ok=true; + else + { + Misc::createBackup(itsFileName); + + KSaveFile out(itsFileName); + FILE *fstream=out.fstream(); + + if(fstream) + { + char *from=buffer, + *modStart=NULL, + *modEnd=NULL; + bool foundFt=false; + TPath *path; + + // Check if "freetype" OR "xtt" is loaded for usage of TTF's + if(NULL!=(modStart=locateSection(buffer, "\"Module\"")) && NULL!=(modEnd=locateEndSection(modStart))) + { + pos=modStart; + + while(NULL!=(item=getItem(&pos, &modEnd, "Load", size, false, buffer)) && !foundFt) + if(0==strcmp(item, "freetype") || 0==strcmp(item, "xtt")) + foundFt=true; + } + + if(!foundFt && modStart && modEnd && modStarttype || Misc::dExists(path->dir)) + { + QCString cPath(QFile::encodeName(Misc::xDirSyntax(path->dir))); + + fputs(" FontPath \t\"", fstream); + fwrite(cPath.data(), 1, cPath.length(), fstream); + if(path->unscaled) + fputs(UNSCALED, fstream); + fputs("\"\n", fstream); + } + + fwrite(filesEnd, 1, endSectionMarkerLen, fstream); + from=filesEnd+endSectionMarkerLen; + + if(!foundFt && modStart && modEnd && modStart>filesStart) // Then write mod section last... + { + fwrite(from, 1, modEnd-from, fstream); + if(!foundFt) + fputs(" Load \"freetype\"\n", fstream); + fwrite(modEnd, 1, endSectionMarkerLen, fstream); + from=modEnd+endSectionMarkerLen; + } + if(((unsigned int)(from-buffer))kLen && isWhitespace(str[kLen]) || '\0'==str[kLen] || '#'==str[kLen] || '='==str[kLen]) + return true; + } + + return false; +} + +static char * getXfsPath(char *buffer, unsigned int &totalSize, unsigned int offsetSize) +{ + // Remove & return a path from the buffer + const unsigned int constMaxPathLen=8192; + + static char path[constMaxPathLen]; + bool found=false; + + if(offsetSize0 && j=size-(cat-buffer)) + formatError=true; + else + { + char *path; + + cat=&cat[i+1]; // skip equals sign + while(NULL!=(path=getXfsPath(cat, size, size-(cat-buffer)))) + if(read) + { + QString str; + bool unscaled; + processPath(path, str, unscaled); + + if(NULL==findPath(path)) + itsPaths.append(new TPath(str, unscaled)); + } + + if(!read) // then must be write... + { + Misc::createBackup(itsFileName); + + KSaveFile out(itsFileName); + FILE *fstream=out.fstream(); + + if(fstream) + { + bool first=true; + TPath *p=NULL; + + fwrite(buffer, 1, cat-buffer, fstream); + fputc(' ', fstream); + for(p=itsPaths.first(); p; p=itsPaths.next()) + if(Misc::dExists(p->dir)) + { + QCString cPath(QFile::encodeName(Misc::xDirSyntax(p->dir))); + + if(!first) + { + fputc(',', fstream); + fputc('\n', fstream); + } + fwrite(cPath.data(), 1, cPath.length(), fstream); + if(p->unscaled) + fputs(UNSCALED, fstream); + first=false; + } + fwrite(cat, 1, size-(cat-buffer), fstream); + ok=true; + } + } + else + ok=true; + + found=true; + } + } + } + } + } + while(NULL!=cat && !found && !formatError); + } + delete [] buffer; + } + } + if(!closed) + xfs.close(); + } + + return ok; +} + + +CXConfig::TPath::EType CXConfig::TPath::getType(const QString &d) +{ + QString str(d); + + str.replace(QRegExp("\\s*"), ""); + + return 0==str.find("unix/:") + ? FONT_SERVER + : "fontconfig"==str + ? FONT_CONFIG + : DIR; +} + +} diff --git a/kcontrol/kfontinst/kfontinst/XConfig.h b/kcontrol/kfontinst/kfontinst/XConfig.h new file mode 100644 index 000000000..5a8ed1624 --- /dev/null +++ b/kcontrol/kfontinst/kfontinst/XConfig.h @@ -0,0 +1,114 @@ +#ifndef __X_CONFIG_H__ +#define __X_CONFIG_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CXConfig +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 05/05/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +/////////////////////////////////////////////////////////////////////////////// + +#include "Misc.h" +#include +#include +#include +#include + +namespace KFI +{ + +class CFontEngine; + +class CXConfig +{ + public: + + struct TPath + { + enum EType + { + DIR, + FONT_SERVER, + FONT_CONFIG + }; + + TPath(const QString &d, bool u=false, EType t=DIR, bool o=true) + : dir(DIR==t ? Misc::dirSyntax(d) : d), unscaled(u), orig(o), type(t) {} + + static EType getType(const QString &d); + + QString dir; + bool unscaled, + orig; // Was dir in file when read? + EType type; + }; + + enum EType + { + XFS, + X11 + }; + + public: + + CXConfig(EType type, const QString &file); + + static bool configureDir(const QString &dir); + + bool ok() { return itsOk; } + bool writable() { return itsWritable; } + bool readConfig(); + bool writeConfig(); + bool madeChanges(); + void addPath(const QString &dir, bool unscaled=false); + bool inPath(TPath::EType type); + bool xfsInPath() { return inPath(TPath::FONT_SERVER); } + bool fcInPath() { return inPath(TPath::FONT_CONFIG); } + void refreshPaths() { refreshPaths(XFS==itsType); } + void restart(); + EType getType() { return itsType; } + + static void refreshPaths(bool xfs); + + private: + + bool processX11(bool read); + bool processXfs(bool read); + + TPath * findPath(const QString &dir); + + private: + + EType itsType; + QPtrList itsPaths; + QString itsFileName, + itsInsertPos; + bool itsOk, + itsWritable; + time_t itsTime; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kio/KioFonts.cpp b/kcontrol/kfontinst/kio/KioFonts.cpp new file mode 100644 index 000000000..e5bc2d6af --- /dev/null +++ b/kcontrol/kfontinst/kio/KioFonts.cpp @@ -0,0 +1,2534 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CKioFonts +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 05/03/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +/*************************************************************************** + + NOTE: Large sections of this code are copied from kio_file + -- can't just inherit from kio_file as kio_file uses "error(...); + return;" So there is no way to know if an error occured! + + ***************************************************************************/ + +#include "KioFonts.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "KfiConstants.h" +#include "FcEngine.h" +#include "Misc.h" +#include +#include +#include + +//#define KFI_FORCE_DEBUG_TO_STDERR + +#ifdef KFI_FORCE_DEBUG_TO_STDERR + +#include +QTextOStream ostr(stderr); +#define KFI_DBUG ostr << "[" << (int)(getpid()) << "] " + +#else + +#define KFI_DBUG kdDebug() << "[" << (int)(getpid()) << "] " + +#endif + +#define MAX_IPC_SIZE (1024*32) +#define TIMEOUT 2 // Time between last mod and writing files... +#define MAX_NEW_FONTS 50 // #fonts that can be installed before automatically configuring (related to above) +#define FC_CACHE_CMD "fc-cache" + +static const char * constMultipleExtension=".fonts.tar.gz"; // Fonts that have multiple files are returned as a .tar.gz! +static const int constMaxLastDestTime=5; +static const int constMaxFcCheckTime=10; + +extern "C" +{ + KDE_EXPORT int kdemain(int argc, char **argv); +} + +int kdemain(int argc, char **argv) +{ + if (argc != 4) + { + fprintf(stderr, "Usage: kio_" KFI_KIO_FONTS_PROTOCOL " protocol domain-socket1 domain-socket2\n"); + exit(-1); + } + + KLocale::setMainCatalogue(KFI_CATALOGUE); + + KInstance instance("kio_" KFI_KIO_FONTS_PROTOCOL); + KFI::CKioFonts slave(argv[2], argv[3]); + + slave.dispatchLoop(); + + return 0; +} + +namespace KFI +{ + +inline bool isSysFolder(const QString §) +{ + return i18n(KFI_KIO_FONTS_SYS)==sect || KFI_KIO_FONTS_SYS==sect; +} + +inline bool isUserFolder(const QString §) +{ + return i18n(KFI_KIO_FONTS_USER)==sect || KFI_KIO_FONTS_USER==sect; +} + +static QString removeMultipleExtension(const KURL &url) +{ + QString fname(url.fileName()); + int pos; + + if(-1!=(pos=fname.findRev(QString::fromLatin1(constMultipleExtension)))) + fname=fname.left(pos); + + return fname; +} + +static QString modifyName(const QString &fname) +{ + static const char constSymbols[]={ '-', ' ', ':', 0 }; + + QString rv(fname); + int dotPos=rv.findRev('.'); + + if(-1!=dotPos) + { + unsigned int rvLen=rv.length(); + + for(unsigned int i=dotPos+1; i-1) + size+=s; + } + + return size; +} + +static int getSize(QValueList &patterns) +{ + QValueList::Iterator it, + end=patterns.end(); + int size=0; + + for(it=patterns.begin(); it!=end; ++it) + size+=getFontSize(CFcEngine::getFcString(*it, FC_FILE)); + + return size; +} + +static void addAtom(KIO::UDSEntry &entry, unsigned int ID, long l, const QString &s=QString::null) +{ + KIO::UDSAtom atom; + atom.m_uds = ID; + atom.m_long = l; + atom.m_str = s; + entry.append(atom); +} + +static bool createFolderUDSEntry(KIO::UDSEntry &entry, const QString &name, const QString &path, bool sys) +{ + KFI_DBUG << "createFolderUDSEntry " << name << ' ' << path << ' ' << sys << ' ' << endl; + + KDE_struct_stat buff; + QCString cPath(QFile::encodeName(path)); + + entry.clear(); + + if(-1!=KDE_lstat(cPath, &buff)) + { + addAtom(entry, KIO::UDS_NAME, 0, name); + + if (S_ISLNK(buff.st_mode)) + { + KFI_DBUG << path << " is a link" << endl; + + char buffer2[1000]; + int n=readlink(cPath, buffer2, 1000); + if(n!= -1) + buffer2[n]='\0'; + + addAtom(entry, KIO::UDS_LINK_DEST, 0, QString::fromLocal8Bit(buffer2)); + + if(-1==KDE_stat(cPath, &buff)) + { + // It is a link pointing to nowhere + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFMT - 1); + addAtom(entry, KIO::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO); + addAtom(entry, KIO::UDS_SIZE, 0); + goto notype; + } + } + + addAtom(entry, KIO::UDS_FILE_TYPE, buff.st_mode&S_IFMT); + addAtom(entry, KIO::UDS_ACCESS, buff.st_mode&07777); + addAtom(entry, KIO::UDS_SIZE, buff.st_size); + + notype: + addAtom(entry, KIO::UDS_MODIFICATION_TIME, buff.st_mtime); + + struct passwd *user = getpwuid(buff.st_uid); + addAtom(entry, KIO::UDS_USER, 0, user ? user->pw_name : QString::number(buff.st_uid).latin1()); + + struct group *grp = getgrgid(buff.st_gid); + addAtom(entry, KIO::UDS_GROUP, 0, grp ? grp->gr_name : QString::number(buff.st_gid).latin1()); + + addAtom(entry, KIO::UDS_ACCESS_TIME, buff.st_atime); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, sys + ? KFI_KIO_FONTS_PROTOCOL"/system-folder" + : KFI_KIO_FONTS_PROTOCOL"/folder"); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); + QString url(KFI_KIO_FONTS_PROTOCOL+QString::fromLatin1(":/")); + return true; + } + else if (sys && !Misc::root()) // Default system fonts folder does not actually exist yet! + { + KFI_DBUG << "Default system folder (" << path << ") does not yet exist, so create dummy entry" << endl; + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR); + addAtom(entry, KIO::UDS_ACCESS, 0744); + addAtom(entry, KIO::UDS_USER, 0, "root"); + addAtom(entry, KIO::UDS_GROUP, 0, "root"); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, KFI_KIO_FONTS_PROTOCOL"/system-folder"); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); + + return true; + } + + + return false; +} + +static bool createFontUDSEntry(KIO::UDSEntry &entry, const QString &name, QValueList &patterns, bool sys) +{ + KFI_DBUG << "createFontUDSEntry " << name << ' ' << patterns.count() << endl; + + bool multiple=true; + + if(1==patterns.count()) // Only one font file, but are there any .pfm or .afm files? + { + KURL::List urls; + + Misc::getAssociatedUrls(KURL(CFcEngine::getFcString(patterns.first(), FC_FILE)), urls); + + if(0==urls.count()) + multiple=false; + } + + // + // In case of mixed bitmap/scalable - prefer scalable + QValueList sortedPatterns; + QValueList::Iterator it, + end(patterns.end()); + FcBool b=FcFalse; + + for(it=patterns.begin(); it!=end; ++it) + if(FcResultMatch==FcPatternGetBool(*it, FC_SCALABLE, 0, &b) && b) + sortedPatterns.prepend(*it); + else + sortedPatterns.append(*it); + + end=sortedPatterns.end(); + entry.clear(); + addAtom(entry, KIO::UDS_SIZE, getSize(patterns)); + + for(it=sortedPatterns.begin(); it!=end; ++it) + { + QString path(CFcEngine::getFcString(*it, FC_FILE)); + QCString cPath(QFile::encodeName(path)); + KDE_struct_stat buff; + + if(-1!=KDE_lstat(cPath, &buff)) + { + addAtom(entry, KIO::UDS_NAME, 0, name); + + if (S_ISLNK(buff.st_mode)) + { + KFI_DBUG << path << " is a link" << endl; + + char buffer2[1000]; + int n=readlink(cPath, buffer2, 1000); + + if(n!= -1) + buffer2[n]='\0'; + + addAtom(entry, KIO::UDS_LINK_DEST, 0, QString::fromLocal8Bit(buffer2)); + + if(-1==KDE_stat(cPath, &buff)) + { + // It is a link pointing to nowhere + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFMT - 1); + addAtom(entry, KIO::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO); + goto notype; + } + } + + addAtom(entry, KIO::UDS_FILE_TYPE, buff.st_mode&S_IFMT); + addAtom(entry, KIO::UDS_ACCESS, buff.st_mode&07777); + + notype: + addAtom(entry, KIO::UDS_MODIFICATION_TIME, buff.st_mtime); + + struct passwd *user = getpwuid(buff.st_uid); + addAtom(entry, KIO::UDS_USER, 0, user ? user->pw_name : QString::number(buff.st_uid).latin1()); + + struct group *grp = getgrgid(buff.st_gid); + addAtom(entry, KIO::UDS_GROUP, 0, grp ? grp->gr_name : QString::number(buff.st_gid).latin1()); + + addAtom(entry, KIO::UDS_ACCESS_TIME, buff.st_atime); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, KMimeType::findByPath(path, 0, true)->name()); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); + + QString url(KFI_KIO_FONTS_PROTOCOL+QString::fromLatin1(":/")); + + if(!Misc::root()) + { + url+=sys ? i18n(KFI_KIO_FONTS_SYS) : i18n(KFI_KIO_FONTS_USER); + url+=QString::fromLatin1("/"); + } + if(multiple) + url+=name+QString::fromLatin1(constMultipleExtension); + else + url+=Misc::getFile(path); + addAtom(entry, KIO::UDS_URL, 0, url); + return true; // This file was OK, so use its values... + } + } + return false; +} + +enum EUrlStatus +{ + BAD_URL, + URL_OK, + REDIRECT_URL +}; + +static KURL getRedirect(const KURL &u) +{ + // Go from fonts:/System to fonts:/ + + KURL redirect(u); + QString path(u.path()), + sect(CKioFonts::getSect(path)); + + path.remove(sect); + path.replace("//", "/"); + redirect.setPath(path); + + KFI_DBUG << "Redirect from " << u.path() << " to " << redirect.path() << endl; + return redirect; +} + +static bool nonRootSys(const KURL &u) +{ + return !Misc::root() && isSysFolder(CKioFonts::getSect(u.path())); +} + +static QString getFontFolder(const QString &defaultDir, const QString &root, QStringList &dirs) +{ + if(dirs.contains(defaultDir)) + return defaultDir; + else + { + QStringList::Iterator it, + end=dirs.end(); + bool found=false; + + for(it=dirs.begin(); it!=end && !found; ++it) + if(0==(*it).find(root)) + return *it; + } + + return QString::null; +} + +static bool writeAll(int fd, const char *buf, size_t len) +{ + while(len>0) + { + ssize_t written=write(fd, buf, len); + if (written<0 && EINTR!=errno) + return false; + buf+=written; + len-=written; + } + return true; +} + +static bool checkExt(const char *fname, const char *ext) +{ + unsigned int len=strlen(fname); + + return len>4 ? (fname[len-4]=='.' && tolower(fname[len-3])==ext[0] && tolower(fname[len-2])==ext[1] && + tolower(fname[len-1])==ext[2]) + : false; +} + +static bool isAAfm(const QString &fname) +{ + if(checkExt(QFile::encodeName(fname), "afm")) // CPD? Is this a necessary check? + { + QFile file(fname); + + if(file.open(IO_ReadOnly)) + { + QTextStream stream(&file); + QString line; + + for(int lc=0; lc<30 && !stream.atEnd(); ++lc) + { + line=stream.readLine(); + + if(line.contains("StartFontMetrics")) + { + file.close(); + return true; + } + } + + file.close(); + } + } + + return false; +} + +static bool isAPfm(const QString &fname) +{ + bool ok=false; + + // I know extension checking is bad, but Ghostscript's pf2afm requires the pfm file to + // have the .pfm extension... + if(checkExt(QFile::encodeName(fname), "pfm")) + { + // + // OK, the extension matches, so perform a little contents checking... + FILE *f=fopen(QFile::encodeName(fname).data(), "r"); + + if(f) + { + static const unsigned long constCopyrightLen = 60; + static const unsigned long constTypeToExt = 49; + static const unsigned long constExtToFname = 20; + static const unsigned long constExtLen = 30; + static const unsigned long constFontnameMin = 75; + static const unsigned long constFontnameMax = 512; + + unsigned short version=0, + type=0, + extlen=0; + unsigned long length=0, + fontname=0, + fLength=0; + + fseek(f, 0, SEEK_END); + fLength=ftell(f); + fseek(f, 0, SEEK_SET); + + if(2==fread(&version, 1, 2, f) && // Read version + 4==fread(&length, 1, 4, f) && // length... + length==fLength && + 0==fseek(f, constCopyrightLen, SEEK_CUR) && // Skip copyright notice... + 2==fread(&type, 1, 2, f) && + 0==fseek(f, constTypeToExt, SEEK_CUR) && + 2==fread(&extlen, 1, 2, f) && + extlen==constExtLen && + 0==fseek(f, constExtToFname, SEEK_CUR) && + 4==fread(&fontname, 1, 4, f) && + fontname>constFontnameMin && fontname paths; + + bool operator==(const FontList &f) const { return f.name==name; } +}; + +// +// This function returns a set of maping of from -> to for copy/move operations +static bool getFontList(const QStringList &files, QMap &map) +{ + // + // First of all create a list of font files, and their paths + QStringList::ConstIterator it=files.begin(), + end=files.end(); + QValueList list; + + for(;it!=end; ++it) + { + QString name(Misc::getFile(*it)), + path(Misc::getDir(*it)); + QValueList::Iterator entry=list.find(FontList(name)); + + if(entry!=list.end()) + { + if(!(*entry).paths.contains(path)) + (*entry).paths.append(path); + } + else + list.append(FontList(name, path)); + } + + QValueList::Iterator fIt(list.begin()), + fEnd(list.end()); + + for(; fIt!=fEnd; ++fIt) + { + QValueList::Iterator pBegin((*fIt).paths.begin()), + pIt(++pBegin), + pEnd((*fIt).paths.end()); + --pBegin; + + if((*fIt).paths.count()>1) + { + // There's more than 1 file with the same name, but in a different locations + // therefore, take the unique part of the path, and replace / with _ + // e.g. + // /usr/X11R6/lib/X11/fonts/75dpi/times.pcf.gz + // /usr/X11R6/lib/X11/fonts/100dpi/times.pcf.gz + // + // Will produce: + // 75dpi_times.pcf.gz + // 100dpi_times.pcf.gz + unsigned int beginLen((*pBegin).orig.length()); + + for(; pIt!=pEnd; ++pIt) + { + unsigned int len=QMIN((*pIt).orig.length(), beginLen); + + for(unsigned int i=0; i0) + for(int path=0; path >::Iterator it=itsFolders[folder].fontMap.begin(), + end=itsFolders[folder].fontMap.end(); + + for ( ; it != end; ++it) + { + entry.clear(); + if(createFontUDSEntry(entry, it.key(), it.data(), FOLDER_SYS==folder)) + listEntry(entry, false); + } + } + } + else + { + size=2; + totalSize(size); + createFolderUDSEntry(entry, i18n(KFI_KIO_FONTS_USER), itsFolders[FOLDER_USER].location, false); + listEntry(entry, false); + createFolderUDSEntry(entry, i18n(KFI_KIO_FONTS_SYS), itsFolders[FOLDER_SYS].location, true); + listEntry(entry, false); + } + + listEntry(size ? entry : KIO::UDSEntry(), true); + finished(); + } + + KFI_DBUG << "listDir - finished!" << endl; +} + +void CKioFonts::stat(const KURL &url) +{ + KFI_DBUG << "stat " << url.prettyURL() << endl; + + if(updateFontList() && checkUrl(url, true)) + { + QString path(url.path(-1)); + + if(path.isEmpty()) + { + error(KIO::ERR_COULD_NOT_STAT, url.prettyURL()); + return; + } + + QStringList pathList(QStringList::split('/', path, false)); + KIO::UDSEntry entry; + bool err=false; + + switch(pathList.count()) + { + case 0: + err=!createFolderUDSEntry(entry, i18n("Fonts"), itsFolders[itsRoot ? FOLDER_SYS : FOLDER_USER].location, false); + break; + case 1: + if(itsRoot) + err=!createStatEntry(entry, url, FOLDER_SYS); + else + if(isUserFolder(pathList[0])) + err=!createFolderUDSEntry(entry, i18n(KFI_KIO_FONTS_USER), itsFolders[FOLDER_USER].location, false); + else if(isSysFolder(pathList[0])) + err=!createFolderUDSEntry(entry, i18n(KFI_KIO_FONTS_SYS), itsFolders[FOLDER_USER].location, true); + else + { + error(KIO::ERR_SLAVE_DEFINED, + i18n("Please specify \"%1\" or \"%2\".").arg(i18n(KFI_KIO_FONTS_USER)).arg(i18n(KFI_KIO_FONTS_SYS))); + return; + } + break; + default: + err=!createStatEntry(entry, url, getFolder(url)); + } + + if(err) + { + error(KIO::ERR_DOES_NOT_EXIST, url.prettyURL()); + return; + } + + statEntry(entry); + finished(); + } +} + +bool CKioFonts::createStatEntry(KIO::UDSEntry &entry, const KURL &url, EFolder folder) +{ + KFI_DBUG << "createStatEntry " << url.path() << endl; + + QMap >::Iterator it=getMap(url); + + if(it!=itsFolders[folder].fontMap.end()) + return createFontUDSEntry(entry, it.key(), it.data(), FOLDER_SYS==folder); + return false; +} + +void CKioFonts::get(const KURL &url) +{ + KFI_DBUG << "get " << url.path() << " query:" << url.query() << endl; + + bool thumb="1"==metaData("thumbnail"); + QStringList srcFiles; + + if(updateFontList() && checkUrl(url) && getSourceFiles(url, srcFiles)) // Any error will be logged in getSourceFiles + { + // + // The thumbnail job always donwloads non-local files to /tmp/... and passes this file name to the thumbnail + // creator. However, in the case of fonts which are split among many files, this wont work. Therefore, when the + // thumbnail code asks for the font to donwload, just return the URL used. This way the font-thumbnail creator can + // read this and just ask Xft/fontconfig for the font data. + if(thumb) + { + QByteArray array; + QTextOStream stream(array); + + emit mimeType("text/plain"); + + KFI_DBUG << "hasMetaData(\"thumbnail\"), so return: " << url.prettyURL() << endl; + + stream << url.prettyURL(); + totalSize(array.size()); + data(array); + processedSize(array.size()); + data(QByteArray()); + processedSize(array.size()); + finished(); + return; + } + + QString realPath, + useMime; + KDE_struct_stat buff; + bool multiple=false; + + if(1==srcFiles.count()) + realPath=srcFiles.first(); + else // Font is made up of multiple files - so create .tar.gz of them all! + { + KTempFile tmpFile; + KTar tar(tmpFile.name(), "application/x-gzip"); + + tmpFile.setAutoDelete(false); + realPath=tmpFile.name(); + + if(tar.open(IO_WriteOnly)) + { + QMap map; + + getFontList(srcFiles, map); + + QMap::Iterator fIt(map.begin()), + fEnd(map.end()); + + // + // Iterate through created list, and add to tar archive + for(; fIt!=fEnd; ++fIt) + tar.addLocalFile(fIt.key(), fIt.data()); + + multiple=true; + tar.close(); + } + } + + QCString realPathC(QFile::encodeName(realPath)); + KFI_DBUG << "real: " << realPathC << endl; + + if (-2==KDE_stat(realPathC.data(), &buff)) + error(EACCES==errno ? KIO::ERR_ACCESS_DENIED : KIO::ERR_DOES_NOT_EXIST, url.prettyURL()); + else if (S_ISDIR(buff.st_mode)) + error(KIO::ERR_IS_DIRECTORY, url.prettyURL()); + else if (!S_ISREG(buff.st_mode)) + error(KIO::ERR_CANNOT_OPEN_FOR_READING, url.prettyURL()); + else + { + int fd = KDE_open(realPathC.data(), O_RDONLY); + + if (fd < 0) + error(KIO::ERR_CANNOT_OPEN_FOR_READING, url.prettyURL()); + else + { + // Determine the mimetype of the file to be retrieved, and emit it. + // This is mandatory in all slaves (for KRun/BrowserRun to work). + emit mimeType(useMime.isEmpty() ? KMimeType::findByPath(realPathC, buff.st_mode, true)->name() : useMime); + + totalSize(buff.st_size); + + KIO::filesize_t processed=0; + char buffer[MAX_IPC_SIZE]; + QByteArray array; + + while(1) + { + int n=::read(fd, buffer, MAX_IPC_SIZE); + if (-1==n) + { + if (errno == EINTR) + continue; + error(KIO::ERR_COULD_NOT_READ, url.prettyURL()); + close(fd); + if(multiple) + ::unlink(realPathC); + return; + } + if (0==n) + break; // Finished + + array.setRawData(buffer, n); + data(array); + array.resetRawData(buffer, n); + + processed+=n; + processedSize(processed); + } + + data(QByteArray()); + close(fd); + + processedSize(buff.st_size); + finished(); + } + } + if(multiple) + ::unlink(realPathC); + } +} + +void CKioFonts::put(const KURL &u, int mode, bool overwrite, bool resume) +{ + KFI_DBUG << "put " << u.path() << endl; + + if(isHidden(u)) + { + error(KIO::ERR_WRITE_ACCESS_DENIED, u.prettyURL()); + return; + } + + // updateFontList(); // CPD: dont update font list upon a put - is too slow. Just stat on filename! + + //checkUrl(u) // CPD: Don't need to check URL, as the call to "confirmUrl()" below will sort out any probs! + + KURL url(u); + bool changed=confirmUrl(url), + nrs=nonRootSys(url); + EFolder destFolder(getFolder(url)); + QString dest=itsFolders[destFolder].location+modifyName(url.fileName()), + passwd; + QCString destC=QFile::encodeName(dest); + KDE_struct_stat buffDest; + bool destExists=(KDE_lstat(destC.data(), &buffDest)!= -1); + + if (destExists && !overwrite && !resume) + { + error(KIO::ERR_FILE_ALREADY_EXIST, url.prettyURL()); + return; + } + + if(nrs) // Need to check can get root passwd before start download... + { + passwd=getRootPasswd(); + + if(passwd.isEmpty()) + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\" folder.").arg(i18n(KFI_KIO_FONTS_SYS))); + return; + } + } + + // + // As we don't get passed a mime-type the following needs to happen: + // + // 1. Download to a temporary file + // 2. Check with FreeType that the file is a font, or that it is + // an AFM or PFM file + // 3. If its OK, then get the fonts "name" from + KTempFile tmpFile; + QCString tmpFileC(QFile::encodeName(tmpFile.name())); + + tmpFile.setAutoDelete(true); + + if(putReal(tmpFile.name(), tmpFileC, destExists, mode, resume)) + { + if(!checkFile(tmpFile.name())) // error logged in checkFile + return; + + if(nrs) // Ask root to copy the font... + { + QCString cmd; + + if(!Misc::dExists(itsFolders[destFolder].location)) + { + cmd+="mkdir "; + cmd+=QFile::encodeName(KProcess::quote(itsFolders[destFolder].location)); + cmd+=" && chmod 0755 "; + cmd+=QFile::encodeName(KProcess::quote(itsFolders[destFolder].location)); + cmd+=" && "; + } + cmd+="cp -f "; + cmd+=QFile::encodeName(KProcess::quote(tmpFileC)); + cmd+=" "; + cmd+=QFile::encodeName(KProcess::quote(destC)); + cmd+=" && chmod 0644 "; + cmd+=destC; + + if(!itsCanStorePasswd) + createRootRefreshCmd(cmd); + + // Get root to move this to fonts folder... + if(doRootCmd(cmd, passwd)) + { + modified(FOLDER_SYS); + createAfm(dest, true, passwd); + } + else + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\" folder.").arg(i18n(KFI_KIO_FONTS_SYS))); + return; + } + } + else // Move it to our font folder... + { + tmpFile.setAutoDelete(false); + if(Misc::doCmd("mv", "-f", tmpFileC, destC)) + { + ::chmod(destC.data(), Misc::FILE_PERMS); + modified(FOLDER_USER); + createAfm(dest); + } + else + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\" folder.").arg(i18n(KFI_KIO_FONTS_USER))); + return; + } + } + + finished(); + + if(changed) + itsLastDestTime=time(NULL); + } +} + +bool CKioFonts::putReal(const QString &destOrig, const QCString &destOrigC, bool origExists, + int mode, bool resume) +{ + bool markPartial=config()->readBoolEntry("MarkPartial", true); + QString dest; + + if (markPartial) + { + QString destPart(destOrig+QString::fromLatin1(".part")); + QCString destPartC(QFile::encodeName(destPart)); + + dest = destPart; + + KDE_struct_stat buffPart; + bool partExists=(-1!=KDE_stat(destPartC.data(), &buffPart)); + + if (partExists && !resume && buffPart.st_size>0) + { + // Maybe we can use this partial file for resuming + // Tell about the size we have, and the app will tell us + // if it's ok to resume or not. + resume=canResume(buffPart.st_size); + + if (!resume) + if (!::remove(destPartC.data())) + partExists = false; + else + { + error(KIO::ERR_CANNOT_DELETE_PARTIAL, destPart); + return false; + } + } + } + else + { + dest = destOrig; + if (origExists && !resume) + ::remove(destOrigC.data()); + // Catch errors when we try to open the file. + } + + QCString destC(QFile::encodeName(dest)); + + int fd; + + if (resume) + { + fd = KDE_open(destC.data(), O_RDWR); // append if resuming + KDE_lseek(fd, 0, SEEK_END); // Seek to end + } + else + { + // WABA: Make sure that we keep writing permissions ourselves, + // otherwise we can be in for a surprise on NFS. + fd = KDE_open(destC.data(), O_CREAT | O_TRUNC | O_WRONLY, -1==mode ? 0666 : mode | S_IWUSR | S_IRUSR); + } + + if (fd < 0) + { + error(EACCES==errno ? KIO::ERR_WRITE_ACCESS_DENIED : KIO::ERR_CANNOT_OPEN_FOR_WRITING, dest); + return false; + } + + int result; + // Loop until we got 0 (end of data) + do + { + QByteArray buffer; + + dataReq(); // Request for data + result = readData(buffer); + if(result > 0 && !writeAll(fd, buffer.data(), buffer.size())) + { + if(ENOSPC==errno) // disk full + { + error(KIO::ERR_DISK_FULL, destOrig); + result = -2; // means: remove dest file + } + else + { + error(KIO::ERR_COULD_NOT_WRITE, destOrig); + result = -1; + } + } + } + while(result>0); + + if (result<0) + { + close(fd); + if (-1==result) + ::remove(destC.data()); + else if (markPartial) + { + KDE_struct_stat buff; + + if ((-1==KDE_stat(destC.data(), &buff)) || + (buff.st_sizereadNumEntry("MinimumKeepSize", DEFAULT_MINIMUM_KEEP_SIZE))) + ::remove(destC.data()); + } + ::exit(255); + } + + if (-1==fd) // we got nothing to write out, so we never opened the file + { + finished(); + return false; + } + + if (close(fd)) + { + error(KIO::ERR_COULD_NOT_WRITE, destOrig); + return false; + } + + // after full download rename the file back to original name + if (markPartial && ::rename(destC.data(), destOrigC.data())) + { + error(KIO::ERR_CANNOT_RENAME_PARTIAL, destOrig); + return false; + } + + return true; +} + +void CKioFonts::copy(const KURL &src, const KURL &d, int mode, bool overwrite) +{ + // + // Support: + // Copying to fonts:/ + // Copying from fonts:/ and file:/ + // + KFI_DBUG << "copy " << src.prettyURL() << " - " << d.prettyURL() << endl; + + if(isHidden(d)) + { + error(KIO::ERR_WRITE_ACCESS_DENIED, d.prettyURL()); + return; + } + + bool fromFonts=KFI_KIO_FONTS_PROTOCOL==src.protocol(); + + if((!fromFonts || updateFontList()) // CPD: dont update font list upon a copy from file - is too slow. Just stat on filename! + && checkUrl(src) && checkAllowed(src)) + { + //checkUrl(u) // CPD as per comment in ::put() + + QStringList srcFiles; + + if(getSourceFiles(src, srcFiles)) // Any error will be logged in getSourceFiles + { + KURL dest(d); + bool changed=confirmUrl(dest); + EFolder destFolder(getFolder(dest)); + QMap map; + + if(!fromFonts) + map[src.path()]=src.fileName(); + + // As above, if copying from file, then only stat on dest filename, but if from fonts to fonts need to + // get the list of possible source files, etc. + if(fromFonts ? confirmMultiple(src, srcFiles, FOLDER_SYS==destFolder ? FOLDER_USER : FOLDER_SYS, OP_COPY) && + getFontList(srcFiles, map) && + checkDestFiles(src, map, dest, destFolder, overwrite) + : checkDestFile(src, dest, destFolder, overwrite) ) + { + if(nonRootSys(dest)) + { + QCString cmd; + int size=0; + + if(!Misc::dExists(itsFolders[destFolder].location)) + { + cmd+="mkdir "; + cmd+=QFile::encodeName(KProcess::quote(itsFolders[destFolder].location)); + cmd+=" && chmod 0755 "; + cmd+=QFile::encodeName(KProcess::quote(itsFolders[destFolder].location)); + cmd+=" && "; + } + + QMap::Iterator fIt(map.begin()), + fEnd(map.end()); + + for(; fIt!=fEnd; ++fIt) + { + cmd+="cp -f "; + cmd+=QFile::encodeName(KProcess::quote(fIt.key())); + cmd+=" "; + cmd+=QFile::encodeName(KProcess::quote(itsFolders[destFolder].location+modifyName(fIt.data()))); + int s=getSize(QFile::encodeName(fIt.key())); + if(s>0) + size+=s; + if(++fIt!=fEnd) + cmd+=" && "; + --fIt; + } + + if(!itsCanStorePasswd) + createRootRefreshCmd(cmd); + + totalSize(size); + + QString passwd=getRootPasswd(); + + if(doRootCmd(cmd, passwd)) + { + modified(destFolder); + processedSize(size); + if(src.isLocalFile() && 1==srcFiles.count()) + createAfm(itsFolders[destFolder].location+modifyName(map.begin().data()), true, passwd); + } + else + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\" folder.").arg(i18n(KFI_KIO_FONTS_SYS))); + return; + } + } + else + { + QMap::Iterator fIt(map.begin()), + fEnd(map.end()); + + for(; fIt!=fEnd; ++fIt) + { + QCString realSrc(QFile::encodeName(fIt.key())), + realDest(QFile::encodeName(itsFolders[destFolder].location+modifyName(fIt.data()))); + KDE_struct_stat buffSrc; + + if(-1==KDE_stat(realSrc.data(), &buffSrc)) + { + error(EACCES==errno ? KIO::ERR_ACCESS_DENIED : KIO::ERR_DOES_NOT_EXIST, src.prettyURL()); + return; + } + + int srcFd=KDE_open(realSrc.data(), O_RDONLY); + + if (srcFd<0) + { + error(KIO::ERR_CANNOT_OPEN_FOR_READING, src.prettyURL()); + return; + } + + if(!Misc::dExists(itsFolders[destFolder].location)) + Misc::createDir(itsFolders[destFolder].location); + + // WABA: Make sure that we keep writing permissions ourselves, + // otherwise we can be in for a surprise on NFS. + int destFd=KDE_open(realDest.data(), O_CREAT | O_TRUNC | O_WRONLY, -1==mode ? 0666 : mode | S_IWUSR); + + if (destFd<0) + { + error(EACCES==errno ? KIO::ERR_WRITE_ACCESS_DENIED : KIO::ERR_CANNOT_OPEN_FOR_WRITING, dest.prettyURL()); + close(srcFd); + return; + } + + totalSize(buffSrc.st_size); + + KIO::filesize_t processed = 0; + char buffer[MAX_IPC_SIZE]; + QByteArray array; + + while(1) + { + int n=::read(srcFd, buffer, MAX_IPC_SIZE); + + if(-1==n) + { + if (errno == EINTR) + continue; + error(KIO::ERR_COULD_NOT_READ, src.prettyURL()); + close(srcFd); + close(destFd); + return; + } + if(0==n) + break; // Finished + + if(!writeAll(destFd, buffer, n)) + { + close(srcFd); + close(destFd); + if (ENOSPC==errno) // disk full + { + error(KIO::ERR_DISK_FULL, dest.prettyURL()); + remove(realDest.data()); + } + else + error(KIO::ERR_COULD_NOT_WRITE, dest.prettyURL()); + return; + } + + processed += n; + processedSize(processed); + } + + close(srcFd); + + if(close(destFd)) + { + error(KIO::ERR_COULD_NOT_WRITE, dest.prettyURL()); + return; + } + + ::chmod(realDest.data(), Misc::FILE_PERMS); + + // copy access and modification time + struct utimbuf ut; + + ut.actime = buffSrc.st_atime; + ut.modtime = buffSrc.st_mtime; + ::utime(realDest.data(), &ut); + + processedSize(buffSrc.st_size); + modified(destFolder); + } + + if(src.isLocalFile() && 1==srcFiles.count()) + createAfm(itsFolders[destFolder].location+modifyName(map.begin().data())); + } + + finished(); + + if(changed) + itsLastDestTime=time(NULL); + } + } + } +} + +void CKioFonts::rename(const KURL &src, const KURL &d, bool overwrite) +{ + KFI_DBUG << "rename " << src.prettyURL() << " - " << d.prettyURL() << ", " << overwrite << endl; + + if(src.directory()==d.directory()) + error(KIO::ERR_SLAVE_DEFINED, i18n("Sorry, fonts cannot be renamed.")); + else if(itsRoot) // Should never happen... + error(KIO::ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(mProtocol, KIO::CMD_RENAME)); + else + { + // + // Can't rename from/to file:/ -> therefore rename can only be from fonts:/System to fonts:/Personal, + // or vice versa. + + QStringList srcFiles; + + if(getSourceFiles(src, srcFiles)) // Any error will be logged in getSourceFiles + { + KURL dest(d); + bool changed=confirmUrl(dest); + EFolder destFolder(getFolder(dest)); + QMap map; + + if(confirmMultiple(src, srcFiles, FOLDER_SYS==destFolder ? FOLDER_USER : FOLDER_SYS, OP_MOVE) && + getFontList(srcFiles, map) && + checkDestFiles(src, map, dest, destFolder, overwrite)) + { + QMap::Iterator fIt(map.begin()), + fEnd(map.end()); + bool askPasswd=true, + toSys=FOLDER_SYS==destFolder; + QCString userId, + groupId, + destDir(QFile::encodeName(KProcess::quote(itsFolders[destFolder].location))); + + userId.setNum(toSys ? 0 : getuid()); + groupId.setNum(toSys ? 0 : getgid()); + + for(; fIt!=fEnd; ++fIt) + { + QCString cmd, + destFile(QFile::encodeName(KProcess::quote(itsFolders[destFolder].location+fIt.data()))); + + if(toSys && !Misc::dExists(itsFolders[destFolder].location)) + { + cmd+="mkdir "; + cmd+=destDir; + cmd+=" && "; + } + + cmd+="mv -f "; + cmd+=QFile::encodeName(KProcess::quote(fIt.key())); + cmd+=" "; + cmd+=destFile; + cmd+=" && chmod -f 0644 "; + cmd+=destFile; + cmd+=" && chown -f "; + cmd+=userId; + cmd+=":"; + cmd+=groupId; + cmd+=" "; + cmd+=destFile; + + QString sysDir, + userDir; + + if(FOLDER_SYS==destFolder) + { + sysDir=itsFolders[destFolder].location; + userDir=Misc::getDir(fIt.key()); + } + else + { + userDir=itsFolders[destFolder].location; + sysDir=Misc::getDir(fIt.key()); + } + + if(!itsCanStorePasswd) + createRootRefreshCmd(cmd, sysDir); + + if(doRootCmd(cmd, askPasswd)) + { + modified(FOLDER_SYS, true, sysDir); + modified(FOLDER_USER, true, userDir); + askPasswd=false; // Don't keep on asking for password... + } + else + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\" folder.").arg(i18n(KFI_KIO_FONTS_SYS))); + return; + } + } + if(changed) + itsLastDestTime=time(NULL); + } + } + } +} + +void CKioFonts::del(const KURL &url, bool) +{ + KFI_DBUG << "del " << url.path() << endl; + + QValueList *entries; + + if(checkUrl(url) && checkAllowed(url) && + updateFontList() && (entries=getEntries(url)) && entries->count() && + confirmMultiple(url, entries, getFolder(url), OP_DELETE)) + { + QValueList::Iterator it, + end=entries->end(); + CDirList modifiedDirs; + bool clearList=KFI_KIO_NO_CLEAR!=url.query(); + + if(nonRootSys(url)) + { + QCString cmd("rm -f"); + + for(it=entries->begin(); it!=end; ++it) + { + QString file(CFcEngine::getFcString(*it, FC_FILE)); + + modifiedDirs.add(Misc::getDir(file)); + cmd+=" "; + cmd+=QFile::encodeName(KProcess::quote(file)); + + KURL::List urls; + + Misc::getAssociatedUrls(KURL(file), urls); + + if(urls.count()) + { + KURL::List::Iterator uIt, + uEnd=urls.end(); + + for(uIt=urls.begin(); uIt!=uEnd; ++uIt) + { + cmd+=" "; + cmd+=QFile::encodeName(KProcess::quote((*uIt).path())); + } + } + } + + if(!itsCanStorePasswd) + createRootRefreshCmd(cmd, modifiedDirs); + + if(doRootCmd(cmd)) + modified(FOLDER_SYS, clearList, modifiedDirs); + else + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\" folder.").arg(i18n(KFI_KIO_FONTS_SYS))); + } + else + { + for(it=entries->begin(); it!=end; ++it) + { + QString file(CFcEngine::getFcString(*it, FC_FILE)); + + if (0!=unlink(QFile::encodeName(file).data())) + error(EACCES==errno || EPERM==errno + ? KIO::ERR_ACCESS_DENIED + : EISDIR==errno + ? KIO::ERR_IS_DIRECTORY + : KIO::ERR_CANNOT_DELETE, + file); + else + { + modifiedDirs.add(Misc::getDir(file)); + + KURL::List urls; + + Misc::getAssociatedUrls(KURL(file), urls); + + if(urls.count()) + { + KURL::List::Iterator uIt, + uEnd=urls.end(); + + for(uIt=urls.begin(); uIt!=uEnd; ++uIt) + unlink(QFile::encodeName((*uIt).path()).data()); + } + } + } + modified(itsRoot ? FOLDER_SYS : FOLDER_USER, clearList, modifiedDirs); + } + finished(); + } +} + +void CKioFonts::modified(EFolder folder, bool clearList, const CDirList &dirs) +{ + KFI_DBUG << "modified(" << (int)folder << ")\n"; + + if(FOLDER_SYS!=folder || itsCanStorePasswd || itsRoot) + { + if(dirs.count()) + { + CDirList::ConstIterator it(dirs.begin()), + end(dirs.end()); + + for(; it!=end; ++it) + itsFolders[folder].modified.add(*it); + } + else + itsFolders[folder].modified.add(itsFolders[folder].location); + + if(++itsFontChanges>MAX_NEW_FONTS) + { + setTimeoutSpecialCommand(0); // Cancel timer + doModified(); + } + else + setTimeoutSpecialCommand(TIMEOUT); + } + + if(FOLDER_SYS==folder && !itsRoot && !itsCanStorePasswd) + { + // If we modified sys, we're not root, and couldn't store the passwd, then kfontinst has already been called + // so no need to ask it to add folder to fontconfig and X's config files... + itsHasSys=true; + itsAddToSysFc=false; + } + if(clearList) + clearFontList(); // List of fonts has changed.../ +} + +void CKioFonts::special(const QByteArray &a) +{ + KFI_DBUG << "special" << endl; + + if(a.size()) + { + QDataStream stream(a, IO_ReadOnly); + int cmd; + + stream >> cmd; + + switch (cmd) + { + case SPECIAL_RESCAN: + clearFontList(); + updateFontList(); + finished(); + break; + case SPECIAL_RECONFIG: // Only itended to be called from kcmfontinst - when a user has re-enabled doX or doGs + if(itsRoot && !itsFolders[FOLDER_SYS].modified.contains(itsFolders[FOLDER_SYS].location)) + itsFolders[FOLDER_SYS].modified.add(itsFolders[FOLDER_SYS].location); + else if(!itsRoot && !itsFolders[FOLDER_USER].modified.contains(itsFolders[FOLDER_USER].location)) + itsFolders[FOLDER_USER].modified.add(itsFolders[FOLDER_USER].location); + + doModified(); + finished(); + break; + default: + error( KIO::ERR_UNSUPPORTED_ACTION, QString::number(cmd)); + } + } + else + doModified(); +} + +void CKioFonts::createRootRefreshCmd(QCString &cmd, const CDirList &dirs, bool reparseCfg) +{ + if(reparseCfg) + reparseConfig(); + + if(!cmd.isEmpty()) + cmd+=" && "; + + cmd+=FC_CACHE_CMD; + + if(dirs.count()) + { + CDirList::ConstIterator it(dirs.begin()), + end(dirs.end()); + + for(; it!=end; ++it) + { + QCString tmpCmd; + + if(*it==itsFolders[FOLDER_SYS].location) + { + if(0!=itsNrsKfiParams[0]) + tmpCmd+=itsNrsKfiParams; + } + else + if(0!=itsNrsNonMainKfiParams[0]) + tmpCmd+=itsNrsNonMainKfiParams; + + if(!tmpCmd.isEmpty()) + { + cmd+=" && kfontinst "; + cmd+=tmpCmd; + cmd+=" "; + cmd+=QFile::encodeName(KProcess::quote(*it)); + } + } + } + else if (0!=itsNrsKfiParams[0]) + { + cmd+=" && kfontinst "; + cmd+=itsNrsKfiParams; + cmd+=" "; + cmd+=QFile::encodeName(KProcess::quote(itsFolders[FOLDER_SYS].location)); + } +} + +void CKioFonts::doModified() +{ + KFI_DBUG << "doModified" << endl; + + if(itsFolders[FOLDER_SYS].modified.count() || itsFolders[FOLDER_USER].modified.count()) + reparseConfig(); + + itsFontChanges=0; + if(itsFolders[FOLDER_SYS].modified.count()) + { + if(itsRoot) + { + Misc::doCmd(FC_CACHE_CMD); + KFI_DBUG << "RUN(root): " << FC_CACHE_CMD << endl; + + // + // If a non-default folder has been modified, always configure X + if(NULL==strchr(itsKfiParams, 'x') && + (itsFolders[FOLDER_SYS].modified.count()>1 || !itsFolders[FOLDER_SYS].modified.contains(itsFolders[FOLDER_SYS].location))) + { + if(0==itsKfiParams[0]) + strcpy(itsKfiParams, "-x"); + else + strcat(itsKfiParams, "x"); + } + + if(0!=itsKfiParams[0]) + { + CDirList::ConstIterator it(itsFolders[FOLDER_SYS].modified.begin()), + end(itsFolders[FOLDER_SYS].modified.end()); + + for(; it!=end; ++it) + { + Misc::doCmd("kfontinst", itsKfiParams, QFile::encodeName(*it)); + KFI_DBUG << "RUN(root): kfontinst " << itsKfiParams << ' ' << *it << endl; + } + + if(itsFolders[FOLDER_SYS].modified.contains(itsFolders[FOLDER_SYS].location)) + { + itsHasSys=true; + itsAddToSysFc=false; + } + } + } + else + { + QCString cmd; + + createRootRefreshCmd(cmd, itsFolders[FOLDER_SYS].modified, false); + if(doRootCmd(cmd, false) && itsFolders[FOLDER_SYS].modified.contains(itsFolders[FOLDER_SYS].location)) + { + itsHasSys=true; + itsAddToSysFc=false; + } + if(NULL==strstr(itsNrsKfiParams, "s")) + Misc::doCmd("xset", "fp", "rehash"); // doRootCmd can only refresh if xfs is being used, so try here anyway... + } + itsFolders[FOLDER_SYS].modified.clear(); + } + + if(!itsRoot && itsFolders[FOLDER_USER].modified.count()) + { + Misc::doCmd(FC_CACHE_CMD); + KFI_DBUG << "RUN(non-root): " << FC_CACHE_CMD << endl; + + if(0!=itsKfiParams[0]) + { + CDirList::ConstIterator it(itsFolders[FOLDER_USER].modified.begin()), + end(itsFolders[FOLDER_USER].modified.end()); + + for(; it!=end; ++it) + { + Misc::doCmd("kfontinst", itsKfiParams, QFile::encodeName(*it)); + KFI_DBUG << "RUN(non-root): kfontinst " << itsKfiParams << ' ' << *it << endl; + } + } + itsFolders[FOLDER_USER].modified.clear(); + } + + KFI_DBUG << "finished ModifiedDirs" << endl; +} + +#define SYS_USER "root" +QString CKioFonts::getRootPasswd(bool askPasswd) +{ + KFI_DBUG << "getRootPasswd" << endl; + KIO::AuthInfo authInfo; + SuProcess proc(SYS_USER); + bool error=false; + int attempts=0; + QString errorMsg; + + authInfo.url=KURL(KFI_KIO_FONTS_PROTOCOL ":///"); + authInfo.username=SYS_USER; + authInfo.keepPassword=true; + + if(!checkCachedAuthentication(authInfo) && !askPasswd) + authInfo.password=itsPasswd; + + if(askPasswd) + while(!error && 0!=proc.checkInstall(authInfo.password.local8Bit())) + { + KFI_DBUG << "ATTEMPT : " << attempts << endl; + if(1==attempts) + errorMsg=i18n("Incorrect password.\n"); + if((!openPassDlg(authInfo, errorMsg) && attempts) || ++attempts>4 || SYS_USER!=authInfo.username) + error=true; + } + else + error=proc.checkInstall(authInfo.password.local8Bit()) ? true : false; + return error ? QString::null : authInfo.password; +} + +bool CKioFonts::doRootCmd(const char *cmd, const QString &passwd) +{ + KFI_DBUG << "doRootCmd " << cmd << endl; + + if(!passwd.isEmpty()) + { + SuProcess proc(SYS_USER); + + if(itsCanStorePasswd) + itsPasswd=passwd; + + KFI_DBUG << "Try to run command" << endl; + proc.setCommand(cmd); + return proc.exec(passwd.local8Bit()) ? false : true; + } + + return false; +} + +bool CKioFonts::confirmUrl(KURL &url) +{ + KFI_DBUG << "confirmUrl " << url.path() << endl; + if(!itsRoot) + { + QString sect(getSect(url.path())); + + if(!isSysFolder(sect) && !isUserFolder(sect)) + { + bool changeToSystem=false; + + if(DEST_UNCHANGED!=itsLastDest && itsLastDestTime && (abs(time(NULL)-itsLastDestTime) < constMaxLastDestTime)) + changeToSystem=DEST_SYS==itsLastDest; + else + changeToSystem=KMessageBox::No==messageBox(QuestionYesNo, + i18n("Do you wish to install the font into \"%1\" (in which " + "case the font will only be usable by you), or \"%2\" (" + "the font will be usable by all users - but you will " + "need to know the administrator's password)?") + .arg(i18n(KFI_KIO_FONTS_USER)).arg(i18n(KFI_KIO_FONTS_SYS)), + i18n("Where to Install"), i18n(KFI_KIO_FONTS_USER), + i18n(KFI_KIO_FONTS_SYS)); + + if(changeToSystem) + { + itsLastDest=DEST_SYS; + url.setPath(QChar('/')+i18n(KFI_KIO_FONTS_SYS)+QChar('/')+url.fileName()); + } + else + { + itsLastDest=DEST_USER; + url.setPath(QChar('/')+i18n(KFI_KIO_FONTS_USER)+QChar('/')+url.fileName()); + } + + KFI_DBUG << "Changed URL to:" << url.path() << endl; + return true; + } + } + + return false; +} + +void CKioFonts::clearFontList() +{ + KFI_DBUG << "clearFontList" << endl; + + if(itsFontList) + FcFontSetDestroy(itsFontList); + + itsFontList=NULL; + itsFolders[FOLDER_SYS].fontMap.clear(); + itsFolders[FOLDER_USER].fontMap.clear(); +} + +bool CKioFonts::updateFontList() +{ + KFI_DBUG << "updateFontList" << endl; + + if(!itsFontList || !FcConfigUptoDate(0) || // For some reason just the "!FcConfigUptoDate(0)" check does not always work :-( + (abs(time(NULL)-itsLastFcCheckTime)>constMaxFcCheckTime)) + { + FcInitReinitialize(); + clearFontList(); + } + + if(!itsFontList) + { + KFI_DBUG << "updateFontList - update list of fonts " << endl; + + itsLastFcCheckTime=time(NULL); + + FcPattern *pat = FcPatternCreate(); + FcObjectSet *os = FcObjectSetBuild(FC_FILE, FC_FAMILY, FC_WEIGHT, FC_SCALABLE, +#ifdef KFI_FC_HAS_WIDTHS + FC_WIDTH, +#endif + FC_SLANT, (void*)0); + + itsFontList=FcFontList(0, pat, os); + + FcPatternDestroy(pat); + FcObjectSetDestroy(os); + + if (itsFontList) + { + QString home(Misc::dirSyntax(QDir::homeDirPath())); + + for (int i = 0; i < itsFontList->nfont; i++) + { + EFolder folder=FOLDER_SYS; + QString file(Misc::fileSyntax(CFcEngine::getFcString(itsFontList->fonts[i], FC_FILE))); + + if(!file.isEmpty()) + { + if(!itsRoot && 0==file.find(home)) + folder=FOLDER_USER; + + QValueList &patterns= + itsFolders[folder].fontMap[CFcEngine::createName(itsFontList->fonts[i])]; + bool use=true; + + if(patterns.count()) // Check for duplicates... + { + QValueList::Iterator it, + end=patterns.end(); + + for(it=patterns.begin(); use && it!=end; ++it) + if(file==(Misc::fileSyntax(CFcEngine::getFcString(*it, FC_FILE)))) + use=false; + } + if(use) + patterns.append(itsFontList->fonts[i]); + } + } + } + } + + if(NULL==itsFontList) + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Internal fontconfig error.")); + return false; + } + + return true; +} + +CKioFonts::EFolder CKioFonts::getFolder(const KURL &url) +{ + return itsRoot || isSysFolder(getSect(url.path())) ? FOLDER_SYS : FOLDER_USER; +} + +QMap >::Iterator CKioFonts::getMap(const KURL &url) +{ + EFolder folder(getFolder(url)); + QMap >::Iterator it=itsFolders[folder].fontMap.find(removeMultipleExtension(url)); + + if(it==itsFolders[folder].fontMap.end()) // Perhaps it was fonts:/System/times.ttf ??? + { + FcPattern *pat=getEntry(folder, url.fileName(), false); + + if(pat) + it=itsFolders[folder].fontMap.find(CFcEngine::createName(pat)); + } + + return it; +} + +QValueList * CKioFonts::getEntries(const KURL &url) +{ + QMap >::Iterator it=getMap(url); + + if(it!=itsFolders[getFolder(url)].fontMap.end()) + return &(it.data()); + + error(KIO::ERR_SLAVE_DEFINED, i18n("Could not access \"%1\".").arg(url.prettyURL())); + return NULL; +} + +FcPattern * CKioFonts::getEntry(EFolder folder, const QString &file, bool full) +{ + QMap >::Iterator it, + end=itsFolders[folder].fontMap.end(); + + for(it=itsFolders[folder].fontMap.begin(); it!=end; ++it) + { + QValueList::Iterator patIt, + patEnd=it.data().end(); + + for(patIt=it.data().begin(); patIt!=patEnd; ++patIt) + if( (full && CFcEngine::getFcString(*patIt, FC_FILE)==file) || + (!full && Misc::getFile(CFcEngine::getFcString(*patIt, FC_FILE))==file)) + return *patIt; + } + + return NULL; +} + +bool CKioFonts::checkFile(const QString &file) +{ + QCString cFile(QFile::encodeName(file)); + + // + // To speed things up, check the files extension 1st... + if(checkExt(cFile, "ttf") || checkExt(cFile, "otf") || checkExt(cFile, "ttc") || checkExt(cFile, "pfa") || checkExt(cFile, "pfb") || + isAAfm(file) || isAPfm(file)) + return true; + + // + // No exension match, so try querying with FreeType... + int count=0; + FcPattern *pat=FcFreeTypeQuery((const FcChar8 *)(QFile::encodeName(file).data()), 0, NULL, &count); + + if(pat) + { + FcPatternDestroy(pat); + return true; + } + + error(KIO::ERR_SLAVE_DEFINED, i18n("

Only fonts may be installed.

If installing a fonts package (*%1), then " + "extract the components, and install individually.

").arg(constMultipleExtension)); + return false; +} + +bool CKioFonts::getSourceFiles(const KURL &src, QStringList &files) +{ + if(KFI_KIO_FONTS_PROTOCOL==src.protocol()) + { + QValueList *entries=getEntries(src); + + if(entries && entries->count()) + { + QValueList::Iterator it, + end=entries->end(); + + for(it=entries->begin(); it!=end; ++it) + files.append(CFcEngine::getFcString(*it, FC_FILE)); + } + + if(files.count()) + { + QStringList::Iterator sIt, + sEnd=files.end(); + + for(sIt=files.begin(); sIt!=sEnd; ++sIt) + { + KURL::List urls; + + Misc::getAssociatedUrls(KURL(*sIt), urls); + + if(urls.count()) + { + KURL::List::Iterator uIt, + uEnd=urls.end(); + + for(uIt=urls.begin(); uIt!=uEnd; ++uIt) + if(-1==files.findIndex((*uIt).path())) + files.append((*uIt).path()); + } + } + } + } + else + if(src.isLocalFile()) + if(checkFile(src.path())) + files.append(src.path()); + else + return false; // error logged in checkFile... + + if(files.count()) + { + QStringList::Iterator it, + end=files.end(); + + for(it=files.begin(); it!=end; ++it) + { + QCString realSrc=QFile::encodeName(*it); + KDE_struct_stat buffSrc; + + if (-1==KDE_stat(realSrc.data(), &buffSrc)) + { + error(EACCES==errno ? KIO::ERR_ACCESS_DENIED : KIO::ERR_DOES_NOT_EXIST, src.prettyURL()); + return false; + } + if(S_ISDIR(buffSrc.st_mode)) + { + error(KIO::ERR_IS_DIRECTORY, src.prettyURL()); + return false; + } + if(S_ISFIFO(buffSrc.st_mode) || S_ISSOCK(buffSrc.st_mode)) + { + error(KIO::ERR_CANNOT_OPEN_FOR_READING, src.prettyURL()); + return false; + } + } + } + else + { + error(KIO::ERR_DOES_NOT_EXIST, src.prettyURL()); + return false; + } + + return true; +} + +bool CKioFonts::checkDestFile(const KURL &src, const KURL &dest, EFolder destFolder, bool overwrite) +{ + if(!overwrite && (Misc::fExists(itsFolders[destFolder].location+src.fileName()) || + Misc::fExists(itsFolders[destFolder].location+modifyName(src.fileName())) ) ) + { + error(KIO::ERR_FILE_ALREADY_EXIST, dest.prettyURL()); + return false; + } + + return true; +} + +bool CKioFonts::checkDestFiles(const KURL &src, QMap &map, const KURL &dest, EFolder destFolder, bool overwrite) +{ + // + // Check whether files exist at destination... + // + if(dest.protocol()==src.protocol() && + dest.directory()==src.directory()) // Check whether confirmUrl changed a "cp fonts:/System fonts:/" + // to "cp fonts:/System fonts:/System" + { + error(KIO::ERR_FILE_ALREADY_EXIST, dest.prettyURL()); + return false; + } + + if(!overwrite) + { + QMap::Iterator fIt(map.begin()), + fEnd(map.end()); + + for(; fIt!=fEnd; ++fIt) + if(NULL!=getEntry(destFolder, fIt.data()) || NULL!=getEntry(destFolder, modifyName(fIt.data()))) + { + error(KIO::ERR_FILE_ALREADY_EXIST, dest.prettyURL()); + return false; + } + } + + return true; +} + +// +// Gather the number and names of the font faces located in "files". If there is more than 1 face +// (such as there would be for a TTC font), then ask the user for confirmation of the action. +bool CKioFonts::confirmMultiple(const KURL &url, const QStringList &files, EFolder folder, EOp op) +{ + if(KFI_KIO_FONTS_PROTOCOL!=url.protocol()) + return true; + + QStringList::ConstIterator it, + end=files.end(); + QStringList fonts; + + for(it=files.begin(); it!=files.end(); ++it) + { + FcPattern *pat=getEntry(folder, *it, false); + + if(pat) + { + QString name(CFcEngine::createName(pat)); + + if(-1==fonts.findIndex(name)) + fonts.append(name); + } + } + + if(fonts.count()>1) + { + QString out; + QStringList::Iterator it, + end=fonts.end(); + + for(it=fonts.begin(); it!=end; ++it) + out+=QString("
  • ")+*it+QString("
  • "); + + if(KMessageBox::No==messageBox(QuestionYesNo, + OP_MOVE==op + ? i18n("

    This font is located in a file alongside other fonts; in order " + "to proceed with the moving they will all have to be moved. " + "The other affected fonts are:

      %1

    \n Do you wish to " + "move all of these?

    ").arg(out) + : OP_COPY==op + ? i18n("

    This font is located in a file alongside other fonts; in order " + "to proceed with the copying they will all have to be copied. " + "The other affected fonts are:

      %1

    \n Do you wish to " + "copy all of these?

    ").arg(out) + : i18n("

    This font is located in a file alongside other fonts; in order " + "to proceed with the deleting they will all have to be deleted. " + "The other affected fonts are:

      %1

    \n Do you wish to " + "delete all of these?

    ").arg(out))) + { + error(KIO::ERR_USER_CANCELED, url.prettyURL()); + return false; + } + } + + return true; +} + +bool CKioFonts::confirmMultiple(const KURL &url, QValueList *patterns, EFolder folder, EOp op) +{ + if(KFI_KIO_FONTS_PROTOCOL!=url.protocol()) + return true; + + QStringList files; + + if(patterns && patterns->count()) + { + QValueList::Iterator it, + end=patterns->end(); + + for(it=patterns->begin(); it!=end; ++it) + files.append(CFcEngine::getFcString(*it, FC_FILE)); + } + + return confirmMultiple(url, files, folder, op); +} + +bool CKioFonts::checkUrl(const KURL &u, bool rootOk) +{ + if(KFI_KIO_FONTS_PROTOCOL==u.protocol() && (!rootOk || (rootOk && "/"!=u.path()))) + { + QString sect(getSect(u.path())); + + if(itsRoot) + { + if((isSysFolder(sect) || isUserFolder(sect)) && + (itsFolders[FOLDER_SYS].fontMap.end()==itsFolders[FOLDER_SYS].fontMap.find(sect))) +//CPD: TODO: || it has a font specified! e.g. fonts:/System/Times -> even in have a fonts:/System font, redirect +//should still happen + { + redirection(getRedirect(u)); + finished(); + return false; + } + } + else + if(!isSysFolder(sect) && !isUserFolder(sect)) + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Please specify \"%1\" or \"%2\".") + .arg(i18n(KFI_KIO_FONTS_USER)).arg(i18n(KFI_KIO_FONTS_SYS))); + return false; + } + } + + return true; +} + +bool CKioFonts::checkAllowed(const KURL &u) +{ + if (KFI_KIO_FONTS_PROTOCOL==u.protocol()) + { + QString ds(Misc::dirSyntax(u.path())); + + if(ds==QString(QChar('/')+i18n(KFI_KIO_FONTS_USER)+QChar('/')) || + ds==QString(QChar('/')+i18n(KFI_KIO_FONTS_SYS)+QChar('/')) || + ds==QString(QChar('/')+QString::fromLatin1(KFI_KIO_FONTS_USER)+QChar('/')) || + ds==QString(QChar('/')+QString::fromLatin1(KFI_KIO_FONTS_SYS)+QChar('/'))) + { + error(KIO::ERR_SLAVE_DEFINED, i18n("Sorry, you cannot rename, move, copy, or delete either \"%1\" or \"%2\".") + .arg(i18n(KFI_KIO_FONTS_USER)).arg(i18n(KFI_KIO_FONTS_SYS))); \ + return false; + } + } + + return true; +} + +// +// Create an AFM from a Type 1 (pfa/pfb) font and its PFM file... +void CKioFonts::createAfm(const QString &file, bool nrs, const QString &passwd) +{ + if(nrs && passwd.isEmpty()) + return; + + bool type1=isAType1(file), + pfm=!type1 && isAPfm(file); // No point checking if is pfm if its a type1 + + if(type1 || pfm) + { + QString afm=getMatch(file, "afm"); // pf2afm wants files with lowercase extension, so just check for lowercase! + // -- when a font is installed, the extensio is converted to lowercase anyway... + + if(afm.isEmpty()) // No point creating if AFM already exists! + { + QString pfm, + t1; + + if(type1) // Its a Type1, so look for existing PFM + { + pfm=getMatch(file, "pfm"); + t1=file; + } + else // Its a PFM, so look for existing Type1 + { + t1=getMatch(file, "pfa"); + if(t1.isEmpty()) + t1=getMatch(file, "pfb"); + pfm=file; + } + + if(!t1.isEmpty() && !pfm.isEmpty()) // Do we have both Type1 and PFM? + { + QString name(t1.left(t1.length()-4)); // pf2afm wants name without extension... + + if(nrs) + { + QCString cmd("pf2afm "); + cmd+=QFile::encodeName(KProcess::quote(name)); + doRootCmd(cmd, passwd); + } + else + Misc::doCmd("pf2afm", QFile::encodeName(name)); + } + } + } +} + +void CKioFonts::reparseConfig() +{ + KFI_DBUG << "reparseConfig" << endl; + + itsKfiParams[0]=0; + if(!itsRoot) + { + itsNrsKfiParams[0]=0; + itsNrsNonMainKfiParams[0]=0; + } + + if(itsRoot) + { + KConfig cfg(KFI_ROOT_CFG_FILE); + bool doX=cfg.readBoolEntry(KFI_CFG_X_KEY, KFI_DEFAULT_CFG_X), + doGs=cfg.readBoolEntry(KFI_CFG_GS_KEY, KFI_DEFAULT_CFG_GS); + + if(doX || !doGs) + { + strcpy(itsKfiParams, doGs ? "-g" : "-"); + if(doX) + { + if(!itsUsingXfsFpe) + strcat(itsKfiParams, "r"); + + if(!itsUsingFcFpe) + { + strcat(itsKfiParams, itsUsingXfsFpe ? "sx" : "x"); + if(!itsHasSys) + strcat(itsKfiParams, "a"); + } + } + } + } + else + { + KConfig rootCfg(KFI_ROOT_CFG_FILE); + bool rootDoX=rootCfg.readBoolEntry(KFI_CFG_X_KEY, KFI_DEFAULT_CFG_X), + rootDoGs=rootCfg.readBoolEntry(KFI_CFG_GS_KEY, KFI_DEFAULT_CFG_GS); + + strcpy(itsNrsKfiParams, "-"); + + if(rootDoX || rootDoGs) + { + strcpy(itsNrsKfiParams, "-"); + strcpy(itsNrsNonMainKfiParams, "-"); + + if(rootDoGs) + { + strcpy(itsNrsKfiParams, "g"); + strcpy(itsNrsNonMainKfiParams, "g"); + } + + if(rootDoX && !itsUsingFcFpe) + { + strcat(itsNrsKfiParams, itsUsingXfsFpe ? "sx" : "x"); // Can't get root to refresh X, only xfs! + strcat(itsNrsNonMainKfiParams, itsUsingXfsFpe ? "sx" : "x"); + if(!itsHasSys) + strcat(itsNrsKfiParams, "a"); + } + if(0==itsNrsNonMainKfiParams[1]) + itsNrsNonMainKfiParams[0]=0; + } + + if(itsAddToSysFc) + strcpy(itsNrsKfiParams, "f"); + + if(0==itsNrsKfiParams[1]) + itsNrsKfiParams[0]=0; + + KConfig cfg(KFI_CFG_FILE); + bool doX=cfg.readBoolEntry(KFI_CFG_X_KEY, KFI_DEFAULT_CFG_X), + doGs=cfg.readBoolEntry(KFI_CFG_GS_KEY, KFI_DEFAULT_CFG_GS); + + strcpy(itsKfiParams, doGs ? "-g" : "-"); + + if(doX) + strcat(itsKfiParams, itsUsingFcFpe ? "r" : "rx"); + } + + if(0==itsKfiParams[1]) + itsKfiParams[0]=0; +} + +} diff --git a/kcontrol/kfontinst/kio/KioFonts.h b/kcontrol/kfontinst/kio/KioFonts.h new file mode 100644 index 000000000..abfd6b042 --- /dev/null +++ b/kcontrol/kfontinst/kio/KioFonts.h @@ -0,0 +1,161 @@ +#ifndef __KIO_FONTS_H__ +#define __KIO_FONTS_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CKioFonts +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 05/03/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Misc.h" +#include "KfiConstants.h" + +namespace KFI +{ + +class CKioFonts : public KIO::SlaveBase +{ + private: + + enum EConstants + { + KFI_PARAMS = 8 + }; + + enum EDest + { + DEST_UNCHANGED, + DEST_SYS, + DEST_USER + }; + + enum EFolder + { + FOLDER_SYS, + FOLDER_USER, + + FOLDER_COUNT + }; + + enum EOp + { + OP_COPY, + OP_MOVE, + OP_DELETE + }; + + class CDirList : public QStringList + { + public: + + CDirList() { } + CDirList(const QString &str) : QStringList(str) { } + + void add(const QString &d) { if (!contains(d)) append(d); } + }; + + struct TFolder + { + QString location; + CDirList modified; + QMap > fontMap; // Maps from "Times New Roman" -> $HOME/.fonts/times.ttf + }; + + public: + + CKioFonts(const QCString &pool, const QCString &app); + virtual ~CKioFonts(); + + static QString getSect(const QString &f) { return f.section('/', 1, 1); } + + void listDir(const KURL &url); + void stat(const KURL &url); + bool createStatEntry(KIO::UDSEntry &entry, const KURL &url, EFolder folder); + void get(const KURL &url); + void put(const KURL &url, int mode, bool overwrite, bool resume); + void copy(const KURL &src, const KURL &dest, int mode, bool overwrite); + void rename(const KURL &src, const KURL &dest, bool overwrite); + void del(const KURL &url, bool isFile); + + private: + + bool putReal(const QString &destOrig, const QCString &destOrigC, bool origExists, int mode, bool resume); + void modified(EFolder folder, bool clearList=true, const CDirList &dirs=CDirList()); + void special(const QByteArray &a); + void createRootRefreshCmd(QCString &cmd, const CDirList &dirs=CDirList(), bool reparseCfg=true); + void doModified(); + QString getRootPasswd(bool askPasswd=true); + bool doRootCmd(const char *cmd, const QString &passwd); + bool doRootCmd(const char *cmd, bool askPasswd=true) { return doRootCmd(cmd, getRootPasswd(askPasswd)); } + bool confirmUrl(KURL &url); + void clearFontList(); + bool updateFontList(); + EFolder getFolder(const KURL &url); + QMap >::Iterator getMap(const KURL &url); + QValueList * getEntries(const KURL &url); + FcPattern * getEntry(EFolder folder, const QString &file, bool full=false); + bool checkFile(const QString &file); + bool getSourceFiles(const KURL &src, QStringList &files); + bool checkDestFile(const KURL &src, const KURL &dest, EFolder destFolder, bool overwrite); + bool checkDestFiles(const KURL &src, QMap &map, const KURL &dest, EFolder destFolder, bool overwrite); + bool confirmMultiple(const KURL &url, const QStringList &files, EFolder folder, EOp op); + bool confirmMultiple(const KURL &url, QValueList *patterns, EFolder folder, EOp op); + bool checkUrl(const KURL &u, bool rootOk=false); + bool checkAllowed(const KURL &u); + void createAfm(const QString &file, bool nrs=false, const QString &passwd=QString::null); + void reparseConfig(); + + private: + + bool itsRoot, + itsCanStorePasswd, + itsUsingFcFpe, + itsUsingXfsFpe, + itsHasSys, + itsAddToSysFc; + QString itsPasswd; + unsigned int itsFontChanges; + EDest itsLastDest; + time_t itsLastDestTime, + itsLastFcCheckTime; + FcFontSet *itsFontList; + TFolder itsFolders[FOLDER_COUNT]; + char itsNrsKfiParams[KFI_PARAMS], + itsNrsNonMainKfiParams[KFI_PARAMS], + itsKfiParams[KFI_PARAMS]; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/kio/Makefile.am b/kcontrol/kfontinst/kio/Makefile.am new file mode 100644 index 000000000..ad0f2ea8e --- /dev/null +++ b/kcontrol/kfontinst/kio/Makefile.am @@ -0,0 +1,20 @@ +kde_module_LTLIBRARIES = kio_fonts.la +kio_fonts_la_SOURCES = \ +KioFonts.cpp + +kio_fonts_la_LIBADD = ../../fonts/libkxftconfig.la $(LIBFONTCONFIG_LIBS) $(LIBFREETYPE_LIBS) $(LIB_KIO) -lkdesu ../lib/libkfontinst.la +kio_fonts_la_LDFLAGS = $(KDE_PLUGIN) $(all_libraries) $(KDE_RPATH) $(LIBFONTCONFIG_RPATH) $(LIBFREETYPE_RPATH) -module -avoid-version -no-undefined +AM_CPPFLAGS= -I$(srcdir)/../lib -I$(srcdir)/../../fonts $(all_includes) $(LIBFREETYPE_CFLAGS) $(LIBFONTCONFIG_CFLAGS) -D_LARGEFILE64_SOURCE + +# The kxftconfig stuf really belongs to kdebase/kcontrol/fonts - here only so that can distribute this as an archive. +noinst_HEADERS = \ +KioFonts.h + +servicesdir = $(kde_servicesdir) +services_DATA = fonts.protocol + +vfsdata_DATA = fonts.desktop +vfsdatadir = $(kde_datadir)/konqsidebartng/virtual_folders/services + +mimetype_DATA = folder.desktop system-folder.desktop package.desktop +mimetypedir = $(kde_mimedir)/fonts diff --git a/kcontrol/kfontinst/kio/folder.desktop b/kcontrol/kfontinst/kio/folder.desktop new file mode 100644 index 000000000..24e328ae8 --- /dev/null +++ b/kcontrol/kfontinst/kio/folder.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Comment=Fonts Folder +Comment[af]=Skrif tipe Gids +Comment[ar]=مجلد المحارف +Comment[be]=Тэчка шрыфтоў +Comment[bg]=Директория за шрифтове +Comment[bn]=ফন্ট ফোল্ডার +Comment[br]=Renkell ar fontoù +Comment[bs]=Direktorij sa fontovima +Comment[ca]=Carpeta de lletres +Comment[cs]=Složka písem +Comment[csb]=Katalog fòntów +Comment[da]=Skrifttypemappe +Comment[de]=Ordner für Schriftarten +Comment[el]=Φάκελος γραμματοσειρών +Comment[eo]=Tipardosierujo +Comment[es]=Carpeta de tipos de letra +Comment[et]=Fontide kataloog +Comment[eu]=Letra-tipoen karpeta +Comment[fa]=پوشۀ قلم +Comment[fi]=Kirjasinkansio +Comment[fr]=Dossier de polices de caractères +Comment[fy]=Lettertypenmap +Comment[ga]=Fillteán na gClónna +Comment[gl]=Cartafol das Fontes +Comment[he]=תיקיית גופנים +Comment[hi]=फ़ॉन्ट्स फ़ोल्डर +Comment[hr]=Mapa fontova +Comment[hu]=Betűtípuskönyvtár +Comment[id]=Folder Fonts +Comment[is]=Leturmappa +Comment[it]=Cartella dei caratteri +Comment[ja]=フォントフォルダ +Comment[ka]=ფონტების საქაღალდე +Comment[kk]=Қаріп қапшығы +Comment[km]=ថត​ពុម្ពអក្សរ +Comment[ko]=홈 폴더 +Comment[lt]=Šriftų aplankas +Comment[lv]=Fontu mape +Comment[mk]=Папка со фонтови +Comment[ms]=Folder Fon +Comment[mt]=Direttorju tal-fonts +Comment[nb]=Mappe for skrifttyper +Comment[nds]=Schriftoorden-Orner +Comment[ne]=फन्ट फोल्डर +Comment[nl]=Lettertypenmap +Comment[nn]=Skriftmappe +Comment[pa]=ਫੋਂਟ ਫੋਲਡਰ +Comment[pl]=Katalog czcionek +Comment[pt]=Pasta de Tipos de Letra +Comment[pt_BR]=Pasta de Fontes +Comment[ro]=Folder de fonturi +Comment[ru]=Папка шрифтов +Comment[rw]=Ububiko bw'Imyandikire +Comment[se]=Fontamáhppa +Comment[sk]=Priečinok písiem +Comment[sl]=Mapa za pisave +Comment[sr]=Фасцикла за фонтове +Comment[sr@Latn]=Fascikla za fontove +Comment[sv]=Teckensnittskatalog +Comment[ta]=எழுத்துருக்கள் அடைவு +Comment[tg]=Феҳристи ҳарфҳо +Comment[th]=โฟลเดอร์แฟ้มแบบอักษร +Comment[tr]=Yazıtipi Klasörü +Comment[tt]=Yazu lar Törgäge +Comment[uk]=Тека шрифтів +Comment[uz]=Shriftlarning jildi +Comment[uz@cyrillic]=Шрифтларнинг жилди +Comment[vi]=Thư mục Phông chữ +Comment[wa]=Ridant di fontes +Comment[zh_CN]=字体文件夹 +Comment[zh_TW]=字型資料夾 +Icon=folder +Type=MimeType +MimeType=fonts/folder +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory + diff --git a/kcontrol/kfontinst/kio/fonts.desktop b/kcontrol/kfontinst/kio/fonts.desktop new file mode 100644 index 000000000..0095f49d2 --- /dev/null +++ b/kcontrol/kfontinst/kio/fonts.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Type=Link +URL=fonts:/ +Icon=fonts +Name=Fonts +Name[af]=Skriftipes +Name[ar]=المحارف +Name[az]=Yazı növləri +Name[be]=Шрыфты +Name[bg]=Шрифтове +Name[bn]=ফন্ট +Name[br]=Fontoù +Name[bs]=Fontovi +Name[ca]=Lletres +Name[cs]=Písma +Name[csb]=Fòntë +Name[cy]=Ffontiau +Name[da]=Skrifttyper +Name[de]=Schriftarten +Name[el]=Γραμματοσειρές +Name[eo]=Tiparoj +Name[es]=Tipos de letra +Name[et]=Fondid +Name[eu]=Letra-tipoak +Name[fa]=قلمها +Name[fi]=Kirjasimet +Name[fr]=Polices +Name[fy]=Lettertypen +Name[ga]=Clónna +Name[gl]=Fontes +Name[he]=גופנים +Name[hi]=फ़ॉन्ट्स +Name[hr]=Fontovi +Name[hu]=Betűtípusok +Name[is]=Letur +Name[it]=Tipi di carattere +Name[ja]=フォント +Name[ka]=ფონტები +Name[kk]=Қаріптер +Name[km]=ពុម្ពអក្សរ +Name[ko]=글꼴 +Name[lo]=ຮູບແບບຕົວອັກສອນ +Name[lt]=Šriftai +Name[lv]=Fonti +Name[mk]=Фонтови +Name[mn]=Бичгүүд +Name[ms]=Fon +Name[nb]=Skrifttype +Name[nds]=Schriftoorden +Name[ne]=फन्ट +Name[nl]=Lettertypen +Name[nn]=Skrifttypar +Name[nso]=Difonto +Name[pa]=ਫੋਂਟ +Name[pl]=Czcionki +Name[pt]=Tipos de Letra +Name[pt_BR]=Fontes +Name[ro]=Fonturi +Name[ru]=Шрифты +Name[rw]=Imyandikire +Name[se]=Fonttat +Name[sk]=Písma +Name[sl]=Pisave +Name[sr]=Фонтови +Name[sr@Latn]=Fontovi +Name[ss]=Timo tetinhlamvu temagama +Name[sv]=Teckensnitt +Name[ta]=எழுத்துருக்கள் +Name[tg]=Ҳарфҳо +Name[th]=แบบอักษร +Name[tr]=Yazıtipleri +Name[tt]=Yazu +Name[uk]=Шрифти +Name[uz]=Shriftlar +Name[uz@cyrillic]=Шрифтлар +Name[ven]=Fontu +Name[vi]=Phông chữ +Name[wa]=Fontes +Name[xh]=Uhlobo lwamagama +Name[zh_CN]=字体 +Name[zh_TW]=字型 +Name[zu]=Izinhlobo zamagama +Open=false +X-KDE-TreeModule=Directory +X-KDE-KonqSidebarModule=konqsidebar_tree diff --git a/kcontrol/kfontinst/kio/fonts.protocol b/kcontrol/kfontinst/kio/fonts.protocol new file mode 100644 index 000000000..7f54dd0cc --- /dev/null +++ b/kcontrol/kfontinst/kio/fonts.protocol @@ -0,0 +1,18 @@ +[Protocol] +exec=kio_fonts +protocol=fonts +input=none +output=filesystem +listing=Name,Type,Size,Date,AccessDate,Access,Owner,Group,Link +reading=true +writing=true +makedir=false +deleting=true +moving=true +linking=false +copyToFile=false +copyFromFile=true +Icon=fonts +defaultMimetype=application/octet-stream +maxInstances=1 +Class=:local diff --git a/kcontrol/kfontinst/kio/package.desktop b/kcontrol/kfontinst/kio/package.desktop new file mode 100644 index 000000000..4ee3543de --- /dev/null +++ b/kcontrol/kfontinst/kio/package.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Type=MimeType +MimeType=fonts/package +Icon=font +Patterns=*.fonts.tar.gz +Comment=Fonts Package +Comment[af]=Skriftipes Paket +Comment[ar]=حزمة المحارف +Comment[be]=Пакет шрыфтоў +Comment[bg]=Пакет с шрифтове +Comment[bn]=ফন্ট প্যাকেজ +Comment[bs]=Paket fontova +Comment[ca]=Paquet de lletres +Comment[cs]=Balík písem +Comment[csb]=Paczét fòntów +Comment[da]=Skrifttypepakke +Comment[de]=Schriftartenpaket +Comment[el]=Πακέτο γραμματοσειρών +Comment[eo]=Tiparpakaĵo +Comment[es]=Paquete de tipos de letra +Comment[et]=Fondipakett +Comment[eu]=Letra-tipoen paketea +Comment[fa]=بستۀ قلمها +Comment[fi]=Kirjasinpaketti +Comment[fr]=Paquet de polices +Comment[fy]=Lettertypenpakket +Comment[ga]=Pacáiste na gClónna +Comment[gl]=Pacote das Fontes +Comment[he]=חבילת גופנים +Comment[hr]=Paket fontova +Comment[hu]=Betűtípuscsomag +Comment[id]=Paket Font +Comment[is]=Leturpakki +Comment[it]=Pacchetto tipi di caratteri +Comment[ja]=フォントパッケージ +Comment[ka]=შრიფტების პაკეტი +Comment[kk]=Қаріп дестесі +Comment[km]=កញ្ចប់​ពុម្ពអក្សរ +Comment[lt]=Šriftų paketas +Comment[mk]=Пакет со фонтови +Comment[ms]=Pakej Fon +Comment[nb]=Pakke for skrifttyper +Comment[nds]=Schriftoorden-Paket +Comment[ne]=फन्ट प्याकेज +Comment[nl]=Lettertypenpakket +Comment[nn]=Pakke for skrifter +Comment[pa]=ਫੋਂਟ ਪੈਕੇਜ +Comment[pl]=Pakiet czcionek +Comment[pt]=Pacote de Tipos de Letra +Comment[pt_BR]=Pacote de Fontes +Comment[ro]=Pachet de fonturi +Comment[ru]=Пакет шрифтов +Comment[rw]=Rukomatanya y'Imyandikire +Comment[se]=Fontapáhkka +Comment[sk]=Balík písiem +Comment[sl]=Paket pisav +Comment[sr]=Пакет фонтова +Comment[sr@Latn]=Paket fontova +Comment[sv]=Teckensnittspaket +Comment[tg]=Бастаи ҳарфҳо +Comment[th]=แพคเกจแบบอักษร +Comment[tr]=Yazıtipi Paketi +Comment[tt]=Yazular Tuplaması +Comment[uk]=Пакунок шрифтів +Comment[uz]=Shrift +Comment[uz@cyrillic]=Шрифт +Comment[vi]=Gói Phông chữ +Comment[wa]=Paket di fontes +Comment[zh_CN]=字体包 +Comment[zh_TW]=字型套件 + +[Property::X-KDE-LocalProtocol] +Type=QString +Value=tar diff --git a/kcontrol/kfontinst/kio/system-folder.desktop b/kcontrol/kfontinst/kio/system-folder.desktop new file mode 100644 index 000000000..07bf9d703 --- /dev/null +++ b/kcontrol/kfontinst/kio/system-folder.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Comment=System Fonts Folder +Comment[af]=Stelsel Skrif tipe Gids +Comment[ar]=مجلد محارف النظام +Comment[be]=Тэчка сістэмных шрыфтоў +Comment[bg]=Директория за системните шрифтове +Comment[bn]=সিস্টেম ফন্ট ফোল্ডার +Comment[br]=Renkell fontoù ar reizhiad +Comment[bs]=Sistemski direktorij sa fontovima +Comment[ca]=Carpeta de lletres del sistema +Comment[cs]=Složka se systémovými písmy +Comment[csb]=Katalog systemòwëch fòntów +Comment[da]=Mappe til systemets skrifttyper +Comment[de]=Ordner für Systemschriften +Comment[el]=Φάκελος γραμματοσειρών συστήματος +Comment[eo]=Sistema tipardosierujo +Comment[es]=Carpeta de tipos de letra del sistema +Comment[et]=Süsteemi fontide kataloog +Comment[eu]=Sistemaren letra-tipoen karpeta +Comment[fa]=پوشۀ قلمهای سیستم +Comment[fi]=Järjestelmän kirjasinkansio +Comment[fr]=Dossier système de polices de caractères +Comment[fy]=Systeemlettertypenmap +Comment[ga]=Fillteán Clónna an Chórais +Comment[gl]=Cartafol das Fontes do Sistema +Comment[he]=תיקיית גופני מערכת +Comment[hi]=तंत्र फ़ॉन्ट्स फ़ोल्डर +Comment[hr]=Mapa sistemskih fontova +Comment[hu]=A rendszer betűtípusainak könyvtára +Comment[id]=Folder Font Sistem +Comment[is]=Kerfisleturmappa +Comment[it]=Cartella dei caratteri di sistema +Comment[ja]=システムフォントフォルダ +Comment[ka]=სისტემური ფონტების საქაღალდე +Comment[kk]=Жүйелік қаріптер қапшығы +Comment[km]=ថត​ពុម្ពអក្សរ​ប្រព័ន្ធ +Comment[lt]=Sistemos šriftų aplankas +Comment[lv]=Sistēmas fontu mape +Comment[mk]=Папка со системски фонтови +Comment[ms]=Folder Fon Sistem +Comment[mt]=Direttorju tal-fonts tas-sistema +Comment[nb]=Mappe for systemskrifttyper +Comment[nds]=Orner för de Systeemschriftoorden +Comment[ne]=फन्ट फोल्डर प्रणाली +Comment[nl]=Systeemlettertypenmap +Comment[nn]=Systemskriftmappe +Comment[pa]=ਸਿਸਟਮ ਫੋਂਟ ਫੋਲਡਰ +Comment[pl]=Katalog czcionek systemowych +Comment[pt]=Pasta de Tipos de Letra do Sistema +Comment[pt_BR]=Pasta de Fontes do Sistema +Comment[ro]=Folder fonturi de sistem +Comment[ru]=Папка системных шрифтов +Comment[rw]=Ububiko bw'Imyandikire Sisitemu +Comment[se]=Vuogádatfontamáhppa +Comment[sk]=Priečinok systémových písiem +Comment[sl]=Mapa za sistemske pisave +Comment[sr]=Фасцикла за системске фонтове +Comment[sr@Latn]=Fascikla za sistemske fontove +Comment[sv]=Systemteckensnittskatalog +Comment[ta]=அமைப்பு எழுத்துருக்கள் அடைவு +Comment[tg]=Системаи феҳристи ҳарфҳо +Comment[th]=โฟลเดอร์แฟ้มแบบอักษรของระบบ +Comment[tr]=Sistem Yazı Tipi Klasörü +Comment[tt]=Sistem Yazular Törgäge +Comment[uk]=Тека системних шрифтів +Comment[uz]=Tizim shriftlarining jildi +Comment[uz@cyrillic]=Тизим шрифтларининг жилди +Comment[vi]=Thư mục Phông chữ Hệ thống +Comment[wa]=Ridant di fontes do sistinme +Comment[zh_CN]=系统字体文件夹 +Comment[zh_TW]=系統字型資料夾 +Icon=folder_red +Type=MimeType +MimeType=fonts/system-folder +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory + diff --git a/kcontrol/kfontinst/lib/FcEngine.cpp b/kcontrol/kfontinst/lib/FcEngine.cpp new file mode 100644 index 000000000..0b3e51767 --- /dev/null +++ b/kcontrol/kfontinst/lib/FcEngine.cpp @@ -0,0 +1,1179 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "FcEngine.h" +#include "KfiConstants.h" +#ifdef HAVE_XFT +#include +#include +#include +#endif + +#define KFI_HAVE_OBLIQUE // Do we differentiate between Italic and Oblique? +#define KFI_HAVE_MEDIUM_WEIGHT // Do we differentiate between Medium and Normal weights? + +#define KFI_PREVIEW_GROUP "Preview Settings" +#define KFI_PREVIEW_STRING_KEY "String" + +#ifdef HAVE_XFT +#define KFI_DISPLAY(pix) (pix ? pix->x11Display() : QPaintDevice::x11AppDisplay()) +#endif + +namespace KFI +{ + +const int CFcEngine::constScalableSizes[]={8, 10, 12, 24, 36, 48, 64, 72, 96, 0 }; +const int CFcEngine::constDefaultAlphaSize=24; + +static int fcWeight(int weight) +{ + if(weight>1; + case FC_WEIGHT_LIGHT: + return QFont::Light; + default: + case FC_WEIGHT_NORMAL: + return QFont::Normal; + case FC_WEIGHT_MEDIUM: +#ifdef KFI_HAVE_MEDIUM_WEIGHT + return (QFont::Normal+QFont::DemiBold)>>1; +#endif + return QFont::Normal; + case FC_WEIGHT_SEMIBOLD: + return QFont::DemiBold; + case FC_WEIGHT_BOLD: + return QFont::Bold; + case FC_WEIGHT_ULTRABOLD: + return (QFont::Bold+QFont::Black)>>1; + case FC_WEIGHT_HEAVY: + return QFont::Black; + } +} + +#ifndef KFI_FC_NO_WIDTHS +static int fcWidth(int width) +{ + if(width3 && painter.fontMetrics().size(0, s).width()>width) + { + if(!addedElipses) + { + s.remove(s.length()-2, 2); + s.append("..."); + addedElipses=true; + } + else + s.remove(s.length()-4, 1); + } + painter.drawText(x, y, s); +} + +inline bool equal(double d1, double d2) +{ + return (fabs(d1 - d2) < 0.0001); +} + +inline bool equalWeight(int a, int b) +{ + return a==b || fcWeight(a)==fcWeight(b); +} + +#ifndef KFI_FC_NO_WIDTHS +inline bool equalWidth(int a, int b) +{ + return a==b || fcWidth(a)==fcWidth(b); +} +#endif + +inline bool equalSlant(int a, int b) +{ + return a==b || fcSlant(a)==fcSlant(b); +} + +#ifdef HAVE_XFT +static bool drawChar(QPixmap &pix, XftDraw *xftDraw, XftFont *xftFont, XftColor *xftCol, const QString &text, int pos, + int &x, int &y, int w, int h, int fSize, int offset) +{ + XGlyphInfo extents; + const FcChar16 *str=(FcChar16 *)(&(text.ucs2()[pos])); + + XftTextExtents16(pix.x11Display(), xftFont, str, 1, &extents); + + if(x+extents.width+2>w) + { + x=offset; + y+=fSize; + } + + if(y+offset0) + { + y+=extents.height+offset; + return true; + } + return false; +} + +static bool drawGlyph(QPixmap &pix, XftDraw *xftDraw, XftFont *xftFont, XftColor *xftCol, FT_UInt i, + int &x, int &y, int &w, int &h, int fSize, int offset) +{ + XGlyphInfo extents; + + XftGlyphExtents(pix.x11Display(), xftFont, &i, 1, &extents); + + if(x+extents.width+2>w) + { + x=offset; + y+=fSize; + } + + if(y+offsetcharset, str[ch].unicode())) + return false; + return true; +} +#endif + +CFcEngine::CFcEngine() + : itsIndex(-1), + itsIndexCount(1) +{ +} + +CFcEngine::~CFcEngine() +{ + // Clear any fonts that may have been added... + FcConfigAppFontClear(FcConfigGetCurrent()); +} + +QString CFcEngine::getName(const KURL &url, int faceNo) +{ + if(url!=itsLastUrl || faceNo!=itsIndex) + parseUrl(url, faceNo); + + return itsDescriptiveName; +} + +#ifdef HAVE_XFT +bool CFcEngine::draw(const KURL &url, int w, int h, QPixmap &pix, int faceNo, bool thumb) +{ + bool rv=false; + + if((url==itsLastUrl && faceNo==itsIndex) || parseUrl(url, faceNo)) + { + rv=true; + + if(!itsInstalled) // Then add to fontconfig's list, so that Xft can display it... + { + FcInitReinitialize(); + FcConfigAppFontAddFile(FcConfigGetCurrent(), (const FcChar8 *)(itsName.utf8().data())); + } + + if(thumb && (w!=h || h>128)) + thumb=false; + + int offset=thumb + ? h<=32 + ? 2 + : 3 + : 4, + x=offset, y=offset; + + pix.resize(w, h); + pix.fill(Qt::white); + + QPainter painter(&pix); + + getSizes(&pix); + + if(itsSizes.size()) + { + XRenderColor xrenderCol; + XftColor xftCol; + + xrenderCol.red=xrenderCol.green=xrenderCol.blue=0; + xrenderCol.alpha=0xffff; + XftColorAllocValue(pix.x11Display(), DefaultVisual(pix.x11Display(), + pix.x11Screen()), + DefaultColormap(pix.x11Display(), pix.x11Screen()), + &xrenderCol, &xftCol); + + XftDraw *xftDraw=XftDrawCreate(pix.x11Display(), (Pixmap)(pix.handle()), + (Visual*)(pix.x11Visual()), pix.x11Colormap()); + + if(xftDraw) + { + XftFont *xftFont=NULL; + bool drawGlyphs=false; + + if(thumb) + { + QString text(i18n("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789")); + + // + // Calculate size of text... + int fSize= h <= 32 + ? h-(offset*2) // 1 line of chars... + : h <= 64 + ? (h-(offset*3))/2 // 2 lines... + : (h-(offset*4))/3; // 3 lines or more + + if(!itsScalable) // Then need to get nearest size... + { + int bSize=fSize; + + for(unsigned int s=0; snum_glyphs && ynum_glyphs && yh) + stop=true; + else + { + if(x+extents.width0) + x+=extents.width+space; + } + if(x>=w || i==face->num_glyphs-1) + { + y+=itsSizes[s]+offset; + x=offset; + break; + } + } + + XftUnlockFace(xftFont); + } + } + else + drawString(pix, xftDraw, xftFont, &xftCol, previewString, x, y, h, offset); + XftFontClose(pix.x11Display(), xftFont); + } + } + } + } + + XftDrawDestroy(xftDraw); + } + } + } + + return rv; +} +#endif + +QString CFcEngine::getPreviewString() +{ + KConfig cfg(KFI_UI_CFG_FILE); + + cfg.setGroup(KFI_PREVIEW_GROUP); + + QString str(cfg.readEntry(KFI_PREVIEW_STRING_KEY)); + + return str.isEmpty() ? i18n("A sentence that uses all of the letters of the alphabet", + "The quick brown fox jumps over the lazy dog") + : str; +} + +void CFcEngine::setPreviewString(const QString &str) +{ + KConfig cfg(KFI_UI_CFG_FILE); + + cfg.setGroup(KFI_PREVIEW_GROUP); + cfg.writeEntry(KFI_PREVIEW_STRING_KEY, str); +} + +QString CFcEngine::getUppercaseLetters() +{ + return i18n("All of the letters of the alphabet, uppercase", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); +} + +QString CFcEngine::getLowercaseLetters() +{ + return i18n("All of the letters of the alphabet, lowercase", "abcdefghijklmnopqrstuvwxyz"); +} + +QString CFcEngine::getPunctuation() +{ + return i18n("Numbers and characters", "0123456789.:,;(*!?'/\\\")£$€%^&-+@~#<>{}[]"); +} + +QString CFcEngine::getFcString(FcPattern *pat, const char *val, int faceNo) +{ + QString rv; + FcChar8 *fcStr; + + if(FcResultMatch==FcPatternGetString(pat, val, faceNo, &fcStr)) + rv=QString::fromUtf8((char *)fcStr); + + return rv; +} + +QString CFcEngine::createName(FcPattern *pat, int faceNo) +{ +//CPD: TODO: the names *need* to match up with kfontchooser's... + QString name(getFcString(pat, FC_FAMILY, faceNo)), + str; + int intVal; + bool comma=false; + + if (FcResultMatch==FcPatternGetInteger(pat, FC_WEIGHT, faceNo, &intVal)) + { + str=weightStr(intVal); + if(!str.isEmpty()) + { + name+=QString(", ")+str; + comma=true; + } + } + + if (FcResultMatch==FcPatternGetInteger(pat, FC_SLANT, faceNo, &intVal)) + { + str=slantStr(intVal); + if(!str.isEmpty()) + { + if(!comma) + { + name+=QChar(','); + comma=true; + } + name+=QChar(' ')+str; + } + } + +#ifndef KFI_FC_NO_WIDTHS + if (FcResultMatch==FcPatternGetInteger(pat, FC_WIDTH, faceNo, &intVal)) + { + str=widthStr(intVal); + if(!str.isEmpty()) + name+=QChar(' ')+str; + } +#endif + + return name; +} + +QString CFcEngine::weightStr(int weight, bool emptyNormal) +{ + switch(fcWeight(weight)) + { + case FC_WEIGHT_THIN: + return i18n(KFI_WEIGHT_THIN); + case FC_WEIGHT_ULTRALIGHT: + return i18n(KFI_WEIGHT_ULTRALIGHT); + case FC_WEIGHT_LIGHT: + return i18n(KFI_WEIGHT_LIGHT); + case FC_WEIGHT_NORMAL: + return emptyNormal ? QString::null : i18n(KFI_WEIGHT_NORMAL); + case FC_WEIGHT_MEDIUM: + return i18n(KFI_WEIGHT_MEDIUM); + case FC_WEIGHT_DEMIBOLD: + return i18n(KFI_WEIGHT_SEMIBOLD); + case FC_WEIGHT_BOLD: + return i18n(KFI_WEIGHT_BOLD); + case FC_WEIGHT_ULTRABOLD: + return i18n(KFI_WEIGHT_ULTRABOLD); + default: + return i18n(KFI_WEIGHT_HEAVY); + } +} + +#ifndef KFI_FC_NO_WIDTHS +QString CFcEngine::widthStr(int width, bool emptyNormal) +{ + switch(fcWidth(width)) + { + case FC_WIDTH_ULTRACONDENSED: + return i18n(KFI_WIDTH_ULTRACONDENSED); + case FC_WIDTH_EXTRACONDENSED: + return i18n(KFI_WIDTH_EXTRACONDENSED); + case FC_WIDTH_CONDENSED: + return i18n(KFI_WIDTH_CONDENSED); + case FC_WIDTH_SEMICONDENSED: + return i18n(KFI_WIDTH_SEMICONDENSED); + case FC_WIDTH_NORMAL: + return emptyNormal ? QString::null : i18n(KFI_WIDTH_NORMAL); + case FC_WIDTH_SEMIEXPANDED: + return i18n(KFI_WIDTH_SEMIEXPANDED); + case FC_WIDTH_EXPANDED: + return i18n(KFI_WIDTH_EXPANDED); + case FC_WIDTH_EXTRAEXPANDED: + return i18n(KFI_WIDTH_EXTRAEXPANDED); + default: + return i18n(KFI_WIDTH_ULTRAEXPANDED); + } +} +#endif + +QString CFcEngine::slantStr(int slant, bool emptyNormal) +{ + switch(fcSlant(slant)) + { + case FC_SLANT_OBLIQUE: + return i18n(KFI_SLANT_OBLIQUE); + case FC_SLANT_ITALIC: + return i18n(KFI_SLANT_ITALIC); + default: + return emptyNormal ? QString::null : i18n(KFI_SLANT_ROMAN); + } +} + +QString CFcEngine::spacingStr(int spacing) +{ + switch(fcSpacing(spacing)) + { + case FC_MONO: + return i18n(KFI_SPACING_MONO); + case FC_CHARCELL: + return i18n(KFI_SPACING_CHARCELL); + default: + return i18n(KFI_SPACING_PROPORTIONAL); + } +} + +bool CFcEngine::getInfo(const KURL &url, int faceNo, QString &full, QString &family, QString &foundry, QString &weight, +#ifndef KFI_FC_NO_WIDTHS + QString &width, +#endif + QString &spacing, QString &slant) +{ + if(parseUrl(url, faceNo, true)) + { + full=itsDescriptiveName; + if(url.isLocalFile()) + { + int pos; + + if(-1==(pos=itsDescriptiveName.find(", "))) // No style information... + family=itsDescriptiveName; + else + family=itsDescriptiveName.left(pos); + } + else + family=itsName; + weight=weightStr(itsWeight, false); +#ifndef KFI_FC_NO_WIDTHS + width=widthStr(itsWidth, false); +#endif + slant=slantStr(itsSlant, false); + spacing=spacingStr(itsSpacing); + foundry=itsFoundry; + return true; + } + + return false; +} + +QFont CFcEngine::getQFont(const QString &name, int size) +{ + parseName(name, 0, false); + + QFont font(itsName, size, fcToQtWeight(itsWeight), fcToQtSlant(itsSlant)); + +#ifndef KFI_FC_NO_WIDTHS + font.setStretch(fcToQtWidth(itsWidth)); +#endif + return font; +} + +bool CFcEngine::parseUrl(const KURL &url, int faceNo, bool all) +{ + FcInitLoadConfigAndFonts(); + + // Possible urls: + // + // fonts:/times.ttf + // fonts:/System/times.ttf + // file:/home/wibble/hmm.ttf + // + if(KFI_KIO_FONTS_PROTOCOL==url.protocol()) + { + KIO::UDSEntry udsEntry; + QString name; + + FcInitReinitialize(); + if(KIO::NetAccess::stat(url, udsEntry, NULL)) // Need to stat the url to get its font name... + { + KIO::UDSEntry::Iterator it(udsEntry.begin()), + end(udsEntry.end()); + + for( ; it != end; ++it) + if (KIO::UDS_NAME==(*it).m_uds) + { + name=(*it).m_str; + break; + } + } + + if(!name.isEmpty()) + { + parseName(name, faceNo, all); + itsInstalled=true; + } + else + return false; + } + else if(url.isLocalFile()) + { + // Now lets see if its from the thumbnail job! if so, then file will just contain the URL! + QFile file(url.path()); + bool isThumbnailUrl=false; + + if(file.size()<2048 && file.open(IO_ReadOnly)) // Urls should be less than 2k, and fonts usually above! + { + QString thumbUrl; + QTextStream stream(&file); + + thumbUrl=stream.readLine(); + isThumbnailUrl=0==thumbUrl.find(KFI_KIO_FONTS_PROTOCOL) && parseUrl(KURL(thumbUrl), faceNo, all); + file.close(); + } + + if(!isThumbnailUrl) // Its not a thumbnail, so read the real font file... + { + itsName=url.path(); + + int count; + FcPattern *pat=FcFreeTypeQuery((const FcChar8 *)(QFile::encodeName(itsName).data()), 0, NULL, &count); + + itsWeight=FC_WEIGHT_NORMAL; +#ifndef KFI_FC_NO_WIDTHS + itsWidth=FC_WIDTH_NORMAL; +#endif + itsSlant=FC_SLANT_ROMAN; + itsSpacing=FC_PROPORTIONAL; + + if(pat) + { + itsDescriptiveName=createName(pat, faceNo); + + if(all) + { + FcPatternGetInteger(pat, FC_WEIGHT, faceNo, &itsWeight); + FcPatternGetInteger(pat, FC_SLANT, faceNo, &itsSlant); +#ifndef KFI_FC_NO_WIDTHS + FcPatternGetInteger(pat, FC_WIDTH, faceNo, &itsWidth); +#endif + FcPatternGetInteger(pat, FC_SPACING, faceNo, &itsSpacing); + itsFoundry=getFcString(pat, FC_FOUNDRY, faceNo); + } + + FcPatternDestroy(pat); + } + else + itsDescriptiveName=QString::null; + + itsInstalled=false; + itsIndex=faceNo; + } + } + else + return false; + + itsLastUrl=url; + return true; +} + +void CFcEngine::parseName(const QString &name, int faceNo, bool all) +{ + int pos; + + itsDescriptiveName=name; + itsSpacing=FC_PROPORTIONAL; + if(-1==(pos=name.find(", "))) // No style information... + { + itsWeight=FC_WEIGHT_NORMAL; +#ifndef KFI_FC_NO_WIDTHS + itsWidth=FC_WIDTH_NORMAL; +#endif + itsSlant=FC_SLANT_ROMAN; + itsName=name; + } + else + { + QString style(name.mid(pos+2)); + + itsWeight=strToWeight(style, style); +#ifndef KFI_FC_NO_WIDTHS + itsWidth=strToWidth(style, style); +#endif + itsSlant=strToSlant(style); + itsName=name.left(pos); + } + + if(all) + { + FcObjectSet *os = FcObjectSetBuild(FC_SPACING, FC_FOUNDRY, (void *)0); + FcPattern *pat = FcPatternBuild(NULL, + FC_FAMILY, FcTypeString, (const FcChar8 *)(itsName.utf8().data()), + FC_WEIGHT, FcTypeInteger, itsWeight, + FC_SLANT, FcTypeInteger, itsSlant, +#ifndef KFI_FC_NO_WIDTHS + FC_WIDTH, FcTypeInteger, itsWidth, +#endif + NULL); + FcFontSet *set = FcFontList(0, pat, os); + + FcPatternDestroy(pat); + FcObjectSetDestroy(os); + + if(set && set->nfont) + { + FcPatternGetInteger(set->fonts[0], FC_SPACING, faceNo, &itsSpacing); + itsFoundry=getFcString(set->fonts[0], FC_FOUNDRY, faceNo); + } + } + + itsIndex=0; // Doesn't matter, as we're gonna use font name! + itsLastUrl=KURL(); +} + +#ifdef HAVE_XFT +XftFont * CFcEngine::getFont(int size, QPixmap *pix) +{ + if(itsInstalled) + return XftFontOpen(KFI_DISPLAY(pix), 0, + FC_FAMILY, FcTypeString, (const FcChar8 *)(itsName.utf8().data()), + FC_WEIGHT, FcTypeInteger, itsWeight, + FC_SLANT, FcTypeInteger, itsSlant, +#ifndef KFI_FC_NO_WIDTHS + FC_WIDTH, FcTypeInteger, itsWidth, +#endif + FC_PIXEL_SIZE, FcTypeDouble, (double)size, + NULL); + else + { + FcPattern *pattern = FcPatternBuild(NULL, + FC_FILE, FcTypeString, QFile::encodeName(itsName).data(), + FC_INDEX, FcTypeInteger, itsIndex, + FC_PIXEL_SIZE, FcTypeDouble, (double)size, + NULL); + return XftFontOpenPattern(KFI_DISPLAY(pix), pattern); + } +} + +void CFcEngine::getSizes(QPixmap *pix) +{ + static const int constNumSizes=11; + static const int constNumSizeRanges=2; + static const int constSizes[constNumSizeRanges][constNumSizes]= { {8, 10, 12, 14, 16, 18, 24, 36, 48, 72, 96}, + {7, 9, 11, 13, 15, 17, 23, 35, 47, 71, 95} }; + XftFont *f=getFont(8, pix); + + itsScalable=FcTrue; + + itsSizes.clear(); + itsAlphaSize=0; + + if(f) + { + bool gotSizes=false; + + if(itsInstalled) + { + if(FcResultMatch!=FcPatternGetBool(f->pattern, FC_SCALABLE, 0, &itsScalable)) + itsScalable=FcFalse; + } + else + { + FT_Face face=XftLockFace(f); + + if(face) + { + itsIndexCount=face->num_faces; + if(!(itsScalable=FT_IS_SCALABLE(face))) + { + int numSizes=face->num_fixed_sizes, + size; + + gotSizes=true; + + itsSizes.reserve(numSizes); + + for (size=0; sizeavailable_sizes[size].height); + if (face->available_sizes[size].height<=constDefaultAlphaSize) + itsAlphaSize=face->available_sizes[size].height; + } + } + XftUnlockFace(f); + } + } + + XftFontClose(KFI_DISPLAY(pix), f); + + // + // Hmm... its not a scalable font, and its installed. So to get list of sizes, iterate through a list of standard + // sizes, and ask fontconfig for a font of that sizes. Then check the retured size, family, etc is what was asked + // for! + if(!itsScalable && !gotSizes) + { + itsSizes.reserve(constNumSizes); + + for(int l=0; lpattern, FC_PIXEL_SIZE, 0, &px) && equal(constSizes[l][i], px) && + FcResultMatch==FcPatternGetInteger(f->pattern, FC_WEIGHT, 0, &iv) && equalWeight(iv,itsWeight) && + FcResultMatch==FcPatternGetInteger(f->pattern, FC_SLANT, 0, &iv) && equalSlant(iv, itsSlant) && +#ifndef KFI_FC_NO_WIDTHS + FcResultMatch==FcPatternGetInteger(f->pattern, FC_WIDTH, 0, &iv) && equalWidth(iv, itsWidth) && +#endif + FcResultMatch==FcPatternGetString(f->pattern, FC_FAMILY, 0, &str) && str && + QString::fromUtf8((char *)str)==itsName) + { + itsSizes.push_back(constSizes[l][i]); + gotSizes=true; + if(constSizes[l][i]<=constDefaultAlphaSize) + itsAlphaSize=constSizes[l][i]; + } + XftFontClose(KFI_DISPLAY(pix), f); + } + } + } + } + + if(itsScalable) + { + itsSizes.reserve(constNumSizes); + + for (int i=0; constScalableSizes[i]; ++i) + itsSizes.push_back(point2Pixel(constScalableSizes[i])); + itsAlphaSize=constDefaultAlphaSize; + } +} +#endif + +} diff --git a/kcontrol/kfontinst/lib/FcEngine.h b/kcontrol/kfontinst/lib/FcEngine.h new file mode 100644 index 000000000..4a09b8a55 --- /dev/null +++ b/kcontrol/kfontinst/lib/FcEngine.h @@ -0,0 +1,118 @@ +#ifndef __FC_ENGINE_H__ +#define __FC_ENGINE_H__ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#if (FC_VERSION<20200) + +#define KFI_FC_NO_WIDTHS +#define KFI_FC_LIMITED_WEIGHTS + +#endif + +#ifdef KFI_FC_LIMITED_WEIGHTS + +#undef FC_WEIGHT_LIGHT +#define FC_WEIGHT_THIN 0 +#define FC_WEIGHT_EXTRALIGHT 40 +#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT +#define FC_WEIGHT_LIGHT 50 +#define FC_WEIGHT_BOOK 75 +#define FC_WEIGHT_REGULAR 80 +#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR +#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD +#define FC_WEIGHT_EXTRABOLD 205 +#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD +#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK + +#endif + +class QPixmap; + +#ifdef HAVE_XFT +typedef struct _XftFont XftFont; +#endif + +namespace KFI +{ + +class KDE_EXPORT CFcEngine +{ + public: + + CFcEngine(); + ~CFcEngine(); + +#ifdef HAVE_XFT + bool draw(const KURL &url, int w, int h, QPixmap &pix, int faceNo, bool thumb); +#endif + int getNumIndexes() { return itsIndexCount; } // Only valid after draw has been called! + QString getName(const KURL &url, int faceNo=0); + bool getInfo(const KURL &url, int faceNo, QString &full, QString &family, QString &foundry, QString &weight, +#ifndef KFI_FC_NO_WIDTHS + QString &width, +#endif + QString &spacing, QString &slant); + QFont getQFont(const QString &name, int size); + + const QValueVector & sizes() const { return itsSizes; } + int alphaSize() const { return itsAlphaSize; } + + static QString getPreviewString(); + static void setPreviewString(const QString &str); + static QString getUppercaseLetters(); + static QString getLowercaseLetters(); + static QString getPunctuation(); + static QString getFcString(FcPattern *pat, const char *val, int faceNo=0); + static QString createName(FcPattern *pat, int faceNo=0); + static QString weightStr(int weight, bool emptyNormal=true); +#ifndef KFI_FC_NO_WIDTHS + static QString widthStr(int width, bool emptyNormal=true); +#endif + static QString slantStr(int slant, bool emptyNormal=true); + static QString spacingStr(int spacing); + + static const int constScalableSizes[]; + static const int constDefaultAlphaSize; + + private: + + bool parseUrl(const KURL &url, int faceNo, bool all=false); + void parseName(const QString &name, int faceNo, bool all=false); +#ifdef HAVE_XFT + XftFont * getFont(int size, QPixmap *pix=NULL); + void getSizes(QPixmap *pix=NULL); +#endif + + private: + + bool itsInstalled; + QString itsName, + itsDescriptiveName, + itsFoundry; + int itsIndex, + itsIndexCount, + itsWeight, +#ifndef KFI_FC_NO_WIDTHS + itsWidth, +#endif + itsSlant, + itsSpacing, + itsAlphaSize; + QValueVector itsSizes; + KURL itsLastUrl; + FcBool itsScalable; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/lib/KfiConstants.h b/kcontrol/kfontinst/lib/KfiConstants.h new file mode 100644 index 000000000..fa7f6f1a0 --- /dev/null +++ b/kcontrol/kfontinst/lib/KfiConstants.h @@ -0,0 +1,73 @@ +#ifndef __KFI_CONSTANTS_H__ +#define __KFI_CONSTANTS_H__ + +#include + +#define KFI_CATALOGUE "kfontinst" + +// io-slave +#define KFI_KIO_FONTS_PROTOCOL "fonts" +#define KFI_KIO_FONTS_USER I18N_NOOP("Personal") +#define KFI_KIO_FONTS_SYS I18N_NOOP("System") +#define KFI_KIO_NO_CLEAR "?noclear" + +// Config +#define KFI_UI_CFG_FILE KFI_CATALOGUE"uirc" +#define KFI_CFG_FILE KFI_CATALOGUE"rc" +#define KFI_ROOT_CFG_DIR "/etc/fonts/" +#define KFI_ROOT_CFG_FILE KFI_ROOT_CFG_DIR KFI_CFG_FILE +#define KFI_CFG_X_KEY "ConfigureX" +#define KFI_CFG_GS_KEY "ConfigureGS" +#define KFI_DEFAULT_CFG_X true +#define KFI_DEFAULT_CFG_GS false + +// KIO::special + +namespace KFI +{ + +enum ESpecial +{ + SPECIAL_RECONFIG = 0, + SPECIAL_RESCAN = 1 +}; + +} + +// Font name... +#define KFI_WEIGHT_THIN I18N_NOOP("Thin") +#define KFI_WEIGHT_EXTRALIGHT I18N_NOOP("ExtraLight") +#define KFI_WEIGHT_ULTRALIGHT I18N_NOOP("UltraLight") +#define KFI_WEIGHT_LIGHT I18N_NOOP("Light") +#define KFI_WEIGHT_REGULAR I18N_NOOP("Regular") +#define KFI_WEIGHT_NORMAL I18N_NOOP("Normal") +#define KFI_WEIGHT_MEDIUM I18N_NOOP("Medium") +#define KFI_WEIGHT_DEMIBOLD I18N_NOOP("DemiBold") +#define KFI_WEIGHT_SEMIBOLD I18N_NOOP("SemiBold") +#define KFI_WEIGHT_BOLD I18N_NOOP("Bold") +#define KFI_WEIGHT_EXTRABOLD I18N_NOOP("ExtraBold") +#define KFI_WEIGHT_ULTRABOLD I18N_NOOP("UltraBold") +#define KFI_WEIGHT_BLACK I18N_NOOP("Black") +#define KFI_WEIGHT_HEAVY I18N_NOOP("Heavy") + +#define KFI_SLANT_ROMAN I18N_NOOP("Roman") +#define KFI_SLANT_ITALIC I18N_NOOP("Italic") +#define KFI_SLANT_OBLIQUE I18N_NOOP("Oblique") + +#define KFI_WIDTH_ULTRACONDENSED I18N_NOOP("UltraCondensed") +#define KFI_WIDTH_EXTRACONDENSED I18N_NOOP("ExtraCondensed") +#define KFI_WIDTH_CONDENSED I18N_NOOP("Condensed") +#define KFI_WIDTH_SEMICONDENSED I18N_NOOP("SemiCondensed") +#define KFI_WIDTH_NORMAL I18N_NOOP("Normal") +#define KFI_WIDTH_SEMIEXPANDED I18N_NOOP("SemiExpanded") +#define KFI_WIDTH_EXPANDED I18N_NOOP("Expanded") +#define KFI_WIDTH_EXTRAEXPANDED I18N_NOOP("ExtraExpanded") +#define KFI_WIDTH_ULTRAEXPANDED I18N_NOOP("UltraExpanded") + +#define KFI_SPACING_MONO I18N_NOOP("Monospaced") +#define KFI_SPACING_CHARCELL I18N_NOOP("Charcell") +#define KFI_SPACING_PROPORTIONAL I18N_NOOP("Proportional") + +#define KFI_UNKNOWN_FOUNDRY I18N_NOOP("Unknown") + +#endif diff --git a/kcontrol/kfontinst/lib/Makefile.am b/kcontrol/kfontinst/lib/Makefile.am new file mode 100644 index 000000000..55349b149 --- /dev/null +++ b/kcontrol/kfontinst/lib/Makefile.am @@ -0,0 +1,14 @@ +lib_LTLIBRARIES = libkfontinst.la + +libkfontinst_la_SOURCES = \ +Misc.cpp \ +FcEngine.cpp + +noinst_HEADERS = \ +Misc.h \ +FcEngine.h \ +KfiConstants.h + +libkfontinst_la_LIBADD = $(LIB_KDECORE) $(LIBFONTCONFIG_LIBS) $(LIBFREETYPE_LIBS) $(LIB_KIO) $(LIBXFT_LIB) +libkfontinst_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIBFONTCONFIG_RPATH) $(LIBFREETYPE_RPATH) -no-undefined +AM_CPPFLAGS= $(all_includes) $(LIBFREETYPE_CFLAGS) $(LIBFONTCONFIG_CFLAGS) -D_LARGEFILE64_SOURCE diff --git a/kcontrol/kfontinst/lib/Misc.cpp b/kcontrol/kfontinst/lib/Misc.cpp new file mode 100644 index 000000000..4606ad0ca --- /dev/null +++ b/kcontrol/kfontinst/lib/Misc.cpp @@ -0,0 +1,238 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Namespace : KFI::Misc +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 01/05/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "Misc.h" +#include +#include +#include +#include +#include +#include + +namespace KFI +{ + +namespace Misc +{ + +QString linkedTo(const QString &i) +{ + QString d; + + if(isLink(i)) + { + char buffer[1000]; + int n=readlink(QFile::encodeName(i), buffer, 1000); + + if(n!=-1) + { + buffer[n]='\0'; + d=buffer; + } + } + + return d; +} + +QString dirSyntax(const QString &d) +{ + if(!d.isEmpty()) + { + QString ds(d); + + ds.replace("//", "/"); + + int slashPos=ds.findRev('/'); + + if(slashPos!=(((int)ds.length())-1)) + ds.append('/'); + + return ds; + } + + return d; +} + +QString xDirSyntax(const QString &d) +{ + if(!d.isEmpty()) + { + QString ds(d); + + ds.replace("//", "/"); + + int slashPos=ds.findRev('/'); + + if(slashPos==(((int)ds.length())-1)) + ds.remove(slashPos, 1); + return ds; + } + + return d; +} + +QString getDir(const QString &f) +{ + QString d(f); + + int slashPos=d.findRev('/'); + + if(slashPos!=-1) + d.remove(slashPos+1, d.length()); + + return dirSyntax(d); +} + +QString getFile(const QString &f) +{ + QString d(f); + + int slashPos=d.findRev('/'); + + if(slashPos!=-1) + d.remove(0, slashPos+1); + + return d; +} + +bool createDir(const QString &dir) +{ + // + // Clear any umask before dir is created + mode_t oldMask=umask(0000); + bool status=KStandardDirs::makeDir(dir, DIR_PERMS); + // Reset umask + ::umask(oldMask); + return status; +} + +bool doCmd(const QString &cmd, const QString &p1, const QString &p2, const QString &p3) +{ + KProcess proc; + + proc << cmd; + + if(!p1.isEmpty()) + proc << p1; + if(!p2.isEmpty()) + proc << p2; + if(!p3.isEmpty()) + proc << p3; + + proc.start(KProcess::Block); + + return proc.normalExit() && proc.exitStatus()==0; +} + +QString changeExt(const QString &f, const QString &newExt) +{ + QString newStr(f); + int dotPos=newStr.findRev('.'); + + if(-1==dotPos) + newStr+=QChar('.')+newExt; + else + { + newStr.remove(dotPos+1, newStr.length()); + newStr+=newExt; + } + return newStr; +} + +void createBackup(const QString &f) +{ + const QString constExt(".bak"); + + if(!fExists(f+constExt) && fExists(f)) + doCmd("cp", "-f", f, f+constExt); +} + +// +// Get a list of files associated with a file, e.g.: +// +// File: /home/a/courier.pfa +// +// Associated: /home/a/courier.afm /home/a/courier.pfm +// +void getAssociatedUrls(const KURL &url, KURL::List &list, bool afmAndPfm, QWidget *widget) +{ + const char *afm[]={"afm", "AFM", "Afm", "AFm", "AfM", "aFM", "aFm", "afM", NULL}, + *pfm[]={"pfm", "PFM", "Pfm", "PFm", "PfM", "pFM", "pFm", "pfM", NULL}; + bool gotAfm=false, + localFile=url.isLocalFile(); + int e; + + for(e=0; afm[e]; ++e) + { + KURL statUrl(url); + KIO::UDSEntry uds; + + statUrl.setPath(changeExt(url.path(), afm[e])); + + if(localFile ? fExists(statUrl.path()) : KIO::NetAccess::stat(statUrl, uds, widget)) + { + list.append(statUrl); + gotAfm=true; + break; + } + } + + if(afmAndPfm || !gotAfm) + for(e=0; pfm[e]; ++e) + { + KURL statUrl(url); + KIO::UDSEntry uds; + + statUrl.setPath(changeExt(url.path(), pfm[e])); + if(localFile ? fExists(statUrl.path()) : KIO::NetAccess::stat(statUrl, uds, widget)) + { + list.append(statUrl); + break; + } + } +} + +time_t getTimeStamp(const QString &item) +{ + KDE_struct_stat info; + + return !item.isEmpty() && 0==KDE_lstat(QFile::encodeName(item), &info) ? info.st_mtime : 0; +} + + +bool check(const QString &path, unsigned int fmt, bool checkW) +{ + KDE_struct_stat info; + QCString pathC(QFile::encodeName(path)); + + return 0==KDE_lstat(pathC, &info) && (info.st_mode&S_IFMT)==fmt && (!checkW || 0==::access(pathC, W_OK)); +} + +} + +} diff --git a/kcontrol/kfontinst/lib/Misc.h b/kcontrol/kfontinst/lib/Misc.h new file mode 100644 index 000000000..a624f44f9 --- /dev/null +++ b/kcontrol/kfontinst/lib/Misc.h @@ -0,0 +1,76 @@ +#ifndef __MISC_H__ +#define __MISC_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Namespace : KFI::Misc +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 01/05/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + +class QWidget; + +namespace KFI +{ + +namespace Misc +{ + enum EConstants + { + FILE_PERMS = 0644, + DIR_PERMS = 0755 + }; + + extern KDE_EXPORT bool check(const QString &path, unsigned int fmt, bool checkW=false); + inline KDE_EXPORT bool fExists(const QString &p) { return check(p, S_IFREG, false); } + inline KDE_EXPORT bool dExists(const QString &p) { return check(p, S_IFDIR, false); } + inline KDE_EXPORT bool fWritable(const QString &p) { return check(p, S_IFREG, true); } + inline KDE_EXPORT bool dWritable(const QString &p) { return check(p, S_IFDIR, true); } + inline KDE_EXPORT bool isLink(const QString &i) { return check(i, S_IFLNK, false); } + extern KDE_EXPORT QString linkedTo(const QString &i); + extern KDE_EXPORT QString dirSyntax(const QString &d); // Has trailing slash: /file/path/ + extern KDE_EXPORT QString xDirSyntax(const QString &d); // No trailing slash: /file/path + inline KDE_EXPORT QString fileSyntax(const QString &f) { return xDirSyntax(f); } + extern KDE_EXPORT QString getDir(const QString &f); + extern KDE_EXPORT QString getFile(const QString &f); + extern KDE_EXPORT bool createDir(const QString &dir); + extern KDE_EXPORT QString changeExt(const QString &f, const QString &newExt); + extern KDE_EXPORT bool doCmd(const QString &cmd, const QString &p1=QString::null, const QString &p2=QString::null, const QString &p3=QString::null); + inline KDE_EXPORT bool root() { return 0==getuid(); } + extern KDE_EXPORT void getAssociatedUrls(const KURL &url, KURL::List &list, bool afmAndPfm=true, QWidget *widget=NULL); + extern KDE_EXPORT void createBackup(const QString &f); + extern KDE_EXPORT time_t getTimeStamp(const QString &item); +} + +} + +#endif diff --git a/kcontrol/kfontinst/thumbnail/FontThumbnail.cpp b/kcontrol/kfontinst/thumbnail/FontThumbnail.cpp new file mode 100644 index 000000000..86794377b --- /dev/null +++ b/kcontrol/kfontinst/thumbnail/FontThumbnail.cpp @@ -0,0 +1,73 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontThumbnail +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 02/08/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "FontThumbnail.h" +#include "KfiConstants.h" +#include +#include +#include +#include +#include +#include +#include + +extern "C" +{ + KDE_EXPORT ThumbCreator *new_creator() + { + return new KFI::CFontThumbnail; + } +} + +namespace KFI +{ + +CFontThumbnail::CFontThumbnail() +{ + KGlobal::locale()->insertCatalogue(KFI_CATALOGUE); +} + +bool CFontThumbnail::create(const QString &path, int width, int height, QImage &img) +{ + QPixmap pix; + + if(itsEngine.draw(KURL(path), width, height, pix, 0, true)) + { + img=pix.convertToImage(); + return true; + } + + return false; +} + +ThumbCreator::Flags CFontThumbnail::flags() const +{ + return DrawFrame; +} + +} diff --git a/kcontrol/kfontinst/thumbnail/FontThumbnail.h b/kcontrol/kfontinst/thumbnail/FontThumbnail.h new file mode 100644 index 000000000..c2d1294e4 --- /dev/null +++ b/kcontrol/kfontinst/thumbnail/FontThumbnail.h @@ -0,0 +1,55 @@ +#ifndef __FONT_THUMBNAIL__H__ +#define __FONT_THUMBNAIL__H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontThumbnail +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 02/08/2003 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include "FcEngine.h" + +namespace KFI +{ + +class CFontThumbnail : public ThumbCreator +{ + public: + + CFontThumbnail(); + ~CFontThumbnail() {} + + bool create(const QString &path, int width, int height, QImage &img); + Flags flags() const; + + private: + + CFcEngine itsEngine; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/thumbnail/Makefile.am b/kcontrol/kfontinst/thumbnail/Makefile.am new file mode 100644 index 000000000..c7608e843 --- /dev/null +++ b/kcontrol/kfontinst/thumbnail/Makefile.am @@ -0,0 +1,14 @@ +kde_module_LTLIBRARIES = fontthumbnail.la + +fontthumbnail_la_SOURCES = FontThumbnail.cpp +fontthumbnail_la_LIBADD = $(LIBFREETYPE_LIBS) $(LIB_KDECORE) $(LIB_KIO) ../lib/libkfontinst.la +fontthumbnail_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIBFREETYPE_RPATH) -module $(KDE_PLUGIN) +METASOURCES = AUTO + +noinst_HEADERS = FontThumbnail.h + +kdelnkdir = $(kde_servicesdir) + +kde_services_DATA = fontthumbnail.desktop + +AM_CPPFLAGS= -I$(srcdir)/../lib -I$(srcdir)/../../fonts $(all_includes) $(LIBFREETYPE_CFLAGS) diff --git a/kcontrol/kfontinst/thumbnail/fontthumbnail.desktop b/kcontrol/kfontinst/thumbnail/fontthumbnail.desktop new file mode 100644 index 000000000..cdda5c4d1 --- /dev/null +++ b/kcontrol/kfontinst/thumbnail/fontthumbnail.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Type=Service +Name=Font Files +Name[af]=Skrif tipe Lêers +Name[ar]=ملفات المحرف +Name[az]=Yazı Növü Faylları +Name[be]=Файлы шрыфтоў +Name[bg]=Файлове с шрифтове +Name[bn]=ফন্ট ফাইল +Name[br]=Restroù Nodrezhoù +Name[bs]=Datoteke sa fontovima +Name[ca]=Fitxers de lletres +Name[cs]=Soubory s písmy +Name[csb]=Lopczi fòntów +Name[cy]=Ffeiliau Ffont +Name[da]=Skrifttypefiler +Name[de]=Schriftdatei +Name[el]=Αρχεία γραμματοσειρών +Name[eo]=Tipardosierojn +Name[es]=Archivos de tipos de letra +Name[et]=Fondifailid +Name[eu]=Letra-tipo fitxategiak +Name[fa]=پروندۀ قلمها +Name[fi]=Kirjasintiedostot +Name[fr]=Fichiers de polices +Name[fy]=Lettertypetriemmen +Name[ga]=Comhaid Chlófhoirne +Name[gl]=Ficheiros de Tipografias +Name[he]=קבצי גופנים +Name[hi]=फ़ॉन्ट फ़ाइलें +Name[hr]=Datoteke fontova +Name[hu]=Betűtípusfájlok +Name[id]=Berkas Font +Name[is]=Leturskrár +Name[it]=File dei tipi di carattere +Name[ja]=フォントファイル +Name[ka]=ფონტების ფაილები +Name[kk]=Қаріп файлдары +Name[km]=ឯកសារ​ពុម្ពអក្សរ +Name[ko]=글꼴 파일 +Name[lo]=ຄົ້ນຫາແຟ້ມ +Name[lt]=Šriftų bylos +Name[lv]=Fontu faili +Name[mk]=Датотеки со фонтови +Name[mn]=Бичгийн файл +Name[ms]=Fail Fon +Name[mt]=Fajls tal-fonts +Name[nb]=Skrifttypefiler +Name[nds]=Schriftoortdateien +Name[ne]=फन्ट फाइल +Name[nl]=Lettertypebestanden +Name[nn]=Skriftfiler +Name[nso]=Difaele tsa Fonto +Name[pa]=ਫੋਂਟ ਫਾਇਲਾਂ +Name[pl]=Pliki czcionek +Name[pt]=Ficheiros de Tipos de Letra +Name[pt_BR]=Arquivos de fonte +Name[ro]=Fișiere font +Name[ru]=Файлы шрифтов +Name[rw]=Amadosiye y'Imyandikire +Name[se]=Fontafiillat +Name[sk]=Súbory písiem +Name[sl]=Datoteke s pisavami +Name[sr]=Фајлови фонтова +Name[sr@Latn]=Fajlovi fontova +Name[sv]=Teckensnittsfiler +Name[ta]=எழுத்துரு கோப்புகள் +Name[tg]=Файлҳои ҳарф +Name[th]=แฟ้มแบบอักษร +Name[tr]=Yazıtipi Dosyaları +Name[tt]=Yazu Biremnäre +Name[uk]=Файли шрифтів +Name[uz]=Shrift-fayllari +Name[uz@cyrillic]=Шрифт-файллари +Name[ven]=Dzifaela dza Fontu +Name[vi]=Tập tin Phông chữ +Name[wa]=Fitchîs fontes +Name[xh]=Iifayile Zohlobo lwamagama +Name[zh_CN]=字体文件 +Name[zh_TW]=字型檔案 +Name[zu]=Amafayela ohlobo lwamagama +ServiceTypes=ThumbCreator +MimeTypes=application/x-font-ttf,application/x-font-type1,application/x-font-bdf,application/x-font-pcf,application/x-font-otf,application/x-font-ttc +X-KDE-Library=fontthumbnail +CacheThumbnail=false diff --git a/kcontrol/kfontinst/viewpart/FontPreview.cpp b/kcontrol/kfontinst/viewpart/FontPreview.cpp new file mode 100644 index 000000000..ddd8171cb --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontPreview.cpp @@ -0,0 +1,118 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontPreview +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 04/11/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "FontPreview.h" +#include +#include +#include +#include +#include + +namespace KFI +{ + +CFontPreview::CFontPreview(QWidget *parent, const char *name) + : QWidget(parent, name), + itsCurrentFace(1), + itsLastWidth(0), + itsLastHeight(0), + itsBgndCol(eraseColor()) +{ +} + +void CFontPreview::showFont(const KURL &url) +{ + itsCurrentUrl=url; + showFace(1); +} + +void CFontPreview::showFace(int face) +{ + itsCurrentFace=face; + showFont(); +} + +void CFontPreview::showFont() +{ + itsLastWidth=width(); + itsLastHeight=height(); + + if(!itsCurrentUrl.isEmpty() && + itsEngine.draw(itsCurrentUrl, itsLastWidth, itsLastHeight, itsPixmap, itsCurrentFace-1, false)) + { + setEraseColor(Qt::white); + update(); + emit status(true); + } + else + { + QPixmap nullPix; + + setEraseColor(itsBgndCol); + itsPixmap=nullPix; + update(); + emit status(false); + } +} + +void CFontPreview::paintEvent(QPaintEvent *) +{ + QPainter paint(this); + + if(itsPixmap.isNull()) + { + if(!itsCurrentUrl.isEmpty()) + { + paint.setPen(kapp->palette().active().text()); + paint.drawText(rect(), AlignCenter, i18n(" No preview available")); + } + } + else + { + static const int constStepSize=16; + + if(abs(width()-itsLastWidth)>constStepSize || abs(height()-itsLastHeight)>constStepSize) + showFont(); + else + paint.drawPixmap(0, 0, itsPixmap); + } +} + +QSize CFontPreview::sizeHint() const +{ + return QSize(132, 132); +} + +QSize CFontPreview::minimumSizeHint() const +{ + return QSize(32, 32); +} + +} + +#include "FontPreview.moc" diff --git a/kcontrol/kfontinst/viewpart/FontPreview.h b/kcontrol/kfontinst/viewpart/FontPreview.h new file mode 100644 index 000000000..673adeb2d --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontPreview.h @@ -0,0 +1,83 @@ +#ifndef __FONT_PREVIEW_H__ +#define __FONT_PREVIEW_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontPreview +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 04/11/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include "FcEngine.h" + +namespace KFI +{ + +class CFontPreview : public QWidget +{ + Q_OBJECT + + public: + + CFontPreview(QWidget *parent, const char *name=NULL); + virtual ~CFontPreview() {} + + void paintEvent(QPaintEvent *); + QSize sizeHint() const; + QSize minimumSizeHint() const; + + void showFont(const KURL &url); + void showFont(); + + CFcEngine & engine() { return itsEngine; } + + public slots: + + void showFace(int face); + + signals: + + void status(bool); + + private: + + CFcEngine itsEngine; + QPixmap itsPixmap; + KURL itsCurrentUrl; + int itsCurrentFace, + itsLastWidth, + itsLastHeight; + QColor itsBgndCol; + QString itsFontName; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/viewpart/FontViewPart.cpp b/kcontrol/kfontinst/viewpart/FontViewPart.cpp new file mode 100644 index 000000000..aaa3bc5ff --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontViewPart.cpp @@ -0,0 +1,282 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontViewPart +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 03/08/2002 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "FontViewPart.h" +#include "FontPreview.h" +#include "Misc.h" +#include "KfiConstants.h" +#include "KfiPrint.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static KURL getDest(const KURL &url, bool system) +{ + return KURL(KFI::Misc::root() + ? QString("fonts:/") + url.fileName() + : QString("fonts:/") + QString(system ? i18n(KFI_KIO_FONTS_SYS) : i18n(KFI_KIO_FONTS_USER)) + + QChar('/') + url.fileName()); +} + +namespace KFI +{ + +CFontViewPart::CFontViewPart(QWidget *parent, const char *name) +{ + bool kcm=0==strcmp(name, "kcmfontinst"); + + itsFrame=new QFrame(parent, "frame"); + + QFrame *previewFrame=new QFrame(itsFrame); + + itsToolsFrame=new QFrame(itsFrame); + + QVBoxLayout *layout=new QVBoxLayout(itsFrame, kcm ? 0 : KDialog::marginHint(), kcm ? 0 : KDialog::spacingHint()); + QGridLayout *previewLayout=new QGridLayout(previewFrame, 1, 1, 1, 1); + QHBoxLayout *toolsLayout=new QHBoxLayout(itsToolsFrame, 0, KDialog::spacingHint()); + + itsFrame->setFrameShape(QFrame::NoFrame); + itsFrame->setFocusPolicy(QWidget::ClickFocus); + itsToolsFrame->setFrameShape(QFrame::NoFrame); + previewFrame->setFrameShadow(kcm ? QFrame::Sunken : QFrame::Raised); + previewFrame->setFrameShape(QFrame::Panel); + setInstance(new KInstance("kfontview")); + + itsPreview=new CFontPreview(previewFrame, "FontViewPart::Preview"); + itsPreview->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + itsFaceLabel=new QLabel(i18n("Face:"), itsToolsFrame); + itsFaceSelector=new KIntNumInput(1, itsToolsFrame); + itsInstallButton=new QPushButton(i18n("Install..."), itsToolsFrame, "button"); + itsInstallButton->hide(); + previewLayout->addWidget(itsPreview, 0, 0); + layout->addWidget(previewFrame); + layout->addWidget(itsToolsFrame); + toolsLayout->addWidget(itsFaceLabel); + toolsLayout->addWidget(itsFaceSelector); + itsFaceLabel->hide(); + itsFaceSelector->hide(); + toolsLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum)); + toolsLayout->addWidget(itsInstallButton); + itsToolsFrame->hide(); + connect(itsPreview, SIGNAL(status(bool)), SLOT(previewStatus(bool))); + connect(itsInstallButton, SIGNAL(clicked()), SLOT(install())); + connect(itsFaceSelector, SIGNAL(valueChanged(int)), itsPreview, SLOT(showFace(int))); + + itsChangeTextAction=new KAction(i18n("Change Text..."), "text", KShortcut(), + this, SLOT(changeText()), actionCollection(), "changeText"); + itsChangeTextAction->setEnabled(false); + itsPrintAction=KStdAction::print(this, SLOT(print()), actionCollection(), "print"); + itsPrintAction->setEnabled(false); + + setXMLFile("kfontviewpart.rc"); + setWidget(itsFrame); +} + +bool CFontViewPart::openURL(const KURL &url) +{ + if (!url.isValid() || !closeURL()) + return false; + + if(KFI_KIO_FONTS_PROTOCOL==url.protocol() || url.isLocalFile()) + { + m_url=url; + emit started(0); + m_file = m_url.path(); + bool ret=openFile(); + if (ret) + { + emit completed(); + emit setWindowCaption(m_url.prettyURL()); + } + return ret; + } + else + return ReadOnlyPart::openURL(url); +} + +bool CFontViewPart::openFile() +{ + // NOTE: Cant do the real open here, as dont seem to be able to use KIO::NetAccess functions during initial start-up. + // Bug report 111535 indicates that calling "konqueror " crashes. + QTimer::singleShot(0, this, SLOT(timeout())); + return true; +} + +void CFontViewPart::timeout() +{ + bool showFs=false, + isFonts=KFI_KIO_FONTS_PROTOCOL==m_url.protocol(); + + itsShowInstallButton=false; + + if(isFonts) + FcInitReinitialize(); + else + { + KURL destUrl; + + // + // Not from fonts:/, so try to see if font is already installed... + if(Misc::root()) + { + destUrl=QString("fonts:/")+itsPreview->engine().getName(m_url); + itsShowInstallButton=!KIO::NetAccess::exists(destUrl, true, itsFrame->parentWidget()); + } + else + { + destUrl=QString("fonts:/")+i18n(KFI_KIO_FONTS_SYS)+QChar('/')+itsPreview->engine().getName(m_url); + if(KIO::NetAccess::exists(destUrl, true, itsFrame->parentWidget())) + itsShowInstallButton=false; + else + { + destUrl=QString("fonts:/")+i18n(KFI_KIO_FONTS_USER)+QChar('/')+itsPreview->engine().getName(m_url); + itsShowInstallButton=!KIO::NetAccess::exists(destUrl, true, itsFrame->parentWidget()); + } + } + } + + itsPreview->showFont(isFonts ? m_url : m_file); + + if(!isFonts && itsPreview->engine().getNumIndexes()>1) + { + showFs=true; + itsFaceSelector->setRange(1, itsPreview->engine().getNumIndexes(), 1, false); + } + + itsFaceLabel->setShown(showFs); + itsFaceSelector->setShown(showFs); + itsToolsFrame->hide(); +} + +void CFontViewPart::previewStatus(bool st) +{ + itsInstallButton->setShown(st && itsShowInstallButton); + itsToolsFrame->setShown(itsInstallButton->isShown()||itsFaceSelector->isShown()); + itsChangeTextAction->setEnabled(st); + itsPrintAction->setEnabled(st && KFI_KIO_FONTS_PROTOCOL==m_url.protocol()); +} + +void CFontViewPart::install() +{ + int resp=Misc::root() ? KMessageBox::Yes + : KMessageBox::questionYesNoCancel(itsFrame, + i18n("Where do you wish to install \"%1\" (%2)?\n" + "\"%3\" - only accessible to you, or\n" + "\"%4\" - accessible to all (requires administrator " + "password)") + .arg(itsPreview->engine().getName(m_url)) + .arg(m_url.fileName()) + .arg(i18n(KFI_KIO_FONTS_USER)) + .arg(i18n(KFI_KIO_FONTS_SYS)), + i18n("Install"), i18n(KFI_KIO_FONTS_USER), + i18n(KFI_KIO_FONTS_SYS)); + + if(KMessageBox::Cancel!=resp) + { + KURL destUrl(getDest(m_url, KMessageBox::No==resp)); + + if(KIO::NetAccess::copy(m_url, destUrl, itsFrame->parentWidget())) + { + // + // OK file copied, now look for any AFM or PFM file... + KURL::List urls; + + Misc::getAssociatedUrls(m_url, urls); + + if(urls.count()) + { + KURL::List::Iterator it, + end=urls.end(); + + for(it=urls.begin(); it!=end; ++it) + { + destUrl=getDest(*it, KMessageBox::No==resp); + KIO::NetAccess::copy(*it, destUrl, itsFrame->parentWidget()); + } + } + + KMessageBox::information(itsFrame, i18n("%1:%2 successfully installed.").arg(m_url.protocol()) + .arg(m_url.path()), i18n("Success"), + "FontViewPart_DisplayInstallationSuccess"); + itsShowInstallButton=false; + itsInstallButton->setShown(itsShowInstallButton); + } + else + KMessageBox::error(itsFrame, i18n("Could not install %1:%2").arg(m_url.protocol()).arg(m_url.path()), + i18n("Error")); + } +} + +void CFontViewPart::changeText() +{ + bool status; + QRegExpValidator validator(QRegExp(".*"), 0L); + QString oldStr(itsPreview->engine().getPreviewString()), + newStr(KInputDialog::getText(i18n("Preview String"), i18n("Please enter new string:"), + oldStr, &status, itsFrame, + "preview string dialog", &validator)); + + if(status && newStr!=oldStr) + { + itsPreview->engine().setPreviewString(newStr); + itsPreview->showFont(); + } +} + +void CFontViewPart::print() +{ + QStringList items; + + items.append(itsPreview->engine().getName(m_url)); + + Print::printItems(items, 0, itsFrame->parentWidget(), itsPreview->engine()); +} + +} + +#include "FontViewPart.moc" diff --git a/kcontrol/kfontinst/viewpart/FontViewPart.h b/kcontrol/kfontinst/viewpart/FontViewPart.h new file mode 100644 index 000000000..7ffdbb8f4 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontViewPart.h @@ -0,0 +1,85 @@ +#ifndef __FONT_VIEW_PART_H__ +#define __FONT_VIEW_PART_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontViewPart +// Author : Craig Drummond +// Project : K Font Installer (kfontinst-kcontrol) +// Creation Date : 03/08/2002 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include + +class QPushButton; +class QFrame; +class QLabel; +class KIntNumInput; +class KAction; +class KURL; + +namespace KFI +{ + +class CFontPreview; + +class CFontViewPart : public KParts::ReadOnlyPart +{ + Q_OBJECT + + public: + + CFontViewPart(QWidget *parent=0, const char *name=0); + virtual ~CFontViewPart() {} + + bool openURL(const KURL &url); + + protected: + + bool openFile(); + + private slots: + + void previewStatus(bool st); + void timeout(); + void install(); + void changeText(); + void print(); + + private: + + CFontPreview *itsPreview; + QPushButton *itsInstallButton; + QFrame *itsFrame, + *itsToolsFrame; + QLabel *itsFaceLabel; + KIntNumInput *itsFaceSelector; + KAction *itsChangeTextAction, + *itsPrintAction; + bool itsShowInstallButton; + int itsFace; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/viewpart/FontViewPartFactory.cpp b/kcontrol/kfontinst/viewpart/FontViewPartFactory.cpp new file mode 100644 index 000000000..52783c1a7 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontViewPartFactory.cpp @@ -0,0 +1,86 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontViewPartFactory +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 03/08/2002 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "FontViewPartFactory.h" +#include "FontViewPart.h" +#include +#include +#include +#include + +extern "C" +{ + KDE_EXPORT void* init_libkfontviewpart() + { + KGlobal::locale()->insertCatalogue("kfontinst"); + return new KFI::CFontViewPartFactory; + } +} + +namespace KFI +{ + +KInstance * CFontViewPartFactory::theirInstance=NULL; +KAboutData * CFontViewPartFactory::theirAbout=NULL; + +CFontViewPartFactory::CFontViewPartFactory() +{ +} + +CFontViewPartFactory::~CFontViewPartFactory() +{ + delete theirAbout; + theirAbout=0L; + delete theirInstance; + theirInstance=0L; +} + +QObject * CFontViewPartFactory::createObject(QObject *parent, const char *name, const char *, const QStringList &) +{ + if(parent && !parent->isWidgetType()) + { + kdDebug() << "CFontViewPartFactory: parent does not inherit QWidget" << endl; + return 0L; + } + + return new CFontViewPart((QWidget*) parent, name); +} + +KInstance* CFontViewPartFactory::instance() +{ + if(!theirInstance) + { + theirAbout = new KAboutData("fontviewpart", I18N_NOOP("CFontViewPart"), "0.1"); + theirInstance = new KInstance(theirAbout); + } + return theirInstance; +} + +} + +#include "FontViewPartFactory.moc" diff --git a/kcontrol/kfontinst/viewpart/FontViewPartFactory.h b/kcontrol/kfontinst/viewpart/FontViewPartFactory.h new file mode 100644 index 000000000..777d07ebe --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontViewPartFactory.h @@ -0,0 +1,60 @@ +#ifndef __FONT_VIEW_PART_FACTORY_H__ +#define __FONT_VIEW_PART_FACTORY_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontViewPartFactory +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 03/08/2002 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include + +class KInstance; +class KAboutData; + +namespace KFI +{ + +class CFontViewPartFactory : public KLibFactory +{ + Q_OBJECT + + public: + + CFontViewPartFactory(); + virtual ~CFontViewPartFactory(); + virtual QObject *createObject(QObject *parent = 0, const char *name = 0, const char *classname = "QObject", const QStringList &args = QStringList()); + + static KInstance * instance(); + + private: + + static KInstance *theirInstance; + static KAboutData *theirAbout; +}; + +} + +#endif diff --git a/kcontrol/kfontinst/viewpart/FontViewerApp.cpp b/kcontrol/kfontinst/viewpart/FontViewerApp.cpp new file mode 100644 index 000000000..5ed5cf455 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontViewerApp.cpp @@ -0,0 +1,130 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Class Names : KFI::CFontViewerApp, KFI::CFontViewerAppMainWindow +// Author : Craig Drummond +// Project : K Font Installer (kfontinst-kcontrol) +// Creation Date : 30/04/2004 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "FontViewerApp.h" +#include "KfiConstants.h" +#include +#include +#include +#include +#include +#include +#include + +#define CFG_GROUP "FontViewer Settings" +#define CFG_SIZE_KEY "Window Size" + +namespace KFI +{ + +CFontViewerAppMainWindow::CFontViewerAppMainWindow() + : KParts::MainWindow((QWidget *)0L) +{ + KLibFactory *factory=KLibLoader::self()->factory("libkfontviewpart"); + + if(factory) + { + KStdAction::open(this, SLOT(fileOpen()), actionCollection()); + KStdAction::quit(kapp, SLOT(quit()), actionCollection()); + + itsPreview=(KParts::ReadOnlyPart *)factory->create(this, "fontvier", "KParts::ReadOnlyPart"); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + KURL openURL; + + if(args->count() > 0) + { + KURL url(args->url(args->count() - 1)); + + if(url.isValid()) + openURL = url; + } + + setCentralWidget(itsPreview->widget()); + createGUI(itsPreview); + + if(!openURL.isEmpty()) + itsPreview->openURL(openURL); + + QSize defSize(450, 380); + KConfigGroupSaver saver(kapp->config(), CFG_GROUP); + + resize(kapp->config()->readSizeEntry(CFG_SIZE_KEY, &defSize)); + show(); + } + else + exit(0); +} + +CFontViewerAppMainWindow::~CFontViewerAppMainWindow() +{ + KConfigGroupSaver saver(kapp->config(), CFG_GROUP); + kapp->config()->writeEntry(CFG_SIZE_KEY, size()); + kapp->config()->sync(); +} + +void CFontViewerAppMainWindow::fileOpen() +{ + KURL url(KFileDialog::getOpenURL(QString::null, "application/x-font-ttf application/x-font-otf " + "application/x-font-ttc application/x-font-type1 " + "application/x-font-bdf application/x-font-pcf ", + this, i18n("Select Font to View"))); + if(url.isValid()) + itsPreview->openURL(url); +} + +CFontViewerApp::CFontViewerApp() +{ + KGlobal::locale()->insertCatalogue(KFI_CATALOGUE); + setMainWidget(new CFontViewerAppMainWindow()); +} + +} + +static KCmdLineOptions options[] = +{ + { "+[URL]", I18N_NOOP("URL to open"), 0 }, + KCmdLineLastOption +}; + +static KAboutData aboutData("kfontview", I18N_NOOP("Font Viewer"), 0, I18N_NOOP("Simple font viewer"), + KAboutData::License_GPL, + I18N_NOOP("(c) Craig Drummond, 2004")); + +int main(int argc, char **argv) +{ + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions(options); + KFI::CFontViewerApp::addCmdLineOptions(); + + KFI::CFontViewerApp app; + + return app.exec(); +} + +#include "FontViewerApp.moc" diff --git a/kcontrol/kfontinst/viewpart/FontViewerApp.h b/kcontrol/kfontinst/viewpart/FontViewerApp.h new file mode 100644 index 000000000..70543a8f3 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/FontViewerApp.h @@ -0,0 +1,68 @@ +#ifndef __FONT_VIEWER_APP_H__ +#define __FONT_VIEWER_APP_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Class Name : KFI::CFontViewerApp, KFI::CFontViewAppMainWindow +// Author : Craig Drummond +// Project : K Font Installer (kfontinst-kcontrol) +// Creation Date : 30/04/2004 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +namespace KFI +{ + +class CFontViewerAppMainWindow : public KParts::MainWindow +{ + Q_OBJECT + + public: + + CFontViewerAppMainWindow(); + virtual ~CFontViewerAppMainWindow(); + + public slots: + + void fileOpen(); + + private: + + KParts::ReadOnlyPart *itsPreview; + +}; + +class CFontViewerApp : public KApplication +{ + public: + + CFontViewerApp(); + virtual ~CFontViewerApp() {} +}; + +} + +#endif diff --git a/kcontrol/kfontinst/viewpart/KfiPrint.cpp b/kcontrol/kfontinst/viewpart/KfiPrint.cpp new file mode 100644 index 000000000..02366922a --- /dev/null +++ b/kcontrol/kfontinst/viewpart/KfiPrint.cpp @@ -0,0 +1,193 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Namespace : KFI::Print +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 14/05/2005 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2005 +//////////////////////////////////////////////////////////////////////////////// + +#include "KfiPrint.h" +#include "FcEngine.h" +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LOCALE_H +#include +#endif + +namespace KFI +{ + +namespace Print +{ + +static const int constMarginLineBefore=1; +static const int constMarginLineAfter=2; +static const int constMarginFont=4; + +inline bool sufficientSpace(int y, int pageHeight, int size) +{ + return (y+constMarginFont+size)processEvents(QEventLoop::ExcludeUserInput, 0); + + if(!firstFont && !sufficientSpace(y, painter.fontMetrics().height(), sizes, pageHeight, size)) + { + printer.newPage(); + y=margin; + } + painter.setFont(sans); + y+=painter.fontMetrics().height(); + painter.drawText(margin, y, *it); + y+=constMarginLineBefore; + painter.drawLine(margin, y, margin+pageWidth, y); + y+=constMarginLineAfter; + + if(0==size) + { + y+=CFcEngine::constDefaultAlphaSize; + painter.setFont(engine.getQFont(*it, CFcEngine::constDefaultAlphaSize)); + painter.drawText(margin, y, CFcEngine::getLowercaseLetters()); + y+=constMarginFont+CFcEngine::constDefaultAlphaSize; + painter.drawText(margin, y, CFcEngine::getUppercaseLetters()); + y+=constMarginFont+CFcEngine::constDefaultAlphaSize; + painter.drawText(margin, y, CFcEngine::getPunctuation()); + y+=constMarginFont+constMarginLineBefore; + painter.drawLine(margin, y, margin+pageWidth, y); + y+=constMarginLineAfter; + } + for(; sizes[s]; ++s) + { + y+=sizes[s]; + painter.setFont(engine.getQFont(*it, sizes[s])); + if(sufficientSpace(y, pageHeight, sizes[s])) + { + painter.drawText(margin, y, str); + if(sizes[s+1]) + y+=constMarginFont; + } + } + firstFont=false; + y+=(s<1 || sizes[s-1]<25 ? 14 : 28); + } + + painter.end(); + + // + // Did we change the users font settings? If so, reset to their previous values... + if(set) + if(entryExists) + settings.writeEntry("/qt/embedFonts", false); + else + settings.removeEntry("/qt/embedFonts"); + } +#ifdef HAVE_LOCALE_H + if(oldLocale) + setlocale(LC_NUMERIC, oldLocale); +#endif +} + +} + +} diff --git a/kcontrol/kfontinst/viewpart/KfiPrint.h b/kcontrol/kfontinst/viewpart/KfiPrint.h new file mode 100644 index 000000000..5b927a57a --- /dev/null +++ b/kcontrol/kfontinst/viewpart/KfiPrint.h @@ -0,0 +1,49 @@ +#ifndef __PRINT_H__ +#define __PRINT_H__ + +//////////////////////////////////////////////////////////////////////////////// +// +// Namespace : KFI::Print +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 14/05/2005 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2005 +//////////////////////////////////////////////////////////////////////////////// + +class QStringList; +class QString; +class QWidget; + +namespace KFI +{ + +class CFcEngine; + +namespace Print +{ +extern void printItems(const QStringList &items, int size, QWidget *parent, CFcEngine &engine); +extern bool printable(const QString &mime); +} + +} + +#endif diff --git a/kcontrol/kfontinst/viewpart/Makefile.am b/kcontrol/kfontinst/viewpart/Makefile.am new file mode 100644 index 000000000..bfa66c696 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/Makefile.am @@ -0,0 +1,30 @@ +noinst_LTLIBRARIES = libkfontinstprint.la +libkfontinstprint_la_SOURCES = KfiPrint.cpp +libkfontinstprint_la_LDFLAGS = $(all_libraries) +libkfontinstprint_la_LIBADD = $(LIB_KDEPRINT) ../lib/libkfontinst.la + +kde_module_LTLIBRARIES = libkfontviewpart.la + +libkfontviewpart_la_SOURCES = FontViewPart.cpp FontViewPartFactory.cpp FontPreview.cpp +libkfontviewpart_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) +libkfontviewpart_la_LIBADD = $(LIB_KPARTS) libkfontinstprint.la ../lib/libkfontinst.la + +noinst_HEADERS = FontViewPart.h FontViewPartFactory.h FontPreview.h FontViewerApp.h KfiPrint.h + +kde_services_DATA = kfontviewpart.desktop + +AM_CPPFLAGS = -I$(srcdir)/../lib -I$(srcdir)/../../fonts $(all_includes) $(LIBFREETYPE_CFLAGS) $(LIBFONTCONFIG_CFLAGS) +METASOURCES = AUTO + +kfontview_LDADD = $(LIB_KPARTS) +kfontview_LDFLAGS = $(all_libraries) $(KDE_RPATH) + +bin_PROGRAMS = kfontview +xdg_apps_DATA = kfontview.desktop + +appdata_DATA = kfontviewpart.rc kfontviewui.rc +appdatadir = $(kde_datadir)/kfontview + +kfontview_SOURCES = FontViewerApp.cpp + + diff --git a/kcontrol/kfontinst/viewpart/kfontview.desktop b/kcontrol/kfontinst/viewpart/kfontview.desktop new file mode 100644 index 000000000..843213221 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/kfontview.desktop @@ -0,0 +1,100 @@ +[Desktop Entry] +Name=KFontView +Name[be]=Прагляд шрыфтоў +Name[bn]=কে-ফন্ট-ভিউ +Name[cs]=Prohlížeč písem +Name[eo]=Tiparorigardilo +Name[eu]=KFontWiew +Name[he]=מציג גופנים +Name[hi]=के-फ़ॉन्ट-व्यू +Name[mk]=КФонтПреглед +Name[nb]=Skriftviser +Name[nds]=Schriftoortkieker +Name[ne]=K फन्ट दृश्य +Name[nn]=Skriftvisar +Name[rw]=K-IgaragazaImyandikire +Name[se]=Fontačájeheaddji +Name[sk]=Prehliadač písiem +Name[sv]=Kfontview +Name[tg]=Намоишгари КҲарф +Name[vi]=Trình xem phông chữ KDE +Name[wa]=Håyneu di fontes (KFontView) +Name[zh_CN]=字体预览 +Exec=kfontview %i %u +Icon=fonts +X-KDE-StartupNotify=true +Type=Application +MimeType=application/x-font-ttf;application/x-font-type1;application/x-font-otf;application/x-font-ttc;application/x-font-pcf;application/x-font-bdf;fonts/package; +GenericName=Font Viewer +GenericName[af]=Skriftipe Besigter +GenericName[ar]=معاين المحرف +GenericName[be]=Праглядальнік шрыфтоў +GenericName[bg]=Преглед на шрифтове +GenericName[bn]=ফন্ট প্রদর্শক +GenericName[br]=Gweler Nodrezhoù +GenericName[bs]=Preglednik fontova +GenericName[ca]=Visor de lletres +GenericName[cs]=Prohlížeč písem +GenericName[csb]=Przezérnik fòntów +GenericName[cy]=Gwelydd Wynebfathau +GenericName[da]=Skrifttype-fremviser +GenericName[de]=Schriftartenbetrachter +GenericName[el]=Προβολέας γραμματοσειρών +GenericName[eo]=Tipara rigardilo +GenericName[es]=Visor de tipos de letra +GenericName[et]=Fontide vaataja +GenericName[eu]=Letra-tipoen ikusgailua +GenericName[fa]=مشاهده‌گر قلم +GenericName[fi]=Kirjasinten näytin +GenericName[fr]=Afficheur de polices +GenericName[fy]=Lettertypewerjefte +GenericName[ga]=Amharcán Clófhoirne +GenericName[gl]=Visor de Fontes +GenericName[he]=מציג גופנים +GenericName[hr]=Preglednik fontova +GenericName[hu]=Betűtípusböngésző +GenericName[id]=Penampil Font +GenericName[is]=Leturskoðari +GenericName[it]=Visualizzatore di caratteri +GenericName[ja]=フォントビューア +GenericName[ka]=პროგრამა ფონტების სანახავად +GenericName[kk]=Қаріпті қарап-шығу +GenericName[km]=កម្មវិធី​មើល​ពុម្ពអក្សរ +GenericName[ko]=글꼴 뷰어 +GenericName[lt]=Šriftų žiūryklė +GenericName[lv]=Fontu Skatītājs +GenericName[mk]=Прегледувач на фонтови +GenericName[ms]=Pemapar Fon +GenericName[mt]=Werrej tal-fonts +GenericName[nb]=Skrifttypeviser +GenericName[nds]=Schriftoortkieker +GenericName[ne]=फन्ट दर्शक +GenericName[nl]=Lettertypeweergave +GenericName[nn]=Skriftvisar +GenericName[pa]=ਫੋਂਟ ਦਰਸ਼ਕ +GenericName[pl]=Przeglądarka czcionek +GenericName[pt]=Visualizador de Tipos de Letra +GenericName[pt_BR]=Visualizador de fontes +GenericName[ro]=Vizualizor de fonturi +GenericName[ru]=Программа просмотра шрифтов +GenericName[rw]=Ikigaragaza Imyandikire +GenericName[se]=Fontačájeheaddji +GenericName[sk]=Prehliadač písiem +GenericName[sl]=Pregledovalnik pisav +GenericName[sr]=Приказивач фонтова +GenericName[sr@Latn]=Prikazivač fontova +GenericName[sv]=Teckensnittsvisning +GenericName[tg]=Намоишгари ҳарфҳо +GenericName[th]=โปรแกรมดูแบบอักษร +GenericName[tr]=Yazıtipi Görüntüleyici +GenericName[tt]=Yazu Kürsätkeç +GenericName[uk]=Переглядач шрифтів +GenericName[uz]=Shrift koʻruvchi +GenericName[uz@cyrillic]=Шрифт кўрувчи +GenericName[vi]=Trình xem Phông chữ +GenericName[wa]=Håyneu di fontes +GenericName[zh_CN]=字体查看器 +GenericName[zh_TW]=字型檢視器 +Terminal=false +InitialPreference=1 +Categories=Qt;KDE;Utility;X-KDE-More; diff --git a/kcontrol/kfontinst/viewpart/kfontviewpart.desktop b/kcontrol/kfontinst/viewpart/kfontviewpart.desktop new file mode 100644 index 000000000..e1bcd6933 --- /dev/null +++ b/kcontrol/kfontinst/viewpart/kfontviewpart.desktop @@ -0,0 +1,86 @@ +[Desktop Entry] +Name=Font Viewer +Name[af]=Skriftipe Besigter +Name[ar]=معاين المحرف +Name[az]=Yazı Növü Nümayişçisi +Name[be]=Праглядальнік шрыфтоў +Name[bg]=Преглед на шрифт +Name[bn]=ফন্ট প্রদর্শক +Name[br]=Gweler Nodrezhoù +Name[bs]=Preglednik fontova +Name[ca]=Visor de lletres +Name[cs]=Prohlížeč písem +Name[csb]=Przezérnik fòntów +Name[cy]=Gwelydd Ffont +Name[da]=Skrifttypevisning +Name[de]=Schriftartenbetrachter +Name[el]=Προβολέας γραμματοσειρών +Name[eo]=Tiparorigardilo +Name[es]=Visor de tipos de letra +Name[et]=Fontide vaataja +Name[eu]=Letra-tipo ikustailea +Name[fa]=مشاهده‌گر قلم +Name[fi]=Kirjasinten näytin +Name[fr]=Afficheur de polices +Name[fy]=Lettertypewerjefteprogramma +Name[ga]=Amharcán Clófhoirne +Name[gl]=Visor de Fontes +Name[he]=מציג גופנים +Name[hi]=फ़ॉन्ट प्रदर्शक +Name[hr]=Preglednik fontova +Name[hu]=A betűtípusok áttekintése +Name[id]=Penampil Font +Name[is]=Leturskoðari +Name[it]=Vista caratteri +Name[ja]=フォントビューア +Name[ka]=პროგრამა ფონტების სანახავად +Name[kk]=Қаріпті қарап-шығу +Name[km]=កម្មវិធី​មើល​ពុម្ពអក្សរ +Name[ko]=글꼴 뷰어 +Name[lo]=ມຸມມອງແບບໄອຄອນ +Name[lt]=Šrifto žiūriklis +Name[lv]=Fontu Skatītājs +Name[mk]=Прегледувач на фонтови +Name[mn]=Бичиг харагч +Name[ms]=Pemapar Fon +Name[mt]=Werrej tal-fonts +Name[nb]=Skrifttypeviser +Name[nds]=Schriftoortkieker +Name[ne]=फन्ट दर्शक +Name[nl]=Lettertypeweergaveprogramma +Name[nn]=Skriftvisar +Name[nso]=Molebeledi wa Fonto +Name[pa]=ਫੋਂਟ ਦਰਸ਼ਕ +Name[pl]=Przeglądarka czcionek +Name[pt]=Visualizador do Tipo de Letra +Name[pt_BR]=Visualizador de Fontes +Name[ro]=Vizualizor de fonturi +Name[ru]=Просмотр шрифтов +Name[rw]=Ikigaragaza Imyandikire +Name[se]=Fontačájeheaddji +Name[sk]=Prehliadač písiem +Name[sl]=Prikazovalnik pisav +Name[sr]=Приказивач фонтова +Name[sr@Latn]=Prikazivač fontova +Name[sv]=Teckensnittsvisning +Name[ta]=எழுத்துரு காட்சி +Name[tg]=Намоишгари ҳарф +Name[th]=โปรแกรมดูแบบอักษร +Name[tr]=Yazıtipi İzleyici +Name[tt]=Yazu Kürsätkeç +Name[uk]=Переглядач шрифтів +Name[uz]=Shrift koʻruvchi +Name[uz@cyrillic]=Шрифт кўрувчи +Name[ven]=Muvhoni wa Fontu +Name[vi]=Trình xem Phông chữ +Name[wa]=Håyneu di fontes +Name[xh]=Imboniselo Yohlobo lwegama +Name[zh_CN]=字体查看器 +Name[zh_TW]=字型檢視器 +Name[zu]=Umbukisi Wohlobo lwamagama +MimeType=application/x-font-ttf;application/x-font-type1;application/x-font-otf;application/x-font-ttc;application/x-font-pcf;application/x-font-bdf;fonts/package +ServiceTypes=KParts/ReadOnlyPart,Browser/View +X-KDE-Library=libkfontviewpart +Type=Service +InitialPreference=1 +Icon=fonts diff --git a/kcontrol/kfontinst/viewpart/kfontviewpart.rc b/kcontrol/kfontinst/viewpart/kfontviewpart.rc new file mode 100644 index 000000000..5df54a47c --- /dev/null +++ b/kcontrol/kfontinst/viewpart/kfontviewpart.rc @@ -0,0 +1,9 @@ + + + + &Main Toolbar + + + + + diff --git a/kcontrol/kfontinst/viewpart/kfontviewui.rc b/kcontrol/kfontinst/viewpart/kfontviewui.rc new file mode 100644 index 000000000..f2e4a86fa --- /dev/null +++ b/kcontrol/kfontinst/viewpart/kfontviewui.rc @@ -0,0 +1,4 @@ + + + + diff --git a/kcontrol/kicker/Makefile.am b/kcontrol/kicker/Makefile.am new file mode 100644 index 000000000..2fa9a2ad9 --- /dev/null +++ b/kcontrol/kicker/Makefile.am @@ -0,0 +1,40 @@ +kde_module_LTLIBRARIES = kcm_kicker.la + +kcm_kicker_la_SOURCES = positiontab.ui hidingtab.ui lookandfeeltab.ui menutab.ui \ + positiontab_impl.cpp hidingtab_impl.cpp lookandfeeltab_impl.cpp \ + menutab_impl.cpp extensionInfo.cpp main.cpp main.skel \ + advancedOptions.ui advancedDialog.cpp \ + positionconfig.cpp hidingconfig.cpp menuconfig.cpp lookandfeelconfig.cpp + +kcm_kicker_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_kicker_la_LIBADD = $(top_builddir)/kicker/libkicker/libkickermain.la ../background/libbgnd.la $(LIB_KIO) $(LIB_KUTILS) +AM_CPPFLAGS = -I$(top_srcdir)/kicker/kicker/core -I$(top_srcdir)/kicker/libkicker \ + -I$(top_builddir)/kicker/libkicker -I$(srcdir)/../background $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = positiontab_impl.h hidingtab_impl.h lookandfeeltab_impl.h menutab_impl.h \ + extensionInfo.h main.h advancedDialog.h + +# Translation of tiles is used by lookandfeeltab_impl.cpp +# Tile names are transformed to words with title case +messages: rc.cpp + (cd ../../kicker/data/tiles ; ls *_tiny_up.png) | perl -p -e \ + 's/(.*)_tiny_up\.png/i18n\(\"\u$$1\"\)\;/; s/[_ ]+(.)/ \u$$1/g' >> rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmkicker.pot + +xdg_apps_DATA = panel.desktop +EXTRA_DIST = $(xdg_apps_DATA) + +kcmkicker_data3_DATA = kicker_config.desktop \ + kicker_config_arrangement.desktop kicker_config_hiding.desktop \ + kicker_config_menus.desktop kicker_config_appearance.desktop +kcmkicker_data3dir = $(kde_appsdir)/.hidden + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/panel.desktop + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/panel_appearance.desktop + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(xdg_appsdir)/panel_appearance.desktop + +extensionInfo.lo: ../../kicker/libkicker/kickerSettings.h diff --git a/kcontrol/kicker/advancedDialog.cpp b/kcontrol/kicker/advancedDialog.cpp new file mode 100644 index 000000000..4605cbb09 --- /dev/null +++ b/kcontrol/kicker/advancedDialog.cpp @@ -0,0 +1,163 @@ +/* + * advancedDialog.cpp + * + * Copyright (c) 2002 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "advancedDialog.h" +#include "advancedOptions.h" +#include "main.h" + +advancedDialog::advancedDialog(QWidget* parent, const char* name) + : KDialogBase(KDialogBase::Plain, + i18n("Advanced Options"), + Ok|Apply|Cancel, + Cancel, + parent, + name, + false, false) +{ + connect(this, SIGNAL(applyClicked()), + this, SLOT(save())); + connect(this, SIGNAL(okClicked()), + this, SLOT(save())); + + QFrame* page = plainPage(); + QVBoxLayout* layout = new QVBoxLayout(page); + m_advancedWidget = new advancedKickerOptions(page); + layout->addWidget(m_advancedWidget); + layout->addStretch(); + + setMinimumSize( sizeHint() ); + + connect(m_advancedWidget->handles, SIGNAL(clicked(int)), + this, SLOT(changed())); + connect(m_advancedWidget->hideButtonSize, SIGNAL(valueChanged(int)), + this, SLOT(changed())); + connect(m_advancedWidget->tintColorB, SIGNAL(clicked()), + this, SLOT(changed())); + connect(m_advancedWidget->tintSlider, SIGNAL(valueChanged(int)), + this, SLOT(changed())); + connect(m_advancedWidget->menubarPanelTransparent, SIGNAL(clicked()), + this, SLOT(changed())); + load(); +} + +advancedDialog::~advancedDialog() +{ +} + +void advancedDialog::load() +{ + KConfig c(KickerConfig::the()->configName(), false, false); + c.setGroup("General"); + + bool fadedOut = c.readBoolEntry("FadeOutAppletHandles", true); + bool hideHandles = c.readBoolEntry("HideAppletHandles", false); + if (hideHandles) + m_advancedWidget->hideHandles->setChecked(true); + else if (fadedOut) + m_advancedWidget->fadeOutHandles->setChecked(true); + else + m_advancedWidget->visibleHandles->setChecked(true); + + int defaultHideButtonSize = c.readNumEntry("HideButtonSize", 14); + m_advancedWidget->hideButtonSize->setValue(defaultHideButtonSize); + QColor color = c.readColorEntry( "TintColor", &colorGroup().mid() ); + m_advancedWidget->tintColorB->setColor( color ); + int tintValue = c.readNumEntry( "TintValue", 33 ); + m_advancedWidget->tintSlider->setValue( tintValue ); + + bool transparentMenubarPanel = c.readBoolEntry("MenubarPanelTransparent", false); + m_advancedWidget->menubarPanelTransparent->setChecked( transparentMenubarPanel ); + + enableButtonApply(false); +} + +void advancedDialog::save() +{ + KConfig c(KickerConfig::the()->configName(), false, false); + + c.setGroup("General"); + c.writeEntry("FadeOutAppletHandles", + m_advancedWidget->fadeOutHandles->isChecked()); + c.writeEntry("HideAppletHandles", + m_advancedWidget->hideHandles->isChecked()); + c.writeEntry("HideButtonSize", + m_advancedWidget->hideButtonSize->value()); + c.writeEntry("TintColor", + m_advancedWidget->tintColorB->color()); + c.writeEntry("TintValue", + m_advancedWidget->tintSlider->value()); + c.writeEntry("MenubarPanelTransparent", + m_advancedWidget->menubarPanelTransparent->isChecked()); + + QStringList elist = c.readListEntry("Extensions2"); + for (QStringList::Iterator it = elist.begin(); it != elist.end(); ++it) + { + // extension id + QString group(*it); + + // is there a config group for this extension? + if(!c.hasGroup(group) || + group.contains("Extension") < 1) + { + continue; + } + + // set config group + c.setGroup(group); + KConfig extConfig(c.readEntry("ConfigFile")); + extConfig.setGroup("General"); + extConfig.writeEntry("FadeOutAppletHandles", + m_advancedWidget->fadeOutHandles->isChecked()); + extConfig.writeEntry("HideAppletHandles", + m_advancedWidget->hideHandles->isChecked()); + extConfig.writeEntry("HideButtonSize", + m_advancedWidget->hideButtonSize->value()); + extConfig.writeEntry("TintColor", + m_advancedWidget->tintColorB->color()); + extConfig.writeEntry("TintValue", + m_advancedWidget->tintSlider->value()); + extConfig.writeEntry("MenubarPanelTransparent", + m_advancedWidget->menubarPanelTransparent->isChecked()); + + extConfig.sync(); + } + + c.sync(); + + KickerConfig::the()->notifyKicker(); + enableButtonApply(false); +} + +void advancedDialog::changed() +{ + enableButtonApply(true); +} + +#include "advancedDialog.moc" + diff --git a/kcontrol/kicker/advancedDialog.h b/kcontrol/kicker/advancedDialog.h new file mode 100644 index 000000000..bbbcdd109 --- /dev/null +++ b/kcontrol/kicker/advancedDialog.h @@ -0,0 +1,44 @@ +/* + * advancedDialog.h + * + * Copyright (c) 2002 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __ADVANCEDDIALOG_H +#define __ADVANCEDDIALOG_H + +#include + +class advancedKickerOptions; + +class advancedDialog : public KDialogBase +{ + Q_OBJECT + + public: + advancedDialog(QWidget* parent, const char* name); + ~advancedDialog(); + + protected slots: + void load(); + void save(); + void changed(); + + protected: + advancedKickerOptions* m_advancedWidget; +}; + +#endif diff --git a/kcontrol/kicker/advancedOptions.ui b/kcontrol/kicker/advancedOptions.ui new file mode 100644 index 000000000..215ef7e8b --- /dev/null +++ b/kcontrol/kicker/advancedOptions.ui @@ -0,0 +1,321 @@ + +advancedKickerOptions + + + advancedKickerOptions + + + + 0 + 0 + 324 + 235 + + + + + unnamed + + + 0 + + + + groupBox3 + + + Panel Dimensions + + + + unnamed + + + + TextLabel2 + + + &Hide button size: + + + hideButtonSize + + + This setting defines how large the panel hide buttons will be if they are visible. + + + + + hideButtonSize + + + pixels + + + 24 + + + 3 + + + This setting defines how large the panel hide buttons will be if they are visible. + + + + + spacer4 + + + Horizontal + + + Expanding + + + + 101 + 20 + + + + + + + + handles + + + Applet Handles + + + + unnamed + + + + visibleHandles + + + &Visible + + + true + + + <qt> +<p>Select this option to always show the Applet Handles.</p> +<p>Applet Handles let you move, remove and configure applets in the panel.</p> +</qt> + + + + + fadeOutHandles + + + &Fade out + + + <qt> +<p>Select this option to make Applet Handles visible only on mouse hover.</p> +<p>Applet Handles let you move, remove and configure applets in the panel.</p> +</qt> + + + + + hideHandles + + + &Hide + + + <qt> +<p><p>Select this option to always hide the Applet Handles. Beware that this option can disable removing, moving or configuring some applets.</p> +</qt> + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 21 + 20 + + + + + + + + groupBox2 + + + Transparency + + + + unnamed + + + + tintColorB + + + + 7 + 0 + 0 + 0 + + + + + + + Click on this button to set the color to use when tinting transparent panels. + + + + + spacer2 + + + Vertical + + + Expanding + + + + 20 + 21 + + + + + + textLabel3 + + + Min + + + AlignVCenter|AlignLeft + + + Use this slider to set how much transparent panels should be tinted using the tint color. + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 81 + 20 + + + + + + tintSlider + + + Horizontal + + + Use this slider to set how much transparent panels should be tinted using the tint color. + + + + + textLabel2 + + + Max + + + AlignVCenter|AlignRight + + + Use this slider to set how much transparent panels should be tinted using the tint color. + + + + + textLabel1_2 + + + Ti&nt amount: + + + tintSlider + + + Use this slider to set how much transparent panels should be tinted using the tint color. + + + + + textLabel1 + + + Tint c&olor: + + + tintColorB + + + Click on this button to set the color to use when tinting transparent panels. + + + + + menubarPanelTransparent + + + Also apply to panel with menu bar + + + Normally if you have the desktop's or current application's menu bar displayed in a panel at the top of the screen (MacOS-style), transparency is disabled for this panel to avoid the desktop background clashing with the menu bar. Set this option to make it transparent anyways. + + + + + + + + hideButtonSize + visibleHandles + fadeOutHandles + hideHandles + tintColorB + tintSlider + + + knuminput.h + kdialog.h + + + + + knuminput.h + kcolorbutton.h + + diff --git a/kcontrol/kicker/applettab.ui b/kcontrol/kicker/applettab.ui new file mode 100644 index 000000000..6ebfa2c88 --- /dev/null +++ b/kcontrol/kicker/applettab.ui @@ -0,0 +1,227 @@ + +AppletTabBase + + + AppletTabBase + + + + 0 + 0 + 732 + 764 + + + + + unnamed + + + + level_group + + + Security Level + + + + unnamed + + + + trusted_rb + + + Load only trusted applets internal + + + + + new_rb + + + Load startup config applets internal + + + + + all_rb + + + Load all applets internal + + + + + + + list_group + + + Box + + + Sunken + + + List of Trusted Applets + + + + unnamed + + + + Layout13 + + + + unnamed + + + + + Available Applets + + + true + + + true + + + + lb_available + + + + + Layout12 + + + + unnamed + + + + Spacer1_2 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + pb_add + + + + 0 + 0 + + + + >> + + + + + Spacer11 + + + Vertical + + + Minimum + + + + 20 + 20 + + + + + + pb_remove + + + + 1 + 1 + 0 + 0 + + + + + 0 + 0 + + + + << + + + + + Spacer1 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + + Trusted Applets + + + true + + + true + + + + lb_trusted + + + AutoOneFit + + + + + + + + + + kdialog.h + + + + + qwidget.h + + diff --git a/kcontrol/kicker/applettab_impl.cpp b/kcontrol/kicker/applettab_impl.cpp new file mode 100644 index 000000000..700dbd9ca --- /dev/null +++ b/kcontrol/kicker/applettab_impl.cpp @@ -0,0 +1,239 @@ +/* + * applettab.cpp + * + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "applettab_impl.h" +#include "applettab_impl.moc" + +AppletTab::AppletTab( QWidget *parent, const char* name ) + : AppletTabBase (parent, name) +{ + + connect(level_group, SIGNAL(clicked(int)), SLOT(level_changed(int))); + + connect(lb_trusted, SIGNAL(selectionChanged(QListViewItem*)), + SLOT(trusted_selection_changed(QListViewItem*))); + + connect(pb_add, SIGNAL(clicked()), SLOT(add_clicked())); + connect(pb_remove, SIGNAL(clicked()), SLOT(remove_clicked())); + + connect(lb_available, SIGNAL(selectionChanged(QListViewItem*)), + SLOT(available_selection_changed(QListViewItem*))); + + pb_add->setEnabled(false); + pb_remove->setEnabled(false); + + QWhatsThis::add( level_group, i18n("Panel applets can be started in two different ways:" + " internally or externally. While 'internally' is the preferred way to load applets, this can" + " raise stability or security problems when you are using poorly-programmed third-party applets." + " To address these problems, applets can be marked 'trusted'. You might want to configure" + " Kicker to treat trusted applets differently to untrusted ones; your options are:" + "
    • Load only trusted applets internally: All applets but the ones marked 'trusted'" + " will be loaded using an external wrapper application.
    • " + "
    • Load startup config applets internally: The applets shown on KDE startup" + " will be loaded internally, others will be loaded using an external wrapper application.
    • " + "
    • Load all applets internally
    ") ); + + QWhatsThis::add( lb_trusted, i18n("Here you can see a list of applets that are marked" + " 'trusted', i.e. will be loaded internally by Kicker in any case. To move an applet" + " from the list of available applets to the trusted ones, or vice versa, select it and" + " press the left or right buttons.") ); + + QWhatsThis::add( pb_add, i18n("Click here to add the selected applet from the list of available," + " untrusted applets to the list of trusted applets.") ); + + QWhatsThis::add( pb_remove, i18n("Click here to remove the selected applet from the list of trusted" + " applets to the list of available, untrusted applets.") ); + + QWhatsThis::add( lb_available, i18n("Here you can see a list of available applets that you" + " currently do not trust. This does not mean you cannot use those applets, but rather that" + " the panel's policy using them depends on your applet security level. To move an applet" + " from the list of available applets to the trusted ones or vice versa, select it and" + " press the left or right buttons.") ); + + load(); +} + +void AppletTab::load() +{ + load( false ); +} + +void AppletTab::load( bool useDefaults ) +{ + KConfig c(KickerConfig::the()->configName(), false, false); + c.setReadDefaults( useDefaults ); + c.setGroup("General"); + + available.clear(); + l_available.clear(); + l_trusted.clear(); + + int level = c.readNumEntry("SecurityLevel", 1); + + switch(level) + { + case 0: + default: + trusted_rb->setChecked(true); + break; + case 1: + new_rb->setChecked(true); + break; + case 2: + all_rb->setChecked(true); + break; + } + + list_group->setEnabled(trusted_rb->isChecked()); + + QStringList list = KGlobal::dirs()->findAllResources("applets", "*.desktop"); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + QFileInfo fi(*it); + available << fi.baseName(); + } + + if(c.hasKey("TrustedApplets")) + { + QStringList list = c.readListEntry("TrustedApplets"); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + if(available.contains(*it)) + l_trusted << (*it); + } + } + else + l_trusted << "clockapplet" << "ksystemtrayapplet" << "krunapplet" << "quicklauncher" + << "kminipagerapplet" << "ktaskbarapplet" << "eyesapplet" << "kmixapplet"; + + for ( QStringList::Iterator it = available.begin(); it != available.end(); ++it ) + { + if(!l_trusted.contains(*it)) + l_available << (*it); + } + + updateTrusted(); + updateAvailable(); + emit changed( useDefaults ); +} + +void AppletTab::save() +{ + KConfig c(KickerConfig::the()->configName(), false, false); + c.setGroup("General"); + + int level = 0; + if(new_rb->isChecked()) level = 1; + else if (all_rb->isChecked()) level = 2; + + c.writeEntry("SecurityLevel", level); + c.writeEntry("TrustedApplets", l_trusted); + c.sync(); +} + +void AppletTab::defaults() +{ + load( true ); +} + +QString AppletTab::quickHelp() const +{ + return QString::null; +} + +void AppletTab::level_changed(int) +{ + list_group->setEnabled(trusted_rb->isChecked()); + setChanged(); +} + +void AppletTab::updateTrusted() +{ + lb_trusted->clear(); + for ( QStringList::Iterator it = l_trusted.begin(); it != l_trusted.end(); ++it ) + (void) new QListViewItem(lb_trusted, (*it)); +} + +void AppletTab::updateAvailable() +{ + lb_available->clear(); + for ( QStringList::Iterator it = l_available.begin(); it != l_available.end(); ++it ) + (void) new QListViewItem(lb_available, (*it)); +} + +void AppletTab::trusted_selection_changed(QListViewItem * item) +{ + pb_remove->setEnabled(item != 0); + setChanged(); +} + +void AppletTab::available_selection_changed(QListViewItem * item) +{ + pb_add->setEnabled(item != 0); + setChanged(); +} + +void AppletTab::add_clicked() +{ + QListViewItem *item = lb_available->selectedItem(); + if (!item) return; + l_available.remove(item->text(0)); + l_trusted.append(item->text(0)); + + updateTrusted(); + updateAvailable(); + updateAddRemoveButton(); +} + +void AppletTab::remove_clicked() +{ + QListViewItem *item = lb_trusted->selectedItem(); + if (!item) return; + l_trusted.remove(item->text(0)); + l_available.append(item->text(0)); + + updateTrusted(); + updateAvailable(); + updateAddRemoveButton(); +} + + +void AppletTab::updateAddRemoveButton() +{ + pb_remove->setEnabled(l_trusted.count ()>0); + pb_add->setEnabled(l_available.count()>0); +} diff --git a/kcontrol/kicker/applettab_impl.h b/kcontrol/kicker/applettab_impl.h new file mode 100644 index 000000000..76c071c1a --- /dev/null +++ b/kcontrol/kicker/applettab_impl.h @@ -0,0 +1,68 @@ +/* + * applettab.h + * + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + + +#ifndef __applettab_impl_h__ +#define __applettab_impl_h__ + +#include +#include "applettab.h" + +class QGroupBox; +class QButtonGroup; +class QRadioButton; +class QPushButton; +class KListView; +class QListViewItem; + +class AppletTab : public AppletTabBase +{ + Q_OBJECT + + public: + AppletTab( QWidget *parent=0, const char* name=0 ); + + void load(); + void load(bool useDefaults); + void save(); + void defaults(); + + QString quickHelp() const; + + signals: + void changed(); + + protected slots: + void level_changed(int level); + void trusted_selection_changed(QListViewItem *); + void available_selection_changed(QListViewItem *); + void add_clicked(); + void remove_clicked(); + + protected: + void updateTrusted(); + void updateAvailable(); + void updateAddRemoveButton(); + + private: + QStringList available, l_available, l_trusted; +}; + +#endif + diff --git a/kcontrol/kicker/extensionInfo.cpp b/kcontrol/kicker/extensionInfo.cpp new file mode 100644 index 000000000..54ce23937 --- /dev/null +++ b/kcontrol/kicker/extensionInfo.cpp @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2001 John Firebaugh + * Copyright (c) 2002 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include + +#include +#include +#include + +#include "extensionInfo.h" + + +ExtensionInfo::ExtensionInfo(const QString& desktopFile, + const QString& configFile, + const QString& configPath) + : _configFile(configFile), + _configPath(configPath), + _desktopFile(desktopFile) +{ + load(); +} + +void ExtensionInfo::load() +{ + setDefaults(); + + kdDebug() << "loading defaults for " << _desktopFile << endl; + if (_desktopFile.isNull()) + { + _name = i18n("Main Panel"); + _resizeable = true; + _useStdSizes = true; + _customSizeMin = 24; + _customSizeMax = 256; + _customSize = 56; + _showLeftHB = false; + _showRightHB = true; + for (int i=0;i<4;i++) _allowedPosition[i]=true; + } + else + { + KDesktopFile df(_desktopFile); + _name = df.readName(); + _resizeable = df.readBoolEntry("X-KDE-PanelExt-Resizeable", _resizeable); + + if (_resizeable) + { + _useStdSizes = df.readBoolEntry("X-KDE-PanelExt-StdSizes", _useStdSizes); + _size = df.readNumEntry("X-KDE-PanelExt-StdSizeDefault", _size); + _customSizeMin = df.readNumEntry("X-KDE-PanelExt-CustomSizeMin", _customSizeMin); + _customSizeMax = df.readNumEntry("X-KDE-PanelExt-CustomSizeMax", _customSizeMax); + _customSize = df.readNumEntry("X-KDE-PanelExt-CustomSizeDefault", _customSize); + } + + for (int i = 0; i < 4; i++) + { + _allowedPosition[i]=false; + } + + kdDebug()<<"BEFORE X-KDE-PanelExt-Positions parsing"< 100) _sizePercentage = 100; +} + +void ExtensionInfo::configChanged() +{ + KConfig c(_configFile); + c.setGroup("General"); + + // check to see if the new value is different from both + // the original value and the currently set value, then it + // must be a newly set value, external to the panel! + int position = c.readNumEntry ("Position", 3); + if (position != _position && position != _orig_position) + { + _orig_position = _position = position; + } + + int alignment = c.readNumEntry ("Alignment", QApplication::reverseLayout() ? 2 : 0); + if (alignment != _alignment && alignment != _orig_alignment) + { + _orig_alignment = _alignment = alignment; + } + + if (_resizeable) + { + int size = c.readNumEntry ("Size", 2); + if (size != _size && size != _orig_size) + { + _orig_size = _size = size; + } + + int customSize = c.readNumEntry ("CustomSize", 0); + if (customSize != _customSize && customSize != _orig_customSize) + { + _orig_customSize = _customSize = customSize; + } + + } +} + +void ExtensionInfo::setDefaults() +{ + // defaults + _position = 3; + _alignment = QApplication::reverseLayout() ? 2 : 0; + _xineramaScreen = QApplication::desktop()->primaryScreen(); + _size = 2; + _showLeftHB = false; + _showRightHB = true; + _hideButtonSize = 14; + _autohidePanel = false; + _backgroundHide = false; + _autoHideSwitch = false; + _autoHideDelay = 3; + _hideAnim = true; + _hideAnimSpeed = 40; + _unhideLocation = 0; + _sizePercentage = 100; + _expandSize = true; + _customSize = 0; + _resizeable = false; + _useStdSizes = false; + _customSizeMin = 0; + _customSizeMax = 0; +} + +void ExtensionInfo::save() +{ + KConfig c(_configFile); + c.setGroup("General"); + + c.writeEntry("Position", _position); + c.writeEntry("Alignment", _alignment); + c.writeEntry("XineramaScreen", _xineramaScreen); + c.writeEntry("ShowLeftHideButton", _showLeftHB); + c.writeEntry("ShowRightHideButton", _showRightHB); + c.writeEntry("AutoHidePanel", _autohidePanel); + c.writeEntry("BackgroundHide", _backgroundHide); + c.writeEntry("AutoHideSwitch", _autoHideSwitch); + c.writeEntry("AutoHideDelay", _autoHideDelay); + c.writeEntry("HideAnimation", _hideAnim); + c.writeEntry("HideAnimationSpeed", _hideAnimSpeed); + c.writeEntry("UnhideLocation", _unhideLocation); + c.writeEntry("SizePercentage", _sizePercentage ); + c.writeEntry("ExpandSize", _expandSize ); + + // FIXME: this is set only for the main panel and only in the + // look 'n feel (aka appearance) tab. so we can't save it here + // this should be implemented properly. - AJS + //c.writeEntry("HideButtonSize", _hideButtonSize); + + if (_resizeable) + { + c.writeEntry("Size", _size); + c.writeEntry("CustomSize", _customSize); + } + + _orig_position = _position; + _orig_alignment = _alignment; + _orig_size = _size; + _orig_customSize = _customSize; + + c.sync(); +} diff --git a/kcontrol/kicker/extensionInfo.h b/kcontrol/kicker/extensionInfo.h new file mode 100644 index 000000000..a8885c651 --- /dev/null +++ b/kcontrol/kicker/extensionInfo.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2001 John Firebaugh + * Copyright (c) 2002 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __PANELINFO_H +#define __PANELINFO_H + +#include +#include +#include + +class ExtensionInfo; + +typedef QValueList ExtensionInfoList; + +class ExtensionInfo +{ + public: + ExtensionInfo(const QString& destopFile, + const QString& configFile, + const QString& configPath); + ~ExtensionInfo() {}; + + void setDefaults(); + void save(); + void load(); + void configChanged(); + + QString _configFile; + QString _configPath; + QString _desktopFile; + + // Configuration settings + QString _name; + int _position; + int _alignment; + int _xineramaScreen; + int _size; + int _customSize; + bool _showLeftHB; + bool _showRightHB; + int _hideButtonSize; + bool _autohidePanel; + bool _backgroundHide; + bool _autoHideSwitch; + int _autoHideDelay; + bool _hideAnim; + int _hideAnimSpeed; + int _unhideLocation; + int _sizePercentage; + bool _expandSize; + + // Original settings to ensure that we can figure out + // what has changed externally to the panel vs within the panel + int _orig_position; + int _orig_alignment; + int _orig_size; + int _orig_customSize; + + // Size info + bool _resizeable; + bool _useStdSizes; + int _customSizeMin; + int _customSizeMax; + + // position handling + bool _allowedPosition[4]; +}; + +#endif + diff --git a/kcontrol/kicker/hidingconfig.cpp b/kcontrol/kicker/hidingconfig.cpp new file mode 100644 index 000000000..95899d9dc --- /dev/null +++ b/kcontrol/kicker/hidingconfig.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include + +#include +#include + +#include "hidingtab_impl.h" +#include "kickerSettings.h" +#include "main.h" + +#include "hidingconfig.h" +#include "hidingconfig.moc" + +HidingConfig::HidingConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + m_widget = new HidingTab(this); + layout->addWidget(m_widget); + layout->addStretch(); + + setQuickHelp(KickerConfig::the()->quickHelp()); + setAboutData(KickerConfig::the()->aboutData()); + + //addConfig(KickerSettings::self(), m_widget); + + connect(m_widget, SIGNAL(changed()), + this, SLOT(changed())); + connect(KickerConfig::the(), SIGNAL(aboutToNotifyKicker()), + this, SLOT(aboutToNotifyKicker())); + + load(); + QTimer::singleShot(0, this, SLOT(notChanged())); +} + +void HidingConfig::notChanged() +{ + emit changed(false); +} + +void HidingConfig::load() +{ + m_widget->load(); + KCModule::load(); +} + +void HidingConfig::aboutToNotifyKicker() +{ + kdDebug() << "HidingConfig::aboutToNotifyKicker()" << endl; + + // This slot is triggered by the signal, + // which is send before Kicker is notified. + // See comment in save(). + m_widget->save(); + KCModule::save(); +} + +void HidingConfig::save() +{ + // As we don't want to notify Kicker multiple times + // we do not save the settings here. Instead the + // KickerConfig object sends a signal before the + // notification. On this signal all existing modules, + // including this object, save their settings. + KickerConfig::the()->notifyKicker(); +} + +void HidingConfig::defaults() +{ + m_widget->defaults(); + KCModule::defaults(); + + // KConfigDialogManager may queue an changed(false) signal, + // so we make sure, that the module is labeled as changed, + // while we manage some of the widgets ourselves + QTimer::singleShot(0, this, SLOT(changed())); +} diff --git a/kcontrol/kicker/hidingconfig.h b/kcontrol/kicker/hidingconfig.h new file mode 100644 index 000000000..c5b3d66a8 --- /dev/null +++ b/kcontrol/kicker/hidingconfig.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __hidingconfig_h__ +#define __hidingconfig_h__ + +#include + +class HidingTab; + +class HidingConfig : public KCModule +{ + Q_OBJECT + +public: + HidingConfig(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + void defaults(); + +public slots: + void notChanged(); + void aboutToNotifyKicker(); + +private: + HidingTab *m_widget; +}; + +#endif // __hidingconfig_h__ diff --git a/kcontrol/kicker/hidingtab.ui b/kcontrol/kicker/hidingtab.ui new file mode 100644 index 000000000..8d7b0b254 --- /dev/null +++ b/kcontrol/kicker/hidingtab.ui @@ -0,0 +1,761 @@ + +HidingTabBase + + + HidingTabBase + + + + 0 + 0 + 694 + 472 + + + + + unnamed + + + 0 + + + + m_panelsGroupBox + + + NoFrame + + + + + + + unnamed + + + 0 + + + + m_panelListLabel + + + S&ettings for: + + + m_panelList + + + + + m_panelList + + + + + spacer11 + + + Horizontal + + + Expanding + + + + 342 + 20 + + + + + + + + m_modeGroup + + + Hide Mode + + + + unnamed + + + + Spacer6 + + + Horizontal + + + Fixed + + + + 30 + 20 + + + + + + m_manual + + + On&ly hide when a panel-hiding button is clicked + + + true + + + If this option is selected, the only way to hide the panel will be to click on the hide buttons that appear on either end of it. + + + + + layout5 + + + + unnamed + + + + m_delaySpinBox + + + false + + + 0 + + + 10 + + + sec + + + Immediately + + + Here you can change the delay after which the panel will disappear if not used. + + + + + DelayLabel_2_3_2 + + + false + + + + 5 + 5 + 0 + 0 + + + + after the &cursor leaves the panel + + + m_delaySpinBox + + + Here you can change the delay after which the panel will disappear if not used. + + + + + Spacer10 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + m_background + + + NoFocus + + + Allow other &windows to cover the panel + + + If this option is selected, the panel will allow itself to be covered by other windows. + + + + + m_automatic + + + NoFocus + + + Hide a&utomatically + + + If this option is selected, the panel will automatically hide after a period of time and reappear when you move the mouse to the screen edge where the panel is hidden. This is particularly useful for small screen resolutions, such as on laptops. + + + + + layout6 + + + + unnamed + + + + m_backgroundRaise + + + false + + + &Raise when the pointer touches the screen's: + + + When this option is selected, moving the pointer to the specified edge of the screen will cause the panel to appear on top of any windows that may be covering it. + + + + + + Top Left Corner + + + + + Top Edge + + + + + Top Right Corner + + + + + Right Edge + + + + + Bottom Right Corner + + + + + Bottom Edge + + + + + Bottom Left Corner + + + + + Left Edge + + + + m_backgroundPos + + + false + + + Here you can set the location on the screen's edge that will bring the panel to the front. + + + + + Spacer23 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + m_autoHideSwitch + + + false + + + Show panel when switching &desktops + + + If this option is enabled, the panel will automatically show itself for a brief period of time when the desktop is switched so you can see which desktop you are on. + + + + + spacer12 + + + Vertical + + + Fixed + + + + 50 + 10 + + + + + + + + m_manualGroup + + + + 1 + 4 + 0 + 0 + + + + Panel-Hiding Buttons + + + This option controls the panel-hiding buttons, which are buttons with a small triangle found at the ends of the panel. You can place a button at either end of the panel, or both. Clicking on one of these buttons will hide the panel. + + + + unnamed + + + + m_lHB + + + Show left panel-hiding bu&tton + + + false + + + When this option is selected, a panel-hiding button appears on the left end of the panel. + + + + + m_rHB + + + Show right panel-hiding &button + + + true + + + When this option is selected, a panel-hiding button appears on the right end of the panel. + + + + + Spacer17 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + m_manualGroup_2 + + + + 1 + 4 + 0 + 0 + + + + Panel Animation + + + + unnamed + + + + Spacer18 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + m_animateHiding + + + A&nimate panel hiding + + + When this option is selected the panel will "slide" off the screen when hiding. The speed of the animation is controlled by the slider directly below. + + + + + Spacer6_2 + + + Horizontal + + + Fixed + + + + 30 + 20 + + + + + + Layout2 + + + + unnamed + + + + m_hideSlider + + + false + + + + 7 + 0 + 0 + 0 + + + + 1 + + + 10 + + + 1 + + + 10 + + + Horizontal + + + NoMarks + + + 1 + + + Determines how quickly the panel hides if hiding animation is enabled. + + + + + Spacer3_2_2_3 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + TextLabel4_2_2_2_3 + + + false + + + + 1 + 1 + 0 + 0 + + + + Fast + + + AlignVCenter|AlignRight + + + + + + + Spacer3_3_3 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + TextLabel5_2_2_2_3 + + + false + + + + 1 + 1 + 0 + 0 + + + + Medium + + + AlignCenter + + + + + + + TextLabel3_2_2_3_3 + + + false + + + + 1 + 1 + 0 + 0 + + + + Slow + + + + + + + + + Spacer7 + + + Vertical + + + Expanding + + + + 20 + 16 + + + + + + + + m_automatic + toggled(bool) + DelayLabel_2_3_2 + setEnabled(bool) + + + m_automatic + toggled(bool) + m_autoHideSwitch + setEnabled(bool) + + + m_background + toggled(bool) + m_backgroundRaise + setEnabled(bool) + + + m_animateHiding + toggled(bool) + TextLabel3_2_2_3_3 + setEnabled(bool) + + + m_animateHiding + toggled(bool) + TextLabel5_2_2_2_3 + setEnabled(bool) + + + m_animateHiding + toggled(bool) + TextLabel4_2_2_2_3 + setEnabled(bool) + + + m_animateHiding + clicked() + m_hideSlider + setFocus() + + + m_animateHiding + toggled(bool) + m_hideSlider + setEnabled(bool) + + + m_backgroundRaise + clicked() + m_backgroundPos + setFocus() + + + m_backgroundRaise + toggled(bool) + m_backgroundPos + setEnabled(bool) + + + m_automatic + toggled(bool) + m_delaySpinBox + setEnabled(bool) + + + m_panelList + activated(int) + HidingTabBase + switchPanel(int) + + + m_automatic + toggled(bool) + m_backgroundRaise + setEnabled(bool) + + + m_background + toggled(bool) + m_autoHideSwitch + setEnabled(bool) + + + + m_manual + m_delaySpinBox + m_autoHideSwitch + m_backgroundRaise + m_backgroundPos + m_lHB + m_rHB + m_animateHiding + m_hideSlider + m_automatic + m_background + + + klineedit.h + knuminput.h + kdialog.h + + + switchPanel(int) + + + + + knuminput.h + + diff --git a/kcontrol/kicker/hidingtab_impl.cpp b/kcontrol/kicker/hidingtab_impl.cpp new file mode 100644 index 000000000..e637b71c0 --- /dev/null +++ b/kcontrol/kicker/hidingtab_impl.cpp @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2000 Matthias Elter + * Copyright (c) 2002 Aaron Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "main.h" +#include "positiontab_impl.h" + +#include "hidingtab_impl.h" +#include "hidingtab_impl.moc" + + +HidingTab::HidingTab(QWidget *parent, const char* name) + : HidingTabBase(parent, name), + m_panelInfo(0) +{ + // connections + connect(m_manual,SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_automatic, SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_automatic, SIGNAL(toggled(bool)), SLOT(backgroundModeClicked())); + connect(m_background,SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_background, SIGNAL(toggled(bool)), SLOT(backgroundModeClicked())); + connect(m_hideSlider, SIGNAL(valueChanged(int)), SIGNAL(changed())); + connect(m_delaySpinBox, SIGNAL(valueChanged(int)), SIGNAL(changed())); + connect(m_animateHiding, SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_delaySpinBox, SIGNAL(valueChanged(int)), SIGNAL(changed())); + connect(m_autoHideSwitch, SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_backgroundRaise, SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_backgroundPos, SIGNAL(activated(int)), SIGNAL(changed())); + connect(m_lHB, SIGNAL(toggled(bool)), SIGNAL(changed())); + connect(m_rHB, SIGNAL(toggled(bool)), SIGNAL(changed())); + + connect(KickerConfig::the(), SIGNAL(extensionInfoChanged()), + SLOT(infoUpdated())); + connect(KickerConfig::the(), SIGNAL(extensionAdded(ExtensionInfo*)), + SLOT(extensionAdded(ExtensionInfo*))); + connect(KickerConfig::the(), SIGNAL(extensionRemoved(ExtensionInfo*)), + SLOT(extensionRemoved(ExtensionInfo*))); + // position tab tells hiding tab about extension selections and vice versa + connect(KickerConfig::the(), SIGNAL(positionPanelChanged(int)), + SLOT(switchPanel(int))); + connect(m_panelList, SIGNAL(activated(int)), + KickerConfig::the(), SIGNAL(hidingPanelChanged(int))); +} + +void HidingTab::load() +{ + KickerConfig::the()->populateExtensionInfoList(m_panelList); + m_panelsGroupBox->setHidden(m_panelList->count() < 2); + + switchPanel(KickerConfig::the()->currentPanelIndex()); +} + +void HidingTab::extensionAdded(ExtensionInfo* info) +{ + m_panelList->insertItem(info->_name); + m_panelsGroupBox->setHidden(m_panelList->count() < 2); +} + +void HidingTab::extensionRemoved(ExtensionInfo* info) +{ + int count = m_panelList->count(); + int extensionCount = KickerConfig::the()->extensionsInfo().count(); + int index = 0; + for (; index < count && index < extensionCount; ++index) + { + if (KickerConfig::the()->extensionsInfo()[index] == info) + { + break; + } + } + + bool isCurrentlySelected = index == m_panelList->currentItem(); + m_panelList->removeItem(index); + m_panelsGroupBox->setHidden(m_panelList->count() < 2); + + if (isCurrentlySelected) + { + m_panelList->setCurrentItem(0); + } +} + +void HidingTab::switchPanel(int panelItem) +{ + blockSignals(true); + ExtensionInfo* panelInfo = (KickerConfig::the()->extensionsInfo())[panelItem]; + + if (!panelInfo) + { + m_panelList->setCurrentItem(0); + panelInfo = (KickerConfig::the()->extensionsInfo())[panelItem]; + + if (!panelInfo) + { + return; + } + } + + if (m_panelInfo) + { + storeInfo(); + } + + m_panelList->setCurrentItem(panelItem); + + m_panelInfo = panelInfo; + + if(m_panelInfo->_autohidePanel) + { + m_automatic->setChecked(true); + } + else if(m_panelInfo->_backgroundHide) + { + m_background->setChecked(true); + } + else + { + m_manual->setChecked(true); + } + + m_delaySpinBox->setValue(m_panelInfo->_autoHideDelay); + m_autoHideSwitch->setChecked(m_panelInfo->_autoHideSwitch); + + m_lHB->setChecked( m_panelInfo->_showLeftHB ); + m_rHB->setChecked( m_panelInfo->_showRightHB ); + + m_animateHiding->setChecked(m_panelInfo->_hideAnim); + m_hideSlider->setValue(m_panelInfo->_hideAnimSpeed/10); + + if (m_panelInfo->_unhideLocation > 0) + { + m_backgroundRaise->setChecked(true); + m_backgroundPos->setCurrentItem(triggerConfigToCombo(m_panelInfo->_unhideLocation)); + } + else + { + m_backgroundRaise->setChecked(false); + } + + panelPositionChanged(m_panelInfo->_position); + + backgroundModeClicked(); + blockSignals(false); +} + +void HidingTab::save() +{ + storeInfo(); + KickerConfig::the()->saveExtentionInfo(); +} + +void HidingTab::storeInfo() +{ + if (!m_panelInfo) + { + return; + } + + m_panelInfo->_autohidePanel = m_automatic->isChecked(); + m_panelInfo->_backgroundHide = m_background->isChecked(); + + m_panelInfo->_showLeftHB = m_lHB->isChecked(); + m_panelInfo->_showRightHB = m_rHB->isChecked(); + m_panelInfo->_hideAnim = m_animateHiding->isChecked(); + m_panelInfo->_hideAnimSpeed = m_hideSlider->value() * 10; + + m_panelInfo->_autoHideDelay = m_delaySpinBox->value(); + m_panelInfo->_autoHideSwitch = m_autoHideSwitch->isChecked(); + + m_panelInfo->_unhideLocation = m_backgroundRaise->isChecked() ? + triggerComboToConfig(m_backgroundPos->currentItem()) : 0; +} + +void HidingTab::defaults() +{ + m_manual->setChecked( true ); + m_delaySpinBox->setValue( 3 ); + m_autoHideSwitch->setChecked( false ); + m_lHB->setChecked( false ); + m_rHB->setChecked( true ); + m_animateHiding->setChecked( true ); + m_hideSlider->setValue( 10 ); + m_delaySpinBox->setValue( 3 ); + m_backgroundPos->setCurrentItem( triggerConfigToCombo( BottomLeft ) ); + m_backgroundRaise->setChecked( false ); +} + +void HidingTab::panelPositionChanged(int position) +{ + if (position == PositionTab::PosTop || + position == PositionTab::PosBottom) + { + m_lHB->setText(i18n("Show left panel-hiding bu&tton")); + m_rHB->setText(i18n("Show right panel-hiding bu&tton")); + } + else + { + m_lHB->setText(i18n("Show top panel-hiding bu&tton")); + m_rHB->setText(i18n("Show bottom panel-hiding bu&tton")); + } +} + +int HidingTab::triggerComboToConfig(int trigger) +{ + if (trigger == 0) + return TopLeft; + else if (trigger == 1) + return Top; + else if (trigger == 2) + return TopRight; + else if (trigger == 3) + return Right; + else if (trigger == 4) + return BottomRight; + else if (trigger == 5) + return Bottom; + else if (trigger == 6) + return BottomLeft; + else if (trigger == 7) + return Left; + + return 0; +} + +int HidingTab::triggerConfigToCombo(int trigger) +{ + if (trigger == TopLeft) + return 0; + else if (trigger == Top) + return 1; + else if (trigger == TopRight) + return 2; + else if (trigger == Right) + return 3; + else if (trigger == BottomRight) + return 4; + else if (trigger == Bottom) + return 5; + else if (trigger == BottomLeft) + return 6; + else if (trigger == Left) + return 7; + + return 0; +} + +void HidingTab::backgroundModeClicked() +{ + m_backgroundPos->setEnabled((m_automatic->isChecked() || + m_background->isChecked()) && + m_backgroundRaise->isChecked()); +} + +void HidingTab::infoUpdated() +{ + switchPanel(0); +} diff --git a/kcontrol/kicker/hidingtab_impl.h b/kcontrol/kicker/hidingtab_impl.h new file mode 100644 index 000000000..69e39dea0 --- /dev/null +++ b/kcontrol/kicker/hidingtab_impl.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2000 Matthias Elter + * Copyright (c) 2002 Aaron Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __hidingtab_impl_h__ +#define __hidingtab_impl_h__ + +#include "hidingtab.h" + +class KickerConfig; +class ExtensionInfo; + +class HidingTab : public HidingTabBase +{ + Q_OBJECT + +public: + HidingTab(QWidget *parent = 0, const char* name = 0); + + void load(); + void save(); + void defaults(); + +signals: + void changed(); + +public slots: + void panelPositionChanged(int); + +protected slots: + void backgroundModeClicked(); + void infoUpdated(); + void storeInfo(); + void extensionAdded(ExtensionInfo*); + void extensionRemoved(ExtensionInfo*); + void switchPanel(int); + +private: + enum Trigger { None = 0, Top, TopRight, Right, BottomRight, Bottom, BottomLeft, Left, TopLeft }; + + // these convert between the combobox and the config file for trigger + // this is why storing enums vs strings can be a BAD thing + int triggerComboToConfig(int trigger); + int triggerConfigToCombo(int trigger); + + KickerConfig* m_kcm; + ExtensionInfo* m_panelInfo; +}; + +#endif diff --git a/kcontrol/kicker/kicker_config.desktop b/kcontrol/kicker/kicker_config.desktop new file mode 100644 index 000000000..85dab37e9 --- /dev/null +++ b/kcontrol/kicker/kicker_config.desktop @@ -0,0 +1,223 @@ +[Desktop Entry] +Icon=kcmkicker +Type=Application +DocPath=kcontrol/panel/index.html +Exec=kcmshell panel + + +X-KDE-Library=kicker +X-KDE-FactoryName=kicker +X-KDE-ParentApp=kicker + +Name=Layout +Name[af]=Uitleg +Name[ar]=التصميم +Name[az]=Düzülüş +Name[be]=Расклад +Name[bg]=Системен панел +Name[bn]=বিন্যাস +Name[br]=Doare +Name[bs]=Izgled +Name[ca]=Disposició +Name[cs]=Rozvržení +Name[csb]=Ùstôw +Name[cy]=Cynllun +Name[el]=Διάταξη +Name[eo]=Aranĝo +Name[es]=Disposición +Name[et]=Paigutus +Name[eu]=Diseinua +Name[fa]=طرح‌بندی +Name[fi]=Ulkonäkö +Name[fr]=Disposition +Name[fy]=Untwerp +Name[ga]=Leagan Amach +Name[gl]=Disposición +Name[he]=סידור +Name[hi]=ले-आउट +Name[hr]=Raspored +Name[hu]=Elrendezés +Name[id]=Tata Letak +Name[is]=Útlit +Name[it]=Aspetto +Name[ja]=配置 +Name[ka]=განლაგება +Name[kk]=Орналасу +Name[km]=ប្លង់ +Name[lo]=ລັອກເອົ້າ +Name[lt]=Pavidalas +Name[lv]=Izkārtojums +Name[mk]=Распоред +Name[ms]=Bentangan +Name[mt]=Tqassim +Name[nb]=Utseende +Name[ne]=सजावट +Name[nl]=Opmaak +Name[nn]=Utsjånad +Name[nso]=Peakanyo +Name[pa]=ਖਾਕਾ +Name[pl]=Układ +Name[pt]=Disposição +Name[ro]=Format +Name[ru]=Расположение +Name[rw]=Imboneko +Name[se]=Ráhkadus +Name[sk]=Rozloženie +Name[sl]=Razpored +Name[sr]=Изглед +Name[sr@Latn]=Izgled +Name[ta]=உருவரை +Name[te]=కూర్పు +Name[tg]=Тарҳбандӣ +Name[th]=การจัดวาง +Name[tr]=Düzen +Name[tt]=Urnaşılu +Name[uk]=Розкладка +Name[uz]=Joylashishi +Name[uz@cyrillic]=Жойлашиши +Name[ven]=Tshivhumbeo +Name[vi]=Xếp đặt +Name[wa]=Adjinçmint +Name[xh]=Ubeko +Name[zh_CN]=布局 +Name[zh_TW]=配置 +Name[zu]=Isendlalelo + +Comment=You can configure the arrangement of the panel here +Comment[af]=Jy kan die rangskikking van die paneel hier opstel +Comment[ar]=يمكنك إعداد ترتيب اللوحة هنا +Comment[az]=Panelin düzülüşünü buradan quraşdıra bilərsiniz +Comment[be]=Тут вы можаце змяніць настаўленні раўнавання панэлі +Comment[bg]=Настройване на системния панел +Comment[bn]=আপনি এখানে প্যানেল-এর বিন্যাস কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ doare ar banell +Comment[bs]=Ovdje možete podesiti izgled panela +Comment[ca]=Aquí podeu configurar l'arranjament del plafó +Comment[cs]=Zde je možné nastavit uspořádání panelu +Comment[csb]=Kònfigùracëjô pòłożeniô panelu +Comment[cy]=Cewch ffurfweddu trefn y panel yma +Comment[da]=Her kan du indstille panelets arrangement +Comment[de]=Hier können Sie Einstellungen für die Kontrollleiste vornehmen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε τη διάταξη του πίνακα +Comment[eo]=Ĉi tie vi povas agordi la aranĝon de la panelo +Comment[es]=Configuración de la apariencia del panel +Comment[et]=Siin saad seadistada paneeli paigutust +Comment[eu]=Panelaren kokapena konfigura dezakezu hemen +Comment[fa]=می‌توانید ترتیب تابلو را اینجا پیکربندی کنید +Comment[fi]=Muokkaa paneelin asettelua ja sisältöä +Comment[fr]=Configuration de l'apparence du tableau de bord +Comment[fy]=Hjir kinne jo it ûntwerp fan it paniel ynstelle +Comment[gl]=Pode configurar aqui a disposición do painel +Comment[he]=שינוי הגדרות הסידור של הלוח +Comment[hi]=फलक की व्यवस्था को आप यहाँ कॉन्फ़िगर कर सकते हैं +Comment[hr]=Konfiguriranje rasporeda ploče +Comment[hu]=Itt lehet beállítani a panel elrendezését +Comment[is]=Stilla viðmót spjaldsins +Comment[it]=Configura la disposizione del pannello +Comment[ja]=ここでパネルの配置を設定します +Comment[ka]=აქ შეგიძლიათ პანელის თანმიმდევრულობის კონფიგურაცია +Comment[kk]=Панельді орналастыру +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​ការ​រៀបចំ​បន្ទះ +Comment[ko]=데스크톱의 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງລັກສະນະ ທີ່ປະກົດຂອງພາແນວໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti pulto pavidalą +Comment[lv]=Šeit jūs varat konfigurēt paneļa izkārtojumu +Comment[mk]=Тука може да го конфигурирате распоредот на панелот +Comment[mn]=Энд та удирдах самбар тохируулж болно +Comment[ms]=Anda boleh konfigur susunan panel di sini +Comment[mt]=Tista' tbiddel it-tqassim tal-pannell hawnhekk +Comment[nb]=Her kan du sette opp hvordan panelet skal se ut +Comment[nds]=Hier kannst Du de Anornen vun't Paneel instellen +Comment[ne]=तपाईँले यहाँ प्यानलको मिलान कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=U kunt hier de opmaak van het paneel instellen +Comment[nn]=Her kan du setja opp utsjånaden til panelet +Comment[nso]=Oka beakanya kgobokanyo ya panel mo +Comment[pa]=ਤੁਸੀਂ ਪੈਨਲ ਦੇ ਢਾਂਚੇ ਦੀ ਸੰਰਚਨਾ ਇੱਥੇ ਕਰ ਸਕਦੇ ਹੋ +Comment[pl]=Konfiguracja położenia panelu +Comment[pt]=Pode configurar o posicionamento do painel aqui +Comment[pt_BR]=Você pode configurar a disposição do painel aqui +Comment[ro]=Aici puteți configura modul de aranjare al panoului KDE +Comment[ru]=Настройка выравнивания панели +Comment[rw]=Ushobora kuboneza itunganya ry'umwanya hano +Comment[se]=Dáppe sáhtát heivehit panela ráhkadusa +Comment[sk]=Nastavenie vzhľadu panelu +Comment[sl]=Tu lahko nastavite razpored pulta +Comment[sr]=Овде можете подесити распоред панела +Comment[sr@Latn]=Ovde možete podesiti raspored panela +Comment[sv]=Du kan anpassa panelens utseende här +Comment[ta]=பலகத்தின் தோற்றத்தை இங்கே அமைக்க முடியும் +Comment[tg]= Дар инҷо шумо метавонед тоҳири сафҳотро танзим кунед +Comment[th]=คุณสามารถปรับแต่งการจัดวางถาดพาเนลได้ที่นี่ +Comment[tr]=Panelin görünümünü buradan yapılandırabilirsiniz +Comment[tt]=Taqta urnaşıluın köyläw urını +Comment[uk]=Тут можна налаштувати вигляд панелі +Comment[uz]=Bu yerda panelning tartibini moslashingiz mumkin +Comment[uz@cyrillic]=Бу ерда панелнинг тартибини мослашингиз мумкин +Comment[ven]=Ninga dzudzanya mavhekanyele a phanele hafhano +Comment[vi]=Bạn có thể cấu hình sự sắp xếp các bảng điều khiển ở đây +Comment[wa]=Vos ploz apontyî chal l' arindjimint do scriftôr +Comment[xh]=Uyakwazi ukuqwalasela apha i window yenkcukacha +Comment[zh_CN]=您可以在这里配置面板的排列 +Comment[zh_TW]=您可以在此設定面板的外觀 +Comment[zu]=Ungahlanganisela ukuhlelwa kwewindi lemininingwane lapha + +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Размяшчэнне,Пазіцыя,Памер,Аўтаматычна хаваць,Хаваць,Кнопкі,Анімацыя,Фон,Тэмы,Кэш меню,Кэш,Схаваная,Схаваць,Меню KDE,Закладкі,Ранейшыя,Нядаўнія,Дакументы,Хуткі прагляд,Меню вандроўніка,Меню вандравання,Меню,Значкі,Аплеты,Запуск,Падсвятленне,Апрацоўка,Апрацоўшчык,Маштабаванне значак,kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[bg]=системен, панел, подредба, подравняване, kicker, panel, kpanel, taskbar, startbar, launchbar, location, size, auto hide, hide, buttons, animation, background, themes, menu cache, cache, hidden, K-Menu, bookmarks, recent documents, quickbrowser, browser menu, menu, icons, tiles, applets, startup, highlight, handles, zooming icons +Keywords[bs]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,veličina,automatsko sakrivanje,sakrivanje,dugmad,animacija,pozadina,teme,keš menija,meni,keš,skriven,zabilješke,skorašnji dokumenti,meni browsera,meni preglednika,ikone,appleti,pokretanje,uvećavanje +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra de llançament,localització,mida,auto oculta,oculta,botons,animació,temes,fons,cau del menú,cau,ocult,Menú K,punts,documents recents,navegació ràpida,menú de navegació,menú,icones,mosaics,aplets,arrencada,ressaltat,nanses,ampliar les icones +Keywords[cs]=kicker,panel,kpanel,pruh úloh,lišta úloh,umístění, velikost,skrývání,automatické skrývání,tlačítka,animace,pozadí, motivy,nabídka,menu,záložky,nedávné dokumenty,rychlé prohlížení, ikony,dlaždice,applety,spuštění,zvýraznění,úchytky,zvětšování ikon +Keywords[csb]=kicker,panel,kpanel,lëstëw zadaniów,sztartowô lëstëw,lëstëw zrëszaniô,pòłożenié,miara,aùtomatno tacënié,tacë,knąpë,animacëjô,spódk,spòdlé,témë,cache menu,cache,zatacony,K-Menu,załóżczi,slédny dokùmentë,chùtczé przezéranié,menu,ikònë,kafelkòwané,programiczi,zrëszanié,pòdskrzënianié,ùchwëtë,zwikszanié ikònów +Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,håndterer,ikoner +Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +Keywords[el]=kicker,πίνακας,kpanel,γραμμή εργασιών,γραμμή έναρξης,γραμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκρυψη,απόκρυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενού,λανθάνουσα μνήμη,κρυφό, K-Μενού,σελιδοδείκτες,πρόσφατα έγγραφα,γρήγορος εξερευνητής,μενού εξερευνητή,μενού,εικονίδια,tiles,μικροεφαρμογές,έναρξη,τονισμός,χειριστήρια, μεγέθυνση εικονιδίων +Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aŭtokaŝo,kaŝo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiarazte-barra,kokapena, neurria,auto ezkutatu,ezkutatu,botoiak,animazioa,atzeko planoa, gaiak,menu-katxea,katxea,ezkutatu,K-menua,laster-markak,oraintsuko dokumentuak, arakatzaile bizkorra,arakatzaile menua,menua,ikonoak,baldosak,appletak,abiatu,nabarmendu,heldulekuak,zooming icons +Keywords[fa]=kicker، تابلو، kpanel، میله‌ تکلیف، میله آغاز، میله راه‌انداز، محل، اندازه، مخفی کردن خودکار، مخفی کردن، دکمه‌ها، پویانمایی، زمینه، چهره‌ها، نهانگاه گزینگان، نهانگاه، مخفی، گزینگان K، چوب ‌الفها، سندهای اخیر، مرورگر سریع، گزینگان، مرورگر، شمایلها، کاشیها، برنامکها، راه‌اندازی، مشخص، گرداننده‌ها، بزرگ‌نمایی شمایلها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistyspalkki,paikka,koko,automaattipiilotus,piilotus,napit,animaatio,tausta,teemat,valikkovälimuisti,välimuisti,K-valikko,kirjanmerkit,viimeaikaiset asiakirjat,pikaselain,selausvalikko,valikko,kuvakkeet,sovelmat,käynnistys,korostus,kahvat,kuvakkeiden suurennus +Keywords[fr]=kicker,tableau de bord,barre du bas,barre des tâches,barre de démarrage,barre de lancement,emplacement,taille,auto-masquage,cacher,masquer,boutons,animation,fond,arrière-plan,thème,cache de menu,cache,caché,menu K,K,signets,documents récents,document récent,navigateur rapide,navigateur,menu,icône,mosaïque,applet,démarrage,surbrillance,poignée,poignées,zoom,zoom sur les icônes +Keywords[fy]=kicker,paniel,kpanel,taakbalke,takebalke,Startbalke,startmenu,applikaasje begjinner,lokaasje,ôfmjiting,terminaltapassing,auto hide,automatysk ferstopje,ferstopje,Ynklappe,knoppen,animaasje,eftergrûn,tema's,menu lyts ûnthâld,lyts ûnthâld,ferstoppe,K-Menu,bookmarks,blêdwizers,resinte dokuminten,quickbrowser,browser menu,menu,icons,ikoan,ikoanen,tegels,tiles,applets,begjinne,opljochtsje,handles,zoomen,knoppen,hanfetten,betroubere applets,feiligens nivo +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,barra de comezo,barra de lanzamento,localización,tamaño,auto agochamento,agochamento,botóns,animación,fondo,temas,cache de menú,caché,oculto,Menú K,marcadores,derradeiros documentos,navegador rápido,menú de navegación,menú,iconas,apliques,início,resaltado,xestión,aumento de iconas +Keywords[he]=kicker, לוח, kpanel, שורת משימות, שורת הרצה, מיקום, גודל, הסתרה אוטומטית, הסתר, אנימציה, רקע, ערכות, תפריט, מטמון, מוסתר, תפריט K, מועדפים, מסמכים אחרונים, דפדוף מהיר, תפריט, סימנים, סמלים, כותרות, יישומונים, אתחול, הדגשה, ידיות, הגדלת סמלים, taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, panel +Keywords[hi]=किकर,फलक,के-पेनल,कार्यपट्टी,प्रारंभपट्टी,चालकपट्टी,स्थान,आकार,स्वतः छुपें,छुपें,बटन्स,एनिमेशन,पृष्ठभूमि,प्रसंग,मेनू कैश,कैश,छुपा,के-मेन्यू,पसंद,हाल ही के दस्तावेज़,क्विक-ब्राउज़र,ब्राउज़र मेन्यू,मेन्यू,प्रतीक,टाइल्स,ऐप्लेट्स,स्टार्टअप,उभारना,हैंडल्स,जूमिंग प्रतीक +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,ploča,traka zadataka,traka pokretanja,lokacija,veličina,automatsko skrivanje,skrivanje,gumbi,animacija,pozadina,teme,pohrana izbornika,pohrana,skriven,oznake,nedavni dokumenti,brzi preglednik,izbornik preglednika,izbornik,ikone,popločeno,apleti,naglašavanje,rukovanje,uvećane ikone +Keywords[hu]=Kicker,panel,kpanel,feladatlista,start menü,indítómenü,indítósáv,hely,méret,automatikus elrejtés,elrejtés,gombok,animáció,háttér,témák,menügyorstár,gyorstár,rejtett,K menü,könyvjelzők,legutóbbi dokumentumok,gyorsböngésző,böngészőmenü,menü,ikonok,mozaikszerű,kisalkalmazások,indulás,kiemelés,fogantyúk,nagyítóikonok +Keywords[is]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,trusted applets,security level +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,taskbar,startbar,launchbar,barra di avvio,posizione,dimensione,scomparsa automatica,pulsanti,animazione,sfondo,temi,cache dei menu,nascosto,Menu K,segnalibri,documenti recenti,browser veloce,menu,icone,piastrelle,applet,avvio,evidenziazione,maniglie,ingrandimento icone +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,場所,サイズ,自動的に隠す,隠す,ボタン,アニメーション,背景,テーマ,メニューキャッシュ,キャッシュ,隠れた,Kメニュー,ブックマーク,最近のドキュメント,クイックブラウザ,ブラウザメニュー,メニュー,アイコン,タイル,アプレット,スタートアップ,ハイライト,ハンドル,アイコンのズーム +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,ទីតាំង,ទំហំ,លាក់​ស្វ័យប្រវត្តិ,លាក់,ប៊ូតុង,ចលនា,ផ្ទៃ​ខាង​ក្រោយ,ស្បែក,ឃ្លាំង​សម្ងាត់​ម៉ឺនុយ,ឃ្លាំង​សម្ងាត់,លាក់,ម៉ឺនុយ K,កន្លែង​ចំណាំ,ឯកសារ​ថ្មីៗ​នេះ,កម្មវិធី​រុករក​រហ័ស,ម៉ឺនុយ​កម្មវិធី​រុករក,ម៉ឺនុយ,រូបតំណាង,ក្បឿង,អាប់ភ្លេត,ចាប់ផ្ដើម,បន្លិច,ប្រើ,រូបតំណាង​ពង្រីក +Keywords[lt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,skydelis,kskydelis,užduočių juosta,paleidimo juosta,slėpti,mygtukai,animacija,fonas,temos,meniu atmintinė,atmintinė,paslėptas,žymelės,neseniai naudoti dokumentai,peržiūra,meniu,ženkliukai,perdengti,įskiepiai,paleistis,pažymėti,rankenėlės,išdidinti ženkliukus +Keywords[lv]=kicker,panelis,kpanel,uzdevumjosla,startbar,launchbar,location,size,izmērs,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,grāmatzīmes,recent documents,quickbrowser,browser menu,izvēlne,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,панел,лента со програми,локација,големина,авто криење,криење,копчиња,анимација,подлога,позадина,теми,кеш на менито,кеш,скриен,K-Мени,обележувачи, последни документи,брз прелистувач,мени за прелистувачи,мени,икони,плочки,аплети,рачки,зумирање на икони +Keywords[mt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,favoriti,pannell,post,daqs,lokazzjoni,ħabi,animazzjoni,buttuni +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,plassering,størrelse, autoskjul,skjul,knapper,animasjon,bakgrunn,temaer,mellomlager for temaer, mellomlager,skjult,K-meny,bokmerker,nylig brukte dokumenter,hurtigviser, katalogmeny,meny,ikoner,fliser,miniprogrammer,panelprogrammer,oppstart, uthev,håndtak,forstørring av ikoner +Keywords[nds]=Kicker,Paneel,kpanel,Taskbalken,Programmbalken,Startbalken,Adress,Grött,automaatsch versteken,versteken,Knööp,Knoop,Knööp,Animatschoon,Achtergrund,Muster,Menü-Twischenspieker,Twischenspieker,versteken,K-Menü,Leesteken,leste Dokmenten,Fixkieker,Nettkieker-Menü,Menü,Lüttbiller,Titel,Programmen,starten,markeren,handles,Grepen,Lüttbiller grötter maken +Keywords[ne]=किकर, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, स्थान, आकार, स्वत: लुकाउने, लुकाउनुहोस्, बटनहरू, एनिमेसन, पृष्ठभूमि, विषयवस्तुहरू, मेनु क्यास, क्यास, लुकेको, के-मेनु, पुस्तकचिनोहरू, हालको कागजातहरू, छिटो ब्राउजर, ब्राउजर मेनु, मेनु, प्रतिमा, टायलहरू, एप्लेटहरू, सुरु, हाइलाइट, ह्यान्डल गर्दछ, जुम प्रतिमा +Keywords[nl]=kicker,paneel,kpanel,taakbalk,takenbalk,startbalk,startmenu,applicatie starter,locatie,afmeting,terminaltoepassing,auto hide,automatisch verbergen,verbergen,invouwen,knoppen,animatie,achtergrond,thema's,menu cache,cache,verborgen,K-Menu,bookmarks,bladwijzers,recente documenten,quickbrowser,browser menu,menu,icons,icoon,iconen,pictogrammen,tegels,tiles,applets,opstarten,highlight,accentuering,handles,zoomen,knoppen,handvatten,betrouwbare applets,security level,beveiligingsniveau +Keywords[nn]=Kicker,panel,KPanel,oppgåvelinje,oppstartslinje,plassering,storleik,autogøym,gøym,knappar,animasjon,bakgrunn,tema,menymellomlager,mellomlager,gøymd,K-meny,bokmerke,nyleg bruka dokument,snøgglesar,katalogmeny,meny,ikon,brikker,applet,panelprogram,oppstart,merking,handtak,forstørring av ikon +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, ਪੈਨਲ, ਟਿਕਾਣਾ, ਬਰਾਊਜ਼ਰ, ਝਲਾਕਰਾ, ਕੈਂਚੇ, ਕੇ-ਮੇਨੂ, ਬੁੱਕਮਾਰਕ, ਤਾਜ਼ਾ, ਉਘੜੇ, ਹੈਂਡਲ, ਬਟਨ, ਸਰੂਪ, ਮੇਨੂ, ਓਹਲੇ, ਅਕਾਰ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,pasek uruchamiania,położenie,rozmiar,automatyczne ukrywanie,ukryj,przyciski,animacja,tło,motywy,bufor (cache) menu,bufor,cache,ukryty,K-Menu,zakładki,ostatnie dokumenty,szybkie przeglądanie,menu,ikony,kafelkowane,programiki,uruchomienie,podświetlanie,uchwyty,powiększanie ikon +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,localização,tamanho,auto-esconder,esconder,botões,animação,fundo,temas,'cache' de menu,'cache',escondido,menu K,favoritos,documentos recentes,navegador rápido,menu de navegação,menu,ícones,mosaicos,'applets',inicio,realce,pegas,ícones aumentados +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,lançar aplicativos,localização,tamanho,auto-ocultar,esconder,botões, animação,fundo,temas,cache de menu,cache,escondido,Menu K,favoritos,documentos recentes,navegador rápido, menu do navegador,menu,ícones,títulos,mini-aplicativos,iniciar,realçar, manipuladores, ícones de ampliação +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,lansare,mărime,locație,ascundere automată,butoane,animație,fundal,tematică,meniu K,semne de carte,documente recente,navigator rapid,meniu navigare,meniu,iconițe,mozaic,miniaplicații,evidențiere,scalare +Keywords[rw]=igitera,umwanya,k-umwanya,umurongogutangira,umurongogutangiza,indangahantu,ingano,kwihisha,guhisha,buto,iyega,mbuganyuma,insanganyamatsiko,ubwihisho bw'ibikubiyemo,ubwihisho,bihishe,K-Ibikubiyemo,utumenyetso,inyandiko zigezweho,mucukumbuzi yihuta,ibikubiyemo bya mucukumbuzi,ibikubiyemo,udushushondanga,udukaro,apuleti,gutangira,gushimangira,ibifashi,udushushondanga guhindura-ingano +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,báiki,sturrodat,autočiega,čiehkadit,boalut,animašuvdna,duogáš,fáddá,fálločiehkárájus,čiehkárájus,K-fállu,girjemearkkat,aiddo geavahuvvon dokumeantta,ohcofállu,fállu,govažat,prográmmažat,álggaheapmi,merken,geavjjat,luohttehahtti prográmmažat,sihkkarvuohtadássi +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,miesto,umiestnenie,veľkosť,terminálová aplikácia,skrývanie,automatické skrývanie,tlačidlá,animácia,pozadie,témy,cache,cache ponuky,skryté,K-Menu,záložky,posledné dokumenty,rýchly prehliadač,ponuka prehliadača,menu,ikony,applety,štart,zvýraznenie,handles,zväčšovanie ikon,overené applety,úroveň zabezpečenia +Keywords[sl]=kicker,pult,kpanel,opravilna vrstica,zagonska vrstica,mesto,lokacija,velikost,terminalski program,skrij,samodejno skrivanje,skrivanje,gumbi,animacija,ozadje,teme,menijski predpomnilnik,predpomnilnik,skrit,K-Menu,zaznamki,nedavni dokumenti,hitro brskanje,brskalni meni,meni,tlakovci,ikone,vstavki,zagon,osvetlitev,ročice,ikone za povečavo +Keywords[sr]=kicker,панел,kpanel,трака задатака,startbar,launchbar,локација,величина,Терминалски програм,аутоматско сакривање,сакривање,дугмићи,анимација,позадина,теме,мени кеш,кеш,скривен,K-Menu,маркери,скори документи,брзи прегледач,мени прегледача,мени,иконе,блокови,апплети,startup,истицање,хватаљке,увеличавање икона,аплети којима се верује,ниво безбедности +Keywords[sr@Latn]=kicker,panel,kpanel,traka zadataka,startbar,launchbar,lokacija,veličina,Terminalski program,automatsko sakrivanje,sakrivanje,dugmići,animacija,pozadina,teme,meni keš,keš,skriven,K-Menu,markeri,skori dokumenti,brzi pregledač,meni pregledača,meni,ikone,blokovi,appleti,startup,isticanje,hvataljke,uveličavanje ikona,apleti kojima se veruje,nivo bezbednosti +Keywords[sv]=kicker,panel,k-panel,aktivitetsfält,startfält,körningsfält,plats,storlek,dölj automatiskt,dölj,göm,knappar,animering,bakgrund,teman,menycache,cache,gömd,dold,K-meny,bokmärken,senaste dokument,snabbläddrare,bläddringsmeny,meny,ikoner,miniprogram,start,framhäv,grepp,zoomikoner +Keywords[ta]=கிக்கர், பானல், கேபானல்,துவக்கப்பட்டி, துவங்கும்பட்டி,இடம்,அளவு, சத்தம் மறை, மறை,பட்டன், உயிர்சித்திரம்,பின்னனி,கருப்பொருள், தற்காலிக மெனு, மறைந்த,கே-மெனு,புத்தககுறிகள், தற்போதைய ஆவணம். வேக உலாவி, உலாவி மெனு, மெனு, சின்னம், சிறுநிரல், துவக்கம், கையாள், பெரிதாக்கும் சின்னங்கள் +Keywords[th]=kicker,พาเนล,kpanel,taskbar,startbar,แถบเรียกโปรแกรม,ที่ตั้ง,ขนาด,ซ่อนอัตโนมัติ ,ซ่อน,ปุ่ม,อนิเมชั่น,พื้นหลัง,ชุดตกแต่ง,แคชของเมนู,แคช,ถูกซ่อน,K-Menu,ที่คั่นหน้า,เอกสารที่เพิ่งเปิดไป,quickbrowser,เมนูของบราวเซอร์,เมนู,ไอคอน,พื้นผิว,applets,startup,highlight,handles,ซูมไอคอน +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,başlat çubuğu,konum,boyut,Uç birim uygulaması,otomatik gizle,gizle,tuşlar,animasyon,artalan,temalar,menü ön belleği,ön bellek,gizli,K-Menu,yer imleri,en son kullanılan belgeler,hızlı gözatıcı,göz atıcı menüsü,menü,simgeler,karo,programcıklar,Başlangıç,belirt,tutamaçlar,büyüyen simgeler,güvenilen programcıklar,güvenlik düzeyi +Keywords[tt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser saylaq,saylaq,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[uk]=kicker,панель,смужка задач,kpanel,смужка запуску,розташування,розмір,консольна програма,автоматичне згортання,згортання,кнопки,анімація,тло,теми,кеш меню,кеш,схований,К-Меню,закладки,недавні документи,швидка навігація,меню навігатора,меню,піктограми,заголовки,аплети,запуск,підсвічування,маніпулятор,масштабування піктограм +Keywords[uz]=panel,vazifalar paneli,bekitish,avto-bekitish,tugmalar,animatsiya,orqa fon,mavzular,K-menyu,kesh,yashirilgan,xatchoʻplar,yaqinda ochilgan hujjatlar,tez koʻruvchi,brauzer menyusi,menyuning keshi,menyu,nishonchalar,appletlar,nishonchalarni kattalashtirish,oʻlcham,kicker,kpanel,startbar,launchbar,joylashishi,tiles,startup,highlight,handles +Keywords[uz@cyrillic]=панел,вазифалар панели,бекитиш,авто-бекитиш,тугмалар,анимация,орқа фон,мавзулар,К-меню,кэш,яширилган,хатчўплар,яқинда очилган ҳужжатлар,тез кўрувчи,браузер менюси,менюнинг кэши,меню,нишончалар,апплетлар,нишончаларни катталаштириш,ўлчам,kicker,kpanel,startbar,launchbar,жойлашиши,tiles,startup,highlight,handles +Keywords[vi]=kích hoạt,bảng điều khiển,kpanel,thanh tác vụ,thanh khởi động,thanh phóng,vị trí,kích cỡ,tự ẩn,ẩn,nút,hoạt hình,mảnh nền,sắc thái,thực đơn đệm,đệm,giấu,Thực đơn K,số lưu liên kết,tài liệu gần đây,duyệt nhanh,thực đơn duyệt,thực đơn,biểu tượng,tiêu đề,tiểu ứng dụng,khởi động,nổi bật,cầm nắm,biểu tượng phóng đại,ứng dụng đáng tin,mức độ an ninh +Keywords[wa]=kicker,panel,sicriftôr,scriftôr,kpanel,taskbar,bår des bouyes,startbar,launchbar,bår d' enondaedje,plaece,grandeu,catche tot seu,catchî,botons,animåvion,fond,tinmes,muchete menu,muchete,K-Menu,rimåkes,documints nén vî,betchteu rade,dresseŷe do betchteu,dressêye,menu,imådjetes,applets,apliketes,enonde tot seu,highlight,handles,zooming icons,zoumer les imådjetes +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons面板,任务栏,启动栏,位置,大小,自动隐藏,隐藏,按钮,动画,背景,主题,菜单缓存,缓存,书签,最近文档,快速浏览器,浏览器菜单,菜单,图标,平铺,启动,突出,句柄,缩放图标 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,面板,工作列,啟動列,快捷列,位置,大小,自動隱藏,隱藏,按鈕,動畫,背景,佈景主題,選單快取,快取,隱藏,K-選單,書籤,最近開啟的文件,快速瀏覽,瀏覽選單,選單,圖示,小圖塊,應用程式,啟動,高亮度,處理,縮放圖示 diff --git a/kcontrol/kicker/kicker_config_appearance.desktop b/kcontrol/kicker/kicker_config_appearance.desktop new file mode 100644 index 000000000..fd35460a1 --- /dev/null +++ b/kcontrol/kicker/kicker_config_appearance.desktop @@ -0,0 +1,229 @@ +[Desktop Entry] +Icon=kcmkicker +Type=Application +DocPath=kcontrol/panel/index.html#panel-looknfeel +Exec=kcmshell kicker_appearance + + +X-KDE-Library=kicker +X-KDE-FactoryName=kicker_appearance +X-KDE-ParentApp=kicker + +Name=Appearance +Name[af]=Voorkoms +Name[ar]=المظهر +Name[az]=Görünüş +Name[be]=Вонкавы выгляд +Name[bg]=Системен панел +Name[bn]=চেহারা +Name[br]=Neuziadur +Name[bs]=Izgled +Name[ca]=Aparença +Name[cs]=Vzhled +Name[csb]=Wëzdrzatk +Name[cy]=Golwg +Name[da]=Udseende +Name[de]=Erscheinungsbild +Name[el]=Εμφάνιση +Name[eo]=Aspekto +Name[es]=Aspecto +Name[et]=Välimus +Name[eu]=Itxura +Name[fa]=ظاهر +Name[fi]=Ulkonäkö +Name[fr]=Apparence +Name[fy]=Uterlik +Name[ga]=Cuma +Name[gl]=Apariencia +Name[he]=מראה +Name[hi]=शक्ल-सूरत +Name[hr]=Izgled +Name[hu]=Megjelenés +Name[id]=Penampilan +Name[is]=Útlit +Name[it]=Aspetto +Name[ja]=外観 +Name[ka]=გარეგნობა +Name[kk]=Көрініс +Name[km]=រូបរាង +Name[ko]=모양 +Name[lo]=ການປະກົດ +Name[lt]=Išvaizda +Name[lv]=Izskats +Name[mk]=Изглед +Name[mn]=Харагдалт +Name[ms]=Rupa +Name[mt]=Apparenza +Name[nb]=Utseende +Name[nds]=Utsehn +Name[ne]=दृश्य +Name[nl]=Uiterlijk +Name[nn]=Utsjånad +Name[nso]=Ponagalo +Name[pa]=ਦਿੱਖ +Name[pl]=Wygląd +Name[pt]=Aparência +Name[pt_BR]=Aparência +Name[ro]=Aspect +Name[ru]=Внешний вид +Name[rw]=Imigaragarire +Name[se]=Fárda +Name[sk]=Vzhľad +Name[sl]=Videz +Name[sr]=Изглед +Name[sr@Latn]=Izgled +Name[sv]=Utseende +Name[ta]=தோற்றம் +Name[tg]=Намуди зоҳирӣ +Name[th]=ลักษณะที่ปรากฎ +Name[tr]=Görünüm +Name[tt]=Küreneş +Name[uk]=Вигляд +Name[uz]=Tashqi koʻrinish +Name[uz@cyrillic]=Ташқи кўриниш +Name[ven]=Mbonalelo +Name[vi]=Diện mạo +Name[wa]=Rivnance +Name[xh]=Inkangeleko +Name[zh_CN]=外观 +Name[zh_TW]=外觀 +Name[zu]=Ukubukeka +Comment=You can configure the appearance of the panel here +Comment[af]=Jy kan die voorkoms van die paneel hier opstel +Comment[ar]=تستطيع تغيير اعدادات لوحة المهام هنا +Comment[az]=Panelin görünüşünü buradan quraşdıra bilərsiniz +Comment[be]=Тут вы можаце змяніць вонкавы выгляд панэлі +Comment[bg]=Настройване на системния панел +Comment[bn]=আপনি এখানে প্যানেল-এর চেহারা কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ neuziadur ar banell +Comment[bs]=Ovdje možete podesiti izgled panela +Comment[ca]=Aquí podeu configurar l'aspecte del plafó +Comment[cs]=Zde je možné nastavit vzhled panelu +Comment[csb]=Kònfigùracëjô wëzdrzatkù panelu +Comment[cy]=Cewch ffurfweddu golwg y panel yma +Comment[da]=Her kan du indstille panelets udseende +Comment[de]=Hier können Sie das Erscheinungsbild der Kontrollleiste festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε την εμφάνιση του πίνακα +Comment[eo]=Agordo de la panela aspekto +Comment[es]=Configuración de la apariencia del panel +Comment[et]=Paneeli välimuse seadistamine +Comment[eu]=Panelaren itxura konfigura dezakezu hemen +Comment[fa]=می‌توانید ظاهر تابلو را اینجا پیکربندی کنید +Comment[fi]=Muokkaa paneelin ulkonäköä +Comment[fr]=Configuration de l'apparence du tableau de bord +Comment[fy]=Hjir kinne jo it uterlik fan it paniel ynstelle +Comment[gl]=Pode configurar aquí a apariencia do panel +Comment[he]=שינוי הגדרות המראה של הלוח +Comment[hi]=फलक के शक्ल-सूरत को आप यहाँ कॉन्फ़िगर कर सकते हैं +Comment[hr]=Konfiguriranje izgleda ploče +Comment[hu]=Itt lehet beállítani a panel tulajdonságait +Comment[id]=Anda dapat konfigurasi tampilan panel disini +Comment[is]=Stilla viðmót spjaldsins +Comment[it]=Configura l'aspetto del pannello +Comment[ja]=ここでパネルの外観を設定します +Comment[ka]=აქ შეგიძლიათ პანელის გარეგნობის კონფიგურაცია +Comment[kk]=Панельдің көрінісін баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​រូបរាង​របស់​បន្ទះ +Comment[ko]=데스크톱의 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງລັກສະນະທີ່ປະກົດຂອງ ຖາດພາແນວໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti pulto išvaizdą +Comment[lv]=Šeit jūs varat konfigurēt paneļa izskatu +Comment[mk]=Тука може да го конфигурирате изгледот на панелот +Comment[mn]=Энд та удирдах самбарын харагдалтыг тохируулж болно +Comment[ms]=Anda boleh konfigur rupa panel di sini +Comment[mt]=Tista' tbiddel id-dehra tal-pannell hawnhekk +Comment[nb]=Her kan du sette opp hvordan panelet skal se ut +Comment[nds]=Hier kannst Du instellen, woans dat Paneel utsüht +Comment[ne]=तपाईँले यहाँ प्यानलको दृश्य कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=U kunt hier de opmaak van het paneel instellen +Comment[nn]=Her kan du setja opp utsjånaden til panelet +Comment[nso]=Oka beakanya ponagalo ya panel mo +Comment[oc]=Aqui podetz configurar l'aspecte dèu plafon +Comment[pa]=ਇੱਥੇ ਤੁਸੀਂ ਪੈਨਲ ਦੀ ਦਿੱਖ ਦੀ ਸੰਰਚਨਾ ਕਰ ਸਕਦੇ ਹੋ +Comment[pl]=Konfiguracja wyglądu panelu +Comment[pt]=Pode configurar aqui a aparência do painel +Comment[pt_BR]=Você pode configurar a aparência do painel aqui +Comment[ro]=Aici puteți configura aspectul panoului KDE +Comment[ru]=Внешний вид панели +Comment[rw]=Ushobora kuboneza imigaragarire y'umwanya hano +Comment[se]=Dás sáhtát heivehit panela fárdda +Comment[sk]=Tu môžete nastaviť vlastnosti panelu +Comment[sl]=Tu lahko nastavite videz pulta +Comment[sr]=Овде можете подесити изглед панела +Comment[sr@Latn]=Ovde možete podesiti izgled panela +Comment[sv]=Du kan anpassa panelens utseende här +Comment[ta]=பலகத்தின் தோற்றத்தை இங்கே அமைக்க முடியும் +Comment[tg]=Шумо метавонед намуди зоҳири панел дар инҷо танзим кунед +Comment[th]=คุณสามารถปรับแต่งลักษณะที่ปรากฎของถาดพาเนลได้ที่นี่ +Comment[tr]=Panelin görünümünü buradan yapılandırabilirsiniz +Comment[tt]=Taqta küreneşen köyläw urını +Comment[uk]=Тут можна налаштувати вигляд панелі +Comment[uz]=Bu yerda panelning tashqi koʻrinishini moslash mumkin +Comment[uz@cyrillic]=Бу ерда панелнинг ташқи кўринишини мослаш мумкин +Comment[ven]=Ni nga khonifigara mbonalelo ya phanele fhano +Comment[vi]=Bạn có thể cấu hình diện mạo các bảng điều khiển ở đây +Comment[wa]=Vos ploz apontyî chal li rivnance do scriftôr +Comment[xh]=Ungaqwalasela inkangeleko yeqela labantu benjongo ethile apha +Comment[zh_CN]=配置面板的外观 +Comment[zh_TW]=在此設定面板的外觀 +Comment[zu]=Ungahlanganisela ukubukeka kwewindi lemininingwane lapha +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Размяшчэнне,Пазіцыя,Памер,Аўтаматычна хаваць,Хаваць,Кнопкі,Анімацыя,Фон,Тэмы,Кэш меню,Кэш,Схаваная,Схаваць,Меню KDE,Закладкі,Ранейшыя,Нядаўнія,Дакументы,Хуткі прагляд,Меню вандроўніка,Меню вандравання,Меню,Значкі,Аплеты,Запуск,Падсвятленне,Апрацоўка,Апрацоўшчык,Маштабаванне значак,kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[bg]=системен, панел, подредба, подравняване, kicker, panel, kpanel, taskbar, startbar, launchbar, location, size, auto hide, hide, buttons, animation, background, themes, menu cache, cache, hidden, K-Menu, bookmarks, recent documents, quickbrowser, browser menu, menu, icons, tiles, applets, startup, highlight, handles, zooming icons +Keywords[bs]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,veličina,automatsko sakrivanje,sakrivanje,dugmad,animacija,pozadina,teme,keš menija,meni,keš,skriven,zabilješke,skorašnji dokumenti,meni browsera,meni preglednika,ikone,appleti,pokretanje,uvećavanje +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra de llançament,localització,mida,auto oculta,oculta,botons,animació,temes,fons,cau del menú,cau,ocult,Menú K,punts,documents recents,navegació ràpida,menú de navegació,menú,icones,mosaics,aplets,arrencada,ressaltat,nanses,ampliar les icones +Keywords[cs]=kicker,panel,kpanel,pruh úloh,lišta úloh,umístění, velikost,skrývání,automatické skrývání,tlačítka,animace,pozadí, motivy,nabídka,menu,záložky,nedávné dokumenty,rychlé prohlížení, ikony,dlaždice,applety,spuštění,zvýraznění,úchytky,zvětšování ikon +Keywords[csb]=kicker,panel,kpanel,lëstëw zadaniów,sztartowô lëstëw,lëstëw zrëszaniô,pòłożenié,miara,aùtomatno tacënié,tacë,knąpë,animacëjô,spódk,spòdlé,témë,cache menu,cache,zatacony,K-Menu,załóżczi,slédny dokùmentë,chùtczé przezéranié,menu,ikònë,kafelkòwané,programiczi,zrëszanié,pòdskrzënianié,ùchwëtë,zwikszanié ikònów +Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,håndterer,ikoner +Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +Keywords[el]=kicker,πίνακας,kpanel,γραμμή εργασιών,γραμμή έναρξης,γραμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκρυψη,απόκρυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενού,λανθάνουσα μνήμη,κρυφό, K-Μενού,σελιδοδείκτες,πρόσφατα έγγραφα,γρήγορος εξερευνητής,μενού εξερευνητή,μενού,εικονίδια,tiles,μικροεφαρμογές,έναρξη,τονισμός,χειριστήρια, μεγέθυνση εικονιδίων +Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aŭtokaŝo,kaŝo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiarazte-barra,kokapena, neurria,auto ezkutatu,ezkutatu,botoiak,animazioa,atzeko planoa, gaiak,menu-katxea,katxea,ezkutatu,K-menua,laster-markak,oraintsuko dokumentuak, arakatzaile bizkorra,arakatzaile menua,menua,ikonoak,baldosak,appletak,abiatu,nabarmendu,heldulekuak,zooming icons +Keywords[fa]=kicker، تابلو، kpanel، میله‌ تکلیف، میله آغاز، میله راه‌انداز، محل، اندازه، مخفی کردن خودکار، مخفی کردن، دکمه‌ها، پویانمایی، زمینه، چهره‌ها، نهانگاه گزینگان، نهانگاه، مخفی، گزینگان K، چوب ‌الفها، سندهای اخیر، مرورگر سریع، گزینگان، مرورگر، شمایلها، کاشیها، برنامکها، راه‌اندازی، مشخص، گرداننده‌ها، بزرگ‌نمایی شمایلها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistyspalkki,paikka,koko,automaattipiilotus,piilotus,napit,animaatio,tausta,teemat,valikkovälimuisti,välimuisti,K-valikko,kirjanmerkit,viimeaikaiset asiakirjat,pikaselain,selausvalikko,valikko,kuvakkeet,sovelmat,käynnistys,korostus,kahvat,kuvakkeiden suurennus +Keywords[fr]=kicker,tableau de bord,barre du bas,barre des tâches,barre de démarrage,barre de lancement,emplacement,taille,auto-masquage,cacher,masquer,boutons,animation,fond,arrière-plan,thème,cache de menu,cache,caché,menu K,K,signets,documents récents,document récent,navigateur rapide,navigateur,menu,icône,mosaïque,applet,démarrage,surbrillance,poignée,poignées,zoom,zoom sur les icônes +Keywords[fy]=kicker,paniel,kpanel,taakbalke,takebalke,Startbalke,startmenu,applikaasje begjinner,lokaasje,ôfmjiting,terminaltapassing,auto hide,automatysk ferstopje,ferstopje,Ynklappe,knoppen,animaasje,eftergrûn,tema's,menu lyts ûnthâld,lyts ûnthâld,ferstoppe,K-Menu,bookmarks,blêdwizers,resinte dokuminten,quickbrowser,browser menu,menu,icons,ikoan,ikoanen,tegels,tiles,applets,begjinne,opljochtsje,handles,zoomen,knoppen,hanfetten,betroubere applets,feiligens nivo +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,barra de comezo,barra de lanzamento,localización,tamaño,auto agochamento,agochamento,botóns,animación,fondo,temas,cache de menú,caché,oculto,Menú K,marcadores,derradeiros documentos,navegador rápido,menú de navegación,menú,iconas,apliques,início,resaltado,xestión,aumento de iconas +Keywords[he]=kicker, לוח, kpanel, שורת משימות, שורת הרצה, מיקום, גודל, הסתרה אוטומטית, הסתר, אנימציה, רקע, ערכות, תפריט, מטמון, מוסתר, תפריט K, מועדפים, מסמכים אחרונים, דפדוף מהיר, תפריט, סימנים, סמלים, כותרות, יישומונים, אתחול, הדגשה, ידיות, הגדלת סמלים, taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, panel +Keywords[hi]=किकर,फलक,के-पेनल,कार्यपट्टी,प्रारंभपट्टी,चालकपट्टी,स्थान,आकार,स्वतः छुपें,छुपें,बटन्स,एनिमेशन,पृष्ठभूमि,प्रसंग,मेनू कैश,कैश,छुपा,के-मेन्यू,पसंद,हाल ही के दस्तावेज़,क्विक-ब्राउज़र,ब्राउज़र मेन्यू,मेन्यू,प्रतीक,टाइल्स,ऐप्लेट्स,स्टार्टअप,उभारना,हैंडल्स,जूमिंग प्रतीक +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,ploča,traka zadataka,traka pokretanja,lokacija,veličina,automatsko skrivanje,skrivanje,gumbi,animacija,pozadina,teme,pohrana izbornika,pohrana,skriven,oznake,nedavni dokumenti,brzi preglednik,izbornik preglednika,izbornik,ikone,popločeno,apleti,naglašavanje,rukovanje,uvećane ikone +Keywords[hu]=Kicker,panel,kpanel,feladatlista,start menü,indítómenü,indítósáv,hely,méret,automatikus elrejtés,elrejtés,gombok,animáció,háttér,témák,menügyorstár,gyorstár,rejtett,K menü,könyvjelzők,legutóbbi dokumentumok,gyorsböngésző,böngészőmenü,menü,ikonok,mozaikszerű,kisalkalmazások,indulás,kiemelés,fogantyúk,nagyítóikonok +Keywords[is]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,trusted applets,security level +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,taskbar,startbar,launchbar,barra di avvio,posizione,dimensione,scomparsa automatica,pulsanti,animazione,sfondo,temi,cache dei menu,nascosto,Menu K,segnalibri,documenti recenti,browser veloce,menu,icone,piastrelle,applet,avvio,evidenziazione,maniglie,ingrandimento icone +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,場所,サイズ,自動的に隠す,隠す,ボタン,アニメーション,背景,テーマ,メニューキャッシュ,キャッシュ,隠れた,Kメニュー,ブックマーク,最近のドキュメント,クイックブラウザ,ブラウザメニュー,メニュー,アイコン,タイル,アプレット,スタートアップ,ハイライト,ハンドル,アイコンのズーム +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,ទីតាំង,ទំហំ,លាក់​ស្វ័យប្រវត្តិ,លាក់,ប៊ូតុង,ចលនា,ផ្ទៃ​ខាង​ក្រោយ,ស្បែក,ឃ្លាំង​សម្ងាត់​ម៉ឺនុយ,ឃ្លាំង​សម្ងាត់,លាក់,ម៉ឺនុយ K,កន្លែង​ចំណាំ,ឯកសារ​ថ្មីៗ​នេះ,កម្មវិធី​រុករក​រហ័ស,ម៉ឺនុយ​កម្មវិធី​រុករក,ម៉ឺនុយ,រូបតំណាង,ក្បឿង,អាប់ភ្លេត,ចាប់ផ្ដើម,បន្លិច,ប្រើ,រូបតំណាង​ពង្រីក +Keywords[lt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,skydelis,kskydelis,užduočių juosta,paleidimo juosta,slėpti,mygtukai,animacija,fonas,temos,meniu atmintinė,atmintinė,paslėptas,žymelės,neseniai naudoti dokumentai,peržiūra,meniu,ženkliukai,perdengti,įskiepiai,paleistis,pažymėti,rankenėlės,išdidinti ženkliukus +Keywords[lv]=kicker,panelis,kpanel,uzdevumjosla,startbar,launchbar,location,size,izmērs,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,grāmatzīmes,recent documents,quickbrowser,browser menu,izvēlne,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,панел,лента со програми,локација,големина,авто криење,криење,копчиња,анимација,подлога,позадина,теми,кеш на менито,кеш,скриен,K-Мени,обележувачи, последни документи,брз прелистувач,мени за прелистувачи,мени,икони,плочки,аплети,рачки,зумирање на икони +Keywords[mt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,favoriti,pannell,post,daqs,lokazzjoni,ħabi,animazzjoni,buttuni +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,plassering,størrelse, autoskjul,skjul,knapper,animasjon,bakgrunn,temaer,mellomlager for temaer, mellomlager,skjult,K-meny,bokmerker,nylig brukte dokumenter,hurtigviser, katalogmeny,meny,ikoner,fliser,miniprogrammer,panelprogrammer,oppstart, uthev,håndtak,forstørring av ikoner +Keywords[nds]=Kicker,Paneel,kpanel,Taskbalken,Programmbalken,Startbalken,Adress,Grött,automaatsch versteken,versteken,Knööp,Knoop,Knööp,Animatschoon,Achtergrund,Muster,Menü-Twischenspieker,Twischenspieker,versteken,K-Menü,Leesteken,leste Dokmenten,Fixkieker,Nettkieker-Menü,Menü,Lüttbiller,Titel,Programmen,starten,markeren,handles,Grepen,Lüttbiller grötter maken +Keywords[ne]=किकर, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, स्थान, आकार, स्वत: लुकाउने, लुकाउनुहोस्, बटनहरू, एनिमेसन, पृष्ठभूमि, विषयवस्तुहरू, मेनु क्यास, क्यास, लुकेको, के-मेनु, पुस्तकचिनोहरू, हालको कागजातहरू, छिटो ब्राउजर, ब्राउजर मेनु, मेनु, प्रतिमा, टायलहरू, एप्लेटहरू, सुरु, हाइलाइट, ह्यान्डल गर्दछ, जुम प्रतिमा +Keywords[nl]=kicker,paneel,kpanel,taakbalk,takenbalk,startbalk,startmenu,applicatie starter,locatie,afmeting,terminaltoepassing,auto hide,automatisch verbergen,verbergen,invouwen,knoppen,animatie,achtergrond,thema's,menu cache,cache,verborgen,K-Menu,bookmarks,bladwijzers,recente documenten,quickbrowser,browser menu,menu,icons,icoon,iconen,pictogrammen,tegels,tiles,applets,opstarten,highlight,accentuering,handles,zoomen,knoppen,handvatten,betrouwbare applets,security level,beveiligingsniveau +Keywords[nn]=Kicker,panel,KPanel,oppgåvelinje,oppstartslinje,plassering,storleik,autogøym,gøym,knappar,animasjon,bakgrunn,tema,menymellomlager,mellomlager,gøymd,K-meny,bokmerke,nyleg bruka dokument,snøgglesar,katalogmeny,meny,ikon,brikker,applet,panelprogram,oppstart,merking,handtak,forstørring av ikon +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, ਪੈਨਲ, ਟਿਕਾਣਾ, ਬਰਾਊਜ਼ਰ, ਝਲਾਕਰਾ, ਕੈਂਚੇ, ਕੇ-ਮੇਨੂ, ਬੁੱਕਮਾਰਕ, ਤਾਜ਼ਾ, ਉਘੜੇ, ਹੈਂਡਲ, ਬਟਨ, ਸਰੂਪ, ਮੇਨੂ, ਓਹਲੇ, ਅਕਾਰ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,pasek uruchamiania,położenie,rozmiar,automatyczne ukrywanie,ukryj,przyciski,animacja,tło,motywy,bufor (cache) menu,bufor,cache,ukryty,K-Menu,zakładki,ostatnie dokumenty,szybkie przeglądanie,menu,ikony,kafelkowane,programiki,uruchomienie,podświetlanie,uchwyty,powiększanie ikon +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,localização,tamanho,auto-esconder,esconder,botões,animação,fundo,temas,'cache' de menu,'cache',escondido,menu K,favoritos,documentos recentes,navegador rápido,menu de navegação,menu,ícones,mosaicos,'applets',inicio,realce,pegas,ícones aumentados +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,lançar aplicativos,localização,tamanho,auto-ocultar,esconder,botões, animação,fundo,temas,cache de menu,cache,escondido,Menu K,favoritos,documentos recentes,navegador rápido, menu do navegador,menu,ícones,títulos,mini-aplicativos,iniciar,realçar, manipuladores, ícones de ampliação +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,lansare,mărime,locație,ascundere automată,butoane,animație,fundal,tematică,meniu K,semne de carte,documente recente,navigator rapid,meniu navigare,meniu,iconițe,mozaic,miniaplicații,evidențiere,scalare +Keywords[rw]=igitera,umwanya,k-umwanya,umurongogutangira,umurongogutangiza,indangahantu,ingano,kwihisha,guhisha,buto,iyega,mbuganyuma,insanganyamatsiko,ubwihisho bw'ibikubiyemo,ubwihisho,bihishe,K-Ibikubiyemo,utumenyetso,inyandiko zigezweho,mucukumbuzi yihuta,ibikubiyemo bya mucukumbuzi,ibikubiyemo,udushushondanga,udukaro,apuleti,gutangira,gushimangira,ibifashi,udushushondanga guhindura-ingano +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,báiki,sturrodat,autočiega,čiehkadit,boalut,animašuvdna,duogáš,fáddá,fálločiehkárájus,čiehkárájus,K-fállu,girjemearkkat,aiddo geavahuvvon dokumeantta,ohcofállu,fállu,govažat,prográmmažat,álggaheapmi,merken,geavjjat,luohttehahtti prográmmažat,sihkkarvuohtadássi +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,miesto,umiestnenie,veľkosť,terminálová aplikácia,skrývanie,automatické skrývanie,tlačidlá,animácia,pozadie,témy,cache,cache ponuky,skryté,K-Menu,záložky,posledné dokumenty,rýchly prehliadač,ponuka prehliadača,menu,ikony,applety,štart,zvýraznenie,handles,zväčšovanie ikon,overené applety,úroveň zabezpečenia +Keywords[sl]=kicker,pult,kpanel,opravilna vrstica,zagonska vrstica,mesto,lokacija,velikost,terminalski program,skrij,samodejno skrivanje,skrivanje,gumbi,animacija,ozadje,teme,menijski predpomnilnik,predpomnilnik,skrit,K-Menu,zaznamki,nedavni dokumenti,hitro brskanje,brskalni meni,meni,tlakovci,ikone,vstavki,zagon,osvetlitev,ročice,ikone za povečavo +Keywords[sr]=kicker,панел,kpanel,трака задатака,startbar,launchbar,локација,величина,Терминалски програм,аутоматско сакривање,сакривање,дугмићи,анимација,позадина,теме,мени кеш,кеш,скривен,K-Menu,маркери,скори документи,брзи прегледач,мени прегледача,мени,иконе,блокови,апплети,startup,истицање,хватаљке,увеличавање икона,аплети којима се верује,ниво безбедности +Keywords[sr@Latn]=kicker,panel,kpanel,traka zadataka,startbar,launchbar,lokacija,veličina,Terminalski program,automatsko sakrivanje,sakrivanje,dugmići,animacija,pozadina,teme,meni keš,keš,skriven,K-Menu,markeri,skori dokumenti,brzi pregledač,meni pregledača,meni,ikone,blokovi,appleti,startup,isticanje,hvataljke,uveličavanje ikona,apleti kojima se veruje,nivo bezbednosti +Keywords[sv]=kicker,panel,k-panel,aktivitetsfält,startfält,körningsfält,plats,storlek,dölj automatiskt,dölj,göm,knappar,animering,bakgrund,teman,menycache,cache,gömd,dold,K-meny,bokmärken,senaste dokument,snabbläddrare,bläddringsmeny,meny,ikoner,miniprogram,start,framhäv,grepp,zoomikoner +Keywords[ta]=கிக்கர், பானல், கேபானல்,துவக்கப்பட்டி, துவங்கும்பட்டி,இடம்,அளவு, சத்தம் மறை, மறை,பட்டன், உயிர்சித்திரம்,பின்னனி,கருப்பொருள், தற்காலிக மெனு, மறைந்த,கே-மெனு,புத்தககுறிகள், தற்போதைய ஆவணம். வேக உலாவி, உலாவி மெனு, மெனு, சின்னம், சிறுநிரல், துவக்கம், கையாள், பெரிதாக்கும் சின்னங்கள் +Keywords[th]=kicker,พาเนล,kpanel,taskbar,startbar,แถบเรียกโปรแกรม,ที่ตั้ง,ขนาด,ซ่อนอัตโนมัติ ,ซ่อน,ปุ่ม,อนิเมชั่น,พื้นหลัง,ชุดตกแต่ง,แคชของเมนู,แคช,ถูกซ่อน,K-Menu,ที่คั่นหน้า,เอกสารที่เพิ่งเปิดไป,quickbrowser,เมนูของบราวเซอร์,เมนู,ไอคอน,พื้นผิว,applets,startup,highlight,handles,ซูมไอคอน +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,başlat çubuğu,konum,boyut,Uç birim uygulaması,otomatik gizle,gizle,tuşlar,animasyon,artalan,temalar,menü ön belleği,ön bellek,gizli,K-Menu,yer imleri,en son kullanılan belgeler,hızlı gözatıcı,göz atıcı menüsü,menü,simgeler,karo,programcıklar,Başlangıç,belirt,tutamaçlar,büyüyen simgeler,güvenilen programcıklar,güvenlik düzeyi +Keywords[tt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser saylaq,saylaq,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[uk]=kicker,панель,смужка задач,kpanel,смужка запуску,розташування,розмір,консольна програма,автоматичне згортання,згортання,кнопки,анімація,тло,теми,кеш меню,кеш,схований,К-Меню,закладки,недавні документи,швидка навігація,меню навігатора,меню,піктограми,заголовки,аплети,запуск,підсвічування,маніпулятор,масштабування піктограм +Keywords[uz]=panel,vazifalar paneli,bekitish,avto-bekitish,tugmalar,animatsiya,orqa fon,mavzular,K-menyu,kesh,yashirilgan,xatchoʻplar,yaqinda ochilgan hujjatlar,tez koʻruvchi,brauzer menyusi,menyuning keshi,menyu,nishonchalar,appletlar,nishonchalarni kattalashtirish,oʻlcham,kicker,kpanel,startbar,launchbar,joylashishi,tiles,startup,highlight,handles +Keywords[uz@cyrillic]=панел,вазифалар панели,бекитиш,авто-бекитиш,тугмалар,анимация,орқа фон,мавзулар,К-меню,кэш,яширилган,хатчўплар,яқинда очилган ҳужжатлар,тез кўрувчи,браузер менюси,менюнинг кэши,меню,нишончалар,апплетлар,нишончаларни катталаштириш,ўлчам,kicker,kpanel,startbar,launchbar,жойлашиши,tiles,startup,highlight,handles +Keywords[vi]=kích hoạt,bảng điều khiển,kpanel,thanh tác vụ,thanh khởi động,thanh phóng,vị trí,kích cỡ,tự ẩn,ẩn,nút,hoạt hình,mảnh nền,sắc thái,thực đơn đệm,đệm,giấu,Thực đơn K,số lưu liên kết,tài liệu gần đây,duyệt nhanh,thực đơn duyệt,thực đơn,biểu tượng,tiêu đề,tiểu ứng dụng,khởi động,nổi bật,cầm nắm,biểu tượng phóng đại,ứng dụng đáng tin,mức độ an ninh +Keywords[wa]=kicker,panel,sicriftôr,scriftôr,kpanel,taskbar,bår des bouyes,startbar,launchbar,bår d' enondaedje,plaece,grandeu,catche tot seu,catchî,botons,animåvion,fond,tinmes,muchete menu,muchete,K-Menu,rimåkes,documints nén vî,betchteu rade,dresseŷe do betchteu,dressêye,menu,imådjetes,applets,apliketes,enonde tot seu,highlight,handles,zooming icons,zoumer les imådjetes +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons面板,任务栏,启动栏,位置,大小,自动隐藏,隐藏,按钮,动画,背景,主题,菜单缓存,缓存,书签,最近文档,快速浏览器,浏览器菜单,菜单,图标,平铺,启动,突出,句柄,缩放图标 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,面板,工作列,啟動列,快捷列,位置,大小,自動隱藏,隱藏,按鈕,動畫,背景,佈景主題,選單快取,快取,隱藏,K-選單,書籤,最近開啟的文件,快速瀏覽,瀏覽選單,選單,圖示,小圖塊,應用程式,啟動,高亮度,處理,縮放圖示 diff --git a/kcontrol/kicker/kicker_config_arrangement.desktop b/kcontrol/kicker/kicker_config_arrangement.desktop new file mode 100644 index 000000000..bc2a8a445 --- /dev/null +++ b/kcontrol/kicker/kicker_config_arrangement.desktop @@ -0,0 +1,212 @@ +[Desktop Entry] +Icon=kcmkicker +Type=Application +DocPath=kcontrol/panel/index.html#panel-position +Exec=kcmshell kicker_arrangement + +X-KDE-Library=kicker +X-KDE-FactoryName=kicker_arrangement +X-KDE-ParentApp=kicker + +Name=Arrangement +Name[af]=Rangskikking +Name[ar]=الترتيب +Name[be]=Раўнанне +Name[bg]=Разпределение +Name[bn]=বিন্যাস +Name[br]=Doare +Name[bs]=Raspored +Name[ca]=Arranjament +Name[cs]=Uspořádání +Name[csb]=Ùstôw +Name[cy]=Trefniad +Name[de]=Layout +Name[el]=Διάταξη +Name[eo]=Agordo +Name[es]=Acuerdo +Name[et]=Paigutus +Name[eu]=Antolakuntza +Name[fa]=ترتیب +Name[fi]=Järjestely +Name[fy]=Yndieling +Name[ga]=Leagan Amach +Name[gl]=Disposición +Name[he]=סידור +Name[hr]=Raspored +Name[hu]=Elrendezés +Name[is]=Skipulag +Name[it]=Disposizione +Name[ja]=配置 +Name[ka]=განთავსება +Name[kk]=Орналастыру +Name[km]=ការរៀបចំ +Name[lt]=Išdėstymas +Name[mk]=Распоред +Name[ms]=Susunan +Name[nds]=Anornen +Name[ne]=मिलान +Name[nl]=Indeling +Name[nn]=Oppsett +Name[pa]=ਇਕਰਾਰਨਾਮਾ +Name[pl]=Układ +Name[pt]=Organização +Name[pt_BR]=Disposição +Name[ro]=Aranjament +Name[ru]=Расстановка +Name[rw]=Ugutunganya +Name[se]=Ráhkadus +Name[sk]=Usporiadanie +Name[sl]=Postavitev +Name[sr]=Распоред +Name[sr@Latn]=Raspored +Name[sv]=Arrangemang +Name[ta]=ஏற்பாடு +Name[te]=క్రమం +Name[tg]=Созишнома +Name[th]=การจัดเรียง +Name[tr]=Düzenleme +Name[tt]=Urınlaşu +Name[uk]=Розташування +Name[uz]=Joylashishi +Name[uz@cyrillic]=Жойлашиши +Name[vi]=Sắp đặt +Name[wa]=Arindjmint +Name[zh_CN]=排列 +Name[zh_TW]=對齊方式 +Comment=You can configure the arrangement of the panel here +Comment[af]=Jy kan die rangskikking van die paneel hier opstel +Comment[ar]=يمكنك إعداد ترتيب اللوحة هنا +Comment[az]=Panelin düzülüşünü buradan quraşdıra bilərsiniz +Comment[be]=Тут вы можаце змяніць настаўленні раўнавання панэлі +Comment[bg]=Настройване на системния панел +Comment[bn]=আপনি এখানে প্যানেল-এর বিন্যাস কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ doare ar banell +Comment[bs]=Ovdje možete podesiti izgled panela +Comment[ca]=Aquí podeu configurar l'arranjament del plafó +Comment[cs]=Zde je možné nastavit uspořádání panelu +Comment[csb]=Kònfigùracëjô pòłożeniô panelu +Comment[cy]=Cewch ffurfweddu trefn y panel yma +Comment[da]=Her kan du indstille panelets arrangement +Comment[de]=Hier können Sie Einstellungen für die Kontrollleiste vornehmen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε τη διάταξη του πίνακα +Comment[eo]=Ĉi tie vi povas agordi la aranĝon de la panelo +Comment[es]=Configuración de la apariencia del panel +Comment[et]=Siin saad seadistada paneeli paigutust +Comment[eu]=Panelaren kokapena konfigura dezakezu hemen +Comment[fa]=می‌توانید ترتیب تابلو را اینجا پیکربندی کنید +Comment[fi]=Muokkaa paneelin asettelua ja sisältöä +Comment[fr]=Configuration de l'apparence du tableau de bord +Comment[fy]=Hjir kinne jo it ûntwerp fan it paniel ynstelle +Comment[gl]=Pode configurar aqui a disposición do painel +Comment[he]=שינוי הגדרות הסידור של הלוח +Comment[hi]=फलक की व्यवस्था को आप यहाँ कॉन्फ़िगर कर सकते हैं +Comment[hr]=Konfiguriranje rasporeda ploče +Comment[hu]=Itt lehet beállítani a panel elrendezését +Comment[is]=Stilla viðmót spjaldsins +Comment[it]=Configura la disposizione del pannello +Comment[ja]=ここでパネルの配置を設定します +Comment[ka]=აქ შეგიძლიათ პანელის თანმიმდევრულობის კონფიგურაცია +Comment[kk]=Панельді орналастыру +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​ការ​រៀបចំ​បន្ទះ +Comment[ko]=데스크톱의 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງລັກສະນະ ທີ່ປະກົດຂອງພາແນວໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti pulto pavidalą +Comment[lv]=Šeit jūs varat konfigurēt paneļa izkārtojumu +Comment[mk]=Тука може да го конфигурирате распоредот на панелот +Comment[mn]=Энд та удирдах самбар тохируулж болно +Comment[ms]=Anda boleh konfigur susunan panel di sini +Comment[mt]=Tista' tbiddel it-tqassim tal-pannell hawnhekk +Comment[nb]=Her kan du sette opp hvordan panelet skal se ut +Comment[nds]=Hier kannst Du de Anornen vun't Paneel instellen +Comment[ne]=तपाईँले यहाँ प्यानलको मिलान कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=U kunt hier de opmaak van het paneel instellen +Comment[nn]=Her kan du setja opp utsjånaden til panelet +Comment[nso]=Oka beakanya kgobokanyo ya panel mo +Comment[pa]=ਤੁਸੀਂ ਪੈਨਲ ਦੇ ਢਾਂਚੇ ਦੀ ਸੰਰਚਨਾ ਇੱਥੇ ਕਰ ਸਕਦੇ ਹੋ +Comment[pl]=Konfiguracja położenia panelu +Comment[pt]=Pode configurar o posicionamento do painel aqui +Comment[pt_BR]=Você pode configurar a disposição do painel aqui +Comment[ro]=Aici puteți configura modul de aranjare al panoului KDE +Comment[ru]=Настройка выравнивания панели +Comment[rw]=Ushobora kuboneza itunganya ry'umwanya hano +Comment[se]=Dáppe sáhtát heivehit panela ráhkadusa +Comment[sk]=Nastavenie vzhľadu panelu +Comment[sl]=Tu lahko nastavite razpored pulta +Comment[sr]=Овде можете подесити распоред панела +Comment[sr@Latn]=Ovde možete podesiti raspored panela +Comment[sv]=Du kan anpassa panelens utseende här +Comment[ta]=பலகத்தின் தோற்றத்தை இங்கே அமைக்க முடியும் +Comment[tg]= Дар инҷо шумо метавонед тоҳири сафҳотро танзим кунед +Comment[th]=คุณสามารถปรับแต่งการจัดวางถาดพาเนลได้ที่นี่ +Comment[tr]=Panelin görünümünü buradan yapılandırabilirsiniz +Comment[tt]=Taqta urnaşıluın köyläw urını +Comment[uk]=Тут можна налаштувати вигляд панелі +Comment[uz]=Bu yerda panelning tartibini moslashingiz mumkin +Comment[uz@cyrillic]=Бу ерда панелнинг тартибини мослашингиз мумкин +Comment[ven]=Ninga dzudzanya mavhekanyele a phanele hafhano +Comment[vi]=Bạn có thể cấu hình sự sắp xếp các bảng điều khiển ở đây +Comment[wa]=Vos ploz apontyî chal l' arindjimint do scriftôr +Comment[xh]=Uyakwazi ukuqwalasela apha i window yenkcukacha +Comment[zh_CN]=您可以在这里配置面板的排列 +Comment[zh_TW]=您可以在此設定面板的外觀 +Comment[zu]=Ungahlanganisela ukuhlelwa kwewindi lemininingwane lapha +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Размяшчэнне,Пазіцыя,Памер,Аўтаматычна хаваць,Хаваць,Кнопкі,Анімацыя,Фон,Тэмы,Кэш меню,Кэш,Схаваная,Схаваць,Меню KDE,Закладкі,Ранейшыя,Нядаўнія,Дакументы,Хуткі прагляд,Меню вандроўніка,Меню вандравання,Меню,Значкі,Аплеты,Запуск,Падсвятленне,Апрацоўка,Апрацоўшчык,Маштабаванне значак,kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[bg]=системен, панел, подредба, подравняване, kicker, panel, kpanel, taskbar, startbar, launchbar, location, size, auto hide, hide, buttons, animation, background, themes, menu cache, cache, hidden, K-Menu, bookmarks, recent documents, quickbrowser, browser menu, menu, icons, tiles, applets, startup, highlight, handles, zooming icons +Keywords[bs]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,veličina,automatsko sakrivanje,sakrivanje,dugmad,animacija,pozadina,teme,keš menija,meni,keš,skriven,zabilješke,skorašnji dokumenti,meni browsera,meni preglednika,ikone,appleti,pokretanje,uvećavanje +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra de llançament,localització,mida,auto oculta,oculta,botons,animació,temes,fons,cau del menú,cau,ocult,Menú K,punts,documents recents,navegació ràpida,menú de navegació,menú,icones,mosaics,aplets,arrencada,ressaltat,nanses,ampliar les icones +Keywords[cs]=kicker,panel,kpanel,pruh úloh,lišta úloh,umístění, velikost,skrývání,automatické skrývání,tlačítka,animace,pozadí, motivy,nabídka,menu,záložky,nedávné dokumenty,rychlé prohlížení, ikony,dlaždice,applety,spuštění,zvýraznění,úchytky,zvětšování ikon +Keywords[csb]=kicker,panel,kpanel,lëstëw zadaniów,sztartowô lëstëw,lëstëw zrëszaniô,pòłożenié,miara,aùtomatno tacënié,tacë,knąpë,animacëjô,spódk,spòdlé,témë,cache menu,cache,zatacony,K-Menu,załóżczi,slédny dokùmentë,chùtczé przezéranié,menu,ikònë,kafelkòwané,programiczi,zrëszanié,pòdskrzënianié,ùchwëtë,zwikszanié ikònów +Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,håndterer,ikoner +Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +Keywords[el]=kicker,πίνακας,kpanel,γραμμή εργασιών,γραμμή έναρξης,γραμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκρυψη,απόκρυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενού,λανθάνουσα μνήμη,κρυφό, K-Μενού,σελιδοδείκτες,πρόσφατα έγγραφα,γρήγορος εξερευνητής,μενού εξερευνητή,μενού,εικονίδια,tiles,μικροεφαρμογές,έναρξη,τονισμός,χειριστήρια, μεγέθυνση εικονιδίων +Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aŭtokaŝo,kaŝo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiarazte-barra,kokapena, neurria,auto ezkutatu,ezkutatu,botoiak,animazioa,atzeko planoa, gaiak,menu-katxea,katxea,ezkutatu,K-menua,laster-markak,oraintsuko dokumentuak, arakatzaile bizkorra,arakatzaile menua,menua,ikonoak,baldosak,appletak,abiatu,nabarmendu,heldulekuak,zooming icons +Keywords[fa]=kicker، تابلو، kpanel، میله‌ تکلیف، میله آغاز، میله راه‌انداز، محل، اندازه، مخفی کردن خودکار، مخفی کردن، دکمه‌ها، پویانمایی، زمینه، چهره‌ها، نهانگاه گزینگان، نهانگاه، مخفی، گزینگان K، چوب ‌الفها، سندهای اخیر، مرورگر سریع، گزینگان، مرورگر، شمایلها، کاشیها، برنامکها، راه‌اندازی، مشخص، گرداننده‌ها، بزرگ‌نمایی شمایلها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistyspalkki,paikka,koko,automaattipiilotus,piilotus,napit,animaatio,tausta,teemat,valikkovälimuisti,välimuisti,K-valikko,kirjanmerkit,viimeaikaiset asiakirjat,pikaselain,selausvalikko,valikko,kuvakkeet,sovelmat,käynnistys,korostus,kahvat,kuvakkeiden suurennus +Keywords[fr]=kicker,tableau de bord,barre du bas,barre des tâches,barre de démarrage,barre de lancement,emplacement,taille,auto-masquage,cacher,masquer,boutons,animation,fond,arrière-plan,thème,cache de menu,cache,caché,menu K,K,signets,documents récents,document récent,navigateur rapide,navigateur,menu,icône,mosaïque,applet,démarrage,surbrillance,poignée,poignées,zoom,zoom sur les icônes +Keywords[fy]=kicker,paniel,kpanel,taakbalke,takebalke,Startbalke,startmenu,applikaasje begjinner,lokaasje,ôfmjiting,terminaltapassing,auto hide,automatysk ferstopje,ferstopje,Ynklappe,knoppen,animaasje,eftergrûn,tema's,menu lyts ûnthâld,lyts ûnthâld,ferstoppe,K-Menu,bookmarks,blêdwizers,resinte dokuminten,quickbrowser,browser menu,menu,icons,ikoan,ikoanen,tegels,tiles,applets,begjinne,opljochtsje,handles,zoomen,knoppen,hanfetten,betroubere applets,feiligens nivo +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,barra de comezo,barra de lanzamento,localización,tamaño,auto agochamento,agochamento,botóns,animación,fondo,temas,cache de menú,caché,oculto,Menú K,marcadores,derradeiros documentos,navegador rápido,menú de navegación,menú,iconas,apliques,início,resaltado,xestión,aumento de iconas +Keywords[he]=kicker, לוח, kpanel, שורת משימות, שורת הרצה, מיקום, גודל, הסתרה אוטומטית, הסתר, אנימציה, רקע, ערכות, תפריט, מטמון, מוסתר, תפריט K, מועדפים, מסמכים אחרונים, דפדוף מהיר, תפריט, סימנים, סמלים, כותרות, יישומונים, אתחול, הדגשה, ידיות, הגדלת סמלים, taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, panel +Keywords[hi]=किकर,फलक,के-पेनल,कार्यपट्टी,प्रारंभपट्टी,चालकपट्टी,स्थान,आकार,स्वतः छुपें,छुपें,बटन्स,एनिमेशन,पृष्ठभूमि,प्रसंग,मेनू कैश,कैश,छुपा,के-मेन्यू,पसंद,हाल ही के दस्तावेज़,क्विक-ब्राउज़र,ब्राउज़र मेन्यू,मेन्यू,प्रतीक,टाइल्स,ऐप्लेट्स,स्टार्टअप,उभारना,हैंडल्स,जूमिंग प्रतीक +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,ploča,traka zadataka,traka pokretanja,lokacija,veličina,automatsko skrivanje,skrivanje,gumbi,animacija,pozadina,teme,pohrana izbornika,pohrana,skriven,oznake,nedavni dokumenti,brzi preglednik,izbornik preglednika,izbornik,ikone,popločeno,apleti,naglašavanje,rukovanje,uvećane ikone +Keywords[hu]=Kicker,panel,kpanel,feladatlista,start menü,indítómenü,indítósáv,hely,méret,automatikus elrejtés,elrejtés,gombok,animáció,háttér,témák,menügyorstár,gyorstár,rejtett,K menü,könyvjelzők,legutóbbi dokumentumok,gyorsböngésző,böngészőmenü,menü,ikonok,mozaikszerű,kisalkalmazások,indulás,kiemelés,fogantyúk,nagyítóikonok +Keywords[is]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,trusted applets,security level +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,taskbar,startbar,launchbar,barra di avvio,posizione,dimensione,scomparsa automatica,pulsanti,animazione,sfondo,temi,cache dei menu,nascosto,Menu K,segnalibri,documenti recenti,browser veloce,menu,icone,piastrelle,applet,avvio,evidenziazione,maniglie,ingrandimento icone +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,場所,サイズ,自動的に隠す,隠す,ボタン,アニメーション,背景,テーマ,メニューキャッシュ,キャッシュ,隠れた,Kメニュー,ブックマーク,最近のドキュメント,クイックブラウザ,ブラウザメニュー,メニュー,アイコン,タイル,アプレット,スタートアップ,ハイライト,ハンドル,アイコンのズーム +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,ទីតាំង,ទំហំ,លាក់​ស្វ័យប្រវត្តិ,លាក់,ប៊ូតុង,ចលនា,ផ្ទៃ​ខាង​ក្រោយ,ស្បែក,ឃ្លាំង​សម្ងាត់​ម៉ឺនុយ,ឃ្លាំង​សម្ងាត់,លាក់,ម៉ឺនុយ K,កន្លែង​ចំណាំ,ឯកសារ​ថ្មីៗ​នេះ,កម្មវិធី​រុករក​រហ័ស,ម៉ឺនុយ​កម្មវិធី​រុករក,ម៉ឺនុយ,រូបតំណាង,ក្បឿង,អាប់ភ្លេត,ចាប់ផ្ដើម,បន្លិច,ប្រើ,រូបតំណាង​ពង្រីក +Keywords[lt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,skydelis,kskydelis,užduočių juosta,paleidimo juosta,slėpti,mygtukai,animacija,fonas,temos,meniu atmintinė,atmintinė,paslėptas,žymelės,neseniai naudoti dokumentai,peržiūra,meniu,ženkliukai,perdengti,įskiepiai,paleistis,pažymėti,rankenėlės,išdidinti ženkliukus +Keywords[lv]=kicker,panelis,kpanel,uzdevumjosla,startbar,launchbar,location,size,izmērs,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,grāmatzīmes,recent documents,quickbrowser,browser menu,izvēlne,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,панел,лента со програми,локација,големина,авто криење,криење,копчиња,анимација,подлога,позадина,теми,кеш на менито,кеш,скриен,K-Мени,обележувачи, последни документи,брз прелистувач,мени за прелистувачи,мени,икони,плочки,аплети,рачки,зумирање на икони +Keywords[mt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,favoriti,pannell,post,daqs,lokazzjoni,ħabi,animazzjoni,buttuni +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,plassering,størrelse, autoskjul,skjul,knapper,animasjon,bakgrunn,temaer,mellomlager for temaer, mellomlager,skjult,K-meny,bokmerker,nylig brukte dokumenter,hurtigviser, katalogmeny,meny,ikoner,fliser,miniprogrammer,panelprogrammer,oppstart, uthev,håndtak,forstørring av ikoner +Keywords[nds]=Kicker,Paneel,kpanel,Taskbalken,Programmbalken,Startbalken,Adress,Grött,automaatsch versteken,versteken,Knööp,Knoop,Knööp,Animatschoon,Achtergrund,Muster,Menü-Twischenspieker,Twischenspieker,versteken,K-Menü,Leesteken,leste Dokmenten,Fixkieker,Nettkieker-Menü,Menü,Lüttbiller,Titel,Programmen,starten,markeren,handles,Grepen,Lüttbiller grötter maken +Keywords[ne]=किकर, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, स्थान, आकार, स्वत: लुकाउने, लुकाउनुहोस्, बटनहरू, एनिमेसन, पृष्ठभूमि, विषयवस्तुहरू, मेनु क्यास, क्यास, लुकेको, के-मेनु, पुस्तकचिनोहरू, हालको कागजातहरू, छिटो ब्राउजर, ब्राउजर मेनु, मेनु, प्रतिमा, टायलहरू, एप्लेटहरू, सुरु, हाइलाइट, ह्यान्डल गर्दछ, जुम प्रतिमा +Keywords[nl]=kicker,paneel,kpanel,taakbalk,takenbalk,startbalk,startmenu,applicatie starter,locatie,afmeting,terminaltoepassing,auto hide,automatisch verbergen,verbergen,invouwen,knoppen,animatie,achtergrond,thema's,menu cache,cache,verborgen,K-Menu,bookmarks,bladwijzers,recente documenten,quickbrowser,browser menu,menu,icons,icoon,iconen,pictogrammen,tegels,tiles,applets,opstarten,highlight,accentuering,handles,zoomen,knoppen,handvatten,betrouwbare applets,security level,beveiligingsniveau +Keywords[nn]=Kicker,panel,KPanel,oppgåvelinje,oppstartslinje,plassering,storleik,autogøym,gøym,knappar,animasjon,bakgrunn,tema,menymellomlager,mellomlager,gøymd,K-meny,bokmerke,nyleg bruka dokument,snøgglesar,katalogmeny,meny,ikon,brikker,applet,panelprogram,oppstart,merking,handtak,forstørring av ikon +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, ਪੈਨਲ, ਟਿਕਾਣਾ, ਬਰਾਊਜ਼ਰ, ਝਲਾਕਰਾ, ਕੈਂਚੇ, ਕੇ-ਮੇਨੂ, ਬੁੱਕਮਾਰਕ, ਤਾਜ਼ਾ, ਉਘੜੇ, ਹੈਂਡਲ, ਬਟਨ, ਸਰੂਪ, ਮੇਨੂ, ਓਹਲੇ, ਅਕਾਰ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,pasek uruchamiania,położenie,rozmiar,automatyczne ukrywanie,ukryj,przyciski,animacja,tło,motywy,bufor (cache) menu,bufor,cache,ukryty,K-Menu,zakładki,ostatnie dokumenty,szybkie przeglądanie,menu,ikony,kafelkowane,programiki,uruchomienie,podświetlanie,uchwyty,powiększanie ikon +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,localização,tamanho,auto-esconder,esconder,botões,animação,fundo,temas,'cache' de menu,'cache',escondido,menu K,favoritos,documentos recentes,navegador rápido,menu de navegação,menu,ícones,mosaicos,'applets',inicio,realce,pegas,ícones aumentados +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,lançar aplicativos,localização,tamanho,auto-ocultar,esconder,botões, animação,fundo,temas,cache de menu,cache,escondido,Menu K,favoritos,documentos recentes,navegador rápido, menu do navegador,menu,ícones,títulos,mini-aplicativos,iniciar,realçar, manipuladores, ícones de ampliação +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,lansare,mărime,locație,ascundere automată,butoane,animație,fundal,tematică,meniu K,semne de carte,documente recente,navigator rapid,meniu navigare,meniu,iconițe,mozaic,miniaplicații,evidențiere,scalare +Keywords[rw]=igitera,umwanya,k-umwanya,umurongogutangira,umurongogutangiza,indangahantu,ingano,kwihisha,guhisha,buto,iyega,mbuganyuma,insanganyamatsiko,ubwihisho bw'ibikubiyemo,ubwihisho,bihishe,K-Ibikubiyemo,utumenyetso,inyandiko zigezweho,mucukumbuzi yihuta,ibikubiyemo bya mucukumbuzi,ibikubiyemo,udushushondanga,udukaro,apuleti,gutangira,gushimangira,ibifashi,udushushondanga guhindura-ingano +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,báiki,sturrodat,autočiega,čiehkadit,boalut,animašuvdna,duogáš,fáddá,fálločiehkárájus,čiehkárájus,K-fállu,girjemearkkat,aiddo geavahuvvon dokumeantta,ohcofállu,fállu,govažat,prográmmažat,álggaheapmi,merken,geavjjat,luohttehahtti prográmmažat,sihkkarvuohtadássi +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,miesto,umiestnenie,veľkosť,terminálová aplikácia,skrývanie,automatické skrývanie,tlačidlá,animácia,pozadie,témy,cache,cache ponuky,skryté,K-Menu,záložky,posledné dokumenty,rýchly prehliadač,ponuka prehliadača,menu,ikony,applety,štart,zvýraznenie,handles,zväčšovanie ikon,overené applety,úroveň zabezpečenia +Keywords[sl]=kicker,pult,kpanel,opravilna vrstica,zagonska vrstica,mesto,lokacija,velikost,terminalski program,skrij,samodejno skrivanje,skrivanje,gumbi,animacija,ozadje,teme,menijski predpomnilnik,predpomnilnik,skrit,K-Menu,zaznamki,nedavni dokumenti,hitro brskanje,brskalni meni,meni,tlakovci,ikone,vstavki,zagon,osvetlitev,ročice,ikone za povečavo +Keywords[sr]=kicker,панел,kpanel,трака задатака,startbar,launchbar,локација,величина,Терминалски програм,аутоматско сакривање,сакривање,дугмићи,анимација,позадина,теме,мени кеш,кеш,скривен,K-Menu,маркери,скори документи,брзи прегледач,мени прегледача,мени,иконе,блокови,апплети,startup,истицање,хватаљке,увеличавање икона,аплети којима се верује,ниво безбедности +Keywords[sr@Latn]=kicker,panel,kpanel,traka zadataka,startbar,launchbar,lokacija,veličina,Terminalski program,automatsko sakrivanje,sakrivanje,dugmići,animacija,pozadina,teme,meni keš,keš,skriven,K-Menu,markeri,skori dokumenti,brzi pregledač,meni pregledača,meni,ikone,blokovi,appleti,startup,isticanje,hvataljke,uveličavanje ikona,apleti kojima se veruje,nivo bezbednosti +Keywords[sv]=kicker,panel,k-panel,aktivitetsfält,startfält,körningsfält,plats,storlek,dölj automatiskt,dölj,göm,knappar,animering,bakgrund,teman,menycache,cache,gömd,dold,K-meny,bokmärken,senaste dokument,snabbläddrare,bläddringsmeny,meny,ikoner,miniprogram,start,framhäv,grepp,zoomikoner +Keywords[ta]=கிக்கர், பானல், கேபானல்,துவக்கப்பட்டி, துவங்கும்பட்டி,இடம்,அளவு, சத்தம் மறை, மறை,பட்டன், உயிர்சித்திரம்,பின்னனி,கருப்பொருள், தற்காலிக மெனு, மறைந்த,கே-மெனு,புத்தககுறிகள், தற்போதைய ஆவணம். வேக உலாவி, உலாவி மெனு, மெனு, சின்னம், சிறுநிரல், துவக்கம், கையாள், பெரிதாக்கும் சின்னங்கள் +Keywords[th]=kicker,พาเนล,kpanel,taskbar,startbar,แถบเรียกโปรแกรม,ที่ตั้ง,ขนาด,ซ่อนอัตโนมัติ ,ซ่อน,ปุ่ม,อนิเมชั่น,พื้นหลัง,ชุดตกแต่ง,แคชของเมนู,แคช,ถูกซ่อน,K-Menu,ที่คั่นหน้า,เอกสารที่เพิ่งเปิดไป,quickbrowser,เมนูของบราวเซอร์,เมนู,ไอคอน,พื้นผิว,applets,startup,highlight,handles,ซูมไอคอน +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,başlat çubuğu,konum,boyut,Uç birim uygulaması,otomatik gizle,gizle,tuşlar,animasyon,artalan,temalar,menü ön belleği,ön bellek,gizli,K-Menu,yer imleri,en son kullanılan belgeler,hızlı gözatıcı,göz atıcı menüsü,menü,simgeler,karo,programcıklar,Başlangıç,belirt,tutamaçlar,büyüyen simgeler,güvenilen programcıklar,güvenlik düzeyi +Keywords[tt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser saylaq,saylaq,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[uk]=kicker,панель,смужка задач,kpanel,смужка запуску,розташування,розмір,консольна програма,автоматичне згортання,згортання,кнопки,анімація,тло,теми,кеш меню,кеш,схований,К-Меню,закладки,недавні документи,швидка навігація,меню навігатора,меню,піктограми,заголовки,аплети,запуск,підсвічування,маніпулятор,масштабування піктограм +Keywords[uz]=panel,vazifalar paneli,bekitish,avto-bekitish,tugmalar,animatsiya,orqa fon,mavzular,K-menyu,kesh,yashirilgan,xatchoʻplar,yaqinda ochilgan hujjatlar,tez koʻruvchi,brauzer menyusi,menyuning keshi,menyu,nishonchalar,appletlar,nishonchalarni kattalashtirish,oʻlcham,kicker,kpanel,startbar,launchbar,joylashishi,tiles,startup,highlight,handles +Keywords[uz@cyrillic]=панел,вазифалар панели,бекитиш,авто-бекитиш,тугмалар,анимация,орқа фон,мавзулар,К-меню,кэш,яширилган,хатчўплар,яқинда очилган ҳужжатлар,тез кўрувчи,браузер менюси,менюнинг кэши,меню,нишончалар,апплетлар,нишончаларни катталаштириш,ўлчам,kicker,kpanel,startbar,launchbar,жойлашиши,tiles,startup,highlight,handles +Keywords[vi]=kích hoạt,bảng điều khiển,kpanel,thanh tác vụ,thanh khởi động,thanh phóng,vị trí,kích cỡ,tự ẩn,ẩn,nút,hoạt hình,mảnh nền,sắc thái,thực đơn đệm,đệm,giấu,Thực đơn K,số lưu liên kết,tài liệu gần đây,duyệt nhanh,thực đơn duyệt,thực đơn,biểu tượng,tiêu đề,tiểu ứng dụng,khởi động,nổi bật,cầm nắm,biểu tượng phóng đại,ứng dụng đáng tin,mức độ an ninh +Keywords[wa]=kicker,panel,sicriftôr,scriftôr,kpanel,taskbar,bår des bouyes,startbar,launchbar,bår d' enondaedje,plaece,grandeu,catche tot seu,catchî,botons,animåvion,fond,tinmes,muchete menu,muchete,K-Menu,rimåkes,documints nén vî,betchteu rade,dresseŷe do betchteu,dressêye,menu,imådjetes,applets,apliketes,enonde tot seu,highlight,handles,zooming icons,zoumer les imådjetes +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons面板,任务栏,启动栏,位置,大小,自动隐藏,隐藏,按钮,动画,背景,主题,菜单缓存,缓存,书签,最近文档,快速浏览器,浏览器菜单,菜单,图标,平铺,启动,突出,句柄,缩放图标 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,面板,工作列,啟動列,快捷列,位置,大小,自動隱藏,隱藏,按鈕,動畫,背景,佈景主題,選單快取,快取,隱藏,K-選單,書籤,最近開啟的文件,快速瀏覽,瀏覽選單,選單,圖示,小圖塊,應用程式,啟動,高亮度,處理,縮放圖示 diff --git a/kcontrol/kicker/kicker_config_hiding.desktop b/kcontrol/kicker/kicker_config_hiding.desktop new file mode 100644 index 000000000..60c040264 --- /dev/null +++ b/kcontrol/kicker/kicker_config_hiding.desktop @@ -0,0 +1,202 @@ +[Desktop Entry] +Icon=kcmkicker +Type=Application +DocPath=kcontrol/panel/index.html#panel-hiding +Exec=kcmshell kicker_hiding + +X-KDE-Library=kicker +X-KDE-FactoryName=kicker_hiding +X-KDE-ParentApp=kicker + +Name=Hiding +Name[af]=Wegsteking +Name[ar]=الإخفاء +Name[be]=Хаванне +Name[bg]=Скриване +Name[bn]=লুকানো +Name[br]=K&uzhat +Name[bs]=Skrivanje +Name[ca]=Ocultació +Name[cs]=Skrývání +Name[csb]=Tacenié +Name[da]=Skjul +Name[de]=Ausblenden +Name[el]=Απόκρυψη +Name[eo]=Kaŝanta +Name[es]=Ocultar +Name[et]=Peitmine +Name[eu]=Ezkutatzea +Name[fa]=مخفی کردن +Name[fi]=Piilotus +Name[fr]=Masquage +Name[fy]=Ferstopwize +Name[ga]=Folach +Name[gl]=Ocultamento +Name[he]=הסתרה +Name[hr]=Skrivanje +Name[hu]=Elrejtés +Name[is]=Felun +Name[it]=Scomparsa +Name[ja]=隠す +Name[ka]=დამალვა +Name[kk]=Жасыру +Name[km]=ការ​លាក់ +Name[lt]=Slėpimas +Name[mk]=Криење +Name[ms]=Penyembunyian +Name[nb]=Skjuling +Name[nds]=Versteken +Name[ne]=लुकाइ +Name[nl]=Verbergwijze +Name[nn]=Gøyming +Name[pa]=ਓਹਲੇ +Name[pl]=Ukrywanie +Name[pt]=Esconder +Name[pt_BR]=Ocultação +Name[ro]=Ascundere +Name[ru]=Скрытие панели +Name[rw]=Guhisha +Name[se]=Čiehkadeapmi +Name[sk]=Skrytie +Name[sl]=Skrivanje +Name[sr]=Скривање +Name[sr@Latn]=Skrivanje +Name[sv]=Dölj +Name[ta]=மறைத்தல் +Name[te]=దాగిన +Name[tg]=Пинҳонӣ +Name[th]=ซ่อน +Name[tr]=Gizlenme +Name[tt]=Yäşerü +Name[uk]=Приховування +Name[uz]=Bekitish +Name[uz@cyrillic]=Бекитиш +Name[vi]=Giấu +Name[wa]=Catchî +Name[zh_CN]=隐藏 +Name[zh_TW]=隱藏 +Comment=You can configure the hiding of the panel here +Comment[af]=Jy kan die wegsteek van die paneel hier opstel +Comment[ar]=هنا يمكنك إعداد إخفاء اللوح +Comment[be]=Тут вы можаце змяніць рэжым хавання панэлі +Comment[bg]=Настройване скриването на системния панел +Comment[bn]=আপনি এখানে প্যানেল লুকানো এবং দেখানোর নিয়মাবলী নির্দিষ্ট করতে পারেন +Comment[bs]=Ovdje možete podesiti sakrivanje panela +Comment[ca]=Aquí podeu configurar l'ocultació del plafó +Comment[cs]=Zde je možné nastavit skrývání panelu +Comment[csb]=Tuwò je mòżno nastôwic tacenié panelu +Comment[da]=Her kan du indstille at skjule panelet +Comment[de]=Hier können Sie Einstellungen zum Ausblenden der Kontrollleiste vornehmen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε την απόκρυψη του πίνακα +Comment[eo]=Ĉi tie vi povas agordi la kaŝon de la panelo +Comment[es]=Aquí puede configurar el que el panel se oculte. +Comment[et]=Siin saad seadistada paneeli peitmist +Comment[eu]=Panela ezkutatzea konfigura dezakezu hemen +Comment[fa]=می‌توانید مخفی‌کردن تابلو را اینجا پیکربندی کنید +Comment[fi]=Voit muokata paneelin piilottamista tässä +Comment[fr]=Configuration du masquage du tableau de bord +Comment[fy]=Jo kinne hjir de wize fan ferstopjen fan in paniel ynstelle +Comment[gl]=Pode configurar aqui o ocultamento do painel +Comment[he]=באפשרותך לשנות את ההסתרה של הלוח כאן +Comment[hr]=Konfiguriranje skrivanja ploče +Comment[hu]=Itt lehet beállítani a panel elrejtését +Comment[is]=Hér getur þú stillt felunarham spjaldsins +Comment[it]=Configura qui la scomparsa del pannello +Comment[ja]=ここでパネルを隠す方法を設定します +Comment[ka]=აქ შეგიძლიათ პანელის დამალვის მითითება +Comment[kk]=Панельді жасыруын баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​លាក់​បន្ទះ +Comment[ko]=데스크톱의 행동 설정 +Comment[lt]=Čia galite konfigūruoti pulto slėpimą +Comment[mk]=Тука може да го конфигурирате криењето на панелот +Comment[ms]=Anda boleh konfigur penyembunyian panel di sini +Comment[nb]=Her kan du sette opp hvordan panelet skal skjules +Comment[nds]=Hier kannst Du dat Utblenn-Bedregen vun't Paneel instellen +Comment[ne]=तपाईँले यहाँ प्यानलको लुकाइ कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=U kunt hier de verbergwijze van het paneel instellen +Comment[nn]=Her kan du velja korleis panelet skal gøymast. +Comment[pa]=ਤੁਸੀਂ ਪੈਨਲ ਨੂੰ ਓਹਲੇ ਰੱਖਣ ਦੀ ਸੰਰਚਨਾ ਇੱਥੇ ਕਰ ਸਕਦੇ ਹੋ +Comment[pl]=Tutaj można skonfigurować ukrywanie panelu +Comment[pt]=Pode configurar a forma como o painel se esconde aqui +Comment[pt_BR]=Você pode configurar a ocultação do painel aqui +Comment[ro]=Aici puteți configura modul de ascundere al panoului KDE +Comment[ru]=Настройка скрытия панели +Comment[rw]=Ushobora kuboneza uguhisha k'umwanya hano +Comment[se]=Dáppe sáhtát heivehit panela čiehkadeami +Comment[sk]=Tu mnôžte nastaviť skrývanie panelu. +Comment[sl]=Tu lahko nastavite skrivanje pulta +Comment[sr]=Овде можете подесити скривање панела +Comment[sr@Latn]=Ovde možete podesiti skrivanje panela +Comment[sv]=Du kan anpassa när panelen döljs här +Comment[ta]=பலகத்தின் மறைப்பை இங்கே வடிவமைக்க முடியும் +Comment[tg]=Шумо метавонед пинҳоншавии пайраҳа дар ин ҷо танзим кунед +Comment[th]=คุณสามารถปรับแต่งการซ่อนถาดพาเนลได้ที่นี่ +Comment[tr]=Panelin gizlenmesini buradan yapılandırabilirsiniz +Comment[tt]=Taqtanıñ yäşerelüen caylaw urını +Comment[uk]=Тут можна налаштувати приховування панелі +Comment[uz]=Bu yerda panelni bekitishni moslash mumkin +Comment[uz@cyrillic]=Бу ерда панелни бекитишни мослаш мумкин +Comment[vi]=Bạn có thể cấu hình việc giấu các bảng điều khiển ở đây +Comment[wa]=Vos ploz apontyî chal comint catchî l' sicriftôr +Comment[zh_CN]=您可以在这里配置面板的隐藏 +Comment[zh_TW]=您可以在此設定面板是否隱藏 +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Размяшчэнне,Пазіцыя,Памер,Аўтаматычна хаваць,Хаваць,Кнопкі,Анімацыя,Фон,Тэмы,Кэш меню,Кэш,Схаваная,Схаваць,Меню KDE,Закладкі,Ранейшыя,Нядаўнія,Дакументы,Хуткі прагляд,Меню вандроўніка,Меню вандравання,Меню,Значкі,Аплеты,Запуск,Падсвятленне,Апрацоўка,Апрацоўшчык,Маштабаванне значак,kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[bg]=системен, панел, подредба, подравняване, kicker, panel, kpanel, taskbar, startbar, launchbar, location, size, auto hide, hide, buttons, animation, background, themes, menu cache, cache, hidden, K-Menu, bookmarks, recent documents, quickbrowser, browser menu, menu, icons, tiles, applets, startup, highlight, handles, zooming icons +Keywords[bs]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,veličina,automatsko sakrivanje,sakrivanje,dugmad,animacija,pozadina,teme,keš menija,meni,keš,skriven,zabilješke,skorašnji dokumenti,meni browsera,meni preglednika,ikone,appleti,pokretanje,uvećavanje +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra de llançament,localització,mida,auto oculta,oculta,botons,animació,temes,fons,cau del menú,cau,ocult,Menú K,punts,documents recents,navegació ràpida,menú de navegació,menú,icones,mosaics,aplets,arrencada,ressaltat,nanses,ampliar les icones +Keywords[cs]=kicker,panel,kpanel,pruh úloh,lišta úloh,umístění, velikost,skrývání,automatické skrývání,tlačítka,animace,pozadí, motivy,nabídka,menu,záložky,nedávné dokumenty,rychlé prohlížení, ikony,dlaždice,applety,spuštění,zvýraznění,úchytky,zvětšování ikon +Keywords[csb]=kicker,panel,kpanel,lëstëw zadaniów,sztartowô lëstëw,lëstëw zrëszaniô,pòłożenié,miara,aùtomatno tacënié,tacë,knąpë,animacëjô,spódk,spòdlé,témë,cache menu,cache,zatacony,K-Menu,załóżczi,slédny dokùmentë,chùtczé przezéranié,menu,ikònë,kafelkòwané,programiczi,zrëszanié,pòdskrzënianié,ùchwëtë,zwikszanié ikònów +Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,håndterer,ikoner +Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +Keywords[el]=kicker,πίνακας,kpanel,γραμμή εργασιών,γραμμή έναρξης,γραμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκρυψη,απόκρυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενού,λανθάνουσα μνήμη,κρυφό, K-Μενού,σελιδοδείκτες,πρόσφατα έγγραφα,γρήγορος εξερευνητής,μενού εξερευνητή,μενού,εικονίδια,tiles,μικροεφαρμογές,έναρξη,τονισμός,χειριστήρια, μεγέθυνση εικονιδίων +Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aŭtokaŝo,kaŝo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiarazte-barra,kokapena, neurria,auto ezkutatu,ezkutatu,botoiak,animazioa,atzeko planoa, gaiak,menu-katxea,katxea,ezkutatu,K-menua,laster-markak,oraintsuko dokumentuak, arakatzaile bizkorra,arakatzaile menua,menua,ikonoak,baldosak,appletak,abiatu,nabarmendu,heldulekuak,zooming icons +Keywords[fa]=kicker، تابلو، kpanel، میله‌ تکلیف، میله آغاز، میله راه‌انداز، محل، اندازه، مخفی کردن خودکار، مخفی کردن، دکمه‌ها، پویانمایی، زمینه، چهره‌ها، نهانگاه گزینگان، نهانگاه، مخفی، گزینگان K، چوب ‌الفها، سندهای اخیر، مرورگر سریع، گزینگان، مرورگر، شمایلها، کاشیها، برنامکها، راه‌اندازی، مشخص، گرداننده‌ها، بزرگ‌نمایی شمایلها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistyspalkki,paikka,koko,automaattipiilotus,piilotus,napit,animaatio,tausta,teemat,valikkovälimuisti,välimuisti,K-valikko,kirjanmerkit,viimeaikaiset asiakirjat,pikaselain,selausvalikko,valikko,kuvakkeet,sovelmat,käynnistys,korostus,kahvat,kuvakkeiden suurennus +Keywords[fr]=kicker,tableau de bord,barre du bas,barre des tâches,barre de démarrage,barre de lancement,emplacement,taille,auto-masquage,cacher,masquer,boutons,animation,fond,arrière-plan,thème,cache de menu,cache,caché,menu K,K,signets,documents récents,document récent,navigateur rapide,navigateur,menu,icône,mosaïque,applet,démarrage,surbrillance,poignée,poignées,zoom,zoom sur les icônes +Keywords[fy]=kicker,paniel,kpanel,taakbalke,takebalke,Startbalke,startmenu,applikaasje begjinner,lokaasje,ôfmjiting,terminaltapassing,auto hide,automatysk ferstopje,ferstopje,Ynklappe,knoppen,animaasje,eftergrûn,tema's,menu lyts ûnthâld,lyts ûnthâld,ferstoppe,K-Menu,bookmarks,blêdwizers,resinte dokuminten,quickbrowser,browser menu,menu,icons,ikoan,ikoanen,tegels,tiles,applets,begjinne,opljochtsje,handles,zoomen,knoppen,hanfetten,betroubere applets,feiligens nivo +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,barra de comezo,barra de lanzamento,localización,tamaño,auto agochamento,agochamento,botóns,animación,fondo,temas,cache de menú,caché,oculto,Menú K,marcadores,derradeiros documentos,navegador rápido,menú de navegación,menú,iconas,apliques,início,resaltado,xestión,aumento de iconas +Keywords[he]=kicker, לוח, kpanel, שורת משימות, שורת הרצה, מיקום, גודל, הסתרה אוטומטית, הסתר, אנימציה, רקע, ערכות, תפריט, מטמון, מוסתר, תפריט K, מועדפים, מסמכים אחרונים, דפדוף מהיר, תפריט, סימנים, סמלים, כותרות, יישומונים, אתחול, הדגשה, ידיות, הגדלת סמלים, taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, panel +Keywords[hi]=किकर,फलक,के-पेनल,कार्यपट्टी,प्रारंभपट्टी,चालकपट्टी,स्थान,आकार,स्वतः छुपें,छुपें,बटन्स,एनिमेशन,पृष्ठभूमि,प्रसंग,मेनू कैश,कैश,छुपा,के-मेन्यू,पसंद,हाल ही के दस्तावेज़,क्विक-ब्राउज़र,ब्राउज़र मेन्यू,मेन्यू,प्रतीक,टाइल्स,ऐप्लेट्स,स्टार्टअप,उभारना,हैंडल्स,जूमिंग प्रतीक +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,ploča,traka zadataka,traka pokretanja,lokacija,veličina,automatsko skrivanje,skrivanje,gumbi,animacija,pozadina,teme,pohrana izbornika,pohrana,skriven,oznake,nedavni dokumenti,brzi preglednik,izbornik preglednika,izbornik,ikone,popločeno,apleti,naglašavanje,rukovanje,uvećane ikone +Keywords[hu]=Kicker,panel,kpanel,feladatlista,start menü,indítómenü,indítósáv,hely,méret,automatikus elrejtés,elrejtés,gombok,animáció,háttér,témák,menügyorstár,gyorstár,rejtett,K menü,könyvjelzők,legutóbbi dokumentumok,gyorsböngésző,böngészőmenü,menü,ikonok,mozaikszerű,kisalkalmazások,indulás,kiemelés,fogantyúk,nagyítóikonok +Keywords[is]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,trusted applets,security level +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,taskbar,startbar,launchbar,barra di avvio,posizione,dimensione,scomparsa automatica,pulsanti,animazione,sfondo,temi,cache dei menu,nascosto,Menu K,segnalibri,documenti recenti,browser veloce,menu,icone,piastrelle,applet,avvio,evidenziazione,maniglie,ingrandimento icone +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,場所,サイズ,自動的に隠す,隠す,ボタン,アニメーション,背景,テーマ,メニューキャッシュ,キャッシュ,隠れた,Kメニュー,ブックマーク,最近のドキュメント,クイックブラウザ,ブラウザメニュー,メニュー,アイコン,タイル,アプレット,スタートアップ,ハイライト,ハンドル,アイコンのズーム +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,ទីតាំង,ទំហំ,លាក់​ស្វ័យប្រវត្តិ,លាក់,ប៊ូតុង,ចលនា,ផ្ទៃ​ខាង​ក្រោយ,ស្បែក,ឃ្លាំង​សម្ងាត់​ម៉ឺនុយ,ឃ្លាំង​សម្ងាត់,លាក់,ម៉ឺនុយ K,កន្លែង​ចំណាំ,ឯកសារ​ថ្មីៗ​នេះ,កម្មវិធី​រុករក​រហ័ស,ម៉ឺនុយ​កម្មវិធី​រុករក,ម៉ឺនុយ,រូបតំណាង,ក្បឿង,អាប់ភ្លេត,ចាប់ផ្ដើម,បន្លិច,ប្រើ,រូបតំណាង​ពង្រីក +Keywords[lt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,skydelis,kskydelis,užduočių juosta,paleidimo juosta,slėpti,mygtukai,animacija,fonas,temos,meniu atmintinė,atmintinė,paslėptas,žymelės,neseniai naudoti dokumentai,peržiūra,meniu,ženkliukai,perdengti,įskiepiai,paleistis,pažymėti,rankenėlės,išdidinti ženkliukus +Keywords[lv]=kicker,panelis,kpanel,uzdevumjosla,startbar,launchbar,location,size,izmērs,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,grāmatzīmes,recent documents,quickbrowser,browser menu,izvēlne,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,панел,лента со програми,локација,големина,авто криење,криење,копчиња,анимација,подлога,позадина,теми,кеш на менито,кеш,скриен,K-Мени,обележувачи, последни документи,брз прелистувач,мени за прелистувачи,мени,икони,плочки,аплети,рачки,зумирање на икони +Keywords[mt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,favoriti,pannell,post,daqs,lokazzjoni,ħabi,animazzjoni,buttuni +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,plassering,størrelse, autoskjul,skjul,knapper,animasjon,bakgrunn,temaer,mellomlager for temaer, mellomlager,skjult,K-meny,bokmerker,nylig brukte dokumenter,hurtigviser, katalogmeny,meny,ikoner,fliser,miniprogrammer,panelprogrammer,oppstart, uthev,håndtak,forstørring av ikoner +Keywords[nds]=Kicker,Paneel,kpanel,Taskbalken,Programmbalken,Startbalken,Adress,Grött,automaatsch versteken,versteken,Knööp,Knoop,Knööp,Animatschoon,Achtergrund,Muster,Menü-Twischenspieker,Twischenspieker,versteken,K-Menü,Leesteken,leste Dokmenten,Fixkieker,Nettkieker-Menü,Menü,Lüttbiller,Titel,Programmen,starten,markeren,handles,Grepen,Lüttbiller grötter maken +Keywords[ne]=किकर, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, स्थान, आकार, स्वत: लुकाउने, लुकाउनुहोस्, बटनहरू, एनिमेसन, पृष्ठभूमि, विषयवस्तुहरू, मेनु क्यास, क्यास, लुकेको, के-मेनु, पुस्तकचिनोहरू, हालको कागजातहरू, छिटो ब्राउजर, ब्राउजर मेनु, मेनु, प्रतिमा, टायलहरू, एप्लेटहरू, सुरु, हाइलाइट, ह्यान्डल गर्दछ, जुम प्रतिमा +Keywords[nl]=kicker,paneel,kpanel,taakbalk,takenbalk,startbalk,startmenu,applicatie starter,locatie,afmeting,terminaltoepassing,auto hide,automatisch verbergen,verbergen,invouwen,knoppen,animatie,achtergrond,thema's,menu cache,cache,verborgen,K-Menu,bookmarks,bladwijzers,recente documenten,quickbrowser,browser menu,menu,icons,icoon,iconen,pictogrammen,tegels,tiles,applets,opstarten,highlight,accentuering,handles,zoomen,knoppen,handvatten,betrouwbare applets,security level,beveiligingsniveau +Keywords[nn]=Kicker,panel,KPanel,oppgåvelinje,oppstartslinje,plassering,storleik,autogøym,gøym,knappar,animasjon,bakgrunn,tema,menymellomlager,mellomlager,gøymd,K-meny,bokmerke,nyleg bruka dokument,snøgglesar,katalogmeny,meny,ikon,brikker,applet,panelprogram,oppstart,merking,handtak,forstørring av ikon +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, ਪੈਨਲ, ਟਿਕਾਣਾ, ਬਰਾਊਜ਼ਰ, ਝਲਾਕਰਾ, ਕੈਂਚੇ, ਕੇ-ਮੇਨੂ, ਬੁੱਕਮਾਰਕ, ਤਾਜ਼ਾ, ਉਘੜੇ, ਹੈਂਡਲ, ਬਟਨ, ਸਰੂਪ, ਮੇਨੂ, ਓਹਲੇ, ਅਕਾਰ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,pasek uruchamiania,położenie,rozmiar,automatyczne ukrywanie,ukryj,przyciski,animacja,tło,motywy,bufor (cache) menu,bufor,cache,ukryty,K-Menu,zakładki,ostatnie dokumenty,szybkie przeglądanie,menu,ikony,kafelkowane,programiki,uruchomienie,podświetlanie,uchwyty,powiększanie ikon +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,localização,tamanho,auto-esconder,esconder,botões,animação,fundo,temas,'cache' de menu,'cache',escondido,menu K,favoritos,documentos recentes,navegador rápido,menu de navegação,menu,ícones,mosaicos,'applets',inicio,realce,pegas,ícones aumentados +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,lançar aplicativos,localização,tamanho,auto-ocultar,esconder,botões, animação,fundo,temas,cache de menu,cache,escondido,Menu K,favoritos,documentos recentes,navegador rápido, menu do navegador,menu,ícones,títulos,mini-aplicativos,iniciar,realçar, manipuladores, ícones de ampliação +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,lansare,mărime,locație,ascundere automată,butoane,animație,fundal,tematică,meniu K,semne de carte,documente recente,navigator rapid,meniu navigare,meniu,iconițe,mozaic,miniaplicații,evidențiere,scalare +Keywords[rw]=igitera,umwanya,k-umwanya,umurongogutangira,umurongogutangiza,indangahantu,ingano,kwihisha,guhisha,buto,iyega,mbuganyuma,insanganyamatsiko,ubwihisho bw'ibikubiyemo,ubwihisho,bihishe,K-Ibikubiyemo,utumenyetso,inyandiko zigezweho,mucukumbuzi yihuta,ibikubiyemo bya mucukumbuzi,ibikubiyemo,udushushondanga,udukaro,apuleti,gutangira,gushimangira,ibifashi,udushushondanga guhindura-ingano +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,báiki,sturrodat,autočiega,čiehkadit,boalut,animašuvdna,duogáš,fáddá,fálločiehkárájus,čiehkárájus,K-fállu,girjemearkkat,aiddo geavahuvvon dokumeantta,ohcofállu,fállu,govažat,prográmmažat,álggaheapmi,merken,geavjjat,luohttehahtti prográmmažat,sihkkarvuohtadássi +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,miesto,umiestnenie,veľkosť,terminálová aplikácia,skrývanie,automatické skrývanie,tlačidlá,animácia,pozadie,témy,cache,cache ponuky,skryté,K-Menu,záložky,posledné dokumenty,rýchly prehliadač,ponuka prehliadača,menu,ikony,applety,štart,zvýraznenie,handles,zväčšovanie ikon,overené applety,úroveň zabezpečenia +Keywords[sl]=kicker,pult,kpanel,opravilna vrstica,zagonska vrstica,mesto,lokacija,velikost,terminalski program,skrij,samodejno skrivanje,skrivanje,gumbi,animacija,ozadje,teme,menijski predpomnilnik,predpomnilnik,skrit,K-Menu,zaznamki,nedavni dokumenti,hitro brskanje,brskalni meni,meni,tlakovci,ikone,vstavki,zagon,osvetlitev,ročice,ikone za povečavo +Keywords[sr]=kicker,панел,kpanel,трака задатака,startbar,launchbar,локација,величина,Терминалски програм,аутоматско сакривање,сакривање,дугмићи,анимација,позадина,теме,мени кеш,кеш,скривен,K-Menu,маркери,скори документи,брзи прегледач,мени прегледача,мени,иконе,блокови,апплети,startup,истицање,хватаљке,увеличавање икона,аплети којима се верује,ниво безбедности +Keywords[sr@Latn]=kicker,panel,kpanel,traka zadataka,startbar,launchbar,lokacija,veličina,Terminalski program,automatsko sakrivanje,sakrivanje,dugmići,animacija,pozadina,teme,meni keš,keš,skriven,K-Menu,markeri,skori dokumenti,brzi pregledač,meni pregledača,meni,ikone,blokovi,appleti,startup,isticanje,hvataljke,uveličavanje ikona,apleti kojima se veruje,nivo bezbednosti +Keywords[sv]=kicker,panel,k-panel,aktivitetsfält,startfält,körningsfält,plats,storlek,dölj automatiskt,dölj,göm,knappar,animering,bakgrund,teman,menycache,cache,gömd,dold,K-meny,bokmärken,senaste dokument,snabbläddrare,bläddringsmeny,meny,ikoner,miniprogram,start,framhäv,grepp,zoomikoner +Keywords[ta]=கிக்கர், பானல், கேபானல்,துவக்கப்பட்டி, துவங்கும்பட்டி,இடம்,அளவு, சத்தம் மறை, மறை,பட்டன், உயிர்சித்திரம்,பின்னனி,கருப்பொருள், தற்காலிக மெனு, மறைந்த,கே-மெனு,புத்தககுறிகள், தற்போதைய ஆவணம். வேக உலாவி, உலாவி மெனு, மெனு, சின்னம், சிறுநிரல், துவக்கம், கையாள், பெரிதாக்கும் சின்னங்கள் +Keywords[th]=kicker,พาเนล,kpanel,taskbar,startbar,แถบเรียกโปรแกรม,ที่ตั้ง,ขนาด,ซ่อนอัตโนมัติ ,ซ่อน,ปุ่ม,อนิเมชั่น,พื้นหลัง,ชุดตกแต่ง,แคชของเมนู,แคช,ถูกซ่อน,K-Menu,ที่คั่นหน้า,เอกสารที่เพิ่งเปิดไป,quickbrowser,เมนูของบราวเซอร์,เมนู,ไอคอน,พื้นผิว,applets,startup,highlight,handles,ซูมไอคอน +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,başlat çubuğu,konum,boyut,Uç birim uygulaması,otomatik gizle,gizle,tuşlar,animasyon,artalan,temalar,menü ön belleği,ön bellek,gizli,K-Menu,yer imleri,en son kullanılan belgeler,hızlı gözatıcı,göz atıcı menüsü,menü,simgeler,karo,programcıklar,Başlangıç,belirt,tutamaçlar,büyüyen simgeler,güvenilen programcıklar,güvenlik düzeyi +Keywords[tt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser saylaq,saylaq,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[uk]=kicker,панель,смужка задач,kpanel,смужка запуску,розташування,розмір,консольна програма,автоматичне згортання,згортання,кнопки,анімація,тло,теми,кеш меню,кеш,схований,К-Меню,закладки,недавні документи,швидка навігація,меню навігатора,меню,піктограми,заголовки,аплети,запуск,підсвічування,маніпулятор,масштабування піктограм +Keywords[uz]=panel,vazifalar paneli,bekitish,avto-bekitish,tugmalar,animatsiya,orqa fon,mavzular,K-menyu,kesh,yashirilgan,xatchoʻplar,yaqinda ochilgan hujjatlar,tez koʻruvchi,brauzer menyusi,menyuning keshi,menyu,nishonchalar,appletlar,nishonchalarni kattalashtirish,oʻlcham,kicker,kpanel,startbar,launchbar,joylashishi,tiles,startup,highlight,handles +Keywords[uz@cyrillic]=панел,вазифалар панели,бекитиш,авто-бекитиш,тугмалар,анимация,орқа фон,мавзулар,К-меню,кэш,яширилган,хатчўплар,яқинда очилган ҳужжатлар,тез кўрувчи,браузер менюси,менюнинг кэши,меню,нишончалар,апплетлар,нишончаларни катталаштириш,ўлчам,kicker,kpanel,startbar,launchbar,жойлашиши,tiles,startup,highlight,handles +Keywords[vi]=kích hoạt,bảng điều khiển,kpanel,thanh tác vụ,thanh khởi động,thanh phóng,vị trí,kích cỡ,tự ẩn,ẩn,nút,hoạt hình,mảnh nền,sắc thái,thực đơn đệm,đệm,giấu,Thực đơn K,số lưu liên kết,tài liệu gần đây,duyệt nhanh,thực đơn duyệt,thực đơn,biểu tượng,tiêu đề,tiểu ứng dụng,khởi động,nổi bật,cầm nắm,biểu tượng phóng đại,ứng dụng đáng tin,mức độ an ninh +Keywords[wa]=kicker,panel,sicriftôr,scriftôr,kpanel,taskbar,bår des bouyes,startbar,launchbar,bår d' enondaedje,plaece,grandeu,catche tot seu,catchî,botons,animåvion,fond,tinmes,muchete menu,muchete,K-Menu,rimåkes,documints nén vî,betchteu rade,dresseŷe do betchteu,dressêye,menu,imådjetes,applets,apliketes,enonde tot seu,highlight,handles,zooming icons,zoumer les imådjetes +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons面板,任务栏,启动栏,位置,大小,自动隐藏,隐藏,按钮,动画,背景,主题,菜单缓存,缓存,书签,最近文档,快速浏览器,浏览器菜单,菜单,图标,平铺,启动,突出,句柄,缩放图标 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,面板,工作列,啟動列,快捷列,位置,大小,自動隱藏,隱藏,按鈕,動畫,背景,佈景主題,選單快取,快取,隱藏,K-選單,書籤,最近開啟的文件,快速瀏覽,瀏覽選單,選單,圖示,小圖塊,應用程式,啟動,高亮度,處理,縮放圖示 diff --git a/kcontrol/kicker/kicker_config_menus.desktop b/kcontrol/kicker/kicker_config_menus.desktop new file mode 100644 index 000000000..3dbb52d48 --- /dev/null +++ b/kcontrol/kicker/kicker_config_menus.desktop @@ -0,0 +1,199 @@ +[Desktop Entry] +Icon=kcmkicker +Type=Application +DocPath=kcontrol/panel/index.html#panel-menus +Exec=kcmshell kicker_menus + +X-KDE-Library=kicker +X-KDE-FactoryName=kicker_menus +X-KDE-ParentApp=kicker + +Name=Menus +Name[af]=Kieslyste +Name[ar]=القوائم +Name[be]=Меню +Name[bg]=Менюта +Name[bn]=মেনু +Name[br]=Meuziadoù +Name[bs]=Meniji +Name[ca]=Menús +Name[cs]=Nabídky +Name[csb]=Menu +Name[da]=Menuer +Name[de]=Menüs +Name[el]=Μενού +Name[eo]=Menuoj +Name[es]=Menús +Name[et]=Menüüd +Name[eu]=Menuak +Name[fa]=گزینگان +Name[fi]=Valikot +Name[fy]=Menu's +Name[ga]=Roghchláir +Name[he]=תפריטים +Name[hr]=Izbornici +Name[hu]=Menük +Name[id]=Menu +Name[is]=Valmyndir +Name[it]=Menu +Name[ja]=メニュー +Name[ka]=მენიუები +Name[kk]=Мәзірлер +Name[km]=ម៉ឺនុយ +Name[lt]=Meniu +Name[mk]=Менија +Name[ms]=Menu +Name[nb]=Menyer +Name[nds]=Menüs +Name[ne]=मेनु +Name[nl]=Menu's +Name[nn]=Menyar +Name[pa]=ਮੇਨੂ +Name[pl]=Menu +Name[ro]=Meniuri +Name[ru]=Меню +Name[rw]=Ibikubiyemo +Name[se]=Fálut +Name[sk]=Menu +Name[sl]=Meniji +Name[sr]=Менији +Name[sr@Latn]=Meniji +Name[sv]=Menyer +Name[ta]=பட்டியல்கள் +Name[te]=పట్టిలు +Name[tg]=Меню +Name[th]=เมนู +Name[tr]=Menüler +Name[tt]=Saylaq +Name[uk]=Меню +Name[uz]=Menyular +Name[uz@cyrillic]=Менюлар +Name[vi]=Thực đơn +Name[wa]=Dressêyes +Name[zh_CN]=菜单 +Name[zh_TW]=選單 +Comment=You can configure the menus of the panel here +Comment[af]=Jy kan die kieslyste van die paneel hier opstel +Comment[ar]=هنا يمكنك إعداد قوائم اللوح +Comment[be]=Тут вы можаце змяніць настаўленні меню панэлі +Comment[bg]=Настройване менютата на системния панел +Comment[bn]=আপনি এখানে প্যানেল-এর মেনুসমূহ কনফিগার করতে পারেন +Comment[bs]=Ovdje možete podesiti menije na panelu +Comment[ca]=Aquí podeu configurar els menús del plafó +Comment[cs]=Zde je možné nastavit nabídky panelu +Comment[csb]=Tuwò je mòżno nastôwic menu panelu +Comment[da]=Her kan du indstille panelets menuer +Comment[de]=Hier können Sie Einstellungen für die Kontrollleiste vornehmen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε τα μενού του πίνακα +Comment[eo]=Ĉi tie vi povas agordi la menuon de la panelo +Comment[es]=Configuración de la apariencia del panel +Comment[et]=Siin saad seadistada paneeli menüüsid +Comment[eu]=Panelaren menuak konfigura ditzakezu hemen +Comment[fa]=می‌توانید گزینگان تابلو را اینجا پیکربندی کنید +Comment[fi]=Voit muokata paneelin valikkoja tässä +Comment[fr]=Configuration des menus du tableau de bord +Comment[fy]=Jo kinne hjir de menu's fan it paniel ynstelle +Comment[gl]=Pode configurar aqui os menus do painel +Comment[he]=באפשרותך להגדיר את התפריטים של הלוח כאן +Comment[hr]=Konfiguriranje izbornika ploče +Comment[hu]=Itt lehet beállítani a panel menüit +Comment[is]=Hér getur þú stillt valmyndir spjaldsins +Comment[it]=Configura i menu del pannello +Comment[ja]=ここでパネルのメニューを設定します +Comment[ka]=აქ შეგიძლიათ პანელის მენიუების გამართვა +Comment[kk]=Панельдің мәзірін баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធម៉ឺនុយ​របស់​បន្ទះ +Comment[ko]=데스크톱의 행동 설정 +Comment[lt]=Čia galite konfigūruoti visus pulto meniu +Comment[mk]=Тука може да ги конфигурирате менијата на панелот +Comment[ms]=Anda boleh konfigur menu panel di sini +Comment[nb]=Her kan du sette opp hvordan panelmenyene skal se ut +Comment[nds]=Hier kannst Du de Menüs vun't Paneel instellen +Comment[ne]=तपाईँले यहाँ प्यानलको मेनु कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=U kunt hier de menu's van het paneel instellen +Comment[nn]=Her kan du setja opp menyane i panelet. +Comment[pa]=ਤੁਸੀਂ ਪੈਨਲ ਮੇਨੂ ਦੀ ਸੰਰਚਨਾ ਇੱਥੇ ਕਰ ਸਕਦੇ ਹੋ +Comment[pl]=Tutaj można skonfigurować menu panelu +Comment[pt]=Pode configurar os menus do painel aqui +Comment[pt_BR]=Você pode configurar os menus do painel aqui +Comment[ro]=Aici puteți configura meniurile panoului KDE +Comment[ru]=Настройка меню +Comment[rw]=Ushobora kugena ibikubiyemo by'umwanya hano +Comment[se]=Dáppe sáhtát heivehit panela fáluid +Comment[sk]=Tu môžte nastaviť menu panelu. +Comment[sl]=Tu lahko nastavite menije pulta +Comment[sr]=Овде можете подесити меније панела +Comment[sr@Latn]=Ovde možete podesiti menije panela +Comment[sv]=Du kan anpassa panelens menyer här +Comment[ta]=பலகத்தின் பட்டியல்களை இங்கே வடிவமைக்க முடியும் +Comment[tg]=Шумо метавонед менюҳои панел дар ин ҷо танзим кунед +Comment[th]=คุณสามารถปรับแต่งเมนูของถาดพาเนลได้ที่นี่ +Comment[tr]=Panelin menülerini buradan yapılandırabilirsiniz +Comment[tt]=Taqtanıñ saylaqların caylaw urını +Comment[uk]=Тут можна налаштувати різні меню панелі +Comment[uz]=Bu yerda panelning menyularini moslash mumkin +Comment[uz@cyrillic]=Бу ерда панелнинг менюларини мослаш мумкин +Comment[vi]=Bạn có thể cấu hình thực đơn của các bảng điều khiển ở đây +Comment[wa]=Vos ploz apontyî chal les dressêyes do scriftôr +Comment[zh_CN]=您可以在这里配置面板的菜单 +Comment[zh_TW]=您可以在此設定面板的選單 +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Размяшчэнне,Пазіцыя,Памер,Аўтаматычна хаваць,Хаваць,Кнопкі,Анімацыя,Фон,Тэмы,Кэш меню,Кэш,Схаваная,Схаваць,Меню KDE,Закладкі,Ранейшыя,Нядаўнія,Дакументы,Хуткі прагляд,Меню вандроўніка,Меню вандравання,Меню,Значкі,Аплеты,Запуск,Падсвятленне,Апрацоўка,Апрацоўшчык,Маштабаванне значак,kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[bg]=системен, панел, подредба, подравняване, kicker, panel, kpanel, taskbar, startbar, launchbar, location, size, auto hide, hide, buttons, animation, background, themes, menu cache, cache, hidden, K-Menu, bookmarks, recent documents, quickbrowser, browser menu, menu, icons, tiles, applets, startup, highlight, handles, zooming icons +Keywords[bs]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,veličina,automatsko sakrivanje,sakrivanje,dugmad,animacija,pozadina,teme,keš menija,meni,keš,skriven,zabilješke,skorašnji dokumenti,meni browsera,meni preglednika,ikone,appleti,pokretanje,uvećavanje +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra de llançament,localització,mida,auto oculta,oculta,botons,animació,temes,fons,cau del menú,cau,ocult,Menú K,punts,documents recents,navegació ràpida,menú de navegació,menú,icones,mosaics,aplets,arrencada,ressaltat,nanses,ampliar les icones +Keywords[cs]=kicker,panel,kpanel,pruh úloh,lišta úloh,umístění, velikost,skrývání,automatické skrývání,tlačítka,animace,pozadí, motivy,nabídka,menu,záložky,nedávné dokumenty,rychlé prohlížení, ikony,dlaždice,applety,spuštění,zvýraznění,úchytky,zvětšování ikon +Keywords[csb]=kicker,panel,kpanel,lëstëw zadaniów,sztartowô lëstëw,lëstëw zrëszaniô,pòłożenié,miara,aùtomatno tacënié,tacë,knąpë,animacëjô,spódk,spòdlé,témë,cache menu,cache,zatacony,K-Menu,załóżczi,slédny dokùmentë,chùtczé przezéranié,menu,ikònë,kafelkòwané,programiczi,zrëszanié,pòdskrzënianié,ùchwëtë,zwikszanié ikònów +Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,håndterer,ikoner +Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +Keywords[el]=kicker,πίνακας,kpanel,γραμμή εργασιών,γραμμή έναρξης,γραμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκρυψη,απόκρυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενού,λανθάνουσα μνήμη,κρυφό, K-Μενού,σελιδοδείκτες,πρόσφατα έγγραφα,γρήγορος εξερευνητής,μενού εξερευνητή,μενού,εικονίδια,tiles,μικροεφαρμογές,έναρξη,τονισμός,χειριστήρια, μεγέθυνση εικονιδίων +Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aŭtokaŝo,kaŝo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiarazte-barra,kokapena, neurria,auto ezkutatu,ezkutatu,botoiak,animazioa,atzeko planoa, gaiak,menu-katxea,katxea,ezkutatu,K-menua,laster-markak,oraintsuko dokumentuak, arakatzaile bizkorra,arakatzaile menua,menua,ikonoak,baldosak,appletak,abiatu,nabarmendu,heldulekuak,zooming icons +Keywords[fa]=kicker، تابلو، kpanel، میله‌ تکلیف، میله آغاز، میله راه‌انداز، محل، اندازه، مخفی کردن خودکار، مخفی کردن، دکمه‌ها، پویانمایی، زمینه، چهره‌ها، نهانگاه گزینگان، نهانگاه، مخفی، گزینگان K، چوب ‌الفها، سندهای اخیر، مرورگر سریع، گزینگان، مرورگر، شمایلها، کاشیها، برنامکها، راه‌اندازی، مشخص، گرداننده‌ها، بزرگ‌نمایی شمایلها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistyspalkki,paikka,koko,automaattipiilotus,piilotus,napit,animaatio,tausta,teemat,valikkovälimuisti,välimuisti,K-valikko,kirjanmerkit,viimeaikaiset asiakirjat,pikaselain,selausvalikko,valikko,kuvakkeet,sovelmat,käynnistys,korostus,kahvat,kuvakkeiden suurennus +Keywords[fr]=kicker,tableau de bord,barre du bas,barre des tâches,barre de démarrage,barre de lancement,emplacement,taille,auto-masquage,cacher,masquer,boutons,animation,fond,arrière-plan,thème,cache de menu,cache,caché,menu K,K,signets,documents récents,document récent,navigateur rapide,navigateur,menu,icône,mosaïque,applet,démarrage,surbrillance,poignée,poignées,zoom,zoom sur les icônes +Keywords[fy]=kicker,paniel,kpanel,taakbalke,takebalke,Startbalke,startmenu,applikaasje begjinner,lokaasje,ôfmjiting,terminaltapassing,auto hide,automatysk ferstopje,ferstopje,Ynklappe,knoppen,animaasje,eftergrûn,tema's,menu lyts ûnthâld,lyts ûnthâld,ferstoppe,K-Menu,bookmarks,blêdwizers,resinte dokuminten,quickbrowser,browser menu,menu,icons,ikoan,ikoanen,tegels,tiles,applets,begjinne,opljochtsje,handles,zoomen,knoppen,hanfetten,betroubere applets,feiligens nivo +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,barra de comezo,barra de lanzamento,localización,tamaño,auto agochamento,agochamento,botóns,animación,fondo,temas,cache de menú,caché,oculto,Menú K,marcadores,derradeiros documentos,navegador rápido,menú de navegación,menú,iconas,apliques,início,resaltado,xestión,aumento de iconas +Keywords[he]=kicker, לוח, kpanel, שורת משימות, שורת הרצה, מיקום, גודל, הסתרה אוטומטית, הסתר, אנימציה, רקע, ערכות, תפריט, מטמון, מוסתר, תפריט K, מועדפים, מסמכים אחרונים, דפדוף מהיר, תפריט, סימנים, סמלים, כותרות, יישומונים, אתחול, הדגשה, ידיות, הגדלת סמלים, taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, panel +Keywords[hi]=किकर,फलक,के-पेनल,कार्यपट्टी,प्रारंभपट्टी,चालकपट्टी,स्थान,आकार,स्वतः छुपें,छुपें,बटन्स,एनिमेशन,पृष्ठभूमि,प्रसंग,मेनू कैश,कैश,छुपा,के-मेन्यू,पसंद,हाल ही के दस्तावेज़,क्विक-ब्राउज़र,ब्राउज़र मेन्यू,मेन्यू,प्रतीक,टाइल्स,ऐप्लेट्स,स्टार्टअप,उभारना,हैंडल्स,जूमिंग प्रतीक +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,ploča,traka zadataka,traka pokretanja,lokacija,veličina,automatsko skrivanje,skrivanje,gumbi,animacija,pozadina,teme,pohrana izbornika,pohrana,skriven,oznake,nedavni dokumenti,brzi preglednik,izbornik preglednika,izbornik,ikone,popločeno,apleti,naglašavanje,rukovanje,uvećane ikone +Keywords[hu]=Kicker,panel,kpanel,feladatlista,start menü,indítómenü,indítósáv,hely,méret,automatikus elrejtés,elrejtés,gombok,animáció,háttér,témák,menügyorstár,gyorstár,rejtett,K menü,könyvjelzők,legutóbbi dokumentumok,gyorsböngésző,böngészőmenü,menü,ikonok,mozaikszerű,kisalkalmazások,indulás,kiemelés,fogantyúk,nagyítóikonok +Keywords[is]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,trusted applets,security level +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,taskbar,startbar,launchbar,barra di avvio,posizione,dimensione,scomparsa automatica,pulsanti,animazione,sfondo,temi,cache dei menu,nascosto,Menu K,segnalibri,documenti recenti,browser veloce,menu,icone,piastrelle,applet,avvio,evidenziazione,maniglie,ingrandimento icone +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,場所,サイズ,自動的に隠す,隠す,ボタン,アニメーション,背景,テーマ,メニューキャッシュ,キャッシュ,隠れた,Kメニュー,ブックマーク,最近のドキュメント,クイックブラウザ,ブラウザメニュー,メニュー,アイコン,タイル,アプレット,スタートアップ,ハイライト,ハンドル,アイコンのズーム +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,ទីតាំង,ទំហំ,លាក់​ស្វ័យប្រវត្តិ,លាក់,ប៊ូតុង,ចលនា,ផ្ទៃ​ខាង​ក្រោយ,ស្បែក,ឃ្លាំង​សម្ងាត់​ម៉ឺនុយ,ឃ្លាំង​សម្ងាត់,លាក់,ម៉ឺនុយ K,កន្លែង​ចំណាំ,ឯកសារ​ថ្មីៗ​នេះ,កម្មវិធី​រុករក​រហ័ស,ម៉ឺនុយ​កម្មវិធី​រុករក,ម៉ឺនុយ,រូបតំណាង,ក្បឿង,អាប់ភ្លេត,ចាប់ផ្ដើម,បន្លិច,ប្រើ,រូបតំណាង​ពង្រីក +Keywords[lt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,skydelis,kskydelis,užduočių juosta,paleidimo juosta,slėpti,mygtukai,animacija,fonas,temos,meniu atmintinė,atmintinė,paslėptas,žymelės,neseniai naudoti dokumentai,peržiūra,meniu,ženkliukai,perdengti,įskiepiai,paleistis,pažymėti,rankenėlės,išdidinti ženkliukus +Keywords[lv]=kicker,panelis,kpanel,uzdevumjosla,startbar,launchbar,location,size,izmērs,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,grāmatzīmes,recent documents,quickbrowser,browser menu,izvēlne,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,панел,лента со програми,локација,големина,авто криење,криење,копчиња,анимација,подлога,позадина,теми,кеш на менито,кеш,скриен,K-Мени,обележувачи, последни документи,брз прелистувач,мени за прелистувачи,мени,икони,плочки,аплети,рачки,зумирање на икони +Keywords[mt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,favoriti,pannell,post,daqs,lokazzjoni,ħabi,animazzjoni,buttuni +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,plassering,størrelse, autoskjul,skjul,knapper,animasjon,bakgrunn,temaer,mellomlager for temaer, mellomlager,skjult,K-meny,bokmerker,nylig brukte dokumenter,hurtigviser, katalogmeny,meny,ikoner,fliser,miniprogrammer,panelprogrammer,oppstart, uthev,håndtak,forstørring av ikoner +Keywords[nds]=Kicker,Paneel,kpanel,Taskbalken,Programmbalken,Startbalken,Adress,Grött,automaatsch versteken,versteken,Knööp,Knoop,Knööp,Animatschoon,Achtergrund,Muster,Menü-Twischenspieker,Twischenspieker,versteken,K-Menü,Leesteken,leste Dokmenten,Fixkieker,Nettkieker-Menü,Menü,Lüttbiller,Titel,Programmen,starten,markeren,handles,Grepen,Lüttbiller grötter maken +Keywords[ne]=किकर, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, स्थान, आकार, स्वत: लुकाउने, लुकाउनुहोस्, बटनहरू, एनिमेसन, पृष्ठभूमि, विषयवस्तुहरू, मेनु क्यास, क्यास, लुकेको, के-मेनु, पुस्तकचिनोहरू, हालको कागजातहरू, छिटो ब्राउजर, ब्राउजर मेनु, मेनु, प्रतिमा, टायलहरू, एप्लेटहरू, सुरु, हाइलाइट, ह्यान्डल गर्दछ, जुम प्रतिमा +Keywords[nl]=kicker,paneel,kpanel,taakbalk,takenbalk,startbalk,startmenu,applicatie starter,locatie,afmeting,terminaltoepassing,auto hide,automatisch verbergen,verbergen,invouwen,knoppen,animatie,achtergrond,thema's,menu cache,cache,verborgen,K-Menu,bookmarks,bladwijzers,recente documenten,quickbrowser,browser menu,menu,icons,icoon,iconen,pictogrammen,tegels,tiles,applets,opstarten,highlight,accentuering,handles,zoomen,knoppen,handvatten,betrouwbare applets,security level,beveiligingsniveau +Keywords[nn]=Kicker,panel,KPanel,oppgåvelinje,oppstartslinje,plassering,storleik,autogøym,gøym,knappar,animasjon,bakgrunn,tema,menymellomlager,mellomlager,gøymd,K-meny,bokmerke,nyleg bruka dokument,snøgglesar,katalogmeny,meny,ikon,brikker,applet,panelprogram,oppstart,merking,handtak,forstørring av ikon +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, ਪੈਨਲ, ਟਿਕਾਣਾ, ਬਰਾਊਜ਼ਰ, ਝਲਾਕਰਾ, ਕੈਂਚੇ, ਕੇ-ਮੇਨੂ, ਬੁੱਕਮਾਰਕ, ਤਾਜ਼ਾ, ਉਘੜੇ, ਹੈਂਡਲ, ਬਟਨ, ਸਰੂਪ, ਮੇਨੂ, ਓਹਲੇ, ਅਕਾਰ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,pasek uruchamiania,położenie,rozmiar,automatyczne ukrywanie,ukryj,przyciski,animacja,tło,motywy,bufor (cache) menu,bufor,cache,ukryty,K-Menu,zakładki,ostatnie dokumenty,szybkie przeglądanie,menu,ikony,kafelkowane,programiki,uruchomienie,podświetlanie,uchwyty,powiększanie ikon +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,localização,tamanho,auto-esconder,esconder,botões,animação,fundo,temas,'cache' de menu,'cache',escondido,menu K,favoritos,documentos recentes,navegador rápido,menu de navegação,menu,ícones,mosaicos,'applets',inicio,realce,pegas,ícones aumentados +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,lançar aplicativos,localização,tamanho,auto-ocultar,esconder,botões, animação,fundo,temas,cache de menu,cache,escondido,Menu K,favoritos,documentos recentes,navegador rápido, menu do navegador,menu,ícones,títulos,mini-aplicativos,iniciar,realçar, manipuladores, ícones de ampliação +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,lansare,mărime,locație,ascundere automată,butoane,animație,fundal,tematică,meniu K,semne de carte,documente recente,navigator rapid,meniu navigare,meniu,iconițe,mozaic,miniaplicații,evidențiere,scalare +Keywords[rw]=igitera,umwanya,k-umwanya,umurongogutangira,umurongogutangiza,indangahantu,ingano,kwihisha,guhisha,buto,iyega,mbuganyuma,insanganyamatsiko,ubwihisho bw'ibikubiyemo,ubwihisho,bihishe,K-Ibikubiyemo,utumenyetso,inyandiko zigezweho,mucukumbuzi yihuta,ibikubiyemo bya mucukumbuzi,ibikubiyemo,udushushondanga,udukaro,apuleti,gutangira,gushimangira,ibifashi,udushushondanga guhindura-ingano +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,báiki,sturrodat,autočiega,čiehkadit,boalut,animašuvdna,duogáš,fáddá,fálločiehkárájus,čiehkárájus,K-fállu,girjemearkkat,aiddo geavahuvvon dokumeantta,ohcofállu,fállu,govažat,prográmmažat,álggaheapmi,merken,geavjjat,luohttehahtti prográmmažat,sihkkarvuohtadássi +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,miesto,umiestnenie,veľkosť,terminálová aplikácia,skrývanie,automatické skrývanie,tlačidlá,animácia,pozadie,témy,cache,cache ponuky,skryté,K-Menu,záložky,posledné dokumenty,rýchly prehliadač,ponuka prehliadača,menu,ikony,applety,štart,zvýraznenie,handles,zväčšovanie ikon,overené applety,úroveň zabezpečenia +Keywords[sl]=kicker,pult,kpanel,opravilna vrstica,zagonska vrstica,mesto,lokacija,velikost,terminalski program,skrij,samodejno skrivanje,skrivanje,gumbi,animacija,ozadje,teme,menijski predpomnilnik,predpomnilnik,skrit,K-Menu,zaznamki,nedavni dokumenti,hitro brskanje,brskalni meni,meni,tlakovci,ikone,vstavki,zagon,osvetlitev,ročice,ikone za povečavo +Keywords[sr]=kicker,панел,kpanel,трака задатака,startbar,launchbar,локација,величина,Терминалски програм,аутоматско сакривање,сакривање,дугмићи,анимација,позадина,теме,мени кеш,кеш,скривен,K-Menu,маркери,скори документи,брзи прегледач,мени прегледача,мени,иконе,блокови,апплети,startup,истицање,хватаљке,увеличавање икона,аплети којима се верује,ниво безбедности +Keywords[sr@Latn]=kicker,panel,kpanel,traka zadataka,startbar,launchbar,lokacija,veličina,Terminalski program,automatsko sakrivanje,sakrivanje,dugmići,animacija,pozadina,teme,meni keš,keš,skriven,K-Menu,markeri,skori dokumenti,brzi pregledač,meni pregledača,meni,ikone,blokovi,appleti,startup,isticanje,hvataljke,uveličavanje ikona,apleti kojima se veruje,nivo bezbednosti +Keywords[sv]=kicker,panel,k-panel,aktivitetsfält,startfält,körningsfält,plats,storlek,dölj automatiskt,dölj,göm,knappar,animering,bakgrund,teman,menycache,cache,gömd,dold,K-meny,bokmärken,senaste dokument,snabbläddrare,bläddringsmeny,meny,ikoner,miniprogram,start,framhäv,grepp,zoomikoner +Keywords[ta]=கிக்கர், பானல், கேபானல்,துவக்கப்பட்டி, துவங்கும்பட்டி,இடம்,அளவு, சத்தம் மறை, மறை,பட்டன், உயிர்சித்திரம்,பின்னனி,கருப்பொருள், தற்காலிக மெனு, மறைந்த,கே-மெனு,புத்தககுறிகள், தற்போதைய ஆவணம். வேக உலாவி, உலாவி மெனு, மெனு, சின்னம், சிறுநிரல், துவக்கம், கையாள், பெரிதாக்கும் சின்னங்கள் +Keywords[th]=kicker,พาเนล,kpanel,taskbar,startbar,แถบเรียกโปรแกรม,ที่ตั้ง,ขนาด,ซ่อนอัตโนมัติ ,ซ่อน,ปุ่ม,อนิเมชั่น,พื้นหลัง,ชุดตกแต่ง,แคชของเมนู,แคช,ถูกซ่อน,K-Menu,ที่คั่นหน้า,เอกสารที่เพิ่งเปิดไป,quickbrowser,เมนูของบราวเซอร์,เมนู,ไอคอน,พื้นผิว,applets,startup,highlight,handles,ซูมไอคอน +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,başlat çubuğu,konum,boyut,Uç birim uygulaması,otomatik gizle,gizle,tuşlar,animasyon,artalan,temalar,menü ön belleği,ön bellek,gizli,K-Menu,yer imleri,en son kullanılan belgeler,hızlı gözatıcı,göz atıcı menüsü,menü,simgeler,karo,programcıklar,Başlangıç,belirt,tutamaçlar,büyüyen simgeler,güvenilen programcıklar,güvenlik düzeyi +Keywords[tt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser saylaq,saylaq,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[uk]=kicker,панель,смужка задач,kpanel,смужка запуску,розташування,розмір,консольна програма,автоматичне згортання,згортання,кнопки,анімація,тло,теми,кеш меню,кеш,схований,К-Меню,закладки,недавні документи,швидка навігація,меню навігатора,меню,піктограми,заголовки,аплети,запуск,підсвічування,маніпулятор,масштабування піктограм +Keywords[uz]=panel,vazifalar paneli,bekitish,avto-bekitish,tugmalar,animatsiya,orqa fon,mavzular,K-menyu,kesh,yashirilgan,xatchoʻplar,yaqinda ochilgan hujjatlar,tez koʻruvchi,brauzer menyusi,menyuning keshi,menyu,nishonchalar,appletlar,nishonchalarni kattalashtirish,oʻlcham,kicker,kpanel,startbar,launchbar,joylashishi,tiles,startup,highlight,handles +Keywords[uz@cyrillic]=панел,вазифалар панели,бекитиш,авто-бекитиш,тугмалар,анимация,орқа фон,мавзулар,К-меню,кэш,яширилган,хатчўплар,яқинда очилган ҳужжатлар,тез кўрувчи,браузер менюси,менюнинг кэши,меню,нишончалар,апплетлар,нишончаларни катталаштириш,ўлчам,kicker,kpanel,startbar,launchbar,жойлашиши,tiles,startup,highlight,handles +Keywords[vi]=kích hoạt,bảng điều khiển,kpanel,thanh tác vụ,thanh khởi động,thanh phóng,vị trí,kích cỡ,tự ẩn,ẩn,nút,hoạt hình,mảnh nền,sắc thái,thực đơn đệm,đệm,giấu,Thực đơn K,số lưu liên kết,tài liệu gần đây,duyệt nhanh,thực đơn duyệt,thực đơn,biểu tượng,tiêu đề,tiểu ứng dụng,khởi động,nổi bật,cầm nắm,biểu tượng phóng đại,ứng dụng đáng tin,mức độ an ninh +Keywords[wa]=kicker,panel,sicriftôr,scriftôr,kpanel,taskbar,bår des bouyes,startbar,launchbar,bår d' enondaedje,plaece,grandeu,catche tot seu,catchî,botons,animåvion,fond,tinmes,muchete menu,muchete,K-Menu,rimåkes,documints nén vî,betchteu rade,dresseŷe do betchteu,dressêye,menu,imådjetes,applets,apliketes,enonde tot seu,highlight,handles,zooming icons,zoumer les imådjetes +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons面板,任务栏,启动栏,位置,大小,自动隐藏,隐藏,按钮,动画,背景,主题,菜单缓存,缓存,书签,最近文档,快速浏览器,浏览器菜单,菜单,图标,平铺,启动,突出,句柄,缩放图标 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,面板,工作列,啟動列,快捷列,位置,大小,自動隱藏,隱藏,按鈕,動畫,背景,佈景主題,選單快取,快取,隱藏,K-選單,書籤,最近開啟的文件,快速瀏覽,瀏覽選單,選單,圖示,小圖塊,應用程式,啟動,高亮度,處理,縮放圖示 diff --git a/kcontrol/kicker/lookandfeelconfig.cpp b/kcontrol/kicker/lookandfeelconfig.cpp new file mode 100644 index 000000000..7f43f2c05 --- /dev/null +++ b/kcontrol/kicker/lookandfeelconfig.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include + +#include +#include + +#include "lookandfeeltab_impl.h" +#include "kickerSettings.h" +#include "main.h" + +#include "lookandfeelconfig.h" +#include "lookandfeelconfig.moc" + +LookAndFeelConfig::LookAndFeelConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + m_widget = new LookAndFeelTab(this); + layout->addWidget(m_widget); + layout->addStretch(); + + setQuickHelp(KickerConfig::the()->quickHelp()); + setAboutData(KickerConfig::the()->aboutData()); + + addConfig(KickerSettings::self(), m_widget); + + connect(m_widget, SIGNAL(changed()), + this, SLOT(changed())); + connect(KickerConfig::the(), SIGNAL(aboutToNotifyKicker()), + this, SLOT(aboutToNotifyKicker())); + + load(); + QTimer::singleShot(0, this, SLOT(notChanged())); +} + +void LookAndFeelConfig::notChanged() +{ + emit changed(false); +} + +void LookAndFeelConfig::load() +{ + KCModule::load(); + m_widget->load(); +} + +void LookAndFeelConfig::aboutToNotifyKicker() +{ + kdDebug() << "LookAndFeelConfig::aboutToNotifyKicker()" << endl; + + // This slot is triggered by the signal, + // which is send before Kicker is notified. + // See comment in save(). + KCModule::save(); + m_widget->save(); +} + +void LookAndFeelConfig::save() +{ + // As we don't want to notify Kicker multiple times + // we do not save the settings here. Instead the + // KickerConfig object sends a signal before the + // notification. On this signal all existing modules, + // including this object, save their settings. + KickerConfig::the()->notifyKicker(); +} + +void LookAndFeelConfig::defaults() +{ + KCModule::defaults(); + m_widget->defaults(); + + // KConfigDialogManager may queue an changed(false) signal, + // so we make sure, that the module is labeled as changed, + // while we manage some of the widgets ourselves + QTimer::singleShot(0, this, SLOT(changed())); +} diff --git a/kcontrol/kicker/lookandfeelconfig.h b/kcontrol/kicker/lookandfeelconfig.h new file mode 100644 index 000000000..93b331432 --- /dev/null +++ b/kcontrol/kicker/lookandfeelconfig.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __lookandfeelconfig_h__ +#define __lookandfeelconfig_h__ + +#include + +class LookAndFeelTab; + +class LookAndFeelConfig : public KCModule +{ + Q_OBJECT + +public: + LookAndFeelConfig(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + void defaults(); + +public slots: + void notChanged(); + void aboutToNotifyKicker(); + +private: + LookAndFeelTab *m_widget; +}; + +#endif // __lookandfeelconfig_h__ diff --git a/kcontrol/kicker/lookandfeeltab.ui b/kcontrol/kicker/lookandfeeltab.ui new file mode 100644 index 000000000..675f5adb0 --- /dev/null +++ b/kcontrol/kicker/lookandfeeltab.ui @@ -0,0 +1,635 @@ + +LookAndFeelTabBase + + + LookAndFeelTabBase + + + + 0 + 0 + 416 + 443 + + + + If this option is selected, informational tooltips will appear when the mouse cursor moves over the icons, buttons and applets in the panel. + + + + unnamed + + + 0 + + + + general_group + + + General + + + + unnamed + + + + kcfg_ShowMouseOverEffects + + + Enable icon &mouseover effects + + + When this option is selected a mouseover effect appears when the mouse cursor is moved over panel buttons + + + + + kcfg_ShowToolTips + + + Show too&ltips + + + When this option is selected informational tooltips will appear when the mouse cursor moves over the icons, buttons and applets in the panel. + + + + + + + GroupBox9 + + + Button Backgrounds + + + + unnamed + + + + TextLabel1 + + + &K menu: + + + m_kmenuTile + + + Choose a tile image for the K menu. + + + + + TextLabel2 + + + &QuickBrowser menus: + + + m_browserTile + + + Choose a tile image for Quick Browser buttons. + + + + + + Default + + + + + Custom Color + + + + m_browserTile + + + + 3 + 1 + 0 + 0 + + + + NoInsertion + + + Choose a tile image for Quick Browser buttons. + + + + + + Default + + + + + Custom Color + + + + m_kmenuTile + + + + 3 + 1 + 0 + 0 + + + + NoInsertion + + + Choose a tile image for the K menu. + + + + + kcfg_BrowserTileColor + + + + + + When the Custom Color option is selected, use this button to pick a color for quick browser tile backgrounds + + + + + kcfg_KMenuTileColor + + + + + + When the Custom Color option is selected, use this button to pick a color for the K menu tile background + + + + + + Default + + + + + Custom Color + + + + m_windowListTile + + + + 3 + 1 + 0 + 0 + + + + NoInsertion + + + Choose a tile image for window list buttons. + + + + + kcfg_WindowListTileColor + + + + + + When the Custom Color option is selected, use this button to pick a color for window list tile backgrounds + + + + + TextLabel5 + + + &Window list: + + + m_windowListTile + + + Choose a tile image for window list buttons. + + + + + + Default + + + + + Custom Color + + + + m_desktopTile + + + + 3 + 1 + 0 + 0 + + + + NoInsertion + + + Choose a tile image for desktop access buttons. + + + + + kcfg_DesktopButtonTileColor + + + + + + When the Custom Color option is selected, use this button to pick a color for the desktop tile background + + + + + TextLabel6 + + + De&sktop access: + + + m_desktopTile + + + Choose a tile image for desktop access buttons. + + + + + kcfg_URLTileColor + + + + + + When the Custom Color option is selected, use this button to pick a color for application tile backgrounds + + + + + TextLabel3 + + + Applicatio&ns: + + + m_urlTile + + + Choose a tile image for buttons that launch applications. + + + + + + Default + + + + + Custom Color + + + + m_urlTile + + + + 3 + 1 + 0 + 0 + + + + NoInsertion + + + Choose a tile image for buttons that launch applications. + + + + + Spacer48 + + + Horizontal + + + Expanding + + + + 66 + 130 + + + + + + + + buttonGroup1 + + + Panel Background + + + + unnamed + + + + spacer5 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + kcfg_ColorizeBackground + + + false + + + Colorize to &match the desktop color scheme + + + true + + + If this option is selected, the panel background image will be colored to match the default colors. To change the default colors, go to the 'Colors' control module. + + + + + m_backgroundLabel + + + false + + + + 0 + 0 + 0 + 0 + + + + + 50 + 50 + + + + + 50 + 50 + + + + Panel + + + Sunken + + + true + + + AlignCenter + + + + + + + This is a preview for the selected background image. + + + + + kcfg_BackgroundTheme + + + false + + + + 5 + 5 + 1 + 0 + + + + Here you can choose a theme to be displayed by the panel. Press the 'Browse' button to choose a theme using the file dialog. +This option is only active if 'Enable background image' is selected. + + + + + kcfg_UseBackgroundTheme + + + Enable &background image + + + + + kcfg_Transparent + + + Enable &transparency + + + + + + + layout3 + + + + unnamed + + + + advancedOptionsButton + + + Advanc&ed Options + + + Click here to open the Advanced Options dialog. You can configure the applet handles look and feel, the tint transparency color and more. + + + + + Spacer4 + + + Horizontal + + + Expanding + + + + 289 + 20 + + + + + + + + spacer4 + + + Vertical + + + Expanding + + + + 20 + 0 + + + + + + + + kcfg_BackgroundTheme + urlSelected(const QString&) + LookAndFeelTabBase + browseTheme(const QString&) + + + advancedOptionsButton + clicked() + LookAndFeelTabBase + launchAdvancedDialog() + + + kcfg_BackgroundTheme + returnPressed(const QString&) + LookAndFeelTabBase + browseTheme(const QString&) + + + kcfg_Transparent + toggled(bool) + LookAndFeelTabBase + enableTransparency(bool) + + + kcfg_UseBackgroundTheme + toggled(bool) + m_backgroundLabel + setEnabled(bool) + + + kcfg_UseBackgroundTheme + toggled(bool) + kcfg_ColorizeBackground + setEnabled(bool) + + + kcfg_UseBackgroundTheme + toggled(bool) + kcfg_BackgroundTheme + setEnabled(bool) + + + + kcfg_ShowMouseOverEffects + kcfg_ShowToolTips + m_kmenuTile + kcfg_KMenuTileColor + m_urlTile + kcfg_URLTileColor + m_desktopTile + kcfg_DesktopButtonTileColor + m_browserTile + kcfg_BrowserTileColor + m_windowListTile + kcfg_WindowListTileColor + kcfg_BackgroundTheme + kcfg_ColorizeBackground + advancedOptionsButton + + + kcombobox.h + kurlrequester.h + kdialog.h + + + launchAdvancedDialog() + browseTheme(const QString&) + enableTransparency(bool) + + + + + kcombobox.h + kcombobox.h + kcolorbutton.h + kcolorbutton.h + kcombobox.h + kcolorbutton.h + kcombobox.h + kcolorbutton.h + kcolorbutton.h + kcombobox.h + kurlrequester.h + klineedit.h + kpushbutton.h + + diff --git a/kcontrol/kicker/lookandfeeltab_impl.cpp b/kcontrol/kicker/lookandfeeltab_impl.cpp new file mode 100644 index 000000000..ad1c6a8d8 --- /dev/null +++ b/kcontrol/kicker/lookandfeeltab_impl.cpp @@ -0,0 +1,384 @@ +/* + * lookandfeeltab.cpp + * + * Copyright (c) 2000 Matthias Elter + * Copyright (c) 2000 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "advancedDialog.h" +#include "global.h" +#include "main.h" + +#include "lookandfeeltab_impl.h" +#include "lookandfeeltab_impl.moc" + +#include +using namespace std; + +LookAndFeelTab::LookAndFeelTab( QWidget *parent, const char* name ) + : LookAndFeelTabBase(parent, name), + m_advDialog(0) +{ + connect(m_kmenuTile, SIGNAL(activated(int)), SIGNAL(changed())); + connect(m_desktopTile, SIGNAL(activated(int)), SIGNAL(changed())); + connect(m_browserTile, SIGNAL(activated(int)), SIGNAL(changed())); + connect(m_urlTile, SIGNAL(activated(int)), SIGNAL(changed())); + connect(m_windowListTile, SIGNAL(activated(int)), SIGNAL(changed())); + + connect(m_kmenuTile, SIGNAL(activated(int)), SLOT(kmenuTileChanged(int))); + connect(m_desktopTile, SIGNAL(activated(int)), SLOT(desktopTileChanged(int))); + connect(m_browserTile, SIGNAL(activated(int)), SLOT(browserTileChanged(int))); + connect(m_urlTile, SIGNAL(activated(int)), SLOT(urlTileChanged(int))); + connect(m_windowListTile, SIGNAL(activated(int)), SLOT(wlTileChanged(int))); + + connect(kcfg_ColorizeBackground, SIGNAL(toggled(bool)), SLOT(browseTheme())); + + connect(kcfg_BackgroundTheme->lineEdit(), SIGNAL(lostFocus()), SLOT(browseTheme())); + kcfg_BackgroundTheme->setFilter(KImageIO::pattern(KImageIO::Reading)); + kcfg_BackgroundTheme->setCaption(i18n("Select Image File")); + + fillTileCombos(); +} + +void LookAndFeelTab::browseTheme() +{ + browseTheme(kcfg_BackgroundTheme->url()); +} + +void LookAndFeelTab::browseTheme(const QString& newtheme) +{ + if (newtheme.isEmpty()) + { + kcfg_BackgroundTheme->clear(); + m_backgroundLabel->setPixmap(QPixmap()); + emit changed(); + return; + } + + previewBackground(newtheme, true); +} + +void LookAndFeelTab::launchAdvancedDialog() +{ + if (!m_advDialog) + { + m_advDialog = new advancedDialog(this, "advancedDialog"); + connect(m_advDialog, SIGNAL(finished()), this, SLOT(finishAdvancedDialog())); + m_advDialog->show(); + } + m_advDialog->setActiveWindow(); +} + +void LookAndFeelTab::finishAdvancedDialog() +{ + m_advDialog->delayedDestruct(); + m_advDialog = 0; +} + +void LookAndFeelTab::enableTransparency(bool useTransparency) +{ + bool useBgTheme = kcfg_UseBackgroundTheme->isChecked(); + + kcfg_UseBackgroundTheme->setDisabled(useTransparency); + kcfg_BackgroundTheme->setDisabled(useTransparency || !useBgTheme); + m_backgroundLabel->setDisabled(useTransparency || !useBgTheme); + kcfg_ColorizeBackground->setDisabled(useTransparency || !useBgTheme); +} + +void LookAndFeelTab::previewBackground(const QString& themepath, bool isNew) +{ + QString theme = themepath; + if (theme[0] != '/') + theme = locate("data", "kicker/" + theme); + + QImage tmpImg(theme); + if(!tmpImg.isNull()) + { + tmpImg = tmpImg.smoothScale(m_backgroundLabel->contentsRect().width(), + m_backgroundLabel->contentsRect().height()); + if (kcfg_ColorizeBackground->isChecked()) + KickerLib::colorize(tmpImg); + theme_preview.convertFromImage(tmpImg); + if(!theme_preview.isNull()) { + // avoid getting changed(true) from KConfigDialogManager for the default value + if( KickerSettings::backgroundTheme() == themepath ) + KickerSettings::setBackgroundTheme( theme ); + kcfg_BackgroundTheme->lineEdit()->setText(theme); + m_backgroundLabel->setPixmap(theme_preview); + if (isNew) + emit changed(); + return; + } + } + + KMessageBox::error(this, + i18n("Error loading theme image file.\n\n%1\n%2") + .arg(theme, themepath)); + kcfg_BackgroundTheme->clear(); + m_backgroundLabel->setPixmap(QPixmap()); +} + +void LookAndFeelTab::load() +{ + load( false ); +} + +void LookAndFeelTab::load(bool useDefaults) +{ + KConfig config(KickerConfig::the()->configName(), false, false); + + config.setReadDefaults( useDefaults ); + + config.setGroup("General"); + + bool use_theme = kcfg_UseBackgroundTheme->isChecked(); + QString theme = kcfg_BackgroundTheme->lineEdit()->text().stripWhiteSpace(); + + bool transparent = kcfg_Transparent->isChecked(); + + kcfg_BackgroundTheme->setEnabled(use_theme); + m_backgroundLabel->setEnabled(use_theme); + kcfg_ColorizeBackground->setEnabled(use_theme); + m_backgroundLabel->clear(); + if (theme.length() > 0) + { + previewBackground(theme, false); + } + + QString tile; + config.setGroup("buttons"); + + kmenuTileChanged(m_kmenuTile->currentItem()); + desktopTileChanged(m_desktopTile->currentItem()); + urlTileChanged(m_urlTile->currentItem()); + browserTileChanged(m_browserTile->currentItem()); + wlTileChanged(m_windowListTile->currentItem()); + + if (config.readBoolEntry("EnableTileBackground", false)) + { + config.setGroup("button_tiles"); + + if (config.readBoolEntry("EnableKMenuTiles", false)) + { + tile = config.readEntry("KMenuTile", "solid_blue"); + m_kmenuTile->setCurrentItem(m_tilename.findIndex(tile)); + kcfg_KMenuTileColor->setEnabled(tile == "Colorize"); + } + + if (config.readBoolEntry("EnableDesktopButtonTiles", false)) + { + tile = config.readEntry("DesktopButtonTile", "solid_orange"); + m_desktopTile->setCurrentItem(m_tilename.findIndex(tile)); + kcfg_DesktopButtonTileColor->setEnabled(tile == "Colorize"); + } + + if (config.readBoolEntry("EnableURLTiles", false)) + { + tile = config.readEntry("URLTile", "solid_gray"); + m_urlTile->setCurrentItem(m_tilename.findIndex(tile)); + kcfg_URLTileColor->setEnabled(tile == "Colorize"); + } + + if (config.readBoolEntry("EnableBrowserTiles", false)) + { + tile = config.readEntry("BrowserTile", "solid_green"); + m_browserTile->setCurrentItem(m_tilename.findIndex(tile)); + kcfg_BrowserTileColor->setEnabled(tile == "Colorize"); + } + + if (config.readBoolEntry("EnableWindowListTiles", false)) + { + tile = config.readEntry("WindowListTile", "solid_green"); + m_windowListTile->setCurrentItem(m_tilename.findIndex(tile)); + kcfg_WindowListTileColor->setEnabled(tile == "Colorize"); + } + } + enableTransparency( transparent ); +} + +void LookAndFeelTab::save() +{ + KConfig config(KickerConfig::the()->configName(), false, false); + + config.setGroup("General"); + + config.setGroup("button_tiles"); + bool enableTiles = false; + int tile = m_kmenuTile->currentItem(); + if (tile > 0) + { + enableTiles = true; + config.writeEntry("EnableKMenuTiles", true); + config.writeEntry("KMenuTile", m_tilename[m_kmenuTile->currentItem()]); + } + else + { + config.writeEntry("EnableKMenuTiles", false); + } + + tile = m_desktopTile->currentItem(); + if (tile > 0) + { + enableTiles = true; + config.writeEntry("EnableDesktopButtonTiles", true); + config.writeEntry("DesktopButtonTile", m_tilename[m_desktopTile->currentItem()]); + } + else + { + config.writeEntry("EnableDesktopButtonTiles", false); + } + + tile = m_urlTile->currentItem(); + if (tile > 0) + { + enableTiles = true; + config.writeEntry("EnableURLTiles", tile > 0); + config.writeEntry("URLTile", m_tilename[m_urlTile->currentItem()]); + } + else + { + config.writeEntry("EnableURLTiles", false); + } + + tile = m_browserTile->currentItem(); + if (tile > 0) + { + enableTiles = true; + config.writeEntry("EnableBrowserTiles", tile > 0); + config.writeEntry("BrowserTile", m_tilename[m_browserTile->currentItem()]); + } + else + { + config.writeEntry("EnableBrowserTiles", false); + } + + tile = m_windowListTile->currentItem(); + if (tile > 0) + { + enableTiles = true; + config.writeEntry("EnableWindowListTiles", tile > 0); + config.writeEntry("WindowListTile", m_tilename[m_windowListTile->currentItem()]); + } + else + { + config.writeEntry("EnableWindowListTiles", false); + } + + config.setGroup("buttons"); + config.writeEntry("EnableTileBackground", enableTiles); + + config.sync(); +} + +void LookAndFeelTab::defaults() +{ + load( true ); +} + +void LookAndFeelTab::fillTileCombos() +{ +/* m_kmenuTile->clear(); + m_kmenuTile->insertItem(i18n("Default")); + m_desktopTile->clear(); + m_desktopTile->insertItem(i18n("Default")); + m_urlTile->clear(); + m_urlTile->insertItem(i18n("Default")); + m_browserTile->clear(); + m_browserTile->insertItem(i18n("Default")); + m_windowListTile->clear(); + m_windowListTile->insertItem(i18n("Default"));*/ + m_tilename.clear(); + m_tilename << "" << "Colorize"; + + QStringList list = KGlobal::dirs()->findAllResources("tiles","*_tiny_up.png"); + int minHeight = 0; + + for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) + { + QString tile = (*it); + QPixmap pix(tile); + QFileInfo fi(tile); + tile = fi.fileName(); + tile.truncate(tile.find("_tiny_up.png")); + m_tilename << tile; + + // Transform tile to words with title case + // The same is done when generating messages for translation + QStringList words = QStringList::split(QRegExp("[_ ]"), tile); + for (QStringList::iterator w = words.begin(); w != words.end(); ++w) + (*w)[0] = (*w)[0].upper(); + tile = i18n(words.join(" ").utf8()); + + m_kmenuTile->insertItem(pix, tile); + m_desktopTile->insertItem(pix, tile); + m_urlTile->insertItem(pix, tile); + m_browserTile->insertItem(pix, tile); + m_windowListTile->insertItem(pix, tile); + + if (pix.height() > minHeight) + { + minHeight = pix.height(); + } + } + + minHeight += 6; + m_kmenuTile->setMinimumHeight(minHeight); + m_desktopTile->setMinimumHeight(minHeight); + m_urlTile->setMinimumHeight(minHeight); + m_browserTile->setMinimumHeight(minHeight); + m_windowListTile->setMinimumHeight(minHeight); +} + +void LookAndFeelTab::kmenuTileChanged(int i) +{ + kcfg_KMenuTileColor->setEnabled(i == 1); +} + +void LookAndFeelTab::desktopTileChanged(int i) +{ + kcfg_DesktopButtonTileColor->setEnabled(i == 1); +} + +void LookAndFeelTab::browserTileChanged(int i) +{ + kcfg_BrowserTileColor->setEnabled(i == 1); +} + +void LookAndFeelTab::urlTileChanged(int i) +{ + kcfg_URLTileColor->setEnabled(i == 1); +} + +void LookAndFeelTab::wlTileChanged(int i) +{ + kcfg_WindowListTileColor->setEnabled(i == 1); +} diff --git a/kcontrol/kicker/lookandfeeltab_impl.h b/kcontrol/kicker/lookandfeeltab_impl.h new file mode 100644 index 000000000..54ef5b00d --- /dev/null +++ b/kcontrol/kicker/lookandfeeltab_impl.h @@ -0,0 +1,70 @@ +/* + * lookandfeeltab.h + * + * Copyright (c) 2000 Matthias Elter + * Copyright (c) 2000 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + + +#ifndef __lookandfeeltab_h__ +#define __lookandfeeltab_h__ + +#include "lookandfeeltab.h" + +class advancedDialog; + +class LookAndFeelTab : public LookAndFeelTabBase +{ + Q_OBJECT + +public: + LookAndFeelTab(QWidget *parent = 0, const char* name = 0); + + void load(); + void load(bool useDefaults); + void save(); + void defaults(); + + QString quickHelp() const; + +signals: + void changed(); + +protected: + void fillTileCombos(); + void previewBackground(const QString& themepath, bool isNew); + +protected slots: + void browseTheme(); + void browseTheme(const QString&); + void enableTransparency( bool ); + + void launchAdvancedDialog(); + void finishAdvancedDialog(); + + void kmenuTileChanged(int i); + void desktopTileChanged(int i); + void browserTileChanged(int i); + void urlTileChanged(int i); + void wlTileChanged(int i); + +private: + QPixmap theme_preview; + QStringList m_tilename; + advancedDialog *m_advDialog; +}; + +#endif diff --git a/kcontrol/kicker/lookandfeeltab_kcm.cpp b/kcontrol/kicker/lookandfeeltab_kcm.cpp new file mode 100644 index 000000000..50be83e89 --- /dev/null +++ b/kcontrol/kicker/lookandfeeltab_kcm.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2002 Stephan Binner + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include + + +#include + +#include "main.h" +#include "lookandfeeltab_kcm.moc" +#include "lookandfeeltab_impl.h" + +#include +#include +#include + +LookAndFeelConfig::LookAndFeelConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmkicker"), I18N_NOOP("KDE Panel Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1999 - 2001 Matthias Elter\n(c) 2002 Aaron J. Seigo")); + + about->addAuthor("Matthias Elter", 0, "elter@kde.org"); + about->addAuthor("Aaron J. Seigo", 0, "aseigo@olympusproject.org"); + setAboutData( about ); + + KickerConfig::initScreenNumber(); + QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + lookandfeeltab = new LookAndFeelTab(this); + layout->addWidget(lookandfeeltab); + layout->addStretch(); + + connect(lookandfeeltab, SIGNAL(changed()), SLOT(configChanged())); + + load(); +} + +void LookAndFeelConfig::configChanged() +{ + emit changed(true); +} + +void LookAndFeelConfig::load() +{ + lookandfeeltab->load(); + emit changed(false); +} + +void LookAndFeelConfig::save() +{ + lookandfeeltab->save(); + + emit changed(false); + + // Tell kicker about the new config file. + KickerConfig::notifyKicker(); +} + +void LookAndFeelConfig::defaults() +{ + lookandfeeltab->defaults(); + + emit changed(true); +} + +QString LookAndFeelConfig::quickHelp() const +{ + return i18n("

    Panel

    Here you can configure the KDE panel (also" + " referred to as 'kicker'). This includes options like the position and" + " size of the panel, as well as its hiding behavior and its looks.

    " + " Note that you can also access some of these options directly by clicking" + " on the panel, e.g. dragging it with the left mouse button or using the" + " context menu on right mouse button click. This context menu also offers you" + " manipulation of the panel's buttons and applets."); +} + diff --git a/kcontrol/kicker/lookandfeeltab_kcm.h b/kcontrol/kicker/lookandfeeltab_kcm.h new file mode 100644 index 000000000..356becf5e --- /dev/null +++ b/kcontrol/kicker/lookandfeeltab_kcm.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2002 Stephan Binner + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __lookandfeelconfig_h__ +#define __lookandfeelconfig_h__ + +#include + +class LookAndFeelTab; + +class LookAndFeelConfig : public KCModule +{ + Q_OBJECT + +public: + LookAndFeelConfig(QWidget *parent = 0L, const char *name = 0L); + + void load(); + void save(); + void defaults(); + QString quickHelp() const; + +public slots: + void configChanged(); + +private: + LookAndFeelTab *lookandfeeltab; +}; + +#endif // __lookandfeelconfig_h__ diff --git a/kcontrol/kicker/main.cpp b/kcontrol/kicker/main.cpp new file mode 100644 index 000000000..4ef0f842f --- /dev/null +++ b/kcontrol/kicker/main.cpp @@ -0,0 +1,398 @@ +/* + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hidingconfig.h" +#include "kickerSettings.h" +#include "lookandfeelconfig.h" +#include "menuconfig.h" +#include "positionconfig.h" + +#include "main.h" +#include "main.moc" + +#include + +KickerConfig *KickerConfig::m_self = 0; +static KStaticDeleter staticKickerConfigDeleter; + +KickerConfig *KickerConfig::the() +{ + if (!m_self) + { + staticKickerConfigDeleter.setObject(m_self, new KickerConfig()); + } + return m_self; +} + +KickerConfig::KickerConfig(QWidget *parent, const char *name) + : QObject(parent, name), + DCOPObject("KickerConfig"), + configFileWatch(new KDirWatch(this)), + m_currentPanelIndex(0) +{ + m_screenNumber = qt_xdisplay() ? DefaultScreen(qt_xdisplay()) : 0; + + KickerSettings::instance(configName().latin1()); + + init(); + + kapp->dcopClient()->setNotifications(true); + connectDCOPSignal("kicker", "kicker", "configSwitchToPanel(QString)", + "jumpToPanel(QString)", false); + kapp->dcopClient()->send("kicker", "kicker", "configLaunched()", QByteArray()); + + connect(this, SIGNAL(hidingPanelChanged(int)), + this, SLOT(setCurrentPanelIndex(int))); + connect(this, SIGNAL(positionPanelChanged(int)), + this, SLOT(setCurrentPanelIndex(int))); +} + +KickerConfig::~KickerConfig() +{ + // QValueList::setAutoDelete where for art thou? + ExtensionInfoList::iterator it = m_extensionInfo.begin(); + while (it != m_extensionInfo.end()) + { + ExtensionInfo* info = *it; + it = m_extensionInfo.erase(it); + delete info; + } +} + +// TODO: This is not true anymore: +// this method may get called multiple times during the life of the control panel! +void KickerConfig::init() +{ + disconnect(configFileWatch, SIGNAL(dirty(const QString&)), this, SLOT(configChanged(const QString&))); + configFileWatch->stopScan(); + for (ExtensionInfoList::iterator it = m_extensionInfo.begin(); + it != m_extensionInfo.end(); + ++it) + { + configFileWatch->removeFile((*it)->_configPath); + } + + QString configname = configName(); + QString configpath = KGlobal::dirs()->findResource("config", configname); + if (configpath.isEmpty()) + configpath = locateLocal("config", configname); + KSharedConfig::Ptr config = KSharedConfig::openConfig(configname); + + if (m_extensionInfo.isEmpty()) + { + // our list is empty, so add the main kicker config + m_extensionInfo.append(new ExtensionInfo(QString::null, configname, configpath)); + configFileWatch->addFile(configpath); + } + else + { + // this isn't our first trip through here, which means we are reloading + // so reload the kicker config (first we have to find it ;) + ExtensionInfoList::iterator it = m_extensionInfo.begin(); + for (; it != m_extensionInfo.end(); ++it) + { + if (configpath == (*it)->_configPath) + { + (*it)->load(); + break; + } + } + } + + setupExtensionInfo(*config, true, true); + + connect(configFileWatch, SIGNAL(dirty(const QString&)), this, SLOT(configChanged(const QString&))); + configFileWatch->startScan(); +} + +void KickerConfig::notifyKicker() +{ + kdDebug() << "KickerConfig::notifyKicker()" << endl; + + emit aboutToNotifyKicker(); + + // Tell kicker about the new config file. + if (!kapp->dcopClient()->isAttached()) + { + kapp->dcopClient()->attach(); + } + + QByteArray data; + QCString appname; + + if (m_screenNumber == 0) + { + appname = "kicker"; + } + else + { + appname.sprintf("kicker-screen-%d", m_screenNumber); + } + + kapp->dcopClient()->send(appname, appname, "configure()", data); +} + +void KickerConfig::setupExtensionInfo(KConfig& config, bool checkExists, bool reloadIfExists) +{ + config.setGroup("General"); + QStringList elist = config.readListEntry("Extensions2"); + + // all of our existing extensions + // we'll remove ones we find which are still there the oldExtensions, and delete + // all the extensions that remain (e.g. are no longer active) + ExtensionInfoList oldExtensions(m_extensionInfo); + + for (QStringList::Iterator it = elist.begin(); it != elist.end(); ++it) + { + // extension id + QString group(*it); + + // is there a config group for this extension? + if (!config.hasGroup(group) || group.contains("Extension") < 1) + { + continue; + } + + // set config group + config.setGroup(group); + + QString df = KGlobal::dirs()->findResource("extensions", config.readEntry("DesktopFile")); + QString configname = config.readEntry("ConfigFile"); + QString configpath = KGlobal::dirs()->findResource("config", configname); + + if (checkExists) + { + ExtensionInfoList::iterator extIt = m_extensionInfo.begin(); + for (; extIt != m_extensionInfo.end(); ++extIt) + { + if (configpath == (*extIt)->_configPath) + { + // we have found it in the config file and it exists + // so remove it from our list of existing extensions + oldExtensions.remove(*extIt); + if (reloadIfExists) + { + (*extIt)->load(); + } + break; + } + } + + if (extIt != m_extensionInfo.end()) + { + continue; + } + } + + configFileWatch->addFile(configpath); + ExtensionInfo* info = new ExtensionInfo(df, configname, configpath); + m_extensionInfo.append(info); + emit extensionAdded(info); + } + + if (checkExists) + { + // now remove all the left overs that weren't in the file + ExtensionInfoList::iterator extIt = oldExtensions.begin(); + for (; extIt != oldExtensions.end(); ++extIt) + { + // don't remove the kickerrc! + if (!(*extIt)->_configPath.endsWith(configName())) + { + emit extensionRemoved(*extIt); + m_extensionInfo.remove(*extIt); + } + } + } +} + +void KickerConfig::configChanged(const QString& configPath) +{ + if (configPath.endsWith(configName())) + { + KSharedConfig::Ptr config = KSharedConfig::openConfig(configName()); + config->reparseConfiguration(); + setupExtensionInfo(*config, true); + } + + // find the extension and change it + for (ExtensionInfoList::iterator it = m_extensionInfo.begin(); it != m_extensionInfo.end(); ++it) + { + if (configPath == (*it)->_configPath) + { + emit extensionAboutToChange(configPath); + (*it)->configChanged(); + break; + } + } + + emit extensionChanged(configPath); +} + +void KickerConfig::populateExtensionInfoList(QComboBox* list) +{ + list->clear(); + for (ExtensionInfoList::iterator it = m_extensionInfo.begin(); it != m_extensionInfo.end(); ++it) + { + list->insertItem((*it)->_name); + } +} + +const ExtensionInfoList& KickerConfig::extensionsInfo() +{ + return m_extensionInfo; +} + +void KickerConfig::reloadExtensionInfo() +{ + for (ExtensionInfoList::iterator it = m_extensionInfo.begin(); it != m_extensionInfo.end(); ++it) + { + (*it)->load(); + } + + emit extensionInfoChanged(); +} + +void KickerConfig::saveExtentionInfo() +{ + for (ExtensionInfoList::iterator it = m_extensionInfo.begin(); it != m_extensionInfo.end(); ++it) + { + (*it)->save(); + } +} + +void KickerConfig::jumpToPanel(const QString& panelConfig) +{ + ExtensionInfoList::iterator it = m_extensionInfo.begin(); + int index = 0; + for (; it != m_extensionInfo.end(); ++it, ++index) + { + if ((*it)->_configFile == panelConfig) + { + break; + } + } + + if (it == m_extensionInfo.end()) + { + return; + } + + kdDebug() << "KickerConfig::jumpToPanel: index=" << index << endl; + + emit hidingPanelChanged(index); + emit positionPanelChanged(index); +} + +QString KickerConfig::configName() +{ + if (m_screenNumber == 0) + { + return "kickerrc"; + } + else + { + return QString("kicker-screen-%1rc").arg(m_screenNumber); + } +} + +void KickerConfig::setCurrentPanelIndex(int index) +{ + m_currentPanelIndex = index; +} + +QString KickerConfig::quickHelp() const +{ + return i18n("

    Panel

    Here you can configure the KDE panel (also" + " referred to as 'kicker'). This includes options like the position and" + " size of the panel, as well as its hiding behavior and its looks.

    " + " Note that you can also access some of these options directly by clicking" + " on the panel, e.g. dragging it with the left mouse button or using the" + " context menu on right mouse button click. This context menu also offers you" + " manipulation of the panel's buttons and applets."); +} + +KAboutData *KickerConfig::aboutData() +{ + // the KAboutDatas are deleted by the KCModules + KAboutData *about + = new KAboutData(I18N_NOOP("kcmkicker"), + I18N_NOOP("KDE Panel Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1999 - 2001 Matthias Elter\n" + "(c) 2002 - 2003 Aaron J. Seigo")); + + about->addAuthor("Aaron J. Seigo", 0, "aseigo@kde.org"); + about->addAuthor("Matthias Elter", 0, "elter@kde.org"); + + return about; +} + +extern "C" +{ + KDE_EXPORT KCModule *create_kicker(QWidget *parent, const char *name) + { + KCModuleContainer *container = new KCModuleContainer(parent, "kcmkicker"); + container->addModule("kicker_config_arrangement"); + container->addModule("kicker_config_hiding"); + container->addModule("kicker_config_menus"); + container->addModule("kicker_config_appearance"); + return container; + } + + KDE_EXPORT KCModule *create_kicker_arrangement(QWidget *parent, const char * /*name*/) + { + KGlobal::dirs()->addResourceType("extensions", KStandardDirs::kde_default("data") + + "kicker/extensions"); + return new PositionConfig(parent, "kcmkicker"); + } + + KDE_EXPORT KCModule *create_kicker_hiding(QWidget *parent, const char * /*name*/) + { + KGlobal::dirs()->addResourceType("extensions", KStandardDirs::kde_default("data") + + "kicker/extensions"); + return new HidingConfig(parent, "kcmkicker"); + } + + KDE_EXPORT KCModule *create_kicker_menus(QWidget *parent, const char * /*name*/) + { + return new MenuConfig(parent, "kcmkicker"); + } + + KDE_EXPORT KCModule *create_kicker_appearance(QWidget *parent, const char * /*name*/) + { + KImageIO::registerFormats(); + KGlobal::dirs()->addResourceType("tiles", KStandardDirs::kde_default("data") + + "kicker/tiles"); + KGlobal::dirs()->addResourceType("hb_pics", KStandardDirs::kde_default("data") + + "kcmkicker/pics"); + return new LookAndFeelConfig(parent, "kcmkicker"); + } +} diff --git a/kcontrol/kicker/main.h b/kcontrol/kicker/main.h new file mode 100644 index 000000000..cb585b077 --- /dev/null +++ b/kcontrol/kicker/main.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __main_h__ +#define __main_h__ + +#include +#include + +#include "extensionInfo.h" + +class QComboBox; +class KAboutData; +class KDirWatch; + +class KickerConfig : public QObject, public DCOPObject +{ + Q_OBJECT + K_DCOP + +public: + static KickerConfig *the(); + ~KickerConfig(); + + void populateExtensionInfoList(QComboBox* list); + void reloadExtensionInfo(); + void saveExtentionInfo(); + const ExtensionInfoList& extensionsInfo(); + + QString configName(); + void notifyKicker(); + + QString quickHelp() const; + KAboutData *aboutData(); + + int currentPanelIndex() const { return m_currentPanelIndex; } + +k_dcop: + void jumpToPanel(const QString& panelConfig); + +signals: + void positionPanelChanged(int); + void hidingPanelChanged(int); + void extensionInfoChanged(); + void extensionAdded(ExtensionInfo*); + void extensionRemoved(ExtensionInfo*); + void extensionChanged(const QString&); + void extensionAboutToChange(const QString&); + void aboutToNotifyKicker(); + +protected: + void init(); + void setupExtensionInfo(KConfig& c, bool checkExists, bool reloadIfExists = false); + +protected slots: + void configChanged(const QString&); + void setCurrentPanelIndex(int); + +private: + KickerConfig(QWidget *parent = 0, const char *name = 0); + + static KickerConfig *m_self; + + KDirWatch *configFileWatch; + ExtensionInfoList m_extensionInfo; + int m_screenNumber; + uint m_currentPanelIndex; +}; + +#endif // __main_h__ diff --git a/kcontrol/kicker/menuconfig.cpp b/kcontrol/kicker/menuconfig.cpp new file mode 100644 index 000000000..5bc1964b1 --- /dev/null +++ b/kcontrol/kicker/menuconfig.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include + +#include +#include + +#include "kickerSettings.h" +#include "main.h" +#include "menutab_impl.h" + +#include "menuconfig.h" +#include "menuconfig.moc" + +MenuConfig::MenuConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + m_widget = new MenuTab(this); + layout->addWidget(m_widget); + layout->addStretch(); + + setQuickHelp(KickerConfig::the()->quickHelp()); + setAboutData(KickerConfig::the()->aboutData()); + + addConfig(KickerSettings::self(), m_widget); + + connect(m_widget, SIGNAL(changed()), + this, SLOT(changed())); + connect(KickerConfig::the(), SIGNAL(aboutToNotifyKicker()), + this, SLOT(aboutToNotifyKicker())); + + load(); + QTimer::singleShot(0, this, SLOT(notChanged())); +} + +void MenuConfig::notChanged() +{ + emit changed(false); +} + +void MenuConfig::load() +{ + m_widget->load(); + KCModule::load(); +} + +void MenuConfig::aboutToNotifyKicker() +{ + kdDebug() << "MenuConfig::aboutToNotifyKicker()" << endl; + + // This slot is triggered by the signal, + // which is send before Kicker is notified. + // See comment in save(). + m_widget->save(); + KCModule::save(); +} + +void MenuConfig::save() +{ + // As we don't want to notify Kicker multiple times + // we do not save the settings here. Instead the + // KickerConfig object sends a signal before the + // notification. On this signal all existing modules, + // including this object, save their settings. + KickerConfig::the()->notifyKicker(); +} + +void MenuConfig::defaults() +{ + m_widget->defaults(); + KCModule::defaults(); + + // KConfigDialogManager may queue an changed(false) signal, + // so we make sure, that the module is labeled as changedm, + // while we manage some of the widgets ourselves + QTimer::singleShot(0, this, SLOT(changed())); +} diff --git a/kcontrol/kicker/menuconfig.h b/kcontrol/kicker/menuconfig.h new file mode 100644 index 000000000..3d73f1922 --- /dev/null +++ b/kcontrol/kicker/menuconfig.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __menuconfig_h__ +#define __menuconfig_h__ + +#include + +class MenuTab; + +class MenuConfig : public KCModule +{ + Q_OBJECT + +public: + MenuConfig(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + void defaults(); + +public slots: + void notChanged(); + void aboutToNotifyKicker(); + +private: + MenuTab *m_widget; +}; + +#endif // __menuconfig_h__ diff --git a/kcontrol/kicker/menutab.ui b/kcontrol/kicker/menutab.ui new file mode 100644 index 000000000..8d49a7965 --- /dev/null +++ b/kcontrol/kicker/menutab.ui @@ -0,0 +1,407 @@ + +MenuTabBase + + + MenuTabBase + + + + 0 + 0 + 410 + 437 + + + + + unnamed + + + 0 + + + + m_kmenuGroup + + + K Menu + + + + unnamed + + + + layout7 + + + + unnamed + + + + kcfg_MenuEntryFormat + + + 0 + + + Menu item format: + + + true + + + Here you can choose how menu entries are shown. + + + + unnamed + + + + m_formatSimple + + + &Name only + + + When this option is selected, items in the K Menu will appear with the application's name next to the icon. + + + + + m_formatNameDesc + + + Name - &Description + + + true + + + When this option is selected, items in the K Menu will appear with the application's name and a brief description next to the icon. + + + + + m_formatDescOnly + + + D&escription only + + + When this option is selected, items in the K Menu will appear with the application's brief description next to the icon. + + + + + m_formDescName + + + NoFocus + + + Des&cription (Name) + + + When this option is selected, items in the K Menu will appear with a brief description and the application's name in brackets next to the icon. + + + + + + + kcfg_UseSidePixmap + + + Show side ima&ge + + + true + + + <qt>When this option is selected an image will appear down the left-hand side of the K Menu. The image will be tinted according to your color settings. + + <p><b>Tip</b>: You can customize the image that appears in the K Menu by putting an image file called kside.png and a tileable image file called kside_tile.png in $KDEHOME/share/apps/kicker/pics.</qt> + + + + + spacer8 + + + Vertical + + + MinimumExpanding + + + + 20 + 0 + + + + + + m_editKMenuButton + + + Edit &K Menu + + + Start the editor for the K menu. Here you can add, edit, remove and hide applications. + + + + + + + + Optional Menus + + + true + + + true + + + + m_subMenus + + + + 7 + 7 + 0 + 1 + + + + + 0 + 0 + + + + true + + + This is a list of the dynamic menus that can be displayed in the KDE menu in addition to the normal applications. Use the checkboxes to add or remove menus. + + + + + + + m_browserGroup + + + QuickBrowser Menus + + + + unnamed + + + + Layout3 + + + + unnamed + + + + m_maxQuickBrowserItemsLabel + + + Ma&ximum number of entries: + + + kcfg_MaxEntries2 + + + When browsing directories that contain a lot of files, the QuickBrowser can sometimes hide your whole desktop. Here you can limit the number of entries shown at a time in the QuickBrowser. This is particularly useful for low screen resolutions. + + + + + kcfg_MaxEntries2 + + + 30 + + + 10 + + + 100 + + + When browsing directories that contain a lot of files, the QuickBrowser can sometimes hide your whole desktop. Here you can limit the number of entries shown at a time in the QuickBrowser. This is particularly useful for low screen resolutions. + + + + + + + kcfg_ShowHiddenFiles + + + Show hidden fi&les + + + true + + + If this option is enabled, hidden files (i.e. files beginning with a dot) will be shown in the QuickBrowser menus. + + + + + Spacer7 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + + + m_pRecentOrderGroup + + + QuickStart Menu Items + + + + unnamed + + + + Layout4 + + + + unnamed + + + + TextLabel2 + + + Maxim&um number of entries: + + + kcfg_NumVisibleEntries + + + This option allows you to define the maximum number of applications that should be displayed in the QuickStart menu area. + + + + + kcfg_NumVisibleEntries + + + 5 + + + 0 + + + 20 + + + This option allows you to define how many applications should be displayed at most in the QuickStart menu area. + + + + + + + kcfg_RecentVsOften + + + Show the &applications most recently used + + + true + + + When this option is selected the QuickStart menu area will be filled with the applications you have used most recently. + + + + + m_showFrequent + + + Show the applications most fre&quently used + + + When this option is selected the QuickStart menu area will be filled with the applications you use most frequently. + + + + + Spacer8 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + + + + m_formatSimple + m_formatNameDesc + m_formDescName + kcfg_UseSidePixmap + m_editKMenuButton + m_subMenus + kcfg_ShowHiddenFiles + kcfg_MaxEntries2 + kcfg_RecentVsOften + m_showFrequent + kcfg_NumVisibleEntries + + + klistview.h + knuminput.h + kdialog.h + + + + + klistview.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + + diff --git a/kcontrol/kicker/menutab_impl.cpp b/kcontrol/kicker/menutab_impl.cpp new file mode 100644 index 000000000..55cabaa88 --- /dev/null +++ b/kcontrol/kicker/menutab_impl.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "main.h" + +#include "menutab_impl.h" +#include "menutab_impl.moc" + +kSubMenuItem::kSubMenuItem(QListView* parent, + const QString& visibleName, + const QString& desktopFile, + const QPixmap& icon, + bool checked) + : QCheckListItem(parent, visibleName, QCheckListItem::CheckBox), + m_desktopFile(desktopFile) +{ + setPixmap(0, icon); + setOn(checked); +} + +QString kSubMenuItem::desktopFile() +{ + return m_desktopFile; +} + +void kSubMenuItem::stateChange(bool state) +{ + emit toggled(state); +} + +MenuTab::MenuTab( QWidget *parent, const char* name ) + : MenuTabBase (parent, name), + m_bookmarkMenu(0), + m_quickBrowserMenu(0) +{ + // connections + connect(m_editKMenuButton, SIGNAL(clicked()), SLOT(launchMenuEditor())); + + m_browserGroupLayout->setColStretch( 1, 1 ); + m_pRecentOrderGroupLayout->setColStretch( 1, 1 ); +} + +void MenuTab::load() +{ + load( false ); +} + +void MenuTab::load( bool useDefaults ) +{ + KSharedConfig::Ptr c = KSharedConfig::openConfig(KickerConfig::the()->configName()); + + c->setReadDefaults( useDefaults ); + + c->setGroup("menus"); + + m_subMenus->clear(); + + // show the bookmark menu? + m_bookmarkMenu = new kSubMenuItem(m_subMenus, + i18n("Bookmarks"), + QString::null, + SmallIcon("bookmark"), + c->readBoolEntry("UseBookmarks", false)); + connect(m_bookmarkMenu, SIGNAL(toggled(bool)), SIGNAL(changed())); + + // show the quick menus menu? + m_quickBrowserMenu = new kSubMenuItem(m_subMenus, + i18n("Quick Browser"), + QString::null, + SmallIcon("kdisknav"), + c->readBoolEntry("UseBrowser", false)); + connect(m_quickBrowserMenu, SIGNAL(toggled(bool)), SIGNAL(changed())); + + QStringList ext_default; + ext_default << "prefmenu.desktop" << "systemmenu.desktop"; + QStringList ext = c->readListEntry("Extensions", ext_default); + QStringList dirs = KGlobal::dirs()->findDirs("data", "kicker/menuext"); + kSubMenuItem* menuItem(0); + for (QStringList::ConstIterator dit=dirs.begin(); dit!=dirs.end(); ++dit) + { + QDir d(*dit, "*.desktop"); + QStringList av = d.entryList(); + for (QStringList::ConstIterator it=av.begin(); it!=av.end(); ++it) + { + KDesktopFile df(d.absFilePath(*it), true); + menuItem = new kSubMenuItem(m_subMenus, + df.readName(), + *it, + SmallIcon(df.readIcon()), + qFind(ext.begin(), ext.end(), *it) != ext.end()); + connect(menuItem, SIGNAL(toggled(bool)), SIGNAL(changed())); + } + } + + m_showFrequent->setChecked(true); + + if ( useDefaults ) + emit changed(); +} + +void MenuTab::save() +{ + KSharedConfig::Ptr c = KSharedConfig::openConfig(KickerConfig::the()->configName()); + + c->setGroup("menus"); + + QStringList ext; + QListViewItem *item(0); + for (item = m_subMenus->firstChild(); item; item = item->nextSibling()) + { + bool isOn = static_cast(item)->isOn(); + if (item == m_bookmarkMenu) + { + c->writeEntry("UseBookmarks", isOn); + } + else if (item == m_quickBrowserMenu) + { + c->writeEntry("UseBrowser", isOn); + } + else if (isOn) + { + ext << static_cast(item)->desktopFile(); + } + } + c->writeEntry("Extensions", ext); + + c->sync(); +} + +void MenuTab::defaults() +{ + load( true ); +} + +void MenuTab::launchMenuEditor() +{ + if ( KApplication::startServiceByDesktopName( "kmenuedit", + QString::null /*url*/, + 0 /*error*/, + 0 /*dcopservice*/, + 0 /*pid*/, + "" /*startup_id*/, + true /*nowait*/ ) != 0 ) + { + KMessageBox::error(this, + i18n("The KDE menu editor (kmenuedit) could not be launched.\n" + "Perhaps it is not installed or not in your path."), + i18n("Application Missing")); + } +} diff --git a/kcontrol/kicker/menutab_impl.h b/kcontrol/kicker/menutab_impl.h new file mode 100644 index 000000000..20ed393e1 --- /dev/null +++ b/kcontrol/kicker/menutab_impl.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __menutab_impl_h__ +#define __menutab_impl_h__ + +#include + +#include "menutab.h" + +class kSubMenuItem : public QObject, public QCheckListItem +{ + Q_OBJECT + + public: + kSubMenuItem(QListView* parent, + const QString& visibleName, + const QString& desktopFile, + const QPixmap& icon, + bool checked); + ~kSubMenuItem() {} + + QString desktopFile(); + + signals: + void toggled(bool); + + protected: + void stateChange(bool state); + + QString m_desktopFile; +}; + +class MenuTab : public MenuTabBase +{ + Q_OBJECT + +public: + MenuTab( QWidget *parent=0, const char* name=0 ); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + +signals: + void changed(); + +public slots: + void launchMenuEditor(); + +protected: + kSubMenuItem *m_bookmarkMenu; + kSubMenuItem *m_quickBrowserMenu; +}; + +#endif + diff --git a/kcontrol/kicker/panel.desktop b/kcontrol/kicker/panel.desktop new file mode 100644 index 000000000..0c05d67f5 --- /dev/null +++ b/kcontrol/kicker/panel.desktop @@ -0,0 +1,224 @@ +[Desktop Entry] +Icon=kcmkicker +Type=Application +DocPath=kcontrol/panel/index.html +Exec=kcmshell panel + + +X-KDE-Library=kicker +X-KDE-ParentApp=kcontrol + +Name=Panels +Name[af]=Panele +Name[ar]=اللوحات +Name[az]=Panellər +Name[be]=Панэлі +Name[bg]=Панели +Name[bn]=প্যানেল +Name[br]=Panelloù +Name[bs]=Paneli +Name[ca]=Plafons +Name[cs]=Panely +Name[csb]=Panele +Name[cy]=Paneli +Name[da]=Paneler +Name[de]=Kontrollleisten +Name[el]=Πίνακες +Name[eo]=Paneloj +Name[es]=Paneles +Name[et]=Paneelid +Name[eu]=Panelak +Name[fa]=تابلوها +Name[fi]=Paneelit +Name[fr]=Tableau de bord +Name[fy]=Panielen +Name[ga]=Painéil +Name[gl]=Paneis +Name[he]=לוחות +Name[hi]=पेनल्स +Name[hr]=Ploče +Name[hu]=Panelek +Name[is]=Spjald +Name[it]=Pannelli +Name[ja]=パネル +Name[ka]=პანელები +Name[kk]=Панельдер +Name[km]=បន្ទះ +Name[ko]=패널 +Name[lo]=ຖາດພາແນວ +Name[lt]=Pultai +Name[lv]=Panelis +Name[mk]=Панели +Name[mn]=Удирдах самбарууд +Name[ms]=Panel +Name[mt]=Pannelli +Name[nb]=Paneler +Name[nds]=Paneels +Name[ne]=प्यानल +Name[nl]=Panelen +Name[nn]=Panel +Name[nso]=Di-Panel +Name[pa]=ਪੈਨਲ +Name[pl]=Panele +Name[pt]=Painéis +Name[pt_BR]=Painéis +Name[ro]=Panouri +Name[ru]=Панели +Name[rw]=Imyanya +Name[se]=Panelat +Name[sk]=Panely +Name[sl]=Pulti +Name[sr]=Панели +Name[sr@Latn]=Paneli +Name[sv]=Paneler +Name[ta]=பலகம் +Name[te]=పెనల్సు +Name[tg]=Панелҳо +Name[th]=ถาดพาเนล +Name[tr]=Paneller +Name[tt]=Taqta +Name[uk]=Панель +Name[uz]=Panellar +Name[uz@cyrillic]=Панеллар +Name[ven]=Dziphanele +Name[vi]=Bảng điều khiển +Name[wa]=Scriftôrs +Name[xh]=Amaqela eenjongo ezithile +Name[zh_CN]=面板 +Name[zh_TW]=面板 +Name[zu]=amawindi emininingwane + +Comment=Configure the arrangement of the panel +Comment[af]=Stel die rangskikking van die paneel hier op +Comment[ar]=هنا تستطيع إعداد ترتيب اللوح +Comment[az]=Panelin düzülüşünü quraşdır +Comment[be]=Настаўленні раўнавання панэлі +Comment[bg]=Настройване разпределението на системния панел +Comment[bn]=প্যানেল-এর বিন্যাস কনফিগার করুন +Comment[br]=Kefluniañ doare ar banell +Comment[bs]=Ovdje možete podesiti izgled panela +Comment[ca]=Configura l'arranjament del plafó +Comment[cs]=Zde je možné nastavit uspořádání panelu +Comment[csb]=Kònfigùracëjô pòłożeniô panelu +Comment[cy]=Ffurfweddu trefn y panel +Comment[da]=Indstil panelets arrangement +Comment[de]=Anordnung der Kontrollleiste vornehmen +Comment[el]=Ρυθμίστε τη διάταξη του πίνακα +Comment[eo]=Agordu la aranĝon de la panelo +Comment[es]=Configuración de la apariencia del panel +Comment[et]=Siin saad seadistada paneeli paigutust +Comment[eu]=Konfiguratu panelaren eraketa +Comment[fa]=پیکربندی ترتیب تابلو +Comment[fi]=Vaihda paneelin asettelua +Comment[fr]=Configuration de la disposition du tableau de bord +Comment[fy]=Hjir kinne jo it ûntwerp fan it paniel ynstelle +Comment[gl]=Configurar a disposición do painel +Comment[he]=הגדר את סידור הלוח +Comment[hi]=फलक की व्यवस्था कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje rasporeda ploče +Comment[hu]=A panel elrendezésének beállításai +Comment[is]=Stilla viðmót spjaldsins +Comment[it]=Configura la posizione del pannello +Comment[ja]=パネルの配置を設定 +Comment[ka]=პანელის თანმიმდევრულობის კონფიგურაცია +Comment[kk]=Панельді орналастыруын баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​រៀបចំ​បន្ទះ +Comment[lt]=Čia galite konfigūruoti pulto išdėstymą +Comment[lv]=Šeit jūs varat konfigurēt paneļa izkārotjumu +Comment[mk]=Конфигурирајте го распоредот на панелот +Comment[mn]=Цонхны дарааллыг тохируулах +Comment[ms]=Konfigur susunan panel +Comment[mt]=Tista' tbiddel t-tqassim tal-pannell hawnhekk +Comment[nb]=Oppstilling av panelet +Comment[nds]=Anornen vun't Paneel instellen +Comment[ne]=प्यानलको मिलान कन्फिगर गर्नुहोस् +Comment[nl]=U kunt hier de opmaak van het paneel instellen +Comment[nn]=Oppstilling av panelet +Comment[pa]=ਪੈਨਲ ਦੇ ਢਾਂਚੇ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja położenia panelu +Comment[pt]=Configurar o posicionamento do painel aqui +Comment[pt_BR]=Configura a disposição do Painel +Comment[ro]=Configurează modul de aranjare al panoului +Comment[ru]=Настройка выравнивания панели +Comment[rw]=Kuboneza itunganya ry'umwanya +Comment[se]=Heivet panela ráhkadusa +Comment[sk]=Nastavenie rozloženia panelu +Comment[sl]=Nastavi razpored pulta +Comment[sr]=Подешавање распореда на панелу +Comment[sr@Latn]=Podešavanje rasporeda na panelu +Comment[sv]=Anpassa panelens placering +Comment[ta]=பலகத்தின் வரிசையை வடிவமை +Comment[tg]=Танзимоти созишномаи панел +Comment[th]=ปรับแต่งการจัดเรียงถาดพาเนล +Comment[tr]=Panelin konumunu buradan yapılandırabilirsiniz +Comment[tt]=Taqta urınlaşuın caylaw +Comment[uk]=Налаштування компонування панелі +Comment[uz]=Panelning tartibini moslash +Comment[uz@cyrillic]=Панелнинг тартибини мослаш +Comment[vi]=Cấu hình sự sắp đặt các bảng điều khiển +Comment[wa]=Vos ploz apontyî chal l' arindjmint do scriftôr +Comment[zh_CN]=配置面板的排列 +Comment[zh_TW]=您可以在此設定面板的排列方式 + +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Размяшчэнне,Пазіцыя,Памер,Аўтаматычна хаваць,Хаваць,Кнопкі,Анімацыя,Фон,Тэмы,Кэш меню,Кэш,Схаваная,Схаваць,Меню KDE,Закладкі,Ранейшыя,Нядаўнія,Дакументы,Хуткі прагляд,Меню вандроўніка,Меню вандравання,Меню,Значкі,Аплеты,Запуск,Падсвятленне,Апрацоўка,Апрацоўшчык,Маштабаванне значак,kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[bg]=системен, панел, подредба, подравняване, kicker, panel, kpanel, taskbar, startbar, launchbar, location, size, auto hide, hide, buttons, animation, background, themes, menu cache, cache, hidden, K-Menu, bookmarks, recent documents, quickbrowser, browser menu, menu, icons, tiles, applets, startup, highlight, handles, zooming icons +Keywords[bs]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,veličina,automatsko sakrivanje,sakrivanje,dugmad,animacija,pozadina,teme,keš menija,meni,keš,skriven,zabilješke,skorašnji dokumenti,meni browsera,meni preglednika,ikone,appleti,pokretanje,uvećavanje +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra de llançament,localització,mida,auto oculta,oculta,botons,animació,temes,fons,cau del menú,cau,ocult,Menú K,punts,documents recents,navegació ràpida,menú de navegació,menú,icones,mosaics,aplets,arrencada,ressaltat,nanses,ampliar les icones +Keywords[cs]=kicker,panel,kpanel,pruh úloh,lišta úloh,umístění, velikost,skrývání,automatické skrývání,tlačítka,animace,pozadí, motivy,nabídka,menu,záložky,nedávné dokumenty,rychlé prohlížení, ikony,dlaždice,applety,spuštění,zvýraznění,úchytky,zvětšování ikon +Keywords[csb]=kicker,panel,kpanel,lëstëw zadaniów,sztartowô lëstëw,lëstëw zrëszaniô,pòłożenié,miara,aùtomatno tacënié,tacë,knąpë,animacëjô,spódk,spòdlé,témë,cache menu,cache,zatacony,K-Menu,załóżczi,slédny dokùmentë,chùtczé przezéranié,menu,ikònë,kafelkòwané,programiczi,zrëszanié,pòdskrzënianié,ùchwëtë,zwikszanié ikònów +Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,håndterer,ikoner +Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +Keywords[el]=kicker,πίνακας,kpanel,γραμμή εργασιών,γραμμή έναρξης,γραμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκρυψη,απόκρυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενού,λανθάνουσα μνήμη,κρυφό, K-Μενού,σελιδοδείκτες,πρόσφατα έγγραφα,γρήγορος εξερευνητής,μενού εξερευνητή,μενού,εικονίδια,tiles,μικροεφαρμογές,έναρξη,τονισμός,χειριστήρια, μεγέθυνση εικονιδίων +Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aŭtokaŝo,kaŝo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiarazte-barra,kokapena, neurria,auto ezkutatu,ezkutatu,botoiak,animazioa,atzeko planoa, gaiak,menu-katxea,katxea,ezkutatu,K-menua,laster-markak,oraintsuko dokumentuak, arakatzaile bizkorra,arakatzaile menua,menua,ikonoak,baldosak,appletak,abiatu,nabarmendu,heldulekuak,zooming icons +Keywords[fa]=kicker، تابلو، kpanel، میله‌ تکلیف، میله آغاز، میله راه‌انداز، محل، اندازه، مخفی کردن خودکار، مخفی کردن، دکمه‌ها، پویانمایی، زمینه، چهره‌ها، نهانگاه گزینگان، نهانگاه، مخفی، گزینگان K، چوب ‌الفها، سندهای اخیر، مرورگر سریع، گزینگان، مرورگر، شمایلها، کاشیها، برنامکها، راه‌اندازی، مشخص، گرداننده‌ها، بزرگ‌نمایی شمایلها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistyspalkki,paikka,koko,automaattipiilotus,piilotus,napit,animaatio,tausta,teemat,valikkovälimuisti,välimuisti,K-valikko,kirjanmerkit,viimeaikaiset asiakirjat,pikaselain,selausvalikko,valikko,kuvakkeet,sovelmat,käynnistys,korostus,kahvat,kuvakkeiden suurennus +Keywords[fr]=kicker,tableau de bord,barre du bas,barre des tâches,barre de démarrage,barre de lancement,emplacement,taille,auto-masquage,cacher,masquer,boutons,animation,fond,arrière-plan,thème,cache de menu,cache,caché,menu K,K,signets,documents récents,document récent,navigateur rapide,navigateur,menu,icône,mosaïque,applet,démarrage,surbrillance,poignée,poignées,zoom,zoom sur les icônes +Keywords[fy]=kicker,paniel,kpanel,taakbalke,takebalke,Startbalke,startmenu,applikaasje begjinner,lokaasje,ôfmjiting,terminaltapassing,auto hide,automatysk ferstopje,ferstopje,Ynklappe,knoppen,animaasje,eftergrûn,tema's,menu lyts ûnthâld,lyts ûnthâld,ferstoppe,K-Menu,bookmarks,blêdwizers,resinte dokuminten,quickbrowser,browser menu,menu,icons,ikoan,ikoanen,tegels,tiles,applets,begjinne,opljochtsje,handles,zoomen,knoppen,hanfetten,betroubere applets,feiligens nivo +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,barra de comezo,barra de lanzamento,localización,tamaño,auto agochamento,agochamento,botóns,animación,fondo,temas,cache de menú,caché,oculto,Menú K,marcadores,derradeiros documentos,navegador rápido,menú de navegación,menú,iconas,apliques,início,resaltado,xestión,aumento de iconas +Keywords[he]=kicker, לוח, kpanel, שורת משימות, שורת הרצה, מיקום, גודל, הסתרה אוטומטית, הסתר, אנימציה, רקע, ערכות, תפריט, מטמון, מוסתר, תפריט K, מועדפים, מסמכים אחרונים, דפדוף מהיר, תפריט, סימנים, סמלים, כותרות, יישומונים, אתחול, הדגשה, ידיות, הגדלת סמלים, taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, panel +Keywords[hi]=किकर,फलक,के-पेनल,कार्यपट्टी,प्रारंभपट्टी,चालकपट्टी,स्थान,आकार,स्वतः छुपें,छुपें,बटन्स,एनिमेशन,पृष्ठभूमि,प्रसंग,मेनू कैश,कैश,छुपा,के-मेन्यू,पसंद,हाल ही के दस्तावेज़,क्विक-ब्राउज़र,ब्राउज़र मेन्यू,मेन्यू,प्रतीक,टाइल्स,ऐप्लेट्स,स्टार्टअप,उभारना,हैंडल्स,जूमिंग प्रतीक +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,ploča,traka zadataka,traka pokretanja,lokacija,veličina,automatsko skrivanje,skrivanje,gumbi,animacija,pozadina,teme,pohrana izbornika,pohrana,skriven,oznake,nedavni dokumenti,brzi preglednik,izbornik preglednika,izbornik,ikone,popločeno,apleti,naglašavanje,rukovanje,uvećane ikone +Keywords[hu]=Kicker,panel,kpanel,feladatlista,start menü,indítómenü,indítósáv,hely,méret,automatikus elrejtés,elrejtés,gombok,animáció,háttér,témák,menügyorstár,gyorstár,rejtett,K menü,könyvjelzők,legutóbbi dokumentumok,gyorsböngésző,böngészőmenü,menü,ikonok,mozaikszerű,kisalkalmazások,indulás,kiemelés,fogantyúk,nagyítóikonok +Keywords[is]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,trusted applets,security level +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,taskbar,startbar,launchbar,barra di avvio,posizione,dimensione,scomparsa automatica,pulsanti,animazione,sfondo,temi,cache dei menu,nascosto,Menu K,segnalibri,documenti recenti,browser veloce,menu,icone,piastrelle,applet,avvio,evidenziazione,maniglie,ingrandimento icone +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,場所,サイズ,自動的に隠す,隠す,ボタン,アニメーション,背景,テーマ,メニューキャッシュ,キャッシュ,隠れた,Kメニュー,ブックマーク,最近のドキュメント,クイックブラウザ,ブラウザメニュー,メニュー,アイコン,タイル,アプレット,スタートアップ,ハイライト,ハンドル,アイコンのズーム +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,ទីតាំង,ទំហំ,លាក់​ស្វ័យប្រវត្តិ,លាក់,ប៊ូតុង,ចលនា,ផ្ទៃ​ខាង​ក្រោយ,ស្បែក,ឃ្លាំង​សម្ងាត់​ម៉ឺនុយ,ឃ្លាំង​សម្ងាត់,លាក់,ម៉ឺនុយ K,កន្លែង​ចំណាំ,ឯកសារ​ថ្មីៗ​នេះ,កម្មវិធី​រុករក​រហ័ស,ម៉ឺនុយ​កម្មវិធី​រុករក,ម៉ឺនុយ,រូបតំណាង,ក្បឿង,អាប់ភ្លេត,ចាប់ផ្ដើម,បន្លិច,ប្រើ,រូបតំណាង​ពង្រីក +Keywords[lt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,skydelis,kskydelis,užduočių juosta,paleidimo juosta,slėpti,mygtukai,animacija,fonas,temos,meniu atmintinė,atmintinė,paslėptas,žymelės,neseniai naudoti dokumentai,peržiūra,meniu,ženkliukai,perdengti,įskiepiai,paleistis,pažymėti,rankenėlės,išdidinti ženkliukus +Keywords[lv]=kicker,panelis,kpanel,uzdevumjosla,startbar,launchbar,location,size,izmērs,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,grāmatzīmes,recent documents,quickbrowser,browser menu,izvēlne,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,панел,лента со програми,локација,големина,авто криење,криење,копчиња,анимација,подлога,позадина,теми,кеш на менито,кеш,скриен,K-Мени,обележувачи, последни документи,брз прелистувач,мени за прелистувачи,мени,икони,плочки,аплети,рачки,зумирање на икони +Keywords[mt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,favoriti,pannell,post,daqs,lokazzjoni,ħabi,animazzjoni,buttuni +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,plassering,størrelse, autoskjul,skjul,knapper,animasjon,bakgrunn,temaer,mellomlager for temaer, mellomlager,skjult,K-meny,bokmerker,nylig brukte dokumenter,hurtigviser, katalogmeny,meny,ikoner,fliser,miniprogrammer,panelprogrammer,oppstart, uthev,håndtak,forstørring av ikoner +Keywords[nds]=Kicker,Paneel,kpanel,Taskbalken,Programmbalken,Startbalken,Adress,Grött,automaatsch versteken,versteken,Knööp,Knoop,Knööp,Animatschoon,Achtergrund,Muster,Menü-Twischenspieker,Twischenspieker,versteken,K-Menü,Leesteken,leste Dokmenten,Fixkieker,Nettkieker-Menü,Menü,Lüttbiller,Titel,Programmen,starten,markeren,handles,Grepen,Lüttbiller grötter maken +Keywords[ne]=किकर, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, स्थान, आकार, स्वत: लुकाउने, लुकाउनुहोस्, बटनहरू, एनिमेसन, पृष्ठभूमि, विषयवस्तुहरू, मेनु क्यास, क्यास, लुकेको, के-मेनु, पुस्तकचिनोहरू, हालको कागजातहरू, छिटो ब्राउजर, ब्राउजर मेनु, मेनु, प्रतिमा, टायलहरू, एप्लेटहरू, सुरु, हाइलाइट, ह्यान्डल गर्दछ, जुम प्रतिमा +Keywords[nl]=kicker,paneel,kpanel,taakbalk,takenbalk,startbalk,startmenu,applicatie starter,locatie,afmeting,terminaltoepassing,auto hide,automatisch verbergen,verbergen,invouwen,knoppen,animatie,achtergrond,thema's,menu cache,cache,verborgen,K-Menu,bookmarks,bladwijzers,recente documenten,quickbrowser,browser menu,menu,icons,icoon,iconen,pictogrammen,tegels,tiles,applets,opstarten,highlight,accentuering,handles,zoomen,knoppen,handvatten,betrouwbare applets,security level,beveiligingsniveau +Keywords[nn]=Kicker,panel,KPanel,oppgåvelinje,oppstartslinje,plassering,storleik,autogøym,gøym,knappar,animasjon,bakgrunn,tema,menymellomlager,mellomlager,gøymd,K-meny,bokmerke,nyleg bruka dokument,snøgglesar,katalogmeny,meny,ikon,brikker,applet,panelprogram,oppstart,merking,handtak,forstørring av ikon +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons, ਪੈਨਲ, ਟਿਕਾਣਾ, ਬਰਾਊਜ਼ਰ, ਝਲਾਕਰਾ, ਕੈਂਚੇ, ਕੇ-ਮੇਨੂ, ਬੁੱਕਮਾਰਕ, ਤਾਜ਼ਾ, ਉਘੜੇ, ਹੈਂਡਲ, ਬਟਨ, ਸਰੂਪ, ਮੇਨੂ, ਓਹਲੇ, ਅਕਾਰ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,pasek uruchamiania,położenie,rozmiar,automatyczne ukrywanie,ukryj,przyciski,animacja,tło,motywy,bufor (cache) menu,bufor,cache,ukryty,K-Menu,zakładki,ostatnie dokumenty,szybkie przeglądanie,menu,ikony,kafelkowane,programiki,uruchomienie,podświetlanie,uchwyty,powiększanie ikon +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,localização,tamanho,auto-esconder,esconder,botões,animação,fundo,temas,'cache' de menu,'cache',escondido,menu K,favoritos,documentos recentes,navegador rápido,menu de navegação,menu,ícones,mosaicos,'applets',inicio,realce,pegas,ícones aumentados +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,lançar aplicativos,localização,tamanho,auto-ocultar,esconder,botões, animação,fundo,temas,cache de menu,cache,escondido,Menu K,favoritos,documentos recentes,navegador rápido, menu do navegador,menu,ícones,títulos,mini-aplicativos,iniciar,realçar, manipuladores, ícones de ampliação +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,lansare,mărime,locație,ascundere automată,butoane,animație,fundal,tematică,meniu K,semne de carte,documente recente,navigator rapid,meniu navigare,meniu,iconițe,mozaic,miniaplicații,evidențiere,scalare +Keywords[rw]=igitera,umwanya,k-umwanya,umurongogutangira,umurongogutangiza,indangahantu,ingano,kwihisha,guhisha,buto,iyega,mbuganyuma,insanganyamatsiko,ubwihisho bw'ibikubiyemo,ubwihisho,bihishe,K-Ibikubiyemo,utumenyetso,inyandiko zigezweho,mucukumbuzi yihuta,ibikubiyemo bya mucukumbuzi,ibikubiyemo,udushushondanga,udukaro,apuleti,gutangira,gushimangira,ibifashi,udushushondanga guhindura-ingano +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,báiki,sturrodat,autočiega,čiehkadit,boalut,animašuvdna,duogáš,fáddá,fálločiehkárájus,čiehkárájus,K-fállu,girjemearkkat,aiddo geavahuvvon dokumeantta,ohcofállu,fállu,govažat,prográmmažat,álggaheapmi,merken,geavjjat,luohttehahtti prográmmažat,sihkkarvuohtadássi +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,miesto,umiestnenie,veľkosť,terminálová aplikácia,skrývanie,automatické skrývanie,tlačidlá,animácia,pozadie,témy,cache,cache ponuky,skryté,K-Menu,záložky,posledné dokumenty,rýchly prehliadač,ponuka prehliadača,menu,ikony,applety,štart,zvýraznenie,handles,zväčšovanie ikon,overené applety,úroveň zabezpečenia +Keywords[sl]=kicker,pult,kpanel,opravilna vrstica,zagonska vrstica,mesto,lokacija,velikost,terminalski program,skrij,samodejno skrivanje,skrivanje,gumbi,animacija,ozadje,teme,menijski predpomnilnik,predpomnilnik,skrit,K-Menu,zaznamki,nedavni dokumenti,hitro brskanje,brskalni meni,meni,tlakovci,ikone,vstavki,zagon,osvetlitev,ročice,ikone za povečavo +Keywords[sr]=kicker,панел,kpanel,трака задатака,startbar,launchbar,локација,величина,Терминалски програм,аутоматско сакривање,сакривање,дугмићи,анимација,позадина,теме,мени кеш,кеш,скривен,K-Menu,маркери,скори документи,брзи прегледач,мени прегледача,мени,иконе,блокови,апплети,startup,истицање,хватаљке,увеличавање икона,аплети којима се верује,ниво безбедности +Keywords[sr@Latn]=kicker,panel,kpanel,traka zadataka,startbar,launchbar,lokacija,veličina,Terminalski program,automatsko sakrivanje,sakrivanje,dugmići,animacija,pozadina,teme,meni keš,keš,skriven,K-Menu,markeri,skori dokumenti,brzi pregledač,meni pregledača,meni,ikone,blokovi,appleti,startup,isticanje,hvataljke,uveličavanje ikona,apleti kojima se veruje,nivo bezbednosti +Keywords[sv]=kicker,panel,k-panel,aktivitetsfält,startfält,körningsfält,plats,storlek,dölj automatiskt,dölj,göm,knappar,animering,bakgrund,teman,menycache,cache,gömd,dold,K-meny,bokmärken,senaste dokument,snabbläddrare,bläddringsmeny,meny,ikoner,miniprogram,start,framhäv,grepp,zoomikoner +Keywords[ta]=கிக்கர், பானல், கேபானல்,துவக்கப்பட்டி, துவங்கும்பட்டி,இடம்,அளவு, சத்தம் மறை, மறை,பட்டன், உயிர்சித்திரம்,பின்னனி,கருப்பொருள், தற்காலிக மெனு, மறைந்த,கே-மெனு,புத்தககுறிகள், தற்போதைய ஆவணம். வேக உலாவி, உலாவி மெனு, மெனு, சின்னம், சிறுநிரல், துவக்கம், கையாள், பெரிதாக்கும் சின்னங்கள் +Keywords[th]=kicker,พาเนล,kpanel,taskbar,startbar,แถบเรียกโปรแกรม,ที่ตั้ง,ขนาด,ซ่อนอัตโนมัติ ,ซ่อน,ปุ่ม,อนิเมชั่น,พื้นหลัง,ชุดตกแต่ง,แคชของเมนู,แคช,ถูกซ่อน,K-Menu,ที่คั่นหน้า,เอกสารที่เพิ่งเปิดไป,quickbrowser,เมนูของบราวเซอร์,เมนู,ไอคอน,พื้นผิว,applets,startup,highlight,handles,ซูมไอคอน +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,başlat çubuğu,konum,boyut,Uç birim uygulaması,otomatik gizle,gizle,tuşlar,animasyon,artalan,temalar,menü ön belleği,ön bellek,gizli,K-Menu,yer imleri,en son kullanılan belgeler,hızlı gözatıcı,göz atıcı menüsü,menü,simgeler,karo,programcıklar,Başlangıç,belirt,tutamaçlar,büyüyen simgeler,güvenilen programcıklar,güvenlik düzeyi +Keywords[tt]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser saylaq,saylaq,icons,tiles,applets,startup,highlight,handles,zooming icons +Keywords[uk]=kicker,панель,смужка задач,kpanel,смужка запуску,розташування,розмір,консольна програма,автоматичне згортання,згортання,кнопки,анімація,тло,теми,кеш меню,кеш,схований,К-Меню,закладки,недавні документи,швидка навігація,меню навігатора,меню,піктограми,заголовки,аплети,запуск,підсвічування,маніпулятор,масштабування піктограм +Keywords[uz]=panel,vazifalar paneli,bekitish,avto-bekitish,tugmalar,animatsiya,orqa fon,mavzular,K-menyu,kesh,yashirilgan,xatchoʻplar,yaqinda ochilgan hujjatlar,tez koʻruvchi,brauzer menyusi,menyuning keshi,menyu,nishonchalar,appletlar,nishonchalarni kattalashtirish,oʻlcham,kicker,kpanel,startbar,launchbar,joylashishi,tiles,startup,highlight,handles +Keywords[uz@cyrillic]=панел,вазифалар панели,бекитиш,авто-бекитиш,тугмалар,анимация,орқа фон,мавзулар,К-меню,кэш,яширилган,хатчўплар,яқинда очилган ҳужжатлар,тез кўрувчи,браузер менюси,менюнинг кэши,меню,нишончалар,апплетлар,нишончаларни катталаштириш,ўлчам,kicker,kpanel,startbar,launchbar,жойлашиши,tiles,startup,highlight,handles +Keywords[vi]=kích hoạt,bảng điều khiển,kpanel,thanh tác vụ,thanh khởi động,thanh phóng,vị trí,kích cỡ,tự ẩn,ẩn,nút,hoạt hình,mảnh nền,sắc thái,thực đơn đệm,đệm,giấu,Thực đơn K,số lưu liên kết,tài liệu gần đây,duyệt nhanh,thực đơn duyệt,thực đơn,biểu tượng,tiêu đề,tiểu ứng dụng,khởi động,nổi bật,cầm nắm,biểu tượng phóng đại,ứng dụng đáng tin,mức độ an ninh +Keywords[wa]=kicker,panel,sicriftôr,scriftôr,kpanel,taskbar,bår des bouyes,startbar,launchbar,bår d' enondaedje,plaece,grandeu,catche tot seu,catchî,botons,animåvion,fond,tinmes,muchete menu,muchete,K-Menu,rimåkes,documints nén vî,betchteu rade,dresseŷe do betchteu,dressêye,menu,imådjetes,applets,apliketes,enonde tot seu,highlight,handles,zooming icons,zoumer les imådjetes +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons面板,任务栏,启动栏,位置,大小,自动隐藏,隐藏,按钮,动画,背景,主题,菜单缓存,缓存,书签,最近文档,快速浏览器,浏览器菜单,菜单,图标,平铺,启动,突出,句柄,缩放图标 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,location,size,auto hide,hide,buttons,animation,background,themes,menu cache,cache,hidden,K-Menu,bookmarks,recent documents,quickbrowser,browser menu,menu,icons,tiles,applets,startup,highlight,handles,zooming icons,面板,工作列,啟動列,快捷列,位置,大小,自動隱藏,隱藏,按鈕,動畫,背景,佈景主題,選單快取,快取,隱藏,K-選單,書籤,最近開啟的文件,快速瀏覽,瀏覽選單,選單,圖示,小圖塊,應用程式,啟動,高亮度,處理,縮放圖示 + +Categories=Qt;KDE;X-KDE-settings-desktop; diff --git a/kcontrol/kicker/positionconfig.cpp b/kcontrol/kicker/positionconfig.cpp new file mode 100644 index 000000000..86a94ed21 --- /dev/null +++ b/kcontrol/kicker/positionconfig.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include + +#include +#include + +#include "positiontab_impl.h" +#include "kickerSettings.h" +#include "main.h" + +#include "positionconfig.h" +#include "positionconfig.moc" + +PositionConfig::PositionConfig(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + m_widget = new PositionTab(this); + layout->addWidget(m_widget); + layout->addStretch(); + + setQuickHelp(KickerConfig::the()->quickHelp()); + setAboutData(KickerConfig::the()->aboutData()); + + //addConfig(KickerSettings::self(), m_widget); + + connect(m_widget, SIGNAL(changed()), + this, SLOT(changed())); + connect(KickerConfig::the(), SIGNAL(aboutToNotifyKicker()), + this, SLOT(aboutToNotifyKicker())); + + load(); + QTimer::singleShot(0, this, SLOT(notChanged())); +} + +void PositionConfig::notChanged() +{ + emit changed(false); +} + +void PositionConfig::load() +{ + m_widget->load(); + KCModule::load(); +} + +void PositionConfig::aboutToNotifyKicker() +{ + kdDebug() << "PositionConfig::aboutToNotifyKicker()" << endl; + + // This slot is triggered by the signal, + // which is send before Kicker is notified. + // See comment in save(). + m_widget->save(); + KCModule::save(); +} + +void PositionConfig::save() +{ + // As we don't want to notify Kicker multiple times + // we do not save the settings here. Instead the + // KickerConfig object sends a signal before the + // notification. On this signal all existing modules, + // including this object, save their settings. + KickerConfig::the()->notifyKicker(); +} + +void PositionConfig::defaults() +{ + m_widget->defaults(); + KCModule::defaults(); + + // KConfigDialogManager may queue an changed(false) signal, + // so we make sure, that the module is labeled as changed, + // while we manage some of the widgets ourselves + QTimer::singleShot(0, this, SLOT(changed())); +} diff --git a/kcontrol/kicker/positionconfig.h b/kcontrol/kicker/positionconfig.h new file mode 100644 index 000000000..8fc1c885f --- /dev/null +++ b/kcontrol/kicker/positionconfig.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2005 Stefan Nikolaus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __positionconfig_h__ +#define __positionconfig_h__ + +#include + +class PositionTab; + +class PositionConfig : public KCModule +{ + Q_OBJECT + +public: + PositionConfig(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + void defaults(); + +public slots: + void notChanged(); + void aboutToNotifyKicker(); + +private: + PositionTab *m_widget; +}; + +#endif // __positionconfig_h__ diff --git a/kcontrol/kicker/positiontab.ui b/kcontrol/kicker/positiontab.ui new file mode 100644 index 000000000..b0566f5dc --- /dev/null +++ b/kcontrol/kicker/positiontab.ui @@ -0,0 +1,1129 @@ + +PositionTabBase +Aaron J. Seigo + + + PositionTabBase + + + + 0 + 0 + 517 + 400 + + + + This is a list of all the panels currently active on your desktop. Select one to configure. + + + + unnamed + + + 0 + + + + m_panelsGroupBox + + + NoFrame + + + + + + + unnamed + + + 0 + + + + m_panelListLabel + + + S&ettings for: + + + m_panelList + + + + + m_panelList + + + + + spacer11 + + + Horizontal + + + Expanding + + + + 342 + 20 + + + + + + + + XineramaGroup + + + Screen + + + + unnamed + + + + Layout13 + + + + unnamed + + + + Spacer9 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + m_monitorImage + + + + 1 + 1 + 0 + 0 + + + + + 151 + 115 + + + + true + + + AlignCenter + + + This preview image shows how the panel will appear on your screen with the settings you have chosen. Clicking the buttons around the image will move the position of the panel, while moving the length slider and choosing different sizes will change the dimensions of the panel. + + + + + Spacer13_2 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + + + Layout12 + + + + unnamed + + + + Spacer8 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + m_identifyButton + + + Identify + + + This button displays each monitor's identifying number + + + + + + + Layout9 + + + + unnamed + + + + m_xineramaScreenLabel + + + &Xinerama screen: + + + m_xineramaScreenComboBox + + + + + m_xineramaScreenComboBox + + + This menu selects which screen the Panel will be displayed on in a multiple-monitor system + + + + + + + Spacer61 + + + Vertical + + + Expanding + + + + 0 + 101 + + + + + + + + m_rsizeGroup + + + + 7 + 5 + 10 + 0 + + + + Len&gth + + + This group of settings determines how the panel is aligned, including +how it is positioned on the screen and how much of the screen it should use. + + + + unnamed + + + + Layout8 + + + + unnamed + + + + m_percentSlider + + + + 7 + 0 + 0 + 0 + + + + 1 + + + 100 + + + 100 + + + true + + + Horizontal + + + NoMarks + + + 10 + + + This slider defines how much of the screen's edge will be occupied by the panel. + + + + + m_percentSpinBox + + + 100 + + + 0 + + + 100 + + + % + + + This spinbox defines how much of the screen's edge will be occupied by the panel. + + + + + + + m_expandCheckBox + + + &Expand as required to fit contents + + + When this option is selected, the panel will grow as necessary to accommodate the buttons and applets on it. + + + + + + + Spacer13 + + + Vertical + + + Expanding + + + + 16 + 16 + + + + + + m_sizeGroup + + + + 7 + 1 + 10 + 0 + + + + Si&ze + + + This sets the size of the panel. + + + + unnamed + + + + + Tiny + + + + + Small + + + + + Normal + + + + + Large + + + + + Custom + + + + m_panelSize + + + + + Spacer14_2 + + + Horizontal + + + Fixed + + + + 30 + 40 + + + + + + Layout9 + + + + unnamed + + + + m_customSlider + + + false + + + + 7 + 0 + 0 + 0 + + + + 24 + + + 128 + + + 8 + + + 58 + + + true + + + Horizontal + + + NoMarks + + + 20 + + + This slider defines the panel size when the Custom option is selected. + + + + + m_customSpinbox + + + false + + + 58 + + + 24 + + + 128 + + + pixels + + + This spinbox defines the panel size when the Custom option is selected. + + + + + + + + + m_locationGroup + + + Position + + + true + + + Here you can set the position of the panel highlighted on the left side. You can put any panel on top or bottom of the screen and on the left or right side of the screen. There you can put it into the center or into either corner of the screen. + + + + unnamed + + + + Spacer9_2 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + Spacer10_2 + + + Horizontal + + + Expanding + + + + 21 + 0 + + + + + + Layout7 + + + + unnamed + + + + Layout8 + + + + unnamed + + + + locationTopLeft + + + + 1 + 0 + 0 + 0 + + + + + 32 + 16 + + + + + 32 + 16 + + + + + + + Alt+1 + + + true + + + + + locationTop + + + + 1 + 0 + 0 + 0 + + + + + 32 + 16 + + + + + 32 + 16 + + + + + + + Alt+2 + + + true + + + + + locationTopRight + + + + 1 + 0 + 0 + 0 + + + + + 32 + 16 + + + + + 32 + 16 + + + + + + + Alt+3 + + + true + + + + + + + Layout10 + + + + unnamed + + + + locationLeftTop + + + + 0 + 1 + 0 + 0 + + + + + 16 + 24 + + + + + 16 + 24 + + + + + + + Alt+= + + + true + + + + + locationLeft + + + + 0 + 1 + 0 + 0 + + + + + 16 + 24 + + + + + 16 + 24 + + + + + + + Alt+- + + + true + + + + + locationLeftBottom + + + + 0 + 1 + 0 + 0 + + + + + 16 + 24 + + + + + 16 + 24 + + + + + + + Alt+0 + + + true + + + + + + + Layout7 + + + + unnamed + + + + locationBottomLeft + + + + 1 + 0 + 0 + 0 + + + + + 32 + 16 + + + + + 32 + 16 + + + + + + + Alt+9 + + + true + + + + + locationBottom + + + + 1 + 0 + 0 + 0 + + + + + 32 + 16 + + + + + 32 + 16 + + + + + + + Alt+8 + + + true + + + + + locationBottomRight + + + + 1 + 0 + 0 + 0 + + + + + 32 + 16 + + + + + 32 + 16 + + + + + + + Alt+7 + + + true + + + + + + + Layout9 + + + + unnamed + + + + locationRightTop + + + + 0 + 1 + 0 + 0 + + + + + 16 + 24 + + + + + 16 + 24 + + + + + + + Alt+4 + + + true + + + + + locationRight + + + + 0 + 1 + 0 + 0 + + + + + 16 + 24 + + + + + 16 + 24 + + + + + + + Alt+5 + + + true + + + + + locationRightBottom + + + + 0 + 1 + 0 + 0 + + + + + 16 + 24 + + + + + 16 + 24 + + + + + + + Alt+6 + + + true + + + + + + + + + + + + + m_percentSlider + valueChanged(int) + PositionTabBase + lengthenPanel(int) + + + m_sizeGroup + clicked(int) + PositionTabBase + panelDimensionsChanged() + + + m_customSlider + valueChanged(int) + PositionTabBase + panelDimensionsChanged() + + + m_percentSlider + valueChanged(int) + m_percentSpinBox + setValue(int) + + + m_percentSpinBox + valueChanged(int) + m_percentSlider + setValue(int) + + + m_customSlider + valueChanged(int) + m_customSpinbox + setValue(int) + + + m_customSpinbox + valueChanged(int) + m_customSlider + setValue(int) + + + m_locationGroup + clicked(int) + PositionTabBase + movePanel(int) + + + m_panelSize + activated(int) + PositionTabBase + panelDimensionsChanged() + + + m_panelList + activated(int) + PositionTabBase + switchPanel(int) + + + + locationTopLeft + locationTop + locationTopRight + locationRightTop + locationRight + locationRightBottom + locationBottomRight + locationBottom + locationBottomLeft + locationLeftBottom + locationLeft + locationLeftTop + m_percentSlider + m_percentSpinBox + m_expandCheckBox + m_customSlider + m_customSpinbox + m_identifyButton + m_xineramaScreenComboBox + + + klineedit.h + knuminput.h + kdialog.h + + + lengthenPanel( int ) + movePanel( int ) + panelDimensionsChanged() + switchPanel( int ) + + + + + knuminput.h + knuminput.h + knuminput.h + knuminput.h + + diff --git a/kcontrol/kicker/positiontab_impl.cpp b/kcontrol/kicker/positiontab_impl.cpp new file mode 100644 index 000000000..22f38e0a1 --- /dev/null +++ b/kcontrol/kicker/positiontab_impl.cpp @@ -0,0 +1,742 @@ +/* + * Copyright (c) 2000 Matthias Elter + * Copyright (c) 2002 Aaron Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "main.h" +#include "../background/bgrender.h" + +#include "positiontab_impl.h" +#include "positiontab_impl.moc" + + +// magic numbers for the preview widget layout +extern const int offsetX = 23; +extern const int offsetY = 14; +extern const int maxX = 150; +extern const int maxY = 114; +extern const int margin = 1; + +PositionTab::PositionTab(QWidget *parent, const char* name) + : PositionTabBase(parent, name), + m_pretendPanel(0), + m_desktopPreview(0), + m_panelInfo(0), + m_panelPos(PosBottom), + m_panelAlign(AlignLeft) +{ + QPixmap monitor(locate("data", "kcontrol/pics/monitor.png")); + m_monitorImage->setPixmap(monitor); + m_monitorImage->setFixedSize(m_monitorImage->sizeHint()); + + m_pretendDesktop = new QWidget(m_monitorImage, "pretendBG"); + m_pretendDesktop->setGeometry(offsetX, offsetY, maxX, maxY); + m_pretendPanel = new QFrame(m_monitorImage, "pretendPanel"); + m_pretendPanel->setGeometry(offsetX + margin, maxY + offsetY - 10, + maxX - margin, 10 - margin); + m_pretendPanel->setFrameShape(QFrame::MenuBarPanel); + + /* + * set the tooltips on the buttons properly for RTL langs + */ + if (kapp->reverseLayout()) + { + QToolTip::add(locationTopRight, i18n("Top left")); + QToolTip::add(locationTop, i18n("Top center")); + QToolTip::add(locationTopLeft, i18n("Top right" ) ); + QToolTip::add(locationRightTop, i18n("Left top")); + QToolTip::add(locationRight, i18n("Left center")); + QToolTip::add(locationRightBottom, i18n("Left bottom")); + QToolTip::add(locationBottomRight, i18n("Bottom left")); + QToolTip::add(locationBottom, i18n("Bottom center")); + QToolTip::add(locationBottomLeft, i18n("Bottom right")); + QToolTip::add(locationLeftTop, i18n("Right top")); + QToolTip::add(locationLeft, i18n("Right center")); + QToolTip::add(locationLeftBottom, i18n("Right bottom")); + } + else + { + QToolTip::add(locationTopLeft, i18n("Top left")); + QToolTip::add(locationTop, i18n("Top center")); + QToolTip::add(locationTopRight, i18n("Top right" ) ); + QToolTip::add(locationLeftTop, i18n("Left top")); + QToolTip::add(locationLeft, i18n("Left center")); + QToolTip::add(locationLeftBottom, i18n("Left bottom")); + QToolTip::add(locationBottomLeft, i18n("Bottom left")); + QToolTip::add(locationBottom, i18n("Bottom center")); + QToolTip::add(locationBottomRight, i18n("Bottom right")); + QToolTip::add(locationRightTop, i18n("Right top")); + QToolTip::add(locationRight, i18n("Right center")); + QToolTip::add(locationRightBottom, i18n("Right bottom")); + } + + // connections + connect(m_locationGroup, SIGNAL(clicked(int)), SIGNAL(changed())); + connect(m_xineramaScreenComboBox, SIGNAL(highlighted(int)), SIGNAL(changed())); + + connect(m_identifyButton,SIGNAL(clicked()),SLOT(showIdentify())); + + for(int s=0; s < QApplication::desktop()->numScreens(); s++) + { /* populate the combobox for the available screens */ + m_xineramaScreenComboBox->insertItem(QString::number(s+1)); + } + m_xineramaScreenComboBox->insertItem(i18n("All Screens")); + + // hide the xinerama chooser widgets if there is no need for them + if (QApplication::desktop()->numScreens() < 2) + { + m_identifyButton->hide(); + m_xineramaScreenComboBox->hide(); + m_xineramaScreenLabel->hide(); + } + + connect(m_percentSlider, SIGNAL(valueChanged(int)), SIGNAL(changed())); + connect(m_percentSpinBox, SIGNAL(valueChanged(int)), SIGNAL(changed())); + connect(m_expandCheckBox, SIGNAL(clicked()), SIGNAL(changed())); + + connect(m_sizeGroup, SIGNAL(clicked(int)), SIGNAL(changed())); + connect(m_customSlider, SIGNAL(valueChanged(int)), SIGNAL(changed())); + connect(m_customSpinbox, SIGNAL(valueChanged(int)), SIGNAL(changed())); + + m_desktopPreview = new KVirtualBGRenderer(0); + connect(m_desktopPreview, SIGNAL(imageDone(int)), + SLOT(slotBGPreviewReady(int))); + + connect(KickerConfig::the(), SIGNAL(extensionInfoChanged()), + SLOT(infoUpdated())); + connect(KickerConfig::the(), SIGNAL(extensionAdded(ExtensionInfo*)), + SLOT(extensionAdded(ExtensionInfo*))); + connect(KickerConfig::the(), SIGNAL(extensionRemoved(ExtensionInfo*)), + SLOT(extensionRemoved(ExtensionInfo*))); + connect(KickerConfig::the(), SIGNAL(extensionChanged(const QString&)), + SLOT(extensionChanged(const QString&))); + connect(KickerConfig::the(), SIGNAL(extensionAboutToChange(const QString&)), + SLOT(extensionAboutToChange(const QString&))); + // position tab tells hiding tab about extension selections and vice versa + connect(KickerConfig::the(), SIGNAL(hidingPanelChanged(int)), + SLOT(jumpToPanel(int))); + connect(m_panelList, SIGNAL(activated(int)), + KickerConfig::the(), SIGNAL(positionPanelChanged(int))); + + connect(m_panelSize, SIGNAL(activated(int)), + SLOT(sizeChanged(int))); + connect(m_panelSize, SIGNAL(activated(int)), + SIGNAL(changed())); +} + +PositionTab::~PositionTab() +{ + delete m_desktopPreview; +} + +void PositionTab::load() +{ + m_panelInfo = 0; + KickerConfig::the()->populateExtensionInfoList(m_panelList); + m_panelsGroupBox->setHidden(m_panelList->count() < 2); + + switchPanel(KickerConfig::the()->currentPanelIndex()); + m_desktopPreview->setPreview(m_pretendDesktop->size()); + m_desktopPreview->start(); +} + +void PositionTab::extensionAdded(ExtensionInfo* info) +{ + m_panelList->insertItem(info->_name); + m_panelsGroupBox->setHidden(m_panelList->count() < 2); +} + +void PositionTab::save() +{ + storeInfo(); + KickerConfig::the()->saveExtentionInfo(); +} + +void PositionTab::defaults() +{ + m_panelPos= PosBottom; // bottom of the screen + m_percentSlider->setValue( 100 ); // use all space available + m_percentSpinBox->setValue( 100 ); // use all space available + m_expandCheckBox->setChecked( true ); // expand as required + m_xineramaScreenComboBox->setCurrentItem(QApplication::desktop()->primaryScreen()); + + if (QApplication::reverseLayout()) + { + // RTL lang aligns right + m_panelAlign = AlignRight; + } + else + { + // everyone else aligns left + m_panelAlign = AlignLeft; + } + + m_panelSize->setCurrentItem(KPanelExtension::SizeNormal); + + // update the magic drawing + lengthenPanel(-1); + switchPanel(KickerConfig::the()->currentPanelIndex()); +} + +void PositionTab::sizeChanged(int which) +{ + bool custom = which == KPanelExtension::SizeCustom; + m_customSlider->setEnabled(custom); + m_customSpinbox->setEnabled(custom); +} + +void PositionTab::movePanel(int whichButton) +{ + QPushButton* pushed = reinterpret_cast(m_locationGroup->find(whichButton)); + + if (pushed == locationTopLeft) + { + if (!(m_panelInfo->_allowedPosition[PosTop])) + { + setPositionButtons(); + return; + } + m_panelAlign = kapp->reverseLayout() ? AlignRight : AlignLeft; + m_panelPos = PosTop; + } + else if (pushed == locationTop) + { + if (!(m_panelInfo->_allowedPosition[PosTop])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignCenter; + m_panelPos = PosTop; + } + else if (pushed == locationTopRight) + { + if (!(m_panelInfo->_allowedPosition[PosTop])) + { + setPositionButtons(); + return; + } + m_panelAlign = kapp->reverseLayout() ? AlignLeft : AlignRight; + m_panelPos = PosTop; + } + else if (pushed == locationLeftTop) + { + if (!(m_panelInfo->_allowedPosition[kapp->reverseLayout() ? PosRight : PosLeft])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignLeft; + m_panelPos = kapp->reverseLayout() ? PosRight : PosLeft; + } + else if (pushed == locationLeft) + { + if (!(m_panelInfo->_allowedPosition[kapp->reverseLayout() ? PosRight : PosLeft])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignCenter; + m_panelPos = kapp->reverseLayout() ? PosRight : PosLeft; + } + else if (pushed == locationLeftBottom) + { + if (!(m_panelInfo->_allowedPosition[kapp->reverseLayout() ? PosRight : PosLeft])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignRight; + m_panelPos = kapp->reverseLayout() ? PosRight : PosLeft; + } + else if (pushed == locationBottomLeft) + { + if (!(m_panelInfo->_allowedPosition[PosBottom])) + { + setPositionButtons(); + return; + } + m_panelAlign = kapp->reverseLayout() ? AlignRight : AlignLeft; + m_panelPos = PosBottom; + } + else if (pushed == locationBottom) + { + if (!(m_panelInfo->_allowedPosition[PosBottom])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignCenter; + m_panelPos = PosBottom; + } + else if (pushed == locationBottomRight) + { + if (!(m_panelInfo->_allowedPosition[PosBottom])) + { + setPositionButtons(); + return; + } + m_panelAlign = kapp->reverseLayout() ? AlignLeft : AlignRight; + m_panelPos = PosBottom; + } + else if (pushed == locationRightTop) + { + if (!(m_panelInfo->_allowedPosition[kapp->reverseLayout() ? PosLeft : PosRight])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignLeft; + m_panelPos = kapp->reverseLayout() ? PosLeft : PosRight; + } + else if (pushed == locationRight) + { + if (!(m_panelInfo->_allowedPosition[kapp->reverseLayout() ? PosLeft : PosRight])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignCenter; + m_panelPos = kapp->reverseLayout() ? PosLeft : PosRight; + } + else if (pushed == locationRightBottom) + { + if (!(m_panelInfo->_allowedPosition[kapp->reverseLayout() ? PosLeft : PosRight])) + { + setPositionButtons(); + return; + } + m_panelAlign = AlignRight; + m_panelPos = kapp->reverseLayout() ? PosLeft : PosRight; + } + + lengthenPanel(-1); + emit panelPositionChanged(m_panelPos); +} + +void PositionTab::lengthenPanel(int sizePercent) +{ + if (sizePercent < 0) + { + sizePercent = m_percentSlider->value(); + } + + unsigned int x(0), y(0), x2(0), y2(0); + unsigned int diff = 0; + unsigned int panelSize = 4; + + switch (m_panelSize->currentItem()) + { + case KPanelExtension::SizeTiny: + case KPanelExtension::SizeSmall: + panelSize = panelSize * 3 / 2; + break; + case KPanelExtension::SizeNormal: + panelSize *= 2; + break; + case KPanelExtension::SizeLarge: + panelSize = panelSize * 5 / 2; + break; + default: + panelSize = panelSize * m_customSlider->value() / 24; + break; + } + + switch (m_panelPos) + { + case PosTop: + x = offsetX + margin; + x2 = maxX - margin; + y = offsetY + margin; + y2 = panelSize; + + diff = x2 - ((x2 * sizePercent) / 100); + if (m_panelAlign == AlignLeft) + { + x2 -= diff; + } + else if (m_panelAlign == AlignCenter) + { + x += diff / 2; + x2 -= diff; + } + else // m_panelAlign == AlignRight + { + x += diff; + x2 -= diff; + } + break; + case PosLeft: + x = offsetX + margin; + x2 = panelSize; + y = offsetY + margin; + y2 = maxY - margin; + + diff = y2 - ((y2 * sizePercent) / 100); + if (m_panelAlign == AlignLeft) + { + y2 -= diff; + } + else if (m_panelAlign == AlignCenter) + { + y += diff / 2; + y2 -= diff; + } + else // m_panelAlign == AlignRight + { + y += diff; + y2 -= diff; + } + break; + case PosBottom: + x = offsetX + margin; + x2 = maxX - margin; + y = offsetY + maxY - panelSize; + y2 = panelSize; + + diff = x2 - ((x2 * sizePercent) / 100); + if (m_panelAlign == AlignLeft) + { + x2 -= diff; + } + else if (m_panelAlign == AlignCenter) + { + x += diff / 2; + x2 -= diff; + } + else // m_panelAlign == AlignRight + { + x += diff; + x2 -= diff; + } + break; + default: // case PosRight: + x = offsetX + maxX - panelSize; + x2 = panelSize; + y = offsetY + margin; + y2 = maxY - margin; + + diff = y2 - ((y2 * sizePercent) / 100); + if (m_panelAlign == AlignLeft) + { + y2 -= diff; + } + else if (m_panelAlign == AlignCenter) + { + y += diff / 2; + y2 -= diff; + } + else // m_panelAlign == AlignRight + { + y += diff; + y2 -= diff; + } + break; + } + + if (x2 < 3) + { + x2 = 3; + } + + if (y2 < 3) + { + y2 = 3; + } + + m_pretendPanel->setGeometry(x, y, x2, y2); +} + +void PositionTab::panelDimensionsChanged() +{ + lengthenPanel(-1); +} + +void PositionTab::slotBGPreviewReady(int) +{ + m_pretendDesktop->setBackgroundPixmap(m_desktopPreview->pixmap()); +#if 0 + KPixmap pm; + if (QPixmap::defaultDepth() < 15) + { + pm.convertFromImage(*m_desktopPreview->image(), KPixmap::LowColor); + } + else + { + pm.convertFromImage(*m_desktopPreview->image()); + } + + m_pretendDesktop->setBackgroundPixmap(pm); +#endif +} + +void PositionTab::switchPanel(int panelItem) +{ + blockSignals(true); + ExtensionInfo* panelInfo = (KickerConfig::the()->extensionsInfo())[panelItem]; + + if (!panelInfo) + { + m_panelList->setCurrentItem(0); + panelInfo = (KickerConfig::the()->extensionsInfo())[panelItem]; + + if (!panelInfo) + { + return; + } + } + + if (m_panelInfo) + { + storeInfo(); + } + + m_panelInfo = panelInfo; + + // because this changes when panels come and go, we have + // to be overly pedantic and remove the custom item every time and + // decide to add it back again, or not + m_panelSize->removeItem(KPanelExtension::SizeCustom); + if (m_panelInfo->_customSizeMin != m_panelInfo->_customSizeMax) + { + m_panelSize->insertItem(i18n("Custom"), KPanelExtension::SizeCustom); + } + + if (m_panelInfo->_size >= KPanelExtension::SizeCustom || + (!m_panelInfo->_useStdSizes && + m_panelInfo->_customSizeMin != m_panelInfo->_customSizeMax)) // compat + { + m_panelSize->setCurrentItem(KPanelExtension::SizeCustom); + sizeChanged(KPanelExtension::SizeCustom); + } + else + { + m_panelSize->setCurrentItem(m_panelInfo->_size); + sizeChanged(0); + } + m_panelSize->setEnabled(m_panelInfo->_useStdSizes); + + m_customSlider->setMinValue(m_panelInfo->_customSizeMin); + m_customSlider->setMaxValue(m_panelInfo->_customSizeMax); + m_customSlider->setTickInterval(m_panelInfo->_customSizeMax / 6); + m_customSlider->setValue(m_panelInfo->_customSize); + m_customSpinbox->setMinValue(m_panelInfo->_customSizeMin); + m_customSpinbox->setMaxValue(m_panelInfo->_customSizeMax); + m_customSpinbox->setValue(m_panelInfo->_customSize); + m_sizeGroup->setEnabled(m_panelInfo->_resizeable); + m_panelPos = m_panelInfo->_position; + m_panelAlign = m_panelInfo->_alignment; + if(m_panelInfo->_xineramaScreen >= 0 && m_panelInfo->_xineramaScreen < QApplication::desktop()->numScreens()) + m_xineramaScreenComboBox->setCurrentItem(m_panelInfo->_xineramaScreen); + else if(m_panelInfo->_xineramaScreen == -2) /* the All Screens option: qt uses -1 for default, so -2 for all */ + m_xineramaScreenComboBox->setCurrentItem(m_xineramaScreenComboBox->count()-1); + else + m_xineramaScreenComboBox->setCurrentItem(QApplication::desktop()->primaryScreen()); + + setPositionButtons(); + + m_percentSlider->setValue(m_panelInfo->_sizePercentage); + m_percentSpinBox->setValue(m_panelInfo->_sizePercentage); + + m_expandCheckBox->setChecked(m_panelInfo->_expandSize); + + lengthenPanel(m_panelInfo->_sizePercentage); + blockSignals(false); +} + + +void PositionTab::setPositionButtons() { + if (m_panelPos == PosTop) + { + if (m_panelAlign == AlignLeft) + kapp->reverseLayout() ? locationTopRight->setOn(true) : + locationTopLeft->setOn(true); + else if (m_panelAlign == AlignCenter) + locationTop->setOn(true); + else // if (m_panelAlign == AlignRight + kapp->reverseLayout() ? locationTopLeft->setOn(true) : + locationTopRight->setOn(true); + } + else if (m_panelPos == PosRight) + { + if (m_panelAlign == AlignLeft) + kapp->reverseLayout() ? locationLeftTop->setOn(true) : + locationRightTop->setOn(true); + else if (m_panelAlign == AlignCenter) + kapp->reverseLayout() ? locationLeft->setOn(true) : + locationRight->setOn(true); + else // if (m_panelAlign == AlignRight + kapp->reverseLayout() ? locationLeftBottom->setOn(true) : + locationRightBottom->setOn(true); + } + else if (m_panelPos == PosBottom) + { + if (m_panelAlign == AlignLeft) + kapp->reverseLayout() ? locationBottomRight->setOn(true) : + locationBottomLeft->setOn(true); + else if (m_panelAlign == AlignCenter) + locationBottom->setOn(true); + else // if (m_panelAlign == AlignRight + kapp->reverseLayout() ? locationBottomLeft->setOn(true) : + locationBottomRight->setOn(true); + } + else // if (m_panelPos == PosLeft + { + if (m_panelAlign == AlignLeft) + kapp->reverseLayout() ? locationRightTop->setOn(true) : + locationLeftTop->setOn(true); + else if (m_panelAlign == AlignCenter) + kapp->reverseLayout() ? locationRight->setOn(true) : + locationLeft->setOn(true); + else // if (m_panelAlign == AlignRight + kapp->reverseLayout() ? locationRightBottom->setOn(true) : + locationLeftBottom->setOn(true); + } + +} + +void PositionTab::infoUpdated() +{ + switchPanel(0); +} + +void PositionTab::extensionAboutToChange(const QString& configPath) +{ + ExtensionInfo* extension = (KickerConfig::the()->extensionsInfo())[m_panelList->currentItem()]; + if (extension && extension->_configPath == configPath) + { + storeInfo(); + } +} + +void PositionTab::extensionChanged(const QString& configPath) +{ + ExtensionInfo* extension = (KickerConfig::the()->extensionsInfo())[m_panelList->currentItem()]; + if (extension && extension->_configPath == configPath) + { + m_panelInfo = 0; + switchPanel(m_panelList->currentItem()); + } +} + +void PositionTab::storeInfo() +{ + if (!m_panelInfo) + { + return; + } + + // Magic numbers stolen from kdebase/kicker/core/global.cpp + // PGlobal::sizeValue() + if (m_panelSize->currentItem() < KPanelExtension::SizeCustom) + { + m_panelInfo->_size = m_panelSize->currentItem(); + } + else + { + m_panelInfo->_size = KPanelExtension::SizeCustom; + m_panelInfo->_customSize = m_customSlider->value(); + } + + m_panelInfo->_position = m_panelPos; + m_panelInfo->_alignment = m_panelAlign; + if(m_xineramaScreenComboBox->currentItem() == m_xineramaScreenComboBox->count()-1) + m_panelInfo->_xineramaScreen = -2; /* all screens */ + else + m_panelInfo->_xineramaScreen = m_xineramaScreenComboBox->currentItem(); + + m_panelInfo->_sizePercentage = m_percentSlider->value(); + m_panelInfo->_expandSize = m_expandCheckBox->isChecked(); +} + +void PositionTab::showIdentify() +{ + for(int s=0; s < QApplication::desktop()->numScreens();s++) + { + + QLabel *screenLabel = new QLabel(0,"Screen Identify", WDestructiveClose | WStyle_Customize | WX11BypassWM ); + + QFont identifyFont(KGlobalSettings::generalFont()); + identifyFont.setPixelSize(100); + screenLabel->setFont(identifyFont); + + screenLabel->setFrameStyle(QFrame::Panel); + screenLabel->setFrameShadow(QFrame::Plain); + + screenLabel->setAlignment(Qt::AlignCenter); + screenLabel->setNum(s + 1); + // BUGLET: we should not allow the identification to be entered again + // until the timer fires. + QTimer::singleShot(1500, screenLabel, SLOT(close())); + + QPoint screenCenter(QApplication::desktop()->screenGeometry(s).center()); + QRect targetGeometry(QPoint(0,0),screenLabel->sizeHint()); + targetGeometry.moveCenter(screenCenter); + + screenLabel->setGeometry(targetGeometry); + + screenLabel->show(); + } +} + +void PositionTab::extensionRemoved(ExtensionInfo* info) +{ + int count = m_panelList->count(); + int extensionCount = KickerConfig::the()->extensionsInfo().count(); + int index = 0; + for (; index < count && index < extensionCount; ++index) + { + if (KickerConfig::the()->extensionsInfo()[index] == info) + { + break; + } + } + + bool isCurrentlySelected = index == m_panelList->currentItem(); + m_panelList->removeItem(index); + m_panelsGroupBox->setHidden(m_panelList->count() < 2); + + if (isCurrentlySelected) + { + m_panelList->setCurrentItem(0); + } +} + +void PositionTab::jumpToPanel(int index) +{ + m_panelList->setCurrentItem(index); + switchPanel(index); +} diff --git a/kcontrol/kicker/positiontab_impl.h b/kcontrol/kicker/positiontab_impl.h new file mode 100644 index 000000000..6c7cdc5ea --- /dev/null +++ b/kcontrol/kicker/positiontab_impl.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2000 Matthias Elter + * Copyright (c) 2002 Aaron Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + + +#ifndef __positiontab_impl_h__ +#define __positiontab_impl_h__ + +#include "positiontab.h" + +class QFrame; +class KVirtualBGRenderer; +class KickerConfig; +class ExtensionInfo; + +class PositionTab : public PositionTabBase +{ + Q_OBJECT + +public: + PositionTab(QWidget *parent, const char* name = 0); + ~PositionTab(); + + enum positions { PosLeft = 0, PosRight, PosTop, PosBottom }; + enum allignments { AlignLeft = 0, AlignCenter, AlignRight }; + + void load(); + void save(); + void defaults(); + +signals: + void changed(); + void panelPositionChanged(int); + +protected slots: + void movePanel(int); + void lengthenPanel(int); + void panelDimensionsChanged(); + void slotBGPreviewReady(int); + void infoUpdated(); + void storeInfo(); + void showIdentify(); + void extensionAdded(ExtensionInfo*); + void extensionRemoved(ExtensionInfo* info); + void extensionChanged(const QString&); + void extensionAboutToChange(const QString&); + void sizeChanged(int); + void switchPanel(int); + void jumpToPanel(int); + +private: + QFrame* m_pretendPanel; + QWidget* m_pretendDesktop; + KVirtualBGRenderer* m_desktopPreview; + ExtensionInfo* m_panelInfo; + + unsigned int m_panelPos; + unsigned int m_panelAlign; + void setPositionButtons(); +}; + +#endif + diff --git a/kcontrol/kicker/uninstall.desktop b/kcontrol/kicker/uninstall.desktop new file mode 100644 index 000000000..10e05f80d --- /dev/null +++ b/kcontrol/kicker/uninstall.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Application +Name=Foo +Name[ko]=카메룬 +Name[nds]=Bispeel +Name[pl]=Coś +Name[pt]=XPTO +Name[sr]=Фу +Name[sr@Latn]=Fu +Name[tr]=Boş +Hidden=true diff --git a/kcontrol/kio/Makefile.am b/kcontrol/kio/Makefile.am new file mode 100644 index 000000000..29f0cf30f --- /dev/null +++ b/kcontrol/kio/Makefile.am @@ -0,0 +1,39 @@ +SUBDIRS = uasproviders + +AM_CPPFLAGS = $(all_includes) +AM_LDFLAGS = $(all_libraries) + +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_kio.la + +kcm_kio_la_SOURCES = policydlg.cpp kcookiesmain.cpp kcookiespolicies.cpp \ + main.cpp smbrodlg.cpp useragentdlg.cpp kproxydlgbase.cpp \ + kmanualproxydlg.cpp kenvvarproxydlg.cpp kproxydlg.cpp \ + kcookiesmanagement.cpp fakeuaprovider.cpp uagentproviderdlg.cpp \ + netpref.cpp cache.cpp ksaveioconfig.cpp socks.cpp socksbase.ui \ + kproxydlg_ui.ui kcookiesmanagementdlg_ui.ui kcookiespoliciesdlg_ui.ui \ + policydlg_ui.ui useragentdlg_ui.ui uagentproviderdlg_ui.ui \ + manualproxy_ui.ui envvarproxy_ui.ui cache_ui.ui + +kcm_kio_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kcm_kio_la_LIBADD = $(LIB_KIO) $(LIB_KUTILS) + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmkio.pot + +update_DATA = socks.upd +updatedir = $(kde_datadir)/kconf_update + +servicetypes_DATA = uasprovider.desktop +servicetypesdir = $(kde_servicetypesdir) + +xdg_apps_DATA = cookies.desktop useragent.desktop cache.desktop \ + lanbrowser.desktop netpref.desktop proxy.desktop + +smb_DATA = smb.desktop +smbdir = $(kde_appsdir)/.hidden + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing/smb.desktop diff --git a/kcontrol/kio/UA-DESKTOP-FILE-HOWTO b/kcontrol/kio/UA-DESKTOP-FILE-HOWTO new file mode 100644 index 000000000..8d67d9a37 --- /dev/null +++ b/kcontrol/kio/UA-DESKTOP-FILE-HOWTO @@ -0,0 +1,135 @@ +Mini HOWTO create a "User-Agent" description file for KDE +========================================================= + +This mini HOWTO describes the procedure for creating a new user-agent +description file to extend the ones that come pre-packaged with KDE. +The purpose of a user agent description file is to fake or spoof sites +that refuse to render pages with the default KDE user-agent identification. + +In order to create new user-agent description files, simply follow the +normal desktop file specifications set by the "DESKTOP ENTRY STANDARD" +augmented with the following requirements: + +REQUIREMENTS: +============= +The following properties as defined by the DESKTOP ENTRY STANDARD +must be set as shown below: + +Name=UADescription (XXXX) +Type=Service +ServiceTypes=UserAgentStrings + +Though the (XXXX) value shown above can be any text, it is a good idea +to make it a short identification of the browser being emulated. However, +there is NO requirement on what the text should be. It can even be left +out. It is only meant to give people a quick idea which browser is being +emulated by your desktop file. + +NEW PROPERTIES: +=============== +X-KDE-UA-TAG +FIELD: REQUIRED +TYPE: QString +TRANSLATE: NO +DESCRIPTION: +An abbreviation of the actual browser-brand and is used +to group the entries whenever necessary. Currently there are 5 +approximations: IE, NN, MOZ, OP, MISC. These represent Internet +Explorer, Netscape Navigator, Mozilla, Opera and Miscellaneous +respectively. NOTE: you can enter any value here as it is just +a place holder that would be automatically replaced with the +actual user-agent name (X-KDE-UA-NAME). + +X-KDE-UA-FULL +FIELD: REQUIRED +TYPE: QString +TRANSLATE: NO +DESCRIPTION: +The full user-agent description that will be sent to the remote +site. It can contain the following keywords that would be replaced +with the appropriate value as defined by "uname": + +appSysName the name of the operating system (ex: Linux). +appPlatform the name of the platform. Currently hardcoded to "X11". +appLanguage the language values as set in the control panel (ex: en, en-US). +appSysRelease the version of the operating system (ex: 2.2.18). +appKDERelease the current release number as set by KDE (ex: 2.1.9 >=20010310). +appMachineType the processor or machine type (ex: i686). + +NOTE: if you use any of these values and want them to be replaced +automatically, make sure you include the X-KDE-UA-DYNAMIC-ENTRY field +and set its value to 1 (for true). + +X-KDE-UA-NAME +FIELD: REQUIRED +TYPE: QString +TRANSLATE: YES +DESCRIPTION: +The actual name of the browser or user-agent. + +X-KDE-UA-VERSION +FIELD: REQUIRED +TYPE: QString +TRANSLATE: YES +DESCRIPTION: +The actual version of the browser or user-agent. + +X-KDE-UA-SYSNAME +FIELD: OPTIONAL +TYPE: QString +TRANSLATE: YES +DESCRIPTION: +The system name (for example Linux) where the browser +identification was obtained from. + +X-KDE-UA-SYSRELEASE +FIELD: OPTIONAL +TYPE: QString +TRANSLATE: YES +DESCRIPTION: +The system version (for example 2.4.1) where the browser +identification was obtained from. + +X-KDE-UA-DYNAMIC-ENTRY +FIELD: OPTIONAL +TYPE: BOOLEAN (0/1) +TRANSLATE: NO +DESCRIPTION: +A boolean that indicates whether the keywords described under +X-KDE-UA-FULL should be translated. Make sure this field is +there with its value set to "1" if you want the keywords to +be replaced appropriately. + + +EXAMPLES: +========= +[Desktop Entry] +Name=UADescription (IE 5.5 on Win 98) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=5.5 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=98 + +[Desktop Entry] +Name=UADescription (NN 4.76 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/4.76 (appPlatform; U; appSysName appSysRelease appMachineType) +X-KDE-UA-NAME=Netscape Navigator +X-KDE-UA-VERSION=4.76 +X-KDE-UA-DYNAMIC-ENTRY=1 + +The first entry is a description file for Internet Explorer running on +a Windows 98 machine while the second one is an example of a description +file for Netscape browser using the "keyword" based approach to describe +the fields that should be replaced dynamically based on the current system +settings. Note that all "keyword" based desktop files should always set +X-KDE-UA-DYNAMIC-ENTRY to 1. + +Enjoy, +Dawit A. diff --git a/kcontrol/kio/cache.cpp b/kcontrol/kio/cache.cpp new file mode 100644 index 000000000..8b730ae77 --- /dev/null +++ b/kcontrol/kio/cache.cpp @@ -0,0 +1,127 @@ +/* + cache.cpp - Proxy configuration dialog + + Copyright (C) 2001,02,03 Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "ksaveioconfig.h" +#include + +#include "cache.h" +#include "cache_ui.h" + +KCacheConfigDialog::KCacheConfigDialog( QWidget* parent ) + :KCModule( parent, "kcmkio" ) +{ + QVBoxLayout* mainLayout = new QVBoxLayout(this, 0, 0); + m_dlg = new CacheDlgUI(this); + mainLayout->addWidget(m_dlg); + mainLayout->addStretch(); + + load(); +} + +void KCacheConfigDialog::load() +{ + m_dlg->cbUseCache->setChecked(KProtocolManager::useCache()); + m_dlg->sbMaxCacheSize->setValue( KProtocolManager::maxCacheSize() ); + + KIO::CacheControl cc = KProtocolManager::cacheControl(); + + if (cc==KIO::CC_Verify) + m_dlg->rbVerifyCache->setChecked( true ); + else if (cc==KIO::CC_Refresh) + m_dlg->rbVerifyCache->setChecked( true ); + else if (cc==KIO::CC_CacheOnly) + m_dlg->rbOfflineMode->setChecked( true ); + else if (cc==KIO::CC_Cache) + m_dlg->rbCacheIfPossible->setChecked( true ); + + // Config changed notifications... + connect ( m_dlg->cbUseCache, SIGNAL(toggled(bool)), SLOT(configChanged()) ); + connect ( m_dlg->bgCachePolicy, SIGNAL(clicked (int)), SLOT(configChanged()) ); + connect ( m_dlg->sbMaxCacheSize, SIGNAL(valueChanged(int)), SLOT(configChanged()) ); + connect ( m_dlg->pbClearCache, SIGNAL(clicked()), SLOT(slotClearCache()) ); + emit changed( false ); +} + +void KCacheConfigDialog::save() +{ + KSaveIOConfig::setUseCache( m_dlg->cbUseCache->isChecked() ); + KSaveIOConfig::setMaxCacheSize( m_dlg->sbMaxCacheSize->value() ); + + if ( !m_dlg->cbUseCache->isChecked() ) + KSaveIOConfig::setCacheControl(KIO::CC_Refresh); + else if ( m_dlg->rbVerifyCache->isChecked() ) + KSaveIOConfig::setCacheControl(KIO::CC_Refresh); + else if ( m_dlg->rbOfflineMode->isChecked() ) + KSaveIOConfig::setCacheControl(KIO::CC_CacheOnly); + else if ( m_dlg->rbCacheIfPossible->isChecked() ) + KSaveIOConfig::setCacheControl(KIO::CC_Cache); + + // Update running io-slaves... + KSaveIOConfig::updateRunningIOSlaves (this); + + emit changed( false ); +} + +void KCacheConfigDialog::defaults() +{ + m_dlg->cbUseCache->setChecked( true ); + m_dlg->rbVerifyCache->setChecked( true ); + m_dlg->sbMaxCacheSize->setValue( DEFAULT_MAX_CACHE_SIZE ); +} + +QString KCacheConfigDialog::quickHelp() const +{ + return i18n( "

    Cache

    This module lets you configure your cache settings.

    " + "

    The cache is an internal memory in Konqueror where recently " + "read web pages are stored. If you want to retrieve a web " + "page again that you have recently read, it will not be " + "downloaded from the Internet, but rather retrieved from the " + "cache, which is a lot faster.

    " ); +} + +void KCacheConfigDialog::configChanged() +{ + emit changed( true ); +} + +void KCacheConfigDialog::slotClearCache() +{ + KProcess process; + process << "kio_http_cache_cleaner" << "--clear-all"; + process.start(KProcess::DontCare); + // Cleaning up might take a while. Better detach. + process.detach(); +} + +#include "cache.moc" diff --git a/kcontrol/kio/cache.desktop b/kcontrol/kio/cache.desktop new file mode 100644 index 000000000..c56f36a09 --- /dev/null +++ b/kcontrol/kio/cache.desktop @@ -0,0 +1,220 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/cache/index.html +Icon=cache +Exec=kcmshell cache + + +X-KDE-Library=kio +X-KDE-FactoryName=cache +X-KDE-ParentApp=kcontrol + +Name=Cache +Name[af]=Kas +Name[ar]=الخابية +Name[az]=Ön Yaddaş +Name[be]=Кэш +Name[bg]=Временна памет +Name[bn]=ক্যাশে (Cache) +Name[br]=Krubuilh +Name[ca]=Cau +Name[de]=Zwischenspeicher +Name[el]=Λανθάνουσα μνήμη +Name[eo]=Tenejo +Name[es]=Caché +Name[et]=Puhver +Name[eu]=Katxea +Name[fa]=نهانگاه +Name[fi]=Välimuisti +Name[fy]=Lyts ûnthâld +Name[ga]=Taisce +Name[gl]=Caché +Name[he]=מטמון +Name[hi]=कैश +Name[hr]=Pohrana +Name[hu]=Gyorstár +Name[is]=Skyndiminni +Name[ja]=キャッシュ +Name[ka]=ქეში +Name[kk]=Бүркеме +Name[km]=ឃ្លាំង​សម្ងាត់ +Name[ko]=캐시 +Name[lo]=ແຄຊ +Name[lt]=Krepšys +Name[lv]=Kešatmiņa +Name[mk]=Кеш +Name[mn]=Завсрын хадгалагч +Name[nb]=Mellomlager +Name[nds]=Twischenspieker +Name[ne]=क्यास +Name[nn]=Mellomlager +Name[nso]=Polokelo +Name[pa]=ਕੈਂਚੇ +Name[pl]=Bufor +Name[ru]=Кэш +Name[rw]=Ubwihisho +Name[se]=Gaskarájus +Name[sk]=Vyrovnávacia pamäť +Name[sl]=Prepomnilnik +Name[sr]=Кеш +Name[sr@Latn]=Keš +Name[ta]=தற்காலிக +Name[te]=కెష్ +Name[tg]=Кэш +Name[th]=แคช +Name[tr]=Önbellek +Name[tt]=Alxäter +Name[uk]=Кеш +Name[uz]=Kesh +Name[uz@cyrillic]=Кэш +Name[vi]=Bộ đệm +Name[wa]=Muchete +Name[xh]=Indawo yokugcina efihlakeleyo +Name[zh_CN]=缓存 +Name[zh_TW]=快取 +Comment=Configure web cache settings +Comment[af]=Konfigureer web kas instellings +Comment[ar]=إعداد الخابية للشبكة +Comment[az]=Veb ün yaddaş qurğuları +Comment[be]=Настаўленні сеціўнага кэша +Comment[bg]=Настройване на временната памет +Comment[bn]=ওয়েব ক্যাশে সেটিংস কনফিগার করুন +Comment[br]=Kefluniañ krubuilh ar gwiad +Comment[bs]=Podesite postavke web cache-a +Comment[ca]=Configura les opcions per al cau web +Comment[cs]=Nastavení cache pro webové stránky +Comment[csb]=Kònfigùracëjô nastôwù cache +Comment[cy]=Ffurfweddu gosodiadau'r storfa w? +Comment[da]=Indstil cache-opsætning +Comment[de]=Einstellungen zum Zwischenspeicher vornehmen +Comment[el]=Ρυθμίστε τη λανθάνουσα μνήμη ιστοσελίδων +Comment[eo]=Agordo de tenejo +Comment[es]=Preferencias del caché de web +Comment[et]=Veebi vahemälu seadistamine +Comment[eu]=Konfiguratu web katxearen ezarpenak +Comment[fa]=پیکربندی تنظیمات نهانگاه وب +Comment[fi]=WWW-välimuistin asetuksia +Comment[fr]=Configuration des réglages du cache web +Comment[fy]=Hjir kinne jo it lyts ûnthâld fan it web ynstelle +Comment[gl]=Configurar as opcións da caché web +Comment[he]=שינוי הגדרות המטמון +Comment[hi]=वेब कैश विन्यास कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje postavki web-pohrane +Comment[hu]=A webböngészési gyorstár beállításai +Comment[is]=Stilla skyndiminni fyrir vefflakk +Comment[it]=Configura le impostazioni della cache del web +Comment[ja]=ウェブキャッシュの設定 +Comment[ka]=ვებ კეშის პარამეტრების კონფიგურაცია +Comment[kk]=Веб бүркеме параметрлерін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​កំណត់​ឃ្លាំង​សម្ងាត់​បណ្ដាញ +Comment[ko]=웹 캐시 설정 +Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບແຄຊທີ່ນີ້ +Comment[lt]=Konfigūruokite žiniatinklio krepšio nustatymus +Comment[lv]=Šeit jūs varat konfigurēt tīmekļa kešatmiņas uzstādījumus +Comment[mk]=Конфигурирајте ги поставувањата за веб-кешот +Comment[mn]=Завсрын хадгалагч тохируулах +Comment[ms]=Konfigur seting cache web +Comment[mt]=Ikkonfigura l-cache tal-web +Comment[nb]=Tilpass vev-mellomlageret +Comment[nds]=Den Nett-Twischenspieker instellen +Comment[ne]=वेब क्यास सेटिङ कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de webcache instellen +Comment[nn]=Oppsett av vevmellomlager +Comment[nso]=Beakanya dipeakanyo tsa polokelo ya web +Comment[pa]=ਵੈੱਬ ਕੈਂਚੇ ਸੈਟਿੰਗ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja ustawień bufora (cache'a) +Comment[pt]=Configuração das opções da 'cache' da Web +Comment[pt_BR]=Configura as preferências de cache +Comment[ro]=Configurează setările cache-ului web +Comment[ru]=Настройка кэша +Comment[rw]=Kuboneza amagenamiterere y'ubwihisho bw'urubuga +Comment[se]=Heivet fierpmádatgaskarádjusa +Comment[sk]=Nastavenie vyrovnávacej pamäte pre WWW +Comment[sl]=Nastavitve spletnega predpomnilnika +Comment[sr]=Подешавање поставки веб кеша +Comment[sr@Latn]=Podešavanje postavki veb keša +Comment[sv]=Anpassa webbcacheinställningar +Comment[ta]=வலை தற்காலிக அமைப்புகளை வடிவமை +Comment[tg]=Танзимоти қароргоҳи пинҳонии интернет +Comment[th]=ปรับแต่งการตั้งค่าระบบแคช +Comment[tr]=Web önbellek ayarlarını buradan yapabilirsiniz +Comment[tt]=Alxäter caylawı +Comment[uk]=Налаштування установок кешу Тенет +Comment[uz]=Veb-kesh moslamalarini moslash +Comment[uz@cyrillic]=Веб-кэш мосламаларини мослаш +Comment[ven]=Dzudzanyani mavhekanyele a cache a webu +Comment[vi]=Cấu hình các thiết lập bộ đệm cho duyệt mạng +Comment[wa]=Fijhoz l' apontiaedje del muchete des pådjes waibe chal +Comment[xh]=Qwalasela izicwangciso ze web yendawo yokugcina efihlakeleyo +Comment[zh_CN]=配置网页缓存设置 +Comment[zh_TW]=設定網頁快取設定 +Comment[zu]=Hlanganisela izilungiselelo ze-cache ye-web +Keywords=Cache,History,Browsing History,Ports,Size +Keywords[ar]=الخابية,الخط الزمني,خط زمن التصفح,المنافذ,القياس الحجم,الذاكرة المخبئية,التأريخ,تأريخ المتصفح,المنافذ,الحجم +Keywords[az]=Kaşe,Keçmiş,Səyahət Keçmişi,Qapılar,Böyüklük +Keywords[be]=Кэш,Гісторыя,Гісторыя вандровак,Вандраванне,Парты,Памер,Cache,History,Browsing History,Ports,Size +Keywords[bg]=кеш, памет, временни, копия, страница, Cache, History, Browsing History, Ports, Size +Keywords[br]=Krubuilh,istor,furchal an istor,porzhioù,ment +Keywords[ca]=Cau,Historial,Historial de navegació,Ports,Mida +Keywords[cs]=Cache,Historie,Porty,Velikost +Keywords[csb]=cache,historëjô,historëjô przezéraniô,pòrtë,miara +Keywords[cy]=Storfa,Hanes,Hanes Pori,Pyrth,Maint +Keywords[da]=Cache,Historik,Netsøgningshistorik,Porte,Størrelse +Keywords[de]=Cache,Verlauf,History,Ports,Zwischenspeicher, Größe +Keywords[el]=Λανθάνουσα μνήμη,Ιστορικό,Ιστορικό περιήγησης,Θύρες,Μέγεθος +Keywords[eo]=Tenejo,Historio,TTT-umado,Pordoj,Grandeco +Keywords[es]=Caché,Historia,Historia de navegación,Puertos,Tamaño +Keywords[et]=cache,puhver,lehitsemise puhver,pordid,suurus +Keywords[eu]=Katxea,Historia,Arakaketa historia,Atakak,Neurria +Keywords[fa]=نهانگاه، تاریخچه، تاریخچۀ مرور، درگاهها، اندازه +Keywords[fi]=Välimuisti,Historia,Selailuhistoria,Portit,Koko +Keywords[fr]=Cache,historique,navigation de l'historique,ports,taille +Keywords[fy]=cache,lyts ûnthâld,history,Histoarje,grutte,Ynternet +Keywords[ga]=Taisce,Stair,Stair Brabhsála,Poirt,Méid +Keywords[gl]=Caché,Historial,Historial de Navegación,Portos,Tamaño +Keywords[he]=מטמון,היסטוריה,היסטוריית גלישה,יציאות,גודל,Cache,History,Browsing History,Ports,Size +Keywords[hi]=कैश,इतिहास,ब्राउज़िंग इतिहास,पोर्ट,आकार +Keywords[hr]=Cache,Pohrana,History,Povijest,Browsing History,Ports,Portovi,Size,Veličina,Povijest pretraživanja +Keywords[hu]=gyorstár,napló,böngészési napló,portok,méret +Keywords[is]=Skyndiminni,Saga,Vafrasaga,Gáttir,Stærð +Keywords[it]=cache,cronologia,navigazione,cronologia di navigazione,porte,dimensione +Keywords[ja]=キャッシュ,履歴,ブラウズの履歴,ポート,サイズ +Keywords[ka]=ქეში,ისტორია,მიმოხილვის ისტორია,პორტები,ზომა +Keywords[km]=ឃ្លាំង​សម្ងាត់,ប្រវត្តិ,ប្រវត្តិ​ការ​រុករក,ច្រក,ទំហំ +Keywords[lo]=ແຄຊ,ປະຫວັດການໃຊ້,ປະຫວັດການທ່ອງເວບประวัต,ພັອດ,ຂະຫນາດ +Keywords[lt]=Cache,History,Browsing History,Ports,Size, kešas,krepšys,žurnalas,istorija,naršymo žurnalas,naršymo istorija,portai,dydis +Keywords[mk]=Cache,History,Browsing History,Ports,Size,Кеш,Историја,Прелистување на историјата,Портови,Големина +Keywords[mn]=Cache,Түүх,History,Порт,Завсрын хадгалагч,Хэмжээ +Keywords[nb]=Mellomlager,Historie,Lesehistorie,Porter,Størrelse +Keywords[nds]=Twischenspieker,Vörgeschicht,Browsing History,Porten,Grött +Keywords[ne]=क्यास, इतिहास, ब्राउज इतिहास, पोर्ट, साइज +Keywords[nl]=cache,historie,geschiedenis,grootte,internet +Keywords[nn]=cache,mellomlager,historie,nettlesarhistorie,portar,storleik +Keywords[nso]=Polokelo,Histori,Hostori ya Boinyakisi,Maboemo,Bogolo +Keywords[pa]=ਅਕਾਰ,ਅਤੀਤ,ਝਲਕਾਰਾ,ਕੈਂਚੇ,ਪੋਰਟ +Keywords[pl]=cache,bufor,historia,historia przeglądania,porty,rozmiar +Keywords[pt]=Cache,Histórico,Histórico de Navegação,Portos,Tamanho +Keywords[pt_BR]=Cache,Histórico,Histórico de Navegação,Portas,Tamanho +Keywords[ro]=cache,istoric,navigare în istoric,porturi,mărime +Keywords[rw]=Ubwihisho,Amateka,Amateka yo Gucukumbura,Imiyoboro,Ingano +Keywords[se]=gaskarájus,historihkka,fierpmádatloganhistorihkka,verráhat,sturrodat +Keywords[sk]=Cache,Keš,vyrovnávacia pamäť,prehliadanie,história,porty,veľkosť +Keywords[sl]=predpomnilnik,zgodovina,zgodovina brskanja,vrata,velikost +Keywords[sr]=Кеш, Историјат, Прегледање историјата, Портови, Величина +Keywords[sr@Latn]=Keš, Istorijat, Pregledanje istorijata, Portovi, Veličina +Keywords[sv]=Cache,Historik,Webbläsningshistorik,Portar,Storlek +Keywords[ta]=தற்காலிக,வரலாறு,உலாவுதலின் வரலாறு,முனையங்கள்,அளவு +Keywords[th]=แคช,ประวัติการใช้,ประวัติการท่องเว็บ,พอร์ต,ขนาด +Keywords[tr]=Arabellek,Tarihçe,Gözatma Tarihçesi,Portlar +Keywords[uk]=кеш,історія, історія навігації,порти,розмір +Keywords[uz]=Kesh,Veb-sahifalar tarihi,Tarix,Portlar +Keywords[uz@cyrillic]=Кэш,Веб-саҳифалар тариҳи,Тарих,Портлар +Keywords[ven]=Cache,Divhazwakale,Divahzwakale ya Burausini,Ports,Saizi +Keywords[vi]=Đệm,Lịch sử,Lịch sử duyệt,Cổng,Cỡ +Keywords[wa]=Muchete,Istwere,Istwere do foytaedje,Pôrts,Grandeu +Keywords[xh]=Indawo yokugcina, Imbali, imbali Yokhangelo zincwadi, Amazibuko, Ubungakanani +Keywords[zh_CN]=Cache,History,Browsing History,Ports,Size,缓存,历史 +Keywords[zh_TW]=Cache,History,Browsing History,Ports,Size,快取 +Keywords[zu]=Cache,Umlando,Umlando wokucinga,Izikhumulo,Usayizi + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/kio/cache.h b/kcontrol/kio/cache.h new file mode 100644 index 000000000..d2d12e5e2 --- /dev/null +++ b/kcontrol/kio/cache.h @@ -0,0 +1,50 @@ +/* + cache.h - Proxy configuration dialog + + Copyright (C) 2001,02,03 Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 CACHE_H +#define CACHE_H + +#include + +class CacheDlgUI; + +class KCacheConfigDialog : public KCModule +{ + Q_OBJECT + +public: + KCacheConfigDialog( QWidget* parent = 0 ); + ~KCacheConfigDialog() {}; + + virtual void load(); + virtual void save(); + virtual void defaults(); + QString quickHelp() const; + +protected slots: + void configChanged(); + void slotClearCache(); + +private: + CacheDlgUI* m_dlg; +}; + +#endif // CACHE_H diff --git a/kcontrol/kio/cache_ui.ui b/kcontrol/kio/cache_ui.ui new file mode 100644 index 000000000..c0e504057 --- /dev/null +++ b/kcontrol/kio/cache_ui.ui @@ -0,0 +1,187 @@ + +CacheDlgUI + + + CacheDlgUI + + + + 0 + 0 + 424 + 172 + + + + + unnamed + + + 1 + + + + spacer1 + + + Horizontal + + + Fixed + + + + 16 + 21 + + + + + + lbMaxCacheSize + + + false + + + Disk cache &size: + + + sbMaxCacheSize + + + + + sbMaxCacheSize + + + false + + + 1 + + + 999999 + + + KB + + + + + pbClearCache + + + false + + + C&lear Cache + + + + + spacer2 + + + Horizontal + + + MinimumExpanding + + + + 0 + 21 + + + + + + cbUseCache + + + &Use cache + + + Check this box if you want the web pages you visit to be stored on your hard disk for quicker access. The stored pages will only be updated as needed instead of on every visit to that site. This is especially useful if you have a slow connection to the Internet. + + + + + bgCachePolicy + + + false + + + Policy + + + + unnamed + + + + rbVerifyCache + + + &Keep cache in sync + + + Verify whether the cached web page is valid before attempting to fetch the web page again. + + + + + rbCacheIfPossible + + + Use cache whenever &possible + + + Always use documents from the cache when available. You can still use the reload button to synchronize the cache with the remote host. + + + + + rbOfflineMode + + + O&ffline browsing mode + + + Do not fetch web pages that are not already stored in the cache. Offline mode prevents you from viewing pages that you have not previously visited. + + + + + + + + + cbUseCache + toggled(bool) + bgCachePolicy + setEnabled(bool) + + + cbUseCache + toggled(bool) + lbMaxCacheSize + setEnabled(bool) + + + cbUseCache + toggled(bool) + sbMaxCacheSize + setEnabled(bool) + + + cbUseCache + toggled(bool) + pbClearCache + setEnabled(bool) + + + + diff --git a/kcontrol/kio/cookies.desktop b/kcontrol/kio/cookies.desktop new file mode 100644 index 000000000..206dd3a92 --- /dev/null +++ b/kcontrol/kio/cookies.desktop @@ -0,0 +1,215 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/cookies/index.html +Icon=cookie +Exec=kcmshell cookies + + +X-KDE-Library=kio +X-KDE-FactoryName=cookie +X-KDE-ParentApp=kcontrol + +Name=Cookies +Name[af]=Koekies +Name[ar]=الكعكات +Name[az]=Kökələr (Cookies) +Name[bg]=Бисквитки +Name[bn]=কুকি +Name[br]=Toupinoù +Name[bs]=Kolačići +Name[ca]=Galetes +Name[csb]=Kùszczi +Name[cy]=Cwcis +Name[da]=Cookier +Name[eo]=Kuketoj +Name[et]=Küpsised +Name[eu]=Cookie-ak +Name[fa]=کوکیها +Name[fi]=Evästeet +Name[fy]=Koekjes +Name[ga]=Fianáin +Name[he]=עוגיות +Name[hi]=कुकीज़ +Name[hr]=Kolačići +Name[hu]=Cookie-k +Name[is]=Smákökur +Name[it]=Cookie +Name[ja]=クッキー +Name[ka]=ქუქები +Name[km]=ខូគី +Name[ko]=쿠키 +Name[lo]=ຄຸກກີ້ +Name[lt]=Slapukai +Name[lv]=Cepumi +Name[mk]=Колачиња +Name[nb]=Informasjonskapsler +Name[nds]=Kookjes +Name[ne]=कुकी +Name[nn]=Informasjonskapslar +Name[nso]=Di-Cookie +Name[pa]=ਕੂਕੀਜ਼ +Name[pl]=Ciasteczka +Name[ro]=Cookie-uri +Name[rw]=Inyandikonyakwirema +Name[se]=Diehtočoahkku +Name[sl]=Piškotki +Name[sr]=Колачићи +Name[sr@Latn]=Kolačići +Name[sv]=Kakor +Name[ta]=தற்காலிக நினைவுகள் +Name[te]=కుకిస్ +Name[th]=คุกกี้ +Name[tr]=Çerezler +Name[tt]=Cookie +Name[uk]=Куки +Name[uz]=Kukilar +Name[uz@cyrillic]=Кукилар +Name[wa]=Coukes + +Comment=Configure the way cookies work +Comment[af]=Konfigureer die weg koekies werk +Comment[ar]=إعداد أسلوب العمل للكعكات +Comment[az]=Kökələrin işləmə yollarını quraşdır +Comment[be]=Наставіць cookies +Comment[bg]=Настройване на бисквитките +Comment[bn]=কুকি কনফিগার করুন +Comment[br]=Kefluniañ peseurt mod e labour an toupinoù +Comment[bs]=Podesite način rada cookie-ja +Comment[ca]=Configura com treballaran les galetes +Comment[cs]=Nastavení chování cookies +Comment[csb]=Kònfigùracëjô dzéjaniô kùszków (cookies) +Comment[cy]=Ffurfweddu'r ffordd y mae cwcis yn gweithio +Comment[da]=Indstil den måde cookier virker +Comment[de]=Einstellungen zu Cookies vornehmen +Comment[el]=Ρυθμίστε τον τρόπο με τον οποίο δουλεύουν τα cookies +Comment[eo]=Agordo de kuketoj +Comment[es]=Configuración del funcionamiento de las cookies +Comment[et]=Küpsiste käitumise seadistamine +Comment[eu]=Konfiguratu cookien portaera +Comment[fa]=پیکربندی روش کار کردن کوکیها +Comment[fi]=Evästeiden toiminta +Comment[fr]=Configuration de la manière dont les cookies fonctionnent +Comment[fy]=Hjir kinne jo de wurkwize fan koekjes ynstelle +Comment[gl]=Configurar o funcionamento das cookies +Comment[he]=שינוי הגדרות פעולת העוגיות +Comment[hi]=कुकीज़ के कार्य करने के ढंग कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje funkcioniranja kolačića +Comment[hu]=A cookie-k beállításai +Comment[is]=Stilla hvernig tekið er við smákökum +Comment[it]=Configurazione del funzionamento dei cookie +Comment[ja]=クッキーの扱いを設定 +Comment[kk]=Cookies жұмысын баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​របៀប​ដែល​ខូគី​ដំណើរការ +Comment[ko]=쿠키 작동 방법을 설정합니다 +Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບແຄຊທີ່ນີ້ +Comment[lt]=Čia galite keisti slapukų veikimą +Comment[lv]=Šeit jūs varat konfigurēt cepumus +Comment[mk]=Конфигурирајте го начинот на кој работат колачињата +Comment[mn]=Cookies ажлыг тохируулах +Comment[ms]=Konfigur cara cookies berfungsi +Comment[mt]=Ikkonfigura kif jaħdmu l-"cookies" +Comment[nb]=Oppsett av informasjonskapsler +Comment[nds]=Instellen, woans de Kookjes funkscheneert +Comment[ne]=कुकीको कार्य तरिका कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u het cookiesbeleid instellen +Comment[nn]=Oppsett av informasjonskapslar +Comment[nso]=Beakanya kamokgwa wo di-cookies di berekago kagona +Comment[pa]=ਕੂਕੀਜ਼ ਕੰਮ ਦੇ ਢੰਗ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja działania ciasteczek (cookies) +Comment[pt]=Configuração da forma como os 'cookies' funcionam +Comment[pt_BR]=Configura a maneira como os cookies funcionarão +Comment[ro]=Configurează modul în care acționează cookie-urile +Comment[ru]=Настройка cookies +Comment[rw]=Kuboneza uburyo inyandikonyakwirema zikora +Comment[se]=Diehtočoahkkoheivehusat +Comment[sk]=Nastavenie podpory cookies +Comment[sl]=Nastavitve delovanja piškotkov +Comment[sr]=Подешавање начина на који раде колачићи +Comment[sr@Latn]=Podešavanje načina na koji rade kolačići +Comment[sv]=Anpassa hur kakor fungerar +Comment[ta]=தற்காலிக நினைவகங்கள் வேலையை வடிவமை +Comment[tg]=Мизроб кардани cookies +Comment[th]=ปรับแต่งวิธีการทำงานของคุกกี้ +Comment[tr]=Çerezlerin çalışmasını yapılandırır +Comment[tt]=Cookies caylawı +Comment[uk]=Налаштування механізму кук +Comment[uz]=Kukilar ishlashini moslash +Comment[uz@cyrillic]=Кукилар ишлашини мослаш +Comment[ven]=Dzudzanyani ndila ine cookies dza shuma ngayo +Comment[vi]=Cấu hình cách cookies hoạt động +Comment[wa]=Apontyî l' dujhance des coukes +Comment[xh]=Qwalasela indlela ezisebenza ngayo i cookies +Comment[zh_CN]=配置 cookies 相关设置 +Comment[zh_TW]=設定 cookies 運作方式 +Comment[zu]=Hlanganisela indlela i-cookies esebenza ngayo + +Keywords=Cookies,Browsing,Internet,WWW,Network,Policy,Domains +Keywords[ar]=الكعكات,التصفح,الإنترنت,الشبكة العالمية,الشبكة,السياسة,أسماء النطاقات +Keywords[az]=Kökələr,Darama,İnternet,WWW,Şəbəkə,Sahə +Keywords[be]="Печыва",Вандроўка,Вандраванне,Інтэрнэт,Сетка,Правілы,Домены,Cookies,Browsing,Internet,WWW,Network,Policy,Domains +Keywords[bg]=бисквитка, бисквитки, Интернет, сърфиране, сесия, сигурност, Cookies, Browsing, Internet, WWW, Network, Policy, Domains +Keywords[ca]=Galetes,fullejar,Internet,WWW,Xarxa,Política,Dominis +Keywords[cs]=Cookie,Prohlížení,Internet,WWW,Síť,Domény +Keywords[csb]=kùszczi,przezéranié,Internet,WWW,séc,reglë,domenë +Keywords[cy]=Cwcis,Pori,Rhyngrwyd,WWW,Rhwydwaith,Polisi,Parthau +Keywords[da]=Cookier,Netsøgning,Internet,www,Netværk,Politik,Domæner +Keywords[de]=Cookies,Durchsuchen,Browsen,Surfen,Internet,WWW,Netzwerk,Regelungen,Domains +Keywords[el]=Cookies,Περιήγηση,Διαδίκτυο,WWW,Δίκτυο,Πολιτική,Τομείς +Keywords[eo]=kuketoj,TTT,Interreto,WWW,reto,konduto,retregionoj +Keywords[es]=Cookies,Navegación,Internet,WWW,Red,Política,Dominios +Keywords[et]=küpsised,lehitsemine,Internet,WWW,võrk,reeglid,domeenid +Keywords[eu]=Cookie-ak,Arakaketa,Internet,WWW,Sarea,Arautegia,Domeinuak +Keywords[fa]=کوکیها، مرور، اینترنت، WWW، شبکه، سیاست، دامنه‌ها +Keywords[fi]=Evästeet,Selailu,Internet,WWW,Verkko,Politiikka,Verkkoalueet +Keywords[fr]=Cookies,navigation,internet,WWW,Web,réseau,règle,politique,domaine +Keywords[fy]=Koekjes,blêdzjen,ynternet,www,netwurk,wurkwize,domeinen +Keywords[ga]=Fianán,Brabhsáil,Idirlíon,WWW,Líonra,Polasaí,Fearainn +Keywords[gl]=Cookies,Navegación,Internet,WWW,Rede,Política,Dominios +Keywords[he]=עוגיות,גלישה,אינטרנט,WWW,רשת,מדיניות,תחומים, Cookies,Browsing,Internet,Network,Policy,Domains +Keywords[hi]=कुकीज़,ब्राउजिंग,इंटरनेट,डब्ल्यूडब्ल्यूडब्ल्यू,नेटवर्क,पालिसी,डोमेन्स +Keywords[hr]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,Kolačići,Domene,Mreža,Pravila,Pregledavanje,Pretraživanje +Keywords[hu]=cookie-k,böngészés,internet,WWW,hálózat,házirend,tartományok +Keywords[id]=Cookies,Browsing,Internet,WWW,Jaringan,Policy,Domains +Keywords[is]=Smákökur,Flakk,Flakkari,Vafr,Vafri,Vefurinn,Netið,lén +Keywords[it]=cookie,navigazione,Internet,WWW,rete,politica,domini +Keywords[ja]=クッキー,ブラウス,インターネット,WWW,ネットワーク,ポリシー,ドメイン +Keywords[ka]=ქუქები,მიმოხილვა,ინტერნეტი,WWW,ქსელი,პოლისი,დომენები +Keywords[km]=ខូគី,រុករក,អ៊ិនធឺណិត,វើលវ៉ាយវិប,បណ្ដាញ,ភាព​ឯកជន,ដែន +Keywords[lo]=ຄຸກກີ້,ການຮງກເບິ່ງເວບເພດ,ອິນເຕີເນັດ,WWW,ລະບົບເຄືອຂ່າຍ, ຂໍ້ກຳນົດ,ໂດເມນ +Keywords[lt]=Slapukai,Naršymas,Internetas,WWW,Tinklas,Taisyklės,Sritys +Keywords[lv]=Cepumi,Pārlūkošana,Internets,WWW,Tīkls,Politika,Domēni +Keywords[mk]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,Колачиња,Прелистување,Интернет,Мрежа,Политика,Домени +Keywords[mn]=Cookies,Нэгжих,Browsing,Тэнэх,Интернэт,WWW,Сүлжээ,Дүрмүүд,Домайн +Keywords[nb]=cookies,informasjonskapsler,surfing,internett,WWW,verdensveven,nettverk,praksis,domene +Keywords[nds]=Kookjes,Nettkieken,Internet,WWW,Nettwark,Regel,Domänen +Keywords[ne]=कुकी,ब्राउजिङ, इन्टरनेट, WWW, सञ्जाल, नीति, डोमेन +Keywords[nl]=cookies,browsing,internet,www,netwerk,beleid,domeinen +Keywords[nn]=cookies,informasjonskapslar,surfing,internett,WWW,verdsveven,nettverk,praksis,domene +Keywords[nso]=Di-Cookies,Boinyakisi,Internet,WWW,Kgokagano,Molao,Ditikologo +Keywords[pa]=Cookies,Browsing,Internet,WWW,Network,ਨੀਤੀ, ਡੋਮੇਨ,ਇੰਟਰਨੈਟ +Keywords[pl]=ciasteczka,przeglądanie,Internet,WWW,sieć,zasady,domeny +Keywords[pt]=cookies,navegação,internet,WWW,rede,política,domínios +Keywords[pt_BR]=Cookies,Navegação,Internet,WWW,Rede,Política,Domínios +Keywords[ro]=cookies,navigare,Internet,WWW,rețea,politici,domenii +Keywords[rw]=Inyandikonyakwirema,Gucukumbura,Interineti,WWW,Urusobemiyoboro,Politiki,Indangarubuga +Keywords[se]=diehtočoahkku,bláđđen,fierpmádat,WWW,fierbmi,geavat,domeana +Keywords[sk]=Cookies,Prehliadanie, Internet, WWW, Sieť,Politika,Domény +Keywords[sl]=piškotki,brskanje,internet,splet,WWW,omrežje,politika,domene +Keywords[sr]=Cookies,Browsing,Интернет,WWW,Network,Policy,Domains,колачићи,Прегледање,мрежа,полиса,домени +Keywords[sr@Latn]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,kolačići,Pregledanje,mreža,polisa,domeni +Keywords[sv]=Kakor,Surfning,Internet,WWW,Nätverk,Policy,Domäner +Keywords[ta]=தற்காலிக நினைவகம்,உலாவுதல்,இணையம்t,WWW,வலைப்பின்னல்,கொள்கை,வலைதளங்கள் +Keywords[th]=คุกกี้,การเรียกดูเว็บเพจ,อินเทอร์เน็ต,WWW,ระบบเครือข่าย,ข้อกำหนด,โดเมน +Keywords[tr]=Çerezler,Tarama,İnternet,WWW,Ağ,Alan +Keywords[uk]=куки,навігація,Internet,Інтернет,WWW,мережа,правила,домени,Тенета +Keywords[uz]=Kukilar,Internet,WWW,Tarmoq,Qoida,Domenlar +Keywords[uz@cyrillic]=Кукилар,Интернет,WWW,Тармоқ,Қоида,Доменлар +Keywords[ven]=Cookies,Burousini.Inithenete,WWW +EnvVarProxyDlgUI + + + EnvVarProxyDlgUI + + + + 0 + 0 + 438 + 133 + + + + + unnamed + + + 0 + + + + leFtp + + + <qt> +Enter the name of the environment variable, e.g. <b>FTP_PROXY</b>, used to store the address of the FTP proxy server.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt an automatic discovery of this variable. +</qt> + + + + + leHttp + + + <qt> +Enter the name of the environment variable, e.g. <b>HTTP_PROXY</b>, used to store the address of the HTTP proxy server.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt automatic discovery of this variable. +</qt> + + + + + lbFtp + + + &FTP: + + + leFtp + + + <qt> +Enter the name of the environment variable, e.g. <b>FTP_PROXY</b>, used to store the address of the FTP proxy server.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt an automatic discovery of this variable. +</qt> + + + + + lbHttps + + + HTTP&S: + + + leHttps + + + <qt> +Enter the name of the environment variable, e.g. <b>HTTPS_PROXY</b>, used to store the address of the HTTPS proxy server.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt an automatic discovery of this variable. +</qt> + + + + + cbShowValue + + + Show the &value of the environment variables + + + + + pbVerify + + + &Verify + + + <qt>Verify whether or not the environment variable names you supplied are valid. If an environment variable is not found, the associated labels will be <b>highlighted</b> to indicate that they are invalid.</qt> + + + + + pbDetect + + + Auto &Detect + + + <qt>Attempt automatic discovery of the environment variables used for setting system wide proxy information.<p> This feature works by searching for commonly used variable names such as HTTP_PROXY, FTP_PROXY and NO_PROXY.</qt> + + + + + lbHttp + + + H&TTP: + + + leHttp + + + <qt> +Enter the name of the environment variable, e.g. <b>HTTP_PROXY</b>, used to store the address of the HTTP proxy server.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt automatic discovery of this variable. +</qt> + + + + + leHttps + + + <qt> +Enter the name of the environment variable, e.g. <b>HTTPS_PROXY</b>, used to store the address of the HTTPS proxy server.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt an automatic discovery of this variable. +</qt> + + + + + leNoProxy + + + <qt> +Enter the environment variable, e.g. <b>NO_PROXY</b>, used to store the addresses of sites for which the proxy server should not be used.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt an automatic discovery of this variable. +</qt> + + + + + lbNoProxy + + + NO &PROXY: + + + leNoProxy + + + <qt> +Enter the environment variable, e.g. <b>NO_PROXY</b>, used to store the addresses of sites for which the proxy server should not be used.<p> +Alternatively, you can click on the <b>"Auto Detect"</b> button to attempt an automatic discovery of this variable. +</qt> + + + + + + leHttp + leHttps + leFtp + leNoProxy + pbVerify + pbDetect + + + diff --git a/kcontrol/kio/fakeuaprovider.cpp b/kcontrol/kio/fakeuaprovider.cpp new file mode 100644 index 000000000..08949c27b --- /dev/null +++ b/kcontrol/kio/fakeuaprovider.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2001 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + + +#include +#include +#include + +#include "fakeuaprovider.h" + +#define UA_PTOS(x) (*it)->property(x).toString() +#define QFL(x) QString::fromLatin1(x) + +FakeUASProvider::FakeUASProvider() +{ + m_bIsDirty = true; +} + +FakeUASProvider::StatusCode FakeUASProvider::createNewUAProvider( const QString& uaStr ) +{ + QStringList split; + int pos = (uaStr).find("::"); + + if ( pos == -1 ) + { + pos = (uaStr).find(':'); + if ( pos != -1 ) + { + split.append(uaStr.left(pos)); + split.append(uaStr.mid(pos+1)); + } + } + else + { + split = QStringList::split("::", uaStr); + } + + if ( m_lstIdentity.contains(split[1]) ) + return DUPLICATE_ENTRY; + else + { + int count = split.count(); + m_lstIdentity.append( split[1] ); + if ( count > 2 ) + m_lstAlias.append(split[2]); + else + m_lstAlias.append( split[1]); + } + + return SUCCEEDED; +} + +void FakeUASProvider::loadFromDesktopFiles() +{ + m_providers.clear(); + m_providers = KTrader::self()->query("UserAgentStrings"); +} + +void FakeUASProvider::parseDescription() +{ + QString tmp; + + KTrader::OfferList::ConstIterator it = m_providers.begin(); + KTrader::OfferList::ConstIterator lastItem = m_providers.end(); + + for ( ; it != lastItem; ++it ) + { + tmp = UA_PTOS("X-KDE-UA-FULL"); + + if ( (*it)->property("X-KDE-UA-DYNAMIC-ENTRY").toBool() ) + { + struct utsname utsn; + uname( &utsn ); + + tmp.replace( QFL("appSysName"), QString(utsn.sysname) ); + tmp.replace( QFL("appSysRelease"), QString(utsn.release) ); + tmp.replace( QFL("appMachineType"), QString(utsn.machine) ); + + QStringList languageList = KGlobal::locale()->languageList(); + if ( languageList.count() ) + { + QStringList::Iterator it = languageList.find( QString::fromLatin1("C") ); + if( it != languageList.end() ) + { + if( languageList.contains( QString::fromLatin1("en") ) > 0 ) + languageList.remove( it ); + else + (*it) = QString::fromLatin1("en"); + } + } + + tmp.replace( QFL("appLanguage"), QString("%1").arg(languageList.join(", ")) ); + tmp.replace( QFL("appPlatform"), QFL("X11") ); + } + + // Ignore dups... + if ( m_lstIdentity.contains(tmp) ) + continue; + + m_lstIdentity << tmp; + + tmp = QString("%1 %2").arg(UA_PTOS("X-KDE-UA-SYSNAME")).arg(UA_PTOS("X-KDE-UA-SYSRELEASE")); + if ( tmp.stripWhiteSpace().isEmpty() ) + tmp = QString("%1 %2").arg(UA_PTOS("X-KDE-UA-" + "NAME")).arg(UA_PTOS("X-KDE-UA-VERSION")); + else + tmp = QString("%1 %2 on %3").arg(UA_PTOS("X-KDE-UA-" + "NAME")).arg(UA_PTOS("X-KDE-UA-VERSION")).arg(tmp); + + m_lstAlias << tmp; + } + + m_bIsDirty = false; +} + +QString FakeUASProvider::aliasStr( const QString& name ) +{ + int id = userAgentStringList().findIndex(name); + if ( id == -1 ) + return QString::null; + else + return m_lstAlias[id]; +} + +QString FakeUASProvider::agentStr( const QString& name ) +{ + int id = userAgentAliasList().findIndex(name); + if ( id == -1 ) + return QString::null; + else + return m_lstIdentity[id]; +} + + +QStringList FakeUASProvider::userAgentStringList() +{ + if ( m_bIsDirty ) + { + loadFromDesktopFiles(); + if ( !m_providers.count() ) + return QStringList(); + parseDescription(); + } + return m_lstIdentity; +} + +QStringList FakeUASProvider::userAgentAliasList () +{ + if ( m_bIsDirty ) + { + loadFromDesktopFiles(); + if ( !m_providers.count() ) + return QStringList(); + parseDescription(); + } + return m_lstAlias; +} + diff --git a/kcontrol/kio/fakeuaprovider.h b/kcontrol/kio/fakeuaprovider.h new file mode 100644 index 000000000..fedf155bf --- /dev/null +++ b/kcontrol/kio/fakeuaprovider.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __FAKE_UAS_PROVIDER_H___ +#define __FAKE_UAS_PROVIDER_H___ + +#include + +class QString; +class QStringList; + +class FakeUASProvider +{ +public: + enum StatusCode { + SUCCEEDED=0, + ALREADY_EXISTS, + DUPLICATE_ENTRY + }; + + FakeUASProvider(); + ~FakeUASProvider(){}; + + StatusCode createNewUAProvider( const QString& ); + QString aliasStr( const QString& ); + QString agentStr( const QString& ); + QStringList userAgentStringList(); + QStringList userAgentAliasList(); + bool isListDirty() const { return m_bIsDirty; } + void setListDirty( bool dirty ) { m_bIsDirty = dirty; } + +protected: + void loadFromDesktopFiles(); + void parseDescription(); + +private: + KTrader::OfferList m_providers; + QStringList m_lstIdentity; + QStringList m_lstAlias; + bool m_bIsDirty; +}; +#endif diff --git a/kcontrol/kio/kcookiesmain.cpp b/kcontrol/kio/kcookiesmain.cpp new file mode 100644 index 000000000..f25a28011 --- /dev/null +++ b/kcontrol/kio/kcookiesmain.cpp @@ -0,0 +1,99 @@ +// kcookiesmain.cpp - Cookies configuration +// +// First version of cookies configuration by Waldo Bastian +// This dialog box created by David Faure + +#include +#include + +#include +#include +#include +#include +#include + +#include "kcookiesmain.h" +#include "kcookiespolicies.h" +#include "kcookiesmanagement.h" + +KCookiesMain::KCookiesMain(QWidget *parent) + : KCModule(parent, "kcmkio") +{ + management = 0; + bool managerOK = true; + + DCOPReply reply = DCOPRef( "kded", "kded" ).call( "loadModule", + QCString( "kcookiejar" ) ); + + if( !reply.isValid() ) + { + managerOK = false; + kdDebug(7103) << "kcm_kio: KDED could not load KCookiejar!" << endl; + KMessageBox::sorry(0, i18n("Unable to start the cookie handler service.\n" + "You will not be able to manage the cookies that " + "are stored on your computer.")); + } + + QVBoxLayout *layout = new QVBoxLayout(this); + tab = new QTabWidget(this); + layout->addWidget(tab); + + policies = new KCookiesPolicies(this); + tab->addTab(policies, i18n("&Policy")); + connect(policies, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + + if( managerOK ) + { + management = new KCookiesManagement(this); + tab->addTab(management, i18n("&Management")); + connect(management, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + } +} + +KCookiesMain::~KCookiesMain() +{ +} + +void KCookiesMain::load() +{ + policies->load(); + if( management ) + management->load(); +} + +void KCookiesMain::save() +{ + policies->save(); + if ( management ) + management->save(); +} + +void KCookiesMain::defaults() +{ + KCModule* module = static_cast(tab->currentPage()); + + if ( module == policies ) + policies->defaults(); + else if( management ) + management->defaults(); +} + +QString KCookiesMain::quickHelp() const +{ + return i18n("

    Cookies

    Cookies contain information that Konqueror" + " (or other KDE applications using the HTTP protocol) stores on your" + " computer, initiated by a remote Internet server. This means that" + " a web server can store information about you and your browsing activities" + " on your machine for later use. You might consider this an invasion of" + " privacy.

    However, cookies are useful in certain situations. For example, they" + " are often used by Internet shops, so you can 'put things into a shopping basket'." + " Some sites require you have a browser that supports cookies.

    " + " Because most people want a compromise between privacy and the benefits cookies offer," + " KDE offers you the ability to customize the way it handles cookies. So you might want" + " to set KDE's default policy to ask you whenever a server wants to set a cookie," + " allowing you to decide. For your favorite shopping web sites that you trust, you might" + " want to set the policy to accept, then you can access the web sites without being prompted" + " every time KDE receives a cookie." ); +} + +#include "kcookiesmain.moc" diff --git a/kcontrol/kio/kcookiesmain.h b/kcontrol/kio/kcookiesmain.h new file mode 100644 index 000000000..fef111100 --- /dev/null +++ b/kcontrol/kio/kcookiesmain.h @@ -0,0 +1,37 @@ +// kcookiesmain.h - Cookies configuration +// +// First version of cookies configuration by Waldo Bastian +// This dialog box created by David Faure + +#ifndef __KCOOKIESMAIN_H +#define __KCOOKIESMAIN_H + +#include + +class QTabWidget; +class DCOPClient; +class KCookiesPolicies; +class KCookiesManagement; + +class KCookiesMain : public KCModule +{ + Q_OBJECT +public: + KCookiesMain(QWidget *parent = 0L); + ~KCookiesMain(); + + KCookiesPolicies* policyDlg() { return policies; } + + virtual void load(); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + +private: + + QTabWidget* tab; + KCookiesPolicies* policies; + KCookiesManagement* management; +}; + +#endif // __KCOOKIESMAIN_H diff --git a/kcontrol/kio/kcookiesmanagement.cpp b/kcontrol/kio/kcookiesmanagement.cpp new file mode 100644 index 000000000..58e983439 --- /dev/null +++ b/kcontrol/kio/kcookiesmanagement.cpp @@ -0,0 +1,489 @@ +/** + * kcookiesmanagement.cpp - Cookies manager + * + * Copyright 2000-2001 Marco Pinelli + * Copyright (c) 2000-2001 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kcookiesmain.h" +#include "kcookiespolicies.h" +#include "kcookiesmanagement.h" +#include "kcookiesmanagementdlg_ui.h" + +#include + +struct CookieProp +{ + QString host; + QString name; + QString value; + QString domain; + QString path; + QString expireDate; + QString secure; + bool allLoaded; +}; + +CookieListViewItem::CookieListViewItem(QListView *parent, QString dom) + :QListViewItem(parent) +{ + init( 0, dom ); +} + +CookieListViewItem::CookieListViewItem(QListViewItem *parent, CookieProp *cookie) + :QListViewItem(parent) +{ + init( cookie ); +} + +CookieListViewItem::~CookieListViewItem() +{ + delete mCookie; +} + +void CookieListViewItem::init( CookieProp* cookie, QString domain, + bool cookieLoaded ) +{ + mCookie = cookie; + mDomain = domain; + mCookiesLoaded = cookieLoaded; +} + +CookieProp* CookieListViewItem::leaveCookie() +{ + CookieProp *ret = mCookie; + mCookie = 0; + return ret; +} + +QString CookieListViewItem::text(int f) const +{ + if (mCookie) + return f == 0 ? QString::null : KIDNA::toUnicode(mCookie->host); + else + return f == 0 ? KIDNA::toUnicode(mDomain) : QString::null; +} + +KCookiesManagement::KCookiesManagement(QWidget *parent) + : KCModule(parent, "kcmkio") +{ + // Toplevel layout + QVBoxLayout* mainLayout = new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + + dlg = new KCookiesManagementDlgUI (this); + + dlg->tbClearSearchLine->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase")); + dlg->kListViewSearchLine->setListView(dlg->lvCookies); + + mainLayout->addWidget(dlg); + dlg->lvCookies->setSorting(0); + + connect(dlg->lvCookies, SIGNAL(expanded(QListViewItem*)), SLOT(getCookies(QListViewItem*)) ); + connect(dlg->lvCookies, SIGNAL(selectionChanged(QListViewItem*)), SLOT(showCookieDetails(QListViewItem*)) ); + + connect(dlg->pbDelete, SIGNAL(clicked()), SLOT(deleteCookie())); + connect(dlg->pbDeleteAll, SIGNAL(clicked()), SLOT(deleteAllCookies())); + connect(dlg->pbReload, SIGNAL(clicked()), SLOT(getDomains())); + connect(dlg->pbPolicy, SIGNAL(clicked()), SLOT(doPolicy())); + + connect(dlg->lvCookies, SIGNAL(doubleClicked (QListViewItem *)), SLOT(doPolicy())); + deletedCookies.setAutoDelete(true); + m_bDeleteAll = false; + mainWidget = parent; + + load(); +} + +KCookiesManagement::~KCookiesManagement() +{ +} + +void KCookiesManagement::load() +{ + reset(); + getDomains(); +} + +void KCookiesManagement::save() +{ + // If delete all cookies was requested! + if(m_bDeleteAll) + { + if(!DCOPRef("kded", "kcookiejar").send("deleteAllCookies")) + { + QString caption = i18n ("DCOP Communication Error"); + QString message = i18n ("Unable to delete all the cookies as requested."); + KMessageBox::sorry (this, message,caption); + return; + } + m_bDeleteAll = false; // deleted[Cookies|Domains] have been cleared yet + } + + // Certain groups of cookies were deleted... + QStringList::Iterator dIt = deletedDomains.begin(); + while( dIt != deletedDomains.end() ) + { + QByteArray call; + QByteArray reply; + QCString replyType; + QDataStream callStream(call, IO_WriteOnly); + callStream << *dIt; + + if( !DCOPRef("kded", "kcookiejar").send("deleteCookiesFromDomain", (*dIt)) ) + { + QString caption = i18n ("DCOP Communication Error"); + QString message = i18n ("Unable to delete cookies as requested."); + KMessageBox::sorry (this, message,caption); + return; + } + + dIt = deletedDomains.remove(dIt); + } + + // Individual cookies were deleted... + bool success = true; // Maybe we can go on... + QDictIterator cookiesDom(deletedCookies); + + while(cookiesDom.current()) + { + CookiePropList *list = cookiesDom.current(); + QPtrListIterator cookie(*list); + + while(*cookie) + { + if( !DCOPRef("kded", "kcookiejar").send("deleteCookie",(*cookie)->domain, + (*cookie)->host, (*cookie)->path, + (*cookie)->name) ) + { + success = false; + break; + } + + list->removeRef(*cookie); + } + + if(!success) + break; + + deletedCookies.remove(cookiesDom.currentKey()); + } + + emit changed( false ); +} + +void KCookiesManagement::defaults() +{ + reset(); + getDomains(); + emit changed (false); +} + +void KCookiesManagement::reset() +{ + m_bDeleteAll = false; + clearCookieDetails(); + dlg->lvCookies->clear(); + deletedDomains.clear(); + deletedCookies.clear(); + dlg->pbDelete->setEnabled(false); + dlg->pbDeleteAll->setEnabled(false); + dlg->pbPolicy->setEnabled(false); +} + +void KCookiesManagement::clearCookieDetails() +{ + dlg->leName->clear(); + dlg->leValue->clear(); + dlg->leDomain->clear(); + dlg->lePath->clear(); + dlg->leExpires->clear(); + dlg->leSecure->clear(); +} + +QString KCookiesManagement::quickHelp() const +{ + return i18n("

    Cookies Management Quick Help

    " ); +} + +void KCookiesManagement::getDomains() +{ + DCOPReply reply = DCOPRef("kded", "kcookiejar").call("findDomains"); + + if( !reply.isValid() ) + { + QString caption = i18n ("Information Lookup Failure"); + QString message = i18n ("Unable to retrieve information about the " + "cookies stored on your computer."); + KMessageBox::sorry (this, message, caption); + return; + } + + QStringList domains = reply; + + if ( dlg->lvCookies->childCount() ) + { + reset(); + dlg->lvCookies->setCurrentItem( 0L ); + } + + CookieListViewItem *dom; + for(QStringList::Iterator dIt = domains.begin(); dIt != domains.end(); dIt++) + { + dom = new CookieListViewItem(dlg->lvCookies, *dIt); + dom->setExpandable(true); + } + + // are ther any cookies? + dlg->pbDeleteAll->setEnabled(dlg->lvCookies->childCount()); +} + +void KCookiesManagement::getCookies(QListViewItem *cookieDom) +{ + CookieListViewItem* ckd = static_cast(cookieDom); + if ( ckd->cookiesLoaded() ) + return; + + QValueList fields; + fields << 0 << 1 << 2 << 3; + + DCOPReply reply = DCOPRef ("kded", "kcookiejar").call ("findCookies", + DCOPArg(fields, "QValueList"), + ckd->domain(), + QString::null, + QString::null, + QString::null); + if(reply.isValid()) + { + QStringList fieldVal = reply; + QStringList::Iterator fIt = fieldVal.begin(); + + while(fIt != fieldVal.end()) + { + CookieProp *details = new CookieProp; + details->domain = *fIt++; + details->path = *fIt++; + details->name = *fIt++; + details->host = *fIt++; + details->allLoaded = false; + new CookieListViewItem(cookieDom, details); + } + + static_cast(cookieDom)->setCookiesLoaded(); + } +} + +bool KCookiesManagement::cookieDetails(CookieProp *cookie) +{ + QValueList fields; + fields << 4 << 5 << 7; + + DCOPReply reply = DCOPRef ("kded", "kcookiejar").call ("findCookies", + DCOPArg(fields, "QValueList"), + cookie->domain, + cookie->host, + cookie->path, + cookie->name); + if( !reply.isValid() ) + return false; + + QStringList fieldVal = reply; + + QStringList::Iterator c = fieldVal.begin(); + cookie->value = *c++; + unsigned tmp = (*c++).toUInt(); + + if( tmp == 0 ) + cookie->expireDate = i18n("End of session"); + else + { + QDateTime expDate; + expDate.setTime_t(tmp); + cookie->expireDate = KGlobal::locale()->formatDateTime(expDate); + } + + tmp = (*c).toUInt(); + cookie->secure = i18n(tmp ? "Yes" : "No"); + cookie->allLoaded = true; + return true; +} + +void KCookiesManagement::showCookieDetails(QListViewItem* item) +{ + kdDebug () << "::showCookieDetails... " << endl; + CookieProp *cookie = static_cast(item)->cookie(); + if( cookie ) + { + if( cookie->allLoaded || cookieDetails(cookie) ) + { + dlg->leName->validateAndSet(cookie->name,0,0,0); + dlg->leValue->validateAndSet(cookie->value,0,0,0); + dlg->leDomain->validateAndSet(cookie->domain,0,0,0); + dlg->lePath->validateAndSet(cookie->path,0,0,0); + dlg->leExpires->validateAndSet(cookie->expireDate,0,0,0); + dlg->leSecure->validateAndSet(cookie->secure,0,0,0); + } + + dlg->pbPolicy->setEnabled (true); + } + else + { + clearCookieDetails(); + dlg->pbPolicy->setEnabled(false); + } + + dlg->pbDelete->setEnabled(true); +} + +void KCookiesManagement::doPolicy() +{ + // Get current item + CookieListViewItem *item = static_cast( dlg->lvCookies->currentItem() ); + + if( item && item->cookie()) + { + CookieProp *cookie = item->cookie(); + + QString domain = cookie->domain; + + if( domain.isEmpty() ) + { + CookieListViewItem *parent = static_cast( item->parent() ); + + if ( parent ) + domain = parent->domain (); + } + + KCookiesMain* mainDlg =static_cast( mainWidget ); + // must be present or something is really wrong. + assert (mainDlg); + + KCookiesPolicies* policyDlg = mainDlg->policyDlg(); + // must be present unless someone rewrote the widget in which case + // this needs to be re-written as well. + assert (policyDlg); + policyDlg->addNewPolicy(domain); + } +} + + +void KCookiesManagement::deleteCookie(QListViewItem* deleteItem) +{ + CookieListViewItem *item = static_cast( deleteItem ); + if( item->cookie() ) + { + CookieListViewItem *parent = static_cast(item->parent()); + CookiePropList *list = deletedCookies.find(parent->domain()); + if(!list) + { + list = new CookiePropList; + list->setAutoDelete(true); + deletedCookies.insert(parent->domain(), list); + } + + list->append(item->leaveCookie()); + delete item; + + if(parent->childCount() == 0) + delete parent; + } + else + { + deletedDomains.append(item->domain()); + delete item; + } +} + +void KCookiesManagement::deleteCookie() +{ + deleteCookie(dlg->lvCookies->currentItem()); + + QListViewItem* currentItem = dlg->lvCookies->currentItem(); + + if ( currentItem ) + { + dlg->lvCookies->setSelected( currentItem, true ); + showCookieDetails( currentItem ); + } + else + clearCookieDetails(); + + dlg->pbDeleteAll->setEnabled(dlg->lvCookies->childCount()); + + const bool hasSelectedItem = dlg->lvCookies->selectedItem(); + dlg->pbDelete->setEnabled(hasSelectedItem); + dlg->pbPolicy->setEnabled(hasSelectedItem); + + emit changed( true ); +} + +void KCookiesManagement::deleteAllCookies() +{ + if ( dlg->kListViewSearchLine->text().isEmpty()) + { + reset(); + m_bDeleteAll = true; + } + else + { + QListViewItem* item = dlg->lvCookies->firstChild(); + + while (item) + { + if (item->isVisible()) + { + deleteCookie(item); + item = dlg->lvCookies->currentItem(); + } + else + item = item->nextSibling(); + } + + const int count = dlg->lvCookies->childCount(); + m_bDeleteAll = (count == 0); + dlg->pbDeleteAll->setEnabled(count); + + const bool hasSelectedItem = dlg->lvCookies->selectedItem(); + dlg->pbDelete->setEnabled(hasSelectedItem); + dlg->pbPolicy->setEnabled(hasSelectedItem); + } + + emit changed( true ); +} + +#include "kcookiesmanagement.moc" diff --git a/kcontrol/kio/kcookiesmanagement.h b/kcontrol/kio/kcookiesmanagement.h new file mode 100644 index 000000000..636be0ed3 --- /dev/null +++ b/kcontrol/kio/kcookiesmanagement.h @@ -0,0 +1,101 @@ +/** + * kcookiesmanagement.h - Cookies manager + * + * Copyright 2000-2001 Marco Pinelli + * + * Contributors: + * Copyright (c) 2000-2001 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KCOOKIESMANAGEMENT_H +#define __KCOOKIESMANAGEMENT_H + +#include +#include +#include + +#include + + +class DCOPClient; +class KCookiesManagementDlgUI; + +struct CookieProp; + +class CookieListViewItem : public QListViewItem +{ +public: + CookieListViewItem(QListView *parent, QString dom); + CookieListViewItem(QListViewItem *parent, CookieProp *cookie); + ~CookieListViewItem(); + + QString domain() const { return mDomain; } + CookieProp* cookie() const { return mCookie; } + CookieProp* leaveCookie(); + void setCookiesLoaded() { mCookiesLoaded = true; } + bool cookiesLoaded() const { return mCookiesLoaded; } + virtual QString text(int f) const; + +private: + void init( CookieProp* cookie, + QString domain = QString::null, + bool cookieLoaded=false ); + CookieProp *mCookie; + QString mDomain; + bool mCookiesLoaded; +}; + +class KCookiesManagement : public KCModule +{ + Q_OBJECT + +public: + KCookiesManagement(QWidget *parent = 0 ); + ~KCookiesManagement(); + + virtual void load(); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + +private slots: + void deleteCookie(); + void deleteAllCookies(); + void getDomains(); + void getCookies(QListViewItem*); + void showCookieDetails(QListViewItem*); + void doPolicy(); + +private: + void reset (); + void deleteCookie(QListViewItem*); + bool cookieDetails(CookieProp *cookie); + void clearCookieDetails(); + bool policyenabled(); + +private: + bool m_bDeleteAll; + + QWidget* mainWidget; + KCookiesManagementDlgUI* dlg; + + QStringList deletedDomains; + typedef QPtrList CookiePropList; + QDict deletedCookies; +}; + +#endif // __KCOOKIESMANAGEMENT_H diff --git a/kcontrol/kio/kcookiesmanagementdlg_ui.ui b/kcontrol/kio/kcookiesmanagementdlg_ui.ui new file mode 100644 index 000000000..f36c0a707 --- /dev/null +++ b/kcontrol/kio/kcookiesmanagementdlg_ui.ui @@ -0,0 +1,323 @@ + +KCookiesManagementDlgUI + + + KCookiesManagementDlgUI + + + + 0 + 0 + 294 + 432 + + + + + unnamed + + + 0 + + + + layout6 + + + + unnamed + + + + + Domain [Group] + + + true + + + true + + + + + Host [Set By] + + + true + + + true + + + + lvCookies + + + Single + + + true + + + true + + + true + + + 15 + + + + + layout4 + + + + unnamed + + + + pbDelete + + + D&elete + + + + + pbDeleteAll + + + Delete A&ll + + + + + pbPolicy + + + Change &Policy... + + + + + pbReload + + + &Reload List + + + + + spacer3 + + + Vertical + + + MinimumExpanding + + + + 21 + 62 + + + + + + + + layout3 + + + + unnamed + + + + tbClearSearchLine + + + ... + + + Clear Search + + + + + textLabel1 + + + &Search: + + + kListViewSearchLine + + + + + kListViewSearchLine + + + Search interactively for domains and hosts + + + + + + + + + + + + gbDetails + + + Details + + + + unnamed + + + + leDomain + + + true + + + + + lePath + + + true + + + + + leSecure + + + true + + + + + lbName + + + Name: + + + leName + + + + + lbValue + + + Value: + + + leValue + + + + + lbDomain + + + Domain: + + + leDomain + + + + + lbPath + + + Path: + + + lePath + + + + + lbExpires + + + Expires: + + + leExpires + + + + + lbSecure + + + Secure: + + + leSecure + + + + + leValue + + + true + + + + + leExpires + + + true + + + + + leName + + + true + + + + + + + + + + + tbClearSearchLine + clicked() + kListViewSearchLine + clear() + + + + kdialog.h + + + + + klistviewsearchline.h + + diff --git a/kcontrol/kio/kcookiespolicies.cpp b/kcontrol/kio/kcookiespolicies.cpp new file mode 100644 index 000000000..7ee302ec1 --- /dev/null +++ b/kcontrol/kio/kcookiespolicies.cpp @@ -0,0 +1,474 @@ +/** + * kcookiespolicies.cpp - Cookies configuration + * + * Original Authors + * Copyright (c) Waldo Bastian + * Copyright (c) 1999 David Faure + * + * Re-written by: + * Copyright (c) 2000- Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ksaveioconfig.h" + +#include "kcookiespolicies.h" +#include "kcookiespoliciesdlg_ui.h" + +KCookiesPolicies::KCookiesPolicies(QWidget *parent) + :KCModule(parent, "kcmkio") +{ + QVBoxLayout *mainLayout = new QVBoxLayout(this, 0, 0); + + dlg = new KCookiesPolicyDlgUI (this); + dlg->lvDomainPolicy->header()->setStretchEnabled(true, 0); + dlg->lvDomainPolicy->setColumnWidthMode(0, KListView::Manual); + dlg->lvDomainPolicy->setColumnWidthMode(1, KListView::Maximum); + dlg->tbClearSearchLine->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase")); + dlg->kListViewSearchLine->setListView(dlg->lvDomainPolicy); + QValueList columns; + columns.append(0); + dlg->kListViewSearchLine->setSearchColumns(columns); + + mainLayout->addWidget(dlg); + + load(); +} + +KCookiesPolicies::~KCookiesPolicies() +{ +} + +void KCookiesPolicies::configChanged () +{ + //kdDebug() << "KCookiesPolicies::configChanged..." << endl; + emit changed((d_configChanged=true)); +} + +void KCookiesPolicies::cookiesEnabled( bool enable ) +{ + dlg->bgDefault->setEnabled( enable ); + dlg->bgPreferences->setEnabled ( enable ); + dlg->gbDomainSpecific->setEnabled( enable ); + + if (enable) + { + ignoreCookieExpirationDate ( enable ); + autoAcceptSessionCookies ( enable ); + } +} + +void KCookiesPolicies::ignoreCookieExpirationDate ( bool enable ) +{ + bool isAutoAcceptChecked = dlg->cbAutoAcceptSessionCookies->isChecked(); + enable = (enable && isAutoAcceptChecked); + + dlg->bgDefault->setEnabled( !enable ); + dlg->gbDomainSpecific->setEnabled( !enable ); +} + +void KCookiesPolicies::autoAcceptSessionCookies ( bool enable ) +{ + bool isIgnoreExpirationChecked = dlg->cbIgnoreCookieExpirationDate->isChecked(); + enable = (enable && isIgnoreExpirationChecked); + + dlg->bgDefault->setEnabled( !enable ); + dlg->gbDomainSpecific->setEnabled( !enable ); +} + +void KCookiesPolicies::addNewPolicy(const QString& domain) +{ + PolicyDlg pdlg (i18n("New Cookie Policy"), this); + pdlg.setEnableHostEdit (true, domain); + + if (dlg->rbPolicyAccept->isChecked()) + pdlg.setPolicy(KCookieAdvice::Reject); + else + pdlg.setPolicy(KCookieAdvice::Accept); + + if (pdlg.exec() && !pdlg.domain().isEmpty()) + { + QString domain = KIDNA::toUnicode(pdlg.domain()); + int advice = pdlg.advice(); + + if ( !handleDuplicate(domain, advice) ) + { + const char* strAdvice = KCookieAdvice::adviceToStr(advice); + QListViewItem* index = new QListViewItem (dlg->lvDomainPolicy, + domain, i18n(strAdvice)); + m_pDomainPolicy.insert (index, strAdvice); + configChanged(); + } + } +} + + +void KCookiesPolicies::addPressed() +{ + addNewPolicy (QString::null); +} + +void KCookiesPolicies::changePressed() +{ + QListViewItem* index = dlg->lvDomainPolicy->currentItem(); + + if (!index) + return; + + QString oldDomain = index->text(0); + + PolicyDlg pdlg (i18n("Change Cookie Policy"), this); + pdlg.setPolicy (KCookieAdvice::strToAdvice(m_pDomainPolicy[index])); + pdlg.setEnableHostEdit (true, oldDomain); + + if( pdlg.exec() && !pdlg.domain().isEmpty()) + { + QString newDomain = KIDNA::toUnicode(pdlg.domain()); + int advice = pdlg.advice(); + if (newDomain == oldDomain || !handleDuplicate(newDomain, advice)) + { + m_pDomainPolicy[index] = KCookieAdvice::adviceToStr(advice); + index->setText(0, newDomain); + index->setText(1, i18n(m_pDomainPolicy[index]) ); + configChanged(); + } + } +} + +bool KCookiesPolicies::handleDuplicate( const QString& domain, int advice ) +{ + QListViewItem* item = dlg->lvDomainPolicy->firstChild(); + while ( item != 0 ) + { + if ( item->text(0) == domain ) + { + QString msg = i18n("A policy already exists for" + "
    %1
    " + "Do you want to replace it?
    ").arg(domain); + int res = KMessageBox::warningContinueCancel(this, msg, + i18n("Duplicate Policy"), + i18n("Replace")); + if ( res == KMessageBox::Continue ) + { + m_pDomainPolicy[item]= KCookieAdvice::adviceToStr(advice); + item->setText(0, domain); + item->setText(1, i18n(m_pDomainPolicy[item])); + configChanged(); + return true; + } + else + return true; // User Cancelled!! + } + item = item->nextSibling(); + } + return false; +} + +void KCookiesPolicies::deletePressed() +{ + QListViewItem* nextItem = 0L; + QListViewItem* item = dlg->lvDomainPolicy->firstChild (); + + while (item != 0L) + { + if (dlg->lvDomainPolicy->isSelected (item)) + { + nextItem = item->itemBelow(); + if ( !nextItem ) + nextItem = item->itemAbove(); + + delete item; + item = nextItem; + } + else + { + item = item->itemBelow(); + } + } + + if (nextItem) + dlg->lvDomainPolicy->setSelected (nextItem, true); + + updateButtons(); + configChanged(); +} + +void KCookiesPolicies::deleteAllPressed() +{ + m_pDomainPolicy.clear(); + dlg->lvDomainPolicy->clear(); + updateButtons(); + configChanged(); +} + +void KCookiesPolicies::updateButtons() +{ + bool hasItems = dlg->lvDomainPolicy->childCount() > 0; + + dlg->pbChange->setEnabled ((hasItems && d_itemsSelected == 1)); + dlg->pbDelete->setEnabled ((hasItems && d_itemsSelected > 0)); + dlg->pbDeleteAll->setEnabled ( hasItems ); +} + +void KCookiesPolicies::updateDomainList(const QStringList &domainConfig) +{ + dlg->lvDomainPolicy->clear(); + + QStringList::ConstIterator it = domainConfig.begin(); + for (; it != domainConfig.end(); ++it) + { + QString domain; + KCookieAdvice::Value advice = KCookieAdvice::Dunno; + + splitDomainAdvice(*it, domain, advice); + + if (!domain.isEmpty()) + { + QListViewItem* index = new QListViewItem( dlg->lvDomainPolicy, KIDNA::toUnicode(domain), + i18n(KCookieAdvice::adviceToStr(advice)) ); + m_pDomainPolicy[index] = KCookieAdvice::adviceToStr(advice); + } + } +} + +void KCookiesPolicies::selectionChanged () +{ + QListViewItem* item = dlg->lvDomainPolicy->firstChild (); + + d_itemsSelected = 0; + + while (item != 0L) + { + if (dlg->lvDomainPolicy->isSelected (item)) + d_itemsSelected++; + item = item->nextSibling (); + } + + updateButtons (); +} + +void KCookiesPolicies::load() +{ + d_itemsSelected = 0; + d_configChanged = false; + + KConfig cfg ("kcookiejarrc", true); + cfg.setGroup ("Cookie Policy"); + + bool enableCookies = cfg.readBoolEntry("Cookies", true); + dlg->cbEnableCookies->setChecked (enableCookies); + cookiesEnabled( enableCookies ); + + KCookieAdvice::Value advice = KCookieAdvice::strToAdvice (cfg.readEntry( + "CookieGlobalAdvice", "Ask")); + switch (advice) + { + case KCookieAdvice::Accept: + dlg->rbPolicyAccept->setChecked (true); + break; + case KCookieAdvice::Reject: + dlg->rbPolicyReject->setChecked (true); + break; + case KCookieAdvice::Ask: + case KCookieAdvice::Dunno: + default: + dlg->rbPolicyAsk->setChecked (true); + } + + bool enable = cfg.readBoolEntry("RejectCrossDomainCookies", true); + dlg->cbRejectCrossDomainCookies->setChecked (enable); + + bool sessionCookies = cfg.readBoolEntry("AcceptSessionCookies", true); + dlg->cbAutoAcceptSessionCookies->setChecked (sessionCookies); + bool cookieExpiration = cfg.readBoolEntry("IgnoreExpirationDate", false); + dlg->cbIgnoreCookieExpirationDate->setChecked (cookieExpiration); + updateDomainList(cfg.readListEntry("CookieDomainAdvice")); + + if (enableCookies) + { + ignoreCookieExpirationDate( cookieExpiration ); + autoAcceptSessionCookies( sessionCookies ); + updateButtons(); + } + + // Connect the main swicth :) Enable/disable cookie support + connect( dlg->cbEnableCookies, SIGNAL( toggled(bool) ), + SLOT( cookiesEnabled(bool) ) ); + connect( dlg->cbEnableCookies, SIGNAL( toggled(bool) ), + SLOT( configChanged() ) ); + + // Connect the preference check boxes... + connect ( dlg->cbRejectCrossDomainCookies, SIGNAL(clicked()), + SLOT(configChanged())); + connect ( dlg->cbAutoAcceptSessionCookies, SIGNAL(toggled(bool)), + SLOT(configChanged())); + connect ( dlg->cbIgnoreCookieExpirationDate, SIGNAL(toggled(bool)), + SLOT(configChanged())); + + connect ( dlg->cbAutoAcceptSessionCookies, SIGNAL(toggled(bool)), + SLOT(autoAcceptSessionCookies(bool))); + connect ( dlg->cbIgnoreCookieExpirationDate, SIGNAL(toggled(bool)), + SLOT(ignoreCookieExpirationDate(bool))); + + // Connect the default cookie policy radio buttons... + connect(dlg->bgDefault, SIGNAL(clicked(int)), SLOT(configChanged())); + + // Connect signals from the domain specific policy listview. + connect( dlg->lvDomainPolicy, SIGNAL(selectionChanged()), + SLOT(selectionChanged()) ); + connect( dlg->lvDomainPolicy, SIGNAL(doubleClicked (QListViewItem *)), + SLOT(changePressed() ) ); + connect( dlg->lvDomainPolicy, SIGNAL(returnPressed ( QListViewItem * )), + SLOT(changePressed() ) ); + + // Connect the buttons... + connect( dlg->pbNew, SIGNAL(clicked()), SLOT( addPressed() ) ); + connect( dlg->pbChange, SIGNAL( clicked() ), SLOT( changePressed() ) ); + connect( dlg->pbDelete, SIGNAL( clicked() ), SLOT( deletePressed() ) ); + connect( dlg->pbDeleteAll, SIGNAL( clicked() ), SLOT( deleteAllPressed() ) ); +} + +void KCookiesPolicies::save() +{ + // If nothing changed, ignore the save request. + if (!d_configChanged) + return; + + KConfig cfg ( "kcookiejarrc" ); + cfg.setGroup( "Cookie Policy" ); + + bool state = dlg->cbEnableCookies->isChecked(); + cfg.writeEntry( "Cookies", state ); + state = dlg->cbRejectCrossDomainCookies->isChecked(); + cfg.writeEntry( "RejectCrossDomainCookies", state ); + state = dlg->cbAutoAcceptSessionCookies->isChecked(); + cfg.writeEntry( "AcceptSessionCookies", state ); + state = dlg->cbIgnoreCookieExpirationDate->isChecked(); + cfg.writeEntry( "IgnoreExpirationDate", state ); + + QString advice; + if (dlg->rbPolicyAccept->isChecked()) + advice = KCookieAdvice::adviceToStr(KCookieAdvice::Accept); + else if (dlg->rbPolicyReject->isChecked()) + advice = KCookieAdvice::adviceToStr(KCookieAdvice::Reject); + else + advice = KCookieAdvice::adviceToStr(KCookieAdvice::Ask); + + cfg.writeEntry("CookieGlobalAdvice", advice); + + QStringList domainConfig; + QListViewItem *at = dlg->lvDomainPolicy->firstChild(); + + while( at ) + { + domainConfig.append(QString::fromLatin1("%1:%2").arg(KIDNA::toAscii(at->text(0))).arg(m_pDomainPolicy[at])); + at = at->nextSibling(); + } + + cfg.writeEntry("CookieDomainAdvice", domainConfig); + cfg.sync(); + + // Update the cookiejar... + if (!dlg->cbEnableCookies->isChecked()) + (void)DCOPRef("kded", "kcookiejar").send("shutdown"); + else + { + if (!DCOPRef("kded", "kcookiejar").send("reloadPolicy")) + KMessageBox::sorry(0, i18n("Unable to communicate with the cookie handler service.\n" + "Any changes you made will not take effect until the service " + "is restarted.")); + } + + // Force running io-slave to reload configurations... + KSaveIOConfig::updateRunningIOSlaves (this); + emit changed( false ); +} + + +void KCookiesPolicies::defaults() +{ + dlg->cbEnableCookies->setChecked( true ); + dlg->rbPolicyAsk->setChecked( true ); + dlg->rbPolicyAccept->setChecked( false ); + dlg->rbPolicyReject->setChecked( false ); + dlg->cbRejectCrossDomainCookies->setChecked( true ); + dlg->cbAutoAcceptSessionCookies->setChecked( true ); + dlg->cbIgnoreCookieExpirationDate->setChecked( false ); + dlg->lvDomainPolicy->clear(); + + cookiesEnabled( dlg->cbEnableCookies->isChecked() ); + updateButtons(); +} + +void KCookiesPolicies::splitDomainAdvice (const QString& cfg, QString &domain, + KCookieAdvice::Value &advice) +{ + int sepPos = cfg.findRev(':'); + + // Ignore any policy that does not contain a domain... + if ( sepPos <= 0 ) + return; + + domain = cfg.left(sepPos); + advice = KCookieAdvice::strToAdvice( cfg.mid( sepPos+1 ) ); +} + +QString KCookiesPolicies::quickHelp() const +{ + return i18n("

    Cookies

    Cookies contain information that Konqueror" + " (or any other KDE application using the HTTP protocol) stores" + " on your computer from a remote Internet server. This means" + " that a web server can store information about you and your" + " browsing activities on your machine for later use. You might" + " consider this an invasion of privacy.

    However, cookies are" + " useful in certain situations. For example, they are often used" + " by Internet shops, so you can 'put things into a shopping" + " basket'. Some sites require you have a browser that supports" + " cookies.

    Because most people want a compromise between privacy" + " and the benefits cookies offer, KDE offers you the ability to" + " customize the way it handles cookies. You might, for example" + " want to set KDE's default policy to ask you whenever a server" + " wants to set a cookie or simply reject or accept everything." + " For example, you might choose to accept all cookies from your" + " favorite shopping web site. For this all you have to do is" + " either browse to that particular site and when you are presented" + " with the cookie dialog box, click on This domain under" + " the 'apply to' tab and choose accept or simply specify the name" + " of the site in the Domain Specific Policy tab and set" + " it to accept. This enables you to receive cookies from trusted" + " web sites without being asked every time KDE receives a cookie." + ); +} + +#include "kcookiespolicies.moc" diff --git a/kcontrol/kio/kcookiespolicies.h b/kcontrol/kio/kcookiespolicies.h new file mode 100644 index 000000000..5b2eaf086 --- /dev/null +++ b/kcontrol/kio/kcookiespolicies.h @@ -0,0 +1,81 @@ +/** + * kcookiespolicies.h - Cookies configuration + * + * Original Authors + * Copyright (c) Waldo Bastian + * Copyright (c) 1999 David Faure + * + * Re-written by: + * Copyright (c) 2000- Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KCOOKIESPOLICIES_H +#define __KCOOKIESPOLICIES_H + +#include +#include + +#include "policydlg.h" + +class QListViewItem; + +class DCOPClient; +class KCookiesPolicyDlgUI; + +class KCookiesPolicies : public KCModule +{ + Q_OBJECT + +public: + KCookiesPolicies(QWidget *parent = 0); + ~KCookiesPolicies(); + + virtual void load(); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + + void addNewPolicy(const QString& domain); + +protected slots: + void autoAcceptSessionCookies ( bool ); + void ignoreCookieExpirationDate ( bool ); + void cookiesEnabled( bool ); + void configChanged(); + + void selectionChanged(); + void updateButtons(); + + void deleteAllPressed(); + void deletePressed(); + void changePressed(); + void addPressed(); + +private: + void updateDomainList(const QStringList& list); + bool handleDuplicate( const QString& domain, int ); + void splitDomainAdvice (const QString& configStr, QString &domain, + KCookieAdvice::Value &advice); + +private: + int d_itemsSelected; + bool d_configChanged; + KCookiesPolicyDlgUI* dlg; + QMap m_pDomainPolicy; +}; + +#endif // __KCOOKIESPOLICIES_H diff --git a/kcontrol/kio/kcookiespoliciesdlg_ui.ui b/kcontrol/kio/kcookiespoliciesdlg_ui.ui new file mode 100644 index 000000000..435ca8640 --- /dev/null +++ b/kcontrol/kio/kcookiespoliciesdlg_ui.ui @@ -0,0 +1,323 @@ + +KCookiesPolicyDlgUI + + + KCookiesPolicyDlgUI + + + + 0 + 0 + 444 + 552 + + + + + unnamed + + + + cbEnableCookies + + + Enable coo&kies + + + <qt> +Enable cookie support. Normally you will want to have cookie support enabled and customize it to suit your privacy needs.<p> +Please note that disabling cookie support might make many web sites unbrowsable. +</qt> + + + + + bgPreferences + + + + + + + unnamed + + + + cbRejectCrossDomainCookies + + + Only acce&pt cookies from originating server + + + <qt> +Reject the so called third-party cookies. These are cookies that originate from a site other than the one you are currently browsing. For example, if you visit <b>www.foobar.com</b> while this option is on, only cookies that originate from www.foobar.com will be processed per your settings. Cookies from any other site will be rejected. This reduces the chances of site operators compiling a profile about your daily browsing habits. +</qt> + + + + + cbAutoAcceptSessionCookies + + + Automaticall&y accept session cookies + + + <qt> +Automatically accept temporary cookies meant to expire at the end of the current session. Such cookies will not be stored in your computer's hard drive or storage device. Instead, they are deleted when you close all applications (e.g. your browser) that use them.<p> +<u>NOTE:</u> Checking this option along with the next one will override your default as well as site specific cookie policies. However, doing so also increases your privacy since all cookies will be removed when the current session ends. +</qt> + + + + + cbIgnoreCookieExpirationDate + + + Treat &all cookies as session cookies + + + <qt> +Treat all cookies as session cookies. Session cookies are small pieces of data that are temporarily stored in your computer's memory until you quit or close all applications (e.g. your browser) that use them. Unlike regular cookies, session cookies are never stored on your hard drive or other storage medium.<p> +<u>NOTE:</u> Checking this option along with the previous one will override your default as well as site specific cookie policies. However, doing so also increases your privacy since all cookies will be removed when the current session ends. +</qt> + + + + + + + bgDefault + + + Default Policy + + + true + + + <qt> +Determines how cookies received from a remote machine will be handled: +<ul> +<li><b>Ask</b> will cause KDE to ask for your confirmation whenever a server wants to set a cookie."</li> +<li><b>Accept</b> will cause cookies to be accepted without prompting you.</li> +<li><b>Reject</b> will cause the cookiejar to refuse all cookies it receives.</li> +</ul><p> +<u>NOTE:</u> Domain specific policies, which can be set below, always take precedence over the default policy. +</qt> + + + + unnamed + + + + rbPolicyAsk + + + Ask &for confirmation + + + + + rbPolicyAccept + + + Accep&t all cookies + + + + + rbPolicyReject + + + Re&ject all cookies + + + + + + + gbDomainSpecific + + + Site Policy + + + <qt> +To add a new policy, simply click on the <b>Add...</b> button and supply the necessary information. To change an existing policy, use the <b>Change...</b> button and choose the new policy from the policy dialog box. Clicking on the <b>Delete</b> button will remove the currently selected policy causing the default policy setting to be used for that domain whereas <b>Delete All</b> will remove all the site specific policies. +</qt> + + + + unnamed + + + + spacer1 + + + Vertical + + + MinimumExpanding + + + + 20 + 16 + + + + + + layout3 + + + + unnamed + + + + pbNew + + + &New... + + + + + pbChange + + + Chan&ge... + + + + + pbDelete + + + D&elete + + + + + pbDeleteAll + + + Delete A&ll + + + + + + + + Domain + + + true + + + true + + + + + Policy + + + true + + + true + + + + lvDomainPolicy + + + Extended + + + true + + + true + + + 0 + + + <qt> +List of sites for which you have set a specific cookie policy. Specific policies override the default policy setting for these sites. +</qt> + + + + + layout2 + + + + unnamed + + + + tbClearSearchLine + + + ... + + + Clear Search + + + + + textLabel1 + + + &Search: + + + kListViewSearchLine + + + + + kListViewSearchLine + + + + + + Search interactively for domains + + + + + + + + + + + + + tbClearSearchLine + clicked() + kListViewSearchLine + clear() + + + + kdialog.h + + + + + klistview.h + klistviewsearchline.h + + diff --git a/kcontrol/kio/kenvvarproxydlg.cpp b/kcontrol/kio/kenvvarproxydlg.cpp new file mode 100644 index 000000000..eaad2b1b6 --- /dev/null +++ b/kcontrol/kio/kenvvarproxydlg.cpp @@ -0,0 +1,303 @@ +/* + kenvvarproxydlg.cpp - Proxy configuration dialog + + Copyright (C) 2001- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "envvarproxy_ui.h" +#include "kenvvarproxydlg.h" + + +#define ENV_FTP_PROXY "FTP_PROXY,ftp_proxy,FTPPROXY,ftpproxy,PROXY,proxy" +#define ENV_HTTP_PROXY "HTTP_PROXY,http_proxy,HTTPPROXY,httpproxy,PROXY,proxy" +#define ENV_HTTPS_PROXY "HTTPS_PROXY,https_proxy,HTTPSPROXY,httpsproxy,PROXY,proxy" +#define NO_PROXY "NO_PROXY,no_proxy" + + +static QString getProxyEnv(const QString& var) +{ + return QString::fromLocal8Bit(::getenv(var.local8Bit().data())); +} + +static bool autoDetectProxySetting(const QString& type, QString& proxyEnv) +{ + QStringList list = QStringList::split( ',', type); + QStringList::ConstIterator it = list.begin(); + QStringList::ConstIterator end = list.end(); + + for(; it != end; ++it) + { + if(!getProxyEnv(*it).isEmpty()) + { + proxyEnv = *it; + return true; + } + } + + return false; +} + +KEnvVarProxyDlg::KEnvVarProxyDlg( QWidget* parent, const char* name ) + :KProxyDialogBase( parent, name, true, + i18n( "Variable Proxy Configuration" ) ) +{ + mDlg = new EnvVarProxyDlgUI( this ); + setMainWidget( mDlg ); + mDlg->leHttp->setMinimumWidth( mDlg->leHttp->fontMetrics().maxWidth() * 20 ); + init(); +} + +KEnvVarProxyDlg::~KEnvVarProxyDlg () +{ +} + +void KEnvVarProxyDlg::init() +{ + m_bHasValidData = false; + + connect( mDlg->cbShowValue, SIGNAL( clicked() ), SLOT( showValuePressed() ) ); + connect( mDlg->pbVerify, SIGNAL( clicked() ), SLOT( verifyPressed() ) ); + connect( mDlg->pbDetect, SIGNAL( clicked() ), SLOT( autoDetectPressed() ) ); +} + +void KEnvVarProxyDlg::setProxyData( const KProxyData& data ) +{ + // Setup HTTP Proxy... + if (!getProxyEnv(data.proxyList["http"]).isEmpty()) + mEnvVarsMap["http"] = data.proxyList["http"]; + + // Setup HTTPS Proxy... + if (!getProxyEnv(data.proxyList["https"]).isEmpty()) + mEnvVarsMap["https"] = data.proxyList["https"]; + + // Setup FTP Proxy... + if (!getProxyEnv(data.proxyList["ftp"]).isEmpty()) + mEnvVarsMap["ftp"] = data.proxyList["ftp"]; + + // Setup NO Proxy For... + QString noProxyFor = data.noProxyFor.join(""); + if (!getProxyEnv(noProxyFor).isEmpty()) + mEnvVarsMap["noProxy"] = noProxyFor; + + mDlg->cbShowValue->setChecked( data.showEnvVarValue ); + showValue(); +} + +const KProxyData KEnvVarProxyDlg::data() const +{ + KProxyData data; + + if (m_bHasValidData) + { + data.proxyList["http"] = mEnvVarsMap["http"]; + data.proxyList["https"] = mEnvVarsMap["https"]; + data.proxyList["ftp"] = mEnvVarsMap["ftp"]; + data.noProxyFor = mEnvVarsMap["noProxy"]; + data.type = KProtocolManager::EnvVarProxy; + data.showEnvVarValue = mDlg->cbShowValue->isChecked(); + } + + return data; +} + + +void KEnvVarProxyDlg::verifyPressed() +{ + if ( !validate() ) + { + QString msg = i18n("You must specify at least one valid proxy " + "environment variable."); + + QString details = i18n("Make sure you entered the actual environment " + "variable name rather than its value. For " + "example, if the environment variable is
    " + "HTTP_PROXY=http://localhost:3128
    you need " + "to enter HTTP_PROXY here instead of the " + "actual value http://localhost:3128.
    "); + + KMessageBox::detailedSorry( this, msg, details, + i18n("Invalid Proxy Setup") ); + } + else + { + KMessageBox::information( this, i18n("Successfully verified."), + i18n("Proxy Setup") ); + } +} + +void KEnvVarProxyDlg::autoDetectPressed() +{ + bool found = false; + + setHighLight (mDlg->lbHttp, false); + setHighLight (mDlg->lbHttps, false); + setHighLight (mDlg->lbFtp, false); + setHighLight (mDlg->lbNoProxy, false); + + // Detect HTTP proxy settings... + found |= autoDetectProxySetting (QString::fromLatin1(ENV_HTTP_PROXY), mEnvVarsMap["http"]); + + // Detect HTTPS proxy settings... + found |= autoDetectProxySetting (QString::fromLatin1(ENV_HTTPS_PROXY), mEnvVarsMap["https"]); + + // Detect FTP proxy settings... + found |= autoDetectProxySetting (QString::fromLatin1(ENV_FTP_PROXY), mEnvVarsMap["ftp"]); + + // Detect the NO_PROXY settings... + found |= autoDetectProxySetting (QString::fromLatin1(NO_PROXY), mEnvVarsMap["noProxy"]); + + if ( !found ) + { + QString msg = i18n("Did not detect any environment variables " + "commonly used to set system wide proxy " + "information."); + + QString details = i18n("To learn about the variable names the " + "automatic detection process searches for, " + "press OK, click on the quick help button " + "on the window title bar of the " + "previous dialog and then click on the " + "\"Auto Detect\" button."); + + KMessageBox::detailedSorry( this, msg, details, + i18n("Automatic Proxy Variable Detection") ); + return; + } + + showValue(); +} + +void KEnvVarProxyDlg::updateVariables() +{ + QString text = mDlg->leHttp->text(); + if (mEnvVarsMap["http"] != text) + mEnvVarsMap["http"] = text; + + text = mDlg->leHttps->text(); + if (mEnvVarsMap["https"] != text) + mEnvVarsMap["https"] = text; + + text = mDlg->leFtp->text(); + if (mEnvVarsMap["ftp"] != text) + mEnvVarsMap["ftp"] = text; + + text = mDlg->leNoProxy->text(); + if (mEnvVarsMap["noProxy"] != text) + mEnvVarsMap["noProxy"] = text; +} + +void KEnvVarProxyDlg::showValuePressed() +{ + // Only update the variables whenever + if (mDlg->cbShowValue->isChecked()) + updateVariables(); + + showValue(); +} + +void KEnvVarProxyDlg::showValue() +{ + bool enable = mDlg->cbShowValue->isChecked(); + + mDlg->leHttp->setReadOnly (enable); + mDlg->leHttps->setReadOnly (enable); + mDlg->leFtp->setReadOnly (enable); + mDlg->leNoProxy->setReadOnly (enable); + + if (enable) + { + mDlg->leHttp->setText(getProxyEnv(mEnvVarsMap["http"])); + mDlg->leHttps->setText(getProxyEnv(mEnvVarsMap["https"])); + mDlg->leFtp->setText(getProxyEnv(mEnvVarsMap["ftp"])); + mDlg->leNoProxy->setText(getProxyEnv(mEnvVarsMap["noProxy"])); + } + else + { + mDlg->leHttp->setText(mEnvVarsMap["http"]); + mDlg->leHttps->setText(mEnvVarsMap["https"]); + mDlg->leFtp->setText(mEnvVarsMap["ftp"]); + mDlg->leNoProxy->setText(mEnvVarsMap["noProxy"]); + } +} + +bool KEnvVarProxyDlg::validate(bool erase) +{ + m_bHasValidData = false; + + if(!mDlg->cbShowValue->isChecked()) + updateVariables(); + + bool notFound = getProxyEnv(mEnvVarsMap["http"]).isEmpty(); + m_bHasValidData |= !notFound; + setHighLight (mDlg->lbHttp, notFound); + if(notFound && erase) mEnvVarsMap["http"] = QString::null; + + notFound = getProxyEnv(mEnvVarsMap["https"]).isEmpty(); + m_bHasValidData |= !notFound; + setHighLight (mDlg->lbHttps, notFound); + if(notFound && erase) mEnvVarsMap["https"] = QString::null; + + notFound = getProxyEnv(mEnvVarsMap["ftp"]).isEmpty(); + m_bHasValidData |= !notFound; + setHighLight (mDlg->lbFtp, notFound); + if(notFound && erase) mEnvVarsMap["ftp"] = QString::null; + + notFound = getProxyEnv(mEnvVarsMap["noProxy"]).isEmpty(); + m_bHasValidData |= !notFound; + setHighLight (mDlg->lbNoProxy, notFound); + if(notFound && erase) mEnvVarsMap["noProxy"] = QString::null; + + return m_bHasValidData; +} + +void KEnvVarProxyDlg::slotOk() +{ + if(!validate(true)) + { + QString msg = i18n("You must specify at least one valid proxy " + "environment variable."); + + QString details = i18n("Make sure you entered the actual environment " + "variable name rather than its value. For " + "example, if the environment variable is
    " + "HTTP_PROXY=http://localhost:3128
    you need " + "to enter HTTP_PROXY here instead of the " + "actual value http://localhost:3128.
    "); + + KMessageBox::detailedError( this, msg, details, + i18n("Invalid Proxy Setup") ); + return; + } + + KDialogBase::slotOk (); +} + +#include "kenvvarproxydlg.moc" diff --git a/kcontrol/kio/kenvvarproxydlg.h b/kcontrol/kio/kenvvarproxydlg.h new file mode 100644 index 000000000..bf4c073a6 --- /dev/null +++ b/kcontrol/kio/kenvvarproxydlg.h @@ -0,0 +1,57 @@ +/* + kenvvarproxydlg.h - Base dialog box for proxy configuration + + Copyright (C) 2001- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 KENVVAR_PROXY_DIALOG_H +#define KENVVAR_PROXY_DIALOG_H + +#include + +#include "kproxydlgbase.h" + +class EnvVarProxyDlgUI; + +class KEnvVarProxyDlg : public KProxyDialogBase +{ + Q_OBJECT + +public: + KEnvVarProxyDlg( QWidget* parent = 0, const char* name = 0 ); + ~KEnvVarProxyDlg(); + + virtual const KProxyData data() const; + virtual void setProxyData( const KProxyData &data ); + +protected slots: + virtual void slotOk(); + void verifyPressed(); + void showValuePressed(); + void autoDetectPressed(); + +protected: + void init(); + bool validate(bool erase = false); + void showValue(); + void updateVariables(); + +private: + EnvVarProxyDlgUI* mDlg; + QMap mEnvVarsMap; +}; +#endif diff --git a/kcontrol/kio/kio_ftprc.kcfg b/kcontrol/kio/kio_ftprc.kcfg new file mode 100644 index 000000000..610b2e68a --- /dev/null +++ b/kcontrol/kio/kio_ftprc.kcfg @@ -0,0 +1,22 @@ + + + + + + + + When FTP connections are passive the client connects to the server, instead of the other way round, so firewalls do not block the connection; old FTP servers may not support Passive FTP though. + false + + + + + While a file is being uploaded its extension is ".part". When fully uploaded it is renamed to its real name. + true + + + + diff --git a/kcontrol/kio/kio_ftprc.kcfgc b/kcontrol/kio/kio_ftprc.kcfgc new file mode 100644 index 000000000..7b5ca780f --- /dev/null +++ b/kcontrol/kio/kio_ftprc.kcfgc @@ -0,0 +1,5 @@ +File=kio_ftprc.kcfg +ClassName=KioFtp +Singleton=true +Mutators=true + diff --git a/kcontrol/kio/kioslave.kcfg b/kcontrol/kio/kioslave.kcfg new file mode 100644 index 000000000..4dcce7191 --- /dev/null +++ b/kcontrol/kio/kioslave.kcfg @@ -0,0 +1,44 @@ + + + + + + false + + + 10 + 2 + 3600 + + + 20 + 2 + 3600 + + + 15 + 2 + 3600 + + + 600 + 2 + 3600 + + + + + + + + + + + + + + + diff --git a/kcontrol/kio/kioslave.kcfgc b/kcontrol/kio/kioslave.kcfgc new file mode 100644 index 000000000..7b5ca780f --- /dev/null +++ b/kcontrol/kio/kioslave.kcfgc @@ -0,0 +1,5 @@ +File=kio_ftprc.kcfg +ClassName=KioFtp +Singleton=true +Mutators=true + diff --git a/kcontrol/kio/kmanualproxydlg.cpp b/kcontrol/kio/kmanualproxydlg.cpp new file mode 100644 index 000000000..9a3df6afb --- /dev/null +++ b/kcontrol/kio/kmanualproxydlg.cpp @@ -0,0 +1,498 @@ +/* + kmanualproxydlg.cpp - Proxy configuration dialog + + Copyright (C) 2001-2004 Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "manualproxy_ui.h" +#include "kmanualproxydlg.h" + + +KManualProxyDlg::KManualProxyDlg( QWidget* parent, const char* name ) + :KProxyDialogBase( parent, name, true, + i18n("Manual Proxy Configuration") ) +{ + mDlg = new ManualProxyDlgUI (this); + setMainWidget( mDlg ); + + mDlg->pbCopyDown->setPixmap( BarIcon("down", KIcon::SizeSmall) ); + QSizePolicy sizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed, + mDlg->pbCopyDown->sizePolicy().hasHeightForWidth() ); + mDlg->pbCopyDown->setSizePolicy( sizePolicy ); + + init(); +} + +void KManualProxyDlg::init() +{ + mDlg->sbHttp->setRange( 0, MAX_PORT_VALUE ); + mDlg->sbHttps->setRange( 0, MAX_PORT_VALUE ); + mDlg->sbFtp->setRange( 0, MAX_PORT_VALUE ); + + connect( mDlg->pbNew, SIGNAL( clicked() ), SLOT( newPressed() ) ); + connect( mDlg->pbChange, SIGNAL( clicked() ), SLOT( changePressed() ) ); + connect( mDlg->pbDelete, SIGNAL( clicked() ), SLOT( deletePressed() ) ); + connect( mDlg->pbDeleteAll, SIGNAL( clicked() ), SLOT( deleteAllPressed() ) ); + + connect( mDlg->lbExceptions, SIGNAL(selectionChanged()), SLOT(updateButtons()) ); + connect( mDlg->lbExceptions, SIGNAL(doubleClicked (QListBoxItem *)), SLOT(changePressed())); + + connect( mDlg->cbSameProxy, SIGNAL( toggled(bool) ), SLOT( sameProxy(bool) ) ); + connect( mDlg->pbCopyDown, SIGNAL( clicked() ), SLOT( copyDown() ) ); + + connect( mDlg->leHttp, SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)) ); + connect( mDlg->sbHttp, SIGNAL(valueChanged(int)), SLOT(valueChanged (int)) ); +} + +void KManualProxyDlg::setProxyData( const KProxyData &data ) +{ + KURL url; + + // Set the HTTP proxy... + if (!isValidURL(data.proxyList["http"], &url)) + mDlg->sbHttp->setValue( DEFAULT_PROXY_PORT ); + else + { + int port = url.port(); + if ( port <= 0 ) + port = DEFAULT_PROXY_PORT; + + url.setPort( 0 ); + mDlg->leHttp->setText( url.url() ); + mDlg->sbHttp->setValue( port ); + } + + bool useSameProxy = (!mDlg->leHttp->text().isEmpty () && + data.proxyList["http"] == data.proxyList["https"] && + data.proxyList["http"] == data.proxyList["ftp"]); + + mDlg->cbSameProxy->setChecked ( useSameProxy ); + + if ( useSameProxy ) + { + mDlg->leHttps->setText ( mDlg->leHttp->text() ); + mDlg->leFtp->setText ( mDlg->leHttp->text() ); + mDlg->sbHttps->setValue( mDlg->sbHttp->value() ); + mDlg->sbFtp->setValue( mDlg->sbHttp->value() ); + + sameProxy ( true ); + } + else + { + // Set the HTTPS proxy... + if( !isValidURL( data.proxyList["https"], &url ) ) + mDlg->sbHttps->setValue( DEFAULT_PROXY_PORT ); + else + { + int port = url.port(); + if ( port <= 0 ) + port = DEFAULT_PROXY_PORT; + + url.setPort( 0 ); + mDlg->leHttps->setText( url.url() ); + mDlg->sbHttps->setValue( port ); + } + + // Set the FTP proxy... + if( !isValidURL( data.proxyList["ftp"], &url ) ) + mDlg->sbFtp->setValue( DEFAULT_PROXY_PORT ); + else + { + int port = url.port(); + if ( port <= 0 ) + port = DEFAULT_PROXY_PORT; + + url.setPort( 0 ); + mDlg->leFtp->setText( url.url() ); + mDlg->sbFtp->setValue( port ); + } + } + + QStringList::ConstIterator it = data.noProxyFor.begin(); + for( ; it != data.noProxyFor.end(); ++it ) + { + // "no_proxy" is a keyword used by the environment variable + // based configuration. We ignore it here as it is not applicable... + if ((*it).lower() != "no_proxy" && !(*it).isEmpty()) + { + // Validate the NOPROXYFOR entries and use only hostnames if the entry is + // a valid or legitimate URL. NOTE: needed to catch manual manipulation + // of the proxy config files... + if( isValidURL( *it ) || ((*it).length() >= 3 && (*it).startsWith(".")) ) + mDlg->lbExceptions->insertItem( *it ); + } + } + + mDlg->cbReverseProxy->setChecked( data.useReverseProxy ); +} + +const KProxyData KManualProxyDlg::data() const +{ + KProxyData data; + + if (!m_bHasValidData) + return data; + + data.proxyList["http"] = urlFromInput( mDlg->leHttp, mDlg->sbHttp ); + + if ( mDlg->cbSameProxy->isChecked () ) + { + data.proxyList["https"] = data.proxyList["http"]; + data.proxyList["ftp"] = data.proxyList["http"]; + } + else + { + data.proxyList["https"] = urlFromInput( mDlg->leHttps, mDlg->sbHttps ); + data.proxyList["ftp"] = urlFromInput( mDlg->leFtp, mDlg->sbFtp ); + } + + if ( mDlg->lbExceptions->count() ) + { + QListBoxItem* item = mDlg->lbExceptions->firstItem(); + for( ; item != 0L; item = item->next() ) + data.noProxyFor << item->text(); + } + + data.type = KProtocolManager::ManualProxy; + data.useReverseProxy = mDlg->cbReverseProxy->isChecked(); + + return data; +} + +void KManualProxyDlg::sameProxy( bool enable ) +{ + mDlg->leHttps->setEnabled (!enable ); + mDlg->leFtp->setEnabled (!enable ); + mDlg->sbHttps->setEnabled (!enable ); + mDlg->sbFtp->setEnabled (!enable ); + mDlg->pbCopyDown->setEnabled( !enable ); + + if (enable) + { + mOldFtpText = mDlg->leFtp->text(); + mOldHttpsText = mDlg->leHttps->text(); + + mOldFtpPort = mDlg->sbFtp->value(); + mOldHttpsPort = mDlg->sbHttps->value(); + + int port = mDlg->sbHttp->value(); + QString text = mDlg->leHttp->text(); + + mDlg->leFtp->setText (text); + mDlg->leHttps->setText (text); + + mDlg->sbFtp->setValue (port); + mDlg->sbHttps->setValue (port); + + if (mDlg->lbHttps->font().bold()) + setHighLight( mDlg->lbHttps, false ); + + if (mDlg->lbFtp->font().bold()) + setHighLight( mDlg->lbFtp, false ); + } + else + { + mDlg->leFtp->setText (mOldFtpText); + mDlg->leHttps->setText (mOldHttpsText); + + mDlg->sbFtp->setValue (mOldFtpPort); + mDlg->sbHttps->setValue (mOldHttpsPort); + } +} + +bool KManualProxyDlg::validate() +{ + KURL filteredURL; + unsigned short count = 0; + + if ( isValidURL( mDlg->leHttp->text(), &filteredURL ) ) + { + mDlg->leHttp->setText( filteredURL.url() ); + count++; + } + else + setHighLight( mDlg->lbHttp, true ); + + if ( !mDlg->cbSameProxy->isChecked () ) + { + if ( isValidURL( mDlg->leHttps->text(), &filteredURL ) ) + { + mDlg->leHttps->setText( filteredURL.url() ); + count++; + } + else + setHighLight( mDlg->lbHttps, true ); + + if ( isValidURL( mDlg->leFtp->text(), &filteredURL ) ) + { + mDlg->leFtp->setText( filteredURL.url() ); + count++; + } + else + setHighLight( mDlg->lbFtp, true ); + } + + if ( count == 0 ) + { + showErrorMsg( i18n("Invalid Proxy Setting"), + i18n("One or more of the specified proxy settings are " + "invalid. The incorrect entries are highlighted.") ); + } + + return (count > 0); +} + +void KManualProxyDlg::textChanged(const QString& text) +{ + if (!mDlg->cbSameProxy->isChecked()) + return; + + mDlg->leFtp->setText( text ); + mDlg->leHttps->setText( text ); +} + +void KManualProxyDlg::valueChanged(int value) +{ + if (!mDlg->cbSameProxy->isChecked()) + return; + + mDlg->sbFtp->setValue (value); + mDlg->sbHttps->setValue (value); + } + +void KManualProxyDlg::copyDown() +{ + int action = -1; + + if ( !mDlg->leHttp->text().isEmpty() ) + action += 4; + else if ( !mDlg->leHttps->text().isEmpty() ) + action += 3; + + switch ( action ) + { + case 3: + mDlg->leHttps->setText( mDlg->leHttp->text() ); + mDlg->sbHttps->setValue( mDlg->sbHttp->value() ); + mDlg->leFtp->setText( mDlg->leHttp->text() ); + mDlg->sbFtp->setValue( mDlg->sbHttp->value() ); + break; + case 2: + mDlg->leFtp->setText( mDlg->leHttps->text() ); + mDlg->sbFtp->setValue( mDlg->sbHttps->value() ); + break; + case 1: + case 0: + default: + break; + } +} + +void KManualProxyDlg::slotOk() +{ + //qDebug("m_bHasValidData: %s" , m_bHasValidData ? "true" : "false"); + if ( m_bHasValidData || validate() ) + { + KDialogBase::slotOk(); + m_bHasValidData = true; + } +} + +bool KManualProxyDlg::handleDuplicate( const QString& site ) +{ + QListBoxItem* item = mDlg->lbExceptions->firstItem(); + while ( item != 0 ) + { + if ( item->text().findRev( site ) != -1 && + item != mDlg->lbExceptions->selectedItem() ) + { + QString msg = i18n("You entered a duplicate address. " + "Please try again."); + QString details = i18n("

    %1
    " + "is already in the list.").arg(site); + KMessageBox::detailedError( this, msg, details, i18n("Duplicate Entry") ); + return true; + } + + item = item->next(); + } + return false; +} + +void KManualProxyDlg::newPressed() +{ + QString result; + if( getException(result, i18n("New Exception")) && !handleDuplicate(result) ) + mDlg->lbExceptions->insertItem( result ); +} + +void KManualProxyDlg::changePressed() +{ + QString result; + if( getException( result, i18n("Change Exception"), + mDlg->lbExceptions->currentText() ) && + !handleDuplicate( result ) ) + mDlg->lbExceptions->changeItem( result, mDlg->lbExceptions->currentItem() ); +} + +void KManualProxyDlg::deletePressed() +{ + mDlg->lbExceptions->removeItem( mDlg->lbExceptions->currentItem() ); + mDlg->lbExceptions->setSelected( mDlg->lbExceptions->currentItem(), true ); + updateButtons(); +} + +void KManualProxyDlg::deleteAllPressed() +{ + mDlg->lbExceptions->clear(); + updateButtons(); +} + +void KManualProxyDlg::updateButtons() +{ + bool hasItems = mDlg->lbExceptions->count() > 0; + bool itemSelected = (hasItems && mDlg->lbExceptions->selectedItem()!=0); + + mDlg->pbDeleteAll->setEnabled( hasItems ); + mDlg->pbDelete->setEnabled( itemSelected ); + mDlg->pbChange->setEnabled( itemSelected ); +} + +QString KManualProxyDlg::urlFromInput(const KLineEdit* edit, + const QSpinBox* spin) const +{ + if (!edit) + return QString::null; + + KURL u( edit->text() ); + + if (spin) + u.setPort( spin->value() ); + + return u.url(); +} + +bool KManualProxyDlg::isValidURL( const QString& _url, KURL* result ) const +{ + KURL url (_url); + + QStringList filters; + filters << "kshorturifilter" << "localdomainurifilter"; + + // If the typed URL is malformed, and the filters cannot filter it + // then it must be an invalid entry. + if( !(url.isValid() || KURIFilter::self()->filterURI(url, filters)) && + !url.hasHost() ) + return false; + + QString host (url.host()); + + // We only check for a relevant subset of characters that are + // not allowed in component of a URL. + if ( host.contains ('*') || host.contains (' ') || host.contains ('?') ) + return false; + + if ( result ) + *result = url; + + return true; +} + +void KManualProxyDlg::showErrorMsg( const QString& caption, + const QString& message ) +{ + QString cap( caption ); + QString msg( message ); + + if ( cap.isNull() ) + cap = i18n("Invalid Entry"); + + if ( msg.isNull() ) + msg = i18n("The address you have entered is not valid."); + + QString details = i18n("Make sure none of the addresses or URLs you " + "specified contain invalid or wildcard characters " + "such as spaces, asterisks (*), or question marks(?).

    " + "Examples of VALID entries:
    " + "http://mycompany.com, 192.168.10.1, " + "mycompany.com, localhost, http://localhost

    " + "Examples of INVALID entries:
    " + "http://my company.com, http:/mycompany,com " + "file:/localhost"); + + KMessageBox::detailedError( this, msg, details, cap ); +} + +bool KManualProxyDlg::getException ( QString& result, + const QString& caption, + const QString& value ) +{ + QString label; + + // Specify the appropriate message... + if ( mDlg->cbReverseProxy->isChecked() ) + label = i18n("Enter the URL or address that should use the above proxy " + "settings:"); + else + label = i18n("Enter the address or URL that should be excluded from " + "using the above proxy settings:"); + + QString whatsThis = i18n("Enter a valid address or url.

    " + "NOTE: Wildcard matching such as " + "*.kde.org is not supported. If you want " + "to match any host in the .kde.org domain, " + "e.g. printing.kde.org, then simply enter " + ".kde.org"); + + bool ok; + result = KInputDialog::text( caption, label, value, &ok, 0, 0, 0, + QString::null, whatsThis ); + + // If the user pressed cancel, do nothing... + if (!ok) + return false; + + // If the typed URL is malformed, and the filters cannot filter it + // then it must be an invalid entry, + if( isValidURL(result) || (result.length() >= 3 && result.startsWith("."))) + return true; + + showErrorMsg(); + return false; +} + +#include "kmanualproxydlg.moc" diff --git a/kcontrol/kio/kmanualproxydlg.h b/kcontrol/kio/kmanualproxydlg.h new file mode 100644 index 000000000..a21e3775c --- /dev/null +++ b/kcontrol/kio/kmanualproxydlg.h @@ -0,0 +1,77 @@ +/* + kmanualproxydlg.h - Base dialog box for proxy configuration + + Copyright (C) 2001-2004 Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 KMANUAL_PROXY_DIALOG_H +#define KMANUAL_PROXY_DIALOG_H + +#include "kproxydlgbase.h" + +class QSpinBox; +class KLineEdit; +class ManualProxyDlgUI; + +class KManualProxyDlg : public KProxyDialogBase +{ + Q_OBJECT + +public: + KManualProxyDlg( QWidget* parent = 0, const char* name = 0 ); + ~KManualProxyDlg() {}; + + virtual void setProxyData( const KProxyData &data ); + virtual const KProxyData data() const; + +protected: + void init(); + bool validate(); + +protected slots: + virtual void slotOk(); + + void copyDown(); + void sameProxy( bool ); + void valueChanged (int value); + void textChanged (const QString&); + + void newPressed(); + void updateButtons(); + void changePressed(); + void deletePressed(); + void deleteAllPressed(); + +private: + QString urlFromInput( const KLineEdit* edit, const QSpinBox* spin ) const; + bool isValidURL( const QString&, KURL* = 0 ) const; + bool handleDuplicate( const QString& ); + bool getException ( QString&, const QString&, + const QString& value = QString::null ); + void showErrorMsg( const QString& caption = QString::null, + const QString& message = QString::null ); + +private: + ManualProxyDlgUI* mDlg; + + int mOldFtpPort; + int mOldHttpsPort; + QString mOldFtpText; + QString mOldHttpsText; +}; +#endif diff --git a/kcontrol/kio/kproxydlg.cpp b/kcontrol/kio/kproxydlg.cpp new file mode 100644 index 000000000..c7f9d7d20 --- /dev/null +++ b/kcontrol/kio/kproxydlg.cpp @@ -0,0 +1,375 @@ +/* + kproxydlg.cpp - Proxy configuration dialog + + Copyright (C) 2001- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "ksaveioconfig.h" +#include "kenvvarproxydlg.h" +#include "kmanualproxydlg.h" + +#include "socks.h" +#include "kproxydlg.h" +#include "kproxydlg_ui.h" + +KProxyOptions::KProxyOptions (QWidget* parent ) + :KCModule (parent, "kcmkio") +{ + QVBoxLayout *layout = new QVBoxLayout(this); + + mTab = new QTabWidget(this); + layout->addWidget(mTab); + + mProxy = new KProxyDialog(mTab); + mSocks = new KSocksConfig(mTab); + + mTab->addTab(mProxy, i18n("&Proxy")); + mTab->addTab(mSocks, i18n("&SOCKS")); + + connect(mProxy, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + connect(mSocks, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + connect(mTab, SIGNAL(currentChanged(QWidget *)), SIGNAL(quickHelpChanged())); +} + +KProxyOptions::~KProxyOptions() +{ +} + +void KProxyOptions::load() +{ + mProxy->load(); + mSocks->load(); +} + +void KProxyOptions::save() +{ + mProxy->save(); + mSocks->save(); +} + +void KProxyOptions::defaults() +{ + mProxy->defaults(); + mSocks->defaults(); +} + +QString KProxyOptions::quickHelp() const +{ + QWidget *w = mTab->currentPage(); + + if (w && w->inherits("KCModule")) + { + KCModule *m = static_cast(w); + return m->quickHelp(); + } + + return QString::null; +} + + +KProxyDialog::KProxyDialog( QWidget* parent) + :KCModule( parent, "kcmkio" ) +{ + QVBoxLayout* mainLayout = new QVBoxLayout( this, KDialog::marginHint(), + KDialog::spacingHint() ); + + mDlg = new KProxyDialogUI( this ); + mainLayout->addWidget( mDlg ); + mainLayout->addStretch(); + + // signals and slots connections + connect( mDlg->rbNoProxy, SIGNAL( toggled(bool) ), + SLOT( slotUseProxyChanged() ) ); + + connect( mDlg->rbAutoDiscover, SIGNAL( toggled(bool) ), + SLOT( slotChanged() ) ); + connect( mDlg->rbAutoScript, SIGNAL( toggled(bool) ), + SLOT( slotChanged() ) ); + + connect( mDlg->rbPrompt, SIGNAL( toggled(bool) ), + SLOT( slotChanged() ) ); + connect( mDlg->rbPresetLogin, SIGNAL( toggled(bool) ), + SLOT( slotChanged() ) ); + + connect( mDlg->cbPersConn, SIGNAL( toggled(bool) ), + SLOT( slotChanged() ) ); + + connect( mDlg->location, SIGNAL( textChanged(const QString&) ), + SLOT( slotChanged() ) ); + + connect( mDlg->pbEnvSetup, SIGNAL( clicked() ), SLOT( setupEnvProxy() ) ); + connect( mDlg->pbManSetup, SIGNAL( clicked() ), SLOT( setupManProxy() ) ); + + load(); +} + +KProxyDialog::~KProxyDialog() +{ + delete mData; + mData = 0; +} + +void KProxyDialog::load() +{ + mDefaultData = false; + mData = new KProxyData; + + KProtocolManager proto; + bool useProxy = proto.useProxy(); + mData->type = proto.proxyType(); + mData->proxyList["http"] = proto.proxyFor( "http" ); + mData->proxyList["https"] = proto.proxyFor( "https" ); + mData->proxyList["ftp"] = proto.proxyFor( "ftp" ); + mData->proxyList["script"] = proto.proxyConfigScript(); + mData->useReverseProxy = proto.useReverseProxy(); + mData->noProxyFor = QStringList::split( QRegExp("[',''\t'' ']"), + proto.noProxyForRaw() ); + + mDlg->gbAuth->setEnabled( useProxy ); + mDlg->gbOptions->setEnabled( useProxy ); + + mDlg->cbPersConn->setChecked( proto.persistentProxyConnection() ); + + if ( !mData->proxyList["script"].isEmpty() ) + mDlg->location->lineEdit()->setText( mData->proxyList["script"] ); + + switch ( mData->type ) + { + case KProtocolManager::WPADProxy: + mDlg->rbAutoDiscover->setChecked( true ); + break; + case KProtocolManager::PACProxy: + mDlg->rbAutoScript->setChecked( true ); + break; + case KProtocolManager::ManualProxy: + mDlg->rbManual->setChecked( true ); + break; + case KProtocolManager::EnvVarProxy: + mDlg->rbEnvVar->setChecked( true ); + break; + case KProtocolManager::NoProxy: + default: + mDlg->rbNoProxy->setChecked( true ); + break; + } + + switch( proto.proxyAuthMode() ) + { + case KProtocolManager::Prompt: + mDlg->rbPrompt->setChecked( true ); + break; + case KProtocolManager::Automatic: + mDlg->rbPresetLogin->setChecked( true ); + default: + break; + } +} + +void KProxyDialog::save() +{ + bool updateProxyScout = false; + + if (mDefaultData) + mData->reset (); + + if ( mDlg->rbNoProxy->isChecked() ) + { + KSaveIOConfig::setProxyType( KProtocolManager::NoProxy ); + } + else + { + if ( mDlg->rbAutoDiscover->isChecked() ) + { + KSaveIOConfig::setProxyType( KProtocolManager::WPADProxy ); + updateProxyScout = true; + } + else if ( mDlg->rbAutoScript->isChecked() ) + { + KURL u( mDlg->location->lineEdit()->text() ); + + if ( !u.isValid() ) + { + showInvalidMessage( i18n("The address of the automatic proxy " + "configuration script is invalid. Please " + "correct this problem before proceeding. " + "Otherwise, your changes you will be " + "ignored.") ); + return; + } + else + { + KSaveIOConfig::setProxyType( KProtocolManager::PACProxy ); + mData->proxyList["script"] = u.url(); + updateProxyScout = true; + } + } + else if ( mDlg->rbManual->isChecked() ) + { + if ( mData->type != KProtocolManager::ManualProxy ) + { + // Let's try a bit harder to determine if the previous + // proxy setting was indeed a manual proxy + KURL u ( mData->proxyList["http"] ); + bool validProxy = (u.isValid() && u.port() != 0); + u= mData->proxyList["https"]; + validProxy |= (u.isValid() && u.port() != 0); + u= mData->proxyList["ftp"]; + validProxy |= (u.isValid() && u.port() != 0); + + if (!validProxy) + { + showInvalidMessage(); + return; + } + + mData->type = KProtocolManager::ManualProxy; + } + + KSaveIOConfig::setProxyType( KProtocolManager::ManualProxy ); + } + else if ( mDlg->rbEnvVar->isChecked() ) + { + if ( mData->type != KProtocolManager::EnvVarProxy ) + { + showInvalidMessage(); + return; + } + + KSaveIOConfig::setProxyType( KProtocolManager::EnvVarProxy ); + } + + if ( mDlg->rbPrompt->isChecked() ) + KSaveIOConfig::setProxyAuthMode( KProtocolManager::Prompt ); + else if ( mDlg->rbPresetLogin->isChecked() ) + KSaveIOConfig::setProxyAuthMode( KProtocolManager::Automatic ); + } + + KSaveIOConfig::setPersistentProxyConnection( mDlg->cbPersConn->isChecked() ); + + // Save the common proxy setting... + KSaveIOConfig::setProxyFor( "ftp", mData->proxyList["ftp"] ); + KSaveIOConfig::setProxyFor( "http", mData->proxyList["http"] ); + KSaveIOConfig::setProxyFor( "https", mData->proxyList["https"] ); + + KSaveIOConfig::setProxyConfigScript( mData->proxyList["script"] ); + KSaveIOConfig::setUseReverseProxy( mData->useReverseProxy ); + KSaveIOConfig::setNoProxyFor( mData->noProxyFor.join(",") ); + + + KSaveIOConfig::updateRunningIOSlaves (this); + if ( updateProxyScout ) + KSaveIOConfig::updateProxyScout( this ); + + emit changed( false ); +} + +void KProxyDialog::defaults() +{ + mDefaultData = true; + mDlg->rbNoProxy->setChecked( true ); + mDlg->location->lineEdit()->clear(); + mDlg->cbPersConn->setChecked( false ); + emit changed( true ); +} + +void KProxyDialog::setupManProxy() +{ + KManualProxyDlg dlgManual( this ); + + dlgManual.setProxyData( *mData ); + + if ( dlgManual.exec() == QDialog::Accepted ) + { + *mData = dlgManual.data(); + mDlg->rbManual->setChecked(true); + emit changed( true ); + } +} + +void KProxyDialog::setupEnvProxy() +{ + KEnvVarProxyDlg dlgEnv( this ); + + dlgEnv.setProxyData( *mData ); + + if ( dlgEnv.exec() == QDialog::Accepted ) + { + *mData = dlgEnv.data(); + mDlg->rbEnvVar->setChecked(true); + emit changed( true ); + } +} + +void KProxyDialog::slotChanged() +{ + mDefaultData = false; + emit changed( true ); +} + +void KProxyDialog::slotUseProxyChanged() +{ + mDefaultData = false; + bool useProxy = !(mDlg->rbNoProxy->isChecked()); + mDlg->gbAuth->setEnabled(useProxy); + mDlg->gbOptions->setEnabled(useProxy); + emit changed( true ); +} + +QString KProxyDialog::quickHelp() const +{ + return i18n( "

    Proxy

    " + "

    A proxy server is an intermediate program that sits between " + "your machine and the Internet and provides services such as " + "web page caching and/or filtering.

    " + "

    Caching proxy servers give you faster access to sites you have " + "already visited by locally storing or caching the content of those " + "pages; filtering proxy servers, on the other hand, provide the " + "ability to block out requests for ads, spam, or anything else you " + "want to block.

    " + "

    Note: Some proxy servers provide both services.

    " ); +} + +void KProxyDialog::showInvalidMessage( const QString& _msg ) +{ + QString msg; + + if( !_msg.isEmpty() ) + msg = _msg; + else + msg = i18n( "The proxy settings you specified are invalid." + "

    Please click on the Setup... " + "button and correct the problem before proceeding; " + "otherwise your changes will be ignored." ); + + KMessageBox::error( this, msg, i18n("Invalid Proxy Setup") ); +} + +#include "kproxydlg.moc" diff --git a/kcontrol/kio/kproxydlg.h b/kcontrol/kio/kproxydlg.h new file mode 100644 index 000000000..bbac5641d --- /dev/null +++ b/kcontrol/kio/kproxydlg.h @@ -0,0 +1,82 @@ +/* + kproxydlg.h - Proxy configuration dialog + + Copyright (C) 2001- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 _KPROXYDIALOG_H +#define _KPROXYDIALOG_H + +#include + +#include + +class QTabWidget; + +class KProxyData; +class KProxyDialogUI; + +class KProxyOptions : public KCModule +{ + Q_OBJECT + +public: + KProxyOptions( QWidget* parent = 0 ); + ~KProxyOptions(); + + virtual void load(); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + +private: + KCModule* mProxy; + KCModule* mSocks; + QTabWidget* mTab; +}; + +class KProxyDialog : public KCModule +{ + Q_OBJECT + +public: + KProxyDialog( QWidget* parent = 0 ); + ~KProxyDialog(); + + virtual void load(); + virtual void save(); + virtual void defaults(); + QString quickHelp() const; + +private slots: + void slotChanged(); + void slotUseProxyChanged(); + + void setupManProxy(); + void setupEnvProxy(); + +private: + void showInvalidMessage( const QString& _msg = QString::null ); + +private: + KProxyDialogUI* mDlg; + KProxyData* mData; + bool mDefaultData; +}; + +#endif diff --git a/kcontrol/kio/kproxydlg_ui.ui b/kcontrol/kio/kproxydlg_ui.ui new file mode 100644 index 000000000..1a6b5d6e2 --- /dev/null +++ b/kcontrol/kio/kproxydlg_ui.ui @@ -0,0 +1,441 @@ + +KProxyDialogUI + + + ProxyDlgUI + + + + 0 + 0 + 418 + 420 + + + + <qt> +Setup proxy configuration. +<p> +A proxy server is an intermediate machine that sits between your computer and the Internet and provides services such as web page caching and filtering. Caching proxy servers give you faster access to web sites you have already visited by locally storing or caching those pages; filtering proxy servers usually provide the ability to block out requests for ads, spam, or anything else you want to block. +<p> +If you are uncertain whether or not you need to use a proxy server to connect to the Internet, consult your Internet service provider's setup guide or your system administrator. +</qt> + + + + unnamed + + + 0 + + + + gbConfigure + + + NoFrame + + + 0 + + + + + + true + + + + unnamed + + + 0 + + + + rbNoProxy + + + Connect to the &Internet directly + + + true + + + Connect to the Internet directly. + + + + + rbAutoDiscover + + + true + + + A&utomatically detect proxy configuration + + + <qt> +Automatically detect and configure the proxy settings.<p> +Automatic detection is performed using the <b>Web Proxy Auto-Discovery Protocol (WPAD)</b>.<p> +<b>NOTE:</b> This option might not work properly or not work at all in some UNIX/Linux distributions. If you encounter a problem when using this option, please check the FAQ section at http://konqueror.kde.org. +</qt> + + + + + rbAutoScript + + + true + + + U&se the following proxy configuration URL + + + Use the specified proxy script URL to configure the proxy settings. + + + + + layout5 + + + + unnamed + + + + spacer2 + + + Horizontal + + + Fixed + + + + 16 + 20 + + + + + + location + + + false + + + + 7 + 5 + 0 + 0 + + + + Enter the address for the proxy configuration script. + + + + + + + layout7 + + + + unnamed + + + + rbEnvVar + + + true + + + + 3 + 0 + 0 + 0 + + + + Use preset proxy environment &variables + + + <qt> +Use environment variables to configure the proxy settings.<p> +Environment variables such as <b>HTTP_PROXY</b> and <b>NO_PROXY</b> are usually used in multi-user UNIX installations, where both graphical and non-graphical applications need to share the same proxy configuration information. +</qt> + + + + + pbEnvSetup + + + true + + + Setup... + + + Show the proxy environment variable configuration dialog. + + + + + + + layout6 + + + + unnamed + + + + rbManual + + + true + + + + 3 + 0 + 0 + 0 + + + + &Manually specify the proxy settings + + + Manually enter proxy server configuration information. + + + + + pbManSetup + + + true + + + Setup... + + + Show the manual proxy configuration dialog. + + + + + + + + + gbAuth + + + false + + + Authori&zation + + + + unnamed + + + + rbPrompt + + + Prompt as &needed + + + true + + + Prompt for login information whenever it is required. + + + + + rbPresetLogin + + + false + + + Use the following lo&gin information. + + + Use the information below to login into proxy servers as needed. + + + + + layout5 + + + + unnamed + + + + spacer5 + + + Horizontal + + + Fixed + + + + 16 + 20 + + + + + + lePassword + + + false + + + Password + + + Login password. + + + + + leUsername + + + false + + + Login name. + + + + + lbPassword + + + false + + + Password: + + + Login password. + + + + + lbUsername + + + false + + + Username: + + + Login name. + + + + + + + + + gbOptions + + + false + + + O&ptions + + + + unnamed + + + + cbPersConn + + + Use persistent connections to proxy + + + <qt> +Use persistent proxy connection.<p> +Although a persistent proxy connection is faster, note that it only works correctly with proxies that are fully HTTP 1.1 compliant. Do <b>not</b> use this option in combination with non-HTTP 1.1 compliant proxy servers such as JunkBuster and WWWOfle. +</qt> + + + + + + + + + + + rbPresetLogin + toggled(bool) + leUsername + setEnabled(bool) + + + rbPresetLogin + toggled(bool) + lbUsername + setEnabled(bool) + + + rbPresetLogin + toggled(bool) + lePassword + setEnabled(bool) + + + rbPresetLogin + toggled(bool) + lbPassword + setEnabled(bool) + + + rbAutoScript + toggled(bool) + location + setEnabled(bool) + + + + kdialog.h + + + + + kpushbutton.h + + diff --git a/kcontrol/kio/kproxydlgbase.cpp b/kcontrol/kio/kproxydlgbase.cpp new file mode 100644 index 000000000..c901037e3 --- /dev/null +++ b/kcontrol/kio/kproxydlgbase.cpp @@ -0,0 +1,74 @@ + /* + kproxydlgbase.h - Base dialog box for proxy configuration + + Copyright (C) 2001- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 "kproxydlgbase.h" + +KProxyData::KProxyData() +{ + init (); +} + +KProxyData::KProxyData(const KProxyData &data) +{ + (*this) = data; +} + +KProxyData& KProxyData::operator=( const KProxyData &data ) +{ + useReverseProxy = data.useReverseProxy; + showEnvVarValue = data.showEnvVarValue; + noProxyFor = data.noProxyFor; + proxyList = data.proxyList; + type = data.type; + + return (*this); +} + +void KProxyData::reset() +{ + init(); +} + +void KProxyData::init() +{ + proxyList.clear(); + noProxyFor.clear(); + useReverseProxy = false; + showEnvVarValue = false; +} + + +KProxyDialogBase::KProxyDialogBase( QWidget* parent, const char* name, + bool modal, const QString &caption ) + :KDialogBase( parent, name, modal, caption, Ok|Cancel, Ok, true ) +{ + m_bHasValidData = false; +} + +void KProxyDialogBase::setHighLight (QWidget* widget, bool highlight) +{ + if (!widget) + return; + + QFont f = widget->font(); + f.setBold( highlight ); + widget->setFont( f ); +} diff --git a/kcontrol/kio/kproxydlgbase.h b/kcontrol/kio/kproxydlgbase.h new file mode 100644 index 000000000..7c39f31c0 --- /dev/null +++ b/kcontrol/kio/kproxydlgbase.h @@ -0,0 +1,68 @@ +/* + kproxydlgbase.h - Base dialog box for proxy configuration + + Copyright (C) 2001- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License (GPL) version 2 as published by the Free Software + Foundation. + + 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 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 KPROXY_DIALOG_BASE_H +#define KPROXY_DIALOG_BASE_H + +#include +#include +#include + +#include +#include + +class KProxyData +{ +public: + KProxyData(); + KProxyData( const KProxyData &data ); + + void reset (); + KProxyData& operator=( const KProxyData &data ); + + bool useReverseProxy; + bool showEnvVarValue; + QStringList noProxyFor; + KProtocolManager::ProxyType type; + QMap proxyList; + +private: + void init(); +}; + + +class KProxyDialogBase : public KDialogBase +{ +public: + KProxyDialogBase( QWidget* parent = 0, const char* name = 0, + bool modal = false, const QString &caption = QString::null); + + virtual ~KProxyDialogBase() {}; + + virtual const KProxyData data() const=0; + + virtual void setProxyData (const KProxyData&)=0; + +protected: + void setHighLight (QWidget* widget = 0, bool highlight = false); + bool m_bHasValidData; +}; +#endif diff --git a/kcontrol/kio/ksaveioconfig.cpp b/kcontrol/kio/ksaveioconfig.cpp new file mode 100644 index 000000000..a251c0aed --- /dev/null +++ b/kcontrol/kio/ksaveioconfig.cpp @@ -0,0 +1,260 @@ +/* + Copyright (C) 2001 Dawit Alemayehu + + 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 +#include +#include +#include +#include +#include + +#include "ksaveioconfig.h" + +class KSaveIOConfigPrivate +{ +public: + KSaveIOConfigPrivate (); + ~KSaveIOConfigPrivate (); + + KConfig* config; + KConfig* http_config; +}; + +static KSaveIOConfigPrivate *ksiocpref = 0; +static KStaticDeleter ksiocp; + +KSaveIOConfigPrivate::KSaveIOConfigPrivate (): config(0), http_config(0) +{ + ksiocp.setObject (ksiocpref, this); +} + +KSaveIOConfigPrivate::~KSaveIOConfigPrivate () +{ + delete config; +} + +KSaveIOConfigPrivate* KSaveIOConfig::d = 0; + +KConfig* KSaveIOConfig::config() +{ + if (!d) + d = new KSaveIOConfigPrivate; + + if (!d->config) + d->config = new KConfig("kioslaverc", false, false); + + return d->config; +} + +KConfig* KSaveIOConfig::http_config() +{ + if (!d) + d = new KSaveIOConfigPrivate; + + if (!d->http_config) + d->http_config = new KConfig("kio_httprc", false, false); + + return d->http_config; +} + +void KSaveIOConfig::reparseConfiguration () +{ + delete d->config; + d->config = 0; +} + +void KSaveIOConfig::setReadTimeout( int _timeout ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry("ReadTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout)); + cfg->sync(); +} + +void KSaveIOConfig::setConnectTimeout( int _timeout ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry("ConnectTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout)); + cfg->sync(); +} + +void KSaveIOConfig::setProxyConnectTimeout( int _timeout ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry("ProxyConnectTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout)); + cfg->sync(); +} + +void KSaveIOConfig::setResponseTimeout( int _timeout ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry("ResponseTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout)); + cfg->sync(); +} + + +void KSaveIOConfig::setMarkPartial( bool _mode ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry( "MarkPartial", _mode ); + cfg->sync(); +} + +void KSaveIOConfig::setMinimumKeepSize( int _size ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry( "MinimumKeepSize", _size ); + cfg->sync(); +} + +void KSaveIOConfig::setAutoResume( bool _mode ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry( "AutoResume", _mode ); + cfg->sync(); +} + +void KSaveIOConfig::setUseCache( bool _mode ) +{ + KConfig* cfg = http_config (); + cfg->writeEntry( "UseCache", _mode ); + cfg->sync(); +} + +void KSaveIOConfig::setMaxCacheSize( int cache_size ) +{ + KConfig* cfg = http_config (); + cfg->writeEntry( "MaxCacheSize", cache_size ); + cfg->sync(); +} + +void KSaveIOConfig::setCacheControl(KIO::CacheControl policy) +{ + KConfig* cfg = http_config (); + QString tmp = KIO::getCacheControlString(policy); + cfg->writeEntry("cache", tmp); + cfg->sync(); +} + +void KSaveIOConfig::setMaxCacheAge( int cache_age ) +{ + KConfig* cfg = http_config (); + cfg->writeEntry( "MaxCacheAge", cache_age ); + cfg->sync(); +} + +void KSaveIOConfig::setUseReverseProxy( bool mode ) +{ + KConfig* cfg = config (); + cfg->setGroup( "Proxy Settings" ); + cfg->writeEntry("ReversedException", mode); + cfg->sync(); +} + +void KSaveIOConfig::setProxyType(KProtocolManager::ProxyType type) +{ + KConfig* cfg = config (); + cfg->setGroup( "Proxy Settings" ); + cfg->writeEntry( "ProxyType", static_cast(type) ); + cfg->sync(); +} + +void KSaveIOConfig::setProxyAuthMode(KProtocolManager::ProxyAuthMode mode) +{ + KConfig* cfg = config (); + cfg->setGroup( "Proxy Settings" ); + cfg->writeEntry( "AuthMode", static_cast(mode) ); + cfg->sync(); +} + +void KSaveIOConfig::setNoProxyFor( const QString& _noproxy ) +{ + KConfig* cfg = config (); + cfg->setGroup( "Proxy Settings" ); + cfg->writeEntry( "NoProxyFor", _noproxy ); + cfg->sync(); +} + +void KSaveIOConfig::setProxyFor( const QString& protocol, + const QString& _proxy ) +{ + KConfig* cfg = config (); + cfg->setGroup( "Proxy Settings" ); + cfg->writeEntry( protocol.lower() + "Proxy", _proxy ); + cfg->sync(); +} + +void KSaveIOConfig::setProxyConfigScript( const QString& _url ) +{ + KConfig* cfg = config (); + cfg->setGroup( "Proxy Settings" ); + cfg->writeEntry( "Proxy Config Script", _url ); + cfg->sync(); +} + +void KSaveIOConfig::setPersistentProxyConnection( bool enable ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry( "PersistentProxyConnection", enable ); + cfg->sync(); +} + +void KSaveIOConfig::setPersistentConnections( bool enable ) +{ + KConfig* cfg = config (); + cfg->setGroup( QString::null ); + cfg->writeEntry( "PersistentConnections", enable ); + cfg->sync(); +} + +void KSaveIOConfig::updateRunningIOSlaves (QWidget *parent) +{ + // Inform all running io-slaves about the changes... + // if we cannot update, ioslaves inform the end user... + if (!DCOPRef("*", "KIO::Scheduler").send("reparseSlaveConfiguration", QString::null)) + { + QString caption = i18n("Update Failed"); + QString message = i18n("You have to restart the running applications " + "for these changes to take effect."); + KMessageBox::information (parent, message, caption); + return; + } +} + +void KSaveIOConfig::updateProxyScout( QWidget * parent ) +{ + // Inform the proxyscout kded module about changes + // if we cannot update, ioslaves inform the end user... + if (!DCOPRef("kded", "proxyscout").send("reset")) + { + QString caption = i18n("Update Failed"); + QString message = i18n("You have to restart KDE " + "for these changes to take effect."); + KMessageBox::information (parent, message, caption); + return; + } +} + diff --git a/kcontrol/kio/ksaveioconfig.h b/kcontrol/kio/ksaveioconfig.h new file mode 100644 index 000000000..3a6528ed2 --- /dev/null +++ b/kcontrol/kio/ksaveioconfig.h @@ -0,0 +1,96 @@ +/* + Copyright (C) 2001 Dawit Alemayehu + + 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 KSAVEIO_CONFIG_H_ +#define KSAVEIO_CONFIG_H_ + +#include + +class QWidget; +class KSaveIOConfigPrivate; + +class KSaveIOConfig +{ +public: + + /* Reload config file (kioslaverc) */ + static void reparseConfiguration(); + + + /** Timeout Settings */ + static void setReadTimeout( int ); + + static void setConnectTimeout( int ); + + static void setProxyConnectTimeout( int ); + + static void setResponseTimeout( int ); + + + /** Cache Settings */ + static void setMaxCacheAge( int ); + + static void setUseCache( bool ); + + static void setMaxCacheSize( int ); + + static void setCacheControl( KIO::CacheControl ); + + + /** Proxy Settings */ + static void setUseReverseProxy( bool ); + + static void setProxyType( KProtocolManager::ProxyType ); + + static void setProxyAuthMode( KProtocolManager::ProxyAuthMode ); + + static void setProxyConfigScript( const QString& ); + + static void setProxyFor( const QString&, const QString& ); + + static void setNoProxyFor( const QString& ); + + + /** Miscelaneous Settings */ + static void setMarkPartial( bool ); + + static void setMinimumKeepSize( int ); + + static void setAutoResume( bool ); + + static void setPersistentConnections( bool ); + + static void setPersistentProxyConnection( bool ); + + + /** Update all running io-slaves */ + static void updateRunningIOSlaves (QWidget * parent = 0L); + + /** Update proxy scout */ + static void updateProxyScout( QWidget * parent = 0L ); + +protected: + static KConfig* config (); + static KConfig* http_config (); + KSaveIOConfig (); + +private: + static KSaveIOConfigPrivate* d; +}; +#endif diff --git a/kcontrol/kio/lanbrowser.desktop b/kcontrol/kio/lanbrowser.desktop new file mode 100644 index 000000000..5d3965667 --- /dev/null +++ b/kcontrol/kio/lanbrowser.desktop @@ -0,0 +1,226 @@ +[Desktop Entry] +Type=Application +Icon=samba +Exec=kcmshell lanbrowser + + +X-KDE-Library=kio +X-KDE-FactoryName=lanbrowser + +Name=Local Network Browsing +Name[af]=Plaaslike Netwerk Blaaiïng +Name[ar]=تصفح الشبكة المحلية +Name[az]=Yerli Şəbəkə +Name[be]=Прагляд мясцовай сеткі +Name[bg]=Локална мрежа +Name[bn]=স্থানীয় নেটওয়ার্ক ব্রাউজিং +Name[br]=Furchal ar rouedad lec'hel +Name[bs]=Pregledanje lokalne mreže +Name[ca]=Navegació per la xarxa local +Name[cs]=Prohlížení lokální sítě +Name[csb]=Przezéranié môlowi sécë +Name[cy]=Pori Rhwydwaith Lleol +Name[da]=Lokal netværkssøgning +Name[de]=Netzwerk-Browser +Name[el]=Τοπική περιήγηση δικτύου +Name[eo]=Traserĉado de la loka reto +Name[es]=Navegación por la red local +Name[et]=Kohtvõrgu lehitsemine +Name[eu]=Sare lokaleko arakaketa +Name[fa]=مرور شبکۀ محلی +Name[fi]=Paikallisverkon selaus +Name[fr]=Navigation dans le réseau local +Name[fy]=Lokaal netwurk +Name[ga]=Brabhsáil an Líonra Logánta +Name[gl]=Exploración da Rede Local +Name[he]=עיון ברשת המקומית +Name[hi]=स्थानीय नेटवर्क ब्राउजिंग +Name[hr]=Pregledavanje lokalne mreže +Name[hu]=Hálózatböngészés +Name[is]=Staðarnetsflakk +Name[it]=Navigazione rete locale +Name[ja]=ローカルネットワーク参照 +Name[ka]=ლოკალური ქსელის მიმოხილვა +Name[kk]=Жергілікті желіні шолу +Name[km]=ការ​រុករក​បណ្ដាញ​មូលដ្ឋាន +Name[ko]=로컬 네트워크 탐색 +Name[lo]=ເຄືອຂ່າຍພາຍໃນ +Name[lt]=Vietinio tinklo naršymas +Name[lv]=Lokālā Tīkla pārlūkošana +Name[mk]=Прелистување на локалната мрежа +Name[mn]=Дотоод Сүлжээ-Хөтөч +Name[ms]=Pelayaran Rangkaian Setempat +Name[mt]=Browsing tan-Network Lokali +Name[nb]=Lokalt nettverk +Name[nds]=Lokaal Nettwarkkieker +Name[ne]=स्थानीय सञ्जाल ब्राउजिङ +Name[nl]=Lokaal netwerk +Name[nn]=Lokalt nettverk +Name[nso]=Boinyakisi bja Kgokagano ya Selegae +Name[pa]=ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਝਲਕਾਰਾ +Name[pl]=Przeglądanie sieci lokalnej +Name[pt]=Navegação na Rede Local +Name[pt_BR]=Navegação em Rede Local +Name[ro]=Răsfoire rețea locală +Name[ru]=Обзор локальной сети +Name[rw]=Gucukumbura Urusobemiyoboro rwa Hafi +Name[se]=Báikkálaš fierbmebláđđen +Name[sk]=Prehliadanie lokálnej siete +Name[sl]=Brskanje po krajevnem omrežju +Name[sr]=Прегледање локалне мреже +Name[sr@Latn]=Pregledanje lokalne mreže +Name[sv]=Lokal nätverksbläddring +Name[ta]=உள் வலைதல உலாவுதல் +Name[te]=స్థానిక నెట్వర్క్ బ్రౌజింగ్ +Name[tg]=Обзори шабакаи локалӣ +Name[th]=เรียกดูเครือข่ายท้องถิ่น +Name[tr]=Yerel Ağ Tarama +Name[tt]=Cirle Çeltärne Küzläw +Name[uk]=Перегляд локальної мережі +Name[uz]=Lokal tarmoqni koʻrish +Name[uz@cyrillic]=Локал тармоқни кўриш +Name[ven]=Burausini ya vhukwamani ha hefhano +Name[vi]=Duyệt mạng nội bộ +Name[wa]=Naiviaedje del locåle rantoele +Name[xh]=Ukhangelo Lomsebenzi womnatha Wobulali +Name[zh_CN]=局域网浏览 +Name[zh_TW]=區域網路瀏覽 +Name[zu]=Ukucinga oxhumanweni oluseduze + +Comment=Setup lisa, reslisa and the ioslaves +Comment[af]=Stel lisa, reslisa en die ioslaves op +Comment[az]=Lisa, reslisa və ioslaves-i quraşdır +Comment[be]=Настаўленні lisa, reslisa і ioslaves +Comment[bg]=Настройване на lisa, reslisa и ioslaves +Comment[bn]=lisa, reslisa এবং ioslaves সেট-আপ +Comment[br]=Kefluniadur lisa, reslisa and skalvoù IO +Comment[bs]=Podesite lisa, reslisa i ioslaves +Comment[ca]=Arranja lisa, reslisa i els ioslaves +Comment[cs]=Nastavení Lisa, ResLisa a pomocných zařízení +Comment[csb]=Ùstôw lisa, reslisa ë procedurów wé/wi +Comment[cy]=Gosodiad lisa,reslisa a'r gweision-io +Comment[da]=Opsætning af lisa, reslisa og ioslaverne +Comment[de]=Einrichtung von LISa, resLISa und Ein-/Ausgabemodulen +Comment[el]=Ρύθμιση του lisa, reslisa και των ioslaves +Comment[eo]=Agordo de Lisa, Reslisa kaj la Enel-sklavoj +Comment[es]=Configuración de lisa, reslisa y los ioslaves +Comment[et]=Lisa, reslisa ja KIO moodulite seadistamine +Comment[eu]=Konfiguratu lisa, reslisa eta ioslave-ak +Comment[fa]=برپایی lisa، reslisa و ioslaves +Comment[fi]=Lisan, Reslisan ja KIO-palveluiden asetukset +Comment[fr]=Configuration de LISa, ResLISa et des modules d'entrées-sorties +Comment[fy]=Lisa, reslisa en de ioslaves ynstelle +Comment[ga]=Socraigh lisa, reslisa agus ioslaves +Comment[gl]=Configurar lisa, reslisa e os escravos I/O +Comment[he]=שינוי הגדרות reslisa ,lisa והפרוטוקולים +Comment[hi]=लिसा,रेसलिसा तथा आईओस्लेव्स सेटअप करें +Comment[hr]=Postavke za module lisa, reslisu i ioslaves +Comment[hu]=A Lisa, a ResLisa és a KDE protokollok beállításai +Comment[is]=Stilla lisa, reslisa og I/Ú-þrælana +Comment[it]=Imposta lisa, reslisa e gli ioslave +Comment[ja]=lisa, reslisa, ioslave の設定 +Comment[ka]=lisa, reslisa და ioslaves -ს კონფიგურაცია +Comment[kk]=lisa, reslisa және the ioslaves дегендерді орнату +Comment[km]=ដំឡើង lisa, reslisa និង ioslaves +Comment[ko]=lisa, reslisa, IO 슬레이브 설정 +Comment[lt]=Lisa, reslisa ir ioslaves nustatymas +Comment[lv]=Uzstāda lisa, reslisa un iovergus +Comment[mk]=Поставете ги lisa, reslisa и ioslaves +Comment[mn]=LISa, resLISa ба Оролт/Гаралт-модулын тохируулга +Comment[mt]=Issettja lisa, reslisa u l-ioslaves +Comment[nb]=Oppsett av lisa, reslisa og i/u-slavene +Comment[nds]=Lisa, reslisa un de In-/Utgaavdeensten instellen +Comment[ne]=लिसा, रेसलिसा र इओस्लेभ सेटअप गर्नुहोस् +Comment[nl]=Lisa, reslisa en de ioslaves instellen +Comment[nn]=Oppsett av lisa, reslisa og i/u-slavane +Comment[nso]=Beakanya lisa, reslisa le ioslaves +Comment[pa]=lisa, reslisa ਤੇ ioslaves ਸੈੱਟਅੱਪ +Comment[pl]=Ustawienie lisa, reslisa i procedur we/wy +Comment[pt]=Configurar o lisa, o reslisa e os seus ioslaves +Comment[pt_BR]=Configura lisa, reslisa e os escravos +Comment[ro]=Setează lisa, reslisa și dispozitivele I/O +Comment[ru]=Настройка lisa, reslisa и ioslaves +Comment[rw]=Kugena imiterere ya lisa, reslisa na ioslaves +Comment[se]=Heivet lisa,reslisa ja s/o-šlávaid +Comment[sk]=Nastavenie lisa, reslisa a IO klientov +Comment[sl]=Nastavitve lisa, reslisa in ioslave +Comment[sr]=Подешавање lisa-e, reslisa-e, и ioslave-ова +Comment[sr@Latn]=Podešavanje lisa-e, reslisa-e, i ioslave-ova +Comment[sv]=Ställ in lisa, reslisa och I/O-slavarna +Comment[ta]= லிசா, ரெஸ்லிசா மற்றும் ஐஓஸ்லேவ்ஸ் அமைப்பு +Comment[tg]=Танзимоти lisa, reslisa ва ioslaves +Comment[th]=ตั้งค่า lisa, reslisa และ ioslaves +Comment[tr]=lisa, reslisa ve ioslaves kurulumu +Comment[tt]=lisa, reslisa, ioslaves caylawları +Comment[uk]=Встановлення lisa,reslisa та ioslaves +Comment[uz]=Lisa, reslisa va ioslave xizmatlarni moslash +Comment[uz@cyrillic]=Lisa, reslisa ва ioslave хизматларни мослаш +Comment[ven]=Vhekanyani lisa,reslisa na ioslaves +Comment[vi]=Cài đặt lisa,reslisa và các ioslave +Comment[wa]=Apontiaedje di lisa, reslisa et les ioslaves +Comment[xh]=Cwangcisa i lisa, reslisa ne ioslaves +Comment[zh_CN]=设置 lisa、reslisa 和 ioslaves +Comment[zu]=lungiselela i-lisa, i-reslisa ne-ioslaves + +Keywords=samba,smb,windows,network +Keywords[az]=xml,rpc,daemon,demon,port,qapı,network,şəbəkə,samba,smb,windows +Keywords[be]=Сетка,Навакольнае асяроддзе,samba,smb,windows,network +Keywords[bg]=самба, мрежа, локална, преглед, връзка, samba, smb, windows, network +Keywords[br]=samba,smb,prenester,rouedad +Keywords[bs]=samba,smb,windows,network,mreža +Keywords[ca]=samba,smb,windows,xarxa +Keywords[cs]=samba,smb,windows,síť +Keywords[csb]=samba,smb,windows,séc +Keywords[cy]=samba,smb,windows, rhwydwaith +Keywords[da]=samba,smb,windows,netværk +Keywords[de]=samba,smb,windows,netzwerk +Keywords[el]=samba,smb,windows,δίκτυο +Keywords[eo]=samba,smb,fenestro,windows,reto +Keywords[es]=samba,smb,windows,red +Keywords[et]=samba,smb,windows,võrk +Keywords[eu]=samba,smb,windows,sarea +Keywords[fa]=samba، smb، پنجره‌ها، شبکه +Keywords[fi]=samba,smb,windows,verkko +Keywords[fr]=samba,smb,windows,réseau +Keywords[fy]=samba,smb,windows,netwurk +Keywords[ga]=samba,smb,windows,líonra +Keywords[gl]=samba,smb,windows,rede +Keywords[he]=סמבה,smb,חלונות,רשת, samba,windows,network +Keywords[hi]=साम्बा,एसएमबी,विंडोज़,नेटवर्क +Keywords[hr]=samba,smb,windows,network,mreža +Keywords[hu]=Samba,smb,Windows,hálózat +Keywords[is]=samba,smb,windows,network,net +Keywords[it]=samba,smb,windows,rete +Keywords[ja]=samba,smb,ウィンドウズ,ネットワーク +Keywords[km]=samba,smb,windows,បណ្ដាញ +Keywords[lt]=samba,smb,windows,network,tinklas +Keywords[lv]=samba,smb,windows,tīkls +Keywords[mk]=samba,smb,windows,network,мрежа,заеднички,Виндоус +Keywords[nb]=samba,smb,windows,nettverk +Keywords[nds]=samba,smb,Windows,Nettwark +Keywords[ne]=साम्बा, smb, सञ्झ्याल, सञ्जाल +Keywords[nl]=samba,smb,windows,netwerk +Keywords[nn]=samba,smb,windows,nettverk +Keywords[pa]=samba,smb,windows,network,ਨੈੱਟਵਰਕ,ਸਾਂਬਾ +Keywords[pl]=samba,smb,windows,sieć +Keywords[pt]=samba,smb,windows,rede +Keywords[pt_BR]=samba,smb,windows,rede +Keywords[ro]=samba,smb,windows,rețea +Keywords[rw]=samba,smb,windows,urusobemiyoboro +Keywords[se]=samba,smb,windows,fierpmádat +Keywords[sk]=samba,smb,windows,sieť +Keywords[sl]=samba,smb,windows,network,omrežje +Keywords[sr]=samba,smb,windows,network,мрежа,самба +Keywords[sr@Latn]=samba,smb,windows,network,mreža,samba +Keywords[sv]=samba,smb,windows,nätverk +Keywords[ta]=சாம்ப்,smb,சாளரங்கள்,வலைதளம் +Keywords[th]=samba,smb,วินโดวส์,เครือข่าย +Keywords[tr]=samba,smb,windows,ağ +Keywords[uk]=samba,smb,windows,мережа +Keywords[uz]=samba,smb,windows,tarmoq +Keywords[uz@cyrillic]=samba,smb,windows,тармоқ +Keywords[vi]=samba,smb,cửa sổ,mạng +Keywords[wa]=samba,smb,windows,network,rantoele +Keywords[zh_CN]=samba,smb,windows,network,网络 + +Categories=Qt;KDE;X-KDE-settings-network; diff --git a/kcontrol/kio/main.cpp b/kcontrol/kio/main.cpp new file mode 100644 index 000000000..dfe2eb0f8 --- /dev/null +++ b/kcontrol/kio/main.cpp @@ -0,0 +1,158 @@ +// (c) Torben Weis 1998 +// (c) David Faure 1998 +/* + * main.cpp for lisa,reslisa,kio_lan and kio_rlan kcm module + * + * Copyright (C) 2000,2001 Alexander Neundorf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#include +#include + +#include "kcookiesmain.h" +#include "netpref.h" +#include "smbrodlg.h" +#include "useragentdlg.h" +#include "kproxydlg.h" +#include "cache.h" + +#include "main.h" + +extern "C" +{ + + KDE_EXPORT KCModule *create_cookie(QWidget *parent, const char /**name*/) + { + return new KCookiesMain(parent); + } + + KDE_EXPORT KCModule *create_smb(QWidget *parent, const char /**name*/) + { + return new SMBRoOptions(parent); + } + + KDE_EXPORT KCModule *create_useragent(QWidget *parent, const char /**name*/) + { + return new UserAgentDlg(parent); + } + + KDE_EXPORT KCModule *create_proxy(QWidget *parent, const char /**name*/) + { + return new KProxyOptions(parent); + } + + KDE_EXPORT KCModule *create_cache(QWidget *parent, const char /**name*/) + { + return new KCacheConfigDialog( parent ); + } + + KDE_EXPORT KCModule *create_netpref(QWidget *parent, const char /**name*/) + { + return new KIOPreferences(parent); + } + + KDE_EXPORT KCModule *create_lanbrowser(QWidget *parent, const char *) + { + return new LanBrowser(parent); + } + +} + +LanBrowser::LanBrowser(QWidget *parent) +:KCModule(parent,"kcmkio") +,layout(this) +,tabs(this) +{ + setQuickHelp( i18n("

    Local Network Browsing

    Here you setup your " + "\"Network Neighborhood\". You " + "can use either the LISa daemon and the lan:/ ioslave, or the " + "ResLISa daemon and the rlan:/ ioslave.

    " + "About the LAN ioslave configuration:
    If you select it, the " + "ioslave, if available, will check whether the host " + "supports this service when you open this host. Please note " + "that paranoid people might consider even this to be an attack.
    " + "Always means that you will always see the links for the " + "services, regardless of whether they are actually offered by the host. " + "Never means that you will never have the links to the services. " + "In both cases you will not contact the host, so nobody will ever regard " + "you as an attacker.

    More information about LISa " + "can be found at " + "the LISa Homepage or contact Alexander Neundorf " + "<neundorf@kde.org>.")); + + layout.addWidget(&tabs); + + smbPage = create_smb(&tabs, 0); + tabs.addTab(smbPage, i18n("&Windows Shares")); + connect(smbPage,SIGNAL(changed(bool)), SLOT( changed() )); + + lisaPage = KCModuleLoader::loadModule("kcmlisa", KCModuleLoader::None, &tabs); + if (lisaPage) + { + tabs.addTab(lisaPage,i18n("&LISa Daemon")); + connect(lisaPage,SIGNAL(changed()), SLOT( changed() )); + } + +// resLisaPage = KCModuleLoader::loadModule("kcmreslisa", &tabs); +// if (resLisaPage) +// { +// tabs.addTab(resLisaPage,i18n("R&esLISa Daemon")); +// connect(resLisaPage,SIGNAL(changed()), SLOT( changed() )); +// } + + kioLanPage = KCModuleLoader::loadModule("kcmkiolan", KCModuleLoader::None, &tabs); + if (kioLanPage) + { + tabs.addTab(kioLanPage,i18n("lan:/ Iosla&ve")); + connect(kioLanPage,SIGNAL(changed()), SLOT( changed() )); + } + + setButtons(Apply|Help); + load(); +} + +void LanBrowser::load() +{ + smbPage->load(); + if (lisaPage) + lisaPage->load(); +// if (resLisaPage) +// resLisaPage->load(); + if (kioLanPage) + kioLanPage->load(); + emit changed(false); +} + +void LanBrowser::save() +{ + smbPage->save(); +// if (resLisaPage) +// resLisaPage->save(); + if (kioLanPage) + kioLanPage->save(); + if (lisaPage) + lisaPage->save(); + emit changed(false); +} + +#include "main.moc" + diff --git a/kcontrol/kio/main.h b/kcontrol/kio/main.h new file mode 100644 index 000000000..d2499c5e4 --- /dev/null +++ b/kcontrol/kio/main.h @@ -0,0 +1,46 @@ +/* + * main.cpp for lisa,reslisa,kio_lan and kio_rlan kcm module + * + * Copyright (C) 2000 Alexander Neundorf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef MYMAIN_H +#define MYMAIN_H + +#include +#include + +class QTabWidget; + +class LanBrowser:public KCModule +{ + Q_OBJECT + public: + LanBrowser(QWidget *parent=0); + virtual void load(); + virtual void save(); + + private: + QVBoxLayout layout; + QTabWidget tabs; + KCModule *smbPage; + KCModule *lisaPage; +// KCModule *resLisaPage; + KCModule *kioLanPage; +}; +#endif + diff --git a/kcontrol/kio/manualproxy_ui.ui b/kcontrol/kio/manualproxy_ui.ui new file mode 100644 index 000000000..1c8ef8634 --- /dev/null +++ b/kcontrol/kio/manualproxy_ui.ui @@ -0,0 +1,317 @@ + +ManualProxyDlgUI + + + ManualProxyDlgUI + + + + 0 + 0 + 489 + 438 + + + + + unnamed + + + 0 + + + + gbServers + + + Ser&vers + + + + unnamed + + + + lbFtp + + + + 0 + 5 + 0 + 0 + + + + &FTP: + + + leFtp + + + + + lbHttps + + + + 0 + 5 + 0 + 0 + + + + HTTP&S: + + + leHttps + + + + + lbHttp + + + + 0 + 5 + 0 + 0 + + + + H&TTP: + + + leHttp + + + + + leHttp + + + Enter the address of the HTTP proxy server. + + + + + leHttps + + + Enter the address of the HTTPS proxy server. + + + + + leFtp + + + Enter the address of the FTP proxy server. + + + + + sbFtp + + + 65536 + + + Enter the port number of the FTP proxy server. Default 8080. Another common value is 3128. + + + + + sbHttps + + + 65536 + + + Enter the port number of the HTTP proxy server. Default is 8080. Another common value is 3128. + + + + + sbHttp + + + + 32767 + 32767 + + + + 65536 + + + Enter the port number of the HTTP proxy server. Default is 8080. Another common value is 3128. + + + + + spacer1 + + + Horizontal + + + Minimum + + + + 51 + 20 + + + + + + cbSameProxy + + + &Use the same proxy server for all protocols + + + + + pbCopyDown + + + + + + + + + + gbExceptions + + + E&xceptions + + + + unnamed + + + + cbReverseProxy + + + Use proxy only for entries in this list + + + <qt> +Reverse the use of the exception list. Checking this box will result in the proxy servers being used only when the requested URL matches one of the addresses listed here.<p>This feature is useful if all you want or need is to use a proxy server for a few specific sites.<p>If you have more complex requirements you might want to use a configuration script. +</qt> + + + + + layout2 + + + + unnamed + + + + pbDeleteAll + + + false + + + D&elete All + + + Remove all proxy exception addresses from the list. + + + + + pbDelete + + + false + + + De&lete + + + Remove the selected proxy exception address from the list. + + + + + pbNew + + + &New... + + + Add new proxy exception address to the list. + + + + + pbChange + + + false + + + C&hange... + + + Change the selected proxy exception address. + + + + + spacer2 + + + Vertical + + + Expanding + + + + 20 + 114 + + + + + + lbExceptions + + + + + + + + + + leHttp + sbHttp + leHttps + sbHttps + leFtp + sbFtp + cbSameProxy + pbCopyDown + cbReverseProxy + pbNew + pbChange + pbDelete + pbDeleteAll + + + diff --git a/kcontrol/kio/netpref.cpp b/kcontrol/kio/netpref.cpp new file mode 100644 index 000000000..6aa20c4e7 --- /dev/null +++ b/kcontrol/kio/netpref.cpp @@ -0,0 +1,138 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "ksaveioconfig.h" +#include "netpref.h" + +#define MAX_TIMEOUT_VALUE 3600 + +KIOPreferences::KIOPreferences( QWidget* parent ) + :KCModule( parent, "kcmkio" ) +{ + QVBoxLayout* mainLayout = new QVBoxLayout( this, 0, + KDialog::spacingHint() ); + gb_Timeout = new QVGroupBox( i18n("Timeout Values"), this, "gb_Timeout" ); + QWhatsThis::add( gb_Timeout, i18n("Here you can set timeout values. " + "You might want to tweak them if your " + "connection is very slow. The maximum " + "allowed value is %1 seconds.").arg(MAX_TIMEOUT_VALUE)); + mainLayout->addWidget( gb_Timeout ); + + sb_socketRead = new KIntNumInput( gb_Timeout, "sb_socketRead" ); + sb_socketRead->setSuffix( i18n( " sec" ) ); + sb_socketRead->setLabel( i18n( "Soc&ket read:" ), AlignVCenter); + connect(sb_socketRead, SIGNAL(valueChanged ( int )), + this, SLOT(configChanged())); + + sb_proxyConnect = new KIntNumInput( sb_socketRead, 0, gb_Timeout, + 10, "sb_proxyConnect" ); + sb_proxyConnect->setSuffix( i18n( " sec" ) ); + sb_proxyConnect->setLabel( i18n( "Pro&xy connect:" ), AlignVCenter); + connect(sb_proxyConnect, SIGNAL(valueChanged ( int )), + this, SLOT(configChanged())); + + sb_serverConnect = new KIntNumInput( sb_proxyConnect, 0, gb_Timeout, + 10, "sb_serverConnect" ); + sb_serverConnect->setSuffix( i18n( " sec" ) ); + sb_serverConnect->setLabel( i18n("Server co&nnect:"), AlignVCenter); + connect(sb_serverConnect, SIGNAL(valueChanged ( int )), + this, SLOT(configChanged())); + + sb_serverResponse = new KIntNumInput( sb_serverConnect, 0, gb_Timeout, + 10, "sb_serverResponse" ); + sb_serverResponse->setSuffix( i18n( " sec" ) ); + sb_serverResponse->setLabel( i18n("&Server response:"), AlignVCenter); + connect(sb_serverResponse, SIGNAL(valueChanged ( int )), + this, SLOT(configChanged())); + + gb_Ftp = new QVGroupBox( i18n( "FTP Options" ), this, "gb_Ftp" ); + cb_ftpEnablePasv = new QCheckBox( i18n( "Enable passive &mode (PASV)" ), gb_Ftp ); + QWhatsThis::add(cb_ftpEnablePasv, i18n( "Enables FTP's \"passive\" mode. This is required to allow FTP to work from behind firewalls." )); + cb_ftpMarkPartial = new QCheckBox( i18n( "Mark &partially uploaded files" ), gb_Ftp ); + QWhatsThis::add(cb_ftpMarkPartial, i18n( "

    Marks partially uploaded FTP files.

    " + "

    When this option is enabled, partially uploaded files " + "will have a \".part\" extension. This extension will be removed " + "once the transfer is complete.

    ")); + + mainLayout->addWidget( gb_Ftp ); + + connect(cb_ftpEnablePasv, SIGNAL(toggled(bool)), SLOT(configChanged())); + connect(cb_ftpMarkPartial, SIGNAL(toggled(bool)), SLOT(configChanged())); + + mainLayout->addStretch(); + + load(); +} + +KIOPreferences::~KIOPreferences() +{ +} + +void KIOPreferences::load() +{ + KProtocolManager proto; + + sb_socketRead->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE ); + sb_serverResponse->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE ); + sb_serverConnect->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE ); + sb_proxyConnect->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE ); + + sb_socketRead->setValue( proto.readTimeout() ); + sb_serverResponse->setValue( proto.responseTimeout() ); + sb_serverConnect->setValue( proto.connectTimeout() ); + sb_proxyConnect->setValue( proto.proxyConnectTimeout() ); + + KConfig config( "kio_ftprc", true, false ); + cb_ftpEnablePasv->setChecked( !config.readBoolEntry( "DisablePassiveMode", false ) ); + cb_ftpMarkPartial->setChecked( config.readBoolEntry( "MarkPartial", true ) ); + emit changed( false ); +} + +void KIOPreferences::save() +{ + KSaveIOConfig::setReadTimeout( sb_socketRead->value() ); + KSaveIOConfig::setResponseTimeout( sb_serverResponse->value() ); + KSaveIOConfig::setConnectTimeout( sb_serverConnect->value() ); + KSaveIOConfig::setProxyConnectTimeout( sb_proxyConnect->value() ); + + KConfig config( "kio_ftprc", false, false ); + config.writeEntry( "DisablePassiveMode", !cb_ftpEnablePasv->isChecked() ); + config.writeEntry( "MarkPartial", cb_ftpMarkPartial->isChecked() ); + config.sync(); + + KSaveIOConfig::updateRunningIOSlaves (this); + + emit changed( false ); +} + +void KIOPreferences::defaults() +{ + sb_socketRead->setValue( DEFAULT_READ_TIMEOUT ); + sb_serverResponse->setValue( DEFAULT_RESPONSE_TIMEOUT ); + sb_serverConnect->setValue( DEFAULT_CONNECT_TIMEOUT ); + sb_proxyConnect->setValue( DEFAULT_PROXY_CONNECT_TIMEOUT ); + + cb_ftpEnablePasv->setChecked( true ); + cb_ftpMarkPartial->setChecked( true ); + + emit changed(true); +} + +QString KIOPreferences::quickHelp() const +{ + return i18n("

    Network Preferences

    Here you can define" + " the behavior of KDE programs when using Internet" + " and network connections. If you experience timeouts" + " or use a modem to connect to the Internet, you might" + " want to adjust these settings." ); +} + +#include "netpref.moc" diff --git a/kcontrol/kio/netpref.desktop b/kcontrol/kio/netpref.desktop new file mode 100644 index 000000000..43349e926 --- /dev/null +++ b/kcontrol/kio/netpref.desktop @@ -0,0 +1,205 @@ +[Desktop Entry] +Comment=Configure generic network preferences, like timeout values +Comment[af]=Konfigureer generies netwerk voorkeure, hou van tydverstreke waardes +Comment[ar]=إعداد تفضيلات الشبكة العامة، مثل قيم فترات الإنتظار +Comment[az]=Ümumi şəbəkə qurğuları, məsələn vaxt dolması kimi +Comment[be]=Настаўленні агульных уласцівасцяў сеткі, напр., тэрмінаў чакання +Comment[bg]=Настройване на общите мрежови параметри +Comment[bn]=বিবিধ নেটওয়ার্ক সেটিংস কনফিগারেশন, যথা টাইম-আউট মানসমূহ +Comment[bs]=Podešavanje općih mrežnih postavki kao što su timeout vrijednosti +Comment[ca]=Configuració de les preferències genèriques de la xarxa, com ara els valors per als temps d'expiració +Comment[cs]=Nastavení obecných parametrů sítě, např. časových limitů +Comment[csb]=Kònfigùracëjô sécoëch nastôwów jakno np. limitu czasu +Comment[cy]=Ffurfweddu dewisiadau rhwydwaith generig, fel gwerthoedd goramser +Comment[da]=Indstil generelle netværksvalg såsom timeout-værdier +Comment[de]=Einfache Netzwerkeinstellungen vornehmen wie z. B. Zeitüberschreitungen +Comment[el]=Ρύθμιση γενικών προτιμήσεων δικτύου, όπως τιμές χρονικών ορίων +Comment[eo]=Ĝeneralaj retopcioj, kiel tempolimoj ktp. +Comment[es]=Configuración de las preferencias genéricas de red, como los tiempos de desconexión +Comment[et]=Üldised võrguseadistused +Comment[eu]=Konfiguratu sarerako hobespen orokorrak (denbora-muga balioak, besteak beste) +Comment[fa]=پیکربندی تنظیمات شبکۀ محلی، مانند مقادیر اتمام‌ وقت +Comment[fi]=Muokkaa yleisiä verkkoasetuksia kuten aikakatkaisuarvoja +Comment[fr]=Configuration générique du réseau, comme par exemple les valeurs des délais d'attente +Comment[fy]=ynstelle fan algemiene netwurkfoarkar, sa as tiidslimytwearden +Comment[gl]=Configurar as preferéncias xenéricas de rede, como os valores de agarda +Comment[he]=שינוי הגדרות רשת כלליות כגון ערכי זמנים מוקצבים +Comment[hi]=जेनेरिक नेटवर्क प्राथमिकताएँ, जैसे टाइम-आउट मूल्य- कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje generičkih mrežnih vrijednosti, poput vremena prekoračenja +Comment[hu]=A hálózati paraméterek, például a várakozási idők beállítása +Comment[is]=Tilgreina almennar netstillingar, t.d. hámarkstíma +Comment[it]=Configura le preferenze di rete generiche, come ad esempio i tempi massimi +Comment[ja]=タイムアウト値などの一般的なネットワーク設定 +Comment[ka]=ქსელის ზოგადი პარამეტრები, ისეთი როგორიცაა ტაიმაუტი +Comment[kk]=Күту уақыты секілді желінің негізгі параметрлерін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ចំណង់​ចំណូល​ចិត្ត​បណ្ដាញ​ទូទៅ ដូចជា​តម្លៃ​អស់​ពេល​ជាដើម +Comment[ko]=제한 시간 값 같이 일반 네트워크에서 기본이 되는 값을 설정합니다 +Comment[lo]=ປັບແຕ່ງຄ່າທົ່ວໄປການລະບົບເຄືອຂ່າຍ ເຊັ່ນຄ່າການໃຊ້ເວລາເປັນຕົ້ນ +Comment[lt]=Konfigūruoti bendrus tinklo pasirinkimus, tokius, kaip laiko limitai +Comment[lv]=Konfigurē vispārējus tīkla uzstādījumus, kā noildzes vērtības +Comment[mk]=Конфигурирајте ги општите мрежни параметри, како тајмаут вредности +Comment[mn]=Ерөнхий сүлжээ-Тохируулга тохируулах Ж.нь.Хугацаа хэтрэлтийн хугацаа +Comment[ms]=Konfigur keutamaan rangkaian generik, seperti nilai waktu rehat +Comment[mt]=Hawn tista' tagħżel preferenzi ġeneriċi tan-network, bħal ħinijiet ta' stennija +Comment[nb]=Angi generelle nettverksinnstillinger, f.eks. verdier for tidsavbrudd +Comment[nds]=Standard-Nettwarkinstellen, as t.B. Tietgrenzen +Comment[ne]=समय समाप्ति मान जस्तै जेनेरिक सञ्जाल प्राथमिकता कन्फिगर गर्नुहोस् +Comment[nl]=Instellen van algemene netwerkvoorkeuren, zoals tijdslimietwaarden +Comment[nn]=Oppsett av generelle nettverksinnstillingar, som til dømes tidsgrenser +Comment[nso]=Beakanya dikganyogo tsa kgokagano ya kakaretso, goswana le maboleng a phelelo ya nako +Comment[pa]=ਨੈੱਟਵਰਕ ਪਸੰਦ ਸੰਰਚਨਾ, ਜਿਵੇਂ ਸਮਾਂ-ਸੀਮਾ ਮੁੱਲ +Comment[pl]=Konfiguracja niskopoziomowych ustawień sieciowych np. limitu czasu +Comment[pt]=Configuração das opções gerais da rede, p.ex. tempos-limite +Comment[pt_BR]=Configurar preferências genéricas para rede tais como valores de tempo limite +Comment[ro]=Configurează opțiuni de rețea precum valorile temporizărilor +Comment[ru]=Общие свойства сети, такие как значения времени ожидания +Comment[rw]=Kuboneza ibijyanye n'urusobemiyoboro rusange, nk'uduciro tw'igihecyarenze +Comment[se]=Oppalaš fierbmeoidimat, nugo áigemearit +Comment[sk]=Nastavenie všeobecných parametrov siete, napr. dôb čakania +Comment[sl]=Nastavljanje splošnih nastavitev omrežja kot na primer vrednosti zakasnitev +Comment[sr]=Подешавања генеричких параметара мреже, као што је прекорачење времена... +Comment[sr@Latn]=Podešavanja generičkih parametara mreže, kao što je prekoračenje vremena... +Comment[sv]=Anpassa allmänna nätverksinställningar, som tidsgränser +Comment[ta]=பிறப்பு வலைதள சலுகைகள், நேரமுடிவு மதிப்பு ஆகியவற்றை வடிவமை +Comment[tg]= Хусусиятҳои шабакаи монанди мӯҳлати вақт, дар инҷо танзим кунед +Comment[th]=ปรับแต่งค่าระบบเครือข่ายทั่วไป เช่น ค่าการใช้เวลา เป็นต้น +Comment[tr]=Genel ağ tercihlerini yapılandır, zaman aşımı değerleri gibi +Comment[tt]=Çeltärneñ töp köyläwläre; kötterü arası kebek. +Comment[uk]=Налаштування загальних параметрів мережі, таких як значення тайм-аутів +Comment[uz]=Taymaut qiymatiga oʻxshagan tarmoq parametrlarni moslash +Comment[uz@cyrillic]=Таймаут қийматига ўхшаган тармоқ параметрларни мослаш +Comment[ven]=Khonifigarani thodea dza vhukwamani sa tshifhinga tsho fhelaho +Comment[vi]=Cấu hình mạng nói chung ví dụ như giới hạn thời gian +Comment[wa]=Apontiaedje des preferinces rantoele djenerikes, come les valixhances di timeout +Comment[xh]=Qwalasela iinketho zomsebenzi womnatha ka wonke-wonke, njengamaxabiso ophelelo lwexesha +Comment[zh_CN]=配置通用网络首选项,例如超时值 +Comment[zh_TW]=設定一般網路喜好設定,例如逾時值 +Comment[zu]=Hlanganisela okuncanyelwa uwonkewonke koxhumano olusazekile, njengamanani esikhathi sokuphuma +Exec=kcmshell netpref +Icon=network +Keywords=timeout,iopref,netpref,network preferences,ftp +Keywords[be]=Тэрмін чакання,Уласцівасці сеткі,timeout,iopref,netpref,network preferences,ftp +Keywords[bg]=просрочка, време, времето, пауза, прекъсване, връзка, timeout, iopref, netpref, network preferences, ftp +Keywords[bs]=timeout,iopref,netpref,network preferences,ftp,mreža +Keywords[ca]=temps d'expiració,iopref,netpref,preferències de la xarxa,ftp +Keywords[cs]=časový limit,iopref,netpref,nastavení sítě,ftp +Keywords[csb]=limit czasu, sécowé nastôwë,séc,nastôw wé/wi,ftp +Keywords[da]=timeout,udløb,ioindst,netindst,netværksindstillinger,ftp +Keywords[de]=Zeitlimit,Netzwerkeinstellungen,Ein-/Ausgabemodul-Einstellungen +Keywords[el]=χρονικό όριο,iopref,netpref,προτιμήσεις δικτύου,ftp +Keywords[eo]=tempolimo,enel-preferaĵoj,reto,retpreferaĵoj,ftp +Keywords[es]=timeout,iopref,netpref,red preferencias,ftp +Keywords[et]=taimaut,aegumine,võrgu seadistused,ftp +Keywords[eu]=denbora-muga,iopref,netpref,sareko hobespenak, ftp +Keywords[fa]=اتمام وقت، iopref، تنظیمات شبکه، قاپ +Keywords[fr]=délai,configuration du réseau,réseau,entrées/sorties,ftp +Keywords[fy]=timeout,iopref,netpref,netwurkfoarkar,tiidslimyt,ftp +Keywords[gl]=timeout,iopref,netpref,preferéncias de rede, ftp +Keywords[he]=זמן מוקצב,iopref,netpref,העדפות רשת, timeout,iopref,netpref,network preferences,ftp +Keywords[hr]=timeout,prekoračenje vremena,iopref,netpref,network preferences,postavke mreže,ftp +Keywords[hu]=várakozási idő,iopref,netpref,hálózati beállítások,ftp +Keywords[is]=hámarkstími,iopref,netpref,netstillingar,ftp +Keywords[it]=tempo massimo,timeout,iopref,netpref,rete,preferenze di rete,ftp +Keywords[ja]=タイムアウト, iopref, netpref, ネットワーク設定, ftp +Keywords[km]=អស់​ពេល,iopref,netpref,ចំណង់ចំណូល​ចិត្ត​បណ្ដាញ,ftp +Keywords[lt]=timeout,iopref,netpref,network preferences,ftp,laiko limitas, tinklo pasirinkimai +Keywords[mk]=timeout,iopref,netpref,network preferences,ftp,тајмаут,мрежни параметри +Keywords[nb]=avbruddsverdi,I/U-innstillinger,nettverk,nettverksinnstillinger,ftp +Keywords[nds]=timeout,iopref,netpref,Nettwarkinstellen,ftp,Tietgrenz,aflopen +Keywords[ne]=समय समाप्त, iopref, netpref, सञ्जाल प्राथमिकता, ftp +Keywords[nl]=timeout,iopref,netpref,netwerkvoorkeuren,tijdslimiet,ftp +Keywords[nn]=tidsgrense,IU-oppsett,nettverksinnstillingar,nettverk,nettverksoppsett,ftp +Keywords[pl]=limit czasu, ustawienia sieciowe,sieć,ustawienia we/wy,ftp +Keywords[pt]=tempo limite,iopref,netpref,configuração da rede,ftp +Keywords[pt_BR]=tempo limite,iopref,netpref,preferências de rede,ftp,configurações de rede +Keywords[ro]=temporizare,iopref,netpref,preferințe de rețea,ftp +Keywords[rw]= Igihecyarenze,iopref,netpref,ibijyana n'urusobemiyoboro,ftp +Keywords[sl]=iztek,zakasnitev,iopref,netpref,nastavitve omrežja,ftp +Keywords[sv]=tidsgräns,io-inställning,nät-inställning,nätverksinställningar,FTP +Keywords[ta]=நேரம் முடிந்தது,iopref,netpref,வலைதளம் சலுகைகள்,ftp +Keywords[th]=หมดเวลา,iopref,netpref,ปรับแต่งระบบเครือข่าย,ftp +Keywords[tr]=zaman aşımı,ağ tercihleri,iopref,netpref,ftp +Keywords[uk]=тайм-аут,iopref,netpref,параметри мережі,ftp +Keywords[uz]=taymaut,iopref,netpref,tarmoq parametrlari,ftp +Keywords[uz@cyrillic]=таймаут,iopref,netpref,тармоқ параметрлари,ftp +Keywords[vi]=giới hạn thời gian,iopref,netpref,tuỳ chọn mạng +Keywords[wa]=timeout,iopref,netpref,preferinces rantoele,ftp +Keywords[zh_CN]=timeout,iopref,netpref,network preferences,超时,网络首选项,ftp +Keywords[zh_TW]=timeout,iopref,netpref,network preferences,ftp,作業逾時,網路喜好設定 +Name=Connection Preferences +Name[af]=Koppeling Voorkeure +Name[ar]=تفضيلات الإتصال +Name[be]=Уласцівасці злучэнняў +Name[bg]=Настройване на връзката +Name[bn]=যোগাযোগ পছন্দসমূহ +Name[br]=Kefluniadur ar gevreadenn +Name[bs]=Postavke konekcije +Name[ca]=Preferències de connexió +Name[cs]=Nastavení připojení +Name[csb]=Kònfigùracëjô sparłãczeniów +Name[da]=Indstillinger af forbindelse +Name[de]=Verbindungseinstellungen +Name[el]=Προτιμήσεις σύνδεσης +Name[eo]=Konektaj Agordoj +Name[es]=Preferencias de conexión +Name[et]=Ühenduse seadistused +Name[eu]=Konexio hobespenak +Name[fa]=تنظیمات اتصال +Name[fi]=Asetukset +Name[fr]=Préférences de connexion +Name[fy]=Ferbiningfoarkar +Name[ga]=Sainroghanna Naisc +Name[gl]=Preferéncias da Conexón +Name[he]=העדפות חיבור +Name[hi]=कनेक्शन वरीयताएँ +Name[hr]=Postavke povezivanja +Name[hu]=Hálózati paraméterek +Name[is]=Stillingar tenginga +Name[it]=Preferenze sulle connessioni +Name[ja]=接続設定 +Name[ka]=კავშირის თვისებები +Name[kk]=Қосылым параметрлері +Name[km]=ចំណង់ចំណូល​ចិត្ត​ការ​តភ្ជាប់ +Name[ko]=연결 설정 +Name[lt]=Prisijungimo pasirinkimai +Name[lv]=Savienojumu parametri +Name[mk]=Параметри на поврзувањето +Name[ms]=Keutamaan Sambungan +Name[nb]=Forbindelsesinnstillinger +Name[nds]=Instellen för de Verbinnen +Name[ne]=जडान प्राथमिकता +Name[nl]=Verbindingsvoorkeuren +Name[nn]=Innstillingar for samband +Name[pa]=ਕੁਨੈਕਸ਼ਨ ਪਸੰਦ +Name[pl]=Konfiguracja połączeń +Name[pt]=Preferências da Ligação +Name[pt_BR]=Configurações de Conexão +Name[ro]=Preferințe conexiune +Name[ru]=Свойства соединения +Name[rw]=Ibijyanye n'Ukwihuza +Name[se]=Oktavuohta oidimat +Name[sk]=Preferencie pripojenia +Name[sl]=Lastnosti povezave +Name[sr]=Подешавања повезивања +Name[sr@Latn]=Podešavanja povezivanja +Name[sv]=Anslutningsinställningar +Name[ta]=இணைப்பு முன்னுரிமைகள் +Name[tg]=Хусусиятҳои алоқа +Name[th]=ค่าที่ชอบสำหรับการเชื่อมต่อ +Name[tr]=Bağlantı Tercihleri +Name[tt]=Totaşu Caylawları +Name[uk]=Параметри з'єднання +Name[uz]=Aloqa parametrlari +Name[uz@cyrillic]=Алоқа параметрлари +Name[vi]=Tuỳ chọn trong Nối mạng +Name[wa]=Preferinces di raloyaedje +Name[zh_CN]=连接首选项 +Name[zh_TW]=連線偏好設定 +Type=Application +DocPath=kcontrol/netpref/index.html +X-KDE-FactoryName=netpref +X-KDE-Library=kio + +X-KDE-ParentApp=kcontrol + +Categories=Qt;KDE;X-KDE-settings-network; diff --git a/kcontrol/kio/netpref.h b/kcontrol/kio/netpref.h new file mode 100644 index 000000000..2e269d4cd --- /dev/null +++ b/kcontrol/kio/netpref.h @@ -0,0 +1,44 @@ +#ifndef KIOPREFERENCES_H +#define KIOPREFERENCES_H + +#include + +class QLabel; +class QVGroupBox; +class QCheckBox; +class QVBoxLayout; +class QHBoxLayout; +class QGridLayout; + +class KIntNumInput; + +class KIOPreferences : public KCModule +{ + Q_OBJECT + +public: + KIOPreferences( QWidget* parent = 0); + ~KIOPreferences(); + + void load(); + void save(); + void defaults(); + + QString quickHelp() const; + +protected slots: + void configChanged() { emit changed(true); } + +private: + QVGroupBox* gb_Ftp; + QVGroupBox* gb_Timeout; + QCheckBox* cb_ftpEnablePasv; + QCheckBox* cb_ftpMarkPartial; + + KIntNumInput* sb_socketRead; + KIntNumInput* sb_proxyConnect; + KIntNumInput* sb_serverConnect; + KIntNumInput* sb_serverResponse; +}; + +#endif // KIOPREFERENCES_H diff --git a/kcontrol/kio/policydlg.cpp b/kcontrol/kio/policydlg.cpp new file mode 100644 index 000000000..8e59c4bb0 --- /dev/null +++ b/kcontrol/kio/policydlg.cpp @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2000- Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "policydlg.h" +#include "policydlg_ui.h" + + +class DomainLineValidator : public QValidator +{ +public: + DomainLineValidator(QObject *parent) + :QValidator(parent, "domainValidator") + { + } + + State validate(QString &input, int &) const + { + if (input.isEmpty() || (input == ".")) + return Intermediate; + + int length = input.length(); + + for(int i = 0 ; i < length; i++) + { + if (!input[i].isLetterOrNumber() && input[i] != '.' && input[i] != '-') + return Invalid; + } + + return Acceptable; + } +}; + + +PolicyDlg::PolicyDlg (const QString& caption, QWidget *parent, + const char *name) + : KDialogBase(parent, name, true, caption, Ok|Cancel, Ok, true) +{ + m_dlgUI = new PolicyDlgUI (this); + setMainWidget(m_dlgUI); + + m_dlgUI->leDomain->setValidator(new DomainLineValidator(m_dlgUI->leDomain)); + m_dlgUI->cbPolicy->setMinimumWidth( m_dlgUI->cbPolicy->fontMetrics().maxWidth() * 25 ); + + enableButtonOK( false ); + connect(m_dlgUI->leDomain, SIGNAL(textChanged(const QString&)), + SLOT(slotTextChanged(const QString&))); + + setFixedSize (sizeHint()); + m_dlgUI->leDomain->setFocus (); +} + +void PolicyDlg::setEnableHostEdit( bool state, const QString& host ) +{ + if ( !host.isEmpty() ) + m_dlgUI->leDomain->setText( host ); + m_dlgUI->leDomain->setEnabled( state ); +} + +void PolicyDlg::setPolicy (int policy) +{ + if ( policy > -1 && policy <= static_cast(m_dlgUI->cbPolicy->count()) ) + m_dlgUI->cbPolicy->setCurrentItem(policy-1); + + if ( !m_dlgUI->leDomain->isEnabled() ) + m_dlgUI->cbPolicy->setFocus(); +} + +int PolicyDlg::advice () const +{ + return m_dlgUI->cbPolicy->currentItem() + 1; +} + +QString PolicyDlg::domain () const +{ + return m_dlgUI->leDomain->text(); +} + +void PolicyDlg::slotTextChanged( const QString& text ) +{ + enableButtonOK( text.length() > 1 ); +} +#include "policydlg.moc" diff --git a/kcontrol/kio/policydlg.h b/kcontrol/kio/policydlg.h new file mode 100644 index 000000000..dcdca5136 --- /dev/null +++ b/kcontrol/kio/policydlg.h @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2000- Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _POLICYDLG_H +#define _POLICYDLG_H + +#include + +#include + + +class QPushButton; +class PolicyDlgUI; + +class KCookieAdvice +{ +public: + enum Value {Dunno=0, Accept, Reject, Ask}; + + static const char * adviceToStr (const int& advice) + { + switch (advice) + { + case KCookieAdvice::Accept: + return I18N_NOOP("Accept"); + case KCookieAdvice::Reject: + return I18N_NOOP("Reject"); + case KCookieAdvice::Ask: + return I18N_NOOP("Ask"); + default: + return I18N_NOOP("Dunno"); + } + } + + static KCookieAdvice::Value strToAdvice (const QString& advice) + { + if (advice.isEmpty()) + return KCookieAdvice::Dunno; + + if (advice.find (QString::fromLatin1("accept"), 0, false) == 0) + return KCookieAdvice::Accept; + else if (advice.find (QString::fromLatin1("reject"), 0, false) == 0) + return KCookieAdvice::Reject; + else if (advice.find (QString::fromLatin1("ask"), 0, false) == 0) + return KCookieAdvice::Ask; + + return KCookieAdvice::Dunno; + } +}; + +class PolicyDlg : public KDialogBase +{ + Q_OBJECT + +public: + PolicyDlg (const QString& caption, QWidget *parent = 0, + const char *name = 0); + ~PolicyDlg (){}; + + int advice() const; + QString domain() const; + + void setEnableHostEdit( bool, const QString& host = QString::null ); + void setPolicy (int policy); + +protected slots: + void slotTextChanged( const QString& ); + +private: + PolicyDlgUI* m_dlgUI; +}; +#endif diff --git a/kcontrol/kio/policydlg_ui.ui b/kcontrol/kio/policydlg_ui.ui new file mode 100644 index 000000000..1bae63208 --- /dev/null +++ b/kcontrol/kio/policydlg_ui.ui @@ -0,0 +1,106 @@ + +PolicyDlgUI + + + PolicyDlgUI + + + + 0 + 0 + 291 + 120 + + + + + unnamed + + + 0 + + + + lbDomain + + + &Domain name: + + + leDomain + + + <qt> +Enter the host or domain to which this policy applies, e.g. <b>www.kde.org</b> or <b>.kde.org</b>. +</qt> + + + + + leDomain + + + <qt> +Enter the host or domain to which this policy applies, e.g. <b>www.kde.org</b> or <b>.kde.org</b>. +</qt> + + + + + lbPolicy + + + &Policy: + + + cbPolicy + + + <qt> +Select the desired policy: +<ul> +<li><b>Accept</b> - Allows this site to set cookies</li> +<li><b>Reject</b> - Refuse all cookies sent from this site</li> +<li><b>Ask</b> - Prompt when cookies are received from this site</li> +</ul> +</qt> + + + + + + Accept + + + + + Reject + + + + + Ask + + + + cbPolicy + + + <qt> +Select the desired policy: +<ul> +<li><b>Accept</b> - Allows this site to set cookies</li> +<li><b>Reject</b> - Refuse all cookies sent from this site</li> +<li><b>Ask</b> - Prompt when cookies are received from this site</li> +</ul> +</qt> + + + + + + kdialog.h + + + + diff --git a/kcontrol/kio/proxy.desktop b/kcontrol/kio/proxy.desktop new file mode 100644 index 000000000..6d2773bf7 --- /dev/null +++ b/kcontrol/kio/proxy.desktop @@ -0,0 +1,209 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/proxy/index.html +Icon=proxy +Exec=kcmshell proxy + + +X-KDE-Library=kio +X-KDE-FactoryName=proxy +X-KDE-ParentApp=kcontrol + +Name=Proxy +Name[af]=Volmag +Name[ar]=الوكيل +Name[az]=Vəkil Verici +Name[be]=Проксі +Name[bg]=Прокси сървър +Name[bn]=প্রক্সি +Name[br]=Proksi +Name[ca]=Intermediari +Name[csb]=Pòstrzédnik (Proxy) +Name[cy]=Dirprwy +Name[el]=Διαμεσολαβητής +Name[eo]=Prokuriloj +Name[eu]=Proxya +Name[fa]=پیشکار +Name[fi]=Välityspalvelin +Name[fr]=Serveur mandataire (proxy) +Name[ga]=Seachfhreastalaí +Name[he]=מתווכים +Name[hi]=प्रॉक्सी +Name[is]=Milliþjónn +Name[ja]=プロキシ +Name[ka]=პროქსი +Name[kk]=Прокси +Name[km]=ប្រូកស៊ី +Name[ko]=프록시 +Name[lo]=ພຣັອກຊີ +Name[mk]=Прокси +Name[mn]=Итгэмжилэгч-сервер +Name[ms]=Proksi +Name[nb]=Mellomtjener +Name[ne]=प्रोक्सी +Name[nn]=Mellomtenar +Name[nso]=Moemalegato +Name[pa]=ਪਰਾਕਸੀ +Name[pl]=Pośrednik (Proxy) +Name[ru]=Прокси +Name[rw]=Porogisi +Name[se]=Gaskabálvá +Name[sl]=Posrednik +Name[sr]=Прокси +Name[sr@Latn]=Proksi +Name[sv]=Proxyservrar +Name[ta]=பதிவாணை +Name[te]=ప్రాక్సి +Name[tg]=Прокси +Name[th]=พร็อกซี +Name[tr]=Vekil Sunucu +Name[uk]=Проксі +Name[uz]=Proksi +Name[uz@cyrillic]=Прокси +Name[ven]=Purokusi +Name[xh]=Umntu onegunya lokusebenzela omnye +Name[zh_CN]=代理 +Name[zh_TW]=代理 +Name[zu]=Umlingani +Comment=Configure the proxy servers used +Comment[af]=Konfigureer die volmag bedieners gebruik word +Comment[ar]=إعداد خوادم التوكيل المستعملة +Comment[az]=İşlədilən vəkil verici qurğuları +Comment[be]=Настаўленні сервераў проксі +Comment[bg]=Настройване на прокси сървъра +Comment[bn]=ব্যবহৃত প্রক্সি সার্ভার কনফিগার করুন +Comment[br]=Kefluniañ ar servijeroù proksi implijet +Comment[bs]=Podesite proxy servere +Comment[ca]=Configura els servidors intermediaris emprats +Comment[cs]=Nastavení proxy serverů +Comment[csb]=Kònfigùracëjô pòstrzédniczącëch serwerów (proxy) +Comment[cy]=Ffurfweddu gweinyddion dirprwyol i'w defnyddio +Comment[da]=Indstil de proxyservere der bruges +Comment[de]=Proxy-Server einrichten +Comment[el]=Ρυθμίστε τους διαμεσολαβητές που χρησιμοποιούνται +Comment[eo]=Agordo de prokurilo +Comment[es]=Configuración de los servidores Proxy usados +Comment[et]=Kasutatavate proxy serverite seadistamine +Comment[eu]=Konfiguratu erabilitako proxy zerbitzariak +Comment[fa]=پیکربندی پیشکارهای استفاده‌شده +Comment[fi]=Käytettävät välityspalvelimet +Comment[fr]=Configuration des serveurs mandataires (proxy) utilisés +Comment[fy]=Hjir kinne jo de Proxy-tsjinner ynstelle +Comment[gl]=Configurar os servidores proxy empregados +Comment[he]=שינוי הגדרות השרתים המתווכים שנעשה בהם שימוש +Comment[hi]=उपयोग में प्रॉक्सी सर्वर कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje proxy poslužitelja +Comment[hu]=A proxy kiszolgálók beállításai +Comment[is]=Stilla milliþjóna sem á að nota +Comment[it]=Configura il server proxy da usare +Comment[ja]=プロキシサーバの設定 +Comment[ka]=გამოყენებული პროქსების კონფიგურაცია +Comment[kk]=Қолданатын прокси серверлерді баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ម៉ាស៊ីន​បម្រើ​ដែល​បាន​ប្រើ +Comment[ko]=사용할 프록시 서버 설정 +Comment[lo]=ປັບແຕ່ງເຊີບເວີພຣັອກຊີ +Comment[lt]=Konfigūruoti naudojamus proxy serverius +Comment[mk]=Конфигурирајте ги прокси-серверите кои се користат +Comment[mn]=Итгэмжилэгч сервер тохируулах +Comment[ms]=Konfigur pelayan proksi yang digunakan +Comment[mt]=Ikkonfigura servers proxy +Comment[nb]=Oppsett av mellomtjenere +Comment[nds]=De bruukten Proxies instellen +Comment[ne]=प्रयोग गरिएको प्रोक्सी सर्भर कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de Proxy-servers instellen +Comment[nn]=Oppsett av mellomtenarar +Comment[nso]=Beakanya diabi tsa moemalegato tseo di somisitswego +Comment[pa]=ਵਰਤੇ ਜਾਂਦੇ ਪਰਾਕਸੀ ਸਰਵਰਾਂ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja serwerów pośredniczących (proxy) +Comment[pt]=Configurar os servidores 'proxy' usados +Comment[pt_BR]=Configura os servidores proxy usados +Comment[ro]=Configurează serverele proxy utilizate +Comment[ru]=Настройка серверов прокси +Comment[rw]=Kuboneza amaseriveri porogisi akoreshwa +Comment[se]=Heivet gaskabálváid mat geavahuvvojit +Comment[sk]=Nastavenie proxy serverov +Comment[sl]=Nastavitev uporabe posredniških strežnikov +Comment[sr]=Подешавање коришћених прокси сервера +Comment[sr@Latn]=Podešavanje korišćenih proksi servera +Comment[sv]=Anpassa proxyservrar som används +Comment[ta]=பயன்படுத்தப்பட்ட பதிவாணை சேவகன்களை அமை +Comment[tg]=Танзими коргузорҳои прокси мавриди истифода +Comment[th]=ปรับแต่งเซิร์ฟเวอร์พร็อกซี +Comment[tr]=Vekil sunucularını yapılandırır +Comment[tt]=Proxy serverlären caylaw +Comment[uk]=Налаштування проксі-сервера +Comment[uz]=Proksi serverlarini moslash +Comment[uz@cyrillic]=Прокси серверларини мослаш +Comment[ven]=Dzudzanyani dzisiva dza Proxy dzo shumiswaho +Comment[vi]=Cấu hình máy chủ proxy được sử dụng +Comment[wa]=Apontyî les sierveus proxy d' eployîs +Comment[xh]=Qwalasela indlela abasebenziswa ngayo abancedisi be proxy +Comment[zh_CN]=配置所用的代理服务器 +Comment[zh_TW]=設定使用的代理伺服器 +Comment[zu]=Hlanganisela abalekeleli abangabalingani abasetshenziswayo +Keywords=Proxy,Proxy server,Firewall,Squid,proxy +Keywords[ar]=الوكيل,خادم التوكيل,جدار عزل النار,Squid,الوكيل +Keywords[az]=Proksi,vəkil verici,vəkil,Firewall,firewall,Squid,Proxy,proxy,atəş divarı,atəş +Keywords[be]=Проксі,Сервер проксі,Брандмаўэр,проксі,Proxy,Proxy server,Firewall,Squid,proxy +Keywords[bg]=прокси, сървър, посредник, Proxy, Proxy server, Firewall, Squid, proxy +Keywords[br]=Proksi,Server proksi,Moger-tan,Squid,proksi +Keywords[ca]=Intermediari,Servidor intermediari,Tallafocs,Squid,intermediari +Keywords[csb]=proxy,pòstrzédnik,pòstrzédniczącô serwera,ògniowô scana,Squid +Keywords[cy]=Dirprwy,Gweinydd dirprwyol,Mur gwarchod,Squid,dirprwy +Keywords[da]=Proxy,Proxyserver,Brandmur,Squid,proxy +Keywords[el]=Διαμεσολαβητής,Διαμεσολαβητής,Firewall,Squid,διαμεσολαβητής +Keywords[eo]=Prokurilo,Prokuro-servo,Fajroŝirmilo,Squid +Keywords[es]=Proxy,servidor Proxy,Cortafuegos,Squid,proxy +Keywords[et]=proxy,proxy server,tulemüür,squid +Keywords[eu]=Proxya,Proxy zerbitzaria,Firewalla,Squid,proxya +Keywords[fa]=پیشکار، پیشکاری، دیوارۀ آتش، Squid،پیشکار +Keywords[fi]=Välityspalvelin,Palomuuri,Squid +Keywords[fr]=proxy,serveur mandataire,pare-feu,squid +Keywords[fy]=proxy,proxy tsjinner,brânmourre,squid +Keywords[ga]=Seachfhreastalaí,Balla Dóiteáin,Squid +Keywords[gl]=Proxy,Servidor Proxy,Cortafogos,Squid,proxy +Keywords[he]=מתווך,שרת מתווך,Firewall,Squid, Proxy,Proxy server,Squid,proxy +Keywords[hi]=प्रॉक्सी,प्रॉक्सी सर्वर,फायरवाल,एसक्यू-आईडी,प्रॉक्सी +Keywords[hr]=Proxy,Proxy server,Proxy poslužitelj, Firewall,Squid,proxy,Vatrozid +Keywords[hu]=proxy,proxy kiszolgáló,tűzfal,Squid,proxy +Keywords[is]=Eldveggur,Proxy,Proxy server,Firewall,Squid,proxy +Keywords[it]=proxy,server proxy,firewall,Squid +Keywords[ja]=プロキシ,プロキシサーバ,ファイアウォール,Squid,プロキシ +Keywords[ka]=პროქსი,პროქსი სერვერი,ფაირვოლი,Squid,პროქსი +Keywords[km]=ប្រូកស៊ី,ម៉ាស៊ីន​បម្រើ​ប្រូកស៊ី,ជញ្ជាំង​ភ្លើង,Squid,ប្រូកស៊ី +Keywords[lo]=ພຣັອກຊີ,ເຊີເວີພຣັອກຊີ,ໄຟລ໌ວອລ໌,ສະວິກ,ພຣັອກຊີ +Keywords[lt]=Proxy,Proxy server,Firewall,Squid,proxy, proxy serveris,ugniasienė +Keywords[mk]=Proxy,Proxy server,Firewall,Squid,proxy, Прокси,Прокси сервер,Огнен Ѕид,прокси +Keywords[mn]=Итгэмжилэгч,Итгэмжилэгч сервер,Firewall,Squid,proxy +Keywords[nb]=proxy,mellomtjener,brannmur,squid +Keywords[nds]=Proxy,Proxyserver,Nettdiek,Squid,proxy +Keywords[ne]=प्रोक्सी, प्रोक्सी सर्भर, फायरवाल, स्क्विड, प्रोक्सी +Keywords[nl]=proxy,proxy server,firewall,squid +Keywords[nn]=proxy,mellomtenar,brannmur,squid +Keywords[nso]=Moemalegato,Moabi wa moemalegato,Firewall,Squid,moemalegato +Keywords[pa]=Proxy,Proxy server,Firewall,Squid,ਪਰਾਕਸੀ, ਪਰਾਕਸੀ ਸਰਵਰ +Keywords[pl]=proxy,pośrednik,serwer pośredniczący,zapora ogniowa,Squid +Keywords[pt]=Proxy,Servidor proxy,Firewall,Squid,proxy +Keywords[pt_BR]=Proxy,Servidor Proxy,Firewall,Squid,proxy +Keywords[ro]=proxy,server proxy,firewall,squid,zid de foc +Keywords[rw]=Porogisi, Seriveri porogisi,Urukuta-muriro,Squid,porogisi +Keywords[se]=proxy,gaskabálvá,gaskabálvá,buollinmuvra,squid +Keywords[sl]=posrednik,posredniški strežnik,požarni zid,squid,proxy +Keywords[sr]=Прокси, Прокси сервер, Firewall, Squid, прокси +Keywords[sr@Latn]=Proksi, Proksi server, Firewall, Squid, proksi +Keywords[sv]=Proxy,Proxy-server,Brandvägg,Squid,proxy +Keywords[ta]=பதிவாணை,பதிவாணை சேவகன்,ஃபயர்வால்,ஸ்க்யுட்,ப்ராக்சி +Keywords[th]=พร็อกซี,เซิร์ฟเวอร์พร็อกซี,ไฟร์วอลล์,สควิด,พร็อกซี +Keywords[tr]=Vekil,Vekil sunucu,Güvenlik duvarı,Squid,proxy +Keywords[uk]=проксі,проксі-сервер,фаєрвол,Squid,proxy +Keywords[uz]=Squid,Proksi,Proksi server,Fayervol,proksi +Keywords[uz@cyrillic]=Squid,Прокси,Прокси сервер,Файервол,прокси +Keywords[ven]=Purokusi,Siva ya Purokusi,Luvhondo lwa mulilo,Squid,Purokusi +Keywords[vi]=Proxy,Máy phục vụ proxy,Tường lửa,Squid,proxy +Keywords[wa]=Proxy,Proxy server,Firewall,Squid,proxy,sierveu proxy,meur siconte feu +Keywords[xh]=Umntu onegunya lokudsebenzela omnye, umncedisi womntu onegunya,udonga lomlilo,Squid,umntu onegunya lokusebenzela omnye +Keywords[zh_CN]=Proxy,Proxy server,Firewall,Squid,proxy,代理,代理服务器,防火墙 +Keywords[zh_TW]=Proxy,Proxy server,Firewall,Squid,proxy,代理,代理伺服器,防火牆 +Keywords[zu]=Umlingani,Umlekeleli ongumlingana,Firewall,Squid,umlingani + +Categories=Qt;KDE;X-KDE-settings-network; diff --git a/kcontrol/kio/smb.desktop b/kcontrol/kio/smb.desktop new file mode 100644 index 000000000..7a1330706 --- /dev/null +++ b/kcontrol/kio/smb.desktop @@ -0,0 +1,233 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/smb/index.html +Icon=samba +Exec=kcmshell smb + + +X-KDE-Library=kio +X-KDE-FactoryName=smb +X-KDE-ParentApp=kcontrol + +Name=Windows Shares +Name[af]=Vensters Gedeelde bronne +Name[ar]=مشاركات Windows +Name[az]=Windows Payları +Name[be]=Агульныя тэчкі Windows +Name[bg]=Споделяне с Windows +Name[bn]=উইণ্ডোস শেয়ারস +Name[br]=Rannadur prenestrer +Name[ca]=Comparticions Windows +Name[cs]=Sdílené disky systému Microsoft Windows +Name[csb]=Zbiérné dostónczi Windows +Name[cy]=Rhaniadau Windows +Name[da]=Windows-shares +Name[de]=Windows-Freigaben +Name[el]=Κοινόχρηστοι πόροι Windows +Name[eo]=Vindozaj retdosierujoj +Name[es]=Comparticiones Windows +Name[et]=Windowsi ressursid +Name[eu]=Windows konpartizioak +Name[fa]=اشتراکهای ویندوزی +Name[fi]=Windows-jaot +Name[fr]=Partages Windows +Name[fy]=Windows-netwurken +Name[gl]=Comparticións con Windows +Name[he]=שיתופי Windows +Name[hi]=विंडोज़ साझेदारी +Name[hr]=Windows dijeljenja +Name[hu]=Samba kliens +Name[id]=Share Windows +Name[is]=SMB netdrif +Name[it]=Condivisioni Windows +Name[ja]=ウィンドウズ共有 +Name[ka]=Windows საზიარო +Name[kk]=Windows ортақ ресурстары +Name[ko]=윈도 공유 +Name[lo]=ການໃຊ້ຊັບພະຍາກອນຮ່ວມກັບວິນໂດສ໌ +Name[lt]=Windows bendro naudojimo diskai +Name[lv]=Windows Šāres +Name[mk]=Windows заеднички +Name[mn]=Windows-Нөөцүүд +Name[ms]=Kongsi Tetingkap +Name[mt]=Shares tal-Windows +Name[nb]=Delte Windows-ressurser +Name[nds]=Windows-Freegaven +Name[ne]=विण्डोज साझेदारी +Name[nl]=Windows-netwerken +Name[nn]=Delte Windows-ressursar +Name[nso]=Dikabagano tsa Window +Name[oc]=Directoris windows +Name[pa]=ਵਿੰਡੋ (windows) ਸਾਂਝ +Name[pl]=Udostępniane zasoby Windows +Name[pt]=Partilhas do Windows +Name[pt_BR]=Compartilhamentos Windows +Name[ro]=Partajări Windows +Name[ru]=Ресурсы Windows +Name[rw]=Imigabane Windows +Name[se]=Juohkojuvvon Windows-resurssat +Name[sk]=Zdieľanie v sieti Windows +Name[sl]=Souporabe iz Windows +Name[sr]=Дељени Windows ресурси +Name[sr@Latn]=Deljeni Windows resursi +Name[sv]=Utdelade Windows-kataloger +Name[ta]=சாளரங்களின் பங்குகள் +Name[tg]=Иштирокоти Windows +Name[th]=ใช้ทรัพยากรร่วมกับวินโดว์ส +Name[tr]=Windows Paylaşımları +Name[tt]=Windows Urtaqları +Name[uk]=Спільні ресурси Windows +Name[ven]=Mukovhekano wa dziwindo +Name[vi]=Chia sẻ với Windows +Name[wa]=Pårtaedjes avou Windows +Name[xh]=Ulwahlulelwano lwe Windows +Name[zh_CN]=Windows 共享资源 +Name[zh_TW]=Windows 資源共享 +Name[zu]=Izabelo zama-Window + +Comment=Use to configure which windows (SMB) filesystems you can browse +Comment[af]=Gebruik na konfigureer wat vensters (Smb) lêerstelsels jy kan blaai +Comment[ar]=إستعمل لإعداد أي من أنظمة الملفات (SMB) تستطيع التصفّح +Comment[az]=Gəzə biləcəyiniz windows (SMB) fayl sistemlərini quraşdırmaqda işlədilir +Comment[be]=Настаўленні файлавых сістэмаў SMB +Comment[bg]=Настройване споделянето на файлове с Windows +Comment[bn]=কোন কোন উইণ্ডোস (সাম্বা) শেয়ার ব্রাউজ করতে পারবেন তা নির্বাচন করতে ব্যবহার করুন +Comment[br]=Implijit evit kefluniañ pe reizhiad restroù windows (SMB) a c'hellit furchal +Comment[bs]=Koristite ovu opciju za podešavanje Windows (SMB) datotečnih sistema koje želite pregledavati +Comment[ca]=S'usa per a configurar en quins sistemes de fitxers windows (SMB) es podrà navegar +Comment[cs]=Použijte k nastavení systémů Windows (SMB), které chcete procházet +Comment[csb]=Kònfigùracëjô przistãpnëch systemòwëch lopków z Windowsa (SMB) +Comment[cy]=Defnyddio i ffurfweddu pa cysodau ffeil Windows (SMB) a fedrwch eu pori +Comment[da]=Bruges til at indstille hvilke Windows-filsystemer (SMB) du kan se +Comment[de]=Hier stellen Sie ein, welche (SMB-)Dateisysteme Sie durchsuchen können +Comment[el]=Ρυθμίστε ποια συστήματα αρχείων windows (SMB) μπορείτε να επισκεφθείτε +Comment[eo]=Retdosierujoj alireblaj per SMB +Comment[es]=Úselo para configurar qué sistemas de archivos de Windows (SMB) puede examinar +Comment[et]=Windowsi (SMB) jagatud resursside lehitsemise seadistused +Comment[eu]=Erabil ezazu zein windows fitxategi sistema (SMB) araka dezakezunkonfiguratzeko +Comment[fa]=استفاده جهت پیکربندی سیستم پرونده‌های ویندوزی(SMB) که می‌توانید مرور کنید. +Comment[fi]=Käytä asettaaksesi windowsin (SMB) tiedostojärjestelmiä, joita voit selata +Comment[fr]=Configuration des systèmes de fichiers Windows (SMB) +Comment[fy]=Hjir kinne jo fêstelle mei wat fan Windows-triemsystemen (SMB) jo fia it netwurk blêdzje wolle. +Comment[gl]=Use-o para configurar os sistemas de ficheiros windows (SMB) que pode navegar +Comment[he]=שינוי ההגדרות בנוגע למערכות הקבצים של SMB) Windows) בהן ניתן לעיין +Comment[hi]=कॉन्फ़िगर करने के लिए इस्तेमाल करें कि कौन सा विंडोज़ फ़ाइलसिस्टम (SMB) आप ब्राउज कर सकते हैं. +Comment[hr]=Konfiguriranje Windows (SMB) datotečnih sustava koje smijete pregledavati +Comment[hu]=Az SMB fájlrendszerek böngészésének beállításai +Comment[id]=Digunakan untuk konfigurasi sistem file windows (SMB) yang digunakan +Comment[is]=Stilla hvaða SMB netdiska (e. windows sameignir) þú getur skoðað +Comment[it]=Configura quali filesystem windows (SMB) si possono sfogliare +Comment[ja]=windows(SMB)ファイルシステムをブラウズするための設定 +Comment[ka]=გამოიყენება windows (SMB) ფაილური სისტემების ჩვენების მისათითებლად +Comment[kk]=Windows-компьютерлердің қай файл жүйелері (SMB) қатынауға ашық екенін баптау +Comment[km]=ប្រើ​ដើម្បី​កំណត់​រចនាសម្ព័ន្ធ ថា​តើ​ប្រព័ន្ធ​ឯកសារ Windows (SMB) ណា​មួយ​ដែល​អ្នក​អាច​រុករក +Comment[ko]=윈도 (SMB) 파일 시스템 탐색 설정 +Comment[lo]=ໃຊ້ສຳລັບການປັບແຕ່ງການເອີ້ນລະບົບ ແຟ້ມຂອງວິນໂດສ໌ (SMB) +Comment[lt]=Naudokite tai norėdami nustatyti kurias Windows (SMB) bylų sistemas Jūs galėsite naršyti +Comment[lv]=Lietojiet, lai norādītu kuras windows (SMB) failu sistēmas Jūs varētu pārlūkot +Comment[mk]=Користете го за да конфигурирате кои windows (SMB) датотечни системи можете да ги прелистувате +Comment[mn]=Энд та ямар виндовс (SMB-)Файлын систем нэгжиж чадахаа тохируулж болно +Comment[ms]=Guna untuk konfigur sistem fail tetingkap (SMB) mana yang anda boleh layar +Comment[mt]=Uża dan biex tagħżel liema filesystems tal-Windows (SMB) tista' tibbrowsja +Comment[nb]=Her kan du stille inn hvilke Windows-filsystemer (SMB) du kan lese +Comment[nds]=Instellen, welke Windows- (SMB-) Dateisystemen Du bruken kannst +Comment[ne]=तपाईँले ब्राउज गर्न सक्ने विण्डोजको (SMB) फाइल प्रणालीहरूमा कन्फिगर गर्न प्रयोग गर्नुहोस् +Comment[nl]=Hier kunt u bepalen op welke Windows-bestandssytemen (SMB) u via het netwerk wilt kunnen bladeren. +Comment[nn]=Her kan du setja opp kva for Windows-filsystem (SMB) du kan lesa +Comment[nso]=E hlwela e beakanya gore ke di-system dife tsa faele ya window (SMB) tseo oka inyakisago tsona +Comment[oc]=S'usa per configurar quins sistemes de fiquièrs windows (SMB) podetz fullejar +Comment[pa]=ਸੰਰਚਨਾ ਵਰਤੋਂ, ਜੋ ਕਿ ਵਿੰਡੋ (SMB) ਫਾਇਲ ਸਿਸਟਮ ਦੀ ਝਲਕ ਵੇਖਾ ਸਕਦਾ ਹੈ +Comment[pl]=Konfiguracja dostępnych systemów plików z Windows (SMB) +Comment[pt]=Configuração das partilhas de Windows (SMB) a que você pode aceder +Comment[pt_BR]=Use para configurar em quais sistemas de arquivos SMB (Rede Windows) você pode navegar +Comment[ro]=Configurează partajările Windows (SMB) pe care le puteți răsfoi +Comment[ru]=Настройка просмотра доступных разделяемых ресурсов Windows-машин +Comment[rw]=Gukoresha mu kuboneza sisitemudosiye ya Windows (SMB) ushobora gucukumbura +Comment[se]=Dás sáhtát heivehit guđe Windows-fiilavuogádaid (SMB) oaččut lohkat +Comment[sk]=Konfigurácia súborového systému Windows (SMB), ktorý môžete prehliadať +Comment[sl]=Uporabite za nastavitev datotečnih sistemov Windows (SMB), po katerih lahko brskate +Comment[sr]=Користите да би подесили које Windows (SMB) системе фајлове ћете моћи да прегледате +Comment[sr@Latn]=Koristite da bi podesili koje Windows (SMB) sisteme fajlove ćete moći da pregledate +Comment[sv]=Använd detta för att ställa in vilka Windows-filsystem (SMB) som du kan komma åt +Comment[ta]=நீங்கள் உலாவக்கூடிய சாளர கோப்பு அமைப்புகளை (SMB) வடிவமைக்கவும் +Comment[tg]= Барои танзим кардани системаи windows, ки (SMB)-ро мехоҳед мурур кунед, қобили истифода аст +Comment[th]=ใช้ปรับแต่งการเรียกดูระบบแฟ้มของวินโดว์ส (SMB) +Comment[tr]=Gözatabileceğiniz windows (SMB) dosya sistemlerini yapılandırmakta kullanılır +Comment[tt]=Windows çeltärendä büleneşkän belem qaraw tärtibeneñ caylawları +Comment[uk]=Налаштування файлових систем Windows (SMB), для навігації +Comment[ven]=I shuma u khonifigara uri ndi mashumele a (SMB) faela a windo ane ninga buronza +Comment[vi]=Dùng để cấu hình hệ thống tập tin Windows (SMB) nào mà bạn có thể duyệt +Comment[wa]=Eployî po-z apontyî ké sistinme di fitchî Windows (SMB) vos ploz foyter +Comment[xh]=Sebenzisa ukuqwalasela eyiphi (SMB) indlela yousebenza okwaziyo ukukhangela iincwadi +Comment[zh_CN]=配置您可以浏览的 Windows (SMB) 文件系统 +Comment[zh_TW]=設定您可以瀏覽的 Windows (SMB) 檔案系統 +Comment[zu]=Sebenzisa ukuhlanganisela ukuthi imaphi amasistimu amafayela ama-window (SMB) ongacinga kuwo + +Keywords=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords +Keywords[ar]=SMB,SAMBA,زبون SMB,شبكة Windows,شبكة المنطقة المحلية,الشبكة,الجوار,الخادم,البث,WINS,المشاركة,تسجيل الدخول,كلمات المرور +Keywords[az]=SMB,SAMBA,SMB alıcı,Windows şəbəkəsi,LAN,Şəbəkə,qonşular,Giriş,Parol,Paylaşım,WINS,yayın +Keywords[be]=Кліент SMB,Сетка Windows,Навакольнае асяроддзе,Сетка,асяроддзе,Сервер,Публікацыя,Агульныя файлы,Уваход,Пароль,Паролі,Уліковы запіс,Сесія,SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords +Keywords[bg]=самба, споделяне, файлове, принтери, печат, пароли, SMB, SAMBA, SMB client, Windows network, LAN, Network, neighborhood, Server, Broadcast, WINS, Share, Login, Passwords +Keywords[ca]=SMB,SAMBA,Client SMB,Xarxa Windows,LAN,Xarxa,veïnat,servidor,Broadcast,WINS,Compartició,Accés,Contrasenyes +Keywords[cs]=SMB,Samba,SMB klient,Síť Microsoft Windows,LAN,Síť,Okolní počítače,Server,Broadcast,WINS,Share,Login,Hesla +Keywords[csb]=SMB,SAMBA,klient SMB,séc Windows,LAN,môlowô séc,sécowé òkrãże,serwera,rozgłôszanié,WINS,dostónk,logòwanié,parole +Keywords[cy]=SMB,SAMBA,dibynnydd SMB,Rhwydwaith Windows,LAN,Rhwydwaith,cymdogaeth,Gweinydd,Darllediad,WINS,Rhanniad,Mewngofnodi,Cyfrineiriau +Keywords[da]=SMB,Samba,SMB-klient,Windows-netværk,Lan,Netværk,arbejdsgruppe,server,Udsend,WINS,Del,Login,kodeord +Keywords[de]=SMB,Samba,SMB-Client,Windows-Netzwerk,LAN,Netzwerk,Netzumgebung,Umgebung,Server,Broadcast,WINS,Freigabe,Anmeldung,Passwörter +Keywords[el]=SMB,SAMBA,Πελάτης SMB,Δίκτυο Windows,LAN,Δίκτυο,γειτονιά,Εξυπηρετητής,Εκπομπή,WINDS,Κοινόχρηστος πόρος,Σύνδεση,Κωδικοί πρόσβασης +Keywords[en_GB]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighbourhood,Server,Broadcast,WINS,Share,Login,Passwords +Keywords[eo]=SMB,Sambo,kliento,Vindozo,reto,LAN,najbaraĵo,servilo,dissendo,WINS,retdosierujo,saluto,pasvorto +Keywords[es]=SMB,SAMBA,Cliente SMB,Red Windows,LAN,Red,entorno,Servidor,Broadcast,WINS,Compartición,Entrada,Acceso,Contraseñas +Keywords[et]=SMB,samba,SMB klient,Windowsi võrk,LAN,võrk,naabrus,server,broadcast,üldlevi,WINS,jagatud ressurss,kasutajanimi,paroolid +Keywords[eu]=SMB,SAMBA,SMB bezeroa,Windows sarea,LAN,Sarea,ingurunea,Zerbitzaria,Broadcast,WINS,Konpartizioa,Saio hasiera,Pasahitza +Keywords[fa]=SMB، SAMBA، کارخواه SMB، شبکۀ ویندوزی، شبکۀ داخلی، شبکه، مجاورت، کارساز، پخش، WINS، مشترک، ورود، اسم‌ رمزها +Keywords[fi]=SMB,SAMBA,SMB-asiakas,Windows verkko,LAN,Verkko,Naapuruus,Palvelin,Jakelu,WINS,Jako,Kirjautuminen,Salasanat +Keywords[fr]=smb,samba,client smb,réseau Windows,lan,réseau local,réseau,voisinage,serveur,broadcast,diffusion,wins,partage,connexion,mot de passe,windows,login +Keywords[fy]=SMB,SAMBA,SMB-client,Windows-netwurk,LAN,netwurk,omwrâld,neighborhood,server,broadcast,WINS,share,Oanmelde,login,wachtwurden,netwurk +Keywords[gl]=SMB,SAMBA,cliente SMB,rede Windows,LAN,Rede,veciñanza,Servidor,Broadcast,WINS,Compartición,Login,Inicio,Contrasinais +Keywords[he]=שיתוף,כניסה למערכת,ססמאות,WINS,רשת מקומית,רשת,שכנים,שרת,שידור,רשת Windows,תוכנית SMB,SAMBA,SMB, SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords +Keywords[hi]=एसएमबी,साम्बा,एसएमबी क्लाएंट,विंडोज़ नेटवर्क,लैन,नेटवर्क,नेबरहुड,सर्वर,ब्राडकास्ट,विन्स,साझेदारी,लॉगइन,पासवर्ड +Keywords[hr]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,SMB klijent,Windows mreža,Mreža,susjedstvo,Poslužitelj,Opća objava,Dijeljenje,Prijava,Lozinke +Keywords[hu]=SMB,Samba,SMB-kliens,Windows-hálózat,LAN,hálózat,környezet,kiszolgáló,broadcast,WINS,megosztás,bejelentkezés,jelszavak +Keywords[id]=SMB,SAMBA,klien SMB,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords +Keywords[is]=Windows net,SMB netdrif,netdrif,net,SMB biðill,Net,nágrenni,þjónn,deild,lykilorð,innskráning +Keywords[it]=SMB,SAMBA,Client SMB,Rete Windows,LAN,Rete,Risorse di rete,Accesso,WINS,Login,Share,Condivisioni,Password,Broadcast,vicini,server,risorse di rete +Keywords[ja]=SMB,SAMBA,SMBクライアント,Windowsネットワーク,LAN,ネットワーク,neighborhood,サーバ,ブロードキャスト,WINS,共有,ログイン,パスワード +Keywords[km]=SMB,SAMBA,ម៉ាស៊ីន​ភ្ញៀវ SMB,បណ្ដាញ Windows,LAN,បណ្ដាញ,កុំព្យូទ័រ​ជិត​ខាង,ម៉ាស៊ីន​បម្រើ,ផ្សាយ,WINS,រួម,ចូល,ពាក្យ​សម្ងាត់ +Keywords[lo]=SMB,SAMBA,ໄຄລເອນ SMB,ລະບົບເຄືອຂ່າຍຂອງວິນໂດສ໌,ແລນ, ລະບົບເຄືອຂ່າຍ,ລະແວກດງວກັນ,ເຊີເວີ,ບອດຄາສ, WINS,ຊັບພະຍາກອນໃຊ້ຮ່ວມກັນ,ລັອກອິນ,ລະຫັດຜ່ານ +Keywords[lt]=SMB,SAMBA,SMB client,SMB klientas,Windows network,Windows tinklas,LAN,vietinis tinklas,Network,tinklas,neighborhood,kaiminystė,Server,serveris,Broadcast,transliacija,WINS,Share,bendro naudojimo,bendro naudojimo diskas,Login,Passwords +Keywords[lv]=SMB,SAMBA,SMB klients,Windows tīkls,LAN,Tīkls,kaimiņš,Serveris,Pārraide,WINS,Šāre,Pieteikšanās,Paroles +Keywords[mk]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,клиент,Windows мрежа,Мрежа, соседство,Сервер,Емитување,WINS,Заеднички,Најава,Лозинки +Keywords[mn]=SMB,Samba,SMB-Client,Виндовс-Сүлжээ,LAN,Сүлжээ, Сүлжээний орчин,Орчин,сервер,Цацалт,WINS,Share,Login,Нууц үгс +Keywords[nb]=SMB,SAMBA,SMB-klient,Windows-nettverk,LAN,Nettverk,nabolag,tjener,kringkasting,WINS,deling,innlogging,passord,ressurs +Keywords[nds]=SMB,SAMBA,SMB-Client,Windowsnettwark,LAN,Nettwark,Naverschap,Server,Broadcast,Rundroop,WINS,deelt Ressource,anmellen,Passwöör +Keywords[ne]=SMB, SAMBA, SMB क्लाइन्ट,सञ्झ्याल सञ्जाल, LAN, सञ्जाल, छिमेकी, सर्भर, प्रसारण, WINS, बाडँफाट, लगइन, पासवर्ड +Keywords[nl]=SMB,SAMBA,SMB-client,Windows-netwerk,LAN,netwerk,omgeving,neighborhood,server,broadcast,WINS,share,inloggen,login,aanmelden,wachtwoorden,netwerk +Keywords[nn]=SMB,SAMBA,SMB-klient,Windows-nettverk,LAN,nettverk,nabolag,grannelag,tenar,kringkasting,WINS,deling,innlogging,passord,ressurs +Keywords[nso]=SMB,SAMBA,Moreki wa SMB,Kgokagano ya di-Window,LAN,Kgokagano,boagisane,Moabi,Kgaso,WINS,Kabagano,Tseno,Mantsuphetiso +Keywords[pa]=SMB,SAMBA,SMB ਕਲਾਂਇਟ,Windows network,LAN,ਨੈਟਵਰਕ,ਗੁਆਂਢੀ, ਸਰਵਰ,Broadcast,WINS,ਸਾਂਝ, ਲਾਗਿੰਨ, ਗੁਪਤ-ਕੋਡ +Keywords[pl]=SMB,SAMBA,klient SMB,sieć Windows,LAN,sieć lokalna,otoczenie sieciowe,serwer,rozgłoszenie,WINS,zasób,logowanie,hasła +Keywords[pt]=SMB,SAMBA,cliente SMB,rede Windows,Windows,LAN,rede,vizinhança de rede,servidor,difusão,WINS,partilha,login,senhas +Keywords[pt_BR]=SMB,SAMBA,cliente SMB,rede Windows,LAN,rede,vizinhança,ambiente de rede,servidor,difusão,WINS,Volume,compartilhamento,login,senhas +Keywords[ro]=SMB,SAMBA,client SMB,Windows,LAN,rețea,vecinătate,server,difuziune,WINS,partajare,logare,parole +Keywords[rw]=SMB,SAMBA,Umukiriya SMB, Urusobemiyoboro Windows,LAN,Urusobemiyoboro,Seriveri,Isakazamakuru,WINS,Isangira,Ifashayinjira,Amagambobanga +Keywords[se]=SMB,SAMBA,SMB-klienta,Windows-fierpmádat,LAN,fierpmádat,WINS,sisačáliheapmi,beassansánit +Keywords[sk]=SMB,SAMBA,SMB klient,sieť Windows,LAN,Sieť,WINS,broadcast,server,login,prihlásenie,heslá,share +Keywords[sl]=SMB,SAMBA,odjemnik SMB,omrežje Windows,LAN,omrežje,omrežna soseščina,oddajanje,WINS,prijava,gesla +Keywords[sr]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Сервер,Broadcast,WINS,Share,Login,Passwords,Мрежа,комшилук,дељење,пријава,лозинке +Keywords[sr@Latn]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,Mreža,komšiluk,deljenje,prijava,lozinke +Keywords[sv]=SMB,SAMBA,SMB-klient,Windowsnätverk,LAN,Nätverk,omgivning,Server,Broadcast,WINS,Utdelning,Lösenord,Inloggning +Keywords[ta]=SMB,SAMBA,SMB உறுப்பினர்,சாளரங்கள் வலைதளம்,LAN,வலைதளம்,பல வலைதளங்கள்,சேவகன்,ஒலிப்பரப்புதல்,WINS,பங்கு,உள்நுழை,கடவுச்சொற்கள் +Keywords[th]=SMB,SAMBA,ไคลเอนต์ SMB,ระบบเครือข่ายของวินโดว์ส,แลน,ระบบเครือข่าย,ที่ใกล้เคียง,เซิร์ฟเวอร์,ถ่ายทอด,WINS,ทรัพยากรใช้ร่วมกัน,ล็อกอิน,รหัสผ่าน +Keywords[tr]=SMB,SAMBA,SMB istemci,Windows ağı,LAN,Ağ,komşular,Giriş,Parola,Paylaşım,WINS,yayın +Keywords[uk]=клієнт SMB,мережа Windows,ЛОМ,LAN,мережа,оточення,SMB,SAMBA,сервер,мережа Windows,ЛОМ,LAN,мережа,оточення,SMB,SAMBA,сервер,трансляція,WINS,спільний ресурс,реєстрація,паролі +Keywords[uz]=SMB,SAMBA,SMB klienti,Windows tarmogʻi,LAN,Tarmoq,tarmoq muhiti,Server,Broadcast,WINS,Share,Foydalanuvchi,Maxfiy soʻzlar +Keywords[uz@cyrillic]=SMB,SAMBA,SMB клиенти,Windows тармоғи,LAN,Тармоқ,тармоқ муҳити,Сервер,Broadcast,WINS,Share,Фойдаланувчи,Махфий сўзлар +Keywords[ven]=SMB,SAMBA,vhashumisani na SMB,Vhukwamani ha Dziwindo,LAN,Vhukwamani,vhadzulatsini,Siva,Hasha,WINS,U kovhekana,U loga,Dziphasiwede +Keywords[vi]=SMB,SAMBA,SMB khách,Mạng Windows,LAN,Mạng,hàng xóm,Máy chủ,Broadcast,WINS,Chia xẻ,Đăng nhập,Mật khẩu +Keywords[wa]=SMB,SAMBA,cliyint SMB,rantoele Windows,LAN,Rantoele,vijhnaedje,Sierveu,Broadcast,WINS,pårtaedje,pårtaedjî,Login,Passwords,sicrets,mots di passe +Keywords[xh]=SMB,SAMBA,umxhasi we SMB,umsebenzi womnatha we Window,LAN, Umsebenzi womnatha,ubumelwane,Umncedisi,Usasazo,WINS,Yahlula,Igama elithile, Amagama agqithisiweyo +Keywords[zh_CN]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,局域网,网络,邻居,服务器,广播,共享,登录,密码 +Keywords[zh_TW]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,客戶端程式,Windows 網路,區域網路,網路,網路芳鄰,伺服器,廣播,共享,登入,密碼 +Keywords[zu]=SMB,SAMBA,umxhasi we-SMB,uxhumano olusakazekile lwama-window,LAN,Uxhumano olusakazekile,isizinda,Umlekeleli,Sakaza,WINS, ukwabelana,Ukungena ngaphakathi,Amagama-okudlula + diff --git a/kcontrol/kio/smbrodlg.cpp b/kcontrol/kio/smbrodlg.cpp new file mode 100644 index 000000000..dc075c793 --- /dev/null +++ b/kcontrol/kio/smbrodlg.cpp @@ -0,0 +1,191 @@ +/* This file is part of the KDE project + + Copyright (C) 2000 Alexander Neundorf + + 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 +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "smbrodlg.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +SMBRoOptions::SMBRoOptions(QWidget *parent) + : KCModule(parent, "kcmkio") +{ + QGridLayout *layout = new QGridLayout(this,2,-1,KDialog::marginHint(), + KDialog::spacingHint()); + QLabel *label=new QLabel(i18n("This is the configuration for the samba client only, not the server."),this); + layout->addMultiCellWidget(label,0,0,0,1); + + m_userLe=new QLineEdit(this); + label=new QLabel(m_userLe,i18n("Default user name:"),this); + layout->addWidget(label,1,0); + layout->addWidget(m_userLe,1,1); + + m_passwordLe=new QLineEdit(this); + m_passwordLe->setEchoMode(QLineEdit::Password); + label=new QLabel(m_passwordLe,i18n("Default password:"),this); + layout->addWidget(label,2,0); + layout->addWidget(m_passwordLe,2,1); + +/* m_workgroupLe=new QLineEdit(this); + label=new QLabel(m_workgroupLe,i18n("Workgroup:"),this); + layout->addWidget(label,3,0); + layout->addWidget(m_workgroupLe,3,1); + + m_showHiddenShares=new QCheckBox(i18n("Show hidden shares"),this); + layout->addMultiCellWidget(m_showHiddenShares,4,4,0,1); + + m_encodingList = new KComboBox( false, this ); + QStringList _strList = KGlobal::charsets()->availableEncodingNames(); + m_encodingList->insertStringList( _strList ); + + label = new QLabel( m_encodingList, i18n( "MS Windows encoding:" ), this ); + layout->addWidget( label, 3, 0 ); + layout->addWidget( m_encodingList, 3, 1 ); + */ + + layout->addWidget(new QWidget(this),4,0); + +// connect(m_showHiddenShares, SIGNAL(toggled(bool)), this, SLOT(changed())); + connect(m_userLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed())); + connect(m_passwordLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed())); +// connect(m_workgroupLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed())); +// connect( m_encodingList, SIGNAL( activated( const QString & ) ), this , SLOT( changed() ) ); + + layout->setRowStretch(4, 1); + + // finaly read the options + load(); +} + +SMBRoOptions::~SMBRoOptions() +{ +} + +void SMBRoOptions::load() +{ + KConfig *cfg = new KConfig("kioslaverc"); + + QString tmp; + cfg->setGroup( "Browser Settings/SMBro" ); + m_userLe->setText(cfg->readEntry("User")); +// m_workgroupLe->setText(cfg->readEntry("Workgroup")); +// m_showHiddenShares->setChecked(cfg->readBoolEntry("ShowHiddenShares",false)); + +// QStringList _strList = KGlobal::charsets()->availableEncodingNames(); +// QString m_encoding = QTextCodec::codecForLocale()->name(); +// m_encodingList->setCurrentItem( _strList.findIndex( cfg->readEntry( "Encoding", m_encoding.lower() ) ) ); + + // unscramble + QString scrambled = cfg->readEntry( "Password" ); + QString password = ""; + for (uint i=0; isetText(password); + + delete cfg; +} + +void SMBRoOptions::save() +{ + KConfig *cfg = new KConfig("kioslaverc"); + + cfg->setGroup( "Browser Settings/SMBro" ); + cfg->writeEntry( "User", m_userLe->text()); +// cfg->writeEntry( "Workgroup", m_workgroupLe->text()); +// cfg->writeEntry( "ShowHiddenShares", m_showHiddenShares->isChecked()); +// cfg->writeEntry( "Encoding", m_encodingList->currentText() ); + + //taken from Nicola Brodu's smb ioslave + //it's not really secure, but at + //least better than storing the plain password + QString password(m_passwordLe->text()); + QString scrambled; + for (uint i=0; i> 10; + unsigned int a2 = (num & 0x3E0) >> 5; + unsigned int a3 = (num & 0x1F); + scrambled += (char)(a1+'0'); + scrambled += (char)(a2+'A'); + scrambled += (char)(a3+'0'); + } + cfg->writeEntry( "Password", scrambled); + + delete cfg; +} + +void SMBRoOptions::defaults() +{ + m_userLe->setText(""); + m_passwordLe->setText(""); +// m_workgroupLe->setText(""); +// m_showHiddenShares->setChecked(false); +} + +void SMBRoOptions::changed() +{ + emit KCModule::changed(true); +} + +QString SMBRoOptions::quickHelp() const +{ + return i18n("

    Windows Shares

    Konqueror is able to access shared " + "windows filesystems if properly configured. If there is a " + "specific computer from which you want to browse, fill in " + "the Browse server field. This is mandatory if you " + "do not run Samba locally. The Broadcast address " + "and WINS address fields will also be available, if you " + "use the native code, or the location of the 'smb.conf' file " + "from which the options are read, when using Samba. In any case, the " + "broadcast address (interfaces in smb.conf) must be set up if it " + "is guessed incorrectly or you have multiple cards. A WINS server " + "usually improves performance, and reduces the network load a lot.

    " + "The bindings are used to assign a default user for a given server, " + "possibly with the corresponding password, or for accessing specific " + "shares. If you choose to, new bindings will be created for logins and " + "shares accessed during browsing. You can edit all of them from here. " + "Passwords will be stored locally, and scrambled so as to render them " + "unreadable to the human eye. For security reasons, you may not want to " + "do that, as entries with passwords are clearly indicated as such.

    "); +} + +#include "smbrodlg.moc" diff --git a/kcontrol/kio/smbrodlg.h b/kcontrol/kio/smbrodlg.h new file mode 100644 index 000000000..d72972516 --- /dev/null +++ b/kcontrol/kio/smbrodlg.h @@ -0,0 +1,55 @@ +/* This file is part of the KDE project + + Copyright (C) 2000, 2005 Alexander Neundorf + + 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 __SMBRODLG_H +#define __SMBRODLG_H + +#include +#include +#include + +#include + +class KComboBox; + +class SMBRoOptions : public KCModule +{ + Q_OBJECT + public: + SMBRoOptions(QWidget *parent = 0); + ~SMBRoOptions(); + + virtual void load(); + virtual void save(); + virtual void defaults(); + QString quickHelp() const; + + private slots: + void changed(); + + private: + QLineEdit *m_userLe; + QLineEdit *m_passwordLe; +// QLineEdit *m_workgroupLe; //currently unused, Alex +// QCheckBox *m_showHiddenShares; //currently unused, Alex +// KComboBox *m_encodingList; //currently unused +}; + +#endif diff --git a/kcontrol/kio/socks.cpp b/kcontrol/kio/socks.cpp new file mode 100644 index 000000000..9c6678a5d --- /dev/null +++ b/kcontrol/kio/socks.cpp @@ -0,0 +1,279 @@ +/** + * socks.cpp + * + * Copyright (c) 2001 George Staikos + * Copyright (c) 2001 Daniel Molkentin (designer port) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "socks.h" +#include + +KSocksConfig::KSocksConfig(QWidget *parent) + : KCModule(parent, "kcmkio") +{ + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmsocks"), I18N_NOOP("KDE SOCKS Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2001 George Staikos")); + + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + + setAboutData( about ); + + + QVBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); + base = new SocksBase(this); + layout->add(base); + + connect(base->_c_enableSocks, SIGNAL(clicked()), this, SLOT(enableChanged())); + connect(base->bg, SIGNAL(clicked(int)), this, SLOT(methodChanged(int))); + + // The custom library + connect(base->_c_customPath, SIGNAL(openFileDialog(KURLRequester *)), this, SLOT(chooseCustomLib(KURLRequester *))); + connect(base->_c_customPath, SIGNAL(textChanged(const QString&)), + this, SLOT(customPathChanged(const QString&))); + + // Additional libpaths + connect(base->_c_newPath, SIGNAL(openFileDialog(KURLRequester *)), this, SLOT(chooseCustomLib(KURLRequester *))); + connect(base->_c_newPath, SIGNAL(returnPressed(const QString&)), + this, SLOT(addThisLibrary(const QString&))); + connect(base->_c_newPath, SIGNAL(textChanged(const QString&)), + this, SLOT(libTextChanged(const QString&))); + connect(base->_c_add, SIGNAL(clicked()), this, SLOT(addLibrary())); + connect(base->_c_remove, SIGNAL(clicked()), this, SLOT(removeLibrary())); + connect(base->_c_libs, SIGNAL(selectionChanged()), this, SLOT(libSelection())); + + // The "Test" button + connect(base->_c_test, SIGNAL(clicked()), this, SLOT(testClicked())); + + // The config backend + load(); +} + +KSocksConfig::~KSocksConfig() +{ +} + +void KSocksConfig::configChanged() +{ + emit changed(true); +} + +void KSocksConfig::enableChanged() +{ + KMessageBox::information(NULL, + i18n("These changes will only apply to newly " + "started applications."), + i18n("SOCKS Support"), + "SOCKSdontshowagain"); + emit changed(true); +} + + +void KSocksConfig::methodChanged(int id) +{ + if (id == 4) { + base->_c_customLabel->setEnabled(true); + base->_c_customPath->setEnabled(true); + } else { + base->_c_customLabel->setEnabled(false); + base->_c_customPath->setEnabled(false); + } + emit changed(true); +} + + +void KSocksConfig::customPathChanged(const QString&) +{ + emit changed(true); +} + + +void KSocksConfig::testClicked() +{ + save(); // we have to save before we can test! Perhaps + // it would be best to warn, though. + + if (KSocks::self()->hasSocks()) { + KMessageBox::information(NULL, + i18n("Success: SOCKS was found and initialized."), + i18n("SOCKS Support")); + // Eventually we could actually attempt to connect to a site here. + } else { + KMessageBox::information(NULL, + i18n("SOCKS could not be loaded."), + i18n("SOCKS Support")); + } + + KSocks::self()->die(); + +} + + +void KSocksConfig::chooseCustomLib(KURLRequester * url) +{ + url->setMode( KFile::Directory ); +/* QString newFile = KFileDialog::getOpenFileName(); + if (newFile.length() > 0) { + base->_c_customPath->setURL(newFile); + emit changed(true); + }*/ +} + + + +void KSocksConfig::libTextChanged(const QString& lib) +{ + if (lib.length() > 0) + base-> _c_add->setEnabled(true); + else base->_c_add->setEnabled(false); +} + + +void KSocksConfig::addThisLibrary(const QString& lib) +{ + if (lib.length() > 0) { + new QListViewItem(base->_c_libs, lib); + base->_c_newPath->clear(); + base->_c_add->setEnabled(false); + base->_c_newPath->setFocus(); + emit changed(true); + } +} + + +void KSocksConfig::addLibrary() +{ + addThisLibrary(base->_c_newPath->url()); +} + + +void KSocksConfig::removeLibrary() +{ + QListViewItem *thisitem = base->_c_libs->selectedItem(); + base->_c_libs->takeItem(thisitem); + delete thisitem; + base->_c_libs->clearSelection(); + base->_c_remove->setEnabled(false); + emit changed(true); +} + + +void KSocksConfig::libSelection() +{ + base->_c_remove->setEnabled(true); +} + + +void KSocksConfig::load() +{ + KConfigGroup config(kapp->config(), "Socks"); + base->_c_enableSocks->setChecked(config.readBoolEntry("SOCKS_enable", false)); + int id = config.readNumEntry("SOCKS_method", 1); + base->bg->setButton(id); + if (id == 4) { + base->_c_customLabel->setEnabled(true); + base->_c_customPath->setEnabled(true); + } else { + base->_c_customLabel->setEnabled(false); + base->_c_customPath->setEnabled(false); + } + base->_c_customPath->setURL(config.readPathEntry("SOCKS_lib")); + + QListViewItem *thisitem; + while ((thisitem = base->_c_libs->firstChild())) { + base->_c_libs->takeItem(thisitem); + delete thisitem; + } + + QStringList libs = config.readPathListEntry("SOCKS_lib_path"); + for(QStringList::Iterator it = libs.begin(); + it != libs.end(); + ++it ) { + new QListViewItem(base->_c_libs, *it); + } + base->_c_libs->clearSelection(); + base->_c_remove->setEnabled(false); + base->_c_add->setEnabled(false); + base->_c_newPath->clear(); + emit changed(false); +} + +void KSocksConfig::save() +{ + KConfigGroup config(kapp->config(), "Socks"); + config.writeEntry("SOCKS_enable",base-> _c_enableSocks->isChecked(), true, true); + config.writeEntry("SOCKS_method", base->bg->id(base->bg->selected()), true, true); + config.writePathEntry("SOCKS_lib", base->_c_customPath->url(), true, true); + QListViewItem *thisitem = base->_c_libs->firstChild(); + + QStringList libs; + while (thisitem) { + libs << thisitem->text(0); + thisitem = thisitem->itemBelow(); + } + config.writePathEntry("SOCKS_lib_path", libs, ',', true, true); + + kapp->config()->sync(); + + emit changed(false); +} + +void KSocksConfig::defaults() +{ + + base->_c_enableSocks->setChecked(false); + base->bg->setButton(1); + base->_c_customLabel->setEnabled(false); + base->_c_customPath->setEnabled(false); + base->_c_customPath->setURL(""); + QListViewItem *thisitem; + while ((thisitem = base->_c_libs->firstChild())) { + base->_c_libs->takeItem(thisitem); + delete thisitem; + } + base->_c_newPath->clear(); + base->_c_add->setEnabled(false); + base->_c_remove->setEnabled(false); + emit changed(true); +} + +QString KSocksConfig::quickHelp() const +{ + return i18n("

    SOCKS

    This module allows you to configure KDE support" + " for a SOCKS server or proxy.

    SOCKS is a protocol to traverse firewalls" + " as described in RFC 1928." + "

    If you have no idea what this is and if your system administrator does not" + " tell you to use it, leave it disabled.

    "); +} + + +#include "socks.moc" + diff --git a/kcontrol/kio/socks.h b/kcontrol/kio/socks.h new file mode 100644 index 000000000..1d950f607 --- /dev/null +++ b/kcontrol/kio/socks.h @@ -0,0 +1,73 @@ +/** + * socks.h + * + * Copyright (c) 2001 George Staikos + * Copyright (c) 2001 Daniel Molkentin (designer port) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _SOCKS_H +#define _SOCKS_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include "socksbase.h" + + +class QVButtonGroup; + +class KSocksConfig : public KCModule +{ + Q_OBJECT +public: + KSocksConfig(QWidget *parent); + virtual ~KSocksConfig(); + + SocksBase *base; + + void load(); + void save(); + void defaults(); + + int buttons(); + QString quickHelp() const; + +public slots: + void configChanged(); + +private slots: + void enableChanged(); + void methodChanged(int id); + void testClicked(); + void chooseCustomLib(KURLRequester *url); + void customPathChanged(const QString&); + void addLibrary(); + void libTextChanged(const QString& lib); + void addThisLibrary(const QString& lib); + void removeLibrary(); + void libSelection(); + +private: + + bool _socksEnabled; + int _useWhat; +}; + +#endif diff --git a/kcontrol/kio/socks.upd b/kcontrol/kio/socks.upd new file mode 100644 index 000000000..ed0383275 --- /dev/null +++ b/kcontrol/kio/socks.upd @@ -0,0 +1,8 @@ +# Hello world +Id=kde3.0/r1 +File=ksocksrc,kdeglobals +Group=,Socks +Key=Custom Lib,SOCKS_lib +Key=Enable SOCKS,SOCKS_enable +Key=Lib Path,SOCKS_lib_path +Key=SOCKS Method,SOCKS_method diff --git a/kcontrol/kio/socksbase.ui b/kcontrol/kio/socksbase.ui new file mode 100644 index 000000000..5def84076 --- /dev/null +++ b/kcontrol/kio/socksbase.ui @@ -0,0 +1,335 @@ + +SocksBase + + + SocksBase + + + + 0 + 0 + 455 + 402 + + + + SOCKS + + + + + + + + unnamed + + + 0 + + + + _c_enableSocks + + + &Enable SOCKS support + + + Check this to enable SOCKS4 and SOCKS5 support in KDE applications and I/O subsystems. + + + + + bg + + + false + + + SOCKS Implementation + + + + unnamed + + + + _c_detect + + + A&uto detect + + + 1 + + + If you select Autodetect, then KDE will automatically search for an implementation of SOCKS on your computer. + + + + + _c_NEC + + + &NEC SOCKS + + + 2 + + + This will force KDE to use NEC SOCKS if it can be found. + + + + + _c_custom + + + Use &custom library + + + 4 + + + Select custom if you wish to use an unlisted SOCKS library. Please note that this may not always work as it depends on the API of the library which you specify (below). + + + + + Layout6 + + + + unnamed + + + + _c_customLabel + + + + 4 + 1 + 0 + 0 + + + + &Path: + + + 20 + + + _c_customPath + + + + + _c_customPath + + + + 0 + 20 + + + + Enter the path to an unsupported SOCKS library. + + + + + + + _c_Dante + + + &Dante + + + 3 + + + This will force KDE to use Dante if it can be found. + + + + + + + _c_addPaths + + + false + + + + 1 + 1 + 0 + 0 + + + + Additional Library Search Paths + + + Here you can specify additional directories to search for the SOCKS libraries. /usr/lib, /usr/local/lib, /usr/local/socks5/lib and /opt/socks5/lib are already searched by default. + + + + unnamed + + + + + Path + + + true + + + true + + + + _c_libs + + + + 7 + 7 + 0 + 0 + + + + This is the list of additional paths that will be searched. + + + + + _c_newPath + + + + 0 + 25 + + + + + + Layout1 + + + + unnamed + + + + Spacer1 + + + Horizontal + + + MinimumExpanding + + + + 20 + 20 + + + + + + _c_add + + + &Add + + + + + _c_remove + + + &Remove + + + + + + + + + Layout2 + + + + unnamed + + + + Spacer2 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + _c_test + + + false + + + &Test + + + Click here to test SOCKS support. + + + + + + + + + _c_enableSocks + toggled(bool) + bg + setEnabled(bool) + + + _c_enableSocks + toggled(bool) + _c_addPaths + setEnabled(bool) + + + _c_enableSocks + toggled(bool) + _c_test + setEnabled(bool) + + + + kurlrequester.h + kdialog.h + + + + diff --git a/kcontrol/kio/uagentproviderdlg.cpp b/kcontrol/kio/uagentproviderdlg.cpp new file mode 100644 index 000000000..3b71b29f4 --- /dev/null +++ b/kcontrol/kio/uagentproviderdlg.cpp @@ -0,0 +1,149 @@ +/** + * Copyright (c) 2001 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "fakeuaprovider.h" +#include "uagentproviderdlg.h" +#include "uagentproviderdlg_ui.h" + +UALineEdit::UALineEdit( QWidget *parent, const char *name ) + :KLineEdit( parent, name ) +{ + // For now do not accept any drops since they might contain + // characters we do not accept. + // TODO: Re-implement ::dropEvent to allow acceptable formats... + setAcceptDrops( false ); +} + +void UALineEdit::keyPressEvent( QKeyEvent* e ) +{ + int key = e->key(); + QString keycode = e->text(); + if ( (key >= Qt::Key_Escape && key <= Qt::Key_Help) || key == Qt::Key_Period || + (cursorPosition() > 0 && key == Qt::Key_Minus) || + (!keycode.isEmpty() && keycode.unicode()->isLetterOrNumber()) ) + { + KLineEdit::keyPressEvent(e); + return; + } + e->accept(); +} + +UAProviderDlg::UAProviderDlg( const QString& caption, QWidget *parent, + FakeUASProvider* provider, const char *name ) + :KDialog(parent, name, true), m_provider(provider) +{ + setCaption ( caption ); + + QVBoxLayout* mainLayout = new QVBoxLayout(this, 0, 0); + + dlg = new UAProviderDlgUI (this); + mainLayout->addWidget(dlg); + //dlg->leIdentity->setEnableSqueezedText( true ); + + if (!m_provider) + { + setEnabled( false ); + return; + } + + init(); +} + +UAProviderDlg::~UAProviderDlg() +{ +} + +void UAProviderDlg::init() +{ + connect( dlg->pbOk, SIGNAL(clicked()), SLOT(accept()) ); + connect( dlg->pbCancel, SIGNAL(clicked()), SLOT(reject()) ); + + connect( dlg->leSite, SIGNAL(textChanged(const QString&)), + SLOT(slotTextChanged( const QString&)) ); + + connect( dlg->cbAlias, SIGNAL(activated(const QString&)), + SLOT(slotActivated(const QString&)) ); + + dlg->cbAlias->clear(); + dlg->cbAlias->insertStringList( m_provider->userAgentAliasList() ); + dlg->cbAlias->insertItem( "", 0 ); + dlg->cbAlias->listBox()->sort(); + + dlg->leSite->setFocus(); +} + +void UAProviderDlg::slotActivated( const QString& text ) +{ + if ( text.isEmpty() ) + dlg->leIdentity->setText( "" ); + else + dlg->leIdentity->setText( m_provider->agentStr(text) ); + + dlg->pbOk->setEnabled( (!dlg->leSite->text().isEmpty() && !text.isEmpty()) ); +} + +void UAProviderDlg::slotTextChanged( const QString& text ) +{ + dlg->pbOk->setEnabled( (!text.isEmpty() && !dlg->cbAlias->currentText().isEmpty()) ); +} + +void UAProviderDlg::setSiteName( const QString& text ) +{ + dlg->leSite->setText( text ); +} + +void UAProviderDlg::setIdentity( const QString& text ) +{ + int id = dlg->cbAlias->listBox()->index( dlg->cbAlias->listBox()->findItem(text) ); + dlg->cbAlias->setCurrentItem( id ); + slotActivated( dlg->cbAlias->currentText() ); + if ( !dlg->leSite->isEnabled() ) + dlg->cbAlias->setFocus(); +} + +QString UAProviderDlg::siteName() +{ + QString site_name=dlg->leSite->text().lower(); + site_name = site_name.remove( "https://" ); + site_name = site_name.remove( "http://" ); + return site_name; +} + +QString UAProviderDlg::identity() +{ + return dlg->cbAlias->currentText(); +} + +QString UAProviderDlg::alias() +{ + return dlg->leIdentity->text(); +} + +#include "uagentproviderdlg.moc" diff --git a/kcontrol/kio/uagentproviderdlg.h b/kcontrol/kio/uagentproviderdlg.h new file mode 100644 index 000000000..67b38d42e --- /dev/null +++ b/kcontrol/kio/uagentproviderdlg.h @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2001 Dawit Alemayehu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __UAPROVIDERDLG_H___ +#define __UAPROVIDERDLG_H___ + + +#include +#include + + +class FakeUASProvider; +class UAProviderDlgUI; + +class UALineEdit : public KLineEdit +{ + Q_OBJECT + +public: + UALineEdit( QWidget *parent, const char *name=0 ); + +protected: + virtual void keyPressEvent( QKeyEvent * ); +}; + +class UAProviderDlg : public KDialog +{ + Q_OBJECT + +public: + UAProviderDlg( const QString& caption, QWidget *parent = 0, + FakeUASProvider* provider = 0, const char *name = 0 ); + ~UAProviderDlg(); + + void setSiteName( const QString& ); + void setIdentity( const QString& ); + + QString siteName(); + QString identity(); + QString alias(); + +protected slots: + void slotActivated( const QString& ); + void slotTextChanged( const QString& ); + +protected: + void init(); + +private: + FakeUASProvider* m_provider; + UAProviderDlgUI* dlg; +}; +#endif diff --git a/kcontrol/kio/uagentproviderdlg_ui.ui b/kcontrol/kio/uagentproviderdlg_ui.ui new file mode 100644 index 000000000..6f2a006ec --- /dev/null +++ b/kcontrol/kio/uagentproviderdlg_ui.ui @@ -0,0 +1,207 @@ + +UAProviderDlgUI + + + UAProviderDlgUI + + + + 0 + 0 + 298 + 240 + + + + + 1 + 5 + 0 + 0 + + + + + unnamed + + + + lbSite + + + &When browsing the following site: + + + leSite + + + <qt> +Enter the site or domain name where a fake browser identification should be used.<p> +<u>NOTE:</u> Wildcard syntax such as \"*,?\" is NOT allowed: instead, use the top level address of a site to make generic matches; for example, if you want all KDE sites to receive a fake browser identification, you would enter <code>.kde.org</code> - the fake identity would then be sent to any KDE site that ends with <code>.kde.org</code>. +</qt> + + + + + leSite + + + <qt> +Enter the site or domain name where a fake browser identification should be used.<p> +<u>NOTE:</u> Wildcard syntax such as \"*,?\" is NOT allowed: instead, use the top level address of a site to make generic matches; for example, if you want all KDE sites to receive a fake browser identification, you would enter <code>.kde.org</code> - the fake identity would then be sent to any KDE site that ends with <code>.kde.org</code>. +</qt> + + + + + lbAlias + + + &Use the following identification: + + + leIdentity + + + <qt> +Select the browser identification to use whenever contacting the site you specified above. +</qt> + + + + + cbAlias + + + <qt> +Select the browser identification to use whenever contacting the site you specified above. +</qt> + + + + + lbIdentity + + + Real identification: + + + leIdentity + + + <qt> +The actual browser identification text that will be sent to the remote machine. +</qt> + + + + + leIdentity + + + true + + + <qt> +The actual browser identification text that will be sent to the remote machine. +</qt> + + + + + spacer3 + + + Vertical + + + MinimumExpanding + + + + 21 + 16 + + + + + + layout3 + + + + unnamed + + + + spacer2 + + + Horizontal + + + MinimumExpanding + + + + 29 + 20 + + + + + + pbOk + + + false + + + &OK + + + + + pbCancel + + + &Cancel + + + + + + + line1 + + + + 3 + 0 + 0 + 0 + + + + HLine + + + Sunken + + + Horizontal + + + + + + kdialog.h + + + + + klineedit.h + kcombobox.h + klineedit.h + + diff --git a/kcontrol/kio/uasprovider.desktop b/kcontrol/kio/uasprovider.desktop new file mode 100644 index 000000000..a8fe24b0d --- /dev/null +++ b/kcontrol/kio/uasprovider.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=UserAgentStrings +Comment=UserAgent Strings +Comment[af]=Gebruiker agent Stringe +Comment[ar]=سلاسل UserAgent +Comment[az]=İstifadəçi Vasitəsi Kəliməsi +Comment[be]=Радкі ідэнтыфікацыі вандроўніка UserAgent +Comment[bg]=Идентификация на браузъра +Comment[bs]=UserAgent stringovi +Comment[ca]=Regles de l'agent d'usuari +Comment[cs]=Řetězce uživatelského agenta +Comment[csb]=Miona "Programë Brëkòwnika" +Comment[cy]=Llinynnau Asiant y Defnyddiwr +Comment[da]=Brugeragent-strenge +Comment[de]=Browserkennungen +Comment[el]=Συμβολοσειρές πράκτορα χρήστη +Comment[eo]=Uzantoagento-frazoj +Comment[es]=Cadenas del Agente de Usuario +Comment[et]=Veebilehitseja identifikaatorid +Comment[eu]=Erabiltzaile agentearen kateak +Comment[fa]=رشته‌های عامل‌ کاربر +Comment[fi]=Käyttäjäagenttimerkkijonot +Comment[fr]=Chaînes d'identité du navigateur +Comment[fy]=regels foar brûkersagint +Comment[ga]=Teaghráin UserAgent +Comment[gl]=Cadeas do Axente de Usuario +Comment[he]=מחרוזות זיהוי דפדפן +Comment[hi]=यूज़रएजेंट स्ट्रिंग्स +Comment[hr]=Identifikacijske (UA - UserAgent) poruke +Comment[hu]=Böngészőazonosítók +Comment[is]=UserAgent strengir +Comment[it]=Stringhe User Agent +Comment[ja]=UserAgent 文字列 +Comment[ka]=Строки UserAgent +Comment[kk]=UserAgent жолдары +Comment[km]=ខ្សែ​អក្សរ​ភ្នាក់ងារ​អ្នក​ប្រើ +Comment[ko]=UserAgent 문자열 +Comment[lo]=ຂໍ້ຄວາມສະແດງຕົວເຄື່ອງມືຂອງຜູ້ໃຊ້ +Comment[lt]=Vartojo agento eilutės +Comment[lv]=LietotājaAģenta Rinda +Comment[mk]=UserAgent низи +Comment[mn]=UserAgent-Таних тэмдэг +Comment[ms]=Rentetan Ejen Pengguna +Comment[mt]=Test tal-UserAgent +Comment[nb]=Brukeragentstrenger +Comment[nds]=Nettkieker-Kennen instellen +Comment[ne]=प्रयोगकर्ता एजेन्ट स्ट्रिङ +Comment[nl]=regels voor Gebruikersagent +Comment[nn]=Brukaragentstrengar +Comment[nso]=Methalofoko ya Mothusi wa Modirisi +Comment[pa]=ਉਪਭੋਗੀ-ਏਜੰਟ ਸਤਰਾਂ +Comment[pl]=Nazwy "Programu Użytkownika" +Comment[pt]=Mensagens do agente do utilizador +Comment[pt_BR]=Strings de Agente de Usuários +Comment[ro]=Texte "User Agent" +Comment[ru]=Строки UserAgent +Comment[rw]=Amakurikiranyanyuguti UmukoziUkoresha +Comment[se]=Geavaheaddjeageanta-dovdamearkkat +Comment[sk]=Reťazce WWW agenta +Comment[sl]=Nizi uporabniškega agenta +Comment[sr]=UserAgent низови +Comment[sr@Latn]=UserAgent nizovi +Comment[sv]=Användaragentsträngar +Comment[ta]=பயன்படுத்துபவர் தொடர்ச்சிகள் +Comment[tg]=Сатри оҷонсии корбар +Comment[th]=ข้อความแสดงตัวเครื่องมือของผู้ใช้ +Comment[tr]=UserAgent Dizileri +Comment[tt]=UserAgent Sätirläre +Comment[uk]=Рядки агента користувача +Comment[ven]=Mutevhe wa vhashumisi +Comment[vi]=Chuỗi UserAgent +Comment[wa]=Tchinnes d' idintité do betchteu +Comment[xh]=Iqela lamagama UserAgent +Comment[zh_CN]=用户代理设置 +Comment[zh_TW]=使用者代理字串設定 +Comment[zu]=Iqoqo lamagama lommeli womsebenzisi + +[PropertyDef::X-KDE-UA-TAG] +Type=QString + +[PropertyDef::X-KDE-UA-FULL] +Type=QString + +[PropertyDef::X-KDE-UA-NAME] +Type=QString + +[PropertyDef::X-KDE-UA-VERSION] +Type=QString + +[PropertyDef::X-KDE-UA-SYSNAME] +Type=QString + +[PropertyDef::X-KDE-UA-SYSRELEASE] +Type=QString + +[PropertyDef::X-KDE-UA-DYNAMIC-ENTRY] +Type=bool diff --git a/kcontrol/kio/uasproviders/Makefile.am b/kcontrol/kio/uasproviders/Makefile.am new file mode 100644 index 000000000..b929efc1b --- /dev/null +++ b/kcontrol/kio/uasproviders/Makefile.am @@ -0,0 +1,14 @@ +services_DATA = ie401onwinnt4.desktop ie45onwinnt5.desktop ie501onwinnt5.desktop \ + ie50onppc.desktop \ + ie55onwin98.desktop ie55onwinnt5.desktop ie60onwinnt51.desktop \ + ie60oncurrent.desktop mozonwinxp.desktop mozonwin2000.desktop \ + mozoncurrent16.desktop mozoncurrent12.desktop \ + mozoncurrent.desktop nn301oncurrent.desktop nn475onwin95.desktop \ + nn475oncurrent.desktop nn476onppc.desktop op403onwinnt4.desktop \ + lynxoncurrent.desktop w3moncurrent.desktop wgetoncurrent.desktop \ + ns71oncurrent.desktop ns71onwinnt51.desktop op75oncurrent.desktop \ + safari12.desktop safari20.desktop googlebot.desktop \ + firefox10oncurrent.desktop firefox15oncurrent.desktop + +servicesdir = $(kde_servicesdir)/useragentstrings + diff --git a/kcontrol/kio/uasproviders/firefox10oncurrent.desktop b/kcontrol/kio/uasproviders/firefox10oncurrent.desktop new file mode 100644 index 000000000..1cfae8d0a --- /dev/null +++ b/kcontrol/kio/uasproviders/firefox10oncurrent.desktop @@ -0,0 +1,70 @@ +[Desktop Entry] +Name=UADescription (Firefox 1.0 on current) +Name[af]=UA-beskrywing (Firefox 1.0 op huidige bedryfstelsel) +Name[be]=UADescription (Firefox 1.0 на гэтай сістэме) +Name[bs]=UADescription (Firefox 1.0 na trenutnom) +Name[ca]=Descripció UA (Firefox 1.0 a l'actual) +Name[cs]=Popis agenta (Firefox 1.0 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (FireFox 1.0) +Name[da]=Brugeragentbeskrivelse (Firefox 1.0 på denne) +Name[de]=Browserkennung (Firefox 1.0 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Firefox 1.0 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Fajrovulpo 1.0 sub nuna) +Name[es]=UADescription (Firefox 1.0 en actual) +Name[et]=UADescription (Selles masinas töötav Firefox 1.0) +Name[eu]=UA azalpena (Firefox 1.0 unekoan) +Name[fa]=UADescription (Firefox 1.0 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Firefox 1.0) +Name[fr]=Identité du navigateur (Firefox 1.0 sous le système actuel) +Name[fy]=GA-omskriuwing (Firefox 1.0 op aktive) +Name[ga]=UADescription (Firefox 1.0 ar an gcóras reatha) +Name[gl]=UADescription (Firefox 3.01 no actual) +Name[he]=UADescription (Firefox 1.0 בנוכחי) +Name[hr]=UADescription (Firefox 1.0 na trenutnom) +Name[hu]=Böngészőtípus (Firefox 1.0) +Name[id]=UADescription (Firefox 1.0) +Name[is]=UAD strengur (Firefox 1.0 á núverandi) +Name[it]=DescrizioneUA (Firefox 1.0 su sistema attuale) +Name[ka]=UADescription (Firefox 1.0 მიმდინარე სისტემაში) +Name[kk]=UADescription (Firefox 1.0 осы орында) +Name[km]=UADescription (Firefox 1.0 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 Firefox 1.5) +Name[lt]=Naudotojo agento aprašymas (Firefox 1.0 ir esama) +Name[lv]=UAApraksts (Firefox 1.0 uz tekošā) +Name[mk]=UADescription (Firefox 1.0 на тековно) +Name[nb]=Brukeragent (Firefox 1.0 på denne) +Name[nds]=UA-Beschrieven (Firefox 1.0 op dit Systeem) +Name[ne]=UA वर्णन (हाल फायरफक्स 1.0 मा) +Name[nl]=GA-beschrijving (Firefox 1.0 op huidige) +Name[nn]=Brukaragent (Firefox 1.0 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ Firefox 1.0 ਉੱਤੇ) +Name[pl]=Opis przeglądarki użytkownika (FireFox 1.0 na bieżącym systemie) +Name[pt]=UADescription (Firefox 1.0 no sistema actual) +Name[pt_BR]=UADescription (Firefox 1.0 no sistema atual) +Name[ro]=Descriere UA (Firefox 1.0 pentru sistemul de operare curent) +Name[ru]=UADescription (Firefox 1.0 на текущей системе) +Name[rw]=UADescription (Firefox 1.0 ku igezweho) +Name[se]=UA-čilgehus (Firefox 1.0 dán mašiinnas) +Name[sl]=UAOpis (Firefox 1.0 na trenutnem) +Name[sr]=UADescription (Firefox 1.0 на тренутном) +Name[sr@Latn]=UADescription (Firefox 1.0 na trenutnom) +Name[sv]=AA-beskrivning (Firefox 1.0 på aktuell) +Name[ta]=UAவிவரம் (Firefox 1.0 on current) +Name[tg]=UADescription (Системаи ҷорӣ Firefox 1.0) +Name[th]=UADescription (ไฟร์ฟอกซ์ 1.0 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (Firefox 1.0) +Name[tt]=UADescription (Firefox 1.0, şul uq astında) +Name[uk]=UADescription (Firefox 1.0 на поточній) +Name[uz]=UADescription (joriy bilan Firefox 1.0) +Name[uz@cyrillic]=UADescription (жорий билан Firefox 1.0) +Name[vi]=Mô tả UA (đang dùng Firefox 1.0) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Firefox 1.0 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 Firefox 1.0) +Name[zh_TW]=使用者代理描述 (Firefox 1.0 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=FF +X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appMachineType appSysName; appLanguage; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 +X-KDE-UA-NAME=Firefox +X-KDE-UA-VERSION=1.0.7 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/firefox15oncurrent.desktop b/kcontrol/kio/uasproviders/firefox15oncurrent.desktop new file mode 100644 index 000000000..ecea40004 --- /dev/null +++ b/kcontrol/kio/uasproviders/firefox15oncurrent.desktop @@ -0,0 +1,58 @@ +[Desktop Entry] +Name=UADescription (Firefox 1.5 on current) +Name[bg]=UADescription (текущо Firefox 1.5) +Name[ca]=Descripció UA (Firefox 1.5 a l'actual) +Name[cs]=Popis UA (Firefox 1.5 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (FireFox 1.5) +Name[da]=Brugeragentbeskrivelse (Firefox 1.5 på denne) +Name[de]=Browserkennung (Firefox 1.5 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Firefox 1.5 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Fajrovulpo 1.5 sub nuna) +Name[es]=UADescription (Firefox 1.5 en actual) +Name[et]=UADescription (Selles masinas töötav Firefox 1.5) +Name[fa]=UADescription (Firefox 1.5 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Firefox 1.5) +Name[fr]=Identité du navigateur (Firefox 1.5 sous le système actuel) +Name[fy]=GA-omskriuwing (Firefox 1.5 op aktive) +Name[gl]=UADescription (Firefox 1.5 na actual) +Name[he]=UADescription (Firefox 1.5 בנוכחי) +Name[hr]=UADescription (Firefox 1.5 na trenutnom) +Name[hu]=Böngészőtípus (Firefox 1.5) +Name[id]=UADescription (Firefox 1.5) +Name[is]=UAD strengur (Firefox 1.5 á núverandi) +Name[it]=DescrizioneUA (Firefox 1.5 su sistema attuale) +Name[kk]=UADescription (Firefox 1.5 осы орында) +Name[km]=UADescription (Firefox 1.5 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 Firefox 1.5) +Name[lt]=Naudotojo agento aprašymas (Firefox 1.5 šioje sistemoje) +Name[nb]=Brukeragent (Firefox 1.5 på denne) +Name[nds]=UA-Beschrieven (Firefox 1.5 op dit Systeem) +Name[ne]=यूए वर्णन (हाल फायरफक्स १.०) +Name[nl]=GA-beschrijving (Firefox 1.0 op huidige machine/besturingssysteem) +Name[nn]=Brukaragent (Firefox 1.5 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ ਉੱਤੇ 1.5) +Name[pl]=Opis przeglądarki użytkownika (Firefox 1.5 na bieżącym systemie) +Name[pt]=UADescription (Firefox 1.5 no sistema actual) +Name[pt_BR]=UADescription (Firefox 1.5 no sistema atual) +Name[ro]=Descriere UA (Firefox 1.5 pe curent) +Name[ru]=UADescription (Firefox 1.5 на текущей системе) +Name[sl]=UAOpis (Firefox 1.5 na trenutnem) +Name[sr]=UADescription (Firefox 1.5 на тренутном) +Name[sr@Latn]=UADescription (Firefox 1.5 na trenutnom) +Name[sv]=AA-beskrivning (Firefox 1.5 på aktuell) +Name[tg]=UADescription (Системаи ҷорӣ Firefox 1.5) +Name[th]=UADescription (ไฟร์ฟอกซ์ 1.5 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (Firefox 1.5) +Name[uk]=UADescription (Firefox 1.5 на поточній) +Name[uz]=UADescription (joriy bilan Firefox 1.5) +Name[uz@cyrillic]=UADescription (жорий билан Firefox 1.5) +Name[vi]=Mô tả UA (đang dùng Firefox 1.5) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Firefox 1.5 sol ci moumint) +Name[zh_TW]=使用者代理描述 (Firefox 1.5 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=FF +X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appMachineType appSysName; appLanguage; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4 +X-KDE-UA-NAME=Firefox +X-KDE-UA-VERSION=1.5.0.4 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/googlebot.desktop b/kcontrol/kio/uasproviders/googlebot.desktop new file mode 100644 index 000000000..4644e13bf --- /dev/null +++ b/kcontrol/kio/uasproviders/googlebot.desktop @@ -0,0 +1,44 @@ +[Desktop Entry] +Name=UADescription (Googlebot/2.1) +Name[af]=UA-beskrywing (Googlebot/2.1) +Name[az]=İA İzahatı (Googlebot/2.1) +Name[ca]=Descripció UA (Googlebot/2.1) +Name[cs]=Popis agenta (Googlebot/2.1) +Name[csb]=Òpis programë brëkòwnika (Googlebot/2.1) +Name[de]=Browserkennung (Googlebot/2.1) +Name[el]=Περιγραφή UA (Googlebot/2.1) +Name[eo]=UA-Priskribo (Googlebot/2.1) +Name[eu]=UA azalpena (Wget 1.5.3) +Name[fi]=Käyttäjäagenttikuvaus (Googlebot/2.1) +Name[fr]=Identité du navigateur (Googlebot/2.1) +Name[fy]=GA-omskriuwing (Googlebot/2.1) +Name[hi]=यूए-डिस्क्रिप्शन (गूगलबॉट/2.1) +Name[hu]=Böngészőtípus (Googlebot/2.1) +Name[is]=UAD strengur (Googlebot/2.1) +Name[it]=DescrizioneUA (Googlebot/2.1) +Name[lt]=Naudotojo agento aprašymas (Googlebot/2.1) +Name[lv]=UAApraksts (Googlebot/2.1) +Name[nb]=Brukeragent (Googlebot/2.1) +Name[nds]=UA-Beschrieven (Googlebot/2.1) +Name[ne]=UA वर्णन (गुगलबुट/2.1) +Name[nl]=GA-beschrijving (Googlebot/2.1) +Name[nn]=Brukaragent (Googlebot/2.1) +Name[pl]=Opis przeglądarki użytkownika (Googlebot/2.1) +Name[pt_BR]=Descrição (Googlebot/2.1) +Name[ro]=Descriere UA (Googlebot/2.1) +Name[se]=UA-čilgehus (Googlebot/2.1) +Name[sl]=UAOpis (Googlebot/2.1) +Name[sv]=AA-beskrivning (Googlebot/2.1) +Name[ta]=UAவிவரம் (Googlebot/2.1) +Name[tg]=UADescription (Системаи ҷорӣ Googlebot/2.1) +Name[tr]=UA Tanımı (Googlebot/2.1) +Name[vi]=Mô tả UA (Googlebot/2.1) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Googlebot/2.1) +Name[zh_CN]=用户代理描述 (Google 机器人/2.1) +Name[zh_TW]=使用者代理描述 (Googlebot/2.1) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MISC +X-KDE-UA-FULL=Googlebot/2.1 (+http://www.googlebot.com/bot.html) +X-KDE-UA-NAME=Googlebot +X-KDE-UA-VERSION=2.1 diff --git a/kcontrol/kio/uasproviders/ie401onwinnt4.desktop b/kcontrol/kio/uasproviders/ie401onwinnt4.desktop new file mode 100644 index 000000000..661590037 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie401onwinnt4.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Name=UADescription (IE 4.01 on Win 2000) +Name[af]=UA-beskrywing (IE 4.01 op Win 2000) +Name[be]=UADescription (IE 4.01 на Win 2000) +Name[br]=UADescription (IE 4.01 war Win 2000) +Name[ca]=Descripció de AU (IE 4.01 en Windows 2000) +Name[cs]=Popis agenta (IE 4.01 na Win 2000) +Name[csb]=Òpis programë brëkòwnika (IE 4.01 na Win 2000) +Name[cy]=UADisgrifiad (IE 4.01 ar Win 2000) +Name[da]=Brugeragentbeskrivelse (IE 4.01 på Win 2000) +Name[de]=Browserkennung (IE 4.01 auf Windows 2000) +Name[el]=Περιγραφή UA (IE 4.01 σε Win 2000) +Name[eo]=UA-Priskribo (IE 4.01 sur Vindozo 2000) +Name[es]=Descripción de AU (IE 4.01 en Windows 2000) +Name[et]=UADescription (IE 4.01 Win2000 platvormil) +Name[eu]=UA azalpena (IE 4.01 Win 2000-n) +Name[fa]=UADescription (IE 4.01 در Win 2000) +Name[fi]=Käyttäjäagenttikuvaus (IE 4.01 Win 2000:lla) +Name[fr]=Identité du navigateur (IE 4.01 sous Windows 2000) +Name[fy]=GA-omskriuwing (IE 4.01 op Win 2000) +Name[ga]=UADescription (IE 4.01 ar Win 2000) +Name[gl]=UADescription (IE 4.01 en Win 2000) +Name[he]=UADescription (Win 2000ב־ IE 4.01) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 4.01 विन 2000 पर) +Name[hr]=UADescription (IE 4.01 na Win 2000) +Name[hu]=Böngészőtípus (IE 4.01, Win 2000) +Name[id]=UADescription (IE 4.01 di Win 2000) +Name[is]=UAD strengur (IE 4.01 on Win 2000) +Name[it]=DescrizioneUA (IE 4.01 su Win 2000) +Name[ka]=UADescription (IE 4.01 Win 2000-ში) +Name[kk]=UADescription (IE 4.01 / Win 2000) +Name[km]=UADescription (IE 4.01 នៅ​លើ Win 2000) +Name[ko]=UADescription (윈도 2000의 IE 4.01) +Name[lo]=UADescription (IE 4.5 on Win 2000) +Name[lt]=Naudotojo agento aprašymas (IE 4.01 ir Win 2000) +Name[lv]=UAApraksts (IE 4.01 uz Win 2000) +Name[mk]=UADescription (IE 4.01 на Win 2000) +Name[mn]=UserAgent-Тодорхойлолт (IE 4.01 on Win 2000) +Name[mt]=UADescription (IE 4.01 fuq Win 2000) +Name[nb]=Brukeragent (IE 4.01 på Win 2000) +Name[nds]=UA-Beschrieven (IE 4.01 op Win 2000) +Name[ne]=UA वर्णन (Win 2000 मा IE 4.01) +Name[nl]=GA-beschrijving (IE 4.01 op Win 2000) +Name[nn]=Brukaragent (IE 4.01 på Win 2000) +Name[nso]=UAThlaloso (IE 4.01 go Win 2000) +Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 4.01) +Name[pl]=Opis przeglądarki użytkownika (IE 4.01 na Win 2000) +Name[pt]=UADescription (IE 4.01 no Win 2000) +Name[pt_BR]=Descrição (IE 4.01 no Win 2000) +Name[ro]=Descriere UA (IE 4.01 pentru Win 2000) +Name[ru]=UADescription (IE 4.01 на Win 2000) +Name[rw]=UADescription (IE 4.01 kuri Win 2000) +Name[se]=UA-čilgehus (IE 4.01 ja Win 2000) +Name[sk]=Popis agenta (IE 4.01 na Win 2000) +Name[sl]=UAOpis (IE 4.01 na Windows 2000) +Name[sr]=UADescription (IE 4.01 на Win 2000) +Name[sr@Latn]=UADescription (IE 4.01 na Win 2000) +Name[sv]=AA-beskrivning (IE 4.01 på Win 2000) +Name[ta]=UAவிவரம் (IE 4.01 on Win 2000) +Name[tg]=ТавзеҳиUA (IE 4.01 ба Win 2000) +Name[th]=UADescription (IE 4.01 บน Win 2000) +Name[tr]=UA Tanımı (Win 2000 üzerinde IE 4.01) +Name[tt]=UADescription (IE 4.01, Win 2000 astında) +Name[uk]=UADescription (IE 4.01 на Win 2000) +Name[uz]=UADescription (Win 2000 bilan IE 4.01) +Name[uz@cyrillic]=UADescription (Win 2000 билан IE 4.01) +Name[ven]=Thalutshedzo ya UA (IE 4.01 on Win 2000) +Name[vi]=Mô tả UA (IE 4.01 trên Win 2000) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 4.01 so Win 2000) +Name[xh]=UADescription (IE 4.01 kwi Win 2000) +Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 4.01) +Name[zh_TW]=使用者代理描述 (IE 4.01 on Win 2000) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 4.01; Windows NT 5.0) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=4.01 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=2000 diff --git a/kcontrol/kio/uasproviders/ie45onwinnt5.desktop b/kcontrol/kio/uasproviders/ie45onwinnt5.desktop new file mode 100644 index 000000000..25bf059d6 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie45onwinnt5.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Name=UADescription (IE 4.5 on Win 2000) +Name[af]=UA-beskrywing (Ie 4.5 op Win 2000) +Name[az]=UADescription (IE 5.5 on Win 2000) +Name[be]=UADescription (IE 4.5 на Win 2000) +Name[br]=UADescription (IE 4.5 war Win 2000) +Name[ca]=Descripció de AU (IE 4.5 en Windows 2000) +Name[cs]=Popis agenta (IE 4.5 na Win 2000) +Name[csb]=Òpis programë brëkòwnika (IE 4.5 na Win 2000) +Name[cy]=UADisgrifiad(IE 4.5 ar Win 2000) +Name[da]=Brugeragentbeskrivelse (IE 4.5 på Win 2000) +Name[de]=Browserkennung (IE 4.5 auf Windows 2000) +Name[el]=Περιγραφή UA (IE 5.5 σε Win 2000) +Name[eo]=UA-Priskribo (IE 4.5 sub Vindozo 2000) +Name[es]=Descripción de AU (IE 4.5 en Windows 2000) +Name[et]=UADescription (IE 4.5 Win2000 platvormil) +Name[eu]=UA azalpena (IE 4.5 Win 2000-n) +Name[fa]=UADescription (IE 4.5 در Win 2000) +Name[fi]=Käyttäjäagenttikuvaus (IE 4.5 Win 2000:lla) +Name[fr]=Identité du navigateur (IE 4.5 sous Windows 2000) +Name[fy]=GA-omskriuwing (IE 4.5 op Win 2000) +Name[ga]=UADescription (IE 4.5 ar Win 2000) +Name[gl]=UADescription (IE 4.5 en Win 2000) +Name[he]=UADescription (Win 2000ב־ IE 4.5) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 4.5 विन 2000 पर) +Name[hr]=UADescription (IE 4.5 na Win 2000) +Name[hu]=Böngészőtípus (IE 4.5, Win 2000) +Name[id]=UADescription (IE 4.5 di Win 2000) +Name[is]=UAD strengur (IE 4.5 on Win 2000) +Name[it]=DescrizioneUA (IE 4.5 su Win 2000) +Name[ka]=UADescription (IE 4.5 Win 2000-ში) +Name[kk]=UADescription (IE 4.5 / Win 2000) +Name[km]=UADescription (IE 4.5 នៅ​លើ Win 2000) +Name[ko]=UADescription (윈도 2000의 IE 5.5) +Name[lt]=Naudotojo agento aprašymas (IE 4.5 ir Win 2000) +Name[lv]=UAApraksts (IE 5.5 uz Win 2000) +Name[mk]=UADescription (IE 4.5 на Win 2000) +Name[mn]=UserAgent-Тодорхойлолт (IE 5.5 on Win 2000) +Name[mt]=UADescription (IE 4.5 fuq Win 2000) +Name[nb]=Brukeragent (IE 4.5 på Win 2000) +Name[nds]=UA-Beschrieven (IE 4.5 op Win 2000) +Name[ne]=UA वर्णन (Win 2000 मा IE 4.5) +Name[nl]=GA-beschrijving (IE 4.5 op Win 2000) +Name[nn]=Brukaragent (IE 4.5 på Win 2000) +Name[nso]=UAThlaloso (IE 4.5 go Win 2000) +Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 4.5) +Name[pl]=Opis przeglądarki użytkownika (IE 4.5 na Win 2000) +Name[pt]=UADescription (IE 4.5 no Win 2000) +Name[pt_BR]=Descrição (IE 4.5 no Win 2000) +Name[ro]=Descriere UA (IE 4.5 pentru Win 2000) +Name[ru]=UADescription (IE 4.5 на Win 2000) +Name[rw]=UADescription (IE 4.5 kuri Win 2000) +Name[se]=UA-čilgehus (IE 4.5 ja Win 2000) +Name[sk]=Popis agenta (IE 4.5 na Win 2000) +Name[sl]=UAOpis (IE 4.5 v Windows 2000) +Name[sr]=UADescription (IE 4.5 на Win 2000) +Name[sr@Latn]=UADescription (IE 4.5 na Win 2000) +Name[sv]=AA-beskrivning (IE 4.5 på Win 2000) +Name[ta]=UAவிவரம் (IE 4.5 on Win 2000) +Name[tg]=ТавзеҳиUA (IE 4.5 ба Win 2000) +Name[th]=UADescription (IE 4.5 บน Win 2000) +Name[tr]=UA Tanımı (Win 2000 üzerinde IE 4.5) +Name[tt]=UADescription (IE 4.5, Win 2000 astında) +Name[uk]=UADescription (IE 4.5 на Win 2000) +Name[uz]=UADescription (Win 2000 bilan IE 4.5) +Name[uz@cyrillic]=UADescription (Win 2000 билан IE 4.5) +Name[ven]=Thalutshedzo ya UA (IE 4.5 on Win 2000) +Name[vi]=Mô tả UA (IE 5.5 trên Win 2000) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 4.5 so Win 2000)Name= +Name[xh]=UADescription (IE 4.5 kwi Win 2000) +Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 4.5) +Name[zh_TW]=使用者代理描述 (IE 4.5 on Win 2000) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 4.5; Windows NT 5.0) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=4.5 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=2000 diff --git a/kcontrol/kio/uasproviders/ie501onwinnt5.desktop b/kcontrol/kio/uasproviders/ie501onwinnt5.desktop new file mode 100644 index 000000000..27b90f643 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie501onwinnt5.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=UADescription (IE 5.01 on Win 2000) +Name[af]=Ua-beskrywing (Ie 5.01 op Win 2000) +Name[be]=UADescription (IE 5.01 на Win 2000) +Name[br]=UADescription (IE 5.01 war Win 2000) +Name[ca]=Descripció de AU (IE 5.01 en Windows 2000) +Name[cs]=Popis agenta (IE 5.01 na Win 2000) +Name[csb]=Òpis programë brëkòwnika (IE 5.01 na Win 2000) +Name[cy]=UADisgrifiad (IE 5.01 ar Win 2000) +Name[da]=Brugeragentbeskrivelse (IE 5.01 på Win 2000) +Name[de]=Browserkennung (IE 5.01 auf Windows 2000) +Name[el]=Περιγραφή UA (IE 5.01 σε Win 2000) +Name[eo]=UA-Priskribo (IE 5.01 sub Vindozo 2000) +Name[es]=Descripción de AU (IE 5.01 en Windows 2000) +Name[et]=UADescription (IE 5.01 Win2000 platvormil) +Name[eu]=UA azalpena (IE 5.01 Win 2000-n) +Name[fa]=UADescription (IE 5.01 در Win 2000) +Name[fi]=Käyttäjäagenttikuvaus (IE 5.01 Win 2000:lla) +Name[fr]=Identité du navigateur (IE 5.01 sous Windows 2000) +Name[fy]=GA-omskriuwing (IE 5.01 op Win 2000) +Name[ga]=UADescription (IE 5.01 ar Win 2000) +Name[gl]=UADescription (IE 5.01 en Win 2000) +Name[he]=UADescription (Win 2000ב־ IE 5.01) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.01 विन 2000 पर) +Name[hr]=UADescription (IE 5.01 na Win 2000) +Name[hu]=Böngészőtípus (IE 5.01, Win 2000) +Name[id]=UADescription (IE 5.01 di Win 2000) +Name[is]=UAD strengur (IE 5.01 on Win 2000) +Name[it]=DescrizioneUA (IE 5.01 su Win 2000) +Name[ka]=UADescription (IE 5.01 Win 2000-ში) +Name[kk]=UADescription (IE 5.01 / Win 2000) +Name[km]=UADescription (IE 5.01 នៅ​លើ Win 2000) +Name[ko]=UADescription (윈도 2000의 IE 4.01) +Name[lt]=Naudotojo agento aprašymas (IE 5.01 ir Win 2000) +Name[lv]=UAApraksts (IE 5.01 uz Win 2000) +Name[mk]=UADescription (IE 5.01 на Win 2000) +Name[mn]=UserAgent-Тодорхойлолт (IE 5.01 on Win 2000) +Name[mt]=UADescription (IE 5.01 fuq Win 2000) +Name[nb]=Brukeragent (IE 5.01 på Win 2000) +Name[nds]=UA-Beschrieven (IE 5.01 op Win 2000) +Name[ne]=UA वर्णन (Win 2000 मा IE 5.01) +Name[nl]=GA-beschrijving (IE 5.01 op Win 2000) +Name[nn]=Brukaragent (IE 5.01 på Win 2000) +Name[nso]=UAThlaloso (IE 5.01 go Win 2000) +Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 5.01) +Name[pl]=Opis przeglądarki użytkownika (IE 5.01 na Win 2000) +Name[pt]=UADescription (IE 5.01 no Win 2000) +Name[pt_BR]=Descrição (IE 5.01 no Win 2000) +Name[ro]=Descriere UA (IE 5.01 pentru Win 2000) +Name[ru]=UADescription (IE 5.01 на Win 2000) +Name[rw]=UADescription (IE 5.01 kuri Win 2000) +Name[se]=UA-čilgehus (IE 5.01 ja Win 2000) +Name[sk]=Popis agenta (IE 5.01 na Win 2000) +Name[sl]=UAOpis (IE 5.01 na Windows 2000) +Name[sr]=UADescription (IE 5.01 на Win 2000) +Name[sr@Latn]=UADescription (IE 5.01 na Win 2000) +Name[sv]=AA-beskrivning (IE 5.01 på Win 2000) +Name[ta]=UAவிவரம் (IE 5.01 on Win 2000) +Name[tg]=ТавзеҳиUA (IE 5.01 ба Win 2000) +Name[th]=UADescription (IE 5.01 บน Win 2000) +Name[tr]=UA Tanımı (Win 2000 üzerinde IE 5.01) +Name[tt]=UADescription (IE 5.01, Win 2000 astında) +Name[uk]=UADescription (IE 5.01 на Win 2000) +Name[uz]=UADescription (Win 2000 bilan IE 5.01) +Name[uz@cyrillic]=UADescription (Win 2000 билан IE 5.01) +Name[ven]=Thalutshedzo (IE 5.01 on Win 2000) +Name[vi]=Mô tả UA (IE 5.01 trên Win 2000) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.01 so Win 2000) +Name[xh]=UADescription (IE 5.01 kwi Win 2000) +Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 5.01) +Name[zh_TW]=使用者代理描述 (IE 5.01 on Win 2000) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=5.01 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=2000 diff --git a/kcontrol/kio/uasproviders/ie50onppc.desktop b/kcontrol/kio/uasproviders/ie50onppc.desktop new file mode 100644 index 000000000..6cb00f7e4 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie50onppc.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=UADescription (IE 5.0 on Mac PPC) +Name[af]=UA-beskrywing (Ie 5.0 op Mac Ppc) +Name[be]=UADescription (IE 5.0 на Mac PPC) +Name[br]=UADescription (IE 5.0 war Mac PPC) +Name[ca]=Descripció de AU (IE 5.0 en Mac PPC) +Name[cs]=Popis agenta (IE 5.0 na Mac PPC) +Name[csb]=Òpis programë brëkòwnika (IE 5.0 na Mac PPC) +Name[cy]=UADisgrifiad (IE 5.0 ar Mac PPC) +Name[da]=Brugeragentbeskrivelse (IE 5.0 på Mac PPC) +Name[de]=Browserkennung (IE 5.0 auf Mac PPC) +Name[el]=Περιγραφή UA (IE 5.0 σε Mac PPC) +Name[eo]=UA-Priskribo (IE 5.0 sub Mac-PPC) +Name[es]=Descripción de AU (IE 5.0 en Mac PPC) +Name[et]=UADescription (IE 5.0 MacPPC platvormil) +Name[eu]=UA azalpena (IE 5.0 Mac PPC-n) +Name[fa]=UADescription (IE 5.0 در Mac PPC) +Name[fi]=Käyttäjäagenttikuvaus (IE 5.0 Mac PPC:llä) +Name[fr]=Identité du navigateur (IE 5.0 sous Mac PPC) +Name[fy]=GA-omskriuwing (IE 5.0 op Mac PPC) +Name[ga]=UADescription (IE 5.0 ar Mac PPC) +Name[gl]=UADescription (IE 5.0 en Mac PPC) +Name[he]=UADescription (Mac PPCב־ IE 5.0) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.0 मैक पीपीसी पर) +Name[hr]=UADescription (IE 5.0 na Mac PPC) +Name[hu]=Böngészőtípus (IE 5.0, Mac PPC) +Name[id]=UADescription (IE 5.0 di Mac PPC) +Name[is]=UAD strengur (IE 5.0 on Mac PPC) +Name[it]=DescrizioneUA (IE 5.0 su Mac PPC) +Name[ka]=UADescription (IE 5.0 Mac PPC-ში) +Name[kk]=UADescription (IE 5.0 / Mac PPC) +Name[km]=UADescription (IE 5.0 នៅ​លើ Mac PPC) +Name[ko]=UADescription (Mac PPC의 IE 5.0) +Name[lt]=Naudotojo agento aprašymas (IE 5.0 ir Mac PPC) +Name[lv]=UAApraksts (IE 5.0 uz Mac PPC) +Name[mk]=UADescription (IE 5.0 на Mac PPC) +Name[mn]=UserAgent-Тодорхойлолт (IE 5.0 on Mac PPC) +Name[mt]=UADescription (IE 5.0 fuq Mac PPC) +Name[nb]=Brukeragent (IE 5.0 på Mac PPC) +Name[nds]=UA-Beschrieven (IE 5.0 op Mac PPC) +Name[ne]=UA वर्णन (Mac PPC मा IE 5.0) +Name[nl]=GA-beschrijving (IE 5.0 op Mac PPC) +Name[nn]=Brukaragent (IE 5.0 på Mac PPC) +Name[nso]=UAThlaloso (IE 5.0 go Mac PPC) +Name[pa]=UADescription (ਮੈਕ PPC 'ਤੇ IE 5.0) +Name[pl]=Opis przeglądarki użytkownika (IE 5.0 na Mac PPC) +Name[pt]=UADescription (IE 5.0 no Mac PPC) +Name[pt_BR]=Descrição (IE 5.0 no Mac PPC) +Name[ro]=Descriere UA (IE 5.0 pentru Mac PPC) +Name[ru]=UADescription (IE 5.0 на Mac PPC) +Name[rw]=UADescription (IE 5.0 kuri Mac PPC) +Name[se]=UA-čilgehus (IE 5.0 ja Mac PPC) +Name[sk]=Popis agenta (IE 5.0 na Mac PPC) +Name[sl]=UAOpis (IE 5.0 na Mac PPC) +Name[sr]=UADescription (IE 5.0 на Mac PPC) +Name[sr@Latn]=UADescription (IE 5.0 na Mac PPC) +Name[sv]=AA-beskrivning (IE 5.0 på Mac PPC) +Name[ta]=UAவிவரம் (IE 5.0 on Mac PPC) +Name[tg]=ТавзеҳиUA (IE 5.0 ба Mac PPC) +Name[th]=UADescription (IE 5.0 บน Mac PPC) +Name[tr]=UA Tanımı (Mac PPC üzerinde IE 5.0) +Name[tt]=UADescription (IE 5.0, Mac PPC astında) +Name[uk]=UADescription (IE 5.0 на Mac PPC) +Name[uz]=UADescription (Mac PPC bilan IE 5.0) +Name[uz@cyrillic]=UADescription (Mac PPC билан IE 5.0) +Name[ven]=Thalutshedzo ya UA (IE 5.0 on Mac PPC) +Name[vi]=Mô tả UA (IE 5.0 trên Mac PPC) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.0 so Mac PPC) +Name[xh]=UADescription (IE 5.0 kwi Mac PPC) +Name[zh_CN]=用户代理描述 (运行于 Mac PPC 的 IE 5.0) +Name[zh_TW]=使用者代理描述 (IE 5.0 on Mac PPC) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=5.0 +X-KDE-UA-SYSNAME=Mac +X-KDE-UA-SYSRELEASE=PPC diff --git a/kcontrol/kio/uasproviders/ie55onwin98.desktop b/kcontrol/kio/uasproviders/ie55onwin98.desktop new file mode 100644 index 000000000..3d1aff5e8 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie55onwin98.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=UADescription (IE 5.5 on Win 98) +Name[af]=UA-beskrywing (Ie 5.5 op Win 98) +Name[be]=UADescription (IE 5.5 на Win 98) +Name[br]=UADescription (IE 5.5 war Win 98) +Name[ca]=Descripció de AU (IE 5.5 en Windows 98) +Name[cs]=Popis agenta (IE 5.5 na Win 98) +Name[csb]=Òpis programë brëkòwnika (IE 5.5 na Win 98) +Name[cy]=UADisgrifiad (IE 5.5 ar Win 98) +Name[da]=Brugeragentbeskrivelse (IE 5.5 på Win 98) +Name[de]=Browserkennung (IE 5.5 unter Windows 98) +Name[el]=Περιγραφή UA (IE 5.5 σε Win 98) +Name[eo]=UA-Priskribo (IE 5.5 sub Vindozo 98) +Name[es]=Descripción de AU (IE 5.5 en Windows 98) +Name[et]=UADescription (IE 5.5 Win98 platvormil) +Name[eu]=UA azalpena (IE 5.5 Win 98-an) +Name[fa]=UADescription (IE 5.5 در Win 98) +Name[fi]=Käyttäjäagenttikuvaus (IE 5.5 Win 98:lla) +Name[fr]=Identité du navigateur (IE 5.5 sous Windows 98) +Name[fy]=GA-omskriuwing (IE 5.5 op Win 98) +Name[ga]=UADescription (IE 5.5 ar Win 98) +Name[gl]=UADescription (IE 5.5 en Win 98) +Name[he]=UADescription (Win 98ב־ IE 5.5) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.5 विन 98 पर) +Name[hr]=UADescription (IE 5.5 na Win 98) +Name[hu]=Böngészőtípus (IE 5.5, Win 98) +Name[id]=UADescription (IE 5.5 di Win 98) +Name[is]=UAD strengur (IE 5.5 on Win 98) +Name[it]=DescrizioneUA (IE 5.5 su Win 98) +Name[ka]=UADescription (IE 5.5 Win 98-ში) +Name[kk]=UADescription (IE 5.5 / Win 98) +Name[km]=UADescription (IE 5.5 នៅ​លើ Win 98) +Name[ko]=UADescription (윈도 2000의 IE 5.5) +Name[lt]=Naudotojo agento aprašymas (IE 5.5 ir Win 98) +Name[lv]=UAApraksts (IE 5.5 uz Win 98) +Name[mk]=UADescription (IE 5.5 на Win 98) +Name[mn]=UserAgent-Тодорхойлолт (IE 5.5 on Win 98) +Name[mt]=UADescription (IE 5.5 fuq Win 98) +Name[nb]=Brukeragent (IE 5.5 på Win 98) +Name[nds]=UA-Beschrieven (IE 5.5 op Win 98) +Name[ne]=UA वर्णन (Win 98 मा IE 5.5) +Name[nl]=GA-beschrijving (IE 5.5 op Win 98) +Name[nn]=Brukaragent (IE 5.5 på Win 98) +Name[nso]=UAThlaloso (IE 5.5 go Win 98) +Name[pa]=UADescription (ਵਿੰਡੋ ੯੮ 'ਤੇ IE 5.5) +Name[pl]=Opis przeglądarki użytkownika (IE 5.5 na Win 98) +Name[pt]=UADescription (IE 5.5 no Win 95) +Name[pt_BR]=Descrição (IE 5.5 no Win 98) +Name[ro]=Descriere UA (IE 5.5 pentru Win 98) +Name[ru]=UADescription (IE 5.5 на Win 98) +Name[rw]=UADescription (IE 5.5 kuri Win 98) +Name[se]=UA-čilgehus (IE 5.5 ja Win 98) +Name[sk]=Popis agenta (IE 5.5 na Win 98) +Name[sl]=UAOpis (IE 5.5 na Windows 98) +Name[sr]=UADescription (IE 5.5 на Win 98) +Name[sr@Latn]=UADescription (IE 5.5 na Win 98) +Name[sv]=AA-beskrivning (IE 5.5 på Win 98) +Name[ta]=UAவிவரம் (IE 5.5 on Win 98) +Name[tg]=ТавзеҳиUA (IE 5.5 ба Win 98) +Name[th]=UADescription (IE 5.5 บน Win 98) +Name[tr]=UA Tanımı (Win 98 üzerinde IE 5.5) +Name[tt]=UADescription (IE 5.5, Win 98 astında) +Name[uk]=UADescription (IE 5.5 на Win 98) +Name[uz]=UADescription (Win 98 bilan IE 5.5) +Name[uz@cyrillic]=UADescription (Win 98 билан IE 5.5) +Name[ven]=Thalutshedzo ya UA (IE 5.5 on Win 98) +Name[vi]=Mô tả UA (IE 5.5 trên Win 98) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.5 so Win 98) +Name[xh]=UADescription UA (IE 5.5 kwi Win 98) +Name[zh_CN]=用户代理描述 (运行于 Win 98 的 IE 5.5) +Name[zh_TW]=使用者代理描述 (IE 5.5 on Win 98) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=5.5 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=98 diff --git a/kcontrol/kio/uasproviders/ie55onwinnt5.desktop b/kcontrol/kio/uasproviders/ie55onwinnt5.desktop new file mode 100644 index 000000000..a283897e1 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie55onwinnt5.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Name=UADescription (IE 5.5 on Win 2000) +Name[af]=UA-beskrywing (Ie 5.5 op Win 2000) +Name[be]=UADescription (IE 5.5 на Win 2000) +Name[br]=UADescription (IE 5.5 war Win 2000) +Name[ca]=Descripció de AU (IE 5.5 en Windows 2000) +Name[cs]=Popis agenta (IE 5.5 na Win 2000) +Name[csb]=Òpis programë brëkòwnika (IE 5.5 na Win 2000) +Name[cy]=UADisgrifiad (IE 5.5 ar Win 2000) +Name[da]=Brugeragentbeskrivelse (IE 5.5 på Win 2000) +Name[de]=Browserkennung (IE 5.5 unter Windows 2000) +Name[el]=Περιγραφή UA (IE 5.5 σε Win 2000) +Name[eo]=UA-Priskribo (IE 5.5 sub Vindozo 2000) +Name[es]=Descripción de AU (IE 5.5 en Windows 2000) +Name[et]=UADescription (IE 5.5 Win2000 platvormil) +Name[eu]=UA azalpena (IE 5.5 Win 2000-n) +Name[fa]=UADescription (IE 5.5 در Win 2000) +Name[fi]=Käyttäjäagenttikuvaus (IE 5.5 Win 2000:lla) +Name[fr]=Identité du navigateur (IE 5.5 sous Windows 2000) +Name[fy]=GA-omskriuwing (IE 5.5 op Win 2000) +Name[ga]=UADescription (IE 5.5 ar Win 2000) +Name[gl]=UADescription (IE 5.5 en Win 2000) +Name[he]=UADescription (Win 2000ב־ IE 5.5) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.5 विन 2000 पर) +Name[hr]=UADescription (IE 5.5 na Win 2000) +Name[hu]=Böngészőtípus (IE 5.5, Win 2000) +Name[id]=UADescription (IE 5.5 di Win 2000) +Name[is]=UAD strengur (IE 5.5 on Win 2000) +Name[it]=DescrizioneUA (IE 5.5 su Win 2000) +Name[ka]=UADescription (IE 5.5 Win 2000-ში) +Name[kk]=UADescription (IE 5.5 / Win 2000) +Name[km]=UADescription (IE 5.5 នៅ​លើ Win 2000) +Name[ko]=UADescription (윈도 2000의 IE 5.5) +Name[lt]=Naudotojo agento aprašymas (IE 5.5 ir Win 2000) +Name[lv]=UAApraksts (IE 5.5 uz Win 2000) +Name[mk]=UADescription (IE 5.5 на Win 2000) +Name[mn]=UserAgent-Тодорхойлолт (IE 5.5 on Win 2000) +Name[mt]=UADescription (IE 5.5 fuq Win 2000) +Name[nb]=Brukeragent (IE 5.5 på Win 2000) +Name[nds]=UA-Beschrieven (IE 5.5 op Win 2000) +Name[ne]=UA वर्णन (Win 2000मा IE 5.5) +Name[nl]=GA-beschrijving (IE 5.5 op Win 2000) +Name[nn]=Brukaragent (IE 5.5 på Win 2000) +Name[nso]=UAThlaloso (IE 5.5 go Win 2000) +Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 5.5) +Name[pl]=Opis przeglądarki użytkownika (IE 5.5 na Win 2000) +Name[pt]=UADescription (IE 5.5 no Win 2000) +Name[pt_BR]=Descrição (IE 5.5 no Win 2000) +Name[ro]=Descriere UA (IE 5.5 pentru Win 2000) +Name[ru]=UADescription (IE 5.5 на Win 2000) +Name[rw]=UADescription (IE 5.5 kuri Win 2000) +Name[se]=UA-čilgehus (IE 5.5 ja Win 2000) +Name[sk]=Popis agenta (IE 5.5 na Win 2000) +Name[sl]=UAOpis (IE 5.5 na Windows 2000) +Name[sr]=UADescription (IE 5.5 на Win 2000) +Name[sr@Latn]=UADescription (IE 5.5 na Win 2000) +Name[sv]=AA-beskrivning (IE 5.5 på Win 2000) +Name[ta]=UAவிவரம் (IE 5.5 on Win 2000) +Name[tg]=ТавзеҳиUA (IE 5.5 ба Win 2000) +Name[th]=UADescription (IE 5.5 บน Win 2000) +Name[tr]=UA Tanımı (Win 2000 üzerinde IE 5.5) +Name[tt]=UADescription (IE 5.5, Win 2000 astında) +Name[uk]=UADescription (IE 5.5 на Win 2000) +Name[uz]=UADescription (Win 2000 bilan IE 5.5) +Name[uz@cyrillic]=UADescription (Win 2000 билан IE 5.5) +Name[ven]=Thalutshedzo ya UA (IE 5.5 on Win 2000) +Name[vi]=Mô tả UA (IE 5.5 trên Win 2000) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.5 so Win 2000) +Name[xh]=UADescription (IE 5.5 kwi Win 2000) +Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 5.5) +Name[zh_TW]=使用者代理描述 (IE 5.5 on Win 2000) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=5.5 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=2000 diff --git a/kcontrol/kio/uasproviders/ie60oncurrent.desktop b/kcontrol/kio/uasproviders/ie60oncurrent.desktop new file mode 100644 index 000000000..e65fbb2a4 --- /dev/null +++ b/kcontrol/kio/uasproviders/ie60oncurrent.desktop @@ -0,0 +1,69 @@ +[Desktop Entry] +Name=UADescription (IE 6.0 on current) +Name[af]=UA-beskrywing (IE 6.0 op huidige bedryfstelsel) +Name[be]=UADescription (IE 6.0 на гэтай сістэме) +Name[bs]=UADescription (IE 6.0 na trenutnom) +Name[ca]=Descripció UA (IE 6.0 a l'actual) +Name[cs]=Popis agenta (IE 6.0 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (IE 6.0) +Name[da]=Brugeragentbeskrivelse (IE 6.0 på denne) +Name[de]=Browserkennung (IE 6.0 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (IE 6.01 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (IE 6.0 sub nuna) +Name[es]=UADescription (IE 6.0 en actual) +Name[et]=UADescription (Selles masinas töötav IE 6.0) +Name[eu]=UA azalpena (IE 6.0 unekoan) +Name[fa]=UADescription (IE 6.0 در حال حاضر) +Name[fr]=Identité du navigateur (IE 6.0 sous le système actuel) +Name[fy]=GA-omskriuwing (IE 6.0 op aktive) +Name[ga]=UADescription (IE 6.0 ar an gcóras reatha) +Name[gl]=UADescription (IE 6.0 no actual) +Name[he]=UADescription (NN 3.01 בנוכחי) +Name[hr]=UADescription (IE 6.0 na trenutnom) +Name[hu]=Böngészőtípus (IE 6.0) +Name[id]=UADescription (IE 6.0) +Name[is]=UAD strengur (IE 6.0 á núverandi) +Name[it]=DescrizioneUA (IE 6.0 su sistema attuale) +Name[ka]=UADescription (IE 6.0 მიმდინარე სისტემაში) +Name[kk]=UADescription (IE 6.0 осы орында) +Name[km]=UADescription (IE 6.0 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 IE 6.0) +Name[lt]=Naudotojo agento aprašymas (IE 6.0 ir esama) +Name[lv]=UAApraksts (IE 6.0 uz tekošā) +Name[mk]=UADescription (IE 6.0 на тековно) +Name[nb]=Brukeragent (IE 6.0 på denne) +Name[nds]=UA-Beschrieven (IE 6.0 op dit Systeem) +Name[ne]=UA वर्णन (हाल IE 6.0 मा) +Name[nl]=GA-beschrijving (IE 6.0 op huidige) +Name[nn]=Brukaragent (IE 6.0 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ IE 6.0) +Name[pl]=Opis przeglądarki użytkownika (IE 6.0 na bieżącym systemie) +Name[pt]=UADescription (IE 6.0 no sistema actual) +Name[pt_BR]=Descrição (IE 6.0 no sistema atual) +Name[ro]=Descriere UA (IE 6.0 pentru sistemul de operare curent) +Name[ru]=UADescription (IE 6.0 на текущей системе) +Name[rw]=UADescription (IE 6.0 ku igezweho) +Name[se]=UA-čilgehus (IE 6.0 dán mašiinnas) +Name[sl]=UAOpis (IE 6.0 na trenutnem) +Name[sr]=UADescription (IE 6.0 на тренутном) +Name[sr@Latn]=UADescription (IE 6.0 na trenutnom) +Name[sv]=AA-beskrivning (IE 6.0 på aktuell) +Name[ta]=UAவிவரம் (IE 6.0 on current) +Name[tg]=UADescription (Системаи ҷорӣ IE 6.0) +Name[th]=UADescription (IE 6.0 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (bulunulanda IE 6.0) +Name[tt]=UADescription (IE 6.0, şul uq astında) +Name[uk]=UADescription (IE 6.0 на поточній) +Name[uz]=UADescription (joriy bilan IE 6.0) +Name[uz@cyrillic]=UADescription (жорий билан IE 6.0) +Name[vi]=Mô tả UA (đang dùng IE 6.0) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 6.0 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 IE 6.0) +Name[zh_TW]=使用者代理描述 (IE 6.0 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 6.0; appPlatform; appSysName appMachineType) Konqueror/3.5 (KHTML, like Gecko) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=6.0 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/ie60onwinnt51.desktop b/kcontrol/kio/uasproviders/ie60onwinnt51.desktop new file mode 100644 index 000000000..c2afcb31f --- /dev/null +++ b/kcontrol/kio/uasproviders/ie60onwinnt51.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Name=UADescription (IE 6.0 on Win XP) +Name[af]=UA-beskrywing (IE 6.0 op Win XP) +Name[az]=İAİzahatı (Win XP üstündə IE 6.0) +Name[be]=UADescription (IE 6.0 на Win XP) +Name[br]=UADescription (IE 6.0 war Win XP) +Name[bs]=UADescription (IE 5.0 on Win XP) +Name[ca]=Descripció de AU (IE 6.0 en Win XP) +Name[cs]=Popis agenta (IE 6.0 na Win XP) +Name[csb]=Òpis programë brëkòwnika (IE 6.0 na Win XP) +Name[cy]=UADisgrifiad (IE 6.0 ar Win XP) +Name[da]=Brugeragentbeskrivelse (IE 6.0 på Win XP) +Name[de]=Browserkennung (IE 6.0 unter Windows XP) +Name[el]=Περιγραφή UA (IE 6.0 σε Win XP) +Name[eo]=UA-Priskribo (IE 6.0 sub Vindozo XP) +Name[es]=Descripción de AU (IE 6.0 en Win XP) +Name[et]=UADescription (IE 6.0 Win XP platvormil) +Name[eu]=UA azalpena (IE 6.0 Win XP-n) +Name[fa]=UADescription (IE 6.0 در Win XP) +Name[fi]=Käyttäjäagenttikuvaus (IE 6.0 Win XP:llä) +Name[fr]=Identité du navigateur (IE 6.0 sous Windows XP) +Name[fy]=GA-omskriuwing (IE 6.0 op Win XP) +Name[ga]=UADescription (IE 6.0 ar Win XP) +Name[gl]=UADescription (IE 6.0 en Win XP) +Name[he]=UADescription (Win XPב־ IE 6.0) +Name[hi]=यूएडी-डिस्क्रिप्शन (IE 6.0 विन एक्सपी पर) +Name[hr]=UADescription (IE 5.0 na Win 95) +Name[hu]=Böngészőtípus (IE 6.0, Win XP) +Name[id]=UADescription (IE 6.0 di Win XP) +Name[is]=UAD strengur (IE 5.0 on Win XP) +Name[it]=DescrizioneUA (IE 6.0 su Win XP) +Name[ka]=UADescription (IE 5.0 Win 95-ში) +Name[kk]=UADescription (IE 6.0 / Win XP) +Name[km]=UADescription (IE 6.0 នៅ​លើ Win XP) +Name[ko]=UADescription (윈도 XP의 IE 6.0) +Name[lt]=Naudotojo agento aprašymas (IE 6.0 ir Win XP) +Name[lv]=UAApraksts (IE 6.0 uz Win XP) +Name[mk]=UADescription (IE 6.0 на Win XP) +Name[mn]=User-Agent-Тодорхойлолт (IE 6.0 on Win XP) +Name[mt]=UADescription (IE 6.0 fuq Win XP) +Name[nb]=Brukeragent (IE 6.0 på Win XP) +Name[nds]=UA-Beschrieven (IE 6.0 op Win XP) +Name[ne]=UA वर्णन (Win XP मा IE 6.0) +Name[nl]=GA-beschrijving (IE 6.0 op Win XP) +Name[nn]=Brukaragent (IE 6.0 på Win XP) +Name[nso]=UAThlaloso (IE 6.0 go Win XP) +Name[pa]=UADescription (ਵਿੰਡੋ XP 'ਤੇ IE 6.0) +Name[pl]=Opis przeglądarki użytkownika (IE 6.0 na Win XP) +Name[pt]=UADescription (IE 6.0 no Win XP) +Name[pt_BR]=Descrição (IE 6.0 no Win XP) +Name[ro]=Descriere UA (IE 6.0 pentru Win XP) +Name[ru]=UADescription (IE 5.0 на Win 95) +Name[rw]=UADescription (IE 6.0 kuri Win XP) +Name[se]=UA-čilgehus (IE 6.0 ja Win XP) +Name[sk]=Popis agenta (IE 6.0 na Win XP) +Name[sl]=UAOpis (IE 6.0 na Windows XP) +Name[sr]=UADescription (IE 6.0 на Win XP) +Name[sr@Latn]=UADescription (IE 6.0 na Win XP) +Name[sv]=AA-beskrivning (IE 6.0 på Win XP) +Name[ta]=UAவிவரம்(IE 6.0 on Win XP) +Name[tg]=ТавзеҳиUA (IE 6.0 ба Win XP) +Name[th]=UADescription (IE 6.0 บน Win XP) +Name[tr]=UA Tanımı (Win XP üzerinde IE 6.0) +Name[tt]=UADescription (IE 6.0, Win XP astında) +Name[uk]=UADescription (IE 6.0 на Win XP) +Name[uz]=UADescription (Win XP bilan IE 6.0) +Name[uz@cyrillic]=UADescription (Win XP билан IE 6.0) +Name[ven]=Thalutshedzo ya UA (IE 5.0 kha Win XP) +Name[vi]=Mô tả UA (IE 6.0 trên Win XP) +Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 6.0 so Win XP) +Name[xh]=UADescription (IE 6.0 kwi Win XP) +Name[zh_CN]=用户代理描述 (运行于 Win XP 的 IE 6.0) +Name[zh_TW]=使用者代理描述 (IE 6.0 on Win XP) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=IE +X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) +X-KDE-UA-NAME=Internet Explorer +X-KDE-UA-VERSION=6.0 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=XP diff --git a/kcontrol/kio/uasproviders/lynxoncurrent.desktop b/kcontrol/kio/uasproviders/lynxoncurrent.desktop new file mode 100644 index 000000000..400ed11ad --- /dev/null +++ b/kcontrol/kio/uasproviders/lynxoncurrent.desktop @@ -0,0 +1,51 @@ +[Desktop Entry] +Name=UADescription (Lynx 2.8.3) +Name[af]=UA-beskrywing (Lynx 2.8.3) +Name[ca]=Descripció de AU (Lynx 2.8.3) +Name[cs]=Popis agenta (Lynx 2.8.3) +Name[csb]=Òpis programë brëkòwnika (Lynx 2.8.3) +Name[cy]=UADisgrifiad (Lynx 2.8.3) +Name[da]=Brugeragentbeskrivelse (Lynx 2.8.3) +Name[de]=Browserkennung (Lynx 2.8.3) +Name[el]=Περιγραφή UA (Lynx 2.8.3) +Name[eo]=UA-Priskribo (Lynx 2.8.3) +Name[es]=Descripción de AU (Lynx 2.8.3) +Name[eu]=UA azalpena (Lynx 2.8.3) +Name[fi]=Käyttäjäagenttikuvaus (Lynx 2.8.3) +Name[fr]=Identité du navigateur (Lynx 2.8.3) +Name[fy]=GA-omskriuwing (Lynx 2.8.3) +Name[hi]=यूएडी-डिस्क्रिप्शन (लायनक्स 2.8.3) +Name[hu]=Böngészőtípus (Lynx 2.8.3) +Name[is]=UAD strengur (Lynx 2.8.3) +Name[it]=DescrizioneUA (Lynx 2.8.3) +Name[lt]=Naudotojo agento aprašymas (Lynx 2.8.3) +Name[lv]=UAApraksts (Lynx 2.8.3) +Name[mn]=UserAgent-Тодорхойлолт (Lynx 2.8.3) +Name[nb]=Brukeragent (Lynx 2.8.3) +Name[nds]=UA-Beschrieven (Lynx 2.8.3) +Name[ne]=UA वर्णन (Lynx 2.8.3) +Name[nl]=GA-beschrijving (Lynx 2.8.3) +Name[nn]=Brukaragent (Lynx 2.8.3) +Name[nso]=UAThlaloso (Lynx 2.8.3) +Name[pa]=UADescription(ਲੇਨਕਸ2.8.30) +Name[pl]=Opis przeglądarki użytkownika (Lynx 2.8.3) +Name[pt_BR]=Descrição (Lynx 2.8.3) +Name[ro]=Descriere UA (Lynx 2.8.3) +Name[se]=UA-čilgehus (Lynx 2.8.3) +Name[sk]=Popis agenta (Lynx 2.8.3) +Name[sl]=UAOpis (Lynx 2.8.3) +Name[sv]=AA-beskrivning (Lynx 2.8.3) +Name[ta]=UAவிவரம் (Lynx 2.8.3) +Name[tg]=ТавзеҳиUA (Линукс 2.8.3) +Name[tr]=UA Tanımı (Lynx 2.8.3) +Name[ven]=Thalutshedzo ya UA (Lynx 2.8.3) +Name[vi]=Mô tả UA (Lynx 2.8.3) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Lynx 2.8.3) +Name[zh_CN]=用户代理描述 (Lynx 2.8.3) +Name[zh_TW]=使用者代理描述 (Lynx 2.8.3) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MISC +X-KDE-UA-FULL=Lynx/2.8.3dev.6 libwww-FM/2.14 +X-KDE-UA-NAME=Lynx +X-KDE-UA-VERSION=2.8.3dev.6 diff --git a/kcontrol/kio/uasproviders/mozoncurrent.desktop b/kcontrol/kio/uasproviders/mozoncurrent.desktop new file mode 100644 index 000000000..4e6f483a5 --- /dev/null +++ b/kcontrol/kio/uasproviders/mozoncurrent.desktop @@ -0,0 +1,70 @@ +[Desktop Entry] +Name=UADescription (Mozilla 1.7 on current) +Name[af]=UA-beskrywing (Mozilla 1.7 op huidige bedryfstelsel) +Name[be]=UADescription (Mozilla 1.7 на гэтай сістэме) +Name[bs]=UADescription (Mozilla 1.7 na trenutnom) +Name[ca]=Descripció UA (Mozilla 1.7 a l'actual) +Name[cs]=Popis agenta (Mozilla 1.7 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (Mozilla 1.7) +Name[da]=Brugeragentbeskrivelse (Mozilla 1.7 på denne) +Name[de]=Browserkennung (Mozilla 1.7 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Mozilla 1.7 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Mozilo 1.7 sub nuna) +Name[es]=UADescription (Mozilla 1.7 en actual) +Name[et]=UADescription (Selles masinas töötav Mozilla 1.7) +Name[eu]=UA deskriptioa (Mozilla 1.7 unekoan) +Name[fa]=UADescription (Mozilla 1.7 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.7 nykyisin) +Name[fr]=Identité du navigateur (Mozilla 1.7 sous le système actuel) +Name[fy]=GA-omskriuwing (Mozilla 1.7 op aktive) +Name[ga]=UADescription (Mozilla 1.7 ar an gcóras reatha) +Name[gl]=UADescription (Mozilla 1.6 no actual) +Name[he]=UADescription (Mozilla 1.7 בנוכחי) +Name[hr]=UADescription (Mozilla 1.7 na trenutnom) +Name[hu]=Böngészőtípus (Mozilla 1.7) +Name[id]=UADescription (Mozilla 1.7) +Name[is]=UAD strengur (Mozilla 1.7 á núverandi) +Name[it]=DescrizioneUA (Mozilla 1.7 su sistema attuale) +Name[ka]=UADescription (Mozilla 1.7 მიმდინარე სისტემაში) +Name[kk]=UADescription (Mozilla 1.7 осы орында) +Name[km]=UADescription (Mozilla 1.7 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 Mozilla 1.7) +Name[lt]=Naudotojo agento aprašymas (Mozilla 1.7 ir esama) +Name[lv]=UAApraksts (Mozilla 1.7 uz tekošā) +Name[mk]=UADescription (Mozilla 1.7 на тековно) +Name[nb]=Brukeragent (Mozilla 1.7 herifra) +Name[nds]=UA-Beschrieven (Mozilla 1.7 op dit Systeem) +Name[ne]=UA वर्णन (हाल मोजिला १.७) +Name[nl]=GA-beschrijving (Mozilla 1.7 op current) +Name[nn]=Brukaragent (Mozilla 1.7 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ Mozilla 1.7) +Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.7 na bieżącym systemie) +Name[pt]=UADescription (Mozilla 1.7 no sistema actual) +Name[pt_BR]=Descrição (Mozilla 1.7 no sistema atual) +Name[ro]=Descriere UA (Mozilla 1.7 pentru sistemul de operare curent) +Name[ru]=UADescription (Mozilla 1.7 на текущей системе) +Name[rw]=UADescription (Mozilla 1.7 ku igezweho) +Name[se]=UA-čilgehus (Mozilla 1.7 dán mašiinnas) +Name[sl]=UAOpis (Mozilla 1.7 na trenutnem) +Name[sr]=UADescription (Mozilla 1.7 на тренутном) +Name[sr@Latn]=UADescription (Mozilla 1.7 na trenutnom) +Name[sv]=AA-beskrivning (Mozilla 1.7 på aktuell) +Name[ta]=UADescription (Mozilla 1.7 on current) +Name[tg]=UADescription (Системаи ҷорӣ Mozilla 1.7) +Name[th]=UADescription (มอซิลล่า 1.7 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (bulunulanda Mozilla 1.6) +Name[tt]=UADescription (Mozilla 1.7, şul uq astında) +Name[uk]=UADescription (Mozilla 1.7 на поточній) +Name[uz]=UADescription (joriy bilan Mozilla 1.7) +Name[uz@cyrillic]=UADescription (жорий билан Mozilla 1.7) +Name[vi]=Mô tả UA (đang dùng Mozilla 1.7) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.7 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 Mozilla 1.7) +Name[zh_TW]=使用者代理描述 (Mozilla 1.7 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MOZ +X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appSysName appMachineType; appLanguage; rv:1.7.3) Gecko/20040916 +X-KDE-UA-NAME=Mozilla +X-KDE-UA-VERSION=1.7.3 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/mozoncurrent12.desktop b/kcontrol/kio/uasproviders/mozoncurrent12.desktop new file mode 100644 index 000000000..0155d1282 --- /dev/null +++ b/kcontrol/kio/uasproviders/mozoncurrent12.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Name=UADescription (Mozilla 1.2.1 on current) +Name[af]=UA-beskrywing (Mozilla 1.2.1 op huidige bedryfstelsel) +Name[az]=İAİzahatı (Hazırkı Mozilla 1.2.1) +Name[be]=UADescription (Mozilla 1.2.1 на гэтай сістэме) +Name[bs]=UADescription (Mozilla 1.2.1 na trenutnom) +Name[ca]=Descripció de AU (Mozilla 1.2.1 sobre l'actual) +Name[cs]=Popis agenta (Mozilla 1.2.1 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (Mozilla 1.2.1) +Name[cy]=UADisgrifiad (Mozilla 1.2.1 ar gyfredol) +Name[da]=Brugeragentbeskrivelse (Mozilla 1.2.1 på denne) +Name[de]=Browserkennung (Mozilla 1.2.1 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Mozilla 1.2.1 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Mozilo 1.2.1 sub nuna) +Name[es]=Descripción de AU (Mozilla 1.2.1 en actual +Name[et]=UADescription (Selles masinas töötav Mozilla 1.2.1) +Name[eu]=UA deskriptioa (Mozilla 1.2.1 unekoan) +Name[fa]=UADescription (Mozilla 1.2.1 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.2.1 nykyisellä) +Name[fr]=Identité du navigateur (Mozilla 1.2.1 sous le système actuel) +Name[fy]=GA-omskriuwing (Mozilla 1.2.1 op aktive) +Name[ga]=UADescription (Mozilla 1.2.1 ar an gcóras reatha) +Name[gl]=UADescription (Mozilla 1.2.1 no actual) +Name[he]=UADescription (Mozilla 1.2.1 בנוכחי) +Name[hi]=यूएडी-डिस्क्रिप्शन (मोज़िला 1.2.1 हालिया पर) +Name[hr]=UADescription (Mozilla 1.2.1 na trenutnom) +Name[hu]=Böngészőtípus (Mozilla 1.2.1) +Name[id]=UADescription (Mozilla 1.2.1) +Name[is]=UAD strengur (Mozilla 1.2.1 on current) +Name[it]=DescrizioneUA (Mozilla 1.2.1 su sistema attuale) +Name[ka]=UADescription (Mozilla 1.2.1 მიმდინარე სისტემაში) +Name[kk]=UADescription (Mozilla 1.2.1 осы орында) +Name[km]=UADescription (Mozilla 1.2.1 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 Mozilla 1.2.1) +Name[lt]=Naudotojo agento aprašymas (Mozilla 1.2.1 ir esama) +Name[lv]=UAApraksts (Mozilla 1.2.1 uz tekošā) +Name[mk]=UADescription (Mozilla 1.2.1 на тековниот) +Name[mn]=UserAgent-Тодорхойлолт (Мокилла 1.2.1 идэвхитэй) +Name[mt]=UADescription (Mozilla 1.2.1 fuq kurrenti) +Name[nb]=Brukeragent (Mozilla 1.2.1 herifra) +Name[nds]=UA-Beschrieven (Mozilla 1.2.1 op dit Systeem) +Name[ne]=UA वर्णन (हाल मोजिला १.२.१) +Name[nl]=GA-beschrijving (Mozilla 1.2.1 op current) +Name[nn]=Brukaragent (Mozilla 1.2.1 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ ਮੌਜੀਲਾ ੧.੨.੧) +Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.2.1 na bieżącym systemie) +Name[pt]=UADescription (Mozilla 1.2.1 no sistema actual) +Name[pt_BR]=Descrição (Mozilla 1.2.1 no sistema atual) +Name[ro]=Descriere UA (Mozilla 1.2.1 pentru sistemul de operare curent) +Name[ru]=UADescription (Mozilla 1.2.1 на текущей системе) +Name[rw]=UADescription (Mozilla 1.2.1 ku igezweho) +Name[se]=UA-čilgehus (Mozilla 1.2.1 dan mašiinas) +Name[sk]=UADescription (Mozilla 1.2.1) +Name[sl]=UAOpis (Mozilla 1.2.1 na trenutnem) +Name[sr]=UADescription (Mozilla 1.2.1 на тренутном) +Name[sr@Latn]=UADescription (Mozilla 1.2.1 na trenutnom) +Name[sv]=AA-beskrivning (Mozilla 1.2.1 på aktuell) +Name[ta]=UAவிவரம் (M18 on current) +Name[tg]=ТавзеҳиUA (Mozilla 1.2.1 равон) +Name[th]=UADescription (มอซิลล่า 1.2.1 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (güncel üzerinde Mozilla 1.2.1) +Name[tt]=UADescription (Mozilla 1.2.1, şul uq astında) +Name[uk]=UADescription (Mozilla 1.2.1 на поточній ОС) +Name[uz]=UADescription (joriy bilan Mozilla 1.2.1) +Name[uz@cyrillic]=UADescription (жорий билан Mozilla 1.2.1) +Name[vi]=Mô tả UA (đang dùng Mozilla 1.2.1) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.2.1 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 Mozilla 1.2.1) +Name[zh_TW]=使用者代理描述 (Mozilla 1.2.1 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MOZ +X-KDE-UA-FULL=Mozilla/5.0 (appSysName; U; appLanguage; rv:1.2.1) Gecko/20021130 +X-KDE-UA-NAME=Mozilla +X-KDE-UA-VERSION=1.2.1 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/mozoncurrent16.desktop b/kcontrol/kio/uasproviders/mozoncurrent16.desktop new file mode 100644 index 000000000..6867a5ee1 --- /dev/null +++ b/kcontrol/kio/uasproviders/mozoncurrent16.desktop @@ -0,0 +1,75 @@ +[Desktop Entry] +Name=UADescription (Mozilla 1.6 on current) +Name[af]=UA-beskrywing (Mozilla 1.6 op huidige bedryfstelsel) +Name[az]=İA İzahatı (Mozilla 1.6 on current) +Name[be]=UADescription (Mozilla 1.6 на гэтай сістэме) +Name[bs]=UADescription (Mozilla 1.6 na trenutnom) +Name[ca]=UADescription (Mozilla 1.6 a l'actual) +Name[cs]=Popis agenta (Mozilla 1.6 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (Mozilla 1.6) +Name[cy]=DisgrifiadUA (Mozilla 1.6 ar hyn o bryd) +Name[da]=Brugeragentbeskrivelse (Mozilla 1.6 på denne) +Name[de]=Browserkennung (Mozilla 1.6 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Mozilla 1.6 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Mozilo 1.6 sub nuna) +Name[es]=Descripción de AU (Mozilla 1.6 en actual) +Name[et]=UADescription (Selles masinas töötav Mozilla 1.6) +Name[eu]=UA deskriptioa (Mozilla 1.6 unekoan) +Name[fa]=UADescription (Mozilla 1.6 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.6 nykyisellä) +Name[fr]=Identité du navigateur (Mozilla 1.6 sous le système actuel) +Name[fy]=GA-omskriuwing (Mozilla 1.6 op aktive) +Name[ga]=UADescription (Mozilla 1.6 ar an gcóras reatha) +Name[gl]=UADescription (Mozilla 1.6 no actual) +Name[he]=UADescription (Mozilla 1.6 בנוכחי) +Name[hi]=यूए-डिस्क्रिप्शन (मौजूदा में मोज़िला 1.6) +Name[hr]=UADescription (Mozilla 1.6 na trenutnom) +Name[hu]=Böngészőtípus (Mozilla 1.6) +Name[id]=UADescription (Mozilla 1.6) +Name[is]=UAD strengur (Mozilla 1.6 on current) +Name[it]=DescrizioneUA(Mozilla 1.6 su sistema attuale) +Name[ka]=UADescription (Mozilla 1.6 მიმდინარე სისტემაში) +Name[kk]=UADescription (Mozilla 1.6 осы орында) +Name[km]=UADescription (Mozilla 1.6 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 Mozilla 1.7) +Name[lt]=Naudotojo agento aprašymas (Mozilla 1.6 ir esama) +Name[lv]=UAApraksts (Mozilla 1.6 uz tekošā) +Name[mk]=UADescription (Mozilla 1.6 на тековниот) +Name[mt]=UADescription (Mozilla 1.6 fuq kurrenti) +Name[nb]=Brukeragent (Mozilla 1.6 herifra) +Name[nds]=UA-Beschrieven (Mozilla 1.6 op dit Systeem) +Name[ne]=UA वर्णन (हाल मोजिला १.६) +Name[nl]=GA-beschrijving (Mozilla 1.6 op current) +Name[nn]=Brukaragent (Mozilla 1.6 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ ਮੌਜੀਲਾ ੧.੬) +Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.6 na bieżącym systemie) +Name[pt]=UADescription (Mozilla 1.6 no sistema actual) +Name[pt_BR]=Descrição (Mozilla 1.6 no sistema atual) +Name[ro]=Descriere UA (Mozilla 1.6 pentru sistemul de operare curent) +Name[ru]=UADescription (Mozilla 1.6 на текущей системе) +Name[rw]=UADescription (Mozilla 1.6 ku igezweho) +Name[se]=UA-čilgehus (Mozilla 1.6 dan mašiinas) +Name[sk]=Popis agenta (Mozilla 1.6 na aktuálnom) +Name[sl]=UAOpis (Mozilla 1.6 na trenutnem) +Name[sr]=UADescription (Mozilla 1.6 на тренутном) +Name[sr@Latn]=UADescription (Mozilla 1.6 na trenutnom) +Name[sv]=AA-beskrivning (Mozilla 1.6 på aktuell) +Name[ta]=UADescription (Mozilla 1.6 தற்ப்போதில்) +Name[tg]=UADescription (Системаи ҷорӣ Mozilla 1.6) +Name[th]=UADescription (มอซิลล่า 1.6 บนระบบปัจจุบัน) +Name[tr]=UATanımı (güncel üzerinde Mozilla 1.6) +Name[tt]=UADescription (Mozilla 1.6, şul uq astında) +Name[uk]=UADescription (Mozilla 1.6 на поточній ОС) +Name[uz]=UADescription (joriy bilan Mozilla 1.6) +Name[uz@cyrillic]=UADescription (жорий билан Mozilla 1.6) +Name[vi]=Mô tả UA (đang dùng Mozilla 1.6) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.6 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 Mozilla 1.6) +Name[zh_TW]=使用者代理描述 (Mozilla 1.6 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MOZ +X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appSysName appMachineType; appLanguage; rv:1.6) Gecko/20040113 +X-KDE-UA-NAME=Mozilla +X-KDE-UA-VERSION=1.6 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/mozonwin2000.desktop b/kcontrol/kio/uasproviders/mozonwin2000.desktop new file mode 100644 index 000000000..1e2ac37aa --- /dev/null +++ b/kcontrol/kio/uasproviders/mozonwin2000.desktop @@ -0,0 +1,73 @@ +[Desktop Entry] +Name=UADescription (1.2.1 on Windows 2000) +Name[af]=UA-beskrywing (1.2.1 op Windows 2000) +Name[be]=UADescription (1.2.1 на Windows 2000) +Name[br]=UADescription (1.2.1 war Windows 2000) +Name[bs]=UADescription (1.2.1 na Windows 2000) +Name[ca]=Descripció UA (1.2.1 a Windows 2000) +Name[cs]=Popis agenta (1.2.1 na Windows 2000) +Name[csb]=Òpis programë brëkòwnika (1.2.1 na Windows 2000) +Name[da]=Brugeragentbeskrivelse (1.2.1 på Windows 2000) +Name[de]=Browserkennung (1.2.1 unter Windows 2000) +Name[el]=Περιγραφή UA (1.2.1 σε Windows 2000) +Name[eo]=UA-Priskribo (1.2.1 sub Vindozo 2000) +Name[es]=UADescription (1.2.1 en Windows 2000) +Name[et]=UADescription (1.2.1 Windows 2000 platvormil) +Name[eu]=UA azalpena (1.2.1 Windows 2000n) +Name[fa]=UADescription (1.2.1 در Windows 2000) +Name[fi]=Käyttäjäagenttikuvaus (1.2.1 Windows 2000) +Name[fr]=Identité du navigateur (1.2.1 sous Windows 2000) +Name[fy]=GA-omskriuwing (1.2.1 op Windows 2000) +Name[ga]=UADescription (1.2.1 ar Windows 2000) +Name[gl]=UADescription (1.2.1 en Windows 2000) +Name[he]=UADescription (1.2.1 Windows2000ב־) +Name[hr]=UADescription (1.2.1 na Windows 2000) +Name[hu]=Böngészőtípus (Mozilla 1.2.1, Win 2000) +Name[id]=UADescription (1.2.1 di Windows 2000) +Name[is]=UAD strengur (1.2.1 á Windows 2000) +Name[it]=DescrizioneUA (1.2.1 su Windows 2000) +Name[ka]=UADescription (1.2.1 Windows 2000-ში) +Name[kk]=UADescription (1.2.1 / Windows 2000) +Name[km]=UADescription (1.2.1 នៅ​លើ Windows 2000) +Name[ko]=UADescription (윈도 2000의 IE 4.01) +Name[lt]=Naudotojo agento aprašymas (1.2.1 ir Windows 2000) +Name[lv]=UAApraksts (1.2.1 uz Windows 2000) +Name[mk]=UADescription (1.2.1 на Windows 2000) +Name[nb]=Brukeragent (1.2.1 på Windows 2000) +Name[nds]=UA-Beschrieven (1.2.1 op Windows 2000) +Name[ne]=UA वर्णन (विण्डोज २०००मा १.२.१) +Name[nl]=GA-beschrijving (1.2.1 op Windows 2000) +Name[nn]=Brukaragent (1.2.1 på Windows 2000) +Name[pa]=UADescription (Windows 2000 'ਤੇ 1.2.1) +Name[pl]=Opis przeglądarki użytkownika (1.2.1 na Windows 2000) +Name[pt]=UADescription (1.2.1 no Windows 2000) +Name[pt_BR]=Descrição (1.2.1 no Windows 2000) +Name[ro]=Descriere UA (1.2.1 pentru WinNT 2000) +Name[ru]=UADescription (1.2.1 на Windows 2000) +Name[rw]=UADescription (1.2.1 kuri Windows 2000) +Name[se]=UA-čilgehus (1.2.1 ja Windows 2000) +Name[sl]=UAOpis (1.2.1 na Windows 2000) +Name[sr]=UADescription (1.2.1 на Windows 2000) +Name[sr@Latn]=UADescription (1.2.1 na Windows 2000) +Name[sv]=AA-beskrivning (1.2.1 på Windows 2000) +Name[ta]=UAவிவரம் (1.2.1 on Windows 2000) +Name[tg]=UADescription (1.2.1 дар асоси Windows 2000) +Name[tr]=UA Tanımı (Windows 2000'de 1.2.1) +Name[tt]=UADescription (1.2.1, Windows 2000 astında) +Name[uk]=UADescription (1.2.1 на Windows 2000) +Name[uz]=UADescription (Windows 2000 bilan 1.2.1) +Name[uz@cyrillic]=UADescription (Windows 2000 билан 1.2.1) +Name[vi]=Mô tả UA (1.2.1 trên Win 2000) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.2.1 so Windows 2000) +Name[zh_CN]=用户代理描述 (运行于 Windows 2000 的 1.2.1) +Name[zh_TW]=使用者代理描述 (1.2.1 on Windows 2000) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MOZ +X-KDE-UA-FULL=Mozilla/5.0 (Windows; U; Windows NT 5.0; appLanguage; 1.2.1) Gecko/20021130 +X-KDE-UA-NAME=Mozilla +X-KDE-UA-VERSION=1.2.1 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=2000 +X-KDE-UA-DYNAMIC-ENTRY=1 + diff --git a/kcontrol/kio/uasproviders/mozonwinxp.desktop b/kcontrol/kio/uasproviders/mozonwinxp.desktop new file mode 100644 index 000000000..3cc5f9029 --- /dev/null +++ b/kcontrol/kio/uasproviders/mozonwinxp.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Name=UADescription (Mozilla 1.7 on Windows XP) +Name[af]=UA-beskrywing (Mozilla 1.7 op Windows XP) +Name[be]=UADescription (Mozilla 1.7 на Windows XP) +Name[br]=UADescription (Mozilla 1.7 war Windows XP) +Name[bs]=UADescription (Mozilla 1.7 na Windows XP) +Name[ca]=Descripció UA (Mozilla 1.7 a Windows XP) +Name[cs]=Popis agenta (Mozilla 1.7 na Windows XP) +Name[csb]=Òpis programë brëkòwnika (Mozilla 1.7 na Windows XP) +Name[da]=Brugeragentbeskrivelse (Mozilla 1.7 på Windows XP) +Name[de]=Browserkennung (Mozilla 1.7 unter Windows XP) +Name[el]=Περιγραφή UA (Mozilla 1.7 σε Windows XP) +Name[eo]=UA-Priskribo (Mozilo 1.7 sub Vindozo XP) +Name[es]=UADescription (Mozilla 1.7 en Windows XP) +Name[et]=UADescription (Mozilla 1.7 Windows XP platvormil) +Name[eu]=UA azalpena (Mozilla 1.7 Windows XPn) +Name[fa]=UADescription (Mozilla 1.7 در Windows XP) +Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.7 Windows XP) +Name[fr]=Identité du navigateur (Mozilla 1.7 sous Windows XP) +Name[fy]=GA-omskriuwing (Mozilla 1.7 op Windows XP) +Name[ga]=UADescription (Mozilla 1.7 ar Windows XP) +Name[gl]=UADescription (Mozila 1.7 en Windows XP) +Name[he]=UADescription (Mozilla 1.7 Windows XPב־) +Name[hr]=UADescription (Mozilla 1.7 na Windows XP) +Name[hu]=Böngészőtípus (Mozilla 1.7, Windows XP) +Name[id]=UADescription (Mozilla 1.7 di Windows XP) +Name[is]=UAD strengur (Mozilla 1.7 á Windows XP) +Name[it]=DescrizioneUA (Mozilla 1.7 su Windows XP) +Name[ka]=UADescription (Mozilla 1.7 Windows XP-ში) +Name[kk]=UADescription (Mozilla 1.7 / Windows XP) +Name[km]=UADescription (Mozilla 1.7 នៅ​លើ Windows XP) +Name[ko]=UADescription (윈도 XP의 Mozilla 1.7) +Name[lt]=Naudotojo agento aprašymas (Mozilla 1.7 ir Windows XP) +Name[lv]=UAApraksts (Mozilla 1.7 uz Windows XP) +Name[mk]=UADescription (Mozilla 1.7 на Windows XP) +Name[nb]=Brukeragent (Mozilla 1.7 på Windows XP) +Name[nds]=UA-Beschrieven (Mozilla 1.7 op Windows XP) +Name[ne]=UA वर्णन (विण्डोज एक्स पीमा मोजिला १.७) +Name[nl]=GA-beschrijving (Mozilla 1.7 op Windows XP) +Name[nn]=Brukaragent (Mozilla 1.7 på Windows XP) +Name[pa]=UADescription (Windows XP 'ਤੇ Mozilla 1.7) +Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.7 na Windows XP) +Name[pt]=UADescription (Mozilla 1.7 no Windows XP) +Name[pt_BR]=Descrição (Mozilla 1.7 no Windows XP) +Name[ro]=Descriere UA (Mozilla 1.7 pentru Windows XP) +Name[ru]=UADescription (Mozilla 1.7 на Windows XP) +Name[rw]=UADescription (Mozilla 1.7 kuri Windows XP) +Name[se]=UA-čilgehus (Mozilla 1.7 ja Windows XP) +Name[sl]=UAOpis (Mozilla 1.7 na Windows XP) +Name[sr]=UADescription (Mozilla 1.7 на Windows XP) +Name[sr@Latn]=UADescription (Mozilla 1.7 na Windows XP) +Name[sv]=AA-beskrivning (Mozilla 1.7 på Windows XP) +Name[ta]=UAவிவரம் (Mozilla 1.7 on Windows XP) +Name[tg]=UADescription (Mozilla 1.7 дар асоси Windows XP) +Name[th]=UADescription (มอซิลล่า 1.7 บน Windows XP) +Name[tr]=UA Tanımı (Windows XP'de Mozilla 1.7) +Name[tt]=UADescription (Mozilla 1.7, Windows XP astında) +Name[uk]=UADescription (Mozilla 1.7 на Windows XP) +Name[uz]=UADescription (Windows XP bilan Mozilla 1.7) +Name[uz@cyrillic]=UADescription (Windows XP билан Mozilla 1.7) +Name[vi]=Mô tả UA (Mozilla 1.7 trên Win XP) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.7 so Windows XP) +Name[zh_CN]=用户代理描述 (运行于 Windows XP 的 NN 4.7) +Name[zh_TW]=使用者代理描述 (Mozilla 1.7 on Windows XP) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MOZ +X-KDE-UA-FULL=Mozilla/5.0 (Windows; U; Windows NT 5.1; appLanguage; rv:1.7.3) Gecko/20040916 +X-KDE-UA-NAME=Mozilla +X-KDE-UA-VERSION=1.7.3 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=XP +X-KDE-UA-DYNAMIC-ENTRY=1 + diff --git a/kcontrol/kio/uasproviders/nn301oncurrent.desktop b/kcontrol/kio/uasproviders/nn301oncurrent.desktop new file mode 100644 index 000000000..469b53b50 --- /dev/null +++ b/kcontrol/kio/uasproviders/nn301oncurrent.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Name=UADescription (NN 3.01 on current) +Name[af]=UA-beskrywing (NN 3.01 op huidige bedryfstelsel) +Name[be]=UADescription (NN 3.01 на гэтай сістэме) +Name[bs]=UADescription (NN 3.01 na trenutnom) +Name[ca]=Descripció de AU (NN 3.01 sobre l'actual) +Name[cs]=Popis agenta (NN 3.01 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (NN 3.01) +Name[cy]=UADisgrifiad (NN 3.01 ar gyfredol) +Name[da]=Brugeragentbeskrivelse (NN 3.01 på denne) +Name[de]=Browserkennung (NN 3.01 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (NN 3.01 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (NN 3.01 sub nuna) +Name[es]=Descripción de AU (NN 3.01 en actual) +Name[et]=UADescription (Selles masinas töötav Netscape 3.01) +Name[eu]=UA azalpena (NN 3.01 unekoan) +Name[fa]=UADescription (NN 3.01 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (NN 3.01 nykyisellä) +Name[fr]=Identité du navigateur (Navigator 3.01 sous le système actuel) +Name[fy]=GA-omskriuwing (NN 3.01 op aktive) +Name[ga]=UADescription (NN 3.01 ar an gcóras reatha) +Name[gl]=UADescription (NN 3.01 no actual) +Name[he]=UADescription (NN 3.01 בנוכחי) +Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन 3.01 हालिया पर) +Name[hr]=UADescription (NN 3.01 na trenutnom) +Name[hu]=Böngészőtípus (NN 3.01) +Name[id]=UADescription (NN 3.01) +Name[is]=UAD strengur (NN 3.01 on current) +Name[it]=DescrizioneUA (NN 3.01 su sistema attuale) +Name[ka]=UADescription (NN 3.01 მიმდინარე სისტემაში) +Name[kk]=UADescription (NN 3.01 осы орында) +Name[km]=UADescription (NN 3.01 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 넷스케이프 3.01) +Name[lt]=Naudotojo agento aprašymas (NN 3.01 ir esama) +Name[lv]=UAApraksts (NN 3.01 uz tekošā) +Name[mk]=UADescription (NN 3.01 на тековен) +Name[mn]=UserAgent-Тодорхойлолт (NN 3.01 on current) +Name[mt]=UADescription (NN 3.01 fuq kurrenti) +Name[nb]=Brukeragent (NN 3.01 herifra) +Name[nds]=UA-Beschrieven (NN 3.01 op dit Systeem) +Name[ne]=UA वर्णन (हाल NN 3.01 मा) +Name[nl]=GA-beschrijving (NN 3.01 op huidige) +Name[nn]=Brukaragent (NN 3.01 herifrå) +Name[nso]=UAThlaloso (NN 3.01 go ya bjale) +Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ NN 3.01) +Name[pl]=Opis przeglądarki użytkownika (NN 3.01 na bieżącym systemie) +Name[pt]=UADescription (NN 3.01 no sistema actual) +Name[pt_BR]=Descrição (NN 3.01 no sistema atual) +Name[ro]=Descriere UA (NN 3.01 pentru sistemul de operare curent) +Name[ru]=UADescription (NN 3.01 на текущей системе) +Name[rw]=UADescription (NN 3.01 ku igezweho) +Name[se]=UA-čilgehus (NN 3.01 dán mašiinnas) +Name[sk]=Popis agenta (NN 3.01 na aktuálnom) +Name[sl]=UAOpis (NN 3.01 na trenutnem) +Name[sr]=UADescription (NN 3.01 на тренутном) +Name[sr@Latn]=UADescription (NN 3.01 na trenutnom) +Name[sv]=AA-beskrivning (NN 3.01 på aktuell) +Name[ta]=UAவிவரம் (NN 3.01 on current) +Name[tg]=ТавзеҳиUA (NN 3.01 равон) +Name[th]=UADescription (NN 3.01 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (güncel üzerinde NN 3.01) +Name[tt]=UADescription (NN 3.01, şul uq astında) +Name[uk]=UADescription (NN 3.01 на поточній ОС) +Name[uz]=UADescription (joriy bilan NN 3.01) +Name[uz@cyrillic]=UADescription (жорий билан NN 3.01) +Name[ven]=Thalutshedzo ya UA (NN 3.01 zwa zwino) +Name[vi]=Mô tả UA (đang dùng NN 3.01) +Name[wa]=Discrijhaedje di l' idintité do betchteu (NN 3.01 sol ci do moumint) +Name[xh]=UADescription (NN 3.01 okwangoku) +Name[zh_CN]=用户代理描述 (运行于本机的 NN 3.01) +Name[zh_TW]=使用者代理描述 (NN 3.01 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/3.01 (appPlatform; I; appSysName appSysRelease appMachineType) +X-KDE-UA-NAME=Netscape Navigator +X-KDE-UA-VERSION=3.01 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/nn475oncurrent.desktop b/kcontrol/kio/uasproviders/nn475oncurrent.desktop new file mode 100644 index 000000000..783ee5b99 --- /dev/null +++ b/kcontrol/kio/uasproviders/nn475oncurrent.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Name=UADescription (NN 4.76 on current) +Name[af]=UA-beskrywing (NN 4.76 op huidige bedryfstelsel) +Name[be]=UADescription (NN 4.76 на гэтай сістэме) +Name[bs]=UADescription (NN 4.76 na trenutnom) +Name[ca]=Descripció de AU (NN 4.76 sobre l'actual) +Name[cs]=Popis agenta (NN 4.76 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (NN 4.76) +Name[cy]=UADisgrifiad (NN 4.76 ar gyfredol) +Name[da]=Brugeragentbeskrivelse (NN 4.76 på denne) +Name[de]=Browserkennung (NN 4.76 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (NN 4.76 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (NN 4.76 sub nuna) +Name[es]=Descripción de AU (NN 4.76 en actual) +Name[et]=UADescription (Selles masinas töötav Netscape 4.76) +Name[eu]=UA azalpena (NN 4.76 unekoan) +Name[fa]=UADescription (NN 4.76 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (NN 4.76 nykyisellä) +Name[fr]=Identité du navigateur (Navigator 4.76 sous le système actuel) +Name[fy]=GA-omskriuwing (NN 4.76 op aktive) +Name[ga]=UADescription (NN 4.76 ar an gcóras reatha) +Name[gl]=UADescription (NN 4.76 no actual) +Name[he]=UADescription (NN 4.76 בנוכחי) +Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन 4.76 हालिया पर) +Name[hr]=UADescription (NN 4.76 na trenutnom) +Name[hu]=Böngészőtípus (NN 4.76) +Name[id]=UADescription (NN 4.76) +Name[is]=UAD strengur (NN 4.76 on current) +Name[it]=DescrizioneUA (NN 4.76) +Name[ka]=UADescription (NN 4.76 მიმდინარე სისტემაში) +Name[kk]=UADescription (NN 4.76 осы орында) +Name[km]=UADescription (NN 4.76 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 넷스케이프 4.76) +Name[lt]=Naudotojo agento aprašymas (NN 4.76 ir esama) +Name[lv]=UAApraksts (NN 4.76 uz tekošā) +Name[mk]=UADescription (NN 4.76 на тековен) +Name[mn]=UserAgent-Тодорхойлолт (NN 4.76 on current) +Name[mt]=UADescription (NN 4.76 fuq kurrenti) +Name[nb]=Brukeragent (NN 4.76 herifra) +Name[nds]=UA-Beschrieven (NN 4.76 op dit Systeem) +Name[ne]=UA वर्णन (हाल NN 4.76 मा) +Name[nl]=GA-beschrijving (NN 4.76 op huidige) +Name[nn]=Brukaragent (NN 4.76 herifrå) +Name[nso]=UAThlaloso (NN 4.76 go ya bjale) +Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ NN 4.76) +Name[pl]=Opis przeglądarki użytkownika (NN 4.76 na bieżącym systemie) +Name[pt]=UADescription (NN 4.76 no sistema actual) +Name[pt_BR]=Descrição (NN 4.76 no sistema atual) +Name[ro]=Descriere UA (NN 4.76 pentru sistemul de operare curent) +Name[ru]=UADescription (NN 4.76 на текущей системе) +Name[rw]=UADescription (NN 4.76 ku igezweho) +Name[se]=UA-čilgehus (NN 4.76 dán mašiinnas) +Name[sk]=Popis agenta (NN 4.76 na aktuálnom) +Name[sl]=UAOpis (NN 4.76 na trenutnem) +Name[sr]=UADescription (NN 4.76 на тренутном) +Name[sr@Latn]=UADescription (NN 4.76 na trenutnom) +Name[sv]=AA-beskrivning (NN 4.76 på aktuell) +Name[ta]=UAவிவரம் (NN 4.76 on current) +Name[tg]=ТавзеҳиUA (NN 4.76 равон) +Name[th]=UADescription (NN 4.76 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (güncel üzerinde NN 4.76) +Name[tt]=UADescription (NN 4.76, şul uq astında) +Name[uk]=UADescription (NN 4.76 на поточній ОС) +Name[uz]=UADescription (joriy bilan NN 4.76) +Name[uz@cyrillic]=UADescription (жорий билан NN 4.76) +Name[ven]=Thalutshedzo ya UA (NN 4.76 zwa zwino) +Name[vi]=Mô tả UA (đang dùng NN 4.76) +Name[wa]=Discrijhaedje di l' idintité do betchteu (NN 4.76 sol ci do moumint) +Name[xh]=UADescription (NN 4.76 okwangoku) +Name[zh_CN]=用户代理描述 (运行于本机的 NN 4.76) +Name[zh_TW]=使用者代理描述 (NN 4.76 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/4.76 (appPlatform; U; appSysName appSysRelease appMachineType) +X-KDE-UA-NAME=Netscape Navigator +X-KDE-UA-VERSION=4.76 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/nn475onwin95.desktop b/kcontrol/kio/uasproviders/nn475onwin95.desktop new file mode 100644 index 000000000..9416516f4 --- /dev/null +++ b/kcontrol/kio/uasproviders/nn475onwin95.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Name=UADescription (NN 4.7 on Windows 95) +Name[af]=UA-beskrywing (NN 4.7 op Windows 95) +Name[be]=UADescription (NN 4.7 на Windows 95) +Name[br]=UADescription (NN 4.7 war Windows 95) +Name[bs]=UADescription (NN 4.7 na Windows 95) +Name[ca]=Descripció de AU (NN 4.7 en Windows 95) +Name[cs]=Popis agenta (NN 4.7 na Windows 95) +Name[csb]=Òpis programë brëkòwnika (NN 4.7 na Windows 95) +Name[cy]=UADisgrifiad (NN4.7 ar Windows 95) +Name[da]=Brugeragentbeskrivelse (NN 4.7 på Windows 95) +Name[de]=Browserkennung (NN 4.7 unter Windows 95) +Name[el]=Περιγραφή UA (NN 4.7 σε Windows 95) +Name[eo]=UA-Priskribo (NN 4.7 sub Vindozo 95) +Name[es]=Descripción de AU (NN 4.7 en Windows 95) +Name[et]=UADescription (Netscape 4.7 Win95 platvormil) +Name[eu]=UA azalpena (NN 4.7 Windows 95-ean) +Name[fa]=UADescription (NN 4.7 در Windows 95) +Name[fi]=Käyttäjäagenttikuvaus (NN 4.7 Windows 95:lla) +Name[fr]=Identité du navigateur (Navigator 4.7 sous Windows 95) +Name[fy]=GA-omskriuwing (NN 4.76 op Windows 95) +Name[ga]=UADescription (NN 4.7 ar Windows 95) +Name[gl]=UADescription (NN 4.7 en Windows 95) +Name[he]=UADescription (Windows 95ב־ NN 4.7) +Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन 4.7 विंडोज़ 95 पर) +Name[hr]=UADescription (NN 4.7 na Windows 95) +Name[hu]=Böngészőtípus (NN 4.7, Win 95) +Name[id]=UADescription (NN 4.7 di Windows 95) +Name[is]=UAD strengur (NN 4.7 on Windows 95) +Name[it]=DescrizioneUA (NN 4.7 su Windows 95) +Name[ka]=UADescription (NN 4.7 Windows 95-ში) +Name[kk]=UADescription (NN 4.7 / Windows 95) +Name[km]=UADescription (NN 4.7 នៅ​លើ Windows 95) +Name[ko]=UADescription (윈도 95의 넷스케이프 4.7) +Name[lt]=Naudotojo agento aprašymas (NN 4.7 ir Windows 95) +Name[lv]=UAApraksts (NN 4.7 uz Windows 95) +Name[mk]=UADescription (NN 4.7 на Windows 95) +Name[mn]=UserAgent-Тодорхойлолт (NN 4.7 on Windows 95) +Name[mt]=UADescription (NN 4.7 fuq Windows 95) +Name[nb]=Brukeragent (NN 4.7 på Windows 95) +Name[nds]=UA-Beschrieven (NN 4.7 op Windows 95) +Name[ne]=UA वर्णन (विण्डोज ९५ मा NN 4.7) +Name[nl]=GA-beschrijving (NN 4.76 op Windows 95) +Name[nn]=Brukaragent (NN 4.7 på Windows 95) +Name[nso]=UAThlaloso (NN4.7 go Windows 95) +Name[pa]=UADescription (ਵਿੰਡੋ ੯੫ 'ਤੇ NN 4.7) +Name[pl]=Opis przeglądarki użytkownika (NN 4.7 na Windows 95) +Name[pt]=UADescription (NN 4.7 no Windows 95) +Name[pt_BR]=Descrição (NN 4.7 no Windows 95) +Name[ro]=Descriere UA (NN 4.7 pentru Windows 95) +Name[ru]=UADescription (NN 4.7 на Windows 95) +Name[rw]=UADescription (NN 4.7 kuri Windows 95) +Name[se]=UA-čilgehus (NN 4.7 ja Windows 95) +Name[sk]=Popis agenta (NN 4.7 na Windows 95) +Name[sl]=UAOpis (NN 4.7 na Windows 95) +Name[sr]=UADescription (NN 4.7 на Windows 95) +Name[sr@Latn]=UADescription (NN 4.7 na Windows 95) +Name[sv]=AA-beskrivning (NN 4.7 på Windows 95) +Name[ta]=UAவிவரம் (NN 4.7 on Windows 95) +Name[tg]=ТавзеҳиUA (NN 4.7 ба Windows 95) +Name[th]=UADescription (NN 4.7 บน Windows 95) +Name[tr]=UA Tanımı (Windows 95 üzerinde NN 4.7) +Name[tt]=UADescription (NN 4.7, Windows 95 astında) +Name[uk]=UADescription (NN 4.7 на Windows 95) +Name[uz]=UADescription (Windows 95 bilan NN 4.7) +Name[uz@cyrillic]=UADescription (Windows 95 билан NN 4.7) +Name[ven]=Thalutshedzo ya UA (NN 4.7 kha 95) +Name[vi]=Mô tả UA (NN 4.7 trên Windows 95) +Name[wa]=Discrijhaedje di l' idintité do betchteu (NN 4.7 so Windows 95) +Name[xh]=UADescription (NN 4.7 kwi Windows.95) +Name[zh_CN]=用户代理描述 (运行于 Windows 95 的 NN 4.7) +Name[zh_TW]=使用者代理描述 (NN 4.7 on Windows 95) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/4.7 [appLanguage] (Win95; U) +X-KDE-UA-NAME=Netscape Navigator +X-KDE-UA-VERSION=4.76 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=95 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/nn476onppc.desktop b/kcontrol/kio/uasproviders/nn476onppc.desktop new file mode 100644 index 000000000..b24f83abc --- /dev/null +++ b/kcontrol/kio/uasproviders/nn476onppc.desktop @@ -0,0 +1,82 @@ +[Desktop Entry] +Name=UADescription (NN on Mac PPC) +Name[af]=UA-beskrywing (NN op Mac PPC) +Name[be]=UADescription (NN на Mac PPC) +Name[br]=UADescription (NN war Mac PPC) +Name[bs]=UADescription (NN na Mac PPC) +Name[ca]=Descripció de AU (NN en Mac PPC) +Name[cs]=Popis agenta (NN na Mac PPC) +Name[csb]=Òpis programë brëkòwnika (NN na Mac PPC) +Name[cy]=UADisgrifiad (NN ar Mac PPC) +Name[da]=Brugeragentbeskrivelse (NN på Mac PPC) +Name[de]=Browserkennung (NN auf Mac PPC) +Name[el]=Περιγραφή UA (NN σε Mac PPC) +Name[eo]=UA-Priskribo (NN sub Mac-PPC) +Name[es]=Descripción de AU (NN en Mac PPC) +Name[et]=UADescription (Netscape MacPPC platvormil) +Name[eu]=UA azalpena (NN Mac PPC-n) +Name[fa]=UADescription (NN در Mac PPC) +Name[fi]=Käyttäjäagenttikuvaus (NN Mac PPC:llä) +Name[fr]=Identité du navigateur (Navigator sous Mac PPC) +Name[fy]=GA-omskriuwing (NN op Mac PPC) +Name[ga]=UADescription (NN ar Mac PPC) +Name[gl]=UADescription (NN en Mac PPC) +Name[he]=UADescription (Mac PPCב־ NN) +Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन मैक पीपीसी पर) +Name[hr]=UADescription (NN na Mac PPC) +Name[hu]=Böngészőtípus (NN, Mac PPC) +Name[id]=UADescription (NN di Mac PPC) +Name[is]=UAD strengur (NN on Mac PPC) +Name[it]=DescrizioneUA (NN su Mac PPC) +Name[ka]=UADescription (NN на Mac PPC) +Name[kk]=UADescription (NN / Mac PPC) +Name[km]=UADescription (NN នៅ​លើ Mac PPC) +Name[ko]=UADescription (Mac PPC의 IE 5.0) +Name[lt]=Naudotojo agento aprašymas (NN ir Mac PPC) +Name[lv]=UAApraksts (NN uz Mac PPC) +Name[mk]=UADescription (NN на Mac PPC) +Name[mn]=UserAgent-Тодорхойлолт (NN on Mac PPC) +Name[mt]=UADescription (NN fuq Mac PPC) +Name[nb]=Brukeragent (NN på Mac PPC) +Name[nds]=UA-Beschrieven (NN op Mac PPC) +Name[ne]=UA वर्णन (Mac PPC NN on) +Name[nl]=GA-beschrijving (NN op Mac PPC) +Name[nn]=Brukaragent (NN på Mac PPC) +Name[nso]=UAThlaloso (NN go Mac PPC) +Name[pa]=UADescription (Mac PPC 'ਤੇ N1) +Name[pl]=Opis przeglądarki użytkownika (NN na Mac PPC) +Name[pt]=UADescription (NN no Mac PPC) +Name[pt_BR]=Descrição (NN no Mac PPC) +Name[ro]=Descriere UA (NN pentru Mac PPC) +Name[ru]=UADescription (NN на Mac PPC) +Name[rw]=UADescription (NN kuri Mac PPC) +Name[se]=UA-čilgehus (NN ja Mac PPC) +Name[sk]=Popis agenta (NN na Mac PPC) +Name[sl]=UAOpis (NN na Mac PPC) +Name[sr]=UADescription (NN на Mac PPC-у) +Name[sr@Latn]=UADescription (NN na Mac PPC-u) +Name[sv]=AA-beskrivning (NN på Mac PPC) +Name[ta]=UAவிவரம் (NN on Mac PPC) +Name[tg]=ТавзеҳиUA (NN ба Mac PPC) +Name[th]=UADescription (NN บน Mac PPC) +Name[tr]=UA Tanımı (Mac PPC üzerinde NN) +Name[tt]=UADescription (NN, Mac PPC astında) +Name[uk]=UADescription (NN на Mac PPC) +Name[uz]=UADescription (Mac PPC bilan NN) +Name[uz@cyrillic]=UADescription (Mac PPC билан NN) +Name[ven]=Thalutshedzo ya UA (NN kha Mac PPC) +Name[vi]=Mô tả UA (NN trên Mac PPC) +Name[wa]=Discrijhaedje di l' idintité do betchteu (NN so Mac PPC) +Name[xh]=UADescription (NN kwi Mac PPC) +Name[zh_CN]=用户代理描述 (运行于 Mac PPC 的 NN) +Name[zh_TW]=使用者代理描述 (NN on Mac PPC) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/4.76 (Macintosh; U; PPC) +X-KDE-UA-NAME=Netscape Navigator +X-KDE-UA-VERSION=4.76 +X-KDE-UA-SYSNAME=Mac +X-KDE-UA-SYSRELEASE=PPC + + diff --git a/kcontrol/kio/uasproviders/ns71oncurrent.desktop b/kcontrol/kio/uasproviders/ns71oncurrent.desktop new file mode 100644 index 000000000..6dc158c57 --- /dev/null +++ b/kcontrol/kio/uasproviders/ns71oncurrent.desktop @@ -0,0 +1,72 @@ +[Desktop Entry] +Name=UADescription (Netscape 7.1 on current) +Name[af]=UA-beskrywing (Netscape 7.1 op huidige bedryfstelsel) +Name[az]=İA İzahatı (Netscape 7.1 on current) +Name[be]=UADescription (NN 3.01 на гэтай сістэме) +Name[bs]=UADescription (Netscape 7.1 na trenutnom) +Name[ca]=Descripció UA (Netscape 7.1 a l'actual) +Name[cs]=Popis agenta (Netscape 7.1 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (Netscape 7.1) +Name[da]=UADescription (Netscape 7.1 på denne) +Name[de]=Browserkennung (Netscape 7.1 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Netscape 7.1 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Netskapo 7.1 sub nuna) +Name[es]=UADescription (Netscape 7.1 en actual) +Name[et]=UADescription (Selles masinas töötav Netscape 7.1) +Name[eu]=UA azalpena (Netscape 7.1 unekoan) +Name[fa]=UADescription (Netscape 7.1 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Netscape 7.1 nykyisellä) +Name[fr]=Identité du navigateur (Netscape 7.1 sous le système actuel) +Name[fy]=GA-omskriuwing (Netscape 7.1 op aktive) +Name[ga]=UADescription (Netscape 7.1 ar an gcóras reatha) +Name[gl]=UADescription (Netscape 7.1 no actual) +Name[he]=UADescription (Netscape 7.1 בנוכחי) +Name[hi]=यूए-डिस्क्रिप्शन (मौजूदा में नेटस्केप 7.1) +Name[hr]=UADescription (Netscape 7.1 na trenutnom) +Name[hu]=Böngészőtípus (Netscape 7.1) +Name[id]=UADescription (Netscape 7.1) +Name[is]=UAD strengur (Netscape 7.1 á núverandi) +Name[it]=DescrizioneUA (Netscape 7.1 su sistema attuale) +Name[ka]=UADescription (Netscape 7.1 მიმდინარე სისტემაში) +Name[kk]=UADescription (Netscape 7.1 осы орында) +Name[km]=UADescription (Netscape 7.1 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 넷스케이프 7.1) +Name[lt]=Naudotojo agento aprašymas (Netscape 7.1 ir esama) +Name[lv]=UAApraksts (NN 7.1 uz tekošā) +Name[mk]=UADescription (Netscape 7.1 на тековно) +Name[mt]=UADescription (NN 3.01 fuq kurrenti) +Name[nb]=Brukeragent (Netscape 7.1 herifra) +Name[nds]=UA-Beschrieven (Netscape 7.1 op dit Systeem) +Name[ne]=UA वर्णन (हाल नेटस्केप ७.१) +Name[nl]=GA-beschrijving (Netscape 7.1 op current) +Name[nn]=Brukaragent (Netscape 7.1 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ Netscape 7.1) +Name[pl]=Opis przeglądarki użytkownika (Netscape 7.1 na bieżącym systemie) +Name[pt]=UADescription (Netscape 7.1 no sistema actual) +Name[pt_BR]=Descrição (Netscape 7.1 no sistema atual) +Name[ro]=Descriere UA (Netscape 7.1 pentru sistemul de operare curent) +Name[ru]=UADescription (Netscape 7.1 на текущей системе) +Name[rw]=UADescription (Netscape 7.1 ku igezweho) +Name[se]=UA-čilgehus (Netscape 7.1 dán mašiinnas) +Name[sl]=UAOpis (Netscape 7.1 na trenutnem) +Name[sr]=UADescription (Netscape 7.1 на тренутном) +Name[sr@Latn]=UADescription (Netscape 7.1 na trenutnom) +Name[sv]=AA-beskrivning (Netscape 7.1 på aktuell) +Name[ta]=UAவிவரம் (நடப்பில் 3.01 நெட்ஸ்கேப்) +Name[tg]=UADescription (Системаи ҷорӣ Netscape 7.1) +Name[th]=UADescription (เน็ตสเคป 7.1 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (Netscape 7.1) +Name[tt]=UADescription (Netscape 7.1, şul uq astında) +Name[uz]=UADescription (joriy bilan Netscape 7.1) +Name[uz@cyrillic]=UADescription (жорий билан Netscape 7.1) +Name[vi]=Mô tả UA (đang dùng Netscape 7.1) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Netscape 7.1 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 Netscape 7.1) +Name[zh_TW]=使用者代理描述 (Netscape 7.1 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appSysName appMachineType; en-CA; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) +X-KDE-UA-NAME=Netscape +X-KDE-UA-VERSION=7.1 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/ns71onwinnt51.desktop b/kcontrol/kio/uasproviders/ns71onwinnt51.desktop new file mode 100644 index 000000000..73cfb9d8a --- /dev/null +++ b/kcontrol/kio/uasproviders/ns71onwinnt51.desktop @@ -0,0 +1,74 @@ +[Desktop Entry] +Name=UADescription (Netscape 7.1 on XP) +Name[af]=UA-beskrywing (Netscape 7.1 op XP) +Name[az]=İA İzahatı (XP üstündə Netscape 7.1) +Name[be]=UADescription (Netscape 7.1 на XP) +Name[br]=UADescription (Netscape 7.1 war XP) +Name[bs]=UADescription (Netscape 7.1 na XP) +Name[ca]=Descripció UA (Netscape 7.1 a XP) +Name[cs]=Popis agenta (Netscape 7.1 na XP) +Name[csb]=Òpis programë brëkòwnika (Netscape 7.1 na Windows XP) +Name[da]=UADescription (Netscape 7.1 på XP) +Name[de]=Browserkennung (Netscape 7.1 unter Windows XP) +Name[el]=Περιγραφή UA (Netscape 7.1 σε Win XP) +Name[eo]=UA-Priskribo (Netskapo 7.1 sub Vindozo XP) +Name[es]=UADescription (Netscape 7.1 en XP) +Name[et]=UADescription (Netscape 7.1 Win XP platvormil) +Name[eu]=UA azalpena (Netscape 7.1 XPn) +Name[fa]=UADescription (Netscape 7.1 در XP) +Name[fi]=Käyttäjäagenttikuvaus (Netscape 7.1 Win XP:llä) +Name[fr]=Identité du navigateur (Netscape 7.1 sous Windows XP) +Name[fy]=GA-omskriuwing (Netscape 7.1 op XP) +Name[ga]=UADescription (Netscape 7.1 ar XP) +Name[gl]=UADescription (Netscape 7.1 en Win XP) +Name[he]=UADescription (Netscape 7.1 XPב־) +Name[hi]=यूए-डिस्क्रिप्शन (एक्सपी में नेटस्केप 7.1) +Name[hr]=UADescription (Netscape 7.1 na XP) +Name[hu]=Böngészőtípus (Netscape 7.1 Windows XP) +Name[id]=UADescription (Netscape 7.1 di XP) +Name[is]=UAD strengur (Netscape 7.1 á XP) +Name[it]=DescrizioneUA (Netscape 7.1 su XP) +Name[ka]=UADescription (Netscape 7.1 XP-ში) +Name[kk]=UADescription (Netscape 7.1 / XP) +Name[km]=UADescription (Netscape 7.1 នៅ​លើ XP) +Name[ko]=UADescription (윈도 XP의 넷스케이프 7.1) +Name[lt]=Naudotojo agento aprašymas (Netscape 7.1 ir Windows XP) +Name[lv]=UAApraksts (Netscape 7.1 uz XP) +Name[mk]=UADescription (Netscape 7.1 на XP) +Name[mt]=UADescription (IE 6.0 fuq Win XP) +Name[nb]=Brukeragent (Netscape 7.1 på XP) +Name[nds]=UA-Beschrieven (Netscape 7.1 op XP) +Name[ne]=UA वर्णन (XP मा नेटस्केप ७.१) +Name[nl]=GA-beschrijving (Netscape 7.1 op XP) +Name[nn]=Brukaragent (Netscape 7.1 på XP) +Name[pa]=UADescription (XP 'ਤੇ Netscape 7.1) +Name[pl]=Opis przeglądarki użytkownika (Netscape 7.1 na Windows XP) +Name[pt]=UADescription (Netscape 7.1 no XP) +Name[pt_BR]=Descrição (Netscape 7.1 no XP) +Name[ro]=Descriere UA (Netscape 7.1 pentru Win XP) +Name[ru]=UADescription (Netscape 7.1 на XP) +Name[rw]=UADescription (Netscape 7.1 kuri XP) +Name[se]=UA-čilgehus (Netscape 7.1 on XP) +Name[sl]=UAopis (Netscape 7.1 na Windows XP) +Name[sr]=UADescription (Netscape 7.1 на XP) +Name[sr@Latn]=UADescription (Netscape 7.1 na XP) +Name[sv]=AA-beskrivning (Netscape 7.1 på XP) +Name[ta]=UAவிவரம் ( XPல் நெட்ஸ்கேப் 7.1 ) +Name[tg]=UADescription (Netscape 7.1 дар асоси XP) +Name[th]=UADescription (เน็ตสเคป 7.1 บน XP) +Name[tr]=UA Tanımı (XP üzerinde Netscape 6.0) +Name[tt]=UADescription (Netscape 7.1, XP astında) +Name[uz]=UADescription (Windows XP bilan Netscape 7.1) +Name[uz@cyrillic]=UADescription (Windows XP билан Netscape 7.1) +Name[vi]=Mô tả UA (Netscape 7.1 trên Win XP) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Netscape 7.1 so XP) +Name[zh_CN]=用户代理描述 (运行于 Win XP 的 Netscape 7.1) +Name[zh_TW]=使用者代理描述 (Netscape 7.1 on XP) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=NN +X-KDE-UA-FULL=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-CA; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) +X-KDE-UA-NAME=Netscape +X-KDE-UA-VERSION=7.1 +X-KDE-UA-SYSNAME=Windows +X-KDE-UA-SYSRELEASE=XP diff --git a/kcontrol/kio/uasproviders/op403onwinnt4.desktop b/kcontrol/kio/uasproviders/op403onwinnt4.desktop new file mode 100644 index 000000000..96111efa9 --- /dev/null +++ b/kcontrol/kio/uasproviders/op403onwinnt4.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Name=UADescription (Opera 4.03 on NT) +Name[af]=UA-beskrywing (Opera 4.03 op NT) +Name[be]=UADescription (Opera 4.03 на NT) +Name[br]=UADescription (Opera 4.03 war NT) +Name[bs]=UADescription (Opera 4.03 na NT) +Name[ca]=Descripció de AU (Opera 4.03 en NT) +Name[cs]=Popis agenta (Opera 4.03 na NT) +Name[csb]=Òpis programë brëkòwnika (Opera 4.03 na NT) +Name[cy]=UADisgrifiad (Opera 4.03 ar NT) +Name[da]=Brugeragentbeskrivelse (Opera 4.03 på NT) +Name[de]=Browserkennung (Opera 4.03 unter Windows NT) +Name[el]=Περιγραφή UA (Opera 4.03 σε NT) +Name[eo]=UA-Priskribo (Opera 4.03 sub NT) +Name[es]=Descripción de AU (Opera 4.03 en NT) +Name[et]=UADescription (Opera 4.03 WinNT platvormil) +Name[eu]=UA azalpena (Opera 4.03 NT-n) +Name[fa]=UADescription (Opera 4.03 در NT) +Name[fi]=Käyttäjäagenttikuvaus (Opera 4.03 NT:llä) +Name[fr]=Identité du navigateur (Opera 4.03 sous Windows NT) +Name[fy]=GA-omskriuwing (Opera 4.03 op NT) +Name[ga]=UADescription (Opera 4.03 ar NT) +Name[gl]=UADescription (Opera 4.03 en NT) +Name[he]=UADescription (NTב־ Opera 4.03) +Name[hi]=यूएडी-डिस्क्रिप्शन (ओपेरा 4.03 एनटी पर) +Name[hr]=UADescription (Opera 4.03 na NT) +Name[hu]=Böngészőtípus (Opera 4.03, Win NT) +Name[id]=UADescription (Opera 4.03 di NT) +Name[is]=UAD strengur (Opera 4.03 on NT) +Name[it]=DescrizioneUA (Opera 4.03 su NT) +Name[ka]=UADescription (Opera 4.03 на NT) +Name[kk]=UADescription (Opera 4.03 / NT) +Name[km]=UADescription (Opera 4.03 នៅ​លើ NT) +Name[ko]=UADescription (윈도 NT의 Opera 4.03) +Name[lt]=Naudotojo agento aprašymas (Opera 4.03ir NT) +Name[lv]=UAApraksts (Opera 4.03 uz NT) +Name[mk]=UADescription (Opera 4.03 на NT) +Name[mn]=UserAgent-Тодорхойлолт (Opera 4.03 on NT) +Name[mt]=UADescription (Opera 4.03 fuq NT) +Name[nb]=Brukeragent (Opera 4.03 på NT) +Name[nds]=UA-Beschrieven (Opera 4.03 op NT) +Name[ne]=UA वर्णन (NT मा Opera 4.03) +Name[nl]=GA-beschrijving (Opera 4.03 op NT) +Name[nn]=Brukaragent (Opera 4.03 på NT) +Name[nso]=UAThlaloso (Opera 4.03 go NT) +Name[pa]=UADescription (NT 'ਤੇ ਓਪੇਰਾ 4.03) +Name[pl]=Opis przeglądarki użytkownika (Opera 4.03 na NT) +Name[pt]=UADescription (Opera 4.03 em NT) +Name[pt_BR]=Descrição (Opera 4.03 no NT) +Name[ro]=Descriere UA (Opera 4.03 pentru NT) +Name[ru]=UADescription (Opera 4.03 на NT) +Name[rw]=UADescription (Opera 4.03 kuri NT) +Name[se]=UA-čilgehus (Opera 4.03 ja NT) +Name[sk]=Popis agenta (Opera 4.03 na NT) +Name[sl]=UAOpis (Opera 4.03 na Windows NT) +Name[sr]=UADescription (Opera 4.03 на NT-у) +Name[sr@Latn]=UADescription (Opera 4.03 na NT-u) +Name[sv]=AA-beskrivning (Opera 4.03 på NT) +Name[ta]=UAவிவரம்(Opera 4.03 on NT) +Name[tg]=ТавзеҳиUA (Opera 4.03 ба NT) +Name[th]=UADescription (โอเปร่า 4.03 บน NT) +Name[tr]=UA Tanımı (NT üzerinde Opera 4.03) +Name[tt]=UADescription (Opera 4.03, şul uq astında) +Name[uk]=UADescription (Opera 4.03 на NT) +Name[uz]=UADescription (NT bilan Opera 4.03) +Name[uz@cyrillic]=UADescription (NT билан Opera 4.03) +Name[ven]=Thalutshedzo ya UA (Opera 4.03 kha NT) +Name[vi]=Mô tả UA (Opera 4.03 trên NT) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Opera 4.03 so NT) +Name[xh]=UADescription (Opera 4.03 kwi NT) +Name[zh_CN]=用户代理描述 (运行于 NT 的 Opera 4.03) +Name[zh_TW]=使用者代理描述 (Opera 4.03 on NT) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=OPR +X-KDE-UA-FULL=Opera/4.03 (Windows NT 4.0; U) +X-KDE-UA-NAME=Opera +X-KDE-UA-VERSION=4.03 +X-KDE-UA-SYSNAME=Windows NT +X-KDE-UA-SYSRELEASE=4.0 diff --git a/kcontrol/kio/uasproviders/op75oncurrent.desktop b/kcontrol/kio/uasproviders/op75oncurrent.desktop new file mode 100644 index 000000000..ecd498f60 --- /dev/null +++ b/kcontrol/kio/uasproviders/op75oncurrent.desktop @@ -0,0 +1,69 @@ +[Desktop Entry] +Name=UADescription (Opera 7.53 on current) +Name[af]=UA-beskrywing (Opera 7.53 op huidige bedryfstelsel) +Name[be]=UADescription (Opera 7.53 на гэтай сістэме) +Name[bs]=UADescription (Opera 7.53 na trenutnom) +Name[ca]=Descripció UA (Opera 7.53 a l'actual) +Name[cs]=Popis agenta (Opera 7.53 na aktuálním) +Name[csb]=Òpis programë brëkòwnika (Opera 7.53) +Name[da]=UADescription (Opera 7.53 på denne) +Name[de]=Browserkennung (Opera 7.53 unter aktuellem Betriebssystem) +Name[el]=Περιγραφή UA (Opera 7.53 στο τρέχον σύστημα) +Name[eo]=UA-Priskribo (Opera 7.53 sub nuna) +Name[es]=UADescription (Opera 7.53 en actual) +Name[et]=UADescription (Selles masinas töötav Opera 7.53) +Name[eu]=UA azalpena (Opera 7.53 unekoan) +Name[fa]=UADescription (Opera 7.53 در حال حاضر) +Name[fi]=Käyttäjäagenttikuvaus (Opera 7.53 nykyisellä) +Name[fr]=Identité du navigateur (Opera 7.53 sous le système actuel) +Name[fy]=GA-omskriuwing (Opera 7.53 op aktive) +Name[ga]=UADescription (Opera 7.53 ar an gcóras reatha) +Name[gl]=UADescription (Opera 7.53 no actual) +Name[hr]=UADescription (Opera 7.53 na trenutnom) +Name[hu]=Böngészőtípus (Opera 7.53) +Name[id]=UADescription (Opera 7.53) +Name[is]=UAD strengur (Opera 7.53 á núverandi) +Name[it]=DescrizioneUA (Opera 7.53 su sistema attuale) +Name[ka]=UADescription (Opera 7.53 მიმდინარე სისტემაში) +Name[kk]=UADescription (Opera 7.53 осы орында) +Name[km]=UADescription (Opera 7.53 បច្ចុប្បន្ន) +Name[ko]=UADescription (현재 플랫폼의 Opera 8.5) +Name[lt]=Naudotojo agento aprašymas (Opera 7.53 ir esama) +Name[lv]=UAApraksts (Opera 7.53 uz tekošā) +Name[mk]=UADescription (Opera 7.53 на тековно) +Name[nb]=Brukeragent (Opera 7.53 herifra) +Name[nds]=UA-Beschrieven (Opera 7.53 op dit Systeem) +Name[ne]=UA वर्णन (हाल Opera 7.53) +Name[nl]=GA-beschrijving (Opera 7.53 op huidige) +Name[nn]=Brukaragent (Opera 7.53 herifrå) +Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ ਓਪੇਰਾ 7.53) +Name[pl]=Opis przeglądarki użytkownika (Opera 7.53 na bieżącym systemie) +Name[pt]=UADescription (Opera 7.53 no sistema actual) +Name[pt_BR]=Descrição (Opera 7.53 no sistema atual) +Name[ro]=Descriere UA (Opera 7.53 pentru sistemul de operare curent) +Name[ru]=UADescription (Opera 7.53 на текущей системе) +Name[rw]=UADescription (Opera 7.53 ku igezweho) +Name[se]=UA-čilgehus (Opera 7.53 dán mašiinnas) +Name[sl]=UAOpis (Opera 7.53 na trenutnem) +Name[sr]=UADescription (Opera 7.53 на тренутном) +Name[sr@Latn]=UADescription (Opera 7.53 na trenutnom) +Name[sv]=AA-beskrivning (Opera 7.53 på aktuell) +Name[ta]=UAவிவரம் (நடப்பில் 7.53 ஓபெரா) +Name[tg]=UADescription (Системаи ҷорӣ Opera 7.53) +Name[th]=UADescription (โอเปร่า 7.53 บนระบบปัจจุบัน) +Name[tr]=UA Tanımı (bulunulanda Opera 7.53) +Name[tt]=UADescription (Opera 7.53, şul uq astında) +Name[uk]=UADescription (Opera 7.53 на поточній) +Name[uz]=UADescription (joriy bilan Opera 7.53) +Name[uz@cyrillic]=UADescription (жорий билан Opera 7.53) +Name[vi]=Mô tả UA (đang dùng Opera 7.53) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Opera 7.53 sol ci do moumint) +Name[zh_CN]=用户代理描述 (运行于本机的 Opera 7.53) +Name[zh_TW]=使用者代理描述 (Opera 7.53 on current) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=OPR +X-KDE-UA-FULL=Opera/7.53 (appPlatform; appSysName appMachineType; U) [appLanguage] +X-KDE-UA-NAME=Opera +X-KDE-UA-VERSION=7.53 +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/safari12.desktop b/kcontrol/kio/uasproviders/safari12.desktop new file mode 100644 index 000000000..b6fd23d15 --- /dev/null +++ b/kcontrol/kio/uasproviders/safari12.desktop @@ -0,0 +1,73 @@ +[Desktop Entry] +Name=UADescription (Safari 1.2 on MacOS X) +Name[af]=UA-beskrywing (Safari 1.2 op MacOS X) +Name[be]=UADescription (Safari 1.2 на MacOS X) +Name[br]=UADescription (Safari 1.2 war MacOS X) +Name[bs]=UADescription (Safari 1.2 na MacOS X) +Name[ca]=Descripció UA (Safari 1.2 a MacOS X) +Name[cs]=Popis agenta (Safari 1.2 na MacOS X) +Name[csb]=Òpis programë brëkòwnika (Safari 1.2 na MacOS X) +Name[da]=UADescription (Safari 1.2 på MacOS X) +Name[de]=Browserkennung (Safari 1.2 unter MacOS X) +Name[el]=Περιγραφή UA (Safari 1.2 σε MacOS X) +Name[eo]=UA-Priskribo (Safari 1.2 sub MacOS X) +Name[es]=UADescription (Safari 1.2 en MacOS X) +Name[et]=UADescription (Safari 1.2 MacOS X platvormil) +Name[eu]=UADescription (Safari 1.2 MacOS Xn) +Name[fa]=UADescription (Safari 1.2 در MacOS X) +Name[fi]=Käyttäjäagenttikuvaus (Safari 1.2 MacOS X:llä) +Name[fr]=Identité du navigateur (Safari 1.2 sous MacOS X) +Name[fy]=GA-omskriuwing (Safari 1.2 op MacOS X) +Name[ga]=UADescription (Safari 1.2 ar MacOS X) +Name[gl]=UADescription (Safari 1.2 en MacOS X) +Name[he]=UADescription (Safari על MacOS X) +Name[hr]=UADescription (Safari 1.2 na MacOS X) +Name[hu]=Böngészőtípus (Safari 1.2, MacOS X) +Name[id]=UADescription (Safari 1.2 di MacOS X) +Name[is]=UAD strengur (Safari 1.2 á MacOS X) +Name[it]=DescrizioneUA (Safari 1.2 su MacOS X) +Name[ka]=UADescription (Safari 1.2 на Mac MacOS X) +Name[kk]=UADescription (Safari 1.2 / MacOS X) +Name[km]=UADescription (Safari 1.2 នៅ​លើ MacOS X) +Name[ko]=UADescription (Mac OS X의 Safari 1.2) +Name[lt]=Naudotojo agento aprašymas (Safari 1.2 ir MacOS X) +Name[lv]=UAApraksts (Safari 1.2 uz MacOS X) +Name[mk]=UADescription (Safari 1.2 на MacOS X) +Name[nb]=Brukeragent (Safari 1.2 på MacOS X) +Name[nds]=UA-Beschrieven (Safari 1.2 op MacOS X) +Name[ne]=UA वर्णन (MacOS X मा Safari 1.2) +Name[nl]=GA-beschrijving (Safari 1.2 op MacOS X) +Name[nn]=Brukaragent (Safari 1.2 på MacOS X) +Name[pa]=UADescription (MacOS X 'ਤੇ Safari 1.2) +Name[pl]=Opis przeglądarki użytkownika (Safari 1.2 na MacOS X) +Name[pt]=UADescription (Safari 1.2 no MacOS X) +Name[pt_BR]=Descrição (Safari 1.2 no MacOS X) +Name[ro]=Descriere UA (Safari 1.2 pentru MacOS X) +Name[ru]=UADescription (Safari 1.2 на Mac MacOS X) +Name[rw]=UADescription (Safari 1.2 kuri MacOS X) +Name[se]=UA-čilgehus (Safari 1.2 ja MacOS X) +Name[sl]=UAOpis (Safari 1.2 na MacOS X) +Name[sr]=UADescription (Safari 1.2 на MacOS-у X) +Name[sr@Latn]=UADescription (Safari 1.2 na MacOS-u X) +Name[sv]=AA-beskrivning (Safari 1.2 på MacOS X) +Name[ta]=UAவிவரம் (Safari 1.2 on MacOS X) +Name[tg]=UADescription (Safari 1.2 дар асоси Mac MacOS X) +Name[th]=UADescription (ซาฟารี 1.2 บน MacOS X) +Name[tr]=UA Tanımı (MacOS X'de Safari 1.2) +Name[tt]=UADescription (Safari 1.2, MacOS X astında) +Name[uk]=UADescription (Safari 1.2 на MacOS X) +Name[uz]=UADescription (MacOS X bilan Safari 1.2) +Name[uz@cyrillic]=UADescription (MacOS X билан Safari 1.2) +Name[vi]=Mô tả UA (Safari 1.2 trên MacOS X) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Safari 1.2 so MacOS X) +Name[zh_CN]=用户代理描述 (运行于 MacOS X 的 Safari 1.2) +Name[zh_TW]=使用者代理描述 (Safari 1.2 on MacOS X) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=SAF +X-KDE-UA-FULL=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; appLanguage) AppleWebKit/125.5.5 (KHTML, like Gecko) Safari/125.11 +X-KDE-UA-NAME=Safari +X-KDE-UA-VERSION=1.2.4 +X-KDE-UA-SYSNAME=Mac OS +X-KDE-UA-SYSRELEASE=X +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/safari20.desktop b/kcontrol/kio/uasproviders/safari20.desktop new file mode 100644 index 000000000..14f3a8883 --- /dev/null +++ b/kcontrol/kio/uasproviders/safari20.desktop @@ -0,0 +1,59 @@ +[Desktop Entry] +Name=UADescription (Safari 2.0 on MacOS X) +Name[bg]=UADescription (Safari 2.0 на MacOS X) +Name[ca]=Descripció UA (Safari 2.0 a MacOS X) +Name[cs]=Popis UA (Safari 2.0 na MacOS X) +Name[csb]=Òpis programë brëkòwnika (Safari 2.0 na MacOS X) +Name[da]=UADescription (Safari 2.0 på MacOS X) +Name[de]=Browserkennung (Safari 2.0 unter MacOS X) +Name[el]=Περιγραφή UA (Safari 2 σε MacOS X) +Name[eo]=UA-Priskribo (Safari 2.0 sub MacOS X) +Name[es]=UADescription (Safari 2.0 en MacOS X) +Name[et]=UADescription (Safari 2.0 MacOS X platvormil) +Name[fi]=Käyttäjäagenttikuvaus (Safari 2.0 MacOS X:llä) +Name[fr]=Identité du navigateur (Safari 2.0 sous MacOS X) +Name[fy]=GA-omskriuwing (Safari 2.0 op MacOS X) +Name[gl]=UADescription (Safari 2.0 en MacOS X) +Name[he]=UADescription (Safari 2.0 על MacOS X) +Name[hr]=UADescription (Safari 2.0 na MacOS X) +Name[hu]=Böngészőtípus (Safari 2.0, MacOS X) +Name[id]=UADescription (Safari 2.0 di MacOS X) +Name[is]=UAD strengur (Safari 2.0 á MacOS X) +Name[it]=DescrizioneUA (Safari 2.0 su MacOS X) +Name[kk]=UADescription (Safari 2.0 / MacOS X) +Name[km]=UADescription (Safari 2.0 នៅ​លើ MacOS X) +Name[ko]=UADescription (Mac OS X의 Safari 2.0) +Name[lt]=Naudotojo agento aprašymas (Safari 2.0 ir MacOS X) +Name[nb]=Brukeragent (Safari 2.0 på MacOS X) +Name[nds]=UA-Beschrieven (Safari 2.0 op MacOS X) +Name[ne]=यूए वर्णन (MacOS X मा Safari 1.2) +Name[nl]=GA-beschrijving (Safari 2.0 op MacOS X) +Name[nn]=Brukaragent (Safari 2.0 på MacOS X) +Name[pa]=UADescription (MacOS X ਉੱਤੇ ਸਫ਼ਾਰੀ 2.0) +Name[pl]=Opis przeglądarki użytkownika (Safari 2.0 na MacOS X) +Name[pt]=UADescription (Safari 2.0 no MacOS X) +Name[pt_BR]=UADescription (Safari 2.0 no MacOS X) +Name[ro]=Descriere UA (Safari 2.0 pentru MacOS X) +Name[ru]=UADescription (Safari 2.0 на Mac MacOS X) +Name[sl]=UAOpis (Safari 2.0 na MacOS X) +Name[sr]=UADescription (Safari 2.0 на MacOS-у X) +Name[sr@Latn]=UADescription (Safari 2.0 na MacOS-u X) +Name[sv]=AA-beskrivning (Safari 2.0 på MacOS X) +Name[tg]=UADescription (Safari 2.0 дар асоси Mac MacOS X) +Name[th]=UADescription (ซาฟารี 2.0 บน MacOS X) +Name[tr]=UA Tanımı (MacOS X'de Safari 1.2) +Name[uk]=UADescription (Safari 2.0 на MacOS X) +Name[uz]=UADescription (MacOS X bilan Safari 2.0) +Name[uz@cyrillic]=UADescription (MacOS X билан Safari 2.0) +Name[vi]=Mô tả UA (Safari 2.0 trên MacOS X) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Safari 2.0 so MacOS X) +Name[zh_TW]=使用者代理描述 (Safari 2.0 on MacOS X) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=SAF +X-KDE-UA-FULL=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; appLanguage) AppleWebKit/412 (KHTML, like Gecko) Safari/412 +X-KDE-UA-NAME=Safari +X-KDE-UA-VERSION=2.0 +X-KDE-UA-SYSNAME=Mac OS +X-KDE-UA-SYSRELEASE=X +X-KDE-UA-DYNAMIC-ENTRY=1 diff --git a/kcontrol/kio/uasproviders/w3moncurrent.desktop b/kcontrol/kio/uasproviders/w3moncurrent.desktop new file mode 100644 index 000000000..e2b97276c --- /dev/null +++ b/kcontrol/kio/uasproviders/w3moncurrent.desktop @@ -0,0 +1,50 @@ +[Desktop Entry] +Name=UADescription (w3m 0.1.9) +Name[af]=UA-beskrywing (w3m 0.1.9) +Name[ca]=Descripció de AU (w3m 0.1.9) +Name[cs]=Popis agenta (w3m 0.1.9) +Name[csb]=Òpis programë brëkòwnika (w3m 0.1.9) +Name[cy]=UADisgrifiad (w3m 0.1.9) +Name[da]=Brugeragentbeskrivelse (w3m 0.1.9) +Name[de]=Browserkennung (w3m 0.1.9) +Name[el]=Περιγραφή UA (w3m 0.1.9) +Name[eo]=UA-Priskribo (w3m 0.1.9) +Name[es]=Descripción de AU (w3m 0.1.9) +Name[eu]=UA azalpena (w3m 0.1.9) +Name[fi]=Käyttäjäagenttikuvaus (w3m 0.1.9) +Name[fr]=Identité du navigateur (w3m 0.1.9) +Name[fy]=GA-omskriuwing (w3m 0.1.9) +Name[hi]=यूएडी-डिस्क्रिप्शन (डब्ल्यू3एम 0.1.9) +Name[hu]=Böngészőtípus (w3m 0.1.9) +Name[is]=UAD strengur (w3m 0.1.9) +Name[it]=DescrizioneUA (w3m 0.1.9) +Name[lt]=Naudotojo agento aprašymas (w3m 0.1.9) +Name[lv]=UAApraksts (w3m 0.1.9) +Name[mn]=UserAgent-Тодорхойлолт (w3m 0.1.9) +Name[nb]=Brukeragent (w3m 0.1.9) +Name[nds]=UA-Beschrieven (w3m 0.1.9) +Name[ne]=UA वर्णन (w3m 0.1.9) +Name[nl]=GA-beschrijving (w3m 0.1.9) +Name[nn]=Brukaragent (w3m 0.1.9) +Name[nso]=UAThlaloso (w3m 0.1.9) +Name[pl]=Opis przeglądarki użytkownika (w3m 0.1.9) +Name[pt_BR]=Descrição (w3m 0.1.9) +Name[ro]=Descriere UA (w3m 0.1.9) +Name[se]=UA-čilgehus (w3m 0.1.9) +Name[sk]=Popis agenta (w3m 0.1.9) +Name[sl]=UAOpis (w3m 0.1.9) +Name[sv]=AA-beskrivning (w3m 0.1.9) +Name[ta]=UAவிவரம் (w3m 0.1.9) +Name[tg]=ТавзеҳиUA (w3m 0.1.9) +Name[tr]=UA Tanımı (w3m 0.1.9) +Name[ven]=Thalutshedzo ya UA (w3m 0.1.9) +Name[vi]=Mô tả UA (w3m 0.1.9) +Name[wa]=Discrijhaedje di l' idintité do betchteu (w3m 0.1.9) +Name[zh_CN]=用户代理描述 (w3m 0.1.9) +Name[zh_TW]=使用者代理描述 (w3m 0.1.9) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MISC +X-KDE-UA-FULL=w3m/0.1.9 +X-KDE-UA-NAME=w3m +X-KDE-UA-VERSION=0.1.9 diff --git a/kcontrol/kio/uasproviders/wgetoncurrent.desktop b/kcontrol/kio/uasproviders/wgetoncurrent.desktop new file mode 100644 index 000000000..0f2da9fb9 --- /dev/null +++ b/kcontrol/kio/uasproviders/wgetoncurrent.desktop @@ -0,0 +1,50 @@ +[Desktop Entry] +Name=UADescription (Wget 1.5.3) +Name[af]=UA-beskrywing (Wget 1.5.3) +Name[ca]=Descripció de AU (Wget 1.5.3) +Name[cs]=Popis agenta (Wget 1.5.3) +Name[csb]=Òpis programë brëkòwnika (Wget 1.5.3) +Name[cy]=UADisgrifiad (Wget 1.5.3) +Name[da]=Brugeragentbeskrivelse (Wget 1.5.3) +Name[de]=Programmkennung (Wget 1.5.3) +Name[el]=Περιγραφή UA (Wget 1.5.3) +Name[eo]=UA-Priskribo (Wget 1.5.3) +Name[es]=Descripción de AU (Wget 1.5.3) +Name[eu]=UA azalpena (Wget 1.5.3) +Name[fi]=Käyttäjäagenttikuvaus (Wget 1.5.3) +Name[fr]=Identité du navigateur (Wget 1.5.3) +Name[fy]=GA-omskriuwing (Wget 1.5.3) +Name[hi]=यूएडी-डिस्क्रिप्शन (डब्ल्यूगेट 1.5.3) +Name[hu]=Böngészőtípus (Wget 1.5.3) +Name[is]=UAD strengur (Wget 1.5.3) +Name[it]=DescrizioneUA (Wget 1.5.3) +Name[lt]=Naudotojo agento aprašymas (Wget 1.5.3) +Name[lv]=UAApraksts (Wget 1.5.3) +Name[mn]=UserAgent-Тодорхойлолт (Wget 1.5.3) +Name[nb]=Brukeragent (Wget 1.5.3) +Name[nds]=UA-Beschrieven (Wget 1.5.3) +Name[ne]=UA वर्णन (Wget 1.5.3) +Name[nl]=GA-beschrijving (Wget 1.5.3) +Name[nn]=Brukaragent (Wget 1.5.3) +Name[nso]=UAThlaloso (Wget 1.5.3) +Name[pl]=Opis przeglądarki użytkownika (Wget 1.5.3) +Name[pt_BR]=Descrição (Wget 1.5.3) +Name[ro]=Descriere UA (Wget 1.5.3) +Name[se]=UA-čilgehus (Wget 1.5.3) +Name[sk]=Popis agenta (Wget 1.5.3) +Name[sl]=UAOpis (Wget 1.5.3) +Name[sv]=AA-beskrivning (Wget 1.5.3) +Name[ta]=UAவிவரம் (Wget 1.5.3) +Name[tg]=ТавзеҳиUA (Wget 1.5.3) +Name[tr]=UA Tanımı (Wget 1.5.3) +Name[ven]=Thalutshedzo ya UA (Wget 1.5.3) +Name[vi]=Mô tả UA (Wget 1.5.3) +Name[wa]=Discrijhaedje di l' idintité do betchteu (Wget 1.5.3) +Name[zh_CN]=用户代理描述 (Wget 1.5.3) +Name[zh_TW]=使用者代理描述 (Wget 1.5.3) +Type=Service +ServiceTypes=UserAgentStrings +X-KDE-UA-TAG=MISC +X-KDE-UA-FULL=Wget/1.5.3 +X-KDE-UA-NAME=Wget +X-KDE-UA-VERSION=1.5.3 diff --git a/kcontrol/kio/uninstall.desktop b/kcontrol/kio/uninstall.desktop new file mode 100644 index 000000000..e1e3e1732 --- /dev/null +++ b/kcontrol/kio/uninstall.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/kcontrol/kio/useragent.desktop b/kcontrol/kio/useragent.desktop new file mode 100644 index 000000000..e6d719872 --- /dev/null +++ b/kcontrol/kio/useragent.desktop @@ -0,0 +1,232 @@ +[Desktop Entry] +Type=Application +Icon=agent +Exec=kcmshell useragent +DocPath=kcontrol/useragent/index.html + + +X-KDE-Library=kio +X-KDE-FactoryName=useragent +X-KDE-ParentApp=kcontrol + +Name=Browser Identification +Name[af]=Stelsel identifisering +Name[ar]=تعريف المتصفح +Name[az]=Səyyah Tanıdılması +Name[be]=Ідэнтыфікацыя вандроўніка +Name[bg]=Идентификация +Name[bn]=ব্রাউজার সনাক্তকরণ +Name[br]=Anvelezh ar furcher +Name[bs]=Identifikacija browsera +Name[ca]=Identificació del navegador +Name[cs]=Identifikace prohlížeče +Name[csb]=Identifikacëjô przezérnika +Name[cy]=Enw'r Porwr +Name[da]=Browser-identifikation +Name[de]=Browserkennung +Name[el]=Ταυτοποίηση περιηγητή +Name[eo]=TTT-legila identeco +Name[es]=Identificación del navegador +Name[et]=Veebilehitseja identifikaator +Name[eu]=Arakatzailearen identifikazioa +Name[fa]=شناسایی مرورگر +Name[fi]=Selaimen tunnistus +Name[fr]=Identification du navigateur +Name[fy]=Blêder identifikaasje +Name[ga]=Aitheantas Brabhsálaithe +Name[gl]=Identificación do Navegador +Name[he]=זיהוי דפדפן +Name[hi]= ब्राउज़र पहचान +Name[hr]=Identifikacija preglednika +Name[hu]=Böngészőazonosító +Name[is]=Auðkenni vafra +Name[it]=Identificazione browser +Name[ja]=ブラウザ識別情報 +Name[ka]=ბრაუზერის ინდენტიფიკაცია +Name[kk]=Браузердің өз туралы хабарлауы +Name[km]=ការ​កំណត់​អត្តសញ្ញាណ​កម្មវិធី​រុករក +Name[ko]=브라우저 증명 +Name[lo]=ການແຈ້ງເຕືອນ +Name[lt]=Naršyklės identifikacija +Name[lv]=Pārlūka identifikācija +Name[mk]=Идентификација +Name[mn]=Хөтөч-Тодотгол +Name[ms]=Pengenalpastian Pelayar +Name[mt]=Identifikazzjoni tal-browser +Name[nb]=Nettleseridentifisering +Name[nds]=Nettkieker-Identiteet +Name[ne]=ब्राउजर पहिचान +Name[nl]=Browseridentificatie +Name[nn]=Nettlesaridentifikasjon +Name[nso]=Boitsibiso bja Seinyakisi +Name[pa]=ਝਲਕਾਰਾ ਪਛਾਣ +Name[pl]=Identyfikacja przeglądarki +Name[pt]=Identificação do Navegador +Name[pt_BR]=Identificação do Navegador +Name[ro]=Identificare navigator web +Name[ru]=Идентификация браузера +Name[rw]=Ikiranga Mucukumbuzi +Name[se]=Fierpmádatloganidentifikašuvdna +Name[sk]=Identifikácie prehliadača +Name[sl]=Identifikacija brskalnika +Name[sr]=Идентификација прегледача +Name[sr@Latn]=Identifikacija pregledača +Name[sv]=Webbläsaridentifikation +Name[ta]=உலாவி அடையாளம் +Name[tg]=Шиносоии тафсир +Name[th]=การแสดงตัวของบราวเซอร์ +Name[tr]=Web tarayıcı kimliği +Name[tt]=Browser Tanışması +Name[uk]=Ідентифікація навігатора +Name[ven]=U talusa ha burausu +Name[vi]=Nhận diện trình duyệt +Name[wa]=Inditifiaedje do betchteu +Name[xh]=Uchazo Lomkhangeli zincwadi +Name[zh_CN]=浏览器识别 +Name[zh_TW]=瀏覽器識別 +Name[zu]=Umazisi Womcingi + +Comment=Configure the way Konqueror reports itself +Comment[af]=Stel die manier waarop Konqueror homself raporteer op +Comment[ar]=إعداد طريقة التعريف لــ Konqueror عن نفسه +Comment[az]=Konqeror-un özünü tanıtmasını quraşdır +Comment[be]=Настаўленні спосабу прадстаўлення Konqueror у Сеціве +Comment[bg]=Настройване идентификацията на браузъра +Comment[bn]=কনকরার নিজেকে কিভাবে উপস্থাপন করবে তা কনফিগার করুন +Comment[bs]=Podesite kako se Konqueror identificira serveru +Comment[ca]=Configura com desitgeu que s'identifiqui el Konqueror +Comment[cs]=Zde můžete jak se bude Konqueror hlásit webovým serverům +Comment[csb]=Kònfigùracëjô ôrtu przedstôwianiô sã Konquerora +Comment[cy]=Ffurfweddu'r ffordd y mae Konqueror yn adrodd ei hun +Comment[da]=Indstil den måde Konquerors rapporterer sigselv +Comment[de]=Kennungen für Konqueror als Webbrowser festlegen +Comment[el]=Ρυθμίστε τον τρόπο με τον οποίο αναφέρεται το Konqueror +Comment[eo]=Agordo de Konkeranto-"user agent" +Comment[es]=Configuración del modo de autoidentificación de Konqueror +Comment[et]=Viisi, kuidas Konqueror endast teada annab, seadistamine +Comment[eu]=Konfiguratu nola azaltzen duen Konquerorrek bere burua +Comment[fa]=پیکربندی روشی که Konqueror گزارش خود را می‌دهد. +Comment[fi]=Vaihda Konquerorin esittäytymistapaa +Comment[fr]=Configuration de la manière dont Konqueror se signale +Comment[fy]=Hjir kinne jo fêststelle hoe Konqueror har by webtsjinners identifisearret +Comment[gl]=Configurar o xeito en que Konqueror informa sobre si mesmo +Comment[he]=שינוי הדרך שבה Konqueror מזדהה +Comment[hi]=कॉन्करर अपने आप को जिस रूप में रिपोर्ट करे वैसा कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje načina na koji se Konqueror prijavljuje +Comment[hu]=A Konqueror webböngésző kliensazonosítójának beállítása +Comment[is]=Stilla hvernig Konqueror kynnir sig +Comment[it]=Configura il modo in cui Konqueror si identifica presso i server +Comment[ja]=Konqueror のブラウザ識別情報を設定 +Comment[ka]=Konqueror-ის იდენტიფიკაციის კონფიგურირება +Comment[kk]=Konqueror өз туралы хабарлауын баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​របៀប​ដែល Konqueror រាយការណ៍​ខ្លួន​វា +Comment[ko]=Konqueror가 자신을 보고하는 방법 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງລັກສະນະແລະຄວາມຮູ້ສຶກໃນການໃຊ້ງານ Konqueror ໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite nustatyti, kaip Konqueror save identifikuoja +Comment[lv]=Norādiet kā Iekarotājs identificēs sevi +Comment[mk]=Конфигурирајте го начинот на кој Konqueror се пријавува себе си +Comment[mn]=Конкюрорыг вэб-Хөтөчөөр авах эсэхийг тогтоох +Comment[ms]=Konfigur cara Konqueror melaporkan dirinya +Comment[mt]=Ikkonfigura kif jirrapporta ruħu Konqueror +Comment[nb]=Tilpass Konquerors egenrapportering +Comment[nds]=Instellen, wat Konqueror seggt, woneem he is +Comment[ne]=कन्क्वेररले प्रतिवेदन गर्ने तरिकामा कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u bepalen hoe Konqueror zich bij webservers identificeert +Comment[nn]=Vel korleis Konqueror skal presentera seg sjølv +Comment[nso]=Beakanya ka mokgwa wo Konqueror e ipegago ka gona +Comment[pa]=ਕੋਨਕਿਉਰੋਰ ਦੇ ਖੁਦ ਨੂੰ ਜਾਣਕਾਰੀ ਦੇਣ ਦੇ ਢੰਗ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja sposobu przedstawiania się Konquerora +Comment[pt]=Configuração da forma como o Konqueror se apresenta +Comment[pt_BR]=Configura o modo como o Konqueror se mostra externamente +Comment[ro]=Configurează modul în care Konqueror se identifică la serverele de web +Comment[ru]=Настройка идентификации Konqueror +Comment[rw]=Kuboneza inzira Konqueror yitangaza +Comment[se]=Vállje mo Konqueror galgá iežas ovdanbuktit +Comment[sk]=Nastavenie identifikácie Konquerora +Comment[sl]=Nastavitev načina predstavljanja Konquerorja +Comment[sr]=Подешавање како Konqueror представља себе +Comment[sr@Latn]=Podešavanje kako Konqueror predstavlja sebe +Comment[sv]=Anpassa hur Konqueror identifierar sig +Comment[ta]=கான்கொரர் அறிக்கைகளை வழிகளை வடிவமை +Comment[tg]=Танзими идентификатсияи Konqueror +Comment[th]=ปรับแต่งการแสดงตัวของคอนเควอร์เรอร์ +Comment[tr]=Konqueror'ın raporlama sistemini yapılandır +Comment[tt]=Konqueror üz-üzen beldergän ısulın saylaw +Comment[uk]=Тут можна налаштувати ідентифікацію Konqueror +Comment[ven]=Dzudzanyani ndila ine Kongueror yadi vhiga ngayo +Comment[vi]=Cấu hình cách Konqueror tự báo cáo +Comment[wa]=Aponteye li manire ki Konqueror si prezinte +Comment[xh]=Qwalasela indlela i Konqueror ezichaza ngayo +Comment[zh_CN]=配置 Konqueror 的报告自己的方式 +Comment[zh_TW]=設定 Konqueror 回報自身狀況的方式 +Comment[zu]=Hlanganisela indlela i-Konqueror ezibika ngayo + +Keywords=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login +Keywords[af]=Gebruiker Agent,Browser,Internet,WWW,Network,agent,bindings,server,login +Keywords[ar]=عميل المستخدم,المتصفح,الشبكة العالمية,الشبكة,عميل,bindings,User Agent,Browser,Internet,WWW,Network,agent,bindings, server,login,خادم,دخول +Keywords[az]=İstifadəçi Vasitəsi,Səyyah,İnternet,WWW,Şəbəkə,giriş,verici,vasitə +Keywords[be]=Кліент,Вандроўнік,Сетка,Агент,сервер,уваход,сесія,User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login +Keywords[bg]=идентификация, клиент, потребителски, браузър, Интернет, агент, сайт, представяне, User Agent, Browser, Internet, WWW, Network, agent, bindings, server, login +Keywords[ca]=Agent d'usuari,Fullejador,Internet,WWW,Xarxa,agent,lligams,servidor,accés +Keywords[cs]=Uživatelský agent,Prohlížeč,Internet,WWW,Síť,Agent,Vazby,Server,Login,Přihlášení +Keywords[csb]=User Agent,programa brëkòwnika,przezérnik,Internet,WWW,séc,agent,sparłączenia,serwera,login +Keywords[cy]=Asiant y Defnyddiwr,Porwr,Rhyngrwyd,WWW,Rhwydwaith,asiant,rhwymiadau,gweinydd,mewngofnodi +Keywords[da]=Brugeragent,Internet,WWW,Netværk,agent,bindinger,server,login +Keywords[de]=Browserkennung,Internetprogramm,Browser,Internet,WWW,Netzwerk,Server,Zuordnungen,Anmeldung +Keywords[el]=Πράκτορας χρήστη,Περιηγητής,Διαδίκτυο,WWW,Δίκτυο,πράκτορας,bindings,εξυπηρετητής,σύνδεση +Keywords[eo]=uzanto,agento,TTT,Interreto,WWW,reto,asocioj,servilo,saluto +Keywords[es]=Agente de Usuario,Navegador,Internet,WWW,Red,agente,asociaciones,servidor,entrada,acceso +Keywords[et]=kasutajaagent,identifikaator,veebilehitseja,Internet,WWW,võrk,agent,seosed,server,sisselogimine +Keywords[eu]=Erabiltzaile agentea,Arakatzailea,Internet,WWW,sarea,agentea, elkarketak,zerbitzaria,saio-hasiera +Keywords[fa]=عامل کاربر، مرورگر، اینترنت، WWW، شبکه، عامل، مقیدسازیها، کارساز، ورود +Keywords[fi]=Käyttäjäagentti,Selain,Internet,WWW,Verkko,agentti,sidokset,palvelin,kirjautuminen +Keywords[fr]=identité du navigateur,navigateur,WWW,réseau,associations,serveur,connexion,login,internet +Keywords[fy]=user agent,browser,internet,www,netwurk,brûkersagint,agint,biningen,tsjinner,oanmelding +Keywords[ga]=UserAgent,gníomhaire úsáideora,Brabhsálaí,Idirlíon,WWW,Líonra,Gréasán,gníomhaire,ceangail,freastalaí,logáil isteach +Keywords[gl]=Axente de Usuario,User Agent,Navegador,Internet,WWW,Rede,axente,atallos,servidor,login +Keywords[he]=רשת,זיהוי,קישורים,שרת,כניסה למערכת,דפדפן,זיהוי דפדפן,WWW,אינטרנט, User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login +Keywords[hi]=उपयोक्ता एजेंट, ब्राउज़र,इंटरनेट,डब्ल्यूडब्ल्यूडब्ल्यू,नेटवर्क,एजेंट,बाइंडिंग्स,सर्वर,लॉगइन +Keywords[hr]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,Korisnički agent,Preglednik,Mreža,povezivanja,poslužitelj,prijava +Keywords[hu]=böngészőtípus,böngésző,internet,WWW,hálózat,azonosító,hozzárendelések,kiszolgáló,bejelentkezés +Keywords[id]=Agen User,Browser,Internet,WWW,Jaringan,agent,bindings,server,login +Keywords[is]=Vafraauðkenning,Auðkennig,Auðkenning Vafra,Vafri,Net,Netið,bindingar,þjónn,innstimplun,innskráning +Keywords[it]=User agent,Navigazione,Browser,Internet,WWW,Rete,agent,collegamenti,server,login,accesso +Keywords[ja]=ユーザエージェント,ブラウザ,インターネット, WWW,ネットワーク,エージェント,バインディング,サーバ,ログイン +Keywords[km]=ភ្នាក់ងារ​អ្នក​ប្រើ,កម្មវិធី​រុករក,អ៊ិនធឺណិត,វើលវ៉ាយវិប,បណ្ដាញ,ភ្នាក់ងារ,ការ​ចង,ម៉ាស៊ីន​បម្រើ,ចូល +Keywords[lt]=Naudotojo agentas,User-Agent,Naršyklė,Internet,WWW,Tinklas,agentas,sietis,serveris, registracija +Keywords[lv]=Lietotāja Aģents,Pārlūks,Internets,WWW,Tīkls,aģents,sasaistes,serveris,pieteikšanās +Keywords[mk]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,Кориснички агент,Прелистувач,Интернет,Мрежа,агент,поврзувања,сервер,најава +Keywords[mn]=User Agent,Интернэт програм,Хөтөч,Интернэт,WWW,Сүлжээ,сервер,Холбоос,Нэвтрэлт +Keywords[nb]=brukaragent,nettleser,internett,WWW,verdensveven,nettverk,agent,tjener,innlogging +Keywords[nds]=User Agent,Browser,Internet,WWW,Nettwark,agent,bindings,Server,Nettkieker,anmellen +Keywords[ne]=प्रयोगकर्ता एजेन्ट, ब्राउजर, इन्टरनेट, WWW, सञ्जाल, एजेन्ट, बाइन्डिङहरू, सर्भर, लगइन +Keywords[nl]=user agent,browser,internet,www,netwerk,gebruikersagent,agent,bindingen,server,login +Keywords[nn]=brukaragent,nettlesar,internett,WWW,verdsveven,nettverk,agent,tenar,innlogging +Keywords[nso]=Mothusi wa Modirisi,Seinyakisi,Internet,WWW,Kgokagano,mothusi, ditlemo,moabi,tseno +Keywords[pa]=WWW,Network,agent,bindings,ਏਜੰਟ,ਸਰਵਰ,ਲਾਗਿੰਨ,ਇੰਟਰਨੈਟ,ਝਲਕਾਰਾ,ਉਪਭੋਗੀ ਏਜੰਟ,ਨੈਟਵਰਕ +Keywords[pl]=User Agent,program użytkownika,przeglądarka,Internet,WWW,sieć,agent,powiązania,serwer,login +Keywords[pt]=agente do utilizador,navegador,internet,WWW,rede +Keywords[pt_BR]=Agente de usuário,navegador,Internet,WWW,Rede,agente,ligações,servidor,login +Keywords[ro]=agent utilizator,User Agent,navigator,browser,Internet,WWW,rețea,agent,asocieri,server,logare +Keywords[rw]=Umukozi Ukoresha,Mucukumbuzi,Interineti,WWW,Urusoberemiyoboro,umukozi, Ibyafataranyijwe,seriveri,ifashayinjira +Keywords[se]=geavaheaddjiageanta,fierpmádatlogan,fierpmádat,WWW,interneahtta,fierbmi, ageanta,bálvá,sisačáliheapmi +Keywords[sk]=User Agent,Prehliadač,Internet,WWW,Sieť,agent,server,login,prihlásenie +Keywords[sl]=uporabniški agent,brskalnik,internet,WWW,splet,omrežje,strežnik,prijava +Keywords[sr]=User Агент,Browser,Интернет,WWW,Network,агент,bindings,сервер,login, Мрежа,прегледач,агент,кориснички агент +Keywords[sr@Latn]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login, Mreža,pregledač,agent,korisnički agent +Keywords[sv]=Användaragent,Webbläsare,Internet,WWW,Nätverk,agent,bindningar, server,inloggning +Keywords[ta]=பயன்படுத்துபவர் முகவர்,உலாவி,வலைபின்னல்,WWW,வலைதளம்,முகவர்,bindings,சேவகன்,உள்நுழை +Keywords[th]=เครื่องมือของผู้ใช้,บราวเซอร์,อินเทอร์เน็ต,WWW,เครือข่าย,เครื่องมือ,การจับคู่,เซิร์ฟเวอร์,ล็อกอิน +Keywords[tr]=Kullanıcı Aracısı,Tarayıcı,İnternet,WWW,Ağ,giriş,sunucu,aracı +Keywords[uk]=агент навігатора,навігатор,Інтернет,WWW,мережа,агент,прив'язки,сервер,реєстрація +Keywords[uz]=User Agent,WWW,agent,bindings,Brauzer,Internet,Tarmoq,server +Keywords[uz@cyrillic]=User Agent,WWW,agent,bindings,Браузер,Интернет,Тармоқ,сервер +Keywords[ven]=Mushumisi,Buronza.Inithanete,WWW,Vhgukwamani,Mushumeli,dzithanganyo,Siva,U loga +Keywords[vi]=Trình khách,Trình duyệt,Internet,WWW,Mạng,khách,tổ hợp,máy chủ,đăng nhập +Keywords[wa]=User Agent,idintité do betchteu,betchteu,Internet,daedntoele,WWW,rantoele,idintité,agent,sierveu,login,elodjaedje +Keywords[xh]=Ummeli womsebenzisi,Umkhangeli zincwadi,Internet,WWW,Umsebenzi womnatha,ummeli,izibophelelo,umncedisi,igama elithile +Keywords[zh_CN]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,用户代理,Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,用户代理,浏览,网络,代理,关联,服务器,登录 +Keywords[zh_TW]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,使用者代理程式,瀏覽器,網際網路,網路,代理程式,伺服器,登入 +Keywords[zu]=Ummeli Womsebenzisi,Umcingi,Internet,WWW,Uxhumano olusakazekile, ummeli,izibongo,umlekeleli,ngena ngaphakathi + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/kio/useragentdlg.cpp b/kcontrol/kio/useragentdlg.cpp new file mode 100644 index 000000000..b8256b946 --- /dev/null +++ b/kcontrol/kio/useragentdlg.cpp @@ -0,0 +1,403 @@ +/* + Original Authors: + Copyright (c) Kalle Dalheimer 1997 + Copyright (c) David Faure 1998 + Copyright (c) Dirk Mueller 2000 + + Completely re-written by: + Copyright (C) 2000- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License (GPL) + version 2 as published by the Free Software Foundation. + + 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 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 +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "ksaveioconfig.h" +#include "fakeuaprovider.h" +#include "uagentproviderdlg.h" + +#include "useragentdlg.h" +#include "useragentdlg_ui.h" + +UserAgentDlg::UserAgentDlg( QWidget * parent ) + :KCModule( parent, "kcmkio" ) +{ + QVBoxLayout *mainLayout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + dlg = new UserAgentDlgUI (this); + mainLayout->addWidget(dlg); + + dlg->lvDomainPolicyList->setSorting(0); + + connect( dlg->cbSendUAString, SIGNAL(clicked()), SLOT(configChanged()) ); + + connect( dlg->gbDefaultId, SIGNAL(clicked(int)), + SLOT(changeDefaultUAModifiers(int))); + + connect( dlg->lvDomainPolicyList, SIGNAL(selectionChanged()), + SLOT(selectionChanged()) ); + connect( dlg->lvDomainPolicyList, SIGNAL(doubleClicked (QListViewItem *)), + SLOT(changePressed()) ); + connect( dlg->lvDomainPolicyList, SIGNAL( returnPressed ( QListViewItem * ) ), + SLOT( changePressed() )); + + connect( dlg->pbNew, SIGNAL(clicked()), SLOT( addPressed() ) ); + connect( dlg->pbChange, SIGNAL( clicked() ), SLOT( changePressed() ) ); + connect( dlg->pbDelete, SIGNAL( clicked() ), SLOT( deletePressed() ) ); + connect( dlg->pbDeleteAll, SIGNAL( clicked() ), SLOT( deleteAllPressed() ) ); + + load(); +} + +UserAgentDlg::~UserAgentDlg() +{ + delete m_provider; + delete m_config; +} + +void UserAgentDlg::load() +{ + d_itemsSelected = 0; + dlg->lvDomainPolicyList->clear(); + + m_config = new KConfig("kio_httprc", false, false); + m_provider = new FakeUASProvider(); + + QStringList list = m_config->groupList(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + if ( (*it) == "") + continue; + QString domain = *it; + m_config->setGroup(*it); + QString agentStr = m_config->readEntry("UserAgent"); + if (!agentStr.isEmpty()) + { + QString realName = m_provider->aliasStr(agentStr); + (void) new QListViewItem( dlg->lvDomainPolicyList, domain.lower(), realName, agentStr ); + } + } + + // Update buttons and checkboxes... + m_config->setGroup(QString::null); + bool b = m_config->readBoolEntry("SendUserAgent", true); + dlg->cbSendUAString->setChecked( b ); + m_ua_keys = m_config->readEntry("UserAgentKeys", DEFAULT_USER_AGENT_KEYS).lower(); + dlg->leDefaultId->setSqueezedText( KProtocolManager::defaultUserAgent( m_ua_keys ) ); + dlg->cbOS->setChecked( m_ua_keys.contains('o') ); + dlg->cbOSVersion->setChecked( m_ua_keys.contains('v') ); + dlg->cbOSVersion->setEnabled( m_ua_keys.contains('o') ); + dlg->cbPlatform->setChecked( m_ua_keys.contains('p') ); + dlg->cbProcessorType->setChecked( m_ua_keys.contains('m') ); + dlg->cbLanguage->setChecked( m_ua_keys.contains('l') ); + updateButtons(); + emit changed( false ); +} + +void UserAgentDlg::updateButtons() +{ + bool hasItems = dlg->lvDomainPolicyList->childCount() > 0; + + dlg->pbChange->setEnabled ((hasItems && d_itemsSelected == 1)); + dlg->pbDelete->setEnabled ((hasItems && d_itemsSelected > 0)); + dlg->pbDeleteAll->setEnabled ( hasItems ); +} + +void UserAgentDlg::defaults() +{ + dlg->lvDomainPolicyList->clear(); + m_ua_keys = DEFAULT_USER_AGENT_KEYS; + dlg->leDefaultId->setSqueezedText( KProtocolManager::defaultUserAgent(m_ua_keys) ); + dlg->cbOS->setChecked( m_ua_keys.contains('o') ); + dlg->cbOSVersion->setChecked( m_ua_keys.contains('v') ); + dlg->cbOSVersion->setEnabled( m_ua_keys.contains('o') ); + dlg->cbPlatform->setChecked( m_ua_keys.contains('p') ); + dlg->cbProcessorType->setChecked( m_ua_keys.contains('m') ); + dlg->cbLanguage->setChecked( m_ua_keys.contains('l') ); + dlg->cbSendUAString->setChecked( true ); + updateButtons(); + configChanged(); +} + +void UserAgentDlg::save() +{ + QStringList deleteList; + + // This is tricky because we have to take care to delete entries + // as well. + QStringList list = m_config->groupList(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + if ( (*it) == "") + continue; + QString domain = *it; + m_config->setGroup(*it); + if (m_config->hasKey("UserAgent")) + deleteList.append(*it); + } + + QListViewItem* it = dlg->lvDomainPolicyList->firstChild(); + while(it) + { + QString domain = it->text(0); + if (domain[0] == '.') + domain = domain.mid(1); + QString userAgent = it->text(2); + m_config->setGroup(domain); + m_config->writeEntry("UserAgent", userAgent); + deleteList.remove(domain); + + it = it->nextSibling(); + } + + m_config->setGroup(QString::null); + m_config->writeEntry("SendUserAgent", dlg->cbSendUAString->isChecked()); + m_config->writeEntry("UserAgentKeys", m_ua_keys ); + m_config->sync(); + + // Delete all entries from deleteList. + if (!deleteList.isEmpty()) + { + // Remove entries from local file. + KSimpleConfig cfg("kio_httprc"); + for ( QStringList::Iterator it = deleteList.begin(); + it != deleteList.end(); ++it ) + { + cfg.setGroup(*it); + cfg.deleteEntry("UserAgent", false); + cfg.deleteGroup(*it, false); // Delete if empty. + } + cfg.sync(); + + m_config->reparseConfiguration(); + // Check everything is gone, reset to blank otherwise. + for ( QStringList::Iterator it = deleteList.begin(); + it != deleteList.end(); ++it ) + { + m_config->setGroup(*it); + if (m_config->hasKey("UserAgent")) + m_config->writeEntry("UserAgent", QString::null); + } + m_config->sync(); + } + + KSaveIOConfig::updateRunningIOSlaves (this); + + emit changed( false ); +} + +bool UserAgentDlg::handleDuplicate( const QString& site, + const QString& identity, + const QString& alias ) +{ + QListViewItem* item = dlg->lvDomainPolicyList->firstChild(); + while ( item != 0 ) + { + if ( item->text(0) == site ) + { + QString msg = i18n("
    Found an existing identification for" + "
    %1
    " + "Do you want to replace it?
    " + "
    ").arg(site); + int res = KMessageBox::warningContinueCancel(this, msg, + i18n("Duplicate Identification"), + i18n("Replace")); + if ( res == KMessageBox::Continue ) + { + item->setText(0, site); + item->setText(1, identity); + item->setText(2, alias); + configChanged(); + } + return true; + } + item = item->nextSibling(); + } + return false; +} + +void UserAgentDlg::addPressed() +{ + UAProviderDlg pdlg ( i18n("Add Identification"), this, m_provider ); + + if ( pdlg.exec() == QDialog::Accepted ) + { + if ( !handleDuplicate( pdlg.siteName(), pdlg.identity(), pdlg.alias() ) ) + { + QListViewItem* index = new QListViewItem( dlg->lvDomainPolicyList, + pdlg.siteName(), + pdlg.identity(), + pdlg.alias() ); + dlg->lvDomainPolicyList->sort(); + dlg->lvDomainPolicyList->setCurrentItem( index ); + configChanged(); + } + } +} + +void UserAgentDlg::changePressed() +{ + UAProviderDlg pdlg ( i18n("Modify Identification"), this, m_provider ); + + QListViewItem *index = dlg->lvDomainPolicyList->currentItem(); + + if(!index) + return; + + QString old_site = index->text(0); + pdlg.setSiteName( old_site ); + pdlg.setIdentity( index->text(1) ); + + if ( pdlg.exec() == QDialog::Accepted ) + { + QString new_site = pdlg.siteName(); + if ( new_site == old_site || + !handleDuplicate( new_site, pdlg.identity(), pdlg.alias() ) ) + { + index->setText( 0, new_site ); + index->setText( 1, pdlg.identity() ); + index->setText( 2, pdlg.alias() ); + configChanged(); + } + } +} + +void UserAgentDlg::deletePressed() +{ + QListViewItem* item; + QListViewItem* nextItem = 0; + + item = dlg->lvDomainPolicyList->firstChild (); + + while (item != 0L) + { + if (dlg->lvDomainPolicyList->isSelected (item)) + { + nextItem = item->itemBelow(); + if ( !nextItem ) + nextItem = item->itemAbove(); + + delete item; + item = nextItem; + } + else + { + item = item->itemBelow(); + } + } + + if (nextItem) + dlg->lvDomainPolicyList->setSelected (nextItem, true); + + updateButtons(); + configChanged(); +} + +void UserAgentDlg::deleteAllPressed() +{ + dlg->lvDomainPolicyList->clear(); + updateButtons(); + configChanged(); +} + +void UserAgentDlg::configChanged() +{ + emit changed ( true ); +} + +void UserAgentDlg::changeDefaultUAModifiers( int ) +{ + m_ua_keys = ":"; // Make sure it's not empty + + if ( dlg->cbOS->isChecked() ) + m_ua_keys += 'o'; + + if ( dlg->cbOSVersion->isChecked() ) + m_ua_keys += 'v'; + + if ( dlg->cbPlatform->isChecked() ) + m_ua_keys += 'p'; + + if ( dlg->cbProcessorType->isChecked() ) + m_ua_keys += 'm'; + + if ( dlg->cbLanguage->isChecked() ) + m_ua_keys += 'l'; + + dlg->cbOSVersion->setEnabled(m_ua_keys.contains('o')); + + QString modVal = KProtocolManager::defaultUserAgent( m_ua_keys ); + if ( dlg->leDefaultId->text() != modVal ) + { + dlg->leDefaultId->setSqueezedText(modVal); + configChanged(); + } +} + +void UserAgentDlg::selectionChanged () +{ + QListViewItem* item; + + d_itemsSelected = 0; + item = dlg->lvDomainPolicyList->firstChild (); + + while (item != 0L) + { + if (dlg->lvDomainPolicyList->isSelected (item)) + d_itemsSelected++; + item = item->nextSibling (); + } + + updateButtons (); +} + +QString UserAgentDlg::quickHelp() const +{ + return i18n( "

    Browser Identification

    " + "The browser-identification module allows you to have full " + "control over how Konqueror will identify itself to web " + "sites you browse." + "

    This ability to fake identification is necessary because " + "some web sites do not display properly when they detect that " + "they are not talking to current versions of either Netscape " + "Navigator or Internet Explorer, even if the browser actually " + "supports all the necessary features to render those pages " + "properly. " + "For such sites, you can use this feature to try to browse " + "them. Please understand that this might not always work, since " + "such sites might be using non-standard web protocols and or " + "specifications." + "

    NOTE: To obtain specific help on a particular section " + "of the dialog box, simply click on the quick help button on " + "the window title bar, then click on the section " + "for which you are seeking help." ); +} + +#include "useragentdlg.moc" diff --git a/kcontrol/kio/useragentdlg.h b/kcontrol/kio/useragentdlg.h new file mode 100644 index 000000000..56534e142 --- /dev/null +++ b/kcontrol/kio/useragentdlg.h @@ -0,0 +1,83 @@ +/* + Original Authors: + Copyright (c) Kalle Dalheimer 1997 + Copyright (c) David Faure 1998 + Copyright (c) Dirk Mueller 2000 + + Completely re-written by: + Copyright (C) 2000- Dawit Alemayehu + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License (GPL) + version 2 as published by the Free Software Foundation. + + 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 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 _USERAGENTDLG_H +#define _USERAGENTDLG_H + +#include + +class KConfig; +class FakeUASProvider; +class UserAgentDlgUI; + +class UserAgentDlg : public KCModule +{ + Q_OBJECT + +public: + UserAgentDlg ( QWidget * parent = 0) ; + ~UserAgentDlg(); + + virtual void load(); + virtual void save(); + virtual void defaults(); + QString quickHelp() const; + +private slots: + void updateButtons(); + void selectionChanged(); + + void addPressed(); + void changePressed(); + void deletePressed(); + void deleteAllPressed(); + + void configChanged(); + void changeDefaultUAModifiers( int ); + +private: + bool handleDuplicate( const QString&, const QString&, const QString& ); + + enum { + SHOW_OS = 0, + SHOW_OS_VERSION, + SHOW_PLATFORM, + SHOW_MACHINE, + SHOW_LANGUAGE + }; + + // Useragent modifiers... + QString m_ua_keys; + + // Fake user-agent modifiers... + FakeUASProvider* m_provider; + + // + int d_itemsSelected; + + KConfig *m_config; + UserAgentDlgUI* dlg; +}; + +#endif diff --git a/kcontrol/kio/useragentdlg_ui.ui b/kcontrol/kio/useragentdlg_ui.ui new file mode 100644 index 000000000..0db2a2440 --- /dev/null +++ b/kcontrol/kio/useragentdlg_ui.ui @@ -0,0 +1,355 @@ + +UserAgentDlgUI + + + UserAgentDlgUI + + + + 0 + 0 + 395 + 470 + + + + <qt> +Here you can modify the default browser-identification text or set a site <code>(eg. www.kde.org)</code> or a domain <code>(eg. kde.org)</code> specific identification text.<p> +To add a new site specific identification text, click the <code>New</code> button and supply the necessary information. To change an existing site specific entry, click on the <code>Change</code> button. The <code>Delete</code> button will remove the selected site specific identification text, causing the setting to be used for that site or domain. +</qt> + + + + unnamed + + + 0 + + + + cbSendUAString + + + &Send identification + + + true + + + <qt> +Send the browser identification to web sites.<p> +<u>NOTE:</u> Many sites rely on this information to display pages properly, hence, it is highly recommended that you do not totally disable this feature but rather customize it.<p> +By default, only minimal identification information is sent to remote sites. The identification text that will be sent is shown below. +</qt> + + + + + gbDefaultId + + + true + + + Default Identification + + + The browser identification text sent to the sites you visit. Use the provided options to customize it. + + + + unnamed + + + 11 + + + + leDefaultId + + + + 1 + + + + Box + + + Raised + + + 0 + + + true + + + The browser identification text sent to the sites you visit. You can customize it using the options provided below. + + + + + cbOS + + + Add operating s&ystem name + + + Includes your operating system's name in the browser identification text. + + + + + layout2 + + + + unnamed + + + + spacer2 + + + Horizontal + + + Fixed + + + + 16 + 20 + + + + + + cbOSVersion + + + false + + + Add operating system &version + + + Includes your operating system's version number in the browser identification text. + + + + + + + cbPlatform + + + Add &platform name + + + Includes your platform type in the browser identification text + + + + + cbProcessorType + + + Add &machine (processor) type + + + Includes your machine's CPU type in the browser identification text. + + + + + cbLanguage + + + Add lang&uage information + + + Includes your language settings in the browser identification text. + + + + + + + gbDomainPolicy + + + true + + + Site Specific Identification + + + + unnamed + + + 11 + + + + + Site Name + + + true + + + true + + + + + Identification + + + true + + + true + + + + + User Agent + + + true + + + true + + + + lvDomainPolicyList + + + Extended + + + true + + + true + + + AllColumns + + + 0 + + + List of sites for which the specified identification text will be used instead of the default one. + + + + + layout1 + + + + unnamed + + + + pbNew + + + &New... + + + Add new identification text for a site. + + + + + pbChange + + + Chan&ge... + + + Change the selected identifier text. + + + + + pbDelete + + + D&elete + + + Delete the selected identifier text. + + + + + pbDeleteAll + + + Delete A&ll + + + Delete all identifiers. + + + + + spacer1 + + + Vertical + + + Expanding + + + + 21 + 16 + + + + + + + + + + + + cbOS + toggled(bool) + cbOSVersion + setEnabled(bool) + + + cbSendUAString + toggled(bool) + gbDefaultId + setEnabled(bool) + + + cbSendUAString + toggled(bool) + gbDomainPolicy + setEnabled(bool) + + + + kdialog.h + + + + + klineedit.h + klistview.h + + diff --git a/kcontrol/knotify/CHANGES b/kcontrol/knotify/CHANGES new file mode 100644 index 000000000..e69de29bb diff --git a/kcontrol/knotify/Makefile.am b/kcontrol/knotify/Makefile.am new file mode 100644 index 000000000..1fc878b67 --- /dev/null +++ b/kcontrol/knotify/Makefile.am @@ -0,0 +1,27 @@ +SUBDIRS= . sounds + +kde_module_LTLIBRARIES = kcm_knotify.la + +kcm_knotify_la_SOURCES = knotify.cpp playersettings.ui + +kcm_knotify_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_knotify_la_LIBADD = $(LIB_KIO) +AM_CPPFLAGS = $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = knotify.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmnotify.pot + +xdg_apps_DATA = kcmnotify.desktop + +pics_DATA = play.png +picsdir = $(kde_datadir)/kcontrol/pics + +# the following should be gone at release time. +install-data-local: + rm -f $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/knotify.desktop + rm -f $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/kcmnotify.desktop + diff --git a/kcontrol/knotify/README b/kcontrol/knotify/README new file mode 100644 index 000000000..7fd84d340 --- /dev/null +++ b/kcontrol/knotify/README @@ -0,0 +1,2 @@ +This is a KDE Control Center Module for configuring system notifications + diff --git a/kcontrol/knotify/kcmnotify.desktop b/kcontrol/knotify/kcmnotify.desktop new file mode 100644 index 000000000..217512c05 --- /dev/null +++ b/kcontrol/knotify/kcmnotify.desktop @@ -0,0 +1,243 @@ +[Desktop Entry] +Exec=kcmshell kcmnotify +Icon=knotify +Type=Application +DocPath=kcontrol/kcmnotify/index.html + + +X-KDE-Library=knotify +X-KDE-ParentApp=kcontrol + +Name=System Notifications +Name[af]=Stelsel Inkennistelling +Name[ar]=تنبيهات النظام +Name[az]=Sistem Bildirişləri +Name[be]=Сістэмныя нагадванні +Name[bg]=Уведомяване +Name[bn]=সিস্টেম বিজ্ঞপ্তি +Name[br]=Kemenn ar reizhiad +Name[bs]=Sistemska obavještenja +Name[ca]=Notificacions del sistema +Name[cs]=Systémová hlášení +Name[csb]=Systemòwé dôwanié wiédzë +Name[cy]=Hysbysiadau Cysawd +Name[da]=Systembekendtgørelser +Name[de]=Systemnachrichten +Name[el]=Ειδοποιήσεις συστήματος +Name[eo]=Sistematentigoj +Name[es]=Notificaciones del sistema +Name[et]=Süsteemi märguanded +Name[eu]=Sistemaren jakinarazpenak +Name[fa]=اخطارهای سیستم +Name[fi]=Järjestelmähuomautukset +Name[fr]=Notifications du système +Name[fy]=Systeemoankundigingen +Name[ga]=Fógairt an Chórais +Name[gl]=Notificacións do Sistema +Name[he]=הודעות מערכת +Name[hi]=तंत्र सूचनाएँ +Name[hr]=Obavijesti sustava +Name[hu]=Rendszerüzenetek +Name[id]=Pemberitahuan Sistem +Name[is]=Kerfistilkynningar +Name[it]=Avvisi di sistema +Name[ja]=システム通知 +Name[ka]=სისტემური შეტყობინებები +Name[kk]=Жүйелік құлақтандырулар +Name[km]=ការ​ជូនដំណឹង​ប្រព័ន្ធ +Name[ko]=시스템 알림 +Name[lo]=ການແຈ້ງເຕືອນຂອງລະບົບ +Name[lt]=Sistemos pranešimai +Name[lv]=Sistēmas Paziņojumi +Name[mk]=Системски известувања +Name[mn]=Системийн сонордуулга +Name[ms]=Pemberitahuan Sistem +Name[mt]=Notifiki tas-Sistema +Name[nb]=Systemvarsler +Name[nds]=Systeemnarichten +Name[ne]=प्रणाली सूचना +Name[nl]=Systeemnotificaties +Name[nn]=Systempåminningar +Name[nso]=Ditsebiso tsa System +Name[oc]=Notificacions dèu sistemo +Name[pa]=ਸਿਸਟਮ ਸੂਚਨਾਵਾਂ +Name[pl]=Powiadomienia systemowe +Name[pt]=Mensagens do Sistema +Name[pt_BR]=Notificações do Sistema +Name[ro]=Notificări de sistem +Name[ru]=Системные уведомления +Name[rw]=Amamenyesha Sisitemu +Name[se]=Vuogádatmuittuhusat +Name[sk]=Systémové správy +Name[sl]=Sistemska obvestila +Name[sr]=Системска обавештења +Name[sr@Latn]=Sistemska obaveštenja +Name[sv]=Systemunderrättelser +Name[ta]=அமைப்பு குறிப்பகள் +Name[tg]=Огоҳномаи система +Name[th]=การแจ้งเตือนของระบบ +Name[tr]=Sistem Bildirimleri +Name[tt]=Sistem Beldermäläre +Name[uk]=Системні повідомлення +Name[uz]=Tizimning xabarnomalari +Name[uz@cyrillic]=Тизимнинг хабарномалари +Name[ven]=Thalutshedzo ya UA (M18 kha WinNT 4.0) +Name[vi]=Thông báo Hệ thống +Name[wa]=Notifiaedjes do sistinme +Name[xh]=Izaziso Zendlela esetyenziswayo +Name[zh_CN]=系统通知 +Name[zh_TW]=系統通知 +Name[zu]=Izaziso zesistimu + +Comment=System Notification Configuration +Comment[af]=Stelsel Inkennisstelling Opstelling +Comment[ar]=إعدادات تنبيهات النظام +Comment[az]=Sistem Bildirişi Quraşdırması +Comment[be]=Настаўленні сістэмных нагадванняў +Comment[bg]=Настройване на системата за уведомяване +Comment[bn]=সিস্টেম বিজ্ঞপ্তি কনফিগারেশন +Comment[br]=Kefluniañ kemenn ar reizhiad +Comment[bs]=Podešavanje sistemskih obavještenja +Comment[ca]=Configuració de les notificacions del sistema +Comment[cs]=Nastavení systémových hlášení +Comment[csb]=Kònfigùracëjô systemòwegò dôwaniô wiédzë +Comment[cy]=Ffurfweddu Hysbysiadau Cysawd +Comment[da]=Opsætning af systembekendtgørelser +Comment[de]=Einstellung der Systemnachrichten +Comment[el]=Ρύθμιση ειδοποιήσεων συστήματος +Comment[eo]=Agordo de sistematentigoj +Comment[es]=Configuración de las notificaciones del sistema +Comment[et]=Süsteemsete märguannete seadistamine +Comment[eu]=Sistemaren jakinarazpenen konfigurazioa +Comment[fa]=پیکربندی اخطارهای سیستم +Comment[fi]=Järjestelmähuomautusten asetukset +Comment[fr]=Configuration du système de notifications +Comment[fy]=Ynstellings fan de systeemoankundigingen +Comment[gl]=Configuración das Notificacións do Sistema +Comment[he]=שינוי הגדרות הודעות המערכת +Comment[hi]=तंत्र सूचना कॉन्फ़िगरेशन +Comment[hr]=Konfiguriranje obavijesti sustava +Comment[hu]=A rendszerüzenetek beállítása +Comment[id]=Konfigurasi pemberitahuan sistem +Comment[is]=Stillingar tilkynninga frá kerfinu +Comment[it]=Configurazione degli avvisi di sistema +Comment[ja]=システム通知の設定 +Comment[ka]=სისტემური შეტყობინებების კონფიგურაცია +Comment[kk]=Жүйелік құлақтандыруларды баптау +Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធជូនដំណឹងប្រព័ន្ធ +Comment[ko]=시스템 알림 설정 +Comment[lo]=ປັບແຕ່ງການແຈ້ງເຕືອນຂອງລະບົບ +Comment[lt]=Sistemos pranešimų derinimas +Comment[lv]=Sistēmas Paziņojumu Konfigurēšana +Comment[mk]=Конфигурација на системските известувања +Comment[mn]=Системийн сонордуулга тохируулга +Comment[ms]=Konfigurasi Pemberitahuan Sistem +Comment[mt]=Konfigurazzjoni tan-notifiki tas-Sistema +Comment[nb]=Oppett av systemvarsling +Comment[nds]=Systeemnarichten instellen +Comment[ne]=प्रणाली सूचना कन्फिगरेसन +Comment[nl]=Instellingen van de systeemnotificatie +Comment[nn]=Oppsett av systempåminningar +Comment[nso]=Peakanyo ya Tsebiso ya System +Comment[oc]=Configuracion de les notificacions dèu sistemo +Comment[pa]=ਸਿਸਟਮ ਸੂਚਨਾ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja powiadamiania systemowego +Comment[pt]=Configuração das mensagens do sistema +Comment[pt_BR]=Configuração das notificações do sistema +Comment[ro]=Configurează notificările de sistem +Comment[ru]=Настройка системных уведомлений +Comment[rw]=Iboneza ry'Amamenyesha Sisitemu +Comment[se]=Heivet vuogádatmuittuhusat +Comment[sk]=Nastavenie správ systému +Comment[sl]=Nastavitev sistemskih obvestil +Comment[sr]=Подешавање системских обавештења +Comment[sr@Latn]=Podešavanje sistemskih obaveštenja +Comment[sv]=Anpassa systemunderrättelser +Comment[ta]=சாதனம் குறிப்பு அமைப்பு +Comment[tg]=Танзими огоҳномаи система +Comment[th]=ปรับแต่งการแจ้งเตือนของระบบ +Comment[tr]=Sistem Bildirimi Yapılandırması +Comment[tt]=Sistem Beldermälären Caylaw +Comment[uk]=Налаштування системних повідомлень +Comment[uz]=Tizimning xabarnomalarini moslash +Comment[uz@cyrillic]=Тизимнинг хабарномаларини мослаш +Comment[ven]=Khonifiguresheni yau divhadza sisiteme +Comment[vi]=Cấu hình Thông báo Hệ thống +Comment[wa]=Apontiaedje po les notifiaedjes do sistinme +Comment[xh]=Uqwalaselo Lwezaziso Zendlela yokusebenza +Comment[zh_CN]=系统通知配置 +Comment[zh_TW]=系統通知組態 +Comment[zu]=Inhlanganiselo yokwazisa kwesistimu + +Keywords=System sounds,Audio,Sound,Notify,Alerts,Notification +Keywords[af]=Stelsel sounds,Audio,Sound,Notify,Alerts,Notification +Keywords[ar]=أصوات النظام,Audio,System sounds,Audio,Sound,Notify,Alerts, Notification,صوت,نبّه,تحذيات,تنبيهات +Keywords[az]=Sistem səsləri,Səs,Bildir,Alarmlar,Bildirmə +Keywords[be]=Сістэмныя гукі,Аўдыё,Гук,Нагадванне,Важныя нагадванні,Нагадваць,System sounds,Audio,Sound,Notify,Alerts,Notification +Keywords[bg]=системен, звук, уведомяване, информация, грешка, събития, System sounds, Audio, Sound, Notify, Alerts, Notification +Keywords[br]=sonioù ar reizhiad,klevet,son,kemenn,evezh +Keywords[bs]=System sounds,Audio,Sound,Notify,Alerts,Notification,zvuk +Keywords[ca]=Sons del sistema,Àudio,So,Notifica,Alertes,Notificació +Keywords[cs]=Systémové zvuky,Audio,Oznámit,Varování,Oznámení +Keywords[csb]=Systemòwé zwãczi,Audio,Zwãk,Dôwac wiédzã,Alarmë,Dôwanié wiédzë +Keywords[cy]=Sain cysawd,Awdio,Swn,Hysbysu,Rhybuddion,Hysbysiad +Keywords[da]=Systemlyde,audio,Lyd,Bekendtgør,Advarsler,Bekendtgørelse +Keywords[de]=Klänge,Systemklänge,Audio,Sound,Benachrichtigung,Nachricht,Alarm,Signalton,Beep +Keywords[el]=Ήχοι συστήματος,Audio,Ήχος,Ειδοποιώ,Συναγερμοί,Ειδοποίηση +Keywords[eo]=sistemo,sonoroj,aŭdio,sono,atentigo,alarmo,operaciumo +Keywords[es]=Sonidos del sistema,Audio,Sonido,Notificar,Alertas,Notificación +Keywords[et]=süsteemsed helid,audio,heli,märguanded,alarm +Keywords[eu]=Sistemaren soinuak,Audioa,Soinua,Jakinarazi,Alertak,Jakinarazpenak +Keywords[fa]=صداهای سیستم، صوتی، صوت، اخطار، هشدار، اخطار +Keywords[fi]=Järjestelmä-äänet,Äänet,Huomauttaa,Varoitukset,Huomautus +Keywords[fr]=sons du système,son,audio,notification,alertes,événements +Keywords[fy]=systeemlûden,audio,lûd,warskôgingen,lûdssinjaal,oankundiging +Keywords[gl]=Sons do sistema,Audio,Son,Notificar,Alertas,Notificación +Keywords[he]=צלילי מערכת,שמע,צליל,הודעה,תזכורות, System sounds,Audio,Sound,Notify,Alerts,Notification +Keywords[hi]=तंत्र ध्वनि,ऑडियो,ध्वनि,सूचना,सतर्क,सूचनाएँ +Keywords[hr]=System sounds,Audio,Sound,Notify,Alerts,Notification,Zvuk,Sistemski zvukovi,Obavijesti,Upozorenja,Obavijest +Keywords[hu]=rendszerhangok,audió,hang,figyelmeztető,vészjelző +Keywords[id]=System sounds,Audio,Sound,Notify,Alerts,Pemberitahuan +Keywords[is]=Kerfishljóð,Hljóð,Tilkynningar,Villur,Bjalla +Keywords[it]=Suoni di sistema,Audio,Suono,Notifica,Avvisi,Messaggi +Keywords[ja]=システムサウンド,オーディオ,サウンド,通知, アラート,通知 +Keywords[ka]=სისტემის ხმები,აუდიო,ხმა,შეტყობინება,განგაში,შეტყობინება +Keywords[km]=សំឡេង​ប្រព័ន្ធ,សំឡេង,សោត,ជូនដំណឹង,ព្រមាន,ការ​ជូនដំណឹង +Keywords[lt]=Sistemos garsai,Audio,Garsas,Pranešimas,Perspėjimai +Keywords[lv]=Sistēmas skaņas,Audio,Skaņa,Paziņo,Brīdinājumi,Paziņošana +Keywords[mk]=System sounds,Audio,Sound,Notify,Alerts,Notification,Системски звуци,Аудио,Звук,Извести,Предупредувања,Известувања +Keywords[mn]=Чимээ,Системийн чимээ,Audio,Дуу,Мэдээлэгч,Мэдээ,Alarm,Сигналын чимээ,Beep +Keywords[nb]=Systemlyder,Lyd,Varsle,Advarsel,Varsling,alarm,signal +Keywords[nds]=Systeemkläng,Audio,Klang,Notify,Bescheed,Notification,Bescheed geven +Keywords[ne]=प्रणाली ध्वनि, अडियो, ध्वनि, सूचित, चेतावनी, सूचना +Keywords[nl]=systeemgeluiden,audio,geluid,waarschuwingen,geluidssignaal,notificatie +Keywords[nn]=systemlydar,lyd,påminning,varsel,alarm,signal +Keywords[nso]=Medumo ya System,Kwagalo,Modumo,Tsebisa,Ditheeletso,Tsebiso +Keywords[oc]=Sons dèu sistemo,Ã?udio,Son,Notifica,Alertes,Notificacion +Keywords[pa]=ਸਿਸਟਮ ਧੁਨੀ,ਆਡੀਓ,ਧੁਨੀ,ਸੂਚਨਾ,ਚੇਤਾਵਨੀ,ਸੂਚਨਾਵਾਂ +Keywords[pl]=Dźwieki systemowe,Audio,Dźwiek,Powiadamiac,Alarmy,Powiadamianie +Keywords[pt]=sons de sistema,áudio,som,notificar,alertas,notificação +Keywords[pt_BR]=Sons de sistema,áudio,Som,Notificação,Alertas,Notificação +Keywords[ro]=sunete de sistem,audio,sunet,alertă,notificare +Keywords[rw]=Amajwi sisitemu,Inyumvo,Ijwi,Kumenyesha,Integuza,Imenyekanisha +Keywords[se]=vuogádatjienat,jietna,audio,dieđihit,váruhusat,signála +Keywords[sk]=Systém zvukov,Audio,Zvuk,Správy,Upozornenia +Keywords[sl]=sistemski zvoki,avdio,zvok,obvestila,alarmi +Keywords[sr]=System sounds,Аудио,Sound,Notify,Alerts,Notification,Звук,Узбуне,обавештења,системски звуци +Keywords[sr@Latn]=System sounds,Audio,Sound,Notify,Alerts,Notification,Zvuk,Uzbune,obaveštenja,sistemski zvuci +Keywords[sv]=Systemljud,Ljud,ljud,Underrättelse,Varningar,Bekräftelse +Keywords[ta]=அமைப்பு ஒலிகள்,கேட்பொலி,ஒலி,தெரியப்படுத்து,எச்சரிக்கைகள்,தெரியப்படுத்துதல் +Keywords[th]=ระบบเสียง,ออดิโอ,เสียง,แจ้งเตือน,เตือน,การแจ้งเตือน +Keywords[tr]=Sistem sesleri,Ses,Bildir,Alarmlar,Bildirme +Keywords[uk]=системні звуки,аудіо,audio,звук,повідомлення,попередження,сповіщення +Keywords[uz]=Tizim tovush signallari,Audio,Tovush,Xabar berish,Xabarnomalar +Keywords[uz@cyrillic]=Тизим товуш сигналлари,Аудио,Товуш,Хабар бериш,Хабарномалар +Keywords[ven]=Mubvumo wa sisitemu,Zwaupfiwa,Mubvumo,Divhadza,Divhisa,Ndivhadzo +Keywords[vi]=Âm thanh hệ thống,Âm,Âm thanh,Thông báo,Cảnh báo,Thông báo +Keywords[wa]=Sons do sistinme,Audio,Son,Notifyî,Alertes,Notifiaedje +Keywords[xh]=Izandi zendlela,Evakalayo,Isandi,Yazisa,Izilumkiso zengozi,Izaziso +Keywords[zh_CN]=System sounds,Audio,Sound,Notify,Alerts,Notification,系统音效,音效,通知,警报 +Keywords[zh_TW]=System sounds,Audio,Sound,Notify,Alerts,Notification,系統音效,音效,通知,警報 +Keywords[zu]=Imisindo yesistimu,Okuzwakalayo,Umsindo,Yazisa,Ukuqwashisa, Ukwazisa + +Categories=Qt;KDE;X-KDE-settings-sound; diff --git a/kcontrol/knotify/knotify.cpp b/kcontrol/knotify/knotify.cpp new file mode 100644 index 000000000..8cd4d16a5 --- /dev/null +++ b/kcontrol/knotify/knotify.cpp @@ -0,0 +1,328 @@ +/* + Copyright (C) 2000,2002 Carsten Pfeiffer + + 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 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 +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "knotify.h" +#include "playersettings.h" + +static const int COL_FILENAME = 1; + +typedef KGenericFactory NotifyFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_knotify, NotifyFactory("kcmnotify") ) + +using namespace KNotify; + +KCMKNotify::KCMKNotify(QWidget *parent, const char *name, const QStringList & ) + : KCModule(NotifyFactory::instance(), parent, name), + m_playerSettings( 0L ) +{ + setButtons( Help | Default | Apply ); + + setQuickHelp( i18n("

    System Notifications

    " + "KDE allows for a great deal of control over how you " + "will be notified when certain events occur. There are " + "several choices as to how you are notified:" + "
    • As the application was originally designed." + "
    • With a beep or other noise." + "
    • Via a popup dialog box with additional information." + "
    • By recording the event in a logfile without " + "any additional visual or audible alert." + "
    ")); + + QVBoxLayout *layout = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + + QLabel *label = new QLabel( i18n( "Event source:" ), this ); + m_appCombo = new KComboBox( false, this, "app combo" ); + + QHBoxLayout *hbox = new QHBoxLayout( layout ); + hbox->addWidget( label ); + hbox->addWidget( m_appCombo, 10 ); + + m_notifyWidget = new KNotifyWidget( this, "knotify widget", true ); + connect( m_notifyWidget, SIGNAL( changed( bool )), SIGNAL( changed(bool))); + + layout->addWidget( m_notifyWidget ); + + connect( m_appCombo, SIGNAL( activated( const QString& ) ), + SLOT( slotAppActivated( const QString& )) ); + + connect( m_notifyWidget->m_playerButton, SIGNAL( clicked() ), + SLOT( slotPlayerSettings())); + + KAboutData* ab = new KAboutData( + "kcmknotify", I18N_NOOP("KNotify"), "3.0", + I18N_NOOP("System Notification Control Panel Module"), + KAboutData::License_GPL, "(c) 2002 Carsten Pfeiffer", 0, 0 ); + ab->addAuthor( "Carsten Pfeiffer", 0, "pfeiffer@kde.org" ); + ab->addCredit( "Charles Samuels", I18N_NOOP("Original implementation"), + "charles@altair.dhs.org" ); + setAboutData( ab ); + + load(); +} + +KCMKNotify::~KCMKNotify() +{ + KConfig config( "knotifyrc", false, false ); + config.setGroup( "Misc" ); + ApplicationList allApps = m_notifyWidget->allApps(); + ApplicationListIterator appIt( allApps ); + for ( ; appIt.current(); ++appIt ) + { + if( appIt.current()->text() == m_appCombo->currentText()) + config.writeEntry( "LastConfiguredApp", appIt.current()->appName()); + } +} + +Application * KCMKNotify::applicationByDescription( const QString& text ) +{ + // not really efficient, but this is not really time-critical + ApplicationList& allApps = m_notifyWidget->allApps(); + ApplicationListIterator it ( allApps ); + for ( ; it.current(); ++it ) + { + if ( it.current()->text() == text ) + return it.current(); + } + + return 0L; +} + +void KCMKNotify::slotAppActivated( const QString& text ) +{ + Application *app = applicationByDescription( text ); + if ( app ) + { + m_notifyWidget->clearVisible(); + m_notifyWidget->addVisibleApp( app ); + } +} + +void KCMKNotify::slotPlayerSettings() +{ + // kcmshell is a modal dialog, and apparently, we can't put a non-modal + // dialog besides a modal dialog. sigh. + if ( !m_playerSettings ) + m_playerSettings = new PlayerSettingsDialog( this, true ); + + m_playerSettings->exec(); +} + + +void KCMKNotify::defaults() +{ + m_notifyWidget->resetDefaults( true ); // ask user + load( true ); +} + +void KCMKNotify::load() +{ + load( false ); +} + +void KCMKNotify::load( bool useDefaults ) +{ + setEnabled( false ); + + m_appCombo->clear(); + m_notifyWidget->clear(); + + QStringList fullpaths = + KGlobal::dirs()->findAllResources("data", "*/eventsrc", false, true ); + + QStringList::ConstIterator it = fullpaths.begin(); + for ( ; it != fullpaths.end(); ++it) + m_notifyWidget->addApplicationEvents( *it ); + + ApplicationList allApps = m_notifyWidget->allApps(); + allApps.sort(); + m_notifyWidget->setEnabled( !allApps.isEmpty() ); + + KConfig config( "knotifyrc", true, false ); + config.setReadDefaults( useDefaults ); + config.setGroup( "Misc" ); + QString select = config.readEntry( "LastConfiguredApp" ); + if( select.isEmpty()) + select = "knotify"; // default to system notifications + bool selected = false; + + ApplicationListIterator appIt( allApps ); + for ( ; appIt.current(); ++appIt ) + { + m_appCombo->insertItem( appIt.current()->text() ); + if( appIt.current()->appName() == select ) + { + m_appCombo->setCurrentItem( appIt.current()->text()); + selected = true; + } + else if( !selected && appIt.current()->appName() == "knotify" ) + m_appCombo->setCurrentItem( appIt.current()->text()); + } + + // sets the applicationEvents for KNotifyWidget + slotAppActivated( m_appCombo->currentText() ); + + // unsetCursor(); // unsetting doesn't work. sigh. + setEnabled( true ); + emit changed( useDefaults ); +} + +void KCMKNotify::save() +{ + if ( m_playerSettings ) + m_playerSettings->save(); + + m_notifyWidget->save(); // will dcop knotify about its new config + + emit changed( false ); +} + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +PlayerSettingsDialog::PlayerSettingsDialog( QWidget *parent, bool modal ) + : KDialogBase( parent, "player settings dialog", modal, + i18n("Player Settings"), Ok|Apply|Cancel, Ok, true ) +{ + QFrame *frame = makeMainWidget(); + + QVBoxLayout *topLayout = new QVBoxLayout( frame, 0, + KDialog::spacingHint() ); + + m_ui = new PlayerSettingsUI(frame); + topLayout->addWidget(m_ui); + + load( false ); + dataChanged = false; + enableButton(Apply, false); + + connect( m_ui->cbExternal, SIGNAL( toggled( bool ) ), this, SLOT( externalToggled( bool ) ) ); + connect( m_ui->grpPlayers, SIGNAL( clicked( int ) ), this, SLOT( slotChanged() ) ); + connect( m_ui->volumeSlider, SIGNAL( valueChanged ( int ) ), this, SLOT( slotChanged() ) ); + connect( m_ui->reqExternal, SIGNAL( textChanged( const QString& ) ), this, SLOT( slotChanged() ) ); +} + +void PlayerSettingsDialog::load( bool useDefaults ) +{ + KConfig config( "knotifyrc", true, false ); + config.setReadDefaults( useDefaults ); + config.setGroup( "Misc" ); + bool useExternal = config.readBoolEntry( "Use external player", false ); + m_ui->cbExternal->setChecked( useExternal ); + m_ui->reqExternal->setURL( config.readPathEntry( "External player" ) ); + m_ui->volumeSlider->setValue( config.readNumEntry( "Volume", 100 ) ); + + if ( !m_ui->cbExternal->isChecked() ) + { + config.setGroup( "StartProgress" ); + if ( config.readBoolEntry( "Use Arts", true ) ) + { + m_ui->cbArts->setChecked( true ); + } + else + { + m_ui->cbNone->setChecked( true ); + } + } +} + +void PlayerSettingsDialog::save() +{ + // see kdelibs/arts/knotify/knotify.cpp + KConfig config( "knotifyrc", false, false ); + config.setGroup( "Misc" ); + + config.writePathEntry( "External player", m_ui->reqExternal->url() ); + config.writeEntry( "Use external player", m_ui->cbExternal->isChecked() ); + config.writeEntry( "Volume", m_ui->volumeSlider->value() ); + + config.setGroup( "StartProgress" ); + + if ( m_ui->cbNone->isChecked() ) + { + // user explicitly says "no sound!" + config.writeEntry( "Use Arts", false ); + } + else if ( m_ui->cbArts->isChecked() ) + { + // use explicitly said to use aRts so we turn it back on + // we don't want to always set this to the value of + // m_ui->cbArts->isChecked() since we don't want to + // turn off aRts support just because they also chose + // an external player + config.writeEntry( "Use Arts", true ); + config.writeEntry( "Arts Init", true ); // reset it for the next time + } + + config.sync(); +} + +// reimplements KDialogBase::slotApply() +void PlayerSettingsDialog::slotApply() +{ + save(); + dataChanged = false; + enableButton(Apply, false); + kapp->dcopClient()->send("knotify", "", "reconfigure()", ""); + + KDialogBase::slotApply(); +} + +// reimplements KDialogBase::slotOk() +void PlayerSettingsDialog::slotOk() +{ + if( dataChanged ) + slotApply(); + KDialogBase::slotOk(); +} + +void PlayerSettingsDialog::slotChanged() +{ + dataChanged = true; + enableButton(Apply, true); +} + +void PlayerSettingsDialog::externalToggled( bool on ) +{ + if ( on ) + m_ui->reqExternal->setFocus(); + else + m_ui->reqExternal->clearFocus(); +} + +#include "knotify.moc" diff --git a/kcontrol/knotify/knotify.h b/kcontrol/knotify/knotify.h new file mode 100644 index 000000000..2ee2f3ef6 --- /dev/null +++ b/kcontrol/knotify/knotify.h @@ -0,0 +1,96 @@ +/* + Copyright (C) 2000,2002 Carsten Pfeiffer + + + 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 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 _KNOTIFY_H +#define _KNOTIFY_H + +#include + +#include +#include + +class QCheckBox; +class QLabel; +class QSlider; + +class KAboutData; +class KComboBox; +class KURLRequester; +class PlayerSettingsDialog; +class PlayerSettingsUI; + +namespace KNotify +{ + class Application; + class KNotifyWidget; +} + +class KCMKNotify : public KCModule +{ + Q_OBJECT + +public: + KCMKNotify(QWidget *parent, const char *name, const QStringList &); + virtual ~KCMKNotify(); + + virtual void defaults(); + virtual void save(); + virtual void load(bool useDefaults ); + +public slots: + virtual void load(); + +private slots: + void slotAppActivated( const QString& app ); + void slotPlayerSettings(); + +private: + KNotify::Application *applicationByDescription( const QString& text ); + + KComboBox *m_appCombo; + KNotify::KNotifyWidget *m_notifyWidget; + PlayerSettingsDialog *m_playerSettings; + +}; + +class PlayerSettingsDialog : public KDialogBase +{ + Q_OBJECT + +public: + PlayerSettingsDialog( QWidget *parent, bool modal ); + void load( bool useDefaults ); + void save(); + +protected slots: + virtual void slotApply(); + virtual void slotOk(); + void externalToggled( bool on ); + void slotChanged(); + +private: + PlayerSettingsUI* m_ui; + bool dataChanged; +}; + + +#endif diff --git a/kcontrol/knotify/play.png b/kcontrol/knotify/play.png new file mode 100644 index 000000000..e0daeb8c9 Binary files /dev/null and b/kcontrol/knotify/play.png differ diff --git a/kcontrol/knotify/playersettings.ui b/kcontrol/knotify/playersettings.ui new file mode 100644 index 000000000..f990fc995 --- /dev/null +++ b/kcontrol/knotify/playersettings.ui @@ -0,0 +1,330 @@ + +PlayerSettingsUI + + + PlayerSettingsUI + + + + 0 + 0 + 387 + 207 + + + + + unnamed + + + 0 + + + + textLabel1 + + + <b>Audio Player Settings</b> + + + + + line1 + + + HLine + + + Sunken + + + Horizontal + + + + + grpPlayers + + + NoFrame + + + + + + + unnamed + + + 0 + + + + cbNone + + + &No audio output + + + + + cbExternal + + + &Use an external player + + + + + spacer2 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + layout5 + + + + unnamed + + + + spacer4 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + layout4 + + + + unnamed + + + 0 + + + 0 + + + + spacer1 + + + Horizontal + + + Expanding + + + + 233 + 20 + + + + + + textLabel3 + + + 100% + + + + + textLabel2 + + + 0% + + + + + volumeSlider + + + 100 + + + 10 + + + 100 + + + Horizontal + + + + + + + textLabel4 + + + &Volume: + + + volumeSlider + + + + + + + spacer3 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + cbArts + + + Use the &KDE sound system + + + true + + + + + textLabel5 + + + false + + + &Player: + + + reqExternal + + + + + reqExternal + + + false + + + + 5 + 5 + 10 + 0 + + + + + + + + spacer5 + + + Vertical + + + Expanding + + + + 20 + 16 + + + + + + + + + + cbArts + toggled(bool) + textLabel4 + setEnabled(bool) + + + cbArts + toggled(bool) + textLabel2 + setEnabled(bool) + + + cbArts + toggled(bool) + volumeSlider + setEnabled(bool) + + + cbArts + toggled(bool) + textLabel3 + setEnabled(bool) + + + cbExternal + toggled(bool) + textLabel5 + setEnabled(bool) + + + cbExternal + toggled(bool) + reqExternal + setEnabled(bool) + + + + cbArts + volumeSlider + reqExternal + cbExternal + cbNone + + + + kurlrequester.h + klineedit.h + kpushbutton.h + + diff --git a/kcontrol/knotify/sounds/KDE_Beep.ogg b/kcontrol/knotify/sounds/KDE_Beep.ogg new file mode 100644 index 000000000..ac9985bbd Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Ahem.wav b/kcontrol/knotify/sounds/KDE_Beep_Ahem.wav new file mode 100644 index 000000000..c6c7c4b0f Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Ahem.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Beep.wav b/kcontrol/knotify/sounds/KDE_Beep_Beep.wav new file mode 100644 index 000000000..3c18175f7 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Beep.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Bottles.wav b/kcontrol/knotify/sounds/KDE_Beep_Bottles.wav new file mode 100644 index 000000000..1b82bc128 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Bottles.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Car.ogg b/kcontrol/knotify/sounds/KDE_Beep_Car.ogg new file mode 100644 index 000000000..bb1f952c0 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Car.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Classic.ogg b/kcontrol/knotify/sounds/KDE_Beep_Classic.ogg new file mode 100644 index 000000000..991c08dc1 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Classic.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_ClassicBeep.wav b/kcontrol/knotify/sounds/KDE_Beep_ClassicBeep.wav new file mode 100644 index 000000000..f7e6d5977 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_ClassicBeep.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_ClockChime.wav b/kcontrol/knotify/sounds/KDE_Beep_ClockChime.wav new file mode 100644 index 000000000..74a7f5187 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_ClockChime.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Connect.ogg b/kcontrol/knotify/sounds/KDE_Beep_Connect.ogg new file mode 100644 index 000000000..2b2e26c5e Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Connect.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Connect.wav b/kcontrol/knotify/sounds/KDE_Beep_Connect.wav new file mode 100644 index 000000000..109e8d1c8 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Connect.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Digital_1.ogg b/kcontrol/knotify/sounds/KDE_Beep_Digital_1.ogg new file mode 100644 index 000000000..5fd25353c Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Digital_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Digital_2.ogg b/kcontrol/knotify/sounds/KDE_Beep_Digital_2.ogg new file mode 100644 index 000000000..caba4cf19 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Digital_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Door.wav b/kcontrol/knotify/sounds/KDE_Beep_Door.wav new file mode 100644 index 000000000..5257aca9f Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Door.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Double.ogg b/kcontrol/knotify/sounds/KDE_Beep_Double.ogg new file mode 100644 index 000000000..a5b279f12 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Double.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Harsh.ogg b/kcontrol/knotify/sounds/KDE_Beep_Harsh.ogg new file mode 100644 index 000000000..b2fbd0d38 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Harsh.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Honk.wav b/kcontrol/knotify/sounds/KDE_Beep_Honk.wav new file mode 100644 index 000000000..9faf34c61 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Honk.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Lightning.wav b/kcontrol/knotify/sounds/KDE_Beep_Lightning.wav new file mode 100644 index 000000000..9d418c968 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Lightning.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Phone_1.ogg b/kcontrol/knotify/sounds/KDE_Beep_Phone_1.ogg new file mode 100644 index 000000000..0d902cbae Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Phone_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Phone_2.ogg b/kcontrol/knotify/sounds/KDE_Beep_Phone_2.ogg new file mode 100644 index 000000000..1c8d27419 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Phone_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Pop.wav b/kcontrol/knotify/sounds/KDE_Beep_Pop.wav new file mode 100644 index 000000000..3a9133381 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Pop.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_RimShot.wav b/kcontrol/knotify/sounds/KDE_Beep_RimShot.wav new file mode 100644 index 000000000..6f978150b Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_RimShot.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_RingRing.wav b/kcontrol/knotify/sounds/KDE_Beep_RingRing.wav new file mode 100644 index 000000000..01b6eee81 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_RingRing.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_ShortBeep.wav b/kcontrol/knotify/sounds/KDE_Beep_ShortBeep.wav new file mode 100644 index 000000000..2c3795ad7 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_ShortBeep.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Beep_Yo.wav b/kcontrol/knotify/sounds/KDE_Beep_Yo.wav new file mode 100644 index 000000000..c98273bbb Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Beep_Yo.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Bottles.ogg b/kcontrol/knotify/sounds/KDE_Bottles.ogg new file mode 100644 index 000000000..52a78c74b Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Bottles.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Chimes_1.ogg b/kcontrol/knotify/sounds/KDE_Chimes_1.ogg new file mode 100644 index 000000000..76c8b530b Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Chimes_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Chimes_2.ogg b/kcontrol/knotify/sounds/KDE_Chimes_2.ogg new file mode 100644 index 000000000..b66d819bf Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Chimes_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Chimes_3.ogg b/kcontrol/knotify/sounds/KDE_Chimes_3.ogg new file mode 100644 index 000000000..e170000f6 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Chimes_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Click.wav b/kcontrol/knotify/sounds/KDE_Click.wav new file mode 100644 index 000000000..b7c572983 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Click.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Click_1.ogg b/kcontrol/knotify/sounds/KDE_Click_1.ogg new file mode 100644 index 000000000..39cb99194 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Click_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Click_2.ogg b/kcontrol/knotify/sounds/KDE_Click_2.ogg new file mode 100644 index 000000000..75836862c Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Click_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Click_3.ogg b/kcontrol/knotify/sounds/KDE_Click_3.ogg new file mode 100644 index 000000000..a829deeeb Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Click_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Close_Window.wav b/kcontrol/knotify/sounds/KDE_Close_Window.wav new file mode 100644 index 000000000..920434770 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Close_Window.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Critical_Error.wav b/kcontrol/knotify/sounds/KDE_Critical_Error.wav new file mode 100644 index 000000000..6ae8366a2 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Critical_Error.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop1.wav b/kcontrol/knotify/sounds/KDE_Desktop1.wav new file mode 100644 index 000000000..735c33a82 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop1.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop2.wav b/kcontrol/knotify/sounds/KDE_Desktop2.wav new file mode 100644 index 000000000..211a3be06 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop2.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop3.wav b/kcontrol/knotify/sounds/KDE_Desktop3.wav new file mode 100644 index 000000000..b7b9101f1 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop3.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop4.wav b/kcontrol/knotify/sounds/KDE_Desktop4.wav new file mode 100644 index 000000000..8e6cc5e89 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop4.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop5.wav b/kcontrol/knotify/sounds/KDE_Desktop5.wav new file mode 100644 index 000000000..51db8892c Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop5.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop6.wav b/kcontrol/knotify/sounds/KDE_Desktop6.wav new file mode 100644 index 000000000..664d34072 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop6.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop7.wav b/kcontrol/knotify/sounds/KDE_Desktop7.wav new file mode 100644 index 000000000..a60702fea Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop7.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop8.wav b/kcontrol/knotify/sounds/KDE_Desktop8.wav new file mode 100644 index 000000000..53adf2705 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop8.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_1.ogg b/kcontrol/knotify/sounds/KDE_Desktop_1.ogg new file mode 100644 index 000000000..6c1a73d46 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_2.ogg b/kcontrol/knotify/sounds/KDE_Desktop_2.ogg new file mode 100644 index 000000000..dfdc897a5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_3.ogg b/kcontrol/knotify/sounds/KDE_Desktop_3.ogg new file mode 100644 index 000000000..af838bf5a Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_4.ogg b/kcontrol/knotify/sounds/KDE_Desktop_4.ogg new file mode 100644 index 000000000..bfe0b2498 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_4.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_5.ogg b/kcontrol/knotify/sounds/KDE_Desktop_5.ogg new file mode 100644 index 000000000..1dfa1159d Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_5.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_6.ogg b/kcontrol/knotify/sounds/KDE_Desktop_6.ogg new file mode 100644 index 000000000..8cfe1c11d Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_6.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_7.ogg b/kcontrol/knotify/sounds/KDE_Desktop_7.ogg new file mode 100644 index 000000000..2f6e1dbb8 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_7.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Desktop_8.ogg b/kcontrol/knotify/sounds/KDE_Desktop_8.ogg new file mode 100644 index 000000000..60eebb8a5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Desktop_8.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Dialog_Appear.ogg b/kcontrol/knotify/sounds/KDE_Dialog_Appear.ogg new file mode 100644 index 000000000..a41c410bc Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Dialog_Appear.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Dialog_Appear.wav b/kcontrol/knotify/sounds/KDE_Dialog_Appear.wav new file mode 100644 index 000000000..1f7e37754 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Dialog_Appear.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Dialog_Disappear.ogg b/kcontrol/knotify/sounds/KDE_Dialog_Disappear.ogg new file mode 100644 index 000000000..5005380d1 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Dialog_Disappear.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Dialog_Disappear.wav b/kcontrol/knotify/sounds/KDE_Dialog_Disappear.wav new file mode 100644 index 000000000..1c665305f Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Dialog_Disappear.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Door.ogg b/kcontrol/knotify/sounds/KDE_Door.ogg new file mode 100644 index 000000000..8fe37c373 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Door.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Drum_Break.ogg b/kcontrol/knotify/sounds/KDE_Drum_Break.ogg new file mode 100644 index 000000000..bee81f578 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Drum_Break.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Error.wav b/kcontrol/knotify/sounds/KDE_Error.wav new file mode 100644 index 000000000..ed97e88f5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Error.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Error_1.ogg b/kcontrol/knotify/sounds/KDE_Error_1.ogg new file mode 100644 index 000000000..86f083fe0 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Error_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Error_2.ogg b/kcontrol/knotify/sounds/KDE_Error_2.ogg new file mode 100644 index 000000000..bd92b9451 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Error_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Error_3.ogg b/kcontrol/knotify/sounds/KDE_Error_3.ogg new file mode 100644 index 000000000..e0aab309f Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Error_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Event_1.ogg b/kcontrol/knotify/sounds/KDE_Event_1.ogg new file mode 100644 index 000000000..05e54f6b5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Event_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Event_2.ogg b/kcontrol/knotify/sounds/KDE_Event_2.ogg new file mode 100644 index 000000000..1e183ac21 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Event_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Event_3.ogg b/kcontrol/knotify/sounds/KDE_Event_3.ogg new file mode 100644 index 000000000..18179ffc1 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Event_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Event_4.ogg b/kcontrol/knotify/sounds/KDE_Event_4.ogg new file mode 100644 index 000000000..7ba373346 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Event_4.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Event_5.ogg b/kcontrol/knotify/sounds/KDE_Event_5.ogg new file mode 100644 index 000000000..afdfd67fe Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Event_5.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Glass_Break.ogg b/kcontrol/knotify/sounds/KDE_Glass_Break.ogg new file mode 100644 index 000000000..6d071f066 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Glass_Break.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Keyboard_Key_1.ogg b/kcontrol/knotify/sounds/KDE_Keyboard_Key_1.ogg new file mode 100644 index 000000000..4860c1f0e Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Keyboard_Key_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Logout.wav b/kcontrol/knotify/sounds/KDE_Logout.wav new file mode 100644 index 000000000..dfe5ce00d Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Logout.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Logout_1.ogg b/kcontrol/knotify/sounds/KDE_Logout_1.ogg new file mode 100644 index 000000000..b170afa02 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Logout_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Logout_2.ogg b/kcontrol/knotify/sounds/KDE_Logout_2.ogg new file mode 100644 index 000000000..cb1e46c0e Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Logout_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Logout_3.ogg b/kcontrol/knotify/sounds/KDE_Logout_3.ogg new file mode 100644 index 000000000..f0d62f20d Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Logout_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Notify.wav b/kcontrol/knotify/sounds/KDE_Notify.wav new file mode 100644 index 000000000..6795636c7 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Notify.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Pop.ogg b/kcontrol/knotify/sounds/KDE_Pop.ogg new file mode 100644 index 000000000..14535f67b Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Pop.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Star_Ship_1.ogg b/kcontrol/knotify/sounds/KDE_Star_Ship_1.ogg new file mode 100644 index 000000000..daa451531 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Star_Ship_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Startup.wav b/kcontrol/knotify/sounds/KDE_Startup.wav new file mode 100644 index 000000000..7eff53fce Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Startup.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Startup_1.ogg b/kcontrol/knotify/sounds/KDE_Startup_1.ogg new file mode 100644 index 000000000..2fca9715b Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Startup_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Startup_2.ogg b/kcontrol/knotify/sounds/KDE_Startup_2.ogg new file mode 100644 index 000000000..0c0c7459e Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Startup_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Startup_3.ogg b/kcontrol/knotify/sounds/KDE_Startup_3.ogg new file mode 100644 index 000000000..e1cd9e2a9 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Startup_3.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_TypeWriter_Bell.ogg b/kcontrol/knotify/sounds/KDE_TypeWriter_Bell.ogg new file mode 100644 index 000000000..090fdfe17 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_TypeWriter_Bell.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_TypeWriter_End_Of_Line.ogg b/kcontrol/knotify/sounds/KDE_TypeWriter_End_Of_Line.ogg new file mode 100644 index 000000000..80be17f62 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_TypeWriter_End_Of_Line.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_TypeWriter_Key_1.ogg b/kcontrol/knotify/sounds/KDE_TypeWriter_Key_1.ogg new file mode 100644 index 000000000..5856589a5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_TypeWriter_Key_1.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_TypeWriter_Key_2.ogg b/kcontrol/knotify/sounds/KDE_TypeWriter_Key_2.ogg new file mode 100644 index 000000000..fcd143f70 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_TypeWriter_Key_2.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_TypeWriter_Reload.ogg b/kcontrol/knotify/sounds/KDE_TypeWriter_Reload.ogg new file mode 100644 index 000000000..5258bc4ba Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_TypeWriter_Reload.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_TypeWriter_Scroll.ogg b/kcontrol/knotify/sounds/KDE_TypeWriter_Scroll.ogg new file mode 100644 index 000000000..906646be6 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_TypeWriter_Scroll.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Vox_Ahem.ogg b/kcontrol/knotify/sounds/KDE_Vox_Ahem.ogg new file mode 100644 index 000000000..d047942d9 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Vox_Ahem.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Vox_Yo.ogg b/kcontrol/knotify/sounds/KDE_Vox_Yo.ogg new file mode 100644 index 000000000..3f885ed67 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Vox_Yo.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Warp.ogg b/kcontrol/knotify/sounds/KDE_Warp.ogg new file mode 100644 index 000000000..de0f06caa Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Warp.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Water_Drop.ogg b/kcontrol/knotify/sounds/KDE_Water_Drop.ogg new file mode 100644 index 000000000..b92df084f Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Water_Drop.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Close.ogg b/kcontrol/knotify/sounds/KDE_Window_Close.ogg new file mode 100644 index 000000000..e9cd12878 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Close.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Close.wav b/kcontrol/knotify/sounds/KDE_Window_Close.wav new file mode 100644 index 000000000..67901a4bf Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Close.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_DeIconify.ogg b/kcontrol/knotify/sounds/KDE_Window_DeIconify.ogg new file mode 100644 index 000000000..b269594ef Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_DeIconify.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_DeIconify.wav b/kcontrol/knotify/sounds/KDE_Window_DeIconify.wav new file mode 100644 index 000000000..0ece877d5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_DeIconify.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Hide.ogg b/kcontrol/knotify/sounds/KDE_Window_Hide.ogg new file mode 100644 index 000000000..9e625484c Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Hide.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Iconify.ogg b/kcontrol/knotify/sounds/KDE_Window_Iconify.ogg new file mode 100644 index 000000000..113c2c0d5 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Iconify.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Iconify.wav b/kcontrol/knotify/sounds/KDE_Window_Iconify.wav new file mode 100644 index 000000000..55b4e4598 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Iconify.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Maximize.wav b/kcontrol/knotify/sounds/KDE_Window_Maximize.wav new file mode 100644 index 000000000..41771f693 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Maximize.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Open.ogg b/kcontrol/knotify/sounds/KDE_Window_Open.ogg new file mode 100644 index 000000000..7957c9084 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Open.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Open.wav b/kcontrol/knotify/sounds/KDE_Window_Open.wav new file mode 100644 index 000000000..d7db787c1 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Open.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Shade_Down.ogg b/kcontrol/knotify/sounds/KDE_Window_Shade_Down.ogg new file mode 100644 index 000000000..62cd4bb1a Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Shade_Down.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Shade_Down.wav b/kcontrol/knotify/sounds/KDE_Window_Shade_Down.wav new file mode 100644 index 000000000..59b8ae5ab Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Shade_Down.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Shade_Up.ogg b/kcontrol/knotify/sounds/KDE_Window_Shade_Up.ogg new file mode 100644 index 000000000..74aae0863 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Shade_Up.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Shade_Up.wav b/kcontrol/knotify/sounds/KDE_Window_Shade_Up.wav new file mode 100644 index 000000000..a5a31a50c Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Shade_Up.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Sticky.ogg b/kcontrol/knotify/sounds/KDE_Window_Sticky.ogg new file mode 100644 index 000000000..55c4894b0 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Sticky.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_Sticky.wav b/kcontrol/knotify/sounds/KDE_Window_Sticky.wav new file mode 100644 index 000000000..b89d383bd Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_Sticky.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_UnHide.ogg b/kcontrol/knotify/sounds/KDE_Window_UnHide.ogg new file mode 100644 index 000000000..2cdd04d04 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_UnHide.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_UnMaximize.wav b/kcontrol/knotify/sounds/KDE_Window_UnMaximize.wav new file mode 100644 index 000000000..eb19400fd Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_UnMaximize.wav differ diff --git a/kcontrol/knotify/sounds/KDE_Window_UnSticky.ogg b/kcontrol/knotify/sounds/KDE_Window_UnSticky.ogg new file mode 100644 index 000000000..4de9d0ee1 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_UnSticky.ogg differ diff --git a/kcontrol/knotify/sounds/KDE_Window_UnSticky.wav b/kcontrol/knotify/sounds/KDE_Window_UnSticky.wav new file mode 100644 index 000000000..a5943b9e9 Binary files /dev/null and b/kcontrol/knotify/sounds/KDE_Window_UnSticky.wav differ diff --git a/kcontrol/knotify/sounds/Makefile.am b/kcontrol/knotify/sounds/Makefile.am new file mode 100644 index 000000000..0ff4e2468 --- /dev/null +++ b/kcontrol/knotify/sounds/Makefile.am @@ -0,0 +1,113 @@ +sounds_data_DATA = \ + KDE_Beep_Ahem.wav \ + KDE_Beep_Beep.wav \ + KDE_Beep_Bottles.wav \ + KDE_Beep_ClassicBeep.wav \ + KDE_Beep_ClockChime.wav \ + KDE_Beep_Connect.wav \ + KDE_Beep_Door.wav \ + KDE_Beep_Honk.wav \ + KDE_Beep_Lightning.wav \ + KDE_Beep_Pop.wav \ + KDE_Beep_RimShot.wav \ + KDE_Beep_RingRing.wav \ + KDE_Beep_ShortBeep.wav \ + KDE_Beep_Yo.wav \ + KDE_Click.wav \ + KDE_Close_Window.wav \ + KDE_Critical_Error.wav \ + KDE_Desktop1.wav \ + KDE_Desktop2.wav \ + KDE_Desktop3.wav \ + KDE_Desktop4.wav \ + KDE_Desktop5.wav \ + KDE_Desktop6.wav \ + KDE_Desktop7.wav \ + KDE_Desktop8.wav \ + KDE_Dialog_Appear.wav \ + KDE_Dialog_Disappear.wav \ + KDE_Error.wav \ + KDE_Logout.wav \ + KDE_Notify.wav \ + KDE_Startup.wav \ + KDE_Window_Close.wav \ + KDE_Window_DeIconify.wav \ + KDE_Window_Iconify.wav \ + KDE_Window_Maximize.wav \ + KDE_Window_Open.wav \ + KDE_Window_Shade_Down.wav \ + KDE_Window_Shade_Up.wav \ + KDE_Window_Sticky.wav \ + KDE_Window_UnMaximize.wav \ + KDE_Window_UnSticky.wav \ + KDE_Beep.ogg \ + KDE_Beep_Car.ogg \ + KDE_Beep_Classic.ogg \ + KDE_Beep_Connect.ogg \ + KDE_Beep_Digital_1.ogg \ + KDE_Beep_Digital_2.ogg \ + KDE_Beep_Double.ogg \ + KDE_Beep_Harsh.ogg \ + KDE_Beep_Phone_1.ogg \ + KDE_Beep_Phone_2.ogg \ + KDE_Bottles.ogg \ + KDE_Chimes_1.ogg \ + KDE_Chimes_2.ogg \ + KDE_Chimes_3.ogg \ + KDE_Click_1.ogg \ + KDE_Click_2.ogg \ + KDE_Click_3.ogg \ + KDE_Desktop_1.ogg \ + KDE_Desktop_2.ogg \ + KDE_Desktop_3.ogg \ + KDE_Desktop_4.ogg \ + KDE_Desktop_5.ogg \ + KDE_Desktop_6.ogg \ + KDE_Desktop_7.ogg \ + KDE_Desktop_8.ogg \ + KDE_Dialog_Appear.ogg \ + KDE_Dialog_Disappear.ogg \ + KDE_Door.ogg \ + KDE_Drum_Break.ogg \ + KDE_Error_1.ogg \ + KDE_Error_2.ogg \ + KDE_Error_3.ogg \ + KDE_Event_1.ogg \ + KDE_Event_2.ogg \ + KDE_Event_3.ogg \ + KDE_Event_4.ogg \ + KDE_Event_5.ogg \ + KDE_Glass_Break.ogg \ + KDE_Keyboard_Key_1.ogg \ + KDE_Logout_1.ogg \ + KDE_Logout_2.ogg \ + KDE_Logout_3.ogg \ + KDE_Pop.ogg \ + KDE_Star_Ship_1.ogg \ + KDE_Startup_1.ogg \ + KDE_Startup_2.ogg \ + KDE_Startup_3.ogg \ + KDE_TypeWriter_Bell.ogg \ + KDE_TypeWriter_End_Of_Line.ogg \ + KDE_TypeWriter_Key_1.ogg \ + KDE_TypeWriter_Key_2.ogg \ + KDE_TypeWriter_Reload.ogg \ + KDE_TypeWriter_Scroll.ogg \ + KDE_Vox_Ahem.ogg \ + KDE_Vox_Yo.ogg \ + KDE_Warp.ogg \ + KDE_Water_Drop.ogg \ + KDE_Window_Close.ogg \ + KDE_Window_DeIconify.ogg \ + KDE_Window_Hide.ogg \ + KDE_Window_Iconify.ogg \ + KDE_Window_Open.ogg \ + KDE_Window_Shade_Down.ogg \ + KDE_Window_Shade_Up.ogg \ + KDE_Window_Sticky.ogg \ + KDE_Window_UnHide.ogg \ + KDE_Window_UnSticky.ogg + +sounds_datadir = $(kde_sounddir) + +EXTRA_DIST = $(sounds_data_DATA) diff --git a/kcontrol/konq/Makefile.am b/kcontrol/konq/Makefile.am new file mode 100644 index 000000000..80bd7591d --- /dev/null +++ b/kcontrol/konq/Makefile.am @@ -0,0 +1,30 @@ +AM_CPPFLAGS = -I$(top_srcdir)/libkonq $(all_includes) +AM_LDFLAGS = $(all_libraries) + +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_konq.la + +kcm_konq_la_SOURCES = behaviour.cpp desktop.cpp rootopts.cpp \ + fontopts.cpp previews.cpp browser.cpp \ + uiserver.stub main.cpp desktopbehavior_impl.cpp \ + desktopbehavior.ui + +kcm_konq_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_konq_la_LIBADD = $(LIB_KIO) $(LIB_KDEUI) $(LIB_KSYCOCA) $(LIB_KUTILS) + +kcm_konq_la_DATA = overlapping.png onlyone.png +kcm_konq_ladir = $(kde_datadir)/kcontrol/pics + +kcmkonq_data_DATA = filebehavior.desktop fileappearance.desktop filepreviews.desktop +kcmkonq_datadir = $(kde_appsdir)/.hidden + +xdg_apps_DATA = desktopbehavior.desktop desktop.desktop desktoppath.desktop filebrowser.desktop + +uiserver_DIR = $(kde_includes)/kio + +EXTRA_DIST = $(kcm_konq_la_DATA) $(kcmkonq_data_DATA) + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmkonq.pot + diff --git a/kcontrol/konq/README b/kcontrol/konq/README new file mode 100644 index 000000000..11ad5c7b5 --- /dev/null +++ b/kcontrol/konq/README @@ -0,0 +1,19 @@ +This module contains a combination of configuration items which at first +sight seem to be a rather weird combination. + +It contains configuration for: +* KDesktop +* Konqueror +* Number of virtual desktops. (Handled by KWin via NETWM) +* Behaviour of desktop borders (Handled by KWin) + +The reason for this combination is that the configuration of KDesktop and +Konqueror is very similar codewise. On the other hand, the number of virtual +desktops, border behaviour and the other KDesktop options belongs together +from a user interface point of view. The result is that all these options +are now grouped together here. + +In total it provide 3 configuration modules: +* desktop.desktop (Desktop configuration) +* kcmkonq.desktop (File browser configuration) +* virtualdesktops.desktop (Configuration of virtual desktops) diff --git a/kcontrol/konq/behaviour.cpp b/kcontrol/konq/behaviour.cpp new file mode 100644 index 000000000..4bb782eeb --- /dev/null +++ b/kcontrol/konq/behaviour.cpp @@ -0,0 +1,285 @@ +/** + * Copyright (c) 2001 David Faure + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +// Behaviour options for konqueror + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "behaviour.h" + +KBehaviourOptions::KBehaviourOptions(KConfig *config, QString group, QWidget *parent, const char * ) + : KCModule(parent, "kcmkonq"), g_pConfig(config), groupname(group) +{ + QLabel * label; + + setQuickHelp( i18n("

    Konqueror Behavior

    You can configure how Konqueror behaves as a file manager here.")); + + QVBoxLayout *lay = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + + QVGroupBox * miscGb = new QVGroupBox(i18n("Misc Options"), this); + lay->addWidget( miscGb ); + QHBox *hbox = new QHBox(miscGb); + QVBox *vbox = new QVBox(hbox); + + // ---- + + winPixmap = new QLabel(hbox); + winPixmap->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + winPixmap->setPixmap(QPixmap(locate("data", + "kcontrol/pics/onlyone.png"))); + winPixmap->setFixedSize( winPixmap->sizeHint() ); + + + // ---- + + cbNewWin = new QCheckBox(i18n("Open folders in separate &windows"), vbox); + QWhatsThis::add( cbNewWin, i18n("If this option is checked, Konqueror will open a new window when " + "you open a folder, rather than showing that folder's contents in the current window.")); + connect(cbNewWin, SIGNAL(clicked()), this, SLOT(changed())); + connect(cbNewWin, SIGNAL(toggled(bool)), SLOT(updateWinPixmap(bool))); + + // ---- + + cbListProgress = new QCheckBox( i18n( "&Show network operations in a single window" ), vbox ); + connect(cbListProgress, SIGNAL(clicked()), this, SLOT(changed())); + + QWhatsThis::add( cbListProgress, i18n("Checking this option will group the" + " progress information for all network file transfers into a single window" + " with a list. When the option is not checked, all transfers appear in a" + " separate window.") ); + + + // -- + + cbShowTips = new QCheckBox( i18n( "Show file &tips" ), vbox ); + connect(cbShowTips, SIGNAL(clicked()), this, SLOT(changed())); + + QWhatsThis::add( cbShowTips, i18n("Here you can control if, when moving the mouse over a file, you want to see a " + "small popup window with additional information about that file")); + + connect(cbShowTips, SIGNAL(toggled(bool)), SLOT(slotShowTips(bool))); +/* + //connect(cbShowTips, SIGNAL(toggled(bool)), sbToolTip, SLOT(setEnabled(bool))); + //connect(cbShowTips, SIGNAL(toggled(bool)), fileTips, SLOT(setEnabled(bool))); + fileTips->setBuddy(sbToolTip); + QString tipstr = i18n("If you move the mouse over a file, you usually see a small popup window that shows some " + "additional information about that file. Here, you can set how many items of information " + "are displayed"); + QWhatsThis::add( fileTips, tipstr ); + QWhatsThis::add( sbToolTip, tipstr ); +*/ + + QHBox *hboxpreview = new QHBox(vbox); + QWidget* spacer = new QWidget( hboxpreview ); + spacer->setMinimumSize( 20, 0 ); + spacer->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Minimum ); + + cbShowPreviewsInTips = new QCheckBox( i18n( "Show &previews in file tips" ), hboxpreview ); + connect(cbShowPreviewsInTips, SIGNAL(clicked()), this, SLOT(changed())); + + QWhatsThis::add( cbShowPreviewsInTips, i18n("Here you can control if you want the " + "popup window to contain a larger preview for the file, when moving the mouse over it.")); + + cbRenameDirectlyIcon = new QCheckBox(i18n("Rename icons in&line"), vbox); + QWhatsThis::add(cbRenameDirectlyIcon, i18n("Checking this option will allow files to be " + "renamed by clicking directly on the icon name. ")); + connect(cbRenameDirectlyIcon, SIGNAL(clicked()), this, SLOT(changed())); + + QHBoxLayout *hlay = new QHBoxLayout( lay ); + + label = new QLabel(i18n("Home &URL:"), this); + hlay->addWidget( label ); + + homeURL = new KURLRequester(this); + homeURL->setMode(KFile::Directory); + homeURL->setCaption(i18n("Select Home Folder")); + hlay->addWidget( homeURL ); + connect(homeURL, SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + label->setBuddy(homeURL); + + QString homestr = i18n("This is the URL (e.g. a folder or a web page) where " + "Konqueror will jump to when the \"Home\" button is pressed. " + "This is usually your home folder, symbolized by a 'tilde' (~)."); + QWhatsThis::add( label, homestr ); + QWhatsThis::add( homeURL, homestr ); + + lay->addItem(new QSpacerItem(0,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + cbShowDeleteCommand = new QCheckBox( i18n( "Show 'Delete' context me&nu entries which bypass the trashcan" ), this ); + lay->addWidget( cbShowDeleteCommand ); + connect(cbShowDeleteCommand, SIGNAL(clicked()), this, SLOT(changed())); + + QWhatsThis::add( cbShowDeleteCommand, i18n("Check this if you want 'Delete' menu commands to be displayed " + "on the desktop and in the file manager's context menus. " + "You can always delete files by holding the Shift key " + "while calling 'Move to Trash'.")); + + QButtonGroup *bg = new QVButtonGroup( i18n("Ask Confirmation For"), this ); + bg->layout()->setSpacing( KDialog::spacingHint() ); + QWhatsThis::add( bg, i18n("This option tells Konqueror whether to ask" + " for a confirmation when you \"delete\" a file." + "
    • Move To Trash: moves the file to your trash folder," + " from where it can be recovered very easily.
    • " + "
    • Delete: simply deletes the file.
    • " + "
    ") ); + + connect(bg, SIGNAL( clicked( int ) ), SLOT( changed() )); + + cbMoveToTrash = new QCheckBox( i18n("&Move to trash"), bg ); + + cbDelete = new QCheckBox( i18n("D&elete"), bg ); + + lay->addWidget(bg); + + lay->addStretch(); + + load(); +} + +KBehaviourOptions::~KBehaviourOptions() +{ +} + +void KBehaviourOptions::slotShowTips(bool b) +{ +// sbToolTip->setEnabled( b ); + cbShowPreviewsInTips->setEnabled( b ); +// fileTips->setEnabled( b ); + +} + +void KBehaviourOptions::load() +{ + load( false ); +} + +void KBehaviourOptions::load( bool useDefaults ) +{ + g_pConfig->setReadDefaults( useDefaults ); + + g_pConfig->setGroup( groupname ); + cbNewWin->setChecked( g_pConfig->readBoolEntry("AlwaysNewWin", false) ); + updateWinPixmap(cbNewWin->isChecked()); + + homeURL->setURL(g_pConfig->readPathEntry("HomeURL", "~")); + + bool stips = g_pConfig->readBoolEntry( "ShowFileTips", true ); + cbShowTips->setChecked( stips ); + slotShowTips( stips ); + + bool showPreviewsIntips = g_pConfig->readBoolEntry( "ShowPreviewsInFileTips", true ); + cbShowPreviewsInTips->setChecked( showPreviewsIntips ); + + cbRenameDirectlyIcon->setChecked( g_pConfig->readBoolEntry("RenameIconDirectly", DEFAULT_RENAMEICONDIRECTLY ) ); + + KConfig globalconfig("kdeglobals", true, false); + globalconfig.setGroup( "KDE" ); + cbShowDeleteCommand->setChecked( globalconfig.readBoolEntry("ShowDeleteCommand", false) ); + +// if (!stips) sbToolTip->setEnabled( false ); + if (!stips) cbShowPreviewsInTips->setEnabled( false ); + +// sbToolTip->setValue( g_pConfig->readNumEntry( "FileTipItems", 6 ) ); + + KConfig config("uiserverrc"); + config.setGroup( "UIServer" ); + + cbListProgress->setChecked( config.readBoolEntry( "ShowList", false ) ); + + g_pConfig->setGroup( "Trash" ); + cbMoveToTrash->setChecked( g_pConfig->readBoolEntry("ConfirmTrash", DEFAULT_CONFIRMTRASH) ); + cbDelete->setChecked( g_pConfig->readBoolEntry("ConfirmDelete", DEFAULT_CONFIRMDELETE) ); + + emit changed( useDefaults ); +} + +void KBehaviourOptions::defaults() +{ + load( true ); +} + +void KBehaviourOptions::save() +{ + g_pConfig->setGroup( groupname ); + + g_pConfig->writeEntry( "AlwaysNewWin", cbNewWin->isChecked() ); + g_pConfig->writePathEntry( "HomeURL", homeURL->url().isEmpty()? QString("~") : homeURL->url() ); + + g_pConfig->writeEntry( "ShowFileTips", cbShowTips->isChecked() ); + g_pConfig->writeEntry( "ShowPreviewsInFileTips", cbShowPreviewsInTips->isChecked() ); +// g_pConfig->writeEntry( "FileTipsItems", sbToolTip->value() ); + + g_pConfig->writeEntry( "RenameIconDirectly", cbRenameDirectlyIcon->isChecked()); + + KConfig globalconfig("kdeglobals", false, false); + globalconfig.setGroup( "KDE" ); + globalconfig.writeEntry( "ShowDeleteCommand", cbShowDeleteCommand->isChecked()); + globalconfig.sync(); + + g_pConfig->setGroup( "Trash" ); + g_pConfig->writeEntry( "ConfirmTrash", cbMoveToTrash->isChecked()); + g_pConfig->writeEntry( "ConfirmDelete", cbDelete->isChecked()); + g_pConfig->sync(); + + // UIServer setting + KConfig config("uiserverrc"); + config.setGroup( "UIServer" ); + config.writeEntry( "ShowList", cbListProgress->isChecked() ); + config.sync(); + // Tell the running server + if ( kapp->dcopClient()->isApplicationRegistered( "kio_uiserver" ) ) + { + UIServer_stub uiserver( "kio_uiserver", "UIServer" ); + uiserver.setListMode( cbListProgress->isChecked() ); + } + + // Send signal to konqueror + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); + kapp->dcopClient()->send( "kdesktop", "KDesktopIface", "configure()", data ); +} + +void KBehaviourOptions::updateWinPixmap(bool b) +{ + if (b) + winPixmap->setPixmap(QPixmap(locate("data", + "kcontrol/pics/overlapping.png"))); + else + winPixmap->setPixmap(QPixmap(locate("data", + "kcontrol/pics/onlyone.png"))); +} + +#include "behaviour.moc" diff --git a/kcontrol/konq/behaviour.h b/kcontrol/konq/behaviour.h new file mode 100644 index 000000000..9db3a36ba --- /dev/null +++ b/kcontrol/konq/behaviour.h @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2001 David Faure + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __BEHAVIOUR_H__ +#define __BEHAVIOUR_H__ + +#include + +class QCheckBox; +class QLabel; +class QRadioButton; +class QSpinBox; +class QVButtonGroup; + +class KConfig; +class KURLRequester; + +//----------------------------------------------------------------------------- + + +class KBehaviourOptions : public KCModule +{ + Q_OBJECT +public: + KBehaviourOptions(KConfig *config, QString group, QWidget *parent=0, const char *name=0); + ~KBehaviourOptions(); + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +protected slots: + + void updateWinPixmap(bool); + void slotShowTips(bool); +private: + + KConfig *g_pConfig; + QString groupname; + + QCheckBox *cbNewWin; + QCheckBox *cbListProgress; + + QLabel *winPixmap; + + KURLRequester *homeURL; + + QVButtonGroup *bgOneProcess; + //QLabel *fileTips; + //QSpinBox *sbToolTip; + QCheckBox *cbShowTips; + QCheckBox *cbShowPreviewsInTips; + QCheckBox *cbRenameDirectlyIcon; + + QCheckBox *cbMoveToTrash; + QCheckBox *cbDelete; + QCheckBox *cbShowDeleteCommand; +}; + +#endif // __BEHAVIOUR_H__ diff --git a/kcontrol/konq/browser.cpp b/kcontrol/konq/browser.cpp new file mode 100644 index 000000000..5ab82579d --- /dev/null +++ b/kcontrol/konq/browser.cpp @@ -0,0 +1,109 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Waldo Bastian + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 +#include +#include + +#include +#include +#include +#include + +#include "behaviour.h" +#include "fontopts.h" +#include "previews.h" +#include "browser.h" + +KBrowserOptions::KBrowserOptions(KConfig *config, QString group, QWidget *parent, const char *name) + : KCModule( parent, "kcmkonq" ) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + QTabWidget *tab = new QTabWidget(this); + layout->addWidget(tab); + + appearance = new KonqFontOptions(config, group, false, tab, name); + appearance->layout()->setMargin( KDialog::marginHint() ); + + behavior = new KBehaviourOptions(config, group, tab, name); + behavior->layout()->setMargin( KDialog::marginHint() ); + + previews = new KPreviewOptions(tab, name); + previews->layout()->setMargin( KDialog::marginHint() ); + + kuick = KCModuleLoader::loadModule("kcmkuick", tab); + + tab->addTab(appearance, i18n("&Appearance")); + tab->addTab(behavior, i18n("&Behavior")); + tab->addTab(previews, i18n("&Previews && Meta-Data")); + if (kuick) + { + kuick->layout()->setMargin( KDialog::marginHint() ); + tab->addTab(kuick, i18n("&Quick Copy && Move")); + } + + connect(appearance, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); + connect(behavior, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); + connect(previews, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); + if (kuick) + connect(kuick, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); + + connect(tab, SIGNAL(currentChanged(QWidget *)), + this, SIGNAL(quickHelpChanged())); + m_tab = tab; +} + +void KBrowserOptions::load() +{ + appearance->load(); + behavior->load(); + previews->load(); + if (kuick) + kuick->load(); +} + +void KBrowserOptions::defaults() +{ + appearance->defaults(); + behavior->defaults(); + previews->defaults(); + if (kuick) + kuick->defaults(); +} + +void KBrowserOptions::save() +{ + appearance->save(); + behavior->save(); + previews->save(); + if (kuick) + kuick->save(); +} + +QString KBrowserOptions::quickHelp() const +{ + QWidget *w = m_tab->currentPage(); + if (w->inherits("KCModule")) + { + KCModule *m = static_cast(w); + return m->quickHelp(); + } + return QString::null; +} + +#include "browser.moc" diff --git a/kcontrol/konq/browser.h b/kcontrol/konq/browser.h new file mode 100644 index 000000000..26727de1b --- /dev/null +++ b/kcontrol/konq/browser.h @@ -0,0 +1,50 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Waldo Bastian + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KBROWSER_OPTIONS_H__ +#define __KBROWSER_OPTIONS_H__ + +#include + +class KConfig; +class QTabWidget; + +//----------------------------------------------------------------------------- + +class KBrowserOptions : public KCModule +{ + Q_OBJECT +public: + KBrowserOptions(KConfig *config, QString group, QWidget *parent=0, const char *name=0); + + virtual void load(); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + +private: + + KCModule *appearance; + KCModule *behavior; + KCModule *previews; + KCModule *kuick; + QTabWidget *m_tab; +}; + +#endif diff --git a/kcontrol/konq/desktop.cpp b/kcontrol/konq/desktop.cpp new file mode 100644 index 000000000..c2478b587 --- /dev/null +++ b/kcontrol/konq/desktop.cpp @@ -0,0 +1,246 @@ +// -*- c-basic-offset: 2 -*- +/** + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "desktop.h" +#include "desktop.moc" + +extern "C" +{ + KDE_EXPORT KCModule *create_virtualdesktops(QWidget *parent, const char * /*name*/) + { + return new KDesktopConfig(parent, "kcmkonq"); + } +} + +// I'm using lineedits by intention as it makes sence to be able +// to see all desktop names at the same time. It also makes sense to +// be able to TAB through those line edits fast. So don't send me mails +// asking why I did not implement a more intelligent/smaller GUI. + +KDesktopConfig::KDesktopConfig(QWidget *parent, const char * /*name*/) + : KCModule(parent, "kcmkonq") +{ + + setQuickHelp( i18n("

    Multiple Desktops

    In this module, you can configure how many virtual desktops you want and how these should be labeled.")); + + Q_ASSERT(maxDesktops % 2 == 0); + + QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + // number group + QGroupBox *number_group = new QGroupBox(this); + + QHBoxLayout *lay = new QHBoxLayout(number_group, + KDialog::marginHint(), + KDialog::spacingHint()); + + QLabel *label = new QLabel(i18n("N&umber of desktops: "), number_group); + _numInput = new KIntNumInput(4, number_group); + _numInput->setRange(1, maxDesktops, 1, true); + connect(_numInput, SIGNAL(valueChanged(int)), SLOT(slotValueChanged(int))); + connect(_numInput, SIGNAL(valueChanged(int)), SLOT( changed() )); + label->setBuddy( _numInput ); + QString wtstr = i18n( "Here you can set how many virtual desktops you want on your KDE desktop. Move the slider to change the value." ); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( _numInput, wtstr ); + + lay->addWidget(label); + lay->addWidget(_numInput); + lay->setStretchFactor( _numInput, 2 ); + + layout->addWidget(number_group); + + // name group + QGroupBox *name_group = new QGroupBox(i18n("Desktop &Names"), this); + + name_group->setColumnLayout(4, Horizontal); + + for(int i = 0; i < (maxDesktops/2); i++) + { + _nameLabel[i] = new QLabel(i18n("Desktop %1:").arg(i+1), name_group); + _nameInput[i] = new KLineEdit(name_group); + _nameLabel[i+(maxDesktops/2)] = new QLabel(i18n("Desktop %1:").arg(i+(maxDesktops/2)+1), name_group); + _nameInput[i+(maxDesktops/2)] = new KLineEdit(name_group); + QWhatsThis::add( _nameLabel[i], i18n( "Here you can enter the name for desktop %1" ).arg( i+1 ) ); + QWhatsThis::add( _nameInput[i], i18n( "Here you can enter the name for desktop %1" ).arg( i+1 ) ); + QWhatsThis::add( _nameLabel[i+(maxDesktops/2)], i18n( "Here you can enter the name for desktop %1" ).arg( i+(maxDesktops/2)+1 ) ); + QWhatsThis::add( _nameInput[i+(maxDesktops/2)], i18n( "Here you can enter the name for desktop %1" ).arg( i+(maxDesktops/2)+1 ) ); + + connect(_nameInput[i], SIGNAL(textChanged(const QString&)), + SLOT( changed() )); + connect(_nameInput[i+(maxDesktops/2)], SIGNAL(textChanged(const QString&)), + SLOT( changed() )); + } + + for(int i = 1; i < maxDesktops; i++) + setTabOrder( _nameInput[i-1], _nameInput[i] ); + + layout->addWidget(name_group); + + _wheelOption = new QCheckBox(i18n("Mouse wheel over desktop background switches desktop"), this); + connect(_wheelOption,SIGNAL(toggled(bool)), SLOT( changed() )); + + layout->addWidget(_wheelOption); + layout->addStretch(1); + + load(); +} + +void KDesktopConfig::load() +{ + load( false ); +} + +void KDesktopConfig::load( bool useDefaults ) +{ + // get number of desktops + NETRootInfo info( qt_xdisplay(), NET::NumberOfDesktops | NET::DesktopNames ); + int n = info.numberOfDesktops(); + + int konq_screen_number = 0; + if (qt_xdisplay()) + konq_screen_number = DefaultScreen(qt_xdisplay()); + + QCString groupname; + if (konq_screen_number == 0) + groupname = "Desktops"; + else + groupname.sprintf("Desktops-screen-%d", konq_screen_number); + + KConfig * kwinconfig = new KConfig("kwinrc"); + + kwinconfig->setReadDefaults( useDefaults ); + + kwinconfig->setGroup("Desktops"); + for(int i = 1; i <= maxDesktops; i++) + { + QString key_name(QString("Name_") + QString::number(i)); + QString name = QString::fromUtf8(info.desktopName(i)); + if (name.isEmpty()) // Get name from configuration if none is set in the WM. + { + name = kwinconfig->readEntry(key_name, i18n("Desktop %1").arg(i)); + } + _nameInput[i-1]->setText(name); + + // Is this entry immutable or not in the range of configured desktops? + _labelImmutable[i - 1] = kwinconfig->entryIsImmutable(key_name); + _nameInput[i-1]->setEnabled(i <= n && !_labelImmutable[i - 1]); + } + + _numInput->setEnabled(!kwinconfig->entryIsImmutable("Number")); + + delete kwinconfig; + kwinconfig = 0; + + QString configfile; + if (konq_screen_number == 0) + configfile = "kdesktoprc"; + else + configfile.sprintf("kdesktop-screen-%drc", konq_screen_number); + + KConfig *config = new KConfig(configfile, false, false); + + config->setReadDefaults( useDefaults ); + + config->setGroup("Mouse Buttons"); + _wheelOption->setChecked(config->readBoolEntry("WheelSwitchesWorkspace",false)); + + _wheelOptionImmutable = config->entryIsImmutable("WheelSwitchesWorkspace"); + + if (_wheelOptionImmutable || n<2) + _wheelOption->setEnabled( false ); + + delete config; + config = 0; + + _numInput->setValue(n); + emit changed( useDefaults ); +} + +void KDesktopConfig::save() +{ + NETRootInfo info( qt_xdisplay(), NET::NumberOfDesktops | NET::DesktopNames ); + // set desktop names + for(int i = 1; i <= maxDesktops; i++) + { + info.setDesktopName(i, (_nameInput[i-1]->text()).utf8()); + info.activate(); + } + // set number of desktops + info.setNumberOfDesktops(_numInput->value()); + info.activate(); + + XSync(qt_xdisplay(), FALSE); + + int konq_screen_number = 0; + if (qt_xdisplay()) + konq_screen_number = DefaultScreen(qt_xdisplay()); + + QCString appname; + if (konq_screen_number == 0) + appname = "kdesktop"; + else + appname.sprintf("kdesktop-screen-%d", konq_screen_number); + + KConfig *config = new KConfig(appname + "rc"); + config->setGroup("Mouse Buttons"); + config->writeEntry("WheelSwitchesWorkspace", _wheelOption->isChecked()); + delete config; + + // Tell kdesktop about the new config file + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + QByteArray data; + + kapp->dcopClient()->send( appname, "KDesktopIface", "configure()", data ); + + emit changed(false); +} + +void KDesktopConfig::defaults() +{ + load( true ); +} + +void KDesktopConfig::slotValueChanged(int n) +{ + for(int i = 0; i < maxDesktops; i++) + { _nameInput[i]->setEnabled(i < n && !_labelImmutable[i]); } + if (!_wheelOptionImmutable) + { _wheelOption->setEnabled(n>1); } + emit changed(true); +} diff --git a/kcontrol/konq/desktop.desktop b/kcontrol/konq/desktop.desktop new file mode 100644 index 000000000..3e203827e --- /dev/null +++ b/kcontrol/konq/desktop.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/desktop/index.html#desktop-number +Icon=desktop +Exec=kcmshell desktop + + +X-KDE-Library=konq +X-KDE-FactoryName=ddesktop +X-KDE-ParentApp=kcontrol + +Name=Multiple Desktops +Name[af]=Veelvuldige Werkskerms +Name[ar]=أسطح مكتب متعددة +Name[az]=Masa Üstləri +Name[be]=Некалькі працоўных сталоў +Name[bg]=Работни плотове +Name[bn]=একাধিক ডেস্কটপ +Name[br]=Lies burev +Name[bs]=Višestruki desktopi +Name[ca]=Múltiples escriptoris +Name[cs]=Virtuální plochy +Name[csb]=Wiele pùltów +Name[cy]=Penbyrddau Lluosol +Name[da]=Flere desktoppe +Name[de]=Virtuelle Arbeitsflächen +Name[el]=Πολλαπλές επιφάνειες εργασίας +Name[eo]=Pluraj tabuloj +Name[es]=Escritorios múltiples +Name[et]=Virtuaalsed töölauad +Name[eu]=Mahaigain anitz +Name[fa]=رومیزیهای چندگانه +Name[fi]=Virtuaalityöpöydät +Name[fr]=Bureaux multiples +Name[fy]=Firtuele buroblêden +Name[ga]=Deasca Iomadúla +Name[gl]=Múltiples Escritórios +Name[he]=שולחנות עבודה מרובים +Name[hi]=अनेक डेस्कटॉप +Name[hr]=Višestruke radne površine +Name[hu]=Virtuális munkaasztalok +Name[is]=Sýndarskjáborð +Name[it]=Desktop multipli +Name[ja]=デスクトップの数 +Name[ka]=მრავალ დაფიანი რეჟიმი +Name[kk]=Виртуалды үстелдер +Name[km]=ផ្ទៃតុ​ច្រើន +Name[ko]=다중 데스크톱 +Name[lo]=ພື້່ນທີ່ືທຳງານສະເຫມືອນ +Name[lt]=Daugelis darbastalių +Name[lv]=Vairākas Darbvirsmas +Name[mk]=Повеќе површини +Name[mn]=Виртуал ажлын талбар +Name[ms]=Berbilang Desktop +Name[mt]=Desktops Multipli +Name[nb]=Flere skrivebord +Name[nds]=Mehr as een Schriefdisch +Name[ne]=बहुविध डेस्कटप +Name[nl]=Virtuele bureaubladen +Name[nn]=Fleire skrivebord +Name[nso]=Di-Desktop tsa Bontshi +Name[pa]=ਬਹੁ ਵੇਹੜਾ +Name[pl]=Wiele pulpitów +Name[pt]=Ecrãs Múltiplos +Name[pt_BR]=Múltiplas Áreas de Trabalho +Name[ro]=Ecrane multiple +Name[ru]=Виртуальные рабочие столы +Name[rw]=Ibiro Bitandukanye +Name[se]=Máŋggaid čállinbeavddi +Name[sk]=Virtuálne pracovné plochy +Name[sl]=Več namizij +Name[sr]=Вишеструке радне површине +Name[sr@Latn]=Višestruke radne površine +Name[sv]=Flera skrivbord +Name[ta]=பலவகையான மேல்மேசைகள் +Name[te]=ఎక్కువ రంగస్థలాలు +Name[tg]=Мизи кориҳои виртуалӣ +Name[th]=หลายพื้นที่ทำงาน +Name[tr]=Çoklu Masaüstü +Name[tt]=Östäl Sanı +Name[uk]=Віртуальні стільниці +Name[uz]=Bir nechta ish stollari +Name[uz@cyrillic]=Бир нечта иш столлари +Name[ven]=Desktop nnzhi +Name[vi]=Nhiều Màn hình nền +Name[wa]=Multi-sicribannes +Name[xh]=Desktops Ezininzi +Name[zh_CN]=多个桌面 +Name[zh_TW]=多重桌面 +Name[zu]=Ama-Desktops amaningi + +Comment=You can configure how many virtual desktops there are. +Comment[af]=Jy kan opstel hoeveel virtuele werkskerms daar is. +Comment[ar]=يمكنك تحديد كم من الأسطح الوهمية موجودة. +Comment[az]=Virtual masa üstlərinin sayını quraşdırın. +Comment[be]=Тут вы можаце змяніць колькасць віртуальных стальніц. +Comment[bg]=Настройване на работните плотове +Comment[bn]=কটি ভার্চুয়াল ডেস্কটপ থাকবে কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ pet burev galloudel ez eus. +Comment[bs]=Ovdje možete podesiti broj virtuelnih radnih površina +Comment[ca]=Podeu configurar quants escriptoris virtuals hi ha d'haver-hi. +Comment[cs]=Zde je možné nastavit, kolik si přejete virtuálních ploch. +Comment[csb]=Kònfigùracëjô wielënë wirtualnëch pùltów. +Comment[cy]=Gallwch ffurfweddu faint o benbyrddau sydd ar gael +Comment[da]=Her kan du indstille hvor mange virtuelle desktoppe der er. +Comment[de]=Hier können Sie die Zahl der virtuellen Arbeitsflächen festlegen +Comment[el]=Μπορείτε να ρυθμίσετε πόσες εικονικές επιφάνειες εργασίας θα υπάρχουν. +Comment[eo]=Ĉi tie vi povas agordi kiom da virtualaj tabuloj jen estas. +Comment[es]=Configuración del número de escritorios virtuales. +Comment[et]=Virtuaalsete töölaudade arvu seadistamine +Comment[eu]=Mahaigain birtualen kopurua konfigura dezakezu. +Comment[fa]=می‌توانید پیکربندی کنید چند رومیزی مجازی وجود دارد. +Comment[fi]=Voit määritelle virtuaalityöpöytien määrän. +Comment[fr]=Configuration du nombre de bureaux virtuels +Comment[fy]=Hjir kinne jo fêststelle hoefolle firtuele buroblêden jo brûke wolle. +Comment[gl]=Pode configurar aqui cantos escritórios virtuais quere empregar. +Comment[he]=שינוי מספר שולחנות העבודה הווירטואליים +Comment[hi]=आप कॉन्फ़िगर कर सकते हैं कि वहाँ कितने आभासी डेस्कटॉप हों. +Comment[hr]=Konfiguriranje broja virtualnih radnih površina +Comment[hu]=A virtuális munkaasztalok számának beállítása +Comment[is]=Hér getur þú stillt hversu mörg sýndaskjáborðin eru. +Comment[it]=Configura quanti desktop virtuali vuoi avere. +Comment[ja]=仮想デスクトップの数を設定 +Comment[ka]=თქვენ შეგიძლიათ ვირტუალური სამუშაო მაგიდების რაოდენობის კონფიგურაცია +Comment[kk]=Керек виртуалды үстелдер санын орнату. +Comment[km]=អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ ចំនួន​ផ្ទៃ​តុ​និមិត្ត ។ +Comment[ko]=다중 데스크톱의 개수 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງຖາດພາແນວ ແຖບຫນ້າຕ່າງງານ ໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite nustatyti kiek menamų darbastalių naudoti +Comment[lv]=Jūs varat konfigurēt cik daudz virtuālo darbvirsmu ir. +Comment[mk]=Може да конфигурирате колку виртуелни работни површини ќе има. +Comment[mn]=Энд та виртуал ажилын талбарын тоог тогтоож өгч болно +Comment[ms]=Anda boleh konfigur berapa banyak desktop maya yang ada. +Comment[mt]=Hawn tista tikkonfigura kemm ikollok desktops virtwali. +Comment[nb]=Velg hvor mange virtuelle skrivebord du vil ha. +Comment[nds]=Du kannst hier instellen, wo vele virtuelle Schriefdischen dat gifft +Comment[ne]=तपाईँले त्यहाँ भएका अवास्तविक डेस्कटपहरू कन्फिगर गर्न सक्नुहुन्छ । +Comment[nl]=U kunt hier bepalen hoeveel virtuele bureaubladen u wilt gebruiken. +Comment[nn]=Vel kor mange virtuelle skrivebord du vil ha. +Comment[nso]=Oka beakanya gore gona le di-desktop tse kae tse maatla. +Comment[pa]=ਤੁਸੀਂ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕਿੰਨੇ ਫਰਜ਼ੀ ਵੇਹੜੇ ਵੇਖਾਏ ਜਾਣ। +Comment[pl]=Konfiguracja liczby wirtualnych pulpitów. +Comment[pt]=O utilizador pode configurar quantos ecrãs virtuais existem. +Comment[pt_BR]=Você pode configurar aqui quantas áreas de trabalho virtuais existem. +Comment[ro]=Puteți configura câte ecrane virtuale există. +Comment[ru]=Настройка количества виртуальных рабочих столов +Comment[rw]=Ushobora kuboneza ibiro bitaboneka bingahe bihari. +Comment[se]=Sáhtát heivehit galle virtuella čállinbeavddi dus galgá leat. +Comment[sk]=Nastavenie počtu virtuálnych plôch. +Comment[sl]=Tu lahko nastavite število navideznih namizij. +Comment[sr]=Овде можете подесити колико ће бити виртуелних радних површина. +Comment[sr@Latn]=Ovde možete podesiti koliko će biti virtuelnih radnih površina. +Comment[sv]=Anpassa antalet virtuella skrivbord +Comment[ta]=மெய்நிகர் மேல்மேசைகளின் எண்ணிக்கையை வடிவமைக்கலாம். +Comment[tg]=Инҷо метавонед таъдоди мизи кориҳои миҷозии худро таъин кунед. +Comment[th]=คุณสามารถปรับแต่งจำนวนของพื้นที่ทำงานเสมือนได้ที่นี่ +Comment[tr]=Kaç görsel masaüstüne sahip olacağınızı buradan yapılandırabilirsiniz. +Comment[tt]=Xıyalí östäl sanın caylaw. +Comment[uk]=Налаштування кількості віртуальних стільниць. +Comment[uz]=Bu yerda virtual ish stollarning sonini moslashingiz mumkin +Comment[uz@cyrillic]=Бу ерда виртуал иш столларнинг сонини мослашингиз мумкин +Comment[ven]=Ni nga dzudzanya uri ndi desktop ngana dza zwamutshini. +Comment[vi]=Bạn có thể đặt số màn hình nền ảo ở đây +Comment[wa]=Vos ploz apontyî chal cobén gn a d' forveyous scribannes +Comment[xh]=Ungaqwalasela ukuba zizakubangakanani ii desktops ezingabonakaliyo. +Comment[zh_CN]=可以在这里配置虚拟桌面的数量。 +Comment[zh_TW]=您可以在這裡設定要有多少個虛擬桌面。 +Comment[zu]=Ungahlanganisela ukuthi mangaki ama-desktop angamanga akhona. +Keywords=desktop,desktops,number,virtual desktop +Keywords[ar]=سطح المكتب,رقم,سطح مكتب وهمي +Keywords[az]=masa üstü,Ad,Masa üstü Miqdarı,Masa üstü sayğacı,desktop,virtual +Keywords[be]=Працоўны стол,Працоўныя сталы,Колькасць,Віртуальны працоўны стол,Віртуальныя працоўныя сталы,desktop,desktops,number,virtual desktop +Keywords[bg]=работен, плот, брой, виртуален, desktop, number, virtual desktop +Keywords[br]=burev,burevioù,niver,burev galloudel +Keywords[bs]=desktop,desktops,number,virtual desktop,desktopi,radna površina +Keywords[ca]=escriptori,escriptoris,número,escriptori virtual +Keywords[cs]=Pracovní plocha,Počet,Virtuální plocha,Plocha +Keywords[csb]=desktop,biurkò,biurka,pùlt,pùltë,wielëna,wirtualné biurkò,wirtualny pùlt +Keywords[cy]=penbwrdd, penbyrddau,rhif,penbwrdd rhith +Keywords[da]=desktop,desktoppe,antal,virtuelt desktop +Keywords[de]=Arbeitsfläche,Desktop,Anzahl,Virtuelle Arbeitsfläche +Keywords[el]=επιφάνεια εργασίας,επιφάνειες εργασίας,αριθμός,εικονική επιφάνεια εργασίας +Keywords[eo]=tabulo,tabuloj,nombro,virtuala tabulo +Keywords[es]=escritorio,escritorios,número,escritorio virtual +Keywords[et]=töölaud,töölauad,arv,virtuaalne töölaud +Keywords[eu]=mahaigaina, mahaigainak,zenbakia,mahaigain birtuala +Keywords[fa]=رومیزی، رومیزیها، تعداد، رومیزی مجازی +Keywords[fi]=työpöytä,työpöydät,lukumäärä,virtuaalityöpöytä +Keywords[fr]=bureau,bureaux,numéro,bureaux virtuels +Keywords[fy]=desktop,buroblêd,buroblêden,namme fan buroblêd,nûmmer,buroblêdtelling,firtuele buroblêden +Keywords[ga]=deasc,deasca,uimhir,deasc fhíorúil +Keywords[gl]=escritório,escritórios,número,escritório virtual +Keywords[he]=שולחן עבודה,שולחנות עבודה,מספר,שולחן עבודה וירטואלי, desktop,desktops,number,virtual desktop +Keywords[hi]=डेस्कटॉप,डेस्कटॉप्स,संख्या,आभासी डेस्कटॉप +Keywords[hr]=desktop,desktops,number,virtual desktop,radna površina,broj,virtualna radna površina +Keywords[hu]=munkaasztal,munkaasztalok,szám,virtuális munkaasztal +Keywords[is]=skjáborð,nafn,heiti,númer,fjöldi +Keywords[it]=desktop,nome desktop,numero di desktop,desktop virtuali +Keywords[ja]=デスクトップ,数,仮想デスクトップ +Keywords[ka]=სამუშაო მაგიდა,სამუშაო მაგიდები,რიცხვი,ვირტუალური სამუშაო მაგიდა +Keywords[km]=ផ្ទៃតុ,ចំនួន,ផ្ទៃតុ​និមិត្ត +Keywords[lt]=desktop,desktops,darbastaliai,number,skaičius,menamas darbastalis +Keywords[lv]=Darbvirsma,Darbavirsmas,Skaits,virtuālā darbvirsma +Keywords[mk]=desktop,desktops,number,virtual desktop,работна површина,површина,работни површини,површини,број,виртуелна површина +Keywords[mn]=Ажлын тавцан,Ажлын тавцан,Тоо,Виртуал ажлын тавцан +Keywords[ms]=desktop,desktop,bilangan,desktop maya +Keywords[mt]=desktop,desktops,number,virtual desktop,virtwal,virtwali +Keywords[nb]=Skrivebord,antall,virtuelt skrivebord +Keywords[nds]=Schriefdisch,Schriefdischen,Tall,virtuelle Schriefdischen +Keywords[ne]=डेस्कटप, डेस्कटपहरू, सङ्ख्या, अवास्तविक, डेस्कटप +Keywords[nl]=desktop,bureaublad,bureaubladen,naam van bureaublad,nummer,bureaubladtelling,virtuele bureaubladen +Keywords[nn]=skrivebord,nummer,virtuelt skrivebord +Keywords[pa]=desktop,desktops,number,virtual desktop,ਵੇਹੜੇ,ਗਿਣਤੀ +Keywords[pl]=desktop,biurko,biurka,pulpit,pulpity,numer,wirtualne biurko,wirtualny pulpit +Keywords[pt]=ecrã,ambiente de trabalho,número,ecrã virtual +Keywords[pt_BR]=área de trabalho,número,área de trabalho virtual +Keywords[ro]=ecran,număr,ecran virtual,afișare,monitor +Keywords[rw]= Ibiro,ibiro,umubare,ibiro bitagaragara +Keywords[se]=čállinbeavdi,čállinbeavddit,nummir,virtuella čállinbeavdi +Keywords[sk]=pracovná plocha,meno,počet plôch,číslo plochy +Keywords[sl]=namizje,ime,številka,število namizij,navidezno +Keywords[sr]=desktop,desktops,number,virtual desktop,радна површина,број,виртуелна радна површина +Keywords[sr@Latn]=desktop,desktops,number,virtual desktop,radna površina,broj,virtuelna radna površina +Keywords[sv]=skrivbord,antal skrivbord,antal,virtuellt skrivbord +Keywords[ta]=மேல்மேசை, மேல்மேசைகள்,எண்ணிக்கை,மெய்நிகர் மேல்மேசை +Keywords[th]=พื้นที่ทำงาน,จำนวน,พื้นที่ทำงานเสมือน +Keywords[tr]=masaüstü,isim,masaüstü sayısı,sanal masaüstü +Keywords[uk]=стільниця,стільниці,номер,віртуальна стільниця +Keywords[uz]=ish stoli,ish stollari,son,virtual ish stoli +Keywords[uz@cyrillic]=иш столи,иш столлари,сон,виртуал иш столи +Keywords[vi]=màn hình nền,nhiều màn hình nền,số,màn hình nền ảo +Keywords[wa]=sicribanne,sicribannes,nombe,forveyou sicribanne,forveyou scribanne +Keywords[zh_CN]=desktop,desktops,number,virtual desktop,桌面,数量,虚拟桌面 +Keywords[zh_TW]=desktop,number,virtual desktop,桌面,編號,虛擬桌面 + +Categories=Qt;KDE;X-KDE-settings-desktop; diff --git a/kcontrol/konq/desktop.h b/kcontrol/konq/desktop.h new file mode 100644 index 000000000..291d5dd8f --- /dev/null +++ b/kcontrol/konq/desktop.h @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __desktop_h__ +#define __desktop_h__ + +#include + +class QSpinBox; +class QLabel; +class QCheckBox; +class KLineEdit; +class KIntNumInput; + +// if you change this, update also the number of keyboard shortcuts in kwin/kwinbindings.cpp +static const int maxDesktops = 20; + +class KDesktopConfig : public KCModule +{ + Q_OBJECT + + public: + KDesktopConfig(QWidget *parent = 0L, const char *name = 0L); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + + protected slots: + void slotValueChanged(int); + + private: + KIntNumInput *_numInput; + QLabel *_nameLabel[maxDesktops]; + KLineEdit *_nameInput[maxDesktops]; + QCheckBox *_wheelOption; + bool _wheelOptionImmutable; + bool _labelImmutable[maxDesktops]; +}; + +#endif diff --git a/kcontrol/konq/desktopbehavior.desktop b/kcontrol/konq/desktopbehavior.desktop new file mode 100644 index 000000000..d20ba1ae1 --- /dev/null +++ b/kcontrol/konq/desktopbehavior.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/desktopbehavior/index.html +Icon=desktop +Exec=kcmshell desktopbehavior + + +X-KDE-Library=konq +X-KDE-FactoryName=dbehavior +X-KDE-ParentApp=kcontrol + +Name=Behavior +Name[af]=Gedrag +Name[ar]=السلوك +Name[az]=Davranış +Name[be]=Паводзіны +Name[bg]=Поведение +Name[bn]=আচরণ +Name[br]=Emzalc'h +Name[bs]=Ponašanje +Name[ca]=Comportament +Name[cs]=Chování +Name[csb]=Zachòwanié +Name[cy]=Ymddygiad +Name[da]=Opførsel +Name[de]=Verhalten +Name[el]=Συμπεριφορά +Name[en_GB]=Behaviour +Name[eo]=Konduto +Name[es]=Comportamiento +Name[et]=Käitumine +Name[eu]=Portaera +Name[fa]=رفتار +Name[fi]=Käyttäytyminen +Name[fr]=Comportement +Name[fy]=Gedrach +Name[ga]=Oibriú +Name[gl]=Comportamento +Name[he]=פעולה +Name[hi]=बर्ताव +Name[hr]=Ponašanje +Name[hu]=Működés +Name[is]=Hegðun +Name[it]=Comportamento +Name[ja]=挙動 +Name[ka]=ქცევა +Name[kk]=Қасиеттері +Name[km]=ឥរិយាបថ +Name[ko]=행동 +Name[lo]=ພຶດຕິກຳຂອງຫນ້າຕ່າງ +Name[lt]=Elgsena +Name[lv]=Izturēšanās +Name[mk]=Однесување +Name[mn]=Байдал +Name[ms]=Peri laku +Name[mt]=Imġieba +Name[nb]=Oppførsel +Name[nds]=Bedregen +Name[ne]=व्यवहार +Name[nl]=Gedrag +Name[nn]=Åtferd +Name[nso]=Maitshwaro +Name[pa]=ਵਿਹਾਰ +Name[pl]=Zachowanie +Name[pt]=Comportamento +Name[pt_BR]=Comportamento +Name[ro]=Comportament +Name[ru]=Поведение +Name[rw]=Imyitwarire +Name[se]=Láhtten +Name[sk]=Správanie +Name[sl]=Obnašanje +Name[sr]=Понашање +Name[sr@Latn]=Ponašanje +Name[ss]=Kutiphatsa +Name[sv]=Uppträdande +Name[ta]= நடத்தை +Name[te]=ప్రవర్తన +Name[tg]=Рафтор +Name[th]=พฤติกรรม +Name[tr]=Davranış +Name[tt]=Eşlise eş +Name[uk]=Поведінка +Name[uz]=Xususiyatlar +Name[uz@cyrillic]=Хусусиятлар +Name[ven]=Maitele +Name[vi]=Cách hoạt động +Name[wa]=Dujhance +Name[xh]=Ukuziphatha +Name[zh_CN]=行为 +Name[zh_TW]=行為 +Name[zu]=Ukuziphatha + +Comment=You can configure how the desktop behaves here +Comment[af]=Jy kan die werkskerm gedrag hier opstel +Comment[ar]=هنا يمكنك إعداد سلوك سطح المكتب +Comment[az]=Masa üstünün davranışını buradan quraşdıra bilərsiniz +Comment[be]=Тут вы можаце змяніць паводзіны стальніцы +Comment[bg]=Настройване поведението на работния плот +Comment[bn]=এখানে ডেস্কটপ-এর আচরণ কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ penaos ar vurev en em zalc'h evel ur merour restroù +Comment[bs]=Ovdje možete podesiti ponašanje radne površine +Comment[ca]=Aquí podeu configurar com es comportarà l'escriptori +Comment[cs]=Zde je možné nastavit chování pracovní plochy +Comment[csb]=Kònfigùracëjô zachòwaniô pùltu +Comment[cy]=Ffurfweddu ymddygiad y penbwrdd yma +Comment[da]=Her kan du indstille desktoppens opførsel +Comment[de]=Hier können Sie das Verhalten der Arbeitsfläche festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε τη συμπεριφορά της επιφάνειας εργασίας +Comment[eo]=Vi povas agordi kiel la tabulo kondutas. +Comment[es]=Configuración del modo de comportamiento del escritorio +Comment[et]=Siin saad seadistada töölaua käitumist +Comment[eu]=Mahaigainen portaera konfigura dezakezu hemen +Comment[fa]=می‌توانید چگونگی رفتار رومیزی را در اینجا پیکربندی کنید. +Comment[fi]=Tässä kohdassa voit määritellä työpöydän asetuksia +Comment[fr]=Configuration du comportement du bureau +Comment[fy]=Hjir kinne jo it gedrach fan jo buroblêd ynstelle +Comment[gl]=Pode configurar aqui o comportamento do escritório +Comment[he]=שינוי הגדרות הפעולה של שולחן העבודה +Comment[hi]=आप कॉन्फ़िगर कर सकते हैं कि डेस्कटॉप कैसा बर्ताव करें +Comment[hr]=Konfiguriranje načina na koji se radne površine ponašaju +Comment[hu]=A munkaasztal viselkedésének beállítása +Comment[is]=Hér getur þú stillt hegðun skjáborða +Comment[it]=Configura il comportamento del desktop +Comment[ja]=デスクトップの挙動を設定 +Comment[ka]=სამუშაო დაფის ქცვის კონფიგურაცია +Comment[kk]=Үстелдің қасиеттерін орнату +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​ឥរិយាបថ​របស់​ផ្ទៃតុ +Comment[ko]=데스크톱의 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານ ຂອງເຄື່ອງມືຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti darbastalio elgseną +Comment[lv]=Šeit jūs varat konfigurēt kā izturas darbvirsma +Comment[mk]=Тука може да конфигурирате како да се однесува работната површина +Comment[mn]=Энд та ажлын талбарын байдлыг тогтооно +Comment[ms]=Anda boleh konfigur bagaimana desktop berkelakuan di sini +Comment[mt]=Tista' tissettja l-imġieba tad-desktop minn hawn +Comment[nb]=Tilpass skrivebordets oppførsel her +Comment[nds]=Du kannst hier instellen, wodennig sik de Schriefdisch bedriggt +Comment[ne]=तापईँले त्यहाँ भएका डेस्कटपले गर्ने व्यवहार कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=Hier kunt u het gedrag van uw desktop instellen +Comment[nn]=Vel korleis skrivebordet skal oppføra seg +Comment[nso]=Oka beakanya ka mokgwa wo desktop e phelago ka gona mo +Comment[pa]=ਤੁਸੀਂ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਵੇਹੜਾ ਵਿਹਾਰ ਕਿਵੇਂ ਕਰੇਗਾ। +Comment[pl]=Konfiguracja zachowania pulpitu +Comment[pt]=O utilizador pode configurar aqui como é que o ecrã se comporta +Comment[pt_BR]=Você pode configurar aqui como o área de trabalho se comporta +Comment[ro]=Aici configurați modul în care se comportă mediul KDE +Comment[ru]=Настройка поведения рабочего стола +Comment[rw]=Ushobora kuboneza ukuntu ibiro byitwara hano +Comment[se]=Dás sáhtát heivehit mo čállinbeavdi galgá láhttet +Comment[sk]=Nastavenie správania pracovnej plochy +Comment[sl]=Tu lahko nastavite obnašanje namizja +Comment[sr]=Овде можете подесити како ће се понашати радна површина +Comment[sr@Latn]=Ovde možete podesiti kako će se ponašati radna površina +Comment[sv]=Anpassa hur skrivbordet beter sig +Comment[ta]=இங்கே மேல்மேசை எப்படி இயங்குகிறது என்பதை வடிவமைக்க முடியும். +Comment[tg]=Инҷо метавонед рафтори мизи кориатонро танзим кунед +Comment[th]=คุณสามารถปรับแต่งพฤติกรรมของพื้นที่ทำงานได้ที่นี่ +Comment[tr]=Masaüstü davranışını buradan yapılandırabilirsiniz +Comment[tt]=Östälneñ çağılışın caylaw +Comment[uk]=Налаштування поведінки стільниці +Comment[uz]=Bu yerda ish stolining xususiyatlarini moslash mumkin +Comment[uz@cyrillic]=Бу ерда иш столининг хусусиятларини мослаш мумкин +Comment[ven]=Ni nga dzudzanya uri na desktop inga difara hani hafhano +Comment[vi]=Bạn có thề cấu hình cách hoạt động của màn hình nền ở đây +Comment[wa]=Vos ploz apontyî chal li dujhance do scribanne +Comment[xh]=Ungaqwalasela ukuziphatha kwe desktop apha +Comment[zh_CN]=在这里配置桌面行为 +Comment[zh_TW]=您可以在這裡設定桌面的行為 +Comment[zu]=Ungahlanganisela ukuthi idesktop iziphathe kanjanilapha +Keywords=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL, +Keywords[ar]=konqueror,مسيير الملفات,kfm,التلميحات و النصائح,تلميحات الملف,نافذة منعزلة,spawn windows,السلوك,إستعمال الذاكرة,عنوان المورد النظامي للمنزل +Keywords[be]=Кіраўнік файлаў,Карысныя парады,Падказкі,Падказкі файлаў,Асобнае акно,Паводзіны,Выкарыстанне памяці,Хатняя тэчка,konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL, +Keywords[bg]=работен, плот, поведение, място, браузър, прозорец, konqueror, filemanager, kfm, tips, file tips, separate window, spawn windows, behavior, behaviour, memory usage, Home URL, +Keywords[ca]=konqueror,gestor de fitxers,kfm,consells,consells del fitxer,finestra separada,expandir finestres,comportament,us de la memòria, URL d'inici, +Keywords[cs]=Konqueror,Správce souborů,Kfm,Tipy,Souborové tipy,Rozdílné okno, Chování,Spotřeba paměti,Domovské URL,Domovský adresář +Keywords[csb]=konqueror,menedżer lopków,kfm,wskôzë,wëdowédzô ò lopkù,apartné òkno, wiele òknów,zachòwanié,brëkòwanié pamiãcë,domôcy URL +Keywords[cy]=konqueror,rheolydd ffeiliau,kfm,cyngor,cyngor ffeiliau,ffenestr gwahan,taenu ffenestri,ymddygiad,defnydd cof,URL Cartref +Keywords[da]=konqueror,filhåndtering,kfm,tip,filtip,separat vindue,flere vinduer,opførsel,hukommelsesforbrug,Hjemme-URL, +Keywords[de]=Konqueror,Dateimanager,kfm,Tipps,Fenster,Verhalten,Persönlicher Ordner,Speicherverwendung +Keywords[el]=konqueror,διαχειριστής αρχείων,kfm,πληροφορίες,πληροφορίες αρχείων,ξεχωριστό παράθυρο,πολλαπλασιασμός παραθύρων,συμπεριφορά,συμπεριφορά,χρήση μνήμης,URL σπιτιού, +Keywords[eo]=dosieradministrilo,aparta fenestro,uzata memoro +Keywords[es]=konqueror,gestor de archivos,kfm,sugerencias,ventana separada, extender ventanas,comportamiento,uso de memoria, URl de inicio, +Keywords[et]=konqueror,failihaldur,kfm,vihjed,failide vihjed,eraldi aken,käitumine,mälukasutus,kodukataloog +Keywords[eu]=konqueror,fitxategi kudeatzailea,kfm,iradokizunak,fitxategi iradokizunak, aparteko leihoa,leihoak hedatu,portaera,memoriaren erabilera,Hasierako URLa, +Keywords[fa]=konqueror، مدیر پرونده، kfm، نکات، نکات پرونده، پنجرۀ مجزا، پنجره‌های تکثیرشده، رفتار، رفتار، کاربرد حافظه، نشانی وب آغازه، +Keywords[fi]=konqueror,tiedostonhallinta,kfm,vinkit,tiedostovinkit,erillinen ikkuna,käytös,muistinkäyttö,Koti-URL +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,kfm,astuces,fenêtre séparée,rafraîchissement des fenêtres,comportement,utilisation de la mémoire,Home URL,URL de démarrage +Keywords[fy]=konqueror,filemanager,kfm,tips,knopinfo,arktippen,gedrach,ûnthâldgebrûk,thús,persoanlike map, +Keywords[gl]=konqueror,xestor de ficheiros,kfm,consellos de ficheiro,fiestra separada,fiestras emerxentes,comportamento,uso da memoria,URL Persoal, +Keywords[he]=konqueror,מנהל קבצים,kfm,עצות,פירוט לקבצים,חלון נפרד,שימוש בזיכרון,פעולה,כתובת בית, konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL +Keywords[hi]=कॉन्करर,फ़ाइलमैनेजर,केएफएम,संकेत,फ़ाइल संकेत,अलग विंडो,विंडो बनाएँ,बर्ताव,आचरण,मेमोरी उपयोग,मुख यूआरएल, +Keywords[hr]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,upravljač datoteka,savjeti datoteka,posebni prozor,pojavljujući prozor,ponašanje,upotreba memorije,URL početne stranice +Keywords[hu]=konqueror,fájlkezelő,kfm,tippek,fájltippek,külön ablak,ablakgenerálás,viselkedés,memóriahasználat,saját URL, +Keywords[is]=konqueror,skráastjóri,kfm,ráð,skráarráð,aðskilin gluggi,margfaldast, gluggar,hegðun,minnisnotkun,heimaslóð, +Keywords[it]=konqueror,filemanager,kfm,trucchi,file,separa finestre,comportamento,memoria utilizzata,home +Keywords[ja]=konqueror,ファイルマネージャ,kfm,ツールチップ,個別ウィンドウ, ポップウィンドウ,挙動,メモリ使用量,ホームURL +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,kfm,ព័ត៌មាន​ជំនួស,ព័ត៌មាន​ជំនួយ​ឯកសារ,ខណ្ឌចែក​បង្អួច,បង្កើត​បង្អួច,ឥរិយាបថ,ការ​ប្រើ​សតិ,URL ដើម +Keywords[lt]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL, bylų tvarkyklė, kfm, patarimai, atskiri langai, elgesys, elgsena, atminties naudojimas, namų adresas +Keywords[lv]=iekarotājs,failumenedžeris,kfm,padoms,failu padomi,atsevišķs logs,spawn windows,izturēšanās,atmiņas izmantošana,Mājas URL, +Keywords[mk]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,менаџер на датотеки,совети,совети за датотеки,подели го прозорецот, однесување,користење на меморија,Домашно URL, +Keywords[mn]=Конкюрор,Файл удирдагч,kfm,Зөвлөмж,Цонх,Байдал, Хувийн лавлах,Санах ойн ашиглалт +Keywords[mt]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,ħjilijiet,pariri,imġieba +Keywords[nb]=konqueror,filemanager,kfm,tips,file tips,separate vinduer,filbehandler,fil,adskilte vindu,delte vinduer,oppførsel,minnebruk,hjemme-nettadresse +Keywords[nds]=Konqueror,Dateipleger,kfm,Tipps,Tooltips,egen Finster,Finstern maken,Bedregen,Spiekerverbruuk,Startadress +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, kfm, टिपहरू, फाइल टिपहरू, फरक सञ्झ्याल, स्पवन सञ्झ्यालहरू, व्यवहार, स्मृति प्रयोग,गृह URL, +Keywords[nl]=konqueror,filemanager,kfm,tips,knopinfo,tooltips,gedrag,geheugengebruik,home,persoonlijke map, +Keywords[nn]=Konqueror,filhandsamar,KFM,tips,filtips,eige vindauge,nye vindauge,åtferd,minnebruk,heime-URL +Keywords[nso]=konqueror,molaodi wa faele,kfm,ditomotsebe,ditomotsebe tsa faele,window yeo e hlaogilego,spawn windows,mekgwa,mekgwa,tshomiso ya kelelo,URL ya gae, +Keywords[pa]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,ਫਾਇਲ ਮੈਨੇਜਰ,ਸੰਕੇਤ,ਵੱਖਰਾ ਝਰੋਖਾ,ਵਿਹਾਰ,ਮੈਮੋਰੀ ਵਰਤੋਂ,ਕੋਨਕਿਉਰਰ +Keywords[pl]=konqueror,menedżer plików,kfm,wskazówki,informacja o pliku,osobne okno, mnożące się okna,zachowanie,zużycie zasobów pamięci,odnośnik do kartoteki domowej +Keywords[pt]=konqueror,gestor de ficheiros,kfm,dicas,dicas de ficheiros,janela separada,comportamento,utilização de memória,URL de base, +Keywords[pt_BR]=konqueror,gerenciador de arquivos,kfm,dicas,arquivos de dicas,janelas separadas,janelas unidas,comportamento,comportamento,uso de memória,URL local, +Keywords[ro]=konqueror,manager de fișiere,kfm,sfaturi,ferestre separate,comportament,utilizare memorie,URL Acasă +Keywords[rw]=Konqueror,mugengadosiye,kfm,inyobora, inyobora y'idosiye, gutandukanya Idirishya,kurema amadirishya,imyitwarire,imyitwarire,ikoresha ry'umwanyabubiko,URL y'Ipaji kwinjira, +Keywords[se]=konqueror,fiilagieđahalli,kfm,rávvagat,fiilarávvagat,iežaš láse,ođđa láset,láhtten,muitugeavaheapmi,ruoktu-URL +Keywords[sk]=konqueror,správa súborov,kfm,tipy,oddelené okná,nové okná,správanie,využitie pamäti,domovské URL +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,kfm,namigi,namigi datotek,ločeno okno,ustvari okna,obnašanje,poraba pomnilnika,domači URL +Keywords[sr]=konqueror,filemanager,kfm,форе,форе за фајлове,одвојени прозор,spawn прозори,понашање,искоришћеност меморије,Home URL, +Keywords[sr@Latn]=konqueror,filemanager,kfm,fore,fore za fajlove,odvojeni prozor,spawn prozori,ponašanje,iskorišćenost memorije,Home URL, +Keywords[sv]=konqueror,filhanterare,kfm,tips,filtips,särskilt fönster,visa fönster,beteende,minnesanvändning,hemadress +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,kfm,குறிப்புகள்,கோப்பு குறிப்புகள்,தனி சாளரம்,நீள்வட்ட சாளரம்,நடத்தை,நினைவு பயன்பாடு,வீட்டு வலைப்பின்னல், +Keywords[th]=คอนเควอร์เรอร์,จัดการแฟ้ม,kfm,เคล็ดลับ,เคล็ดลับแฟ้ม,แยกหน้าต่าง,หน้าต่างเปิดใหม่,พฤติกรรม,การใช้หน่วยความจำ,ตำแหน่งหลัก, +Keywords[tr]=konqueror,dosya yöneticisi,kfm,ipuçları,dosya,pencere,davranış,bellek kullanımı,başlangıç +Keywords[uk]=konqueror,менеджер файлів,kfm,підказки,підказки по файлах,створення вікон,поведінка,використання пам'яті,домашній URL +Keywords[uz]=konqueror,fayl boshqaruvchisi,kfm,eslatmalar,fayl eslatmalari,alohida oyna,spawn windows,xususiyatlar,xotiradan foydalanish,Uy URL +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,kfm,эслатмалар,файл эслатмалари,алоҳида ойна,spawn windows,хусусиятлар,хотирадан фойдаланиш,Уй URL +Keywords[ven]=konqueror,mulanguli wa faela,kfm,tsivhudzo,tsivhudzo ya faela,window yo fhandekanaho,spawn windows,maitele,maitele,mashumisele a muhumbulo,Haya URL, +Keywords[vi]=konqueror,trình quản lý tập tin,kfm,gợi ý,gợi ý tập tin,phân cách cửa sổ,cửa sổ nhỏ,cách hoạt động,các cách hoạt động,bộ nhớ sử dụng,URL Nhà, +Keywords[wa]=konqueror,manaedjeu d' fitchî,kfm,tips,bon a savu,bon a saveur,purnea metous a pårt,dispårtis purneas,dujhance,eployaedje del memwere,URL Måjhon +Keywords[xh]=konqueror,umphathi wefayile,kfm,amancam, ifayile amancam,yahlula i window,yenza,windows, ukuziphatha,usebenziso lwenkumbulo,Ekhaya URL, +Keywords[zh_CN]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,文件管理器,提示,文件提示,拆分窗口,新开窗口,行为,内存使用,主 URL, +Keywords[zh_TW]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,征服家,檔案管理程式,檔案密訣,分離視窗,產生視窗,行為,記憶體使用量,家 URL, +Keywords[zu]=konqueror,imenenja yefayela,kfm,amacebo,amacebo efayela,i-window elahlukene,ama-window azelwe,ukuziphatha,ukuziphhatha, ukusetshenziswa kenkumbulo,i-URL yasekhaya, + +Categories=Qt;KDE;X-KDE-settings-desktop; diff --git a/kcontrol/konq/desktopbehavior.ui b/kcontrol/konq/desktopbehavior.ui new file mode 100644 index 000000000..1632021ef --- /dev/null +++ b/kcontrol/konq/desktopbehavior.ui @@ -0,0 +1,426 @@ + +DesktopBehaviorBase + + + DesktopBehaviorBase + + + + 0 + 0 + 791 + 501 + + + + + unnamed + + + 0 + + + 0 + + + + behaviorTab + + + + tab + + + General + + + + unnamed + + + + iconsEnabledBox + + + + 7 + 0 + 0 + 0 + + + + &Show icons on desktop + + + Uncheck this option if you do not want to have icons on the desktop. Without icons the desktop will be somewhat faster but you will no longer be able to drag files to the desktop. + + + + + layout1 + + + + unnamed + + + + spacer3 + + + Horizontal + + + Fixed + + + + 20 + 0 + + + + + + vrootBox + + + false + + + Allow pro&grams in desktop window + + + Check this option if you want to run X11 programs that draw into the desktop such as xsnow, xpenguin or xmountain. If you have problems with applications like netscape that check the root window for running instances, disable this option. + + + + + + + toolTipBox + + + Show &tooltips + + + + + desktopMenuGroup + + + Menu Bar at Top of Screen + + + + unnamed + + + + radioButton1 + + + &None + + + If this option is selected, there is no menu bar at the top of the screen. + + + + + radioButton1_2 + + + &Desktop menu bar + + + If this option is selected, there is one menu bar at the top of the screen which shows the desktop menus. + + + + + radioButton1_3 + + + &Current application's menu bar (Mac OS-style) + + + If this option is selected, applications will not have their menu bar attached to their own window anymore. Instead, there is one menu bar at the top of the screen which shows the menus of the currently active application. You might recognize this behavior from Mac OS. + + + + + + + groupBox3 + + + Mouse Button Actions + + + + unnamed + + + + middleLabel + + + Middle button: + + + + + leftLabel + + + Left button: + + + + + rightLabel + + + Right button: + + + + + rightComboBox + + + + 1 + 0 + 0 + 0 + + + + + + leftComboBox + + + + 1 + 0 + 0 + 0 + + + + + + leftEditButton + + + false + + + Edit... + + + + + middleComboBox + + + + 1 + 0 + 0 + 0 + + + + + + middleEditButton + + + false + + + Edit... + + + + + rightEditButton + + + false + + + Edit... + + + + + spacer5 + + + Horizontal + + + Expanding + + + + 191 + 80 + + + + + + + + spacer8 + + + Vertical + + + Expanding + + + + 20 + 16 + + + + + + + + tab + + + File Icons + + + + unnamed + + + + autoLineupIconsBox + + + Automatically &line up icons + + + Check this option if you want to see your icons automatically aligned to the grid when you move them. + + + + + showHiddenBox + + + Show &hidden files + + + <p>If you check this option, any files in your desktop directory that begin with a period (.) will be shown. Usually, such files contain configuration information, and remain hidden from view.</p> +<p>For example, files which are named ".directory" are plain text files which contain information for Konqueror, such as the icon to use in displaying a directory, the order in which files should be sorted, etc. You should not change or delete these files unless you know what you are doing.</p> + + + + + + Show Icon Previews For + + + false + + + false + + + + previewListView + + + true + + + Select for which types of files you want to enable preview images. + + + + + + + tab + + + Device Icons + + + + unnamed + + + + enableMediaBox + + + &Show device icons: + + + + + + Device Types to Display + + + false + + + false + + + + mediaListView + + + false + + + true + + + Deselect the device types which you do not want to see on the desktop. + + + + + + + + + + enableMediaBox + toggled(bool) + mediaListView + setEnabled(bool) + + + + autoLineupIconsBox + showHiddenBox + previewListView + enableMediaBox + mediaListView + + + + klistview.h + klistview.h + + diff --git a/kcontrol/konq/desktopbehavior_impl.cpp b/kcontrol/konq/desktopbehavior_impl.cpp new file mode 100644 index 000000000..e8052bfb0 --- /dev/null +++ b/kcontrol/konq/desktopbehavior_impl.cpp @@ -0,0 +1,466 @@ +/** + * (c) Martin R. Jones 1996 + * (c) Bernd Wuebben 1998 + * (c) Christian Tibirna 1998 + * (c) David Faure 1998, 2000 + * (c) John Firebaugh 2003 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "desktopbehavior_impl.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // include default values directly from libkonq +#include +#include + +const int customMenu1ID = 5; +const int customMenu2ID = 6; + +DesktopBehaviorModule::DesktopBehaviorModule(KConfig *config, QWidget *parent, const char * ) + : KCModule( parent, "kcmkonq" ) +{ + QVBoxLayout* layout = new QVBoxLayout(this); + m_behavior = new DesktopBehavior(config, this); + layout->addWidget(m_behavior); + connect(m_behavior, SIGNAL(changed()), this, SLOT(changed())); +} + +void DesktopBehaviorModule::changed() +{ + emit KCModule::changed( true ); +} + +class DesktopBehaviorPreviewItem : public QCheckListItem +{ +public: + DesktopBehaviorPreviewItem(DesktopBehavior *rootOpts, QListView *parent, + const KService::Ptr &plugin, bool on) + : QCheckListItem(parent, plugin->name(), CheckBox), + m_rootOpts(rootOpts) + { + m_pluginName = plugin->desktopEntryName(); + setOn(on); + } + DesktopBehaviorPreviewItem(DesktopBehavior *rootOpts, QListView *parent, + bool on) + : QCheckListItem(parent, i18n("Sound Files"), CheckBox), + m_rootOpts(rootOpts) + { + m_pluginName = "audio/"; + setOn(on); + } + const QString &pluginName() const { return m_pluginName; } + +protected: + virtual void stateChange( bool ) { m_rootOpts->changed(); } + +private: + DesktopBehavior *m_rootOpts; + QString m_pluginName; +}; + + +class DesktopBehaviorMediaItem : public QCheckListItem +{ +public: + DesktopBehaviorMediaItem(DesktopBehavior *rootOpts, QListView *parent, + const QString name, const QString mimetype, bool on) + : QCheckListItem(parent, name, CheckBox), + m_rootOpts(rootOpts),m_mimeType(mimetype){setOn(on);} + + const QString &mimeType() const { return m_mimeType; } + +protected: + virtual void stateChange( bool ) { m_rootOpts->changed(); } + +private: + DesktopBehavior *m_rootOpts; + QString m_mimeType; +}; + + +static const int choiceCount=7; +static const char * s_choices[7] = { "", "WindowListMenu", "DesktopMenu", "AppMenu", "BookmarksMenu", "CustomMenu1", "CustomMenu2" }; + +DesktopBehavior::DesktopBehavior(KConfig *config, QWidget *parent, const char * ) + : DesktopBehaviorBase( parent, "kcmkonq" ), g_pConfig(config) +{ + QString strMouseButton1, strMouseButton3, strButtonTxt1, strButtonTxt3; + + /* + * The text on this form depends on the mouse setting, which can be right + * or left handed. The outer button functionality is actually swapped + * + */ + bool leftHandedMouse = ( KGlobalSettings::mouseSettings().handed == KGlobalSettings::KMouseSettings::LeftHanded); + + m_bHasMedia = KProtocolInfo::isKnownProtocol(QString::fromLatin1("media")); + + connect(desktopMenuGroup, SIGNAL(clicked(int)), this, SIGNAL(changed())); + connect(iconsEnabledBox, SIGNAL(clicked()), this, SLOT(enableChanged())); + connect(showHiddenBox, SIGNAL(clicked()), this, SIGNAL(changed())); + connect(vrootBox, SIGNAL(clicked()), this, SIGNAL(changed())); + connect(autoLineupIconsBox, SIGNAL(clicked()), this, SIGNAL(changed())); + connect(toolTipBox, SIGNAL(clicked()), this, SIGNAL(changed())); + + strMouseButton1 = i18n("&Left button:"); + strButtonTxt1 = i18n( "You can choose what happens when" + " you click the left button of your pointing device on the desktop:"); + + strMouseButton3 = i18n("Right b&utton:"); + strButtonTxt3 = i18n( "You can choose what happens when" + " you click the right button of your pointing device on the desktop:"); + + if ( leftHandedMouse ) + { + qSwap(strMouseButton1, strMouseButton3); + qSwap(strButtonTxt1, strButtonTxt3); + } + + leftLabel->setText( strMouseButton1 ); + leftLabel->setBuddy( leftComboBox ); + fillMenuCombo( leftComboBox ); + connect(leftEditButton, SIGNAL(clicked()), this, SLOT(editButtonPressed())); + connect(leftComboBox, SIGNAL(activated(int)), this, SIGNAL(changed())); + connect(leftComboBox, SIGNAL(activated(int)), this, SLOT(comboBoxChanged())); + QString wtstr = strButtonTxt1 + + i18n("
    • No action: as you might guess, nothing happens!
    • " + "
    • Window list menu: a menu showing all windows on all" + " virtual desktops pops up. You can click on the desktop name to switch" + " to that desktop, or on a window name to shift focus to that window," + " switching desktops if necessary, and restoring the window if it is" + " hidden. Hidden or minimized windows are represented with their names" + " in parentheses.
    • " + "
    • Desktop menu: a context menu for the desktop pops up." + " Among other things, this menu has options for configuring the display," + " locking the screen, and logging out of KDE.
    • " + "
    • Application menu: the \"K\" menu pops up. This might be" + " useful for quickly accessing applications if you like to keep the" + " panel (also known as \"Kicker\") hidden from view.
    "); + QWhatsThis::add( leftLabel, wtstr ); + QWhatsThis::add( leftComboBox, wtstr ); + + middleLabel->setBuddy( middleComboBox ); + fillMenuCombo( middleComboBox ); + connect(middleEditButton, SIGNAL(clicked()), this, SLOT(editButtonPressed())); + connect(middleComboBox, SIGNAL(activated(int)), this, SIGNAL(changed())); + connect(middleComboBox, SIGNAL(activated(int)), this, SLOT(comboBoxChanged())); + wtstr = i18n("You can choose what happens when" + " you click the middle button of your pointing device on the desktop:" + "
    • No action: as you might guess, nothing happens!
    • " + "
    • Window list menu: a menu showing all windows on all" + " virtual desktops pops up. You can click on the desktop name to switch" + " to that desktop, or on a window name to shift focus to that window," + " switching desktops if necessary, and restoring the window if it is" + " hidden. Hidden or minimized windows are represented with their names" + " in parentheses.
    • " + "
    • Desktop menu: a context menu for the desktop pops up." + " Among other things, this menu has options for configuring the display," + " locking the screen, and logging out of KDE.
    • " + "
    • Application menu: the \"K\" menu pops up. This might be" + " useful for quickly accessing applications if you like to keep the" + " panel (also known as \"Kicker\") hidden from view.
    "); + QWhatsThis::add( middleLabel, wtstr ); + QWhatsThis::add( middleComboBox, wtstr ); + + rightLabel->setText( strMouseButton3 ); + rightLabel->setBuddy( rightComboBox ); + fillMenuCombo( rightComboBox ); + connect(rightEditButton, SIGNAL(clicked()), this, SLOT(editButtonPressed())); + connect(rightComboBox, SIGNAL(activated(int)), this, SIGNAL(changed())); + connect(rightComboBox, SIGNAL(activated(int)), this, SLOT(comboBoxChanged())); + wtstr = strButtonTxt3 + + i18n("
    • No action: as you might guess, nothing happens!
    • " + "
    • Window list menu: a menu showing all windows on all" + " virtual desktops pops up. You can click on the desktop name to switch" + " to that desktop, or on a window name to shift focus to that window," + " switching desktops if necessary, and restoring the window if it is" + " hidden. Hidden or minimized windows are represented with their names" + " in parentheses.
    • " + "
    • Desktop menu: a context menu for the desktop pops up." + " Among other things, this menu has options for configuring the display," + " locking the screen, and logging out of KDE.
    • " + "
    • Application menu: the \"K\" menu pops up. This might be" + " useful for quickly accessing applications if you like to keep the" + " panel (also known as \"Kicker\") hidden from view.
    "); + QWhatsThis::add( rightLabel, wtstr ); + QWhatsThis::add( rightComboBox, wtstr ); + + if (m_bHasMedia) + { + connect(enableMediaBox, SIGNAL(clicked()), this, SLOT(enableChanged())); + } + else + { + delete behaviorTab->page(2); + } + + load(); +} + +void DesktopBehavior::fillMediaListView() +{ + mediaListView->clear(); + mediaListView->setRootIsDecorated(false); + KMimeType::List mimetypes = KMimeType::allMimeTypes(); + QValueListIterator it2(mimetypes.begin()); + g_pConfig->setGroup( "Media" ); + enableMediaBox->setChecked(g_pConfig->readBoolEntry("enabled",false)); + QString excludedMedia=g_pConfig->readEntry("exclude","media/hdd_mounted,media/hdd_unmounted,media/floppy_unmounted,media/cdrom_unmounted,media/floppy5_unmounted"); + for (; it2 != mimetypes.end(); ++it2) { + if ( ((*it2)->name().startsWith("media/")) ) + { + bool ok=excludedMedia.contains((*it2)->name())==0; + new DesktopBehaviorMediaItem (this, mediaListView, (*it2)->comment(), (*it2)->name(),ok); + + } + } +} + +void DesktopBehavior::saveMediaListView() +{ + if (!m_bHasMedia) + return; + + g_pConfig->setGroup( "Media" ); + g_pConfig->writeEntry("enabled",enableMediaBox->isChecked()); + QStringList exclude; + for (DesktopBehaviorMediaItem *it=static_cast(mediaListView->firstChild()); + it; it=static_cast(it->nextSibling())) + { + if (!it->isOn()) exclude << it->mimeType(); + } + g_pConfig->writeEntry("exclude",exclude); +} + + +void DesktopBehavior::fillMenuCombo( QComboBox * combo ) +{ + combo->insertItem( i18n("No Action") ); + combo->insertItem( i18n("Window List Menu") ); + combo->insertItem( i18n("Desktop Menu") ); + combo->insertItem( i18n("Application Menu") ); + combo->insertItem( i18n("Bookmarks Menu") ); + combo->insertItem( i18n("Custom Menu 1") ); + combo->insertItem( i18n("Custom Menu 2") ); +} + +void DesktopBehavior::load() +{ + load( false ); +} + +void DesktopBehavior::load( bool useDefaults ) +{ + g_pConfig->setReadDefaults( useDefaults ); + g_pConfig->setGroup( "Desktop Icons" ); + bool bShowHidden = g_pConfig->readBoolEntry("ShowHidden", DEFAULT_SHOW_HIDDEN_ROOT_ICONS); + showHiddenBox->setChecked(bShowHidden); + //bool bVertAlign = g_pConfig->readBoolEntry("VertAlign", DEFAULT_VERT_ALIGN); + KTrader::OfferList plugins = KTrader::self()->query("ThumbCreator"); + previewListView->clear(); + QStringList previews = g_pConfig->readListEntry("Preview"); + for (KTrader::OfferList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it) + new DesktopBehaviorPreviewItem(this, previewListView, *it, previews.contains((*it)->desktopEntryName())); + new DesktopBehaviorPreviewItem(this, previewListView, previews.contains("audio/")); + // + g_pConfig->setGroup( "FMSettings" ); + toolTipBox->setChecked(g_pConfig->readBoolEntry( "ShowFileTips", true ) ); + g_pConfig->setGroup( "Menubar" ); + KConfig config( "kdeglobals" ); + config.setGroup("KDE"); + bool globalMenuBar = config.readBoolEntry("macStyle", false); + bool desktopMenuBar = g_pConfig->readBoolEntry("ShowMenubar", false); + if ( globalMenuBar ) + desktopMenuGroup->setButton( 2 ); + else if ( desktopMenuBar ) + desktopMenuGroup->setButton( 1 ); + else + desktopMenuGroup->setButton( 0 ); + g_pConfig->setGroup( "General" ); + vrootBox->setChecked( g_pConfig->readBoolEntry( "SetVRoot", false ) ); + iconsEnabledBox->setChecked( g_pConfig->readBoolEntry( "Enabled", true ) ); + autoLineupIconsBox->setChecked( g_pConfig->readBoolEntry( "AutoLineUpIcons", false ) ); + + // + g_pConfig->setGroup( "Mouse Buttons" ); + QString s; + s = g_pConfig->readEntry( "Left", "" ); + for ( int c = 0 ; c < choiceCount ; c ++ ) + if (s == s_choices[c]) + { leftComboBox->setCurrentItem( c ); break; } + s = g_pConfig->readEntry( "Middle", "WindowListMenu" ); + for ( int c = 0 ; c < choiceCount ; c ++ ) + if (s == s_choices[c]) + { middleComboBox->setCurrentItem( c ); break; } + s = g_pConfig->readEntry( "Right", "DesktopMenu" ); + for ( int c = 0 ; c < choiceCount ; c ++ ) + if (s == s_choices[c]) + { rightComboBox->setCurrentItem( c ); break; } + + comboBoxChanged(); + if (m_bHasMedia) + fillMediaListView(); + enableChanged(); +} + +void DesktopBehavior::defaults() +{ + load( true ); +} + + +void DesktopBehavior::save() +{ + g_pConfig->setGroup( "Desktop Icons" ); + g_pConfig->writeEntry("ShowHidden", showHiddenBox->isChecked()); + QStringList previews; + for ( DesktopBehaviorPreviewItem *item = static_cast( previewListView->firstChild() ); + item; + item = static_cast( item->nextSibling() ) ) + if ( item->isOn() ) + previews.append( item->pluginName() ); + g_pConfig->writeEntry( "Preview", previews ); + g_pConfig->setGroup( "FMSettings" ); + g_pConfig->writeEntry( "ShowFileTips", toolTipBox->isChecked() ); + g_pConfig->setGroup( "Menubar" ); + g_pConfig->writeEntry("ShowMenubar", desktopMenuGroup->selectedId() == 1); + KConfig config( "kdeglobals" ); + config.setGroup("KDE"); + bool globalMenuBar = desktopMenuGroup->selectedId() == 2; + if ( globalMenuBar != config.readBoolEntry("macStyle", false) ) + { + config.writeEntry( "macStyle", globalMenuBar, true, true ); + config.sync(); + KIPC::sendMessageAll(KIPC::ToolbarStyleChanged); + } + g_pConfig->setGroup( "Mouse Buttons" ); + g_pConfig->writeEntry("Left", s_choices[ leftComboBox->currentItem() ] ); + g_pConfig->writeEntry("Middle", s_choices[ middleComboBox->currentItem() ]); + g_pConfig->writeEntry("Right", s_choices[ rightComboBox->currentItem() ]); + + g_pConfig->setGroup( "General" ); + g_pConfig->writeEntry( "SetVRoot", vrootBox->isChecked() ); + g_pConfig->writeEntry( "Enabled", iconsEnabledBox->isChecked() ); + g_pConfig->writeEntry( "AutoLineUpIcons", autoLineupIconsBox->isChecked() ); + + saveMediaListView(); + g_pConfig->sync(); + + // Tell kdesktop about the new config file + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + QByteArray data; + + int konq_screen_number = KApplication::desktop()->primaryScreen(); + QCString appname; + if (konq_screen_number == 0) + appname = "kdesktop"; + else + appname.sprintf("kdesktop-screen-%d", konq_screen_number); + kapp->dcopClient()->send( appname, "KDesktopIface", "configure()", data ); + // for the standalone menubar setting + kapp->dcopClient()->send( "menuapplet*", "menuapplet", "configure()", data ); + kapp->dcopClient()->send( "kicker", "kicker", "configureMenubar()", data ); + kapp->dcopClient()->send( "kwin*", "", "reconfigure()", data ); +} + +void DesktopBehavior::enableChanged() +{ + bool enabled = iconsEnabledBox->isChecked(); + behaviorTab->setTabEnabled(behaviorTab->page(1), enabled); + vrootBox->setEnabled(enabled); + + if (m_bHasMedia) + { + behaviorTab->setTabEnabled(behaviorTab->page(2), enabled); + enableMediaBox->setEnabled(enabled); + mediaListView->setEnabled(enableMediaBox->isChecked()); + } + + changed(); +} + +void DesktopBehavior::comboBoxChanged() +{ + int i; + i = leftComboBox->currentItem(); + leftEditButton->setEnabled((i == customMenu1ID) || (i == customMenu2ID)); + i = middleComboBox->currentItem(); + middleEditButton->setEnabled((i == customMenu1ID) || (i == customMenu2ID)); + i = rightComboBox->currentItem(); + rightEditButton->setEnabled((i == customMenu1ID) || (i == customMenu2ID)); +} + +void DesktopBehavior::editButtonPressed() +{ + int i = 0; + if (sender() == leftEditButton) + i = leftComboBox->currentItem(); + if (sender() == middleEditButton) + i = middleComboBox->currentItem(); + if (sender() == rightEditButton) + i = rightComboBox->currentItem(); + + QString cfgFile; + if (i == customMenu1ID) + cfgFile = "kdesktop_custom_menu1"; + if (i == customMenu2ID) + cfgFile = "kdesktop_custom_menu2"; + + if (cfgFile.isEmpty()) + return; + + KCustomMenuEditor editor(this); + KConfig cfg(cfgFile, false, false); + + editor.load(&cfg); + if (editor.exec()) + { + editor.save(&cfg); + cfg.sync(); + emit changed(); + } +} + +QString DesktopBehavior::quickHelp() const +{ + return i18n("

    Behavior

    \n" + "This module allows you to choose various options\n" + "for your desktop, including the way in which icons are arranged and\n" + "the pop-up menus associated with clicks of the middle and right mouse\n" + "buttons on the desktop.\n" + "Use the \"What's This?\" (Shift+F1) to get help on specific options."); +} + +#include "desktopbehavior_impl.moc" diff --git a/kcontrol/konq/desktopbehavior_impl.h b/kcontrol/konq/desktopbehavior_impl.h new file mode 100644 index 000000000..0417e8994 --- /dev/null +++ b/kcontrol/konq/desktopbehavior_impl.h @@ -0,0 +1,79 @@ +/** + * (c) Martin R. Jones 1996 + * (c) David Faure 1998, 2000 + * (c) John Firebaugh 2003 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef desktopbehavior_h +#define desktopbehavior_h + +#include "desktopbehavior.h" +#include +#include + +class DesktopBehavior : public DesktopBehaviorBase +{ + Q_OBJECT +public: + DesktopBehavior(KConfig *config, QWidget *parent = 0L, const char *name = 0L ); + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + friend class DesktopBehaviorPreviewItem; + friend class DesktopBehaviorMediaItem; + +signals: + void changed(); + +private slots: + void enableChanged(); + void comboBoxChanged(); + void editButtonPressed(); + +private: + KConfig *g_pConfig; + + void fillMediaListView(); + void saveMediaListView(); + + // Combo for the menus + void fillMenuCombo( QComboBox * combo ); + + typedef enum { NOTHING = 0, WINDOWLISTMENU, DESKTOPMENU, APPMENU, BOOKMARKSMENU=12 } menuChoice; + bool m_bHasMedia; +}; + +class DesktopBehaviorModule : public KCModule +{ + Q_OBJECT + +public: + DesktopBehaviorModule(KConfig *config, QWidget *parent = 0L, const char *name = 0L ); + virtual void load() { m_behavior->load(); emit KCModule::changed( false ); } + virtual void save() { m_behavior->save(); emit KCModule::changed( false ); } + virtual void defaults() { m_behavior->defaults(); emit KCModule::changed( true ); } + +private slots: + void changed(); + +private: + DesktopBehavior* m_behavior; +}; + +#endif diff --git a/kcontrol/konq/desktoppath.desktop b/kcontrol/konq/desktoppath.desktop new file mode 100644 index 000000000..d646cbf24 --- /dev/null +++ b/kcontrol/konq/desktoppath.desktop @@ -0,0 +1,226 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/desktop/index.html#desktop-desktop-path +Icon=kfm +Exec=kcmshell desktoppath + + +X-KDE-Library=konq +X-KDE-FactoryName=dpath +X-KDE-ParentApp=kcontrol + +Name=Paths +Name[af]=Soekgidse +Name[ar]=المسارات +Name[az]=Cığırlar +Name[be]=Шляхі +Name[bg]=Пътища +Name[bn]=পাথ (Paths) +Name[br]=Hentoù +Name[bs]=Putevi +Name[ca]=Rutes +Name[cs]=Cesty +Name[csb]=Stegnë +Name[cy]=Llwybrau +Name[da]=Stier +Name[de]=Pfade +Name[el]=Κατάλογοι +Name[eo]=Padoj +Name[es]=Rutas +Name[et]=Otsinguteed +Name[eu]=Bide-izenak +Name[fa]=مسیرها +Name[fi]=Polut +Name[fr]=Emplacements +Name[fy]=Paden +Name[ga]=Conairí +Name[gl]=Camiños +Name[he]=נתיבים +Name[hi]=पथ +Name[hr]=Putanje +Name[hu]=Elérési utak +Name[is]=Slóðir +Name[it]=Percorsi +Name[ja]=パス +Name[ka]=ბილიკი +Name[kk]=Жолдар +Name[km]=ផ្លូវ +Name[ko]=경로 +Name[lo]=ຄະນິດສາດ +Name[lt]=Keliai +Name[lv]=Ceļi +Name[mk]=Патеки +Name[mn]=Замууд +Name[ms]=Laluan +Name[nb]=Stier +Name[nds]=Padden +Name[ne]=मार्ग +Name[nl]=Paden +Name[nn]=Stiar +Name[nso]=Ditsejana +Name[pa]=ਮਾਰਗ +Name[pl]=Ścieżki +Name[pt]=Localizações +Name[pt_BR]=Caminhos +Name[ro]=Căi +Name[ru]=Пути +Name[rw]=Inzira +Name[se]=Bálgát +Name[sk]=Cesty +Name[sl]=Poti +Name[sr]=Путање +Name[sr@Latn]=Putanje +Name[ss]=Tindlela +Name[sv]=Sökvägar +Name[ta]=பாதைகள் +Name[te]=దారులు +Name[tg]=Роҳчаҳо +Name[th]=เส้นทาง +Name[tr]=Yollar +Name[tt]=Yullar +Name[uk]=Шляхи +Name[uz]=Yoʻllar +Name[uz@cyrillic]=Йўллар +Name[ven]=Ndila +Name[vi]=Đường dẫn +Name[wa]=Tchimins +Name[xh]=Umendo +Name[zh_CN]=路径 +Name[zh_TW]=路徑 +Name[zu]=Izindlela + +Comment=Change the location important files are stored +Comment[af]=Verander die ligging belangrik lêers word gestoor +Comment[ar]=غير المكان المستعمل لحفظ الملفات المهمة +Comment[az]=Vacib faylların saxlandığı yeri dəyişdirin +Comment[be]=Змена тэчак для захавання важных файлаў +Comment[bg]=Настройване местоположението на важните файлове +Comment[bn]=বিভিন্ন গুরুত্বপূর্ণ ফাইল কোন অবস্থানে থাকবে তা পরিবর্তন করুন +Comment[bs]=Podesite lokacije važnih filtera +Comment[ca]=Canvia la localització d'on seran desats els fitxers importants +Comment[cs]=Změna umístění důležitých souborů +Comment[csb]=Môl trzëmaniô wôżnëch lopków +Comment[cy]=Newid lle mae ffeiliau pwysig yn cael eu cadw +Comment[da]=Ændr stedet hvor vigtige filer gemmes +Comment[de]=Den Ordner für wichtige Dateien ändern +Comment[el]=Αλλάξτε την τοποθεσία στην οποία αποθηκεύονται σημαντικά αρχεία +Comment[eo]=Ŝanĝu la lokon, kie oni konservas gravajn dosierojn +Comment[es]=Cambiar la ubicación de archivos importantes +Comment[et]=Oluliste failide asukoha muutmine +Comment[eu]=Aldatu fitxategi inportanteen kokapena +Comment[fa]=تغییر محل ذخیرۀ پرونده‌های مهم +Comment[fi]=Tässä kohdassa voit määritellä minne tärkeät tiedostot tallennetaan +Comment[fr]=Changer l'endroit où les fichiers importants sont stockés +Comment[fy]=Hjir kinne jo de lokaasje fan it bewarjen fan belangrike triemmen wizigje +Comment[gl]=Cambiar o lugar onde se gaardan os ficheiro importantes +Comment[he]=שינוי המיקומים בהם מאוחסנים קבצים חשובים +Comment[hi]=महत्वपूर्ण फ़ाइलों के रखने का स्थान बदलें +Comment[hr]=Promijenite lokaciju za smještaj važnih datoteka +Comment[hu]=Néhány fontosabb elérési utat lehet itt beállítani +Comment[is]=Breyta staðsetningu mikilvægra skráa +Comment[it]=Cambia la posizione in cui vengono salvati i file importanti +Comment[ja]=重要なファイルなどの保存場所を変更 +Comment[ka]=მნიშვნელოვანი ფაილბის გეზის ცვლილება შენახულია +Comment[kk]=Маңызды файлдар орналасатын орындарын өзгерту +Comment[km]=ប្ដូរ​ទីតាំង​ដែល​ត្រូវ​ទុក​ឯកសារ​សំខាន់ៗ +Comment[ko]=중요한 파일이 저장되는 곳 설정 +Comment[lo]=ຕົວກອງການເລືອກຫນ້າ/ການຈັດລະດັບ +Comment[lt]=Pakeiskite svarbių bylų saugojimo vietą +Comment[lv]=Mainīt nozīmīgu failu atrašanās vietas +Comment[mk]=Сменете ја локацијата каде што се чуваат важни датотеки +Comment[mn]=Чухал файлууд агуулж буй лавлах өөрчилөх +Comment[ms]=Ubah lokasi fail penting disimpan +Comment[mt]=Ibdel fejn jiġu miżmuma fajls importanti +Comment[nb]=Endre plasseringa av viktige filer +Comment[nds]=Den Oort för wichtige Dateien ännern +Comment[ne]=महत्वपूर्ण फाइल भण्डारण गरिएको स्थान परिवर्तन गर्नुहोस् +Comment[nl]=Hier kunt u de locatie voor het opslaan van belangrijke bestanden wijzigen +Comment[nn]=Endra plasseringa av viktige filer +Comment[nso]=Fetosa tulo yeo go bolokwago difaele tse bohlokwa +Comment[pa]=ਜ਼ਰੂਰੀ ਫਾਇਲਾਂ ਸੰਭਾਲਣ ਲਈ ਟਿਕਾਣਾ ਤਬਦੀਲ +Comment[pl]=Miejsce przechowywania ważnych plików +Comment[pt]=Alterar as localizações onde os ficheiros importantes estão guardados +Comment[pt_BR]=Modifica a localização onde importantes arquivos devem ser armazenados +Comment[ro]=Modifică locația de stocare a fișierelor importante +Comment[ru]=Пути к важным файлам +Comment[rw]=Guhindura indanganturo yaho amadosiye ngirakamaro abitswe +Comment[se]=Rievdat báikkiid gosa dehálaš fiillat bidjut +Comment[sk]=Zmena umiestnenia dôležitých súborov +Comment[sl]=Spremenite lokacije shranjenih pomembnih datotek +Comment[sr]=Промена локације где су смештени битни фајлови +Comment[sr@Latn]=Promena lokacije gde su smešteni bitni fajlovi +Comment[sv]=Ändra plats för lagring av viktiga filer +Comment[ta]=முக்கிய கோப்புகள் சேகரிக்கப்பட்டுள்ள இடத்தை மாற்று +Comment[tg]=Тариқ барои файлҳои асосӣ +Comment[th]=เปลี่ยนตำแหน่งที่เก็บแฟ้มที่สำคัญ +Comment[tr]=Önemli dosyaların kaydedildiği yeri düzenle +Comment[tt]=İñ kiräk biremnärneñ yullar tözätü +Comment[uk]=Зміна адреси зберігання важливих файлів +Comment[uz]=Muhim fayllarning joylashgan joyini oʻzgartirish +Comment[uz@cyrillic]=Муҳим файлларнинг жойлашган жойини ўзгартириш +Comment[ven]=Shandukisani fhethu huna dzifaela dza ndeme dza vhulungwa hone +Comment[vi]=Thay đổi đường dẫn tới các tập tin quan trọng +Comment[wa]=Candjî l' plaece ki les impôrtants fitchîs sont wårdés +Comment[xh]=Tshintsha indawo apho zibekwa kona iifayile ezibalulekileyo +Comment[zh_CN]=更改重要文件存储的位置 +Comment[zh_TW]=改變儲存重要檔案的位置 +Comment[zu]=Shintsha indawo okugcinwe kuyo amafayela abalulekile +Keywords=konqueror,filemanager,paths,desktop,directories,autostart +Keywords[ar]=konqueror,مسيير الملفات,المسارات,سطح المكتب,الأدلة,تلقائية بدء التشغيل +Keywords[be]=Кіраўнік файлаў,Шляхі,Працоўны стол,Тэчкі,Дырэкторыі,Аўтаматычны запуск,Аўтазапуск,Запуск,konqueror,filemanager,paths,desktop,directories,autostart +Keywords[bg]=път, документи, работен, плот, konqueror, filemanager, paths, desktop, directories, autostart +Keywords[bs]=konqueror,filemanager,paths,desktop,trash,directories,autostart,datoteke,smeće +Keywords[ca]=konqueror,gestor de fitxers,rutes,escriptori,directoris,autoinici +Keywords[cs]=Konqueror,Správce souborů,Cesty,Plocha,Adresáře,Autostart, Automatické spuštění +Keywords[csb]=konqueror,menedżer lopków,stegnë,biurko,pùlt,katalodżi,automatné zrëszënié +Keywords[da]=konqueror,filhåndtering,stier,desktop,mapper,autostart +Keywords[de]=Konqueror,Dateimanager,Pfade,Arbeitsfläche,Mülleimer,Verzeichnisse,Ordner,Autostart +Keywords[el]=konqueror,διαχειριστής αρχείων,διαδρομές,επιφάνεια εργασίας,απορρίμματα,κατάλογοι,αυτόματη εκκίνηση +Keywords[eo]=konqueranto,dosieradministrilo,vojoj,labortablo,dosierujoj,aŭtolanĉo +Keywords[es]=konqueror,gestor de archivos,rutas,escritorio,papelera,directorios,autoinicio +Keywords[et]=konqueror,failihaldur,otsinguteed,töölaud,kataloogid,autostart +Keywords[eu]=konqueror,fitxategi kudeatzailea,bide-izenak,mahaigaina,direktorioak,autoabiatu +Keywords[fa]=konqueror، مدیر پرونده، مسیرها، رومیزی، فهرستهای راهنما، خودآغاز +Keywords[fi]=konqueror,tiedostonhallinta,polut,työpöytä,kansiot,automaattikäynnistys +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,paths,chemins,emplacements,bureau,dossiers,répertoires,démarrage automatique,autostart +Keywords[fy]=konqueror,filemanager,bestandsbeheer,triembehear,path,paden,paad,zoekpaden,sykpaden,desktop,bureaublad,buroblêd,trash,prullenbak,jiskefet,directories,triemtafels,mappen,folders,autostart,documenten,dokuminten +Keywords[ga]=konqueror,bainisteoir comhad,conairí,deasc,comhadlanna +Keywords[gl]=konqueror,xestor de ficheiros,rotas,escritório,lixo,cartafoles,autoinício +Keywords[he]=konqueror,מנהל קבצים,נתיבים,שולחן עבודה,אשפה,ספריות,הפעלה אוטומטית, filemanager,paths,desktop,directories,autostart +Keywords[hr]=konqueror,filemanager,paths,desktop,directories,autostart,upravljač datotekama,putanje,radna površina,mape,automatsko pokretanje +Keywords[hu]=Konqueror,fájlkezelő,elérési utak,munkaasztal,könyvtárak,automatikus indítás +Keywords[is]=konqueror,skráastjóri,slóðir,skjáborð,möppur,sjálfræsing +Keywords[it]=konqueror,filemanager,percorsi,path,desktop,cestino,directory,avvio automatico,gestione file,file +Keywords[ja]=konqueror,ファイルマネージャ,パス,デスクトップ,ごみ箱,ディレクトリ,自動スタート +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,ផ្លូវ,ផ្ទៃតុ,ថត,ចាប់ផ្ដើម​ស្វ័យប្រវត្តិ +Keywords[lt]=konqueror,filemanager,paths,desktop,directories,autostart, bylų tvarkyklė,keliai,darbastalis,aplankai +Keywords[mk]=konqueror,filemanager,paths,desktop,trash,directories,autostart,менаџер на датотеки,патеки,работна површина,површина,корпа,именици,директориуми,папки,автостарт +Keywords[nb]=konqueror,filbehandler,paths,desktop,papirkurv,mapper,autostart,filbehandler,stier,arbeidsflate,søppel,kataloger,skrivebord +Keywords[nds]=Konqueror,Dateipleger,Padden,Schriefdisch,Orner,Autostart +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, मार्गहरू, डेस्कटप, डाइरेक्टरीहरू, स्वत: सुरुआत +Keywords[nl]=konqueror,filemanager,bestandsbeheer,path,paden,zoekpaden,desktop,bureaublad,trash,prullenbak,directories,mappen,folders,autostart,documenten, +Keywords[nn]=Konqueror,filhandsamar,stigar,skrivebord,mapper,autostart +Keywords[pa]=autostart,ਕੋਨਕਿਉਰਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਮਾਰਗ,ਵੇਹੜਾ,ਡਾਇਰੈਕਟਰੀਆਂ +Keywords[pl]=konqueror,menedżer plików,ścieżki,biurko,pulpit,katalogi,automatyczne uruchamianie +Keywords[pt]=konqueror,gestor de ficheiros,localizações,ecrã,lixo,directorias,arranque,pastas +Keywords[pt_BR]=konqueror,gerenciador de arquivos, caminhos,área de trabalho,pastas,auto-início +Keywords[ro]=konqueror,manager de fișiere,căi,desktop,directoare,autostart +Keywords[ru]=konqueror,filemanager,paths,desktop,trash,directories,autostart +Keywords[rw]= Konqueror,mugengadosiye,inzira,ibiro,ububiko,kwitangiza +Keywords[se]=konqueror,fiilagieđahalli,bálgát,čállinbeavdi,máhpat,autoálggaheapmi +Keywords[sl]=konqueror,upravitelj datotek,poti,namizje,mape,samodejni zagon +Keywords[sr]=konqueror,filemanager,paths,desktop,directories,autostart,путање,менаџер,радна,површина,фасцикле +Keywords[sr@Latn]=konqueror,filemanager,paths,desktop,directories,autostart,putanje,menadžer,radna,površina,fascikle +Keywords[sv]=konqueror,filhanterare,sökvägar,skrivbord,kataloger,automatisk start +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,பாதைகள்,மேல்மேசை,அடைவுகள்,தானாகவே தொடங்குதல் +Keywords[th]=คอนเควอร์เรอร์,ตัวจัดการแฟ้ม,เส้นทาง,พื้นที่ทำงาน,ถังขยะ,ไดเร็กทอรี,เริ่มอัตโนมัติ +Keywords[tr]=konqueror,dosya yöneticisi,yollar,masaüstü,çöp,dizinler,otomatik başlangıç +Keywords[uk]=konqueror,менеджер файлів,шляхи,стільниця,смітник,каталоги,автозапуск +Keywords[uz]=konqueror,fayl boshqaruvchisi,yoʻllar,ish stoli,direktoriyalar,avto-boshlash +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,йўллар,иш столи,директориялар,авто-бошлаш +Keywords[vi]=konqueror,trình quản lý tập tin,đường dẫn,màn hình nền,thùng rác,thư mục,tự khởi động +Keywords[wa]=konqueror,manaedjeu d' fitchî,tchimins,sicribanne,ridants,autostart,enonde tot seu +Keywords[zh_CN]=konqueror,filemanager,paths,desktop,directories,autostart,文件管理器,路径,桌面,目录,自动启动 +Keywords[zh_TW]=konqueror,filemanager,paths,desktop,directories,autostart,征服家,檔案管理程式,路徑,桌面,目錄,自動啟動 + +Categories=Qt;KDE;X-KDE-settings-system; diff --git a/kcontrol/konq/fileappearance.desktop b/kcontrol/konq/fileappearance.desktop new file mode 100644 index 000000000..3c2b8c87b --- /dev/null +++ b/kcontrol/konq/fileappearance.desktop @@ -0,0 +1,234 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/filemanager/index.html +Icon=kfm +Exec=kcmshell fileappearance + + +X-KDE-Library=konq +X-KDE-FactoryName=appearance +X-KDE-ParentApp=kcontrol + +Name=Appearance +Name[af]=Voorkoms +Name[ar]=المظهر +Name[az]=Görünüş +Name[be]=Вонкавы выгляд +Name[bg]=Системен панел +Name[bn]=চেহারা +Name[br]=Neuziadur +Name[bs]=Izgled +Name[ca]=Aparença +Name[cs]=Vzhled +Name[csb]=Wëzdrzatk +Name[cy]=Golwg +Name[da]=Udseende +Name[de]=Erscheinungsbild +Name[el]=Εμφάνιση +Name[eo]=Aspekto +Name[es]=Aspecto +Name[et]=Välimus +Name[eu]=Itxura +Name[fa]=ظاهر +Name[fi]=Ulkonäkö +Name[fr]=Apparence +Name[fy]=Uterlik +Name[ga]=Cuma +Name[gl]=Apariencia +Name[he]=מראה +Name[hi]=शक्ल-सूरत +Name[hr]=Izgled +Name[hu]=Megjelenés +Name[id]=Penampilan +Name[is]=Útlit +Name[it]=Aspetto +Name[ja]=外観 +Name[ka]=გარეგნობა +Name[kk]=Көрініс +Name[km]=រូបរាង +Name[ko]=모양 +Name[lo]=ການປະກົດ +Name[lt]=Išvaizda +Name[lv]=Izskats +Name[mk]=Изглед +Name[mn]=Харагдалт +Name[ms]=Rupa +Name[mt]=Apparenza +Name[nb]=Utseende +Name[nds]=Utsehn +Name[ne]=दृश्य +Name[nl]=Uiterlijk +Name[nn]=Utsjånad +Name[nso]=Ponagalo +Name[pa]=ਦਿੱਖ +Name[pl]=Wygląd +Name[pt]=Aparência +Name[pt_BR]=Aparência +Name[ro]=Aspect +Name[ru]=Внешний вид +Name[rw]=Imigaragarire +Name[se]=Fárda +Name[sk]=Vzhľad +Name[sl]=Videz +Name[sr]=Изглед +Name[sr@Latn]=Izgled +Name[sv]=Utseende +Name[ta]=தோற்றம் +Name[tg]=Намуди зоҳирӣ +Name[th]=ลักษณะที่ปรากฎ +Name[tr]=Görünüm +Name[tt]=Küreneş +Name[uk]=Вигляд +Name[uz]=Tashqi koʻrinish +Name[uz@cyrillic]=Ташқи кўриниш +Name[ven]=Mbonalelo +Name[vi]=Diện mạo +Name[wa]=Rivnance +Name[xh]=Inkangeleko +Name[zh_CN]=外观 +Name[zh_TW]=外觀 +Name[zu]=Ukubukeka + +Comment=You can configure how Konqueror looks as a file manager here +Comment[af]=Jy kan hier opstel hoe Konqueror as 'n lêer bestuurder lyk +Comment[ar]=يمكنك هنا إعداد كيفية ظهور Konqueror كمسيير للملفات +Comment[az]=Konqueror-un fayl idarəçisi olaraq nəcə görünəcəyini buradan quraşdırın +Comment[be]=Тут вы можаце змяніць выгляд Konqueror для кіравання файламі +Comment[bg]=Настройване външния вид на файловия браузър +Comment[bn]=ফাইল ম্যানেজার হিসাবে কনকরার-এর চেহারা কেমন হবে তা এখানে কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ penaos Konqueror az zo gwellet evel a merour restroù +Comment[bs]=Ovdje možete podesiti kako izgleda Konqueror kao upravitelj datotekama +Comment[ca]=Aquí podeu configurar com es mostrarà el Konqueror com a gestor de fitxers +Comment[cs]=Zde je možné nastavit vzhled správce souborů +Comment[csb]=Kònfigùracëjô wëzdrzatkù Konquerora jakno menadżera lopków +Comment[cy]=Ffurfweddu golwg Konqueror fel rheolydd ffeiliau +Comment[da]=Her kan du indstille hvordan Konqueror ser ud som filhåndtering +Comment[de]=Hier können Sie das Erscheinungsbild von Konqueror als Dateimanager festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε το πως θα εμφανίζεται το Konqueror ως διαχειριστής αρχείων +Comment[eo]=Ĉi tie vi povas agordi kiel konkeranto aspektas kiel dosieradministrilo +Comment[es]=Aquí puede configurar el aspecto de Konqueror como gestor de archivos +Comment[et]=Konquerori failihalduri välimuse seadistamine +Comment[eu]=Hemen Konquerorren itxura konfigura dezakezu fitxategi kudeatzaile gisa ari denean +Comment[fa]=می‌توانید پیکربندی کنید، که اینجا Konqueror به عنوان مدیر پرونده چگونه به نظر می‌رسد. +Comment[fi]=Tässä kohdassa voit määritellä Konquerorin tiedostonhallinnan ulkonäön asetuksia +Comment[fr]=Apparence de Konqueror en tant que gestionnaire de fichiers +Comment[fy]=Hjir kinne jo it uterlik fan Konqueror as triembehearder ynstelle +Comment[gl]=Pode configurar aqui o xeito en que se mostra Konqueror como xestor de ficheiros +Comment[he]=שינוי הדרך שבה Konqueror נראה בתור מנהל קבצים +Comment[hi]=आप कॉन्फ़िगर कर सकते हैं कि कॉन्करर यहाँ फ़ाइल प्रबंधक जैसे कैसे दिखे +Comment[hr]=Konfiguriranje izgleda Konqueror upravljača datoteka +Comment[hu]=Itt lehet beállítani a Konqueror fájlkezelő jellemzőit +Comment[is]=Hér getur þú stillt hvernig Konqueror lítur út sem skráastjóri +Comment[it]=Configura l'aspetto di Konqueror come gestore dei file +Comment[ja]=Konqueror ファイルマネージャの外観を設定 +Comment[ka]=Konqueror-ის, როგორც ფაილური მენეჯერის, იერის კონფიგურირება +Comment[kk]=Konqueror файл менеджер ретінде қолданғандағы көрінісі +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនា​សម្ព័ន្ធ របៀប​ដែល Konqueror មើល​ទៅ​ដូចជា​កម្មវិធី​គ្រប់គ្រង​ឯកសារ +Comment[ko]=Konqueror의 파일 관리자로서의 모양 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງ ຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite nustatyti, kaip atrodo Konqueror-bylų tvarkyklė +Comment[lv]=Šeit jūs varat konfigurēt Iekarotāja izskatu failu pārlūkošanas laikā +Comment[mk]=Конфигурирајте го изгледот на Konqueror како менаџер на датотеки +Comment[mn]=Энд та конкюрорын харагдалтыг файл удирдагчийн хувьд тогтоох +Comment[ms]=Anda boleh konfigur bagaiman rupa Konqueror sebagai pengurus fail di sini +Comment[mt]=Hawn tista' tikkonfigura kif jidher Konqueror bħala manager tal-fajls +Comment[nb]=Tilpass hvordan filbehandleren Konqueror skal se ut +Comment[nds]=Hier kannst Du instellen, wodennig Konqueror as Dateipleger utsehn schall +Comment[ne]=तपाईँले यहाँ कन्क्वेररले फाइल प्रबन्धकलाई हेर्ने तरिका कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=Hier kunt u het uiterlijk van Konqueror als bestandsbeheerder instellen +Comment[nn]=Her kan du velja korleis filhandsamaren Konqueror skal sjå ut +Comment[nso]=O swanetse go beakanya ka mokgwa wo Konqueror e bogegago bjale ka molaodi wa faele mo +Comment[pa]=ਤੁਸੀਂ ਇੱਥੇ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕੋਨਕਿਉਰਰ ਇੱਕ ਫਾਇਲ ਮੈਨੇਜਰ ਦੇ ਰੂਪ ਵਿੱਚ ਕਿਵੇਂ ਦਿਖਾਈ ਦੇਵੇਗਾ। +Comment[pl]=Konfiguracja wyglądu Konquerora jako menedżera plików +Comment[pt]=O utilizador pode configurar aqui a forma como o Konqueror age, como um gestor de ficheiros +Comment[pt_BR]=Você pode configurar aqui como o Konqueror ficará como gerenciador de arquivos +Comment[ro]=Configurează aspectul Konqueror ca manager de fișiere +Comment[ru]=Настройка внешнего вида Konqueror как менеджера файлов +Comment[rw]=Ushobora kugena ukuntu Konqueror igaragara nka mugengadosiye hano +Comment[se]=Dás heivehat Konquerora fárdda fiilagieđahallin +Comment[sk]=Nastavenie vzhľadu Konquerora ako správcu súborov +Comment[sl]=Nastavitve izgleda Konquerorja kot upravitelja datotek +Comment[sr]=Овде можете подесити како ће Konqueror као менаџер фајлова да изгледа +Comment[sr@Latn]=Ovde možete podesiti kako će Konqueror kao menadžer fajlova da izgleda +Comment[sv]=Anpassa hur Konqueror ser ut som filhanterare +Comment[ta]=கான்கொரர் கோப்பு மேலாளராக எப்படி தெரிகிறது என்பதை இங்கே வடிவமைக்க முடியும். +Comment[tg]= Шумо метавонед зоҳири Konqueror-ро ба унвони мудири файл дар инҷо танзим кунед. +Comment[th]=คุณสามารถปรับแต่งคอนเควอร์เรอร์ในการเป็นเครื่องมือจัดการแฟ้มได้ที่นี่ +Comment[tr]=Konqueror'un dosya yöneticisi olarak nasıl görüneceğini yapılandırın +Comment[tt]=Birem idäräçe bularaq eşläwçe Konqueror'nıñ küreneşen caylaw +Comment[uk]=Тут можна налаштувати вигляд Konqeror, як менеджера сеансу +Comment[uz]=Konqueror fayl boshqaruvchisi sifatida qanday koʻrinishini moslash +Comment[uz@cyrillic]=Konqueror файл бошқарувчиси сифатида қандай кўринишини мослаш +Comment[ven]=Ninga dzudzanya uri na Konqueror i sedzea sa mulanguli wa faela hafhano +Comment[vi]=Bạn có thể cấu hình ngoại hình của Konqueror trông như nào khi quản lý tập tin ở đây +Comment[wa]=Chal vos ploz apontyî li rivnance di Konqueror cwand i fwait l' manaedjeu di fitchîs +Comment[xh]=Ungaqwalasela indlela ebonakala ngoyo i Konqueror njengomphathi wefayile +Comment[zh_CN]=在这里配置 Konqueror 的文件管理器外观 +Comment[zh_TW]=您可以在這裡設定 Konqueror 做為檔案管理程式的外觀 +Comment[zu]=Ungahlanganisela ukuthi i-konqueror ibukeke kanjani njengemenenja yamafayela lapha +Keywords=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour +Keywords[ar]=konqueror,مسيير الملفات,word wrap,wrap,تسطير الأحرف,الشاشة,حجم الملف,البايتات,المحرف,اللون,العرض +Keywords[az]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,fayl,fayl idarəçisi,rəng,yazı növü,altı cızıqlı +Keywords[be]=Кіраўнік файлаў,Перанос словаў,Перанос,Падкрэсліванне,Падкрэслены,Паказваць,Памер,Байты,Шрыфт,Колер,konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour +Keywords[bg]=файлове, файл, управление, браузър, мениджър, konqueror, filemanager,word wrap, wrap, underline, display, filesize, bytes, font, color, colour +Keywords[ca]=konqueror,gestor de fitxers, ajust de línia,subratllar,mostrar,mida del fitxer,octets,lletra,color,colorit +Keywords[cs]=Konqueror,Správce souborů,Zalamování,Podtrhávání,Zobrazení,Velikost souboru,Bajty,Písmo,Barva +Keywords[csb]=konqueror,menedżer lopków,zawijanié wierztów,zawijanié,podsztëchiwanié,wëzdrzatk, miara lopkù,bajtë,fòntë,farwa +Keywords[cy]=konqueror,rheolydd ffeiliau,lapio geiriau,lapio,tanlinellu,dangos,maint ffeil,beitiau,ffont,lliw +Keywords[da]=konqueror,filhåndtering,ordombrydning,ombrydning,understreg,vis,filstørrelse,byte,skrifttype,farve +Keywords[de]=Konqueror,Dateimanager,Zeilenfall,Textumbruch,Unterstreichen,Darstellung,Dateigröße,Schrift,Farbe,Byte +Keywords[el]=konqueror,διαχειριστής αρχείων,αναδίπλωση λέξεων,αναδίπλωση,υπογράμμιση,προβολή,μέγεθος αρχείου,bytes,γραμματοσειρά,χρώμα,χρώμα +Keywords[eo]=konkeranto,dosieradministrilo,vidigi,vidigo,dosiera grandeco,bajto,bitoko,okbitaro,tiparo,koloro +Keywords[es]=konqueror,gestor de archivos, ajuste de línea,subrayar,mostrar,tamaño de archivo,bytes,tipo de letra,color +Keywords[et]=konqueror,failihaldur,sõnade murdmine,murdmine,allajoonimine,ekraan,faili suurus,baidid,font,värv +Keywords[eu]=konqueror,fitxategi kudeatzailea,itzulbiratu, egokitu,azpimarratu,pantaila,fitxategi tamaina,byteak,letra-tipoa,kolorea +Keywords[fa]=konqueror، مدیر پرونده، سطربندی واژه، سطربندی، خط زیر، نمایش، اندازه پرونده، بایتها، قلم، رنگ، رنگ +Keywords[fi]=konqueror,tiedostonhallinta,sanankatkaisu,alleviivaus,tiedostokoko,tavuja, kirjasin,väri +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,retour à la ligne,soulignement,affichage,taille des fichiers,octets,police,couleur +Keywords[fy]=konqueror,filemanager,triembehear,word wrap,rigelôfbreking,ûnderstreakje,display,werjefte,filesize,triemgrutte,bytes,fonts,lettertypen,kleur,color +Keywords[ga]=konqueror,bainisteoir comhad,timfhilleadh focal,timfhilleadh,líne faoi,scáileán,méid comhaid,bearta,cló,clófhoireann,dath +Keywords[gl]=konqueror,xestor de ficheiros,axuste de palabras,axuste,subliñar,mostrar,tamaño de ficheiro,bites,fonte,cor +Keywords[he]=konqueror,מנהל קבצים,גלישת שורות,קו תחתון,תצוגה,גודל קובץ,בתים,גופן,צבע, konqueror,filemanager,word wrap, wrap,underline,display,filesize,bytes,font,color,colour +Keywords[hi]=कॉन्करर,फ़ाइलप्रबंधक,वर्ड रैप,रैप,रेखांकित,प्रकटन,फ़ाइलआकार,बाइट्स,फ़ॉन्ट,रंग +Keywords[hr]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,upravljač datoteka,omatanje riječi,omatanje,podvlačenje,prikaz,veličina datoteke,bajtovi,font,boja,boje +Keywords[hu]=konqueror,fájlkezelő,szótördelés,tördelés,aláhúzás,képernyő,fájlméret,bájt,betűtípus,szín,színek +Keywords[is]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour, litir,línuskipting,skjár,skjáborð,bæt,litur +Keywords[it]=konqueror,filemanager,a capo,sottolineatura,schermo,dimensione file,byte,caratteri,colori +Keywords[ja]=konqueror,ファイルマネージャ,ワードラップ,行の折り返し,下線,表示,ファイルサイズ, バイト,フォント,色,カラー +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,រុំ​ពាក្យ,រុំ,គូសបន្ទាត់​ក្រោម,បង្ហាញ,ទំហំ​ឯកសារ,បៃ,ពុម្ពអក្សរ,ពណ៌ +Keywords[lt]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,bylų tvarkyklė, žodžių perkėlimas, perkėlimas, pabraukimas, ekranas, bylos dydis, baitai, šriftas,spalva +Keywords[lv]=iekarotājs,failumenedžeris,vārdu apciršana,apciršana,pasvītrojums,ekrāns,failu izmērs,baiti,fonti,krāsas +Keywords[mk]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,менаџер на датотеки,прекршување на зборови,прекршување,подвлекување,екран,големина на датотека,бајти,фонт,боја +Keywords[mn]=Конкюрор,Файл удирдагч,Текст таслах,Доогуур зураас, Дүрслэл,Файлын хэмжээ,Бичиг,Өнгө,Байт +Keywords[mt]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,manager tal-fajls,daqs,kulur,kuluri +Keywords[nb]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,filbehandler,tekstbryting,understreket,skjerm,filstørrelse,byter,fonter,farger +Keywords[nds]=Konqueror,Dateipleger,word wrap,ümbreken,ünnerstreken,Dorstellen,Dateigrött,Bytes,Schriftoort, Klöör, Klören +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, शब्द बेर्नुहोस्, बेर्नुहोस्, कच, प्रदर्शन गर्नुहोस्, फाइल साइज, बाइट्स, फन्ट, रङ, रङ +Keywords[nl]=konqueror,filemanager,bestandsbeheer,word wrap,regelafbreking,onderstrepen,display,weergave,filesize,bestandsgrootte,bytes,fonts,lettertypen,kleur,color +Keywords[nn]=Konqueror,filhandsamar,tekstbryting,linjebryting,bryting,understrek,vis,filstorleik,byte,skrift,farge +Keywords[nso]=konqueror,molaodi wa faele,tatetso ya faele,tatetso ya mantsu,tatetso,thalelela,pontsho,bogolo bja faele,bytes,fonto,mmala,mmala +Keywords[pa]=ਕੋਨਕਿਉਰਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਸ਼ਬਦ ਸਮੇਟੋ,ਸਮੇਟੋ,ਹੇਠਾਂ ਰੇਖਾ,ਫਾਇਲ ਅਕਾਰ,ਬਾਈਟ,ਫੋਂਟ,ਰੰਗ ਝਲਕ +Keywords[pl]=konqueror,menedżer plików,zawijanie wierszy,zawijanie,podkreślenie,wygląd, rozmiar pliku,bajty,czcionki,kolor +Keywords[pt]=konqueror,gestor de ficheiros,mudança de linha,mudança,sublinhado,ecrã,tamanho do ficheiro,bytes,tipo de letra,cor +Keywords[pt_BR]=konqueror,gerenciador de arquivos,quebra de linha, sublinhado, display,tamanho de arquivo,bytes,fonte,cor,cor +Keywords[ro]=konqueror,manager de fișiere,limitare cuvînt,limitare,subliniere,afișare,mărime fișier,octeți,font,culoare +Keywords[rw]= Konqueror,mugengadosiye,ifunika ry'ijambo,gufunika,gucaho umurongo,Kugaragaza,inganoidosiye,bayite,imyandikire,ibara,ibara +Keywords[se]=Konqueror,fiilagieđahalli,linnjádoaddjin,doaddjin,vuolláisárgu,čájet,fiilasturrodat,stávvalat,fonta,ivdni +Keywords[sk]=konqueror,správa súborov,zalamovanie slov,podčiarknutie,zobrazenie,veľkosť súborov,bajty,písmo,farba +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,prelom vrstic,prelom,podčrta,prikaz,velikost datoteke,bajt,pisava,barva +Keywords[sr]=konqueror,filemanager,преламање текста,преламање,подвлачење,приказ,величина фајла,бајтови,фонт,боја +Keywords[sr@Latn]=konqueror,filemanager,prelamanje teksta,prelamanje,podvlačenje,prikaz,veličina fajla,bajtovi,font,boja +Keywords[sv]=konqueror,filhanterare,radbrytning,understreck,visa,filstorlek,byte,teckensnitt,färg +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,வார்த்தை மடக்கு, மடக்கு,அடிகோடிடு,காட்டு,கோப்பு அளவு,பைட்டுகள்,எழுத்துரு,வண்ணம்,வண்ணம் +Keywords[th]=คอนเควอร์เรอร์,จัดการแฟ้ม,ตัดคำ,ตัด,ขีดเส้นใต้,แสดงผล,ขนาดแฟ้ม,ไบต์,แบบอักษร,สี +Keywords[tr]=konqueror,dosya yöneticisi,görünüm,dosya boyu,bayt,yazıtipi,renk +Keywords[uk]=konqueror,менеджер файлів, переніс файлів,переніс,підкреслення,дисплей, розмір файлів,байти,шрифт,колір +Keywords[uz]=konqueror,fayl boshqaruvchisi,word wrap,wrap,tagini chizish,koʻrsatish,fayning hajmi,baytlar,shrift,rang +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,word wrap,wrap,тагини чизиш,кўрсатиш,файнинг ҳажми,байтлар,шрифт,ранг +Keywords[ven]=konqueror,mulanguli wa faela,putela ha fhungo,putela,talela,sumbedza,saizi ya faela, bytes,fontu,muvhala,muvhala +Keywords[vi]=konqueror,trình quản lý tập tin,bao quanh văn bản,bao quanh,gạch chân,màn hình,cỡ tập tin,số byte,phông chữ,mầu,mầu sắc +Keywords[wa]=konqueror,manaedjeu di fitchî,sorlignî,håyner,håynaedje,grandeu d' fitchî,bytes,bites,fonte,coleur +Keywords[xh]=konqueror,umphathi wefayile,songela amagama,songela, yenza umgca ezantsi,bonisa, ubngakanani befayile,bytes,umgca,umbala,umbala +Keywords[zh_CN]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,文件管理器,自动换行,下划线,显示,文件大小,字节,字体,颜色 +Keywords[zh_TW]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,征服家,檔案管理程式,文字換行,換行,底線,顯示,檔案大小,位元組,字型,顏色 +Keywords[zu]=konqueror,imenenja yamafayela,ukugoqwa kwamafayela, ukugoqwa,dwebela,veza,usayizi ama-byte osayizi wefayela,uhlobo lwamagama, umbala,umbala diff --git a/kcontrol/konq/filebehavior.desktop b/kcontrol/konq/filebehavior.desktop new file mode 100644 index 000000000..c57b70a1a --- /dev/null +++ b/kcontrol/konq/filebehavior.desktop @@ -0,0 +1,225 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/filemanager/index.html +Icon=kfm +Exec=kcmshell filebehavior + + +X-KDE-Library=konq +X-KDE-FactoryName=behavior +X-KDE-ParentApp=kcontrol + +Name=Behavior +Name[af]=Gedrag +Name[ar]=السلوك +Name[az]=Davranış +Name[be]=Паводзіны +Name[bg]=Поведение +Name[bn]=আচরণ +Name[br]=Emzalc'h +Name[bs]=Ponašanje +Name[ca]=Comportament +Name[cs]=Chování +Name[csb]=Zachòwanié +Name[cy]=Ymddygiad +Name[da]=Opførsel +Name[de]=Verhalten +Name[el]=Συμπεριφορά +Name[en_GB]=Behaviour +Name[eo]=Konduto +Name[es]=Comportamiento +Name[et]=Käitumine +Name[eu]=Portaera +Name[fa]=رفتار +Name[fi]=Käyttäytyminen +Name[fr]=Comportement +Name[fy]=Gedrach +Name[ga]=Oibriú +Name[gl]=Comportamento +Name[he]=פעולה +Name[hi]=बर्ताव +Name[hr]=Ponašanje +Name[hu]=Működés +Name[is]=Hegðun +Name[it]=Comportamento +Name[ja]=挙動 +Name[ka]=ქცევა +Name[kk]=Қасиеттері +Name[km]=ឥរិយាបថ +Name[ko]=행동 +Name[lo]=ພຶດຕິກຳຂອງຫນ້າຕ່າງ +Name[lt]=Elgsena +Name[lv]=Izturēšanās +Name[mk]=Однесување +Name[mn]=Байдал +Name[ms]=Peri laku +Name[mt]=Imġieba +Name[nb]=Oppførsel +Name[nds]=Bedregen +Name[ne]=व्यवहार +Name[nl]=Gedrag +Name[nn]=Åtferd +Name[nso]=Maitshwaro +Name[pa]=ਵਿਹਾਰ +Name[pl]=Zachowanie +Name[pt]=Comportamento +Name[pt_BR]=Comportamento +Name[ro]=Comportament +Name[ru]=Поведение +Name[rw]=Imyitwarire +Name[se]=Láhtten +Name[sk]=Správanie +Name[sl]=Obnašanje +Name[sr]=Понашање +Name[sr@Latn]=Ponašanje +Name[ss]=Kutiphatsa +Name[sv]=Uppträdande +Name[ta]= நடத்தை +Name[te]=ప్రవర్తన +Name[tg]=Рафтор +Name[th]=พฤติกรรม +Name[tr]=Davranış +Name[tt]=Eşlise eş +Name[uk]=Поведінка +Name[uz]=Xususiyatlar +Name[uz@cyrillic]=Хусусиятлар +Name[ven]=Maitele +Name[vi]=Cách hoạt động +Name[wa]=Dujhance +Name[xh]=Ukuziphatha +Name[zh_CN]=行为 +Name[zh_TW]=行為 +Name[zu]=Ukuziphatha + +Comment=You can configure how Konqueror behaves as a file manager here +Comment[af]=Jy kan konfigureer hoe Konqueror gedrag as 'n lêer bestuurder hier +Comment[ar]=يمكنك هنا إعداد سلوك Konqueror كمسيير للملفات +Comment[az]=Konqueror-un fayl idarəçisi olaraq nəcə davranacağını buradan quraşdırın +Comment[be]=Тут вы можаце змяніць паводзіны Konqueror для кіравання файламі +Comment[bg]=Настройване поведението на файловия браузър +Comment[bn]=ফাইল ম্যানেজার হিসাবে কনকরার-এর আচরণ কেমন হবে তা এখানে কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ penaos Konqueror en em zalc'h evel ur merour restroù +Comment[bs]=Ovdje možete podesiti kako se Konqueror ponaša kao upravitelj datotekama +Comment[ca]=Aquí podeu configurar com es comportarà el Konqueror com a gestor de fitxers +Comment[cs]=Zde je možné nastavit správce chování Konqueroru jako správce souborů +Comment[csb]=Kònfigùracëjô zachòwaniô Konquerora jakno menadżera lopków +Comment[cy]=Ffurfweddu ymddygiad Konqueror fel rheolydd ffeiliau +Comment[da]=Her kan du indstille hvordan Konqueror opfører sig som filhåndtering +Comment[de]=Hier können Sie das Verhalten von Konqueror als Dateimanager festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε το πως θα συμπεριφέρεται το Konqueror ως διαχειριστής αρχείων +Comment[eo]=Ĉi tie vi povas agordi kiel konkeranto kondutas kiel dosieradministrilo +Comment[es]=Aquí puede configurar el comportamiento de Konqueror como gestor de archivos +Comment[et]=Konquerori failihalduri käitumise seadistamine +Comment[eu]=Hemen Konquerorren portaera konfigura dezakezu fitxategi kudeatzaile gisa ari denean +Comment[fa]=می‌توانید در اینجا، چگونگی رفتار Konqueror را به عنوان مدیر پرونده پیکربندی کنید +Comment[fi]=Tässä kohdassa voit määritellä Konquerorin tiedostonhallinnan asetuksia +Comment[fr]=Comportement de Konqueror en tant que gestionnaire de fichiers +Comment[fy]=Hjir kinne jo it gedrach fan Konqueror as triembehearder ynstelle. +Comment[gl]=Pode configurar aqui o modo en que se comportará Konqueror como xestor de ficheiros +Comment[he]=שינוי הדרך שבה Konqueror פועל בתור מנהל קבצים +Comment[hi]=आप कॉन्फ़िगर कर सकते हैं कि कॉन्करर यहाँ फ़ाइल प्रबंधक की तरह कैसे बर्ताव करे +Comment[hr]=Konfiguriranje načina na koji se Konqueror ponaša kao upravljač datoteka +Comment[hu]=Itt lehet beállítani a Konqueror fájlkezelő működési jellemzőit +Comment[is]=Hér getur þú stillt hvernig Konqueror hegðar sér sem skráastjóri +Comment[it]=Configura il comportamento di Konqueror come gestore dei file +Comment[ja]=Konqueror ファイルマネージャの挙動を設定 +Comment[ka]=Konqueror-ის, როგორც ფაილური მენეჯერის, ქცევის კონფიგურირება +Comment[kk]=Konqueror файл менеджер ретінде қолданғандағы қасиеттерін баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ របៀប​ដែល Konqueror ដើរតួ​ជា​កម្មវិធី​គ្រប់គ្រង​ឯកសារ +Comment[ko]=Konqueror의 파일 관리자로서의 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງ ຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite nustatyti, kaip elgiasi Konqueror-bylų tvarkyklė +Comment[lv]=Šeit jūs varat konfigurēt Iekarotāja izturēšanos failu pārlūkošanas laikā +Comment[mk]=Конфигурирајте го однесувањето на Konqueror како менаџер на датотеки +Comment[mn]=Энд та конкюрорын байдлыг файл удирдагчийн хувьд тогтоож +Comment[ms]=Anda boleh konfigur bagaimana Konqueror berkelakuan sebagai pengurus fail di sini +Comment[mt]=Hawn tista' tissettja l-imġieba ta' Konqueror bħala manager tal-fajls +Comment[nb]=Tilpass hvordan Konqueror opptrer som filbehandler +Comment[nds]=Hier kannst Du instellen, wodennig sik Konqueror as Dateipleger bedregen schall +Comment[ne]=तपाईँले यहाँ कन्क्वेररले फाइल प्रबन्धकलाई गर्ने व्यवहार कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=Hier kunt u het gedrag van Konqueror als bestandsbeheerder instellen. +Comment[nn]=Her kan du velja korleis filhandsamaren Konqueror skal oppføra seg +Comment[nso]=Oka beakanya ka fao Konqueror e phelago bjalo ka molaodi wa faele mo +Comment[pa]=ਤੁਸੀਂ ਇੱਥੇ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕੋਨਕਿਉਰਰ ਇੱਕ ਫਾਇਲ ਮੈਨੇਜਰ ਦੇ ਰੂਪ ਵਿੱਚ ਕਿਵੇਂ ਵਿਵਹਾਰ ਦੇਵੇਗਾ। +Comment[pl]=Konfiguracja zachowania Konquerora jako menedżera plików +Comment[pt]=O utilizador pode configurar aqui como é que o Konqueror se comporta como um gestor de ficheiros +Comment[pt_BR]=Você pode configurar como o Konqueror se comporta como gerenciador de arquivos aqui +Comment[ro]=Configurează comportamentul Konqueror ca manager de fișiere +Comment[ru]=Настройка поведения Konqueror как менеджера файлов +Comment[rw]=Ushobora kugena ukuntu Konqueror yitwara nka mugengadosiye hano +Comment[se]=Dás heivehat mo Konqueror fiilagieđahallin galgá láhttet +Comment[sk]=Nastavenie Konquerora ako správcu súborov +Comment[sl]=Nastavitve obnašanja Konquerorja kot upravitelja datotek +Comment[sr]=Овде можете подесити како ће се Konqueror као менаџер фајлова понашати +Comment[sr@Latn]=Ovde možete podesiti kako će se Konqueror kao menadžer fajlova ponašati +Comment[sv]=Anpassa hur Konqueror beter sig som filhanterare +Comment[ta]=கான்கொரர் கோப்பு மேலாளராக எப்படி இயங்குகிறது என்பதை இங்கே வடிவமைக்க முடியும். +Comment[tg]=Шумо метавонед рафтори Konqueror-ро ба унвони мудири файл дар инҷо таъин кунед. +Comment[th]=คุณสามารถปรับแต่งพฤติกรรมของคอนเควอร์เรอร์ในการเป็นเครื่องมือจัดการแฟ้มได้ที่นี่ +Comment[tr]=Konqueror'un dosya yöneticisi olarak nasıl davranacağını buradan yapılandırabilirsiniz +Comment[tt]=Birem idäräçe bularaq eşläwçe Konqueror'nıñ çağılışın caylaw +Comment[uk]=Тут можна налаштувати поведінку Konqueror, як менеджера сеансу +Comment[uz]=Konqueror fayl boshqaruvchisi sifatida xususiyatini moslash +Comment[uz@cyrillic]=Konqueror файл бошқарувчиси сифатида хусусиятини мослаш +Comment[ven]=Ni nga dzudzanya uri Konqueror inga tshilisa hani sa mulanguli wa faela hafhano +Comment[vi]=Bạn có thể cấu hình cách Konqueror hoạt động như một trình quản lý tập tin ở đây +Comment[wa]=Chal vos ploz apontyî li dujhance di Konqueror cwand i fwait l' manaedjeu di fitchîs +Comment[xh]=Ungaqwalasela ukuziphatha kwe Konqueror njengomphathi wefayile apha +Comment[zh_CN]=在这里配置 Konqueror 的文件管理器行为 +Comment[zh_TW]=您可以在這裡設定 Konqueror 做為檔案管理程式的行為 +Comment[zu]=Ungahlanganisela ukuthi i-Konqueror iziphathe kanjani njengemenenja yamafayela lapha +Keywords=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation +Keywords[ar]=konqueror,مسيير الملفات,kfm,التلميحات و النصائح,تلميحات الملف,نافذة منعزلة,spawn windows,السلوك,أمحي,إستعمال الذاكرة,عنوان المورد النظامي للمنزل,عمليات الشبكة,حوار التقدم,سلة المهملات,محو,تأكيد +Keywords[be]=Кіраўнік файлаў,Парады,Падказкі,Падказкі файлаў,Асобнае акно,Паводзіны,Выкарыстанне памяці,Хатняя тэчка,Сеткавыя аперацыя,Прагэрс,Выкананне,Сметніца,Выдаленне,Выдаліць,Пацверджанне,konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation +Keywords[bg]=работен, плот, поведение, място, браузър, прозорец,konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can, +Keywords[bs]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,savjeti,odvojen prozor,otvaraj prozore,ponašanje,zauzeće memorije,mrežne operacije,traka napretka,kućni URL,početni URL,smeće,brisanje,potvrda,potvrdi +Keywords[ca]=konqueror,gestor de fitxers,kfm,consells,consells del fitxer,finestra separada,expandir finestres,comportament,us de la memòria, URL d'inici,operacions de xarxa,diàleg de progrés,paperera,esborra,confirmacio +Keywords[cs]=konqueror,správce souborů,kfm,tipy,oddělené okno,chování,využití paměti,domvské URL,síťové operace,průběh,koš,potvrzení +Keywords[csb]=konqueror,menedżer lopków,kfm,podpòwiescë,apartné òkno,nowé òkna,zachòwanié,brëkòwanié pamiãcë,domôcy URl,kòsz,lëstëw pòkrokù,remanié,pòcwierdzenia,cécowé dzéjania +Keywords[da]=konqueror,filhåndtering,kfm,tip,filtip,separat vindue,flere vinduer,opførsel,hukommelsesforbrug,Hjemme-URL,netværksoperationer, fremgangsdialog,affald,slet bekræftelse +Keywords[de]=Konqueror,Dateimanager,kfm,Tipps,Fenster,Verhalten,Persönlicher Ordner,Speicherverwendung,URL,Adressen,Netzwerkoperationen,Fortschrittsanzeige,Mülleimer,Papierkorb,Löschen,Bestätigung +Keywords[el]=konqueror,διαχειριστής αρχείων,kfm,συμβουλές,συμβουλές αρχείων,ξεχωριστό παράθυρο,δημιουργία παραθύρων,συμπεριφορά,συμπεριφορά,χρήση μνήμης,Αρχική URL,λειτουργίες δικτύου,παράθυρο διαλόγου προόδου,κάδος απορριμμάτων,διαγραφή,επιβεβαίωση +Keywords[en_GB]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialogue,wastebin,delete,confirmation +Keywords[eo]=konkeranto,dosieradministrilo,kfm,konsiloj,dosierokonsiloj,aparta fenestro,lanĉitaj fenestroj,konduto,uzata memoro,hejma URLo, retagoj,progresdialogo,rubujo,forigi,konfirmi +Keywords[es]=konqueror,gestor de archivos,kfm,sugerencias,ventana separada, extender ventanas,comportamiento,uso de memoria, URL de inicio,operaciones de red, diálogo de progreso,papelera,borrar,confirmación +Keywords[et]=konqueror,failihaldur,kfm,vihjed,failide vihjed,eraldi aken,käitumine,mälukasutus,kodukataloog,võrguoperatsioonid,võrgutoimingud,edenemisdialoog,prügikast,kustutamine +Keywords[eu]=konqueror,fitxategi kudeatzailea,kfm,iradokizunak,fitxategi iradokizunak, aparteko leihoa,leihoak hedatu,portaera,memoriaren erabilera,Hasierako URLa,ezabatu, berrespena +Keywords[fa]=konqueror، مدیر پرونده، kfm، نکات، نکات پرونده، پنجرۀ مجزا، پنجره‌های تکثیرشده، رفتار، رفتار، کاربرد حافظه، نشانی وب آغازه، عملیات شبکه، محاورۀ پیشرفت، زباله‌دان، حذف، تأیید +Keywords[fi]=konqueror,tiedostonhallinta,kfm,vinkit,tiedostovinkit,erillinen ikkuna,erityisikkuna,käytös,muistinkäyttö,Koti-URL,kotiosoite,verkkotoiminnot,edistymisdialogi,roskakori,poisto,vahvistus +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,kfm,astuces,fenêtre séparée,rafraîchissement des fenêtres,comportement,utilisation de la mémoire,Home URL,URL de démarrage,opérations réseau,fenêtre de progression,corbeille,poubelle,effacer,détruire,suppression,confirmation +Keywords[fy]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,ûnthâld gebrûk, ynternetadres, fuortgong, netwurk hanelingen, finsters fergrutsje, triembehearder, finsterbehearder +Keywords[gl]=konqueror,xestor de ficheiros,kfm,información de ficheiro,fiestra separada,fiestras emerxentes,comportamento,uso da memória,URL de início,operacións en rede,diálogo de progreso,lixo +Keywords[he]=konqueror,מנהל קבצים,kfm,עצות,פירוט לקבצים,חלון נפרד,שימוש בזיכרון,פעולה,כתובת בית, פח זבל, אשפה, סל מחזור, סל מחזור, filemanager,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation +Keywords[hr]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,upravljač datoteka,poseban prozor,ponašanje,upotreba memorije,URL početne stranice,mrežni postupci,dijalog napredovanja,otpad,brisanje,potvrđivanje +Keywords[hu]=konqueror,fájlkezelő,kfm,tippek,fájltippek,külön ablak,ablakmegnyitás,viselkedés,memóriahasználat,saját URL,hálózati műveletek,állapotjelző ablak,szemétkosár,törlés,megerősítés +Keywords[is]=konqueror,skráastjóri,kfm,ráð,skráarráð,aðskilin gluggi,margfaldast, gluggar,hegðun,minnisnotkun,heimaslóð, netaðgerðir, framvindugluggi, ruslafata,eyða, staðfesta +Keywords[it]=konqueror,filemanager,kfm,trucchi,file,separa finestre,comportamento,memoria utilizzata,home,operazioni di rete,avanzamento,finestra avanzamento,cestino,elimina,cancella,conferme +Keywords[ja]=konqueror,ファイルマネージャ,kfm,ツールチップ,個別ウィンドウ, ポップウィンドウ,挙動,メモリ使用量,ホームURL,ネットワーク操作,進捗ダイアログ,ごみ箱,削除,確認 +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,kfm,ព័ត៌មាន​ជំនួយ,ព័ត៌មាន,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation +Keywords[lt]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,bylų tvarkyklė,patarimai,bylų patarimai,langai,atskiri langai, elgesys, elgsena, atminties naudojimas, namų adresas,tinklo operacijos,progreso dialogas,šiukšliadėžė,trinti,patvirtinimas +Keywords[mk]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,менаџер на датотеки,совети,совети за датотеки,подели го прозорецот,однесување,користење на меморија,Домашно URL,мрежни операции,дијалог за прогрес,корпа за отпадоци,избриши,потврда +Keywords[nb]=konqueror,filbehandler,kfm,tips,tips om filer,eget vindu,åpne vinduer,oppførsel,minnebruk,hjemmeside på nettet,nettverksoperasjoner,framdriftsviser,papirkurv +Keywords[nds]=Konqueror,Dateipleger,kfm,Tipps,Dateitipps,egen Finster,Finster maken,Bedregen,behaviour,memory,Spiekerverbruuk,Home,Startsiet,Startadress,Nettwark-Akschonen,Vörankamendialoog,Affalltünn,Affall,löschen,Nafraag,nafragen,wegdoon +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, kfm, टिपहरू, फाइल टिप, फरक सञ्झ्याल, स्पवन सञ्झ्यालहरू, व्यवहार,व्यवहार,स्मृति प्रयोग, गृह URL,सञ्जाल सञ्चालन, प्रगति संवाद, रद्दीटोकरी क्यान, मेट्नुहोस्, यकीन +Keywords[nl]=konqueror,filemanager,bestandsbeheerder,kfm,tips,file tips,bestandstips,apart venster,gedrag,geheugengebruik,persoonlijke map,netwerkoperaties,voortgangsdialoog,prullenbak,verwijderen,bevestiging,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation +Keywords[nn]=konqueror,filhandterar,kfm,tips,filtips,eige vindauge,nye vindauge,åtferd,minnebruk,heime-URL,nettverksopersjonar,framdriftsindikator,papirkorg,slett,stadfesting +Keywords[pa]=kfm,ਕੋਨਕਿਉਰਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਸੰਕੇਤ,ਵੱਖਰਾ ਝਰੋਖਾ,ਵਿਹਾਰ,ਮੈਮੋਰੀ ਵਰਤੋਂ, ਨੈੱਟਵਰਕ ਕਾਰਵਾਈ,ਤਰੱਕੀ ਵਾਰਤਾਲਾਪ,ਰੱਦੀ,ਹਟਾਓ,ਪੁਸ਼ਟੀ,ਘਰ URL,ਸੰਕੇਤ +Keywords[pl]=konqueror,menedżer plików,kfm,podpowiedzi,osobne okno,nowe okna,zachowanie,zużycie pamięci,katalog domowy,kosz,pasek postępu,usuwanie,potwierdzenia,operacje sieciowe +Keywords[pt]=konqueror,gestor de ficheiros,kfm,dicas,dicas de ficheiros,janela separada,comportamento,utilização de memória,URL de base,operações de rede,janela de evolução,caixote do lixo,apagar,confirmação +Keywords[pt_BR]=konqueror,gerenciador de arquivos,kfm,dicas,arquivos de dicas,janelas separadas,janelas unidas,comportamento,uso de memória,pasta do usuário, operações de rede, diálogo de progresso, lata de lixo, remoção, confirmação +Keywords[ro]=konqueror,manager de fișiere,kfm,sfaturi,ferestre separate,comportament,utilizare memorie,URL personal,operații de rețea,dialog de progres,gunoi,ștergere,confirmare +Keywords[rw]=Konqueror,mugengadosiye,kfm,inyobora,inyobora z'idosiye, gutandukanya idirishya,kurema amadirishya,imyitwarire,imyitwarire,ikoresha ry'ububiko,URL y'ipaji ibanza, ibikorwa by'urusobemiyoboro,ikiganiro aho bigeze,agatebo njyamwanda,gusiba,iyemeza +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,kfm,namig,namigi datotek,ločeno okno,ustvari okna,obnašanje,poraba pomnilnika,domači URL, omrežne operacije,okno napredka,smeti,brisanje,potrditev +Keywords[sr]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,форе,форе за фајлове,одвојени прозор,spawn прозори,понашање,искоришћеност меморије,Home URL,савети,смеће,мрежне операције +Keywords[sr@Latn]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,fore,fore za fajlove,odvojeni prozor,spawn prozori,ponašanje,iskorišćenost memorije,Home URL,saveti,smeće,mrežne operacije +Keywords[sv]=konqueror,filhanterare,kfm,tips,filtips,särskilt fönster,visa fönster,beteende,minnesanvändning,hemadress,nätverksåtgärder,förloppsdialogruta,papperskorg,ta bort,bekräftelse +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,kfm,குறிப்புகள்,கோப்பு குறிப்புகள்,தனி சாளரம்,நீள்வட்ட சாளரம்,நடத்தை,நினைவு பயன்பாடு,வீட்டு வலைப்பின்னல்,வலைப்பின்னல் செயல்பாடுகள், வழிமுறை உரையாடல்,குப்பைத்தொட்டி, நீக்கு,உறுதிப்படுத்தல் +Keywords[th]=คอนเควอร์เรอร์,ตัวจัดการแฟ้ม,kfm,เคล็ดลับ,เคล็ดลับแฟ้ม,หน้าต่างแยกต่างหาก,สร้างหน้าต่างใหม่,พฤติิกรรม,การใช้หน่วยความจำ,ตำแหน่งหลักการทำงานทางเครือข่าย,กล่องแสดงความก้าวหน้า,ถังขยะ,ลบทิ้ง,การยืนยัน, +Keywords[tr]=konqueror,dosya yöneticisi,kfm,ipuçları,dosya ipuçları,pencere,davranış,bellek kullanımı,başlangıç,bellek kullanımı,başlangıç adresi,ağ işlemleri,ilerleme penceresi,çöp kutusu +Keywords[uk]=konqueror,менеджер файлів,kfm,підказки,підказки по файлах,окремі вікна,створення вікон,поведінка,використання пам'яті,домашній URL,робота з мережею,вікно поступу,смітник, +Keywords[uz]=konqueror,fayl boshqaruvchisi,kfm,eslatmalar,fayl eslatmalari,alohida oyna,spawn windows,xususiyatlar,xotiradan foydalanish,Uy URL,tarmoq amallari,chiqindilar qutisi,oʻchirish,tasdiqlash +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,kfm,эслатмалар,файл эслатмалари,алоҳида ойна,spawn windows,хусусиятлар,хотирадан фойдаланиш,Уй URL,тармоқ амаллари,чиқиндилар қутиси,ўчириш,тасдиқлаш +Keywords[vi]=konqueror,trình quản lý tập tin,kfm,gợi ý,tập tin tips,phân cách cửa sổ,cửa sổ nhỏ,cách hoạt động,cách hoạt động,sử dụng bộ nhớ,URL Nhà,hoạt động mạng,hộp thoại tiến trình,thùng rác,xoá,xác nhận +Keywords[wa]=konqueror,manaedjeu d' fitchî,kfm,bon a savu,bon a saveur,purneas metous a pårt,dispårtis purneas,dujhance,elpoyaedje del memwere,URL Måjhob,operåcions rantoele,divize di progrès,batch,disfacer,acertiner +Keywords[zh_CN]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,文件管理器,提示,文件提示,拆分窗口,新开窗口,行为,内存使用,主 URL,网络操作,进度对话框,回收站,删除,确认 +Keywords[zh_TW]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,network operations,progress dialog,trash can,delete,confirmation,征服家,檔案管理程式,密訣,檔案密訣,分離視窗,產生視窗,行為,記憶體使用量,家 URL,網路操作,進度對話盒,資源回收桶,刪除,確認 diff --git a/kcontrol/konq/filebrowser.desktop b/kcontrol/konq/filebrowser.desktop new file mode 100644 index 000000000..74cc32ade --- /dev/null +++ b/kcontrol/konq/filebrowser.desktop @@ -0,0 +1,239 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/filemanager/index.html +Icon=kfm +Exec=kcmshell filebrowser + + +X-KDE-Library=konq +X-KDE-FactoryName=browser +X-KDE-ParentApp=kcontrol + +Name=File Manager +Name[af]=Lêer Bestuurder +Name[ar]=مدبّر الملفات +Name[az]=Fayl İdarəcisi +Name[be]=Кіраўнік файлаў +Name[bg]=Файлов браузър +Name[bn]=ফাইল ম্যানেজার +Name[br]=Merour restroù +Name[bs]=Upravitelj datotekama +Name[ca]=Gestor de fitxers +Name[cs]=Správce souborů +Name[csb]=Menedżer lopków +Name[cy]=Rheolydd Ffeiliau +Name[da]=Filhåndtering +Name[de]=Dateimanager +Name[el]=Διαχειριστής αρχείων +Name[eo]=Dosieradministrilo +Name[es]=Gestor de archivos +Name[et]=Failihaldur +Name[eu]=Fitxategi kudeatzailea +Name[fa]=مدیر پرونده +Name[fi]=Tiedostonhallinta +Name[fo]=Fíluhandfarari +Name[fr]=Gestionnaire de fichiers +Name[fy]=Triembehearder +Name[ga]=Bainisteoir Comhad +Name[gl]=Xestor de Ficheiros +Name[he]=מנהל הקבצים +Name[hi]=फ़ाइल प्रबंधक +Name[hr]=Upravitelj datotekama +Name[hsb]=Datajowy manager +Name[hu]=Fájlkezelő +Name[id]=Manajer File +Name[is]=Skráastjóri +Name[it]=File manager +Name[ja]=ファイルマネージャ +Name[ka]=ფაილთა მენჯერი +Name[kk]=Файл менеджері +Name[km]=កម្មវិធី​គ្រប់គ្រង​ឯកសារ +Name[ko]=파일 관리자 +Name[lo]=ເຄື່ອງມືການຈັດການແຟ້ມ +Name[lt]=Bylų tvarkyklė +Name[lv]=Failu Menedžeris +Name[mk]=Менаџер на датотеки +Name[mn]=Файл удирдагч +Name[ms]=Pengurus Fail +Name[mt]=Manager tal-Fajls +Name[nb]=Filbehandler +Name[nds]=Dateipleger +Name[ne]=फाइल प्रबन्धक +Name[nl]=Bestandsbeheerder +Name[nn]=Filhandsamar +Name[nso]=Molaodi wa Faele +Name[oc]=Gestionari de fiquièrs +Name[pa]=ਫਾਇਲ ਮੈਨੇਜਰ +Name[pl]=Menedżer plików +Name[pt]=Gestor de Ficheiros +Name[pt_BR]=Gerenciador de Arquivos +Name[ro]=Manager de fișiere +Name[ru]=Файловый менеджер +Name[rw]= Mucungamadosiye +Name[se]=Fiilagieđahalli +Name[sk]=Správca súborov +Name[sl]=Upravitelj datotek +Name[sr]=Менаџер фајлова +Name[sr@Latn]=Menadžer fajlova +Name[ss]=Siphatsi selifayela +Name[sv]=Filhanterare +Name[ta]=கோப்பு மேலாளர் +Name[te]=దస్త్రాల అభికర్త +Name[tg]=Мудири файл +Name[th]=เครื่องมือจัดการแฟ้ม +Name[tr]=Dosya Yöneticisi +Name[tt]=Birem İdäräçe +Name[uk]=Менеджер файлів +Name[uz]=Fayl boshqaruvchisi +Name[uz@cyrillic]=Файл бошқарувчиси +Name[ven]=Mulanguli wa faela +Name[vi]=Trình quản lí tập tin +Name[wa]=Manaedjeu di fitchîs +Name[xh]=Umphathi Wefayile +Name[zh_CN]=文件管理器 +Name[zh_TW]=檔案管理程式 +Name[zu]=imenenja yamafayela + +Comment=You can configure Konqueror's file manager mode here +Comment[af]=Jy kan Konqueror se lêer bestuurder gedrag hier opstel +Comment[ar]=يمكنك هنا إعداد نمط مسيير الملفات Konqueror +Comment[az]=Konqueror-un fayl idarəçisi modunu buradan quraşdırın +Comment[be]=Тут вы можаце змяніць рэжым кіравання файламі Konqueror +Comment[bg]=Настройване на файловия браузър +Comment[bn]=এখানে কনকরার-এর ফাইল ম্যানেজার মোড কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ mod merour restroù Konqueror +Comment[bs]=Ovdje možete podesiti kako izgleda Konqueror kao menadžer datoteka +Comment[ca]=Aquí podeu configurar el mode del gestor de fitxers Konqueror +Comment[cs]=Zde je možné nastavit režim správce souborů Konqueror +Comment[csb]=Kònfigùracëjô Konquerora w tribie menadżera lopków +Comment[cy]=Ffurfweddu modd rheolydd ffeiliau Konqueror +Comment[da]=Her kan du indstille hvordan Konqueror ser ud som filhåndtering +Comment[de]=Hier können Sie das Erscheinungsbild von Konqueror als Dateimanager festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε τη λειτουργία του Konqueror ως διαχειριστή αρχείων +Comment[eo]=Ĉi tie vi povas agordi Konkeranton kiel dosieradministrilo. +Comment[es]=Aquí puede configurar el modo de gestor de archivos de Konqueror +Comment[et]=Siin saad seadistada Konquerori failihalduri režiimi +Comment[eu]=Konquerorren fitxategi kudeaketa era konfigura dezakezu hemen +Comment[fa]=می‌توانید حالت مدیر پرونده Konqueror را در اینجا پیکربندی کنید +Comment[fi]=Tässä kohdassa voit määritellä Konquerorin tiedostonhallinnan tilan asetuksia +Comment[fr]=Configuration du mode gestionnaire de fichiers de Konqueror +Comment[fy]=Hjir kinne jo it uterlik fan Konqueror as triembehearder ynstelle +Comment[gl]=Pode configurar aqui o modo de xestión de ficheiros de Konqueror +Comment[he]=שינוי הגדרות מצב מנהל הקבצים של Konqueror +Comment[hi]=आप यहाँ कॉन्करर के फ़ाइल प्रबंधक मोड को कॉन्फ़िगर कर सकते हैं +Comment[hr]=Konfiguriranje načina Konqueror upravljača datotekama +Comment[hu]=A Konqueror fájlkezelő részének működési jellemzői +Comment[is]=Hér getur þú stillt Konqueror skráarstjórahaminn +Comment[it]=Configura la modalità "gestione file" di Konqueror +Comment[ja]=Konqueror のファイルマネージャモードを設定 +Comment[ka]=აქ შეგიძლიათ დააკონფიგურიროთ Konqueror ფაილური მენეჯერის რეჟიმი +Comment[kk]=Konqueror файл менеджер ретінде қолданғанды баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ​របៀប​កម្មវិធី​គ្រប់គ្រង​ឯកសារ​របស់ Konqueror +Comment[ko]=Konqueror의 파일 관리자 모드 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງ ຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti Konqueror bylų tvarkyklės veikseną +Comment[lv]=Šeit Jūs varat konfigurēt Iekarotāja failu menedžera režīmu +Comment[mk]=Тука може да го конфигурирате режимот на Konqueror за менаџирање на датотеки +Comment[mn]=Энд та конкюрорын харагдалтыг файл удирдагчийн хувьд тогтооно +Comment[ms]=Anda boleh konfigur mod pengurus fail Konqueror di sini +Comment[mt]=Ikkonfigura kif jidher Konqueror bħala manager tal-fajls +Comment[nb]=Tilpass hvordan Konqueror ser ut som filbehandler +Comment[nds]=Hier kannst Du Konqueror sien Bedriefoort instellen +Comment[ne]=तपाईँले यहाँ कन्क्वेरर फाइल प्रबन्धक मोड कन्फिगर गर्नु सक्नुहुन्छ +Comment[nl]=Hier kunt u het uiterlijk van Konqueror als bestandsbeheerder instellen +Comment[nn]=Her kan du setja opp filhandsamaren Konqueror +Comment[nso]=Oka beakanya mokgwa wa molaodi wa faele ya Konqueror mo +Comment[pa]=ਤੁਸੀਂ ਇੱਥੇ ਕੋਨਕਿਉਰੋਰ ਦੇ ਫਾਇਲ ਮੈਨੇਜਰ ਰੂਪ ਨੂੰ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ +Comment[pl]=Konfiguracja Konquerora w trybie menedżera plików +Comment[pt]=O utilizador pode configurar aqui o modo de gestão de ficheiros do Konqueror +Comment[pt_BR]=Você pode configurar o modo de gerenciamento de arquivos do Konqueror aqui +Comment[ro]=Aici configurați modul de manager de fișiere al Konqueror +Comment[ru]=Настройка режима менеджера файлов +Comment[rw]=Ushobora kugena uburyo bwa mugengadosiye ya Konqueror hano +Comment[se]=Dás heivehat Konquerora fiilagieđahallin +Comment[sk]=Nastavenie Konquerora ako správcu súborov +Comment[sl]=Nastavitve načina Konquerorja kot upravitelja datotek +Comment[sr]=Овде можете подесити Konqueror-ов режим управљања фајловима +Comment[sr@Latn]=Ovde možete podesiti Konqueror-ov režim upravljanja fajlovima +Comment[sv]=Anpassa Konquerors filhanteringsläge +Comment[ta]=இங்கே கான்கொரர் கோப்பு மேலாளர் வகையை வடிவமைக்கலாம். +Comment[tg]=Шумо метавонед ҳолати мудири файли Konqueror-ро танзим кунед +Comment[th]=คุณสามารถปรับแต่งโหมดของคอนเควอร์เรอร์ในการเป็นเครื่องมือจัดการแฟ้มได้ที่นี่ +Comment[tr]=Konqueror'un dosya yöneticisi kipini buradan ayarlayabilirsiniz +Comment[tt]=Konqueror'nıñ birem idäräçe bularaq eşläw ısulın caylaw +Comment[uk]=Налаштування режиму менеджера файлів Konqueror +Comment[ven]=Ni nga dzudzanya moudu wa mulanguli wa faela Konqueror hafhano +Comment[vi]=Bạn có thể cấu hình các chế độ hoạt động của trình quản lý tập tin Konqueror ở đây +Comment[wa]=Chal vos ploz apontyî li mode do manaedjeu di fitchîs d' Konqueror +Comment[xh]=Uyakwazi ukuqwalasela apha indlela yomphathi wefayile we Konqueror +Comment[zh_CN]=在这里配置 Konqueror 的文件管理器模式 +Comment[zh_TW]=您可以在這裡設定 Konqueror 的檔案管理模式 +Comment[zu]=Ungahlanganisela indlela yemenenja yamafayela ye-konqueror lapha +Keywords=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour +Keywords[ar]=konqueror,مسيير الملفات,word wrap,wrap,تسطير الأحرف,الشاشة,حجم الملف,البايتات,المحرف,اللون,العرض +Keywords[az]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,fayl,fayl idarəçisi,rəng,yazı növü,altı cızıqlı +Keywords[be]=Кіраўнік файлаў,Перанос словаў,Перанос,Падкрэсліванне,Падкрэслены,Паказваць,Памер,Байты,Шрыфт,Колер,konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour +Keywords[bg]=файлове, файл, управление, браузър, мениджър, konqueror, filemanager,word wrap, wrap, underline, display, filesize, bytes, font, color, colour +Keywords[ca]=konqueror,gestor de fitxers, ajust de línia,subratllar,mostrar,mida del fitxer,octets,lletra,color,colorit +Keywords[cs]=Konqueror,Správce souborů,Zalamování,Podtrhávání,Zobrazení,Velikost souboru,Bajty,Písmo,Barva +Keywords[csb]=konqueror,menedżer lopków,zawijanié wierztów,zawijanié,podsztëchiwanié,wëzdrzatk, miara lopkù,bajtë,fòntë,farwa +Keywords[cy]=konqueror,rheolydd ffeiliau,lapio geiriau,lapio,tanlinellu,dangos,maint ffeil,beitiau,ffont,lliw +Keywords[da]=konqueror,filhåndtering,ordombrydning,ombrydning,understreg,vis,filstørrelse,byte,skrifttype,farve +Keywords[de]=Konqueror,Dateimanager,Zeilenfall,Textumbruch,Unterstreichen,Darstellung,Dateigröße,Schrift,Farbe,Byte +Keywords[el]=konqueror,διαχειριστής αρχείων,αναδίπλωση λέξεων,αναδίπλωση,υπογράμμιση,προβολή,μέγεθος αρχείου,bytes,γραμματοσειρά,χρώμα,χρώμα +Keywords[eo]=konkeranto,dosieradministrilo,vidigi,vidigo,dosiera grandeco,bajto,bitoko,okbitaro,tiparo,koloro +Keywords[es]=konqueror,gestor de archivos, ajuste de línea,subrayar,mostrar,tamaño de archivo,bytes,tipo de letra,color +Keywords[et]=konqueror,failihaldur,sõnade murdmine,murdmine,allajoonimine,ekraan,faili suurus,baidid,font,värv +Keywords[eu]=konqueror,fitxategi kudeatzailea,itzulbiratu, egokitu,azpimarratu,pantaila,fitxategi tamaina,byteak,letra-tipoa,kolorea +Keywords[fa]=konqueror، مدیر پرونده، سطربندی واژه، سطربندی، خط زیر، نمایش، اندازه پرونده، بایتها، قلم، رنگ، رنگ +Keywords[fi]=konqueror,tiedostonhallinta,sanankatkaisu,alleviivaus,tiedostokoko,tavuja, kirjasin,väri +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,retour à la ligne,soulignement,affichage,taille des fichiers,octets,police,couleur +Keywords[fy]=konqueror,filemanager,triembehear,word wrap,rigelôfbreking,ûnderstreakje,display,werjefte,filesize,triemgrutte,bytes,fonts,lettertypen,kleur,color +Keywords[ga]=konqueror,bainisteoir comhad,timfhilleadh focal,timfhilleadh,líne faoi,scáileán,méid comhaid,bearta,cló,clófhoireann,dath +Keywords[gl]=konqueror,xestor de ficheiros,axuste de palabras,axuste,subliñar,mostrar,tamaño de ficheiro,bites,fonte,cor +Keywords[he]=konqueror,מנהל קבצים,גלישת שורות,קו תחתון,תצוגה,גודל קובץ,בתים,גופן,צבע, konqueror,filemanager,word wrap, wrap,underline,display,filesize,bytes,font,color,colour +Keywords[hi]=कॉन्करर,फ़ाइलप्रबंधक,वर्ड रैप,रैप,रेखांकित,प्रकटन,फ़ाइलआकार,बाइट्स,फ़ॉन्ट,रंग +Keywords[hr]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,upravljač datoteka,omatanje riječi,omatanje,podvlačenje,prikaz,veličina datoteke,bajtovi,font,boja,boje +Keywords[hu]=konqueror,fájlkezelő,szótördelés,tördelés,aláhúzás,képernyő,fájlméret,bájt,betűtípus,szín,színek +Keywords[is]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour, litir,línuskipting,skjár,skjáborð,bæt,litur +Keywords[it]=konqueror,filemanager,a capo,sottolineatura,schermo,dimensione file,byte,caratteri,colori +Keywords[ja]=konqueror,ファイルマネージャ,ワードラップ,行の折り返し,下線,表示,ファイルサイズ, バイト,フォント,色,カラー +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,រុំ​ពាក្យ,រុំ,គូសបន្ទាត់​ក្រោម,បង្ហាញ,ទំហំ​ឯកសារ,បៃ,ពុម្ពអក្សរ,ពណ៌ +Keywords[lt]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,bylų tvarkyklė, žodžių perkėlimas, perkėlimas, pabraukimas, ekranas, bylos dydis, baitai, šriftas,spalva +Keywords[lv]=iekarotājs,failumenedžeris,vārdu apciršana,apciršana,pasvītrojums,ekrāns,failu izmērs,baiti,fonti,krāsas +Keywords[mk]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,менаџер на датотеки,прекршување на зборови,прекршување,подвлекување,екран,големина на датотека,бајти,фонт,боја +Keywords[mn]=Конкюрор,Файл удирдагч,Текст таслах,Доогуур зураас, Дүрслэл,Файлын хэмжээ,Бичиг,Өнгө,Байт +Keywords[mt]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,manager tal-fajls,daqs,kulur,kuluri +Keywords[nb]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,filbehandler,tekstbryting,understreket,skjerm,filstørrelse,byter,fonter,farger +Keywords[nds]=Konqueror,Dateipleger,word wrap,ümbreken,ünnerstreken,Dorstellen,Dateigrött,Bytes,Schriftoort, Klöör, Klören +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, शब्द बेर्नुहोस्, बेर्नुहोस्, कच, प्रदर्शन गर्नुहोस्, फाइल साइज, बाइट्स, फन्ट, रङ, रङ +Keywords[nl]=konqueror,filemanager,bestandsbeheer,word wrap,regelafbreking,onderstrepen,display,weergave,filesize,bestandsgrootte,bytes,fonts,lettertypen,kleur,color +Keywords[nn]=Konqueror,filhandsamar,tekstbryting,linjebryting,bryting,understrek,vis,filstorleik,byte,skrift,farge +Keywords[nso]=konqueror,molaodi wa faele,tatetso ya faele,tatetso ya mantsu,tatetso,thalelela,pontsho,bogolo bja faele,bytes,fonto,mmala,mmala +Keywords[pa]=ਕੋਨਕਿਉਰਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਸ਼ਬਦ ਸਮੇਟੋ,ਸਮੇਟੋ,ਹੇਠਾਂ ਰੇਖਾ,ਫਾਇਲ ਅਕਾਰ,ਬਾਈਟ,ਫੋਂਟ,ਰੰਗ ਝਲਕ +Keywords[pl]=konqueror,menedżer plików,zawijanie wierszy,zawijanie,podkreślenie,wygląd, rozmiar pliku,bajty,czcionki,kolor +Keywords[pt]=konqueror,gestor de ficheiros,mudança de linha,mudança,sublinhado,ecrã,tamanho do ficheiro,bytes,tipo de letra,cor +Keywords[pt_BR]=konqueror,gerenciador de arquivos,quebra de linha, sublinhado, display,tamanho de arquivo,bytes,fonte,cor,cor +Keywords[ro]=konqueror,manager de fișiere,limitare cuvînt,limitare,subliniere,afișare,mărime fișier,octeți,font,culoare +Keywords[rw]= Konqueror,mugengadosiye,ifunika ry'ijambo,gufunika,gucaho umurongo,Kugaragaza,inganoidosiye,bayite,imyandikire,ibara,ibara +Keywords[se]=Konqueror,fiilagieđahalli,linnjádoaddjin,doaddjin,vuolláisárgu,čájet,fiilasturrodat,stávvalat,fonta,ivdni +Keywords[sk]=konqueror,správa súborov,zalamovanie slov,podčiarknutie,zobrazenie,veľkosť súborov,bajty,písmo,farba +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,prelom vrstic,prelom,podčrta,prikaz,velikost datoteke,bajt,pisava,barva +Keywords[sr]=konqueror,filemanager,преламање текста,преламање,подвлачење,приказ,величина фајла,бајтови,фонт,боја +Keywords[sr@Latn]=konqueror,filemanager,prelamanje teksta,prelamanje,podvlačenje,prikaz,veličina fajla,bajtovi,font,boja +Keywords[sv]=konqueror,filhanterare,radbrytning,understreck,visa,filstorlek,byte,teckensnitt,färg +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,வார்த்தை மடக்கு, மடக்கு,அடிகோடிடு,காட்டு,கோப்பு அளவு,பைட்டுகள்,எழுத்துரு,வண்ணம்,வண்ணம் +Keywords[th]=คอนเควอร์เรอร์,จัดการแฟ้ม,ตัดคำ,ตัด,ขีดเส้นใต้,แสดงผล,ขนาดแฟ้ม,ไบต์,แบบอักษร,สี +Keywords[tr]=konqueror,dosya yöneticisi,görünüm,dosya boyu,bayt,yazıtipi,renk +Keywords[uk]=konqueror,менеджер файлів, переніс файлів,переніс,підкреслення,дисплей, розмір файлів,байти,шрифт,колір +Keywords[uz]=konqueror,fayl boshqaruvchisi,word wrap,wrap,tagini chizish,koʻrsatish,fayning hajmi,baytlar,shrift,rang +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,word wrap,wrap,тагини чизиш,кўрсатиш,файнинг ҳажми,байтлар,шрифт,ранг +Keywords[ven]=konqueror,mulanguli wa faela,putela ha fhungo,putela,talela,sumbedza,saizi ya faela, bytes,fontu,muvhala,muvhala +Keywords[vi]=konqueror,trình quản lý tập tin,bao quanh văn bản,bao quanh,gạch chân,màn hình,cỡ tập tin,số byte,phông chữ,mầu,mầu sắc +Keywords[wa]=konqueror,manaedjeu di fitchî,sorlignî,håyner,håynaedje,grandeu d' fitchî,bytes,bites,fonte,coleur +Keywords[xh]=konqueror,umphathi wefayile,songela amagama,songela, yenza umgca ezantsi,bonisa, ubngakanani befayile,bytes,umgca,umbala,umbala +Keywords[zh_CN]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,文件管理器,自动换行,下划线,显示,文件大小,字节,字体,颜色 +Keywords[zh_TW]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,征服家,檔案管理程式,文字換行,換行,底線,顯示,檔案大小,位元組,字型,顏色 +Keywords[zu]=konqueror,imenenja yamafayela,ukugoqwa kwamafayela, ukugoqwa,dwebela,veza,usayizi ama-byte osayizi wefayela,uhlobo lwamagama, umbala,umbala + +Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcontrol/konq/filepreviews.desktop b/kcontrol/konq/filepreviews.desktop new file mode 100644 index 000000000..60a78139c --- /dev/null +++ b/kcontrol/konq/filepreviews.desktop @@ -0,0 +1,220 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/filemanager/index.html +Icon=kfm +Exec=kcmshell filepreviews + + +X-KDE-Library=konq +X-KDE-FactoryName=previews +X-KDE-ParentApp=kcontrol + +Name=Previews & Meta-Data +Name[af]=Voorskoue & Meta-Data +Name[az]=Nümayişlər & Meta Mə'lumat +Name[be]=Перадпрагляд і метададзеныя +Name[bg]=Преглед и данни +Name[bn]=প্রাক্-দর্শন এবং মেটা-ডেটা +Name[bs]=Pregledi i meta-podaci +Name[ca]=Vistes prèvies i meta-dades +Name[cs]=Náhledy a metadata +Name[csb]=Pòzderczi ë pòdôwczi meta +Name[cy]=Rhagolygon & Meta-data +Name[da]=Forhåndsvisninger & Metadata +Name[de]=Vorschauen & Metadaten +Name[el]=Προεπισκοπήσεις & Μετα-δεδομένα +Name[eo]=Antaŭrigardoj kaj metadatumoj +Name[es]=Previsualizaciones & Meta-datos +Name[et]=Eelvaatlused ja metaandmed +Name[eu]=Aurrebistak eta metadatuak +Name[fa]=پیش‌نمایشها و فراداده +Name[fi]=Esikatselut ja metatiedot +Name[fr]=Aperçus & Méta-informations +Name[fy]=foarbylden en meta-data +Name[ga]=Réamhamhairc & Meiteashonraí +Name[gl]=Miniaturas e Meta Datos +Name[he]=תצוגות מקדימות ומידע־על +Name[hi]=पूर्वावलोकन एवं मेटा-डाटा +Name[hr]=Pregledi i meta podaci +Name[hu]=Gyorsnézetek +Name[is]=Forsýnir og metagögn +Name[it]=Anteprime e informazioni +Name[ja]=プレビュー & メタデータ +Name[ka]=წინასწარ ხედვა და მეტა მონაცემები +Name[kk]=Нобайлары мен мета-деректер +Name[km]=មើល​ជា​មុន & ទិន្នន័យ​មេតា +Name[ko]=미리 보기와 메타데이터 +Name[lt]=Peržiūros ir meta duomenys +Name[lv]=Priekšapskate un Meta dati +Name[mk]=Прегледи и метаподатоци +Name[mn]=Урьд харах & Мета-Өгөгдөл +Name[ms]=Prapapar & Data Meta +Name[mt]=Previżjonijiet u Meta-data +Name[nb]=Forhåndsvisning og metadata +Name[nds]=Vöransichten & Meta-Daten +Name[ne]=पूर्वावलोकन र मेटा-डेटा +Name[nl]=Voorbeelden en meta-data +Name[nn]=Førehandsvising og metadata +Name[pa]=ਝਲਕ ਅਤੇ ਮੈਟਾ-ਡਾਟਾ +Name[pl]=Podglądy i metadane +Name[pt]=Antevisões e Meta Dados +Name[pt_BR]=Pré-visualizações & Metadados +Name[ro]=Previzualizări și metainformații +Name[ru]=Миниатюры и мета-данные +Name[rw]=Amagaragazambere & Ibyatanzwe-Bidasanzwe +Name[se]=Ovdačájeheamit ja metadáhtat +Name[sk]=Náhľady a meta dáta +Name[sl]=Ogledi in metapodatki +Name[sr]=Прегледи и мета подаци +Name[sr@Latn]=Pregledi i meta podaci +Name[sv]=Förhandsgranskning och metadata +Name[ta]=முன்காட்சிகள் & மெடா-தகவல் +Name[te]=ముందు విక్షణాలు & మెటా-దత్తాంశాలు +Name[tg]=Пешнамоишҳо ва Meta-Data +Name[th]=แสดงตัวอย่าง & ข้อมูลเมตา +Name[tr]=Önizlemeler +Name[tt]=Kürep Alu & Meta-Eçtälek +Name[uk]=Перегляд та метадані +Name[uz]=Koʻrib chiqish\nva meta-maʼlumot +Name[uz@cyrillic]=Кўриб чиқиш\nва мета-маълумот +Name[vi]=Xem trước & Thông tin tập tin +Name[wa]=Prévey & Meta-dnêyes +Name[zh_CN]=预览和元数据 +Name[zh_TW]=預覽與中繼資料 + +Comment=You can configure how Konqueror Previews & Meta-data work here +Comment[af]=Jy kan hier opstel hoe Konqueror se Voorskoue & Meta-data werk +Comment[be]=Тут вы можаце змяніць працу перадагляду і метададзеных Konqueror +Comment[bg]=Настройване режима на преглед на файловия браузър +Comment[bn]=কনকরার-এ প্রাক্-দর্শন এবং মেটা-ডেটা কিভাবে কাজ করবে তা এখানে কনফিগার করতে পারেন +Comment[bs]=Ovdje možete podesiti kako rade Pregledi i meta-podaci u Konqueroru +Comment[ca]=Aquí podeu configurar com funcionaran les vistes prèvies i les meta-dades en el Konqueror +Comment[cs]=Zde je možné nastavit chování náhledů a metadat v Konqueroru +Comment[csb]=Kònfigùracëjô pòdzéraniô zamkłoscë lopków ë pòdôwków meta w Konquerorze +Comment[cy]=Gallwch ffurfweddu sut mae Rhagolygon & Meta-data Konqueror yn gweithio yma +Comment[da]=Her kan du indstille hvordan forhåndsvisninger & metadata fungerer i Konqueror +Comment[de]=Hier können Sie das Verhalten von Vorschauen und Metadaten in Konqueror festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε το πως θα δουλεύουν οι Προεπισκοπήσεις & Μετα-δεδομένα του Konqueror +Comment[eo]=Ĉi tie vi povas agordi kiel konkeranto antaŭrigardojn kaj metadatumojn kondutas. +Comment[es]=Puede configurar como trabaja la previsualización y meta-datos de Konqueror +Comment[et]=Siin saad seadistada, kuidas töötab Konquerori eelvaatlus ja metaandmete esitamine +Comment[eu]=Konquerorren aurrebistak eta metadatuak nola egiten duten lan konfigura dezakezu hemen +Comment[fa]=می‌توانید طرزکار پیش‌نمایشها و فراداده Konqueror را در اینجا پیکربندی کنید +Comment[fi]=Tässä kohdassa voit määritellä, kuinka Konquerorin esikatselu ja metadata toimii +Comment[fr]=Fonctionnement des aperçus et méta-informations de Konqueror +Comment[fy]=Hjir kinne jo ynstelle hoe de foarbylden en metadata yn Konqueror wurkje +Comment[gl]=Pode configurar aqui as Miniaturas e os Meta Datos en Konqueror +Comment[he]=שינוי הדרך שבה פועלות תצוגות מקדימות ומידע־על ב־Konqueror +Comment[hi]=आप यहाँ कॉन्फ़िगर कर सकते हैं कि कॉन्करर का पूर्वावलोकन व मेटा-डाटा कैसे काम करता है +Comment[hr]=Konfiguriranje načina rada Konqueror pregleda i prikaza meta-podataka +Comment[hu]=Itt lehet beállítani a Konqueror gyorsnézeteit és a jellemzők megjelenítési módját +Comment[is]=Hér getur þú stillt hvernig Konqueror forsýnir skrár og meðhöndlar metagögn +Comment[it]=Configura il funzionamento di anteprime ed informazioni aggiuntive di Konqueror +Comment[ja]=Konqueror のプレビューとメタデータ機能を設定 +Comment[ka]=წინასწარ ხედვის და მეტა მონაცემების კონფიგურირება Konqueror-ში +Comment[kk]= Konqueror нобайларды және мета-деректерді қалай көрсететінін баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ របៀប​ដែល​ការ​មើល​ជា​មុន & ទិន្នន័យ​មេតា Konqueror ដំណើរការ +Comment[ko]=Konqueror의 미리 보기와 메타데이터 작업 설정 +Comment[lt]=Čia galite nustatyti, kaip veikia Konqueror peržiūros ir meta duomenų rodymas +Comment[lv]=Šeit Jūs varat konfigurēt Iekarotāja failu priekšapskati un metadatu rādīšanu +Comment[mk]=Конфигурирајте ја работата на прегледите и метаподатоците во Konqueror +Comment[mn]=Энд та конкюрорын урьдчилан харах байдлыг тогтооно +Comment[ms]=Anda boleh konfigur bagaimana Prapapar & Data Meta Konqueror berfungsi di sini +Comment[mt]=Tista' tissettja kif jaħdmu l-previżjonijiet u meta-data ta' Konqueror minn hawn +Comment[nb]=Tilpass hvordan forhåndsvisning og metadata skal virke i Konqueror +Comment[nds]=Hier kannst Du instellen, wodennig Vöransichten un Meta-Daten in Konqueror arbeidt +Comment[ne]=तपाईँले यहाँ कन्क्वेरर पूर्वावलोकन र मेटा-डेटाले गर्ने कार्य कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=Hier kunt u instellen hoe de voorbeelden en metadata in Konqueror werken +Comment[nn]=Her kan du velja korleis førehandsvising og metadata i Konqueror skal fungera +Comment[pa]=ਇੱਥੇ ਤੁਸੀਂ ਕੋਨਕਿਉਰੋਰ ਝਾਤੀ ਅਤੇ ਮੈਟਾ-ਡਾਟਾ ਕੰਮ ਨੂੰ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ। +Comment[pl]=Konfiguracja podglądów zawartości plików i metadanych w Konquerorze +Comment[pt]=O utilizador pode configurar aqui como é que as Antevisões do Konqueror e os meta-dados funcionam aqui +Comment[pt_BR]=Você pode configurar como funcionam as prévisualizações e metadados do Konqueror aqui +Comment[ro]=Configurează funcționarea previzualizărilor și metainformațiilor în Konqueror +Comment[ru]=Настройка создания миниатюр и показа мета-данных в Konqueror +Comment[rw]=Ushobora kugena ukuntu Amagaragazambere ya Konqueror & Ibyatanzwe-bidasanzwe bikora hano +Comment[se]=Dás sáhtát heivehit ovdačájeheamit ja metadáhtat galget doaibmat Konqueroras +Comment[sk]=Nastavenie, ako fungujú náhľady a zisťovanie meta dát v Konquerore +Comment[sl]=Nastavite lahko, kako delujejo Konquerorjevi ogledi in metapodatki +Comment[sr]=Овде можете подесити како Konqueror-ови прегледи и мета подаци раде +Comment[sr@Latn]=Ovde možete podesiti kako Konqueror-ovi pregledi i meta podaci rade +Comment[sv]=Anpassa hur Konquerors förhandsgranskning och metadata fungerar +Comment[ta]=கான்கொரர் முன்ஓட்டங்கள் மற்றும் மெடா-தகவல் எப்படி இயங்குகிறது என்பதை வடிவமைக்க முடியும். +Comment[tg]=Шумо метавонед чигунагии кори пешнамоиши Konqueror-ро ва Meta-data-ро дар инҷо танзим кунед. +Comment[th]=คุณสามารถปรับแต่งการแสดงตัวอย่าง & ข้อมูลเมตาของคอนเควอร์เรอร์ได้ที่นี่ +Comment[tr]=Konqueror önizlemelerini buradan yapılandırabilirsiniz +Comment[tt]=Konqueror'dağı Kürsätkeç eşen caylaw +Comment[uk]=Тут можна налаштувати роботу попереднього перегляду Konqueror та метаданих +Comment[uz]=Koʻrib chiqishlar va meta-maʼlumotni moslash +Comment[uz@cyrillic]=Кўриб чиқишлар ва мета-маълумотни мослаш +Comment[vi]=Bạn có thể cấu hình cách làm việc của bộ Xem trước & Thông tin tập tin của Konqueror ở đây +Comment[wa]=Chal vos ploz apontyî comint Konqueror rote avou li Prévey & Meta-dnêyes +Comment[zh_CN]=您可在此配置 Konqueror 预览和元数据工作的方式 +Comment[zh_TW]=您可以在這裡設定 Konqueror 的預覽與中繼資料如何運作 +Keywords=konqueror,filemanager,previews,file previews,maximum size +Keywords[af]=konqueror,filemanager,previews,file previews,maximum grootte +Keywords[ar]=كونكيورر،مسسير الملفات،المعاينات،إستعراض الملفات، الحجم الأقصى +Keywords[be]=Кіраўнік файлаў,Прагляд,Перадпрагляд,Перадпрагляд файлаў,Прагляд файлаў,Найбольшы памер,konqueror,filemanager,previews,file previews,maximum size +Keywords[bg]=данни, файл, мета, браузър, konqueror, filemanager,previews, file previews, maximum size +Keywords[ca]=konqueror,gestor de fitxers,vistes prèvies,vistes prèvies de fitxers,mida màxima +Keywords[cs]=Konqueror,Správce souborů,Náhledy,Náhledy souborů,Maximální velikost +Keywords[csb]=konqueror,menedżer lopków,pòdzerczi,pòdzerczi zamkłosców lopków, maksymalnô miara +Keywords[cy]=konqueror,rheolydd ffeiliau,rhagolygon ffeil,maint mwyaf +Keywords[da]=konqueror,filhåndtering,forhåndsvisninger,filforhåndsvisninger,maksimal størrelse +Keywords[de]=Konqueror,Dateimanager,Vorschau,Dateivorschau,Dateigrößen +Keywords[el]=konqueror,διαχειριστής αρχείων,προεπισκοπήσεις,προεπισκοπήσεις αρχείων,μέγιστο μέγεθος +Keywords[eo]=konkeranto,dieradministrilo,antaŭrigardoj +Keywords[es]=konqueror,gestor de archivos,previsualizaciones,previsualizaciones de archivos, tamaño máximo +Keywords[et]=konqueror,failihaldur,eelvaatlused,faili eelvaatlus,maksimaalne suurus +Keywords[eu]=konqueror,fitxategi kudeatzailea,aurrebistak,fitxategi aurrebistak, gehienezko neurria +Keywords[fa]=konqueror، مدیر پرونده، پیش‌نمایشها، پیش‌نمایشهای پرونده، بیشینۀ اندازه +Keywords[fi]=konqueror,tiedostonhallinta,eikatselu,tiedoston esikatselu,maksimikoko +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,aperçus,taille maximale +Keywords[fy]=konqueror,filemanager,triembehearder,previews,foarbylden,foarútsjen,triemmenfoarbylden,maksimum grutte +Keywords[ga]=konqueror,bainisteoir comhad,réamhamharc,réamhamharc comhad,uasmhéid +Keywords[gl]=konqueror,xestor de ficheiros,antever,miniaturas de ficheiros,tamaño máximo +Keywords[he]=konqueror,מנהל קבצים,תצוגות מקדימות,גודל מרבי, filemanager,previews,file previews,maximum size +Keywords[hi]=कॉन्करर,फ़ाइलप्रबंधक,पूर्वावलोकन,फ़ाइल पूर्वावलोकन,अधिकतम आकार +Keywords[hr]=konqueror,filemanager,previews,file previews,maximum size,upravljač datotekama,pregled,pregled datoteka,najveća veličina +Keywords[hu]=Konqueror,fájlkezelő,gyorsnézetek,fájl-gyorsnézetek,maximális méret +Keywords[is]=konqueror,skráastjóri,forsýna,forsýna skrár,hámarks stærð +Keywords[it]=konqueror,filemanager,anteprime,anteprime file,dimensione massima +Keywords[ja]=konqueror,ファイルマネージャ,プレビュー,ファイルのプレビュー,最大サイズ +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,មើល​ជា​មុន,មើល​ឯកសារ​ជា​មុន,ទំហំ​អតិបរមា +Keywords[lt]=konqueror,filemanager,previews,file previews,maximum size, bylų tvarkyklė, peržiūros, bylų peržiūros, didžiausias dydis +Keywords[lv]=Iekarotājs,failu menedžeris,priekšapskate,failu priekšapskate,maksimālais izmērs +Keywords[mk]=konqueror,filemanager,previews,file previews,maximum size,менаџер на датотеки, прегледи, прегледи на датотеки,максимална големина +Keywords[mn]=Конкюрор,Файл удирдагч,Урьдчилан харах,Файл харах,Файлын хэмжээ +Keywords[mt]=konqueror,filemanager,previews,file previews,maximum size,manager tal-fajls,previżjoni,daqs massimu +Keywords[nb]=konqueror,forhåndsvisning,fil,filbehandler,forhåndsvisning,filvisning,største størrelse +Keywords[nds]=Konqueror,Dateipleger,Vöransichten,Dateivöransicht,maximale Grött +Keywords[ne]=कन्क्वेरर, फाइल व्वस्थापक, पूर्वावलोकन, फाइल पूर्वावलोकन, अधिकतम साइज +Keywords[nl]=konqueror,filemanager,bestandsbeheer,previews,voorbeelden,vooruitblikken,bestandsvoorbeelden,maximum grootte +Keywords[nn]=Konqueror,filhandsamar,førehandsvising,filvising,høgste storleik +Keywords[nso]=konqueror,molaodi wa faele,diponelopele,diponelopele tsa faele,bogolo bja magomo a godimo +Keywords[pa]=ਕੋਨਕਿਉਰਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਝਲਕ,ਫਾਇਲ ਝਲਕ,ਵੱਧ ਤੋਂ ਵੱਧ ਅਕਾਰ +Keywords[pl]=konqueror,menedżer plików,podglądy,podglądy zawartości plików, rozmiar maksymalny +Keywords[pt]=konqueror,gestor de ficheiros,antevisões,antevisões de ficheiros,tamanho máximo +Keywords[pt_BR]=konqueror,gerenciador de arquivos,visualização,pré-visualizações de arquivos,tamanho máximo,previsões +Keywords[ro]=konqueror,manager de fișiere,previzualizări,mărime maximă +Keywords[rw]=Konqueror,mugengadosiye,amagaragazambere,amagaragazambere y'idosiye,ingano ntarengwa +Keywords[se]=konqueror,fiilagieđahalli,ovdačájeheamit,fiilaovdačájeheamit,badjerádji sturrodat +Keywords[sk]=konqueror,správa súborov,náhľady,náhľady súborov,maximálna veľkosť +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,predogled,ogled,največja velikost +Keywords[sr]=konqueror,filemanager,прегледи,прегледи фајлова,максимална величина +Keywords[sr@Latn]=konqueror,filemanager,pregledi,pregledi fajlova,maksimalna veličina +Keywords[sv]=konqueror,filhanterare,förhandsgranskning,maximal storlek +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,முன்காட்சிகள்,கோப்பு முன்காட்சிகள்,அதிகப்பட்ச அளவு +Keywords[tg]=konqueror,filemanager,previews,file previews,maximum size, конкурор, мудири файл, пешнамоиш, файли пешнамоиш, андозаи калонтарин +Keywords[th]=คอนเควอร์เรอร์,จัดการแฟ้ม,แสดงตัวอย่าง,แสดงตัวอย่างแฟ้ม,ขนาดสูงสุด +Keywords[tr]=konqueror,dosya yöneticisi,önizlemeler,azami boyut,dosya önizleme +Keywords[uk]=konqueror,менеджер файлів,перегляд,перегляд файлів,максимальний розмір +Keywords[uz]=konqueror,fayl boshqaruvchi,koʻrib chiqishlar,faylni koʻrib chiqish +Keywords[uz@cyrillic]=konqueror,файл бошқарувчи,кўриб чиқишлар,файлни кўриб чиқиш +Keywords[ven]=konqueror,mulanguli wa faela,mbonelaphanda,mbonelaphanda ya faela,saizi khulwane +Keywords[vi]=konqueror,trình quản lý tập tin,xem trước,xem trước tập tin,cỡ lớn nhất +Keywords[wa]=konqueror,manaedjeu di fitchî,prévey,prévey les fitchîs,grandeu macsimom +Keywords[xh]=konqueror,umphathi wefayile,imboniselo. iimboniselo zefayile,yandisa ubungakanani +Keywords[zh_CN]=konqueror,filemanager,previews,file previews,maximum size,文件管理器,预览,文件预览,最大大小 +Keywords[zh_TW]=konqueror,filemanager,previews,file previews,maximum size,征服家,檔案管理程式,預覽,檔案預覽,最大大小, +Keywords[zu]=konqueror,imenenja yamafayela,imibukiso yangaphambili, imibukiso yangaphambili yamafayela,usayizi ophezulu diff --git a/kcontrol/konq/fontopts.cpp b/kcontrol/konq/fontopts.cpp new file mode 100644 index 000000000..66cc3962c --- /dev/null +++ b/kcontrol/konq/fontopts.cpp @@ -0,0 +1,387 @@ +/* This file is part of the KDE project + Copyright (C) 1999 David Faure + + 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 + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include // include default values directly from konqueror + +#include "fontopts.h" + + +//----------------------------------------------------------------------------- + +KonqFontOptions::KonqFontOptions(KConfig *config, QString group, bool desktop, QWidget *parent, const char* /*name*/) + : KCModule( parent, "kcmkonq" ), g_pConfig(config), groupname(group), m_bDesktop(desktop) +{ + QLabel *label; + QString wtstr; + int row = 0; + + int LASTLINE = m_bDesktop ? 8 : 10; // this can be different :) +#define LASTCOLUMN 2 + QGridLayout *lay = new QGridLayout(this,LASTLINE+1,LASTCOLUMN+1, 0, + KDialog::spacingHint()); + lay->setRowStretch(LASTLINE,10); + lay->setColStretch(LASTCOLUMN,10); + + row++; + + m_pStandard = new KFontCombo( this ); + label = new QLabel( m_pStandard, i18n("&Standard font:"), this ); + lay->addWidget(label,row,0); + lay->addMultiCellWidget(m_pStandard,row,row,1,1); + + wtstr = i18n("This is the font used to display text in Konqueror windows."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pStandard, wtstr ); + + row++; + connect( m_pStandard, SIGNAL( activated(const QString&) ), + SLOT( slotStandardFont(const QString&) ) ); + connect( m_pStandard, SIGNAL( activated(const QString&) ), + SLOT(changed() ) ); + connect( m_pStandard, SIGNAL( textChanged(const QString&) ), + SLOT( slotStandardFont(const QString&) ) ); + connect( m_pStandard, SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + m_pSize = new QSpinBox( 4,18,1,this ); + label = new QLabel( m_pSize, i18n("Font si&ze:"), this ); + lay->addWidget(label,row,0); + lay->addMultiCellWidget(m_pSize,row,row,1,1); + + connect( m_pSize, SIGNAL( valueChanged(int) ), + this, SLOT( slotFontSize(int) ) ); + row+=2; + + wtstr = i18n("This is the font size used to display text in Konqueror windows."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pSize, wtstr ); + int hAlign = QApplication::reverseLayout() ? AlignRight : AlignLeft; + + // +#define COLOR_BUTTON_COL 1 + m_pNormalText = new KColorButton( normalTextColor, this ); + label = new QLabel( m_pNormalText, i18n("Normal te&xt color:"), this ); + lay->addWidget(label,row,0); + lay->addWidget(m_pNormalText,row,COLOR_BUTTON_COL,hAlign); + + wtstr = i18n("This is the color used to display text in Konqueror windows."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pNormalText, wtstr ); + + connect( m_pNormalText, SIGNAL( changed( const QColor & ) ), + SLOT( slotNormalTextColorChanged( const QColor & ) ) ); + + /* + row++; + label = new QLabel( i18n("Highlighted text color:"), this ); + lay->addWidget(label,row,0); + + m_pHighlightedText = new KColorButton( highlightedTextColor, this ); + lay->addWidget(m_pHighlightedText,row,COLOR_BUTTON_COL,hAlign); + + wtstr = i18n("This is the color used to display selected text in Konqueror windows."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pHighlightedText, wtstr ); + + connect( m_pHighlightedText, SIGNAL( changed( const QColor & ) ), + SLOT( slotHighlightedTextColorChanged( const QColor & ) ) ); + */ + + row++; + + if ( m_bDesktop ) + { + m_cbTextBackground = new QCheckBox( i18n("&Text background color:"), this ); + lay->addWidget(m_cbTextBackground,row,0); + connect( m_cbTextBackground, SIGNAL( clicked() ), + SLOT( slotTextBackgroundClicked() ) ); + + m_pTextBackground = new KColorButton( textBackgroundColor, this ); + lay->addWidget(m_pTextBackground,row,COLOR_BUTTON_COL,hAlign); + + wtstr = i18n("This is the color used behind the text for the icons on the desktop."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pTextBackground, wtstr ); + + connect( m_pTextBackground, SIGNAL( changed( const QColor & ) ), + SLOT( slotTextBackgroundColorChanged( const QColor & ) ) ); + + row++; + } + else + { + m_pNbLines = new QSpinBox( 1, 10, 1, this ); + QLabel* label = new QLabel( m_pNbLines, i18n("H&eight for icon text:"), this ); + lay->addWidget( label, row, 0 ); + lay->addWidget( m_pNbLines, row, 1 ); + connect( m_pNbLines, SIGNAL( valueChanged(int) ), + this, SLOT( changed() ) ); + connect( m_pNbLines, SIGNAL( valueChanged(int) ), + SLOT( slotPNbLinesChanged(int)) ); + + QString thwt = i18n("This is the maximum number of lines that can be" + " used to draw icon text. Long file names are" + " truncated at the end of the last line."); + QWhatsThis::add( label, thwt ); + QWhatsThis::add( m_pNbLines, thwt ); + + row++; + + // width for the items in multicolumn icon view + m_pNbWidth = new QSpinBox( 1, 100000, 1, this ); + + label = new QLabel( m_pNbWidth, i18n("&Width for icon text:"), this ); + lay->addWidget( label, row, 0 ); + lay->addWidget( m_pNbWidth, row, 1 ); + connect( m_pNbWidth, SIGNAL( valueChanged(int) ), + this, SLOT( changed() ) ); + connect( m_pNbWidth, SIGNAL( valueChanged(int) ), + SLOT( slotPNbWidthChanged(int)) ); + + thwt = i18n( "This is the maximum width for the icon text when konqueror " + "is used in multi column view mode." ); + QWhatsThis::add( label, thwt ); + QWhatsThis::add( m_pNbWidth, thwt ); + + row++; + } + + cbUnderline = new QCheckBox(i18n("&Underline filenames"), this); + lay->addMultiCellWidget(cbUnderline,row,row,0,LASTCOLUMN,hAlign); + connect(cbUnderline, SIGNAL(clicked()), this, SLOT(changed())); + + QWhatsThis::add( cbUnderline, i18n("Checking this option will result in filenames" + " being underlined, so that they look like links on a web page. Note:" + " to complete the analogy, make sure that single click activation is" + " enabled in the mouse control module.") ); + + if ( !m_bDesktop ) + { + row++; + + m_pSizeInBytes = new QCheckBox(i18n("Display file sizes in b&ytes"), this); + lay->addMultiCellWidget( m_pSizeInBytes,row,row,0,LASTCOLUMN,hAlign ); + connect( m_pSizeInBytes, SIGNAL(clicked()), this, SLOT(changed()) ); + + QWhatsThis::add( m_pSizeInBytes, i18n("Checking this option will result in file sizes" + " being displayed in bytes. Otherwise file sizes are" + " being displayed in kilobytes or megabytes if appropriate.") ); + } + row++; + + assert( row == LASTLINE-1 ); + // The last line is empty and grows if resized + + load(); +} + +void KonqFontOptions::slotFontSize(int i) +{ + m_fSize = i; + changed(); +} + +void KonqFontOptions::slotStandardFont(const QString& n ) +{ + m_stdName = n; +} + +void KonqFontOptions::slotPNbLinesChanged(int value) +{ + m_pNbLines->setSuffix( i18n( " line", " lines", value ) ); +} + +void KonqFontOptions::slotPNbWidthChanged(int value) +{ + m_pNbWidth->setSuffix( i18n( " pixel", " pixels", value ) ); +} + +void KonqFontOptions::load() +{ + load( false ); +} + +void KonqFontOptions::load( bool useDefaults ) +{ + g_pConfig->setReadDefaults( useDefaults ); + + g_pConfig->setGroup(groupname); + + QFont stdFont = g_pConfig->readFontEntry( "StandardFont" ); + m_stdName = stdFont.family(); + m_fSize = stdFont.pointSize(); + // we have to use QFontInfo, in case the font was specified with a pixel size + if ( m_fSize == -1 ) + m_fSize = QFontInfo(stdFont).pointSize(); + + normalTextColor = KGlobalSettings::textColor(); + normalTextColor = g_pConfig->readColorEntry( "NormalTextColor", &normalTextColor ); + m_pNormalText->setColor( normalTextColor ); + + /* highlightedTextColor = KGlobalSettings::highlightedTextColor(); + highlightedTextColor = g_pConfig->readColorEntry( "HighlightedTextColor", &highlightedTextColor ); + m_pHighlightedText->setColor( highlightedTextColor ); + */ + + if ( m_bDesktop ) + { + textBackgroundColor = g_pConfig->readColorEntry( "ItemTextBackground" ); + m_cbTextBackground->setChecked(textBackgroundColor.isValid()); + m_pTextBackground->setEnabled(textBackgroundColor.isValid()); + m_pTextBackground->setColor( textBackgroundColor ); + // Don't keep an invalid color around, otherwise checking the checkbox still gives invalid. + if ( !textBackgroundColor.isValid() ) + textBackgroundColor = Qt::black; + } + else + { + int n = g_pConfig->readNumEntry( "TextHeight", 0 ); + if ( n == 0 ) { + if ( g_pConfig->readBoolEntry( "WordWrapText", true ) ) + n = DEFAULT_TEXTHEIGHT; + else + n = 1; + } + m_pNbLines->setValue( n ); + + n = g_pConfig->readNumEntry( "TextWidth", DEFAULT_TEXTWIDTH_MULTICOLUMN ); + m_pNbWidth->setValue( n ); + + m_pSizeInBytes->setChecked( g_pConfig->readBoolEntry( "DisplayFileSizeInBytes", DEFAULT_FILESIZEINBYTES ) ); + } + cbUnderline->setChecked( g_pConfig->readBoolEntry("UnderlineLinks", DEFAULT_UNDERLINELINKS ) ); + + KConfig cfg("kdeglobals"); + cfg.setGroup("DesktopIcons"); + + updateGUI(); + emit changed( useDefaults ); +} + +void KonqFontOptions::defaults() +{ + load( true ); +} + +void KonqFontOptions::updateGUI() +{ + if ( m_stdName.isEmpty() ) + m_stdName = KGlobalSettings::generalFont().family(); + + m_pStandard->setCurrentFont( m_stdName ); + m_pSize->setValue( m_fSize ); +} + +void KonqFontOptions::save() +{ + g_pConfig->setGroup(groupname); + + QFont stdFont( m_stdName, m_fSize ); + g_pConfig->writeEntry( "StandardFont", stdFont ); + + g_pConfig->writeEntry( "NormalTextColor", normalTextColor ); + //g_pConfig->writeEntry( "HighlightedTextColor", highlightedTextColor ); + if ( m_bDesktop ) + g_pConfig->writeEntry( "ItemTextBackground", m_cbTextBackground->isChecked() ? textBackgroundColor : QColor()); + else + { + g_pConfig->writeEntry( "TextHeight", m_pNbLines->value() ); + g_pConfig->writeEntry( "TextWidth", m_pNbWidth->value() ); + g_pConfig->writeEntry( "DisplayFileSizeInBytes", m_pSizeInBytes->isChecked() ); + } + g_pConfig->writeEntry( "UnderlineLinks", cbUnderline->isChecked() ); + g_pConfig->sync(); + + KConfig cfg("kdeglobals"); + cfg.setGroup("DesktopIcons"); + + // Send signal to konqueror + // Warning. In case something is added/changed here, keep kfmclient in sync + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); + + // Tell kdesktop about the new config file + int konq_screen_number = KApplication::desktop()->primaryScreen(); + QCString appname; + if (konq_screen_number == 0) + appname = "kdesktop"; + else + appname.sprintf("kdesktop-screen-%d", konq_screen_number); + kapp->dcopClient()->send( appname, "KDesktopIface", "configure()", data ); +} + +void KonqFontOptions::slotTextBackgroundClicked() +{ + m_pTextBackground->setEnabled( m_cbTextBackground->isChecked() ); + changed(); +} + +void KonqFontOptions::slotNormalTextColorChanged( const QColor &col ) +{ + if ( normalTextColor != col ) + { + normalTextColor = col; + changed(); + } +} + +/* +void KonqFontOptions::slotHighlightedTextColorChanged( const QColor &col ) +{ + if ( highlightedTextColor != col ) + { + highlightedTextColor = col; + changed(); + } +} +*/ + +void KonqFontOptions::slotTextBackgroundColorChanged( const QColor &col ) +{ + if ( textBackgroundColor != col ) + { + textBackgroundColor = col; + changed(); + } +} + +QString KonqFontOptions::quickHelp() const +{ + return i18n("

    Appearance

    You can configure how Konqueror looks as a file manager here."); +} + +#include "fontopts.moc" diff --git a/kcontrol/konq/fontopts.h b/kcontrol/konq/fontopts.h new file mode 100644 index 000000000..18473c18d --- /dev/null +++ b/kcontrol/konq/fontopts.h @@ -0,0 +1,112 @@ +/* This file is part of the KDE project + Copyright (C) 1999 David Faure + + 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. +*/ + +//----------------------------------------------------------------------------- +// +// Konqueror/KDesktop Fonts & Colors Options (for icon/tree view) +// +// (c) Martin R. Jones 1996 +// (c) Bernd Wuebben 1998 +// +// KControl port & modifications +// (c) Torben Weis 1998 +// +// End of the KControl port by David +// Port to KControl 2 by MHK +// konqy adaptations by David + +#ifndef __KONQFONT_OPTIONS_H__ +#define __KONQFONT_OPTIONS_H__ + +#include +#include + +#include + +class QCheckBox; +class QRadioButton; + +class KColorButton; +class KConfig; +class KFontCombo; + + +//----------------------------------------------------------------------------- + +class KonqFontOptions : public KCModule +{ + Q_OBJECT +public: + KonqFontOptions(KConfig *config, QString group, bool desktop, QWidget *parent=0, const char *name=0); + QString quickHelp() const; + + virtual void load(); + virtual void load( bool readDefaults ); + virtual void save(); + virtual void defaults(); + +public slots: + void slotFontSize(int i); + void slotStandardFont(const QString& n); + void slotTextBackgroundClicked(); + + void slotNormalTextColorChanged( const QColor &col ); + //void slotHighlightedTextColorChanged( const QColor &col ); + void slotTextBackgroundColorChanged( const QColor &col ); + +private slots: + void slotPNbLinesChanged(int value); + void slotPNbWidthChanged(int value); + +private: + void updateGUI(); + +private: + + KConfig *g_pConfig; + QString groupname; + bool m_bDesktop; + + /* + QRadioButton* m_pSmall; + QRadioButton* m_pMedium; + QRadioButton* m_pLarge; + */ + KFontCombo* m_pStandard; + QSpinBox* m_pSize; + + int m_fSize; + QString m_stdName; + + KColorButton* m_pBg; + KColorButton* m_pNormalText; + //KColorButton* m_pHighlightedText; + QCheckBox* m_cbTextBackground; + KColorButton* m_pTextBackground; + QColor normalTextColor; + //QColor highlightedTextColor; + QColor textBackgroundColor; + + QSpinBox* m_pNbLines; + QSpinBox* m_pNbWidth; + QCheckBox* cbUnderline; + QCheckBox* m_pSizeInBytes; +}; + +#endif diff --git a/kcontrol/konq/main.cpp b/kcontrol/konq/main.cpp new file mode 100644 index 000000000..dc9a08380 --- /dev/null +++ b/kcontrol/konq/main.cpp @@ -0,0 +1,98 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include "rootopts.h" +#include "behaviour.h" +#include "fontopts.h" +#include "desktop.h" +#include "previews.h" +#include "browser.h" +#include "desktopbehavior_impl.h" + +#include +#include + +static QCString configname() +{ + int desktop = KApplication::desktop()->primaryScreen(); + QCString name; + if (desktop == 0) + name = "kdesktoprc"; + else + name.sprintf("kdesktop-screen-%drc", desktop); + + return name; +} + + +extern "C" +{ + KDE_EXPORT KCModule *create_browser(QWidget *parent, const char *name) + { + KConfig *config = new KConfig("konquerorrc", false, true); + return new KBrowserOptions(config, "FMSettings", parent, name); + } + + KDE_EXPORT KCModule *create_behavior(QWidget *parent, const char *name) + { + KConfig *config = new KConfig("konquerorrc", false, true); + return new KBehaviourOptions(config, "FMSettings", parent, name); + } + + KDE_EXPORT KCModule *create_appearance(QWidget *parent, const char *name) + { + KConfig *config = new KConfig("konquerorrc", false, true); + return new KonqFontOptions(config, "FMSettings", false, parent, name); + } + + KDE_EXPORT KCModule *create_previews(QWidget *parent, const char *name) + { + return new KPreviewOptions(parent, name); + } + + KDE_EXPORT KCModule *create_dbehavior(QWidget *parent, const char* /*name*/) + { + KConfig *config = new KConfig(configname(), false, false); + return new DesktopBehaviorModule(config, parent); + } + + KDE_EXPORT KCModule *create_dappearance(QWidget *parent, const char* /*name*/) + { + KConfig *config = new KConfig(configname(), false, false); + return new KonqFontOptions(config, "FMSettings", true, parent); + } + + KDE_EXPORT KCModule *create_dpath(QWidget *parent, const char* /*name*/) + { + //KConfig *config = new KConfig(configname(), false, false); + return new DesktopPathConfig(parent); + } + + KDE_EXPORT KCModule *create_ddesktop(QWidget *parent, const char* /*name*/) + { + return new KDesktopConfig(parent, "VirtualDesktops"); + } +} + + diff --git a/kcontrol/konq/onlyone.png b/kcontrol/konq/onlyone.png new file mode 100644 index 000000000..03cb65b9c Binary files /dev/null and b/kcontrol/konq/onlyone.png differ diff --git a/kcontrol/konq/overlapping.png b/kcontrol/konq/overlapping.png new file mode 100644 index 000000000..93adb259e Binary files /dev/null and b/kcontrol/konq/overlapping.png differ diff --git a/kcontrol/konq/previews.cpp b/kcontrol/konq/previews.cpp new file mode 100644 index 000000000..20d9a4499 --- /dev/null +++ b/kcontrol/konq/previews.cpp @@ -0,0 +1,219 @@ +/* This file is part of the KDE libraries + Copyright (C) 2002 David Faure + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ +// +// File previews configuration +// + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "previews.h" + +//----------------------------------------------------------------------------- + +class PreviewCheckListItem : public QCheckListItem +{ + public: + PreviewCheckListItem( QListView *parent, const QString &text ) + : QCheckListItem( parent, text, CheckBoxController ) + {} + + PreviewCheckListItem( QListViewItem *parent, const QString &text ) + : QCheckListItem( parent, text, CheckBox ) + {} + + protected: + void stateChange( bool ) + { + static_cast( listView()->parent() )->changed(); + } +}; + +KPreviewOptions::KPreviewOptions( QWidget *parent, const char */*name*/ ) + : KCModule( parent, "kcmkonq" ) +{ + QVBoxLayout *lay = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + lay->addWidget( new QLabel( i18n("

    Allow previews, \"Folder Icons Reflect Contents\", and " + "retrieval of meta-data on protocols:

    "), this ) ); + + setQuickHelp( i18n("

    Preview Options

    Here you can modify the behavior " + "of Konqueror when it shows the files in a folder." + "

    The list of protocols:

    check the protocols over which " + "previews should be shown; uncheck those over which they should not. " + "For instance, you might want to show previews over SMB if the local " + "network is fast enough, but you might disable it for FTP if you often " + "visit very slow FTP sites with large images." + "

    Maximum File Size:

    select the maximum file size for which " + "previews should be generated. For instance, if set to 1 MB (the default), " + "no preview will be generated for files bigger than 1 MB, for speed reasons.")); + + // Listview containing checkboxes for all protocols that support listing + KListView *listView = new KListView( this, "listView" ); + listView->addColumn( i18n( "Select Protocols" ) ); + listView->setFullWidth( true ); + + QHBoxLayout *hbox = new QHBoxLayout( lay ); + hbox->addWidget( listView ); + hbox->addStretch(); + + PreviewCheckListItem *localItems = new PreviewCheckListItem( listView, + i18n( "Local Protocols" ) ); + PreviewCheckListItem *inetItems = new PreviewCheckListItem( listView, + i18n( "Internet Protocols" ) ); + + QStringList protocolList = KProtocolInfo::protocols(); + protocolList.sort(); + QStringList::Iterator it = protocolList.begin(); + + KURL url; + url.setPath("/"); + + for ( ; it != protocolList.end() ; ++it ) + { + url.setProtocol( *it ); + if ( KProtocolInfo::supportsListing( url ) ) + { + QCheckListItem *item; + if ( KProtocolInfo::protocolClass( *it ) == ":local" ) + item = new PreviewCheckListItem( localItems, ( *it ) ); + else + item = new PreviewCheckListItem( inetItems, ( *it ) ); + + m_items.append( item ); + } + } + + listView->setOpen( localItems, true ); + listView->setOpen( inetItems, true ); + + QWhatsThis::add( listView, + i18n("This option makes it possible to choose when the file previews, " + "smart folder icons, and meta-data in the File Manager should be activated.\n" + "In the list of protocols that appear, select which ones are fast " + "enough for you to allow previews to be generated.") ); + + QLabel *label = new QLabel( i18n( "&Maximum file size:" ), this ); + lay->addWidget( label ); + + m_maxSize = new KDoubleNumInput( this ); + m_maxSize->setSuffix( i18n(" MB") ); + m_maxSize->setRange( 0.02, 10, 0.02, true ); + m_maxSize->setPrecision( 1 ); + label->setBuddy( m_maxSize ); + lay->addWidget( m_maxSize ); + connect( m_maxSize, SIGNAL( valueChanged(double) ), SLOT( changed() ) ); + + m_boostSize = new QCheckBox(i18n("&Increase size of previews relative to icons"), this); + connect( m_boostSize, SIGNAL( toggled(bool) ), SLOT( changed() ) ); + lay->addWidget(m_boostSize); + + m_useFileThumbnails = new QCheckBox(i18n("&Use thumbnails embedded in files"), this); + connect( m_useFileThumbnails, SIGNAL( toggled(bool) ), SLOT( changed() ) ); + + lay->addWidget(m_useFileThumbnails); + + QWhatsThis::add( m_useFileThumbnails, + i18n("Select this to use thumbnails that are found inside some " + "file types (e.g. JPEG). This will increase speed and reduce " + "disk usage. Deselect it if you have files that have been processed " + "by programs which create inaccurate thumbnails, such as ImageMagick.") ); + + lay->addWidget( new QWidget(this), 10 ); + + load(); +} + +// Default: 1 MB +#define DEFAULT_MAXSIZE (1024*1024) + +void KPreviewOptions::load(bool useDefaults) +{ + // *** load and apply to GUI *** + KGlobal::config()->setReadDefaults(useDefaults); + KConfigGroup group( KGlobal::config(), "PreviewSettings" ); + QPtrListIterator it( m_items ); + + for ( ; it.current() ; ++it ) { + QString protocol( it.current()->text() ); + if ( ( protocol == "file" ) && ( !group.hasKey ( protocol ) ) ) + // file should be enabled in case is not defined because if not so + // than preview's lost when size is changed from default one + it.current()->setOn( true ); + else + it.current()->setOn( group.readBoolEntry( protocol, false ) ); + } + // config key is in bytes (default value 1MB), numinput is in MB + m_maxSize->setValue( ((double)group.readNumEntry( "MaximumSize", DEFAULT_MAXSIZE )) / (1024*1024) ); + + m_boostSize->setChecked( group.readBoolEntry( "BoostSize", false /*default*/ ) ); + m_useFileThumbnails->setChecked( group.readBoolEntry( "UseFileThumbnails", true /*default*/ ) ); + KGlobal::config()->setReadDefaults(false); +} + +void KPreviewOptions::load() +{ + load(false); +} + +void KPreviewOptions::defaults() +{ + load(true); +} + +void KPreviewOptions::save() +{ + KConfigGroup group( KGlobal::config(), "PreviewSettings" ); + QPtrListIterator it( m_items ); + for ( ; it.current() ; ++it ) { + QString protocol( it.current()->text() ); + group.writeEntry( protocol, it.current()->isOn(), true, true ); + } + // config key is in bytes, numinput is in MB + group.writeEntry( "MaximumSize", qRound( m_maxSize->value() *1024*1024 ), true, true ); + group.writeEntry( "BoostSize", m_boostSize->isChecked(), true, true ); + group.writeEntry( "UseFileThumbnails", m_useFileThumbnails->isChecked(), true, true ); + group.sync(); + + // Send signal to konqueror + // Warning. In case something is added/changed here, keep kfmclient in sync + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); +} + +void KPreviewOptions::changed() +{ + emit KCModule::changed(true); +} + +#include "previews.moc" diff --git a/kcontrol/konq/previews.h b/kcontrol/konq/previews.h new file mode 100644 index 000000000..b91e7b563 --- /dev/null +++ b/kcontrol/konq/previews.h @@ -0,0 +1,65 @@ +/* This file is part of the KDE libraries + Copyright (C) 2002 David Faure + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ +// +// File previews configuration +// + +#ifndef _PREVIEWS_OPTIONS_H +#define _PREVIEWS_OPTIONS_H + +/* + +The "Previews" Tab contains : + +List of protocols that support listing, with a checkbox for each +Configuration of the maximum image size + +*/ + +#include + +#include + +class KConfig; +class QCheckBox; +class QCheckListItem; +class KDoubleNumInput; + +class KPreviewOptions : public KCModule +{ + Q_OBJECT +public: + KPreviewOptions( QWidget *parent = 0L, const char *name = 0L ); + virtual void load(); + virtual void save(); + virtual void defaults(); + +protected: + void load(bool useDefaults); + +public slots: + void changed(); + +private: + QPtrList m_items; + KDoubleNumInput *m_maxSize; + QCheckBox *m_boostSize; + QCheckBox *m_useFileThumbnails; +}; + +#endif diff --git a/kcontrol/konq/rootopts.cpp b/kcontrol/konq/rootopts.cpp new file mode 100644 index 000000000..c546aa3ee --- /dev/null +++ b/kcontrol/konq/rootopts.cpp @@ -0,0 +1,345 @@ +// +// +// "Desktop Options" Tab for KDesktop configuration +// +// (c) Martin R. Jones 1996 +// (c) Bernd Wuebben 1998 +// +// Layouts +// (c) Christian Tibirna 1998 +// Port to KControl, split from Misc Tab, Port to KControl2 +// (c) David Faure 1998 +// Desktop menus, paths +// (c) David Faure 2000 + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // include default values directly from libkonq +#include + +#include "rootopts.h" + +//----------------------------------------------------------------------------- + +DesktopPathConfig::DesktopPathConfig(QWidget *parent, const char * ) + : KCModule( parent, "kcmkonq" ) +{ + QLabel * tmpLabel; + +#undef RO_LASTROW +#undef RO_LASTCOL +#define RO_LASTROW 4 // 3 paths + last row +#define RO_LASTCOL 2 + + int row = 0; + QGridLayout *lay = new QGridLayout(this, RO_LASTROW+1, RO_LASTCOL+1, + 0, KDialog::spacingHint()); + + lay->setRowStretch(RO_LASTROW,10); // last line grows + + lay->setColStretch(0,0); + lay->setColStretch(1,0); + lay->setColStretch(2,10); + + + setQuickHelp( i18n("

    Paths

    \n" + "This module allows you to choose where in the filesystem the " + "files on your desktop should be stored.\n" + "Use the \"What's This?\" (Shift+F1) to get help on specific options.")); + + // Desktop Paths + row++; + tmpLabel = new QLabel(i18n("Des&ktop path:"), this); + lay->addWidget(tmpLabel, row, 0); + urDesktop = new KURLRequester(this); + urDesktop->setMode( KFile::Directory ); + tmpLabel->setBuddy( urDesktop ); + lay->addMultiCellWidget(urDesktop, row, row, 1, RO_LASTCOL); + connect(urDesktop, SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + QString wtstr = i18n("This folder contains all the files" + " which you see on your desktop. You can change the location of this" + " folder if you want to, and the contents will move automatically" + " to the new location as well."); + QWhatsThis::add( tmpLabel, wtstr ); + QWhatsThis::add( urDesktop, wtstr ); + + row++; + tmpLabel = new QLabel(i18n("A&utostart path:"), this); + lay->addWidget(tmpLabel, row, 0); + urAutostart = new KURLRequester(this); + urAutostart->setMode( KFile::Directory ); + tmpLabel->setBuddy( urAutostart ); + lay->addMultiCellWidget(urAutostart, row, row, 1, RO_LASTCOL); + connect(urAutostart, SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + wtstr = i18n("This folder contains applications or" + " links to applications (shortcuts) that you want to have started" + " automatically whenever KDE starts. You can change the location of this" + " folder if you want to, and the contents will move automatically" + " to the new location as well."); + QWhatsThis::add( tmpLabel, wtstr ); + QWhatsThis::add( urAutostart, wtstr ); + + row++; + tmpLabel = new QLabel(i18n("D&ocuments path:"), this); + lay->addWidget(tmpLabel, row, 0); + urDocument = new KURLRequester(this); + urDocument->setMode( KFile::Directory ); + tmpLabel->setBuddy( urDocument ); + lay->addMultiCellWidget(urDocument, row, row, 1, RO_LASTCOL); + connect(urDocument, SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + wtstr = i18n("This folder will be used by default to " + "load or save documents from or to."); + QWhatsThis::add( tmpLabel, wtstr ); + QWhatsThis::add( urDocument, wtstr ); + + // -- Bottom -- + Q_ASSERT( row == RO_LASTROW-1 ); // if it fails here, check the row++ and RO_LASTROW above + + load(); +} + +void DesktopPathConfig::load() +{ + load( false ); +} + +void DesktopPathConfig::load( bool useDefaults ) +{ + KConfig config("kdeglobals", true, false); + // Desktop Paths + config.setReadDefaults( useDefaults ); + + config.setGroup("Paths"); + urDesktop->setURL( config.readPathEntry( "Desktop" , KGlobalSettings::desktopPath() )); + urAutostart->setURL( config.readPathEntry( "Autostart" , KGlobalSettings::autostartPath() )); + urDocument->setURL( config.readPathEntry( "Documents", KGlobalSettings::documentPath() )); + + emit changed( useDefaults ); +} + +void DesktopPathConfig::defaults() +{ + load( true ); +} + +void DesktopPathConfig::save() +{ + KConfig *config = KGlobal::config(); + KConfigGroupSaver cgs( config, "Paths" ); + + bool pathChanged = false; + bool autostartMoved = false; + + KURL desktopURL; + desktopURL.setPath( KGlobalSettings::desktopPath() ); + KURL newDesktopURL; + newDesktopURL.setPath(urDesktop->url()); + + KURL autostartURL; + autostartURL.setPath( KGlobalSettings::autostartPath() ); + KURL newAutostartURL; + newAutostartURL.setPath(urAutostart->url()); + + KURL documentURL; + documentURL.setPath( KGlobalSettings::documentPath() ); + KURL newDocumentURL; + newDocumentURL.setPath(urDocument->url()); + + if ( !newDesktopURL.equals( desktopURL, true ) ) + { + // Test which other paths were inside this one (as it is by default) + // and for each, test where it should go. + // * Inside destination -> let them be moved with the desktop (but adjust name if necessary) + // * Not inside destination -> move first + // !!! + kdDebug() << "desktopURL=" << desktopURL.url() << endl; + QString urlDesktop = urDesktop->url(); + if ( !urlDesktop.endsWith( "/" )) + urlDesktop+="/"; + + if ( desktopURL.isParentOf( autostartURL ) ) + { + kdDebug() << "Autostart is on the desktop" << endl; + + // Either the Autostart field wasn't changed (-> need to update it) + if ( newAutostartURL.equals( autostartURL, true ) ) + { + // Hack. It could be in a subdir inside desktop. Hmmm... Argl. + urAutostart->setURL( urlDesktop + "Autostart/" ); + kdDebug() << "Autostart is moved with the desktop" << endl; + autostartMoved = true; + } + // or it has been changed (->need to move it from here) + else + { + KURL futureAutostartURL; + futureAutostartURL.setPath( urlDesktop + "Autostart/" ); + if ( newAutostartURL.equals( futureAutostartURL, true ) ) + autostartMoved = true; + else + autostartMoved = moveDir( KURL( KGlobalSettings::autostartPath() ), KURL( urAutostart->url() ), i18n("Autostart") ); + } + } + + if ( moveDir( KURL( KGlobalSettings::desktopPath() ), KURL( urlDesktop ), i18n("Desktop") ) ) + { +// config->writeEntry( "Desktop", urDesktop->url()); + config->writePathEntry( "Desktop", urlDesktop, true, true ); + pathChanged = true; + } + } + + if ( !newAutostartURL.equals( autostartURL, true ) ) + { + if (!autostartMoved) + autostartMoved = moveDir( KURL( KGlobalSettings::autostartPath() ), KURL( urAutostart->url() ), i18n("Autostart") ); + if (autostartMoved) + { +// config->writeEntry( "Autostart", Autostart->url()); + config->writePathEntry( "Autostart", urAutostart->url(), true, true ); + pathChanged = true; + } + } + + if ( !newDocumentURL.equals( documentURL, true ) ) + { + bool pathOk = true; + QString path = urDocument->url(); + if (!QDir(path).exists()) + { + if (!KStandardDirs::makeDir(path)) + { + KMessageBox::sorry(this, KIO::buildErrorString(KIO::ERR_COULD_NOT_MKDIR, path)); + urDocument->setURL(documentURL.path()); + pathOk = false; + } + } + + if (pathOk) + { + config->writePathEntry( "Documents", path, true, true ); + pathChanged = true; + } + } + + config->sync(); + + if (pathChanged) + { + kdDebug() << "DesktopPathConfig::save sending message SettingsChanged" << endl; + KIPC::sendMessageAll(KIPC::SettingsChanged, KApplication::SETTINGS_PATHS); + } + + // Tell kdesktop about the new config file + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + QByteArray data; + + int konq_screen_number = KApplication::desktop()->primaryScreen(); + QCString appname; + if (konq_screen_number == 0) + appname = "kdesktop"; + else + appname.sprintf("kdesktop-screen-%d", konq_screen_number); + kapp->dcopClient()->send( appname, "KDesktopIface", "configure()", data ); +} + +bool DesktopPathConfig::moveDir( const KURL & src, const KURL & dest, const QString & type ) +{ + if (!src.isLocalFile() || !dest.isLocalFile()) + return true; + m_ok = true; + // Ask for confirmation before moving the files + if ( KMessageBox::questionYesNo( this, i18n("The path for '%1' has been changed;\ndo you want the files to be moved from '%2' to '%3'?"). + arg(type).arg(src.path()).arg(dest.path()), i18n("Confirmation Required"),i18n("Move"),KStdGuiItem::cancel() ) + == KMessageBox::Yes ) + { + bool destExists = QFile::exists(dest.path()); + if (destExists) + { + m_copyToDest = dest; + m_copyFromSrc = src; + KIO::ListJob* job = KIO::listDir( src ); + connect( job, SIGNAL( entries( KIO::Job *, const KIO::UDSEntryList& ) ), + this, SLOT( slotEntries( KIO::Job *, const KIO::UDSEntryList& ) ) ); + qApp->enter_loop(); + + if (m_ok) + { + KIO::del( src ); + } + } + else + { + KIO::Job * job = KIO::move( src, dest ); + connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotResult( KIO::Job * ) ) ); + // wait for job + qApp->enter_loop(); + } + } + kdDebug() << "DesktopPathConfig::slotResult returning " << m_ok << endl; + return m_ok; +} + +void DesktopPathConfig::slotEntries( KIO::Job * job, const KIO::UDSEntryList& list) +{ + if (job->error()) + { + job->showErrorDialog(this); + return; + } + + KIO::UDSEntryListConstIterator it = list.begin(); + KIO::UDSEntryListConstIterator end = list.end(); + for (; it != end; ++it) + { + KFileItem file(*it, m_copyFromSrc, true, true); + if (file.url() == m_copyFromSrc || file.url().fileName() == "..") + { + continue; + } + + KIO::Job * moveJob = KIO::move( file.url(), m_copyToDest ); + connect( moveJob, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotResult( KIO::Job * ) ) ); + qApp->enter_loop(); + } + qApp->exit_loop(); +} + +void DesktopPathConfig::slotResult( KIO::Job * job ) +{ + if (job->error()) + { + if ( job->error() != KIO::ERR_DOES_NOT_EXIST ) + m_ok = false; + // If the source doesn't exist, no wonder we couldn't move the dir. + // In that case, trust the user and set the new setting in any case. + + job->showErrorDialog(this); + } + qApp->exit_loop(); +} + +#include "rootopts.moc" diff --git a/kcontrol/konq/rootopts.h b/kcontrol/konq/rootopts.h new file mode 100644 index 000000000..3a7b7ee3f --- /dev/null +++ b/kcontrol/konq/rootopts.h @@ -0,0 +1,64 @@ +// +// +// "Desktop Icons Options" Tab for KDesktop configuration +// +// (c) Martin R. Jones 1996 +// +// Port to KControl, split from "Misc" Tab, Port to KControl2 +// (c) David Faure 1998 +// Desktop menus, paths +// (c) David Faure 2000 + +#ifndef __ROOT_OPTIONS_H +#define __ROOT_OPTIONS_H + + +#include + +#include +#include +#include + +class QCheckBox; +class QComboBox; +class QPushButton; + +class KConfig; +class KListView; +class KURLRequester; + +namespace KIO { class Job; } + +//----------------------------------------------------------------------------- +// The "Path" Tab contains : +// The paths for Desktop, Autostart and Documents + +class DesktopPathConfig : public KCModule +{ + Q_OBJECT +public: + DesktopPathConfig(QWidget *parent = 0L, const char *name = 0L ); + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +private slots: + void slotEntries( KIO::Job * job, const KIO::UDSEntryList& list); + +private: + // Desktop Paths + KURLRequester *urDesktop; + KURLRequester *urAutostart; + KURLRequester *urDocument; + + bool moveDir( const KURL & src, const KURL & dest, const QString & type ); + bool m_ok; + KURL m_copyToDest; // used when the destination directory already exists + KURL m_copyFromSrc; + +private slots: + void slotResult( KIO::Job * job ); +}; + +#endif // __ROOT_OPTIONS_H diff --git a/kcontrol/konq/webappearance.desktop b/kcontrol/konq/webappearance.desktop new file mode 100644 index 000000000..3c2b8c87b --- /dev/null +++ b/kcontrol/konq/webappearance.desktop @@ -0,0 +1,234 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/filemanager/index.html +Icon=kfm +Exec=kcmshell fileappearance + + +X-KDE-Library=konq +X-KDE-FactoryName=appearance +X-KDE-ParentApp=kcontrol + +Name=Appearance +Name[af]=Voorkoms +Name[ar]=المظهر +Name[az]=Görünüş +Name[be]=Вонкавы выгляд +Name[bg]=Системен панел +Name[bn]=চেহারা +Name[br]=Neuziadur +Name[bs]=Izgled +Name[ca]=Aparença +Name[cs]=Vzhled +Name[csb]=Wëzdrzatk +Name[cy]=Golwg +Name[da]=Udseende +Name[de]=Erscheinungsbild +Name[el]=Εμφάνιση +Name[eo]=Aspekto +Name[es]=Aspecto +Name[et]=Välimus +Name[eu]=Itxura +Name[fa]=ظاهر +Name[fi]=Ulkonäkö +Name[fr]=Apparence +Name[fy]=Uterlik +Name[ga]=Cuma +Name[gl]=Apariencia +Name[he]=מראה +Name[hi]=शक्ल-सूरत +Name[hr]=Izgled +Name[hu]=Megjelenés +Name[id]=Penampilan +Name[is]=Útlit +Name[it]=Aspetto +Name[ja]=外観 +Name[ka]=გარეგნობა +Name[kk]=Көрініс +Name[km]=រូបរាង +Name[ko]=모양 +Name[lo]=ການປະກົດ +Name[lt]=Išvaizda +Name[lv]=Izskats +Name[mk]=Изглед +Name[mn]=Харагдалт +Name[ms]=Rupa +Name[mt]=Apparenza +Name[nb]=Utseende +Name[nds]=Utsehn +Name[ne]=दृश्य +Name[nl]=Uiterlijk +Name[nn]=Utsjånad +Name[nso]=Ponagalo +Name[pa]=ਦਿੱਖ +Name[pl]=Wygląd +Name[pt]=Aparência +Name[pt_BR]=Aparência +Name[ro]=Aspect +Name[ru]=Внешний вид +Name[rw]=Imigaragarire +Name[se]=Fárda +Name[sk]=Vzhľad +Name[sl]=Videz +Name[sr]=Изглед +Name[sr@Latn]=Izgled +Name[sv]=Utseende +Name[ta]=தோற்றம் +Name[tg]=Намуди зоҳирӣ +Name[th]=ลักษณะที่ปรากฎ +Name[tr]=Görünüm +Name[tt]=Küreneş +Name[uk]=Вигляд +Name[uz]=Tashqi koʻrinish +Name[uz@cyrillic]=Ташқи кўриниш +Name[ven]=Mbonalelo +Name[vi]=Diện mạo +Name[wa]=Rivnance +Name[xh]=Inkangeleko +Name[zh_CN]=外观 +Name[zh_TW]=外觀 +Name[zu]=Ukubukeka + +Comment=You can configure how Konqueror looks as a file manager here +Comment[af]=Jy kan hier opstel hoe Konqueror as 'n lêer bestuurder lyk +Comment[ar]=يمكنك هنا إعداد كيفية ظهور Konqueror كمسيير للملفات +Comment[az]=Konqueror-un fayl idarəçisi olaraq nəcə görünəcəyini buradan quraşdırın +Comment[be]=Тут вы можаце змяніць выгляд Konqueror для кіравання файламі +Comment[bg]=Настройване външния вид на файловия браузър +Comment[bn]=ফাইল ম্যানেজার হিসাবে কনকরার-এর চেহারা কেমন হবে তা এখানে কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ penaos Konqueror az zo gwellet evel a merour restroù +Comment[bs]=Ovdje možete podesiti kako izgleda Konqueror kao upravitelj datotekama +Comment[ca]=Aquí podeu configurar com es mostrarà el Konqueror com a gestor de fitxers +Comment[cs]=Zde je možné nastavit vzhled správce souborů +Comment[csb]=Kònfigùracëjô wëzdrzatkù Konquerora jakno menadżera lopków +Comment[cy]=Ffurfweddu golwg Konqueror fel rheolydd ffeiliau +Comment[da]=Her kan du indstille hvordan Konqueror ser ud som filhåndtering +Comment[de]=Hier können Sie das Erscheinungsbild von Konqueror als Dateimanager festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε το πως θα εμφανίζεται το Konqueror ως διαχειριστής αρχείων +Comment[eo]=Ĉi tie vi povas agordi kiel konkeranto aspektas kiel dosieradministrilo +Comment[es]=Aquí puede configurar el aspecto de Konqueror como gestor de archivos +Comment[et]=Konquerori failihalduri välimuse seadistamine +Comment[eu]=Hemen Konquerorren itxura konfigura dezakezu fitxategi kudeatzaile gisa ari denean +Comment[fa]=می‌توانید پیکربندی کنید، که اینجا Konqueror به عنوان مدیر پرونده چگونه به نظر می‌رسد. +Comment[fi]=Tässä kohdassa voit määritellä Konquerorin tiedostonhallinnan ulkonäön asetuksia +Comment[fr]=Apparence de Konqueror en tant que gestionnaire de fichiers +Comment[fy]=Hjir kinne jo it uterlik fan Konqueror as triembehearder ynstelle +Comment[gl]=Pode configurar aqui o xeito en que se mostra Konqueror como xestor de ficheiros +Comment[he]=שינוי הדרך שבה Konqueror נראה בתור מנהל קבצים +Comment[hi]=आप कॉन्फ़िगर कर सकते हैं कि कॉन्करर यहाँ फ़ाइल प्रबंधक जैसे कैसे दिखे +Comment[hr]=Konfiguriranje izgleda Konqueror upravljača datoteka +Comment[hu]=Itt lehet beállítani a Konqueror fájlkezelő jellemzőit +Comment[is]=Hér getur þú stillt hvernig Konqueror lítur út sem skráastjóri +Comment[it]=Configura l'aspetto di Konqueror come gestore dei file +Comment[ja]=Konqueror ファイルマネージャの外観を設定 +Comment[ka]=Konqueror-ის, როგორც ფაილური მენეჯერის, იერის კონფიგურირება +Comment[kk]=Konqueror файл менеджер ретінде қолданғандағы көрінісі +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនា​សម្ព័ន្ធ របៀប​ដែល Konqueror មើល​ទៅ​ដូចជា​កម្មវិធី​គ្រប់គ្រង​ឯកសារ +Comment[ko]=Konqueror의 파일 관리자로서의 모양 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງ ຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite nustatyti, kaip atrodo Konqueror-bylų tvarkyklė +Comment[lv]=Šeit jūs varat konfigurēt Iekarotāja izskatu failu pārlūkošanas laikā +Comment[mk]=Конфигурирајте го изгледот на Konqueror како менаџер на датотеки +Comment[mn]=Энд та конкюрорын харагдалтыг файл удирдагчийн хувьд тогтоох +Comment[ms]=Anda boleh konfigur bagaiman rupa Konqueror sebagai pengurus fail di sini +Comment[mt]=Hawn tista' tikkonfigura kif jidher Konqueror bħala manager tal-fajls +Comment[nb]=Tilpass hvordan filbehandleren Konqueror skal se ut +Comment[nds]=Hier kannst Du instellen, wodennig Konqueror as Dateipleger utsehn schall +Comment[ne]=तपाईँले यहाँ कन्क्वेररले फाइल प्रबन्धकलाई हेर्ने तरिका कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=Hier kunt u het uiterlijk van Konqueror als bestandsbeheerder instellen +Comment[nn]=Her kan du velja korleis filhandsamaren Konqueror skal sjå ut +Comment[nso]=O swanetse go beakanya ka mokgwa wo Konqueror e bogegago bjale ka molaodi wa faele mo +Comment[pa]=ਤੁਸੀਂ ਇੱਥੇ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕੋਨਕਿਉਰਰ ਇੱਕ ਫਾਇਲ ਮੈਨੇਜਰ ਦੇ ਰੂਪ ਵਿੱਚ ਕਿਵੇਂ ਦਿਖਾਈ ਦੇਵੇਗਾ। +Comment[pl]=Konfiguracja wyglądu Konquerora jako menedżera plików +Comment[pt]=O utilizador pode configurar aqui a forma como o Konqueror age, como um gestor de ficheiros +Comment[pt_BR]=Você pode configurar aqui como o Konqueror ficará como gerenciador de arquivos +Comment[ro]=Configurează aspectul Konqueror ca manager de fișiere +Comment[ru]=Настройка внешнего вида Konqueror как менеджера файлов +Comment[rw]=Ushobora kugena ukuntu Konqueror igaragara nka mugengadosiye hano +Comment[se]=Dás heivehat Konquerora fárdda fiilagieđahallin +Comment[sk]=Nastavenie vzhľadu Konquerora ako správcu súborov +Comment[sl]=Nastavitve izgleda Konquerorja kot upravitelja datotek +Comment[sr]=Овде можете подесити како ће Konqueror као менаџер фајлова да изгледа +Comment[sr@Latn]=Ovde možete podesiti kako će Konqueror kao menadžer fajlova da izgleda +Comment[sv]=Anpassa hur Konqueror ser ut som filhanterare +Comment[ta]=கான்கொரர் கோப்பு மேலாளராக எப்படி தெரிகிறது என்பதை இங்கே வடிவமைக்க முடியும். +Comment[tg]= Шумо метавонед зоҳири Konqueror-ро ба унвони мудири файл дар инҷо танзим кунед. +Comment[th]=คุณสามารถปรับแต่งคอนเควอร์เรอร์ในการเป็นเครื่องมือจัดการแฟ้มได้ที่นี่ +Comment[tr]=Konqueror'un dosya yöneticisi olarak nasıl görüneceğini yapılandırın +Comment[tt]=Birem idäräçe bularaq eşläwçe Konqueror'nıñ küreneşen caylaw +Comment[uk]=Тут можна налаштувати вигляд Konqeror, як менеджера сеансу +Comment[uz]=Konqueror fayl boshqaruvchisi sifatida qanday koʻrinishini moslash +Comment[uz@cyrillic]=Konqueror файл бошқарувчиси сифатида қандай кўринишини мослаш +Comment[ven]=Ninga dzudzanya uri na Konqueror i sedzea sa mulanguli wa faela hafhano +Comment[vi]=Bạn có thể cấu hình ngoại hình của Konqueror trông như nào khi quản lý tập tin ở đây +Comment[wa]=Chal vos ploz apontyî li rivnance di Konqueror cwand i fwait l' manaedjeu di fitchîs +Comment[xh]=Ungaqwalasela indlela ebonakala ngoyo i Konqueror njengomphathi wefayile +Comment[zh_CN]=在这里配置 Konqueror 的文件管理器外观 +Comment[zh_TW]=您可以在這裡設定 Konqueror 做為檔案管理程式的外觀 +Comment[zu]=Ungahlanganisela ukuthi i-konqueror ibukeke kanjani njengemenenja yamafayela lapha +Keywords=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour +Keywords[ar]=konqueror,مسيير الملفات,word wrap,wrap,تسطير الأحرف,الشاشة,حجم الملف,البايتات,المحرف,اللون,العرض +Keywords[az]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,fayl,fayl idarəçisi,rəng,yazı növü,altı cızıqlı +Keywords[be]=Кіраўнік файлаў,Перанос словаў,Перанос,Падкрэсліванне,Падкрэслены,Паказваць,Памер,Байты,Шрыфт,Колер,konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour +Keywords[bg]=файлове, файл, управление, браузър, мениджър, konqueror, filemanager,word wrap, wrap, underline, display, filesize, bytes, font, color, colour +Keywords[ca]=konqueror,gestor de fitxers, ajust de línia,subratllar,mostrar,mida del fitxer,octets,lletra,color,colorit +Keywords[cs]=Konqueror,Správce souborů,Zalamování,Podtrhávání,Zobrazení,Velikost souboru,Bajty,Písmo,Barva +Keywords[csb]=konqueror,menedżer lopków,zawijanié wierztów,zawijanié,podsztëchiwanié,wëzdrzatk, miara lopkù,bajtë,fòntë,farwa +Keywords[cy]=konqueror,rheolydd ffeiliau,lapio geiriau,lapio,tanlinellu,dangos,maint ffeil,beitiau,ffont,lliw +Keywords[da]=konqueror,filhåndtering,ordombrydning,ombrydning,understreg,vis,filstørrelse,byte,skrifttype,farve +Keywords[de]=Konqueror,Dateimanager,Zeilenfall,Textumbruch,Unterstreichen,Darstellung,Dateigröße,Schrift,Farbe,Byte +Keywords[el]=konqueror,διαχειριστής αρχείων,αναδίπλωση λέξεων,αναδίπλωση,υπογράμμιση,προβολή,μέγεθος αρχείου,bytes,γραμματοσειρά,χρώμα,χρώμα +Keywords[eo]=konkeranto,dosieradministrilo,vidigi,vidigo,dosiera grandeco,bajto,bitoko,okbitaro,tiparo,koloro +Keywords[es]=konqueror,gestor de archivos, ajuste de línea,subrayar,mostrar,tamaño de archivo,bytes,tipo de letra,color +Keywords[et]=konqueror,failihaldur,sõnade murdmine,murdmine,allajoonimine,ekraan,faili suurus,baidid,font,värv +Keywords[eu]=konqueror,fitxategi kudeatzailea,itzulbiratu, egokitu,azpimarratu,pantaila,fitxategi tamaina,byteak,letra-tipoa,kolorea +Keywords[fa]=konqueror، مدیر پرونده، سطربندی واژه، سطربندی، خط زیر، نمایش، اندازه پرونده، بایتها، قلم، رنگ، رنگ +Keywords[fi]=konqueror,tiedostonhallinta,sanankatkaisu,alleviivaus,tiedostokoko,tavuja, kirjasin,väri +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,retour à la ligne,soulignement,affichage,taille des fichiers,octets,police,couleur +Keywords[fy]=konqueror,filemanager,triembehear,word wrap,rigelôfbreking,ûnderstreakje,display,werjefte,filesize,triemgrutte,bytes,fonts,lettertypen,kleur,color +Keywords[ga]=konqueror,bainisteoir comhad,timfhilleadh focal,timfhilleadh,líne faoi,scáileán,méid comhaid,bearta,cló,clófhoireann,dath +Keywords[gl]=konqueror,xestor de ficheiros,axuste de palabras,axuste,subliñar,mostrar,tamaño de ficheiro,bites,fonte,cor +Keywords[he]=konqueror,מנהל קבצים,גלישת שורות,קו תחתון,תצוגה,גודל קובץ,בתים,גופן,צבע, konqueror,filemanager,word wrap, wrap,underline,display,filesize,bytes,font,color,colour +Keywords[hi]=कॉन्करर,फ़ाइलप्रबंधक,वर्ड रैप,रैप,रेखांकित,प्रकटन,फ़ाइलआकार,बाइट्स,फ़ॉन्ट,रंग +Keywords[hr]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,upravljač datoteka,omatanje riječi,omatanje,podvlačenje,prikaz,veličina datoteke,bajtovi,font,boja,boje +Keywords[hu]=konqueror,fájlkezelő,szótördelés,tördelés,aláhúzás,képernyő,fájlméret,bájt,betűtípus,szín,színek +Keywords[is]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour, litir,línuskipting,skjár,skjáborð,bæt,litur +Keywords[it]=konqueror,filemanager,a capo,sottolineatura,schermo,dimensione file,byte,caratteri,colori +Keywords[ja]=konqueror,ファイルマネージャ,ワードラップ,行の折り返し,下線,表示,ファイルサイズ, バイト,フォント,色,カラー +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,រុំ​ពាក្យ,រុំ,គូសបន្ទាត់​ក្រោម,បង្ហាញ,ទំហំ​ឯកសារ,បៃ,ពុម្ពអក្សរ,ពណ៌ +Keywords[lt]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,bylų tvarkyklė, žodžių perkėlimas, perkėlimas, pabraukimas, ekranas, bylos dydis, baitai, šriftas,spalva +Keywords[lv]=iekarotājs,failumenedžeris,vārdu apciršana,apciršana,pasvītrojums,ekrāns,failu izmērs,baiti,fonti,krāsas +Keywords[mk]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,менаџер на датотеки,прекршување на зборови,прекршување,подвлекување,екран,големина на датотека,бајти,фонт,боја +Keywords[mn]=Конкюрор,Файл удирдагч,Текст таслах,Доогуур зураас, Дүрслэл,Файлын хэмжээ,Бичиг,Өнгө,Байт +Keywords[mt]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,manager tal-fajls,daqs,kulur,kuluri +Keywords[nb]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,filbehandler,tekstbryting,understreket,skjerm,filstørrelse,byter,fonter,farger +Keywords[nds]=Konqueror,Dateipleger,word wrap,ümbreken,ünnerstreken,Dorstellen,Dateigrött,Bytes,Schriftoort, Klöör, Klören +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, शब्द बेर्नुहोस्, बेर्नुहोस्, कच, प्रदर्शन गर्नुहोस्, फाइल साइज, बाइट्स, फन्ट, रङ, रङ +Keywords[nl]=konqueror,filemanager,bestandsbeheer,word wrap,regelafbreking,onderstrepen,display,weergave,filesize,bestandsgrootte,bytes,fonts,lettertypen,kleur,color +Keywords[nn]=Konqueror,filhandsamar,tekstbryting,linjebryting,bryting,understrek,vis,filstorleik,byte,skrift,farge +Keywords[nso]=konqueror,molaodi wa faele,tatetso ya faele,tatetso ya mantsu,tatetso,thalelela,pontsho,bogolo bja faele,bytes,fonto,mmala,mmala +Keywords[pa]=ਕੋਨਕਿਉਰਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਸ਼ਬਦ ਸਮੇਟੋ,ਸਮੇਟੋ,ਹੇਠਾਂ ਰੇਖਾ,ਫਾਇਲ ਅਕਾਰ,ਬਾਈਟ,ਫੋਂਟ,ਰੰਗ ਝਲਕ +Keywords[pl]=konqueror,menedżer plików,zawijanie wierszy,zawijanie,podkreślenie,wygląd, rozmiar pliku,bajty,czcionki,kolor +Keywords[pt]=konqueror,gestor de ficheiros,mudança de linha,mudança,sublinhado,ecrã,tamanho do ficheiro,bytes,tipo de letra,cor +Keywords[pt_BR]=konqueror,gerenciador de arquivos,quebra de linha, sublinhado, display,tamanho de arquivo,bytes,fonte,cor,cor +Keywords[ro]=konqueror,manager de fișiere,limitare cuvînt,limitare,subliniere,afișare,mărime fișier,octeți,font,culoare +Keywords[rw]= Konqueror,mugengadosiye,ifunika ry'ijambo,gufunika,gucaho umurongo,Kugaragaza,inganoidosiye,bayite,imyandikire,ibara,ibara +Keywords[se]=Konqueror,fiilagieđahalli,linnjádoaddjin,doaddjin,vuolláisárgu,čájet,fiilasturrodat,stávvalat,fonta,ivdni +Keywords[sk]=konqueror,správa súborov,zalamovanie slov,podčiarknutie,zobrazenie,veľkosť súborov,bajty,písmo,farba +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,prelom vrstic,prelom,podčrta,prikaz,velikost datoteke,bajt,pisava,barva +Keywords[sr]=konqueror,filemanager,преламање текста,преламање,подвлачење,приказ,величина фајла,бајтови,фонт,боја +Keywords[sr@Latn]=konqueror,filemanager,prelamanje teksta,prelamanje,podvlačenje,prikaz,veličina fajla,bajtovi,font,boja +Keywords[sv]=konqueror,filhanterare,radbrytning,understreck,visa,filstorlek,byte,teckensnitt,färg +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,வார்த்தை மடக்கு, மடக்கு,அடிகோடிடு,காட்டு,கோப்பு அளவு,பைட்டுகள்,எழுத்துரு,வண்ணம்,வண்ணம் +Keywords[th]=คอนเควอร์เรอร์,จัดการแฟ้ม,ตัดคำ,ตัด,ขีดเส้นใต้,แสดงผล,ขนาดแฟ้ม,ไบต์,แบบอักษร,สี +Keywords[tr]=konqueror,dosya yöneticisi,görünüm,dosya boyu,bayt,yazıtipi,renk +Keywords[uk]=konqueror,менеджер файлів, переніс файлів,переніс,підкреслення,дисплей, розмір файлів,байти,шрифт,колір +Keywords[uz]=konqueror,fayl boshqaruvchisi,word wrap,wrap,tagini chizish,koʻrsatish,fayning hajmi,baytlar,shrift,rang +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,word wrap,wrap,тагини чизиш,кўрсатиш,файнинг ҳажми,байтлар,шрифт,ранг +Keywords[ven]=konqueror,mulanguli wa faela,putela ha fhungo,putela,talela,sumbedza,saizi ya faela, bytes,fontu,muvhala,muvhala +Keywords[vi]=konqueror,trình quản lý tập tin,bao quanh văn bản,bao quanh,gạch chân,màn hình,cỡ tập tin,số byte,phông chữ,mầu,mầu sắc +Keywords[wa]=konqueror,manaedjeu di fitchî,sorlignî,håyner,håynaedje,grandeu d' fitchî,bytes,bites,fonte,coleur +Keywords[xh]=konqueror,umphathi wefayile,songela amagama,songela, yenza umgca ezantsi,bonisa, ubngakanani befayile,bytes,umgca,umbala,umbala +Keywords[zh_CN]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,文件管理器,自动换行,下划线,显示,文件大小,字节,字体,颜色 +Keywords[zh_TW]=konqueror,filemanager,word wrap,wrap,underline,display,filesize,bytes,font,color,colour,征服家,檔案管理程式,文字換行,換行,底線,顯示,檔案大小,位元組,字型,顏色 +Keywords[zu]=konqueror,imenenja yamafayela,ukugoqwa kwamafayela, ukugoqwa,dwebela,veza,usayizi ama-byte osayizi wefayela,uhlobo lwamagama, umbala,umbala diff --git a/kcontrol/konq/webbehavior.desktop b/kcontrol/konq/webbehavior.desktop new file mode 100644 index 000000000..3dfe93b69 --- /dev/null +++ b/kcontrol/konq/webbehavior.desktop @@ -0,0 +1,234 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/filemanager/index.html +Icon=kfm +Exec=kcmshell filebehavior + + +X-KDE-Library=konq +X-KDE-FactoryName=behavior +X-KDE-ParentApp=kcontrol + +Name=Behavior +Name[af]=Gedrag +Name[ar]=السلوك +Name[az]=Davranış +Name[be]=Паводзіны +Name[bg]=Поведение +Name[bn]=আচরণ +Name[br]=Emzalc'h +Name[bs]=Ponašanje +Name[ca]=Comportament +Name[cs]=Chování +Name[csb]=Zachòwanié +Name[cy]=Ymddygiad +Name[da]=Opførsel +Name[de]=Verhalten +Name[el]=Συμπεριφορά +Name[en_GB]=Behaviour +Name[eo]=Konduto +Name[es]=Comportamiento +Name[et]=Käitumine +Name[eu]=Portaera +Name[fa]=رفتار +Name[fi]=Käyttäytyminen +Name[fr]=Comportement +Name[fy]=Gedrach +Name[ga]=Oibriú +Name[gl]=Comportamento +Name[he]=פעולה +Name[hi]=बर्ताव +Name[hr]=Ponašanje +Name[hu]=Működés +Name[is]=Hegðun +Name[it]=Comportamento +Name[ja]=挙動 +Name[ka]=ქცევა +Name[kk]=Қасиеттері +Name[km]=ឥរិយាបថ +Name[ko]=행동 +Name[lo]=ພຶດຕິກຳຂອງຫນ້າຕ່າງ +Name[lt]=Elgsena +Name[lv]=Izturēšanās +Name[mk]=Однесување +Name[mn]=Байдал +Name[ms]=Peri laku +Name[mt]=Imġieba +Name[nb]=Oppførsel +Name[nds]=Bedregen +Name[ne]=व्यवहार +Name[nl]=Gedrag +Name[nn]=Åtferd +Name[nso]=Maitshwaro +Name[pa]=ਵਿਹਾਰ +Name[pl]=Zachowanie +Name[pt]=Comportamento +Name[pt_BR]=Comportamento +Name[ro]=Comportament +Name[ru]=Поведение +Name[rw]=Imyitwarire +Name[se]=Láhtten +Name[sk]=Správanie +Name[sl]=Obnašanje +Name[sr]=Понашање +Name[sr@Latn]=Ponašanje +Name[ss]=Kutiphatsa +Name[sv]=Uppträdande +Name[ta]= நடத்தை +Name[te]=ప్రవర్తన +Name[tg]=Рафтор +Name[th]=พฤติกรรม +Name[tr]=Davranış +Name[tt]=Eşlise eş +Name[uk]=Поведінка +Name[uz]=Xususiyatlar +Name[uz@cyrillic]=Хусусиятлар +Name[ven]=Maitele +Name[vi]=Cách hoạt động +Name[wa]=Dujhance +Name[xh]=Ukuziphatha +Name[zh_CN]=行为 +Name[zh_TW]=行為 +Name[zu]=Ukuziphatha + +Comment=You can configure how Konqueror behaves as a file manager here +Comment[af]=Jy kan konfigureer hoe Konqueror gedrag as 'n lêer bestuurder hier +Comment[ar]=يمكنك هنا إعداد سلوك Konqueror كمسيير للملفات +Comment[az]=Konqueror-un fayl idarəçisi olaraq nəcə davranacağını buradan quraşdırın +Comment[be]=Тут вы можаце змяніць паводзіны Konqueror для кіравання файламі +Comment[bg]=Настройване поведението на файловия браузър +Comment[bn]=ফাইল ম্যানেজার হিসাবে কনকরার-এর আচরণ কেমন হবে তা এখানে কনফিগার করতে পারেন +Comment[br]=Amañ e c'hellit kefluniañ penaos Konqueror en em zalc'h evel ur merour restroù +Comment[bs]=Ovdje možete podesiti kako se Konqueror ponaša kao upravitelj datotekama +Comment[ca]=Aquí podeu configurar com es comportarà el Konqueror com a gestor de fitxers +Comment[cs]=Zde je možné nastavit správce chování Konqueroru jako správce souborů +Comment[csb]=Kònfigùracëjô zachòwaniô Konquerora jakno menadżera lopków +Comment[cy]=Ffurfweddu ymddygiad Konqueror fel rheolydd ffeiliau +Comment[da]=Her kan du indstille hvordan Konqueror opfører sig som filhåndtering +Comment[de]=Hier können Sie das Verhalten von Konqueror als Dateimanager festlegen +Comment[el]=Εδώ μπορείτε να ρυθμίσετε το πως θα συμπεριφέρεται το Konqueror ως διαχειριστής αρχείων +Comment[eo]=Ĉi tie vi povas agordi kiel konkeranto kondutas kiel dosieradministrilo +Comment[es]=Aquí puede configurar el comportamiento de Konqueror como gestor de archivos +Comment[et]=Konquerori failihalduri käitumise seadistamine +Comment[eu]=Hemen Konquerorren portaera konfigura dezakezu fitxategi kudeatzaile gisa ari denean +Comment[fa]=می‌توانید در اینجا، چگونگی رفتار Konqueror را به عنوان مدیر پرونده پیکربندی کنید +Comment[fi]=Tässä kohdassa voit määritellä Konquerorin tiedostonhallinnan asetuksia +Comment[fr]=Comportement de Konqueror en tant que gestionnaire de fichiers +Comment[fy]=Hjir kinne jo it gedrach fan Konqueror as triembehearder ynstelle. +Comment[gl]=Pode configurar aqui o modo en que se comportará Konqueror como xestor de ficheiros +Comment[he]=שינוי הדרך שבה Konqueror פועל בתור מנהל קבצים +Comment[hi]=आप कॉन्फ़िगर कर सकते हैं कि कॉन्करर यहाँ फ़ाइल प्रबंधक की तरह कैसे बर्ताव करे +Comment[hr]=Konfiguriranje načina na koji se Konqueror ponaša kao upravljač datoteka +Comment[hu]=Itt lehet beállítani a Konqueror fájlkezelő működési jellemzőit +Comment[is]=Hér getur þú stillt hvernig Konqueror hegðar sér sem skráastjóri +Comment[it]=Configura il comportamento di Konqueror come gestore dei file +Comment[ja]=Konqueror ファイルマネージャの挙動を設定 +Comment[ka]=Konqueror-ის, როგორც ფაილური მენეჯერის, ქცევის კონფიგურირება +Comment[kk]=Konqueror файл менеджер ретінде қолданғандағы қасиеттерін баптау +Comment[km]=នៅ​ទីនេះ អ្នក​អាច​កំណត់​រចនាសម្ព័ន្ធ របៀប​ដែល Konqueror ដើរតួ​ជា​កម្មវិធី​គ្រប់គ្រង​ឯកសារ +Comment[ko]=Konqueror의 파일 관리자로서의 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງ ຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite nustatyti, kaip elgiasi Konqueror-bylų tvarkyklė +Comment[lv]=Šeit jūs varat konfigurēt Iekarotāja izturēšanos failu pārlūkošanas laikā +Comment[mk]=Конфигурирајте го однесувањето на Konqueror како менаџер на датотеки +Comment[mn]=Энд та конкюрорын байдлыг файл удирдагчийн хувьд тогтоож +Comment[ms]=Anda boleh konfigur bagaimana Konqueror berkelakuan sebagai pengurus fail di sini +Comment[mt]=Hawn tista' tissettja l-imġieba ta' Konqueror bħala manager tal-fajls +Comment[nb]=Tilpass hvordan Konqueror opptrer som filbehandler +Comment[nds]=Hier kannst Du instellen, wodennig sik Konqueror as Dateipleger bedregen schall +Comment[ne]=तपाईँले यहाँ कन्क्वेररले फाइल प्रबन्धकलाई गर्ने व्यवहार कन्फिगर गर्न सक्नुहुन्छ +Comment[nl]=Hier kunt u het gedrag van Konqueror als bestandsbeheerder instellen. +Comment[nn]=Her kan du velja korleis filhandsamaren Konqueror skal oppføra seg +Comment[nso]=Oka beakanya ka fao Konqueror e phelago bjalo ka molaodi wa faele mo +Comment[pa]=ਤੁਸੀਂ ਇੱਥੇ ਸੰਰਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕੋਨਕਿਉਰਰ ਇੱਕ ਫਾਇਲ ਮੈਨੇਜਰ ਦੇ ਰੂਪ ਵਿੱਚ ਕਿਵੇਂ ਵਿਵਹਾਰ ਦੇਵੇਗਾ। +Comment[pl]=Konfiguracja zachowania Konquerora jako menedżera plików +Comment[pt]=O utilizador pode configurar aqui como é que o Konqueror se comporta como um gestor de ficheiros +Comment[pt_BR]=Você pode configurar como o Konqueror se comporta como gerenciador de arquivos aqui +Comment[ro]=Configurează comportamentul Konqueror ca manager de fișiere +Comment[ru]=Настройка поведения Konqueror как менеджера файлов +Comment[rw]=Ushobora kugena ukuntu Konqueror yitwara nka mugengadosiye hano +Comment[se]=Dás heivehat mo Konqueror fiilagieđahallin galgá láhttet +Comment[sk]=Nastavenie Konquerora ako správcu súborov +Comment[sl]=Nastavitve obnašanja Konquerorja kot upravitelja datotek +Comment[sr]=Овде можете подесити како ће се Konqueror као менаџер фајлова понашати +Comment[sr@Latn]=Ovde možete podesiti kako će se Konqueror kao menadžer fajlova ponašati +Comment[sv]=Anpassa hur Konqueror beter sig som filhanterare +Comment[ta]=கான்கொரர் கோப்பு மேலாளராக எப்படி இயங்குகிறது என்பதை இங்கே வடிவமைக்க முடியும். +Comment[tg]=Шумо метавонед рафтори Konqueror-ро ба унвони мудири файл дар инҷо таъин кунед. +Comment[th]=คุณสามารถปรับแต่งพฤติกรรมของคอนเควอร์เรอร์ในการเป็นเครื่องมือจัดการแฟ้มได้ที่นี่ +Comment[tr]=Konqueror'un dosya yöneticisi olarak nasıl davranacağını buradan yapılandırabilirsiniz +Comment[tt]=Birem idäräçe bularaq eşläwçe Konqueror'nıñ çağılışın caylaw +Comment[uk]=Тут можна налаштувати поведінку Konqueror, як менеджера сеансу +Comment[uz]=Konqueror fayl boshqaruvchisi sifatida xususiyatini moslash +Comment[uz@cyrillic]=Konqueror файл бошқарувчиси сифатида хусусиятини мослаш +Comment[ven]=Ni nga dzudzanya uri Konqueror inga tshilisa hani sa mulanguli wa faela hafhano +Comment[vi]=Bạn có thể cấu hình cách Konqueror hoạt động như một trình quản lý tập tin ở đây +Comment[wa]=Chal vos ploz apontyî li dujhance di Konqueror cwand i fwait l' manaedjeu di fitchîs +Comment[xh]=Ungaqwalasela ukuziphatha kwe Konqueror njengomphathi wefayile apha +Comment[zh_CN]=在这里配置 Konqueror 的文件管理器行为 +Comment[zh_TW]=您可以在這裡設定 Konqueror 做為檔案管理程式的行為 +Comment[zu]=Ungahlanganisela ukuthi i-Konqueror iziphathe kanjani njengemenenja yamafayela lapha +Keywords=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL, +Keywords[ar]=konqueror,مسيير الملفات,kfm,التلميحات و النصائح,تلميحات الملف,نافذة منعزلة,spawn windows,السلوك,إستعمال الذاكرة,عنوان المورد النظامي للمنزل +Keywords[be]=Кіраўнік файлаў,Карысныя парады,Падказкі,Падказкі файлаў,Асобнае акно,Паводзіны,Выкарыстанне памяці,Хатняя тэчка,konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL, +Keywords[bg]=работен, плот, поведение, място, браузър, прозорец, konqueror, filemanager, kfm, tips, file tips, separate window, spawn windows, behavior, behaviour, memory usage, Home URL, +Keywords[ca]=konqueror,gestor de fitxers,kfm,consells,consells del fitxer,finestra separada,expandir finestres,comportament,us de la memòria, URL d'inici, +Keywords[cs]=Konqueror,Správce souborů,Kfm,Tipy,Souborové tipy,Rozdílné okno, Chování,Spotřeba paměti,Domovské URL,Domovský adresář +Keywords[csb]=konqueror,menedżer lopków,kfm,wskôzë,wëdowédzô ò lopkù,apartné òkno, wiele òknów,zachòwanié,brëkòwanié pamiãcë,domôcy URL +Keywords[cy]=konqueror,rheolydd ffeiliau,kfm,cyngor,cyngor ffeiliau,ffenestr gwahan,taenu ffenestri,ymddygiad,defnydd cof,URL Cartref +Keywords[da]=konqueror,filhåndtering,kfm,tip,filtip,separat vindue,flere vinduer,opførsel,hukommelsesforbrug,Hjemme-URL, +Keywords[de]=Konqueror,Dateimanager,kfm,Tipps,Fenster,Verhalten,Persönlicher Ordner,Speicherverwendung +Keywords[el]=konqueror,διαχειριστής αρχείων,kfm,πληροφορίες,πληροφορίες αρχείων,ξεχωριστό παράθυρο,πολλαπλασιασμός παραθύρων,συμπεριφορά,συμπεριφορά,χρήση μνήμης,URL σπιτιού, +Keywords[eo]=dosieradministrilo,aparta fenestro,uzata memoro +Keywords[es]=konqueror,gestor de archivos,kfm,sugerencias,ventana separada, extender ventanas,comportamiento,uso de memoria, URl de inicio, +Keywords[et]=konqueror,failihaldur,kfm,vihjed,failide vihjed,eraldi aken,käitumine,mälukasutus,kodukataloog +Keywords[eu]=konqueror,fitxategi kudeatzailea,kfm,iradokizunak,fitxategi iradokizunak, aparteko leihoa,leihoak hedatu,portaera,memoriaren erabilera,Hasierako URLa, +Keywords[fa]=konqueror، مدیر پرونده، kfm، نکات، نکات پرونده، پنجرۀ مجزا، پنجره‌های تکثیرشده، رفتار، رفتار، کاربرد حافظه، نشانی وب آغازه، +Keywords[fi]=konqueror,tiedostonhallinta,kfm,vinkit,tiedostovinkit,erillinen ikkuna,käytös,muistinkäyttö,Koti-URL +Keywords[fr]=konqueror,gestionnaire de fichiers,explorateur,kfm,astuces,fenêtre séparée,rafraîchissement des fenêtres,comportement,utilisation de la mémoire,Home URL,URL de démarrage +Keywords[fy]=konqueror,filemanager,kfm,tips,knopinfo,arktippen,gedrach,ûnthâldgebrûk,thús,persoanlike map, +Keywords[gl]=konqueror,xestor de ficheiros,kfm,consellos de ficheiro,fiestra separada,fiestras emerxentes,comportamento,uso da memoria,URL Persoal, +Keywords[he]=konqueror,מנהל קבצים,kfm,עצות,פירוט לקבצים,חלון נפרד,שימוש בזיכרון,פעולה,כתובת בית, konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL +Keywords[hi]=कॉन्करर,फ़ाइलमैनेजर,केएफएम,संकेत,फ़ाइल संकेत,अलग विंडो,विंडो बनाएँ,बर्ताव,आचरण,मेमोरी उपयोग,मुख यूआरएल, +Keywords[hr]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,upravljač datoteka,savjeti datoteka,posebni prozor,pojavljujući prozor,ponašanje,upotreba memorije,URL početne stranice +Keywords[hu]=konqueror,fájlkezelő,kfm,tippek,fájltippek,külön ablak,ablakgenerálás,viselkedés,memóriahasználat,saját URL, +Keywords[is]=konqueror,skráastjóri,kfm,ráð,skráarráð,aðskilin gluggi,margfaldast, gluggar,hegðun,minnisnotkun,heimaslóð, +Keywords[it]=konqueror,filemanager,kfm,trucchi,file,separa finestre,comportamento,memoria utilizzata,home +Keywords[ja]=konqueror,ファイルマネージャ,kfm,ツールチップ,個別ウィンドウ, ポップウィンドウ,挙動,メモリ使用量,ホームURL +Keywords[km]=konqueror,កម្មវិធី​គ្រប់គ្រង​ឯកសារ,kfm,ព័ត៌មាន​ជំនួស,ព័ត៌មាន​ជំនួយ​ឯកសារ,ខណ្ឌចែក​បង្អួច,បង្កើត​បង្អួច,ឥរិយាបថ,ការ​ប្រើ​សតិ,URL ដើម +Keywords[lt]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL, bylų tvarkyklė, kfm, patarimai, atskiri langai, elgesys, elgsena, atminties naudojimas, namų adresas +Keywords[lv]=iekarotājs,failumenedžeris,kfm,padoms,failu padomi,atsevišķs logs,spawn windows,izturēšanās,atmiņas izmantošana,Mājas URL, +Keywords[mk]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,менаџер на датотеки,совети,совети за датотеки,подели го прозорецот, однесување,користење на меморија,Домашно URL, +Keywords[mn]=Конкюрор,Файл удирдагч,kfm,Зөвлөмж,Цонх,Байдал, Хувийн лавлах,Санах ойн ашиглалт +Keywords[mt]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,ħjilijiet,pariri,imġieba +Keywords[nb]=konqueror,filemanager,kfm,tips,file tips,separate vinduer,filbehandler,fil,adskilte vindu,delte vinduer,oppførsel,minnebruk,hjemme-nettadresse +Keywords[nds]=Konqueror,Dateipleger,kfm,Tipps,Tooltips,egen Finster,Finstern maken,Bedregen,Spiekerverbruuk,Startadress +Keywords[ne]=कन्क्वेरर, फाइल प्रबन्धक, kfm, टिपहरू, फाइल टिपहरू, फरक सञ्झ्याल, स्पवन सञ्झ्यालहरू, व्यवहार, स्मृति प्रयोग,गृह URL, +Keywords[nl]=konqueror,filemanager,kfm,tips,knopinfo,tooltips,gedrag,geheugengebruik,home,persoonlijke map, +Keywords[nn]=Konqueror,filhandsamar,KFM,tips,filtips,eige vindauge,nye vindauge,åtferd,minnebruk,heime-URL +Keywords[nso]=konqueror,molaodi wa faele,kfm,ditomotsebe,ditomotsebe tsa faele,window yeo e hlaogilego,spawn windows,mekgwa,mekgwa,tshomiso ya kelelo,URL ya gae, +Keywords[pa]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,ਫਾਇਲ ਮੈਨੇਜਰ,ਸੰਕੇਤ,ਵੱਖਰਾ ਝਰੋਖਾ,ਵਿਹਾਰ,ਮੈਮੋਰੀ ਵਰਤੋਂ,ਕੋਨਕਿਉਰਰ +Keywords[pl]=konqueror,menedżer plików,kfm,wskazówki,informacja o pliku,osobne okno, mnożące się okna,zachowanie,zużycie zasobów pamięci,odnośnik do kartoteki domowej +Keywords[pt]=konqueror,gestor de ficheiros,kfm,dicas,dicas de ficheiros,janela separada,comportamento,utilização de memória,URL de base, +Keywords[pt_BR]=konqueror,gerenciador de arquivos,kfm,dicas,arquivos de dicas,janelas separadas,janelas unidas,comportamento,comportamento,uso de memória,URL local, +Keywords[ro]=konqueror,manager de fișiere,kfm,sfaturi,ferestre separate,comportament,utilizare memorie,URL Acasă +Keywords[rw]=Konqueror,mugengadosiye,kfm,inyobora, inyobora y'idosiye, gutandukanya Idirishya,kurema amadirishya,imyitwarire,imyitwarire,ikoresha ry'umwanyabubiko,URL y'Ipaji kwinjira, +Keywords[se]=konqueror,fiilagieđahalli,kfm,rávvagat,fiilarávvagat,iežaš láse,ođđa láset,láhtten,muitugeavaheapmi,ruoktu-URL +Keywords[sk]=konqueror,správa súborov,kfm,tipy,oddelené okná,nové okná,správanie,využitie pamäti,domovské URL +Keywords[sl]=konqueror,upravitelj datotek,upravljalnik,kfm,namigi,namigi datotek,ločeno okno,ustvari okna,obnašanje,poraba pomnilnika,domači URL +Keywords[sr]=konqueror,filemanager,kfm,форе,форе за фајлове,одвојени прозор,spawn прозори,понашање,искоришћеност меморије,Home URL, +Keywords[sr@Latn]=konqueror,filemanager,kfm,fore,fore za fajlove,odvojeni prozor,spawn prozori,ponašanje,iskorišćenost memorije,Home URL, +Keywords[sv]=konqueror,filhanterare,kfm,tips,filtips,särskilt fönster,visa fönster,beteende,minnesanvändning,hemadress +Keywords[ta]=கான்கொரர்,கோப்பு மேலாளர்,kfm,குறிப்புகள்,கோப்பு குறிப்புகள்,தனி சாளரம்,நீள்வட்ட சாளரம்,நடத்தை,நினைவு பயன்பாடு,வீட்டு வலைப்பின்னல், +Keywords[th]=คอนเควอร์เรอร์,จัดการแฟ้ม,kfm,เคล็ดลับ,เคล็ดลับแฟ้ม,แยกหน้าต่าง,หน้าต่างเปิดใหม่,พฤติกรรม,การใช้หน่วยความจำ,ตำแหน่งหลัก, +Keywords[tr]=konqueror,dosya yöneticisi,kfm,ipuçları,dosya,pencere,davranış,bellek kullanımı,başlangıç +Keywords[uk]=konqueror,менеджер файлів,kfm,підказки,підказки по файлах,створення вікон,поведінка,використання пам'яті,домашній URL +Keywords[uz]=konqueror,fayl boshqaruvchisi,kfm,eslatmalar,fayl eslatmalari,alohida oyna,spawn windows,xususiyatlar,xotiradan foydalanish,Uy URL +Keywords[uz@cyrillic]=konqueror,файл бошқарувчиси,kfm,эслатмалар,файл эслатмалари,алоҳида ойна,spawn windows,хусусиятлар,хотирадан фойдаланиш,Уй URL +Keywords[ven]=konqueror,mulanguli wa faela,kfm,tsivhudzo,tsivhudzo ya faela,window yo fhandekanaho,spawn windows,maitele,maitele,mashumisele a muhumbulo,Haya URL, +Keywords[vi]=konqueror,trình quản lý tập tin,kfm,gợi ý,gợi ý tập tin,phân cách cửa sổ,cửa sổ nhỏ,cách hoạt động,các cách hoạt động,bộ nhớ sử dụng,URL Nhà, +Keywords[wa]=konqueror,manaedjeu d' fitchî,kfm,tips,bon a savu,bon a saveur,purnea metous a pårt,dispårtis purneas,dujhance,eployaedje del memwere,URL Måjhon +Keywords[xh]=konqueror,umphathi wefayile,kfm,amancam, ifayile amancam,yahlula i window,yenza,windows, ukuziphatha,usebenziso lwenkumbulo,Ekhaya URL, +Keywords[zh_CN]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,文件管理器,提示,文件提示,拆分窗口,新开窗口,行为,内存使用,主 URL, +Keywords[zh_TW]=konqueror,filemanager,kfm,tips,file tips,separate window,spawn windows,behavior,behaviour,memory usage,Home URL,征服家,檔案管理程式,檔案密訣,分離視窗,產生視窗,行為,記憶體使用量,家 URL, +Keywords[zu]=konqueror,imenenja yefayela,kfm,amacebo,amacebo efayela,i-window elahlukene,ama-window azelwe,ukuziphatha,ukuziphhatha, ukusetshenziswa kenkumbulo,i-URL yasekhaya, diff --git a/kcontrol/konqhtml/Makefile.am b/kcontrol/konqhtml/Makefile.am new file mode 100644 index 000000000..87cf8a664 --- /dev/null +++ b/kcontrol/konqhtml/Makefile.am @@ -0,0 +1,26 @@ +AM_CPPFLAGS = -I$(top_srcdir)/libkonq -I$(top_srcdir)/kcontrol/input $(all_includes) +AM_LDFLAGS = $(all_libraries) + +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_konqhtml.la + +kcm_konqhtml_la_SOURCES = advancedTabDialog.cpp htmlopts.cpp jsopts.cpp \ + javaopts.cpp pluginopts.cpp appearance.cpp \ + khttpoptdlg.cpp policydlg.cpp main.cpp \ + jspolicies.cpp nsconfigwidget.ui policies.cpp \ + domainlistview.cpp advancedTabOptions.ui \ + filteropts.cpp + +kcm_konqhtml_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_konqhtml_la_LIBADD = -lkhtml -lkdeui + +xdg_apps_DATA = khtml_behavior.desktop khtml_java_js.desktop khtml_fonts.desktop khtml_filter.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmkonqhtml.pot + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing/nsplugin.desktop + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing/khtml_appearance.desktop diff --git a/kcontrol/konqhtml/advancedTabDialog.cpp b/kcontrol/konqhtml/advancedTabDialog.cpp new file mode 100644 index 000000000..93a576043 --- /dev/null +++ b/kcontrol/konqhtml/advancedTabDialog.cpp @@ -0,0 +1,121 @@ +/* + * advancedTabDialog.cpp + * + * Copyright (c) 2002 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "advancedTabDialog.h" +#include "advancedTabOptions.h" +#include "main.h" + +advancedTabDialog::advancedTabDialog(QWidget* parent, KConfig* config, const char* name) + : KDialogBase(KDialogBase::Plain, + i18n("Advanced Options"), + KDialogBase::Ok | + KDialogBase::Apply | + KDialogBase::Cancel, + KDialogBase::Ok, + parent, + name, + true, true), + m_pConfig(config) +{ + connect(this, SIGNAL(applyClicked()), + this, SLOT(save())); + connect(this, SIGNAL(okClicked()), + this, SLOT(save())); + actionButton(Apply)->setEnabled(false); + QFrame* page = plainPage(); + QVBoxLayout* layout = new QVBoxLayout(page); + m_advancedWidget = new advancedTabOptions(page); + layout->addWidget(m_advancedWidget); + layout->addSpacing( 20 ); + layout->addStretch(); + + connect(m_advancedWidget->m_pNewTabsInBackground, SIGNAL(clicked()), this, SLOT(changed())); + connect(m_advancedWidget->m_pOpenAfterCurrentPage, SIGNAL(clicked()), this, SLOT(changed())); + connect(m_advancedWidget->m_pTabConfirm, SIGNAL(clicked()), this, SLOT(changed())); + connect(m_advancedWidget->m_pTabCloseActivatePrevious, SIGNAL(clicked()), this, SLOT(changed())); + connect(m_advancedWidget->m_pPermanentCloseButton, SIGNAL(clicked()), this, SLOT(changed())); + connect(m_advancedWidget->m_pKonquerorTabforExternalURL, SIGNAL(clicked()), this, SLOT(changed())); + connect(m_advancedWidget->m_pPopupsWithinTabs, SIGNAL(clicked()), this, SLOT(changed())); + + load(); +} + +advancedTabDialog::~advancedTabDialog() +{ +} + +void advancedTabDialog::load() +{ + m_pConfig->setGroup("FMSettings"); + m_advancedWidget->m_pNewTabsInBackground->setChecked( ! (m_pConfig->readBoolEntry( "NewTabsInFront", false )) ); + m_advancedWidget->m_pOpenAfterCurrentPage->setChecked( m_pConfig->readBoolEntry( "OpenAfterCurrentPage", false ) ); + m_advancedWidget->m_pPermanentCloseButton->setChecked( m_pConfig->readBoolEntry( "PermanentCloseButton", false ) ); + m_advancedWidget->m_pKonquerorTabforExternalURL->setChecked( m_pConfig->readBoolEntry( "KonquerorTabforExternalURL", false ) ); + m_advancedWidget->m_pPopupsWithinTabs->setChecked( m_pConfig->readBoolEntry( "PopupsWithinTabs", false ) ); + m_advancedWidget->m_pTabCloseActivatePrevious->setChecked( m_pConfig->readBoolEntry( "TabCloseActivatePrevious", false ) ); + + m_pConfig->setGroup("Notification Messages"); + m_advancedWidget->m_pTabConfirm->setChecked( !m_pConfig->hasKey("MultipleTabConfirm") ); + + actionButton(Apply)->setEnabled(false); +} + +void advancedTabDialog::save() +{ + m_pConfig->setGroup("FMSettings"); + m_pConfig->writeEntry( "NewTabsInFront", !(m_advancedWidget->m_pNewTabsInBackground->isChecked()) ); + m_pConfig->writeEntry( "OpenAfterCurrentPage", m_advancedWidget->m_pOpenAfterCurrentPage->isChecked() ); + m_pConfig->writeEntry( "PermanentCloseButton", m_advancedWidget->m_pPermanentCloseButton->isChecked() ); + m_pConfig->writeEntry( "KonquerorTabforExternalURL", m_advancedWidget->m_pKonquerorTabforExternalURL->isChecked() ); + m_pConfig->writeEntry( "PopupsWithinTabs", m_advancedWidget->m_pPopupsWithinTabs->isChecked() ); + m_pConfig->writeEntry( "TabCloseActivatePrevious", m_advancedWidget->m_pTabCloseActivatePrevious->isChecked() ); + m_pConfig->sync(); + + // It only matters wether the key is present, its value has no meaning + m_pConfig->setGroup("Notification Messages"); + if ( m_advancedWidget->m_pTabConfirm->isChecked() ) m_pConfig->deleteEntry( "MultipleTabConfirm" ); + else m_pConfig->writeEntry( "MultipleTabConfirm", true ); + + QByteArray data; + if ( !KApplication::kApplication()->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + KApplication::kApplication()->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); + + actionButton(Apply)->setEnabled(false); +} + +void advancedTabDialog::changed() +{ + actionButton(Apply)->setEnabled(true); +} + +#include "advancedTabDialog.moc" diff --git a/kcontrol/konqhtml/advancedTabDialog.h b/kcontrol/konqhtml/advancedTabDialog.h new file mode 100644 index 000000000..728e8928b --- /dev/null +++ b/kcontrol/konqhtml/advancedTabDialog.h @@ -0,0 +1,45 @@ +/* + * advancedTabDialog.h + * + * Copyright (c) 2002 Aaron J. Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __ADVANCEDTABDIALOG_H +#define __ADVANCEDTABDIALOG_H + +#include + +class advancedTabOptions; + +class advancedTabDialog : public KDialogBase +{ + Q_OBJECT + + public: + advancedTabDialog(QWidget* parent, KConfig *config, const char* name); + ~advancedTabDialog(); + + protected slots: + void load(); + void save(); + void changed(); + + private: + KConfig* m_pConfig; + advancedTabOptions* m_advancedWidget; +}; + +#endif diff --git a/kcontrol/konqhtml/advancedTabOptions.ui b/kcontrol/konqhtml/advancedTabOptions.ui new file mode 100644 index 000000000..7116bc1ee --- /dev/null +++ b/kcontrol/konqhtml/advancedTabOptions.ui @@ -0,0 +1,155 @@ + +advancedTabOptions + + + advancedTabOptions + + + + 0 + 0 + 644 + 208 + + + + + unnamed + + + 0 + + + + TextLabel3 + + + <b>Advanced Options</b> + + + + + Line1 + + + HLine + + + Sunken + + + Horizontal + + + + + layout + + + + unnamed + + + + m_pNewTabsInBackground + + + O&pen new tabs in the background + + + This will open a new tab in the background, instead of in the foreground. + + + + + m_pOpenAfterCurrentPage + + + Open &new tab after current tab + + + This will open a new tab opened from a page after the current tab, instead of after the last tab. + + + + + m_pTabConfirm + + + Confirm &when closing windows with multiple tabs + + + This will ask you whether you are sure you want to close a window when it has multiple tabs opened in it. + + + + + m_pPermanentCloseButton + + + &Show close button instead of website icon + + + This will display close buttons inside each tab instead of websites' icons. + + + + + m_pPopupsWithinTabs + + + Open pop&ups in new tab instead of in new window + + + Whether or not JavaScript popups if allowed shall open in a new tab or in a new window. + + + + + m_pTabCloseActivatePrevious + + + Activate previous used tab when closing the current tab + + + When checking this the previous used or opened tab will be activated when you close the current active tab instead of the one right to the current tab. + + + + + m_pKonquerorTabforExternalURL + + + Open as tab in existing Konqueror when URL is called externally + + + When you click a URL in another KDE program or call kfmclient to open a URL, the current desktop will be searched for a non-minimized Konqueror and, if found, the URL opened as a new tab within it. Otherwise a new Konqueror window will be opened with the required URL. + + + + + + + spacer + + + Vertical + + + Expanding + + + + 20 + 0 + + + + + + + kdialog.h + + + + diff --git a/kcontrol/konqhtml/appearance.cpp b/kcontrol/konqhtml/appearance.cpp new file mode 100644 index 000000000..15cbd036a --- /dev/null +++ b/kcontrol/konqhtml/appearance.cpp @@ -0,0 +1,417 @@ + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined Q_WS_X11 && !defined K_WS_QTONLY +#include +#endif + + +#include "appearance.moc" + +KAppearanceOptions::KAppearanceOptions(KConfig *config, QString group, QWidget *parent, const char *) + : KCModule( parent, "kcmkonqhtml" ), m_pConfig(config), m_groupname(group), + fSize( 10 ), fMinSize( HTML_DEFAULT_MIN_FONT_SIZE ) + +{ + setQuickHelp( i18n("

    Konqueror Fonts

    On this page, you can configure " + "which fonts Konqueror should use to display the web " + "pages you view.")); + + QString wtstr; + + QGridLayout *lay = new QGridLayout(this, 1 ,1 , 0, KDialog::spacingHint()); + int r = 0; + int E = 0, M = 1, W = 3; //CT 3 (instead 2) allows smaller color buttons + + QGroupBox* gb = new QGroupBox( 1, QGroupBox::Horizontal, i18n("Font Si&ze"), this ); + lay->addMultiCellWidget(gb, r, r, E, W); + + QWhatsThis::add( gb, i18n("This is the relative font size Konqueror uses to display web sites.") ); + + m_minSize = new KIntNumInput( fMinSize, gb ); + m_minSize->setLabel( i18n( "M&inimum font size:" ) ); + m_minSize->setRange( 2, 30 ); + connect( m_minSize, SIGNAL( valueChanged( int ) ), this, SLOT( slotMinimumFontSize( int ) ) ); + connect( m_minSize, SIGNAL( valueChanged( int ) ), this, SLOT( changed() ) ); + QWhatsThis::add( m_minSize, i18n( "Konqueror will never display text smaller than " + "this size,
    overriding any other settings" ) ); + + m_MedSize = new KIntNumInput( m_minSize, fSize, gb ); + m_MedSize->setLabel( i18n( "&Medium font size:" ) ); + m_MedSize->setRange( 2, 30 ); + connect( m_MedSize, SIGNAL( valueChanged( int ) ), this, SLOT( slotFontSize( int ) ) ); + connect( m_MedSize, SIGNAL( valueChanged( int ) ), this, SLOT( changed() ) ); + QWhatsThis::add( m_MedSize, + i18n("This is the relative font size Konqueror uses " + "to display web sites.") ); + + QStringList emptyList; + + QLabel* label = new QLabel( i18n("S&tandard font:"), this ); + lay->addWidget( label , ++r, E); + + m_pFonts[0] = new KFontCombo( emptyList, this ); + + label->setBuddy( m_pFonts[0] ); + lay->addMultiCellWidget(m_pFonts[0], r, r, M, W); + + wtstr = i18n("This is the font used to display normal text in a web page."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pFonts[0], wtstr ); + + connect( m_pFonts[0], SIGNAL( activated(const QString&) ), + SLOT( slotStandardFont(const QString&) ) ); + connect( m_pFonts[0], SIGNAL( activated(const QString&) ), + SLOT(changed() ) ); + connect( m_pFonts[0]->lineEdit(), SIGNAL( textChanged(const QString&) ), + SLOT( slotStandardFont(const QString&) ) ); + connect( m_pFonts[0], SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + label = new QLabel( i18n( "&Fixed font:"), this ); + lay->addWidget( label, ++r, E ); + + m_pFonts[1] = new KFontCombo( emptyList, this ); + + label->setBuddy( m_pFonts[1] ); + lay->addMultiCellWidget(m_pFonts[1], r, r, M, W); + + wtstr = i18n("This is the font used to display fixed-width (i.e. non-proportional) text."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pFonts[1], wtstr ); + + connect( m_pFonts[1], SIGNAL( activated(const QString&) ), + SLOT( slotFixedFont(const QString&) ) ); + connect( m_pFonts[1], SIGNAL( activated(const QString&) ), + SLOT(changed() ) ); + connect( m_pFonts[1]->lineEdit(), SIGNAL( textChanged(const QString&) ), + SLOT( slotFixedFont(const QString&) ) ); + connect( m_pFonts[1], SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + label = new QLabel( i18n( "S&erif font:" ), this ); + lay->addWidget( label, ++r, E ); + + m_pFonts[2] = new KFontCombo( emptyList, this ); + + label->setBuddy( m_pFonts[2] ); + lay->addMultiCellWidget( m_pFonts[2], r, r, M, W ); + + wtstr= i18n( "This is the font used to display text that is marked up as serif." ); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pFonts[2], wtstr ); + + connect( m_pFonts[2], SIGNAL( activated( const QString& ) ), + SLOT( slotSerifFont( const QString& ) ) ); + connect( m_pFonts[2], SIGNAL( activated( const QString& ) ), + SLOT( changed() ) ); + connect( m_pFonts[2]->lineEdit(), SIGNAL( textChanged(const QString&) ), + SLOT( slotSerifFont(const QString&) ) ); + connect( m_pFonts[2], SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + label = new QLabel( i18n( "Sa&ns serif font:" ), this ); + lay->addWidget( label, ++r, E ); + + m_pFonts[3] = new KFontCombo( emptyList, this ); + + label->setBuddy( m_pFonts[3] ); + lay->addMultiCellWidget( m_pFonts[3], r, r, M, W ); + + wtstr= i18n( "This is the font used to display text that is marked up as sans-serif." ); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pFonts[3], wtstr ); + + connect( m_pFonts[3], SIGNAL( activated( const QString& ) ), + SLOT( slotSansSerifFont( const QString& ) ) ); + connect( m_pFonts[3], SIGNAL( activated( const QString& ) ), + SLOT( changed() ) ); + connect( m_pFonts[3]->lineEdit(), SIGNAL( textChanged(const QString&) ), + SLOT( slotSansSerifFont(const QString&) ) ); + connect( m_pFonts[3], SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + + label = new QLabel( i18n( "C&ursive font:" ), this ); + lay->addWidget( label, ++r, E ); + + m_pFonts[4] = new KFontCombo( emptyList, this ); + + label->setBuddy( m_pFonts[4] ); + lay->addMultiCellWidget( m_pFonts[4], r, r, M, W ); + + wtstr= i18n( "This is the font used to display text that is marked up as italic." ); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pFonts[4], wtstr ); + + connect( m_pFonts[4], SIGNAL( activated( const QString& ) ), + SLOT( slotCursiveFont( const QString& ) ) ); + connect( m_pFonts[4], SIGNAL( activated( const QString& ) ), + SLOT( changed() ) ); + connect( m_pFonts[4]->lineEdit(), SIGNAL( textChanged(const QString&) ), + SLOT( slotCursiveFont(const QString&) ) ); + connect( m_pFonts[4], SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + + label = new QLabel( i18n( "Fantas&y font:" ), this ); + lay->addWidget( label, ++r, E ); + + m_pFonts[5] = new KFontCombo( emptyList, this ); + + label->setBuddy( m_pFonts[5] ); + lay->addMultiCellWidget( m_pFonts[5], r, r, M, W ); + + wtstr= i18n( "This is the font used to display text that is marked up as a fantasy font." ); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pFonts[5], wtstr ); + + connect( m_pFonts[5], SIGNAL( activated( const QString& ) ), + SLOT( slotFantasyFont( const QString& ) ) ); + connect( m_pFonts[5], SIGNAL( activated( const QString& ) ), + SLOT( changed() ) ); + connect( m_pFonts[5]->lineEdit(), SIGNAL( textChanged(const QString&) ), + SLOT( slotFantasyFont(const QString&) ) ); + connect( m_pFonts[5], SIGNAL( textChanged(const QString&) ), + SLOT(changed() ) ); + + + label = new QLabel( i18n( "Font &size adjustment for this encoding:" ), this ); + lay->addWidget( label, ++r, M ); + + m_pFontSizeAdjust = new QSpinBox( -5, 5, 1, this ); + label->setBuddy( m_pFontSizeAdjust ); + lay->addMultiCellWidget( m_pFontSizeAdjust, r, r, M+1, W ); + + connect( m_pFontSizeAdjust, SIGNAL( valueChanged( int ) ), + SLOT( slotFontSizeAdjust( int ) ) ); + connect( m_pFontSizeAdjust, SIGNAL( valueChanged( int ) ), + SLOT( changed() ) ); + + label = new QLabel( i18n( "Default encoding:"), this ); + //++r; + //lay->addMultiCellWidget( label, r, r, E, E+1); + lay->addWidget( label, ++r, E); + + m_pEncoding = new QComboBox( false, this ); + label->setBuddy( m_pEncoding ); + encodings = KGlobal::charsets()->availableEncodingNames(); + encodings.prepend(i18n("Use Language Encoding")); + m_pEncoding->insertStringList( encodings ); + lay->addMultiCellWidget(m_pEncoding,r, r, M, W); + + wtstr = i18n( "Select the default encoding to be used; normally, you will be fine with 'Use language encoding' " + "and should not have to change this."); + QWhatsThis::add( label, wtstr ); + QWhatsThis::add( m_pEncoding, wtstr ); + + connect( m_pEncoding, SIGNAL( activated(const QString& ) ), + SLOT( slotEncoding(const QString&) ) ); + connect( m_pEncoding, SIGNAL( activated(const QString& ) ), + SLOT( changed() ) ); + + ++r; lay->setRowStretch(r, 8); + + QFontDatabase db; + + m_families = db.families(); + + m_pFonts[0]->setFonts( m_families ); + m_pFonts[1]->setFonts( m_families ); + m_pFonts[2]->setFonts( m_families ); + m_pFonts[3]->setFonts( m_families ); + m_pFonts[4]->setFonts( m_families ); + m_pFonts[5]->setFonts( m_families ); + + load(); +} + +KAppearanceOptions::~KAppearanceOptions() +{ +delete m_pConfig; +} + +void KAppearanceOptions::slotFontSize( int i ) +{ + fSize = i; + if ( fSize < fMinSize ) { + m_minSize->setValue( fSize ); + fMinSize = fSize; + } +} + + +void KAppearanceOptions::slotMinimumFontSize( int i ) +{ + fMinSize = i; + if ( fMinSize > fSize ) { + m_MedSize->setValue( fMinSize ); + fSize = fMinSize; + } +} + + +void KAppearanceOptions::slotStandardFont(const QString& n ) +{ + fonts[0] = n; +} + + +void KAppearanceOptions::slotFixedFont(const QString& n ) +{ + fonts[1] = n; +} + + +void KAppearanceOptions::slotSerifFont( const QString& n ) +{ + fonts[2] = n; +} + + +void KAppearanceOptions::slotSansSerifFont( const QString& n ) +{ + fonts[3] = n; +} + + +void KAppearanceOptions::slotCursiveFont( const QString& n ) +{ + fonts[4] = n; +} + + +void KAppearanceOptions::slotFantasyFont( const QString& n ) +{ + fonts[5] = n; +} + +void KAppearanceOptions::slotFontSizeAdjust( int value ) +{ + fonts[6] = QString::number( value ); +} + +void KAppearanceOptions::slotEncoding(const QString& n) +{ + encodingName = n; +} + +void KAppearanceOptions::load() +{ + load( false ); +} + +void KAppearanceOptions::load( bool useDefaults ) +{ + KConfig khtmlrc("khtmlrc", true, false); + m_pConfig->setReadDefaults( useDefaults ); + + khtmlrc.setReadDefaults( useDefaults ); + +#define SET_GROUP(x) m_pConfig->setGroup(x); khtmlrc.setGroup(x) +#define READ_NUM(x,y) m_pConfig->readNumEntry(x, khtmlrc.readNumEntry(x, y)) +#define READ_ENTRY(x,y) m_pConfig->readEntry(x, khtmlrc.readEntry(x, y)) +#define READ_LIST(x) m_pConfig->readListEntry(x, khtmlrc.readListEntry(x)) + + SET_GROUP(m_groupname); + fSize = READ_NUM( "MediumFontSize", 12 ); + fMinSize = READ_NUM( "MinimumFontSize", HTML_DEFAULT_MIN_FONT_SIZE ); + if (fSize < fMinSize) + fSize = fMinSize; + + defaultFonts = QStringList(); + defaultFonts.append( READ_ENTRY( "StandardFont", KGlobalSettings::generalFont().family() ) ); + defaultFonts.append( READ_ENTRY( "FixedFont", KGlobalSettings::fixedFont().family() ) ); + defaultFonts.append( READ_ENTRY( "SerifFont", HTML_DEFAULT_VIEW_SERIF_FONT ) ); + defaultFonts.append( READ_ENTRY( "SansSerifFont", HTML_DEFAULT_VIEW_SANSSERIF_FONT ) ); + defaultFonts.append( READ_ENTRY( "CursiveFont", HTML_DEFAULT_VIEW_CURSIVE_FONT ) ); + defaultFonts.append( READ_ENTRY( "FantasyFont", HTML_DEFAULT_VIEW_FANTASY_FONT ) ); + defaultFonts.append( QString("0") ); // default font size adjustment + + if (m_pConfig->hasKey("Fonts")) + fonts = m_pConfig->readListEntry( "Fonts" ); + else + fonts = khtmlrc.readListEntry( "Fonts" ); + while (fonts.count() < 7) + fonts.append(QString::null); + + encodingName = READ_ENTRY( "DefaultEncoding", QString::null ); + //kdDebug(0) << "encoding = " << encodingName << endl; + + updateGUI(); + emit changed( useDefaults ); + +#undef SET_GROUP +#undef READ_NUM +#undef READ_ENTRY +#undef READ_LIST +} + +void KAppearanceOptions::defaults() +{ + load( true ); +} + +void KAppearanceOptions::updateGUI() +{ + //kdDebug() << "KAppearanceOptions::updateGUI " << charset << endl; + for ( int f = 0; f < 6; f++ ) { + QString ff = fonts[f]; + if (ff.isEmpty()) + ff = defaultFonts[f]; + m_pFonts[f]->setCurrentFont(ff); + } + + int i = 0; + for ( QStringList::Iterator it = encodings.begin(); it != encodings.end(); ++it, ++i ) + if ( encodingName == *it ) + m_pEncoding->setCurrentItem( i ); + if(encodingName.isEmpty()) + m_pEncoding->setCurrentItem( 0 ); + m_pFontSizeAdjust->setValue( fonts[6].toInt() ); + m_MedSize->blockSignals(true); + m_MedSize->setValue( fSize ); + m_MedSize->blockSignals(false); + m_minSize->blockSignals(true); + m_minSize->setValue( fMinSize ); + m_minSize->blockSignals(false); +} + +void KAppearanceOptions::save() +{ + m_pConfig->setGroup(m_groupname); + m_pConfig->writeEntry( "MediumFontSize", fSize ); + m_pConfig->writeEntry( "MinimumFontSize", fMinSize ); + m_pConfig->writeEntry( "Fonts", fonts ); + + // If the user chose "Use language encoding", write an empty string + if (encodingName == i18n("Use Language Encoding")) + encodingName = ""; + m_pConfig->writeEntry( "DefaultEncoding", encodingName ); + m_pConfig->sync(); + + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); + + emit changed(false); +} + diff --git a/kcontrol/konqhtml/appearance.h b/kcontrol/konqhtml/appearance.h new file mode 100644 index 000000000..dd16626bd --- /dev/null +++ b/kcontrol/konqhtml/appearance.h @@ -0,0 +1,70 @@ +// -*- c-basic-offset: 2 -*- +// (c) Martin R. Jones 1996 +// (c) Bernd Wuebben 1998 +// KControl port & modifications +// (c) Torben Weis 1998 +// End of the KControl port, added 'kfmclient configure' call. +// (c) David Faure 1998 +// Cleanup and modifications for KDE 2.1 +// (c) Daniel Molkentin 2000 + +#ifndef __APPEARANCE_H__ +#define __APPEARANCE_H__ + +#include +#include + +#include + +class QSpinBox; +class KFontCombo; + +class KAppearanceOptions : public KCModule +{ + Q_OBJECT +public: + KAppearanceOptions(KConfig *config, QString group, QWidget *parent=0, const char *name=0); + ~KAppearanceOptions(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +public slots: + void slotFontSize( int ); + void slotMinimumFontSize( int ); + void slotStandardFont(const QString& n); + void slotFixedFont(const QString& n); + void slotSerifFont( const QString& n ); + void slotSansSerifFont( const QString& n ); + void slotCursiveFont( const QString& n ); + void slotFantasyFont( const QString& n ); + void slotEncoding( const QString& n); + void slotFontSizeAdjust( int value ); + +private: + void updateGUI(); + +private: + + KConfig *m_pConfig; + QString m_groupname; + QStringList m_families; + + KIntNumInput* m_minSize; + KIntNumInput* m_MedSize; + KIntNumInput* m_pageDPI; + KFontCombo* m_pFonts[6]; + QComboBox* m_pEncoding; + QSpinBox *m_pFontSizeAdjust; + + int fSize; + int fMinSize; + QStringList encodings; + QStringList fonts; + QStringList defaultFonts; + QString encodingName; +}; + +#endif // __APPEARANCE_H__ diff --git a/kcontrol/konqhtml/domainlistview.cpp b/kcontrol/konqhtml/domainlistview.cpp new file mode 100644 index 000000000..a55221f43 --- /dev/null +++ b/kcontrol/konqhtml/domainlistview.cpp @@ -0,0 +1,230 @@ +/* + Copyright (c) 2002 Leo Savernik + Derived from jsopts.cpp and javaopts.cpp, code copied from there is + copyrighted to its respective owners. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include +#include + +#include +#include +#include +#include + +#include "domainlistview.h" +#include "policies.h" +#include "policydlg.h" + +DomainListView::DomainListView(KConfig *config,const QString &title, + QWidget *parent,const char *name) : + QGroupBox(title, parent, name), config(config) { + setColumnLayout(0, Qt::Vertical); + layout()->setSpacing(0); + layout()->setMargin(0); + QGridLayout* thisLayout = new QGridLayout(layout()); + thisLayout->setAlignment(Qt::AlignTop); + thisLayout->setSpacing(KDialog::spacingHint()); + thisLayout->setMargin(KDialog::marginHint()); + + domainSpecificLV = new KListView(this); + domainSpecificLV->addColumn(i18n("Host/Domain")); + domainSpecificLV->addColumn(i18n("Policy"), 100); + connect(domainSpecificLV,SIGNAL(doubleClicked(QListViewItem *)), SLOT(changePressed())); + connect(domainSpecificLV,SIGNAL(returnPressed(QListViewItem *)), SLOT(changePressed())); + connect(domainSpecificLV, SIGNAL( executed( QListViewItem *)), SLOT( updateButton())); + connect(domainSpecificLV, SIGNAL(selectionChanged()), SLOT(updateButton())); + thisLayout->addMultiCellWidget(domainSpecificLV, 0, 5, 0, 0); + + addDomainPB = new QPushButton(i18n("&New..."), this); + thisLayout->addWidget(addDomainPB, 0, 1); + connect(addDomainPB, SIGNAL(clicked()), SLOT(addPressed())); + + changeDomainPB = new QPushButton( i18n("Chan&ge..."), this); + thisLayout->addWidget(changeDomainPB, 1, 1); + connect(changeDomainPB, SIGNAL(clicked()), this, SLOT(changePressed())); + + deleteDomainPB = new QPushButton(i18n("De&lete"), this); + thisLayout->addWidget(deleteDomainPB, 2, 1); + connect(deleteDomainPB, SIGNAL(clicked()), this, SLOT(deletePressed())); + + importDomainPB = new QPushButton(i18n("&Import..."), this); + thisLayout->addWidget(importDomainPB, 3, 1); + connect(importDomainPB, SIGNAL(clicked()), this, SLOT(importPressed())); + importDomainPB->setEnabled(false); + importDomainPB->hide(); + + exportDomainPB = new QPushButton(i18n("&Export..."), this); + thisLayout->addWidget(exportDomainPB, 4, 1); + connect(exportDomainPB, SIGNAL(clicked()), this, SLOT(exportPressed())); + exportDomainPB->setEnabled(false); + exportDomainPB->hide(); + + QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); + thisLayout->addItem(spacer, 5, 1); + + QWhatsThis::add( addDomainPB, i18n("Click on this button to manually add a host or domain " + "specific policy.") ); + QWhatsThis::add( changeDomainPB, i18n("Click on this button to change the policy for the " + "host or domain selected in the list box.") ); + QWhatsThis::add( deleteDomainPB, i18n("Click on this button to delete the policy for the " + "host or domain selected in the list box.") ); + updateButton(); +} + +DomainListView::~DomainListView() { + // free all policies + DomainPolicyMap::Iterator it = domainPolicies.begin(); + for (; it != domainPolicies.end(); ++it) { + delete it.data(); + }/*next it*/ +} + +void DomainListView::updateButton() +{ + QListViewItem *index = domainSpecificLV->currentItem(); + bool enable = ( index != 0 ); + changeDomainPB->setEnabled( enable ); + deleteDomainPB->setEnabled( enable ); + +} + +void DomainListView::addPressed() +{ +// JavaPolicies pol_copy(m_pConfig,m_groupname,false); + Policies *pol = createPolicies(); + pol->defaults(); + PolicyDialog pDlg(pol, this); + setupPolicyDlg(AddButton,pDlg,pol); + if( pDlg.exec() ) { + QListViewItem* index = new QListViewItem( domainSpecificLV, pDlg.domain(), + pDlg.featureEnabledPolicyText() ); + pol->setDomain(pDlg.domain()); + domainPolicies.insert(index, pol); + domainSpecificLV->setCurrentItem( index ); + emit changed(true); + } else { + delete pol; + } + updateButton(); +} + +void DomainListView::changePressed() +{ + QListViewItem *index = domainSpecificLV->currentItem(); + if ( index == 0 ) + { + KMessageBox::information( 0, i18n("You must first select a policy to be changed." ) ); + return; + } + + Policies *pol = domainPolicies[index]; + // This must be copied because the policy dialog is allowed to change + // the data even if the changes are rejected in the end. + Policies *pol_copy = copyPolicies(pol); + + PolicyDialog pDlg( pol_copy, this ); + pDlg.setDisableEdit( true, index->text(0) ); + setupPolicyDlg(ChangeButton,pDlg,pol_copy); + if( pDlg.exec() ) + { + pol_copy->setDomain(pDlg.domain()); + domainPolicies[index] = pol_copy; + pol_copy = pol; + index->setText(0, pDlg.domain() ); + index->setText(1, pDlg.featureEnabledPolicyText()); + emit changed(true); + } + delete pol_copy; +} + +void DomainListView::deletePressed() +{ + QListViewItem *index = domainSpecificLV->currentItem(); + if ( index == 0 ) + { + KMessageBox::information( 0, i18n("You must first select a policy to delete." ) ); + return; + } + + DomainPolicyMap::Iterator it = domainPolicies.find(index); + if (it != domainPolicies.end()) { + delete it.data(); + domainPolicies.remove(it); + delete index; + emit changed(true); + } + updateButton(); +} + +void DomainListView::importPressed() +{ + // PENDING(kalle) Implement this. +} + +void DomainListView::exportPressed() +{ + // PENDING(kalle) Implement this. +} + +void DomainListView::initialize(const QStringList &domainList) +{ + domainSpecificLV->clear(); + domainPolicies.clear(); +// JavaPolicies pol(m_pConfig,m_groupname,false); + for (QStringList::ConstIterator it = domainList.begin(); + it != domainList.end(); ++it) { + QString domain = *it; + Policies *pol = createPolicies(); + pol->setDomain(domain); + pol->load(); + + QString policy; + if (pol->isFeatureEnabledPolicyInherited()) + policy = i18n("Use Global"); + else if (pol->isFeatureEnabled()) + policy = i18n("Accept"); + else + policy = i18n("Reject"); + QListViewItem *index = + new QListViewItem( domainSpecificLV, domain, policy ); + + domainPolicies[index] = pol; + } +} + +void DomainListView::save(const QString &group, const QString &domainListKey) { + QStringList domainList; + DomainPolicyMap::Iterator it = domainPolicies.begin(); + for (; it != domainPolicies.end(); ++it) { + QListViewItem *current = it.key(); + Policies *pol = it.data(); + pol->save(); + domainList.append(current->text(0)); + } + config->setGroup(group); + config->writeEntry(domainListKey, domainList); +} + +void DomainListView::setupPolicyDlg(PushButton /*trigger*/, + PolicyDialog &/*pDlg*/,Policies */*copy*/) { + // do nothing +} + +#include "domainlistview.moc" diff --git a/kcontrol/konqhtml/domainlistview.h b/kcontrol/konqhtml/domainlistview.h new file mode 100644 index 000000000..3fb3f102e --- /dev/null +++ b/kcontrol/konqhtml/domainlistview.h @@ -0,0 +1,209 @@ +/* + Copyright (c) 2002 Leo Savernik + Derived from jsopts.h and javaopts.h, code copied from there is + copyrighted to its respective owners. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __DOMAINLISTVIEW_H__ +#define __DOMAINLISTVIEW_H__ + +#include +#include + +class QListViewItem; +class QPushButton; +class QStringList; + +class KConfig; +class KListView; + +class Policies; +class PolicyDialog; + +/** + * @short Provides a list view of domains which policies are attached to. + * + * This class resembles a list view of domain names and some buttons to + * manipulate it. You should use this widget if you need to manage domains + * whose policies are described by (derivatives of) Policies objects. + * + * The contained widgets can be accessed by respective getters for + * fine-tuning/customizing them afterwards. + * + * To use this class you have to derive your own and implement most + * (all) of the protected methods. You need these to customize this widget + * for its special purpose. + * + * @author Leo Savernik + */ +class DomainListView : public QGroupBox { + Q_OBJECT +public: + /** Enumerates the available buttons. + */ + enum PushButton { + AddButton, ChangeButton, DeleteButton, ImportButton, ExportButton + }; + + /** + * constructor + * @param config configuration to read from and to write to + * @param title title to be used for enclosing group box + * @param parent parent widget + * @param name internal name for debugging + */ + DomainListView(KConfig *config,const QString &title,QWidget *parent, + const char *name = 0); + + virtual ~DomainListView(); + + /** + * clears the list view. + */ +// void clear(); + + /** + * returns the list view displaying the domains + */ + KListView *listView() const { return domainSpecificLV; } + + /** + * returns the add push-button. + * + * Note: The add button already contains a default "what's this" text. + */ + QPushButton *addButton() const { return addDomainPB; } + + /** + * returns the change push-button. + * + * Note: The change button already contains a default "what's this" text. + */ + QPushButton *changeButton() const { return changeDomainPB; } + + /** + * returns the delete push-button. + * + * Note: The delete button already contains a default "what's this" text. + */ + QPushButton *deleteButton() const { return deleteDomainPB; } + + /** + * returns the import push-button. + */ + QPushButton *importButton() const { return importDomainPB; } + + /** + * returns the export push-button. + */ + QPushButton *exportButton() const { return exportDomainPB; } + + /** + * Initializes the list view with the given list of domains as well + * as the domain policy map. + * + * This method may be called multiple times on a DomainListView instance. + * + * @param domainList given list of domains + */ + void initialize(const QStringList &domainList); + + /** + * saves the current state of all domains to the configuration object. + * @param group the group the information is to be saved under + * @param domainListKey the name of the key which the list of domains + * is stored under. + */ + void save(const QString &group, const QString &domainListKey); + + +signals: + /** + * indicates that a configuration has been changed within this list view. + * @param state true if changed, false if not + */ + void changed(bool state); + +protected: + /** + * factory method for creating a new domain-specific policies object. + * + * Example: + *
    +   * JavaPolicies *JavaDomainListView::createPolicies() {
    +   *   return new JavaPolicies(m_pConfig,m_groupname,false);
    +   * }
    +   * 
    + */ + virtual Policies *createPolicies() = 0; + + /** + * factory method for copying a policies object. + * + * Derived classes must interpret the given object as the same type + * as those created by createPolicies and return a copy of this very type. + * + * Example: + *
    +   * JavaPolicies *JavaDomainListView::copyPolicies(Policies *pol) {
    +   *   return new JavaPolicies(*static_cast(pol));
    +   * }
    +   * 
    + * @param pol policies object to be copied + */ + virtual Policies *copyPolicies(Policies *pol) = 0; + + /** + * allows derived classes to customize the policy dialog. + * + * The default implementation does nothing. + * @param trigger triggered by which button + * @param pDlg reference to policy dialog + * @param copy policies object this dialog is used for changing. Derived + * classes can safely cast the @p copy object to the same type they + * returned in their createPolicies implementation. + */ + virtual void setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *copy); + +private slots: + void addPressed(); + void changePressed(); + void deletePressed(); + void importPressed(); + void exportPressed(); + void updateButton(); + +protected: + + KConfig *config; + + KListView *domainSpecificLV; + + QPushButton* addDomainPB; + QPushButton* changeDomainPB; + QPushButton* deleteDomainPB; + QPushButton* importDomainPB; + QPushButton* exportDomainPB; + + typedef QMap DomainPolicyMap; + DomainPolicyMap domainPolicies; +}; + +#endif // __DOMAINLISTVIEW_H__ + diff --git a/kcontrol/konqhtml/filteropts.cpp b/kcontrol/konqhtml/filteropts.cpp new file mode 100644 index 000000000..a1a68b63e --- /dev/null +++ b/kcontrol/konqhtml/filteropts.cpp @@ -0,0 +1,327 @@ +/* + Copyright (C) 2005 Ivor Hewitt + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "filteropts.h" +#include "filteropts.moc" + +KCMFilter::KCMFilter(KConfig *config, QString group, + QWidget *parent, const char * ) + : KCModule( parent, "kcmkonqhtml" ), + mConfig( config ), + mGroupname( group ), + mSelCount(0) +{ + setButtons(Default|Apply); + + QVBoxLayout *topLayout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + mEnableCheck = new QCheckBox(i18n("Enable filters"), this); + topLayout->addWidget( mEnableCheck ); + + mKillCheck = new QCheckBox(i18n("Hide filtered images"), this); + topLayout->addWidget( mKillCheck ); + + QGroupBox *topBox = new QGroupBox( 1, Horizontal, i18n("URL Expressions to Filter"), this ); + topLayout->addWidget( topBox ); + + mListBox = new QListBox( topBox ); + mListBox->setSelectionMode(QListBox::Extended); + new QLabel( i18n("Expression (e.g. http://www.site.com/ad/*):"), topBox); + mString = new QLineEdit( topBox ); + + QHBox *buttonBox = new QHBox( topBox ); + buttonBox->setSpacing( KDialog::spacingHint() ); + + mInsertButton = new QPushButton( i18n("Insert"), buttonBox ); + connect( mInsertButton, SIGNAL( clicked() ), SLOT( insertFilter() ) ); + mUpdateButton = new QPushButton( i18n("Update"), buttonBox ); + connect( mUpdateButton, SIGNAL( clicked() ), SLOT( updateFilter() ) ); + mRemoveButton = new QPushButton( i18n("Remove"), buttonBox ); + connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeFilter() ) ); + + mImportButton = new QPushButton(i18n("Import..."),buttonBox); + connect( mImportButton, SIGNAL( clicked() ), SLOT( importFilters() ) ); + mExportButton = new QPushButton(i18n("Export..."),buttonBox); + connect( mExportButton, SIGNAL( clicked() ), SLOT( exportFilters() ) ); + + connect( mEnableCheck, SIGNAL( clicked()), this, SLOT( slotEnableChecked())); + connect( mKillCheck, SIGNAL( clicked()), this, SLOT( slotKillChecked())); + connect( mListBox, SIGNAL( selectionChanged ()),this, SLOT( slotItemSelected())); + +/* + * Whats this items + */ + QWhatsThis::add( mEnableCheck, i18n("Enable or disable AdBlocK filters. When enabled a set of expressions " + "to be blocked should be defined in the filter list for blocking to " + "take effect.")); + QWhatsThis::add( mKillCheck, i18n("When enabled blocked images will be removed from the page completely " + "otherwise a placeholder 'blocked' image will be used.")); + QWhatsThis::add( mListBox, i18n("This is the list of URL filters that will be applied to all linked " + "images and frames. The filters are processed in order so place " + "more generic filters towards the top of the list.")); + QWhatsThis::add( mString, i18n("Enter an expression to filter. Expressions can be defined as either " + "a filename style wildcard e.g. http://www.site.com/ads* or as a full " + "regular expression by surrounding the string with '/' e.g. " + " //(ad|banner)\\./")); + load(); + updateButton(); +} + +KCMFilter::~KCMFilter() +{ + delete mConfig; +} + +void KCMFilter::slotKillChecked() +{ + emit changed( true ); +} + +void KCMFilter::slotEnableChecked() +{ + updateButton(); + emit changed( true ); +} + +void KCMFilter::slotItemSelected() +{ + int currentId=-1; + unsigned int i; + for( i=0,mSelCount=0; i < mListBox->count() && mSelCount<2; ++i ) + { + if (mListBox->isSelected(i)) + { + currentId=i; + mSelCount++; + } + } + + if ( currentId >= 0 ) + { + mString->setText(mListBox->text(currentId)); + } + updateButton(); +} + +void KCMFilter::updateButton() +{ + bool state = mEnableCheck->isChecked(); + + mUpdateButton->setEnabled(state && (mSelCount == 1)); + mRemoveButton->setEnabled(state && (mSelCount > 0)); + mInsertButton->setEnabled(state); + mImportButton->setEnabled(state); + mExportButton->setEnabled(state); + + mListBox->setEnabled(state); + mString->setEnabled(state); + mKillCheck->setEnabled(state); +} + +void KCMFilter::importFilters() +{ + QString inFile = KFileDialog::getOpenFileName(); + if (inFile.length() > 0) + { + QFile f(inFile); + if ( f.open( IO_ReadOnly ) ) + { + QTextStream ts( &f ); + QStringList paths; + QString line; + while (!ts.atEnd()) + { + line = ts.readLine(); + if (line.lower().compare("[adblock]") == 0) + continue; + + // Treat leading ! as filter comment, otherwise check expressions + // are valid. + if (!line.startsWith("!")) + { + if (line.length()>2 && line[0]=='/' && line[line.length()-1] == '/') + { + QString inside = line.mid(1, line.length()-2); + QRegExp rx(inside); + if (!rx.isValid()) + continue; + } + else + { + QRegExp rx(line); + rx.setWildcard(true); + if (!rx.isValid()) + continue; + } + } + + if (!line.isEmpty() && mListBox->findItem(line, Qt::CaseSensitive|Qt::ExactMatch) == 0) + paths.append(line); + } + f.close(); + + mListBox->insertStringList( paths ); + emit changed(true); + } + } +} + +void KCMFilter::exportFilters() +{ + QString outFile = KFileDialog::getSaveFileName(); + if (outFile.length() > 0) + { + QFile f(outFile); + if ( f.open( IO_WriteOnly ) ) + { + QTextStream ts( &f ); + ts.setEncoding( QTextStream::UnicodeUTF8 ); + ts << "[AdBlock]" << endl; + + uint i; + for( i = 0; i < mListBox->count(); ++i ) + ts << mListBox->text(i) << endl; + + f.close(); + } + } +} + +void KCMFilter::defaults() +{ + load( true ); +} + +void KCMFilter::save() +{ + mConfig->deleteGroup(mGroupname); + mConfig->setGroup(mGroupname); + + mConfig->writeEntry("Enabled",mEnableCheck->isChecked()); + mConfig->writeEntry("Shrink",mKillCheck->isChecked()); + + uint i; + for( i = 0; i < mListBox->count(); ++i ) + { + QString key = "Filter-" + QString::number(i); + mConfig->writeEntry(key, mListBox->text(i)); + } + mConfig->writeEntry("Count",mListBox->count()); + + mConfig->sync(); + DCOPClient::mainClient()->send("konqueror*","KonquerorIface","reparseConfiguration()",QByteArray()); + +} +void KCMFilter::load() +{ + load( false ); +} + +void KCMFilter::load( bool useDefaults ) +{ + QStringList paths; + + mConfig->setReadDefaults( useDefaults ); + + mConfig->setGroup( mGroupname ); + mEnableCheck->setChecked( mConfig->readBoolEntry("Enabled",false)); + mKillCheck->setChecked( mConfig->readBoolEntry("Shrink",false)); + + QMap entryMap = mConfig->entryMap( mGroupname ); + QMap::ConstIterator it; + int num = mConfig->readNumEntry("Count",0); + for (int i=0; iinsertStringList( paths ); + + emit changed( useDefaults ); +} + +void KCMFilter::insertFilter() +{ + if ( !mString->text().isEmpty() ) + { + mListBox->insertItem( mString->text() ); + int id=mListBox->count()-1; + mListBox->clearSelection(); + mListBox->setSelected(id,true); + mListBox->setCurrentItem(id); + mListBox->ensureCurrentVisible(); + mString->clear(); + emit changed( true ); + } + updateButton(); +} + +void KCMFilter::removeFilter() +{ + for( int i = mListBox->count(); i >= 0; --i ) + { + if (mListBox->isSelected(i)) + mListBox->removeItem(i); + } + mString->clear(); + emit changed( true ); + updateButton(); +} + +void KCMFilter::updateFilter() +{ + if ( !mString->text().isEmpty() ) + { + int index = mListBox->currentItem(); + if ( index >= 0 ) + { + mListBox->changeItem( mString->text(), index ); + emit changed( true ); + } + } + updateButton(); +} + +QString KCMFilter::quickHelp() const +{ + return i18n("

    Konqueror AdBlocK

    Konqueror AdBlocK allows you to create a list of filters" + " that are checked against linked images and frames. URL's that match are either discarded or" + " replaced with a placeholder image. "); +} diff --git a/kcontrol/konqhtml/filteropts.h b/kcontrol/konqhtml/filteropts.h new file mode 100644 index 000000000..28fcaa652 --- /dev/null +++ b/kcontrol/konqhtml/filteropts.h @@ -0,0 +1,74 @@ +/* + Copyright (C) 2005 Ivor Hewitt + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +#ifndef FILTEROPTS_H +#define FILTEROPTS_H + +#include + +class QListBox; +class QPushButton; +class QLineEdit; +class QListBoxItem; +class QCheckBox; + +class KConfig; + +class KCMFilter : public KCModule +{ + Q_OBJECT +public: + KCMFilter( KConfig* config, QString group, QWidget* parent = 0, const char* name = 0 ); + ~KCMFilter(); + + void load(); + void load( bool useDefaults ); + void save(); + void defaults(); + QString quickHelp() const; + +public slots: + +protected slots: + void insertFilter(); + void updateFilter(); + void removeFilter(); + void slotItemSelected(); + void slotEnableChecked(); + void slotKillChecked(); + + void exportFilters(); + void importFilters(); + +private: + void updateButton(); + QListBox *mListBox; + QLineEdit *mString; + QCheckBox *mEnableCheck; + QCheckBox *mKillCheck; + QPushButton *mInsertButton; + QPushButton *mUpdateButton; + QPushButton *mRemoveButton; + QPushButton *mImportButton; + QPushButton *mExportButton; + + KConfig *mConfig; + QString mGroupname; + int mSelCount; +}; + +#endif diff --git a/kcontrol/konqhtml/htmlopts.cpp b/kcontrol/konqhtml/htmlopts.cpp new file mode 100644 index 000000000..44738e293 --- /dev/null +++ b/kcontrol/konqhtml/htmlopts.cpp @@ -0,0 +1,365 @@ +//// +// "Misc Options" Tab for KFM configuration +// +// (c) Sven Radej 1998 +// (c) David Faure 1998 +// (c) 2001 Waldo Bastian + +#include //CT - 12Nov1998 +#include +#include +#include +#include + +#include "htmlopts.h" +#include "advancedTabDialog.h" + +#include // include default values directly from konqueror +#include // get default for DEFAULT_CHANGECURSOR +#include +#include +#include +#include + +#include +#include + + +#include "htmlopts.moc" + +enum UnderlineLinkType { UnderlineAlways=0, UnderlineNever=1, UnderlineHover=2 }; +enum AnimationsType { AnimationsAlways=0, AnimationsNever=1, AnimationsLoopOnce=2 }; +//----------------------------------------------------------------------------- + +KMiscHTMLOptions::KMiscHTMLOptions(KConfig *config, QString group, QWidget *parent, const char *) + : KCModule( parent, "kcmkonqhtml" ), m_pConfig(config), m_groupname(group) +{ + int row = 0; + QGridLayout *lay = new QGridLayout(this, 10, 2, 0, KDialog::spacingHint()); + + // Bookmarks + setQuickHelp( i18n("

    Konqueror Browser

    Here you can configure Konqueror's browser " + "functionality. Please note that the file manager " + "functionality has to be configured using the \"File Manager\" " + "configuration module. You can make some " + "settings how Konqueror should handle the HTML code in " + "the web pages it loads. It is usually not necessary to " + "change anything here.")); + + QVGroupBox *bgBookmarks = new QVGroupBox( i18n("Boo&kmarks"), this ); + m_pAdvancedAddBookmarkCheckBox = new QCheckBox(i18n( "Ask for name and folder when adding bookmarks" ), bgBookmarks); + QWhatsThis::add( m_pAdvancedAddBookmarkCheckBox, i18n( "If this box is checked, Konqueror will allow you to" + " change the title of the bookmark and choose a folder in which to store it when you add a new bookmark." ) ); + connect(m_pAdvancedAddBookmarkCheckBox, SIGNAL(clicked()), SLOT(slotChanged())); + + m_pOnlyMarkedBookmarksCheckBox = new QCheckBox(i18n( "Show only marked bookmarks in bookmark toolbar" ), bgBookmarks); + QWhatsThis::add( m_pOnlyMarkedBookmarksCheckBox, i18n( "If this box is checked, Konqueror will show only those" + " bookmarks in the bookmark toolbar which you have marked to do so in the bookmark editor." ) ); + connect(m_pOnlyMarkedBookmarksCheckBox, SIGNAL(clicked()), SLOT(slotChanged())); + + lay->addMultiCellWidget( bgBookmarks, row, row, 0, 1 ); + row++; + + // Form completion + + QVGroupBox *bgForm = new QVGroupBox( i18n("Form Com&pletion"), this ); + m_pFormCompletionCheckBox = new QCheckBox(i18n( "Enable completion of &forms" ), bgForm); + QWhatsThis::add( m_pFormCompletionCheckBox, i18n( "If this box is checked, Konqueror will remember" + " the data you enter in web forms and suggest it in similar fields for all forms." ) ); + connect(m_pFormCompletionCheckBox, SIGNAL(clicked()), SLOT(slotChanged())); + + m_pMaxFormCompletionItems = new KIntNumInput( bgForm ); + m_pMaxFormCompletionItems->setLabel( i18n( "&Maximum completions:" ) ); + m_pMaxFormCompletionItems->setRange( 0, 100 ); + QWhatsThis::add( m_pMaxFormCompletionItems, + i18n( "Here you can select how many values Konqueror will remember for a form field." ) ); + connect(m_pMaxFormCompletionItems, SIGNAL(valueChanged(int)), SLOT(slotChanged())); + + lay->addMultiCellWidget( bgForm, row, row, 0, 1 ); + row++; + + // Tabbed Browsing + + QGroupBox *bgTabbedBrowsing = new QGroupBox( 0, Qt::Vertical, i18n("Tabbed Browsing"), this ); + QVBoxLayout *laygroup = new QVBoxLayout(bgTabbedBrowsing->layout(), KDialog::spacingHint() ); + + m_pShowMMBInTabs = new QCheckBox( i18n( "Open &links in new tab instead of in new window" ), bgTabbedBrowsing ); + QWhatsThis::add( m_pShowMMBInTabs, i18n("This will open a new tab instead of a new window in various situations, " + "such as choosing a link or a folder with the middle mouse button.") ); + connect(m_pShowMMBInTabs, SIGNAL(clicked()), SLOT(slotChanged())); + laygroup->addWidget(m_pShowMMBInTabs); + + m_pDynamicTabbarHide = new QCheckBox( i18n( "Hide the tab bar when only one tab is open" ), bgTabbedBrowsing ); + QWhatsThis::add( m_pDynamicTabbarHide, i18n("This will display the tab bar only if there are two or more tabs. Otherwise it will always be displayed.") ); + connect(m_pDynamicTabbarHide, SIGNAL(clicked()), SLOT(slotChanged())); + laygroup->addWidget(m_pDynamicTabbarHide); + + QHBoxLayout *laytab = new QHBoxLayout(laygroup, KDialog::spacingHint()); + QPushButton *advancedTabButton = new QPushButton( i18n( "Advanced Options"), bgTabbedBrowsing ); + laytab->addWidget(advancedTabButton); + laytab->addStretch(); + connect(advancedTabButton, SIGNAL(clicked()), this, SLOT(launchAdvancedTabDialog())); + + lay->addMultiCellWidget( bgTabbedBrowsing, row, row, 0, 1 ); + row++; + + // Mouse behavior + + QVGroupBox *bgMouse = new QVGroupBox( i18n("Mouse Beha&vior"), this ); + + m_cbCursor = new QCheckBox(i18n("Chan&ge cursor over links"), bgMouse ); + QWhatsThis::add( m_cbCursor, i18n("If this option is set, the shape of the cursor will change " + "(usually to a hand) if it is moved over a hyperlink.") ); + connect(m_cbCursor, SIGNAL(clicked()), SLOT(slotChanged())); + + m_pOpenMiddleClick = new QCheckBox( i18n ("M&iddle click opens URL in selection" ), bgMouse ); + QWhatsThis::add( m_pOpenMiddleClick, i18n ( + "If this box is checked, you can open the URL in the selection by middle clicking on a " + "Konqueror view." ) ); + connect(m_pOpenMiddleClick, SIGNAL(clicked()), SLOT(slotChanged())); + + m_pBackRightClick = new QCheckBox( i18n( "Right click goes &back in history" ), bgMouse ); + QWhatsThis::add( m_pBackRightClick, i18n( + "If this box is checked, you can go back in history by right clicking on a Konqueror view. " + "To access the context menu, press the right mouse button and move." ) ); + connect(m_pBackRightClick, SIGNAL(clicked()), SLOT(slotChanged())); + + lay->addMultiCellWidget( bgMouse, row, row, 0, 1 ); + row++; + + // Misc + + m_pAutoLoadImagesCheckBox = new QCheckBox( i18n( "A&utomatically load images"), this ); + QWhatsThis::add( m_pAutoLoadImagesCheckBox, i18n( "If this box is checked, Konqueror will automatically load any images that are embedded in a web page. Otherwise, it will display placeholders for the images, and you can then manually load the images by clicking on the image button.
    Unless you have a very slow network connection, you will probably want to check this box to enhance your browsing experience." ) ); + connect(m_pAutoLoadImagesCheckBox, SIGNAL(clicked()), SLOT(slotChanged())); + lay->addMultiCellWidget( m_pAutoLoadImagesCheckBox, row, row, 0, 1 ); + row++; + + m_pUnfinishedImageFrameCheckBox = new QCheckBox( i18n( "Dra&w frame around not completely loaded images"), this ); + QWhatsThis::add( m_pUnfinishedImageFrameCheckBox, i18n( "If this box is checked, Konqueror will draw a frame as placeholder around not yet fully loaded images that are embedded in a web page.
    Especially if you have a slow network connection, you will probably want to check this box to enhance your browsing experience." ) ); + connect(m_pUnfinishedImageFrameCheckBox, SIGNAL(clicked()), SLOT(slotChanged())); + lay->addMultiCellWidget( m_pUnfinishedImageFrameCheckBox, row, row, 0, 1 ); + row++; + + m_pAutoRedirectCheckBox = new QCheckBox( i18n( "Allow automatic delayed &reloading/redirecting"), this ); + QWhatsThis::add( m_pAutoRedirectCheckBox, + i18n( "Some web pages request an automatic reload or redirection after a certain period of time. By unchecking this box Konqueror will ignore these requests." ) ); + connect(m_pAutoRedirectCheckBox, SIGNAL(clicked()), SLOT(slotChanged())); + lay->addMultiCellWidget( m_pAutoRedirectCheckBox, row, row, 0, 1 ); + row++; + + + // More misc + + KSeparator *sep = new KSeparator(this); + lay->addMultiCellWidget(sep, row, row, 0, 1); + row++; + + QLabel *label = new QLabel( i18n("Und&erline links:"), this); + m_pUnderlineCombo = new QComboBox( false, this ); + label->setBuddy(m_pUnderlineCombo); + m_pUnderlineCombo->insertItem(i18n("underline","Enabled"), UnderlineAlways); + m_pUnderlineCombo->insertItem(i18n("underline","Disabled"), UnderlineNever); + m_pUnderlineCombo->insertItem(i18n("Only on Hover"), UnderlineHover); + lay->addWidget(label, row, 0); + lay->addWidget(m_pUnderlineCombo, row, 1); + row++; + QString whatsThis = i18n("Controls how Konqueror handles underlining hyperlinks:
    " + "
    • Enabled: Always underline links
    • " + "
    • Disabled: Never underline links
    • " + "
    • Only on Hover: Underline when the mouse is moved over the link
    • " + "

    Note: The site's CSS definitions can override this value"); + QWhatsThis::add( label, whatsThis); + QWhatsThis::add( m_pUnderlineCombo, whatsThis); + connect(m_pUnderlineCombo, SIGNAL(activated(int)), SLOT(slotChanged())); + + + + label = new QLabel( i18n("A&nimations:"), this); + m_pAnimationsCombo = new QComboBox( false, this ); + label->setBuddy(m_pAnimationsCombo); + m_pAnimationsCombo->insertItem(i18n("animations","Enabled"), AnimationsAlways); + m_pAnimationsCombo->insertItem(i18n("animations","Disabled"), AnimationsNever); + m_pAnimationsCombo->insertItem(i18n("Show Only Once"), AnimationsLoopOnce); + lay->addWidget(label, row, 0); + lay->addWidget(m_pAnimationsCombo, row, 1); + row++; + whatsThis = i18n("Controls how Konqueror shows animated images:
    " + "
    • Enabled: Show all animations completely.
    • " + "
    • Disabled: Never show animations, show the start image only.
    • " + "
    • Show only once: Show all animations completely but do not repeat them.
    • "); + QWhatsThis::add( label, whatsThis); + QWhatsThis::add( m_pAnimationsCombo, whatsThis); + connect(m_pAnimationsCombo, SIGNAL(activated(int)), SLOT(slotChanged())); + + lay->setRowStretch(row, 1); + + load(); + emit changed(false); +} + +KMiscHTMLOptions::~KMiscHTMLOptions() +{ + delete m_pConfig; +} + +void KMiscHTMLOptions::load() +{ + load( false ); +} + +void KMiscHTMLOptions::load( bool useDefaults ) +{ + KConfig khtmlrc("khtmlrc", true, false); + khtmlrc.setReadDefaults( useDefaults ); + m_pConfig->setReadDefaults( useDefaults ); + +#define SET_GROUP(x) m_pConfig->setGroup(x); khtmlrc.setGroup(x) +#define READ_BOOL(x,y) m_pConfig->readBoolEntry(x, khtmlrc.readBoolEntry(x, y)) +#define READ_ENTRY(x) m_pConfig->readEntry(x, khtmlrc.readEntry(x)) + + + // *** load *** + SET_GROUP( "MainView Settings" ); + bool bOpenMiddleClick = READ_BOOL( "OpenMiddleClick", true ); + bool bBackRightClick = READ_BOOL( "BackRightClick", false ); + SET_GROUP( "HTML Settings" ); + bool changeCursor = READ_BOOL("ChangeCursor", KDE_DEFAULT_CHANGECURSOR); + bool underlineLinks = READ_BOOL("UnderlineLinks", DEFAULT_UNDERLINELINKS); + bool hoverLinks = READ_BOOL("HoverLinks", true); + bool bAutoLoadImages = READ_BOOL( "AutoLoadImages", true ); + bool bUnfinishedImageFrame = READ_BOOL( "UnfinishedImageFrame", true ); + QString strAnimations = READ_ENTRY( "ShowAnimations" ).lower(); + + bool bAutoRedirect = m_pConfig->readBoolEntry( "AutoDelayedActions", true ); + + // *** apply to GUI *** + m_cbCursor->setChecked( changeCursor ); + m_pAutoLoadImagesCheckBox->setChecked( bAutoLoadImages ); + m_pUnfinishedImageFrameCheckBox->setChecked( bUnfinishedImageFrame ); + m_pAutoRedirectCheckBox->setChecked( bAutoRedirect ); + m_pOpenMiddleClick->setChecked( bOpenMiddleClick ); + m_pBackRightClick->setChecked( bBackRightClick ); + + // we use two keys for link underlining so that this config file + // is backwards compatible with KDE 2.0. the HoverLink setting + // has precedence over the UnderlineLinks setting + if (hoverLinks) + { + m_pUnderlineCombo->setCurrentItem( UnderlineHover ); + } + else + { + if (underlineLinks) + m_pUnderlineCombo->setCurrentItem( UnderlineAlways ); + else + m_pUnderlineCombo->setCurrentItem( UnderlineNever ); + } + if (strAnimations == "disabled") + m_pAnimationsCombo->setCurrentItem( AnimationsNever ); + else if (strAnimations == "looponce") + m_pAnimationsCombo->setCurrentItem( AnimationsLoopOnce ); + else + m_pAnimationsCombo->setCurrentItem( AnimationsAlways ); + + m_pFormCompletionCheckBox->setChecked( m_pConfig->readBoolEntry( "FormCompletion", true ) ); + m_pMaxFormCompletionItems->setValue( m_pConfig->readNumEntry( "MaxFormCompletionItems", 10 ) ); + m_pMaxFormCompletionItems->setEnabled( m_pFormCompletionCheckBox->isChecked() ); + + m_pConfig->setGroup("FMSettings"); + m_pShowMMBInTabs->setChecked( m_pConfig->readBoolEntry( "MMBOpensTab", false ) ); + m_pDynamicTabbarHide->setChecked( ! (m_pConfig->readBoolEntry( "AlwaysTabbedMode", false )) ); + + KConfig config("kbookmarkrc", true, false); + config.setReadDefaults( useDefaults ); + config.setGroup("Bookmarks"); + m_pAdvancedAddBookmarkCheckBox->setChecked( config.readBoolEntry("AdvancedAddBookmarkDialog", false) ); + m_pOnlyMarkedBookmarksCheckBox->setChecked( config.readBoolEntry("FilteredToolbar", false) ); + + emit changed( useDefaults ); + +#undef READ_ENTRY +#undef READ_BOOL +#undef SET_GROUP +} + +void KMiscHTMLOptions::defaults() +{ + load( true ); +} + +void KMiscHTMLOptions::save() +{ + m_pConfig->setGroup( "MainView Settings" ); + m_pConfig->writeEntry( "OpenMiddleClick", m_pOpenMiddleClick->isChecked() ); + m_pConfig->writeEntry( "BackRightClick", m_pBackRightClick->isChecked() ); + m_pConfig->setGroup( "HTML Settings" ); + m_pConfig->writeEntry( "ChangeCursor", m_cbCursor->isChecked() ); + m_pConfig->writeEntry( "AutoLoadImages", m_pAutoLoadImagesCheckBox->isChecked() ); + m_pConfig->writeEntry( "UnfinishedImageFrame", m_pUnfinishedImageFrameCheckBox->isChecked() ); + m_pConfig->writeEntry( "AutoDelayedActions", m_pAutoRedirectCheckBox->isChecked() ); + switch(m_pUnderlineCombo->currentItem()) + { + case UnderlineAlways: + m_pConfig->writeEntry( "UnderlineLinks", true ); + m_pConfig->writeEntry( "HoverLinks", false ); + break; + case UnderlineNever: + m_pConfig->writeEntry( "UnderlineLinks", false ); + m_pConfig->writeEntry( "HoverLinks", false ); + break; + case UnderlineHover: + m_pConfig->writeEntry( "UnderlineLinks", false ); + m_pConfig->writeEntry( "HoverLinks", true ); + break; + } + switch(m_pAnimationsCombo->currentItem()) + { + case AnimationsAlways: + m_pConfig->writeEntry( "ShowAnimations", "Enabled" ); + break; + case AnimationsNever: + m_pConfig->writeEntry( "ShowAnimations", "Disabled" ); + break; + case AnimationsLoopOnce: + m_pConfig->writeEntry( "ShowAnimations", "LoopOnce" ); + break; + } + + m_pConfig->writeEntry( "FormCompletion", m_pFormCompletionCheckBox->isChecked() ); + m_pConfig->writeEntry( "MaxFormCompletionItems", m_pMaxFormCompletionItems->value() ); + + m_pConfig->setGroup("FMSettings"); + m_pConfig->writeEntry( "MMBOpensTab", m_pShowMMBInTabs->isChecked() ); + m_pConfig->writeEntry( "AlwaysTabbedMode", !(m_pDynamicTabbarHide->isChecked()) ); + m_pConfig->sync(); + + KConfig config("kbookmarkrc", false, false); + config.setGroup("Bookmarks"); + config.writeEntry("AdvancedAddBookmarkDialog", m_pAdvancedAddBookmarkCheckBox->isChecked()); + config.writeEntry("FilteredToolbar", m_pOnlyMarkedBookmarksCheckBox->isChecked()); + config.sync(); + + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); + + emit changed(false); +} + + +void KMiscHTMLOptions::slotChanged() +{ + m_pMaxFormCompletionItems->setEnabled( m_pFormCompletionCheckBox->isChecked() ); + emit changed(true); +} + + +void KMiscHTMLOptions::launchAdvancedTabDialog() +{ + advancedTabDialog* dialog = new advancedTabDialog(this, m_pConfig, "advancedTabDialog"); + dialog->exec(); +} + + diff --git a/kcontrol/konqhtml/htmlopts.h b/kcontrol/konqhtml/htmlopts.h new file mode 100644 index 000000000..15f5a2511 --- /dev/null +++ b/kcontrol/konqhtml/htmlopts.h @@ -0,0 +1,68 @@ +// +// +// "Misc Options" Tab for KFM configuration +// +// (c) Sven Radej 1998 +// (c) David Faure 1998 + +#ifndef __KMISCHTML_OPTIONS_H +#define __KMISCHTML_OPTIONS_H + +#include +#include +#include +#include + + +//----------------------------------------------------------------------------- +// The "Misc Options" Tab for the HTML view contains : + +// Change cursor over links +// Underline links +// AutoLoad Images +// ... there is room for others :)) + + +#include +#include +#include +class QRadioButton; +class KIntNumInput; + +class KMiscHTMLOptions : public KCModule +{ + Q_OBJECT + +public: + KMiscHTMLOptions(KConfig *config, QString group, QWidget *parent = 0L, const char *name = 0L ); + ~KMiscHTMLOptions(); + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + +private slots: + void slotChanged(); + void launchAdvancedTabDialog(); + +private: + KConfig* m_pConfig; + QString m_groupname; + + QComboBox* m_pUnderlineCombo; + QComboBox* m_pAnimationsCombo; + QCheckBox* m_cbCursor; + QCheckBox* m_pAutoLoadImagesCheckBox; + QCheckBox* m_pUnfinishedImageFrameCheckBox; + QCheckBox* m_pAutoRedirectCheckBox; + QCheckBox* m_pOpenMiddleClick; + QCheckBox* m_pBackRightClick; + QCheckBox* m_pShowMMBInTabs; + QCheckBox* m_pFormCompletionCheckBox; + QCheckBox* m_pDynamicTabbarHide; + QCheckBox* m_pAdvancedAddBookmarkCheckBox; + QCheckBox* m_pOnlyMarkedBookmarksCheckBox; + KIntNumInput* m_pMaxFormCompletionItems; +}; + +#endif diff --git a/kcontrol/konqhtml/javaopts.cpp b/kcontrol/konqhtml/javaopts.cpp new file mode 100644 index 000000000..539e9bb37 --- /dev/null +++ b/kcontrol/konqhtml/javaopts.cpp @@ -0,0 +1,337 @@ +// (c) Martin R. Jones 1996 +// (c) Bernd Wuebben 1998 +// KControl port & modifications +// (c) Torben Weis 1998 +// End of the KControl port, added 'kfmclient configure' call. +// (c) David Faure 1998 +// New configuration scheme for Java/JavaScript +// (c) Kalle Dalheimer 2000 +// Redesign and cleanup +// (c) Daniel Molkentin 2000 +// Big changes to accommodate per-domain settings +// (c) Leo Savernik 2002-2003 + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "htmlopts.h" +#include "policydlg.h" +#include "javaopts.h" + +// == class JavaPolicies ===== + +JavaPolicies::JavaPolicies(KConfig* config, const QString &group, bool global, + const QString &domain) : + Policies(config,group,global,domain,"java.","EnableJava") { +} + +JavaPolicies::JavaPolicies() : Policies(0,QString::null,false, + QString::null,QString::null,QString::null) { +} + +JavaPolicies::~JavaPolicies() { +} + +// == class KJavaOptions ===== + +KJavaOptions::KJavaOptions( KConfig* config, QString group, + QWidget *parent, const char *name ) + : KCModule( parent, name ), + _removeJavaScriptDomainAdvice(false), + m_pConfig( config ), + m_groupname( group ), + java_global_policies(config,group,true), + _removeJavaDomainSettings(false) +{ + QVBoxLayout* toplevel = new QVBoxLayout( this, 10, 5 ); + + /*************************************************************************** + ********************* Global Settings ************************************* + **************************************************************************/ + QVGroupBox* globalGB = new QVGroupBox( i18n( "Global Settings" ), this ); + toplevel->addWidget( globalGB ); + enableJavaGloballyCB = new QCheckBox( i18n( "Enable Ja&va globally" ), globalGB ); + connect( enableJavaGloballyCB, SIGNAL( clicked() ), this, SLOT( slotChanged() ) ); + connect( enableJavaGloballyCB, SIGNAL( clicked() ), this, SLOT( toggleJavaControls() ) ); + + + /*************************************************************************** + ***************** Domain Specific Settings ******************************** + **************************************************************************/ + domainSpecific = new JavaDomainListView(m_pConfig,m_groupname,this,this); + connect(domainSpecific,SIGNAL(changed(bool)),SLOT(slotChanged())); + toplevel->addWidget( domainSpecific, 2 ); + + /*************************************************************************** + ***************** Java Runtime Settings *********************************** + **************************************************************************/ + QVGroupBox* javartGB = new QVGroupBox( i18n( "Java Runtime Settings" ), this ); + toplevel->addWidget( javartGB ); + + QWidget* checkboxes = new QWidget( javartGB ); + QGridLayout* grid = new QGridLayout( checkboxes, 2, 2 ); + + javaSecurityManagerCB = new QCheckBox( i18n("&Use security manager" ), checkboxes ); + grid->addWidget( javaSecurityManagerCB, 0, 0 ); + connect( javaSecurityManagerCB, SIGNAL(toggled( bool )), this, SLOT(slotChanged()) ); + + useKioCB = new QCheckBox( i18n("Use &KIO"), checkboxes ); + grid->addWidget( useKioCB, 0, 1 ); + connect( useKioCB, SIGNAL(toggled( bool )), this, SLOT(slotChanged()) ); + + enableShutdownCB = new QCheckBox( i18n("Shu&tdown applet server when inactive"), checkboxes ); + grid->addWidget( enableShutdownCB, 1, 0 ); + connect( enableShutdownCB, SIGNAL(toggled( bool )), this, SLOT(slotChanged()) ); + connect( enableShutdownCB, SIGNAL(clicked()), this, SLOT(toggleJavaControls()) ); + + QHBox* secondsHB = new QHBox( javartGB ); + serverTimeoutSB = new KIntNumInput( secondsHB ); + serverTimeoutSB->setRange( 0, 1000, 5 ); + serverTimeoutSB->setLabel( i18n("App&let server timeout:"), AlignLeft ); + serverTimeoutSB->setSuffix(i18n(" sec")); + connect(serverTimeoutSB, SIGNAL(valueChanged(int)),this,SLOT(slotChanged())); + + QHBox* pathHB = new QHBox( javartGB ); + pathHB->setSpacing( 10 ); + QLabel* pathLA = new QLabel( i18n( "&Path to Java executable, or 'java':" ), + pathHB ); + pathED = new KURLRequester( pathHB ); + connect( pathED, SIGNAL(textChanged( const QString& )), this, SLOT(slotChanged()) ); + pathLA->setBuddy( pathED ); + + QHBox* addArgHB = new QHBox( javartGB ); + addArgHB->setSpacing( 10 ); + QLabel* addArgLA = new QLabel( i18n( "Additional Java a&rguments:" ), addArgHB ); + addArgED = new QLineEdit( addArgHB ); + connect( addArgED, SIGNAL(textChanged( const QString& )), this, SLOT(slotChanged()) ); + addArgLA->setBuddy( addArgED ); + + /*************************************************************************** + ********************** WhatsThis? items *********************************** + **************************************************************************/ + QWhatsThis::add( enableJavaGloballyCB, i18n("Enables the execution of scripts written in Java " + "that can be contained in HTML pages. " + "Note that, as with any browser, enabling active contents can be a security problem.") ); + QString wtstr = i18n("This box contains the domains and hosts you have set " + "a specific Java policy for. This policy will be used " + "instead of the default policy for enabling or disabling Java applets on pages sent by these " + "domains or hosts.

      Select a policy and use the controls on " + "the right to modify it."); + QWhatsThis::add( domainSpecific->listView(), wtstr ); +#if 0 + QWhatsThis::add( domainSpecific->importButton(), i18n("Click this button to choose the file that contains " + "the Java policies. These policies will be merged " + "with the existing ones. Duplicate entries are ignored.") ); + QWhatsThis::add( domainSpecific->exportButton(), i18n("Click this button to save the Java policy to a zipped " + "file. The file, named java_policy.tgz, will be " + "saved to a location of your choice." ) ); +#endif + QWhatsThis::add( domainSpecific, i18n("Here you can set specific Java policies for any particular " + "host or domain. To add a new policy, simply click the New... " + "button and supply the necessary information requested by the " + "dialog box. To change an existing policy, click on the Change... " + "button and choose the new policy from the policy dialog box. Clicking " + "on the Delete button will remove the selected policy, causing the default " + "policy setting to be used for that domain.") ); +#if 0 + "The Import and Export " + "button allows you to easily share your policies with other people by allowing " + "you to save and retrieve them from a zipped file.") ); +#endif + + QWhatsThis::add( javaSecurityManagerCB, i18n( "Enabling the security manager will cause the jvm to run with a Security " + "Manager in place. This will keep applets from being able to read and " + "write to your file system, creating arbitrary sockets, and other actions " + "which could be used to compromise your system. Disable this option at your " + "own risk. You can modify your $HOME/.java.policy file with the Java " + "policytool utility to give code downloaded from certain sites more " + "permissions." ) ); + + QWhatsThis::add( useKioCB, i18n( "Enabling this will cause the jvm to use KIO for network transport ") ); + + QWhatsThis::add( pathED, i18n("Enter the path to the java executable. If you want to use the jre in " + "your path, simply leave it as 'java'. If you need to use a different jre, " + "enter the path to the java executable (e.g. /usr/lib/jdk/bin/java), " + "or the path to the directory that contains 'bin/java' (e.g. /opt/IBMJava2-13).") ); + + QWhatsThis::add( addArgED, i18n("If you want special arguments to be passed to the virtual machine, enter them here.") ); + + QString shutdown = i18n("When all the applets have been destroyed, the applet server should shut down. " + "However, starting the jvm takes a lot of time. If you would like to " + "keep the java process running while you are " + "browsing, you can set the timeout value to whatever you like. To keep " + "the java process running for the whole time that the konqueror process is, " + "leave the Shutdown Applet Server checkbox unchecked."); + QWhatsThis::add( serverTimeoutSB, shutdown); + QWhatsThis::add( enableShutdownCB, shutdown); + // Finally do the loading + load(); +} + +void KJavaOptions::load() +{ + load( false ); +} + +void KJavaOptions::load(bool useDefaults) +{ + m_pConfig->setReadDefaults( useDefaults ); + + // *** load *** + java_global_policies.load(); + bool bJavaGlobal = java_global_policies.isFeatureEnabled(); + bool bSecurityManager = m_pConfig->readBoolEntry( "UseSecurityManager", true ); + bool bUseKio = m_pConfig->readBoolEntry( "UseKio", false ); + bool bServerShutdown = m_pConfig->readBoolEntry( "ShutdownAppletServer", true ); + int serverTimeout = m_pConfig->readNumEntry( "AppletServerTimeout", 60 ); +#if defined(PATH_JAVA) + QString sJavaPath = m_pConfig->readPathEntry( "JavaPath", PATH_JAVA ); +#else + QString sJavaPath = m_pConfig->readPathEntry( "JavaPath", "java" ); +#endif + + if( sJavaPath == "/usr/lib/jdk" ) + sJavaPath = "java"; + + if( m_pConfig->hasKey( "JavaDomains" ) ) + domainSpecific->initialize(m_pConfig->readListEntry("JavaDomains")); + else if( m_pConfig->hasKey( "JavaDomainSettings" ) ) { + domainSpecific->updateDomainListLegacy( m_pConfig->readListEntry("JavaDomainSettings") ); + _removeJavaDomainSettings = true; + } else { + domainSpecific->updateDomainListLegacy( m_pConfig->readListEntry("JavaScriptDomainAdvice") ); + _removeJavaScriptDomainAdvice = true; + } + + // *** apply to GUI *** + enableJavaGloballyCB->setChecked( bJavaGlobal ); + javaSecurityManagerCB->setChecked( bSecurityManager ); + useKioCB->setChecked( bUseKio ); + + addArgED->setText( m_pConfig->readEntry( "JavaArgs" ) ); + pathED->lineEdit()->setText( sJavaPath ); + + enableShutdownCB->setChecked( bServerShutdown ); + serverTimeoutSB->setValue( serverTimeout ); + + toggleJavaControls(); + emit changed( useDefaults ); +} + +void KJavaOptions::defaults() +{ + load( true ); +} + +void KJavaOptions::save() +{ + java_global_policies.save(); + m_pConfig->writeEntry( "JavaArgs", addArgED->text() ); + m_pConfig->writePathEntry( "JavaPath", pathED->lineEdit()->text() ); + m_pConfig->writeEntry( "UseSecurityManager", javaSecurityManagerCB->isChecked() ); + m_pConfig->writeEntry( "UseKio", useKioCB->isChecked() ); + m_pConfig->writeEntry( "ShutdownAppletServer", enableShutdownCB->isChecked() ); + m_pConfig->writeEntry( "AppletServerTimeout", serverTimeoutSB->value() ); + + domainSpecific->save(m_groupname,"JavaDomains"); + + if (_removeJavaDomainSettings) { + m_pConfig->deleteEntry("JavaDomainSettings"); + _removeJavaDomainSettings = false; + } + + // sync moved to KJSParts::save +// m_pConfig->sync(); + emit changed( false ); +} + +void KJavaOptions::slotChanged() +{ + emit changed(true); +} + + +void KJavaOptions::toggleJavaControls() +{ + bool isEnabled = true; //enableJavaGloballyCB->isChecked(); + + java_global_policies.setFeatureEnabled( enableJavaGloballyCB->isChecked() ); + javaSecurityManagerCB->setEnabled( isEnabled ); + useKioCB->setEnabled( isEnabled ); + addArgED->setEnabled( isEnabled ); + pathED->setEnabled( isEnabled ); + enableShutdownCB->setEnabled( isEnabled ); + + serverTimeoutSB->setEnabled( enableShutdownCB->isChecked() && isEnabled ); +} + +// == class JavaDomainListView ===== + +JavaDomainListView::JavaDomainListView(KConfig *config,const QString &group, + KJavaOptions *options,QWidget *parent,const char *name) + : DomainListView(config,i18n( "Doma&in-Specific" ), parent, name), + group(group), options(options) { +} + +JavaDomainListView::~JavaDomainListView() { +} + +void JavaDomainListView::updateDomainListLegacy(const QStringList &domainConfig) +{ + domainSpecificLV->clear(); + JavaPolicies pol(config,group,false); + pol.defaults(); + for ( QStringList::ConstIterator it = domainConfig.begin(); + it != domainConfig.end(); ++it) + { + QString domain; + KHTMLSettings::KJavaScriptAdvice javaAdvice; + KHTMLSettings::KJavaScriptAdvice javaScriptAdvice; + KHTMLSettings::splitDomainAdvice(*it, domain, javaAdvice, javaScriptAdvice); + if (javaAdvice != KHTMLSettings::KJavaScriptDunno) { + QListViewItem* index = new QListViewItem( domainSpecificLV, domain, + i18n(KHTMLSettings::adviceToStr(javaAdvice)) ); + pol.setDomain(domain); + pol.setFeatureEnabled(javaAdvice != KHTMLSettings::KJavaScriptReject); + domainPolicies[index] = new JavaPolicies(pol); + } + } +} + +void JavaDomainListView::setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *pol) { + QString caption; + switch (trigger) { + case AddButton: caption = i18n( "New Java Policy" ); + pol->setFeatureEnabled(!options->enableJavaGloballyCB->isChecked()); + break; + case ChangeButton: caption = i18n( "Change Java Policy" ); break; + default: ; // inhibit gcc warning + }/*end switch*/ + pDlg.setCaption(caption); + pDlg.setFeatureEnabledLabel(i18n("&Java policy:")); + pDlg.setFeatureEnabledWhatsThis(i18n("Select a Java policy for " + "the above host or domain.")); + pDlg.refresh(); +} + +JavaPolicies *JavaDomainListView::createPolicies() { + return new JavaPolicies(config,group,false); +} + +JavaPolicies *JavaDomainListView::copyPolicies(Policies *pol) { + return new JavaPolicies(*static_cast(pol)); +} + +#include "javaopts.moc" diff --git a/kcontrol/konqhtml/javaopts.h b/kcontrol/konqhtml/javaopts.h new file mode 100644 index 000000000..638b3a921 --- /dev/null +++ b/kcontrol/konqhtml/javaopts.h @@ -0,0 +1,126 @@ +//----------------------------------------------------------------------------- +// +// HTML Options +// +// (c) Martin R. Jones 1996 +// +// Port to KControl +// (c) Torben Weis 1998 +// +// Redesign and cleanup +// (c) Daniel Molkentin 2000 +// +//----------------------------------------------------------------------------- + +#ifndef __JAVAOPTS_H__ +#define __JAVAOPTS_H__ + +#include + +#include "domainlistview.h" +#include "policies.h" + +class KColorButton; +class KConfig; +class KListView; +class KURLRequester; +class KIntNumInput; + +class QCheckBox; +class QComboBox; +class QLineEdit; +class QListViewItem; +class QRadioButton; + +class KJavaOptions; + +/** policies with java-specific constructor + */ +class JavaPolicies : public Policies { +public: + /** + * constructor + * @param config configuration to initialize this instance from + * @param group config group to use if this instance contains the global + * policies (global == true) + * @param global true if this instance contains the global policy settings, + * false if this instance contains policies specific for a domain. + * @param domain name of the domain this instance is used to configure the + * policies for (case insensitive, ignored if global == true) + */ + JavaPolicies(KConfig* config, const QString &group, bool global, + const QString &domain = QString::null); + + /** empty constructur to make QMap happy + * don't use for constructing a policies instance. + * @internal + */ + JavaPolicies(); + + virtual ~JavaPolicies(); +}; + +/** Java-specific enhancements to the domain list view + */ +class JavaDomainListView : public DomainListView { + Q_OBJECT +public: + JavaDomainListView(KConfig *config,const QString &group,KJavaOptions *opt, + QWidget *parent,const char *name = 0); + virtual ~JavaDomainListView(); + + /** remnant for importing pre KDE 3.2 settings + */ + void updateDomainListLegacy(const QStringList &domainConfig); + +protected: + virtual JavaPolicies *createPolicies(); + virtual JavaPolicies *copyPolicies(Policies *pol); + virtual void setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *copy); + +private: + QString group; + KJavaOptions *options; +}; + +class KJavaOptions : public KCModule +{ + Q_OBJECT + +public: + KJavaOptions( KConfig* config, QString group, QWidget* parent = 0, const char* name = 0 ); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + + bool _removeJavaScriptDomainAdvice; + +private slots: + void slotChanged(); + void toggleJavaControls(); + +private: + + KConfig* m_pConfig; + QString m_groupname; + JavaPolicies java_global_policies; + + QCheckBox* enableJavaGloballyCB; + QCheckBox* javaSecurityManagerCB; + QCheckBox* useKioCB; + QCheckBox* enableShutdownCB; + KIntNumInput* serverTimeoutSB; + QLineEdit* addArgED; + KURLRequester* pathED; + bool _removeJavaDomainSettings; + + JavaDomainListView *domainSpecific; + + friend class JavaDomainListView; +}; + +#endif // __HTML_OPTIONS_H__ + diff --git a/kcontrol/konqhtml/jsopts.cpp b/kcontrol/konqhtml/jsopts.cpp new file mode 100644 index 000000000..b6522f767 --- /dev/null +++ b/kcontrol/konqhtml/jsopts.cpp @@ -0,0 +1,231 @@ +// (c) Martin R. Jones 1996 +// (c) Bernd Wuebben 1998 +// KControl port & modifications +// (c) Torben Weis 1998 +// End of the KControl port, added 'kfmclient configure' call. +// (c) David Faure 1998 +// New configuration scheme for JavaScript +// (C) Kalle Dalheimer 2000 +// Major cleanup & Java/JS settings splitted +// (c) Daniel Molkentin 2000 +// Big changes to accommodate per-domain settings +// (c) Leo Savernik 2002-2003 + +#include +#include +#include +#include +#include +#include +#include + +#if defined Q_WS_X11 && !defined K_WS_QTONLY +#include +#endif + +#include "htmlopts.h" +#include "policydlg.h" + +#include + +#include "jsopts.h" + +#include "jsopts.moc" + +// == class KJavaScriptOptions ===== + +KJavaScriptOptions::KJavaScriptOptions( KConfig* config, QString group, QWidget *parent, + const char *name ) : + KCModule( parent, name ), + _removeJavaScriptDomainAdvice(false), + m_pConfig( config ), m_groupname( group ), + js_global_policies(config,group,true,QString::null), + _removeECMADomainSettings(false) +{ + QVBoxLayout* toplevel = new QVBoxLayout( this, 10, 5 ); + + // the global checkbox + QGroupBox* globalGB = new QGroupBox( 2, Vertical, i18n( "Global Settings" ), this ); + toplevel->addWidget( globalGB ); + + enableJavaScriptGloballyCB = new QCheckBox( i18n( "Ena&ble JavaScript globally" ), globalGB ); + QWhatsThis::add( enableJavaScriptGloballyCB, i18n("Enables the execution of scripts written in ECMA-Script " + "(also known as JavaScript) that can be contained in HTML pages. " + "Note that, as with any browser, enabling scripting languages can be a security problem.") ); + connect( enableJavaScriptGloballyCB, SIGNAL( clicked() ), SLOT( changed() ) ); + connect( enableJavaScriptGloballyCB, SIGNAL( clicked() ), this, SLOT( slotChangeJSEnabled() ) ); + + reportErrorsCB = new QCheckBox( i18n( "Report &errors" ), globalGB ); + QWhatsThis::add( reportErrorsCB, i18n("Enables the reporting of errors that occur when JavaScript " + "code is executed.") ); + connect( reportErrorsCB, SIGNAL( clicked() ), SLOT( changed() ) ); + + jsDebugWindow = new QCheckBox( i18n( "Enable debu&gger" ), globalGB ); + QWhatsThis::add( jsDebugWindow, i18n( "Enables builtin JavaScript debugger." ) ); + connect( jsDebugWindow, SIGNAL( clicked() ), SLOT( changed() ) ); + + // the domain-specific listview + domainSpecific = new JSDomainListView(m_pConfig,m_groupname,this,this); + connect(domainSpecific,SIGNAL(changed(bool)),SLOT(changed())); + toplevel->addWidget( domainSpecific, 2 ); + + QWhatsThis::add( domainSpecific, i18n("Here you can set specific JavaScript policies for any particular " + "host or domain. To add a new policy, simply click the New... " + "button and supply the necessary information requested by the " + "dialog box. To change an existing policy, click on the Change... " + "button and choose the new policy from the policy dialog box. Clicking " + "on the Delete button will remove the selected policy causing the default " + "policy setting to be used for that domain. The Import and Export " + "button allows you to easily share your policies with other people by allowing " + "you to save and retrieve them from a zipped file.") ); + + QString wtstr = i18n("This box contains the domains and hosts you have set " + "a specific JavaScript policy for. This policy will be used " + "instead of the default policy for enabling or disabling JavaScript on pages sent by these " + "domains or hosts.

      Select a policy and use the controls on " + "the right to modify it."); + QWhatsThis::add( domainSpecific->listView(), wtstr ); + + QWhatsThis::add( domainSpecific->importButton(), i18n("Click this button to choose the file that contains " + "the JavaScript policies. These policies will be merged " + "with the existing ones. Duplicate entries are ignored.") ); + QWhatsThis::add( domainSpecific->exportButton(), i18n("Click this button to save the JavaScript policy to a zipped " + "file. The file, named javascript_policy.tgz, will be " + "saved to a location of your choice." ) ); + + // the frame containing the JavaScript policies settings + js_policies_frame = new JSPoliciesFrame(&js_global_policies, + i18n("Global JavaScript Policies"),this); + toplevel->addWidget(js_policies_frame); + connect(js_policies_frame, SIGNAL(changed()), SLOT(changed())); + + // Finally do the loading + load(); +} + +void KJavaScriptOptions::load() +{ + load( false ); +} + +void KJavaScriptOptions::load( bool useDefaults ) +{ + m_pConfig->setReadDefaults( useDefaults ); + + // *** load *** + m_pConfig->setGroup(m_groupname); + + if( m_pConfig->hasKey( "ECMADomains" ) ) + domainSpecific->initialize(m_pConfig->readListEntry("ECMADomains")); + else if( m_pConfig->hasKey( "ECMADomainSettings" ) ) { + domainSpecific->updateDomainListLegacy( m_pConfig->readListEntry( "ECMADomainSettings" ) ); + _removeECMADomainSettings = true; + } else { + domainSpecific->updateDomainListLegacy(m_pConfig->readListEntry("JavaScriptDomainAdvice") ); + _removeJavaScriptDomainAdvice = true; + } + + // *** apply to GUI *** + js_policies_frame->load(); + enableJavaScriptGloballyCB->setChecked( + js_global_policies.isFeatureEnabled()); + reportErrorsCB->setChecked( m_pConfig->readBoolEntry("ReportJavaScriptErrors",false)); + jsDebugWindow->setChecked( m_pConfig->readBoolEntry( "EnableJavaScriptDebug",false ) ); + + emit changed(useDefaults); +} + +void KJavaScriptOptions::defaults() +{ + load( true ); +} + +void KJavaScriptOptions::save() +{ + m_pConfig->setGroup(m_groupname); + m_pConfig->writeEntry( "ReportJavaScriptErrors", reportErrorsCB->isChecked() ); + m_pConfig->writeEntry( "EnableJavaScriptDebug", jsDebugWindow->isChecked() ); + + domainSpecific->save(m_groupname,"ECMADomains"); + js_policies_frame->save(); + + if (_removeECMADomainSettings) { + m_pConfig->deleteEntry("ECMADomainSettings"); + _removeECMADomainSettings = false; + } + + // sync moved to KJSParts::save +// m_pConfig->sync(); + emit changed(false); +} + +void KJavaScriptOptions::slotChangeJSEnabled() { + js_global_policies.setFeatureEnabled(enableJavaScriptGloballyCB->isChecked()); +} + +// == class JSDomainListView ===== + +JSDomainListView::JSDomainListView(KConfig *config,const QString &group, + KJavaScriptOptions *options, QWidget *parent,const char *name) + : DomainListView(config,i18n( "Do&main-Specific" ), parent, name), + group(group), options(options) { +} + +JSDomainListView::~JSDomainListView() { +} + +void JSDomainListView::updateDomainListLegacy(const QStringList &domainConfig) +{ + domainSpecificLV->clear(); + JSPolicies pol(config,group,false); + pol.defaults(); + for (QStringList::ConstIterator it = domainConfig.begin(); + it != domainConfig.end(); ++it) { + QString domain; + KHTMLSettings::KJavaScriptAdvice javaAdvice; + KHTMLSettings::KJavaScriptAdvice javaScriptAdvice; + KHTMLSettings::splitDomainAdvice(*it, domain, javaAdvice, javaScriptAdvice); + if (javaScriptAdvice != KHTMLSettings::KJavaScriptDunno) { + QListViewItem *index = + new QListViewItem( domainSpecificLV, domain, + i18n(KHTMLSettings::adviceToStr(javaScriptAdvice)) ); + + pol.setDomain(domain); + pol.setFeatureEnabled(javaScriptAdvice != KHTMLSettings::KJavaScriptReject); + domainPolicies[index] = new JSPolicies(pol); + } + } +} + +void JSDomainListView::setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *pol) { + JSPolicies *jspol = static_cast(pol); + QString caption; + switch (trigger) { + case AddButton: + caption = i18n( "New JavaScript Policy" ); + jspol->setFeatureEnabled(!options->enableJavaScriptGloballyCB->isChecked()); + break; + case ChangeButton: caption = i18n( "Change JavaScript Policy" ); break; + default: ; // inhibit gcc warning + }/*end switch*/ + pDlg.setCaption(caption); + pDlg.setFeatureEnabledLabel(i18n("JavaScript policy:")); + pDlg.setFeatureEnabledWhatsThis(i18n("Select a JavaScript policy for " + "the above host or domain.")); + JSPoliciesFrame *panel = new JSPoliciesFrame(jspol,i18n("Domain-Specific " + "JavaScript Policies"),pDlg.mainWidget()); + panel->refresh(); + pDlg.addPolicyPanel(panel); + pDlg.refresh(); +} + +JSPolicies *JSDomainListView::createPolicies() { + return new JSPolicies(config,group,false); +} + +JSPolicies *JSDomainListView::copyPolicies(Policies *pol) { + return new JSPolicies(*static_cast(pol)); +} + + diff --git a/kcontrol/konqhtml/jsopts.h b/kcontrol/konqhtml/jsopts.h new file mode 100644 index 000000000..41f5c87fd --- /dev/null +++ b/kcontrol/konqhtml/jsopts.h @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------------- +// +// HTML Options +// +// (c) Martin R. Jones 1996 +// +// Port to KControl +// (c) Torben Weis 1998 + +#ifndef __JSOPTS_H__ +#define __JSOPTS_H__ + +#include + +#include "domainlistview.h" +#include "jspolicies.h" + +class KColorButton; +class KConfig; +class KURLRequester; +class QCheckBox; +class QComboBox; +class QLineEdit; +class QListViewItem; +class QRadioButton; +class QSpinBox; +class QButtonGroup; + +class PolicyDialog; + +class KJavaScriptOptions; + +/** JavaScript-specific enhancements to the domain list view + */ +class JSDomainListView : public DomainListView { + Q_OBJECT +public: + JSDomainListView(KConfig *config,const QString &group,KJavaScriptOptions *opt, + QWidget *parent,const char *name = 0); + virtual ~JSDomainListView(); + + /** remnant for importing pre KDE 3.2 settings + */ + void updateDomainListLegacy(const QStringList &domainConfig); + +protected: + virtual JSPolicies *createPolicies(); + virtual JSPolicies *copyPolicies(Policies *pol); + virtual void setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *copy); + +private: + QString group; + KJavaScriptOptions *options; +}; + +class KJavaScriptOptions : public KCModule +{ + Q_OBJECT +public: + KJavaScriptOptions( KConfig* config, QString group, QWidget* parent = 0, const char* name = 0 ); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + + bool _removeJavaScriptDomainAdvice; + +private slots: + void slotChangeJSEnabled(); + +private: + + KConfig *m_pConfig; + QString m_groupname; + JSPolicies js_global_policies; + QCheckBox *enableJavaScriptGloballyCB; + QCheckBox *reportErrorsCB; + QCheckBox *jsDebugWindow; + JSPoliciesFrame *js_policies_frame; + bool _removeECMADomainSettings; + + JSDomainListView* domainSpecific; + + friend class JSDomainListView; +}; + +#endif // __JSOPTS_H__ + diff --git a/kcontrol/konqhtml/jspolicies.cpp b/kcontrol/konqhtml/jspolicies.cpp new file mode 100644 index 000000000..d4afbbd1d --- /dev/null +++ b/kcontrol/konqhtml/jspolicies.cpp @@ -0,0 +1,407 @@ +/* + Copyright (c) 2002 Leo Savernik + Derived from jsopt.cpp, code copied from there is copyrighted to its + respective owners. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "jspolicies.h" + +// == class JSPolicies == + +JSPolicies::JSPolicies(KConfig* config,const QString &group, + bool global,const QString &domain) : + Policies(config,group,global,domain,"javascript.","EnableJavaScript") { +} + +JSPolicies::JSPolicies() : Policies(0,QString::null,false, + QString::null,QString::null,QString::null) { +} + +JSPolicies::~JSPolicies() { +} + +void JSPolicies::load() { + Policies::load(); + + QString key; + +// enableJavaScriptDebugCB->setChecked( m_pConfig->readBoolEntry("EnableJavaScriptDebug",false)); +// enableDebugOutputCB->setChecked( m_pConfig->readBoolEntry("EnableJSDebugOutput") ); + key = prefix + "WindowOpenPolicy"; + window_open = config->readUnsignedNumEntry(key, + is_global ? KHTMLSettings::KJSWindowOpenSmart : INHERIT_POLICY); + + key = prefix + "WindowResizePolicy"; + window_resize = config->readUnsignedNumEntry(key, + is_global ? KHTMLSettings::KJSWindowResizeAllow : INHERIT_POLICY); + + key = prefix + "WindowMovePolicy"; + window_move = config->readUnsignedNumEntry(key, + is_global ? KHTMLSettings::KJSWindowMoveAllow : INHERIT_POLICY); + + key = prefix + "WindowFocusPolicy"; + window_focus = config->readUnsignedNumEntry(key, + is_global ? KHTMLSettings::KJSWindowFocusAllow : INHERIT_POLICY); + + key = prefix + "WindowStatusPolicy"; + window_status = config->readUnsignedNumEntry(key, + is_global ? KHTMLSettings::KJSWindowStatusAllow : INHERIT_POLICY); +} + +void JSPolicies::defaults() { + Policies::defaults(); +// enableJavaScriptGloballyCB->setChecked( true ); +// enableJavaScriptDebugCB->setChecked( false ); +// js_popup->setButton(0); + // enableDebugOutputCB->setChecked( false ); + window_open = is_global ? KHTMLSettings::KJSWindowOpenSmart : INHERIT_POLICY; + window_resize = is_global ? KHTMLSettings::KJSWindowResizeAllow : INHERIT_POLICY; + window_move = is_global ? KHTMLSettings::KJSWindowMoveAllow : INHERIT_POLICY; + window_focus = is_global ? KHTMLSettings::KJSWindowFocusAllow : INHERIT_POLICY; + window_status = is_global ? KHTMLSettings::KJSWindowStatusAllow : INHERIT_POLICY; +} + +void JSPolicies::save() { + Policies::save(); + + QString key; + key = prefix + "WindowOpenPolicy"; + if (window_open != INHERIT_POLICY) + config->writeEntry(key, window_open); + else + config->deleteEntry(key); + + key = prefix + "WindowResizePolicy"; + if (window_resize != INHERIT_POLICY) + config->writeEntry(key, window_resize); + else + config->deleteEntry(key); + + key = prefix + "WindowMovePolicy"; + if (window_move != INHERIT_POLICY) + config->writeEntry(key, window_move); + else + config->deleteEntry(key); + + key = prefix + "WindowFocusPolicy"; + if (window_focus != INHERIT_POLICY) + config->writeEntry(key, window_focus); + else + config->deleteEntry(key); + + key = prefix + "WindowStatusPolicy"; + if (window_status != INHERIT_POLICY) + config->writeEntry(key, window_status); + else + config->deleteEntry(key); + + // don't do a config->sync() here for sake of efficiency +} + +// == class JSPoliciesFrame == + +JSPoliciesFrame::JSPoliciesFrame(JSPolicies *policies, const QString &title, + QWidget* parent) : + QGroupBox(title, parent, "jspoliciesframe"), + policies(policies) { + + bool is_per_domain = !policies->isGlobal(); + + setColumnLayout(0, Qt::Vertical); + layout()->setSpacing(0); + layout()->setMargin(0); + QGridLayout *this_layout = new QGridLayout(layout(),5,10+is_per_domain*2); + this_layout->setAlignment(Qt::AlignTop); + this_layout->setSpacing(3); + this_layout->setMargin(11); + + QString wtstr; // what's this description + int colIdx; // column index + + // === window.open ================================ + colIdx = 0; + QLabel *label = new QLabel(i18n("Open new windows:"),this); + this_layout->addWidget(label,0,colIdx++); + + js_popup = new QButtonGroup(this); + js_popup->setExclusive(true); + js_popup->setHidden(true); + + QRadioButton* policy_btn; + if (is_per_domain) { + policy_btn = new QRadioButton(i18n("Use global"), this); + QWhatsThis::add(policy_btn,i18n("Use setting from global policy.")); + js_popup->insert(policy_btn,INHERIT_POLICY); + this_layout->addWidget(policy_btn,0,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + }/*end if*/ + + policy_btn = new QRadioButton(i18n("Allow"), this); + QWhatsThis::add(policy_btn,i18n("Accept all popup window requests.")); + js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenAllow); + this_layout->addWidget(policy_btn,0,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Ask"), this); + QWhatsThis::add(policy_btn,i18n("Prompt every time a popup window is requested.")); + js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenAsk); + this_layout->addWidget(policy_btn,0,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Deny"), this); + QWhatsThis::add(policy_btn,i18n("Reject all popup window requests.")); + js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenDeny); + this_layout->addWidget(policy_btn,0,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Smart"), this); + QWhatsThis::add(policy_btn, i18n("Accept popup window requests only when " + "links are activated through an explicit " + "mouse click or keyboard operation.")); + js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenSmart); + this_layout->addWidget(policy_btn,0,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + wtstr = i18n("If you disable this, Konqueror will stop " + "interpreting the window.open() " + "JavaScript command. This is useful if you " + "regularly visit sites that make extensive use " + "of this command to pop up ad banners.
      " + "
      Note: Disabling this option might " + "also break certain sites that require " + "window.open() for proper operation. Use " + "this feature carefully."); + QWhatsThis::add(label, wtstr); + connect(js_popup, SIGNAL(clicked(int)), SLOT(setWindowOpenPolicy(int))); + + // === window.resizeBy/resizeTo ================================ + colIdx = 0; + label = new QLabel(i18n("Resize window:"),this); + this_layout->addWidget(label,1,colIdx++); + + js_resize = new QButtonGroup(this); + js_resize->setExclusive(true); + js_resize->setHidden(true); + + if (is_per_domain) { + policy_btn = new QRadioButton(i18n("Use global"), this); + QWhatsThis::add(policy_btn,i18n("Use setting from global policy.")); + js_resize->insert(policy_btn,INHERIT_POLICY); + this_layout->addWidget(policy_btn,1,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + }/*end if*/ + + policy_btn = new QRadioButton(i18n("Allow"), this); + QWhatsThis::add(policy_btn,i18n("Allow scripts to change the window size.")); + js_resize->insert(policy_btn,KHTMLSettings::KJSWindowResizeAllow); + this_layout->addWidget(policy_btn,1,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Ignore"), this); + QWhatsThis::add( policy_btn,i18n("Ignore attempts of scripts to change the window size. " + "The web page will think it changed the " + "size but the actual window is not affected.")); + js_resize->insert(policy_btn,KHTMLSettings::KJSWindowResizeIgnore); + this_layout->addWidget(policy_btn,1,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + wtstr = i18n("Some websites change the window size on their own by using " + "window.resizeBy() or window.resizeTo(). " + "This option specifies the treatment of such " + "attempts."); + QWhatsThis::add(label, wtstr); + connect(js_resize, SIGNAL(clicked(int)), SLOT(setWindowResizePolicy(int))); + + // === window.moveBy/moveTo ================================ + colIdx = 0; + label = new QLabel(i18n("Move window:"),this); + this_layout->addWidget(label,2,colIdx++); + + js_move = new QButtonGroup(this); + js_move->setExclusive(true); + js_move->setHidden(true); + + if (is_per_domain) { + policy_btn = new QRadioButton(i18n("Use global"), this); + QWhatsThis::add(policy_btn,i18n("Use setting from global policy.")); + js_move->insert(policy_btn,INHERIT_POLICY); + this_layout->addWidget(policy_btn,2,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + }/*end if*/ + + policy_btn = new QRadioButton(i18n("Allow"), this); + QWhatsThis::add(policy_btn,i18n("Allow scripts to change the window position.")); + js_move->insert(policy_btn,KHTMLSettings::KJSWindowMoveAllow); + this_layout->addWidget(policy_btn,2,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Ignore"), this); + QWhatsThis::add(policy_btn,i18n("Ignore attempts of scripts to change the window position. " + "The web page will think it moved the " + "window but the actual position is not affected.")); + js_move->insert(policy_btn,KHTMLSettings::KJSWindowMoveIgnore); + this_layout->addWidget(policy_btn,2,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + wtstr = i18n("Some websites change the window position on their own by using " + "window.moveBy() or window.moveTo(). " + "This option specifies the treatment of such " + "attempts."); + QWhatsThis::add(label, wtstr); + connect(js_move, SIGNAL(clicked(int)), SLOT(setWindowMovePolicy(int))); + + // === window.focus ================================ + colIdx = 0; + label = new QLabel(i18n("Focus window:"),this); + this_layout->addWidget(label,3,colIdx++); + + js_focus = new QButtonGroup(this); + js_focus->setExclusive(true); + js_focus->setHidden(true); + + if (is_per_domain) { + policy_btn = new QRadioButton(i18n("Use global"), this); + QWhatsThis::add(policy_btn,i18n("Use setting from global policy.")); + js_focus->insert(policy_btn,INHERIT_POLICY); + this_layout->addWidget(policy_btn,3,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + }/*end if*/ + + policy_btn = new QRadioButton(i18n("Allow"), this); + QWhatsThis::add( policy_btn,i18n("Allow scripts to focus the window.") ); + js_focus->insert(policy_btn,KHTMLSettings::KJSWindowFocusAllow); + this_layout->addWidget(policy_btn,3,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Ignore"), this); + QWhatsThis::add( policy_btn,i18n("Ignore attempts of scripts to focus the window. " + "The web page will think it brought " + "the focus to the window but the actual " + "focus will remain unchanged.") ); + js_focus->insert(policy_btn,KHTMLSettings::KJSWindowFocusIgnore); + this_layout->addWidget(policy_btn,3,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + wtstr = i18n("Some websites set the focus to their browser window on their " + "own by using window.focus(). This usually leads to " + "the window being moved to the front interrupting whatever " + "action the user was dedicated to at that time. " + "This option specifies the treatment of such " + "attempts."); + QWhatsThis::add(label, wtstr); + connect(js_focus, SIGNAL(clicked(int)), SLOT(setWindowFocusPolicy(int))); + + // === window.status ================================ + colIdx = 0; + label = new QLabel(i18n("Modify status bar text:"),this); + this_layout->addWidget(label,4,colIdx++); + + js_statusbar = new QButtonGroup(this); + js_statusbar->setExclusive(true); + js_statusbar->setHidden(true); + + if (is_per_domain) { + policy_btn = new QRadioButton(i18n("Use global"), this); + QWhatsThis::add(policy_btn,i18n("Use setting from global policy.")); + js_statusbar->insert(policy_btn,INHERIT_POLICY); + this_layout->addWidget(policy_btn,4,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + }/*end if*/ + + policy_btn = new QRadioButton(i18n("Allow"), this); + QWhatsThis::add(policy_btn,i18n("Allow scripts to change the text of the status bar.")); + js_statusbar->insert(policy_btn,KHTMLSettings::KJSWindowStatusAllow); + this_layout->addWidget(policy_btn,4,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + policy_btn = new QRadioButton(i18n("Ignore"), this); + QWhatsThis::add( policy_btn,i18n("Ignore attempts of scripts to change the status bar text. " + "The web page will think it changed " + "the text but the actual text will remain " + "unchanged.") ); + js_statusbar->insert(policy_btn,KHTMLSettings::KJSWindowStatusIgnore); + this_layout->addWidget(policy_btn,4,colIdx++); + this_layout->addItem(new QSpacerItem(10,0),0,colIdx++); + + wtstr = i18n("Some websites change the status bar text by setting " + "window.status or window.defaultStatus, " + "thus sometimes preventing displaying the real URLs of hyperlinks. " + "This option specifies the treatment of such " + "attempts."); + QWhatsThis::add(label, wtstr); + connect(js_statusbar, SIGNAL(clicked(int)), SLOT(setWindowStatusPolicy(int))); +} + +JSPoliciesFrame::~JSPoliciesFrame() { +} + +void JSPoliciesFrame::refresh() { + QRadioButton *button; + button = static_cast(js_popup->find( + policies->window_open)); + if (button != 0) button->setChecked(true); + button = static_cast(js_resize->find( + policies->window_resize)); + if (button != 0) button->setChecked(true); + button = static_cast(js_move->find( + policies->window_move)); + if (button != 0) button->setChecked(true); + button = static_cast(js_focus->find( + policies->window_focus)); + if (button != 0) button->setChecked(true); + button = static_cast(js_statusbar->find( + policies->window_status)); + if (button != 0) button->setChecked(true); +} + +void JSPoliciesFrame::setWindowOpenPolicy(int id) { + policies->window_open = id; + emit changed(); +} + +void JSPoliciesFrame::setWindowResizePolicy(int id) { + policies->window_resize = id; + emit changed(); +} + +void JSPoliciesFrame::setWindowMovePolicy(int id) { + policies->window_move = id; + emit changed(); +} + +void JSPoliciesFrame::setWindowFocusPolicy(int id) { + policies->window_focus = id; + emit changed(); +} + +void JSPoliciesFrame::setWindowStatusPolicy(int id) { + policies->window_status = id; + emit changed(); +} + +#include "jspolicies.moc" diff --git a/kcontrol/konqhtml/jspolicies.h b/kcontrol/konqhtml/jspolicies.h new file mode 100644 index 000000000..a955abc96 --- /dev/null +++ b/kcontrol/konqhtml/jspolicies.h @@ -0,0 +1,270 @@ +/* + Copyright (c) 2002 Leo Savernik + Derived from jsopt.h, code copied from there is copyrighted to its + respective owners. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __JSPOLICIES_H__ +#define __JSPOLICIES_H__ + +#include +#include + +#include + +#include "policies.h" + +class KConfig; +class QRadioButton; +class QButtonGroup; + +// special value for inheriting a global policy +#define INHERIT_POLICY 32767 + +/** + * @short Contains all the JavaScript policies and methods for their manipulation. + * + * This class provides access to the JavaScript policies. + * + * @author Leo Savernik + */ +class JSPolicies : public Policies { +public: +#if 0 + /** + * Enumeration for all policies + */ + enum Policies { JavaScriptEnabled = 0, WindowOpen, WindowResize, + WindowMove, WindowFocus, WindowStatus, NumPolicies }; +#endif + + /** + * constructor + * @param config configuration to initialize this instance from + * @param group config group to use if this instance contains the global + * policies (global == true) + * @param global true if this instance contains the global policy settings, + * false if this instance contains policies specific for a domain. + * @param domain name of the domain this instance is used to configure the + * policies for (case insensitive, ignored if global == true) + */ + JSPolicies(KConfig* config, const QString &group, bool global, + const QString &domain = QString::null); + + /** + * dummy constructor to make QMap happy. + * + * Never construct an object by using this. + * @internal + */ + JSPolicies(); + + virtual ~JSPolicies(); + + /** + * Returns whether the WindowOpen policy is inherited. + */ + bool isWindowOpenPolicyInherited() const { + return window_open == INHERIT_POLICY; + } + /** + * Returns the current value of the WindowOpen policy. + * + * This will return an illegal value if isWindowOpenPolicyInherited is + * true. + */ + KHTMLSettings::KJSWindowOpenPolicy windowOpenPolicy() const { + return (KHTMLSettings::KJSWindowOpenPolicy)window_open; + } + + /** + * Returns whether the WindowResize policy is inherited. + */ + bool isWindowResizePolicyInherited() const { + return window_resize == INHERIT_POLICY; + } + /** + * Returns the current value of the WindowResize policy. + * + * This will return an illegal value if isWindowResizePolicyInherited is + * true. + */ + KHTMLSettings::KJSWindowResizePolicy windowResizePolicy() const { + return (KHTMLSettings::KJSWindowResizePolicy)window_resize; + } + + /** + * Returns whether the WindowMove policy is inherited. + */ + bool isWindowMovePolicyInherited() const { + return window_move == INHERIT_POLICY; + } + /** + * Returns the current value of the WindowMove policy. + * + * This will return an illegal value if isWindowMovePolicyInherited is + * true. + */ + KHTMLSettings::KJSWindowMovePolicy windowMovePolicy() const { + return (KHTMLSettings::KJSWindowMovePolicy)window_move; + } + + /** + * Returns whether the WindowFocus policy is inherited. + */ + bool isWindowFocusPolicyInherited() const { + return window_focus == INHERIT_POLICY; + } + /** + * Returns the current value of the WindowFocus policy. + * + * This will return an illegal value if isWindowFocusPolicyInherited is + * true. + */ + KHTMLSettings::KJSWindowFocusPolicy windowFocusPolicy() const { + return (KHTMLSettings::KJSWindowFocusPolicy)window_focus; + } + + /** + * Returns whether the WindowStatus policy is inherited. + */ + bool isWindowStatusPolicyInherited() const { + return window_status == INHERIT_POLICY; + } + /** + * Returns the current value of the WindowStatus policy. + * + * This will return an illegal value if isWindowStatusPolicyInherited is + * true. + */ + KHTMLSettings::KJSWindowStatusPolicy windowStatusPolicy() const { + return (KHTMLSettings::KJSWindowStatusPolicy)window_status; + } + + /** + * (re)loads settings from configuration file given in the constructor. + */ + virtual void load(); + /** + * saves current settings to the configuration file given in the constructor + */ + virtual void save(); + /** + * restores the default settings + */ + virtual void defaults(); + +private: + // one of KHTMLSettings::KJSWindowOpenPolicy or INHERIT_POLICY + unsigned int window_open; + // one of KHTMLSettings::KJSWindowResizePolicy or INHERIT_POLICY + unsigned int window_resize; + // one of KHTMLSettings::KJSWindowMovePolicy or INHERIT_POLICY + unsigned int window_move; + // one of KHTMLSettings::KJSWindowFocusPolicy or INHERIT_POLICY + unsigned int window_focus; + // one of KHTMLSettings::KJSWindowStatusPolicy or INHERIT_POLICY + unsigned int window_status; + + friend class JSPoliciesFrame; // for changing policies +}; + +/** + * @short Provides a framed widget with controls for the JavaScript policy settings. + * + * This widget contains controls for changing all JavaScript policies + * except the JavaScript enabled policy itself. The rationale behind this is + * that the enabled policy be separate from the rest in a prominent + * place. + * + * It is suitable for the global policy settings as well as for the + * domain-specific settings. + * + * The difference between global and domain-specific is the existence of + * a special inheritance option in the latter case. That way domain-specific + * policies can inherit their value from the global policies. + * + * @author Leo Savernik + */ +class JSPoliciesFrame : public QGroupBox { + Q_OBJECT +public: + /** + * constructor + * @param policies associated object containing the policy values. This + * object will be updated accordingly as the settings are changed. + * @param title title for group box + * @param parent parent widget + */ + JSPoliciesFrame(JSPolicies *policies, const QString &title, + QWidget* parent = 0); + + virtual ~JSPoliciesFrame(); + + /** + * updates the controls to resemble the status of the underlying + * JSPolicies object. + */ + void refresh(); + /** + * (re)loads settings from configuration file given in the constructor. + */ + void load() { + policies->load(); + refresh(); + } + /** + * saves current settings to the configuration file given in the constructor + */ + void save() { + policies->save(); + } + /** + * restores the default settings + */ + void defaults() { + policies->defaults(); + refresh(); + } + +signals: + /** + * emitted every time an option has been changed + */ + void changed(); + +private slots: + void setWindowOpenPolicy(int id); + void setWindowResizePolicy(int id); + void setWindowMovePolicy(int id); + void setWindowFocusPolicy(int id); + void setWindowStatusPolicy(int id); + +private: + + JSPolicies *policies; + QButtonGroup *js_popup; + QButtonGroup *js_resize; + QButtonGroup *js_move; + QButtonGroup *js_focus; + QButtonGroup *js_statusbar; +}; + + +#endif // __JSPOLICIES_H__ + diff --git a/kcontrol/konqhtml/khtml_behavior.desktop b/kcontrol/konqhtml/khtml_behavior.desktop new file mode 100644 index 000000000..60719d007 --- /dev/null +++ b/kcontrol/konqhtml/khtml_behavior.desktop @@ -0,0 +1,231 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/khtml/index.html#kbrowse-html +Icon=konqueror +Exec=kcmshell khtml_behavior + + +X-KDE-Library=konqhtml +X-KDE-FactoryName=khtml_behavior + +Name=Web Behavior +Name[af]=Web Gedrag +Name[ar]=سلوك الشبكة +Name[az]=Veb Davranışı +Name[be]=Паводзіны ў Сеціве +Name[bg]=Уеб браузър +Name[bn]=ওয়েব আচরণ +Name[br]=Emzalc'h ar gwiad +Name[bs]=Ponašanje web preglednika +Name[ca]=Comportament web +Name[cs]=Chování na webu +Name[csb]=Przezéranié WWW +Name[cy]=Ymddygiad Gwê +Name[da]=WWW-Opførsel +Name[de]=Webverhalten +Name[el]=Συμπεριφορά ιστού +Name[en_GB]=Web Behaviour +Name[eo]=TTT-Konduto +Name[es]=Comportamiento +Name[et]=Veebilehitseja käitumine +Name[eu]=Web portaera +Name[fa]=رفتار وب +Name[fi]=Verkkokäyttäytyminen +Name[fr]=Comportement web +Name[fy]=Webgedrach +Name[ga]=Oibriú Lín +Name[gl]=Comportamento Web +Name[he]=התנהגות רשת +Name[hi]=वेब बर्ताव +Name[hr]=Web ponašanje +Name[hu]=Webes működés +Name[is]=Vefhegðun +Name[it]=Comportamento Web +Name[ja]=ウェブでの挙動 +Name[ka]=წევ ქცევა +Name[kk]=Веб қасиеттері +Name[km]=ឥរិយាបថ​បណ្ដាញ +Name[ko]=웹 행동 +Name[lt]=Žiniatinklio elgsena +Name[lv]=Tīmekļa izturēšanās +Name[mk]=Веб-однесување +Name[mn]=Вэб байдал +Name[ms]=Kelakuan Web +Name[mt]=Imġieba web +Name[nb]=Nettoppførsel +Name[nds]=Bedregen in't Nett +Name[ne]=वेभ व्यवहार +Name[nl]=Webgedrag +Name[nn]=Vevåtferd +Name[pa]=ਵੈਬ ਵਿਹਾਰ +Name[pl]=Przeglądanie WWW +Name[pt]=Comportamento na Web +Name[pt_BR]=Comportamento Web +Name[ro]=Comportament web +Name[ru]=Поведение Веб +Name[rw]=Imyitwarire Urubugamakuru +Name[se]=Webláhtten +Name[sk]=Správanie WWW +Name[sl]=Spletno obnašanje +Name[sr]=Веб понашање +Name[sr@Latn]=Veb ponašanje +Name[sv]=Nätbeteende +Name[ta]=வலைப் பண்புகள் +Name[te]=వెబ్ ప్రవర్తన +Name[tg]=Рафтори Вэб +Name[th]=พฤติกรรมของเว็บ +Name[tr]=Web Davranışı +Name[tt]=Web Çağılışı +Name[uk]=Поведінка Навігатора +Name[uz]=Veb xususiyatlari +Name[uz@cyrillic]=Веб хусусиятлари +Name[vi]=Cách hoạt động của duyệt mạng +Name[wa]=Dujhance waibe +Name[zh_CN]=Web 行为 +Name[zh_TW]=網頁行為 +Comment=Configure the browser behavior +Comment[af]=Konfigureer die blaaier gedrag +Comment[ar]=إعداد سلوك المتصفح +Comment[be]=Настаўленні паводзінаў вандроўніка +Comment[bg]=Настройване на уеб браузъра +Comment[bn]=ব্রাউজারের আচরণ কনফিগার করুন +Comment[br]=Kefluniañ emzalc'h ar furcher +Comment[bs]=Podesite ponašanje web preglednika +Comment[ca]=Configura el comportament del navegador +Comment[cs]=Nastavení chování prohlížeče +Comment[csb]=Kònfigùracëjô zachòwaniô przezérnika +Comment[cy]=Ffurfweddu ymddygiad y porydd +Comment[da]=Indstil browserens opførsel +Comment[de]=Verhalten des Webbrowsers festlegen +Comment[el]=Ρυθμίστε τη συμπεριφορά του περιηγητή +Comment[en_GB]=Configure the browser behaviour +Comment[eo]=Agordas la konduton de la TTT-legilo +Comment[es]=Configuración del comportamiento del navegador +Comment[et]=Konquerori veebilehitseja käitumine +Comment[eu]=Konfiguratu arakatzailearen portaera +Comment[fa]=پیکربندی رفتار مرورگر +Comment[fi]=Selaimen asetukset +Comment[fr]=Configuration du comportement du navigateur +Comment[fy]=Hjir kinne jo it gedrach fan de webblêder ynstelle +Comment[ga]=Cumraigh oibriú an bhrabhsálaí +Comment[gl]=Configurar o comportamento do navegador +Comment[he]=שינוי הגדרות פעולת הדפדפן +Comment[hi]=वेब बर्ताव कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje ponašanja preglednika +Comment[hu]=A Konqueror webböngésző részének működési jellemzői +Comment[is]=Stilla hegðan vafrara +Comment[it]=Configura il comportamento del browser +Comment[ja]=ウェブブラウザの挙動を設定 +Comment[ka]=ბრაუზერის ქცევის კონფიგურაცია +Comment[kk]=Браузер қасиеттерін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ឥរិយាបថ​កម្មវិធី​រុករក​បណ្ដាញ +Comment[ko]=브라우저 행동 설정 +Comment[lo]=ປັບແຕ່ງເຊີເວີພຣັອກຊີ +Comment[lt]=Konfigūruoti naršyklės elgesį +Comment[lv]=Konfigurēt pārlūka izturešanos +Comment[mk]=Конфигурирајте го однесувањето на прелистувачот +Comment[mn]=Вэб-Хөтөчийн байдлыг тогтоох +Comment[ms]=Konfigur kalakuan pelayar +Comment[mt]=Ikkonfigura l-imġieba tal-browser +Comment[nb]=Tilpass nettleserens oppførsel +Comment[nds]=Dat Bedregen vun den Nettkieker instellen +Comment[ne]=ब्राउजरको व्यवहार कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u het gedrag van de webbrowser instellen +Comment[nn]=Oppsett av nettlesaråtferda +Comment[nso]=Beakanya maitshwaro a seinyakisi +Comment[pa]=ਝਲਕਾਰਾ ਵਿਹਾਰ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja zachowania przeglądarki +Comment[pt]=Configurar o comportamento do navegador +Comment[pt_BR]=Configura o comportamento do navegador +Comment[ro]=Configurează comportamentul de navigator de web +Comment[ru]=Настройка поведения браузера +Comment[rw]=Kuboneza imyitwarire ya mucukumbuzi +Comment[se]=Heivet mo fierpmádatlogan láhtte +Comment[sk]=Nastavenie správania prehliadača +Comment[sl]=Nastavitve obnašanja brskalnika +Comment[sr]=Подешавање понашања прегледача +Comment[sr@Latn]=Podešavanje ponašanja pregledača +Comment[sv]=Anpassa webbläsarens beteende +Comment[ta]=உலாவியின் இயக்கத்தை வடிவமை +Comment[tg]=Танзими рафтори тафсир +Comment[th]=ปรับแต่งพฤติกรมของบราวเซอร์ +Comment[tr]=Web tarayıcı davranışlarını yapılandır +Comment[tt]=Girgeç çağılışın caylaw +Comment[uk]=Налаштування поведінки навігатора +Comment[uz]=Brauzerning xususiyatlarini moslash +Comment[uz@cyrillic]=Браузернинг хусусиятларини мослаш +Comment[ven]=Dzudzanyani maitele a burausa +Comment[vi]=Cấu hình cách hoạt động của trình duyệt +Comment[wa]=Apontyî l' dujhance do betchteu waibe +Comment[xh]=Qwalasela indlela umkhangeli zincwadi aziphatha ngayo +Comment[zh_CN]=配置浏览器行为 +Comment[zh_TW]=設定瀏覽器行為 +Comment[zu]=Hlanaganisela ukuziphatha komcingi +Keywords=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding +Keywords[az]=konqueror,kfm,səyyah,html,şəbəkə,www,yazı növləri,rənglər,java,javascript,hərf,hərf dəstəsi,kodlama,bağlantılar,rəsmlər,ox +Keywords[be]=Вандроўнік,Сеціва,Шрыфты,Колеры,Сцэнар,Курсор,Спасылкі,Відарысы,Малюнкі,Знаказбор,Знаказборы,konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding +Keywords[bg]=браузър, страници, Интернет, уеб, konqueror,kfm, browser, html, web, www, fonts, colours, colors, java, javascript, cursor, links, images, charsets, character sets, encoding +Keywords[bs]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,kodni raspored,preglednik,fontovi,boje,font,boja,kursor,link,linkovi,slike,slika,skup znakova +Keywords[ca]=konqueror,kfm,navegador,html,web,www,lletres,colorits,colors,java,javascript,cursor,enllaços,imatges,caràcters,joc de caràcters,codificació +Keywords[cs]=Konqueror,Kfm,Prohlížeč,HTML,Web,WWW,Písma,Barvy,Java,JavaScript, Kurzor,Odkazy,Obrázky,Znakové sady,Kódování +Keywords[csb]=konqueror,kfm,przezérnik,html,séc www,fòntë,farwë,java,javascript,kùrsor,lënczi,òbrôzczi,zestôw merków,kòdowanié +Keywords[cy]=konqueror,kfm,porydd,html,gw?,www,ffontiau,lliwiau,java,javascript,cyrchydd,cysylltiadau,delweddau,setiau nodau,nod,amgodiad +Keywords[da]=konqueror,kfm,browser,HTML,net,skrifttyper,farver,java,javascript,markør,henvisninger,billeder,tegnsæt,indkodning +Keywords[de]=Konqueror,Kfm,Browser,HTML,Web,WWW,Schriften,Farben,Java,JavaScript,Cursor,Links,Verknüpfungen,Bilder,Zeichensätze,Encoding +Keywords[el]=konqueror,kfm,περιηγητής,html,ιστός,www,γραμματοσειρές,χρώματα,χρώματα,java,javascript,δρομέας,δεσμοί,εικόνες,σύνολα χαρακτήρων,σύνολα χαρακτήρων,κωδικοποίηση +Keywords[en_GB]=konqueror,kfm,browser,html,web,www,fonts,colours,java,javascript,cursor,links,images,charsets,character sets,encoding +Keywords[eo]=Konkeranto,Kfm,TTT,HTML,WWW,tiparo,koloro,Javo,Javoskripto,kursoro,kursilo,ligo,referenco,bildo,signaro,kodo +Keywords[es]=konqueror,kfm,navegador,html,web,www,tipo de letra,colores,java,javascript,cursor,enlaces,imágenes,mapas de caracteres,codificación +Keywords[et]=konqueror,kfm,veebilehitseja,html,veeb,www,fondid,värvid,java,javascript,kursor,viidad,lingid,pildid,kooditabel,kodeering +Keywords[eu]=konqueror,kfm,arakatzailea,html,web,www,letra-tipoak,koloreak,java,javascript,kurtsorea,linkak,irudiak,karaktere-multzoak,karaktereen hobespenak,kodeketa +Keywords[fa]=konqueror، kfm، مرورگر، زنگام، وب، www، قلمها، رنگها، رنگها، جاوا، جاوااسکریپت، مکان‌نما، پیوندها، تصاویر، نوسه‌گان، نویسه‌گان، کدبندی +Keywords[fi]=konqueror,kfm,selain,html,web,www,kirjasimet,värit,java,javascript,osoitin,linkit,kuvat,merkistöt,koodaus +Keywords[fr]=konqueror,kfm,navigateur,html,web,www,polices,couleurs,java,javascript,curseur,liens,images,jeu de caractères,caractères,codage,encodage +Keywords[fy]=konqueror,kfm,browser,blêder,html,web,www,fonts,lettertypen,kleuren,java,javascript,javaskript,cursor,links,rinnerke,skeakels,ôfbyldingen,charsets,tekensets,karaktersamling,kodearring,ynternet +Keywords[ga]=konqueror,kfm,brabhsálaí,html,gréasán,www,clófhoirne,clónna,dathanna,java,javascript,cúrsóir,naisc,nascanna,íomhánna,tacair charachtair,ionchódú +Keywords[gl]=konqueror,kfm,navegador,html,web,www,fontes,cores,java,javascript,ponteiro,ligazóns,imaxes,carácteres,conxunto de carácteres,codificación +Keywords[he]=גופנים,צבעים,Java,ג'אווה,מצביע,קישורים,תמונות,מערכי תווים,קידוד,WWW,רשת, HTML,דפדפן,KFM,Konqueror, kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links, images,charsets,character sets,encoding +Keywords[hi]=कॉन्करर,केएफएम,ब्राउज़र,एचटीएमएल,वेब,डब्ल्यूडब्ल्यूडब्ल्यू,फ़ॉन्ट्स,रंग,जावा,जावास्क्रिप्ट,संकेतक,लिंक्स,छवि,अक्षर माला,अक्षरमाला,एनकोडिंग +Keywords[hr]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,preglednik,fontovi,boja,boje,pokazivač,veze,slike,znakovi,kodiranje,kodiranje zakova +Keywords[hu]=Konqueror,KFM,böngésző,HTML,web,WWW,betűtípusok,színek,Java,JavaScript,egérmutató,linkek,képek,karakterkészletek,kódolás +Keywords[is]=vafri,vefur,vefurinn,vefsíður,letur,litir,kóðun,stafatafla,bendill,myndir,www,html,stafir +Keywords[it]=konqueror,kfm,browser,html,web,www,caratteri,colori,java,javascript,cursore,collegamenti,link,immagini,set di caratteri,charset,codifica +Keywords[ja]=konqueror,kfm,ブラウザ,html,web,ウェブ,www,フォント,色,色,java,javascript,カーソル,リンク,画像,文字セット,文字セット,エンコーディング +Keywords[km]=konqueror,kfm,កម្មវិធី​រុករក,html,បណ្ដាញ,វើលវ៉ាយវិប,ពុម្ពអក្សរ,ពណ៌,java,javascript,ទស្សន៍ទ្រនិច,តំណ,រូបភាព,សំណុំ​តួអក្សរ, +Keywords[lt]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,narašymas,html,tinklalapis,tinklapis,www,šriftai,koloritai,spalvos,,java,java scebarijus,žymeklis,nuorodos,paveikslai,simboliai,koduotė,simbolių rinkinys +Keywords[lv]=iekarotājs,kfm,pārlūks,html,web,www,fonti,krāsojums,krāsas,java,javaskripts,kursors,saites,attēli,simbolukomplekti,simbolu komplekti,kodējums +Keywords[mk]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,прелистувач,веб,фонтови,бои,курсор,врски,слики,знаковни множества,кодирање +Keywords[mn]=Конкюрор,Kfm,Хөтөч,HTML,Вэб,WWW,Бичиг,Өнгө,Java,JavaScript,Түүчээ,Холбоосууд,Links,Зураг,Тэмдэгт олонлог,Кодчилол +Keywords[nb]=konqueror,kfm,nettleser,html,nettet,www,veven,verdensveven,skriftyper,farger,java,javaskript,markør,tegnsett,koding,bilde,skriptspråk,Internett +Keywords[nds]=Konqueror,kfm,Browser,Nettkieker,HTML,web,www,Schriftoorden,Klören,Klöör,Java,JavaScript,Cursor,Links,Biller,Tekensett,Tekensetten,Koderen +Keywords[ne]=कन्क्वेरर, kfm, ब्राउजर,html, वेब,www, फन्ट, रङ, रङहरू, जाभा, जाभास्क्रिप्ट, कर्सर, लिङ्क, छवि, चारसेट, क्यारेक्टर सेट, सङ्केतन +Keywords[nl]=konqueror,kfm,browser,html,web,www,fonts,lettertypen,kleuren,,java,,javascript,cursor,links,koppelingen,afbeeldingen,charsets,tekensets,tekenverzamelingen,codering,internet +Keywords[nn]=Konqueror,KFM,nettlesar,HTML,verdsveven,WWW,skrifter,fargar,Java,JavaScript,skriptspråk,Internett,peikar,lenkjer,bilete,teiknsett,koding,teiknkoding +Keywords[nso]=konqueror,kfm,seinyakisi,html,web,www,difonto,mebala,mebala,java,setlankana sa java,cursor,dikgokaganyi,diponagalo,charsets,dipeakanyo tsa dihlaka,go khouta +Keywords[pa]=ਕੋਨਕਿਉਰਰ,kfm,ਝਲਕਾਰਾ,html,web,www,ਫੋਂਟ, ਰੰਗ, ਜਾਵਾ, ਜਾਵਾ ਸਕ੍ਰਿਪਟ, ਕਰਸਰ, ਸਬੰਧ, ਚਿੱਤਰ, ਅੱਖਰ-ਸੈਟ, ਇੰਕੋਡਿੰਗ +Keywords[pl]=konqueror,kfm,przeglądarka,html,sieć www,czcionki,kolory,java,javascript,kursor,linki,odnośniki,obrazki,zestawy znaków,kodowanie +Keywords[pt]=konqueror,kfm,navegador,html,web,www,tipos de letra,fontes,cores,java,javascript,cursor,ligações,imagens,charsets,mapas de caracteres,codificação +Keywords[pt_BR]=Konqueror,kfm,navegador,html,web,WWW,fontes,cores,java,javascript, cursor,ligações,imagens,conjuntos de caracteres,codificação +Keywords[ro]=konqueror,kfm,navigator,browser,html,web,www,font,culori,java,javascript,cursor,legături,imagini,set de caractere,codare +Keywords[rw]=Konqueror,kfm,mucukumbuzi,html,urubuga,www,imyandikire, amabara,amabara,java,javascript,inyoborayandika,amahuza,itsinda-nyuguti,amatsinda y'inyuguti,gusobeka +Keywords[se]=konqueror,kfm,fierpmádatlogan,html,web,WWW,fonttat,ivnnit,java,javascript,seaván,liŋkkat,govat,mearkarájut,koden +Keywords[sk]=konqueror,kfm,prehliadač,html,web,www,písma,farby,java,javascript,kurzor,odkazy,obrázky,znakové sady,kódovanie +Keywords[sl]=konqueror,kfm,brskalnik,html,splet,www,pisave,barve,java,javascript,kurzor,povezave,slike,nabori znakov,znakovni nabori,kodiranje +Keywords[sr]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,прегледач,веб,фонтови,боје,показивач,везе,слике,скупови знакова,кодирање +Keywords[sr@Latn]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,pregledač,veb,fontovi,boje,pokazivač,veze,slike,skupovi znakova,kodiranje +Keywords[sv]=konqueror,kfm,webbläsare,html,webb,www,teckensnitt,färger,java,javaskript,länkar,bilder,kodning,teckenuppsättningar +Keywords[ta]=கான்கொரர்,kfm,உலாவி,html,வலை,www,எழுத்துருக்கள்,வண்ணங்கள்,வண்ணங்கள்,ஜாவா,ஜாவா எழுத்துரு,நிலைக்காட்டி,இணைப்புகள்,பிம்பங்கள்,charsets,சொல் அமைப்புகள்,குறியீடு +Keywords[th]=คอนเควอร์เรอร์,kfm,บราวเซอร์,html,เว็บ,www,แบบอักษร,สี,จาวา,จาวาสคริปต์,เคอร์เซอร์,ลิงค์,ภาพ,ชุดรหัสอักขระ,ชุดรหัสอักขระ,การเข้ารหัส +Keywords[tr]=konqueror,kfm,tarayıcı,html,web,www,yazı tipleri,renkler,java,javascript,karakter,karakter seti,kodlama,bağlantılar,resimler,imleç +Keywords[uk]=konqueror,kfm,навігатор,html,шрифти,web,Тенета,кольори,java,javascript,курсор,www,посилання,зображення,набори символів,кодування +Keywords[uz]=konqueror,kfm,html,www,brauzer,veb,shriftlar,belgilar toʻplami,kodlash usuli,java,javascript,bogʻlar,kursor,ranglar +Keywords[uz@cyrillic]=konqueror,kfm,html,www,браузер,веб,шрифтлар,белгилар тўплами,кодлаш усули,java,javascript,боғлар,курсор,ранглар +Keywords[ven]=konqueror,kfm,buronza,html,webu,www,dzifontu,mivhala,mivhala,java,manwalwa a java,cursor,vhukwamani,zwifanyiso,tshasete,mavhekanyele a muanewa,uinikhouda +Keywords[vi]=konqueror,kfm,trình duyệt,html,web,www,phông chữ,màu sắc,màu,java,javascript,con trỏ,liên kết,hình ảnh,ký tự,tập ký tự,mã ký tự +Keywords[wa]=konqueror,kfm,betchteu,html,waibe,www,fontes,coleurs,java,javascript,cursoe,loyéns,imådjes,ecôdaedjes +Keywords[xh]=konqueror,kfm,umkhangeli zincwadi,html,web,www,imigca,imibala,imibala,java,okushicilelwe phantsi kwe java,isalatisi,amakhonkco,imifanekiso,icharsets,amaqela abasebenzi, encoding +Keywords[zh_CN]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,浏览,字体,颜色,光标,链接,图像,字符集,编码 +Keywords[zh_TW]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,java,javascript,cursor,links,images,charsets,character sets,encoding,瀏覽,字型,色彩,顏色,游標,連結,影像,字元,字集,編碼 +Keywords[zu]=konqueror,kfm,umcingi,html,web,www,izinhlobo zamagama, imibala,imibala,java,javascripy,inkomba,izixhumanisi,izithombe,charsets, amaqoqo ezimpawu,ukubhala ngekhodi + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/konqhtml/khtml_filter.desktop b/kcontrol/konqhtml/khtml_filter.desktop new file mode 100644 index 000000000..25356f562 --- /dev/null +++ b/kcontrol/konqhtml/khtml_filter.desktop @@ -0,0 +1,145 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/khtml/index.html#khtml-adblock +Icon=filter +Exec=kcmshell khtml_filter + +X-KDE-Library=konqhtml +X-KDE-FactoryName=khtml_filter + +Name=AdBlocK Filters +Name[af]=Advertensie blok filters +Name[ar]=مرشحات مكافحة الدعايات +Name[be]=Фільтры AdBlocK +Name[bg]=Блокиране на реклами +Name[bn]=অ্যাড্-ব্লক ফিল্টার +Name[br]=Siloù AdBlocK +Name[bs]=AdBlocK filteri +Name[ca]=Filtres de bloqueig publicitari +Name[cs]=AdBlocK filtry +Name[csb]=Flitrë AdBlocK +Name[da]=AdBlocK filtre +Name[de]=Werbefilter +Name[el]=Φίλτρα AdBlocK +Name[eo]=ReklamBloK Filtroj +Name[es]=Filtros de anuncios (AdBlock) +Name[et]=AdBlocK filtrid +Name[eu]=AdBlocK iragazkiak +Name[fa]=پالایه‌های AdBlocK +Name[fi]=AdBlocK-suotimet +Name[fr]=Filtres AdBlocK +Name[fy]=AdBlock-filters +Name[ga]=Scagairí AdBlockK +Name[gl]=Filtros AdBlocK +Name[he]=מסנני חלונות מקופצים (AdBlock) +Name[hr]=AdBlocK filtri +Name[hu]=AdBlocK szűrők +Name[is]=AdBlocK síur +Name[it]=Filtri AdBlocK +Name[ja]=AdBlocK フィルタ +Name[ka]=AdBlocK ფილტრები +Name[kk]=AdBlocK сүзгілері +Name[km]=តម្រង AdBlocK +Name[ko]=AdBlocK 필터 +Name[lt]=AdBlocK filtrai +Name[mk]=AdBlocK-филтри +Name[ms]=Penapis AdBlocK +Name[nb]=Reklamefiltere +Name[nds]=Warvenfilter +Name[ne]=AdBlocK फिल्टर +Name[nl]=AdBlock-filters +Name[nn]=Reklamefilter +Name[pa]=AdBlocK ਫਿਲਟਰ +Name[pl]=Flitry AdBlocK +Name[pt]=Filtros do AdBlock +Name[pt_BR]=Filtros AdBlocK +Name[ro]=Filtre AdBlocK +Name[ru]=Фильтры AdBlocK +Name[rw]=Muyunguruzi AdBlocK +Name[se]=AdBlocK-sillit +Name[sk]=AdBlock filtre +Name[sl]=Filtri AdBlocK +Name[sr]=AdBlocK-ови филтери +Name[sr@Latn]=AdBlocK-ovi filteri +Name[sv]=Reklamblockeringsfilter +Name[te]=ఏడ్ బ్లాక్ గలనులు +Name[tg]=Филтрҳои AdBlocK +Name[th]=ตัวกรองของ AdBlocK +Name[tr]=AdBlocK Filtreleri +Name[tt]=Reklam Sözgeçläre +Name[uk]=Фільтри AdBlocK +Name[uz]=AdBlocK filterlari +Name[uz@cyrillic]=AdBlocK филтерлари +Name[vi]=Lọc Quảng cáo +Name[wa]=Passetes AdBlocK +Name[zh_CN]=广告拦截过滤器 +Name[zh_TW]=AdBlocK 過濾器 + +Comment=Configure Konqueror AdBlocK filters +Comment[af]=Konfigureer die weg Konqueror raporte self +Comment[ar]=إعداد مرشحات Konqueror لمكافحة الدعايات +Comment[be]=Настаўленні фільтраў AdBlocK для Konqueror +Comment[bg]=Настройване на филтрите за блокиране на реклами +Comment[bn]=কনকরার-এ বিজ্ঞাপন আটকাতে ব্যবহৃত ফিল্টার কনফিগার করুন +Comment[br]=Kefluniañ siloù AdBlocK Konqueror +Comment[bs]=Podesite Konqueror AdBlocK filtere +Comment[ca]=Configura els filtres de bloqueig publicitari de Konqueror +Comment[cs]=Zde můžete nastavit blokování reklam +Comment[csb]=Kònfigùracëjô filtrów AdBlocK Konquerora +Comment[da]=Indstil Konquerors adblock filtre +Comment[de]=Hier können Sie Einstellungen zum Werbefilter vornehmen +Comment[el]=Ρυθμίστε τα φίλτρα AdBlocK του Konqueror +Comment[eo]=Agordo de Konkeranto-ReklamBloK filtroj +Comment[es]=Configuración de los filtros de anuncios de Konqueror +Comment[et]=Konqueror AdBlocK filtrite seadistamine +Comment[eu]=Konfiguratu Konqueror AdBlock iragazkiak +Comment[fa]=پیکربندی پالایه‌های AdBlocK Konqueror +Comment[fi]=Aseta Konquerorin AdBlocK-suotimia +Comment[fr]=Configurer les filtres AdBlocK de Konqueror +Comment[fy]=Konfigurearje de filters om reklame te warjen +Comment[ga]=Cumraigh na Scagairí AdBlocK Konqueror +Comment[gl]=Configurar os filtros AdBlocK en Konqueror +Comment[he]=הגדרת מסנני חלונות מקופצים (AdBlock) +Comment[hr]=Konfiguriranje Konqueror AdBlocK filtara +Comment[hu]=A Konqueror AdBlocK szűrőinek beállítása +Comment[is]=Stilla Konqueror AdBlocK síur +Comment[it]=Configura i filtri AdBlock per Konqueror +Comment[ja]=Konqueror AdBlocK フィルタの設定 +Comment[ka]=Configure Konqueror AdBlocK ფილტრები +Comment[kk]=Konqueror AdBlocK сүзгілерді баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធតម្រង​របស់ Konqueror AdBlocK +Comment[ko]=Konqueror AdBlocK 필터 설정 +Comment[lt]=Konfigūruoti Konqueror AdBlocK filtrus +Comment[mk]=Конфигурирајте ги AdBlocK-филтрите на Konqueror +Comment[ms]=Konfigur penapis AdBlocK Konqueror +Comment[nb]=Tilpass Konquerors reklamefiltere +Comment[nds]=Hier kannst Du Konquerors Warvenfilter instellen +Comment[ne]=कन्क्वेरर AdBlocK फिल्टर कन्फिगर गर्नुहोस् +Comment[nl]=Filters voor blokkeren van advertenties in Konqueror instellen +Comment[nn]=Tilpass reklamefiltera til Konqueror +Comment[pa]=ਕੋਨਕਿਉਰਰ ਐਡਬਲਾਕ ਫਿਲਟਰ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja filtrów AdBlocK Konquerora +Comment[pt]=Configurar os filtros AdBlock do Konqueror +Comment[pt_BR]=Configura os filtros AdBlocK no Konqueror +Comment[ro]=Configurează filtrele AdBlocK pentru Konqueror +Comment[ru]=Настройка блокирования рекламы для Konqueror +Comment[rw]=Kuboneza muyunguruzi AdBlocK Konqueror +Comment[se]=Heivet Konqueror:a AdBlocK-silliid +Comment[sk]=Nastavenie AdBlock filtrov pre Konqueror +Comment[sl]=Nastavitev filtrov AdBlocK za Konqueror +Comment[sr]=Подешавање AdBlock-ових филтера за Konqueror +Comment[sr@Latn]=Podešavanje AdBlock-ovih filtera za Konqueror +Comment[sv]=Anpassa Konquerors reklamblockeringsfilter +Comment[tg]=Танзимоти қулфи рекламаи Ad барои Konqueror +Comment[th]=ปรับแต่งตัวกรอง AdBlocK ของคอนเควอร์เรอร์ +Comment[tr]=Konqueror'ın AdBlocK Filtrelerini yapılandır +Comment[tt]=Konqueror'dağı reklam kistergeçneñ caylaw +Comment[uk]=Налаштувати фільтри блокування реклами для Konqueror +Comment[uz]=Konqueror uchun AdBlocK filterlarini moslash +Comment[uz@cyrillic]=Konqueror учун AdBlocK филтерларини мослаш +Comment[vi]=Cấu hình cách Konqueror lọc bỏ các quảng cáo khó chịu +Comment[wa]=Apontyî es passetes AdBlocK di Konqueror +Comment[zh_CN]=配置 Konqueror 的广告拦截过滤器 +Comment[zh_TW]=設定 Konqueror AdBlocK 過濾器 + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/konqhtml/khtml_fonts.desktop b/kcontrol/konqhtml/khtml_fonts.desktop new file mode 100644 index 000000000..7c1511840 --- /dev/null +++ b/kcontrol/konqhtml/khtml_fonts.desktop @@ -0,0 +1,230 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/khtml/index.html#kbrowse-appearance +Icon=fonts +Exec=kcmshell khtml_fonts + + +X-KDE-Library=konqhtml +X-KDE-FactoryName=khtml_fonts + +Name=Fonts +Name[af]=Skriftipes +Name[ar]=المحارف +Name[az]=Yazı növləri +Name[be]=Шрыфты +Name[bg]=Шрифтове +Name[bn]=ফন্ট +Name[br]=Fontoù +Name[bs]=Fontovi +Name[ca]=Lletres +Name[cs]=Písma +Name[csb]=Fòntë +Name[cy]=Ffontiau +Name[da]=Skrifttyper +Name[de]=Schriftarten +Name[el]=Γραμματοσειρές +Name[eo]=Tiparoj +Name[es]=Tipos de letra +Name[et]=Fondid +Name[eu]=Letra-tipoak +Name[fa]=قلمها +Name[fi]=Kirjasimet +Name[fr]=Polices +Name[fy]=Lettertypen +Name[ga]=Clónna +Name[gl]=Fontes +Name[he]=גופנים +Name[hi]=फ़ॉन्ट्स +Name[hr]=Fontovi +Name[hu]=Betűtípusok +Name[is]=Letur +Name[it]=Tipi di carattere +Name[ja]=フォント +Name[ka]=ფონტები +Name[kk]=Қаріптер +Name[km]=ពុម្ពអក្សរ +Name[ko]=글꼴 +Name[lo]=ຮູບແບບຕົວອັກສອນ +Name[lt]=Šriftai +Name[lv]=Fonti +Name[mk]=Фонтови +Name[mn]=Бичгүүд +Name[ms]=Fon +Name[nb]=Skrifttype +Name[nds]=Schriftoorden +Name[ne]=फन्ट +Name[nl]=Lettertypen +Name[nn]=Skrifttypar +Name[nso]=Difonto +Name[pa]=ਫੋਂਟ +Name[pl]=Czcionki +Name[pt]=Tipos de Letra +Name[pt_BR]=Fontes +Name[ro]=Fonturi +Name[ru]=Шрифты +Name[rw]=Imyandikire +Name[se]=Fonttat +Name[sk]=Písma +Name[sl]=Pisave +Name[sr]=Фонтови +Name[sr@Latn]=Fontovi +Name[ss]=Timo tetinhlamvu temagama +Name[sv]=Teckensnitt +Name[ta]=எழுத்துருக்கள் +Name[tg]=Ҳарфҳо +Name[th]=แบบอักษร +Name[tr]=Yazıtipleri +Name[tt]=Yazu +Name[uk]=Шрифти +Name[uz]=Shriftlar +Name[uz@cyrillic]=Шрифтлар +Name[ven]=Fontu +Name[vi]=Phông chữ +Name[wa]=Fontes +Name[xh]=Uhlobo lwamagama +Name[zh_CN]=字体 +Name[zh_TW]=字型 +Name[zu]=Izinhlobo zamagama +Comment=Configure the fonts used on web pages +Comment[af]=Konfigureer die skriftipes gebruik word op web bladsye +Comment[ar]=إعداد المحارف المستعملة على صفحات الشبكة +Comment[be]=Настаўленні шрыфтоў для выкарыстання на старонках Сеціва +Comment[bg]=Настройване на шрифтовете за уеб страниците +Comment[bn]=ওয়েব পেজ-এ ব্যবহৃত ফন্ট কনফিগার করুন +Comment[br]=Kefluniañ an nodrezhoù evit ar pajennoù gwiad +Comment[bs]=Podesite fontove korištene na web stranicama +Comment[ca]=Configura els tipus de lletres emprades a les pàgines web +Comment[cs]=Nastavení písem pro webové stránky +Comment[csb]=Kònfigùracëjô fòntów na internetowëch starnach +Comment[cy]=Ffurfweddu'r ffontiau sy'n cael eu defnyddio ar dudalennau gwe +Comment[da]=Indstil de skrifttyper der bruges på netsider +Comment[de]=Schriften für die Darstellung von Webseiten festlegen +Comment[el]=Ρυθμίστε τις γραμματοσειρές που χρησιμοποιούνται στις ιστοσελίδες +Comment[eo]=Agordas la tiparojn kiuj estas uzataj sur TTT-paĝoj +Comment[es]=Configuración de los tipos de letra usados en las páginas web +Comment[et]=Veebilehtedel kasutatavate fontide seadistamine +Comment[eu]=Konfiguratu web orrietan erabiliko diren letra-tipoak +Comment[fa]=پیکربندی قلمهای استفاده‌شده در صفحات وب +Comment[fi]=WWW-sivujen kirjasimet +Comment[fr]=Configuration des polices utilisées sur les pages web +Comment[fy]=Hjir kinne jo de lettertypen die brûkt wurde op de websiden ynstelle +Comment[gl]=Configurar as fontes empregadas nas páxinas web +Comment[he]=שינוי הגדרות הגופנים שנעשה בהם שימוש בדפי אינטרנט +Comment[hi]=वेब पृष्ठ पर उपयोग में आने वाले फ़ॉन्ट्स कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje fontova upotrijebljenih na web-stranicama +Comment[hu]=A Konqueror webböngésző betűtípusainak beállítása +Comment[is]=Stillta letur sem notað er á vefsíðum +Comment[it]=Configura i caratteri da usare nelle pagine web +Comment[ja]=ウェブページで使用するフォントを設定 +Comment[ka]=ვებ გვერდების შრიფტების კონფიგურაცია +Comment[kk]=Веб парақтарда қолданатын қаріптер +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ពុម្ពអក្សរ ដែល​ប្រើ​លើ​ទំព័រ​បណ្ដាញ +Comment[ko]=웹 페이지의 글꼴 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງລັກສະນະແລະຄວາມຮູ້ສຶກໃນການໃຊ້ງານ Konqueror ໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti šriftus, naudojamus tinklalapiuose +Comment[lv]=Šeit Jūs varat konfigurēt tīmekļa lapās lietotos fontus +Comment[mk]=Конфигурирајте ги фонтовите што се користат за веб-страници +Comment[mn]=Вэб хуудас харагдалтын бичиг тогтоох +Comment[ms]=Konfigur fon yang digunakan dalam halaman web +Comment[mt]=Agħżel il-fonts li jintużaw fuq paġni web +Comment[nb]=Tilpass hvilke skrifttyper som brukes på nettsider +Comment[nds]=De Schriftoorden för Nettsieden instellen +Comment[ne]=वेब पृष्ठहरूमा प्रयोग गरिने फन्ट कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de lettertypen die op webpagina's gebruikt worden instellen +Comment[nn]=Oppsett av skrifter for nettsider +Comment[nso]=Beakanya difonto tseo di somiswago go matlakala a web +Comment[pa]=ਵੈੱਬ ਸਫੇ 'ਤੇ ਫੋਂਟ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja czcionek na stronach internetowych +Comment[pt]=Configurar os tipos de letra usados nas páginas Web +Comment[pt_BR]=Configura as fontes usadas em páginas da web +Comment[ro]=Configurează fonturile utilizate în paginile web +Comment[ru]=Настройка шрифтов веб-страниц +Comment[rw]=Kuboneza imyandikire ikoreshwa ku mapaji rubuga +Comment[se]=Heivet makkár fonttat geavahuvvojit fierpmádatsiidduin +Comment[sk]=Nastavenie písiem pre webové stránky +Comment[sl]=Nastavitve pisav, prikazanih na spletnih straneh +Comment[sr]=Подешавање фонтова који се користе на веб страницама +Comment[sr@Latn]=Podešavanje fontova koji se koriste na veb stranicama +Comment[sv]=Anpassa teckensnitt som används på webbsidor +Comment[ta]=வலைபக்கங்களில் பயன்படுத்தப்படும் எழுத்துருக்களை வடிவமை +Comment[tg]=Танзими ҳарфҳои лозимӣ барои намоиши сафҳоти Вэб +Comment[th]=ปรับแต่งแบบอักษรที่จะใช้กับหน้าเว็บ +Comment[tr]=Web sayfalarında kullanılan yazıtipini buradan yapılandırın +Comment[tt]=Säxifä bitlärendä qullanası yazu törlären caylaw +Comment[uk]=Налаштування шрифтів для сторінок Тенет +Comment[uz]=Veb-sahifalarida ishlatiladigan shriftlarni moslash +Comment[uz@cyrillic]=Веб-саҳифаларида ишлатиладиган шрифтларни мослаш +Comment[ven]=Dzudzanyani dzifontu dzo shumiswa kha masiatari a webu +Comment[vi]=Cấu hình phông chữ sử dụng trên các trang mạng +Comment[wa]=Apontyî les fontes eployeyes ezès pådjes waibe +Comment[xh]=Qwlasela uhlobo lwamagama asebenziswe kumaphepha e web +Comment[zh_CN]=配置网页所使用的字体 +Comment[zh_TW]=設定使用於網頁的字型 +Comment[zu]=Hlanganisela uhlobo lwamagama olusetshenziswa emakhasini e-web +Keywords=konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,encoding +Keywords[be]=Вандроўнік,Сеціва,Шрыфт,Знаказборы,Знаказбор,konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,encoding +Keywords[bg]=уеб, шрифтове, страници, браузър, Интернет, konqueror, kfm, browser, html, web, www, fonts, charsets, character sets, encoding +Keywords[bs]=konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,encoding,preglednik,font,fontovi,skup znakova,kodni raspored +Keywords[ca]=konqueror,kfm,navegador,html,web,www,lletres,caràcters.jocs de caràcters,codificació +Keywords[cs]=Konqueror,Kfm,Prohlížeč,HTML,Web,WWW,Písma,Znakové sady,Kódování +Keywords[csb]=konqueror,kfm,przezérnik,html,séc www,zestôw merków,kòdowanié +Keywords[cy]=konqueror,kfm,porydd,html,gwe,www,ffontiau,setiau nodau,amgodiad +Keywords[da]=konqueror,kfm,browser,HTML,net,www,skrifttyper,tegnsæt,indkodning +Keywords[de]=Konqueror,kfm,Browser,HTML,Web,WWW,Schriften,Zeichensätze,Kodierung +Keywords[el]=konqueror,kfm,περιηγητής,html,ιστός,www,γραμματοσειρές,σύνολα χαρακτήρων,σύνολα χαρακτήρων,κωδικοποίηση +Keywords[eo]=Konkeranto,Kfm,TTT,HTML,WWW,tiparo,koloro,Javo,Javoskripto,kursoro,kursilo,ligo,referenco,bildo,signaro,kodo +Keywords[es]=konqueror,kfm,navegador,html,web,www,tipos de letra,mapas de caracteres,codificación +Keywords[et]=konqueror,kfm,veebilehitseja,html,veeb,www,fondid,kooditabel,kodeering +Keywords[eu]=konqueror,kfm,arakatzailea,html,web,www,letra-tipoak,karaktere-multzoak, karaktere hobespenak,kodeketa +Keywords[fa]=konqueror،kfm، مرورگر، زنگام، وب، www،قلمها، نویسه‌گان، نویسه‌گان،کدبندی +Keywords[fi]=konqueror,kfm,selain,html,web,www,kirjasimet,merkistöt,koodaus +Keywords[fr]=konqueror,kfm,navigateur,html,web,www,polices,couleurs,java,javascript,curseur,liens,images,jeu de caractères,caractères,codage,encodage +Keywords[fy]=konqueror,kfm,browser,blêder,html,web,www,fonts,lettertypen,tekensets,karaktersamling,kodearring,ynternet +Keywords[ga]=konqueror,kfm,brabhsálaí,html,gréasán,www,clónna,clófhoirne,tacair charachtair,ionchódú +Keywords[gl]=konqueror,kfm,navegador,html,web,www,fontes,carácteres,conxunto de carácteres,codificación +Keywords[he]=konqueror,kfm,דפדפן,html,web,www,אינטרנט,browser,web,fonts,charsets,character sets,encoding, גופנים,מערכי תווים,קידוד +Keywords[hi]=कॉन्करर,केएफएम,ब्राउजर,एचटीएमएल,वेब,डब्ल्यूडब्ल्यूडब्ल्यू,फ़ॉन्ट्स,अक्षरमाला,अक्षर माला,एनकोडिंग +Keywords[hr]=konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,encoding,preglednik,fontovi,kodiranje,kodiranje zakova +Keywords[hu]=Konqueror,kfm,böngésző,HTML,web,WWW,betűtípusok,karakterkészletek,betűkészletek,kódolás +Keywords[is]=vafri,vefur,vefurinn,vefsíður,letur,litir,kóðun,stafatafla, bendill,myndir,www,html,stafir +Keywords[it]=konqueror,kfm,browser,html,web,www,caratteri,colori,set di caratteri,charset,codifica +Keywords[ja]=konqueror,kfm,ブラウザ,html,web,ウェブ,www,フォント,文字,文字セット,色,カラー,エンコーディング +Keywords[km]=konqueror,kfm,កម្មវិធី​រុករក,html,បណ្ដាញ,វើលវ៉ាយវិប,ពុម្ពអក្សរ,ការ​អ៊ិនកូដ +Keywords[lt]=konqueror,kfm,browser,html,web,www,fonts,colours,colors,charsets,character sets,encodingsets,encoding,narašymas,html,tinklalapis,tinklapis,www,šriftai,spalvos,simbolių rinkiniai,koduotė +Keywords[lv]=iekarotājs,kfm,pārlūks,html,web,www,fonti,krāsojums,krāsas,java,javaskripts,kursors,saites,attēli,simbolukomplekti,simbolu komplekti,kodējums +Keywords[mk]=konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,encoding,прелистувач,веб,фонтови,знаковни множества,кодирање +Keywords[mn]=Конкюрор,kfm,Хөтөч,HTML,Вэб,WWW,Бичиг,Тэмдэгт олонлог,Кодчилол +Keywords[nb]=konqueror,kfm,nettleser,html,nettet,www,veven,verdensveven,Internett,skriftyper,skrifter,koding,tegnsett,tegnkoding +Keywords[nds]=Konqueror,kfm,Nettkieker,browser,HTML,web,www,Schriftoorden,Tekensetten,Koderen +Keywords[ne]=कन्क्वेरर,kfm, ब्राउजर,html, वेब,www, फन्टहरू, चारसेटहरू, क्यारेक्टर सेट, सङ्केतन +Keywords[nl]=konqueror,kfm,browser,html,web,www,fonts,lettertypen,tekensets,karakterverzamelingen,codering,encoding,internet +Keywords[nn]=Konqueror,KFM,nettlesar,HTML,verdsveven,WWW,skrifter,teiknsett,koding,teiknkoding +Keywords[nso]=konqueror,kfm,seinyakisi,html,web,www,difonto,charsets,dipeakanyo tsa dihlaka,go khouta +Keywords[pa]=ਕੋਨਕਿਉਰਰ,kfm,ਝਲਕਾਰਾ,html,web,www,ਫੋਂਟ, ਅੱਖਰ-ਸੈਟ, ਅੱਖਰ ਸੈਟ, ਇੰਕੋਡਿੰਗ +Keywords[pl]=konqueror,kfm,przeglądarka,html,sieć www,zestawy znaków,kodowanie +Keywords[pt]=konqueror,kfm,navegador,html,web,www,tipos de letra,fontes,cores,java,javascript,cursor,ligações,imagens,charsets,mapas de caracteres,codificação +Keywords[pt_BR]=konqueror,kfm,navegador,html,web,WWW,fontes,conjuntos de caracteres,codificação +Keywords[ro]=konqueror,kfm,navigator,browser,html,web,www,fonturi,culori,java,javascript,cursor,legături,imagini,set de caractere,codare +Keywords[rw]= Konqueror,kfm,mucukumbuzi,html,urubuga,www,imyandikire, itsinda-nyuguti, amatsinda y'inyuguti,gusobeka +Keywords[se]=Konqueror,kfm,fierpmádatlogan,html,web,www,fonttat,mearkarájut,koden +Keywords[sk]=konqueror,kfm,prehliadač,html,web,www,písma,farby,znakové sady,kódovanie +Keywords[sl]=konqueror,kfm,brskalnik,html,splet,www,pisave,nabori znakov,znakovni nabori,kodiranje +Keywords[sr]=konqueror,kfm,прегледач,html,web,www,фонтови,боје,java,јавасцрипт,показивач,везе,слике,кодни распоред,скуп знакова,кодирање +Keywords[sr@Latn]=konqueror,kfm,pregledač,html,web,www,fontovi,boje,java,javascript,pokazivač,veze,slike,kodni raspored,skup znakova,kodiranje +Keywords[sv]=konqueror,kfm,webbläsare,html,webb,www,teckensnitt,färger,java,javaskript,länkar,bilder,kodning,teckenuppsättningar +Keywords[ta]=கான்கொரர், கோப்பு மேலாளர், html,வலை, www,எழுத்துரு, எழுத்தமைப்பு முறை,எழுத்தமைப்பு முறை, குறியீடு முறை +Keywords[th]=คอนเควอร์เรอร์,kfm,บราวเซอร์,html,เว็บ,www,แบบอักษร,อักขระ,ชุดอักขระ,การเข้ารหัส +Keywords[tr]=konqueror,kfm,tarayıcı,html,web,www,yazı tipleri,kodlama +Keywords[uk]=konqueror,kfm,навігатор,html,шрифти,Тенета,www,набори символів,кодування +Keywords[uz]=konqueror,kfm,html,www,brauzer,veb,shriftlar,belgilar toʻplami,kodlash usuli +Keywords[uz@cyrillic]=konqueror,kfm,html,www,браузер,веб,шрифтлар,белгилар тўплами,кодлаш усули +Keywords[ven]=konqueror,kfm,buronza,html,webu,www,dzifontu,mivhala,mivhala,java,manwalwa a java,cursor,vhukwamani,zwifanyiso,tshasete,mavhekanyele a muanewa,uinikhouda +Keywords[vi]=konqueror,kfm,trình duyệt,html,web,www,phông chữ,ký tự,bảng ký tự,mã ký tự +Keywords[wa]=konqueror,kfm,betchteu,html,waibe,www,fontes,ecôdaedjes,ecôdaedje +Keywords[xh]=konqueror,kfm,umkhangeli zincwadi,html,web,www,imigca, amaqela abasebenzisi,encoding +Keywords[zh_CN]=konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,encoding,浏览器,网页,字体,字符集,编码 +Keywords[zh_TW]=konqueror,kfm,browser,html,web,www,fonts,charsets,character sets,征服家,字元,字元集,編碼,瀏覽器,字型,網頁 +Keywords[zu]=konqueror,kfm,umcingi,html,web,www,izinhlobo zamagama,charsets,amaqoqo ezimpawu,ukubhala ngekhodi + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/konqhtml/khtml_java_js.desktop b/kcontrol/konqhtml/khtml_java_js.desktop new file mode 100644 index 000000000..7ba252b91 --- /dev/null +++ b/kcontrol/konqhtml/khtml_java_js.desktop @@ -0,0 +1,211 @@ +[Desktop Entry] +Type=Application +DocPath=kcontrol/khtml/index.html#kbrowse-java +Icon=konqueror +Exec=kcmshell khtml_java_js + + +X-KDE-Library=konqhtml +X-KDE-FactoryName=khtml_java_js + +Name=Java & JavaScript +Name[af]=Java & Javaskrip +Name[ar]=Java و JavaScript +Name[az]=Java və JavaScript +Name[be]=Java і JavaScript +Name[bg]=Java и JavaScript +Name[bn]=জাভা এবং জাভাস্ক্রিপ্ট +Name[bs]=JavaScript i Java +Name[ca]=Java i JavaScript +Name[cs]=Java a JavaScript +Name[csb]=Java ë JavaScript +Name[cy]=Java a JavaScript +Name[eo]=Ĝavo kaj Ĝavoskripto +Name[es]=Java y JavaScript +Name[et]=Java ja JavaScript +Name[eu]=Java eta JavaScript +Name[fa]=جاوا و جاوااسکریپت +Name[fi]=Java ja JavaScript +Name[fy]=Java en JavaSkript +Name[gl]=Java e JavaScript +Name[he]=JavaScript-ו Java +Name[hi]=जावा एवं जावा-स्क्रिप्ट +Name[hr]=Java i JavaScript +Name[hu]=Java/Javascript +Name[is]=Java og JavaScript +Name[it]=Java e JavaScript +Name[ka]=Java და JavaScript +Name[kk]=Java және JavaScript +Name[ko]=자바와 자바스크립트 +Name[lo]=ແຟ້່ມໂພສ໌ສຄລິບແລະ PDF +Name[lt]=Java ir JavaScript +Name[mk]=Java и JavaScript +Name[mt]=Java u JavaScript +Name[nb]=Java og JavaScript +Name[ne]=जाभा र जाभा स्क्रिप्ट +Name[nl]=Java en JavaScript +Name[nn]=Java og JavaScript +Name[nso]=Java & Setlankana sa Java +Name[pa]=Java ਅਤੇ ਜਾਵਾ ਸਕਰਿਪਟ +Name[pl]=Java i JavaScript +Name[pt]=Java e JavaScript +Name[ro]=Java și JavaScript +Name[ru]=Java и JavaScript +Name[se]=Java ja Javascript +Name[sl]=Java in javascript +Name[ss]=I-Java & JavaScript +Name[sv]=Java och Javaskript +Name[ta]=ஜாவா & ஜாவா எழுத்தாக்கம் +Name[te]=జావా & జావాస్క్రిప్ట్ +Name[tg]=Java ва JavaScript +Name[th]=จาวาและจาวาสคริปต์ +Name[tr]=Java ve JavaScript +Name[tt]=Java belän JavaScript +Name[uz]=Java va JavaScript +Name[uz@cyrillic]=Java ва JavaScript +Name[wa]=Java eyet JavaScript +Name[zh_CN]=Java 和 JavaScript +Name[zh_TW]=Java 與 JavaScript +Comment=Configure the behavior of Java and JavaScript +Comment[af]=Konfigureer die gedrag van Java en Javaskrip +Comment[ar]=إعداد سلوك Java و JavaScript +Comment[be]=Настаўленні Java і JavaScript +Comment[bg]=Настройване на Java и JavaScript +Comment[bn]=জাভা এবং জাভাস্ক্রিপ্ট-এর আচরণ কনফিগার করুন +Comment[br]=Kefluniañ emzalc'h Java ha JavaScript +Comment[bs]=Podesite ponašanje JavaScript i Java-e +Comment[ca]=Configura el comportament de Java i JavaScript +Comment[cs]=Nastavení chování Javy a Javascriptu +Comment[csb]=Kònfigùracëjô dzejaniô Javë ë JavaScriptu +Comment[cy]=Ffurfweddu ymddygiad Java a JavaScript +Comment[da]=Indstil hvordan JavaScript og Java opfører sig +Comment[de]=Verhalten von Java und JavaScript festlegen +Comment[el]=Ρυθμίστε τη συμπεριφορά της Java και της JavaScript +Comment[en_GB]=Configure the behaviour of Java and JavaScript +Comment[eo]=Agordo la konduton de Ĝavo kaj Ĝavoskripto +Comment[es]=Configuración del comportamiento de Java y JavaScript +Comment[et]=Java ja JavaScripti käitumise seadistamine +Comment[eu]=Konfiguratu Java eta JavaScripten portaera +Comment[fa]=پیکربندی رفتار جاوا و جاوااسکریپت +Comment[fi]=Javan ja JavaScriptin asetukset +Comment[fr]=Configuration du comportement de Java et JavaScript +Comment[fy]=Hjir kinne jo it gedrach fan Java en JavaSkript ynstelle +Comment[ga]=Cumraigh oibriú Java agus JavaScript +Comment[gl]=Configurar o comportamento de Java e JavaScript +Comment[he]=שינוי הגדרות Java ו־JavaScript +Comment[hi]=जावा एवं जावा-स्क्रिप्ट कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje ponašanja Jave i JavaScripta +Comment[hu]=A Java és a Javascript beállításai +Comment[is]=Stilla hegðun Java og JavaScript +Comment[it]=Configura il comportamento di Java e JavaScript +Comment[ja]=Java と JavaScript の挙動を設定 +Comment[ka]=Java და JavaScript -ის ქცევის კონფიგურაცია +Comment[kk]=Java және JavaScript қасиеттерін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ឥរិយាបថ​របស់ Java និង JavaScript +Comment[ko]=자바와 자바스크립트 행동 설정 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານ ຂອງເຄື່ອງມືການຈັດເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti Java bei JavaScript elgseną +Comment[lv]=Šeit Jūs varat konfigurēt Java un JavaScript izturēšanos +Comment[mk]=Конфигурирајте го однесувањето на Java и JavaScript +Comment[mn]=Java ба JavaScript-н байдлыг тогтоох +Comment[ms]=Konfigur kelakuan Java dan JavaScript +Comment[mt]=Ikkonfigura l-imġieba ta' Java u JavaScript +Comment[nb]=Innstillinger for Java og JavaScript +Comment[nds]=Dat Bedregen vun Java un JavaSkript hier instellen +Comment[ne]=जाभा र जाभा स्क्रिप्टकको व्यवहार कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u het gedrag van Java en JavaScript instellen +Comment[nn]=Innstillingar for Java og JavaScript +Comment[nso]=Beakanya maitshwaro a Java le setlankana sa Java +Comment[pa]=Java ਅਤੇ ਜਾਵਾ-ਸਕਰਿਪਟ ਦੇ ਵਿਹਾਰ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja działania Javy i JavaScriptu +Comment[pt]=Configurar o comportamento do Java e do JavaScript +Comment[pt_BR]=Configura o comportamento do Java e JavaScript +Comment[ro]=Configurează comportamentul Java și JavaScript +Comment[ru]=Настройка поведения Java и JavaScript +Comment[rw]=Kuboneza imyitwarire ya Java na JavaScript +Comment[se]=Java ja Javascript-heivehusat +Comment[sk]=Nastavenie správania jazykov JavaScript a Java +Comment[sl]=Nastavitve obnašanja jave in javascripta +Comment[sr]=Подешавање понашања Java-е и JavaScript-а +Comment[sr@Latn]=Podešavanje ponašanja Java-e i JavaScript-a +Comment[sv]=Anpassa beteendet hos Java och Javaskript +Comment[ta]=ஜாவா மற்றும் ஜாவா எழுத்தாக்கத்தின் இயக்கத்தை வடிவமைக்க முடியும். +Comment[tg]=Танзими нафъи рафтори Java ва JavaScript +Comment[th]=ปรับแต่งพฤติกรรมของจาวาและจาวาสคริปต์ +Comment[tr]=Java ve JavaScript ayarlarını buradan hazırlayın +Comment[tt]=Java belän JavaScript caylaw +Comment[uk]=Налаштування поведінки Java та JavaScript +Comment[uz]=Java va JavaScript xususiyatlarini moslash +Comment[uz@cyrillic]=Java ва JavaScript хусусиятларини мослаш +Comment[ven]=Dzudzanyani maitele a Java na Javascript +Comment[vi]=Cấu hình cách hoạt động của Java và JavaScript +Comment[wa]=Apontyî li dujhance pol Java eyet l' JavaScript +Comment[xh]=Qwalasela ukuziphatha kwe Java ne JavaScript +Comment[zh_CN]=配置 Java 和 JavaScript 的行为 +Comment[zh_TW]=設定 Java 與 JavaScript 的行為 +Comment[zu]=Hlanganisela ukuthi i-Java kanye ne-JavaScript iziphathe kanjani +Keywords=konqueror,kfm,browser,html,web,www,java,javascript +Keywords[be]=Вандроўнік,Сеціва,Сцэнар,konqueror,kfm,browser,html,web,www,java,javascript +Keywords[bg]=Джава, Джава скрипт, скрипт, konqueror, kfm, browser, html, web, www, java, javascript +Keywords[br]=konqueror,kfm,furcher,html,web,gwiad,java,javascript +Keywords[ca]=konqueror,kfm,navegador,html,web,www,java,javascript +Keywords[cs]=Konqueror,Kfm,Prohlížeč,HTML,Web,WWW,Java,JavaScript +Keywords[csb]=konqueror,kfm,przezérnik,html,séc www,www,java,javascript +Keywords[cy]=konqueror,kfm,porydd,html,gwe,www,java,javascript +Keywords[da]=konqueror,kfm,browser,HTML,net,www,java,javascript +Keywords[de]=Konqueror,kfm,Browser,HTML,Web,WWW,Java,JavaScript +Keywords[el]=konqueror,kfm,περιηγητής,html,ιστός,www,java,javascript +Keywords[eo]=Konkeranto,Kfm,TTT,HTML,WWW,tiparo,koloro,Javo,Javoskripto,kursoro,kursilo,ligo,referenco,bildo,signaro,kodo +Keywords[es]=konqueror,kfm,navegador,html,web,wwwjava,javascript +Keywords[et]=konqueror,kfm,veebilehitseja,html,veeb,www,java,javascript +Keywords[eu]=konqueror,kfm,arakatzailea,html,web,www,java,javascript +Keywords[fa]=konqueror، kfm، مرورگر، زنگام، وب، www، جاوا، جاوااسکریپت +Keywords[fi]=konqueror,kfm,selain,html,web,www,java,javascript +Keywords[fr]=konqueror,kfm,navigateur,html,web,www,polices,couleurs,java,javascript,curseur,liens,images,jeu de caractères,caractères,codage,encodage +Keywords[fy]=konqueror,kfm,browser,blêder,html,web,www,java,javaskript,ynternet +Keywords[ga]=konqueror,kfm,brabhsálaí,html,gréasán,www,java,javascript +Keywords[gl]=konqueror,kfm,navegador,html,web,www,java,javascript +Keywords[he]=konqueror,kfm,דפדפן,html,אינטרנט,www,java,javascript,ג'אווה, browser,web,www,java,javascript +Keywords[hi]=कॉन्करर,केएफएम,ब्राउज़र,एचटीएमएल,वेब,डब्ल्यूडब्ल्यूडब्ल्यू.जावा,जावा-स्क्रिप्ट +Keywords[hr]=konqueror,kfm,browser,html,web,www,java,javascript,preglednik +Keywords[hu]=Konqueror,kfm,böngésző,HTML,web,WWW,Java,Javascript +Keywords[is]=konqueror,kfm,browser,html,web,www,java,javascript,vafri +Keywords[ja]=konqueror,kfm,ブラウザ,html,web,ウェブ,www,java,javascript +Keywords[km]=konqueror,kfm,កម្មវិធី​រុករក,html,វិប,វើលវ៉ាយវិប,java,javascript +Keywords[lt]=konqueror,kfm,browser,html,web,www,java,javascript, naršyklė,tinklalapiai, žiniatinklis +Keywords[lv]=iekarotājs,kfm,pārlūks,html,web,www,java,javaskripts +Keywords[mk]=konqueror,kfm,browser,html,web,www,java,javascript,прелистувач,веб +Keywords[mn]=Конкюрор,kfm,Хөтөч,HTML,Веб,WWW,Java,JavaScript +Keywords[nb]=konqueror,kfm,html,nettet,www,java,javascript,nettleser,Internett +Keywords[nds]=Konqueror,kfm,browser,Nettkieker,HTML,web,www,Java,JavaScript +Keywords[ne]=कन्क्वेरर, kfm, ब्राउजर, html, वेब, www, जाभा, जाभास्क्रिप्ट +Keywords[nl]=konqueror,kfm,browser,html,web,www,java,javascript,internet +Keywords[nn]=Konqueror,KFM,nettlesar,HTML,verdsveven,WWW,Java,JavaScript +Keywords[nso]=konqueror,kfm,seinyakisi,html,web,www,java,setlankana sa java +Keywords[pa]=ਕੋਨਕਿਉਰਰ,kfm,ਝਲਕਾਰਾ,html,web,www,java,javascript,ਜਾਵਾ +Keywords[pl]=konqueror,kfm,przeglądarka,html,sieć www,www,java,javascript +Keywords[pt]=konqueror,kfm,navegador,html,web,www,java,javascript +Keywords[pt_BR]=konqueror,kfm,navegador,html,web,WWW,java,javascript +Keywords[ro]=konqueror,kfm,navigator,browser,html,web,www,java,javascript +Keywords[rw]= Konqueror,kfm,mucukumbuzi,html,urubuga,www,java,javascript +Keywords[se]=konqueror,kfm,fierpmádatlogan,html,web,www,java,javascript +Keywords[sk]=konqueror,kfm,prehliadač,html,web,www,java,javascript +Keywords[sl]=konqueror,kfm,brskalnik,html,splet,www,java,javascript +Keywords[sr]=konqueror,kfm,прегледач,html,web,www,java,javascript +Keywords[sr@Latn]=konqueror,kfm,pregledač,html,web,www,java,javascript +Keywords[sv]=konqueror,kfm,webbläsare,html,webb,www,teckensnitt,färger,java,javaskript,länkar,bilder,kodning,teckenuppsättningar +Keywords[ta]=கான்கொரர்,kfm,உலாவி,html,வலை,www,ஜாவா,ஜாவா எழுத்தாக்கம் +Keywords[th]=คอนเควอร์เรอร์,kfm,บราวเซอร์,html,เว็บ,www,จาวา,จาวาสคริปต์ +Keywords[tr]=konqueror,kfm,tarayıcı,html,web,www,java,javascript +Keywords[uk]=konqueror,kfm,навігатор,html,web,Тенета,java,javascript,www +Keywords[uz]=konqueror,kfm,brauzer,html,veb,www,java,javascript +Keywords[uz@cyrillic]=konqueror,kfm,браузер,html,веб,www,java,javascript +Keywords[ven]=konqueror,kfm,buronza,html,webu,www,dzifontu,mivhala,mivhala,java,manwalwa a java,cursor,vhukwamani,zwifanyiso,tshasete,mavhekanyele a muanewa,uinikhouda +Keywords[vi]=konqueror,kfm,trình duyệt,html,web,www,java,javascript +Keywords[wa]=konqueror,kfm,betchteu,html,waibe,waibes,www,java,javascript +Keywords[xh]=konqueror,kfm,umkhangeli zincwadi,html,web, www,java,okushicilelwe phantsi kwe java +Keywords[zh_CN]=konqueror,kfm,browser,html,web,www,java,javascript,浏览器 +Keywords[zh_TW]=konqueror,kfm,browser,html,web,www,java,javascript,征服家,瀏覽器,網頁 +Keywords[zu]=konqueror,kfm,umcingi,html,web,www,java,javascript + +Categories=Qt;KDE;X-KDE-settings-webbrowsing; diff --git a/kcontrol/konqhtml/khttpoptdlg.cpp b/kcontrol/konqhtml/khttpoptdlg.cpp new file mode 100644 index 000000000..e6c9a95ba --- /dev/null +++ b/kcontrol/konqhtml/khttpoptdlg.cpp @@ -0,0 +1,81 @@ +// File khttpoptdlg.cpp by Jacek Konieczny +// Port to KControl by David Faure + +#include //CT + +#include +#include +#include "khttpoptdlg.h" + + +KHTTPOptions::KHTTPOptions(KConfig *config, QString group, QWidget *parent, const char *name) + : KCModule( parent, name ), m_pConfig(config), m_groupname(group) +{ + QVBoxLayout *lay = new QVBoxLayout(this, 10, 5); + + lay->addWidget( new QLabel(i18n("Accept languages:"), this) ); + + le_languages = new QLineEdit(this); + lay->addWidget( le_languages ); + connect(le_languages, SIGNAL(textChanged(const QString&)), + this, SLOT(slotChanged())); + + lay->addSpacing(10); + lay->addWidget( new QLabel(i18n("Accept character sets:"), this) ); + + le_charsets = new QLineEdit(this); + lay->addWidget( le_charsets ); + connect(le_charsets, SIGNAL(textChanged(const QString&)), + this, SLOT(slotChanged())); + + lay->addStretch(10); + + // defaultCharsets = QString("utf-8 ")+klocale->charset()+" iso-8859-1"; + defaultCharsets = QString("utf-8 ")+" iso-8859-1"; // TODO + + // finaly read the options + load(); +} + +void KHTTPOptions::load() +{ + load( false ); +} + +void KHTTPOptions::load( bool useDefaults ) +{ + QString tmp; + + m_pConfig->setReadDefaults( useDefaults ); + + m_pConfig->setGroup( "Browser Settings/HTTP" ); + tmp = m_pConfig->readEntry( "AcceptLanguages",KGlobal::locale()->languageList().join(",")); + le_languages->setText( tmp ); + tmp = m_pConfig->readEntry( "AcceptCharsets",defaultCharsets); + le_charsets->setText( tmp ); + + emit changed( useDefaults ); + +} + +void KHTTPOptions::save() +{ + m_pConfig->setGroup( "Browser Settings/HTTP" ); + m_pConfig->writeEntry( "AcceptLanguages", le_languages->text()); + m_pConfig->writeEntry( "AcceptCharsets", le_charsets->text()); + m_pConfig->sync(); +} + +void KHTTPOptions::defaults() +{ + load( true ); +} + + +void KHTTPOptions::slotChanged() +{ + emit changed(true); +} + + +#include "khttpoptdlg.moc" diff --git a/kcontrol/konqhtml/khttpoptdlg.h b/kcontrol/konqhtml/khttpoptdlg.h new file mode 100644 index 000000000..36e3650b4 --- /dev/null +++ b/kcontrol/konqhtml/khttpoptdlg.h @@ -0,0 +1,49 @@ +// khttpoptdlg.h - extra HTTP configuration by Jacek Konieczy +#ifndef __KHTTPOPTDLG_H +#define __KHTTPOPTDLG_H + +#include +#include +#include +#include + +#include +#include + + +/** +* Dialog for configuring HTTP Options like charset and language negotiation +* and assuming that file got from HTTP is HTML if no Content-Type is given +*/ +class KHTTPOptions : public KCModule +{ +Q_OBJECT + public: + KHTTPOptions(KConfig *config, QString group, QWidget *parent = 0L, const char *name = 0L); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + + private: + + KConfig *m_pConfig; + QString m_groupname; + + // Acceptable languages "LANG" - locale selected languages + QLabel *lb_languages; + QLineEdit *le_languages; + + // Acceptable charsets "CHARSET" - locale selected charset + QLabel *lb_charsets; + QLineEdit *le_charsets; + + QString defaultCharsets; + +private slots: + void slotChanged(); + +}; + +#endif // __KHTTPOPTDLG_H diff --git a/kcontrol/konqhtml/main.cpp b/kcontrol/konqhtml/main.cpp new file mode 100644 index 000000000..b1d459b00 --- /dev/null +++ b/kcontrol/konqhtml/main.cpp @@ -0,0 +1,171 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * Copyright (c) 2000 Daniel Molkentin + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include + +#include +#include +#include +#include + +#include "jsopts.h" +#include "javaopts.h" +#include "pluginopts.h" +#include "appearance.h" +#include "htmlopts.h" +#include "filteropts.h" + +#include "main.h" +#include +#include "main.moc" + +extern "C" +{ + KDE_EXPORT KCModule *create_khtml_behavior(QWidget *parent, const char *name) + { + KConfig *c = new KConfig( "konquerorrc", false, false ); + return new KMiscHTMLOptions(c, "HTML Settings", parent, name); + } + + KDE_EXPORT KCModule *create_khtml_fonts(QWidget *parent, const char *name) + { + KConfig *c = new KConfig( "konquerorrc", false, false ); + return new KAppearanceOptions(c, "HTML Settings", parent, name); + } + + KDE_EXPORT KCModule *create_khtml_java_js(QWidget *parent, const char* /*name*/) + { + KConfig *c = new KConfig( "konquerorrc", false, false ); + return new KJSParts(c, parent, "kcmkonqhtml"); + } + + KDE_EXPORT KCModule *create_khtml_plugins(QWidget *parent, const char *name) + { + KConfig *c = new KConfig( "konquerorrc", false, false ); + return new KPluginOptions(c, "Java/JavaScript Settings", parent, name); + } + + KDE_EXPORT KCModule *create_khtml_filter(QWidget *parent, const char *name ) + { + KConfig *c = new KConfig( "khtmlrc", false, false ); + return new KCMFilter(c, "Filter Settings", parent, name); + } +} + + +KJSParts::KJSParts(KConfig *config, QWidget *parent, const char *name) + : KCModule(parent, name), mConfig(config) +{ + KAboutData *about = + new KAboutData(I18N_NOOP("kcmkonqhtml"), I18N_NOOP("Konqueror Browsing Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1999 - 2001 The Konqueror Developers")); + + about->addAuthor("Waldo Bastian",0,"bastian@kde.org"); + about->addAuthor("David Faure",0,"faure@kde.org"); + about->addAuthor("Matthias Kalle Dalheimer",0,"kalle@kde.org"); + about->addAuthor("Lars Knoll",0,"knoll@kde.org"); + about->addAuthor("Dirk Mueller",0,"mueller@kde.org"); + about->addAuthor("Daniel Molkentin",0,"molkentin@kde.org"); + about->addAuthor("Wynn Wilkes",0,"wynnw@caldera.com"); + + about->addCredit("Leo Savernik",I18N_NOOP("JavaScript access controls\n" + "Per-domain policies extensions"), + "l.savernik@aon.at"); + + setAboutData( about ); + + QVBoxLayout *layout = new QVBoxLayout(this); + tab = new QTabWidget(this); + layout->addWidget(tab); + + // ### the groupname is duplicated in KJSParts::save + java = new KJavaOptions( config, "Java/JavaScript Settings", this, name ); + tab->addTab( java, i18n( "&Java" ) ); + connect( java, SIGNAL( changed( bool ) ), SIGNAL( changed( bool ) ) ); + + javascript = new KJavaScriptOptions( config, "Java/JavaScript Settings", this, name ); + tab->addTab( javascript, i18n( "Java&Script" ) ); + connect( javascript, SIGNAL( changed( bool ) ), SIGNAL( changed( bool ) ) ); +} + +KJSParts::~KJSParts() +{ + delete mConfig; +} + +void KJSParts::load() +{ + javascript->load(); + java->load(); +} + + +void KJSParts::save() +{ + javascript->save(); + java->save(); + + // delete old keys after they have been migrated + if (javascript->_removeJavaScriptDomainAdvice + || java->_removeJavaScriptDomainAdvice) { + mConfig->setGroup("Java/JavaScript Settings"); + mConfig->deleteEntry("JavaScriptDomainAdvice"); + javascript->_removeJavaScriptDomainAdvice = false; + java->_removeJavaScriptDomainAdvice = false; + } + + mConfig->sync(); + + // Send signal to konqueror + // Warning. In case something is added/changed here, keep kfmclient in sync + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); +} + + +void KJSParts::defaults() +{ + javascript->defaults(); + java->defaults(); +} + +QString KJSParts::quickHelp() const +{ + return i18n("

      JavaScript

      On this page, you can configure " + "whether JavaScript programs embedded in web pages should " + "be allowed to be executed by Konqueror." + "

      Java

      On this page, you can configure " + "whether Java applets embedded in web pages should " + "be allowed to be executed by Konqueror." + "

      Note: Active content is always a " + "security risk, which is why Konqueror allows you to specify very " + "fine-grained from which hosts you want to execute Java and/or " + "JavaScript programs." ); +} + + diff --git a/kcontrol/konqhtml/main.h b/kcontrol/konqhtml/main.h new file mode 100644 index 000000000..20f461fa2 --- /dev/null +++ b/kcontrol/konqhtml/main.h @@ -0,0 +1,60 @@ +/* + * main.h + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel + * Copyright (c) 2000 Daniel Molkentin + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __MAIN_H__ +#define __MAIN_H__ + +#include + +class KJavaOptions; +class KJavaScriptOptions; + +class QTabWidget; + +class KJSParts : public KCModule +{ + Q_OBJECT + +public: + + KJSParts(KConfig *config,QWidget *parent, const char *name); + virtual ~KJSParts(); + + void load(); + void save(); + void defaults(); + QString quickHelp() const; + + +private: + QTabWidget *tab; + + KJavaScriptOptions *javascript; + KJavaOptions *java; + + KConfig *mConfig; +}; + +#endif diff --git a/kcontrol/konqhtml/nsconfigwidget.ui b/kcontrol/konqhtml/nsconfigwidget.ui new file mode 100644 index 000000000..d772595c2 --- /dev/null +++ b/kcontrol/konqhtml/nsconfigwidget.ui @@ -0,0 +1,273 @@ + +NSConfigWidget +Stefan Schimanski <1Stein@gmx.de> + + + NSConfigWidget + + + + 0 + 0 + 458 + 373 + + + + Netscape Plugin Config + + + + + + unnamed + + + 0 + + + 6 + + + + TabWidget2 + + + + tab + + + Scan + + + + unnamed + + + + Layout1 + + + + unnamed + + + + scanButton + + + &Scan for New Plugins + + + Click here to scan for newly installed Netscape plugins now. + + + + + Spacer1_2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + scanAtStartup + + + Scan for new plugins at &KDE startup + + + If this option is enabled, KDE will look for new Netscape plugins every time it starts up. This makes it easier for you if you often install new plugins, but it may also slow down KDE startup. You might want to disable this option, especially if you seldom install plugins. + + + + + GroupBox1 + + + + 300 + 0 + + + + Scan Folders + + + + unnamed + + + + dirRemove + + + false + + + &Remove + + + + + dirNew + + + &New + + + + + dirEdit + + + false + + + 18 + + + + + dirDown + + + false + + + Do&wn + + + + + dirUp + + + false + + + &Up + + + + + dirList + + + + 7 + 7 + 0 + 0 + + + + + + Spacer3 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + + + tab + + + Plugins + + + + unnamed + + + + + Information + + + true + + + true + + + + + Value + + + true + + + true + + + + pluginList + + + true + + + Here you can see a list of the Netscape plugins KDE has found. + + + + + useArtsdsp + + + true + + + Use a&rtsdsp to pipe plugin sound through aRts + + + + + + + + + klocale.h + kurlrequester.h + klistbox.h + kdialog.h + + + + + qwidget.h + kurlrequester.h + klineedit.h + kpushbutton.h + klistbox.h + + diff --git a/kcontrol/konqhtml/pluginopts.cpp b/kcontrol/konqhtml/pluginopts.cpp new file mode 100644 index 000000000..7fec6f9d3 --- /dev/null +++ b/kcontrol/konqhtml/pluginopts.cpp @@ -0,0 +1,659 @@ +// (c) 2002-2003 Leo Savernik, per-domain settings +// (c) 2001, Daniel Naber, based on javaopts.cpp +// (c) 2000 Stefan Schimanski <1Stein@gmx.de>, Netscape parts + + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "htmlopts.h" +#include "pluginopts.h" +#include "policydlg.h" + + +// == class PluginPolicies ===== + +PluginPolicies::PluginPolicies(KConfig* config, const QString &group, bool global, + const QString &domain) : + Policies(config,group,global,domain,"plugins.","EnablePlugins") { +} + +PluginPolicies::~PluginPolicies() { +} + +// == class KPluginOptions ===== + +KPluginOptions::KPluginOptions( KConfig* config, QString group, QWidget *parent, + const char *) + : KCModule( parent, "kcmkonqhtml" ), + m_pConfig( config ), + m_groupname( group ), + m_nspluginscan (0), + global_policies(config,group,true) +{ + QVBoxLayout* toplevel = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + + /************************************************************************** + ******************** Global Settings ************************************* + *************************************************************************/ + QVGroupBox* globalGB = new QVGroupBox( i18n( "Global Settings" ), this ); + toplevel->addWidget( globalGB ); + enablePluginsGloballyCB = new QCheckBox( i18n( "&Enable plugins globally" ), globalGB ); + enableHTTPOnly = new QCheckBox( i18n( "Only allow &HTTP and HTTPS URLs for plugins" ), globalGB ); + enableUserDemand = new QCheckBox( i18n( "&Load plugins on demand only" ), globalGB ); + priorityLabel = new QLabel(i18n("CPU priority for plugins: %1").arg(QString::null), globalGB); + priority = new QSlider(5, 100, 5, 100, Horizontal, globalGB); + connect( enablePluginsGloballyCB, SIGNAL( clicked() ), this, SLOT( slotChanged() ) ); + connect( enablePluginsGloballyCB, SIGNAL( clicked() ), this, SLOT( slotTogglePluginsEnabled() ) ); + connect( enableHTTPOnly, SIGNAL( clicked() ), this, SLOT( slotChanged() ) ); + connect( enableUserDemand, SIGNAL( clicked() ), this, SLOT( slotChanged() ) ); + connect( priority, SIGNAL( valueChanged(int) ), this, SLOT( slotChanged() ) ); + connect( priority, SIGNAL( valueChanged(int) ), this, SLOT( updatePLabel(int) ) ); + + QFrame *hrule = new QFrame(globalGB); + hrule->setFrameStyle(QFrame::HLine | QFrame::Sunken); + hrule->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed); + + /************************************************************************** + ********************* Domain-specific Settings *************************** + *************************************************************************/ + QPushButton *domainSpecPB = new QPushButton(i18n("Domain-Specific Settin&gs"), + globalGB); + domainSpecPB->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + connect(domainSpecPB,SIGNAL(clicked()),SLOT(slotShowDomainDlg())); + + domainSpecificDlg = new KDialogBase(KDialogBase::Swallow, + i18n("Domain-Specific Policies"),KDialogBase::Close, + KDialogBase::Close,this,"domainSpecificDlg", true); + + domainSpecific = new PluginDomainListView(config,group,this,domainSpecificDlg); + domainSpecific->setMinimumSize(320,200); + connect(domainSpecific,SIGNAL(changed(bool)),SLOT(slotChanged())); + + domainSpecificDlg->setMainWidget(domainSpecific); + + /************************************************************************** + ********************** WhatsThis? items ********************************** + *************************************************************************/ + QWhatsThis::add( enablePluginsGloballyCB, i18n("Enables the execution of plugins " + "that can be contained in HTML pages, e.g. Macromedia Flash. " + "Note that, as with any browser, enabling active contents can be a security problem.") ); + + QString wtstr = i18n("This box contains the domains and hosts you have set " + "a specific plugin policy for. This policy will be used " + "instead of the default policy for enabling or disabling plugins on pages sent by these " + "domains or hosts.

      Select a policy and use the controls on " + "the right to modify it."); + QWhatsThis::add( domainSpecific->listView(), wtstr ); + QWhatsThis::add( domainSpecific->importButton(), i18n("Click this button to choose the file that contains " + "the plugin policies. These policies will be merged " + "with the existing ones. Duplicate entries are ignored.") ); + QWhatsThis::add( domainSpecific->exportButton(), i18n("Click this button to save the plugin policy to a zipped " + "file. The file, named plugin_policy.tgz, will be " + "saved to a location of your choice." ) ); + QWhatsThis::add( domainSpecific, i18n("Here you can set specific plugin policies for any particular " + "host or domain. To add a new policy, simply click the New... " + "button and supply the necessary information requested by the " + "dialog box. To change an existing policy, click on the Change... " + "button and choose the new policy from the policy dialog box. Clicking " + "on the Delete button will remove the selected policy causing the default " + "policy setting to be used for that domain.") ); +#if 0 + "The Import and Export " + "button allows you to easily share your policies with other people by allowing " + "you to save and retrieve them from a zipped file.") ); +#endif + +/*****************************************************************************/ + + QVGroupBox* netscapeGB = new QVGroupBox( i18n( "Netscape Plugins" ), this ); + toplevel->addWidget( netscapeGB ); + + // create Designer made widget + m_widget = new NSConfigWidget( netscapeGB, "configwidget" ); + m_widget->dirEdit->setMode(KFile::ExistingOnly | KFile::LocalOnly | KFile::Directory); + + // setup widgets + connect( m_widget->scanAtStartup, SIGNAL(clicked()), SLOT(change()) ); + connect( m_widget->scanButton, SIGNAL(clicked()), SLOT(scan()) ); + + m_changed = false; + + dirInit(); + pluginInit(); + + // Finally do the loading + load(); +} + +KPluginOptions::~KPluginOptions() +{ + delete m_pConfig; +} + + +void KPluginOptions::updatePLabel(int p) { + QString level; + p = (100 - p)/5; + if (p > 15) { + level = i18n("lowest priority", "lowest"); + } else if (p > 11) { + level = i18n("low priority", "low"); + } else if (p > 7) { + level = i18n("medium priority", "medium"); + } else if (p > 3) { + level = i18n("high priority", "high"); + } else { + level = i18n("highest priority", "highest"); + } + + priorityLabel->setText(i18n("CPU priority for plugins: %1").arg(level)); +} + +void KPluginOptions::load() +{ + load( false ); +} + +void KPluginOptions::load( bool useDefaults ) +{ + + + // *** load *** + global_policies.load(); + bool bPluginGlobal = global_policies.isFeatureEnabled(); + + // *** apply to GUI *** + enablePluginsGloballyCB->setChecked( bPluginGlobal ); + + domainSpecific->initialize(m_pConfig->readListEntry("PluginDomains")); + +/****************************************************************************/ + + KConfig *config = new KConfig("kcmnspluginrc", true); + + config->setReadDefaults( useDefaults ); + + config->setGroup("Misc"); + m_widget->scanAtStartup->setChecked( config->readBoolEntry( "startkdeScan", false ) ); + + m_widget->dirEdit->setURL(""); + m_widget->dirEdit->setEnabled( false ); + m_widget->dirRemove->setEnabled( false ); + m_widget->dirUp->setEnabled( false ); + m_widget->dirDown->setEnabled( false ); + enableHTTPOnly->setChecked( config->readBoolEntry("HTTP URLs Only", false) ); + enableUserDemand->setChecked( config->readBoolEntry("demandLoad", false) ); + priority->setValue(100 - KCLAMP(config->readNumEntry("Nice Level", 0), 0, 19) * 5); + updatePLabel(priority->value()); + + dirLoad( config, useDefaults ); + pluginLoad( config ); + + delete config; + + emit changed( useDefaults ); +} + +void KPluginOptions::defaults() +{ + load( true ); +} + +void KPluginOptions::save() +{ + global_policies.save(); + + domainSpecific->save(m_groupname,"PluginDomains"); + + m_pConfig->sync(); // I need a sync here, otherwise "apply" won't work + // instantly + + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); + +/*****************************************************************************/ + + KConfig *config= new KConfig("kcmnspluginrc", false); + + dirSave( config ); + pluginSave( config ); + + config->setGroup("Misc"); + config->writeEntry( "startkdeScan", m_widget->scanAtStartup->isChecked() ); + config->writeEntry( "HTTP URLs Only", enableHTTPOnly->isChecked() ); + config->writeEntry( "demandLoad", enableUserDemand->isChecked() ); + config->writeEntry("Nice Level", (int)(100 - priority->value()) / 5); + config->sync(); + delete config; + + change( false ); +} + +QString KPluginOptions::quickHelp() const +{ + return i18n("

      Konqueror Plugins

      The Konqueror web browser can use Netscape" + " plugins to show special content, just like the Navigator does. Please note that" + " the way you have to install Netscape plugins may depend on your distribution. A typical" + " place to install them is, for example, '/opt/netscape/plugins'."); +} + +void KPluginOptions::slotChanged() +{ + emit changed(true); +} + +void KPluginOptions::slotTogglePluginsEnabled() { + global_policies.setFeatureEnabled(enablePluginsGloballyCB->isChecked()); +} + +void KPluginOptions::slotShowDomainDlg() { + domainSpecificDlg->show(); +} + +/***********************************************************************************/ + +void KPluginOptions::scan() +{ + m_widget->scanButton->setEnabled(false); + if ( m_changed ) { + int ret = KMessageBox::warningYesNoCancel( this, + i18n("Do you want to apply your changes " + "before the scan? Otherwise the " + "changes will be lost."), QString::null, KStdGuiItem::save(), KStdGuiItem::discard() ); + if ( ret==KMessageBox::Cancel ) { + m_widget->scanButton->setEnabled(true); + return; + } + if ( ret==KMessageBox::Yes ) + save(); + } + + m_nspluginscan = new KProcIO; + QString scanExe = KGlobal::dirs()->findExe("nspluginscan"); + if (!scanExe) { + kdDebug() << "can't find nspluginviewer" << endl; + delete m_nspluginscan; + m_nspluginscan = 0L; + + KMessageBox::sorry ( this, + i18n("The nspluginscan executable cannot be found. " + "Netscape plugins will not be scanned.") ); + m_widget->scanButton->setEnabled(true); + return; + } + + // find nspluginscan executable + m_progress = new QProgressDialog( i18n("Scanning for plugins"), i18n("Cancel"), 100, this ); + m_progress->setProgress( 5 ); + + // start nspluginscan + *m_nspluginscan << scanExe << "--verbose"; + kdDebug() << "Running nspluginscan" << endl; + connect(m_nspluginscan, SIGNAL(readReady(KProcIO*)), + this, SLOT(progress(KProcIO*))); + connect(m_nspluginscan, SIGNAL(processExited(KProcess *)), + this, SLOT(scanDone())); + connect(m_progress, SIGNAL(cancelled()), this, SLOT(scanDone())); + + m_nspluginscan->start(); +} + +void KPluginOptions::progress(KProcIO *proc) +{ + QString line; + while(proc->readln(line) > 0) + ; + m_progress->setProgress(line.stripWhiteSpace().toInt()); +} + +void KPluginOptions::scanDone() +{ + m_progress->setProgress(100); + load(); + + delete m_progress; m_progress = 0L; + m_nspluginscan->deleteLater(); m_nspluginscan = 0L; + m_widget->scanButton->setEnabled(true); +} + +/***********************************************************************************/ + + +void KPluginOptions::dirInit() +{ + m_widget->dirEdit->setCaption(i18n("Select Plugin Scan Folder")); + connect( m_widget->dirNew, SIGNAL(clicked()), SLOT(dirNew())); + connect( m_widget->dirRemove, SIGNAL(clicked()), SLOT(dirRemove())); + connect( m_widget->dirUp, SIGNAL(clicked()), SLOT(dirUp())); + connect( m_widget->dirDown, SIGNAL(clicked()), SLOT(dirDown()) ); + connect( m_widget->useArtsdsp, SIGNAL(clicked()),SLOT(change())); + connect( m_widget->dirEdit, + SIGNAL(textChanged(const QString&)), + SLOT(dirEdited(const QString &)) ); + + connect( m_widget->dirList, + SIGNAL(executed(QListBoxItem*)), + SLOT(dirSelect(QListBoxItem*)) ); + + connect( m_widget->dirList, + SIGNAL(selectionChanged(QListBoxItem*)), + SLOT(dirSelect(QListBoxItem*)) ); +} + + +void KPluginOptions::dirLoad( KConfig *config, bool useDefault ) +{ + QStringList paths; + + // read search paths + + config->setGroup("Misc"); + if ( config->hasKey( "scanPaths" ) && !useDefault ) + paths = config->readListEntry( "scanPaths" ); + else {//keep sync with kdebase/nsplugins + paths.append("$HOME/.mozilla/plugins"); + paths.append("$HOME/.netscape/plugins"); + paths.append("/usr/lib/firefox/plugins"); + paths.append("/usr/lib64/browser-plugins"); + paths.append("/usr/lib/browser-plugins"); + paths.append("/usr/local/netscape/plugins"); + paths.append("/opt/mozilla/plugins"); + paths.append("/opt/mozilla/lib/plugins"); + paths.append("/opt/netscape/plugins"); + paths.append("/opt/netscape/communicator/plugins"); + paths.append("/usr/lib/netscape/plugins"); + paths.append("/usr/lib/netscape/plugins-libc5"); + paths.append("/usr/lib/netscape/plugins-libc6"); + paths.append("/usr/lib/mozilla/plugins"); + paths.append("/usr/lib64/netscape/plugins"); + paths.append("/usr/lib64/mozilla/plugins"); + paths.append("$MOZILLA_HOME/plugins"); + + } + + // fill list + m_widget->dirList->clear(); + m_widget->dirList->insertStringList( paths ); + + // setup other widgets + bool useArtsdsp = config->readBoolEntry( "useArtsdsp", false ); + m_widget->useArtsdsp->setChecked( useArtsdsp ); +} + + +void KPluginOptions::dirSave( KConfig *config ) +{ + // create stringlist + QStringList paths; + QListBoxItem *item = m_widget->dirList->firstItem(); + for ( ; item!=0; item=item->next() ) + if ( !item->text().isEmpty() ) + paths << item->text(); + + // write entry + config->setGroup( "Misc" ); + config->writeEntry( "scanPaths", paths ); + config->writeEntry( "useArtsdsp", m_widget->useArtsdsp->isOn() ); +} + + +void KPluginOptions::dirSelect( QListBoxItem *item ) +{ + m_widget->dirEdit->setEnabled( item!=0 ); + m_widget->dirRemove->setEnabled( item!=0 ); + + unsigned cur = m_widget->dirList->index(m_widget->dirList->selectedItem()); + m_widget->dirDown->setEnabled( item!=0 && curdirList->count()-1 ); + m_widget->dirUp->setEnabled( item!=0 && cur>0 ); + m_widget->dirEdit->setURL( item!=0 ? item->text() : QString::null ); + } + + +void KPluginOptions::dirNew() +{ + m_widget->dirList->insertItem( QString::null, 0 ); + m_widget->dirList->setCurrentItem( 0 ); + dirSelect( m_widget->dirList->selectedItem() ); + m_widget->dirEdit->setURL(QString::null); + m_widget->dirEdit->setFocus(); + change(); +} + + +void KPluginOptions::dirRemove() +{ + m_widget->dirEdit->setURL(QString::null); + delete m_widget->dirList->selectedItem(); + m_widget->dirRemove->setEnabled( false ); + m_widget->dirUp->setEnabled( false ); + m_widget->dirDown->setEnabled( false ); + m_widget->dirEdit->setEnabled( false ); + change(); +} + + +void KPluginOptions::dirUp() +{ + unsigned cur = m_widget->dirList->index(m_widget->dirList->selectedItem()); + if ( cur>0 ) { + QString txt = m_widget->dirList->text(cur-1); + m_widget->dirList->removeItem( cur-1 ); + m_widget->dirList->insertItem( txt, cur ); + + m_widget->dirUp->setEnabled( cur-1>0 ); + m_widget->dirDown->setEnabled( true ); + change(); + } +} + + +void KPluginOptions::dirDown() +{ + unsigned cur = m_widget->dirList->index(m_widget->dirList->selectedItem()); + if ( cur < m_widget->dirList->count()-1 ) { + QString txt = m_widget->dirList->text(cur+1); + m_widget->dirList->removeItem( cur+1 ); + m_widget->dirList->insertItem( txt, cur ); + + m_widget->dirUp->setEnabled( true ); + m_widget->dirDown->setEnabled( cur+1dirList->count()-1 ); + change(); + } +} + + +void KPluginOptions::dirEdited(const QString &txt ) +{ + if ( m_widget->dirList->currentText() != txt ) { + m_widget->dirList->blockSignals(true); + m_widget->dirList->changeItem( txt, m_widget->dirList->currentItem() ); + m_widget->dirList->blockSignals(false); + change(); + } +} + + +/***********************************************************************************/ + + +void KPluginOptions::pluginInit() +{ +} + + +void KPluginOptions::pluginLoad( KConfig* /*config*/ ) +{ + kdDebug() << "-> KPluginOptions::fillPluginList" << endl; + m_widget->pluginList->clear(); + QRegExp version(";version=[^:]*:"); + + // open the cache file + QFile cachef( locate("data", "nsplugins/cache") ); + if ( !cachef.exists() || !cachef.open(IO_ReadOnly) ) { + kdDebug() << "Could not load plugin cache file!" << endl; + return; + } + + QTextStream cache(&cachef); + + // root object + QListViewItem *root = new QListViewItem( m_widget->pluginList, i18n("Netscape Plugins") ); + root->setOpen( true ); + root->setSelectable( false ); + root->setExpandable( true ); + root->setPixmap(0, SmallIcon("netscape")); + + // read in cache + QString line, plugin; + QListViewItem *next = 0; + QListViewItem *lastMIME = 0; + while ( !cache.atEnd() ) { + + line = cache.readLine(); + //kdDebug() << line << endl; + if (line.isEmpty() || (line.left(1) == "#")) + continue; + + if (line.left(1) == "[") { + + plugin = line.mid(1,line.length()-2); + //kdDebug() << "plugin=" << plugin << endl; + + // add plugin root item + next = new QListViewItem( root, i18n("Plugin"), plugin ); + next->setOpen( false ); + next->setSelectable( false ); + next->setExpandable( true ); + + lastMIME = 0; + + continue; + } + + QStringList desc = QStringList::split(':', line, TRUE); + QString mime = desc[0].stripWhiteSpace(); + QString name = desc[2]; + QString suffixes = desc[1]; + + if (!mime.isEmpty()) { + //kdDebug() << "mime=" << mime << " desc=" << name << " suffix=" << suffixes << endl; + lastMIME = new QListViewItem( next, lastMIME, i18n("MIME type"), mime ); + lastMIME->setOpen( false ); + lastMIME->setSelectable( false ); + lastMIME->setExpandable( true ); + + QListViewItem *last = new QListViewItem( lastMIME, 0, i18n("Description"), name ); + last->setOpen( false ); + last->setSelectable( false ); + last->setExpandable( false ); + + last = new QListViewItem( lastMIME, last, i18n("Suffixes"), suffixes ); + last->setOpen( false ); + last->setSelectable( false ); + last->setExpandable( false ); + } + } + + //kdDebug() << "<- KPluginOptions::fillPluginList" << endl; +} + + +void KPluginOptions::pluginSave( KConfig* /*config*/ ) +{ + +} + +// == class PluginDomainDialog ===== + +PluginDomainDialog::PluginDomainDialog(QWidget *parent) : + QWidget(parent,"PluginDomainDialog") { + setCaption(i18n("Domain-Specific Policies")); + + thisLayout = new QVBoxLayout(this); + thisLayout->addSpacing(6); + QFrame *hrule = new QFrame(this); + hrule->setFrameStyle(QFrame::HLine | QFrame::Sunken); + thisLayout->addWidget(hrule); + thisLayout->addSpacing(6); + + QBoxLayout *hl = new QHBoxLayout(this,0,6); + hl->addStretch(10); + + QPushButton *closePB = new KPushButton(KStdGuiItem::close(),this); + connect(closePB,SIGNAL(clicked()),SLOT(slotClose())); + hl->addWidget(closePB); + thisLayout->addLayout(hl); +} + +PluginDomainDialog::~PluginDomainDialog() { +} + +void PluginDomainDialog::setMainWidget(QWidget *widget) { + thisLayout->insertWidget(0,widget); +} + +void PluginDomainDialog::slotClose() { + hide(); +} + +// == class PluginDomainListView ===== + +PluginDomainListView::PluginDomainListView(KConfig *config,const QString &group, + KPluginOptions *options,QWidget *parent,const char *name) + : DomainListView(config,i18n( "Doma&in-Specific" ), parent, name), + group(group), options(options) { +} + +PluginDomainListView::~PluginDomainListView() { +} + +void PluginDomainListView::setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *pol) { + QString caption; + switch (trigger) { + case AddButton: + caption = i18n( "New Plugin Policy" ); + pol->setFeatureEnabled(!options->enablePluginsGloballyCB->isChecked()); + break; + case ChangeButton: caption = i18n( "Change Plugin Policy" ); break; + default: ; // inhibit gcc warning + }/*end switch*/ + pDlg.setCaption(caption); + pDlg.setFeatureEnabledLabel(i18n("&Plugin policy:")); + pDlg.setFeatureEnabledWhatsThis(i18n("Select a plugin policy for " + "the above host or domain.")); + pDlg.refresh(); +} + +PluginPolicies *PluginDomainListView::createPolicies() { + return new PluginPolicies(config,group,false); +} + +PluginPolicies *PluginDomainListView::copyPolicies(Policies *pol) { + return new PluginPolicies(*static_cast(pol)); +} + +#include "pluginopts.moc" diff --git a/kcontrol/konqhtml/pluginopts.h b/kcontrol/konqhtml/pluginopts.h new file mode 100644 index 000000000..46142dcf7 --- /dev/null +++ b/kcontrol/konqhtml/pluginopts.h @@ -0,0 +1,163 @@ +//----------------------------------------------------------------------------- +// +// Plugin Options +// +// (c) 2002 Leo Savernik, per-domain settings +// (c) 2001, Daniel Naber, based on javaopts.h +// (c) 2000, Stefan Schimanski <1Stein@gmx.de>, Netscape parts +// +//----------------------------------------------------------------------------- + +#ifndef __PLUGINOPTS_H__ +#define __PLUGINOPTS_H__ + +#include + +#include "domainlistview.h" +#include "policies.h" + +class KConfig; +class QCheckBox; + +#include +#include "nsconfigwidget.h" + +class QBoxLayout; +class QLabel; +class QProgressDialog; +class QSlider; +class KDialogBase; +class KPluginOptions; +class KProcIO; + +/** policies with plugin-specific constructor + */ +class PluginPolicies : public Policies { +public: + /** + * constructor + * @param config configuration to initialize this instance from + * @param group config group to use if this instance contains the global + * policies (global == true) + * @param global true if this instance contains the global policy settings, + * false if this instance contains policies specific for a domain. + * @param domain name of the domain this instance is used to configure the + * policies for (case insensitive, ignored if global == true) + */ + PluginPolicies(KConfig* config, const QString &group, bool global, + const QString &domain = QString::null); + + virtual ~PluginPolicies(); +}; + +/** Plugin-specific enhancements to the domain list view + */ +class PluginDomainListView : public DomainListView { + Q_OBJECT +public: + PluginDomainListView(KConfig *config,const QString &group,KPluginOptions *opt, + QWidget *parent,const char *name = 0); + virtual ~PluginDomainListView(); + +protected: + virtual PluginPolicies *createPolicies(); + virtual PluginPolicies *copyPolicies(Policies *pol); + virtual void setupPolicyDlg(PushButton trigger,PolicyDialog &pDlg, + Policies *copy); + +private: + QString group; + KPluginOptions *options; +}; + +/** + * dialog for embedding a PluginDomainListView widget + */ +class PluginDomainDialog : public QWidget { + Q_OBJECT +public: + + PluginDomainDialog(QWidget *parent); + virtual ~PluginDomainDialog(); + + void setMainWidget(QWidget *widget); + +private slots: + virtual void slotClose(); + +private: + PluginDomainListView *domainSpecific; + QBoxLayout *thisLayout; +}; + +class KPluginOptions : public KCModule +{ + Q_OBJECT + +public: + KPluginOptions( KConfig* config, QString group, QWidget* parent = 0, const char* name = 0 ); + ~KPluginOptions(); + + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + QString quickHelp() const; + +private slots: + void slotChanged(); + void slotTogglePluginsEnabled(); + void slotShowDomainDlg(); + +private: + + KConfig* m_pConfig; + QString m_groupname; + + QCheckBox *enablePluginsGloballyCB, *enableHTTPOnly, *enableUserDemand; + + + protected slots: + void progress(KProcIO *); + void updatePLabel(int); + void change() { change( true ); }; + void change( bool c ) { emit changed(c); m_changed = c; }; + + void scan(); + void scanDone(); + + private: + NSConfigWidget *m_widget; + bool m_changed; + QProgressDialog *m_progress; + KProcIO* m_nspluginscan; + QSlider *priority; + QLabel *priorityLabel; + PluginPolicies global_policies; + PluginDomainListView *domainSpecific; + KDialogBase *domainSpecificDlg; + +/******************************************************************************/ + protected: + void dirInit(); + void dirLoad( KConfig *config, bool useDefault = false ); + void dirSave( KConfig *config ); + + protected slots: + void dirNew(); + void dirRemove(); + void dirUp(); + void dirDown(); + void dirEdited(const QString &); + void dirSelect( QListBoxItem * ); + +/******************************************************************************/ + protected: + void pluginInit(); + void pluginLoad( KConfig *config ); + void pluginSave( KConfig *config ); + + friend class PluginDomainListView; +}; + +#endif // __PLUGINOPTS_H__ diff --git a/kcontrol/konqhtml/policies.cpp b/kcontrol/konqhtml/policies.cpp new file mode 100644 index 000000000..153c80888 --- /dev/null +++ b/kcontrol/konqhtml/policies.cpp @@ -0,0 +1,74 @@ +/* + Copyright (c) 2002 Leo Savernik + Derived from jsopt.cpp, code copied from there is copyrighted to its + respective owners. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include +#include + +#include "policies.h" + +// == class Policies == + +Policies::Policies(KConfig* config,const QString &group, + bool global,const QString &domain, const QString &prefix, + const QString &feature_key) : + is_global(global), config(config), groupname(group), + prefix(prefix), feature_key(feature_key) { + + if (is_global) { + this->prefix = QString::null; // global keys have no prefix + }/*end if*/ + setDomain(domain); +} + +Policies::~Policies() { +} + +void Policies::setDomain(const QString &domain) { + if (is_global) return; + this->domain = domain.lower(); + groupname = this->domain; // group is domain in this case +} + +void Policies::load() { + config->setGroup(groupname); + + QString key = prefix + feature_key; + if (config->hasKey(key)) + feature_enabled = config->readBoolEntry(key); + else + feature_enabled = is_global ? true : INHERIT_POLICY; +} + +void Policies::defaults() { + feature_enabled = is_global ? true : INHERIT_POLICY; +} + +void Policies::save() { + config->setGroup(groupname); + + QString key = prefix + feature_key; + if (feature_enabled != INHERIT_POLICY) + config->writeEntry(key, (bool)feature_enabled); + else + config->deleteEntry(key); + + // don't do a config->sync() here for sake of efficiency +} diff --git a/kcontrol/konqhtml/policies.h b/kcontrol/konqhtml/policies.h new file mode 100644 index 000000000..b5643c0bd --- /dev/null +++ b/kcontrol/konqhtml/policies.h @@ -0,0 +1,134 @@ +/* + Copyright (c) 2002 Leo Savernik + Derived from jsopt.h, code copied from there is copyrighted to its + respective owners. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef __POLICIES_H__ +#define __POLICIES_H__ + +#include + +class KConfig; + +// special value for inheriting a global policy +#define INHERIT_POLICY 32767 + +/** + * @short Contains the basic policies and methods for their manipulation. + * + * This class provides access to the basic policies that are common + * to all features. + * + * @author Leo Savernik + */ +class Policies { +public: + /** + * constructor + * @param config configuration to initialize this instance from + * @param group config group to use if this instance contains the global + * policies (global == true) + * @param global true if this instance contains the global policy settings, + * false if it contains policies specific to a domain. + * @param domain name of the domain this instance is used to configure the + * policies for (case insensitive, ignored if global == true) + * @param prefix prefix to use for configuration keys. The domain-specific + * policies use of the format "<feature>." (note the trailing dot). + * Global policies have no prefix, it is ignored if global == true. + * @param feature_key key of the "feature enabled" policy. The final + * key the policy is stored under will be prefix + featureKey. + */ + Policies(KConfig* config, const QString &group, bool global, + const QString &domain, const QString &prefix, + const QString &feature_key); + + virtual ~Policies(); + + /** + * Returns true if this is the global policies object + */ + bool isGlobal() const { + return is_global; + } + + /** sets a new domain for this policy + * @param domain domain name, will be converted to lowercase + */ + void setDomain(const QString &domain); + + /** + * Returns whether the "feature enabled" policy is inherited. + */ + bool isFeatureEnabledPolicyInherited() const { + return feature_enabled == INHERIT_POLICY; + } + /** inherits "feature enabled" policy */ + void inheritFeatureEnabledPolicy() { + feature_enabled = INHERIT_POLICY; + } + /** + * Returns whether this feature is enabled. + * + * This will return an illegal value if isFeatureEnabledPolicyInherited + * is true. + */ + bool isFeatureEnabled() const { + return (bool)feature_enabled; + } + /** + * Enables/disables this feature + * @param on true will enable it, false disable it + */ + void setFeatureEnabled(int on) { + feature_enabled = on; + } + + /** + * (re)loads settings from configuration file given in the constructor. + * + * Implicitely sets the group given in the constructor. Don't forget to + * call this method from derived methods. + */ + virtual void load(); + /** + * saves current settings to the configuration file given in the constructor + * + * Implicitely sets the group given in the constructor. Don't forget to + * call this method from derived methods. + */ + virtual void save(); + /** + * restores the default settings + */ + virtual void defaults(); + +protected: + // true or false or INHERIT_POLICY + unsigned int feature_enabled; + + bool is_global; + KConfig *config; + QString groupname; + QString domain; + QString prefix; + QString feature_key; +}; + +#endif // __POLICIES_H__ + diff --git a/kcontrol/konqhtml/policydlg.cpp b/kcontrol/konqhtml/policydlg.cpp new file mode 100644 index 000000000..801068d3a --- /dev/null +++ b/kcontrol/konqhtml/policydlg.cpp @@ -0,0 +1,128 @@ +// (C) < 2002 to whoever created and edited this file before +// (C) 2002 Leo Savernik +// Generalizing the policy dialog + +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "policydlg.h" +#include "policies.h" + +PolicyDialog::PolicyDialog( Policies *policies, QWidget *parent, const char *name ) + : KDialogBase(parent, name, true, QString::null, Ok|Cancel, Ok, true), + policies(policies) +{ + QFrame *main = makeMainWidget(); + + insertIdx = 1; // index where to insert additional panels + topl = new QVBoxLayout(main, 0, spacingHint()); + + QGridLayout *grid = new QGridLayout(topl, 2, 2); + grid->setColStretch(1, 1); + + QLabel *l = new QLabel(i18n("&Host or domain name:"), main); + grid->addWidget(l, 0, 0); + + le_domain = new QLineEdit(main); + l->setBuddy( le_domain ); + grid->addWidget(le_domain, 0, 1); + connect( le_domain,SIGNAL(textChanged( const QString & )), + SLOT(slotTextChanged( const QString &))); + + QWhatsThis::add(le_domain, i18n("Enter the name of a host (like www.kde.org) " + "or a domain, starting with a dot (like .kde.org or .org)") ); + + l_feature_policy = new QLabel(main); + grid->addWidget(l_feature_policy, 1, 0); + + cb_feature_policy = new QComboBox(main); + l_feature_policy->setBuddy( cb_feature_policy ); + policy_values << i18n("Use Global") << i18n("Accept") << i18n("Reject"); + cb_feature_policy->insertStringList(policy_values); + grid->addWidget(cb_feature_policy, 1, 1); + + le_domain->setFocus(); + + enableButtonOK(!le_domain->text().isEmpty()); +} + +PolicyDialog::FeatureEnabledPolicy PolicyDialog::featureEnabledPolicy() const { + return (FeatureEnabledPolicy)cb_feature_policy->currentItem(); +} + +void PolicyDialog::slotTextChanged( const QString &text) +{ + enableButtonOK(!text.isEmpty()); +} + +void PolicyDialog::setDisableEdit( bool state, const QString& text ) +{ + le_domain->setText( text ); + + le_domain->setEnabled( state ); + + if( state ) + cb_feature_policy->setFocus(); +} + +void PolicyDialog::refresh() { + FeatureEnabledPolicy pol; + + if (policies->isFeatureEnabledPolicyInherited()) + pol = InheritGlobal; + else if (policies->isFeatureEnabled()) + pol = Accept; + else + pol = Reject; + cb_feature_policy->setCurrentItem(pol); +} + +void PolicyDialog::setFeatureEnabledLabel(const QString &text) { + l_feature_policy->setText(text); +} + +void PolicyDialog::setFeatureEnabledWhatsThis(const QString &text) { + QWhatsThis::add(cb_feature_policy, text); +} + +void PolicyDialog::addPolicyPanel(QWidget *panel) { + topl->insertWidget(insertIdx++,panel); +} + +QString PolicyDialog::featureEnabledPolicyText() const { + int pol = cb_feature_policy->currentItem(); + if (pol >= 0 && pol < 3) // Keep in sync with FeatureEnabledPolicy + return policy_values[pol]; + else + return QString::null; +} + +void PolicyDialog::accept() +{ + if( le_domain->text().isEmpty() ) + { + KMessageBox::information( 0, i18n("You must first enter a domain name.") ); + return; + } + + FeatureEnabledPolicy pol = (FeatureEnabledPolicy) + cb_feature_policy->currentItem(); + if (pol == InheritGlobal) { + policies->inheritFeatureEnabledPolicy(); + } else if (pol == Reject) { + policies->setFeatureEnabled(false); + } else { + policies->setFeatureEnabled(true); + } + QDialog::accept(); +} + +#include "policydlg.moc" diff --git a/kcontrol/konqhtml/policydlg.h b/kcontrol/konqhtml/policydlg.h new file mode 100644 index 000000000..6922aa736 --- /dev/null +++ b/kcontrol/konqhtml/policydlg.h @@ -0,0 +1,130 @@ +// (C) < 2002 to whoever created and edited this file before +// (C) 2002 Leo Savernik +// Generalizing the policy dialog + +#ifndef _POLICYDLG_H +#define _POLICYDLG_H + +#include + +#include +#include + +class QLabel; +class QComboBox; +class QString; +class QVBoxLayout; +class QPushButton; + +class Policies; + +/** + * A dialog for editing domain-specific policies. + * + * Each dialog must be associated with a relevant Policies instance which + * will be updated within this dialog appropriately. + * + * Additionally you can insert your own widget containing controls for + * specific policies with addPolicyPanel. + * + * @author unknown + */ +class PolicyDialog : public KDialogBase +{ + Q_OBJECT + +public: + /** + * Enumerates the possible return values for the "feature enabled" + * policy + */ + enum FeatureEnabledPolicy { InheritGlobal = 0, Accept, Reject }; + + /** constructor + * @param policies policies object this dialog will write the settings + * into. Note that it always reflects the current settings, + * even if the dialog has been cancelled. + * @param parent parent widget this belongs to + * @param name internal name + */ + PolicyDialog(Policies *policies, QWidget *parent = 0, const char *name = 0 ); + + virtual ~PolicyDialog() {}; + + /* + * @return whether this feature should be activated, deactivated or + * inherited from the respective global policy. + */ + FeatureEnabledPolicy featureEnabledPolicy() const; + + /** + * @return the textual representation of the current "feature enabled" + * policy + */ + QString featureEnabledPolicyText() const; + + /* + * @return the hostname for which the policy is being set + */ + QString domain() const { return le_domain->text(); } + + /* + * Sets the line-edit to be enabled/disabled. + * + * This method will set the text in the lineedit if the + * value is not null. + * + * @param state @p true to enable the line-edit, otherwise disabled. + * @param text the text to be set in the line-edit. Default is NULL. + */ + void setDisableEdit( bool /*state*/, const QString& text = QString::null ); + + /** + * Sets the label for the "feature enabled" policy + * @param text label text + */ + void setFeatureEnabledLabel(const QString &text); + + /** + * Sets the "What's This" text for the "feature enabled" policy + * combo box. + * @param text what's-this text + */ + void setFeatureEnabledWhatsThis(const QString &text); + + /** + * Syncs the controls with the current content of the + * associated policies object. + */ + void refresh(); + + /** + * Adds another panel which contains controls for more policies. + * + * The widget is inserted between the "feature enabled" combo box and + * the dialog buttons at the bottom. + * + * Currently at most one widget can be added. + * @param panel pointer to widget to insert. The dialog takes ownership + * of it, but does not reparent it. + */ + void addPolicyPanel(QWidget *panel); + +protected slots: + + virtual void accept(); + void slotTextChanged( const QString &text); + +private: + Policies *policies; + QVBoxLayout *topl; + int insertIdx; + QLineEdit *le_domain; + QLabel *l_feature_policy; + QComboBox *cb_feature_policy; + QWidget *panel; + QStringList policy_values; + QPushButton *okButton; +}; + +#endif diff --git a/kcontrol/konqhtml/uninstall.desktop b/kcontrol/konqhtml/uninstall.desktop new file mode 100644 index 000000000..e1e3e1732 --- /dev/null +++ b/kcontrol/konqhtml/uninstall.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/kcontrol/konsole/AUTHORS b/kcontrol/konsole/AUTHORS new file mode 100644 index 000000000..a515139f9 --- /dev/null +++ b/kcontrol/konsole/AUTHORS @@ -0,0 +1,2 @@ +Andrea Rizzi April 2001 +Stephan Binner October 2001 diff --git a/kcontrol/konsole/Makefile.am b/kcontrol/konsole/Makefile.am new file mode 100644 index 000000000..622e7fa71 --- /dev/null +++ b/kcontrol/konsole/Makefile.am @@ -0,0 +1,18 @@ +kde_module_LTLIBRARIES = kcm_konsole.la + +kcm_konsole_la_SOURCES = schemaeditor.cpp sessioneditor.cpp kcmkonsole.cpp \ + schemadialog.ui sessiondialog.ui kcmkonsoledialog.ui + +kcm_konsole_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_konsole_la_LIBADD = -lkdeui $(LIB_KIO) +AM_CPPFLAGS = $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = kcmkonsole.h schemaeditor.h sessioneditor.h schemadialog.h sessiondialog.h kcmkonsoledialog.h + +kcmkonsole_data_DATA = kcmkonsole.desktop +kcmkonsole_datadir = $(kde_appsdir)/.hidden + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmkonsole.pot diff --git a/kcontrol/konsole/kcmkonsole.cpp b/kcontrol/konsole/kcmkonsole.cpp new file mode 100644 index 000000000..19b547366 --- /dev/null +++ b/kcontrol/konsole/kcmkonsole.cpp @@ -0,0 +1,191 @@ +/*************************************************************************** + kcmkonsole.cpp - control module for konsole + ------------------- + begin : mar apr 17 16:44:59 CEST 2001 + copyright : (C) 2001 by Andrea Rizzi + email : rizzi@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include "schemaeditor.h" +#include "sessioneditor.h" +#include "kcmkonsole.h" + +typedef KGenericFactory ModuleFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_konsole, ModuleFactory("kcmkonsole") ) + +KCMKonsole::KCMKonsole(QWidget * parent, const char *name, const QStringList&) +:KCModule(ModuleFactory::instance(), parent, name) +{ + + setQuickHelp( i18n("

      Konsole

      With this module you can configure Konsole, the KDE terminal" + " application. You can configure the generic Konsole options (which can also be " + "configured using the RMB) and you can edit the schemas and sessions " + "available to Konsole.")); + + QVBoxLayout *topLayout = new QVBoxLayout(this); + dialog = new KCMKonsoleDialog(this); + dialog->line_spacingSB->setRange(0, 8, 1, false); + dialog->line_spacingSB->setSpecialValueText(i18n("normal line spacing", "Normal")); + dialog->show(); + topLayout->add(dialog); + load(); + + KAboutData *ab=new KAboutData( "kcmkonsole", I18N_NOOP("KCM Konsole"), + "0.2",I18N_NOOP("KControl module for Konsole configuration"), KAboutData::License_GPL, + "(c) 2001, Andrea Rizzi", 0, 0, "rizzi@kde.org"); + + ab->addAuthor("Andrea Rizzi",0, "rizzi@kde.org"); + setAboutData( ab ); + + connect(dialog->terminalSizeHintCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->warnCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->ctrldragCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->cutToBeginningOfLineCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->allowResizeCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->bidiCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->xonXoffCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->blinkingCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->frameCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->line_spacingSB,SIGNAL(valueChanged(int)), SLOT( changed() )); + connect(dialog->matchTabWinTitleCB,SIGNAL(toggled(bool)), SLOT( changed() )); + connect(dialog->silence_secondsSB,SIGNAL(valueChanged(int)), SLOT( changed() )); + connect(dialog->word_connectorLE,SIGNAL(textChanged(const QString &)), SLOT( changed() )); + connect(dialog->SchemaEditor1, SIGNAL(changed()), SLOT( changed() )); + connect(dialog->SessionEditor1, SIGNAL(changed()), SLOT( changed() )); + connect(dialog->SchemaEditor1, SIGNAL(schemaListChanged(const QStringList &,const QStringList &)), + dialog->SessionEditor1, SLOT(schemaListChanged(const QStringList &,const QStringList &))); + connect(dialog->SessionEditor1, SIGNAL(getList()), dialog->SchemaEditor1, SLOT(getList())); +} + +void KCMKonsole::load() +{ + load(false); +} + +void KCMKonsole::load(bool useDefaults) +{ + KConfig config("konsolerc", true); + config.setDesktopGroup(); + config.setReadDefaults(useDefaults); + + dialog->terminalSizeHintCB->setChecked(config.readBoolEntry("TerminalSizeHint",false)); + bidiOrig = config.readBoolEntry("EnableBidi",false); + dialog->bidiCB->setChecked(bidiOrig); + dialog->matchTabWinTitleCB->setChecked(config.readBoolEntry("MatchTabWinTitle",false)); + dialog->warnCB->setChecked(config.readBoolEntry("WarnQuit",true)); + dialog->ctrldragCB->setChecked(config.readBoolEntry("CtrlDrag",true)); + dialog->cutToBeginningOfLineCB->setChecked(config.readBoolEntry("CutToBeginningOfLine",false)); + dialog->allowResizeCB->setChecked(config.readBoolEntry("AllowResize",false)); + xonXoffOrig = config.readBoolEntry("XonXoff",false); + dialog->xonXoffCB->setChecked(xonXoffOrig); + dialog->blinkingCB->setChecked(config.readBoolEntry("BlinkingCursor",false)); + dialog->frameCB->setChecked(config.readBoolEntry("has frame",true)); + dialog->line_spacingSB->setValue(config.readUnsignedNumEntry( "LineSpacing", 0 )); + dialog->silence_secondsSB->setValue(config.readUnsignedNumEntry( "SilenceSeconds", 10 )); + dialog->word_connectorLE->setText(config.readEntry("wordseps",":@-./_~")); + + dialog->SchemaEditor1->setSchema(config.readEntry("schema")); + + emit changed(useDefaults); +} + +void KCMKonsole::save() +{ + if (dialog->SchemaEditor1->isModified()) + { + dialog->TabWidget2->showPage(dialog->tab_2); + dialog->SchemaEditor1->querySave(); + } + + if (dialog->SessionEditor1->isModified()) + { + dialog->TabWidget2->showPage(dialog->tab_3); + dialog->SessionEditor1->querySave(); + } + + KConfig config("konsolerc"); + config.setDesktopGroup(); + + config.writeEntry("TerminalSizeHint", dialog->terminalSizeHintCB->isChecked()); + bool bidiNew = dialog->bidiCB->isChecked(); + config.writeEntry("EnableBidi", bidiNew); + config.writeEntry("MatchTabWinTitle", dialog->matchTabWinTitleCB->isChecked()); + config.writeEntry("WarnQuit", dialog->warnCB->isChecked()); + config.writeEntry("CtrlDrag", dialog->ctrldragCB->isChecked()); + config.writeEntry("CutToBeginningOfLine", dialog->cutToBeginningOfLineCB->isChecked()); + config.writeEntry("AllowResize", dialog->allowResizeCB->isChecked()); + bool xonXoffNew = dialog->xonXoffCB->isChecked(); + config.writeEntry("XonXoff", xonXoffNew); + config.writeEntry("BlinkingCursor", dialog->blinkingCB->isChecked()); + config.writeEntry("has frame", dialog->frameCB->isChecked()); + config.writeEntry("LineSpacing" , dialog->line_spacingSB->value()); + config.writeEntry("SilenceSeconds" , dialog->silence_secondsSB->value()); + config.writeEntry("wordseps", dialog->word_connectorLE->text()); + + config.writeEntry("schema", dialog->SchemaEditor1->schema()); + + config.sync(); + + emit changed(false); + + DCOPClient *dcc = kapp->dcopClient(); + dcc->send("konsole-*", "konsole", "reparseConfiguration()", QByteArray()); + dcc->send("kdesktop", "default", "configure()", QByteArray()); + dcc->send("klauncher", "klauncher", "reparseConfiguration()", QByteArray()); + + if (xonXoffOrig != xonXoffNew) + { + xonXoffOrig = xonXoffNew; + KMessageBox::information(this, i18n("The Ctrl+S/Ctrl+Q flow control setting will only affect " + "newly started Konsole sessions.\n" + "The 'stty' command can be used to change the flow control " + "settings of existing Konsole sessions.")); + } + + if (bidiNew && !bidiOrig) + { + KMessageBox::information(this, i18n("You have chosen to enable " + "bidirectional text rendering by " + "default.\n" + "Note that bidirectional text may " + "not always be shown correctly, " + "especially when selecting parts of " + "text written right-to-left. This " + "is a known issue which cannot be " + "resolved at the moment due to the " + "nature of text handling in " + "console-based applications.")); + } + bidiOrig = bidiNew; + +} + +void KCMKonsole::defaults() +{ + load(true); +} + +#include "kcmkonsole.moc" diff --git a/kcontrol/konsole/kcmkonsole.desktop b/kcontrol/konsole/kcmkonsole.desktop new file mode 100644 index 000000000..8aa6aecf1 --- /dev/null +++ b/kcontrol/konsole/kcmkonsole.desktop @@ -0,0 +1,185 @@ +[Desktop Entry] +Icon=konsole +Type=Application +Exec=kcmshell kcmkonsole +DocPath=kcontrol/kcmkonsole/index.html + +X-KDE-Library=konsole +X-KDE-ParentApp=kcontrol +Name=Konsole +Name[ar]=طرفية التحكم +Name[az]=Konsol +Name[be]=Кансоль +Name[bg]=Конзола +Name[bn]=কনসোল +Name[bs]=Konzola +Name[ca]=Consola +Name[csb]=Kònsola +Name[el]=Κονσόλα +Name[eo]=Konzolo +Name[et]=Konsool +Name[eu]=Kontsola +Name[he]=מסוף +Name[hi]=कंसोल +Name[hr]=Konzola +Name[is]=Skjáhermir +Name[ka]=კონსოლი +Name[lo]=ຄອນໂຊລ - K +Name[mk]=Конзола +Name[mn]=Консол +Name[nb]=Konsoll +Name[ne]=कन्सोल +Name[nn]=Konsoll +Name[pa]=ਕੰਨਸੋਲ +Name[pl]=Konsola +Name[ro]=Consolă +Name[se]=Konsolla +Name[sk]=Konzola +Name[sl]=Konzola +Name[ta]=கான்சோல் +Name[te]=కాన్సోల్ +Name[tg]=Консол +Name[th]=คอนโซล K +Name[zu]=Ikhonsoli +Comment=Konsole configuration module +Comment[af]=Konsole opstelling module +Comment[ar]=وحدة إعداد طرفية التحكم +Comment[az]=Konsol quraşdırma modulu +Comment[be]=Модуль настаўлення кансолі +Comment[bg]=Настройване на конзолата +Comment[bn]=কনসোল কনফিগারেশন মডিউল +Comment[br]=Mollad kefluniadur Konsole +Comment[bs]=Modul sa podešavanje konzole +Comment[ca]=Mòdul de configuració de la consola +Comment[cs]=Konfigurační modul terminálu konsole +Comment[csb]=Mòduł kònfigùracëji kònsolë +Comment[cy]=Modiwl ffurfweddu Konsole +Comment[da]=Konsole-indstillingsmodul +Comment[de]=Modul zur Einrichtung von Konsole +Comment[el]=Άρθρωμα ρύθμισης Κονσόλας +Comment[eo]=Agordo de Konzolo +Comment[es]=Módulo de configuración de Konsole +Comment[et]=Terminaliemulaatori seadistamine +Comment[eu]=Kontsola konfiguratzeko modulua +Comment[fa]=پیمانۀ پیکربندی Konsole +Comment[fi]=Konsolen asetukset +Comment[fr]=Configuration de Konsole +Comment[fy]=Konsole-ynstellingsmodule +Comment[ga]=Modúl Cumraíochta Konsole +Comment[gl]=Módulo de configuración de Konsole +Comment[he]=שינוי הגדרות המסוף +Comment[hi]=कंसोल कॉन्फ़िगरेशन मोड +Comment[hr]=Modul za konfiguriranje konzole +Comment[hu]=A Konsole parancsértelmező beállításai +Comment[is]=Skjáhermisstillingar +Comment[it]=Modulo di configurazione di Konsole +Comment[ja]=Konsole の設定モジュール +Comment[ka]=კონსოლის კონფიგურაციის მოდული +Comment[kk]=Konsole модулін баптау +Comment[km]=ម៉ូឌុល​កំណត់​រចនាសម្ព័ន្ធ Konsole +Comment[lo]=ໂມດູນປັບແຕ່ງຄອນໂຊນ - K +Comment[lt]=Konsole konfigūravimo įrankis +Comment[lv]=Konsoles konfigurācijas modulis +Comment[mk]=Модул за конфигурација на конзолата +Comment[mn]=Консол тохируулгын модул +Comment[ms]=Konsol modul konfigurasi +Comment[mt]=Konfigurazzjoni ta' Konsole +Comment[nb]=Verktøy for å tilpasse Konsole +Comment[nds]=Moduul för't Instellen vun Konsole +Comment[ne]=कन्सोल कन्फिगरेसन मोड्युल +Comment[nl]=Konsole-configuratiemodule +Comment[nn]=Oppsettmodul for Konsole +Comment[nso]=Seripa sa peakanyo ya konsole +Comment[pa]=ਕੰਨਸੋਲ ਸੰਰਚਨਾ ਮੈਡੀਊਲ +Comment[pl]=Moduł konfiguracji konsoli +Comment[pt]=Módulo de configuração do Konsole +Comment[pt_BR]=Módulo de configuração do Konsole +Comment[ro]=Modul de configurare Konsole +Comment[ru]=Модуль настройки Konsole +Comment[rw]=Igice cy'iboneza rya Konsole +Comment[se]=Konsole:a heivehanmoduvla +Comment[sk]=Konfiguračný modul konzole +Comment[sl]=Modul za nastavitve konzole +Comment[sr]=Модул за подешавање Konsole +Comment[sr@Latn]=Modul za podešavanje Konsole +Comment[sv]=Anpassa Konsole +Comment[ta]=கான்சோல் வடிவமைப்பு பகுதி +Comment[tg]=Модули танзимоти Konsole +Comment[th]=โมดูลปรับแต่งคอนโซล K +Comment[tr]=Konsole Yapılandırma modülü +Comment[tt]=Konsol caylaw modulı +Comment[uk]=Засіб конфігурації модуля Konsole +Comment[uz]=Terminalni moslash moduli +Comment[uz@cyrillic]=Терминални мослаш модули +Comment[ven]=Modulu wa nzudzanyo wa Konsole +Comment[vi]=Cấu hình Konsole +Comment[wa]=Module d' apontiaedje do terminå di KDE Konsole +Comment[xh]=Umnqongo woqwalaselo we Konsole +Comment[zh_CN]=Konsole 配置模块 +Comment[zh_TW]=Konsole 組態模組 +Comment[zu]=Ingxenye yokuhlanganisela ikhonsoli +Keywords=konsole,schema,konsole background,colors,background,terminal application,terminal +Keywords[az]=konsol,sxem,konsol arxa planı,rənglər,arxa plan,terminal proqramı,terminal +Keywords[be]=Кансоль,Схема,Фон кансолі,Колеры,Фон,Тэрмінальная праграма,Тэрмінал,Эмулятар тэрміналу,konsole,schema,konsole background,colors,background,terminal application,terminal +Keywords[bg]=конзола, терминал, konsole, schema, konsole background, colors, background, terminal application, terminal +Keywords[ca]=consola,esquema,fons de la consola,colors,fons,aplicació de terminal,terminal +Keywords[cs]=konsole,schéma,pozadí konsole,barvy,pozadí,terminálová aplikace,terminál +Keywords[csb]=kònsola,schemat,spòdlé kònsolë,farwë,spòdlé,programa terminala,terminal +Keywords[cy]=konsole,sgema,cefndir konsole,lliwiau,cefndir,cymhwysiadau terfynell,terfynell +Keywords[da]=konsole,sammensætning,konsole-baggrund,farver,baggrund,terminalprogram,terminal +Keywords[de]=Konsole,Farbschema,Hintergrund,Farben,Terminal +Keywords[el]=κονσόλα,σχήμα,φόντο κονσόλας,χρώματα,φόντο,εφαρμογή τερματικού,τερματικό +Keywords[en_GB]=konsole,schema,konsole background,colours,background,terminal application,terminal +Keywords[eo]=Konzolo,koloraro,fono,koloro,konzolofono,terminaaplikaĵo,terminalo +Keywords[es]=konsole,esquema,fondo de konsole,colores,fondo,aplicación de terminal,terminal +Keywords[et]=konsool,skeem,konsooli taust,värvid,taust,terminal,terminaliemulaator +Keywords[eu]=konsole,eskema,kontsolaren atzeko planoa,koloreak,atzeko planoa,terminal aplikazioa,terminala +Keywords[fa]=konsole، طرحواره، زمینه konsole، رنگها، زمینه، کاربرد پایانه، پایانه +Keywords[fi]=konsole,teema,konsolen tausta,värit,tausta,pääteohjelma,pääte,komento,komentikkuna +Keywords[fr]=konsole,modèle,fond,couleurs,terminal +Keywords[fy]=konsole,skema,konsole eftergrûn,colors,kleuren,background,eftergrûn,terminal applikaasje,terminal +Keywords[ga]=konsole,scéimre,cúlra konsole,dathanna,cúlra,clár teirminéil,teirminéal +Keywords[gl]=konsole,esquema,fondo de konsole,cores,fondo,aplicación de terminal,terminal +Keywords[he]=מסוף,יישום מסוף,רקע,צבעים,רקע המסוף,תבנית, konsole,schema,konsole background,colors,background,terminal application,terminal +Keywords[hi]=कंसोल,योजना,कंसोल पृष्ठभूमि,रंग,पृष्ठ भूमि,टर्मिनल अनुप्रयोग,टर्मिनल +Keywords[hr]=konsole,schema,konsole background,colors,background,terminal application,terminal,konzola,shema,pozadina konzole,boje,pozadina,terminalska aplikacija +Keywords[hu]=Konsole,kinézet,terminál-háttér,színek,háttér,terminálalkalmazás,terminál +Keywords[is]=konsole,skjáhermir,skjáhermissbakgrunnur,litir,bakgrunnur,terminal application,terminal +Keywords[it]=konsole,schema,sfondo di konsole,colori,sfondo,terminale,shell +Keywords[ja]=konsole,schema,konsole 背景,色,背景,ターミナルアプリケーション,ターミナル +Keywords[km]=កុងសូល,គ្រោងការណ៍,ផ្ទៃ​ខាង​ក្រោយ​កុងសូល,ពណ៌,ផ្ទៃ​ខាង​ក្រោយ,កម្មវិធី​ស្ថានីយ,ស្ថានីយ +Keywords[lt]=konsole,schema,konsole background,colors,background,terminal application,terminal, konsolė, schema, konsolės fono spalva, spalvos, fono spalva, terminalinė programa, terminalas +Keywords[lv]=konsole,shēma,konsoles fons,krāsas,fons,termināla aplikācija,termināls +Keywords[mk]=konsole,schema,konsole background,colors,background,terminal application,terminal,конзола,шема,подлога на конзола,позадина на конзола,бои,подлога,позадина,терминалска апликација,терминал +Keywords[mn]=Консол,Өнгөний схем,Дэвсгэр,Өнгө,Терминал +Keywords[mt]=konsole,schema,konsole background,colors,background,terminal application,terminal,skema,sfond,kuluri,emulatur +Keywords[nb]=konsole,oppsett,konsoll,konsollbakgrunn,farger,bakgrunn,terminal +Keywords[nds]=Konsole,Muster,Klören,Achtergrund,Terminalprogramm,Terminal +Keywords[ne]=कन्सोल, स्कीमा, कन्सोल पृष्ठभूमि, रङहरू, पृष्ठभूमि, टर्मिनल अनुप्रयोग, टर्मिनल +Keywords[nn]=konsoll,oppsett,konsollbakgrunn,fargar,bakgrunn,terminal +Keywords[nso]=konsole,schema,bokamorago bja konsole,mebala,bokamorago,tshomiso ya terminal,terminal +Keywords[pa]=konsole,schema,konsole background,colors,background,terminal application,terminal,ਕੰਨਸੋਲ,ਸਕੀਮ,ਰੰਗ,ਟਰਮੀਨਲ +Keywords[pl]=konsola,schemat,tło konsoli,kolory,tło,program terminala,terminal +Keywords[pt]=konsole,esquema,fundo do konsole,cores,fundo,aplicação de terminal,terminal +Keywords[pt_BR]=konsole,esquema,fundo do konsole,cores,segundo plano,aplicativo de terminal, terminal +Keywords[ro]=consolă,konsole,schemă,fundal,terminal,aplicație terminal +Keywords[rw]=Konsole,igishushanyombonera ,mbuganyuma ya konsole,amabara , mbuganyuma ,Porogaramu Igihera, Igihera +Keywords[se]=konsolla,heivehus,konsolladuogás,ivnnit,duogáš,terminála +Keywords[sk]=konsole,schéma,pozadie konzole,konzola,farby,pozadie,terminálová aplikácia,terminál +Keywords[sl]=konsola,shema,ozadje konzole,barve,ozadje,terminalski program,terminal +Keywords[sr]=konsole,schema,konsole background,colors,background,terminal application,terminal,терминал,боје,позадина,шема +Keywords[sr@Latn]=konsole,schema,konsole background,colors,background,terminal application,terminal,terminal,boje,pozadina,šema +Keywords[sv]=konsole,konsoll,schema,konsol bakgrund,färger,bakgrund,terminalprogram,terminal +Keywords[ta]=கான்சோல்,அமைப்பு,கான்சோல் பின்ன்ணி,வண்ணங்கள்,பின்ன்ணி,கடைசி பயன்பாடு,கடைசி +Keywords[th]=คอนโซล K,ชุดรูปแบบ,พื้นหลังคอนโซล,สี,พื้นหลัง,แอพพลิเคชันเทอร์มินัล,เทอร์มินัล +Keywords[tr]=konsol,şema,konsol arkaplanı,renkler,arkaplan,terminal,konsole +Keywords[uk]=konsole,схема,тло konsole,кольори,тло,програма терміналу,термінал +Keywords[uz]=terminalning orqa foni,ranglar,orqa fon,terminal dasturi,terminal +Keywords[uz@cyrillic]=терминалнинг орқа фони,ранглар,орқа фон,терминал дастури,терминал +Keywords[ven]=konsole,tshikimu,vhuvha ha konsole,mivhala ya konsole,theminala,apulifikhesheni ya theminala,theminala +Keywords[vi]=konsole,schema,ảnh nền của konsole,màu,nền,trình đầu cuối,thiết bị cuối +Keywords[wa]=konsole,arindjmint,fond del konsole,coleurs,fond,prgrame terminå,terminå +Keywords[xh]=konsole,schema,imvelaphi ye konsole,imibala,imvelaphi,isicelo sesiphelo sendlela,isiphelo sendlela +Keywords[zh_CN]=konsole,schema,konsole background,colors,background,terminal application,terminal,颜色,背景色,终端程序,终端 +Keywords[zh_TW]=konsole,schema,konsole background,colors,background,terminal application,terminal,配色,konsole 背景,顏色,背景,終端機應用程式,終端機 +Keywords[zu]=konsole,iplani,inkundla yekhonsoli,imibala,inkundla, umyaleli wangaphandle,ithuluzi langaphandle diff --git a/kcontrol/konsole/kcmkonsole.h b/kcontrol/konsole/kcmkonsole.h new file mode 100644 index 000000000..ae6ee069b --- /dev/null +++ b/kcontrol/konsole/kcmkonsole.h @@ -0,0 +1,46 @@ +/*************************************************************************** + kcmkonsole.h + ------------------- + begin : mar apr 17 16:44:59 CEST 2001 + copyright : (C) 2001 by Andrea Rizzi + email : rizzi@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef KCMKONSOLE_H +#define KCMKONSOLE_H + +#include + +#include "kcmkonsoledialog.h" + +class QFont; +class QStringList; + +class KCMKonsole + : public KCModule +{ + Q_OBJECT + +public: + KCMKonsole (QWidget *parent = 0, const char *name = 0, const QStringList& = 0); + + void load(); + void load(bool useDefaults); + void save(); + void defaults(); +private: + KCMKonsoleDialog *dialog; + bool xonXoffOrig; + bool bidiOrig; +}; + +#endif diff --git a/kcontrol/konsole/kcmkonsoledialog.ui b/kcontrol/konsole/kcmkonsoledialog.ui new file mode 100644 index 000000000..bb805ed4b --- /dev/null +++ b/kcontrol/konsole/kcmkonsoledialog.ui @@ -0,0 +1,390 @@ + +KCMKonsoleDialog + + + KCMKonsoleDialog + + + + 0 + 0 + 507 + 490 + + + + + + + + + unnamed + + + 0 + + + + TabWidget2 + + + 0 + + + + + + + + tab + + + &General + + + + unnamed + + + + Spacer3 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + GroupBox3 + + + Double Click + + + + unnamed + + + + TextLabel1_3 + + + Consider the following characters &part of a word when double clicking: + + + word_connectorLE + + + + + word_connectorLE + + + + 1 + 5 + 0 + 0 + + + + + + + + GroupBox2 + + + Misc + + + + unnamed + + + + terminalSizeHintCB + + + Show terminal si&ze after resizing + + + + + frameCB + + + Show &frame + + + + + warnCB + + + &Confirm quit when closing more than one session + + + + + blinkingCB + + + &Blinking cursor + + + + + ctrldragCB + + + &Require Ctrl key for drag and drop + + + + + cutToBeginningOfLineCB + + + Triple click selects &only from the current word forward + + + + + allowResizeCB + + + Allow progr&ams to resize terminal window + + + + + xonXoffCB + + + Use Ctrl+S/Ctrl+Q flow control + + + + + Spacer3 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + bidiCB + + + Enable bidirectional text rendering + + + + + SilenceLabel + + + + 1 + 5 + 0 + 0 + + + + Seconds to detect s&ilence: + + + silence_secondsSB + + + + + silence_secondsSB + + + + 1 + 0 + 0 + 0 + + + + 1 + + + + + line_spacingSB + + + + 1 + 0 + 0 + 0 + + + + 0 + + + 8 + + + + + TextLabel1_4 + + + + 1 + 5 + 0 + 0 + + + + &Line spacing: + + + line_spacingSB + + + + + Spacer2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + matchTabWinTitleCB + + + Set tab title to match window title + + + + + + + + + tab + + + &Schema + + + + unnamed + + + + SchemaEditor1 + + + + + + + tab + + + S&ession + + + + unnamed + + + + SessionEditor1 + + + + + + + + + + SchemaEditor +
      schemaeditor.h
      + + -1 + -1 + + 0 + + 7 + 7 + 0 + 0 + +
      + + SessionEditor +
      sessioneditor.h
      + + -1 + -1 + + 0 + + 7 + 7 + 0 + 0 + +
      +
      + + kcolorbutton.h + knuminput.h + kdialog.h + + + + + knuminput.h + knuminput.h + knuminput.h + knuminput.h + schemaeditor.h + sessioneditor.h + +
      diff --git a/kcontrol/konsole/schemadialog.ui b/kcontrol/konsole/schemadialog.ui new file mode 100644 index 000000000..64fda6a49 --- /dev/null +++ b/kcontrol/konsole/schemadialog.ui @@ -0,0 +1,631 @@ + +SchemaDialog + + + SchemaDialog + + + + 0 + 0 + 420 + 423 + + + + Konsole Schema Editor + + + + + + + + unnamed + + + 0 + + + + Layout2 + + + + unnamed + + + + TextLabel1 + + + &Title: + + + titleLine + + + + + titleLine + + + + 7 + 5 + 0 + 0 + + + + + + + + GroupBox1 + + + + 5 + 3 + 0 + 0 + + + + Colors + + + + unnamed + + + + TextLabel8 + + + Shell co&lor: + + + colorCombo + + + + + boldCheck + + + &Bold + + + + + Spacer5 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + colorButton + + + + + + + + + Custom + + + + + System Background + + + + + System Foreground + + + + + Random Hue + + + + typeCombo + + + + + Spacer2 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + transparentCheck + + + Trans&parent + + + + + TextLabel1_2 + + + &Konsole color: + + + typeCombo + + + + + + 0 - Foreground Color + + + + + 1 - Background Color + + + + + 2 - Color 0 (black) + + + + + 3 - Color 1 (red) + + + + + 4 - Color 2 (green) + + + + + 5 - Color 3 (yellow) + + + + + 6 - Color 4 (blue) + + + + + 7 - Color 5 (magenta) + + + + + 8 - Color 6 (cyan) + + + + + 9 - Color 7 (white) + + + + + 10 - Foreground Intensive Color + + + + + 11 - Background Intensive Color + + + + + 12 - Color 0 Intensive (gray) + + + + + 13 - Color 1 Intensive (light red) + + + + + 14 - Color 2 Intensive (light green) + + + + + 15 - Color 3 Intensive (light yellow) + + + + + 16 - Color 4 Intensive (light blue) + + + + + 17 - Color 5 Intensive (light magenta) + + + + + 18 - Color 6 Intensive (light cyan) + + + + + 19 - Color 7 Intensive (white) + + + + colorCombo + + + + 5 + 5 + 0 + 0 + + + + + + + + GroupBox2 + + + Schema + + + + unnamed + + + + schemaList + + + + + defaultSchemaCB + + + S&et as default schema + + + + + Layout3 + + + + unnamed + + + + saveButton + + + Sa&ve Schema... + + + + + removeButton + + + &Remove Schema + + + + + Spacer7 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + + GroupBox13 + + + Background + + + + unnamed + + + + Spacer1 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + backgndLine + + + + + imageBrowse + + + ... + + + + + + Tiled + + + + + Centered + + + + + Full + + + + modeCombo + + + + + TextLabel11 + + + &Image: + + + modeCombo + + + + + TextLabel6 + + + Min + + + + + shadeSlide + + + 50 + + + Horizontal + + + + + TextLabel5 + + + Max + + + + + TextLabel3 + + + Shade t&o: + + + shadeColor + + + + + shadeColor + + + + + + + + previewPixmap + + + + 0 + 0 + 0 + 0 + + + + + 180 + 120 + + + + + 180 + 120 + + + + Panel + + + Sunken + + + true + + + + + transparencyCheck + + + Tr&ansparent + + + + + + + Spacer4 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + transparencyCheck + toggled(bool) + shadeSlide + setEnabled(bool) + + + transparencyCheck + toggled(bool) + shadeColor + setEnabled(bool) + + + transparencyCheck + toggled(bool) + TextLabel3 + setEnabled(bool) + + + transparencyCheck + toggled(bool) + TextLabel6 + setEnabled(bool) + + + transparencyCheck + toggled(bool) + TextLabel5 + setDisabled(bool) + + + transparencyCheck + toggled(bool) + TextLabel5 + setEnabled(bool) + + + defaultSchemaCB + toggled(bool) + defaultSchemaCB + setDisabled(bool) + + + transparencyCheck + toggled(bool) + backgndLine + setDisabled(bool) + + + transparencyCheck + toggled(bool) + imageBrowse + setDisabled(bool) + + + + titleLine + colorCombo + typeCombo + boldCheck + transparentCheck + colorButton + schemaList + defaultSchemaCB + saveButton + removeButton + modeCombo + backgndLine + transparencyCheck + shadeColor + shadeSlide + + + kcolorbutton.h + kdialog.h + + + + diff --git a/kcontrol/konsole/schemaeditor.cpp b/kcontrol/konsole/schemaeditor.cpp new file mode 100644 index 000000000..f7591bee8 --- /dev/null +++ b/kcontrol/konsole/schemaeditor.cpp @@ -0,0 +1,708 @@ +/*************************************************************************** + schemaeditor.cpp - description + ------------------- + begin : mar apr 17 16:44:59 CEST 2001 + copyright : (C) 2001 by Andrea Rizzi + email : rizzi@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#define TABLE_COLORS 20 + + +#include "schemaeditor.h" +#include "schemaeditor.moc" + +#include + +#include +#include +#include +#include +#include +#include +#include + +//#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// SchemaListBoxText is a list box text item with schema filename +class SchemaListBoxText : public QListBoxText +{ + public: + SchemaListBoxText(const QString &title, const QString &filename): QListBoxText(title) + { + m_filename = filename; + }; + + const QString filename() { return m_filename; }; + + private: + QString m_filename; +}; + + +SchemaEditor::SchemaEditor(QWidget * parent, const char *name) +:SchemaDialog(parent, name) +{ + schMod= false; + loaded = false; + schemaLoaded = false; + change = false; + oldSlot = 0; + oldSchema = -1; + color.resize(20); + type.resize(20); + bold.resize(20); + transparent.resize(20); + defaultSchema = ""; + spix = new KSharedPixmap; + + connect(spix, SIGNAL(done(bool)), SLOT(previewLoaded(bool))); + + DCOPClient *client = kapp->dcopClient(); + if (!client->isAttached()) + client->attach(); + QByteArray data; + + QDataStream args(data, IO_WriteOnly); + args << 1; + client->send("kdesktop", "KBackgroundIface", "setExport(int)", data); + + + + + transparencyCheck->setChecked(true); + transparencyCheck->setChecked(false); + + + KGlobal::locale()->insertCatalogue("konsole"); // For schema translations + connect(imageBrowse, SIGNAL(clicked()), this, SLOT(imageSelect())); + connect(saveButton, SIGNAL(clicked()), this, SLOT(saveCurrent())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeCurrent())); + connect(colorCombo, SIGNAL(activated(int)), this, SLOT(slotColorChanged(int))); + connect(typeCombo, SIGNAL(activated(int)), this, SLOT(slotTypeChanged(int))); + connect(schemaList, SIGNAL(highlighted(int)), this, SLOT(readSchema(int))); + connect(shadeColor, SIGNAL(changed(const QColor&)), this, SLOT(updatePreview())); + connect(shadeSlide, SIGNAL(valueChanged(int)), this, SLOT(updatePreview())); + connect(transparencyCheck, SIGNAL(toggled(bool)), this, SLOT(updatePreview())); + connect(backgndLine, SIGNAL(returnPressed()), this, SLOT(updatePreview())); + + connect(titleLine, SIGNAL(textChanged(const QString&)), this, SLOT(schemaModified())); + connect(shadeColor, SIGNAL(changed(const QColor&)), this, SLOT(schemaModified())); + connect(shadeSlide, SIGNAL(valueChanged(int)), this, SLOT(schemaModified())); + connect(transparencyCheck, SIGNAL(toggled(bool)), this, SLOT(schemaModified())); + connect(modeCombo, SIGNAL(activated(int)), this, SLOT(schemaModified())); + connect(backgndLine, SIGNAL(returnPressed()), this, SLOT(schemaModified())); + connect(transparentCheck, SIGNAL(toggled(bool)), this, SLOT(schemaModified())); + connect(boldCheck, SIGNAL(toggled(bool)), this, SLOT(schemaModified())); + connect(colorButton, SIGNAL(changed(const QColor&)), this, SLOT(schemaModified())); + connect(backgndLine, SIGNAL(textChanged(const QString&)), this, SLOT(schemaModified())); + + connect(defaultSchemaCB, SIGNAL(toggled(bool)), this, SIGNAL(changed())); + removeButton->setEnabled( schemaList->currentItem() ); +} + + +QString SchemaEditor::schema() +{ + QString filename = defaultSchema; + + int i = schemaList->currentItem(); + if (defaultSchemaCB->isChecked() && i>=0) + filename = ((SchemaListBoxText *) schemaList->item(i))->filename(); + + return filename.section('/',-1); +} + + +void SchemaEditor::setSchema(QString sch) +{ + defaultSchema = sch; + sch = locate("data", "konsole/"+sch); + + int sc = -1; + for (int i = 0; i < (int) schemaList->count(); i++) + if (sch == ((SchemaListBoxText *) schemaList->item(i))->filename()) + sc = i; + + oldSchema = sc; + if (sc == -1) + sc = 0; + schemaList->setCurrentItem(sc); +// readSchema(sc); +} + +SchemaEditor::~SchemaEditor() +{ + delete spix; +} + + + +void SchemaEditor::updatePreview() +{ + + if (transparencyCheck->isChecked()) { + if (loaded) { + float rx = (100.0 - shadeSlide->value()) / 100; + QImage ima(pix.convertToImage()); + ima = KImageEffect::fade(ima, rx, shadeColor->color()); + QPixmap pm; + pm.convertFromImage(ima); + previewPixmap->setPixmap(pm); + previewPixmap->setScaledContents(true); + } + else //try to reload + { + if(!spix->loadFromShared(QString("DESKTOP1"))) + kdDebug(0) << "cannot load" << endl; + + } + } else { + QPixmap pm; + pm.load(backgndLine->text()); + if ( pm.isNull() ) { + previewPixmap->clear(); + } else { + previewPixmap->setPixmap(pm); + previewPixmap->setScaledContents(true); + } + } + +} + +void SchemaEditor::previewLoaded(bool l) +{ + if (l) { + QWMatrix mat; + pix = + spix->xForm(mat. + scale(180.0 / spix->QPixmap::width(), + 100.0 / spix->QPixmap::height())); + kdDebug(0) << "Loaded" << endl; + loaded = true; + if (transparencyCheck->isChecked()) { + updatePreview(); + } + + } else + kdDebug(0) << "error loading" << endl; + +} + + +void SchemaEditor::getList() +{ + if (! schemaLoaded) { + loadAllSchema(); + setSchema(defaultSchema); + schemaLoaded = true; + change = true; + } +} + +void SchemaEditor::show() +{ + getList(); + SchemaDialog::show(); +} + + +void SchemaEditor::loadAllSchema(QString currentFile) +{ + QStringList list = KGlobal::dirs()->findAllResources("data", "konsole/*.schema"); + QStringList::ConstIterator it; + disconnect(schemaList, SIGNAL(highlighted(int)), this, SLOT(readSchema(int))); + schemaList->clear(); + + QListBoxItem* currentItem = 0; + for (it = list.begin(); it != list.end(); ++it) { + + QString name = (*it); + + QString title = readSchemaTitle(name); + + // Only insert new items so that local items override global + if (schemaList->findItem(title, ExactMatch) == 0) { + if (title.isNull() || title.isEmpty()) + title=i18n("untitled"); + + schemaList->insertItem(new SchemaListBoxText(title, name)); + if (currentFile==name.section('/',-1)) + currentItem = schemaList->item( schemaList->count()-1 ); + } + } + schemaList->sort(); + schemaList->setCurrentItem(0); // select the first added item correctly too + schemaList->setCurrentItem(currentItem); + connect(schemaList, SIGNAL(highlighted(int)), this, SLOT(readSchema(int))); + schemaListChanged(); +} + +void SchemaEditor::imageSelect() +{ + QString start; + start = backgndLine->text(); + if (start.isEmpty()) + { + QStringList list=KGlobal::dirs()->resourceDirs("wallpaper"); + if(list.count()>0) + start= list.last(); + } + + KURL url = KFileDialog::getImageOpenURL(start, 0, i18n("Select Background Image")); +// KURL url=KFileDialog::getOpenURL(start,"",0,i18n("Select Background Image")); + if(!url.path().isEmpty()) + { + backgndLine->setText(url.path()); + updatePreview(); + } +} + +void SchemaEditor::slotTypeChanged(int slot) +{ + schemaModified(); + + bool active = slot == 0 || slot == 3; + colorButton->setEnabled(active); + boldCheck->setEnabled(active); + transparentCheck->setEnabled(active); +} + + +void SchemaEditor::slotColorChanged(int slot) +{ + kdDebug(0) << slot << endl; + color[oldSlot] = colorButton->color(); + type[oldSlot] = typeCombo->currentItem(); + bold[oldSlot] = boldCheck->isChecked(); + transparent[oldSlot] = transparentCheck->isChecked(); + + change = false; // Don't mark as modified + transparentCheck->setChecked(transparent[slot]); + boldCheck->setChecked(bold[slot]); + typeCombo->setCurrentItem(type[slot]); + colorButton->setColor(color[slot]); + oldSlot = slot; + change = true; +} + +void SchemaEditor::removeCurrent() +{ + int i = schemaList->currentItem(); + if(i==-1) + return; + QString base = ((SchemaListBoxText *) schemaList->item(i))->filename(); + + // Query if system schemas should be removed + if (locateLocal("data", "konsole/" + base.section('/', -1)) != base) { + int code = KMessageBox::warningContinueCancel(this, + i18n("You are trying to remove a system schema. Are you sure?"), + i18n("Removing System Schema"), + KGuiItem(i18n("&Delete"), "editdelete")); + if (code != KMessageBox::Continue) + return; + } + + QString base_filename = base.section('/',-1); + + if(base_filename==schema()) + setSchema(""); + + if (!QFile::remove(base)) + KMessageBox::error(this, + i18n("Cannot remove the schema.\nMaybe it is a system schema.\n"), + i18n("Error Removing Schema")); + + loadAllSchema(); + + setSchema(defaultSchema); + +} + +void SchemaEditor::saveCurrent() +{ + + //This is to update the color table + colorCombo->setCurrentItem(0); + slotColorChanged(0); + + QString fullpath; + if (schemaList->currentText() == titleLine->text()) { + int i = schemaList->currentItem(); + fullpath = ((SchemaListBoxText *) schemaList->item(i))->filename().section('/',-1); + } + else { + // Only ask for a name for changed titleLine, considered a "save as" + fullpath = titleLine->text().stripWhiteSpace().simplifyWhiteSpace()+".schema"; + + bool ok; + fullpath = KInputDialog::getText( i18n( "Save Schema" ), + i18n( "File name:" ), fullpath, &ok, this ); + if (!ok) return; + } + + if (fullpath[0] != '/') + fullpath = KGlobal::dirs()->saveLocation("data", "konsole/") + fullpath; + + QFile f(fullpath); + if (f.open(IO_WriteOnly)) { + QTextStream t(&f); + t.setEncoding( QTextStream::UnicodeUTF8 ); + + t << "# schema for konsole autogenerated with the schema editor" << endl; + t << endl; + t << "title " << titleLine->text() << endl; // Use title line as schema title + t << endl; + if (transparencyCheck->isChecked()) { + QColor c = shadeColor->color(); + QString tra; + tra.sprintf("transparency %1.2f %3d %3d %3d", + 1.0 * (100 - shadeSlide->value()) / 100, c.red(), c.green(), c.blue()); + t << tra << endl; + } + + if (!backgndLine->text().isEmpty()) { + QString smode; + int mode; + mode = modeCombo->currentItem(); + if (mode == 0) + smode = "tile"; + if (mode == 1) + smode = "center"; + if (mode == 2) + smode = "full"; + + QString image; + image.sprintf("image %s %s", + (const char *) smode.latin1(), + (const char *) backgndLine->text().utf8()); + t << image << endl; + } + t << endl; + t << "# foreground colors" << endl; + t << endl; + t << "# note that the default background color is flagged" << endl; + t << "# to become transparent when an image is present." << endl; + t << endl; + t << "# slot transparent bold" << endl; + t << "# | red grn blu | |" << endl; + t << "# V V--color--V V V" << endl; + + for (int i = 0; i < 20; i++) { + QString scol; + if (type[i] == 0) + scol.sprintf("color %2d %3d %3d %3d %2d %1d # %s", i, + color[i].red(), color[i].green(), color[i].blue(), + transparent[i], bold[i], + (const char *) colorCombo->text(i).utf8()); + else if (type[i] == 1) + scol.sprintf("sysfg %2d %2d %1d # %s", i, + transparent[i], bold[i], + (const char *) colorCombo->text(i).utf8()); + else if (type[i] == 2) + scol.sprintf("sysbg %2d %2d %1d # %s", i, + transparent[i], bold[i], + (const char *) colorCombo->text(i).utf8()); + else { + int ch, cs, cv; + color[i].hsv(&ch, &cs, &cv); + scol.sprintf("rcolor %1d %3d %3d %2d %1d # %s", i, + cs, cv, transparent[i], bold[i], + (const char *) colorCombo->text(i).utf8()); + } + t << scol << endl; + } + + + f.close(); + } else + KMessageBox::error(this, i18n("Cannot save the schema.\nMaybe permission denied.\n"), + i18n("Error Saving Schema")); + + schMod=false; + loadAllSchema(fullpath.section('/',-1)); +} + +void SchemaEditor::schemaModified() +{ + if (change) { + saveButton->setEnabled(titleLine->text().length() != 0); + schMod=true; + emit changed(); + } +} + +QString SchemaEditor::readSchemaTitle(const QString & file) +{ + /* + Code taken from konsole/konsole/schema.cpp + + */ + + + QString fPath = locate("data", "konsole/" + file); + + if (fPath.isNull()) + fPath = locate("data", file); + + if (fPath.isNull()) + return 0; + + FILE *sysin = fopen(QFile::encodeName(fPath), "r"); + if (!sysin) + return 0; + + + char line[100]; + while (fscanf(sysin, "%80[^\n]\n", line) > 0) + if (strlen(line) > 5) + if (!strncmp(line, "title", 5)) { + fclose(sysin); + return i18n(line + 6); + } + + return 0; +} + +void SchemaEditor::schemaListChanged() +{ + QStringList titles, filenames; + SchemaListBoxText *item; + + for (int index = 0; index < (int) schemaList->count(); index++) { + item = (SchemaListBoxText *) schemaList->item(index); + titles.append(item->text()); + filenames.append(item->filename().section('/', -1)); + } + + emit schemaListChanged(titles, filenames); +} + +void SchemaEditor::querySave() +{ + int result = KMessageBox::questionYesNo(this, + i18n("The schema has been modified.\n" + "Do you want to save the changes?"), + i18n("Schema Modified"), + KStdGuiItem::save(), + KStdGuiItem::discard()); + if (result == KMessageBox::Yes) + { + saveCurrent(); + } +} + +void SchemaEditor::readSchema(int num) +{ + /* + Code taken from konsole/konsole/schema.cpp + + */ + + if (oldSchema != -1) { + + + if (defaultSchemaCB->isChecked()) { + + defaultSchema = ((SchemaListBoxText *) schemaList->item(oldSchema))->filename(); + + } + + if(schMod) { + disconnect(schemaList, SIGNAL(highlighted(int)), this, SLOT(readSchema(int))); + schemaList->setCurrentItem(oldSchema); + querySave(); + schemaList->setCurrentItem(num); + connect(schemaList, SIGNAL(highlighted(int)), this, SLOT(readSchema(int))); + schMod=false; + } + + } + + QString fPath = locate("data", "konsole/" + + ((SchemaListBoxText *) schemaList->item(num))->filename()); + + if (fPath.isNull()) + fPath = locate("data", + ((SchemaListBoxText *) schemaList->item(num))->filename()); + + if (fPath.isNull()) { + KMessageBox::error(this, i18n("Cannot find the schema."), + i18n("Error Loading Schema")); + + + return; + } + removeButton->setEnabled( QFileInfo (fPath).isWritable () ); + defaultSchemaCB->setChecked(fPath.section('/',-1) == defaultSchema.section('/',-1)); + + FILE *sysin = fopen(QFile::encodeName(fPath), "r"); + if (!sysin) { + KMessageBox::error(this, i18n("Cannot load the schema."), + i18n("Error Loading Schema")); + loadAllSchema(); + return; + } + + char line[100]; + + + titleLine->setText(i18n("untitled")); + transparencyCheck->setChecked(false); + backgndLine->setText(""); + + while (fscanf(sysin, "%80[^\n]\n", line) > 0) { + if (strlen(line) > 5) { + + if (!strncmp(line, "title", 5)) { + titleLine->setText(i18n(line + 6)); + } + + + + if (!strncmp(line, "image", 5)) { + char rend[100], path[100]; + int attr = 1; + if (sscanf(line, "image %s %s", rend, path) != 2) + continue; + if (!strcmp(rend, "tile")) + attr = 2; + else if (!strcmp(rend, "center")) + attr = 3; + else if (!strcmp(rend, "full")) + attr = 4; + else + continue; + + QString qline(line); + backgndLine->setText(locate("wallpaper", qline.mid( qline.find(" ",7)+1 ) )); + modeCombo->setCurrentItem(attr - 2); + + } + + + if (!strncmp(line, "transparency", 12)) { + float rx; + int rr, rg, rb; + // Transparency needs 4 parameters: fade strength and the 3 + // components of the fade color. + if (sscanf(line, "transparency %g %d %d %d", &rx, &rr, &rg, &rb) != 4) + continue; + + transparencyCheck->setChecked(true); + shadeSlide->setValue((int)(100 - rx * 100)); + shadeColor->setColor(QColor(rr, rg, rb)); + + } + if (!strncmp(line,"rcolor",6)) { + int fi,ch,cs,cv,tr,bo; + if(sscanf(line,"rcolor %d %d %d %d %d",&fi,&cs,&cv,&tr,&bo) != 5) + continue; + if (!(0 <= fi && fi <= TABLE_COLORS)) + continue; + ch = 0; // Random hue - set to zero + if (!(0 <= cs && cs <= 255 )) + continue; + if (!(0 <= cv && cv <= 255 )) + continue; + if (!(0 <= tr && tr <= 1 )) + continue; + if (!(0 <= bo && bo <= 1 )) + continue; + color[fi] = QColor(); + color[fi].setHsv(ch,cs,cv); + transparent[fi] = tr; + bold[fi] = bo; + type[fi] = 3; + } + if (!strncmp(line, "color", 5)) { + int fi, cr, cg, cb, tr, bo; + if (sscanf(line, "color %d %d %d %d %d %d", &fi, &cr, &cg, &cb, &tr, &bo) != 6) + continue; + if (!(0 <= fi && fi <= TABLE_COLORS)) + continue; + if (!(0 <= cr && cr <= 255)) + continue; + if (!(0 <= cg && cg <= 255)) + continue; + if (!(0 <= cb && cb <= 255)) + continue; + if (!(0 <= tr && tr <= 1)) + continue; + if (!(0 <= bo && bo <= 1)) + continue; + color[fi] = QColor(cr, cg, cb); + transparent[fi] = tr; + bold[fi] = bo; + type[fi] = 0; + + } + if (!strncmp(line, "sysfg", 5)) { + int fi, tr, bo; + if (sscanf(line, "sysfg %d %d %d", &fi, &tr, &bo) != 3) + continue; + if (!(0 <= fi && fi <= TABLE_COLORS)) + continue; + if (!(0 <= tr && tr <= 1)) + continue; + if (!(0 <= bo && bo <= 1)) + continue; + color[fi] = kapp->palette().active().text(); + transparent[fi] = tr; + bold[fi] = bo; + type[fi] = 1; + } + if (!strncmp(line, "sysbg", 5)) { + int fi, tr, bo; + if (sscanf(line, "sysbg %d %d %d", &fi, &tr, &bo) != 3) + continue; + if (!(0 <= fi && fi <= TABLE_COLORS)) + continue; + if (!(0 <= tr && tr <= 1)) + continue; + if (!(0 <= bo && bo <= 1)) + continue; + color[fi] = kapp->palette().active().base(); + transparent[fi] = tr; + bold[fi] = bo; + type[fi] = 2; + } + } + } + fclose(sysin); + int ii = colorCombo->currentItem(); + transparentCheck->setChecked(transparent[ii]); + boldCheck->setChecked(bold[ii]); + typeCombo->setCurrentItem(type[ii]); + colorButton->setColor(color[ii]); + + bool inactive = type[ii] == 1 || type[ii] == 2; + boldCheck->setDisabled(inactive); + transparentCheck->setDisabled(inactive); + colorButton->setDisabled(inactive); + + oldSchema = num; + updatePreview(); + schMod=false; + return; +} + diff --git a/kcontrol/konsole/schemaeditor.h b/kcontrol/konsole/schemaeditor.h new file mode 100644 index 000000000..550f51762 --- /dev/null +++ b/kcontrol/konsole/schemaeditor.h @@ -0,0 +1,84 @@ +/*************************************************************************** + schemaeditor.h - description + ------------------- + begin : mar apr 17 16:44:59 CEST 2001 + copyright : (C) 2001 by Andrea Rizzi + email : rizzi@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef SCHEMAEDITOR_H +#define SCHEMAEDITOR_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +class QPixmap; +class KSharedPixmap; + +#include "schemadialog.h" + +/** SchemaEditor is the base class of the porject */ +class SchemaEditor : public SchemaDialog +{ + Q_OBJECT + public: + /** constructor */ + SchemaEditor(QWidget* parent=0, const char *name=0); + /** destructor */ + ~SchemaEditor(); + + QString schema(); + void setSchema(QString); + bool isModified() const { return schMod; } + void querySave(); + + signals: + void changed(); + void schemaListChanged(const QStringList &titles, const QStringList &filenames); + + public slots: + void slotColorChanged(int); + void imageSelect(); + void slotTypeChanged(int); + void readSchema(int); + void saveCurrent(); + void removeCurrent(); + void previewLoaded(bool l); + void getList(); + private slots: + void show(); + void schemaModified(); + void loadAllSchema(QString currentFile=""); + void updatePreview(); + private: + bool schMod; + QMemArray color; + QMemArray type; // 0= custom, 1= sysfg, 2=sysbg, 3=rcolor + QMemArray transparent; + QMemArray bold; + QPixmap pix; + KSharedPixmap *spix; + QString defaultSchema; + bool loaded; + bool schemaLoaded; + bool change; + int oldSchema; + int oldSlot; + QString readSchemaTitle(const QString& filename); + void schemaListChanged(); + +}; + +#endif diff --git a/kcontrol/konsole/sessiondialog.ui b/kcontrol/konsole/sessiondialog.ui new file mode 100644 index 000000000..a86a74077 --- /dev/null +++ b/kcontrol/konsole/sessiondialog.ui @@ -0,0 +1,446 @@ + +SessionDialog + + + SessionDialog + + + + 0 + 0 + 436 + 476 + + + + Konsole Session Editor + + + + + + + + unnamed + + + 0 + + + + layout8 + + + + unnamed + + + + propertiesGroup + + + Properties + + + + unnamed + + + + Layout29 + + + + unnamed + + + + + <Default> + + + + + Normal + + + + + Tiny + + + + + Small + + + + + Medium + + + + + Large + + + + + Huge + + + + + Linux + + + + + Unicode + + + + + Custom + + + + fontCombo + + + false + + + + + termLine + + + + 7 + 5 + 0 + 0 + + + + + + keytabCombo + + + + + TextLabel5 + + + &Font: + + + fontCombo + + + + + schemaCombo + + + + + TextLabel7 + + + S&chema: + + + schemaCombo + + + + + TextLabel8 + + + $&TERM: + + + termLine + + + + + TextLabel6 + + + &Keytab: + + + keytabCombo + + + + + + + previewIcon + + + + 100 + 100 + + + + + 100 + 100 + + + + + + + + + TextLabel4 + + + + 7 + 0 + 0 + 0 + + + + + 90 + 100 + + + + &Icon: + + + AlignTop|AlignLeft + + + previewIcon + + + + + + + sessionGroup + + + Session + + + + unnamed + + + + sessionList + + + + + Layout3 + + + + unnamed + + + + saveButton + + + Sa&ve Session... + + + + + removeButton + + + &Remove Session + + + + + Spacer7 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + + generalGroup + + + + 5 + 5 + 0 + 0 + + + + General + + + + unnamed + + + + layout6 + + + + unnamed + + + + layout5 + + + + unnamed + + + + TextLabel1 + + + + 0 + 5 + 0 + 0 + + + + &Name: + + + nameLine + + + + + TextLabel2 + + + E&xecute: + + + executeLine + + + + + TextLabel3 + + + &Directory: + + + directoryLine + + + + + + + layout4 + + + + unnamed + + + + nameLine + + + + 7 + 5 + 0 + 0 + + + + + + executeLine + + + + 7 + 5 + 0 + 0 + + + + + + directoryLine + + + + + + + + + + + + + + nameLine + executeLine + directoryLine + sessionList + saveButton + removeButton + previewIcon + fontCombo + termLine + keytabCombo + schemaCombo + + + kcolorbutton.h + kdialog.h + + + + + kicondialog.h + kurlrequester.h + klineedit.h + kpushbutton.h + + diff --git a/kcontrol/konsole/sessioneditor.cpp b/kcontrol/konsole/sessioneditor.cpp new file mode 100644 index 000000000..8542adfcb --- /dev/null +++ b/kcontrol/konsole/sessioneditor.cpp @@ -0,0 +1,383 @@ +/*************************************************************************** + sessioneditor.cpp - description + ------------------- + begin : oct 28 2001 + copyright : (C) 2001 by Stephan Binner + email : binner@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "sessioneditor.h" +#include "sessioneditor.moc" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// SessionListBoxText is a list box text item with session filename +class SessionListBoxText : public QListBoxText +{ + public: + SessionListBoxText(const QString &title, const QString &filename): QListBoxText(title) + { + m_filename = filename; + }; + + const QString filename() { return m_filename; }; + + private: + QString m_filename; +}; + +SessionEditor::SessionEditor(QWidget * parent, const char *name) +:SessionDialog(parent, name) +{ + sesMod=false; + oldSession=-1; + loaded=false; + + KGlobal::locale()->insertCatalogue("konsole"); // For schema and keytab translations + KGlobal::iconLoader()->addAppDir( "konsole" ); + + directoryLine->setMode(KFile::Directory); + connect(sessionList, SIGNAL(highlighted(int)), this, SLOT(readSession(int))); + connect(saveButton, SIGNAL(clicked()), this, SLOT(saveCurrent())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeCurrent())); + + connect(nameLine, SIGNAL(textChanged(const QString&)), this, SLOT(sessionModified())); + connect(directoryLine, SIGNAL(textChanged(const QString&)), this, SLOT(sessionModified())); + connect(executeLine, SIGNAL(textChanged(const QString&)), this, SLOT(sessionModified())); + connect(termLine, SIGNAL(textChanged(const QString&)), this, SLOT(sessionModified())); + + connect(previewIcon, SIGNAL(iconChanged(QString)), this, SLOT(sessionModified())); + + connect(fontCombo, SIGNAL(activated(int)), this, SLOT(sessionModified())); + connect(keytabCombo, SIGNAL(activated(int)), this, SLOT(sessionModified())); + connect(schemaCombo, SIGNAL(activated(int)), this, SLOT(sessionModified())); +} + +SessionEditor::~SessionEditor() +{ + keytabFilename.setAutoDelete(true); + schemaFilename.setAutoDelete(true); +} + +void SessionEditor::show() +{ + removeButton->setEnabled(sessionList->count()>1); + if (! loaded) { + loadAllKeytab(); + loadAllSession(); + readSession(0); + sessionList->setCurrentItem(0); + loaded = true; + } + SessionDialog::show(); +} + +void SessionEditor::loadAllKeytab() +{ + QStringList lst = KGlobal::dirs()->findAllResources("data", "konsole/*.keytab"); + keytabCombo->clear(); + keytabFilename.clear(); + + keytabCombo->insertItem(i18n("XTerm (XFree 4.x.x)"),0); + keytabFilename.append(new QString("")); + + int i=1; + for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) + { + QString name = (*it); + QString title = readKeymapTitle(name); + + name = name.section('/',-1); + name = name.section('.',0); + keytabFilename.append(new QString(name)); + + if (title.isNull() || title.isEmpty()) + title=i18n("untitled"); + + keytabCombo->insertItem(title,i); + + i++; + } +} + +QString SessionEditor::readKeymapTitle(const QString & file) +{ + QString fPath = locate("data", "konsole/" + file); + + if (fPath.isNull()) + fPath = locate("data", file); + removeButton->setEnabled( QFileInfo (fPath).isWritable () ); + + if (fPath.isNull()) + return 0; + + FILE *sysin = fopen(QFile::encodeName(fPath), "r"); + if (!sysin) + return 0; + + char line[100]; + int len; + while (fscanf(sysin, "%80[^\n]\n", line) > 0) + if ((len = strlen(line)) > 8) + if (!strncmp(line, "keyboard", 8)) { + fclose(sysin); + if(line[len-1] == '"') + line[len-1] = '\000'; + QString temp; + if(line[9] == '"') + temp=i18n(line+10); + else + temp=i18n(line+9); + return temp; + } + + return 0; +} + +void SessionEditor::loadAllSession(QString currentFile) +{ + QStringList list = KGlobal::dirs()->findAllResources("data", "konsole/*.desktop", false, true); + sessionList->clear(); + + QListBoxItem* currentItem = 0; + for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) { + + QString name = (*it); + + KSimpleConfig* co = new KSimpleConfig(name,true); + co->setDesktopGroup(); + QString sesname = co->readEntry("Name",i18n("Unnamed")); + delete co; + + sessionList->insertItem(new SessionListBoxText(sesname, name)); + + if (currentFile==name.section('/',-1)) + currentItem = sessionList->item( sessionList->count()-1 ); + } + sessionList->sort(); + sessionList->setCurrentItem(0); // select the first added item correctly too + sessionList->setCurrentItem(currentItem); + emit getList(); +} + +void SessionEditor::readSession(int num) +{ + int i,counter; + QString str; + KSimpleConfig* co; + + if(sesMod) { + disconnect(sessionList, SIGNAL(highlighted(int)), this, SLOT(readSession(int))); + + sessionList->setCurrentItem(oldSession); + querySave(); + sessionList->setCurrentItem(num); + connect(sessionList, SIGNAL(highlighted(int)), this, SLOT(readSession(int))); + sesMod=false; + } + if( sessionList->item(num) ) + { + removeButton->setEnabled( QFileInfo ( ((SessionListBoxText *)sessionList->item(num))->filename() ).isWritable () ); + co = new KSimpleConfig( ((SessionListBoxText *)sessionList->item(num))->filename(),true); + + co->setDesktopGroup(); + str = co->readEntry("Name"); + nameLine->setText(str); + + str = co->readPathEntry("Cwd"); + directoryLine->lineEdit()->setText(str); + + str = co->readPathEntry("Exec"); + executeLine->setText(str); + + str = co->readEntry("Icon","konsole"); + previewIcon->setIcon(str); + + i = co->readUnsignedNumEntry("Font",(unsigned int)-1); + fontCombo->setCurrentItem(i+1); + + str = co->readEntry("Term","xterm"); + termLine->setText(str); + + str = co->readEntry("KeyTab",""); + i=0; + counter=0; + for (QString *it = keytabFilename.first(); it != 0; it = keytabFilename.next()) { + if (str == (*it)) + i = counter; + counter++; + } + keytabCombo->setCurrentItem(i); + + str = co->readEntry("Schema",""); + i=0; + counter=0; + for (QString *it = schemaFilename.first(); it != 0; it = schemaFilename.next()) { + if (str == (*it)) + i = counter; + counter++; + } + schemaCombo->setCurrentItem(i); + delete co; + } + sesMod=false; + oldSession=num; +} + +void SessionEditor::querySave() +{ + int result = KMessageBox::questionYesNo(this, + i18n("The session has been modified.\n" + "Do you want to save the changes?"), + i18n("Session Modified"), + KStdGuiItem::save(), + KStdGuiItem::discard()); + if (result == KMessageBox::Yes) + { + saveCurrent(); + } +} + +void SessionEditor::schemaListChanged(const QStringList &titles, const QStringList &filenames) +{ + const QString text = schemaCombo->currentText(); + + schemaCombo->clear(); + schemaFilename.clear(); + + schemaCombo->insertItem(i18n("Konsole Default"),0); + schemaFilename.append(new QString("")); + + schemaCombo->insertStringList(titles, 1); + for (QStringList::const_iterator it = filenames.begin(); it != filenames.end(); ++it) + schemaFilename.append(new QString(*it)); + + // Restore current item + int item = 0; + for (int i = 0; i < schemaCombo->count(); i++) + if (schemaCombo->text(i) == text) { + item = i; + break; + } + schemaCombo->setCurrentItem(item); +} + +void SessionEditor::saveCurrent() +{ + // Verify Execute entry is valid; otherwise Konsole will ignore it. + // This code is take from konsole.cpp; if you change one, change both. + QString exec = executeLine->text(); + if ( !exec.isEmpty() ) // If Execute field is empty, default shell is used. + { + if ( exec.startsWith( "su -c \'" ) ) + exec = exec.mid( 7, exec.length() - 8 ); + exec = KRun::binaryName( exec, false ); + exec = KShell::tildeExpand( exec ); + QString pexec = KGlobal::dirs()->findExe( exec ); + + if ( pexec.isEmpty() ) + { + int result = KMessageBox::warningContinueCancel( this, + i18n( "The Execute entry is not a valid command.\n" + "You can still save this session, but it will not show up in Konsole's Session list." ), + i18n( "Invalid Execute Entry" ), + KStdGuiItem::save() ); + if ( result != KMessageBox::Continue ) + return; + } + + } + + QString fullpath; + if (sessionList->currentText() == nameLine->text()) { + fullpath = ( ((SessionListBoxText *)sessionList->item( sessionList->currentItem() ))->filename() ).section('/',-1); + } + else { + // Only ask for a name for changed nameLine, considered a "save as" + fullpath = nameLine->text().stripWhiteSpace().simplifyWhiteSpace()+".desktop"; + + bool ok; + fullpath = KInputDialog::getText( i18n( "Save Session" ), + i18n( "File name:" ), fullpath, &ok, this ); + if (!ok) return; + } + + if (fullpath[0] != '/') + fullpath = KGlobal::dirs()->saveLocation("data", "konsole/") + fullpath; + + KSimpleConfig* co = new KSimpleConfig(fullpath); + co->setDesktopGroup(); + co->writeEntry("Type","KonsoleApplication"); + co->writeEntry("Name",nameLine->text()); + co->writePathEntry("Cwd",directoryLine->lineEdit()->text()); + co->writePathEntry("Exec",executeLine->text()); + co->writeEntry("Icon",previewIcon->icon()); + if (fontCombo->currentItem()==0) + co->writeEntry("Font",""); + else + co->writeEntry("Font",fontCombo->currentItem()-1); + co->writeEntry("Term",termLine->text()); + co->writeEntry("KeyTab",*keytabFilename.at(keytabCombo->currentItem())); + co->writeEntry("Schema",*schemaFilename.at(schemaCombo->currentItem())); + co->sync(); + delete co; + sesMod=false; + loadAllSession(fullpath.section('/',-1)); + removeButton->setEnabled(sessionList->count()>1); +} + +void SessionEditor::removeCurrent() +{ + QString base = ((SessionListBoxText *)sessionList->item( sessionList->currentItem() ))->filename(); + + // Query if system sessions should be removed + if (locateLocal("data", "konsole/" + base.section('/', -1)) != base) { + int code = KMessageBox::warningContinueCancel(this, + i18n("You are trying to remove a system session. Are you sure?"), + i18n("Removing System Session"), + KGuiItem(i18n("&Delete"),"editdelete")); + if (code != KMessageBox::Continue) + return; + } + + if (!QFile::remove(base)) { + KMessageBox::error(this, + i18n("Cannot remove the session.\nMaybe it is a system session.\n"), + i18n("Error Removing Session")); + return; + } + removeButton->setEnabled(sessionList->count()>1); + loadAllSession(); + readSession(0); + sessionList->setCurrentItem(0); +} + +void SessionEditor::sessionModified() +{ + saveButton->setEnabled(nameLine->text().length() != 0); + sesMod=true; + emit changed(); +} diff --git a/kcontrol/konsole/sessioneditor.h b/kcontrol/konsole/sessioneditor.h new file mode 100644 index 000000000..15d1aee2b --- /dev/null +++ b/kcontrol/konsole/sessioneditor.h @@ -0,0 +1,68 @@ +/*************************************************************************** + sessioneditor.h - description + ------------------- + begin : oct 28 2001 + copyright : (C) 2001 by Stephan Binner + email : binner@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef SESSIONEDITOR_H +#define SESSIONEDITOR_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "sessiondialog.h" + +class SessionEditor : public SessionDialog +{ + Q_OBJECT + public: + SessionEditor(QWidget* parent=0, const char *name=0); + ~SessionEditor(); + + bool isModified() const { return sesMod; } + void querySave(); + + signals: + void changed(); + void getList(); + + public slots: + void schemaListChanged(const QStringList &titles, const QStringList &filenames); + + private slots: + void readSession(int); + void saveCurrent(); + void removeCurrent(); + void sessionModified(); + + private: + void show(); + void loadAllKeytab(); + void loadAllSession(QString currentFile=""); + QString readKeymapTitle(const QString& filename); + + bool sesMod; + int oldSession; + bool loaded; + QPtrList keytabFilename; + QPtrList schemaFilename; +}; + +#endif diff --git a/kcontrol/krdb/AUTHORS b/kcontrol/krdb/AUTHORS new file mode 100644 index 000000000..e0808125b --- /dev/null +++ b/kcontrol/krdb/AUTHORS @@ -0,0 +1,9 @@ +Display Configuration Modules: + + Martin Jones (mjones@powerup.com.au) + Mark Donohoe (donohoe@kde.org) + Geert Jansen (g.t.jansen@stud.tue.nl) + +Conversion to kcontrol applet: + + Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de) diff --git a/kcontrol/krdb/Makefile.am b/kcontrol/krdb/Makefile.am new file mode 100644 index 000000000..6bd22e322 --- /dev/null +++ b/kcontrol/krdb/Makefile.am @@ -0,0 +1,15 @@ +AM_CPPFLAGS = $(all_includes) + +SUBDIRS = . themes kcs ad pics + + +noinst_LTLIBRARIES = libkrdb.la +libkrdb_la_SOURCES = krdb.cpp +libkrdb_la_LIBADD = $(LIB_KDECORE) +libkrdb_la_LDFLAGS = -no-undefined $(all_libraries) + +messages: + $(XGETTEXT) *.cpp -o $(podir)/krdb.pot + +update_DATA = kcmdisplayrc.upd +updatedir = $(kde_datadir)/kconf_update diff --git a/kcontrol/krdb/ad/AAAAAAGeneral.ad b/kcontrol/krdb/ad/AAAAAAGeneral.ad new file mode 100644 index 000000000..d398d410e --- /dev/null +++ b/kcontrol/krdb/ad/AAAAAAGeneral.ad @@ -0,0 +1,2 @@ +*background: BACKGROUND +*foreground: FOREGROUND diff --git a/kcontrol/krdb/ad/AAAMotif.ad b/kcontrol/krdb/ad/AAAMotif.ad new file mode 100644 index 000000000..af36763ef --- /dev/null +++ b/kcontrol/krdb/ad/AAAMotif.ad @@ -0,0 +1,74 @@ +*XmScrollBar.background: BACKGROUND +*XmScrollBar.foreground: FOREGROUND + +*XmSash.background: BACKGROUND +*XmSash.foreground: FOREGROUND + +*XmLabel.background: BACKGROUND +*XmLabel.foreground: FOREGROUND +*XmLabelGadget.background: BACKGROUND +*XmLabelGadget.foreground: FOREGROUND + +*XmCascadeButton.background: BACKGROUND +*XmCascadeButton.foreground: FOREGROUND +*XmCascadeButtonGadget.background: BACKGROUND +*XmCascadeButtonGadget.foreground: FOREGROUND + +*XmToggleButton.background: BACKGROUND +*XmToggleButton.foreground: FOREGROUND +*XmToggleButtonGadget.background: BACKGROUND +*XmToggleButtonGadget.foreground: FOREGROUND + +*XmPushButton.background: BACKGROUND +*XmPushButton.foreground: FOREGROUND +*XmPushButtonGadget.background: BACKGROUND +*XmPushButtonGadget.foreground: FOREGROUND + +*XmSeparator.background: BACKGROUND +*XmSeparator.foreground: FOREGROUND +*XmSeparatorGadget.background: BACKGROUND +*XmSeparatorGadget.foreground: FOREGROUND + +*XmTearOffButton.background: BACKGROUND +*XmTearOffButton.foreground: FOREGROUND +*XmTearOffButtonGadget.background: BACKGROUND +*XmTearOffButtonGadget.foreground: FOREGROUND + +*XmMenuShell.background: BACKGROUND +*XmMenuShell.foreground: FOREGROUND + +*XmDialogShell.background: BACKGROUND +*XmDialogShell.foreground: FOREGROUND + +*XmFileSelectionBox.background: BACKGROUND +*XmFileSelectionBox.foreground: FOREGROUND + +*XmSelectionBox.background: BACKGROUND +*XmSelectionBox.foreground: FOREGROUND + +*XmMessageBox.background: BACKGROUND +*XmMessageBox.foreground: FOREGROUND + +*XmRowColumn.background: BACKGROUND +*XmRowColumn.foreground: FOREGROUND + +*XmFrame.background: BACKGROUND +*XmFrame.foreground: FOREGROUND + +*XmForm.background: BACKGROUND +*XmForm.foreground: FOREGROUND + +*XmScrolledWindow.background: BACKGROUND +*XmScrolledWindow.foreground: FOREGROUND + +*XmPanedWindow.background: BACKGROUND +*XmPanedWindow.foreground: FOREGROUND + +*XmText.background: WINDOW_BACKGROUND +*XmText.foreground: WINDOW_FOREGROUND + +*XmTextField.background: WINDOW_BACKGROUND +*XmTextField.foreground: WINDOW_FOREGROUND + +*XmList.background: WINDOW_BACKGROUND +*XmList.foreground: WINDOW_FOREGROUND diff --git a/kcontrol/krdb/ad/AAATk.ad b/kcontrol/krdb/ad/AAATk.ad new file mode 100644 index 000000000..33a12009f --- /dev/null +++ b/kcontrol/krdb/ad/AAATk.ad @@ -0,0 +1,107 @@ +*Toplevel.background: BACKGROUND +*Toplevel.foreground: FOREGROUND +*Toplevel.highlightBackground: BACKGROUND +*Toplevel.highlightColor: FOREGROUND +*Toplevel.activeBackground: BACKGROUND +*Toplevel.activeForeground: FOREGROUND + +*Button.background: BACKGROUND +*Button.foreground: FOREGROUND +*Button.highlightBackground: BACKGROUND +*Button.highlightColor: FOREGROUND +*Button.activeBackground: BACKGROUND +*Button.activeForeground: FOREGROUND + +*Menubutton.background: BACKGROUND +*Menubutton.foreground: FOREGROUND +*Menubutton.highlightBackground: BACKGROUND +*Menubutton.highlightColor: FOREGROUND +*Menubutton.activeBackground: BACKGROUND +*Menubutton.activeForeground: FOREGROUND + +*Checkbutton.background: BACKGROUND +*Checkbutton.foreground: FOREGROUND +*Checkbutton.highlightBackground: BACKGROUND +*Checkbutton.highlightColor: FOREGROUND +*Checkbutton.activeBackground: BACKGROUND +*Checkbutton.activeForeground: FOREGROUND + +*Radiobutton.background: BACKGROUND +*Radiobutton.foreground: FOREGROUND +*Radiobutton.highlightBackground: BACKGROUND +*Radiobutton.highlightColor: FOREGROUND +*Radiobutton.activeBackground: BACKGROUND +*Radiobutton.activeForeground: FOREGROUND + +!*Label.background: BACKGROUND +!*Label.foreground: FOREGROUND +*Label.highlightBackground: BACKGROUND +*Label.highlightColor: FOREGROUND +*Label.activeBackground: BACKGROUND +*Label.activeForeground: FOREGROUND + +*Menu.background: BACKGROUND +*Menu.foreground: FOREGROUND +*Menu.highlightBackground: BACKGROUND +*Menu.highlightColor: FOREGROUND +*Menu.activeBackground: BACKGROUND +*Menu.activeForeground: FOREGROUND + +*Frame.background: BACKGROUND +*Frame.foreground: FOREGROUND +*Frame.highlightBackground: BACKGROUND +*Frame.highlightColor: FOREGROUND +*Frame.activeBackground: BACKGROUND +*Frame.activeForeground: FOREGROUND + +!*Scrollbar.background: BACKGROUND +!*Scrollbar.foreground: FOREGROUND +*Scrollbar.highlightBackground: BACKGROUND +*Scrollbar.highlightColor: FOREGROUND +*Scrollbar.activeBackground: BACKGROUND +*Scrollbar.activeForeground: FOREGROUND +*Scrollbar.troughColor: BACKGROUND + +*Scale.background: BACKGROUND +*Scale.foreground: FOREGROUND +*Scale.highlightBackground: BACKGROUND +*Scale.highlightColor: FOREGROUND +*Scale.activeBackground: BACKGROUND +*Scale.activeForeground: FOREGROUND +*Scale.troughColor: BACKGROUND + +*Entry.background: WINDOW_BACKGROUND +*Entry.foreground: WINDOW_FOREGROUND +*Entry.highlightBackground: WINDOW_BACKGROUND +*Entry.highlightColor: WINDOW_FOREGROUND +*Entry.activeBackground: WINDOW_BACKGROUND +*Entry.activeForeground: WINDOW_FOREGROUND +*Entry.selectBackground: SELECT_BACKGROUND +*Entry.selectForeground: SELECT_FOREGROUND + +!*Text.background: WINDOW_BACKGROUND +!*Text.foreground: WINDOW_FOREGROUND +*Text.highlightBackground: WINDOW_BACKGROUND +*Text.highlightColor: WINDOW_FOREGROUND +*Text.activeBackground: WINDOW_BACKGROUND +*Text.activeForeground: WINDOW_FOREGROUND +*Text.selectBackground: SELECT_BACKGROUND +*Text.selectForeground: SELECT_FOREGROUND + +*Listbox.background: WINDOW_BACKGROUND +*Listbox.foreground: WINDOW_FOREGROUND +*Listbox.highlightBackground: WINDOW_BACKGROUND +*Listbox.highlightColor: WINDOW_FOREGROUND +*Listbox.activeBackground: WINDOW_BACKGROUND +*Listbox.activeForeground: WINDOW_FOREGROUND +*Listbox.selectBackground: SELECT_BACKGROUND +*Listbox.selectForeground: SELECT_FOREGROUND + +*Canvas.background: WINDOW_BACKGROUND +*Canvas.foreground: WINDOW_FOREGROUND +*Canvas.highlightBackground: WINDOW_BACKGROUND +*Canvas.highlightColor: WINDOW_FOREGROUND +*Canvas.activeBackground: WINDOW_BACKGROUND +*Canvas.activeForeground: WINDOW_FOREGROUND +*Canvas.selectbackground: SELECT_BACKGROUND +*Canvas.selectforeground: SELECT_FOREGROUND diff --git a/kcontrol/krdb/ad/AAAXaw.ad b/kcontrol/krdb/ad/AAAXaw.ad new file mode 100644 index 000000000..86848731f --- /dev/null +++ b/kcontrol/krdb/ad/AAAXaw.ad @@ -0,0 +1,36 @@ +*beNiceToColormap: false +*borderColor: black + +*MenuButton.background: BACKGROUND +*Command.background: BACKGROUND +*Toggle.background: BACKGROUND +*Label.background: BACKGROUND +*Scrollbar*background: BACKGROUND +*SimpleMenu*background: BACKGROUND +*Box.background: BACKGROUND +*Form.background: BACKGROUND +*Dialog.background: BACKGROUND +*Text.background: WINDOW_BACKGROUND +*List.background: WINDOW_BACKGROUND + +*MenuButton.foreground: FOREGROUND +*Command.foreground: FOREGROUND +*Toggle.foreground: FOREGROUND +*Label.foreground: FOREGROUND +*Scrollbar.foreground: FOREGROUND +*SimpleMenu*foreground: FOREGROUND +*Box.foreground: FOREGROUND +*Form.foreground: FOREGROUND +*Dialog.foreground: FOREGROUND +*Text.foreground: WINDOW_FOREGROUND +*List.foreground: WINDOW_FOREGROUND + +*ScrollbarBackground: BACKGROUND +*Scrollbar*width: 15 +*Scrollbar*height: 15 +*Scrollbar*shadowWidth: 2 +*Scrollbar*cursorName: left_ptr +*Scrollbar*pushThumb: false +*ShapeStyle: Rectangle +*SmeBSB*shadowWidth: 3 +*Scrollbar*Cursor: left_ptr diff --git a/kcontrol/krdb/ad/AcroRead.ad b/kcontrol/krdb/ad/AcroRead.ad new file mode 100644 index 000000000..dfd238123 --- /dev/null +++ b/kcontrol/krdb/ad/AcroRead.ad @@ -0,0 +1,8 @@ +nspluginviewer*lprCommand: kprinter +acroread*lprCommand: kprinter +Acroread.foreground: WINDOW_FOREGROUND +Acroread.background: WINDOW_BACKGROUND +AcroRead.borderColor: WINDOW_FOREGROUND +AcroRead.XmScreen.background: WINDOW_BACKGROUND +AcroRead.XmScreen.borderColor: WINDOW_FOREGROUND + diff --git a/kcontrol/krdb/ad/Editres.ad b/kcontrol/krdb/ad/Editres.ad new file mode 100644 index 000000000..31ee2aa87 --- /dev/null +++ b/kcontrol/krdb/ad/Editres.ad @@ -0,0 +1,5 @@ +editres*Tree.Background: WINDOW_BACKGROUND +editres*Tree.Foreground: WINDOW_FOREGROUND +editres*Tree.Toggle.Foreground: FOREGROUND +editres*Tree.Toggle.Background: BACKGROUND +editres*Panner.Background: BACKGROUND diff --git a/kcontrol/krdb/ad/Emacs.ad b/kcontrol/krdb/ad/Emacs.ad new file mode 100644 index 000000000..c38a1094b --- /dev/null +++ b/kcontrol/krdb/ad/Emacs.ad @@ -0,0 +1,17 @@ +Emacs.default.attributeForeground: WINDOW_FOREGROUND +Emacs.default.attributeBackground: WINDOW_BACKGROUND + +Emacs*Foreground: WINDOW_FOREGROUND +Emacs*Background: WINDOW_BACKGROUND +Emacs*menubar*foreground: FOREGROUND +Emacs*menubar*background: BACKGROUND +Emacs*popup*Foreground: FOREGROUND +Emacs*popup*Background: BACKGROUND +Emacs*Dialog*foreground: FOREGROUND +Emacs*Dialog*background: BACKGROUND +Emacs*XlwScrollBar.Foreground: FOREGROUND +Emacs*XlwScrollBar.Background: BACKGROUND +Emacs*topToolBarShadowColor: BACKGROUND +Emacs*bottomToolBarShadowColor: BACKGROUND +Emacs*backgroundToolBarColor: BACKGROUND +Emacs*toolBarShadowThickness: 0 diff --git a/kcontrol/krdb/ad/GV.ad b/kcontrol/krdb/ad/GV.ad new file mode 100644 index 000000000..95707f559 --- /dev/null +++ b/kcontrol/krdb/ad/GV.ad @@ -0,0 +1 @@ +GV.printCommand: kprinter diff --git a/kcontrol/krdb/ad/ML.ad b/kcontrol/krdb/ad/ML.ad new file mode 100644 index 000000000..8c4482453 --- /dev/null +++ b/kcontrol/krdb/ad/ML.ad @@ -0,0 +1,36 @@ +ml*background: BACKGROUND +ml*foreground: FOREGROUND +ml*XmText*foreground: WINDOW_FOREGROUND +ml*XmText*background: WINDOW_BACKGROUND +ml*XmList*foreground: WINDOW_FOREGROUND +ml*XmList*background: WINDOW_BACKGROUND +!ml*XmLabel*foreground: FOREGROUND +!ml*XmLabel*background: BACKGROUND +ml*XmTextField*background: WINDOW_BACKGROUND +ml*XmTextField*foreground: WINDOW_FOREGROUND +ml*helpwin*textSW.text.background: WINDOW_BACKGROUND +ml*helpwin*textSW.text.foreground: WINDOW_FOREGROUND +ml*textSW.text.background: WINDOW_BACKGROUND +ml*textSW.text.foreground: WINDOW_FOREGROUND +ml*log*textSW.text.background: WINDOW_BACKGROUND +ml*log*textSW.text.foreground: WINDOW_FOREGROUND +ml*selectColor: BACKGROUND +ml*highlightColor: BACKGROUND +ml.form.height: 550 +ml.form.width: 650 +ml*focusPolicy: pointer +ml*XmForm*verticalSpacing: 0 +ml*XmForm*topOffset: 0 +ml*XmForm*bottomOffset: 0 +ml*XmRowColumn*spacing: 0 +ml*XmRowColumn*marginHeight: 1 +ml*XmRowColumn.entryBorder: 0 +ml*XmCascadeButton.marginHeight: 2 +ml*XmCascadeButton.marginWidth: 8 +ml*XmToggleButton.marginHeight: 1 +ml*XmPushButton.marginHeight: 1 +ml*marginHeight: 2 +ml*marginWidth: 3 +ml*XmList*highlightThickness: 0 +ml*borderWidth: 0 + diff --git a/kcontrol/krdb/ad/Makefile.am b/kcontrol/krdb/ad/Makefile.am new file mode 100644 index 000000000..68b2fe2bb --- /dev/null +++ b/kcontrol/krdb/ad/Makefile.am @@ -0,0 +1,13 @@ + +AM_CPPFLAGS = $(all_includes) + +kdisplay_defaults_data_DATA = AAAAAAGeneral.ad AAAMotif.ad AAATk.ad AAAXaw.ad AcroRead.ad \ + Editres.ad Emacs.ad GV.ad ML.ad Nedit.ad Netscape.ad RVPlayer.ad \ + WPerfect.ad XCalc.ad Xawtv.ad Xdvi.ad XTerm.ad XOsview.ad XV.ad Xpdf.ad + +kdisplay_defaults_datadir = $(kde_datadir)/kdisplay/app-defaults + +EXTRA_DIST = $(kdisplay_defaults_data_DATA) + +bin_SCRIPTS = krdb + diff --git a/kcontrol/krdb/ad/Nedit.ad b/kcontrol/krdb/ad/Nedit.ad new file mode 100644 index 000000000..6e3dc3b56 --- /dev/null +++ b/kcontrol/krdb/ad/Nedit.ad @@ -0,0 +1,2 @@ +nedit*background: BACKGROUND +nedit*foreground: FOREGROUND diff --git a/kcontrol/krdb/ad/Netscape.ad b/kcontrol/krdb/ad/Netscape.ad new file mode 100644 index 000000000..890f37ecf --- /dev/null +++ b/kcontrol/krdb/ad/Netscape.ad @@ -0,0 +1,25 @@ +Netscape*background: BACKGROUND +Netscape*foreground: FOREGROUND +Netscape*XmText*foreground: WINDOW_FOREGROUND +Netscape*XmText*background: WINDOW_BACKGROUND +Netscape*XmTextField*foreground: WINDOW_FOREGROUND +Netscape*XmTextField*background: WINDOW_BACKGROUND +Netscape*XmList*foreground: WINDOW_FOREGROUND +Netscape*XmList*background: WINDOW_BACKGROUND +Netscape*topShadowColor: HIGHLIGHT +Netscape*bottomShadowColor: LOWLIGHT +Netscape*urlText*foreground: WINDOW_FOREGROUND +Netscape*urlText*background: WINDOW_BACKGROUND +Netscape*XmLGrid.foreground: WINDOW_FOREGROUND +Netscape*XmLGrid.background: BACKGROUND +Netscape*urlLabel*foreground: WINDOW_FOREGROUND +Netscape*urlLabel*background: WINDOW_BACKGROUND +Netscape*thermo.slider.foreground: SELECT_BACKGROUND +Netscape*thermo.slider.background: BACKGROUND +Netscape*power.LED.foreground: SELECT_BACKGROUND +Netscape*power.LED.background: BACKGROUND +Netscape*defaultBackground: WINDOW_BACKGROUND +Netscape*selectColor: BACKGROUND +Netscape*highlightColor: BACKGROUND +Netscape*selectForeground: SELECT_FOREGROUND +Netscape*selectBackground: SELECT_BACKGROUND diff --git a/kcontrol/krdb/ad/README b/kcontrol/krdb/ad/README new file mode 100644 index 000000000..7dfbcbd8f --- /dev/null +++ b/kcontrol/krdb/ad/README @@ -0,0 +1,63 @@ +KRDB V0.2 + +CHANGES V0.2 +- use QFontInfo +- general purpose files e.g. AAAMotif.ad thanks to Gerd + Knorr + +The krdb utility provides a convenient way to manage the +resources of legacy applications on your KDE desktop. +Simply run krdb every time you want to update the resources +of your supported apps. + +You can easily write application default files for your own +applications. To see how, follow the example of the +supplied application default file for XV which specifies + +xv*foreground: FOREGROUND +xv*background: BACKGROUND +xv*highlight: HIGHLIGHT +xv*lowlight: LOWLIGHT +xv*monofont: FIXED_FONT + +The applications resources assign variables which will be +defined by krdb. The complete list of possible variables to +choose from is + +FOREGROUND, BACKGROUND, HIGHLIGHT, LOWLIGHT, +WINDOW_FOREGROUND, WINDOW_BACKGROUND, SELECT_FOREGROUND, +SELECT_BACKGROUND, INACTIVE_FOREGROUND, +INACTIVE_BACKGROUND, INACTIVE_BLEND, ACTIVE_FOREGROUND, +ACTIVE_BACKGROUND, ACTIVE_BLEND, FONT, BOLD_FONT, ITALIC_FONT, +FIXED_FONT, TITLE_FONT and FONTLIST. + +Their meaning should be obvious to anyone familiar with +KDE's desktop wide resources. Install your application +default file either in + +$(KDEDIR)/share/apps/kdisplay/app-defaults + +or + +$(HOME)/.kde/share/apps/kdisplay/app-defaults + +so that it is available to krdb for reading. If you want to +override a system file simply copy it to your user +directory and make amendments. + +The krdb utility works by putting your current KDE color +and font scheme into preprocessor statements, concatenating +the specially written application default files and using +xrdb -merge to write to RESOURCE_MANAGER. Thus it gives a +simple way to make non-KDE applications fit in with the +desktop. + +krdb now comes with a set of general purpose configuration +files for the Motif, Xaw and TK toolkits. How well these +general purpose resources apply to specific applications +will depend on what other application defaults are +installed. If you want krdb general resource files to apply +most generally you should not have application specific +entries for similar resources in ~/.Xdefaults or in the +system app-defaults directory e.g. +/usr/lib/X11R6/app-defaults. diff --git a/kcontrol/krdb/ad/RVPlayer.ad b/kcontrol/krdb/ad/RVPlayer.ad new file mode 100644 index 000000000..10603c8d6 --- /dev/null +++ b/kcontrol/krdb/ad/RVPlayer.ad @@ -0,0 +1,40 @@ +*rvplayer*background: BACKGROUND +*rvplayer*Label.BorderColor: WINDOW_FOREGROUND +*rvplayer*Command.BorderColor: WINDOW_FOREGROUND +*rvplayer*Command.background: BACKGROUND +*rvplayer*Command.foreground: FOREGROUND +*rvplayer*MenuButton.BorderColor: WINDOW_FOREGROUND +*rvplayer*MenuButton.background: BACKGROUND +*rvplayer*SimpleMenu.foreground: FOREGROUND +*rvplayer*SimpleMenu.background: BACKGROUND +*rvplayer*SimpleMenu.BorderColor: LOWLIGHT +*rvplayer*SmeBSB*fgInsensitive: HIGHLIGHT +*rvplayer*timeslider.foreground: BACKGROUND +*rvplayer*timeslider.topShadowPixel: LOWLIGHT +*rvplayer*timeslider.bottomShadowPixel: HIGHLIGHT +*rvplayer*timeslider.thumbPixel: HIGHLIGHT +*rvplayer*SepLine.topShadowPixel: LOWLIGHT +*rvplayer*SepLine.bottomShadowPixel: HIGHLIGHT +*rvplayer*SepLine.BorderColor: BACKGROUND +*rvplayer*titletext.background: BACKGROUND +*rvplayer*titletext.topShadowPixel: LOWLIGHT +*rvplayer*titletext.bottomShadowPixel: HIGHLIGHT +*rvplayer*authortext.background: BACKGROUND +*rvplayer*authortext.topShadowPixel: LOWLIGHT +*rvplayer*authortext.bottomShadowPixel: HIGHLIGHT +*rvplayer*copyrighttext.background: BACKGROUND +*rvplayer*copyrighttext.topShadowPixel: LOWLIGHT +*rvplayer*copyrighttext.bottomShadowPixel: HIGHLIGHT +*rvplayer*statustext.background: BACKGROUND +*rvplayer*statustext.foreground: FOREGROUND +*rvplayer*statusback.background: BACKGROUND +*rvplayer*statusback.foreground: FOREGROUND +*rvplayer*proptext.background: BACKGROUND +*rvplayer*proptext.foreground: FOREGROUND +*rvplayer*timeinfotext.topShadowPixel: LOWLIGHT +*rvplayer*timeinfotext.bottomShadowPixel: HIGHLIGHT +*rvplayer*timeinfotext.background: BACKGROUND +*rvplayer*timeinfotext.foreground: FOREGROUND +*rvplayer*volumeslider.topShadowPixel: LOWLIGHT +*rvplayer*volumeslider.bottomShadowPixel: HIGHLIGHT +*rvplayer*Vslider.thumbPixel: HIGHLIGHT diff --git a/kcontrol/krdb/ad/WPerfect.ad b/kcontrol/krdb/ad/WPerfect.ad new file mode 100644 index 000000000..f005d8452 --- /dev/null +++ b/kcontrol/krdb/ad/WPerfect.ad @@ -0,0 +1,69 @@ +XWp*XmDrawingArea.background: WINDOW_BACKGROUND +XWp*XmList*background: WINDOW_BACKGROUND +XWp*XmText*background: WINDOW_BACKGROUND +XWp*XmTextField*background: #FFFFFFFFFFFF +WPFMShell*XmDrawingArea*background: WINDOW_BACKGROUND +WPFMShell*XmList*background: WINDOW_BACKGROUND +WPFMShell*XmText*background: WINDOW_BACKGROUND +WPFMShell*XmTextField*background: WINDOW_BACKGROUND +XWp*XmDrawingArea.foreground: WINDOW_FOREGROUND +XWp*XmList*foreground: WINDOW_FOREGROUND +XWp*XmText*foreground: WINDOW_FOREGROUND +XWp*XmTextField*foreground: WINDOW_FOREGROUND +WPFMShell*XmDrawingArea*foreground: WINDOW_FOREGROUND +WPFMShell*XmList*foreground: WINDOW_FOREGROUND +WPFMShell*XmText*foreground: WINDOW_FOREGROUND +WPFMShell*XmTextField*foreground: WINDOW_FOREGROUND +XWp.mainWindowForm.mainWindowMenubar*background: BACKGROUND +XWp*MenuBar*background: BACKGROUND +XWp*menubar*background: BACKGROUND +XWp*popmenu*background: BACKGROUND +WPFMShell*MenuBar*background: BACKGROUND +WPFMShell*menubar*background: BACKGROUND +XWp.mainWindowForm.mainWindowMenubar*foreground: FOREGROUND +XWp*MenuBar*foreground: FOREGROUND +XWp*menubar*foreground: FOREGROUND +XWp*popmenu*foreground: FOREGROUND +WPFMShell*MenuBar*foreground: FOREGROUND +WPFMShell*menubar*foreground: FOREGROUND +XWp*XmDialogShell*foreground: FOREGROUND +XWp*XmDialogShell*XmScrolledWindow*XmDrawingArea.foreground: FOREGROUND +WPFMShell*XmDialogShell*foreground: FOREGROUND +WPFMShell*XmDialogShell*XmScrolledWindow*XmDrawingArea.foreground: FOREGROUND +XWp*XmDialogShell*XmDrawingArea.foreground: WINDOW_FOREGROUND +XWp*XmDialogShell*XmList*foreground: WINDOW_FOREGROUND +XWp*XmDialogShell*XmText*foreground: WINDOW_FOREGROUND +XWp*XmDialogShell*XmTextField*foreground: WINDOW_FOREGROUND +WPFMShell*XmDialogShell*XmDrawingArea*foreground: WINDOW_FOREGROUND +WPFMShell*XmDialogShell*XmList*foreground: WINDOW_FOREGROUND +WPFMShell*XmDialogShell*XmText*foreground: WINDOW_FOREGROUND +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 +XWp*XmDialogShell*XmDrawingArea.background: WINDOW_BACKGROUND +XWp*XmDialogShell*XmList*background: WINDOW_BACKGROUND +XWp*XmDialogShell*XmText*background: WINDOW_BACKGROUND +XWp*XmDialogShell*XmTextField*background: WINDOW_BACKGROUND +WPFMShell*XmDialogShell*XmDrawingArea*background: WINDOW_BACKGROUND +WPFMShell*XmDialogShell*XmList*background: WINDOW_BACKGROUND +WPFMShell*XmDialogShell*XmText*background: WINDOW_BACKGROUND +WPFMShell*XmDialogShell*XmTextField*background: WINDOW_BACKGROUND +XWp*background: BACKGROUND +XWp*XmScrolledWindow*XmDrawingArea.background: BACKGROUND +WPFMShell*background: BACKGROUND +WPFMShell*XmScrolledWindow*XmDrawingArea.background: BACKGROUND +XWp.form.rulerframe.ruler*background: BACKGROUND +XWp.form.controlbar.menubar.CBHlpButton*background: BACKGROUND +XWp*foreground: FOREGROUND +XWp*XmScrolledWindow*XmDrawingArea.foreground: FOREGROUND +WPFMShell*foreground: FOREGROUND +WPFMShell*XmScrolledWindow*XmDrawingArea.foreground: FOREGROUND +XWp.form.scrollbar0.background: BACKGROUND +XWp.form.hscrollbar.background: BACKGROUND + + + + diff --git a/kcontrol/krdb/ad/XCalc.ad b/kcontrol/krdb/ad/XCalc.ad new file mode 100644 index 000000000..7f2ebcfac --- /dev/null +++ b/kcontrol/krdb/ad/XCalc.ad @@ -0,0 +1,7 @@ +xcalc*background: BACKGROUND +xcalc*foreground: FOREGROUND +!xcalc*bevel.Background: LOWLIGHT +!xcalc*bevel.screen*background: WINDOW_BACKGROUND +!xcalc*bevel.screen*foreground: WINDOW_FOREGROUND +xcalc*bevel.screen.LCD.background: WINDOW_BACKGROUND +xcalc*bevel.screen.LCD.foreground: WINDOW_FOREGROUND diff --git a/kcontrol/krdb/ad/XOsview.ad b/kcontrol/krdb/ad/XOsview.ad new file mode 100644 index 000000000..b9a3c1619 --- /dev/null +++ b/kcontrol/krdb/ad/XOsview.ad @@ -0,0 +1,5 @@ +xosview*meterLabelColor: FOREGROUND +xosview*usedLabelColor: FOREGROUND +xosview*background: BACKGROUND +xosview*foreground: FOREGROUND + diff --git a/kcontrol/krdb/ad/XTerm.ad b/kcontrol/krdb/ad/XTerm.ad new file mode 100644 index 000000000..cf0e41c8e --- /dev/null +++ b/kcontrol/krdb/ad/XTerm.ad @@ -0,0 +1,4 @@ +xterm*background: WINDOW_BACKGROUND +xterm*foreground: WINDOW_FOREGROUND +xterm.SimpleMenu*background: BACKGROUND +xterm.SimpleMenu*foreground: FOREGROUND diff --git a/kcontrol/krdb/ad/XV.ad b/kcontrol/krdb/ad/XV.ad new file mode 100644 index 000000000..c9c288cb2 --- /dev/null +++ b/kcontrol/krdb/ad/XV.ad @@ -0,0 +1,2 @@ +!xv*highlight: HIGHLIGHT +!xv*lowlight: LOWLIGHT diff --git a/kcontrol/krdb/ad/Xawtv.ad b/kcontrol/krdb/ad/Xawtv.ad new file mode 100644 index 000000000..4134464aa --- /dev/null +++ b/kcontrol/krdb/ad/Xawtv.ad @@ -0,0 +1,10 @@ +Xawtv*foreground: FOREGROUND +Xawtv*background: BACKGROUND +TopLevelShell*foreground: FOREGROUND +TopLevelShell*background: BACKGROUND +Streamer*Text*background: BACKGROUND +Config*Text*background: BACKGROUND +Config*channel.background: BACKGROUND +Config*key.background: BACKGROUND +Config*list.background: BACKGROUND +Xawtv*Dialog.value.background: BACKGROUND diff --git a/kcontrol/krdb/ad/Xdvi.ad b/kcontrol/krdb/ad/Xdvi.ad new file mode 100644 index 000000000..6b1848023 --- /dev/null +++ b/kcontrol/krdb/ad/Xdvi.ad @@ -0,0 +1 @@ +xdvi.background: white diff --git a/kcontrol/krdb/ad/Xpdf.ad b/kcontrol/krdb/ad/Xpdf.ad new file mode 100644 index 000000000..3109bbbd9 --- /dev/null +++ b/kcontrol/krdb/ad/Xpdf.ad @@ -0,0 +1,3 @@ +xpdf.urlCommand: kfmclient exec %s +xpdf.foreground: FOREGROUND +xpdf.background: BACKGROUND diff --git a/kcontrol/krdb/ad/krdb b/kcontrol/krdb/ad/krdb new file mode 100755 index 000000000..96ee9fc92 --- /dev/null +++ b/kcontrol/krdb/ad/krdb @@ -0,0 +1,4 @@ +#! /bin/sh + +kcminit style + diff --git a/kcontrol/krdb/kcmdisplayrc.upd b/kcontrol/krdb/kcmdisplayrc.upd new file mode 100644 index 000000000..4d139ad2c --- /dev/null +++ b/kcontrol/krdb/kcmdisplayrc.upd @@ -0,0 +1,7 @@ +# This is comment +Id=kde3 +File=kcmdisplayrc +Group=X11 +Options=copy +Key=useResourceManager,exportKDEColors +Key=useResourceManager,exportKDEFonts diff --git a/kcontrol/krdb/kcs/AtlasGreen.kcsrc b/kcontrol/krdb/kcs/AtlasGreen.kcsrc new file mode 100644 index 000000000..9ce3f6aff --- /dev/null +++ b/kcontrol/krdb/kcs/AtlasGreen.kcsrc @@ -0,0 +1,83 @@ +# KDE Config File +[Color Scheme] +Name=Atlas Green +Name[af]=Atlas Groen +Name[ar]=أخضر أطلسي +Name[az]=Atlas Yaşılı +Name[bn]=অ্যাটলাস গ্রিন +Name[bs]=Atlas zelena +Name[ca]=Verd Atlas +Name[cs]=Atlasově zelená +Name[csb]=Atłasowô zelonosc +Name[cy]=Gwyrdd Atlas +Name[da]=Atlasgrøn +Name[de]=Atlas-Grün +Name[el]=Atlas πράσινο +Name[eo]=Atlasa verdo +Name[es]=Verde atlas +Name[et]=Atlasroheline +Name[eu]=Atlas berdea +Name[fa]=سبز اطلس +Name[fi]=Atlaksenvihreä +Name[fr]=Atlas vert +Name[fy]=Atlasgrien +Name[gl]=Verde Atlas +Name[he]=גווני ירוק +Name[hi]=एटलस हरा +Name[hr]=Atlas zelena +Name[hu]=Atlaszzöld +Name[is]=Atlasgrænn +Name[it]=Atlante verde +Name[ja]=アトラスグリーン +Name[km]=Atlas បៃតង +Name[lo]=ຂງວແຜນທີ່ +Name[lt]=Žalia atlasinė +Name[lv]=Atlasa zaļš +Name[mn]=Атлас-Ногоон +Name[ms]=Hijau Lumut +Name[mt]=Aħdar Atlas +Name[nb]=Atlas grønn +Name[nds]=Atlas-Gröön +Name[ne]=एटलस हरियो +Name[nl]=Atlasgroen +Name[nn]=Atlas grøn +Name[pa]=ਐਲਟਸ ਗਰੀਨ +Name[pl]=Atłasowa zieleń +Name[pt]=Verde Atlas +Name[pt_BR]=Atlas +Name[ro]=Verde Atlas +Name[rw]=Icyatsi Atalasi +Name[se]=Atlas ruoná +Name[sk]=Atlasová zelená +Name[sl]=Zeleni atlas +Name[sr]=Атлас зелено +Name[sr@Latn]=Atlas zeleno +Name[sv]=Atlasgrön +Name[ta]=பூமி பச்சை +Name[te]=అట్లాస్ పచ్చ +Name[tg]=Атласи сабз (Atlas Green) +Name[tr]=Atlas Yeşili +Name[uk]=Зелений атлас +Name[uz]=Yashil atlas +Name[uz@cyrillic]=Яшил атлас +Name[ven]=Atlas Dala +Name[vi]=Màu xanh Atlas +Name[xh]=Okuluhlaza kwe Atlas +Name[zh_CN]=地图绿 +Name[zh_TW]=Atlas 綠 +background=#afb49f +buttonBackground=#afb49f +buttonForeground=#000000 +selectBackground=#6f7a63 +foreground=#000000 +activeForeground=#ffffff +inactiveBackground=#000000 +inactiveBlend=#afb49f +activeBackground=#6f7a63 +activeBlend=#000000 +contrast=5 +inactiveForeground=#afb49f +windowForeground=#000000 +windowBackground=#ffffff +selectForeground=#ffffff +alternateBackground=#EFF3E0 diff --git a/kcontrol/krdb/kcs/BeOS.kcsrc b/kcontrol/krdb/kcs/BeOS.kcsrc new file mode 100644 index 000000000..a7ce7a86e --- /dev/null +++ b/kcontrol/krdb/kcs/BeOS.kcsrc @@ -0,0 +1,26 @@ +# KDE Config File +[Color Scheme] +foreground=0,0,0 +selectForeground=0,0,0 +activeBlend=255,215,0 +selectBackground=168,168,168 +inactiveBackground=237,237,237 +Name=BeOS +Name[af]=Beos +Name[hi]=बीई-ओएस +Name[id]=Beos +Name[lo]=ລະບົບປະຕິບັດການ BeOS +Name[te]=బిఓఎస్ +Name[tg]=Системаи омили Be +Name[th]=ระบบปฏิบัติการ BeOS +contrast=7 +background=217,217,217 +buttonBackground=217,217,217 +buttonForeground=0,0,0 +activeBackground=255,215,0 +inactiveBlend=237,237,237 +inactiveForeground=0,0,0 +activeForeground=0,0,0 +windowForeground=0,0,0 +windowBackground=255,255,255 +alternateBackground=255,252,235 diff --git a/kcontrol/krdb/kcs/BlackOnWhite.kcsrc b/kcontrol/krdb/kcs/BlackOnWhite.kcsrc new file mode 100644 index 000000000..73e3be970 --- /dev/null +++ b/kcontrol/krdb/kcs/BlackOnWhite.kcsrc @@ -0,0 +1,89 @@ +[Color Scheme] +Name=High Contrast Black Text +Name[af]=Hoë kontras swart teks +Name[ar]=نص أسود عالي التباين +Name[be]=Высокакантрастная "Белае па чорным" +Name[bn]=হাই কনট্রাস্ট কালো লেখা +Name[bs]=Visoki kontrast, crni tekst +Name[ca]=Text negre d'alt contrast +Name[cs]=Vysoký kontrast, černý text +Name[csb]=Kòntrastowi czôrny tekst +Name[da]=Sort tekst med høj kontrast +Name[de]=Hoher Kontrast, Schwarz auf Weiß +Name[el]=Μαύρο κείμενο υψηλής αντίθεσης +Name[eo]=Alt-kontrasta Nigra Teksto +Name[es]=Texto negro de alto contraste +Name[et]=Väga kontrastne must tekst +Name[eu]=Kontraste handiko zuria beltzaren gainean +Name[fa]=متن سیاه با سایه روشن بالا +Name[fi]=Valkoista mustalla suurilla värivastakohdilla +Name[fr]=Texte en noir avec contraste élevé +Name[fy]=Heech kontrast swarte tekst +Name[gl]=Texto Negro de Alto Contraste +Name[he]=ניגודיות גבוהה טקסט שחור +Name[hr]=Crni tekst visokog kontrasta +Name[hu]=Erősen kontrasztos fekete szöveg +Name[is]=Há birtuskila svartur texti +Name[it]=Testo nero ad alto contrasto +Name[ja]=ハイコントラストの黒いテキスト +Name[ka]=კონტრასტული შავი ტექსტი +Name[kk]=Контрастығы жоғары қара мәтін +Name[km]=អត្ថបទ​ពណ៌​ខ្មៅ កម្រិត​ពណ៌​ខ្ពស់ +Name[lt]=Didelio kontrasto juodas tekstas +Name[mk]=Црн текст со висок контраст +Name[ms]=Teks Hitam Kontras Tinggi +Name[nb]=Høykontrast svart tekst +Name[nds]=Hogen Kontrast, swatt Text +Name[ne]=उच्च व्यतिरेक कालो पाठ +Name[nl]=Hoog contrast zwarte tekst +Name[nn]=Høgkontrast svart tekst +Name[pa]=ਜਿਆਦਾ ਗੂਡ਼ਾ ਕਾਲਾ ਪਾਠ +Name[pl]=Kontrastowy czarny tekst +Name[pt]=Alto Contraste Texto Preto +Name[pt_BR]=Alto Contraste do Texto Preto +Name[ro]=Contrast mare text negru +Name[ru]=Высококонтрастный чёрный текст +Name[rw]=Umwandiko w'Umukara Inyuranyamigaragarire yo Hejuru +Name[se]=Alla vuostálasvuohta, čáhppes teaksta +Name[sk]=Vysokokontrastný čierny text +Name[sl]=Visoko kontrastno črno besedilo +Name[sr]=Црни текст високог контраста +Name[sr@Latn]=Crni tekst visokog kontrasta +Name[sv]=Svart text med hög kontrast +Name[ta]=அதிக மாறுபட்ட கறுப்பு மீது வெள்ளை உரை +Name[tg]=Матни баландсифати сиёҳ +Name[th]=อักษรดำคอนทราสสูง +Name[tr]=Yüksek Kontrast Siyah Metin +Name[tt]=Kisken Qara +Name[uk]=Висококонтрастний чорний текст +Name[uz]=Yuqori kontrastli qora matn +Name[uz@cyrillic]=Юқори контрастли қора матн +Name[vi]=Chữ đen trên nền trắng +Name[wa]=Noer so blanc +Name[zh_CN]=高对比黑字 +Name[zh_TW]=高對比黑色字 +activeBackground=165,165,255 +activeBlend=165,165,255 +activeForeground=0,0,0 +activeTitleBtnBg=0,0,0 +activeForeground=0,0,0 +alternateBackground=215,215,255 +background=255,255,255 +buttonBackground=255,255,255 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +frame=122,122,255 +handle=122,122,255 +inactiveBackground=225,225,225 +inactiveBlend=225,225,225 +inactiveForeground=128,128,128 +inactiveFrame=225,225,225 +inactiveHandle=225,225,225 +inactiveTitleBtnBg=85,85,85 +linkColor=0,0,0 +selectBackground=165,165,255 +selectForeground=0,0,0 +visitedLinkColor=0,0,0 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/BlueSlate.kcsrc b/kcontrol/krdb/kcs/BlueSlate.kcsrc new file mode 100644 index 000000000..f3682849c --- /dev/null +++ b/kcontrol/krdb/kcs/BlueSlate.kcsrc @@ -0,0 +1,87 @@ +# KDE Config File +[Color Scheme] +Name=Blue Slate +Name[af]=Blou Graniet +Name[ar]=أزرق رخامي +Name[az]=Mavi Səma +Name[bn]=ব্লু স্লেট +Name[br]=Stad glas +Name[bs]=Plavi mermer +Name[ca]=Blau pissarra +Name[cs]=Modrá plískanice +Name[csb]=Mòdrô dakówka +Name[cy]=Llechfaen Glas +Name[da]=Blå tavle +Name[de]=Schieferblau +Name[el]=Μπλε Slate +Name[eo]=Blua ardezo +Name[es]=Azul pizarra +Name[et]=Sinine kivitahvel +Name[eu]=Arbel urdina +Name[fa]=تخته‌سنگ آبی +Name[fi]=Sininen liuske +Name[fr]=Ardoise bleue +Name[fy]=Laaiblau +Name[gl]=Azul Lousa +Name[he]=צפחה כחולה +Name[hi]=नीला स्लेट +Name[hr]=Plavo-siva +Name[hu]=Kékes árnyalat +Name[is]=Bláar flögur +Name[it]=Blu ardesia +Name[ja]=ブルースレート +Name[kk]=Көгілдір күй +Name[km]=ខៀវ​ស្លេក +Name[lo]=ເຈ້ຍສີຟ້າ +Name[lt]=Pilkai mėlyna +Name[lv]=Zils Šīferis +Name[mn]=Хөх занар +Name[ms]=Loh Biru +Name[mt]=Tafal ikħal +Name[nb]=Skiferblå +Name[nds]=Blaag Schiefer +Name[ne]=निलो स्लेट +Name[nl]=Leisteenblauw +Name[nn]=Blågrå +Name[nso]=Seleiti se se tala +Name[pa]=ਨੀਲਾ ਸਲਾਟੀ +Name[pl]=Niebieska dachówka +Name[pt]=Azul Forte +Name[pt_BR]= Azul +Name[ro]=Albastru de ardezie +Name[rw]=Ubururu Ibuyebururu +Name[se]=Alit-ránes +Name[sk]=Modrá bridlica +Name[sl]=Modri skril +Name[sr]=Плави шкриљац +Name[sr@Latn]=Plavi škriljac +Name[sv]=Blå skiffer +Name[ta]=நீல பலகை +Name[te]=నీలపు పలక +Name[tg]=Оби моил ба сиёҳ +Name[th]=กระดานสีฟ้า +Name[tr]=Mavi Tahta +Name[tt]=Zäñgär-Sorı +Name[uk]=Синій шифер +Name[uz]=Koʻkish kul +Name[uz@cyrillic]=Кўкиш кул +Name[ven]=Tshileiti tsha lutombo +Name[vi]=Xanh xám +Name[wa]=Bleu estat +Name[zh_CN]=蓝灰 +Name[zh_TW]=藍灰 +background=#9db9c8 +buttonBackground=#9db9c8 +buttonForeground=#000000 +selectBackground=#558097 +foreground=#000000 +activeForeground=#ffffff +inactiveBackground=#9c9c9c +inactiveBlend=#9db9c8 +activeBackground=#558097 +activeBlend=#9db9c8 +contrast=5 +inactiveForeground=#d6d6d6 +windowForeground=#000000 +windowBackground=#c3c3c3 +selectForeground=#ffffff diff --git a/kcontrol/krdb/kcs/CDE.kcsrc b/kcontrol/krdb/kcs/CDE.kcsrc new file mode 100644 index 000000000..ca219cb15 --- /dev/null +++ b/kcontrol/krdb/kcs/CDE.kcsrc @@ -0,0 +1,26 @@ +# KDE Config File +[Color Scheme] +Name=CDE +Name[hi]=सीडीई +Name[mn]=КДE +Name[te]=సిడిఈ +Name[tg]=Муҳити графикии муштарак (CDE) +Name[th]=แบบ CDE +background=#999999 +buttonBackground=#999999 +buttonForeground=#ffffff +selectBackground=#326284 +foreground=#ffffff +activeForeground=#ffffff +activeBlend=#999999 +inactiveBackground=#818181 +inactiveBlend=#999999 +activeBackground=#326284 +contrast=7 +inactiveForeground=#ffffff +windowForeground=#ffffff +windowBackground=#818181 +selectForeground=#ffffff +linkColor=#ffffc0 +visitedLinkColor=#c0ffc0 +alternateBackground=#929292 diff --git a/kcontrol/krdb/kcs/DarkBlue.kcsrc b/kcontrol/krdb/kcs/DarkBlue.kcsrc new file mode 100644 index 000000000..fbdde7d63 --- /dev/null +++ b/kcontrol/krdb/kcs/DarkBlue.kcsrc @@ -0,0 +1,98 @@ +[Color Scheme] +activeBackground=65,101,148 +activeBlend=0,40,74 +activeForeground=255,255,255 +activeTitleBtnBg=66,103,148 +activeTitleBtnBlend= +activeTitleBtnFg=66,103,148 +alternateBackground=0,66,123 +background=66,103,148 +buttonBackground=66,103,148 +buttonForeground=255,255,255 +contrast=8 +foreground=255,255,255 +inactiveBackground=66,103,148 +inactiveBlend=74,113,164 +inactiveForeground=0,42,78 +inactiveTitleBtnBg=66,103,148 +inactiveTitleBtnBlend=0,112,182 +inactiveTitleBtnFg=66,103,148 +Name=Dark Blue +Name[af]=Donker Blou +Name[ar]=أزرق غامق +Name[az]=Tünd Göy +Name[be]=Цёмна-сіняя +Name[bn]=গাঢ় নীল +Name[br]=Glas teñval +Name[bs]=Tamno plava +Name[ca]=Blau fosc +Name[cs]=Tmavě modrá +Name[csb]=Cemnomòdri +Name[cy]=Glas tywyll +Name[da]=Mørkeblå +Name[de]=Dunkelblau +Name[el]=Σκούρο μπλε +Name[eo]=Malhela bluo +Name[es]=Azul oscuro +Name[et]=Tumesinine +Name[eu]=Urdin iluna +Name[fa]=آبی تیره +Name[fi]=Tummansininen +Name[fr]=Bleu foncé +Name[fy]=Tsjusterblau +Name[ga]=Dúghorm +Name[gl]=Azul Escuro +Name[he]=כחול כהה +Name[hi]=गहरा नीला +Name[hr]=Tamno plava +Name[hu]=Sötétkék +Name[is]=Dökkblátt +Name[it]=Blu scuro +Name[ja]=ダークブルー +Name[kk]=Кою көк +Name[km]=ខៀវ​ស្រងាត់ +Name[lo]=ນໍ້າເງິນເຂັ້ມ +Name[lt]=Tamsiai mėlyna +Name[lv]=Tumši Zils +Name[mk]=Темно сино +Name[mn]=Хар хөх +Name[ms]=Biru Tua +Name[mt]=Ikħal skur +Name[nb]=Mørkeblå +Name[nds]=Düüster-Blaag +Name[ne]=गाढा निलो +Name[nl]=Donkerblauw +Name[nn]=Mørkeblå +Name[nso]=Botala bjo bo tsene letsego +Name[pa]=ਗੂੜਾ ਨੀਲਾ +Name[pl]=Ciemnoniebieski +Name[pt]=Azul escuro +Name[pt_BR]=Azul escuro +Name[ro]=Albastru închis +Name[rw]=Ubururu Bwijimye +Name[se]=Sevdnjesalit +Name[sk]=Tmavomodrá +Name[sl]=Temna modrina +Name[sr]=Тамно плава +Name[sr@Latn]=Tamno plava +Name[sv]=Mörkblå +Name[te]=ముదురు నీలం +Name[th]=น้ำเงินเข้ม +Name[tr]=Koyu Mavi +Name[tt]=Qara Zäñgär +Name[uk]=Синя темрява +Name[uz]=Toʻq koʻk +Name[uz@cyrillic]=Тўқ кўк +Name[ven]=Lutombo lwo nzwinzwimalaho +Name[vi]=Màu xanh thẫm +Name[wa]=Foncé bleu +Name[xh]=Luhlaza buntsundu (okwesibhaka-bhaka) +Name[zh_CN]=深蓝 +Name[zh_TW]=深藍 +Name[zu]=Okuluhlaza kakhulu +selectBackground=92,179,255 +selectForeground=0,0,0 +windowBackground=0,42,78 +windowForeground=220,220,220 +linkColor=#00ffff +visitedLinkColor=#c0c0ff diff --git a/kcontrol/krdb/kcs/DesertRed.kcsrc b/kcontrol/krdb/kcs/DesertRed.kcsrc new file mode 100644 index 000000000..6be73c2d7 --- /dev/null +++ b/kcontrol/krdb/kcs/DesertRed.kcsrc @@ -0,0 +1,89 @@ +# KDE Config File +[Color Scheme] +Name=Desert Red +Name[af]=Woestyn Rooi +Name[ar]=أحمر صحراوي +Name[az]=Səhra Qırmızısı +Name[be]=Пустынна-чырвоная +Name[bn]=ডেসার্ট রেড +Name[bs]=Pustinjski crvena +Name[ca]=Roig del desert +Name[cs]=Pouštní červená +Name[csb]=Czerwionosc pùstini +Name[cy]=Anialdir Coch +Name[da]=Ørkenrød +Name[de]=Wüstenrot +Name[el]=Κόκκινο της ερήμου +Name[eo]=Dezerta ruĝo +Name[es]=Rojo desierto +Name[et]=Kõrbepunane +Name[eu]=Basamortu gorria +Name[fa]=قرمز صحرایی +Name[fi]=Aavikon punainen +Name[fr]=Désert rouge +Name[fy]=Woestynread +Name[gl]=Vermello Deserto +Name[he]=אדום מדברי +Name[hi]=मरु लाल +Name[hr]=Pustinjski crvena +Name[hu]=Téglavörös +Name[is]=Eyðimerkurrautt +Name[it]=Rosso deserto +Name[ja]=砂漠色 +Name[kk]=Қызыл шөл +Name[km]=ក្រហម​ស្លេក +Name[lo]=ແດງທະເລຊາຍ +Name[lt]=Raudona dykumos +Name[lv]=Tuksneša sarkans +Name[mk]=Пустинско црвено +Name[mn]=Говийн улаан +Name[ms]=Merah Karat +Name[mt]=Ramla l-ħamra +Name[nb]=Ørkenrød +Name[nds]=Wööst-Root +Name[ne]=बलौटे रातो +Name[nl]=Woestijnrood +Name[nn]=Ørkenraud +Name[nso]=Bohubedu bja Letanaga +Name[pa]=ਮਾਰੂਥਲੀ ਲਾਲ +Name[pl]=Czerwień pustyni +Name[pt]=Vermelho Deserto +Name[pt_BR]=Vermelho +Name[ro]=Roșu deșert +Name[rw]=Umutuku Ubutayu +Name[se]=Saddoáhperuoksat +Name[sk]=Púštna červená +Name[sl]=Puščavska rdeča +Name[sr]=Пустињско црвена +Name[sr@Latn]=Pustinjsko crvena +Name[sv]=Ökenröd +Name[ta]=பாலைவன சிவப்பு +Name[te]=ఎడారి ఎరుపు +Name[th]=แดงทะเลทราย +Name[tr]=Çöl Kırmızısı +Name[uk]=Червона пустеля +Name[uz]=Qizil choʻl +Name[uz@cyrillic]=Қизил чўл +Name[ven]=Vhutswuku ha muvhala wa soga +Name[vi]=Đỏ sa mạc +Name[wa]=Rodje do dezert +Name[xh]=Bomvu Krwe +Name[zh_CN]=沙漠红 +Name[zh_TW]=沙漠紅 +Name[zu]=Okubovu okogwadule +background=214,205,187 +buttonBackground=214,205,187 +buttonForeground=0,0,0 +selectBackground=128,0,0 +foreground=0,0,0 +activeForeground=255,255,255 +inactiveBackground=0,0,0 +inactiveBlend=214,205,187 +activeBackground=128,0,0 +activeBlend=0,0,0 +contrast=3 +inactiveForeground=214,214,214 +windowForeground=0,0,0 +windowBackground=255,255,255 +selectForeground=255,255,255 +alternateBackground=255,246,230 diff --git a/kcontrol/krdb/kcs/DigitalCDE.kcsrc b/kcontrol/krdb/kcs/DigitalCDE.kcsrc new file mode 100644 index 000000000..6e56c3b5a --- /dev/null +++ b/kcontrol/krdb/kcs/DigitalCDE.kcsrc @@ -0,0 +1,69 @@ +# KDE Config File +[Color Scheme] +Name=Digital CDE +Name[af]=Digitaal Cde +Name[az]=Dijital CDE +Name[be]=Лічбавая CDE +Name[bn]=ডিজিটাল CDE +Name[br]=CDE niverel +Name[ca]=CDE digital +Name[csb]=CDE firmë Digital +Name[cy]=CDE Digidol +Name[de]=Digital (DEC) CDE +Name[el]=Ψηφιακό CDE +Name[eo]=Digital-CDE +Name[es]=CDE de Digital +Name[eu]=Digital-en CDE +Name[fa]=CDE رقمی +Name[gl]=CDE Dixital +Name[hi]=डिज़िटल सीडीई +Name[hr]=Digitalni CDE +Name[is]=Stafrænt CDE +Name[km]=CDE ឌីជីថល +Name[ko]=디지털 시계 +Name[lo]=ໂປຣແກຣມຈັດການຫນ້າຕ່າງ CDE +Name[lt]=Skaitmeninis CDE +Name[lv]=Ciparu CDE +Name[mn]=Тоон (DEC) КДE +Name[ms]=CDE Digital +Name[ne]=डिजिटल CDE +Name[nso]=CDE ya Dinomoro +Name[pa]=ਡਿਜ਼ੀਟਲ CDE +Name[pl]=CDE firmy Digital +Name[pt]=CDE da Digital +Name[pt_BR]=CDE Digital +Name[ro]=CDE Digital +Name[rw]=CDE Bimenyetsomibare +Name[se]=Digitalálaš CDE +Name[sk]=CDE od Digital +Name[sl]=Digitalni CDE +Name[ta]=டிஜிட்டல் CDE +Name[te]=డిజిటల్ సిడిఈ +Name[th]=แบบ Digital CDE +Name[tr]=Dijital CDE +Name[uz]=Raqamli CDE +Name[uz@cyrillic]=Рақамли CDE +Name[ven]=CDE ya Didzhithala +Name[vi]=CDE số +Name[wa]=Didjitå CDE +Name[xh]=CDE Ebonisa Inani Ngalinye +Name[zh_TW]=數位 CDE +Name[zu]=I-CDE eyizinombolo +background=#4b7b82 +buttonBackground=#4b7b82 +buttonForeground=#ffffff +selectBackground=#526673 +alternateBackground=#304445 +foreground=#ffffff +activeForeground=#ffffff +inactiveBackground=#4b7b82 +inactiveBlend=#4b7b82 +activeBackground=#a47591 +activeBlend=#4b7b82 +contrast=7 +inactiveForeground=#ffffff +windowForeground=#ffffff +windowBackground=#374d4e +selectForeground=#ffffff +linkColor=#00ffff +visitedLinkColor=#c0c0ff diff --git a/kcontrol/krdb/kcs/EveX.kcsrc b/kcontrol/krdb/kcs/EveX.kcsrc new file mode 100644 index 000000000..b63776fcf --- /dev/null +++ b/kcontrol/krdb/kcs/EveX.kcsrc @@ -0,0 +1,27 @@ +[Color Scheme] +Name=EveX +Name[af]=Evex +Name[hi]=एवेक्स +Name[lo]=ແບບ EveX +Name[pl]=WigiliaX +Name[te]=ఈవెక్స్ +Name[th]=แบบ EveX +activeBackground=233,233,233 +activeBlend=233,233,233 +activeForeground=2,2,2 +activeTitleBtnBg=220,220,220 +background=230,222,220 +buttonBackground=228,228,228 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=150,167,202 +inactiveBlend=157,176,208 +inactiveForeground=93,112,145 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=10,95,137 +selectForeground=255,255,255 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/KDEOne.kcsrc b/kcontrol/krdb/kcs/KDEOne.kcsrc new file mode 100644 index 000000000..181047169 --- /dev/null +++ b/kcontrol/krdb/kcs/KDEOne.kcsrc @@ -0,0 +1,30 @@ +[Color Scheme] +activeBackground=0,0,128 +activeBlend=0,0,0 +activeForeground=255,255,255 +activeTitleBtnBg=192,192,192 +background=192,192,192 +buttonBackground=192,192,192 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=128,128,128 +inactiveBlend=192,192,192 +inactiveForeground=192,192,192 +inactiveTitleBtnBg=192,192,192 +linkColor=0,0,255 +Name=KDE 1 +Name[af]=Kde 1 +Name[bn]=কে.ডি.ই. ১ +Name[fa]=KDE ۱ +Name[hi]=केडीई 1 +Name[km]=KDE ១ +Name[lo]=ໂປຣແກຣມຈັດການຫນ້າຕ່າງ KDE 1 +Name[mn]=КДЭ 1 +Name[te]=కెడిఈ 1 +Name[th]=แบบ KDE 1 +selectBackground=0,0,128 +selectForeground=255,255,255 +visitedLinkColor=255,0,255 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/KDETwo.kcsrc b/kcontrol/krdb/kcs/KDETwo.kcsrc new file mode 100644 index 000000000..ec128160f --- /dev/null +++ b/kcontrol/krdb/kcs/KDETwo.kcsrc @@ -0,0 +1,28 @@ +[Color Scheme] +activeBackground=10,95,137 +activeBlend=10,95,137 +activeForeground=255,255,255 +activeTitleBtnBg=192,192,192 +background=220,220,220 +buttonBackground=228,228,228 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=220,220,220 +inactiveBlend=220,220,220 +inactiveForeground=0,0,0 +linkColor=0,0,192 +Name=KDE 2 +Name[bn]=কে.ডি.ই. ২ +Name[fa]=KDE ۲ +Name[hi]=केडीई 2 +Name[km]=KDE ២ +Name[lo]=KDE +Name[mn]=КДЭ 2 +Name[te]=కెడిఈ 2 +Name[th]=แบบ KDE 2 +selectBackground=10,95,137 +selectForeground=255,255,255 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/Keramik.kcsrc b/kcontrol/krdb/kcs/Keramik.kcsrc new file mode 100644 index 000000000..241d29f90 --- /dev/null +++ b/kcontrol/krdb/kcs/Keramik.kcsrc @@ -0,0 +1,49 @@ +[Color Scheme] +Name=Keramik +Name[ar]=قرميدي +Name[be]=Кераміка +Name[bn]=কেরামিক +Name[cs]=Keramika +Name[eo]=Ceramiko +Name[fa]=کرامیک +Name[fy]=Keramyk +Name[hi]=के-रामिक +Name[it]=Ceramica +Name[lo]=ເຄຣາມິກ - K +Name[lv]=Keramika +Name[mk]=Керамик +Name[mn]=Ваар +Name[nb]=Keramikk +Name[ne]=केरामिक +Name[nn]=Keramikk +Name[pa]=ਕੀਰਾਮਿਕ +Name[se]=Bálseduodji +Name[sr]=Керамика +Name[sr@Latn]=Keramika +Name[ta]=கெராமிக் +Name[te]=కెరామిక్ +Name[th]=เครามิก +Name[uk]=Керамік +Name[uz]=Keramika +Name[uz@cyrillic]=Керамика +Name[vi]=Gốm +activeBackground=62,145,235 +activeBlend=62,145,235 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=238,246,255 +background=234,233,232 +buttonBackground=230,240,249 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=175,214,255 +inactiveBlend=175,214,255 +inactiveForeground=255,255,255 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=169,209,255 +selectForeground=3,3,3 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/KeramikEmerald.kcsrc b/kcontrol/krdb/kcs/KeramikEmerald.kcsrc new file mode 100644 index 000000000..6ffbf9b51 --- /dev/null +++ b/kcontrol/krdb/kcs/KeramikEmerald.kcsrc @@ -0,0 +1,73 @@ +[Color Scheme] +Name=Keramik Emerald +Name[be]=Ізумрудная кераміка +Name[bn]=কেরামিক এমারেল্ড +Name[br]=Keramik emrodez +Name[ca]=Keramik maragda +Name[cs]=Keramika (emerald) +Name[cy]=Keramik Emerallt +Name[da]=Keramik-smaragd +Name[de]=Porzellan-Smaragd +Name[el]=Keramik σμαράγδι +Name[eo]=Ceramika Bluo +Name[es]=Esmeralda cerámica +Name[et]=Sügavroheline Keramik +Name[eu]=Keramik esmeralda +Name[fa]=زمردی کرامیک +Name[fi]=Keramik smaragdi +Name[fr]=Keramik émeraude +Name[fy]=Keramyk-Emerald +Name[ga]=Iathghlas Keramik +Name[gl]=Keramic Esmeralda +Name[hi]=के-रामिक पन्ना +Name[hu]=Keramik (kék) +Name[it]=Ceramica smeraldo +Name[km]=Keramik បៃតង​ឆើត +Name[lo]=ເຄຣາມິກ - K +Name[lt]=Keramik smaragdinis +Name[lv]=Smaragda Keramika +Name[mk]=Керамик смарагд +Name[mn]=Ваар-Emerald +Name[ms]=Zamrud Keramik +Name[mt]=Keramik Żmeralda +Name[nb]=Keramikk, smaragdgrønn +Name[nds]=Keramik-Smaragd +Name[ne]=केरामिक इमेरल्ड +Name[nl]=Keramik-Emerald +Name[nn]=Keramikk, smaragdgrøn +Name[pa]=ਕੀਰਾਮਿਕ ਈਮੀਰਾਲਡ +Name[pt]=Keramik Esmeralda +Name[pt_BR]=Keramik Esmeralda +Name[rw]=Ibuyecyatsi Keramik +Name[se]=Bálseduoddji, smarágdalágan +Name[sr]=Смарагдна керамика +Name[sr@Latn]=Smaragdna keramika +Name[sv]=Keramik smaragd +Name[ta]=கெராமிக் எமரால்ட் +Name[te]=కెరామిక్ మరకతం +Name[th]=เครามิกมรกต +Name[uz]=Zumrad keramika +Name[uz@cyrillic]=Зумрад керамика +Name[vi]=Gốm lục bảo +Name[zh_CN]=Keramik 翠绿 +Name[zh_TW]=綠寶石 Keramik +activeBackground=213,166,55 +activeBlend=212,165,56 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=240,240,240 +background=238,238,230 +buttonBackground=238,234,222 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=193,197,171 +inactiveBlend=226,230,199 +inactiveForeground=255,255,255 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=134,204,134 +selectForeground=0,0,0 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/KeramikWhite.kcsrc b/kcontrol/krdb/kcs/KeramikWhite.kcsrc new file mode 100644 index 000000000..1fe807db1 --- /dev/null +++ b/kcontrol/krdb/kcs/KeramikWhite.kcsrc @@ -0,0 +1,91 @@ +[Color Scheme] +Name=Keramik White +Name[af]=Keramik Wit +Name[ar]=قرميدي أبيض +Name[az]=Keramik Ağ +Name[be]=Белая кераміка +Name[bn]=কেরামিক সাদা +Name[br]=Keramik gwenn +Name[bs]=Keramik bijela +Name[ca]=Keramik blanc +Name[cs]=Keramika (bílá) +Name[csb]=Keramik Biôłi +Name[cy]=Keramik Gwyn +Name[da]=Keramik hvid +Name[de]=Porzellanweiß +Name[el]=Keramik άσπρο +Name[eo]=Ceramika blanko +Name[es]=Keramik blanco +Name[et]=Valge Keramik +Name[eu]=Keramik zuria +Name[fa]=سفید کرامیک +Name[fi]=Keramik valkoinen +Name[fr]=Keramik blanc +Name[fy]=Keramyk-wit +Name[ga]=Bán Keramik +Name[gl]=Keramic Branco +Name[hi]=केरमिक सफेद +Name[hr]=Keramik bijela +Name[hu]=Keramik (fehér) +Name[is]=Keramik hvítt +Name[it]=Ceramica bianca +Name[km]=Keramik ស +Name[lo]=ເຄຣາມິກ - K +Name[lt]=Keramik baltas +Name[lv]=Balta Keramika +Name[mk]=Керамик бело +Name[mn]=Шаазан цагаан +Name[ms]=Putih Keramik +Name[mt]=Keramik Abjad +Name[nb]=Keramikk, hvit +Name[nds]=Keramikwitt +Name[ne]=केरामिक सेतो +Name[nl]=Keramik-wit +Name[nn]=Keramikk kvit +Name[nso]=Boshweu bja Keramik +Name[pa]=ਕੀਰਾਮਿਕ ਸਫੈਦ +Name[pl]=Keramik Biały +Name[pt]=Keramik Branco +Name[pt_BR]=Keramik Branco +Name[ro]=Keramik alb +Name[rw]=Umweru Keramik +Name[se]=Vilges bálseduoddji +Name[sk]=Keramik Biely +Name[sl]=Keramik bela +Name[sr]=Бела керамика +Name[sr@Latn]=Bela keramika +Name[sv]=Vit Keramik +Name[ta]=கேரமிக் வெள்ளை +Name[te]=కెరామిక్ తెలుపు +Name[tg]=Keramik-и сафед +Name[th]=เครามิกขาว +Name[tr]=Beyaz Keramik +Name[uk]=Білий Keramik +Name[uz]=Oq keramika +Name[uz@cyrillic]=Оқ керамика +Name[vi]=Gốm trắng +Name[wa]=Blanc Keramik +Name[xh]=Keramik Emhlophe +Name[zh_CN]=Keramik 白 +Name[zh_TW]=Keramik 白 +Name[zu]=Okumhlophe kwe-Keramik +activeBackground=151,173,195 +activeBlend=151,173,195 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=238,246,255 +background=233,233,233 +buttonBackground=246,246,246 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=210,210,210 +inactiveBlend=215,215,215 +inactiveForeground=255,255,255 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=255,221,118 +selectForeground=3,3,3 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/Makefile.am b/kcontrol/krdb/kcs/Makefile.am new file mode 100644 index 000000000..8c5200089 --- /dev/null +++ b/kcontrol/krdb/kcs/Makefile.am @@ -0,0 +1,12 @@ + +kdisplay_colorschemes_data_DATA = AtlasGreen.kcsrc BeOS.kcsrc BlueSlate.kcsrc \ + CDE.kcsrc DarkBlue.kcsrc DesertRed.kcsrc DigitalCDE.kcsrc \ + PaleGray.kcsrc Pumpkin.kcsrc SolarisCDE.kcsrc Storm.kcsrc \ + Windows2000.kcsrc System.kcsrc Next.kcsrc PointReyesGreen.kcsrc \ + KDEOne.kcsrc KDETwo.kcsrc MediaPeach.kcsrc Windows95.kcsrc EveX.kcsrc \ + WindowsXP.kcsrc Keramik.kcsrc KeramikEmerald.kcsrc KeramikWhite.kcsrc \ + BlackOnWhite.kcsrc WhiteOnBlack.kcsrc YellowOnBlue.kcsrc Plastik.kcsrc + +kdisplay_colorschemes_datadir = $(kde_datadir)/kdisplay/color-schemes + +EXTRA_DIST = $(kdisplay_colorschemes_data_DATA) diff --git a/kcontrol/krdb/kcs/MediaPeach.kcsrc b/kcontrol/krdb/kcs/MediaPeach.kcsrc new file mode 100644 index 000000000..2b68a18d7 --- /dev/null +++ b/kcontrol/krdb/kcs/MediaPeach.kcsrc @@ -0,0 +1,60 @@ +[Color Scheme] +Name=Media Peach +Name[af]=Media Perske +Name[bn]=মিডিয়া পীচ +Name[bs]=Media breskva +Name[cy]=Eirynen Wlanog Cyfryngau +Name[de]=Mittlere Pfirsichfarbe +Name[eo]=Persiko +Name[es]=Melocotón multimedia +Name[eu]=Multimedia mertxika +Name[fr]=Pêche pastel +Name[he]=אפרסק +Name[hi]=मीडिया पीच +Name[hr]=Medijska breskva +Name[hu]=Barackszínű +Name[it]=Pesca +Name[lo]=ລູກທໍ້ +Name[lt]=Media persiko +Name[lv]=Mēdiju Persiks +Name[ms]=Pic Sederhana +Name[nb]=Mediefersken +Name[nds]=Middelpeersch +Name[ne]=मिडिया पिच +Name[nn]=Mediefersken +Name[pa]=ਮੀਡਿਆ ਪੀਂਚ +Name[pt_BR]=Pêssego +Name[ro]=Piersică +Name[se]=Mediapersihkka +Name[ta]=ஊடக பீச் +Name[te]=మీడియా పీచ్ +Name[th]=ลูกท้อ +Name[tr]=Medya Şeftalisi +Name[uz]=Shaftoli +Name[uz@cyrillic]=Шафтоли +Name[ven]=Beregisi Zwimvumvusi +Name[vi]=Hồng đào +Name[wa]=Petche media +Name[xh]=Peach Esesiphakathini +Name[zh_CN]=Media 桃色 +Name[zh_TW]=Media 桃紅 +Name[zu]=Unozindaba osapetshisi +activeBackground=68,31,156 +activeBlend=11,4,35 +activeForeground=255,255,255 +activeTitleBtnBg=214,205,187 +background=244,221,178 +buttonBackground=244,221,178 +buttonForeground=0,0,0 +contrast=3 +foreground=0,0,0 +inactiveBackground=0,70,70 +inactiveBlend=14,45,27 +inactiveForeground=214,214,214 +inactiveTitleBtnBg=214,205,187 +linkColor=0,0,192 +selectBackground=128,0,0 +selectForeground=255,255,255 +visitedLinkColor=128,0,128 +windowBackground=255,231,186 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/Next.kcsrc b/kcontrol/krdb/kcs/Next.kcsrc new file mode 100644 index 000000000..bc2424ef8 --- /dev/null +++ b/kcontrol/krdb/kcs/Next.kcsrc @@ -0,0 +1,53 @@ +[Color Scheme] +activeBackground=0,0,0 +activeBlend=255,255,255 +activeForeground=255,255,255 +activeTitleBtnBg=0,0,0 +activeTitleBtnBlend=0,0,0 +activeTitleBtnFg=255,255,255 +background=168,168,168 +alternateBackground=233,233,233 +buttonBackground=168,168,168 +buttonForeground=0,0,0 +contrast=10 +foreground=0,0,0 +inactiveBackground=168,168,168 +inactiveBlend=168,168,168 +inactiveForeground=255,255,255 +inactiveTitleBtnBg=168,168,168 +inactiveTitleBtnBlend=168,168,168 +inactiveTitleBtnFg=255,255,255 +Name=Next +Name[af]=Volgende +Name[bn]=নেক্সট +Name[br]=A heul +Name[cy]=Nesaf +Name[eo]=Neksto +Name[es]=NeXT +Name[fa]=بعدی +Name[fy]=Fierder +Name[ga]=Ar Aghaidh +Name[hi]=अगला +Name[km]=បន្ទាប់ +Name[lo]=ລະບົບປະຕິບັດການ Next +Name[lt]=Kitas +Name[ne]=पछिल्लो +Name[nso]=Latelago +Name[pa]=ਅੱਗੇ +Name[rw]=Ibikurikira +Name[ss]=Lokulandzelako +Name[ta]=அடுத்து +Name[te]=నెక్స్ట్ +Name[tg]=Навбатӣ +Name[th]=ระบบปฏิบัติการ Next +Name[tt]=Kiläse +Name[ven]=Phanda +Name[vi]=Tiếp theo +Name[wa]=NeXT +Name[xh]=Elandelayo +Name[zh_TW]=下一個 +Name[zu]=Okulandelayo +selectBackground=0,0,0 +selectForeground=255,255,255 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/PaleGray.kcsrc b/kcontrol/krdb/kcs/PaleGray.kcsrc new file mode 100644 index 000000000..cc4ee8465 --- /dev/null +++ b/kcontrol/krdb/kcs/PaleGray.kcsrc @@ -0,0 +1,90 @@ +# KDE Config File +[Color Scheme] +Name=Pale Gray +Name[af]=Bleek Grys +Name[ar]=رمادي فاتح +Name[az]=Boz Qurd +Name[be]=Адценні шэрага колеру +Name[bn]=ধূসর ছাই +Name[bs]=Blijedo siva +Name[ca]=Gris pàl·lid +Name[cs]=Bledě šedá +Name[csb]=Bladoszari +Name[cy]=Llwyd Golau +Name[da]=Hvidgrå +Name[de]=Fahles Grau +Name[el]=Χλωμό γκρι +Name[en_GB]=Pale Grey +Name[eo]=Pala grizo +Name[es]=Gris pálido +Name[et]=Kahvatuhall +Name[eu]=Gris zurbila +Name[fa]=خاکستری کم‌رنگ +Name[fi]=Vaaleanharmaa +Name[fr]=Gris pâle +Name[fy]=Fealgriis +Name[ga]=Liathghlas +Name[gl]=Gris Claro +Name[he]=אפור בהיר +Name[hi]=फ़ीका धूसर +Name[hr]=Blijedo sivo +Name[hu]=Halványszürke +Name[is]=Fölgrátt +Name[it]=Grigio pallido +Name[ja]=ペールグレー +Name[km]=ប្រផេះ​ស្លេក +Name[lo]=ເທົາອ່ອນ +Name[lt]=Pilkšva +Name[lv]=Gaiši pelēks +Name[mk]=Бледо сиво +Name[mn]=Цайвар саарал +Name[ms]=Kelabu Pucat +Name[mt]=Griż Ċar +Name[nb]=Lysegrå +Name[nds]=Bleek-Gries +Name[ne]=पेल खैरो +Name[nl]=Vaalgrijs +Name[nn]=Lysegrå +Name[pa]=ਪਾਲੀ ਗਰੇ +Name[pl]=Bladoszary +Name[pt]=Cinzento Pálido +Name[pt_BR]=Cinza +Name[ro]=Gri pal +Name[rw]=Ikijuju cyoroshye +Name[se]=Čuvgesránes +Name[sk]=Svetlošedá +Name[sl]=Bleda sivina +Name[sr]=Бледо сива +Name[sr@Latn]=Bledo siva +Name[sv]=Blekgrå +Name[ta]=பழுப்புச் சாயல் +Name[te]=లేత బూడిద +Name[th]=เทาอ่อน +Name[tr]=Açık Gri +Name[tt]=Tonıq Sorı +Name[uk]=Тьмяно-сірий +Name[uz]=Och kul +Name[uz@cyrillic]=Оч кул +Name[ven]=Lutada lwo tshenuluwaho +Name[vi]=Màu xám nhạt +Name[wa]=Clair gris +Name[xh]=Ngwevu Bumbatsha +Name[zh_CN]=灰白 +Name[zh_TW]=灰白 +Name[zu]=Okumpunga ngokukhanyayo +background=#d6d6d6 +buttonBackground=#d6d6d6 +buttonForeground=#000000 +selectBackground=#000000 +foreground=#000000 +activeForeground=#ffffff +inactiveBackground=#a0a0a0 +inactiveBlend=#d6d6d6 +activeBackground=#000000 +activeBlend=#d6d6d6 +contrast=3 +inactiveForeground=#d6d6d6 +windowForeground=#000000 +windowBackground=#ffffff +selectForeground=#ffffff +alternateBackground=#f5f5f5 diff --git a/kcontrol/krdb/kcs/Plastik.kcsrc b/kcontrol/krdb/kcs/Plastik.kcsrc new file mode 100644 index 000000000..bfc365648 --- /dev/null +++ b/kcontrol/krdb/kcs/Plastik.kcsrc @@ -0,0 +1,55 @@ +[Color Scheme] +Name=Plastik +Name[af]=Plastiek +Name[ar]=بلاستيك +Name[be]=Пластык +Name[bn]=প্লাস্টিক +Name[eo]=Plastiko +Name[fa]=پلاستیک +Name[fy]=Plastyk +Name[hi]=प्लास्टिक +Name[hr]=Plastika +Name[is]=Plast +Name[it]=Plastica +Name[ka]=Пластик +Name[kk]=Пластик +Name[km]=ប្ល៉ាស្ទិក +Name[lt]=Plastikinis +Name[lv]=Plastika +Name[mk]=Пластик +Name[nb]=Plast +Name[ne]=प्लास्टिक +Name[nn]=Plast +Name[pa]=ਪਲਾਸਟਿਕ +Name[ro]=Plastic +Name[ru]=Пластик +Name[se]=Plastihkka +Name[sr]=Пластика +Name[sr@Latn]=Plastika +Name[ta]=திட்டம் +Name[te]=ప్లాస్టిక్ +Name[th]=พลาสติก +Name[uk]=Пластик +Name[uz@cyrillic]=Пластик +Name[vi]=Chất dẻo +Name[zh_CN]=塑料 +activeBackground=65,142,220 +activeBlend=107,145,184 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=237,244,249 +background=239,239,239 +buttonBackground=221,223,228 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=157,170,186 +inactiveBlend=157,170,186 +inactiveForeground=221,221,221 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,238 +selectBackground=103,141,178 +selectForeground=255,255,255 +visitedLinkColor=82,24,139 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/PointReyesGreen.kcsrc b/kcontrol/krdb/kcs/PointReyesGreen.kcsrc new file mode 100644 index 000000000..e7c9b9bee --- /dev/null +++ b/kcontrol/krdb/kcs/PointReyesGreen.kcsrc @@ -0,0 +1,75 @@ +[Color Scheme] +activeBackground=65,127,75 +activeBlend=65,127,75 +activeForeground=255,255,255 +activeTitleBtnBg=116,132,115 +alternateBackground=226,234,226 +background=211,197,190 +buttonBackground=171,160,154 +buttonForeground=38,75,44 +contrast=0 +foreground=46,90,53 +inactiveBackground=116,132,115 +inactiveBlend=116,132,115 +inactiveForeground=192,179,173 +inactiveTitleBtnBg=162,184,160 +linkColor=14,153,4 +Name=Point Reyes Green +Name[af]=Punt Strale Groen +Name[az]=Point Reyes Yaşılı +Name[bs]=Point Reyes zelena +Name[ca]=Verd Point Reyes +Name[cs]=Point Reyes zelená +Name[csb]=Zelonosc pùnktu Reyes +Name[cy]=Gwyrdd Point Reyes +Name[de]=Point Reyes-Grün +Name[eo]=Verdaj tonoj +Name[es]=Verde Point Reyes +Name[et]=Point Reyes roheline +Name[eu]=Point Reyes berdea +Name[fa]=سبز نقطه-نقطه +Name[fr]=Vert doux +Name[fy]=Dúngrien +Name[he]=ירוק ים +Name[hi]=प्वाइंट रेस हरा +Name[hr]=Point Reyes zeleno +Name[hu]=Zöldes árnyalat +Name[is]=Point Reyes grænt +Name[it]=Verde Point Reyes +Name[ja]=ポイントレイズグリーン +Name[lo]=ຈຸດຂງວປະກາຍ +Name[lt]=Point Reyes žalia +Name[lv]=Point Reyes Zaļš +Name[mn]=Point Reyes-Ногоон +Name[mt]=Aħdar Point Reyes +Name[nb]=Grønn og rosa +Name[nds]=Point Reyes-Gröön +Name[ne]=बिन्दु रेइज हरियो +Name[nl]=Duingroen +Name[nn]=Grøn og rosa +Name[pa]=ਬਿੰਦੂ ਰੀਆਈਸ ਹਰਾ +Name[pl]=Zieleń punktu Reyes +Name[pt]=Verde Point Reyes +Name[pt_BR]=Verde +Name[ro]=Verde Point Reyes +Name[rw]=Akadomo Reyes Icyatsi +Name[se]=Ruoná ja guvgesrukses +Name[sk]=Point Reyes zelená +Name[sl]=Zelena Point Reyes +Name[sr]=Point Reyes зелена +Name[sr@Latn]=Point Reyes zelena +Name[sv]=Point Reyes-grön +Name[te]=పాయింట్ రెయిస్ పచ్చ +Name[tg]=Сабзи нуқта нуқта +Name[th]=จุดเขียวประปราย +Name[tr]=Point Reyes Yeşili +Name[ven]=Kha Muvhala mudala +Name[vi]=Màu xanh Point Reyes +Name[wa]=Vert Point Reyes +Name[xh]=Point Reyes Green (okwengca) +Name[zh_TW]=Point Reyes 綠 +selectBackground=65,127,75 +selectForeground=255,255,255 +visitedLinkColor=38,75,44 +windowBackground=255,255,255 +windowForeground=83,33,19 diff --git a/kcontrol/krdb/kcs/Pumpkin.kcsrc b/kcontrol/krdb/kcs/Pumpkin.kcsrc new file mode 100644 index 000000000..b27f9f275 --- /dev/null +++ b/kcontrol/krdb/kcs/Pumpkin.kcsrc @@ -0,0 +1,87 @@ +# KDE Config File +[Color Scheme] +foreground=0,0,0 +selectForeground=255,255,255 +activeBlend=255,215,0 +selectBackground=205,133,63 +inactiveBackground=160,160,160 +Name=Pumpkin +Name[af]=Pampoen +Name[ar]=يقطيني +Name[be]=Гарбуз +Name[bn]=পাম্পকিন +Name[ca]=Carabassa +Name[cs]=Dýně +Name[csb]=Bania +Name[cy]=Pwmpen +Name[de]=Kürbis +Name[el]=Κολοκύθα +Name[eo]=Kukurbo +Name[es]=Calabaza +Name[et]=Kõrvits +Name[eu]=Kalabaza +Name[fa]=کدو حلوایی +Name[fi]=Kurpitsa +Name[fr]=Potiron +Name[fy]=klabats +Name[ga]=Puimcín +Name[he]=דלעת +Name[hi]=कुम्हड़ा +Name[hr]=Bundeva +Name[hu]=Házitök +Name[is]=Grasker +Name[it]=Zucca +Name[ja]=かぼちゃ色 +Name[kk]=Асқабақ +Name[km]=ល្ពៅ +Name[lo]=ຫມາກອຶ +Name[lv]=Ķirbis +Name[mk]=Тиквичка +Name[mn]=Хулуу +Name[ms]=Labu +Name[mt]=Qargħa Ħamra +Name[nb]=Gresskar +Name[nds]=Körbs +Name[ne]=पम्पकिन +Name[nl]=Pompoen +Name[nn]=Graskar +Name[nso]=Lephutsi +Name[pa]=ਪੰਪਕਿਨ +Name[pl]=Dynia +Name[pt]=Abóbora +Name[pt_BR]=Abóbora +Name[ro]=Dovlecel +Name[ru]=Тыква +Name[se]=Gurbbet +Name[sk]=Tekvica +Name[sl]=Buča +Name[sr]=Бундева +Name[sr@Latn]=Bundeva +Name[ss]=Litsanga +Name[sv]=Pumpa +Name[ta]=பூசணிக்காய் +Name[te]=గుమ్మడి +Name[tg]=Каду +Name[th]=ฟักทอง +Name[tt]=Qabaq +Name[uk]=Гарбузовий +Name[uz]=Qovoq +Name[uz@cyrillic]=Қовоқ +Name[ven]=Fhuri +Name[vi]=Bí đỏ +Name[wa]=Potiron +Name[xh]=Ithanga +Name[zh_CN]=南瓜黄 +Name[zh_TW]=南瓜黃 +Name[zu]=Ithanga +contrast=3 +background=238,216,174 +buttonBackground=238,216,174 +buttonForeground=0,0,0 +activeBackground=205,133,63 +inactiveBlend=214,214,214 +inactiveForeground=238,238,209 +activeForeground=255,255,255 +windowForeground=0,0,0 +windowBackground=255,255,255 +alternateBackground=255,245,235 diff --git a/kcontrol/krdb/kcs/SolarisCDE.kcsrc b/kcontrol/krdb/kcs/SolarisCDE.kcsrc new file mode 100644 index 000000000..747eeb337 --- /dev/null +++ b/kcontrol/krdb/kcs/SolarisCDE.kcsrc @@ -0,0 +1,38 @@ +[Color Scheme] +Name=Solaris +Name[az]=Solaris CDE +Name[bn]=সোলারিস +Name[eo]=Solariso +Name[fa]=سولاریس +Name[hi]=सोलारिस +Name[kk]=Солярис +Name[lo]=ໂຊລາຣິສ +Name[lt]=Solario CDE +Name[ne]=सोलारिस +Name[ru]=Солярис +Name[ta]=சோலாரிஸ் +Name[te]=సొలారిస్ +Name[tg]=Солярис +Name[th]=โซลาริส +Name[tt]=Qoyaşlı +Name[ven]=Solarisi +Name[xh]=Isikhanyiso esenziwa lilanga +activeBackground=178,77,122 +activeBlend=174,178,195 +activeForeground=255,255,255 +activeTitleBtnBg=174,178,195 +background=174,178,195 +buttonBackground=174,178,195 +buttonForeground=0,0,0 +contrast=3 +foreground=0,0,0 +inactiveBackground=174,178,195 +inactiveBlend=174,178,195 +inactiveForeground=0,0,0 +inactiveTitleBtnBg=174,178,195 +linkColor=0,0,255 +selectBackground=113,139,165 +selectForeground=255,255,255 +visitedLinkColor=192,255,255 +windowBackground=147,151,165 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/Storm.kcsrc b/kcontrol/krdb/kcs/Storm.kcsrc new file mode 100644 index 000000000..cfdec4fa2 --- /dev/null +++ b/kcontrol/krdb/kcs/Storm.kcsrc @@ -0,0 +1,84 @@ +# KDE Config File +[Color Scheme] +foreground=0,0,0 +selectForeground=255,255,255 +activeBlend=139,0,139 +selectBackground=139,0,139 +inactiveBackground=120,120,120 +Name=Storm +Name[ar]=عاصفة +Name[az]=Fırtına +Name[be]=Навальніца +Name[bn]=স্টর্ম +Name[br]=Gwallamzer +Name[ca]=Tempesta +Name[cs]=Bouře +Name[csb]=Grzëmòt +Name[de]=Sturm +Name[el]=Καταιγίδα +Name[eo]=Ŝtormo +Name[es]=Tormenta +Name[eu]=Ekaitza +Name[fa]=طوفان +Name[fi]=Myrsky +Name[fr]=Tempête +Name[fy]=Stoarm +Name[ga]=Stoirm +Name[gl]=Tormenta +Name[he]=סערה +Name[hi]=तूफ़ान +Name[hr]=Oluja +Name[hu]=Vihar +Name[is]=Stormur +Name[it]=Tempesta +Name[ja]=ストーム +Name[kk]=Дауыл +Name[km]=ព្យុះ +Name[lo]=ພາຍຸ +Name[lt]=Audra +Name[lv]=Vētra +Name[mk]=Бура +Name[mn]=Шуурга +Name[ms]=Ribut +Name[mt]=Tempesta +Name[ne]=स्टर्म +Name[nso]=Matlakadibe +Name[pa]=ਤੂਫਾਨੀ +Name[pl]=Burza +Name[pt]=Tempestade +Name[pt_BR]=Tempestade +Name[ro]=Furtună +Name[ru]=Шторм +Name[rw]=Umuhengeri +Name[se]=Riđđu +Name[sk]=Búrka +Name[sl]=Nevihta +Name[sr]=Олуја +Name[sr@Latn]=Oluja +Name[ta]=புயல் +Name[te]=స్టార్మ్ +Name[tg]=Тӯфон +Name[th]=พายุ +Name[tr]=Fırtına +Name[tt]=Dawıl +Name[uk]=Гроза +Name[uz]=Poʻrtana +Name[uz@cyrillic]=Пўртана +Name[ven]=Madumbu +Name[vi]=Bão +Name[wa]=Timpesse +Name[xh]=Isikhukhula +Name[zh_CN]=风暴 +Name[zh_TW]=風暴 +Name[zu]=Ukuduma +contrast=7 +background=192,192,192 +buttonBackground=192,192,192 +buttonForeground=0,0,0 +activeBackground=139,0,139 +inactiveBlend=120,120,120 +inactiveForeground=0,0,0 +activeForeground=255,255,255 +windowForeground=0,0,0 +windowBackground=255,255,255 +alternateBackground=255,240,255 diff --git a/kcontrol/krdb/kcs/System.kcsrc b/kcontrol/krdb/kcs/System.kcsrc new file mode 100644 index 000000000..8e0a8c02d --- /dev/null +++ b/kcontrol/krdb/kcs/System.kcsrc @@ -0,0 +1,99 @@ +[Color Scheme] +activeBackground=192,192,192 +activeBlend=192,192,192 +activeForeground=0,0,0 +activeTitleBtnBg=255,255,255 +activeTitleBtnBlend=128,128,128 +activeTitleBtnFg=54,60,89 +background=211,211,211 +buttonBackground=211,211,211 +buttonForeground=0,0,0 +contrast=2 +foreground=0,0,0 +inactiveBackground=192,192,192 +inactiveBlend=192,192,192 +inactiveForeground=128,128,128 +inactiveTitleBtnBg=255,255,255 +inactiveTitleBtnBlend=128,128,128 +inactiveTitleBtnFg=43,45,62 +Name=System +Name[af]=Stelsel +Name[ar]=النظام +Name[az]=Sistem +Name[be]=Сістэма +Name[bg]=Система +Name[bn]=সিস্টেম +Name[br]=Reizhiad +Name[bs]=Sistem +Name[ca]=Sistema +Name[cs]=Systém +Name[csb]=Systema +Name[cy]=Cysawd +Name[el]=Σύστημα +Name[eo]=Sistemo +Name[es]=Sistema +Name[et]=Süsteem +Name[eu]=Sistema +Name[fa]=سیستم +Name[fi]=Järjestelmä +Name[fo]=Kervi +Name[fr]=Système +Name[fy]=Systeem +Name[ga]=Córas +Name[gl]=Sistema +Name[he]=מערכת +Name[hi]=तंत्र +Name[hr]=Sustav +Name[hu]=Rendszer +Name[id]=Sistem +Name[is]=Kerfi +Name[it]=Sistema +Name[ja]=システム +Name[ka]=სისტემა +Name[kk]=Жүйелік +Name[km]=ប្រព័ន្ធ +Name[ko]=시스템 +Name[lo]=ຈັດການລະບົບ +Name[lt]=Sistema +Name[lv]=Sistēma +Name[mk]=Систем +Name[mn]=Систем +Name[ms]=Sistem +Name[mt]=Sistema +Name[nds]=Systeem +Name[ne]=प्रणाली +Name[nl]=Systeem +Name[oc]=Sistemo +Name[pa]=ਸਿਸਟਮ +Name[pt]=Sistema +Name[pt_BR]=Sistema +Name[ro]=Sistem +Name[ru]=Система +Name[rw]=Sisitemu +Name[se]=Vuogádat +Name[sk]=Systém +Name[sl]=Sistem +Name[sr]=Систем +Name[sr@Latn]=Sistem +Name[ss]=Umshini +Name[ta]=அமைப்பு +Name[te]=వ్యవస్థ +Name[tg]=Система +Name[th]=ระบบ +Name[tr]=Sistem +Name[tt]=Sistem +Name[uk]=Система +Name[uz]=Tizim +Name[uz@cyrillic]=Тизим +Name[ven]=Maitele +Name[vi]=Hệ thống +Name[wa]=Sistinme +Name[xh]=Indlela esestyenziswayo +Name[zh_CN]=系统 +Name[zh_TW]=系統 +Name[zu]=Isistimu +selectBackground=90,36,0 +selectForeground=255,255,255 +windowBackground=255,255,255 +windowForeground=0,0,0 +alternateBackground=255,247,240 diff --git a/kcontrol/krdb/kcs/WhiteOnBlack.kcsrc b/kcontrol/krdb/kcs/WhiteOnBlack.kcsrc new file mode 100644 index 000000000..f62cbae07 --- /dev/null +++ b/kcontrol/krdb/kcs/WhiteOnBlack.kcsrc @@ -0,0 +1,88 @@ +[Color Scheme] +Name=High Contrast White Text +Name[af]=Hoë kontras wit teks +Name[ar]=نص أبيض عالي التباين +Name[be]=Высока кантрастная "белы тэкст" +Name[bn]=হাই কনট্রাস্ট সাদা লেখা +Name[bs]=Visoki kontrast, bijeli tekst +Name[ca]=Text blanc d'alt contrast +Name[cs]=Vysoký kontrast, bílý text +Name[csb]=Kòntrastowi biôłi tekst +Name[da]=Hvid tekst med høj kontrast +Name[de]=Hoher Kontrast, Weiß auf Schwarz +Name[el]=Άσπρο κείμενο υψηλής αντίθεσης +Name[eo]=Alt-kontrasta Blanka Teksto +Name[es]=Texto blanco de alto contraste +Name[et]=Väga kontrastne valge tekst +Name[eu]=Kontraste handiko testu zuria +Name[fa]=متن سفید با سایه روشن بالا +Name[fi]=Suuren värikontrastin valkoinen teksti +Name[fr]=Texte en blanc avec contraste élevé +Name[fy]=Heech kontrast wite tekst +Name[gl]=Texto Branco de Alto Contraste +Name[he]=ניגודיות גבוהה עם טקסט לבן +Name[hr]=Bijeli tekst visokog kontrasta +Name[hu]=Erősen kontrasztos fehér szöveg +Name[is]=Há birtuskila hvítur texti +Name[it]=Testo bianco ad alto contrasto +Name[ja]=ハイコントラストの白いテキスト +Name[ka]=მაღალკონსტრასტული თეთრი ტექტი +Name[kk]=Контрастығы жоғары ақ мәтін +Name[km]=អត្ថបទ​ពណ៌​ស កម្រិត​ពណ៌​ខ្ពស់ +Name[lt]=Didelio kontrasto baltas tekstas +Name[mk]=Бел текст со висок контраст +Name[ms]=Teks Putih Kontras Tinggi +Name[nb]=Høykontrast, hvit tekst +Name[nds]=Hogen Kontrast, witt Text +Name[ne]=उच्च व्यतिरेक सेतो पाठ +Name[nl]=Hoog contrast witte tekst +Name[nn]=Høgkontrast, kvit tekst +Name[pa]=ਜਿਆਦਾ ਗੂੜਾ ਪਾਠ ਸਫੈਦ +Name[pl]=Kontrastowy biały tekst +Name[pt]=Alto Contraste Texto Branco +Name[pt_BR]=Alto Contraste do Texto Branco +Name[ro]=Contrast mare text alb +Name[ru]=Высококонтрастный белый текст +Name[rw]=Umwandiko w'Umweru Inyuranyamigaragarire yo Hejuru +Name[se]=Alla vuostálasvuohta, vilges teaksta +Name[sk]=Vysokokontrastný biely text +Name[sl]=Visoko kontrastno belo besedilo +Name[sr]=Бели текст високог контраста +Name[sr@Latn]=Beli tekst visokog kontrasta +Name[sv]=Vit text med hög kontrast +Name[ta]=அதிக மாறுபட்ட வெள்ளை உரை +Name[th]=ตัวอักษรขาวคอนทราสสูง +Name[tr]=Yüksek Kontrast Beyaz Metin +Name[tt]=Kisken Aq +Name[uk]=Висококонтрастний білий текст +Name[uz]=Yuqori kontrastli oq matn +Name[uz@cyrillic]=Юқори контрастли оқ матн +Name[vi]=Chữ trắng trên nền đen +Name[wa]=Blanc so noer +Name[zh_CN]=高对比度白色文字 +Name[zh_TW]=高對比反白文字 +activeBackground=0,0,90 +activeBlend=0,0,90 +activeForeground=255,255,255 +activeTitleBtnBg=255,255,255 +activeForeground=255,255,255 +alternateBackground=0,0,40 +background=0,0,0 +buttonBackground=0,0,0 +buttonForeground=255,255,255 +contrast=7 +foreground=255,255,255 +frame=0,0,133 +handle=0,0,133 +inactiveBackground=30,30,30 +inactiveBlend=30,30,30 +inactiveForeground=128,128,128 +inactiveFrame=30,30,30 +inactiveHandle=30,30,30 +inactiveTitleBtnBg=170,170,170 +linkColor=255,255,255 +selectBackground=0,0,90 +selectForeground=255,255,255 +visitedLinkColor=255,255,255 +windowBackground=0,0,0 +windowForeground=255,255,255 diff --git a/kcontrol/krdb/kcs/Windows2000.kcsrc b/kcontrol/krdb/kcs/Windows2000.kcsrc new file mode 100644 index 000000000..bccc59369 --- /dev/null +++ b/kcontrol/krdb/kcs/Windows2000.kcsrc @@ -0,0 +1,36 @@ +[Color Scheme] +Name=Redmond 2000 +Name[bn]=রেডমন্ড ২০০০ +Name[eo]=Redmondo 2000 +Name[fa]=ردموند ۲۰۰۰ +Name[hi]=रेडमण्ड 2000 +Name[lo]=ເຣດມອນ 2000 +Name[lv]=Redmonda 2000 +Name[mn]=Улаан сар 2000 +Name[ne]=रेडमोन्ड २००० +Name[ta]=ரெட்மான்ட் 2000 +Name[te]=రెడ్ మాండ్ 2000 +Name[th]=เรดมอนด์ 2000 +Name[uk]=Редмонд 2000 +Name[uz@cyrillic]=Редмонд 2000 +Name[ven]=Redmond gidimbili +activeBackground=0,36,104 +activeBlend=168,204,240 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=240,240,240 +background=212,208,200 +buttonBackground=212,208,200 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=220,220,220 +inactiveBlend=220,220,220 +inactiveForeground=0,0,0 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=0,36,104 +selectForeground=255,255,255 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/Windows95.kcsrc b/kcontrol/krdb/kcs/Windows95.kcsrc new file mode 100644 index 000000000..e31c8906c --- /dev/null +++ b/kcontrol/krdb/kcs/Windows95.kcsrc @@ -0,0 +1,33 @@ +#KDE Config File +[Color Scheme] +Name=Redmond 95 +Name[bn]=রেডমন্ড ৯৫ +Name[eo]=Redmondo 95 +Name[fa]=ردموند ۹۵ +Name[hi]=रेडमण्ड 95 +Name[ko]=레드몬드 +Name[lo]=ເຣດມອນ 95 +Name[lv]=Redmonda 95 +Name[mn]=Улаан сар 95 +Name[ne]=रेडमोन्ड ९५ +Name[ta]=ரெட் மோன்ட் 95 +Name[te]=రెడ్ మాండ్ 95 +Name[th]=เรดมอนด์ 95 +Name[uk]=Редмонд 95 +Name[uz@cyrillic]=Редмонд 95 +Name[ven]=Redmond Futahe thanu +background=#c3c3c3 +buttonBackground=#c3c3c3 +buttonForeground=#000000 +selectBackground=#000080 +foreground=#000000 +activeForeground=#ffffff +activeBlend=#5a0a65 +inactiveBackground=#9c9c9c +activeBackground=#000080 +inactiveBlend=#c3c3c3 +contrast=7 +inactiveForeground=#d6d6d6 +windowForeground=#000000 +windowBackground=#ffffff +selectForeground=#ffffff diff --git a/kcontrol/krdb/kcs/WindowsXP.kcsrc b/kcontrol/krdb/kcs/WindowsXP.kcsrc new file mode 100644 index 000000000..75ec92644 --- /dev/null +++ b/kcontrol/krdb/kcs/WindowsXP.kcsrc @@ -0,0 +1,36 @@ +[Color Scheme] +Name=Redmond XP +Name[bn]=রেডমন্ড এক্স-পি +Name[eo]=Redmondo XP +Name[fa]=ردموند XP +Name[hi]=रेडमण्ड एक्सपी +Name[ko]=레드몬드 +Name[lo]=ເຣດມອນ XP +Name[lv]=Redmonda XP +Name[mn]=Улаан сар XP +Name[ne]=रेडमोन्ड XP +Name[ta]=ரெட்மாண்ட் XP +Name[te]=రెడ్ మాండ్ ఎక్స్ పి +Name[th]=เรดมอนด์ XP +Name[uk]=Редмонд XP +Name[uz@cyrillic]=Редмонд XP +activeBackground=47,103,255 +activeBlend=41,93,180 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=240,240,240 +background=238,238,230 +buttonBackground=238,234,222 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +inactiveBackground=220,220,220 +inactiveBlend=220,220,220 +inactiveForeground=0,0,0 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=74,121,205 +selectForeground=255,255,255 +visitedLinkColor=128,0,128 +windowBackground=255,255,255 +windowForeground=0,0,0 diff --git a/kcontrol/krdb/kcs/YellowOnBlue.kcsrc b/kcontrol/krdb/kcs/YellowOnBlue.kcsrc new file mode 100644 index 000000000..446c2d781 --- /dev/null +++ b/kcontrol/krdb/kcs/YellowOnBlue.kcsrc @@ -0,0 +1,89 @@ +[Color Scheme] +Name=High Contrast Yellow on Blue +Name[af]=Hoë kontras geel op blou +Name[ar]=أصفر على أزرق عالي التباين +Name[be]=Высокакантрастная "Жоўтае па блакітным" +Name[bn]=হাই কনট্রাস্ট নীলের ওপর হলুদ +Name[bs]=Visoki kontrast, žuto na plavom +Name[ca]=Groc sobre blau d'alt contrast +Name[cs]=Vysoký kontrast, žlutá na modré +Name[csb]=Żôłti na mòdrim z wësoczim kòntrastã +Name[da]=Gult på blåt med høj kontrast +Name[de]=Hoher Kontrast, Gelb auf Blau +Name[el]=Κίτρινο σε μπλε υψηλής αντίθεσης +Name[eo]=Alt-kontrasta Flavo sur Bluo +Name[es]=Amarillo sobre azul de alto contraste +Name[et]=Väga kontrastne kollane sinisel +Name[eu]=Kontraste handiko horia urdinaren gainean +Name[fa]=زرد با سایه روشن بالا روی آبی +Name[fi]=Suuren kontrastin keltainen teksti sinisellä pohjalla +Name[fr]=Jaune sur bleu avec contraste élevé +Name[fy]=Heech kontrast giel op blau +Name[gl]=Amarelo sobre Azul con Alto Contraste +Name[he]=ניגודיות גבוהה צהוב על גבי כחול +Name[hr]=Žuto na plavome visokog kontrasta +Name[hu]=Erősen kontrasztos sárga, kék alapon +Name[is]=Há birtuskila gult á bláu +Name[it]=Testo ad alto contrasto giallo su blu +Name[ja]=青地にハイコントラストの黄色 +Name[ka]=მაღალკონსტრასტული ყვითელი ლურჯ ფონზე +Name[kk]=Контрастығы жоғары көктегі сары +Name[km]=លឿង​លើខៀវ កម្រិត​ពណ៌​ខ្ពស់ +Name[lt]=Didelio kontrasto geltona ant mėlyno +Name[mk]=Жолто на сино со висок контраст +Name[ms]=Kuning Atas Biru Kontras Tinggi +Name[nb]=Høykontrast gult på blått +Name[nds]=Hogen Kontrast, Geel op Blaag +Name[ne]=निलोमा उच्च व्यतिरेक पहेँलो +Name[nl]=Hoog contrast geel op blauw +Name[nn]=Høgkontrast gult på blått +Name[pa]=ਨੀਲੇ 'ਤੇ ਗੂਡ਼ਾ ਪੀਲਾ +Name[pl]=Żółty na niebieskim z wysokim kontrastem +Name[pt]=Alto Contraste Amarelo em Azul +Name[pt_BR]=Alto Contraste do Texto Amarelo ou Azul +Name[ro]=Contrast mare galben pe albastru +Name[ru]=Высококонтрастный жёлтый на синем +Name[rw]=Umwandiko w'Umuhondo Inyuranyamigaragarire yo Hejuru +Name[se]=Alla vuostálašvuohta, fiskat alida alde +Name[sk]=Vysokokontrastná žltá na modrej +Name[sl]=Visoko kontrastna rumena na modrem +Name[sr]=Жута на плавој високог контраста +Name[sr@Latn]=Žuta na plavoj visokog kontrasta +Name[sv]=Gul på blå med hög kontrast +Name[ta]=நீலத்தின் மீது மாறுபட்ட மஞ்சள் +Name[tg]=Баландсифати зард дар боли кабуд +Name[th]=เหลืองบนพื้นน้ำเงิน +Name[tr]=Yüksek Kontrast Mavi Üzeri Sarı +Name[tt]=Zäñgär östendä Kisken Sarı +Name[uk]=Висококонтрастний чорний жовтий на синьому +Name[uz]=Yuqori kontrastli sariq koʻkda +Name[uz@cyrillic]=Юқори контрастли сариқ кўкда +Name[vi]=Chữ vàng trên nền xanh +Name[wa]=Djaene so bleu +Name[zh_CN]=高对比蓝底黄字 +Name[zh_TW]=高對比藍底黃字 +activeBackground=0,0,180 +activeBlend=0,0,180 +activeForeground=255,255,0 +activeTitleBtnBg=255,255,0 +activeForeground=255,255,0 +alternateBackground=0,0,215 +background=0,0,255 +buttonBackground=0,0,255 +buttonForeground=255,255,0 +contrast=7 +foreground=255,255,0 +frame=0,0,122 +handle=0,0,122 +inactiveBackground=30,30,225 +inactiveBlend=30,30,225 +inactiveForeground=128,128,128 +inactiveFrame=30,30,225 +inactiveHandle=30,30,225 +inactiveTitleBtnBg=170,170,85 +linkColor=255,255,0 +selectBackground=0,0,180 +selectForeground=255,255,0 +visitedLinkColor=255,255,0 +windowBackground=0,0,255 +windowForeground=255,255,0 diff --git a/kcontrol/krdb/krdb.cpp b/kcontrol/krdb/krdb.cpp new file mode 100644 index 000000000..690dbce9a --- /dev/null +++ b/kcontrol/krdb/krdb.cpp @@ -0,0 +1,612 @@ +/**************************************************************************** +** +** +** KRDB - puts current KDE color scheme into preprocessor statements +** cats specially written application default files and uses xrdb -merge to +** write to RESOURCE_MANAGER. Thus it gives a simple way to make non-KDE +** applications fit in with the desktop +** +** Copyright (C) 1998 by Mark Donohoe +** Copyright (C) 1999 by Dirk A. Mueller (reworked for KDE 2.0) +** Copyright (C) 2001 by Matthias Ettrich (add support for GTK applications ) +** Copyright (C) 2001 by Waldo Bastian +** Copyright (C) 2002 by Karol Szwed +** This application is freely distributable under the GNU Public License. +** +*****************************************************************************/ + +#include +#include +#include +#include +#include + +#undef Unsorted +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "krdb.h" + +#include + +inline const char * gtkEnvVar(int version) +{ + return 2==version ? "GTK2_RC_FILES" : "GTK_RC_FILES"; +} + +inline const char * sysGtkrc(int version) +{ + if(2==version) + { + if(access("/etc/opt/gnome/gtk-2.0", F_OK) == 0) + return "/etc/opt/gnome/gtk-2.0/gtkrc"; + else + return "/etc/gtk-2.0/gtkrc"; + } + else + { + if(access("/etc/opt/gnome/gtk", F_OK) == 0) + return "/etc/opt/gnome/gtk/gtkrc"; + else + return "/etc/gtk/gtkrc"; + } +} + +inline const char * userGtkrc(int version) +{ + return 2==version ? "/.gtkrc-2.0" : "/.gtkrc"; +} + +// ----------------------------------------------------------------------------- +static void applyGtkStyles(bool active, int version) +{ + QString gtkkde = locateLocal("config", 2==version?"gtkrc-2.0":"gtkrc"); + QCString gtkrc = getenv(gtkEnvVar(version)); + QStringList list = QStringList::split(':', QFile::decodeName(gtkrc)); + if (list.count() == 0) + { + list.append(QString::fromLatin1(sysGtkrc(version))); + list.append(QDir::homeDirPath()+userGtkrc(version)); + } + list.remove(gtkkde); + list.append(gtkkde); + if (!active) + ::unlink(QFile::encodeName(gtkkde)); + + // Pass env. var to kdeinit. + QCString name = gtkEnvVar(version); + QCString value = QFile::encodeName(list.join(":")); + QByteArray params; + QDataStream stream(params, IO_WriteOnly); + stream << name << value; + kapp->dcopClient()->send("klauncher", "klauncher", "setLaunchEnv(QCString,QCString)", params); +} + +// ----------------------------------------------------------------------------- + +static void applyQtColors( KConfig& kglobals, QSettings& settings, QPalette& newPal ) +{ + QStringList actcg, inactcg, discg; + + /* export kde color settings */ + int i; + for (i = 0; i < QColorGroup::NColorRoles; i++) + actcg << newPal.color(QPalette::Active, + (QColorGroup::ColorRole) i).name(); + for (i = 0; i < QColorGroup::NColorRoles; i++) + inactcg << newPal.color(QPalette::Inactive, + (QColorGroup::ColorRole) i).name(); + for (i = 0; i < QColorGroup::NColorRoles; i++) + discg << newPal.color(QPalette::Disabled, + (QColorGroup::ColorRole) i).name(); + + while (!settings.writeEntry("/qt/Palette/active", actcg)) ; + settings.writeEntry("/qt/Palette/inactive", inactcg); + settings.writeEntry("/qt/Palette/disabled", discg); + + // export kwin's colors to qtrc for kstyle to use + kglobals.setGroup("WM"); + + // active colors + QColor clr = newPal.active().background(); + clr = kglobals.readColorEntry("activeBackground", &clr); + settings.writeEntry("/qt/KWinPalette/activeBackground", clr.name()); + if (QPixmap::defaultDepth() > 8) + clr = clr.dark(110); + clr = kglobals.readColorEntry("activeBlend", &clr); + settings.writeEntry("/qt/KWinPalette/activeBlend", clr.name()); + clr = newPal.active().highlightedText(); + clr = kglobals.readColorEntry("activeForeground", &clr); + settings.writeEntry("/qt/KWinPalette/activeForeground", clr.name()); + clr = newPal.active().background(); + clr = kglobals.readColorEntry("frame", &clr); + settings.writeEntry("/qt/KWinPalette/frame", clr.name()); + clr = kglobals.readColorEntry("activeTitleBtnBg", &clr); + settings.writeEntry("/qt/KWinPalette/activeTitleBtnBg", clr.name()); + + // inactive colors + clr = newPal.inactive().background(); + clr = kglobals.readColorEntry("inactiveBackground", &clr); + settings.writeEntry("/qt/KWinPalette/inactiveBackground", clr.name()); + if (QPixmap::defaultDepth() > 8) + clr = clr.dark(110); + clr = kglobals.readColorEntry("inactiveBlend", &clr); + settings.writeEntry("/qt/KWinPalette/inactiveBlend", clr.name()); + clr = newPal.inactive().background().dark(); + clr = kglobals.readColorEntry("inactiveForeground", &clr); + settings.writeEntry("/qt/KWinPalette/inactiveForeground", clr.name()); + clr = newPal.inactive().background(); + clr = kglobals.readColorEntry("inactiveFrame", &clr); + settings.writeEntry("/qt/KWinPalette/inactiveFrame", clr.name()); + clr = kglobals.readColorEntry("inactiveTitleBtnBg", &clr); + settings.writeEntry("/qt/KWinPalette/inactiveTitleBtnBg", clr.name()); + + kglobals.setGroup("KDE"); + settings.writeEntry("/qt/KDE/contrast", kglobals.readNumEntry("contrast", 7)); +} + +// ----------------------------------------------------------------------------- + +static void applyQtSettings( KConfig& kglobals, QSettings& settings ) +{ + /* export kde's plugin library path to qtrc */ + + QMap pathDb; + // OK, this isn't fun at all. + // KApp adds paths ending with /, QApp those without slash, and if + // one gives it something that is other way around, it will complain and scare + // users. So we need to know whether a path being added is from KApp, and in this case + // end it with.. So keep a QMap to bool, specifying whether the path is KDE-specified.. + + QString qversion = qVersion(); + if ( qversion.contains( '.' ) > 1 ) + qversion.truncate( qversion.findRev( '.' ) ); + if ( qversion.contains( '-' ) ) + qversion.truncate( qversion.findRev( '-' ) ); + + QStringList kdeAdded = + settings.readListEntry("/qt/KDE/kdeAddedLibraryPaths"); + QString libPathKey = + QString("/qt/%1/libraryPath").arg( qversion ); + + //Read qt library path.. + QStringList plugins = settings.readListEntry(libPathKey, ':'); + for (QStringList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it) + { + QString path = *it; + if (path.endsWith("/")) + path.truncate(path.length()-1); + + pathDb[path]=false; + } + + //Get rid of old KDE-added ones... + for (QStringList::ConstIterator it = kdeAdded.begin(); it != kdeAdded.end(); ++it) + { + //Normalize.. + QString path = *it; + if (path.endsWith("/")) + path.truncate(path.length()-1); + + //Remove.. + pathDb.remove(path); + } + + kdeAdded.clear(); + + //Merge in KDE ones.. + plugins = KGlobal::dirs()->resourceDirs( "qtplugins" ); + + for (QStringList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it) + { + QString path = *it; + if (path.endsWith("/")) + path.truncate(path.length()-1); + + pathDb[path]=true; + + if(path.contains("/lib64/")) + path.replace("/lib64/","/lib/"); + pathDb[path]=true; + } + + QStringList paths; + for (QMap ::ConstIterator it = pathDb.begin(); + it != pathDb.end(); ++it) + { + QString path = it.key(); + bool fromKDE = it.data(); + + char new_path[PATH_MAX+1]; + if (realpath(QFile::encodeName(path), new_path)) + path = QFile::decodeName(new_path); + + if (fromKDE) + { + if (!path.endsWith("/")) + path += "/"; + kdeAdded.push_back(path); //Add for the new list -- do it here to have it in the right form.. + } + + paths.append(path); + } + + //Write the list out.. + settings.writeEntry("/qt/KDE/kdeAddedLibraryPaths", kdeAdded); + settings.writeEntry(libPathKey, paths, ':'); + + /* export widget style */ + kglobals.setGroup("General"); + QString style = kglobals.readEntry("widgetStyle", KStyle::defaultStyle() ); + if (!style.isEmpty()) + settings.writeEntry("/qt/style", style); + + /* export font settings */ + settings.writeEntry("/qt/font", KGlobalSettings::generalFont().toString()); + + /* ##### looks like kcmfonts skips this, so we don't do this here */ +/*bool usexft = kglobals.readBoolEntry("AntiAliasing", false); + kconfig.setGroup("General"); + settings.writeEntry("/qt/enableXft", usexft); + settings.writeEntry("/qt/useXft", usexft); */ + + /* export effects settings */ + kglobals.setGroup("KDE"); + bool effectsEnabled = kglobals.readBoolEntry("EffectsEnabled", false); + bool fadeMenus = kglobals.readBoolEntry("EffectFadeMenu", false); + bool fadeTooltips = kglobals.readBoolEntry("EffectFadeTooltip", false); + bool animateCombobox = kglobals.readBoolEntry("EffectAnimateCombo", false); + + QStringList guieffects; + if (effectsEnabled) { + guieffects << QString("general"); + if (fadeMenus) + guieffects << QString("fademenu"); + if (animateCombobox) + guieffects << QString("animatecombo"); + if (fadeTooltips) + guieffects << QString("fadetooltip"); + } + else + guieffects << QString("none"); + + settings.writeEntry("/qt/GUIEffects", guieffects); +} + +// ----------------------------------------------------------------------------- + +static void addColorDef(QString& s, const char* n, const QColor& col) +{ + QString tmp; + + tmp.sprintf("#define %s #%02x%02x%02x\n", + n, col.red(), col.green(), col.blue()); + + s += tmp; +} + + +// ----------------------------------------------------------------------------- + +static void copyFile(QFile& tmp, QString const& filename, bool ) +{ + QFile f( filename ); + if ( f.open(IO_ReadOnly) ) { + QCString buf( 8192 ); + while ( !f.atEnd() ) { + int read = f.readBlock( buf.data(), buf.size() ); + if ( read > 0 ) + tmp.writeBlock( buf.data(), read ); + } + } +} + + +// ----------------------------------------------------------------------------- + +static QString item( int i ) { + return QString::number( i / 255.0, 'f', 3 ); +} + +static QString color( const QColor& col ) +{ + return QString( "{ %1, %2, %3 }" ).arg( item( col.red() ) ).arg( item( col.green() ) ).arg( item( col.blue() ) ); +} + +static void createGtkrc( bool exportColors, const QColorGroup& cg, int version ) +{ + // lukas: why does it create in ~/.kde/share/config ??? + // pfeiffer: so that we don't overwrite the user's gtkrc. + // it is found via the GTK_RC_FILES environment variable. + KSaveFile saveFile( locateLocal( "config", 2==version?"gtkrc-2.0":"gtkrc" ) ); + if ( saveFile.status() != 0 || saveFile.textStream() == 0L ) + return; + + QTextStream& t = *saveFile.textStream(); + t.setEncoding( QTextStream::Locale ); + + t << i18n( + "# created by KDE, %1\n" + "#\n" + "# If you do not want KDE to override your GTK settings, select\n" + "# Appearance & Themes -> Colors in the Control Center and disable the checkbox\n" + "# \"Apply colors to non-KDE applications\"\n" + "#\n" + "#\n").arg(QDateTime::currentDateTime().toString()); + + t << "style \"default\"" << endl; + t << "{" << endl; + if (exportColors) + { + t << " bg[NORMAL] = " << color( cg.background() ) << endl; + t << " bg[SELECTED] = " << color( cg.highlight() ) << endl; + t << " bg[INSENSITIVE] = " << color( cg.background() ) << endl; + t << " bg[ACTIVE] = " << color( cg.mid() ) << endl; + t << " bg[PRELIGHT] = " << color( cg.background() ) << endl; + t << endl; + t << " base[NORMAL] = " << color( cg.base() ) << endl; + t << " base[SELECTED] = " << color( cg.highlight() ) << endl; + t << " base[INSENSITIVE] = " << color( cg.background() ) << endl; + t << " base[ACTIVE] = " << color( cg.highlight() ) << endl; + t << " base[PRELIGHT] = " << color( cg.highlight() ) << endl; + t << endl; + t << " text[NORMAL] = " << color( cg.text() ) << endl; + t << " text[SELECTED] = " << color( cg.highlightedText() ) << endl; + t << " text[INSENSITIVE] = " << color( cg.mid() ) << endl; + t << " text[ACTIVE] = " << color( cg.highlightedText() ) << endl; + t << " text[PRELIGHT] = " << color( cg.highlightedText() ) << endl; + t << endl; + t << " fg[NORMAL] = " << color( cg.foreground() ) << endl; + t << " fg[SELECTED] = " << color( cg.highlightedText() ) << endl; + t << " fg[INSENSITIVE] = " << color( cg.mid() ) << endl; + t << " fg[ACTIVE] = " << color( cg.foreground() ) << endl; + t << " fg[PRELIGHT] = " << color( cg.foreground() ) << endl; + } + + t << "}" << endl; + t << endl; + t << "class \"*\" style \"default\"" << endl; + t << endl; + if ( 2==version ) { // we should maybe check for MacOS settings here + t << "gtk-alternative-button-order = 1" << endl; + t << endl; + } + + if (exportColors) + { + // tooltips don't have the standard background color + t << "style \"ToolTip\"" << endl; + t << "{" << endl; + QColorGroup group = QToolTip::palette().active(); + t << " bg[NORMAL] = " << color( group.background() ) << endl; + t << " base[NORMAL] = " << color( group.base() ) << endl; + t << " text[NORMAL] = " << color( group.text() ) << endl; + t << " fg[NORMAL] = " << color( group.foreground() ) << endl; + t << "}" << endl; + t << endl; + t << "widget \"gtk-tooltip\" style \"ToolTip\"" << endl; + t << "widget \"gtk-tooltips\" style \"ToolTip\"" << endl; + t << endl; + + + // highlight the current (mouse-hovered) menu-item + // not every button, checkbox, etc. + t << "style \"MenuItem\"" << endl; + t << "{" << endl; + t << " bg[PRELIGHT] = " << color( cg.highlight() ) << endl; + t << " fg[PRELIGHT] = " << color( cg.highlightedText() ) << endl; + t << "}" << endl; + t << endl; + t << "class \"*MenuItem\" style \"MenuItem\"" << endl; + t << endl; + } +} + +// ----------------------------------------------------------------------------- + +void runRdb( uint flags ) +{ + // Obtain the application palette that is about to be set. + QPalette newPal = KApplication::createApplicationPalette(); + bool exportColors = flags & KRdbExportColors; + bool exportQtColors = flags & KRdbExportQtColors; + bool exportQtSettings = flags & KRdbExportQtSettings; + bool exportXftSettings = flags & KRdbExportXftSettings; + + KConfig kglobals("kdeglobals", true, false); + kglobals.setGroup("KDE"); + + KTempFile tmpFile; + + if (tmpFile.status() != 0) + { + kdDebug() << "Couldn't open temp file" << endl; + exit(0); + } + + QFile &tmp = *(tmpFile.file()); + + // Export colors to non-(KDE/Qt) apps (e.g. Motif, GTK+ apps) + if (exportColors) + { + KGlobal::dirs()->addResourceType("appdefaults", KStandardDirs::kde_default("data") + "kdisplay/app-defaults/"); + QColorGroup cg = newPal.active(); + KGlobal::locale()->insertCatalogue("krdb"); + createGtkrc( true, cg, 1 ); + createGtkrc( true, cg, 2 ); + + QString preproc; + QColor backCol = cg.background(); + addColorDef(preproc, "FOREGROUND" , cg.foreground()); + addColorDef(preproc, "BACKGROUND" , backCol); + addColorDef(preproc, "HIGHLIGHT" , backCol.light(100+(2*KGlobalSettings::contrast()+4)*16/1)); + addColorDef(preproc, "LOWLIGHT" , backCol.dark(100+(2*KGlobalSettings::contrast()+4)*10)); + addColorDef(preproc, "SELECT_BACKGROUND" , cg.highlight()); + addColorDef(preproc, "SELECT_FOREGROUND" , cg.highlightedText()); + addColorDef(preproc, "WINDOW_BACKGROUND" , cg.base()); + addColorDef(preproc, "WINDOW_FOREGROUND" , cg.foreground()); + addColorDef(preproc, "INACTIVE_BACKGROUND", KGlobalSettings::inactiveTitleColor()); + addColorDef(preproc, "INACTIVE_FOREGROUND", KGlobalSettings::inactiveTitleColor()); + addColorDef(preproc, "ACTIVE_BACKGROUND" , KGlobalSettings::activeTitleColor()); + addColorDef(preproc, "ACTIVE_FOREGROUND" , KGlobalSettings::activeTitleColor()); + //--------------------------------------------------------------- + + tmp.writeBlock( preproc.latin1(), preproc.length() ); + + QStringList list; + + QStringList adPaths = KGlobal::dirs()->findDirs("appdefaults", ""); + for (QStringList::ConstIterator it = adPaths.begin(); it != adPaths.end(); ++it) { + QDir dSys( *it ); + + if ( dSys.exists() ) { + dSys.setFilter( QDir::Files ); + dSys.setSorting( QDir::Name ); + dSys.setNameFilter("*.ad"); + list += dSys.entryList(); + } + } + + for (QStringList::ConstIterator it = list.begin(); it != list.end(); it++) + copyFile(tmp, locate("appdefaults", *it ), true); + } + + // Merge ~/.Xresources or fallback to ~/.Xdefaults + QString homeDir = QDir::homeDirPath(); + QString xResources = homeDir + "/.Xresources"; + + // very primitive support for ~/.Xresources by appending it + if ( QFile::exists( xResources ) ) + copyFile(tmp, xResources, true); + else + copyFile(tmp, homeDir + "/.Xdefaults", true); + + // Export the Xcursor theme & size settings + KConfig mousecfg( "kcminputrc" ); + mousecfg.setGroup( "Mouse" ); + QString theme = mousecfg.readEntry("cursorTheme", QString()); + QString size = mousecfg.readEntry("cursorSize", QString()); + QString contents; + + if (!theme.isNull()) + contents = "Xcursor.theme: " + theme + '\n'; + + if (!size.isNull()) + contents += "Xcursor.size: " + size + '\n'; + + if (exportXftSettings) + { + kglobals.setGroup("General"); + + if (kglobals.hasKey("XftAntialias")) + { + contents += "Xft.antialias: "; + if(kglobals.readBoolEntry("XftAntialias", true)) + contents += "1\n"; + else + contents += "0\n"; + } + + if (kglobals.hasKey("XftHintStyle")) + { + QString hintStyle = kglobals.readEntry("XftHintStyle", "hintmedium"); + contents += "Xft.hinting: "; + if(hintStyle.isEmpty()) + contents += "-1\n"; + else + { + if(hintStyle!="hintnone") + contents += "1\n"; + else + contents += "0\n"; + contents += "Xft.hintstyle: " + hintStyle + '\n'; + } + } + + if (kglobals.hasKey("XftSubPixel")) + { + QString subPixel = kglobals.readEntry("XftSubPixel"); + if(!subPixel.isEmpty()) + contents += "Xft.rgba: " + subPixel + '\n'; + } + + KConfig cfgfonts("kcmfonts", true); + cfgfonts.setGroup("General"); + if( cfgfonts.readNumEntry( "forceFontDPI", 0 ) != 0 ) + contents += "Xft.dpi: " + cfgfonts.readEntry( "forceFontDPI" ) + '\n'; + } + + if (contents.length() > 0) + tmp.writeBlock( contents.latin1(), contents.length() ); + + tmpFile.close(); + + KProcess proc; +#ifndef NDEBUG + proc << "xrdb" << "-merge" << tmpFile.name(); +#else + proc << "xrdb" << "-quiet" << "-merge" << tmpFile.name(); +#endif + proc.start( KProcess::Block, KProcess::Stdin ); + + tmpFile.unlink(); + + applyGtkStyles(exportColors, 1); + applyGtkStyles(exportColors, 2); + + /* Qt exports */ + if ( exportQtColors || exportQtSettings ) + { + QSettings* settings = new QSettings; + + if ( exportQtColors ) + applyQtColors( kglobals, *settings, newPal ); // For kcmcolors + + if ( exportQtSettings ) + applyQtSettings( kglobals, *settings ); // For kcmstyle + + delete settings; + QApplication::flushX(); + + // We let KIPC take care of ourselves, as we are in a KDE app with + // QApp::setDesktopSettingsAware(false); + // Instead of calling QApp::x11_apply_settings() directly, we instead + // modify the timestamp which propagates the settings changes onto + // Qt-only apps without adversely affecting ourselves. + + // Cheat and use the current timestamp, since we just saved to qtrc. + QDateTime settingsstamp = QDateTime::currentDateTime(); + + static Atom qt_settings_timestamp = 0; + if (!qt_settings_timestamp) { + QString atomname("_QT_SETTINGS_TIMESTAMP_"); + atomname += XDisplayName( 0 ); // Use the $DISPLAY envvar. + qt_settings_timestamp = XInternAtom( qt_xdisplay(), atomname.latin1(), False); + } + + QBuffer stamp; + QDataStream s(stamp.buffer(), IO_WriteOnly); + s << settingsstamp; + XChangeProperty( qt_xdisplay(), qt_xrootwin(), qt_settings_timestamp, + qt_settings_timestamp, 8, PropModeReplace, + (unsigned char*) stamp.buffer().data(), + stamp.buffer().size() ); + QApplication::flushX(); + } +} + diff --git a/kcontrol/krdb/krdb.h b/kcontrol/krdb/krdb.h new file mode 100644 index 000000000..a1780ce99 --- /dev/null +++ b/kcontrol/krdb/krdb.h @@ -0,0 +1,33 @@ +/* + This file is part of the KDE base distribution + Copyright (c) 2001 Waldo Bastian + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + 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 _KRDB_H_ +#define _KRDB_H_ + +enum KRdbAction +{ + KRdbExportColors = 0x0001, // Export colors to non-(KDE/Qt) apps + KRdbExportQtColors = 0x0002, // Export KDE's colors to qtrc + KRdbExportQtSettings = 0x0004, // Export all possible qtrc settings, excluding colors + KRdbExportXftSettings = 0x0008 // Export KDE's Xft (anti-alias) settings +}; + +void runRdb( uint flags ); + +#endif diff --git a/kcontrol/krdb/pics/Makefile.am b/kcontrol/krdb/pics/Makefile.am new file mode 100644 index 000000000..f8316f0fd --- /dev/null +++ b/kcontrol/krdb/pics/Makefile.am @@ -0,0 +1,6 @@ + +pics_DATA = logo.png mini-world.png +picsdir = $(kde_datadir)/kcontrol/pics + +EXTRA_DIST = $(pics_DATA) + diff --git a/kcontrol/krdb/pics/lo-energy.png b/kcontrol/krdb/pics/lo-energy.png new file mode 100644 index 000000000..c30be6021 Binary files /dev/null and b/kcontrol/krdb/pics/lo-energy.png differ diff --git a/kcontrol/krdb/pics/logo.png b/kcontrol/krdb/pics/logo.png new file mode 100644 index 000000000..126a0032a Binary files /dev/null and b/kcontrol/krdb/pics/logo.png differ diff --git a/kcontrol/krdb/pics/mini-world.png b/kcontrol/krdb/pics/mini-world.png new file mode 100644 index 000000000..eae412a41 Binary files /dev/null and b/kcontrol/krdb/pics/mini-world.png differ diff --git a/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png new file mode 100644 index 000000000..89eacd8c1 Binary files /dev/null and b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.preview.png differ diff --git a/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.xml b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.xml new file mode 100644 index 000000000..1c5b0a50b --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastDark-big/HighContrastDark-big.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/HighContrastDark-big/Makefile.am b/kcontrol/krdb/themes/HighContrastDark-big/Makefile.am new file mode 100644 index 000000000..736f811a6 --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastDark-big/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = HighContrastDark-big.preview.png HighContrastDark-big.xml + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/HighContrastDark-big + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png new file mode 100644 index 000000000..0e58ca152 Binary files /dev/null and b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.preview.png differ diff --git a/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.xml b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.xml new file mode 100644 index 000000000..0dde3eb7b --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastDark/HighContrastDark.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/HighContrastDark/Makefile.am b/kcontrol/krdb/themes/HighContrastDark/Makefile.am new file mode 100644 index 000000000..8a428795d --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastDark/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = HighContrastDark.preview.png HighContrastDark.xml + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/HighContrastDark + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png new file mode 100644 index 000000000..fe1d62a26 Binary files /dev/null and b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.preview.png differ diff --git a/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.xml b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.xml new file mode 100644 index 000000000..6f9b75099 --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastLight-big/HighContrastLight-big.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/HighContrastLight-big/Makefile.am b/kcontrol/krdb/themes/HighContrastLight-big/Makefile.am new file mode 100644 index 000000000..0027c65e5 --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastLight-big/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = HighContrastLight-big.preview.png HighContrastLight-big.xml + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/HighContrastLight-big + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png new file mode 100644 index 000000000..4d0cae329 Binary files /dev/null and b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.preview.png differ diff --git a/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.xml b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.xml new file mode 100644 index 000000000..01b3001d9 --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastLight/HighContrastLight.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/HighContrastLight/Makefile.am b/kcontrol/krdb/themes/HighContrastLight/Makefile.am new file mode 100644 index 000000000..9d752d530 --- /dev/null +++ b/kcontrol/krdb/themes/HighContrastLight/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = HighContrastLight.preview.png HighContrastLight.xml + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/HighContrastLight + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png new file mode 100644 index 000000000..40b294fcb Binary files /dev/null and b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.preview.png differ diff --git a/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.xml b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.xml new file mode 100644 index 000000000..78d258374 --- /dev/null +++ b/kcontrol/krdb/themes/KDE_Classic/KDE_Classic.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/KDE_Classic/Makefile.am b/kcontrol/krdb/themes/KDE_Classic/Makefile.am new file mode 100644 index 000000000..66e8ac20a --- /dev/null +++ b/kcontrol/krdb/themes/KDE_Classic/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = KDE_Classic.xml KDE_Classic.preview.png + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/KDE_Classic + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/Keramik/Keramik.preview.png b/kcontrol/krdb/themes/Keramik/Keramik.preview.png new file mode 100644 index 000000000..0f34a3c4e Binary files /dev/null and b/kcontrol/krdb/themes/Keramik/Keramik.preview.png differ diff --git a/kcontrol/krdb/themes/Keramik/Keramik.xml b/kcontrol/krdb/themes/Keramik/Keramik.xml new file mode 100644 index 000000000..cd50d7b56 --- /dev/null +++ b/kcontrol/krdb/themes/Keramik/Keramik.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/Keramik/Makefile.am b/kcontrol/krdb/themes/Keramik/Makefile.am new file mode 100644 index 000000000..d7ab00fa0 --- /dev/null +++ b/kcontrol/krdb/themes/Keramik/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = Keramik.xml Keramik.preview.png + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/Keramik + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/Makefile.am b/kcontrol/krdb/themes/Makefile.am new file mode 100644 index 000000000..7723ea9af --- /dev/null +++ b/kcontrol/krdb/themes/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = HighContrastDark HighContrastDark-big \ + HighContrastLight HighContrastLight-big \ + YellowOnBlue YellowOnBlue-big \ + KDE_Classic Keramik Plastik Platinum Sunshine Redmond \ No newline at end of file diff --git a/kcontrol/krdb/themes/Plastik/Makefile.am b/kcontrol/krdb/themes/Plastik/Makefile.am new file mode 100644 index 000000000..6cb02d183 --- /dev/null +++ b/kcontrol/krdb/themes/Plastik/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = Plastik.xml Plastik.preview.png + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/Plastik + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/Plastik/Plastik.preview.png b/kcontrol/krdb/themes/Plastik/Plastik.preview.png new file mode 100644 index 000000000..6315c046e Binary files /dev/null and b/kcontrol/krdb/themes/Plastik/Plastik.preview.png differ diff --git a/kcontrol/krdb/themes/Plastik/Plastik.xml b/kcontrol/krdb/themes/Plastik/Plastik.xml new file mode 100644 index 000000000..4e317ed59 --- /dev/null +++ b/kcontrol/krdb/themes/Plastik/Plastik.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/Platinum/Makefile.am b/kcontrol/krdb/themes/Platinum/Makefile.am new file mode 100644 index 000000000..dbb6bdddf --- /dev/null +++ b/kcontrol/krdb/themes/Platinum/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = Platinum.xml Platinum.preview.png + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/Platinum + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/Platinum/Platinum.preview.png b/kcontrol/krdb/themes/Platinum/Platinum.preview.png new file mode 100644 index 000000000..bec6cd2d1 Binary files /dev/null and b/kcontrol/krdb/themes/Platinum/Platinum.preview.png differ diff --git a/kcontrol/krdb/themes/Platinum/Platinum.xml b/kcontrol/krdb/themes/Platinum/Platinum.xml new file mode 100644 index 000000000..2fc50ba36 --- /dev/null +++ b/kcontrol/krdb/themes/Platinum/Platinum.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/Redmond/Makefile.am b/kcontrol/krdb/themes/Redmond/Makefile.am new file mode 100644 index 000000000..726e8776c --- /dev/null +++ b/kcontrol/krdb/themes/Redmond/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = Redmond.xml Redmond.preview.png + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/Redmond + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/Redmond/Redmond.preview.png b/kcontrol/krdb/themes/Redmond/Redmond.preview.png new file mode 100644 index 000000000..d1f787a9b Binary files /dev/null and b/kcontrol/krdb/themes/Redmond/Redmond.preview.png differ diff --git a/kcontrol/krdb/themes/Redmond/Redmond.xml b/kcontrol/krdb/themes/Redmond/Redmond.xml new file mode 100644 index 000000000..4ec27ceee --- /dev/null +++ b/kcontrol/krdb/themes/Redmond/Redmond.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/Sunshine/Makefile.am b/kcontrol/krdb/themes/Sunshine/Makefile.am new file mode 100644 index 000000000..9594c2c40 --- /dev/null +++ b/kcontrol/krdb/themes/Sunshine/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = Sunshine.xml Sunshine.preview.png + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/Sunshine + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png b/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png new file mode 100644 index 000000000..0402460f8 Binary files /dev/null and b/kcontrol/krdb/themes/Sunshine/Sunshine.preview.png differ diff --git a/kcontrol/krdb/themes/Sunshine/Sunshine.xml b/kcontrol/krdb/themes/Sunshine/Sunshine.xml new file mode 100644 index 000000000..92a4a8bf0 --- /dev/null +++ b/kcontrol/krdb/themes/Sunshine/Sunshine.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/YellowOnBlue-big/Makefile.am b/kcontrol/krdb/themes/YellowOnBlue-big/Makefile.am new file mode 100644 index 000000000..dedb23a60 --- /dev/null +++ b/kcontrol/krdb/themes/YellowOnBlue-big/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = YellowOnBlue-big.preview.png YellowOnBlue-big.xml + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/YellowOnBlue-big + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png new file mode 100644 index 000000000..b3814c7af Binary files /dev/null and b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.preview.png differ diff --git a/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.xml b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.xml new file mode 100644 index 000000000..20138db4a --- /dev/null +++ b/kcontrol/krdb/themes/YellowOnBlue-big/YellowOnBlue-big.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/krdb/themes/YellowOnBlue/Makefile.am b/kcontrol/krdb/themes/YellowOnBlue/Makefile.am new file mode 100644 index 000000000..cbad47f2a --- /dev/null +++ b/kcontrol/krdb/themes/YellowOnBlue/Makefile.am @@ -0,0 +1,6 @@ + +kthememanager_theme_data_DATA = YellowOnBlue.preview.png YellowOnBlue.xml + +kthememanager_theme_datadir = $(kde_datadir)/kthememanager/themes/YellowOnBlue + +EXTRA_DIST = $(kthememanager_theme_data_DATA) diff --git a/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png new file mode 100644 index 000000000..25809cb50 Binary files /dev/null and b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.preview.png differ diff --git a/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.xml b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.xml new file mode 100644 index 000000000..a1e6fd5e4 --- /dev/null +++ b/kcontrol/krdb/themes/YellowOnBlue/YellowOnBlue.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kcontrol/kthememanager/Makefile.am b/kcontrol/kthememanager/Makefile.am new file mode 100644 index 000000000..be71094cb --- /dev/null +++ b/kcontrol/kthememanager/Makefile.am @@ -0,0 +1,21 @@ +AM_CPPFLAGS = $(all_includes) +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kcm_kthememanager.la + +kcm_kthememanager_la_SOURCES = kthemedlg.ui newthemewidget.ui knewthemedlg.cpp ktheme.cpp kthememanager.cpp +kcm_kthememanager_la_LIBADD = $(LIB_KIO) +kcm_kthememanager_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module + +noinst_HEADERS = kthememanager.h ktheme.h knewthemedlg.h kthemedlg.ui.h + +xdg_apps_DATA = kthememanager.desktop installktheme.desktop + +# MIME type +kthememime_DATA = x-ktheme.desktop +kthememimedir = $(kde_mimedir)/application + +bin_SCRIPTS = kdeinstallktheme + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kthememanager.pot diff --git a/kcontrol/kthememanager/NEWS b/kcontrol/kthememanager/NEWS new file mode 100644 index 000000000..23cd860ee --- /dev/null +++ b/kcontrol/kthememanager/NEWS @@ -0,0 +1,26 @@ +Version 0.4 +=========== +- added support for screensaver +- fixed Kicker transparency not being saved correctly + +Version 0.3 +=========== +- the theme manager now correctly handles installing and creating + new themes over existing ones +- support for widget styles (or the name thereof) +- added new details buttons to launch idividual kcm style-related + modules +- write/read the current theme and preselect it at startup +- the preview pixmap is now generated dynamically + and taken at full size + +Version 0.2 +=========== +- support for colorizing the Kicker background +- support for relative URLs, as the README states +- installing themes via DnD, even remote ones +- installing themes via context (service) menu from Konqueror + +Version 0.1 +=========== +- first release diff --git a/kcontrol/kthememanager/README b/kcontrol/kthememanager/README new file mode 100644 index 000000000..0fe235115 --- /dev/null +++ b/kcontrol/kthememanager/README @@ -0,0 +1,99 @@ +This theme manager should handle installing, removing +and creating global visual KDE themes. It's written +from scratch, totally unrelated to the old kthememgr +which was not maintained and obsolete. + +*** WARNING *** +The XML file format is still subject to change! +*** WARNING *** + +(c) 2003, 2004 Lukas Tinkl + + +A KDE theme consists of: +======================== +- wallpapers or bg colors +- icons +- sounds +- color scheme +- cursor theme +- window decorations +- screensaver +- name of the widget theme +- themed apps (mainly Konqueror and Kicker) + + +Sample XML theme config file: +============================= + + + + + + + + + + + + + + + + + + + + ... + + + + ... + + + + + + + + + + + + + + + + + + + + +Theme storage: +============== +- a gzipped tarball, directory tree based (e.g. theme.kth) + + +Sample dir tree: +================ +-- mytheme.kth + - mytheme.xml + - mytheme.preview.png + - sounds/ + - wallpapers/ + - konqueror/ + - desktop/ + - panel/ + + +The notion of "url" here: +========================= +- local: points to an already installed file in the system + (must be a sole filename, e.g. "background.png"); this differs + according to the theme part (ie. can be different for sounds + and/or wallpapers) +- theme: relative to the root of the theme tarball or directory + (e.g. theme:/wallpapers/desktop/image.png) +- other URLs are not allowed, the file must be contained + either in the theme or in the target system diff --git a/kcontrol/kthememanager/TODO b/kcontrol/kthememanager/TODO new file mode 100644 index 000000000..944f79b78 --- /dev/null +++ b/kcontrol/kthememanager/TODO @@ -0,0 +1,9 @@ +- use KHotNewStuff for directly downloading themes from kde-look.org +- custom pixmap kwin themes (requires kwmtheme to be ported first) +- write user and theme developer documentation + +Handle: +- splash screen (+ copying?) +- K Menu sidebar pixmap +- bundling the cursor theme +- slideshow and "active" background program diff --git a/kcontrol/kthememanager/installktheme.desktop b/kcontrol/kthememanager/installktheme.desktop new file mode 100644 index 000000000..51e5f75a6 --- /dev/null +++ b/kcontrol/kthememanager/installktheme.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Name=Install KDE Theme +Name[af]=Installeer KDE temas +Name[ar]=ثبِت سمة KDE +Name[az]=KDE Örtüyünü Qur +Name[be]=Устаноўка тэмы KDE +Name[bg]=Инсталиране на тема +Name[bn]=কে.ডি.ই. থীম ইনস্টল করো +Name[br]=Staliañ ar c'hiz KDE +Name[bs]=Instaliraj KDE temu +Name[ca]=Instal·la tema KDE +Name[cs]=Instalovat KDE motiv +Name[csb]=Instalëjë témã KDE +Name[cy]=Gosod Thema KDE +Name[da]=Installér KDE-tema +Name[de]=KDE-Design installieren +Name[el]=Εγκατάσταση θέματος του KDE +Name[eo]=Instali KDEan etoson +Name[es]=Instalar tema de KDE +Name[et]=KDE teema paigaldamine +Name[eu]=Instalatu KDE gaia +Name[fa]=نصب چهرۀ KDE +Name[fi]=Asenna KDE-teema +Name[fr]=Installer des thèmes KDE +Name[fy]=KDE-tema ynstallearje +Name[ga]=Suiteáil Téama KDE +Name[gl]=Instalar tema de KDE +Name[he]=התקנה של ערכת נושא עבור KDE +Name[hi]=केडीई प्रसंग संस्थापित करें +Name[hr]=Instaliranje KDE teme +Name[hu]=KDE-téma telepítése +Name[is]=Setja inn KDE þemu +Name[it]=Installa tema di KDE +Name[ja]=KDE テーマのインストール +Name[ka]=KDE-ს თემების დაყენება +Name[kk]=KDE нақыштарын орнату +Name[km]=ដំឡើង​ស្បែក KDE +Name[ko]=KDE 테마 설치 +Name[lt]=Įdiegti KDE temą +Name[lv]=Instalēt KDE tēmu +Name[mk]=Инсталирај KDE Тема +Name[ms]=Pasang Tema KDE +Name[mt]=Installa Tema KDE +Name[nb]=Legg inn KDE-tema +Name[nds]=KDE-Muster installeren +Name[ne]=KDE विषयवस्तु स्थापना गर्नुहोस् +Name[nl]=KDE-thema installeren +Name[nn]=Installer KDE-tema +Name[pa]=KDE ਸਰੂਪ ਇੰਸਟਾਲ +Name[pl]=Instaluj motyw KDE +Name[pt]=Instalar um Tema do KDE +Name[pt_BR]=Instalar Tema do KDE +Name[ro]=Instalează tematică KDE +Name[ru]=Установка тем KDE +Name[rw]=Kwinjiza Insanganyamatsiko KDE +Name[se]=Sajáiduhte KDE-fáttá +Name[sk]=Inštalovať tému KDE +Name[sl]=Namesti temo KDE +Name[sr]=Инсталирај KDE тему +Name[sr@Latn]=Instaliraj KDE temu +Name[sv]=Installera KDE-tema +Name[ta]=KDE பொருளை நிறுவு +Name[tg]=Мавзӯъи KDE сабт кунед +Name[th]=ติดตั้งชุดตกแต่ง KDE +Name[tr]=KDE Teması Yükle +Name[tt]=KDE Tışlaw quyu +Name[uk]=Встановлення теми KDE +Name[uz]=KDE mavzusini oʻrnatish +Name[uz@cyrillic]=KDE мавзусини ўрнатиш +Name[vi]=Cài đặt Sắc thái KDE +Name[wa]=Astaler on tinme KDE +Name[zh_CN]=安装 KDE 主题 +Name[zh_TW]=安裝 KDE 佈景 +MimeType=application/x-ktheme; +Icon=kthememgr +Type=Application +NoDisplay=true +Exec=kdeinstallktheme %f diff --git a/kcontrol/kthememanager/kdeinstallktheme b/kcontrol/kthememanager/kdeinstallktheme new file mode 100755 index 000000000..b606fe16b --- /dev/null +++ b/kcontrol/kthememanager/kdeinstallktheme @@ -0,0 +1,14 @@ +#!/bin/sh +# Installs a KDE theme (into the user's theme dir) +appsdir=`kde-config --path data | sed -e 's/:.*//'` +themedir=$appsdir"/kthememanager/themes/"`basename "$1" ".kth"` +if test -n "$appsdir"; then + test -d "$themedir" || mkdir -p "$themedir" + #echo "$themedir" + cp -f "$1" "$themedir" + cd "$themedir" + tarball=`basename "$1"` + #echo $tarball + tar xzf "$tarball" + rm -f "$tarball" +fi diff --git a/kcontrol/kthememanager/knewthemedlg.cpp b/kcontrol/kthememanager/knewthemedlg.cpp new file mode 100644 index 000000000..1514ed453 --- /dev/null +++ b/kcontrol/kthememanager/knewthemedlg.cpp @@ -0,0 +1,96 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* Copyright (C) 2003 Lukas Tinkl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "knewthemedlg.h" +#include "newthemewidget.h" + +#include +#include + +#include + +KNewThemeDlg::KNewThemeDlg( QWidget * parent, const char * name ) + : KDialogBase(parent, name, true, i18n("New Theme"), Ok|Cancel, Ok) +{ + m_base = new NewThemeWidget( this, "new_theme_base" ); + setMainWidget( m_base ); + connect( m_base->leName, SIGNAL( textChanged ( const QString & ) ), this, SLOT( slotThemeNameChanged( const QString & ) ) ); + slotThemeNameChanged( m_base->leName->text() ); +} + +KNewThemeDlg::~KNewThemeDlg() +{ + delete m_base; +} + +void KNewThemeDlg::slotThemeNameChanged( const QString &_text ) +{ + enableButtonOK( !_text.isEmpty() ); +} + +QString KNewThemeDlg::getName() const +{ + return m_base->leName->text(); +} + +QString KNewThemeDlg::getAuthor() const +{ + return m_base->leAuthor->text(); +} + +QString KNewThemeDlg::getEmail() const +{ + return m_base->leEmail->text(); +} + +QString KNewThemeDlg::getHomepage() const +{ + return m_base->leHomepage->text(); +} + +QString KNewThemeDlg::getComment() const +{ + return m_base->teComment->text(); +} + +QString KNewThemeDlg::getVersion() const +{ + return m_base->leVersion->text(); +} + +void KNewThemeDlg::setAuthor( const QString & author ) +{ + m_base->leAuthor->setText( author ); +} + +void KNewThemeDlg::setEmail( const QString & email ) +{ + m_base->leEmail->setText( email ); +} + +void KNewThemeDlg::setVersion( const QString & version ) +{ + m_base->leVersion->setText( version ); +} + +void KNewThemeDlg::setName( const QString & name ) +{ + m_base->leName->setText( name ); +} + +#include "knewthemedlg.moc" diff --git a/kcontrol/kthememanager/knewthemedlg.h b/kcontrol/kthememanager/knewthemedlg.h new file mode 100644 index 000000000..52fd0816f --- /dev/null +++ b/kcontrol/kthememanager/knewthemedlg.h @@ -0,0 +1,58 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* Copyright (C) 2003 Lukas Tinkl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef KNEWTHEMEDLG_H +#define KNEWTHEMEDLG_H + +#include + +#include + +class NewThemeWidget; + +/** + * Dialog for creating new themes, contains just + * getters and setters used for the theme general properties + * @author Lukas Tinkl + */ +class KNewThemeDlg: public KDialogBase +{ + Q_OBJECT +public: + KNewThemeDlg( QWidget * parent = 0, const char * name = 0); + ~KNewThemeDlg(); + + QString getName() const; + QString getAuthor() const; + QString getEmail() const; + QString getHomepage() const; + QString getComment() const; + QString getVersion() const; + + void setName( const QString & name ); + void setAuthor( const QString & author ); + void setEmail( const QString & email ); + void setVersion( const QString & version ); +private: + NewThemeWidget * m_base; + +private slots: + void slotThemeNameChanged( const QString &_text ); +}; + +#endif diff --git a/kcontrol/kthememanager/ktheme.cpp b/kcontrol/kthememanager/ktheme.cpp new file mode 100644 index 000000000..241aac132 --- /dev/null +++ b/kcontrol/kthememanager/ktheme.cpp @@ -0,0 +1,897 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* Copyright (C) 2003 Lukas Tinkl + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "ktheme.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +KTheme::KTheme( QWidget *parent, const QString & xmlFile ) + : m_parent(parent) +{ + QFile file( xmlFile ); + file.open( IO_ReadOnly ); + m_dom.setContent( file.readAll() ); + file.close(); + + //kdDebug() << m_dom.toString( 2 ) << endl; + + setName( QFileInfo( file ).baseName() ); + m_kgd = KGlobal::dirs(); +} + +KTheme::KTheme( QWidget *parent, bool create ) + : m_parent(parent) +{ + if ( create ) + { + m_dom = QDomDocument( "ktheme" ); + + m_root = m_dom.createElement( "ktheme" ); + m_root.setAttribute( "version", SYNTAX_VERSION ); + m_dom.appendChild( m_root ); + + m_general = m_dom.createElement( "general" ); + m_root.appendChild( m_general ); + } + + m_kgd = KGlobal::dirs(); +} + +KTheme::~KTheme() +{ +} + +void KTheme::setName( const QString & name ) +{ + m_name = name; +} + +bool KTheme::load( const KURL & url ) +{ + kdDebug() << "Loading theme from URL: " << url << endl; + + QString tmpFile; + if ( !KIO::NetAccess::download( url, tmpFile, 0L ) ) + return false; + + kdDebug() << "Theme is in temp file: " << tmpFile << endl; + + // set theme's name + setName( QFileInfo( url.fileName() ).baseName() ); + + // unpack the tarball + QString location = m_kgd->saveLocation( "themes", m_name + "/" ); + KTar tar( tmpFile ); + tar.open( IO_ReadOnly ); + tar.directory()->copyTo( location ); + tar.close(); + + // create the DOM + QFile file( location + m_name + ".xml" ); + file.open( IO_ReadOnly ); + m_dom.setContent( file.readAll() ); + file.close(); + + // remove the temp file + KIO::NetAccess::removeTempFile( tmpFile ); + + return true; +} + +QString KTheme::createYourself( bool pack ) +{ + // start with empty dir for orig theme + if ( !pack ) + KTheme::remove( name() ); + + // 1. General stuff set by methods setBlah() + + // 2. Background theme + KConfig * globalConf = KGlobal::config(); + + KConfig kwinConf( "kwinrc", true ); + kwinConf.setGroup( "Desktops" ); + uint numDesktops = kwinConf.readUnsignedNumEntry( "Number", 4 ); + + KConfig desktopConf( "kdesktoprc", true ); + desktopConf.setGroup( "Background Common" ); + bool common = desktopConf.readBoolEntry( "CommonDesktop", true ); + + for ( uint i=0; i < numDesktops-1; i++ ) + { + QDomElement desktopElem = m_dom.createElement( "desktop" ); + desktopElem.setAttribute( "number", i ); + desktopElem.setAttribute( "common", common ); + + desktopConf.setGroup( "Desktop" + QString::number( i ) ); + + QDomElement modeElem = m_dom.createElement( "mode" ); + modeElem.setAttribute( "id", desktopConf.readEntry( "BackgroundMode", "Flat" ) ); + desktopElem.appendChild( modeElem ); + + QDomElement c1Elem = m_dom.createElement( "color1" ); + c1Elem.setAttribute( "rgb", desktopConf.readColorEntry( "Color1" ).name() ); + desktopElem.appendChild( c1Elem ); + + QDomElement c2Elem = m_dom.createElement( "color2" ); + c2Elem.setAttribute( "rgb", desktopConf.readColorEntry( "Color2" ).name() ); + desktopElem.appendChild( c2Elem ); + + QDomElement blendElem = m_dom.createElement( "blending" ); + blendElem.setAttribute( "mode", desktopConf.readEntry( "BlendMode", QString( "NoBlending" ) ) ); + blendElem.setAttribute( "balance", desktopConf.readEntry( "BlendBalance", QString::number( 100 ) ) ); + blendElem.setAttribute( "reverse", desktopConf.readBoolEntry( "ReverseBlending", false ) ); + desktopElem.appendChild( blendElem ); + + QDomElement patElem = m_dom.createElement( "pattern" ); + patElem.setAttribute( "name", desktopConf.readEntry( "Pattern" ) ); + desktopElem.appendChild( patElem ); + + QDomElement wallElem = m_dom.createElement( "wallpaper" ); + wallElem.setAttribute( "url", processFilePath( "desktop", desktopConf.readPathEntry( "Wallpaper" ) ) ); + wallElem.setAttribute( "mode", desktopConf.readEntry( "WallpaperMode" ) ); + desktopElem.appendChild( wallElem ); + + // TODO handle multi wallpapers (aka slideshow) + + m_root.appendChild( desktopElem ); + + if ( common ) // generate only one node + break; + } + + // 11. Screensaver + desktopConf.setGroup( "ScreenSaver" ); + QDomElement saverElem = m_dom.createElement( "screensaver" ); + saverElem.setAttribute( "name", desktopConf.readEntry( "Saver" ) ); + m_root.appendChild( saverElem ); + + // 3. Icons + globalConf->setGroup( "Icons" ); + QDomElement iconElem = m_dom.createElement( "icons" ); + iconElem.setAttribute( "name", globalConf->readEntry( "Theme",KIconTheme::current() ) ); + createIconElems( "DesktopIcons", "desktop", iconElem, globalConf ); + createIconElems( "MainToolbarIcons", "mainToolbar", iconElem, globalConf ); + createIconElems( "PanelIcons", "panel", iconElem, globalConf ); + createIconElems( "SmallIcons", "small", iconElem, globalConf ); + createIconElems( "ToolbarIcons", "toolbar", iconElem, globalConf ); + m_root.appendChild( iconElem ); + + // 4. Sounds + // 4.1 Global sounds + KConfig * soundConf = new KConfig( "knotify.eventsrc", true ); + QStringList stdEvents; + stdEvents << "cannotopenfile" << "catastrophe" << "exitkde" << "fatalerror" + << "notification" << "printerror" << "startkde" << "warning" + << "messageCritical" << "messageInformation" << "messageWarning" + << "messageboxQuestion"; + + // 4.2 KWin sounds + KConfig * kwinSoundConf = new KConfig( "kwin.eventsrc", true ); + QStringList kwinEvents; + kwinEvents << "activate" << "close" << "delete" << + "desktop1" << "desktop2" << "desktop3" << "desktop4" << + "desktop5" << "desktop6" << "desktop7" << "desktop8" << + "maximize" << "minimize" << "moveend" << "movestart" << + "new" << "not_on_all_desktops" << "on_all_desktops" << + "resizeend" << "resizestart" << "shadedown" << "shadeup" << + "transdelete" << "transnew" << "unmaximize" << "unminimize"; + + QDomElement soundsElem = m_dom.createElement( "sounds" ); + createSoundList( stdEvents, "global", soundsElem, soundConf ); + createSoundList( kwinEvents, "kwin", soundsElem, kwinSoundConf ); + m_root.appendChild( soundsElem ); + delete soundConf; + delete kwinSoundConf; + + + // 5. Colors + QDomElement colorsElem = m_dom.createElement( "colors" ); + globalConf->setGroup( "KDE" ); + colorsElem.setAttribute( "contrast", globalConf->readNumEntry( "contrast", 7 ) ); + QStringList stdColors; + stdColors << "background" << "selectBackground" << "foreground" << "windowForeground" + << "windowBackground" << "selectForeground" << "buttonBackground" + << "buttonForeground" << "linkColor" << "visitedLinkColor" << "alternateBackground"; + + globalConf->setGroup( "General" ); + for ( QStringList::Iterator it = stdColors.begin(); it != stdColors.end(); ++it ) + createColorElem( ( *it ), "global", colorsElem, globalConf ); + + QStringList kwinColors; + kwinColors << "activeForeground" << "inactiveBackground" << "inactiveBlend" << "activeBackground" + << "activeBlend" << "inactiveForeground" << "activeTitleBtnBg" << "inactiveTitleBtnBg" + << "frame" << "inactiveFrame" << "handle" << "inactiveHandle"; + globalConf->setGroup( "WM" ); + for ( QStringList::Iterator it = kwinColors.begin(); it != kwinColors.end(); ++it ) + createColorElem( ( *it ), "kwin", colorsElem, globalConf ); + + m_root.appendChild( colorsElem ); + + // 6. Cursors + KConfig* mouseConf = new KConfig( "kcminputrc", true ); + mouseConf->setGroup( "Mouse" ); + QDomElement cursorsElem = m_dom.createElement( "cursors" ); + cursorsElem.setAttribute( "name", mouseConf->readEntry( "cursorTheme" ) ); + m_root.appendChild( cursorsElem ); + delete mouseConf; + // TODO copy the cursor theme? + + // 7. KWin + kwinConf.setGroup( "Style" ); + QDomElement wmElem = m_dom.createElement( "wm" ); + wmElem.setAttribute( "name", kwinConf.readEntry( "PluginLib" ) ); + wmElem.setAttribute( "type", "builtin" ); // TODO support pixmap themes when the kwin client gets ported + if ( kwinConf.readBoolEntry( "CustomButtonPositions" ) ) + { + QDomElement buttonsElem = m_dom.createElement( "buttons" ); + buttonsElem.setAttribute( "left", kwinConf.readEntry( "ButtonsOnLeft" ) ); + buttonsElem.setAttribute( "right", kwinConf.readEntry( "ButtonsOnRight" ) ); + wmElem.appendChild( buttonsElem ); + } + QDomElement borderElem = m_dom.createElement( "border" ); + borderElem.setAttribute( "size", kwinConf.readNumEntry( "BorderSize", 1 ) ); + wmElem.appendChild( borderElem ); + m_root.appendChild( wmElem ); + + // 8. Konqueror + KConfig konqConf( "konquerorrc", true ); + konqConf.setGroup( "Settings" ); + QDomElement konqElem = m_dom.createElement( "konqueror" ); + QDomElement konqWallElem = m_dom.createElement( "wallpaper" ); + QString bgImagePath = konqConf.readPathEntry( "BgImage" ); + konqWallElem.setAttribute( "url", processFilePath( "konqueror", bgImagePath ) ); + konqElem.appendChild( konqWallElem ); + QDomElement konqBgColorElem = m_dom.createElement( "bgcolor" ); + konqBgColorElem.setAttribute( "rgb", konqConf.readColorEntry( "BgColor" ).name() ); + konqElem.appendChild( konqBgColorElem ); + m_root.appendChild( konqElem ); + + // 9. Kicker (aka KDE Panel) + KConfig kickerConf( "kickerrc", true ); + kickerConf.setGroup( "General" ); + + QDomElement panelElem = m_dom.createElement( "panel" ); + + if ( kickerConf.readBoolEntry( "UseBackgroundTheme" ) ) + { + QDomElement backElem = m_dom.createElement( "background" ); + QString kbgPath = kickerConf.readPathEntry( "BackgroundTheme" ); + backElem.setAttribute( "url", processFilePath( "panel", kbgPath ) ); + backElem.setAttribute( "colorize", kickerConf.readBoolEntry( "ColorizeBackground" ) ); + panelElem.appendChild( backElem ); + } + + QDomElement transElem = m_dom.createElement( "transparent" ); + transElem.setAttribute( "value", kickerConf.readBoolEntry( "Transparent" ) ); + panelElem.appendChild( transElem ); + + QDomElement posElem = m_dom.createElement( "position" ); + posElem.setAttribute( "value", kickerConf.readEntry( "Position" ) ); + panelElem.appendChild( posElem ); + + + QDomElement showLeftHideButtonElem = m_dom.createElement( "showlefthidebutton" ); + showLeftHideButtonElem.setAttribute( "value", kickerConf.readBoolEntry( "ShowLeftHideButton" ) ); + panelElem.appendChild( showLeftHideButtonElem ); + + QDomElement showRightHideButtonElem = m_dom.createElement( "showrighthidebutton" ); + showRightHideButtonElem.setAttribute( "value", kickerConf.readBoolEntry( "ShowRightHideButton" ) ); + panelElem.appendChild( showRightHideButtonElem ); + + + + m_root.appendChild( panelElem ); + + // 10. Widget style + globalConf->setGroup( "General" ); + QDomElement widgetsElem = m_dom.createElement( "widgets" ); + widgetsElem.setAttribute( "name", globalConf->readEntry( "widgetStyle",KStyle::defaultStyle() ) ); + m_root.appendChild( widgetsElem ); + + // 12. + QDomElement fontsElem = m_dom.createElement( "fonts" ); + QStringList fonts; + fonts << "General" << "font" + << "General" << "fixed" + << "General" << "toolBarFont" + << "General" << "menuFont" + << "WM" << "activeFont" + << "General" << "taskbarFont" + << "FMSettings" << "StandardFont"; + + for ( QStringList::Iterator it = fonts.begin(); it != fonts.end(); ++it ) { + QString group = *it; ++it; + QString key = *it; + QString value; + + if ( group == "FMSettings" ) { + desktopConf.setGroup( group ); + value = desktopConf.readEntry( key ); + } + else { + globalConf->setGroup( group ); + value = globalConf->readEntry( key ); + } + QDomElement fontElem = m_dom.createElement( key ); + fontElem.setAttribute( "object", group ); + fontElem.setAttribute( "value", value ); + fontsElem.appendChild( fontElem ); + } + m_root.appendChild( fontsElem ); + + // Save the XML + QFile file( m_kgd->saveLocation( "themes", m_name + "/" ) + m_name + ".xml" ); + if ( file.open( IO_WriteOnly ) ) { + QTextStream stream( &file ); + m_dom.save( stream, 2 ); + file.close(); + } + + QString result; + if ( pack ) + { + // Pack the whole theme + KTar tar( m_kgd->saveLocation( "themes" ) + m_name + ".kth", "application/x-gzip" ); + tar.open( IO_WriteOnly ); + + kdDebug() << "Packing everything under: " << m_kgd->saveLocation( "themes", m_name + "/" ) << endl; + + if ( tar.addLocalDirectory( m_kgd->saveLocation( "themes", m_name + "/" ), QString::null ) ) + result = tar.fileName(); + + tar.close(); + } + + //kdDebug() << m_dom.toString( 2 ) << endl; + + return result; +} + +void KTheme::apply() +{ + kdDebug() << "Going to apply theme: " << m_name << endl; + + QString themeDir = m_kgd->findResourceDir( "themes", m_name + "/" + m_name + ".xml") + m_name + "/"; + kdDebug() << "Theme dir: " << themeDir << endl; + + // 2. Background theme + + QDomNodeList desktopList = m_dom.elementsByTagName( "desktop" ); + KConfig desktopConf( "kdesktoprc" ); + desktopConf.setGroup( "Background Common" ); + + for ( uint i = 0; i <= desktopList.count(); i++ ) + { + QDomElement desktopElem = desktopList.item( i ).toElement(); + if ( !desktopElem.isNull() ) + { + // TODO optimize, don't write several times the common section + bool common = static_cast( desktopElem.attribute( "common", "true" ).toUInt() ); + desktopConf.writeEntry( "CommonDesktop", common ); + desktopConf.writeEntry( "DeskNum", desktopElem.attribute( "number", "0" ).toUInt() ); + + desktopConf.setGroup( QString( "Desktop%1" ).arg( i ) ); + desktopConf.writeEntry( "BackgroundMode", getProperty( desktopElem, "mode", "id" ) ); + desktopConf.writeEntry( "Color1", QColor( getProperty( desktopElem, "color1", "rgb" ) ) ); + desktopConf.writeEntry( "Color2", QColor( getProperty( desktopElem, "color2", "rgb" ) ) ); + desktopConf.writeEntry( "BlendMode", getProperty( desktopElem, "blending", "mode" ) ); + desktopConf.writeEntry( "BlendBalance", getProperty( desktopElem, "blending", "balance" ) ); + desktopConf.writeEntry( "ReverseBlending", + static_cast( getProperty( desktopElem, "blending", "reverse" ).toUInt() ) ); + desktopConf.writeEntry( "Pattern", getProperty( desktopElem, "pattern", "name" ) ); + desktopConf.writeEntry( "Wallpaper", + unprocessFilePath( "desktop", getProperty( desktopElem, "wallpaper", "url" ) ) ); + desktopConf.writeEntry( "WallpaperMode", getProperty( desktopElem, "wallpaper", "mode" ) ); + + if ( common ) + break; // stop here + } + } + + // 11. Screensaver + QDomElement saverElem = m_dom.elementsByTagName( "screensaver" ).item( 0 ).toElement(); + + if ( !saverElem.isNull() ) + { + desktopConf.setGroup( "ScreenSaver" ); + desktopConf.writeEntry( "Saver", saverElem.attribute( "name" ) ); + } + + desktopConf.sync(); // TODO sync and signal only if elem present + // reconfigure kdesktop. kdesktop will notify all clients + DCOPClient *client = kapp->dcopClient(); + if ( !client->isAttached() ) + client->attach(); + client->send("kdesktop", "KBackgroundIface", "configure()", ""); + // FIXME Xinerama + + // 3. Icons + QDomElement iconElem = m_dom.elementsByTagName( "icons" ).item( 0 ).toElement(); + if ( !iconElem.isNull() ) + { + KConfig * iconConf = KGlobal::config(); + iconConf->setGroup( "Icons" ); + iconConf->writeEntry( "Theme", iconElem.attribute( "name", "crystalsvg" ), true, true ); + + QDomNodeList iconList = iconElem.childNodes(); + for ( uint i = 0; i < iconList.count(); i++ ) + { + QDomElement iconSubElem = iconList.item( i ).toElement(); + QString object = iconSubElem.attribute( "object" ); + if ( object == "desktop" ) + iconConf->setGroup( "DesktopIcons" ); + else if ( object == "mainToolbar" ) + iconConf->setGroup( "MainToolbarIcons" ); + else if ( object == "panel" ) + iconConf->setGroup( "PanelIcons" ); + else if ( object == "small" ) + iconConf->setGroup( "SmallIcons" ); + else if ( object == "toolbar" ) + iconConf->setGroup( "ToolbarIcons" ); + + QString iconName = iconSubElem.tagName(); + if ( iconName.contains( "Color" ) ) + { + QColor iconColor = QColor( iconSubElem.attribute( "rgb" ) ); + iconConf->writeEntry( iconName, iconColor, true, true ); + } + else if ( iconName.contains( "Value" ) || iconName == "Size" ) + iconConf->writeEntry( iconName, iconSubElem.attribute( "value" ).toUInt(), true, true ); + else if ( iconName.contains( "Effect" ) ) + iconConf->writeEntry( iconName, iconSubElem.attribute( "name" ), true, true ); + else + iconConf->writeEntry( iconName, static_cast( iconSubElem.attribute( "value" ).toUInt() ), true, true ); + } + iconConf->sync(); + + for ( int i = 0; i < KIcon::LastGroup; i++ ) + KIPC::sendMessageAll( KIPC::IconChanged, i ); + KService::rebuildKSycoca( m_parent ); + } + + // 4. Sounds + QDomElement soundsElem = m_dom.elementsByTagName( "sounds" ).item( 0 ).toElement(); + if ( !soundsElem.isNull() ) + { + KConfig soundConf( "knotify.eventsrc" ); + KConfig kwinSoundConf( "kwin.eventsrc" ); + QDomNodeList eventList = soundsElem.elementsByTagName( "event" ); + for ( uint i = 0; i < eventList.count(); i++ ) + { + QDomElement eventElem = eventList.item( i ).toElement(); + QString object = eventElem.attribute( "object" ); + + if ( object == "global" ) + { + soundConf.setGroup( eventElem.attribute( "name" ) ); + soundConf.writeEntry( "soundfile", unprocessFilePath( "sounds", eventElem.attribute( "url" ) ) ); + soundConf.writeEntry( "presentation", soundConf.readNumEntry( "presentation" ) | 1 ); + } + else if ( object == "kwin" ) + { + kwinSoundConf.setGroup( eventElem.attribute( "name" ) ); + kwinSoundConf.writeEntry( "soundfile", unprocessFilePath( "sounds", eventElem.attribute( "url" ) ) ); + kwinSoundConf.writeEntry( "presentation", soundConf.readNumEntry( "presentation" ) | 1 ); + } + } + + soundConf.sync(); + kwinSoundConf.sync(); + client->send("knotify", "", "reconfigure()", ""); + // TODO signal kwin sounds change? + } + + // 5. Colors + QDomElement colorsElem = m_dom.elementsByTagName( "colors" ).item( 0 ).toElement(); + + if ( !colorsElem.isNull() ) + { + QDomNodeList colorList = colorsElem.childNodes(); + KConfig * colorConf = KGlobal::config(); + + QString sCurrentScheme = locateLocal("data", "kdisplay/color-schemes/thememgr.kcsrc"); + KSimpleConfig *colorScheme = new KSimpleConfig( sCurrentScheme ); + colorScheme->setGroup("Color Scheme" ); + + for ( uint i = 0; i < colorList.count(); i++ ) + { + QDomElement colorElem = colorList.item( i ).toElement(); + QString object = colorElem.attribute( "object" ); + if ( object == "global" ) + colorConf->setGroup( "General" ); + else if ( object == "kwin" ) + colorConf->setGroup( "WM" ); + + QString colName = colorElem.tagName(); + QColor curColor = QColor( colorElem.attribute( "rgb" ) ); + colorConf->writeEntry( colName, curColor, true, true ); // kdeglobals + colorScheme->writeEntry( colName, curColor ); // thememgr.kcsrc + } + + colorConf->setGroup( "KDE" ); + colorConf->writeEntry( "colorScheme", "thememgr.kcsrc", true, true ); + colorConf->writeEntry( "contrast", colorsElem.attribute( "contrast", "7" ), true, true ); + colorScheme->writeEntry( "contrast", colorsElem.attribute( "contrast", "7" ) ); + colorConf->sync(); + delete colorScheme; + + KIPC::sendMessageAll( KIPC::PaletteChanged ); + } + + // 6.Cursors + QDomElement cursorsElem = m_dom.elementsByTagName( "cursors" ).item( 0 ).toElement(); + + if ( !cursorsElem.isNull() ) + { + KConfig mouseConf( "kcminputrc" ); + mouseConf.setGroup( "Mouse" ); + mouseConf.writeEntry( "cursorTheme", cursorsElem.attribute( "name" )); + // FIXME is there a way to notify KDE of cursor changes? + } + + // 7. KWin + QDomElement wmElem = m_dom.elementsByTagName( "wm" ).item( 0 ).toElement(); + + if ( !wmElem.isNull() ) + { + KConfig kwinConf( "kwinrc" ); + kwinConf.setGroup( "Style" ); + QString type = wmElem.attribute( "type" ); + if ( type == "builtin" ) + kwinConf.writeEntry( "PluginLib", wmElem.attribute( "name" ) ); + //else // TODO support custom themes + QDomNodeList buttons = wmElem.elementsByTagName ("buttons"); + if ( buttons.count() > 0 ) + { + kwinConf.writeEntry( "CustomButtonPositions", true ); + kwinConf.writeEntry( "ButtonsOnLeft", getProperty( wmElem, "buttons", "left" ) ); + kwinConf.writeEntry( "ButtonsOnRight", getProperty( wmElem, "buttons", "right" ) ); + } + else + { + kwinConf.writeEntry( "CustomButtonPositions", false ); + } + kwinConf.writeEntry( "BorderSize", getProperty( wmElem, "border", "size" ) ); + + kwinConf.sync(); + client->send( "kwin", "", "reconfigure()", "" ); + } + + // 8. Konqueror + QDomElement konqElem = m_dom.elementsByTagName( "konqueror" ).item( 0 ).toElement(); + + if ( !konqElem.isNull() ) + { + KConfig konqConf( "konquerorrc" ); + konqConf.setGroup( "Settings" ); + konqConf.writeEntry( "BgImage", unprocessFilePath( "konqueror", getProperty( konqElem, "wallpaper", "url" ) ) ); + konqConf.writeEntry( "BgColor", QColor( getProperty( konqElem, "bgcolor", "rgb" ) ) ); + + konqConf.sync(); + client->send("konqueror*", "KonquerorIface", "reparseConfiguration()", ""); // FIXME seems not to work :( + } + + // 9. Kicker + QDomElement panelElem = m_dom.elementsByTagName( "panel" ).item( 0 ).toElement(); + + if ( !panelElem.isNull() ) + { + KConfig kickerConf( "kickerrc" ); + kickerConf.setGroup( "General" ); + QString kickerBgUrl = getProperty( panelElem, "background", "url" ); + if ( !kickerBgUrl.isEmpty() ) + { + kickerConf.writeEntry( "UseBackgroundTheme", true ); + kickerConf.writeEntry( "BackgroundTheme", unprocessFilePath( "panel", kickerBgUrl ) ); + kickerConf.writeEntry( "ColorizeBackground", + static_cast( getProperty( panelElem, "background", "colorize" ).toUInt() ) ); + } + kickerConf.writeEntry( "Transparent", + static_cast( getProperty( panelElem, "transparent", "value" ).toUInt() ) ); + + kickerConf.writeEntry( "Position", static_cast (getProperty( panelElem, "position", "value" ).toUInt() )); + + kickerConf.writeEntry( "ShowLeftHideButton", static_cast( getProperty( panelElem, "showlefthidebutton", "value").toInt())); + + kickerConf.writeEntry( "ShowRightHideButton", static_cast( getProperty( panelElem, "showrighthidebutton", "value").toInt())); + + kickerConf.sync(); + client->send("kicker", "Panel", "configure()", ""); + } + + // 10. Widget style + QDomElement widgetsElem = m_dom.elementsByTagName( "widgets" ).item( 0 ).toElement(); + + if ( !widgetsElem.isNull() ) + { + KConfig * widgetConf = KGlobal::config(); + widgetConf->setGroup( "General" ); + widgetConf->writeEntry( "widgetStyle", widgetsElem.attribute( "name" ), true, true ); + widgetConf->sync(); + KIPC::sendMessageAll( KIPC::StyleChanged ); + } + + // 12. Fonts + QDomElement fontsElem = m_dom.elementsByTagName( "fonts" ).item( 0 ).toElement(); + if ( !fontsElem.isNull() ) + { + KConfig * fontsConf = KGlobal::config(); + KConfig * kde1xConf = new KSimpleConfig( QDir::homeDirPath() + "/.kderc" ); + kde1xConf->setGroup( "General" ); + + QDomNodeList fontList = fontsElem.childNodes(); + for ( uint i = 0; i < fontList.count(); i++ ) + { + QDomElement fontElem = fontList.item( i ).toElement(); + QString fontName = fontElem.tagName(); + QString fontValue = fontElem.attribute( "value" ); + QString fontObject = fontElem.attribute( "object" ); + + if ( fontObject == "FMSettings" ) { + desktopConf.setGroup( fontObject ); + desktopConf.writeEntry( fontName, fontValue, true, true ); + desktopConf.sync(); + } + else { + fontsConf->setGroup( fontObject ); + fontsConf->writeEntry( fontName, fontValue, true, true ); + } + kde1xConf->writeEntry( fontName, fontValue, true, true ); + } + + fontsConf->sync(); + kde1xConf->sync(); + KIPC::sendMessageAll( KIPC::FontChanged ); + } + +} + +bool KTheme::remove( const QString & name ) +{ + kdDebug() << "Going to remove theme: " << name << endl; + return KIO::NetAccess::del( KGlobal::dirs()->saveLocation( "themes", name + "/" ), 0L ); +} + +void KTheme::setProperty( const QString & name, const QString & value, QDomElement parent ) +{ + QDomElement tmp = m_dom.createElement( name ); + tmp.setAttribute( "value", value ); + parent.appendChild( tmp ); +} + +QString KTheme::getProperty( const QString & name ) const +{ + QDomNodeList _list = m_dom.elementsByTagName( name ); + if ( _list.count() != 0 ) + return _list.item( 0 ).toElement().attribute( "value" ); + else + { + kdWarning() << "Found no such property: " << name << endl; + return QString::null; + } +} + +QString KTheme::getProperty( QDomElement parent, const QString & tag, + const QString & attr ) const +{ + QDomNodeList _list = parent.elementsByTagName( tag ); + + if ( _list.count() != 0 ) + return _list.item( 0 ).toElement().attribute( attr ); + else + { + kdWarning() << QString( "No such property found: %1->%2->%3" ) + .arg( parent.tagName() ).arg( tag ).arg( attr ) << endl; + return QString::null; + } +} + +void KTheme::createIconElems( const QString & group, const QString & object, + QDomElement parent, KConfig * cfg ) +{ + cfg->setGroup( group ); + QStringList elemNames; + elemNames << "Animated" << "DoublePixels" << "Size" + << "ActiveColor" << "ActiveColor2" << "ActiveEffect" + << "ActiveSemiTransparent" << "ActiveValue" + << "DefaultColor" << "DefaultColor2" << "DefaultEffect" + << "DefaultSemiTransparent" << "DefaultValue" + << "DisabledColor" << "DisabledColor2" << "DisabledEffect" + << "DisabledSemiTransparent" << "DisabledValue"; + for ( QStringList::ConstIterator it = elemNames.begin(); it != elemNames.end(); ++it ) { + if ( (*it).contains( "Color" ) ) + createColorElem( *it, object, parent, cfg ); + else + { + QDomElement tmpCol = m_dom.createElement( *it ); + tmpCol.setAttribute( "object", object ); + + if ( (*it).contains( "Value" ) || *it == "Size" ) + tmpCol.setAttribute( "value", cfg->readNumEntry( *it, 1 ) ); + else if ( (*it).contains( "DisabledEffect" ) ) + tmpCol.setAttribute( "name", cfg->readEntry( *it, "togray" ) ); + else if ( (*it).contains( "Effect" ) ) + tmpCol.setAttribute( "name", cfg->readEntry( *it, "none" ) ); + else + tmpCol.setAttribute( "value", cfg->readBoolEntry( *it, false ) ); + parent.appendChild( tmpCol ); + } + } +} + +void KTheme::createColorElem( const QString & name, const QString & object, + QDomElement parent, KConfig * cfg ) +{ + QColor color = cfg->readColorEntry( name ); + if ( color.isValid() ) + { + QDomElement tmpCol = m_dom.createElement( name ); + tmpCol.setAttribute( "rgb", color.name() ); + tmpCol.setAttribute( "object", object ); + parent.appendChild( tmpCol ); + } +} + +void KTheme::createSoundList( const QStringList & events, const QString & object, + QDomElement parent, KConfig * cfg ) +{ + for ( QStringList::ConstIterator it = events.begin(); it != events.end(); ++it ) + { + QString group = ( *it ); + if ( cfg->hasGroup( group ) ) + { + cfg->setGroup( group ); + QString soundURL = cfg->readPathEntry( "soundfile" ); + int pres = cfg->readNumEntry( "presentation", 0 ); + if ( !soundURL.isEmpty() && ( ( pres & 1 ) == 1 ) ) + { + QDomElement eventElem = m_dom.createElement( "event" ); + eventElem.setAttribute( "object", object ); + eventElem.setAttribute( "name", group ); + eventElem.setAttribute( "url", processFilePath( "sounds", soundURL ) ); + parent.appendChild( eventElem ); + } + } + } +} + +QString KTheme::processFilePath( const QString & section, const QString & path ) +{ + QFileInfo fi( path ); + + if ( fi.isRelative() ) + fi.setFile( findResource( section, path ) ); + + kdDebug() << "Processing file: " << fi.absFilePath() << ", " << fi.fileName() << endl; + + if ( section == "desktop" ) + { + if ( copyFile( fi.absFilePath(), m_kgd->saveLocation( "themes", m_name + "/wallpapers/desktop/" ) + "/" + fi.fileName() ) ) + return "theme:/wallpapers/desktop/" + fi.fileName(); + } + else if ( section == "sounds" ) + { + if ( copyFile( fi.absFilePath(), m_kgd->saveLocation( "themes", m_name + "/sounds/" ) + "/" + fi.fileName() ) ) + return "theme:/sounds/" + fi.fileName(); + } + else if ( section == "konqueror" ) + { + if ( copyFile( fi.absFilePath(), m_kgd->saveLocation( "themes", m_name + "/wallpapers/konqueror/" ) + "/" + fi.fileName() ) ) + return "theme:/wallpapers/konqueror/" + fi.fileName(); + } + else if ( section == "panel" ) + { + if ( copyFile( fi.absFilePath(), m_kgd->saveLocation( "themes", m_name + "/wallpapers/panel/" ) + "/" + fi.fileName() ) ) + return "theme:/wallpapers/panel/" + fi.fileName(); + } + else + kdWarning() << "Unsupported theme resource type" << endl; + + return QString::null; // an error occured or the resource doesn't exist +} + +QString KTheme::unprocessFilePath( const QString & section, QString path ) +{ + if ( path.startsWith( "theme:/" ) ) + return path.replace( QRegExp( "^theme:/" ), m_kgd->findResourceDir( "themes", m_name + "/" + m_name + ".xml") + m_name + "/" ); + + if ( QFile::exists( path ) ) + return path; + else // try to find it in the system + return findResource( section, path ); +} + +void KTheme::setAuthor( const QString & author ) +{ + setProperty( "author", author, m_general ); +} + +void KTheme::setEmail( const QString & email ) +{ + setProperty( "email", email, m_general ); +} + +void KTheme::setHomepage( const QString & homepage ) +{ + setProperty( "homepage", homepage, m_general ); +} + +void KTheme::setComment( const QString & comment ) +{ + setProperty( "comment", comment, m_general ); +} + +void KTheme::setVersion( const QString & version ) +{ + setProperty( "version", version, m_general ); +} + +void KTheme::addPreview() +{ + QString file = m_kgd->saveLocation( "themes", m_name + "/" ) + m_name + ".preview.png"; + kdDebug() << "Adding preview: " << file << endl; + QPixmap snapshot = QPixmap::grabWindow( qt_xrootwin() ); + snapshot.save( file, "PNG" ); +} + +bool KTheme::copyFile( const QString & from, const QString & to ) +{ + // we overwrite b/c of restoring the "original" theme + return KIO::NetAccess::file_copy( from, to, -1, true /*overwrite*/ ); +} + +QString KTheme::findResource( const QString & section, const QString & path ) +{ + if ( section == "desktop" ) + return m_kgd->findResource( "wallpaper", path ); + else if ( section == "sounds" ) + return m_kgd->findResource( "sound", path ); + else if ( section == "konqueror" ) + return m_kgd->findResource( "data", "konqueror/tiles/" + path ); + else if ( section == "panel" ) + return m_kgd->findResource( "data", "kicker/wallpapers/" + path ); + else + { + kdWarning() << "Requested unknown resource: " << section << endl; + return QString::null; + } +} diff --git a/kcontrol/kthememanager/ktheme.h b/kcontrol/kthememanager/ktheme.h new file mode 100644 index 000000000..1401b49e7 --- /dev/null +++ b/kcontrol/kthememanager/ktheme.h @@ -0,0 +1,224 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* Copyright (C) 2003 Lukas Tinkl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef KTHEME_H +#define KTHEME_H + +#include +#include +#include +#include +#include + +#include + +class KStandardDirs; +class KConfig; + +/// defines the syntax version used by the XML +#define SYNTAX_VERSION 1 + +/** + * The base class representing a KDE theme. The data are stored internally + * in a DOM tree and accessed using the member methods. + * + * @brief Class representing a theme + * @author Lukas Tinkl + */ +class KTheme +{ +public: + /** + * Constructs KTheme using an installed theme + * @param xmlFile The theme's XML file + */ + KTheme( QWidget *parent, const QString & xmlFile ); + + /** + * Constructs an empty theme, to be used with + * #createYourself() + * @param create Whether to start the DOM tree + */ + KTheme( QWidget *parent, bool create = false ); + + /** + * Destructor + */ + ~KTheme(); + + /** + * Download from @p url, unpack the tarball and load the theme definition + * + * @return true on success + */ + bool load( const KURL & url ); + + /** + * Creates a snapshot of the current configuration in the work directory + * (used for getting the defaults or to create a new user theme). + * @param pack Whether to also pack the theme in tar.gz format + * @return The path to the newly created tarball with theme (if @p pack == true) + */ + QString createYourself( bool pack = false ); + + /** + * Apply the theme to the system, ie. set the config variables and + * adjust file paths + */ + void apply(); + + /** + * Uninstall the theme from the system + * @param name The name of the theme + * @return true on success + */ + static bool remove( const QString & name ); + + /** + * @return the theme name + */ + QString name() const { return m_name; } + /** + * Set the theme name + */ + void setName( const QString & name ); + + QString author() const { + return getProperty( "author" ); + } + void setAuthor( const QString & author ); + + QString email() const { + return getProperty( "email" ); + } + void setEmail( const QString & email ); + + QString homepage() const { + return getProperty( "homepage" ); + } + void setHomepage( const QString & homepage ); + + QString comment() const { + return getProperty( "comment" ); + } + void setComment ( const QString & comment ); + + QString version() const { + return getProperty( "version" ); + } + void setVersion ( const QString & version ); + + /** + * Creates a preview file called theme_name.preview.png + * (i.e. takes a snapshot of the current desktop) + */ + void addPreview(); + +private: + /** + * Create a property with @p name, value @p value + * and append it to @p parent element + */ + void setProperty( const QString & name, + const QString & value, + QDomElement parent ); + /** + * Get a simple property from the "general" section of the DOM tree + */ + QString getProperty( const QString & name ) const; + + /** + * Get a property from the DOM tree, based on: + * @param parent Parent tag + * @param tag From the this tag + * @param attr From this attribute + */ + QString getProperty( QDomElement parent, const QString & tag, + const QString & attr ) const; + + /** + * Creates a list of "icon" elements based on: + * @param group The group in the KConfig object @p cfg + * @param object Specifier (similiar, but not identical to @p group) + * @param parent Parent element to append to + * @param cfg The KConfig object to work with + */ + void createIconElems( const QString & group, const QString & object, + QDomElement parent, KConfig * cfg ); + + /** + * Creates a color DOM element @p name, with a specifier @p object, + * appends it to @p parent; used when creating themes + * @param cfg The KConfig object to work with + */ + void createColorElem( const QString & name, const QString & object, + QDomElement parent, KConfig * cfg ); + /** + * Creates a list of "event" elements based on: + * @param events The list of events to work on + * @param object Specifier (currently "global" or "kwin") + * @param parent Parent element to append to + * @param cfg The KConfig object to work with + */ + void createSoundList( const QStringList & events, const QString & object, + QDomElement parent, KConfig * cfg ); + + /** + * Tries to find out absolute path to a resource and copy it to the theme's temp dir; + * used when creating themes + * @param section The theme section to work on, corresponds to toplevel XML tags + * @param path The original path, relative or absolute + * @return an internal path suitable for writing into the XML file or QString::null + * in case the resource couldn't be found + */ + QString processFilePath( const QString & section, const QString & path ); + + /** + * Converts an internal theme:/ representation of a resource + * to a real path + */ + QString unprocessFilePath( const QString & section, QString path ); + + /** + * Wrapper around KIO::NetAccess::file_copy + */ + bool copyFile( const QString & from, const QString & to ); + + /** + * Wrapper around KGlobal::dirs()->findResource() + * @param section Section to work on (desktop, sounds, panel etc) + * @param path The file to find + */ + QString findResource( const QString & section, const QString & path ); + + /// name of the theme + QString m_name; + + /// DOM holding the theme + QDomDocument m_dom; + /// the DOM root element + QDomElement m_root; + /// "general" section + QDomElement m_general; + + KStandardDirs * m_kgd; + + QGuardedPtr m_parent; +}; + +#endif diff --git a/kcontrol/kthememanager/kthemedlg.ui b/kcontrol/kthememanager/kthemedlg.ui new file mode 100644 index 000000000..4b46fdc26 --- /dev/null +++ b/kcontrol/kthememanager/kthemedlg.ui @@ -0,0 +1,518 @@ + +KThemeDlg +Lukas Tinkl <lukas@kde.org> + + + KThemeDlg + + + + 0 + 0 + 687 + 382 + + + + + 3 + 3 + 0 + 0 + + + + + unnamed + + + 0 + + + + layout2 + + + + unnamed + + + + textLabel1 + + + NoFrame + + + Plain + + + Choose your visual KDE theme: + + + + + spacer2 + + + Horizontal + + + MinimumExpanding + + + + 170 + 20 + + + + + + lbGet + + + Get new themes... + + + http://themes.kde.org + + + Go to the KDE themes website + + + true + + + + + + + layout1 + + + + unnamed + + + + lbPreview + + + + 5 + 5 + 1 + 0 + + + + Box + + + AlignCenter + + + + + btnRemove + + + &Remove Theme + + + + + btnCreate + + + Create &New Theme... + + + + + btnInstall + + + &Install New Theme... + + + + + + Theme + + + true + + + false + + + + lvThemes + + + + 7 + 7 + 0 + 0 + + + + true + + + AllColumns + + + + + + + line1 + + + HLine + + + Sunken + + + Horizontal + + + + + textLabel1_2 + + + Customize your theme: + + + + + layout4 + + + + unnamed + + + + btnBackground + + + + 5 + 0 + 0 + 0 + + + + + 80 + 60 + + + + + 32767 + 60 + + + + TabFocus + + + + + + true + + + Background + + + Customize the desktop background + + + + + btnColors + + + + 5 + 0 + 0 + 0 + + + + + 80 + 60 + + + + + 32767 + 60 + + + + TabFocus + + + + + + true + + + Colors + + + Customize colors + + + + + btnStyle + + + + 5 + 0 + 0 + 0 + + + + + 80 + 60 + + + + + 32767 + 60 + + + + TabFocus + + + + + + true + + + Style + + + Customize the widget style + + + + + btnIcons + + + + 5 + 0 + 0 + 0 + + + + + 80 + 60 + + + + + 32767 + 60 + + + + TabFocus + + + + + + true + + + Icons + + + Customize the icon theme + + + + + btnFonts + + + + 5 + 0 + 0 + 0 + + + + + 80 + 60 + + + + + 32767 + 60 + + + + TabFocus + + + + + + true + + + Fonts + + + Customize the font theme + + + + + btnSaver + + + + 5 + 0 + 0 + 0 + + + + + 80 + 60 + + + + + 32767 + 60 + + + + TabFocus + + + + + + true + + + Screen Saver + + + Customize the screen saver + + + + + + + + + lbGet + leftClickedURL(const QString&) + KThemeDlg + startKonqui(const QString&) + + + btnBackground + clicked() + KThemeDlg + startBackground() + + + btnColors + clicked() + KThemeDlg + startColors() + + + btnStyle + clicked() + KThemeDlg + startStyle() + + + btnIcons + clicked() + KThemeDlg + startIcons() + + + btnFonts + clicked() + KThemeDlg + startFonts() + + + btnSaver + clicked() + KThemeDlg + startSaver() + + + + lvThemes + btnInstall + btnRemove + btnCreate + btnBackground + btnColors + btnStyle + btnIcons + btnFonts + btnSaver + + + kthemedlg.ui.h + + + startKonqui( const QString & url ) + startBackground() + startColors() + startStyle() + startIcons() + startFonts() + startSaver() + + + + kurllabel.h + + diff --git a/kcontrol/kthememanager/kthemedlg.ui.h b/kcontrol/kthememanager/kthemedlg.ui.h new file mode 100644 index 000000000..53f296a1c --- /dev/null +++ b/kcontrol/kthememanager/kthemedlg.ui.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename functions or slots use +** Qt Designer which will update this file, preserving your code. Create an +** init() function in place of a constructor, and a destroy() function in +** place of a destructor. +*****************************************************************************/ +#include + +void KThemeDlg::startKonqui( const QString & url ) +{ + (void) new KRun(url); +} + + +void KThemeDlg::startBackground() +{ + KRun::runCommand("kcmshell kde-background"); +} + + +void KThemeDlg::startColors() +{ + KRun::runCommand("kcmshell kde-colors"); +} + + +void KThemeDlg::startStyle() +{ + KRun::runCommand("kcmshell kde-style"); +} + + +void KThemeDlg::startIcons() +{ + KRun::runCommand("kcmshell kde-icons"); +} + +void KThemeDlg::startFonts() +{ + KRun::runCommand("kcmshell kde-fonts"); +} + + +void KThemeDlg::startSaver() +{ + KRun::runCommand("kcmshell kde-screensaver"); +} diff --git a/kcontrol/kthememanager/kthememanager.cpp b/kcontrol/kthememanager/kthememanager.cpp new file mode 100644 index 000000000..d5efc65cd --- /dev/null +++ b/kcontrol/kthememanager/kthememanager.cpp @@ -0,0 +1,425 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* Copyright (C) 2003 Lukas Tinkl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kthememanager.h" +#include "knewthemedlg.h" +#include "config.h" + +kthememanager::kthememanager( QWidget *parent, const char *name ) + : KCModule( parent, name ), m_theme( 0 ), m_origTheme( 0 ) +{ + + KAboutData *about = new KAboutData("kthememanager", I18N_NOOP("KDE Theme Manager"), + "0.4", I18N_NOOP("This control module handles installing, removing and " + "creating visual KDE themes."), + KAboutData::License_GPL, "(c) 2003, 2004, 2006 Lukáš Tinkl", 0, + "http://developer.kde.org/~lukas/kthememanager"); + setAboutData( about ); + + setQuickHelp( i18n("This control module handles installing, removing and " + "creating visual KDE themes.")); + + setButtons( KCModule::Default|KCModule::Apply|KCModule::Help ); + + setAcceptDrops( true ); + init(); + + QBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + dlg = new KThemeDlg(this); + top->addWidget( dlg ); + + dlg->lvThemes->setColumnWidthMode( 0, QListView::Maximum ); + + connect( ( QObject * )dlg->btnInstall, SIGNAL( clicked() ), + this, SLOT( slotInstallTheme() ) ); + + connect( ( QObject * )dlg->btnRemove, SIGNAL( clicked() ), + this, SLOT( slotRemoveTheme() ) ); + + connect( ( QObject * )dlg->btnCreate, SIGNAL( clicked() ), + this, SLOT( slotCreateTheme() ) ); + + connect( ( QObject * )dlg->lvThemes, SIGNAL( clicked( QListViewItem * ) ), + this, SLOT( slotThemeChanged( QListViewItem * ) ) ); + + connect( ( QObject * )dlg->lvThemes, SIGNAL( currentChanged( QListViewItem * ) ), + this, SLOT( slotThemeChanged( QListViewItem * ) ) ); + + connect( this, SIGNAL( filesDropped( const KURL::List& ) ), + this, SLOT( updateButton() ) ); + + connect( ( QObject * )dlg->lvThemes, SIGNAL( clicked( QListViewItem * ) ), + this, SLOT( updateButton() ) ); + + m_origTheme = new KTheme( this, true ); // stores the defaults to get back to + m_origTheme->setName( ORIGINAL_THEME ); + m_origTheme->createYourself(); + + load(); + queryLNFModules(); + updateButton(); +} + +kthememanager::~kthememanager() +{ + delete m_theme; + delete m_origTheme; +} + +void kthememanager::init() +{ + KGlobal::dirs()->addResourceType( "themes", KStandardDirs::kde_default("data") + + "kthememanager/themes/" ); +} + +void kthememanager::updateButton() +{ + QListViewItem * cur = dlg->lvThemes->currentItem(); + bool enable = (cur != 0); + if (enable) { + enable = QFile(KGlobal::dirs()->saveLocation( "themes", cur->text( 0 ) + "/"+ cur->text( 0 )+ ".xml" ,false)).exists() ; + } + dlg->btnRemove->setEnabled(enable); +} + +void kthememanager::load() +{ + load( false ); +} + +void kthememanager::load(bool useDefaults) +{ + listThemes(); + + // Load the current theme name + KConfig conf("kcmthememanagerrc", false, false); + + conf.setReadDefaults( useDefaults ); + + conf.setGroup( "General" ); + QString themeName = conf.readEntry( "CurrentTheme" ); + QListViewItem * cur = dlg->lvThemes->findItem( themeName, 0 ); + if ( cur ) + { + dlg->lvThemes->setSelected( cur, true ); + dlg->lvThemes->ensureItemVisible( cur ); + slotThemeChanged( cur ); + } + + emit changed( true ); +} + +void kthememanager::defaults() +{ + load( true ); +} + +void kthememanager::save() +{ + QListViewItem * cur = dlg->lvThemes->currentItem(); + + if ( cur ) + { + QString themeName = cur->text( 0 ); + + m_theme = new KTheme( this, KGlobal::dirs()->findResource( "themes", themeName + "/" + themeName + ".xml") ); + m_theme->apply(); + + // Save the current theme name + KConfig conf("kcmthememanagerrc", false, false); + conf.setGroup( "General" ); + conf.writeEntry( "CurrentTheme", themeName ); + conf.sync(); + + delete m_theme; + m_theme = 0; + + } +} + +void kthememanager::listThemes() +{ + dlg->lvThemes->clear(); + dlg->lbPreview->setPixmap( QPixmap() ); + + QStringList themes = KGlobal::dirs()->findAllResources( "themes", "*.xml", true /*recursive*/ ); + + QStringList::const_iterator it; + + for ( it = themes.begin(); it != themes.end(); ++it ) + { + KTheme theme( this, ( *it ) ); + QString name = theme.name(); + if ( name != ORIGINAL_THEME ) // skip the "original" theme + ( void ) new QListViewItem( dlg->lvThemes, name, theme.comment() ); + } + + kdDebug() << "Available themes: " << themes << endl; +} + +float kthememanager::getThemeVersion( const QString & themeName ) +{ + QStringList themes = KGlobal::dirs()->findAllResources( "themes", "*.xml", true /*recursive*/ ); + + QStringList::const_iterator it; + + for ( it = themes.begin(); it != themes.end(); ++it ) + { + KTheme theme( 0L, ( *it ) ); + QString name = theme.name(); + bool ok = false; + float version = theme.version().toFloat( &ok ); + if ( name == themeName && ok ) + return version; + } + + return -1; +} + +void kthememanager::slotInstallTheme() +{ + addNewTheme( KFileDialog::getOpenURL( ":themes", "*.kth|" + i18n("Theme Files"), this, + i18n( "Select Theme File" ) ) ); +} + +void kthememanager::addNewTheme( const KURL & url ) +{ + if ( url.isValid() ) + { + QString themeName = QFileInfo( url.fileName() ).baseName(); + if ( getThemeVersion( themeName ) != -1 ) // theme exists already + { + KTheme::remove( themeName ); // remove first + } + + m_theme = new KTheme(this); + if ( m_theme->load( url ) ) + { + listThemes(); + emit changed( true ); + } + + delete m_theme; + m_theme = 0; + updateButton(); + } +} + +void kthememanager::slotRemoveTheme() +{ + // get the selected item from the listview + QListViewItem * cur = dlg->lvThemes->currentItem(); + // ask and remove it + if ( cur ) + { + QString themeName = cur->text( 0 ); + if ( KMessageBox::warningContinueCancel( this, "" + i18n( "Do you really want to remove the theme %1?" ).arg( themeName ), + i18n( "Remove Theme" ), KGuiItem( i18n( "&Remove" ), "editdelete" ) ) + == KMessageBox::Continue ) + { + KTheme::remove( themeName ); + listThemes(); + } + updateButton(); + } +} + +bool kthememanager::themeExist(const QString &_themeName) +{ + return ( dlg->lvThemes->findItem( _themeName, 0 )!=0 ); +} + +void kthememanager::slotCreateTheme() +{ + KNewThemeDlg dlg( this ); + + KEMailSettings es; + es.setProfile( es.defaultProfileName() ); + + dlg.setName( i18n( "My Theme" ) ); + dlg.setAuthor( es.getSetting( KEMailSettings::RealName ) ) ; + dlg.setEmail( es.getSetting( KEMailSettings::EmailAddress ) ); + dlg.setVersion( "0.1" ); + + if ( dlg.exec() == QDialog::Accepted ) + { + + QString themeName = dlg.getName(); + if ( themeExist(themeName) ) + { + KMessageBox::information( this, i18n( "Theme %1 already exists." ).arg( themeName ) ); + } + else + { + if ( getThemeVersion( themeName ) != -1 ) // remove the installed theme first + { + KTheme::remove( themeName ); + } + m_theme = new KTheme( this, true ); + m_theme->setName( dlg.getName() ); + m_theme->setAuthor( dlg.getAuthor() ); + m_theme->setEmail( dlg.getEmail() ); + m_theme->setHomepage( dlg.getHomepage() ); + m_theme->setComment( dlg.getComment().replace( "\n", "" ) ); + m_theme->setVersion( dlg.getVersion() ); + + QString result = m_theme->createYourself( true ); + m_theme->addPreview(); + + if ( !result.isEmpty() ) + KMessageBox::information( this, i18n( "Your theme has been successfully created in %1." ).arg( result ), + i18n( "Theme Created" ), "theme_created_ok" ); + else + KMessageBox::error( this, i18n( "An error occurred while creating your theme." ), + i18n( "Theme Not Created" ) ); + delete m_theme; + m_theme = 0; + + listThemes(); + } + } +} + +void kthememanager::slotThemeChanged( QListViewItem * item ) +{ + if ( item ) + { + QString themeName = item->text(0); + kdDebug() << "Activated theme: " << themeName << endl; + + QString themeDir = KGlobal::dirs()->findResourceDir( "themes", themeName + "/" + themeName + ".xml") + themeName + "/"; + + QString pixFile = themeDir + themeName + ".preview.png"; + + if ( QFile::exists( pixFile ) ) + { + updatePreview( pixFile ); + } + else + { + dlg->lbPreview->setPixmap( QPixmap() ); + dlg->lbPreview->setText( i18n( "This theme does not contain a preview." ) ); + } + + KTheme theme( this, themeDir + themeName + ".xml" ); + QToolTip::remove( dlg->lbPreview ); + QToolTip::add( dlg->lbPreview, "" + i18n( "Author: %1
      Email: %2
      Version: %3
      Homepage: %4" ) + .arg( theme.author() ).arg( theme.email() ) + .arg( theme.version() ).arg( theme.homepage() ) + "
      "); + + emit changed( true ); + } +} + +void kthememanager::dragEnterEvent( QDragEnterEvent * ev ) +{ + ev->accept( KURLDrag::canDecode( ev ) ); +} + +void kthememanager::dropEvent( QDropEvent * ev ) +{ + KURL::List urls; + if ( KURLDrag::decode( ev, urls ) ) + { + emit filesDropped( urls ); + } +} + +void kthememanager::slotFilesDropped( const KURL::List & urls ) +{ + for ( KURL::List::ConstIterator it = urls.begin(); it != urls.end(); ++it ) + addNewTheme( *it ); +} + +void kthememanager::queryLNFModules() +{ + /*KServiceGroup::Ptr settings = KServiceGroup::group( "Settings/LookNFeel/" ); + if ( !settings || !settings->isValid() ) + return; + + KServiceGroup::List list = settings->entries(); + + // Iterate over all entries in the group + for( KServiceGroup::List::ConstIterator it = list.begin(); + it != list.end(); it++ ) + { + KSycocaEntry *p = ( *it ); + if ( p->isType( KST_KService ) ) + { + KService *s = static_cast( p ); + ( void ) new KThemeDetailsItem( dlg->lvDetails, s->name(), s->pixmap( KIcon::Desktop ), s->exec() ); + } + } + + dlg->lvDetails->sort();*/ + + // For now use a static list + KIconLoader * il = KGlobal::iconLoader(); + dlg->btnBackground->setIconSet( il->loadIconSet( "background", KIcon::Desktop, 32 ) ); + dlg->btnColors->setIconSet( il->loadIconSet( "colorscm", KIcon::Desktop, 32 ) ); + dlg->btnStyle->setIconSet( il->loadIconSet( "style", KIcon::Desktop, 32 ) ); + dlg->btnIcons->setIconSet( il->loadIconSet( "icons", KIcon::Desktop, 32 ) ); + dlg->btnFonts->setIconSet( il->loadIconSet( "fonts", KIcon::Desktop, 32 ) ); + dlg->btnSaver->setIconSet( il->loadIconSet( "kscreensaver", KIcon::Desktop, 32 ) ); +} + +void kthememanager::updatePreview( const QString & pixFile ) +{ + kdDebug() << "Preview is in file: " << pixFile << endl; + QImage preview( pixFile, "PNG" ); + if (preview.width()>dlg->lbPreview->contentsRect().width() || + preview.height()>dlg->lbPreview->contentsRect().height() ) + preview = preview.smoothScale( dlg->lbPreview->contentsRect().size(), QImage::ScaleMin ); + QPixmap pix; + pix.convertFromImage( preview ); + dlg->lbPreview->setPixmap( pix ); +} + +extern "C" +{ + KDE_EXPORT KCModule *create_kthememanager(QWidget *parent, const char *) + { + KGlobal::locale()->insertCatalogue( "kthememanager" ); + return new kthememanager( parent, "kthememanager" ); + } +} + +#include "kthememanager.moc" diff --git a/kcontrol/kthememanager/kthememanager.desktop b/kcontrol/kthememanager/kthememanager.desktop new file mode 100644 index 000000000..d4c37c965 --- /dev/null +++ b/kcontrol/kthememanager/kthememanager.desktop @@ -0,0 +1,220 @@ +[Desktop Entry] +Comment=Manage global KDE visual themes +Comment[af]=Bestuurder KDE se globale visuele temas +Comment[az]=Qlobal KDE əyani örtüklərini idarə et +Comment[be]=Кіраванне глабальнымі візуальнымі тэмамі KDE +Comment[bg]=Управление на темите +Comment[bn]=গ্লোবাল কে.ডি.ই. ভিসুয়াল থীম ব্যবস্থাপনা +Comment[bs]=Upravljanje globalnim KDE vizuelnim temama +Comment[ca]=Gestiona els temes visuals globals del KDE +Comment[cs]=Správce motivů pracovní plochy +Comment[csb]=Sprôwiôj témą KDE +Comment[cy]=Rheoli themau gweledol KDE eang +Comment[da]=Håndtering af globale visuelle temaer for KDE +Comment[de]=Globale KDE-Designs verwalten +Comment[el]=Διαχειριστής καθολικών οπτικών θεμάτων του KDE +Comment[eo]=Administras mondan KDEan etosoj +Comment[es]=Gestión global de los temas visuales de KDE +Comment[et]=KDE globaalsete teemade haldur +Comment[eu]=Kudeatu KDEren gai bisual orokorrak +Comment[fa]=مدیریت چهره‌های مرئی KDE سراسری +Comment[fi]=Ylläpidä KDE:n teemoja +Comment[fr]=Gestionnaire de thèmes visuels globaux de KDE +Comment[fy]=Algemiene fisuele tema's fan KDE beheare +Comment[gl]=Xestionar temas visuais globais de KDE +Comment[he]=מנהל ערכות נושא גלובליות עבור KDE +Comment[hi]=वैश्विक केडीई दृश्यमय प्रसंग प्रबंधित करें +Comment[hr]=Upravljanje općim KDE vizualnim temama +Comment[hu]=KDE-témák kezelése +Comment[is]=Stjórna víðværum KDE þemum +Comment[it]=Gestore dei temi globali di KDE +Comment[ja]=グローバル KDE 外観テーマの管理 +Comment[ka]=KDE-ს ვიზუალური თემბის გლობალური მენეჯმენტი +Comment[kk]=KDE жалпы көрініс нақыштарын басқару +Comment[km]=គ្រប់គ្រង​ស្បែក​រូបភាព KDE ទាំងអស់ +Comment[ko]=전역 KDE 시각 테마 관리 +Comment[lt]=Globaliai tvarkyti KDE vizualines temas +Comment[lv]=KDE izskata tēmu pārvaldīšana +Comment[mk]=Менаџирајте ги глобалните KDE визуелни теми +Comment[ms]=Urus tema visual KDE global +Comment[mt]=Immaniġġja temi viżwali globali tal-KDE +Comment[nb]=Velg blant KDE-temaer for hele brukerflaten +Comment[nds]=Globale KDE-Muster instellen +Comment[ne]=विश्वव्यापी KDE दृश्य विषयवस्तु व्यवस्थापन गर्नुहोस् +Comment[nl]=Algemene visuele thema's van KDE beheren +Comment[nn]=Vel mellom KDE-tema for heile brukarflata +Comment[pa]=ਮੁੱਢਲੇ KDE ਦਿੱਖ ਸਰੂਪ ਪਰਬੰਧ +Comment[pl]=Zarządzaj motywami KDE +Comment[pt]=Gestão global de temas visuais do KDE +Comment[pt_BR]=Gerencia temas globais do KDE +Comment[ro]=Administrează tematicile vizuale KDE globale +Comment[ru]=Менеджер глобальных визуальных тем KDE +Comment[rw]=Kuyobora insanganyamatsiko igaragara KDE rusange +Comment[se]=Hálddaš oppalaš visuella KDE-fáttáid +Comment[sk]=Globálny správca tém +Comment[sl]=Upravitelj vizualnih tem za KDE +Comment[sr]=Управљање KDE-овим визуелним темама +Comment[sr@Latn]=Upravljanje KDE-ovim vizuelnim temama +Comment[sv]=Hantera KDE:s allmänna visuella teman +Comment[ta]=பொது KDE காட்சி பொருளை மேல்பார்வையிடு +Comment[tg]=Мудири мавзӯъҳои визуалии KDE дар шабака +Comment[th]=จัดการชุดตกแต่งของ KDE +Comment[tr]=Evrensel KDE ekran temalarını yönet +Comment[tt]=KDE'nıñ tışlaw törlären caylaw idäräse +Comment[uk]=Керування глобальними темами KDE +Comment[vi]=Trình quản lý các sắc thái của KDE +Comment[wa]=Manaedjî tinmes pol rivnance globåle di KDE +Comment[zh_CN]=管理全局 KDE 视觉主题 +Comment[zh_TW]=管理全域 KDE 視覺佈景 +Exec=kcmshell kthememanager +Icon=kthememgr +Keywords=themes,look and feel +Keywords[af]=themes,look and feel,temas +Keywords[ar]=سمات,المظهر و الإحساس +Keywords[az]=örtüklər,görünüş,örtük,theme,look +Keywords[be]=Тэмы,Вонкавы выгляд,themes,look and feel +Keywords[bg]=теми, вид, themes, look and feel +Keywords[br]=gizioù,Neuz ha feson +Keywords[bs]=themes,look and feel,teme,izgled,osjećaj +Keywords[ca]=temes,aspecte i efecte +Keywords[cs]=motivy,vzhled a chování +Keywords[csb]=téma,wëzdrzatk +Keywords[cy]=themau,golwg a theimlad +Keywords[da]=temaer,udseende +Keywords[de]=Designs,Themes,Erscheinungsbild +Keywords[el]=θέματα,εμφάνιση και αίσθηση +Keywords[eo]=etoso,etosoj,videbleco,uzebleco +Keywords[es]=temas,aspecto y comportamiento +Keywords[et]=teemad,välimus +Keywords[eu]=gaiak,itxura eta portaera +Keywords[fa]=چهره‌ها، ظاهر و احساس +Keywords[fi]=teemat,ulkonäkö ja tuntuma +Keywords[fr]=thèmes,apparence et ergonomie +Keywords[fy]=tema's,úterlik en gedrach +Keywords[ga]=téamaí,cuma +Keywords[gl]=temas,apariencia +Keywords[he]=ערכות, מראה ותחושה, themes,look and feel +Keywords[hi]=प्रसंग, रूप तथा आकार +Keywords[hr]=themes,look and feel,izgled i osjećaj,teme +Keywords[hu]=témák,megjelenés +Keywords[it]=temi,aspetto +Keywords[ja]=テーマ,look and feel,外観,ルックアンドフィール +Keywords[km]=ស្បែក,រូបរាង និង​មុខងារ +Keywords[lt]=themes,look and feel,temos,išvaizda ir jausena +Keywords[lv]=tēmas,izskats un sajūtas +Keywords[mk]=themes,look and feel,теми,изглед и чувство +Keywords[ms]=tema, rupa dan rasa +Keywords[mt]=themes,look and feel,temi,dehra +Keywords[nb]=temaer,utseende og oppførsel +Keywords[nds]=Muster,themes,Themas,look and feel,Achtergrund,Klören,Klöörschemas,Schemas,Klöörschema +Keywords[ne]=विषयवस्तु, हेराइ र बुझाइ +Keywords[nl]=thema's,uiterlijk en gedrag +Keywords[nn]=tema,utsjånad og åtferd +Keywords[pa]=ਸਰੂਪ,ਦਿੱਖ ਅਤੇ ਛੋਹ +Keywords[pl]=motywy,wygląd +Keywords[pt]=temas,aparência e comportamento +Keywords[pt_BR]=temas,aparência +Keywords[ro]=tematici,apect,grafică +Keywords[rw]=Insanganyamatsiko,imboneko n'ukumva +Keywords[se]=fáttát,fárda ja láhtten +Keywords[sk]=témy,vzhľad +Keywords[sl]=teme,videz in občutek +Keywords[sr]=themes,look and feel,теме,изглед и осећај,изглед +Keywords[sr@Latn]=themes,look and feel,teme,izgled i osećaj,izgled +Keywords[sv]=teman,utseende och känsla +Keywords[ta]=உரைபொருள்,பார் மற்றும் உணர்ணர் +Keywords[th]=ชุดตกแต่ง,รูปแบบและสัมผัส +Keywords[tr]=temalar,görünüm ve hisset +Keywords[uk]=теми,вигляд та поведінка +Keywords[uz]=mavzular,tashqi koʻrinishi +Keywords[uz@cyrillic]=мавзулар,ташқи кўриниши +Keywords[vi]=sắc thái,cảm nhận +Keywords[wa]=tinmes,rivnance +Keywords[zh_CN]=themes,look and feel,主题,观感 +Keywords[zh_TW]=themes,look and feel,主題,外觀與感覺 +Name=Theme Manager +Name[af]=Tema Bestuurder +Name[ar]=مسيير السمات +Name[az]=Örtük İdarəcisi +Name[be]=Кіраванне тэмамі +Name[bg]=Мениджър на теми +Name[bn]=থীম ম্যানেজার +Name[br]=Merour gwiskadoù +Name[bs]=Upravitelj temama +Name[ca]=Gestor de temes +Name[cs]=Správce motivů +Name[csb]=Menedżer témów +Name[cy]=Rheolwr Thema +Name[da]=Temahåndtering +Name[de]=Designverwaltung +Name[el]=Διαχειριστής θεμάτων +Name[eo]=Etosadministrilo +Name[es]=Gestor de temas +Name[et]=Teemahaldur +Name[eu]=Gai kudeatzailea +Name[fa]=مدیر چهره +Name[fi]=Teemanhallinta +Name[fr]=Gestionnaire de thèmes +Name[fy]=Temabehearder +Name[ga]=Bainisteoir na dTéamaí +Name[gl]=Xestor de Temas +Name[he]=מנהל ערכות נושא +Name[hi]=प्रसंग प्रबंधक +Name[hr]=Upravljanje temama +Name[hu]=Témák +Name[id]=Manajer Theme +Name[is]=Þemustjóri +Name[it]=Gestore dei temi +Name[ja]=テーママネージャ +Name[ka]=თემების მენეჯერი +Name[kk]=Нақыштар менеджері +Name[km]=កម្មវិធី​គ្រប់គ្រង​ស្បែក +Name[ko]=테마 관리자 +Name[lo]=ເຄື່ອງມືຈັດການ ທີມ +Name[lt]=Temų tvarkyklė +Name[lv]=Tēmu Menedžeris +Name[mk]=Менаџер на теми +Name[mn]=Загвар-Удирлагч +Name[ms]=Pengurus Tema +Name[mt]=Manager tat-Temi +Name[nb]=Temabehandler +Name[nds]=Musterpleger +Name[ne]=विषयवस्तु प्रबन्धक +Name[nl]=Themabeheerder +Name[nn]=Temahandsamar +Name[nso]=Molaodi wa Molaetsa +Name[oc]=Gestionari de temes +Name[pa]=ਸਰੂਪ ਮੈਨੇਜਰ +Name[pl]=Menedżer motywów +Name[pt]=Gestor de Temas +Name[pt_BR]=Gerenciador de Temas +Name[ro]=Managerul de tematică +Name[ru]=Менеджер тем +Name[rw]=Mugenga Insanganyamatsiko +Name[se]=Fáddagieđahalli +Name[sk]=Správca tém +Name[sl]=Upravitelj tem +Name[sr]=Менаџер тема +Name[sr@Latn]=Menadžer tema +Name[ss]=Siphatsi sendzikimba +Name[sv]=Temahanterare +Name[ta]=பொருள் மேலாளர் +Name[tg]=Мудири мавзӯъ +Name[th]=เครื่องมือจัดการชุดตกแต่ง +Name[tr]=Tema Yöneticisi +Name[tt]=Tışlaw İdäräçe +Name[uk]=Менеджер тем +Name[uz]=Mavzu boshqaruvchisi +Name[uz@cyrillic]=Мавзу бошқарувчиси +Name[ven]=Mulanguli wa thero +Name[vi]=Trình quản lí sắc thái +Name[wa]=Manaedjeu di tinmes +Name[xh]=Umphathi Womxholo +Name[zh_CN]=主题管理器 +Name[zh_TW]=佈景管理程式 +Name[zu]=Imenenja Yengqikithi +Terminal=false +Type=Application +X-KDE-FactoryName=kthememanager +X-KDE-Library=kthememanager +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/kthememanager/kthememanager.h b/kcontrol/kthememanager/kthememanager.h new file mode 100644 index 000000000..972251f6a --- /dev/null +++ b/kcontrol/kthememanager/kthememanager.h @@ -0,0 +1,157 @@ +// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* Copyright (C) 2003 Lukas Tinkl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef KTHEMEMANAGER_H +#define KTHEMEMANAGER_H + +#include +#include +#include +#include + +#include "kthemedlg.h" +#include "ktheme.h" + +class QString; + +class KAboutData; + +#define ORIGINAL_THEME "original" // no i18n() here!!! + +/* +class KIconViewItem; + +class KThemeDetailsItem: public KIconViewItem +{ +public: + KThemeDetailsItem( KIconView * parent, const QString & text, const QPixmap & icon, const QString & execString ) + : KIconViewItem( parent, text, icon ) { m_exec = execString; } + virtual ~KThemeDetailsItem() { }; + + void exec() { + ( void ) new KRun( m_exec ); + } +private: + QString m_exec; +}; +*/ + +/** + * + * This is the for KControl config module for installing, + * creating and removing visual themes. + * + * @brief The Theme Manager config module. + * @author Lukas Tinkl + */ +class kthememanager: public KCModule +{ + Q_OBJECT +public: + kthememanager( QWidget *parent=0, const char *name=0 ); + virtual ~kthememanager(); + + /** + * Called on module startup + */ + virtual void load(); + virtual void load(bool useDefaults); + /** + * Called when applying the changes + */ + virtual void save(); + /** + * Called when the user requests the default values + */ + virtual void defaults(); + +protected: + void dragEnterEvent ( QDragEnterEvent * ev ); + void dropEvent ( QDropEvent * ev ); + +signals: + /** + * Emitted when some @p urls are dropped onto the kcm + */ + void filesDropped(const KURL::List &urls); + +private slots: + /** + * Install a theme from a tarball (*.kth) + */ + void slotInstallTheme(); + + /** + * Remove an installed theme + */ + void slotRemoveTheme(); + + /** + * Create a new theme + */ + void slotCreateTheme(); + + /** + * Update the theme's info and preview + */ + void slotThemeChanged( QListViewItem * item ); + + /** + * Invoked when one drag and drops @p urls onto the kcm + * @see signal filesDropped + */ + void slotFilesDropped( const KURL::List & urls ); + void updateButton(); + +private: + /** + * List themes available in the system and insert them into the listview. + */ + void listThemes(); + + /** + * Performs the actual theme installation. + */ + void addNewTheme( const KURL & url ); + + /** + * Perform internal initialization of paths. + */ + void init(); + + /** + * Try to find out whether a theme is installed and get its version number + * @param themeName The theme name + * @return The theme's version number or -1 if not installed + */ + static float getThemeVersion( const QString & themeName ); + + void queryLNFModules(); + + /** + * Updates the preview widget + */ + void updatePreview( const QString & pixFile ); + bool themeExist(const QString &_themeName); + KThemeDlg * dlg; + + KTheme * m_theme; + KTheme * m_origTheme; +}; + +#endif diff --git a/kcontrol/kthememanager/newthemewidget.ui b/kcontrol/kthememanager/newthemewidget.ui new file mode 100644 index 000000000..905b0749a --- /dev/null +++ b/kcontrol/kthememanager/newthemewidget.ui @@ -0,0 +1,130 @@ + +NewThemeWidget +Lukas Tinkl <lukas@kde.org> + + + NewThemeWidget + + + + 0 + 0 + 537 + 431 + + + + + unnamed + + + + textLabel1 + + + &Theme name: + + + leName + + + + + textLabel2 + + + &Author: + + + leAuthor + + + + + textLabel3 + + + &Email: + + + leEmail + + + + + textLabel4 + + + &Homepage: + + + leHomepage + + + + + leEmail + + + + + leName + + + + + leHomepage + + + + + leAuthor + + + + + textLabel5 + + + Co&mment: + + + AlignTop + + + teComment + + + + + teComment + + + + + leVersion + + + + + textLabel6 + + + &Version: + + + leVersion + + + + + + leName + leAuthor + leEmail + leHomepage + leVersion + teComment + + + diff --git a/kcontrol/kthememanager/x-ktheme.desktop b/kcontrol/kthememanager/x-ktheme.desktop new file mode 100644 index 000000000..6efaa20d6 --- /dev/null +++ b/kcontrol/kthememanager/x-ktheme.desktop @@ -0,0 +1,84 @@ +[Desktop Entry] +MimeType=application/x-ktheme +Comment=KDE Theme +Comment[af]=KDE Tema +Comment[ar]=سمة KDE +Comment[az]=KDE Örtüyü +Comment[be]=Тэма KDE +Comment[bg]=Тема за KDE +Comment[bn]=কে.ডি.ই. থীম +Comment[br]=Giz KDE +Comment[bs]=KDE tema +Comment[ca]=Tema KDE +Comment[cs]=KDE motiv +Comment[csb]=Téma KDE +Comment[cy]=Thema KDE +Comment[da]=KDE-tema +Comment[de]=KDE-Design +Comment[el]=Θέμα του KDE +Comment[eo]=KDEa etoso +Comment[es]=Tema de KDE +Comment[et]=KDE teema +Comment[fa]=چهرۀ KDE +Comment[fi]=KDE-teema +Comment[fr]=Thème KDE +Comment[fy]=KDE-tema +Comment[ga]=Téama KDE +Comment[gl]=Tema de KDE +Comment[he]=ערכת נושא של KDE +Comment[hi]=केडीई प्रसंग +Comment[hr]=KDE tema +Comment[hu]=KDE-téma +Comment[id]=Tema KDE +Comment[is]=KDE þema +Comment[it]=Tema KDE +Comment[ja]=KDE テーマ +Comment[ka]=KDE-ს თემა +Comment[kk]=KDE нақышы +Comment[km]=ស្បែក KDE +Comment[ko]=KDE 테마 설치 +Comment[lo]=ທີມຂອງ KDE +Comment[lt]=KDE Tema +Comment[lv]=KDE Tēma +Comment[mk]=KDE-тема +Comment[mn]=КДЭ-Хэлбэр +Comment[ms]=Tema KDE +Comment[mt]=Tema KDE +Comment[nb]=KDE-tema +Comment[nds]=KDE Muster +Comment[ne]=KDE विषयवस्तु +Comment[nl]=KDE-thema +Comment[nn]=KDE-tema +Comment[nso]=Molaetsa wa KDE +Comment[pa]=KDE ਸਰੂਪ +Comment[pl]=Motywy KDE +Comment[pt]=Tema do KDE +Comment[pt_BR]=Tema do KDE +Comment[ro]=Tematică KDE +Comment[ru]=Тема KDE +Comment[rw]=Insanganyamatsiko za KDE +Comment[se]=KDE-fáddá +Comment[sk]=Téma KDE +Comment[sl]=Tema KDE +Comment[sr]=KDE тема +Comment[sr@Latn]=KDE tema +Comment[sv]=KDE-tema +Comment[ta]=KDE பொருள் +Comment[tg]=Мавзӯъи KDE +Comment[th]=ชุดตกแต่ง KDE +Comment[tr]=KDE Teması +Comment[tt]=KDE Tışlawı +Comment[uk]=Тема KDE +Comment[uz]=KDE mavzusi +Comment[uz@cyrillic]=KDE мавзуси +Comment[ven]=Thero ya KDE +Comment[vi]=Sắc thái KDE +Comment[wa]=Tinme KDE +Comment[xh]=Umxholo we KDE +Comment[zh_CN]=KDE 主题 +Comment[zh_TW]=KDE 主題 +Comment[zu]=Ingqikithi ye-KDE +Icon=kthememgr +Type=MimeType +Patterns=*.kth; +X-KDE-AutoEmbed=false diff --git a/kcontrol/launch/Makefile.am b/kcontrol/launch/Makefile.am new file mode 100644 index 000000000..ce246f3d2 --- /dev/null +++ b/kcontrol/launch/Makefile.am @@ -0,0 +1,13 @@ + +kde_module_LTLIBRARIES = kcm_launch.la +AM_CPPFLAGS = $(all_includes) +kcm_launch_la_SOURCES = kcmlaunch.cpp +kcm_launch_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module +kcm_launch_la_LIBADD = $(LIB_KDEUI) +METASOURCES = AUTO +noinst_HEADERS = kcmlaunch.h +xdg_apps_DATA = kcmlaunch.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmlaunch.pot + diff --git a/kcontrol/launch/kcmlaunch.cpp b/kcontrol/launch/kcmlaunch.cpp new file mode 100644 index 000000000..24623a7ea --- /dev/null +++ b/kcontrol/launch/kcmlaunch.cpp @@ -0,0 +1,275 @@ +/* + * Copyright (C) 2001 Rik Hemsley (rikkus) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include "kcmlaunch.h" + +typedef KGenericFactory LaunchFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_launch, LaunchFactory("kcmlaunch") ) + + +LaunchConfig::LaunchConfig(QWidget * parent, const char * name, const QStringList &) + : KCModule(LaunchFactory::instance(), parent, name) +{ + QVBoxLayout* Form1Layout = new QVBoxLayout( this, 0, + KDialog::spacingHint() ); + + setQuickHelp( i18n ( "

      Launch Feedback

      " + " You can configure the application-launch feedback here.")); + + QGroupBox* GroupBox1 = new QGroupBox( this, "GroupBox1" ); + GroupBox1->setTitle( i18n( "Bus&y Cursor" ) ); + QWhatsThis::add(GroupBox1, i18n( + "

      Busy Cursor

      \n" + "KDE offers a busy cursor for application startup notification.\n" + "To enable the busy cursor, select one kind of visual feedback\n" + "from the combobox.\n" + "It may occur, that some applications are not aware of this startup\n" + "notification. In this case, the cursor stops blinking after the time\n" + "given in the section 'Startup indication timeout'")); + + GroupBox1->setColumnLayout(0, Qt::Vertical ); + GroupBox1->layout()->setSpacing( 0 ); + GroupBox1->layout()->setMargin( 0 ); + Form1Layout->addWidget( GroupBox1 ); + QGridLayout* GroupBox1Layout = new QGridLayout( GroupBox1->layout(), 3, 2 ); + GroupBox1Layout->setSpacing( 6 ); + GroupBox1Layout->setMargin( 11 ); + GroupBox1Layout->setColStretch( 1, 1 ); + + cb_busyCursor = new QComboBox( GroupBox1, "cb_busyCursor" ); + cb_busyCursor->insertItem( i18n( "No Busy Cursor" ), 0 ); + cb_busyCursor->insertItem( i18n( "Passive Busy Cursor" ), 1 ); + cb_busyCursor->insertItem( i18n( "Blinking Cursor" ), 2 ); + cb_busyCursor->insertItem( i18n( "Bouncing Cursor" ), 3 ); + GroupBox1Layout->addWidget( cb_busyCursor, 0, 0 ); + connect( cb_busyCursor, SIGNAL( activated(int) ), + SLOT ( slotBusyCursor(int))); + connect( cb_busyCursor, SIGNAL( activated(int) ), SLOT( checkChanged() ) ); + + lbl_cursorTimeout = new QLabel( GroupBox1, "TextLabel1" ); + lbl_cursorTimeout->setText( i18n( "&Startup indication timeout:" ) ); + GroupBox1Layout->addWidget( lbl_cursorTimeout, 2, 0 ); + sb_cursorTimeout = new KIntNumInput( GroupBox1, "sb_cursorTimeout" ); + sb_cursorTimeout->setRange( 0, 99, 1, true ); + sb_cursorTimeout->setSuffix( i18n(" sec") ); + GroupBox1Layout->addWidget( sb_cursorTimeout, 2, 1 ); + lbl_cursorTimeout->setBuddy( sb_cursorTimeout ); + connect( sb_cursorTimeout, SIGNAL( valueChanged(int) ), + SLOT( checkChanged() ) ); + + QGroupBox* GroupBox2 = new QGroupBox( this, "GroupBox2" ); + GroupBox2->setTitle( i18n( "Taskbar &Notification" ) ); + QWhatsThis::add(GroupBox2, i18n("

      Taskbar Notification

      \n" + "You can enable a second method of startup notification which is\n" + "used by the taskbar where a button with a rotating hourglass appears,\n" + "symbolizing that your started application is loading.\n" + "It may occur, that some applications are not aware of this startup\n" + "notification. In this case, the button disappears after the time\n" + "given in the section 'Startup indication timeout'")); + + GroupBox2->setColumnLayout( 0, Qt::Vertical ); + GroupBox2->layout()->setSpacing( 0 ); + GroupBox2->layout()->setMargin( 0 ); + Form1Layout->addWidget( GroupBox2 ); + QGridLayout* GroupBox2Layout = new QGridLayout( GroupBox2->layout(), 2, 2 ); + GroupBox2Layout->setSpacing( 6 ); + GroupBox2Layout->setMargin( 11 ); + GroupBox2Layout->setColStretch( 1, 1 ); + + cb_taskbarButton = new QCheckBox( GroupBox2, "cb_taskbarButton" ); + cb_taskbarButton->setText( i18n( "Enable &taskbar notification" ) ); + GroupBox2Layout->addMultiCellWidget( cb_taskbarButton, 0, 0, 0, 1 ); + connect( cb_taskbarButton, SIGNAL( toggled(bool) ), + SLOT( slotTaskbarButton(bool))); + connect( cb_taskbarButton, SIGNAL( toggled(bool) ), SLOT( checkChanged())); + + lbl_taskbarTimeout = new QLabel( GroupBox2, "TextLabel2" ); + lbl_taskbarTimeout->setText( i18n( "Start&up indication timeout:" ) ); + GroupBox2Layout->addWidget( lbl_taskbarTimeout, 1, 0 ); + sb_taskbarTimeout = new KIntNumInput( GroupBox2, "sb_taskbarTimeout" ); + sb_taskbarTimeout->setRange( 0, 99, 1, true ); + sb_taskbarTimeout->setSuffix( i18n(" sec") ); + GroupBox2Layout->addWidget( sb_taskbarTimeout, 1, 1 ); + lbl_taskbarTimeout->setBuddy( sb_taskbarTimeout ); + connect( sb_taskbarTimeout, SIGNAL( valueChanged(int) ), + SLOT( checkChanged() ) ); + + Form1Layout->addStretch(); + + load(); +} + +LaunchConfig::~LaunchConfig() +{ +} + + void +LaunchConfig::slotBusyCursor(int i) +{ + lbl_cursorTimeout->setEnabled( i != 0 ); + sb_cursorTimeout->setEnabled( i != 0 ); +} + + void +LaunchConfig::slotTaskbarButton(bool b) +{ + lbl_taskbarTimeout->setEnabled( b ); + sb_taskbarTimeout->setEnabled( b ); +} + +void +LaunchConfig::load() +{ + load( false ); +} + +void +LaunchConfig::load(bool useDefaults) +{ + KConfig c("klaunchrc", false, false); + + c.setReadDefaults( useDefaults ); + + c.setGroup("FeedbackStyle"); + + bool busyCursor = + c.readBoolEntry("BusyCursor", Default & BusyCursor); + + bool taskbarButton = + c.readBoolEntry("TaskbarButton", Default & TaskbarButton); + + cb_taskbarButton->setChecked(taskbarButton); + + c.setGroup( "BusyCursorSettings" ); + sb_cursorTimeout->setValue( c.readUnsignedNumEntry( "Timeout", 30 )); + bool busyBlinking =c.readBoolEntry("Blinking", false); + bool busyBouncing =c.readBoolEntry("Bouncing", true); + if ( !busyCursor ) + cb_busyCursor->setCurrentItem(0); + else if ( busyBlinking ) + cb_busyCursor->setCurrentItem(2); + else if ( busyBouncing ) + cb_busyCursor->setCurrentItem(3); + else + cb_busyCursor->setCurrentItem(1); + + c.setGroup( "TaskbarButtonSettings" ); + sb_taskbarTimeout->setValue( c.readUnsignedNumEntry( "Timeout", 30 )); + + slotBusyCursor( cb_busyCursor->currentItem() ); + slotTaskbarButton( taskbarButton ); + + emit changed( useDefaults ); +} + + void +LaunchConfig::save() +{ + KConfig c("klaunchrc", false, false); + + c.setGroup("FeedbackStyle"); + c.writeEntry("BusyCursor", cb_busyCursor->currentItem() != 0); + c.writeEntry("TaskbarButton", cb_taskbarButton->isChecked()); + + c.setGroup( "BusyCursorSettings" ); + c.writeEntry( "Timeout", sb_cursorTimeout->value()); + c.writeEntry("Blinking", cb_busyCursor->currentItem() == 2); + c.writeEntry("Bouncing", cb_busyCursor->currentItem() == 3); + + c.setGroup( "TaskbarButtonSettings" ); + c.writeEntry( "Timeout", sb_taskbarTimeout->value()); + + c.sync(); + + emit changed( false ); + + if (!kapp->dcopClient()->isAttached()) + kapp->dcopClient()->attach(); + QByteArray data; + kapp->dcopClient()->send( "kicker", "Panel", "restart()", data ); + kapp->dcopClient()->send( "kdesktop", "", "configure()", data ); +} + + void +LaunchConfig::defaults() +{ + load( true ); +} + + void +LaunchConfig::checkChanged() +{ + KConfig c("klaunchrc", false, false); + + c.setGroup("FeedbackStyle"); + + bool savedBusyCursor = + c.readBoolEntry("BusyCursor", Default & BusyCursor); + + bool savedTaskbarButton = + c.readBoolEntry("TaskbarButton", Default & TaskbarButton); + + c.setGroup( "BusyCursorSettings" ); + unsigned int savedCursorTimeout = c.readUnsignedNumEntry( "Timeout", 30 ); + bool savedBusyBlinking =c.readBoolEntry("Blinking", false); + bool savedBusyBouncing =c.readBoolEntry("Bouncing", true); + + c.setGroup( "TaskbarButtonSettings" ); + unsigned int savedTaskbarTimeout = c.readUnsignedNumEntry( "Timeout", 30 ); + + bool newBusyCursor =cb_busyCursor->currentItem()!=0; + + bool newTaskbarButton =cb_taskbarButton->isChecked(); + + bool newBusyBlinking= cb_busyCursor->currentItem()==2; + bool newBusyBouncing= cb_busyCursor->currentItem()==3; + + unsigned int newCursorTimeout = sb_cursorTimeout->value(); + + unsigned int newTaskbarTimeout = sb_taskbarTimeout->value(); + + emit changed( + savedBusyCursor != newBusyCursor + || + savedTaskbarButton != newTaskbarButton + || + savedCursorTimeout != newCursorTimeout + || + savedTaskbarTimeout != newTaskbarTimeout + || + savedBusyBlinking != newBusyBlinking + || + savedBusyBouncing != newBusyBouncing + ); +} + +#include "kcmlaunch.moc" diff --git a/kcontrol/launch/kcmlaunch.desktop b/kcontrol/launch/kcmlaunch.desktop new file mode 100644 index 000000000..0e96a2d25 --- /dev/null +++ b/kcontrol/launch/kcmlaunch.desktop @@ -0,0 +1,225 @@ +[Desktop Entry] +Icon=launch +Type=Application +DocPath=kcontrol/kcmlaunch/index.html +Exec=kcmshell kcmlaunch + + +X-KDE-Library=launch +X-KDE-FactoryName=launch +X-KDE-ParentApp=kcontrol + +Name=Launch Feedback +Name[af]=Lanseer Terugvoer +Name[az]=Bildirişi Başlat +Name[be]=Зваротнае ўздзеянне падчас запуску +Name[bg]=Обратна връзка +Name[bn]=লঞ্চ ফীডব্যাক +Name[bs]=Odziv pri pokretanju +Name[ca]=Engegador ràpid +Name[cs]=Odezva při spouštění aplikací +Name[csb]=Zrëszanié programów +Name[cy]=Adborth wrth Gychwyn +Name[da]=Starttilbagemelding +Name[de]=Programmstartanzeige +Name[el]=Ειδοποίηση εκκίνησης +Name[eo]=Lanĉosignilo +Name[es]=Notificación de lanzamiento +Name[et]=Käivitamise tagasiside +Name[eu]=Abiatze jakinarazpena +Name[fa]=راه‌اندازی بازخورد +Name[fi]=Käynnistyksen ilmaiseminen +Name[fr]=Témoin de démarrage +Name[fy]=Begjinmelding +Name[ga]=Tosaigh Aisfhotha +Name[gl]=Indicación de Lanzamento +Name[he]=משוב לגבי הפעלה +Name[hi]=फ़ीडबैक चलाएँ +Name[hr]=Potvrda pokretanja +Name[hu]=Alkalmazásindítási effektus +Name[is]=Upplýsingar um ræsingu +Name[it]=Segnalazione avvio applicazioni +Name[ja]=起動フィードバック +Name[ka]=პროგრამის გაშვება +Name[kk]=Жегу барысы +Name[km]=ប្រតិកម្ម​ពេល​ចាប់ផ្ដើម +Name[ko]=실행 피드백 +Name[lo]=ຕົວທຳອິດທຳງານຢ່າງວ່ອງໄວ +Name[lt]=Paleidimo atgalinis ryšys +Name[lv]=Atbildes palaidējs +Name[mk]=Повратна инфо. за старт +Name[mn]=Ажилуулах хүсэлт +Name[ms]=Lancar Maklum Balas +Name[mt]=Feedback tħaddim ta' programmi +Name[nb]=Oppstartsmelding +Name[nds]=Startanimatschoon +Name[ne]=पृष्ठपोषण सुरुआत गर्नुहोस् +Name[nl]=Opstartnotificatie +Name[nn]=Programstartmelding +Name[nso]=Ngwadisaleswa Phetolo +Name[pa]=ਫੀਡਬੈਕ ਜਾਰੀ ਕਰੋ +Name[pl]=Uruchamianie programów +Name[pt]=Comportamento da Execução +Name[pt_BR]=Lançador rápido - Histórico +Name[ro]=Indicator de execuție +Name[ru]=Запуск приложений +Name[rw]=Gutangiza Inkurikizi +Name[se]=Prográmmaálggahan ávaštus +Name[sk]=Štart programov +Name[sl]=Povratna informacija zagona +Name[sr]=Индикатор покретања +Name[sr@Latn]=Indikator pokretanja +Name[sv]=Gensvar vid programstart +Name[ta]=கருத்தை தொடங்கு +Name[tg]=Иҷрои баёния +Name[th]=การตอบสนองเวลาเรียกโปรแกรม +Name[tr]=Başlatma Simgesi +Name[tt]=Cibärü Tärtibe +Name[uk]=Відображення запуску +Name[uz]=Dastur ishga tushish xabarnomasi +Name[uz@cyrillic]=Дастур ишга тушиш хабарномаси +Name[ven]=U fara phindulo +Name[vi]=Phản hồi quá trình khởi động +Name[wa]=Lancî on rtour +Name[zh_CN]=启动反馈 +Name[zh_TW]=程式啟動回饋風格 +Name[zu]=Qalisa umphumela obuyayo + +Comment=Choose application-launch feedback style +Comment[af]=Kies application-launch terugvoer styl +Comment[az]=Proqramın əks tə'sir tərzini seçin. +Comment[be]=Выбар стылю зваротнага дзеяння падчас запуску +Comment[bg]=Настройване на известяването при стартиране +Comment[bn]=নতুন অ্যাপলিকেশন চালু করা হলে কিভাবে তা জানানো হবে নির্বাচন করুন +Comment[bs]=Odaberite stil odziva aplikacija prilikom pokretanja +Comment[ca]=Escull l'estil per a carregar ràpidament una aplicació +Comment[cs]=Vyberte styl odezvy při spouštění aplikací +Comment[csb]=Wëbierzë ôrt dôwaniô wiédzë ò zrëszaniô programë +Comment[cy]=Dewis arddull adborth wrth gychwyn rhaglen +Comment[da]=Vælg tilbagemeldingsstil for programopstart +Comment[de]=Wählen Sie die Rückmeldung aus, die ein Programm beim Starten gibt +Comment[el]=Επιλέξτε στυλ για την ειδοποίηση εκκίνησης των εφαρμογών +Comment[eo]=Signado de lanĉiĝantaj aplikaĵoj +Comment[es]=Elija el estilo de notificación de lanzamiento de las aplicaciones +Comment[et]=Rakenduste käivitamisel kasutajale antava tagasiside seadistamine +Comment[eu]=Aukeratu aplikazioen abiatze-jakinarazpenen estiloa +Comment[fa]=انتخاب سبک بازخورد راه‌اندازی کاربرد +Comment[fi]=Valitse ohjelmien käynnistymisestä kertovan tiedon tyyli +Comment[fr]=Définit le style du témoin de démarrage des applications +Comment[fy]=Hjir kinne jo bepale wat fisueel te sjen is by it begjinnen fan in applikaasje. +Comment[gl]=Escoller o estilo de indicación do lanzamento dunha aplicación +Comment[he]=שינוי הגדרות סגנון המשוב לגבי הפעלת יישומים +Comment[hi]=अनुप्रयोग-प्रारंभ फ़ीडबैक शैली चुनें +Comment[hr]=Odaberite stil potvrde pokretanja aplikacije +Comment[hu]=Az alkalmazásindítási effektust lehet itt kiválasztani +Comment[is]=Veldu hvernig upplýsingar þú færð um ræsingu forrits +Comment[it]=Scegli come KDE ti segnala l'avvio di un'applicazione +Comment[ja]=アプリケーション起動フィードバックのスタイルを選択 +Comment[ka]=აირჩიეთ პროგრამის შესრულების პასუხის სტილი +Comment[kk]=Қолданбаны жегу барысын баптау +Comment[km]=ជ្រើស​រចនាប័ទ្ម​ប្រតិកម្ម​ពេល​ចាប់ផ្ដើម​កម្មវិធី +Comment[ko]=프로그램 실행 피드백 형태 설정 +Comment[lt]=Pasirinkite programų paleidimo atgalinio ryšio stilių +Comment[lv]=Izvēlieties aplikācijas-palaišanas atbildes stilu +Comment[mk]=Изберете го стилот на повратна информација од стартот на апликациите +Comment[mn]=Та эхлэлдээ эгэх бүртгэл бүхий програм сонго +Comment[ms]=Pilih gaya maklum balas lancar aplikasi +Comment[mt]=Agħżel stil ta' feedback meta tħaddem programm +Comment[nb]=Velg stil på tilbakemelding ved programstart +Comment[nds]=Söök de Startanimatschoon för Programmen ut +Comment[ne]=अनुप्रयोग-सुरुआत पृष्ठपोषण शैली रोज्नुहोस् +Comment[nl]=Hier kunt u bepalen hoe u visueel wordt geattendeerd op het opstarten van een toepassing. +Comment[nn]=Vel meldingsstil ved programstart +Comment[nso]=Kgetha mokgwa wa phetolo ya ngwadisoleswa ya tshomiso +Comment[pa]=ਕਾਰਜ-ਸ਼ੁਰੂ ਫੀਡਬੈਕ ਸ਼ੈਲੀ ਚੁਣੋ +Comment[pl]=Wybierz sposób informowania o uruchamianiu programu +Comment[pt]=Escolher a reacção ao lançamento das aplicações +Comment[pt_BR]=Escolha o estilo do histórico de lançamento de aplicativos +Comment[ro]=Alegeți modul de notificare a pornirii aplicațiilor +Comment[ru]=Выбор типа отклика приложений при запуске +Comment[rw]=Guhitamo imisusire y'inkurikizi ugutangira-porogaramu +Comment[se]=Vállje makkár ávaštus galga leat prográmmaid álggahettiin +Comment[sk]=Vyberte štýl odozvy pri štarte aplikácií +Comment[sl]=Izberite program - stil pošiljanja povratne informacije +Comment[sr]=Изаберите стил индикатора покретања +Comment[sr@Latn]=Izaberite stil indikatora pokretanja +Comment[sv]=Välj typ av gensvar vid programstart +Comment[ta]=பயன்பாடு-தொடக்கத்துக்கான கருத்து பாணியை தேர்ந்தெடு +Comment[tg]= Навъи баёнияи иҷрои-барномаро интихоб кунед +Comment[th]=เลือกลักษณะการตอบสนองเวลาเรียกแอพพลิเคชั่น +Comment[tr]=Uygulama başlatıcı geri besleme biçimini seç +Comment[tt]=Yazılım cibärgändä endtäşü tärtiben caylaw +Comment[uk]=Вибір стилю відображення запуску програм +Comment[uz]=Dastur ishga tushish xabarnomasining turini tanlash +Comment[uz@cyrillic]=Дастур ишга тушиш хабарномасининг турини танлаш +Comment[ven]=Nangani tshitaela tsha phindulo tshau fara apulifikhesheni +Comment[vi]=Chọn kiểu mà chương trình sẽ gửi phản hồi về khi khởi động +Comment[wa]=Tchoezi li sôre di rtour di lançmint d' programes +Comment[xh]=Khetha isicelo-yenza uhlobo lwesiphumo seLaunch +Comment[zh_CN]=选择程序启动反馈风格 +Comment[zh_TW]=選擇程式啟動時的回饋風格 +Comment[zu]=Khetha isitayela somphumela obuyayo sokuqalisa-umyaleli +Keywords=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report +Keywords[az]=proqramı tə'minatı,başla,başlat,məşğul,ox,kursor,əks tə'sir,siçan,nişanci,döndərmə,fırlatma,disk,başlanğıc,proqram,raport +Keywords[be]=Праграма,Запуск,Выкананне,Заняты,Курсор,Мыш,Указальнік,Перагортванне,Дыск,Запуск,Дастасаванне,Справаздача,application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report +Keywords[bg]=програма, приложение, стартиране, зает, показалец, курсор, мишка, показалеца, application, start, launch, busy, cursor, feedback, mouse, pointer, rotating, spinning, disk, startup, program, report +Keywords[ca]=aplicació,iniciar,carregar,ocupat,cursor,notificació,ratolí,punter,rotació,gir,disc,arrencar,programa,informe +Keywords[cs]=aplikace,spuštění,start,pracuje,kurzor,reakce,odezva,myš,otáčení,rotace,disk,startování,program,oznámení +Keywords[csb]=programa,sztart,zrëszanié,òbczas,kùrsor,pòkrok,mësz,kùrsor,rotujący,krãceniowi,disk,programa,rapòrt +Keywords[cy]=cymhwysiad,cychwyn,lawnsio,prysur,cyrchydd,adborth,llygoden,pwyntydd,cylchdroi,troelli,disc,dechrau,rhaglen,adroddiad +Keywords[da]=program,start,optaget,markør,tilbagemelding,mus,peger, roterende,spinnende,disk,opstart,rapport +Keywords[de]=Anwendungen,Start,Programmstart,Cursor,Aktivierung,Mauszeiger,Anzeige +Keywords[el]=εφαρμογή,έναρξη,εκκίνηση,απασχολημένο,δρομέας,ανάδραση,ποντίκι,δείκτης,περιστροφή,περιστρεφόμενος,δίσκος,έναρξη,πρόγραμμα,αναφορά +Keywords[eo]=aplikaĵo,lanĉo,komenco,okupita,kursilo,reago,muso,montrilo,rotacio,turniĝo,disketo,programo,raporto +Keywords[es]=aplicación,iniciar,lanzar,ocupado,cursor,notificación,ratón,puntero,rotación,giro,disco,arrancar,programa,informar +Keywords[et]=rakendus,käivitamine,hõivatud,kursor,tagasiside,hiir,hiirekursor +Keywords[eu]=aplikazioa,abiatu,lanpetuta,kurtsorea,jakinarazpena,sagua,gezia,errotazioa,itzulbira,diskoa,programa,jakinarazi +Keywords[fa]=کاربرد، آغاز، راه‌انداختن، مشغول، مکان‌نما، بازخورد، موشی، اشاره‌گر، چرخش، دوار، دیسک، راه‌اندازی، برنامه، گزارش +Keywords[fi]=sovellus,käynnistyminen,käynnistäminen,varattu,osoitin,palaute,hiiri, pyörivä,levy,ohjelma +Keywords[fr]=application,démarrage,occupé,curseur,souris,pointeur,rotation,disque,programme,rapport +Keywords[fy]=applikaasje,start,begjinne,dwaande,rinnerke,feedback,mûs,wizer,rotaasje,rûndraaie,skiif,begjinne,programma,rapport +Keywords[ga]=feidhmchlár,tosach,tosaigh,gafa,cúrsóir,aisfhotha,luch,luchóg,pointeoir,rothlú,casadh,diosca,tosú,clár,tuairisc +Keywords[gl]=aplicación,início,executar,ocupado,ponteiro,execución,rato,ponteiro,rotación,xiro,disco,início,programa,informe +Keywords[he]=עכבר,מצביע,מסתובב,דיסק,תוכנית,דיווח,יישום,הפעלה,אתחול,עסוק,סמן,משוב,application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report +Keywords[hi]=अनुप्रयोग,प्रारंभ,शुरू,व्यस्त,संकेतक,फ़ीडबैक,माउस,प्वाइंटर,घूमता,चक्कर लगाता,डिस्क,प्रारंभ में,प्रोग्राम,रिपोर्ट +Keywords[hr]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report,aplikacija,pokretanje,započinjanje,zauzet,pokazivač,povratni podaci,potvrda,miš,vrtnja,disk,izvještaj +Keywords[hu]=alkalmazás,start,indítás,elfoglalt,egérmutató,visszajelzés,egér,effektus,forgó,pörgő,lemez,indulás,program,jelzés +Keywords[is]=forrit,start,keyrsla,upptekin,bendill,upplýsingar,mús,pointer,rotating,spinning,disk,startup,program,report +Keywords[it]=applicazione,avvio,lancio,occupato,cursore,feedback,segnalazione,mouse,puntatore,rotazione,disco,programma,segnale +Keywords[ja]=アプリケーション,開始,起動,ビジー,カーソル,フィードバック,マウス,ポインタ,回転,スピン,開始,プログラム,レポート +Keywords[km]=កម្មវិធី,ចាប់ផ្ដើម,បើក​ដំណើរការ,រវល់,ទស្សន៍​ទ្រនិច,ប្រតិកម្ម,កណ្ដុរ,ទ្រនិច,ការ​បង្វិល,រិះគន់,ថាស,ចាប់ផ្ដើម​ឡើង,កម្មវិធី,របាយការណ៍ +Keywords[lt]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report, programa,startas,paleisti,užimtas,kursorius,atgalinis ryšys, pelė, sukimasis, diskas, paleidimas, raportas +Keywords[lv]=aplikācija,startēt,palaist,aizņemts,kursors,atbilde,pele,bultiņa,rotēšana,sagriešanās,disks,startēšana,programma,reports +Keywords[mk]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report,апликација,старт,зафатен,курсор,глушец,покажувач,ротирачки,вртечки,диск,програма,извештај +Keywords[mn]=application,Эхлэл,Програм эхлэл,Түүчээ,Идэвхижүүлэл, Хулгана заагч,тайлан +Keywords[nb]=program,start,åpne,opptatt,markør,mus,peker,rotere,spinne,disk,oppstart,rapport +Keywords[nds]=Programm,start,launch,busy,Blinker,feedback,Muus,Wieser,dreihen,spinning,Diskett,Hoochfohren,Programm,Bericht +Keywords[ne]=अनुप्रयोग, सुरु, सुरुआत, व्यस्त, कर्सर, पृष्ठपोषण, माउस, सूचक, घुमाउने, स्पाइनिङ, डिस्क, सुरु, कार्यक्रम, प्रतिवेदन +Keywords[nn]=program,start,oppstart,oppteken,peikar,mus,musepeikar,tilbakemelding,disk +Keywords[nso]=tshomiso,thoma,ngwadisoleswa,swaregile,cursor,phetolo,mouse,sesupi,rarela,dikologa,disk,thomiso,lenaneo,pego +Keywords[pa]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report,ਕਾਰਜ, ਸ਼ੁਰੂ,ਰੁਝਿਆ,ਫੀਡਬੈਕ,ਮਾਊਸ,ਬਿੰਦੂ,ਡਿਸਕ,ਕਾਰਜ,ਰਿਪੋਰਟ +Keywords[pl]=program,start,uruchomienie,w trakcie,kursor,postęp,mysz,wskażnik,obracający się,wirujący,dysk,program,raport +Keywords[pt]=aplicação,iniciar,lançar,ocupado,cursor,comportamento,feedback,rato,rodar,disco,início,programa,comunicar,reacção +Keywords[pt_BR]=aplicativo,iniciar,lançar,ocupado,cursor,mouse,ponteiro,rotacionar,rotação,disco,inicializar,programa,relatório +Keywords[ro]=aplicație,start,pornire,cursor,mouse,indicator,rotire,disc,program,raportare +Keywords[rw]=porogaramu,gutangira,gutangiza,gihuze,inyoboyandika,inkurikizi,imbeba,mweretsi,kuzenguruka,kuzengurutsa,itangira,porogaramu,raporo +Keywords[se]=prográmma,álggaheapmi,rahpat,geavahusas,sieván,sáhpán,jorahit,skearru,raporta +Keywords[sk]=aplikácia,spustenie,štart,pracuje,kurzor,reakcia,odozva,myš,otáčanie,rotácia,disk,pri štarte,program,oznámenie +Keywords[sl]=program,začetek,zagon,zaposlen,utripač,povratna informacija,miška,kazalec,vrteče,disk,aplikacija,poročilo +Keywords[sr]=application,старт,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,диск,startup,програм,report,показивач,disk,program,покретање +Keywords[sr@Latn]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report,pokazivač,disk,program,pokretanje +Keywords[sv]=program,start,upptagen,markör,gensvar,mus,pekare,roterande,snurrande,disk,uppstart,rapport +Keywords[ta]=பயன்பாடு, துவக்கம், தொடக்கம், நேரமின்மை,கருத்து,நிலைக்காட்டடி,சுட்டி,சுழற்று,சுழல்,வட்டு,துவக்கம்,நிரல்,அறிக்கை +Keywords[th]=แอพพลิเคชัน,เริ่ม,เรียกทำงาน,ไม่ว่าง,เคอร์เซอร์,ตอบสนอง,เม้าส์,ตัวชี้,การวน,การหมุน,ดิสก์,เริ่มทำงาน,โปรแกรม,รายงาน +Keywords[tr]=uygulama,başlat,hızlı başlat,meşgul,imleç,geri besleme,fare,gösterici,dönen,fırıl fırıl dönen,disk,Başlangıç,program,rapor +Keywords[uk]=програма,старт,пуск,працюю,курсор,відображення,мишка,вказівник,обертання,крутіння,диск,запуск,звіт +Keywords[uz]=dastur,ishga tushirish,band,kursor,sichqchoncha,disk,aylanuvchi,spinning,ishga tushish,hisobot +Keywords[uz@cyrillic]=дастур,ишга тушириш,банд,курсор,сичқчонча,диск,айланувчи,spinning,ишга тушиш,ҳисобот +Keywords[vi]=chương trình ứng dụng,bắt đầu,khởi đầu,bận,con trỏ,chuột,con trỏ,quay,quay tròn,đĩa,khởi động,chương trình,báo cáo +Keywords[wa]=programe,enonder,lancî,ocupé,fletche,ritour,sori,toune,plake,enonde tot seu,aplicåcion,rapoirt +Keywords[xh]=isicelo,qala,launch,xakekile,isalathisi,isiphumo,imouse,isalathisi,iyajikeleza,qulukubhede,idiski,qala,udweliso lwenkqubo,ingxelo +Keywords[zh_CN]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report,程序,启动,忙,光标,反馈,鼠标指针,旋转,磁盘,启动,报告 +Keywords[zh_TW]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report,應用程式,開始,啟動,忙碌,游標,回饋,滑鼠,指標,回轉,旋轉,磁碟,啟動,程式,報告 +Keywords[zu]=umyaleli,qala,qalisa,kumatasatasa,inkomba,umphumela obuyayo,i-mouse,inkomba yendawo yokubhala,iyajikeleza,iyajikeleza,i-disk qalisa,uhlelo lwemisebenzi,umbiko + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/launch/kcmlaunch.h b/kcontrol/launch/kcmlaunch.h new file mode 100644 index 000000000..c69bef943 --- /dev/null +++ b/kcontrol/launch/kcmlaunch.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2001 Rik Hemsley (rikkus) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __kcmlaunch_h__ +#define __kcmlaunch_h__ + +#include + +class QCheckBox; +class QComboBox; +class QGroupBox; + +class KIntNumInput; + +class LaunchConfig : public KCModule +{ + Q_OBJECT + + public: + + LaunchConfig(QWidget * parent = 0, const char * name = 0, const QStringList &list = QStringList() ); + + virtual ~LaunchConfig(); + + void load(); + void load(bool useDefaults); + void save(); + void defaults(); + + protected slots: + + void checkChanged(); + void slotBusyCursor(int); + void slotTaskbarButton(bool); + + protected: + + enum FeedbackStyle + { + BusyCursor = 1 << 0, + TaskbarButton = 1 << 1, + + Default = BusyCursor | TaskbarButton + }; + + + private: + + QLabel * lbl_cursorTimeout; + QLabel * lbl_taskbarTimeout; + QComboBox * cb_busyCursor; + QCheckBox * cb_taskbarButton; + KIntNumInput * sb_cursorTimeout; + KIntNumInput * sb_taskbarTimeout; + +}; + +#endif diff --git a/kcontrol/locale/AUTHORS b/kcontrol/locale/AUTHORS new file mode 100644 index 000000000..74a381b48 --- /dev/null +++ b/kcontrol/locale/AUTHORS @@ -0,0 +1,2 @@ +Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de) +Hans Petter Bieker diff --git a/kcontrol/locale/Makefile.am b/kcontrol/locale/Makefile.am new file mode 100644 index 000000000..8ca082408 --- /dev/null +++ b/kcontrol/locale/Makefile.am @@ -0,0 +1,32 @@ +#AM_CPPFLAGS = -DQT_NO_CAST_ASCII -DQT_NO_COMPAT + +AM_CPPFLAGS = $(all_includes) + +SUBDIRS = default pics + +kde_module_LTLIBRARIES = kcm_locale.la +kcm_locale_la_SOURCES = main.cpp toplevel.cpp kcmlocale.cpp klocalesample.cpp localenum.cpp localemon.cpp localetime.cpp localeother.cpp +METASOURCES = AUTO +noinst_HEADERS = toplevel.h kcmlocale.h klocalesample.h localenum.h localemon.h localetime.h localeother.h + +kcm_locale_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined +kcm_locale_la_LIBADD = $(LIB_KIO) + +# Note: newer glibc (e.g. zonetab version 1.31 (cvs revision 1.22) have more/other data than older ones (e.g. zonetab version 1.28) + +# timezones-manual is for adding entried from a zone.tab downloaded from glibc's CVS +timezones-manual: + grep -v '^#' zone.tab | tr ' ' ' ' | sed -e "s# *# #" | cut -d' ' -f3 | sed -e 's,^,i18n(",; s,$$,");,' >> $(srcdir)/TIMEZONES + sort -u $(srcdir)/TIMEZONES > t && mv t $(srcdir)/TIMEZONES + +timezones: + grep -v '^#' /usr/share/zoneinfo/zone.tab | tr ' ' ' ' | sed -e "s# *# #" | cut -d' ' -f3 | sed -e 's,^,i18n(",; s,$$,");,' >> $(srcdir)/TIMEZONES + sort -u $(srcdir)/TIMEZONES > t && mv t $(srcdir)/TIMEZONES + + +messages: + $(XGETTEXT) -ktranslate $(kcm_locale_la_SOURCES) -o $(podir)/kcmlocale.pot + $(XGETTEXT) TIMEZONES -o $(podir)/../kdelibs/timezones.pot + +xdg_apps_DATA = language.desktop + diff --git a/kcontrol/locale/TIMEZONES b/kcontrol/locale/TIMEZONES new file mode 100644 index 000000000..49839aea4 --- /dev/null +++ b/kcontrol/locale/TIMEZONES @@ -0,0 +1,392 @@ +i18n("Africa/Abidjan"); +i18n("Africa/Accra"); +i18n("Africa/Addis_Ababa"); +i18n("Africa/Algiers"); +i18n("Africa/Asmera"); +i18n("Africa/Bamako"); +i18n("Africa/Bangui"); +i18n("Africa/Banjul"); +i18n("Africa/Bissau"); +i18n("Africa/Blantyre"); +i18n("Africa/Brazzaville"); +i18n("Africa/Bujumbura"); +i18n("Africa/Cairo"); +i18n("Africa/Casablanca"); +i18n("Africa/Ceuta"); +i18n("Africa/Conakry"); +i18n("Africa/Dakar"); +i18n("Africa/Dar_es_Salaam"); +i18n("Africa/Djibouti"); +i18n("Africa/Douala"); +i18n("Africa/El_Aaiun"); +i18n("Africa/Freetown"); +i18n("Africa/Gaborone"); +i18n("Africa/Harare"); +i18n("Africa/Johannesburg"); +i18n("Africa/Kampala"); +i18n("Africa/Khartoum"); +i18n("Africa/Kigali"); +i18n("Africa/Kinshasa"); +i18n("Africa/Lagos"); +i18n("Africa/Libreville"); +i18n("Africa/Lome"); +i18n("Africa/Luanda"); +i18n("Africa/Lubumbashi"); +i18n("Africa/Lusaka"); +i18n("Africa/Malabo"); +i18n("Africa/Maputo"); +i18n("Africa/Maseru"); +i18n("Africa/Mbabane"); +i18n("Africa/Mogadishu"); +i18n("Africa/Monrovia"); +i18n("Africa/Nairobi"); +i18n("Africa/Ndjamena"); +i18n("Africa/Niamey"); +i18n("Africa/Nouakchott"); +i18n("Africa/Ouagadougou"); +i18n("Africa/Porto-Novo"); +i18n("Africa/Sao_Tome"); +i18n("Africa/Timbuktu"); +i18n("Africa/Tripoli"); +i18n("Africa/Tunis"); +i18n("Africa/Windhoek"); +i18n("America/Adak"); +i18n("America/Anchorage"); +i18n("America/Anguilla"); +i18n("America/Antigua"); +i18n("America/Araguaina"); +i18n("America/Argentina/Buenos_Aires"); +i18n("America/Argentina/Catamarca"); +i18n("America/Argentina/ComodRivadavia"); +i18n("America/Argentina/Cordoba"); +i18n("America/Argentina/Jujuy"); +i18n("America/Argentina/La_Rioja"); +i18n("America/Argentina/Mendoza"); +i18n("America/Argentina/Rio_Gallegos"); +i18n("America/Argentina/San_Juan"); +i18n("America/Argentina/Tucuman"); +i18n("America/Argentina/Ushuaia"); +i18n("America/Aruba"); +i18n("America/Asuncion"); +i18n("America/Bahia"); +i18n("America/Barbados"); +i18n("America/Belem"); +i18n("America/Belize"); +i18n("America/Boa_Vista"); +i18n("America/Bogota"); +i18n("America/Boise"); +i18n("America/Buenos_Aires"); +i18n("America/Cambridge_Bay"); +i18n("America/Campo_Grande"); +i18n("America/Cancun"); +i18n("America/Caracas"); +i18n("America/Catamarca"); +i18n("America/Cayenne"); +i18n("America/Cayman"); +i18n("America/Chicago"); +i18n("America/Chihuahua"); +i18n("America/Cordoba"); +i18n("America/Costa_Rica"); +i18n("America/Cuiaba"); +i18n("America/Curacao"); +i18n("America/Danmarkshavn"); +i18n("America/Dawson"); +i18n("America/Dawson_Creek"); +i18n("America/Denver"); +i18n("America/Detroit"); +i18n("America/Dominica"); +i18n("America/Edmonton"); +i18n("America/Eirunepe"); +i18n("America/El_Salvador"); +i18n("America/Fortaleza"); +i18n("America/Glace_Bay"); +i18n("America/Godthab"); +i18n("America/Goose_Bay"); +i18n("America/Grand_Turk"); +i18n("America/Grenada"); +i18n("America/Guadeloupe"); +i18n("America/Guatemala"); +i18n("America/Guayaquil"); +i18n("America/Guyana"); +i18n("America/Halifax"); +i18n("America/Havana"); +i18n("America/Hermosillo"); +i18n("America/Indiana/Knox"); +i18n("America/Indiana/Marengo"); +i18n("America/Indiana/Vevay"); +i18n("America/Indianapolis"); +i18n("America/Inuvik"); +i18n("America/Iqaluit"); +i18n("America/Jamaica"); +i18n("America/Jujuy"); +i18n("America/Juneau"); +i18n("America/Kentucky/Monticello"); +i18n("America/La_Paz"); +i18n("America/Lima"); +i18n("America/Los_Angeles"); +i18n("America/Louisville"); +i18n("America/Maceio"); +i18n("America/Managua"); +i18n("America/Manaus"); +i18n("America/Martinique"); +i18n("America/Mazatlan"); +i18n("America/Mendoza"); +i18n("America/Menominee"); +i18n("America/Merida"); +i18n("America/Mexico_City"); +i18n("America/Miquelon"); +i18n("America/Monterrey"); +i18n("America/Montevideo"); +i18n("America/Montreal"); +i18n("America/Montserrat"); +i18n("America/Nassau"); +i18n("America/New_York"); +i18n("America/Nipigon"); +i18n("America/Nome"); +i18n("America/Noronha"); +i18n("America/North_Dakota/Center"); +i18n("America/Panama"); +i18n("America/Pangnirtung"); +i18n("America/Paramaribo"); +i18n("America/Phoenix"); +i18n("America/Port-au-Prince"); +i18n("America/Port_of_Spain"); +i18n("America/Porto_Velho"); +i18n("America/Puerto_Rico"); +i18n("America/Rainy_River"); +i18n("America/Rankin_Inlet"); +i18n("America/Recife"); +i18n("America/Regina"); +i18n("America/Rio_Branco"); +i18n("America/Rosario"); +i18n("America/Santiago"); +i18n("America/Santo_Domingo"); +i18n("America/Sao_Paulo"); +i18n("America/Scoresbysund"); +i18n("America/Shiprock"); +i18n("America/St_Johns"); +i18n("America/St_Kitts"); +i18n("America/St_Lucia"); +i18n("America/St_Thomas"); +i18n("America/St_Vincent"); +i18n("America/Swift_Current"); +i18n("America/Tegucigalpa"); +i18n("America/Thule"); +i18n("America/Thunder_Bay"); +i18n("America/Tijuana"); +i18n("America/Toronto"); +i18n("America/Tortola"); +i18n("America/Vancouver"); +i18n("America/Whitehorse"); +i18n("America/Winnipeg"); +i18n("America/Yakutat"); +i18n("America/Yellowknife"); +i18n("Antarctica/Casey"); +i18n("Antarctica/Davis"); +i18n("Antarctica/DumontDUrville"); +i18n("Antarctica/Mawson"); +i18n("Antarctica/McMurdo"); +i18n("Antarctica/Palmer"); +i18n("Antarctica/Rothera"); +i18n("Antarctica/South_Pole"); +i18n("Antarctica/Syowa"); +i18n("Antarctica/Vostok"); +i18n("Arctic/Longyearbyen"); +i18n("Asia/Aden"); +i18n("Asia/Almaty"); +i18n("Asia/Amman"); +i18n("Asia/Anadyr"); +i18n("Asia/Aqtau"); +i18n("Asia/Aqtobe"); +i18n("Asia/Ashgabat"); +i18n("Asia/Baghdad"); +i18n("Asia/Bahrain"); +i18n("Asia/Baku"); +i18n("Asia/Bangkok"); +i18n("Asia/Beirut"); +i18n("Asia/Bishkek"); +i18n("Asia/Brunei"); +i18n("Asia/Calcutta"); +i18n("Asia/Choibalsan"); +i18n("Asia/Chongqing"); +i18n("Asia/Colombo"); +i18n("Asia/Damascus"); +i18n("Asia/Dhaka"); +i18n("Asia/Dili"); +i18n("Asia/Dubai"); +i18n("Asia/Dushanbe"); +i18n("Asia/Gaza"); +i18n("Asia/Harbin"); +i18n("Asia/Hong_Kong"); +i18n("Asia/Hovd"); +i18n("Asia/Irkutsk"); +i18n("Asia/Jakarta"); +i18n("Asia/Jayapura"); +i18n("Asia/Jerusalem"); +i18n("Asia/Kabul"); +i18n("Asia/Kamchatka"); +i18n("Asia/Karachi"); +i18n("Asia/Kashgar"); +i18n("Asia/Katmandu"); +i18n("Asia/Krasnoyarsk"); +i18n("Asia/Kuala_Lumpur"); +i18n("Asia/Kuching"); +i18n("Asia/Kuwait"); +i18n("Asia/Macau"); +i18n("Asia/Magadan"); +i18n("Asia/Makassar"); +i18n("Asia/Manila"); +i18n("Asia/Muscat"); +i18n("Asia/Nicosia"); +i18n("Asia/Novosibirsk"); +i18n("Asia/Omsk"); +i18n("Asia/Oral"); +i18n("Asia/Phnom_Penh"); +i18n("Asia/Pontianak"); +i18n("Asia/Pyongyang"); +i18n("Asia/Qatar"); +i18n("Asia/Qyzylorda"); +i18n("Asia/Rangoon"); +i18n("Asia/Riyadh"); +i18n("Asia/Saigon"); +i18n("Asia/Sakhalin"); +i18n("Asia/Samarkand"); +i18n("Asia/Seoul"); +i18n("Asia/Shanghai"); +i18n("Asia/Singapore"); +i18n("Asia/Taipei"); +i18n("Asia/Tashkent"); +i18n("Asia/Tbilisi"); +i18n("Asia/Tehran"); +i18n("Asia/Thimphu"); +i18n("Asia/Tokyo"); +i18n("Asia/Ujung_Pandang"); +i18n("Asia/Ulaanbaatar"); +i18n("Asia/Urumqi"); +i18n("Asia/Vientiane"); +i18n("Asia/Vladivostok"); +i18n("Asia/Yakutsk"); +i18n("Asia/Yekaterinburg"); +i18n("Asia/Yerevan"); +i18n("Atlantic/Azores"); +i18n("Atlantic/Bermuda"); +i18n("Atlantic/Canary"); +i18n("Atlantic/Cape_Verde"); +i18n("Atlantic/Faeroe"); +i18n("Atlantic/Jan_Mayen"); +i18n("Atlantic/Madeira"); +i18n("Atlantic/Reykjavik"); +i18n("Atlantic/South_Georgia"); +i18n("Atlantic/St_Helena"); +i18n("Atlantic/Stanley"); +i18n("Australia/Adelaide"); +i18n("Australia/Brisbane"); +i18n("Australia/Broken_Hill"); +i18n("Australia/Darwin"); +i18n("Australia/Hobart"); +i18n("Australia/Lindeman"); +i18n("Australia/Lord_Howe"); +i18n("Australia/Melbourne"); +i18n("Australia/Perth"); +i18n("Australia/Sydney"); +i18n("Europe/Amsterdam"); +i18n("Europe/Andorra"); +i18n("Europe/Athens"); +i18n("Europe/Belfast"); +i18n("Europe/Belgrade"); +i18n("Europe/Berlin"); +i18n("Europe/Bratislava"); +i18n("Europe/Brussels"); +i18n("Europe/Bucharest"); +i18n("Europe/Budapest"); +i18n("Europe/Chisinau"); +i18n("Europe/Copenhagen"); +i18n("Europe/Dublin"); +i18n("Europe/Gibraltar"); +i18n("Europe/Helsinki"); +i18n("Europe/Istanbul"); +i18n("Europe/Kaliningrad"); +i18n("Europe/Kiev"); +i18n("Europe/Lisbon"); +i18n("Europe/Ljubljana"); +i18n("Europe/London"); +i18n("Europe/Luxembourg"); +i18n("Europe/Madrid"); +i18n("Europe/Malta"); +i18n("Europe/Mariehamn"); +i18n("Europe/Minsk"); +i18n("Europe/Monaco"); +i18n("Europe/Moscow"); +i18n("Europe/Oslo"); +i18n("Europe/Paris"); +i18n("Europe/Prague"); +i18n("Europe/Riga"); +i18n("Europe/Rome"); +i18n("Europe/Samara"); +i18n("Europe/San_Marino"); +i18n("Europe/Sarajevo"); +i18n("Europe/Simferopol"); +i18n("Europe/Skopje"); +i18n("Europe/Sofia"); +i18n("Europe/Stockholm"); +i18n("Europe/Tallinn"); +i18n("Europe/Tirane"); +i18n("Europe/Uzhgorod"); +i18n("Europe/Vaduz"); +i18n("Europe/Vatican"); +i18n("Europe/Vienna"); +i18n("Europe/Vilnius"); +i18n("Europe/Warsaw"); +i18n("Europe/Zagreb"); +i18n("Europe/Zaporozhye"); +i18n("Europe/Zurich"); +i18n("Indian/Antananarivo"); +i18n("Indian/Chagos"); +i18n("Indian/Christmas"); +i18n("Indian/Cocos"); +i18n("Indian/Comoro"); +i18n("Indian/Kerguelen"); +i18n("Indian/Mahe"); +i18n("Indian/Maldives"); +i18n("Indian/Mauritius"); +i18n("Indian/Mayotte"); +i18n("Indian/Reunion"); +i18n("Pacific/Apia"); +i18n("Pacific/Auckland"); +i18n("Pacific/Chatham"); +i18n("Pacific/Easter"); +i18n("Pacific/Efate"); +i18n("Pacific/Enderbury"); +i18n("Pacific/Fakaofo"); +i18n("Pacific/Fiji"); +i18n("Pacific/Funafuti"); +i18n("Pacific/Galapagos"); +i18n("Pacific/Gambier"); +i18n("Pacific/Guadalcanal"); +i18n("Pacific/Guam"); +i18n("Pacific/Honolulu"); +i18n("Pacific/Johnston"); +i18n("Pacific/Kiritimati"); +i18n("Pacific/Kosrae"); +i18n("Pacific/Kwajalein"); +i18n("Pacific/Majuro"); +i18n("Pacific/Marquesas"); +i18n("Pacific/Midway"); +i18n("Pacific/Nauru"); +i18n("Pacific/Niue"); +i18n("Pacific/Norfolk"); +i18n("Pacific/Noumea"); +i18n("Pacific/Pago_Pago"); +i18n("Pacific/Palau"); +i18n("Pacific/Pitcairn"); +i18n("Pacific/Ponape"); +i18n("Pacific/Port_Moresby"); +i18n("Pacific/Rarotonga"); +i18n("Pacific/Saipan"); +i18n("Pacific/Tahiti"); +i18n("Pacific/Tarawa"); +i18n("Pacific/Tongatapu"); +i18n("Pacific/Truk"); +i18n("Pacific/Wake"); +i18n("Pacific/Wallis"); +i18n("Pacific/Yap"); diff --git a/kcontrol/locale/default/Makefile.am b/kcontrol/locale/default/Makefile.am new file mode 100644 index 000000000..dce42537e --- /dev/null +++ b/kcontrol/locale/default/Makefile.am @@ -0,0 +1,2 @@ +kcm_locale_data_DATA = entry.desktop +kcm_locale_datadir = $(kde_locale)/en_US diff --git a/kcontrol/locale/default/entry.desktop b/kcontrol/locale/default/entry.desktop new file mode 100644 index 000000000..4b105a8b2 --- /dev/null +++ b/kcontrol/locale/default/entry.desktop @@ -0,0 +1,72 @@ +[KCM Locale] +Name=US English +Name[af]=Amerikaanse Engels +Name[ar]=إنكليزية الولايات المتحدة الأمريكية +Name[az]=ABŞ İngiliscəsi +Name[be]=Ангельская (ЗША) +Name[bg]=Американски английски +Name[br]=Saozneg SUA +Name[bs]=Engleski US +Name[ca]=Anglès US +Name[cs]=Americká angličtina +Name[csb]=Amerikańsczi anielsczi +Name[cy]=Saesneg UD +Name[da]=Engelsk US +Name[de]=US-Englisch +Name[el]=Αγγλική ΗΠΑ +Name[eo]=Usona anglo +Name[es]=Inglés de EEUU +Name[et]=Inglise (US) +Name[eu]=EEBBetako ingelesa +Name[fa]=انگلیسی امریکایی +Name[fi]=Yhdysvaltain englanti +Name[fr]=Anglais US +Name[fy]=VS Ingelsk +Name[gl]=Inglés de EEUU +Name[he]=אנגלית ארה"ב +Name[hi]=यूएस अंग्रेजी +Name[hr]=Američki engleski +Name[hu]=Amerikai angol +Name[is]=Enska (BNA) +Name[it]=Inglese US +Name[ja]=英語 (アメリカ) +Name[ka]=ინგლისური (აშშ) +Name[kk]=Ағылшын (АҚШ) +Name[km]=អង់គ្លេស អាមេរិក +Name[ko]=미국 영어 +Name[lt]=JAV anglų +Name[lv]=ASV Angļu +Name[mk]=Англиски (САД) +Name[ms]=Bahasa Inggeris AS +Name[mt]=Ingliż Amerikan +Name[nb]=Engelsk (USA) +Name[nds]=Engelsch (US) +Name[ne]=US अङ्ग्रेजी +Name[nl]=VS Engels +Name[nn]=Engelsk (USA) +Name[pa]=ਅਮਰੀਕੀ ਅੰਗਰੇਜ਼ੀ +Name[pl]=Amerykański angielski +Name[pt]=Inglês dos Estados Unidos +Name[pt_BR]=Inglês dos EUA +Name[ro]=Engleză US +Name[ru]=Английский (США) +Name[rw]=Icyongereza US +Name[se]=Eŋgelasgiella (USA) +Name[sk]=Anglický US +Name[sl]=Angleško ZDA +Name[sr]=Амерички енглески +Name[sr@Latn]=Američki engleski +Name[sv]=Amerikansk engelska +Name[ta]=US ஆங்கிலம் +Name[te]=యూఎస్ ఆంగ్లం +Name[tg]=Англисии (ШМА) +Name[th]=อังกฤษ อเมริกัน +Name[tr]=Amerikan İngilizcesi +Name[tt]=AQŞ İnglizçäse +Name[uk]=Англійська (США) +Name[uz]=Inglizcha AQSH +Name[uz@cyrillic]=Инглизча AҚШ +Name[vi]=Tiếng Anh-Mĩ +Name[wa]=Inglès (USA) +Name[zh_CN]=美国英语 +Name[zh_TW]=英語 - US diff --git a/kcontrol/locale/kcmlocale.cpp b/kcontrol/locale/kcmlocale.cpp new file mode 100644 index 000000000..5d746212e --- /dev/null +++ b/kcontrol/locale/kcmlocale.cpp @@ -0,0 +1,473 @@ +/* + * locale.cpp + * + * Copyright (c) 1998 Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de) + * Copyright (c) 1999 Preston Brown + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "kcmlocale.h" +#include "kcmlocale.moc" +#include "toplevel.h" + +KLocaleConfig::KLocaleConfig(KLocale *locale, + QWidget *parent, const char *name) + : QWidget (parent, name), + m_locale(locale) +{ + QGridLayout *lay = new QGridLayout(this, 3, 3, + KDialog::marginHint(), + KDialog::spacingHint()); + + m_labCountry = new QLabel(this, I18N_NOOP("Country or region:")); + m_comboCountry = new KLanguageButton( this ); + m_labCountry->setBuddy(m_comboCountry); + connect( m_comboCountry, SIGNAL(activated(const QString &)), + this, SLOT(changedCountry(const QString &)) ); + + m_labLang = new QLabel(this, I18N_NOOP("Languages:")); + m_labLang->setAlignment( AlignTop ); + + m_languages = new QListBox(this); + connect(m_languages, SIGNAL(selectionChanged()), + SLOT(slotCheckButtons())); + + QWidget * vb = new QWidget(this); + QVBoxLayout * boxlay = new QVBoxLayout(vb, 0, KDialog::spacingHint()); + m_addLanguage = new KLanguageButton(QString::null, vb, I18N_NOOP("Add Language")); + boxlay->add(m_addLanguage); + connect(m_addLanguage, SIGNAL(activated(const QString &)), + SLOT(slotAddLanguage(const QString &))); + m_removeLanguage = new QPushButton(vb, I18N_NOOP("Remove Language")); + m_upButton = new QPushButton(vb, I18N_NOOP("Move Up")); + m_downButton = new QPushButton(vb, I18N_NOOP("Move Down")); + boxlay->add(m_removeLanguage); + boxlay->add(m_upButton); + boxlay->add(m_downButton); + connect(m_removeLanguage, SIGNAL(clicked()), + SLOT(slotRemoveLanguage())); + connect(m_upButton, SIGNAL(clicked()), + SLOT(slotLanguageUp())); + connect(m_downButton, SIGNAL(clicked()), + SLOT(slotLanguageDown())); + boxlay->insertStretch(-1); + + // #### HPB: This should be implemented for KDE 3 + // new QLabel(this, I18N_NOOP("Encoding:")); + //QComboBox * cb = new QComboBox( this ); + //cb->insertStringList( KGlobal::charsets()->descriptiveEncodingNames() ); + + lay->addMultiCellWidget(m_labCountry, 0, 0, 0, 1); + lay->addWidget(m_comboCountry, 0, 2); + lay->addWidget(m_labLang, 1, 0); + lay->addWidget(m_languages, 1, 1); + lay->addWidget(vb, 1, 2); + + lay->setRowStretch(2, 5); + + lay->setColStretch(1, 1); + lay->setColStretch(2, 1); +} + +void KLocaleConfig::slotAddLanguage(const QString & code) +{ + QStringList languageList = m_locale->languageList(); + + int pos = m_languages->currentItem(); + if ( pos < 0 ) + pos = 0; + + // If it's already in list, just move it (delete the old, then insert a new) + int oldPos = languageList.findIndex( code ); + if ( oldPos != -1 ) + languageList.remove( languageList.at(oldPos) ); + + if ( oldPos != -1 && oldPos < pos ) + --pos; + + QStringList::Iterator it = languageList.at( pos ); + + languageList.insert( it, code ); + + m_locale->setLanguage( languageList ); + + emit localeChanged(); + if ( pos == 0 ) + emit languageChanged(); +} + +void KLocaleConfig::slotRemoveLanguage() +{ + QStringList languageList = m_locale->languageList(); + int pos = m_languages->currentItem(); + + QStringList::Iterator it = languageList.at( pos ); + + if ( it != languageList.end() ) + { + languageList.remove( it ); + + m_locale->setLanguage( languageList ); + + emit localeChanged(); + if ( pos == 0 ) + emit languageChanged(); + } +} + +void KLocaleConfig::slotLanguageUp() +{ + QStringList languageList = m_locale->languageList(); + int pos = m_languages->currentItem(); + + QStringList::Iterator it1 = languageList.at( pos - 1 ); + QStringList::Iterator it2 = languageList.at( pos ); + + if ( it1 != languageList.end() && it2 != languageList.end() ) + { + QString str = *it1; + *it1 = *it2; + *it2 = str; + + m_locale->setLanguage( languageList ); + + emit localeChanged(); + if ( pos == 1 ) // at the lang before the top + emit languageChanged(); + } +} + +void KLocaleConfig::slotLanguageDown() +{ + QStringList languageList = m_locale->languageList(); + int pos = m_languages->currentItem(); + + QStringList::Iterator it1 = languageList.at( pos ); + QStringList::Iterator it2 = languageList.at( pos + 1 ); + + if ( it1 != languageList.end() && it2 != languageList.end() ) + { + QString str = *it1; + *it1 = *it2; + *it2 = str; + + m_locale->setLanguage( languageList ); + + emit localeChanged(); + if ( pos == 0 ) // at the top + emit languageChanged(); + } +} + +void KLocaleConfig::loadLanguageList() +{ + // temperary use of our locale as the global locale + KLocale *lsave = KGlobal::_locale; + KGlobal::_locale = m_locale; + + // clear the list + m_addLanguage->clear(); + + QStringList first = languageList(); + + QStringList prilang; + // add the primary languages for the country to the list + for ( QStringList::ConstIterator it = first.begin(); + it != first.end(); + ++it ) + { + QString str = locate("locale", QString::fromLatin1("%1/entry.desktop") + .arg(*it)); + if (!str.isNull()) + prilang << str; + } + + // add all languages to the list + QStringList alllang = KGlobal::dirs()->findAllResources("locale", + QString::fromLatin1("*/entry.desktop"), + false, true); + QStringList langlist = prilang; + if (langlist.count() > 0) + langlist << QString::null; // separator + langlist += alllang; + + int menu_index = -2; + QString submenu; // we are working on this menu + for ( QStringList::ConstIterator it = langlist.begin(); + it != langlist.end(); ++it ) + { + if ((*it).isNull()) + { + m_addLanguage->insertSeparator(); + submenu = QString::fromLatin1("other"); + m_addLanguage->insertSubmenu(m_locale->translate("Other"), + submenu, QString::null, -1); + menu_index = -2; // first entries should _not_ be sorted + continue; + } + KSimpleConfig entry(*it); + entry.setGroup("KCM Locale"); + QString name = entry.readEntry("Name", + m_locale->translate("without name")); + + QString tag = *it; + int index = tag.findRev('/'); + tag = tag.left(index); + index = tag.findRev('/'); + tag = tag.mid(index + 1); + m_addLanguage->insertItem(name, tag, submenu, menu_index); + } + + // restore the old global locale + KGlobal::_locale = lsave; +} + +void KLocaleConfig::loadCountryList() +{ + // temperary use of our locale as the global locale + KLocale *lsave = KGlobal::_locale; + KGlobal::_locale = m_locale; + + QString sub = QString::fromLatin1("l10n/"); + + // clear the list + m_comboCountry->clear(); + + QStringList regionlist = KGlobal::dirs()->findAllResources("locale", + sub + QString::fromLatin1("*.desktop"), + false, true ); + + for ( QStringList::ConstIterator it = regionlist.begin(); + it != regionlist.end(); + ++it ) + { + QString tag = *it; + int index; + + index = tag.findRev('/'); + if (index != -1) + tag = tag.mid(index + 1); + + index = tag.findRev('.'); + if (index != -1) + tag.truncate(index); + + KSimpleConfig entry(*it); + entry.setGroup("KCM Locale"); + QString name = entry.readEntry("Name", + m_locale->translate("without name")); + + QString map( locate( "locale", + QString::fromLatin1( "l10n/%1.png" ) + .arg(tag) ) ); + QIconSet icon; + if ( !map.isNull() ) + icon = KGlobal::iconLoader()->loadIconSet(map, KIcon::Small); + m_comboCountry->insertSubmenu( icon, name, tag, sub, -2 ); + } + + // add all languages to the list + QStringList countrylist = KGlobal::dirs()->findAllResources + ("locale", sub + QString::fromLatin1("*/entry.desktop"), false, true); + + for ( QStringList::ConstIterator it = countrylist.begin(); + it != countrylist.end(); ++it ) + { + KSimpleConfig entry(*it); + entry.setGroup("KCM Locale"); + QString name = entry.readEntry("Name", + m_locale->translate("without name")); + QString submenu = entry.readEntry("Region"); + + QString tag = *it; + int index = tag.findRev('/'); + tag.truncate(index); + index = tag.findRev('/'); + tag = tag.mid(index + 1); + int menu_index = submenu.isEmpty() ? -1 : -2; + + QString flag( locate( "locale", + QString::fromLatin1( "l10n/%1/flag.png" ) + .arg(tag) ) ); + QIconSet icon( KGlobal::iconLoader()->loadIconSet(flag, KIcon::Small) ); + m_comboCountry->insertItem( icon, name, tag, submenu, menu_index ); + } + + // restore the old global locale + KGlobal::_locale = lsave; +} + +void KLocaleConfig::readLocale(const QString &path, QString &name, + const QString &sub) const +{ + // temperary use of our locale as the global locale + KLocale *lsave = KGlobal::_locale; + KGlobal::_locale = m_locale; + + // read the name + QString filepath = QString::fromLatin1("%1%2/entry.desktop") + .arg(sub) + .arg(path); + + KSimpleConfig entry(locate("locale", filepath)); + entry.setGroup("KCM Locale"); + name = entry.readEntry("Name"); + + // restore the old global locale + KGlobal::_locale = lsave; +} + +void KLocaleConfig::save() +{ + KConfigBase *config = KGlobal::config(); + + config->setGroup("Locale"); + + config->writeEntry("Country", m_locale->country(), true, true); + if ( m_locale->languageList().isEmpty() ) + config->writeEntry("Language", QString::fromLatin1(""), true, true); + else + config->writeEntry("Language", + m_locale->languageList(), ':', true, true); + + config->sync(); +} + +void KLocaleConfig::slotCheckButtons() +{ + m_removeLanguage->setEnabled( m_languages->currentItem() != -1 ); + m_upButton->setEnabled( m_languages->currentItem() > 0 ); + m_downButton->setEnabled( m_languages->currentItem() != -1 && + m_languages->currentItem() < (signed)(m_languages->count() - 1) ); +} + +void KLocaleConfig::slotLocaleChanged() +{ + loadLanguageList(); + loadCountryList(); + + // update language widget + m_languages->clear(); + QStringList languageList = m_locale->languageList(); + for ( QStringList::Iterator it = languageList.begin(); + it != languageList.end(); + ++it ) + { + QString name; + readLocale(*it, name, QString::null); + + m_languages->insertItem(name); + } + slotCheckButtons(); + + m_comboCountry->setCurrentItem( m_locale->country() ); +} + +void KLocaleConfig::slotTranslate() +{ + kdDebug() << "slotTranslate()" << endl; + + QToolTip::add(m_comboCountry, m_locale->translate + ( "This is where you live. KDE will use the defaults for " + "this country or region.") ); + QToolTip::add(m_addLanguage, m_locale->translate + ( "This will add a language to the list. If the language is already " + "in the list, the old one will be moved instead." ) ); + + QToolTip::add(m_removeLanguage, m_locale->translate + ( "This will remove the highlighted language from the list." ) ); + + QToolTip::add(m_languages, m_locale->translate + ( "KDE programs will be displayed in the first available language in " + "this list.\nIf none of the languages are available, US English " + "will be used.") ); + + QString str; + + str = m_locale->translate + ( "Here you can choose your country or region. The settings " + "for languages, numbers etc. will automatically switch to the " + "corresponding values." ); + QWhatsThis::add( m_labCountry, str ); + QWhatsThis::add( m_comboCountry, str ); + + str = m_locale->translate + ( "Here you can choose the languages that will be used by KDE. If the " + "first language in the list is not available, the second will be used, " + "etc. If only US English is available, no translations " + "have been installed. You can get translation packages for many " + "languages from the place you got KDE from.

      " + "Note that some applications may not be translated to your languages; " + "in this case, they will automatically fall back to US English." ); + QWhatsThis::add( m_labLang, str ); + QWhatsThis::add( m_languages, str ); + QWhatsThis::add( m_addLanguage, str ); + QWhatsThis::add( m_removeLanguage, str ); +} + +QStringList KLocaleConfig::languageList() const +{ + QString fileName = locate("locale", + QString::fromLatin1("l10n/%1/entry.desktop") + .arg(m_locale->country())); + + KSimpleConfig entry(fileName); + entry.setGroup("KCM Locale"); + + return entry.readListEntry("Languages"); +} + +void KLocaleConfig::changedCountry(const QString & code) +{ + m_locale->setCountry(code); + + // change to the preferred languages in that country, installed only + QStringList languages = languageList(); + QStringList newLanguageList; + for ( QStringList::Iterator it = languages.begin(); + it != languages.end(); + ++it ) + { + QString name; + readLocale(*it, name, QString::null); + + if (!name.isEmpty()) + newLanguageList += *it; + } + m_locale->setLanguage( newLanguageList ); + + emit localeChanged(); + emit languageChanged(); +} diff --git a/kcontrol/locale/kcmlocale.h b/kcontrol/locale/kcmlocale.h new file mode 100644 index 000000000..f71193418 --- /dev/null +++ b/kcontrol/locale/kcmlocale.h @@ -0,0 +1,95 @@ +/* + * kcmlocale.h + * + * Copyright (c) 1998 Matthias Hoelzer + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KCMLOCALE_H +#define KCMLOCALE_H + +#include +#include + +class KAddButton; +class KLanguageButton; +class KLocale; +class KLocaleSample; + +class QLabel; +class QListBox; +class QPushButton; + +class KLocaleConfig : public QWidget +{ + Q_OBJECT + +public: + KLocaleConfig( KLocale *_locale, + QWidget *parent = 0, const char *name = 0); + + void save(); + +public slots: + /** + * Loads all settings from the current locale into the current widget. + */ + void slotLocaleChanged(); + /** + * Retranslate all objects owned by this object using the current locale. + */ + void slotTranslate(); + +signals: + void localeChanged(); + void languageChanged(); + +private slots: + void loadLanguageList(); + void loadCountryList(); + + void changedCountry(const QString & code); + void readLocale(const QString &path, QString &name, + const QString &sub) const; + + void slotAddLanguage(const QString & id); + void slotRemoveLanguage(); + void slotLanguageUp(); + void slotLanguageDown(); + void slotCheckButtons(); + +private: + QStringList languageList() const; + + KLocale *m_locale; + + KLanguageButton *m_comboCountry; + + QLabel *m_labCountry; + QLabel *m_labLang; + + QListBox * m_languages; + KLanguageButton * m_addLanguage; + QPushButton * m_removeLanguage; + QPushButton * m_upButton; + QPushButton * m_downButton; +}; + +#endif diff --git a/kcontrol/locale/klocalesample.cpp b/kcontrol/locale/klocalesample.cpp new file mode 100644 index 000000000..e78ae966c --- /dev/null +++ b/kcontrol/locale/klocalesample.cpp @@ -0,0 +1,132 @@ +/* + * klocalesample.cpp + * + * Copyright (c) 1998 Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de) + * Copyright (c) 1999 Preston Brown + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include + +#include + +#include "klocalesample.h" +#include "klocalesample.moc" + +KLocaleSample::KLocaleSample(KLocale *locale, + QWidget *parent, const char*name) + : QWidget(parent, name), + m_locale(locale) +{ + QGridLayout *lay = new QGridLayout(this, 5, 2); + lay->setAutoAdd(TRUE); + + // Whatever the color scheme is, we want black text + QColorGroup a = palette().active(); + a.setColor(QColorGroup::Foreground, Qt::black); + QPalette pal(a, a, a); + + m_labNumber = new QLabel(this, I18N_NOOP("Numbers:")); + m_labNumber->setPalette(pal); + m_numberSample = new QLabel(this); + m_numberSample->setPalette(pal); + + m_labMoney = new QLabel(this, I18N_NOOP("Money:")); + m_labMoney->setPalette(pal); + m_moneySample = new QLabel(this); + m_moneySample->setPalette(pal); + + m_labDate = new QLabel(this, I18N_NOOP("Date:")); + m_labDate->setPalette(pal); + m_dateSample = new QLabel(this); + m_dateSample->setPalette(pal); + + m_labDateShort = new QLabel(this, I18N_NOOP("Short date:")); + m_labDateShort->setPalette(pal); + m_dateShortSample = new QLabel(this); + m_dateShortSample->setPalette(pal); + + m_labTime = new QLabel(this, I18N_NOOP("Time:")); + m_labTime->setPalette(pal); + m_timeSample = new QLabel(this); + m_timeSample->setPalette(pal); + + lay->setColStretch(0, 1); + lay->setColStretch(1, 3); + + QTimer *timer = new QTimer(this, "clock_timer"); + connect(timer, SIGNAL(timeout()), this, SLOT(slotUpdateTime())); + timer->start(1000); +} + +KLocaleSample::~KLocaleSample() +{ +} + +void KLocaleSample::slotUpdateTime() +{ + QDateTime dt = QDateTime::currentDateTime(); + + m_dateSample->setText(m_locale->formatDate(dt.date(), false)); + m_dateShortSample->setText(m_locale->formatDate(dt.date(), true)); + m_timeSample->setText(m_locale->formatTime(dt.time(), true)); +} + +void KLocaleSample::slotLocaleChanged() +{ + m_numberSample->setText(m_locale->formatNumber(1234567.89) + + QString::fromLatin1(" / ") + + m_locale->formatNumber(-1234567.89)); + + m_moneySample->setText(m_locale->formatMoney(123456789.00) + + QString::fromLatin1(" / ") + + m_locale->formatMoney(-123456789.00)); + + slotUpdateTime(); + + QString str; + + str = m_locale->translate("This is how numbers will be displayed."); + QWhatsThis::add( m_labNumber, str ); + QWhatsThis::add( m_numberSample, str ); + + str = m_locale->translate("This is how monetary values will be displayed."); + QWhatsThis::add( m_labMoney, str ); + QWhatsThis::add( m_moneySample, str ); + + str = m_locale->translate("This is how date values will be displayed."); + QWhatsThis::add( m_labDate, str ); + QWhatsThis::add( m_dateSample, str ); + + str = m_locale->translate("This is how date values will be displayed using " + "a short notation."); + QWhatsThis::add( m_labDateShort, str ); + QWhatsThis::add( m_dateShortSample, str ); + + str = m_locale->translate("This is how the time will be displayed."); + QWhatsThis::add( m_labTime, str ); + QWhatsThis::add( m_timeSample, str ); +} diff --git a/kcontrol/locale/klocalesample.h b/kcontrol/locale/klocalesample.h new file mode 100644 index 000000000..bf1cd7462 --- /dev/null +++ b/kcontrol/locale/klocalesample.h @@ -0,0 +1,58 @@ +/* + * locale.cpp + * + * Copyright (c) 1998 Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de) + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KLOCALESAMPLE_H__ +#define __KLOCALESAMPLE_H__ + +#include + +class QLabel; +class QResizeEvent; + +class KLocale; + +class KLocaleSample : public QWidget +{ + Q_OBJECT +public: + KLocaleSample(KLocale *_locale, + QWidget *parent = 0, const char*name = 0); + virtual ~KLocaleSample(); + +public slots: + void slotLocaleChanged(); + +protected slots: + void slotUpdateTime(); + +private: + KLocale *m_locale; + QLabel *m_numberSample, *m_labNumber; + QLabel *m_moneySample, *m_labMoney; + QLabel *m_timeSample, *m_labTime; + QLabel *m_dateSample, *m_labDate; + QLabel *m_dateShortSample, *m_labDateShort; +}; + +#endif diff --git a/kcontrol/locale/language.desktop b/kcontrol/locale/language.desktop new file mode 100644 index 000000000..9bab97b21 --- /dev/null +++ b/kcontrol/locale/language.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Exec=kcmshell language +Icon=locale +Type=Application +DocPath=kcontrol/language/index.html + + +X-KDE-Library=locale +X-KDE-FactoryName=locale +X-KDE-ParentApp=kcontrol + +Name=Country/Region & Language +Name[af]=Land/Streek & Taal +Name[ar]=البلد/المنطقة و اللغة +Name[az]=Ölkə/Bölgə və Dil +Name[be]=Краіна/Рэгіён і Мова +Name[bg]=Държава и език +Name[bn]=দেশ/এলাকা ও ভাষা +Name[br]=Bro/Rann-vro & yezh +Name[bs]=Zemlja/region i jezik +Name[ca]=País/Regió i idioma +Name[cs]=Země/region a jazyk +Name[csb]=Kraj/dzél kraju ë jãzëk +Name[cy]=Gwlad/Rhanbarth ac Iaith +Name[da]=Land/Område & sprog +Name[de]=Land/Region & Sprache +Name[el]=Χώρα/Περιοχή & Γλώσσα +Name[eo]=Lando/Regiono & Lingvo +Name[es]=País/Región e idioma +Name[et]=Riik/regioon ja keel +Name[eu]=Herrialdea eta hizkuntza +Name[fa]=کشور/منطقه و زبان +Name[fi]=Maa tai alue ja kieli +Name[fr]=Pays & langue +Name[fy]=Lân/regio en taal +Name[ga]=Tír/Réigiún agus Teanga +Name[gl]=País/Rexión e Lingua +Name[he]=מדינה\אזור ושפה +Name[hi]=देश/क्षेत्र व भाषा +Name[hr]=Zemlja i jezik +Name[hu]=Ország/régió és nyelv +Name[is]=Land & tungumál +Name[it]=Lingua e paese +Name[ja]=国と言語 +Name[ka]=ქვეყანა/რეგიონი და ენა +Name[kk]=Ел/өлке және тіл +Name[km]=ប្រទេស/តំបន់ & ភាសា +Name[ko]=국가, 지역 및 언어 +Name[lo]=ປະເທດແລະພາສາ +Name[lt]=Šalis-regionas ir kalba +Name[lv]=Valsts/Reģions un Valoda +Name[mk]=Земја/регион и јазик +Name[mn]=Орон/Бүс & Хэл +Name[ms]=Negara/Rantau & Bahasa +Name[mt]=Pajjiż/Reġjun u Lingwa +Name[nb]=Land/region og språk +Name[nds]=Land/Regioon & Spraak +Name[ne]=देश/क्षेत्र र भाषा +Name[nl]=Land/regio en taal +Name[nn]=Land/region og språk +Name[nso]=Naga/Lefelo & Leleme +Name[pa]=ਦੇਸ਼/ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ +Name[pl]=Kraj/region i język +Name[pt]=País/Região e Língua +Name[pt_BR]=País/Região & Idioma +Name[ro]=Țara/regiunea și limba +Name[ru]=Язык и стандарты +Name[rw]=Ururimi & Igihugu/Agace +Name[se]=Riika/guovla ja giella +Name[sk]=Krajina/Region a Jazyk +Name[sl]=Država/regija in jezik +Name[sr]=Држава/регион и језик +Name[sr@Latn]=Država/region i jezik +Name[sv]=Land/region och språk +Name[ta]=நாடு/இடம் மற்றும் மொழி +Name[te]=దేశం/రాజ్యం & భాష +Name[tg]=Кишвар/Забон ва Минтақа +Name[th]=ประเทศและภาษา +Name[tr]=Ülke/Bölge ve Dil +Name[tt]=İl/Töbäk belän Tel +Name[uk]=Країна/регіон та мова +Name[uz]=Davlat/region va til +Name[uz@cyrillic]=Давлат/регион ва тил +Name[ven]=Shango/Fhethu & Luambo +Name[vi]=Quốc gia và Ngôn ngữ +Name[wa]=Payis & lingaedje +Name[xh]=Ilizwe/Ummandla & Ulwimi +Name[zh_CN]=国家/地区和语言 +Name[zh_TW]=國家/地區與語言 +Name[zu]=Izwe/Isifunda & Ulimi + +Comment=Language, numeric, and time settings for your particular region +Comment[af]=Taal, numeries, en tyd instellings vir jou spesifieke streek +Comment[ar]=ضبط اللغة, و التقويم, و الأرقام الخاصة بمنطقتك +Comment[az]=Bölgənizə xas dil, sayı və vaxt qurğuları +Comment[be]=Моўныя, лічбавыя і часавыя настаўленні для вашага канкрэтнага рэгіёну +Comment[bg]=Настройване на държавата, езика, формата на датата и часа и др. +Comment[bn]=আপনার স্থানীয় ভাষা, সময় এবং সংখ্যা বর্ণনা সম্বন্ধীয় নিয়মাবলী +Comment[br]=Kefluniadur yezh, sifroù hag eur evit ho rannved-c'hwi +Comment[bs]=Jezik, format brojeva i podešavanje vremena za određenu regiju +Comment[ca]=Arranjaments d'idioma, numèric i d'hora per a la vostra regió +Comment[cs]=Nastavení jazyka, formátu čísel a času pro váš region +Comment[csb]=Jãzëk, fòrmat wielënów é czasu dlô Twòji òbeńdë +Comment[cy]=Gosodiadu iaith,rhifau,ac amser i'ch rhanbarth +Comment[da]=Sprog-, tal-, og tidsindstillinger for din region +Comment[de]=Sprache, Zahlen- und Zeitformate für Ihr Land +Comment[el]=Αριθμητικές, γλωσσικές και ωρολογιακές ρυθμίσεις για την περιοχή σας +Comment[eo]=Agordo de lingvoj, nombroj, tempindikoj +Comment[es]=Preferencias del idioma, formato numérico y fecha/hora para su región particular. +Comment[et]=Sinu regiooni keele, numbrite ja kellaaja seadistused +Comment[eu]=Zure herrialdeari dagozkion hizkuntza, zenbaki, eta denbora ezarpenak +Comment[fa]=زبان، عدد، و تنظیمات زمان برای منطقۀ خاص شما +Comment[fi]=Alueen kielen, ajan ja lukujen asetukset +Comment[fr]=Configuration de la langue, des nombres, et du format d'heure +Comment[fy]=Taal-, numeryk, en tiidsynstelling foar jo eigen regio +Comment[gl]=Lingua e parámetros numéricos/horarios para a sua rexión particular +Comment[he]=שינוי הגדרות השפה, המספרים והשעה עבור האזור הייחודי שלך +Comment[hi]=भाषा,अंकीय, तथा आपके विशेष क्षेत्र के लिए समय विन्यास +Comment[hr]=Jezik, oblik brojeva i vremenska postavke za određenu regiju +Comment[hu]=Nyelv-, szám- és időbeállítások +Comment[id]=Bahasa, penomoran dan seting waktu untuk wilayah anda +Comment[is]=Tungumál og framsetning talna og dagssetninga +Comment[it]=Impostazioni nazionali per la lingua, i numeri, la data e l'ora +Comment[ja]=地域特有の言語と数値や日付書式を設定 +Comment[ka]=თქვენი რეგიონისთვის ენის, თარიღის და ციფრული ფორმატის კონფიგურაცია +Comment[kk]=Өлкеңіздің тіл, сан және уақыт пішімін орнату +Comment[km]=ការ​កំណត់​ភាសា, លេខ និង​ពេលវេលា សម្រាប់​តំបន់​ជាក់លាក់​របស់​អ្នក +Comment[ko]=살고 있는 지역의 언어, 수, 시간 설정 +Comment[lo]=ຮູບແບບພາສາ, ຕົວເລກແລະພື້ນທີ່ເວລາສຳລັບตัวเลข ພື້ນທີ່ທ່ານຢູ່ +Comment[lt]=Kalba, skaitiniai ir laiko nustatymai Jūsų individualiam regionui +Comment[lv]=Valodas, numuru, un laika uzstādījumi jūsu konkrētajam reģionam +Comment[mk]=Поставувања на јазикот, броевите и времето за вашиот регион +Comment[mn]=Хэл, Тоо- ба танай орны цагийн хэлбэр +Comment[mt]=Lingwa, u setings tan-numri u ħin għar-reġjun tiegħek +Comment[nb]=Språk-, tall- og tidsinnstillinger for ditt område +Comment[nds]=Spraak, Tallen un Tietformaat för Dien Land instellen +Comment[ne]=तपाईँको बिशेष क्षेत्रका लागि भाषा, सङ्ख्यात्मक, र समय सेटिङ +Comment[nl]=Taal-, numerieke, en tijdsinstelling voor uw eigen regio +Comment[nn]=Innstillingar for språk, tal og tid i regionen din +Comment[nso]=Leleme, dinomoro, le dipeakanyo tsa nako go lefelo la gago le itsego +Comment[oc]=Arranjaments d'idioma, numèric e d'ora pel vostre pais +Comment[pa]=ਆਪਣੇ ਖਾਸ ਖੇਤਰ ਲਈ ਭਾਸ਼ਾ, ਅੰਕੀ ਤੇ ਸਮਾਂ ਸੈਟ ਕਰੋ +Comment[pl]=Ustawienia języka, formatu liczb i czasu dla Twojego regionu +Comment[pt]=Configuração da língua e dos parâmetros numéricos/horários para a sua região +Comment[pt_BR]=Preferências de idioma, formatos de data e hora de sua região +Comment[ro]=Setează limbajul, afișarea numerelor și timpului în modul specific regiunii unde locuiți +Comment[ru]=Настройки языка, даты и времени для вашего региона +Comment[rw]=Ururimi,bikurikije umubare,n'amagenamiterere y'igihe y'agace kihariye +Comment[se]=Báikkalaš giella-,lohko- ja áigeheivehusat +Comment[sk]=Jazyk, čísla, a nastavenia časového regiónu +Comment[sl]=Jezikovne, številske in časovne nastavitve za vaše območje +Comment[sr]=Језик, нумеричка и временска подешавања према вашем региону +Comment[sr@Latn]=Jezik, numerička i vremenska podešavanja prema vašem regionu +Comment[sv]=Ställ in språk, numeriskt format och tid för din speciella region +Comment[ta]= குறிப்பிட்ட பகுதிக்கான மொழி, எண் மற்றும் நேர அமைப்புகள் +Comment[tg]=Танзимоти забон, рақам ва вақт барои минтақаи шумо +Comment[th]=รูปแบบภาษา, ตัวเลข และพื้นที่เวลาสำหรับพื้นที่ที่คุณอยู่ +Comment[tr]=Bölgenize özgü dil, sayı ve zaman ayarları +Comment[tt]=Töbägeñ öçen tel, san, waqıt caylawları +Comment[uk]=Налаштування мови, відображення чисел та часу для вашого регіону +Comment[uz]=Davlatingiz uchun til, son va vaqt moslamalari +Comment[uz@cyrillic]=Давлатингиз учун тил, сон ва вақт мосламалари +Comment[ven]=Luambo, Mbalo, na mavhekanyele a tshifhinga a vhupo hahanu +Comment[vi]=Ngôn ngữ, số và các thiết lập về thời gian cho vùng cụ thể +Comment[wa]=Apontiaedje do lingaedje et des preferinces (prezintaedje des limeros, des dates, evnd.) po vosse payis +Comment[xh]=Ulwimi, amanani, kunye nezicwangciso zexesha zommandla wakho +Comment[zh_CN]=您所在地区的语言、数字和时间设置 +Comment[zh_TW]=您所在地區的語言、數字和時間設定 +Comment[zu]=Ulimi, okuyizinombolo, kanye nezilungiselelo zesikhathi zesifunda sakho esithile + +Keywords=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start +Keywords[af]=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week begin +Keywords[az]=dil,tərcümə,sayı şəkli,pul,saat,tarix,şəkillər,yerli,ölkə,hərf kömələri,hərf kömələri,onluq simvolu,minlər ayırıcısı,simvol,ayırıcı,işarət,müsbət,mənfi,onluq pillələr,həftə,həftə başı +Keywords[be]=Мова,Пераклад,Фармат лікаў,Валюта,Час,Дата,Фарматы,Мясцовасць,Лакаль,Краіна,Знаказбор,Знаказборы,Сімвал дзесятковай коскі,Падзяляльнік тысяч,Сімвал,Знак,Падзяляльнік,Дадатны,Адмоўны,Тыдзень,Пачатак тыдня,language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start +Keywords[bg]=език, страна, регион, превод, числа, формат, дата, час, пари, валута, единица, локал, локализация, language, translation, number format, currency, time, date, formats, locale, Country, charsets, character sets, Decimal symbol, Thousands separator, symbol, separator, sign, positive, negative, fractional digits, week, week start +Keywords[ca]=llengua,traducció,format numèric,moneda,hora,data,formats,locale,País,caràcters,jocs de caràcters,Símbol decimal,Separador de mils,símbol,separador,signe,positiu,negatiu,dígits fraccionaris,setmana,inici de la setmana +Keywords[cs]=Jazyk,Překlad,Formát čísel,Měna,Čas,Datum,Formát,Locale,Země,Znaková sada,Oddělovač tisíců,Oddělovač desetinných míst,Kladný,Záporný,Desetinná místa,Začátek týdne +Keywords[csb]=jãzëk,dolmaczënk,fòrmat wielënów,waluta,pieniądze,czas,datum,fòrmatë,òbeńdowé nastôwë,kraj,zestôwë merków,dzesãtny symbòl,merk rozdzelający tësãce,symbòla,separatora,merk,dodatny,ujimny,kawelkòwé lëczbë,tidzéń,zôczątk tidzénia +Keywords[cy]=iaith,cyfieithiad,fformat rhif,arian cyfred,amser,dyddiad,fformatiau,lleoliad,Gwlad,set nodau,setiau nodau,Symbol degol,Gwahanydd miloedd,symbol,gwahanydd,arwydd,positif,negatif,digidau ffracsiynol,wythnos,cychwyn wythnos +Keywords[da]=sprog,oversættelse,talformat,mønt,tid,dato,formater,sted,Land,tegnsæt,Decimalsymbol,Tusindeadskiller,symbol, adskiller,fortegn,positiv,negativ,brøkcifre ,uge,ugebegyndelse +Keywords[de]=Sprachen,Übersetzung,Zahlenformat,Währung,Zeit,Datum,Formate,Regionales,Land,Zeichensätze,Dezimalzeichen,Symbole,Zeichen,Positiv,Negativ,Bruchzahlen,Wochenanfang +Keywords[el]=γλώσσα,μετάφραση,μορφή αριθμού,συνάλλαγμα,ώρα,ημερομηνία,μορφές,εντοπιότητα,Χώρα,σύνολα χαρακτήρων,σύνολα χαρακτήρων,Σύμβολο υποδιαστολής,Διαχωριστικό χιλιάδων,σύμβολο,διαχωριστικό,πρόσημο,θετικός,αρνητικός,δεκαδικά ψηφία,εβδομάδα,αρχή εβδομάδας +Keywords[eo]=lingvo,traduko,nombro,mono,tempo,formato,lokaĵo,lando,komo,punkto,onpunkto,decimalsigno,milosigno,signo,pozitiva,negativa,frakcio,semajno,semajnkomenco +Keywords[es]=idioma,traducción,formato numérico,moneda,hora,fecha,formatos,ambiente,País,mapas de caracteres,Símbolo decimal,Separador de miles,símbolo,separador,signo,positivo,negativo,dígitos fraccionarios,semana,inicio de la semana +Keywords[et]=keel,tõlge,numbrite vorming,valuuta,kellaaeg,kuupäev,vormingud,lokaale,riik,kooditabelid, kümnendkoha eraldaja,tuhandete eraldaja,sümbol,eraldaja,märk,positiivne,negatiivne,murdarvud, nädal,nädala algus +Keywords[eu]=hizkuntza,itzulpena,zenbakien formatua,txanpona,denbora,data,formatuak,localea,herrialdea,karaktere-multzoak, karaktere ezarpenak,sinbolo hamartarra,Milakaden banatzailea, sinboloa,banatzailea,zeinua,positiboa,negatiboa,zatikizko zenbakiak,astea,astearen hasiera +Keywords[fa]=زبان، ترجمه، قالب عدد، پول، زمان، تاریخ، قالبها، محلی، کشور، نویسه‌گان، نویسه‌گان، نماد ده‌دهی، جداساز هزارگان، نماد، جداساز، علامت، مثبت، منفی، اعداد کسری، هفته، آغاز هفته +Keywords[fi]=kieli,käännös,lukujen muoto,valuutta,aika,päivämäärä,formaatit,muodot,locale,maa,merkistöt,desimaalierotin,tuhansien erotin,symbooli,erotin,etumerkki,positiivinen,negatiivinen,viikko,viikon alku +Keywords[fr]=langage,langue,traduction,nombres,formats de nombre,format de nombre,monnaie,symbole monétaire,date,heure,formats,localisation,régionalisation,pays,jeu de caractères,table de caractères,jeux de caractères,symbole décimal,virgule,séparateur des milliers,milliers,symbole,séparateur,signe,positif,négatif,nombre de décimales,semaine,début de la semaine,jours de la semaine +Keywords[fy]=language,oersetting,taal,getalopmaak,valuta,valutasymbool,tijd,datum, opmaak,lokaal,locale,land,tekensets,charsets,karakterverzamelingen,Decimaalsymbool, scheidingsteken,duizendtallen,symbool,symbolen,gulden,teken,positief,negatief,wieke,wieken,jild,bedragen +Keywords[gl]=lingua,tradución,formato numérico,hora,data,formatos,locale,País,conxuntos de carácteres,charset,símbolo decimal,separador de milleiros,símbolo,separador,signo,positivo,negativo,díxitos fraccionarios,semana,início da semana +Keywords[he]=עברית,שפה,תרגום,תבנית מספרים,מטבע,שעה,תאריך,תבניות,אזור,מיקום,מדינה,מערכי תווים,סימן עשרוני,מפריד,אלפים,סימן,מפריד,חיובי,שלילי,נקודות עשרוניות,שבוע,תחילת שבוע, language,translation,number format, currency,time,date,formats,locale, Country,charsets,character sets,Decimal symbol,Thousands separator, symbol, separator,sign,positive,negative,fractional digits,week,week start +Keywords[hi]=भाषा,अनुवाद,संख्या फार्मेट,करेंसी,समय,तारीख़,फार्मेट्स,लोकेल,देश,अक्षरमाला,अक्षर माला,दशमलव प्रतीक,हजार पृथक करने वाला,चिह्न,पृथक करने वाला,निशान,धनात्मक,ऋणात्मक,फ्रेक्शनल अंक,सप्ताह,सप्ताह प्रारंभ +Keywords[hr]=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start,jezik,prijevod,oblik brojeva,valuta,vrijeme,datum,oblik,lokalizacija,Država,Zemlja,znakovi,kodna stranica,decimalni znakovi,razdjelnik tisućica,znak,razdjelnik,pozitivno,negativno,decimale,tjedan,početak tjedna +Keywords[hu]=nyelv,fordítás,számformátum,pénznem,idő,dátum,formátumok,nyelvi beállítások,ország,karakterkészletek,tizedesjel,ezres elválasztó,jel,elválasztó,szimbólum,pozitív,negatív,tizedesjegyek,hét,a hét első napja +Keywords[is]=tungumál,þýðing,númer,gjaldeyrir,klukka,tími,dagsetning,staðværar stillingar,locale,land,stafatöflur,stafróf,jákvætt,neikvætt, jákvæð,neiðkvæð,brot,tugabrot,vika,helgi,vikudagur,vikudagar +Keywords[it]=lingua,traduzione,formato numeri,moneta,valuta,ora,data,formati,impostazioni nazionali,paese,charset,insieme di caratteri,virgola,separatore migliaia,simbolo,separatore,segno,più,meno,cifre decimali,settimana,inizio settimana +Keywords[ja]=言語,翻訳,数値の書式,通貨,時刻,日付,フォーマット,地域,国,文字コード,文字セット,小数点,1000での区切り,記号,区切り文字,符号,正数,負数,小数桁数,週,週初 +Keywords[km]=ភាសា,បកប្រែ,ទ្រង់ទ្រាយ​លេខ,រូបិយប័ណ្ណ,ពេលវេលា,កាលបរិច្ឆេទ,ទ្រង់ទ្រាយ,មូលដ្ឋាន,ប្រទេស,សំណុំ​តួអក្សរ,សញ្ញា​ទសភាគ,អ្នក​បំបែក​ខ្ទង់​ពាន់,និមិត្ត​សញ្ញា,អ្នក​បំបែក,សញ្ញា,វិជ្ជមាន,អវិជ្ជមាន,ខ្ទង់​ទសភាគ,សប្ដាហ៍,ដើម​សប្ដាហ៍ +Keywords[lt]=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start,kalba,vertimas,skaičių formatas,valiuta,laikas,data,formatai,lokalė,Šalis,koduotės,kodavimai,Dešimtainis simbolis,Tūkstančių skirtukas,simbolis,skirtukas,požymis,teigiamas,neigiamas,trupmenų skaitmenys,savaitė,savaitės pradžia +Keywords[lv]=valoda,tulkojums,numuru formāts,valūta,laiks,datums,formāts,lokāle,Valsts,čārsets,simbolu komplekts,Decimāl simbols,Tūkstošu atdalītājs,simbols,atdalītājs,zīme,pozitīvs,negatīvs,frakciju cipari,nedēļa,nedēļa sākas +Keywords[mk]=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start,јазик,превод,формат на бројки,валута,време,дата,формати,локал,земја,знаковни множества,Децимален симбол,Граничник за илјади,симбол,граничник,знак,позитивен,негативен,дропки,недела,почеток на недела +Keywords[mn]=Хэл,Орчуулга,Тооны хэлбэр,Мөнгөн нэгж,Цаг,Огноо,Хэлбэр, Бүс,Орон, Тэмдэгт олонлог,Аравтын тэмдэглэгээ,Тэмдэг,Тэмдэгт, Таслал, Нэмэх, Хасах,Бутархай тоо, Долоо хоног,Долоо хоногийн эхлэл +Keywords[nb]=språk,oversettelse,tallformat,valuta,tid,dato,formater,lokal,land,symbol,separator,tegn,positiv,negativ,uke,ukestart,desimaltegn,skilletegn,brøk +Keywords[nds]=Spraak,Översetten,Tallenformaat,Tahlmiddel,Tiet,Datum,Formaten,locale,Land,Tekensetten,Tekensett,Dezimaalsymbool,Trennteken,Symbool,Dusend,Vörteken,Positiv,Negativ,Brooktallen,Week,Wekenanfang +Keywords[ne]=भाषा, अनुवाद, सङ्ख्या ढाँचा, मुद्रा, समय, ढाँचा, स्थान, देश, चारसेटहरू, क्यारेक्टर सेट, दशमलव सङ्केत, हजार विभाजक, सङ्केत, विभाजक, चिन्ह, घनात्मक, ऋणात्मक, भिन्न अङ्कहरू, हप्ता, हप्ताकको सुरु +Keywords[nl]=language,vertaling,taal,getallenopmaak,valuta,valutasymbool,tijd,datum, opmaak,lokaal,locale,land,tekensets,charsets,tekenverzamelingen,Decimaalsymbool, scheidingsteken,duizendtallen,symbool,symbolen,gulden,teken,positief,negatief,week,weken,geld,bedragen +Keywords[nn]=språk,omsetjing,talformat,valuta,pengar,tid,dato,format,lokale,land,teiknsett,desimalteikn,skiljeteikn,symbol,teikn,positiv,negativ,desimaltal,veke,vekestart +Keywords[nso]=leleme,tiragatso,thlolego ya dinomoro,currency,nako,tsatsikgwedi,dithlolego,tulo,Naga,charsets,dipeakanyo tsa dihlaka,Leswao la decimal,Searoganyi sa Dikete, leswao,searoganyi,leswao,dumela,ganetsa,dinomoro tsa fraction,beke,thomiso ya beke +Keywords[pa]=ਭਾਸ਼ਾ,ਅਨੁਵਾਦ,ਗਿਣਤੀ,ਕਰੰਸੀ,ਸਮਾਂ,ਮਿਤੀ,ਲੋਕੇਲ,ਦੇਸ਼,ਅੱਖਰ-ਸੈਟ, ਦਸ਼ਮਲਵ, ਹਜ਼ਾਰ ਵੱਖਰੇਵਾਂ,ਨਿਸ਼ਾਨ,ਰਿਣਾਤਮਕ,ਧਨਾਤਮਕ,ਭਿੰਨ ਅੰਕ,ਹਫ਼ਤਾ, ਹਫ਼ਤਾ ਸ਼ੁਰੂ +Keywords[pl]=język,tłumaczenie,format liczb,jednostka walutowa,czas,data,formaty,ustawienia regionalne,kraj,zestawy znaków,symbol dziesiętny,znak rozdzielający tysiące,symbol,separator,znak,dodatni,ujemny,liczby ułamkowe,tydzień,początek tygodnia +Keywords[pt]=língua,tradução,formato de número,monetário,hora,data,formatos,localização,País,charset,mapa de caracter,símbolo decimal,separador de milhares,símbolo,separador,sinal,positivo,negativo,dígitos fraccionários,semana,início de semana +Keywords[pt_BR]=idioma,tradução,formato numérico,moeda,data,hora,formatos,localização,país,conjuntos de caracteres,conjunto de caracteres,símbolo decimal,separador de milhares,separador,sinal,positivo,negativo,dígitos de fração,semana,início da semana +Keywords[ro]=limbaj,traducere,format numere,moneda,timp,dată,formate,localizare,țară,set de caractere,simbol zecimal,separator de mii,semn,pozitiv,negativ,cifre fracționale,săptămînă,început săptămînă +Keywords[rw]=Ururimi,ivunura,imiterere y'umubare,ifaranga,igihe,itariki,imiterere,ikiranga hantu,igihugu,itsinda-inyuguti,amatsinda y'inyuguti,ikimenyetso binyacumi,igitandukanya ibinyagihumbi,ikimenyetso,igitandukanya,ikimenyetso,cyirenze zeru,hasi zeru,imibare y'umugabane,icyumweru,itangiriro y'icyumweru +Keywords[se]=giella,jorgaleapmi,jorgalusat,lohkoformáta,valuhtta,ruđat,áigi,formáhtta,locale, eatnan,riika,desimálamearka,gaskamearka,symbola,mearka,positiiva,negatiiva,desimálalohku, vahkku,vahkkoálgu +Keywords[sk]=jazyk,preklad,formát čísel,mena,čas,dátum,formáty,locale,krajina,znakové sady,kódovanie,desatinná čiarka,oddeľovač tisícov,symbol,oddeľovač,znamienko,kladný,záporný,desatinný,týždeň,začiatok týždňa +Keywords[sl]=jezik,prevod,oblika števil,valuta,čas,datum,oblika,locale, država,nabor znakov,decimalni simbol,ločilo tisočic,simbol,separator, predznak,pozitivno,negativno,ulomki,teden,začetek tedna +Keywords[sr]=language,translation,number формат,currency,time,date, formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week старт, језик,превод,формат бројева,новац,време,датум,формати,земља,скуп знакова, децимални знак,одвајач хиљада,знак,недеља,седмица,почетак недеље,почетак седмице +Keywords[sr@Latn]=language,translation,number format,currency,time,date, formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start, jezik,prevod,format brojeva,novac,vreme,datum,formati,zemlja,skup znakova, decimalni znak,odvajač hiljada,znak,nedelja,sedmica,početak nedelje,početak sedmice +Keywords[sv]=språk,översättning,talformat,valuta,tid,datum,format,land,teckenuppsättningar,decimaltecken,tusentalsavskiljare,symbol,avskiljare,tecken,positivt,negativt,decimaler,vecka,första veckodag +Keywords[ta]=மொழி,மொழிபெயர்ப்பு, எண்வடிவமைப்பு,நாணயம்,நேரம்,தேதி,வடிவமைப்புகள்,வட்டாரம்,நாடு,தகுதரம், தகுதரம், தசம குறியீடு,ஆயிரம் பிரிப்பான்,குறியீடு,பிரிப்பான், குறி, மிகை,குறை,பின்ன எண்ணியம்,வாரம், வார துவக்கம் +Keywords[th]=ภาษา,การแปลภาษา,รูปแบบตัวเลข,รูปแบบเงินตรา,เวลา,วันทีึ่,รูปแบบ,ภาษาท้องถิ่น,ประเทศ,ชุดอักษร,ชุดอักขระ,สัญลักษณ์ทศนิยม,ตัวแบ่งหลักพัน,สัญลักษณ์,ตัวแบ่ง,เครื่องหมาย,ค่าบวก,ค่าลบ,เศษส่วน,เริ่มสัปดาห์,สัปดาห์ +Keywords[tr]=dil,çeviri,sayı biçimi,para,saat,tarih,biçimler,yerel,ülke,karakter kümeleri, ondalık sembolü,binler ayıracı,sembol,ayırıcı,işaret,pozitif,negatif,ondalık basamaklar,hafta,hafta başı +Keywords[uk]=мова,переклад,формат чисел,валюта,час,гроші,формати,charset,локаль,країна,набори символів,роздільник тисяч,роздільник десятих,символ,роздільник,знак,додатне,від'ємне,дробові числа,тиждень,початок тижня +Keywords[uz]=til,tarjima,sonlar formati,pul,vaqt,sana,losal,Davlat,belgilar toʻplami,Oʻnlik belgisi,Mingni ajratuvchi belgi,belgi,ajratuvchi belgi,musbat,manfiy,hafta,haftaning boshlanishi +Keywords[uz@cyrillic]=тил,таржима,сонлар формати,пул,вақт,сана,лосал,Давлат,белгилар тўплами,Ўнлик белгиси,Мингни ажратувчи белги,белги,ажратувчи белги,мусбат,манфий,ҳафта,ҳафтанинг бошланиши +Keywords[ven]=luambo,dologa,vhuvha ha nomboro,zwamasheleni,tshifhinga,datumu,vhuvha,henefhano,shango,tshasete,mavhekenyele a tshasete,zwiga zwa desimala,zwikhaukani zwa zwigidi,swiga,zwikhaukani,tshiga,zwavhudi,zwisizwavhudi,vhege,u thoma vhege +Keywords[vi]=ngôn ngữ,dịch,dạng hiển thị số,tiền tệ,thời gian,ngày,định dạng,địa phương,Nước,bảng mã,bảng mã,ký hiệu thập phân,dấu cách hàng nghìn,ký hiệu,dấu phân cách,dấu,dương,âm,phân số,tuần,bắt đầu của tuần +Keywords[wa]=lingaedje,ratournaedje,coigne di nombe,manoye,eure,date,locåle,payi,payis,charset,sets di caracteres,simbôle di decimåle,meteu a pårt des meyes,simbôle,meteu a pårt,sine,pozitif,negatif,samwinne,cominçmint del samwinne +Keywords[xh]=ulwimi,uguqulelo kolunye ulwimi,ifomati yenani,okwangoku,ixesha,umhla,iifomati,locale,Ilizwe,charsets,amaqela abasebenzi,uphawu lwenani leshumi,Umahluli wamawaka,uphawu, umahluli,tyikitya,echaza uvumo,echaza ukhanyelo,amasuntswana angamaqhezu,iveki,isiqalo seveki +Keywords[zh_CN]=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start,语言,翻译,数字格式,货币,时间,日期,格式,区域设置,国家,字符集,千位分隔符,符号,分隔符,正,负,小数,星期 +Keywords[zh_TW]=language,translation,number format,currency,time,date,formats,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,fractional digits,week,week start,語言,翻譯,數字格式,貨幣格式,時間格式,日期格式,格式,地區,國家,字元,字元集,小數點符號,千分位分隔,符號,分隔,符號,正數,負數,小數點位數,一週,由週日開始 +Keywords[zu]=ulimi,uguqulelo,isakhiwo senombolo, uphawu lwemali, isikhathi,usuku,izakhiwo,indawo,Izwe,charsets,amaqoqo ezimpawu,uphawu lwedesimali,umehlukanisi wezinkulungwane,uphawu,umehlukanisi,uphawu, okungaphezulu kuka-0,okungaphansi kuka-0,izinombolo azahlukanisiwe,isonto, ukuqala kwesonto + +Categories=Qt;KDE;X-KDE-settings-accessibility; diff --git a/kcontrol/locale/localemon.cpp b/kcontrol/locale/localemon.cpp new file mode 100644 index 000000000..504ce393c --- /dev/null +++ b/kcontrol/locale/localemon.cpp @@ -0,0 +1,330 @@ +/* + * localemon.cpp + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "toplevel.h" +#include "localemon.h" +#include "localemon.moc" + +KLocaleConfigMoney::KLocaleConfigMoney(KLocale *locale, + QWidget *parent, const char*name) + : QWidget(parent, name), + m_locale(locale) +{ + // Money + QGridLayout *lay = new QGridLayout(this, 6, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + + m_labMonCurSym = new QLabel(this, I18N_NOOP("Currency symbol:")); + lay->addWidget(m_labMonCurSym, 0, 0); + m_edMonCurSym = new QLineEdit(this); + lay->addWidget(m_edMonCurSym, 0, 1); + connect( m_edMonCurSym, SIGNAL( textChanged(const QString &) ), + SLOT( slotMonCurSymChanged(const QString &) ) ); + + m_labMonDecSym = new QLabel(this, I18N_NOOP("Decimal symbol:")); + lay->addWidget(m_labMonDecSym, 1, 0); + m_edMonDecSym = new QLineEdit(this); + lay->addWidget(m_edMonDecSym, 1, 1); + connect( m_edMonDecSym, SIGNAL( textChanged(const QString &) ), + SLOT( slotMonDecSymChanged(const QString &) ) ); + + m_labMonThoSep = new QLabel(this, I18N_NOOP("Thousands separator:")); + lay->addWidget(m_labMonThoSep, 2, 0); + m_edMonThoSep = new QLineEdit(this); + lay->addWidget(m_edMonThoSep, 2, 1); + connect( m_edMonThoSep, SIGNAL( textChanged(const QString &) ), + SLOT( slotMonThoSepChanged(const QString &) ) ); + + m_labMonFraDig = new QLabel(this, I18N_NOOP("Fract digits:")); + lay->addWidget(m_labMonFraDig, 3, 0); + m_inMonFraDig = new KIntNumInput(this); + m_inMonFraDig->setRange(0, 10, 1, false); + lay->addWidget(m_inMonFraDig, 3, 1); + + connect( m_inMonFraDig, SIGNAL( valueChanged(int) ), + SLOT( slotMonFraDigChanged(int) ) ); + + QWidget *vbox = new QVBox(this); + lay->addMultiCellWidget(vbox, 4, 4, 0, 1); + QVGroupBox *vgrp; + vgrp = new QVGroupBox( vbox, I18N_NOOP("Positive") ); + m_chMonPosPreCurSym = new QCheckBox(vgrp, I18N_NOOP("Prefix currency symbol")); + connect( m_chMonPosPreCurSym, SIGNAL( clicked() ), + SLOT( slotMonPosPreCurSymChanged() ) ); + + QHBox *hbox; + hbox = new QHBox( vgrp ); + m_labMonPosMonSignPos = new QLabel(hbox, I18N_NOOP("Sign position:")); + m_cmbMonPosMonSignPos = new QComboBox(hbox, "signpos"); + connect( m_cmbMonPosMonSignPos, SIGNAL( activated(int) ), + SLOT( slotMonPosMonSignPosChanged(int) ) ); + + vgrp = new QVGroupBox( vbox, I18N_NOOP("Negative") ); + m_chMonNegPreCurSym = new QCheckBox(vgrp, I18N_NOOP("Prefix currency symbol")); + connect( m_chMonNegPreCurSym, SIGNAL( clicked() ), + SLOT( slotMonNegPreCurSymChanged() ) ); + + hbox = new QHBox( vgrp ); + m_labMonNegMonSignPos = new QLabel(hbox, I18N_NOOP("Sign position:")); + m_cmbMonNegMonSignPos = new QComboBox(hbox, "signpos"); + connect( m_cmbMonNegMonSignPos, SIGNAL( activated(int) ), + SLOT( slotMonNegMonSignPosChanged(int) ) ); + + // insert some items + int i = 5; + while (i--) + { + m_cmbMonPosMonSignPos->insertItem(QString::null); + m_cmbMonNegMonSignPos->insertItem(QString::null); + } + + lay->setColStretch(1, 1); + lay->addRowSpacing(5, 0); + + adjustSize(); +} + +KLocaleConfigMoney::~KLocaleConfigMoney() +{ +} + +void KLocaleConfigMoney::save() +{ + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "Locale"); + + KSimpleConfig ent(locate("locale", + QString::fromLatin1("l10n/%1/entry.desktop") + .arg(m_locale->country())), true); + ent.setGroup("KCM Locale"); + + QString str; + int i; + bool b; + + str = ent.readEntry("CurrencySymbol", QString::fromLatin1("$")); + config->deleteEntry("CurrencySymbol", false, true); + if (str != m_locale->currencySymbol()) + config->writeEntry("CurrencySymbol", + m_locale->currencySymbol(), true, true); + + str = ent.readEntry("MonetaryDecimalSymbol", QString::fromLatin1(".")); + config->deleteEntry("MonetaryDecimalSymbol", false, true); + if (str != m_locale->monetaryDecimalSymbol()) + config->writeEntry("MonetaryDecimalSymbol", + m_locale->monetaryDecimalSymbol(), true, true); + + str = ent.readEntry("MonetaryThousandsSeparator", QString::fromLatin1(",")); + str.replace(QString::fromLatin1("$0"), QString::null); + config->deleteEntry("MonetaryThousandsSeparator", false, true); + if (str != m_locale->monetaryThousandsSeparator()) + config->writeEntry("MonetaryThousandsSeparator", + QString::fromLatin1("$0%1$0") + .arg(m_locale->monetaryThousandsSeparator()), + true, true); + + i = ent.readNumEntry("FracDigits", 2); + config->deleteEntry("FracDigits", false, true); + if (i != m_locale->fracDigits()) + config->writeEntry("FracDigits", m_locale->fracDigits(), true, true); + + b = ent.readBoolEntry("PositivePrefixCurrencySymbol", true); + config->deleteEntry("PositivePrefixCurrencySymbol", false, true); + if (b != m_locale->positivePrefixCurrencySymbol()) + config->writeEntry("PositivePrefixCurrencySymbol", + m_locale->positivePrefixCurrencySymbol(), true, true); + + b = ent.readBoolEntry("NegativePrefixCurrencySymbol", true); + config->deleteEntry("NegativePrefixCurrencySymbol", false, true); + if (b != m_locale->negativePrefixCurrencySymbol()) + config->writeEntry("NegativePrefixCurrencySymbol", + m_locale->negativePrefixCurrencySymbol(), true, true); + + i = ent.readNumEntry("PositiveMonetarySignPosition", + (int)KLocale::BeforeQuantityMoney); + config->deleteEntry("PositiveMonetarySignPosition", false, true); + if (i != m_locale->positiveMonetarySignPosition()) + config->writeEntry("PositiveMonetarySignPosition", + (int)m_locale->positiveMonetarySignPosition(), + true, true); + + i = ent.readNumEntry("NegativeMonetarySignPosition", + (int)KLocale::ParensAround); + config->deleteEntry("NegativeMonetarySignPosition", false, true); + if (i != m_locale->negativeMonetarySignPosition()) + config->writeEntry("NegativeMonetarySignPosition", + (int)m_locale->negativeMonetarySignPosition(), + true, true); + + config->sync(); +} + +void KLocaleConfigMoney::slotLocaleChanged() +{ + m_edMonCurSym->setText( m_locale->currencySymbol() ); + m_edMonDecSym->setText( m_locale->monetaryDecimalSymbol() ); + m_edMonThoSep->setText( m_locale->monetaryThousandsSeparator() ); + m_inMonFraDig->setValue( m_locale->fracDigits() ); + + m_chMonPosPreCurSym->setChecked( m_locale->positivePrefixCurrencySymbol() ); + m_chMonNegPreCurSym->setChecked( m_locale->negativePrefixCurrencySymbol() ); + m_cmbMonPosMonSignPos->setCurrentItem( m_locale->positiveMonetarySignPosition() ); + m_cmbMonNegMonSignPos->setCurrentItem( m_locale->negativeMonetarySignPosition() ); +} + +void KLocaleConfigMoney::slotMonCurSymChanged(const QString &t) +{ + m_locale->setCurrencySymbol(t); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonDecSymChanged(const QString &t) +{ + m_locale->setMonetaryDecimalSymbol(t); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonThoSepChanged(const QString &t) +{ + m_locale->setMonetaryThousandsSeparator(t); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonFraDigChanged(int value) +{ + m_locale->setFracDigits(value); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonPosPreCurSymChanged() +{ + m_locale->setPositivePrefixCurrencySymbol(m_chMonPosPreCurSym->isChecked()); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonNegPreCurSymChanged() +{ + m_locale->setNegativePrefixCurrencySymbol(m_chMonNegPreCurSym->isChecked()); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonPosMonSignPosChanged(int i) +{ + m_locale->setPositiveMonetarySignPosition((KLocale::SignPosition)i); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonNegMonSignPosChanged(int i) +{ + m_locale->setNegativeMonetarySignPosition((KLocale::SignPosition)i); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotTranslate() +{ + QObjectList list; + list.append(m_cmbMonPosMonSignPos); + list.append(m_cmbMonNegMonSignPos); + + QComboBox *wc; + for (QObjectListIt li(list) ; (wc = (QComboBox *)li.current()) != 0; ++li) + { + wc->changeItem(m_locale->translate("Parentheses Around"), 0); + wc->changeItem(m_locale->translate("Before Quantity Money"), 1); + wc->changeItem(m_locale->translate("After Quantity Money"), 2); + wc->changeItem(m_locale->translate("Before Money"), 3); + wc->changeItem(m_locale->translate("After Money"), 4); + } + + QString str; + + str = m_locale->translate( "Here you can enter your usual currency " + "symbol, e.g. $ or DM." + "

      Please note that the Euro symbol may not be " + "available on your system, depending on the " + "distribution you use." ); + QWhatsThis::add( m_labMonCurSym, str ); + QWhatsThis::add( m_edMonCurSym, str ); + str = m_locale->translate( "Here you can define the decimal separator used " + "to display monetary values." + "

      Note that the decimal separator used to " + "display other numbers has to be defined " + "separately (see the 'Numbers' tab)." ); + QWhatsThis::add( m_labMonDecSym, str ); + QWhatsThis::add( m_edMonDecSym, str ); + + str = m_locale->translate( "Here you can define the thousands separator " + "used to display monetary values." + "

      Note that the thousands separator used to " + "display other numbers has to be defined " + "separately (see the 'Numbers' tab)." ); + QWhatsThis::add( m_labMonThoSep, str ); + QWhatsThis::add( m_edMonThoSep, str ); + + str = m_locale->translate( "This determines the number of fract digits for " + "monetary values, i.e. the number of digits you " + "find behind the decimal separator. " + "Correct value is 2 for almost all people." ); + QWhatsThis::add( m_labMonFraDig, str ); + QWhatsThis::add( m_inMonFraDig, str ); + + str = m_locale->translate( "If this option is checked, the currency sign " + "will be prefixed (i.e. to the left of the " + "value) for all positive monetary values. If " + "not, it will be postfixed (i.e. to the right)." ); + QWhatsThis::add( m_chMonPosPreCurSym, str ); + + str = m_locale->translate( "If this option is checked, the currency sign " + "will be prefixed (i.e. to the left of the " + "value) for all negative monetary values. If " + "not, it will be postfixed (i.e. to the right)." ); + QWhatsThis::add( m_chMonNegPreCurSym, str ); + + str = m_locale->translate( "Here you can select how a positive sign will be " + "positioned. This only affects monetary values." ); + QWhatsThis::add( m_labMonPosMonSignPos, str ); + QWhatsThis::add( m_cmbMonPosMonSignPos, str ); + + str = m_locale->translate( "Here you can select how a negative sign will " + "be positioned. This only affects monetary " + "values." ); + QWhatsThis::add( m_labMonNegMonSignPos, str ); + QWhatsThis::add( m_cmbMonNegMonSignPos, str ); +} diff --git a/kcontrol/locale/localemon.h b/kcontrol/locale/localemon.h new file mode 100644 index 000000000..e772af4d3 --- /dev/null +++ b/kcontrol/locale/localemon.h @@ -0,0 +1,93 @@ +/* + * localemon.h + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __KLOCALECONFIGMON_H__ +#define __KLOCALECONFIGMON_H__ + +#include + +class QCheckBox; +class QComboBox; +class QLineEdit; + +class KIntNumInput; +class KLocale; +class KLanguageCombo; + +class KLocaleConfigMoney : public QWidget +{ + Q_OBJECT + +public: + KLocaleConfigMoney(KLocale *locale, QWidget *parent = 0, const char *name = 0); + virtual ~KLocaleConfigMoney(); + + void save(); + +public slots: + /** + * Loads all settings from the current locale into the current widget. + */ + void slotLocaleChanged(); + /** + * Retranslate all objects owned by this object using the current locale. + */ + void slotTranslate(); + +signals: + void localeChanged(); + +private slots: + // Money + void slotMonCurSymChanged(const QString &t); + void slotMonDecSymChanged(const QString &t); + void slotMonThoSepChanged(const QString &t); + void slotMonFraDigChanged(int value); + void slotMonPosPreCurSymChanged(); + void slotMonNegPreCurSymChanged(); + void slotMonPosMonSignPosChanged(int i); + void slotMonNegMonSignPosChanged(int i); + +private: + KLocale *m_locale; + + // Money + QLabel *m_labMonCurSym; + QLineEdit *m_edMonCurSym; + QLabel *m_labMonDecSym; + QLineEdit *m_edMonDecSym; + QLabel *m_labMonThoSep; + QLineEdit *m_edMonThoSep; + QLabel *m_labMonFraDig; + KIntNumInput * m_inMonFraDig; + + QCheckBox *m_chMonPosPreCurSym; + QCheckBox *m_chMonNegPreCurSym; + QLabel *m_labMonPosMonSignPos; + QComboBox *m_cmbMonPosMonSignPos; + QLabel *m_labMonNegMonSignPos; + QComboBox *m_cmbMonNegMonSignPos; +}; + +#endif diff --git a/kcontrol/locale/localenum.cpp b/kcontrol/locale/localenum.cpp new file mode 100644 index 000000000..9e5445ded --- /dev/null +++ b/kcontrol/locale/localenum.cpp @@ -0,0 +1,194 @@ +/* + * localenum.cpp + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "toplevel.h" +#include "localenum.h" +#include "localenum.moc" + +KLocaleConfigNumber::KLocaleConfigNumber(KLocale *locale, + QWidget *parent, const char*name) + : QWidget(parent, name), + m_locale(locale) +{ + QGridLayout *lay = new QGridLayout(this, 5, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + lay->setAutoAdd(TRUE); + + m_labDecSym = new QLabel(this, I18N_NOOP("&Decimal symbol:")); + m_edDecSym = new QLineEdit(this); + connect( m_edDecSym, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotDecSymChanged(const QString &) ) ); + m_labDecSym->setBuddy(m_edDecSym); + + m_labThoSep = new QLabel(this, I18N_NOOP("Tho&usands separator:")); + m_edThoSep = new QLineEdit(this); + connect( m_edThoSep, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotThoSepChanged(const QString &) ) ); + m_labThoSep->setBuddy(m_edThoSep); + + m_labMonPosSign = new QLabel(this, I18N_NOOP("Positive si&gn:")); + m_edMonPosSign = new QLineEdit(this); + connect( m_edMonPosSign, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotMonPosSignChanged(const QString &) ) ); + m_labMonPosSign->setBuddy(m_edMonPosSign); + + m_labMonNegSign = new QLabel(this, I18N_NOOP("&Negative sign:")); + m_edMonNegSign = new QLineEdit(this); + connect( m_edMonNegSign, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotMonNegSignChanged(const QString &) ) ); + m_labMonNegSign->setBuddy(m_edMonNegSign); + + lay->setColStretch(1, 1); + + connect(this, SIGNAL(localeChanged()), + SLOT(slotLocaleChanged())); +} + +KLocaleConfigNumber::~KLocaleConfigNumber() +{ +} + +void KLocaleConfigNumber::save() +{ + // temperary use of our locale as the global locale + KLocale *lsave = KGlobal::_locale; + KGlobal::_locale = m_locale; + + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "Locale"); + + KSimpleConfig ent(locate("locale", + QString::fromLatin1("l10n/%1/entry.desktop") + .arg(m_locale->country())), true); + ent.setGroup("KCM Locale"); + + QString str; + + str = ent.readEntry("DecimalSymbol", + QString::fromLatin1(".")); + config->deleteEntry("DecimalSymbol", false, true); + if (str != m_locale->decimalSymbol()) + config->writeEntry("DecimalSymbol", + m_locale->decimalSymbol(), true, true); + + str = ent.readEntry("ThousandsSeparator", + QString::fromLatin1(",")); + config->deleteEntry("ThousandsSeparator", false, true); + str.replace(QString::fromLatin1("$0"), QString::null); + if (str != m_locale->thousandsSeparator()) + config->writeEntry("ThousandsSeparator", + QString::fromLatin1("$0%1$0") + .arg(m_locale->thousandsSeparator()), true, true); + + str = ent.readEntry("PositiveSign"); + config->deleteEntry("PositiveSign", false, true); + if (str != m_locale->positiveSign()) + config->writeEntry("PositiveSign", m_locale->positiveSign(), true, true); + + str = ent.readEntry("NegativeSign", QString::fromLatin1("-")); + config->deleteEntry("NegativeSign", false, true); + if (str != m_locale->negativeSign()) + config->writeEntry("NegativeSign", m_locale->negativeSign(), true, true); + + // restore the old global locale + KGlobal::_locale = lsave; +} + +void KLocaleConfigNumber::slotLocaleChanged() +{ + // #### load all settings here + m_edDecSym->setText( m_locale->decimalSymbol() ); + m_edThoSep->setText( m_locale->thousandsSeparator() ); + m_edMonPosSign->setText( m_locale->positiveSign() ); + m_edMonNegSign->setText( m_locale->negativeSign() ); +} + +void KLocaleConfigNumber::slotDecSymChanged(const QString &t) +{ + m_locale->setDecimalSymbol(t); + emit localeChanged(); +} + +void KLocaleConfigNumber::slotThoSepChanged(const QString &t) +{ + m_locale->setThousandsSeparator(t); + emit localeChanged(); +} + +void KLocaleConfigNumber::slotMonPosSignChanged(const QString &t) +{ + m_locale->setPositiveSign(t); + emit localeChanged(); +} + +void KLocaleConfigNumber::slotMonNegSignChanged(const QString &t) +{ + m_locale->setNegativeSign(t); + emit localeChanged(); +} + +void KLocaleConfigNumber::slotTranslate() +{ + QString str; + + str = m_locale->translate( "Here you can define the decimal separator used " + "to display numbers (i.e. a dot or a comma in " + "most countries).

      " + "Note that the decimal separator used to " + "display monetary values has to be set " + "separately (see the 'Money' tab)." ); + QWhatsThis::add( m_labDecSym, str ); + QWhatsThis::add( m_edDecSym, str ); + + str = m_locale->translate( "Here you can define the thousands separator " + "used to display numbers.

      " + "Note that the thousands separator used to " + "display monetary values has to be set " + "separately (see the 'Money' tab)." ); + QWhatsThis::add( m_labThoSep, str ); + QWhatsThis::add( m_edThoSep, str ); + + str = m_locale->translate( "Here you can specify text used to prefix " + "positive numbers. Most people leave this " + "blank." ); + QWhatsThis::add( m_labMonPosSign, str ); + QWhatsThis::add( m_edMonPosSign, str ); + + str = m_locale->translate( "Here you can specify text used to prefix " + "negative numbers. This should not be empty, so " + "you can distinguish positive and negative " + "numbers. It is normally set to minus (-)." ); + QWhatsThis::add( m_labMonNegSign, str ); + QWhatsThis::add( m_edMonNegSign, str ); +} diff --git a/kcontrol/locale/localenum.h b/kcontrol/locale/localenum.h new file mode 100644 index 000000000..da75dc708 --- /dev/null +++ b/kcontrol/locale/localenum.h @@ -0,0 +1,82 @@ +/* + * localenum.h + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef __KLOCALECONFIGNUM_H__ +#define __KLOCALECONFIGNUM_H__ + +#include + +class QCheckBox; +class QComboBox; +class QLineEdit; + +class KLocale; +class KLanguageCombo; + +class KLocaleConfigNumber : public QWidget +{ + Q_OBJECT + +public: + KLocaleConfigNumber( KLocale *_locale, + QWidget *parent=0, const char *name=0); + virtual ~KLocaleConfigNumber( ); + + void save(); + +public slots: + /** + * Loads all settings from the current locale into the current widget. + */ + void slotLocaleChanged(); + /** + * Retranslate all objects owned by this object using the current locale. + */ + void slotTranslate(); + +signals: + void localeChanged(); + +private slots: + // Numbers + void slotMonPosSignChanged(const QString &t); + void slotMonNegSignChanged(const QString &t); + void slotDecSymChanged(const QString &t); + void slotThoSepChanged(const QString &t); + +private: + KLocale *m_locale; + + // Numbers + QLabel *m_labDecSym; + QLineEdit *m_edDecSym; + QLabel *m_labThoSep; + QLineEdit *m_edThoSep; + QLabel *m_labMonPosSign; + QLineEdit *m_edMonPosSign; + QLabel *m_labMonNegSign; + QLineEdit *m_edMonNegSign; +}; + +#endif diff --git a/kcontrol/locale/localeother.cpp b/kcontrol/locale/localeother.cpp new file mode 100644 index 000000000..97f97ba2f --- /dev/null +++ b/kcontrol/locale/localeother.cpp @@ -0,0 +1,142 @@ +/* + * localeother.cpp + * + * Copyright (c) 2001-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "localeother.h" +#include "localeother.moc" + + +KLocaleConfigOther::KLocaleConfigOther(KLocale *locale, + QWidget *parent, const char*name) + : QWidget(parent, name), + m_locale(locale) +{ + // Other + QGridLayout *lay = new QGridLayout(this, 3, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + + m_labPageSize = new QLabel(this, I18N_NOOP("Paper format:")); + lay->addWidget(m_labPageSize, 0, 0); + m_combPageSize = new QComboBox(this); + lay->addWidget(m_combPageSize, 0, 1); + connect( m_combPageSize, SIGNAL( activated(int) ), + SLOT( slotPageSizeChanged(int) ) ); + + m_labMeasureSystem = new QLabel(this, I18N_NOOP("Measure system:")); + lay->addWidget(m_labMeasureSystem, 1, 0); + m_combMeasureSystem = new QComboBox(this); + lay->addWidget(m_combMeasureSystem, 1, 1); + connect( m_combMeasureSystem, SIGNAL( activated(int) ), + SLOT( slotMeasureSystemChanged(int) ) ); + + m_combPageSize->insertItem(QString::null); + m_combPageSize->insertItem(QString::null); + m_combMeasureSystem->insertItem(QString::null); + m_combMeasureSystem->insertItem(QString::null); + + lay->setColStretch(1, 1); + lay->addRowSpacing(2, 0); + + adjustSize(); +} + +KLocaleConfigOther::~KLocaleConfigOther() +{ +} + +void KLocaleConfigOther::save() +{ + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "Locale"); + + KSimpleConfig ent(locate("locale", + QString::fromLatin1("l10n/%1/entry.desktop") + .arg(m_locale->country())), true); + ent.setGroup("KCM Locale"); + + // ### HPB: Add code here + int i; + i = ent.readNumEntry("PageSize", (int)QPrinter::A4); + config->deleteEntry("PageSize", false, true); + if (i != m_locale->pageSize()) + config->writeEntry("PageSize", + m_locale->pageSize(), true, true); + + i = ent.readNumEntry("MeasureSystem", (int)KLocale::Metric); + config->deleteEntry("MeasureSystem", false, true); + if (i != m_locale->measureSystem()) + config->writeEntry("MeasureSystem", + m_locale->measureSystem(), true, true); + + config->sync(); +} + +void KLocaleConfigOther::slotLocaleChanged() +{ + m_combMeasureSystem->setCurrentItem(m_locale->measureSystem()); + + int pageSize = m_locale->pageSize(); + + int i = 0; // default to A4 + if ( pageSize == (int)QPrinter::Letter ) + i = 1; + m_combPageSize->setCurrentItem(i); +} + +void KLocaleConfigOther::slotTranslate() +{ + m_combMeasureSystem->changeItem( m_locale->translate("The Metric System", + "Metric"), 0 ); + m_combMeasureSystem->changeItem( m_locale->translate("The Imperial System", + "Imperial"), 1 ); + + m_combPageSize->changeItem( m_locale->translate("A4"), 0 ); + m_combPageSize->changeItem( m_locale->translate("US Letter"), 1 ); +} + +void KLocaleConfigOther::slotPageSizeChanged(int i) +{ + QPrinter::PageSize pageSize = QPrinter::A4; + + if ( i == 1 ) + pageSize = QPrinter::Letter; + + m_locale->setPageSize((int)pageSize); + emit localeChanged(); +} + +void KLocaleConfigOther::slotMeasureSystemChanged(int i) +{ + m_locale->setMeasureSystem((KLocale::MeasureSystem)i); + emit localeChanged(); +} diff --git a/kcontrol/locale/localeother.h b/kcontrol/locale/localeother.h new file mode 100644 index 000000000..1c6ec0b48 --- /dev/null +++ b/kcontrol/locale/localeother.h @@ -0,0 +1,70 @@ +/* + * localeother.h + * + * Copyright (c) 2001-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KLOCALECONFIGOTHER_H__ +#define __KLOCALECONFIGOTHER_H__ + +#include + +class QLabel; +class QComboBox; + +class KLocale; + +class KLocaleConfigOther : public QWidget +{ + Q_OBJECT + +public: + KLocaleConfigOther(KLocale *locale, QWidget *parent = 0, const char *name = 0); + virtual ~KLocaleConfigOther(); + + void save(); + +public slots: + /** + * Loads all settings from the current locale into the current widget. + */ + void slotLocaleChanged(); + /** + * Retranslate all objects owned by this object using the current locale. + */ + void slotTranslate(); + +signals: + void localeChanged(); + +private slots: + void slotPageSizeChanged(int i); + void slotMeasureSystemChanged(int i); + +private: + KLocale *m_locale; + + QLabel *m_labMeasureSystem; + QComboBox *m_combMeasureSystem; + QLabel *m_labPageSize; + QComboBox *m_combPageSize; +}; + +#endif diff --git a/kcontrol/locale/localetime.cpp b/kcontrol/locale/localetime.cpp new file mode 100644 index 000000000..ea077ac89 --- /dev/null +++ b/kcontrol/locale/localetime.cpp @@ -0,0 +1,556 @@ +/* + * localetime.cpp + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "toplevel.h" +#include "localetime.h" +#include "localetime.moc" + +class StringPair +{ +public: + QChar storeName; + QString userName; + + static StringPair find( const QValueList &list, const QChar &c) + { + for ( QValueList::ConstIterator it = list.begin(); + it != list.end(); + ++it ) + if ((*it).storeName==c) return (*it); + + StringPair r; + return r; + } + +}; + +/* Sort the string pairs with qHeapSort in the order we want + ( relative to the userName value and with "MESCORTO" before "MES" ) + */ +bool operator< (const StringPair &p1, const StringPair &p2) +{ + return ! (p1.userName (const StringPair &p1, const StringPair &p2) +{ + return ! (p1.userName>p2.userName); +} + +bool operator>= (const StringPair &p1, const StringPair &p2) +{ + return ! (p1.userName>=p2.userName); +} + +StringPair KLocaleConfigTime::buildStringPair(const QChar &c, const QString &s) const +{ + StringPair pair; + pair.storeName=c; + pair.userName=s; + return pair; +} + +QValueList KLocaleConfigTime::timeMap() const +{ + QValueList < StringPair > list; + list+=buildStringPair('H',m_locale->translate("HH")); + list+=buildStringPair('k',m_locale->translate("hH")); + list+=buildStringPair('I',m_locale->translate("PH")); + list+=buildStringPair('l',m_locale->translate("pH")); + list+=buildStringPair('M',m_locale->translate("Minute", "MM")); + list+=buildStringPair('S',m_locale->translate("SS")); + list+=buildStringPair('p',m_locale->translate("AMPM")); + + qHeapSort( list ); + + return list; +} + +QValueList KLocaleConfigTime::dateMap() const +{ + QValueList < StringPair > list; + list+=buildStringPair('Y',m_locale->translate("YYYY")); + list+=buildStringPair('y',m_locale->translate("YY")); + list+=buildStringPair('n',m_locale->translate("mM")); + list+=buildStringPair('m',m_locale->translate("Month", "MM")); + list+=buildStringPair('b',m_locale->translate("SHORTMONTH")); + list+=buildStringPair('B',m_locale->translate("MONTH")); + list+=buildStringPair('e',m_locale->translate("dD")); + list+=buildStringPair('d',m_locale->translate("DD")); + list+=buildStringPair('a',m_locale->translate("SHORTWEEKDAY")); + list+=buildStringPair('A',m_locale->translate("WEEKDAY")); + + qHeapSort( list ); + + return list; +} + +QString KLocaleConfigTime::userToStore(const QValueList & list, + const QString & userFormat) const +{ + QString result; + + for ( uint pos = 0; pos < userFormat.length(); ++pos ) + { + bool bFound = false; + for ( QValueList::ConstIterator it = list.begin(); + it != list.end() && !bFound; + ++it ) + { + QString s = (*it).userName; + + if ( userFormat.mid( pos, s.length() ) == s ) + { + result += '%'; + result += (*it).storeName; + + pos += s.length() - 1; + + bFound = true; + } + } + + if ( !bFound ) + { + QChar c = userFormat.at( pos ); + if ( c == '%' ) + result += c; + + result += c; + } + } + + return result; +} + +QString KLocaleConfigTime::storeToUser(const QValueList & list, + const QString & storeFormat) const +{ + QString result; + + bool escaped = false; + for ( uint pos = 0; pos < storeFormat.length(); ++pos ) + { + QChar c = storeFormat.at(pos); + if ( escaped ) + { + StringPair it = StringPair::find( list, c ); + if ( !it.userName.isEmpty() ) + result += it.userName; + else + result += c; + + escaped = false; + } + else if ( c == '%' ) + escaped = true; + else + result += c; + } + + return result; +} + +KLocaleConfigTime::KLocaleConfigTime(KLocale *_locale, + QWidget *parent, const char*name) + : QWidget(parent, name), + m_locale(_locale) +{ + // Time + QGridLayout *lay = new QGridLayout(this, 7, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + lay->setAutoAdd(TRUE); + + m_labCalendarSystem = new QLabel(this, I18N_NOOP("Calendar system:")); + m_comboCalendarSystem = new QComboBox(false, this); + connect(m_comboCalendarSystem, SIGNAL(activated(int)), + this, SLOT(slotCalendarSystemChanged(int))); + QStringList tmpCalendars; + tmpCalendars << QString::null << QString::null; + m_comboCalendarSystem->insertStringList(tmpCalendars); + + m_labTimeFmt = new QLabel(this, I18N_NOOP("Time format:")); + m_comboTimeFmt = new QComboBox(true, this); + //m_edTimeFmt = m_comboTimeFmt->lineEdit(); + //m_edTimeFmt = new QLineEdit(this); + connect( m_comboTimeFmt, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotTimeFmtChanged(const QString &) ) ); + + m_labDateFmt = new QLabel(this, I18N_NOOP("Date format:")); + m_comboDateFmt = new QComboBox(true, this); + connect( m_comboDateFmt, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotDateFmtChanged(const QString &) ) ); + + m_labDateFmtShort = new QLabel(this, I18N_NOOP("Short date format:")); + m_comboDateFmtShort = new QComboBox(true, this); + connect( m_comboDateFmtShort, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotDateFmtShortChanged(const QString &) ) ); + + m_labWeekStartDay = new QLabel(this, I18N_NOOP("First day of the week:")); + m_comboWeekStartDay = new QComboBox(false, this); + connect (m_comboWeekStartDay, SIGNAL(activated(int)), + this, SLOT(slotWeekStartDayChanged(int))); + + updateWeekDayNames(); + + m_chDateMonthNamePossessive = new QCheckBox(this, I18N_NOOP("Use declined form of month name")); + connect( m_chDateMonthNamePossessive, SIGNAL( clicked() ), + SLOT( slotDateMonthNamePossChanged() ) ); + + lay->setColStretch(1, 1); +} + +KLocaleConfigTime::~KLocaleConfigTime() +{ +} + +void KLocaleConfigTime::save() +{ + // temperary use of our locale as the global locale + KLocale *lsave = KGlobal::_locale; + KGlobal::_locale = m_locale; + + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "Locale"); + + KSimpleConfig ent(locate("locale", + QString::fromLatin1("l10n/%1/entry.desktop") + .arg(m_locale->country())), true); + ent.setGroup("KCM Locale"); + + QString str; + + str = ent.readEntry("CalendarSystem", QString::fromLatin1("gregorian")); + config->deleteEntry("CalendarSystem", false, true); + if (str != m_locale->calendarType()) + config->writeEntry("CalendarSystem", m_locale->calendarType(), true, true); + + str = ent.readEntry("TimeFormat", QString::fromLatin1("%H:%M:%S")); + config->deleteEntry("TimeFormat", false, true); + if (str != m_locale->timeFormat()) + config->writeEntry("TimeFormat", m_locale->timeFormat(), true, true); + + str = ent.readEntry("DateFormat", QString::fromLatin1("%A %d %B %Y")); + config->deleteEntry("DateFormat", false, true); + if (str != m_locale->dateFormat()) + config->writeEntry("DateFormat", m_locale->dateFormat(), true, true); + + str = ent.readEntry("DateFormatShort", QString::fromLatin1("%Y-%m-%d")); + config->deleteEntry("DateFormatShort", false, true); + if (str != m_locale->dateFormatShort()) + config->writeEntry("DateFormatShort", + m_locale->dateFormatShort(), true, true); + + int firstDay; + firstDay = ent.readNumEntry("WeekStartDay", 1); + config->deleteEntry("WeekStartDay", false, true); + if (firstDay != m_locale->weekStartDay()) + config->writeEntry("WeekStartDay", m_locale->weekStartDay(), true, true); + + if ( m_locale->nounDeclension() ) + { + bool b; + b = ent.readBoolEntry("DateMonthNamePossessive", false); + config->deleteEntry("DateMonthNamePossessive", false, true); + if (b != m_locale->dateMonthNamePossessive()) + config->writeEntry("DateMonthNamePossessive", + m_locale->dateMonthNamePossessive(), true, true); + } + + config->sync(); + + // restore the old global locale + KGlobal::_locale = lsave; +} + +void KLocaleConfigTime::showEvent( QShowEvent *e ) +{ + // This option makes sense only for languages where nouns are declined + if ( !m_locale->nounDeclension() ) + m_chDateMonthNamePossessive->hide(); + QWidget::showEvent( e ); +} + +void KLocaleConfigTime::slotCalendarSystemChanged(int calendarSystem) +{ + kdDebug() << "CalendarSystem: " << calendarSystem << endl; + + typedef QValueVector CalendarVector; + CalendarVector calendars(4); + calendars[0] = "gregorian"; + calendars[1] = "hijri"; + calendars[2] = "hebrew"; + calendars[3] = "jalali"; + + QString calendarType; + bool ok; + calendarType = calendars.at(calendarSystem, &ok); + if ( !ok ) + calendarType = calendars.first(); + + m_locale->setCalendar(calendarType); + + updateWeekDayNames(); + emit localeChanged(); +} + +void KLocaleConfigTime::slotLocaleChanged() +{ + typedef QValueVector CalendarVector; + CalendarVector calendars(4); + calendars[0] = "gregorian"; + calendars[1] = "hijri"; + calendars[2] = "hebrew"; + calendars[3] = "jalali"; + + QString calendarType = m_locale->calendarType(); + int calendarSystem = 0; + + CalendarVector::iterator it = qFind(calendars.begin(), calendars.end(), +calendarType); + if ( it != calendars.end() ) + calendarSystem = it - calendars.begin(); + + kdDebug() << "calSys: " << calendarSystem << ": " << calendarType << endl; + m_comboCalendarSystem->setCurrentItem( calendarSystem ); + + // m_edTimeFmt->setText( m_locale->timeFormat() ); + m_comboTimeFmt->setEditText( storeToUser( timeMap(), + m_locale->timeFormat() ) ); + // m_edDateFmt->setText( m_locale->dateFormat() ); + m_comboDateFmt->setEditText( storeToUser( dateMap(), + m_locale->dateFormat() ) ); + //m_edDateFmtShort->setText( m_locale->dateFormatShort() ); + m_comboDateFmtShort->setEditText( storeToUser( dateMap(), + m_locale->dateFormatShort() ) ); + m_comboWeekStartDay->setCurrentItem( m_locale->weekStartDay() - 1 ); + + if ( m_locale->nounDeclension() ) + m_chDateMonthNamePossessive->setChecked( m_locale->dateMonthNamePossessive() ); + + kdDebug(173) << "converting: " << m_locale->timeFormat() << endl; + kdDebug(173) << storeToUser(timeMap(), + m_locale->timeFormat()) << endl; + kdDebug(173) << userToStore(timeMap(), + QString::fromLatin1("HH:MM:SS AMPM test")) << endl; + +} + +void KLocaleConfigTime::slotTimeFmtChanged(const QString &t) +{ + // m_locale->setTimeFormat(t); + m_locale->setTimeFormat( userToStore( timeMap(), t ) ); + + emit localeChanged(); +} + +void KLocaleConfigTime::slotDateFmtChanged(const QString &t) +{ + // m_locale->setDateFormat(t); + m_locale->setDateFormat( userToStore( dateMap(), t ) ); + emit localeChanged(); +} + +void KLocaleConfigTime::slotDateFmtShortChanged(const QString &t) +{ + //m_locale->setDateFormatShort(t); + m_locale->setDateFormatShort( userToStore( dateMap(), t ) ); + emit localeChanged(); +} + +void KLocaleConfigTime::slotWeekStartDayChanged(int firstDay) { + kdDebug(173) << k_funcinfo << "first day is now: " << firstDay << endl; + m_locale->setWeekStartDay(m_comboWeekStartDay->currentItem() + 1); + emit localeChanged(); +} + +void KLocaleConfigTime::slotDateMonthNamePossChanged() +{ + if (m_locale->nounDeclension()) + { + m_locale->setDateMonthNamePossessive(m_chDateMonthNamePossessive->isChecked()); + emit localeChanged(); + } +} + +void KLocaleConfigTime::slotTranslate() +{ + QString str; + + QString sep = QString::fromLatin1("\n"); + + QString old; + + // clear() and insertStringList also changes the current item, so + // we better use save and restore here.. + old = m_comboTimeFmt->currentText(); + m_comboTimeFmt->clear(); + str = i18n("some reasonable time formats for the language", + "HH:MM:SS\n" + "pH:MM:SS AMPM"); + m_comboTimeFmt->insertStringList(QStringList::split(sep, str)); + m_comboTimeFmt->setEditText(old); + + old = m_comboDateFmt->currentText(); + m_comboDateFmt->clear(); + str = i18n("some reasonable date formats for the language", + "WEEKDAY MONTH dD YYYY\n" + "SHORTWEEKDAY MONTH dD YYYY"); + m_comboDateFmt->insertStringList(QStringList::split(sep, str)); + m_comboDateFmt->setEditText(old); + + old = m_comboDateFmtShort->currentText(); + m_comboDateFmtShort->clear(); + str = i18n("some reasonable short date formats for the language", + "YYYY-MM-DD\n" + "dD.mM.YYYY\n" + "DD.MM.YYYY"); + m_comboDateFmtShort->insertStringList(QStringList::split(sep, str)); + m_comboDateFmtShort->setEditText(old); + + updateWeekDayNames(); + + while ( m_comboCalendarSystem->count() < 4 ) + m_comboCalendarSystem->insertItem(QString::null); + m_comboCalendarSystem->changeItem + (m_locale->translate("Calendar System Gregorian", "Gregorian"), 0); + m_comboCalendarSystem->changeItem + (m_locale->translate("Calendar System Hijri", "Hijri"), 1); + m_comboCalendarSystem->changeItem + (m_locale->translate("Calendar System Hebrew", "Hebrew"), 2); + m_comboCalendarSystem->changeItem + (m_locale->translate("Calendar System Jalali", "Jalali"), 3); + + str = m_locale->translate + ("

      The text in this textbox will be used to format " + "time strings. The sequences below will be replaced:

      " + "" + "" + "" + "" + "" + "" + "" + "" + "
      HHThe hour as a decimal number using a 24-hour " + "clock (00-23).
      hHThe hour (24-hour clock) as a decimal number " + "(0-23).
      PHThe hour as a decimal number using a 12-hour " + "clock (01-12).
      pHThe hour (12-hour clock) as a decimal number " + "(1-12).
      MMThe minutes as a decimal number (00-59)." + "
      SSThe seconds as a decimal number (00-59)." + "
      AMPMEither \"am\" or \"pm\" according to the " + "given time value. Noon is treated as \"pm\" and midnight as \"am\"." + "
      "); + QWhatsThis::add( m_labTimeFmt, str ); + QWhatsThis::add( m_comboTimeFmt, str ); + + QString datecodes = m_locale->translate( + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
      YYYYThe year with century as a decimal number." + "
      YYThe year without century as a decimal number " + "(00-99).
      MMThe month as a decimal number (01-12)." + "
      mMThe month as a decimal number (1-12).
      SHORTMONTHThe first three characters of the month name. " + "
      MONTHThe full month name.
      DDThe day of month as a decimal number (01-31)." + "
      dDThe day of month as a decimal number (1-31)." + "
      SHORTWEEKDAYThe first three characters of the weekday name." + "
      WEEKDAYThe full weekday name.
      "); + + str = m_locale->translate + ( "

      The text in this textbox will be used to format long " + "dates. The sequences below will be replaced:

      ") + datecodes; + QWhatsThis::add( m_labDateFmt, str ); + QWhatsThis::add( m_comboDateFmt, str ); + + str = m_locale->translate + ( "

      The text in this textbox will be used to format short " + "dates. For instance, this is used when listing files. " + "The sequences below will be replaced:

      ") + datecodes; + QWhatsThis::add( m_labDateFmtShort, str ); + QWhatsThis::add( m_comboDateFmtShort, str ); + + str = m_locale->translate + ("

      This option determines which day will be considered as " + "the first one of the week.

      "); + QWhatsThis::add( m_comboWeekStartDay, str ); + + if ( m_locale->nounDeclension() ) + { + str = m_locale->translate + ("

      This option determines whether possessive form of month " + "names should be used in dates.

      "); + QWhatsThis::add( m_chDateMonthNamePossessive, str ); + } +} + +void KLocaleConfigTime::updateWeekDayNames() +{ + const KCalendarSystem * calendar = m_locale->calendar(); + + for ( int i = 1; ; ++i ) + { + QString str = calendar->weekDayName(i); + bool outsideComboList = m_comboWeekStartDay->count() < i; + + if ( str.isNull() ) + { + if ( outsideComboList ) + break; + else + m_comboWeekStartDay->removeItem(i - 1); + } + + if ( outsideComboList ) + m_comboWeekStartDay->insertItem(str, i - 1); + else + m_comboWeekStartDay->changeItem(str, i - 1); + } +} diff --git a/kcontrol/locale/localetime.h b/kcontrol/locale/localetime.h new file mode 100644 index 000000000..c77f00cd3 --- /dev/null +++ b/kcontrol/locale/localetime.h @@ -0,0 +1,102 @@ +/* + * localetime.h + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KLOCALECONFIGTIME_H__ +#define __KLOCALECONFIGTIME_H__ + +#include + +#include + +class QCheckBox; +class QComboBox; + +class KLocale; +class KLanguageCombo; + +class StringPair; + +class KLocaleConfigTime : public QWidget +{ + Q_OBJECT + +public: + KLocaleConfigTime( KLocale *_locale, QWidget *parent=0, const char *name=0); + virtual ~KLocaleConfigTime( ); + + void save(); + +protected: + void showEvent( QShowEvent *e ); + +public slots: + /** + * Loads all settings from the current locale into the current widget. + */ + void slotLocaleChanged(); + /** + * Retranslate all objects owned by this object using the current locale. + */ + void slotTranslate(); + +signals: + void localeChanged(); + +private slots: + // Time & dates + void slotTimeFmtChanged(const QString &t); + void slotDateFmtChanged(const QString &t); + void slotDateFmtShortChanged(const QString &t); + void slotWeekStartDayChanged(int firstDay); + void slotDateMonthNamePossChanged(); + void slotCalendarSystemChanged(int calendarSystem); + +private: + void updateWeekDayNames(); + + QValueList timeMap() const; + QValueList dateMap() const; + + QString storeToUser(const QValueList & map, + const QString & storeFormat) const; + QString userToStore(const QValueList & map, + const QString & userFormat) const; + StringPair buildStringPair(const QChar &storeName, const QString &userName) const; + + KLocale *m_locale; + + // Time & dates + QLabel *m_labTimeFmt; + QComboBox *m_comboTimeFmt; + QLabel *m_labDateFmt; + QComboBox * m_comboDateFmt; + QLabel *m_labDateFmtShort; + QComboBox * m_comboDateFmtShort; + QLabel * m_labWeekStartDay; + QComboBox * m_comboWeekStartDay; + QCheckBox *m_chDateMonthNamePossessive; + QLabel * m_labCalendarSystem; + QComboBox * m_comboCalendarSystem; +}; + +#endif diff --git a/kcontrol/locale/main.cpp b/kcontrol/locale/main.cpp new file mode 100644 index 000000000..7a861495b --- /dev/null +++ b/kcontrol/locale/main.cpp @@ -0,0 +1,38 @@ +/* + main.cpp - A KControl Application + + Copyright 1999-2003 Hans Petter Bieker + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + */ + +#include "toplevel.h" + +extern "C" { + KDE_EXPORT void *init_kcm_locale() { + KLocale::setMainCatalogue("kcmlocale"); + return new KLocaleFactory("kcmlocale"); + } +} + +/* +extern "C" { + KCModule *create_locale(QWidget *parent, const char* name) { + KLocale::setMainCatalogue("kcmlocale"); + return new KLocaleApplication(parent, "kcmlocale"); + } +} +*/ diff --git a/kcontrol/locale/pics/Makefile.am b/kcontrol/locale/pics/Makefile.am new file mode 100644 index 000000000..4929480b0 --- /dev/null +++ b/kcontrol/locale/pics/Makefile.am @@ -0,0 +1,2 @@ +pics_DATA = background.png +picsdir = $(kde_datadir)/kcmlocale/pics diff --git a/kcontrol/locale/pics/background.png b/kcontrol/locale/pics/background.png new file mode 100644 index 000000000..d9d64462b Binary files /dev/null and b/kcontrol/locale/pics/background.png differ diff --git a/kcontrol/locale/toplevel.cpp b/kcontrol/locale/toplevel.cpp new file mode 100644 index 000000000..4ba70e1ed --- /dev/null +++ b/kcontrol/locale/toplevel.cpp @@ -0,0 +1,276 @@ +/* + toplevel.cpp - A KControl Application + + Copyright 1998 Matthias Hoelzer + Copyright 1999-2003 Hans Petter Bieker + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "localenum.h" +#include "localemon.h" +#include "localetime.h" +#include "localeother.h" +#include "klocalesample.h" +#include "toplevel.h" +#include "kcmlocale.h" +#include "toplevel.moc" + +KLocaleApplication::KLocaleApplication(QWidget *parent, const char* /*name*/, + const QStringList &args) + : KCModule( KLocaleFactory::instance(), parent, args) +{ + KAboutData* aboutData = new KAboutData("kcmlocale", + I18N_NOOP("KCMLocale"), + "3.0", + I18N_NOOP("Regional settings"), + KAboutData::License_GPL, + "(C) 1998 Matthias Hoelzer, " + "(C) 1999-2003 Hans Petter Bieker", + 0, 0, "bieker@kde.org"); + setAboutData( aboutData ); + + m_nullConfig = new KConfig(QString::null, false, false); + m_globalConfig = new KConfig(QString::null, false, true); + + m_locale = new KLocale(QString::fromLatin1("kcmlocale"), m_nullConfig); + QVBoxLayout *l = new QVBoxLayout(this, 0, KDialog::spacingHint()); + l->setAutoAdd(TRUE); + + m_tab = new QTabWidget(this); + + m_localemain = new KLocaleConfig(m_locale, this); + m_tab->addTab( m_localemain, QString::null); + m_localenum = new KLocaleConfigNumber(m_locale, this); + m_tab->addTab( m_localenum, QString::null ); + m_localemon = new KLocaleConfigMoney(m_locale, this); + m_tab->addTab( m_localemon, QString::null ); + m_localetime = new KLocaleConfigTime(m_locale, this); + m_tab->addTab( m_localetime, QString::null ); + m_localeother = new KLocaleConfigOther(m_locale, this); + m_tab->addTab( m_localeother, QString::null ); + + // Examples + m_gbox = new QVGroupBox(this); + m_sample = new KLocaleSample(m_locale, m_gbox); + + // getting signals from childs + connect(m_localemain, SIGNAL(localeChanged()), + this, SIGNAL(localeChanged())); + connect(m_localemain, SIGNAL(languageChanged()), + this, SIGNAL(languageChanged())); + + // run the slots on the childs + connect(this, SIGNAL(localeChanged()), + m_localemain, SLOT(slotLocaleChanged())); + connect(this, SIGNAL(localeChanged()), + m_localenum, SLOT(slotLocaleChanged())); + connect(this, SIGNAL(localeChanged()), + m_localemon, SLOT(slotLocaleChanged())); + connect(this, SIGNAL(localeChanged()), + m_localetime, SLOT(slotLocaleChanged())); + connect(this, SIGNAL(localeChanged()), + m_localeother, SLOT(slotLocaleChanged())); + + // keep the example up to date + // NOTE: this will make the sample be updated 6 times the first time + // because combo boxes++ emits the change signal not only when the user changes + // it, but also when it's changed by the program. + connect(m_localenum, SIGNAL(localeChanged()), + m_sample, SLOT(slotLocaleChanged())); + connect(m_localemon, SIGNAL(localeChanged()), + m_sample, SLOT(slotLocaleChanged())); + connect(m_localetime, SIGNAL(localeChanged()), + m_sample, SLOT(slotLocaleChanged())); + // No examples for this yet + //connect(m_localeother, SIGNAL(slotLocaleChanged()), + //m_sample, SLOT(slotLocaleChanged())); + connect(this, SIGNAL(localeChanged()), + m_sample, SLOT(slotLocaleChanged())); + + // make sure we always have translated interface + connect(this, SIGNAL(languageChanged()), + this, SLOT(slotTranslate())); + connect(this, SIGNAL(languageChanged()), + m_localemain, SLOT(slotTranslate())); + connect(this, SIGNAL(languageChanged()), + m_localenum, SLOT(slotTranslate())); + connect(this, SIGNAL(languageChanged()), + m_localemon, SLOT(slotTranslate())); + connect(this, SIGNAL(languageChanged()), + m_localetime, SLOT(slotTranslate())); + connect(this, SIGNAL(languageChanged()), + m_localeother, SLOT(slotTranslate())); + + // mark it as changed when we change it. + connect(m_localemain, SIGNAL(localeChanged()), + SLOT(slotChanged())); + connect(m_localenum, SIGNAL(localeChanged()), + SLOT(slotChanged())); + connect(m_localemon, SIGNAL(localeChanged()), + SLOT(slotChanged())); + connect(m_localetime, SIGNAL(localeChanged()), + SLOT(slotChanged())); + connect(m_localeother, SIGNAL(localeChanged()), + SLOT(slotChanged())); + + load(); +} + +KLocaleApplication::~KLocaleApplication() +{ + delete m_locale; + delete m_globalConfig; + delete m_nullConfig; +} + +void KLocaleApplication::load() +{ + load( false ); +} + +void KLocaleApplication::load( bool useDefaults ) +{ + m_globalConfig->setReadDefaults( useDefaults ); + m_globalConfig->reparseConfiguration(); + *m_locale = KLocale(QString::fromLatin1("kcmlocale"), m_globalConfig); + + emit localeChanged(); + emit languageChanged(); + emit changed(useDefaults); +} + +void KLocaleApplication::save() +{ + // temperary use of our locale as the global locale + KLocale *lsave = KGlobal::_locale; + KGlobal::_locale = m_locale; + KMessageBox::information(this, m_locale->translate + ("Changed language settings apply only to " + "newly started applications.\nTo change the " + "language of all programs, you will have to " + "logout first."), + m_locale->translate("Applying Language Settings"), + QString::fromLatin1("LanguageChangesApplyOnlyToNewlyStartedPrograms")); + // restore the old global locale + KGlobal::_locale = lsave; + + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "Locale"); + + // ##### this doesn't make sense + bool langChanged = config->readEntry("Language") + != m_locale->language(); + + m_localemain->save(); + m_localenum->save(); + m_localemon->save(); + m_localetime->save(); + m_localeother->save(); + + // rebuild the date base if language was changed + if (langChanged) + { + KService::rebuildKSycoca(this); + } + + emit changed(false); +} + +void KLocaleApplication::defaults() +{ + load( true ); +} + +QString KLocaleApplication::quickHelp() const +{ + return m_locale->translate("

      Country/Region & Language

      \n" + "

      From here you can configure language, numeric, and time \n" + "settings for your particular region. In most cases it will be \n" + "sufficient to choose the country you live in. For instance KDE \n" + "will automatically choose \"German\" as language if you choose \n" + "\"Germany\" from the list. It will also change the time format \n" + "to use 24 hours and and use comma as decimal separator.

      \n"); +} + +void KLocaleApplication::slotTranslate() +{ + // The untranslated string for QLabel are stored in + // the name() so we use that when retranslating + QObject *wc; + QObjectList *list = queryList("QWidget"); + QObjectListIt it(*list); + while ( (wc = it.current()) != 0 ) + { + ++it; + + // unnamed labels will cause errors and should not be + // retranslated. E.g. the example box should not be + // retranslated from here. + if (wc->name() == 0) + continue; + if (::qstrcmp(wc->name(), "") == 0) + continue; + if (::qstrcmp(wc->name(), "unnamed") == 0) + continue; + + if (::qstrcmp(wc->className(), "QLabel") == 0) + ((QLabel *)wc)->setText( m_locale->translate( wc->name() ) ); + else if (::qstrcmp(wc->className(), "QGroupBox") == 0 || + ::qstrcmp(wc->className(), "QVGroupBox") == 0) + ((QGroupBox *)wc)->setTitle( m_locale->translate( wc->name() ) ); + else if (::qstrcmp(wc->className(), "QPushButton") == 0 || + ::qstrcmp(wc->className(), "KMenuButton") == 0) + ((QPushButton *)wc)->setText( m_locale->translate( wc->name() ) ); + else if (::qstrcmp(wc->className(), "QCheckBox") == 0) + ((QCheckBox *)wc)->setText( m_locale->translate( wc->name() ) ); + } + delete list; + + // Here we have the pointer + m_gbox->setCaption(m_locale->translate("Examples")); + m_tab->changeTab(m_localemain, m_locale->translate("&Locale")); + m_tab->changeTab(m_localenum, m_locale->translate("&Numbers")); + m_tab->changeTab(m_localemon, m_locale->translate("&Money")); + m_tab->changeTab(m_localetime, m_locale->translate("&Time && Dates")); + m_tab->changeTab(m_localeother, m_locale->translate("&Other")); + + // FIXME: All widgets are done now. However, there are + // still some problems. Popup menus from the QLabels are + // not retranslated. +} + +void KLocaleApplication::slotChanged() +{ + emit changed(true); +} + diff --git a/kcontrol/locale/toplevel.h b/kcontrol/locale/toplevel.h new file mode 100644 index 000000000..746f22a69 --- /dev/null +++ b/kcontrol/locale/toplevel.h @@ -0,0 +1,87 @@ +/* + toplevel.h - A KControl Application + + written 1998 by Matthias Hoelzer + + Copyright 1998 Matthias Hoelzer. + Copyright 1999-2003 Hans Petter Bieker . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + */ + +#ifndef __TOPLEVEL_H__ +#define __TOPLEVEL_H__ + +#include +#include + +class QTabWidget; +class QGroupBox; + +class KConfig; +class KLocale; +class KLocaleConfig; +class KLocaleConfigMoney; +class KLocaleConfigNumber; +class KLocaleConfigTime; +class KLocaleConfigOther; +class KLocaleSample; + +class KLocaleApplication : public KCModule +{ + Q_OBJECT + +public: + KLocaleApplication(QWidget *parent, const char *name, const QStringList &); + virtual ~KLocaleApplication(); + + virtual void load(); + virtual void load(bool useDefault); + virtual void save(); + virtual void defaults(); + virtual QString quickHelp() const; + +signals: + void languageChanged(); + void localeChanged(); + +public slots: + /** + * Retranslates the current widget. + */ + void slotTranslate(); + void slotChanged(); + +private: + KLocale *m_locale; + + QTabWidget *m_tab; + KLocaleConfig *m_localemain; + KLocaleConfigNumber *m_localenum; + KLocaleConfigMoney *m_localemon; + KLocaleConfigTime *m_localetime; + KLocaleConfigOther *m_localeother; + + QGroupBox *m_gbox; + KLocaleSample *m_sample; + + KConfig * m_globalConfig; + KConfig * m_nullConfig; +}; + +typedef KGenericFactory KLocaleFactory; + +#endif diff --git a/kcontrol/nics/AUTHORS b/kcontrol/nics/AUTHORS new file mode 100644 index 000000000..2bda83486 --- /dev/null +++ b/kcontrol/nics/AUTHORS @@ -0,0 +1,2 @@ + Alexander Neundorf + diff --git a/kcontrol/nics/Makefile.am b/kcontrol/nics/Makefile.am new file mode 100644 index 000000000..9cd225329 --- /dev/null +++ b/kcontrol/nics/Makefile.am @@ -0,0 +1,15 @@ +kde_module_LTLIBRARIES = kcm_nic.la + +kcm_nic_la_SOURCES = nic.cpp + +kcm_nic_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_nic_la_LIBADD = -lkdeui $(LIB_KIO) $(LIBSOCKET) + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +messages: + $(XGETTEXT) $(kcm_nic_la_SOURCES) -o $(podir)/kcmnic.pot + +xdg_apps_DATA = nic.desktop diff --git a/kcontrol/nics/configure.in.in b/kcontrol/nics/configure.in.in new file mode 100644 index 000000000..e08832ebc --- /dev/null +++ b/kcontrol/nics/configure.in.in @@ -0,0 +1,4 @@ +AC_CHECK_FUNCS(getifaddrs getnameinfo) +AC_CHECK_MEMBERS([struct sockaddr.sa_len],,,[ +#include +#include ]) diff --git a/kcontrol/nics/nic.cpp b/kcontrol/nics/nic.cpp new file mode 100644 index 000000000..97bb9f42b --- /dev/null +++ b/kcontrol/nics/nic.cpp @@ -0,0 +1,323 @@ +/* + * nic.cpp + * + * Copyright (C) 2001 Alexander Neundorf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_SYS_SOCKIO_H +#include +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "nic.h" + +#ifdef USE_SOLARIS +/* net/if.h is incompatible with STL on Solaris 2.6 - 2.8, redefine + map in the header file because we don't need it. -- Simon Josefsson */ +#define map junkmap +#endif +# include +#ifdef USE_SOLARIS +#undef map +#endif + +#include + +#ifndef HAVE_STRUCT_SOCKADDR_SA_LEN + #undef HAVE_GETNAMEINFO + #undef HAVE_GETIFADDRS +#endif + +#if defined(HAVE_GETNAMEINFO) && defined(HAVE_GETIFADDRS) + #include + #include + + QString flags_tos (unsigned int flags); +#endif + +typedef KGenericFactory KCMNicFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_nic, KCMNicFactory("kcmnic")) + +struct MyNIC +{ + QString name; + QString addr; + QString netmask; + QString state; + QString type; + QString HWaddr; +}; + +typedef QPtrList NICList; + +NICList* findNICs(); + +KCMNic::KCMNic(QWidget *parent, const char * name, const QStringList &) + :KCModule(KCMNicFactory::instance(), parent,name) +{ + QVBoxLayout *box=new QVBoxLayout(this, 0, KDialog::spacingHint()); + m_list=new QListView(this); + box->addWidget(m_list); + m_list->addColumn(i18n("Name")); + m_list->addColumn(i18n("IP Address")); + m_list->addColumn(i18n("Network Mask")); + m_list->addColumn(i18n("Type")); + m_list->addColumn(i18n("State")); + m_list->addColumn(i18n("HWaddr")); + m_list->setAllColumnsShowFocus(true); + QHBoxLayout *hbox=new QHBoxLayout(box); + m_updateButton=new QPushButton(i18n("&Update"),this); + hbox->addWidget(m_updateButton); + hbox->addStretch(1); + QTimer* timer=new QTimer(this); + timer->start(60000); + connect(m_updateButton,SIGNAL(clicked()),this,SLOT(update())); + connect(timer,SIGNAL(timeout()),this,SLOT(update())); + update(); + KAboutData *about = + new KAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("KDE Panel System Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2001 - 2002 Alexander Neundorf")); + + about->addAuthor("Alexander Neundorf", 0, "neundorf@kde.org"); + setAboutData( about ); + +} + +void KCMNic::update() +{ + m_list->clear(); + NICList *nics=findNICs(); + nics->setAutoDelete(true); + for (MyNIC* tmp=nics->first(); tmp!=0; tmp=nics->next()) + new QListViewItem(m_list,tmp->name, tmp->addr, tmp->netmask, tmp->type, tmp->state, tmp->HWaddr); + delete nics; +} + +static QString HWaddr2String( char *hwaddr ) +{ + QString ret; + int i; + for (i=0; i<6; i++, hwaddr++) { + int v = (*hwaddr & 0xff); + QString num = QString("%1").arg(v,0,16); + if (num.length() < 2) + num.prepend("0"); + if (i>0) + ret.append(":"); + ret.append(num); + } + return ret; +} + +NICList* findNICs() +{ + QString upMessage( i18n("State of network card is connected", "Up") ); + QString downMessage( i18n("State of network card is disconnected", "Down") ); + + NICList* nl=new NICList; + nl->setAutoDelete(true); + +#if !defined(HAVE_GETIFADDRS) || !defined(HAVE_GETNAMEINFO) + + int sockfd = socket(AF_INET, SOCK_DGRAM, 0); + + char buf[8*1024]; + struct ifconf ifc; + ifc.ifc_len = sizeof(buf); + ifc.ifc_req = (struct ifreq *) buf; + int result=ioctl(sockfd, SIOCGIFCONF, &ifc); + + for (char* ptr = buf; ptr < buf + ifc.ifc_len; ) + { + struct ifreq *ifr =(struct ifreq *) ptr; +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN + int len = sizeof(struct sockaddr); + if (ifr->ifr_addr.sa_len > len) + len = ifr->ifr_addr.sa_len; /* length > 16 */ + ptr += sizeof(ifr->ifr_name) + len; /* for next one in buffer */ +#else + ptr += sizeof(*ifr); /* for next one in buffer */ +#endif + + int flags; + struct sockaddr_in *sinptr; + MyNIC *tmp=0; + switch (ifr->ifr_addr.sa_family) + { + case AF_INET: + sinptr = (struct sockaddr_in *) &ifr->ifr_addr; + flags=0; + + struct ifreq ifcopy; + ifcopy=*ifr; + result=ioctl(sockfd,SIOCGIFFLAGS,&ifcopy); + flags=ifcopy.ifr_flags; + + tmp=new MyNIC; + tmp->name=ifr->ifr_name; + tmp->state= ((flags & IFF_UP) == IFF_UP) ? upMessage : downMessage; + + if ((flags & IFF_BROADCAST) == IFF_BROADCAST) + tmp->type=i18n("Broadcast"); + else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) + tmp->type=i18n("Point to Point"); +#ifndef _AIX + else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) + tmp->type=i18n("Multicast"); +#endif + else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) + tmp->type=i18n("Loopback"); + else + tmp->type=i18n("Unknown"); + + tmp->addr=inet_ntoa(sinptr->sin_addr); + + ifcopy=*ifr; + result=ioctl(sockfd,SIOCGIFNETMASK,&ifcopy); + if (result==0) + { + sinptr = (struct sockaddr_in *) &ifcopy.ifr_addr; + tmp->netmask=inet_ntoa(sinptr->sin_addr); + } + else + tmp->netmask=i18n("Unknown"); + + ifcopy=*ifr; + result=-1; // if none of the two #ifs below matches, ensure that result!=0 so that "Unknown" is returned as result +#ifdef SIOCGIFHWADDR + result=ioctl(sockfd,SIOCGIFHWADDR,&ifcopy); + if (result==0) + { + char *n = &ifcopy.ifr_ifru.ifru_hwaddr.sa_data[0]; + tmp->HWaddr = HWaddr2String(n); + } +#elif defined SIOCGENADDR + result=ioctl(sockfd,SIOCGENADDR,&ifcopy); + if (result==0) + { + char *n = &ifcopy.ifr_ifru.ifru_enaddr[0]; + tmp->HWaddr = HWaddr2String(n); + } +#endif + if (result!=0) + { + tmp->HWaddr = i18n("Unknown"); + } + + nl->append(tmp); + break; + + default: + break; + } + } +#else + struct ifaddrs *ifap, *ifa; + if (getifaddrs(&ifap) != 0) { + return nl; + } + + MyNIC *tmp=0; + for (ifa = ifap; ifa; ifa = ifa->ifa_next) { + switch (ifa->ifa_addr->sa_family) { + case AF_INET6: + case AF_INET: { + tmp = new MyNIC; + tmp->name = ifa->ifa_name; + + char buf[128]; + + bzero(buf, 128); + getnameinfo(ifa->ifa_addr, ifa->ifa_addr->sa_len, buf, 127, 0, 0, NI_NUMERICHOST); + tmp->addr = buf; + + if (ifa->ifa_netmask != NULL) { + bzero(buf, 128); + getnameinfo(ifa->ifa_netmask, ifa->ifa_netmask->sa_len, buf, 127, 0, 0, NI_NUMERICHOST); + tmp->netmask = buf; + } + + tmp->state= (ifa->ifa_flags & IFF_UP) ? upMessage : downMessage; + tmp->type = flags_tos(ifa->ifa_flags); + + nl->append(tmp); + break; + } + default: + break; + } + } + + freeifaddrs(ifap); +#endif + return nl; +} + + +#if defined(HAVE_GETNAMEINFO) && defined(HAVE_GETIFADDRS) +QString flags_tos (unsigned int flags) +{ + QString tmp; + if (flags & IFF_POINTOPOINT) { + tmp += i18n("Point to Point"); + } + + if (flags & IFF_BROADCAST) { + if (tmp.length()) { + tmp += QString::fromLatin1(", "); + } + tmp += i18n("Broadcast"); + } + + if (flags & IFF_MULTICAST) { + if (tmp.length()) { + tmp += QString::fromLatin1(", "); + } + tmp += i18n("Multicast"); + } + + if (flags & IFF_LOOPBACK) { + if (tmp.length()) { + tmp += QString::fromLatin1(", "); + } + tmp += i18n("Loopback"); + } + return tmp; +} +#endif + +#include "nic.moc" diff --git a/kcontrol/nics/nic.desktop b/kcontrol/nics/nic.desktop new file mode 100644 index 000000000..cddf242f6 --- /dev/null +++ b/kcontrol/nics/nic.desktop @@ -0,0 +1,173 @@ +[Desktop Entry] +Exec=kcmshell nic +Type=Application +DocPath=kinfocenter/nics/index.html +Icon=network + + +X-KDE-Library=nic +X-KDE-FactoryName=nic +X-KDE-ParentApp=kinfocenter + +Name=Network Interfaces +Name[af]=Netwerk Koppelvlakke +Name[ar]=واجهات الشبكة +Name[az]=Şəbəkə Ara Üzləri +Name[be]=Сеткавыя інтэрфейсы +Name[bg]=Мрежа +Name[bn]=নেটওয়ার্ক ইন্টারফেস +Name[br]=Etrefasoù Rouedad +Name[bs]=Mrežni interfejsi +Name[ca]=Interfícies de xarxa +Name[cs]=Síťová rozhraní +Name[csb]=Sécowé interfejsë +Name[cy]=Rhyngwynebau Rhwydwaith +Name[da]=Netværksgrænseflade +Name[de]=Netzwerkschnittstellen +Name[el]=Δικτυακές διασυνδέσεις +Name[eo]=Retinterfacoj +Name[es]=Interfaces de red +Name[et]=Võrguliidesed +Name[eu]=Sare interfazeak +Name[fa]=واسطهای شبکه +Name[fi]=Verkkoliitynnät +Name[fr]=Interfaces réseau +Name[fy]=Netwurkynterfaces +Name[ga]=Comhéadain Líonra +Name[gl]=Interfaces de Rede +Name[he]=ממשקי רשת +Name[hi]=नेटवर्क इंटरफेसेस +Name[hr]=Mrežna sučelja +Name[hu]=Hálózati kártyák +Name[is]=Netkort +Name[it]=Interfacce di rete +Name[ja]=ネットワークインターフェース +Name[ka]=ქსელური ინტერფეისები +Name[kk]=Желі интерфейстері +Name[km]=ចំណុច​ប្រទាក់​បណ្ដាញ +Name[ko]=네트워크 인터페이스 +Name[lo]=ແຜງວົງຈອນເຄືອຂ່າຍ +Name[lt]=Tinklo sąsajos +Name[lv]=Tīkla iekārtas +Name[mk]=Мрежни интерфејси +Name[mn]=Сүлжээ-харьцах хэсэг +Name[ms]=Antara Muka Rangkaian +Name[mt]=Interfaċċja tan-network +Name[nb]=Nettverksgrensesnitt +Name[nds]=Nettwark-Koppelsteden +Name[ne]=सञ्जाल इन्टरफेस +Name[nl]=Netwerkinterfaces +Name[nn]=Nettverksgrensesnitt +Name[nso]=Difahlego tsa Kgokagano +Name[pa]=ਨੈਟਵਰਕ ਇੰਟਰਫੇਸ +Name[pl]=Interfejsy sieciowe +Name[pt]=Interfaces de Rede +Name[pt_BR]=Interfaces de Rede +Name[ro]=Interfețe de rețea +Name[ru]=Сетевые интерфейсы +Name[rw]=Imigaragarire y'Urusobemiyoboro +Name[se]=Fierbmelavttat +Name[sk]=Sieťové rozhrania +Name[sl]=Omrežni vmesniki +Name[sr]=Мрежни интерфејси +Name[sr@Latn]=Mrežni interfejsi +Name[ss]=Sichumanisi seluchungechunge +Name[sv]=Nätverksgränssnitt +Name[ta]=வலைதள இடைமுகங்கள் +Name[te]=నెట్వర్క్ ఇంటర్ ఫెస్ +Name[tg]=Воситаҳои шабака +Name[th]=แผงวงจรเครือข่าย +Name[tr]=Ağ Arayüzleri +Name[tt]=Çeltär Yözaraları +Name[uk]=Мережеві інтерфейси +Name[uz]=Tarmoq interfeyslari +Name[uz@cyrillic]=Тармоқ интерфейслари +Name[ven]=Vhukwamani ha tshifhatuwo +Name[vi]=Giao diện Mạng +Name[wa]=Eterfaces rantoele +Name[xh]=Ujongano Lomsebenzi womnatha +Name[zh_CN]=网络接口 +Name[zh_TW]=網路界面 +Name[zu]=Abaxhumanisi boxhumano olusakazekile + +Comment=Network interface information +Comment[af]=Netwerk koppelvlak informasie +Comment[ar]=معلومات حول واجهة الشبكة +Comment[az]=Şəbəkə ara üzü mə'lumatı +Comment[be]=Інфармацыя аб сеткавых інтэрфейсах +Comment[bg]=Информация за мрежовите интерфейси +Comment[bn]=নেটওয়ার্ক ইন্টারফেস সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn an etrefasoù rouedad +Comment[bs]=Informacije o mrežnom interfejsu +Comment[ca]=Informació de la interfície de xarxa +Comment[cs]=Informace o síťových rozhraních +Comment[csb]=Wëdowiédzô ò sécowim interfejse +Comment[cy]=Gwybodaeth rhyngwynebau rhwydwaith +Comment[da]=Information om netværksgrænseflade +Comment[de]=Informationen über die Netzwerkanschlüsse +Comment[el]=Πληροφορίες δικτυακής διασύνδεσης +Comment[eo]=Informo pri retinterfaco +Comment[es]=Información sobre la interfaz de red +Comment[et]=Võrguliideste info +Comment[eu]=Sare interfazeari buruzko informazioa +Comment[fa]=اطلاعات واسط شبکه +Comment[fi]=Verkkoliityntöjen tiedot +Comment[fr]=Informations sur l'interface réseau +Comment[fy]=Netwurkynterface-ynformaasje +Comment[ga]=Eolas faoin gcomhéadan gréasáin +Comment[gl]=Información da interface de rede +Comment[he]=מידע על ממשקי רשת +Comment[hi]=नेटवर्क इंटरफेस जानकारी +Comment[hr]=Podaci o mrežnom sučelju +Comment[hu]=A hálózati kártyák jellemzői +Comment[is]=Upplýsingar um Netkort +Comment[it]=Informazioni sulle interfacce di rete +Comment[ja]=ネットワークインターフェースの情報 +Comment[ka]=ცნობები ქსელური ინტერფეისების შესახებ +Comment[kk]=Желі интерфейсінің мәліметі +Comment[km]=ព័ត៌មាន​ចំណុច​ប្រទាក់​បណ្ដាញ +Comment[ko]=네트워크 인터페이스 정보 +Comment[lo]=ຂໍ້ມູນລະບົບເຄືອຂ່າຍ +Comment[lt]=Tinklo sąsajos informacija +Comment[lv]=Tīkla iekārtu informācija +Comment[mk]=Информации за мрежните интерфејси +Comment[mn]=Сүлжээний холболтын мэдээлэл +Comment[ms]=Maklumat antara muka rangkaian +Comment[mt]=Informazzjoni dwar interfaċċji tan-network +Comment[nb]=Informasjon om nettverksgrensesnitt +Comment[nds]=Informatschoon över de Nettwark-Koppelsteden +Comment[ne]=सञ्जाल इन्टरफेस सूचना +Comment[nl]=Netwerkinterface-informatie +Comment[nn]=Informasjon om nettverksgrensesnitt +Comment[nso]=Tshedimoso ya Difahlego tsa Kgokagano +Comment[pa]=ਨੈੱਟਵਰਕ ਇੰਟਰਫੇਸ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o interfejsie sieciowym +Comment[pt]=Informações sobre as interfaces de rede +Comment[pt_BR]=Informações sobre rede +Comment[ro]=Afișează informații despre interfețele de rețea +Comment[ru]=Сведения о сетевых интерфейсах +Comment[rw]=Ibisobanuro by'imigaragarire y'urusobemiyoboro +Comment[se]=Fierbmalaktadiehtu +Comment[sk]=Informácie o sieťových rozhraniach +Comment[sl]=Podatki o omrežnih vmesnikih +Comment[sr]=Информације о мрежним интерфејсима +Comment[sr@Latn]=Informacije o mrežnim interfejsima +Comment[sv]=Information om nätverksgränssnitt +Comment[ta]=வலைதள இடைமுகத் தகவல் +Comment[te]=నెట్వర్క్ ఇంటర్ ఫెస్ సమాచారం +Comment[tg]=Иттилооти шабака +Comment[th]=ข้อมูลแผงวงจรเครือข่าย +Comment[tr]=Ağ arayüz bilgisi +Comment[tt]=Çeltär yözaraları turında +Comment[uk]=Інформація щодо інтерфейсів мережі +Comment[uz]=Tarmoq interfeyslari haqida maʼlumot +Comment[uz@cyrillic]=Тармоқ интерфейслари ҳақида маълумот +Comment[ven]=Mafhungo a vhukwamani +Comment[vi]=Thông tin giao diện mạng +Comment[wa]=Informåcion so l' eterface rantoele +Comment[xh]=Ulwazi lojongano lomsebenzi womnatha +Comment[zh_CN]=网络接口信息 +Comment[zh_TW]=網路界面資訊 +Comment[zu]=Ulwazi lomxhumanisi woxhumano olusakazekile + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/nics/nic.h b/kcontrol/nics/nic.h new file mode 100644 index 000000000..c7711701a --- /dev/null +++ b/kcontrol/nics/nic.h @@ -0,0 +1,45 @@ +/* + * nic.h + * + * Copyright (C) 2001 Alexander Neundorf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KCONTROL_NIC_H +#define KCONTROL_NIC_H + +#include + +class QStringList; +class QPushButton; +class QListView; + +class KCMNic:public KCModule +{ + Q_OBJECT + public: + KCMNic(QWidget *parent=0, const char * name=0, const QStringList &list = QStringList( )); + + protected slots: + void update(); + + protected: + QListView *m_list; + QPushButton *m_updateButton; +}; + +#endif + diff --git a/kcontrol/performance/Makefile.am b/kcontrol/performance/Makefile.am new file mode 100644 index 000000000..5ae59d89e --- /dev/null +++ b/kcontrol/performance/Makefile.am @@ -0,0 +1,20 @@ +kde_module_LTLIBRARIES = kcm_performance.la + +kcm_performance_la_SOURCES = kcmperformance.cpp konqueror.cpp konqueror_ui.ui system.cpp system_ui.ui +kcm_performance_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_performance_la_LIBADD = -lkdeui +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = konqueror.h system.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmperformance.pot + +xdg_apps_DATA = kcmperformance.desktop + +kcmperformance_hidden_data_DATA = kcmkonqyperformance.desktop +kcmperformance_hidden_datadir = $(kde_appsdir)/.hidden + +EXTRA_DIST = $(xdg_apps_DATA) diff --git a/kcontrol/performance/kcmkonqyperformance.desktop b/kcontrol/performance/kcmkonqyperformance.desktop new file mode 100644 index 000000000..32ca6873e --- /dev/null +++ b/kcontrol/performance/kcmkonqyperformance.desktop @@ -0,0 +1,207 @@ +[Desktop Entry] +Icon=launch +Type=Application +Exec=kcmshell kcmkonqyperformance + + +X-KDE-Library=performance +X-KDE-FactoryName=konqueror +X-KDE-ParentApp=kcontrol + +Name=Performance +Name[af]=Werkverrigting +Name[ar]=الأداء +Name[az]=Keyfiyyət +Name[be]=Хуткасць працы +Name[bg]=Производителност +Name[bn]=কার্যকারীতা +Name[bs]=Performanse +Name[ca]=Rendiment +Name[cs]=Výkon +Name[csb]=Spòrosc +Name[cy]=Perfformiad +Name[da]=Ydelse +Name[de]=Leistung +Name[el]=Απόδοση +Name[eo]=Potenco +Name[es]=Rendimiento +Name[et]=Jõudlus +Name[eu]=Performantzia +Name[fa]=کارایی +Name[fi]=Suorituskyky +Name[fy]=Prestaasje +Name[ga]=Feidhmiúchán +Name[gl]=Rendemento +Name[he]=ביצועים +Name[hi]=परफार्मेंस +Name[hr]=Performanse +Name[hu]=Teljesítmény +Name[is]=Afköst +Name[it]=Prestazioni +Name[ja]=パフォーマンス +Name[ka]=წარმადობა +Name[kk]=Жылдамдылығы +Name[km]=ដំណើរការ +Name[ko]=성능 +Name[lt]=Veikimo sparta +Name[lv]=Veiktspēja +Name[mk]=Перформанси +Name[mn]=Чадал +Name[ms]=Prestasi +Name[mt]=Effiċjenza +Name[nb]=Ytelse +Name[nds]=Leisten +Name[ne]=सम्पादन +Name[nl]=Prestatie +Name[nn]=Yting +Name[pa]=ਪਰਦਰਸ਼ਨ +Name[pl]=Wydajność +Name[pt_BR]=Perfomance +Name[ro]=Performanță +Name[ru]=Быстродействие +Name[rw]=Ugukora neza +Name[se]=Buktu +Name[sk]=Výkon +Name[sl]=Zmogljivost +Name[sr]=Перформансе +Name[sr@Latn]=Performanse +Name[sv]=Prestanda +Name[ta]=செயல்திறன் +Name[tg]=Амалкард +Name[th]=ประสิทธิภาพ +Name[tr]=Performans +Name[tt]=Citezlek +Name[uk]=Швидкодія +Name[uz]=Unumdorlik +Name[uz@cyrillic]=Унумдорлик +Name[vi]=Hiệu năng +Name[wa]=Fé kine +Name[zh_CN]=性能 +Name[zh_TW]=偏好設定 + +Comment=Configure settings that can improve Konqueror performance +Comment[af]=Stel instellings op wat Konqueror se werkverrigting kan verhoog +Comment[ar]=إعداد تعيينات تحسّن إداء Konqueror +Comment[be]=Настаўленне параметраў, якія могуць павялічыць хуткасць працы Konqueror +Comment[bg]=Настройване производителността на браузъра +Comment[bn]=কনকরার-এর কার্যকারীতা বর্ধন করতে পারে এমন সব সেটিংস কনফিগার করুন +Comment[bs]=Postavke koje mogu unaprijediti performanse Konquerora +Comment[ca]=Configura les opcions per a millorar el rendiment del Konqueror +Comment[cs]=Zde můžete vylepšit výkon aplikace Konqueror +Comment[csb]=Kònfigùracëjô nastôwów Konquerora jaczé nają cësk na spòrosc +Comment[cy]=Ffurfweddu gosodiadau sy'n gallu gwella perfformiad Konqueror +Comment[da]=Indstil opsætning for at forbedre Konquerors ydelse +Comment[de]=Einstellungen vornehmen, die Konquerors Leistungsfähigkeit erhöhen können +Comment[el]=Αλλάξτε ρυθμίσεις που μπορεί να βελτιώσουν την απόδοση του Konqueror +Comment[eo]=Agordo de Konkeranto por plibonigi la potencon +Comment[es]=Configuraciones que pueden mejorar el rendimiento de Konqueror +Comment[et]=Siin saad seadistada, kuidas Konqueror kõigega paremini toime tuleks +Comment[eu]=Konfiguratu Konquerorren performantzia hobe dezaketen ezarpenak +Comment[fa]=پیکربندی تنظیماتی که کارایی Konqueror را بهبود می‌بخشد. +Comment[fi]=Muokkaa Konquerorin suorituskykyyn liittyviä asetuksia +Comment[fr]=Amélioration des performances de Konqueror +Comment[fy]=Hjir kinne jo ynstellings kieze die de prestaasje fan Konqueror ferbetterje +Comment[ga]=Cumraigh socruithe a chuirfidh feabhas ar fheidhmiúchán Konqueror +Comment[gl]=Configurar as opcións que poden mellorar o rendemento de Konqueror +Comment[he]=הגדר הגדרות העשויות לשפר את ביצועי Konqueror +Comment[hi]=विन्यास कॉन्फ़िगर करें ताकि कॉन्करर का कार्य बेहतर हो सके +Comment[hr]=Konfiguriranje postavki koje mogu poboljšati performanse Konquerora +Comment[hu]=A Konqueror böngésző teljesítményét befolyásoló paraméterek beállítása +Comment[is]=Stillingar Konqueror er varða afköst +Comment[it]=Configura le impostazioni che possono migliorare le prestazioni di Konqueror +Comment[ja]=Konqueror のパフォーマンスを改善 +Comment[ka]=Konqueror-ის სისწრაფეზე მოქმედი პარამეტრების კონფიგურაცია +Comment[kk]=Konqueror жылдамдығын арттыратын параметрлерді баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​កំណត់ ដែល​អាច​បង្កើន​​ដំណើរការ Konqueror +Comment[ko]=Konqueror 성능 향상 설정 +Comment[lt]=Konfigūruokite nustatymus, kurie gali įtakoti Konqueror veikimo spartą +Comment[lv]=Šeit Jūs varat konfigurēt Iekarotāja parametrus, kas ietekmē tā veiktspēju +Comment[mk]=Конфигурирајте ги поставувањата што може да ги\nподобрат перформансите на Konqueror +Comment[mn]=Конкюрор вэб-Хөтөчийн самбар сайжруулалтыг тохируулах +Comment[ms]=Konfigur seting yang meningkatkan prestasi Konqueror +Comment[mt]=Ikkonfigura setings li jistgħu itejbu l-veloċità ta' Konqueror +Comment[nb]=Tilpass innstillinger som kan forbedre Konquerors ytelse +Comment[nds]=Mit disse Instellen kannst Du de Leisten vun Konqueror verbetern +Comment[ne]=कन्क्वेरर सम्पादन सुधार गर्न सक्ने सेटिङ कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u instellingen kiezen die de prestaties van Konqueror verbeteren +Comment[nn]=Innstillingar som kan forbetra ytinga til Konqueror +Comment[pa]=ਸੰਰਚਨਾ ਸੈਟ ਕਰੋ, ਜਿਸ ਨਾਲ ਕੋਨਕਿਉਰਰ ਦਾ ਪਰਦਰਸ਼ਨ ਵਧਿਆ ਹੋ ਸਕੇ +Comment[pl]=Konfiguracja ustawień Konquerora mających wpływ na wydajność +Comment[pt]=Configuração das opções que podem aumentar a performance do Konqueror +Comment[pt_BR]=Configurações que podem aumentar a performance do Konqueror +Comment[ro]=Configurează setări care pot îmbunătăți performanța Konqueror +Comment[ru]=Настройка параметров, которые влияют на быстродействие Konqueror +Comment[rw]=Kuboneza amagenamiterere ashobora kuvugurura imikorere ya Konqueror +Comment[se]=Heivet Konqueror:a vai das šaddá buoret buvttu +Comment[sk]=Nastavenie, ktoré môže vylepšiť výkon prehliadača Konqueror +Comment[sl]=Nastavitve, ki izboljšajo delovanje Konquerorja +Comment[sr]=Подешавање поставки које могу да побољшају Konqueror-ове перформансе +Comment[sr@Latn]=Podešavanje postavki koje mogu da poboljšaju Konqueror-ove performanse +Comment[sv]=Anpassa inställningar som kan förbättra Konquerors prestanda +Comment[ta]=கான்கொரர் செயல்திறனை அதிகப்படுத்த அமைப்புகளை வடிவமை +Comment[tg]= Танзимоте ки метавонанд амалкарди Konqueror-ро беҳбуд бахшанд, танзим кунед +Comment[th]=ปรับแต่งตั้งค่าที่จะช่วยให้คอนเควอร์เรอร์มีประสิทธิภาพดีขึ้น +Comment[tr]=Konqueror'un performansını artıracak ayarlamaları yap +Comment[tt]=Konqueror citezlegen arttıra ala torğan köyläwlär +Comment[uk]=Тут можна налаштувати швидкодію Konqueror +Comment[uz]=Konqueror unumdorligini oshirishi mumkin boʻlgan moslamalarni moslash +Comment[uz@cyrillic]=Konqueror унумдорлигини ошириши мумкин бўлган мосламаларни мослаш +Comment[vi]=Các thiết lập nâng cao khả năng của Konqueror +Comment[wa]=Tchuzes d' apontiaedje ki plèt improuver Konqueror +Comment[zh_CN]=配置提高 Konqueror 性能的设置 +Comment[zh_TW]=可增進 Konqueror 效能的設定 + +Keywords=konqueror,reuse,preloading +Keywords[ar]=كونكيورر,اعادة استخدام,تحميل تمهيدي +Keywords[az]=konqueror,yenidən işlətmə,önyükləmə +Keywords[be]=Папярэдняя загрузка,konqueror,reuse,preloading +Keywords[bg]=предварително, зареждане, използване, повторно, konqueror, reuse, preloading +Keywords[ca]=konqueror,torna a emprar,carrega prèviament +Keywords[cs]=konqueror,využití,preload +Keywords[csb]=konqueror,brëkòwanié znowa,wstãpné wczëtanié +Keywords[cy]=konqueror,ailddefnyddio,cynlwytho +Keywords[da]=konqueror,genbrug,forudindlæsning +Keywords[de]=konqueror,wiederverwenden +Keywords[el]=konqueror,επαναχρησιμοποίηση,προφόρτωση +Keywords[eo]=konkeranto,antaŭŝarĝi +Keywords[et]=konqueror,taaskasutamine,eellaadimine +Keywords[eu]=konqueror,berrerabili,prekargatu +Keywords[fa]=konqueror، استفادۀ مجدد، پیش‌بارگذاری +Keywords[fi]=konqueror,reuse,esilataus +Keywords[fr]=konqueror,réutilisation,préchargement +Keywords[fy]=konqueror,hergebûk,foarútlade +Keywords[ga]=konqueror,athúsáid,réamhluchtú +Keywords[gl]=konqueror,reuso,precarga +Keywords[he]=konqueror,שימוש חוזר,טעינה מוקדמת, reuse,preloading,מחדש, שוב +Keywords[hi]=कॉन्करर,फिर से उपयोग,प्रि-लोडिंग +Keywords[hr]=konqueror,reuse,preloading,ponovna upotreba,prethodno učitavanje +Keywords[hu]=konqueror,ujrafelhasználás,előtöltés +Keywords[it]=konqueror,riutilizzo,precaricamento,prestazioni,preloading +Keywords[ja]=konqueror,再使用,事前読み込み +Keywords[km]=konqueror,ប្រើ​ឡើង​វិញ,ប្រុងប្រៀប​ផ្ទុក +Keywords[lv]=iekarotājs,reuse,priekšielāde +Keywords[mk]=konqueror,reuse,preloading,користи,повторно користи,предвчитување +Keywords[mn]=Конкюрор,reuse,preloading +Keywords[nb]=konqueror,gjenbruk,forhåndslasting +Keywords[nds]=Konqueror,wedder bruken,vörladen +Keywords[ne]=विजय/प्राप्ति, पुन: प्रयोग, पूर्व-लोडिङ +Keywords[nl]=konqueror,hergebruik,preloading +Keywords[nn]=Konqueror,gjenbruk,førehandslasting +Keywords[pa]=konqueror,reuse,preloading, ਕੋਨਕਿਉਰਰ, ਮੁੜ ਲੋਡ +Keywords[pl]=konqueror,ponowne użycie,wstępne wczytywanie +Keywords[pt]=konqueror,reutilização,pré-carregamento +Keywords[pt_BR]=konqueror,reuso,pré-carregamento +Keywords[ro]=konqueror,reutilizare,preîncărcare +Keywords[rw]=Konqueror,kongera gukoresha,gutangizambere +Keywords[sl]=konqueror,recikliranje,prednalaganje +Keywords[sr]=konqueror,reuse,preloading,поново коришћење,преучитавање +Keywords[sr@Latn]=konqueror,reuse,preloading,ponovo korišćenje,preučitavanje +Keywords[sv]=konqueror,återanvändning,förladdning +Keywords[ta]=கான்கொரர்,திரும்ப பயன்படுத்து,முன்ஏற்றுதல் +Keywords[th]=คอนเควอร์เรอร์,นำมาใช้ใหม่,เตรียมโหลดไว้ก่อน +Keywords[tr]=konqueror,yeniden kullanım,ön yükleme +Keywords[uk]=konqueror,повторне використання,попереднє завантаження +Keywords[vi]=konqueror,tái sử dụng,tải về sẵn trước +Keywords[zh_CN]=konqueror,reuse,preloading,再利用,预加载 +Keywords[zh_TW]=konqueror,reuse,preloading,重用,預先載入 + diff --git a/kcontrol/performance/kcmperformance.cpp b/kcontrol/performance/kcmperformance.cpp new file mode 100644 index 000000000..be4b57387 --- /dev/null +++ b/kcontrol/performance/kcmperformance.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2003 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include +#include + +#include "kcmperformance.h" +#include "konqueror.h" +#include "system.h" + +extern "C" +{ + KDE_EXPORT KCModule* create_performance( QWidget* parent_P, const char* name_P ) + { + return new KCMPerformance::Config( parent_P, name_P ); + } + + KDE_EXPORT KCModule* create_konqueror( QWidget* parent_P, const char* name_P ) + { + return new KCMPerformance::KonquerorConfig( parent_P, name_P ); + } +} + +namespace KCMPerformance +{ + +Config::Config( QWidget* parent_P, const char* ) + : KCModule( parent_P, "kcmperformance" ) + { + setQuickHelp( i18n( "

      KDE Performance

      " + " You can configure settings that improve KDE performance here." )); + + QVBoxLayout *topLayout = new QVBoxLayout( this ); + QTabWidget* tabs = new QTabWidget( this ); + konqueror_widget = new Konqueror( tabs ); + konqueror_widget->layout()->setMargin( KDialog::marginHint() ); + connect( konqueror_widget, SIGNAL( changed()), SLOT( changed())); + tabs->addTab( konqueror_widget, i18n( "Konqueror" )); + system_widget = new SystemWidget( tabs ); + system_widget->layout()->setMargin( KDialog::marginHint() ); + connect( system_widget, SIGNAL( changed()), SLOT( changed())); + tabs->addTab( system_widget, i18n( "System" )); + topLayout->add( tabs ); + load(); + } + +void Config::load() + { + load( false ); + } + +void Config::load( bool useDefaults) + { + konqueror_widget->load( useDefaults ); + system_widget->load( useDefaults ); + emit changed( useDefaults ); + } + +void Config::save() + { + konqueror_widget->save(); + system_widget->save(); + } + +void Config::defaults() + { + load( true ); + } + +KonquerorConfig::KonquerorConfig( QWidget* parent_P, const char* ) + : KCModule( parent_P, "kcmperformance" ) + { + setQuickHelp( i18n( "

      Konqueror Performance

      " + " You can configure several settings that improve Konqueror performance here." + " These include options for reusing already running instances" + " and for keeping instances preloaded." )); + + QVBoxLayout *topLayout = new QVBoxLayout( this ); + widget = new Konqueror( this ); + connect( widget, SIGNAL( changed()), SLOT( changed())); + topLayout->add( widget ); + load(); + } + +void KonquerorConfig::load() + { + load( false ); + } + +void KonquerorConfig::load(bool useDefaults) + { + widget->load( useDefaults ); + emit changed( useDefaults ); + } + +void KonquerorConfig::save() + { + widget->save(); + } + +void KonquerorConfig::defaults() + { + load( true ); + } + +} // namespace + +#include "kcmperformance.moc" diff --git a/kcontrol/performance/kcmperformance.desktop b/kcontrol/performance/kcmperformance.desktop new file mode 100644 index 000000000..bcc60face --- /dev/null +++ b/kcontrol/performance/kcmperformance.desktop @@ -0,0 +1,215 @@ +[Desktop Entry] +Icon=launch +Type=Application +Exec=kcmshell kcmperformance + + +X-KDE-Library=performance +X-KDE-FactoryName=performance +X-KDE-ParentApp=kcontrol + +Name=KDE Performance +Name[af]=KDE Werkverrigting +Name[ar]=إداء KDE +Name[az]=KDE Keyfiyyəti +Name[be]=Хуткасць працы KDE +Name[bg]=Производителност +Name[bn]=কে.ডি.ই. কার্যকারীতা +Name[bs]=KDE performanse +Name[ca]=Rendiment del KDE +Name[cs]=Výkon KDE +Name[csb]=Spòrosc KDE +Name[cy]=Perfformiad KDE +Name[da]=KDE's ydelse +Name[de]=KDE-Leistung +Name[el]=Απόδοση του KDE +Name[eo]=KDEa potenco +Name[es]=Rendimiento de KDE +Name[et]=KDE jõudlus +Name[eu]=KDEren performantzia +Name[fa]=کارایی KDE +Name[fi]=Suorituskyky +Name[fr]=Performance de KDE +Name[fy]=KDE-prestaasjes +Name[ga]=Feidhmiúchán KDE +Name[gl]=Rendemento de KDE +Name[he]=ביצועי KDE +Name[hi]=केडीई परफार्मेंस +Name[hr]=KDE performanse +Name[hu]=Teljesítményhangolás +Name[is]=Afkastastillingar KDE +Name[it]=Prestazioni di KDE +Name[ja]=KDE パフォーマンス +Name[ka]=KDE-ს წარმადობა +Name[kk]=KDE жылдамдығы +Name[km]=ដំណើរការ​របស់ KDE +Name[ko]=KDE 성능 +Name[lt]=KDE našumas +Name[lv]=KDE Veiktspēja +Name[mk]=Перформанси на KDE +Name[mn]=КДЭ-Удирдлагын самбар +Name[ms]=Prestasi KDE +Name[mt]=Effiċjenza KDE +Name[nb]=KDE-ytelse +Name[nds]=KDE-Leisten +Name[ne]=KDE सम्पादन +Name[nl]=KDE-prestaties +Name[nn]=KDE-yting +Name[pa]=KDE ਪਰਦਰਸ਼ਨ +Name[pl]=Wydajność KDE +Name[pt]=Performance do KDE +Name[pt_BR]=Performance do KDE +Name[ro]=Performanță KDE +Name[ru]=Быстродействие +Name[rw]=Imikorere ya KDE +Name[se]=KDE-buktu +Name[sk]=Výkon KDE +Name[sl]=Zmogljivost KDE +Name[sr]=KDE перформансе +Name[sr@Latn]=KDE performanse +Name[sv]=KDE-prestanda +Name[ta]=KDE செயல்திறன் +Name[tg]=Амалкарди KDE +Name[th]=ประสิทธิภาพของ KDE +Name[tr]=KDE Performansı +Name[tt]=KDE Citezlege +Name[uk]=Швидкодія KDE +Name[uz]=KDE unumdorligi +Name[uz@cyrillic]=KDE унумдорлиги +Name[vi]=Hiệu năng KDE +Name[wa]=Improuver KDE +Name[zh_CN]=KDE 性能 +Name[zh_TW]=KDE 效能 + +Comment=Configure settings that can improve KDE performance +Comment[af]=Stel instellings op wat KDE se werkverrigting kan verhoog +Comment[ar]=إعداد تعيينات تحسّن إداء KDE +Comment[be]=Настаўленне параметраў, якія могуць павялічыць хуткасць працы KDE +Comment[bg]=Настройване производителността на системата +Comment[bn]=কে.ডি.ই-এর কার্যকারীতা বর্ধন করতে পারে এমন সব সেটিংস কনফিগার করুন +Comment[bs]=Postavke koje mogu unaprijediti performanse KDEa +Comment[ca]=Configura les opcions per a millorar el rendiment del KDE +Comment[cs]=Nastavení vylepšující výkon KDE +Comment[csb]=Kònfigùracëjô nastôwów Konquerora jaczé nają cësk na spòrosc KDE +Comment[cy]=Ffurfweddu gosodiadau sy'n gallu gwella perfformiad KDE +Comment[da]=Indstil opsætning for at forbedre KDE's ydelse +Comment[de]=Einstellungen vornehmen, die die Leistungsfähigkeit von KDE erhöhen können +Comment[el]=Αλλάξτε ρυθμίσεις που μπορεί να βελτιώσουν την απόδοση του KDE +Comment[eo]=Agordo de plibonigo de la KDEa potenco +Comment[es]=Configura opciones que pueden mejorar el rendimiento de KDE +Comment[et]=Siin saad seadistada, kuidas KDE kõigega paremini toime tuleks +Comment[eu]=Konfiguratu Konquerorren performantzia hobe dezaketen ezarpenak +Comment[fa]=پیکربندی تنظیماتی که کارایی KDE را بهبود می‌بخشد +Comment[fi]=Muokkaa KDE:n suorituskykyyn liittyviä asetuksia +Comment[fr]=Configuration de paramètres qui peuvent améliorer les performances de KDE +Comment[fy]=Hjir kinne jo ynstellings kiezen die de prestaasje fan KDE kinne ferbetterje +Comment[ga]=Cumraigh socruithe a chuirfidh feabhas ar fheidhmiúchán KDE +Comment[gl]=Configuración das opcións que poden mellorar o rendemento de KDE +Comment[he]=הגדר הגדרות שעשויות לשפר את ביצועי KDE +Comment[hi]=विन्यास कॉन्फ़िगर करें ताकि केडीई का कार्य बेहतर हो सके +Comment[hr]=Konfiguriranje postavi koje mogu poboljšati performanse KDE-a +Comment[hu]=A KDE teljesítményét befolyásoló paraméterek beállítása +Comment[is]=Stillingar sem varða afköst KDE +Comment[it]=Configura le impostazioni che possono migliorare le prestazioni di KDE +Comment[ja]=KDE のパフォーマンスを改善 +Comment[ka]=KDE-ს სისწრაფეზე მოქმედი პარამეტრების კონფიგურაცია +Comment[kk]=KDE жылдамдығын арттыратын параметрлерді баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​កំណត់​ដែល​អាច​បង្កើន​ដំណើរការ​របស់ KDE +Comment[ko]=KDE 성능 향상 설정 +Comment[lt]=Konfigūruoti nustatymus, kurie gali pagerinti KDE veikimo spartą +Comment[lv]=Konfigurē parametrus, kas ietekmē Iekarotāja veiktspēju +Comment[mk]=Конфигурирајте ги поставувањата што може да ги подобрат перформансите на KDE +Comment[mn]=Comment=КДЭ чадал сайжруулалтыг тохируулах +Comment[ms]=Konfigur seting yang boleh meningkatkan prestasi KDE +Comment[mt]=Ikkonfigura setings li jistgħu itejbu l-veloċità ta' KDE +Comment[nb]=Innstillinger som kan forbedre KDEs ytelse +Comment[nds]=Mit disse Instellen kannst Du de Leisten vun KDE verbetern +Comment[ne]=KDE सम्पादन सुधार गर्न सक्ने सेटिङ कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u instellingen kiezen die de prestaties van KDE kunnen verbeteren +Comment[nn]=Innstillingar som kan forbetra ytinga til KDE +Comment[pa]=ਸੰਰਚਨਾ ਸੈਟ ਕਰੋ, ਜਿਸ ਨਾਲ KDE ਦਾ ਪਰਦਰਸ਼ਨ ਵਧਿਆ ਹੋ ਸਕਦਾ ਹੈ +Comment[pl]=Konfiguracja ustawień, które mogą mieć wpływ na wydajność KDE +Comment[pt]=Configura as opções que podem aumentar a performance do KDE +Comment[pt_BR]=Configurações que podem aumentar a performance do KDE +Comment[ro]=Configurează setări care pot îmbunătăți performanța Konqueror +Comment[ru]=Настройка параметров, которые могут повлиять на быстродействие KDE +Comment[rw]=Kuboneza amagenamiterere ashobora kuvugurura imikorere ya KDE +Comment[se]=Heivehusat mat buoridit KDE:a buvttu +Comment[sk]=Nastavenie, ktoré môže vylepšiť výkon KDE +Comment[sl]=Nastavite možnosti za pohitritev KDE +Comment[sr]=Подешавање поставки које могу да побољшају перформансе KDE-а +Comment[sr@Latn]=Podešavanje postavki koje mogu da poboljšaju performanse KDE-a +Comment[sv]=Anpassa inställningar som kan förbättra KDE:s prestanda +Comment[ta]=KDE செயல்திறனை அதிகப்படுத்தும் அமைப்புகளை அமை +Comment[tg]= Танзимоте ки метавонанд амалкарди KDE-ро беҳбуд бахшанд, танзим кунед +Comment[th]=ปรับแต่งตั้งค่าที่จะช่วยปรับประสิทธิภาพของ KDE +Comment[tr]=KDE'nin performansını artıracak ayarlamaları yap +Comment[tt]=KDE citezlegen arttıra ala torğan köyläwlär +Comment[uk]=Налаштування параметрів для покращання швидкодії KDE +Comment[uz]=KDE unumdorligini oshirishi mumkin boʻlgan moslamalarni moslash +Comment[uz@cyrillic]=KDE унумдорлигини ошириши мумкин бўлган мосламаларни мослаш +Comment[vi]=Các thiết lập nâng cao khả năng của Konqueror +Comment[wa]=Tchuzes d' apontiaedje ki plèt improuver KDE +Comment[zh_CN]=配置提高 KDE 性能的设置 +Comment[zh_TW]=可增進 KDE 效能的設定 + +Keywords=performance,speed,memory,improve +Keywords[ar]=performance,speed,memory,improve,أداء,سرعة,ذاكرة,تحسين +Keywords[be]=Хуткасць працы,Прадукцыйнасць,Хуткасць,Памяць,Палепшыць,Паляпшэнне,performance,speed,memory,improve +Keywords[bg]=производителност, памет, скорост, подобряване, подобрение, performance, speed, memory, improve +Keywords[ca]=rendiment,velocitat,memòria,millora +Keywords[cs]=výkon,rychlost,paměť,zlepšení +Keywords[csb]=spòrosc, chùtkòsc, pamiãc,zlepszenié +Keywords[cy]=perfformiad,cyflymder,cof,gwella +Keywords[da]=ydelse,hastighed,hukommelse,forbedre +Keywords[de]=leistung,geschwindigkeit,speichern,optimieren +Keywords[el]=απόδοση,ταχύτητα,μνήμη,βελτίωση +Keywords[eo]=potenco,rapideco,memoro,plibonigo,plibonigi +Keywords[es]=rendimiento,velocidad,memoria,mejora +Keywords[et]=jõudlus,kiirus,mälu,parandamine +Keywords[eu]=performantzia,abiadura,memoria,hobetu +Keywords[fa]=کارایی، سرعت، حافظه، بهبود +Keywords[fi]=suorituskyky, nopeus, muisti, parannus +Keywords[fr]=performances,vitesse,mémoire,améliorer +Keywords[fy]=fluggens,prestaasjes,ûnthâld,ferbetterje +Keywords[ga]=oibriú,luas,cuimhne,feabhsaigh,feabhsú +Keywords[gl]=rendemento,velocidade,memoria,mellora +Keywords[he]=ביצועים,מהירות,זיכרון,שפר, performance,speed,memory,improve +Keywords[hi]=परफार्मेंस,गति,मेमोरी,बेहतर +Keywords[hr]=performance,speed,memory,improve,performanse,brzina,memorija,unaprijediti +Keywords[hu]=teljesítmény,sebesség,memória,hangolás +Keywords[it]=prestazioni,velocità,memoria,migliora +Keywords[ja]=パフォーマンス,速度,メモリ,改善 +Keywords[km]=ដំណើរការ,ល្បឿន,សតិ,បង្កើន +Keywords[lt]=performance,speed,memory,improve,veikimas,greitis,atmintis,pagerinti +Keywords[lv]=veiktspēja,ātrums,atmiņa,uzlabot +Keywords[mk]=performance,speed,memory,improve,перформанси,брзина,меморија,подобри +Keywords[mn]=чадал,хурд,санах ой,сайжруулалт +Keywords[nb]=ytelse,hastighet,minne,forbedre +Keywords[nds]=Leisten,performance,Gauheit,Spieker,verbetern +Keywords[ne]=सम्पादन,गति, स्मृति, सुधार +Keywords[nl]=snelheid,prestaties,geheugen,verbeteren +Keywords[nn]=yting,fart,minne,forbetra +Keywords[pa]=performance,speed,memory,improve, ਪਰਦਰਸ਼ਨ, ਗਤੀ, ਮੈਮੋਰੀ, ਸੁਧਾਰ +Keywords[pl]=wydajność,szybkość,pamięć,polepszenie +Keywords[pt]=performance,velocidade,memória,melhorar +Keywords[pt_BR]=performance,velocidade,memória,aumento +Keywords[ro]=performanță,viteză,memorie,îmbunătățire +Keywords[rw]=imikorere,umuvuduko,umwanyabubiko,kuvugurura +Keywords[se]=buktu,leahttu,muitu,buoridit +Keywords[sl]=zmogljivost,hitrost,pomnilnik,izboljšanje +Keywords[sr]=performance,speed,memory,improve,перформансе,брзина,меморија,унапређивање,унапреди +Keywords[sr@Latn]=performance,speed,memory,improve,performanse,brzina,memorija,unapređivanje,unapredi +Keywords[sv]=prestanda,hastighet,minne,förbättra +Keywords[ta]=செயல்திறன்,வேகம்,நினைவகம்,முன்னேற்றம் +Keywords[th]=ประสิทธิภาพ,ความเร็ว,หน่วยความจำ,ปรับปรุง +Keywords[tr]=performans,hız,bellek,geliştirme +Keywords[uk]=швидкодія,швидкість,пам'ять,покращення +Keywords[uz]=unumdorlik,tezlik,xotira,oshirish +Keywords[uz@cyrillic]=унумдорлик,тезлик,хотира,ошириш +Keywords[vi]=hiệu năng,tốc độ,bộ nhớ,nâng cao +Keywords[wa]=improuver,fé kine,roedeu,memwere,improuver,amidrer +Keywords[zh_CN]=performance,speed,memory,improve,性能,速度,内存,提高 +Keywords[zh_TW]=performance,speed,memory,improve,效能,速度,記憶體,增進 + +Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcontrol/performance/kcmperformance.h b/kcontrol/performance/kcmperformance.h new file mode 100644 index 000000000..13c3f9465 --- /dev/null +++ b/kcontrol/performance/kcmperformance.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2003 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _KCM_PERFORMANCE_H +#define _KCM_PERFORMANCE_H + +#include + +namespace KCMPerformance +{ + +class Konqueror; +class SystemWidget; + +class Config + : public KCModule + { + Q_OBJECT + public: + Config( QWidget* parent_P, const char* name_P ); + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + private: + Konqueror* konqueror_widget; + SystemWidget* system_widget; + }; + +class KonquerorConfig + : public KCModule + { + Q_OBJECT + public: + KonquerorConfig( QWidget* parent_P, const char* name_P ); + virtual void load(); + virtual void load( bool useDefaults ); + virtual void save(); + virtual void defaults(); + private: + Konqueror* widget; + }; + +} // namespace + +#endif diff --git a/kcontrol/performance/konqueror.cpp b/kcontrol/performance/konqueror.cpp new file mode 100644 index 000000000..02dde4cce --- /dev/null +++ b/kcontrol/performance/konqueror.cpp @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2003 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "konqueror.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace KCMPerformance +{ + +Konqueror::Konqueror( QWidget* parent_P ) + : Konqueror_ui( parent_P ) + { + QWhatsThis::add( rb_never_reuse, + i18n( "Disables the minimization of memory usage and allows you " + "to make each browsing activity independent from the others" )); + QWhatsThis::add( rb_file_browsing_reuse, + i18n( "With this option activated, only one instance of Konqueror " + "used for file browsing will exist in the memory of your computer " + "at any moment, " + "no matter how many file browsing windows you open, " + "thus reducing resource requirements." + "

      Be aware that this also means that, if something goes wrong, " + "all your file browsing windows will be closed simultaneously" )); + QWhatsThis::add( rb_always_reuse, + i18n( "With this option activated, only one instance of Konqueror " + "will exist in the memory of your computer at any moment, " + "no matter how many browsing windows you open, " + "thus reducing resource requirements." + "

      Be aware that this also means that, if something goes wrong, " + "all your browsing windows will be closed simultaneously." )); + connect( rb_never_reuse, SIGNAL( clicked()), SIGNAL( changed())); + connect( rb_file_browsing_reuse, SIGNAL( clicked()), SIGNAL( changed())); + connect( rb_always_reuse, SIGNAL( clicked()), SIGNAL( changed())); + rb_file_browsing_reuse->setChecked( true ); + + QString tmp = + i18n( "If non-zero, this option allows keeping Konqueror instances " + "in memory after all their windows have been closed, up to the " + "number specified in this option." + "

      When a new Konqueror instance is needed, one of these preloaded " + "instances will be reused instead, improving responsiveness at " + "the expense of the memory required by the preloaded instances." ); + QWhatsThis::add( sb_preload_count, tmp ); + QWhatsThis::add( lb_preload_count, tmp ); + QWhatsThis::add( cb_preload_on_startup, + i18n( "If enabled, an instance of Konqueror will be preloaded after the ordinary KDE " + "startup sequence." + "

      This will make the first Konqueror window open faster, but " + "at the expense of longer KDE startup times (but you will be able to work " + "while it is loading, so you may not even notice that it is taking longer)." )); + QWhatsThis::add( cb_always_have_preloaded, + i18n( "If enabled, KDE will always try to have one preloaded Konqueror instance ready; " + "preloading a new instance in the background whenever there is not one available, " + "so that windows will always open quickly." + "

      Warning: In some cases, it is actually possible that this will " + "reduce perceived performance." )); + connect( sb_preload_count, SIGNAL( valueChanged( int )), SLOT( preload_count_changed( int ))); + connect( sb_preload_count, SIGNAL( valueChanged( int )), SIGNAL( changed())); + connect( cb_preload_on_startup, SIGNAL( clicked()), SIGNAL( changed())); + connect( cb_always_have_preloaded, SIGNAL( clicked()), SIGNAL( changed())); + defaults(); + } + +void Konqueror::preload_count_changed( int count ) + { + cb_preload_on_startup->setEnabled( count >= 1 ); + // forcing preloading with count == 1 can often do more harm than good, because + // if there's one konqy preloaded, and the user requests "starting" new konqueror, + // the preloaded instance will be used, new one will be preloaded, and if the user soon + // "quits" konqueror, one of the instances will have to be terminated + cb_always_have_preloaded->setEnabled( count >= 2 ); + } + +void Konqueror::load( bool useDefaults ) + { + KConfig cfg( "konquerorrc", true ); + cfg.setReadDefaults( useDefaults ); + cfg.setGroup( "Reusing" ); + allowed_parts = cfg.readEntry( "SafeParts", "SAFE" ); + if( allowed_parts == "ALL" ) + rb_always_reuse->setChecked( true ); + else if( allowed_parts.isEmpty()) + rb_never_reuse->setChecked( true ); + else + rb_file_browsing_reuse->setChecked( true ); + sb_preload_count->setValue( cfg.readNumEntry( "MaxPreloadCount", 1 )); + cb_always_have_preloaded->setChecked( cfg.readBoolEntry( "AlwaysHavePreloaded", false )); + cb_preload_on_startup->setChecked( cfg.readBoolEntry( "PreloadOnStartup", false )); + } + +void Konqueror::save() + { + KConfig cfg( "konquerorrc" ); + cfg.setGroup( "Reusing" ); + if( rb_always_reuse->isChecked()) + allowed_parts = "ALL"; + else if( rb_never_reuse->isChecked()) + allowed_parts = ""; + else + { + if( allowed_parts.isEmpty() || allowed_parts == "ALL" ) + allowed_parts = "SAFE"; + // else - keep allowed_parts as read from the file, as the user may have modified the list there + } + cfg.writeEntry( "SafeParts", allowed_parts ); + int count = sb_preload_count->value(); + cfg.writeEntry( "MaxPreloadCount", count ); + cfg.writeEntry( "PreloadOnStartup", cb_preload_on_startup->isChecked() && count >= 1 ); + cfg.writeEntry( "AlwaysHavePreloaded", cb_always_have_preloaded->isChecked() && count >= 2 ); + cfg.sync(); + DCOPRef ref1( "konqueror*", "KonquerorIface" ); + ref1.send( "reparseConfiguration()" ); + DCOPRef ref2( "kded", "konqy_preloader" ); + ref2.send( "reconfigure()" ); + } + +void Konqueror::defaults() + { + load( true ); + } + +} // namespace + +#include "konqueror.moc" diff --git a/kcontrol/performance/konqueror.h b/kcontrol/performance/konqueror.h new file mode 100644 index 000000000..bc17d2e4e --- /dev/null +++ b/kcontrol/performance/konqueror.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2003 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _KCM_PERF_KONQUEROR_H +#define _KCM_PERF_KONQUEROR_H + +#include "konqueror_ui.h" + +namespace KCMPerformance +{ + +class Konqueror + : public Konqueror_ui + { + Q_OBJECT + public: + Konqueror( QWidget* parent_P = NULL ); + void load(bool useDefaults); + void save(); + void defaults(); + signals: + void changed(); + private slots: + void preload_count_changed( int ); + private: + QString allowed_parts; + }; + +} // namespace + +#endif diff --git a/kcontrol/performance/konqueror_ui.ui b/kcontrol/performance/konqueror_ui.ui new file mode 100644 index 000000000..3ace0b5db --- /dev/null +++ b/kcontrol/performance/konqueror_ui.ui @@ -0,0 +1,155 @@ + +KCMPerformance::Konqueror_ui + + + Konqueror_ui + + + + 0 + 0 + 600 + 480 + + + + + unnamed + + + 0 + + + + reuse_group + + + Minimize Memory Usage + + + + unnamed + + + + rb_never_reuse + + + &Never + + + + + rb_file_browsing_reuse + + + For &file browsing only (recommended) + + + + + rb_always_reuse + + + Alwa&ys (use with care) + + + + + + + groupBox1 + + + Preloading + + + + unnamed + + + + layout2 + + + + unnamed + + + + lb_preload_count + + + Maximum number of instances kept &preloaded: + + + sb_preload_count + + + + + sb_preload_count + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + + + cb_preload_on_startup + + + Preload an instance after KDE startup + + + + + cb_always_have_preloaded + + + Always try to have at least one preloaded instance + + + + + + + spacer1 + + + Vertical + + + Expanding + + + + 20 + 160 + + + + + + + kdialog.h + + + + diff --git a/kcontrol/performance/system.cpp b/kcontrol/performance/system.cpp new file mode 100644 index 000000000..97b5c5709 --- /dev/null +++ b/kcontrol/performance/system.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2004 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "system.h" + +#include +#include +#include +#include +#include + +namespace KCMPerformance +{ + +SystemWidget::SystemWidget( QWidget* parent_P ) + : System_ui( parent_P ) + { + QString tmp = + i18n( "

      During startup KDE needs to perform a check of its system configuration" + " (mimetypes, installed applications, etc.), and in case the configuration" + " has changed since the last time, the system configuration cache (KSyCoCa)" + " needs to be updated.

      " + "

      This option delays the check, which avoid scanning all directories containing" + " files describing the system during KDE startup, thus" + " making KDE startup faster. However, in the rare case the system configuration" + " has changed since the last time, and the change is needed before this" + " delayed check takes place, this option may lead to various problems" + " (missing applications in the K Menu, reports from applications about missing" + " required mimetypes, etc.).

      " + "

      Changes of system configuration mostly happen by (un)installing applications." + " It is therefore recommended to turn this option temporarily off while" + " (un)installing applications.

      " + "

      For this reason, usage of this option is not recommended. The KDE crash" + " handler will refuse to provide backtrace for the bugreport with this option" + " turned on (you will need to reproduce it again with this option turned off," + " or turn on the developer mode for the crash handler).

      " ); + QWhatsThis::add( cb_disable_kbuildsycoca, tmp ); + QWhatsThis::add( label_kbuildsycoca, tmp ); + connect( cb_disable_kbuildsycoca, SIGNAL( clicked()), SIGNAL( changed())); + defaults(); + } + +void SystemWidget::load(bool useDefaults ) + { + KConfig cfg( "kdedrc", true ); + cfg.setReadDefaults( useDefaults ); + cfg.setGroup( "General" ); + cb_disable_kbuildsycoca->setChecked( cfg.readBoolEntry( "DelayedCheck", false )); + } + +void SystemWidget::save() + { + KConfig cfg( "kdedrc" ); + cfg.setGroup( "General" ); + cfg.writeEntry( "DelayedCheck", cb_disable_kbuildsycoca->isChecked()); + } + +void SystemWidget::defaults() + { + load( true ); + } + +} // namespace + +#include "system.moc" diff --git a/kcontrol/performance/system.h b/kcontrol/performance/system.h new file mode 100644 index 000000000..d788b2073 --- /dev/null +++ b/kcontrol/performance/system.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2004 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _KCM_PERF_SYSTEM_H +#define _KCM_PERF_SYSTEM_H + +#include + +#include "system_ui.h" + +namespace KCMPerformance +{ + +class SystemWidget + : public System_ui + { + Q_OBJECT + public: + SystemWidget( QWidget* parent_P = NULL ); + void load( bool useDefaults ); + void save(); + void defaults(); + signals: + void changed(); + }; + +} // namespace + +#endif diff --git a/kcontrol/performance/system_ui.ui b/kcontrol/performance/system_ui.ui new file mode 100644 index 000000000..a8d0e7956 --- /dev/null +++ b/kcontrol/performance/system_ui.ui @@ -0,0 +1,69 @@ + +System_ui + + + System_ui + + + + 0 + 0 + 600 + 480 + + + + + unnamed + + + + gb_ + + + System Configuration + + + + unnamed + + + + cb_disable_kbuildsycoca + + + Disable &system configuration startup check + + + + + label_kbuildsycoca + + + <b>WARNING:</b> This option may in rare cases lead to various problems. Consult the What's This? (Shift+F1) help for details. + + + + + + + spacer1 + + + Vertical + + + Expanding + + + + 20 + 40 + + + + + + + + diff --git a/kcontrol/pics/Makefile.am b/kcontrol/pics/Makefile.am new file mode 100644 index 000000000..a4b97f06a --- /dev/null +++ b/kcontrol/pics/Makefile.am @@ -0,0 +1 @@ +KDE_ICON=AUTO diff --git a/kcontrol/pics/cr128-app-access.png b/kcontrol/pics/cr128-app-access.png new file mode 100644 index 000000000..5405523ea Binary files /dev/null and b/kcontrol/pics/cr128-app-access.png differ diff --git a/kcontrol/pics/cr128-app-arts.png b/kcontrol/pics/cr128-app-arts.png new file mode 100644 index 000000000..d22e0e65d Binary files /dev/null and b/kcontrol/pics/cr128-app-arts.png differ diff --git a/kcontrol/pics/cr128-app-background.png b/kcontrol/pics/cr128-app-background.png new file mode 100644 index 000000000..dc35d81eb Binary files /dev/null and b/kcontrol/pics/cr128-app-background.png differ diff --git a/kcontrol/pics/cr128-app-bell.png b/kcontrol/pics/cr128-app-bell.png new file mode 100644 index 000000000..530fbf64a Binary files /dev/null and b/kcontrol/pics/cr128-app-bell.png differ diff --git a/kcontrol/pics/cr128-app-cache.png b/kcontrol/pics/cr128-app-cache.png new file mode 100644 index 000000000..f9261381d Binary files /dev/null and b/kcontrol/pics/cr128-app-cache.png differ diff --git a/kcontrol/pics/cr128-app-clock.png b/kcontrol/pics/cr128-app-clock.png new file mode 100644 index 000000000..692b0502e Binary files /dev/null and b/kcontrol/pics/cr128-app-clock.png differ diff --git a/kcontrol/pics/cr128-app-colors.png b/kcontrol/pics/cr128-app-colors.png new file mode 100644 index 000000000..2f6bf1640 Binary files /dev/null and b/kcontrol/pics/cr128-app-colors.png differ diff --git a/kcontrol/pics/cr128-app-date.png b/kcontrol/pics/cr128-app-date.png new file mode 100644 index 000000000..1e34bb233 Binary files /dev/null and b/kcontrol/pics/cr128-app-date.png differ diff --git a/kcontrol/pics/cr128-app-energy.png b/kcontrol/pics/cr128-app-energy.png new file mode 100644 index 000000000..4186ee48d Binary files /dev/null and b/kcontrol/pics/cr128-app-energy.png differ diff --git a/kcontrol/pics/cr128-app-energy_star.png b/kcontrol/pics/cr128-app-energy_star.png new file mode 100644 index 000000000..d9460449c Binary files /dev/null and b/kcontrol/pics/cr128-app-energy_star.png differ diff --git a/kcontrol/pics/cr128-app-filetypes.png b/kcontrol/pics/cr128-app-filetypes.png new file mode 100644 index 000000000..144482335 Binary files /dev/null and b/kcontrol/pics/cr128-app-filetypes.png differ diff --git a/kcontrol/pics/cr128-app-fonts.png b/kcontrol/pics/cr128-app-fonts.png new file mode 100644 index 000000000..f859e33e7 Binary files /dev/null and b/kcontrol/pics/cr128-app-fonts.png differ diff --git a/kcontrol/pics/cr128-app-help_index.png b/kcontrol/pics/cr128-app-help_index.png new file mode 100644 index 000000000..9a1ee3fe5 Binary files /dev/null and b/kcontrol/pics/cr128-app-help_index.png differ diff --git a/kcontrol/pics/cr128-app-hwinfo.png b/kcontrol/pics/cr128-app-hwinfo.png new file mode 100644 index 000000000..d7a3052c5 Binary files /dev/null and b/kcontrol/pics/cr128-app-hwinfo.png differ diff --git a/kcontrol/pics/cr128-app-kcmdevices.png b/kcontrol/pics/cr128-app-kcmdevices.png new file mode 100644 index 000000000..0dd12a56a Binary files /dev/null and b/kcontrol/pics/cr128-app-kcmdevices.png differ diff --git a/kcontrol/pics/cr128-app-kcmdf.png b/kcontrol/pics/cr128-app-kcmdf.png new file mode 100644 index 000000000..cbec02996 Binary files /dev/null and b/kcontrol/pics/cr128-app-kcmdf.png differ diff --git a/kcontrol/pics/cr128-app-kcmkwm.png b/kcontrol/pics/cr128-app-kcmkwm.png new file mode 100644 index 000000000..c632bfd45 Binary files /dev/null and b/kcontrol/pics/cr128-app-kcmkwm.png differ diff --git a/kcontrol/pics/cr128-app-kcmmemory.png b/kcontrol/pics/cr128-app-kcmmemory.png new file mode 100644 index 000000000..8088fef9b Binary files /dev/null and b/kcontrol/pics/cr128-app-kcmmemory.png differ diff --git a/kcontrol/pics/cr128-app-kcmpartitions.png b/kcontrol/pics/cr128-app-kcmpartitions.png new file mode 100644 index 000000000..627c52fe7 Binary files /dev/null and b/kcontrol/pics/cr128-app-kcmpartitions.png differ diff --git a/kcontrol/pics/cr128-app-kcmpci.png b/kcontrol/pics/cr128-app-kcmpci.png new file mode 100644 index 000000000..efed93129 Binary files /dev/null and b/kcontrol/pics/cr128-app-kcmpci.png differ diff --git a/kcontrol/pics/cr128-app-kdmconfig.png b/kcontrol/pics/cr128-app-kdmconfig.png new file mode 100644 index 000000000..f28f704f7 Binary files /dev/null and b/kcontrol/pics/cr128-app-kdmconfig.png differ diff --git a/kcontrol/pics/cr128-app-key_bindings.png b/kcontrol/pics/cr128-app-key_bindings.png new file mode 100644 index 000000000..4c24fa0e4 Binary files /dev/null and b/kcontrol/pics/cr128-app-key_bindings.png differ diff --git a/kcontrol/pics/cr128-app-kscreensaver.png b/kcontrol/pics/cr128-app-kscreensaver.png new file mode 100644 index 000000000..e8f036fe3 Binary files /dev/null and b/kcontrol/pics/cr128-app-kscreensaver.png differ diff --git a/kcontrol/pics/cr128-app-kthememgr.png b/kcontrol/pics/cr128-app-kthememgr.png new file mode 100644 index 000000000..8c496e5d3 Binary files /dev/null and b/kcontrol/pics/cr128-app-kthememgr.png differ diff --git a/kcontrol/pics/cr128-app-locale.png b/kcontrol/pics/cr128-app-locale.png new file mode 100644 index 000000000..25403acc9 Binary files /dev/null and b/kcontrol/pics/cr128-app-locale.png differ diff --git a/kcontrol/pics/cr128-app-looknfeel.png b/kcontrol/pics/cr128-app-looknfeel.png new file mode 100644 index 000000000..cd1a36b9a Binary files /dev/null and b/kcontrol/pics/cr128-app-looknfeel.png differ diff --git a/kcontrol/pics/cr128-app-multimedia.png b/kcontrol/pics/cr128-app-multimedia.png new file mode 100644 index 000000000..5543818ba Binary files /dev/null and b/kcontrol/pics/cr128-app-multimedia.png differ diff --git a/kcontrol/pics/cr128-app-personal.png b/kcontrol/pics/cr128-app-personal.png new file mode 100644 index 000000000..9e033dfcc Binary files /dev/null and b/kcontrol/pics/cr128-app-personal.png differ diff --git a/kcontrol/pics/cr128-app-proxy.png b/kcontrol/pics/cr128-app-proxy.png new file mode 100644 index 000000000..ec18d5a92 Binary files /dev/null and b/kcontrol/pics/cr128-app-proxy.png differ diff --git a/kcontrol/pics/cr128-app-samba.png b/kcontrol/pics/cr128-app-samba.png new file mode 100644 index 000000000..e4867d188 Binary files /dev/null and b/kcontrol/pics/cr128-app-samba.png differ diff --git a/kcontrol/pics/cr128-app-stylesheet.png b/kcontrol/pics/cr128-app-stylesheet.png new file mode 100644 index 000000000..bc911a9c9 Binary files /dev/null and b/kcontrol/pics/cr128-app-stylesheet.png differ diff --git a/kcontrol/pics/cr128-device-laptop.png b/kcontrol/pics/cr128-device-laptop.png new file mode 100644 index 000000000..0fef41bc3 Binary files /dev/null and b/kcontrol/pics/cr128-device-laptop.png differ diff --git a/kcontrol/pics/cr16-app-access.png b/kcontrol/pics/cr16-app-access.png new file mode 100644 index 000000000..a952d7786 Binary files /dev/null and b/kcontrol/pics/cr16-app-access.png differ diff --git a/kcontrol/pics/cr16-app-agent.png b/kcontrol/pics/cr16-app-agent.png new file mode 100644 index 000000000..9826d3457 Binary files /dev/null and b/kcontrol/pics/cr16-app-agent.png differ diff --git a/kcontrol/pics/cr16-app-arts.png b/kcontrol/pics/cr16-app-arts.png new file mode 100644 index 000000000..cc030d391 Binary files /dev/null and b/kcontrol/pics/cr16-app-arts.png differ diff --git a/kcontrol/pics/cr16-app-background.png b/kcontrol/pics/cr16-app-background.png new file mode 100644 index 000000000..f4ef81c60 Binary files /dev/null and b/kcontrol/pics/cr16-app-background.png differ diff --git a/kcontrol/pics/cr16-app-bell.png b/kcontrol/pics/cr16-app-bell.png new file mode 100644 index 000000000..188410853 Binary files /dev/null and b/kcontrol/pics/cr16-app-bell.png differ diff --git a/kcontrol/pics/cr16-app-cache.png b/kcontrol/pics/cr16-app-cache.png new file mode 100644 index 000000000..9d3f243ab Binary files /dev/null and b/kcontrol/pics/cr16-app-cache.png differ diff --git a/kcontrol/pics/cr16-app-clock.png b/kcontrol/pics/cr16-app-clock.png new file mode 100644 index 000000000..dca2c7ef8 Binary files /dev/null and b/kcontrol/pics/cr16-app-clock.png differ diff --git a/kcontrol/pics/cr16-app-colors.png b/kcontrol/pics/cr16-app-colors.png new file mode 100644 index 000000000..c0a67bb90 Binary files /dev/null and b/kcontrol/pics/cr16-app-colors.png differ diff --git a/kcontrol/pics/cr16-app-cookie.png b/kcontrol/pics/cr16-app-cookie.png new file mode 100644 index 000000000..16617b9f4 Binary files /dev/null and b/kcontrol/pics/cr16-app-cookie.png differ diff --git a/kcontrol/pics/cr16-app-date.png b/kcontrol/pics/cr16-app-date.png new file mode 100644 index 000000000..fbf29f521 Binary files /dev/null and b/kcontrol/pics/cr16-app-date.png differ diff --git a/kcontrol/pics/cr16-app-energy.png b/kcontrol/pics/cr16-app-energy.png new file mode 100644 index 000000000..ebad43996 Binary files /dev/null and b/kcontrol/pics/cr16-app-energy.png differ diff --git a/kcontrol/pics/cr16-app-energy_star.png b/kcontrol/pics/cr16-app-energy_star.png new file mode 100644 index 000000000..52507f80a Binary files /dev/null and b/kcontrol/pics/cr16-app-energy_star.png differ diff --git a/kcontrol/pics/cr16-app-enhanced_browsing.png b/kcontrol/pics/cr16-app-enhanced_browsing.png new file mode 100644 index 000000000..d9023041c Binary files /dev/null and b/kcontrol/pics/cr16-app-enhanced_browsing.png differ diff --git a/kcontrol/pics/cr16-app-filetypes.png b/kcontrol/pics/cr16-app-filetypes.png new file mode 100644 index 000000000..e6d7266cf Binary files /dev/null and b/kcontrol/pics/cr16-app-filetypes.png differ diff --git a/kcontrol/pics/cr16-app-fonts.png b/kcontrol/pics/cr16-app-fonts.png new file mode 100644 index 000000000..78d71d03a Binary files /dev/null and b/kcontrol/pics/cr16-app-fonts.png differ diff --git a/kcontrol/pics/cr16-app-help_index.png b/kcontrol/pics/cr16-app-help_index.png new file mode 100644 index 000000000..1cb23431b Binary files /dev/null and b/kcontrol/pics/cr16-app-help_index.png differ diff --git a/kcontrol/pics/cr16-app-hwinfo.png b/kcontrol/pics/cr16-app-hwinfo.png new file mode 100644 index 000000000..99889980d Binary files /dev/null and b/kcontrol/pics/cr16-app-hwinfo.png differ diff --git a/kcontrol/pics/cr16-app-icons.png b/kcontrol/pics/cr16-app-icons.png new file mode 100644 index 000000000..10d2a2d63 Binary files /dev/null and b/kcontrol/pics/cr16-app-icons.png differ diff --git a/kcontrol/pics/cr16-app-iconthemes.png b/kcontrol/pics/cr16-app-iconthemes.png new file mode 100644 index 000000000..4a9081564 Binary files /dev/null and b/kcontrol/pics/cr16-app-iconthemes.png differ diff --git a/kcontrol/pics/cr16-app-ieee1394.png b/kcontrol/pics/cr16-app-ieee1394.png new file mode 100644 index 000000000..b7cec0007 Binary files /dev/null and b/kcontrol/pics/cr16-app-ieee1394.png differ diff --git a/kcontrol/pics/cr16-app-input_devices_settings.png b/kcontrol/pics/cr16-app-input_devices_settings.png new file mode 100644 index 000000000..18b3f92eb Binary files /dev/null and b/kcontrol/pics/cr16-app-input_devices_settings.png differ diff --git a/kcontrol/pics/cr16-app-kcmdevices.png b/kcontrol/pics/cr16-app-kcmdevices.png new file mode 100644 index 000000000..c7c34a1a7 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmdevices.png differ diff --git a/kcontrol/pics/cr16-app-kcmkicker.png b/kcontrol/pics/cr16-app-kcmkicker.png new file mode 100644 index 000000000..5bd927ea6 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmkicker.png differ diff --git a/kcontrol/pics/cr16-app-kcmkwm.png b/kcontrol/pics/cr16-app-kcmkwm.png new file mode 100644 index 000000000..996c4c68a Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmkwm.png differ diff --git a/kcontrol/pics/cr16-app-kcmmemory.png b/kcontrol/pics/cr16-app-kcmmemory.png new file mode 100644 index 000000000..6ddeddb68 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmmemory.png differ diff --git a/kcontrol/pics/cr16-app-kcmmidi.png b/kcontrol/pics/cr16-app-kcmmidi.png new file mode 100644 index 000000000..4283b35f3 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmmidi.png differ diff --git a/kcontrol/pics/cr16-app-kcmpartitions.png b/kcontrol/pics/cr16-app-kcmpartitions.png new file mode 100644 index 000000000..5b6eb8764 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmpartitions.png differ diff --git a/kcontrol/pics/cr16-app-kcmpci.png b/kcontrol/pics/cr16-app-kcmpci.png new file mode 100644 index 000000000..0ac401c6f Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmpci.png differ diff --git a/kcontrol/pics/cr16-app-kcmprocessor.png b/kcontrol/pics/cr16-app-kcmprocessor.png new file mode 100644 index 000000000..b7dc9b4d1 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmprocessor.png differ diff --git a/kcontrol/pics/cr16-app-kcmscsi.png b/kcontrol/pics/cr16-app-kcmscsi.png new file mode 100644 index 000000000..2ac53532a Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmscsi.png differ diff --git a/kcontrol/pics/cr16-app-kcmsound.png b/kcontrol/pics/cr16-app-kcmsound.png new file mode 100644 index 000000000..dbf51d203 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmsound.png differ diff --git a/kcontrol/pics/cr16-app-kcmsystem.png b/kcontrol/pics/cr16-app-kcmsystem.png new file mode 100644 index 000000000..b97bfb434 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmsystem.png differ diff --git a/kcontrol/pics/cr16-app-kcmx.png b/kcontrol/pics/cr16-app-kcmx.png new file mode 100644 index 000000000..29ea2da85 Binary files /dev/null and b/kcontrol/pics/cr16-app-kcmx.png differ diff --git a/kcontrol/pics/cr16-app-kdmconfig.png b/kcontrol/pics/cr16-app-kdmconfig.png new file mode 100644 index 000000000..8f69e2b99 Binary files /dev/null and b/kcontrol/pics/cr16-app-kdmconfig.png differ diff --git a/kcontrol/pics/cr16-app-key_bindings.png b/kcontrol/pics/cr16-app-key_bindings.png new file mode 100644 index 000000000..26266f1b1 Binary files /dev/null and b/kcontrol/pics/cr16-app-key_bindings.png differ diff --git a/kcontrol/pics/cr16-app-keyboard.png b/kcontrol/pics/cr16-app-keyboard.png new file mode 100644 index 000000000..198d20221 Binary files /dev/null and b/kcontrol/pics/cr16-app-keyboard.png differ diff --git a/kcontrol/pics/cr16-app-keyboard_layout.png b/kcontrol/pics/cr16-app-keyboard_layout.png new file mode 100644 index 000000000..efbbcda82 Binary files /dev/null and b/kcontrol/pics/cr16-app-keyboard_layout.png differ diff --git a/kcontrol/pics/cr16-app-knotify.png b/kcontrol/pics/cr16-app-knotify.png new file mode 100644 index 000000000..a893d6229 Binary files /dev/null and b/kcontrol/pics/cr16-app-knotify.png differ diff --git a/kcontrol/pics/cr16-app-kscreensaver.png b/kcontrol/pics/cr16-app-kscreensaver.png new file mode 100644 index 000000000..200fe3dcc Binary files /dev/null and b/kcontrol/pics/cr16-app-kscreensaver.png differ diff --git a/kcontrol/pics/cr16-app-kthememgr.png b/kcontrol/pics/cr16-app-kthememgr.png new file mode 100644 index 000000000..2b3588a05 Binary files /dev/null and b/kcontrol/pics/cr16-app-kthememgr.png differ diff --git a/kcontrol/pics/cr16-app-locale.png b/kcontrol/pics/cr16-app-locale.png new file mode 100644 index 000000000..0dfece4d3 Binary files /dev/null and b/kcontrol/pics/cr16-app-locale.png differ diff --git a/kcontrol/pics/cr16-app-looknfeel.png b/kcontrol/pics/cr16-app-looknfeel.png new file mode 100644 index 000000000..fb4181004 Binary files /dev/null and b/kcontrol/pics/cr16-app-looknfeel.png differ diff --git a/kcontrol/pics/cr16-app-multimedia.png b/kcontrol/pics/cr16-app-multimedia.png new file mode 100644 index 000000000..d2bf93a19 Binary files /dev/null and b/kcontrol/pics/cr16-app-multimedia.png differ diff --git a/kcontrol/pics/cr16-app-panel_settings.png b/kcontrol/pics/cr16-app-panel_settings.png new file mode 100644 index 000000000..e66dd216a Binary files /dev/null and b/kcontrol/pics/cr16-app-panel_settings.png differ diff --git a/kcontrol/pics/cr16-app-personal.png b/kcontrol/pics/cr16-app-personal.png new file mode 100644 index 000000000..83e5b318b Binary files /dev/null and b/kcontrol/pics/cr16-app-personal.png differ diff --git a/kcontrol/pics/cr16-app-proxy.png b/kcontrol/pics/cr16-app-proxy.png new file mode 100644 index 000000000..69f8bb745 Binary files /dev/null and b/kcontrol/pics/cr16-app-proxy.png differ diff --git a/kcontrol/pics/cr16-app-samba.png b/kcontrol/pics/cr16-app-samba.png new file mode 100644 index 000000000..3d2e6885a Binary files /dev/null and b/kcontrol/pics/cr16-app-samba.png differ diff --git a/kcontrol/pics/cr16-app-style.png b/kcontrol/pics/cr16-app-style.png new file mode 100644 index 000000000..b727f8f60 Binary files /dev/null and b/kcontrol/pics/cr16-app-style.png differ diff --git a/kcontrol/pics/cr16-app-stylesheet.png b/kcontrol/pics/cr16-app-stylesheet.png new file mode 100644 index 000000000..6fdea61e2 Binary files /dev/null and b/kcontrol/pics/cr16-app-stylesheet.png differ diff --git a/kcontrol/pics/cr16-app-usb.png b/kcontrol/pics/cr16-app-usb.png new file mode 100644 index 000000000..b772ba541 Binary files /dev/null and b/kcontrol/pics/cr16-app-usb.png differ diff --git a/kcontrol/pics/cr16-device-laptop.png b/kcontrol/pics/cr16-device-laptop.png new file mode 100644 index 000000000..9e221e632 Binary files /dev/null and b/kcontrol/pics/cr16-device-laptop.png differ diff --git a/kcontrol/pics/cr22-app-access.png b/kcontrol/pics/cr22-app-access.png new file mode 100644 index 000000000..ba7027a14 Binary files /dev/null and b/kcontrol/pics/cr22-app-access.png differ diff --git a/kcontrol/pics/cr22-app-agent.png b/kcontrol/pics/cr22-app-agent.png new file mode 100644 index 000000000..6009bf34a Binary files /dev/null and b/kcontrol/pics/cr22-app-agent.png differ diff --git a/kcontrol/pics/cr22-app-arts.png b/kcontrol/pics/cr22-app-arts.png new file mode 100644 index 000000000..2a1a4ceb0 Binary files /dev/null and b/kcontrol/pics/cr22-app-arts.png differ diff --git a/kcontrol/pics/cr22-app-background.png b/kcontrol/pics/cr22-app-background.png new file mode 100644 index 000000000..1dd1253a1 Binary files /dev/null and b/kcontrol/pics/cr22-app-background.png differ diff --git a/kcontrol/pics/cr22-app-bell.png b/kcontrol/pics/cr22-app-bell.png new file mode 100644 index 000000000..f4dd1afd5 Binary files /dev/null and b/kcontrol/pics/cr22-app-bell.png differ diff --git a/kcontrol/pics/cr22-app-cache.png b/kcontrol/pics/cr22-app-cache.png new file mode 100644 index 000000000..509009956 Binary files /dev/null and b/kcontrol/pics/cr22-app-cache.png differ diff --git a/kcontrol/pics/cr22-app-colors.png b/kcontrol/pics/cr22-app-colors.png new file mode 100644 index 000000000..84fb0b922 Binary files /dev/null and b/kcontrol/pics/cr22-app-colors.png differ diff --git a/kcontrol/pics/cr22-app-cookie.png b/kcontrol/pics/cr22-app-cookie.png new file mode 100644 index 000000000..eb11b7605 Binary files /dev/null and b/kcontrol/pics/cr22-app-cookie.png differ diff --git a/kcontrol/pics/cr22-app-date.png b/kcontrol/pics/cr22-app-date.png new file mode 100644 index 000000000..cb1f8455a Binary files /dev/null and b/kcontrol/pics/cr22-app-date.png differ diff --git a/kcontrol/pics/cr22-app-energy.png b/kcontrol/pics/cr22-app-energy.png new file mode 100644 index 000000000..2893c77bf Binary files /dev/null and b/kcontrol/pics/cr22-app-energy.png differ diff --git a/kcontrol/pics/cr22-app-enhanced_browsing.png b/kcontrol/pics/cr22-app-enhanced_browsing.png new file mode 100644 index 000000000..c7281f352 Binary files /dev/null and b/kcontrol/pics/cr22-app-enhanced_browsing.png differ diff --git a/kcontrol/pics/cr22-app-filetypes.png b/kcontrol/pics/cr22-app-filetypes.png new file mode 100644 index 000000000..71e4ae8a2 Binary files /dev/null and b/kcontrol/pics/cr22-app-filetypes.png differ diff --git a/kcontrol/pics/cr22-app-fonts.png b/kcontrol/pics/cr22-app-fonts.png new file mode 100644 index 000000000..19fccc6c5 Binary files /dev/null and b/kcontrol/pics/cr22-app-fonts.png differ diff --git a/kcontrol/pics/cr22-app-hwinfo.png b/kcontrol/pics/cr22-app-hwinfo.png new file mode 100644 index 000000000..9eb787ef2 Binary files /dev/null and b/kcontrol/pics/cr22-app-hwinfo.png differ diff --git a/kcontrol/pics/cr22-app-icons.png b/kcontrol/pics/cr22-app-icons.png new file mode 100644 index 000000000..211feae8d Binary files /dev/null and b/kcontrol/pics/cr22-app-icons.png differ diff --git a/kcontrol/pics/cr22-app-iconthemes.png b/kcontrol/pics/cr22-app-iconthemes.png new file mode 100644 index 000000000..b9ade4896 Binary files /dev/null and b/kcontrol/pics/cr22-app-iconthemes.png differ diff --git a/kcontrol/pics/cr22-app-ieee1394.png b/kcontrol/pics/cr22-app-ieee1394.png new file mode 100644 index 000000000..184c283bf Binary files /dev/null and b/kcontrol/pics/cr22-app-ieee1394.png differ diff --git a/kcontrol/pics/cr22-app-kcmdevices.png b/kcontrol/pics/cr22-app-kcmdevices.png new file mode 100644 index 000000000..49d63884d Binary files /dev/null and b/kcontrol/pics/cr22-app-kcmdevices.png differ diff --git a/kcontrol/pics/cr22-app-kcmkicker.png b/kcontrol/pics/cr22-app-kcmkicker.png new file mode 100644 index 000000000..f96549b24 Binary files /dev/null and b/kcontrol/pics/cr22-app-kcmkicker.png differ diff --git a/kcontrol/pics/cr22-app-kcmkwm.png b/kcontrol/pics/cr22-app-kcmkwm.png new file mode 100644 index 000000000..a7227f3ef Binary files /dev/null and b/kcontrol/pics/cr22-app-kcmkwm.png differ diff --git a/kcontrol/pics/cr22-app-kcmx.png b/kcontrol/pics/cr22-app-kcmx.png new file mode 100644 index 000000000..fdab29916 Binary files /dev/null and b/kcontrol/pics/cr22-app-kcmx.png differ diff --git a/kcontrol/pics/cr22-app-kdmconfig.png b/kcontrol/pics/cr22-app-kdmconfig.png new file mode 100644 index 000000000..399978a99 Binary files /dev/null and b/kcontrol/pics/cr22-app-kdmconfig.png differ diff --git a/kcontrol/pics/cr22-app-key_bindings.png b/kcontrol/pics/cr22-app-key_bindings.png new file mode 100644 index 000000000..732f4d9c1 Binary files /dev/null and b/kcontrol/pics/cr22-app-key_bindings.png differ diff --git a/kcontrol/pics/cr22-app-keyboard.png b/kcontrol/pics/cr22-app-keyboard.png new file mode 100644 index 000000000..4360481af Binary files /dev/null and b/kcontrol/pics/cr22-app-keyboard.png differ diff --git a/kcontrol/pics/cr22-app-kscreensaver.png b/kcontrol/pics/cr22-app-kscreensaver.png new file mode 100644 index 000000000..7448fe237 Binary files /dev/null and b/kcontrol/pics/cr22-app-kscreensaver.png differ diff --git a/kcontrol/pics/cr22-app-kthememgr.png b/kcontrol/pics/cr22-app-kthememgr.png new file mode 100644 index 000000000..f3aef6eed Binary files /dev/null and b/kcontrol/pics/cr22-app-kthememgr.png differ diff --git a/kcontrol/pics/cr22-app-locale.png b/kcontrol/pics/cr22-app-locale.png new file mode 100644 index 000000000..827360a8b Binary files /dev/null and b/kcontrol/pics/cr22-app-locale.png differ diff --git a/kcontrol/pics/cr22-app-personal.png b/kcontrol/pics/cr22-app-personal.png new file mode 100644 index 000000000..6b7153767 Binary files /dev/null and b/kcontrol/pics/cr22-app-personal.png differ diff --git a/kcontrol/pics/cr22-app-proxy.png b/kcontrol/pics/cr22-app-proxy.png new file mode 100644 index 000000000..e8fef4233 Binary files /dev/null and b/kcontrol/pics/cr22-app-proxy.png differ diff --git a/kcontrol/pics/cr22-app-samba.png b/kcontrol/pics/cr22-app-samba.png new file mode 100644 index 000000000..32b5972e9 Binary files /dev/null and b/kcontrol/pics/cr22-app-samba.png differ diff --git a/kcontrol/pics/cr22-app-style.png b/kcontrol/pics/cr22-app-style.png new file mode 100644 index 000000000..f8810f245 Binary files /dev/null and b/kcontrol/pics/cr22-app-style.png differ diff --git a/kcontrol/pics/cr22-app-stylesheet.png b/kcontrol/pics/cr22-app-stylesheet.png new file mode 100644 index 000000000..625688457 Binary files /dev/null and b/kcontrol/pics/cr22-app-stylesheet.png differ diff --git a/kcontrol/pics/cr22-device-laptop.png b/kcontrol/pics/cr22-device-laptop.png new file mode 100644 index 000000000..db7f61e89 Binary files /dev/null and b/kcontrol/pics/cr22-device-laptop.png differ diff --git a/kcontrol/pics/cr32-app-access.png b/kcontrol/pics/cr32-app-access.png new file mode 100644 index 000000000..c83070ca3 Binary files /dev/null and b/kcontrol/pics/cr32-app-access.png differ diff --git a/kcontrol/pics/cr32-app-agent.png b/kcontrol/pics/cr32-app-agent.png new file mode 100644 index 000000000..d10a80c61 Binary files /dev/null and b/kcontrol/pics/cr32-app-agent.png differ diff --git a/kcontrol/pics/cr32-app-arts.png b/kcontrol/pics/cr32-app-arts.png new file mode 100644 index 000000000..378cce9a6 Binary files /dev/null and b/kcontrol/pics/cr32-app-arts.png differ diff --git a/kcontrol/pics/cr32-app-background.png b/kcontrol/pics/cr32-app-background.png new file mode 100644 index 000000000..45d81edef Binary files /dev/null and b/kcontrol/pics/cr32-app-background.png differ diff --git a/kcontrol/pics/cr32-app-bell.png b/kcontrol/pics/cr32-app-bell.png new file mode 100644 index 000000000..8d4079b99 Binary files /dev/null and b/kcontrol/pics/cr32-app-bell.png differ diff --git a/kcontrol/pics/cr32-app-cache.png b/kcontrol/pics/cr32-app-cache.png new file mode 100644 index 000000000..7700fd9ad Binary files /dev/null and b/kcontrol/pics/cr32-app-cache.png differ diff --git a/kcontrol/pics/cr32-app-clock.png b/kcontrol/pics/cr32-app-clock.png new file mode 100644 index 000000000..0f93b36cc Binary files /dev/null and b/kcontrol/pics/cr32-app-clock.png differ diff --git a/kcontrol/pics/cr32-app-colors.png b/kcontrol/pics/cr32-app-colors.png new file mode 100644 index 000000000..e5aa87cbd Binary files /dev/null and b/kcontrol/pics/cr32-app-colors.png differ diff --git a/kcontrol/pics/cr32-app-cookie.png b/kcontrol/pics/cr32-app-cookie.png new file mode 100644 index 000000000..0879588c8 Binary files /dev/null and b/kcontrol/pics/cr32-app-cookie.png differ diff --git a/kcontrol/pics/cr32-app-date.png b/kcontrol/pics/cr32-app-date.png new file mode 100644 index 000000000..54b320347 Binary files /dev/null and b/kcontrol/pics/cr32-app-date.png differ diff --git a/kcontrol/pics/cr32-app-energy.png b/kcontrol/pics/cr32-app-energy.png new file mode 100644 index 000000000..e796c0528 Binary files /dev/null and b/kcontrol/pics/cr32-app-energy.png differ diff --git a/kcontrol/pics/cr32-app-energy_star.png b/kcontrol/pics/cr32-app-energy_star.png new file mode 100644 index 000000000..c26cf4cee Binary files /dev/null and b/kcontrol/pics/cr32-app-energy_star.png differ diff --git a/kcontrol/pics/cr32-app-enhanced_browsing.png b/kcontrol/pics/cr32-app-enhanced_browsing.png new file mode 100644 index 000000000..00be47e24 Binary files /dev/null and b/kcontrol/pics/cr32-app-enhanced_browsing.png differ diff --git a/kcontrol/pics/cr32-app-filetypes.png b/kcontrol/pics/cr32-app-filetypes.png new file mode 100644 index 000000000..53d0099be Binary files /dev/null and b/kcontrol/pics/cr32-app-filetypes.png differ diff --git a/kcontrol/pics/cr32-app-fonts.png b/kcontrol/pics/cr32-app-fonts.png new file mode 100644 index 000000000..9ace98c25 Binary files /dev/null and b/kcontrol/pics/cr32-app-fonts.png differ diff --git a/kcontrol/pics/cr32-app-help_index.png b/kcontrol/pics/cr32-app-help_index.png new file mode 100644 index 000000000..d5af86353 Binary files /dev/null and b/kcontrol/pics/cr32-app-help_index.png differ diff --git a/kcontrol/pics/cr32-app-hwinfo.png b/kcontrol/pics/cr32-app-hwinfo.png new file mode 100644 index 000000000..dfb9a1c14 Binary files /dev/null and b/kcontrol/pics/cr32-app-hwinfo.png differ diff --git a/kcontrol/pics/cr32-app-icons.png b/kcontrol/pics/cr32-app-icons.png new file mode 100644 index 000000000..a12f847d9 Binary files /dev/null and b/kcontrol/pics/cr32-app-icons.png differ diff --git a/kcontrol/pics/cr32-app-iconthemes.png b/kcontrol/pics/cr32-app-iconthemes.png new file mode 100644 index 000000000..c5326752a Binary files /dev/null and b/kcontrol/pics/cr32-app-iconthemes.png differ diff --git a/kcontrol/pics/cr32-app-ieee1394.png b/kcontrol/pics/cr32-app-ieee1394.png new file mode 100644 index 000000000..0253e7976 Binary files /dev/null and b/kcontrol/pics/cr32-app-ieee1394.png differ diff --git a/kcontrol/pics/cr32-app-input_devices_settings.png b/kcontrol/pics/cr32-app-input_devices_settings.png new file mode 100644 index 000000000..785b8a0fc Binary files /dev/null and b/kcontrol/pics/cr32-app-input_devices_settings.png differ diff --git a/kcontrol/pics/cr32-app-kcmdevices.png b/kcontrol/pics/cr32-app-kcmdevices.png new file mode 100644 index 000000000..d6354ad28 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmdevices.png differ diff --git a/kcontrol/pics/cr32-app-kcmdrkonqi.png b/kcontrol/pics/cr32-app-kcmdrkonqi.png new file mode 100644 index 000000000..26bb684cb Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmdrkonqi.png differ diff --git a/kcontrol/pics/cr32-app-kcmkicker.png b/kcontrol/pics/cr32-app-kcmkicker.png new file mode 100644 index 000000000..0863d4032 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmkicker.png differ diff --git a/kcontrol/pics/cr32-app-kcmkwm.png b/kcontrol/pics/cr32-app-kcmkwm.png new file mode 100644 index 000000000..7b1cbeb43 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmkwm.png differ diff --git a/kcontrol/pics/cr32-app-kcmmemory.png b/kcontrol/pics/cr32-app-kcmmemory.png new file mode 100644 index 000000000..8b50f37c9 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmmemory.png differ diff --git a/kcontrol/pics/cr32-app-kcmmidi.png b/kcontrol/pics/cr32-app-kcmmidi.png new file mode 100644 index 000000000..8430f26fb Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmmidi.png differ diff --git a/kcontrol/pics/cr32-app-kcmpartitions.png b/kcontrol/pics/cr32-app-kcmpartitions.png new file mode 100644 index 000000000..e5a746f31 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmpartitions.png differ diff --git a/kcontrol/pics/cr32-app-kcmpci.png b/kcontrol/pics/cr32-app-kcmpci.png new file mode 100644 index 000000000..fbde5bd3f Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmpci.png differ diff --git a/kcontrol/pics/cr32-app-kcmprocessor.png b/kcontrol/pics/cr32-app-kcmprocessor.png new file mode 100644 index 000000000..72b2b4691 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmprocessor.png differ diff --git a/kcontrol/pics/cr32-app-kcmscsi.png b/kcontrol/pics/cr32-app-kcmscsi.png new file mode 100644 index 000000000..d09ff08a2 Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmscsi.png differ diff --git a/kcontrol/pics/cr32-app-kcmsound.png b/kcontrol/pics/cr32-app-kcmsound.png new file mode 100644 index 000000000..c122c880b Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmsound.png differ diff --git a/kcontrol/pics/cr32-app-kcmsystem.png b/kcontrol/pics/cr32-app-kcmsystem.png new file mode 100644 index 000000000..726784a4d Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmsystem.png differ diff --git a/kcontrol/pics/cr32-app-kcmx.png b/kcontrol/pics/cr32-app-kcmx.png new file mode 100644 index 000000000..4157c391d Binary files /dev/null and b/kcontrol/pics/cr32-app-kcmx.png differ diff --git a/kcontrol/pics/cr32-app-kdmconfig.png b/kcontrol/pics/cr32-app-kdmconfig.png new file mode 100644 index 000000000..a5cbf22d3 Binary files /dev/null and b/kcontrol/pics/cr32-app-kdmconfig.png differ diff --git a/kcontrol/pics/cr32-app-key_bindings.png b/kcontrol/pics/cr32-app-key_bindings.png new file mode 100644 index 000000000..6a3438d92 Binary files /dev/null and b/kcontrol/pics/cr32-app-key_bindings.png differ diff --git a/kcontrol/pics/cr32-app-keyboard.png b/kcontrol/pics/cr32-app-keyboard.png new file mode 100644 index 000000000..3bbc80536 Binary files /dev/null and b/kcontrol/pics/cr32-app-keyboard.png differ diff --git a/kcontrol/pics/cr32-app-keyboard_layout.png b/kcontrol/pics/cr32-app-keyboard_layout.png new file mode 100644 index 000000000..672c59310 Binary files /dev/null and b/kcontrol/pics/cr32-app-keyboard_layout.png differ diff --git a/kcontrol/pics/cr32-app-knotify.png b/kcontrol/pics/cr32-app-knotify.png new file mode 100644 index 000000000..ede0d8ed1 Binary files /dev/null and b/kcontrol/pics/cr32-app-knotify.png differ diff --git a/kcontrol/pics/cr32-app-kscreensaver.png b/kcontrol/pics/cr32-app-kscreensaver.png new file mode 100644 index 000000000..f527126bc Binary files /dev/null and b/kcontrol/pics/cr32-app-kscreensaver.png differ diff --git a/kcontrol/pics/cr32-app-kthememgr.png b/kcontrol/pics/cr32-app-kthememgr.png new file mode 100644 index 000000000..2bf6a7782 Binary files /dev/null and b/kcontrol/pics/cr32-app-kthememgr.png differ diff --git a/kcontrol/pics/cr32-app-locale.png b/kcontrol/pics/cr32-app-locale.png new file mode 100644 index 000000000..96b4201ac Binary files /dev/null and b/kcontrol/pics/cr32-app-locale.png differ diff --git a/kcontrol/pics/cr32-app-looknfeel.png b/kcontrol/pics/cr32-app-looknfeel.png new file mode 100644 index 000000000..75e29219b Binary files /dev/null and b/kcontrol/pics/cr32-app-looknfeel.png differ diff --git a/kcontrol/pics/cr32-app-multimedia.png b/kcontrol/pics/cr32-app-multimedia.png new file mode 100644 index 000000000..1e397c524 Binary files /dev/null and b/kcontrol/pics/cr32-app-multimedia.png differ diff --git a/kcontrol/pics/cr32-app-personal.png b/kcontrol/pics/cr32-app-personal.png new file mode 100644 index 000000000..4f1959142 Binary files /dev/null and b/kcontrol/pics/cr32-app-personal.png differ diff --git a/kcontrol/pics/cr32-app-proxy.png b/kcontrol/pics/cr32-app-proxy.png new file mode 100644 index 000000000..46f68b243 Binary files /dev/null and b/kcontrol/pics/cr32-app-proxy.png differ diff --git a/kcontrol/pics/cr32-app-samba.png b/kcontrol/pics/cr32-app-samba.png new file mode 100644 index 000000000..0d79e5c83 Binary files /dev/null and b/kcontrol/pics/cr32-app-samba.png differ diff --git a/kcontrol/pics/cr32-app-style.png b/kcontrol/pics/cr32-app-style.png new file mode 100644 index 000000000..2e29a93a0 Binary files /dev/null and b/kcontrol/pics/cr32-app-style.png differ diff --git a/kcontrol/pics/cr32-app-stylesheet.png b/kcontrol/pics/cr32-app-stylesheet.png new file mode 100644 index 000000000..ab8918c30 Binary files /dev/null and b/kcontrol/pics/cr32-app-stylesheet.png differ diff --git a/kcontrol/pics/cr32-app-usb.png b/kcontrol/pics/cr32-app-usb.png new file mode 100644 index 000000000..c7601cb87 Binary files /dev/null and b/kcontrol/pics/cr32-app-usb.png differ diff --git a/kcontrol/pics/cr32-device-laptop.png b/kcontrol/pics/cr32-device-laptop.png new file mode 100644 index 000000000..866f3aae1 Binary files /dev/null and b/kcontrol/pics/cr32-device-laptop.png differ diff --git a/kcontrol/pics/cr48-app-access.png b/kcontrol/pics/cr48-app-access.png new file mode 100644 index 000000000..c74f3d99f Binary files /dev/null and b/kcontrol/pics/cr48-app-access.png differ diff --git a/kcontrol/pics/cr48-app-agent.png b/kcontrol/pics/cr48-app-agent.png new file mode 100644 index 000000000..50864ebc1 Binary files /dev/null and b/kcontrol/pics/cr48-app-agent.png differ diff --git a/kcontrol/pics/cr48-app-arts.png b/kcontrol/pics/cr48-app-arts.png new file mode 100644 index 000000000..462eff9a2 Binary files /dev/null and b/kcontrol/pics/cr48-app-arts.png differ diff --git a/kcontrol/pics/cr48-app-background.png b/kcontrol/pics/cr48-app-background.png new file mode 100644 index 000000000..7b7bf37dd Binary files /dev/null and b/kcontrol/pics/cr48-app-background.png differ diff --git a/kcontrol/pics/cr48-app-bell.png b/kcontrol/pics/cr48-app-bell.png new file mode 100644 index 000000000..0c4b6c5e3 Binary files /dev/null and b/kcontrol/pics/cr48-app-bell.png differ diff --git a/kcontrol/pics/cr48-app-cache.png b/kcontrol/pics/cr48-app-cache.png new file mode 100644 index 000000000..df779f4b3 Binary files /dev/null and b/kcontrol/pics/cr48-app-cache.png differ diff --git a/kcontrol/pics/cr48-app-clock.png b/kcontrol/pics/cr48-app-clock.png new file mode 100644 index 000000000..b97479759 Binary files /dev/null and b/kcontrol/pics/cr48-app-clock.png differ diff --git a/kcontrol/pics/cr48-app-colors.png b/kcontrol/pics/cr48-app-colors.png new file mode 100644 index 000000000..4be4e3501 Binary files /dev/null and b/kcontrol/pics/cr48-app-colors.png differ diff --git a/kcontrol/pics/cr48-app-cookie.png b/kcontrol/pics/cr48-app-cookie.png new file mode 100644 index 000000000..b3dc63ebc Binary files /dev/null and b/kcontrol/pics/cr48-app-cookie.png differ diff --git a/kcontrol/pics/cr48-app-date.png b/kcontrol/pics/cr48-app-date.png new file mode 100644 index 000000000..a510951db Binary files /dev/null and b/kcontrol/pics/cr48-app-date.png differ diff --git a/kcontrol/pics/cr48-app-energy.png b/kcontrol/pics/cr48-app-energy.png new file mode 100644 index 000000000..269eb4435 Binary files /dev/null and b/kcontrol/pics/cr48-app-energy.png differ diff --git a/kcontrol/pics/cr48-app-energy_star.png b/kcontrol/pics/cr48-app-energy_star.png new file mode 100644 index 000000000..5ed89d5ae Binary files /dev/null and b/kcontrol/pics/cr48-app-energy_star.png differ diff --git a/kcontrol/pics/cr48-app-enhanced_browsing.png b/kcontrol/pics/cr48-app-enhanced_browsing.png new file mode 100644 index 000000000..e9d926489 Binary files /dev/null and b/kcontrol/pics/cr48-app-enhanced_browsing.png differ diff --git a/kcontrol/pics/cr48-app-filetypes.png b/kcontrol/pics/cr48-app-filetypes.png new file mode 100644 index 000000000..37f365e21 Binary files /dev/null and b/kcontrol/pics/cr48-app-filetypes.png differ diff --git a/kcontrol/pics/cr48-app-fonts.png b/kcontrol/pics/cr48-app-fonts.png new file mode 100644 index 000000000..a17a1f282 Binary files /dev/null and b/kcontrol/pics/cr48-app-fonts.png differ diff --git a/kcontrol/pics/cr48-app-help_index.png b/kcontrol/pics/cr48-app-help_index.png new file mode 100644 index 000000000..418e1daf8 Binary files /dev/null and b/kcontrol/pics/cr48-app-help_index.png differ diff --git a/kcontrol/pics/cr48-app-hwinfo.png b/kcontrol/pics/cr48-app-hwinfo.png new file mode 100644 index 000000000..a7f8b281e Binary files /dev/null and b/kcontrol/pics/cr48-app-hwinfo.png differ diff --git a/kcontrol/pics/cr48-app-icons.png b/kcontrol/pics/cr48-app-icons.png new file mode 100644 index 000000000..a9100e732 Binary files /dev/null and b/kcontrol/pics/cr48-app-icons.png differ diff --git a/kcontrol/pics/cr48-app-iconthemes.png b/kcontrol/pics/cr48-app-iconthemes.png new file mode 100644 index 000000000..3ae2864a2 Binary files /dev/null and b/kcontrol/pics/cr48-app-iconthemes.png differ diff --git a/kcontrol/pics/cr48-app-ieee1394.png b/kcontrol/pics/cr48-app-ieee1394.png new file mode 100644 index 000000000..e5dd54b89 Binary files /dev/null and b/kcontrol/pics/cr48-app-ieee1394.png differ diff --git a/kcontrol/pics/cr48-app-input_devices_settings.png b/kcontrol/pics/cr48-app-input_devices_settings.png new file mode 100644 index 000000000..5c1e16a5b Binary files /dev/null and b/kcontrol/pics/cr48-app-input_devices_settings.png differ diff --git a/kcontrol/pics/cr48-app-kcmdevices.png b/kcontrol/pics/cr48-app-kcmdevices.png new file mode 100644 index 000000000..59f5d185a Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmdevices.png differ diff --git a/kcontrol/pics/cr48-app-kcmdf.png b/kcontrol/pics/cr48-app-kcmdf.png new file mode 100644 index 000000000..29d351f8b Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmdf.png differ diff --git a/kcontrol/pics/cr48-app-kcmdrkonqi.png b/kcontrol/pics/cr48-app-kcmdrkonqi.png new file mode 100644 index 000000000..54d7ce45f Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmdrkonqi.png differ diff --git a/kcontrol/pics/cr48-app-kcmkwm.png b/kcontrol/pics/cr48-app-kcmkwm.png new file mode 100644 index 000000000..21fb61e09 Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmkwm.png differ diff --git a/kcontrol/pics/cr48-app-kcmmemory.png b/kcontrol/pics/cr48-app-kcmmemory.png new file mode 100644 index 000000000..3424cfa33 Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmmemory.png differ diff --git a/kcontrol/pics/cr48-app-kcmmidi.png b/kcontrol/pics/cr48-app-kcmmidi.png new file mode 100644 index 000000000..8d716aca4 Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmmidi.png differ diff --git a/kcontrol/pics/cr48-app-kcmopengl.png b/kcontrol/pics/cr48-app-kcmopengl.png new file mode 100644 index 000000000..ae934924c Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmopengl.png differ diff --git a/kcontrol/pics/cr48-app-kcmpartitions.png b/kcontrol/pics/cr48-app-kcmpartitions.png new file mode 100644 index 000000000..bddfa43e8 Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmpartitions.png differ diff --git a/kcontrol/pics/cr48-app-kcmpci.png b/kcontrol/pics/cr48-app-kcmpci.png new file mode 100644 index 000000000..51215dddf Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmpci.png differ diff --git a/kcontrol/pics/cr48-app-kcmprocessor.png b/kcontrol/pics/cr48-app-kcmprocessor.png new file mode 100644 index 000000000..34e98e2f9 Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmprocessor.png differ diff --git a/kcontrol/pics/cr48-app-kcmscsi.png b/kcontrol/pics/cr48-app-kcmscsi.png new file mode 100644 index 000000000..d2abcebcf Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmscsi.png differ diff --git a/kcontrol/pics/cr48-app-kcmsystem.png b/kcontrol/pics/cr48-app-kcmsystem.png new file mode 100644 index 000000000..3ed096d9d Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmsystem.png differ diff --git a/kcontrol/pics/cr48-app-kcmx.png b/kcontrol/pics/cr48-app-kcmx.png new file mode 100644 index 000000000..99a635905 Binary files /dev/null and b/kcontrol/pics/cr48-app-kcmx.png differ diff --git a/kcontrol/pics/cr48-app-kdmconfig.png b/kcontrol/pics/cr48-app-kdmconfig.png new file mode 100644 index 000000000..d8b241ca9 Binary files /dev/null and b/kcontrol/pics/cr48-app-kdmconfig.png differ diff --git a/kcontrol/pics/cr48-app-key_bindings.png b/kcontrol/pics/cr48-app-key_bindings.png new file mode 100644 index 000000000..e4134ce3e Binary files /dev/null and b/kcontrol/pics/cr48-app-key_bindings.png differ diff --git a/kcontrol/pics/cr48-app-keyboard.png b/kcontrol/pics/cr48-app-keyboard.png new file mode 100644 index 000000000..04c821147 Binary files /dev/null and b/kcontrol/pics/cr48-app-keyboard.png differ diff --git a/kcontrol/pics/cr48-app-keyboard_layout.png b/kcontrol/pics/cr48-app-keyboard_layout.png new file mode 100644 index 000000000..ba0359447 Binary files /dev/null and b/kcontrol/pics/cr48-app-keyboard_layout.png differ diff --git a/kcontrol/pics/cr48-app-knotify.png b/kcontrol/pics/cr48-app-knotify.png new file mode 100644 index 000000000..b0aa6e8fa Binary files /dev/null and b/kcontrol/pics/cr48-app-knotify.png differ diff --git a/kcontrol/pics/cr48-app-kscreensaver.png b/kcontrol/pics/cr48-app-kscreensaver.png new file mode 100644 index 000000000..749f42253 Binary files /dev/null and b/kcontrol/pics/cr48-app-kscreensaver.png differ diff --git a/kcontrol/pics/cr48-app-kthememgr.png b/kcontrol/pics/cr48-app-kthememgr.png new file mode 100644 index 000000000..50430c726 Binary files /dev/null and b/kcontrol/pics/cr48-app-kthememgr.png differ diff --git a/kcontrol/pics/cr48-app-locale.png b/kcontrol/pics/cr48-app-locale.png new file mode 100644 index 000000000..e7defacbc Binary files /dev/null and b/kcontrol/pics/cr48-app-locale.png differ diff --git a/kcontrol/pics/cr48-app-looknfeel.png b/kcontrol/pics/cr48-app-looknfeel.png new file mode 100644 index 000000000..342ebd7af Binary files /dev/null and b/kcontrol/pics/cr48-app-looknfeel.png differ diff --git a/kcontrol/pics/cr48-app-multimedia.png b/kcontrol/pics/cr48-app-multimedia.png new file mode 100644 index 000000000..dc766a89c Binary files /dev/null and b/kcontrol/pics/cr48-app-multimedia.png differ diff --git a/kcontrol/pics/cr48-app-personal.png b/kcontrol/pics/cr48-app-personal.png new file mode 100644 index 000000000..90aedf0f8 Binary files /dev/null and b/kcontrol/pics/cr48-app-personal.png differ diff --git a/kcontrol/pics/cr48-app-proxy.png b/kcontrol/pics/cr48-app-proxy.png new file mode 100644 index 000000000..3683e298c Binary files /dev/null and b/kcontrol/pics/cr48-app-proxy.png differ diff --git a/kcontrol/pics/cr48-app-samba.png b/kcontrol/pics/cr48-app-samba.png new file mode 100644 index 000000000..d980263d8 Binary files /dev/null and b/kcontrol/pics/cr48-app-samba.png differ diff --git a/kcontrol/pics/cr48-app-style.png b/kcontrol/pics/cr48-app-style.png new file mode 100644 index 000000000..5d8af7e87 Binary files /dev/null and b/kcontrol/pics/cr48-app-style.png differ diff --git a/kcontrol/pics/cr48-app-stylesheet.png b/kcontrol/pics/cr48-app-stylesheet.png new file mode 100644 index 000000000..f74586b3c Binary files /dev/null and b/kcontrol/pics/cr48-app-stylesheet.png differ diff --git a/kcontrol/pics/cr48-app-usb.png b/kcontrol/pics/cr48-app-usb.png new file mode 100644 index 000000000..4260b8259 Binary files /dev/null and b/kcontrol/pics/cr48-app-usb.png differ diff --git a/kcontrol/pics/cr48-device-laptop.png b/kcontrol/pics/cr48-device-laptop.png new file mode 100644 index 000000000..380f8ba0b Binary files /dev/null and b/kcontrol/pics/cr48-device-laptop.png differ diff --git a/kcontrol/pics/cr64-app-access.png b/kcontrol/pics/cr64-app-access.png new file mode 100644 index 000000000..1d932d01d Binary files /dev/null and b/kcontrol/pics/cr64-app-access.png differ diff --git a/kcontrol/pics/cr64-app-arts.png b/kcontrol/pics/cr64-app-arts.png new file mode 100644 index 000000000..cab3cd94a Binary files /dev/null and b/kcontrol/pics/cr64-app-arts.png differ diff --git a/kcontrol/pics/cr64-app-background.png b/kcontrol/pics/cr64-app-background.png new file mode 100644 index 000000000..617f37ba7 Binary files /dev/null and b/kcontrol/pics/cr64-app-background.png differ diff --git a/kcontrol/pics/cr64-app-bell.png b/kcontrol/pics/cr64-app-bell.png new file mode 100644 index 000000000..f83c4092e Binary files /dev/null and b/kcontrol/pics/cr64-app-bell.png differ diff --git a/kcontrol/pics/cr64-app-cache.png b/kcontrol/pics/cr64-app-cache.png new file mode 100644 index 000000000..a49b55d1d Binary files /dev/null and b/kcontrol/pics/cr64-app-cache.png differ diff --git a/kcontrol/pics/cr64-app-clock.png b/kcontrol/pics/cr64-app-clock.png new file mode 100644 index 000000000..5698b5e05 Binary files /dev/null and b/kcontrol/pics/cr64-app-clock.png differ diff --git a/kcontrol/pics/cr64-app-colors.png b/kcontrol/pics/cr64-app-colors.png new file mode 100644 index 000000000..bf01037f5 Binary files /dev/null and b/kcontrol/pics/cr64-app-colors.png differ diff --git a/kcontrol/pics/cr64-app-cookie.png b/kcontrol/pics/cr64-app-cookie.png new file mode 100644 index 000000000..3988e0f23 Binary files /dev/null and b/kcontrol/pics/cr64-app-cookie.png differ diff --git a/kcontrol/pics/cr64-app-date.png b/kcontrol/pics/cr64-app-date.png new file mode 100644 index 000000000..06761d77e Binary files /dev/null and b/kcontrol/pics/cr64-app-date.png differ diff --git a/kcontrol/pics/cr64-app-energy.png b/kcontrol/pics/cr64-app-energy.png new file mode 100644 index 000000000..5223681ff Binary files /dev/null and b/kcontrol/pics/cr64-app-energy.png differ diff --git a/kcontrol/pics/cr64-app-energy_star.png b/kcontrol/pics/cr64-app-energy_star.png new file mode 100644 index 000000000..13a4640ab Binary files /dev/null and b/kcontrol/pics/cr64-app-energy_star.png differ diff --git a/kcontrol/pics/cr64-app-enhanced_browsing.png b/kcontrol/pics/cr64-app-enhanced_browsing.png new file mode 100644 index 000000000..e52328a77 Binary files /dev/null and b/kcontrol/pics/cr64-app-enhanced_browsing.png differ diff --git a/kcontrol/pics/cr64-app-filetypes.png b/kcontrol/pics/cr64-app-filetypes.png new file mode 100644 index 000000000..6f723a9cc Binary files /dev/null and b/kcontrol/pics/cr64-app-filetypes.png differ diff --git a/kcontrol/pics/cr64-app-fonts.png b/kcontrol/pics/cr64-app-fonts.png new file mode 100644 index 000000000..6fdab333d Binary files /dev/null and b/kcontrol/pics/cr64-app-fonts.png differ diff --git a/kcontrol/pics/cr64-app-help_index.png b/kcontrol/pics/cr64-app-help_index.png new file mode 100644 index 000000000..56be1b7b0 Binary files /dev/null and b/kcontrol/pics/cr64-app-help_index.png differ diff --git a/kcontrol/pics/cr64-app-hwinfo.png b/kcontrol/pics/cr64-app-hwinfo.png new file mode 100644 index 000000000..bb3ac3019 Binary files /dev/null and b/kcontrol/pics/cr64-app-hwinfo.png differ diff --git a/kcontrol/pics/cr64-app-icons.png b/kcontrol/pics/cr64-app-icons.png new file mode 100644 index 000000000..3891bc74d Binary files /dev/null and b/kcontrol/pics/cr64-app-icons.png differ diff --git a/kcontrol/pics/cr64-app-ieee1394.png b/kcontrol/pics/cr64-app-ieee1394.png new file mode 100644 index 000000000..eb8d540b2 Binary files /dev/null and b/kcontrol/pics/cr64-app-ieee1394.png differ diff --git a/kcontrol/pics/cr64-app-kcmdevices.png b/kcontrol/pics/cr64-app-kcmdevices.png new file mode 100644 index 000000000..396b3d3ba Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmdevices.png differ diff --git a/kcontrol/pics/cr64-app-kcmdf.png b/kcontrol/pics/cr64-app-kcmdf.png new file mode 100644 index 000000000..58378b148 Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmdf.png differ diff --git a/kcontrol/pics/cr64-app-kcmkwm.png b/kcontrol/pics/cr64-app-kcmkwm.png new file mode 100644 index 000000000..0fef5f1d0 Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmkwm.png differ diff --git a/kcontrol/pics/cr64-app-kcmmemory.png b/kcontrol/pics/cr64-app-kcmmemory.png new file mode 100644 index 000000000..61f7cc517 Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmmemory.png differ diff --git a/kcontrol/pics/cr64-app-kcmpartitions.png b/kcontrol/pics/cr64-app-kcmpartitions.png new file mode 100644 index 000000000..1bcce6d00 Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmpartitions.png differ diff --git a/kcontrol/pics/cr64-app-kcmpci.png b/kcontrol/pics/cr64-app-kcmpci.png new file mode 100644 index 000000000..6fae64367 Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmpci.png differ diff --git a/kcontrol/pics/cr64-app-kcmx.png b/kcontrol/pics/cr64-app-kcmx.png new file mode 100644 index 000000000..64e33b953 Binary files /dev/null and b/kcontrol/pics/cr64-app-kcmx.png differ diff --git a/kcontrol/pics/cr64-app-kdmconfig.png b/kcontrol/pics/cr64-app-kdmconfig.png new file mode 100644 index 000000000..57c5726d0 Binary files /dev/null and b/kcontrol/pics/cr64-app-kdmconfig.png differ diff --git a/kcontrol/pics/cr64-app-key_bindings.png b/kcontrol/pics/cr64-app-key_bindings.png new file mode 100644 index 000000000..ca5090329 Binary files /dev/null and b/kcontrol/pics/cr64-app-key_bindings.png differ diff --git a/kcontrol/pics/cr64-app-knotify.png b/kcontrol/pics/cr64-app-knotify.png new file mode 100644 index 000000000..3a4d918ae Binary files /dev/null and b/kcontrol/pics/cr64-app-knotify.png differ diff --git a/kcontrol/pics/cr64-app-kscreensaver.png b/kcontrol/pics/cr64-app-kscreensaver.png new file mode 100644 index 000000000..69c8214fb Binary files /dev/null and b/kcontrol/pics/cr64-app-kscreensaver.png differ diff --git a/kcontrol/pics/cr64-app-kthememgr.png b/kcontrol/pics/cr64-app-kthememgr.png new file mode 100644 index 000000000..784b5aef3 Binary files /dev/null and b/kcontrol/pics/cr64-app-kthememgr.png differ diff --git a/kcontrol/pics/cr64-app-locale.png b/kcontrol/pics/cr64-app-locale.png new file mode 100644 index 000000000..042c0d345 Binary files /dev/null and b/kcontrol/pics/cr64-app-locale.png differ diff --git a/kcontrol/pics/cr64-app-looknfeel.png b/kcontrol/pics/cr64-app-looknfeel.png new file mode 100644 index 000000000..b73346e44 Binary files /dev/null and b/kcontrol/pics/cr64-app-looknfeel.png differ diff --git a/kcontrol/pics/cr64-app-multimedia.png b/kcontrol/pics/cr64-app-multimedia.png new file mode 100644 index 000000000..406aad0f1 Binary files /dev/null and b/kcontrol/pics/cr64-app-multimedia.png differ diff --git a/kcontrol/pics/cr64-app-personal.png b/kcontrol/pics/cr64-app-personal.png new file mode 100644 index 000000000..136dcfe11 Binary files /dev/null and b/kcontrol/pics/cr64-app-personal.png differ diff --git a/kcontrol/pics/cr64-app-proxy.png b/kcontrol/pics/cr64-app-proxy.png new file mode 100644 index 000000000..9b5f5b6a8 Binary files /dev/null and b/kcontrol/pics/cr64-app-proxy.png differ diff --git a/kcontrol/pics/cr64-app-samba.png b/kcontrol/pics/cr64-app-samba.png new file mode 100644 index 000000000..2bade600c Binary files /dev/null and b/kcontrol/pics/cr64-app-samba.png differ diff --git a/kcontrol/pics/cr64-app-style.png b/kcontrol/pics/cr64-app-style.png new file mode 100644 index 000000000..d3f70b0cb Binary files /dev/null and b/kcontrol/pics/cr64-app-style.png differ diff --git a/kcontrol/pics/cr64-app-stylesheet.png b/kcontrol/pics/cr64-app-stylesheet.png new file mode 100644 index 000000000..ac393bc3e Binary files /dev/null and b/kcontrol/pics/cr64-app-stylesheet.png differ diff --git a/kcontrol/pics/cr64-device-laptop.png b/kcontrol/pics/cr64-device-laptop.png new file mode 100644 index 000000000..6084660cc Binary files /dev/null and b/kcontrol/pics/cr64-device-laptop.png differ diff --git a/kcontrol/pics/crsc-app-access.svgz b/kcontrol/pics/crsc-app-access.svgz new file mode 100644 index 000000000..7aafb4143 Binary files /dev/null and b/kcontrol/pics/crsc-app-access.svgz differ diff --git a/kcontrol/pics/crsc-app-arts.svgz b/kcontrol/pics/crsc-app-arts.svgz new file mode 100644 index 000000000..8263c19da Binary files /dev/null and b/kcontrol/pics/crsc-app-arts.svgz differ diff --git a/kcontrol/pics/crsc-app-background.svgz b/kcontrol/pics/crsc-app-background.svgz new file mode 100644 index 000000000..2a757c585 Binary files /dev/null and b/kcontrol/pics/crsc-app-background.svgz differ diff --git a/kcontrol/pics/crsc-app-bell.svgz b/kcontrol/pics/crsc-app-bell.svgz new file mode 100644 index 000000000..dc331c0a7 Binary files /dev/null and b/kcontrol/pics/crsc-app-bell.svgz differ diff --git a/kcontrol/pics/crsc-app-cache.svgz b/kcontrol/pics/crsc-app-cache.svgz new file mode 100644 index 000000000..4ec2d9b06 Binary files /dev/null and b/kcontrol/pics/crsc-app-cache.svgz differ diff --git a/kcontrol/pics/crsc-app-colors.svgz b/kcontrol/pics/crsc-app-colors.svgz new file mode 100644 index 000000000..322036ae5 Binary files /dev/null and b/kcontrol/pics/crsc-app-colors.svgz differ diff --git a/kcontrol/pics/crsc-app-date.svgz b/kcontrol/pics/crsc-app-date.svgz new file mode 100644 index 000000000..c82b7efa6 Binary files /dev/null and b/kcontrol/pics/crsc-app-date.svgz differ diff --git a/kcontrol/pics/crsc-app-energy.svgz b/kcontrol/pics/crsc-app-energy.svgz new file mode 100644 index 000000000..049021cb2 Binary files /dev/null and b/kcontrol/pics/crsc-app-energy.svgz differ diff --git a/kcontrol/pics/crsc-app-filetypes.svgz b/kcontrol/pics/crsc-app-filetypes.svgz new file mode 100644 index 000000000..0b696b3b8 Binary files /dev/null and b/kcontrol/pics/crsc-app-filetypes.svgz differ diff --git a/kcontrol/pics/crsc-app-fonts.svgz b/kcontrol/pics/crsc-app-fonts.svgz new file mode 100644 index 000000000..763c75685 Binary files /dev/null and b/kcontrol/pics/crsc-app-fonts.svgz differ diff --git a/kcontrol/pics/crsc-app-hwinfo.svgz b/kcontrol/pics/crsc-app-hwinfo.svgz new file mode 100644 index 000000000..5054c4182 Binary files /dev/null and b/kcontrol/pics/crsc-app-hwinfo.svgz differ diff --git a/kcontrol/pics/crsc-app-ieee1394.svgz b/kcontrol/pics/crsc-app-ieee1394.svgz new file mode 100644 index 000000000..4f9031e0a Binary files /dev/null and b/kcontrol/pics/crsc-app-ieee1394.svgz differ diff --git a/kcontrol/pics/crsc-app-kcmdevices.svgz b/kcontrol/pics/crsc-app-kcmdevices.svgz new file mode 100644 index 000000000..973f200d4 Binary files /dev/null and b/kcontrol/pics/crsc-app-kcmdevices.svgz differ diff --git a/kcontrol/pics/crsc-app-kcmkwm.svgz b/kcontrol/pics/crsc-app-kcmkwm.svgz new file mode 100644 index 000000000..f9993b78c Binary files /dev/null and b/kcontrol/pics/crsc-app-kcmkwm.svgz differ diff --git a/kcontrol/pics/crsc-app-kcmx.svgz b/kcontrol/pics/crsc-app-kcmx.svgz new file mode 100644 index 000000000..e255c0d54 Binary files /dev/null and b/kcontrol/pics/crsc-app-kcmx.svgz differ diff --git a/kcontrol/pics/crsc-app-locale.svgz b/kcontrol/pics/crsc-app-locale.svgz new file mode 100644 index 000000000..1b6708853 Binary files /dev/null and b/kcontrol/pics/crsc-app-locale.svgz differ diff --git a/kcontrol/pics/crsc-app-samba.svgz b/kcontrol/pics/crsc-app-samba.svgz new file mode 100644 index 000000000..0dd9383b8 Binary files /dev/null and b/kcontrol/pics/crsc-app-samba.svgz differ diff --git a/kcontrol/pics/crsc-app-stylesheet.svgz b/kcontrol/pics/crsc-app-stylesheet.svgz new file mode 100644 index 000000000..44354465d Binary files /dev/null and b/kcontrol/pics/crsc-app-stylesheet.svgz differ diff --git a/kcontrol/pics/crsc-device-laptop.svgz b/kcontrol/pics/crsc-device-laptop.svgz new file mode 100644 index 000000000..1cd92961c Binary files /dev/null and b/kcontrol/pics/crsc-device-laptop.svgz differ diff --git a/kcontrol/privacy/Makefile.am b/kcontrol/privacy/Makefile.am new file mode 100644 index 000000000..82ac0d2a6 --- /dev/null +++ b/kcontrol/privacy/Makefile.am @@ -0,0 +1,16 @@ +AM_CPPFLAGS = $(all_includes) +kde_module_LTLIBRARIES = kcm_privacy.la + +kcm_privacy_la_SOURCES = privacy.cpp kprivacysettings.ui kcmprivacydialog.ui kprivacymanager.cpp + +kcm_privacy_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined +kcm_privacy_la_LIBADD = $(LIB_KDEUI) -lkio + +METASOURCES = AUTO + +noinst_HEADERS = privacy.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/privacy.pot + +xdg_apps_DATA = privacy.desktop diff --git a/kcontrol/privacy/kcmprivacydialog.ui b/kcontrol/privacy/kcmprivacydialog.ui new file mode 100644 index 000000000..df79e2ec1 --- /dev/null +++ b/kcontrol/privacy/kcmprivacydialog.ui @@ -0,0 +1,201 @@ + +KCMPrivacyDialog +Ralf Hoelzer + + + KCMPrivacyDialog + + + + 0 + 0 + 452 + 226 + + + + + 7 + 7 + 0 + 0 + + + + + 0 + 0 + + + + + 400 + 550 + + + + Privacy + + + + unnamed + + + 0 + + + + splitter1 + + + Vertical + + + + privacyListView + + + false + + + AllColumns + + + false + + + false + + + + + statusTextEdit + + + + 1 + 7 + 0 + 0 + + + + + 0 + 50 + + + + + 32767 + 200 + + + + Manual + + + + + + true + + + + + + layout1 + + + + unnamed + + + + selectAllButton + + + + 80 + 0 + + + + + 32767 + 32767 + + + + Select All + + + + + selectNoneButton + + + + 80 + 0 + + + + + 32767 + 32767 + + + + Select None + + + + + spacer1 + + + Horizontal + + + Maximum + + + + 80 + 20 + + + + + + cleanupButton + + + + 1 + 0 + 0 + 0 + + + + + 32767 + 32767 + + + + Clean Up + + + + + + + + klistview.h + ktextedit.h + + + diff --git a/kcontrol/privacy/kprivacymanager.cpp b/kcontrol/privacy/kprivacymanager.cpp new file mode 100644 index 000000000..cad01a169 --- /dev/null +++ b/kcontrol/privacy/kprivacymanager.cpp @@ -0,0 +1,169 @@ +/** + * kprivacymanager.cpp + * + * Copyright (c) 2003 Ralf Hoelzer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kprivacymanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +KPrivacyManager::KPrivacyManager() +{ + if (!kapp->dcopClient()->isAttached()) + kapp->dcopClient()->attach(); + + m_error = false; +} + + +KPrivacyManager::~KPrivacyManager() +{ +} + +bool KPrivacyManager::clearThumbnails() +{ + // http://freedesktop.org/Standards/Home + // http://triq.net/~jens/thumbnail-spec/index.html + + QDir thumbnailDir( QDir::homeDirPath() + "/.thumbnails/normal"); + thumbnailDir.setFilter( QDir::Files ); + QStringList entries = thumbnailDir.entryList(); + for( QStringList::Iterator it = entries.begin() ; it != entries.end() ; ++it) + if(!thumbnailDir.remove(*it)) m_error = true; + if(m_error) return m_error; + + thumbnailDir.setPath(QDir::homeDirPath() + "/.thumbnails/large"); + entries = thumbnailDir.entryList(); + for( QStringList::Iterator it = entries.begin() ; it != entries.end() ; ++it) + if(!thumbnailDir.remove(*it)) m_error = true; + if(m_error) return m_error; + + thumbnailDir.setPath(QDir::homeDirPath() + "/.thumbnails/fail"); + entries = thumbnailDir.entryList(); + for( QStringList::Iterator it = entries.begin() ; it != entries.end() ; ++it) + if(!thumbnailDir.remove(*it)) m_error = true; + + return m_error; +} + +bool KPrivacyManager::clearRunCommandHistory() const +{ + return kapp->dcopClient()->send( "kdesktop", "KDesktopIface", "clearCommandHistory()", "" ); +} + +bool KPrivacyManager::clearAllCookies() const +{ + return kapp->dcopClient()->send( "kded", "kcookiejar", "deleteAllCookies()", "" ); +} + +bool KPrivacyManager::clearSavedClipboardContents() +{ + if(!isApplicationRegistered("klipper")) + { + KConfig *c = new KConfig("klipperrc", false, false); + + { + KConfigGroupSaver saver(c, "General"); + c->deleteEntry("ClipboardData"); + c->sync(); + } + delete c; + return true; + } + + return kapp->dcopClient()->send( "klipper", "klipper", "clearClipboardHistory()", "" ); +} + +bool KPrivacyManager::clearFormCompletion() const +{ + QFile completionFile(locateLocal("data", "khtml/formcompletions")); + + return completionFile.remove(); +} + +bool KPrivacyManager::clearWebCache() const +{ + KProcess process; + process << "kio_http_cache_cleaner" << "--clear-all"; + return process.start(KProcess::DontCare); +} + +bool KPrivacyManager::clearRecentDocuments() const +{ + KRecentDocument::clear(); + return KRecentDocument::recentDocuments().isEmpty(); +} + +bool KPrivacyManager::clearQuickStartMenu() const +{ + return kapp->dcopClient()->send( "kicker", "kicker", "clearQuickStartMenu()", "" ); +} + +bool KPrivacyManager::clearWebHistory() +{ + QStringList args("--preload"); + + // preload Konqueror if it is not running + if(!isApplicationRegistered("konqueror")) + { + kdDebug() << "couldn't find Konqueror instance, preloading." << endl; + kapp->kdeinitExec("konqueror", args, 0,0); + } + + return kapp->dcopClient()->send( "konqueror*", "KonqHistoryManager", + "notifyClear(QCString)", "" ); +} + +bool KPrivacyManager::clearFavIcons() +{ + QDir favIconDir(KGlobal::dirs()->saveLocation( "cache", "favicons/" )); + favIconDir.setFilter( QDir::Files ); + + QStringList entries = favIconDir.entryList(); + + // erase all files in favicon directory + for( QStringList::Iterator it = entries.begin() ; it != entries.end() ; ++it) + if(!favIconDir.remove(*it)) m_error = true; + return m_error; +} + + +bool KPrivacyManager::isApplicationRegistered(const QString &appName) +{ + + QCStringList regApps = kapp->dcopClient()->registeredApplications(); + + for ( QCStringList::Iterator it = regApps.begin(); it != regApps.end(); ++it ) + if((*it).find(appName.latin1()) != -1) return true; + + return false; +} + +#include "kprivacymanager.moc" diff --git a/kcontrol/privacy/kprivacymanager.h b/kcontrol/privacy/kprivacymanager.h new file mode 100644 index 000000000..114618577 --- /dev/null +++ b/kcontrol/privacy/kprivacymanager.h @@ -0,0 +1,55 @@ +/** + * kprivacymanager.h + * + * Copyright (c) 2003 Ralf Hoelzer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KPRIVACYMANAGER_H +#define KPRIVACYMANAGER_H + +#include + +/** +@author Ralf Hoelzer +*/ + +class KPrivacyManager : public QObject +{ +Q_OBJECT +public: + KPrivacyManager(); + + ~KPrivacyManager(); + + bool clearAllCookies() const; + bool clearSavedClipboardContents(); + bool clearThumbnails(); + bool clearRunCommandHistory() const; + bool clearFormCompletion() const; + bool clearWebHistory(); + bool clearWebCache() const; + bool clearQuickStartMenu() const; + bool clearRecentDocuments() const; + bool clearFavIcons(); + +private: + bool isApplicationRegistered(const QString &appName); + bool m_error; + +}; + +#endif diff --git a/kcontrol/privacy/kprivacysettings.ui b/kcontrol/privacy/kprivacysettings.ui new file mode 100644 index 000000000..93afe5dff --- /dev/null +++ b/kcontrol/privacy/kprivacysettings.ui @@ -0,0 +1,308 @@ + +KPrivacySettings +KDE Privacy Settings Widget +Licensed under the terms of the LGPL. +Derived from AT&T's Privacy Bird settings panel screenshot originally. + +George Staikos <staikos@kde.org> + + + KPrivacySettings + + + + 0 + 0 + 905 + 724 + + + + Privacy Settings + + + + unnamed + + + + line1 + + + HLine + + + Sunken + + + Horizontal + + + + + textLabel1 + + + Network privacy level: + + + _privacyLevel + + + + + + Low + + + + + Medium + + + + + High + + + + + Custom + + + + _privacyLevel + + + + 7 + 0 + 0 + 0 + + + + + + buttonGroup1_2 + + + Financial Information + + + + unnamed + + + + textLabel2 + + + Warn me when I visit a site that uses my financial or purchase information: + + + + + _warnFinancialMarketeer + + + For marketing or advertising purposes + + + + + _warnFinancialSpammer + + + To share with other companies + + + + + + + buttonGroup1 + + + Health Information + + + + unnamed + + + + textLabel2_2 + + + Warn me when I visit a site that uses my health or medical information: + + + + + _warnHealthMarketeer + + + For marketing or advertising purposes + + + + + _warnHealthSpammer + + + To share with other companies + + + + + + + buttonGroup1_2_2 + + + Demographics + + + + unnamed + + + + textLabel2_3 + + + Warn me when I visit a site that uses my non-personally identifiable information: + + + + + _warnDemographicsBigBrother + + + To determine my interests, habits or general behavior + + + + + _warnDemographicsSpammer + + + To share with other companies + + + + + + + _warnSpammers + + + Warn me when I visit a site that shares my personal information with other companies + + + + + _warnShady + + + Warn me when I visit a site that does not let me know what information they have about me + + + + + buttonGroup4 + + + Personal Information + + + + unnamed + + + + textLabel2_2_2 + + + Warn me when I visit a site that may contact me about other products or services: + + + + + textLabel2_2_2_2 + + + Warn me when I visit a site that may use my personal information to: + + + + + _warnPersonalHabits + + + Determine my habits, interests or general behavior + + + + + layout1 + + + + unnamed + + + + _warnPersonalTelephone + + + Via telephone + + + + + _warnPersonalMail + + + Via mail + + + + + + + layout3 + + + + unnamed + + + + _warnPersonalEmail + + + Via email + + + + + _warnPersonalBigBrother + + + And do not allow me to remove my contact information + + + + + + + + + + kdialog.h + + + + diff --git a/kcontrol/privacy/privacy.cpp b/kcontrol/privacy/privacy.cpp new file mode 100644 index 000000000..c0287ceba --- /dev/null +++ b/kcontrol/privacy/privacy.cpp @@ -0,0 +1,319 @@ +/** + * privacy.cpp + * + * Copyright (c) 2003 Ralf Hoelzer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "privacy.h" + +Privacy::Privacy(QWidget *parent, const char *name) + : KCModule(parent, name) +{ + setQuickHelp( i18n("The privacy module allows a user to erase traces which KDE leaves on " + "the system, such as command histories or browser caches.")); + + setButtons( KCModule::Default|KCModule::Apply|KCModule::Help ); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcm_privacy"), I18N_NOOP("KDE Privacy Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2003 Ralf Hoelzer")); + + about->addAuthor("Ralf Hoelzer", 0, "ralf@well.com"); + about->addAuthor("Benjamin Meyer", I18N_NOOP("Thumbnail Cache"), "ben+kdeprivacy@meyerhome.net"); + setAboutData( about ); + + m_privacymanager = new KPrivacyManager(); + + QBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + // add this once the P3P stuff is finished + //QTabWidget *privacyTabs = new QTabWidget(this, "privacytabs"); + + cleaningDialog = new KCMPrivacyDialog(this); + //p3pSettings = new KPrivacySettings(this); + + top->addWidget(cleaningDialog); + + //top->addWidget(privacyTabs); + //privacyTabs->addTab(cleaningDialog, i18n("Cleanup")); + //privacyTabs->addTab(p3pSettings, i18n("Privacy Settings")); + + + KListView *sw = cleaningDialog->privacyListView; + + sw->addColumn(i18n("Privacy Settings")); + sw->addColumn(i18n("Description")); + + sw->setRootIsDecorated(true); + sw->setTooltipColumn(1); + sw->setColumnWidthMode(0, QListView::Maximum); + + + + generalCLI = new KListViewItem(sw, i18n("General") ); + webbrowsingCLI = new KListViewItem(sw, i18n("Web Browsing") ); + + generalCLI->setOpen(true); + webbrowsingCLI->setOpen(true); + + clearThumbnails = new QCheckListItem(generalCLI, + i18n("Thumbnail Cache"),QCheckListItem::CheckBox); + clearRunCommandHistory = new QCheckListItem(generalCLI, + i18n("Run Command History"),QCheckListItem::CheckBox); + clearAllCookies = new QCheckListItem(webbrowsingCLI, + i18n("Cookies"),QCheckListItem::CheckBox); + clearSavedClipboardContents = new QCheckListItem(generalCLI, + i18n("Saved Clipboard Contents"),QCheckListItem::CheckBox); + clearWebHistory = new QCheckListItem(webbrowsingCLI, + i18n("Web History"),QCheckListItem::CheckBox); + clearWebCache = new QCheckListItem(webbrowsingCLI, + i18n("Web Cache"),QCheckListItem::CheckBox); + clearFormCompletion = new QCheckListItem(webbrowsingCLI, + i18n("Form Completion Entries"),QCheckListItem::CheckBox); + clearRecentDocuments = new QCheckListItem(generalCLI, + i18n("Recent Documents"),QCheckListItem::CheckBox); + clearQuickStartMenu = new QCheckListItem(generalCLI, + i18n("Quick Start Menu"),QCheckListItem::CheckBox); + clearFavIcons = new QCheckListItem(webbrowsingCLI, + i18n("Favorite Icons"),QCheckListItem::CheckBox); + + QWhatsThis::add(sw, i18n("Check all cleanup actions you would like to perform. These will be executed by pressing the button below")); + QWhatsThis::add(cleaningDialog->cleanupButton, i18n("Immediately performs the cleanup actions selected above")); + + clearThumbnails->setText(1, i18n("Clears all cached thumbnails")); + clearRunCommandHistory->setText(1, i18n("Clears the history of commands run through the Run Command tool on the desktop")); + clearAllCookies->setText(1, i18n("Clears all stored cookies set by websites")); + clearWebHistory->setText(1, i18n("Clears the history of visited websites")); + clearSavedClipboardContents->setText(1, i18n("Clears the clipboard contents stored by Klipper")); + clearWebCache->setText(1, i18n("Clears the temporary cache of websites visited")); + clearFormCompletion->setText(1, i18n("Clears values which were entered into forms on websites")); + clearRecentDocuments->setText(1, i18n("Clears the list of recently used documents from the KDE applications menu")); + clearQuickStartMenu->setText(1, i18n("Clears the entries from the list of recently started applications")); + clearFavIcons->setText(1, i18n("Clears the FavIcons cached from visited websites")); + + connect(sw, SIGNAL(selectionChanged()), SLOT(changed())); + + // store all entries in a list for easy access later on + checklist.append(clearThumbnails); + checklist.append(clearRunCommandHistory); + checklist.append(clearAllCookies); + checklist.append(clearSavedClipboardContents); + checklist.append(clearWebHistory); + checklist.append(clearWebCache); + checklist.append(clearFormCompletion); + checklist.append(clearRecentDocuments); + checklist.append(clearQuickStartMenu); + checklist.append(clearFavIcons); + + connect(cleaningDialog->cleanupButton, SIGNAL(clicked()), SLOT(cleanup())); + connect(cleaningDialog->selectAllButton, SIGNAL(clicked()), SLOT(selectAll())); + connect(cleaningDialog->selectNoneButton, SIGNAL(clicked()), SLOT(selectNone())); + + load(); +} + + +Privacy::~Privacy() +{ + delete m_privacymanager; +} + +void Privacy::load() +{ + load( false ); +} + +void Privacy::load(bool useDefaults) +{ + KConfig *c = new KConfig("kprivacyrc", false, false); + + c->setReadDefaults( useDefaults ); + + // get general privacy settings + { + KConfigGroupSaver saver(c, "Cleaning"); + + clearThumbnails->setOn(c->readBoolEntry("ClearThumbnails", true)); + clearRunCommandHistory->setOn(c->readBoolEntry("ClearRunCommandHistory", true)); + clearAllCookies->setOn(c->readBoolEntry("ClearAllCookies", true)); + clearSavedClipboardContents->setOn(c->readBoolEntry("ClearSavedClipboardContents", true)); + clearWebHistory->setOn(c->readBoolEntry("ClearWebHistory", true)); + clearWebCache->setOn(c->readBoolEntry("ClearWebCache", true)); + clearFormCompletion->setOn(c->readBoolEntry("ClearFormCompletion", true)); + clearRecentDocuments->setOn(c->readBoolEntry("ClearRecentDocuments", true)); + clearQuickStartMenu->setOn(c->readBoolEntry("ClearQuickStartMenu", true)); + clearFavIcons->setOn(c->readBoolEntry("ClearFavIcons", true)); + } + + { + KConfigGroupSaver saver(c, "P3P"); + + // TODO: add P3P settings here + } + + delete c; + emit changed( useDefaults ); +} + + +void Privacy::defaults() +{ + load( true ); +} + + +void Privacy::save() +{ + KConfig *c = new KConfig("kprivacyrc", false, false); + { + KConfigGroupSaver saver(c, "Cleaning"); + + c->writeEntry("ClearThumbnails", clearThumbnails->isOn()); + c->writeEntry("ClearRunCommandHistory", clearRunCommandHistory->isOn()); + c->writeEntry("ClearAllCookies", clearAllCookies->isOn()); + c->writeEntry("ClearSavedClipboardContents", clearSavedClipboardContents->isOn()); + c->writeEntry("ClearWebCache", clearWebCache->isOn()); + c->writeEntry("ClearWebHistory", clearWebHistory->isOn()); + c->writeEntry("ClearFormCompletion", clearFormCompletion->isOn()); + c->writeEntry("ClearRecentDocuments", clearRecentDocuments->isOn()); + c->writeEntry("ClearQuickStartMenu", clearQuickStartMenu->isOn()); + c->writeEntry("ClearFavIcons", clearFavIcons->isOn()); + } + + { + KConfigGroupSaver saver(c, "P3P"); + + // TODO: add settings for P3P + } + + c->sync(); + + delete c; + emit changed(false); + +} + +void Privacy::selectAll() +{ + QCheckListItem *item; + + for ( item = checklist.first(); item; item = checklist.next() ) + item->setOn(true); + + emit changed(true); +} + +void Privacy::selectNone() +{ + QCheckListItem *item; + + for ( item = checklist.first(); item; item = checklist.next() ) + item->setOn(false); + + emit changed(true); +} + + +void Privacy::cleanup() +{ + if (KMessageBox::warningContinueCancel(this, i18n("You are deleting data that is potentially valuable to you. Are you sure?")) != KMessageBox::Continue) return; + + cleaningDialog->statusTextEdit->clear(); + cleaningDialog->statusTextEdit->setText(i18n("Starting cleanup...")); + + QCheckListItem *item; + bool error = false; + + for ( item = checklist.first(); item; item = checklist.next() ) + { + if(item->isOn()) + { + QString statusText = i18n("Clearing %1...").arg(item->text()); + cleaningDialog->statusTextEdit->append(statusText); + + if(item == clearThumbnails) + error = m_privacymanager->clearThumbnails(); + + if(item == clearRunCommandHistory) + error = !m_privacymanager->clearRunCommandHistory(); + + if(item == clearSavedClipboardContents) + error = !m_privacymanager->clearSavedClipboardContents(); + + if(item == clearAllCookies) + error = !m_privacymanager->clearAllCookies(); + + if(item == clearFormCompletion) + error = !m_privacymanager->clearFormCompletion(); + + if(item == clearWebCache) + error = !m_privacymanager->clearWebCache(); + + if(item == clearWebHistory) + error = !m_privacymanager->clearWebHistory(); + + if(item == clearRecentDocuments) + error = !m_privacymanager->clearRecentDocuments(); + + if(item == clearQuickStartMenu) + error = !m_privacymanager->clearQuickStartMenu(); + + if(item == clearFavIcons) + error = m_privacymanager->clearFavIcons(); + + if(error) + { + QString errorText = i18n("Clearing of %1 failed").arg(item->text()); + cleaningDialog->statusTextEdit->append(errorText); + } + } + } + + + cleaningDialog->statusTextEdit->append(i18n("Clean up finished.")); + +} + +extern "C" +{ + + KDE_EXPORT KCModule *create_privacy(QWidget *parent, const char * /*name*/) + { + KGlobal::locale()->insertCatalogue("privacy"); + return new Privacy(parent, "Privacy"); + } +} + +#include "privacy.moc" diff --git a/kcontrol/privacy/privacy.desktop b/kcontrol/privacy/privacy.desktop new file mode 100644 index 000000000..f47b2dd0e --- /dev/null +++ b/kcontrol/privacy/privacy.desktop @@ -0,0 +1,204 @@ +[Desktop Entry] +Icon=trashcan_empty +Comment=Privacy - a kcontrol module to clean unwanted traces the user leaves on the system +Comment[af]=Privaatheid - 'n Beheer module wat voetspore wat deur gebruikers op die stelsel gelaat word skoon maak +Comment[ar]=الخصوصية - وحدة kcontrol لتنظيف الآثار غير المرغوب بها التي يتركها المستخدم على النظام +Comment[be]=Модуль захавання прыватнасці. Выдаляе файлы, што застаюцца пасля працы карыстальніка на кампутары +Comment[bg]=Настройване заличаването на личната информация +Comment[bn]=প্রাইভেসি - একটি কে-কন্ট্রোল মডিউল যার কাজব্যবহারের পর অবশিষ্ট চিহ্নগুলি পরিশোধন করা +Comment[bs]=Privatnost - KControl modul koji čisti neželjene tragove koje korisnik ostavlja na sistemu +Comment[ca]=Privacitat - un mòdul de kcontrol per a netejar les traces no desitjades que va deixant un usuari pel sistema +Comment[cs]=Soukromí - modul pro čištění citlivých údajů +Comment[csb]=Priwatny nastôw - mòduł, chtëren zezwôlô remac niepòrządané szlachë jaczé òstałë pò brëkòwnikù w systemie +Comment[cy]=Preifatrwydd - modiwl krheoli i glanhau olion nas dymunir y mae'r defnyddiwr yn eu gadael ar y cysawd +Comment[da]=Privacy - et kcontrol-modul der kan rense systemet for uønskede spor som brugeren efterlader. +Comment[de]=Privatsphäre: Ein Kontrollmodul, das unerwünschte Spuren von Benutzern auf dem System beseitigt +Comment[el]=Προσωπικό απόρρητο - ένα άρθρωμα του kcontrol για τον καθαρισμό των ιχνών που ο χρήστης αφήνει στο σύστημα +Comment[eo]=Privataj aferoj - modulo de la KDEa administrilo, kiu forigas uzantajn spurojn +Comment[es]=Privacy - un módulo de kcontrol para limpiar pistas que el usuario deja en el sistema sin querer +Comment[et]=Privaatsus on juhtimismoodul, mis aitab kõrvaldada süsteemist kasutaja jäetud jäljed +Comment[eu]=Pribatutasuna - Erabiltzaileek sisteman zehar nahi izan gabe uzten dituzten aztarnak garbitzen dituen kcontrol modulua +Comment[fa]=محرمانگی - یک پیمانه kcontrol برای پاک کردن ردیابیهای ناخواسته، که کاربر در سیستم به جا می‌گذارد. +Comment[fi]=Yksityisyys - Ohjauskeskuksen moduuli ei-toivottujen jälkien siivoamiseen järjestelmästä +Comment[fr]=Confidentialité - Un module externe du Centre de configuration pour effacer les traces indésirables qu'un utilisateur laisse sur le système +Comment[fy]=Privacy - in Konfiguraasjemodule wêrmei jo ûnwenste efterbluiwende sporen fan brûkers wiskje kinne +Comment[gl]=Intimidade - un módulo de kcontrol para limpar os rastos non desexados que o usuario deixa no sistema +Comment[he]=פרטיות - מודול ב־kcontrol המשתמש למחיקת עקבות לא רצויים שמשתמש משאיר אחריו במערכת +Comment[hi]=गोपनीयता- उपयोक्ता द्वारा तंत्र में छोड़े गए अवांछित पदचिह्नों को साफ करने का एक के-कंट्रोल मॉड्यूल +Comment[hr]=Privatnost - Modul kcontrol za brisanje neželjenih tragova koje su korisnici ostavili na sustavu +Comment[hu]=A rendszerben létrejött, privát adatok biztonságos törlése +Comment[is]=Einkamál - stjórneining fyrir kcontrol til að hreinsa burt upplýsingar og gögn sem ekki er æskilegt að verði eftir á vélinni +Comment[it]=Privacy - un modulo di controllo per cancellare le tracce indesiderate che l'utente lascia nel sistema +Comment[ja]=システムの利用を終えた後の不要な利用形跡を削除 +Comment[ka]=კონფიდენციალურობა - მოდული kcontrol, წმენდს მომხმარებლის არასასურველ ნაკვალევს სისტემაში +Comment[kk]=Зиянды пайдаланушының қалдырған іздерді өшіретін kcontrol модулі +Comment[km]=Privacy - ម៉ូឌុល kcontrol មួយ​ដែល​ប្រើ​ដើម្បី​សម្អាត​ដាន ដែល​អ្នក​ប្រើ​បន្សល់​ទុក​លើ​ប្រព័ន្ធ +Comment[lt]=Privatumas - kcontrol modulis, padedantis išvalyti nepageidaujamus naudotojo veiklos sistemoje pėdsakus +Comment[lv]=Privātums - kontrolcentra modulis, kas ļauj iztīrīt nevēlamas pēdas, ko atstāj lietotājs sistēmā +Comment[mk]=Приватност - kcontrol модул кој ги чисти несаканите траги кои ги остава корисникот на системот +Comment[mn]=Privacy - систем дэх хэрэглэгчийн хэрэглэхгүй охрисон хог цэвэрлэгчийн хяналтын модул +Comment[mt]=Privatezza - modulu ta' kcontrol biex tnaddaf traċċi li l-user jista' jħalli fuq is-sistema +Comment[nb]=Personvern – en kcontrol-modul som fjerner uønskede spor som brukeren etterlater i systemet +Comment[nds]=Privaatrebeet - Mit dit Moduul kannst Du de Bruuksporen vun't Systeem wegmaken +Comment[ne]=गोप्यता - प्रयोगकर्ताले प्रणालीमा छोडेका नचाहेका पदचिन्ह हटाउन के नियन्त्रण मोड्युल +Comment[nl]=Privacy - een configuratiemodule waarmee u ongewenste sporen die gebruikers achterlaten kunt wissen. +Comment[nn]=Personvern – ein kontrollmodul som fjernar uønskte spor som brukeren etterlèt seg i systemet +Comment[pa]=ਰਹੱਸ - ਇੱਕ ਕੰਟਰੋਲ ਮੈਡੀਊਲ ਹੈ, ਜੋ ਕਿ ਸਿਸਟਮ 'ਤੇ ਉਪਭੋਗੀ ਦੀ ਨਾ-ਲੋੜੀਦੀ ਪਛਾਣ ਨੂੰ ਸਮਾਪਤ ਕਰਦਾ ਹੈ। +Comment[pl]=Ustawienia prywatności - moduł, który pozwala usunąć niepożądane ślady pozostawiane przez użytkownika w systemie +Comment[pt]=Privacidade - um módulo do kcontrol para limpar os registos indesejáveis que o utilizador deixa no sistema +Comment[pt_BR]=Privacidade - um módulo de controle do KDE para limpar traços não-desejados do usuário no sistema +Comment[ro]=Șterge urmele nedorite pe care le lasă un utilizator în sistem +Comment[ru]=Модуль kcontrol, очищающий нежелательные следы, оставленные пользователем в операционной системе +Comment[rw]=Umwihariko - igice k-igenzura ryo gusiba ibirango bidakenewe ukoresha yasize kuri sisitemu +Comment[se]=Iežassuodjaleapmi – kcontrolmoduvla mii váldá eret luottaid maid geavaheaddji guođđa vuogádahkii +Comment[sk]=Modul na vyčistenie nežiadúcich infomácií, ktoré používateľ necháva v systéme +Comment[sl]=Zasebnost - nadzorni modul, ki počisti nezaželene sledi, ki jih uporabnik pusti na sistemu +Comment[sr]=Приватност — kcontrol модул који уклања трагове активности корисника на систему +Comment[sr@Latn]=Privatnost — kcontrol modul koji uklanja tragove aktivnosti korisnika na sistemu +Comment[sv]=Integritet - en modul i Inställningscentralen för att ta bort oönskade spår användaren lämnat i systemet +Comment[ta]=தனிப்பட்ட- பயனீட்டாளர் விட்டுவைத்த தேவை இல்லாத சுவடுகளை kcontrol பகுதி நீக்கும். +Comment[tg]=Барномаи kcontrol барои тоза кардани дирагуниҳои номатлуб, ки бо корбарон дар система монда шудаанд +Comment[th]=ความเป็นส่วนตัว - โมดูลของศูนย์ควบคุม KDE ที่จะทำความสะอาดร่องรอยไม่พึงประสงค์ที่ผู้ใช้ปล่อยเอาไว้บนระบบ +Comment[tr]=Gizlilik - kullanıcının sistemde bıraktığı iztenilmeyen izlemeleri temizleyen kcontrol modülü +Comment[tt]=Xosusílıq – qullanuçıdan soñ sistem eçendä qalğan ezlär beterüçe kcontrol modulı +Comment[uk]=Конфіденційність - модуль керування для очищення небажаної інформації залишеної користувачем у системі +Comment[vi]=Riêng tư - trình điều khiển giúp xoá các dấu vết mà người sử dụng để lại trên hệ thống +Comment[wa]=Vikereye da vosse - on module di kcontrol po rnetyî les passêyes nén volowes ki l' uzeu leye sol sistinme +Comment[zh_CN]=隐私 - 清除用户留在系统中痕迹的 kcontrol 模块 +Comment[zh_TW]=隱私權 - 一個控制模組用來清除使用者不希望留在系統中的痕跡 +Exec=kcmshell privacy +Keywords=Privacy,privacy +Keywords[ar]=خصوصية، الخصوصية +Keywords[az]=Gizlilik,gizlilik +Keywords[be]=Бяспека,Прыватнасць,Privacy,privacy +Keywords[bg]=анонимност, лична, информация, тайна, Privacy, privacy +Keywords[br]=Buhez prevez,buhez prevez +Keywords[bs]=Privacy,privacy,privatnost +Keywords[ca]=Privacitat,privacitat +Keywords[cs]=soukromí +Keywords[csb]=Priwatnosc,prowatno,swòjno, swòjnosc,priwatny nastôw +Keywords[cy]=Preifatrwydd, preifatrwydd +Keywords[de]=privatsphäre +Keywords[el]=Προσωπικό απόρρητο,προσωπικό απόρρητο +Keywords[eo]=privataj aferoj,privataj aferoj +Keywords[es]=Privacidad,privacidad +Keywords[et]=Privaatsus,privaatsus +Keywords[eu]=Pribatutasuna,pribatutasuna +Keywords[fa]=محرمانگی، محرمانگی +Keywords[fi]=Yksityisyys, yksityisyys +Keywords[fr]=Confidentialité,confidentialité +Keywords[fy]=privacy +Keywords[ga]=Príobháideachas,príobháideachas +Keywords[gl]=Intimidade,intimidade +Keywords[he]=פרטיות,פרטיות, Privacy,privacy +Keywords[hi]=गोपनीय,गोपनीयता +Keywords[hr]=Privacy,privacy,Privatnost,privatnost,privatno +Keywords[hu]=adatvédelem,adatbiztonság +Keywords[is]=Privacy,privacy,einkamál +Keywords[it]=privacy,riservatezza +Keywords[ja]=プライバシー +Keywords[km]=ភាព​ឯកជន +Keywords[lt]=Privacy,privacy,privatumas,Privatumas +Keywords[lv]=Privāts,privātums +Keywords[mk]=Privacy,privacy,Приватност,приватност +Keywords[mt]=Privacy,privacy,privatezza +Keywords[nb]=personvern,privat +Keywords[nds]=Privaatrebeet +Keywords[ne]=गोप्यता, गोप्यता +Keywords[nl]=privacy +Keywords[nn]=personvern,privat +Keywords[pa]=Privacy,ਰਹੱਸ, ਨਿੱਜੀ +Keywords[pl]=Prywatność,prywatność,ustawienia prywatności +Keywords[pt]=privacidade +Keywords[pt_BR]=Privacidade,privacidade +Keywords[ro]=intimitate +Keywords[rw]=Umwihariko,umwihariko +Keywords[se]=Iežassuodjaleapmi,iežassuodjaleapmi +Keywords[sk]=Privacy,privacy,súkromie +Keywords[sl]=Zasebnost,zasebnost +Keywords[sr]=Privacy,privacy,Приватност,приватност,приватно +Keywords[sr@Latn]=Privacy,privacy,Privatnost,privatnost,privatno +Keywords[sv]=Integritet,privatliv +Keywords[ta]=தனிப்பட்ட,தனிப்பட்ட +Keywords[te]=ప్రైవసి +Keywords[th]=ความเป็นส่วนตัว +Keywords[tr]=gizlilik +Keywords[uk]=Конфіденційність +Keywords[uz]=Shaxsiy maʼlumot,shaxsiy maʼlumot +Keywords[uz@cyrillic]=Шахсий маълумот,шахсий маълумот +Keywords[vi]=Riêng tư,riêng tư +Keywords[wa]=privé,privêye vikereye,vikerêye da vosse +Keywords[zh_CN]=Privacy,privacy,隐私 +Keywords[zh_TW]=Privacy,privacy,隱私權 +Name=Privacy +Name[af]=Privaatheid +Name[ar]=الخصوصية +Name[az]=Gizlilik +Name[be]=Прыватнасць +Name[bg]=Анонимност +Name[bn]=প্রাইভেসি +Name[br]=Buhez prevez +Name[bs]=Privatnost +Name[ca]=Privacitat +Name[cs]=Soukromí +Name[csb]=Priwatnosc +Name[cy]=Preifatrwydd +Name[de]=Privatsphäre +Name[el]=Προσωπικό απόρρητο +Name[eo]=Privataj aferoj +Name[es]=Privacidad +Name[et]=Privaatsus +Name[eu]=Pribatutasuna +Name[fa]=محرمانگی +Name[fi]=Yksityisyys +Name[fr]=Confidentialité +Name[ga]=Príobháideachas +Name[gl]=Intimidade +Name[he]=פרטיות +Name[hi]=गोपनीयता +Name[hr]=Privatnost +Name[hu]=Magánjellegű adatok törlése +Name[is]=Einkamál +Name[ja]=プライバシー +Name[ka]=კონფიდენციალურობა +Name[kk]=Қарақшылыққа қарсылық +Name[km]=ភាព​ឯកជន +Name[lt]=Privatumas +Name[lv]=Privātums +Name[mk]=Приватност +Name[ms]=Privasi +Name[mt]=Privatezza +Name[nb]=Personvern +Name[nds]=Privaatrebeet +Name[ne]=गोप्यता +Name[nn]=Personvern +Name[pa]=ਰਹੱਸ +Name[pl]=Prywatność +Name[pt]=Privacidade +Name[pt_BR]=Privacidade +Name[ro]=Intimitate +Name[ru]=Конфиденциальность +Name[rw]=Umwihariko +Name[se]=Iežassuodjaleapmi +Name[sk]=Súkromie +Name[sl]=Zasebnost +Name[sr]=Приватност +Name[sr@Latn]=Privatnost +Name[sv]=Integritet +Name[ta]=தனிமை +Name[te]=ప్రైవసి +Name[th]=ความเป็นส่วนตัว +Name[tr]=Gizlilik +Name[tt]=Xosusílıq +Name[uk]=Конфіденційність +Name[uz]=Shaxsiy maʼlumot +Name[uz@cyrillic]=Шахсий маълумот +Name[vi]=Riêng tư +Name[wa]=Vikereye da vosse +Name[zh_CN]=隐私 +Name[zh_TW]=隱私權 +Terminal=false +Type=Application +X-KDE-FactoryName=privacy +X-KDE-Library=privacy +Categories=Qt;KDE;X-KDE-settings-security; diff --git a/kcontrol/privacy/privacy.h b/kcontrol/privacy/privacy.h new file mode 100644 index 000000000..fcec193c7 --- /dev/null +++ b/kcontrol/privacy/privacy.h @@ -0,0 +1,74 @@ +/** + * privacy.h + * + * Copyright (c) 2003 Ralf Hoelzer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _PRIVACY_H_ +#define _PRIVACY_H_ + +#include +#include + +#include "kcmprivacydialog.h" +#include "kprivacymanager.h" +#include "kprivacysettings.h" + +class Privacy: public KCModule +{ + Q_OBJECT + +public: + Privacy( QWidget *parent=0, const char *name=0 ); + ~Privacy(); + + virtual void load(); + virtual void load(bool useDefaults); + virtual void save(); + virtual void defaults(); + +public slots: + void cleanup(); + void selectAll(); + void selectNone(); + +private: + KCMPrivacyDialog *cleaningDialog; + KPrivacySettings *p3pSettings; + KPrivacyManager *m_privacymanager; + + QPtrList checklist; + + KListViewItem *generalCLI; + KListViewItem *webbrowsingCLI; + + QCheckListItem *clearThumbnails; + QCheckListItem *clearRunCommandHistory; + QCheckListItem *clearAllCookies; + QCheckListItem *clearSavedClipboardContents; + QCheckListItem *clearWebHistory; + QCheckListItem *clearWebCache; + QCheckListItem *clearFormCompletion; + QCheckListItem *clearRecentDocuments; + QCheckListItem *clearQuickStartMenu; + QCheckListItem *clearFavIcons; + //QCheckListItem *clearFileDialogHistory; + + +}; + +#endif diff --git a/kcontrol/randr/Makefile.am b/kcontrol/randr/Makefile.am new file mode 100644 index 000000000..6707a380d --- /dev/null +++ b/kcontrol/randr/Makefile.am @@ -0,0 +1,36 @@ +AM_CPPFLAGS = $(all_includes) + +lib_LTLIBRARIES = +kde_module_LTLIBRARIES = kcm_randr.la + +noinst_LTLIBRARIES = librandrinternal.la + +librandrinternal_la_SOURCES = ktimerdialog.cpp randr.cpp +METASOURCES = AUTO + +kcm_randr_la_SOURCES = krandrmodule.cpp +kcm_randr_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined +kcm_randr_la_LIBADD = librandrinternal.la $(LIB_KDEUI) $(LIB_XRANDR) + +noinst_HEADERS = randr.h krandrmodule.h krandrtray.h krandrapp.h ktimerdialog.h \ + krandrpassivepopup.h + +xdg_apps_DATA = krandrtray.desktop + +krandr_data_DATA = randr.desktop +krandr_datadir = $(kde_appsdir)/.hidden + + +#install-data-local: uninstall.desktop +# $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/Desktop +# $(INSTALL_DATA) $(srcdir)/uninstall.desktop +# $(DESTDIR)$(kde_appsdir)/Settings/Desktop/krandrmodule.desktop + +bin_PROGRAMS = krandrtray + +krandrtray_SOURCES = main.cpp krandrtray.cpp krandrapp.cpp krandrpassivepopup.cpp +krandrtray_LDFLAGS = $(all_libraries) $(KDE_RPATH) +krandrtray_LDADD = librandrinternal.la $(LIB_KFILE) $(LIB_KUTILS) $(LIB_XRANDR) + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/krandr.pot diff --git a/kcontrol/randr/TODO b/kcontrol/randr/TODO new file mode 100644 index 000000000..1b7e03c3b --- /dev/null +++ b/kcontrol/randr/TODO @@ -0,0 +1,14 @@ +Remaining known issues + +General + Not tested with multiple screens (but should support them) + +Qt + Font sizes on newly started apps after a resolution change are incorrect + This doesn't appear to happen with non-Xft font rendering, Xft/Qt interaction? + +Kwin + Support different sized virtual desktops + +RandR programs + Support configuring different sized virtual desktops diff --git a/kcontrol/randr/configure.in.in b/kcontrol/randr/configure.in.in new file mode 100644 index 000000000..24a978198 --- /dev/null +++ b/kcontrol/randr/configure.in.in @@ -0,0 +1,18 @@ +dnl ----------------------------------------------------- +dnl X Resize and Rotate extension library check +dnl ----------------------------------------------------- + +KDE_CHECK_HEADERS(X11/extensions/Xrandr.h, [xrandr_h=yes], [xrandr_h=no], [#include ]) +if test "$xrandr_h" = yes; then + KDE_CHECK_LIB(Xrandr, XRRSetScreenConfigAndRate, [ + LIB_XRANDR=-lXrandr + AC_DEFINE_UNQUOTED(XRANDR_SUPPORT, 1, [Defined if your system has XRandR support]) + RANDR_SUBDIR="randr" + ], [ + RANDR_SUBDIR="" + ], -lXrender -lXext $X_EXTRA_LIBS) +else + LIB_XRANDR= +fi +AC_SUBST(LIB_XRANDR) +AM_CONDITIONAL(include_kcontrol_randr, test -n "$RANDR_SUBDIR") diff --git a/kcontrol/randr/krandrapp.cpp b/kcontrol/randr/krandrapp.cpp new file mode 100644 index 000000000..2d773dd22 --- /dev/null +++ b/kcontrol/randr/krandrapp.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2002,2003 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include "krandrapp.h" +#include "krandrapp.moc" + +#include "krandrtray.h" + +#include + +KRandRApp::KRandRApp() + : m_tray(new KRandRSystemTray(0L, "RANDRTray")) +{ + m_tray->show(); +} + +bool KRandRApp::x11EventFilter(XEvent* e) +{ + if (e->type == m_tray->screenChangeNotifyEvent()) { + m_tray->configChanged(); + } + return KApplication::x11EventFilter( e ); +} diff --git a/kcontrol/randr/krandrapp.h b/kcontrol/randr/krandrapp.h new file mode 100644 index 000000000..3b8895fc8 --- /dev/null +++ b/kcontrol/randr/krandrapp.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2002 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KRANDRAPP_H +#define KRANDRAPP_H + +#include + +class KRandRSystemTray; + +class KRandRApp : public KUniqueApplication +{ + Q_OBJECT + +public: + KRandRApp(); + + virtual bool x11EventFilter(XEvent * e); + +private: + KRandRSystemTray* m_tray; +}; + +#endif diff --git a/kcontrol/randr/krandrinithack.cpp b/kcontrol/randr/krandrinithack.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/kcontrol/randr/krandrmodule.cpp b/kcontrol/randr/krandrmodule.cpp new file mode 100644 index 000000000..d1d7ec73f --- /dev/null +++ b/kcontrol/randr/krandrmodule.cpp @@ -0,0 +1,364 @@ +/* + * Copyright (c) 2002,2003 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "krandrmodule.h" +#include "krandrmodule.moc" + +#include +#include + +// DLL Interface for kcontrol +typedef KGenericFactory KSSFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_randr, KSSFactory("krandr") ) +extern "C" + +{ + KDE_EXPORT void init_randr() + { + KRandRModule::performApplyOnStartup(); + } + + KDE_EXPORT bool test_randr() + { + int eventBase, errorBase; + if( XRRQueryExtension(qt_xdisplay(), &eventBase, &errorBase ) ) + return true; + return false; + } +} + +void KRandRModule::performApplyOnStartup() +{ + KConfig config("kcmrandrrc", true); + if (RandRDisplay::applyOnStartup(config)) + { + // Load settings and apply appropriate config + RandRDisplay display; + if (display.isValid() && display.loadDisplay(config)) + display.applyProposed(false); + } +} + +KRandRModule::KRandRModule(QWidget *parent, const char *name, const QStringList&) + : KCModule(parent, name) + , m_changed(false) +{ + if (!isValid()) { + QVBoxLayout *topLayout = new QVBoxLayout(this); + topLayout->addWidget(new QLabel(i18n("Your X server does not support resizing and rotating the display. Please update to version 4.3 or greater. You need the X Resize And Rotate extension (RANDR) version 1.1 or greater to use this feature."), this)); + kdWarning() << "Error: " << errorCode() << endl; + return; + } + + QVBoxLayout* topLayout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + QHBox* screenBox = new QHBox(this); + topLayout->addWidget(screenBox); + QLabel *screenLabel = new QLabel(i18n("Settings for screen:"), screenBox); + m_screenSelector = new KComboBox(screenBox); + + for (int s = 0; s < numScreens(); s++) { + m_screenSelector->insertItem(i18n("Screen %1").arg(s+1)); + } + + m_screenSelector->setCurrentItem(currentScreenIndex()); + screenLabel->setBuddy( m_screenSelector ); + QWhatsThis::add(m_screenSelector, i18n("The screen whose settings you would like to change can be selected using this drop-down list.")); + + connect(m_screenSelector, SIGNAL(activated(int)), SLOT(slotScreenChanged(int))); + + if (numScreens() <= 1) + m_screenSelector->setEnabled(false); + + QHBox* sizeBox = new QHBox(this); + topLayout->addWidget(sizeBox); + QLabel *sizeLabel = new QLabel(i18n("Screen size:"), sizeBox); + m_sizeCombo = new KComboBox(sizeBox); + QWhatsThis::add(m_sizeCombo, i18n("The size, otherwise known as the resolution, of your screen can be selected from this drop-down list.")); + connect(m_sizeCombo, SIGNAL(activated(int)), SLOT(slotSizeChanged(int))); + sizeLabel->setBuddy( m_sizeCombo ); + + QHBox* refreshBox = new QHBox(this); + topLayout->addWidget(refreshBox); + QLabel *rateLabel = new QLabel(i18n("Refresh rate:"), refreshBox); + m_refreshRates = new KComboBox(refreshBox); + QWhatsThis::add(m_refreshRates, i18n("The refresh rate of your screen can be selected from this drop-down list.")); + connect(m_refreshRates, SIGNAL(activated(int)), SLOT(slotRefreshChanged(int))); + rateLabel->setBuddy( m_refreshRates ); + + m_rotationGroup = new QButtonGroup(2, Qt::Horizontal, i18n("Orientation (degrees counterclockwise)"), this); + topLayout->addWidget(m_rotationGroup); + m_rotationGroup->setRadioButtonExclusive(true); + QWhatsThis::add(m_rotationGroup, i18n("The options in this section allow you to change the rotation of your screen.")); + + m_applyOnStartup = new QCheckBox(i18n("Apply settings on KDE startup"), this); + topLayout->addWidget(m_applyOnStartup); + QWhatsThis::add(m_applyOnStartup, i18n("If this option is enabled the size and orientation settings will be used when KDE starts.")); + connect(m_applyOnStartup, SIGNAL(clicked()), SLOT(setChanged())); + + QHBox* syncBox = new QHBox(this); + syncBox->layout()->addItem(new QSpacerItem(20, 1, QSizePolicy::Maximum)); + m_syncTrayApp = new QCheckBox(i18n("Allow tray application to change startup settings"), syncBox); + topLayout->addWidget(syncBox); + QWhatsThis::add(m_syncTrayApp, i18n("If this option is enabled, options set by the system tray applet will be saved and loaded when KDE starts instead of being temporary.")); + connect(m_syncTrayApp, SIGNAL(clicked()), SLOT(setChanged())); + + topLayout->addStretch(1); + + // just set the "apply settings on startup" box + load(); + m_syncTrayApp->setEnabled(m_applyOnStartup->isChecked()); + + slotScreenChanged(QApplication::desktop()->primaryScreen()); + + setButtons(KCModule::Apply); +} + +void KRandRModule::addRotationButton(int thisRotation, bool checkbox) +{ + Q_ASSERT(m_rotationGroup); + if (!checkbox) { + QRadioButton* thisButton = new QRadioButton(RandRScreen::rotationName(thisRotation), m_rotationGroup); + thisButton->setEnabled(thisRotation & currentScreen()->rotations()); + connect(thisButton, SIGNAL(clicked()), SLOT(slotRotationChanged())); + } else { + QCheckBox* thisButton = new QCheckBox(RandRScreen::rotationName(thisRotation), m_rotationGroup); + thisButton->setEnabled(thisRotation & currentScreen()->rotations()); + connect(thisButton, SIGNAL(clicked()), SLOT(slotRotationChanged())); + } +} + +void KRandRModule::slotScreenChanged(int screen) +{ + setCurrentScreen(screen); + + // Clear resolutions + m_sizeCombo->clear(); + + // Add new resolutions + for (int i = 0; i < currentScreen()->numSizes(); i++) { + m_sizeCombo->insertItem(i18n("%1 x %2").arg(currentScreen()->pixelSize(i).width()).arg(currentScreen()->pixelSize(i).height())); + + // Aspect ratio + /* , aspect ratio %5)*/ + /*.arg((double)currentScreen()->size(i).mwidth / (double)currentScreen()->size(i).mheight))*/ + } + + // Clear rotations + for (int i = m_rotationGroup->count() - 1; i >= 0; i--) + m_rotationGroup->remove(m_rotationGroup->find(i)); + + // Create rotations + for (int i = 0; i < RandRScreen::OrientationCount; i++) + addRotationButton(1 << i, i > RandRScreen::RotationCount - 1); + + populateRefreshRates(); + + update(); + + setChanged(); +} + +void KRandRModule::slotRotationChanged() +{ + if (m_rotationGroup->find(0)->isOn()) + currentScreen()->proposeRotation(RandRScreen::Rotate0); + else if (m_rotationGroup->find(1)->isOn()) + currentScreen()->proposeRotation(RandRScreen::Rotate90); + else if (m_rotationGroup->find(2)->isOn()) + currentScreen()->proposeRotation(RandRScreen::Rotate180); + else { + Q_ASSERT(m_rotationGroup->find(3)->isOn()); + currentScreen()->proposeRotation(RandRScreen::Rotate270); + } + + if (m_rotationGroup->find(4)->isOn()) + currentScreen()->proposeRotation(currentScreen()->proposedRotation() ^ RandRScreen::ReflectX); + + if (m_rotationGroup->find(5)->isOn()) + currentScreen()->proposeRotation(currentScreen()->proposedRotation() ^ RandRScreen::ReflectY); + + setChanged(); +} + +void KRandRModule::slotSizeChanged(int index) +{ + int oldProposed = currentScreen()->proposedSize(); + + currentScreen()->proposeSize(index); + + if (currentScreen()->proposedSize() != oldProposed) { + currentScreen()->proposeRefreshRate(0); + + populateRefreshRates(); + + // Item with index zero is already selected + } + + setChanged(); +} + +void KRandRModule::slotRefreshChanged(int index) +{ + currentScreen()->proposeRefreshRate(index); + + setChanged(); +} + +void KRandRModule::populateRefreshRates() +{ + m_refreshRates->clear(); + + QStringList rr = currentScreen()->refreshRates(currentScreen()->proposedSize()); + + m_refreshRates->setEnabled(rr.count()); + + for (QStringList::Iterator it = rr.begin(); it != rr.end(); ++it) + m_refreshRates->insertItem(*it); +} + + +void KRandRModule::defaults() +{ + load( true ); +} + +void KRandRModule::load() +{ + load( false ); +} + +void KRandRModule::load( bool useDefaults ) +{ + if (!isValid()) + return; + + // Don't load screen configurations: + // It will be correct already if they wanted to retain their settings over KDE restarts, + // and if it isn't correct they have changed a) their X configuration, b) the screen + // with another program, or c) their hardware. + KConfig config("kcmrandrrc", true); + + config.setReadDefaults( useDefaults ); + + m_oldApply = loadDisplay(config, false); + m_oldSyncTrayApp = syncTrayApp(config); + + m_applyOnStartup->setChecked(m_oldApply); + m_syncTrayApp->setChecked(m_oldSyncTrayApp); + + emit changed( useDefaults ); +} + +void KRandRModule::save() +{ + if (!isValid()) + return; + + apply(); + + m_oldApply = m_applyOnStartup->isChecked(); + m_oldSyncTrayApp = m_syncTrayApp->isChecked(); + KConfig config("kcmrandrrc"); + saveDisplay(config, m_oldApply, m_oldSyncTrayApp); + + setChanged(); +} + +void KRandRModule::setChanged() +{ + bool isChanged = (m_oldApply != m_applyOnStartup->isChecked()) || (m_oldSyncTrayApp != m_syncTrayApp->isChecked()); + m_syncTrayApp->setEnabled(m_applyOnStartup->isChecked()); + + if (!isChanged) + for (int screenIndex = 0; screenIndex < numScreens(); screenIndex++) { + if (screen(screenIndex)->proposedChanged()) { + isChanged = true; + break; + } + } + + if (isChanged != m_changed) { + m_changed = isChanged; + emit changed(m_changed); + } +} + +void KRandRModule::apply() +{ + if (m_changed) { + applyProposed(); + + update(); + } +} + + +void KRandRModule::update() +{ + m_sizeCombo->blockSignals(true); + m_sizeCombo->setCurrentItem(currentScreen()->proposedSize()); + m_sizeCombo->blockSignals(false); + + m_rotationGroup->blockSignals(true); + switch (currentScreen()->proposedRotation() & RandRScreen::RotateMask) { + case RandRScreen::Rotate0: + m_rotationGroup->setButton(0); + break; + case RandRScreen::Rotate90: + m_rotationGroup->setButton(1); + break; + case RandRScreen::Rotate180: + m_rotationGroup->setButton(2); + break; + case RandRScreen::Rotate270: + m_rotationGroup->setButton(3); + break; + default: + // Shouldn't hit this one + Q_ASSERT(currentScreen()->proposedRotation() & RandRScreen::RotateMask); + break; + } + m_rotationGroup->find(4)->setDown(currentScreen()->proposedRotation() & RandRScreen::ReflectX); + m_rotationGroup->find(5)->setDown(currentScreen()->proposedRotation() & RandRScreen::ReflectY); + m_rotationGroup->blockSignals(false); + + m_refreshRates->blockSignals(true); + m_refreshRates->setCurrentItem(currentScreen()->proposedRefreshRate()); + m_refreshRates->blockSignals(false); +} + diff --git a/kcontrol/randr/krandrmodule.h b/kcontrol/randr/krandrmodule.h new file mode 100644 index 000000000..cd50f05d5 --- /dev/null +++ b/kcontrol/randr/krandrmodule.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2002 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KRANDRMODULE_H +#define KRANDRMODULE_H + +#include "randr.h" + +class QButtonGroup; +class KComboBox; +class QCheckBox; + +class KRandRModule : public KCModule, public RandRDisplay +{ + Q_OBJECT + +public: + KRandRModule(QWidget *parent, const char *name, const QStringList& _args); + + virtual void load(); + virtual void load(bool useDefaults); + virtual void save(); + virtual void defaults(); + + static void performApplyOnStartup(); + +protected slots: + void slotScreenChanged(int screen); + void slotRotationChanged(); + void slotSizeChanged(int index); + void slotRefreshChanged(int index); + void setChanged(); + +protected: + void apply(); + void update(); + + void addRotationButton(int thisRotation, bool checkbox); + void populateRefreshRates(); + + KComboBox* m_screenSelector; + KComboBox* m_sizeCombo; + QButtonGroup* m_rotationGroup; + KComboBox* m_refreshRates; + QCheckBox* m_applyOnStartup; + QCheckBox* m_syncTrayApp; + bool m_oldApply; + bool m_oldSyncTrayApp; + + bool m_changed; +}; + +#endif diff --git a/kcontrol/randr/krandrpassivepopup.cpp b/kcontrol/randr/krandrpassivepopup.cpp new file mode 100644 index 000000000..858014014 --- /dev/null +++ b/kcontrol/randr/krandrpassivepopup.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2003 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "krandrpassivepopup.h" + +#include + +// this class is just like KPassivePopup, but it keeps track of the widget +// it's supposed to be positioned next to, and adjust its position if that +// widgets moves (needed because after a resolution switch Kicker will +// reposition itself, causing normal KPassivePopup to stay at weird places) + +KRandrPassivePopup::KRandrPassivePopup( QWidget *parent, const char *name, WFlags f ) + : KPassivePopup( parent, name, f ) + { + connect( &update_timer, SIGNAL( timeout()), SLOT( slotPositionSelf())); + } + +KRandrPassivePopup* KRandrPassivePopup::message( const QString &caption, const QString &text, + const QPixmap &icon, QWidget *parent, const char *name, int timeout ) + { + KRandrPassivePopup *pop = new KRandrPassivePopup( parent, name ); + pop->setAutoDelete( true ); + pop->setView( caption, text, icon ); + pop->setTimeout( timeout ); + pop->show(); + pop->startWatchingWidget( parent ); + return pop; + } + +void KRandrPassivePopup::startWatchingWidget( QWidget* widget_P ) + { + static Atom wm_state = XInternAtom( qt_xdisplay() , "WM_STATE", False ); + Window win = widget_P->winId(); + bool x11_events = false; + for(;;) + { + Window root, parent; + Window* children; + unsigned int nchildren; + XQueryTree( qt_xdisplay(), win, &root, &parent, &children, &nchildren ); + if( children != NULL ) + XFree( children ); + if( win == root ) // huh? + break; + win = parent; + + QWidget* widget = QWidget::find( win ); + if( widget != NULL ) + { + widget->installEventFilter( this ); + watched_widgets.append( widget ); + } + else + { + XWindowAttributes attrs; + XGetWindowAttributes( qt_xdisplay(), win, &attrs ); + XSelectInput( qt_xdisplay(), win, attrs.your_event_mask | StructureNotifyMask ); + watched_windows.append( win ); + x11_events = true; + } + Atom type; + int format; + unsigned long nitems, after; + unsigned char* data; + if( XGetWindowProperty( qt_xdisplay(), win, wm_state, 0, 0, False, AnyPropertyType, + &type, &format, &nitems, &after, &data ) == Success ) + { + if( data != NULL ) + XFree( data ); + if( type != None ) // toplevel window + break; + } + } + if( x11_events ) + kapp->installX11EventFilter( this ); + } + +bool KRandrPassivePopup::eventFilter( QObject* o, QEvent* e ) + { + if( e->type() == QEvent::Move && o->isWidgetType() + && watched_widgets.contains( static_cast< QWidget* >( o ))) + QTimer::singleShot( 0, this, SLOT( slotPositionSelf())); + return false; + } + +bool KRandrPassivePopup::x11Event( XEvent* e ) + { + if( e->type == ConfigureNotify && watched_windows.contains( e->xconfigure.window )) + { + if( !update_timer.isActive()) + update_timer.start( 10, true ); + return false; + } + return KPassivePopup::x11Event( e ); + } + +void KRandrPassivePopup::slotPositionSelf() + { + positionSelf(); + } + +#include "krandrpassivepopup.moc" diff --git a/kcontrol/randr/krandrpassivepopup.h b/kcontrol/randr/krandrpassivepopup.h new file mode 100644 index 000000000..6e86c336c --- /dev/null +++ b/kcontrol/randr/krandrpassivepopup.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2003 Lubos Lunak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __RANDRPASSIVEPOPUP_H__ +#define __RANDRPASSIVEPOPUP_H__ + +#include +#include +#include +#include + +class KRandrPassivePopup + : public KPassivePopup + { + Q_OBJECT + public: + static KRandrPassivePopup *message( const QString &caption, const QString &text, + const QPixmap &icon, QWidget *parent, const char *name=0, int timeout = -1 ); + protected: + virtual bool eventFilter( QObject* o, QEvent* e ); + virtual bool x11Event( XEvent* e ); + private slots: + void slotPositionSelf(); + private: + KRandrPassivePopup( QWidget *parent=0, const char *name=0, WFlags f=0 ); + void startWatchingWidget( QWidget* w ); + QValueList< QWidget* > watched_widgets; + QValueList< Window > watched_windows; + QTimer update_timer; + }; + +#endif diff --git a/kcontrol/randr/krandrtray.cpp b/kcontrol/randr/krandrtray.cpp new file mode 100644 index 000000000..8e80c7cc6 --- /dev/null +++ b/kcontrol/randr/krandrtray.cpp @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2002,2003 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "krandrtray.h" +#include "krandrpassivepopup.h" +#include "krandrtray.moc" + +KRandRSystemTray::KRandRSystemTray(QWidget* parent, const char *name) + : KSystemTray(parent, name) + , m_popupUp(false) + , m_help(new KHelpMenu(this, KGlobal::instance()->aboutData(), false, actionCollection())) +{ + setPixmap(KSystemTray::loadIcon("randr")); + setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + connect(this, SIGNAL(quitSelected()), kapp, SLOT(quit())); + QToolTip::add(this, i18n("Screen resize & rotate")); +} + +void KRandRSystemTray::mousePressEvent(QMouseEvent* e) +{ + // Popup the context menu with left-click + if (e->button() == LeftButton) { + contextMenuAboutToShow(contextMenu()); + contextMenu()->popup(e->globalPos()); + e->accept(); + return; + } + + KSystemTray::mousePressEvent(e); +} + +void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu) +{ + int lastIndex = 0; + + menu->clear(); + menu->setCheckable(true); + + if (!isValid()) { + lastIndex = menu->insertItem(i18n("Required X Extension Not Available")); + menu->setItemEnabled(lastIndex, false); + + } else { + m_screenPopups.clear(); + for (int s = 0; s < numScreens() /*&& numScreens() > 1 */; s++) { + setCurrentScreen(s); + if (s == screenIndexOfWidget(this)) { + /*lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1)); + menu->setItemEnabled(lastIndex, false);*/ + } else { + KPopupMenu* subMenu = new KPopupMenu(menu, QString("screen%1").arg(s+1).latin1()); + m_screenPopups.append(subMenu); + populateMenu(subMenu); + lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1), subMenu); + connect(subMenu, SIGNAL(activated(int)), SLOT(slotScreenActivated())); + } + } + + setCurrentScreen(screenIndexOfWidget(this)); + populateMenu(menu); + } + + menu->insertSeparator(); + + KAction *actPrefs = new KAction( i18n( "Configure Display..." ), + SmallIconSet( "configure" ), KShortcut(), this, SLOT( slotPrefs() ), + actionCollection() ); + actPrefs->plug( menu ); + + menu->insertItem(SmallIcon("help"),KStdGuiItem::help().text(), m_help->menu()); + KAction *quitAction = actionCollection()->action(KStdAction::name(KStdAction::Quit)); + quitAction->plug(menu); +} + +void KRandRSystemTray::slotScreenActivated() +{ + setCurrentScreen(m_screenPopups.find(static_cast(sender()))); +} + +void KRandRSystemTray::configChanged() +{ + refresh(); + + static bool first = true; + + if (!first) + KRandrPassivePopup::message( + i18n("Screen configuration has changed"), + currentScreen()->changedMessage(), SmallIcon("window_fullscreen"), + this, "ScreenChangeNotification"); + + first = false; +} + +void KRandRSystemTray::populateMenu(KPopupMenu* menu) +{ + int lastIndex = 0; + + menu->insertTitle(SmallIcon("window_fullscreen"), i18n("Screen Size")); + + int numSizes = currentScreen()->numSizes(); + int* sizeSort = new int[numSizes]; + + for (int i = 0; i < numSizes; i++) { + sizeSort[i] = currentScreen()->pixelCount(i); + } + + for (int j = 0; j < numSizes; j++) { + int highest = -1, highestIndex = -1; + + for (int i = 0; i < numSizes; i++) { + if (sizeSort[i] && sizeSort[i] > highest) { + highest = sizeSort[i]; + highestIndex = i; + } + } + sizeSort[highestIndex] = -1; + Q_ASSERT(highestIndex != -1); + + lastIndex = menu->insertItem(i18n("%1 x %2").arg(currentScreen()->pixelSize(highestIndex).width()).arg(currentScreen()->pixelSize(highestIndex).height())); + + if (currentScreen()->proposedSize() == highestIndex) + menu->setItemChecked(lastIndex, true); + + menu->setItemParameter(lastIndex, highestIndex); + menu->connectItem(lastIndex, this, SLOT(slotResolutionChanged(int))); + } + delete [] sizeSort; + sizeSort = 0L; + + // Don't display the rotation options if there is no point (ie. none are supported) + // XFree86 4.3 does not include rotation support. + if (currentScreen()->rotations() != RandRScreen::Rotate0) { + menu->insertTitle(SmallIcon("reload"), i18n("Orientation")); + + for (int i = 0; i < 6; i++) { + if ((1 << i) & currentScreen()->rotations()) { + lastIndex = menu->insertItem(currentScreen()->rotationIcon(1 << i), RandRScreen::rotationName(1 << i)); + + if (currentScreen()->proposedRotation() & (1 << i)) + menu->setItemChecked(lastIndex, true); + + menu->setItemParameter(lastIndex, 1 << i); + menu->connectItem(lastIndex, this, SLOT(slotOrientationChanged(int))); + } + } + } + + QStringList rr = currentScreen()->refreshRates(currentScreen()->proposedSize()); + + if (rr.count()) + menu->insertTitle(SmallIcon("clock"), i18n("Refresh Rate")); + + int i = 0; + for (QStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++) { + lastIndex = menu->insertItem(*it); + + if (currentScreen()->proposedRefreshRate() == i) + menu->setItemChecked(lastIndex, true); + + menu->setItemParameter(lastIndex, i); + menu->connectItem(lastIndex, this, SLOT(slotRefreshRateChanged(int))); + } +} + +void KRandRSystemTray::slotResolutionChanged(int parameter) +{ + if (currentScreen()->currentSize() == parameter) + return; + + currentScreen()->proposeSize(parameter); + + currentScreen()->proposeRefreshRate(-1); + + if (currentScreen()->applyProposedAndConfirm()) { + KConfig config("kcmrandrrc"); + if (syncTrayApp(config)) + currentScreen()->save(config); + } +} + +void KRandRSystemTray::slotOrientationChanged(int parameter) +{ + int propose = currentScreen()->currentRotation(); + + if (parameter & RandRScreen::RotateMask) + propose &= RandRScreen::ReflectMask; + + propose ^= parameter; + + if (currentScreen()->currentRotation() == propose) + return; + + currentScreen()->proposeRotation(propose); + + if (currentScreen()->applyProposedAndConfirm()) { + KConfig config("kcmrandrrc"); + if (syncTrayApp(config)) + currentScreen()->save(config); + } +} + +void KRandRSystemTray::slotRefreshRateChanged(int parameter) +{ + if (currentScreen()->currentRefreshRate() == parameter) + return; + + currentScreen()->proposeRefreshRate(parameter); + + if (currentScreen()->applyProposedAndConfirm()) { + KConfig config("kcmrandrrc"); + if (syncTrayApp(config)) + currentScreen()->save(config); + } +} + +void KRandRSystemTray::slotPrefs() +{ + KCMultiDialog *kcm = new KCMultiDialog( KDialogBase::Plain, i18n( "Configure" ), this ); + + kcm->addModule( "display" ); + kcm->setPlainCaption( i18n( "Configure Display" ) ); + kcm->exec(); +} diff --git a/kcontrol/randr/krandrtray.desktop b/kcontrol/randr/krandrtray.desktop new file mode 100644 index 000000000..7cb52a44b --- /dev/null +++ b/kcontrol/randr/krandrtray.desktop @@ -0,0 +1,141 @@ +[Desktop Entry] +Name=KRandRTray +Name[be]=Змена параметраў манітора +Name[hu]=Képernyőfelbontás +Name[ne]=KRandR ट्रे +Name[pt_BR]=Ícone do KRandR +Name[sv]=Krandrtray +Name[vi]=Khay KRandR +GenericName=Screen Resize & Rotate +GenericName[af]=Skerm Hervergroot & Roteer +GenericName[be]=Змена памераў экрана і перагортванне +GenericName[bg]=Размер и ротация на екрана +GenericName[bn]=পর্দা মাপবদল ও আবর্তন +GenericName[br]=Adventañ ha treiñ ar skramm +GenericName[bs]=Veličina i rotacija ekrana +GenericName[ca]=Amida i gira la pantalla +GenericName[cs]=Změna velikosti a rotace obrazovky +GenericName[csb]=Òbrócenié ë zjinaka miarë ekranu +GenericName[cy]=Newid Maint a Cylchdroi'r Sgrîn +GenericName[da]=Ændr størrelse på skærm & Rotér +GenericName[de]=Bildschirmgröße & -ausrichtung ändern +GenericName[el]=Αλλαγή μεγέθους & Περιστροφή οθόνης +GenericName[eo]=Regrandigi kaj Turni Ekranon +GenericName[es]=Redimensionar y rotar pantalla +GenericName[et]=Ekraani suuruse muutmine ja pööramine +GenericName[eu]=Pantailaren tamaina aldaketa eta biraketa +GenericName[fa]=تغییر اندازه و چرخش پرده +GenericName[fi]=Näytön kuvan koon muuttaminen ja kuvan kääntäminen +GenericName[fr]=Redimensionnement et rotation de l'écran +GenericName[fy]=Skerm rotearje en grutte wizigje +GenericName[gl]=Rotación e Redimensionamento da Pantallla +GenericName[he]=שינוי גודל המסך וסיבובו +GenericName[hr]=Veličine i orijentacija zaslona +GenericName[hu]=Képernyőbeállító +GenericName[is]=Stærð og snúningur skjáa +GenericName[it]=Ruota e ridimensiona lo schermo +GenericName[ja]=スクリーンのリサイズと回転 +GenericName[ka]=ეკრანის ზომა და ორიენტაცია +GenericName[kk]=Экранды өзгерту және бұрау +GenericName[km]=ប្ដូរ​ទំហំ & បង្វិល​អេក្រង់ +GenericName[ko]=화면 크기 조정 및 회전 +GenericName[lt]=Ekrano dydžio keitimas ir pasukimas +GenericName[mk]=Големина и ротација на екранот +GenericName[ms]=Saiz Semula Skrin & Putar +GenericName[nb]=Endre størrelsen på og rotere skjermbildet +GenericName[nds]=Schirmgrött un -utrichten ännern +GenericName[ne]=पर्दा रिसाइज र परिक्रमण +GenericName[nl]=Scherm roteren en grootte wijzigen +GenericName[nn]=Endra storleiken på og roter skjermbiletet +GenericName[pa]=ਪਰਦਾ ਮੁੜ ਆਕਾਰ ਤੇ ਘੁੰਮਾਓ +GenericName[pl]=Obrót i zmiana rozmiaru ekranu +GenericName[pt]=Mudar o Tamanho e Rodar o Ecrã +GenericName[pt_BR]=Redimensionar Tela & Rotacionar +GenericName[ro]=Redimensionare și rotire ecran +GenericName[ru]=Изменение размера и ориентации экрана +GenericName[rw]=Kuhindura ingano & Kuzengurutsa Mugaragaza +GenericName[se]=Rievdat šearbmagova sturrodaga ja jorat dan +GenericName[sk]=Zmena veľkosti a otočenia obrazovky +GenericName[sl]=Spreminjanje velikosti in obračanje zaslona +GenericName[sr]=Промена величине и ротација екрана +GenericName[sr@Latn]=Promena veličine i rotacija ekrana +GenericName[sv]=Ändra skärmstorlek och rotera +GenericName[ta]=திரை அளவு மாற்று & சுழற்று +GenericName[tg]=Ивази андоза ва мавқеи экран +GenericName[th]=ปรับขนาดและหมุนหน้าจอ +GenericName[tr]=Ekran Boyutlandır ve Döndür +GenericName[tt]=Küräk Ülçäme & Borılışı +GenericName[uk]=Зміна розміру та обертання екрана +GenericName[uz]=Ekraning oʻlchamini oʻzgartirish va burish +GenericName[uz@cyrillic]=Экранинг ўлчамини ўзгартириш ва буриш +GenericName[vi]=Thay đổi cỡ màn hình & Quay +GenericName[wa]=Candjî l' grandeu del waitroûle eyet l' tourner +GenericName[zh_CN]=屏幕大小和旋转 +GenericName[zh_TW]=螢幕調整大小及旋轉 +Comment=Resize and rotate X screens. +Comment[af]=Hervergroot en roteer X skerms. +Comment[ar]=غيير القياس و الدوران للشاشات X. +Comment[be]=Змена памераў і перагортванне экранаў X. +Comment[bg]=Размер и ротация на екрана. +Comment[bn]=আপনার এক্স-স্ক্রীণ-এর আকৃতি এবং দিশা পরিবর্তন করুন +Comment[br]=Adventañ ha treiñ ho diskweloù X. +Comment[bs]=Podesite veličinu i rotirajte vaš ekran. +Comment[ca]=Gira i amida les pantalles X. +Comment[cs]=Změna velikosti a rotace obrazovky. +Comment[csb]=Zjinaka miarë ë pòłożenia ekranów. +Comment[da]=Ændrer størrelse og roterer X-skærme +Comment[de]=Die Größe und Ausrichtung der Anzeige ändern +Comment[el]=Αλλαγή μεγέθους και περιστροφή της οθόνης. +Comment[eo]=Regrandigi kaj turni X ekranojn. +Comment[es]=Ajustar el tamaño y rotar las pantallas X. +Comment[et]=X'i ekraani muutmine ja pööramine +Comment[eu]=Aldatu tamaina eta biratu zure X pantailak. +Comment[fa]=تغییر‌ اندازه و چرخش پرده‌های X. +Comment[fi]=Näytön kuvan koon muuttaminen ja kuvan kääntäminen +Comment[fr]=Redimensionner et retourner votre affichage. +Comment[fy]=Skermgrutte wizigje en rotearje X skermen +Comment[ga]=Athraigh an méid agus rothlaigh scáileáin X. +Comment[gl]=Redimensionar e rotar pantallas +Comment[he]=שנה את גודלה של התצוגה שלך וסובב אותה. +Comment[hr]=Promjena veličine i orijentacije X zaslona +Comment[hu]=A képernyő átméretezése, elforgatása +Comment[is]=Breyta stærð skjásins og snúa honum. +Comment[it]=Ridimensiona e ruota gli schermi di X. +Comment[ja]=X スクリーンのリサイズと回転。 +Comment[ka]=ეკრანის ზომის და ორიენტაციის შეცვლა +Comment[kk]=Экранның өлшемін және бағытын өзгерту +Comment[km]=ប្ដូរ​ទំហំ និង​បង្វិល​អេក្រង់ X ។ +Comment[lt]=Keisti X ekrano dydį ir orientaciją. +Comment[mk]=Сменете ја големината и ротацијата на вашиот екран +Comment[nb]=Endrer størrelsen på og roterer X-skjermbildet +Comment[nds]=Grött un Utrichten vun den X-Schirm ännern +Comment[ne]=X पर्दा रिसाइज गर्नुहोस् र घुमाउनुहोस् +Comment[nl]=Scherm roteren en van grootte veranderen +Comment[nn]=Endra storleiken på og roter X-skjermbiletet. +Comment[pa]=X ਸਕਰੀਨ ਨੂੰ ਮੁੜ-ਅਕਾਰ ਅਤੇ ਘੁੰਮਾਓ। +Comment[pl]=Zmiana rozmiaru i orientacji ekranów. +Comment[pt]=Mudar o tamanho e rodar os ecrãs do X. +Comment[pt_BR]=Redimensiona e rotaciona as tela do X. +Comment[ro]=Redimensionează și rotește ecranele X. +Comment[ru]=Изменение размера и ориентации экранов X. +Comment[se]=Rievdat X-šearpmaid sturrodaga ja joraheami. +Comment[sk]=Zmení veľkosť a otočí obrazovky +Comment[sl]=Spremenite velikost in obrnite zaslon. +Comment[sr]=Промените величину и оријентацију екрана +Comment[sr@Latn]=Promenite veličinu i orijentaciju ekrana +Comment[sv]=Storleksändring och rotation av X-skärmar. +Comment[tg]=Ивази андоза ва мавқеи экранҳои Х. +Comment[th]=ปรับแต่งการแสดงผลของ X +Comment[tr]=Ekranı boyutlandır ve çevir. +Comment[uk]=Зміна розміру та обертання екранів X. +Comment[uz]=Ekraning oʻlchamini oʻzgartirish va burish +Comment[uz@cyrillic]=Экранинг ўлчамини ўзгартириш ва буриш +Comment[vi]=Đổi cỡ và quay màn hình X. +Comment[wa]=Candjî l' grandeu eyet tourner les waitroûles X. +Comment[zh_CN]=更改 X 屏幕的大小和旋转。 +Comment[zh_TW]=調整大小及旋轉 X 螢幕。 +Exec=krandrtray +Icon=randr +Type=Application +OnlyShowIn=KDE; +Categories=Qt;KDE;System; diff --git a/kcontrol/randr/krandrtray.h b/kcontrol/randr/krandrtray.h new file mode 100644 index 000000000..829306437 --- /dev/null +++ b/kcontrol/randr/krandrtray.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2002 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KRANDRTRAY_H +#define KRANDRTRAY_H + +#include + +#include + +#include "randr.h" + +class KHelpMenu; +class KPopupMenu; + +class KRandRSystemTray : public KSystemTray, public RandRDisplay +{ + Q_OBJECT + +public: + KRandRSystemTray(QWidget* parent = 0, const char *name = 0); + + virtual void contextMenuAboutToShow(KPopupMenu* menu); + + void configChanged(); + +protected slots: + void slotScreenActivated(); + void slotResolutionChanged(int parameter); + void slotOrientationChanged(int parameter); + void slotRefreshRateChanged(int parameter); + void slotPrefs(); + +protected: + void mousePressEvent( QMouseEvent *e ); + +private: + void populateMenu(KPopupMenu* menu); + + bool m_popupUp; + KHelpMenu* m_help; + QPtrList m_screenPopups; +}; + +#endif diff --git a/kcontrol/randr/ktimerdialog.cpp b/kcontrol/randr/ktimerdialog.cpp new file mode 100644 index 000000000..071088e9b --- /dev/null +++ b/kcontrol/randr/ktimerdialog.cpp @@ -0,0 +1,205 @@ +/* + * This file is part of the KDE Libraries + * Copyright (C) 2002 Hamish Rodda + * + * 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 +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include "ktimerdialog.h" +#include "ktimerdialog.moc" + +KTimerDialog::KTimerDialog( int msec, TimerStyle style, QWidget *parent, + const char *name, bool modal, + const QString &caption, + int buttonMask, ButtonCode defaultButton, + bool separator, + const KGuiItem &user1, + const KGuiItem &user2, + const KGuiItem &user3 ) + : KDialogBase(parent, name, modal, caption, buttonMask, defaultButton, + separator, user1, user2, user3 ) +{ + totalTimer = new QTimer( this ); + updateTimer = new QTimer( this ); + msecTotal = msecRemaining = msec; + updateInterval = 1000; + tStyle = style; + KWin::setIcons( winId(), DesktopIcon("randr"), SmallIcon("randr") ); + // default to cancelling the dialog on timeout + if ( buttonMask & Cancel ) + buttonOnTimeout = Cancel; + + connect( totalTimer, SIGNAL( timeout() ), SLOT( slotInternalTimeout() ) ); + connect( updateTimer, SIGNAL( timeout() ), SLOT( slotUpdateTime() ) ); + + // create the widgets + mainWidget = new QVBox( this, "mainWidget" ); + timerWidget = new QHBox( mainWidget, "timerWidget" ); + timerLabel = new QLabel( timerWidget ); + timerProgress = new QProgressBar( timerWidget ); + timerProgress->setTotalSteps( msecTotal ); + timerProgress->setPercentageVisible( false ); + + KDialogBase::setMainWidget( mainWidget ); + + slotUpdateTime( false ); +} + +KTimerDialog::~KTimerDialog() +{ +} + +void KTimerDialog::show() +{ + KDialogBase::show(); + totalTimer->start( msecTotal, true ); + updateTimer->start( updateInterval, false ); +} + +int KTimerDialog::exec() +{ + totalTimer->start( msecTotal, true ); + updateTimer->start( updateInterval, false ); + return KDialogBase::exec(); +} + +void KTimerDialog::setMainWidget( QWidget *widget ) +{ + // yuck, here goes. + QVBox *newWidget = new QVBox( this ); + + if ( widget->parentWidget() != mainWidget ) { + widget->reparent( newWidget, 0, QPoint(0,0) ); + } else { + newWidget->insertChild( widget ); + } + + timerWidget->reparent( newWidget, 0, QPoint(0, 0) ); + + delete mainWidget; + mainWidget = newWidget; + KDialogBase::setMainWidget( mainWidget ); +} + +void KTimerDialog::setRefreshInterval( int msec ) +{ + updateInterval = msec; + if ( updateTimer->isActive() ) + updateTimer->changeInterval( updateInterval ); +} + +int KTimerDialog::timeoutButton() const +{ + return buttonOnTimeout; +} + +void KTimerDialog::setTimeoutButton( const ButtonCode newButton ) +{ + buttonOnTimeout = newButton; +} + +int KTimerDialog::timerStyle() const +{ + return tStyle; +} + +void KTimerDialog::setTimerStyle( const TimerStyle newStyle ) +{ + tStyle = newStyle; +} + +void KTimerDialog::slotUpdateTime( bool update ) +{ + if ( update ) + switch ( tStyle ) { + case CountDown: + msecRemaining -= updateInterval; + break; + case CountUp: + msecRemaining += updateInterval; + break; + case Manual: + break; + } + + timerProgress->setProgress( msecRemaining ); + + timerLabel->setText( i18n("1 second remaining:","%n seconds remaining:",msecRemaining/1000) ); +} + +void KTimerDialog::slotInternalTimeout() +{ + emit timerTimeout(); + switch ( buttonOnTimeout ) { + case Help: + slotHelp(); + break; + case Default: + slotDefault(); + break; + case Ok: + slotOk(); + break; + case Apply: + applyPressed(); + break; + case Try: + slotTry(); + break; + case Cancel: + slotCancel(); + break; + case Close: + slotClose(); + break; + /*case User1: + slotUser1(); + break; + case User2: + slotUser2(); + break;*/ + case User3: + slotUser3(); + break; + case No: + slotNo(); + break; + case Yes: + slotCancel(); + break; + case Details: + slotDetails(); + break; + case Filler: + case Stretch: + kdDebug() << "Cannot execute button code " << buttonOnTimeout << endl; + break; + } +} diff --git a/kcontrol/randr/ktimerdialog.h b/kcontrol/randr/ktimerdialog.h new file mode 100644 index 000000000..23b4a92b0 --- /dev/null +++ b/kcontrol/randr/ktimerdialog.h @@ -0,0 +1,170 @@ +/* + * This file is part of the KDE Libraries + * Copyright (C) 2002 Hamish Rodda + * + * 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 _KTIMERDIALOG_H_ +#define _KTIMERDIALOG_H_ + +#include + +class QTimer; +class QHBox; +class QProgressBar; +class QLabel; + +/** + * Provides a dialog that is only available for a specified amount + * of time, and reports the time remaining to the user. + * + * The timer is capable of counting up or down, for any number of milliseconds. + * + * The button which is activated upon timeout can be specified, as can the + * update interval for the dialog box. + * + * In addition, this class retains all of the functionality of @see KDialogBase . + * + * @short A dialog with a time limit and corresponding UI features. + * @author Hamish Rodda + */ +class KTimerDialog : public KDialogBase +{ + Q_OBJECT + + public: + + /** + * @li @p CountDown - The timer counts downwards from the seconds given. + * @li @p CountUp - The timer counts up to the number of seconds given. + * @li @p Manual - The timer is not invoked; the caller must update the + * progress. + */ + enum TimerStyle + { + CountDown, + CountUp, + Manual + }; + + /** + * Constructor for the standard mode where you must specify the main + * widget with @ref setMainWidget() . See @see KDialogBase for further details. + * + * For the rest of the arguments, See @see KDialogBase . + */ + KTimerDialog( int msec, TimerStyle style=CountDown, QWidget *parent=0, + const char *name=0, bool modal=true, + const QString &caption=QString::null, + int buttonMask=Ok|Apply|Cancel, ButtonCode defaultButton=Ok, + bool separator=false, + const KGuiItem &user1=KGuiItem(), + const KGuiItem &user2=KGuiItem(), + const KGuiItem &user3=KGuiItem() ); + + /** + * Destructor. + */ + ~KTimerDialog(); + + /** + * Execute the dialog modelessly - see @see QDialog . + */ + virtual void show(); + + /** + * Set the refresh interval for the timer progress. Defaults to one second. + */ + void setRefreshInterval( int msec ); + + /** + * Retrieves the @ref ButtonCode which will be activated once the timer + * times out. @see setTimeoutButton + */ + int timeoutButton() const; + + /** + * Sets the @ref ButtonCode to determine which button will be activated + * once the timer times out. @see timeoutButton + */ + void setTimeoutButton( ButtonCode newButton ); + + /** + * Retrieves the current @ref TimerStyle. @see setTimerStyle + */ + int timerStyle() const; + + /** + * Sets the @ref TimerStyle. @see timerStyle + */ + void setTimerStyle( TimerStyle newStyle ); + + /** + * Overridden function which is used to set the main widget of the dialog. + * @see KDialogBase::setMainWidget. + */ + void setMainWidget( QWidget *widget ); + + signals: + /** + * Signal which is emitted once the timer has timed out. + */ + void timerTimeout(); + + public slots: + /** + * Execute the dialog modally - see @see QDialog . + */ + int exec(); + + private slots: + /** + * Updates the dialog with the current progress levels. + */ + void slotUpdateTime( bool update = true ); + + /** + * The internal + */ + void slotInternalTimeout(); + + private: + /** + * Prepares the layout that manages the widgets of the dialog + */ + void setupLayout(); + + QTimer *totalTimer; + QTimer *updateTimer; + int msecRemaining, updateInterval, msecTotal; + + ButtonCode buttonOnTimeout; + TimerStyle tStyle; + + QHBox *timerWidget; + QProgressBar *timerProgress; + QLabel *timerLabel; + QVBox *mainWidget; + + class KTimerDialogPrivate; + KTimerDialogPrivate *d; +}; + +#endif + + + diff --git a/kcontrol/randr/main.cpp b/kcontrol/randr/main.cpp new file mode 100644 index 000000000..f2de7f146 --- /dev/null +++ b/kcontrol/randr/main.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2002,2003 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include +#include +#include +#include + +#include "krandrapp.h" + +static const char krandrtrayVersion[] = "0.5"; +static const KCmdLineOptions options[] = +{ + { "login", I18N_NOOP("Application is being auto-started at KDE session start"), 0L }, + KCmdLineLastOption +}; + +int main(int argc, char **argv) +{ + KAboutData aboutData("randr", I18N_NOOP("Resize and Rotate"), krandrtrayVersion, I18N_NOOP("Resize and Rotate System Tray App"), KAboutData::License_GPL, "(c) 2002,2003 Hamish Rodda", 0L, ""); + aboutData.addAuthor("Hamish Rodda",I18N_NOOP("Maintainer"), "rodda@kde.org"); + aboutData.addCredit("Lubos Lunak",I18N_NOOP("Many fixes"), "l.lunak@suse.cz"); + aboutData.setProductName("krandr/krandrtray"); + KGlobal::locale()->setMainCatalogue("krandr"); + + KCmdLineArgs::init(argc,argv,&aboutData); + KCmdLineArgs::addCmdLineOptions(options); + KApplication::addCmdLineOptions(); + + KRandRApp app; + + return app.exec(); +} diff --git a/kcontrol/randr/randr.cpp b/kcontrol/randr/randr.cpp new file mode 100644 index 000000000..63c5c0450 --- /dev/null +++ b/kcontrol/randr/randr.cpp @@ -0,0 +1,703 @@ +/* + * Copyright (c) 2002,2003 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "randr.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ktimerdialog.h" + +#include +#define INT8 _X11INT8 +#define INT32 _X11INT32 +#include +#undef INT8 +#undef INT32 +#include + +class RandRScreenPrivate +{ +public: + RandRScreenPrivate() : config(0L) {}; + ~RandRScreenPrivate() + { + if (config) + XRRFreeScreenConfigInfo(config); + } + + XRRScreenConfiguration* config; +}; + +RandRScreen::RandRScreen(int screenIndex) + : d(new RandRScreenPrivate()) + , m_screen(screenIndex) + , m_shownDialog(NULL) +{ + loadSettings(); + setOriginal(); +} + +RandRScreen::~RandRScreen() +{ + delete d; +} + +void RandRScreen::loadSettings() +{ + if (d->config) + XRRFreeScreenConfigInfo(d->config); + + d->config = XRRGetScreenInfo(qt_xdisplay(), RootWindow(qt_xdisplay(), m_screen)); + Q_ASSERT(d->config); + + Rotation rotation; + m_currentSize = m_proposedSize = XRRConfigCurrentConfiguration(d->config, &rotation); + m_currentRotation = m_proposedRotation = rotation; + + m_pixelSizes.clear(); + m_mmSizes.clear(); + int numSizes; + XRRScreenSize* sizes = XRRSizes(qt_xdisplay(), m_screen, &numSizes); + for (int i = 0; i < numSizes; i++) { + m_pixelSizes.append(QSize(sizes[i].width, sizes[i].height)); + m_mmSizes.append(QSize(sizes[i].mwidth, sizes[i].mheight)); + } + + m_rotations = XRRRotations(qt_xdisplay(), m_screen, &rotation); + + m_currentRefreshRate = m_proposedRefreshRate = refreshRateHzToIndex(m_currentSize, XRRConfigCurrentRate(d->config)); +} + +void RandRScreen::setOriginal() +{ + m_originalSize = m_currentSize; + m_originalRotation = m_currentRotation; + m_originalRefreshRate = m_currentRefreshRate; +} + +bool RandRScreen::applyProposed() +{ + //kdDebug() << k_funcinfo << " size " << (SizeID)proposedSize() << ", rotation " << proposedRotation() << ", refresh " << refreshRateIndexToHz(proposedSize(), proposedRefreshRate()) << endl; + + Status status; + + if (proposedRefreshRate() < 0) + status = XRRSetScreenConfig(qt_xdisplay(), d->config, DefaultRootWindow(qt_xdisplay()), (SizeID)proposedSize(), (Rotation)proposedRotation(), CurrentTime); + else { + if( refreshRateIndexToHz(proposedSize(), proposedRefreshRate()) <= 0 ) { + m_proposedRefreshRate = 0; + } + status = XRRSetScreenConfigAndRate(qt_xdisplay(), d->config, DefaultRootWindow(qt_xdisplay()), (SizeID)proposedSize(), (Rotation)proposedRotation(), refreshRateIndexToHz(proposedSize(), proposedRefreshRate()), CurrentTime); + } + + //kdDebug() << "New size: " << WidthOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), screen)) << ", " << HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), screen)) << endl; + + if (status == RRSetConfigSuccess) { + m_currentSize = m_proposedSize; + m_currentRotation = m_proposedRotation; + m_currentRefreshRate = m_proposedRefreshRate; + return true; + } + + return false; +} + +bool RandRScreen::applyProposedAndConfirm() +{ + if (proposedChanged()) { + setOriginal(); + + if (applyProposed()) { + if (!confirm()) { + proposeOriginal(); + applyProposed(); + return false; + } + } else { + return false; + } + } + + return true; +} + +bool RandRScreen::confirm() +{ + // uncomment the line below and edit out the KTimerDialog stuff to get + // a version which works on today's kdelibs (no accept dialog is presented) + + // FIXME remember to put the dialog on the right screen + + KTimerDialog acceptDialog ( 15000, KTimerDialog::CountDown, + KApplication::kApplication()->mainWidget(), + "mainKTimerDialog", + true, + i18n("Confirm Display Setting Change"), + KTimerDialog::Ok|KTimerDialog::Cancel, + KTimerDialog::Cancel); + + acceptDialog.setButtonOK(KGuiItem(i18n("&Accept Configuration"), "button_ok")); + acceptDialog.setButtonCancel(KGuiItem(i18n("&Return to Previous Configuration"), "button_cancel")); + + KActiveLabel *label = new KActiveLabel(i18n("Your screen orientation, size and refresh rate " + "have been changed to the requested settings. Please indicate whether you wish to " + "keep this configuration. In 15 seconds the display will revert to your previous " + "settings."), &acceptDialog, "userSpecifiedLabel"); + + acceptDialog.setMainWidget(label); + + KDialog::centerOnScreen(&acceptDialog, m_screen); + + m_shownDialog = &acceptDialog; + connect( m_shownDialog, SIGNAL( destroyed()), this, SLOT( shownDialogDestroyed())); + connect( kapp->desktop(), SIGNAL( resized(int)), this, SLOT( desktopResized())); + + return acceptDialog.exec(); +} + +void RandRScreen::shownDialogDestroyed() +{ + m_shownDialog = NULL; + disconnect( kapp->desktop(), SIGNAL( resized(int)), this, SLOT( desktopResized())); +} + +void RandRScreen::desktopResized() +{ + if( m_shownDialog != NULL ) + KDialog::centerOnScreen(m_shownDialog, m_screen); +} + +QString RandRScreen::changedMessage() const +{ + if (currentRefreshRate() == -1) + return i18n("New configuration:\nResolution: %1 x %2\nOrientation: %3") + .arg(currentPixelWidth()) + .arg(currentPixelHeight()) + .arg(currentRotationDescription()); + else + return i18n("New configuration:\nResolution: %1 x %2\nOrientation: %3\nRefresh rate: %4") + .arg(currentPixelWidth()) + .arg(currentPixelHeight()) + .arg(currentRotationDescription()) + .arg(currentRefreshRateDescription()); +} + +bool RandRScreen::changedFromOriginal() const +{ + return m_currentSize != m_originalSize || m_currentRotation != m_originalRotation || m_currentRefreshRate != m_originalRefreshRate; +} + +void RandRScreen::proposeOriginal() +{ + m_proposedSize = m_originalSize; + m_proposedRotation = m_originalRotation; + m_proposedRefreshRate = m_originalRefreshRate; +} + +bool RandRScreen::proposedChanged() const +{ + return m_currentSize != m_proposedSize || m_currentRotation != m_proposedRotation || m_currentRefreshRate != m_proposedRefreshRate; +} + +QString RandRScreen::rotationName(int rotation, bool pastTense, bool capitalised) +{ + if (!pastTense) + switch (rotation) { + case RR_Rotate_0: + return i18n("Normal"); + case RR_Rotate_90: + return i18n("Left (90 degrees)"); + case RR_Rotate_180: + return i18n("Upside-down (180 degrees)"); + case RR_Rotate_270: + return i18n("Right (270 degrees)"); + case RR_Reflect_X: + return i18n("Mirror horizontally"); + case RR_Reflect_Y: + return i18n("Mirror vertically"); + default: + return i18n("Unknown orientation"); + } + + switch (rotation) { + case RR_Rotate_0: + return i18n("Normal"); + case RR_Rotate_90: + return i18n("Rotated 90 degrees counterclockwise"); + case RR_Rotate_180: + return i18n("Rotated 180 degrees counterclockwise"); + case RR_Rotate_270: + return i18n("Rotated 270 degrees counterclockwise"); + default: + if (rotation & RR_Reflect_X) + if (rotation & RR_Reflect_Y) + if (capitalised) + return i18n("Mirrored horizontally and vertically"); + else + return i18n("mirrored horizontally and vertically"); + else + if (capitalised) + return i18n("Mirrored horizontally"); + else + return i18n("mirrored horizontally"); + else if (rotation & RR_Reflect_Y) + if (capitalised) + return i18n("Mirrored vertically"); + else + return i18n("mirrored vertically"); + else + if (capitalised) + return i18n("Unknown orientation"); + else + return i18n("unknown orientation"); + } +} + +QPixmap RandRScreen::rotationIcon(int rotation) const +{ + // Adjust icons for current screen orientation + if (!(m_currentRotation & RR_Rotate_0) && rotation & (RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270)) { + int currentAngle = m_currentRotation & (RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270); + switch (currentAngle) { + case RR_Rotate_90: + rotation <<= 3; + break; + case RR_Rotate_180: + rotation <<= 2; + break; + case RR_Rotate_270: + rotation <<= 1; + break; + } + + // Fix overflow + if (rotation > RR_Rotate_270) { + rotation >>= 4; + } + } + + switch (rotation) { + case RR_Rotate_0: + return SmallIcon("up"); + case RR_Rotate_90: + return SmallIcon("back"); + case RR_Rotate_180: + return SmallIcon("down"); + case RR_Rotate_270: + return SmallIcon("forward"); + case RR_Reflect_X: + case RR_Reflect_Y: + default: + return SmallIcon("stop"); + } +} + +QString RandRScreen::currentRotationDescription() const +{ + QString ret = rotationName(m_currentRotation & RotateMask); + + if (m_currentRotation != m_currentRotation & RotateMask) + if (m_currentRotation & RR_Rotate_0) + ret = rotationName(m_currentRotation & (RR_Reflect_X + RR_Reflect_X), true, true); + else + ret += ", " + rotationName(m_currentRotation & (RR_Reflect_X + RR_Reflect_X), true, false); + + return ret; +} + +int RandRScreen::rotationIndexToDegree(int rotation) const +{ + switch (rotation & RotateMask) { + case RR_Rotate_90: + return 90; + + case RR_Rotate_180: + return 180; + + case RR_Rotate_270: + return 270; + + default: + return 0; + } +} + +int RandRScreen::rotationDegreeToIndex(int degree) const +{ + switch (degree) { + case 90: + return RR_Rotate_90; + + case 180: + return RR_Rotate_180; + + case 270: + return RR_Rotate_270; + + default: + return RR_Rotate_0; + } +} + +int RandRScreen::currentPixelWidth() const +{ + return m_pixelSizes[m_currentSize].width(); +} + +int RandRScreen::currentPixelHeight() const +{ + return m_pixelSizes[m_currentSize].height(); +} + +int RandRScreen::currentMMWidth() const +{ + return m_pixelSizes[m_currentSize].width(); +} + +int RandRScreen::currentMMHeight() const +{ + return m_pixelSizes[m_currentSize].height(); +} + +QStringList RandRScreen::refreshRates(int size) const +{ + int nrates; + short* rates = XRRRates(qt_xdisplay(), m_screen, (SizeID)size, &nrates); + + QStringList ret; + for (int i = 0; i < nrates; i++) + ret << refreshRateDirectDescription(rates[i]); + + return ret; +} + +QString RandRScreen::refreshRateDirectDescription(int rate) const +{ + return i18n("Refresh rate in Hertz (Hz)", "%1 Hz").arg(rate); +} + +QString RandRScreen::refreshRateIndirectDescription(int size, int index) const +{ + return i18n("Refresh rate in Hertz (Hz)", "%1 Hz").arg(refreshRateIndexToHz(size, index)); +} + +QString RandRScreen::refreshRateDescription(int size, int index) const +{ + return refreshRates(size)[index]; +} + +bool RandRScreen::proposeRefreshRate(int index) +{ + if (index >= 0 && (int)refreshRates(proposedSize()).count() > index) { + m_proposedRefreshRate = index; + return true; + } + + return false; +} + +int RandRScreen::currentRefreshRate() const +{ + return m_currentRefreshRate; +} + +QString RandRScreen::currentRefreshRateDescription() const +{ + return refreshRateIndirectDescription(m_currentSize, m_currentRefreshRate); +} + +int RandRScreen::proposedRefreshRate() const +{ + return m_proposedRefreshRate; +} + +int RandRScreen::refreshRateHzToIndex(int size, int hz) const +{ + int nrates; + short* rates = XRRRates(qt_xdisplay(), m_screen, (SizeID)size, &nrates); + + for (int i = 0; i < nrates; i++) + if (hz == rates[i]) + return i; + + if (nrates != 0) + // Wrong input Hz! + Q_ASSERT(false); + + return -1; +} + +int RandRScreen::refreshRateIndexToHz(int size, int index) const +{ + int nrates; + short* rates = XRRRates(qt_xdisplay(), m_screen, (SizeID)size, &nrates); + + if (nrates == 0 || index < 0) + return 0; + + // Wrong input Hz! + if(index >= nrates) + return 0; + + return rates[index]; +} + +int RandRScreen::numSizes() const +{ + return m_pixelSizes.count(); +} + +const QSize& RandRScreen::pixelSize(int index) const +{ + return m_pixelSizes[index]; +} + +const QSize& RandRScreen::mmSize(int index) const +{ + return m_mmSizes[index]; +} + +int RandRScreen::sizeIndex(QSize pixelSize) const +{ + for (uint i = 0; i < m_pixelSizes.count(); i++) + if (m_pixelSizes[i] == pixelSize) + return i; + + return -1; +} + +int RandRScreen::rotations() const +{ + return m_rotations; +} + +int RandRScreen::currentRotation() const +{ + return m_currentRotation; +} + +int RandRScreen::currentSize() const +{ + return m_currentSize; +} + +int RandRScreen::proposedRotation() const +{ + return m_proposedRotation; +} + +void RandRScreen::proposeRotation(int newRotation) +{ + m_proposedRotation = newRotation & OrientationMask; +} + +int RandRScreen::proposedSize() const +{ + return m_proposedSize; +} + +bool RandRScreen::proposeSize(int newSize) +{ + if ((int)m_pixelSizes.count() > newSize) { + m_proposedSize = newSize; + return true; + } + + return false; +} + +void RandRScreen::load(KConfig& config) +{ + config.setGroup(QString("Screen%1").arg(m_screen)); + + if (proposeSize(sizeIndex(QSize(config.readNumEntry("width", currentPixelWidth()), config.readNumEntry("height", currentPixelHeight()))))) + proposeRefreshRate(refreshRateHzToIndex(proposedSize(), config.readNumEntry("refresh", currentRefreshRate()))); + + proposeRotation(rotationDegreeToIndex(config.readNumEntry("rotation", 0)) + (config.readBoolEntry("reflectX") ? ReflectX : 0) + (config.readBoolEntry("reflectY") ? ReflectY : 0)); +} + +void RandRScreen::save(KConfig& config) const +{ + config.setGroup(QString("Screen%1").arg(m_screen)); + config.writeEntry("width", currentPixelWidth()); + config.writeEntry("height", currentPixelHeight()); + config.writeEntry("refresh", refreshRateIndexToHz(currentSize(), currentRefreshRate())); + config.writeEntry("rotation", rotationIndexToDegree(currentRotation())); + config.writeEntry("reflectX", (bool)(currentRotation() & ReflectMask) == ReflectX); + config.writeEntry("reflectY", (bool)(currentRotation() & ReflectMask) == ReflectY); +} + +RandRDisplay::RandRDisplay() + : m_valid(true) +{ + // Check extension + Status s = XRRQueryExtension(qt_xdisplay(), &m_eventBase, &m_errorBase); + if (!s) { + m_errorCode = QString("%1, base %1").arg(s).arg(m_errorBase); + m_valid = false; + return; + } + + int major_version, minor_version; + XRRQueryVersion(qt_xdisplay(), &major_version, &minor_version); + + m_version = QString("X Resize and Rotate extension version %1.%1").arg(major_version).arg(minor_version); + + m_numScreens = ScreenCount(qt_xdisplay()); + + // This assumption is WRONG with Xinerama + // Q_ASSERT(QApplication::desktop()->numScreens() == ScreenCount(qt_xdisplay())); + + m_screens.setAutoDelete(true); + for (int i = 0; i < m_numScreens; i++) { + m_screens.append(new RandRScreen(i)); + } + + setCurrentScreen(QApplication::desktop()->primaryScreen()); +} + +bool RandRDisplay::isValid() const +{ + return m_valid; +} + +const QString& RandRDisplay::errorCode() const +{ + return m_errorCode; +} + +int RandRDisplay::eventBase() const +{ + return m_eventBase; +} + +int RandRDisplay::screenChangeNotifyEvent() const +{ + return m_eventBase + RRScreenChangeNotify; +} + +int RandRDisplay::errorBase() const +{ + return m_errorBase; +} + +const QString& RandRDisplay::version() const +{ + return m_version; +} + +void RandRDisplay::setCurrentScreen(int index) +{ + m_currentScreenIndex = index; + m_currentScreen = m_screens.at(m_currentScreenIndex); + Q_ASSERT(m_currentScreen); +} + +int RandRDisplay::screenIndexOfWidget(QWidget* widget) +{ + int ret = QApplication::desktop()->screenNumber(widget); + return ret != -1 ? ret : QApplication::desktop()->primaryScreen(); +} + +int RandRDisplay::currentScreenIndex() const +{ + return m_currentScreenIndex; +} + +void RandRDisplay::refresh() +{ + for (RandRScreen* s = m_screens.first(); s; s = m_screens.next()) + s->loadSettings(); +} + +int RandRDisplay::numScreens() const +{ + return m_numScreens; +} + +RandRScreen* RandRDisplay::screen(int index) +{ + return m_screens.at(index); +} + +RandRScreen* RandRDisplay::currentScreen() +{ + return m_currentScreen; +} + +bool RandRDisplay::loadDisplay(KConfig& config, bool loadScreens) +{ + if (loadScreens) + for (RandRScreen* s = m_screens.first(); s; s = m_screens.next()) + s->load(config); + + return applyOnStartup(config); +} + +bool RandRDisplay::applyOnStartup(KConfig& config) +{ + config.setGroup("Display"); + return config.readBoolEntry("ApplyOnStartup", false); +} + +bool RandRDisplay::syncTrayApp(KConfig& config) +{ + config.setGroup("Display"); + return config.readBoolEntry("SyncTrayApp", false); +} + +void RandRDisplay::saveDisplay(KConfig& config, bool applyOnStartup, bool syncTrayApp) +{ + Q_ASSERT(!config.isReadOnly()); + + config.setGroup("Display"); + config.writeEntry("ApplyOnStartup", applyOnStartup); + config.writeEntry("SyncTrayApp", syncTrayApp); + + for (RandRScreen* s = m_screens.first(); s; s = m_screens.next()) + s->save(config); +} + +void RandRDisplay::applyProposed(bool confirm) +{ + for (int screenIndex = 0; screenIndex < numScreens(); screenIndex++) { + if (screen(screenIndex)->proposedChanged()) { + if (confirm) + screen(screenIndex)->applyProposedAndConfirm(); + else + screen(screenIndex)->applyProposed(); + } + } +} + +int RandRScreen::pixelCount( int index ) const +{ + QSize sz = pixelSize(index); + return sz.width() * sz.height(); +} + +#include "randr.moc" diff --git a/kcontrol/randr/randr.desktop b/kcontrol/randr/randr.desktop new file mode 100644 index 000000000..f67165d20 --- /dev/null +++ b/kcontrol/randr/randr.desktop @@ -0,0 +1,216 @@ +[Desktop Entry] +Icon=randr +Type=Application +Exec=kcmshell randr +X-KDE-Library=randr +#X-KDE-Init=randr +X-KDE-Test-Module=true + +Name=Size & Orientation +Name[af]=Grootte & Ooriëntasie +Name[ar]=القياس و الإتجاه +Name[be]=Памеры і арыентацыя +Name[bg]=Размер и ротация на екрана +Name[bn]=আকৃতি এবং দিশা +Name[br]=Ment ha reteradur +Name[bs]=Veličina i orijentacija +Name[ca]=Mida i orientació +Name[cs]=Velikost a orientace +Name[csb]=Miara ë pòłóżenié +Name[cy]=Maint & Cyfeiriad +Name[da]=Størrelse & Orientering +Name[de]=Größe & Orientierung +Name[el]=Μέγεθος & Προσανατολισμός +Name[eo]=Grandeco kaj direkto +Name[es]=Tamaño y orientación +Name[et]=Suurus ja orientatsioon +Name[eu]=Tamaina eta orientazioa +Name[fa]=اندازه و جهت +Name[fi]=Koko ja suunta +Name[fr]=Taille et orientation +Name[fy]=Grutte en oriïntaasje +Name[ga]=Méid agus Treoshuíomh +Name[gl]=Tamaño e Orientación +Name[he]=גודל וכיוון +Name[hi]=आकार व दिशा निर्धारण +Name[hr]=Veličina i orijentacija +Name[hu]=Képernyőfelbontás +Name[is]=Stærð og snúningur +Name[it]=Dimensione e orientazione +Name[ja]=サイズと配置 +Name[ka]=ზომა და ორიენტაცია +Name[kk]=Өлшем және бағыт +Name[km]=ទំហំ & ទិស +Name[ko]=해상도와 회전 +Name[lt]=Dydis ir orientacija +Name[lv]=Izmērs un orientācija +Name[mk]=Големина и ориентација +Name[mn]=Хэмжээ & Чиглэл +Name[ms]=Saiz & Orientasi +Name[mt]=Daqs u Orjentazzjoni +Name[nb]=Størrelse og retning +Name[nds]=Grött & Utrichten +Name[ne]=साइज र अभिमुखीकरण +Name[nl]=Grootte en oriëntatie +Name[nn]=Storleik og retning +Name[pa]=ਆਕਾਰ ਅਤੇ ਸਥਿਤੀ +Name[pl]=Rozmiar i orientacja +Name[pt]=Tamanho e Orientação +Name[pt_BR]=Tamanho & Orientação +Name[ro]=Mărime și orientare +Name[ru]=Размер и ориентация +Name[rw]=Ingano & Icyerekezo +Name[se]=Sturrodat ja joraheapmi +Name[sk]=Veľkosť a orientácia +Name[sl]=Velikost in orientacija +Name[sr]=Величина и оријентација +Name[sr@Latn]=Veličina i orijentacija +Name[sv]=Storlek och orientering +Name[ta]=அளவும் திசையும் +Name[tg]=Андоза ва шиносоӣ +Name[th]=ขนาดและการวางแนว +Name[tr]=Konum ve Boyut +Name[tt]=Ülçäm belän Yünälü +Name[uk]=Розмір та орієнтація +Name[uz]=Oʻlchami va joylashishi +Name[uz@cyrillic]=Ўлчами ва жойлашиши +Name[vi]=Cỡ & Hướng +Name[wa]=Grandeu eyet oryintåcion +Name[zh_CN]=大小和方向 +Name[zh_TW]=尺寸及定位 + +Comment=Resize and Rotate your display +Comment[af]=Hervergroot en Roteer jou skerm +Comment[ar]=غيّر القياس و دوران شاشتك +Comment[be]=Змяняе памеры і перагортвае ваш экран +Comment[bg]=Настройване на размера и завъртането на екрана +Comment[bn]=আপনার ডিসপ্লের আকৃতি এবং দিশা পরিবর্তন করুন +Comment[br]=Adventañ ha treiñ ho skramm +Comment[bs]=Podesite veličinu i rotirajte vaš ekran +Comment[ca]=Amida i gira la vostra pantalla +Comment[cs]=Změna velikosti a rotace obrazovky +Comment[csb]=Zjinaka miarë ë pòłożenia ekranu +Comment[cy]=Newid Maint a Cylchdroi eich dangosydd +Comment[da]=Ændrer størrelse og roterer din visning +Comment[de]=Die Größe und Ausrichtung der Anzeige ändern +Comment[el]=Αλλαγή μεγέθους και Περιστροφή της οθόνης σας +Comment[eo]=Grandigi kaj turni vian ekranblokon +Comment[es]=Ajustar el tamaño y rotar la pantalla +Comment[et]=Oma vaate suuruse muutmine ja pööramine +Comment[eu]=Aldatu tamaina eta biratu zure pantaila +Comment[fa]=تغییر اندازه و چرخش صفحه نمایش شما +Comment[fi]=Resoluution muuttaminen ja ruudun kääntäminen +Comment[fr]=Redimensionner et Tourner votre affichage +Comment[fy]=Wizigje it skermgrutte en rotearje dizze +Comment[gl]=Redimensionar e rotar a sua pantalla +Comment[he]=שנה את גודלה של התצוגה שלך וסובב אותה +Comment[hi]=अपने शक्ल-सूरत(डिस्प्ले) का आकार बदलें तथा घुमाएँ +Comment[hr]=Promijena veličine i orijentacije zaslona +Comment[hu]=A képernyő átméretezése, elforgatása +Comment[is]=Breyta stærð skjásins og snúa honum +Comment[it]=Ridimensiona e ruota il tuo display +Comment[ja]=ディスプレイのリサイズと回転 +Comment[ka]=ეკრანის ზომის და ორიენტაციის შეცვლა +Comment[kk]=Дисплейдің өлшемін және бағытын өзгерту +Comment[km]=ប្ដូរ​ទំហំ និង​បង្វិល​ការ​បង្ហាញ​របស់​អ្នក +Comment[ko]=디스플레이의 크기와 방향 조정 +Comment[lt]=Keisti ekrano dydį ir orientaciją +Comment[lv]=Maina izmēru un rotē Jūsu ekrānu +Comment[mk]=Сменете ја големината и ротацијата на вашиот екран +Comment[mn]=Дэлгэцийнхээ хэмжээг өөрчилөх ба эргүүлэх +Comment[ms]=Saiz Semula dan Putar paparan anda +Comment[mt]=Ibdel id-daqs jew dawwar l-iskrin +Comment[nb]=Endre størrelsen på og rotere skjermbildet +Comment[nds]=Grött un Utrichten vun den Schirm ännern +Comment[ne]=तपाईँको प्रदर्शन रिसाइज गर्नुहोस् र घुमाउनुहोस् +Comment[nl]=Wijzig de schermgrootte en roteer deze +Comment[nn]=Endra storleiken på og roter skjermbiletet +Comment[pa]=ਆਪਣੀ ਝਲਕ ਨੂੰ ਮੁੜ-ਆਕਾਰ ਕਰੋ ਤੇ ਘੁੰਮਾਓ +Comment[pl]=Zmiana rozmiaru i orientacji ekranu +Comment[pt]=Dimensione e rode o seu ecrã +Comment[pt_BR]=Redimensiona e Rotaciona a sua tela +Comment[ro]=Redimensionează și rotește ecranul dumneavoastră +Comment[ru]=Изменение размера и ориентации экрана +Comment[rw]=Guhindura ingano no Kuzengurutsa iyerekana ryawe +Comment[se]=Rievdat šearpma sturrodaga ja joraheami +Comment[sk]=Zmení veľkosť a otočí váš displej +Comment[sl]=Spremenite velikost in obrnite zaslon +Comment[sr]=Промените величину и оријентацију вашег екрана +Comment[sr@Latn]=Promenite veličinu i orijentaciju vašeg ekrana +Comment[sv]=Storleksändring och rotation av skärmen +Comment[ta]=தங்கள் காட்சியை அளவு மாற்று மற்றும் சுழற்று +Comment[tg]=Андозаи намоиши худро дигаргун созед ва чаппа кунед +Comment[th]=ปรับแต่งการแสดงผลของคุณ +Comment[tr]=Ekranı boyutlandır ve çevir +Comment[tt]=Kürägeñneñ Ülçäme belän Borılışı +Comment[uk]=Зміна розміру та обертання дисплею +Comment[uz]=Ekraning oʻlchamini oʻzgartirish va burish +Comment[uz@cyrillic]=Экранинг ўлчамини ўзгартириш ва буриш +Comment[vi]=Đổi cỡ và Quay màn hình của bạn +Comment[wa]=Candjî l' grandeu eyet tourner li håynaedje +Comment[zh_CN]=更改显示大小和旋转显示 +Comment[zh_TW]=調整大小及旋轉你的螢幕 + +Keywords=resize,rotate,display,color,depth,size,horizontal,vertical +Keywords[ar]=تغيير حجم، تدوير، لف، عرض، لون، عمق، حجم، أفقي، عمودي +Keywords[be]=Змена памеру,Перагортванне,Дысплей,Экран,Колер,Глыбіня,Памер,Гарызантальны,Вертыкальны,resize,rotate,display,color,depth,size,horizontal,vertical +Keywords[bg]=ротация, завъртане, екран, размер, промяна, resize, rotate, display, color, depth, size, horizontal, vertical +Keywords[bs]=resize,rotate,display,color,depth,size,horizontal,vertical,veličina,rotacija,ekran,boja,dubina,uspravno,vodoravno +Keywords[ca]=amida,gira,pantalla,color,profunditat,mida,horitzontal,vertical +Keywords[cs]=velikost,rotace,obrazovka,barva,hloubka,horizontální,vertikální +Keywords[csb]=zjinaka miarë,òbrócenié,pòłożenié,miara,ekran,farwa,farwë,głãbòkòsc farwów,wielëna farwów,knôdno,hòrizontalno +Keywords[cy]=newid maint,cylchdroi,dangos,lliw,dyfnder,maint,llorweddol,fertigol +Keywords[da]=ændr,rotér,visning,farve,dybde,størrelse,vandret,lodret +Keywords[de]=Größe ändern,rotieren,anzeigen,Farbe,Tiefe,Größe,horizontal,vertikal,waagrecht,senkrecht +Keywords[el]=αλλαγή μεγέθους,περιστροφή,οθόνη,χρώμα,βάθος,μέγεθος,οριζόντια,κατακόρυφα +Keywords[en_GB]=resize,rotate,display,colour,depth,size,horizontal,vertical +Keywords[eo]=grandigi,turni,direkto,ekrano,ekranbloko,grandeco,koloro,horizontala,vertikala +Keywords[es]=redimensionar,rotar,mostrar,color,colores,tamaño,horizontal,vertical +Keywords[et]=suuruse muutmine,pööramine,monitor,ekraan,värv,sügavus,suurus,horisontaalne,vertikaalne +Keywords[eu]=tamaina aldatu,biratu,pantaila,kolorea,sakonera,tamaina,horizontala, bertikala +Keywords[fa]=تغییر اندازه، چرخش، نمایش، رنگ، عمق، اندازه، افقی، عمودی +Keywords[fi]=vaihda kokoa,käännä,näyttö,väri,syvyys,koko,vaakasuora,pystysuora +Keywords[fr]=redimensionner,rotation,affichage,couleur,profondeur,taille, horizontal,vertical +Keywords[fy]=grutte wizigje,rotearje,draaie,display,byldskerm,skerm,monitor,djipte,grutte,horizontaal,vertikaal +Keywords[ga]=athraigh méid,rothlaigh,scáileán,dath,doimhneacht,méid,cothrománach,ingearach +Keywords[gl]=redimensionar,rotar,pantalla,cor,resolución,tamaño,horizontal,vertical +Keywords[he]=שנה גודל,סובב,תצוגה,צבע,עומק,גודל,אופקי,אנכי, resize,rotate,display,color,depth,size,horizontal,vertical +Keywords[hi]=नया-आकार,घुमाएँ,प्रकटन,रंग,गहराई,आकार,आड़ा,खड़ा +Keywords[hr]=resize,rotate,display,color,depth,size,horizontal,vertical,promjena,veličina,rotacija,zaslon,boja,dubina,vodoravno,uspravno +Keywords[hu]=átméretezés,elforgatás,képernyő,szín,színmélység,vízszintes,függőleges +Keywords[is]=resize,rotate,display,color,depth,size,horizontal,vertical,stækka,minnka,snúa +Keywords[it]=ridimensiona,ruota,schermo,colori,profondità di colore,dimensione,orizzontale,verticale +Keywords[ja]=リサイズ,回転,ディスプレイ,色,深度,サイズ,水平,垂直 +Keywords[km]=ប្ដូរ​ទំហំ,បង្វិល,បង្ហាញ,ពណ៌,ជម្រៅ,ទំហំ,ផ្ដេក,បញ្ឈរ +Keywords[lt]=resize,rotate,display,color,depth,size,horizontal,vertical,keisti dydį,pasukti,sukti,ekranas,spalva,gylis,dydis,horizontalus,vertikalus +Keywords[lv]=mainīt izmēru,rotēt,ekrāns,krāsa,dziļums,izmērs,horizontāls,vertikāls +Keywords[mk]=resize,rotate,display,color,depth,size,horizontal,vertical,смени големина,ротира,прикажи,екран,боја,длабочина,големина,хоризонтално,вертикално +Keywords[mn]=хэмжээ өөрчилөх,эргүүлэх,дэлгэц,өнгө,гүн,хэмжээ,хэвтээ,босоо +Keywords[nb]=størrelse,rotere,skjerm,farge,dybde,vannrett,loddrett +Keywords[nds]=Grött ännern,dreihen,display,Dorstellen,Klöör,Deep,Grött,waagrecht,pielliek +Keywords[ne]=रिसाइज, घुमाउनुहोस्, प्रदर्शन, गहिराइ, साइज, तेर्सो, ठाडो +Keywords[nl]=grootte wijzigen,roteren,draaien,display,beeldscherm,scherm,monitor,diepte,grootte,horizontaal,verticaal +Keywords[nn]=storleik,rotera,skjerm,farge,djupn,vassrett,loddrett +Keywords[pa]=ਮੁੜ-ਅਕਾਰ,ਘੁੰਮਾਉ,ਝਲਕ,ਰੰਗ,ਡੂੰਘਾਈ,ਅਕਾਰ,ਖਿਤਿਜੀ,ਲੰਬਕਾਰੀ +Keywords[pl]=zmiana rozmiaru,obrót,orientacja,rozmiar,ekran,kolor,kolory,głębokość kolorów,liczba kolorów,pionowo,poziomo +Keywords[pt]=redimensionar,rodar,ecrã,cor,profundidade,tamanho,horizontal,vertical +Keywords[pt_BR]=redimensionar,rotacionar,display,cor,produndidade,tamanho,horizontal,vertical +Keywords[ro]=redimensionare,rotire,ecran,monitor,culoare,adîncime,mărime,orizontal,vertical +Keywords[ru]=resize,rotate,display,color,depth,size,horizontal,vertical,экран +Keywords[rw]=guhindura ingano,kuzengurutsa,kwerekana,ibara,ubujyakuzimu,ingano,bitambitse,bihagaritse +Keywords[se]=sturrodat,jorahit,šearbma,ivdni,čikŋodat,láskut,ceaggut +Keywords[sk]=zmena veľkosti,rotácia,displej,farba,hĺbka,veľkosť,horizontálne,vertikálne +Keywords[sl]=spremeni,velikost,zavrti,zaslon,barva,globina,navpičn,vodoravn +Keywords[sr]=resize,rotate,display,color,depth,size,horizontal,vertical,промена,величина,ротација,екран,боја,дубина,водоравно,усправно +Keywords[sr@Latn]=resize,rotate,display,color,depth,size,horizontal,vertical,promena,veličina,rotacija,ekran,boja,dubina,vodoravno,uspravno +Keywords[sv]=ändra storlek,rotera,skärm,färg,djup,storlek,horisontell,vertikal +Keywords[ta]=அளவுமாற்று, சுழற்று, காட்டு,வண்ணம், ஆழம்,அளவு,இடவலம்,மேலிருந்து கீழ் +Keywords[th]=ปรับขนาด,หมุน,จอภาพ,สี,ความลึก,ขนาด,แนวราบ,แนวดิ่ง +Keywords[tr]=boyutlandır,çevir,görünüm,renk,derinlik,boyut,dikey,yatay +Keywords[uk]=зміна розміру,розмір,обертання,дисплей,колір,глибина,горизонтальний,вертикальний +Keywords[uz]=oʻlchamini oʻzgartirish,burish,ekran,rang,chuqurlik,oʻlcham,gorizantal,vertikal +Keywords[uz@cyrillic]=ўлчамини ўзгартириш,буриш,экран,ранг,чуқурлик,ўлчам,горизантал,вертикал +Keywords[vi]=đổi cỡ,quay,hiển thị,màu,độ sâu,cỡ,ngang,dọc +Keywords[wa]=candjî l' grandeu,tourner,håynaedje,coleur,parfondeu,grandeu,di coûtchî,d' astampé +Keywords[zh_CN]=resize,rotate,display,color,depth,size,horizontal,vertical,更改大小,旋转,显示,颜色,深度,大小,垂直,水平 +Keywords[zh_TW]=resize,rotate,display,color,depth,size,horizontal,vertical,調整大小,旋轉,螢幕,顏色,深度,尺寸,垂直,水平 diff --git a/kcontrol/randr/randr.h b/kcontrol/randr/randr.h new file mode 100644 index 000000000..c7eb240cf --- /dev/null +++ b/kcontrol/randr/randr.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2002,2003 Hamish Rodda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __RANDR_H__ +#define __RANDR_H__ + +#include +#include +#include + +#include +#include + +class KTimerDialog; +class RandRScreenPrivate; + +class RandRScreen : public QObject +{ + Q_OBJECT + +public: + enum orientations { + Rotate0 = 0x1, + Rotate90 = 0x2, + Rotate180 = 0x4, + Rotate270 = 0x8, + RotateMask = 15, + RotationCount = 4, + ReflectX = 0x10, + ReflectY = 0x20, + ReflectMask = 48, + OrientationMask = 63, + OrientationCount = 6 + }; + + RandRScreen(int screenIndex); + ~RandRScreen(); + + void loadSettings(); + void setOriginal(); + + bool applyProposed(); + + /** + * @returns false if the user did not confirm in time, or cancelled, or the change failed + */ + bool applyProposedAndConfirm(); + +public slots: + bool confirm(); + +public: + QString changedMessage() const; + + bool changedFromOriginal() const; + void proposeOriginal(); + + bool proposedChanged() const; + + static QString rotationName(int rotation, bool pastTense = false, bool capitalised = true); + QPixmap rotationIcon(int rotation) const; + QString currentRotationDescription() const; + + int rotationIndexToDegree(int rotation) const; + int rotationDegreeToIndex(int degree) const; + + /** + * Refresh rate functions. + */ + QStringList refreshRates(int size) const; + + QString refreshRateDirectDescription(int rate) const; + QString refreshRateIndirectDescription(int size, int index) const; + QString refreshRateDescription(int size, int index) const; + + int currentRefreshRate() const; + QString currentRefreshRateDescription() const; + + // Refresh rate hz <==> index conversion + int refreshRateHzToIndex(int size, int hz) const; + int refreshRateIndexToHz(int size, int index) const; + + /** + * Screen size functions. + */ + int numSizes() const; + const QSize& pixelSize(int index) const; + const QSize& mmSize(int index) const; + int pixelCount(int index) const; + + /** + * Retrieve the index of a screen size with a specified pixel size. + * + * @param pixelSize dimensions of the screen in pixels + * @returns the index of the requested screen size + */ + int sizeIndex(QSize pixelSize) const; + + int rotations() const; + + /** + * Current setting functions. + */ + int currentPixelWidth() const; + int currentPixelHeight() const; + int currentMMWidth() const; + int currentMMHeight() const; + + int currentRotation() const; + int currentSize() const; + + /** + * Proposed setting functions. + */ + int proposedSize() const; + bool proposeSize(int newSize); + + int proposedRotation() const; + void proposeRotation(int newRotation); + + int proposedRefreshRate() const; + /** + * Propose a refresh rate. + * Please note that you must propose the target size first for this to work. + * + * @param index the index of the refresh rate (not a refresh rate in hz!) + * @returns true if successful, false otherwise. + */ + bool proposeRefreshRate(int index); + + /** + * Configuration functions. + */ + void load(KConfig& config); + void save(KConfig& config) const; + +private: + RandRScreenPrivate* d; + + int m_screen; + + QValueList m_pixelSizes; + QValueList m_mmSizes; + int m_rotations; + + int m_originalRotation; + int m_originalSize; + int m_originalRefreshRate; + + int m_currentRotation; + int m_currentSize; + int m_currentRefreshRate; + + int m_proposedRotation; + int m_proposedSize; + int m_proposedRefreshRate; + + KTimerDialog* m_shownDialog; + +private slots: + void desktopResized(); + void shownDialogDestroyed(); +}; + +typedef QPtrList ScreenList; + +class RandRDisplay +{ +public: + RandRDisplay(); + + bool isValid() const; + const QString& errorCode() const; + const QString& version() const; + + int eventBase() const; + int screenChangeNotifyEvent() const; + int errorBase() const; + + int screenIndexOfWidget(QWidget* widget); + + int numScreens() const; + RandRScreen* screen(int index); + + void setCurrentScreen(int index); + int currentScreenIndex() const; + RandRScreen* currentScreen(); + + void refresh(); + + /** + * Loads saved settings. + * + * @param config the KConfig object to load from + * @param loadScreens whether to call RandRScreen::load() for each screen + * @retuns true if the settings should be applied on KDE startup. + */ + bool loadDisplay(KConfig& config, bool loadScreens = true); + void saveDisplay(KConfig& config, bool applyOnStartup, bool syncTrayApp); + + static bool applyOnStartup(KConfig& config); + static bool syncTrayApp(KConfig& config); + + void applyProposed(bool confirm = true); + +private: + int m_numScreens; + int m_currentScreenIndex; + RandRScreen* m_currentScreen; + ScreenList m_screens; + + bool m_valid; + QString m_errorCode; + QString m_version; + + int m_eventBase; + int m_errorBase; +}; + +#endif diff --git a/kcontrol/samba/AUTHORS b/kcontrol/samba/AUTHORS new file mode 100644 index 000000000..0bebeaa06 --- /dev/null +++ b/kcontrol/samba/AUTHORS @@ -0,0 +1,32 @@ +Samba Status Module: + + Michael Glauche + +Conversion to kcontrol applet: + + Matthias Hoelzer + +Use of KProcess instead of popen, and more error checking + + David Faure + +Added Window and Column resizing: + + Harald Koschinski + +KTabListBox to QListView conversion and use of QLayout: + + Wilco Greven + +Conversion to KDE2 kcontrol module +Corrected parsing of the smbstatus output + (now works also with shares containing spaces "a share name") +Added three tab pages +-one for viewing mounted network resources (Samba and NFS, works on Linux, maybe Solaris) +-one for viewing samba logfile +-one for some filtering of samba logfile +Added support for viewing NFS-exports mounted by remote hosts on the first +tab + + Alexander Neundorf + diff --git a/kcontrol/samba/Makefile.am b/kcontrol/samba/Makefile.am new file mode 100644 index 000000000..42c3f6618 --- /dev/null +++ b/kcontrol/samba/Makefile.am @@ -0,0 +1,15 @@ +kde_module_LTLIBRARIES = kcm_samba.la + +kcm_samba_la_SOURCES = main.cpp ksmbstatus.cpp kcmsambaimports.cpp kcmsambalog.cpp kcmsambastatistics.cpp + +kcm_samba_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_samba_la_LIBADD = $(LIB_KIO) + +AM_CPPFLAGS = $(all_includes) + +METASOURCES = AUTO + +messages: + $(XGETTEXT) $(kcm_samba_la_SOURCES) -o $(podir)/kcmsamba.pot + +xdg_apps_DATA = smbstatus.desktop diff --git a/kcontrol/samba/kcmsambaimports.cpp b/kcontrol/samba/kcmsambaimports.cpp new file mode 100644 index 000000000..a88e2448f --- /dev/null +++ b/kcontrol/samba/kcmsambaimports.cpp @@ -0,0 +1,95 @@ +/* + * kcmsambaimports.cpp + * + * Copyright (c) 2000 Alexander Neundorf + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include "kcmsambaimports.h" +#include "kcmsambaimports.moc" + +#include +#include + +#include +#include + +#include + +ImportsView::ImportsView(QWidget * parent, KConfig *config, const char * name ) + : QWidget (parent, name) + ,configFile(config) + ,list(this) +{ + QBoxLayout *topLayout = new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + topLayout->setAutoAdd(true); + + list.setAllColumnsShowFocus(true); + list.setShowSortIndicator(true); + list.setMinimumSize(425,200); + list.addColumn(i18n("Type"), 50); + list.addColumn(i18n("Resource"), 200); + list.addColumn(i18n("Mounted Under"), 190); + + QWhatsThis::add( this, i18n("This list shows the Samba and NFS shared" + " resources mounted on your system from other hosts. The \"Type\"" + " column tells you whether the mounted resource is a Samba or an NFS" + " type of resource. The \"Resource\" column shows the descriptive name" + " of the shared resource. Finally, the third column, which is labeled" + " \"Mounted under\" shows the location on your system where the shared" + " resource is mounted.") ); + + timer.start(10000); + QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(updateList())); + updateList(); +} + +void ImportsView::updateList() +{ + list.clear(); + char *e; + char buf[250]; + QCString s(""),strSource, strMount, strType; + FILE *f=popen("mount","r"); + if (f==0) return; + do + { + e=fgets(buf,250,f); + if (e!=0) + { + s=buf; + if ((s.contains(" nfs ")) || (s.contains(" smbfs "))) + { + strSource=s.left(s.find(" on /")); + strMount=s.mid(s.find(" on /")+4,s.length()); + if ((s.contains(" nfs ")) || (s.contains("/remote on "))) + strType="NFS"; + else if (s.contains(" smbfs ")) + strType="SMB"; + int pos(strMount.find(" type ")); + if (pos==-1) pos=strMount.find(" read/"); + strMount=strMount.left(pos); + new QListViewItem(&list,strType,strSource,strMount); + }; + }; + } + while (!feof(f)); + pclose(f); +} + diff --git a/kcontrol/samba/kcmsambaimports.h b/kcontrol/samba/kcmsambaimports.h new file mode 100644 index 000000000..5cd1c5e92 --- /dev/null +++ b/kcontrol/samba/kcmsambaimports.h @@ -0,0 +1,47 @@ +/* + * kcmsambaimports.h + * + * Copyright (c) 2000 Alexander Neundorf + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef kcmsambaimports_h_included +#define kcmsambaimports_h_included + +#include +#include +#include + +class ImportsView: public QWidget +{ + Q_OBJECT + public: + ImportsView(QWidget *parent, KConfig *config=0, const char * name=0); + virtual ~ImportsView() {}; + void saveSettings() {}; + void loadSettings() {}; +private: + KConfig *configFile; + QListView list; + QTimer timer; +private slots: + void updateList(); +}; + +#endif // main_included diff --git a/kcontrol/samba/kcmsambalog.cpp b/kcontrol/samba/kcmsambalog.cpp new file mode 100644 index 000000000..c4f01b464 --- /dev/null +++ b/kcontrol/samba/kcmsambalog.cpp @@ -0,0 +1,253 @@ +/* + * kcmsambalog.cpp + * + * Copyright (c) 2000 Alexander Neundorf + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include + +#include "kcmsambalog.h" +#include "kcmsambalog.moc" + +#define LOG_SCREEN_XY_OFFSET 10 + +LogView::LogView(QWidget *parent,KConfig *config, const char *name) +: QWidget (parent, name) +,configFile(config) +,filesCount(0) +,connectionsCount(0) +,logFileName("/var/log/samba.log",this) +,label(&logFileName,i18n("Samba log file: "),this) +,viewHistory(this) +,showConnOpen(i18n("Show opened connections"),this) +,showConnClose(i18n("Show closed connections"),this) +,showFileOpen(i18n("Show opened files"),this) +,showFileClose(i18n("Show closed files"),this) +,updateButton(i18n("&Update"),this) +{ + QVBoxLayout *mainLayout=new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + QHBoxLayout *leLayout=new QHBoxLayout(mainLayout); + leLayout->addWidget(&label); + leLayout->addWidget(&logFileName,1); + mainLayout->addWidget(&viewHistory,1); + QGridLayout *subLayout=new QGridLayout(mainLayout,2,2); + subLayout->addWidget(&showConnOpen,0,0); + subLayout->addWidget(&showConnClose,1,0); + subLayout->addWidget(&showFileOpen,0,1); + subLayout->addWidget(&showFileClose,1,1); + mainLayout->addWidget(&updateButton,0,Qt::AlignLeft); + + QWhatsThis::add( &logFileName, i18n("This page presents the contents of" + " your samba log file in a friendly layout. Check that the correct log" + " file for your computer is listed here. If you need to, correct the name" + " or location of the log file, and then click the \"Update\" button.") ); + + QWhatsThis::add( &showConnOpen, i18n("Check this option if you want to" + " view the details for connections opened to your computer.") ); + + QWhatsThis::add( &showConnClose, i18n("Check this option if you want to" + " view the events when connections to your computer were closed.") ); + + QWhatsThis::add( &showFileOpen, i18n("Check this option if you want to" + " see the files which were opened on your computer by remote users." + " Note that file open/close events are not logged unless the samba" + " log level is set to at least 2 (you cannot set the log level" + " using this module).") ); + + QWhatsThis::add( &showFileClose, i18n("Check this option if you want to" + " see the events when files opened by remote users were closed." + " Note that file open/close events are not logged unless the samba" + " log level is set to at least 2 (you cannot set the log level" + " using this module).") ); + + QWhatsThis::add( &updateButton, i18n("Click here to refresh the information" + " on this page. The log file (shown above) will be read to obtain the" + " events logged by samba.") ); + + logFileName.setURL("/var/log/samba.log"); + + viewHistory.setAllColumnsShowFocus(TRUE); + viewHistory.setFocusPolicy(QWidget::ClickFocus); + viewHistory.setShowSortIndicator(true); + + viewHistory.addColumn(i18n("Date & Time"),130); + viewHistory.addColumn(i18n("Event"),150); + viewHistory.addColumn(i18n("Service/File"),210); + viewHistory.addColumn(i18n("Host/User"),150); + + QWhatsThis::add( &viewHistory, i18n("This list shows details of the events" + " logged by samba. Note that events at the file level are not logged" + " unless you have configured the log level for samba to 2 or greater.

      " + " As with many other lists in KDE, you can click on a column heading" + " to sort on that column. Click again to change the sorting direction" + " from ascending to descending or vice versa.

      " + " If the list is empty, try clicking the \"Update\" button. The samba" + " log file will be read and the list refreshed.") ); + + showConnOpen.setChecked(TRUE); + showConnClose.setChecked(TRUE); + showFileOpen.setChecked(FALSE); + showFileClose.setChecked(FALSE); + + connect(&updateButton,SIGNAL(clicked()),this,SLOT(updateList())); + emit contentsChanged(&viewHistory,0,0); + + label.setMinimumSize(label.sizeHint()); + logFileName.setMinimumSize(250,logFileName.sizeHint().height()); + viewHistory.setMinimumSize(425,200); + showConnOpen.setMinimumSize(showConnOpen.sizeHint()); + showConnClose.setMinimumSize(showConnClose.sizeHint()); + showFileOpen.setMinimumSize(showFileOpen.sizeHint()); + showFileClose.setMinimumSize(showFileClose.sizeHint()); + updateButton.setFixedSize(updateButton.sizeHint()); +} + +void LogView::loadSettings() +{ + if (configFile==0) return; + configFile->setGroup(LOGGROUPNAME); + logFileName.setURL(configFile->readPathEntry( "SambaLogFile", "/var/log/samba.log")); + + showConnOpen.setChecked(configFile->readBoolEntry( "ShowConnectionOpen", TRUE)); + showConnClose.setChecked(configFile->readBoolEntry( "ShowConnectionClose", FALSE)); + showFileOpen.setChecked(configFile->readBoolEntry( "ShowFileOpen", TRUE)); + showFileClose.setChecked(configFile->readBoolEntry( "ShowFileClose", FALSE)); +} + +void LogView::saveSettings() +{ + if (configFile==0) return; + configFile->setGroup(LOGGROUPNAME); + configFile->writePathEntry( "SambaLogFile", logFileName.url()); + + configFile->writeEntry( "ShowConnectionOpen", showConnOpen.isChecked()); + configFile->writeEntry( "ShowConnectionClose", showConnClose.isChecked()); + configFile->writeEntry( "ShowFileOpen", showFileOpen.isChecked()); + configFile->writeEntry( "ShowFileClose", showFileClose.isChecked()); +} + +#define CONN_OPEN " connect to service " +#define CONN_CLOSE " closed connection to service " +#define FILE_OPEN " opened file " +#define FILE_CLOSE " closed file " + +//caution ! high optimized code :-) +void LogView::updateList() +{ + QFile logFile(logFileName.url()); + if (logFile.open(IO_ReadOnly)) + { + QApplication::setOverrideCursor(waitCursor); + viewHistory.clear(); + filesCount=0; + connectionsCount=0; + + int connOpenLen(strlen(CONN_OPEN)); + int connCloseLen(strlen(CONN_CLOSE)); + int fileOpenLen(strlen(FILE_OPEN)); + int fileCloseLen(strlen(FILE_CLOSE)); + + char buf[400]; + char *c1, *c2, *c3, *c4, *c, time[25]; + int timeRead(0); + + while (!logFile.atEnd()) + { + logFile.readLine(buf,sizeof(buf)); + timeRead=0; + if (buf[0]=='[') + { + if (strlen(buf)>11) + if (buf[5]=='/') + { + buf[20]='\0'; + strncpy(time,buf+1, sizeof(time)); + time[sizeof(time)-1] = '\0'; + timeRead=1; + }; + }; + if (timeRead==0) + { + c1=0; + c2=0; + c3=0; + c4=0; + if (showConnOpen.isChecked()) c1=strstr(buf,CONN_OPEN); + if (c1==0) + { + if (showConnClose.isChecked()) c2=strstr(buf,CONN_CLOSE); + if (c2==0) + { + if (showFileOpen.isChecked()) c3=strstr(buf,FILE_OPEN); + if (c3==0) + { + if (showFileClose.isChecked()) c4=strstr(buf,FILE_CLOSE); + if (c4==0) continue; + }; + }; + }; + if (c1!=0) + { + c=strstr(buf," as user"); + *c='\0'; + *c1='\0'; + new QListViewItemX(&viewHistory,time,I18N_NOOP("CONNECTION OPENED"),c1+connOpenLen,buf+2); + connectionsCount++; + } + else if (c2!=0) + { + *c2='\0'; + new QListViewItemX(&viewHistory,time,I18N_NOOP("CONNECTION CLOSED"),c2+connCloseLen,buf+2); + } + else if (c3!=0) + { + c=strstr(buf," read="); + *c='\0'; + *c3='\0'; + new QListViewItemX(&viewHistory,time,I18N_NOOP(" FILE OPENED"),c3+fileOpenLen,buf+2); + filesCount++; + } + else if (c4!=0) + { + c=strstr(buf," (numopen="); + *c='\0'; + *c4='\0'; + new QListViewItemX(&viewHistory,time,I18N_NOOP(" FILE CLOSED"),c4+fileCloseLen,buf+2); + }; + }; + }; + logFile.close(); + emit contentsChanged(&viewHistory, filesCount, connectionsCount); + QApplication::restoreOverrideCursor(); + } + else + { + QString tmp = i18n("Could not open file %1").arg(logFileName.url()); + KMessageBox::error(this,tmp); + }; +} + diff --git a/kcontrol/samba/kcmsambalog.h b/kcontrol/samba/kcmsambalog.h new file mode 100644 index 000000000..03e22f872 --- /dev/null +++ b/kcontrol/samba/kcmsambalog.h @@ -0,0 +1,86 @@ +/* + * kcmsambalog.h + * + * Copyright (c) 2000 Alexander Neundorf +* + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#ifndef kcmsambalog_h_included +#define kcmsambalog_h_included + +#include +#include +#include +#include +#include +#include +#include + +#include + +#define LOGGROUPNAME "SambaLogFileSettings" + +class LogView: public QWidget +{ + Q_OBJECT + public: + LogView(QWidget *parent=0, KConfig *config=0, const char *name=0); + virtual ~LogView() {}; + void saveSettings(); + void loadSettings(); + private: + KConfig *configFile; + int filesCount, connectionsCount; + KURLRequester logFileName; + QLabel label; + QListView viewHistory; + QCheckBox showConnOpen, showConnClose, showFileOpen, showFileClose; + QPushButton updateButton; + private slots: + void updateList(); + signals: + void contentsChanged(QListView* list, int nrOfFiles, int nrOfConnections); +}; + +class QListViewItemX:public QListViewItem +{ + public: + //a faster constructor saves a lot time + QListViewItemX( QListView * parent, + const char *c0, const char *c1 = 0, + const char *c2 = 0, const char *c3 = 0, + const char *c4 = 0, const char *c5 = 0, + const char *c6 = 0, const char *c7 = 0 ) + :QListViewItem(parent) + { + setText( 0, c0 ); + setText( 1, c1 ); + setText( 2, c2 ); + setText( 3, c3 ); + if (c4==0) return; + setText( 4, c4 ); + if (c5==0) return; + setText( 5, c5 ); + if (c6==0) return; + setText( 6, c6 ); + if (c7==0) return; + setText( 7, c7 ); + }; +}; + +#endif // main_included diff --git a/kcontrol/samba/kcmsambastatistics.cpp b/kcontrol/samba/kcmsambastatistics.cpp new file mode 100644 index 000000000..ebdd1c092 --- /dev/null +++ b/kcontrol/samba/kcmsambastatistics.cpp @@ -0,0 +1,289 @@ +/* + * kcmsambastatistics.cpp + * + * Copyright (c) 2000 Alexander Neundorf + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include "kcmsambastatistics.h" +#include "kcmsambastatistics.moc" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +StatisticsView::StatisticsView(QWidget *parent,KConfig *config, const char *name) + :QWidget (parent, name) + ,configFile(config) + ,dataList(0) + ,connectionsCount(0) + ,filesCount(0) + ,calcCount(0) +{ + viewStatistics = new QListView( this ); + connectionsL = new QLabel( i18n( "Connections: 0" ), this ); + filesL = new QLabel( i18n( "File accesses: 0" ), this ); + eventCb = new QComboBox( false, this ); + eventL = new QLabel( eventCb, i18n( "Event: " ), this ); + serviceLe = new QLineEdit( this ); + serviceL = new QLabel( serviceLe, i18n( "Service/File:" ), this ); + hostLe = new QLineEdit( this ); + hostL = new QLabel( hostLe, i18n( "Host/User:" ), this ); + calcButton = new QPushButton( i18n( "&Search" ), this ); + clearButton = new QPushButton( i18n( "Clear Results" ), this ); + expandedInfoCb = new QCheckBox( i18n( "Show expanded service info" ), this ); + expandedUserCb = new QCheckBox( i18n( "Show expanded host info" ), this ); + + viewStatistics->setAllColumnsShowFocus(TRUE); + viewStatistics->setFocusPolicy(QWidget::ClickFocus); + viewStatistics->setShowSortIndicator(true); + + viewStatistics->addColumn(i18n("Nr"),30); + viewStatistics->addColumn(i18n("Event"),130); + viewStatistics->addColumn(i18n("Service/File"),200); + viewStatistics->addColumn(i18n("Host/User"),90); + viewStatistics->addColumn(i18n("Hits"),50); + //viewStatistics->addColumn(i18n("Percentage"),100); + + eventCb->insertItem(i18n("Connection")); + eventCb->insertItem(i18n("File Access")); + + expandedInfoCb->setChecked(FALSE); + expandedUserCb->setChecked(FALSE); + clearStatistics(); + serviceLe->setText("*"); + hostLe->setText("*"); + + viewStatistics->setMinimumSize(375,200); + connectionsL->setMinimumSize(connectionsL->sizeHint()); + filesL->setMinimumSize(filesL->sizeHint()); + eventL->setMinimumSize(eventL->sizeHint()); + eventCb->setMinimumSize(eventCb->sizeHint()); + hostL->setMinimumSize(hostL->sizeHint()); + hostLe->setMinimumSize(120,hostLe->sizeHint().height()); + serviceL->setMinimumSize(serviceL->sizeHint()); + serviceLe->setMinimumSize(120,serviceLe->sizeHint().height()); + calcButton->setMinimumSize(calcButton->sizeHint()); + clearButton->setMinimumSize(clearButton->sizeHint()); + expandedInfoCb->setMinimumSize(expandedInfoCb->sizeHint()); + expandedUserCb->setMinimumSize(expandedUserCb->sizeHint()); + + QVBoxLayout *topLayout=new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + topLayout->addWidget(viewStatistics,1); + QGridLayout *subLayout=new QGridLayout(topLayout,4,3); + subLayout->setColStretch(1,1); + subLayout->setColStretch(2,1); + + QHBoxLayout *twoButtonsLayout=new QHBoxLayout; + twoButtonsLayout->addWidget(calcButton,1); + twoButtonsLayout->addWidget(clearButton,1); + + subLayout->addWidget(connectionsL,0,0); + subLayout->addWidget(filesL,0,1); + subLayout->addWidget(eventL,1,0); + subLayout->addWidget(serviceL,1,1); + subLayout->addWidget(hostL,1,2); + subLayout->addWidget(eventCb,2,0); + subLayout->addWidget(serviceLe,2,1); + subLayout->addWidget(hostLe,2,2); + subLayout->addLayout(twoButtonsLayout,3,0); + subLayout->addWidget(expandedInfoCb,3,1); + subLayout->addWidget(expandedUserCb,3,2); + + connect(clearButton,SIGNAL(clicked()),this,SLOT(clearStatistics())); + connect(calcButton,SIGNAL(clicked()),this,SLOT(calculate())); + setListInfo(0,0,0); +} + +void StatisticsView::setListInfo(QListView *list, int nrOfFiles, int nrOfConnections) +{ + dataList=list; + filesCount=nrOfFiles; + connectionsCount=nrOfConnections; + connectionsL->setText(i18n("Connections: %1").arg(KGlobal::locale()->formatNumber(connectionsCount, 0))); + filesL->setText(i18n("File accesses: %1").arg(KGlobal::locale()->formatNumber(filesCount, 0))); + clearStatistics(); +} + +void StatisticsView::calculate() +{ + if (dataList==0) return; + QApplication::setOverrideCursor(waitCursor); + int connCount(0); + if (eventCb->currentText()==i18n("Connection")) + connCount=1; + //something has to be counted exactly + if ((expandedInfoCb->isChecked()) || (expandedUserCb->isChecked())) + { + SambaLog sLog; + QRegExp rService(serviceLe->text(),FALSE,TRUE); + QRegExp rHost(hostLe->text(),FALSE,TRUE); + QString item2, item3; + QListViewItem* item=dataList->firstChild(); + while (item!=0) + { + if (connCount) + { + if ((QString(item->text(1)).contains(i18n("CONNECTION OPENED"))) + && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost))) + { + if (expandedInfoCb->isChecked()) item2=item->text(2); + else item2=serviceLe->text(); + if (expandedUserCb->isChecked()) item3=item->text(3); + else item3=hostLe->text(); + sLog.addItem(item2,item3); + //count++; + }; + } + else + { + if ((QString(item->text(1)).contains(i18n("FILE OPENED"))) + && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost))) + { + if (expandedInfoCb->isChecked()) item2=item->text(2); + else item2=serviceLe->text(); + if (expandedUserCb->isChecked()) item3=item->text(3); + else item3=hostLe->text(); + sLog.addItem(item2,item3); + + }; + }; + item=item->nextSibling(); + }; + for (LogItem* tmpItem=sLog.items.first();tmpItem!=0;tmpItem=sLog.items.next()) + { + for (SmallLogItem *tmpStr=tmpItem->accessed.first();tmpStr!=0;tmpStr=tmpItem->accessed.next()) + { + calcCount++; + QString number(""); + number.sprintf("%6d",calcCount); + QString hits(""); + hits.sprintf("%7d",tmpStr->count); + new QListViewItem(viewStatistics,number,eventCb->currentText(),tmpItem->name,tmpStr->name,hits); + }; + }; + } + //no expanded info needed + else + { + calcCount++; + int count(0); + QRegExp rService(serviceLe->text(),FALSE,TRUE); + QRegExp rHost(hostLe->text(),FALSE,TRUE); + QListViewItem* item=dataList->firstChild(); + while (item!=0) + { + if (connCount) + { + if ((QString(item->text(1)).contains(i18n("CONNECTION OPENED"))) + && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost))) + count++; + } + else + { + if ((QString(item->text(1)).contains(i18n("FILE OPENED"))) + && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost))) + count++; + }; + item=item->nextSibling(); + }; + QString number(""); + number.sprintf("%6d",calcCount); + QString hits(""); + hits.sprintf("%7d",count); + new QListViewItem(viewStatistics,number,eventCb->currentText(),serviceLe->text(),hostLe->text(),hits); + }; + QApplication::restoreOverrideCursor(); +} + +void StatisticsView::clearStatistics() +{ + viewStatistics->clear(); + calcCount=0; +} + +void SambaLog::printItems() +{ + kdDebug() << "****** printing items: ******" << endl; + for (LogItem* tmpItem=items.first();tmpItem!=0;tmpItem=items.next()) + { + kdDebug() << "SERVICE: " << tmpItem->name << endl; + for (SmallLogItem* tmpLog=tmpItem->accessed.first();tmpLog!=0;tmpLog=tmpItem->accessed.next()) + kdDebug() << " accessed by: " << tmpLog->name << " " << tmpLog->count << endl; + }; + kdDebug() << "------ end of printing ------" << endl << endl; +} + +LogItem* SambaLog::itemInList(QString name) +{ + LogItem* tmpItem(items.first()); + LogItem* foundItem(0); + while ((tmpItem!=0) && (foundItem==0)) + { + if (tmpItem->name==name) foundItem=tmpItem; + tmpItem=items.next(); + }; + return foundItem; +} + +void SambaLog::addItem(QString share, QString user) +{ + //cout<<" adding connection: -"<count++; + tmp->addItem(user); + } + else + { + items.append(new LogItem(share,user)); + }; +} + +SmallLogItem* LogItem::itemInList(QString name) +{ + SmallLogItem* tmpItem(accessed.first()); + SmallLogItem* foundItem(0); + while ((tmpItem!=0) && (foundItem==0)) + { + if (tmpItem->name==name) foundItem=tmpItem; + tmpItem=accessed.next(); + }; + return foundItem; +} + +void LogItem::addItem (QString host) +{ + SmallLogItem* tmp(itemInList(host)); + if (tmp!=0) + tmp->count++; + else + accessed.append(new SmallLogItem(host)); +} diff --git a/kcontrol/samba/kcmsambastatistics.h b/kcontrol/samba/kcmsambastatistics.h new file mode 100644 index 000000000..66a9474ab --- /dev/null +++ b/kcontrol/samba/kcmsambastatistics.h @@ -0,0 +1,106 @@ +/* + * kcmsambastatistics.h + * + * Copyright (c) 2000 Alexander Neundorf + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#ifndef kcmsambastatistics_h_included +#define kcmsambastatistics_h_included + +#include +#include + +class QListView; +class QLabel; +class QComboBox; +class QCheckBox; +class QLineEdit; +class QPushButton; + +class KConfig; + +class SmallLogItem +{ + public: + SmallLogItem():name(""),count(0){}; + SmallLogItem(QString n):name(n),count(1){}; + QString name; + int count; +}; + +class LogItem +{ + public: + LogItem():name(""), accessed(),count(0) {}; + LogItem(QString n, QString a):name(n), accessed(), count(1) + { + accessed.setAutoDelete(TRUE); + accessed.append(new SmallLogItem(a)); + }; + QString name; + //QStrList accessedBy; + QPtrList accessed; + int count; + SmallLogItem* itemInList(QString name); + void addItem (QString host); +}; + +class SambaLog +{ + public: + SambaLog() + { + items.setAutoDelete(TRUE); + }; + QPtrList items; + void addItem (QString share, QString host); + void printItems(); + private: + LogItem* itemInList(QString name); +}; + +class StatisticsView: public QWidget +{ + Q_OBJECT +public: + StatisticsView(QWidget *parent=0, KConfig *config=0, const char *name=0); + virtual ~StatisticsView() {}; + void saveSettings() {}; + void loadSettings() {}; + public slots: + void setListInfo(QListView *list, int nrOfFiles, int nrOfConnections); +private: + KConfig *configFile; + QListView *dataList; + QListView* viewStatistics; + QLabel* connectionsL, *filesL; + QComboBox* eventCb; + QLabel* eventL; + QLineEdit* serviceLe; + QLabel* serviceL; + QLineEdit* hostLe; + QLabel* hostL; + QPushButton* calcButton, *clearButton; + QCheckBox* expandedInfoCb, *expandedUserCb; + int connectionsCount, filesCount, calcCount; +private slots: + void clearStatistics(); + void calculate(); +}; +#endif // main_included diff --git a/kcontrol/samba/ksmbstatus.cpp b/kcontrol/samba/ksmbstatus.cpp new file mode 100644 index 000000000..4866a3a1e --- /dev/null +++ b/kcontrol/samba/ksmbstatus.cpp @@ -0,0 +1,225 @@ +/* + * ksmbstatus.cpp + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include "ksmbstatus.h" +#include "ksmbstatus.moc" + + +#define Before(ttf,in) in.left(in.find(ttf)) +#define After(ttf,in) (in.contains(ttf)?QString(in.mid(in.find(ttf)+QString(ttf).length())):QString("")) + +NetMon::NetMon( QWidget * parent, KConfig *config, const char * name ) + : QWidget(parent, name) + ,configFile(config) + ,showmountProc(0) + ,strShare("") + ,strUser("") + ,strGroup("") + ,strMachine("") + ,strSince("") + ,strPid("") + ,iUser(0) + ,iGroup(0) + ,iMachine(0) + ,iPid(0) +{ + QBoxLayout *topLayout = new QVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + topLayout->setAutoAdd(true); + + list=new QListView(this,"Hello"); + version=new QLabel(this); + + list->setAllColumnsShowFocus(true); + list->setMinimumSize(425,200); + list->setShowSortIndicator(true); + + list->addColumn(i18n("Type")); + list->addColumn(i18n("Service")); + list->addColumn(i18n("Accessed From")); + list->addColumn(i18n("UID")); + list->addColumn(i18n("GID")); + list->addColumn(i18n("PID")); + list->addColumn(i18n("Open Files")); + + timer = new QTimer(this); + timer->start(15000); + QObject::connect(timer, SIGNAL(timeout()), this, SLOT(update())); + update(); +} + +void NetMon::processNFSLine(char *bufline, int) +{ + QCString line(bufline); + if (line.contains(":/")) + new QListViewItem(list,"NFS",After(":",line),Before(":/",line)); +} + +void NetMon::processSambaLine(char *bufline, int) +{ + QCString line(bufline); + rownumber++; + if (rownumber == 2) + version->setText(bufline); // second line = samba version + if ((readingpart==header) && line.contains("Service")) + { + iUser=line.find("uid"); + iGroup=line.find("gid"); + iPid=line.find("pid"); + iMachine=line.find("machine"); + } + else if ((readingpart==header) && (line.contains("---"))) + { + readingpart=connexions; + } + else if ((readingpart==connexions) && (int(line.length())>=iMachine)) + { + strShare=line.mid(0,iUser); + strUser=line.mid(iUser,iGroup-iUser); + strGroup=line.mid(iGroup,iPid-iGroup); + strPid=line.mid(iPid,iMachine-iPid); + + line=line.mid(iMachine,line.length()); + strMachine=line; + new QListViewItem(list,"SMB",strShare,strMachine, strUser,strGroup,strPid/*,strSince*/); + } + else if (readingpart==connexions) + readingpart=locked_files; + else if ((readingpart==locked_files) && (line.find("No ")==0)) + readingpart=finished; + else if (readingpart==locked_files) + { + if ((strncmp(bufline,"Pi", 2) !=0) // "Pid DenyMode ..." + && (strncmp(bufline,"--", 2) !=0)) // "------------" + { + char *tok=strtok(bufline," "); + if (tok) { + int pid=atoi(tok); + (lo)[pid]++; + } + } + } +} + +// called when we get some data from smbstatus +// can be called for any size of buffer (one line, several lines, +// half of one ...) +void NetMon::slotReceivedData(KProcess *, char *buffer, int ) +{ + //kdDebug()<<"received stuff"<=sizeof(s)) + len=sizeof(s)-1; + strncpy(s,start,len); + s[len] = '\0'; + //kdDebug() << "recived: "<viewport()->update(); + list->update(); + } + // here we could save the remaining part of line, if ever buffer + // doesn't end with a '\n' ... but will this happen ? +} + +void NetMon::update() +{ + KProcess * process = new KProcess(); + + memset(&lo, 0, sizeof(lo)); + list->clear(); + /* Re-read the Contents ... */ + + QString path(::getenv("PATH")); + path += "/bin:/sbin:/usr/bin:/usr/sbin"; + + rownumber=0; + readingpart=header; + nrpid=0; + process->setEnvironment("PATH", path); + connect(process, + SIGNAL(receivedStdout(KProcess *, char *, int)), + SLOT(slotReceivedData(KProcess *, char *, int))); + *process << "smbstatus"; + if (!process->start(KProcess::Block,KProcess::Stdout)) + version->setText(i18n("Error: Unable to run smbstatus")); + else if (rownumber==0) // empty result + version->setText(i18n("Error: Unable to open configuration file \"smb.conf\"")); + else + { + // ok -> count the number of locked files for each pid + for (QListViewItem *row=list->firstChild();row!=0;row=row->itemBelow()) + { +// cerr<<"NetMon::update: this should be the pid: "<text(5)<text(5).toInt(); + row->setText(6,QString("%1").arg((lo)[pid])); + } + } + delete process; + process=0; + + readingpart=nfs; + delete showmountProc; + showmountProc=new KProcess(); + showmountProc->setEnvironment("PATH", path); + *showmountProc<<"showmount"<<"-a"<<"localhost"; + connect(showmountProc,SIGNAL(receivedStdout(KProcess *, char *, int)),SLOT(slotReceivedData(KProcess *, char *, int))); + //without this timer showmount hangs up to 5 minutes + //if the portmapper daemon isn't running + QTimer::singleShot(5000,this,SLOT(killShowmount())); + //kdDebug()<<"starting kill timer with 5 seconds"<start(KProcess::NotifyOnExit,KProcess::Stdout)) // run showmount + { + delete showmountProc; + showmountProc=0; + } + + version->adjustSize(); + list->show(); +} + +void NetMon::killShowmount() +{ + //kdDebug()<<"killShowmount()"< +#include +#include +#include +#include +#include + +#define SCREEN_XY_OFFSET 20 + +class QListView; +class QListViewItem; +class KProcess; + +class NetMon : public QWidget +{ +Q_OBJECT +public: + NetMon(QWidget *parent, KConfig * config=0, const char * name=0); + void saveSettings() {}; + void loadSettings() {}; +private: + KConfig *configFile; + KProcess *showmountProc; + QListView *list; + QLabel *version; + QTimer *timer; + QListViewItem *killrow; + int rownumber; + enum {header, connexions, locked_files, finished, nfs} readingpart; + int lo[65536]; + int nrpid; + void processNFSLine(char *bufline, int linelen); + void processSambaLine(char *bufline, int linelen); + + QCString strShare, strUser, strGroup, strMachine, strSince, strPid; + int iUser, iGroup, iMachine, iPid; + +private slots: + void killShowmount(); + void update(); + void slotReceivedData(KProcess *proc, char *buffer, int buflen); +}; + +#endif // main_included diff --git a/kcontrol/samba/main.cpp b/kcontrol/samba/main.cpp new file mode 100644 index 000000000..f6df8f91b --- /dev/null +++ b/kcontrol/samba/main.cpp @@ -0,0 +1,119 @@ +/* + * main.cpp for the samba kcontrol module + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include +#include +#include +#include + +#include "kcmsambaimports.h" +#include "kcmsambalog.h" +#include "kcmsambastatistics.h" +#include "ksmbstatus.h" + +class SambaContainer:public KCModule +{ + public: + SambaContainer(QWidget *parent=0, const char * name=0, const QStringList &list = QStringList() ); + virtual ~SambaContainer(); + virtual void load(); + virtual void save(); + + private: + KConfig config; + QTabWidget tabs; + NetMon status; + ImportsView imports; + LogView logView; + StatisticsView statisticsView; +}; + +typedef KGenericFactory SambaFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_samba, SambaFactory("kcmsamba") ) + +SambaContainer::SambaContainer(QWidget *parent, const char* name, const QStringList&) +:KCModule(SambaFactory::instance(), parent,name) +,config("kcmsambarc",false,true) +,tabs(this) +,status(&tabs,&config) +,imports(&tabs,&config) +,logView(&tabs,&config) +,statisticsView(&tabs,&config) +{ + QVBoxLayout *layout = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + layout->addWidget(&tabs); + tabs.addTab(&status,i18n("&Exports")); + tabs.addTab(&imports,i18n("&Imports")); + tabs.addTab(&logView,i18n("&Log")); + tabs.addTab(&statisticsView,i18n("&Statistics")); + connect(&logView,SIGNAL(contentsChanged(QListView* , int, int)),&statisticsView,SLOT(setListInfo(QListView *, int, int))); + setButtons(Help); + load(); + + setQuickHelp( i18n("The Samba and NFS Status Monitor is a front end to the programs" + " smbstatus and showmount. Smbstatus reports on current" + " Samba connections, and is part of the suite of Samba tools, which" + " implements the SMB (Session Message Block) protocol, also called the" + " NetBIOS or LanManager protocol. This protocol can be used to provide" + " printer sharing or drive sharing services on a network including" + " machines running the various flavors of Microsoft Windows.

      " + " Showmount is part of the NFS software package. NFS stands for Network" + " File System and is the traditional UNIX way to share directories over" + " the network. In this case the output of showmount -a localhost" + " is parsed. On some systems showmount is in /usr/sbin, check if you have" + " showmount in your PATH.")); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmsamba"), + I18N_NOOP("KDE Panel System Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2002 KDE Information Control Module Samba Team")); + about->addAuthor("Michael Glauche", 0, "glauche@isa.rwth-aachen.de"); + about->addAuthor("Matthias Hoelzer", 0, "hoelzer@kde.org"); + about->addAuthor("David Faure", 0, "faure@kde.org"); + about->addAuthor("Harald Koschinski", 0, "Harald.Koschinski@arcormail.de"); + about->addAuthor("Wilco Greven", 0, "greven@kde.org"); + about->addAuthor("Alexander Neundorf", 0, "neundorf@kde.org"); + setAboutData( about ); +} + +SambaContainer::~SambaContainer() +{ + save(); +} + +void SambaContainer::load() +{ + status.loadSettings(); + imports.loadSettings(); + logView.loadSettings(); + statisticsView.loadSettings(); +} + +void SambaContainer::save() +{ + status.saveSettings(); + imports.saveSettings(); + logView.saveSettings(); + statisticsView.saveSettings(); + config.sync(); +} + diff --git a/kcontrol/samba/smbstatus.desktop b/kcontrol/samba/smbstatus.desktop new file mode 100644 index 000000000..c0b6db58a --- /dev/null +++ b/kcontrol/samba/smbstatus.desktop @@ -0,0 +1,241 @@ +[Desktop Entry] +Exec=kcmshell smbstatus +Icon=samba +Type=Application +DocPath=kinfocenter/samba/index.html + + +X-KDE-Library=samba +X-KDE-FactoryName=samba +X-KDE-ParentApp=kinfocenter + +Name=Samba Status +Name[ar]=حالة Samba +Name[az]=Samba'nın Vəziyyəti +Name[be]=Стан Samba +Name[bg]=Сървър Samba +Name[bn]=সাম্বা স্ট্যাটাস +Name[br]=Saviad Samba +Name[bs]=Status Sambe +Name[ca]=Estat de Samba +Name[cs]=Stav Samby +Name[csb]=Sztaus Samba +Name[cy]=Cyflwr Samba +Name[da]=Samba-status +Name[de]=Samba-Status +Name[el]=Κατάσταση samba +Name[eo]=Sambo-stato +Name[es]=Estado de Samba +Name[et]=Samba olek +Name[eu]=Sambaren egoera +Name[fa]=وضعیت Samba +Name[fi]=Samban tila +Name[fr]=État de Samba +Name[fy]=Samba-tastân +Name[ga]=Stádas Samba +Name[gl]=Estado de Samba +Name[he]=מצב Samba +Name[hi]=साम्बा स्थिति +Name[hr]=Stanje Sambe +Name[hu]=Samba +Name[id]=Status Samba +Name[is]=Staða Samba +Name[it]=Stato di Samba +Name[ja]=Samba の状態 +Name[ka]=Samba-ს სტატუსი +Name[kk]=Samba сервері +Name[km]=ស្ថានភាព Samba +Name[ko]=삼바 상태 +Name[lo]=ສະຖານະຂອງ Samba +Name[lt]=Samba būsena +Name[lv]=Samba Statuss +Name[mk]=Статус на Samba +Name[mn]=Samba-Төлөв +Name[ms]=Status Samba +Name[mt]=Stat tas-Samba +Name[nb]=Samba-status +Name[nds]=Samba-Status +Name[ne]=साम्बा वस्तुस्थिति +Name[nl]=Samba-status +Name[nn]=Samba-status +Name[nso]=Boemo bja Samba +Name[oc]=Estat de Samba +Name[pa]=ਸਾਂਬਾ ਸਥਿਤੀ +Name[pt]=Samba +Name[pt_BR]=Estado do Samba +Name[ro]=Stare Samba +Name[ru]=Сервер Samba +Name[rw]=Imimerere Samba +Name[se]=Samba stáhtus +Name[sk]=Stav systému Samba +Name[sl]=Status Sambe +Name[sr]=Статус Самбе +Name[sr@Latn]=Status Sambe +Name[ss]=Simo se Samba +Name[sv]=Samba-status +Name[ta]=சம்பா நிலை +Name[tg]=Шароити Samba +Name[th]=สถานะของ Samba +Name[tr]=Samba Servisi +Name[tt]=Samba Xäläte +Name[uk]=Стан Samba +Name[uz]=Samba'ning holati +Name[uz@cyrillic]=Samba'нинг ҳолати +Name[ven]=Maimo a samba +Name[vi]=Trạng thái của Samba +Name[wa]=Estat di Samba +Name[xh]=Isimo se Samba +Name[zh_CN]=Samba 状态 +Name[zh_TW]=Samba 狀態 +Name[zu]=Isimo se-Samba + +Comment=Samba status monitor +Comment[ar]=مراقب حالة Samba +Comment[az]=Samba üçün vəziyyət izləyici +Comment[be]=Назіральнік стану Samba +Comment[bg]=Информация за състоянието на сървъра Samba +Comment[bn]=সাম্বা স্ট্যাটাস নির্দেশক +Comment[br]=Diskwel saviad Samba +Comment[bs]=Nadzor statusa samba-e +Comment[ca]=Monitor de l'estat de Samba +Comment[cs]=Monitor stavu Samby +Comment[csb]=Mònitor stónu Sambë +Comment[cy]=Monitr cyflwr samba +Comment[da]=Overvågning af samba-status +Comment[de]=Samba-Statusmonitor +Comment[el]=Εποπτεία της Samba +Comment[eo]=Rigardilo por la stato de Sambo +Comment[es]=Monitor de estado de Samba +Comment[et]=Samba oleku monitooring +Comment[eu]=Sambaren egoeraren monitorea +Comment[fa]=نمایشگر وضعیت Samba +Comment[fi]=Samban tilan näyttö +Comment[fr]=Indicateur d'état de Samba +Comment[fy]=Sambatastânmonitor +Comment[gl]=Monitor do estado de Samba +Comment[he]=מידע על המצב של Samba +Comment[hi]=साम्बा स्थिति मॉनीटर +Comment[hr]=Nadzor stanje Sambe +Comment[hu]=Samba állapotmonitor +Comment[id]=Monitor status Samba +Comment[is]=Eftirlit með stöðu Samba +Comment[it]=Controllo dello stato di Samba +Comment[ja]=Samba の状態を監視します +Comment[ka]=Samba-ს სტატუსის მონიტორი +Comment[kk]=Samba күйін бақылау +Comment[km]=កម្មវិធី​ត្រួត​ពិនិត្យ​ស្ថានភាព Samba +Comment[ko]=삼바 상태 모니터 +Comment[lo]=ເຄື່ອງມືສອດສ່ອງສະຖານະຂອງເນັດ +Comment[lt]=Samba būsenos monitorius +Comment[lv]=Sambas statusa monitors +Comment[mk]=Монитор на статусот на Samba +Comment[mn]=Samba-Төлөв харуулагч +Comment[ms]=Monitor status Samba +Comment[mt]=Monitur tal-istat tas-Samba +Comment[nb]=Overvåking av Samba-status +Comment[nds]=Statuskieker för Samba +Comment[ne]=साम्बा वस्तुस्थिति मोनिटर +Comment[nl]=Sambastatusmonitor +Comment[nn]=Overvaking av Samba-status +Comment[nso]=Mohlokomedi wa boemo bja Samba +Comment[oc]=Monitor de l'estat de Samba +Comment[pa]=ਸਾਂਬਾ ਸਥਿਤੀ ਨਿਗਰਾਨ +Comment[pl]=Monitor stanu Samby +Comment[pt]=Monitor do estado do Samba +Comment[pt_BR]=Monitor de estado do Samba +Comment[ro]=Monitorizează starea serverului Samba +Comment[ru]=Состояние сервера Samba +Comment[rw]=Mugaragaza y'Imimerere Samba +Comment[se]=Gozit Samba stáhtusa +Comment[sk]=Monitor stavu Samby +Comment[sl]=Nadzornik stanja Sambe +Comment[sr]=Преглед статуса Самбе +Comment[sr@Latn]=Pregled statusa Sambe +Comment[sv]=Övervakar Samba-status +Comment[ta]=சம்பா திரை நிலை +Comment[tg]=Назорати вазъияти Samba +Comment[th]=เฝ้าดูสถานะ Samba +Comment[tr]=Samba için durum izleyici +Comment[tt]=Samba xäläten küzätüçe +Comment[uk]=Монітор стану Samba +Comment[uz]=Samba'ning holatini nazorat qiluvchi vosita +Comment[uz@cyrillic]=Samba'нинг ҳолатини назорат қилувчи восита +Comment[ven]=Mutoli wa maimo a Samba +Comment[vi]=Theo dõi trạng thái samba +Comment[wa]=Corwaitoe di l' estat di Samba +Comment[xh]=Umphathi wemeko we Samba +Comment[zh_CN]=Samba 状态监视器 +Comment[zh_TW]=Samba 狀態監視器 +Comment[zu]=Umphathi wesimo se-samba + +Keywords=SMB,SAMBA,Windows network,LAN,System Information +Keywords[af]=SMB,SAMBA,Windows network,LAN,System Informasie +Keywords[ar]=SMB,SAMBA,شبكة Windows,شبكة محلية,معلومات النظام +Keywords[az]=SMB,SAMBA,Pəncərə şəbəkəsi,LAN,Sistem Haqqında Mə'lumat +Keywords[be]=Сетка Windows,Сетка,Сістэмная інфармацыя,SMB,SAMBA,Windows network,LAN,System Information +Keywords[bg]=информация, система, системна, самба, сървър, статус, състояние, мрежа, SMB, SAMBA, Windows network, LAN, System Information +Keywords[br]=SMB,SAMBA,rouedad Windows,LAN,titouroù reizhiad +Keywords[bs]=SMB,SAMBA,Windows network,LAN,System Information,Windows mreža,mreža,informacije o sustavu +Keywords[ca]=SMB,SAMBA,Xarxa Windows,LAN,Informació del sistema +Keywords[cs]=SMB,Samba,Síť Microsoft Windows,LAN,Informace o systému +Keywords[csb]=SMB,SAMBA,séc Windows,môlowô séc,LAN,wëdowiédzô ò systemie +Keywords[cy]=SMB,SAMBA,Rhwydwaith Windows,LAN,Gwybodaeth Cysawd +Keywords[da]=SMB,Samba,Windows-netværk,LAN,Systeminformation +Keywords[de]=SMB,Samba,Windows-Netzwerk,LAN,Systeminformation +Keywords[el]=SMB,SAMBA,Δίκτυο Windows,LAN,Πληροφορίες συστήματος +Keywords[eo]=SMB,Sambo,Vindozo,reto,LAN,sistemo,operaciumo,informo +Keywords[es]=SMB,SAMBA,Red Windows,LAN,Información del sistema +Keywords[et]=SMB,SAMBA,Windowsi võrk,LAN,Süsteemi info +Keywords[eu]=SMB,SAMBA,Windows sarea,LAN,Sistemaren informazioa +Keywords[fa]=SMB، SAMBA، ویندوز، شبکه، شبکۀ داخلی، اطلاعات سیستم +Keywords[fi]=SMB,SAMBA,Windows verkko,LAN,Järjestelmätiedot +Keywords[fr]=réseau Windows,réseau local,informations système,smb,samba,lan,windows +Keywords[fy]=SMB,SAMBA,Windows network,LAN,systeemynformaasje,Windows-netwurk +Keywords[ga]=SMB,SAMBA,Líonra Windows,LAN,líonra logánta,Eolas faoin Chóras +Keywords[gl]=SMB,SAMBA,Rede Windows,LAN,Información do Sistema +Keywords[he]=רשת מקומית,מידע מערכת,רשת Windows,SAMBA,SMB, SMB,SAMBA,Windows network,LAN,System Information +Keywords[hi]=एसएमबी,साम्बा,विंडोज़ नेटवर्क,लैन,तंत्र जानकारी +Keywords[hr]=SMB,SAMBA,Windows network,LAN,System Information,Windows mreža,mreža,podaci o sustavu +Keywords[hu]=SMB,Samba,Windows-hálózat,LAN,rendszerinformáció +Keywords[id]=SMB,SAMBA,Windows network,LAN,Informasi Sistem +Keywords[is]=Netdrif,windows net,kerfi,upplýsingar +Keywords[it]=SMB,SAMBA,Rete Windows,LAN,Rete locale,Informazioni sul sistema +Keywords[ja]=SMB,SAMBA,Windowsネットワーク,LAN,システムの情報 +Keywords[km]=SMB,SAMBA,បណ្ដាញ Windows,បណ្ដាញ​មូលដ្ឋាន,ព័ត៌មាន​បណ្ដាញ +Keywords[lt]=SMB,SAMBA,Windows tinklas,LAN,Sistemos Informacija +Keywords[lv]=SMB,SAMBA,Windows tīkls,LAN,Sistēmas Informācija +Keywords[mk]=SMB,SAMBA,Windows network,LAN,System Information, Windows мрежа,Информации за системот,Виндоус мрежа +Keywords[mn]=SMB,Samba,Виндовс-Сүлжээ,LAN,Системийн мэдээлэл +Keywords[nb]=SMB,SAMBA,Windows-nettverk,LAN,Systeminformasjon +Keywords[nds]=SMB,SAMBA,Windowsnettwark,LAN,Systeeminformatschoon +Keywords[ne]=SMB,SAMBA, सञ्झ्याल सञ्जाल,LAN, प्रणाली सूचना +Keywords[nl]=SMB,SAMBA,Windows network,LAN,systeeminformatie,Windows-netwerk +Keywords[nn]=SMB,SAMBA,Windows-nettverk,LAN,systeminformasjon +Keywords[nso]=SMB,SAMBA,kgokagano ya Windows,LAN,Tshedimoso ya System +Keywords[oc]=SMB,SAMBA,xarxa Windows,LAN,Informacion dèu sistemo +Keywords[pa]=SMB,SAMBA,Windows network,LAN,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=SMB,SAMBA,sieć Windows,sieć lokalna,LAN,informacja o systemie +Keywords[pt]=SMB,SAMBA,rede Windows,LAN,informações de sistema +Keywords[pt_BR]=SMB,Samba,Rede Windows,LAN,Informações de sistema +Keywords[ro]=SMB,SAMBA,rețea Windows,LAN,informații despre sistem +Keywords[rw]=SMB,SAMBA,Urusobemiyoboro Windows,LAN,Amakuru ya Sisitemu +Keywords[se]=SMB,SAMBA,Windows-fierbmi,LAN,vuogádatdiehtu +Keywords[sk]=SMB,SAMBA,sieť Windows,LAN,Systémové Informácie +Keywords[sl]=SMB,SAMBA,omrežje Windows,LAN,informacije o sistemu +Keywords[sr]=SMB,SAMBA,Windows network,LAN,System Information,мрежа,системске информације +Keywords[sr@Latn]=SMB,SAMBA,Windows network,LAN,System Information,mreža,sistemske informacije +Keywords[sv]=SMB,Samba,Windows nätverk,LAN,Systeminformation +Keywords[ta]=SMB,சாம்பா,சாளரங்களின் வலை,LAN,அமைப்பு தகவல் +Keywords[th]=SMB,SAMBA,เครือข่ายวินโดว์ส,เครือข่ายท้องถิ่น,ข้อมูลระบบ +Keywords[tr]=SMB,SAMBA,Pencere ağı,LAN,Sistem Hakkında Bilgi +Keywords[uk]=SMB,SAMBA,мережа Windows,lan,ЛОМ,системна інформація +Keywords[uz]=SMB,SAMBA,Windows tarmogʻi,Tizim haqida maʼlumot,LAN +Keywords[uz@cyrillic]=SMB,SAMBA,Windows тармоғи,Тизим ҳақида маълумот,LAN +Keywords[ven]=SMB,SAMBA,Mawindo a vhukwamani,LAN,Mafhungo a sisitemu +Keywords[vi]=SMB,SAMBA,Mạng Windows,LAN,Thông tin hệ thống +Keywords[wa]=SMB,SAMBA,rantoele Windows,LAN,rantoele locåle,informåcion do sistinme +Keywords[xh]=SMB,SAMBA,umsebenzi womnatha wee window,LAN,Ulwazi lwendlela yokusebenza +Keywords[zh_CN]=SMB,SAMBA,Windows network,LAN,System Information,局域网,系统信息 +Keywords[zh_TW]=SMB,SAMBA,Windows network,LAN,System Information,Windows 網路,區域網路,系統資訊 +Keywords[zu]=SMB,SAMBA,Uxhumano olusakazekile lwama-windows,LAN,Ulwazi lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/screensaver/Makefile.am b/kcontrol/screensaver/Makefile.am new file mode 100644 index 000000000..f5fc4eec3 --- /dev/null +++ b/kcontrol/screensaver/Makefile.am @@ -0,0 +1,20 @@ + +AM_CPPFLAGS = $(GLINC) $(all_includes) + +kde_module_LTLIBRARIES = kcm_screensaver.la + +kcm_screensaver_la_SOURCES = advanceddialogimpl.ui scrnsave.cpp testwin.cpp saverlist.cpp \ + saverconfig.cpp advanceddialog.cpp kswidget.cpp +kcm_screensaver_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined +kcm_screensaver_la_LIBADD = $(LIB_KSYCOCA) $(DPMSLIB) $(GLLIB) +METASOURCES = AUTO + +noinst_HEADERS = scrnsave.h + +messages: rc.cpp + sed 's/X-KDE-Category=\(.*\)/i18n\("Screen saver category","\1"\);/' < category_list > category_list.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmscreensaver.pot + -rm -f category_list.cpp + +xdg_apps_DATA = screensaver.desktop + diff --git a/kcontrol/screensaver/advanceddialog.cpp b/kcontrol/screensaver/advanceddialog.cpp new file mode 100644 index 000000000..273888960 --- /dev/null +++ b/kcontrol/screensaver/advanceddialog.cpp @@ -0,0 +1,174 @@ +#include +#include +#include +#include + +#include +#include + +#include + +#include "advanceddialog.h" +#include "advanceddialogimpl.h" +#include "stdlib.h" + +#include "advanceddialog.moc" + +KScreenSaverAdvancedDialog::KScreenSaverAdvancedDialog(QWidget *parent, const char* name) + : KDialogBase( parent, name, true, i18n( "Advanced Options" ), + Ok | Cancel, Ok, true ) +{ + + dialog = new AdvancedDialog(this); + setMainWidget(dialog); + + readSettings(); + + connect(dialog->qcbPriority, SIGNAL(activated(int)), + this, SLOT(slotPriorityChanged(int))); + + connect(dialog->qcbTopLeft, SIGNAL(activated(int)), + this, SLOT(slotChangeTopLeftCorner(int))); + connect(dialog->qcbTopRight, SIGNAL(activated(int)), + this, SLOT(slotChangeTopLeftCorner(int))); + connect(dialog->qcbBottomLeft, SIGNAL(activated(int)), + this, SLOT(slotChangeTopLeftCorner(int))); + connect(dialog->qcbBottomRight, SIGNAL(activated(int)), + this, SLOT(slotChangeTopLeftCorner(int))); + +#ifndef HAVE_SETPRIORITY + dialog->qgbPriority->setEnabled(false); +#endif +} + +void KScreenSaverAdvancedDialog::readSettings() +{ + KConfig *config = new KConfig("kdesktoprc"); + config->setGroup("ScreenSaver"); + + mPriority = config->readNumEntry("Priority", 19); + if (mPriority < 0) mPriority = 0; + if (mPriority > 19) mPriority = 19; + + dialog->qcbTopLeft->setCurrentItem(config->readNumEntry("ActionTopLeft", 0)); + dialog->qcbTopRight->setCurrentItem(config->readNumEntry("ActionTopRight", 0)); + dialog->qcbBottomLeft->setCurrentItem(config->readNumEntry("ActionBottomLeft", 0)); + dialog->qcbBottomRight->setCurrentItem(config->readNumEntry("ActionBottomRight", 0)); + + + switch(mPriority) + { + case 19: // Low + dialog->qcbPriority->setCurrentItem(0); + kdDebug() << "setting low" << endl; + break; + case 10: // Medium + dialog->qcbPriority->setCurrentItem(1); + kdDebug() << "setting medium" << endl; + break; + case 0: // High + dialog->qcbPriority->setCurrentItem(2); + kdDebug() << "setting high" << endl; + break; + } + + mChanged = false; + delete config; +} + +void KScreenSaverAdvancedDialog::slotPriorityChanged(int val) +{ + switch (val) + { + case 0: // Low + mPriority = 19; + kdDebug() << "low priority" << endl; + break; + case 1: // Medium + mPriority = 10; + kdDebug() << "medium priority" << endl; + break; + case 2: // High + mPriority = 0; + kdDebug() << "high priority" << endl; + break; + } + mChanged = true; +} + +void KScreenSaverAdvancedDialog::slotOk() +{ + if (mChanged) + { + KConfig *config = new KConfig("kdesktoprc"); + config->setGroup( "ScreenSaver" ); + + config->writeEntry("Priority", mPriority); + config->writeEntry( + "ActionTopLeft", dialog->qcbTopLeft->currentItem()); + config->writeEntry( + "ActionTopRight", dialog->qcbTopRight->currentItem()); + config->writeEntry( + "ActionBottomLeft", dialog->qcbBottomLeft->currentItem()); + config->writeEntry( + "ActionBottomRight", dialog->qcbBottomRight->currentItem()); + config->sync(); + delete config; + } + accept(); +} + +void KScreenSaverAdvancedDialog::slotChangeBottomRightCorner(int) +{ + mChanged = true; +} + +void KScreenSaverAdvancedDialog::slotChangeBottomLeftCorner(int) +{ + mChanged = true; +} + +void KScreenSaverAdvancedDialog::slotChangeTopRightCorner(int) +{ + mChanged = true; +} + +void KScreenSaverAdvancedDialog::slotChangeTopLeftCorner(int) +{ + mChanged = true; +} + +/* =================================================================================================== */ + +AdvancedDialog::AdvancedDialog(QWidget *parent, const char *name) : AdvancedDialogImpl(parent, name) +{ + monitorLabel->setPixmap(QPixmap(locate("data", "kcontrol/pics/monitor.png"))); + QWhatsThis::add(qcbPriority, "" + i18n("Specify the priority that the screensaver will run at. A higher priority may mean that the screensaver runs faster, though may reduce the speed that other programs run at while the screensaver is active.") + ""); + QString qsTopLeft("" + i18n("The action to take when the mouse cursor is located in the top left corner of the screen for 15 seconds.") + ""); + QString qsTopRight("" + i18n("The action to take when the mouse cursor is located in the top right corner of the screen for 15 seconds.") + ""); + QString qsBottomLeft("" + i18n("The action to take when the mouse cursor is located in the bottom left corner of the screen for 15 seconds.") + ""); + QString qsBottomRight("" + i18n("The action to take when the mouse cursor is located in the bottom right corner of the screen for 15 seconds.") + ""); + QWhatsThis::add(qlTopLeft, qsTopLeft); + QWhatsThis::add(qcbTopLeft, qsTopLeft); + QWhatsThis::add(qlTopRight, qsTopRight); + QWhatsThis::add(qcbTopRight, qsTopRight); + QWhatsThis::add(qlBottomLeft, qsBottomLeft); + QWhatsThis::add(qcbBottomLeft, qsBottomLeft); + QWhatsThis::add(qlBottomRight, qsBottomRight); + QWhatsThis::add(qcbBottomRight, qsBottomRight); +} + +AdvancedDialog::~AdvancedDialog() +{ + +} + +void AdvancedDialog::setMode(QComboBox *box, int i) +{ + box->setCurrentItem(i); +} + +int AdvancedDialog::mode(QComboBox *box) +{ + return box->currentItem(); +} diff --git a/kcontrol/screensaver/advanceddialog.h b/kcontrol/screensaver/advanceddialog.h new file mode 100644 index 000000000..813c9fc82 --- /dev/null +++ b/kcontrol/screensaver/advanceddialog.h @@ -0,0 +1,61 @@ +#ifndef ADVANCEDDIALOG_H +#define ADVANCEDDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "advanceddialogimpl.h" + +class AdvancedDialog : public AdvancedDialogImpl +{ +public: + AdvancedDialog(QWidget *parent = 0, const char *name = 0); + ~AdvancedDialog(); + void setMode(QComboBox *box, int i); + int mode(QComboBox *box); +}; + +/* =================================================================================================== */ + +class KScreenSaverAdvancedDialog : public KDialogBase +{ + Q_OBJECT +public: + KScreenSaverAdvancedDialog(QWidget *parent, const char* name = 0); + +public slots: + void slotOk(); + +protected slots: + void slotPriorityChanged(int val); + void slotChangeBottomRightCorner(int); + void slotChangeBottomLeftCorner(int); + void slotChangeTopRightCorner(int); + void slotChangeTopLeftCorner(int); + +private: + void readSettings(); + + QCheckBox *m_topLeftCorner; + QCheckBox *m_bottomLeftCorner; + QCheckBox *m_topRightCorner; + QCheckBox *m_bottomRightCorner; + QSlider *mPrioritySlider; + + bool mChanged; + int mPriority; + AdvancedDialog *dialog; + +}; + + +#endif + diff --git a/kcontrol/screensaver/advanceddialogimpl.ui b/kcontrol/screensaver/advanceddialogimpl.ui new file mode 100644 index 000000000..814a3867c --- /dev/null +++ b/kcontrol/screensaver/advanceddialogimpl.ui @@ -0,0 +1,397 @@ + +AdvancedDialogImpl + + + Form1 + + + + 0 + 0 + 403 + 399 + + + + + unnamed + + + 0 + + + + qgbPriority + + + GroupBoxPanel + + + Sunken + + + Screen Saver Priority + + + + unnamed + + + + + Low + + + + + Medium + + + + + High + + + + qcbPriority + + + + + + + + spacer5 + + + Horizontal + + + Expanding + + + + 31 + 20 + + + + + + + + groupBox1 + + + Screen Corner Actions + + + + unnamed + + + + qlMonitorLabel + + + + + + + + layout8 + + + + unnamed + + + + layout1 + + + + unnamed + + + + qlTopLeft + + + Top left: + + + + + + No Action + + + + + Lock Screen + + + + + Prevent Locking + + + + qcbTopLeft + + + + + + + spacer6 + + + Horizontal + + + Expanding + + + + 41 + 20 + + + + + + layout3 + + + + unnamed + + + + qlTopRight + + + Top right: + + + + + + No Action + + + + + Lock Screen + + + + + Prevent Locking + + + + qcbTopRight + + + + + + + + + layout9 + + + + unnamed + + + + layout4 + + + + unnamed + + + + qlBottomLeft + + + Bottom left: + + + + + + No Action + + + + + Lock Screen + + + + + Prevent Locking + + + + qcbBottomLeft + + + + + + + spacer7 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + layout2 + + + + unnamed + + + + qlBottomRight + + + Bottom right: + + + + + + No Action + + + + + Lock Screen + + + + + Prevent Locking + + + + qcbBottomRight + + + + + + + + + layout10 + + + + unnamed + + + + spacer8 + + + Horizontal + + + Expanding + + + + 21 + 20 + + + + + + monitorLabel + + + + + + + + spacer9 + + + Horizontal + + + Expanding + + + + 31 + 20 + + + + + + + + spacer10 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + spacer11 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + + diff --git a/kcontrol/screensaver/category_list b/kcontrol/screensaver/category_list new file mode 100644 index 000000000..61115c0dc --- /dev/null +++ b/kcontrol/screensaver/category_list @@ -0,0 +1,16 @@ +// This list contains all screen saver categories. +// The categories are extracted for translation (see Makefile.am). + +// To show a screen saver in the list under a category, add the +// category in the screen saver desktop file using the syntax below. + +X-KDE-Category=Banners & Pictures +X-KDE-Category=Desktop Distortions +X-KDE-Category=Flying Things +X-KDE-Category=Fractals +X-KDE-Category=Gadgets & Simulations +X-KDE-Category=Illusions of Depth +X-KDE-Category=Miscellaneous +X-KDE-Category=OpenGL Screen Savers +X-KDE-Category=Rapid Motion +X-KDE-Category=Visit to Flatland diff --git a/kcontrol/screensaver/configure.in.in b/kcontrol/screensaver/configure.in.in new file mode 100644 index 000000000..3ea3b292d --- /dev/null +++ b/kcontrol/screensaver/configure.in.in @@ -0,0 +1,8 @@ +AC_HAVE_GL( + [ + AC_CHECK_LIB(GL,glXChooseVisual, + [ + AC_DEFINE(HAVE_GLXCHOOSEVISUAL, 1, [Define if you have glXChooseVisual()]) + ]) + ],[] + ) diff --git a/kcontrol/screensaver/kssmonitor.h b/kcontrol/screensaver/kssmonitor.h new file mode 100644 index 000000000..72122e979 --- /dev/null +++ b/kcontrol/screensaver/kssmonitor.h @@ -0,0 +1,15 @@ +#ifndef KSSMONITOR_H +#define KSSMONITOR_H + +#include "kswidget.h" + +class KSSMonitor : public KSWidget +{ +public: + KSSMonitor( QWidget *parent ) : KSWidget( parent ) {} + + // we don't want no steenking palette change + virtual void setPalette( const QPalette & ) {} +}; + +#endif diff --git a/kcontrol/screensaver/kswidget.cpp b/kcontrol/screensaver/kswidget.cpp new file mode 100644 index 000000000..58f28ff31 --- /dev/null +++ b/kcontrol/screensaver/kswidget.cpp @@ -0,0 +1,71 @@ +#include + +#include +#include "testwin.h" + +#ifdef HAVE_GLXCHOOSEVISUAL +#include +#endif + +KSWidget::KSWidget( QWidget* parent, const char* name, int f ) + : QXEmbed( parent, name, f ), colormap( None ) +{ +// use visual with support for double-buffering, for opengl +// this code is duplicated in kdebase/kdesktop/lock/ +#ifdef HAVE_GLXCHOOSEVISUAL + Visual* visual = CopyFromParent; + XSetWindowAttributes attrs; + int flags = 0; + if( true /*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 ) + { + if( XVisualInfo* info = glXChooseVisual( x11Display(), x11Screen(), attribs[ i ] )) + { + visual = info->visual; + colormap = XCreateColormap( x11Display(), RootWindow( x11Display(), x11Screen()), visual, AllocNone ); + attrs.colormap = colormap; + flags |= CWColormap; + XFree( info ); + break; + } + } + } + Window w = XCreateWindow( x11Display(), parentWidget() ? parentWidget()->winId() : RootWindow( x11Display(), x11Screen()), + x(), y(), width(), height(), 0, x11Depth(), InputOutput, visual, flags, &attrs ); + create( w ); +#endif +} + +KSWidget::~KSWidget() +{ +#ifdef HAVE_GLXCHOOSEVISUAL + if( colormap != None ) + XFreeColormap( x11Display(), colormap ); +#endif +} + +#include "kswidget.moc" diff --git a/kcontrol/screensaver/kswidget.h b/kcontrol/screensaver/kswidget.h new file mode 100644 index 000000000..56d731955 --- /dev/null +++ b/kcontrol/screensaver/kswidget.h @@ -0,0 +1,17 @@ +#ifndef KSWIDGET_H +#define KSWIDGET_H + +#include +#include + +class KSWidget : public QXEmbed +{ + Q_OBJECT +public: + KSWidget( QWidget *parent = NULL, const char* name = NULL, int flags = 0 ); + virtual ~KSWidget(); +private: + Colormap colormap; +}; + +#endif diff --git a/kcontrol/screensaver/saverconfig.cpp b/kcontrol/screensaver/saverconfig.cpp new file mode 100644 index 000000000..a32d61e0e --- /dev/null +++ b/kcontrol/screensaver/saverconfig.cpp @@ -0,0 +1,38 @@ +#include +#include + +#include "saverconfig.h" + +SaverConfig::SaverConfig() +{ +} + +bool SaverConfig::read(const QString &file) +{ + KDesktopFile config(file, true); + if( !config.tryExec()) + return false; + mExec = config.readPathEntry("Exec"); + mName = config.readEntry("Name"); + mCategory = i18n("Screen saver category", // Must be same in Makefile.am + config.readEntry("X-KDE-Category").utf8()); + + if (config.hasActionGroup("Setup")) + { + config.setActionGroup("Setup"); + mSetup = config.readPathEntry("Exec"); + } + + if (config.hasActionGroup("InWindow")) + { + config.setActionGroup("InWindow"); + mSaver = config.readPathEntry("Exec"); + } + + int indx = file.findRev('/'); + if (indx >= 0) { + mFile = file.mid(indx+1); + } + + return !mSaver.isEmpty(); +} diff --git a/kcontrol/screensaver/saverconfig.h b/kcontrol/screensaver/saverconfig.h new file mode 100644 index 000000000..1327dfdaa --- /dev/null +++ b/kcontrol/screensaver/saverconfig.h @@ -0,0 +1,29 @@ +#ifndef SAVERCONFIG_H +#define SAVERCONFIG_H + +#include + +class SaverConfig +{ +public: + SaverConfig(); + + bool read(const QString &file); + + QString exec() const { return mExec; } + QString setup() const { return mSetup; } + QString saver() const { return mSaver; } + QString name() const { return mName; } + QString file() const { return mFile; } + QString category() const { return mCategory; } + +protected: + QString mExec; + QString mSetup; + QString mSaver; + QString mName; + QString mFile; + QString mCategory; +}; + +#endif diff --git a/kcontrol/screensaver/saverlist.cpp b/kcontrol/screensaver/saverlist.cpp new file mode 100644 index 000000000..6b27973e0 --- /dev/null +++ b/kcontrol/screensaver/saverlist.cpp @@ -0,0 +1,13 @@ + +#include "saverlist.h" + +class SaverConfig; +class QPtrCollection; + +int SaverList::compareItems(QPtrCollection::Item item1, QPtrCollection::Item item2) +{ + SaverConfig *s1 = (SaverConfig *)item1; + SaverConfig *s2 = (SaverConfig *)item2; + + return s1->name().localeAwareCompare(s2->name()); +} diff --git a/kcontrol/screensaver/saverlist.h b/kcontrol/screensaver/saverlist.h new file mode 100644 index 000000000..e6f36be18 --- /dev/null +++ b/kcontrol/screensaver/saverlist.h @@ -0,0 +1,14 @@ +#ifndef SAVERLIST_H +#define SAVERLIST_H + +#include + +#include "saverconfig.h" + +class SaverList : public QPtrList +{ +protected: + virtual int compareItems(QPtrCollection::Item item1, QPtrCollection::Item item2); +}; + +#endif diff --git a/kcontrol/screensaver/screensaver.desktop b/kcontrol/screensaver/screensaver.desktop new file mode 100644 index 000000000..faab59047 --- /dev/null +++ b/kcontrol/screensaver/screensaver.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Exec=kcmshell screensaver +Icon=kscreensaver +Type=Application +DocPath=kcontrol/screensaver/index.html + + +X-KDE-Library=screensaver +X-KDE-FactoryName=screensaver +X-KDE-ParentApp=kcontrol + +Name=Screen Saver +Name[af]=Skerm Bewaarder +Name[ar]=مدخِر الشاشة +Name[be]=Зберагальнік экрана +Name[bg]=Екранен предпазител +Name[bn]=স্ক্রীন সেভার +Name[br]=Damanter Skramm +Name[bs]=Zaštita ekrana (screen saver) +Name[ca]=Salvapantalles +Name[cs]=Šetřič obrazovky +Name[csb]=Wëgaszôcz ekranu +Name[cy]=Arbedydd Sgrîn +Name[da]=Pauseskærm +Name[de]=Bildschirmschoner +Name[el]=Προφύλαξη οθόνης +Name[eo]=Ekrankurteno +Name[es]=Salvapantallas +Name[et]=Ekraanisäästja +Name[eu]=Pantaila babeslea +Name[fa]=محافظ صفحه نمایش +Name[fi]=Näytönsäästäjä +Name[fr]=Écran de veille +Name[fy]=Skermbefeiliging +Name[ga]=Spárálaí Scáileáin +Name[gl]=Protector de Pantalla +Name[he]=שומר מסך +Name[hi]=स्क्रीन सेवर +Name[hr]=Zaštita zaslona +Name[hu]=Képernyővédők +Name[is]=Skjásvæfur +Name[it]=Salvaschermo +Name[ja]=スクリーンセーバー +Name[kk]=Экран қорғаушысы +Name[km]=ធាតុ​សន្សំ​អេក្រង់ +Name[ko]=화면 보호기 +Name[lo]=ໂປຣແກຣມຮັກສາຫນ້າຈໍ +Name[lt]=Ekrano užsklanda +Name[lv]=Ekrāna saudzētāji +Name[mk]=Екрански чувар +Name[mn]=Дэлгэц гамнагч +Name[mt]=Screen saver +Name[nb]=Pauseskjerm +Name[nds]=Pausschirm +Name[ne]=स्क्रिनसेभर +Name[nl]=Schermbeveiliging +Name[nn]=Pauseskjerm +Name[nso]=Seboloki sa Pontsho +Name[pa]=ਸਕਰੀਨ-ਸੇਵਰ +Name[pl]=Wygaszacz ekranu +Name[pt]=Protector de Ecrã +Name[pt_BR]=Protetor de Tela +Name[ro]=Protecție de ecran +Name[ru]=Хранитель экрана +Name[rw]=Muzigama Mugaragaza +Name[se]=Šearbmasiestejeaddji +Name[sk]=Šetrič obrazovky +Name[sl]=Ohranjevalnik zaslona +Name[sr]=Чувар екрана +Name[sr@Latn]=Čuvar ekrana +Name[ss]=Sigcini-skrini +Name[sv]=Skärmsläckare +Name[ta]=திரைக் காப்பு +Name[te]=స్క్రీన్ సేవర్ +Name[tg]=Ноҷи парда +Name[th]=โปรแกรมรักษาหน้าจอ +Name[tr]=Ekran Koruyucusu +Name[tt]=Küräk Saqlağıç +Name[uk]=Зберігач екрана +Name[uz]=Ekran saqlovchisi +Name[uz@cyrillic]=Экран сақловчиси +Name[ven]=Tshivhulungi tsha tshikirini +Name[vi]=Bảo vệ Màn hình +Name[wa]=Sipårgneu di waitroûle +Name[xh]=Umgcini Wekhusi +Name[zh_CN]=屏幕保护程序 +Name[zh_TW]=螢幕保護程式 +Name[zu]=Umgcini skrini + +Comment=Screen Saver Settings +Comment[af]=Skerm Bewaarder Instellings +Comment[ar]=تعيينات مدخِر الشاشة +Comment[be]=Настаўленні ахоўніка экрана +Comment[bg]=Настройване предпазителя на екрана +Comment[bn]=স্ক্রীন সেভার সেটিংস +Comment[br]=Kefluniadur an Damanter Skramm +Comment[bs]=Postavke screen savera +Comment[ca]=Arranjament del salvapantalles +Comment[cs]=Nastavení šetřiče obrazovky +Comment[csb]=Nsatôw wëgaszôcza ekranu +Comment[cy]=Gosodiadau Arbedydd Sgrîn +Comment[da]=Opsætning af pauseskærm +Comment[de]=Einstellungen für Bildschirmschoner +Comment[el]=Ρυθμίσεις προφύλαξης οθόνης +Comment[eo]=Agordo de la ekrankurteno +Comment[es]=Preferencias del salvapantallas +Comment[et]=Ekraanisäästja seadistused +Comment[eu]=Pantaila babeslearen ezarpenak +Comment[fa]=تنظیمات محافظ صفحه نمایش +Comment[fi]=Näytönsäästäjän asetukset +Comment[fr]=Configuration de l'écran de veille +Comment[fy]=Skermbefeiliging ynstelle +Comment[ga]=Socruithe na Spárálaithe Scáileáin +Comment[gl]=Opcións do Protector de Pantalla +Comment[he]=שינוי הגדרות שומר המסך +Comment[hi]=स्क्रीन सेवर विन्यास +Comment[hr]=Postavke zaštite zaslona +Comment[hu]=A képernyővédő beállításai +Comment[is]=Stillingar skjásvæfu +Comment[it]=Impostazioni salvaschermo +Comment[ja]=スクリーンセーバーの設定 +Comment[ka]=Screen Saver-ის კონფიგურაცია +Comment[kk]=Экран қорғаушысының параметрлері +Comment[km]=ការ​កំណត់​ធាតុ​សន្សំ​អេក្រង់ +Comment[ko]=화면 보호기 설정 +Comment[lo]=ຕົວຢ່າງໂປຣແກຣມຮັກສາຫນ້າຈໍ +Comment[lt]=Ekrano užsklandos nustatymai +Comment[lv]=Ekrāna saudzētāju parametri +Comment[mk]=Поставувања на екранскиот чувар +Comment[mn]=Дэлгэц гамнагчийн тохируулга +Comment[ms]=Seting Screen Saver +Comment[mt]=Setings tal-iscreensaver +Comment[nb]=Tilpasning av pauseskjerm +Comment[nds]=Instellen för den Pausschirm +Comment[ne]=स्क्रिनसेभर सेटिङ +Comment[nl]=Schermbeveiliging instellen +Comment[nn]=Innstillingar for pauseskjerm +Comment[nso]=Dipeakanyo tsa Seboloki sa Pontsho +Comment[pa]=ਸਕਰੀਨ-ਸੇਵਰ (ਸਕਰੀਨ-ਸੇਵਰ) ਸੈਟਿੰਗ +Comment[pl]=Ustawienia wygaszacza ekranu +Comment[pt]=Configuração do Protector de Ecrã +Comment[pt_BR]=Configurações do Protetor de Tela +Comment[ro]=Configurează setările pentru protecția de ecran +Comment[ru]=Настройка хранителя экрана +Comment[rw]=Amagenamiterere Muzigama Mugaragaza +Comment[se]=Šearbmasiestejeaddji heivehusat +Comment[sk]=Nastavenie šetriča obrazovky +Comment[sl]=Nastavitve za ohranjevalnik zaslona +Comment[sr]=Поставке чувара екрана +Comment[sr@Latn]=Postavke čuvara ekrana +Comment[ss]=Kuhleleka kwesigcini-skrini +Comment[sv]=Anpassa skärmsläckare +Comment[ta]=திரை காப்பு அமைப்புகள் +Comment[te]=స్క్రీన్ సేవర్ అమరికలు +Comment[tg]=Танзимоти ноҷи парда +Comment[th]=ตั้งค่าโปรแกรมรักษาหน้าจอ +Comment[tr]=Ekran Koruyucusu Ayarları +Comment[tt]=Küräk Saqlağıçın Caylaw +Comment[uk]=Налаштування зберігача екрана +Comment[uz]=Ekran saqlovchisining moslamalari +Comment[uz@cyrillic]=Экран сақловчисининг мосламалари +Comment[ven]=Mavhekanyele a tshivhulungo tsha tshikirini +Comment[vi]=Thiết lập Trình bảo vệ Màn hình +Comment[wa]=Apontiaedjes do spårgneu di waitroûle +Comment[xh]=Izicwangciso Zomgcini Wekhusi +Comment[zh_CN]=屏幕保护程序设置 +Comment[zh_TW]=螢幕保護程式設定 +Comment[zu]=Izilungiselelo Zomgcini skrini + + +Keywords=screensavers,Priority +Keywords[ar]=مدخري الشاشة,الأولوية +Keywords[az]=ekran qoruyucular,Üstünlük,ekran qoruyucusu,ekran qoruyucuları +Keywords[be]=Зберагальнік экрану.Прыярытэт,screensavers,Priority +Keywords[bg]=предпазител, екран, приоритет, screensavers, Priority +Keywords[ca]=salvapantalles,Prioritat +Keywords[cs]=Šetřiče obrazovky,Priorita +Keywords[csb]=wëgaszaczë ekranu,prioritet +Keywords[cy]=arbedyddion sgrîn,Blaenoriaeth +Keywords[da]=pauseskærme,Prioritet +Keywords[de]=Bildschirmschoner,Priorität +Keywords[el]=προφύλαξη οθόνης,Προτεραιότητα +Keywords[eo]=ekrano,kurteno,prioritato +Keywords[es]=salvapantallas,Prioridad +Keywords[et]=ekraanisäästjad,prioriteet +Keywords[eu]=pantaila babesleak,lehentasuna +Keywords[fa]=محافظهای صفحه نمایش، اولویت +Keywords[fi]=näytönsäästäjät,prioriteetti +Keywords[fr]=écrans de veille,priorité,économiseur +Keywords[fy]=screensavers,skermbefeiliging,prioriteit,skermferskoatteling +Keywords[ga]=spárálaithe scáileáin,tosaíocht +Keywords[gl]=protectores de pantalla,Prioridade +Keywords[he]=שומרי מסך,עדיפות, screensavers,Priority +Keywords[hi]=स्क्रीन-सेवर्स,प्राथमिकता +Keywords[hr]=screensavers,Priority,zaštita zaslona,prioritet +Keywords[hu]=képernyővédők,prioritás +Keywords[id]=screensavers,Prioritas +Keywords[is]=skjásvæfa,forgangur +Keywords[it]=salvaschermi,priorità +Keywords[ja]=スクリーンセーバー,優先度 +Keywords[km]=ធាតុ​សន្សំ​អេក្រង់,អាទិភាព +Keywords[lo]=ຄວາມສຳຄັນຂອງໂປຣແກຣມຮັກສາຈໍພາບ +Keywords[lt]=ekrano užsklanda,ekrano užsklandos,Pirmenybė +Keywords[lv]=ekrāna saudzētāji,Prioritāte +Keywords[mk]=screensavers,Priority,екран,екрански чувар,приоритет +Keywords[mn]=Дэлгэц гамнагч,Давуу эрх +Keywords[ms]=gantian skrin, Keutamaan +Keywords[nb]=skjermbeskyttere,pauseskjerme,prioritet +Keywords[nds]=screensavers,Pausschirmen,Prioriteet +Keywords[ne]=स्क्रिनसेभर, प्राथमिकता +Keywords[nl]=screensavers,schermbeveiliging,prioriteit,schermvergrendeling +Keywords[nn]=pauseskjerm,prioritet +Keywords[nso]=diboloki tsa pontsho,Kgethokgolo +Keywords[pa]=ਸਕਰੀਨ-ਸੇਵਰ,ਦਰਜਾ +Keywords[pl]=wygaszacze ekranu,priorytet +Keywords[pt]=protectores de ecrã,prioridade +Keywords[pt_BR]=protetores de tela,prioridade +Keywords[ro]=protecție de ecran,prioritate +Keywords[rw]=MuzigamaMugaragaza,Uburenganzira +Keywords[se]=šearbmasiestejeaddji,ovdavuorru +Keywords[sk]=Šetriče obrazovky, Priorita +Keywords[sl]=ohranjevalniki zaslona,prednost +Keywords[sr]=screensavers,Priority,чувари екрана,приоритет +Keywords[sr@Latn]=screensavers,Priority,čuvari ekrana,prioritet +Keywords[sv]=skärmsläckare,Prioritet +Keywords[ta]=திரைக்காப்பு, முக்கியத்துவம் +Keywords[th]=ความสำคัญ,โปรแกรมรักษาจอภาพ +Keywords[tr]=ekran koruyucular,Öncelik,ekran koruyucusu,ekran koruyucuları +Keywords[uk]=зберігачі екрана,пріоритет +Keywords[uz]=ekran saqlovchilari,Muhimlik darajasi +Keywords[uz@cyrillic]=экран сақловчилари,Муҳимлик даражаси +Keywords[ven]=Tshifhatuwo tsha khomupwutha,Zwithogomelwaho +Keywords[vi]=bảo vệ màn hình,Ưu tiên +Keywords[wa]=sipårgneu di waitroûle,prumiristé +Keywords[xh]=abagcini bekhusi,Ukubaluleka +Keywords[zh_CN]=screensavers,Priority,优先级,屏幕保护程序 +Keywords[zh_TW]=screensavers,Priority,螢幕保護程式,優先權 +Keywords[zu]=abagcini zikrini,Ukubaluleka + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/screensaver/scrnsave.cpp b/kcontrol/screensaver/scrnsave.cpp new file mode 100644 index 000000000..a40c51919 --- /dev/null +++ b/kcontrol/screensaver/scrnsave.cpp @@ -0,0 +1,862 @@ +//----------------------------------------------------------------------------- +// +// KDE Display screen saver setup module +// +// Copyright (c) Martin R. Jones 1996,1999,2002 +// +// Converted to a kcc module by Matthias Hoelzer 1997 +// + + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "scrnsave.h" + +#include + +template class QPtrList; + +const uint widgetEventMask = // X event mask +(uint)( + ExposureMask | + PropertyChangeMask | + StructureNotifyMask + ); + +//=========================================================================== +// DLL Interface for kcontrol +typedef KGenericFactory KSSFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_screensaver, KSSFactory("kcmscreensaver") ) + + +static QString findExe(const QString &exe) { + QString result = locate("exe", exe); + if (result.isEmpty()) + result = KStandardDirs::findExe(exe); + return result; +} + +KScreenSaver::KScreenSaver(QWidget *parent, const char *name, const QStringList&) + : KCModule(KSSFactory::instance(), parent, name) +{ + mSetupProc = 0; + mPreviewProc = 0; + mTestWin = 0; + mTestProc = 0; + mPrevSelected = -2; + mMonitor = 0; + mTesting = false; + + // Add non-KDE path + KGlobal::dirs()->addResourceType("scrsav", + KGlobal::dirs()->kde_default("apps") + + "apps/ScreenSavers/"); + + setQuickHelp( i18n("

      Screen Saver

      This module allows you to enable and" + " configure a screen saver. Note that you can enable a screen saver" + " even if you have power saving features enabled for your display.

      " + " Besides providing an endless variety of entertainment and" + " preventing monitor burn-in, a screen saver also gives you a simple" + " way to lock your display if you are going to leave it unattended" + " for a while. If you want the screen saver to lock the session, make sure you enable" + " the \"Require password\" feature of the screen saver; if you do not, you can still" + " explicitly lock the session using the desktop's \"Lock Session\" action.")); + + setButtons( KCModule::Help | KCModule::Default | KCModule::Apply ); + + // Add KDE specific screensaver path + QString relPath="System/ScreenSavers/"; + KServiceGroup::Ptr servGroup = KServiceGroup::baseGroup( "screensavers" ); + if (servGroup) + { + relPath=servGroup->relPath(); + kdDebug() << "relPath=" << relPath << endl; + } + + KGlobal::dirs()->addResourceType("scrsav", + KGlobal::dirs()->kde_default("apps") + + relPath); + + readSettings( false ); + + mSetupProc = new KProcess; + connect(mSetupProc, SIGNAL(processExited(KProcess *)), + this, SLOT(slotSetupDone(KProcess *))); + + mPreviewProc = new KProcess; + connect(mPreviewProc, SIGNAL(processExited(KProcess *)), + this, SLOT(slotPreviewExited(KProcess *))); + + QBoxLayout *topLayout = new QHBoxLayout(this, 0, KDialog::spacingHint()); + + // left column + QVBoxLayout *leftColumnLayout = + new QVBoxLayout(topLayout, KDialog::spacingHint()); + QBoxLayout *vLayout = + new QVBoxLayout(leftColumnLayout, KDialog::spacingHint()); + + mSaverGroup = new QGroupBox(i18n("Screen Saver"), this ); + mSaverGroup->setColumnLayout( 0, Qt::Horizontal ); + vLayout->addWidget(mSaverGroup); + vLayout->setStretchFactor( mSaverGroup, 10 ); + QBoxLayout *groupLayout = new QVBoxLayout( mSaverGroup->layout(), + KDialog::spacingHint() ); + + mSaverListView = new QListView( mSaverGroup ); + mSaverListView->setMinimumHeight( 120 ); + mSaverListView->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + mSaverListView->addColumn(""); + mSaverListView->header()->hide(); + mSelected = -1; + groupLayout->addWidget( mSaverListView, 10 ); + connect( mSaverListView, SIGNAL(doubleClicked ( QListViewItem *)), this, SLOT( slotSetup())); + QWhatsThis::add( mSaverListView, i18n("Select the screen saver to use.") ); + + QBoxLayout* hlay = new QHBoxLayout(groupLayout, KDialog::spacingHint()); + mSetupBt = new QPushButton( i18n("&Setup..."), mSaverGroup ); + connect( mSetupBt, SIGNAL( clicked() ), SLOT( slotSetup() ) ); + mSetupBt->setEnabled(false); + hlay->addWidget( mSetupBt ); + QWhatsThis::add( mSetupBt, i18n("Configure the screen saver's options, if any.") ); + + mTestBt = new QPushButton( i18n("&Test"), mSaverGroup ); + connect( mTestBt, SIGNAL( clicked() ), SLOT( slotTest() ) ); + mTestBt->setEnabled(false); + hlay->addWidget( mTestBt ); + QWhatsThis::add( mTestBt, i18n("Show a full screen preview of the screen saver.") ); + + mSettingsGroup = new QGroupBox( i18n("Settings"), this ); + mSettingsGroup->setColumnLayout( 0, Qt::Vertical ); + leftColumnLayout->addWidget( mSettingsGroup ); + groupLayout = new QVBoxLayout( mSettingsGroup->layout(), + KDialog::spacingHint() ); + + mEnabledCheckBox = new QCheckBox(i18n( + "Start a&utomatically"), mSettingsGroup); + mEnabledCheckBox->setChecked(mEnabled); + QWhatsThis::add( mEnabledCheckBox, i18n( + "Automatically start the screen saver after a period of inactivity.") ); + connect(mEnabledCheckBox, SIGNAL(toggled(bool)), + this, SLOT(slotEnable(bool))); + groupLayout->addWidget(mEnabledCheckBox); + + QBoxLayout *hbox = new QHBoxLayout(); + groupLayout->addLayout(hbox); + hbox->addSpacing(30); + mActivateLbl = new QLabel(i18n("After:"), mSettingsGroup); + mActivateLbl->setEnabled(mEnabled); + hbox->addWidget(mActivateLbl); + mWaitEdit = new QSpinBox(mSettingsGroup); + mWaitEdit->setSteps(1, 10); + mWaitEdit->setRange(1, INT_MAX); + mWaitEdit->setSuffix(i18n(" min")); + mWaitEdit->setValue(mTimeout/60); + mWaitEdit->setEnabled(mEnabled); + connect(mWaitEdit, SIGNAL(valueChanged(int)), + this, SLOT(slotTimeoutChanged(int))); + mActivateLbl->setBuddy(mWaitEdit); + hbox->addWidget(mWaitEdit); + hbox->addStretch(1); + QString wtstr = i18n( + "The period of inactivity " + "after which the screen saver should start."); + QWhatsThis::add( mActivateLbl, wtstr ); + QWhatsThis::add( mWaitEdit, wtstr ); + + mLockCheckBox = new QCheckBox( i18n( + "&Require password to stop"), mSettingsGroup ); + mLockCheckBox->setEnabled( mEnabled ); + mLockCheckBox->setChecked( mLock ); + connect( mLockCheckBox, SIGNAL( toggled( bool ) ), + this, SLOT( slotLock( bool ) ) ); + groupLayout->addWidget(mLockCheckBox); + QWhatsThis::add( mLockCheckBox, i18n( + "Prevent potential unauthorized use by requiring a password" + " to stop the screen saver.") ); + hbox = new QHBoxLayout(); + groupLayout->addLayout(hbox); + hbox->addSpacing(30); + mLockLbl = new QLabel(i18n("After:"), mSettingsGroup); + mLockLbl->setEnabled(mEnabled && mLock); + QWhatsThis::add( mLockLbl, i18n( + "The amount of time, after the screen saver has started, to ask for the unlock password.") ); + hbox->addWidget(mLockLbl); + mWaitLockEdit = new QSpinBox(mSettingsGroup); + mWaitLockEdit->setSteps(1, 10); + mWaitLockEdit->setRange(1, 300); + mWaitLockEdit->setSuffix(i18n(" sec")); + mWaitLockEdit->setValue(mLockTimeout/1000); + mWaitLockEdit->setEnabled(mEnabled && mLock); + if ( mWaitLockEdit->sizeHint().width() < + mWaitEdit->sizeHint().width() ) { + mWaitLockEdit->setFixedWidth( mWaitEdit->sizeHint().width() ); + mWaitEdit->setFixedWidth( mWaitEdit->sizeHint().width() ); + } + else { + mWaitEdit->setFixedWidth( mWaitLockEdit->sizeHint().width() ); + mWaitLockEdit->setFixedWidth( mWaitLockEdit->sizeHint().width() ); + } + connect(mWaitLockEdit, SIGNAL(valueChanged(int)), + this, SLOT(slotLockTimeoutChanged(int))); + mLockLbl->setBuddy(mWaitLockEdit); + hbox->addWidget(mWaitLockEdit); + hbox->addStretch(1); + QString wltstr = i18n( + "Choose the period " + "after which the display will be locked. "); + QWhatsThis::add( mLockLbl, wltstr ); + QWhatsThis::add( mWaitLockEdit, wltstr ); + + // right column + QBoxLayout* rightColumnLayout = + new QVBoxLayout(topLayout, KDialog::spacingHint()); + + mMonitorLabel = new QLabel( this ); + mMonitorLabel->setAlignment( AlignCenter ); + mMonitorLabel->setPixmap( QPixmap(locate("data", + "kcontrol/pics/monitor.png"))); + rightColumnLayout->addWidget(mMonitorLabel, 0); + QWhatsThis::add( mMonitorLabel, i18n("A preview of the selected screen saver.") ); + + QBoxLayout* advancedLayout = new QHBoxLayout( rightColumnLayout, 3 ); + advancedLayout->addWidget( new QWidget( this ) ); + QPushButton* advancedBt = new QPushButton( + i18n( "Advanced &Options" ), this, "advancedBtn" ); + advancedBt->setSizePolicy( QSizePolicy( + QSizePolicy::Fixed, QSizePolicy::Fixed) ); + connect( advancedBt, SIGNAL( clicked() ), + this, SLOT( slotAdvanced() ) ); + advancedLayout->addWidget( advancedBt ); + advancedLayout->addWidget( new QWidget( this ) ); + + rightColumnLayout->addStretch(); + + if (mImmutable) + { + setButtons(buttons() & ~Default); + mSettingsGroup->setEnabled(false); + mSaverGroup->setEnabled(false); + } + + // finding the savers can take some time, so defer loading until + // we've started up. + mNumLoaded = 0; + mLoadTimer = new QTimer( this ); + connect( mLoadTimer, SIGNAL(timeout()), SLOT(findSavers()) ); + mLoadTimer->start( 100 ); + mChanged = false; + emit changed(false); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmscreensaver"), I18N_NOOP("KDE Screen Saver Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1997-2002 Martin R. Jones\n" + "(c) 2003-2004 Chris Howells")); + about->addAuthor("Chris Howells", 0, "howells@kde.org"); + about->addAuthor("Martin R. Jones", 0, "jones@kde.org"); + + setAboutData( about ); + + mSaverList.setAutoDelete(true); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::resizeEvent( QResizeEvent * ) +{ + + if (mMonitor) + { + mMonitor->setGeometry( (mMonitorLabel->width()-200)/2+23, + (mMonitorLabel->height()-186)/2+14, 151, 115 ); + } +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::mousePressEvent( QMouseEvent *) +{ + if ( mTesting ) + slotStopTest(); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::keyPressEvent( QKeyEvent *) +{ + if ( mTesting ) + slotStopTest(); +} +//--------------------------------------------------------------------------- +// +KScreenSaver::~KScreenSaver() +{ + if (mPreviewProc) + { + if (mPreviewProc->isRunning()) + { + int pid = mPreviewProc->pid(); + mPreviewProc->kill( ); + waitpid(pid, (int *) 0,0); + } + delete mPreviewProc; + } + + delete mTestProc; + delete mSetupProc; + delete mTestWin; +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::load() +{ + load( false ); +} + +void KScreenSaver::load( bool useDefaults ) +{ + readSettings( useDefaults); + +//with the following line, the Test and Setup buttons are not enabled correctly +//if no saver was selected, the "Reset" and the "Enable screensaver", it is only called when starting and when pressing reset, aleXXX +// mSelected = -1; + int i = 0; + QListViewItem *selectedItem = 0; + for (SaverConfig* saver = mSaverList.first(); saver != 0; saver = mSaverList.next()) { + if (saver->file() == mSaver) + { + selectedItem = mSaverListView->findItem ( saver->name(), 0 ); + if (selectedItem) { + mSelected = i; + break; + } + } + i++; + } + if ( selectedItem ) + { + mSaverListView->setSelected( selectedItem, true ); + mSaverListView->setCurrentItem( selectedItem ); + slotScreenSaver( selectedItem ); + } + + updateValues(); + mChanged = useDefaults; + emit changed( useDefaults ); +} + +//------------------------------------------------------------After--------------- +// +void KScreenSaver::readSettings( bool useDefaults ) +{ + KConfig *config = new KConfig( "kdesktoprc"); + + config->setReadDefaults( useDefaults ); + + mImmutable = config->groupIsImmutable("ScreenSaver"); + + config->setGroup( "ScreenSaver" ); + + mEnabled = config->readBoolEntry("Enabled", false); + mTimeout = config->readNumEntry("Timeout", 300); + mLockTimeout = config->readNumEntry("LockGrace", 60000); + mLock = config->readBoolEntry("Lock", false); + mSaver = config->readEntry("Saver"); + + if (mTimeout < 60) mTimeout = 60; + if (mLockTimeout < 0) mLockTimeout = 0; + if (mLockTimeout > 300000) mLockTimeout = 300000; + + mChanged = false; + delete config; +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::updateValues() +{ + if (mEnabled) + { + mWaitEdit->setValue(mTimeout/60); + } + else + { + mWaitEdit->setValue(0); + } + + mWaitLockEdit->setValue(mLockTimeout/1000); + mLockCheckBox->setChecked(mLock); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::defaults() +{ + load( true ); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::save() +{ + if ( !mChanged ) + return; + + KConfig *config = new KConfig( "kdesktoprc"); + config->setGroup( "ScreenSaver" ); + + config->writeEntry("Enabled", mEnabled); + config->writeEntry("Timeout", mTimeout); + config->writeEntry("LockGrace", mLockTimeout); + config->writeEntry("Lock", mLock); + + if ( !mSaver.isEmpty() ) + config->writeEntry("Saver", mSaver); + config->sync(); + delete config; + + // TODO (GJ): When you changed anything, these two lines will give a segfault + // on exit. I don't know why yet. + + DCOPClient *client = kapp->dcopClient(); + client->send("kdesktop", "KScreensaverIface", "configure()", ""); + + mChanged = false; + emit changed(false); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::findSavers() +{ + if ( !mNumLoaded ) { + mSaverFileList = KGlobal::dirs()->findAllResources("scrsav", + "*.desktop", false, true); + new QListViewItem ( mSaverListView, i18n("Loading...") ); + if ( mSaverFileList.isEmpty() ) + mLoadTimer->stop(); + else + mLoadTimer->start( 50 ); + } + + for ( int i = 0; i < 5 && + (unsigned)mNumLoaded < mSaverFileList.count(); + i++, mNumLoaded++ ) { + QString file = mSaverFileList[mNumLoaded]; + SaverConfig *saver = new SaverConfig; + if (saver->read(file)) { + mSaverList.append(saver); + } else + delete saver; + } + + if ( (unsigned)mNumLoaded == mSaverFileList.count() ) { + QListViewItem *selectedItem = 0; + int categoryCount = 0; + int indx = 0; + + mLoadTimer->stop(); + delete mLoadTimer; + mSaverList.sort(); + + mSelected = -1; + mSaverListView->clear(); + for ( SaverConfig *s = mSaverList.first(); s != 0; s = mSaverList.next()) + { + QListViewItem *item; + if (s->category().isEmpty()) + item = new QListViewItem ( mSaverListView, s->name(), "2" + s->name() ); + else + { + QListViewItem *categoryItem = mSaverListView->findItem( s->category(), 0 ); + if ( !categoryItem ) { + categoryItem = new QListViewItem ( mSaverListView, s->category(), "1" + s->category() ); + categoryItem->setPixmap ( 0, SmallIcon ( "kscreensaver" ) ); + } + item = new QListViewItem ( categoryItem, s->name(), s->name() ); + categoryCount++; + } + if (s->file() == mSaver) { + mSelected = indx; + selectedItem = item; + } + indx++; + } + + // Delete categories with only one item + QListViewItemIterator it ( mSaverListView ); + for ( ; it.current(); it++ ) + if ( it.current()->childCount() == 1 ) { + QListViewItem *item = it.current()->firstChild(); + it.current()->takeItem( item ); + mSaverListView->insertItem ( item ); + delete it.current(); + categoryCount--; + } + + mSaverListView->setRootIsDecorated ( categoryCount > 0 ); + mSaverListView->setSorting ( 1 ); + + if ( mSelected > -1 ) + { + mSaverListView->setSelected(selectedItem, true); + mSaverListView->setCurrentItem(selectedItem); + mSaverListView->ensureItemVisible(selectedItem); + mSetupBt->setEnabled(!mSaverList.at(mSelected)->setup().isEmpty()); + mTestBt->setEnabled(true); + } + + connect( mSaverListView, SIGNAL( currentChanged( QListViewItem * ) ), + this, SLOT( slotScreenSaver( QListViewItem * ) ) ); + + setMonitor(); + } +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::setMonitor() +{ + if (mPreviewProc->isRunning()) + // CC: this will automatically cause a "slotPreviewExited" + // when the viewer exits + mPreviewProc->kill(); + else + slotPreviewExited(mPreviewProc); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotPreviewExited(KProcess *) +{ + // Ugly hack to prevent continual respawning of savers that crash + if (mSelected == mPrevSelected) + return; + + if ( mSaverList.isEmpty() ) // safety check + return; + + // Some xscreensaver hacks do something nasty to the window that + // requires a new one to be created (or proper investigation of the + // problem). + delete mMonitor; + + mMonitor = new KSSMonitor(mMonitorLabel); + mMonitor->setBackgroundColor(black); + mMonitor->setGeometry((mMonitorLabel->width()-200)/2+23, + (mMonitorLabel->height()-186)/2+14, 151, 115); + mMonitor->show(); + // So that hacks can XSelectInput ButtonPressMask + XSelectInput(qt_xdisplay(), mMonitor->winId(), widgetEventMask ); + + if (mSelected >= 0) { + mPreviewProc->clearArguments(); + + QString saver = mSaverList.at(mSelected)->saver(); + QTextStream ts(&saver, IO_ReadOnly); + + QString word; + ts >> word; + QString path = findExe(word); + + if (!path.isEmpty()) + { + (*mPreviewProc) << path; + + while (!ts.atEnd()) + { + ts >> word; + if (word == "%w") + { + word = word.setNum(mMonitor->winId()); + } + (*mPreviewProc) << word; + } + + mPreviewProc->start(); + } + } + + mPrevSelected = mSelected; +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotEnable(bool e) +{ + mEnabled = e; + mActivateLbl->setEnabled( e ); + mWaitEdit->setEnabled( e ); + mLockCheckBox->setEnabled( e ); + mLockLbl->setEnabled( e && mLock ); + mWaitLockEdit->setEnabled( e && mLock ); + mChanged = true; + emit changed(true); +} + + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotScreenSaver(QListViewItem *item) +{ + if (!item) + return; + + int i = 0, indx = -1; + for (SaverConfig* saver = mSaverList.first(); saver != 0; saver = mSaverList.next()) { + if ( item->parent() ) + { + if ( item->parent()->text( 0 ) == saver->category() && saver->name() == item->text (0)) + { + indx = i; + break; + } + } + else + { + if ( saver->name() == item->text (0) ) + { + indx = i; + break; + } + } + i++; + } + if (indx == -1) { + mSelected = -1; + return; + } + + bool bChanged = (indx != mSelected); + + if (!mSetupProc->isRunning()) + mSetupBt->setEnabled(!mSaverList.at(indx)->setup().isEmpty()); + mTestBt->setEnabled(true); + mSaver = mSaverList.at(indx)->file(); + + mSelected = indx; + setMonitor(); + if (bChanged) + { + mChanged = true; + emit changed(true); + } +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotSetup() +{ + if ( mSelected < 0 ) + return; + + if (mSetupProc->isRunning()) + return; + + mSetupProc->clearArguments(); + + QString saver = mSaverList.at(mSelected)->setup(); + if( saver.isEmpty()) + return; + QTextStream ts(&saver, IO_ReadOnly); + + QString word; + ts >> word; + bool kxsconfig = word == "kxsconfig"; + QString path = findExe(word); + + if (!path.isEmpty()) + { + (*mSetupProc) << path; + + // Add caption and icon to about dialog + if (!kxsconfig) { + word = "-caption"; + (*mSetupProc) << word; + word = mSaverList.at(mSelected)->name(); + (*mSetupProc) << word; + word = "-icon"; + (*mSetupProc) << word; + word = "kscreensaver"; + (*mSetupProc) << word; + } + + while (!ts.atEnd()) + { + ts >> word; + (*mSetupProc) << word; + } + + // Pass translated name to kxsconfig + if (kxsconfig) { + word = mSaverList.at(mSelected)->name(); + (*mSetupProc) << word; + } + + mSetupBt->setEnabled( false ); + kapp->flushX(); + + mSetupProc->start(); + } +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotAdvanced() +{ + KScreenSaverAdvancedDialog dlg( topLevelWidget() ); + if ( dlg.exec() ) { + mChanged = true; + emit changed(true); + } +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotTest() +{ + if ( mSelected == -1 ) + return; + + if (!mTestProc) { + mTestProc = new KProcess; + } + + mTestProc->clearArguments(); + QString saver = mSaverList.at(mSelected)->saver(); + QTextStream ts(&saver, IO_ReadOnly); + + QString word; + ts >> word; + QString path = findExe(word); + + if (!path.isEmpty()) + { + (*mTestProc) << path; + + if (!mTestWin) + { + mTestWin = new TestWin(); + mTestWin->setBackgroundMode(QWidget::NoBackground); + mTestWin->setGeometry(0, 0, kapp->desktop()->width(), + kapp->desktop()->height()); + } + + mTestWin->show(); + mTestWin->raise(); + mTestWin->setFocus(); + // So that hacks can XSelectInput ButtonPressMask + XSelectInput(qt_xdisplay(), mTestWin->winId(), widgetEventMask ); + + grabMouse(); + grabKeyboard(); + + mTestBt->setEnabled( FALSE ); + mPreviewProc->kill(); + + while (!ts.atEnd()) + { + ts >> word; + if (word == "%w") + { + word = word.setNum(mTestWin->winId()); + } + (*mTestProc) << word; + } + + mTesting = true; + mTestProc->start(KProcess::NotifyOnExit); + } +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotStopTest() +{ + if (mTestProc->isRunning()) { + mTestProc->kill(); + } + releaseMouse(); + releaseKeyboard(); + mTestWin->hide(); + mTestBt->setEnabled(true); + mPrevSelected = -1; + setMonitor(); + mTesting = false; +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotTimeoutChanged(int to ) +{ + mTimeout = to * 60; + mChanged = true; + emit changed(true); +} + +//----------------------------------------------------------------------- +// +void KScreenSaver::slotLockTimeoutChanged(int to ) +{ + mLockTimeout = to * 1000; + mChanged = true; + emit changed(true); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotLock( bool l ) +{ + mLock = l; + mLockLbl->setEnabled( l ); + mWaitLockEdit->setEnabled( l ); + mChanged = true; + emit changed(true); +} + +//--------------------------------------------------------------------------- +// +void KScreenSaver::slotSetupDone(KProcess *) +{ + mPrevSelected = -1; // see ugly hack in slotPreviewExited() + setMonitor(); + mSetupBt->setEnabled( true ); + emit changed(true); +} + +#include "scrnsave.moc" diff --git a/kcontrol/screensaver/scrnsave.h b/kcontrol/screensaver/scrnsave.h new file mode 100644 index 000000000..28d05b73c --- /dev/null +++ b/kcontrol/screensaver/scrnsave.h @@ -0,0 +1,113 @@ +//----------------------------------------------------------------------------- +// +// KDE Display screen saver setup module +// +// Copyright (c) Martin R. Jones 1996 +// Copyright (C) Chris Howells 2004 +// + +#ifndef __SCRNSAVE_H__ +#define __SCRNSAVE_H__ + +#include +#include + +#include "kssmonitor.h" +#include "saverconfig.h" +#include "testwin.h" +#include "advanceddialog.h" +#include "kssmonitor.h" +#include "saverlist.h" + +class QTimer; +class QSpinBox; +class QSlider; +class QCheckBox; +class QLabel; +class QListView; +class QListViewItem; +class QPushButton; +class KIntNumInput; +class KProcess; + +//=========================================================================== +class KScreenSaver : public KCModule +{ + Q_OBJECT +public: + KScreenSaver(QWidget *parent, const char *name, const QStringList &); + ~KScreenSaver(); + + virtual void load(); + virtual void load(bool useDefaults); + virtual void save(); + virtual void defaults(); + + void updateValues(); + void readSettings(bool useDefaults); + +protected slots: + void slotEnable( bool ); + void slotScreenSaver( QListViewItem* ); + void slotSetup(); + void slotAdvanced(); + void slotTest(); + void slotStopTest(); + void slotTimeoutChanged( int ); + void slotLockTimeoutChanged( int ); + void slotLock( bool ); + void slotSetupDone(KProcess*); + // when selecting a new screensaver, the old preview will + // be killed. -- This callback is responsible for restarting the + // new preview + void slotPreviewExited(KProcess *); + void findSavers(); + +protected: + void writeSettings(); + void getSaverNames(); + void setMonitor(); + void setDefaults(); + void resizeEvent( QResizeEvent * ); + void mousePressEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + +protected: + TestWin *mTestWin; + KProcess *mTestProc; + KProcess *mSetupProc; + KProcess *mPreviewProc; + KSSMonitor *mMonitor; + QPushButton *mSetupBt; + QPushButton *mTestBt; + QListView *mSaverListView; + QSpinBox *mWaitEdit; + QSpinBox *mWaitLockEdit; + QCheckBox *mLockCheckBox; + QCheckBox *mStarsCheckBox; + QCheckBox *mEnabledCheckBox; + QLabel *mMonitorLabel; + QLabel *mActivateLbl; + QLabel *mLockLbl; + QStringList mSaverFileList; + SaverList mSaverList; + QTimer *mLoadTimer; + QGroupBox *mSaverGroup; + QGroupBox *mSettingsGroup; + + int mSelected; + int mPrevSelected; + int mNumLoaded; + bool mChanged; + bool mTesting; + + // Settings + int mTimeout; + int mLockTimeout; + bool mLock; + bool mEnabled; + QString mSaver; + bool mImmutable; +}; + +#endif diff --git a/kcontrol/screensaver/testwin.cpp b/kcontrol/screensaver/testwin.cpp new file mode 100644 index 000000000..a5d316be5 --- /dev/null +++ b/kcontrol/screensaver/testwin.cpp @@ -0,0 +1,13 @@ +#include +#include "testwin.h" + +class QXEmbed; + +TestWin::TestWin() + : KSWidget(0, 0, WStyle_Customize | WStyle_NoBorder | WX11BypassWM ) +{ + setFocusPolicy(StrongFocus); + KWin::setState( winId(), NET::StaysOnTop ); +} + +#include "testwin.moc" diff --git a/kcontrol/screensaver/testwin.h b/kcontrol/screensaver/testwin.h new file mode 100644 index 000000000..ff77b6b4d --- /dev/null +++ b/kcontrol/screensaver/testwin.h @@ -0,0 +1,14 @@ +#ifndef TESTWIN_H +#define TESTWIN_H + +#include "kswidget.h" + +class TestWin : public KSWidget +{ + Q_OBJECT +public: + TestWin(); +}; + +#endif + diff --git a/kcontrol/smartcard/Makefile.am b/kcontrol/smartcard/Makefile.am new file mode 100644 index 000000000..940dfaacc --- /dev/null +++ b/kcontrol/smartcard/Makefile.am @@ -0,0 +1,17 @@ +AM_CPPFLAGS = $(all_includes) +kde_module_LTLIBRARIES = kcm_smartcard.la + +kcm_smartcard_la_SOURCES = smartcard.cpp smartcardbase.ui nosmartcardbase.ui smartcard.skel + +kcm_smartcard_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined + +kcm_smartcard_la_LIBADD = -lkdeui -lksmartcard $(LIB_KIO) + +METASOURCES = AUTO + +noinst_HEADERS = smartcard.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmsmartcard.pot + +xdg_apps_DATA = smartcard.desktop diff --git a/kcontrol/smartcard/configure.in.in b/kcontrol/smartcard/configure.in.in new file mode 100644 index 000000000..e7e3ba1df --- /dev/null +++ b/kcontrol/smartcard/configure.in.in @@ -0,0 +1,3 @@ + +KDE_CHECK_HEADER(kcarddb.h, FOUND_KSMCARD="yes", FOUND_KSMCARD="no") +AM_CONDITIONAL(include_kcontrol_smartcard, test "$FOUND_KSMCARD" = "yes") diff --git a/kcontrol/smartcard/nosmartcardbase.ui b/kcontrol/smartcard/nosmartcardbase.ui new file mode 100644 index 000000000..fe8c4fa06 --- /dev/null +++ b/kcontrol/smartcard/nosmartcardbase.ui @@ -0,0 +1,81 @@ + +NoSmartcardBase + + + NoSmartcardBase + + + + 0 + 0 + 460 + 480 + + + + + unnamed + + + + TextLabel1 + + + <b>Unable to contact the KDE smartcard service.</b> + + + WordBreak|AlignVCenter + + + + + GroupBox1 + + + Possible Reasons + + + + unnamed + + + + TextLabel1_2 + + + +1) The KDE daemon, 'kded' is not running. You can restart it by running the command 'kdeinit' and then try reloading the KDE Control Center to see if this message goes away. + +2) You don't appear to have smartcard support in the KDE libraries. You will need to recompile the kdelibs package with libpcsclite installed. + + + WordBreak|AlignVCenter + + + + + + + Spacer5 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + kdialog.h + + + + diff --git a/kcontrol/smartcard/smartcard.cpp b/kcontrol/smartcard/smartcard.cpp new file mode 100644 index 000000000..e56c72617 --- /dev/null +++ b/kcontrol/smartcard/smartcard.cpp @@ -0,0 +1,400 @@ +/** + * smartcard.cpp + * + * Copyright (c) 2001 George Staikos + * Copyright (c) 2001 Fernando Llobregat + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "smartcard.h" + +KSmartcardConfig::KSmartcardConfig(QWidget *parent, const char *name) + : KCModule(parent, name),DCOPObject(name) +{ + + QVBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); + config = new KConfig("ksmartcardrc", false, false); + + DCOPClient *dc = KApplication::kApplication()->dcopClient(); + + _ok = false; + dc->remoteInterfaces("kded", "kardsvc", &_ok); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmsmartcard"), I18N_NOOP("KDE Smartcard Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2001 George Staikos")); + + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + setAboutData( about ); + + if (_ok) { + + + base = new SmartcardBase(this); + layout->add(base); + + _popUpKardChooser = new KPopupMenu(this,"KpopupKardChooser"); + _popUpKardChooser->insertItem(i18n("Change Module..."), + this, + SLOT(slotLaunchChooser())); + // The config backend + + connect(base->launchManager, SIGNAL(clicked()), SLOT( changed() )); + connect(base->beepOnInsert, SIGNAL(clicked()), SLOT( changed() )); + connect(base->enableSupport, SIGNAL(clicked()), SLOT( changed() )); + + + connect(base->enablePolling, SIGNAL(clicked()), SLOT( changed() )); + connect(base->_readerHostsListView, + SIGNAL(rightButtonPressed(QListViewItem *,const QPoint &,int)), + this, + SLOT(slotShowPopup(QListViewItem *,const QPoint &,int))); + + + + if (!connectDCOPSignal("", + "", + "signalReaderListChanged(QStringList)", + "loadReadersTab(QStringList)", + FALSE)) + + kdDebug()<<"Error connecting to DCOP server" <add(new NoSmartcardBase(this)); + } +} + + + + +KSmartcardConfig::~KSmartcardConfig() +{ + delete config; + delete _cardDB; +} + +void KSmartcardConfig::slotLaunchChooser(){ + + + if ( KCardDB::launchSelector(base->_readerHostsListView->currentItem()->parent()->text(0))){ + + KMessageBox::sorry(this,i18n("Unable to launch KCardChooser")); + } + + +} + +void KSmartcardConfig::slotShowPopup(QListViewItem * item ,const QPoint & _point,int i) +{ + + //The popup only appears in cards, not in the slots1 + if (item->isSelectable()) return; + _popUpKardChooser->exec(_point); + +} + + +void KSmartcardConfig::updateReadersState (QString readerName, + bool isCardPresent, + QString atr) { + + KListViewItem * tID=(KListViewItem *) base->_readerHostsListView->findItem(readerName, 0); + if (tID==0) return; + + KListViewItem * tIDChild=(KListViewItem*) tID->firstChild(); + if (tIDChild==NULL) return; + + delete tIDChild; + + if (!isCardPresent) + (void) new KListViewItem(tID,i18n("No card inserted")); + else{ + + getSupportingModule(tID,atr); + } + + +} + + + +void KSmartcardConfig::loadReadersTab( QStringList lr){ + + //Prepare data for dcop calls + QByteArray data, retval; + QCString rettype; + QDataStream arg(data, IO_WriteOnly); + QCString modName = "kardsvc"; + arg << modName; + + // New view items + KListViewItem * temp; + + //If the smartcard support is disabled we unload the kardsvc KDED module + // and return + + base->_readerHostsListView->clear(); + + if (!config->readBoolEntry("Enable Support", false)){ + + + + + // New view items + KListViewItem * temp; + kapp->dcopClient()->call("kded", "kded", "unloadModule(QCString)", + data, rettype, retval); + + (void) new KListViewItem(base->_readerHostsListView, + i18n("Smart card support disabled")); + + + return; + + } + + if (lr.isEmpty()){ + + + (void) new KListViewItem(base->_readerHostsListView, + i18n("No readers found. Check 'pcscd' is running")); + return; + } + + for (QStringList::Iterator _slot=lr.begin();_slot!=lr.end();++_slot){ + + temp= new KListViewItem(base->_readerHostsListView,*_slot); + + + QByteArray dataATR; + QDataStream argATR(dataATR,IO_WriteOnly); + argATR << *_slot; + + kapp->dcopClient()->call("kded", "kardsvc", "getCardATR(QString)", + dataATR, rettype, retval); + + + QString cardATR; + QDataStream retReaderATR(retval, IO_ReadOnly); + retReaderATR>>cardATR; + + if (cardATR.isNull()){ + + (void) new KListViewItem(temp,i18n("NO ATR or no card inserted")); + continue; + } + + getSupportingModule(temp,cardATR); + + + + + } + +} + + +void KSmartcardConfig::getSupportingModule( KListViewItem * ant, + QString & cardATR) const{ + + + if (cardATR.isNull()){ + + (void) new KListViewItem(ant,i18n("NO ATR or no card inserted")); + return; + } + + + QString modName=_cardDB->getModuleName(cardATR); + if (!modName.isNull()){ + QStringList mng= QStringList::split(",",modName); + QString type=mng[0]; + QString subType=mng[1]; + QString subSubType=mng[2]; + KListViewItem * hil =new KListViewItem(ant, + i18n("Managed by: "), + type, + subType, + subSubType); + hil->setSelectable(FALSE); + } + else{ + + + KListViewItem * hil =new KListViewItem(ant, + i18n("No module managing this card")); + hil->setSelectable(FALSE); + } + + } +void KSmartcardConfig::load() +{ + load( false ); + +void KSmartcardConfig::load(bool useDefaults ) +{ + + //Prepare data for dcop calls + QByteArray data, retval; + QCString rettype; + QDataStream arg(data, IO_WriteOnly); + QCString modName = "kardsvc"; + arg << modName; + + //Update the toggle buttons with the current configuration + + config->setReadDefaults( useDefaults ); + + if (_ok) { + base->enableSupport->setChecked(config->readBoolEntry("Enable Support", + false)); + base->enablePolling->setChecked(config->readBoolEntry("Enable Polling", + true)); + base->beepOnInsert->setChecked(config->readBoolEntry("Beep on Insert", + true)); + base->launchManager->setChecked(config->readBoolEntry("Launch Manager", + true)); + } + + // We call kardsvc to retrieve the current readers + kapp->dcopClient()->call("kded", "kardsvc", "getSlotList ()", + data, rettype, retval); + QStringList readers; + readers.clear(); + QDataStream retReader(retval, IO_ReadOnly); + retReader>>readers; + + //And we update the panel + loadReadersTab(readers); + + emit changed(useDefaults); + +} + + +void KSmartcardConfig::save() +{ +if (_ok) { + config->writeEntry("Enable Support", base->enableSupport->isChecked()); + config->writeEntry("Enable Polling", base->enablePolling->isChecked()); + config->writeEntry("Beep on Insert", base->beepOnInsert->isChecked()); + config->writeEntry("Launch Manager", base->launchManager->isChecked()); + + + QByteArray data, retval; + QCString rettype; + QDataStream arg(data, IO_WriteOnly); + QCString modName = "kardsvc"; + arg << modName; + + // Start or stop the server as needed + if (base->enableSupport->isChecked()) { + + kapp->dcopClient()->call("kded", "kded", "loadModule(QCString)", + data, rettype, retval); + config->sync(); + + kapp->dcopClient()->call("kded", "kardsvc", "reconfigure()", + data, rettype, retval); + } else { + + + + kapp->dcopClient()->call("kded", "kded", "unloadModule(QCString)", + data, rettype, retval); + } + + +} + emit changed(false); +} + +void KSmartcardConfig::defaults() +{ + load( true ); +} + + + +QString KSmartcardConfig::quickHelp() const +{ + return i18n("

      smartcard

      This module allows you to configure KDE support" + " for smartcards. These can be used for various tasks such as storing" + " SSL certificates and logging in to the system."); +} + +extern "C" +{ + KDE_EXPORT KCModule *create_smartcard(QWidget *parent, const char *) + { + return new KSmartcardConfig(parent, "kcmsmartcard"); + } + + KDE_EXPORT void init_smartcard() + { + KConfig *config = new KConfig("ksmartcardrc", false, false); + bool start = config->readBoolEntry("Enable Support", false); + delete config; + + if (start) { + QByteArray data, retval; + QCString rettype; + QDataStream arg(data, IO_WriteOnly); + QCString modName = "kardsvc"; + arg << modName; + kapp->dcopClient()->call("kded", "kded", "loadModule(QCString)", + data, rettype, retval); + } + } +} + + +#include "smartcard.moc" + diff --git a/kcontrol/smartcard/smartcard.desktop b/kcontrol/smartcard/smartcard.desktop new file mode 100644 index 000000000..6933619c8 --- /dev/null +++ b/kcontrol/smartcard/smartcard.desktop @@ -0,0 +1,212 @@ +[Desktop Entry] +Icon=identity +Type=Application +Exec=kcmshell smartcard +DocPath=kcontrol/smartcard.html + +X-KDE-Library=smartcard +X-KDE-Init=smartcard +X-KDE-ParentApp=kcontrol +Name=Smartcards +Name[af]=Smartkaarte +Name[ar]=البطاقات الذكية +Name[be]=Смарткарткі +Name[bn]=স্মার্টকার্ড +Name[ca]=Targetes intel·ligents +Name[csb]=Kartë bezpiekù +Name[el]=Έξυπνες κάρτες +Name[eo]=Memorkartoj +Name[et]=Kiipkaardid +Name[eu]=Txartel adimendunak +Name[fa]=کارتهای هوشمند +Name[fi]=Älykortit +Name[fr]=Cartes à puce +Name[fy]=Chipkaarten +Name[ga]=Cártaí Cliste +Name[he]=כרטיסים חכמים +Name[hi]=स्मार्टकार्ड +Name[hu]=Smartcard-beállítások +Name[is]=Snjallkort +Name[it]=Smartcard +Name[ja]=スマートカード +Name[ka]=სხარტი ბარათები +Name[kk]=Смарт-карталар +Name[ko]=스마트카드 +Name[lo]=ສະມາດຄາດ +Name[lt]=Gudrios kortelės +Name[lv]=Smartkartes +Name[mk]=Паметни картички +Name[ms]=Kad pintar +Name[nb]=Smartkort +Name[nds]=Smartkoorten +Name[ne]=स्मार्टकार्ड +Name[nl]=Chipkaarten +Name[nn]=Smartkort +Name[nso]=Dikarata ye botsana +Name[pa]=ਸਮਾਟ-ਕਾਰਡ +Name[pl]=Karty bezpieczeństwa +Name[pt_BR]=Smart Cards +Name[ro]=Smartcard-uri +Name[ru]=Смарткарты +Name[rw]=Amakaritarukuruzi +Name[se]=Jierbmásgoarttat +Name[sk]=Smartcard +Name[sl]=Pametne kartice +Name[sr]=Smart картице +Name[sr@Latn]=Smart kartice +Name[ss]=Smartcards +Name[sv]=Smartkort +Name[ta]=ஸ்மார்ட்கார்டுகள் +Name[te]=స్మార్ట్ కార్డులు +Name[tg]=Кортҳои боҳуш +Name[th]=สมาร์ทการ์ด +Name[tr]=Smartcard +Name[tt]=Smartkard +Name[uk]=Смарт-карти +Name[uz]=Smartcard'lar +Name[uz@cyrillic]=Smartcard'лар +Name[ven]=Garata +Name[vi]=Thẻ thông minh +Name[zh_CN]=智能卡 +Name[zh_TW]=智慧卡 +Name[zu]=Amakhadi akhaliphile +Comment=Configure smartcard support +Comment[af]=Konfigureer smartkaart ondersteun +Comment[ar]=إعداد دعم البطاقات الذكية +Comment[az]=Smartcard dəstəyini quraşdır +Comment[be]=Настаўленні падтрымкі смарткартак +Comment[bg]=Настройване поддръжката на smartcard +Comment[bn]=স্মার্টকার্ড সেটিংস কনফিগার করুন +Comment[bs]=Podesite podršku za smartcard +Comment[ca]=Configura el funcionament de les targetes intel·ligents +Comment[cs]=Nastavení podpory smartcards +Comment[csb]=Kònfigùracëjô kartów bezpiekù (SmartCards) +Comment[cy]=Ffurfweddu cynhaliaeth cerdyn smart +Comment[da]=Indstil smartcard-understøttelse +Comment[de]=Smartcard-Unterstützung einrichten +Comment[el]=Ρύθμιση υποστήριξης έξυπνων καρτών +Comment[eo]=Agordi subtenon por memorkartoj +Comment[es]=Configuración del soporte para tarjetas Smart +Comment[et]=Kiipkaardi toetuse seadistamine +Comment[eu]=Konfiguratu txartel adimendunen euskarria +Comment[fa]=پیکربندی پشتیبانی کارت هوشمند +Comment[fi]=Smartcard-tuki +Comment[fr]=Configuration de la gestion des cartes à puce +Comment[fy]=Chipkaartstipe ynstelle +Comment[ga]=Cumraigh tacaíocht do Chártaí Cliste +Comment[gl]=Configurar o soporte para smartcard +Comment[he]=שינוי הגדרות התמיכה בכרטיסים חכמים +Comment[hi]=स्मार्ट-कार्ड समर्थन कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje smartcard podrške +Comment[hu]=A smartcard-támogatás beállításai +Comment[is]=Stilla stuðning við snjallkort +Comment[it]=Configura supporto smartcard +Comment[ja]=スマートカードサポートの設定 +Comment[kk]=Смарт-карталарды қолдауын баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​គាំទ្រ Smartcard +Comment[ko]=스마트카드 지원 설정 +Comment[lo]=ປັບແຕ່ງການສະຫນັບສະຫນູນສະມາດຄາດ +Comment[lt]=Konfigūruoti gudrių kortelių palaikymą +Comment[lv]=Konfigurēt smārtkaršu atbalstu +Comment[mk]=Конфигурирајте ја поддршката за паметни картички +Comment[mn]=Smartcard дэмжилэг тохируулах +Comment[ms]=Konfigur sokongan kad pintar +Comment[mt]=Ikkonfigura s-sapport għal "smartcards" +Comment[nb]=Oppsett av smartkortstøtte +Comment[nds]=Ünnerstütten för Smartkoorten inrichten +Comment[ne]=स्मार्टकार्ड समर्थन कन्फिगर गर्नुहोस् +Comment[nl]=Chipkaartondersteuning instellen +Comment[nn]=Oppsett av smartkortstøtte +Comment[nso]=Beakanya thekgo ya karata ye botsana +Comment[pa]=ਸਮਾਟ-ਕਾਰਡ ਸਹਾਇਤਾ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja kart bezpieczeństwa (SmartCards) +Comment[pt]=Configurar o suporte de 'smartcards' +Comment[pt_BR]=Configurar suporte a Smart Cards +Comment[ro]=Configurează suportul pentru smartcard-uri +Comment[ru]=Настройка поддержки смарткарт +Comment[rw]=Kuboneza iyifashisha rya karitarukuruzi +Comment[se]=Heivet jierbmásgoartadoarjja +Comment[sk]=Nastavenie podpory smartcard +Comment[sl]=Nastavi podporo pametnih kartic +Comment[sr]=Подешавање подршке за smart картице +Comment[sr@Latn]=Podešavanje podrške za smart kartice +Comment[sv]=Anpassa stöd för smartkort +Comment[ta]=ஸ்மார்ட் கார்டு ஆதரவை அமை +Comment[tg]=Танзими пуштибонӣ аз кортҳои боҳуш +Comment[th]=ปรับแต่งการสนับสนุนสมาร์ตการ์ด +Comment[tr]=Smartcard desteğini yapılandır +Comment[tt]=Smartkard totıluın caylaw +Comment[uk]=Налаштування підтримки смарт-карт +Comment[uz]=Smartcard'ni moslash +Comment[uz@cyrillic]=Smartcard'ни мослаш +Comment[ven]=Dzudzanyani thikhedzo ya garata +Comment[vi]=Cấu hình các hỗ trợ thẻ thông minh +Comment[wa]=Apontiaedjes so sopoirt di smartcard +Comment[xh]=Qwalasela inkxaso ye smartcard +Comment[zh_CN]=配置智能卡支持 +Comment[zh_TW]=設定智慧卡 (SmartCard) 支援 +Comment[zu]=Hlanganisela ukuxhaswa kwekhadi elikhaliphile +Keywords=Smartcard,PKCS,SSL,reader,smart,card +Keywords[ar]=بطاقة ذكية,PKCS,SSL,قارئ,ذكية,بطاقة +Keywords[be]=Смарткарта,Смарткартка,Чытач,Карта,Смарт,Smartcard,PKCS,SSL,reader,smart,card +Keywords[bg]=карти, поддръжка, Smartcard, PKCS, SSL, reader, smart, card +Keywords[ca]=Targeta intel·ligent,PKCS,SSL,lector,smart,targeta +Keywords[csb]=Smartcard,PKCS,SSL,czëtôrz,bezpiek,karta +Keywords[cy]=Smartcard,PKCS,SSL,darllenydd,smart,cerdyn +Keywords[da]=Smartcard,PKCS,SSL,læser,smart,card +Keywords[de]=Smartcard,PKCS,SSL,Reader,Smart,Card,Leser +Keywords[el]=Έξυπνη κάρτα,PKCS,SSL,αναγνώστης,έξυπνη,κάρτα +Keywords[eo]=Memorkarto,PKCS,SSL,legilo,memoro,karto +Keywords[es]=Smartcard,PKCS,SSL,lector,smart,tarjeta +Keywords[et]=Smartcard,PKCS,SSL,lugeja,kiipkaart,kaart,kiip +Keywords[eu]=Txartel adimenduna,PKCS,SSL,irakurgailua,adimenduna,txartela +Keywords[fa]=کارت هوشمند، PKCS، SSL، خواننده، هوشمند، کارت +Keywords[fi]=Älykortti,PKCS,SSL,lukija +Keywords[fr]=carte à puce,puce,smartcard,pkcs,ssl,lecteur,carte +Keywords[fy]=Smartcard,PKCS,SSL,reader,smart,card,chipkaart,kaart +Keywords[ga]=Smartcard,PKCS,SSL,léitheoir,cliste,cárta +Keywords[gl]=Smartcard,PKCS,SSL,lector,pequena,tarxeta +Keywords[he]=כרטיסים חכמים,PKCS,SSL,קורא,כרטיס,חכם, Smartcard,reader,smart,card +Keywords[hi]=स्मार्टकार्ड,पीकेसीएस,एसएसएल,रीडर,स्मार्ट,कार्ड +Keywords[hr]=Smartcard,PKCS,SSL,reader,smart,card,čitač,kartica +Keywords[hu]=smartcard,PKCS,SSL,olvasó,smart,kártya +Keywords[is]=Snjallkort,PKCS,SSL,reader,smart,card,snjall,kort +Keywords[it]=smartcard,PKCS,SSL,lettore +Keywords[ja]=スマートカード,PKCS,SSL,リーダー,スマート,カード +Keywords[km]=Smartcard,PKCS,SSL,ឧបករណ៍​អាន,smart,ប័ណ្ណ +Keywords[lt]=Smartcard,PKCS,SSL,reader,smart,card, gudri kortelė,skaitytuvas,gudri,kortelė +Keywords[mk]=Smartcard,PKCS,SSL,reader,smart,card,паметна картичка,читач,паметна,картичка +Keywords[mn]=Smartcard,PKCS,SSL,Reader,Smart,Card,Уншигч +Keywords[nb]=smartkort,PKCS,SSL,leser,smart,kort +Keywords[nds]=Smartcard,PKCS,SSL,Leser,smart,card,Koort,Koorten +Keywords[ne]=स्मार्टकार्ड,PKCS,SSL, रिडर, छरितो, कार्ड +Keywords[nl]=Smartcard,PKCS,SSL,reader,smart,card,chipkaart,kaart +Keywords[nn]=smartkort,PKCS,SSL,lesar,smart,kort +Keywords[nso]=Karata ye botsana,PKCS,SSL,mmadi,botsana,karata +Keywords[pa]=Smartcard,PKCS,SSL,reader,smart,card, ਰੀਡਰ, ਕਾਰਡ, ਸਮਾਟ +Keywords[pl]=Smartcard,PKCS,SSL,czytnik,bezpieczeństwo,karta +Keywords[pt]=smartcard,PKCS,SSL,leitor,smart,placa +Keywords[pt_BR]=Smart Card,PKCS,SSL,leitor,smart,card +Keywords[ro]=smartcard,PKCS,SSL,cititor,smart,card +Keywords[rw]=Ikaritarukuruzi,PKCS,SSL,cyiza,ikarita +Keywords[se]=jierbmásgoarta,PKCS,SSL,logan,jierbmái,goarta +Keywords[sk]=Smartcard,PKCS,SSL,čítačka,karta,inteligentná +Keywords[sl]=Smartcard,PKCS,SSL,bralnik,pamet,kartica +Keywords[sr]=Smartcard,PKCS,SSL,reader,читач,smart,card,картица +Keywords[sr@Latn]=Smartcard,PKCS,SSL,reader,čitač,smart,card,kartica +Keywords[sv]=Smartkort,PKCS,SSL,läsare,smart,kort +Keywords[ta]=ஸ்மார்ட்கார்டு,PKCS,SSL,படிப்பான்,புத்திசாலி,அட்டை +Keywords[th]=สมาร์ตการ์ด,PKCS,SSL,เครื่องอ่าน,ฉลาด,การ์ด +Keywords[tr]=Smartcard,PKCS,SSL,okuyucu,smart,kart,akıllıkart +Keywords[uk]=Smartcard,PKCS,SSL,смарт-карта,зчитувач,картка +Keywords[uz]=Smartcard,PKCS,SSL,oʻquvchi,smart,card +Keywords[uz@cyrillic]=Smartcard,PKCS,SSL,ўқувчи,smart,card +Keywords[ven]=Garata,PKCS,SSL,muvhali,zwavhudi,Garata +Keywords[vi]=Thẻ thông minh,PKCS,SSL,đầu đọc,thông minh,thẻ +Keywords[wa]=Smartcard,PKCS,SSL,léjheu,smart,card +Keywords[xh]=Smartcard,PKCS,SSL,umfundi,bukeka,ikhadi +Keywords[zh_CN]=Smartcard,PKCS,SSL,reader,smart,card,智能卡,智能,卡,读卡器 +Keywords[zh_TW]=Smartcard,PKCS,SSL,reader,smart,card,智慧卡,閱讀器,智慧,卡 +Keywords[zu]=Ikhadi elikhaliphile,PKCS,SSLumfundi,okukhaliphile,ikhadi + +Categories=Qt;KDE;X-KDE-settings-peripherals; diff --git a/kcontrol/smartcard/smartcard.h b/kcontrol/smartcard/smartcard.h new file mode 100644 index 000000000..63f7e1e11 --- /dev/null +++ b/kcontrol/smartcard/smartcard.h @@ -0,0 +1,89 @@ +/** + * smartcard.h + * + * Copyright (c) 2001 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _KCM_SMARTCARD_H +#define _KCM_SMARTCARD_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include + +#include "smartcardbase.h" +#include "nosmartcardbase.h" + +class KConfig; +class KCardDB; +class KPopupMenu; +class KListViewItem; + +class KSmartcardConfig : public KCModule, public DCOPObject +{ + K_DCOP + Q_OBJECT + + +public: + KSmartcardConfig(QWidget *parent = 0L, const char *name = 0L); + virtual ~KSmartcardConfig(); + + SmartcardBase *base; + + void load(); + void load( bool useDefaults); + void save(); + void defaults(); + + int buttons(); + QString quickHelp() const; + + k_dcop: + + + void updateReadersState (QString readerName, + bool isCardPresent, + QString atr); + void loadReadersTab (QStringList lr); + + private slots: + + void slotShowPopup(QListViewItem * item ,const QPoint & _point,int i); + void slotLaunchChooser(); + + + +private: + + KConfig *config; + bool _ok; + KCardDB * _cardDB; + KPopupMenu * _popUpKardChooser; + + void getSupportingModule( KListViewItem * ant, + QString & cardATR) const ; + + +}; + +#endif + diff --git a/kcontrol/smartcard/smartcardbase.ui b/kcontrol/smartcard/smartcardbase.ui new file mode 100644 index 000000000..b5dda006b --- /dev/null +++ b/kcontrol/smartcard/smartcardbase.ui @@ -0,0 +1,310 @@ + +SmartcardBase + + + SmartcardBase + + + + 0 + 0 + 519 + 356 + + + + + unnamed + + + + TabWidget2 + + + true + + + + tab + + + Smartcard Support + + + + unnamed + + + + enableSupport + + + &Enable smartcard support + + + + + Layout2 + + + + unnamed + + + + enablePolling + + + false + + + Enable &polling to autodetect card events + + + In most cases you should have this enabled. It allows KDE to automatically detect card insertion and reader hotplug events. + + + + + Spacer3 + + + Horizontal + + + Fixed + + + + 15 + 20 + + + + + + launchManager + + + false + + + Automatically &launch card manager if inserted card is unclaimed + + + When you insert a smartcard, KDE can automatically launch a management tool if no other application attempts to use the card. + + + + + beepOnInsert + + + false + + + &Beep on card insert and removal + + + + + + + Spacer4 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + tab + + + Readers + + + + unnamed + + + + Layout3 + + + + unnamed + + + + + Reader + + + true + + + true + + + + + Type + + + true + + + true + + + + + Subtype + + + true + + + true + + + + + SubSubtype + + + true + + + true + + + + _readerHostsListView + + + true + + + + + Line1 + + + HLine + + + Sunken + + + Horizontal + + + + + GroupBox3 + + + + 1 + 0 + 0 + 0 + + + + PCSCLite Configuration + + + + TextLabel2 + + + + 10 + 20 + 380 + 40 + + + + + 1 + 0 + 0 + 0 + + + + To add new readers you have to modify /etc/readers.conf file and re-start pcscd + + + WordBreak|AlignVCenter + + + + + + + + + + + + + enableSupport + toggled(bool) + enablePolling + setEnabled(bool) + + + enableSupport + toggled(bool) + beepOnInsert + setEnabled(bool) + + + enableSupport + toggled(bool) + launchManager + setEnabled(bool) + + + enableSupport + toggled(bool) + SmartcardBase + enableSupport_toggled(bool) + + + enablePolling + toggled(bool) + SmartcardBase + enablePolling_toggled(bool) + + + + smartcardbase.ui.h + + + slotTestReader() + enableSupport_toggled(bool) + enablePolling_toggled(bool) + + + kdialog.h + + + + diff --git a/kcontrol/smserver/Makefile.am b/kcontrol/smserver/Makefile.am new file mode 100644 index 000000000..7cecaf66e --- /dev/null +++ b/kcontrol/smserver/Makefile.am @@ -0,0 +1,17 @@ +kde_module_LTLIBRARIES = kcm_smserver.la + +kcm_smserver_la_SOURCES = kcmsmserver.cpp smserverconfigdlg.ui smserverconfigimpl.cpp +kcm_smserver_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_smserver_la_LIBADD = -lkdeui +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = kcmsmserver.h smserverconfigimpl.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmsmserver.pot + +xdg_apps_DATA = kcmsmserver.desktop + +EXTRA_DIST = $(xdg_apps_DATA) diff --git a/kcontrol/smserver/kcmsmserver.cpp b/kcontrol/smserver/kcmsmserver.cpp new file mode 100644 index 000000000..9de1334b0 --- /dev/null +++ b/kcontrol/smserver/kcmsmserver.cpp @@ -0,0 +1,134 @@ +/* + * kcmsmserver.cpp + * Copyright (c) 2000,2002 Oswald Buddenhagen + * + * based on kcmtaskbar.cpp + * Copyright (c) 2000 Kurt Granroth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "kcmsmserver.h" +#include "smserverconfigimpl.h" + +typedef KGenericFactory SMSFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_smserver, SMSFactory("kcmsmserver") ) + +SMServerConfig::SMServerConfig( QWidget *parent, const char* name, const QStringList & ) + : KCModule (SMSFactory::instance(), parent, name) +{ + setQuickHelp( i18n("

      Session Manager

      " + " You can configure the session manager here." + " This includes options such as whether or not the session exit (logout)" + " should be confirmed, whether the session should be restored again when logging in" + " and whether the computer should be automatically shut down after session" + " exit by default.")); + + QVBoxLayout *topLayout = new QVBoxLayout(this); + dialog = new SMServerConfigImpl(this); + connect(dialog, SIGNAL(changed()), SLOT(changed())); + + dialog->show(); + topLayout->add(dialog); + load(); + +} + +void SMServerConfig::load() +{ + load( false ); +} + +void SMServerConfig::load(bool useDefaults ) +{ + KConfig *c = new KConfig("ksmserverrc", false, false); + c->setReadDefaults( useDefaults ); + c->setGroup("General"); + dialog->confirmLogoutCheck->setChecked(c->readBoolEntry("confirmLogout", true)); + bool en = c->readBoolEntry("offerShutdown", true); + dialog->offerShutdownCheck->setChecked(en); + dialog->sdGroup->setEnabled(en); + + QString s = c->readEntry( "loginMode" ); + if ( s == "default" ) + dialog->emptySessionRadio->setChecked(true); + else if ( s == "restoreSavedSession" ) + dialog->savedSessionRadio->setChecked(true); + else // "restorePreviousLogout" + dialog->previousSessionRadio->setChecked(true); + + switch (c->readNumEntry("shutdownType", int(KApplication::ShutdownTypeNone))) { + case int(KApplication::ShutdownTypeHalt): + dialog->haltRadio->setChecked(true); + break; + case int(KApplication::ShutdownTypeReboot): + dialog->rebootRadio->setChecked(true); + break; + default: + dialog->logoutRadio->setChecked(true); + break; + } + dialog->excludeLineedit->setText( c->readEntry("excludeApps")); + + delete c; + + emit changed(useDefaults); +} + +void SMServerConfig::save() +{ + KConfig *c = new KConfig("ksmserverrc", false, false); + c->setGroup("General"); + c->writeEntry( "confirmLogout", dialog->confirmLogoutCheck->isChecked()); + c->writeEntry( "offerShutdown", dialog->offerShutdownCheck->isChecked()); + QString s = "restorePreviousLogout"; + if ( dialog->emptySessionRadio->isChecked() ) + s = "default"; + else if ( dialog->savedSessionRadio->isChecked() ) + s = "restoreSavedSession"; + c->writeEntry( "loginMode", s ); + + c->writeEntry( "shutdownType", + dialog->haltRadio->isChecked() ? + int(KApplication::ShutdownTypeHalt) : + dialog->rebootRadio->isChecked() ? + int(KApplication::ShutdownTypeReboot) : + int(KApplication::ShutdownTypeNone)); + c->writeEntry("excludeApps", dialog->excludeLineedit->text()); + c->sync(); + delete c; + + // update the k menu if necessary + QByteArray data; + kapp->dcopClient()->send( "kicker", "kicker", "configure()", data ); +} + +void SMServerConfig::defaults() +{ + load( true ); +} + +#include "kcmsmserver.moc" + diff --git a/kcontrol/smserver/kcmsmserver.desktop b/kcontrol/smserver/kcmsmserver.desktop new file mode 100644 index 000000000..1fbb6d77e --- /dev/null +++ b/kcontrol/smserver/kcmsmserver.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Icon=exit +Type=Application +DocPath=kcontrol/kcmsmserver/index.html +Exec=kcmshell kcmsmserver + + +X-KDE-Library=smserver +X-KDE-FactoryName=smserver +X-KDE-ParentApp=kcontrol + +Name=Session Manager +Name[af]=Sessie Bestuurder +Name[ar]=مسيير الجلسات +Name[az]=İclas İdarəcisi +Name[be]=Кіраўнік сесіяў +Name[bg]=Системни сесии +Name[bn]=সেশন ম্যানেজার +Name[br]=Merour an dalc'hioù +Name[bs]=Upravljanje sesijama +Name[ca]=Gestor de la sessió +Name[cs]=Správce relace +Name[csb]=Menedżer sesëji +Name[cy]=Rheolydd Sesiwn +Name[da]=Sessionshåndtering +Name[de]=Sitzungsverwaltung +Name[el]=Διαχειριστής συνεδρίας +Name[eo]=Seancokonservilo +Name[es]=Gestor de sesiones +Name[et]=Seansihaldur +Name[eu]=Saio kudeatzailea +Name[fa]=مدیر نشست +Name[fi]=Istunnonhallinta +Name[fr]=Gestionnaire de session +Name[fy]=Sesjebehear +Name[ga]=Bainisteoir Seisiúin +Name[gl]=Xestor de Sesións +Name[he]=מנהל ההפעלה +Name[hi]=सत्र प्रबंधक +Name[hr]=Upravitelj sesijama +Name[hu]=Munkafolyamatok +Name[id]=Manajer Sesi +Name[is]=Setustjóri +Name[it]=Gestione della sessione +Name[ja]=セッションマネージャ +Name[ka]=სეანსების მენეჯერი +Name[kk]=Сеанс менеджері +Name[km]=កម្មវិធី​គ្រប់គ្រង​សម័យ +Name[ko]=세션 관리자 +Name[lo]=ເຄື່ອງມືຈັດການເຊສຊັນ +Name[lt]=Sesijos valdyklė +Name[lv]=Sesiju Menedžeris +Name[mk]=Менаџер на сесии +Name[mn]=Суулт удирдлага +Name[ms]=Pengurus Sesi +Name[mt]=Manager tas-sessjoni +Name[nb]=Øktbehandler +Name[nds]=Törnpleger +Name[ne]=सत्र प्रबन्धक +Name[nl]=Sessiebeheer +Name[nn]=Økthandsamar +Name[nso]=Molaodi wa Tiragalo +Name[pa]=ਸ਼ੈਸ਼ਨ ਮੈਨੇਜਰ +Name[pl]=Menedżer sesji +Name[pt]=Gestor de Sessões +Name[pt_BR]=Gerenciador de Sessão +Name[ro]=Managerul de sesiune +Name[ru]=Диспетчер сеансов +Name[rw]=Mugenga Mukoro +Name[se]=Bargovuorrogieđahalli +Name[sk]=Správca relácie +Name[sl]=Upravitelj sej +Name[sr]=Менаџер сесија +Name[sr@Latn]=Menadžer sesija +Name[sv]=Sessionshanterare +Name[ta]=அமர்வு மேலாளர் +Name[tg]=Мудири нишаст +Name[th]=ตัวจัดการวาระ +Name[tr]=Oturum Yöneticisi +Name[tt]=Sessi İdäräçe +Name[uk]=Менеджер сеансів +Name[uz]=Seans boshqaruvchisi +Name[uz@cyrillic]=Сеанс бошқарувчиси +Name[ven]=Mulanguli wa tshitenwa +Name[vi]=Trình quản lí Phiên đăng nhập +Name[wa]=Manaedjeu di sessions +Name[xh]=Umphathi wesiqendu +Name[zh_CN]=会话管理器 +Name[zh_TW]=工作階段管理程式 +Name[zu]=Imenenja yesiqendu + +Comment=Configure the session manager and logout settings +Comment[af]=Konfigureer die sessie bestuurder en teken af instellings +Comment[ar]=إعداد مسيير الجلسات و تعيينات تسجيل الخروج +Comment[be]=Настаўленні кіраўніка сеансаў і параметраў выхаду +Comment[bg]=Настройване сесиите на системата и поведението при изход +Comment[bn]=সেশন ম্যানেজার এবং লগ-আউট সেটিংস কনফিগার করুন +Comment[br]=Kefluniañ ar merour an dalc'hioù hag an doare mont kuit +Comment[bs]=Podesite menadžer sesija i postavke odjave +Comment[ca]=Aquí podeu configurar el gestor de la sessió i la sortida +Comment[cs]=Nastavení správce relace a odhlašování +Comment[csb]=Kònfigùracëjô menedżera sesëji ë nastôwów wëlogòwaniô +Comment[cy]=Ffurfweddu'r rheolydd sesiwn a gosodiadau allgofnodi +Comment[da]=Indstil sessionshåndterigen og opsætning for at logge af +Comment[de]=Einstellungen für Sitzungsverwaltung und Abmeldung vornehmen +Comment[el]=Ρυθμίστε το διαχειριστή συνεδρίας και τις επιλογές αποσύνδεσης +Comment[eo]=Agordo de la seancokonservilo kaj la adiaŭa maniero +Comment[es]=Configura el gestor de sesiones y las opciones de salida +Comment[et]=Seansihalduri ja väljalogimise seadistamine +Comment[eu]=Konfiguratu saio kudeatzailea eta saio amaieraren ezarpenak +Comment[fa]=پیکربندی مدیر نشست و تنظیمات خروج +Comment[fi]=Istunnonhallinnan ja uloskirjautumisen asetukset +Comment[fr]=Configuration du gestionnaire de session et réglages de la sortie +Comment[fy]=Hjir kinne jo it sesjebehear en ôfmeld-ynstellings fêststelle +Comment[gl]=Configurar o xestor de sesións e as opcións de saída +Comment[he]=שינוי הגדרות מנהל ההפעלה והיציאה מהמערכת +Comment[hi]=सत्र प्रबंधक तथा लॉगआउट विन्यास कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje upravitelja sesijama i postavkama odjavljivanja +Comment[hu]=A KDE munkafolyamat és a kijelentkezési mód beállításai +Comment[is]=Stilla setustjóra og aðgerðir við útstimplun +Comment[it]=Configura il gestore della sessione e le impostazioni di fine sessione +Comment[ja]=セッションマネージャとログアウト時の設定 +Comment[ka]=სეანსების მენეჯერის და სისტემიდან გამოსვლის კონფიგურაცია +Comment[kk]=Сеанс менеджерді және жүйеден шығу параметрлерін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​កម្មវិធី​គ្រប់គ្រង​សម័យ និង​ការ​កំណត់​ពេល​ចេញ +Comment[ko]=세션 관리자와 로그아웃 설정 관리 +Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງ ມືຈັດການເຊສຊັນໄດ້ທີ່ນີ້ +Comment[lt]=Čia galite konfigūruoti sesijos tvarkyklę ir išsiregistravimo nustatymus +Comment[lv]=Šeit jūs varat konfigurēt sesiju menedžeri un pieteikšanās parametrus +Comment[mk]=Конфигурирајте го менаџерот на сесии и поставувањата за одјавување +Comment[mn]=Суулт удирдлага ба гаралтын тохиргоо хийх +Comment[ms]=Konfigur seting pengurus sesi dan bentangan +Comment[mt]=Ikkonfigura l-manager tas-sessjoni u tal-logout +Comment[nb]=Her kan du tilpasse øktbehandleren og utlogginga +Comment[nds]=Dat Afmellen un den Törnpleger instellen +Comment[ne]=सत्र प्रबन्धक र लगआउट सेटिङ कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u het sessiebeheer en de afmeld-instellingen bepalen +Comment[nn]=Oppsett av økthandsamar og utlogging +Comment[nso]=Beakanya molaodi wa tiragalo le dipeakanyo tsa gotswa +Comment[pa]=ਸ਼ੈਸ਼ਨ ਮੈਨੇਜਰ ਅਤੇ ਲਾਗਆਉਟ ਸੈਟਿੰਗ ਦੀ ਸਥਾਪਨ +Comment[pl]=Konfiguracja menedżera sesji i ustawień wylogowania +Comment[pt]=Configuração do gestor de sessões e das opções de encerramento +Comment[pt_BR]=Configura o gerenciador de sessão e definições de logout +Comment[ro]=Configurează managerul de sesiune și setările de ieșire +Comment[ru]=Настройка диспетчера сеансов +Comment[rw]=Umukoro Muyobozi no Gufunga Igenamiterere +Comment[se]=Heivet bargovuorrogieđahalli ja olggosčáliheami +Comment[sk]=Nastavenie správcu relácií a odhlásenia +Comment[sl]=Tu lahko nastavite upravljalnik sej in nastavitve odjav +Comment[sr]=Подешавање менаџера сесија и поставки одјављивања +Comment[sr@Latn]=Podešavanje menadžera sesija i postavki odjavljivanja +Comment[sv]=Anpassa sessionshanteraren och utloggningsinställningar +Comment[ta]=அமர்வு மேளாலர் மற்றும் வெளிச்செல் அமைப்புகளை வடிவமை +Comment[tg]= Метавонед мудири нишаст ва танзимоти хурӯҷро дар инҷо пахш кунед +Comment[th]=ปรับแต่งการทำงานของเครื่องมือจัดการวาระและการล็อกเอาต์ +Comment[tr]=Oturum yöneticisi ve çıkış ayarlarını yapılandır +Comment[tt]=Sessi idäräçen belän kerü/çığu tärtiben caylaw +Comment[uk]=Налаштування менеджеру сеансів та параметри виходу з системи +Comment[uz]=Seans boshqaruvchisini va chiqish moslamalarini moslash +Comment[uz@cyrillic]=Сеанс бошқарувчисини ва чиқиш мосламаларини мослаш +Comment[ven]=Dzudzanyani mulanguli wa ntshitenwa ni dovhe ni vale mavhekanyele +Comment[vi]=Cấu hình trình quản lý phiên đăng nhập và các thiết lập đăng xuất +Comment[wa]=Apontiaedje do manaedjeu si sessions eyet apontiaedjes do dislodjaedje +Comment[xh]=Qwalasela umphathi wesiqendu nezicwangciso zokuphuma ngaphandle +Comment[zh_CN]=配置会话管理器和注销设置 +Comment[zh_TW]=設定工作階段管理程式與登出設定值 +Comment[zu]=Hlanganisela imenenja yesiqendu kanye nezilungiselelo zokuphuma ngaphandle + +Keywords=ksmserver,session,logout,confirmation,save,restore +Keywords[ar]=ksmserver,جلسة,خروج,تأكيد,حفظ,استعادة +Keywords[az]=ksmserver,iclas,çıxış,qeyd et +Keywords[be]=Сесія,Выхад,Канец сесіі,Пацверджанне,Захаванне,Захаваць,Аднавіць,Аднаўленне,ksmserver,session,logout,confirmation,save,restore +Keywords[bg]=сесия, сесии, изход, запис, възстановяване, ksmserver, session, logout, confirmation, save, restore +Keywords[ca]=ksmserver,sessió,sortida,confirmació,desa,restaura +Keywords[cs]=Správce relace,Relace,Odhlášení,Potvrzení,Uložení,Obnovení +Keywords[csb]=ksmserver,sesëjô,wëlogòwanié,pòcwierdzenié,zachòwanié stónu,òdtwòrzenié,kùńc robòtë,kùńc pracë +Keywords[cy]=ksmserver,sesiwn,allgofnodi,cadarnhau,cadw,adfer +Keywords[da]=ksmserver,session,log af,bekræftelse,gem,genopret +Keywords[de]=Ksmserver,Sitzung,Abmelden,Logout,Bestätigung,Speichern,Wiederherstellen +Keywords[el]=ksmserver,συνεδρία,αποσύνδεση,επιβεβαίωση,αποθήκευση,αποκατάσταση +Keywords[eo]=seancokonservilo,seanco,adaiŭo,konfirmo,sekurigo,restarigo +Keywords[es]=ksmserver,sesión,salida,confirmación,guardar,restaurar +Keywords[et]=ksmserver,seanss,väljalogimine,kinnitus,salvestamine,taastamine +Keywords[eu]=ksmserver,saioa,saio amaiera,berrespena,gorde,berrezarri +Keywords[fa]=ksmserver، نشست، خروج، تأیید، ذخیره، بازنشانی +Keywords[fi]=ksmserver,istunto,lopetus,vahvistus,tallenna,palauta +Keywords[fr]=ksmserver,session,arrêt,logout,confirmation,enregistrement,enregistrer,restaurer,restauration,connexion,déconnexion +Keywords[fy]=ksmserver,sesje,logout,ôfmelde,befêstiging,herstelle,opslaan,bewarje +Keywords[ga]=ksmserver,seisiún,logáil amach,dearbhú,sábháil,athchóiriú +Keywords[gl]=ksmserver,sesión,saída,confirmación,guardar,restaurar +Keywords[he]=הפעלה,יציאה,אישור,שמירה,שיחזור,ksmserver, session,logout,confirmation,save,restore +Keywords[hi]=केएसएम-सर्वर,सत्र,लॉगआउट,पुष्टि,सहेजें,बहाल करें +Keywords[hr]=ksmserver,session,logout,confirmation,save,restore,sesija,odjava,potvrda,spremanje,obnavljanje +Keywords[hu]=ksmserver,munkafolyamat,kijelentkezés,megerősítés,mentés,visszatöltés +Keywords[is]=ksmserver,seta,stimpla út,innskráning,staðfesting,vista,endurheimta +Keywords[it]=ksmserver,sessione,uscita,conferma,salva,ripristina +Keywords[ja]=ksmserver,セッション,ログアウト,確認,保存,復旧 +Keywords[km]=ksmserver,សម័យ,ចេញ,ការ​អះអាង,រក្សាទុក,ស្ដារ​ឡើង​វិញ +Keywords[lt]=ksmserver,sesija,išsiregistravimas,patvirtinimas,išsaugoti,atstatyti +Keywords[lv]=ksmserveris,sesija,atteikšanās,apstiprinājums,saglabāt,atjaunot +Keywords[mk]=ksmserver,session,logout,confirmation,save,restore, сесија,одјави се,потврда,сними,реконструирај +Keywords[mn]=Ksmсервер,Суулт,Гарах,Logout,Бататгах,Хадгалах,Сэргээх +Keywords[mt]=ksmserver,session,logout,temm is-sessjoni,confirmation,save,restore +Keywords[nb]=ksmserver,økt,utlogging,lagre,gjenopprette +Keywords[nds]=ksmserver,Törn,afmellen,nafragen,Nafraag,sekern,wedderherstellen +Keywords[ne]=ksmserver,सत्र, लग आउट, यकीन, बचत गर्नुहोस्, पूर्वावस्थामा फर्काउनुहोस् +Keywords[nl]=ksmserver,sessie,logout,uitloggen,afmelden,bevestiging,herstellen,opslaan +Keywords[nn]=ksmserver,økt,utlogging,stadfesting,lagra,gjenopprett +Keywords[nso]=ksmseabi,tiragalo,etswa,kgonthisiso,boloka,bolokaleswa +Keywords[pa]=ksmserver,session,logout,confirmation,save,restore,ਸੰਭਾਲੋ,ਲਾਗਆਉਟ,ਪੁਸ਼ਟੀ +Keywords[pl]=ksmserver,sesja,wylogowanie,potwierdzenie,zachowanie stanu,odtworzenie,kończenie pracy +Keywords[pt]=ksmserver,sessão,terminar,confirmar,gravar,restaurar +Keywords[pt_BR]=ksmserver,sessão,finalizar,sair,confirmação,salvar,restaurar +Keywords[ro]=ksmserver,sesiune,ieșire,confirmare,salvare,refacere +Keywords[rw]=ksm-seriveri,umukoro,gufunga,iyemeza,kubika,kugarura +Keywords[se]=ksmserver,bargovuorru,olggosčáliheapmi,nannen,vurket,máhcahit +Keywords[sk]=ksmserver,relácia,odhlásenie,potvrdenie,uloženie,obnovenie +Keywords[sl]=ksmserver,seja,odjava,potrditev,shrani,obnovi +Keywords[sr]=ksmserver,session,logout,confirmation,save,restore,сесија,одјављивање, потврда,снимање,обнављање +Keywords[sr@Latn]=ksmserver,session,logout,confirmation,save,restore,sesija,odjavljivanje, potvrda,snimanje,obnavljanje +Keywords[sv]=ksmserver,session,logga ut,bekräftelse,spara,återställa +Keywords[ta]=ksmசேவகன்,அமர்வு,வெளிசெல்,உறுதி செய்,சேமி,திரும்ப பெறு +Keywords[th]=ksmserver,วาระ,ล็อกเอาต์,การยืนยัน,บันทึก,เรียกค่าคืน +Keywords[tr]=ksmserver,oturum,çıkış,kaydet +Keywords[uk]=ksmserver,сеанс,кінець сеансу,підтвердження,збереження,відновлення +Keywords[uz]=ksmserver,seans,chiqish,tasdiqlash,saqlash,tiklash +Keywords[uz@cyrillic]=ksmserver,сеанс,чиқиш,тасдиқлаш,сақлаш,тиклаш +Keywords[ven]=siva ya ksm,tshitenwa,tsimani,khwathisedzani,vhulunga,vhekanyani hafhu +Keywords[vi]=ksmserver,phiên đăng nhập,đăng xuất,xác nhận,sao lưu,phục hồi +Keywords[wa]=ksmserver,session,dislodjî,acertiner,schaper,ristorer +Keywords[xh]=ksmserver,isiqendu,phuma ngaphandle,uqinisekiso,gcina,gcina kwakhona +Keywords[zh_CN]=ksmserver,会话,注消,确认,保存,恢复 +Keywords[zh_TW]=ksmserver,session,logout,confirmation,save,restore,工作階段,登出,確認,儲存,回復 +Keywords[zu]=ksmserver,isiqendu,ukuphuma ngaphandle,ukuqiniseka,gcina,vuselela + +Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcontrol/smserver/kcmsmserver.h b/kcontrol/smserver/kcmsmserver.h new file mode 100644 index 000000000..4f51ab3d5 --- /dev/null +++ b/kcontrol/smserver/kcmsmserver.h @@ -0,0 +1,46 @@ +/* + * kcmsmserver.h + * Copyright (c) 2000 Oswald Buddenhagen + * + * based on kcmtaskbar.h + * Copyright (c) 2000 Kurt Granroth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ +#ifndef __kcmsmserver_h__ +#define __kcmsmserver_h__ + +#include + +class SMServerConfigImpl; + + +class SMServerConfig : public KCModule +{ + Q_OBJECT + +public: + SMServerConfig( QWidget *parent=0, const char* name=0, const QStringList &list=QStringList() ); + + void load(); + void load(bool useDefaults); + void save(); + void defaults(); + +private: + SMServerConfigImpl* dialog; + +}; + +#endif diff --git a/kcontrol/smserver/smserverconfigdlg.ui b/kcontrol/smserver/smserverconfigdlg.ui new file mode 100644 index 000000000..518052675 --- /dev/null +++ b/kcontrol/smserver/smserverconfigdlg.ui @@ -0,0 +1,248 @@ + +SMServerConfigDlg + + + SMServerConfigDlg + + + + 0 + 0 + 325 + 366 + + + + Session Manager + + + + + + unnamed + + + 0 + + + + topBox + + + + 5 + 0 + 0 + 0 + + + + General + + + + unnamed + + + + confirmLogoutCheck + + + Conf&irm logout + + + Check this option if you want the session manager to display a logout confirmation dialog box. + + + + + offerShutdownCheck + + + O&ffer shutdown options + + + + + + + loginGroup + + + On Login + + + <ul> +<li><b>Restore previous session:</b> Will save all applications running on exit and restore them when they next start up</li> +<li><b>Restore manually saved session: </b> Allows the session to be saved at any time via "Save Session" in the K-Menu. This means the currently started applications will reappear when they next start up.</li> +<li><b>Start with an empty session:</b> Do not save anything. Will come up with an empty desktop on next start.</li> +</ul> + + + + unnamed + + + + previousSessionRadio + + + Restore &previous session + + + + + savedSessionRadio + + + Restore &manually saved session + + + + + emptySessionRadio + + + Start with an empty &session + + + + + + + sdGroup + + + Default Shutdown Option + + + Here you can choose what should happen by default when you log out. This only has meaning, if you logged in through KDM. + + + + unnamed + + + + logoutRadio + + + &End current session + + + + + haltRadio + + + &Turn off computer + + + + + rebootRadio + + + &Restart computer + + + + + + + advancedGroup + + + Advanced + + + + unnamed + + + + textLabel1 + + + Applications to be e&xcluded from sessions: + + + excludeLineedit + + + + + excludeLineedit + + + Here you can enter a comma-separated list of applications that should not be saved in sessions, and therefore will not be started when restoring a session. For example 'xterm,xconsole'. + + + + + + + bottomSpacer + + + Vertical + + + Expanding + + + + 20 + 130 + + + + + + + + confirmLogoutCheck + toggled(bool) + SMServerConfigDlg + configChanged() + + + loginGroup + clicked(int) + SMServerConfigDlg + configChanged() + + + sdGroup + clicked(int) + SMServerConfigDlg + configChanged() + + + excludeLineedit + textChanged(const QString&) + SMServerConfigDlg + configChanged() + + + offerShutdownCheck + toggled(bool) + sdGroup + setEnabled(bool) + + + offerShutdownCheck + toggled(bool) + SMServerConfigDlg + configChanged() + + + + kdialog.h + + + configChanged() + + + + diff --git a/kcontrol/smserver/smserverconfigimpl.cpp b/kcontrol/smserver/smserverconfigimpl.cpp new file mode 100644 index 000000000..9a2afbd90 --- /dev/null +++ b/kcontrol/smserver/smserverconfigimpl.cpp @@ -0,0 +1,31 @@ +/*************************************************************************** + smserverconfigimpl.cpp - description + ------------------- + begin : Thu May 17 2001 + copyright : (C) 2001 by stulle + email : stulle@tux + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "smserverconfigimpl.h" +#include "smserverconfigimpl.moc" + +SMServerConfigImpl::SMServerConfigImpl(QWidget *parent, const char *name ) : SMServerConfigDlg(parent,name) { + +} +SMServerConfigImpl::~SMServerConfigImpl(){ +} +/** No descriptions */ +void SMServerConfigImpl::configChanged(){ + + emit changed(); + +} diff --git a/kcontrol/smserver/smserverconfigimpl.h b/kcontrol/smserver/smserverconfigimpl.h new file mode 100644 index 000000000..d928c48ec --- /dev/null +++ b/kcontrol/smserver/smserverconfigimpl.h @@ -0,0 +1,41 @@ +/*************************************************************************** + smserverconfigimpl.h - description + ------------------- + begin : Thu May 17 2001 + copyright : (C) 2001 by stulle + email : stulle@tux + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef SMSERVERCONFIGIMPL_H +#define SMSERVERCONFIGIMPL_H + +#include +#include "smserverconfigdlg.h" + +/** + *@author stulle + */ + +class SMServerConfigImpl : public SMServerConfigDlg { + Q_OBJECT +public: + SMServerConfigImpl(QWidget *parent=0, const char *name=0); + ~SMServerConfigImpl(); +public slots: // Public slots + /** No descriptions */ + void configChanged(); +signals: // Signals + /** No descriptions */ + void changed(); +}; + +#endif diff --git a/kcontrol/spellchecking/Makefile.am b/kcontrol/spellchecking/Makefile.am new file mode 100644 index 000000000..e4740eb8e --- /dev/null +++ b/kcontrol/spellchecking/Makefile.am @@ -0,0 +1,16 @@ +kde_module_LTLIBRARIES = kcm_spellchecking.la + +kcm_spellchecking_la_SOURCES = spellchecking.cpp + +kcm_spellchecking_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_spellchecking_la_LIBADD = -lkdeui + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = spellchecking.moc + +messages: + $(XGETTEXT) $(kcm_spellchecking_la_SOURCES) -o $(podir)/kcmspellchecking.pot + +xdg_apps_DATA = spellchecking.desktop + diff --git a/kcontrol/spellchecking/spellchecking.cpp b/kcontrol/spellchecking/spellchecking.cpp new file mode 100644 index 000000000..d4e781844 --- /dev/null +++ b/kcontrol/spellchecking/spellchecking.cpp @@ -0,0 +1,74 @@ +/* + Copyright (c) 2001 Laurent Montel + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include + +#include + +#include +#include +#include +#include + +#include "spellchecking.h" + +typedef KGenericFactory SpellFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_spellchecking, SpellFactory("kcmspellchecking") ) + + +KSpellCheckingConfig::KSpellCheckingConfig(QWidget *parent, const char *name, const QStringList &): + KCModule(SpellFactory::instance(), parent, name) +{ + QBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + QGroupBox *box = new QVGroupBox( i18n("Spell Checking Settings"), this ); + box->layout()->setSpacing( KDialog::spacingHint() ); + layout->addWidget(box); + + spellConfig = new KSpellConfig(box, 0L ,0L, false ); + layout->addStretch(1); + connect(spellConfig,SIGNAL(configChanged()), SLOT( changed() )); + + setQuickHelp( i18n("

      Spell Checker

      This control module allows you to configure the KDE spell checking system. You can configure:

      • which spell checking program to use
      • which types of spelling errors are identified
      • which dictionary is used by default.

      The KDE spell checking system (KSpell) provides support for two common spell checking utilities: ASpell and ISpell. This allows you to share dictionaries between KDE applications and non-KDE applications.

      ")); + +} + +void KSpellCheckingConfig::load() +{ + spellConfig->readGlobalSettings(); +} + +void KSpellCheckingConfig::save() +{ + spellConfig->writeGlobalSettings(); + QByteArray data; + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "reparseConfiguration()", data ); +} + +void KSpellCheckingConfig::defaults() +{ + spellConfig->setNoRootAffix(0); + spellConfig->setRunTogether(0); + spellConfig->setDictionary(""); + spellConfig->setDictFromList(FALSE); + spellConfig->setEncoding (KS_E_ASCII); + spellConfig->setClient (KS_CLIENT_ISPELL); +} + +#include "spellchecking.moc" diff --git a/kcontrol/spellchecking/spellchecking.desktop b/kcontrol/spellchecking/spellchecking.desktop new file mode 100644 index 000000000..9c21a5756 --- /dev/null +++ b/kcontrol/spellchecking/spellchecking.desktop @@ -0,0 +1,232 @@ +[Desktop Entry] +Exec=kcmshell spellchecking +Icon=spellcheck +Type=Application +DocPath=kcontrol/spellchecking/index.html + + +X-KDE-Library=spellchecking +X-KDE-ParentApp=kcontrol + +Name=Spell Checker +Name[af]=Spel Toetser +Name[ar]=المدقق الإملائي +Name[be]=Праверка правапісу +Name[bg]=Проверка на правописа +Name[bn]=বানান পরীক্ষক +Name[br]=Gwirieker ar skritur +Name[bs]=Provjera pravopisa +Name[ca]=Comprovació de l'ortografia +Name[cs]=Kontrola pravopisu +Name[csb]=Sprôwdzanié pisënkù +Name[cy]=Cywirydd Sillafu +Name[da]=Stavekontrol +Name[de]=Rechtschreibprüfung +Name[el]=Ορθογραφικός έλεγχος +Name[eo]=Literumilo +Name[es]=Corrector ortográfico +Name[et]=Õigekirja kontroll +Name[eu]=Ortografia zuzentzailea +Name[fa]=غلط‌گیر +Name[fi]=Oikoluku +Name[fr]=Vérificateur orthographique +Name[fy]=Staveringshifker +Name[ga]=Litreoir +Name[gl]=Corrector Ortográfico +Name[he]=בודק האיות +Name[hi]=वर्तनी शोधक +Name[hr]=Alat za provjeru pravopisa +Name[hu]=Helyesírás-ellenőrző +Name[is]=Stafsetningarleiðrétting +Name[it]=Controllo ortografico +Name[ja]=スペルチェッカー +Name[ka]=მარლთწერის შემოწმება +Name[kk]=Емле тексеруі +Name[km]=កម្មវិធី​ពិនិត្យ​អក្ខរាវិរុទ្ធ +Name[lo]=ເຄື່ອງມືກວດຄຳສະກົດ +Name[lt]=Rašybos tikrinimo įrankis +Name[lv]=Pareizrakstības pārbaudes rīks +Name[mk]=Проверка на правопис +Name[mn]=Зөв бичиг шалгалт +Name[ms]=Penyemak Eja +Name[nb]=Stavekontroll +Name[nds]=Klookschriever +Name[ne]=हिज्जे परीक्षक +Name[nl]=Spellingcontrole +Name[nn]=Stavekontroll +Name[nso]=Molebeledi wa Mongwalo +Name[pa]=ਸ਼ਬਦ-ਜੋੜ ਜਾਂਚਕਾਰ +Name[pl]=Sprawdzanie pisowni +Name[pt]=Verificador Ortográfico +Name[pt_BR]=Corretor Ortográfico +Name[ro]=Verificatorul ortografic +Name[ru]=Проверка орфографии +Name[rw]=Igenzuranyuguti +Name[se]=Čállindárkkisteapmi +Name[sk]=Kontrola pravopisu +Name[sl]=Preverjanje črkovanja +Name[sr]=Провера правописа +Name[sr@Latn]=Provera pravopisa +Name[sv]=Stavningskontroll +Name[ta]=எழுத்துப்பிழை திருத்துங்கருவி +Name[tg]=Тафтиши Имло +Name[th]=ตรวจคำสะกด +Name[tr]=İmla Denetim Programı +Name[tt]=Yazma Döreslege +Name[uk]=Перевірка правопису +Name[uz]=Imloni tekshiruvchi +Name[uz@cyrillic]=Имлони текширувчи +Name[ven]=Tshisedzi tsha tshipelini +Name[vi]=Công cụ kiểm tra chính tả +Name[wa]=Coridjrece ortografike +Name[xh]=Umkhangeki Wopelo +Name[zh_CN]=拼写检查工具 +Name[zh_TW]=拼字檢查工具 +Name[zu]=Umbheki wokubizelwa kwamagama + +Comment=Configure the spell checker +Comment[af]=Konfigureer die spel toetser +Comment[ar]=قم بإعداد المدقق الإملائي +Comment[be]=Настаўленне спраўджвання правапісу +Comment[bg]=Настройване проверката на правописа +Comment[bn]=বানান পরীক্ষক কনফিগার করুন +Comment[br]=Kefluniañ an ostilh gwiriekaat +Comment[bs]=Podesite provjeru pravopisa +Comment[ca]=Aquí podeu configurar el corrector ortogràfic +Comment[cs]=Nastavení kontroly pravopisu +Comment[csb]=Kònfigùracëjô sprôwdzaniô bezzmiłkòwòscë pisënkù +Comment[cy]=Ffurfweddu'r cywirydd sillafu +Comment[da]=Indstil stavekontrollen +Comment[de]=Rechtschreibprüfung einrichten +Comment[el]=Ρυθμίστε τον ελεγκτή ορθογραφίας +Comment[eo]=Agordo de la literumilo +Comment[es]=Configuración del corrector ortográfico +Comment[et]=Õigekirja kontrolli seadistamine +Comment[eu]=Konfiguratu ortografia zuzentzailea +Comment[fa]=پیکربندی غلط‌گیر +Comment[fi]=Oikolukuasetukset +Comment[fr]=Configurer la vérification orthographique +Comment[fy]=Hjir kinne jo de staveringshifker ynstelle +Comment[ga]=Cumraigh an litreoir +Comment[gl]=Configurar o corrector ortográfico +Comment[he]=שינוי הגדרות בודק האיות +Comment[hi]=वर्तनी शोधक कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje provjere pravopisa +Comment[hu]=A helyesírás-ellenőrző beállításai +Comment[is]=Stilla stafsetningarleiðréttingu +Comment[it]=Configura il correttore ortografico +Comment[ja]=スペルチェッカーの設定 +Comment[ka]=მარლთწერის სემოწმების კონფიგურაცია +Comment[kk]=Емле тексерушіні баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​កម្មវិធី​ពិនិត្យ​អក្ខរាវិរុទ្ធ +Comment[ko]=패널 작업 표시줄 설정 +Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບແຄຊທີ່ນີ້ +Comment[lt]=Konfigūruoti rašybos tikrinimą +Comment[lv]=Šeit Jūs varat konfigurēt pareizrakstības pārbaudītāja parametrus +Comment[mk]=Конфигурирајте ја проверката на правопис +Comment[mn]=Зөв бичиг шалгалт тохируулах +Comment[ms]=Konfigur penyemak eja +Comment[mt]=Ikkonfigura l-iċċekkjar tal-ortografija +Comment[nb]=Oppsett av stavekontroll +Comment[nds]=Instellen för dat Kuntrulleren vun Schriefwiesen +Comment[ne]=हिज्जे परीक्षक कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de spellingcontrole instellen +Comment[nn]=Oppsett av stavekontroll +Comment[nso]=Beakanya molebeledi wa mongwalo +Comment[pa]=ਸ਼ਬਦ-ਜੋੜ ਜਾਂਚਕਾਰ ਦੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja sprawdzania poprawności pisowni +Comment[pt]=Configuração do verificador ortográfico +Comment[pt_BR]=Configura o corretor ortográfico +Comment[ro]=Configurează opțiunile verificatorului ortografic +Comment[ru]=Настройка проверки орфографии +Comment[rw]=Kuboneza igenzuranyuguti +Comment[se]=Heivet čállindárkkisteaddji +Comment[sk]=Nastavenie kontroly pravopisu +Comment[sl]=Tu lahko nastavite črkovalnik +Comment[sr]=Подешавање провере правописа +Comment[sr@Latn]=Podešavanje provere pravopisa +Comment[sv]=Anpassa stavningskontroll +Comment[ta]=சொல் திருத்தியை வடிவமை +Comment[tg]=Танзими тафтиши имло +Comment[th]=ปรับแต่งเครื่องมือตรวจคำสะกด +Comment[tr]=İmla denetimini yapılandır +Comment[tt]=Döresyazu qoralın caylaw +Comment[uk]=Налаштування перевірки правопису +Comment[uz]=Imlo tekshiruvchini moslash +Comment[uz@cyrillic]=Имло текширувчини мослаш +Comment[ven]=Dzudzanyani tshisedzi tsha tshipelini +Comment[vi]=Cấu hình các bộ kiểm tra chính tả +Comment[wa]=Apontyî l' coridjrece ortografike +Comment[xh]=Qwalasela umkhangelo wopelo +Comment[zh_CN]=配置拼写检查工具 +Comment[zh_TW]=設定拼字檢查程式 +Comment[zu]=Hlanganisela umbheki wokubizelwa kwamagama + +Keywords=Spell +Keywords[af]=Spel +Keywords[ar]=التهجئة و الإملاء +Keywords[az]=İmla +Keywords[be]=Правапіс,Праверка,Spell +Keywords[bg]=проверка, правопис, коректор, правописен, Spell +Keywords[ca]=Ortografia +Keywords[cs]=Pravopis +Keywords[csb]=Lëterówczi,bezzmiłkòwòsc pisënkù +Keywords[cy]=Sillafu +Keywords[da]=Stav +Keywords[de]=Rechtschreibung +Keywords[el]=Ορθογραφία +Keywords[eo]=Literumo +Keywords[es]=Ortografía +Keywords[et]=õigekiri +Keywords[eu]=Ortografia +Keywords[fa]=هجی +Keywords[fi]=Oikoluku +Keywords[fr]=orthographe,vérification +Keywords[ga]=Litriú +Keywords[gl]=Ortografia +Keywords[he]=איות, Spell +Keywords[hi]=वर्तनी +Keywords[hr]=Spell,Provjera pravopisa +Keywords[hu]=Helyesírás-ellenőrző +Keywords[is]=Stafsetning +Keywords[it]=ortografia,controllo ortografico +Keywords[ja]=スペル +Keywords[km]=អក្ខរាវិរុទ្ធ +Keywords[lo]=ສະກົດ +Keywords[lt]=Spell, rašyba +Keywords[lv]=Pareizrakstība +Keywords[mk]=Правопис +Keywords[mn]=Зөв бичиг +Keywords[ms]=Eja +Keywords[mt]=Spell,Spelli +Keywords[nb]=Stavekontroll +Keywords[nds]=schrieven,Rechtschrieven,kuntrulleren,Schriefwies +Keywords[ne]=हिज्जे +Keywords[nn]=Stavekontroll +Keywords[nso]=Mongwalo +Keywords[pl]=Literówki,Poprawność pisowni +Keywords[pt]=Ortografia +Keywords[pt_BR]=Verificação ortográfica +Keywords[ro]=ortografie,scriere,verificare +Keywords[rw]=Kuvuga inyuguti +Keywords[se]=Čállindárkkisteapmi +Keywords[sk]=Pravopis +Keywords[sl]=Črkuj +Keywords[ss]=Phimisa +Keywords[sv]=Stava +Keywords[ta]=உச்சரி +Keywords[tg]=Имло +Keywords[th]=สะกด +Keywords[tr]=İmla +Keywords[uk]=Правопис +Keywords[uz]=Imlo +Keywords[uz@cyrillic]=Имло +Keywords[ven]=Tshipelini +Keywords[vi]=Chính tả +Keywords[wa]=coridjrece,ortografe,ortografike +Keywords[xh]=Pela +Keywords[zh_CN]=拼写 +Keywords[zh_TW]=拼字 +Keywords[zu]=Bizela + +Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcontrol/spellchecking/spellchecking.h b/kcontrol/spellchecking/spellchecking.h new file mode 100644 index 000000000..f709a873d --- /dev/null +++ b/kcontrol/spellchecking/spellchecking.h @@ -0,0 +1,41 @@ +/* + Copyright (c) 2001 Laurent Montel + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef __spellchecking_h__ +#define __spellchecking_h__ + +#include "kcmodule.h" + +class KSpellConfig; + +class KSpellCheckingConfig : public KCModule +{ + Q_OBJECT + + public: + KSpellCheckingConfig(QWidget *parent, const char *name, const QStringList &); + + void load(); + void save(); + void defaults(); + + protected: + KSpellConfig *spellConfig; +}; + +#endif diff --git a/kcontrol/structure b/kcontrol/structure new file mode 100644 index 000000000..10ce9f32c --- /dev/null +++ b/kcontrol/structure @@ -0,0 +1,21 @@ + +KControl is organized by "subject" instead of "category". + +The idea is that if the user wants to configure something, they should only +have to search for its location in the desktop. Previously, they had to +look for the category of the setting. It should be apparent that this +isn't very efficient, as the category might be difficult to identify +frequently. + +Also, we need to consider that each applet in kcontrol is very busy with +many tabs, and many groups in each tab: this means that our users (and +ourselves!) have to hunt around in several modules until the right +module is found -- and this is in no way easy, seeing that you have to +look at all the tabs. + +So, this new organization tries to limit the amount of tabs per module, +and in addition, groups the module by application, rather than topic. + +And as an added bonus, it eliminates the Look & Feel group. + + diff --git a/kcontrol/style/Makefile.am b/kcontrol/style/Makefile.am new file mode 100644 index 000000000..27f38de72 --- /dev/null +++ b/kcontrol/style/Makefile.am @@ -0,0 +1,18 @@ + +AM_CPPFLAGS = $(all_includes) +SUBDIRS = keramik . + +kde_module_LTLIBRARIES = kcm_style.la + +kcm_style_la_SOURCES = kcmstyle.cpp stylepreview.ui menupreview.cpp styleconfdialog.cpp +kcm_style_la_LDFLAGS = $(KDE_RPATH) -module -avoid-version $(all_libraries) -no-undefined +kcm_style_la_LIBADD = $(LIB_KIO) ../krdb/libkrdb.la +METASOURCES = AUTO + +noinst_HEADERS = kcmstyle.h stylepreview.h menupreview.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmstyle.pot + +xdg_apps_DATA = style.desktop + diff --git a/kcontrol/style/kcmstyle.cpp b/kcontrol/style/kcmstyle.cpp new file mode 100644 index 000000000..9333c0f72 --- /dev/null +++ b/kcontrol/style/kcmstyle.cpp @@ -0,0 +1,1070 @@ +/* + * KCMStyle + * Copyright (C) 2002 Karol Szwed + * Copyright (C) 2002 Daniel Molkentin + * + * Portions Copyright (C) 2000 TrollTech AS. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../krdb/krdb.h" + +#include "kcmstyle.h" +#include "styleconfdialog.h" + +#include +// X11 namespace cleanup +#undef Below +#undef KeyPress +#undef KeyRelease + + +/**** DLL Interface for kcontrol ****/ + +// Plugin Interface +// Danimo: Why do we use the old interface?! +extern "C" +{ + KDE_EXPORT KCModule *create_style(QWidget *parent, const char*) + { + KGlobal::locale()->insertCatalogue("kcmstyle"); + return new KCMStyle(parent, "kcmstyle"); + } + + KDE_EXPORT void init_style() + { + uint flags = KRdbExportQtSettings | KRdbExportQtColors | KRdbExportXftSettings; + KConfig config("kcmdisplayrc", true /*readonly*/, false /*don't read kdeglobals etc.*/); + config.setGroup("X11"); + + // This key is written by the "colors" module. + bool exportKDEColors = config.readBoolEntry("exportKDEColors", true); + if (exportKDEColors) + flags |= KRdbExportColors; + runRdb( flags ); + + // Write some Qt root property. +#ifndef __osf__ // this crashes under Tru64 randomly -- will fix later + QByteArray properties; + QDataStream d(properties, IO_WriteOnly); + d.setVersion( 3 ); // Qt2 apps need this. + d << kapp->palette() << KGlobalSettings::generalFont(); + Atom a = XInternAtom(qt_xdisplay(), "_QT_DESKTOP_PROPERTIES", false); + + // do it for all root windows - multihead support + int screen_count = ScreenCount(qt_xdisplay()); + for (int i = 0; i < screen_count; i++) + XChangeProperty(qt_xdisplay(), RootWindow(qt_xdisplay(), i), + a, a, 8, PropModeReplace, + (unsigned char*) properties.data(), properties.size()); +#endif + } +} + +/* +typedef KGenericFactory GeneralFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kcmstyle, GeneralFactory ) +*/ + + +KCMStyle::KCMStyle( QWidget* parent, const char* name ) + : KCModule( parent, name ), appliedStyle(NULL) +{ + setQuickHelp( i18n("

      Style

      " + "This module allows you to modify the visual appearance " + "of user interface elements, such as the widget style " + "and effects.")); + + m_bEffectsDirty = false; + m_bStyleDirty= false; + m_bToolbarsDirty = false; + + KGlobal::dirs()->addResourceType("themes", + KStandardDirs::kde_default("data") + "kstyle/themes"); + + KAboutData *about = + new KAboutData( I18N_NOOP("kcmstyle"), + I18N_NOOP("KDE Style Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2002 Karol Szwed, Daniel Molkentin")); + + about->addAuthor("Karol Szwed", 0, "gallium@kde.org"); + about->addAuthor("Daniel Molkentin", 0, "molkentin@kde.org"); + about->addAuthor("Ralf Nolden", 0, "nolden@kde.org"); + setAboutData( about ); + + // Setup pages and mainLayout + mainLayout = new QVBoxLayout( this ); + tabWidget = new QTabWidget( this ); + mainLayout->addWidget( tabWidget ); + + page1 = new QWidget( tabWidget ); + page1Layout = new QVBoxLayout( page1, KDialog::marginHint(), KDialog::spacingHint() ); + page2 = new QWidget( tabWidget ); + page2Layout = new QVBoxLayout( page2, KDialog::marginHint(), KDialog::spacingHint() ); + page3 = new QWidget( tabWidget ); + page3Layout = new QVBoxLayout( page3, KDialog::marginHint(), KDialog::spacingHint() ); + + // Add Page1 (Style) + // ----------------- + gbWidgetStyle = new QGroupBox( i18n("Widget Style"), page1, "gbWidgetStyle" ); + gbWidgetStyle->setColumnLayout( 0, Qt::Vertical ); + gbWidgetStyle->layout()->setMargin( KDialog::marginHint() ); + gbWidgetStyle->layout()->setSpacing( KDialog::spacingHint() ); + + gbWidgetStyleLayout = new QVBoxLayout( gbWidgetStyle->layout() ); + gbWidgetStyleLayout->setAlignment( Qt::AlignTop ); + hbLayout = new QHBoxLayout( KDialog::spacingHint(), "hbLayout" ); + + cbStyle = new KComboBox( gbWidgetStyle, "cbStyle" ); + cbStyle->setEditable( FALSE ); + hbLayout->addWidget( cbStyle ); + + pbConfigStyle = new QPushButton( i18n("Con&figure..."), gbWidgetStyle ); + pbConfigStyle->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum ); + pbConfigStyle->setEnabled( FALSE ); + hbLayout->addWidget( pbConfigStyle ); + + gbWidgetStyleLayout->addLayout( hbLayout ); + + lblStyleDesc = new QLabel( gbWidgetStyle ); + lblStyleDesc->setTextFormat(Qt::RichText); + gbWidgetStyleLayout->addWidget( lblStyleDesc ); + + cbIconsOnButtons = new QCheckBox( i18n("Sho&w icons on buttons"), gbWidgetStyle ); + gbWidgetStyleLayout->addWidget( cbIconsOnButtons ); + cbEnableTooltips = new QCheckBox( i18n("E&nable tooltips"), gbWidgetStyle ); + gbWidgetStyleLayout->addWidget( cbEnableTooltips ); + cbTearOffHandles = new QCheckBox( i18n("Show tear-off handles in &popup menus"), gbWidgetStyle ); + gbWidgetStyleLayout->addWidget( cbTearOffHandles ); + cbTearOffHandles->hide(); // reenable when the corresponding Qt method is virtual and properly reimplemented + + QGroupBox *gbPreview = new QGroupBox( i18n( "Preview" ), page1 ); + gbPreview->setColumnLayout( 0, Vertical ); + gbPreview->layout()->setMargin( 0 ); + gbPreview->layout()->setSpacing( KDialog::spacingHint() ); + gbPreview->setFlat( true ); + stylePreview = new StylePreview( gbPreview ); + gbPreview->layout()->add( stylePreview ); + + page1Layout->addWidget( gbWidgetStyle ); + page1Layout->addWidget( gbPreview ); + + // Connect all required stuff + connect( cbStyle, SIGNAL(activated(int)), this, SLOT(styleChanged()) ); + connect( cbStyle, SIGNAL(activated(int)), this, SLOT(updateConfigButton())); + connect( pbConfigStyle, SIGNAL(clicked()), this, SLOT(styleSpecificConfig())); + + // Add Page2 (Effects) + // ------------------- + cbEnableEffects = new QCheckBox( i18n("&Enable GUI effects"), page2 ); + containerFrame = new QFrame( page2 ); + containerFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain ); + containerFrame->setMargin(0); + containerLayout = new QGridLayout( containerFrame, 1, 1, // rows, columns + KDialog::marginHint(), KDialog::spacingHint() ); + + comboComboEffect = new QComboBox( FALSE, containerFrame ); + comboComboEffect->insertItem( i18n("Disable") ); + comboComboEffect->insertItem( i18n("Animate") ); + lblComboEffect = new QLabel( i18n("Combobo&x effect:"), containerFrame ); + lblComboEffect->setBuddy( comboComboEffect ); + containerLayout->addWidget( lblComboEffect, 0, 0 ); + containerLayout->addWidget( comboComboEffect, 0, 1 ); + + comboTooltipEffect = new QComboBox( FALSE, containerFrame ); + comboTooltipEffect->insertItem( i18n("Disable") ); + comboTooltipEffect->insertItem( i18n("Animate") ); + comboTooltipEffect->insertItem( i18n("Fade") ); + lblTooltipEffect = new QLabel( i18n("&Tool tip effect:"), containerFrame ); + lblTooltipEffect->setBuddy( comboTooltipEffect ); + containerLayout->addWidget( lblTooltipEffect, 1, 0 ); + containerLayout->addWidget( comboTooltipEffect, 1, 1 ); + + comboMenuEffect = new QComboBox( FALSE, containerFrame ); + comboMenuEffect->insertItem( i18n("Disable") ); + comboMenuEffect->insertItem( i18n("Animate") ); + comboMenuEffect->insertItem( i18n("Fade") ); + comboMenuEffect->insertItem( i18n("Make Translucent") ); + lblMenuEffect = new QLabel( i18n("&Menu effect:"), containerFrame ); + lblMenuEffect->setBuddy( comboMenuEffect ); + containerLayout->addWidget( lblMenuEffect, 2, 0 ); + containerLayout->addWidget( comboMenuEffect, 2, 1 ); + + comboMenuHandle = new QComboBox( FALSE, containerFrame ); + comboMenuHandle->insertItem( i18n("Disable") ); + comboMenuHandle->insertItem( i18n("Application Level") ); +// comboMenuHandle->insertItem( i18n("Enable") ); + lblMenuHandle = new QLabel( i18n("Me&nu tear-off handles:"), containerFrame ); + lblMenuHandle->setBuddy( comboMenuHandle ); + containerLayout->addWidget( lblMenuHandle, 3, 0 ); + containerLayout->addWidget( comboMenuHandle, 3, 1 ); + + cbMenuShadow = new QCheckBox( i18n("Menu &drop shadow"), containerFrame ); + containerLayout->addWidget( cbMenuShadow, 4, 0 ); + + // Push the [label combo] to the left. + comboSpacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + containerLayout->addItem( comboSpacer, 1, 2 ); + + // Separator. + QFrame* hline = new QFrame ( page2 ); + hline->setFrameStyle( QFrame::HLine | QFrame::Sunken ); + + // Now implement the Menu Transparency container. + menuContainer = new QFrame( page2 ); + menuContainer->setFrameStyle( QFrame::NoFrame | QFrame::Plain ); + menuContainer->setMargin(0); + menuContainerLayout = new QGridLayout( menuContainer, 1, 1, // rows, columns + KDialog::marginHint(), KDialog::spacingHint() ); + + menuPreview = new MenuPreview( menuContainer, /* opacity */ 90, MenuPreview::Blend ); + + comboMenuEffectType = new QComboBox( FALSE, menuContainer ); + comboMenuEffectType->insertItem( i18n("Software Tint") ); + comboMenuEffectType->insertItem( i18n("Software Blend") ); +#ifdef HAVE_XRENDER + comboMenuEffectType->insertItem( i18n("XRender Blend") ); +#endif + + // So much stuffing around for a simple slider.. + sliderBox = new QVBox( menuContainer ); + sliderBox->setSpacing( KDialog::spacingHint() ); + sliderBox->setMargin( 0 ); + slOpacity = new QSlider( 0, 100, 5, /*opacity*/ 90, Qt::Horizontal, sliderBox ); + slOpacity->setTickmarks( QSlider::Below ); + slOpacity->setTickInterval( 10 ); + QHBox* box1 = new QHBox( sliderBox ); + box1->setSpacing( KDialog::spacingHint() ); + box1->setMargin( 0 ); + QLabel* lbl = new QLabel( i18n("0%"), box1 ); + lbl->setAlignment( AlignLeft ); + lbl = new QLabel( i18n("50%"), box1 ); + lbl->setAlignment( AlignHCenter ); + lbl = new QLabel( i18n("100%"), box1 ); + lbl->setAlignment( AlignRight ); + + lblMenuEffectType = new QLabel( comboMenuEffectType, i18n("Menu trans&lucency type:"), menuContainer ); + lblMenuEffectType->setAlignment( AlignBottom | AlignLeft ); + lblMenuOpacity = new QLabel( slOpacity, i18n("Menu &opacity:"), menuContainer ); + lblMenuOpacity->setAlignment( AlignBottom | AlignLeft ); + + menuContainerLayout->addWidget( lblMenuEffectType, 0, 0 ); + menuContainerLayout->addWidget( comboMenuEffectType, 1, 0 ); + menuContainerLayout->addWidget( lblMenuOpacity, 2, 0 ); + menuContainerLayout->addWidget( sliderBox, 3, 0 ); + menuContainerLayout->addMultiCellWidget( menuPreview, 0, 3, 1, 1 ); + + // Layout page2. + page2Layout->addWidget( cbEnableEffects ); + page2Layout->addWidget( containerFrame ); + page2Layout->addWidget( hline ); + page2Layout->addWidget( menuContainer ); + + QSpacerItem* sp1 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); + page2Layout->addItem( sp1 ); + + // Data flow stuff. + connect( cbEnableEffects, SIGNAL(toggled(bool)), containerFrame, SLOT(setEnabled(bool)) ); + connect( cbEnableEffects, SIGNAL(toggled(bool)), this, SLOT(menuEffectChanged(bool)) ); + connect( slOpacity, SIGNAL(valueChanged(int)),menuPreview, SLOT(setOpacity(int)) ); + connect( comboMenuEffect, SIGNAL(activated(int)), this, SLOT(menuEffectChanged()) ); + connect( comboMenuEffect, SIGNAL(highlighted(int)), this, SLOT(menuEffectChanged()) ); + connect( comboMenuEffectType, SIGNAL(activated(int)), this, SLOT(menuEffectTypeChanged()) ); + connect( comboMenuEffectType, SIGNAL(highlighted(int)), this, SLOT(menuEffectTypeChanged()) ); + + // Add Page3 (Miscellaneous) + // ------------------------- + cbHoverButtons = new QCheckBox( i18n("High&light buttons under mouse"), page3 ); + cbTransparentToolbars = new QCheckBox( i18n("Transparent tool&bars when moving"), page3 ); + + QWidget * dummy = new QWidget( page3 ); + + QHBoxLayout* box2 = new QHBoxLayout( dummy, 0, KDialog::spacingHint() ); + lbl = new QLabel( i18n("Text pos&ition:"), dummy ); + comboToolbarIcons = new QComboBox( FALSE, dummy ); + comboToolbarIcons->insertItem( i18n("Icons Only") ); + comboToolbarIcons->insertItem( i18n("Text Only") ); + comboToolbarIcons->insertItem( i18n("Text Alongside Icons") ); + comboToolbarIcons->insertItem( i18n("Text Under Icons") ); + lbl->setBuddy( comboToolbarIcons ); + + box2->addWidget( lbl ); + box2->addWidget( comboToolbarIcons ); + QSpacerItem* sp2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + box2->addItem( sp2 ); + + page3Layout->addWidget( cbHoverButtons ); + page3Layout->addWidget( cbTransparentToolbars ); + page3Layout->addWidget( dummy ); + + // Layout page3. + QSpacerItem* sp3 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); + page3Layout->addItem( sp3 ); + + // Load settings + load(); + + // Do all the setDirty connections. + connect(cbStyle, SIGNAL(activated(int)), this, SLOT(setStyleDirty())); + // Page2 + connect( cbEnableEffects, SIGNAL(toggled(bool)), this, SLOT(setEffectsDirty())); + connect( cbEnableEffects, SIGNAL(toggled(bool)), this, SLOT(setStyleDirty())); + connect( comboTooltipEffect, SIGNAL(activated(int)), this, SLOT(setEffectsDirty())); + connect( comboComboEffect, SIGNAL(activated(int)), this, SLOT(setEffectsDirty())); + connect( comboMenuEffect, SIGNAL(activated(int)), this, SLOT(setStyleDirty())); + connect( comboMenuHandle, SIGNAL(activated(int)), this, SLOT(setStyleDirty())); + connect( comboMenuEffectType, SIGNAL(activated(int)), this, SLOT(setStyleDirty())); + connect( slOpacity, SIGNAL(valueChanged(int)),this, SLOT(setStyleDirty())); + connect( cbMenuShadow, SIGNAL(toggled(bool)), this, SLOT(setStyleDirty())); + // Page3 + connect( cbHoverButtons, SIGNAL(toggled(bool)), this, SLOT(setToolbarsDirty())); + connect( cbTransparentToolbars, SIGNAL(toggled(bool)), this, SLOT(setToolbarsDirty())); + connect( cbEnableTooltips, SIGNAL(toggled(bool)), this, SLOT(setEffectsDirty())); + connect( cbIconsOnButtons, SIGNAL(toggled(bool)), this, SLOT(setEffectsDirty())); + connect( cbTearOffHandles, SIGNAL(toggled(bool)), this, SLOT(setEffectsDirty())); + connect( comboToolbarIcons, SIGNAL(activated(int)), this, SLOT(setToolbarsDirty())); + + addWhatsThis(); + + // Insert the pages into the tabWidget + tabWidget->insertTab( page1, i18n("&Style")); + tabWidget->insertTab( page2, i18n("&Effects")); + tabWidget->insertTab( page3, i18n("&Toolbar")); + + //Enable/disable the button for the initial style + updateConfigButton(); +} + + +KCMStyle::~KCMStyle() +{ + delete appliedStyle; +} + +void KCMStyle::updateConfigButton() +{ + if (!styleEntries[currentStyle()] || styleEntries[currentStyle()]->configPage.isEmpty()) { + pbConfigStyle->setEnabled(false); + return; + } + + // We don't check whether it's loadable here - + // lets us report an error and not waste time + // loading things if the user doesn't click the button + pbConfigStyle->setEnabled( true ); +} + +void KCMStyle::styleSpecificConfig() +{ + QString libname = styleEntries[currentStyle()]->configPage; + + // Use KLibLoader to get the library, handling + // any errors that arise + KLibLoader* loader = KLibLoader::self(); + + KLibrary* library = loader->library( QFile::encodeName(libname) ); + if (!library) + { + KMessageBox::detailedError(this, + i18n("There was an error loading the configuration dialog for this style."), + loader->lastErrorMessage(), + i18n("Unable to Load Dialog")); + return; + } + + void* allocPtr = library->symbol("allocate_kstyle_config"); + + if (!allocPtr) + { + KMessageBox::detailedError(this, + i18n("There was an error loading the configuration dialog for this style."), + loader->lastErrorMessage(), + i18n("Unable to Load Dialog")); + return; + } + + //Create the container dialog + StyleConfigDialog* dial = new StyleConfigDialog(this, styleEntries[currentStyle()]->name); + dial->enableButtonSeparator(true); + + typedef QWidget*(* factoryRoutine)( QWidget* parent ); + + //Get the factory, and make the widget. + factoryRoutine factory = (factoryRoutine)(allocPtr); //Grmbl. So here I am on my + //"never use C casts" moralizing streak, and I find that one can't go void* -> function ptr + //even with a reinterpret_cast. + + QWidget* pluginConfig = factory( dial ); + + //Insert it in... + dial->setMainWidget( pluginConfig ); + + //..and connect it to the wrapper + connect(pluginConfig, SIGNAL(changed(bool)), dial, SLOT(setDirty(bool))); + connect(dial, SIGNAL(defaults()), pluginConfig, SLOT(defaults())); + connect(dial, SIGNAL(save()), pluginConfig, SLOT(save())); + + if (dial->exec() == QDialog::Accepted && dial->isDirty() ) { + // Force re-rendering of the preview, to apply settings + switchStyle(currentStyle(), true); + + //For now, ask all KDE apps to recreate their styles to apply the setitngs + KIPC::sendMessageAll(KIPC::StyleChanged); + + // We call setStyleDirty here to make sure we force style re-creation + setStyleDirty(); + } + + delete dial; +} + +void KCMStyle::load() +{ + load( false ); +} + +void KCMStyle::load(bool useDefaults) +{ + KConfig config( "kdeglobals", true, false ); + + config.setReadDefaults( useDefaults ); + + // Page1 - Build up the Style ListBox + loadStyle( config ); + + // Page2 - Effects + loadEffects( config ); + + // Page3 - Misc. + loadMisc( config ); + + m_bEffectsDirty = false; + m_bStyleDirty= false; + m_bToolbarsDirty = false; + + emit changed( useDefaults ); +} + + +void KCMStyle::save() +{ + // Don't do anything if we don't need to. + if ( !(m_bToolbarsDirty | m_bEffectsDirty | m_bStyleDirty ) ) + return; + + bool allowMenuTransparency = false; + bool allowMenuDropShadow = false; + + // Read the KStyle flags to see if the style writer + // has enabled menu translucency in the style. + if (appliedStyle && appliedStyle->inherits("KStyle")) + { + allowMenuDropShadow = true; + KStyle* style = dynamic_cast(appliedStyle); + if (style) { + KStyle::KStyleFlags flags = style->styleFlags(); + if (flags & KStyle::AllowMenuTransparency) + allowMenuTransparency = true; + } + } + + QString warn_string( i18n("Selected style: %1

      " + "One or more effects that you have chosen could not be applied because the selected " + "style does not support them; they have therefore been disabled.
      " + "
      " ).arg( cbStyle->currentText()) ); + bool show_warning = false; + + // Warn the user if they're applying a style that doesn't support + // menu translucency and they enabled it. + if ( (!allowMenuTransparency) && + (cbEnableEffects->isChecked()) && + (comboMenuEffect->currentItem() == 3) ) // Make Translucent + { + warn_string += i18n("Menu translucency is not available.
      "); + comboMenuEffect->setCurrentItem(0); // Disable menu effect. + show_warning = true; + } + + if (!allowMenuDropShadow && cbMenuShadow->isChecked()) + { + warn_string += i18n("Menu drop-shadows are not available."); + cbMenuShadow->setChecked(false); + show_warning = true; + } + + // Tell the user what features we could not apply on their behalf. + if (show_warning) + KMessageBox::information(this, warn_string); + + + // Save effects. + KConfig config( "kdeglobals" ); + config.setGroup("KDE"); + + config.writeEntry( "EffectsEnabled", cbEnableEffects->isChecked()); + int item = comboComboEffect->currentItem(); + config.writeEntry( "EffectAnimateCombo", item == 1 ); + item = comboTooltipEffect->currentItem(); + config.writeEntry( "EffectAnimateTooltip", item == 1); + config.writeEntry( "EffectFadeTooltip", item == 2 ); + item = comboMenuHandle->currentItem(); + config.writeEntry( "InsertTearOffHandle", item ); + item = comboMenuEffect->currentItem(); + config.writeEntry( "EffectAnimateMenu", item == 1 ); + config.writeEntry( "EffectFadeMenu", item == 2 ); + + // Handle KStyle's menu effects + QString engine("Disabled"); + if (item == 3 && cbEnableEffects->isChecked()) // Make Translucent + switch( comboMenuEffectType->currentItem()) + { + case 1: engine = "SoftwareBlend"; break; + case 2: engine = "XRender"; break; + default: + case 0: engine = "SoftwareTint"; break; + } + + { // Braces force a QSettings::sync() + QSettings settings; // Only for KStyle stuff + settings.writeEntry("/KStyle/Settings/MenuTransparencyEngine", engine); + settings.writeEntry("/KStyle/Settings/MenuOpacity", slOpacity->value()/100.0); + settings.writeEntry("/KStyle/Settings/MenuDropShadow", + cbEnableEffects->isChecked() && cbMenuShadow->isChecked() ); + } + + // Misc page + config.writeEntry( "ShowIconsOnPushButtons", cbIconsOnButtons->isChecked(), true, true ); + config.writeEntry( "EffectNoTooltip", !cbEnableTooltips->isChecked(), true, true ); + + config.setGroup("General"); + config.writeEntry( "widgetStyle", currentStyle() ); + + config.setGroup("Toolbar style"); + config.writeEntry( "Highlighting", cbHoverButtons->isChecked(), true, true ); + config.writeEntry( "TransparentMoving", cbTransparentToolbars->isChecked(), true, true ); + QString tbIcon; + switch( comboToolbarIcons->currentItem() ) + { + case 1: tbIcon = "TextOnly"; break; + case 2: tbIcon = "IconTextRight"; break; + case 3: tbIcon = "IconTextBottom"; break; + case 0: + default: tbIcon = "IconOnly"; break; + } + config.writeEntry( "IconText", tbIcon, true, true ); + config.sync(); + + // Export the changes we made to qtrc, and update all qt-only + // applications on the fly, ensuring that we still follow the user's + // export fonts/colors settings. + if (m_bStyleDirty | m_bEffectsDirty) // Export only if necessary + { + uint flags = KRdbExportQtSettings; + KConfig kconfig("kcmdisplayrc", true /*readonly*/, false /*no globals*/); + kconfig.setGroup("X11"); + bool exportKDEColors = kconfig.readBoolEntry("exportKDEColors", true); + if (exportKDEColors) + flags |= KRdbExportColors; + runRdb( flags ); + } + + // Now allow KDE apps to reconfigure themselves. + if ( m_bStyleDirty ) + KIPC::sendMessageAll(KIPC::StyleChanged); + + if ( m_bToolbarsDirty ) + // ##### FIXME - Doesn't apply all settings correctly due to bugs in + // KApplication/KToolbar + KIPC::sendMessageAll(KIPC::ToolbarStyleChanged); + + if (m_bEffectsDirty) { + KIPC::sendMessageAll(KIPC::SettingsChanged); + kapp->dcopClient()->send("kwin*", "", "reconfigure()", ""); + } + //update kicker to re-used tooltips kicker parameter otherwise, it overwritted + //by style tooltips parameters. + QByteArray data; + kapp->dcopClient()->send( "kicker", "kicker", "configure()", data ); + + // Clean up + m_bEffectsDirty = false; + m_bToolbarsDirty = false; + m_bStyleDirty = false; + emit changed( false ); +} + + +bool KCMStyle::findStyle( const QString& str, int& combobox_item ) +{ + StyleEntry* se = styleEntries.find(str.lower()); + + QString name = se ? se->name : str; + + combobox_item = 0; + + //look up name + for( int i = 0; i < cbStyle->count(); i++ ) + { + if ( cbStyle->text(i) == name ) + { + combobox_item = i; + return TRUE; + } + } + + return FALSE; +} + + +void KCMStyle::defaults() +{ + load( true ); +} + +void KCMStyle::setEffectsDirty() +{ + m_bEffectsDirty = true; + emit changed(true); +} + +void KCMStyle::setToolbarsDirty() +{ + m_bToolbarsDirty = true; + emit changed(true); +} + +void KCMStyle::setStyleDirty() +{ + m_bStyleDirty = true; + emit changed(true); +} + +// ---------------------------------------------------------------- +// All the Style Switching / Preview stuff +// ---------------------------------------------------------------- + +void KCMStyle::loadStyle( KConfig& config ) +{ + cbStyle->clear(); + + // Create a dictionary of WidgetStyle to Name and Desc. mappings, + // as well as the config page info + styleEntries.clear(); + styleEntries.setAutoDelete(true); + + QString strWidgetStyle; + QStringList list = KGlobal::dirs()->findAllResources("themes", "*.themerc", true, true); + for (QStringList::iterator it = list.begin(); it != list.end(); ++it) + { + KSimpleConfig config( *it, true ); + if ( !(config.hasGroup("KDE") && config.hasGroup("Misc")) ) + continue; + + config.setGroup("KDE"); + + strWidgetStyle = config.readEntry("WidgetStyle"); + if (strWidgetStyle.isNull()) + continue; + + // We have a widgetstyle, so lets read the i18n entries for it... + StyleEntry* entry = new StyleEntry; + config.setGroup("Misc"); + entry->name = config.readEntry("Name"); + entry->desc = config.readEntry("Comment", i18n("No description available.")); + entry->configPage = config.readEntry("ConfigPage", QString::null); + + // Check if this style should be shown + config.setGroup("Desktop Entry"); + entry->hidden = config.readBoolEntry("Hidden", false); + + // Insert the entry into our dictionary. + styleEntries.insert(strWidgetStyle.lower(), entry); + } + + // Obtain all style names + QStringList allStyles = QStyleFactory::keys(); + + // Get translated names, remove all hidden style entries. + QStringList styles; + StyleEntry* entry; + for (QStringList::iterator it = allStyles.begin(); it != allStyles.end(); it++) + { + QString id = (*it).lower(); + // Find the entry. + if ( (entry = styleEntries.find(id)) != 0 ) + { + // Do not add hidden entries + if (entry->hidden) + continue; + + styles += entry->name; + + nameToStyleKey[entry->name] = id; + } + else + { + styles += (*it); //Fall back to the key (but in original case) + nameToStyleKey[*it] = id; + } + } + + // Sort the style list, and add it to the combobox + styles.sort(); + cbStyle->insertStringList( styles ); + + // Find out which style is currently being used + config.setGroup( "General" ); + QString defaultStyle = KStyle::defaultStyle(); + QString cfgStyle = config.readEntry( "widgetStyle", defaultStyle ); + + // Select the current style + // Do not use cbStyle->listBox() as this may be NULL for some styles when + // they use QPopupMenus for the drop-down list! + + // ##### Since Trolltech likes to seemingly copy & paste code, + // QStringList::findItem() doesn't have a Qt::StringComparisonMode field. + // We roll our own (yuck) + cfgStyle = cfgStyle.lower(); + int item = 0; + for( int i = 0; i < cbStyle->count(); i++ ) + { + QString id = nameToStyleKey[cbStyle->text(i)]; + item = i; + if ( id == cfgStyle ) // ExactMatch + break; + else if ( id.contains( cfgStyle ) ) + break; + else if ( id.contains( QApplication::style().className() ) ) + break; + item = 0; + } + cbStyle->setCurrentItem( item ); + + m_bStyleDirty = false; + + switchStyle( currentStyle() ); // make resets visible +} + +QString KCMStyle::currentStyle() +{ + return nameToStyleKey[cbStyle->currentText()]; +} + + +void KCMStyle::styleChanged() +{ + switchStyle( currentStyle() ); +} + + +void KCMStyle::switchStyle(const QString& styleName, bool force) +{ + // Don't flicker the preview if the same style is chosen in the cb + if (!force && appliedStyle && appliedStyle->name() == styleName) + return; + + // Create an instance of the new style... + QStyle* style = QStyleFactory::create(styleName); + if (!style) + return; + + // Prevent Qt from wrongly caching radio button images + QPixmapCache::clear(); + + setStyleRecursive( stylePreview, style ); + + // this flickers, but reliably draws the widgets correctly. + stylePreview->resize( stylePreview->sizeHint() ); + + delete appliedStyle; + appliedStyle = style; + + // Set the correct style description + StyleEntry* entry = styleEntries.find( styleName ); + QString desc; + desc = i18n("Description: %1").arg( entry ? entry->desc : i18n("No description available.") ); + lblStyleDesc->setText( desc ); +} + +void KCMStyle::setStyleRecursive(QWidget* w, QStyle* s) +{ + // Don't let broken styles kill the palette + // for other styles being previewed. (e.g SGI style) + w->unsetPalette(); + + QPalette newPalette(KApplication::createApplicationPalette()); + s->polish( newPalette ); + w->setPalette(newPalette); + + // Apply the new style. + w->setStyle(s); + + // Recursively update all children. + const QObjectList *children = w->children(); + if (!children) + return; + + // Apply the style to each child widget. + QPtrListIterator childit(*children); + QObject *child; + while ((child = childit.current()) != 0) + { + ++childit; + if (child->isWidgetType()) + setStyleRecursive((QWidget *) child, s); + } +} + + +// ---------------------------------------------------------------- +// All the Effects stuff +// ---------------------------------------------------------------- + +void KCMStyle::loadEffects( KConfig& config ) +{ + // Load effects. + config.setGroup("KDE"); + + cbEnableEffects->setChecked( config.readBoolEntry( "EffectsEnabled", false) ); + + if ( config.readBoolEntry( "EffectAnimateCombo", false) ) + comboComboEffect->setCurrentItem( 1 ); + else + comboComboEffect->setCurrentItem( 0 ); + + if ( config.readBoolEntry( "EffectAnimateTooltip", false) ) + comboTooltipEffect->setCurrentItem( 1 ); + else if ( config.readBoolEntry( "EffectFadeTooltip", false) ) + comboTooltipEffect->setCurrentItem( 2 ); + else + comboTooltipEffect->setCurrentItem( 0 ); + + if ( config.readBoolEntry( "EffectAnimateMenu", false) ) + comboMenuEffect->setCurrentItem( 1 ); + else if ( config.readBoolEntry( "EffectFadeMenu", false) ) + comboMenuEffect->setCurrentItem( 2 ); + else + comboMenuEffect->setCurrentItem( 0 ); + + comboMenuHandle->setCurrentItem(config.readNumEntry("InsertTearOffHandle", 0)); + + // KStyle Menu transparency and drop-shadow options... + QSettings settings; + QString effectEngine = settings.readEntry("/KStyle/Settings/MenuTransparencyEngine", "Disabled"); + +#ifdef HAVE_XRENDER + if (effectEngine == "XRender") { + comboMenuEffectType->setCurrentItem(2); + comboMenuEffect->setCurrentItem(3); + } else if (effectEngine == "SoftwareBlend") { + comboMenuEffectType->setCurrentItem(1); + comboMenuEffect->setCurrentItem(3); +#else + if (effectEngine == "XRender" || effectEngine == "SoftwareBlend") { + comboMenuEffectType->setCurrentItem(1); // Software Blend + comboMenuEffect->setCurrentItem(3); +#endif + } else if (effectEngine == "SoftwareTint") { + comboMenuEffectType->setCurrentItem(0); + comboMenuEffect->setCurrentItem(3); + } else + comboMenuEffectType->setCurrentItem(0); + + if (comboMenuEffect->currentItem() != 3) // If not translucency... + menuPreview->setPreviewMode( MenuPreview::Tint ); + else if (comboMenuEffectType->currentItem() == 0) + menuPreview->setPreviewMode( MenuPreview::Tint ); + else + menuPreview->setPreviewMode( MenuPreview::Blend ); + + slOpacity->setValue( (int)(100 * settings.readDoubleEntry("/KStyle/Settings/MenuOpacity", 0.90)) ); + + // Menu Drop-shadows... + cbMenuShadow->setChecked( settings.readBoolEntry("/KStyle/Settings/MenuDropShadow", false) ); + + if (cbEnableEffects->isChecked()) { + containerFrame->setEnabled( true ); + menuContainer->setEnabled( comboMenuEffect->currentItem() == 3 ); + } else { + menuContainer->setEnabled( false ); + containerFrame->setEnabled( false ); + } + + m_bEffectsDirty = false; +} + + +void KCMStyle::menuEffectTypeChanged() +{ + MenuPreview::PreviewMode mode; + + if (comboMenuEffect->currentItem() != 3) + mode = MenuPreview::Tint; + else if (comboMenuEffectType->currentItem() == 0) + mode = MenuPreview::Tint; + else + mode = MenuPreview::Blend; + + menuPreview->setPreviewMode(mode); + + m_bEffectsDirty = true; +} + + +void KCMStyle::menuEffectChanged() +{ + menuEffectChanged( cbEnableEffects->isChecked() ); + m_bEffectsDirty = true; +} + + +void KCMStyle::menuEffectChanged( bool enabled ) +{ + if (enabled && + comboMenuEffect->currentItem() == 3) { + menuContainer->setEnabled(true); + } else + menuContainer->setEnabled(false); + m_bEffectsDirty = true; +} + + +// ---------------------------------------------------------------- +// All the Miscellaneous stuff +// ---------------------------------------------------------------- + +void KCMStyle::loadMisc( KConfig& config ) +{ + // KDE's Part via KConfig + config.setGroup("Toolbar style"); + cbHoverButtons->setChecked(config.readBoolEntry("Highlighting", true)); + cbTransparentToolbars->setChecked(config.readBoolEntry("TransparentMoving", true)); + + QString tbIcon = config.readEntry("IconText", "IconOnly"); + if (tbIcon == "TextOnly") + comboToolbarIcons->setCurrentItem(1); + else if (tbIcon == "IconTextRight") + comboToolbarIcons->setCurrentItem(2); + else if (tbIcon == "IconTextBottom") + comboToolbarIcons->setCurrentItem(3); + else + comboToolbarIcons->setCurrentItem(0); + + config.setGroup("KDE"); + cbIconsOnButtons->setChecked(config.readBoolEntry("ShowIconsOnPushButtons", false)); + cbEnableTooltips->setChecked(!config.readBoolEntry("EffectNoTooltip", false)); + cbTearOffHandles->setChecked(config.readBoolEntry("InsertTearOffHandle", false)); + + m_bToolbarsDirty = false; +} + +void KCMStyle::addWhatsThis() +{ + // Page1 + QWhatsThis::add( cbStyle, i18n("Here you can choose from a list of" + " predefined widget styles (e.g. the way buttons are drawn) which" + " may or may not be combined with a theme (additional information" + " like a marble texture or a gradient).") ); + QWhatsThis::add( stylePreview, i18n("This area shows a preview of the currently selected style " + "without having to apply it to the whole desktop.") ); + + // Page2 + QWhatsThis::add( page2, i18n("This page allows you to enable various widget style effects. " + "For best performance, it is advisable to disable all effects.") ); + QWhatsThis::add( cbEnableEffects, i18n( "If you check this box, you can select several effects " + "for different widgets like combo boxes, menus or tooltips.") ); + QWhatsThis::add( comboComboEffect, i18n( "

      Disable: do not use any combo box effects.

      \n" + "Animate: Do some animation.") ); + QWhatsThis::add( comboTooltipEffect, i18n( "

      Disable: do not use any tooltip effects.

      \n" + "

      Animate: Do some animation.

      \n" + "Fade: Fade in tooltips using alpha-blending.") ); + QWhatsThis::add( comboMenuEffect, i18n( "

      Disable: do not use any menu effects.

      \n" + "

      Animate: Do some animation.

      \n" + "

      Fade: Fade in menus using alpha-blending.

      \n" + "Make Translucent: Alpha-blend menus for a see-through effect. (KDE styles only)") ); + QWhatsThis::add( cbMenuShadow, i18n( "When enabled, all popup menus will have a drop-shadow, otherwise " + "drop-shadows will not be displayed. At present, only KDE styles can have this " + "effect enabled.") ); + QWhatsThis::add( comboMenuEffectType, i18n( "

      Software Tint: Alpha-blend using a flat color.

      \n" + "

      Software Blend: Alpha-blend using an image.

      \n" + "XRender Blend: Use the XFree RENDER extension for image blending (if available). " + "This method may be slower than the Software routines on non-accelerated displays, " + "but may however improve performance on remote displays.

      \n") ); + QWhatsThis::add( slOpacity, i18n("By adjusting this slider you can control the menu effect opacity.") ); + + // Page3 + QWhatsThis::add( page3, i18n("Note: that all widgets in this combobox " + "do not apply to Qt-only applications.") ); + QWhatsThis::add( cbHoverButtons, i18n("If this option is selected, toolbar buttons will change " + "their color when the mouse cursor is moved over them." ) ); + QWhatsThis::add( cbTransparentToolbars, i18n("If you check this box, the toolbars will be " + "transparent when moving them around.") ); + QWhatsThis::add( cbEnableTooltips, i18n( "If you check this option, the KDE application " + "will offer tooltips when the cursor remains over items in the toolbar." ) ); + QWhatsThis::add( comboToolbarIcons, i18n( "

      Icons only: Shows only icons on toolbar buttons. " + "Best option for low resolutions.

      " + "

      Text only: Shows only text on toolbar buttons.

      " + "

      Text alongside icons: Shows icons and text on toolbar buttons. " + "Text is aligned alongside the icon.

      " + "Text under icons: Shows icons and text on toolbar buttons. " + "Text is aligned below the icon.") ); + QWhatsThis::add( cbIconsOnButtons, i18n( "If you enable this option, KDE Applications will " + "show small icons alongside some important buttons.") ); + QWhatsThis::add( cbTearOffHandles, i18n( "If you enable this option some pop-up menus will " + "show so called tear-off handles. If you click them, you get the menu " + "inside a widget. This can be very helpful when performing " + "the same action multiple times.") ); +} + +#include "kcmstyle.moc" + +// vim: set noet ts=4: diff --git a/kcontrol/style/kcmstyle.h b/kcontrol/style/kcmstyle.h new file mode 100644 index 000000000..fb2909b1a --- /dev/null +++ b/kcontrol/style/kcmstyle.h @@ -0,0 +1,163 @@ +/* + * KCMStyle + * Copyright (C) 2002 Karol Szwed + * Copyright (C) 2002 Daniel Molkentin + * + * Portions Copyright (C) TrollTech AS. + * + * Based on kcmdisplay + * Copyright (C) 1997-2002 kcmdisplay Authors. + * (see Help -> About Style Settings) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __KCMSTYLE_H +#define __KCMSTYLE_H + +#include +#include + +#include + +#include "stylepreview.h" +#include "menupreview.h" + +class KComboBox; +class QCheckBox; +class QComboBox; +class QFrame; +class QGroupBox; +class QLabel; +class QListBox; +class QListViewItem; +class QSettings; +class QSlider; +class QSpacerItem; +class QStyle; +class QTabWidget; +class QVBoxLayout; +class StyleConfigDialog; +class WidgetPreview; + +struct StyleEntry { + QString name; + QString desc; + QString configPage; + bool hidden; +}; + +class KCMStyle : public KCModule +{ + Q_OBJECT + +public: + KCMStyle( QWidget* parent = 0, const char* name = 0 ); + ~KCMStyle(); + + virtual void load(); + virtual void load(bool useDefaults); + virtual void save(); + virtual void defaults(); + +protected: + bool findStyle( const QString& str, int& combobox_item ); + void switchStyle(const QString& styleName, bool force = false); + void setStyleRecursive(QWidget* w, QStyle* s); + + void loadStyle( KConfig& config ); + void loadEffects( KConfig& config ); + void loadMisc( KConfig& config ); + void addWhatsThis(); + +protected slots: + void styleSpecificConfig(); + void updateConfigButton(); + + void setEffectsDirty(); + void setToolbarsDirty(); + void setStyleDirty(); + + void styleChanged(); + void menuEffectChanged( bool enabled ); + void menuEffectChanged(); + void menuEffectTypeChanged(); + +private: + QString currentStyle(); + + bool m_bEffectsDirty, m_bStyleDirty, m_bToolbarsDirty; + QDict styleEntries; + QMap nameToStyleKey; + + QVBoxLayout* mainLayout; + QTabWidget* tabWidget; + QWidget *page1, *page2, *page3; + QVBoxLayout* page1Layout; + QVBoxLayout* page2Layout; + QVBoxLayout* page3Layout; + + // Page1 widgets + QGroupBox* gbWidgetStyle; + QVBoxLayout* gbWidgetStyleLayout; + QHBoxLayout* hbLayout; + KComboBox* cbStyle; + QPushButton* pbConfigStyle; + QLabel* lblStyleDesc; + StylePreview* stylePreview; + QStyle* appliedStyle; + QPalette palette; + + // Page2 widgets + QCheckBox* cbEnableEffects; + + QFrame* containerFrame; + QGridLayout* containerLayout; + QComboBox* comboTooltipEffect; + QComboBox* comboComboEffect; + QComboBox* comboMenuEffect; + QComboBox* comboMenuHandle; + + QLabel* lblTooltipEffect; + QLabel* lblComboEffect; + QLabel* lblMenuEffect; + QLabel* lblMenuHandle; + QSpacerItem* comboSpacer; + + QFrame* menuContainer; + QGridLayout* menuContainerLayout; + MenuPreview* menuPreview; + QVBox* sliderBox; + QSlider* slOpacity; + QComboBox* comboMenuEffectType; + QLabel* lblMenuEffectType; + QLabel* lblMenuOpacity; + QCheckBox* cbMenuShadow; + + // Page3 widgets + QGroupBox* gbVisualAppearance; + + QCheckBox* cbHoverButtons; + QCheckBox* cbTransparentToolbars; + QCheckBox* cbEnableTooltips; + QComboBox* comboToolbarIcons; + + QCheckBox* cbIconsOnButtons; + QCheckBox* cbTearOffHandles; +}; + +#endif // __KCMSTYLE_H + +// vim: set noet ts=4: diff --git a/kcontrol/style/keramik/Makefile.am b/kcontrol/style/keramik/Makefile.am new file mode 100644 index 000000000..028585373 --- /dev/null +++ b/kcontrol/style/keramik/Makefile.am @@ -0,0 +1,12 @@ +INCLUDES = $(all_includes) + +noinst_HEADERS = keramikconf.h +kde_module_LTLIBRARIES = kstyle_keramik_config.la +kstyle_keramik_config_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module +kstyle_keramik_config_la_LIBADD = $(LIB_KDEUI) +kstyle_keramik_config_la_SOURCES = keramikconf.cpp +METASOURCES = AUTO + + +messages: + $(XGETTEXT) *.cpp *.h -o $(podir)/kstyle_keramik_config.pot diff --git a/kcontrol/style/keramik/keramikconf.cpp b/kcontrol/style/keramik/keramikconf.cpp new file mode 100644 index 000000000..28e0ce424 --- /dev/null +++ b/kcontrol/style/keramik/keramikconf.cpp @@ -0,0 +1,103 @@ +/* +Copyright (c) 2003 Maksim Orlovich + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#include +#include +#include +#include +#include +#include + +#include "keramikconf.h" + +extern "C" +{ + KDE_EXPORT QWidget* allocate_kstyle_config(QWidget* parent) + { + return new KeramikStyleConfig(parent); + } +} + +KeramikStyleConfig::KeramikStyleConfig(QWidget* parent): QWidget(parent) +{ + //Should have no margins here, the dialog provides them + QVBoxLayout* layout = new QVBoxLayout(this, 0, 0); + KGlobal::locale()->insertCatalogue("kstyle_keramik_config"); + + //highlightLineEdits = new QCheckBox(i18n("Highlight active lineedits"), this); + highlightScrollBar = new QCheckBox(i18n("Highlight scroll bar handles"), this); + animateProgressBar = new QCheckBox(i18n("Animate progress bars"), this); + + //layout->add(highlightLineEdits); + layout->add(highlightScrollBar); + layout->add(animateProgressBar); + layout->addStretch(1); + + QSettings s; + //origHlLineEdit = s.readBoolEntry("/keramik/Settings/highlightLineEdits", false); + //highlightLineEdits->setChecked(origHlLineEdit); + + origHlScrollbar = s.readBoolEntry("/keramik/Settings/highlightScrollBar", true); + highlightScrollBar->setChecked(origHlScrollbar); + + origAnimProgressBar = s.readBoolEntry("/keramik/Settings/animateProgressBar", false); + animateProgressBar->setChecked(origAnimProgressBar); + + //connect(highlightLineEdits, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) ); + connect(highlightScrollBar, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) ); + connect(animateProgressBar, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) ); +} + +KeramikStyleConfig::~KeramikStyleConfig() +{ + KGlobal::locale()->removeCatalogue("kstyle_keramik_config"); +} + + +void KeramikStyleConfig::save() +{ + QSettings s; + //s.writeEntry("/keramik/Settings/highlightLineEdits", highlightLineEdits->isChecked()); + s.writeEntry("/keramik/Settings/highlightScrollBar", highlightScrollBar->isChecked()); + s.writeEntry("/keramik/Settings/animateProgressBar", animateProgressBar->isChecked()); +} + +void KeramikStyleConfig::defaults() +{ + //highlightLineEdits->setChecked(false); + highlightScrollBar->setChecked(true); + animateProgressBar->setChecked(false); + //updateChanged would be done by setChecked already +} + +void KeramikStyleConfig::updateChanged() +{ + if ( /*(highlightLineEdits->isChecked() == origHlLineEdit) &&*/ + (highlightScrollBar->isChecked() == origHlScrollbar) && + (animateProgressBar->isChecked() == origAnimProgressBar) ) + emit changed(false); + else + emit changed(true); +} + +#include "keramikconf.moc" diff --git a/kcontrol/style/keramik/keramikconf.h b/kcontrol/style/keramik/keramikconf.h new file mode 100644 index 000000000..f482fdb14 --- /dev/null +++ b/kcontrol/style/keramik/keramikconf.h @@ -0,0 +1,62 @@ +/* +Copyright (c) 2003 Maksim Orlovich + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef KERAMIK_CONF_H +#define KERAMIK_CONF_H + +class QCheckBox; + +class KeramikStyleConfig: public QWidget +{ + Q_OBJECT +public: + KeramikStyleConfig(QWidget* parent); + ~KeramikStyleConfig(); + + //This signal and the next two slots are the plugin + //page interface +signals: + void changed(bool); + +public slots: + void save(); + void defaults(); + + //Everything below this is internal. +protected slots: + void updateChanged(); + +protected: + //We store settings directly in widgets to + //avoid the hassle of sync'ing things + //QCheckBox* highlightLineEdits; + QCheckBox* animateProgressBar; + QCheckBox* highlightScrollBar; + + //Original settings, for accurate dirtiness tracking + //bool origHlLineEdit; + bool origAnimProgressBar; + bool origHlScrollbar; +}; + +#endif diff --git a/kcontrol/style/main.cpp b/kcontrol/style/main.cpp new file mode 100644 index 000000000..543685502 --- /dev/null +++ b/kcontrol/style/main.cpp @@ -0,0 +1,16 @@ +#include +#include +#include + +#include "kcmstyle.h" + +extern "C" { + KCModule *create_style(QWidget *parent, const char *) { + return new KCMStyle(parent, "kcmstyle"); + } +} + +/* +typedef KGenericFactory GeneralFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_style, GeneralFactory ) +*/ diff --git a/kcontrol/style/menupreview.cpp b/kcontrol/style/menupreview.cpp new file mode 100644 index 000000000..a8a74c981 --- /dev/null +++ b/kcontrol/style/menupreview.cpp @@ -0,0 +1,166 @@ +/* + * Menu Transparency Preview Widget + * Copyright (C) 2002 Karol Szwed + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#include "menupreview.h" + +#include +#include + +#include +#include +#include +#include +#include + + +MenuPreview::MenuPreview( QWidget* parent, int opacity, PreviewMode pvm ) + : QWidget( parent, 0, WStyle_Customize | WRepaintNoErase ), + pixBackground(NULL), pixOverlay(NULL), pixBlended(NULL) +{ + setFixedSize(150, 150); + setFocusPolicy( NoFocus ); + + mode = pvm; + if (opacity < 0) opacity = 0; + if (opacity > 100) opacity = 100; + menuOpacity = opacity/100.0; + + pixBackground = new KPixmap(); + pixOverlay = new KPixmap(); + pixBlended = new KPixmap(); + + createPixmaps(); + blendPixmaps(); +} + +MenuPreview::~MenuPreview() +{ + delete pixBackground; + delete pixOverlay; + delete pixBlended; +} + +void MenuPreview::createPixmaps() +{ + int w = width()-2; + int h = height()-2; + + if (pixBackground) + pixBackground->resize( w, h ); + if (pixOverlay) + pixOverlay->resize( w, h ); + if (pixBlended) + pixBlended->resize( w, h ); + + QColorGroup cg = colorGroup(); + QColor c1 = cg.background(); + QColor c2 = cg.mid(); + + if (pixBackground) { + // Paint checkerboard + QPainter p; + p.begin(pixBackground); + for(int x=0; x < pixBackground->width(); x+=5) + for(int y=0; y < pixBackground->height(); y+=5) + p.fillRect( x, y, 5, 5, + (x % 2) ? + ((y % 2) ? c2 : c1 ) : // See the grid? ;-) + ((y % 2) ? c1 : c2 ) ); + KIconLoader* icl = KGlobal::iconLoader(); + QPixmap pix = icl->loadIcon("go", KIcon::Desktop, KIcon::SizeLarge, KIcon::ActiveState); + p.drawPixmap( (width()-2-pix.width())/2, (height()-2-pix.height())/2, pix ); + } + + if (pixOverlay) { + c1 = cg.button().light(110); + c2 = cg.button().dark(110); + KPixmapEffect::gradient( *pixOverlay, c1, c2, KPixmapEffect::VerticalGradient ); + } +} + +void MenuPreview::blendPixmaps() +{ + // Rebuild pixmaps, and repaint + if (pixBlended && pixBackground) + { + if (mode == Blend && pixOverlay) { + QImage src = pixOverlay->convertToImage(); + QImage dst = pixBackground->convertToImage(); + KImageEffect::blend(src, dst, menuOpacity); + pixBlended->convertFromImage( dst ); + } else if (mode == Tint) { + QColor clr = colorGroup().button(); + QImage dst = pixBackground->convertToImage(); + KImageEffect::blend(clr, dst, menuOpacity); + pixBlended->convertFromImage( dst ); + } + } +} + +void MenuPreview::setOpacity( int opacity ) +{ + if (opacity < 0 || opacity > 100) + return; + + if ((int)(menuOpacity*100) != opacity) { + menuOpacity = opacity/100.0; + blendPixmaps(); + repaint( false ); + } +} + +void MenuPreview::setPreviewMode( PreviewMode pvm ) +{ + if (mode != pvm) { + mode = pvm; + blendPixmaps(); + repaint( false ); + } +} + +void MenuPreview::paintEvent( QPaintEvent* /* pe */ ) +{ + // Paint the frame and blended pixmap + QColorGroup cg = colorGroup(); + int x2 = width()-1; + int y2 = height()-1; + + QPainter p(this); + p.setPen(cg.dark()); + p.drawLine(0, 0, x2, 0); + p.drawLine(0, 0, 0, y2); + p.setPen(cg.light()); + p.drawLine(1, y2, x2, y2); + p.drawLine(x2, 1, x2, y2); + + if (mode == NoEffect) + p.fillRect(1, 1, --x2, --y2, cg.button()); + else if (mode != NoEffect && pixBlended) + p.drawPixmap(1, 1, *pixBlended, 0, 0, --x2, --y2); + + QRect r = rect(); + r.moveBy(6,3); + p.setPen( cg.text() ); + p.drawText( r, AlignTop | AlignLeft, QString::number((int)(menuOpacity*100))+i18n("%") ); +} + +#include "menupreview.moc" + +// vim: set noet ts=4: + diff --git a/kcontrol/style/menupreview.h b/kcontrol/style/menupreview.h new file mode 100644 index 000000000..2b7cb8bc8 --- /dev/null +++ b/kcontrol/style/menupreview.h @@ -0,0 +1,61 @@ +/* + * Menu Transparency Preview Widget + * Copyright (C) 2002 Karol Szwed + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __MENUPREVIEW_H +#define __MENUPREVIEW_H + +#include + +class KPixmap; + +class MenuPreview : public QWidget +{ + Q_OBJECT + +public: + enum PreviewMode { + NoEffect = 0, + Tint, + Blend + }; + + MenuPreview( QWidget* parent, int opacity, PreviewMode pvm ); + ~MenuPreview(); + +public slots: + void setOpacity( int opacity ); + void setPreviewMode( PreviewMode pvm ); + +protected: + void paintEvent( QPaintEvent* pe ); + +private: + void createPixmaps(); + void blendPixmaps(); + + KPixmap* pixBackground; + KPixmap* pixOverlay; + KPixmap* pixBlended; + float menuOpacity; + PreviewMode mode; +}; + +// vim: set noet ts=4: +#endif // __MENUPREVIEW_H + diff --git a/kcontrol/style/style.desktop b/kcontrol/style/style.desktop new file mode 100644 index 000000000..648853ea1 --- /dev/null +++ b/kcontrol/style/style.desktop @@ -0,0 +1,234 @@ +[Desktop Entry] +Exec=kcmshell style +Icon=style +Type=Application +DocPath=kcontrol/kcmstyle/index.html + + +X-KDE-Library=style +X-KDE-FactoryName=style +X-KDE-Init=style +X-KDE-ParentApp=kcontrol + +Name=Style +Name[af]=Styl +Name[ar]=المظهر العام +Name[az]=Tərz +Name[be]=Стыль +Name[bg]=Теми и стилове +Name[bn]=স্টাইল +Name[br]=Giz +Name[bs]=Stil +Name[ca]=Estil +Name[cs]=Styl +Name[csb]=Sztél +Name[cy]=Arddull +Name[da]=Stil +Name[de]=Stil +Name[el]=Στυλ +Name[eo]=Stilo +Name[es]=Estilo +Name[et]=Stiil +Name[eu]=Estiloa +Name[fa]=سبک +Name[fi]=Tyyli +Name[fy]=Styl +Name[ga]=Stíl +Name[gl]=Estilo +Name[he]=סגנון +Name[hi]=शैली +Name[hr]=Stil +Name[hu]=Stílus +Name[id]=Gaya +Name[is]=Stíll +Name[it]=Stile +Name[ja]=スタイル +Name[ka]=სტილი +Name[kk]=Стилі +Name[km]=រចនាប័ទ្ម +Name[ko]=스타일 +Name[lo]=ລັກສະນະ +Name[lt]=Stilius +Name[lv]=Stils +Name[mk]=Стил +Name[mn]=Хэлбэр +Name[ms]=Gaya +Name[mt]=Stil +Name[nb]=Stil +Name[nds]=Stil +Name[ne]=शैली +Name[nl]=Stijl +Name[nn]=Stil +Name[nso]=Mokgwa +Name[oc]=Estil +Name[pa]=ਸ਼ੈਲੀ +Name[pl]=Styl +Name[pt]=Estilo +Name[pt_BR]=Estilo +Name[ro]=Stil +Name[ru]=Стиль +Name[rw]=Imisusire +Name[se]=Stiila +Name[sk]=Štýl +Name[sl]=Slog +Name[sr]=Стил +Name[sr@Latn]=Stil +Name[ss]=Sitayela +Name[sv]=Stil +Name[ta]=பாணி +Name[tg]=Услуб +Name[th]=ลักษณะ +Name[tr]=Stil +Name[tt]=Stil +Name[uk]=Стиль +Name[uz]=Uslub +Name[uz@cyrillic]=Услуб +Name[ven]=Tshitaela +Name[vi]=Kiểu dáng +Name[wa]=Stîle +Name[xh]=Uhlobo +Name[zh_CN]=风格 +Name[zh_TW]=風格 +Name[zu]=Isitayela +Comment=Allows the manipulation of widget behavior and changing the Style for KDE +Comment[af]=Laat toe die manipulasie van gui-element gedrag en verandering die Styl vir Kde +Comment[be]=Дазваляе кіраваць паводзінамі віджэтаў і змяняць стыль KDE +Comment[bg]=Настройване на стила +Comment[bn]=উইজেট আচরণ নিয়ন্ত্রণ করুন এবং কে.ডি.ই-র স্টাইল পাল্টান +Comment[bs]=Omogućuje upravljanje ponašanjem ukrasa i izmjenu stila za KDE +Comment[ca]=Permet la manipulació del comportament dels estris i permet canviar-ne l'estil per al KDE +Comment[cs]=Umožňuje upravit chování prvků grafického prostředí a změnu stylu KDE +Comment[csb]=Zezwôlô na òpisanié zachòwaniô elementów interfejsu ë zmianã Sztélu KDE +Comment[cy]=Yn caniatau trin ymddygiad teclyn a newid arddull KDE +Comment[da]=Tillader manipulation af kontrolopførsel og ændring af stilen for KDE +Comment[de]=Stile und das Verhalten von Bedienelementen verändern +Comment[el]=Επιτρέπει τη διαχείριση της συμπεριφοράς των γραφικών συστατικών και την αλλαγή του Στυλ για το KDE +Comment[en_GB]=Allows the manipulation of widget behaviour and changing the Style for KDE +Comment[eo]=Aspekto kaj konduto de la fenestroelementoj +Comment[es]=Permite la manipulación del comportamiento del widget y permite cambiar el estilo para KDE +Comment[et]=Võimaldab muuta kasutajaliidese elementide käitumist ning välimust +Comment[eu]=Widget-en portaera eta KDEren estiloa aldatzen uzten dizu +Comment[fa]=اجازۀ دستکاری رفتار عنصر و تغییر سبک را برای KDE می‌دهد. +Comment[fi]=Mahdollistaa kontrollien käyttäytymisen muokaamisen ja KDE:n tyylin vaihtamisen +Comment[fr]=Permet la configuration du comportement des éléments graphiques et la modification des styles de KDE +Comment[fy]=Hjirmei kinne jo it gedrach fan de widgets oanpasse en de styl fan KDE wizigje +Comment[gl]=Permite a manipulación do comportamento dun widget e o cámbio de estilo de KDE +Comment[he]=שינוי הגדרות פעולת הפריטים והסגנון של KDE +Comment[hi]=केडीई की शैली तथा विजेट बर्ताव में परिवर्तन की स्वीकृति देता है +Comment[hr]=Dopušta upravljanje ponašanja widgeta i izmjenu KDE stila +Comment[hu]=Lehetővé teszi a grafikus alapelemek jellemzőinek megváltoztatását, a KDE stílusának módosítását +Comment[is]=Leyfir hagræðingu á græjuhegðun og breytingu á KDE stílnum +Comment[it]=Permette la configurazione del comportamento degli elementi grafici e il cambio dello stile di KDE +Comment[ja]=ウィジェットの挙動と KDE のスタイルを変更 +Comment[ka]=KDE-ს ელემენტების სტილი და იერსახე +Comment[kk]=KDE элементтерінің қасиеттері +Comment[km]=អនុញ្ញាត​ឲ្យ​រៀបចំ​ឥរិយាបថ​វត្ថុ​មើលឃើញ និង​ប្ដូរ​រចនាប័ទ្ម​របស់ KDE +Comment[ko]=KDE 위젯의 행동을 조정하고 스타일을 변경하기 +Comment[lt]=Leidžia manipuliuoti valdiklio elgsena ir leidžia pakeisti KDE stilių +Comment[lv]=Atļauj manipulācijas ar logdaļu izturēšanos un ļauj mainīt Stilu priekš KDE +Comment[mk]=Дозволува манипулација со однесувањата на графичките контроли и промена на стиловите во KDE +Comment[mn]=Үйлчилгээний элементийн хэлбэр ба байдал өөрчилөх +Comment[ms]=Membolehkan manipulasi kelakuan widget dan mengubah Gaya untuk KDE +Comment[mt]=Hawn tista' timmanipula l-imġieba tal-kontrolli u tbiddel l-istil għall-KDE +Comment[nb]=Her kan du endre oppførsel til skjermelementer, og endre stiler i KDE +Comment[nds]=Hier kann dat Bedregen vun Bedeen-Elementen un ehr KDE-Stil ännert warrn +Comment[ne]=KDE का लागि परिवर्तन शैली र विजेट व्यवहारको परिचालन गर्न अनुमति दिन्छ +Comment[nl]=Hiermee kunt u het gedrag van de widgets aanpassen en de stijl van KDE wijzigen +Comment[nn]=Let deg endra KDE-stilen og åtferda til skjermelementa +Comment[nso]=Dumelela peakanyo ya mekgwa ya widget lego fetosa Mokgwa wa KDE +Comment[pa]=KDE ਲਈ ਵਿਦਗਿਟ ਵਿਵਹਾਰ ਅਤੇ ਸ਼ੈਲੀ ਤਬਦੀਲ ਲਈ ਸਹਾਈ ਹੈ +Comment[pl]=Pozwala na określenie zachowania elementów interfejsu i zmianę Stylu KDE +Comment[pt]=Permite a manipulação do comportamento dos elementos gráficos e a mudança do estilo para o KDE +Comment[pt_BR]=Permite a manipulação do comportamente de widgets e a escolha do estilo usado pelo KDE +Comment[ro]=Modifică stilul grafic KDE și comportamentul elementelor grafice +Comment[ru]=Стиль и облик элементов KDE +Comment[rw]=Yemerera ikoreshwa ry'imyitwarire y'irenga no guhindura Imisusire ya KDE +Comment[se]=Diktá du rievdadit KDE-stiilla ja šearbmaáđaid láhttema +Comment[sk]=Umožňuje upraviť správanie prvkov a zmenu štýlu pre KDE +Comment[sl]=Omogoča manipulacijo z gradniki in spreminjanje sloga KDE +Comment[sr]=Омогућава подешавање понашања форми и промену стила за KDE +Comment[sr@Latn]=Omogućava podešavanje ponašanja formi i promenu stila za KDE +Comment[sv]=Tillåter manipulering av beteendet hos komponenter och ändring av stil på KDE +Comment[ta]=KDEக்கான வளைவுகளின் இயக்கத்தை கையாளவும் பாணிகளை மாற்றவும் அனுமதிக்கிறது +Comment[tg]= Тавоноии таъғир ва ислоҳи навъи рафтори тарҳ ва услуби KDE-ро ба шумо медиҳад +Comment[th]=อนุญาตการปรับรพฤติกรรมขอวิตเจ็ตลและเปลี่ยนลักษณะของ KDE +Comment[tr]=KDE için Aletlerin davranışlarını ve stili değiştirmeyi sağlar +Comment[tt]=KDE yözara berämleklärneñ çağılışı belän küreneşe +Comment[uk]=Керування поведінкою віджетів та зміна стилю KDE +Comment[ven]=Tendela u tshinywa ha maitele a widget ni tendele nau shandukisa tshitaela tsha KDE +Comment[vi]=Cho phép điều chỉnh ứng xử của các thành tố điều khiển và thay đổi kiểu dáng của KDE +Comment[wa]=Permete d' eployî li dujhance des ahesses et d' candjî l' stîle po KDE +Comment[xh]=Ivumela uhanahaniso lokuziphatha kwe widget kwaye itshintsha Uhlobo lwe KDE +Comment[zh_CN]=允许操纵修饰行为和更改 KDE 的样式 +Comment[zh_TW]=讓您控制視窗元件 (widget) 的操作方式,以及更改 KDE 的風格 +Comment[zu]=Ivumela ukulawula kokuziphatha kwe-widget kanye nokushintsha isitayela se-KDE + +Keywords=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications +Keywords[af]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE programme +Keywords[az]=tərz,tərzlər,görünüş,dekorlar,örtük,örtüklər,parçacıq,menyu,MacOS,menyu çubuğu,timsal,timsallar,vasitə çubuğu,mətn,düymə,siçan,şəffaf,hərəkət,ekran,proqram,proqramlar,KDE proqramları +Keywords[be]=Стыль,Стылі,Выгляд,Вонкавы выгляд,Віджэт,Значкі,Панэлі начынняў,Тэкст,Падсвятленне,Праграмы,Праграмы KDE,style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications +Keywords[bg]=стил, тема, външен, вид, икони, текст, цветове, style, styles, look, widget, icons, toolbars, text, highlight, apps, KDE applications +Keywords[br]=giz,gizioù,widget,neuz,arlunoù,barrennoù an ostilhoù,skrid,highlight,meziantoù,meziantoù KDE +Keywords[ca]=estil,estils,temes,aspecte,objete visual,estri,icones,barres d'eines,text,ressaltat,aplicacions,aplicacions KDE +Keywords[cs]=Styl,Témata,Motivy,Vzhled,Text,Zvýraznění,Tlačítka,Aplikace KDE +Keywords[csb]=sztél,sztéle,wëzdrzatk,òkno,ikònë,lëstwë nôrzãdzów,tekstë,nôdpisë,pòdskrzënienié,programë,programë KDE +Keywords[cy]=arddull,arddulliau,golwg,teclyn,celfigyn,eiconau,bar offer,testun,amlygu,rhaglenni,rhaglenni KDE +Keywords[da]=stil,udseende,kontrol,ikoner,værktøjslinjer,tekst,fremhæv,prog,KDE-programmer +Keywords[de]=Stile,Design,Themes,Schema,Elemente,Bildschirmelemente,Icons,Bedienelemente,Schriften,Symbole,Werkzeugleisten,Text,Hervorhebungen,Knöpfe,Anwendungen,Programme,KDE-Programme +Keywords[el]=στυλ,στυλ,εμφάνιση,γραφικό συστατικό,εικονίδια,γραμμές εργαλείων,κείμενο,τονισμός,εφαρμογές,εφαρμογές KDE +Keywords[eo]=stilo,aspekto,fenestraĵo,piktogramo,ilobreto,aplikaĵoj +Keywords[es]=estilo,estilos,temas,aspecto,objeto visual,widget,texto,resaltado,botones, aplicaciones, aplicaciones KDE +Keywords[et]=stiil,stiilid,teemad,välimus,elemendid,vidinad,menüüriba,ikoonid, tööriistaribad,rakendused,KDE rakendused +Keywords[eu]=estiloa,estiloak,itxura,widget-a,ikonoak,tresna-barrak,testua, nabarmenketa,aplikazioak,KDE aplikazioak +Keywords[fa]=سبک، سبکها، ظاهر، عنصر، شمایلها، میله‌ ابزارها، متن، مشخص، کاربردها، کاربردهای KDE +Keywords[fi]=tyyli,tyylit,ulkonäkö,kontrolli,kuvakkeet,työkalurivit,teksti,korostus,sovellukset,KDE sovellukset +Keywords[fr]=style,styles,thème,apparence,widget,élément graphique,barre demenus,MacOS,police,couleur,non KDE,icône,icônes,barre d'outils,barres d'outils,barres de menus,texte,surbrillance,sélection,bouton,souris,transparence,déplacement,écran,applications,programmes,programmes non KDE,applications non KDE +Keywords[fy]=styl,stylen,look,üterlik,widget,icons,ikoan,ikoanen,wurkbalke,tekst,highlight,pljochtsje,apps,KDE-tapassingen,programma's,KDE-programma's,tapassingen +Keywords[ga]=stíl,stíleanna,téama,cuma,giuirléid,deilbhíní,barraí uirlisí,téacs,aibhsiú,feidhmchláir,feidhmchláir KDE +Keywords[gl]=estilo,estilos,apariencia,widget,iconas,barras de ferramentas,texto,resaltar,aplicacións,aplicacións KDE +Keywords[he]=סגנון,מראה,פריטים,סמלים,סרגל כלים,טקסט,הדגשה,יישומים,יישומים של KDE,style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications +Keywords[hi]=शैली,शैलियाँ,रूप,विजेट,प्रतीक,औज़ार-पट्टी,पाठ,उभारें,एप्प्स,केडीई अनुप्रयोग +Keywords[hr]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,stil,izgled,ikone,alatne trake,tekst,naglašavanje,KDE aplikacije +Keywords[hu]=stílus,stílusok,kinézet,grafikus elem,ikonok,eszköztárak,szöveg,kiemelés,alkalmazások,KDE alkalmazások +Keywords[is]=stíll,stílar,þemur,þema,útlit,valmyndir,valslá,MacOS,letur,leturgerðir,leturgerð,gegnsætt,skjár,forrit, táknmyndir,takkar,mús,takki,hnappur +Keywords[it]=stile,stili,aspetto,widget,elemento grafico,icone,barre degli strumenti,testo,evidenziazione,applicazioni,applicazioni KDE +Keywords[ja]=スタイル,スタイル,外観,ウィジェット,アイコン,ツールバー,テキスト,ハイライト,アプリ,KDEアプリケーション +Keywords[km]=រចនាប័ទ្ម,រូបរាង,វត្ថុ​មើលឃើញ,រូបតំណាង,របារ​ឧបករណ៍,អត្ថបទ,បន្លិច,កម្មវិធី,កម្មវិធី KDE +Keywords[lt]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications, stilius,stiliai,išvaizda,valdiklis,ženkliukai,piktogramos,įrankių juostos,paryškinimas,KDE taikomosios programos +Keywords[mk]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,стил,стилови,изглед,икони,алатници,текст,KDE апликации +Keywords[mn]=Хэлбэр,Загвар,Themes,Схем,Элемент,Дэлгэцийн элемент,Icons, Үйлчилгээний элемент,Бичиг,Тэмдэг,Багаж самбар,Текст,Онцгойлолт,Товч, Хэрэглээний,Програм,КДЭ-Програм +Keywords[mt]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,stili,dehra,ikoni,test,immarkar +Keywords[nb]=stil,stiler,temaer,utseende,menylinje,skrifttype,farger,ikke-KDE,ikoner,verktøylinje,tekst,knapper,mus,flytting,skjerm,programmer,ikke-KDE programmer +Keywords[nds]=Stil,Stilen,look,widget,Lüttbiller,Warktüüchbalken,Text,markeren,Programmen,KDE-Programmen,Bedeenelement +Keywords[ne]=शैली, शैलीहरू, हेर्नुहोस्, विजेट, प्रतिमा, उपकरणपट्टी, पाठ, हाइलाइट,apps,KDE अनुप्रयोगहरू +Keywords[nl]=stijl,stijlen,look,uiterlijk,widget,icons,iconen,pictogrammen,werkbalken,tekst,highlight,accentuatie,apps,KDE-toepassingen,programma's,KDE-programma's,toepassingen +Keywords[nn]=stil,tema,utsjånad,bunad,element,skjermelement,verktøylinje,tekst,markering,program,KDE-program +Keywords[nso]=mokgwa,mekgwa,tebelelo,widget,diemedi,di-bar tsa dibereka,sengwalwana,pontshwana,apps,KDE ditshomiso +Keywords[pa]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,ਸ਼ੈਲੀ,ਸ਼ੈਲੀਆਂ,ਦਿੱਖ,ਆਈਕਾਨ,ਸੰਦ-ਪੱਟੀ,ਪਾਠ,ਉਘਾੜੋ,ਕਾਰਜ +Keywords[pl]=styl,style,wygląd,okienko,ikony,paski narzędzi,tekst,napisy,podświetlenie,programy,programy KDE +Keywords[pt]=estilo,estilos,aparência,elemento,ícones,ferramentas,texto,realce,aplicações,aplicações do KDE +Keywords[pt_BR]=estilo,estilos,aparência,widget,ícones,barra de ferramentas,texto,realce,aplicativos,aplicativos não-KDE +Keywords[ro]=stil,aspect,componentă,widget,iconițe,bare de unelte,text,evidențiere,aplicații,KDE +Keywords[ru]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,стиль,стили,приложения +Keywords[rw]=umususire,imisusire,imboneko,irenga,udushushondanga,umwanyabikoresho,umwandiko,gushimangira,porogaramu,Porogaramu KDE +Keywords[se]=stiila,fáddá,fárda,áđat,govažat,neavvoholggat,teaksta,merken,prográmmat,KDE-prográmmat +Keywords[sk]=štýl,štýly,vzhľad,prvok,ikony,KDE aplikácie,panely nástrojov,text,zvýraznenie,aplikácie +Keywords[sl]=slog,slogi,stil,stili,teme,videz,izgled,gradnik,menujska vrstica,osvetlitev,programi,programi za KDEi +Keywords[sr]=style,styles,look,widget,icons,toolbars,text,highlight,apps,стил,стилови,теме,изглед,форма,иконе,траке са алатима,текст,истицање,програми,KDE програми +Keywords[sr@Latn]=style,styles,look,widget,icons,toolbars,text,highlight,apps,stil,stilovi,teme,izgled,forma,ikone,trake sa alatima,tekst,isticanje,programi,KDE programi +Keywords[sv]=stil,stilar,utseende,komponent,ikoner,verktygrader,text,färgläggning, program,KDE-program +Keywords[ta]=பாணி,பாணிகள்,பார்,வளைவு,சின்னம்,கருவிப்பட்டி,உரை,தனிப்படுத்து,பயன்பாடு,கேடியி பயன்பாடுகள் +Keywords[th]=ลักษณะ,ที่มองเห็น,วิตเจ็ต,ไอคอน,แถบเครื่องมือ,ข้อความ,ทำตัวเน้น,โปรแกรม,แอพพลิเคชัน KDE +Keywords[tr]=simgeler,stil,stiller,dekor,dekorlar,tema,temalar,görünüm,parçacık,menü,KDE uygulamaları,araç çubukları,uygulamalar +Keywords[uk]=стиль,стилі,вигляд,віджет,піктограми,пенали, текст,виділення,програми KDE +Keywords[uz]=uslub,uslublar,tashqi koʻrinishi,vidjet,nishonchalar,asboblar paneli,matn,belgilash,dasturlar,KDE dasturlari +Keywords[uz@cyrillic]=услуб,услублар,ташқи кўриниши,виджет,нишончалар,асбоблар панели,матн,белгилаш,дастурлар,KDE дастурлари +Keywords[ven]=Tshitaela,Zwitaela,sedza,widget,dziaikhono,bara ya tshishumiswa,manwalwa,bvisela khagala,apps,dziapulifikhesheni ya KDE +Keywords[vi]=kiểu,các kiểu,nhìn,widget,biểu tượng,thanh công cụ,text,đánh dấu,apps,ứng dụng KDE +Keywords[wa]=stîle,stîles,rivnance,ahesse,imådjete,Bårs ås usteyes,tecse,programes,programes KDE +Keywords[xh]=uhlobo, iintlobo, jonga, widget, amaphawu emifanekiso, iibar zesixhobo, umbhalo, phawula, apps, izicelo ze KDE +Keywords[zh_CN]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,风格,外观,窗口部件,图标,工具栏,文字,突出,KDE 程序,KDE 应用程序 +Keywords[zh_TW]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,風格,主題,外觀,視窗元件,圖示,工具列,文字,突出顯示,應用程式,KDE 應用程式 +Keywords[zu]=isitayela,izitayela,ukubukeka,widget,izimpawu zezithombe,amabha amathuluzi,umbhalo,ukugqamisa,apps,abayaleli be-KDE + +Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcontrol/style/styleconfdialog.cpp b/kcontrol/style/styleconfdialog.cpp new file mode 100644 index 000000000..6638b620d --- /dev/null +++ b/kcontrol/style/styleconfdialog.cpp @@ -0,0 +1,46 @@ +/* + * KCMStyle's container dialog for custom style setup dialogs + * + * (c) 2003 Maksim Orlovich + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#include "styleconfdialog.h" +#include + +StyleConfigDialog::StyleConfigDialog(QWidget* parent, QString styleName): + KDialogBase(parent, "StyleConfigDialog", + true, /*modal*/ + i18n("Configure %1").arg(styleName), + KDialogBase::Default | KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Cancel) +{ + m_dirty = false; + connect( this, SIGNAL( defaultClicked() ), this, SIGNAL( defaults() )); + connect( this, SIGNAL( okClicked() ), this, SIGNAL( save() )); +} + +bool StyleConfigDialog::isDirty() const +{ + return m_dirty; +} + +void StyleConfigDialog::setDirty(bool dirty) +{ + m_dirty = dirty; +} + +#include diff --git a/kcontrol/style/styleconfdialog.h b/kcontrol/style/styleconfdialog.h new file mode 100644 index 000000000..ab299225a --- /dev/null +++ b/kcontrol/style/styleconfdialog.h @@ -0,0 +1,46 @@ +/* + * KCMStyle's container dialog for custom style setup dialogs + * + * (c) 2003 Maksim Orlovich + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 STYLE_CONF_DIALOG +#define STYLE_CONF_DIALOG + +#include + + +class StyleConfigDialog: public KDialogBase +{ + Q_OBJECT +public: + StyleConfigDialog(QWidget* parent, QString styleName); + + bool isDirty() const; + +public slots: + void setDirty(bool dirty); + +signals: + void defaults(); + void save(); + +private: + bool m_dirty; +}; + +#endif diff --git a/kcontrol/style/stylepreview.ui b/kcontrol/style/stylepreview.ui new file mode 100644 index 000000000..fbb4929f2 --- /dev/null +++ b/kcontrol/style/stylepreview.ui @@ -0,0 +1,285 @@ + +StylePreview + + + StylePreview + + + + 0 + 0 + 483 + 254 + + + + + unnamed + + + 0 + + + + spacer1 + + + Vertical + + + Expanding + + + + 20 + 50 + + + + + + TabWidget2 + + + + 3 + 5 + 1 + 0 + + + + 2 + + + + tab + + + Tab 1 + + + + unnamed + + + + ButtonGroup1 + + + Button Group + + + + unnamed + + + + RadioButton1 + + + Radio button + + + true + + + + + RadioButton2 + + + Radio button + + + + + Line1 + + + HLine + + + Sunken + + + Horizontal + + + + + CheckBox1 + + + Checkbox + + + true + + + false + + + + + + + ScrollBar1 + + + 19 + + + Vertical + + + + + + Combobox + + + + ComboBox1 + + + + + ProgressBar1 + + + 70 + + + + + Slider1 + + + Horizontal + + + + + layout3 + + + + unnamed + + + + spacer6 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + SpinBox1 + + + + 3 + 0 + 1 + 0 + + + + + 0 + 0 + + + + + 200 + 32767 + + + + 999999 + + + + + PushButton1 + + + + 3 + 0 + 1 + 0 + + + + + 0 + 0 + + + + + 200 + 32767 + + + + Button + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 30 + 20 + + + + + + + + + + tab + + + Tab 2 + + + + + + + kdialog.h + stylepreview.ui.h + + + init() + eventFilter( QObject *, QEvent * ev ) + + + + diff --git a/kcontrol/style/stylepreview.ui.h b/kcontrol/style/stylepreview.ui.h new file mode 100644 index 000000000..09b50a0ce --- /dev/null +++ b/kcontrol/style/stylepreview.ui.h @@ -0,0 +1,69 @@ +/* + * Style Preview Widget + * Copyright (C) 2002 Karol Szwed + * Copyright (C) 2002 Daniel Molkentin + * + * Portions Copyright (C) 2000 TrollTech AS. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + * + *************************************************************************** + ** ui.h extension file, included from the uic-generated form implementation. + ** + ** If you wish to add, delete or rename slots use Qt Designer which will + ** update this file, preserving your code. Create an init() slot in place of + ** a constructor, and a destroy() slot in place of a destructor. + *****************************************************************************/ + +#include + +void StylePreview::init() +{ + // Ensure that the user can't toy with the child widgets. + // Method borrowed from Qt's qtconfig. + QObjectList* l = queryList("QWidget"); + QObjectListIt it(*l); + QObject* obj; + while ((obj = it.current()) != 0) + { + ++it; + obj->installEventFilter(this); + ((QWidget*)obj)->setFocusPolicy(NoFocus); + } + delete l; +} + +bool StylePreview::eventFilter( QObject* /* obj */, QEvent* ev ) +{ + switch( ev->type() ) + { + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + case QEvent::MouseMove: + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::Enter: + case QEvent::Leave: + case QEvent::Wheel: + case QEvent::ContextMenu: + return TRUE; // ignore + default: + break; + } + return FALSE; +} + +// vim: set noet ts=4: diff --git a/kcontrol/taskbar/Makefile.am b/kcontrol/taskbar/Makefile.am new file mode 100644 index 000000000..bd458e1be --- /dev/null +++ b/kcontrol/taskbar/Makefile.am @@ -0,0 +1,21 @@ +kde_module_LTLIBRARIES = kcm_taskbar.la + +kcm_taskbar_la_SOURCES = kcmtaskbarui.ui kcmtaskbar.cpp +kcm_taskbar_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_taskbar_la_LIBADD = $(top_builddir)/kicker/taskbar/libtaskbar.la -lkdeui +AM_CPPFLAGS = -I$(top_builddir)/kicker/taskbar $(all_includes) + +METASOURCES = AUTO + +noinst_HEADERS = kcmtaskbar.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmtaskbar.pot + +xdg_apps_DATA = kcmtaskbar.desktop + +install-data-local: uninstall.desktop + $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel + $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/LookNFeel/kcmtaskbar.desktop + +kcmtaskbar.lo: ../../kicker/taskbar/taskbarsettings.h diff --git a/kcontrol/taskbar/kcmtaskbar.cpp b/kcontrol/taskbar/kcmtaskbar.cpp new file mode 100644 index 000000000..08139b607 --- /dev/null +++ b/kcontrol/taskbar/kcmtaskbar.cpp @@ -0,0 +1,291 @@ +/* + * Copyright (c) 2000 Kurt Granroth + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define protected public +#include "kcmtaskbarui.h" +#undef protected +#include "taskbarsettings.h" + +#include "kcmtaskbar.h" +#include "kcmtaskbar.moc" + +typedef KGenericFactory TaskBarFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_taskbar, TaskBarFactory("kcmtaskbar") ) + +TaskbarAppearance::TaskbarAppearance(QString name, + bool drawButtons, + bool haloText, + bool showButtonOnHover) + : m_name(name), + m_drawButtons(drawButtons), + m_haloText(haloText), + m_showButtonOnHover(showButtonOnHover) +{ +} + +TaskbarAppearance::TaskbarAppearance() + : m_drawButtons(false), + m_haloText(false), + m_showButtonOnHover(true) +{ +} + +bool TaskbarAppearance::matchesSettings() const +{ + return TaskBarSettings::drawButtons() == m_drawButtons && + TaskBarSettings::haloText() == m_haloText && + TaskBarSettings::showButtonOnHover() == m_showButtonOnHover; +} + +void TaskbarAppearance::alterSettings() const +{ + TaskBarSettings::self()->setDrawButtons(m_drawButtons); + TaskBarSettings::self()->setHaloText(m_haloText); + TaskBarSettings::self()->setShowButtonOnHover(m_showButtonOnHover); +} + +// These are the strings that are actually stored in the config file. +const QStringList& TaskbarConfig::actionList() +{ + static QStringList list( + QStringList() << I18N_NOOP("Show Task List") << I18N_NOOP("Show Operations Menu") + << I18N_NOOP("Activate, Raise or Minimize Task") + << I18N_NOOP("Activate Task") << I18N_NOOP("Raise Task") + << I18N_NOOP("Lower Task") << I18N_NOOP("Minimize Task") + << I18N_NOOP("To Current Desktop") + << I18N_NOOP("Close Task") ); + return list; +} + +// Get a translated version of the above string list. +QStringList TaskbarConfig::i18nActionList() +{ + QStringList i18nList; + for( QStringList::ConstIterator it = actionList().begin(); it != actionList().end(); ++it ) { + i18nList << i18n((*it).latin1()); + } + return i18nList; +} + +// These are the strings that are actually stored in the config file. +const QStringList& TaskbarConfig::groupModeList() +{ + static QStringList list( + QStringList() << I18N_NOOP("Never") << I18N_NOOP("When Taskbar Full") + << I18N_NOOP("Always")); + return list; +} + +// Get a translated version of the above string list. +QStringList TaskbarConfig::i18nGroupModeList() +{ + QStringList i18nList; + for( QStringList::ConstIterator it = groupModeList().begin(); it != groupModeList().end(); ++it ) { + i18nList << i18n((*it).latin1()); + } + return i18nList; +} + +TaskbarConfig::TaskbarConfig(QWidget *parent, const char* name, const QStringList&) + : KCModule(TaskBarFactory::instance(), parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + m_widget = new TaskbarConfigUI(this); + layout->addWidget(m_widget); + + // TODO: Load these from .desktop files? + m_appearances.append(TaskbarAppearance(i18n("Elegant"), false, false, true)); + m_appearances.append(TaskbarAppearance(i18n("Classic"), true, false, true)); + m_appearances.append(TaskbarAppearance(i18n("For Transparency"), false, true, true)); + + for (TaskbarAppearance::List::const_iterator it = m_appearances.constBegin(); + it != m_appearances.constEnd(); + ++it) + { + m_widget->appearance->insertItem((*it).name()); + } + + connect(m_widget->appearance, SIGNAL(activated(int)), + this, SLOT(appearanceChanged(int))); + addConfig(TaskBarSettings::self(), m_widget); + + setQuickHelp(i18n("

      Taskbar

      You can configure the taskbar here." + " This includes options such as whether or not the taskbar should show all" + " windows at once or only those on the current desktop." + " You can also configure whether or not the Window List button will be displayed.")); + + QStringList list = i18nActionList(); + m_widget->kcfg_LeftButtonAction->insertStringList(list); + m_widget->kcfg_MiddleButtonAction->insertStringList(list); + m_widget->kcfg_RightButtonAction->insertStringList(list); + m_widget->kcfg_GroupTasks->insertStringList(i18nGroupModeList()); + + connect(m_widget->kcfg_GroupTasks, SIGNAL(activated(int)), + this, SLOT(slotUpdateComboBox())); + connect(m_widget->kcfg_UseCustomColors, SIGNAL(stateChanged(int)), this, SLOT(slotUpdateCustomColors())); + + slotUpdateCustomColors(); + updateAppearanceCombo(); + + if (KWin::numberOfDesktops() < 2) + { + m_widget->kcfg_ShowAllWindows->hide(); + m_widget->kcfg_SortByDesktop->hide(); + m_widget->spacer2->changeSize(0, 0); + } + + if (!QApplication::desktop()->isVirtualDesktop() || + QApplication::desktop()->numScreens() == 1) // No Ximerama + { + m_widget->showAllScreens->hide(); + } + connect( m_widget->showAllScreens, SIGNAL( stateChanged( int )), SLOT( changed())); + + KAboutData *about = new KAboutData(I18N_NOOP("kcmtaskbar"), + I18N_NOOP("KDE Taskbar Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000 - 2001 Matthias Elter")); + + about->addAuthor("Matthias Elter", 0, "elter@kde.org"); + about->addCredit("Stefan Nikolaus", I18N_NOOP("KConfigXT conversion"), + "stefan.nikolaus@kdemail.net"); + setAboutData(about); + + load(); + QTimer::singleShot(0, this, SLOT(notChanged())); +} + +void TaskbarConfig::slotUpdateCustomColors() +{ + m_widget->kcfg_ActiveTaskTextColor->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + m_widget->activeTaskTextColorLabel->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + + m_widget->kcfg_InactiveTaskTextColor->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + m_widget->inactiveTaskTextColorLabel->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + + m_widget->kcfg_TaskBackgroundColor->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + m_widget->taskBackgroundColorLabel->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); +} + +void TaskbarConfig::slotUpdateComboBox() +{ + int pos = TaskBarSettings::ActivateRaiseOrMinimize; + // If grouping is enabled, call "Activate, Raise or Iconify something else, + // though the config key used is the same. + if(m_widget->kcfg_GroupTasks->currentItem() != TaskBarSettings::GroupNever) + { + m_widget->kcfg_LeftButtonAction->changeItem(i18n("Cycle Through Windows"), pos); + m_widget->kcfg_MiddleButtonAction->changeItem(i18n("Cycle Through Windows"), pos); + m_widget->kcfg_RightButtonAction->changeItem(i18n("Cycle Through Windows"), pos); + } + else + { + QString action = i18nActionList()[pos]; + m_widget->kcfg_LeftButtonAction->changeItem(action,pos); + m_widget->kcfg_MiddleButtonAction->changeItem(action,pos); + m_widget->kcfg_RightButtonAction->changeItem(action,pos); + } +} + +void TaskbarConfig::updateAppearanceCombo() +{ + unsigned int i = 0; + for (TaskbarAppearance::List::const_iterator it = m_appearances.constBegin(); + it != m_appearances.constEnd(); + ++it, ++i) + { + if ((*it).matchesSettings()) + { + break; + } + } + + if (i < m_appearances.count()) + { + m_widget->appearance->setCurrentItem(i); + return; + } + + if (m_widget->appearance->count() == m_appearances.count()) + { + m_widget->appearance->insertItem(i18n("Custom")); + } + + m_widget->appearance->setCurrentItem(m_appearances.count()); +} + +void TaskbarConfig::appearanceChanged(int selected) +{ + if (selected < m_appearances.count()) + { + unmanagedWidgetChangeState(!m_appearances[selected].matchesSettings()); + } +} + +void TaskbarConfig::load() +{ + KCModule::load(); + slotUpdateComboBox(); + updateAppearanceCombo(); + m_widget->showAllScreens->setChecked(!TaskBarSettings::self()->showCurrentScreenOnly()); +} + +void TaskbarConfig::save() +{ + TaskBarSettings::self()->setShowCurrentScreenOnly(!m_widget->showAllScreens->isChecked()); + int selectedAppearance = m_widget->appearance->currentItem(); + if (selectedAppearance < m_appearances.count()) + { + m_appearances[selectedAppearance].alterSettings(); + TaskBarSettings::self()->writeConfig(); + } + + KCModule::save(); + + QByteArray data; + kapp->dcopClient()->emitDCOPSignal("kdeTaskBarConfigChanged()", data); +} + +void TaskbarConfig::defaults() +{ + KCModule::defaults(); + slotUpdateComboBox(); + updateAppearanceCombo(); +} + +void TaskbarConfig::notChanged() +{ + emit changed(false); +} diff --git a/kcontrol/taskbar/kcmtaskbar.desktop b/kcontrol/taskbar/kcmtaskbar.desktop new file mode 100644 index 000000000..85085f9ad --- /dev/null +++ b/kcontrol/taskbar/kcmtaskbar.desktop @@ -0,0 +1,229 @@ +[Desktop Entry] +Icon=kmenu +Type=Application +DocPath=kcontrol/kcmtaskbar/index.html +Exec=kcmshell kcmtaskbar + + +X-KDE-Library=taskbar +X-KDE-FactoryName=taskbar +X-KDE-ParentApp=kcontrol + +Name=Taskbar +Name[af]=Kasbar +Name[ar]=شريط المهام +Name[az]=Vəzifə Çubuğu +Name[be]=Панэль заданняў +Name[bg]=Панел за задачи +Name[bn]=টাস্কবার +Name[br]=Barrenn dleadoù +Name[ca]=Barra de tasques +Name[cs]=Pruh úloh +Name[csb]=Lëstew dzejaniów +Name[cy]=Bar tasgau +Name[da]=Opgavelinje +Name[de]=Fensterleiste +Name[el]=Γραμμή εργασιών +Name[eo]=Taskostrio +Name[es]=Barra de tareas +Name[et]=Tegumiriba +Name[eu]=Ataza-barra +Name[fa]=میله تکلیف +Name[fi]=Tehtäväpalkki +Name[fr]=Barre des tâches +Name[fy]=Taakbalke +Name[ga]=Tascbharra +Name[gl]=Barra de tarefas +Name[he]=שורת המשימות +Name[hi]=कार्यपट्टी +Name[hr]=Traka zadataka +Name[hu]=Feladatlista +Name[is]=Verkefnaslá +Name[it]=Barra delle applicazioni +Name[ja]=タスクバー +Name[ka]=ამოცანათა პანელი +Name[kk]=Тапсырмалар панелі +Name[km]=របារ​ភារកិច្ច +Name[ko]=작업 표시줄 +Name[lo]=ແຖບຫນ້າຕ່າງງານ +Name[lt]=Užduočių juosta +Name[lv]=Uzdevumjosla +Name[mk]=Лента со програми +Name[mn]=Цонхны самбар +Name[nb]=Oppgavelinje +Name[nds]=Programmbalken +Name[ne]=कार्यपट्टी +Name[nl]=Taakbalk +Name[nn]=Oppgåvelinje +Name[nso]=Bar ya Mosongwana +Name[oc]=Barra de tasques +Name[pa]=ਸੰਦਪੱਟੀ +Name[pl]=Pasek zadań +Name[pt]=Barra de Tarefas +Name[pt_BR]=Barra de tarefas +Name[ro]=Bara de procese +Name[ru]=Панель задач +Name[rw]=Umurongoibikorwa +Name[se]=Bargoholga +Name[sk]=Panel úloh +Name[sl]=Opravilna vrstica +Name[sr]=Трака задатака +Name[sr@Latn]=Traka zadataka +Name[ss]=Ibar yemsebenti +Name[sv]=Aktivitetsfält +Name[ta]=பணிப்பட்டி +Name[tg]=Пайраҳаи вазифа +Name[th]=แถบหน้าต่างงาน +Name[tr]=Görev Çubuğu +Name[tt]=Qoraltirä +Name[uk]=Смужка задач +Name[uz]=Vazifalar paneli +Name[uz@cyrillic]=Вазифалар панели +Name[ven]=Bara ya mushumo +Name[vi]=Thanh tác vụ +Name[wa]=Bår des bouyes +Name[xh]=Ibar yomsebenzi +Name[zh_CN]=任务条 +Name[zh_TW]=工作列 +Name[zu]=Ibha yemisebenzi + +Comment=Configure the panel taskbar +Comment[af]=Stel die paneel taakbalk op +Comment[ar]=إعداد شريط المهام اللوح +Comment[be]=Настаўленні панэлі заданняў +Comment[bg]=Настройване на панела за задачите +Comment[bn]=প্যানেল টাস্কবার কনফিগার করুন +Comment[br]=Kefluniañ barrenn dleadoù ar panell +Comment[bs]=Podesite panel taskbara +Comment[ca]=Configura el plafó barra de tasques +Comment[cs]=Zde je možné nastavit pruh úloh panelu +Comment[csb]=Kònfigùracëjô lëstwë dzejaniô panelu +Comment[cy]=Ffurfweddu bar tasgau y panel +Comment[da]=Indstil panelets opgavelinje +Comment[de]=Den Programmbereich der Kontrollleiste einrichten +Comment[el]=Ρυθμίστε τη γραμμή εργασιών του πίνακα +Comment[eo]=Agordo de la panela taskostrio +Comment[es]=Configuración de la barra de tareas del panel +Comment[et]=Paneeli tegumiriba seadistamine +Comment[eu]=Konfiguratu paneleko ataza-barra +Comment[fa]=پیکربندی میله تکلیف +Comment[fi]=Muokkaa paneelin tehtäväpalkkia +Comment[fr]=Configuration de la barre des tâches du tableau de bord +Comment[fy]=Hjir kinne jo de taakbalke fan it paniel ynstelle +Comment[gl]=Configurar a barra de tarefas do painel +Comment[he]=הגדר שורת המשימות של הלוח +Comment[hi]=फलक कार्यपट्टी कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje trake zadataka na ploči +Comment[hu]=A panel feladatlistájának beállításai +Comment[is]=Hér getur þú stillt verkefnaslá spjaldsins +Comment[it]=Configura la barra delle applicazioni nel pannello +Comment[ja]=パネルのタスクバーを設定 +Comment[ka]=ამოცანათა პანელის კონფიგურაცია +Comment[kk]=Тапсырмалар панелін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​របារ​ភារកិច្ច​បន្ទះ +Comment[ko]=패널 작업 표시줄 설정 +Comment[lt]=Čia galite konfigūruoti pulto užduočių juostą +Comment[lv]=Šeit Jūs varat konfigurēt paneļa uzdevumjoslu +Comment[mk]=Тука може да ја конфигурирате лентата со програми +Comment[mn]=Цонхны самбар тохируулах +Comment[ms]=Konfigur 'taskbar' panel +Comment[mt]=Ikkonfigura t-taskbar tal-pannell +Comment[nb]=Tilpass oppgavelinja i panelet +Comment[nds]=Den Programmbalken in't Paneel instellen +Comment[ne]=प्यानल कार्यपट्टी कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u de taakbalk van het paneel instellen +Comment[nn]=Oppsett av oppgåvelinja i panelet +Comment[pa]=ਪੈਨਲ ਸੰਦਪੱਟੀ ਸੰਰਚਨਾ +Comment[pl]=Konfiguracja paska zadań panelu +Comment[pt]=Configuração da barra de tarefas do painel +Comment[pt_BR]=Configura a barra de tarefas +Comment[ro]=Configurează bara de procese din panou +Comment[ru]=Настройки панели задач +Comment[rw]=Kuboneza umurongoibikorwa w'umwanya +Comment[se]=Dáppe sáhtát heivehit panela bargoholgga. +Comment[sk]=Tu môžete nastaviť vlastnosti panelu úloh +Comment[sl]=Nastavite opravilno vrstico pulta +Comment[sr]=Подешавање панела са списком послова +Comment[sr@Latn]=Podešavanje panela sa spiskom poslova +Comment[sv]=Anpassa panelens aktivitetsfält +Comment[ta]=பலகச் பணிப்பட்டியை வடிவமை +Comment[tg]=Панели пайраҳаи вазифаро танзим кунед +Comment[th]=ปรับแต่งถาดหน้าต่างงานของพาเนล +Comment[tr]=Panel görev çubuğunu yapılandır +Comment[tt]=Eşlärtirä taqtasın caylaw +Comment[uk]=Налаштування смужки задач +Comment[uz]=Vazifalar panelini moslash +Comment[uz@cyrillic]=Вазифалар панелини мослаш +Comment[vi]=Cấu hình thanh tác vụ +Comment[wa]=Apontyî li scriftôr bår des bouyes +Comment[zh_CN]=配置面板的任务条 +Comment[zh_TW]=您可以在這裡設定面板工作列 + +Keywords=kicker,panel,kpanel,taskbar,startbar,launchbar,windows +Keywords[ar]=kicker,لوحة المهام,kpanel,شريط المهام, شريط البدء, شريط التشغيل, النوافذ +Keywords[az]=kicker,panel,kpanel,vəzifə çubuğu,başlatma çubuğu,başlama çubuğu,pəncərələr +Keywords[be]=Панэль,Панэль заданняў,Панэль стартавання,Вокны,Акно,kicker,panel,kpanel,taskbar,startbar,launchbar,windows +Keywords[bg]=системен, панел, задачи, задача, прозорец, kicker, panel, kpanel, taskbar, startbar, launchbar, windows +Keywords[ca]=kicker,plafó,kpanel,barra de tasques,barra d'inici,barra d'engegar,finestres +Keywords[cs]=Kicker,Panel,Pruh úloh,Startovací lišta,Spouštěcí lišta,Okna +Keywords[csb]=kicker,panel,kpanel,lëstew dzejaniów,sztartowô lëstew,zrëszanié,òkna +Keywords[cy]=kicker,ciciwr,panel,kpanel,bar tasgau,bar cychwyn,bar lawnsio,ffenestri +Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,kørelinje,vinduer +Keywords[de]=Kicker,Kontrollleiste,Panel,KPanel,Taskbar,Startleiste,Fensterleiste,Startleiste,Fenster +Keywords[el]=kicker,πίνακας,kpanel,μπάρα εργασιών,μπάρα έναρξης,μπάρα εκκίνησης,παράθυρα +Keywords[eo]=lanĉilo,panelo,taskostrio,lanĉostrio,fenestroj +Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,ventanas +Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,aknad +Keywords[eu]=kicker,panela,kpanela,ataza-barra,hasiera-barra,abiatze-barra,leihoak +Keywords[fa]=kicker، تابلو، kpanel، میله تکلیف، میله آغازه میله راه‌اندازی، پنجره‌ها +Keywords[fi]=kicker,paneeli,kpanel,tehtäväpalkki,käynnistys,käynnistyspalkki,ikkunat +Keywords[fr]=kicker,tableau de bord,kpanel,barre des tâches,barre de démarrage,barre de lancement,fenêtres +Keywords[fy]=kicker,panel,paniel,kpanel,taakbalke,startbalk,Begjinbalke,startmenu,finsters +Keywords[gl]=kicker,painel,kpanel,barra de tarefas,startbar,launchbar,windows +Keywords[he]=לוח,שורת משימות,שורת התחל,שורת הפעלה,חלונות, kicker,panel,kpanel,taskbar,startbar,launchbar,windows +Keywords[hi]=किकर,फलक,केपेनल,औज़ार-पट्टी,प्रारंभ-पट्टी,चालक-पट्टी,विंडो +Keywords[hr]=kicker,panel,kpanel,taskbar,startbar,launchbar,ploča,prozori,traka zadataka,ploča,traka pokretanja,windows +Keywords[hu]=Kicker,panel,kpanel,feladatlista,indítómenü,ablakok +Keywords[is]=spjald,kspjald,tækjaslá,forritaslá,gluggar,ræsingarslá +Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,barra di avvio,finestre +Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,ウィンドウ +Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​បើក​ដំណើរការ,បង្អួច +Keywords[lt]=kicker,pultas,kpanel,užduočių juosta,startavimo juosta,paleisties juosta +Keywords[lv]=kikers,panelis,kpanelis,uzdevumjosla,startjosla,palaišanasjosla,logi +Keywords[mk]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,панел,прозорци +Keywords[mn]=Kicker,Удирдах самбар,Самбар,KPanel,Taskbar,Эхлэл самбар,Цонхны самбар,Эхлэл самбар,Цонх +Keywords[ms]=kicker,panel, kpanel, 'taskbar', bar mula, bar pelancar, tetingkap +Keywords[nb]=kicker,panel,kpanel,oppgavelinje,startlinje,kjørelinje,programlinje,vinduer +Keywords[nds]=kicker,Paneel,kpanel,Opgavenbalken,Startbalken,starten,Fnstern +Keywords[ne]=हान्ने, प्यानल, के प्यानल, कार्यपट्टी, सुरुपट्टी, सुरुआतपट्टी, सञ्झ्याल +Keywords[nl]=kicker,panel,paneel,kpanel,takenbalk,startbalk,launchbar,startmenu,vensters,taakbalk +Keywords[nn]=kicker,panel,kpanel,oppgåvelinje,startlinje,programlinje,vindauge +Keywords[nso]=seragi,panel,kpanel,bar ya mosongwana,bar ya thomiso,bar ya ngwadisoleswa,windows +Keywords[pa]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,ਪੈਨਲ,ਕੇਪੈਨਲ,ਝਰੋਖੇ,ਸਥਿਤੀ-ਪੱਟੀ +Keywords[pl]=kicker,panel,kpanel,pasek zadań,pasek startu,uruchamianie,okna +Keywords[pt]=kicker,painel,kpanel,barra de tarefas,barra de arranque,janelas +Keywords[pt_BR]=kicker,painel,kpanel,barra de tarefas,barra de início,barra de lançamento,janelas +Keywords[ro]=kicker,panou,kpanel,bară de procese,bară de start,pornire,ferestre +Keywords[ru]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,окно,панель +Keywords[rw]=igitera,umwanya,k-umwanya,umurongoibikorwa,umurongogutangira,umurongogutangiza,amadirishya +Keywords[se]=kicker,panela,kpanel,bargoholga,álggahanholga,láset +Keywords[sk]=kicker,panel,kpanel,taskbar,startbar,launchbar,okná +Keywords[sl]=kicker,panel,kpanel,opravilna vrstica,začetna vrstica,izstrelišče,okna +Keywords[sr]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,панел,послови,трака задатака +Keywords[sr@Latn]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,panel,poslovi,traka zadataka +Keywords[sv]=kicker,panel,kpanel,aktivitetsfält,startrad,programrad,fönster +Keywords[ta]= கிக்கர், பலகம்.kபலகம்,பணிப்பட்டி,துவக்கபட்டி, வெளியீட்டுப்பட்டி, சாளரம் +Keywords[th]=kicker,ถาดพาเนล,kpanel,taskbar,startbar,แถบเรียกใช้งานด่วน,หน้าต่าง +Keywords[tr]=kicker,panel,kpanel,görev çubuğu,başlangıç çubuğu,yükleme çubuğu,pencere,pencereler +Keywords[uk]=kicker,панель,панель,kpanel,смужка задач,панель запуску,стартова панель,вікна +Keywords[uz]=kicker,kpanel,panel,oynalar,vazifalar paneli +Keywords[uz@cyrillic]=kicker,kpanel,панел,ойналар,вазифалар панели +Keywords[ven]=murahi,phanele,phanele ya k,bara ya mushumo,thomani bara,thoma bara,dziwindo +Keywords[vi]=kích hoạt,bảng điều khiển,bảng điều khiển KDE,thanh tác vụ,thanh khởi động,cửa sổ +Keywords[wa]=kicker,kpanel,bår des bouyes,bår d' enondaedje,purneas +Keywords[xh]=umkhabi,iwindowe eneenkcukacha,kpanel,ibar yomsebenzi,ibar yokuqalisa,ibar yelaunch,i windows +Keywords[zh_CN]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,面板,任务栏,启动栏 +Keywords[zh_TW]=kicker,panel,kpanel,taskbar,startbar,launchbar,windows,控制面板,工作列,狀態列,快捷列,視窗 +Keywords[zu]=kicker,iwindi lemininingwane,kpanel,ibha yemisebenzi, ibha yokuqala,ibha yokuqalisa,ama-window + +Categories=Qt;KDE;X-KDE-settings-desktop; diff --git a/kcontrol/taskbar/kcmtaskbar.h b/kcontrol/taskbar/kcmtaskbar.h new file mode 100644 index 000000000..6fd28e92d --- /dev/null +++ b/kcontrol/taskbar/kcmtaskbar.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2000 Kurt Granroth + * Copyright (c) 2000 Matthias Elter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef __kcmtaskbar_h__ +#define __kcmtaskbar_h__ + +#include + +#include + +class TaskbarConfigUI; + +class TaskbarAppearance +{ + public: + typedef QValueList List; + + TaskbarAppearance(); + TaskbarAppearance(QString name, + bool drawButtons, + bool haloText, + bool showButtonOnHover); + + bool matchesSettings() const; + void alterSettings() const; + QString name() const { return m_name; } + + private: + QString m_name; + bool m_drawButtons; + bool m_haloText; + bool m_showButtonOnHover; +}; + +class TaskbarConfig : public KCModule +{ + Q_OBJECT + +public: + TaskbarConfig(QWidget *parent = 0, const char* name = 0, + const QStringList &list = QStringList()); + +public slots: + void load(); + void save(); + void defaults(); + +protected slots: + void slotUpdateComboBox(); + void appearanceChanged(int); + void notChanged(); + void slotUpdateCustomColors(); + +private: + TaskbarAppearance::List m_appearances; + void updateAppearanceCombo(); + static const QStringList& actionList(); + static QStringList i18nActionList(); + static const QStringList& groupModeList(); + static QStringList i18nGroupModeList(); + TaskbarConfigUI *m_widget; +}; + +#endif diff --git a/kcontrol/taskbar/kcmtaskbarui.ui b/kcontrol/taskbar/kcmtaskbarui.ui new file mode 100644 index 000000000..d234683ca --- /dev/null +++ b/kcontrol/taskbar/kcmtaskbarui.ui @@ -0,0 +1,482 @@ + +TaskbarConfigUI + + + TaskbarConfigUI + + + + 0 + 0 + 358 + 351 + + + + Taskbar + + + + + + unnamed + + + 0 + + + + taskbarGroup + + + Taskbar + + + + + + + + unnamed + + + + kcfg_SortByDesktop + + + Sort windows by desk&top + + + true + + + Selecting this option causes the taskbar to show windows in order of the desktop they appear on. + +By default this option is selected. + + + + + kcfg_ShowAllWindows + + + &Show windows from all desktops + + + true + + + Turning this option off will cause the taskbar to display <b>only</b> the windows on the current desktop. + +By default, this option is selected and all windows are shown. + + + + + kcfg_ShowWindowListBtn + + + Show window list &button + + + true + + + Selecting this option causes the taskbar to display a button that, when clicked, shows a list of all windows in a popup menu. + + + + + kcfg_GroupTasks + + + + 7 + 0 + 0 + 0 + + + + The taskbar can group similar windows into single buttons. When one of these window group buttons are clicked on a menu appears showing all the windows in that group. This can be especially useful with the <em>Show all windows</em> option. + +You can set the taskbar to <strong>Never</strong> group windows, to <strong>Always</strong> group windows or to group windows only <strong>When the Taskbar is Full</strong>. + +By default the taskbar groups windows when it is full. + + + + + groupTasksLabel + + + &Group similar tasks: + + + kcfg_GroupTasks + + + + + kcfg_ShowOnlyIconified + + + Show o&nly minimized windows + + + Select this option if you want the taskbar to display <b>only</b> minimized windows. + +By default, this option is not selected and the taskbar will show all windows. + + + + + kcfg_ShowIcon + + + Sho&w application icons + + + true + + + Select this option if you want window icons to appear along with their titles in the taskbar. + +By default this option is selected. + + + + + showAllScreens + + + Show windows from all sc&reens + + + true + + + Turning this option off will cause the taskbar to display <b>only</b> windows which are on the same Xinerama screen as the taskbar. + +By default, this option is selected and all windows are shown. + + + + + appearance + + + + + textLabel1 + + + A&ppearance: + + + appearance + + + + + kcfg_UseCustomColors + + + true + + + Use &custom colors + + + true + + + + + layout9 + + + + unnamed + + + + spacer11_2 + + + Horizontal + + + Expanding + + + + 191 + 20 + + + + + + kcfg_InactiveTaskTextColor + + + + + + + + spacer11 + + + Horizontal + + + Expanding + + + + 191 + 20 + + + + + + kcfg_TaskBackgroundColor + + + + + + + + taskBackgroundColorLabel + + + &Background color: + + + kcfg_TaskBackgroundColor + + + + + kcfg_ActiveTaskTextColor + + + + + + + + inactiveTaskTextColorLabel + + + Inacti&ve task text color: + + + kcfg_InactiveTaskTextColor + + + + + activeTaskTextColorLabel + + + Active task te&xt color: + + + kcfg_ActiveTaskTextColor + + + + + spacer12 + + + Horizontal + + + Expanding + + + + 191 + 20 + + + + + + + + spacer2 + + + Horizontal + + + Fixed + + + + 20 + 20 + + + + + + kcfg_SortByApp + + + Sort alphabeticall&y by application name + + + true + + + + + + + GroupBox1 + + + Actions + + + + unnamed + + + + leftButtonLabel + + + &Left button: + + + kcfg_LeftButtonAction + + + + + middleButtonLabel + + + &Middle button: + + + kcfg_MiddleButtonAction + + + + + rightButtonLabel + + + Right b&utton: + + + kcfg_RightButtonAction + + + + + kcfg_LeftButtonAction + + + + 7 + 0 + 0 + 0 + + + + + + kcfg_MiddleButtonAction + + + + 7 + 0 + 0 + 0 + + + + + + kcfg_RightButtonAction + + + + 7 + 0 + 0 + 0 + + + + + + + + Spacer1 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + kcfg_ShowAllWindows + toggled(bool) + kcfg_SortByDesktop + setEnabled(bool) + + + + kcfg_ShowAllWindows + kcfg_SortByDesktop + showAllScreens + kcfg_SortByApp + kcfg_ShowOnlyIconified + kcfg_ShowIcon + kcfg_ShowWindowListBtn + kcfg_GroupTasks + appearance + kcfg_UseCustomColors + kcfg_InactiveTaskTextColor + kcfg_ActiveTaskTextColor + kcfg_TaskBackgroundColor + kcfg_LeftButtonAction + kcfg_MiddleButtonAction + kcfg_RightButtonAction + + + kdialog.h + + + + + kcolorbutton.h + kcolorbutton.h + kcolorbutton.h + + diff --git a/kcontrol/taskbar/uninstall.desktop b/kcontrol/taskbar/uninstall.desktop new file mode 100644 index 000000000..e1e3e1732 --- /dev/null +++ b/kcontrol/taskbar/uninstall.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/kcontrol/usbview/Makefile.am b/kcontrol/usbview/Makefile.am new file mode 100644 index 000000000..e43934b70 --- /dev/null +++ b/kcontrol/usbview/Makefile.am @@ -0,0 +1,21 @@ +kde_module_LTLIBRARIES = kcm_usb.la + +kcm_usb_la_SOURCES = kcmusb.cpp usbdevices.cpp usbdb.cpp + +kcm_usb_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_usb_la_LIBADD = $(LIB_KDEUI) + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +messages: + $(XGETTEXT) *.cpp *.i18n -o $(podir)/kcmusb.pot + +xdg_apps_DATA = kcmusb.desktop + +if install_usbids +usb_DATA = usb.ids +usbdir = $(kde_datadir)/kcmusb +endif + diff --git a/kcontrol/usbview/classes.i18n b/kcontrol/usbview/classes.i18n new file mode 100644 index 000000000..e54d126cc --- /dev/null +++ b/kcontrol/usbview/classes.i18n @@ -0,0 +1,48 @@ +i18n("AT-commands") +i18n("ATM Networking") +i18n("Abstract (modem)") +i18n("Audio") +i18n("Bidirectional") +i18n("Boot Interface Subclass") +i18n("Bulk (Zip)") +i18n("CAPI 2.0") +i18n("CAPI Control") +i18n("CDC PUF") +i18n("Communications") +i18n("Control Device") +i18n("Control/Bulk") +i18n("Control/Bulk/Interrupt") +i18n("Data") +i18n("Direct Line") +i18n("Ethernet Networking") +i18n("Floppy") +i18n("HDLC") +i18n("Host Based Driver") +i18n("Hub") +i18n("Human Interface Devices") +i18n("I.430 ISDN BRI") +i18n("Interface") +i18n("Keyboard") +i18n("Mass Storage") +i18n("Mouse") +i18n("Multi-Channel") +i18n("No Subclass") +i18n("Non Streaming") +i18n("None") +i18n("Printer") +i18n("Q.921") +i18n("Q.921M") +i18n("Q.921TM") +i18n("Q.932 EuroISDN") +i18n("SCSI") +i18n("Streaming") +i18n("Telephone") +i18n("Transparent") +i18n("Unidirectional") +i18n("V.120 V.24 rate ISDN") +i18n("V.42bis") +i18n("Vendor Specific") +i18n("Vendor Specific Class") +i18n("Vendor Specific Protocol") +i18n("Vendor Specific Subclass") +i18n("Vendor specific") diff --git a/kcontrol/usbview/configure.in.in b/kcontrol/usbview/configure.in.in new file mode 100644 index 000000000..66271f7c2 --- /dev/null +++ b/kcontrol/usbview/configure.in.in @@ -0,0 +1,16 @@ +case "$host" in + *-*-linux*|*-*-freebsd*|*-*-kfreebsd*-gnu) + FOUND_USBVIEW=yes + ;; +esac + +AM_CONDITIONAL(include_kcontrol_usbview, test "$FOUND_USBVIEW" = "yes") + +AC_ARG_WITH([usbids], AC_HELP_STRING([--with-usbids=PATH], [Use the usb.ids file at the specified path, instead of the local copy])) + +if test "x$with_usbids" != "x" && test "x$with_usbids" != "xno"; then + AC_DEFINE_UNQUOTED(USBIDS_FILE, "$with_usbids", [Path for the usb.ids file to use]) + dont_install_usbids="yes" +fi + +AM_CONDITIONAL(install_usbids, test "x$dont_install_usbids" != "xyes") diff --git a/kcontrol/usbview/kcmusb.cpp b/kcontrol/usbview/kcmusb.cpp new file mode 100644 index 000000000..24cb1f1bd --- /dev/null +++ b/kcontrol/usbview/kcmusb.cpp @@ -0,0 +1,192 @@ +/*************************************************************************** + * Copyright (C) 2001 by Matthias Hoelzer-Kluepfel * + * * + * 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. * + * * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "usbdevices.h" +#include "kcmusb.moc" + +typedef KGenericFactory USBFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_usb, USBFactory("kcmusb") ) + +USBViewer::USBViewer(QWidget *parent, const char *name, const QStringList &) + : KCModule(USBFactory::instance(), parent, name) +{ + setButtons(Help); + + setQuickHelp( i18n("

      USB Devices

      This module allows you to see" + " the devices attached to your USB bus(es).")); + + QVBoxLayout *vbox = new QVBoxLayout(this, 0, KDialog::spacingHint()); + QGroupBox *gbox = new QGroupBox(i18n("USB Devices"), this); + gbox->setColumnLayout( 0, Qt::Horizontal ); + vbox->addWidget(gbox); + + QVBoxLayout *vvbox = new QVBoxLayout(gbox->layout(), KDialog::spacingHint()); + + QSplitter *splitter = new QSplitter(gbox); + vvbox->addWidget(splitter); + + _devices = new QListView(splitter); + _devices->addColumn(i18n("Device")); + _devices->setRootIsDecorated(true); + _devices->header()->hide(); + _devices->setMinimumWidth(200); + _devices->setColumnWidthMode(0, QListView::Maximum); + + QValueList sizes; + sizes.append(200); + splitter->setSizes(sizes); + + _details = new QTextView(splitter); + + splitter->setResizeMode(_devices, QSplitter::KeepSize); + + QTimer *refreshTimer = new QTimer(this); + // 1 sec seems to be a good compromise between latency and polling load. + refreshTimer->start(1000); + + connect(refreshTimer, SIGNAL(timeout()), SLOT(refresh())); + connect(_devices, SIGNAL(selectionChanged(QListViewItem*)), + this, SLOT(selectionChanged(QListViewItem*))); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmusb"), I18N_NOOP("KDE USB Viewer"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2001 Matthias Hoelzer-Kluepfel")); + + about->addAuthor("Matthias Hoelzer-Kluepfel", 0, "mhk@kde.org"); + about->addCredit("Leo Savernik", "Live Monitoring of USB Bus", "l.savernik@aon.at"); + setAboutData( about ); + + load(); +} + +void USBViewer::load() +{ + _items.clear(); + _devices->clear(); + + refresh(); +} + +static Q_UINT32 key( USBDevice &dev ) +{ + return dev.bus()*256 + dev.device(); +} + +static Q_UINT32 key_parent( USBDevice &dev ) +{ + return dev.bus()*256 + dev.parent(); +} + +static void delete_recursive( QListViewItem *item, const QIntDict &new_items ) +{ + if (!item) + return; + + QListViewItemIterator it( item ); + while ( it.current() ) { + if (!new_items.find(it.current()->text(1).toUInt())) { + delete_recursive( it.current()->firstChild(), new_items); + delete it.current(); + } + ++it; + } +} + +void USBViewer::refresh() +{ + QIntDict new_items; + + if (!USBDevice::parse("/proc/bus/usb/devices")) + USBDevice::parseSys("/sys/bus/usb/devices"); + + int level = 0; + bool found = true; + + while (found) + { + found = false; + + QPtrListIterator it(USBDevice::devices()); + for ( ; it.current(); ++it) + if (it.current()->level() == level) + { + Q_UINT32 k = key(*it.current()); + if (level == 0) + { + QListViewItem *item = _items.find(k); + if (!item) { + item = new QListViewItem(_devices, + it.current()->product(), + QString::number(k)); + } + new_items.insert(k, item); + found = true; + } + else + { + QListViewItem *parent = new_items.find(key_parent(*it.current())); + if (parent) + { + QListViewItem *item = _items.find(k); + + if (!item) { + item = new QListViewItem(parent, + it.current()->product(), + QString::number(k) ); + } + new_items.insert(k, item); + parent->setOpen(true); + found = true; + } + } + } + + ++level; + } + + // recursive delete all items not in new_items + delete_recursive( _devices->firstChild(), new_items ); + + _items = new_items; + + if (!_devices->selectedItem()) + selectionChanged(_devices->firstChild()); +} + + +void USBViewer::selectionChanged(QListViewItem *item) +{ + if (item) + { + Q_UINT32 busdev = item->text(1).toUInt(); + USBDevice *dev = USBDevice::find(busdev>>8, busdev&255); + if (dev) + { + _details->setText(dev->dump()); + return; + } + } + _details->clear(); +} + + diff --git a/kcontrol/usbview/kcmusb.desktop b/kcontrol/usbview/kcmusb.desktop new file mode 100644 index 000000000..0ae4500f2 --- /dev/null +++ b/kcontrol/usbview/kcmusb.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Icon=usb +Type=Application +DocPath=kinfocenter/usb/index.html +Exec=kcmshell kcmusb + +X-KDE-Library=usb +X-KDE-ParentApp=kinfocenter + +Name=USB Devices +Name[af]=USB Toestelle +Name[ar]=أجهزة USB +Name[az]=USB Avadanlıqlar +Name[be]=Прылады USB +Name[bg]=USB +Name[bn]=ইউ-এস-বি ডিভাইস +Name[br]=Trobarzhelloù USB +Name[bs]=USB uređaji +Name[ca]=Dispositius USB +Name[cs]=USB zařízení +Name[csb]=Ùrządzenia USB +Name[cy]=Dyfeisiau USB +Name[da]=USB-enheder +Name[de]=USB-Geräte +Name[el]=Συσκευές USB +Name[eo]=USB-aparatoj +Name[es]=Dispositivos USB +Name[et]=USB seadmed +Name[eu]=USB gailuak +Name[fa]=دستگاههای گذرگاه سریال جهانی +Name[fi]=USB-laitteet +Name[fr]=Périphériques USB +Name[fy]=USB-apparaten +Name[ga]=Gléasanna USB +Name[gl]=Dispositivos USB +Name[he]=התקני USB +Name[hi]=यूएसबी औज़ार +Name[hr]=USB uređaji +Name[hu]=USB-eszközök +Name[is]=USB Tæki +Name[it]=Dispositivi USB +Name[ja]=USB デバイス +Name[ka]=USB მოწყობილობები +Name[kk]=USB құрылғылар +Name[km]=ឧបករណ៍ USB +Name[ko]=USB 장치 +Name[lo]=ອຸປະກອນ USB +Name[lt]=USB įrenginiai +Name[lv]=USB Iekārtas +Name[mk]=USB-уреди +Name[mn]=USB-Төхөөрөмж +Name[ms]=Peranti USB +Name[mt]=Apparat USB +Name[nb]=USB-enheter +Name[nds]=USB-Reedschappen +Name[ne]=USB यन्त्र +Name[nl]=USB-apparaten +Name[nn]=USB-einingar +Name[nso]=Maano a USB +Name[pa]=USB ਜੰਤਰ +Name[pl]=Urządzenia USB +Name[pt]=Dispositivos USB +Name[pt_BR]=Dispositivos USB +Name[ro]=Dispozitive USB +Name[ru]=Устройства USB +Name[rw]=Apareye USB +Name[se]=USB-ovttadagat +Name[sk]=Zariadenia USB +Name[sl]=Naprave USB +Name[sr]=USB уређаји +Name[sr@Latn]=USB uređaji +Name[ss]=Tisetgjentiswa te USB +Name[sv]=USB-enheter +Name[ta]=USB சாதனங்கள் +Name[te]=యూ ఎస్ బి పరికరాలు +Name[tg]=Дастгоҳҳои USB +Name[th]=อุปกรณ์ USB +Name[tr]=USB Aygıtları +Name[tt]=USB Cıhazlar +Name[uk]=Пристрої USB +Name[uz]=USB uskunalar +Name[uz@cyrillic]=USB ускуналар +Name[ven]=Maano a USB +Name[vi]=Các thiết bị USB +Name[wa]=Éndjins USB +Name[xh]=Amacebo e USB +Name[zh_CN]=USB 设备 +Name[zh_TW]=USB 裝置 +Name[zu]=Amathuluzi anenjongo e-USB + +Comment=View the USB devices attached to this computer +Comment[af]=Besigtig die Usb toestelle gekoppelde na hierdie rekenaar +Comment[ar]=أعرض أجهزة USB الموصولة في جهازك +Comment[az]=Kompüterdəki USB avadanlıqları göstər +Comment[be]=Паказвае прылады USB, далучаныя да гэтага кампутара +Comment[bg]=Информация за USB устройствата +Comment[bn]=এই কমপিউটারের সঙ্গে সংযুক্ত ইউ-এস-বি ডিভাইসগুলির তালিকা +Comment[br]=Sellout ouzh trobarzhelloù USB kevreet ouzh an urzhiataer-mañ +Comment[bs]=Pregledajte USB uređaje priključene na ovaj računar +Comment[ca]=Veure els dispositius USB connectats a aquest ordinador +Comment[cs]=Zobrazení USB zařízení připojených k tomuto počítači +Comment[csb]=Wëdowiédzô ò ùrządzeniach USB przëłączonëch do tegò kòmpùtra +Comment[cy]=Edrych ar y dyfeisiau USB sydd wedi eu cysylltu a'r cyfrifiadur +Comment[da]=Se USB-enheder forbundet til denne computer +Comment[de]=Die USB-Geräte anzeigen, die an den Rechner angeschlossen sind +Comment[el]=Προβολή των συνδεδεμένων στο σύστημα συσκευών USB +Comment[eo]=Montras la USB-aparatojn ĉe via komputilo +Comment[es]=Muestra los dispositivos USB conectados a este equipo +Comment[et]=Arvutiga ühendatud USB seadmete vaatamine +Comment[eu]=Ikusi ordenagailu honetan konektaturik dauden USB gailuak +Comment[fa]=نمای دستگاههای USB پیوست‌شده به این رایانه +Comment[fi]=Näyttää tietokoneeseen liitetyt USB-laitteet +Comment[fr]=Affiche les périphériques USB attachés à cet ordinateur +Comment[fy]=Hjir konne jo de USB-apparaten besjen die op dizze kompjûter oansluten binne +Comment[ga]=Taispeáin na gléasanna USB ceangailte leis an ríomhaire seo +Comment[gl]=Ver os dispositivos USB conectados a este computador +Comment[he]=מידע על התקני ה־USB המחוברים למחשב זה +Comment[hi]=इस कम्प्यूटर से जुड़े यूएसबी औज़ारों को देखे +Comment[hr]=Pregled USB uređaja spojenih na računalo +Comment[hu]=Az USB-eszközök jellemzői +Comment[is]=SKoða USB tækin sem eru tengd við þessa tölvu +Comment[it]=Mostra i dispositivi USB collegati a questo computer +Comment[ja]=コンピュータに接続されている USB デバイスの情報 +Comment[ka]=თქვენი კომპიუტერის USB მოწყობილობები +Comment[kk]=Компьютерга тіркелген USB құрылғылары +Comment[km]=មើល​ឧបករណ៍ USB ដែល​បាន​ភ្ជាប់​មក​កុំព្យូទ័រ​នេះ +Comment[ko]=이 컴퓨터에 연결된 USB 장치 표시 +Comment[lo]=ສະແດງອຸປະກອນ USB ທີ່ເຊື່ອມຕໍ່ກັບຄອມພິວເຕີເຄື່ອງນີ້ +Comment[lt]=Žiūrėkite, kokie USB įrengimai prijungti prie šio kompiuterio +Comment[lv]=Skatīt datoram pievienotās USB iekārtas +Comment[mk]=Видете ги USB-уредите закачени на овој компјутер +Comment[mn]=Энэ компьютерт залгагдсан USB-төхөөрөмж харуулах +Comment[ms]=Papar peranti USB yang dilekapkan pada komputer +Comment[mt]=Ara l-apparat USB imqabbad ma' dal-kompjuter +Comment[nb]=Se hvilke USB-enheter som er koblet til denne maskinen +Comment[nds]=de USB-Reedschappen ankieken, de dissen Reekner tokoppelt sünd +Comment[ne]=यो कम्प्युटरमा सङ्लग्न गरिएका USB यन्त्र देखाउनुहोस् +Comment[nl]=Hier kunt u de USB-apparaten die op deze computer zijn aangesloten bekijken +Comment[nn]=Viser USB-einingane knytte til datamaskina +Comment[nso]=Bona maano a USB ao a kgwathisitswego go computer ye +Comment[pa]=ਇਸ ਕੰਪਿਊਟਰ ਨਾਲ ਜੁੜੇ USB ਜੰਤਰ ਵੇਖੋ +Comment[pl]=Informacja o urządzeniach USB podłączonych do tego komputera +Comment[pt]=Ver os dispositivos USB ligados a este computador +Comment[pt_BR]=Ver os dispositivos USB conectados à este computador +Comment[ro]=Afișează dispozitivele USB conectate la acest calculator +Comment[ru]=Устройства USB вашего компьютера +Comment[rw]=Kugaragaza apareye USB zifashe kuri mudasobwa +Comment[se]=Čájeha USB-ovttadagaid mat leat laktašuvvan dihtoriidat +Comment[sk]=Zobrazenie zariadení USB pripojených k tomuto počítači +Comment[sl]=Prikaz naprav USB, ki so priključene na ta računalnik +Comment[sr]=Прикажи USB уређаје повезане на овај рачунар +Comment[sr@Latn]=Prikaži USB uređaje povezane na ovaj računar +Comment[sv]=Visa USB-enheter anslutna till datorn +Comment[ta]=கணினியோடு இணைக்கப்பட்ட யூ எஸ் பி சாதனங்களை பார் +Comment[tg]= Намоиши дастгоҳҳои USB мутассал ба ин система +Comment[th]=ดูอุปกรณ์ USB ที่เชื่อมต่ออยู่กับคอมพิวเตอร์เครื่องนี้ +Comment[tr]=Bu bilgisayara bağlanmış USB aygıtlarını gör +Comment[tt]=Bu sanaqqa totaşqan USB cıhazlarnı qaraw +Comment[uk]=Перегляд пристроїв USB, під'єднаних до комп'ютера +Comment[uz]=Kompyuterga ulangan USB uskunalarni koʻrish +Comment[uz@cyrillic]=Компьютерга уланган USB ускуналарни кўриш +Comment[ven]=Sedzani maano a USB o tumanywaho na khomupwutha ino +Comment[vi]=Xem các thiết bị USB nối với máy tính này +Comment[wa]=Vey les éndjins USB raloyîs a cisse copiutrece chal +Comment[xh]=Bonisela amacebo e USB afakelwe kule khompyutha +Comment[zh_CN]=查看连接到该计算机的 USB 设备 +Comment[zh_TW]=查看連接到這台電腦的 USB 裝置 +Comment[zu]=Buka amathuluzi e-USB ananyathiselwe kule khomputha + +Keywords=USB,devices,viewer,control +Keywords[ar]=USB,أجهزة,عارض,متحكم +Keywords[az]=USB,avadanlıqlar,göstərici,idarə +Keywords[be]=Прылады,Прагляд,Праглядальнік,Кіраванне,USB,devices,viewer,control +Keywords[bg]=информация, система, системна, устройства, контрол, USB, devices, viewer, control +Keywords[br]=USB,trobarzhelloù,gweller,ren +Keywords[ca]=USB,dispositius,visor,control +Keywords[cs]=USB,zařízení,prohlížeč,ovládání +Keywords[csb]=USB,ùrządzenia,przezérnik,kòntrola +Keywords[cy]=USB,dyfeisiau,gwelydd,gwyliwr,rheoli +Keywords[da]=USB,enheder,fremviser,kontrol +Keywords[de]=USB,Geräte +Keywords[el]=USB,συσκευές,προβολέας,έλεγχος +Keywords[eo]=USB,aparatoj,rigardilo,stirado +Keywords[es]=USB,dispositivos,visor,control +Keywords[et]=USB,seadmed,vaataja,juhtimine +Keywords[eu]=USB,gailuak,ikustailua,kontrola +Keywords[fa]=USB، دستگاهها، مشاهده‌گر، کنترل +Keywords[fi]=USB,laitteet,näyttää,ohjaus +Keywords[fr]=USB,périphériques,afficheur,contrôle +Keywords[fy]=USB,devices,viewer,control,werjefteprogramma +Keywords[ga]=USB,gléasanna,amharcán,rialú +Keywords[gl]=USB,dispositivos,visor,control +Keywords[he]=התקנים,מציג,בקרה,USB, devices,viewer,control +Keywords[hi]=यूएसबी,औज़ार,प्रदर्शक,नियंत्रण +Keywords[hr]=USB,devices,viewer,control,uređaji,preglednik,upravljanje +Keywords[hu]=USB,eszközök,megnézés,vezérlés +Keywords[is]=USB,tæki,skoðari,stilling +Keywords[it]=USB,dispositivi,controllo +Keywords[ja]=USB,デバイス,ビューア,コントロール +Keywords[km]=USB,ឧបករណ៍,កម្មវិធី​មើល,បញ្ជា +Keywords[lo]=ອຸປະກອນUSB,ອຸປະກອນ,ຕົວສະແດງຜົນ,ຄວບຄຸມ +Keywords[lt]=USB,devices,viewer,control, įrengimai, žiūriklis, kontrolė +Keywords[lv]=USB,iekārtas,skatītājs,vadība +Keywords[mk]=USB,devices,viewer,control,уреди,прегледник,контрола +Keywords[mn]=USB,Төхөөрөмж +Keywords[ms]=USB,peranti, pemapar, kawalan +Keywords[nb]=USB,enheter,fremviser,kontroll +Keywords[nds]=USB, Reedschappen,Kieker,Kuntrull +Keywords[ne]=USB,यन्त्र, दर्शक, नियन्त्रण +Keywords[nl]=USB,devices,viewer,control,weergaveprogramma +Keywords[nn]=USB,einingar,visar,kontroll +Keywords[nso]=USB,maano,selebeledi,taolo +Keywords[pa]=USB,ਜੰਤਰ,ਦਰਸ਼ਕ,ਕੰਟਰੋਲ +Keywords[pl]=USB,urządzenia,przeglądarka,sterowanie +Keywords[pt]=USB,dispositivos,visualizador,controlo +Keywords[pt_BR]=USB,dispositivos,visualizador,controle +Keywords[ro]=USB,dispozitive,vizualizor,control +Keywords[ru]=USB,devices,viewer,control,утсройства +Keywords[rw]=USB,apareye,mugaragaza,igenzura +Keywords[se]=USB,ovttadagat,čájeheaddji,stivren +Keywords[sk]=USB,zariadenie,prehliadač,ovládanie +Keywords[sl]=USB,naprave,pregledovalnik,nadzor +Keywords[sr]=USB,devices,viewer,control,уређаји,контрола,преглед +Keywords[sr@Latn]=USB,devices,viewer,control,uređaji,kontrola,pregled +Keywords[sv]=USB,enheter,visare,kontroll +Keywords[ta]=யூ எஸ் பி,சாதனங்கள்,பார்வையாள்,கட்டுப்பாடு +Keywords[th]=อุปกรณ์ USB,อุปกรณ์,ตัวแสดงผล,ควบคุม +Keywords[tr]=USB,aygıtlar,görüntüleyici,kontrol +Keywords[uk]=USB,пристрої,перегляд,керування +Keywords[uz]=USB,uskunalar,koʻruvchi,boshqaruv +Keywords[uz@cyrillic]=USB,ускуналар,кўрувчи,бошқарув +Keywords[ven]=USB,Maano,musedzi,langula +Keywords[vi]=USB,thiết bị,xem,điều khiển +Keywords[wa]=USB,éndjins,håyneu,contrôle,corwaitaedje +Keywords[xh]=USB,amacebo,umboniseli,ulawula +Keywords[zh_CN]=USB,devices,viewer,control,设备,查看器,控制 +Keywords[zh_TW]=USB,devices,viewer,control,裝置,檢視器,控制 +Keywords[zu]=USB,amathukuzi ananjongo,umbukisi,lawula + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/usbview/kcmusb.h b/kcontrol/usbview/kcmusb.h new file mode 100644 index 000000000..275431078 --- /dev/null +++ b/kcontrol/usbview/kcmusb.h @@ -0,0 +1,47 @@ +/*************************************************************************** + * Copyright (C) 2001 by Matthias Hoelzer-Kluepfel * + * * + * 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. * + * * + ***************************************************************************/ + + +#ifndef _KCMUSB_H +#define _KCMUSB_H + +#include + +#include + +class QListView; +class QListViewItem; +class QTextView; + + +class USBViewer : public KCModule +{ + Q_OBJECT + +public: + + USBViewer(QWidget *parent = 0L, const char *name = 0L, const QStringList &list=QStringList() ); + + void load(); + +protected slots: + + void selectionChanged(QListViewItem *item); + void refresh(); + +private: + + QIntDict _items; + QListView *_devices; + QTextView *_details; +}; + + +#endif diff --git a/kcontrol/usbview/usb.ids b/kcontrol/usbview/usb.ids new file mode 100644 index 000000000..c2d3e4da9 --- /dev/null +++ b/kcontrol/usbview/usb.ids @@ -0,0 +1,6430 @@ +# +# List of USB ID's +# +# Maintained by Stephen J. Gowdy +# If you have any new entries, send them to the maintainer. +# Send entries as patches (diff -u old new). +# The latest version can be obtained from +# http://www.linux-usb.org/usb.ids +# +# $Id$ +# + +# Vendors, devices and interfaces. Please keep sorted. + +# Syntax: +# vendor vendor_name +# device device_name <-- single tab +# interface interface_name <-- two tabs + +0001 Fry's Electronics +0002 Ingram +0003 Club Mac +0004 Nebraska Furniture Mart +0204 Chipsbank Microelectronics Co., Ltd + 6025 CBM2080 Flash drive controller + 6026 CBM1180 Flash drive controller +0386 LTS + 0001 PSX for USB Converter +03e8 EndPoints, Inc. + 0004 SE401 WebCam + 0008 101 Ethernet [klsi] + 2123 SiPix StyleCam Deluxe +03e9 Thesys Microelectronics +03ea Data Broadcasting Corp. +03eb Atmel Corp. + 2002 Mass Storage Device + 2015 at90usbkey sample firmware (HID keyboard) + 2018 at90usbkey sample firmware (CDC ACM) + 2019 stk525 sample firmware (microphone) + 201c at90usbkey sample firmware (HID mouse) + 201d at90usbkey sample firmware (HID generic) + 2022 at90usbkey sample firmware (composite device) + 2103 JTAG ICE mkII + 2104 AVR ISP mkII + 2107 AVR Dragon + 2ffb at90usb AVR DFU bootloader + 2ffd at89c5130/c5131 DFU bootloader + 2fff at89c5132/c51snd1c DFU bootloader + 3301 at43301 4-port Hub + 3312 4-port Hub + 5601 at76c510 Prism-II 802.11b Access Point + 5603 Cisco 7920 WiFi IP Phone + 6124 at91sam SAMBA bootloader + 7603 at76c503a D-Link DWL-120 802.11b Adapter + 7605 at76c503a 802.11b Adapter + 7606 at76c505 802.11b Adapter + 7611 at76c510 rfmd2948 802.11b Access Point +03ec Iwatsu America, Inc. +03ed Mitel Corp. +03ee Mitsumi + 0000 CD-R/RW Drive + 641f WIF-0402C Bluetooth Adapter + 6440 WML-C52APR Bluetooth Adapter + 6901 SmartDisk FDD +03f0 Hewlett-Packard + 0004 DeskJet 895c + 0101 ScanJet 4100c + 0102 PhotoSmart S20 + 0104 DeskJet 880c/970c + 0105 ScanJet 4200c + 0107 CD-Writer Plus + 010c Multimedia Keyboard Hub + 0111 G55xi Printer/Scanner/Copier + 011c hn210w 802.11b Adapter + 0121 HP49g+ Calculator + 0201 ScanJet 6200c + 0202 PhotoSmart S20 + 0204 DeskJet 815c + 0205 ScanJet 3300c + 0207 CD-Writer Plus 8200e + 020c Multimedia Keyboard + 0304 DeskJet 810c/812c + 0305 ScanJet 4300c + 0311 OfficeJet G85xi + 0317 LaserJet 1200 + 0401 ScanJet 5200c + 0404 DeskJet 830c/832c + 0405 ScanJet 3400cse + 0417 LaserJet 1200 series + 0504 DeskJet 885c + 0505 ScanJet 2100c + 050c 5219 Wireless Keyboard + 0517 LaserJet 1000 + 0601 ScanJet 6300c + 0604 DeskJet 840c + 0605 ScanJet 2200c + 0701 ScanJet 5300c/5370c + 0704 DeskJet 825c + 0705 ScanJet 4400c + 0712 DeskJet 1180c + 0801 ScanJet 7400c + 0804 DeskJet 816c + 0901 ScanJet 2300c + 0904 DeskJet 845c + 1004 DeskJet 970c/970cse + 1005 ScanJet 5400c + 1016 Jornada 548 / iPAQ HW6515 Pocket PC + 1104 DeskJet 959c + 1105 ScanJet 5470c + 1116 Jornada 568 Pocket PC + 1151 750xi Printer/Scanner/Copier + 1204 DeskJet 930c + 1305 ScanJet 4570c + 1312 Deskjet 460 + 1317 LaserJet 1005 + 1405 Scanjet 3670 + 1424 f2105 Monitor Hub + 1504 DeskJet 920c + 1604 DeskJet 940c + 1617 LaserJet 3015 + 1904 DeskJet 3820 + 1c17 Color LaserJet 2550l + 1e11 PSC-950 + 2002 Hub + 2004 DeskJet 640c + 2005 ScanJet 3570c + 2104 DeskJet 630c + 2205 ScanJet 3500c + 2304 DeskJet 656c + 2305 ScanJet 3970c + 2811 PSC-2100 + 2d11 OfficeJet 6110 + 3102 PhotoSmart P1100 Printer w/ Card Reader + 3104 DeskJet 960c + 3304 DeskJet 990c + 3404 DeskJet 6122 + 3504 DeskJet 6127c + 3817 LaserJet P2015 Series + 3c02 PhotoSmart 7350 + 3d11 OfficeJet 4215 + 3f11 PSC-1315/PSC-1317 + 4002 PhotoSmart 720 / PhotoSmart 935 (storage) + 4102 PhotoSmart 618 + 4202 PhotoSmart 812 + 4302 PhotoSmart 850 (ptp) + 4402 PhotoSmart 935 (ptp) + 4502 PhotoSmart 945 (PTP mode) + 5004 DeskJet 995c + 6004 DeskJet 5550 + 6104 DeskJet 5650c + 6202 PhotoSmart 215 + 6204 DeskJet 5150c + 6302 PhotoSmart 318/612 + 6402 PhotoSmart 715 (ptp) + 6502 PhotoSmart 120 (ptp) + 6602 PhotoSmart 320 + 6702 PhotoSmart 720 (ptp) + 6802 PhotoSmart 620 (ptp) + 6a02 PhotoSmart 735 (ptp) + 6b02 PhotoSmart R707 (PTP mode) + 7004 DeskJet 3320c + 7102 PhotoSmart 635 (PTP mode) + 7104 DeskJet 3420c + 7202 PhotoSmart 43x (ptp) + 7204 DeskJet 36xx + 7302 PhotoSmart M307 (PTP mode) + 7304 DeskJet 35xx + 7702 PhotoSmart R817 (PTP mode) + 7a02 PhotoSmart M415 (PTP mode) + 7b02 PhotoSmart M23 (PTP mode) + 8604 Deskjet 5440 + a004 DeskJet 5850c + bef4 NEC Picty760 + efbe NEC Picty900 + f0be NEC Picty920 + f1be NEC Picty800 +03f1 Genoa Technology +03f2 Oak Technology, Inc. +03f3 Adaptec, Inc. +03f4 Diebold, Inc. +03f5 Siemens Electromechanical +03f8 Epson Imaging Technology Center +03f9 KeyTronic Corp. +03fb OPTi, Inc. +03fc Elitegroup Computer Systems +03fd Xilinx, Inc. +03fe Farallon Comunications +0400 National Semiconductor Corp. + 0807 Bluetooth Dongle + 1000 Mustek BearPaw 1200 Scanner + 1001 Mustek BearPaw 2400 Scanner +0401 National Registry, Inc. +0402 ALi Corp. + 5462 M5462 IDE Controller + 5602 Video Camera Controller + 5603 USB 2.0 Q-tec Webcam 300 + 5621 USB 2.0 Storage Device + 5632 USB 2.0 Host-to-Host Link + 5635 USB 2.0 Flash Card Reader + 5636 USB 2.0 Storage Device + 5637 M5637 IDE Controller +0403 Future Technology Devices International, Ltd + 0000 H4SMK 7 Port Hub + 6001 8-bit FIFO + 8040 4 Port Hub + 8070 7 Port Hub + 8370 7 Port Hub + 8371 PS/2 Keyboard And Mouse + 8372 FT8U100AX Serial Port + c630 lcd2usb interface + c7d0 RR-CirKits LocoBuffer-USB + ea90 Eclo 1-Wire Adapter + f208 Papenmeier Braille-Display + fc82 SEMC DSS-20 SyncStation + fd48 ShipModul MiniPlex-4xUSB NMEA Multiplexer + ff08 ToolHouse LoopBack Adapter +0404 NCR Corp. + 0310 K590 Printer, Self-Service + 0311 7167 Printer, Receipt/Slip + 0312 7197 Printer Receipt + 0320 5932-USB Keyboard + 0321 5953-USB Dynakey + 0322 5932-USB Enhanced Keyboard + 0323 5932-USB Enhanced Keyboard, Flash-Recovery/Download + 0324 5953-USB Enhanced Dynakey + 0325 5953-USB Enhanced Dynakey Flash-Recovery/Download + 0328 K016: USB-MSR ISO 3-track MSR: POS Standard (See HID pages) + 0329 K018: USB-MSR JIS 2-Track MSR: POS Standard + 032a K016: USB-MSR ISO 3-Track MSR: HID Keyboard Mode + 032b K016/K018: USB-MSR Flash-Recovery/Download +0405 Synopsys, Inc. +0406 Fujitsu-ICL Computers +0407 Fujitsu Personal Systems, Inc. +0408 Quanta Computer, Inc. +0409 NEC Corp. + 0012 ATerm IT75DSU ISDN TA + 0014 Japanese Keyboard + 0027 MultiSync Monitor + 0058 HighSpeed Hub + 0059 HighSpeed Hub + 006a Conceptronic USB Harddisk Box + 011d e228 Mobile Phone + 55aa Hub + 55ab Hub [iMac/iTouch kbd] + efbe P!cty 900 [HP DJ] + f0be P!cty 920 [HP DJ 812c] +040a Kodak Co. + 0001 DVC-323 + 0002 DVC-325 + 0100 DC-220 + 0110 DC-260 + 0111 DC-265 + 0112 DC-290 + 0120 DC-240 + 0121 DC-240 (PTP firmware) + 0130 DC-280 + 0131 DC-5000 + 0132 DC-3400 + 0140 DC-4800 + 0160 DC4800 + 0170 DX3900 + 0300 EZ-200 + 0400 MC3 + 0403 Z7590 + 0500 DX3500 + 0510 DX3600 + 0525 DX3215 + 0530 DX3700 + 0535 EasyShare CX4230 Camera + 0540 LS420 + 0550 DX4900 + 0555 DX4330 + 0560 CX4200 + 0565 CX4210 + 0566 CX4300 + 0567 LS753 + 0568 LS443 + 0569 LS663 + 0570 DX6340 + 0571 CX6330 + 0572 DX6440 + 0573 CX6230 + 0574 CX6200 + 0575 DX6490 + 0576 DX4530 + 0577 DX7630 + 0578 CX7300/CX7310 + 0579 CX7220 + 057a CX7330 + 057b CX7430 + 057c CX7530 + 057d DX7440 + 057e C300 + 057f DX7590 + 0580 Z730 + 0584 CX6445 + 0586 CX7525 + 0589 EasyShare C360 + 058a C310 + 058c C330 + 058d C340 + 058e V530 + 058f V550 + 5010 Wireless Adapter +040b Weltrend Semiconductor + 6510 Weltrend Bar Code Reader + 6520 XBOX Xploder +040c VTech Computers, Ltd +040d VIA Technologies, Inc. + 6205 USB 2.0 Card Reader +040e MCCI +040f Echo Speech Corp. +0411 MelCo., Inc. + 0001 LUA-TX Ethernet [pegasus] + 0016 WLI-USB-S11 802.11b Adapter + 0027 WLI-USB-KS11G 802.11b Adapter +0412 Award Software International +0413 Leadtek Research, Inc. + 6025 WinFast DTV Dongle (cold state) + 6026 WinFast DTV Dongle (warm state) + 6f00 WinFast DTV Dongle (STK7700P based) +0414 Giga-Byte Technology Co., Ltd +0416 Winbond Electronics Corp. + 0961 AVL Flash Card Reader + 5518 4-Port Hub + 551a PC Sync Keypad + 551b PC Async Keypad + 551c Sync Tenkey + 551d Async Tenkey + 551e Keyboard + 551f Keyboard w/ Sys and Media + 5521 Keyboard + 7723 SD Card Reader + 6481 16-bit Scanner +0417 Symbios Logic +0418 AST Research +0419 Samsung Info. Systems America, Inc. + 0001 IrDA Remote Controller + 3001 Xerox P1202 Laser Printer + 8002 SyncMaster 757DFX HID Device +041a Phoenix Technologies, Ltd +041b d'TV +041d S3, Inc. +041e Creative Technology, Ltd + 1002 Nomad II + 1003 Blaster GamePad Cobra + 1050 GamePad Cobra + 3010 SoundBlaster MP3+ + 3020 SoundBlaster Audigy 2 NX + 4003 VideoBlaster WebCam Go Plus [W9967CF] + 4004 Nomad II MG + 4005 WebCam Blaster Go ES + 4007 Go Mini + 400a PC-Cam 300 + 400b PC-Cam 600 + 400c WebCam 5 [pwc] + 400d WebCam PD1001 + 4011 WebCam PRO eX + 4012 PC-CAM350 + 4013 PC-Cam 750 + 4015 CardCam Value + 4016 CardCam + 4017 WebCam Mobile + 4018 WebCam Vista + 401c WebCam NX [PD1110] + 401d WebCam NX Ultra + 401e WebCam NX Pro + 401f Webcam Notebook + 4028 Vista Plus cam [VF0090] + 4036 Webcam Live!/Live! Pro + 403a WebCam NX Pro 2 + 403c WebCam Live! Ultra + 403d WebCam Notebook Ultra + 4100 Nomad Jukebox 2 + 4101 Nomad Jukebox 3 + 4106 Nomad MuVo + 4108 Nomad Jukebox Zen + 4109 Nomad Jukebox Zen NX + 410b Nomad Jukebox Zen USB 2.0 + 410c Nomad MuVo NX + 4110 Nomad Jukebox Zen Xtra + 4111 Dell Digital Jukebox + 4116 MuVo^2 + 4117 Nomad MuVo TX + 411b Zen Touch + 411d Zen + 411e Zen Micro + 4123 Zen Portable Media Center + 4126 Dell DJ (2nd gen) + 4127 Dell DJ + 412b MuVo N200 with FM radio + 4130 Zen Micro (mtp) + 4131 Zen Touch (mtp) + 4134 Zen Neeon + 4136 Zen Sleek + 4137 Zen Sleek (mtp) + 4139 Zen Nano Plus + 413c Zen MicroPhoto +041f LCS Telegraphics +0420 Chips and Technologies +0421 Nokia Mobile Phones + 0401 6650 GSM Phone + 0405 9500 GSM Communicator + 040b N-Gage GSM Phone + 040f 6230 GSM Phone + 0410 6630 Imaging Smartphone + 0415 9300 GSM Smartphone + 0418 E-70 (PC-Suite mode) + 041a 9500 GSM Communicator (RNDIS) + 041b 9300 GSM Smartphone (RNDIS) + 041e Nokia 6680 + 0429 6230i Camera Phone + 0431 770 Internet Tablet + 0435 E-70 (IP Passthrough/RNDIS mode) + 043a Nokia N70 USB Phone Parent + 0800 Connectivity Cable DKU-5 +0422 ADI Systems, Inc. +0423 Computer Access Technology Corp. + 000a NetMate Ethernet + 000c NetMate2 Ethernet + 000d USB Chief Analyzer + 1237 Andromeda Hub +0424 Standard Microsystems Corp. + 20fc 6-in-1 Card Reader + 223a 8-in-1 Card Reader + 2524 USB MultiSwitch Hub +0425 Motorola Semiconductors HK, Ltd + 0101 G-Tech Wireless Mouse & Keyboard +0426 Integrated Device Technology, Inc. +0427 Motorola Electronics Taiwan, Ltd +0428 Advanced Gravis Computer Tech, Ltd + 4001 GamePad Pro +0429 Cirrus Logic +042a Ericsson Austrian, AG +042b Intel Corp. +042c Innovative Semiconductors, Inc. +042d Micronics +042e Acer, Inc. +042f Molex, Inc. +0430 Sun Microsystems, Inc. + 0005 Type 6 Keyboard + 0100 3-button Mouse +0431 Itac Systems, Inc. + 0100 Mouse-Trak 3-button Track Ball +0432 Unisys Corp. +0433 Alps Electric, Inc. + 1101 IBM Game Controller +0434 Samsung Info. Systems America, Inc. +0435 Hyundai Electronics America +0436 Taugagreining HF +0437 Framatome Connectors USA +0438 Advanced Micro Devices, Inc. +0439 Voice Technologies Group +043d Lexmark International, Inc. + 0002 Optra E310 Printer + 0009 Optra S2450 Printer + 000c Optra E312 Printer + 0017 Z32 printer + 0018 Z52 Printer + 001a Z65 Printer + 001c Kodak Personal Picture Maker 200 Printer + 001f Kodak Personal Picture Maker 200 Card Reader + 0020 Z51 Printer + 0021 Z33 Printer + 002d X70/X73 Scan/Print/Copy + 003d X83 Scan/Print/Copy + 0057 Z35 Printer + 0060 X74/X75 Scanner + 0061 X74 Hub + 0069 X74/X75 Printer + 0072 X6170 Printer + 0095 E220 Printer +043e LG Electronics USA, Inc. + 42bd Flatron 795FT Plus Monitor + 4a4d Flatron 915FT Plus Monitor + 7001 MF-PD100 Soul Digital MP3 Player + 8484 LPC-U30 Webcam II + 8585 LPC-UC35 Webcam +043f RadiSys Corp. +0440 Eizo Nanao Corp. +0441 Winbond Systems Lab. + 1456 Hub +0442 Ericsson, Inc. +0443 Gateway, Inc. +0445 Lucent Technologies, Inc. +0446 NMB Technologies Corp. +0447 Momentum Microsystems +044a Shamrock Tech. Co., Ltd +044b WSI +044c CCL/ITRI +044d Siemens Nixdorf AG +044e Alps Electric Co., Ltd + 2002 MD-5500 Printer + 3001 UGTZ4 Bluetooth +044f ThrustMaster, Inc. + 0400 HOTAS Cougar + a0a3 Fusion Digital GamePad + b203 360 Modena Pro Wheel + b300 Firestorm Dual Power + b304 Firestorm Dual Power +0450 DFI, Inc. +0451 Texas Instruments, Inc. + 1428 Hub + 1446 TUSB2040/2070 Hub + 2036 TUSB2036 Hub + 2046 TUSB2046 Hub + 2077 TUSB2077 Hub + 3410 TUSB3410 Microcontroller + 5409 Frontier Labs NEX IA+ Digital Audio Player + 6000 AU5 ADSL Modem (pre-reenum) + 6001 AU5 ADSL Modem + 625f Trekstor USB-Stick 12 CS-D 12 GB + e001 GraphLink + e004 TI-89 Titanium Calculator + e008 TI-84 Plus Silver Calculator + f430 MSP-FET430UIF JTAG Tool +0452 Mitsubishi Electronics America, Inc. + 0050 Diamond Pro 900u CRT Monitor + 0051 Integrated Hub +0453 CMD Technology +0454 Vobis Microcomputer AG +0455 Telematics International, Inc. +0456 Analog Devices, Inc. +0457 Silicon Integrated Systems Corp. + 0150 Super Talent 1GB Flash Drive + 0151 Super Flash 1GB Flash Drive +0458 KYE Systems Corp. (Mouse Systems) + 0001 Mouse + 0002 Genius NetMouse Pro + 0003 Genius NetScroll+ + 000e VideoCAM Web + 001a Genius WebScroll+ + 004c Slimstar Pro Keyboard + 0100 EasyPen Tablet + 0101 CueCat + 1003 Genius VideoCam + 1004 Flight2000 F-23 Joystick + 100a Aashima Technology Trust Sight Fighter Vibration Feedback Joystick + 2001 ColorPage-Vivid Pro Scanner + 2007 ColorPage-HR6 V2 Scanner + 2008 ColorPage-HR6 V2 Scanner + 2009 ColorPage-HR6A Scanner + 2011 ColorPage-Vivid3x Scanner + 2013 ColorPage-HR7 Scanner + 2015 ColorPage-HR7LE Scanner + 2016 ColorPage-HR6X Scanner + 301d Genius MaxFire MiniPad + 7004 VideoCAM Express + 7007 VideoCAM Web + 7012 WebCAM USB2.0 +0459 Adobe Systems, Inc. +045a SONICblue, Inc. + 0b4a SupraMax 2890 56K Modem [Lucent Atlas] + 0b68 SupraMax 56K Modem + 5210 Rio Karma Music Player + 5220 Rio Nitrus MP3 Player +045b Hitachi, Ltd +045d Nortel Networks, Ltd +045e Microsoft Corp. + 0007 SideWinder Game Pad + 0008 SideWinder Precision Pro + 0009 IntelliMouse + 000b Natural Keyboard Elite + 0014 Digital Sound System 80 + 001a SideWinder Precision Racing Wheel + 001b SideWinder Force Feedback 2 Joystick + 001d Natural Keyboard Pro + 001e IntelliMouse Explorer + 0023 Trackball Optical + 0024 Trackball Explorer + 0025 IntelliEye Mouse + 0026 SideWinder GamePad Pro + 0027 SideWinder PnP GamePad + 0028 SideWinder Dual Strike + 0029 IntelliMouse Optical + 002b Internet Keyboard Pro + 0033 Sidewinder Strategic Commander + 0034 SideWinder Force Feedback Wheel + 0038 SideWinder Precision 2 + 0039 IntelliMouse Optical + 003b SideWinder Game Voice + 003c SideWinder Joystick + 0040 Wheel Mouse Optical + 0047 IntelliMouse Explorer 3.0 + 0059 Wireless IntelliMouse Explorer + 006e MN510 802.11b Adapter + 007d Notebook Optical Mouse + 007e Wireless Transceiver for Bluetooth + 0080 Digital Media Pro Keyboard + 0083 Basic Optical Mouse + 008a Wireless Keyboard and Mouse + 008c Wireless Intellimouse Explorer 2.0 + 00b9 Wireless Optical Mouse 3.0 + 00bd Fingerprint Reader + 00ce Generic PPC Flash device + 00db Natural Ergonomic Keyboard 4000 V1.0 + 00e1 Wireless Laser Mouse 6000 Reciever + 0202 Xbox Controller + 0284 Xbox DVD Playback Kit + 0285 Xbox Controller S + 0288 Xbox Controller S Hub + 0289 Xbox Controller S + 028b Xbox360 DVD Emulator + 028d Xbox360 Memory Unit 64MB + 028e Xbox360 Controller + 028f Xbox360 Wireless Controller + 0290 Xbox360 Performance Pipe (PIX) + 0292 Xbox360 Wireless Networking Adapter + 029c Xbox360 HD-DVD Drive + 029d Xbox360 HD-DVD Drive + 029e Xbox360 HD-DVD Memory Unit +0460 Ace Cad Enterprise Co., Ltd +0461 Primax Electronics, Ltd + 0300 G2-300 Scanner + 0301 G2E-300 Scanner + 0302 G2-300 #2 Scanner + 0303 G2E-300 #2 Scanner + 0340 Colorado 9600 Scanner + 0341 Colorado 600u Scanner + 0345 Visioneer 6200 Scanner + 0346 Memorex Maxx 6136u Scanner + 0347 Primascan Colorado 2600u/Visioneer 4400 Scanner + 0360 Colorado 19200 Scanner + 0361 Colorado 1200u Scanner + 0364 LG Electronics Scanworks 600U Scanner + 0371 Visioneer Onetouch 8920 Scanner + 0377 Medion MD 5345 Scanner + 037b Medion MD 6190 Scanner + 0380 G2-600 Scanner + 0381 ReadyScan 636i Scanner + 0382 G2-600 #2 Scanner + 0383 G2E-600 Scanner + 0813 IBM UltraPort Camera + 0815 Micro Innovations WebCam + 0819 Fujifilm IX-30 Camera [webcam mode] + 081a Fujifilm IX-30 Camera [storage mode] + 081c Elitegroup ECS-C11 Camera + 081d Elitegroup ECS-C11 Storage + 4d01 Comfort Keyboard + 4d02 Mouse-in-a-Box + 4d03 Kensington Mouse-in-a-box + 4d04 Mouse +0463 MGE UPS Systems + 0001 UPS + ffff UPS +0464 AMP/Tycoelectronics Corp. +0467 AT&T Paradyne +0468 Wieson Technologies Co., Ltd +046a Cherry GmbH + 0001 My3000 Keyboard + 0003 My3000 Hub + 0005 XX33 SmartCard Reader Keyboard + 0023 Cymotion Master Linux Keyboard +046b American Megatrends, Inc. +046c Toshiba Corp., Digital Media Equipment +046d Logitech, Inc. + 0203 M2452 Keyboard + 0301 M4848 Mouse + 0401 HP PageScan + 0402 NEC PageScan + 040f Logitech/Storm PageScan + 0801 QuickCam Home + 0810 QuickCam Pro + 0840 QuickCam Express + 0850 QuickCam Web + 0870 QuickCam Express + 0890 QuickCam Traveler + 08a0 QuickCam IM + 08a2 Labtec WebCam Pro + 08b0 QuickCam 3000 Pro [pwc] + 08b1 QuickCam Notebook Pro + 08b2 QuickCam Pro 4000 + 08b3 QuickCam Zoom + 08b4 QuickCam Zoom + 08b5 QuickCam Sphere + 08d9 QuickCam Connect + 08da QuickCam Messanger + 08f0 QuickCam Messenger + 0900 ClickSmart 310 + 0901 ClickSmart 510 + 0903 ClickSmart 820 + 0905 ClickSmart 820 + 0920 QuickCam Express + 0921 Labtec WebCam + 0928 Quickcam Express + 092a QuickCam for Notebooks + 092f QuickCam express Plus + 0950 Pocket Camera + 0960 ClickSmart 420 + 0970 Pocket750 + 0a01 Logitech USB Headset + 0b02 BT Mini-Receiver (HID proxy mode) + bfe4 Premium Optical Wheel Mouse + c000 N43 [Pilot Mouse] + c001 N48/M-BB48 [FirstMouse Plus] + c002 M-BA47 [MouseMan Plus] + c004 WingMan Gaming Mouse + c00b MouseMan Wheel + c00c Optical Wheel Mouse + c00e M-BJ69 Optical Wheel Mouse + c012 Optical Mouse + c016 M-UV69a Optical Wheel Mouse + c01b MX310 Optical Mouse + c01d MX510 Optical Mouse + c01e MX518 Optical Mouse + c025 MX500 Optical Mouse + c030 iFeel Mouse + c032 MouseMan iFeel + c03e Premium Optical Wheel Mouse + c202 WingMan Formula + c207 WingMan Extreme Digital 3D + c208 WingMan Gamepad Extreme + c209 WingMan Gamepad + c20a WingMan RumblePad + c20c WingMan Precision + c20d WingMan Attack 2 + c211 iTouch Cordless Reciever + c216 Dual Action Gamepad + c218 Logitech RumblePad 2 USB + c281 WingMan Force + c283 WingMan Force 3D + c285 WingMan Strike Force 3D + c291 WingMan Formula Force + c293 WingMan Formula Force GP + c295 Momo Force Steering Wheel + c2a0 Wingman Force Feedback Mouse + c303 iTouch Keyboard + c308 Internet Navigator Keyboard + c309 Internet Keyboard + c401 TrackMan Marble Wheel + c402 Marble Mouse (2-button) + c404 TrackMan Wheel + c408 Marble Mouse (4-button) + c501 Cordless Mouse Receiver + c503 Cordless Mouse+Keyboard Receiver + c504 Cordless Mouse+Keyboard Receiver + c505 Cordless Mouse+Keyboard Receiver + c506 MX-700 Cordless Mouse Receiver + c50b Cordless Desktop Optical + c50e MX-1000 Cordless Mouse Receiver + c517 LX710 Cordless Desktop Laser + c518 MX610 Laser Cordless Mouse + c709 BT Mini-Receiver (HCI mode) + c70b BT Mini-Receiver (HID proxy mode) + c70c BT Mini-Receiver (HID proxy mode) + ca04 Formula Vibration Feedback Wheel + d001 QuickCam Pro +046e Behavior Tech. Computer Corp. + 6782 BTC 7932 mouse+keyboard +046f Crystal Semiconductor +0471 Philips + 0101 DSS350 Digital Speaker System + 0104 DSS330 Digital Speaker System [uda1321] + 0201 Hub + 0222 Creative Nomad Jukebox + 0302 PCA645VC WebCam [pwc] + 0303 PCA646VC WebCam [pwc] + 0304 Askey VC010 WebCam [pwc] + 0307 PCVC675K WebCam [pwc] + 0308 PCVC680K WebCam [pwc] + 030c PCVC690K WebCam [pwc] + 0310 PCVC730K WebCam [pwc] + 0311 PCVC740K ToUcam Pro [pwc] + 0312 PCVC750K WebCam [pwc] + 0327 WEBc am SPC 6000 NC (WebCam w/ mic) + 0471 Digital Speaker System + 0601 OVU1020 IR Dongle (Kbd+Mouse) + 0701 150P1 TFT Display + 0811 JR24 CDRW + 1120 Creative Rhomba MP3 player + 1801 Diva MP3 player +0472 Chicony Electronics Co., Ltd + 0065 PFU-65 Keyboard +0473 Sanyo Information Business Co., Ltd +0474 Sanyo Electric Co., Ltd + 0110 Digital Voice Recorder R200 + 0217 Xacti J2 + 022f C5 Digital Media Camera (mass storage mode) + 0230 C5 Digital Media Camera (PictBridge mode) + 0231 C5 Digital Media Camera (PC control mode) + 0701 SCP-4900 Cellphone +0475 Relisys/Teco Information System +0476 AESP +0477 Seagate Technology, Inc. +0478 Connectix Corp. + 0001 QuickCam + 0002 QuickClip +0479 Advanced Peripheral Laboratories +047a Semtech Corp. +047b Silitek Corp. + 0002 Keyboard and Mouse + 0101 BlueTooth Keyboard and Mouse + 020b SK-3105 SmartCard Reader + 1002 HP ScanJet 4300c Parallel Port +047c Dell Computer Corp. +047d Kensington + 1003 Orbit TrackBall + 1005 TurboBall + 1009 Orbit TrackBall for Mac + 101f PocketMouse Pro + 2010 Wireless Presentation Remote + 4005 Gravis Eliminator GamePad Pro + 4006 Gravis Eliminator AfterShock + 4008 Gravis Destroyer TiltPad + 5002 VideoCam CABO II + 5003 VideoCam +047e Agere Systems, Inc. (Lucent) + 1001 USS720 Parallel Port + f101 Atlas Modem +047f Plantronics, Inc. +0480 Toshiba America Info. Systems, Inc. +0481 Zenith Data Systems +0482 Kyocera Corp. + 000e FS-1020D Printer + 0103 Finecam S5 +0483 SGS Thomson Microelectronics + 1307 Cytronix 6in1 card reader + 163d Cool Icam Digi-MP3 + 2016 Fingerprint Reader + 2017 Biometric Smart Card Reader + 7554 56k SoftModem +0484 Specialix +0485 Nokia Monitors +0486 ASUS Computers, Inc. +0487 Stewart Connector +0488 Cirque Corp. +0489 Foxconn / Hon Hai + 0502 SmartMedia Card Reader Firmware Loader + 0503 SmartMedia Card Reader +048a S-MOS Systems, Inc. +048c Alps Electric Ireland, Ltd +048d Integrated Technology Express, Inc. +048f Eicon Tech. +0490 United Microelectronics Corp. +0491 Capetronic +0492 Samsung SemiConductor, Inc. +0493 MAG Technology Co., Ltd +0495 ESS Technology, Inc. +0496 Micron Electronics +0497 Smile International +0498 Capetronic (Kaohsiung) Corp. +0499 Yamaha Corp. + 6001 CRW2200UX Lightspeed 2 External CD-RW Drive +049a Gandalf Technologies, Ltd +049b Curtis Computer Products +049c Acer Advanced Labs, Inc. + 0002 Keyboard (???) +049d VLSI Technology +049f Compaq Computer Corp. + 0003 iPAQ PocketPC + 000e Internet Keyboard + 0018 PA-1/PA-2 MP3 Player + 001a S4 100 Scanner + 0021 S200 Scanner + 0032 802.11b Adapter [ipaq h5400] + 0033 802.11b Adapter [orinoco] + 0051 KU-0133 Easy Access Interner Keyboard + 505a Linux-USB "CDC Subset" Device, or Itsy (experimental) + 8511 iPAQ Networking 10/100 Ethernet [pegasus2] +04a0 Digital Equipment Corp. +04a1 SystemSoft Corp. +04a2 FirePower Systems +04a3 Trident Microsystems, Inc. +04a4 Hitachi, Ltd +04a5 Acer Peripherals Inc. (now BenQ Corp.) + 0001 Keyboard + 12a6 AcerScan C310U + 1a20 Prisa 310U + 1a2a Prisa 620U + 2022 Prisa 320U/340U + 2040 Prisa 620UT + 2060 Prisa 620U+/640U + 207e Prisa 640BU + 20b0 S2W 3300U/4300U + 20be Prisa 640BT + 20c0 Prisa 1240UT + 20de S2W 4300U+ + 20fc Benq 5000 + 20fe SW2 5300U + 3003 Benq WebCam + 3008 Benq 1500 + 300a Benq 3410 + 300c Benq 1016 + 3019 Benq DC C40 + 9213 Kbd Hub +04a6 Nokia Display Products +04a7 Visioneer + 0211 OneTouch 7600 Scanner + 0221 OneTouch 5300 Scanner + 0224 OneTouch 4800 USB/Microtek Scanport 3000 + 0226 OneTouch 5300 USB + 0231 6100 Scanner + 0311 6200 EPP/USB Scanner + 0321 OneTouch 8100 EPP/USB Scanner + 0331 OneTouch 8600 EPP/USB Scanner +04a8 Multivideo Labs, Inc. +04a9 Canon, Inc. + 1051 BJC-3000 Color Printer + 1056 BJC-2110 Color Printer + 105b S600 Printer + 105d S450 Printer + 1062 S500 Printer + 1064 S300 Printer + 106a S200 Printer + 106b S520 Printer + 106d S750 Printer + 1072 I850 Printer + 1073 I550 Printer + 1074 S330 Printer + 1090 i9900 Photo Printer + 1094 PIXMA iP3000x Printer + 10b6 PIXMA iP4300 Printer + 2201 CanoScan FB320U + 2202 CanoScan FB620U + 2204 CanoScan FB630U + 2205 CanoScan FB1210U + 2206 CanoScan N650U/N656U + 2207 CanoScan 1220U + 2208 CanoScan D660U + 220a CanoScan D2400UF + 220b CanoScan D646U + 220c CanoScan D1250U2 + 220d CanoScan N670U/N676U/LiDE 20 + 220e CanoScan N1240U/LiDE 30 + 220f CanoScan 8000F + 2210 CanoScan 9900F + 2212 CanoScan 5000F + 2213 LiDE 50/LiDE 35 + 2215 CanoScan 3000/3000F/3000ex + 2216 CanoScan 3200F + 2217 CanoScan 5200F + 221e CanoScan 8400F + 2225 CanoScan LiDE 70 + 2611 SmartBase MPC400 + 262b LaserShot LBP-1120 Printer + 3041 PowerShot S10 + 3042 CanoScan FS4000US Film Scanner + 3043 PowerShot S20 + 3044 EOS D30 + 3045 PowerShot S100 + 3046 IXY Digital + 3047 Digital IXUS + 3048 PowerShot G1 + 3049 PowerShot Pro90 IS + 304b IXY Digital 300 + 304c PowerShot S300 + 304d Digital IXUS 300 + 304e PowerShot A20 + 304f PowerShot A10 + 3050 PowerShot unknown 1 + 3051 PowerShot S110 + 3052 Digital IXUS V + 3055 PowerShot G2 + 3056 PowerShot S40 + 3057 PowerShot S30 + 3058 PowerShot A40 + 3059 PowerShot A30 + 305b ZR45MC Digital Camcorder + 305c PowerShot unknown 2 + 3060 EOS D60 + 3061 PowerShot A100 + 3062 PowerShot A200 + 3065 PowerShot S200 + 3066 Digital IXUS 330 + 3067 MV550i Digital Video Camera + 3069 PowerShot G3 + 306a Digital unknown 3 + 306b MVX2i Digital Video Camera + 306c PowerShot S45 + 306d PowerShot S45 PtP Mode + 306e PowerShot G3 (normal mode) + 306f PowerShot G3 (ptp) + 3070 PowerShot S230 + 3071 PowerShot S230 (ptp) + 3072 PowerShot SD100 / Digital IXUS 2 (ptp) + 3073 PowerShot A70 (ptp) + 3074 PowerShot A60 (ptp) + 3075 IXUS 400 Camera + 3076 PowerShot A300 + 3077 PowerShot S50 + 3078 ZR70MC Digital Camcorder + 307a MV650i (normal mode) + 307b MV630i Difital Video Camera + 307c MV630i (normal mode) + 307f Optura 20 + 3080 MVX150i (normal mode) / Optura 20 (normal mode) + 3081 Optura 10 + 3082 MVX100i / Optura 10 + 3083 EOS 10D + 3084 EOS 300D / EOS Digital Rebel + 3085 PowerShot G5 + 3087 Elura 50 (PTP mode) + 3088 Elura 50 (normal mode) + 308d MVX3i + 308e FV M1 (normal mode) / MVX 3i (normal mode) / Optura Xi (normal mode) + 3093 Optura 300 + 3096 IXY DV M2 (normal mode) / MVX 10i (normal mode) + 3099 EOS 300D (ptp) + 309a PowerShot A80 + 309b Digital IXUS (ptp) + 309c PowerShot S1 IS + 30a8 Elura 60E/Optura 40 (ptp) + 30a9 MVX25i (normal mode) / Optura 40 (normal mode) + 30b1 PowerShot S70 (normal mode) / PowerShot S70 (PTP mode) + 30b2 PowerShot S60 (normal mode) / PowerShot S60 (PTP mode) + 30b3 PowerShot G6 (normal mode) / PowerShot G6 (PTP mode) + 30b4 PowerShot S500 + 30b5 PowerShot A75 + 30b6 Digital IXUS II2 / Digital IXUS II2 (PTP mode) / PowerShot SD110 (PTP mode) / PowerShot SD110 Digital ELPH + 30b7 PowerShot A400 / PowerShot A400 (PTP mode) + 30b8 PowerShot A310 / PowerShot A310 (PTP mode) + 30b9 Powershot A85 + 30ba PowerShot S410 Digital Elph + 30bb PowerShot A95 + 30bf Digital IXUS 40 + 30c0 Digital IXUS 30 (PTP mode) / PowerShot SD200 (PTP mode) + 30c1 Digital IXUS 50 (normal mode) / IXY Digital 55 (normal mode) / PowerShot A520 (PTP mode) / PowerShot SD400 (normal mode) + 30c2 PowerShot A510 (normal mode) / PowerShot A510 (PTP mode) + 30c4 Digital IXUS i5 (normal mode) / IXY Digital L2 (normal mode) / PowerShot SD20 (normal mode) + 30ea EOS 1D Mark II (PTP mode) + 30eb EOS 20D + 30ec EOS 20D (ptp) + 30ee EOS 350D + 30ef EOS 350D (ptp) + 30f0 PowerShot S2 IS (PTP mode) + 30f2 Digital IXUS 700 (normal mode) / Digital IXUS 700 (PTP mode) / IXY Digital 600 (normal mode) / PowerShot SD500 (normal mode) / PowerShot SD500 (PTP mode) + 30f9 PowerShot A410 (PTP mode) + 30fc PowerShot A620 (PTP mode) + 30fd PowerShot A610 (normal mode)/PowerShot A610 (PTP mode) + 30ff Digital IXUS 55 (PTP mode)/PowerShot SD450 (PTP mode) + 310e Digital IXUS 50 (PTP mode) + 3116 Digital IXUS 750 (PTP mode) + 3117 PowerShot A700 + 3138 PowerShot A710 IS + 31ff Digital IXUS 55 +04aa DaeWoo Telecom, Ltd +04ab Chromatic Research +04ac Micro Audiometrics Corp. +04ad Dooin Electronics +04af Winnov L.P. +04b0 Nikon Corp. + 0102 Coolpix 990 + 0103 Coolpix 880 + 0104 Coolpix 995 + 0106 Coolpix 775 + 0107 Coolpix 5000 + 0108 Coolpix 2500 + 0109 Coolpix 2500 (ptp) + 010a Coolpix 4500 + 010b Coolpix 4500 (ptp) + 010d Coolpix 5700 (ptp) + 010e Coolpix 4300 (storage) + 010f Coolpix 4300 (ptp) + 0110 Coolpix 3500 (Sierra Mode) + 0111 Coolpix 3500 (ptp) + 0112 Coolpix 885 (ptp) + 0113 Coolpix 5000 (ptp) + 0114 Coolpix 3100 (storage) + 0115 Coolpix 3100 (ptp) + 0117 Coolpix 2100 (ptp) + 0119 Coolpix 5400 (ptp) + 011d Coolpix 3700 (ptp) + 0121 Coolpix 3200 (ptp) + 0122 Coolpix 2200 (ptp) + 0126 Coolpix 8800 + 0129 Coolpix 4800 (ptp) + 012c Coolpix 4100 (storage) + 012d Coolpix 4100 (ptp) + 012e Coolpix 5600 (ptp) + 0130 Coolpix 4600 (ptp) + 0135 Coolpix 5900 (ptp) + 0142 Coolpix P2 (ptp) + 0136 Coolpix 7900 (storage) + 0137 Coolpix 7900 (ptp) + 0202 Coolpix SQ (ptp) + 0203 Coolpix 4200 (mass storage mode) + 0204 Coolpix 4200 (ptp) + 0205 Coolpix 5200 (storage) + 0206 Coolpix 5200 (ptp) + 0301 Coolpix 2000 (storage) + 0302 Coolpix 2000 (ptp) + 0402 DSC D100 (ptp) + 0403 D2H (mass storage mode) + 0404 D2H SLR (ptp) + 0405 D70 (mass storage mode) + 0406 DSC D70 (ptp) + 0408 D2X SLR (ptp) + 0409 D50 digital camera + 040a D50 (ptp) + 040c D2Hs + 040e DSC D70s (ptp) + 4000 Coolscan LS 40 ED +04b1 Pan International +04b3 IBM Corp. + 3004 Media Access Pro Keyboard + 3016 UltraNav Keyboard Hub + 3018 UltraNav Keyboard + 301b SK-8815 Keyboard + 3100 NetVista Mouse + 3103 ScrollPoint Pro Mouse + 3107 ThinkPad 800dpi Optical Travel Mouse + 3108 800dpi Optical Mouse w/ Scroll Point + 3109 Optical ScrollPoint Pro Mouse + 310b Red Wheel Mouse + 4427 Portable CD ROM + 4525 Double sided CRT + 4550 NVRAM (128 KB) + 4554 Cash Drawer + 4580 Hub w/ NVRAM + 4581 4800-2xx Hub w/ Cash Drawer + 4604 Keyboard w/ Card Reader + 4671 4820 LCD w/ MSR/KB +04b4 Cypress Semiconductor Corp. + 0000 Dacal DC-101 CD Library + 0001 Mouse + 0002 CY7C63x0x Thermometer + 1002 CY7C63001 R100 FM Radio + 5500 HID->COM RS232 Adapter + 6560 CY7C65640 USB-2.0 "TetraHub" + 6830 USB-2.0 IDE Adapter + 7417 Wireless PC Lock + 8613 CY7C68013 EZ-USB FX2 USB 2.0 Development Kit + cc04 Centor USB RACIA-ALVAR USB PORT + cc06 Centor-P RACIA-ALVAR USB PORT + d5d5 CY7C63x0x Zoltrix Z-Boxer GamePad + f000 CY30700 Licorice evaluation board +04b5 ROHM LSI Systems USA, LLC +04b6 Hint Corp. +04b7 Compal Electronics, Inc. +04b8 Seiko Epson Corp. + 0001 Stylus Color 740 / Photo 750 + 0002 ISD Smart Cable for Mac + 0003 ISD Smart Cable + 0005 Stylus Printer + 0101 Perfection 636 + 0102 GT-2200 + 0103 Perfection 610 + 0104 Perfection 1200 + 0105 StylusScan 2000 + 0106 Stylus Scan 2500 + 0107 Expression 1600U + 0109 Expression 1640 XL + 010a Perfection 1640SU + 010b Perfection 1240 + 010c Perfection 640 + 010e Perfection 1680 + 010f Perfection 1250 + 0110 Perfection 1650 + 0112 Perfection 2450 + 0114 Perfection 660 + 011b Perfection 2400 Photo + 011c Perfection 3200 + 011d Perfection 1260 Photo + 011e Perfection 1660 Photo + 011f Perfection 1670 + 0121 Perfection 2480 Photo + 0202 Receipt Printer M129C + 0402 PhotoPC 850z + 0403 PhotoPC 3000z + 0601 Stylus Photo 875DC Card Reader + 0602 Stylus Photo 895 Card Reader + 0801 Stylus CX5200 + 0802 Stylus CX3200 + 080c ME100 + 0811 Stylus Photo RX620 all-in-one +04b9 Rainbow Technologies, Inc. + 0300 SafeNet USB SuperPro/UltraPro + 1000 iKey 1000 Token + 1001 iKey 1200 Token + 1200 iKey 2000 Token + 1202 iKey 2032 Token + 1300 iKey 3000 Token +04ba Toucan Systems, Ltd +04bb I-O Data Device, Inc. + 0904 ET/TX Ethernet [pegasus] + 0913 ET/TX-S Ethernet [pegasus2] + 0922 IOData AirPort WN-B11/USBS 802.11b +04bd Toshiba Electronics Taiwan Corp. +04be Telia Research AB +04bf TDK Corp. + 0100 MediaReader CF + 0320 Bluetooth Adapter +04c1 U.S. Robotics (3Com) + 0082 OfficeConnect Analog Modem + 008f Pro ISDN TA + 009d HomeConnect WebCam [vicam] + 3021 56k Voice FaxModem Pro +04c2 Methode Electronics Far East PTE, Ltd +04c3 Maxi Switch, Inc. +04c4 Lockheed Martin Energy Research +04c5 Fujitsu, Ltd + 1029 fi-4010c Scanner + 1041 fi-4120c Scanner + 1042 fi-4220c Scanner + 10e0 fi-5120c Scanner +04c6 Toshiba America Electronic Components +04c7 Micro Macro Technologies +04c8 Konica Corp. + 0720 Digital Color Camera + 0721 e-miniD Camera + 0722 e-mini + 0723 KD-200Z Camera + 0726 KD-310Z Camera + 072c Revio KD20M + 072d Revio KD410Z +04ca Lite-On Technology Corp. +04cb Fuji Photo Film Co., Ltd + 0100 FinePix 1300 / 1400 / 4700 Zoom digital camera + 0103 FinePix NX-700 printer + 0104 FinePix A101/2600 Zoom (PC-Cam Mode) + 0108 FinePix F601 Zoom (Disk mode) + 0109 FinePix F601 Zoom (PC-Cam mode) + 010a FinePix S602 Zoom (Disk mode) + 010b FinePix S602 Zoom (PC-Cam mode) + 0110 FinePix M603 (mass storage mode) + 0114 FinePix F401 Zoom (Disk mode) + 0115 FinePix F401 Zoom (PC-Cam mode) + 0116 FinePix A203 (Disk mode) + 0117 FinePix A203 (PC-Cam mode) + 011a FinePix S304/3800 (Disk mode) + 011b FinePix S304/3800 (PC-Cam mode) + 011c FinePix 2650 (Disk mode) + 012c FinePix S7000 Zoom (Disk mode) + 012d FinePix S7000 Zoom (PC-Cam mode) + 0130 Finepix S5000 Camera (Disk mode) + 0131 Finepix S5000 Camera (PC-Cam mode) + 0142 FinePix S7000 Zoom (PTP mode)/(PictBridge mode) / FinePix A330 (PictBridge mode) + 0148 FinePix A330 (mass storage mode) + 0168 FinePix E500 + 0177 Finepix F10 Camera (Disk mode) + 0179 Finepix F10 Camera (PTP mode) + 0192 FinePix E900 +04cc Philips Semiconductors + 1122 Hub + 1521 USB 2.0 Hub + 8116 Camera +04cd Tatung Co. Of America +04ce ScanLogic Corp. + 0002 SL11R-IDE IDE Bridge +04cf Myson Century, Inc. + 8818 USB2.0 to ATAPI Bridge Controller +04d0 Digi International +04d1 ITT Canon +04d2 Altec Lansing Technologies + 0311 ADA-310 Speakers + ff05 ADA-305 Speakers +04d3 VidUS, Inc. +04d4 LSI Logic, Inc. +04d5 Forte Technologies, Inc. +04d6 Mentor Graphics +04d7 Oki Semiconductor +04d8 Microchip Technology, Inc. + 8000 In-Circuit Debugger +04d9 Holtek Semiconductor, Inc. +04da Panasonic (Matsushita) + 2121 EB-VS6 + 2319 NV-GS15 (webcam mode) + 2372 Lumix DMC-FZ10 Camera + 2374 DMC-FZ20 +04db Hypertec Pty, Ltd +04dc Huan Hsin Holdings, Ltd +04dd Sharp Corp. + 7004 VE-CG40U Digital Still Camera + 7005 VE-CG30 Digital Still Camera + 7007 VL-Z7S Digital Camcorder + 8004 Zaurus SL-5000D/SL-5500 PDA + 8005 Zaurus A-300 + 8006 Zaurus SL-B500/SL-5600 PDA + 8007 Zaurus C-700 PDA + 9014 IM-DR80 Portable NetMD Player + 9031 Zaurus C-750/C-760/C-860/SL-C3000 PDA + 9032 Zaurus SL-6000 + 9050 Zaurus C-860 PDA + 9056 Viewcam Z + 90f2 Sharp 3G GSM USB Control +04de MindShare, Inc. +04df Interlink Electronics +04e1 Iiyama North America, Inc. + 0201 Monitor Hub +04e2 Exar Corp. +04e3 Zilog, Inc. +04e4 ACC Microelectronics +04e5 Promise Technology +04e6 SCM Microsystems, Inc. + 0001 E-USB ATA Bridge + 0002 eUSCSI SCSI Bridge + 0003 eUSB SmartMedia Card Reader + 0005 eUSB SmartMedia/CompactFlash Card Reader + 0006 eUSB SmartMedia Card Reader + 0007 Hifd + 0101 eUSB ATA Bridge + 0325 eUSB ORCA Quad Reader + 0500 Veridicom 5thSense Fingerprint Sensor and eUSB SmartCard + 1010 USBAT-2 CompactFlash Card Reader + 5111 SCR331-DI SmartCard Reader + 5113 SCR333 SmartCard Reader + 5115 SCR335 SmartCard Reader + 5116 SCR331-LC1 SmartCard Reader + e001 SCR331 SmartCard Reader + e003 SPR532 PinPad SmartCard Reader +04e7 Elo TouchSystems + 0001 TouchScreen +04e8 Samsung Electronics Co., Ltd + 0110 Connect3D Flash Drive + 0111 Connect3D Flash Drive + 1003 MP3 Player and Recorder + 300c ML-1210 Printer + 323a ML-1710 Printer + 324c ML-1740 Printer + 3260 CLP-510 Color Laser Printer + 3268 ML-1610 Mono Laser Printer + 5a03 Yepp MP3 Player + 6601 Z100 Mobile Phone + 663f SGH-E720 +04e9 PC-Tel, Inc. +04ea Brooktree Corp. +04eb Northstar Systems, Inc. +04ec Tokyo Electron Device, Ltd +04ed Annabooks +04ef Pacific Electronic International, Inc. +04f0 Daewoo Electronics Co., Ltd +04f1 Victor Company of Japan, Ltd + 0001 GC-QX3 Digital Still Camera + 0004 GR-DVL815U Digital Video Camera + 0008 GZ-MG30AA/MC500E Digital Video Camera + 0009 GR-DX25EK Digital Video Camera + 000a GR-D72 Digital Video Camera +04f2 Chicony Electronics Co., Ltd + 0001 KU-8933 Keyboard + 0002 NT68P81 Keyboard + 0110 KU-2971 Keyboard + 0112 KU-8933 Keyboard with PS/2 Mouse port + 0116 KU-2971 German Keyboard + a209 Labtec DC-2320 +04f3 Elan Microelectronics Corp. +04f4 Harting Elektronik, Inc. +04f5 Fujitsu-ICL Systems, Inc. +04f6 Norand Corp. +04f7 Newnex Technology Corp. +04f8 FuturePlus Systems +04f9 Brother Industries, Ltd + 0002 HL-1050 Laser Printer + 0006 HL-1240 Laser Printer + 0007 HL-1250 Laser Printer + 0008 HL-1270 Laser Printer + 000d HL-1440 Laser Printer + 010f MFC 5100C + 0111 MFC 6800 + 2004 PT-2300/2310 p-Touch Laber Printer + 2015 QL-500 P-touch label printer +04fa Dallas Semiconductor + 2490 DS1490F 2-in-1 Fob, 1-Wire adapter + 4201 DS4201 Audio DAC +04fb Biostar Microtech International Corp. +04fc Sunplus Technology Co., Ltd + 0003 CM1092 Optical Scroller Mouse + 0561 Flexcam 100 + 504a SPCA504a Digital Camera + 504b Aiptek, 1.3 mega PockerCam + 5331 Vivitar Vivicam 10 + 7333 Finet Technology Palmpix DC-85 + ffff PureDigital Ritz Disposable +04fd Soliton Systems, K.K. +04fe PFU, Ltd +04ff E-CMOS Corp. +0500 Siam United Hi-Tech +0501 Fujikura DDK, Ltd +0502 Acer, Inc. + d001 Divio NW801/DVC-V6+ Digital Camera +0503 Hitachi America, Ltd +0504 Hayes Microcomputer Products +0506 3Com Corp. + 00a0 3CREB96 Bluetooth Adapter + 03e8 3C19250 Ethernet [klsi] + 0a11 3CRWE254G72 802.11g Adapter + 00df 3Com Home Connect lite + 4601 3C460B 10/100 Ethernet Adapter + f002 3CP4218 ADSL Modem (pre-init) + f003 3CP4218 ADSL Modem + f100 3CP4218 ADSL Modem (pre-init) +0507 Hosiden Corp. + 0011 Konami ParaParaParadise Controller +0508 Clarion Co., Ltd +0509 Aztech Systems, Ltd +050a Cinch Connectors +050b Cable System International +050c InnoMedia, Inc. +050d Belkin Components + 0012 Bluetooth USB Adapter F8T012 + 0102 Flip KVM + 0103 F5U103 Serial Adapter [etek] + 0108 F1DE108B KVM + 0109 F5U109/F5U409 PDA Adapter + 0115 SCSI Adapter + 0121 F5D5050 100Mbps Ethernet + 0208 USBView II Video Adapter [nt1004] + 0224 F5U224 USB 2.0 4-Port Hub + 0234 F5U234 USB 2.0 4-Port Hub + 0803 Nostromo 1745 GamePad + 0805 Nostromo N50 GamePad + 1203 F5U120-PC Serial Port + 3101 F1DF102U Flip Hub + 3201 F1DF102U Flip KVM + 7050 F5D7050 ver 1000 WiFi +050e Neon Technology, Inc. +050f KC Technology, Inc. + 0003 KC82C160S Hub + 0180 KC-180 IrDA Dongle + 0190 KC2190 USB Host-to-Host cable +0510 Sejin Electron, Inc. +0511 N'Able (DataBook) Technologies, Inc. +0512 Hualon Microelectronics Corp. +0513 digital-X, Inc. +0514 FCI Electronics +0515 ACTC +0516 Longwell Electronics +0517 Butterfly Communications +0518 EzKEY Corp. + 0001 USB to PS2 Adaptor v1.09 +0519 Star Micronics Co., Ltd + c002 Xlive Bluetooth XBM-100S MP3 Player +051a WYSE Technology +051b Silicon Graphics +051c Shuttle, Inc. +051d American Power Conversion + 0002 Uninterruptible Power Supply +051e Scientific Atlanta, Inc. +051f IO Systems (Elite Electronics), Inc. +0520 Taiwan Semiconductor Manufacturing Co. +0521 Airborn Connectors +0522 Advanced Connectek, Inc. +0523 ATEN GmbH +0524 Sola Electronics +0525 Netchip Technology, Inc. + 1080 NET1080 USB-USB Bridge + a4a0 Linux-USB "Gadget Zero" + a4a1 Linux-USB Ethernet Gadget + a4a2 Linux-USB Ethernet/RNDIS Gadget + a4a3 Linux-USB user-mode isochronous source/sink + a4a4 Linux-USB user-mode bulk source/sink + a4a5 Linux-USB File Storage Gadget + a4a6 Linux-USB Serial Gadget + a4a7 Linux-USB Serial Gadget (CDC ACM mode) + a4a8 Linux-USB Printer Gadget +0526 Temic MHS S.A. +0527 ALTRA +0528 ATI Technologies, Inc. + 7561 TV Wonder +0529 Aladdin Knowledge Systems + 0001 HASP v0.06 + 030b eToken R1 v3.1.3.x + 0313 eToken R1 v3.2.3.x + 031b eToken R1 v3.3.3.x + 0323 eToken R1 v3.4.3.x + 0412 eToken R2 v2.2.4.x + 041a eToken R2 v2.2.4.x + 0422 eToken R2 v2.4.4.x + 042a eToken R2 v2.5.4.x + 050c eToken Pro v4.1.5.x + 0514 eToken Pro v4.2.5.4 +052a Crescent Heart Software +052b Tekom Technologies, Inc. + 0801 Yakumo MegaImage 37 + 1512 Yakumo MegaImage IV + 1513 Aosta CX100 WebCam + 1514 Aosta CX100 WebCam Storage + 1905 Yakumo MegaImage 47 + 1911 Yakumo MegaImage 47 SL + 3a06 DigiLife DDV-5120A +052c Canon Information Systems, Inc. +052d Avid Electronics Corp. +052e Standard Microsystems Corp. +052f Unicore Software, Inc. +0530 American Microsystems, Inc. +0531 Wacom Technology Corp. +0532 Systech Corp. +0533 Alcatel Mobile Phones +0534 Motorola, Inc. +0535 LIH TZU Electric Co., Ltd +0536 Hand Held Products (Welch Allyn, Inc.) +0537 Inventec Corp. +0538 Caldera International, Inc. (SCO) +0539 Shyh Shiun Terminals Co., Ltd +053a Preh Werke GmbH & Co. KG +053b Global Village Communication +053c Institut of Microelectronic & Mechatronic Systems +053d Silicon Architect +053e Mobility Electronics +053f Synopsys, Inc. +0540 UniAccess AB + 0101 Panache Surf ISDN TA +0541 Sirf Technology, Inc. +0543 ViewSonic Corp. + 00fe G773 Monitor Hub + 00ff P815 Monitor Hub + 4153 ViewSonic G773 Control (?) +0544 Cristie Electronics, Ltd +0545 Xirlink, Inc. + 8002 IBM NetCamera + 800c Veo StingRay + 8080 IBM C-It WebCam + 810a Veo Advanced Connect WebCam +0546 Polaroid Corp. + 0daf PDC 2300Z + 1bed PDC 1320 Camera + 3097 PDC 310 +0547 Anchor Chips, Inc. + 2131 AN2131 EZUSB Microcontroller + 2235 AN2235 EZUSB-FX Microcontroller + 2720 AN2720 USB-USB Bridge + 2727 Xircom PGUNET USB-USB Bridge + 2810 Cypress USB ATAPI Bridge + 9999 AN2131 uninitialized (?) +0548 Tyan Computer Corp. + 1005 EZ Cart II GameBoy Flash Programmer +0549 Pixera Corp. +054a Fujitsu Microelectronics, Inc. +054b New Media Corp. +054c Sony Corp. + 0010 DSC-S30/S70/S75/F505V/F505/FD92 Cybershot/Mavica Digital Camera + 0023 CD Writer + 0024 Mavica CD-1000 Camera + 0025 NW-MS7 Walkman MemoryStick Reader + 002c USB Floppy Disk Drive + 002d MSAC-US1 MemoryStick Reader + 002e Sony HandyCam MemoryStick Reader + 0032 MemoryStick MSC-U01 Reader + 0038 Clie PEG-S300/D PalmOS PDA + 004e DSC-xxx (ptp) + 0058 Clie PEG-N7x0C PalmOS PDA Mass Storage + 0066 Clie PEG-N7x0C/PEG-T425 PalmOS PDA Serial + 0069 Memorystick MSC-U03 Reader + 006d Clie PEG-T425 PDA Mass Storage + 008b Micro Vault 64M Mass Storage + 0099 Clie NR70 PDA Mass Storage + 009a Clie NR70 PDA Serial + 00c0 Handycam DCR-30 + 00c8 MZ-N710 Minidisc Walkman + 00ca MZ-DN430 Minidisc Walkman + 00cb MSAC-US20 Memory Stick Reader + 0105 Micro Vault Hub + 0107 VCC-U01 Visual Communication Camera + 0144 Clie PEG-TH55 PDA + 014c Aiwa AM-NX9 Net MD Music Recorder MDLP + 014d Memory Stick Reader/Writer + 0169 Clie PEG-TJ35 PDA Serial + 016a Clie PEG-TJ35 PDA Mass Storage + 019e Micro Vault 1.0G Mass Storage + 01c3 NW-E55 Network Walkman + 01d0 DVD+RW External Drive DRU-700A + 01fa Sony IC Recorder (P) + 01fb NW-E405 Network Walkman + 023b DVD+RW External Drive DRU-800UL +054d Try Corp. +054e Proside Corp. +054f WYSE Technology Taiwan +0550 Fuji Xerox Co., Ltd +0551 CompuTrend Systems, Inc. +0552 Philips Monitors +0553 STMicroelectronics Imaging Division (VLSI Vision) + 0002 CPiA WebCam + 0151 Digital Blue QX5 Microscope + 0202 Aiptek PenCam 1 + 1002 Che-ez! Splash +0554 Dictaphone Corp. +0555 ANAM S&T Co., Ltd +0556 Asahi Kasei Microsystems Co., Ltd + 0001 AK5370 I/F A/D Converter +0557 ATEN International Co., Ltd + 2001 UC-1284 Printer Port + 2002 10Mbps Ethernet [klsi] + 2004 UC-100KM PS/2 Mouse and Keyboard adapter + 2006 UC-1284B Printer Port + 2007 UC-110T 100Mbps Ethernet [pegasus] + 2008 UC-232A Serial Port [pl2303] + 2202 CS124U Miniview II KVM Switch + 2600 IDE Bridge + 4000 DSB-650 10Mbps Ethernet [klsi] + 7000 Hub +0558 Truevision, Inc. +0559 Cadence Design Systems, Inc. +055a Kenwood USA +055b KnowledgeTek, Inc. +055c Proton Electronic Ind. +055d Samsung Electro-Mechanics Co. + 9000 AnyCam [pwc] + 9001 MPC-C30 AnyCam Premium for Notebooks [pwc] +055e CTX Opto-Electronics Corp. +055f Mustek Systems, Inc. + 0001 ScanExpress 1200 CU + 0002 ScanExpress 600 CU + 0003 ScanExpress 1200 USB + 0006 ScanExpress 1200 UB + 0007 ScanExpress 1200 USB Plus + 0008 ScanExpress 1200 CU Plus + 0010 BearPaw 1200F + 0210 ScanExpress A3 USB + 0218 BearPaw 2400 TA + 0219 BearPaw 2400 TA Plus + 021a BearPaw 2448 TA Plus + 021c BearPaw 1200 CU Plus + 021d BearPaw 2400 CU Plus + 021e BearPaw 1200 TA/CS + 0400 BearPaw 2400 TA Pro + 0401 P 3600 A3 Pro + 0873 ScanExpress 600 USB + 1000 BearPaw 4800 TA Pro + a350 gSmart 350 + a800 MDC 800 Camera + b500 MDC 3000 Camera + c200 gSmart 300 + c220 gSmart mini + c360 Mustek DV 4000 + c420 gSmart mini 2 + c440 Mustek DV 3000 + c520 gSmart mini 3 + c530 Mustek Gsmart LCD 2 + c631 MDC-4000 + c650 Mustek MDC5500Z + d001 WCam 300 +0560 Interface Corp. +0561 Oasis Design, Inc. +0562 Telex Communications, Inc. + 0001 Enhanced Microphone +0563 Immersion Corp. +0564 Chinon Industries, Inc. +0565 Peracom Networks, Inc. + 0001 Serial Port [etek] + 0002 Enet Ethernet [klsi] + 0003 @Home Networks Ethernet [klsi] + 0005 Enet2 Ethernet [klsi] +0566 Monterey International Corp. +0567 Xyratex International, Ltd +0568 Quartz Ingenierie +0569 SegaSoft +056a Wacom Co., Ltd + 0000 PenPartner + 0010 Graphire + 0011 Graphire 2 + 0020 Intuos 4x5 + 0021 Intuos 6x8 + 0022 Intuos 9x12 + 0023 Intuos 12x12 + 0024 Intuos 12x18 + 0031 PL500 + 0042 Intuos 2 6x8 + 0043 Intuos 2 +056b Decicon, Inc. +056c eTEK Labs + 8007 Kwik232 Serial Port + 8101 KwikLink USB-USB Bridge +056d EIZO Corp. + 0000 Hub + 0001 Monitor +056e Elecom Co., Ltd + 0002 29UO Mouse + 4002 Laneed 100Mbps Ethernet LD-USB/TX [pegasus] +056f Korea Data Systems Co., Ltd + cd00 CDM-751 CD organizer +0570 Epson America +0571 Interex, Inc. + 0002 echoFX InterView Lite +0572 Conexant Systems (Rockwell), Inc. + 0001 Ezcam II WebCam + 0002 Ezcam II WebCam + 0040 Wondereye CP-115 WebCam + 1232 V.90 modem + cafe AccessRunner ADSL Modem + cb00 E-Tech ADSL Modem v2 + cb01 GeekADSL Promax Q31 ADSL Modem +0573 Zoran Co. Personal Media Division (Nogatech) + 0003 USBGear USBG-V1 + 0400 D-Link V100 + 2000 X10 va10a Wireless Camera + 2101 Zoran Co. PMD (Nogatech) AV-grabber Manhattan + 2d00 Osprey 50 + 2d01 Hauppauge USB-Live Model 600 + 4100 USB-TV FM (NTSC) + 4110 PNY USB-TV (NTSC) FM + 4450 PixelView PlayTv-USB PRO (PAL) FM + 4550 ZTV ZT-721 2.4GHz USB A/V Receiver + 4d00 Hauppauge WinTV-USB USA + 4d01 Hauppauge WinTV-USB + 4d02 Hauppauge WinTV-USB UK + 4d03 Hauppauge WinTV-USB France + 4d10 Hauppauge WinTV-USB with FM USA radio + 4d11 Hauppauge WinTV-USB (PAL) with FM radio + 4d12 Hauppauge WinTV-USB UK with FM Radio + 4d20 Hauppauge WinTV-USB II (PAL) with FM radio + 4d21 Hauppauge WinTV-USB II (PAL) + 4d22 Hauppauge WinTV-USB II (PAL) Model 566 + 4d23 Hauppauge WinTV-USB France 4D23 + 4d25 Hauppauge WinTV-USB Model 40209 rev B234 + 4d26 Hauppauge WinTV-USB Model 40209 rev B243 + 4d27 Hauppauge WinTV-USB Model 40204 Rev B281 + 4d28 Hauppauge WinTV-USB Model 40204 rev B283 + 4d29 Hauppauge WinTV-USB Model 40205 rev B298 + 4d2a Hauppague WinTV-USB Model 602 Rev B285 + 4d2b Hauppague WinTV-USB Model 602 Rev B282 + 4d30 Hauppauge WinTV-USB FM Model 40211 Rev B123 + 4d31 Hauppauge WinTV-USB III (PAL) with FM radio Model 568 + 4d32 Hauppauge WinTV-USB III (PAL) FM Model 573 + 4d35 Hauppauge WinTV-USB III (PAL) FM Model 597 + 4d37 Hauppauge WinTV-USB Model 40219 rev E189 +0574 City University of Hong Kong +0575 Philips Creative Display Solutions +0576 BAFO/Quality Computer Accessories +0577 ELSA +0578 Intrinsix Corp. +0579 GVC Corp. +057a Samsung Electronics America +057b Y-E Data, Inc. + 0000 FlashBuster-U Floppy + 0001 Tri-Media Reader Floppy + 0006 Tri-Media Reader Card Reader + 0010 Memory Stick Reader Writer + 0020 HEXA Media Drive 6-in-1 Card Reader Writer + 0030 Memory Card Viewer (TV) +057c AVM GmbH + 2800 ISDN-Connector TA + 3800 BlueFRITZ! Bluetooth Stick + 3d00 Fritz!Box +057d Shark Multimedia, Inc. +057e Nintendo Co., Ltd +057f QuickShot, Ltd +0580 Denron, Inc. +0581 Racal Data Group +0582 Roland Corp. + 0002 MPU64 Midi Interface + 0003 Sound Canvas SC-8850 + 0005 Edirol UM-2 MIDI Adapter + 0009 Edirol UM-1SX MIDI Adapter + 0011 Edirol UA-5 Sound Capture + 002d VX-2020 Synthesizer +0583 Padix Co., Ltd (Rockfire) + 2030 RM-203 USB Nest [mode 1] + 2031 RM-203 USB Nest [mode 2] + 2032 RM-203 USB Nest [mode 3] + 2033 RM-203 USB Nest [mode 4] + 2050 PX-205 PSX Bridge + 3050 QF-305u Gamepad + 688f QF-688uv Windstorm Pro Joystick + 7070 QF-707u Bazooka Joystick +0584 RATOC System, Inc. +0585 FlashPoint Technology, Inc. +0586 ZyXEL Communications Corp. + 1000 Omni NET Modem / ISDN TA + 330e USB Broadband ADSL Modem Rev 1.10 + 3401 ZyAIR G-220 +0587 America Kotobuki Electronics Industries, Inc. +0588 Sapien Design +0589 Victron +058a Nohau Corp. +058b Infineon Technologies +058c In Focus Systems +058d Micrel Semiconductor +058e Tripath Technology, Inc. +058f Alcor Micro Corp. + 2802 Monterey Keyboard + 5492 Hub + 6232 Hi-Speed 16-in-1 Flash Card Reader/Writer + 6362 Hi-Speed Internal Multi-Card Reader/Writer + 9213 MacAlly Kbd Hub + 9215 AU9814 Hub + 9254 Hub + 9330 SD Reader + 9360 8-in-1 Media Card Reader + 9380 Flash drive + 9382 Acer/Sweex Flash drive + 9410 Keyboard + 9472 Keyboard Hub + 9720 USB-Serial Adapter +0590 Omron Corp. + 0004 Cable Modem +0591 Questra Consulting +0592 Powerware Corp. +0593 Incite +0594 Princeton Graphic Systems +0595 Zoran Microelectronics, Ltd + 1001 Digitrex DSC-1300/DSC-2100 (mass storage mode) +0596 MicroTouch Systems, Inc. + 0001 Touchscreen +0597 Trisignal Communications +0598 Niigata Canotec Co., Inc. +0599 Brilliance Semiconductor, Inc. +059a Spectrum Signal Processing, Inc. +059b Iomega Corp. + 0001 Zip 100 (Type 1) + 000b Zip 100 (Type 2) + 0030 Zip 250 (Ver 1) + 0031 Zip 100 (Type 3) + 0032 Zip 250 (Ver 2) + 0040 SCSI Bridge + 0050 Zip CD 650 Writer + 0053 CDRW55292EXT CD-RW External Drive + 006d HipZip MP3 Player + 015d Super DVD Writer + 1052 DVD+RW External Drive +059c A-Trend Technology Co., Ltd +059d Advanced Input Devices +059e Intelligent Instrumentation +059f LaCie, Ltd + 0211 PocketDrive + 0212 PocketDrive + 0323 LaCie d2 Drive USB2 + 0641 Mobile Hard drvie + a601 HardDrive +05a0 Vetronix Corp. +05a1 USC Corp. +05a2 Fuji Film Microdevices Co., Ltd +05a3 ARC International +05a4 Ortek Technology, Inc. + 9731 MCK-600W Keyboard +05a5 Sampo Technology Corp. +05a6 Cisco Systems, Inc. +05a7 Bose Corp. +05a8 Spacetec IMC Corp. +05a9 OmniVision Technologies, Inc. + 0511 OV511 WebCam + 0518 OV518 WebCam + a511 OV511+ WebCam +05aa Utilux South China, Ltd +05ab In-System Design + 0002 Parallel Port + 0031 ATA Bridge + 0060 USB 2.0 ATA Bridge + 0200 USS725 ATA Bridge + 0202 ATA Bridge + 081a ATA Bridge + 0cda ATA Bridge for CD-R/RW +05ac Apple Computer, Inc. + 0201 Apple USB Keyboard [Alps or Logitech, M2452] + 0202 Apple Keyboard [ALPS] + 0205 Apple Extended Keyboard [Mitsumi] + 0206 Apple Extended Keyboard [Mitsumi] + 020b Apple Pro Keyboard [Mitsumi, A1048/US layout] + 020d Apple Pro Keyboard [Mitsumi, A1048/JIS layout] + 020e Apple Internal Keyboard/Trackpad + 020f Apple Internal Keyboard/Trackpad + 0301 Apple USB Mouse [Mitsumi, M4848] + 0302 Apple Optical Mouse [Fujitsu] + 0304 Apple Optical USB Mouse [Mitsumi] + 0306 Apple Optical USB Mouse [Fujitsu] + 1001 Apple Keyboard Hub [ALPS] + 1002 Apple Extended Keyboard Hub [Mitsumi] + 1003 Hub in Apple Pro Keyboard [Mitsumi, A1048] + 1101 Speakers + 1201 3G iPod + 1204 iPod [Photo] + 120A iPod Nano + 1300 iPod Shuffle + 8202 HCF V.90 Data/Fax Modem + 8203 Bluetooth HCI + 8204 Bluetooth HCI [Bluetooth 2.0 + EDR, build-in] + 8240 IR Receiver [build-in] + 8501 Built-in iSight [Micron] +05ad Y.C. Cable U.S.A., Inc. +05ae Synopsys, Inc. +05af Jing-Mold Enterprise Co., Ltd +05b0 Fountain Technologies, Inc. +05b1 First International Computer, Inc. +05b4 LG Semicon Co., Ltd + 4857 M-Any DAH-210 + 6001 Digisette DUO-MP3 AR-100 +05b5 Dialogic Corp. +05b6 Proxima Corp. +05b7 Medianix Semiconductor, Inc. +05b8 Agiler, Inc. + 3002 Scroll Mouse +05b9 Philips Research Laboratories +05ba DigitalPersona, Inc. +05bb Grey Cell Systems +05bc 3G Green Green Globe Co., Ltd + 0004 Trackball +05bd RAFI GmbH & Co. KG +05be Tyco Electronics (Raychem) +05bf S & S Research +05c0 Keil Software +05c1 Kawasaki Microelectronics, Inc. +05c2 Media Phonics (Suisse) S.A. +05c5 Digi International, Inc. +05c6 Qualcomm, Inc. + 3100 CDMA Wireless Modem/Phone + 3196 CDMA Wireless Modem + 3197 CDMA Wireless Modem/Phone +05c7 Qtronix Corp. + 1001 Lynx Mouse + 2011 SCorpius Keyboard +05c8 Cheng Uei Precision Industry Co., Ltd (Foxlink) +05c9 Semtech Corp. +05ca Ricoh Co., Ltd + 0101 RDC-5300 Camera + 0325 Caplio GX (ptp) + 032d Caplio GX 8 (ptp) + 032f Caplio R3 (ptp) + 2201 RDC-7 Camera + 2202 Caplio RR30 + 2203 Caplio 300G + 2204 Caplio G3 + 2205 Caplio RR30 / Medion MD 6126 Camera + 2208 Caplio G4 + 220b Caplio RX + 220c Caplio GX + 220d Caplio R1/RZ1 + 220e Sea & Sea 5000G + 220f Rollei dr5 / Rollei dr5 (PTP mode) + 2212 Caplio R1v Camera + 2213 Caplio R2 + 2214 Caplio GX 8 + 2216 Caplio R3 + 2222 RDC-i500 +05cb PowerVision Technologies, Inc. + 1483 PV8630 interface (scanners, webcams) +05cc ELSA AG + 2100 MicroLink ISDN Office + 2219 MicroLink ISDN + 2265 MicroLink 56k + 2267 MicroLink 56k (V.250) + 2280 MicroLink 56k Fun + 3000 Micolink USB2Ethernet [pegasus] + 3363 MicroLink ADSL Fun +05cd Silicom, Ltd +05ce sci-worx GmbH +05cf Sung Forn Co., Ltd +05d0 GE Medical Systems Lunar +05d1 Brainboxes, Ltd +05d2 Wave Systems Corp. +05d3 Tohoku Ricoh Co., Ltd +05d5 Super Gate Technology Co., Ltd +05d6 Philips Semiconductors, CICT +05d7 Thomas & Betts Corp. + 0099 10Mbps Ethernet [klsi] +05d8 Ultima Electronics Corp. + 4001 Artec Ultima 2000 + 4002 Artec Ultima 2000 (GT6801 based)/Lifetec LT9385 Scanner + 4003 Artec E+ 48U + 4004 Artec E+ Pro + 4008 Trust Easy Webscan 19200 + 4009 Umax Astraslim + 8105 Artec T1 USB TVBOX (cold) + 8106 Artec T1 USB TVBOX (warm) + 8107 Artec T1 USB TVBOX with AN2235 (cold) + 8108 Artec T1 USB TVBOX with AN2235 (warm) + 8109 Artec T1 USB2.0 TVBOX (cold +05d9 Axiohm Transaction Solutions +05da Microtek International, Inc. + 0093 ScanMaker V6USL + 0094 Phantom 336CX/C3 + 0099 ScanMaker X6/X6U + 009a Phantom C6 + 00a0 Phantom 336CX/C3 (#2) + 00b6 ScanMaker V6UPL + 1006 Jenoptik JD350 entrance + 1011 NHJ Che-ez! Kiss Digital Camera + 1018 Digital Dream Enigma 1.3 + 1020 Digital Dream l'espion xtra + 1045 Take-it D1 + 30ce ScanMaker 3800 + 30cf ScanMaker 4800 + 30e6 ScanMaker i320 + 40ca ScanMaker 3600 + 80a3 ScanMaker V6USL (#2) + 80ac ScanMaker V6UL/SpicyU +05db Sun Corp. (Suntac?) +05dc Lexar Media, Inc. + 0080 Jumpdrive Secure 64MB + 0200 JumpDrive 2.0 Pro + 0300 Jumpdrive Geysr + a410 JumpDrive 128MB/256MB + b018 Multi-Card Reader +05dd Delta Electronics, Inc. +05df Silicon Vision, Inc. +05e0 Symbol Technologies +05e1 Syntek Semiconductor Co., Ltd +05e2 ElecVision, Inc. +05e3 Genesys Logic, Inc. + 000a Keyboard with PS/2 Port + 000b Mouse + 0100 Nintendo Game Boy Advance SP + 0120 Pacific Image Electronics PrimeFilm 1800u slide/negative scanner + 0300 GLUSB98PT Parallel Port + 0406 Hub + 0502 GL620USB GeneLink USB-USB Bridge + 0604 USB 1.1 Hub + 0605 USB 2.0 Hub [ednet] + 0606 D-Link DUB-H4 USB 2.0 Hub + 0660 USB 2.0 Hub + 0700 SIIG US2256 CompactFlash Card Reader + 0701 USB 2.0 IDE Adapter + 0702 USB 2.0 IDE Adapter + 0703 Card Reader + 070e X-PRO CR20xA USB 2.0 Internal Card Reader + 0710 USB 2.0 33-in-1 Card Reader + 0715 USB 2.0 microSD Reader + 0760 USB 2.0 Card Reader/Writer + 07A0 Pen Flash + 1205 Afilias Optical Mouse H3003 +05e4 Red Wing Corp. +05e5 Fuji Electric Co., Ltd +05e6 Keithley Instruments +05e8 ICC, Inc. +05e9 Kawasaki LSI + 0008 KL5KUSB101B Ethernet [klsi] + 0009 Sony 10Mbps Ethernet [pegasus] +05eb FFC, Ltd +05ec COM21, Inc. +05ee Cytechinfo Inc. +05ef AVB, Inc. [anko?] + 020a Top Shot Pegasus Joystick + 8884 Mag Turbo Force Wheel + 8888 Top Shot Force Feedback Racing Wheel +05f0 Canopus Co., Ltd + 0101 DA-Port DAC +05f1 Compass Communications +05f2 Dexin Corp., Ltd +05f3 PI Engineering, Inc. + 0007 Kinesis Advantage PRO MPC/USB Keyboard + 0081 Kinesis Integrated Hub + 020b PS2 Adapter + 0232 X-Keys Switch Interface, Programming Mode + 0261 X-Keys Switch Interface, SPLAT Mode + 0264 X-Keys Switch Interface, Composite Mode +05f5 Unixtar Technology, Inc. +05f6 AOC International +05f7 RFC Distribution(s) PTE, Ltd +05f9 PSC Scanning, Inc. +05fa Siemens Telecommunications Systems, Ltd +05fc Harman Multimedia +05fd InterAct, Inc. + 0251 Raider Pro + 0253 ProPad 8 Digital + 262a 3dfx HammerHead FX + daae Game Shark +05fe Chic Technology Corp. + 0001 Mouse + 0005 Viewmaster 4D Browser Mouse + 0007 Twinhead Mouse + 0009 Inland Pro 4500/5000 Mouse + 0011 Browser Mouse +05ff LeCroy Corp. +0600 Barco Display Systems +0601 Jazz Hipster Corp. +0602 Vista Imaging, Inc. + 1001 ViCam WebCam +0603 Novatek Microelectronics Corp. + 00f1 Keyboard + 6871 Mouse +0604 Jean Co., Ltd +0605 Anchor C&C Co., Ltd +0606 Royal Information Electronics Co., Ltd +0607 Bridge Information Co., Ltd +0608 Genrad Ads +0609 SMK Manufacturing, Inc. +060a Worthington Data Solutions, Inc. +060b Solid Year + 0001 MacAlly Keyboard + 2101 Keyboard + 5811 ACK-571U Wireless Keyboard + a001 Maxwell Compact Pc PM3 +060c EEH Datalink GmbH +060d Auctor Corp. +060e Transmonde Technologies, Inc. +060f Joinsoon Electronics Mfg. Co., Ltd +0610 Costar Electronics, Inc. +0611 Totoku Electric Co., Ltd +0613 TransAct Technologies, Inc. +0614 Bio-Rad Laboratories +0615 Quabbin Wire & Cable Co., Inc. +0616 Future Techno Designs PVT, Ltd +0617 Swiss Federal Insitute of Technology +0618 MacAlly + 0101 Mouse +0619 Seiko Instruments, Inc. +061a Veridicom International, Inc. + 0110 5thSense Fingerprint Sensor + 0200 FPS200 Fingerprint Sensor + 8200 VKI-A Fingerprint Sensor/Flash Storage (dumb) + 9200 VKI-B Fingerprint Sensor/Flash Storage (smart) +061b Promptus Communications, Inc. +061c Act Labs, Ltd +061d Quatech, Inc. +061e Nissei Electric Co. +0620 Alaris, Inc. +0621 ODU-Steckverbindungssysteme GmbH & Co. KG +0622 Iotech, Inc. +0623 Littelfuse, Inc. +0624 Avocent Corp. +0625 TiMedia Technology Co., Ltd +0626 Nippon Systems Development Co., Ltd +0627 Adomax Technology Co., Ltd +0628 Tasking Software, Inc. +0629 Zida Technologies, Ltd +062a Creative Labs + 0001 Notebook Optical Mouse + 9004 USR9602 USB Internet Mini Phone +062b Greatlink Electronics Taiwan, Ltd +062c Institute for Information Industry +062d Taiwan Tai-Hao Enterprises Co., Ltd +062e Mainsuper Enterprises Co., Ltd +062f Sin Sheng Terminal & Machine, Inc. +0631 JUJO Electronics Corp. +0633 Cyrix Corp. +0634 Micron Technology, Inc. +0635 Methode Electronics, Inc. +0636 Sierra Imaging, Inc. +0638 Avision, Inc. + 0268 iVina 1200U Scanner + 026a Minolta Dimage Scan Dual II + 0a10 iVina FB1600/UMAX Astra 4500 + 4004 Minolta Dimage Scan Elite II +0639 Chrontel, Inc. +063a Techwin Corp. +063b Taugagreining HF +063c Yamaichi Electronics Co., Ltd (Sakura) +063d Fong Kai Industrial Co., Ltd +063e RealMedia Technology, Inc. +063f New Technology Cable, Ltd +0640 Hitex Development Tools +0641 Woods Industries, Inc. +0642 VIA Medical Corp. +0644 TEAC Corp. + 0000 Floppy + 800D TASCAM Portastudio DP-01FX +0645 Who? Vision Systems, Inc. +0646 UMAX +0647 Acton Research Corp. + 0100 ARC SpectraPro UV/VIS/IR Monochromator/Spectrograph + 0101 ARC AM-VM Mono Airpath/Vacuum Monochromator/Spectrograph + 0102 ARC Inspectrum Mono + 0103 ARC Filterwheel + 03e9 Inspectrum 128x1024 F VIS Spectrograph + 03ea Inspectrum 256x1024 F VIS Spectrograph + 03eb Inspectrum 128x1024 B VIS Spectrograph + 03ec Inspectrum 256x1024 B VIS Spectrograph +0648 Inside Out Networks +0649 Weli Science Co., Ltd +064b White Mountain DSP, Inc. +064c Ji-Haw Industrial Co., Ltd +064d TriTech Microelectronics, Ltd +064e Suyin Corp. +064f WIBU-Systems AG +0650 Dynapro Systems +0651 Likom Technology Sdn. Bhd. +0652 Stargate Solutions, Inc. +0653 CNF, Inc. +0654 Granite Microsystems, Inc. +0655 Space Shuttle Hi-Tech Co., Ltd +0656 Glory Mark Electronic, Ltd +0657 Tekcon Electronics Corp. +0658 Sigma Designs, Inc. +0659 Aethra +065a Optoelectronics Co., Ltd + 0001 Barcode scanner +065b Tracewell Systems +065e Silicon Graphics +065f Good Way Technology Co., Ltd & GWC technology Inc. +0660 TSAY-E (BVI) International, Inc. +0661 Hamamatsu Photonics K.K. +0662 Kansai Electric Co., Ltd +0663 Topmax Electronic Co., Ltd + 0103 CobraPad +0667 Aiwa Co., Ltd + 0fa1 TD-U8000 Tape Drive +0668 WordWand +0669 Oce' Printing Systems GmbH +066a Total Technologies, Ltd +066b Linksys, Inc. + 0105 SCM eUSB SmartMedia Card Reader + 010a Melco MCR-U2 SmartMedia / CompactFlash Reader + 2202 USB10TX Ethernet [pegasus] + 2203 USB100TX Ethernet [pegasus] + 2204 USB100TX HomePNA Ethernet [pegasus] + 2206 USB Ethernet [pegasus] + 2211 WUSB11 802.11b Adapter + 2212 WUSB11v2.5 802.11b Adapter + 2213 WUSB12v1.1 802.11b Adapter +066d Entrega, Inc. +066e Acer Semiconductor America, Inc. +066f SigmaTel, Inc. + 004b A-Max PA11 MP3 Player + 3400 STMP3400 D-Major MP3 Player + 3410 STMP3410 D-Major MP3 Player + 4200 STIr4200 IrDA Bridge + 4210 STIr4210 IrDA Bridge + 8004 MSCNMMC MP3 Player + 8202 Jens of Sweden / I-BEAD 150M/150H MP3 player + 8206 Digital MP3 Music Player +0672 Labtec, Inc. + 1041 LCS1040 Speaker System + 5000 SpaceBall 4000 FLX +0673 HCL + 5000 Keyboard +0674 Key Mouse Electronic Enterprise Co., Ltd +0675 Draytech + 0110 Vigor 128 ISDN TA +0676 Teles AG +0677 Aiwa Co., Ltd + 0fa1 TD-U8000 Tape Drive +0678 ACard Technology Corp. +067b Prolific Technology, Inc. + 0000 PL2301 USB-USB Bridge + 0001 PL2302 USB-USB Bridge + 2303 PL2303 Serial Port + 2305 PL2305 Parallel Port + 2307 PL2307 USB-ATAPI4 Bridge + 2315 Flash Disk Embedded Hub + 2316 Flash Disk Security Device + 2317 Mass Storage Device + 2501 PL2501 USB-USB Bridge (USB 2.0) + 2507 PL2507 Hi-speed USB to IDE bridge controller + 2515 Flash Disk Embedded Hub + 2517 Flash Disk Mass Storage Device + 3507 PL3507 ATAPI6 Bridge +067c Efficient Networks, Inc. + 1001 Siemens SpeedStream 100MBps Ethernet + 1022 Siemens SpeedStream 1022 802.11b Adapter + 4060 Alcatel Speedstream 4060 ADSL Modem +067d Hohner Corp. +067e Intermec +067f Virata, Ltd +0680 Realtek Semiconductor Corp., CPP Div. (Avance Logic) + 0002 Arowana Optical Wheel Mouse MSOP-01 +0681 Siemens Information and Communication Products + 0002 Gigaset 3075 Passive ISDN + 0005 ID-Mouse with Fingerprint Reader + 0012 I-Gate 802.11b Adapter + 002b A-100-I ADSL Modem +0682 Victor Company of Japan, Ltd +0684 Actiontec Electronics, Inc. +0686 Minolta Co., Ltd + 4003 Dimage 2330 Zoom Camera + 4004 Scan Elite II + 4006 Dimage 7 Camera + 4007 Dimage S304 Camera + 4008 Dimage 5 Camera + 4009 Dimage X Camera + 400a Dimage S404 Camera + 400b Dimage 7i Camera + 400c Dimage F100 Camera + 400d Scan Dual III + 400f Dimage 7Hi Camera + 4010 Dimage Xi Camera + 4011 Dimage F300 Camera + 4012 Dimage F200 Camera + 4014 Dimage S414 Camera + 4015 Dimage XT Camera [storage] + 4016 Dimage XT Camera [remote mode] + 4018 Dimage Z1 Camera + 401a Dimage A1 Camera + 401c Dimage X20 Camera + 401e Dimage E323 Camera +068a Pertech, Inc. +068b Potrans International, Inc. +068e CH Products, Inc. + 00e2 HFX OEM Joystick + 00f2 Flight Sim Pedals + 00ff Flight Sim Yoke + 0500 GameStick 3D + 0501 CH Pro Pedals + 0504 F-16 Combat Stick +0690 Golden Bridge Electech, Inc. +0693 Hagiwara Sys-Com Co., Ltd + 0002 FlashGate SmartMedia Card Reader + 0003 FlashGate CompactFlash Card Reader + 0005 FlashGate +0694 Lego Group + 0001 Mindstorms Tower +0698 Chuntex (CTX) + 1786 1300ex Monitor + 9999 VLxxxx Monitor+Hub +0699 Tektronix, Inc. +069a Askey Computer Corp. + 0001 VC010 WebCam [pwc] + 0303 Cable Modem + 0321 Dynalink WLL013 / Compex WLU11A 802.11b Adapter + 0821 BT Voyager 1010 802.11b Adapter +069b Thomson, Inc. + 0704 DCM245 Cable Modem + 070f RCA Lyra RD1071 MP3 Player + 2220 RCA Kazoo RD1000 MP3 Player + 300a RCA Lyra MP3 Player + 5557 RCA CDS6300 +069d Hughes Network Systems (HNS) + 0002 Satellite Device +069e Marx + 0005 CryptoBox v1.2 +069f Allied Data Technologies BV + 0010 Tornado Speakerphone FaxModem 56.0 + 0011 Tornado Speakerphone FaxModem 56.0 +06a2 Topro Technology, Inc. +06a3 Saitek PLC + 0006 Cyborg Gold Joystick + 0200 Xbox Adrenalin Hub + 0241 Xbox Adrenalin Gamepad + 0422 ST90 Joystick + 052d P750 Gamepad + 053f X36F Flightstick + 100a SP550 Pad and Joystick Combo + 100b SP550 Pad + 3509 P3000 RF GamePad + ff0c Cyborg Force Rumble Pad + ffb5 Cyborg Evo Force Joystick +06a4 Xiamen Doowell Electron Co., Ltd +06a5 Divio + 0000 Typhoon Webcam 100k [nw8000] + d001 ProLink DS3303u WebCam + d800 Chicony TwinkleCam +06a7 MicroStore, Inc. +06a8 Topaz Systems, Inc. + 0042 SignatureGem 1X5 Pad + 0043 SignatureGem 1X5-HID Pad +06a9 Westell +06aa Sysgration, Ltd +06ac Fujitsu Laboratories of America, Inc. +06ad Greatland Electronics Taiwan, Ltd +06ae Professional Multimedia Testing Centre +06af Harting, Inc. of North America +06b8 Pixela Corp. +06b9 Alcatel Telecom + 0121 SpeedTouch 121g Wireless Dongle + 4061 SpeedTouch ISDN or ADSL Modem + a5a5 DynaMiTe Modem +06ba Smooth Cord & Connector Co., Ltd +06bb EDA, Inc. +06bc Oki Data Corp. +06bd AGFA-Gevaert NV + 0001 SnapScan 1212U + 0002 SnapScan 1236U + 0100 SnapScan Touch + 0400 CL30 + 0403 ePhoto CL18 Camera + 0404 ePhoto CL20 Camera + 2061 SnapScan 1212U (?) + 208d Snapscan e40 + 208f SnapScan e50 + 2091 SnapScan e20 + 2093 SnapScan e10 + 2095 SnapScan e25 + 2097 SnapScan e26 + 20fd SnapScan e52 + 20ff SnapScan e42 +06be AME Optimedia Technology Co., Ltd +06bf Leoco Corp. +06c2 Phidgets Inc. (formerly GLAB) + 0030 PhidgetRFID + 0038 4-Motor PhidgetServo v3.0 + 0039 1-Motor PhidgetServo v3.0 + 003a 8-Motor PhidgetAvancedServo + 0040 PhidgetInterface Kit 0-0-4 + 0044 PhidgetInterface Kit 0-16-16 + 0045 PhidgetInterface Kit 8-8-8 + 0048 PhidgetStepper (Under Development) + 0049 PhidgetTextLED Ver 1.0 + 004a PhidgetLED Ver 1.0 + 004b PhidgetEncoder Ver 1.0 + 0051 PhidgetInterface Kit 0-5-7 (Custom) + 0052 PhidgetTextLCD + 0053 PhidgetInterfaceKit 0-8-8 + 0058 PhidgetMotorControl Ver 1.0 + 0070 PhidgetTemperatureSensor Ver 1.0 + 0071 PhidgetAccelerometer Ver 1.0 + 0072 PhidgetWeightSensor Ver 1.0 + 0073 PhidgetHumiditySensor + 0074 PhidgetPHSensor + 0075 PhidgetGyroscope +06c4 Bizlink International Corp. +06c5 Hagenuk, GmbH +06c6 Infowave Software, Inc. +06c8 SIIG, Inc. +06c9 Taxan (Europe), Ltd +06ca Newer Technology, Inc. +06cb Synaptics, Inc. + 0009 Composite TouchPad and TrackPoint +06cc Terayon Communication Systems +06cd Keyspan + 0101 USA-28 PDA [no firmware] + 0102 USA-28X PDA [no firmware] + 0103 USA-19 PDA [no firmware] + 0104 PDA [prerenum] + 0105 USA-18X PDA [no firmware] + 0106 USA-19W PDA [no firmware] + 0107 USA-19 PDA + 0108 USA-19W PDA + 0109 USA-49W serial adapter [no firmware] + 010a USA-49W serial adapter + 010b USA-19Qi serial adapter [no firmware] + 010c USA-19Qi serial adapter + 010f USA-28 PDA + 0110 USA-28Xb PDA + 0112 USA-18X PDA + 0113 USA-28Xb PDA [no firmware] + 0114 USA-28Xa PDA [no firmware] + 0115 USA-28Xa PDA + 0118 USA-19QW PDA [no firmware] + 0119 USA-19QW PDA + 011a USA-49Wlc serial adapter [no firmware] + 012a USA-49Wlc serial adapter + 0121 USA-19hs serial adapter + 0201 Digital Media Remote +06cf SpheronVR AG + 1010 PanoCam 10 + 1012 PanoCam 12/12X +06d0 LapLink, Inc. + 0622 LapLink Gold USB-USB Bridge [net1080] +06d1 Daewoo Electronics Co., Ltd +06d3 Mitsubishi Electric Corp. +06d4 Cisco Systems +06d5 Toshiba + 4000 Japanese Keyboard +06d6 Aashima Technology B.V. + 002d Trust PowerC@m 350FT + 002e Trust PowerC@m 350FS + 003a Trust PowerC@m 770Z + 003c Trust 910z PowerC@m +06d7 Network Computing Devices (NCD) +06d8 Technical Marketing Research, Inc. +06da Phoenixtec Power Co., Ltd +06db Paradyne +06dc Foxlink Image Technology Co., Ltd + 0014 Prolink Winscan Pro 2448U +06de Heisei Electronics Co., Ltd +06e0 Multi-Tech Systems, Inc. + f101 MT5634ZBA-USB MultiModemUSB (old firmware) + f103 MT5634MU MultiMobileUSB + f104 MT5634ZBA-USB MultiModemUSB (new firmware) + f107 MT5634ZBA-USB-V92 MultiModemUSB +06e1 ADS Technologies, Inc. + 0008 UBS-10BT Ethernet [klsi] + a190 Instand VCD Usb Capture +06e4 Alcatel Microelectronics +06e6 Tiger Jet Network, Inc. +06ea Sirius Technologies + 0001 NetCom Roadster II 56k + 0002 Roadster II 56k +06eb PC Expert Tech. Co., Ltd +06ef I.A.C. Geometrische Ingenieurs B.V. +06f0 T.N.C Industrial Co., Ltd +06f1 Opcode Systems, Inc. +06f2 Emine Technology Co. +06f6 Wintrend Technology Co., Ltd +06f8 Guillemot Corp. + a300 Dual Analog Leader GamePad + c000 Hercules Muse Pocket +06fa HSD S.r.L +06fc Motorola Semiconductor Products Sector +06fd Boston Acoustics +06fe Gallant Computer, Inc. +0701 Supercomal Wire & Cable SDN. BHD. +0703 Bvtech Industry, Inc. +0705 NKK Corp. +0706 Ariel Corp. +0707 Standard Microsystems Corp. + 0100 2202 Ethernet [klsi] + 0200 2202 Ethernet [pegasus] + ee06 EZ-Connect 802.11g Adapter + ee13 EZ-Connect 802.11g Adapter +0708 Putercom Co., Ltd +0709 Silicon Systems, Ltd (SSL) +070a Oki Electric Industry Co., Ltd +070d Comoss Electronic Co., Ltd +070e Excel Cell Electronic Co., Ltd +0710 Connect Tech, Inc. + 0001 WhiteHeat (fake ID) + 8001 WhiteHeat +0711 Magic Control Technology Corp. + 0100 Hub + 0200 BAY-3U1S1P Serial Port + 0210 MCT1S Serial Port + 0230 MCT-232 Serial Port + 0231 PS/2 Mouse Port + 0240 PS/2 to USB Converter + 0300 BAY-3U1S1P Parallel Port + 0302 Parallel Port + 0900 SVGA Adapter +0713 Interval Research Corp. +0714 NewMotion, Inc. + 0003 ADB to USB convertor +0717 ZNK Corp. +0718 Imation Corp. +0719 Tremon Enterprises Co., Ltd +071b Domain Technologies, Inc. + 0002 DTI-56362-USB Digital Interface Unit + 0101 Audio4-USB DSP Data Acquisition Unit + 0201 Audio4-5410 DSP Data Acquisition Unit + 0301 SB-USB JTAG Emulator +071c Xionics Document Technologies, Inc. +071d Eicon Networks Corp. + 1000 Diva ISDN TA +071e Ariston Technologies +0723 Centillium Communications Corp. +0726 Vanguard International Semiconductor-America +0729 Amitm + 1000 USC-1000 Serial Port +072e Sunix Co., Ltd +072f Advanced Card Systems, Ltd + 0001 AC1030-based SmartCard Reader + 9000 ACR38 AC1038-based Smart Card Reader + 90cc ACR38 SmartCard Reader +0731 Susteen, Inc. + 0528 SonyEricsson DCU-11 Cable +0732 Goldfull Electronics & Telecommunications Corp. +0733 ViewQuest Technologies, Inc. + 0110 VQ110 + 1311 Digital Dream Epsilon 1.3 + 2211 Jenoptik + 0401 CS330 WebCam + 0402 M-318B WebCam + 0430 Intel Pro Share WebCam + 0631 Hercules Dualpix + 1310 Epsilon 1.3/Jenoptik JD C1.3/UMAX AstraPix 470 +0734 Lasat Communications A/S + 0001 560V Modem +0735 Asuscom Network + c541 ISDN TA 280 +0736 Lorom Industrial Co., Ltd +0738 Mad Catz, Inc. +073b Suncom Technologies +073a Chaplet Systems, Inc. +073d Eutron S.p.a. + 0005 Crypto Token +073e NEC, Inc. + 0301 Game Pad +0745 Syntech Information Co., Ltd +0746 Onkyo Corp. +0747 Labway Corp. +0748 Strong Man Enterprise Co., Ltd +0749 EVer Electronics Corp. +074a Ming Fortune Industry Co., Ltd +074b Polestar Tech. Corp. +074c C-C-C Group PLC +074d Micronas GmbH +074e Digital Stream Corp. + 0001 PS/2 Adapter + 0002 PS/2 Adapter +0755 Aureal Semiconductor +0757 Network Technologies, Inc. +075b Sophisticated Circuits, Inc. + 0001 Kick-off! Watchdog +0763 Midiman + 1001 Midisport 2x2 + 1010 Midisport 1x1 + 1020 Midisport 4x4 + 1030 Midisport 8x8 +0764 Cyber Power System, Inc. + 0005 Cyber Power UPS +0765 X-Rite, Inc. +0766 Jess-Link Products Co., Ltd +0767 Tokheim Corp. +0768 Camtel Technology Corp. + 0006 Camtel Technology USB TV Genie Pro FM Model TVB330 +0769 Surecom Technology Corp. +076a Smart Technology Enablers, Inc. +076b OmniKey AG + 0596 CardMan 2020 + 1784 CardMan 6020 + 3021 CardMan 3121 +076c Partner Tech +076d Denso Corp. +076e Kuan Tech Enterprise Co., Ltd +076f Jhen Vei Electronic Co., Ltd +0774 AmTRAN Technology Co., Ltd +0775 Longshine Electronics Corp. +0776 Inalways Corp. +0777 Comda Enterprise Corp. +0778 Volex, Inc. +0779 Fairchild Semiconductor +077a Sankyo Seiki Mfg. Co., Ltd +077b Linksys + 2219 WUSB11 V2.6 802.11b Adapter + 2226 USB200M 100baseTX Adapter +077c Forward Electronics Co., Ltd + 0005 NEC Keyboard +077d Griffin Technology + 0410 PowerMate + 041a PowerWave + 0223 IMic Audio In/Out +077f Well Excellent & Most Corp. +0781 SanDisk Corp. + 0001 SDDR-05a ImageMate CompactFlash Reader + 0002 SDDR-31 ImageMate II CompactFlash Reader + 0005 SDDR-05b (CF II) ImageMate CompactFlash Reader + 0200 SDDR-09 (SSFDC) ImageMate SmartMedia Reader [eusb] + 0400 SecureMate SD/MMC Reader + 0621 SDDR-86 Imagemate 6-in-1 Reader + 0810 SDDR-75 ImageMate CF-SM Reader + 0830 ImageMate CF/MMC/SD Reader + 5150 SDCZ2 Cruzer Mini Flash Drive (thin) + 5151 Cruzer Micro 256/512MB Flash Drive + 7104 Cruzer Micro Mini 256MB Flash Drive + 7112 Cruzer Micro 128MB Flash Drive + 7113 Cruzer Micro 256MB Flash Drive + 8185 SDCZ2 Cruzer Mini Flash Drive (older, thick) + 8889 SDDR-88 Imagemate 8-in-1 Reader + 8989 ImageMate 12-in-1 Reader + 9999 SDDR-99 5-in-1 Reader +0782 Trackerball +0783 C3PO + 0003 LTC31 SmartCard Reader +0784 Vivitar, Inc. + 0100 Vivicam 2655 + 1310 Vivicam 3305 + 1688 Vivicam 3665 + 1689 Gateway DC-M42/Labtec DC-505/Vivitar Vivicam 3705 + 2620 AOL Photocam Plus + 2888 Polaroid DC700 + 3330 Nytec ND-3200 Camera + 4300 Traveler D1 + 5260 Werlisa Sport PX 100 / JVC GC-A33 Camera + 5300 Pretec dc530 +0785 NTT-ME + 0001 MN128mini-V ISDN TA + 0003 MN128mini-J ISDN TA +0789 Logitec Corp. +078b Happ Controls, Inc. + 0010 Driving UGCI + 0020 Flying UGCI + 0030 Fighting UGCI +078c GTCO/CalComp + 0400 Digitizer (Whiteboard) +078e Brincom, Inc. +0790 Pro-Image Manufacturing Co., Ltd +0791 Copartner Wire and Cable Mfg. Corp. +0792 Axis Communications AB +0793 Wha Yu Industrial Co., Ltd +0794 ABL Electronics Corp. +0795 RealChip, Inc. +0796 Certicom Corp. +0797 Grandtech Semiconductor Corp. + 8001 SmartCam + 801a Typhoon StyloCam + 801c Meade Binoculars/Camera + 8901 ScanHex SX-35a + 8909 ScanHex SX-35b + 8911 ScanHex SX-35c +079b Sagem +079d Alfadata Computer Corp. + 0201 GamePort Adapter +07a1 Digicom S.p.A. + d952 Palladio USB V.92 Modem +07a2 National Technical Systems +07a3 Onnto Corp. +07a4 Be, Inc. +07a6 ADMtek, Inc. + 0986 AN986 Pegasus Ethernet + 8511 ADM8511 Pegasus II Ethernet +07aa Corega K.K. + 0001 Ether USB-T Ethernet [klsi] + 0004 FEther USB-TX Ethernet [pegasus] + 0012 Stick-11 802.11b Adapter + 7613 Stick-11 V2 802.11b Adapter +07ab Freecom Technologies + fc01 IDE bridge + fc03 USB2-IDE IDE bridge +07af Microtech + 0004 SCSI-DB25 SCSI Bridge [shuttle] + 0005 SCSI-HD50 SCSI Bridge [shuttle] + 0006 CameraMate SmartMedia and CompactFlash Card Reader [eusb/shuttle] +07b0 Trust Technologies + 0001 ISDN TA +07b1 IMP, Inc. +07b2 Motorola BCS, Inc. + 4100 SurfBoard SB4100 Cable Modem + 4200 SurfBoard SB4200 Cable Modem + 5100 SurfBoard SB5100 Cable Modem + 5101 SurfBoard SB5101 Cable Modem + 5120 SurfBoard SB5120 Cable Modem (RNDIS) +07b3 Plustek, Inc. + 0001 OpticPro 1212U Scanner + 0010 OpticPro U12 Scanner + 0011 OpticPro U24 Scanner + 0013 OpticPro UT12 Scanner + 0015 OpticPro U24 Scanner + 0017 OpticPro UT12/16/24 Scanner + 0400 OpticPro 1248U Scanner + 0401 OpticPro 1248U Scanner #2 + 0403 OpticPro U16B Scanner +07b4 Olympus Optical Co., Ltd + 0100 Camedia C-2100/C-3000 Ultra Zoom Camera + 0102 Camedia E-10/C-220/C-50 Camera + 0105 Camedia C-310Z/C-700/C-750UZ/C-755/C-765UZ/C-3040/C-4000/C-5050Z/D-560/C-3020Z Zoom Camera + 0109 C-370Z/D-535Z/X-450 + 0112 MAUSB-100 xD Card Reader + 0113 mju 500 + 0114 C-350Z Camera + 0118 Mju Digital 500 + 0203 Digital Voice Recorder DW-90 + 0206 Digital Voice Recorder DS-330 + 0207 Digital Voice Recorder & Camera W-10 + 0209 Digital Voice Recorder DM-20 + 020d Digital Voice Recorder VN-240PC +07b5 Mega World International, Ltd + 0213 Thrustmaster Firestorm Digital 3 Gamepad + 9902 GamePad +07b6 Marubun Corp. +07b7 TIME Interconnect, Ltd +07b8 D-Link Corp. + 4000 DU-E10 Ethernet [klsi] + 4002 DU-E100 Ethernet [pegasus] + 4102 USB 1.1 10/100M Fast Ethernet Adapter + abc1 DU-E10 Ethernet [pegasus] + f101 DSB-560 Modem [atlas] +07bc Canon Computer Systems, Inc. +07bd Webgear, Inc. +07be Veridicom +07c0 Code Mercenaries Hard- und Software GmbH + 1121 The Claw + 1500 IO-Warrior 40 + 1501 IO-Warrior 24 + 1502 IO-Warrior 48 + 1503 IO-Warrior 28 +07c4 Datafab Systems, Inc. + a000 CompactFlash Card Reader + a001 CompactFlash & SmartMedia Card Reader [eusb] + a002 Disk Drive + a005 CompactFlash & SmartMedia Card Reader + a006 SmartMedia Card Reader + a109 LC1 CompactFlash & SmartMedia Card Reader + a200 DF-UT-06 Hama MMC/SD Reader + a400 CompactFlash & Microdrive Reader + b004 MMC/SD Reader +07c5 APG Cash Drawer +07c6 ShareWave, Inc. +07c7 Powertech Industrial Co., Ltd +07c8 B.U.G., Inc. +07c9 Allied Telesyn International +07ca AVerMedia Technologies, Inc. +07cb Kingmax Technology, Inc. +07cc Carry Computer Eng., Co., Ltd + 0000 CF Card Reader + 0003 SM Card Reader + 0004 SM/CF/PCMCIA Card Reader + 0006 SM/CF/PCMCIA Card Reader + 000c SM/CF Card Reader + 000d SM/CF Card Reader + 0200 6-in-1 Card Reader + 0301 6-in-1 Card Reader +07cd Elektor + 0001 USBuart Serial Port +07cf Casio Computer Co., Ltd + 1001 QV-8000SX/5700/3000EX Digicam + 1003 Exilim EX-S500 + 1004 Exilim EX-Z120 + 2002 E-125 Cassiopeia Pocket PC + 3801 WMP-1 MP3-Watch + 4001 Label Printer KL-P1000 + 4500 LV-20 Digital Camera +07d0 Dazzle + 0001 Digital Video Creator I + 0002 Global Village VideoFX Grabber + 0003 Fusion Model DVC-50 Rev 1 (NTSC) + 0004 DVC-800 (PAL) Grabber +07d1 D-Link System +07d2 Aptio Products, Inc. +07d3 Cyberdata Corp. +07d7 GCC Technologies, Inc. +07da Arasan Chip Systems +07df David Electronics Co., Ltd +07e1 Ambient Technologies, Inc. + 5201 V.90 Modem +07e2 Elmeg GmbH & Co., Ltd +07e3 Planex Communications, Inc. +07e4 Movado Enterprise Co., Ltd +07e5 QPS, Inc. + 5c01 Que! CDRW +07e6 Allied Cable Corp. +07e7 Mirvo Toys, Inc. +07e8 Labsystems +07ea Iwatsu Electric Co., Ltd +07eb Double-H Technology Co., Ltd +07ec Taiyo Electric Wire & Cable Co., Ltd +07ee Torex Retail (formerly Logware) + 0002 Cash Drawer I/F +07f6 Circuit Assembly Corp. +07f7 Century Corp. +07f9 Dotop Technology, Inc. +07fa Draytek + 0778 miniVigor 128 ISDN TA +07fd Mark of the Unicorn + 0000 FastLane MIDI Interface +0801 Mag-Tek + 0002 Mini Swipe Reader +0802 Mako Technologies, LLC +0803 Zoom Telephonics, Inc. + 9700 2986L FaxModem +0809 Genicom Technology, Inc. +080a Evermuch Technology Co., Ltd +080c Datalogic S.p.A. + 0300 Gryphon D120 Barcode Scanner + 0400 Gryphon D120 Barcode Scanner + 0500 Gryphon D120 Barcode Scanner + 0600 Gryphon M100 Barcode Scanner +080d Teco Image Systems Co., Ltd + 0102 Hercules Scan@home 48 +0810 Personal Communication Systems, Inc. +0813 Mattel, Inc. + 0001 Intel Play QX3 Microscope +081a MG Logic + 1000 Duo Pen Tablet +081b Indigita Corp. +081c Mipsys +081e AlphaSmart, Inc. +0822 Reudo Corp. +0825 GC Protronics +0826 Data Transit +0827 BroadLogic, Inc. +0828 Sato Corp. +0829 DirecTV Broadband, Inc. (Telocity) +082d Handspring + 0100 Visor + 0300 Treo 600 +0830 Palm, Inc. + 0002 Palm M505 + 0003 Palm M515 + 0020 Palm I705 + 0040 Palm M125 + 0050 Palm M130 + 0060 Palm Tungsten T / Zire 71 + 0080 USB Serial Adapter [for Palm III series to sync via USB] +0832 Kouwell Electronics Corp. +0833 Sourcenext Corp. +0835 Action Star Enterprise Co., Ltd +0839 Samsung Techwin Co., Ltd + 0005 Digimax Camera + 0008 Digimax 230 Camera + 0009 Digimax 340 + 000e Digimax 360 + 0010 Digimax 300 + 1003 Digimax 210SE + 1012 6500 Document Camera + 1542 Digimax 50 Duo + 3000 Digimax 35 MP3 +083a Accton Technology Corp. + 1046 10/100 Ethernet [pegasus] + 5046 SpeedStream 10/100 Ethernet [pegasus] +083f Global Village + b100 TelePort V.90 Fax/Modem +0840 Argosy Research, Inc. +0841 Rioport.com, Inc. + 0001 Rio 500 +0844 Welland Industrial Co., Ltd +0846 NetGear, Inc. + 1001 EA101 Ethernet [klsi] + 4110 MA111 WiFi (v1) + 4200 WG121 WiFi (v1) + 4210 WG121 WiFi (v2) + 4220 WG111 WiFi (v1) + 4230 MA111 WiFi + 4240 WG111 WiFi (v2) + 6a00 WG111 WiFi (v2) +084d Minton Optic Industry Co., Inc. + 0001 Jenoptik JD800i + 0003 S-Cam F5 Digital Camera + 0011 Argus DC3500 Digital Camera + 0014 Praktica DC 32 + 1001 ScanHex SX-35d +084e KB Gear + 0001 KBGear JamCam + 1002 Pablo Tablet +084f Empeg + 0001 Empeg-Car Mark I/II Player +0850 Fast Point Technologies, Inc. +0851 Macronix International Co., Ltd + 1542 SiPix Blink + 1543 Maxell WS30 Slim Digital Camera +0852 CSEM +0854 ActiveWire, Inc. + 0100 I/O Board + 0101 I/O Board, rev1 +0856 B&B Electronics + AC01 uLinks USOTL4 RS422/485 Adapter +0858 Hitachi Maxell, Ltd +0859 Minolta Systems Laboratory, Inc. +085a Xircom + 0001 Portstation Dual Serial Port + 0003 Portstation Paraller Port + 000b Portstation Dual PS/2 Port + 0299 Colorvision, Inc. Monitor Spyder + 8027 PGSDB9 Serial Port +085c ColorVision, Inc. + 0200 Monitor Spyder +0862 Teletrol Systems, Inc. +0863 Filanet Corp. +0864 NetGear, Inc. + 4100 MA101 802.11b Adapter + 4102 MA101 802.11b Adapter +0867 Data Translation, Inc. + 9812 ECON Data acquisition unit +086a Emagic Soft-und Hardware GmbH +086c DeTeWe - Deutsche Telephonwerke AG & Co. + 1001 Eumex 504PC ISDN TA + 1003 TA33 ISDN TA + 1055 Eumex 220 ISDN TA +086e System TALKS, Inc. +086f MEC IMEX, Inc. +0870 Metricom +0871 SanDisk, Inc. + 0001 SDDR-01 Compact Flash Reader + 0002 SDDR-31 Compact Flash Reader + 0005 SDDR-05 Compact Flash Reader +0873 Xpeed, Inc. +0874 A-Tec Subsystem, Inc. +0879 Comtrol Corp. +087c Adesso/Kbtek America, Inc. +087d Jaton Corp. +087e Fujitsu Computer Products of America +087f Virtual IP Group, Inc. +0880 APT Technologies, Inc. +0883 Recording Industry Association of America (RIAA) +0885 Boca Research, Inc. +0886 XAC Automation Corp. + 0630 Intel PC Camera CS630 +0887 Hannstar Electronics Corp. +088b MassWorks, Inc. + 4944 MassWorks ID-75 TouchScreen +0892 DioGraphy, Inc. +089c United Technologies Research Cntr. +089d Icron Technologies Corp. +089e NST Co., Ltd +089f Primex Aerospace Co. +08a5 e9, Inc. +08a8 Andrea Electronics +08ae Macally (Mace Group, Inc.) +08b4 Sorenson Vision, Inc. +08b8 J. Gordon Electronic Design, Inc. + 01f4 USBSIMM1 +08b9 RadioShack Corp. (Tandy) +08bb Texas Instruments Japan + 2900 PCM2900 Audio Codec + 2904 PCM2904 Audio Codec +08bd Citizen Watch Co., Ltd +08c3 Precise Biometrics + 0101 Precise 100 MC FingerPrint and SmartCard Reader +08c4 Proxim, Inc. +08c7 Key Nice Enterprise Co., Ltd +08c8 2Wire, Inc. +08c9 Nippon Telegraph and Telephone Corp. +08ca Aiptek International, Inc. + 0010 Tablet + 0020 APT-6000U Tablet + 0021 APT-2 Tablet + 0022 Tablet + 0023 Tablet + 0024 Tablet + 0102 DualCam + 0103 Pocket DV Digital Camera + 0104 Pocket DVII + 0106 Pocket DV3100+ + 0107 Pocket DV 3100 + 0111 PenCam VGA Plus + 2008 Mini PenCam 2 + 2010 Pocket CAM 3 Mega (webcam) + 2011 Pocket CAM 3 Mega (storage) + 2018 Pencam SD 2 + 2024 Pocket DV3500 +08cd Jue Hsun Ind. Corp. +08ce Long Well Electronics Corp. +08cf Productivity Enhancement Products +08d1 smartBridges, Inc. + 0001 smartNIC Ethernet [catc] +08d3 Virtual Ink +08d4 Fujitsu Siemens Computers + 0009 SCR SmartCard Reader +08d9 Increment P Corp. +08dd Billionton Systems, Inc. + 0986 USB-100N Ethernet [pegasus] + 0987 USBLP-100 HomePNA Ethernet [pegasus] + 0988 USBEL-100 Ethernet [pegasus] + 8511 USBE-100 Ethernet [pegasus2] +08de ??? + 7a01 802.11b Adapter +08df Spyrus, Inc. +08e3 Olitec, Inc. + 0002 USB-RS232 Bridge +08e4 Pioneer Corp. +08e5 Litronic +08e6 Gemplus + 0430 GemPC430 SmartCard Reader + 0432 GemPC432 SmartCard Reader + 0435 GemPC435 SmartCard Reader + 0437 GemPC433 SL SmartCard Reader + 3437 GemPC Twin SmartCard Reader + 3438 GemPC Key SmartCard Reader +08e7 Pan-International Wire & Cable +08e8 Integrated Memory Logic +08e9 Extended Systems, Inc. + 0100 XTNDAccess IrDA Dongle +08ea Ericsson, Inc., Blue Ridge Labs + abba USB Driver for Bluetooth Wireless Technology +08ec M-Systems Flash Disk Pioneers + 0010 DiskOnKey +08ee CCSI/Hesso +08f0 Corex Technologies +08f1 CTI Electronics Corp. +08f5 SysTec Co., Ltd +08f6 Logic 3 International, Ltd +08f7 Vernier + 0001 LabPro + 0002 EasyTemp +08f8 Keen Top International Enterprise Co., Ltd +08f9 Wipro Technologies +08fa Caere +08fb Socket Communications +08fc Sicon Cable Technology Co., Ltd +08fd Digianswer A/S +08ff AuthenTec, Inc. +0900 Pinnacle Systems, Inc. +0901 VST Technologies +0906 Faraday Technology Corp. +0909 Audio-Technica Corp. +090a Trumpion Microelectronics, Inc. + 1540 Digitex Container Flash Disk +090b Neurosmith +090c Feiya Technology Corp. + 1000 Memory Bar +090d Multiport Computer Vertriebs GmbH +090e Shining Technology, Inc. +090f Fujitsu Devices, Inc. +0910 Alation Systems, Inc. +0911 Philips Speech Processing +0912 Voquette, Inc. +0915 GlobeSpan, Inc. +0917 SmartDisk Corp. +0919 Tiger Electronics + 0100 Fast Flicks Digital Camera +091e Garmin International + 0003 GPSmap (various models) + 0004 Garmin iQue 3600 +0920 Echelon Co. +0921 GoHubs, Inc. +0922 Dymo-CoStar Corp. + 0007 LabelWriter 330 + 0009 LabelWriter 310 +0923 IC Media Corp. + 010f SIIG MobileCam +0924 Xerox +0925 Lakeview Research + 8101 Phidgets, Inc., 1-Motor PhidgetServo v2.0 + 8104 Phidgets, Inc., 4-Motor PhidgetServo v2.0 + 8800 WiseGroup Ltd, MP-8800 Quad Joypad + 8866 WiseGroup Ltd, MP-8866 Dual Joypad +0927 Summus, Ltd +0928 Oxford Semiconductor, Ltd +0929 American Biometric Co. +092a Toshiba Information & Industrial Sys. And Services +092b Sena Technologies, Inc. +0930 Toshiba Corp. + 0009 Toshiba Gigabeat (HDD audio player) + 6519 Kingston DataTraveler 2.0 USB Stick + 6533 512M USB Stick +0931 Harmonic Data Systems, Ltd +0932 Crescentec Corp. +0933 Quantum Corp. +0934 Netcom Systems +0939 Lumberg, Inc. +093a Pixart Imaging, Inc. + 010e Digital camera, CD302N/Elta Medi@ digi-cam/HE-501A + 010f Argus DC-1610/DC-1620/Emprex PCD3600/Philips P44417B keychain camera/Precision Mini,Model HA513A/Vivitar Vivicam 55 + 2468 Easy Snap Snake Eye WebCam + 2500 USB Optical Mouse +093b Plextor Corp. + 0042 PX-712UF DVD RW +093c Intrepid Control Systems, Inc. + 0601 ValueCAN +093d InnoSync, Inc. +093e J.S.T. Mfg. Co., Ltd +093f Olympia Telecom Vertriebs GmbH +0940 Japan Storage Battery Co., Ltd +0941 Photobit Corp. +0942 i2Go.com, LLC +0943 HCL Technologies India Private, Ltd +0944 KORG, Inc. +0945 Pasco Scientific +0948 Kronauer music in digital + 0301 USB Pro (24/48) + 0302 USB Pro (24/96 playback) + 0303 USB Pro (24/96 record) + 0304 USB Pro (16/48) + 1105 USB One +094b Linkup Systems Corp. +094d Cable Television Laboratories +0951 Kingston Technology + 000a KNU101TX 100baseTX Ethernet + 1600 Data Traveler II Pen Drive +0954 RPM Systems Corp. +0955 NVidia Corp. +0956 BSquare Corp. +0957 Agilent Technologies, Inc. +0958 CompuLink Research, Inc. +0959 Cologne Chip AG +095a Portsmith +095b Medialogic Corp. +095c K-Tec Electronics +095d Polycom, Inc. +0967 Acer (??) + 0204 WarpLink 802.11b Adapter +0968 Catalyst Enterprises, Inc. +0971 Gretag-Macbeth AG +0973 Schlumberger +0974 Datagraphix, a business unit of Anacomp +0975 OL'E Communications, Inc. +0976 Adirondack Wire & Cable +0977 Lightsurf Technologies +0978 Beckhoff GmbH +0979 Jeilin Technology Corp., Ltd +097a Minds At Work LLC +097b Knudsen Engineering, Ltd +097c Marunix Co., Ltd +097d Rosun Technologies, Inc. +097f Barun Electronics Co., Ltd +0981 Oak Technology, Ltd +0984 Apricorn +0985 cab Produkttechnik GmbH & Co KG + 00a3 A3/200 or A3/300 Label Printer +098c Vitana Corp. +098d INDesign +098e Integrated Intellectual Property, Inc. +098f Kenwood TMI Corp. +0993 Gemstar eBook Group, Ltd + 0001 REB1100 eBook Reader +0996 Integrated Telecom Express, Inc. +099a Zippy Technology Corp. + 610c EL-610 Super Mini Electron luminescent Keyboard +09a3 PairGain Technologies +09a4 Contech Research, Inc. +09a5 VCON Telecommunications +09a6 Poinchips +09a7 Data Transmission Network Corp. +09a8 Lin Shiung Enterprise Co., Ltd +09a9 Smart Card Technologies Co., Ltd +09aa Intersil Corp. + 1000 Prism GT 802.11b/g Adapter + 3642 Prism 2.x 802.11b Adapter +09ae Tripp Lite +09b2 Franklin Electronic Publishers, Inc. + 0001 eBookman Palm Computer +09b3 Altius Solutions, Inc. +09b4 MDS Telephone Systems +09b5 Celltrix Technology Co., Ltd +09bc Grundig + 0002 MPaxx MP150 MP3 Player +09be MySmart.Com + 0001 MySmartPad +09bf Auerswald GmbH & Co. KG + 00c0 COMpact 2104 ISDN PBX + 00db COMpact 4410/2206 ISDN ISDN + 00f1 COMfort System Telephones +09c1 Arris Interactive LLC +09c2 Nisca Corp. +09c3 ActivCard, Inc. + 0008 SmartCard Reader +09c4 ACTiSYS Corp. + 0011 ACT-IR2000U IrDA Dongle +09c5 Memory Corp. +09cc Workbit Corp. +09cd Psion Dacom Home Networks, Ltd +09ce City Electronics, Ltd +09cf Electronics Testing Center, Taiwan +09d1 NeoMagic, Inc. +09d2 Vreelin Engineering, Inc. +09d3 Com One + 0001 ISDN TA +09d9 KRF Tech, Ltd +09da A4 Tech Co., Ltd + 0006 Optical Mouse WOP-35 / Trust 450L Optical Mouse + 001a Wireless Mouse & RXM-15 Receiver + 002a Wireless Optical Mouse NB-30 +09db Measurement Computing Corp. + 0075 MiniLab 1008 + 0076 PMD-1024 + 007A PMD-1208LS +09dc Aimex Corp. +09dd Fellowes, Inc. +09df Addonics Technologies Corp. +09e1 Intellon Corp. +09e5 Jo-Dan International, Inc. +09e6 Silutia, Inc. +09e7 Real 3D, Inc. +09e8 AKAI Professional M.I. Corp. +09e9 Chen-Source, Inc. +09eb IM Networks, Inc. + 4331 iRhythm Tuner Remote +09ef Xitel + 0101 MD-Port DG2 MiniDisc Interface +09f5 AresCom +09f6 RocketChips, Inc. +09f7 Edu-Science (H.K.), Ltd +09f8 SoftConnex Technologies, Inc. +09f9 Bay Associates +09fa Mtek Vision +09fb Altera +09ff Gain Technology Corp. +0a00 Liquid Audio +0a01 ViA, Inc. +0a07 Ontrak Control Systems Inc. + 0064 ADU100 Data Acquisition Interface + 00c8 ADU200 Relay I/O Interface + 00d0 ADU208 Data Acquisition Interface +0a0b Cybex Computer Products Co. +0a11 Xentec, Inc. +0a12 Cambridge Silicon Radio, Ltd + 0001 Bluetooth Dongle (HCI mode) + 1000 Bluetooth Dongle (HID proxy mode) +0a13 Telebyte, Inc. +0a14 Spacelabs Medical, Inc. +0a15 Scalar Corp. +0a16 Trek Technology (S) PTE, Ltd + 9988 Trek2000 TD-G2 +0a17 Pentax Corp. + 0004 Pentax Optio 330 + 0006 Pentax Optio S + 0007 Pentax Optio 550 + 0009 Pentax Optio 33WR + 000a Pentax Optio 555 + 000c Pentax Optio 43WR (mass storage mode) + 000d Pentax Optio 43WR + 0015 Pentax Optio S40/S5i + 003b Pentax Optio 50 (mass storage mode) + 003d Pentax Optio S55 + 0043 Pentax *ist DL + 0047 Pentax Optio S60 +0a18 Heidelberger Druckmaschinen AG +0a19 Hua Geng Technologies, Inc. +0a21 Medtronic Physio Control Corp. +0a22 Century Semiconductor USA, Inc. +0a2c AK-Modul-Bus Computer GmbH + 0008 GPIO Ports +0a39 Gilat Satellite Networks, Ltd +0a3a PentaMedia Co., Ltd +0a3c NTT DoCoMo, Inc. +0a3d Varo Vision +0a3f Swissonic AG +0a43 Boca Systems, Inc. +0a46 Davicom Semiconductor, Inc. +0a47 Hirose Electric +0a48 I/O Interconnect + 3258 Dane Elec zMate SD Reader + 3259 Dane Elec zMate CF Reader +0a4b Fujitsu Media Devices, Ltd +0a4c Computex Co., Ltd +0a4d Evolution Electronics, Ltd + 008e MK-249C MIDI Keyboard + 00a3 MK-461C MIDI Keyboard + 00f5 UC-33e MIDI Controller +0a4e Steinberg Soft-und Hardware GmbH +0a4f Litton Systems, Inc. +0a50 Mimaki Engineering Co., Ltd +0a51 Sony Electronics, Inc. +0a52 Jebsee Electronics Co., Ltd +0a53 Portable Peripheral Co., Ltd +0a5a Electronics For Imaging, Inc. +0a5b EAsics NV +0a5c Broadcom Corp. + 200a Bluetooth dongle + 2033 BCM2033 Bluetooth + 2035 BCM2035 Bluetooth +0a5d Diatrend Corp. +0a5f Zebra + 0009 LP2844 Printer +0a62 MPMan + 0010 MPMan MP-F40 MP3 Player +0a66 ClearCube Technology +0a67 Medeli Electronics Co., Ltd +0a68 Comaide Corp. +0a69 Chroma ate, Inc. +0a6b Green House Co., Ltd + 0001 Compact Flash R/W with MP3 player +0a6c Integrated Circuit Systems, Inc. +0a6d UPS Manufacturing +0a6e Benwin +0a6f Core Technology, Inc. + 0400 Xanboo +0a70 International Game Technology +0a72 Sanwa Denshi +0a7d NSTL, Inc. +0a7e Octagon Systems Corp. +0a80 Rexon Technology Corp., Ltd +0a81 Chesen Electronics Corp. + 0101 Keyboard + 0103 Keyboard + 0203 Mouse + 0205 PS/2 Keyboard+Mouse Adapter +0a82 Syscan + 4600 TravelScan 460/464 +0a83 NextComm, Inc. +0a84 Maui Innovative Peripherals +0a85 Idexx Labs +0a86 NITGen Co., Ltd +0a8d Picturetel +0a8e Japan Aviation Electronics Industry, Ltd +0a90 Candy Technology Co., Ltd +0a91 Globlink Technology, Inc. +0a92 EGO SYStems, Inc. +0a93 C Technologies AB +0a94 Intersense +0aa3 Lava Computer Mfg., Inc. +0aa4 Develco Elektronik +0aa5 First International Digital +0aa6 Perception Digital, Ltd + 0101 Hercules Jukebox +0aa7 Wincor Nixdorf GmbH & Co KG + 0200 POS Display BA63 + 0201 POS Display BA66 + 0300 POS Printer TH210 + 0302 POS Printer TH220 + 0305 Lottery Printer XiPrintPlus + 0306 POS Printer TH320 + 0308 POS Printer TH420 + 4304 Banking Printer TP07 +0aa8 TriGem Computer, Inc. +0aa9 Baromtec Co. + f01b Medion MD 6242 MP3 Player +0aaa Japan CBM Corp. +0aab Vision Shape Europe SA +0aac iCompression, Inc. +0aad Rohde & Schwarz GmbH & Co. KG +0aae NEC infrontia Corp. (Nitsuko) +0aaf Digitalway Co., Ltd +0ab0 Arrow Strong Electronics Co., Ltd +0aba Ellisys + 8001 USB Tracker 110 Protocol Analyzer +0abe Stereo-Link + 0101 SL1200 DAC +0ac3 Sanyo Semiconductor Company Micro +0ac4 Leco Corp. +0ac5 I & C Corp. +0ac6 Singing Electrons, Inc. +0ac7 Panwest Corp. +0ac8 Z-Star Microelectronics Corp. + 0302 ZC0302 WebCam + 0321 USB 2.0 Webcam + 301b ZC0301 WebCam + 303b ZC0303 WebCam + 305b ZC0305 WebCam +0ac9 Micro Solutions, Inc. + 0000 Backpack CD-ReWriter + 0011 Backpack 40GB Hard Drive +0aca OPEN Networks Ltd + 1060 OPEN NT1 Plus II +0acc Koga Electronics Co. +0acd ID Tech +0ace ZyDAS + 1201 802.11b WiFi + 1211 802.11b/g USB2 WiFi +0acf Intoto, Inc. +0ad0 Intellix Corp. +0ad1 Remotec Technology, Ltd +0ad2 Service & Quality Technology Co., Ltd +0ae3 Allion Computer, Inc. +0ae4 Taito Corp. +0ae7 Neodym Systems, Inc. +0ae8 System Support Co., Ltd +0ae9 North Shore Circuit Design L.L.P. +0aea SciEssence, LLC +0aeb TTP Communications, Ltd +0aec Neodio Technologies Corp. + 3050 ND3050 8-in-1 Card Reader + 3260 7-in-1 Card Reader + 5010 ND5010 Card Reader +0af0 Option + 5000 UMTS Card + 6300 GT 3G Quad UMTS/GPRS Card +0af6 Silver I Co., Ltd +0af7 B2C2, Inc. + 0101 Digital TV USB Receiver (DVB-S/T/C / ATSC) +0af9 Hama, Inc. + 0010 USB SightCam 100 + 0011 Micro Innovations IC50C WebCam +0afc Zaptronix Ltd +0afd Tateno Dennou, Inc. +0afe Cummins Engine Co. +0aff Jump Zone Network Products, Inc. +0b05 ASUSTek Computer, Inc. + 1706 WL-167G 802.11g Adapter [ralink] +0b0c Todos Data System AB + 0009 Todos Argos Mini II Smart Card Reader +0b0e GN Netcom +0b0f AVID Technology +0b10 Pcally +0b11 I Tech Solutions Co., Ltd +0b1e Electronic Warfare Assoc., Inc. (EWA) +0b1f Insyde Software Corp. +0b20 TransDimension, Inc. +0b21 Yokogawa Electric Corp. +0b22 Japan System Development Co., Ltd +0b23 Pan-Asia Electronics Co., Ltd +0b24 Link Evolution Corp. +0b27 Ritek Corp. +0b28 Kenwood Corp. +0b2c Village Center, Inc. +0b30 PNY Technologies, Inc. + 0006 SM Media-Shuttle Card Reader +0b33 Contour Design, Inc. +0b37 Hitachi ULSI Systems Co., Ltd +0b39 Omnidirectional Control Technology, Inc. +0b3a IPaxess +0b3b Tekram Technology Co., Ltd + 1601 Allnet 0193 802.11b Adapter + 1602 ZyXEL ZyAIR B200 802.11b Adapter + 1612 AIR.Mate 2@net 802.11b Adapter + 1620 Allnet USB 2.0 Wireless Network Adapter +0b3c Olivetti Techcenter + a010 Simple_Way Printer/Scanner/Copier +0b3e Kikusui Electronics Corp. +0b41 Hal Corp. +0b43 Play.com, Inc. + 0003 PS2 Controller Converter +0b47 Sportbug.com, Inc. +0b48 TechnoTrend AG + 1003 Technotrend/Hauppauge USB-Nova + 1005 Technotrend/Hauppauge USB-Nova + 1006 Technotrend/Hauppauge DEC3000-s + 1008 Technotrend/Hauppauge DEC2000-t + 1009 Technotrend/Hauppauge DEC2540-t +0b49 ASCII Corp. + 064f Trance Vibrator +0b4b Pine Corp. Ltd. + 0100 D'music MP3 Player +0b4e Musical Electronics, Ltd +0b50 Dumpries Co., Ltd +0b51 Comfort Keyboard Co. + 0020 Comfort Keyboard +0b52 Colorado MicroDisplay, Inc. +0b54 Sinbon Electronics Co., Ltd +0b56 TYI Systems, Ltd +0b57 Beijing HanwangTechnology Co., Ltd +0b59 Lake Communications, Ltd +0b5a Corel Corp. +0b5f Green Electronics Co., Ltd +0b60 Nsine, Ltd +0b61 NEC Viewtechnology, Ltd +0b62 Orange Micro, Inc. + 0059 iBOT2 WebCam +0b63 ADLink Technology, Inc. +0b64 Wonderful Wire Cable Co., Ltd +0b65 Expert Magnetics Corp. +0b69 CacheVision +0b6a Maxim Integrated Products +0b6f Nagano Japan Radio Co., Ltd +0b70 PortalPlayer, Inc. +0b71 SHIN-EI Sangyo Co., Ltd +0b72 Embedded Wireless Technology Co., Ltd +0b73 Computone Corp. +0b75 Roland DG Corp. +0b79 Sunrise Telecom, Inc. +0b7a Zeevo, Inc. +0b7b Taiko Denki Co., Ltd +0b7c ITRAN Communications, Ltd +0b7d Astrodesign, Inc. +0b84 Rextron Technology, Inc. +0b85 Elkat Electronics, Sdn., Bhd. +0b86 Exputer Systems, Inc. +0b87 Plus-One I & T, Inc. +0b88 Sigma Koki Co., Ltd, Technology Center +0b89 Advanced Digital Broadcast, Ltd +0b95 ASIX Electronics Corp. +0b96 Sewon Telecom +0b97 O2 Micro, Inc. + 7762 Oz776 SmartCard Reader +0b98 Playmates Toys, Inc. +0b99 Audio International, Inc. +0b9b Dipl.-Ing. Stefan Kunde + 4012 Reflex RC-controller Interface +0b9d Softprotec Co. +0b9f Chippo Technologies +0baf U.S. Robotics + 00eb USR1120 802.11b Adapter + 0118 U5 802.11g Adapter + 6112 FaxModem Model 5633 +0bb0 Concord Camera Corp. + 5007 3340z/Rollei DC3100 +0bb1 Infinilink Corp. +0bb2 Ambit Microsystems Corp. + 6098 USB Cable Modem +0bb3 Ofuji Technology +0bb4 High Tech Computer Corp. + 00ce mmO2 XDA GSM/GPRS Pocket PC + 00cf SPV C500 Smart Phone + 0a02 Himalaya GSM/GPRS Pocket PC + 0a51 SPV C400 / T-Mobile SDA GSM/GPRS Pocket PC +0bb5 Murata Manufacturing Co., Ltd +0bb6 Network Alchemy +0bb7 Joytech Computer Co., Ltd +0bb8 Hitachi Semiconductor and Devices Sales Co., Ltd +0bb9 Eiger M&C Co., Ltd +0bba ZAccess Systems +0bbb General Meters Corp. +0bbc Assistive Technology, Inc. +0bbd System Connection, Inc. +0bc0 Knilink Technology, Inc. +0bc1 Fuw Yng Electronics Co., Ltd +0bc2 Seagate RSS LLC +0bc3 IPWireless, Inc. +0bc4 Microcube Corp. +0bc5 JCN Co., Ltd +0bc6 ExWAY, Inc. +0bc7 X10 Wireless Technology, Inc. + 0004 X10 Receiver +0bc8 Telmax Communications +0bc9 ECI Telecom, Ltd +0bca Startek Engineering, Inc. +0bcb Perfect Technic Enterprise Co., Ltd +0bd7 Andrew Pargeter & Associates + a021 Amptek DP4 multichannel signal analyzer +0bda Realtek Semiconductor Corp. + 8150 RTL8150 Fast Ethernet Adapter + 8151 RTL8151 Adapteon Business Mobile Networks BV +0bdb Ericsson Business Mobile Networks BV +0bdc Y Media Corp. +0bdd Orange PCS +0be2 Kanda Tsushin Kogyo Co., Ltd +0be3 TOYO Corp. +0be4 Elka International, Ltd +0be5 DOME imaging systems, Inc. +0be6 Dong Guan Humen Wonderful Wire Cable Factory +0bee LTK Industries, Ltd +0bef Way2Call Communications +0bf0 Pace Micro Technology PLC +0bf1 Intracom S.A. +0bf2 Konexx +0bf6 Addonics Technologies, Inc. + a002 IDE Bridge +0bf7 Sunny Giken, Inc. +0bf8 Fujitsu Siemens Computers + 1001 Fujitsu Pocket Loox 600 PDA +0c04 MOTO Development Group, Inc. +0c05 Appian Graphics +0c06 Hasbro Games, Inc. +0c07 Infinite Data Storage, Ltd +0c08 Agate + 0378 Q 16MB Storage Device +0c09 Comjet Information System +0c0a Highpoint Technologies, Inc. +0c0b Dura Micro, Inc. (Acomdata) + 27cb 6-in-1 Flash Reader and Writer + a109 CF/SM Reader and Writer + a10c SD/MS Reader and Writer + b001 USB 2.0 Mass Storage IDE adapter + b004 MMC/SD Reader and Writer +0c12 Zeroplus + 0005 PSX Vibration Feedback Converter + 8809 Red Octane Ignition Xbox DDR Pad +0c15 Iris Graphics +0c16 Gyration, Inc. +0c17 Cyberboard A/S +0c18 SynerTek Korea, Inc. +0c19 cyberPIXIE, Inc. +0c1a Silicon Motion, Inc. +0c1b MIPS Technologies +0c1c Hang Zhou Silan Electronics Co., Ltd +0c22 Tally Printer Corp. +0c23 Lernout + Hauspie +0c24 Taiyo Yuden +0c25 Sampo Corp. + 0310 Scream Cam +0c2e Metro + 0200 Metrologic Scanner +0c35 Eagletron, Inc. +0c36 E Ink Corp. +0c37 e.Digital +0c38 Der An Electric Wire & Cable Co., Ltd +0c39 IFR +0c3a Furui Precise Component (Kunshan) Co., Ltd +0c3b Komatsu, Ltd +0c3c Radius Co., Ltd +0c3d Innocom, Inc. +0c3e Nextcell, Inc. +0c44 Motorola iDEN +0c45 Microdia + 1060 iFlash SM-Direct Card Reader + 6001 Genius VideoCAM NB + 6005 Sweex Mini WebCam + 6029 Triplex i-mini PC Camera + 602a Meade ETX-105EC Camera + 602c Clas Ohlson TWC-30XOP WebCam + 6270 U-CAM PC Camera NE878 + 8000 DC31VC + 800a Vivitar Vivicam3350B +0c46 WaveRider Communications, Inc. +0c4b Reiner SCT Kartensysteme GmbH + 0100 cyberJack e-com/pinpad + 0300 cyberJack pinpad(a) +0c52 Sealevel Systems, Inc. +0c53 ViewPLUS, Inc. +0c54 Glory, Ltd +0c55 Spectrum Digital, Inc. + 0510 Spectrum Digital XDS510 JTAG Debugger +0c56 Billion Bright, Ltd +0c57 Imaginative Design Operation Co., Ltd +0c58 Vidar Systems Corp. +0c59 Dong Guan Shinko Wire Co., Ltd +0c5a TRS International Mfg., Inc. +0c5e Xytronix Research & Design +0c62 Chant Sincere Co., Ltd +0c63 Toko, Inc. +0c64 Signality System Engineering Co., Ltd +0c65 Eminence Enterprise Co., Ltd +0c66 Rexon Electronics Corp. +0c67 Concept Telecom, Ltd +0c70 MCT Elektronikladen + 0000 USB08 Development board +0c74 Optronic Laboratories Inc. + 0002 OL 700-30 Goniometer +0c76 JMTek, LLC. + 0003 USBdisk + 0005 Transcend USB Flash disk + 0006 Transcend JetFlash +0c77 Sipix Group, Ltd + 1001 SiPix Web2 + 1002 SiPix SC2100 + 1010 SiPix Snap + 1011 SiPix Blink 2 + 1015 SiPix CAMeleon +0c78 Detto Corp. +0c79 NuConnex Technologies Pte., Ltd +0c7a Wing-Span Enterprise Co., Ltd +0c86 NDA Technologies, Inc. +0c88 Kyocera Wireless Corp. +0c89 Honda Tsushin Kogyo Co., Ltd +0c8a Pathway Connectivity, Inc. +0c8b Wavefly Corp. +0c8c Coactive Networks +0c8d Tempo +0c8e Cesscom Co., Ltd +0c8f Applied Microsystems +0c99 Innochips Co., Ltd +0c9a Hanwool Robotics Corp. +0c9b Jobin Yvon, Inc. +0c9d SemTek + 0170 3873 Manual Insert card reader +0ca2 Zyfer +0ca3 Sega Corp. +0ca4 ST&T Instrument Corp. +0ca5 BAE Systems Canada, Inc. +0ca6 Castles Technology Co., Ltd +0ca7 Information Systems Laboratories +0cad Motorola CGISS +0cae Ascom Business Systems, Ltd +0caf Buslink + 2515 Flash Disk Embedded Hub + 2516 Flash Disk Security Device + 2517 Flash Disk Mass Storage Device + 3a00 Hard Drive +0cb0 Flying Pig Systems +0cb1 Innovonics, Inc. +0cb6 Celestix Networks, Pte., Ltd +0cb7 Singatron Enterprise Co., Ltd +0cb8 Opticis Co., Ltd +0cba Trust Electronic (Shanghai) Co., Ltd +0cbb Shanghai Darong Electronics Co., Ltd +0cbc Palmax Technology Co., Ltd +0cbd Pentel Co., Ltd (Electronics Equipment Div.) +0cbe Keryx Technologies, Inc. +0cbf Union Genius Computer Co., Ltd +0cc0 Kuon Yi Industrial Corp. +0cc1 Given Imaging, Ltd +0cc2 Timex Corp. +0cc3 Rimage Corp. +0cc4 emsys GmbH +0cc5 Sendo +0cc6 Intermagic Corp. +0cc7 Kontron Medical AG +0cc8 Technotools Corp. +0cc9 BroadMAX Technologies, Inc. +0cca Amphenol +0ccb SKNet Co., Ltd +0ccc Domex Technology Corp. +0ccd TerraTec Electronic GmbH + 0038 Cinergy T^2 DVB-T Receiver +0cd4 Bang Olufsen + 0101 BeolinkPC2 +0cd7 NewChip S.r.l. +0cd8 JS Digitech, Inc. +0cd9 Hitachi Shin Din Cable, Ltd +0cde Z-Com + 0002 XI-725/726 Prism2.5 802.11b Adapter + 0005 XI-735 Prism3 802.11b Adapter + 0006 Medion 40900 802.11b Adapter +0cf1 e-Conn Electronic Co., Ltd +0cf2 ENE Technology, Inc. +0cf3 Atheros Communications, Inc. +0cf4 Fomtex Corp. +0cf5 Cellink Co., Ltd +0cf6 Compucable Corp. +0cf7 ishoni Networks +0cf8 Clarisys, Inc. +0cf9 Central System Research Co., Ltd +0cfa Inviso, Inc. +0cfc Minolta-QMS, Inc. +0cff SAFA MEDIA Co., Ltd. + 0320 SR-380N +0d06 telos EDV Systementwicklung GmbH +0d0b Contemporary Controls +0d0c Astron Electronics Co., Ltd +0d0d MKNet Corp. +0d0e Hybrid Networks, Inc. +0d0f Feng Shin Cable Co., Ltd +0d10 Elastic Networks +0d11 Maspro Denkoh Corp. +0d12 Hansol Electronics, Inc. +0d13 BMF Corp. +0d14 Array Comm, Inc. +0d15 OnStream b.v. +0d16 Hi-Touch Imaging Technologies Co., Ltd +0d17 NALTEC, Inc. +0d18 coaXmedia +0d19 Hank Connection Industrial Co., Ltd +0d32 Leo Hui Electric Wire & Cable Co., Ltd +0d33 AirSpeak, Inc. +0d34 Rearden Steel Technologies +0d35 Dah Kun Co., Ltd +0d3c Sri Cable Technology, Ltd +0d3d Tangtop Technology Co., Ltd +0d3e Fitcom, inc. +0d3f MTS Systems Corp. +0d40 Ascor, Inc. +0d41 Ta Yun Terminals Industrial Co., Ltd +0d42 Full Der Co., Ltd +0d46 Kobil Systems GmbH + 3003 mIDentity Light / KAAN SIM III + 4000 mIDentity (mass storage) + 4001 mIDentity Basic/Classic (composite device) + 4081 mIDentity Basic/Classic (installationless) +0d49 Maxtor +0d4a NF Corp. +0d4b Grape Systems, Inc. +0d4c Tedas AG +0d4d Coherent, Inc. +0d4e Agere Systems Netherland BV +0d4f EADS Airbus France +0d50 Cleware GmbH + 0011 USB-Temp2 Thermometer +0d51 Volex (Asia) Pte., Ltd +0d53 HMI Co., Ltd +0d54 Holon Corp. +0d55 ASKA Technologies, Inc. +0d56 AVLAB Technology, Inc. +0d57 Solomon Microtech, Ltd +0d5c Belkin + a002 F5D6050 802.11b Adapter +0d5e Myacom, Ltd +0d5f CSI, Inc. +0d60 IVL Technologies, Ltd +0d61 Meilu Electronics (Shenzhen) Co., Ltd +0d62 Darfon Electronics Corp. + a100 Benq Mouse +0d63 Fritz Gegauf AG +0d64 DXG Technology Corp. + 0107 Horus MT-409 Camera + 0303 DXG-305V Camera + 1001 SiPix Stylecam/UMAX AstraPix 320s + 1021 D-Link DSC 350F +0d65 KMJP Co., Ltd +0d66 TMT +0d67 Advanet, Inc. +0d68 Super Link Electronics Co., Ltd +0d69 NSI +0d6a Megapower International Corp. +0d6b And-Or Logic +0d70 Try Computer Co., Ltd +0d71 Hirakawa Hewtech Corp. +0d72 Winmate Communication, Inc. +0d73 Hit's Communications, Inc. +0d76 MFP Korea, Inc. +0d77 Power Sentry/Newpoint +0d78 Japan Distributor Corp. +0d7a MARX Datentechnik GmbH +0d7b Wellco Technology Co., Ltd +0d7c Taiwan Line Tek Electronic Co., Ltd +0d7d Phison Electronics Corp. + 0100 PS1001/1011/1006/1026 Flash Disk + 0110 Gigabyte FlexDrive + 0240 I/O-Magic/Transcend 6-in-1 Card Reader + 110E NEC uPD720121/130 USB-ATA/ATAPI Bridge + 1240 Apacer 6-in-1 Card Reader 2.0 + 1270 Wolverine SixPac 6000 + 1300 Flash Disk + 1320 PS2031 Flash Disk + 1420 PS2044 Pen Drive + 1470 Vosonic X's-Drive II+ VP2160 + 1900 USB Thumb Drive +0d7e American Computer & Digital Components +0d7f Essential Reality LLC +0d80 H.R. Silvine Electronics, Inc. +0d81 TechnoVision +0d83 Think Outside, Inc. +0d89 Oz Software +0d8a King Jim Co., Ltd +0d8b Ascom Telecommunications, Ltd +0d8c C-Media Electronics, Inc. + 000c Audio Adapter + 000e Audio Adapter (Planet UP-100 USB Phone) + 0103 Turtle Beach Audio Advantage Micro + b213 USB Phone CM109 (aka CT2000,VPT1000) +0d8d Promotion & Display Technology, Ltd +0d8e Global Sun Technology, Inc. + 7100 802.11b Adapter + 7a01 PRISM25 802.11b Adapter +0d8f Pitney Bowes +0d90 Sure-Fire Electrical Corp. +0d96 Skanhex Technology, Inc. + 0000 Jenoptik JD350 video + 3300 SX330z Camera + 4100 SX410z Camera + 4102 MD 9700 Camera + 4104 Jenoptik JD-4100z3s + 410a Medion 9801/Novatech SX-410z + 5200 SX-520z Camera +0d97 Santa Barbara Instrument Group + 0001 SBIG Astronomy Camera (without firmware) + 0101 SBIG Astronomy Camera (with firmware) +0d98 Mars Semiconductor Corp. +0d99 Trazer Technologies, Inc. +0d9a RTX Telecom AS +0d9b Tat Shing Electrical Co. +0d9c Chee Chen Hi-Technology Co., Ltd +0d9d Sanwa Supply, Inc. +0d9e Avaya +0d9f Powercom Co., Ltd +0da0 Danger Research +0da1 Suzhou Peter's Precise Industrial Co., Ltd +0da2 Land Instruments International, Ltd +0da3 Nippon Electro-Sensory Devices Corp. +0da4 Polar Electro OY +0da7 IOGear, Inc. +0da8 softDSP Co., Ltd + 0001 SDS 200A Oscilloscope +0dab Cubig Group + 0100 DVR/CVR-M140 MP3 Player +0dad Westover Scientific +0db0 Micro Star International + 1967 Bluetooth Dongle + 4011 Medion Flash XL V2.0 Card Reader + 697a Bluetooth Dongle + 6982 Medion Flash XL V2.7A Card Reader + a970 Bluetooth dongle +0db1 Wen Te Electronics Co., Ltd +0db2 Shian Hwi Plug Parts, Plastic Factory +0db3 Tekram Technology Co., Ltd +0db4 Chung Fu Chen Yeh Enterprise Corp. +0dbe Jiuh Shiuh Precision Industry Co., Ltd +0dbf Quik Tech Solutions +0dc0 Great Notions +0dc1 Tamagawa Seiki Co., Ltd +0dc3 Athena Smartcard Solutions, Inc. +0dc4 Macpower Peripherals, Ltd +0dc5 SDK Co., Ltd +0dc6 Precision Squared Technology Corp. +0dc7 First Cable Line, Inc. +0dcd NetworkFab Corp. + 0001 Remote Interface Adapter + 0002 High Bandwidth Codec +0dd0 Access Solutions + 1002 Triple Talk Speech Synthesizer +0dd1 Contek Electronics Co., Ltd +0dd2 Power Quotient International Co., Ltd +0dd3 MediaQ +0dd4 Custom Engineering SPA +0dd5 California Micro Devices +0dd7 Kocom Co., Ltd +0dd8 Netac Technology Co., Ltd + e007 OnlyDisk U222 Pendrive +0dd9 HighSpeed Surfing +0dda Integrated Circuit Solution, Inc. + 2026 USB2.0 Card Reader + 2027 USB 2.0 Card Reader +0ddb Tamarack, Inc. +0ddd Datelink Technology Co., Ltd +0dde Ubicom, Inc. +0de0 BD Consumer Healthcare +0ded Novasonics +0dee Lifetime Memory Products +0def Full Rise Electronic Co., Ltd +0df6 Sitecom Europe B.V. + 9071 zd1211 802.11g Adapter +0df7 Mobile Action Technology, Inc. + 0620 MA-620 Infrared Adapter + 0700 MA-700 Bluetooth Adapter +0dfa Toyo Communication Equipment Co., Ltd +0dfc GeneralTouch Technology Co., Ltd + 0001 Touchscreen +0e03 Nippon Systemware Co., Ltd +0e08 Winbest Technology Co., Ltd +0e0c Gesytec + 0101 LonUSB LonTalk Network Adapter +0e16 JMTek, LLC +0e17 Walex Electronic, Ltd +0e1b Crewave +0e21 Cowon Systems, Inc. + 0300 iAudio CW200 + 0510 iAudio X5 + 0700 iAudio U3 +0e23 Liou Yuane Enterprise Co., Ltd +0e25 VinChip Systems, Inc. +0e26 J-Phone East Co., Ltd +0e30 HeartMath LLC +0e34 Micro Computer Control Corp. +0e35 3Pea Technologies, Inc. +0e36 TiePie engineering + 0008 Handyscope HS3 + 0009 Handyscope HS3 (br) + 000a Handyscope HS4 + 000b Handyscope HS4 (br) + 000e Handyscope HS4 Diff + 000f Handyscope HS4 Diff (br) + 0010 Handyscope HS2 + 0018 Handyprobe HP2 + 0042 TiePieSCOPE HS801 + 00fd USB To Parallel adapter + 00fe USB To Parallel adapter +0e38 Stratitec, Inc. +0e39 Smart Modular Technologies, Inc. +0e3a Neostar Technology Co., Ltd + 1100 CW-1100 Wireless Network Adapter +0e3b Mansella, Ltd +0e41 Line6, Inc. + 4250 BassPODxt + 4252 BassPODxt Pro + 4642 BassPODxt Live + 4650 PODxt Live + 4750 GuitarPort + 5044 PODxt + 5050 PODxt Pro + 534D SeaMonkey +0e48 Julia Corp., Ltd + 0100 CardPro SmartCard Reader +0e4a Shenzhen Bao Hing Electric Wire & Cable Mfr. Co. +0e4c Radica Games, Ltd +0e55 Speed Dragon Multimedia, Ltd + 110b MS3303H USB-to-Serial Bridge +0e5a Active Co., Ltd +0e5b Union Power Information Industrial Co., Ltd +0e5c Bitland Information Technology Co., Ltd +0e5d Neltron Industrial Co., Ltd +0e66 Hawking + 400c UF100 Ethernet [pegasus2] +0e67 Fossil, Inc. + 0002 Wrist PDA +0e6a Megawin Technology Co., Ltd +0e70 Tokyo Electronic Industry Co., Ltd +0e72 Hsi-Chin Electronics Co., Ltd +0e75 TVS Electronics, Ltd +0e7b On-Tech Industry Co., Ltd +0e7e Gmate, Inc. + 0001 Yopy 3000 PDA +0e82 Ching Tai Electric Wire & Cable Co., Ltd +0e8c Well Force Electronic Co., Ltd +0e90 WiebeTech, LLC +0e91 VTech Engineering Canada, Ltd +0e92 C's Glory Enterprise Co., Ltd +0e93 eM Technics Co., Ltd +0e95 Future Technology Co., Ltd +0e96 Aplux Communications, Ltd +0e97 Fingerworks, Inc. +0e98 Advanced Analogic Technologies, Inc. +0e99 Parallel Dice Co., Ltd +0e9a TA HSING Industries, Ltd +0e9b ADTEC Corp. +0e9c Streamzap, Inc. + 0000 Streamzap Remote Control +0e9f Tamura Corp. +0ea0 Ours Technology, Inc. + 2126 7-in-1 Card Reader + 2168 Transcend JetFlash 2.0 / Astone USB Drive + 6803 OTI-6803 Flash Disk + 6808 OTI-6808 Flash Disk + 6828 OTI-6828 Flash Disk +0ea6 Nihon Computer Co., Ltd +0ea7 MSL Enterprises Corp. +0ea8 CenDyne, Inc. +0ead Humax Co., Ltd +0eb1 WIS Technologies, Inc. +0eb2 Y-S Electronic Co., Ltd +0eb3 Saint Technology Corp. +0eb7 Endor AG +0ebe VWeb Corp. +0ebf Omega Technology of Taiwan, Inc. +0ec0 LHI Technology (China) Co., Ltd +0ec1 Abit Computer Corp. +0ec2 Sweetray Industrial, Ltd +0ec3 Axell Co., Ltd +0ec4 Ballracing Developments, Ltd +0ec5 GT Information System Co., Ltd +0ec6 InnoVISION Multimedia, Ltd +0ec7 Theta Link Corp. + 1008 So., Show 301 Digital Camera +0ecd Lite-On IT Corp. +0ece TaiSol Electronics Co., Ltd +0ecf Phogenix Imaging, LLC +0ed1 WinMaxGroup + 6660 USB Flash Disk 64M-C + 6680 USB Flash Disk 64M-B +0ed2 Kyoto Micro Computer Co., Ltd +0ed3 Wing-Tech Enterprise Co., Ltd +0eda Noriake Itron Corp. +0edf e-MDT Co., Ltd +0ee0 Shima Seiki Mfg., Ltd +0ee1 Sarotech Co., Ltd +0ee2 AMI Semiconductor, Inc. +0ee3 ComTrue Technology Corp. + 1000 Image Tank 1.5 +0ee4 Sunrich Technology, Ltd +0eee Digital Stream Technology, Inc. +0eef D-WAV Scientific Co., Ltd + 0001 eGalax TouchScreen +0ef0 Hitachi Cable, Ltd +0ef1 Aichi Micro Intelligent Corp. +0ef2 I/O Magic Corp. +0ef3 Lynn Products, Inc. +0ef4 DSI Datotech +0ef5 PointChips + 2202 Flash Disk +0ef6 Yield Microelectronics Corp. +0ef7 SM Tech Co., Ltd (Tulip) +0efe Wem Technology, Inc. +0efd Oasis Semiconductor +0f06 Visual Frontier Enterprise Co., Ltd +0f08 CSL Wire & Plug (Shen Zhen) Co. +0f0c CAS Corp. +0f0d Hori Co., Ltd +0f0e Energy Full Corp. +0f12 Mars Engineering Corp. +0f13 Acetek Technology Co., Ltd +0f19 Oracom Co., Ltd +0f1b Onset Computer Corp. +0f1c Funai Electric Co., Ltd +0f1d Iwill Corp. +0f21 IOI Technology Corp. +0f22 Senior Industries, Inc. +0f23 Leader Tech Manufacturer Co., Ltd +0f24 Flex-P Industries, Snd., Bhd. +0f2d ViPower, Inc. +0f2e Geniality Maple Technology Co., Ltd +0f2f Priva Design Services +0f30 Jess Technology Co., Ltd +0f31 Chrysalis Development +0f32 YFC-BonEagle Electric Co., Ltd +0f37 Kokuyo Co., Ltd +0f38 Nien-Yi Industrial Corp. +0f3d Airprime, Incorporated + 0112 CDMA 1xEVDO PC Card, PC 5220 +0f41 RDC Semiconductor Co., Ltd +0f42 Nital Consulting Services, Inc. +0f4b St. John Technology Co., Ltd +0f4c WorldWide Cable Opto Corp. +0f4d Microtune, Inc. + 1000 Bluetooth Dongle +0f4e Freedom Scientific +0f52 Wing Key Electrical Co., Ltd +0f53 Dongguan White Horse Cable Factory, Ltd +0f54 Kawai Musical Instruments Mfg. Co., Ltd +0f55 AmbiCom, Inc. +0f5c Prairiecomm, Inc. +0f5d NewAge International, LLC +0f5f Key Technology Corp. +0f60 NTK, Ltd +0f61 Varian, Inc. +0f62 Acrox Technologies Co., Ltd +0f68 Kobe Steel, Ltd +0f69 Dionex Corp. +0f6a Vibren Technologies, Inc. +0f6e INTELLIGENT SYSTEMS + 0100 GameBoy Color Emulator + 0201 GameBoy Advance Flash Gang Writer + 0202 GameBoy Advance Capture + 0300 Gamecube DOL Viewer + 0400 NDS Emulator + 0401 NDS UIC + 0402 NDS Writer + 0403 NDS Capture + 0404 NDS Emulator (Lite) +0f73 DFI +0f7c DQ Technology, Inc. +0f7d NetBotz, Inc. +0f7e Fluke Corp. +0f88 VTech Holdings, Ltd +0f8b Yazaki Corp. +0f8c Young Generation International Corp. +0f8d Uniwill Computer Corp. +0f8e Kingnet Technology Co., Ltd +0f8f Soma Networks +0f97 CviLux Corp. +0f98 CyberBank Corp. +0f9c Hyun Won, Inc. + 0301 M-Any Premium DAH-610 MP3/WMA Player + 0332 mobiBLU DAH-1200 MP3/Ogg Player +0f9e Lucent Technologies +0fa3 Starconn Electronic Co., Ltd +0fa4 ATL Technology +0fa5 Sotec Co., Ltd +0fa7 Epox Computer Co., Ltd +0fa8 Logic Controls, Inc. +0faf Winpoint Electronic Corp. +0fb0 Haurtian Wire & Cable Co., Ltd +0fb1 Inclose Design, Inc. +0fb2 Juan-Chern Industrial Co., Ltd +0fb8 Wistron Corp. +0fb9 AACom Corp. +0fba San Shing Electronics Co., Ltd +0fbb Bitwise Systems, Inc. +0fc1 Mitac Internatinal Corp. +0fc2 Plug and Jack Industrial, Inc. +0fc5 Delcom Engineering + 1222 I/O Development Board +0fc6 Dataplus Supplies, Inc. +0fca Research In Motion, Ltd. + 0001 Blackberry Handheld +0fce Sony Ericsson Mobile Communications AB + d017 K608i Phone +0fcf Dynastream Innovations, Inc. +0fd0 Tulip Computers B.V. +0fd4 Tenovis GmbH & Co., KG +0fd5 Direct Access Technology, Inc. +0fdc Micro Plus +0fe4 IN-Tech Electronics, Ltd +0fe5 Greenconn (U.S.A.), Inc. +0fe9 DVICO + db00 FusionHDTV DVB-T (MT352+LgZ201) (uninitialized) + db01 FusionHDTV DVB-T (MT352+LgZ201) (initialized) + db10 FusionHDTV DVB-T (MT352+Thomson7579) (uninitialized) + db11 FusionHDTV DVB-T (MT352+Thomson7579) (initialized) +0fea United Computer Accessories +0feb CRS Electronic Co., Ltd +0fec UMC Electronics Co., Ltd +0fed Access Co., Ltd +0fee Xsido Corp. +0fef MJ Research, Inc. +0ff6 Core Valley Co., Ltd +0ff7 CHI SHING Computer Accessories Co., Ltd +0fff Aopen, Inc. +1000 Speed Tech Corp. +1001 Ritronics Components (S) Pte., Ltd +1003 Sigma Corp. + 0100 Sigma SD10 +1004 LG Electronics, Inc. + 1fae U8120 3G Cellphone + 6000 VX4400/VX6000 Cellphone + 6005 T5100 + 6800 CDMA Modem +1005 Apacer Technology, Inc. + b113 Handy Steno 2.0 (256MB) +1006 iRiver, Ltd. + 3002 iHP-100/120/140 MP3 Player +1009 Emuzed, Inc. +100a AV Chaseway, Ltd +100b Chou Chin Industrial Co., Ltd +100d Netopia, Inc. + 3342 Cayman 3352 DSL Modem + cb01 Cayman 3341 Ethernet DSL Router +1010 Fukuda Denshi Co., Ltd +1011 Mobile Media Tech. +1012 SDKM Fibres, Wires & Cables Berhad +1013 TST-Touchless Sensor Technology AG +1014 Densitron Technologies PLC +1015 Softronics Pty., Ltd +1016 Xiamen Hung's Enterprise Co., Ltd +1017 Speedy Industrial Supplies, Pte., Ltd +1019 Elitegroup Computer Systems (ECS) + 0c55 USB Flash Reader, Desknote UCR-61S2B +1020 Labtec + 000a Wireless Optical Mouse +1022 Shinko Shoji Co., Ltd +1025 Hyper-Paltek + 005e USB DVB-T device + 005f USB DVB-T device +1026 Newly Corp. +1027 Time Domain +1028 Inovys Corp. +1029 Atlantic Coast Telesys +102a Ramos Technology Co., Ltd +102b Infotronic America, Inc. +102c Etoms Electronics Corp. +102d Winic Corp. +1031 Comax Technology, Inc. +1032 C-One Technology Corp. +1033 Nucam Corp. +1038 Ideazon, Inc. + 0100 Zboard +1039 devolo AG + 2140 dsl+ 1100 duo +1043 iCreate Technologies Corp. + 8006 Flash Disk 32-256 MB +1044 Chu Yuen Enterprise Co., Ltd +1046 Winbond Electronics Corp. [hex] + 9967 W9967CF/W9968CF WebCam IC +104c AMCO TEC International, Inc. +1053 Immanuel Electronics Co., Ltd +1054 BMS International Beheer N.V. +1055 Complex Micro Interconnection Co., Ltd +1056 Hsin Chen Ent Co., Ltd +1057 ON Semiconductor +1058 Western Digital Technologies, Inc. +1059 Giesecke & Devrient GmbH +105c Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd +105d Delkin Devices, Inc. +105e Valence Semiconductor Design, Ltd +105f Chin Shong Enterprise Co., Ltd +1060 Easthome Industrial Co., Ltd +1063 Motorola Electronics Taiwan, Ltd [hex] + 1555 MC141555 Hub +1065 CCYU Technology + 2136 EasyDisk ED1064 +106a Loyal Legend, Ltd +106c Curitel Communications, Inc. + 2101 AudioVox 8900 Cell Phone +106d San Chieh Manufacturing, Ltd +106e ConectL +106f Money Controls +1076 GCT Semiconductor, Inc. +107d Arlec Australia, Ltd +107e Midoriya Electric Co., Ltd +107f KidzMouse, Inc. +1082 Shin-Etsukaken Co., Ltd +1083 Canon Electronics, Inc. +1084 Pantech Co., Ltd +108a Chloride Power Protection +108b Grand-tek Technology Co., Ltd +108c Robert Bosch GmbH +1099 Surface Optics Corp. +109a DATASOFT Systems GmbH +109f eSOL Co., Ltd +10a0 Hirotech, Inc. +10a3 Mitsubishi Materials Corp. +10a9 SK Teletech Co., Ltd +10aa Cables To Go +10ab USI Co., Ltd + 10c5 Sony-Ericsson / Samsung DataCable +10ac Honeywell, Inc. +10ae Princeton Technology Corp. +10b5 Comodo (PLX?) + 9060 Test Board +10b8 DiBcom + 0bb8 DiBcom USB DVB-T reference design (MOD300) (cold) + 0bb9 DiBcom USB DVB-T reference design (MOD300) (warm) + 0bc6 DiBcom USB2.0 DVB-T reference design (MOD3000P) (cold) + 0bc7 DiBcom USB2.0 DVB-T reference design (MOD3000P) (warm) +10bb TM Technology, Inc. +10bc Dinging Technology Co., Ltd +10bd TMT Technology, Inc. +10bf SmartHome + 0001 SmartHome PowerLinc +10c4 Cygnal Integrated Products, Inc. +10c5 Sanei Electric, Inc. +10c6 Intec, Inc. +10cb Eratech +10cc GBM Connector Co., Ltd +10cd Kycon, Inc. +10cf Velleman Components, Inc. + 5500 8055 Experiment Interface Board (address=0) + 5501 8055 Experiment Interface Board (address=1) + 5502 8055 Experiment Interface Board (address=2) + 5503 8055 Experiment Interface Board (address=3) +10d1 Hottinger Baldwin Measurement + 0101 USB-Module for Spider8, CP32 + 0202 CP22 - Communication Processor + 0301 CP42 - Communication Processor +10d4 Man Boon Manufactory, Ltd +10d5 Uni Class Technology Co., Ltd +10d6 Actions Semiconductor Co., Ltd + 1000 MP3 Player + 1100 MPMan MP-Ki 128 MP3 Player/Recorder +10de Authenex, Inc. +10df In-Win Development, Inc. +10e0 Post-Op Video, Inc. +10e1 CablePlus, Ltd +10e2 Nada Electronics, Ltd +10ec Vast Technologies, Inc. +10fb Pictos Technologies, Inc. +10fd Anubis Electronics, Ltd + 804d Typhoon Webshot II Webcam [zc0301] +1a0a ... + badd USB OTG Compliance test device +1100 VirTouch, Ltd + 0001 VTPlayer VTP-1 Braille Mouse +1101 EasyPass Industrial Co., Ltd + 0001 FSK Electronics Super GSM Reader +1108 Brightcom Technologies, Ltd +1110 Analog Devices Canada, Ltd (Allied Telesyn) + 900f AT-AR215 DSL Modem +1111 Pandora International Ltd. + 8888 Evolution Device +1112 YM ELECTRIC CO., Ltd +1113 Medion AG +111e VSO Electric Co., Ltd +112e Master Hill Electric Wire and Cable Co., Ltd +112f Cellon International, Inc. +1130 Tenx Technology, Inc. +1131 Integrated System Solution Corp. + 1001 KY-BT100 Bluetooth Adapter +1132 Toshiba Corp., Digital Media Equipment [hex] + 4331 PDR-M4/M5/M70 Digital Camera + 4332 PDR-M60 Digital Camera + 4333 PDR-M2300/PDR-M700 + 4334 PDR-M65 + 4335 PDR-M61 + 4337 PDR-M11 + 4338 PDR-M25 +113c Arin Tech Co., Ltd +113d Mapower Electronics Co., Ltd +1141 V One Multimedia, Pte., Ltd +1142 CyberScan Technologies, Inc. +1147 Ever Great Electric Wire and Cable Co., Ltd +114b Sphairon Access Systems GmbH + 0110 Turbolink UB801R WLAN USB Adapter +114c Tinius Olsen Testing Machine Co., Inc. +114d Alpha Imaging Technology Corp. +1162 Secugen Corp. +1163 DeLorme Publishing, Inc. +1164 YUAN High-Tech Development Co., Ltd +1165 Telson Electronics Co., Ltd +1166 Bantam Interactive Technologies +1167 Salient Systems Corp. +1168 BizConn International Corp. +116e Gigastorage Corp. +116f Silicon 10 Technology Corp. +1175 Shengyih Steel Mold Co., Ltd +117d Santa Electronic, Inc. +117e JNC, Inc. +1182 Venture Corp., Ltd +1183 Compaq Computer Corp. [hex] (Digital Dream ??) + 0001 DigitalDream l'espion XS + 19c7 ISDN TA + 4008 56k FaxModem + 504a PJB-100 Personal Jukebox +1184 Kyocera Elco Corp. +118f You Yang Technology Co., Ltd +1190 Tripace +1191 Loyalty Founder Enterprise Co., Ltd +1196 Yankee Robotics, LLC + 0010 Trifid Camera without code + 0011 Trifid Camera +1197 Technoimagia Co., Ltd +1198 StarShine Technology Corp. +1199 Sierra Wireless, Inc. + 0112 CDMA 1xEVDO PC Card, AirCard 580 +119a ZHAN QI Technology Co., Ltd +119b ruwido austria GmbH + 0400 Infrared Keyboard V2.01 +11a0 Chipcon AS + eb11 CC2400EB 2.0 ZigBee Sniffer +11a3 Technovas Co., Ltd +11aa GlobalMedia Group, LLC +11ab Exito Electronics Co., Ltd +11db Topfield Co., Ltd. + 1000 PVR + 1100 PVR +11f5 Siemens AG (?) + 0003 Mobile phone USB cable +11f7 Alcatel (?) + 02df TD10 Mobile phone USB cable +1209 InterBiometrics + 1001 USB Hub + 1002 USB Relais + 1003 IBSecureCam-P + 1004 IBSecureCam-O + 1005 IBSecureCam-N +120e Hudson Soft Co., Ltd +121e Jungsoft Co., Ltd + 3403 Muzio JM250 Audio Player +1241 Belkin + 1111 Mouse + 1166 optical mouse w/ scrollwheel + 1177 F8E842-DL Mouse +124a AirVast + 4017 PC-Chips 802.11b Adapter +124b Nyko (Honey Bee) + 4d01 Airflo EX Joystick +1267 Logic3 / SpectraVideo plc + 0201 A4Tech SWOP-3 Mouse + a001 JP260 PC Game Pad +126e Strobe Data, Inc. +126f TwinMOS + 1325 Mobile Disk + 2168 Mobile Disk III +1275 Xaxero Marine Software Engineering, Ltd. + 0002 WeatherFax 2000 Demodulator + 0080 SkyEye Weather Satellite Receiver +1286 Marvell Semiconductor, Inc. + 8001 BLOB boot loader firmware +1292 Innomedia + 0258 Creative Labs VoIP Blaster +1293 Belkin Components [hex] + 0002 F5U002 Parallel Port [uss720] + 2101 104-key keyboard +12ef Tapwave, Inc. + 0100 Tapwave Handheld [Tapwave Zodiac] +12fd AIN Comm. Technology Co., Ltd + 1001 AWU2000b 802.11b Stick +1307 Transcend Information, Inc. + 1169 TS2GJF210 JetFlash 210 2GB +1310 Roper + 0001 Class 1 Bluetooth Dongle +1312 ICS Electronics +131d Natural Point + 0155 TrackIR 3 Pro Head Tracker +132b Konica Minolta + 0000 Dimage A2 Camera + 0001 Minolta DiMAGE A2 (ptp) + 0003 Dimage Xg Camera + 0006 Dimage Z2 Camera + 0007 Minolta DiMAGE Z2 (PictBridge mode) + 0008 Dimage X21 Camera + 000a Dimage Scan Dual IV + 000b Dimage Z10 Camera + 000d Dimage X50 Camera [storage?] + 000f Dimage X50 Camera [p2p?] + 0010 Dimage G600 Camera + 0012 Dimage Scan Elite5400 2 + 0013 Dimage X31 Camera + 0015 Dimage G530 Camera + 0017 Dimage Z3 Camera + 0018 Minolta DiMAGE Z3 (PictBridge mode) + 0019 Dimage A200 Camera + 0021 Dimage Z5 Camera + 0022 Minolta DiMAGE Z5 (PictBridge mode) +1342 Mobility + 0200 EasiDock 200 Hub + 0201 EasiDock 200 Keyboard and Mouse Port + 0202 EasiDock 200 Serial Port + 0203 EasiDock 200 Printer Port +134e Digby's Bitpile, Inc. DBA D Bit +1370 Swissbit + 6828 Victorinox Flash Drive +1398 Q-tec + 2103 USB 2.0 Storage Device +13b0 Alesis + 000a Photon X25 MIDI Controller +13b1 Linksys + 000b WUSB11 v4.0 802.11b Adapter + 0011 WUSB54GP v4.0 802.11g Adapter + 0018 USB200M 10/100 Ethernet Adapter +13d2 Shark Multimedia + 0400 Pocket Ethernet [klsi] +13d3 IMC Networks + 3201 VisionDTV USB-Ter/HAMA USB DVB-T device cold + 3202 VisionDTV USB-Ter/HAMA USB DVB-T device warm +13fe Kingston Technology Company Inc. + 1d00 DataTraveler 2.0 1GB Flash Drive +1453 Radio Shack + 4026 26-183 Serial Cable +1462 Micro Star International + 5512 MegaStick-1 Flash Stick +147a Formosa Industrial Computing, Inc. +1484 Elsa AG [hex] + 1746 Ecomo 19H99 Monitor + 7616 Elsa Hub +148f Ralink Technology, Corp. + 2570 802.11g WiFi +14aa AVerMedia (again) or C&E + 0001 Avermedia AverTV DVBT USB1.1 (cold) + 0002 Avermedia AverTV DVBT USB1.1 (warm) + 0201 AVermedia/Yakumo/Hama/Typhoon DVB-T USB2.0 (cold) + 0221 AVermedia DVBT Tuner Dongle + 0301 AVermedia/Yakumo/Hama/Typhoon DVB-T USB2.0 (warm) +14b2 Atheros Communications Inc + 3a93 USB WLAN Device +14c2 Gemlight Computer, Ltd +1518 Cheshire Engineering Corp. + 0001 HDReye High Dynamic Range Camera + 0002 HDReye (before firmware loads) +1520 Bitwire Corp. +152d ??? + 2338 USB to (S)ATA/ATAPI Bridge +152e LG (HLDS) + e001 GSA-5120D DVD-RW +1546 U-Blox AG +1554 Prolink Microsystems Corp. +1568 Sunf Pu Technology Co., Ltd +15c2 SoundGraph Inc. + ffdc iMON PAD Remote Controller +15c6 Laboratoires MXM + 1000 DigistimSP (cold) + 1001 DigistimSP (warm) + 1002 DigimapSP USB (cold) + 1003 DigimapSP USB (warm) +15e1 RSA + 2007 RSA SecurID (R) Authenticator +15e8 SohoWare + 9100 NUB100 Ethernet [pegasus] +15e9 Pacific Digital Corp. +15f4 HanfTek + 0001 HanfTek UMT-010 USB2.0 DVB-T (cold) + 0025 HanfTek UMT-010 USB2.0 DVB-T (warm) +1604 Tascam + 8000 US-428 Audio/Midi Controller (without fw) + 8001 US-428 Audio/Midi Controller + 8004 US-224 Audio/Midi Controller (without fw) + 8005 US-224 Audio/Midi Controller + 8006 US-122 Audio/Midi Interface (without fw) + 8007 US-122 Audio/Midi Interface +1606 Umax [hex] + 0010 Astra 1220U + 0030 Astra 2000U + 0060 Astra 3400U + 0130 Astra 2100U + 0160 Astra 5400U + 0230 Astra 2200/2200SU + 2020 AstraCam 1000 +1608 Inside Out Networks [hex] + 0001 EdgePort/4 Serial Port + 1403 MultiTech Systems MT4X56 Modem +1645 Entrega [hex] + 0001 1S Serial Port + 0002 2S Serial Port + 0003 1S25 Serial Port + 0004 4S Serial Port + 0005 E45 Ethernet [klsi] + 0006 Parallel Port + 0007 U1-SC25 SCSI + 0093 1S9 Serial Port + 8000 EZ-USB + 8002 2x Serial Port + 8093 PortGear Serial Port +1657 Struck Innovative Systeme GmbH + 3150 SIS3150 USB2.0 to VME interface +1668 Actiontec Electronics, Inc. [hex] + 0333 Modem + 0408 Prism2.5 802.11b Adapter + 0421 Prism2.5 802.11b Adapter + 0500 BTM200B BlueTooth Adapter +1690 Askey Computer Corp. [hex] + 0101 Creative Modem Blaster DE5670 + 0103 Askey 1456 VQE-R3 Modem [conexant] + 0109 Askey MagicXpress V.90 Pocket Modem [conexant] +1696 Hitachi Video and Information System, Inc. +1697 VTec Test, Inc. +1706 BlueView Technologies, Inc. +1733 Cellink Technology Co., Ltd + 0101 RF Wireless Optical Mouse OP-701 +1781 MetaGeek + 083e Wi-Spy +17b3 Grey Innovation + 0004 Linux-USB Midi Gadget +17eb Cornice, Inc. +1822 Twinhan + 3201 VisionDTV USB-Ter/HAMA USB DVB-T device cold + 3202 VisionDTV USB-Ter/HAMA USB DVB-T device warm +185b Compro + d000 Compro Videomate DVB-U2000 - DVB-T USB cold + d001 Compro Videomate DVB-U2000 - DVB-T USB warm +1894 Topseed + 5632 Atek Tote Remote + 5641 TSAM-004 Presentation Remote +18d9 Kaba + 01xy LEGIC advant desktop reader +1977 T-Logic + 0111 TL203 MP3 Player and Voice Recorder +1995 Trillium Technology Pty. Ltd. + 3202 REC-ADPT-USB (recorder) + 3203 REC-A-ADPT-USB (recorder) +1c87 2N TELEKOMUNIKACE a.s. +1ebb NuCORE Technology, Inc. +2001 D-Link Corp. [hex] + 3200 DWL-120 802.11b (Atmel RFMD503A) [usbvnetr] + 3700 DWL-122 802.11b + 3701 DWL-G120 Spinnaker 802.11b + 3703 DWL-122 802.11b + 3704 DWL-G122 802.11g rev. A2 + 3c00 DWL-G122 802.11g rev. B1 [ralink] + 4000 DSB-650C Ethernet [klsi] + 4001 DSB-650TX Ethernet [pegasus] + 4002 DSB-650TX Ethernet [pegasus] + 4003 DSB-650TX-PNA Ethernet [pegasus] + abc1 DSB-650 Ethernet [pegasus] + f013 DLink 7 port USB2.0 Hub + f10d Accent Communications Modem + f111 DBT-122 Bluetooth adapter +2040 Hauppauge + 7050 Hauppauge Nova-T Stick + 9300 Hauppauge WinTV NOVA-T USB2 (cold) + 9301 Hauppauge WinTV NOVA-T USB2 (warm) +2101 ActionStar + 0201 SIIG 4-to-2 Printer Switch +2162 Creative (?) + 500c DE5771 Modem Blaster +2222 MacAlly + 0004 iWebKey Keyboard +2233 RadioShack Corporation + 6323 USB Electronic Scale +22b8 Motorola PCS + 0005 V.60c/V.60i GSM Phone + 1005 T280e GSM/GPRS Phone + 2821 T720 GSM Phone + 2822 V.120e GSM Phone + 2a21 V710 GSM Phone (P2K) + 2a22 V710 GSM Phone (AT) + 2a61 E815 GSM Phone (P2K) + 2a62 E815 GSM Phone (AT) + 3001 A835/E1000 GSM Phone (P2K) + 3002 A835/E1000 GSM Phone (AT) + 3801 C350L/C450 (P2K) + 3802 C330/C350L/C450/EZX GSM Phone (AT) + 4002 A920/A925 UMTS Phone + 4810 Triplet GSM Phone (storage) + 4901 Triplet GSM Phone (P2K) + 4902 Triplet GSM Phone (AT) + 4a32 L6-imode Phone + 6004 EZX GSM Phone (CDC Net) + 6009 EZX GSM Phone (P2K) + 600c EZX GSM Phone (USBLAN) + 604c EZX GSM Phone (Storage) + 6631 CDC Modem + 6604 Washington CDMA Phone +22b9 eTurboTouch Technology, Inc. +22ba Technology Innovation Holdings, Ltd +2304 Pinnacle Systems, Inc. [hex] + 0109 Pinnacle Studio PCTV USB (SECAM) + 0110 Pinnacle Studio PCTV USB (PAL) + 0111 Miro PCTV USB + 0112 Pinnacle Studio PCTV USB (NTSC) with FM radio + 0208 Pinnacle Studio PCTV USB2 + 0210 Pinnacle Studio PCTV USB (PAL) with FM radio + 0212 Pinnacle Studio PCTV USB (NTSC) + 0214 Pinnacle Studio PCTV USB (PAL) with FM radio + 0300 Pinnacle Studio Linx Video input cable (NTSC) + 0301 Pinnacle Studio Linx Video input cable (PAL) + 0419 Pinnacle PCTV Bungee USB (PAL) with FM radio +2318 Shining Technologies, Inc. [hex] + 0011 CitiDISK Jr. IDE Enclosure +2375 Digit@lway, Inc. + 0001 Digital Audio Player +2406 SANHO Digital Electronics Co., Ltd. + 6688 PD7X Portable Storage +2478 Tripp-Lite + 2008 U209-000-R Serial Port +2632 TwinMOS + 3209 7-in-1 Card Reader +2650 Electronics For Imaging, Inc. [hex] +2770 NHJ, Ltd + 905c Che-Ez Snap SNAP-U/Digigr8/Soundstar TDC-35 + 9120 Che-ez! Snap / iClick Tiny VGA Digital Camera + 913c Argus DC-1730 + 9153 iClick 5X +2899 Toptronic Industrial Co., Ltd +2fb2 Fujitsu, Ltd +3125 Eagletron + 0001 TrackerPod Camera Stand +3176 Whanam Electronics Co., Ltd +3340 Yakumo + 0e3a Pocket PC 300 GPS SL / Typhoon MyGuide 3500 +3504 Micro Star + f110 Security Key +3538 Power Quotient International Co., Ltd + 0001 Travel Flash + 0042 Cool Drive U339 Flash Disk +3579 DIVA + 6901 Media Reader +3636 InVibro +3838 WEM + 0001 5-in-1 Card Reader +3923 National Instruments Corp. + 703c USB-485 RS485 Cable +4102 iRiver, Ltd. + 1001 iFP-100 series mp3 player + 1003 iFP-300 series mp3 player + 1005 iFP-500 series mp3 player + 1007 iFP-700 series mp3/ogg vorbis player + 1008 iFP-800 series mp3/ogg vorbis player + 100A iFP-1000 series mp3/ogg vorbis player + 1101 iFP-100 series mp3 player (ums firmware) + 1103 iFP-300 series mp3 player (ums firmware) + 1105 iFP-500 series mp3 player (ums firmware) + 1113 T10 (alternate) + 1117 T10 + 1119 T30 series mp3/ogg/wma player +413c Dell Computer Corp. + 1002 Keyboard Hub + 2002 SK-8125 Keyboard + 2005 RT7D50 Keyboard + 2100 SK-3106 Keyboard + 2101 SmartCard Reader Keyboard + 2500 DRAC4 Remote Access Card + 3010 Optical Wheel Mouse + 4001 Axim X5 + 4002 Axim X3 + 4003 Axim X30 + 8100 TrueMobile 1180 802.11b Adapter + 8103 Wireless 350 Bluetooth + a001 Hub + a700 Hub (in 1905FP LCD Monitor) +4242 USB Design by Example + 4201 Buttons and Lights HID device + 4220 Echo 1 Camera +4146 USBest Technology + 9281 Iomega Micro Mini 128MB Flash Drive + ba01 Intuix Flash Drive +4572 Shuttle, Inc. + 4572 Shuttle PN31 Remote +4586 Panram + 1026 Crystal Bar Flash Drive +4670 EMS Production + 9394 Game Cube USB Memory Adaptor 64M +5032 Grandtec + 0bb8 Grandtec USB1.1 DVB-T (cold) + 0bb9 Grandtec USB1.1 DVB-T (warm) + 0fa0 Grandtec USB1.1 DVB-T (cold) + 0fa1 Grandtec USB1.1 DVB-T (warm) +5041 Linksys (?) + 2234 WUSB54G 802.11g Adapter +544d Transmeta Corp. +5543 UC-Logic Technology Corp. + 0002 SuperPen WP3325U Tablet + 0004 Genius MousePen 5x4 Tablet +55aa OnSpec Electronic, Inc. + 1234 ATAPI Bridge + a103 Sandisk SDDR-55 SmartMedia Card Reader + b012 Mitsumi FA402M 8-in-2 Card Reader +636c CoreLogic, Inc. +6666 Prototype product Vendor ID + 0667 Smart Joy PSX, PS-PC Smart JoyPad +6993 Freshtel + b001 FT-102 VoIP USB Phone +6a75 Shanghai Jujo Electronics Co., Ltd +8086 Intel Corp. + 0110 Easy PC Camera + 0431 Intel Pro Video PC Camera + 0510 Digital Movie Creator + 0630 Pocket PC Camera + 07d3 BLOB boot loader firmware + 1111 PRO/Wireless 2011B 802.11b Adapter + 9890 82930 Test Board + c013 Wireless HID Station +8341 EGO Systems, Inc. + 2000 Flashdisk +9710 MosChip Semiconductor + 7705 Printer cable + 7715 Printer cable + 7780 MS7780 4Mbps Fast IRDA Adapter +c251 Keil Software, Inc. + 2710 ULink +eb1a eMPIA Technology, Inc. + 17de KWorld V-Stream XPERT DTV - DVB-T USB cold + 17df KWorld V-Stream XPERT DTV - DVB-T USB warm + 2710 SilverCrest WebCam + 2750 ECS Elitegroup G220 integrated webcam + 2800 Terratec Cinergy 200 + 2801 GrabBeeX+ Video Encoder + +# List of known device classes, subclasses and protocols + +# Syntax: +# C class class_name +# subclass subclass_name <-- single tab +# protocol protocol_name <-- two tabs + +C 00 (Defined at Interface level) +C 01 Audio + 01 Control Device + 02 Streaming + 03 MIDI Streaming +C 02 Communications + 01 Direct Line + 02 Abstract (modem) + 00 None + 01 AT-commands (v.25ter) + 02 AT-commands (PCCA101) + 03 AT-commands (PCCA101 + wakeup) + 04 AT-commands (GSM) + 05 AT-commands (3G) + 06 AT-commands (CDMA) + fe Defined by command set descriptor + ff Vendor Specific (MSFT RNDIS?) + 03 Telephone + 04 Multi-Channel + 05 CAPI Control + 06 Ethernet Networking + 07 ATM Networking + 08 Wireless Handset Control + 09 Device Management + 0a Mobile Direct Line + 0b OBEX + 0c Ethernet Emulation + 07 Ethernet Emulation (EEM) +C 03 Human Interface Devices + 00 No Subclass + 00 None + 01 Keyboard + 02 Mouse + 01 Boot Interface Subclass + 00 None + 01 Keyboard + 02 Mouse +C 06 Imaging + 01 Still Image Capture + 01 Picture Transfer Protocol (PIMA 15470) +C 07 Printer + 01 Printer + 00 Reserved/Undefined + 01 Unidirectional + 02 Bidirectional + 03 IEEE 1284.4 compatible bidirectional + ff Vendor Specific +C 08 Mass Storage + 01 RBC (typically Flash) + 00 Control/Bulk/Interrupt + 01 Control/Bulk + 50 Bulk (Zip) + 02 SFF-8020i, MMC-2 (ATAPI) + 03 QIC-157 + 04 Floppy (UFI) + 00 Control/Bulk/Interrupt + 01 Control/Bulk + 50 Bulk (Zip) + 05 SFF-8070i + 06 SCSI + 00 Control/Bulk/Interrupt + 01 Control/Bulk + 50 Bulk (Zip) +C 09 Hub + 00 Unused + 00 Full speed (or root) hub + 01 Single TT + 02 TT per port +C 0a CDC Data + 00 Unused + 30 I.430 ISDN BRI + 31 HDLC + 32 Transparent + 50 Q.921M + 51 Q.921 + 52 Q.921TM + 90 V.42bis + 91 Q.932 EuroISDN + 92 V.120 V.24 rate ISDN + 93 CAPI 2.0 + fd Host Based Driver + fe CDC PUF + ff Vendor specific +C 0b Chip/SmartCard +C 0d Content Security +C 0e Video + 00 Undefined + 01 Video Control + 02 Video Streaming + 03 Video Interface Collection +C dc Diagnostic + 01 Reprogrammable Diagnostics + 01 USB2 Compliance +C e0 Wireless + 01 Radio Frequency + 01 Bluetooth + 02 Ultra WideBand Radio Control + 03 RNDIS + 02 Wireless USB Wire Adapter + 01 Host Wire Adapter Control/Data Streaming + 02 Device Wire Adapter Control/Data Streaming + 03 Device Wire Adapter Isochronous Streaming +C ef Miscellaneous Device + 01 ? + 01 Microsoft ActiveSync + 02 Palm Sync + 02 Common Class + 01 Interface Association + 02 Wire Adapter Multifunction Peripheral + 03 ? + 01 Cable Based Association +C fe Application Specific Interface + 01 Device Firmware Update + 02 IRDA Bridge + 03 Test and Measurement + 01 TMC + 02 USB488 +C ff Vendor Specific Class + ff Vendor Specific Subclass + ff Vendor Specific Protocol + +# List of Audio Class Terminal Types + +# Syntax: +# AT terminal_type terminal_type_name + +AT 0100 USB Undefined +AT 0101 USB Streaming +AT 01ff USB Vendor Specific +AT 0200 Input Undefined +AT 0201 Microphone +AT 0202 Desktop Microphone +AT 0203 Personal Microphone +AT 0204 Omni-directional Microphone +AT 0205 Microphone Array +AT 0206 Processing Microphone Array +AT 0300 Output Undefined +AT 0301 Speaker +AT 0302 Headphones +AT 0303 Head Mounted Display Audio +AT 0304 Desktop Speaker +AT 0305 Room Speaker +AT 0306 Communication Speaker +AT 0307 Low Frequency Effects Speaker +AT 0400 Bidirectional Undefined +AT 0401 Handset +AT 0402 Headset +AT 0403 Speakerphone, no echo reduction +AT 0404 Echo-suppressing speakerphone +AT 0405 Echo-canceling speakerphone +AT 0500 Telephony Undefined +AT 0501 Phone line +AT 0502 Telephone +AT 0503 Down Line Phone +AT 0600 External Undefined +AT 0601 Analog Connector +AT 0602 Digital Audio Interface +AT 0603 Line Connector +AT 0604 Legacy Audio Connector +AT 0605 SPDIF interface +AT 0606 1394 DA stream +AT 0607 1394 DV stream soundtrack +AT 0700 Embedded Undefined +AT 0701 Level Calibration Noise Source +AT 0702 Equalization Noise +AT 0703 CD Player +AT 0704 DAT +AT 0705 DCC +AT 0706 MiniDisc +AT 0707 Analog Tape +AT 0708 Phonograph +AT 0709 VCR Audio +AT 070a Video Disc Audio +AT 070b DVD Audio +AT 070c TV Tuner Audio +AT 070d Satellite Receiver Audio +AT 070e Cable Tuner Audio +AT 070f DSS Audio +AT 0710 Radio Receiver +AT 0711 Radio Transmitter +AT 0712 Multitrack Recorder +AT 0713 Synthesizer + +# List of HID Descriptor Types + +# Syntax: +# HID descriptor_type descriptor_type_name + +HID 21 HID +HID 22 Report +HID 23 Physical + +# List of HID Descriptor Item Types +# Note: 2 bits LSB encode data length following + +# Syntax: +# R item_type item_type_name + +# Main Items +R 80 Input +R 90 Output +R b0 Feature +R a0 Collection +R c0 End Collection + +# Global Items +R 04 Usage Page +R 14 Logical Minimum +R 24 Logical Maximum +R 34 Physical Minimum +R 44 Physical Maximum +R 54 Unit Exponent +R 64 Unit +R 74 Report Size +R 84 Report ID +R 94 Report Count +R a4 Push +R b4 Pop + +# Local Items +R 08 Usage +R 18 Usage Minimum +R 28 Usage Maximum +R 38 Designator Index +R 48 Designator Minimum +R 58 Designator Maximum +R 78 String Index +R 88 String Minimum +R 98 String Maximum +R a8 Delimiter + +# List of Physical Descriptor Bias Types + +# Syntax: +# BIAS item_type item_type_name + +BIAS 0 Not Applicable +BIAS 1 Right Hand +BIAS 2 Left Hand +BIAS 3 Both Hands +BIAS 4 Either Hand + +# List of Physical Descriptor Item Types + +# Syntax: +# PHY item_type item_type_name + +PHY 00 None +PHY 01 Hand +PHY 02 Eyeball +PHY 03 Eyebrow +PHY 04 Eyelid +PHY 05 Ear +PHY 06 Nose +PHY 07 Mouth +PHY 08 Upper Lip +PHY 09 Lower Lip +PHY 0a Jaw +PHY 0b Neck +PHY 0c Upper Arm +PHY 0d Elbow +PHY 0e Forearm +PHY 0f Wrist +PHY 10 Palm +PHY 11 Thumb +PHY 12 Index Finger +PHY 13 Middle Finger +PHY 14 Ring Finger +PHY 15 Little Finger +PHY 16 Head +PHY 17 Shoulder +PHY 18 Hip +PHY 19 Waist +PHY 1a Thigh +PHY 1b Knee +PHY 1c calf +PHY 1d Ankle +PHY 1e Foot +PHY 1f Heel +PHY 20 Ball of Foot +PHY 21 Big Toe +PHY 22 Second Toe +PHY 23 Third Toe +PHY 24 Fourth Toe +PHY 25 Fifth Toe +PHY 26 Brow +PHY 27 Cheek + +# List of HID Usages + +# Syntax: +# HUT hi _usage_page hid_usage_page_name +# hid_usage hid_usage_name + +HUT 00 Undefined +HUT 01 Generic Desktop Controls + 000 Undefined + 001 Pointer + 002 Mouse + 004 Joystick + 005 Gamepad + 006 Keyboard + 007 Keypad + 008 Multi-Axis Controller + 030 Direction-X + 031 Direction-Y + 032 Direction-Z + 033 Rotate-X + 034 Rotate-Y + 035 Rotate-Z + 036 Slider + 037 Dial + 038 Wheel + 039 Hat Switch + 03a Counted Buffer + 03b Byte Count + 03c Motion Wakeup + 03d Start + 03e Select + 040 Vector-X + 041 Vector-Y + 042 Vector-Z + 043 Vector-X relative Body + 044 Vector-Y relative Body + 045 Vector-Z relative Body + 046 Vector + 080 System Control + 081 System Power Down + 082 System Sleep + 083 System Wake Up + 084 System Context Menu + 085 System Main Menu + 086 System App Menu + 087 System Menu Help + 088 System Menu Exit + 089 System Menu Select + 08a System Menu Right + 08b System Menu Left + 08c System Menu Up + 08d System Menu Down + 090 Direction Pad Up + 091 Direction Pad Down + 092 Direction Pad Right + 093 Direction Pad Left +HUT 02 Simulation Controls + 000 Undefined + 001 Flight Simulation Device + 002 Automobile Simulation Device + 003 Tank Simulation Device + 004 Spaceship Simulation Device + 005 Submarine Simulation Device + 006 Sailing Simulation Device + 007 Motorcycle Simulation Device + 008 Sports Simulation Device + 009 Airplane Simualtion Device + 00a Helicopter Simulation Device + 00b Magic Carpet Simulation Device + 00c Bicycle Simulation Device + 020 Flight Control Stick + 021 Flight Stick + 022 Cyclic Control + 023 Cyclic Trim + 024 Flight Yoke + 025 Track Control + 0b0 Aileron + 0b1 Aileron Trim + 0b2 Anti-Torque Control + 0b3 Autopilot Enable + 0b4 Chaff Release + 0b5 Collective Control + 0b6 Dive Break + 0b7 Electronic Countermeasures + 0b8 Elevator + 0b9 Elevator Trim + 0ba Rudder + 0bb Throttle + 0bc Flight COmmunications + 0bd Flare Release + 0be Landing Gear + 0bf Toe Break + 0c0 Trigger + 0c1 Weapon Arm + 0c2 Weapons Select + 0c3 Wing Flaps + 0c4 Accelerator + 0c5 Brake + 0c6 Clutch + 0c7 Shifter + 0c8 Steering + 0c9 Turret Direction + 0ca Barrel Elevation + 0cb Drive Plane + 0cc Ballast + 0cd Bicylce Crank + 0ce Handle Bars + 0cf Front Brake + 0d0 Rear Brake +HUT 03 VR Controls + 000 Unidentified + 001 Belt + 002 Body Suit + 003 Flexor + 004 Glove + 005 Head Tracker + 006 Head Mounted Display + 007 Hand Tracker + 008 Oculometer + 009 Vest + 00a Animatronic Device + 020 Stereo Enable + 021 Display Enable +HUT 04 Sport Controls + 000 Unidentified + 001 Baseball Bat + 002 Golf Club + 003 Rowing Machine + 004 Treadmill + 030 Oar + 031 Slope + 032 Rate + 033 Stick Speed + 034 Stick Face Angle + 035 Stick Heel/Toe + 036 Stick Follow Through + 047 Stick Temp + 038 Stick Type + 039 Stick Height + 050 Putter + 051 1 Iron + 052 2 Iron + 053 3 Iron + 054 4 Iron + 055 5 Iron + 056 6 Iron + 057 7 Iron + 058 8 Iron + 059 9 Iron + 05a 10 Iron + 05b 11 Iron + 05c Sand Wedge + 05d Loft Wedge + 05e Power Wedge + 05f 1 Wood + 060 3 Wood + 061 5 Wood + 062 7 Wood + 063 9 Wood +HUT 05 Game Controls + 000 Undefined + 001 3D Game Controller + 002 Pinball Device + 003 Gun Device + 020 Point Of View + 021 Turn Right/Left + 022 Pitch Right/Left + 023 Roll Forward/Backward + 024 Move Right/Left + 025 Move Forward/Backward + 026 Move Up/Down + 027 Lean Right/Left + 028 Lean Forward/Backward + 029 Height of POV + 02a Flipper + 02b Secondary Flipper + 02c Bump + 02d New Game + 02e Shoot Ball + 02f Player + 030 Gun Bolt + 031 Gun Clip + 032 Gun Selector + 033 Gun Single Shot + 034 Gun Burst + 035 Gun Automatic + 036 Gun Safety + 037 Gamepad Fire/Jump + 038 Gamepad Fun + 039 Gamepad Trigger +HUT 07 Keyboard + 000 No Event + 001 Keyboard ErrorRollOver + 002 Keyboard POSTfail + 003 Keyboard Error Undefined + 004 A + 005 B + 006 C + 007 D + 008 E + 009 F + 00a G + 00b H + 00c I + 00d J + 00e K + 00f L + 010 M + 011 N + 012 O + 013 P + 014 Q + 015 R + 016 S + 017 T + 018 U + 019 V + 01a W + 01b X + 01c Y + 01d Z + 01e 1 and ! (One and Exclamation) + 01f 2 and @ (2 and at) + 020 3 and # (3 and Hash) + 021 4 and $ (4 and Dollar Sign) + 022 5 and % (5 and Percent Sign) + 023 6 and ^ (6 and circumflex) + 024 7 and & (Seven and Ampersand) + 025 8 and * (Eight and asterisk) + 026 9 and ( (Nine and Parenthesis Left) + 027 0 and ) (Zero and Parenthesis Right) + 028 Return (Enter) + 029 Escape + 02a Delete (Backspace) + 02b Tab + 02c Space Bar + 02d - and _ (Minus and underscore) + 02e = and + (Equal and Plus) + 02f [ and { (Bracket and Braces Left) + 030 ] and } (Bracket and Braces Right) + 031 \ and | (Backslash and Bar) + 032 # and ~ (Hash and Tilde, Non-US Keyboard near right shift) + 033 ; and : (Semicolon and Colon) + 034 and " (Accent Acute and Double Quotes) + 035 ` and ~ (Accent Grace and Tilde) + 036 , and < (Comma and Less) + 037 . and > (Period and Greater) + 038 / and ? (Slash and Question Mark) + 039 Caps Lock + 03a F1 + 03b F2 + 03c F3 + 03d F4 + 03e F5 + 03f F6 + 040 F7 + 041 F8 + 042 F9 + 043 F10 + 044 F11 + 045 F12 + 046 Print Screen + 047 Scroll Lock + 048 Pause + 049 Insert + 04a Home + 04b Page Up + 04c Delete Forward (without Changing Position) + 04d End + 04e Page Down + 04f Right Arrow + 050 Left Arrow + 051 Down Arrow + 052 Up Arrow + 053 Num Lock and Clear + 054 Keypad / (Division Sign) + 055 Keypad * (Multiplication Sign) + 056 Keypad - (Subtraction Sign) + 057 Keypad + (Addition Sign) + 058 Keypad Enter + 059 Keypad 1 and END + 05a Keypad 2 and Down Arrow + 05b Keypad 3 and Page Down + 05c Keypad 4 and Left Arrow + 05d Keypad 5 (Tactilei Raised) + 05f Keypad 6 and Right Arrow + 060 Keypad 7 and Home + 061 Keypad 8 and Up Arrow + 062 Keypad 8 and Page Up + 063 Keypad . (decimal delimiter) and Delete + 064 \ and | (Backslash and Bar, UK and Non-US Keyboard near left shift) + 065 Keyboard Application (Windows Key for Win95 or Compose) + 066 Power (not a key) + 067 Keypad = (Equal Sign) + 068 F13 + 069 F14 + 06a F15 + 06b F16 + 06c F17 + 06d F18 + 06e F19 + 06f F20 + 070 F21 + 071 F22 + 072 F23 + 073 F24 + 074 Execute + 075 Help + 076 Menu + 077 Select + 078 Stop + 079 Again + 07a Undo + 07b Cut + 07c Copy + 07d Paste + 07e Find + 07f Mute + 080 Volume Up + 081 Volume Down + 082 Locking Caps Lock + 083 Locking Num Lock + 084 Locking Scroll Lock + 085 Keypad Comma + 086 Keypad Equal Sign (AS/400) + 087 International 1 (PC98) + 088 International 2 (PC98) + 089 International 3 (PC98) + 08a International 4 (PC98) + 08b International 5 (PC98) + 08c International 6 (PC98) + 08d International 7 (Toggle Single/Double Byte Mode) + 08e International 8 + 08f International 9 + 090 LANG 1 (Hangul/English Toggle, Korea) + 091 LANG 2 (Hanja Conversion, Korea) + 092 LANG 3 (Katakana, Japan) + 093 LANG 4 (Hiragana, Japan) + 094 LANG 5 (Zenkaku/Hankaku, Japan) + 095 LANG 6 + 096 LANG 7 + 097 LANG 8 + 098 LANG 9 + 099 Alternate Erase + 09a SysReq/Attention + 09b Cancel + 09c Clear + 09d Prior + 09e Return + 09f Separator + 0a0 Out + 0a1 Open + 0a2 Clear/Again + 0a3 CrSel/Props + 0a4 ExSel + 0e0 Control Left + 0e1 Shift Left + 0e2 Alt Left + 0e3 GUI Left + 0e4 Control Right + 0e5 Shift Right + 0e6 Alt Rigth + 0e7 GUI Right +HUT 08 LEDs + 000 Undefined + 001 NumLock + 002 CapsLock + 003 Scroll Lock + 004 Compose + 005 Kana + 006 Power + 007 Shift + 008 Do not disturb + 009 Mute + 00a Tone Enabke + 00b High Cut Filter + 00c Low Cut Filter + 00d Equalizer Enable + 00e Sound Field ON + 00f Surround On + 010 Repeat + 011 Stereo + 012 Sampling Rate Detect + 013 Spinning + 014 CAV + 015 CLV + 016 Recording Format Detect + 017 Off-Hook + 018 Ring + 019 Message Waiting + 01a Data Mode + 01b Battery Operation + 01c Battery OK + 01d Battery Low + 01e Speaker + 01f Head Set + 020 Hold + 021 Microphone + 022 Coverage + 023 Night Mode + 024 Send Calls + 025 Call Pickup + 026 Conference + 027 Stand-by + 028 Camera On + 029 Camera Off + 02a On-Line + 02b Off-Line + 02c Busy + 02d Ready + 02e Paper-Out + 02f Paper-Jam + 030 Remote + 031 Forward + 032 Reverse + 033 Stop + 034 Rewind + 035 Fast Forward + 036 Play + 037 Pause + 038 Record + 039 Error + 03a Usage Selected Indicator + 03b Usage In Use Indicator + 03c Usage Multi Indicator + 03d Indicator On + 03e Indicator Flash + 03f Indicator Slow Blink + 040 Indicator Fast Blink + 041 Indicator Off + 042 Flash On Time + 043 Slow Blink On Time + 044 Slow Blink Off Time + 045 Fast Blink On Time + 046 Fast Blink Off Time + 047 Usage Color Indicator + 048 Indicator Red + 049 Indicator Green + 04a Indicator Amber + 04b Generic Indicator + 04c System Suspend + 04d External Power Connected +HUT 09 Buttons + 000 No Button Pressed + 001 Button 1 (Primary) + 002 Button 2 (Secondary) + 003 Button 3 (Tertiary) + 004 Button 4 + 005 Button 5 +HUT 0a Ordinal + 001 Instance 1 + 002 Instance 2 + 003 Instance 3 +HUT 0b Telephony + 000 Unassigned + 001 Phone + 002 Answering Machine + 003 Message Controls + 004 Handset + 005 Headset + 006 Telephony Key Pad + 007 Programmable Button + 020 Hook Switch + 021 Flash + 022 Feature + 023 Hold + 024 Redial + 025 Transfer + 026 Drop + 027 Park + 028 Forward Calls + 029 Alternate Function + 02a Line + 02b Speaker Phone + 02c Conference + 02d Ring Enable + 02e Ring Select + 02f Phone Mute + 030 Caller ID + 050 Speed Dial + 051 Store Number + 052 Recall Number + 053 Phone Directory + 070 Voice Mail + 071 Screen Calls + 072 Do Not Disturb + 073 Message + 074 Answer On/Offf + 090 Inside Dial Tone + 091 Outside Dial Tone + 092 Inside Ring Tone + 093 Outside Ring Tone + 094 Priority Ring Tone + 095 Inside Ringback + 096 Priority Ringback + 097 Line Busy Tone + 098 Recorder Tone + 099 Call Waiting Tone + 09a Confirmation Tone 1 + 09b Confirmation Tone 2 + 09c Tones Off + 09d Outside Ringback + 0b0 Key 1 + 0b1 Key 2 + 0b3 Key 3 + 0b4 Key 4 + 0b5 Key 5 + 0b6 Key 6 + 0b7 Key 7 + 0b8 Key 8 + 0b9 Key 9 + 0ba Key Star + 0bb Key Pound + 0bc Key A + 0bd Key B + 0be Key C + 0bf Key D +HUT 0c Consumer + 000 Unassigned + 001 Consumer Control + 002 Numeric Key Pad + 003 Programmable Buttons + 020 +10 + 021 +100 + 022 AM/PM + 030 Power + 031 Reset + 032 Sleep + 033 Sleep After + 034 Sleep Mode + 035 Illumination + 036 Function Buttons + 040 Menu + 041 Menu Pick + 042 Menu Up + 043 Menu Down + 044 Menu Left + 045 Menu Right + 046 Menu Escape + 047 Menu Value Increase + 048 Menu Value Decrease + 060 Data on Screen + 061 Closed Caption + 062 Closed Caption Select + 063 VCR/TV + 064 Broadcast Mode + 065 Snapshot + 066 Still + 080 Selection + 081 Assign Selection + 082 Mode Step + 083 Recall Last + 084 Enter Channel + 085 Order Movie + 086 Channel + 087 Media Selection + 088 Media Select Computer + 089 Media Select TV + 08a Media Select WWW + 08b Media Select DVD + 08c Media Select Telephone + 08d Media Select Program Guide + 08e Media Select Video Phone + 08f Media Select Games + 090 Media Select Messages + 091 Media Select CD + 092 Media Select VCR + 093 Media Select Tuner + 094 Quit + 095 Help + 096 Media Select Tape + 097 Media Select Cable + 098 Media Select Satellite + 099 Media Select Security + 09a Media Select Home + 09b Media Select Call + 09c Channel Increment + 09d Channel Decrement + 09e Media Select SAP + 0a0 VCR Plus + 0a1 Once + 0a2 Daily + 0a3 Weekly + 0a4 Monthly + 0b0 Play + 0b1 Pause + 0b2 Record + 0b3 Fast Forward + 0b4 Rewind + 0b5 Scan Next Track + 0b6 Scan Previous Track + 0b7 Stop + 0b8 Eject + 0b9 Random Play + 0ba Select Disc + 0bb Enter Disc + 0bc Repeat + 0bd Tracking + 0be Track Normal + 0bf Slow Tracking + 0c0 Frame Forward + 0c1 Frame Back + 0c2 Mark + 0c3 Clear Mark + 0c4 Repeat from Mark + 0c5 Return to Mark + 0c6 Search Mark Forward + 0c7 Search Mark Backward + 0c8 Counter Reset + 0c9 Show Counter + 0ca Tracking Increment + 0cb Tracking Decrement + 0cc Stop/Eject + 0cd Play/Pause + 0ce Play/Skip + 0e0 Volume + 0e1 Balance + 0e2 Mute + 0e3 Bass + 0e4 Treble + 0e5 Bass Boost + 0e6 Surround Mode + 0e7 Loudness + 0e8 MPX + 0e9 Volume Increment + 0ea Volume Decrement + 0f0 Speed Select + 0f1 Playback Speed + 0f2 Standard Play + 0f3 Long Play + 0f4 Extended Play + 0f5 Slow + 100 Fan Enable + 101 Fan Speed + 102 Light Enable + 103 Light Illumination Level + 104 Climate Control Enable + 105 Room Temperature + 106 Security Enable + 107 Fire Alarm + 108 Police Alarm + 150 Balance Right + 151 Balance Left + 152 Bass Increment + 153 Bass Decrement + 154 Treble Increment + 155 Treble Decrement + 160 Speaker System + 161 Channel Left + 162 Channel Right + 163 Channel Center + 164 Channel Front + 165 Channel Center Front + 166 Channel Side + 167 Channel Surround + 168 Channel Low Frequency Enhancement + 169 Channel Top + 16a Channel Unknown + 170 Sub-Channel + 171 Sub-Channel Increment + 172 Sub-Channel Decrement + 173 Alternative Audio Increment + 174 Alternative Audio Decrement + 180 Application Launch Buttons + 181 AL Launch Button Configuration Tool + 182 AL Launch Button Configuration + 183 AL Consumer Control Configuration + 184 AL Word Processor + 185 AL Text Editor + 186 AL Spreadsheet + 187 AL Graphics Editor + 188 AL Presentation App + 189 AL Database App + 18a AL Email Reader + 18b AL Newsreader + 18c AL Voicemail + 18d AL Contacts/Address Book + 18e AL Calendar/Schedule + 18f AL Task/Project Manager + 190 AL Log/Jounal/Timecard + 191 AL Checkbook/Finance + 192 AL Calculator + 193 AL A/V Capture/Playback + 194 AL Local Machine Browser + 195 AL LAN/Wan Browser + 196 AL Internet Browser + 197 AL Remote Networking/ISP Connect + 198 AL Network Conference + 199 AL Network Chat + 19a AL Telephony/Dialer + 19b AL Logon + 19c AL Logoff + 19d AL Logon/Logoff + 19e AL Terminal Local/Screensaver + 19f AL Control Panel + 1a0 AL Command Line Processor/Run + 1a1 AL Process/Task Manager + 1a2 AL Select Task/Application + 1a3 AL Next Task/Application + 1a4 AL Previous Task/Application + 1a5 AL Preemptive Halt Task/Application + 200 Generic GUI Application Controls + 201 AC New + 202 AC Open + 203 AC CLose + 204 AC Exit + 205 AC Maximize + 206 AC Minimize + 207 AC Save + 208 AC Print + 209 AC Properties + 21a AC Undo + 21b AC Copy + 21c AC Cut + 21d AC Paste + 21e AC Select All + 21f AC Find + 220 AC Find and Replace + 221 AC Search + 222 AC Go To + 223 AC Home + 224 AC Back + 225 AC Forward + 226 AC Stop + 227 AC Refresh + 228 AC Previous Link + 229 AC Next Link + 22b AC History + 22c AC Subscriptions + 22d AC Zoom In + 22e AC Zoom Out + 22f AC Zoom + 230 AC Full Screen View + 231 AC Normal View + 232 AC View Toggle + 233 AC Scroll Up + 234 AC Scroll Down + 235 AC Scroll + 236 AC Pan Left + 237 AC Pan Right + 238 AC Pan + 239 AC New Window + 23a AC Tile Horizontally + 23b AC Tile Vertically + 23c AC Format +HUT 0d Digitizer + 000 Undefined + 001 Digitizer + 002 Pen + 003 Light Pen + 004 Touch Screen + 005 Touch Pad + 006 White Board + 007 Coordinate Measuring Machine + 008 3D Digitizer + 009 Stereo Plotter + 00a Articulated Arm + 00b Armature + 00c Multiple Point Digitizer + 00d Free Space Wand + 020 Stylus + 021 Puck + 022 Finger + 030 Tip Pressure + 031 Barrel Pressure + 032 In Range + 033 Touch + 034 Untouch + 035 Tap + 036 Quality + 037 Data Valid + 038 Transducer Index + 039 Tablet Function Keys + 03a Program Change Keys + 03b Battery Strength + 03c Invert + 03d X Tilt + 03e Y Tilt + 03f Azimuth + 040 Altitude + 041 Twist + 042 Tip Switch + 043 Secondary Tip Switch + 044 Barrel Switch + 045 Eraser + 046 Tablet Pick +HUT 0f PID Page + 000 Undefined + 001 Physical Interface Device + 020 Normal + 021 Set Effect Report + 022 Effect Block Index + 023 Parameter Block Offset + 024 ROM Flag + 025 Effect Type + 026 ET Constant Force + 027 ET Ramp + 028 ET Custom Force Data + 030 ET Square + 031 ET Sine + 032 ET Triangle + 033 ET Sawtooth Up + 034 ET Sawtooth Down + 040 ET Spring + 041 ET Damper + 042 ET Inertia + 043 ET Friction + 050 Duration + 051 Sample Period + 052 Gain + 053 Trigger Button + 054 Trigger Repeat Interval + 055 Axes Enable + 056 Direction Enable + 057 Direction + 058 Type Specific Block Offset + 059 Block Type + 05A Set Envelope Report + 05B Attack Level + 05C Attack Time + 05D Fade Level + 05E Fade Time + 05F Set Condition Report + 060 CP Offset + 061 Positive Coefficient + 062 Negative Coefficient + 063 Positive Saturation + 064 Negative Saturation + 065 Dead Band + 066 Download Force Sample + 067 Isoch Custom Force Enable + 068 Custom Force Data Report + 069 Custom Force Data + 06A Custom Force Vendor Defined Data + 06B Set Custom Force Report + 06C Custom Force Data Offset + 06D Sample Count + 06E Set Periodic Report + 06F Offset + 070 Magnitude + 071 Phase + 072 Period + 073 Set Constant Force Report + 074 Set Ramp Force Report + 075 Ramp Start + 076 Ramp End + 077 Effect Operation Report + 078 Effect Operation + 079 Op Effect Start + 07A Op Effect Start Solo + 07B Op Effect Stop + 07C Loop Count + 07D Device Gain Report + 07E Device Gain + 07F PID Pool Report + 080 RAM Pool Size + 081 ROM Pool Size + 082 ROM Effect Block Count + 083 Simultaneous Effects Max + 084 Pool Alignment + 085 PID Pool Move Report + 086 Move Source + 087 Move Destination + 088 Move Length + 089 PID Block Load Report + 08B Block Load Status + 08C Block Load Success + 08D Block Load Full + 08E Block Load Error + 08F Block Handle + 090 PID Block Free Report + 091 Type Specific Block Handle + 092 PID State Report + 094 Effect Playing + 095 PID Device Control Report + 096 PID Device Control + 097 DC Enable Actuators + 098 DC Disable Actuators + 099 DC Stop All Effects + 09A DC Device Reset + 09B DC Device Pause + 09C DC Device Continue + 09F Device Paused + 0A0 Actuators Enabled + 0A4 Safety Switch + 0A5 Actuator Override Switch + 0A6 Actuator Power + 0A7 Start Delay + 0A8 Parameter Block Size + 0A9 Device Managed Pool + 0AA Shared Parameter Blocks + 0AB Create New Effect Report + 0AC RAM Pool Available +HUT 10 Unicode +HUT 14 Alphanumeric Display + 000 Undefined + 001 Alphanumeric Display + 020 Display Attributes Report + 021 ASCII Character Set + 022 Data Read Back + 023 Font Read Back + 024 Display Control Report + 025 Clear Display + 026 Display Enable + 027 Screen Saver Delay + 028 Screen Saver Enable + 029 Vertical Scroll + 02a Horizontal Scroll + 02b Character Report + 02c Display Data + 02d Display Status + 02e Stat Not Ready + 02f Stat Ready + 030 Err Not a loadable Character + 031 Err Font Data Cannot Be Read + 032 Cursur Position Report + 033 Row + 034 Column + 035 Rows + 036 Columns + 037 Cursor Pixel Positioning + 038 Cursor Mode + 039 Cursor Enable + 03a Cursor Blink + 03b Font Report + 03c Font Data + 03d Character Width + 03e Character Height + 03f Character Spacing Horizontal + 040 Character Spacing Vertical + 041 Unicode Character Set +HUT 80 USB Monitor + 001 Monitor Control + 002 EDID Information + 003 VDIF Information + 004 VESA Version +HUT 81 USB Monitor Enumerated Values +HUT 82 Monitor VESA Virtual Controls + 001 Degauss + 010 Brightness + 012 Contrast + 016 Red Video Gain + 018 Green Video Gain + 01a Blue Video Gain + 01c Focus + 020 Horizontal Position + 022 Horizontal Size + 024 Horizontal Pincushion + 026 Horizontal Pincushion Balance + 028 Horizontal Misconvergence + 02a Horizontal Linearity + 02c Horizontal Linearity Balance + 030 Vertical Position + 032 Vertical Size + 034 Vertical Pincushion + 036 Vertical Pincushion Balance + 038 Vertical Misconvergence + 03a Vertical Linearity + 03c Vertical Linearity Balance + 040 Parallelogram Balance (Key Distortion) + 042 Trapezoidal Distortion (Key) + 044 Tilt (Rotation) + 046 Top Corner Distortion Control + 048 Top Corner Distortion Balance + 04a Bottom Corner Distortion Control + 04c Bottom Corner Distortion Balance + 056 Horizontal Moire + 058 Vertical Moire + 05e Input Level Select + 060 Input Source Select + 06c Red Video Black Level + 06e Green Video Black Level + 070 Blue Video Black Level + 0a2 Auto Size Center + 0a4 Polarity Horizontal Sychronization + 0a6 Polarity Vertical Synchronization + 0aa Screen Orientation + 0ac Horizontal Frequency in Hz + 0ae Vertical Frequency in 0.1 Hz + 0b0 Settings + 0ca On Screen Display (OSD) + 0d4 Stereo Mode +HUT 84 Power Device Page + 000 Undefined + 001 iName + 002 Present Status + 003 Changed Status + 004 UPS + 005 Power Supply + 010 Battery System + 011 Battery System ID + 012 Battery + 013 Battery ID + 014 Charger + 015 Charger ID + 016 Power Converter + 017 Power Converter ID + 018 Outlet System + 019 Outlet System ID + 01a Input + 01b Input ID + 01c Output + 01d Output ID + 01e Flow + 01f Flow ID + 020 Outlet + 021 Outlet ID + 022 Gang + 023 Gang ID + 024 Power Summary + 025 Power Summary ID + 030 Voltage + 031 Current + 032 Frequency + 033 Apparent Power + 034 Active Power + 035 Percent Load + 036 Temperature + 037 Humidity + 038 Bad Count + 040 Config Voltage + 041 Config Current + 042 Config Frequency + 043 Config Apparent Power + 044 Config Active Power + 045 Config Percent Load + 046 Config Temperature + 047 Config Humidity + 050 Switch On Control + 051 Switch Off Control + 052 Toggle Control + 053 Low Voltage Transfer + 054 High Voltage Transfer + 055 Delay Before Reboot + 056 Delay Before Startup + 057 Delay Before Shutdown + 058 Test + 059 Module Reset + 05a Audible Alarm Control + 060 Present + 061 Good + 062 Internal Failure + 063 Voltage out of range + 064 Frequency out of range + 065 Overload + 066 Over Charged + 067 Over Temperature + 068 Shutdown Requested + 069 Shutdown Imminent + 06a Reserved + 06b Switch On/Off + 06c Switchable + 06d Used + 06e Boost + 06f Buck + 070 Initialized + 071 Tested + 072 Awaiting Power + 073 Communication Lost + 0fd iManufacturer + 0fe iProduct + 0ff iSerialNumber +HUT 85 Battery System Page + 000 Undefined + 001 SMB Battery Mode + 002 SMB Battery Status + 003 SMB Alarm Warning + 004 SMB Charger Mode + 005 SMB Charger Status + 006 SMB Charger Spec Info + 007 SMB Selector State + 008 SMB Selector Presets + 009 SMB Selector Info + 010 Optional Mfg. Function 1 + 011 Optional Mfg. Function 2 + 012 Optional Mfg. Function 3 + 013 Optional Mfg. Function 4 + 014 Optional Mfg. Function 5 + 015 Connection to SMBus + 016 Output Connection + 017 Charger Connection + 018 Battery Insertion + 019 Use Next + 01a OK to use + 01b Battery Supported + 01c SelectorRevision + 01d Charging Indicator + 028 Manufacturer Access + 029 Remaining Capacity Limit + 02a Remaining Time Limit + 02b At Rate + 02c Capacity Mode + 02d Broadcast To Charger + 02e Primary Battery + 02f Charge Controller + 040 Terminate Charge + 041 Terminate Discharge + 042 Below Remaining Capacity Limit + 043 Remaining Time Limit Expired + 044 Charging + 045 Discharging + 046 Fully Charged + 047 Fully Discharged + 048 Conditioning Flag + 049 At Rate OK + 04a SMB Error Code + 04b Need Replacement + 060 At Rate Time To Full + 061 At Rate Time To Empty + 062 Average Current + 063 Max Error + 064 Relative State Of Charge + 065 Absolute State Of Charge + 066 Remaining Capacity + 067 Full Charge Capacity + 068 Run Time To Empty + 069 Average Time To Empty + 06a Average Time To Full + 06b Cycle Count + 080 Batt. Pack Model Level + 081 Internal Charge Controller + 082 Primary Battery Support + 083 Design Capacity + 084 Specification Info + 085 Manufacturer Date + 086 Serial Number + 087 iManufacturerName + 088 iDeviceName + 089 iDeviceChemistry + 08a Manufacturer Data + 08b Rechargeable + 08c Warning Capacity Limit + 08d Capacity Granularity 1 + 08e Capacity Granularity 2 + 08f iOEMInformation + 0c0 Inhibit Charge + 0c1 Enable Polling + 0c2 Reset To Zero + 0d0 AC Present + 0d1 Battery Present + 0d2 Power Fail + 0d3 Alarm Inhibited + 0d4 Thermistor Under Range + 0d5 Thermistor Hot + 0d6 Thermistor Cold + 0d7 Thermistor Over Range + 0d8 Voltage Out Of Range + 0d9 Current Out Of Range + 0da Current Not Regulated + 0db Voltage Not Regulated + 0dc Master Mode + 0f0 Charger Selector Support + 0f1 Charger Spec + 0f2 Level 2 + 0f3 Level 3 +HUT 86 Power Pages +HUT 87 Power Pages +HUT 8c Bar Code Scanner Page (POS) +HUT 8d Scale Page (POS) +HUT 90 Camera Control Page +HUT 91 Arcade Control Page +HUT f0 Cash Device + 0f1 Cash Drawer + 0f2 Cash Drawer Number + 0f3 Cash Drawer Set + 0f4 Cash Drawer Status +HUT ff Vendor Specific + +# List of Languages + +# Syntax: +# L language_id language_name +# dialect_id dialect_name + +L 0001 Arabic + 01 Saudi Arabia + 02 Iraq + 03 Egypt + 04 Libya + 05 Algeria + 06 Morocco + 07 Tunesia + 08 Oman + 09 Yemen + 0a Syria + 0b Jordan + 0c Lebanon + 0d Kuwait + 0e U.A.E + 0f Bahrain + 10 Qatar +L 0002 Bulgarian +L 0003 Catalan +L 0004 Chinese + 01 Traditional + 02 Simplified + 03 Hongkong SAR, PRC + 04 Singapore + 05 Macau SAR +L 0005 Czech +L 0006 Danish +L 0007 German + 01 German + 02 Swiss + 03 Austrian + 04 Luxembourg + 05 Liechtenstein +L 0008 Greek +L 0009 English + 01 US + 02 UK + 03 Australian + 04 Canadian + 05 New Zealand + 06 Ireland + 07 South Africa + 08 Jamaica + 09 Carribean + 0a Belize + 0b Trinidad + 0c Zimbabwe + 0d Philippines +L 000a Spanish + 01 Castilian + 02 Mexican + 03 Modern + 04 Guatemala + 05 Costa Rica + 06 Panama + 07 Dominican Republic + 08 Venzuela + 09 Colombia + 0a Peru + 0b Argentina + 0c Ecuador + 0d Chile + 0e Uruguay + 0f Paraguay + 10 Bolivia + 11 El Salvador + 12 Honduras + 13 Nicaragua + 14 Puerto Rico +L 000b Finnish +L 000c French + 01 French + 02 Belgian + 03 Canadian + 04 Swiss + 05 Luxembourg + 06 Monaco +L 000d Hebrew +L 000e Hungarian +L 000f Idelandic +L 0010 Italian + 01 Italian + 02 Swiss +L 0011 Japanese +L 0012 Korean + 01 Korean +L 0013 Dutch + 01 Dutch + 02 Belgian +L 0014 Norwegian + 01 Bokmal + 02 Nynorsk +L 0015 Polish +L 0016 Portuguese + 01 Portuguese + 02 Brazilian +L 0017 forgotten +L 0018 Romanian +L 0019 Russian +L 001a Serbian + 01 Croatian + 02 Latin + 03 Cyrillic +L 001b Slovak +L 001c Albanian +L 001d Swedish + 01 Swedish + 02 Finland +L 001e Thai +L 001f Turkish +L 0020 Urdu + 01 Pakistan + 02 India +L 0021 Indonesian +L 0022 Ukrainian +L 0023 Belarusian +L 0024 Slovenian +L 0025 Estonian +L 0026 Latvian +L 0027 Lithuanian + 01 Lithuanian +L 0028 forgotten +L 0029 Farsi +L 002a Vietnamese +L 002b Armenian +L 002c Azeri + 01 Cyrillic + 02 Latin +L 002d Basque +L 002e forgotten +L 002f Macedonian +L 0036 Afrikaans +L 0037 Georgian +L 0038 Faeroese +L 0039 Hindi +L 003e Malay + 01 Malaysia + 02 Brunei Darassalam +L 003f Kazak +L 0041 Awahili +L 0043 Uzbek + 01 Latin + 02 Cyrillic +L 0044 Tatar +L 0045 Bengali +L 0046 Punjabi +L 0047 Gujarati +L 0048 Oriya +L 0049 Tamil +L 004a Telugu +L 004b Kannada +L 004c Malayalam +L 004d Assamese +L 004e Marathi +L 004f Sanskrit +L 0057 Konkani +L 0058 Manipuri +L 0059 Sindhi +L 0060 Kashmiri + 02 India +L 0061 Nepali + 02 India + +# HID Descriptor bCountryCode +# HID Specification 1.11 (2001-06-27) page 23 +# +# Syntax: +# HCC country_code keymap_type + +HCC 00 Not supported +HCC 01 Arabic +HCC 02 Belgian +HCC 03 Canadian-Bilingual +HCC 04 Canadian-French +HCC 05 Czech Republic +HCC 06 Danish +HCC 07 Finnish +HCC 08 French +HCC 09 German +HCC 10 Greek +HCC 11 Hebrew +HCC 12 Hungary +HCC 13 International (ISO) +HCC 14 Italian +HCC 15 Japan (Katakana) +HCC 16 Korean +HCC 17 Latin American +HCC 18 Netherlands/Dutch +HCC 19 Norwegian +HCC 20 Persian (Farsi) +HCC 21 Poland +HCC 22 Portuguese +HCC 23 Russia +HCC 24 Slovakia +HCC 25 Spanish +HCC 26 Swedish +HCC 27 Swiss/French +HCC 28 Swiss/German +HCC 29 Switzerland +HCC 30 Taiwan +HCC 31 Turkish-Q +HCC 32 UK +HCC 33 US +HCC 34 Yugoslavia +HCC 35 Turkish-F + +# List of Video Class Terminal Types + +# Syntax: +# VT terminal_type terminal_type_name + +VT 0100 USB Vendor Specific +VT 0101 USB Streaming +VT 0200 Input Vendor Specific +VT 0201 Camera Sensor +VT 0202 Sequential Media +VT 0300 Output Vendor Specific +VT 0301 Generic Display +VT 0302 Sequential Media +VT 0400 External Vendor Specific +VT 0401 Composite Video +VT 0402 S-Video +VT 0403 Component Video + diff --git a/kcontrol/usbview/usbdb.cpp b/kcontrol/usbview/usbdb.cpp new file mode 100644 index 000000000..89cf973ba --- /dev/null +++ b/kcontrol/usbview/usbdb.cpp @@ -0,0 +1,150 @@ +/*************************************************************************** + * Copyright (C) 2001 by Matthias Hoelzer-Kluepfel * + * * + * 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. * + * * + ***************************************************************************/ + +#include + +#include + + +#include +#include + + +#include + + +#include "usbdb.h" + + +USBDB::USBDB() +{ +#ifndef USBIDS_FILE + QString db = "/usr/share/hwdata/usb.ids"; /* on Fedora */ + if (!QFile::exists(db)) + db = locate("data", "kcmusb/usb.ids"); +#else + QString db = USBIDS_FILE; +#endif + if (db.isEmpty()) + return; + + _classes.setAutoDelete(true); + _ids.setAutoDelete(true); + + QFile f(db); + + if (f.open(IO_ReadOnly)) + { + QTextStream ts(&f); + + QString line, name; + int id=0, subid=0, protid=0; + QRegExp vendor("[0-9a-fA-F]+ "); + QRegExp product("\\s+[0-9a-fA-F]+ "); + QRegExp cls("C [0-9a-fA-F][0-9a-fA-F]"); + QRegExp subclass("\\s+[0-9a-fA-F][0-9a-fA-F] "); + QRegExp prot("\\s+[0-9a-fA-F][0-9a-fA-F] "); + while (!ts.eof()) + { + line = ts.readLine(); + if (line.left(1) == "#" || line.stripWhiteSpace().isEmpty()) + continue; + + // skip AT lines + if (line.left(2) == "AT") + continue; + + if (cls.search(line) == 0 && cls.matchedLength() == 4) + { + id = line.mid(2,2).toInt(0, 16); + name = line.mid(4).stripWhiteSpace(); + _classes.insert(QString("%1").arg(id), new QString(name)); + } + else if (prot.search(line) == 0 && prot.matchedLength() > 5) + { + line = line.stripWhiteSpace(); + protid = line.left(2).toInt(0, 16); + name = line.mid(4).stripWhiteSpace(); + _classes.insert(QString("%1-%2-%3").arg(id).arg(subid).arg(protid), new QString(name)); + } + else if (subclass.search(line) == 0 && subclass.matchedLength() > 4) + { + line = line.stripWhiteSpace(); + subid = line.left(2).toInt(0, 16); + name = line.mid(4).stripWhiteSpace(); + _classes.insert(QString("%1-%2").arg(id).arg(subid), new QString(name)); + } + else if (vendor.search(line) == 0 && vendor.matchedLength() == 5) + { + id = line.left(4).toInt(0,16); + name = line.mid(6); + _ids.insert(QString("%1").arg(id), new QString(name)); + } + else if (product.search(line) == 0 && product.matchedLength() > 5 ) + { + line = line.stripWhiteSpace(); + subid = line.left(4).toInt(0,16); + name = line.mid(6); + _ids.insert(QString("%1-%2").arg(id).arg(subid), new QString(name)); + } + + } + + f.close(); + } +} + + +QString USBDB::vendor(int id) +{ + QString *s = _ids[QString("%1").arg(id)]; + if ((id!= 0) && s) + { + return *s; + } + return QString::null; +} + + +QString USBDB::device(int vendor, int id) +{ + QString *s = _ids[QString("%1-%2").arg(vendor).arg(id)]; + if ((id != 0) && (vendor != 0) && s) + return *s; + return QString::null; +} + + +QString USBDB::cls(int cls) +{ + QString *s = _classes[QString("%1").arg(cls)]; + if (s) + return *s; + return QString::null; +} + + +QString USBDB::subclass(int cls, int sub) +{ + QString *s = _classes[QString("%1-%2").arg(cls).arg(sub)]; + if (s) + return *s; + return QString::null; +} + + +QString USBDB::protocol(int cls, int sub, int prot) +{ + QString *s = _classes[QString("%1-%2-%2").arg(cls).arg(sub).arg(prot)]; + if (s) + return *s; + return QString::null; +} + diff --git a/kcontrol/usbview/usbdb.h b/kcontrol/usbview/usbdb.h new file mode 100644 index 000000000..2b4226937 --- /dev/null +++ b/kcontrol/usbview/usbdb.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * Copyright (C) 2001 by Matthias Hoelzer-Kluepfel * + * * + * 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. * + * * + ***************************************************************************/ + + +#ifndef __USB_DB_H__ +#define __USB_DB_H__ + + +#include + + +class USBDB +{ +public: + + USBDB(); + + QString vendor(int id); + QString device(int vendor, int id); + + QString cls(int cls); + QString subclass(int cls, int sub); + QString protocol(int cls, int sub, int prot); + +private: + + QDict _classes, _ids; + +}; + + +#endif diff --git a/kcontrol/usbview/usbdevices.cpp b/kcontrol/usbview/usbdevices.cpp new file mode 100644 index 000000000..3d557a7ed --- /dev/null +++ b/kcontrol/usbview/usbdevices.cpp @@ -0,0 +1,431 @@ +/*************************************************************************** + * Copyright (C) 2001 by Matthias Hoelzer-Kluepfel * + * * + * 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. * + * * + ***************************************************************************/ + + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "usbdb.h" +#include "usbdevices.h" + +#include + +#ifdef Q_OS_FREEBSD +#include +#include +#endif + +QPtrList USBDevice::_devices; +USBDB *USBDevice::_db; + + +USBDevice::USBDevice() + : _bus(0), _level(0), _parent(0), _port(0), _count(0), _device(0), + _channels(0), _power(0), _speed(0.0), + _bwTotal(0), _bwUsed(0), _bwPercent(0), _bwIntr(0), _bwIso(0), _hasBW(false), + _verMajor(0), _verMinor(0), _class(0), _sub(0), _prot(0), _maxPacketSize(0), _configs(0), + _vendorID(0), _prodID(0), _revMajor(0), _revMinor(0) +{ + _devices.append(this); + _devices.setAutoDelete(true); + + if (!_db) + _db = new USBDB; +} + +static QString catFile(QString fname) +{ + char buffer[256]; + QString result; + int fd = ::open(QFile::encodeName(fname), O_RDONLY); + if (fd<0) + return QString::null; + + if (fd >= 0) + { + ssize_t count; + while ((count = ::read(fd, buffer, 256)) > 0) + result.append(QString(buffer).left(count)); + + ::close(fd); + } + return result.stripWhiteSpace(); +} + +void USBDevice::parseSysDir(int bus, int parent, int level, QString dname) +{ + _level = level; + _parent = parent; + _manufacturer = catFile(dname + "/manufacturer"); + _product = catFile(dname + "/product"); + + _bus = bus; + _device = catFile(dname + "/devnum").toUInt(); + + if (_device == 1) + _product += QString(" (%1)").arg(_bus); + + _vendorID = catFile(dname + "/idVendor").toUInt(0, 16); + _prodID = catFile(dname + "/idProduct").toUInt(0, 16); + + _class = catFile(dname + "/bDeviceClass").toUInt(0, 16); + _sub = catFile(dname + "/bDeviceSubClass").toUInt(0, 16); + _maxPacketSize = catFile(dname + "/bMaxPacketSize0").toUInt(); + + _speed = catFile(dname + "/speed").toDouble(); + _serial = catFile(dname + "/serial"); + _channels = catFile(dname + "/maxchild").toUInt(); + + double version = catFile(dname + "/version").toDouble(); + _verMajor = int(version); + _verMinor = int(10*(version - floor(version))); + + QDir dir(dname); + dir.setNameFilter(QString("%1-*").arg(bus)); + dir.setFilter(QDir::Dirs); + QStringList list = dir.entryList(); + + for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { + if ((*it).contains(':')) + continue; + + USBDevice* dev = new USBDevice(); + dev->parseSysDir(bus, ++level, _device, dname + "/" + *it); + } +} + +void USBDevice::parseLine(QString line) +{ + if (line.startsWith("T:")) + sscanf(line.local8Bit().data(), + "T: Bus=%2d Lev=%2d Prnt=%2d Port=%d Cnt=%2d Dev#=%3d Spd=%3f MxCh=%2d", + &_bus, &_level, &_parent, &_port, &_count, &_device, &_speed, &_channels); + else if (line.startsWith("S: Manufacturer")) + _manufacturer = line.mid(17); + else if (line.startsWith("S: Product")) { + _product = line.mid(12); + /* add bus number to root devices */ + if (_device==1) + _product += QString(" (%1)").arg(_bus); + } + else if (line.startsWith("S: SerialNumber")) + _serial = line.mid(17); + else if (line.startsWith("B:")) + { + sscanf(line.local8Bit().data(), + "B: Alloc=%3d/%3d us (%2d%%), #Int=%3d, #Iso=%3d", + &_bwUsed, &_bwTotal, &_bwPercent, &_bwIntr, &_bwIso); + _hasBW = true; + } + else if (line.startsWith("D:")) + { + char buffer[11]; + sscanf(line.local8Bit().data(), + "D: Ver=%x.%x Cls=%x(%10s) Sub=%x Prot=%x MxPS=%d #Cfgs=%d", + &_verMajor, &_verMinor, &_class, buffer, &_sub, &_prot, &_maxPacketSize, &_configs); + _className = buffer; + } + else if (line.startsWith("P:")) + sscanf(line.local8Bit().data(), + "P: Vendor=%x ProdID=%x Rev=%x.%x", + &_vendorID, &_prodID, &_revMajor, &_revMinor); +} + + +USBDevice *USBDevice::find(int bus, int device) +{ + QPtrListIterator it(_devices); + for ( ; it.current(); ++it) + if (it.current()->bus() == bus && it.current()->device() == device) + return it.current(); + return 0; +} + +QString USBDevice::product() +{ + if (!_product.isEmpty()) + return _product; + QString pname = _db->device(_vendorID, _prodID); + if (!pname.isEmpty()) + return pname; + return i18n("Unknown"); +} + + +QString USBDevice::dump() +{ + QString r; + + r = "

      " + product() + "


      "; + + if (!_manufacturer.isEmpty()) + r += i18n("Manufacturer: ") + _manufacturer + "
      "; + if (!_serial.isEmpty()) + r += i18n("Serial #: ") + _serial + "
      "; + + r += "
      "; + + QString c = QString("").arg(_class); + QString cname = _db->cls(_class); + if (!cname.isEmpty()) + c += ""; + r += i18n("%1").arg(c); + QString sc = QString("").arg(_sub); + QString scname = _db->subclass(_class, _sub); + if (!scname.isEmpty()) + sc += ""; + r += i18n("%1").arg(sc); + QString pr = QString("").arg(_prot); + QString prname = _db->protocol(_class, _sub, _prot); + if (!prname.isEmpty()) + pr += ""; + r += i18n("%1").arg(pr); +#ifndef Q_OS_FREEBSD + r += i18n("") + .arg(_verMajor,0,16) + .arg(QString::number(_verMinor,16).prepend('0').right(2)); +#endif + r += ""; + + QString v = QString::number(_vendorID,16); + QString name = _db->vendor(_vendorID); + if (!name.isEmpty()) + v += ""; + r += i18n("").arg(v); + QString p = QString::number(_prodID,16); + QString pname = _db->device(_vendorID, _prodID); + if (!pname.isEmpty()) + p += ""; + r += i18n("").arg(p); + r += i18n("") + .arg(_revMajor,0,16) + .arg(QString::number(_revMinor,16).prepend('0').right(2)); + r += ""; + + r += i18n("").arg(_speed); + r += i18n("").arg(_channels); +#ifdef Q_OS_FREEBSD + if ( _power ) + r += i18n("").arg(_power); + else + r += i18n(""); + r += i18n("").arg(*_devnodes.at(0)); + if ( _devnodes.count() > 1 ) + for ( QStringList::Iterator it = _devnodes.at(1); it != _devnodes.end(); ++it ) + r += ""; +#else + r += i18n("").arg(_maxPacketSize); +#endif + r += ""; + + if (_hasBW) + { + r += i18n("").arg(_bwUsed).arg(_bwTotal).arg(_bwPercent); + r += i18n("").arg(_bwIntr); + r += i18n("").arg(_bwIso); + r += ""; + } + + r += "
      %1(" + i18n(cname.latin1()) +")
      Class
      %1(" + i18n(scname.latin1()) +")
      Subclass
      %1(" + prname +")
      Protocol
      USB Version%1.%2
      (" + name +")
      Vendor ID0x%1
      (" + pname +")
      Product ID0x%1
      Revision%1.%2
      Speed%1 Mbit/s
      Channels%1
      Power Consumption%1 mA
      Power Consumptionself powered
      Attached Devicenodes%1
      " + *it + "
      Max. Packet Size%1
      Bandwidth%1 of %2 (%3%)
      Intr. requests%1
      Isochr. requests%1
      "; + + return r; +} + + +#ifndef Q_OS_FREEBSD +bool USBDevice::parse(QString fname) +{ + _devices.clear(); + + QString result; + + // read in the complete file + // + // Note: we can't use a QTextStream, as the files in /proc + // are pseudo files with zero length + char buffer[256]; + int fd = ::open(QFile::encodeName(fname), O_RDONLY); + if (fd<0) + return false; + + if (fd >= 0) + { + ssize_t count; + while ((count = ::read(fd, buffer, 256)) > 0) + result.append(QString(buffer).left(count)); + + ::close(fd); + } + + // read in the device infos + USBDevice *device = 0; + int start=0, end; + result.replace(QRegExp("^\n"),""); + while ((end = result.find('\n', start)) > 0) + { + QString line = result.mid(start, end-start); + + if (line.startsWith("T:")) + device = new USBDevice(); + + if (device) + device->parseLine(line); + + start = end+1; + } + return true; +} + +bool USBDevice::parseSys(QString dname) +{ + QDir d(dname); + d.setNameFilter("usb*"); + QStringList list = d.entryList(); + + for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { + USBDevice* device = new USBDevice(); + + int bus = 0; + QRegExp bus_reg("[a-z]*([0-9]+)"); + if (bus_reg.search(*it) != -1) + bus = bus_reg.cap(1).toInt(); + + + device->parseSysDir(bus, 0, 0, d.absPath() + "/" + *it); + } + + return d.count(); +} + +#else + +/* + * FreeBSD support by Markus Brueffer + * + * Basic idea and some code fragments were taken from FreeBSD's usbdevs(8), + * originally developed for NetBSD, so this code should work with no or + * only little modification on NetBSD. + */ + +void USBDevice::collectData( int fd, int level, usb_device_info &di, int parent) +{ + // determine data for this device + _level = level; + _parent = parent; + + _bus = di.udi_bus; + _device = di.udi_addr; + _product = QString::fromLatin1(di.udi_product); + if ( _device == 1 ) + _product += " " + QString::number( _bus ); + _manufacturer = QString::fromLatin1(di.udi_vendor); + _prodID = di.udi_productNo; + _vendorID = di.udi_vendorNo; + _class = di.udi_class; + _sub = di.udi_subclass; + _prot = di.udi_protocol; + _power = di.udi_power; + _channels = di.udi_nports; + + // determine the speed +#if __FreeBSD_version > 490102 + switch (di.udi_speed) { + case USB_SPEED_LOW: _speed = 1.5; break; + case USB_SPEED_FULL: _speed = 12.0; break; + case USB_SPEED_HIGH: _speed = 480.0; break; + } +#else + _speed = di.udi_lowspeed ? 1.5 : 12.0; +#endif + + // Get all attached devicenodes + for ( int i = 0; i < USB_MAX_DEVNAMES; ++i ) + if ( di.udi_devnames[i][0] ) + _devnodes << di.udi_devnames[i]; + + // For compatibility, split the revision number + sscanf( di.udi_release, "%x.%x", &_revMajor, &_revMinor ); + + // Cycle through the attached devices if there are any + for ( int p = 0; p < di.udi_nports; ++p ) { + // Get data for device + struct usb_device_info di2; + + di2.udi_addr = di.udi_ports[p]; + + if ( di2.udi_addr >= USB_MAX_DEVICES ) + continue; + + if ( ioctl(fd, USB_DEVICEINFO, &di2) == -1 ) + continue; + + // Only add the device if we didn't detect it, yet + if (!find( di2.udi_bus, di2.udi_addr ) ) + { + USBDevice *device = new USBDevice(); + device->collectData( fd, level + 1, di2, di.udi_addr ); + } + } +} + + + +bool USBDevice::parse(QString fname) +{ + static bool showErrorMessage = true; + bool error = false; + _devices.clear(); + + QFile controller("/dev/usb0"); + int i = 1; + while ( controller.exists() ) + { + // If the devicenode exists, continue with further inspection + if ( controller.open(IO_ReadOnly) ) + { + for ( int addr = 1; addr < USB_MAX_DEVICES; ++addr ) + { + struct usb_device_info di; + + di.udi_addr = addr; + if ( ioctl(controller.handle(), USB_DEVICEINFO, &di) != -1 ) + { + if (!find( di.udi_bus, di.udi_addr ) ) + { + USBDevice *device = new USBDevice(); + device->collectData( controller.handle(), 0, di, 0); + } + } + } + controller.close(); + } else { + error = true; + } + controller.setName( QString::fromLocal8Bit("/dev/usb%1").arg(i++) ); + } + + if ( showErrorMessage && error ) { + showErrorMessage = false; + KMessageBox::error( 0, i18n("Could not open one or more USB controller. Make sure, you have read access to all USB controllers that should be listed here.")); + } + + return true; +} +#endif diff --git a/kcontrol/usbview/usbdevices.h b/kcontrol/usbview/usbdevices.h new file mode 100644 index 000000000..853df02b3 --- /dev/null +++ b/kcontrol/usbview/usbdevices.h @@ -0,0 +1,75 @@ +/*************************************************************************** + * Copyright (C) 2001 by Matthias Hoelzer-Kluepfel * + * * + * 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. * + * * + ***************************************************************************/ + + +#ifndef __USB_DEVICES_H__ +#define __USB_DEVICES_H__ + + +#include +#include + +#ifdef Q_OS_FREEBSD +#include +#endif + +class USBDB; + + +class USBDevice +{ +public: + + USBDevice(); + + void parseLine(QString line); + void parseSysDir(int bus, int parent, int level, QString line); + + int level() { return _level; }; + int device() { return _device; }; + int parent() { return _parent; }; + int bus() { return _bus; }; + QString product(); + + QString dump(); + + static QPtrList &devices() { return _devices; }; + static USBDevice *find(int bus, int device); + static bool parse(QString fname); + static bool parseSys(QString fname); + + +private: + + static QPtrList _devices; + + static USBDB *_db; + + int _bus, _level, _parent, _port, _count, _device, _channels, _power; + float _speed; + + QString _manufacturer, _product, _serial; + + int _bwTotal, _bwUsed, _bwPercent, _bwIntr, _bwIso; + bool _hasBW; + + unsigned int _verMajor, _verMinor, _class, _sub, _prot, _maxPacketSize, _configs; + QString _className; + + unsigned int _vendorID, _prodID, _revMajor, _revMinor; + +#ifdef Q_OS_FREEBSD + void collectData( int fd, int level, usb_device_info &di, int parent ); + QStringList _devnodes; +#endif +}; + + +#endif diff --git a/kcontrol/view1394/Makefile.am b/kcontrol/view1394/Makefile.am new file mode 100644 index 000000000..88f2b37c7 --- /dev/null +++ b/kcontrol/view1394/Makefile.am @@ -0,0 +1,19 @@ +kde_module_LTLIBRARIES = kcm_view1394.la + +kcm_view1394_la_SOURCES = view1394widget.ui view1394.cpp + +kcm_view1394_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_view1394_la_LIBADD = $(LIB_KDEUI) -lraw1394 + +AM_CPPFLAGS= $(all_includes) + +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmview1394.pot + +xdg_apps_DATA = kcmview1394.desktop + +view1394_vendor_DATA = oui.db +view1394_vendordir = $(kde_datadir)/kcmview1394 + diff --git a/kcontrol/view1394/README b/kcontrol/view1394/README new file mode 100644 index 000000000..e2dd6205e --- /dev/null +++ b/kcontrol/view1394/README @@ -0,0 +1,13 @@ +this kcontrol module shows the current configuration of the IEEE 1394 bus. +It uses libraw1394 (see www.linux1394.org). I don't know how the 1394 apis +on other OS's look, feel free to port it :-) + +The file oui.db is generated from the file oui.txt which you can get at +http://standards.ieee.org/regauth/oui/index.shtml + +It was generated using the following command: + +awk '/base 16/ { if (NF>3) {s=$1; for (i=4; i<=NF; i++) s=s " " $i; print s}}' oui.txt > oui.db + +Alex + diff --git a/kcontrol/view1394/configure.in.in b/kcontrol/view1394/configure.in.in new file mode 100644 index 000000000..d35bf61cc --- /dev/null +++ b/kcontrol/view1394/configure.in.in @@ -0,0 +1,15 @@ +AC_ARG_WITH(libraw1394, + [AC_HELP_STRING(--with-libraw1394, + [enable visualization of ieee1394 devices through libraw1394 @<:@default=check@:>@])], + [], with_libraw1394=check) + +VIEW1394_SUBDIR= +if test "x$with_libraw1394" != xno; then + KDE_CHECK_HEADER(libraw1394/raw1394.h, VIEW1394_SUBDIR=view1394) + + if test "x$with_libraw1394" != xcheck && test -z "$VIEW1394_SUBDIR"; then + AC_MSG_ERROR([--with-libraw1394 was given, but test for libraw1394 failed]) + fi +fi + +AM_CONDITIONAL(include_kcontrol_view1394, test -n "$VIEW1394_SUBDIR") diff --git a/kcontrol/view1394/kcmview1394.desktop b/kcontrol/view1394/kcmview1394.desktop new file mode 100644 index 000000000..04a831f58 --- /dev/null +++ b/kcontrol/view1394/kcmview1394.desktop @@ -0,0 +1,219 @@ +[Desktop Entry] +Icon=ieee1394 +Type=Application +DocPath=kinfocenter/view1394/index.html +Exec=kcmshell kcmview1394 + +X-KDE-Library=view1394 +X-KDE-ParentApp=kinfocenter + +Name=IEEE 1394 Devices +Name[af]=IEEE 1394 Toestelle +Name[ar]=أجهزة IEEE 1394 +Name[be]=Прылады IEEE 1394 +Name[bg]=IEEE 1394 +Name[br]=Trobarzhelloù IEEE 1394 +Name[bs]=IEEE 1394 uređaji +Name[ca]=Dispositius IEEE 1394 +Name[cs]=IEEE 1394 zařízení +Name[csb]=Ùrządzenia IEEE 1394 +Name[cy]=Dyfeisiau IEE 1394 +Name[da]=IEEE 1394-enheder +Name[de]=IEEE-1394-Geräte +Name[el]=Συσκευές IEEE 1394 +Name[eo]=IEEE 1394 Aparatoj +Name[es]=Dispositivos IEEE 1394 +Name[et]=IEEE 1394 seadmed +Name[eu]=IEEE 1394 gailuak +Name[fa]=دستگاههای IEEE 1394 +Name[fi]=IEEE 1394 (Firewire)-laitteet +Name[fr]=Périphériques IEEE 1394 +Name[fy]=IEEE 1394-apparaten +Name[ga]=Gléasanna IEEE 1394 +Name[gl]=Dispositivos IEEE 1394 +Name[he]=התקני IEEE 1394 +Name[hi]=आईईईई 1394 औज़ार +Name[hr]=IEEE 1394 uređaji +Name[hu]=IEEE 1394-eszközök +Name[is]=IEEE 1394 Tæki +Name[it]=Dispositivi IEEE 1394 +Name[ja]=IEEE 1394 デバイス +Name[ka]=IEEE 1394 მოწყობილობები +Name[kk]=IEEE 1394 құрылғылар +Name[km]=ឧបករណ៍ IEEE 1394 +Name[ko]=IEEE 1394 장치 +Name[lt]=IEEE 1394 įrenginiai +Name[lv]=IEEE 1394 (Fireware) iekārtas +Name[mk]=IEEE 1394 Уреди +Name[mn]=IEEE 1394 Төхөөрөмж +Name[ms]=Peranti IEEE 1394 +Name[mt]=Apparat IEEE 1394 +Name[nb]=IEEE 1394-enheter +Name[nds]=IEEE-1394-Reedschappen +Name[ne]=IEEE 1394 यन्त्र +Name[nl]=IEEE 1394-apparaten +Name[nn]=IEEE 1394-einingar +Name[pa]=IEEE 1394 ਜੰਤਰ +Name[pl]=Urządzenia IEEE 1394 +Name[pt]=Dispositivos IEEE 1394 +Name[pt_BR]=Dispositivos IEEE 1394 +Name[ro]=Dispozitive IEEE 1394 +Name[ru]=Устройства IEEE 1394 +Name[rw]=Apareye IEEE 1394 +Name[se]=IEEE 1394-ovttadagat +Name[sk]=Zariadenia IEEE 1394 +Name[sl]=Naprave IEEE 1394 +Name[sr]=IEEE 1394 уређаји +Name[sr@Latn]=IEEE 1394 uređaji +Name[sv]=IEEE 1394-enheter +Name[ta]=IEEE 1394 சாதனங்கள் +Name[te]=ఐఈఈఈ 1394 పరికరాలు +Name[tg]=Дастгоҳҳои EEE 1394 +Name[th]=อุปกรณ์ IEEE 1394 +Name[tr]=IEEE 1394 Aygıtları +Name[tt]=IEEE 1394 Cıhazları +Name[uk]=Пристрої IEEE 1394 +Name[uz]=IEEE 1394 uskunalar +Name[uz@cyrillic]=IEEE 1394 ускуналар +Name[vi]=Thiết bị IEEE 1394 +Name[wa]=Éndjins IEEE 1394 +Name[zh_CN]=IEEE 1394 设备 +Name[zh_TW]=IEEE 1394 裝置 + +Comment=View the IEEE 1394 devices attached to this computer +Comment[af]=Besigtig die IEEE 1394 toestelle wat aan hierdie rekenaar gekoppel is +Comment[ar]=إعرض أجهزة IEEE 1394 المتصلة بهذا الحاسوب +Comment[be]=Паказвае прылады IEEE 1394, далучаныя да гэтага кампутара +Comment[bg]=Информация за IEEE 1394 устройствата +Comment[bn]=এই কমপিউটারের সঙ্গে সংযুক্ত IEEE 1394ডিভাইসগুলির তালিকা +Comment[br]=Sellout ouzh trobarzhelloù IEEE 1394 kevreet ouzh an urzhiataer-mañ +Comment[bs]=Pregledajte IEEE 1394 uređaje priključene na ovaj računar +Comment[ca]=Veure els dispositius IEEE 1394 connectats a aquest ordinador +Comment[cs]=Zobrazení IEEE 1394 zařízení připojených k tomuto počítači +Comment[csb]=Wëdowiédzô ò ùrządzeniach IEEE 1394 przëłączonëch do tegò kòmpùtra +Comment[cy]= Gweld y dyfeisiau IEE 1394 sydd wedi eu cysylltu i'r cyfrifiadur yma +Comment[da]=Se IEEE 1394-enheder forbundet til denne computer +Comment[de]=IEEE-1394-Geräte aufführen, die an den Rechner angeschlossen sind +Comment[el]=Προβολή των συνδεδεμένων σε αυτό σύστημα συσκευών IEEE 1394 +Comment[eo]=Montras la IEEE 1394 aparatojn ĉe via komputilo +Comment[es]=Muestra los dispositivos IEEE 1394 conectados a este equipo +Comment[et]=Arvutiga ühendatud IEEE 1394 seadmete vaatamine +Comment[eu]=Ilkusi ordenagailu honetan konektatuta dauden IEEE 1394 gailuak +Comment[fa]=نمای دستگاههای IEEE 1394 پیوست‌شده به این رایانه +Comment[fi]=Näyttää tietokoneeseen liitetyt IEEE 1394 (Firewire)-laitteet +Comment[fr]=Affiche les périphériques IEEE 1394 rattachés à cet ordinateur +Comment[fy]=Hjir kinne jo de IEEE 1394-apparaten besjen die op dizze kompjûter oansluten binne +Comment[ga]=Taispeáin na gléasanna IEEE 1394 ceangailte leis an ríomhaire seo +Comment[gl]=Ver os dispositivos IEEE 1394 conectados a este computador +Comment[he]=צפה בהתקני IEEE 1394 המחוברים למחשב זה +Comment[hi]=आईईईई 1394 औज़ारों को देखे जो इस कम्प्यूटर से जुड़े हैं +Comment[hr]=Pregled IEEE 1394 uređaja spojenih na računalo +Comment[hu]=Az IEEE 1394-es eszközök jellemzőinek megtekintése +Comment[is]=SKoða IEEE 1394 tækin sem eru tengd við þessa tölvu +Comment[it]=Mostra i dispositivi IEEE 1394 collegati a questo computer +Comment[ja]=コンピュータに接続されている IEEE 1394 デバイスの情報 +Comment[ka]=ამ კომპიუტერზე შეერთებული IEEE 1394 მოწყობილობების დათვალიერება +Comment[kk]=Компьютерге тіркелген IEEE 1394 құрылғылары +Comment[km]=មើល​ឧបករណ៍ IEEE 1394 ដែល​បាន​ភ្ជាប់​មក​កុំព្យូទ័រ​នេះ +Comment[ko]=이 컴퓨터에 연결된 IEEE 1394 장치 표시 +Comment[lt]=Žiūrėkite IEEE 1394 įrenginius, kurie prijungti prie šio kompiuterio +Comment[lv]=Skatīt datoram pievienotās IEEE 1394 (Fireware) iekārtas +Comment[mk]=Видете ги IEEE 1394 уредите закачени на овој компјутер +Comment[mn]=Энэ компьютерт залгагдсан IEEE 1394-төхөөрөмж харуулах +Comment[ms]=Papar peranti IEEE 1394 yang dilekapkan pada komputer ini +Comment[mt]=Ara l-apparat IEEE 1394 imqabbad ma' dal-kompjuter +Comment[nb]=Se hvilke IEEE 1394-enheter som er koblet til denne maskinen +Comment[nds]=De IEEE1394-Reedschappen ankieken, de dissen Reekner tokoppelt sünd +Comment[ne]=यो कम्प्युटरमा सङ्लग्न गरिएका IEEE 1394 यन्त्र देखाउनुहोस् +Comment[nl]=Hier kunt u de IEEE 1394-apparaten die op deze computer zijn aangesloten bekijken +Comment[nn]=Viser IEE 1394-einingane knytte til datamaskina +Comment[pa]=ਆਪਣੇ ਕੰਪਿਊਟਰ ਨਾਲ ਜੁੜੇ IEEE 1394 ਜੰਤਰ ਵੇਖੋ +Comment[pl]=Informacja o urządzeniach IEEE 1394 podłączonych do tego komputera +Comment[pt]=Ver os dispositivos IEEE 1394 ligados a este computador +Comment[pt_BR]=Ver os dispositivos IEEE 1394 conectados à este computador +Comment[ro]=Afișează dispozitivele IEEE 1394 conectate la acest calculator +Comment[ru]=Просмотр устройств IEEE 1394, подключенных к этому компьютеру +Comment[rw]=Kugaragaza Amapareye IEEE 1394 zifashe kuri iyi mudasobwa +Comment[se]=Čájeha IEEE 1394-ovttadagaid mat leat laktašuvvan dihtoriidat +Comment[sk]=Zobrazí zariadenie IEEE 1394 pripojené k počítači +Comment[sl]=Prikaz naprav IEEE 1394, ki so priključene na ta računalnik +Comment[sr]=Прикажи IEEE 1394 уређаје повезане на овај рачунар +Comment[sr@Latn]=Prikaži IEEE 1394 uređaje povezane na ovaj računar +Comment[sv]=Visa IEEE 1394-enheter anslutna till datorn +Comment[ta]=கணிப்பொறியோடு இணைக்கப்பட்ட IEEE 1394 சாதனத்தை பார் +Comment[tg]= Намоиши дастгоҳҳои IEEE 1394 мутассал ба ин система +Comment[th]=แสดงอุปกรณ์ IEEE 1394 ที่เชื่อมต่ออยู่กับคอมพิวเตอร์เครื่องนี้ +Comment[tr]=Bu bilgisayara bağlanmış IEEE 1394 aygıtlarını gör +Comment[tt]=Bu sanaqqa totaşqan IEEE 1394 cıhazlarnı qaraw +Comment[uk]=Перегляд пристроїв IEEE 1394, приєднаних до комп'ютера +Comment[uz]=Kompyuterga ulangan IEEE 1394 uskunalarni koʻrish +Comment[uz@cyrillic]=Компьютерга уланган IEEE 1394 ускуналарни кўриш +Comment[vi]=Xem các thiết bị IEEE 1394 nối vào máy tính này +Comment[wa]=Vey les éndjins IEEE 1394 raloyîs a cisse copiutrece chal +Comment[zh_CN]=查看连接到该计算机的 IEEE 1394 设备 +Comment[zh_TW]=查看連接到這台電腦的 IEEE 1394 裝置 + +Keywords=1394,Firewire,devices,viewer,control +Keywords[ar]=1394،Firewire,أجهزة،عارض،تحكم +Keywords[be]=Прылады,Прылада,Прагляд,Праглядальнік,Кіраванне,1394,Firewire,devices,viewer,control +Keywords[bg]=информация, система, системна, устройства, контрол, 1394, Firewire, devices, viewer, control +Keywords[br]=1394,Firewire,trobarzhelloù,gweller,ren +Keywords[bs]=1394,Firewire,devices,viewer,control,uređaji +Keywords[ca]=1394,Firewire,dispositius,visor,control +Keywords[cs]=1394,Firewire,zařízení,prohlížeč,ovládání +Keywords[csb]=1394,Firewire,ùrządzenia,przezéranié,kòntrola +Keywords[cy]=1394,dyfeisiau,gwelydd,gwyliwr,rheoli +Keywords[da]=1394,Firewire,enheder,fremviser,kontrol +Keywords[de]=USB,Geräte,Geräte,Betrachter,Kontrolle +Keywords[el]=1394,Firewire,συσκευές,προβολέας,έλεγχος +Keywords[eo]=1394,aparatoj,rigardilo,stirado +Keywords[es]=1394,Firewire,dispositivos,visor,control +Keywords[et]=1394,Firewire,seadmed,vaataja,juhtimine +Keywords[eu]=1394,Firewire,gailuak,ikustailua,kontrola +Keywords[fa]=۱۳۹۴، Firewire، دستگاهها، مشاهده‌گر، کنترل +Keywords[fi]=1394,Firewire,laitteet,katselija,hallinta +Keywords[fr]=1394,Firewire,périphériques,afficheur,contrôle +Keywords[fy]=1394,IEEE 1394,firewire,devices,viewer,control,werjefteprogramma,apparaten,râne apparatuur +Keywords[ga]=1394,Firewire,gléasanna,amharcán,rialú +Keywords[gl]=1394,Firewire,dispositivos,visor,control +Keywords[he]=1394,Firewire, התקנים,מציג,בקרה, devices,viewer,control +Keywords[hi]=1394,फायरवायर,औज़ारों,प्रदर्शक,नियंत्रण +Keywords[hr]=1394,Firewire,devices,viewer,control,uređaji,pregled,nadzor +Keywords[hu]=1394,Firewire,eszközök,megnézés,vezérlés +Keywords[is]=1394,Firewire,tæki,skoðari,stilling +Keywords[it]=1394,dispositivi,controllo,visualizza,firewire +Keywords[ja]=1394,Firewire,デバイス,ビューア,コントロール +Keywords[km]=1394,Firewire,ឧបករណ៍,កម្មវិធី​មើល,បញ្ជា +Keywords[lt]=1394,Firewire,devices,viewer,control,žiūryklė,kontrolė,įrenginiai +Keywords[lv]=1394,Fireware,iekārtas,skatītājs,vadība +Keywords[mk]=1394,Firewire,devices,viewer,control,уреди,прегледник,контрола +Keywords[mn]=1394,Файрвайрэ,харагч,хяналт,Төхөөрөмж +Keywords[nb]=1394,Firewire,enheter,framviser,kontroll +Keywords[nds]=1394,Firewire,Reedschappen,Kieker,Kuntrull +Keywords[ne]=1394,फायर वायर, यन्त्र, दर्शक, नियन्त्रण +Keywords[nl]=1394,IEEE 1394,firewire,devices,viewer,control,weergaveprogramma,apparaten,randapparatuur +Keywords[nn]=1394,Firewire,einingar,framvisar,kontroll +Keywords[pa]=1394,Firewire,ਫਾਇਰਵਾਇਰ,ਜੰਤਰ,ਦਰਸ਼ਕ,ਕੰਟਰੋਲ +Keywords[pl]=1394,Firewire,urządzenia,przeglądanie,kontrola +Keywords[pt]=1394,Firewire,dispositivos,visualizador,controlo +Keywords[pt_BR]=1394,Firewire,dispositivos,visualizador,controle +Keywords[ro]=1394,firewire,dispozitive,vizualizor,control +Keywords[rw]=1394,Umugozimuriro,amapareye,mugaragaza,igenzura +Keywords[se]=1394,Firewire,ovttadagat,čájeheaddji,stivren +Keywords[sk]=zariadenie,prehliadač,ovládanie,1394,Firewire +Keywords[sl]=1394,firewire,naprave,pregledovalnik,nadzor +Keywords[sr]=1394,Firewire,devices,viewer,control,уређаји,преглед,контрола +Keywords[sr@Latn]=1394,Firewire,devices,viewer,control,uređaji,pregled,kontrola +Keywords[sv]=1394,Firewire,enheter,visare,kontroll +Keywords[ta]=1394,ஃபயர்ஒயர்,சாதனங்கள்,காட்சி,கட்டுப்பாடு +Keywords[th]=1394,ไฟร์ไวร์,อุปกรณ์,ตัวแสดงผล,ควบคุม +Keywords[tr]=1394,firewire,aygıtlar,izleyici,denetim,kontrol +Keywords[uk]=1394,Firewire,пристрої,перегляд,керування +Keywords[uz]=1394,Firewire,uskunalar,koʻruvchi,boshqaruv +Keywords[uz@cyrillic]=1394,Firewire,ускуналар,кўрувчи,бошқарув +Keywords[vi]=1394,Firewire,thiết bị,trình xem,điều khiển +Keywords[wa]=1394,IEEE 1394,Firewire,éndjins,håyneu,contrôle,corwaitaedje +Keywords[zh_CN]=1394,Firewire,devices,viewer,control,设备,查看器,控制,火线 +Keywords[zh_TW]=1394,Firewire,devices,viewer,control,裝置,檢視器,控制 + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/view1394/oui.db b/kcontrol/view1394/oui.db new file mode 100644 index 000000000..76f80cc84 --- /dev/null +++ b/kcontrol/view1394/oui.db @@ -0,0 +1,7965 @@ +000000 XEROX CORPORATION +000001 XEROX CORPORATION +000002 XEROX CORPORATION +000003 XEROX CORPORATION +000004 XEROX CORPORATION +000005 XEROX CORPORATION +000006 XEROX CORPORATION +000007 XEROX CORPORATION +000008 XEROX CORPORATION +000009 XEROX CORPORATION +00000A OMRON TATEISI ELECTRONICS CO. +00000B MATRIX CORPORATION +00000C CISCO SYSTEMS, INC. +00000D FIBRONICS LTD. +00000E FUJITSU LIMITED +00000F NEXT, INC. +000010 SYTEK INC. +000011 NORMEREL SYSTEMES +000012 INFORMATION TECHNOLOGY LIMITED +000013 CAMEX +000014 NETRONIX +000015 DATAPOINT CORPORATION +000016 DU PONT PIXEL SYSTEMS . +000017 TEKELEC +000018 WEBSTER COMPUTER CORPORATION +000019 APPLIED DYNAMICS INTERNATIONAL +00001A ADVANCED MICRO DEVICES +00001B NOVELL INC. +00001C BELL TECHNOLOGIES +00001D CABLETRON SYSTEMS, INC. +00001E TELSIST INDUSTRIA ELECTRONICA +00001F Telco Systems, Inc. +000020 DATAINDUSTRIER DIAB AB +000021 SUREMAN COMP. & COMMUN. CORP. +000022 VISUAL TECHNOLOGY INC. +000023 ABB INDUSTRIAL SYSTEMS AB +000024 CONNECT AS +000025 RAMTEK CORP. +000026 SHA-KEN CO., LTD. +000027 JAPAN RADIO COMPANY +000028 PRODIGY SYSTEMS CORPORATION +000029 IMC NETWORKS CORP. +00002A TRW - SEDD/INP +00002B CRISP AUTOMATION, INC +00002C AUTOTOTE LIMITED +00002D CHROMATICS INC +00002E SOCIETE EVIRA +00002F TIMEPLEX INC. +000030 VG LABORATORY SYSTEMS LTD +000031 QPSX COMMUNICATIONS PTY LTD +000032 Marconi plc +000033 EGAN MACHINERY COMPANY +000034 NETWORK RESOURCES CORPORATION +000035 SPECTRAGRAPHICS CORPORATION +000036 ATARI CORPORATION +000037 OXFORD METRICS LIMITED +000038 CSS LABS +000039 TOSHIBA CORPORATION +00003A CHYRON CORPORATION +00003B i Controls, Inc. +00003C AUSPEX SYSTEMS INC. +00003D UNISYS +00003E SIMPACT +00003F SYNTREX, INC. +000040 APPLICON, INC. +000041 ICE CORPORATION +000042 METIER MANAGEMENT SYSTEMS LTD. +000043 MICRO TECHNOLOGY +000044 CASTELLE CORPORATION +000045 FORD AEROSPACE & COMM. CORP. +000046 OLIVETTI NORTH AMERICA +000047 NICOLET INSTRUMENTS CORP. +000048 SEIKO EPSON CORPORATION +000049 APRICOT COMPUTERS, LTD +00004A ADC CODENOLL TECHNOLOGY CORP. +00004B ICL DATA OY +00004C NEC CORPORATION +00004D DCI CORPORATION +00004E AMPEX CORPORATION +00004F LOGICRAFT, INC. +000050 RADISYS CORPORATION +000051 HOB ELECTRONIC GMBH & CO. KG +000052 Intrusion.com, Inc. +000053 COMPUCORP +000054 MODICON, INC. +000055 COMMISSARIAT A L`ENERGIE ATOM. +000056 DR. B. STRUCK +000057 SCITEX CORPORATION LTD. +000058 RACORE COMPUTER PRODUCTS INC. +000059 HELLIGE GMBH +00005A SysKonnect GmbH +00005B ELTEC ELEKTRONIK AG +00005C TELEMATICS INTERNATIONAL INC. +00005D CS TELECOM +00005E USC INFORMATION SCIENCES INST +00005F SUMITOMO ELECTRIC IND., LTD. +000060 KONTRON ELEKTRONIK GMBH +000061 GATEWAY COMMUNICATIONS +000062 BULL HN INFORMATION SYSTEMS +000063 DR.ING.SEUFERT GMBH +000064 YOKOGAWA DIGITAL COMPUTER CORP +000065 NETWORK ASSOCIATES, INC. +000066 TALARIS SYSTEMS, INC. +000067 SOFT * RITE, INC. +000068 ROSEMOUNT CONTROLS +000069 CONCORD COMMUNICATIONS INC +00006A COMPUTER CONSOLES INC. +00006B SILICON GRAPHICS INC./MIPS +00006D CRAY COMMUNICATIONS, LTD. +00006E ARTISOFT, INC. +00006F Madge Ltd. +000070 HCL LIMITED +000071 ADRA SYSTEMS INC. +000072 MINIWARE TECHNOLOGY +000073 SIECOR CORPORATION +000074 RICOH COMPANY LTD. +000075 Nortel Networks +000076 ABEKAS VIDEO SYSTEM +000077 INTERPHASE CORPORATION +000078 LABTAM LIMITED +000079 NETWORTH INCORPORATED +00007A DANA COMPUTER INC. +00007B RESEARCH MACHINES +00007C AMPERE INCORPORATED +00007D SUN MICROSYSTEMS, INC. +00007E CLUSTRIX CORPORATION +00007F LINOTYPE-HELL AG +000080 CRAY COMMUNICATIONS A/S +000081 BAY NETWORKS +000082 LECTRA SYSTEMES SA +000083 TADPOLE TECHNOLOGY PLC +000084 SUPERNET +000085 CANON INC. +000086 MEGAHERTZ CORPORATION +000087 HITACHI, LTD. +000088 COMPUTER NETWORK TECH. CORP. +000089 CAYMAN SYSTEMS INC. +00008A DATAHOUSE INFORMATION SYSTEMS +00008B INFOTRON +00008C Alloy Computer Products (Australia) Pty Ltd +00008D VERDIX CORPORATION +00008E SOLBOURNE COMPUTER, INC. +00008F RAYTHEON COMPANY +000090 MICROCOM +000091 ANRITSU CORPORATION +000092 COGENT DATA TECHNOLOGIES +000093 PROTEON INC. +000094 ASANTE TECHNOLOGIES +000095 SONY TEKTRONIX CORP. +000096 MARCONI ELECTRONICS LTD. +000097 EPOCH SYSTEMS +000098 CROSSCOMM CORPORATION +000099 MTX, INC. +00009A RC COMPUTER A/S +00009B INFORMATION INTERNATIONAL, INC +00009C ROLM MIL-SPEC COMPUTERS +00009D LOCUS COMPUTING CORPORATION +00009E MARLI S.A. +00009F AMERISTAR TECHNOLOGIES INC. +0000A0 TOKYO SANYO ELECTRIC CO. LTD. +0000A1 MARQUETTE ELECTRIC CO. +0000A2 BAY NETWORKS +0000A3 NETWORK APPLICATION TECHNOLOGY +0000A4 ACORN COMPUTERS LIMITED +0000A5 COMPATIBLE SYSTEMS CORP. +0000A6 NETWORK GENERAL CORPORATION +0000A7 NETWORK COMPUTING DEVICES INC. +0000A8 STRATUS COMPUTER INC. +0000A9 NETWORK SYSTEMS CORP. +0000AA XEROX CORPORATION +0000AB LOGIC MODELING CORPORATION +0000AC CONWARE COMPUTER CONSULTING +0000AD BRUKER INSTRUMENTS INC. +0000AE DASSAULT ELECTRONIQUE +0000AF NUCLEAR DATA INSTRUMENTATION +0000B0 RND-RAD NETWORK DEVICES +0000B1 ALPHA MICROSYSTEMS INC. +0000B2 TELEVIDEO SYSTEMS, INC. +0000B3 CIMLINC INCORPORATED +0000B4 EDIMAX COMPUTER COMPANY +0000B5 DATABILITY SOFTWARE SYS. INC. +0000B6 MICRO-MATIC RESEARCH +0000B7 DOVE COMPUTER CORPORATION +0000B8 SEIKOSHA CO., LTD. +0000B9 MCDONNELL DOUGLAS COMPUTER SYS +0000BA SIIG, INC. +0000BB TRI-DATA +0000BC ALLEN-BRADLEY CO. INC. +0000BD MITSUBISHI CABLE COMPANY +0000BE THE NTI GROUP +0000BF SYMMETRIC COMPUTER SYSTEMS +0000C0 WESTERN DIGITAL CORPORATION +0000C1 Madge Ltd. +0000C2 INFORMATION PRESENTATION TECH. +0000C3 HARRIS CORP COMPUTER SYS DIV +0000C4 WATERS DIV. OF MILLIPORE +0000C5 FARALLON COMPUTING/NETOPIA +0000C6 EON SYSTEMS +0000C7 ARIX CORPORATION +0000C8 ALTOS COMPUTER SYSTEMS +0000C9 EMULEX CORPORATION +0000CA ARRIS International +0000CB COMPU-SHACK ELECTRONIC GMBH +0000CC DENSAN CO., LTD. +0000CD Allied Telesyn Research Ltd. +0000CE MEGADATA CORP. +0000CF HAYES MICROCOMPUTER PRODUCTS +0000D0 DEVELCON ELECTRONICS LTD. +0000D1 ADAPTEC INCORPORATED +0000D2 SBE, INC. +0000D3 WANG LABORATORIES INC. +0000D4 PURE DATA LTD. +0000D5 MICROGNOSIS INTERNATIONAL +0000D6 PUNCH LINE HOLDING +0000D7 DARTMOUTH COLLEGE +0000D8 NOVELL, INC. +0000D9 NIPPON TELEGRAPH & TELEPHONE +0000DA ATEX +0000DB BRITISH TELECOMMUNICATIONS PLC +0000DC HAYES MICROCOMPUTER PRODUCTS +0000DD TCL INCORPORATED +0000DE CETIA +0000DF BELL & HOWELL PUB SYS DIV +0000E0 QUADRAM CORP. +0000E1 GRID SYSTEMS +0000E2 ACER TECHNOLOGIES CORP. +0000E3 INTEGRATED MICRO PRODUCTS LTD +0000E4 IN2 GROUPE INTERTECHNIQUE +0000E5 SIGMEX LTD. +0000E6 APTOR PRODUITS DE COMM INDUST +0000E7 STAR GATE TECHNOLOGIES +0000E8 ACCTON TECHNOLOGY CORP. +0000E9 ISICAD, INC. +0000EA UPNOD AB +0000EB MATSUSHITA COMM. IND. CO. LTD. +0000EC MICROPROCESS +0000ED APRIL +0000EE NETWORK DESIGNERS, LTD. +0000EF KTI +0000F0 SAMSUNG ELECTRONICS CO., LTD. +0000F1 MAGNA COMPUTER CORPORATION +0000F2 SPIDER COMMUNICATIONS +0000F3 GANDALF DATA LIMITED +0000F4 ALLIED TELESYN INTERNATIONAL +0000F5 DIAMOND SALES LIMITED +0000F6 APPLIED MICROSYSTEMS CORP. +0000F7 YOUTH KEEP ENTERPRISE CO LTD +0000F8 DIGITAL EQUIPMENT CORPORATION +0000F9 QUOTRON SYSTEMS INC. +0000FA MICROSAGE COMPUTER SYSTEMS INC +0000FB RECHNER ZUR KOMMUNIKATION +0000FC MEIKO +0000FD HIGH LEVEL HARDWARE +0000FE ANNAPOLIS MICRO SYSTEMS +0000FF CAMTEC ELECTRONICS LTD. +000100 EQUIP'TRANS +000102 3COM CORPORATION +000103 3COM CORPORATION +000104 DVICO Co., Ltd. +000105 BECKHOFF GmbH +000106 Tews Datentechnik GmbH +000107 Leiser GmbH +000108 AVLAB Technology, Inc. +000109 Nagano Japan Radio Co., Ltd. +00010A CIS TECHNOLOGY INC. +00010B Space CyberLink, Inc. +00010C System Talks Inc. +00010D CORECO, INC. +00010E Bri-Link Technologies Co., Ltd +00010F Nishan Systems, Inc. +000110 Gotham Networks +000111 iDigm Inc. +000112 Shark Multimedia Inc. +000113 OLYMPUS CORPORATION +000114 KANDA TSUSHIN KOGYO CO., LTD. +000115 EXTRATECH CORPORATION +000116 Netspect Technologies, Inc. +000117 CANAL + +000118 EZ Digital Co., Ltd. +000119 Action Controls Pty. Ltd. +00011A EEH DataLink GmbH +00011B Unizone Technologies, Inc. +00011C Universal Talkware Corporation +00011D Centillium Communications +00011E Precidia Technologies, Inc. +00011F RC Networks, Inc. +000120 OSCILLOQUARTZ S.A. +000121 Watchguard Technologies, Inc. +000122 Trend Communications, Ltd. +000123 DIGITAL ELECTRONICS CORP. +000124 Acer Incorporated +000125 YAESU MUSEN CO., LTD. +000126 PAC Labs +000127 The OPEN Group Limited +000128 EnjoyWeb, Inc. +000129 DFI Inc. +00012A Telematica Sistems Inteligente +00012B TELENET Co., Ltd. +00012C Aravox Technologies, Inc. +00012D Komodo Technology +00012E PC Partner Ltd. +00012F Twinhead International Corp +000130 Extreme Networks +000131 Detection Systems, Inc. +000132 Dranetz - BMI +000133 KYOWA Electronic Instruments C +000134 SIG Positec Systems AG +000135 KDC Corp. +000136 CyberTAN Technology, Inc. +000137 IT Farm Corporation +000138 XAVi Technologies Corp. +000139 Point Multimedia Systems +00013A SHELCAD COMMUNICATIONS, LTD. +00013B BNA SYSTEMS +00013C TIW SYSTEMS +00013D RiscStation Ltd. +00013E Ascom Tateco AB +00013F Neighbor World Co., Ltd. +000140 Sendtek Corporation +000141 CABLE PRINT +000142 Cisco Systems, Inc. +000143 Cisco Systems, Inc. +000144 EMC Corporation +000145 WINSYSTEMS, INC. +000146 Tesco Controls, Inc. +000147 Zhone Technologies +000148 X-traWeb Inc. +000149 T.D.T. Transfer Data Test GmbH +00014A Sony Corporation +00014B Ennovate Networks, Inc. +00014C Berkeley Process Control +00014D Shin Kin Enterprises Co., Ltd +00014E WIN Enterprises, Inc. +00014F LUMINOUS Networks, Inc. +000150 GILAT COMMUNICATIONS, LTD. +000151 Ensemble Communications +000152 CHROMATEK INC. +000153 ARCHTEK TELECOM CORPORATION +000154 G3M Corporation +000155 Promise Technology, Inc. +000156 FIREWIREDIRECT.COM, INC. +000157 SYSWAVE CO., LTD +000158 Electro Industries/Gauge Tech +000159 S1 Corporation +00015A Digital Video Broadcasting +00015B ITALTEL S.p.A/RF-UP-I +00015C CADANT INC. +00015D Sun Microsystems, Inc +00015E BEST TECHNOLOGY CO., LTD. +00015F DIGITAL DESIGN GmbH +000160 ELMEX Co., LTD. +000161 Meta Machine Technology +000162 Cygnet Technologies, Inc. +000163 Cisco Systems, Inc. +000164 Cisco Systems, Inc. +000165 AirSwitch Corporation +000166 TC GROUP A/S +000167 HIOKI E.E. CORPORATION +000168 VITANA CORPORATION +000169 Celestix Networks Pte Ltd. +00016A ALITEC +00016B LightChip, Inc. +00016C FOXCONN +00016D CarrierComm Inc. +00016E Conklin Corporation +00016F HAITAI ELECTRONICS CO., LTD. +000170 ESE Embedded System Engineer'g +000171 Allied Data Technologies +000172 TechnoLand Co., LTD. +000173 AMCC +000174 CyberOptics Corporation +000175 Radiant Communications Corp. +000176 Orient Silver Enterprises +000177 EDSL +000178 MARGI Systems, Inc. +000179 WIRELESS TECHNOLOGY, INC. +00017A Chengdu Maipu Electric Industrial Co., Ltd. +00017B Heidelberger Druckmaschinen AG +00017C AG-E GmbH +00017D ThermoQuest +00017E ADTEK System Science Co., Ltd. +00017F Experience Music Project +000180 AOpen, Inc. +000181 Nortel Networks +000182 DICA TECHNOLOGIES AG +000183 ANITE TELECOMS +000184 SIEB & MEYER AG +000185 Aloka Co., Ltd. +000186 DISCH GmbH +000187 i2SE GmbH +000188 LXCO Technologies ag +000189 Refraction Technology, Inc. +00018A ROI COMPUTER AG +00018B NetLinks Co., Ltd. +00018C Mega Vision +00018D AudeSi Technologies +00018E Logitec Corporation +00018F Kenetec, Inc. +000190 SMK-M +000191 SYRED Data Systems +000192 Texas Digital Systems +000193 Hanbyul Telecom Co., Ltd. +000194 Capital Equipment Corporation +000195 Sena Technologies, Inc. +000196 Cisco Systems, Inc. +000197 Cisco Systems, Inc. +000198 Darim Vision +000199 HeiSei Electronics +00019A LEUNIG GmbH +00019B Kyoto Microcomputer Co., Ltd. +00019C JDS Uniphase Inc. +00019D E-Control Systems, Inc. +00019E ESS Technology, Inc. +00019F Phonex Broadband +0001A0 Infinilink Corporation +0001A1 Mag-Tek, Inc. +0001A2 Logical Co., Ltd. +0001A3 GENESYS LOGIC, INC. +0001A4 Microlink Corporation +0001A5 Nextcomm, Inc. +0001A6 Scientific-Atlanta Arcodan A/S +0001A7 UNEX TECHNOLOGY CORPORATION +0001A8 Welltech Computer Co., Ltd. +0001A9 BMW AG +0001AA Airspan Communications, Ltd. +0001AB Main Street Networks +0001AC Sitara Networks, Inc. +0001AD Coach Master International d.b.a. CMI Worldwide, Inc. +0001AE Trex Enterprises +0001AF Motorola Computer Group +0001B0 Fulltek Technology Co., Ltd. +0001B1 General Bandwidth +0001B2 Digital Processing Systems, Inc. +0001B3 Precision Electronic Manufacturing +0001B4 Wayport, Inc. +0001B5 Turin Networks, Inc. +0001B6 SAEJIN T&M Co., Ltd. +0001B7 Centos, Inc. +0001B8 Netsensity, Inc. +0001B9 SKF Condition Monitoring +0001BA IC-Net, Inc. +0001BB Frequentis +0001BC Brains Corporation +0001BD Peterson Electro-Musical Products, Inc. +0001BE Gigalink Co., Ltd. +0001BF Teleforce Co., Ltd. +0001C0 CompuLab, Ltd. +0001C1 Vitesse Semiconductor Corporation +0001C2 ARK Research Corp. +0001C3 Acromag, Inc. +0001C4 NeoWave, Inc. +0001C5 Simpler Networks +0001C6 Quarry Technologies +0001C7 Cisco Systems, Inc. +0001C8 THOMAS CONRAD CORP. +0001C8 CONRAD CORP. +0001C9 Cisco Systems, Inc. +0001CA Geocast Network Systems, Inc. +0001CB EVR +0001CC Japan Total Design Communication Co., Ltd. +0001CD ARtem +0001CE Custom Micro Products, Ltd. +0001CF Alpha Data Parallel Systems, Ltd. +0001D0 VitalPoint, Inc. +0001D1 CoNet Communications, Inc. +0001D2 MacPower Peripherals, Ltd. +0001D3 PAXCOMM, Inc. +0001D4 Leisure Time, Inc. +0001D5 HAEDONG INFO & COMM CO., LTD +0001D6 MAN Roland Druckmaschinen AG +0001D7 F5 Networks, Inc. +0001D8 Teltronics, Inc. +0001D9 Sigma, Inc. +0001DA WINCOMM Corporation +0001DB Freecom Technologies GmbH +0001DC Activetelco +0001DD Avail Networks +0001DE Trango Systems, Inc. +0001DF ISDN Communications, Ltd. +0001E0 Fast Systems, Inc. +0001E1 Kinpo Electronics, Inc. +0001E2 Ando Electric Corporation +0001E3 Siemens AG +0001E4 Sitera, Inc. +0001E5 Supernet, Inc. +0001E6 Hewlett-Packard Company +0001E7 Hewlett-Packard Company +0001E8 Force10 Networks, Inc. +0001E9 Litton Marine Systems B.V. +0001EA Cirilium Corp. +0001EB C-COM Corporation +0001EC Ericsson Group +0001ED SETA Corp. +0001EE Comtrol Europe, Ltd. +0001EF Camtel Technology Corp. +0001F0 Tridium, Inc. +0001F1 Innovative Concepts, Inc. +0001F2 Mark of the Unicorn, Inc. +0001F3 QPS, Inc. +0001F4 Enterasys Networks +0001F5 ERIM S.A. +0001F6 Association of Musical Electronics Industry +0001F7 Image Display Systems, Inc. +0001F8 Adherent Systems, Ltd. +0001F9 TeraGlobal Communications Corp. +0001FA HOROSCAS +0001FB DoTop Technology, Inc. +0001FC Keyence Corporation +0001FD Digital Voice Systems, Inc. +0001FE DIGITAL EQUIPMENT CORPORATION +0001FF Data Direct Networks, Inc. +000200 Net & Sys Co., Ltd. +000201 IFM Electronic gmbh +000202 Amino Communications, Ltd. +000203 Woonsang Telecom, Inc. +000204 Bodmann Industries Elektronik GmbH +000205 Hitachi Denshi, Ltd. +000206 Telital R&D Denmark A/S +000207 VisionGlobal Network Corp. +000208 Unify Networks, Inc. +000209 Shenzhen SED Information Technology Co., Ltd. +00020A Gefran Spa +00020B Native Networks, Inc. +00020C Metro-Optix +00020D Micronpc.com +00020E Laurel Networks, Inc. +00020F AATR +000210 Fenecom +000211 Nature Worldwide Technology Corp. +000212 SierraCom +000213 S.D.E.L. +000214 DTVRO +000215 Cotas Computer Technology A/B +000216 Cisco Systems, Inc. +000217 Cisco Systems, Inc. +000218 Advanced Scientific Corp +000219 Paralon Technologies +00021A Zuma Networks +00021B Kollmorgen-Servotronix +00021C Network Elements, Inc. +00021D Data General Communication Ltd. +00021E SIMTEL S.R.L. +00021F Aculab PLC +000220 Canon Aptex, Inc. +000221 DSP Application, Ltd. +000222 Chromisys, Inc. +000223 ClickTV +000224 Lantern Communications, Inc. +000225 Certus Technology, Inc. +000226 XESystems, Inc. +000227 ESD GmbH +000228 Necsom, Ltd. +000229 Adtec Corporation +00022A Asound Electronic +00022B Tamura Electric Works, Ltd. +00022C ABB Bomem, Inc. +00022D Agere Systems +00022E TEAC Corp. R& D +00022F P-Cube, Ltd. +000230 Intersoft Electronics +000231 Ingersoll-Rand +000232 Avision, Inc. +000233 Mantra Communications, Inc. +000234 Imperial Technology, Inc. +000235 Paragon Networks International +000236 INIT GmbH +000237 Cosmo Research Corp. +000238 Serome Technology, Inc. +000239 Visicom +00023A ZSK Stickmaschinen GmbH +00023B Redback Networks +00023C Creative Technology, Ltd. +00023D NuSpeed, Inc. +00023E Selta Telematica S.p.a +00023F Compal Electronics, Inc. +000240 Seedek Co., Ltd. +000241 Amer.com +000242 Videoframe Systems +000243 Raysis Co., Ltd. +000244 SURECOM Technology Co. +000245 Lampus Co, Ltd. +000246 All-Win Tech Co., Ltd. +000247 Great Dragon Information Technology (Group) Co., Ltd. +000248 Pilz GmbH & Co. +000249 Aviv Infocom Co, Ltd. +00024A Cisco Systems, Inc. +00024B Cisco Systems, Inc. +00024C SiByte, Inc. +00024D Mannesman Dematic Colby Pty. Ltd. +00024E Datacard Group +00024F IPM Datacom S.R.L. +000250 Geyser Networks, Inc. +000251 Soma Networks, Inc. +000252 Carrier Corporation +000253 Televideo, Inc. +000254 WorldGate +000255 IBM Corporation +000256 Alpha Processor, Inc. +000257 Microcom Corp. +000258 Flying Packets Communications +000259 Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group +00025A Catena Networks +00025B Cambridge Silicon Radio +00025C SCI Systems (Kunshan) Co., Ltd. +00025D Calix Networks +00025E High Technology Ltd +00025F Nortel Networks +000260 Accordion Networks, Inc. +000261 i3 Micro Technology AB +000262 Soyo Group Soyo Com Tech Co., Ltd +000263 UPS Manufacturing SRL +000264 AudioRamp.com +000265 Virditech Co. Ltd. +000266 Thermalogic Corporation +000267 NODE RUNNER, INC. +000268 Harris Government Communications +000269 Nadatel Co., Ltd +00026A Cocess Telecom Co., Ltd. +00026B BCM Computers Co., Ltd. +00026C Philips CFT +00026D Adept Telecom +00026E NeGeN Access, Inc. +00026F Senao International Co., Ltd. +000270 Crewave Co., Ltd. +000271 Vpacket Communications +000272 CC&C Technologies, Inc. +000273 Coriolis Networks +000274 Tommy Technologies Corp. +000275 SMART Technologies, Inc. +000276 Primax Electronics Ltd. +000277 Cash Systemes Industrie +000278 Samsung Electro-Mechanics Co., Ltd. +000279 Control Applications, Ltd. +00027A IOI Technology Corporation +00027B Amplify Net, Inc. +00027C Trilithic, Inc. +00027D Cisco Systems, Inc. +00027E Cisco Systems, Inc. +00027F ask-technologies.com +000280 Mu Net, Inc. +000281 Madge Ltd. +000282 ViaClix, Inc. +000283 Spectrum Controls, Inc. +000284 AREVA T&D +000285 Riverstone Networks +000286 Occam Networks +000287 Adapcom +000288 GLOBAL VILLAGE COMMUNICATION +000289 DNE Technologies +00028A Ambit Microsystems Corporation +00028B VDSL Systems OY +00028C Micrel-Synergy Semiconductor +00028D Movita Technologies, Inc. +00028E Rapid 5 Networks, Inc. +00028F Globetek, Inc. +000290 Woorigisool, Inc. +000291 Open Network Co., Ltd. +000292 Logic Innovations, Inc. +000293 Solid Data Systems +000294 Tokyo Sokushin Co., Ltd. +000295 IP.Access Limited +000296 Lectron Co,. Ltd. +000297 C-COR.net +000298 Broadframe Corporation +000299 Apex, Inc. +00029A Storage Apps +00029B Kreatel Communications AB +00029C 3COM +00029D Merix Corp. +00029E Information Equipment Co., Ltd. +00029F L-3 Communication Aviation Recorders +0002A0 Flatstack Ltd. +0002A1 World Wide Packets +0002A2 Hilscher GmbH +0002A3 ABB Power Automation +0002A4 AddPac Technology Co., Ltd. +0002A5 Compaq Computer Corporation +0002A6 Effinet Systems Co., Ltd. +0002A7 Vivace Networks +0002A8 Air Link Technology +0002A9 RACOM, s.r.o. +0002AA PLcom Co., Ltd. +0002AB CTC Union Technologies Co., Ltd. +0002AC 3PAR data +0002AD Pentax Corpotation +0002AE Scannex Electronics Ltd. +0002AF TeleCruz Technology, Inc. +0002B0 Hokubu Communication & Industrial Co., Ltd. +0002B1 Anritsu, Ltd. +0002B2 Cablevision +0002B3 Intel Corporation +0002B4 DAPHNE +0002B5 Avnet, Inc. +0002B6 Acrosser Technology Co., Ltd. +0002B7 Watanabe Electric Industry Co., Ltd. +0002B8 WHI KONSULT AB +0002B9 Cisco Systems, Inc. +0002BA Cisco Systems, Inc. +0002BB Continuous Computing +0002BC LVL 7 Systems, Inc. +0002BD Bionet Co., Ltd. +0002BE Totsu Engineering, Inc. +0002BF dotRocket, Inc. +0002C0 Bencent Tzeng Industry Co., Ltd. +0002C1 Innovative Electronic Designs, Inc. +0002C2 Net Vision Telecom +0002C3 Arelnet Ltd. +0002C4 Vector International BUBA +0002C5 Evertz Microsystems Ltd. +0002C6 Data Track Technology PLC +0002C7 ALPS ELECTRIC Co., Ltd. +0002C8 Technocom Communications Technology (pte) Ltd +0002C9 Mellanox Technologies +0002CA EndPoints, Inc. +0002CB TriState Ltd. +0002CC M.C.C.I +0002CD TeleDream, Inc. +0002CE FoxJet, Inc. +0002CF ZyGate Communications, Inc. +0002D0 Comdial Corporation +0002D1 Vivotek, Inc. +0002D2 Workstation AG +0002D3 NetBotz, Inc. +0002D4 PDA Peripherals, Inc. +0002D5 ACR +0002D6 NICE Systems +0002D7 EMPEG Ltd +0002D8 BRECIS Communications Corporation +0002D9 Reliable Controls +0002DA ExiO Communications, Inc. +0002DB NETSEC +0002DC Fujitsu General Limited +0002DD Bromax Communications, Ltd. +0002DE Astrodesign, Inc. +0002DF Net Com Systems, Inc. +0002E0 ETAS GmbH +0002E1 Integrated Network Corporation +0002E2 NDC Infared Engineering +0002E3 LITE-ON Communications, Inc. +0002E4 JC HYUN Systems, Inc. +0002E5 Timeware Ltd. +0002E6 Gould Instrument Systems, Inc. +0002E7 CAB GmbH & Co KG +0002E8 E.D.&A. +0002E9 CS Systemes De Securite - C3S +0002EA Focus Enhancements +0002EB Pico Communications +0002EC Maschoff Design Engineering +0002ED DXO Telecom Co., Ltd. +0002EE Nokia Danmark A/S +0002EF CCC Network Systems Group Ltd. +0002F0 AME Optimedia Technology Co., Ltd. +0002F1 Pinetron Co., Ltd. +0002F2 eDevice, Inc. +0002F3 Media Serve Co., Ltd. +0002F4 PCTEL, Inc. +0002F5 VIVE Synergies, Inc. +0002F6 Equipe Communications +0002F7 ARM +0002F8 SEAKR Engineering, Inc. +0002F9 Mimos Semiconductor SDN BHD +0002FA DX Antenna Co., Ltd. +0002FB Baumuller Aulugen-Systemtechnik GmbH +0002FC Cisco Systems, Inc. +0002FD Cisco Systems, Inc. +0002FE Viditec, Inc. +0002FF Handan BroadInfoCom +000300 NetContinuum, Inc. +000301 Avantas Networks Corporation +000302 Charles Industries, Ltd. +000303 JAMA Electronics Co., Ltd. +000304 Pacific Broadband Communications +000305 Smart Network Devices GmbH +000306 Fusion In Tech Co., Ltd. +000307 Secure Works, Inc. +000308 AM Communications, Inc. +000309 Texcel Technology PLC +00030A Argus Technologies +00030B Hunter Technology, Inc. +00030C Telesoft Technologies Ltd. +00030D Uniwill Computer Corp. +00030E Core Communications Co., Ltd. +00030F Digital China (Shanghai) Networks Ltd. +000310 Link Evolution Corp. +000311 Micro Technology Co., Ltd. +000312 TR-Systemtechnik GmbH +000313 Access Media SPA +000314 Teleware Network Systems +000315 Cidco Incorporated +000316 Nobell Communications, Inc. +000317 Merlin Systems, Inc. +000318 Cyras Systems, Inc. +000319 Infineon AG +00031A Beijing Broad Telecom Ltd., China +00031B Cellvision Systems, Inc. +00031C Svenska Hardvarufabriken AB +00031D Taiwan Commate Computer, Inc. +00031E Optranet, Inc. +00031F Condev Ltd. +000320 Xpeed, Inc. +000321 Reco Research Co., Ltd. +000322 IDIS Co., Ltd. +000323 Cornet Technology, Inc. +000324 SANYO Multimedia Tottori Co., Ltd. +000325 Arima Computer Corp. +000326 Iwasaki Information Systems Co., Ltd. +000327 ACT'L +000328 Mace Group, Inc. +000329 F3, Inc. +00032A UniData Communication Systems, Inc. +00032B GAI Datenfunksysteme GmbH +00032C ABB Industrie AG +00032D IBASE Technology, Inc. +00032E Scope Information Management, Ltd. +00032F Global Sun Technology, Inc. +000330 Imagenics, Co., Ltd. +000331 Cisco Systems, Inc. +000332 Cisco Systems, Inc. +000333 Digitel Co., Ltd. +000334 Newport Electronics +000335 Mirae Technology +000336 Zetes Technologies +000337 Vaone, Inc. +000338 Oak Technology +000339 Eurologic Systems, Ltd. +00033A Silicon Wave, Inc. +00033B TAMI Tech Co., Ltd. +00033C Daiden Co., Ltd. +00033D ILSHin Lab +00033E Tateyama System Laboratory Co., Ltd. +00033F BigBand Networks, Ltd. +000340 Floware Wireless Systems, Ltd. +000341 Axon Digital Design +000342 Nortel Networks +000343 Martin Professional A/S +000344 Tietech.Co., Ltd. +000345 Routrek Networks Corporation +000346 Hitachi Kokusai Electric, Inc. +000347 Intel Corporation +000348 Norscan Instruments, Ltd. +000349 Vidicode Datacommunicatie B.V. +00034A RIAS Corporation +00034B Nortel Networks +00034C Shanghai DigiVision Technology Co., Ltd. +00034D Chiaro Networks, Ltd. +00034E Pos Data Company, Ltd. +00034F Sur-Gard Security +000350 BTICINO SPA +000351 Diebold, Inc. +000352 Colubris Networks +000353 Mitac, Inc. +000354 Fiber Logic Communications +000355 TeraBeam Internet Systems +000356 Wincor Nixdorf GmbH & Co KG +000357 Intervoice-Brite, Inc. +000358 iCable System Co., Ltd. +000359 DigitalSis +00035A Photron Limited +00035B BridgeWave Communications +00035C Saint Song Corp. +00035D Bosung Hi-Net Co., Ltd. +00035E Metropolitan Area Networks, Inc. +00035F Prueftechnik Condition Monitoring GmbH & Co. KG +000360 PAC Interactive Technology, Inc. +000361 Widcomm, Inc. +000362 Vodtel Communications, Inc. +000363 Miraesys Co., Ltd. +000364 Scenix Semiconductor, Inc. +000365 Kira Information & Communications, Ltd. +000366 ASM Pacific Technology +000367 Jasmine Networks, Inc. +000368 Embedone Co., Ltd. +000369 Nippon Antenna Co., Ltd. +00036A Mainnet, Ltd. +00036B Cisco Systems, Inc. +00036C Cisco Systems, Inc. +00036D Runtop, Inc. +00036E Nicon Systems (Pty) Limited +00036F Telsey SPA +000370 NXTV, Inc. +000371 Acomz Networks Corp. +000372 ULAN +000373 Aselsan A.S +000374 Hunter Watertech +000375 NetMedia, Inc. +000376 Graphtec Technology, Inc. +000377 Gigabit Wireless +000378 HUMAX Co., Ltd. +000379 Proscend Communications, Inc. +00037A Taiyo Yuden Co., Ltd. +00037B IDEC IZUMI Corporation +00037C Coax Media +00037D Stellcom +00037E PORTech Communications, Inc. +00037F Atheros Communications, Inc. +000380 SSH Communications Security Corp. +000381 Ingenico International +000382 A-One Co., Ltd. +000383 Metera Networks, Inc. +000384 AETA +000385 Actelis Networks, Inc. +000386 Ho Net, Inc. +000387 Blaze Network Products +000388 Fastfame Technology Co., Ltd. +000389 Plantronics +00038A America Online, Inc. +00038B PLUS-ONE I&T, Inc. +00038C Total Impact +00038D PCS Revenue Control Systems, Inc. +00038E Atoga Systems, Inc. +00038F Weinschel Corporation +000390 Digital Video Communications, Inc. +000391 Advanced Digital Broadcast, Ltd. +000392 Hyundai Teletek Co., Ltd. +000393 Apple Computer, Inc. +000394 Connect One +000395 California Amplifier +000396 EZ Cast Co., Ltd. +000397 Watchfront Electronics +000398 WISI +000399 Dongju Informations & Communications Co., Ltd. +00039A nSine, Ltd. +00039B NetChip Technology, Inc. +00039C OptiMight Communications, Inc. +00039D BENQ CORPORATION +00039E Tera System Co., Ltd. +00039F Cisco Systems, Inc. +0003A0 Cisco Systems, Inc. +0003A1 HIPER Information & Communication, Inc. +0003A2 Catapult Communications +0003A3 MAVIX, Ltd. +0003A4 Data Storage and Information Management +0003A5 Medea Corporation +0003A6 Traxit Technology, Inc. +0003A7 Unixtar Technology, Inc. +0003A8 IDOT Computers, Inc. +0003A9 AXCENT Media AG +0003AA Watlow +0003AB Bridge Information Systems +0003AC Fronius Schweissmaschinen +0003AD Emerson Energy Systems AB +0003AE Allied Advanced Manufacturing Pte, Ltd. +0003AF Paragea Communications +0003B0 Xsense Technology Corp. +0003B1 Abbott Laboratories HPD +0003B2 Radware +0003B3 IA Link Systems Co., Ltd. +0003B4 Macrotek International Corp. +0003B5 Entra Technology Co. +0003B6 QSI Corporation +0003B7 ZACCESS Systems +0003B8 NetKit Solutions, LLC +0003B9 Hualong Telecom Co., Ltd. +0003BA Sun Microsystems +0003BB Signal Communications Limited +0003BC COT GmbH +0003BD OmniCluster Technologies, Inc. +0003BE Netility +0003BF Centerpoint Broadband Technologies, Inc. +0003C0 RFTNC Co., Ltd. +0003C1 Packet Dynamics Ltd +0003C2 Solphone K.K. +0003C3 Micronik Multimedia +0003C4 Tomra Systems ASA +0003C5 Mobotix AG +0003C6 ICUE Systems, Inc. +0003C7 hopf Elektronik GmbH +0003C8 CML Emergency Services +0003C9 TECOM Co., Ltd. +0003CA MTS Systems Corp. +0003CB Nippon Systems Development Co., Ltd. +0003CC Momentum Computer, Inc. +0003CD Clovertech, Inc. +0003CE ETEN Technologies, Inc. +0003CF Muxcom, Inc. +0003D0 KOANKEISO Co., Ltd. +0003D1 Takaya Corporation +0003D2 Crossbeam Systems, Inc. +0003D3 Internet Energy Systems, Inc. +0003D4 Alloptic, Inc. +0003D5 Advanced Communications Co., Ltd. +0003D6 RADVision, Ltd. +0003D7 NextNet Wireless, Inc. +0003D8 iMPath Networks, Inc. +0003D9 Secheron SA +0003DA Takamisawa Cybernetics Co., Ltd. +0003DB Apogee Electronics Corp. +0003DC Lexar Media, Inc. +0003DD Comark Corp. +0003DE OTC Wireless +0003DF Desana Systems +0003E0 RadioFrame Networks, Inc. +0003E1 Winmate Communication, Inc. +0003E2 Comspace Corporation +0003E3 Cisco Systems, Inc. +0003E4 Cisco Systems, Inc. +0003E5 Hermstedt SG +0003E6 Entone Technologies, Inc. +0003E7 Logostek Co. Ltd. +0003E8 Wavelength Digital Limited +0003E9 Akara Canada, Inc. +0003EA Mega System Technologies, Inc. +0003EB Atrica +0003EC ICG Research, Inc. +0003ED Shinkawa Electric Co., Ltd. +0003EE MKNet Corporation +0003EF Oneline AG +0003F0 Redfern Broadband Networks +0003F1 Cicada Semiconductor, Inc. +0003F2 Seneca Networks +0003F3 Dazzle Multimedia, Inc. +0003F4 NetBurner +0003F5 Chip2Chip +0003F6 Allegro Networks, Inc. +0003F7 Plast-Control GmbH +0003F8 SanCastle Technologies, Inc. +0003F9 Pleiades Communications, Inc. +0003FA TiMetra Networks +0003FB Toko Seiki Company, Ltd. +0003FC Intertex Data AB +0003FD Cisco Systems, Inc. +0003FE Cisco Systems, Inc. +0003FF Microsoft Corporation +000400 LEXMARK INTERNATIONAL, INC. +000401 Osaki Electric Co., Ltd. +000402 Nexsan Technologies, Ltd. +000403 Nexsi Corporation +000404 Makino Milling Machine Co., Ltd. +000405 ACN Technologies +000406 Fa. Metabox AG +000407 Topcon Positioning Systems, Inc. +000408 Sanko Electronics Co., Ltd. +000409 Cratos Networks +00040A Sage Systems +00040B 3com Europe Ltd. +00040C KANNO Work's Ltd. +00040D Avaya, Inc. +00040E AVM GmbH +00040F Asus Network Technologies, Inc. +000410 Spinnaker Networks, Inc. +000411 Inkra Networks, Inc. +000412 WaveSmith Networks, Inc. +000413 SNOM Technology AG +000414 Umezawa Musen Denki Co., Ltd. +000415 Rasteme Systems Co., Ltd. +000416 Parks S/A Comunicacoes Digitais +000417 ELAU AG +000418 Teltronic S.A.U. +000419 Fibercycle Networks, Inc. +00041A ines GmbH +00041B Digital Interfaces Ltd. +00041C ipDialog, Inc. +00041D Corega of America +00041E Shikoku Instrumentation Co., Ltd. +00041F Sony Computer Entertainment, Inc. +000420 Slim Devices, Inc. +000421 Ocular Networks +000422 Gordon Kapes, Inc. +000423 Intel Corporation +000424 TMC s.r.l. +000425 Atmel Corporation +000426 Autosys +000427 Cisco Systems, Inc. +000428 Cisco Systems, Inc. +000429 Pixord Corporation +00042A Wireless Networks, Inc. +00042B IT Access Co., Ltd. +00042C Minet, Inc. +00042D Sarian Systems, Ltd. +00042E Netous Technologies, Ltd. +00042F International Communications Products, Inc. +000430 Netgem +000431 GlobalStreams, Inc. +000432 Voyetra Turtle Beach, Inc. +000433 Cyberboard A/S +000434 Accelent Systems, Inc. +000435 Comptek International, Inc. +000436 ELANsat Technologies, Inc. +000437 Powin Information Technology, Inc. +000438 Nortel Networks +000439 Rosco Entertainment Technology, Inc. +00043A Intelligent Telecommunications, Inc. +00043B Lava Computer Mfg., Inc. +00043C SONOS Co., Ltd. +00043D INDEL AG +00043E Telencomm +00043F Electronic Systems Technology, Inc. +000440 cyberPIXIE, Inc. +000441 Half Dome Systems, Inc. +000442 NACT +000443 Agilent Technologies, Inc. +000444 Western Multiplex Corporation +000445 LMS Skalar Instruments GmbH +000446 CYZENTECH Co., Ltd. +000447 Acrowave Systems Co., Ltd. +000448 Polaroid Professional Imaging +000449 Mapletree Networks +00044A iPolicy Networks, Inc. +00044B NVIDIA +00044C JENOPTIK +00044D Cisco Systems, Inc. +00044E Cisco Systems, Inc. +00044F Leukhardt Systemelektronik GmbH +000450 DMD Computers SRL +000451 Medrad, Inc. +000452 RocketLogix, Inc. +000453 YottaYotta, Inc. +000454 Quadriga UK +000455 ANTARA.net +000456 PipingHot Networks +000457 Universal Access Technology, Inc. +000458 Fusion X Co., Ltd. +000459 Veristar Corporation +00045A The Linksys Group, Inc. +00045B Techsan Electronics Co., Ltd. +00045C Mobiwave Pte Ltd +00045D BEKA Elektronik +00045E PolyTrax Information Technology AG +00045F Evalue Technology, Inc. +000460 Knilink Technology, Inc. +000461 EPOX Computer Co., Ltd. +000462 DAKOS Data & Communication Co., Ltd. +000463 Bosch Security Systems +000464 Fantasma Networks, Inc. +000465 i.s.t isdn-support technik GmbH +000466 ARMITEL Co. +000467 Wuhan Research Institute of MII +000468 Vivity, Inc. +000469 Innocom, Inc. +00046A Navini Networks +00046B Palm Wireless, Inc. +00046C Cyber Technology Co., Ltd. +00046D Cisco Systems, Inc. +00046E Cisco Systems, Inc. +00046F Digitel S/A Industria Eletronica +000470 ipUnplugged AB +000471 IPrad +000472 Telelynx, Inc. +000473 Photonex Corporation +000474 LEGRAND +000475 3 Com Corporation +000476 3 Com Corporation +000477 Scalant Systems, Inc. +000478 G. Star Technology Corporation +000479 Radius Co., Ltd. +00047A AXXESSIT ASA +00047B Schlumberger +00047C Skidata AG +00047D Pelco +00047E NKF Electronics +00047F Chr. Mayr GmbH & Co. KG +000480 Foundry Networks, Inc. +000481 Econolite Control Products, Inc. +000482 Medialogic Corp. +000483 Deltron Technology, Inc. +000484 Amann GmbH +000485 PicoLight +000486 ITTC, University of Kansas +000487 Cogency Semiconductor, Inc. +000488 Eurotherm Controls +000489 YAFO Networks, Inc. +00048A Temia Vertriebs GmbH +00048B Poscon Corporation +00048C Nayna Networks, Inc. +00048D Tone Commander Systems, Inc. +00048E Ohm Tech Labs, Inc. +00048F TD Systems Corp. +000490 Optical Access +000491 Technovision, Inc. +000492 Hive Internet, Ltd. +000493 Tsinghua Unisplendour Co., Ltd. +000494 Breezecom, Ltd. +000495 Tejas Networks +000496 Extreme Networks +000497 MacroSystem Digital Video AG +000499 Chino Corporation +00049A Cisco Systems, Inc. +00049B Cisco Systems, Inc. +00049C Surgient Networks, Inc. +00049D Ipanema Technologies +00049E Wirelink Co., Ltd. +00049F Metrowerks +0004A0 Verity Instruments, Inc. +0004A1 Pathway Connectivity +0004A2 L.S.I. Japan Co., Ltd. +0004A3 Microchip Technology, Inc. +0004A4 NetEnabled, Inc. +0004A5 Barco Projection Systems NV +0004A6 SAF Tehnika Ltd. +0004A7 FabiaTech Corporation +0004A8 Broadmax Technologies, Inc. +0004A9 SandStream Technologies, Inc. +0004AA Jetstream Communications +0004AB Comverse Network Systems, Inc. +0004AC IBM CORP. +0004AD Malibu Networks +0004AE Liquid Metronics +0004AF Digital Fountain, Inc. +0004B0 ELESIGN Co., Ltd. +0004B1 Signal Technology, Inc. +0004B2 ESSEGI SRL +0004B3 Videotek, Inc. +0004B4 CIAC +0004B5 Equitrac Corporation +0004B6 Stratex Networks, Inc. +0004B7 AMB i.t. Holding +0004B8 Kumahira Co., Ltd. +0004B9 S.I. Soubou, Inc. +0004BA KDD Media Will Corporation +0004BB Bardac Corporation +0004BC Giantec, Inc. +0004BD Motorola BCS +0004BE OptXCon, Inc. +0004BF VersaLogic Corp. +0004C0 Cisco Systems, Inc. +0004C1 Cisco Systems, Inc. +0004C2 Magnipix, Inc. +0004C3 CASTOR Informatique +0004C4 Allen & Heath Limited +0004C5 ASE Technologies, USA +0004C6 Yamaha Motor Co., Ltd. +0004C7 NetMount +0004C8 LIBA Maschinenfabrik GmbH +0004C9 Micro Electron Co., Ltd. +0004CA FreeMs Corp. +0004CB Tdsoft Communication, Ltd. +0004CC Peek Traffic B.V. +0004CD Informedia Research Group +0004CE Patria Ailon +0004CF Seagate Technology +0004D0 Softlink s.r.o. +0004D1 Drew Technologies, Inc. +0004D2 Adcon Telemetry GmbH +0004D3 Toyokeiki Co., Ltd. +0004D4 Proview Electronics Co., Ltd. +0004D5 Hitachi Communication Systems, Inc. +0004D6 Takagi Industrial Co., Ltd. +0004D7 Omitec Instrumentation Ltd. +0004D8 IPWireless, Inc. +0004D9 Titan Electronics, Inc. +0004DA Relax Technology, Inc. +0004DB Tellus Group Corp. +0004DC Nortel Networks +0004DD Cisco Systems, Inc. +0004DE Cisco Systems, Inc. +0004DF Teracom Telematica Ltda. +0004E0 Procket Networks +0004E1 Infinior Microsystems +0004E2 SMC Networks, Inc. +0004E3 Accton Technology Corp. +0004E4 Daeryung Ind., Inc. +0004E5 Glonet Systems, Inc. +0004E6 Banyan Network Private Limited +0004E7 Lightpointe Communications, Inc +0004E8 IER, Inc. +0004E9 Infiniswitch Corporation +0004EA Hewlett-Packard Company +0004EB Paxonet Communications, Inc. +0004EC Memobox SA +0004ED Billion Electric Co., Ltd. +0004EE Lincoln Electric Company +0004EF Polestar Corp. +0004F0 International Computers, Ltd +0004F1 WhereNet +0004F2 Circa Communications, Ltd. +0004F3 FS FORTH-SYSTEME GmbH +0004F4 Infinite Electronics Inc. +0004F5 SnowShore Networks, Inc. +0004F6 Amphus +0004F7 Omega Band, Inc. +0004F8 QUALICABLE TV Industria E Com., Ltda +0004F9 Xtera Communications, Inc. +0004FA MIST Inc. +0004FB Commtech, Inc. +0004FC Stratus Computer (DE), Inc. +0004FD Japan Control Engineering Co., Ltd. +0004FE Pelago Networks +0004FF Acronet Co., Ltd. +000500 Cisco Systems, Inc. +000501 Cisco Systems, Inc. +000502 APPLE COMPUTER +000503 ICONAG +000504 Naray Information & Communication Enterprise +000505 Systems Integration Solutions, Inc. +000506 Reddo Networks AB +000507 Fine Appliance Corp. +000508 Inetcam, Inc. +000509 AVOC Nishimura Ltd. +00050A ICS Spa +00050B SICOM Systems, Inc. +00050C Network Photonics, Inc. +00050D Midstream Technologies, Inc. +00050E 3ware, Inc. +00050F Tanaka S/S Ltd. +000510 Infinite Shanghai Communication Terminals Ltd. +000511 Complementary Technologies Ltd +000512 MeshNetworks, Inc. +000513 VTLinx Multimedia Systems, Inc. +000514 KDT Systems Co., Ltd. +000515 Nuark Co., Ltd. +000516 SMART Modular Technologies +000517 Shellcomm, Inc. +000518 Jupiters Technology +000519 Siemens Building Technologies AG, +00051A 3Com Europe Ltd. +00051B Magic Control Technology Corporation +00051C Xnet Technology Corp. +00051D Airocon, Inc. +00051E Brocade Communications Systems, Inc. +00051F Taijin Media Co., Ltd. +000520 Smartronix, Inc. +000521 Control Microsystems +000522 LEA*D Corporation, Inc. +000523 AVL List GmbH +000524 BTL System (HK) Limited +000525 Puretek Industrial Co., Ltd. +000526 IPAS GmbH +000527 SJ Tek Co. Ltd +000528 New Focus, Inc. +000529 Shanghai Broadan Communication Technology Co., Ltd +00052A Ikegami Tsushinki Co., Ltd. +00052B HORIBA, Ltd. +00052C Supreme Magic Corporation +00052D Zoltrix International Limited +00052E Cinta Networks +00052F Leviton Voice and Data +000530 Andiamo Systems, Inc. +000531 Cisco Systems, Inc. +000532 Cisco Systems, Inc. +000533 Sanera Systems, Inc. +000534 Northstar Engineering Ltd. +000535 Chip PC Ltd. +000536 Danam Communications, Inc. +000537 Nets Technology Co., Ltd. +000538 Merilus, Inc. +000539 A Brand New World in Sweden AB +00053A Willowglen Services Pte Ltd +00053B Harbour Networks Ltd., Co. Beijing +00053C Xircom +00053D Agere Systems +00053E KID Systeme GmbH +00053F VisionTek, Inc. +000540 FAST Corporation +000541 Advanced Systems Co., Ltd. +000542 Otari, Inc. +000543 IQ Wireless GmbH +000544 Valley Technologies, Inc. +000545 Internet Photonics +000546 KDDI Network & Solultions Inc. +000547 Starent Networks +000548 Disco Corporation +000549 Salira Optical Network Systems +00054A Ario Data Networks, Inc. +00054B Micro Innovation AG +00054C RF Innovations Pty Ltd +00054D Brans Technologies, Inc. +00054E Philips Components +000550 Vcomms Limited +000551 F & S Elektronik Systeme GmbH +000552 Xycotec Computer GmbH +000553 DVC Company, Inc. +000554 Rangestar Wireless +000555 Japan Cash Machine Co., Ltd. +000556 360 Systems +000557 Agile TV Corporation +000558 Synchronous, Inc. +000559 Intracom S.A. +00055A Power Dsine Ltd. +00055B Charles Industries, Ltd. +00055C Kowa Company, Ltd. +00055D D-Link Systems, Inc. +00055E Cisco Systems, Inc. +00055F Cisco Systems, Inc. +000560 LEADER COMM.CO., LTD +000561 nac Image Technology, Inc. +000562 Digital View Limited +000563 J-Works, Inc. +000564 Tsinghua Bitway Co., Ltd. +000565 Tailyn Communication Company Ltd. +000566 Secui.com Corporation +000567 Etymonic Design, Inc. +000568 Piltofish Networks AB +000569 VMWARE, Inc. +00056A Heuft Systemtechnik GmbH +00056B C.P. Technology Co., Ltd. +00056C Hung Chang Co., Ltd. +00056D Pacific Corporation +00056E National Enhance Technology, Inc. +00056F Innomedia Technologies Pvt. Ltd. +000570 Baydel Ltd. +000571 Seiwa Electronics Co. +000572 Deonet Co., Ltd. +000573 Cisco Systems, Inc. +000574 Cisco Systems, Inc. +000575 CDS-Electronics BV +000576 NSM Technology Ltd. +000577 SM Information & Communication +000579 Universal Control Solution Corp. +00057A Hatteras Networks +00057B Chung Nam Electronic Co., Ltd. +00057C RCO Security AB +00057D Sun Communications, Inc. +00057E Eckelmann Steuerungstechnik GmbH +00057F Acqis Technology +000580 Fibrolan Ltd. +000581 Snell & Wilcox Ltd. +000582 ClearCube Technology +000583 ImageCom Limited +000584 AbsoluteValue Systems, Inc. +000585 Juniper Networks, Inc. +000586 Lucent Technologies +000587 Locus, Incorporated +000588 Sensoria Corp. +000589 National Datacomputer +00058A Netcom Co., Ltd. +00058B IPmental, Inc. +00058C Opentech Inc. +00058D Lynx Photonic Networks, Inc. +00058E Flextronics International GmbH & Co. Nfg. KG +00058F CLCsoft co. +000590 Swissvoice Ltd. +000591 Active Silicon Ltd. +000592 Pultek Corp. +000593 Grammar Engine Inc. +000594 IXXAT Automation GmbH +000595 Alesis Corporation +000596 Genotech Co., Ltd. +000597 Eagle Traffic Control Systems +000598 CRONOS S.r.l. +000599 DRS Test and Energy Management or DRS-TEM +00059A Cisco Systems, Inc. +00059B Cisco Systems, Inc. +00059C Kleinknecht GmbH, Ing. Buero +00059D Daniel Computing Systems, Inc. +00059E Zinwell Corporation +00059F Yotta Networks, Inc. +0005A0 MOBILINE Kft. +0005A1 Zenocom +0005A2 CELOX Networks +0005A3 QEI, Inc. +0005A4 Lucid Voice Ltd. +0005A5 KOTT +0005A6 Extron Electronics +0005A7 Hyperchip, Inc. +0005A8 WYLE ELECTRONICS +0005A9 Princeton Networks, Inc. +0005AA Moore Industries International Inc. +0005AB Cyber Fone, Inc. +0005AC Northern Digital, Inc. +0005AD Topspin Communications, Inc. +0005AE Mediaport USA +0005AF InnoScan Computing A/S +0005B0 Korea Computer Technology Co., Ltd. +0005B1 ASB Technology BV +0005B2 Medison Co., Ltd. +0005B3 Asahi-Engineering Co., Ltd. +0005B4 Aceex Corporation +0005B5 Broadcom Technologies +0005B6 INSYS Microelectronics GmbH +0005B7 Arbor Technology Corp. +0005B8 Electronic Design Associates, Inc. +0005B9 Airvana, Inc. +0005BA Area Netwoeks, Inc. +0005BB Myspace AB +0005BC Resorsys Ltd. +0005BD ROAX BV +0005BE Kongsberg Seatex AS +0005BF JustEzy Technology, Inc. +0005C0 Digital Network Alacarte Co., Ltd. +0005C1 A-Kyung Motion, Inc. +0005C2 Soronti, Inc. +0005C3 Pacific Instruments, Inc. +0005C4 Telect, Inc. +0005C5 Flaga HF +0005C6 Triz Communications +0005C7 I/F-COM A/S +0005C8 VERYTECH +0005C9 LG Innotek +0005CA Hitron Technology, Inc. +0005CB ROIS Technologies, Inc. +0005CC Sumtel Communications, Inc. +0005CD Denon, Ltd. +0005CE Prolink Microsystems Corporation +0005CF Thunder River Technologies, Inc. +0005D0 Solinet Systems +0005D1 Metavector Technologies +0005D2 DAP Technologies +0005D3 eProduction Solutions, Inc. +0005D4 FutureSmart Networks, Inc. +0005D5 Speedcom Wireless +0005D6 Titan Wireless +0005D7 Vista Imaging, Inc. +0005D8 Arescom, Inc. +0005D9 Techno Valley, Inc. +0005DA Apex Automationstechnik +0005DB Nentec GmbH +0005DC Cisco Systems, Inc. +0005DD Cisco Systems, Inc. +0005DE Gi Fone Korea, Inc. +0005DF Electronic Innovation, Inc. +0005E0 Empirix Corp. +0005E1 Trellis Photonics, Ltd. +0005E2 Creativ Network Technologies +0005E3 LightSand Communications, Inc. +0005E4 Red Lion Controls L.P. +0005E5 Renishaw PLC +0005E6 Egenera, Inc. +0005E7 Netrake Corp. +0005E8 TurboWave, Inc. +0005E9 Unicess Network, Inc. +0005EA Rednix +0005EB Blue Ridge Networks, Inc. +0005EC Mosaic Systems Inc. +0005ED Technikum Joanneum GmbH +0005EE BEWATOR Group +0005EF ADOIR Digital Technology +0005F0 SATEC +0005F1 Vrcom, Inc. +0005F2 Power R, Inc. +0005F3 Weboyn +0005F4 System Base Co., Ltd. +0005F5 OYO Geospace Corp. +0005F6 Young Chang Co. Ltd. +0005F7 Analog Devices, Inc. +0005F8 Real Time Access, Inc. +0005F9 TOA Corporation +0005FA IPOptical, Inc. +0005FB ShareGate, Inc. +0005FC Schenck Pegasus Corp. +0005FD PacketLight Networks Ltd. +0005FE Traficon N.V. +0005FF SNS Solutions, Inc. +000600 Toshiba Teli Corporation +000601 Otanikeiki Co., Ltd. +000602 Cirkitech Electronics Co. +000603 Baker Hughes Inc. +000604 @Track Communications, Inc. +000605 Inncom International, Inc. +000606 RapidWAN, Inc. +000607 Omni Directional Control Technology Inc. +000608 At-Sky SAS +000609 Crossport Systems +00060A Blue2space +00060B Paceline Systems Corporation +00060C Melco Industries, Inc. +00060D Wave7 Optics +00060E IGYS Systems, Inc. +00060F Narad Networks Inc +000610 Abeona Networks Inc +000611 Zeus Wireless, Inc. +000612 Accusys, Inc. +000613 Kawasaki Microelectronics Incorporated +000614 Prism Holdings +000615 Kimoto Electric Co., Ltd. +000616 Tel Net Co., Ltd. +000617 Redswitch Inc. +000618 DigiPower Manufacturing Inc. +000619 Connection Technology Systems +00061A Zetari Inc. +00061B Portable Systems, IBM Japan Co, Ltd +00061C Hoshino Metal Industries, Ltd. +00061D MIP Telecom, Inc. +00061E Maxan Systems +00061F Vision Components GmbH +000620 Serial System Ltd. +000621 Hinox, Co., Ltd. +000622 Chung Fu Chen Yeh Enterprise Corp. +000623 MGE UPS Systems France +000624 Gentner Communications Corp. +000625 The Linksys Group, Inc. +000626 MWE GmbH +000627 Uniwide Technologies, Inc. +000628 Cisco Systems, Inc. +000629 IBM CORPORATION +00062A Cisco Systems, Inc. +00062B INTRASERVER TECHNOLOGY +00062C Network Robots, Inc. +00062D TouchStar Technologies, L.L.C. +00062E Aristos Logic Corp. +00062F Pivotech Systems Inc. +000630 Adtranz Sweden +000631 Optical Solutions, Inc. +000632 Mesco Engineering GmbH +000633 Smiths Heimann Biometric Systems +000634 GTE Airfone Inc. +000635 PacketAir Networks, Inc. +000636 Jedai Broadband Networks +000637 Toptrend-Meta Information (ShenZhen) Inc. +000638 Sungjin C&C Co., Ltd. +000639 Newtec +00063A Dura Micro, Inc. +00063B Arcturus Networks, Inc. +00063C NMI Electronics Ltd +00063D Microwave Data Systems Inc. +00063E Opthos Inc. +00063F Everex Communications Inc. +000640 White Rock Networks +000641 ITCN +000642 Genetel Systems Inc. +000643 SONO Computer Co., Ltd. +000644 NEIX Inc. +000645 Meisei Electric Co. Ltd. +000646 ShenZhen XunBao Network Technology Co Ltd +000647 Etrali S.A. +000648 Seedsware, Inc. +000649 Quante +00064A Honeywell Co., Ltd. (KOREA) +00064B Alexon Co., Ltd. +00064C Invicta Networks, Inc. +00064D Sencore +00064E Broad Net Technology Inc. +00064F PRO-NETS Technology Corporation +000650 Tiburon Networks, Inc. +000651 Aspen Networks Inc. +000652 Cisco Systems, Inc. +000653 Cisco Systems, Inc. +000654 Maxxio Technologies +000655 Yipee, Inc. +000656 Tactel AB +000657 Market Central, Inc. +000658 Helmut Fischer GmbH & Co. KG +000659 EAL (Apeldoorn) B.V. +00065A Strix Systems +00065B Dell Computer Corp. +00065C Malachite Technologies, Inc. +00065D Heidelberg Web Systems +00065E Photuris, Inc. +00065F ECI Telecom - NGTS Ltd. +000660 NADEX Co., Ltd. +000661 NIA Home Technologies Corp. +000662 MBM Technology Ltd. +000663 Human Technology Co., Ltd. +000664 Fostex Corporation +000665 Sunny Giken, Inc. +000666 Roving Networks +000667 Tripp Lite +000668 Vicon Industries Inc. +000669 Datasound Laboratories Ltd +00066A InfiniCon Systems, Inc. +00066B Sysmex Corporation +00066C Robinson Corporation +00066D Compuprint S.P.A. +00066E Delta Electronics, Inc. +00066F Korea Data Systems +000670 Upponetti Oy +000671 Softing AG +000672 Netezza +000673 Optelecom, Inc. +000674 Spectrum Control, Inc. +000675 Banderacom, Inc. +000676 Novra Technologies Inc. +000677 SICK AG +000678 Marantz Japan, Inc. +000679 Konami Corporation +00067A JMP Systems +00067B Toplink C&C Corporation +00067C CISCO SYSTEMS, INC. +00067D Takasago Ltd. +00067E WinCom Systems, Inc. +00067F Rearden Steel Technologies +000680 Card Access, Inc. +000681 Goepel Electronic GmbH +000682 Convedia +000683 Bravara Communications, Inc. +000684 Biacore AB +000685 NetNearU Corporation +000686 ZARDCOM Co., Ltd. +000687 Omnitron Systems Technology, Inc. +000688 Telways Communication Co., Ltd. +000689 yLez Technologies Pte Ltd +00068A NeuronNet Co. Ltd. R&D Center +00068B AirRunner Technologies, Inc. +00068C 3Com Corporation +00068D SANgate Systems +00068E HID Corporation +00068F Telemonitor, Inc. +000690 Euracom Communication GmbH +000691 PT Inovacao +000692 Intruvert Networks, Inc. +000693 Flexus Computer Technology, Inc. +000694 Mobillian Corporation +000695 Ensure Technologies, Inc. +000696 Advent Networks +000697 R & D Center +000698 egnite Software GmbH +000699 Vida Design Co. +00069A e & Tel +00069B AVT Audio Video Technologies GmbH +00069C Transmode Systems AB +00069D Petards Mobile Intelligence +00069E UNIQA, Inc. +00069F Kuokoa Networks +0006A0 Mx Imaging +0006A1 Celsian Technologies, Inc. +0006A2 Microtune, Inc. +0006A3 Bitran Corporation +0006A4 INNOWELL Corp. +0006A5 PINON Corp. +0006A6 Artistic Licence (UK) Ltd +0006A7 Primarion +0006A8 KC Technology, Inc. +0006A9 Universal Instruments Corp. +0006AA Miltope Corporation +0006AB W-Link Systems, Inc. +0006AC Intersoft Co. +0006AD KB Electronics Ltd. +0006AE Himachal Futuristic Communications Ltd +0006B0 Comtech EF Data Corp. +0006B1 Sonicwall +0006B2 Linxtek Co. +0006B3 Diagraph Corporation +0006B4 Vorne Industries, Inc. +0006B5 Luminent, Inc. +0006B6 Nir-Or Israel Ltd. +0006B7 TELEM GmbH +0006B8 Bandspeed Pty Ltd +0006B9 A5TEK Corp. +0006BA Westwave Communications +0006BB ATI Technologies Inc. +0006BC Macrolink, Inc. +0006BD BNTECHNOLOGY Co., Ltd. +0006BE Baumer Optronic GmbH +0006BF Accella Technologies Co., Ltd. +0006C0 United Internetworks, Inc. +0006C1 CISCO SYSTEMS, INC. +0006C2 Smartmatic Corporation +0006C3 Schindler Elevators Ltd. +0006C4 Piolink Inc. +0006C5 INNOVI Technologies Limited +0006C6 lesswire AG +0006C7 RFNET Technologies Pte Ltd (S) +0006C8 Sumitomo Metal Micro Devices, Inc. +0006C9 Technical Marketing Research, Inc. +0006CA American Computer & Digital Components, Inc. (ACDC) +0006CB Jotron Electronics A/S +0006CC JMI Electronics Co., Ltd. +0006CD Creo IL. Ltd. +0006CE DATENO +0006CF Thales Avionics In-Flight Systems, LLC +0006D0 Elgar Electronics Corp. +0006D1 Tahoe Networks, Inc. +0006D2 Tundra Semiconductor Corp. +0006D3 Alpha Telecom, Inc. U.S.A. +0006D4 Interactive Objects, Inc. +0006D5 Diamond Systems Corp. +0006D6 Cisco Systems, Inc. +0006D7 Cisco Systems, Inc. +0006D8 Maple Optical Systems +0006D9 IPM-Net S.p.A. +0006DA ITRAN Communications Ltd. +0006DB ICHIPS Co., Ltd. +0006DC Syabas Technology (Amquest) +0006DD AT & T Laboratories - Cambridge Ltd +0006DE Flash Technology +0006DF AIDONIC Corporation +0006E0 MAT Co., Ltd. +0006E1 Techno Trade s.a +0006E2 Ceemax Technology Co., Ltd. +0006E3 Quantitative Imaging Corporation +0006E4 Citel Technologies Ltd. +0006E5 Fujian Newland Computer Ltd. Co. +0006E6 DongYang Telecom Co., Ltd. +0006E7 Bit Blitz Communications Inc. +0006E8 Optical Network Testing, Inc. +0006E9 Intime Corp. +0006EA ELZET80 Mikrocomputer GmbH&Co. KG +0006EB Global Data +0006EC M/A COM Private Radio System Inc. +0006ED Inara Networks +0006EE Shenyang Neu-era Information & Technology Stock Co., Ltd +0006EF Maxxan Systems, Inc. +0006F0 Digeo, Inc. +0006F1 Optillion +0006F2 Platys Communications +0006F3 AcceLight Networks +0006F4 Prime Electronics & Satellitics Inc. +0006F9 Mitsui Zosen Systems Research Inc. +0006FA IP SQUARE Co, Ltd. +0006FB Hitachi Printing Solutions, Ltd. +0006FC Fnet Co., Ltd. +0006FD Comjet Information Systems Corp. +0006FE Celion Networks, Inc. +0006FF Sheba Systems Co., Ltd. +000700 Zettamedia Korea +000701 RACAL-DATACOM +000702 Varian Medical Systems +000703 CSEE Transport +000705 Endress & Hauser GmbH & Co +000706 Sanritz Corporation +000707 Interalia Inc. +000708 Bitrage Inc. +000709 Westerstrand Urfabrik AB +00070A Unicom Automation Co., Ltd. +00070B Octal, SA +00070C SVA-Intrusion.com Co. Ltd. +00070D Cisco Systems Inc. +00070E Cisco Systems Inc. +00070F Fujant, Inc. +000710 Adax, Inc. +000711 Acterna +000712 JAL Information Technology +000713 IP One, Inc. +000714 Brightcom +000715 General Research of Electronics, Inc. +000716 J & S Marine Ltd. +000717 Wieland Electric GmbH +000718 iCanTek Co., Ltd. +000719 Mobiis Co., Ltd. +00071A Finedigital Inc. +00071B Position Technology Inc. +00071C AT&T Fixed Wireless Services +00071D Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A. +00071E Tri-M Engineering / Nupak Dev. Corp. +00071F European Systems Integration +000720 Trutzschler GmbH & Co. KG +000721 Formac Elektronik GmbH +000722 Nielsen Media Research +000723 ELCON Systemtechnik GmbH +000724 Telemax Co., Ltd. +000725 Bematech International Corp. +000727 Zi Corporation (HK) Ltd. +000728 Neo Telecom +000729 Kistler Instrumente AG +00072A Innovance Networks +00072B Jung Myung Telecom Co., Ltd. +00072C Fabricom +00072D CNSystems +00072E North Node AB +00072F Instransa, Inc. +000730 Hutchison OPTEL Telecom Technology Co., Ltd. +000731 Spiricon, Inc. +000732 AAEON Technology Inc. +000733 DANCONTROL Engineering +000734 ONStor, Inc. +000735 Flarion Technologies, Inc. +000736 Data Video Technologies Co., Ltd. +000737 Soriya Co. Ltd. +000738 Young Technology Co., Ltd. +000739 Motion Media Technology Ltd. +00073A Inventel Systemes +00073B Tenovis GmbH & Co KG +00073C Telecom Design +00073D Nanjing Postel Telecommunications Co., Ltd. +00073E China Great-Wall Computer Shenzhen Co., Ltd. +00073F Woojyun Systec Co., Ltd. +000740 Melco Inc. +000741 Sierra Automated Systems +000742 Current Technologies +000743 Chelsio Communications +000744 Unico, Inc. +000745 Radlan Computer Communications Ltd. +000746 Interlink BT, LLC +000747 Mecalc +000748 The Imaging Source Europe +000749 CENiX Inc. +00074A Carl Valentin GmbH +00074B Daihen Corporation +00074C Beicom Inc. +00074D Zebra Technologies Corp. +00074E Naughty boy co., Ltd. +00074F Cisco Systems, Inc. +000750 Cisco Systems, Inc. +000751 m.u.t. - GmbH +000752 Rhythm Watch Co., Ltd. +000753 Beijing Qxcomm Technology Co., Ltd. +000754 Xyterra Computing, Inc. +000755 Lafon SA +000756 Juyoung Telecom +000757 Topcall International AG +000758 Dragonwave +000759 Boris Manufacturing Corp. +00075A Air Products and Chemicals, Inc. +00075B Gibson Guitars +00075C ENCAD, Inc. +00075D Celleritas Inc. +00075E Pulsar Technologies, Inc. +00075F VCS Video Communication Systems AG +000760 TOMIS Information & Telecom Corp. +000761 Logitech SA +000762 Group Sense Limited +000763 Sunniwell Cyber Tech. Co., Ltd. +000764 YoungWoo Telecom Co. Ltd. +000765 Jade Quantum Technologies, Inc. +000766 Chou Chin Industrial Co., Ltd. +000767 Yuxing Electronics Company Limited +000768 Danfoss A/S +000769 Italiana Macchi SpA +00076A NEXTEYE Co., Ltd. +00076B Stralfors AB +00076C Daehanet, Inc. +00076D Flexlight Networks +00076E Sinetica Corporation Ltd. +00076F Synoptics Limited +000770 Locusnetworks Corporation +000771 Embedded System Corporation +000772 Alcatel Shanghai Bell Co., Ltd. +000773 Ascom Powerline Communications Ltd. +000774 GuangZhou Thinker Technology Co. Ltd. +000775 Valence Semiconductor, Inc. +000776 Federal APD +000777 Motah Ltd. +000778 GERSTEL GmbH & Co. KG +000779 Sungil Telecom Co., Ltd. +00077A Infoware System Co., Ltd. +00077B Millimetrix Broadband Networks +00077C OnTime Networks +00077E Elrest GmbH +00077F J Communications Co., Ltd. +000780 Bluegiga Technologies OY +000781 Itron Inc. +000782 Nauticus Networks, Inc. +000783 SynCom Network, Inc. +000784 Cisco Systems Inc. +000785 Cisco Systems Inc. +000786 Wireless Networks Inc. +000787 Idea System Co., Ltd. +000788 Clipcomm, Inc. +000789 Eastel Systems Corporation +00078A Mentor Data System Inc. +00078B Wegener Communications, Inc. +00078C Elektronikspecialisten i Borlange AB +00078D NetEngines Ltd. +00078E Garz & Friche GmbH +00078F Emkay Innovative Products +000790 Tri-M Technologies (s) Limited +000791 International Data Communications, Inc. +000792 Suetron Electronic GmbH +000793 Shin Satellite Public Company Limited +000794 Simple Devices, Inc. +000795 Elitegroup Computer System Co. (ECS) +000796 LSI Systems, Inc. +000797 Netpower Co., Ltd. +000798 Selea SRL +000799 Tipping Point Technologies, Inc. +00079A SmartSight Networks Inc. +00079B Aurora Networks +00079C Golden Electronics Technology Co., Ltd. +00079D Musashi Co., Ltd. +00079E Ilinx Co., Ltd. +00079F Action Digital Inc. +0007A0 e-Watch Inc. +0007A1 VIASYS Healthcare GmbH +0007A2 Opteon Corporation +0007A3 Ositis Software, Inc. +0007A4 GN Netcom Ltd. +0007A5 Y.D.K Co. Ltd. +0007A6 Home Automation, Inc. +0007A7 A-Z Inc. +0007A8 Haier Group Technologies Ltd. +0007A9 Novasonics +0007AA Quantum Data Inc. +0007AC Eolring +0007AD Pentacon GmbH Foto-und Feinwerktechnik +0007AE Layer N Networks +0007AF N-Tron Corp. +0007B0 Office Details, Inc. +0007B1 Equator Technologies +0007B2 Transaccess S.A. +0007B3 Cisco Systems Inc. +0007B4 Cisco Systems Inc. +0007B5 Any One Wireless Ltd. +0007B6 Telecom Technology Ltd. +0007B7 Samurai Ind. Prods Eletronicos Ltda +0007B8 American Predator Corp. +0007B9 Ginganet Corporation +0007BA Xebeo Communications, Inc. +0007BB Candera Inc. +0007BC Identix Inc. +0007BD Radionet Ltd. +0007BE DataLogic SpA +0007BF Armillaire Technologies, Inc. +0007C0 NetZerver Inc. +0007C1 Overture Networks, Inc. +0007C2 Netsys Telecom +0007C3 Cirpack +0007C4 JEAN Co. Ltd. +0007C5 Gcom, Inc. +0007C6 VDS Vosskuhler GmbH +0007C7 Synectics Systems Limited +0007C8 Brain21, Inc. +0007C9 Technol Seven Co., Ltd. +0007CA Creatix Polymedia Ges Fur Kommunikaitonssysteme +0007CB Freebox SA +0007CC Kaba Benzing GmbH +0007CD NMTEL Co., Ltd. +0007CE Cabletime Limited +0007CF Anoto AB +0007D0 Automat Engenharia de Automaoa Ltda. +0007D1 Spectrum Signal Processing Inc. +0007D2 Logopak Systeme +0007D3 Stork Digital Imaging B.V. +0007D4 Zhejiang Yutong Network Communication Co Ltd. +0007D5 3e Technologies Int;., Inc. +0007D6 Commil Ltd. +0007D7 Caporis Networks AG +0007D8 Hitron Systems Inc. +0007D9 Splicecom +0007DA Neuro Telecom Co., Ltd. +0007DB Kirana Networks, Inc. +0007DC Atek Co, Ltd. +0007DD Cradle Technologies +0007DE eCopilt AB +0007DF Vbrick Systems Inc. +0007E0 Palm Inc. +0007E1 WIS Communications Co. Ltd. +0007E2 Bitworks, Inc. +0007E3 Navcom Technology, Inc. +0007E4 SoftRadio Co., Ltd. +0007E5 Coup Corporation +0007E6 edgeflow Canada Inc. +0007E7 FreeWave Technologies +0007E8 St. Bernard Software +0007E9 Intel Corporation +0007EA Massana, Inc. +0007EB Cisco Systems Inc. +0007EC Cisco Systems Inc. +0007ED Altera Corporation +0007EE telco Informationssysteme GmbH +0007EF Lockheed Martin Tactical Systems +0007F0 LogiSync Corporation +0007F1 TeraBurst Networks Inc. +0007F2 IOA Corporation +0007F3 Think Engine Networks +0007F4 Eletex Co., Ltd. +0007F5 Bridgeco Co AG +0007F6 Qqest Software Systems +0007F7 Galtronics +0007F8 ITDevices, Inc. +0007F9 Phonetics, Inc. +0007FA ITT Co., Ltd. +0007FB Giga Stream UMTS Technologies GmbH +0007FC Adept Systems Inc. +0007FD LANergy Ltd. +0007FE Rigaku Corporation +0007FF Gluon Networks +000800 MULTITECH SYSTEMS, INC. +000801 HighSpeed Surfing Inc. +000802 Compaq Computer Corporation +000803 Cos Tron +000804 ICA Inc. +000805 Techno-Holon Corporation +000806 Raonet Systems, Inc. +000807 Access Devices Limited +000808 PPT Vision, Inc. +000809 Systemonic AG +00080A Espera-Werke GmbH +00080B Birka BPA Informationssystem AB +00080C VDA elettronica SrL +00080D Toshiba +00080E Motorola, BCS +00080F Proximion Fiber Optics AB +000810 Key Technology, Inc. +000811 VOIX Corporation +000812 GM-2 Corporation +000813 Diskbank, Inc. +000814 TIL Technologies +000815 CATS Co., Ltd. +000816 Bluetags A/S +000817 EmergeCore Networks LLC +000818 Pixelworks, Inc. +000819 Banksys +00081A Sanrad Intelligence Storage Communications (2000) Ltd. +00081B Windigo Systems +00081C @pos.com +00081D Ipsil, Incorporated +00081E Repeatit AB +00081F Pou Yuen Tech Corp. Ltd. +000820 Cisco Systems Inc. +000821 Cisco Systems Inc. +000822 InPro Comm +000823 Texa Corp. +000824 Promatek Industries Ltd. +000825 Acme Packet +000826 Colorado Med Tech +000827 Pirelli Cables & Systems +000828 Koei Engineering Ltd. +000829 Aval Nagasaki Corporation +00082A Powerwallz Network Security +00082B Wooksung Electronics, Inc. +00082C Homag AG +00082D Indus Teqsite Private Limited +00082E Multitone Electronics PLC +00084E DivergeNet, Inc. +00084F Qualstar Corporation +000850 Arizona Instrument Corp. +000851 Canadian Bank Note Company, Ltd. +000852 Davolink Co. Inc. +000853 Schleicher GmbH & Co. Relaiswerke KG +000854 Netronix, Inc. +000855 NASA-Goddard Space Flight Center +000856 Gamatronic Electronic Industries Ltd. +000857 Polaris Networks, Inc. +000858 Novatechnology Inc. +000859 ShenZhen Unitone Electronics Co., Ltd. +00085A IntiGate Inc. +00085B Hanbit Electronics Co., Ltd. +00085C Shanghai Dare Technologies Co. Ltd. +00085D Aastra +00085E PCO AG +00085F Picanol N.V. +000860 LodgeNet Entertainment Corp. +000861 SoftEnergy Co., Ltd. +000862 NEC Eluminant Technologies, Inc. +000863 Entrisphere Inc. +000864 Fasy S.p.A. +000865 JASCOM CO., LTD +000866 DSX Access Systems, Inc. +000867 Uptime Devices +000868 PurOptix +000869 Command-e Technology Co.,Ltd. +00086A Industrie Technik IPS GmbH +00086B MIPSYS +00086C Plasmon LMS +00086D Missouri FreeNet +00086E Hyglo AB +00086F Resources Computer Network Ltd. +000870 Rasvia Systems, Inc. +000871 NORTHDATA Co., Ltd. +000872 Sorenson Technologies, Inc. +000873 DAP Design B.V. +000874 Dell Computer Corp. +000875 Acorp Electronics Corp. +000876 SDSystem +000877 Liebert HIROSS S.p.A. +000878 Benchmark Storage Innovations +000879 CEM Corporation +00087A Wipotec GmbH +00087B RTX Telecom A/S +00087C Cisco Systems, Inc. +00087D Cisco Systems Inc. +00087E Bon Electro-Telecom Inc. +00087F SPAUN electronic GmbH & Co. KG +000880 BroadTel Canada Communications inc. +000881 DIGITAL HANDS CO.,LTD. +000882 SIGMA CORPORATION +000883 Hewlett-Packard Company +000884 Index Braille AB +000885 EMS Dr. Thomas Wuensche +000886 Hansung Teliann, Inc. +000887 Maschinenfabrik Reinhausen GmbH +000888 OULLIM Information Technology Inc,. +000889 Echostar Technologies Corp +00088A Minds@Work +00088B Tropic Networks Inc. +00088C Quanta Network Systems Inc. +00088D Sigma-Links Inc. +00088E Nihon Computer Co., Ltd. +00088F ADVANCED DIGITAL TECHNOLOGY +000890 AVILINKS SA +000891 Lyan Inc. +000892 EM Solutions +000894 InnoVISION Multimedia Ltd. +000895 DIRC Technologie GmbH & Co.KG +000896 Printronix, Inc. +000897 Quake Technologies +000898 Gigabit Optics Corporation +000899 Netbind, Inc. +00089A Alcatel Microelectronics +00089B ICP Electronics Inc. +00089C Elecs Industry Co., Ltd. +00089D UHD-Elektronik +00089E Beijing Enter-Net co.LTD +00089F EFM Networks +0008A0 Stotz Feinmesstechnik GmbH +0008A1 CNet Technology Inc. +0008A2 ADI Engineering, Inc. +0008A3 Cisco Systems +0008A4 Cisco Systems +0008A5 Peninsula Systems Inc. +0008A6 Multiware & Image Co., Ltd. +0008A7 iLogic Inc. +0008A8 Systec Co., Ltd. +0008A9 SangSang Technology, Inc. +0008AA KARAM +0008AB EnerLinx.com, Inc. +0008AD Toyo-Linx Co., Ltd. +0008AE Packetfront +0008AF Novatec Corporation +0008B0 BKtel communications GmbH +0008B1 ProQuent Systems +0008B2 SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD +0008B3 Fastwel +0008B4 SYSPOL +0008B5 TAI GUEN ENTERPRISE CO., LTD +0008B6 RouteFree, Inc. +0008B7 HIT Incorporated +0008B8 E.F. Johnson +0008B9 KAON MEDIA Co., Ltd. +0008BA Erskine Systems Ltd +0008BB NetExcell +0008BC Ilevo AB +0008BD TEPG-US +0008BE XENPAK MSA Group +0008BF Aptus Elektronik AB +0008C0 ASA SYSTEMS +0008C1 Avistar Communications Corporation +0008C2 Cisco Systems +0008C3 Contex A/S +0008C4 Hikari Co.,Ltd. +0008C5 Liontech Co., Ltd. +0008C6 Philips Consumer Communications +0008C7 COMPAQ COMPUTER CORPORATION +0008C8 Soneticom, Inc. +0008C9 TechniSat Digital GmbH +0008CA TwinHan Technology Co.,Ltd +0008CB Zeta Broadband Inc. +0008CC Remotec, Inc. +0008CD With-Net Inc +0008CE IPMobileNet Inc. +0008CF Nippon Koei Power Systems Co., Ltd. +0008D0 Musashi Engineering Co., LTD. +0008D1 KAREL INC. +0008D2 ZOOM Networks Inc. +0008D3 Hercules Technologies S.A. +0008D4 IneoQuest Technologies, Inc +0008D5 Vanguard Managed Solutions +0008D6 HASSNET Inc. +0008D7 HOW CORPORATION +0008D8 Dowkey Microwave +0008D9 Mitadenshi Co.,LTD +0008DA SofaWare Technologies Ltd. +0008DB Corrigent Systems +0008DC Wiznet +0008DD Telena Communications, Inc. +0008DE 3UP Systems +0008DF Alistel Inc. +0008E0 ATO Technology Ltd. +0008E1 Barix AG +0008E2 Cisco Systems +0008E3 Cisco Systems +0008E4 Envenergy Inc +0008E5 IDK Corporation +0008E6 Littlefeet +0008E7 SHI ControlSystems,Ltd. +0008E8 Excel Master Ltd. +0008E9 NextGig +0008EA Motion Control Engineering, Inc +0008EB ROMWin Co.,Ltd. +0008EC Zonu, Inc. +0008ED ST&T Instrument Corp. +0008EE Logic Product Development +0008EF DIBAL,S.A. +0008F0 Next Generation Systems, Inc. +0008F1 Voltaire +0008F2 C&S Technology +0008F3 WANY +0008F4 Bluetake Technology Co., Ltd. +0008F5 YESTECHNOLOGY Co.,Ltd. +0008F6 SUMITOMO ELECTRIC HIGHTECHS.co.,ltd. +0008F7 Hitachi Ltd, Semiconductor & Integrated Circuits Gr +0008F8 Guardall Ltd +0008F9 Padcom, Inc. +0008FA Karl E.Brinkmann GmbH +0008FB SonoSite, Inc. +0008FC Gigaphoton Inc. +0008FD BlueKorea Co., Ltd. +0008FE UNIK C&C Co.,Ltd. +0008FF Trilogy Broadcast (Holdings) Ltd +000900 TMT +000901 Shenzhen Shixuntong Information & Technoligy Co +000902 Redline Communications Inc. +000903 Panasas, Inc +000904 MONDIAL electronic +000905 iTEC Technologies Ltd. +000906 Esteem Networks +000907 Chrysalis Development +000908 VTech Technology Corp. +000909 Telenor Connect A/S +00090A SnedFar Technology Co., Ltd. +00090B MTL Instruments PLC +00090C Mayekawa Mfg. Co. Ltd. +00090D LEADER ELECTRONICS CORP. +00090E Helix Technology Inc. +00090F Fortinet Inc. +000910 Simple Access Inc. +000911 Cisco Systems +000912 Cisco Systems +000914 COMPUTROLS INC. +000915 CAS Corp. +000916 Listman Home Technologies, Inc. +000917 WEM Technology Inc +000918 SAMSUNG TECHWIN CO.,LTD +000919 MDS Gateways +00091A Macat Optics & Electronics Co., Ltd. +00091B Digital Generation Inc. +00091C CacheVision, Inc +00091D Proteam Computer Corporation +00091E Firstech Technology Corp. +00091F A&D Co., Ltd. +000920 EpoX COMPUTER CO.,LTD. +000921 Planmeca Oy +000922 Touchless Sensor Technology AG +000923 Heaman System Co., Ltd +000924 Telebau GmbH +000925 VSN Systemen BV +000926 YODA COMMUNICATIONS, INC. +000927 TOYOKEIKI CO.,LTD. +000928 Telecore Inc +000929 Sanyo Industries (UK) Limited +00092A MYTECS Co.,Ltd. +00092B iQstor Networks, Inc. +00092C Hitpoint Inc. +00092D High Tech Computer, Corp. +00092E B&Tech System Inc. +00092F Akom Technology Corporation +000930 AeroConcierge Inc. +000931 Future Internet, Inc. +000932 Omnilux +000933 OPTOVALLEY Co. Ltd. +000934 Dream-Multimedia-Tv GmbH +000935 Sandvine Incorporated +000936 Ipetronik GmbH & Co.KG +000937 Inventec Appliance Corp +000938 Allot Communications +000939 ShibaSoku Co.,Ltd. +00093A Molex Fiber Optics +00093B HYUNDAI NETWORKS INC. +00093C Jacques Technologies P/L +00093D Newisys,Inc. +00093E C&I Technologies +00093F Double-Win Enterpirse CO., LTD +000940 AGFEO GmbH & Co. KG +000941 Allied Telesis K.K. +000942 CRESCO, LTD. +000943 Cisco Systems +000944 Cisco Systems +000945 Palmmicro Communications Inc +000946 Cluster Labs GmbH +000947 Aztek, Inc. +000948 Vista Control Systems, Corp. +000949 Glyph Technologies Inc. +00094A Homenet Communications +00094B FillFactory NV +00094C Communication Weaver Co.,Ltd. +00094D Braintree Communications Pty Ltd +00094E BARTECH SYSTEMS INTERNATIONAL, INC +00094F elmegt GmbH & Co. KG +000950 Independent Storage Corporation +000951 Apogee Instruments, Inc +000952 Auerswald GmbH & Co. KG +000953 Linkage System Integration Co.Ltd. +000954 AMiT spol. s. r. o. +000955 Young Generation International Corp. +000956 Network Systems Group, Ltd. (NSG) +000957 Supercaller, Inc. +000958 INTELNET S.A. +000959 Sitecsoft +00095A RACEWOOD TECHNOLOGY +00095B Netgear, Inc. +00095C Philips Medical Systems - Cardiac and Monitoring Systems (CM +00095D Dialogue Technology Corp. +00095E Masstech Group Inc. +00095F Telebyte, Inc. +000960 YOZAN Inc. +000961 Switchgear and Instrumentation Ltd +000962 Filetrac AS +000963 Dominion Lasercom Inc. +000964 Hi-Techniques +000966 Thales Navigation +000967 Tachyon, Inc +000968 TECHNOVENTURE, INC. +000969 Meret Optical Communications +00096A Cloverleaf Communications Inc. +00096B IBM Corporation +00096C Imedia Semiconductor Corp. +00096D Powernet Technologies Corp. +00096E GIANT ELECTRONICS LTD. +00096F Beijing Zhongqing Elegant Tech. Corp.,Limited +000970 Vibration Research Corporation +000971 Time Management, Inc. +000972 Securebase,Inc +000973 Lenten Technology Co., Ltd. +000974 Innopia Technologies, Inc. +000975 fSONA Communications Corporation +000976 Datasoft ISDN Systems GmbH +000977 Brunner Elektronik AG +000978 AIJI System Co., Ltd. +000979 Advanced Television Systems Committee, Inc. +00097A Louis Design Labs. +00097B Cisco Systems +00097C Cisco Systems +00097D SecWell Networks Oy +00097E IMI TECHNOLOGY CO., LTD +00097F Vsecure 2000 LTD. +000980 Power Zenith Inc. +000981 Newport Networks +000982 Loewe Opta GmbH +000983 Gvision Incorporated +000984 MyCasa Network Inc. +000985 Auto Telecom Company +000986 Metalink LTD. +000987 NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD. +000988 Nudian Electron Co., Ltd. +000989 VividLogic Inc. +00098A EqualLogic Inc +00098B Entropic Communications, Inc. +00098C Possio AB +00098D DCT Ltd (Digital Communication Technologies Ltd) +00098E ipcas GmbH +00098F Cetacean Networks +000990 ACKSYS Communications & systems +000991 GE Fanuc Automation Manufacturing, Inc. +000992 InterEpoch Technology,INC. +000993 Visteon Corporation +000994 Cronyx Engineering +000995 Castle Technology Ltd +000996 RDI +000997 Nortel Networks +000998 Capinfo Company Limited +000999 CP GEORGES RENAULT +00099A ELMO COMPANY, LIMITED +00099B Western Telematic Inc. +00099C Naval Research Laboratory +00099D Haliplex Communications +00099E Testech, Inc. +00099F VIDEX INC. +0009A0 Microtechno Corporation +0009A1 Telewise Communications, Inc. +0009A2 Interface Co., Ltd. +0009A3 Leadfly Techologies Corp. Ltd. +0009A4 HARTEC Corporation +0009A5 HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD +0009A6 Ignis Optics, Inc. +0009A7 Bang & Olufsen A/S +0009A8 Eastmode Pte Ltd +0009A9 Ikanos Communications +0009AA Data Comm for Business, Inc. +0009AB Netcontrol Oy +0009AC LANVOICE +0009AD HYUNDAI SYSCOMM, INC. +0009AE OKANO ELECTRIC CO.,LTD +0009AF e-generis +0009B0 Onkyo Corporation +0009B1 Kanematsu Electronics, Ltd. +0009B2 L&F Inc. +0009B3 MCM Systems Ltd +0009B4 KISAN TELECOM CO., LTD. +0009B5 3J Tech. Co., Ltd. +0009B6 Cisco Systems +0009B7 Cisco Systems +0009B8 Entise Systems +0009B9 Action Imaging Solutions +0009BA MAKU Informationstechik GmbH +0009BB MathStar, Inc. +0009BC Digital Safety Technologies Inc. +0009BD Epygi Technologies, Ltd. +0009BE Mamiya-OP Co.,Ltd. +0009BF Nintendo Co.,Ltd. +0009C0 6WIND +0009C1 PROCES-DATA A/S +0009C3 NETAS +0009C4 Medicore Co., Ltd +0009C5 KINGENE Technology Corporation +0009C6 Visionics Corporation +0009C7 Movistec +0009C8 SINAGAWA TSUSHIN KEISOU SERVICE +0009C9 BlueWINC Co., Ltd. +0009CA iMaxNetworks(Shenzhen)Limited. +0009CB HBrain +0009CC Moog GmbH +0009CD HUDSON SOFT CO.,LTD. +0009CE SpaceBridge Semiconductor Corp. +0009CF iAd GmbH +0009D0 Versatel Networks +0009D1 SERANOA NETWORKS INC +0009D2 Mai Logic Inc. +0009D3 Western DataCom Co., Inc. +0009D4 Transtech Networks +0009D5 Signal Communication, Inc. +0009D6 KNC One GmbH +0009D7 DC Security Products +0009D9 Neoscale Systems, Inc +0009DA Control Module Inc. +0009DB eSpace +0009DC Galaxis Technology AG +0009DD Mavin Technology Inc. +0009DE Samjin Information & Communications Co., Ltd. +0009DF Vestel Komunikasyon Sanayi ve Ticaret A.S. +0009E0 XEMICS S.A. +0009E1 Gemtek Technology Co., Ltd. +0009E2 Sinbon Electronics Co., Ltd. +0009E3 Angel Iglesias S.A. +0009E4 K Tech Infosystem Inc. +0009E5 Hottinger Baldwin Messtechnik GmbH +0009E6 Cyber Switching Inc. +0009E7 ADC Techonology +0009E8 Cisco Systems +0009E9 Cisco Systems +0009EA YEM Inc. +0009EB HuMANDATA LTD. +0009EC Daktronics, Inc. +0009ED CipherOptics +0009EE MEIKYO ELECTRIC CO.,LTD +0009EF Vocera Communications +0009F0 Shimizu Technology Inc. +0009F1 Yamaki Electric Corporation +0009F2 Cohu, Inc., Electronics Division +0009F3 WELL Communication Corp. +0009F4 Alcon Laboratories, Inc. +0009F5 Emerson Network Power Co.,Ltd +0009F6 Shenzhen Eastern Digital Tech Ltd. +0009F7 SED, a division of Calian +0009F8 UNIMO TECHNOLOGY CO., LTD. +0009F9 ART JAPAN CO., LTD. +0009FB Philips Medizinsysteme Boeblingen GmbH +0009FC IPFLEX Inc. +0009FD Ubinetics Limited +0009FE Daisy Technologies, Inc. +0009FF X.net 2000 GmbH +000A00 Mediatek Corp. +000A01 SOHOware, Inc. +000A02 ANNSO CO., LTD. +000A03 ENDESA SERVICIOS, S.L. +000A04 3Com Europe Ltd +000A05 Widax Corp. +000A06 Teledex LLC +000A07 WebWayOne Ltd +000A08 ALPINE ELECTRONICS, INC. +000A09 TaraCom Integrated Products, Inc. +000A0A SUNIX Co., Ltd. +000A0B Sealevel Systems, Inc. +000A0C Scientific Research Corporation +000A0D MergeOptics GmbH +000A0E Invivo Research Inc. +000A0F Ilryung Telesys, Inc +000A10 FAST media integrations AG +000A11 ExPet Technologies, Inc +000A12 Azylex Technology, Inc +000A13 Silent Witness +000A14 TECO a.s. +000A15 Silicon Data, Inc +000A16 Lassen Research +000A17 NESTAR COMMUNICATIONS, INC +000A18 Vichel Inc. +000A19 Valere Power, Inc. +000A1A Imerge Ltd +000A1B Stream Labs +000A1C Bridge Information Co., Ltd. +000A1D Optical Communications Products Inc. +000A1E Red-M (Communications) Limited +000A1F ART WARE Telecommunication Co., Ltd. +000A20 SVA Networks, Inc. +000A21 Integra Telecom Co. Ltd +000A22 Amperion Inc +000A23 Parama Networks Inc +000A24 Octave Communications +000A25 CERAGON NETWORKS +000A26 CEIA S.p.A. +000A27 Apple Computer, Inc. +000A28 Motorola +000A29 Pan Dacom Networking AG +000A2A QSI Systems Inc. +000A2B Etherstuff +000A2C Active Tchnology Corporation +000A2E MAPLE NETWORKS CO., LTD +000A2F Artnix Inc. +000A30 Johnson Controls-ASG +000A31 HCV Wireless +000A32 Xsido Corporation +000A33 Sierra Logic, Inc. +000A34 Identicard Systems Incorporated +000A35 Xilinx +000A36 Synelec Telecom Multimedia +000A37 Procera Networks, Inc. +000A38 Netlock Technologies, Inc. +000A39 LoPA Information Technology +000A3A J-THREE INTERNATIONAL Holding Co., Ltd. +000A3B GCT Semiconductor, Inc +000A3C Enerpoint Ltd. +000A3D Elo Sistemas Eletronicos S.A. +000A3E EADS Telecom +000A3F Data East Corporation +000A40 Crown Audio +000A41 Cisco Systems +000A42 Cisco Systems +000A43 Chunghwa Telecom Co., Ltd. +000A44 Avery Dennison Deutschland GmbH +000A45 Audio-Technica Corp. +000A46 ARO Controls SAS +000A47 Allied Vision Technologies +000A48 Albatron Technology +000A49 Acopia Networks +000A4A Targa Systems Ltd. +000A4B DataPower Technology, Inc. +000A4C Molecular Devices Corporation +000A4D Noritz Corporation +000A4E UNITEK Electronics INC. +000A4F Brain Boxes Limited +000A50 REMOTEK CORPORATION +000A51 GyroSignal Technology Co., Ltd. +000A52 Venitek Co. Ltd. +000A53 Intronics, Incorporated +000A54 Laguna Hills, Inc. +000A55 MARKEM Corporation +000A56 HITACHI Maxell Ltd. +000A57 Hewlett-Packard Company - Standards +000A58 Ingenieur-Buero Freyer & Siegel +000A59 HW server +000A5A GreenNET Technologies Co.,Ltd. +000A5B Power-One as +000A5C Carel s.p.a. +000A5D PUC Founder (MSC) Berhad +000A5E 3COM Corporation +000A5F almedio inc. +000A60 Autostar Technology Pte Ltd +000A61 Cellinx Systems Inc. +000A62 Crinis Networks, Inc. +000A63 DHD GmbH +000A64 Eracom Technologies +000A65 GentechMedia.co.,ltd. +000A66 MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD. +000A67 OngCorp +000A68 SolarFlare Communications, Inc. +000A69 SUNNY bell Technology Co., Ltd. +000A6A SVM Microwaves s.r.o. +000A6B Tadiran Telecom Business Systems LTD +000A6C Walchem Corporation +000A6D EKS Elektronikservice GmbH +000A6E Broadcast Technology Limited +000A6F ZyFLEX Technologies Inc +000A70 MPLS Forum +000A71 Avrio Technologies, Inc +000A72 SimpleTech, Inc. +000A73 Scientific Atlanta +000A74 Manticom Networks Inc. +000A75 Cat Electronics +000A76 Beida Jade Bird Huaguang Technology Co.,Ltd +000A77 Bluewire Technologies LLC +000A78 OLITEC +000A79 corega K.K. +000A7A Kyoritsu Electric Co., Ltd. +000A7B Cornelius Consult +000A7C Tecton Ltd +000A7D Valo, Inc. +000A7E The Advantage Group +000A7F Teradon Industries, Inc +000A80 Telkonet Inc. +000A81 TEIMA Audiotex S.L. +000A82 TATSUTA SYSTEM ELECTRONICS CO.,LTD. +000A83 SALTO SYSTEMS S.L. +000A84 Rainsun Enterprise Co., Ltd. +000A85 PLAT'C2,Inc +000A86 Lenze +000A87 Integrated Micromachines Inc. +000A88 InCypher S.A. +000A89 Creval Systems, Inc. +000A8A Cisco Systems +000A8B Cisco Systems +000A8C Guardware Systems Ltd. +000A8D EUROTHERM LIMITED +000A8E Invacom Ltd +000A8F Aska International Inc. +000A90 Bayside Interactive, Inc. +000A91 HemoCue AB +000A92 Presonus Corporation +000A93 W2 Networks, Inc. +000A94 ShangHai cellink CO., LTD +000A95 Apple Computer, Inc. +000A96 MEWTEL TECHNOLOGY INC. +000A97 SONICblue, Inc. +000A98 M+F Gwinner GmbH & Co +000A99 Dataradio Inc. +000A9A Aiptek International Inc +000A9B Towa Meccs Corporation +000A9C Server Technology, Inc. +000A9D King Young Technology Co. Ltd. +000A9E BroadWeb Corportation +000A9F Pannaway Technologies, Inc. +000AA0 Cedar Point Communications +000AA1 V V S Limited +000AA2 SYSTEK INC. +000AA3 SHIMAFUJI ELECTRIC CO.,LTD. +000AA4 SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD +000AA5 MAXLINK INDUSTRIES LIMITED +000AA6 Hochiki Corporation +000AA7 FEI Company +000AA8 ePipe Pty. Ltd. +000AA9 Brooks Automation GmbH +000AAA AltiGen Communications Inc. +000AAB TOYOTA MACS, INC. +000AAC TerraTec Electronic GmbH +000AAD Stargames Corporation +000AAE Rosemount Process Analytical +000AAF Pipal Systems +000AB0 LOYTEC electronics GmbH +000AB1 GENETEC Corporation +000AB2 Fresnel Wireless Systems +000AB3 Fa. GIRA +000AB4 ETIC Telecommunications +000AB5 Digital Electronic Network +000AB6 COMPUNETIX, INC +000AB7 Cisco Systems +000AB8 Cisco Systems +000AB9 Astera Technologies Corp. +000ABA Arcon Technology Limited +000ABB Taiwan Secom Co,. Ltd +000ABC Seabridge Ltd. +000ABD Rupprecht & Patashnick Co. +000ABE OPNET Technologies CO., LTD. +000ABF HIROTA SS +000AC0 Fuyoh Video Industry CO., LTD. +000AC1 Futuretel +000AC2 FiberHome Telecommunication Technologies CO.,LTD +000AC3 eM Technics Co., Ltd. +000AC4 Daewoo Teletech Co., Ltd +000AC5 Color Kinetics +000AC7 Unication Group +000AC8 ZPSYS CO.,LTD. (Planning&Management) +000AC9 Zambeel Inc +000ACA YOKOYAMA SHOKAI CO.,Ltd. +000ACB XPAK MSA Group +000ACC Winnow Networks, Inc. +000ACD Sunrich Technology Limited +000ACE RADIANTECH, INC. +000ACF PROVIDEO Multimedia Co. Ltd. +000AD0 Niigata Develoment Center, F.I.T. Co., Ltd. +000AD1 MWS +000AD2 JEPICO Corporation +000AD3 INITECH Co., Ltd +000AD4 CoreBell Systems Inc. +000AD5 Brainchild Electronic Co., Ltd. +000AD6 BeamReach Networks +000AD8 IPCserv Technology Corp. +000AD9 Sony Ericsson Mobile Communications AB +000ADB SkyPilot Network, Inc +000ADC RuggedCom Inc. +000ADD InSciTek Microsystems, Inc. +000ADE Happy Communication Co., Ltd. +000ADF Gennum Corporation +000AE0 Fujitsu Softek +000AE1 EG Technology +000AE2 Binatone Electronics International, Ltd +000AE3 YANG MEI TECHNOLOGY CO., LTD +000AE4 Wistron Corp. +000AE5 ScottCare Corporation +000AE6 Elitegroup Computer System Co. (ECS) +000AE7 ELIOP S.A. +000AE8 Cathay Roxus Information Technology Co. LTD +000AE9 AirVast Technology Inc. +000AEA ADAM ELEKTRONIK LTD.STI. +000AEB Shenzhen Tp-link Technology Co; Ltd. +000AEC Koatsu Gas Kogyo Co., Ltd. +000AED HARTING Vending G.m.b.H. & CO KG +000AEE GCD Hard- & Software GmbH +000AEF OTRUM ASA +000AF0 SHIN-OH ELECTRONICS CO., LTD. R&D +000AF1 Clarity Design, Inc. +000AF2 NeoAxiom Corp. +000AF3 Cisco Systems +000AF4 Cisco Systems +000AF5 Airgo Networks, Inc. +000AF6 Computer Process Controls +000AF7 Broadcom Corp. +000AF8 American Telecare Inc. +000AF9 HiConnect, Inc. +000AFA Traverse Technologies Australia +000AFB Ambri Limited +000AFC Core Tec Communications, LLC +000AFD Viking Electronic Services +000AFE NovaPal Ltd +000AFF Kilchherr Elektronik AG +000B00 FUJIAN START COMPUTER EQUIPMENT CO.,LTD +000B01 DAIICHI ELECTRONICS CO., LTD. +000B02 Dallmeier electronic +000B03 Taekwang Industrial Co., Ltd +000B04 Volktek Corporation +000B05 Pacific Broadband Networks +000B06 Motorola BCS +000B07 Voxpath Networks +000B08 Pillar Data Systems +000B09 Ifoundry Systems Singapore +000B0A dBm Optics +000B0B Corrent Corporation +000B0C Agile Systems Inc. +000B0D Air2U, Inc. +000B0E Trapeze Networks +000B0F Nyquist Industrial Control BV +000B10 11wave Technonlogy Co.,Ltd +000B11 HIMEJI ABC TRADING CO.,LTD. +000B12 NURI Telecom Co., Ltd. +000B13 ZETRON INC +000B14 ViewSonic Corporation +000B15 Platypus Technology +000B16 Communication Machinery Corporation +000B17 MKS Instruments +000B19 Vernier Networks, Inc. +000B1A Teltone Corporation +000B1B Systronix, Inc. +000B1D LayerZero Power Systems, Inc. +000B1E KAPPA opto-electronics GmbH +000B1F I CON Computer Co. +000B20 Hirata corporation +000B21 G-Star Communications Inc. +000B22 Environmental Systems and Services +000B23 Siemens Subscriber Networks +000B24 AirLogic +000B25 Aeluros +000B26 Wetek Corporation +000B27 Scion Corporation +000B28 Quatech Inc. +000B29 LG Industrial Systems Co.,Ltd. +000B2A HOWTEL Co., Ltd. +000B2B HOSTNET CORPORATION +000B2C Eiki Industrial Co. Ltd. +000B2D Danfoss Inc. +000B2E Cal-Comp Electronics (Thailand) Public Company Limited Taipe +000B2F bplan GmbH +000B30 Beijing Gongye Science & Technology Co.,Ltd +000B31 Yantai ZhiYang Scientific and technology industry CO., LTD +000B32 VORMETRIC, INC. +000B33 Vivato +000B34 ShangHai Broadband Technologies CO.LTD +000B35 Quad Bit System co., Ltd. +000B36 Productivity Systems, Inc. +000B37 MANUFACTURE DES MONTRES ROLEX SA +000B38 Knuerr AG +000B39 Keisoku Giken Co.,Ltd. +000B3A Fortel DTV, Inc. +000B3B devolo AG +000B3C Cygnal Integrated Products, Inc. +000B3D CONTAL OK Ltd. +000B3E BittWare, Inc +000B3F Anthology Solutions Inc. +000B40 OpNext Inc. +000B41 Ing. Buero Dr. Beutlhauser +000B42 commax Co., Ltd. +000B43 Microscan Systems, Inc. +000B44 Concord IDea Corp. +000B45 Cisco +000B46 Cisco +000B47 Advanced Energy +000B48 sofrel +000B49 RF-Link System Inc. +000B4A Visimetrics (UK) Ltd +000B4B VISIOWAVE SA +000B4C Clarion (M) Sdn Bhd +000B4D Emuzed +000B4E VertexRSI Antenna Products Division +000B4F Verifone, INC. +000B50 Oxygnet +000B51 Micetek International Inc. +000B52 JOYMAX ELECTRONICS CORP. +000B53 INITIUM Co., Ltd. +000B54 BiTMICRO Networks, Inc. +000B55 ADInstruments +000B56 Cybernetics +000B57 Silicon Laboratories +000B58 Astronautics C.A LTD +000B59 ScriptPro, LLC +000B5A HyperEdge +000B5B Rincon Research Corporation +000B5C Newtech Co.,Ltd +000B5D FUJITSU LIMITED +000B5E ATMAVA Ltd +000B5F Cisco Systems +000B60 Cisco Systems +000B61 Friedrich Ltze GmbH &Co. +000B62 Ingenieurbro Ingo Mohnen +000B63 Kaleidescape +000B64 Kieback & Peter GmbH & Co KG +000B65 Sy.A.C. srl +000B66 Teralink Communications +000B67 Topview Technology Corporation +000B68 Addvalue Communications Pte Ltd +000B69 Franke Finland Oy +000B6A Asiarock Incorporation +000B6B Wistron Neweb Corp. +000B6C Sychip Inc. +000B6D SOLECTRON JAPAN NAKANIIDA +000B6E Neff Instrument Corp. +000B6F Media Streaming Networks Inc +000B70 Load Technology, Inc. +000B71 Litchfield Communications Inc. +000B72 Lawo AG +000B73 Kodeos Communications +000B74 Kingwave Technology Co., Ltd. +000B75 Iosoft Ltd. +000B76 ET&T Co. Ltd. +000B77 Cogent Systems, Inc. +000B78 TAIFATECH INC. +000B79 X-COM, Inc. +000B7A Wave Science Inc. +000B7B Test-Um Inc. +000B7C Telex Communications +000B7D SOLOMON EXTREME INTERNATIONAL LTD. +000B7E SAGINOMIYA Seisakusho Inc. +000B7F OmniWerks +000B81 Kaparel Corporation +000B82 Grandstream Networks, Inc. +000B83 DATAWATT B.V. +000B84 BODET +000B85 Airespace, Inc. +000B86 Aruba Networks +000B87 American Reliance Inc. +000B88 Vidisco ltd. +000B89 Top Global Technology, Ltd. +000B8A MITEQ Inc. +000B8B KERAJET, S.A. +000B8C flextronics israel +000B8D Avvio Networks +000B8E Ascent Corporation +000B8F AKITA ELECTRONICS SYSTEMS CO.,LTD. +000B90 Covaro Networks, Inc. +000B91 Aglaia Gesellschaft fr Bildverarbeitung und Kommunikation m +000B92 Ascom Danmark A/S +000B93 Barmag Electronic +000B94 Digital Monitoring Products, Inc. +000B95 eBet Gaming Systems Pty Ltd +000B96 Innotrac Diagnostics Oy +000B97 Matsushita Electric Industrial Co.,Ltd. +000B98 NiceTechVision +000B99 SensAble Technologies, Inc. +000B9A Shanghai Ulink Telecom Equipment Co. Ltd. +000B9B Sirius System Co, Ltd. +000B9C TriBeam Technologies, Inc. +000B9D TwinMOS Technologies Inc. +000B9E Yasing Technology Corp. +000B9F Neue ELSA GmbH +000BA0 T&L Information Inc. +000BA1 SYSCOM Ltd. +000BA2 Sumitomo Electric Networks, Inc +000BA3 Siemens AG, I&S +000BA4 Shiron Satellite Communications Ltd. (1996) +000BA5 Quasar Cipta Mandiri, PT +000BA6 Miyakawa Electric Works Ltd. +000BA7 Maranti Networks +000BA8 HANBACK ELECTRONICS CO., LTD. +000BA9 CloudShield Technologies, Inc. +000BAA Aiphone co.,Ltd +000BAB Advantech Technology (CHINA) Co., Ltd. +000BAC 3Com Europe Ltd. +000BAD PC-PoS Inc. +000BAE Vitals System Inc. +000BAF WOOJU COMMUNICATIONS Co,.Ltd +000BB0 Sysnet Telematica srl +000BB1 Super Star Technology Co., Ltd. +000BB2 SMALLBIG TECHNOLOGY +000BB3 RiT technologies Ltd. +000BB4 RDC Semiconductor Inc., +000BB5 nStor Technologies, Inc. +000BB6 Mototech Inc. +000BB7 Micro Systems Co.,Ltd. +000BB8 Kihoku Electronic Co. +000BB9 Imsys AB +000BBA Harmonic Broadband Access Networks +000BBB Etin Systems Co., Ltd +000BBC En Garde Systems, Inc. +000BBD Connexionz Limited +000BBE Cisco Systems +000BBF Cisco Systems +000BC0 China IWNComm Co., Ltd. +000BC1 Bay Microsystems, Inc. +000BC2 Corinex Communication Corp. +000BC3 Multiplex, Inc. +000BC4 BIOTRONIK GmbH & Co +000BC5 SMC Networks, Inc. +000BC6 ISAC, Inc. +000BC7 ICET S.p.A. +000BC8 AirFlow Networks +000BC9 Electroline Equipment +000BCA DATAVAN International Corporation +000BCB Fagor Automation , S. Coop +000BCC JUSAN, S.A. +000BCD Compaq (HP) +000BCE Free2move AB +000BCF AGFA NDT INC. +000BD0 XiMeta Technology Americas Inc. +000BD1 Aeronix, Inc. +000BD2 Remopro Technology Inc. +000BD3 cd3o +000BD4 Beijing Wise Technology & Science Development Co.Ltd +000BD5 Nvergence, Inc. +000BD6 Paxton Access Ltd +000BD7 MBB Gelma GmbH +000BD8 Industrial Scientific Corp. +000BD9 General Hydrogen +000BDA EyeCross Co.,Inc. +000BDB Dell ESG PCBA Test +000BDC AKCP +000BDD TOHOKU RICOH Co., LTD. +000BDF Shenzhen RouterD Networks Limited +000BE0 SercoNet Ltd. +000BE2 Lumenera Corporation +000BE3 Key Stream Co., Ltd. +000BE4 Hosiden Corporation +000BE5 HIMS Korea Co., Ltd. +000BE6 Datel Electronics +000BE7 COMFLUX TECHNOLOGY INC. +000BE8 AOIP +000BEA Zultys Technologies +000BEB Systegra AG +000BEC NIPPON ELECTRIC INSTRUMENT, INC. +000BED ELM Inc. +000BEE inc.jet, Incorporated +000BEF Code Corporation +000BF0 MoTEX Products Co., Ltd. +000BF1 LAP Laser Applikations +000BF2 Chih-Kan Technology Co., Ltd. +000BF3 BAE SYSTEMS +000BF5 Shanghai Sibo Telecom Technology Co.,Ltd +000BF6 Nitgen Co., Ltd +000BF7 NIDEK CO.,LTD +000BF8 Infinera +000BF9 Gemstone communications, Inc. +000BFB D-NET International Corporation +000BFC Cisco Systems +000BFD Cisco Systems +000BFE CASTEL Broadband Limited +000BFF Berkeley Camera Engineering +000C00 BEB Industrie-Elektronik AG +000C01 Abatron AG +000C02 ABB Oy +000C03 HDMI Licensing, LLC +000C04 Tecnova +000C05 RPA Reserch Co., Ltd. +000C06 Nixvue Systems Pte Ltd +000C07 Iftest AG +000C08 HUMEX Technologies Corp. +000C09 Hitachi IE Systems Co., Ltd +000C0A Guangdong Province Electronic Technology Research Institute +000C0B Broadbus Technologies +000C0C APPRO TECHNOLOGY INC. +000C0D Communications & Power Industries / Satcom Division +000C0E XtremeSpectrum, Inc. +000C0F Techno-One Co., Ltd +000C10 PNI Corporation +000C11 NIPPON DEMPA CO.,LTD. +000C12 Micro-Optronic-Messtechnik GmbH +000C13 MediaQ +000C14 Diagnostic Instruments, Inc. +000C15 CyberPower Systems, Inc. +000C16 Concorde Microsystems Inc. +000C17 AJA Video Systems Inc +000C18 Zenisu Keisoku Inc. +000C19 Telio Communications GmbH +000C1A Quest Technical Solutions Inc. +000C1B ORACOM Co, Ltd. +000C1C MicroWeb Co., Ltd. +000C1D Mettler & Fuchs AG +000C1E Global Cache +000C1F Glimmerglass Networks +000C20 Fi WIn, Inc. +000C21 Faculty of Science and Technology, Keio University +000C22 Double D Electronics Ltd +000C23 Beijing Lanchuan Tech. Co., Ltd. +000C25 Allied Telesyn Networks +000C26 Weintek Labs. Inc. +000C27 Sammy Corporation +000C28 RIFATRON +000C29 VMware, Inc. +000C2A OCTTEL Communication Co., Ltd. +000C2B ELIAS Technology, Inc. +000C2C Enwiser Inc. +000C2D FullWave Technology Co., Ltd. +000C2E Openet information technology(shenzhen) Co., Ltd. +000C2F SeorimTechnology Co.,Ltd. +000C30 Cisco +000C31 Cisco +000C32 Avionic Design Development GmbH +000C33 Compucase Enterprise Co. Ltd. +000C34 Vixen Co., Ltd. +000C35 KaVo Dental GmbH & Co. KG +000C36 SHARP TAKAYA ELECTRONICS INDUSTRY CO.,LTD. +000C37 Geomation, Inc. +000C38 TelcoBridges Inc. +000C39 Sentinel Wireless Inc. +000C3A Oxance +000C3B Orion Electric Co., Ltd. +000C3C MediaChorus, Inc. +000C3D Glsystech Co., Ltd. +000C3E Crest Audio +000C3F Cogent Defence & Security Networks, +000C40 Altech Controls +000C41 The Linksys Group, Inc. +000C42 Routerboard.com +000C43 Ralink Technology, Corp. +000C44 Automated Interfaces, Inc. +000C45 Animation Technologies Inc. +000C46 Allied Telesyn Inc. +000C47 SK Teletech(R&D Planning Team) +000C48 QoStek Corporation +000C49 Dangaard Telecom RTC Division A/S +000C4A Cygnus Microsystems Private Limited +000C4B Cheops Elektronik +000C4C Arcor AG&Co. +000C4D ACRA CONTROL +000C4E Winbest Technology CO,LT +000C4F UDTech Japan Corporation +000C50 Seagate Technology +000C51 Scientific Technologies Inc. +000C52 Roll Systems Inc. +000C54 Pedestal Networks, Inc +000C55 Microlink Communications Inc. +000C56 Megatel Computer (1986) Corp. +000C57 MACKIE Engineering Services Belgium BVBA +000C58 M&S Systems +000C59 Indyme Electronics, Inc. +000C5A IBSmm Industrieelektronik Multimedia +000C5B HANWANG TECHNOLOGY CO.,LTD +000C5C GTN Systems B.V. +000C5D CHIC TECHNOLOGY (CHINA) CORP. +000C5F Avtec, Inc. +000C60 ACM Systems +000C61 AC Tech corporation DBA Advanced Digital +000C62 ABB Automation Technology Products AB, Control +000C63 Zenith Electronics Corporation +000C64 X2 MSA Group +000C65 Sunin Telecom +000C66 Pronto Networks Inc +000C67 OYO ELECTRIC CO.,LTD +000C68 Oasis Semiconductor, Inc. +000C69 National Radio Astronomy Observatory +000C6A MBARI +000C6B Kurz Industrie-Elektronik GmbH +000C6C Elgato Systems LLC +000C6D BOC Edwards +000C6E ASUSTEK COMPUTER INC. +000C6F Amtek system co.,LTD. +000C70 ACC GmbH +000C71 Wybron, Inc +000C72 Tempearl Industrial Co., Ltd. +000C73 TELSON ELECTRONICS CO., LTD +000C74 RIVERTEC CORPORATION +000C75 Oriental integrated electronics. LTD +000C76 MICRO-STAR INTERNATIONAL CO., LTD. +000C77 Life Racing Ltd +000C78 In-Tech Electronics Limited +000C79 Extel Communications P/L +000C7A DaTARIUS Technologies GmbH +000C7B ALPHA PROJECT Co.,Ltd. +000C7C Internet Information Image Inc. +000C7D TEIKOKU ELECTRIC MFG. CO., LTD +000C7E Tellium Incorporated +000C7F synertronixx GmbH +000C80 Opelcomm Inc. +000C81 Nulec Industries Pty Ltd +000C82 NETWORK TECHNOLOGIES INC +000C83 Logical Solutions +000C84 Eazix, Inc. +000C85 Cisco Systems +000C86 Cisco Systems +000C87 ATI +000C88 Apache Micro Peripherals, Inc. +000C89 AC Electric Vehicles, Ltd. +000C8A Bose Corporation +000C8B Connect Tech Inc +000C8C KODICOM CO.,LTD. +000C8D MATRIX VISION GmbH +000C8E Mentor Engineering Inc +000C8F Nergal s.r.l. +000C90 Octasic Inc. +000C91 Riverhead Networks Inc. +000C92 WolfVision Gmbh +000C93 Xeline Co., Ltd. +000C94 United Electronic Industries, Inc. +000C95 PrimeNet +000C96 OQO, Inc. +000C97 NV ADB TTV Technologies SA +000C98 LETEK Communications Inc. +000C99 HITEL LINK Co.,Ltd +000C9A Hitech Electronics Corp. +000C9B EE Solutions, Inc +000C9C Chongho information & communications +000C9D AirWalk Communications, Inc. +000C9E MemoryLink Corp. +000C9F NKE Corporation +000CA0 StorCase Technology, Inc. +000CA1 SIGMACOM Co., LTD. +000CA2 Scopus Network Technologies Ltd +000CA3 Rancho Technology, Inc. +000CA4 Prompttec Product Management GmbH +000CA5 Naman NZ LTd +000CA6 Mintera Corporation +000CA7 Metro (Suzhou) Technologies Co., Ltd. +000CA8 Garuda Networks Corporation +000CA9 Ebtron Inc. +000CAA Cubic Transportation Systems Inc +000CAB COMMEND International +000CAC Citizen Watch Co., Ltd. +000CAD BTU International +000CAE Ailocom Oy +000CAF TRI TERM CO.,LTD. +000CB0 Star Semiconductor Corporation +000CB1 Salland Engineering (Europe) BV +000CB2 safei Co., Ltd. +000CB3 ROUND Co.,Ltd. +000CB4 Propagate Networks, Inc +000CB5 Premier Technolgies, Inc +000CB6 NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD +000CB7 Nanjing Huazhuo Electronics Co., Ltd. +000CB8 MEDION AG +000CB9 LEA +000CBA Jamex +000CBB ISKRAEMECO +000CBC Iscutum +000CBD Interface Masters, Inc +000CBF Holy Stone Ent. Co., Ltd. +000CC0 Genera Oy +000CC1 Cooper Industries Inc. +000CC3 BeWAN systems +000CC4 Tiptel AG +000CC5 Nextlink Co., Ltd. +000CC6 Ka-Ro electronics GmbH +000CC7 Intelligent Computer Solutions Inc. +000CC8 Xytronix Research & Design, Inc. +000CC9 ILWOO DATA & TECHNOLOGY CO.,LTD +000CCA Hitachi Global Storage Technologies +000CCB Design Combus Ltd +000CCC Bluesoft Ltd. +000CCD IEC - TC57 +000CCE Cisco Systems +000CCF Cisco Systems +000CD0 Symetrix +000CD1 SFOM Technology Corp. +000CD2 Schaffner EMV AG +000CD3 Prettl Elektronik Radeberg GmbH +000CD4 Positron Public Safety Systems inc. +000CD5 Passave Inc. +000CD6 PARTNER TECH +000CD7 Nallatech Ltd +000CD8 M. K. Juchheim GmbH & Co +000CD9 Itcare Co., Ltd +000CDA FreeHand Systems, Inc. +000CDB Foundry Networks +000CDC BECS Technology, Inc +000CDD AOS Technologies AG +000CDE ABB STOTZ-KONTAKT GmbH +000CDF PULNiX America, Inc +000CE0 Trek Diagnostics Inc. +000CE1 The Open Group +000CE2 Rolls-Royce +000CE3 Option International N.V. +000CE4 NeuroCom International, Inc. +000CE5 Motorola BCS +000CE6 Meru Networks Inc +000CE7 MediaTek Inc. +000CE8 GuangZhou AnJuBao Co., Ltd +000CE9 BLOOMBERG L.P. +000CEA aphona Kommunikationssysteme +000CEB CNMP Networks, Inc. +000CEC Spectracom Corp. +000CED Real Digital Media +000CEE Q-Networks +000CEF Open Networks Engineering Ltd +000CF0 M & N GmbH +000CF1 Intel Corporation +000CF2 GAMESA ELICA +000CF3 CALL IMAGE SA +000CF4 AKATSUKI ELECTRIC MFG.CO.,LTD. +000CF5 InfoExpress +000CF6 Sitecom Europe BV +000CF7 Nortel Networks +000CF8 Nortel Networks +000CF9 ITT Flygt AB +000CFA Digital Systems Corp +000CFB Korea Network Systems +000CFC S2io Technologies Corp +000CFE Grand Electronic Co., Ltd +000CFF MRO-TEK LIMITED +000D00 Seaway Networks Inc. +000D01 P&E Microcomputer Systems, Inc. +000D02 NEC Access Technica,Ltd +000D03 Matrics, Inc. +000D04 Foxboro Eckardt Development GmbH +000D05 cybernet manufacturing inc. +000D06 Compulogic Limited +000D07 Calrec Audio Ltd +000D08 AboveCable, Inc. +000D09 Yuehua(Zhuhai) Electronic CO. LTD +000D0A Projectiondesign as +000D0B Melco Inc. +000D0C MDI Security Systems +000D0D ITSupported, LLC +000D0E Inqnet Systems, Inc. +000D0F Finlux Ltd +000D10 Embedtronics Oy +000D11 DENTSPLY - Gendex +000D12 AXELL Corporation +000D13 Wilhelm Rutenbeck GmbH&Co. +000D14 Vtech Innovation LP dba Advanced American Telephones +000D15 Voipac s.r.o. +000D16 UHS Systems Pty Ltd +000D17 Turbo Networks Co.Ltd +000D18 Sunitec Enterprise Co., Ltd. +000D19 ROBE Show lighting +000D1A Mustek System Inc. +000D1B Kyoto Electronics Manufacturing Co., Ltd. +000D1C I2E TELECOM +000D1D HIGH-TEK HARNESS ENT. CO., LTD. +000D1E Control Techniques +000D1F AV Digital +000D20 ASAHIKASEI TECHNOSYSTEM CO.,LTD. +000D21 WISCORE Inc. +000D22 Unitronics +000D23 Smart Solution, Inc +000D24 SENTEC E&E CO., LTD. +000D25 SANDEN CORPORATION +000D26 Primagraphics Limited +000D27 MICROPLEX Printware AG +000D28 Cisco +000D29 Cisco +000D2A Scanmatic AS +000D2B Racal Instruments +000D2C Patapsco Designs Ltd +000D2D NCT Deutschland GmbH +000D2E Matsushita Avionics Systems Corporation +000D2F AIN Comm.Tech.Co., LTD +000D30 IceFyre Semiconductor +000D31 Compellent Technologies, Inc. +000D32 DispenseSource, Inc. +000D33 Prediwave Corp. +000D34 Shell International Exploration and Production, Inc. +000D35 PAC International Ltd +000D36 Wu Han Routon Electronic Co., Ltd +000D37 WIPLUG +000D38 NISSIN INC. +000D39 Network Electronics +000D3A Microsoft Corp. +000D3B Microelectronics Technology Inc. +000D3C i.Tech Dynamic Ltd +000D3E APLUX Communications Ltd. +000D3F VXI Technology +000D40 Verint Loronix Video Solutions +000D41 Siemens AG ICM MP UC RD IT KLF1 +000D42 Newbest Development Limited +000D43 DRS Tactical Systems Inc. +000D45 Tottori SANYO Electric Co., Ltd. +000D46 Eurotherm Drives, Ltd. +000D47 Collex +000D48 AEWIN Technologies Co., Ltd. +000D49 Triton Systems of Delaware, Inc. +000D4A Steag ETA-Optik +000D4B Roku, LLC +000D4C Outline Electronics Ltd. +000D4D Ninelanes +000D4E NDR Co.,LTD. +000D4F Kenwood Corporation +000D50 Galazar Networks +000D51 DIVR Systems, Inc. +000D52 Comart system +000D53 Beijing 5w Communication Corp. +000D54 3Com Europe Ltd +000D55 SANYCOM Technology Co.,Ltd +000D56 Dell PCBA Test +000D57 Fujitsu I-Network Systems Limited. +000D59 Amity Systems, Inc. +000D5A Tiesse SpA +000D5B Smart Empire Investments Limited +000D5C Robert Bosch GmbH, VT-ATMO +000D5D Raritan Computer, Inc +000D5E NEC CustomTechnica, Ltd. +000D5F Minds Inc +000D60 IBM Corporation +000D61 Giga-Byte Technology Co., Ltd. +000D62 Funkwerk Dabendorf GmbH +000D63 DENT Instruments, Inc. +000D64 COMAG Handels AG +000D65 Cisco Systems +000D66 Cisco Systems +000D67 BelAir Networks Inc. +000D68 Vinci Systems, Inc. +000D69 TMT&D Corporation +000D6A Redwood Technologies LTD +000D6B Mita-Teknik A/S +000D6C M-Audio +000D6D K-Tech Devices Corp. +000D6E K-Patents Oy +000D6F Ember Corporation +000D70 Datamax Corporation +000D71 boca systems +000D72 2Wire, Inc +000D73 Technical Support, Inc. +000D74 Sand Network Systems, Inc. +000D75 Kobian Pte Ltd - Taiwan Branch +000D76 Hokuto Denshi Co,. Ltd. +000D77 FalconStor Software +000D78 Engineering & Security +000D79 Dynamic Solutions Co,.Ltd. +000D7A DiGATTO Asia Pacific Pte Ltd +000D7B Consensys Computers Inc. +000D7C Codian Ltd +000D7D Afco Systems +000D7E Axiowave Networks, Inc. +000D7F MIDAS COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch) +000D80 Online Development Inc +000D81 Pepperl+Fuchs GmbH +000D82 PHS srl +000D83 Sanmina-SCI Hungary Ltd. +000D84 Seodu Inchip, Inc. +000D85 Tapwave, Inc. +000D86 Huber + Suhner AG +000D87 Elitegroup Computer System Co. (ECS) +000D88 D-Link Corporation +000D89 Bils Technology Inc +000D8A Winners Electronics Co., Ltd. +000D8B T&D Corporation +000D8C Shanghai Wedone Digital Ltd. CO. +000D8D ProLinx Communication Gateways, Inc. +000D8E Koden Electronics Co., Ltd. +000D8F King Tsushin Kogyo Co., LTD. +000D90 Factum Electronics AB +000D91 Eclipse (HQ Espana) S.L. +000D92 Arima Communication Corporation +000D93 Apple Computer +000D94 AFAR Communications,Inc +000D95 Opti-cell, Inc. +000D96 Vtera Technology Inc. +000D97 Tropos Networks, Inc. +000D98 S.W.A.C. Schmitt-Walter Automation Consult GmbH +000D99 Orbital Sciences Corp.; Launch Systems Group +000D9A INFOTEC LTD +000D9C Elan GmbH & Co KG +000D9D Hewlett Packard +000D9E TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd. +000D9F RF Micro Devices +000DA0 NEDAP N.V. +000DA1 MIRAE ITS Co.,LTD. +000DA2 Infrant Technologies, Inc. +000DA3 Emerging Technologies Limited +000DA4 DOSCH & AMAND SYSTEMS AG +000DA5 Fabric7 Systems, Inc +000DA6 Universal Switching Corporation +000DA8 Teletronics Technology Corporation +000DA9 T.E.A.M. S.L. +000DAA S.A.Tehnology co.,Ltd. +000DAB Parker Hannifin GmbH Electromechanical Division Europe +000DAC Japan CBM Corporation +000DAD Dataprobe Inc +000DAE SAMSUNG HEAVY INDUSTRIES CO., LTD. +000DAF Plexus Corp (UK) Ltd +000DB0 Olym-tech Co.,Ltd. +000DB1 Japan Network Service Co., Ltd. +000DB2 Ammasso, Inc. +000DB3 SDO Communication Corperation +000DB4 NETASQ +000DB5 GLOBALSAT TECHNOLOGY CORPORATION +000DB6 Teknovus, Inc. +000DB7 SANKO ELECTRIC CO,.LTD +000DB8 SCHILLER AG +000DB9 PC Engines GmbH +000DBA Oc Document Technologies GmbH +000DBB Nippon Dentsu Co.,Ltd. +000DBC Cisco Systems +000DBD Cisco Systems +000DBE Bel Fuse Europe Ltd.,UK +000DBF TekTone Sound & Signal Mfg., Inc. +000DC0 Spagat AS +000DC1 SafeWeb Inc +000DC3 First Communication, Inc. +000DC4 Emcore Corporation +000DC5 EchoStar International Corporation +000DC6 DigiRose Technology Co., Ltd. +000DC7 COSMIC ENGINEERING INC. +000DC8 AirMagnet, Inc +000DC9 THALES Elektronik Systeme GmbH +000DCA Tait Electronics +000DCB Petcomkorea Co., Ltd. +000DCC NEOSMART Corp. +000DCD GROUPE TXCOM +000DCE Dynavac Technology Pte Ltd +000DCF Cidra Corp. +000DD0 TetraTec Instruments GmbH +000DD1 Stryker Corporation +000DD2 Simrad Optronics ASA +000DD3 SAMWOO Telecommunication Co.,Ltd. +000DD4 Revivio Inc. +000DD5 O'RITE TECHNOLOGY CO.,LTD +000DD6 ITI LTD +000DD7 Bright +000DD8 BBN +000DD9 Anton Paar GmbH +000DDA ALLIED TELESIS K.K. +000DDB AIRWAVE TECHNOLOGIES INC. +000DDC VAC +000DDD PROFLO TELRA ELEKTRONK SANAY VE TCARET A.. +000DDE Joyteck Co., Ltd. +000DDF Japan Image & Network Inc. +000DE0 ICPDAS Co.,LTD +000DE1 Control Products, Inc. +000DE2 CMZ Sistemi Elettronici +000DE3 AT Sweden AB +000DE4 DIGINICS, Inc. +000DE5 Samsung Thales +000DE6 YOUNGBO ENGINEERING CO.,LTD +000DE7 Snap-on OEM Group +000DE8 Nasaco Electronics Pte. Ltd +000DE9 Napatech Aps +000DEA Kingtel Telecommunication Corp. +000DEB CompXs Limited +000DEC Cisco Systems +000DED Cisco Systems +000DEF Soc. Coop. Bilanciai +000DF0 QCOM TECHNOLOGY INC. +000DF1 IONIX INC. +000DF3 Asmax Solutions +000DF4 Watertek Co. +000DF5 Teletronics International Inc. +000DF6 Technology Thesaurus Corp. +000DF7 Space Dynamics Lab +000DF8 ORGA Kartensysteme GmbH +000DF9 NDS Limited +000DFA Micro Control Systems Ltd. +000DFB Komax AG +000DFC ITFOR Inc. resarch and development +000DFD Huges Hi-Tech Inc., +000DFE Hauppauge Computer Works, Inc. +000DFF CHENMING MOLD INDUSTRY CORP. +000E01 ASIP Technologies Inc. +000E02 Advantech AMT Inc. +000E03 Aarohi Communications, Inc. +000E05 WIRELESS MATRIX CORP. +000E06 Team Simoco Ltd +000E07 Sony Ericsson Mobile Communications AB +000E08 Sipura Technology, Inc. +000E09 Shenzhen Coship Software Co.,LTD. +000E0B Netac Technology Co., Ltd. +000E0C Intel Corporation +000E0D HESCH Schrder GmbH +000E0E ESA elettronica S.P.A. +000E0F ERMME +000E11 BDT Bro- und Datentechnik GmbH & Co. KG +000E12 Adaptive Micro Systems Inc. +000E13 Accu-Sort Systems inc. +000E14 Visionary Solutions, Inc. +000E15 Tadlys LTD +000E16 SouthWing +000E18 MyA Technology +000E19 LogicaCMG Pty Ltd +000E1A JPS Communications +000E1B IAV GmbH +000E1C Hach Company +000E1F TCL Networks Equipment Co., Ltd. +000E20 PalmSource, Inc. +000E21 MTU Friedrichshafen GmbH +000E23 Incipient, Inc. +000E25 Hannae Technology Co., Ltd +000E26 Gincom Technology Corp. +000E27 Crere Networks, Inc. +000E28 Dynamic Ratings P/L +000E29 Shester Communications Inc +000E2B Safari Technologies +000E2C Netcodec co. +000E2D Hyundai Digital Technology Co.,Ltd. +000E2E Edimax Technology Co., Ltd. +000E2F Disetronic Medical Systems AG +000E30 AERAS Networks, Inc. +000E31 Olympus BioSystems GmbH +000E32 Kontron Medical +000E33 Shuko Electronics Co.,Ltd +000E34 NexGen City, LP +000E35 Intel Corp +000E36 HEINESYS, Inc. +000E37 Harms & Wende GmbH & Co.KG +000E38 Cisco Systems +000E39 Cisco Systems +000E3A Cirrus Logic +000E3B Hawking Technologies, Inc. +000E3C TransAct Technoloiges Inc. +000E3D Televic N.V. +000E3E Sun Optronics Inc +000E3F Soronti, Inc. +000E40 Nortel Networks +000E41 NIHON MECHATRONICS CO.,LTD. +000E42 Motic Incoporation Ltd. +000E43 G-Tek Electronics Sdn. Bhd. +000E44 Digital 5, Inc. +000E45 Beijing Newtry Electronic Technology Ltd +000E46 Niigata Seimitsu Co.,Ltd. +000E47 NCI System Co.,Ltd. +000E48 Lipman TransAction Solutions +000E49 Forsway Scandinavia AB +000E4A Changchun Huayu WEBPAD Co.,LTD +000E4B atrium c and i +000E4C Bermai Inc. +000E4D Numesa Inc. +000E4E Waveplus Technology Co., Ltd. +000E4F Trajet GmbH +000E50 Thomson Multi Media +000E51 tecna elettronica srl +000E52 Optium Corporation +000E53 AV TECH CORPORATION +000E54 AlphaCell Wireless Ltd. +000E55 AUVITRAN +000E56 4G Systems GmbH +000E57 Iworld Networking, Inc. +000E58 Rincon Networks +000E5A TELEFIELD inc. +000E5B ParkerVision - Direct2Data +000E5C Motorola BCS +000E5D Com-X Networks +000E5E Beijing Raisecom Science & Technology Development Co.,Ltd +000E5F activ-net GmbH & Co. KG +000E60 360SUN Digital Broadband Corporation +000E61 MICROTROL LIMITED +000E62 Nortel Networks +000E63 Lemke Diagnostics GmbH +000E64 Elphel, Inc +000E65 TransCore +000E66 Hitachi Advanced Digital, Inc. +000E67 Eltis Microelectronics Ltd. +000E68 E-TOP Network Technology Inc. +000E69 China Electric Power Research Institute +000E6A 3COM EUROPE LTD +000E6B Janitza electronics GmbH +000E6C Device Drivers Limited +000E6D Murata Manufacturing Co., Ltd. +000E6E MICRELEC ELECTRONICS S.A +000E6F IRIS Corporation Berhad +000E70 in2 Networks +000E71 Gemstar Technology Development Ltd. +000E72 CTS electronics +000E73 Tpack A/S +000E74 Solar Telecom. Tech +000E75 New York Air Brake Corp. +000E76 GEMSOC INNOVISION INC. +000E77 Decru, Inc. +000E78 Amtelco +000E79 Ample Communications Inc. +000E7B Toshiba +000E7D Electronics Line 3000 Ltd. +000E7E Comprog Oy +000E7F Hewlett Packard +000E81 Instant802 Networks Inc. +000E82 Commtech Wireless +000E83 Cisco Systems +000E84 Cisco Systems +000E85 Catalyst Enterprises, Inc. +000E86 Alcatel North America +000E87 adp Gauselmann GmbH +000E88 VIDEOTRON CORP. +000E89 CLEMATIC +000E8A Avara Technologies Pty. Ltd. +000E8B Astarte Technology Co, Ltd. +000E8C Siemens AG A&D ET +000E8D Systems in Progress Holding GmbH +000E8E SparkLAN Communications, Inc. +000E8F Sercomm Corp. +000E90 PONICO CORP. +000E92 Millinet Co., Ltd. +000E93 Milnio 3 Sistemas Electrnicos, Lda. +000E94 Maas International BV +000E95 Fujiya Denki Seisakusho Co.,Ltd. +000E96 Cubic Defense Applications, Inc. +000E97 Ultracker Technology CO., Inc +000E98 Vitec CC, INC. +000E99 Spectrum Digital, Inc +000E9A BOE TECHNOLOGY GROUP CO.,LTD +000E9C Pemstar +000E9D Video Networks Ltd +000E9E Topfield Co., Ltd +000E9F TEMIC SDS GmbH +000EA0 NetKlass Technology Inc. +000EA1 Formosa Teletek Corporation +000EA2 CyberGuard Corporation +000EA3 CNCR-IT CO.,LTD,HangZhou P.R.CHINA +000EA4 Certance Inc. +000EA5 BLIP Systems +000EA6 ASUSTEK COMPUTER INC. +000EA7 Endace Inc Ltd. +000EA8 United Technologists Europe Limited +000EA9 Shanghai Xun Shi Communications Equipment Ltd. Co. +000EAC MINTRON ENTERPRISE CO., LTD. +000EAD Metanoia Technologies, Inc. +000EAE GAWELL TECHNOLOGIES CORP. +000EAF CASTEL +000EB0 Solutions Radio BV +000EB1 Newcotech,Ltd +000EB2 Micro-Research Finland Oy +000EB3 LeftHand Networks +000EB4 GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD. +000EB5 Ecastle Electronics Co., Ltd. +000EB6 Riverbed Technology, Inc. +000EB7 Knovative, Inc. +000EB8 Iiga co.,Ltd +000EB9 HASHIMOTO Electronics Industry Co.,Ltd. +000EBA HANMI SEMICONDUCTOR CO., LTD. +000EBB Everbee Networks +000EBC Cullmann GmbH +000EBD Burdick, a Quinton Compny +000EBE B&B Electronics Manufacturing Co. +000EC0 Nortel Networks +000EC1 MYNAH Technologies +000EC2 Lowrance Electronics, Inc. +000EC3 Logic Controls, Inc. +000EC4 Iskra Transmission d.d. +000EC6 ASIX ELECTRONICS CORP. +000EC7 Appeal Telecom Co.,Ltd. +000EC8 Zoran Corporation +000EC9 YOKO Technology Corp. +000ECB VineSys Technology +000ECC Tableau +000ECD SKOV A/S +000ECE S.I.T.T.I. S.p.A. +000ECF PROFIBUS Nutzerorganisation e.V. +000ED0 Privaris, Inc. +000ED1 Osaka Micro Computer. +000ED2 Filtronic plc +000ED3 Epicenter, Inc. +000ED4 CRESITT INDUSTRIE +000ED5 COPAN Systems Inc. +000ED6 Cisco Systems +000ED7 Cisco Systems +000ED8 Aktino, Inc. +000ED9 Aksys, Ltd. +000EDA C-TECH UNITED CORP. +000EDB XiNCOM Corp. +000EDC Tellion INC. +000EDD SHURE INCORPORATED +000EDE REMEC, Inc. +000EDF PLX Technology +000EE0 Mcharge +000EE1 ExtremeSpeed Inc. +000EE2 Custom Engineering S.p.A. +000EE3 Chiyu Technology Co.,Ltd +000EE5 bitWallet, Inc. +000EE6 Adimos Systems LTD +000EE7 AAC ELECTRONICS CORP. +000EE8 zioncom +000EE9 WayTech Development, Inc. +000EEA Shadong Luneng Jicheng Electronics,Co.,Ltd +000EEB Sandmartin(zhong shan)Electronics Co.,Ltd +000EEC Orban +000EED Nokia Danmark A/S +000EEE Muco Industrie BV +000EF0 Festo AG & Co. KG +000EF1 EZQUEST INC. +000EF2 World Axle Corporation +000EF3 Smarthome +000EF4 Shenzhen Kasda Digital Technology Co.,Ltd +000EF5 iPAC Technology Co., Ltd. +000EF6 E-TEN Information Systems Co., Ltd. +000EF7 Vulcan Portals Inc +000EF8 SBC ASI +000EF9 REA Elektronik GmbH +000EFA Optoway Technology Incorporation +000EFB Macey Enterprises +000EFC JTAG Technologies B.V. +000EFD FUJI PHOTO OPTICAL CO., LTD. +000EFE EndRun Technologies LLC +000EFF Megasolution,Inc. +000F00 Legra Systems, Inc. +000F01 DIGITALKS INC +000F02 Digicube Technology Co., Ltd +000F03 COM&C CO., LTD +000F04 cim-usa inc +000F05 3B SYSTEM INC. +000F06 Nortel Networks +000F07 Mangrove Systems, Inc. +000F08 Indagon Oy +000F0B Kentima Technologies AB +000F0C SYNCHRONIC ENGINEERING +000F0D Hunt Electronic Co., Ltd. +000F0E WaveSplitter Technologies, Inc. +000F0F Real ID Technology Co., Ltd. +000F10 RDM Corporation +000F11 Prodrive B.V. +000F12 Panasonic AVC Networks Germany GmbH +000F13 Nisca corporation +000F14 Mindray Co., Ltd. +000F15 Kjaerulff1 A/S +000F16 JAY HOW TECHNOLOGY CO., +000F17 Insta Elektro GmbH +000F18 Industrial Control Systems +000F19 Guidant Corporation +000F1A Gaming Support B.V. +000F1B Ego Systems Inc. +000F1C DigitAll World Co., Ltd +000F1D Cosmo Techs Co., Ltd. +000F1E Chengdu KT Electric Co.of High & New Technology +000F1F WW PCBA Test +000F20 Hewlett Packard +000F21 Scientific Atlanta, Inc +000F22 Helius, Inc. +000F23 Cisco Systems +000F24 Cisco Systems +000F25 AimValley B.V. +000F26 WorldAccxx LLC +000F27 TEAL Electronics, Inc. +000F28 Itronix Corporation +000F29 Augmentix Corporation +000F2A Cableware Electronics +000F2B GREENBELL SYSTEMS +000F2C Uplogix, Inc. +000F2D CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP. +000F2E Megapower International Corp. +000F2F W-LINX TECHNOLOGY CO., LTD. +000F30 Raza Microelectronics Inc +000F31 Prosilica +000F32 LuTong Electronic Technology Co.,Ltd +000F33 DUALi Inc. +000F34 Cisco Systems +000F35 Cisco Systems +000F36 Accurate Techhnologies, Inc. +000F37 Xambala Incorporated +000F38 Netstar +000F39 IRIS SENSORS +000F3A HISHARP +000F3B Fuji System Machines Co., Ltd. +000F3C Endeleo Limited +000F3D D-Link Corporation +000F3E CardioNet, Inc +000F3F Big Bear Networks +000F40 Optical Internetworking Forum +000F41 Zipher Ltd +000F42 Xalyo Systems +000F43 Wasabi Systems Inc. +000F44 Tivella Inc. +000F45 Stretch, Inc. +000F46 SINAR AG +000F47 ROBOX SPA +000F48 Polypix Inc. +000F49 Northover Solutions Limited +000F4A Kyushu-kyohan co.,ltd +000F4B Katana Technology +000F4C Elextech INC +000F4D Centrepoint Technologies Inc. +000F4E Cellink +000F4F Cadmus Technology Ltd +000F50 BraddaHead Limited +000F52 YORK Refrigeration, Marine & Controls +000F53 Level 5 Networks, Inc. +000F54 Entrelogic Corporation +000F55 Datawire Communication Networks Inc. +000F56 Continuum Photonics Inc +000F57 CABLELOGIC Co., Ltd. +000F58 Adder Technology Limited +000F59 Phonak Communications AG +000F5A Peribit Networks +000F5B Delta Information Systems, Inc. +000F5C Day One Digital Media Limited +000F5D 42Networks AB +000F5E Veo +000F5F Nicety Technologies Inc. (NTS) +000F60 Lifetron Co.,Ltd +000F61 Kiwi Networks +000F62 Alcatel Bell Space N.V. +000F63 Obzerv Technologies +000F64 D&R Electronica Weesp BV +000F65 icube Corp. +000F66 Cisco-Linksys +000F67 West Instruments +000F68 Vavic Network Technology, Inc. +000F69 SEW Eurodrive GmbH & Co. KG +000F6A Nortel Networks +000F6B GateWare Communications GmbH +000F6C ADDI-DATA GmbH +000F6D Midas Engineering +000F6E BBox +000F6F FTA Communication Technologies +000F70 Wintec Industries, inc. +000F71 Sanmei Electronics Co.,Ltd +000F72 Sandburst +000F73 Rockwell Samsung Automation +000F74 Qamcom Technology AB +000F75 First Silicon Solutions +000F76 Digital Keystone, Inc. +000F77 DENTUM CO.,LTD +000F78 Datacap Systems Inc +000F79 Bluetooth Interest Group Inc. +000F7A BeiJing NuQX Technology CO.,LTD +000F7B Arce Sistemas, S.A. +000F7C ACTi Corporation +000F7D Xirrus +000F7E UIS Abler Electronics Co.,Ltd. +000F7F UBSTORAGE Co.,Ltd. +000F80 Trinity Security Systems,Inc. +000F81 Secure Info Imaging +000F82 Mortara Instrument, Inc. +000F83 Brainium Technologies Inc. +000F84 Astute Networks, Inc. +000F85 ADDO-Japan Corporation +000F87 Maxcess International +000F88 AMETEK, Inc. +000F89 Winnertec System Co., Ltd. +000F8A WideView +000F8B Orion MultiSystems Inc +000F8C Gigawavetech Pte Ltd +000F8D FAST TV-Server AG +000F8E DONGYANG TELECOM CO.,LTD. +000F8F Cisco Systems +000F90 Cisco Systems +000F91 Aerotelecom Co.,Ltd. +000F92 Microhard Systems Inc. +000F93 Landis+Gyr Ltd. +000F94 Genexis +000F95 ELECOM Co.,LTD Laneed Division +000F96 Critical Telecom Corp. +000F97 Avanex Corporation +000F98 Avamax Co. Ltd. +000F99 APAC opto Electronics Inc. +000F9A Synchrony, Inc. +000F9B Ross Video Limited +000F9C Panduit Corp +000F9D Newnham Research Ltd +000F9E Murrelektronik GmbH +000F9F Motorola BCS +000FA0 Lotte Canon Co., Ltd. +000FA1 Gigabit Systems Inc. +000FA2 Digital Path Networks +000FA3 Alpha Networks Inc. +000FA4 Sprecher Automation GmbH +000FA5 SMP / BWA Technology GmbH +000FA6 S2 Security Corporation +000FA7 Raptor Networks Technology +000FA8 Photometrics, Inc. +000FA9 PC Fabrik +000FAA Nexus Technologies +000FAB Kyushu Electronics Systems Inc. +000FAC IEEE 802.11 +000FAD FMN communications GmbH +000FAE E2O Communications +000FAF Dialog Inc. +000FB0 Compal Electronics,INC. +000FB1 Cognio Inc. +000FB2 Broadband Pacenet (India) Pvt. Ltd. +000FB3 Actiontec Electronics, Inc +000FB4 Timespace Technology +000FB5 NETGEAR Inc +000FB6 Europlex Technologies +000FB7 Cavium Networks +000FB8 CallURL Inc. +000FB9 Adaptive Instruments +000FBA Tevebox AB +000FBB Siemens AG, ICN M&L TDC EP +000FBC Onkey Technologies, Inc. +000FBD MRV Communications (Networks) LTD +000FBE e-w/you Inc. +000FBF DGT Sp. z o.o. +000FC0 DELCOMp +000FC1 WAVE Corporation +000FC2 Uniwell Corporation +000FC3 PalmPalm Technology, Inc. +000FC4 NST co.,LTD. +000FC5 KeyMed Ltd +000FC6 Eurocom Industries A/S +000FC7 Dionica R&D Ltd. +000FC8 Chantry Networks +000FC9 Allnet GmbH +000FCA A-JIN TECHLINE CO, LTD +000FCB 3COM EUROPE LTD +000FCC Netopia, Inc. +000FCD Nortel Networks +000FCE Kikusui Electronics Corp. +000FCF Datawind Research +000FD0 ASTRI +000FD1 Applied Wireless Identifications Group, Inc. +000FD2 EWA Technologies, Inc. +000FD3 Digium +000FD4 Soundcraft +000FD5 Schwechat - RISE +000FD6 Sarotech Co., Ltd +000FD7 Harman Music Group +000FD8 Force, Inc. +000FD9 FlexDSL Telecommunications AG +000FDA YAZAKI CORPORATION +000FDB Westell Technologies +000FDC Ueda Japan Radio Co., Ltd. +000FDD SORDIN AB +000FDE Sony Ericsson Mobile Communications AB +000FDF SOLOMON Technology Corp. +000FE0 NComputing Co.,Ltd. +000FE1 ID DIGITAL CORPORATION +000FE2 Hangzhou Huawei-3Com Tech. Co., Ltd. +000FE3 Damm Cellular Systems A/S +000FE4 Pantech Co.,Ltd +000FE5 MERCURY SECURITY CORPORATION +000FE6 MBTech Systems, Inc. +000FE7 Lutron Electronics Co., Inc. +000FE8 Lobos, Inc. +000FE9 GW TECHNOLOGIES CO.,LTD. +000FEA Giga-Byte Technology Co.,LTD. +000FEB Cylon Controls +000FEC Arkus Inc. +000FED Anam Electronics Co., Ltd +000FEE XTec, Incorporated +000FEF Thales e-Transactions GmbH +000FF0 Sunray Enterprise +000FF1 nex-G Systems Pte.Ltd +000FF2 Loud Technologies Inc. +000FF3 Jung Myoung Communications&Technology +000FF4 Guntermann & Drunck GmbH +000FF5 GN&S company +000FF6 Darfon Electronics Corp. +000FF7 Cisco Systems +000FF8 Cisco Systems +000FF9 Valcretec, Inc. +000FFA Optinel Systems, Inc. +000FFB Nippon Denso Industry Co., Ltd. +000FFC Merit Li-Lin Ent. +000FFD Glorytek Network Inc. +000FFE G-PRO COMPUTER +000FFF Control4 +001000 CABLE TELEVISION LABORATORIES, INC. +001001 MCK COMMUNICATIONS +001002 ACTIA +001003 IMATRON, INC. +001004 THE BRANTLEY COILE COMPANY,INC +001005 UEC COMMERCIAL +001006 Thales Contact Solutions Ltd. +001007 CISCO SYSTEMS, INC. +001008 VIENNA SYSTEMS CORPORATION +001009 HORO QUARTZ +00100A WILLIAMS COMMUNICATIONS GROUP +00100B CISCO SYSTEMS, INC. +00100C ITO CO., LTD. +00100D CISCO SYSTEMS, INC. +00100E MICRO LINEAR COPORATION +00100F INDUSTRIAL CPU SYSTEMS +001010 INITIO CORPORATION +001011 CISCO SYSTEMS, INC. +001012 PROCESSOR SYSTEMS (I) PVT LTD +001013 Kontron +001014 CISCO SYSTEMS, INC. +001015 OOmon Inc. +001016 T.SQWARE +001017 MICOS GmbH +001018 BROADCOM CORPORATION +001019 SIRONA DENTAL SYSTEMS GmbH & Co. KG +00101A PictureTel Corp. +00101B CORNET TECHNOLOGY, INC. +00101C OHM TECHNOLOGIES INTL, LLC +00101D WINBOND ELECTRONICS CORP. +00101E MATSUSHITA ELECTRONIC INSTRUMENTS CORP. +00101F CISCO SYSTEMS, INC. +001020 WELCH ALLYN, DATA COLLECTION +001021 ENCANTO NETWORKS, INC. +001022 SatCom Media Corporation +001023 FLOWWISE NETWORKS, INC. +001024 NAGOYA ELECTRIC WORKS CO., LTD +001025 GRAYHILL INC. +001026 ACCELERATED NETWORKS, INC. +001027 L-3 COMMUNICATIONS EAST +001028 COMPUTER TECHNICA, INC. +001029 CISCO SYSTEMS, INC. +00102A ZF MICROSYSTEMS, INC. +00102B UMAX DATA SYSTEMS, INC. +00102C Lasat Networks A/S +00102D HITACHI SOFTWARE ENGINEERING +00102E NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD. +00102F CISCO SYSTEMS, INC. +001030 Wi-LAN, Inc. +001031 OBJECTIVE COMMUNICATIONS, INC. +001032 ALTA TECHNOLOGY +001033 ACCESSLAN COMMUNICATIONS, INC. +001034 GNP Computers +001035 ELITEGROUP COMPUTER SYSTEMS CO., LTD +001036 INTER-TEL INTEGRATED SYSTEMS +001037 CYQ've Technology Co., Ltd. +001038 MICRO RESEARCH INSTITUTE, INC. +001039 Vectron Systems AG +00103A DIAMOND NETWORK TECH +00103B HIPPI NETWORKING FORUM +00103C IC ENSEMBLE, INC. +00103D PHASECOM, LTD. +00103E NETSCHOOLS CORPORATION +00103F TOLLGRADE COMMUNICATIONS, INC. +001040 INTERMEC CORPORATION +001041 BRISTOL BABCOCK, INC. +001042 AlacriTech +001043 A2 CORPORATION +001044 InnoLabs Corporation +001045 Nortel Networks +001046 ALCORN MCBRIDE INC. +001047 ECHO ELETRIC CO. LTD. +001048 HTRC AUTOMATION, INC. +001049 SHORELINE TELEWORKS, INC. +00104A THE PARVUC CORPORATION +00104B 3COM CORPORATION +00104C COMPUTER ACCESS TECHNOLOGY +00104D SURTEC INDUSTRIES, INC. +00104E CEOLOGIC +00104F STORAGE TECHNOLOGY CORPORATION +001050 RION CO., LTD. +001051 CMICRO CORPORATION +001052 METTLER-TOLEDO (ALBSTADT) GMBH +001053 COMPUTER TECHNOLOGY CORP. +001054 CISCO SYSTEMS, INC. +001055 FUJITSU MICROELECTRONICS, INC. +001056 SODICK CO., LTD. +001057 Rebel.com, Inc. +001058 ArrowPoint Communications +001059 DIABLO RESEARCH CO. LLC +00105A 3COM CORPORATION +00105B NET INSIGHT AB +00105C QUANTUM DESIGNS (H.K.) LTD. +00105D Draeger Medical +00105E HEKIMIAN LABORATORIES, INC. +00105F IN-SNEC +001060 BILLIONTON SYSTEMS, INC. +001061 HOSTLINK CORP. +001062 NX SERVER, ILNC. +001063 STARGUIDE DIGITAL NETWORKS +001064 DNPG, LLC +001065 RADYNE CORPORATION +001066 ADVANCED CONTROL SYSTEMS, INC. +001067 REDBACK NETWORKS, INC. +001068 COMOS TELECOM +001069 HELIOSS COMMUNICATIONS, INC. +00106A DIGITAL MICROWAVE CORPORATION +00106B SONUS NETWORKS, INC. +00106C INFRATEC PLUS GmbH +00106D INTEGRITY COMMUNICATIONS, INC. +00106E TADIRAN COM. LTD. +00106F TRENTON TECHNOLOGY INC. +001070 CARADON TREND LTD. +001071 ADVANET INC. +001072 GVN TECHNOLOGIES, INC. +001073 TECHNOBOX, INC. +001074 ATEN INTERNATIONAL CO., LTD. +001075 Maxtor Corporation +001076 EUREM GmbH +001077 SAF DRIVE SYSTEMS, LTD. +001078 NUERA COMMUNICATIONS, INC. +001079 CISCO SYSTEMS, INC. +00107A AmbiCom, Inc. +00107B CISCO SYSTEMS, INC. +00107C P-COM, INC. +00107D AURORA COMMUNICATIONS, LTD. +00107E BACHMANN ELECTRONIC GmbH +00107F CRESTRON ELECTRONICS, INC. +001080 METAWAVE COMMUNICATIONS +001081 DPS, INC. +001082 JNA TELECOMMUNICATIONS LIMITED +001083 HEWLETT-PACKARD COMPANY +001084 K-BOT COMMUNICATIONS +001085 POLARIS COMMUNICATIONS, INC. +001086 ATTO TECHNOLOGY, INC. +001087 Xstreamis PLC +001088 AMERICAN NETWORKS INC. +001089 WebSonic +00108A TeraLogic, Inc. +00108B LASERANIMATION SOLLINGER GmbH +00108C FUJITSU TELECOMMUNICATIONS EUROPE, LTD. +00108D JOHNSON CONTROLS, INC. +00108E HUGH SYMONS CONCEPT Technologies Ltd. +00108F RAPTOR SYSTEMS +001090 CIMETRICS, INC. +001091 NO WIRES NEEDED BV +001092 NETCORE INC. +001093 CMS COMPUTERS, LTD. +001094 Performance Analysis Broadband, Spirent plc +001095 Thompson Inc. +001096 TRACEWELL SYSTEMS, INC. +001097 WinNet Metropolitan Communications Systems, Inc. +001098 STARNET TECHNOLOGIES, INC. +001099 InnoMedia, Inc. +00109A NETLINE +00109B Emulex Corporation +00109C M-SYSTEM CO., LTD. +00109D CLARINET SYSTEMS, INC. +00109E AWARE, INC. +00109F PAVO, INC. +0010A0 INNOVEX TECHNOLOGIES, INC. +0010A1 KENDIN SEMICONDUCTOR, INC. +0010A2 TNS +0010A3 OMNITRONIX, INC. +0010A4 XIRCOM +0010A5 OXFORD INSTRUMENTS +0010A6 CISCO SYSTEMS, INC. +0010A7 UNEX TECHNOLOGY CORPORATION +0010A8 RELIANCE COMPUTER CORP. +0010A9 ADHOC TECHNOLOGIES +0010AA MEDIA4, INC. +0010AB KOITO INDUSTRIES, LTD. +0010AC IMCI TECHNOLOGIES +0010AD SOFTRONICS USB, INC. +0010AE SHINKO ELECTRIC INDUSTRIES CO. +0010AF TAC SYSTEMS, INC. +0010B0 MERIDIAN TECHNOLOGY CORP. +0010B1 FOR-A CO., LTD. +0010B2 COACTIVE AESTHETICS +0010B3 NOKIA MULTIMEDIA TERMINALS +0010B4 ATMOSPHERE NETWORKS +0010B5 ACCTON TECHNOLOGY CORPORATION +0010B6 ENTRATA COMMUNICATIONS CORP. +0010B7 COYOTE TECHNOLOGIES, LLC +0010B8 ISHIGAKI COMPUTER SYSTEM CO. +0010B9 MAXTOR CORP. +0010BA MARTINHO-DAVIS SYSTEMS, INC. +0010BB DATA & INFORMATION TECHNOLOGY +0010BC Aastra Telecom +0010BD THE TELECOMMUNICATION TECHNOLOGY COMMITTEE +0010BE TELEXIS CORP. +0010BF InterAir Wireless +0010C0 ARMA, INC. +0010C1 OI ELECTRIC CO., LTD. +0010C2 WILLNET, INC. +0010C3 CSI-CONTROL SYSTEMS +0010C4 MEDIA LINKS CO., LTD. +0010C5 PROTOCOL TECHNOLOGIES, INC. +0010C6 USI +0010C7 DATA TRANSMISSION NETWORK +0010C8 COMMUNICATIONS ELECTRONICS SECURITY GROUP +0010C9 MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO. +0010CA INTEGRAL ACCESS +0010CB FACIT K.K. +0010CC CLP COMPUTER LOGISTIK PLANUNG GmbH +0010CD INTERFACE CONCEPT +0010CE VOLAMP, LTD. +0010CF FIBERLANE COMMUNICATIONS +0010D0 WITCOM, LTD. +0010D1 Top Layer Networks, Inc. +0010D2 NITTO TSUSHINKI CO., LTD +0010D3 GRIPS ELECTRONIC GMBH +0010D4 STORAGE COMPUTER CORPORATION +0010D5 IMASDE CANARIAS, S.A. +0010D6 ITT - A/CD +0010D7 ARGOSY RESEARCH INC. +0010D8 CALISTA +0010D9 IBM JAPAN, FUJISAWA MT+D +0010DA MOTION ENGINEERING, INC. +0010DB NetScreen Technologies, Inc. +0010DC MICRO-STAR INTERNATIONAL CO., LTD. +0010DD ENABLE SEMICONDUCTOR, INC. +0010DE INTERNATIONAL DATACASTING CORPORATION +0010DF RISE COMPUTER INC. +0010E0 COBALT MICROSERVER, INC. +0010E1 S.I. TECH, INC. +0010E2 ArrayComm, Inc. +0010E3 COMPAQ COMPUTER CORPORATION +0010E4 NSI CORPORATION +0010E5 SOLECTRON TEXAS +0010E6 APPLIED INTELLIGENT SYSTEMS, INC. +0010E7 BreezeCom +0010E8 TELOCITY, INCORPORATED +0010E9 RAIDTEC LTD. +0010EA ADEPT TECHNOLOGY +0010EB SELSIUS SYSTEMS, INC. +0010EC RPCG, LLC +0010ED SUNDANCE TECHNOLOGY, INC. +0010EE CTI PRODUCTS, INC. +0010EF DBTEL INCORPORATED +0010F1 I-O CORPORATION +0010F2 ANTEC +0010F3 Nexcom International Co., Ltd. +0010F4 VERTICAL NETWORKS, INC. +0010F5 AMHERST SYSTEMS, INC. +0010F6 CISCO SYSTEMS, INC. +0010F7 IRIICHI TECHNOLOGIES Inc. +0010F8 KENWOOD TMI CORPORATION +0010F9 UNIQUE SYSTEMS, INC. +0010FA ZAYANTE, INC. +0010FB ZIDA TECHNOLOGIES LIMITED +0010FC BROADBAND NETWORKS, INC. +0010FD COCOM A/S +0010FE DIGITAL EQUIPMENT CORPORATION +0010FF CISCO SYSTEMS, INC. +001100 RAM Industries, LLC +001101 CET Technologies Pte Ltd +001102 Aurora Multimedia Corp. +001103 kawamura electric inc. +001104 TELEXY +001105 Sunplus Technology Co., Ltd. +001106 Siemens NV (Belgium) +001107 RGB Networks Inc. +001108 Orbital Data Corporation +001109 Micro-Star International +00110A Hewlett Packard +00110B Franklin Technology Systems +00110C Atmark Techno, Inc. +00110D SANBlaze Technology, Inc. +00110E Tsurusaki Sealand Transportation Co. Ltd. +00110F netplat,Inc. +001110 Maxanna Technology Co., Ltd. +001111 Intel Corporation +001112 Honeywell CMSS +001113 Fraunhofer FOKUS +001114 EverFocus Electronics Corp. +001115 EPIN Technologies, Inc. +001116 COTEAU VERT CO., LTD. +001117 CESNET +001118 BLX IC Design Corp., Ltd. +001119 Solteras, Inc. +00111A Motorola BCS +00111B Targa Systems Div L-3 Communications Canada +00111C Pleora Technologies Inc. +00111D Hectrix Limited +00111E EPSG (Ethernet Powerlink Standardization Group) +00111F Doremi Labs, Inc. +001120 Cisco Systems +001121 Cisco Systems +001122 CIMSYS Inc +001123 Appointech, Inc. +001124 Apple Computer +001125 IBM Corporation +001126 Venstar Inc. +001127 TASI, Inc +001128 Streamit +001129 Paradise Datacom Ltd. +00112A Niko NV +00112B NetModule +00112C IZT GmbH +00112D Guys Without Ties +00112E CEICOM +00112F ASUSTek Computer Inc. +001130 Allied Telesis (Hong Kong) Ltd. +001131 UNATECH. CO.,LTD +001132 Synology Incorporated +001133 Siemens Austria SIMEA +001134 MediaCell, Inc. +001135 Grandeye Ltd +001136 Goodrich Sensor Systems +001137 AICHI ELECTRIC CO., LTD. +001138 TAISHIN CO., LTD. +001139 STOEBER ANTRIEBSTECHNIK GmbH + Co. KG. +00113A SHINBORAM +00113B Micronet Communications Inc. +00113C Micronas GmbH +00113D KN SOLTEC CO.,LTD. +00113E JL Corporation +00113F Alcatel DI +001140 Nanometrics Inc. +001141 GoodMan Corporation +001142 e-SMARTCOM INC. +001143 DELL INC. (WW PCBA Test) +001144 Assurance Technology Corp +001145 ValuePoint Networks +001147 Secom-Industry co.LTD. +001148 Prolon Control Systems +001149 Proliphix LLC +00114A KAYABA INDUSTRY Co,.Ltd. +00114B Francotyp-Postalia AG & Co. KG +00114C caffeina applied research ltd. +00114D Atsumi Electric Co.,LTD. +00114E 690885 Ontario Inc. +00114F US Digital Television, Inc +001150 Belkin Corporation +001151 Mykotronx +001152 Eidsvoll Electronics AS +001153 Trident Tek, Inc. +001154 Webpro Technologies Inc. +001155 Sevis Systems +001156 Pharos Systems NZ +001157 OF Networks Co., Ltd. +001158 Nortel Networks +001159 MATISSE NETWORKS INC +00115A Ivoclar Vivadent AG +00115B Elitegroup Computer System Co. (ECS) +00115C Cisco +00115D Cisco +00115E ProMinent Dosiertechnik GmbH +00115F Intellix Co., Ltd. +001160 ARTDIO Company Co., LTD +001161 NetStreams, LLC +001162 STAR MICRONICS CO.,LTD. +001163 SYSTEM SPA DEPT. ELECTRONICS +001164 ACARD Technology Corp. +001165 Znyx Networks +001166 Taelim Electronics Co., Ltd. +001167 Integrated System Solution Corp. +001168 HomeLogic LLC +001169 EMS Satcom +00116A Domo Ltd +00116B Digital Data Communications Asia Co.,Ltd +00116C Nanwang Multimedia Inc.,Ltd +00116D American Time and Signal +00116E PePLink Ltd. +00116F Netforyou Co., LTD. +001170 GSC SRL +001171 DEXTER Communications, Inc. +001172 COTRON CORPORATION +001173 Adtron Corporation +001174 Wibhu Technologies, Inc. +001175 PathScale, Inc. +001176 Intellambda Systems, Inc. +001177 COAXIAL NETWORKS, INC. +001178 Chiron Technology Ltd +001179 Singular Technology Co. Ltd. +00117A Singim International Corp. +00117B Bchi Labortechnik AG +00117C e-zy.net +00117D ZMD America, Inc. +00117E Progeny Inc. +00117F Neotune Information Technology Corporation,.LTD +001180 Motorola BCS +001181 InterEnergy Co.Ltd, +001182 IMI Norgren Ltd +001183 PSC Scanning, Inc +001184 Humo Laboratory,Ltd. +001185 Hewlett Packard +001186 Prime Systems, Inc. +001187 Category Solutions, Inc +001188 Enterasys +001189 Aerotech Inc +00118A Viewtran Technology Limited +00118B NetDevices Inc. +00118C Missouri Department of Transportation +00118D Hanchang System Corp. +00118E Halytech Mace +00118F EUTECH INSTRUMENTS PTE. LTD. +001190 Digital Design Corporation +001191 CTS-Clima Temperatur Systeme GmbH +001192 Cisco Systems +001193 Cisco Systems +001194 Chi Mei Communication Systems, Inc. +001195 Alpha Networks Inc. +001196 Actuality Systems, Inc. +001197 Monitoring Technologies Limited +001198 Prism Media Products Limited +001199 2wcom GmbH +00119A Alkeria srl +00119B Telesynergy Research Inc. +00119C EP&T Energy +00119D Diginfo Technology Corporation +00119F Nokia Danmark A/S +0011A0 Vtech Engineering Canada Ltd +0011A1 VISION NETWARE CO.,LTD +0011A2 Manufacturing Technology Inc +0011A3 LanReady Technologies Inc. +0011A4 JStream Technologies Inc. +0011A5 Fortuna Electronic Corp. +0011A6 Sypixx Networks +0011A7 Infilco Degremont Inc. +0011A8 Quest Technologies +0011A9 MOIMSTONE Co., LTD +0011AA Uniclass Technology, Co., LTD +0011AB TRUSTABLE TECHNOLOGY CO.,LTD. +0011AC Simtec Electronics +0011AD Shanghai Ruijie Technology +0011AE Motorola BCS +0011AF Medialink-i,Inc +0011B0 Fortelink Inc. +0011B1 BlueExpert Technology Corp. +0011B2 2001 Technology Inc. +0011B3 YOSHIMIYA CO.,LTD. +0011B4 Westermo Teleindustri AB +0011B5 Shenzhen Powercom Co.,Ltd +0011B6 Open Systems International +0011B7 Melexis Nederland B.V. +0011B8 Liebherr - Elektronik GmbH +0011B9 Inner Range Pty. Ltd. +0011BA Elexol Pty Ltd +0011BB Cisco Systems +0011BC Cisco Systems +0011BD Bombardier Transportation +0011BE AGP Telecom Co. Ltd +0011BF AESYS S.p.A. +0011C0 Aday Technology Inc +0011C1 4P MOBILE DATA PROCESSING +0011C2 United Fiber Optic Communication +0011C3 Transceiving System Technology Corporation +0011C4 Terminales de Telecomunicacion Terrestre, S.L. +0011C5 TEN Technology +0011C6 Seagate Technology LLC +0011C7 RAYMARINE Group Ltd. +0011C8 Powercom Co., Ltd. +0011C9 MTT Corporation +0011CA Long Range Systems, Inc. +0011CB Jacobsons RKH AB +0011CC Guangzhou Jinpeng Group Co.,Ltd. +0011CD Axsun Technologies +0011CE Ubisense Limited +0011CF Thrane & Thrane A/S +0011D0 Tandberg Data ASA +0011D1 Soft Imaging System GmbH +0011D2 Perception Digital Ltd +0011D3 NextGenTel Holding ASA +0011D4 NetEnrich, Inc +0011D5 Hangzhou Sunyard System Engineering Co.,Ltd. +0011D6 HandEra, Inc. +0011D7 eWerks Inc +0011D8 ASUSTek Computer Inc. +0011D9 TiVo +0011DA Vivaas Technology Inc. +0011DB Land-Cellular Corporation +0011DC Glunz & Jensen +0011DD FROMUS TEC. Co., Ltd. +0011DE EURILOGIC +0011DF Arecont Systems +0011E0 U-MEDIA Communications, Inc. +0011E1 BEKO Electronics Co. +0011E2 Hua Jung Components Co., Ltd. +0011E3 Broadband Access Products +0011E4 Danelec Electronics A/S +0011E5 KCodes Corporation +0011E6 Scientific Atlanta +0011E7 WORLDSAT - Texas de France +0011E8 Tixi.Com +0011E9 STARNEX CO., LTD. +0011EA IWICS Inc. +0011EB Innovative Integration +0011EC AVIX INC. +0011ED 802 Global +0011EE Estari, Inc. +0011EF Conitec Datensysteme GmbH +0011F0 Wideful Limited +0011F1 QinetiQ Ltd +0011F2 Institute of Network Technologies +0011F3 Gavitec AG- mobile digit +0011F4 woori-net +0011F5 ASKEY COMPUTER CORP. +0011F6 Asia Pacific Microsystems , Inc. +0011F7 Shenzhen Forward Industry Co., Ltd +0011F8 AIRAYA Corp +0011F9 Nortel Networks +0011FA Rane Corporation +0011FB Heidelberg Engineering GmbH +0011FC HARTING Electric Gmbh & Co.KG +0011FD KORG INC. +0011FE Keiyo System Research, Inc. +0011FF Digitro Tecnologia Ltda +001200 Cisco +001201 Cisco +001202 Audio International Inc. +001203 Activ Networks +001204 u10 Networks, Inc. +001205 Terrasat Communications, Inc. +001206 iQuest (NZ) Ltd +001207 Head Strong International Limited +001208 Gantner Electronic GmbH +001209 Fastrax Ltd +00120A Emerson Electric GmbH & Co. OHG +00120B Chinasys Technologies Limited +00120C CE-Infosys Pte Ltd +00120D Advanced Telecommunication Technologies, Inc. +00120E AboCom +00120F IEEE 802.3 +001210 WideRay Corp +001211 Protechna Herbst GmbH & Co. KG +001212 PLUS Vision Corporation +001213 Metrohm AG +001214 Koenig & Bauer AG +001215 iStor Networks, Inc. +001216 ICP Internet Communication Payment AG +001217 Cisco-Linksys, LLC +001218 ARUZE Corporation +001219 Ahead Communication Systems Inc +00121A Techno Soft Systemnics Inc. +00121B Sound Devices, LLC +00121C PARROT S.A. +00121D Netfabric Corporation +00121E Juniper Networks, Inc. +00121F Harding Intruments +001220 Cadco Systems +001221 B.Braun Melsungen AG +001222 Skardin (UK) Ltd +001223 Pixim +001224 NexQL Corporation +001225 Motorola BCS +001226 Japan Direx Corporation +001227 Franklin Electric Co., Inc. +001228 Data Ltd. +001229 BroadEasy Technologies Co.,Ltd +00122A VTech Telecommunications Ltd. +00122B Virbiage Pty Ltd +00122C Soenen Controls N.V. +00122D SiNett Corporation +00122E Signal Technology - AISD +00122F Sanei Electric Inc. +001230 Picaso Infocommunication CO., LTD. +001231 Motion Control Systems, Inc. +001232 LeWiz Communications Inc. +001233 JRC TOKKI Co.,Ltd. +001234 Camille Bauer +001235 Andrew Corporation +001236 Tidal Networks +001237 Texas Instruments +001238 SetaBox Technology Co., Ltd. +001239 S Net Systems Inc. +00123A Posystech Inc., Co. +00123B KeRo Systems ApS +00123C IP3 Networks, Inc. +00123D GES +00123E ERUNE technology Co., Ltd. +00123F Dell Inc +001240 AMOI ELECTRONICS CO.,LTD +001241 a2i marketing center +001242 Millennial Net +001243 Cisco +001244 Cisco +001245 Zellweger Analytics, Inc. +001246 T.O.M TECHNOLOGY INC.. +001247 Samsung Electronics Co., Ltd. +001248 Kashya Inc. +001249 Delta Elettronica S.p.A. +00124A Dedicated Devices, Inc. +00124B Chipcon AS +00124C BBWM Corporation +00124D Inducon BV +00124E XAC AUTOMATION CORP. +00124F Tyco Thermal Controls LLC. +001250 Tokyo Aircaft Instrument Co., Ltd. +001251 SILINK +001252 Citronix, LLC +001253 AudioDev AB +001254 Spectra Technologies Holdings Company Ltd +001255 NetEffect Incorporated +001256 LG INFORMATION & COMM. +001257 LeapComm Communication Technologies Inc. +001258 Activis Polska +001259 THERMO ELECTRON KARLSRUHE +00125A Microsoft Corporation +00125B KAIMEI ELECTRONI +00125C Green Hills Software, Inc. +00125D CyberNet Inc. +00125E CAEN +00125F AWIND Inc. +001260 Stanton Magnetics,inc. +001261 Adaptix, Inc +001262 Nokia Danmark A/S +001263 Data Voice Technologies GmbH +001264 daum electronic gmbh +001265 Enerdyne Technologies, Inc. +001267 Matsushita Electronic Components Co., Ltd. +001268 IPS d.o.o. +001269 Value Electronics +00126A OPTOELECTRONICS Co., Ltd. +00126B Ascalade Communications Limited +00126C Visonic Ltd. +00126D University of California, Berkeley +00126E Seidel Elektronik GmbH Nfg.KG +00126F Rayson Technology Co., Ltd. +001270 NGES Denro Systems +001271 Measurement Computing Corp +001272 Redux Communications Ltd. +001273 Stoke Inc +001274 NIT lab +001275 Moteiv Corporation +001276 Microsol Holdings Ltd. +001277 Korenix Technologies Co., Ltd. +001278 International Bar Code +001279 Hewlett Packard +00127A Sanyu Industry Co.,Ltd. +00127B VIA Networking Technologies, Inc. +00127C PM-LUFT AB +00127D MobileAria +00127E Digital Lifestyles Group, Inc. +00127F Cisco +001280 Cisco +001281 CIEFFE srl +001282 Qovia +001283 Nortel Networks +001284 Lab33 Srl +001285 Gizmondo Europe Ltd +001286 ENDEVCO CORP +001287 Digital Everywhere Unterhaltungselektronik GmbH +001288 2Wire, Inc +001289 Advance Sterilization Products +00128A Motorola PCS +00128B Sensory Networks Inc +00128C Woodward Governor +00128D STB Datenservice GmbH +00128E Q-Free ASA +00128F Montilio +001290 KYOWA Electric & Machinery Corp. +001291 KWS Computersysteme GmbH +001292 Griffin Technology +001293 GE Energy +001294 Eudyna Devices Inc. +001295 Aiware Inc. +001296 Addlogix +001297 O2Micro, Inc. +001298 MICO ELECTRIC(SHENZHEN) LIMITED +001299 Ktech Telecommunications Inc +00129A IRT Electronics Pty Ltd +00129B E2S Electronic Engineering Solutions, S.L. +00129C Yulinet +00129D FIRST INTERNATIONAL COMPUTER DO BRASIL LTDA +00129E Surf Communications Inc. +00129F RAE Systems, Inc. +0012A0 NeoMeridian Sdn Bhd +0012A1 BluePacket Communications Co., Ltd. +0012A2 VITA +0012A3 Trust International B.V. +0012A4 ThingMagic, LLC +0012A5 Stargen, Inc. +0012A6 Lake Technology Ltd +0012A7 ISR TECHNOLOGIES Inc +0012A8 intec GmbH +0012A9 3COM EUROPE LTD +0012AA IEE, Inc. +0012AB WiLife, Inc. +0012AC ONTIMETEK INC. +0012AD IDS GmbH +0012AE HLS HARD-LINE Solutions Inc. +0012AF ELPRO Technologies +0012B0 Efore Oyj (Plc) +0012B1 Dai Nippon Printing Co., Ltd +0012B2 AVOLITES LTD. +0012B3 Advance Wireless Technology Corp. +0012B4 Work GmbH +0012B5 Vialta, Inc. +0012B6 Santa Barbara Infrared, Inc. +0012B7 PTW Freiburg +0012B8 G2 Microsystems +0012B9 Fusion Digital Technology +0012BA FSI Systems, Inc. +0012BB Telecommunications Industry Association TR-41 Committee +0012BC Echolab LLC +0012BD Avantec Manufacturing Limited +0012BE Astek Corporation +0012BF Arcadyan Technology Corporation +0012C0 HotLava Systems, Inc. +0012C1 Check Point Software Technologies +0012C2 Apex Electronics Factory +0012C3 WIT S.A. +0012C4 Viseon, Inc. +0012C5 V-Show Technology Co.Ltd +0012C6 TGC America, Inc +0012C7 SECURAY Technologies Ltd.Co. +0012C8 Perfect tech +0012C9 Motorola BCS +0012CA Hansen Telecom +0012CB CSS Inc. +0012CC Bitatek CO., LTD +0012CD ASEM SpA +0012CE Advanced Cybernetics Group +0012CF Accton Technology Corporation +0012D0 Gossen-Metrawatt-GmbH +0012D1 Texas Instruments Inc +0012D2 Texas Instruments +0012D3 Zetta Systems, Inc. +0012D4 Princeton Technology, Ltd +0012D5 Motion Reality Inc. +0012D6 Jiangsu Yitong High-Tech Co.,Ltd +0012D7 Invento Networks, Inc. +0012D8 International Games System Co., Ltd. +0012D9 Cisco Systems +0012DA Cisco Systems +0012DC SunCorp Industrial Limited +0012DD Shengqu Information Technology (Shanghai) Co., Ltd. +0012DE Radio Components Sweden AB +0012DF Novomatic AG +0012E0 Codan Limited +0012E1 Alliant Networks, Inc +0012E2 ALAXALA Networks Corporation +0012E3 Agat-RT, Ltd. +0012E4 ZIEHL industrie-electronik GmbH + Co KG +0012E5 Time America, Inc. +0012E6 SPECTEC COMPUTER CO., LTD. +0012E7 Projectek Networking Electronics Corp. +0012E8 Fraunhofer IMS +0012E9 Abbey Systems Ltd +0012EA Trane +0012EB R2DI, LLC +0012EC Movacolor b.v. +0012ED AVG Advanced Technologies +0012EE Sony Ericsson Mobile Communications AB +0012EF OneAccess SA +0012F0 Intel Corporate +0012F1 IFOTEC +0012F2 Foundry Networks +0012F3 connectBlue AB +0012F4 Belco International Co.,Ltd. +0012F5 Prolificx Ltd +0012F6 MDK CO.,LTD. +0012F7 Xiamen Xinglian Electronics Co., Ltd. +0012F8 WNI Resources, LLC +0012F9 URYU SEISAKU, LTD. +0012FA THX LTD +0012FB Samsung Electronics +0012FC PLANET System Co.,LTD +0012FD OPTIMUS IC S.A. +0012FE Lenovo Mobile Communication Technology Ltd. +0012FF Lely Industries N.V. +001300 IT-FACTORY, INC. +001301 IronGate S.L. +001302 Intel Corporate +001303 GateConnect Technologies GmbH +001304 Flaircomm Technologies Co. LTD +001305 Epicom, Inc. +001306 Always On Wireless +001307 Accenia, Inc. +001308 Nuvera Fuel Cells +001309 Ocean Broadband Networks +00130A Nortel +00130B Mextal B.V. +00130C HF System Corporation +00130D GALILEO AVIONICA +00130E Focusrite Audio Engineering Limited +00130F EGEMEN Bilgisayar Muh San ve Tic LTD STI +001310 Cisco-Linksys, LLC +001311 ARRIS International +001312 Amedia Networks Inc. +001313 GuangZhou Post & Telecom Equipment ltd +001314 Asiamajor Inc. +001315 SONY Computer Entertainment inc, +001316 L-S-B GmbH +001317 GN Netcom as +001318 DGSTATION Co., Ltd. +001319 Cisco Systems +00131A Cisco Systems +00131B BeCell Innovations Corp. +00131C LiteTouch, Inc. +00131D Scanvaegt International A/S +00131E Peiker acustic GmbH & Co. KG +00131F NxtPhase T&D, Corp. +001320 Intel Corporate +001321 Hewlett Packard +001322 DAQ Electronics, Inc. +001323 Cap Co., Ltd. +001324 Schneider Electric Ultra Terminal +001325 ImmenStar Inc. +001326 ECM Systems Ltd +001327 Data Acquisitions limited +001328 Westech Korea Inc., +001329 VSST Co., LTD +00132A STROM telecom, s. r. o. +00132B Phoenix Digital +00132C MAZ Brandenburg GmbH +00132D iWise Communications Pty Ltd +00132E ITian Coporation +00132F Interactek +001331 CellPoint Connect +001332 Beijing Topsec Network Security Technology Co., Ltd. +001333 Baud Technology Inc. +001334 Arkados, Inc. +001335 VS Industry Berhad +001336 Tianjin 712 Communication Broadcasting co., ltd. +001337 Orient Power Home Network Ltd. +001338 FRESENIUS-VIAL +001339 EL-ME AG +00133A VadaTech Inc. +00133B Speed Dragon Multimedia Limited +00133C QUINTRON SYSTEMS INC. +00133D Micro Memory LLC +00133E MetaSwitch +00133F Eppendorf Instrumente GmbH +001340 AD.EL s.r.l. +001341 Shandong New Beiyang Information Technology Co.,Ltd +001342 Vision Research, Inc. +001343 Matsushita Electronic Components (Europe) GmbH +001344 Fargo Electronics Inc. +001345 Eaton Corporation +001346 D-Link Corporation +001347 BlueTree Wireless Data Inc. +001348 Artila Electronics Co., Ltd. +001349 ZyXEL Communications Corporation +00134A Engim, Inc. +00134B ToGoldenNet Technology Inc. +00134C YDT Technology International +00134D IPC systems +00134E Valox Systems, Inc. +00134F Tranzeo Wireless Technologies Inc. +001350 Silver Spring Networks, Inc +001351 Niles Audio Corporation +001352 Naztec, Inc. +001353 HYDAC Filtertechnik GMBH +001354 Zcomax Technologies, Inc. +001355 TOMEN Cyber-business Solutions, Inc. +001356 target systemelectronic gmbh +001357 Soyal Technology Co., Ltd. +001358 Realm Systems, Inc. +001359 ProTelevision Technologies A/S +00135A Project T&E Limited +00135B PanelLink Cinema, LLC +00135C OnSite Systems, Inc. +00135D NTTPC Communications, Inc. +00135E EAB/RWI/K +00135F Cisco Systems +001360 Cisco Systems +001361 Biospace Co., Ltd. +001362 ShinHeung Precision Co., Ltd. +001363 Verascape, Inc. +001364 Paradigm Technology Inc.. +001365 Nortel +001366 Neturity Technologies Inc. +001367 Narayon. Co., Ltd. +001368 Maersk Data Defence +001369 Honda Electron Co., LED. +00136A Hach Ultra Analytics +00136B E-TEC +00136D Tentaculus AB +00136E Techmetro Corp. +00136F PacketMotion, Inc. +001370 Nokia Danmark A/S +001371 Motorola CHS +001372 Dell Inc. +001373 BLwave Electronics Co., Ltd +001374 Attansic Technology Corp. +001375 American Security Products Co. +001376 Tabor Electronics Ltd. +001377 Samsung Electronics CO., LTD +001378 QSAN Technology, Inc. +001379 PONDER INFORMATION INDUSTRIES LTD. +00137A Netvox Technology Co., Ltd. +00137B Movon Corporation +00137C Kaicom co., Ltd. +00137D Dynalab, Inc. +00137E CorEdge Networks, Inc. +00137F Cisco Systems +001380 Cisco Systems +001381 CHIPS & Systems, Inc. +001382 Cetacea Networks Corporation +001383 Application Technologies and Engineering Research Laboratory +001384 Advanced Motion Controls +001385 Add-On Technology Co., LTD. +001386 ABB Inc./Totalflow +001387 27M Technologies AB +001388 WiMedia Alliance +001389 Redes de Telefona Mvil S.A. +00138A QINGDAO GOERTEK ELECTRONICS CO.,LTD. +00138B Phantom Technologies LLC +00138C Kumyoung.Co.Ltd +00138D Kinghold +00138E FOAB Elektronik AB +00138F Asiarock Incorporation +001390 Termtek Computer Co., Ltd +001391 OUEN CO.,LTD. +001392 Video54 Technologies, Inc +001393 Panta Systems, Inc. +001394 Infohand Co.,Ltd +001395 congatec AG +001396 Acbel Polytech Inc. +001398 TrafficSim Co.,Ltd +001399 STAC Corporation. +00139A K-ubique ID Corp. +00139B ioIMAGE Ltd. +00139C Exavera Technologies, Inc. +00139D Design of Systems on Silicon S.A. +00139E Ciara Technologies Inc. +00139F Electronics Design Services, Co., Ltd. +0013A0 ALGOSYSTEM Co., Ltd. +0013A1 Crow Electronic Engeneering +0013A2 MaxStream, Inc +0013A3 Siemens Com CPE Devices +0013A4 KeyEye Communications +0013A5 General Solutions, LTD. +0013A6 Extricom Ltd +0013A7 BATTELLE MEMORIAL INSTITUTE +0013A8 Tanisys Technology +0013A9 Sony Corporation +0013AA ALS & TEC Ltd. +0013AB Telemotive AG +0013AC Sunmyung Electronics Co., LTD +0013AD Sendo Ltd +0013AE Radiance Technologies +0013AF NUMA Technology,Inc. +0013B0 Jablotron +0013B1 Intelligent Control Systems (Asia) Pte Ltd +0013B2 Carallon Limited +0013B3 Beijing Ecom Communications Technology Co., Ltd. +0013B4 Appear TV +0013B5 Wavesat +0013B6 Sling Media, Inc. +0013B7 Scantech ID +0013B8 RyCo Electronic Systems Limited +0013B9 BM SPA +001C7C PERQ SYSTEMS CORPORATION +002000 LEXMARK INTERNATIONAL, INC. +002001 DSP SOLUTIONS, INC. +002002 SERITECH ENTERPRISE CO., LTD. +002003 PIXEL POWER LTD. +002004 YAMATAKE-HONEYWELL CO., LTD. +002005 SIMPLE TECHNOLOGY +002006 GARRETT COMMUNICATIONS, INC. +002007 SFA, INC. +002008 CABLE & COMPUTER TECHNOLOGY +002009 PACKARD BELL ELEC., INC. +00200A SOURCE-COMM CORP. +00200B OCTAGON SYSTEMS CORP. +00200C ADASTRA SYSTEMS CORP. +00200D CARL ZEISS +00200E SATELLITE TECHNOLOGY MGMT, INC +00200F TANBAC CO., LTD. +002010 JEOL SYSTEM TECHNOLOGY CO. LTD +002011 CANOPUS CO., LTD. +002012 CAMTRONICS MEDICAL SYSTEMS +002013 DIVERSIFIED TECHNOLOGY, INC. +002014 GLOBAL VIEW CO., LTD. +002015 ACTIS COMPUTER SA +002016 SHOWA ELECTRIC WIRE & CABLE CO +002017 ORBOTECH +002018 CIS TECHNOLOGY INC. +002019 OHLER GmbH +00201A MRV Communications, Inc. +00201B NORTHERN TELECOM/NETWORK +00201C EXCEL, INC. +00201D KATANA PRODUCTS +00201E NETQUEST CORPORATION +00201F BEST POWER TECHNOLOGY, INC. +002020 MEGATRON COMPUTER INDUSTRIES PTY, LTD. +002021 ALGORITHMS SOFTWARE PVT. LTD. +002022 TEKNIQUE, INC. +002023 T.C. TECHNOLOGIES PTY. LTD +002024 PACIFIC COMMUNICATION SCIENCES +002025 CONTROL TECHNOLOGY, INC. +002026 AMKLY SYSTEMS, INC. +002027 MING FORTUNE INDUSTRY CO., LTD +002028 WEST EGG SYSTEMS, INC. +002029 TELEPROCESSING PRODUCTS, INC. +00202A N.V. DZINE +00202B ADVANCED TELECOMMUNICATIONS MODULES, LTD. +00202C WELLTRONIX CO., LTD. +00202D TAIYO CORPORATION +00202E DAYSTAR DIGITAL +00202F ZETA COMMUNICATIONS, LTD. +002030 ANALOG & DIGITAL SYSTEMS +002031 ERTEC GmbH +002032 ALCATEL TAISEL +002033 SYNAPSE TECHNOLOGIES, INC. +002034 ROTEC INDUSTRIEAUTOMATION GMBH +002035 IBM CORPORATION +002036 BMC SOFTWARE +002037 SEAGATE TECHNOLOGY +002038 VME MICROSYSTEMS INTERNATIONAL CORPORATION +002039 SCINETS +00203A DIGITAL BI0METRICS INC. +00203B WISDM LTD. +00203C EUROTIME AB +00203D NOVAR ELECTRONICS CORPORATION +00203E LogiCan Technologies, Inc. +00203F JUKI CORPORATION +002040 Motorola Broadband Communications Sector +002041 DATA NET +002042 DATAMETRICS CORP. +002043 NEURON COMPANY LIMITED +002044 GENITECH PTY LTD +002045 ION Networks, Inc. +002046 CIPRICO, INC. +002047 STEINBRECHER CORP. +002048 Marconi Communications +002049 COMTRON, INC. +00204A PRONET GMBH +00204B AUTOCOMPUTER CO., LTD. +00204C MITRON COMPUTER PTE LTD. +00204D INOVIS GMBH +00204E NETWORK SECURITY SYSTEMS, INC. +00204F DEUTSCHE AEROSPACE AG +002050 KOREA COMPUTER INC. +002051 Verilink Corporation +002052 RAGULA SYSTEMS +002053 HUNTSVILLE MICROSYSTEMS, INC. +002054 EASTERN RESEARCH, INC. +002055 ALTECH CO., LTD. +002056 NEOPRODUCTS +002057 TITZE DATENTECHNIK GmbH +002058 ALLIED SIGNAL INC. +002059 MIRO COMPUTER PRODUCTS AG +00205A COMPUTER IDENTICS +00205B Kentrox, LLC +00205C InterNet Systems of Florida, Inc. +00205D NANOMATIC OY +00205E CASTLE ROCK, INC. +00205F GAMMADATA COMPUTER GMBH +002060 ALCATEL ITALIA S.p.A. +002061 DYNATECH COMMUNICATIONS, INC. +002062 SCORPION LOGIC, LTD. +002063 WIPRO INFOTECH LTD. +002064 PROTEC MICROSYSTEMS, INC. +002065 SUPERNET NETWORKING INC. +002066 GENERAL MAGIC, INC. +002068 ISDYNE +002069 ISDN SYSTEMS CORPORATION +00206A OSAKA COMPUTER CORP. +00206B KONICA MINOLTA HOLDINGS, INC. +00206C EVERGREEN TECHNOLOGY CORP. +00206D DATA RACE, INC. +00206E XACT, INC. +00206F FLOWPOINT CORPORATION +002070 HYNET, LTD. +002071 IBR GMBH +002072 WORKLINK INNOVATIONS +002073 FUSION SYSTEMS CORPORATION +002074 SUNGWOON SYSTEMS +002075 MOTOROLA COMMUNICATION ISRAEL +002076 REUDO CORPORATION +002077 KARDIOS SYSTEMS CORP. +002078 RUNTOP, INC. +002079 MIKRON GMBH +00207A WiSE Communications, Inc. +00207B Intel Corporation +00207C AUTEC GmbH +00207D ADVANCED COMPUTER APPLICATIONS +00207E FINECOM Co., Ltd. +00207F KYOEI SANGYO CO., LTD. +002080 SYNERGY (UK) LTD. +002081 TITAN ELECTRONICS +002082 ONEAC CORPORATION +002083 PRESTICOM INCORPORATED +002084 OCE PRINTING SYSTEMS, GMBH +002085 EXIDE ELECTRONICS +002086 MICROTECH ELECTRONICS LIMITED +002087 MEMOTEC COMMUNICATIONS CORP. +002088 GLOBAL VILLAGE COMMUNICATION +002089 T3PLUS NETWORKING, INC. +00208A SONIX COMMUNICATIONS, LTD. +00208B LAPIS TECHNOLOGIES, INC. +00208C GALAXY NETWORKS, INC. +00208D CMD TECHNOLOGY +00208E CHEVIN SOFTWARE ENG. LTD. +00208F ECI TELECOM LTD. +002090 ADVANCED COMPRESSION TECHNOLOGY, INC. +002091 J125, NATIONAL SECURITY AGENCY +002092 CHESS ENGINEERING B.V. +002093 LANDINGS TECHNOLOGY CORP. +002094 CUBIX CORPORATION +002095 RIVA ELECTRONICS +002096 Invensys +002097 APPLIED SIGNAL TECHNOLOGY +002098 HECTRONIC AB +002099 BON ELECTRIC CO., LTD. +00209A THE 3DO COMPANY +00209B ERSAT ELECTRONIC GMBH +00209C PRIMARY ACCESS CORP. +00209D LIPPERT AUTOMATIONSTECHNIK +00209E BROWN'S OPERATING SYSTEM SERVICES, LTD. +00209F MERCURY COMPUTER SYSTEMS, INC. +0020A0 OA LABORATORY CO., LTD. +0020A1 DOVATRON +0020A2 GALCOM NETWORKING LTD. +0020A3 DIVICOM INC. +0020A4 MULTIPOINT NETWORKS +0020A5 API ENGINEERING +0020A6 PROXIM, INC. +0020A7 PAIRGAIN TECHNOLOGIES, INC. +0020A8 SAST TECHNOLOGY CORP. +0020A9 WHITE HORSE INDUSTRIAL +0020AA DIGIMEDIA VISION LTD. +0020AB MICRO INDUSTRIES CORP. +0020AC INTERFLEX DATENSYSTEME GMBH +0020AD LINQ SYSTEMS +0020AE ORNET DATA COMMUNICATION TECH. +0020AF 3COM CORPORATION +0020B0 GATEWAY DEVICES, INC. +0020B1 COMTECH RESEARCH INC. +0020B2 GKD Gesellschaft Fur Kommunikation Und Datentechnik +0020B3 SCLTEC COMMUNICATIONS SYSTEMS +0020B4 TERMA ELEKTRONIK AS +0020B5 YASKAWA ELECTRIC CORPORATION +0020B6 AGILE NETWORKS, INC. +0020B7 NAMAQUA COMPUTERWARE +0020B8 PRIME OPTION, INC. +0020B9 METRICOM, INC. +0020BA CENTER FOR HIGH PERFORMANCE +0020BB ZAX CORPORATION +0020BC Long Reach Networks Pty Ltd +0020BD NIOBRARA R & D CORPORATION +0020BE LAN ACCESS CORP. +0020BF AEHR TEST SYSTEMS +0020C0 PULSE ELECTRONICS, INC. +0020C1 TAIKO ELECTRIC WORKS, LTD. +0020C2 TEXAS MEMORY SYSTEMS, INC. +0020C3 COUNTER SOLUTIONS LTD. +0020C4 INET,INC. +0020C5 EAGLE TECHNOLOGY +0020C6 NECTEC +0020C7 AKAI Professional M.I. Corp. +0020C8 LARSCOM INCORPORATED +0020C9 VICTRON BV +0020CA DIGITAL OCEAN +0020CB PRETEC ELECTRONICS CORP. +0020CC DIGITAL SERVICES, LTD. +0020CD HYBRID NETWORKS, INC. +0020CE LOGICAL DESIGN GROUP, INC. +0020CF TEST & MEASUREMENT SYSTEMS INC +0020D0 VERSALYNX CORPORATION +0020D1 MICROCOMPUTER SYSTEMS (M) SDN. +0020D2 RAD DATA COMMUNICATIONS, LTD. +0020D3 OST (OUEST STANDARD TELEMATIQU +0020D4 CABLETRON - ZEITTNET INC. +0020D5 VIPA GMBH +0020D6 BREEZECOM +0020D7 JAPAN MINICOMPUTER SYSTEMS CO., Ltd. +0020D8 Nortel Networks +0020D9 PANASONIC TECHNOLOGIES, INC./MIECO-US +0020DA XYLAN CORPORATION +0020DB XNET TECHNOLOGY, INC. +0020DC DENSITRON TAIWAN LTD. +0020DD Cybertec Pty Ltd +0020DE JAPAN DIGITAL LABORAT'Y CO.LTD +0020DF KYOSAN ELECTRIC MFG. CO., LTD. +0020E0 Actiontec Electronics, Inc. +0020E1 ALAMAR ELECTRONICS +0020E2 INFORMATION RESOURCE ENGINEERING +0020E3 MCD KENCOM CORPORATION +0020E4 HSING TECH ENTERPRISE CO., LTD +0020E5 APEX DATA, INC. +0020E6 LIDKOPING MACHINE TOOLS AB +0020E7 B&W NUCLEAR SERVICE COMPANY +0020E8 DATATREK CORPORATION +0020E9 DANTEL +0020EA EFFICIENT NETWORKS, INC. +0020EB CINCINNATI MICROWAVE, INC. +0020EC TECHWARE SYSTEMS CORP. +0020ED GIGA-BYTE TECHNOLOGY CO., LTD. +0020EE GTECH CORPORATION +0020EF USC CORPORATION +0020F0 UNIVERSAL MICROELECTRONICS CO. +0020F1 ALTOS INDIA LIMITED +0020F2 SUN MICROSYSTEMS, INC. +0020F3 RAYNET CORPORATION +0020F4 SPECTRIX CORPORATION +0020F5 PANDATEL AG +0020F6 NET TEK AND KARLNET, INC. +0020F7 CYBERDATA +0020F8 CARRERA COMPUTERS, INC. +0020F9 PARALINK NETWORKS, INC. +0020FA GDE SYSTEMS, INC. +0020FB OCTEL COMMUNICATIONS CORP. +0020FC MATROX +0020FD ITV TECHNOLOGIES, INC. +0020FE TOPWARE INC. / GRAND COMPUTER +0020FF SYMMETRICAL TECHNOLOGIES +002654 3Com Corporation +003000 ALLWELL TECHNOLOGY CORP. +003001 SMP +003002 Expand Networks +003003 Phasys Ltd. +003004 LEADTEK RESEARCH INC. +003005 Fujitsu Siemens Computers +003006 SUPERPOWER COMPUTER +003007 OPTI, INC. +003008 AVIO DIGITAL, INC. +003009 Tachion Networks, Inc. +00300A AZTECH SYSTEMS LTD. +00300B mPHASE Technologies, Inc. +00300C CONGRUENCY, LTD. +00300D MMC Technology, Inc. +00300E Klotz Digital AG +00300F IMT - Information Management T +003010 VISIONETICS INTERNATIONAL +003011 HMS FIELDBUS SYSTEMS AB +003012 DIGITAL ENGINEERING LTD. +003013 NEC Corporation +003014 DIVIO, INC. +003015 CP CLARE CORP. +003016 ISHIDA CO., LTD. +003017 BlueArc UK Ltd +003018 Jetway Information Co., Ltd. +003019 CISCO SYSTEMS, INC. +00301A SMARTBRIDGES PTE. LTD. +00301B SHUTTLE, INC. +00301C ALTVATER AIRDATA SYSTEMS +00301D SKYSTREAM, INC. +00301E 3COM Europe Ltd. +00301F OPTICAL NETWORKS, INC. +003020 TSI, Inc.. +003021 HSING TECH. ENTERPRISE CO.,LTD +003022 Fong Kai Industrial Co., Ltd. +003023 COGENT COMPUTER SYSTEMS, INC. +003024 CISCO SYSTEMS, INC. +003025 CHECKOUT COMPUTER SYSTEMS, LTD +003026 HeiTel Digital Video GmbH +003027 KERBANGO, INC. +003028 FASE Saldatura srl +003029 OPICOM +00302A SOUTHERN INFORMATION +00302B INALP NETWORKS, INC. +00302C SYLANTRO SYSTEMS CORPORATION +00302D QUANTUM BRIDGE COMMUNICATIONS +00302E Hoft & Wessel AG +00302F Smiths Industries +003030 HARMONIX CORPORATION +003031 LIGHTWAVE COMMUNICATIONS, INC. +003032 MagicRam, Inc. +003033 ORIENT TELECOM CO., LTD. +003036 RMP ELEKTRONIKSYSTEME GMBH +003037 Packard Bell Nec Services +003038 XCP, INC. +003039 SOFTBOOK PRESS +00303A MAATEL +00303B PowerCom Technology +00303C ONNTO CORP. +00303D IVA CORPORATION +00303E Radcom Ltd. +00303F TurboComm Tech Inc. +003040 CISCO SYSTEMS, INC. +003041 SAEJIN T & M CO., LTD. +003042 DeTeWe-Deutsche Telephonwerke +003043 IDREAM TECHNOLOGIES, PTE. LTD. +003044 Portsmith LLC +003045 Village Networks, Inc. (VNI) +003046 Controlled Electronic Manageme +003047 NISSEI ELECTRIC CO., LTD. +003048 Supermicro Computer, Inc. +003049 BRYANT TECHNOLOGY, LTD. +00304A Fraunhofer IPMS +00304B ORBACOM SYSTEMS, INC. +00304C APPIAN COMMUNICATIONS, INC. +00304D ESI +00304E BUSTEC PRODUCTION LTD. +00304F PLANET Technology Corporation +003050 Versa Technology +003051 ORBIT AVIONIC & COMMUNICATION +003052 ELASTIC NETWORKS +003053 Basler AG +003054 CASTLENET TECHNOLOGY, INC. +003055 Hitachi Semiconductor America, +003056 Beck IPC GmbH +003057 QTelNet, Inc. +003058 API MOTION +003059 DIGITAL-LOGIC AG +00305A TELGEN CORPORATION +00305B MODULE DEPARTMENT +00305C SMAR Laboratories Corp. +00305D DIGITRA SYSTEMS, INC. +00305E Abelko Innovation +00305F IMACON APS +003060 STARMATIX, INC. +003061 MobyTEL +003062 PATH 1 NETWORK TECHNOL'S INC. +003063 SANTERA SYSTEMS, INC. +003064 ADLINK TECHNOLOGY, INC. +003065 APPLE COMPUTER, INC. +003066 DIGITAL WIRELESS CORPORATION +003067 BIOSTAR MICROTECH INT'L CORP. +003068 CYBERNETICS TECH. CO., LTD. +003069 IMPACCT TECHNOLOGY CORP. +00306A PENTA MEDIA CO., LTD. +00306B CMOS SYSTEMS, INC. +00306C Hitex Holding GmbH +00306D LUCENT TECHNOLOGIES +00306E HEWLETT PACKARD +00306F SEYEON TECH. CO., LTD. +003070 1Net Corporation +003071 Cisco Systems, Inc. +003072 INTELLIBYTE INC. +003073 International Microsystems, In +003074 EQUIINET LTD. +003075 ADTECH +003076 Akamba Corporation +003077 ONPREM NETWORKS +003078 Cisco Systems, Inc. +003079 CQOS, INC. +00307A Advanced Technology & Systems +00307B Cisco Systems, Inc. +00307C ADID SA +00307D GRE AMERICA, INC. +00307E Redflex Communication Systems +00307F IRLAN LTD. +003080 CISCO SYSTEMS, INC. +003081 ALTOS C&C +003082 TAIHAN ELECTRIC WIRE CO., LTD. +003083 Ivron Systems +003084 ALLIED TELESYN INTERNAIONAL +003085 CISCO SYSTEMS, INC. +003086 Transistor Devices, Inc. +003087 VEGA GRIESHABER KG +003088 Siara Systems, Inc. +003089 Spectrapoint Wireless, LLC +00308A NICOTRA SISTEMI S.P.A +00308B Brix Networks +00308C ADVANCED DIGITAL INFORMATION +00308D PINNACLE SYSTEMS, INC. +00308E CROSS MATCH TECHNOLOGIES, INC. +00308F MICRILOR, Inc. +003090 CYRA TECHNOLOGIES, INC. +003091 TAIWAN FIRST LINE ELEC. CORP. +003092 ModuNORM GmbH +003093 SONNET TECHNOLOGIES, INC. +003094 Cisco Systems, Inc. +003095 Procomp Informatics, Ltd. +003096 CISCO SYSTEMS, INC. +003097 EXOMATIC AB +003098 Global Converging Technologies +003099 BOENIG UND KALLENBACH OHG +00309A ASTRO TERRA CORP. +00309B Smartware +00309C Timing Applications, Inc. +00309D Nimble Microsystems, Inc. +00309E WORKBIT CORPORATION. +00309F AMBER NETWORKS +0030A0 TYCO SUBMARINE SYSTEMS, LTD. +0030A1 WEBGATE Inc. +0030A2 Lightner Engineering +0030A3 CISCO SYSTEMS, INC. +0030A4 Woodwind Communications System +0030A5 ACTIVE POWER +0030A6 VIANET TECHNOLOGIES, LTD. +0030A7 SCHWEITZER ENGINEERING +0030A8 OL'E COMMUNICATIONS, INC. +0030A9 Netiverse, Inc. +0030AA AXUS MICROSYSTEMS, INC. +0030AB DELTA NETWORKS, INC. +0030AC Systeme Lauer GmbH & Co., Ltd. +0030AD SHANGHAI COMMUNICATION +0030AE Times N System, Inc. +0030AF Honeywell GmbH +0030B0 Convergenet Technologies +0030B1 aXess-pro networks GmbH +0030B2 WESCAM - HEALDSBURG +0030B3 San Valley Systems, Inc. +0030B4 INTERSIL CORP. +0030B5 Tadiran Microwave Networks +0030B6 CISCO SYSTEMS, INC. +0030B7 Teletrol Systems, Inc. +0030B8 RiverDelta Networks +0030B9 ECTEL +0030BA AC&T SYSTEM CO., LTD. +0030BB CacheFlow, Inc. +0030BC Optronic AG +0030BD BELKIN COMPONENTS +0030BE City-Net Technology, Inc. +0030BF MULTIDATA GMBH +0030C0 Lara Technology, Inc. +0030C1 HEWLETT-PACKARD +0030C2 COMONE +0030C3 FLUECKIGER ELEKTRONIK AG +0030C4 Niigata Canotec Co., Inc. +0030C5 CADENCE DESIGN SYSTEMS +0030C6 CONTROL SOLUTIONS, INC. +0030C7 MACROMATE CORP. +0030C8 GAD LINE, LTD. +0030C9 LuxN, N +0030CA Discovery Com +0030CB OMNI FLOW COMPUTERS, INC. +0030CC Tenor Networks, Inc. +0030CD CONEXANT SYSTEMS, INC. +0030CE Zaffire +0030CF TWO TECHNOLOGIES, INC. +0030D0 Tellabs +0030D1 INOVA CORPORATION +0030D2 WIN TECHNOLOGIES, CO., LTD. +0030D3 Agilent Technologies +0030D4 COMTIER +0030D5 DResearch GmbH +0030D6 MSC VERTRIEBS GMBH +0030D7 Innovative Systems, L.L.C. +0030D8 SITEK +0030D9 DATACORE SOFTWARE CORP. +0030DA COMTREND CO. +0030DB Mindready Solutions, Inc. +0030DC RIGHTECH CORPORATION +0030DD INDIGITA CORPORATION +0030DE WAGO Kontakttechnik GmbH +0030DF KB/TEL TELECOMUNICACIONES +0030E0 OXFORD SEMICONDUCTOR LTD. +0030E1 ACROTRON SYSTEMS, INC. +0030E2 GARNET SYSTEMS CO., LTD. +0030E3 SEDONA NETWORKS CORP. +0030E4 CHIYODA SYSTEM RIKEN +0030E5 Amper Datos S.A. +0030E6 SIEMENS MEDICAL SYSTEMS +0030E7 CNF MOBILE SOLUTIONS, INC. +0030E8 ENSIM CORP. +0030E9 GMA COMMUNICATION MANUFACT'G +0030EA TeraForce Technology Corporation +0030EB TURBONET COMMUNICATIONS, INC. +0030EC BORGARDT +0030ED Expert Magnetics Corp. +0030EE DSG Technology, Inc. +0030EF NEON TECHNOLOGY, INC. +0030F0 Uniform Industrial Corp. +0030F1 Accton Technology Corp. +0030F2 CISCO SYSTEMS, INC. +0030F3 At Work Computers +0030F4 STARDOT TECHNOLOGIES +0030F5 Wild Lab. Ltd. +0030F6 SECURELOGIX CORPORATION +0030F7 RAMIX INC. +0030F8 Dynapro Systems, Inc. +0030F9 Sollae Systems Co., Ltd. +0030FA TELICA, INC. +0030FB AZS Technology AG +0030FC Terawave Communications, Inc. +0030FD INTEGRATED SYSTEMS DESIGN +0030FE DSA GmbH +0030FF DATAFAB SYSTEMS, INC. +004000 PCI COMPONENTES DA AMZONIA LTD +004001 ZYXEL COMMUNICATIONS, INC. +004002 PERLE SYSTEMS LIMITED +004003 WESTINGHOUSE PROCESS CONTROL +004004 ICM CO. LTD. +004005 ANI COMMUNICATIONS INC. +004006 SAMPO TECHNOLOGY CORPORATION +004007 TELMAT INFORMATIQUE +004008 A PLUS INFO CORPORATION +004009 TACHIBANA TECTRON CO., LTD. +00400A PIVOTAL TECHNOLOGIES, INC. +00400B CISCO SYSTEMS, INC. +00400C GENERAL MICRO SYSTEMS, INC. +00400D LANNET DATA COMMUNICATIONS,LTD +00400E MEMOTEC COMMUNICATIONS, INC. +00400F DATACOM TECHNOLOGIES +004010 SONIC SYSTEMS, INC. +004011 ANDOVER CONTROLS CORPORATION +004012 WINDATA, INC. +004013 NTT DATA COMM. SYSTEMS CORP. +004014 COMSOFT GMBH +004015 ASCOM INFRASYS AG +004016 HADAX ELECTRONICS, INC. +004017 TROY Group, Inc. +004018 ADOBE SYSTEMS, INC. +004019 AEON SYSTEMS, INC. +00401A FUJI ELECTRIC CO., LTD. +00401B PRINTER SYSTEMS CORP. +00401C AST RESEARCH, INC. +00401D INVISIBLE SOFTWARE, INC. +00401E ICC +00401F COLORGRAPH LTD +004020 PINACL COMMUNICATION +004021 RASTER GRAPHICS +004022 KLEVER COMPUTERS, INC. +004023 LOGIC CORPORATION +004024 COMPAC INC. +004025 MOLECULAR DYNAMICS +004026 MELCO, INC. +004027 SMC MASSACHUSETTS, INC. +004028 NETCOMM LIMITED +004029 COMPEX +00402A CANOGA-PERKINS +00402B TRIGEM COMPUTER, INC. +00402C ISIS DISTRIBUTED SYSTEMS, INC. +00402D HARRIS ADACOM CORPORATION +00402E PRECISION SOFTWARE, INC. +00402F XLNT DESIGNS INC. +004030 GK COMPUTER +004031 KOKUSAI ELECTRIC CO., LTD +004032 DIGITAL COMMUNICATIONS +004033 ADDTRON TECHNOLOGY CO., LTD. +004034 BUSTEK CORPORATION +004035 OPCOM +004036 TRIBE COMPUTER WORKS, INC. +004037 SEA-ILAN, INC. +004038 TALENT ELECTRIC INCORPORATED +004039 OPTEC DAIICHI DENKO CO., LTD. +00403A IMPACT TECHNOLOGIES +00403B SYNERJET INTERNATIONAL CORP. +00403C FORKS, INC. +00403D TERADATA +00403E RASTER OPS CORPORATION +00403F SSANGYONG COMPUTER SYSTEMS +004040 RING ACCESS, INC. +004041 FUJIKURA LTD. +004042 N.A.T. GMBH +004043 NOKIA TELECOMMUNICATIONS +004044 QNIX COMPUTER CO., LTD. +004045 TWINHEAD CORPORATION +004046 UDC RESEARCH LIMITED +004047 WIND RIVER SYSTEMS +004048 SMD INFORMATICA S.A. +004049 TEGIMENTA AG +00404A WEST AUSTRALIAN DEPARTMENT +00404B MAPLE COMPUTER SYSTEMS +00404C HYPERTEC PTY LTD. +00404D TELECOMMUNICATIONS TECHNIQUES +00404E FLUENT, INC. +00404F SPACE & NAVAL WARFARE SYSTEMS +004050 IRONICS, INCORPORATED +004051 GRACILIS, INC. +004052 STAR TECHNOLOGIES, INC. +004053 AMPRO COMPUTERS +004054 CONNECTION MACHINES SERVICES +004055 METRONIX GMBH +004056 MCM JAPAN LTD. +004057 LOCKHEED - SANDERS +004058 KRONOS, INC. +004059 YOSHIDA KOGYO K. K. +00405A GOLDSTAR INFORMATION & COMM. +00405B FUNASSET LIMITED +00405C FUTURE SYSTEMS, INC. +00405D STAR-TEK, INC. +00405E NORTH HILLS ISRAEL +00405F AFE COMPUTERS LTD. +004060 COMENDEC LTD +004061 DATATECH ENTERPRISES CO., LTD. +004062 E-SYSTEMS, INC./GARLAND DIV. +004063 VIA TECHNOLOGIES, INC. +004064 KLA INSTRUMENTS CORPORATION +004065 GTE SPACENET +004066 HITACHI CABLE, LTD. +004067 OMNIBYTE CORPORATION +004068 EXTENDED SYSTEMS +004069 LEMCOM SYSTEMS, INC. +00406A KENTEK INFORMATION SYSTEMS,INC +00406B SYSGEN +00406C COPERNIQUE +00406D LANCO, INC. +00406E COROLLARY, INC. +00406F SYNC RESEARCH INC. +004070 INTERWARE CO., LTD. +004071 ATM COMPUTER GMBH +004072 Applied Innovation Inc. +004073 BASS ASSOCIATES +004074 CABLE AND WIRELESS +004075 M-TRADE (UK) LTD +004076 Sun Conversion Technologies +004077 MAXTON TECHNOLOGY CORPORATION +004078 WEARNES AUTOMATION PTE LTD +004079 JUKO MANUFACTURE COMPANY, LTD. +00407A SOCIETE D'EXPLOITATION DU CNIT +00407B SCIENTIFIC ATLANTA +00407C QUME CORPORATION +00407D EXTENSION TECHNOLOGY CORP. +00407E EVERGREEN SYSTEMS, INC. +00407F FLIR Systems +004080 ATHENIX CORPORATION +004081 MANNESMANN SCANGRAPHIC GMBH +004082 LABORATORY EQUIPMENT CORP. +004083 TDA INDUSTRIA DE PRODUTOS +004084 HONEYWELL INC. +004085 SAAB INSTRUMENTS AB +004086 MICHELS & KLEBERHOFF COMPUTER +004087 UBITREX CORPORATION +004088 MOBIUS TECHNOLOGIES, INC. +004089 MEIDENSHA CORPORATION +00408A TPS TELEPROCESSING SYS. GMBH +00408B RAYLAN CORPORATION +00408C AXIS COMMUNICATIONS AB +00408D THE GOODYEAR TIRE & RUBBER CO. +00408E DIGILOG, INC. +00408F WM-DATA MINFO AB +004090 ANSEL COMMUNICATIONS +004091 PROCOMP INDUSTRIA ELETRONICA +004092 ASP COMPUTER PRODUCTS, INC. +004093 PAXDATA NETWORKS LTD. +004094 SHOGRAPHICS, INC. +004095 R.P.T. INTERGROUPS INT'L LTD. +004096 Aironet Wireless Communication +004097 DATEX DIVISION OF +004098 DRESSLER GMBH & CO. +004099 NEWGEN SYSTEMS CORP. +00409A NETWORK EXPRESS, INC. +00409B HAL COMPUTER SYSTEMS INC. +00409C TRANSWARE +00409D DIGIBOARD, INC. +00409E CONCURRENT TECHNOLOGIES LTD. +00409F LANCAST/CASAT TECHNOLOGY, INC. +0040A0 GOLDSTAR CO., LTD. +0040A1 ERGO COMPUTING +0040A2 KINGSTAR TECHNOLOGY INC. +0040A3 MICROUNITY SYSTEMS ENGINEERING +0040A4 ROSE ELECTRONICS +0040A5 CLINICOMP INTL. +0040A6 Cray, Inc. +0040A7 ITAUTEC PHILCO S.A. +0040A8 IMF INTERNATIONAL LTD. +0040A9 DATACOM INC. +0040AA VALMET AUTOMATION INC. +0040AB ROLAND DG CORPORATION +0040AC SUPER WORKSTATION, INC. +0040AD SMA REGELSYSTEME GMBH +0040AE DELTA CONTROLS, INC. +0040AF DIGITAL PRODUCTS, INC. +0040B0 BYTEX CORPORATION, ENGINEERING +0040B1 CODONICS INC. +0040B2 SYSTEMFORSCHUNG +0040B3 PAR MICROSYSTEMS CORPORATION +0040B4 NEXTCOM K.K. +0040B5 VIDEO TECHNOLOGY COMPUTERS LTD +0040B6 COMPUTERM CORPORATION +0040B7 STEALTH COMPUTER SYSTEMS +0040B8 IDEA ASSOCIATES +0040B9 MACQ ELECTRONIQUE SA +0040BA ALLIANT COMPUTER SYSTEMS CORP. +0040BB GOLDSTAR CABLE CO., LTD. +0040BC ALGORITHMICS LTD. +0040BD STARLIGHT NETWORKS, INC. +0040BE BOEING DEFENSE & SPACE +0040BF CHANNEL SYSTEMS INTERN'L INC. +0040C0 VISTA CONTROLS CORPORATION +0040C1 BIZERBA-WERKE WILHEIM KRAUT +0040C2 APPLIED COMPUTING DEVICES +0040C3 FISCHER AND PORTER CO. +0040C4 KINKEI SYSTEM CORPORATION +0040C5 MICOM COMMUNICATIONS INC. +0040C6 FIBERNET RESEARCH, INC. +0040C7 RUBY TECH CORPORATION +0040C8 MILAN TECHNOLOGY CORPORATION +0040C9 NCUBE +0040CA FIRST INTERNAT'L COMPUTER, INC +0040CB LANWAN TECHNOLOGIES +0040CC SILCOM MANUF'G TECHNOLOGY INC. +0040CD TERA MICROSYSTEMS, INC. +0040CE NET-SOURCE, INC. +0040CF STRAWBERRY TREE, INC. +0040D0 MITAC INTERNATIONAL CORP. +0040D1 FUKUDA DENSHI CO., LTD. +0040D2 PAGINE CORPORATION +0040D3 KIMPSION INTERNATIONAL CORP. +0040D4 GAGE TALKER CORP. +0040D5 SARTORIUS AG +0040D6 LOCAMATION B.V. +0040D7 STUDIO GEN INC. +0040D8 OCEAN OFFICE AUTOMATION LTD. +0040D9 AMERICAN MEGATRENDS INC. +0040DA TELSPEC LTD +0040DB ADVANCED TECHNICAL SOLUTIONS +0040DC TRITEC ELECTRONIC GMBH +0040DD HONG TECHNOLOGIES +0040DE ELETTRONICA SAN GIORGIO +0040DF DIGALOG SYSTEMS, INC. +0040E0 ATOMWIDE LTD. +0040E1 MARNER INTERNATIONAL, INC. +0040E2 MESA RIDGE TECHNOLOGIES, INC. +0040E3 QUIN SYSTEMS LTD +0040E4 E-M TECHNOLOGY, INC. +0040E5 SYBUS CORPORATION +0040E6 C.A.E.N. +0040E7 ARNOS INSTRUMENTS & COMPUTER +0040E8 CHARLES RIVER DATA SYSTEMS,INC +0040E9 ACCORD SYSTEMS, INC. +0040EA PLAIN TREE SYSTEMS INC +0040EB MARTIN MARIETTA CORPORATION +0040EC MIKASA SYSTEM ENGINEERING +0040ED NETWORK CONTROLS INT'NATL INC. +0040EE OPTIMEM +0040EF HYPERCOM, INC. +0040F0 MICRO SYSTEMS, INC. +0040F1 CHUO ELECTRONICS CO., LTD. +0040F2 JANICH & KLASS COMPUTERTECHNIK +0040F3 NETCOR +0040F4 CAMEO COMMUNICATIONS, INC. +0040F5 OEM ENGINES +0040F6 KATRON COMPUTERS INC. +0040F7 POLAROID MEDICAL IMAGING SYS. +0040F8 SYSTEMHAUS DISCOM +0040F9 COMBINET +0040FA MICROBOARDS, INC. +0040FB CASCADE COMMUNICATIONS CORP. +0040FC IBR COMPUTER TECHNIK GMBH +0040FD LXE +0040FE SYMPLEX COMMUNICATIONS +0040FF TELEBIT CORPORATION +004252 RLX Technologies +005000 NEXO COMMUNICATIONS, INC. +005001 YAMASHITA SYSTEMS CORP. +005002 OMNISEC AG +005003 GRETAG MACBETH AG +005004 3COM CORPORATION +005006 TAC AB +005007 SIEMENS TELECOMMUNICATION SYSTEMS LIMITED +005008 TIVA MICROCOMPUTER CORP. (TMC) +005009 PHILIPS BROADBAND NETWORKS +00500A IRIS TECHNOLOGIES, INC. +00500B CISCO SYSTEMS, INC. +00500C e-Tek Labs, Inc. +00500D SATORI ELECTORIC CO., LTD. +00500E CHROMATIS NETWORKS, INC. +00500F CISCO SYSTEMS, INC. +005010 NovaNET Learning, Inc. +005012 CBL - GMBH +005013 Chaparral Network Storage +005014 CISCO SYSTEMS, INC. +005015 BRIGHT STAR ENGINEERING +005016 SST/WOODHEAD INDUSTRIES +005017 RSR S.R.L. +005018 AMIT, Inc. +005019 SPRING TIDE NETWORKS, INC. +00501A UISIQN +00501B ABL CANADA, INC. +00501C JATOM SYSTEMS, INC. +00501E Miranda Technologies, Inc. +00501F MRG SYSTEMS, LTD. +005020 MEDIASTAR CO., LTD. +005021 EIS INTERNATIONAL, INC. +005022 ZONET TECHNOLOGY, INC. +005023 PG DESIGN ELECTRONICS, INC. +005024 NAVIC SYSTEMS, INC. +005026 COSYSTEMS, INC. +005027 GENICOM CORPORATION +005028 AVAL COMMUNICATIONS +005029 1394 PRINTER WORKING GROUP +00502A CISCO SYSTEMS, INC. +00502B GENRAD LTD. +00502C SOYO COMPUTER, INC. +00502D ACCEL, INC. +00502E CAMBEX CORPORATION +00502F TollBridge Technologies, Inc. +005030 FUTURE PLUS SYSTEMS +005031 AEROFLEX LABORATORIES, INC. +005032 PICAZO COMMUNICATIONS, INC. +005033 MAYAN NETWORKS +005036 NETCAM, LTD. +005037 KOGA ELECTRONICS CO. +005038 DAIN TELECOM CO., LTD. +005039 MARINER NETWORKS +00503A DATONG ELECTRONICS LTD. +00503B MEDIAFIRE CORPORATION +00503C TSINGHUA NOVEL ELECTRONICS +00503E CISCO SYSTEMS, INC. +00503F ANCHOR GAMES +005040 EMWARE, INC. +005041 CTX OPTO ELECTRONIC CORP. +005042 SCI MANUFACTURING SINGAPORE PTE, LTD. +005043 MARVELL SEMICONDUCTOR, INC. +005044 ASACA CORPORATION +005045 RIOWORKS SOLUTIONS, INC. +005046 MENICX INTERNATIONAL CO., LTD. +005048 INFOLIBRIA +005049 ELLACOYA NETWORKS, INC. +00504A ELTECO A.S. +00504B BARCONET N.V. +00504C GALIL MOTION CONTROL, INC. +00504D TOKYO ELECTRON DEVICE LTD. +00504E SIERRA MONITOR CORP. +00504F OLENCOM ELECTRONICS +005050 CISCO SYSTEMS, INC. +005051 IWATSU ELECTRIC CO., LTD. +005052 TIARA NETWORKS, INC. +005053 CISCO SYSTEMS, INC. +005054 CISCO SYSTEMS, INC. +005055 DOMS A/S +005056 VMWare, Inc. +005057 BROADBAND ACCESS SYSTEMS +005058 VegaStream Limted +005059 SUITE TECHNOLOGY SYSTEMS NETWORK +00505A NETWORK ALCHEMY, INC. +00505B KAWASAKI LSI U.S.A., INC. +00505C TUNDO CORPORATION +00505E DIGITEK MICROLOGIC S.A. +00505F BRAND INNOVATORS +005060 TANDBERG TELECOM AS +005062 KOUWELL ELECTRONICS CORP. ** +005063 OY COMSEL SYSTEM AB +005064 CAE ELECTRONICS +005065 DENSEI-LAMBAD Co., Ltd. +005066 AtecoM GmbH advanced telecomunication modules +005067 AEROCOMM, INC. +005068 ELECTRONIC INDUSTRIES ASSOCIATION +005069 PixStream Incorporated +00506A EDEVA, INC. +00506B SPX-ATEG +00506C G & L BEIJER ELECTRONICS AB +00506D VIDEOJET SYSTEMS +00506E CORDER ENGINEERING CORPORATION +00506F G-CONNECT +005070 CHAINTECH COMPUTER CO., LTD. +005071 AIWA CO., LTD. +005072 CORVIS CORPORATION +005073 CISCO SYSTEMS, INC. +005074 ADVANCED HI-TECH CORP. +005075 KESTREL SOLUTIONS +005076 IBM +005077 PROLIFIC TECHNOLOGY, INC. +005078 MEGATON HOUSE, LTD. +00507A XPEED, INC. +00507B MERLOT COMMUNICATIONS +00507C VIDEOCON AG +00507D IFP +00507E NEWER TECHNOLOGY +00507F DrayTek Corp. +005080 CISCO SYSTEMS, INC. +005081 MURATA MACHINERY, LTD. +005082 FORESSON CORPORATION +005083 GILBARCO, INC. +005084 ATL PRODUCTS +005086 TELKOM SA, LTD. +005087 TERASAKI ELECTRIC CO., LTD. +005088 AMANO CORPORATION +005089 SAFETY MANAGEMENT SYSTEMS +00508B COMPAQ COMPUTER CORPORATION +00508C RSI SYSTEMS +00508D ABIT COMPUTER CORPORATION +00508E OPTIMATION, INC. +00508F ASITA TECHNOLOGIES INT'L LTD. +005090 DCTRI +005091 NETACCESS, INC. +005092 RIGAKU INDUSTRIAL CORPORATION +005093 BOEING +005094 PACE MICRO TECHNOLOGY PLC +005095 PERACOM NETWORKS +005096 SALIX TECHNOLOGIES, INC. +005097 MMC-EMBEDDED COMPUTERTECHNIK GmbH +005098 GLOBALOOP, LTD. +005099 3COM EUROPE, LTD. +00509A TAG ELECTRONIC SYSTEMS +00509B SWITCHCORE AB +00509C BETA RESEARCH +00509D THE INDUSTREE B.V. +00509E Les Technologies SoftAcoustik Inc. +00509F HORIZON COMPUTER +0050A0 DELTA COMPUTER SYSTEMS, INC. +0050A1 CARLO GAVAZZI, INC. +0050A2 CISCO SYSTEMS, INC. +0050A3 TransMedia Communications, Inc. +0050A4 IO TECH, INC. +0050A5 CAPITOL BUSINESS SYSTEMS, LTD. +0050A6 OPTRONICS +0050A7 CISCO SYSTEMS, INC. +0050A8 OpenCon Systems, Inc. +0050A9 MOLDAT WIRELESS TECHNOLGIES +0050AA KONICA MINOLTA HOLDINGS, INC. +0050AB NALTEC, INC. +0050AC MAPLE COMPUTER CORPORATION +0050AD CommUnique Wireless Corp. +0050AE IWAKI ELECTRONICS CO., LTD. +0050AF INTERGON, INC. +0050B0 TECHNOLOGY ATLANTA CORPORATION +0050B1 GIDDINGS & LEWIS +0050B2 BRODEL AUTOMATION +0050B3 VOICEBOARD CORPORATION +0050B4 SATCHWELL CONTROL SYSTEMS, LTD +0050B5 FICHET-BAUCHE +0050B6 GOOD WAY IND. CO., LTD. +0050B7 BOSER TECHNOLOGY CO., LTD. +0050B8 INOVA COMPUTERS GMBH & CO. KG +0050B9 XITRON TECHNOLOGIES, INC. +0050BA D-LINK +0050BB CMS TECHNOLOGIES +0050BC HAMMER STORAGE SOLUTIONS +0050BD CISCO SYSTEMS, INC. +0050BE FAST MULTIMEDIA AG +0050BF MOTOTECH INC. +0050C0 GATAN, INC. +0050C1 GEMFLEX NETWORKS, LTD. +0050C2 IEEE REGISTRATION AUTHORITY +0050C4 IMD +0050C5 ADS TECHNOLOGIES, INC. +0050C6 LOOP TELECOMMUNICATION INTERNATIONAL, INC. +0050C8 ADDONICS COMMUNICATIONS, INC. +0050C9 MASPRO DENKOH CORP. +0050CA NET TO NET TECHNOLOGIES +0050CB JETTER +0050CC XYRATEX +0050CD DIGIANSWER A/S +0050CE LG INTERNATIONAL CORP. +0050CF VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE +0050D0 MINERVA SYSTEMS +0050D1 CISCO SYSTEMS, INC. +0050D2 CMC Electronics Inc +0050D3 DIGITAL AUDIO PROCESSING PTY. LTD. +0050D4 JOOHONG INFORMATION & +0050D5 AD SYSTEMS CORP. +0050D6 ATLAS COPCO TOOLS AB +0050D7 TELSTRAT +0050D8 UNICORN COMPUTER CORP. +0050D9 ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA +0050DA 3COM CORPORATION +0050DB CONTEMPORARY CONTROL +0050DC TAS TELEFONBAU A. SCHWABE GMBH & CO. KG +0050DD SERRA SOLDADURA, S.A. +0050DE SIGNUM SYSTEMS CORP. +0050DF AirFiber, Inc. +0050E1 NS TECH ELECTRONICS SDN BHD +0050E2 CISCO SYSTEMS, INC. +0050E3 Terayon Communications Systems +0050E4 APPLE COMPUTER, INC. +0050E6 HAKUSAN CORPORATION +0050E7 PARADISE INNOVATIONS (ASIA) +0050E8 NOMADIX INC. +0050EA XEL COMMUNICATIONS, INC. +0050EB ALPHA-TOP CORPORATION +0050EC OLICOM A/S +0050ED ANDA NETWORKS +0050EE TEK DIGITEL CORPORATION +0050EF SPE Systemhaus GmbH +0050F0 CISCO SYSTEMS, INC. +0050F1 LIBIT SIGNAL PROCESSING, LTD. +0050F2 MICROSOFT CORP. +0050F3 GLOBAL NET INFORMATION CO., Ltd. +0050F4 SIGMATEK GMBH & CO. KG +0050F6 PAN-INTERNATIONAL INDUSTRIAL CORP. +0050F7 VENTURE MANUFACTURING (SINGAPORE) LTD. +0050F8 ENTREGA TECHNOLOGIES, INC. +0050FA OXTEL, LTD. +0050FB VSK ELECTRONICS +0050FC EDIMAX TECHNOLOGY CO., LTD. +0050FD VISIONCOMM CO., LTD. +0050FE PCTVnet ASA +0050FF HAKKO ELECTRONICS CO., LTD. +006000 XYCOM INC. +006001 InnoSys, Inc. +006002 SCREEN SUBTITLING SYSTEMS, LTD +006003 TERAOKA WEIGH SYSTEM PTE, LTD. +006004 COMPUTADORES MODULARES SA +006005 FEEDBACK DATA LTD. +006006 SOTEC CO., LTD +006007 ACRES GAMING, INC. +006008 3COM CORPORATION +006009 CISCO SYSTEMS, INC. +00600A SORD COMPUTER CORPORATION +00600B LOGWARE GmbH +00600C APPLIED DATA SYSTEMS, INC. +00600D Digital Logic GmbH +00600E WAVENET INTERNATIONAL, INC. +00600F WESTELL, INC. +006010 NETWORK MACHINES, INC. +006011 CRYSTAL SEMICONDUCTOR CORP. +006012 POWER COMPUTING CORPORATION +006013 NETSTAL MASCHINEN AG +006014 EDEC CO., LTD. +006015 NET2NET CORPORATION +006016 CLARIION +006017 TOKIMEC INC. +006018 STELLAR ONE CORPORATION +006019 Roche Diagnostics +00601A KEITHLEY INSTRUMENTS +00601B MESA ELECTRONICS +00601C TELXON CORPORATION +00601D LUCENT TECHNOLOGIES +00601E SOFTLAB, INC. +00601F STALLION TECHNOLOGIES +006020 PIVOTAL NETWORKING, INC. +006021 DSC CORPORATION +006022 VICOM SYSTEMS, INC. +006023 PERICOM SEMICONDUCTOR CORP. +006024 GRADIENT TECHNOLOGIES, INC. +006025 ACTIVE IMAGING PLC +006026 VIKING COMPONENTS, INC. +006027 Superior Modular Products +006028 MACROVISION CORPORATION +006029 CARY PERIPHERALS INC. +00602A SYMICRON COMPUTER COMMUNICATIONS, LTD. +00602B PEAK AUDIO +00602C LINX Data Terminals, Inc. +00602D ALERTON TECHNOLOGIES, INC. +00602E CYCLADES CORPORATION +00602F CISCO SYSTEMS, INC. +006030 VILLAGE TRONIC ENTWICKLUNG +006031 HRK SYSTEMS +006032 I-CUBE, INC. +006033 ACUITY IMAGING, INC. +006034 ROBERT BOSCH GmbH +006035 DALLAS SEMICONDUCTOR, INC. +006036 AUSTRIAN RESEARCH CENTER SEIBERSDORF +006037 PHILIPS SEMICONDUCTORS +006038 Nortel Networks +006039 SanCom Technology, Inc. +00603A QUICK CONTROLS LTD. +00603B AMTEC spa +00603C HAGIWARA SYS-COM CO., LTD. +00603D 3CX +00603E CISCO SYSTEMS, INC. +00603F PATAPSCO DESIGNS +006040 NETRO CORP. +006041 Yokogawa Electric Corporation +006042 TKS (USA), INC. +006043 ComSoft Systems, Inc. +006044 LITTON/POLY-SCIENTIFIC +006045 PATHLIGHT TECHNOLOGIES +006046 VMETRO, INC. +006047 CISCO SYSTEMS, INC. +006048 EMC CORPORATION +006049 VINA TECHNOLOGIES +00604A SAIC IDEAS GROUP +00604B BIODATA GmbH +00604C SAGEM SA +00604D MMC NETWORKS, INC. +00604E CYCLE COMPUTER CORPORATION, INC. +00604F SUZUKI MFG. CO., LTD. +006050 INTERNIX INC. +006051 QUALITY SEMICONDUCTOR +006052 PERIPHERALS ENTERPRISE CO., Ltd. +006053 TOYODA MACHINE WORKS, LTD. +006054 CONTROLWARE GMBH +006055 CORNELL UNIVERSITY +006056 NETWORK TOOLS, INC. +006057 MURATA MANUFACTURING CO., LTD. +006058 COPPER MOUNTAIN COMMUNICATIONS, INC. +006059 TECHNICAL COMMUNICATIONS CORP. +00605A CELCORE, INC. +00605B IntraServer Technology, Inc. +00605C CISCO SYSTEMS, INC. +00605D SCANIVALVE CORP. +00605E LIBERTY TECHNOLOGY NETWORKING +00605F NIPPON UNISOFT CORPORATION +006060 DAWNING TECHNOLOGIES, INC. +006061 WHISTLE COMMUNICATIONS CORP. +006062 TELESYNC, INC. +006063 PSION DACOM PLC. +006064 NETCOMM LIMITED +006065 BERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH +006066 LACROIX TECHNOLGIE +006067 ACER NETXUS INC. +006068 EICON TECHNOLOGY CORPORATION +006069 BROCADE COMMUNICATIONS SYSTEMS, Inc. +00606A MITSUBISHI WIRELESS COMMUNICATIONS. INC. +00606B Synclayer Inc. +00606C ARESCOM +00606D DIGITAL EQUIPMENT CORP. +00606E DAVICOM SEMICONDUCTOR, INC. +00606F CLARION CORPORATION OF AMERICA +006070 CISCO SYSTEMS, INC. +006071 MIDAS LAB, INC. +006072 VXL INSTRUMENTS, LIMITED +006073 REDCREEK COMMUNICATIONS, INC. +006074 QSC AUDIO PRODUCTS +006075 PENTEK, INC. +006076 SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS +006077 PRISA NETWORKS +006078 POWER MEASUREMENT LTD. +006079 Mainstream Data, Inc. +00607A DVS GmbH +00607B FORE SYSTEMS, INC. +00607C WaveAccess, Ltd. +00607D SENTIENT NETWORKS INC. +00607E GIGALABS, INC. +00607F AURORA TECHNOLOGIES, INC. +006080 MICROTRONIX DATACOM LTD. +006081 TV/COM INTERNATIONAL +006082 NOVALINK TECHNOLOGIES, INC. +006083 CISCO SYSTEMS, INC. +006084 DIGITAL VIDEO +006085 Storage Concepts +006086 LOGIC REPLACEMENT TECH. LTD. +006087 KANSAI ELECTRIC CO., LTD. +006088 WHITE MOUNTAIN DSP, INC. +006089 XATA +00608A CITADEL COMPUTER +00608B ConferTech International +00608C 3COM CORPORATION +00608D UNIPULSE CORP. +00608E HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH +00608F TEKRAM TECHNOLOGY CO., LTD. +006090 ABLE COMMUNICATIONS, INC. +006091 FIRST PACIFIC NETWORKS, INC. +006092 MICRO/SYS, INC. +006093 VARIAN +006094 IBM CORP. +006095 ACCU-TIME SYSTEMS, INC. +006096 T.S. MICROTECH INC. +006097 3COM CORPORATION +006098 HT COMMUNICATIONS +006099 SBE, Inc. +00609A NJK TECHNO CO. +00609B ASTRO-MED, INC. +00609C Perkin-Elmer Incorporated +00609D PMI FOOD EQUIPMENT GROUP +00609E ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS +00609F PHAST CORPORATION +0060A0 SWITCHED NETWORK TECHNOLOGIES, INC. +0060A1 VPNet, Inc. +0060A2 NIHON UNISYS LIMITED CO. +0060A3 CONTINUUM TECHNOLOGY CORP. +0060A4 GRINAKER SYSTEM TECHNOLOGIES +0060A5 PERFORMANCE TELECOM CORP. +0060A6 PARTICLE MEASURING SYSTEMS +0060A7 MICROSENS GmbH & CO. KG +0060A8 TIDOMAT AB +0060A9 GESYTEC MbH +0060AA INTELLIGENT DEVICES INC. (IDI) +0060AB LARSCOM INCORPORATED +0060AC RESILIENCE CORPORATION +0060AD MegaChips Corporation +0060AE TRIO INFORMATION SYSTEMS AB +0060AF PACIFIC MICRO DATA, INC. +0060B0 HEWLETT-PACKARD CO. +0060B1 INPUT/OUTPUT, INC. +0060B2 PROCESS CONTROL CORP. +0060B3 Z-COM, INC. +0060B4 GLENAYRE R&D INC. +0060B5 KEBA GmbH +0060B6 LAND COMPUTER CO., LTD. +0060B7 CHANNELMATIC, INC. +0060B8 CORELIS INC. +0060B9 NITSUKO CORPORATION +0060BA SAHARA NETWORKS, INC. +0060BB CABLETRON - NETLINK, INC. +0060BC KeunYoung Electronics & Communication Co., Ltd. +0060BD HUBBELL-PULSECOM +0060BE WEBTRONICS +0060BF MACRAIGOR SYSTEMS, INC. +0060C0 NERA AS +0060C1 WaveSpan Corporation +0060C2 MPL AG +0060C3 NETVISION CORPORATION +0060C4 SOLITON SYSTEMS K.K. +0060C5 ANCOT CORP. +0060C6 DCS AG +0060C7 AMATI COMMUNICATIONS CORP. +0060C8 KUKA WELDING SYSTEMS & ROBOTS +0060C9 ControlNet, Inc. +0060CA HARMONIC SYSTEMS INCORPORATED +0060CB HITACHI ZOSEN CORPORATION +0060CC EMTRAK, INCORPORATED +0060CD VideoServer, Inc. +0060CE ACCLAIM COMMUNICATIONS +0060CF ALTEON NETWORKS, INC. +0060D0 SNMP RESEARCH INCORPORATED +0060D1 CASCADE COMMUNICATIONS +0060D2 LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD. +0060D3 AT&T +0060D4 ELDAT COMMUNICATION LTD. +0060D5 MIYACHI TECHNOS CORP. +0060D6 NovAtel Wireless Technologies Ltd. +0060D7 ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL) +0060D8 ELMIC SYSTEMS, INC. +0060D9 TRANSYS NETWORKS INC. +0060DA JBM ELECTRONICS CO. +0060DB NTP ELEKTRONIK A/S +0060DC TOYO COMMUNICATION EQUIPMENT Co., Ltd. +0060DD MYRICOM, INC. +0060DE KAYSER-THREDE GmbH +0060DF CNT Corporation +0060E0 AXIOM TECHNOLOGY CO., LTD. +0060E1 ORCKIT COMMUNICATIONS LTD. +0060E2 QUEST ENGINEERING & DEVELOPMENT +0060E3 ARBIN INSTRUMENTS +0060E4 COMPUSERVE, INC. +0060E5 FUJI AUTOMATION CO., LTD. +0060E6 SHOMITI SYSTEMS INCORPORATED +0060E7 RANDATA +0060E8 HITACHI COMPUTER PRODUCTS (AMERICA), INC. +0060E9 ATOP TECHNOLOGIES, INC. +0060EA StreamLogic +0060EB FOURTHTRACK SYSTEMS +0060EC HERMARY OPTO ELECTRONICS INC. +0060ED RICARDO TEST AUTOMATION LTD. +0060EE APOLLO +0060EF FLYTECH TECHNOLOGY CO., LTD. +0060F0 JOHNSON & JOHNSON MEDICAL, INC +0060F1 EXP COMPUTER, INC. +0060F2 LASERGRAPHICS, INC. +0060F3 Performance Analysis Broadband, Spirent plc +0060F4 ADVANCED COMPUTER SOLUTIONS, Inc. +0060F5 ICON WEST, INC. +0060F6 NEXTEST COMMUNICATIONS PRODUCTS, INC. +0060F7 DATAFUSION SYSTEMS +0060F8 Loran International Technologies Inc. +0060F9 DIAMOND LANE COMMUNICATIONS +0060FA EDUCATIONAL TECHNOLOGY RESOURCES, INC. +0060FB PACKETEER, INC. +0060FC CONSERVATION THROUGH INNOVATION LTD. +0060FD NetICs, Inc. +0060FE LYNX SYSTEM DEVELOPERS, INC. +0060FF QuVis, Inc. +0070B0 M/A-COM INC. COMPANIES +0070B3 DATA RECALL LTD. +008000 MULTITECH SYSTEMS, INC. +008001 PERIPHONICS CORPORATION +008002 SATELCOM (UK) LTD +008003 HYTEC ELECTRONICS LTD. +008004 ANTLOW COMMUNICATIONS, LTD. +008005 CACTUS COMPUTER INC. +008006 COMPUADD CORPORATION +008007 DLOG NC-SYSTEME +008008 DYNATECH COMPUTER SYSTEMS +008009 JUPITER SYSTEMS, INC. +00800A JAPAN COMPUTER CORP. +00800B CSK CORPORATION +00800C VIDECOM LIMITED +00800D VOSSWINKEL F.U. +00800E ATLANTIX CORPORATION +00800F STANDARD MICROSYSTEMS +008010 COMMODORE INTERNATIONAL +008011 DIGITAL SYSTEMS INT'L. INC. +008012 INTEGRATED MEASUREMENT SYSTEMS +008013 THOMAS-CONRAD CORPORATION +008014 ESPRIT SYSTEMS +008015 SEIKO SYSTEMS, INC. +008016 WANDEL AND GOLTERMANN +008017 PFU LIMITED +008018 KOBE STEEL, LTD. +008019 DAYNA COMMUNICATIONS, INC. +00801A BELL ATLANTIC +00801B KODIAK TECHNOLOGY +00801C NEWPORT SYSTEMS SOLUTIONS +00801D INTEGRATED INFERENCE MACHINES +00801E XINETRON, INC. +00801F KRUPP ATLAS ELECTRONIK GMBH +008020 NETWORK PRODUCTS +008021 Alcatel Canada Inc. +008022 SCAN-OPTICS +008023 INTEGRATED BUSINESS NETWORKS +008024 KALPANA, INC. +008025 STOLLMANN GMBH +008026 NETWORK PRODUCTS CORPORATION +008027 ADAPTIVE SYSTEMS, INC. +008028 TRADPOST (HK) LTD +008029 EAGLE TECHNOLOGY, INC. +00802A TEST SYSTEMS & SIMULATIONS INC +00802B INTEGRATED MARKETING CO +00802C THE SAGE GROUP PLC +00802D XYLOGICS INC +00802E CASTLE ROCK COMPUTING +00802F NATIONAL INSTRUMENTS CORP. +008030 NEXUS ELECTRONICS +008031 BASYS, CORP. +008032 ACCESS CO., LTD. +008033 FORMATION, INC. +008034 SMT GOUPIL +008035 TECHNOLOGY WORKS, INC. +008036 REFLEX MANUFACTURING SYSTEMS +008037 Ericsson Group +008038 DATA RESEARCH & APPLICATIONS +008039 ALCATEL STC AUSTRALIA +00803A VARITYPER, INC. +00803B APT COMMUNICATIONS, INC. +00803C TVS ELECTRONICS LTD +00803D SURIGIKEN CO., LTD. +00803E SYNERNETICS +00803F TATUNG COMPANY +008040 JOHN FLUKE MANUFACTURING CO. +008041 VEB KOMBINAT ROBOTRON +008042 FORCE COMPUTERS +008043 NETWORLD, INC. +008044 SYSTECH COMPUTER CORP. +008045 MATSUSHITA ELECTRIC IND. CO +008046 UNIVERSITY OF TORONTO +008047 IN-NET CORP. +008048 COMPEX INCORPORATED +008049 NISSIN ELECTRIC CO., LTD. +00804A PRO-LOG +00804B EAGLE TECHNOLOGIES PTY.LTD. +00804C CONTEC CO., LTD. +00804D CYCLONE MICROSYSTEMS, INC. +00804E APEX COMPUTER COMPANY +00804F DAIKIN INDUSTRIES, LTD. +008050 ZIATECH CORPORATION +008051 FIBERMUX +008052 TECHNICALLY ELITE CONCEPTS +008053 INTELLICOM, INC. +008054 FRONTIER TECHNOLOGIES CORP. +008055 FERMILAB +008056 SPHINX ELEKTRONIK GMBH +008057 ADSOFT, LTD. +008058 PRINTER SYSTEMS CORPORATION +008059 STANLEY ELECTRIC CO., LTD +00805A TULIP COMPUTERS INTERNAT'L B.V +00805B CONDOR SYSTEMS, INC. +00805C AGILIS CORPORATION +00805D CANSTAR +00805E LSI LOGIC CORPORATION +00805F COMPAQ COMPUTER CORPORATION +008060 NETWORK INTERFACE CORPORATION +008061 LITTON SYSTEMS, INC. +008062 INTERFACE CO. +008063 RICHARD HIRSCHMANN GMBH & CO. +008064 WYSE TECHNOLOGY +008065 CYBERGRAPHIC SYSTEMS PTY LTD. +008066 ARCOM CONTROL SYSTEMS, LTD. +008067 SQUARE D COMPANY +008068 YAMATECH SCIENTIFIC LTD. +008069 COMPUTONE SYSTEMS +00806A ERI (EMPAC RESEARCH INC.) +00806B SCHMID TELECOMMUNICATION +00806C CEGELEC PROJECTS LTD +00806D CENTURY SYSTEMS CORP. +00806E NIPPON STEEL CORPORATION +00806F ONELAN LTD. +008070 COMPUTADORAS MICRON +008071 SAI TECHNOLOGY +008072 MICROPLEX SYSTEMS LTD. +008073 DWB ASSOCIATES +008074 FISHER CONTROLS +008075 PARSYTEC GMBH +008076 MCNC +008077 BROTHER INDUSTRIES, LTD. +008078 PRACTICAL PERIPHERALS, INC. +008079 MICROBUS DESIGNS LTD. +00807A AITECH SYSTEMS LTD. +00807B ARTEL COMMUNICATIONS CORP. +00807C FIBERCOM, INC. +00807D EQUINOX SYSTEMS INC. +00807E SOUTHERN PACIFIC LTD. +00807F DY-4 INCORPORATED +008080 DATAMEDIA CORPORATION +008081 KENDALL SQUARE RESEARCH CORP. +008082 PEP MODULAR COMPUTERS GMBH +008083 AMDAHL +008084 THE CLOUD INC. +008085 H-THREE SYSTEMS CORPORATION +008086 COMPUTER GENERATION INC. +008087 OKI ELECTRIC INDUSTRY CO., LTD +008088 VICTOR COMPANY OF JAPAN, LTD. +008089 TECNETICS (PTY) LTD. +00808A SUMMIT MICROSYSTEMS CORP. +00808B DACOLL LIMITED +00808C NetScout Systems, Inc. +00808D WESTCOAST TECHNOLOGY B.V. +00808E RADSTONE TECHNOLOGY +00808F C. ITOH ELECTRONICS, INC. +008090 MICROTEK INTERNATIONAL, INC. +008091 TOKYO ELECTRIC CO.,LTD +008092 JAPAN COMPUTER INDUSTRY, INC. +008093 XYRON CORPORATION +008094 ALFA LAVAL AUTOMATION AB +008095 BASIC MERTON HANDELSGES.M.B.H. +008096 HUMAN DESIGNED SYSTEMS, INC. +008097 CENTRALP AUTOMATISMES +008098 TDK CORPORATION +008099 KLOCKNER MOELLER IPC +00809A NOVUS NETWORKS LTD +00809B JUSTSYSTEM CORPORATION +00809C LUXCOM, INC. +00809D Commscraft Ltd. +00809E DATUS GMBH +00809F ALCATEL BUSINESS SYSTEMS +0080A0 EDISA HEWLETT PACKARD S/A +0080A1 MICROTEST, INC. +0080A2 CREATIVE ELECTRONIC SYSTEMS +0080A3 LANTRONIX +0080A4 LIBERTY ELECTRONICS +0080A5 SPEED INTERNATIONAL +0080A6 REPUBLIC TECHNOLOGY, INC. +0080A7 MEASUREX CORP. +0080A8 VITACOM CORPORATION +0080A9 CLEARPOINT RESEARCH +0080AA MAXPEED +0080AB DUKANE NETWORK INTEGRATION +0080AC IMLOGIX, DIVISION OF GENESYS +0080AD CNET TECHNOLOGY, INC. +0080AE HUGHES NETWORK SYSTEMS +0080AF ALLUMER CO., LTD. +0080B0 ADVANCED INFORMATION +0080B1 SOFTCOM A/S +0080B2 NETWORK EQUIPMENT TECHNOLOGIES +0080B3 AVAL DATA CORPORATION +0080B4 SOPHIA SYSTEMS +0080B5 UNITED NETWORKS INC. +0080B6 THEMIS COMPUTER +0080B7 STELLAR COMPUTER +0080B8 BUG, INCORPORATED +0080B9 ARCHE TECHNOLIGIES INC. +0080BA SPECIALIX (ASIA) PTE, LTD +0080BB HUGHES LAN SYSTEMS +0080BC HITACHI ENGINEERING CO., LTD +0080BD THE FURUKAWA ELECTRIC CO., LTD +0080BE ARIES RESEARCH +0080BF TAKAOKA ELECTRIC MFG. CO. LTD. +0080C0 PENRIL DATACOMM +0080C1 LANEX CORPORATION +0080C2 IEEE 802.1 COMMITTEE +0080C3 BICC INFORMATION SYSTEMS & SVC +0080C4 DOCUMENT TECHNOLOGIES, INC. +0080C5 NOVELLCO DE MEXICO +0080C6 NATIONAL DATACOMM CORPORATION +0080C7 XIRCOM +0080C8 D-LINK SYSTEMS, INC. +0080C9 ALBERTA MICROELECTRONIC CENTRE +0080CA NETCOM RESEARCH INCORPORATED +0080CB FALCO DATA PRODUCTS +0080CC MICROWAVE BYPASS SYSTEMS +0080CD MICRONICS COMPUTER, INC. +0080CE BROADCAST TELEVISION SYSTEMS +0080CF EMBEDDED PERFORMANCE INC. +0080D0 COMPUTER PERIPHERALS, INC. +0080D1 KIMTRON CORPORATION +0080D2 SHINNIHONDENKO CO., LTD. +0080D3 SHIVA CORP. +0080D4 CHASE RESEARCH LTD. +0080D5 CADRE TECHNOLOGIES +0080D6 NUVOTECH, INC. +0080D7 Fantum Engineering +0080D8 NETWORK PERIPHERALS INC. +0080D9 EMK ELEKTRONIK +0080DA BRUEL & KJAER +0080DB GRAPHON CORPORATION +0080DC PICKER INTERNATIONAL +0080DD GMX INC/GIMIX +0080DE GIPSI S.A. +0080DF ADC CODENOLL TECHNOLOGY CORP. +0080E0 XTP SYSTEMS, INC. +0080E1 STMICROELECTRONICS +0080E2 T.D.I. CO., LTD. +0080E3 CORAL NETWORK CORPORATION +0080E4 NORTHWEST DIGITAL SYSTEMS, INC +0080E5 MYLEX CORPORATION +0080E6 PEER NETWORKS, INC. +0080E7 LYNWOOD SCIENTIFIC DEV. LTD. +0080E8 CUMULUS CORPORATIION +0080E9 Madge Ltd. +0080EA ADVA Optical Networking Ltd. +0080EB COMPCONTROL B.V. +0080EC SUPERCOMPUTING SOLUTIONS, INC. +0080ED IQ TECHNOLOGIES, INC. +0080EE THOMSON CSF +0080EF RATIONAL +0080F0 Panasonic Communications Co., Ltd. +0080F1 OPUS SYSTEMS +0080F2 RAYCOM SYSTEMS INC +0080F3 SUN ELECTRONICS CORP. +0080F4 TELEMECANIQUE ELECTRIQUE +0080F5 QUANTEL LTD +0080F6 SYNERGY MICROSYSTEMS +0080F7 ZENITH ELECTRONICS +0080F8 MIZAR, INC. +0080F9 HEURIKON CORPORATION +0080FA RWT GMBH +0080FB BVM LIMITED +0080FC AVATAR CORPORATION +0080FD EXSCEED CORPRATION +0080FE AZURE TECHNOLOGIES, INC. +0080FF SOC. DE TELEINFORMATIQUE RTC +009000 DIAMOND MULTIMEDIA +009001 NISHIMU ELECTRONICS INDUSTRIES CO., LTD. +009002 ALLGON AB +009003 APLIO +009004 3COM EUROPE LTD. +009005 PROTECH SYSTEMS CO., LTD. +009006 HAMAMATSU PHOTONICS K.K. +009007 DOMEX TECHNOLOGY CORP. +009008 HanA Systems Inc. +009009 i Controls, Inc. +00900A PROTON ELECTRONIC INDUSTRIAL CO., LTD. +00900B LANNER ELECTRONICS, INC. +00900C CISCO SYSTEMS, INC. +00900D OVERLAND DATA INC. +00900E HANDLINK TECHNOLOGIES, INC. +00900F KAWASAKI HEAVY INDUSTRIES, LTD +009010 SIMULATION LABORATORIES, INC. +009011 WAVTrace, Inc. +009012 GLOBESPAN SEMICONDUCTOR, INC. +009013 SAMSAN CORP. +009014 ROTORK INSTRUMENTS, LTD. +009015 CENTIGRAM COMMUNICATIONS CORP. +009016 ZAC +009017 ZYPCOM, INC. +009018 ITO ELECTRIC INDUSTRY CO, LTD. +009019 HERMES ELECTRONICS CO., LTD. +00901A UNISPHERE SOLUTIONS +00901B DIGITAL CONTROLS +00901C mps Software Gmbh +00901D PEC (NZ) LTD. +00901E SELESTA INGEGNE RIA S.P.A. +00901F ADTEC PRODUCTIONS, INC. +009020 PHILIPS ANALYTICAL X-RAY B.V. +009021 CISCO SYSTEMS, INC. +009022 IVEX +009023 ZILOG INC. +009024 PIPELINKS, INC. +009025 VISION SYSTEMS LTD. PTY +009026 ADVANCED SWITCHING COMMUNICATIONS, INC. +009027 INTEL CORPORATION +009028 NIPPON SIGNAL CO., LTD. +009029 CRYPTO AG +00902A COMMUNICATION DEVICES, INC. +00902B CISCO SYSTEMS, INC. +00902C DATA & CONTROL EQUIPMENT LTD. +00902D DATA ELECTRONICS (AUST.) PTY, LTD. +00902E NAMCO LIMITED +00902F NETCORE SYSTEMS, INC. +009030 HONEYWELL-DATING +009031 MYSTICOM, LTD. +009032 PELCOMBE GROUP LTD. +009033 INNOVAPHONE GmbH +009034 IMAGIC, INC. +009035 ALPHA TELECOM, INC. +009036 ens, inc. +009037 ACUCOMM, INC. +009038 FOUNTAIN TECHNOLOGIES, INC. +009039 SHASTA NETWORKS +00903A NIHON MEDIA TOOL INC. +00903B TriEMS Research Lab, Inc. +00903C ATLANTIC NETWORK SYSTEMS +00903D BIOPAC SYSTEMS, INC. +00903E N.V. PHILIPS INDUSTRIAL ACTIVITIES +00903F AZTEC RADIOMEDIA +009040 Siemens Network Convergence LLC +009041 APPLIED DIGITAL ACCESS +009042 ECCS, Inc. +009043 NICHIBEI DENSHI CO., LTD. +009044 ASSURED DIGITAL, INC. +009045 Marconi Communications +009046 DEXDYNE, LTD. +009047 GIGA FAST E. LTD. +009048 ZEAL CORPORATION +009049 ENTRIDIA CORPORATION +00904A CONCUR SYSTEM TECHNOLOGIES +00904B GemTek Technology Co., Ltd. +00904C EPIGRAM, INC. +00904D SPEC S.A. +00904E DELEM BV +00904F ABB POWER T&D COMPANY, INC. +009050 TELESTE OY +009051 ULTIMATE TECHNOLOGY CORP. +009052 SELCOM ELETTRONICA S.R.L. +009053 DAEWOO ELECTRONICS CO., LTD. +009054 INNOVATIVE SEMICONDUCTORS, INC +009055 PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION +009056 TELESTREAM, INC. +009057 AANetcom, Inc. +009058 Ultra Electronics Ltd., Command and Control Systems +009059 TELECOM DEVICE K.K. +00905A DEARBORN GROUP, INC. +00905B RAYMOND AND LAE ENGINEERING +00905C EDMI +00905D NETCOM SICHERHEITSTECHNIK GmbH +00905E RAULAND-BORG CORPORATION +00905F CISCO SYSTEMS, INC. +009060 SYSTEM CREATE CORP. +009061 PACIFIC RESEARCH & ENGINEERING CORPORATION +009062 ICP VORTEX COMPUTERSYSTEME GmbH +009063 COHERENT COMMUNICATIONS SYSTEMS CORPORATION +009064 THOMSON BROADCAST SYSTEMS +009065 FINISAR CORPORATION +009066 Troika Networks, Inc. +009067 WalkAbout Computers, Inc. +009068 DVT CORP. +009069 JUNIPER NETWORKS, INC. +00906A TURNSTONE SYSTEMS, INC. +00906B APPLIED RESOURCES, INC. +00906C GWT GLOBAL WEIGHING TECHNOLOGIES GmbH +00906D CISCO SYSTEMS, INC. +00906E PRAXON, INC. +00906F CISCO SYSTEMS, INC. +009070 NEO NETWORKS, INC. +009071 Applied Innovation Inc. +009072 SIMRAD AS +009073 GAIO TECHNOLOGY +009074 ARGON NETWORKS, INC. +009075 NEC DO BRASIL S.A. +009076 FMT AIRCRAFT GATE SUPPORT SYSTEMS AB +009077 ADVANCED FIBRE COMMUNICATIONS +009078 MER TELEMANAGEMENT SOLUTIONS, LTD. +009079 ClearOne, Inc. +00907A SPECTRALINK CORP. +00907B E-TECH, INC. +00907C DIGITALCAST, INC. +00907D Lake Communications +00907E VETRONIX CORP. +00907F WatchGuard Technologies, Inc. +009080 NOT LIMITED, INC. +009081 ALOHA NETWORKS, INC. +009082 FORCE INSTITUTE +009083 TURBO COMMUNICATION, INC. +009084 ATECH SYSTEM +009085 GOLDEN ENTERPRISES, INC. +009086 CISCO SYSTEMS, INC. +009087 ITIS +009088 BAXALL SECURITY LTD. +009089 SOFTCOM MICROSYSTEMS, INC. +00908A BAYLY COMMUNICATIONS, INC. +00908B CELL COMPUTING, INC. +00908C ETREND ELECTRONICS, INC. +00908D VICKERS ELECTRONICS SYSTEMS +00908E Nortel Networks Broadband Access +00908F AUDIO CODES LTD. +009090 I-BUS +009091 DigitalScape, Inc. +009092 CISCO SYSTEMS, INC. +009093 NANAO CORPORATION +009094 OSPREY TECHNOLOGIES, INC. +009095 UNIVERSAL AVIONICS +009096 ASKEY COMPUTER CORP. +009097 SYCAMORE NETWORKS +009098 SBC DESIGNS, INC. +009099 ALLIED TELESIS, K.K. +00909A ONE WORLD SYSTEMS, INC. +00909B MARKPOINT AB +00909C Terayon Communications Systems +00909D NovaTech Process Solutions, LLC +00909E Critical IO, LLC +00909F DIGI-DATA CORPORATION +0090A0 8X8 INC. +0090A1 FLYING PIG SYSTEMS, LTD. +0090A2 CYBERTAN TECHNOLOGY, INC. +0090A3 Corecess Inc. +0090A4 ALTIGA NETWORKS +0090A5 SPECTRA LOGIC +0090A6 CISCO SYSTEMS, INC. +0090A7 CLIENTEC CORPORATION +0090A8 NineTiles Networks, Ltd. +0090A9 WESTERN DIGITAL +0090AA INDIGO ACTIVE VISION SYSTEMS LIMITED +0090AB CISCO SYSTEMS, INC. +0090AC OPTIVISION, INC. +0090AD ASPECT ELECTRONICS, INC. +0090AE ITALTEL S.p.A. +0090AF J. MORITA MFG. CORP. +0090B0 VADEM +0090B1 CISCO SYSTEMS, INC. +0090B2 AVICI SYSTEMS INC. +0090B3 AGRANAT SYSTEMS +0090B4 WILLOWBROOK TECHNOLOGIES +0090B5 NIKON CORPORATION +0090B6 FIBEX SYSTEMS +0090B7 DIGITAL LIGHTWAVE, INC. +0090B8 ROHDE & SCHWARZ GMBH & CO. KG +0090B9 BERAN INSTRUMENTS LTD. +0090BA VALID NETWORKS, INC. +0090BB TAINET COMMUNICATION SYSTEM Corp. +0090BC TELEMANN CO., LTD. +0090BD OMNIA COMMUNICATIONS, INC. +0090BE IBC/INTEGRATED BUSINESS COMPUTERS +0090BF CISCO SYSTEMS, INC. +0090C0 K.J. LAW ENGINEERS, INC. +0090C1 Peco II, Inc. +0090C2 JK microsystems, Inc. +0090C3 TOPIC SEMICONDUCTOR CORP. +0090C4 JAVELIN SYSTEMS, INC. +0090C5 INTERNET MAGIC, INC. +0090C6 OPTIM SYSTEMS, INC. +0090C7 ICOM INC. +0090C8 WAVERIDER COMMUNICATIONS (CANADA) INC. +0090C9 DPAC Technologies +0090CA ACCORD VIDEO TELECOMMUNICATIONS, LTD. +0090CB Wireless OnLine, Inc. +0090CC PLANET COMMUNICATIONS, INC. +0090CD ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A. +0090CE TETRA GmbH +0090CF NORTEL +0090D0 Thomson Belgium +0090D1 LEICHU ENTERPRISE CO., LTD. +0090D2 ARTEL VIDEO SYSTEMS +0090D3 GIESECKE & DEVRIENT GmbH +0090D4 BindView Development Corp. +0090D5 EUPHONIX, INC. +0090D6 CRYSTAL GROUP +0090D7 NetBoost Corp. +0090D8 WHITECROSS SYSTEMS +0090D9 CISCO SYSTEMS, INC. +0090DA DYNARC, INC. +0090DB NEXT LEVEL COMMUNICATIONS +0090DC TECO INFORMATION SYSTEMS +0090DD THE MIHARU COMMUNICATIONS CO., LTD. +0090DE CARDKEY SYSTEMS, INC. +0090DF MITSUBISHI CHEMICAL AMERICA, INC. +0090E0 SYSTRAN CORP. +0090E1 TELENA S.P.A. +0090E2 DISTRIBUTED PROCESSING TECHNOLOGY +0090E3 AVEX ELECTRONICS INC. +0090E4 NEC AMERICA, INC. +0090E5 TEKNEMA, INC. +0090E6 ACER LABORATORIES, INC. +0090E7 HORSCH ELEKTRONIK AG +0090E8 MOXA TECHNOLOGIES CORP., LTD. +0090E9 JANZ COMPUTER AG +0090EA ALPHA TECHNOLOGIES, INC. +0090EB SENTRY TELECOM SYSTEMS +0090EC PYRESCOM +0090ED CENTRAL SYSTEM RESEARCH CO., LTD. +0090EE PERSONAL COMMUNICATIONS TECHNOLOGIES +0090EF INTEGRIX, INC. +0090F0 HARMONIC LIGHTWAVES, LTD. +0090F1 DOT HILL SYSTEMS CORPORATION +0090F2 CISCO SYSTEMS, INC. +0090F3 ASPECT COMMUNICATIONS +0090F4 LIGHTNING INSTRUMENTATION +0090F5 CLEVO CO. +0090F6 ESCALATE NETWORKS, INC. +0090F7 NBASE COMMUNICATIONS LTD. +0090F8 MEDIATRIX TELECOM +0090F9 LEITCH +0090FA EMULEX Corp +0090FB PORTWELL, INC. +0090FC NETWORK COMPUTING DEVICES +0090FD CopperCom, Inc. +0090FE ELECOM CO., LTD. (LANEED DIV.) +0090FF TELLUS TECHNOLOGY INC. +0091D6 Crystal Group, Inc. +009D8E CARDIAC RECORDERS, INC. +00A000 CENTILLION NETWORKS, INC. +00A001 DRS Signal Solutions +00A002 LEEDS & NORTHRUP AUSTRALIA PTY LTD +00A003 STAEFA CONTROL SYSTEM +00A004 NETPOWER, INC. +00A005 DANIEL INSTRUMENTS, LTD. +00A006 IMAGE DATA PROCESSING SYSTEM GROUP +00A007 APEXX TECHNOLOGY, INC. +00A008 NETCORP +00A009 WHITETREE NETWORK +00A00A R.D.C. COMMUNICATION +00A00B COMPUTEX CO., LTD. +00A00C KINGMAX TECHNOLOGY, INC. +00A00D THE PANDA PROJECT +00A00E VISUAL NETWORKS, INC. +00A00F Broadband Technologies +00A010 SYSLOGIC DATENTECHNIK AG +00A011 MUTOH INDUSTRIES LTD. +00A012 B.A.T.M. ADVANCED TECHNOLOGIES +00A013 TELTREND LTD. +00A014 CSIR +00A015 WYLE +00A016 MICROPOLIS CORP. +00A017 J B M CORPORATION +00A018 CREATIVE CONTROLLERS, INC. +00A019 NEBULA CONSULTANTS, INC. +00A01A BINAR ELEKTRONIK AB +00A01B PREMISYS COMMUNICATIONS, INC. +00A01C NASCENT NETWORKS CORPORATION +00A01D SIXNET +00A01E EST CORPORATION +00A01F TRICORD SYSTEMS, INC. +00A020 CITICORP/TTI +00A021 General Dynamics +00A022 CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING +00A023 APPLIED CREATIVE TECHNOLOGY, INC. +00A024 3COM CORPORATION +00A025 REDCOM LABS INC. +00A026 TELDAT, S.A. +00A027 FIREPOWER SYSTEMS, INC. +00A028 CONNER PERIPHERALS +00A029 COULTER CORPORATION +00A02A TRANCELL SYSTEMS +00A02B TRANSITIONS RESEARCH CORP. +00A02C interWAVE Communications +00A02D 1394 Trade Association +00A02E BRAND COMMUNICATIONS, LTD. +00A02F PIRELLI CAVI +00A030 CAPTOR NV/SA +00A031 HAZELTINE CORPORATION, MS 1-17 +00A032 GES SINGAPORE PTE. LTD. +00A033 imc MeBsysteme GmbH +00A034 AXEL +00A035 CYLINK CORPORATION +00A036 APPLIED NETWORK TECHNOLOGY +00A037 DATASCOPE CORPORATION +00A038 EMAIL ELECTRONICS +00A039 ROSS TECHNOLOGY, INC. +00A03A KUBOTEK CORPORATION +00A03B TOSHIN ELECTRIC CO., LTD. +00A03C EG&G NUCLEAR INSTRUMENTS +00A03D OPTO-22 +00A03E ATM FORUM +00A03F COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C +00A040 APPLE COMPUTER +00A041 INFICON +00A042 SPUR PRODUCTS CORP. +00A043 AMERICAN TECHNOLOGY LABS, INC. +00A044 NTT IT CO., LTD. +00A045 PHOENIX CONTACT GMBH & CO. +00A046 SCITEX CORP. LTD. +00A047 INTEGRATED FITNESS CORP. +00A048 QUESTECH, LTD. +00A049 DIGITECH INDUSTRIES, INC. +00A04A NISSHIN ELECTRIC CO., LTD. +00A04B TFL LAN INC. +00A04C INNOVATIVE SYSTEMS & TECHNOLOGIES, INC. +00A04D EDA INSTRUMENTS, INC. +00A04E VOELKER TECHNOLOGIES, INC. +00A04F AMERITEC CORP. +00A050 CYPRESS SEMICONDUCTOR +00A051 ANGIA COMMUNICATIONS. INC. +00A052 STANILITE ELECTRONICS PTY. LTD +00A053 COMPACT DEVICES, INC. +00A055 Data Device Corporation +00A056 MICROPROSS +00A057 LANCOM Systems GmbH +00A058 GLORY, LTD. +00A059 HAMILTON HALLMARK +00A05A KOFAX IMAGE PRODUCTS +00A05B MARQUIP, INC. +00A05C INVENTORY CONVERSION, INC./ +00A05D CS COMPUTER SYSTEME GmbH +00A05E MYRIAD LOGIC INC. +00A05F BTG ENGINEERING BV +00A060 ACER PERIPHERALS, INC. +00A061 PURITAN BENNETT +00A062 AES PRODATA +00A063 JRL SYSTEMS, INC. +00A064 KVB/ANALECT +00A065 Symantec Corporation +00A066 ISA CO., LTD. +00A067 NETWORK SERVICES GROUP +00A068 BHP LIMITED +00A069 Symmetricom, Inc. +00A06A Verilink Corporation +00A06B DMS DORSCH MIKROSYSTEM GMBH +00A06C SHINDENGEN ELECTRIC MFG. CO., LTD. +00A06D MANNESMANN TALLY CORPORATION +00A06E AUSTRON, INC. +00A06F THE APPCON GROUP, INC. +00A070 COASTCOM +00A071 VIDEO LOTTERY TECHNOLOGIES,INC +00A072 OVATION SYSTEMS LTD. +00A073 COM21, INC. +00A074 PERCEPTION TECHNOLOGY +00A075 MICRON TECHNOLOGY, INC. +00A076 CARDWARE LAB, INC. +00A077 FUJITSU NEXION, INC. +00A078 Marconi Communications +00A079 ALPS ELECTRIC (USA), INC. +00A07A ADVANCED PERIPHERALS TECHNOLOGIES, INC. +00A07B DAWN COMPUTER INCORPORATION +00A07C TONYANG NYLON CO., LTD. +00A07D SEEQ TECHNOLOGY, INC. +00A07E AVID TECHNOLOGY, INC. +00A07F GSM-SYNTEL, LTD. +00A080 SBE, Inc. +00A081 ALCATEL DATA NETWORKS +00A082 NKT ELEKTRONIK A/S +00A083 ASIMMPHONY TURKEY +00A084 DATAPLEX PTY. LTD. +00A086 AMBER WAVE SYSTEMS, INC. +00A087 Zarlink Semiconductor Ltd. +00A088 ESSENTIAL COMMUNICATIONS +00A089 XPOINT TECHNOLOGIES, INC. +00A08A BROOKTROUT TECHNOLOGY, INC. +00A08B ASTON ELECTRONIC DESIGNS LTD. +00A08C MultiMedia LANs, Inc. +00A08D JACOMO CORPORATION +00A08E Nokia Internet Communications +00A08F DESKNET SYSTEMS, INC. +00A090 TimeStep Corporation +00A091 APPLICOM INTERNATIONAL +00A092 H. BOLLMANN MANUFACTURERS, LTD +00A093 B/E AEROSPACE, Inc. +00A094 COMSAT CORPORATION +00A095 ACACIA NETWORKS, INC. +00A096 MITUMI ELECTRIC CO., LTD. +00A097 JC INFORMATION SYSTEMS +00A098 NETWORK APPLIANCE CORP. +00A099 K-NET LTD. +00A09A NIHON KOHDEN AMERICA +00A09B QPSX COMMUNICATIONS, LTD. +00A09C Xyplex, Inc. +00A09D JOHNATHON FREEMAN TECHNOLOGIES +00A09E ICTV +00A09F COMMVISION CORP. +00A0A0 COMPACT DATA, LTD. +00A0A1 EPIC DATA INC. +00A0A2 DIGICOM S.P.A. +00A0A3 RELIABLE POWER METERS +00A0A4 MICROS SYSTEMS, INC. +00A0A5 TEKNOR MICROSYSTEME, INC. +00A0A6 M.I. SYSTEMS, K.K. +00A0A7 VORAX CORPORATION +00A0A8 RENEX CORPORATION +00A0A9 GN NETTEST (CANADA) NAVTEL DIVISION +00A0AA SPACELABS MEDICAL +00A0AB NETCS INFORMATIONSTECHNIK GMBH +00A0AC GILAT SATELLITE NETWORKS, LTD. +00A0AD MARCONI SPA +00A0AE NUCOM SYSTEMS, INC. +00A0AF WMS INDUSTRIES +00A0B0 I-O DATA DEVICE, INC. +00A0B1 FIRST VIRTUAL CORPORATION +00A0B2 SHIMA SEIKI +00A0B3 ZYKRONIX +00A0B4 TEXAS MICROSYSTEMS, INC. +00A0B5 3H TECHNOLOGY +00A0B6 SANRITZ AUTOMATION CO., LTD. +00A0B7 CORDANT, INC. +00A0B8 SYMBIOS LOGIC INC. +00A0B9 EAGLE TECHNOLOGY, INC. +00A0BA PATTON ELECTRONICS CO. +00A0BB HILAN GMBH +00A0BC VIASAT, INCORPORATED +00A0BD I-TECH CORP. +00A0BE INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP +00A0BF WIRELESS DATA GROUP MOTOROLA +00A0C0 DIGITAL LINK CORP. +00A0C1 ORTIVUS MEDICAL AB +00A0C2 R.A. SYSTEMS CO., LTD. +00A0C3 UNICOMPUTER GMBH +00A0C4 CRISTIE ELECTRONICS LTD. +00A0C5 ZYXEL COMMUNICATION +00A0C6 QUALCOMM INCORPORATED +00A0C7 TADIRAN TELECOMMUNICATIONS +00A0C8 ADTRAN INC. +00A0C9 INTEL CORPORATION - HF1-06 +00A0CA FUJITSU DENSO LTD. +00A0CB ARK TELECOMMUNICATIONS, INC. +00A0CC LITE-ON COMMUNICATIONS, INC. +00A0CD DR. JOHANNES HEIDENHAIN GmbH +00A0CE ASTROCOM CORPORATION +00A0CF SOTAS, INC. +00A0D0 TEN X TECHNOLOGY, INC. +00A0D1 INVENTEC CORPORATION +00A0D2 ALLIED TELESIS INTERNATIONAL CORPORATION +00A0D3 INSTEM COMPUTER SYSTEMS, LTD. +00A0D4 RADIOLAN, INC. +00A0D5 SIERRA WIRELESS INC. +00A0D6 SBE, INC. +00A0D7 KASTEN CHASE APPLIED RESEARCH +00A0D8 SPECTRA - TEK +00A0D9 CONVEX COMPUTER CORPORATION +00A0DA INTEGRATED SYSTEMS Technology, Inc. +00A0DB FISHER & PAYKEL PRODUCTION +00A0DC O.N. ELECTRONIC CO., LTD. +00A0DD AZONIX CORPORATION +00A0DE YAMAHA CORPORATION +00A0DF STS TECHNOLOGIES, INC. +00A0E0 TENNYSON TECHNOLOGIES PTY LTD +00A0E1 WESTPORT RESEARCH ASSOCIATES, INC. +00A0E2 KEISOKU GIKEN CORP. +00A0E3 XKL SYSTEMS CORP. +00A0E4 OPTIQUEST +00A0E5 NHC COMMUNICATIONS +00A0E6 DIALOGIC CORPORATION +00A0E7 CENTRAL DATA CORPORATION +00A0E8 REUTERS HOLDINGS PLC +00A0E9 ELECTRONIC RETAILING SYSTEMS INTERNATIONAL +00A0EA ETHERCOM CORP. +00A0EB Encore Networks +00A0EC TRANSMITTON LTD. +00A0ED PRI AUTOMATION +00A0EE NASHOBA NETWORKS +00A0EF LUCIDATA LTD. +00A0F0 TORONTO MICROELECTRONICS INC. +00A0F1 MTI +00A0F2 INFOTEK COMMUNICATIONS, INC. +00A0F3 STAUBLI +00A0F4 GE +00A0F5 RADGUARD LTD. +00A0F6 AutoGas Systems Inc. +00A0F7 V.I COMPUTER CORP. +00A0F8 SYMBOL TECHNOLOGIES, INC. +00A0F9 BINTEC COMMUNICATIONS GMBH +00A0FA Marconi Communication GmbH +00A0FB TORAY ENGINEERING CO., LTD. +00A0FC IMAGE SCIENCES, INC. +00A0FD SCITEX DIGITAL PRINTING, INC. +00A0FE BOSTON TECHNOLOGY, INC. +00A0FF TELLABS OPERATIONS, INC. +00AA00 INTEL CORPORATION +00AA01 INTEL CORPORATION +00AA02 INTEL CORPORATION +00AA3C OLIVETTI TELECOM SPA (OLTECO) +00B009 Grass Valley Group +00B017 InfoGear Technology Corp. +00B019 Casi-Rusco +00B01C Westport Technologies +00B01E Rantic Labs, Inc. +00B02A ORSYS GmbH +00B02D ViaGate Technologies, Inc. +00B03B HiQ Networks +00B048 Marconi Communications Inc. +00B04A Cisco Systems, Inc. +00B052 Intellon Corporation +00B064 Cisco Systems, Inc. +00B069 Honewell Oy +00B06D Jones Futurex Inc. +00B080 Mannesmann Ipulsys B.V. +00B086 LocSoft Limited +00B08E Cisco Systems, Inc. +00B091 Transmeta Corp. +00B094 Alaris, Inc. +00B09A Morrow Technologies Corp. +00B09D Point Grey Research Inc. +00B0AC SIAE-Microelettronica S.p.A. +00B0AE Symmetricom +00B0B3 Xstreamis PLC +00B0C2 Cisco Systems, Inc. +00B0C7 Tellabs Operations, Inc. +00B0CE TECHNOLOGY RESCUE +00B0D0 Dell Computer Corp. +00B0DB Nextcell, Inc. +00B0DF Reliable Data Technology, Inc. +00B0E7 British Federal Ltd. +00B0EC EACEM +00B0EE Ajile Systems, Inc. +00B0F0 CALY NETWORKS +00B0F5 NetWorth Technologies, Inc. +00BB01 OCTOTHORPE CORP. +00BBF0 UNGERMANN-BASS INC. +00C000 LANOPTICS, LTD. +00C001 DIATEK PATIENT MANAGMENT +00C002 SERCOMM CORPORATION +00C003 GLOBALNET COMMUNICATIONS +00C004 JAPAN BUSINESS COMPUTER CO.LTD +00C005 LIVINGSTON ENTERPRISES, INC. +00C006 NIPPON AVIONICS CO., LTD. +00C007 PINNACLE DATA SYSTEMS, INC. +00C008 SECO SRL +00C009 KT TECHNOLOGY (S) PTE LTD +00C00A MICRO CRAFT +00C00B NORCONTROL A.S. +00C00C RELIA TECHNOLGIES +00C00D ADVANCED LOGIC RESEARCH, INC. +00C00E PSITECH, INC. +00C00F QUANTUM SOFTWARE SYSTEMS LTD. +00C010 HIRAKAWA HEWTECH CORP. +00C011 INTERACTIVE COMPUTING DEVICES +00C012 NETSPAN CORPORATION +00C013 NETRIX +00C014 TELEMATICS CALABASAS INT'L,INC +00C015 NEW MEDIA CORPORATION +00C016 ELECTRONIC THEATRE CONTROLS +00C017 FORTE NETWORKS +00C018 LANART CORPORATION +00C019 LEAP TECHNOLOGY, INC. +00C01A COROMETRICS MEDICAL SYSTEMS +00C01B SOCKET COMMUNICATIONS, INC. +00C01C INTERLINK COMMUNICATIONS LTD. +00C01D GRAND JUNCTION NETWORKS, INC. +00C01E LA FRANCAISE DES JEUX +00C01F S.E.R.C.E.L. +00C020 ARCO ELECTRONIC, CONTROL LTD. +00C021 NETEXPRESS +00C022 LASERMASTER TECHNOLOGIES, INC. +00C023 TUTANKHAMON ELECTRONICS +00C024 EDEN SISTEMAS DE COMPUTACAO SA +00C025 DATAPRODUCTS CORPORATION +00C026 LANS TECHNOLOGY CO., LTD. +00C027 CIPHER SYSTEMS, INC. +00C028 JASCO CORPORATION +00C029 Nexans Deutschland AG - ANS +00C02A OHKURA ELECTRIC CO., LTD. +00C02B GERLOFF GESELLSCHAFT FUR +00C02C CENTRUM COMMUNICATIONS, INC. +00C02D FUJI PHOTO FILM CO., LTD. +00C02E NETWIZ +00C02F OKUMA CORPORATION +00C030 INTEGRATED ENGINEERING B. V. +00C031 DESIGN RESEARCH SYSTEMS, INC. +00C032 I-CUBED LIMITED +00C033 TELEBIT COMMUNICATIONS APS +00C034 TRANSACTION NETWORK +00C035 QUINTAR COMPANY +00C036 RAYTECH ELECTRONIC CORP. +00C037 DYNATEM +00C038 RASTER IMAGE PROCESSING SYSTEM +00C039 TDK SEMICONDUCTOR CORPORATION +00C03A MEN-MIKRO ELEKTRONIK GMBH +00C03B MULTIACCESS COMPUTING CORP. +00C03C TOWER TECH S.R.L. +00C03D WIESEMANN & THEIS GMBH +00C03E FA. GEBR. HELLER GMBH +00C03F STORES AUTOMATED SYSTEMS, INC. +00C040 ECCI +00C041 DIGITAL TRANSMISSION SYSTEMS +00C042 DATALUX CORP. +00C043 STRATACOM +00C044 EMCOM CORPORATION +00C045 ISOLATION SYSTEMS, LTD. +00C046 KEMITRON LTD. +00C047 UNIMICRO SYSTEMS, INC. +00C048 BAY TECHNICAL ASSOCIATES +00C049 U.S. ROBOTICS, INC. +00C04A GROUP 2000 AG +00C04B CREATIVE MICROSYSTEMS +00C04C DEPARTMENT OF FOREIGN AFFAIRS +00C04D MITEC, INC. +00C04E COMTROL CORPORATION +00C04F DELL COMPUTER CORPORATION +00C050 TOYO DENKI SEIZO K.K. +00C051 ADVANCED INTEGRATION RESEARCH +00C052 BURR-BROWN +00C053 DAVOX CORPORATION +00C054 NETWORK PERIPHERALS, LTD. +00C055 MODULAR COMPUTING TECHNOLOGIES +00C056 SOMELEC +00C057 MYCO ELECTRONICS +00C058 DATAEXPERT CORP. +00C059 NIPPON DENSO CO., LTD. +00C05A SEMAPHORE COMMUNICATIONS CORP. +00C05B NETWORKS NORTHWEST, INC. +00C05C ELONEX PLC +00C05D L&N TECHNOLOGIES +00C05E VARI-LITE, INC. +00C05F FINE-PAL COMPANY LIMITED +00C060 ID SCANDINAVIA AS +00C061 SOLECTEK CORPORATION +00C062 IMPULSE TECHNOLOGY +00C063 MORNING STAR TECHNOLOGIES, INC +00C064 GENERAL DATACOMM IND. INC. +00C065 SCOPE COMMUNICATIONS, INC. +00C066 DOCUPOINT, INC. +00C067 UNITED BARCODE INDUSTRIES +00C068 PHILIP DRAKE ELECTRONICS LTD. +00C069 Axxcelera Broadband Wireless +00C06A ZAHNER-ELEKTRIK GMBH & CO. KG +00C06B OSI PLUS CORPORATION +00C06C SVEC COMPUTER CORP. +00C06D BOCA RESEARCH, INC. +00C06E HAFT TECHNOLOGY, INC. +00C06F KOMATSU LTD. +00C070 SECTRA SECURE-TRANSMISSION AB +00C071 AREANEX COMMUNICATIONS, INC. +00C072 KNX LTD. +00C073 XEDIA CORPORATION +00C074 TOYODA AUTOMATIC LOOM +00C075 XANTE CORPORATION +00C076 I-DATA INTERNATIONAL A-S +00C077 DAEWOO TELECOM LTD. +00C078 COMPUTER SYSTEMS ENGINEERING +00C079 FONSYS CO.,LTD. +00C07A PRIVA B.V. +00C07B ASCEND COMMUNICATIONS, INC. +00C07C HIGHTECH INFORMATION +00C07D RISC DEVELOPMENTS LTD. +00C07E KUBOTA CORPORATION ELECTRONIC +00C07F NUPON COMPUTING CORP. +00C080 NETSTAR, INC. +00C081 METRODATA LTD. +00C082 MOORE PRODUCTS CO. +00C083 TRACE MOUNTAIN PRODUCTS, INC. +00C084 DATA LINK CORP. LTD. +00C085 ELECTRONICS FOR IMAGING, INC. +00C086 THE LYNK CORPORATION +00C087 UUNET TECHNOLOGIES, INC. +00C088 EKF ELEKTRONIK GMBH +00C089 TELINDUS DISTRIBUTION +00C08A LAUTERBACH DATENTECHNIK GMBH +00C08B RISQ MODULAR SYSTEMS, INC. +00C08C PERFORMANCE TECHNOLOGIES, INC. +00C08D TRONIX PRODUCT DEVELOPMENT +00C08E NETWORK INFORMATION TECHNOLOGY +00C08F MATSUSHITA ELECTRIC WORKS, LTD +00C090 PRAIM S.R.L. +00C091 JABIL CIRCUIT, INC. +00C092 MENNEN MEDICAL INC. +00C093 ALTA RESEARCH CORP. +00C094 VMX INC. +00C095 ZNYX +00C096 TAMURA CORPORATION +00C097 ARCHIPEL SA +00C098 CHUNTEX ELECTRONIC CO., LTD. +00C099 YOSHIKI INDUSTRIAL CO.,LTD. +00C09A PHOTONICS CORPORATION +00C09B RELIANCE COMM/TEC, R-TEC +00C09C TOA ELECTRONIC LTD. +00C09D DISTRIBUTED SYSTEMS INT'L, INC +00C09E CACHE COMPUTERS, INC. +00C09F QUANTA COMPUTER, INC. +00C0A0 ADVANCE MICRO RESEARCH, INC. +00C0A1 TOKYO DENSHI SEKEI CO. +00C0A2 INTERMEDIUM A/S +00C0A3 DUAL ENTERPRISES CORPORATION +00C0A4 UNIGRAF OY +00C0A5 DICKENS DATA SYSTEMS +00C0A6 EXICOM AUSTRALIA PTY. LTD +00C0A7 SEEL LTD. +00C0A8 GVC CORPORATION +00C0A9 BARRON MCCANN LTD. +00C0AA SILICON VALLEY COMPUTER +00C0AB Telco Systems, Inc. +00C0AC GAMBIT COMPUTER COMMUNICATIONS +00C0AD MARBEN COMMUNICATION SYSTEMS +00C0AE TOWERCOM CO. INC. DBA PC HOUSE +00C0AF TEKLOGIX INC. +00C0B0 GCC TECHNOLOGIES,INC. +00C0B1 GENIUS NET CO. +00C0B2 NORAND CORPORATION +00C0B3 COMSTAT DATACOMM CORPORATION +00C0B4 MYSON TECHNOLOGY, INC. +00C0B5 CORPORATE NETWORK SYSTEMS,INC. +00C0B6 Snap Appliance, Inc. +00C0B7 AMERICAN POWER CONVERSION CORP +00C0B8 FRASER'S HILL LTD. +00C0B9 FUNK SOFTWARE, INC. +00C0BA NETVANTAGE +00C0BB FORVAL CREATIVE, INC. +00C0BC TELECOM AUSTRALIA/CSSC +00C0BD INEX TECHNOLOGIES, INC. +00C0BE ALCATEL - SEL +00C0BF TECHNOLOGY CONCEPTS, LTD. +00C0C0 SHORE MICROSYSTEMS, INC. +00C0C1 QUAD/GRAPHICS, INC. +00C0C2 INFINITE NETWORKS LTD. +00C0C3 ACUSON COMPUTED SONOGRAPHY +00C0C4 COMPUTER OPERATIONAL +00C0C5 SID INFORMATICA +00C0C6 PERSONAL MEDIA CORP. +00C0C7 SPARKTRUM MICROSYSTEMS, INC. +00C0C8 MICRO BYTE PTY. LTD. +00C0C9 ELSAG BAILEY PROCESS +00C0CA ALFA, INC. +00C0CB CONTROL TECHNOLOGY CORPORATION +00C0CC TELESCIENCES CO SYSTEMS, INC. +00C0CD COMELTA, S.A. +00C0CE CEI SYSTEMS & ENGINEERING PTE +00C0CF IMATRAN VOIMA OY +00C0D0 RATOC SYSTEM INC. +00C0D1 COMTREE TECHNOLOGY CORPORATION +00C0D2 SYNTELLECT, INC. +00C0D3 OLYMPUS IMAGE SYSTEMS, INC. +00C0D4 AXON NETWORKS, INC. +00C0D5 QUANCOM ELECTRONIC GMBH +00C0D6 J1 SYSTEMS, INC. +00C0D7 TAIWAN TRADING CENTER DBA +00C0D8 UNIVERSAL DATA SYSTEMS +00C0D9 QUINTE NETWORK CONFIDENTIALITY +00C0DA NICE SYSTEMS LTD. +00C0DB IPC CORPORATION (PTE) LTD. +00C0DC EOS TECHNOLOGIES, INC. +00C0DD QLogic Corporation +00C0DE ZCOMM, INC. +00C0DF KYE Systems Corp. +00C0E0 DSC COMMUNICATION CORP. +00C0E1 SONIC SOLUTIONS +00C0E2 CALCOMP, INC. +00C0E3 OSITECH COMMUNICATIONS, INC. +00C0E4 SIEMENS BUILDING +00C0E5 GESPAC, S.A. +00C0E6 Verilink Corporation +00C0E7 FIBERDATA AB +00C0E8 PLEXCOM, INC. +00C0E9 OAK SOLUTIONS, LTD. +00C0EA ARRAY TECHNOLOGY LTD. +00C0EB SEH COMPUTERTECHNIK GMBH +00C0EC DAUPHIN TECHNOLOGY +00C0ED US ARMY ELECTRONIC +00C0EE KYOCERA CORPORATION +00C0EF ABIT CORPORATION +00C0F0 KINGSTON TECHNOLOGY CORP. +00C0F1 SHINKO ELECTRIC CO., LTD. +00C0F2 TRANSITION NETWORKS +00C0F3 NETWORK COMMUNICATIONS CORP. +00C0F4 INTERLINK SYSTEM CO., LTD. +00C0F5 METACOMP, INC. +00C0F6 CELAN TECHNOLOGY INC. +00C0F7 ENGAGE COMMUNICATION, INC. +00C0F8 ABOUT COMPUTING INC. +00C0F9 HARRIS AND JEFFRIES, INC. +00C0FA CANARY COMMUNICATIONS, INC. +00C0FB ADVANCED TECHNOLOGY LABS +00C0FC ELASTIC REALITY, INC. +00C0FD PROSUM +00C0FE APTEC COMPUTER SYSTEMS, INC. +00C0FF DOT HILL SYSTEMS CORPORATION +00CBBD Cambridge Broadband Ltd. +00CF1C COMMUNICATION MACHINERY CORP. +00D000 FERRAN SCIENTIFIC, INC. +00D001 VST TECHNOLOGIES, INC. +00D002 DITECH CORPORATION +00D003 COMDA ENTERPRISES CORP. +00D004 PENTACOM LTD. +00D005 ZHS ZEITMANAGEMENTSYSTEME +00D006 CISCO SYSTEMS, INC. +00D007 MIC ASSOCIATES, INC. +00D008 MACTELL CORPORATION +00D009 HSING TECH. ENTERPRISE CO. LTD +00D00A LANACCESS TELECOM S.A. +00D00B RHK TECHNOLOGY, INC. +00D00C SNIJDER MICRO SYSTEMS +00D00D MICROMERITICS INSTRUMENT +00D00E PLURIS, INC. +00D00F SPEECH DESIGN GMBH +00D010 CONVERGENT NETWORKS, INC. +00D011 PRISM VIDEO, INC. +00D012 GATEWORKS CORP. +00D013 PRIMEX AEROSPACE COMPANY +00D014 ROOT, INC. +00D015 UNIVEX MICROTECHNOLOGY CORP. +00D016 SCM MICROSYSTEMS, INC. +00D017 SYNTECH INFORMATION CO., LTD. +00D018 QWES. COM, INC. +00D019 DAINIPPON SCREEN CORPORATE +00D01A URMET SUD S.P.A. +00D01B MIMAKI ENGINEERING CO., LTD. +00D01C SBS TECHNOLOGIES, +00D01D FURUNO ELECTRIC CO., LTD. +00D01E PINGTEL CORP. +00D01F CTAM PTY. LTD. +00D020 AIM SYSTEM, INC. +00D021 REGENT ELECTRONICS CORP. +00D022 INCREDIBLE TECHNOLOGIES, INC. +00D023 INFORTREND TECHNOLOGY, INC. +00D024 Cognex Corporation +00D025 XROSSTECH, INC. +00D026 HIRSCHMANN AUSTRIA GMBH +00D027 APPLIED AUTOMATION, INC. +00D028 OMNEON VIDEO NETWORKS +00D029 WAKEFERN FOOD CORPORATION +00D02A Voxent Systems Ltd. +00D02B JETCELL, INC. +00D02C CAMPBELL SCIENTIFIC, INC. +00D02D ADEMCO +00D02E COMMUNICATION AUTOMATION CORP. +00D02F VLSI TECHNOLOGY INC. +00D030 SAFETRAN SYSTEMS CORP. +00D031 INDUSTRIAL LOGIC CORPORATION +00D032 YANO ELECTRIC CO., LTD. +00D033 DALIAN DAXIAN NETWORK +00D034 ORMEC SYSTEMS CORP. +00D035 BEHAVIOR TECH. COMPUTER CORP. +00D036 TECHNOLOGY ATLANTA CORP. +00D037 PHILIPS-DVS-LO BDR +00D038 FIVEMERE, LTD. +00D039 UTILICOM, INC. +00D03A ZONEWORX, INC. +00D03B VISION PRODUCTS PTY. LTD. +00D03C Vieo, Inc. +00D03D GALILEO TECHNOLOGY, LTD. +00D03E ROCKETCHIPS, INC. +00D03F AMERICAN COMMUNICATION +00D040 SYSMATE CO., LTD. +00D041 AMIGO TECHNOLOGY CO., LTD. +00D042 MAHLO GMBH & CO. UG +00D043 ZONAL RETAIL DATA SYSTEMS +00D044 ALIDIAN NETWORKS, INC. +00D045 KVASER AB +00D046 DOLBY LABORATORIES, INC. +00D047 XN TECHNOLOGIES +00D048 ECTON, INC. +00D049 IMPRESSTEK CO., LTD. +00D04A PRESENCE TECHNOLOGY GMBH +00D04B LA CIE GROUP S.A. +00D04C EUROTEL TELECOM LTD. +00D04D DIV OF RESEARCH & STATISTICS +00D04E LOGIBAG +00D04F BITRONICS, INC. +00D050 ISKRATEL +00D051 O2 MICRO, INC. +00D052 ASCEND COMMUNICATIONS, INC. +00D053 CONNECTED SYSTEMS +00D054 SAS INSTITUTE INC. +00D055 KATHREIN-WERKE KG +00D056 SOMAT CORPORATION +00D057 ULTRAK, INC. +00D058 CISCO SYSTEMS, INC. +00D059 AMBIT MICROSYSTEMS CORP. +00D05A SYMBIONICS, LTD. +00D05B ACROLOOP MOTION CONTROL +00D05C TECHNOTREND SYSTEMTECHNIK GMBH +00D05D INTELLIWORXX, INC. +00D05E STRATABEAM TECHNOLOGY, INC. +00D05F VALCOM, INC. +00D060 PANASONIC EUROPEAN +00D061 TREMON ENTERPRISES CO., LTD. +00D062 DIGIGRAM +00D063 CISCO SYSTEMS, INC. +00D064 MULTITEL +00D065 TOKO ELECTRIC +00D066 WINTRISS ENGINEERING CORP. +00D067 CAMPIO COMMUNICATIONS +00D068 IWILL CORPORATION +00D069 TECHNOLOGIC SYSTEMS +00D06A LINKUP SYSTEMS CORPORATION +00D06B SR TELECOM INC. +00D06C SHAREWAVE, INC. +00D06D ACRISON, INC. +00D06E TRENDVIEW RECORDERS LTD. +00D06F KMC CONTROLS +00D070 LONG WELL ELECTRONICS CORP. +00D071 ECHELON CORP. +00D072 BROADLOGIC +00D073 ACN ADVANCED COMMUNICATIONS +00D074 TAQUA SYSTEMS, INC. +00D075 ALARIS MEDICAL SYSTEMS, INC. +00D076 MERRILL LYNCH & CO., INC. +00D077 LUCENT TECHNOLOGIES +00D078 ELTEX OF SWEDEN AB +00D079 CISCO SYSTEMS, INC. +00D07A AMAQUEST COMPUTER CORP. +00D07B COMCAM INTERNATIONAL LTD. +00D07C KOYO ELECTRONICS INC. CO.,LTD. +00D07D COSINE COMMUNICATIONS +00D07E KEYCORP LTD. +00D07F STRATEGY & TECHNOLOGY, LIMITED +00D080 EXABYTE CORPORATION +00D081 REAL TIME DEVICES USA, INC. +00D082 IOWAVE INC. +00D083 INVERTEX, INC. +00D084 NEXCOMM SYSTEMS, INC. +00D085 OTIS ELEVATOR COMPANY +00D086 FOVEON, INC. +00D087 MICROFIRST INC. +00D088 Terayon Communications Systems +00D089 DYNACOLOR, INC. +00D08A PHOTRON USA +00D08B ADVA Limited +00D08C GENOA TECHNOLOGY, INC. +00D08D PHOENIX GROUP, INC. +00D08E NVISION INC. +00D08F ARDENT TECHNOLOGIES, INC. +00D090 CISCO SYSTEMS, INC. +00D091 SMARTSAN SYSTEMS, INC. +00D092 GLENAYRE WESTERN MULTIPLEX +00D093 TQ - COMPONENTS GMBH +00D094 TIMELINE VISTA, INC. +00D095 XYLAN CORPORATION +00D096 3COM EUROPE LTD. +00D097 CISCO SYSTEMS, INC. +00D098 Photon Dynamics Canada Inc. +00D099 ELCARD OY +00D09A FILANET CORPORATION +00D09B SPECTEL LTD. +00D09C KAPADIA COMMUNICATIONS +00D09D VERIS INDUSTRIES +00D09E 2WIRE, INC. +00D09F NOVTEK TEST SYSTEMS +00D0A0 MIPS DENMARK +00D0A1 OSKAR VIERLING GMBH + CO. KG +00D0A2 INTEGRATED DEVICE +00D0A3 VOCAL DATA, INC. +00D0A4 ALANTRO COMMUNICATIONS +00D0A5 AMERICAN ARIUM +00D0A6 LANBIRD TECHNOLOGY CO., LTD. +00D0A7 TOKYO SOKKI KENKYUJO CO., LTD. +00D0A8 NETWORK ENGINES, INC. +00D0A9 SHINANO KENSHI CO., LTD. +00D0AA CHASE COMMUNICATIONS +00D0AB DELTAKABEL TELECOM CV +00D0AC GRAYSON WIRELESS +00D0AD TL INDUSTRIES +00D0AE ORESIS COMMUNICATIONS, INC. +00D0AF CUTLER-HAMMER, INC. +00D0B0 BITSWITCH LTD. +00D0B1 OMEGA ELECTRONICS SA +00D0B2 XIOTECH CORPORATION +00D0B3 DRS FLIGHT SAFETY AND +00D0B4 KATSUJIMA CO., LTD. +00D0B5 IPricot formerly DotCom +00D0B6 CRESCENT NETWORKS, INC. +00D0B7 INTEL CORPORATION +00D0B8 Iomega Corporation +00D0B9 MICROTEK INTERNATIONAL, INC. +00D0BA CISCO SYSTEMS, INC. +00D0BB CISCO SYSTEMS, INC. +00D0BC CISCO SYSTEMS, INC. +00D0BD SICAN GMBH +00D0BE EMUTEC INC. +00D0BF PIVOTAL TECHNOLOGIES +00D0C0 CISCO SYSTEMS, INC. +00D0C1 HARMONIC DATA SYSTEMS, LTD. +00D0C2 BALTHAZAR TECHNOLOGY AB +00D0C3 VIVID TECHNOLOGY PTE, LTD. +00D0C4 TERATECH CORPORATION +00D0C5 COMPUTATIONAL SYSTEMS, INC. +00D0C6 THOMAS & BETTS CORP. +00D0C7 PATHWAY, INC. +00D0C8 I/O CONSULTING A/S +00D0C9 ADVANTECH CO., LTD. +00D0CA INTRINSYC SOFTWARE INC. +00D0CB DASAN CO., LTD. +00D0CC TECHNOLOGIES LYRE INC. +00D0CD ATAN TECHNOLOGY INC. +00D0CE ASYST ELECTRONIC +00D0CF MORETON BAY +00D0D0 ZHONGXING TELECOM LTD. +00D0D1 SIROCCO SYSTEMS, INC. +00D0D2 EPILOG CORPORATION +00D0D3 CISCO SYSTEMS, INC. +00D0D4 V-BITS, INC. +00D0D5 GRUNDIG AG +00D0D6 AETHRA TELECOMUNICAZIONI +00D0D7 B2C2, INC. +00D0D8 3Com Corporation +00D0D9 DEDICATED MICROCOMPUTERS +00D0DA TAICOM DATA SYSTEMS CO., LTD. +00D0DB MCQUAY INTERNATIONAL +00D0DC MODULAR MINING SYSTEMS, INC. +00D0DD SUNRISE TELECOM, INC. +00D0DE PHILIPS MULTIMEDIA NETWORK +00D0DF KUZUMI ELECTRONICS, INC. +00D0E0 DOOIN ELECTRONICS CO. +00D0E1 AVIONITEK ISRAEL INC. +00D0E2 MRT MICRO, INC. +00D0E3 ELE-CHEM ENGINEERING CO., LTD. +00D0E4 CISCO SYSTEMS, INC. +00D0E5 SOLIDUM SYSTEMS CORP. +00D0E6 IBOND INC. +00D0E7 VCON TELECOMMUNICATION LTD. +00D0E8 MAC SYSTEM CO., LTD. +00D0E9 ADVANTAGE CENTURY +00D0EA NEXTONE COMMUNICATIONS, INC. +00D0EB LIGHTERA NETWORKS, INC. +00D0EC NAKAYO TELECOMMUNICATIONS, INC +00D0ED XIOX +00D0EE DICTAPHONE CORPORATION +00D0EF IGT +00D0F0 CONVISION TECHNOLOGY GMBH +00D0F1 SEGA ENTERPRISES, LTD. +00D0F2 MONTEREY NETWORKS +00D0F3 SOLARI DI UDINE SPA +00D0F4 CARINTHIAN TECH INSTITUTE +00D0F5 ORANGE MICRO, INC. +00D0F6 Alcatel Canada +00D0F7 NEXT NETS CORPORATION +00D0F8 FUJIAN STAR TERMINAL +00D0F9 ACUTE COMMUNICATIONS CORP. +00D0FA RACAL GUARDATA +00D0FB TEK MICROSYSTEMS, INCORPORATED +00D0FC GRANITE MICROSYSTEMS +00D0FD OPTIMA TELE.COM, INC. +00D0FE ASTRAL POINT +00D0FF CISCO SYSTEMS, INC. +00DD00 UNGERMANN-BASS INC. +00DD01 UNGERMANN-BASS INC. +00DD02 UNGERMANN-BASS INC. +00DD03 UNGERMANN-BASS INC. +00DD04 UNGERMANN-BASS INC. +00DD05 UNGERMANN-BASS INC. +00DD06 UNGERMANN-BASS INC. +00DD07 UNGERMANN-BASS INC. +00DD08 UNGERMANN-BASS INC. +00DD09 UNGERMANN-BASS INC. +00DD0A UNGERMANN-BASS INC. +00DD0B UNGERMANN-BASS INC. +00DD0C UNGERMANN-BASS INC. +00DD0D UNGERMANN-BASS INC. +00DD0E UNGERMANN-BASS INC. +00DD0F UNGERMANN-BASS INC. +00E000 FUJITSU, LTD +00E001 STRAND LIGHTING LIMITED +00E002 CROSSROADS SYSTEMS, INC. +00E003 NOKIA WIRELESS BUSINESS COMMUN +00E004 PMC-SIERRA, INC. +00E005 TECHNICAL CORP. +00E006 SILICON INTEGRATED SYS. CORP. +00E007 NETWORK ALCHEMY LTD. +00E008 AMAZING CONTROLS! INC. +00E009 MARATHON TECHNOLOGIES CORP. +00E00A DIBA, INC. +00E00B ROOFTOP COMMUNICATIONS CORP. +00E00C MOTOROLA +00E00D RADIANT SYSTEMS +00E00E AVALON IMAGING SYSTEMS, INC. +00E00F SHANGHAI BAUD DATA +00E010 HESS SB-AUTOMATENBAU GmbH +00E011 UNIDEN SAN DIEGO R&D CENTER, INC. +00E012 PLUTO TECHNOLOGIES INTERNATIONAL INC. +00E013 EASTERN ELECTRONIC CO., LTD. +00E014 CISCO SYSTEMS, INC. +00E015 HEIWA CORPORATION +00E016 RAPID CITY COMMUNICATIONS +00E017 EXXACT GmbH +00E018 ASUSTEK COMPUTER INC. +00E019 ING. GIORDANO ELETTRONICA +00E01A COMTEC SYSTEMS. CO., LTD. +00E01B SPHERE COMMUNICATIONS, INC. +00E01C MOBILITY ELECTRONICSY +00E01D WebTV NETWORKS, INC. +00E01E CISCO SYSTEMS, INC. +00E01F AVIDIA Systems, Inc. +00E020 TECNOMEN OY +00E021 FREEGATE CORP. +00E022 Analog Devices Inc. +00E023 TELRAD +00E024 GADZOOX NETWORKS +00E025 dit CO., LTD. +00E026 Redlake MASD LLC +00E027 DUX, INC. +00E028 APTIX CORPORATION +00E029 STANDARD MICROSYSTEMS CORP. +00E02A TANDBERG TELEVISION AS +00E02B EXTREME NETWORKS +00E02C AST COMPUTER +00E02D InnoMediaLogic, Inc. +00E02E SPC ELECTRONICS CORPORATION +00E02F MCNS HOLDINGS, L.P. +00E030 MELITA INTERNATIONAL CORP. +00E031 HAGIWARA ELECTRIC CO., LTD. +00E032 MISYS FINANCIAL SYSTEMS, LTD. +00E033 E.E.P.D. GmbH +00E034 CISCO SYSTEMS, INC. +00E035 LOUGHBOROUGH SOUND IMAGES, PLC +00E036 PIONEER CORPORATION +00E037 CENTURY CORPORATION +00E038 PROXIMA CORPORATION +00E039 PARADYNE CORP. +00E03A CABLETRON SYSTEMS, INC. +00E03B PROMINET CORPORATION +00E03C AdvanSys +00E03D FOCON ELECTRONIC SYSTEMS A/S +00E03E ALFATECH, INC. +00E03F JATON CORPORATION +00E040 DeskStation Technology, Inc. +00E041 CSPI +00E042 Pacom Systems Ltd. +00E043 VitalCom +00E044 LSICS CORPORATION +00E045 TOUCHWAVE, INC. +00E046 BENTLY NEVADA CORP. +00E047 INFOCUS SYSTEMS +00E048 SDL COMMUNICATIONS, INC. +00E049 MICROWI ELECTRONIC GmbH +00E04A ENHANCED MESSAGING SYSTEMS, INC +00E04B JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH +00E04C REALTEK SEMICONDUCTOR CORP. +00E04D INTERNET INITIATIVE JAPAN, INC +00E04E SANYO DENKI CO., LTD. +00E04F CISCO SYSTEMS, INC. +00E050 EXECUTONE INFORMATION SYSTEMS, INC. +00E051 TALX CORPORATION +00E052 FOUNDRY NETWORKS, INC. +00E053 CELLPORT LABS, INC. +00E054 KODAI HITEC CO., LTD. +00E055 INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A. +00E056 HOLONTECH CORPORATION +00E057 HAN MICROTELECOM. CO., LTD. +00E058 PHASE ONE DENMARK A/S +00E059 CONTROLLED ENVIRONMENTS, LTD. +00E05A GALEA NETWORK SECURITY +00E05B WEST END SYSTEMS CORP. +00E05C MATSUSHITA KOTOBUKI ELECTRONICS INDUSTRIES, LTD. +00E05D UNITEC CO., LTD. +00E05E JAPAN AVIATION ELECTRONICS INDUSTRY, LTD. +00E05F e-Net, Inc. +00E060 SHERWOOD +00E061 EdgePoint Networks, Inc. +00E062 HOST ENGINEERING +00E063 CABLETRON - YAGO SYSTEMS, INC. +00E064 SAMSUNG ELECTRONICS +00E065 OPTICAL ACCESS INTERNATIONAL +00E066 ProMax Systems, Inc. +00E067 eac AUTOMATION-CONSULTING GmbH +00E068 MERRIMAC SYSTEMS INC. +00E069 JAYCOR +00E06A KAPSCH AG +00E06B W&G SPECIAL PRODUCTS +00E06C AEP Systems International Ltd +00E06D COMPUWARE CORPORATION +00E06E FAR SYSTEMS S.p.A. +00E06F Terayon Communications Systems +00E070 DH TECHNOLOGY +00E071 EPIS MICROCOMPUTER +00E072 LYNK +00E073 NATIONAL AMUSEMENT NETWORK, INC. +00E074 TIERNAN COMMUNICATIONS, INC. +00E075 Verilink Corporation +00E076 DEVELOPMENT CONCEPTS, INC. +00E077 WEBGEAR, INC. +00E078 BERKELEY NETWORKS +00E079 A.T.N.R. +00E07A MIKRODIDAKT AB +00E07B BAY NETWORKS +00E07C METTLER-TOLEDO, INC. +00E07D NETRONIX, INC. +00E07E WALT DISNEY IMAGINEERING +00E07F LOGISTISTEM s.r.l. +00E080 CONTROL RESOURCES CORPORATION +00E081 TYAN COMPUTER CORP. +00E082 ANERMA +00E083 JATO TECHNOLOGIES, INC. +00E084 COMPULITE R&D +00E085 GLOBAL MAINTECH, INC. +00E086 CYBEX COMPUTER PRODUCTS +00E087 LeCroy - Networking Productions Division +00E088 LTX CORPORATION +00E089 ION Networks, Inc. +00E08A GEC AVERY, LTD. +00E08B QLogic Corp. +00E08C NEOPARADIGM LABS, INC. +00E08D PRESSURE SYSTEMS, INC. +00E08E UTSTARCOM +00E08F CISCO SYSTEMS, INC. +00E090 BECKMAN LAB. AUTOMATION DIV. +00E091 LG ELECTRONICS, INC. +00E092 ADMTEK INCORPORATED +00E093 ACKFIN NETWORKS +00E094 OSAI SRL +00E095 ADVANCED-VISION TECHNOLGIES CORP. +00E096 SHIMADZU CORPORATION +00E097 CARRIER ACCESS CORPORATION +00E098 AboCom Systems, Inc. +00E099 SAMSON AG +00E09A POSITRON INDUSTRIES, INC. +00E09B ENGAGE NETWORKS, INC. +00E09C MII +00E09D SARNOFF CORPORATION +00E09E QUANTUM CORPORATION +00E09F PIXEL VISION +00E0A0 WILTRON CO. +00E0A1 HIMA PAUL HILDEBRANDT GmbH Co. KG +00E0A2 MICROSLATE INC. +00E0A3 CISCO SYSTEMS, INC. +00E0A4 ESAOTE S.p.A. +00E0A5 ComCore Semiconductor, Inc. +00E0A6 TELOGY NETWORKS, INC. +00E0A7 IPC INFORMATION SYSTEMS, INC. +00E0A8 SAT GmbH & Co. +00E0A9 FUNAI ELECTRIC CO., LTD. +00E0AA ELECTROSONIC LTD. +00E0AB DIMAT S.A. +00E0AC MIDSCO, INC. +00E0AD EES TECHNOLOGY, LTD. +00E0AE XAQTI CORPORATION +00E0AF GENERAL DYNAMICS INFORMATION SYSTEMS +00E0B0 CISCO SYSTEMS, INC. +00E0B1 PACKET ENGINES, INC. +00E0B2 TELMAX COMMUNICATIONS CORP. +00E0B3 EtherWAN Systems, Inc. +00E0B4 TECHNO SCOPE CO., LTD. +00E0B5 ARDENT COMMUNICATIONS CORP. +00E0B6 Entrada Networks +00E0B7 PI GROUP, LTD. +00E0B8 GATEWAY 2000 +00E0B9 BYAS SYSTEMS +00E0BA BERGHOF AUTOMATIONSTECHNIK GmbH +00E0BB NBX CORPORATION +00E0BC SYMON COMMUNICATIONS, INC. +00E0BD INTERFACE SYSTEMS, INC. +00E0BE GENROCO INTERNATIONAL, INC. +00E0BF TORRENT NETWORKING TECHNOLOGIES CORP. +00E0C0 SEIWA ELECTRIC MFG. CO., LTD. +00E0C1 MEMOREX TELEX JAPAN, LTD. +00E0C2 NECSY S.p.A. +00E0C3 SAKAI SYSTEM DEVELOPMENT CORP. +00E0C4 HORNER ELECTRIC, INC. +00E0C5 BCOM ELECTRONICS INC. +00E0C6 LINK2IT, L.L.C. +00E0C7 EUROTECH SRL +00E0C8 VIRTUAL ACCESS, LTD. +00E0C9 AutomatedLogic Corporation +00E0CA BEST DATA PRODUCTS +00E0CB RESON, INC. +00E0CC HERO SYSTEMS, LTD. +00E0CD SENSIS CORPORATION +00E0CE ARN +00E0CF INTEGRATED DEVICE TECHNOLOGY, INC. +00E0D0 NETSPEED, INC. +00E0D1 TELSIS LIMITED +00E0D2 VERSANET COMMUNICATIONS, INC. +00E0D3 DATENTECHNIK GmbH +00E0D4 EXCELLENT COMPUTER +00E0D5 ARCXEL TECHNOLOGIES, INC. +00E0D6 COMPUTER & COMMUNICATION RESEARCH LAB. +00E0D7 SUNSHINE ELECTRONICS, INC. +00E0D8 LANBit Computer, Inc. +00E0D9 TAZMO CO., LTD. +00E0DA ASSURED ACCESS TECHNOLOGY, INC. +00E0DB ViaVideo Communications, Inc. +00E0DC NEXWARE CORP. +00E0DD ZENITH ELECTRONICS CORPORATION +00E0DE DATAX NV +00E0DF KE KOMMUNIKATIONS-ELECTRONIK +00E0E0 SI ELECTRONICS, LTD. +00E0E1 G2 NETWORKS, INC. +00E0E2 INNOVA CORP. +00E0E3 SK-ELEKTRONIK GmbH +00E0E4 FANUC ROBOTICS NORTH AMERICA, Inc. +00E0E5 CINCO NETWORKS, INC. +00E0E6 INCAA DATACOM B.V. +00E0E7 RAYTHEON E-SYSTEMS, INC. +00E0E8 GRETACODER Data Systems AG +00E0E9 DATA LABS, INC. +00E0EA INNOVAT COMMUNICATIONS, INC. +00E0EB DIGICOM SYSTEMS, INCORPORATED +00E0EC CELESTICA INC. +00E0ED SILICOM, LTD. +00E0EE MAREL HF +00E0EF DIONEX +00E0F0 ABLER TECHNOLOGY, INC. +00E0F1 THAT CORPORATION +00E0F2 ARLOTTO COMNET, INC. +00E0F3 WebSprint Communications, Inc. +00E0F4 INSIDE Technology A/S +00E0F5 TELES AG +00E0F6 DECISION EUROPE +00E0F7 CISCO SYSTEMS, INC. +00E0F8 DICNA CONTROL AB +00E0F9 CISCO SYSTEMS, INC. +00E0FA TRL TECHNOLOGY, LTD. +00E0FB LEIGHTRONIX, INC. +00E0FC HUAWEI TECHNOLOGIES CO., LTD. +00E0FD A-TREND TECHNOLOGY CO., LTD. +00E0FE CISCO SYSTEMS, INC. +00E0FF SECURITY DYNAMICS TECHNOLOGIES, Inc. +00E6D3 NIXDORF COMPUTER CORP. +020701 RACAL-DATACOM +021C7C PERQ SYSTEMS CORPORATION +026086 LOGIC REPLACEMENT TECH. LTD. +02608C 3COM CORPORATION +027001 RACAL-DATACOM +0270B0 M/A-COM INC. COMPANIES +0270B3 DATA RECALL LTD +029D8E CARDIAC RECORDERS INC. +02AA3C OLIVETTI TELECOMM SPA (OLTECO) +02BB01 OCTOTHORPE CORP. +02C08C 3COM CORPORATION +02CF1C COMMUNICATION MACHINERY CORP. +02E6D3 NIXDORF COMPUTER CORPORATION +040AE0 XMIT AG COMPUTER NETWORKS +04E0C4 TRIUMPH-ADLER AG +080001 COMPUTERVISION CORPORATION +080002 BRIDGE COMMUNICATIONS INC. +080003 ADVANCED COMPUTER COMM. +080004 CROMEMCO INCORPORATED +080005 SYMBOLICS INC. +080006 SIEMENS AG +080007 APPLE COMPUTER INC. +080008 BOLT BERANEK AND NEWMAN INC. +080009 HEWLETT PACKARD +08000A NESTAR SYSTEMS INCORPORATED +08000B UNISYS CORPORATION +08000C MIKLYN DEVELOPMENT CO. +08000D INTERNATIONAL COMPUTERS LTD. +08000E NCR CORPORATION +08000F MITEL CORPORATION +080011 TEKTRONIX INC. +080012 BELL ATLANTIC INTEGRATED SYST. +080013 EXXON +080014 EXCELAN +080015 STC BUSINESS SYSTEMS +080016 BARRISTER INFO SYS CORP +080017 NATIONAL SEMICONDUCTOR +080018 PIRELLI FOCOM NETWORKS +080019 GENERAL ELECTRIC CORPORATION +08001A TIARA/ 10NET +08001B DATA GENERAL +08001C KDD-KOKUSAI DEBNSIN DENWA CO. +08001D ABLE COMMUNICATIONS INC. +08001E APOLLO COMPUTER INC. +08001F SHARP CORPORATION +080020 SUN MICROSYSTEMS INC. +080021 3M COMPANY +080022 NBI INC. +080023 Panasonic Communications Co., Ltd. +080024 10NET COMMUNICATIONS/DCA +080025 CONTROL DATA +080026 NORSK DATA A.S. +080027 CADMUS COMPUTER SYSTEMS +080028 Texas Instruments +080029 MEGATEK CORPORATION +08002A MOSAIC TECHNOLOGIES INC. +08002B DIGITAL EQUIPMENT CORPORATION +08002C BRITTON LEE INC. +08002D LAN-TEC INC. +08002E METAPHOR COMPUTER SYSTEMS +08002F PRIME COMPUTER INC. +080030 NETWORK RESEARCH CORPORATION +080030 CERN +080030 ROYAL MELBOURNE INST OF TECH +080031 LITTLE MACHINES INC. +080032 TIGAN INCORPORATED +080033 BAUSCH & LOMB +080034 FILENET CORPORATION +080035 MICROFIVE CORPORATION +080036 INTERGRAPH CORPORATION +080037 FUJI-XEROX CO. LTD. +080038 CII HONEYWELL BULL +080039 SPIDER SYSTEMS LIMITED +08003A ORCATECH INC. +08003B TORUS SYSTEMS LIMITED +08003C SCHLUMBERGER WELL SERVICES +08003D CADNETIX CORPORATIONS +08003E CODEX CORPORATION +08003F FRED KOSCHARA ENTERPRISES +080040 FERRANTI COMPUTER SYS. LIMITED +080041 RACAL-MILGO INFORMATION SYS.. +080042 JAPAN MACNICS CORP. +080043 PIXEL COMPUTER INC. +080044 DAVID SYSTEMS INC. +080045 CONCURRENT COMPUTER CORP. +080046 SONY CORPORATION LTD. +080047 SEQUENT COMPUTER SYSTEMS INC. +080048 EUROTHERM GAUGING SYSTEMS +080049 UNIVATION +08004A BANYAN SYSTEMS INC. +08004B PLANNING RESEARCH CORP. +08004C HYDRA COMPUTER SYSTEMS INC. +08004D CORVUS SYSTEMS INC. +08004E 3COM EUROPE LTD. +08004F CYGNET SYSTEMS +080050 DAISY SYSTEMS CORP. +080051 EXPERDATA +080052 INSYSTEC +080053 MIDDLE EAST TECH. UNIVERSITY +080055 STANFORD TELECOMM. INC. +080056 STANFORD LINEAR ACCEL. CENTER +080057 EVANS & SUTHERLAND +080058 SYSTEMS CONCEPTS +080059 A/S MYCRON +08005A IBM CORPORATION +08005B VTA TECHNOLOGIES INC. +08005C FOUR PHASE SYSTEMS +08005D GOULD INC. +08005E COUNTERPOINT COMPUTER INC. +08005F SABER TECHNOLOGY CORP. +080060 INDUSTRIAL NETWORKING INC. +080061 JAROGATE LTD. +080062 GENERAL DYNAMICS +080063 PLESSEY +080064 AUTOPHON AG +080065 GENRAD INC. +080066 AGFA CORPORATION +080067 COMDESIGN +080068 RIDGE COMPUTERS +080069 SILICON GRAPHICS INC. +08006A ATT BELL LABORATORIES +08006B ACCEL TECHNOLOGIES INC. +08006C SUNTEK TECHNOLOGY INT'L +08006D WHITECHAPEL COMPUTER WORKS +08006E MASSCOMP +08006F PHILIPS APELDOORN B.V. +080070 MITSUBISHI ELECTRIC CORP. +080071 MATRA (DSIE) +080072 XEROX CORP UNIV GRANT PROGRAM +080073 TECMAR INC. +080074 CASIO COMPUTER CO. LTD. +080075 DANSK DATA ELECTRONIK +080076 PC LAN TECHNOLOGIES +080077 TSL COMMUNICATIONS LTD. +080078 ACCELL CORPORATION +080079 THE DROID WORKS +08007A INDATA +08007B SANYO ELECTRIC CO. LTD. +08007C VITALINK COMMUNICATIONS CORP. +08007E AMALGAMATED WIRELESS(AUS) LTD +08007F CARNEGIE-MELLON UNIVERSITY +080080 AES DATA INC. +080081 ,ASTECH INC. +080082 VERITAS SOFTWARE +080083 Seiko Instruments Inc. +080084 TOMEN ELECTRONICS CORP. +080085 ELXSI +080086 KONICA MINOLTA HOLDINGS, INC. +080087 XYPLEX +080088 MCDATA CORPORATION +080089 KINETICS +08008A PERFORMANCE TECHNOLOGY +08008B PYRAMID TECHNOLOGY CORP. +08008C NETWORK RESEARCH CORPORATION +08008D XYVISION INC. +08008E TANDEM COMPUTERS +08008F CHIPCOM CORPORATION +080090 SONOMA SYSTEMS +081443 UNIBRAIN S.A. +08BBCC AK-NORD EDV VERTRIEBSGES. mbH +10005A IBM CORPORATION +1000E8 NATIONAL SEMICONDUCTOR +800010 ATT BELL LABORATORIES +A06A00 Verilink Corporation +AA0000 DIGITAL EQUIPMENT CORPORATION +AA0001 DIGITAL EQUIPMENT CORPORATION +AA0002 DIGITAL EQUIPMENT CORPORATION +AA0003 DIGITAL EQUIPMENT CORPORATION +AA0004 DIGITAL EQUIPMENT CORPORATION diff --git a/kcontrol/view1394/view1394.cpp b/kcontrol/view1394/view1394.cpp new file mode 100644 index 000000000..87089b321 --- /dev/null +++ b/kcontrol/view1394/view1394.cpp @@ -0,0 +1,334 @@ +/* + * view1394.cpp + * + * Copyright (C) 2003 Alexander Neundorf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "view1394.h" + +#include +#include +#include +#include +#include +#include + +/* Get PRIX64 to output octlet_t */ +#define __STDC_FORMAT_MACROS +#include + +#include +#define CONFIGROM_BASE 0x00 +#define CONFIGROM_CAP 0x08 +#define CONFIGROM_GUID_HI 0x0c +#define CONFIGROM_GUID_LO 0x10 +#define MAX_1394_PORTS 16 + +int my_reset_handler(raw1394handle_t handle, unsigned int ) +{ + View1394* view1394=(View1394*)raw1394_get_userdata(handle); + if (view1394!=0) + view1394->rescanBus(); + return 0; +} + + +View1394::View1394(QWidget *parent, const char *name) +:KCModule(parent,name) +,m_insideRescanBus(false) +{ + setQuickHelp( i18n("On the right hand side you can see some information about " + "your IEEE 1394 configuration.
      " + "The meaning of the columns:
      " + "Name: port or node name, the number can change with each bus reset
      " + "GUID: the 64 bit GUID of the node
      " + "Local: checked if the node is an IEEE 1394 port of your computer
      " + "IRM: checked if the node is isochronous resource manager capable
      " + "CRM: checked if the node is cycle master capable
      " + "ISO: checked if the node supports isochronous transfers
      " + "BM: checked if the node is bus manager capable
      " + "PM: checked if the node is power management capable
      " + "Acc: the cycle clock accuracy of the node, valid from 0 to 100
      " + "Speed: the speed of the node
      ")); + + setButtons( KCModule::Help ); + + m_ouiDb=new OuiDb(); + QVBoxLayout *box=new QVBoxLayout(this, 0, KDialog::spacingHint()); + m_view=new View1394Widget(this); + for (int i=2; i<8; i++) + m_view->m_listview->setColumnAlignment(i, AlignHCenter); + m_view->m_listview->setColumnAlignment(8, AlignRight); + m_view->m_listview->setColumnAlignment(9, AlignRight); + box->addWidget(m_view); + connect(m_view->m_busResetPb, SIGNAL(clicked()), this, SLOT(generateBusReset())); + connect(&m_rescanTimer, SIGNAL(timeout()), this, SLOT(rescanBus())); + m_notifiers.setAutoDelete(true); + rescanBus(); +} + +View1394::~View1394() +{ +} + +bool View1394::readConfigRom(raw1394handle_t handle, nodeid_t nodeid, quadlet_t& firstQuad, quadlet_t& cap, octlet_t& guid) +{ + quadlet_t q=0; + firstQuad=0; + cap=0; + guid=0; + nodeaddr_t addr=CSR_REGISTER_BASE + CSR_CONFIG_ROM + CONFIGROM_BASE; + for (int count=0; count<5; count++) + { + struct timeval tv; + q=0; + int res=raw1394_read(handle, nodeid|0xffc0, addr, sizeof(q), &q); + if (res==0) + { + firstQuad=ntohl(q); + break; + } + tv.tv_sec=0; + tv.tv_usec=10*1000; + select(0,0,0,0,&tv); + } + if (firstQuad==0) + return false; + + addr=CSR_REGISTER_BASE + CSR_CONFIG_ROM + CONFIGROM_CAP; + if (raw1394_read(handle, nodeid|0xffc0, addr, sizeof(q), &q)!=0) + return false; + + cap=ntohl(q); + + addr=CSR_REGISTER_BASE + CSR_CONFIG_ROM + CONFIGROM_GUID_HI; + if (raw1394_read(handle, nodeid|0xffc0, addr, sizeof(q), &q)!=0) + return false; + + guid=octlet_t(ntohl(q))<<32; + + addr=CSR_REGISTER_BASE + CSR_CONFIG_ROM + CONFIGROM_GUID_LO; + if (raw1394_read(handle, nodeid|0xffc0, addr, sizeof(q), &q)!=0) + return false; + + guid=guid|ntohl(q); + + return true; +} + +void View1394::callRaw1394EventLoop(int fd) +{ + for (QValueList::iterator it= m_handles.begin(); it!=m_handles.end(); ++it) + if (raw1394_get_fd(*it)==fd) + { + raw1394_loop_iterate(*it); + break; + } +} + +void View1394::rescanBus() +{ + if (m_insideRescanBus) + { + m_rescanTimer.start(100, true); + return; + } + m_insideRescanBus=true; +// static int depth=0; +// depth++; + m_notifiers.clear(); + for (QValueList::iterator it=m_handles.begin(); it!=m_handles.end(); ++it) + raw1394_destroy_handle(*it); + m_handles.clear(); + m_view->m_listview->clear(); + + raw1394handle_t handle=raw1394_new_handle(); + if (handle==NULL) + { + m_insideRescanBus=false; + return; + } + //now search for new stuff + struct raw1394_portinfo p_info[MAX_1394_PORTS]; + int num_of_cards=raw1394_get_port_info(handle, p_info, MAX_1394_PORTS); + raw1394_destroy_handle(handle); + //iterate over all cards + for (int i=0; im_listview,i18n("Port %1:\"%2\"").arg(i).arg(p_info[i].name)); + int num_of_nodes=raw1394_get_nodecount(handle); + + int localNodeId=raw1394_get_local_id(handle); + //iterate over all nodes connected to this card + for (int j=0; j>24) & 0xff)==1) //minimal config rom + { + QString guidStr=QString::number(firstQuad,16); + guidStr="0x"+guidStr.rightJustify(6,'0'); + new QListViewItem(card,nodeStr, guidStr); + } + else //general config rom + { + QString guidStr; + char buf[32]; + snprintf(buf, 32, "%"PRIX64, guid); + guidStr=buf; + guidStr="0x"+guidStr.rightJustify(16,'0'); + QString local=((j | 0xffc0) == localNodeId)?"X":""; + QString irmStr=(cap & 0x80000000) ? "X":""; + QString cmStr=(cap & 0x40000000) ? "X":""; + QString isStr=(cap & 0x20000000) ? "X":""; + QString bmStr=(cap & 0x10000000) ? "X":""; + QString pmStr=(cap & 0x08000000) ? "X":""; + QString accStr=QString::number((cap &0x00ff0000)>>16); + int speed=( cap & 0x00000007); + QString speedStr; + switch(speed) + { + case(3): + speedStr="800"; + break; + case(2): + speedStr="400"; + break; + case(1): + speedStr="200"; + break; + case(0): + default: + speedStr="100"; + break; + } + QListViewItem* node=new QListViewItem(card); + node->setText(0,nodeStr); + node->setText(1, guidStr); + node->setText(2,local); + node->setText(3, irmStr); + node->setText(4, cmStr); + node->setText(5,isStr); + node->setText(6,bmStr); + node->setText(7,pmStr); + node->setText(8, accStr); + node->setText(9, speedStr); + node->setText(10, m_ouiDb->vendor(guid)); + } + } + card->setOpen(true); + } +// depth--; + m_insideRescanBus=false; +} + +void View1394::generateBusReset() +{ + for (QValueList::iterator it=m_handles.begin(); it!=m_handles.end(); ++it) + raw1394_reset_bus(*it); +} + + +OuiDb::OuiDb() +{ + QString filename=locate("data","kcmview1394/oui.db"); + if (filename.isEmpty()) + return; + QFile f(filename); + if (!f.open(IO_ReadOnly)) + return; + + QByteArray ba=f.readAll(); + int bytesLeft=ba.size(); + char* data=ba.data(); + while(bytesLeft>8) + { + char *eol=(char*)memchr((const void*)data, '\n',bytesLeft); + if (eol==0) + break; + if ((eol-data)<8) + break; + data[6]='\0'; + *eol='\0'; + m_vendorIds.insert(data, data+7); + bytesLeft-=(eol+1-data); + data=eol+1; + } + + f.close(); +} + +QString OuiDb::vendor(octlet_t guid) +{ + guid=(guid & 0xffffff0000000000LL)>>40; + QString key=QString::number((unsigned int)(guid),16); + key=key.rightJustify(6, '0').upper(); + QString v=m_vendorIds[key]; + if (v.isEmpty()) + v=i18n("Unknown"); + return v; +} + + + +// ------------------------------------------------------------------------ + +extern "C" +{ + + KDE_EXPORT KCModule *create_view1394(QWidget *parent, const char *name) + { + KGlobal::locale()->insertCatalogue("kcmview1394"); + return new View1394(parent, name); + } +} + +#include "view1394.moc" diff --git a/kcontrol/view1394/view1394.h b/kcontrol/view1394/view1394.h new file mode 100644 index 000000000..b328363b4 --- /dev/null +++ b/kcontrol/view1394/view1394.h @@ -0,0 +1,67 @@ +/* + * view1394.h + * + * Copyright (C) 2003 Alexander Neundorf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef VIEW1394_H_ +#define VIEW1394_H_ + +#include + +#include +#include +#include +#include +#include + +#include "view1394widget.h" + +#include + +class OuiDb +{ + public: + OuiDb(); + QString vendor(octlet_t guid); + private: + QMap m_vendorIds; +}; + +class View1394: public KCModule +{ + Q_OBJECT + public: + View1394(QWidget *parent = 0L, const char *name = 0L); + virtual ~View1394(); + + public slots: // Public slots + void rescanBus(); + void generateBusReset(); + + private: + View1394Widget *m_view; + QValueList m_handles; + QPtrList m_notifiers; + bool readConfigRom(raw1394handle_t handle, nodeid_t nodeid, quadlet_t& firstQuad, quadlet_t& cap, octlet_t& guid); + bool m_insideRescanBus; + QTimer m_rescanTimer; + OuiDb *m_ouiDb; + private slots: + void callRaw1394EventLoop(int fd); +}; +#endif diff --git a/kcontrol/view1394/view1394widget.ui b/kcontrol/view1394/view1394widget.ui new file mode 100644 index 000000000..5b6ba13e8 --- /dev/null +++ b/kcontrol/view1394/view1394widget.ui @@ -0,0 +1,186 @@ + +View1394Widget + + + View1394Widget + + + + 0 + 0 + 501 + 378 + + + + + unnamed + + + + + Name + + + true + + + true + + + + + GUID + + + true + + + true + + + + + Local + + + true + + + true + + + + + IRM + + + true + + + true + + + + + CRM + + + true + + + true + + + + + ISO + + + true + + + true + + + + + BM + + + true + + + true + + + + + PM + + + true + + + true + + + + + Acc + + + true + + + true + + + + + Speed + + + true + + + true + + + + + Vendor + + + true + + + true + + + + m_listview + + + true + + + + + layout1 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + m_busResetPb + + + Generate 1394 Bus Reset + + + + + + + + diff --git a/kcontrol/xinerama/Makefile.am b/kcontrol/xinerama/Makefile.am new file mode 100644 index 000000000..5b0da6939 --- /dev/null +++ b/kcontrol/xinerama/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = $(all_includes) + +kde_module_LTLIBRARIES = kcm_xinerama.la + +kcm_xinerama_la_SOURCES = kcmxinerama.cpp xineramawidget.ui + +kcm_xinerama_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_xinerama_la_LIBADD = -lkdeui + +METASOURCES = AUTO + +noinst_HEADERS = kcmxinerama.h + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmxinerama.pot + +xinerama_datadir = $(kde_appsdir)/.hidden +xinerama_data_DATA = xinerama.desktop diff --git a/kcontrol/xinerama/kcmxinerama.cpp b/kcontrol/xinerama/kcmxinerama.cpp new file mode 100644 index 000000000..229672f6e --- /dev/null +++ b/kcontrol/xinerama/kcmxinerama.cpp @@ -0,0 +1,254 @@ +/** + * kcmxinerama.cpp + * + * Copyright (c) 2002-2004 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include "kcmxinerama.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +KCMXinerama::KCMXinerama(QWidget *parent, const char *name) + : KCModule(parent, name) { + _indicators.setAutoDelete(true); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmxinerama"), + I18N_NOOP("KDE Multiple Monitor Configurator"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2002-2003 George Staikos")); + + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + setAboutData( about ); + + setQuickHelp( i18n("

      Multiple Monitors

      This module allows you to configure KDE support" + " for multiple monitors.")); + + config = new KConfig("kdeglobals", false, false); + ksplashrc = new KConfig("ksplashrc", false, false); + + connect(&_timer, SIGNAL(timeout()), this, SLOT(clearIndicator())); + + QGridLayout *grid = new QGridLayout(this, 1, 1, KDialog::marginHint(), + KDialog::spacingHint()); + + // Setup the panel + _displays = QApplication::desktop()->numScreens(); + + if (QApplication::desktop()->isVirtualDesktop()) { + QStringList dpyList; + xw = new XineramaWidget(this); + grid->addWidget(xw, 0, 0); + QString label = i18n("Display %1"); + + xw->headTable->setNumRows(_displays); + + for (int i = 0; i < _displays; i++) { + QString l = label.arg(i+1); + QRect geom = QApplication::desktop()->screenGeometry(i); + xw->_unmanagedDisplay->insertItem(l); + xw->_ksplashDisplay->insertItem(l); + dpyList.append(l); + xw->headTable->setText(i, 0, QString::number(geom.x())); + xw->headTable->setText(i, 1, QString::number(geom.y())); + xw->headTable->setText(i, 2, QString::number(geom.width())); + xw->headTable->setText(i, 3, QString::number(geom.height())); + } + + xw->_unmanagedDisplay->insertItem(i18n("Display Containing the Pointer")); + + xw->headTable->setRowLabels(dpyList); + + connect(xw->_ksplashDisplay, SIGNAL(activated(int)), + this, SLOT(windowIndicator(int))); + connect(xw->_unmanagedDisplay, SIGNAL(activated(int)), + this, SLOT(windowIndicator(int))); + connect(xw->_identify, SIGNAL(clicked()), + this, SLOT(indicateWindows())); + + connect(xw, SIGNAL(configChanged()), this, SLOT(changed())); + } else { // no Xinerama + QLabel *ql = new QLabel(i18n("

      This module is only for configuring systems with a single desktop spread across multiple monitors. You do not appear to have this configuration.

      "), this); + grid->addWidget(ql, 0, 0); + } + + grid->activate(); + + load(); +} + +KCMXinerama::~KCMXinerama() { + _timer.stop(); + delete ksplashrc; + ksplashrc = 0; + delete config; + config = 0; + clearIndicator(); +} + +#define KWIN_XINERAMA "XineramaEnabled" +#define KWIN_XINERAMA_MOVEMENT "XineramaMovementEnabled" +#define KWIN_XINERAMA_PLACEMENT "XineramaPlacementEnabled" +#define KWIN_XINERAMA_MAXIMIZE "XineramaMaximizeEnabled" +#define KWIN_XINERAMA_FULLSCREEN "XineramaFullscreenEnabled" + +void KCMXinerama::load() { + load( false ); +} + +void KCMXinerama::load(bool useDefaults) { + if (QApplication::desktop()->isVirtualDesktop()) { + int item = 0; + config->setReadDefaults( useDefaults ); + config->setGroup("Windows"); + xw->_enableXinerama->setChecked(config->readBoolEntry(KWIN_XINERAMA, true)); + xw->_enableResistance->setChecked(config->readBoolEntry(KWIN_XINERAMA_MOVEMENT, true)); + xw->_enablePlacement->setChecked(config->readBoolEntry(KWIN_XINERAMA_PLACEMENT, true)); + xw->_enableMaximize->setChecked(config->readBoolEntry(KWIN_XINERAMA_MAXIMIZE, true)); + xw->_enableFullscreen->setChecked(config->readBoolEntry(KWIN_XINERAMA_FULLSCREEN, true)); + item = config->readNumEntry("Unmanaged", QApplication::desktop()->primaryScreen()); + if ((item < 0 || item >= _displays) && (item != -3)) + xw->_unmanagedDisplay->setCurrentItem(QApplication::desktop()->primaryScreen()); + else if (item == -3) // pointer warp + xw->_unmanagedDisplay->setCurrentItem(_displays); + else xw->_unmanagedDisplay->setCurrentItem(item); + + ksplashrc->setGroup("Xinerama"); + item = ksplashrc->readNumEntry("KSplashScreen", QApplication::desktop()->primaryScreen()); + if (item < 0 || item >= _displays) + xw->_ksplashDisplay->setCurrentItem(QApplication::desktop()->primaryScreen()); + else xw->_ksplashDisplay->setCurrentItem(item); + + emit changed(useDefaults); + } + else + emit changed( false ); +} + + +void KCMXinerama::save() { + if (QApplication::desktop()->isVirtualDesktop()) { + config->setGroup("Windows"); + config->writeEntry(KWIN_XINERAMA, + xw->_enableXinerama->isChecked()); + config->writeEntry(KWIN_XINERAMA_MOVEMENT, + xw->_enableResistance->isChecked()); + config->writeEntry(KWIN_XINERAMA_PLACEMENT, + xw->_enablePlacement->isChecked()); + config->writeEntry(KWIN_XINERAMA_MAXIMIZE, + xw->_enableMaximize->isChecked()); + config->writeEntry(KWIN_XINERAMA_FULLSCREEN, + xw->_enableFullscreen->isChecked()); + int item = xw->_unmanagedDisplay->currentItem(); + config->writeEntry("Unmanaged", item == _displays ? -3 : item); + config->sync(); + + if (!kapp->dcopClient()->isAttached()) + kapp->dcopClient()->attach(); + kapp->dcopClient()->send("kwin", "", "reconfigure()", ""); + + ksplashrc->setGroup("Xinerama"); + ksplashrc->writeEntry("KSplashScreen", xw->_enableXinerama->isChecked() ? xw->_ksplashDisplay->currentItem() : -2 /* ignore Xinerama */); + ksplashrc->sync(); + } + + KMessageBox::information(this, i18n("Your settings will only affect newly started applications."), i18n("KDE Multiple Monitors"), "nomorexineramaplease"); + + emit changed(false); +} + +void KCMXinerama::defaults() { + load( true ); +} + +void KCMXinerama::indicateWindows() { + _timer.stop(); + + clearIndicator(); + for (int i = 0; i < _displays; i++) + _indicators.append(indicator(i)); + + _timer.start(1500, true); +} + +void KCMXinerama::windowIndicator(int dpy) { + if (dpy >= _displays) + return; + + _timer.stop(); + + clearIndicator(); + _indicators.append(indicator(dpy)); + + _timer.start(1500, true); +} + +QWidget *KCMXinerama::indicator(int dpy) { + QLabel *si = new QLabel(QString::number(dpy+1), 0, "Screen Indicator", WX11BypassWM ); + + QFont fnt = KGlobalSettings::generalFont(); + fnt.setPixelSize(100); + si->setFont(fnt); + si->setFrameStyle(QFrame::Panel); + si->setFrameShadow(QFrame::Plain); + si->setAlignment(Qt::AlignCenter); + + QPoint screenCenter(QApplication::desktop()->screenGeometry(dpy).center()); + QRect targetGeometry(QPoint(0,0), si->sizeHint()); + targetGeometry.moveCenter(screenCenter); + si->setGeometry(targetGeometry); + si->show(); + + return si; +} + +void KCMXinerama::clearIndicator() { + _indicators.clear(); +} + +extern "C" { + KDE_EXPORT KCModule *create_xinerama(QWidget *parent, const char *name) { + KGlobal::locale()->insertCatalogue("kcmxinerama"); + return new KCMXinerama(parent, name); + } + + KDE_EXPORT bool test_xinerama() { + return QApplication::desktop()->isVirtualDesktop(); + } +} + + +#include "kcmxinerama.moc" + diff --git a/kcontrol/xinerama/kcmxinerama.h b/kcontrol/xinerama/kcmxinerama.h new file mode 100644 index 000000000..07b835fbc --- /dev/null +++ b/kcontrol/xinerama/kcmxinerama.h @@ -0,0 +1,62 @@ +/** + * kcmxinerama.h + * + * Copyright (c) 2002-2004 George Staikos + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _KCM_XINERAMA_H +#define _KCM_XINERAMA_H + +#include +#include +#include + +#include "xineramawidget.h" + +class KConfig; +class QWidget; + +class KCMXinerama : public KCModule { + Q_OBJECT +public: + KCMXinerama(QWidget *parent = 0L, const char *name = 0L); + virtual ~KCMXinerama(); + + void load(); + void load(bool useDefaults ); + void save(); + void defaults(); + +public slots: + void windowIndicator(int dpy); + void clearIndicator(); + + void indicateWindows(); + +private: + QWidget* indicator(int dpy); + KConfig *config, *ksplashrc; + XineramaWidget *xw; + QTimer _timer; + QPtrList _indicators; + + int _displays; + +}; + +#endif + diff --git a/kcontrol/xinerama/xinerama.desktop b/kcontrol/xinerama/xinerama.desktop new file mode 100644 index 000000000..5adb0f363 --- /dev/null +++ b/kcontrol/xinerama/xinerama.desktop @@ -0,0 +1,202 @@ +[Desktop Entry] +Icon=identity +Type=Application +Exec=kcmshell xinerama +DocPath=kcontrol/multiplemonitors.html + +X-KDE-Library=xinerama +X-KDE-Test-Module=true +Name=Multiple Monitors +Name[af]=Veelvuldige Skerms +Name[ar]=شاشات متعددة +Name[be]=Некалькі манітораў +Name[bg]=Многомониторен режим +Name[bn]=একাধিক মনিটর +Name[br]=Lies skramm +Name[bs]=Višestruki monitori +Name[ca]=Múltiples monitors +Name[cs]=Více monitorů +Name[csb]=Wiele mònitorów +Name[cy]=Dangosyddion Lluosol +Name[da]=Flere skærme +Name[de]=Mehrere Monitore +Name[el]=Πολλαπλές οθόνες +Name[eo]=Oblaj ekranoj +Name[es]=Varios monitores +Name[et]=Mitu monitori +Name[eu]=Monitore anitz +Name[fa]=نمایشگرهای چندگانه +Name[fi]=Useita näyttöjä +Name[fr]=Moniteurs multiples +Name[fy]=Meardere byldskermen +Name[ga]=Scáileáin Iomadúla +Name[gl]=Múltiplos Monitores +Name[he]=מספר מסכים +Name[hi]=अनेक मॉनीटर्स +Name[hr]=Višestruki monitori +Name[hu]=Több képernyő kezelése +Name[is]=Margir skjáir +Name[it]=Monitor multipli +Name[ja]=マルチモニタ +Name[ka]=რამდენიმე მონიტორი +Name[kk]=Бірнеше мониторлар +Name[km]=ម៉ូនីទ័រ​ច្រើន +Name[ko]=다중 모니터 +Name[lt]=Keli monitoriai +Name[lv]=Vairāki monitori +Name[mk]=Повеќе монитори +Name[mn]=Олон монитор +Name[ms]=Berbilang Monitor +Name[mt]=Skrinijiet multipli +Name[nb]=Flere skjermer +Name[nds]=Mehr as een Schirm +Name[ne]=बहुविध मोनिटर +Name[nl]=Meerdere monitoren +Name[nn]=Fleire skjermar +Name[pa]=ਬਹੁ ਮਾਨੀਟਰ +Name[pl]=Wiele monitorów +Name[pt]=Vários Monitores +Name[pt_BR]=Múltiplos Monitores +Name[ro]=Monitoare multiple +Name[ru]=Несколько мониторов +Name[rw]=Mugaragaza Zitandukanye +Name[se]=Máŋggaid searpma +Name[sk]=Viac monitorov +Name[sl]=Več zaslonov +Name[sr]=Више монитора +Name[sr@Latn]=Više monitora +Name[sv]=Flera bildskärmar +Name[ta]=பல திரைகள் +Name[tg]=Чанд намоишгар +Name[th]=หลายจอภาพ +Name[tr]=Çoklu Monitör +Name[tt]=Berniçä Küräk +Name[uk]=Комбінація моніторів +Name[uz]=Bir nechta monitor +Name[uz@cyrillic]=Бир нечта монитор +Name[vi]=Nhiều Màn hình +Name[wa]=Multi-waitroûles +Name[zh_CN]=多个监视器 +Name[zh_TW]=多重顯示器 +Comment=Configure KDE for multiple monitors +Comment[af]=Stel KDE vir veelvuldige skerms op +Comment[ar]=إعداد KDE لإستعمال الشاشات المتعددة +Comment[be]=Настаўленні KDE для працы з некалькімі маніторамі +Comment[bg]=Настройване на системата за поддръжка на много монитори +Comment[bn]=একাধিক মনিটরের জন্য কে.ডি.ই কনফিগার করুন +Comment[br]=Kefluniañ KDE gant meur a skrammoù +Comment[bs]=Podesite KDE za više monitora +Comment[ca]=Configura KDE per a múltiples monitors +Comment[cs]=Nastavení KDE pro více monitorů +Comment[csb]=Kònfigùracëjô KDE przë wielu mònitorach +Comment[cy]=Ffurfweddu dangosyddion lluosol i KDE +Comment[da]=Indstil KDE for flere skærme +Comment[de]=KDE für mehrere Monitore einrichten +Comment[el]=Ρύθμιση του KDE για πολλαπλές οθόνες +Comment[eo]=Agordu KDE por oblaj ekranoj +Comment[es]=Configuración de KDE para varios monitores +Comment[et]=KDE seadistamine mitme monitori kasutamiseks +Comment[eu]=Konfiguratu KDE monitore aniztasunerako +Comment[fa]=پیکربندی نمایشگرهای چندگانه +Comment[fi]=Muokkaa KDE sopivaksi usealle näytölle +Comment[fr]=Configuration de KDE pour l'utilisation de moniteurs multiples +Comment[fy]=Hjir kinne jo KDE foar meardere byldskermen ynstelle +Comment[gl]=Configurar KDE para múltiplos monitores +Comment[he]=הגדר את KDE לשימוש במספר מסכים +Comment[hi]=अनेक मॉनीटर्स के लिए केडीई कॉन्फ़िगर करें +Comment[hr]=Konfiguriranje KDE-a za više monitora +Comment[hu]=Több monitor használata a KDE-ben +Comment[is]=Stilla KDE fyrir marga skjái +Comment[it]=Configura KDE per utilizzare più monitor +Comment[ja]=KDE を複数のモニタ向けに設定 +Comment[ka]=რამდენიმე მონიტორისთვის KDE -ს კონფიგურაცია +Comment[kk]=KDE-ні бірнеше мониторлар үшін баптау +Comment[km]=កំណត់​រចនាសម្ព័ន្ធ KDE សម្រាប់​ម៉ូនីទ័រ​ច្រើន +Comment[ko]=KDE 다중 모니터 설정 +Comment[lt]=Konfigūruoti KDE keliems monitoriams +Comment[lv]=Konfigure KDE priekš vairākiem monitoriem +Comment[mk]=Конфигурирајте го KDE за повеќе монитори +Comment[mn]=КДЭ олон монитор тохируулах +Comment[ms]=Konfigur KDE untuk berbilang monitor +Comment[mt]=Konfigurazzjoni tal-KDE għal skrinijiet multipli +Comment[nb]=Tilpass KDE for flere skjermer +Comment[nds]=KDE för mehr as een Schirm instellen +Comment[ne]=बहुविध मोनिटरका लागि KDE कन्फिगर गर्नुहोस् +Comment[nl]=Hier kunt u KDE voor meerdere monitoren instellen +Comment[nn]=Set opp KDE for fleire skjermar +Comment[pa]=ਕਈ ਮਾਨੀਟਰਾਂ ਲਈ KDE ਸੰਰਚਨਾ ਕਰੋ +Comment[pl]=Konfiguracja KDE przy wielu monitorach +Comment[pt]=Configuração do KDE para vários monitores +Comment[pt_BR]=Configura o KDE para o uso de múltiplos monitores +Comment[ro]=Configurează KDE pentru monitoare multiple +Comment[ru]=Настройка KDE для нескольких мониторов +Comment[rw]=Kuboneza KDE kuri mugaragaza zitandukanye +Comment[se]=Heivet KDE:a máŋggaid šearpma várás +Comment[sk]=Nastavenie KDE pre viac monitorov +Comment[sl]=Nastavite KDE za več zaslonov +Comment[sr]=Подешавање KDE-а за више монитора +Comment[sr@Latn]=Podešavanje KDE-a za više monitora +Comment[sv]=Anpassa KDE för flera bildskärmar +Comment[ta]=பலவிதமான திரைகளுக்கு KDEஐ வடிவமை +Comment[tg]=Танзими KDE барои намоишгарҳои виртуалӣ +Comment[th]=ปรับแต่ง KDE สำหรับใช้กับจอภาพหลายจอ +Comment[tr]=KDE'yi çoklu monitör kullanmak için yapılandır +Comment[tt]=KDE'nıñ berniçä küräk belän eşläw caylawı +Comment[uk]=Налаштування декількох моніторів для KDE +Comment[uz]=KDE'ni bir nechta monitor uchun moslash +Comment[uz@cyrillic]=KDE'ни бир нечта монитор учун мослаш +Comment[vi]=Cấu hình KDE cho nhiều màn hình +Comment[wa]=Apontyî KDE po on håynaedje so sacwantès waitroûles +Comment[zh_CN]=配置 KDE 的多个监视器 +Comment[zh_TW]=設定 KDE 支援多重顯示器 +Keywords=Xinerama,dual head,multihead,monitor +Keywords[ar]=Xinerama,dual head,multihead,monitor,ثنائي الرؤوس,متعدد الرؤوس,شاشة +Keywords[be]=Два маніторы,Манітор,Некалькі манітораў,Дысплей,Xinerama,dual head,multihead,monitor +Keywords[bg]=много, монитори, монитор, екран, дисплей, Xinerama, dual head, multihead, monitor +Keywords[ca]=Xinerama,dual head,doble dispositiu,multihead,multiples dispositius,monitor +Keywords[csb]=Xinerama,dwa mònitorë,wiele mònitorów,mònitor +Keywords[cy]=Xinerama,pen deuol,amlben,dangosydd +Keywords[da]=Xinerama,dualt hovede,multihovede,skærm +Keywords[de]=inerama,dual head,multihead,monitor +Keywords[el]=Xinerama,dual head,multihead,οθόνη +Keywords[eo]=duobla,duoblaj,oblaj,ekrano,ekranoj +Keywords[et]=Xinerama,kaks monitori,mitu monitori,monitor +Keywords[eu]=Xinerama,dual head,multihead,monitorea +Keywords[fa]=Xinerama، سرآیند دوگان، سرآیند چندگانه، نمایشگر +Keywords[fi]=Xinerama,näyttö,kaksi näyttöä,useita näyttöjä +Keywords[fr]=Xinerama,dual head,multihead,moniteur,multitête,double écran, multiécran +Keywords[fy]=Xinerama,dual head,multihead,monitor,byldskerm +Keywords[gl]=Xinerama,cabeza dual,cabeza múltiple,monitor +Keywords[he]=Xinerama,דו ראשי,רב ראשי,מסך, dual head,multihead,monitor +Keywords[hi]=सिनेरामा,ड्यूएल हेड,मल्टी-हेड,मॉनीटर +Keywords[hr]=Xinerama,dual head,multihead,monitor,višestruki monitori +Keywords[hu]=Xinerama,két fejes,két fej,monitor +Keywords[it]=Xinerama,dual head,multihead,monitor,monitor multipli +Keywords[ja]=Xinerama,デュアルヘッド,マルチヘッド,モニタ +Keywords[km]=Xinerama,ក្បាល​ពីរ,ក្បាល​ច្រើន,ម៉ូនីទ័រ +Keywords[lt]=Xinerama,dual head,multihead,monitor,dviejų monitorių,monitorius +Keywords[lv]=Xinerama,dual head,multihead,monitori +Keywords[mk]=Xinerama,dual head,multihead,monitor,монитор +Keywords[mn]=Xinerama,dual head,multihead,монитор +Keywords[nb]=Xinerama,to skjermer,flere skjermer,skjerm,monitor +Keywords[nds]=Xinerama,dual head,multihead,monitor,Mehrschirmbedrief,Dubbelschirm +Keywords[ne]=जिनेरामा, डअल हेड, मल्टिहेड, मनिटर +Keywords[nl]=Xinerama,dual head,multihead,monitor,beeldscherm +Keywords[nn]=Xinerama,to skjermar,fleire skjermar,skjerm,monitor +Keywords[pa]=Xinerama,dual head,multihead,monitor, ਦੋ ਮਾਨੀਟਰ, ਮਾਨੀਟਰ +Keywords[pl]=Xinerama,dwa monitory,wiele monitorów,monitor +Keywords[pt]=xinerama,vários monitores,multihead,monitor +Keywords[pt_BR]=Xinerama,monitores,multihead,monitor +Keywords[rw]=Xinerama,umutwe nyabibiri,mitwemyinshi,mugaragaza +Keywords[sl]=Xinerama,dual head,multihead,monitor,zaslon,dva +Keywords[sr]=Xinerama,dual head,multihead,monitor,монитор,више монитора +Keywords[sr@Latn]=Xinerama,dual head,multihead,monitor,monitor,više monitora +Keywords[sv]=Xinerama,dubbla skärmar,flera skärmar,bildskärm +Keywords[ta]= Xinerama,இரட்டை தலைப்பு,பலதலைப்பு,திரை +Keywords[th]=Xinerama,หัวต่อคู่,หลายหัวต่อ,จอภาพ +Keywords[tr]=Xinerama,çift ekran,çoklu ekran,monitör +Keywords[uk]=Xinerama,dual head,multihead,монітор,комбінація моніторів +Keywords[uz@cyrillic]=Xinerama,dual head,multihead,монитор +Keywords[vi]=Xinerama,đầu kép,đa đầu,màn hình +Keywords[wa]=Xinerama,deus waitroûles,multi-waitroûles,waitroûle,dual head,multihead +Keywords[zh_CN]=Xinerama,dual head,multihead,monitor,双头,多头,监视器,显示器 diff --git a/kcontrol/xinerama/xineramawidget.ui b/kcontrol/xinerama/xineramawidget.ui new file mode 100644 index 000000000..cab732afd --- /dev/null +++ b/kcontrol/xinerama/xineramawidget.ui @@ -0,0 +1,326 @@ + +XineramaWidget + + + XineramaWidget + + + + 0 + 0 + 658 + 389 + + + + + unnamed + + + + + X Coordinate + + + + + Y Coordinate + + + + + Width + + + + + Height + + + + headTable + + + + 1 + 1 + 0 + 0 + + + + Auto + + + Auto + + + 2 + + + 4 + + + true + + + true + + + NoSelection + + + FollowStyle + + + + + ButtonGroup1 + + + Multiple Monitor Support + + + + unnamed + + + + _enableXinerama + + + Enable multiple monitor virtual desktop support + + + + + _enableResistance + + + false + + + Enable multiple monitor window resistance support + + + + + _enablePlacement + + + false + + + Enable multiple monitor window placement support + + + + + _enableMaximize + + + false + + + Enable multiple monitor window maximize support + + + + + _enableFullscreen + + + false + + + Enable multiple monitor window fullscreen support + + + + + + + _identify + + + &Identify All Displays + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 431 + 21 + + + + + + layout2 + + + + unnamed + + + + TextLabel2 + + + false + + + Show unmanaged windows on: + + + _unmanagedDisplay + + + + + _ksplashDisplay + + + false + + + + + TextLabel2_2 + + + false + + + Show KDE splash screen on: + + + _unmanagedDisplay + + + + + _unmanagedDisplay + + + false + + + + + + + + + _enableXinerama + toggled(bool) + _enableResistance + setEnabled(bool) + + + _enableXinerama + toggled(bool) + _enablePlacement + setEnabled(bool) + + + _enableXinerama + toggled(bool) + _enableMaximize + setEnabled(bool) + + + _enableXinerama + toggled(bool) + TextLabel2 + setEnabled(bool) + + + _enableXinerama + toggled(bool) + _unmanagedDisplay + setEnabled(bool) + + + _enableXinerama + clicked() + XineramaWidget + emitConfigChanged() + + + _enableResistance + clicked() + XineramaWidget + emitConfigChanged() + + + _enablePlacement + clicked() + XineramaWidget + emitConfigChanged() + + + _enableMaximize + clicked() + XineramaWidget + emitConfigChanged() + + + _unmanagedDisplay + activated(int) + XineramaWidget + emitConfigChanged() + + + _enableXinerama + toggled(bool) + TextLabel2_2 + setEnabled(bool) + + + _enableXinerama + toggled(bool) + _ksplashDisplay + setEnabled(bool) + + + _ksplashDisplay + activated(int) + XineramaWidget + emitConfigChanged() + + + _enableFullscreen + clicked() + XineramaWidget + emitConfigChanged() + + + _enableXinerama + toggled(bool) + _enableFullscreen + setEnabled(bool) + + + + kdialog.h + xineramawidget.ui.h + + + configChanged() + + + emitConfigChanged() + + + + diff --git a/kcontrol/xinerama/xineramawidget.ui.h b/kcontrol/xinerama/xineramawidget.ui.h new file mode 100644 index 000000000..8373eadd2 --- /dev/null +++ b/kcontrol/xinerama/xineramawidget.ui.h @@ -0,0 +1,14 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename functions or slots use +** Qt Designer which will update this file, preserving your code. Create an +** init() function in place of a constructor, and a destroy() function in +** place of a destructor. +*****************************************************************************/ + + +void XineramaWidget::emitConfigChanged() +{ +emit configChanged(); +} diff --git a/kdcop/Makefile.am b/kdcop/Makefile.am new file mode 100644 index 000000000..358d45549 --- /dev/null +++ b/kdcop/Makefile.am @@ -0,0 +1,23 @@ +# +# KDCOP Makefile.am +# +# Copyright 2000 Matthias Kalle Dalheimer, kalle@dalheimer.de +# +# + +INCLUDES = $(all_includes) + +bin_PROGRAMS = kdcop + +kdcop_SOURCES = kdcop.cpp kdcopwindow.cpp kdcoplistview.cpp kdcopview.ui +kdcop_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_KIO) -lDCOP $(LIB_QT) + +noinst_HEADERS = kdcopwindow.h +METASOURCES = AUTO + +rcdir = $(kde_datadir)/kdcop +rc_DATA = kdcopui.rc + +messages: rc.cpp + $(XGETTEXT) rc.cpp *.cpp -o $(podir)/kdcop.pot + diff --git a/kdcop/README b/kdcop/README new file mode 100644 index 000000000..049678f2c --- /dev/null +++ b/kdcop/README @@ -0,0 +1,11 @@ +This is a browser/executor for DCOP. It queries the DCOP clients in a system, +their interfaces, and the interfaces' arguments. You can even execute DCOP +calls by double-clicking on a call. If the method has parameters, kdcop will +open a dialog and prompt you for them. If the method returns a return value, +you will see it in a message box after the call. + +This little tool fairly much does what I wanted it to do, but let me know if +you want more features. + +Kalle Dalheimer, + diff --git a/kdcop/kdcop.cpp b/kdcop/kdcop.cpp new file mode 100644 index 000000000..41d7c3dd0 --- /dev/null +++ b/kdcop/kdcop.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2000 by Matthias Kalle Dalheimer + * + * Licensed under the Artistic License. + */ +#include +#include +#include +#include + +#include "kdcopwindow.h" + +static const KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main( int argc, char ** argv ) +{ + KAboutData aboutData( "kdcop", I18N_NOOP("KDCOP"), + "0.1", I18N_NOOP( "A graphical DCOP browser/client" ), + KAboutData::License_Artistic, + "(c) 2000, Matthias Kalle Dalheimer"); + aboutData.addAuthor("Matthias Kalle Dalheimer",0, "kalle@kde.org"); + aboutData.addAuthor("Rik Hemsley",0, "rik@kde.org"); + aboutData.addAuthor("Ian Reinhart Geiser",0,"geiseri@kde.org"); + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); + + KApplication a; + + KDCOPWindow* kdcopwindow = new KDCOPWindow; + a.setMainWidget( kdcopwindow ); + kdcopwindow->show(); + + return a.exec(); +} diff --git a/kdcop/kdcoplistview.cpp b/kdcop/kdcoplistview.cpp new file mode 100644 index 000000000..07e0b9fb8 --- /dev/null +++ b/kdcop/kdcoplistview.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2000 by Ian Reinhart Geiser + * + * Licensed under the Artistic License. + */ + +#include "kdcoplistview.h" +#include "kdcoplistview.moc" +#include +#include +#include +#include + + +KDCOPListView::KDCOPListView ( QWidget *parent, const char *name) + : KListView(parent, name) +{ + kdDebug() << "Building new list." << endl; + setDragEnabled(true); +} + + +KDCOPListView::~KDCOPListView () +{ + +} + +QDragObject *KDCOPListView::dragObject() +{ + kdDebug() << "Drag object called... " << endl; + if(!currentItem()) + return 0; + else + return new QTextDrag(encode(this->selectedItem()), this); +} + +void KDCOPListView::setMode( const QString &theMode ) +{ + mode = theMode; +} + +QString KDCOPListView::encode(QListViewItem *theCode) +{ + DCOPBrowserItem * item = static_cast(theCode); + + if (item->type() != DCOPBrowserItem::Function) + return ""; + + DCOPBrowserFunctionItem * fitem = + static_cast(item); + + QString function = QString::fromUtf8(fitem->function()); + QString application = QString::fromUtf8(fitem->app()); + QString object = QString::fromUtf8(fitem->object()); + + kdDebug() << function << endl; + QString returnType = function.section(' ', 0,0); + QString returnCode = ""; + QString normalisedSignature; + QStringList types; + QStringList names; + + QString unNormalisedSignature(function); + + int s = unNormalisedSignature.find(' '); + + if ( s < 0 ) + s = 0; + else + s++; + + unNormalisedSignature = unNormalisedSignature.mid(s); + + int left = unNormalisedSignature.find('('); + int right = unNormalisedSignature.findRev(')'); + + if (-1 == left) + { + // Fucked up function signature. + return ""; + } + if (left > 0 && left + 1 < right - 1) + { + types = QStringList::split + (',', unNormalisedSignature.mid(left + 1, right - left - 1)); + for (QStringList::Iterator it = types.begin(); it != types.end(); ++it) + { + (*it) = (*it).stripWhiteSpace(); + int s = (*it).find(' '); + if (-1 != s) + { + names.append((*it).mid(s + 1)); + (*it) = (*it).left(s); + } + } + } + + if ( mode == "C++") + { + QString args; + for( unsigned int i = 0; i < names.count(); i++) + { + args += types[i] + " " + names[i] + ";\n"; + } + QString dcopRef = "DCOPRef m_" + application + object + + "(\""+ application + "\",\"" + object +"\");\n"; + + QString stringNames = names.join(","); + QString stringTypes = types.join(","); + if( returnType != "void") + returnType += " return" + returnType + " ="; + else + returnType = ""; + returnCode = args + + dcopRef + + returnType + + "m_" + application + object + + ".call(\"" + unNormalisedSignature.left(left) + + "(" + stringTypes + ")\""; + if(!stringNames.isEmpty()) + returnCode += ", "; + returnCode += stringNames + ");\n"; + } + else if (mode == "Shell") + { + returnCode = "dcop " + application + " " + object + " " + + unNormalisedSignature.left(left) + " " + names.join(" "); + } + else if (mode == "Python") + { + QString setup; + setup = "m_" + + application + object + + " = dcop.DCOPObject( \"" + + application + "\",\"" + + object + "\")\n"; + + for( unsigned int i = 0; i < names.count(); i++) + { + setup += names[i] + " #set value here.\n"; + } + returnCode = setup + + "reply" + + returnType + + " = m_" + + application + object + "." + + unNormalisedSignature.left(left) + + "(" + names.join(",") + ")\n"; + } + return returnCode; +} + +QString KDCOPListView::getCurrentCode() const +{ + // fixing warning + return QString::null; +} diff --git a/kdcop/kdcoplistview.h b/kdcop/kdcoplistview.h new file mode 100644 index 000000000..4a14620cc --- /dev/null +++ b/kdcop/kdcoplistview.h @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2000 by Ian Reinhart Geiser + * + * Licensed under the Artistic License. + */ + +#ifndef __KDCOPLISTVIEW_H__ +#define __KDCOPLISTVIEW_H__ + + +#include +class QDragObject; + +class KDCOPListView : public KListView +{ + Q_OBJECT + + public: + KDCOPListView ( QWidget * parent = 0, const char * name = 0 ); + virtual ~KDCOPListView(); + QDragObject *dragObject(); + void setMode(const QString &mode); + QString getCurrentCode() const; + + private: + QString encode(QListViewItem *code); + QString mode; + +}; + +class DCOPBrowserItem : public QListViewItem +{ + public: + + enum Type { Application, Interface, Function }; + + DCOPBrowserItem(QListView * parent, Type type); + DCOPBrowserItem(QListViewItem * parent, Type type); + + virtual ~DCOPBrowserItem() {} + + Type type() const; + + private: + + Type type_; +}; + +class DCOPBrowserApplicationItem : public QObject, public DCOPBrowserItem +{ + Q_OBJECT + public: + + DCOPBrowserApplicationItem(QListView * parent, const QCString & app); + virtual ~DCOPBrowserApplicationItem() {} + + QCString app() const { return app_; } + + virtual void setOpen(bool o); + + protected: + + virtual void populate(); + + private: + + QCString app_; + private slots: + /** + * Theses two slots are used to get the icon of the application + */ + void retreiveIcon(int callId, const QCString& replyType, const QByteArray &replyData); + void slotGotWindowName(int callId, const QCString& replyType, const QByteArray &replyData); +}; + +class DCOPBrowserInterfaceItem : public QObject, public DCOPBrowserItem +{ + public: + + DCOPBrowserInterfaceItem + ( + DCOPBrowserApplicationItem * parent, + const QCString & app, + const QCString & object, + bool def + ); + + virtual ~DCOPBrowserInterfaceItem() {} + + QCString app() const { return app_; } + QCString object() const { return object_; } + + virtual void setOpen(bool o); + + protected: + + virtual void populate(); + + private: + + QCString app_; + QCString object_; +}; + + +class DCOPBrowserFunctionItem : public DCOPBrowserItem +{ + public: + + DCOPBrowserFunctionItem + ( + DCOPBrowserInterfaceItem * parent, + const QCString & app, + const QCString & object, + const QCString & function + ); + + virtual ~DCOPBrowserFunctionItem() {} + + QCString app() const { return app_; } + QCString object() const { return object_; } + QCString function() const { return function_; } + + virtual void setOpen(bool o); + + private: + + QCString app_; + QCString object_; + QCString function_; +}; + +#endif diff --git a/kdcop/kdcopui.rc b/kdcop/kdcopui.rc new file mode 100644 index 000000000..7843c78dc --- /dev/null +++ b/kdcop/kdcopui.rc @@ -0,0 +1,15 @@ + + + + &Extra + + + + + +Main Toolbar + + + + + diff --git a/kdcop/kdcopview.ui b/kdcop/kdcopview.ui new file mode 100644 index 000000000..5d1de7a93 --- /dev/null +++ b/kdcop/kdcopview.ui @@ -0,0 +1,149 @@ + +kdcopview +Ian Reinhart Geiser geiseri@kde.org + + + kdcopview + + + + 0 + 0 + 392 + 356 + + + + + unnamed + + + 0 + + + + kListViewSearchLine1 + + + + + textLabel1 + + + &Search: + + + kListViewSearchLine1 + + + + + splitter8 + + + Vertical + + + + lv + + + + + layout18 + + + + unnamed + + + + l_replyType + + + + 3 + 0 + 0 + 0 + + + + NoFrame + + + Raised + + + none + + + 0 + + + + + lb_replyData + + + + + TextLabel1 + + + + 5 + 0 + 0 + 0 + + + + + 0 + 0 + + + + Returned data type: + + + + + + + + + + KDCOPListView +
      kdcoplistview.h
      + + 100 + 100 + + 1 + + 5 + 5 + 0 + 0 + + image0 +
      +
      + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003fc49444154388d8d95bf8b1d5518869fbbb9c237b2c133b291195cc91d8c901123b901c10d0ae6a260162d526c1348a3a90ca952064208e4afd0d804d204d20436c5425218660b8b142bb98bcd2cba700e66e17cc5ca7cc5c5b59899bb2e3639301ccecc99f7bcf37c3f66505515fdb879e7f28106c33040004390d75a6799e3eead07835e6b5055153f3dbc76b0f9a4e6bbeb374810c4a59846001a8c04f9ffbc6fb008b667f85033ad6b4298b2b29273f5cabdc11060f359cdb5eb37c88a12f581b8eb4916419c302e0bc06318513da186b807588a9981b50ef334073336373d57afc0e0c2d7d9c1eab7d728f2028d4abd5b532c6794e3827c048d050c8f99875e3c18f59610438199b557348c861802e21a861a201141a3e2773de5a982d54b63d46abc5698edd0980711404804b2cc906c8aeed4bcfce51ca6862460114484103c43c3104989bb9ee254cee46289d78a697880598d0f0e9a04882449827382732d029729c5e715d38d73a86f0030031086209846f2e594c9c5926815d3700f5563ba51e243cb0e1130431c141f45ca158f19e499a1238f698e598374fb16ba2390148c9a3a3c2204a37af81f51dacde32f857cd4307d9ef362a3681d02c5190fd23b6ef58622024079dae1b542f1d4bf1698a5479c4ed64ac69f0a6635eb78eaed02b71cc94bc59c918f14f5d2398605ebf2c5f018010de0778e3a9d7c3366f2c50a82c30cc65f05c008bf15edd9805b8e80748e8585f67617746b2b69ee1463fc59c9e4c24a6b1c0594171b0e4168acaf3fc88b2ea1a5b539676ca6883820993b2dcf66ac5e1a236244ad31f3448dc4d0174782aab4e29d4e5f300b3de32e84385700463e1256afe424a2789ba2566356230e266b119701d2e0b20ea6b9b677747ac33963f5886b133c1f41d4b60798f398295e3dceb587a72ee1fc5a4483ce194fb7928eb11e326e307c00b3402246f9491b88f5fb4abd33e5e9e3c8d3fb393bdb74a81a9c335ce63b0c73b873c6c39e71bd05e2eaf6f346707eada67af821eb3fa6f316593dce893e52ae84ae77d0f50a87df7647181f7b6fd9ddfee0e4c7d8fe1be83f7f723c0fcccc182e1af9fbaf9037e1f8db4a9acd4897f63971728fa1f4a22032c46cc6e23bc6eecb04b31936d396b10f757bd0f302cc28c6be7bc9c8c7f53ca5e4d0d03c5ffbcc9434301a837fd6b23e76e66c76fb6f9d311c24eccf0cfd23e5d55f43d2b780453b2a6ac0106606d12fb1b39d72e2dd7da282fa25767e4fd0bd86a5a561fb07f9fe87d583cc1524ce1d561c4656186916c9ce18346ddcc2961035254cdb369a9581fc54c3f439780f1a947b3fafb77f90950b399bcf3cceda3cb46e9ebe00911c7b725862fd73c4c08cb8d9ee830655253bdd0671505515fdb879e7f241083aafbc3e835e679d6570f7d6a3417fe75f216c6016a81220570000000049454e44ae426082 + + + + kdialog.h + + + + + klistviewsearchline.h + kdcoplistview.h + klistbox.h + +
      diff --git a/kdcop/kdcopwindow.cpp b/kdcop/kdcopwindow.cpp new file mode 100644 index 000000000..506fb22ef --- /dev/null +++ b/kdcop/kdcopwindow.cpp @@ -0,0 +1,1238 @@ +/* + * Copyright (C) 2000 by Matthias Kalle Dalheimer + * 2004 by Olivier Goffart + * + * Licensed under the Artistic License. + */ + +#include "kdcopwindow.h" +#include "kdcoplistview.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +class DCOPBrowserApplicationItem; +class DCOPBrowserInterfaceItem; +class DCOPBrowserFunctionItem; + +//------------------------------ + +class KMultiIntEdit : public QVBox +{ +public: + KMultiIntEdit(QWidget *parent , const char * name=0) : QVBox(parent,name) {} + void addField(int key, const QString & caption ) + { + QHBox *l=new QHBox(this); + new QLabel(caption + ": ", l); + KLineEdit* e = new KLineEdit( l ); + m_widgets.insert(key, e ) ; + e->setValidator( new QIntValidator( e ) ); + } + int field(int key) + { + KLineEdit *e=m_widgets[key]; + if(!e) return 0; + return e->text().toInt(); + } + +private: + QMap m_widgets; +}; + +//------------------------------ + +DCOPBrowserItem::DCOPBrowserItem +(QListView * parent, DCOPBrowserItem::Type type) + : QListViewItem(parent), + type_(type) +{ +} + +DCOPBrowserItem::DCOPBrowserItem +(QListViewItem * parent, DCOPBrowserItem::Type type) + : QListViewItem(parent), + type_(type) +{ +} + + DCOPBrowserItem::Type +DCOPBrowserItem::type() const +{ + return type_; +} + +// ------------------------------------------------------------------------ + +DCOPBrowserApplicationItem::DCOPBrowserApplicationItem +(QListView * parent, const QCString & app) + : DCOPBrowserItem(parent, Application), + app_(app) +{ + setExpandable(true); + setText(0, QString::fromUtf8(app_)); + setPixmap(0, KGlobal::iconLoader()->loadIcon( QString::fromLatin1( "exec" ), KIcon::Small )); + + + /* Get the icon: we use the icon from a mainwindow in that class. + a lot of applications has a app-mainwindow#1 object, but others can still have + a main window with another name. In that case, we search for a main window with the qt object. + * Why don't search with qt dirrectly? + simply because some application that have a 'mainwindow#1' doesn't have a qt object. And, for + reason i don't know, some application return stanges result. Some konqueror instance are returning + konqueror-mainwindow#3 while only the #1 exists, I already seen the same problem with konsole + * All calls are async to don't block the GUI if the clients does not reply immediatly + */ + + QRegExp rx( "([^\\-]+)"); // remove the possible processus id + rx.search(app_); // konqueror-123 => konqueror-mainwindow#1 + QString mainWindowName= rx.cap(1) + "-mainwindow#1" ; + + QByteArray data; + int callId=kapp->dcopClient()->callAsync( app_, mainWindowName.utf8(), "icon()", data, this, SLOT(retreiveIcon(int, const QCString&, const QByteArray&))); + + if(!callId) + { + //maybe there is another mainwindow registered with another name. + QByteArray data; + QDataStream arg(data, IO_WriteOnly); + arg << QCString( "MainWindow" ); + + kapp->dcopClient()->callAsync( app_, "qt", "find(QCString)", data, this, SLOT(slotGotWindowName(int, const QCString&, const QByteArray& ))); + } +} + + void +DCOPBrowserApplicationItem::setOpen(bool o) +{ + DCOPBrowserItem::setOpen(o); + + if (0 == firstChild()) + populate(); +} + + void +DCOPBrowserApplicationItem::populate() +{ + KApplication::setOverrideCursor(waitCursor); + + bool ok = false; + bool isDefault = false; + + QCStringList objs = kapp->dcopClient()->remoteObjects(app_, &ok); + + for (QCStringList::ConstIterator it = objs.begin(); it != objs.end(); ++it) + { + if (*it == "default") + { + isDefault = true; + continue; + } + new DCOPBrowserInterfaceItem(this, app_, *it, isDefault); + isDefault = false; + } + + KApplication::restoreOverrideCursor(); +} + +void DCOPBrowserApplicationItem::slotGotWindowName(int /*callId*/, const QCString& /*replyType*/, const QByteArray &replyData) +{ + QDataStream reply(replyData, IO_ReadOnly); + QCStringList mainswindows; + reply >> mainswindows; + QStringList sl=QStringList::split("/",mainswindows.first() ); + if(sl.count() >= 1) + { + QString mainWindowName=sl[1]; + if(!mainWindowName.isEmpty()) + { + QByteArray data; + kapp->dcopClient()->callAsync( app_, mainWindowName.utf8(), "icon()", data, + this, SLOT(retreiveIcon(int, const QCString&, const QByteArray&))); + } + } +} + +void DCOPBrowserApplicationItem::retreiveIcon(int /*callId*/,const QCString& /*replyType*/, const QByteArray &replyData) +{ + QDataStream reply(replyData, IO_ReadOnly); + QPixmap returnQPixmap; + reply >> returnQPixmap; + if(!returnQPixmap.isNull()) + setPixmap(0, QPixmap(returnQPixmap.convertToImage().smoothScale(16,16)) ); + else + kdDebug() << "Unable to retreive the icon" << endl; +} + +// ------------------------------------------------------------------------ + +DCOPBrowserInterfaceItem::DCOPBrowserInterfaceItem +( + DCOPBrowserApplicationItem * parent, + const QCString & app, + const QCString & object, + bool def +) + : DCOPBrowserItem(parent, Interface), + app_(app), + object_(object) +{ + setExpandable(true); + + if (def) + setText(0, i18n("%1 (default)").arg(QString::fromUtf8(object_))); + else + setText(0, QString::fromUtf8(object_)); +} + + void +DCOPBrowserInterfaceItem::setOpen(bool o) +{ + DCOPBrowserItem::setOpen(o); + + if (0 == firstChild()) + populate(); +} + + void +DCOPBrowserInterfaceItem::populate() +{ + KApplication::setOverrideCursor(waitCursor); + + bool ok = false; + + QCStringList funcs = kapp->dcopClient()->remoteFunctions(app_, object_, &ok); + + for (QCStringList::ConstIterator it = funcs.begin(); it != funcs.end(); ++it) + if ((*it) != "QCStringList functions()") + new DCOPBrowserFunctionItem(this, app_, object_, *it); + + KApplication::restoreOverrideCursor(); +} + +// ------------------------------------------------------------------------ + +DCOPBrowserFunctionItem::DCOPBrowserFunctionItem +( + DCOPBrowserInterfaceItem * parent, + const QCString & app, + const QCString & object, + const QCString & function +) + : DCOPBrowserItem(parent, Function), + app_(app), + object_(object), + function_(function) +{ + setExpandable(false); + setText(0, QString::fromUtf8(function_)); +} + + void +DCOPBrowserFunctionItem::setOpen(bool o) +{ + DCOPBrowserItem::setOpen(o); +} + +// ------------------------------------------------------------------------ + +KDCOPWindow::KDCOPWindow(QWidget *parent, const char * name) + : KMainWindow(parent, name) +{ + dcopClient = kapp->dcopClient(); + dcopClient->attach(); + resize( 377, 480 ); + statusBar()->message(i18n("Welcome to the KDE DCOP browser")); + + mainView = new kdcopview(this, "KDCOP"); + mainView->kListViewSearchLine1->setListView( mainView->lv ); + setCentralWidget(mainView); + mainView->lv->addColumn(i18n("Application")); + mainView->lv->header()->setStretchEnabled(true, 0); +// mainView->lv->addColumn(i18n("Interface")); +// mainView->lv->addColumn(i18n("Function")); + mainView->lv->setDragAutoScroll( FALSE ); + mainView->lv->setRootIsDecorated( TRUE ); + connect + ( + mainView->lv, + SIGNAL(doubleClicked(QListViewItem *)), + SLOT(slotCallFunction(QListViewItem *)) + ); + + connect + ( + mainView->lv, + SIGNAL(currentChanged(QListViewItem *)), + SLOT(slotCurrentChanged(QListViewItem *)) + ); + + + // set up the actions + KStdAction::quit( this, SLOT( close() ), actionCollection() ); + KStdAction::copy( this, SLOT( slotCopy()), actionCollection() ); + KStdAction::keyBindings( guiFactory(), SLOT( configureShortcuts() ), actionCollection() ); + + + (void) new KAction( i18n( "&Reload" ), "reload", KStdAccel::shortcut(KStdAccel::Reload), this, SLOT( slotReload() ), actionCollection(), "reload" ); + + exeaction = + new KAction + ( + i18n("&Execute"), + "exec", + CTRL + Key_E, + this, + SLOT(slotCallFunction()), + actionCollection(), + "execute" + ); + + exeaction->setEnabled(false); + exeaction->setToolTip(i18n("Execute the selected DCOP call.")); + + langmode = new KSelectAction ( i18n("Language Mode"), + CTRL + Key_M, + this, + SLOT(slotMode()), + actionCollection(), + "langmode"); + langmode->setEditable(false); + langmode->setItems(QStringList::split(",", "Shell,C++,Python")); + langmode->setToolTip(i18n("Set the current language export.")); + langmode->setCurrentItem(0); + slotMode(); + connect + ( + dcopClient, + SIGNAL(applicationRegistered(const QCString &)), + SLOT(slotApplicationRegistered(const QCString &)) + ); + + connect + ( + dcopClient, + SIGNAL(applicationRemoved(const QCString &)), + SLOT(slotApplicationUnregistered(const QCString &)) + ); + + dcopClient->setNotifications(true); + createGUI(); + setCaption(i18n("DCOP Browser")); + mainView->lb_replyData->hide(); + QTimer::singleShot(0, this, SLOT(slotFillApplications())); +} + + +void KDCOPWindow::slotCurrentChanged( QListViewItem* i ) +{ + DCOPBrowserItem* item = (DCOPBrowserItem*)i; + + if( item->type() == DCOPBrowserItem::Function ) + exeaction->setEnabled( true ); + else + exeaction->setEnabled( false ); +} + + +void KDCOPWindow::slotCallFunction() +{ + slotCallFunction( mainView->lv->currentItem() ); +} + +void KDCOPWindow::slotReload() +{ + slotFillApplications(); +} + +void KDCOPWindow::slotCallFunction( QListViewItem* it ) +{ + if(it == 0) + return; + DCOPBrowserItem * item = static_cast(it); + + if (item->type() != DCOPBrowserItem::Function) + return; + + DCOPBrowserFunctionItem * fitem = + static_cast(item); + + QString unNormalisedSignature = QString::fromUtf8(fitem->function()); + QString normalisedSignature; + QStringList types; + QStringList names; + + if (!getParameters(unNormalisedSignature, normalisedSignature, types, names)) + { + KMessageBox::error + (this, i18n("No parameters found."), i18n("DCOP Browser Error")); + + return; + } + + QByteArray data; + QByteArray replyData; + + QCString replyType; + + QDataStream arg(data, IO_WriteOnly); + + KDialogBase mydialog( this, "KDCOP Parameter Entry", true, + QString::null, KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true ); + + mydialog.setCaption + ( i18n("Call Function %1").arg( fitem->function() ) ); + + QFrame *frame = mydialog.makeMainWidget(); + + QLabel* h1 = new QLabel( i18n( "Name" ), frame ); + QLabel* h2 = new QLabel( i18n( "Type" ), frame ); + QLabel* h3 = new QLabel( i18n( "Value" ), frame ); + + QGridLayout* grid = new QGridLayout( frame, types.count() + 2, 3, + 0, KDialog::spacingHint() ); + + grid->addWidget( h1, 0, 0 ); + grid->addWidget( h2, 0, 1 ); + grid->addWidget( h3, 0, 2 ); + + // Build up a dialog for parameter entry if there are any parameters. + + if (types.count()) + { + int i = 0; + + QPtrList wl; + + for (QStringList::ConstIterator it = types.begin(); it != types.end(); ++it) + { + i++; + + const QString type = *it; + + const QString name = i-1 < (int)names.count() ? names[i-1] : QString::null; + + if( type == "int" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "int", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QIntValidator( e ) ); + } + else if ( type == "unsigned" || type == "uint" || type == "unsigned int" + || type == "Q_UINT32" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "unsigned int", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + + QIntValidator* iv = new QIntValidator( e ); + iv->setBottom( 0 ); + e->setValidator( iv ); + } + else if ( type == "long" || type == "long int" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "long", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QIntValidator( e ) ); + } + else if ( type == "ulong" || type == "unsigned long" || type == "unsigned long int" + || type == "Q_UINT64" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "unsigned long", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QIntValidator( e ) ); + } + else if ( type == "short" || type == "short int" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "long", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QIntValidator( e ) ); + } + else if ( type == "ushort" || type == "unsigned short" || type == "unsigned short int" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "unsigned short", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QIntValidator( e ) ); + } + else if ( type == "float" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "float", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QDoubleValidator( e ) ); + } + else if ( type == "double" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "double", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + e->setValidator( new QDoubleValidator( e ) ); + } + else if ( type == "bool" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "bool", frame ); + grid->addWidget( l, i, 1 ); + QCheckBox* c = new QCheckBox( frame ); + grid->addWidget( c, i, 2 ); + wl.append( c ); + } + else if ( type == "QString" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QString", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QCString" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QString", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QStringList" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QStringList", frame ); + grid->addWidget( l, i, 1 ); + KEditListBox* e = new KEditListBox ( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QValueList" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QValueList", frame ); + grid->addWidget( l, i, 1 ); + KEditListBox* e = new KEditListBox ( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "KURL" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "KURL", frame ); + grid->addWidget( l, i, 1 ); + KLineEdit* e = new KLineEdit( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QColor" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QColor", frame ); + grid->addWidget( l, i, 1 ); + KColorButton* e = new KColorButton( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QSize" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QSize", frame ); + grid->addWidget( l, i, 1 ); + KMultiIntEdit* e = new KMultiIntEdit( frame ); + e->addField( 1, i18n("Width") ); + e->addField( 2, i18n("Height") ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QPoint" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QPoint", frame ); + grid->addWidget( l, i, 1 ); + KMultiIntEdit* e = new KMultiIntEdit( frame ); + e->addField( 1, i18n("X") ); + e->addField( 2, i18n("Y") ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if ( type == "QRect" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QRect", frame ); + grid->addWidget( l, i, 1 ); + KMultiIntEdit* e = new KMultiIntEdit( frame ); + e->addField( 1, i18n("Left") ); + e->addField( 2, i18n("Top") ); + e->addField( 3, i18n("Width") ); + e->addField( 4, i18n("Height") ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else if( type == "QPixmap" ) + { + QLabel* n = new QLabel( name, frame ); + grid->addWidget( n, i, 0 ); + QLabel* l = new QLabel( "QPixmap", frame ); + grid->addWidget( l, i, 1 ); + KURLRequester* e = new KURLRequester( frame ); + grid->addWidget( e, i, 2 ); + wl.append( e ); + } + else + { + KMessageBox::sorry(this, i18n("Cannot handle datatype %1").arg(type)); + return; + } + } + + if (!wl.isEmpty()) + wl.at(0)->setFocus(); + + i++; + + int ret = mydialog.exec(); + + if (QDialog::Accepted != ret) + return; + + // extract the arguments + + i = 0; + + for (QStringList::ConstIterator it = types.begin(); it != types.end(); ++it) + { + QString type = *it; + + if ( type == "int" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toInt(); + } + else if ( type == "unsigned" || type == "uint" || type == "unsigned int" + || type == "Q_UINT32" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toUInt(); + } + else if( type == "long" || type == "long int" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toLong(); + } + else if( type == "ulong" || type == "unsigned long" || type == "unsigned long int" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toULong(); + } + else if( type == "short" || type == "short int" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toShort(); + } + else if( type == "ushort" || type == "unsigned short" || type == "unsigned short int" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toUShort(); + } + else if ( type == "Q_UINT64" ) + { + KLineEdit* e = ( KLineEdit* )wl.at( i ); + arg << e->text().toULongLong(); + } + else if( type == "float" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toFloat(); + } + else if( type == "double" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text().toDouble(); + } + else if( type == "bool" ) + { + QCheckBox* c = (QCheckBox*)wl.at( i ); + arg << c->isChecked(); + } + else if( type == "QCString" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << QCString( e->text().local8Bit() ); + } + else if( type == "QString" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << e->text(); + } + else if( type == "QStringList" ) + { + KEditListBox* e = (KEditListBox*)wl.at( i ); + arg << e->items(); + } + else if( type == "QValueList" ) + { + KEditListBox* e = (KEditListBox*)wl.at( i ); + for (int i = 0; i < e->count(); i++) + arg << QCString( e->text(i).local8Bit() ); + } + else if( type == "KURL" ) + { + KLineEdit* e = (KLineEdit*)wl.at( i ); + arg << KURL( e->text() ); + } + else if( type == "QColor" ) + { + KColorButton* e = (KColorButton*)wl.at( i ); + arg << e->color(); + } + else if( type == "QSize" ) + { + KMultiIntEdit* e = (KMultiIntEdit*)wl.at( i ); + arg << QSize(e->field(1) , e->field(2)) ; + } + else if( type == "QPoint" ) + { + KMultiIntEdit* e = (KMultiIntEdit*)wl.at( i ); + arg << QPoint(e->field(1) , e->field(2)) ; + } + else if( type == "QRect" ) + { + KMultiIntEdit* e = (KMultiIntEdit*)wl.at( i ); + arg << QRect(e->field(1) , e->field(2) , e->field(3) , e->field(4)) ; + } + else if( type == "QPixmap" ) + { + KURLRequester* e= (KURLRequester*)wl.at( i ); + arg << QPixmap(e->url()); + } + else + { + KMessageBox::sorry(this, i18n("Cannot handle datatype %1").arg(type)); + return; + } + + i++; + } + } + + DCOPRef( fitem->app(), "MainApplication-Interface" ).call( "updateUserTimestamp", kapp->userTimestamp()); + + // Now do the DCOP call + + bool callOk = + dcopClient->call + ( + fitem->app(), + fitem->object(), + normalisedSignature.utf8(), + data, + replyType, + replyData + ); + + if (!callOk) + { + kdDebug() + << "call failed( " + << fitem->app().data() + << ", " + << fitem->object().data() + << ", " + << normalisedSignature + << " )" + << endl; + + statusBar()->message(i18n("DCOP call failed")); + + QString msg = i18n("

      DCOP call failed.

      %1"); + + bool appRegistered = dcopClient->isApplicationRegistered(fitem->app()); + + if (appRegistered) + { + msg = + msg.arg + ( + i18n + ( + "

      Application is still registered with DCOP;" + " I do not know why this call failed.

      " + ) + ); + } + else + { + msg = + msg.arg + ( + i18n + ( + "

      The application appears to have unregistered with DCOP.

      " + ) + ); + } + + KMessageBox::information(this, msg); + } + else + { + QString coolSignature = + QString::fromUtf8(fitem->app()) + + "." + + QString::fromUtf8(fitem->object()) + + "." + + normalisedSignature ; + + statusBar()->message(i18n("DCOP call %1 executed").arg(coolSignature)); + + if (replyType != "void" && replyType != "ASYNC" && !replyType.isEmpty() ) + { + QDataStream reply(replyData, IO_ReadOnly); + if (demarshal(replyType, reply, mainView->lb_replyData)) + { + mainView->l_replyType->setText + ( + i18n("%1") + .arg(QString::fromUtf8(replyType)) + ); + mainView->lb_replyData->show(); + } + else + { + mainView->l_replyType->setText(i18n("Unknown type %1.").arg(QString::fromUtf8(replyType))); + mainView->lb_replyData->hide(); + } + } + else + { + mainView->l_replyType->setText(i18n("No returned values")); + mainView->lb_replyData->hide(); + } + } +} + + +void KDCOPWindow::slotFillApplications() +{ + KApplication::setOverrideCursor(waitCursor); + + QCStringList apps = dcopClient->registeredApplications(); + QCString appId = dcopClient->appId(); + + mainView->lv->clear(); + + for (QCStringList::ConstIterator it = apps.begin(); it != apps.end(); ++it) + { + if ((*it) != appId && (*it).left(9) != "anonymous") + { + new DCOPBrowserApplicationItem(mainView->lv, *it); + } + } + + KApplication::restoreOverrideCursor(); +} + +bool KDCOPWindow::demarshal +( + QCString & replyType, + QDataStream & reply, + QListBox *theList +) +{ + QStringList ret; + QPixmap pret; + bool isValid = true; + theList->clear(); + ret.clear(); + + if ( replyType == "QVariant" ) + { + // read data type from stream + Q_INT32 type; + reply >> type; + + // change replyType to real typename + replyType = QVariant::typeToName( (QVariant::Type)type ); + + // demarshal data with a recursive call + return demarshal(replyType, reply, theList); + } + else if ( replyType == "int" ) + { + int i; + reply >> i; + ret << QString::number(i); + } + else if ( replyType == "uint" || replyType == "unsigned int" + || replyType == "Q_UINT32" ) + { + uint i; + reply >> i; + ret << QString::number(i); + } + else if ( replyType == "long" || replyType == "long int" ) + { + long l; + reply >> l; + ret << QString::number(l); + } + else if ( replyType == "ulong" || replyType == "unsigned long" || replyType == "unsigned long int" ) + { + ulong l; + reply >> l; + ret << QString::number(l); + } + else if ( replyType == "Q_UINT64" ) + { + Q_UINT64 i; + reply >> i; + ret << QString::number(i); + } + else if ( replyType == "float" ) + { + float f; + reply >> f; + ret << QString::number(f); + } + else if ( replyType == "double" ) + { + double d; + reply >> d; + ret << QString::number(d); + } + else if (replyType == "bool") + { + bool b; + reply >> b; + ret << (b ? QString::fromUtf8("true") : QString::fromUtf8("false")); + } + else if (replyType == "QString") + { + QString s; + reply >> s; + ret << s; + } + else if (replyType == "QStringList") + { + reply >> ret; + } + else if (replyType == "QCString") + { + QCString r; + reply >> r; + ret << QString::fromUtf8(r); + } + else if (replyType == "QCStringList") + { + QCStringList lst; + reply >> lst; + + for (QCStringList::ConstIterator it(lst.begin()); it != lst.end(); ++it) + ret << *it; + } + else if (replyType == "KURL") + { + KURL r; + reply >> r; + ret << r.prettyURL(); + } + else if (replyType == "QSize") + { + QSize r; + reply >> r; + ret << QString::number(r.width()) + "x" + QString::number(r.height()); + } + else if (replyType == "QPoint") + { + QPoint r; + reply >> r; + ret << "(" + QString::number(r.x()) + "," + QString::number(r.y()) + ")"; + } + else if (replyType == "QRect") + { + QRect r; + reply >> r; + ret << QString::number(r.x()) + "x" + QString::number(r.y()) + "+" + QString::number(r.height()) + "+" + QString::number(r.width()); + } + else if (replyType == "QFont") + { + QFont r; + reply >> r; + ret << r.rawName(); + } + else if (replyType == "QCursor") + { + QCursor r; + reply >> r; + //theList->insertItem(r, 1); + ret << "Cursor #" + QString::number(r.shape()); + } + else if (replyType == "QPixmap") + { + QPixmap r; + reply >> r; + theList->insertItem(r, 1); + } + else if (replyType == "QColor") + { + QColor r; + reply >> r; + QString color = r.name(); + QPixmap p(15,15); + p.fill(r); + theList->insertItem(p,color, 1); + } + else if (replyType == "QDateTime") + { + QDateTime r; + reply >> r; + ret << r.toString(); + } + else if (replyType == "QDate") + { + QDate r; + reply >> r; + ret << r.toString(); + } + else if (replyType == "QTime") + { + QTime r; + reply >> r; + ret << r.toString(); + } + else if (replyType == "DCOPRef") + { + DCOPRef r; + reply >> r; + if (!r.app().isEmpty() && !r.obj().isEmpty()) + ret << QString("DCOPRef(%1, %2)").arg(r.app(), r.obj()); + } + else + { + ret << + i18n("Do not know how to demarshal %1").arg(QString::fromUtf8(replyType)); + isValid = false; + } + + if (!ret.isEmpty()) + theList->insertStringList(ret); + return isValid; +} + + void +KDCOPWindow::slotApplicationRegistered(const QCString & appName) +{ + QListViewItemIterator it(mainView->lv); + + for (; it.current(); ++it) + { + DCOPBrowserApplicationItem * item = + static_cast(it.current()); + + if (item->app() == appName) + return; + } + + QCString appId = dcopClient->appId(); + + if (appName != appId && appName.left(9) != "anonymous") + { + new DCOPBrowserApplicationItem(mainView->lv, appName); + } +} + + void +KDCOPWindow::slotApplicationUnregistered(const QCString & appName) +{ + QListViewItemIterator it(mainView->lv); + + for (; it.current(); ++it) + { + DCOPBrowserApplicationItem * item = + static_cast(it.current()); + + if (item->app() == appName) + { + delete item; + return; + } + } +} + + bool +KDCOPWindow::getParameters +( + const QString & _unNormalisedSignature, + QString & normalisedSignature, + QStringList & types, + QStringList & names +) +{ + QString unNormalisedSignature(_unNormalisedSignature); + + int s = unNormalisedSignature.find(' '); + + if ( s < 0 ) + s = 0; + else + s++; + + unNormalisedSignature = unNormalisedSignature.mid(s); + + int left = unNormalisedSignature.find('('); + int right = unNormalisedSignature.findRev(')'); + + if (-1 == left) + { + // Fucked up function signature. + return false; + } + + QStringList intTypes; + intTypes << "int" << "unsigned" << "long" << "bool" ; + + if (left > 0 && left + 1 < right - 1) + { + types = + QStringList::split + (',', unNormalisedSignature.mid(left + 1, right - left - 1)); + + for (QStringList::Iterator it = types.begin(); it != types.end(); ++it) + { + (*it) = (*it).simplifyWhiteSpace(); + + int s = (*it).findRev(' '); + + if (-1 != s && !intTypes.contains((*it).mid(s + 1))) + { + names.append((*it).mid(s + 1)); + + (*it) = (*it).left(s); + } + } + } + + normalisedSignature = + unNormalisedSignature.left(left) + "(" + types.join(",") + ")"; + + return true; +} +void KDCOPWindow::slotCopy() +{ + // Copy pixmap and text to the clipboard from the + // below list view. If there is nothing selected from + // the below menu then tell the tree to copy its current + // selection as text. + QClipboard *clipboard = QApplication::clipboard(); + if (mainView->lb_replyData->count()!= 0) + { + + //if (!mainView->lb_replyData->pixmap(mainView->lb_replyData->currentItem())->isNull()) + //{ + kdDebug() << "Is pixmap" << endl; + // QPixmap p; + // p = *mainView->lb_replyData->pixmap(mainView->lb_replyData->currentItem()); + // clipboard->setPixmap(p); + //} + QString t = mainView->lb_replyData->text(mainView->lb_replyData->currentItem()); + if (!t.isNull()) + clipboard->setText(t); + } +} + +void KDCOPWindow::slotMode() +{ + kdDebug () << "Going to mode " << langmode->currentText() << endl; + // Tell lv what the current mode is here... + mainView->lv->setMode(langmode->currentText()); +} + +#include "kdcopwindow.moc" diff --git a/kdcop/kdcopwindow.h b/kdcop/kdcopwindow.h new file mode 100644 index 000000000..18e4ecfb6 --- /dev/null +++ b/kdcop/kdcopwindow.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2000 by Matthias Kalle Dalheimer + * + * Licensed under the Artistic License. + */ + +#ifndef __KDCOPWINDOW_H__ +#define __KDCOPWINDOW_H__ + +class DCOPClient; +class QListViewItem; +class KAction; +class KSelectAction; +class QWidgetStack; +class QLabel; +class KDCOPListView; + +#include +#include "kdcoplistview.h" +#include "kdcopview.h" + +class KDCOPWindow : public KMainWindow +{ + Q_OBJECT + + public: + + KDCOPWindow( QWidget* parent = 0, const char* name = 0 ); + + protected slots: + + void slotCurrentChanged( QListViewItem* item ); + void slotCallFunction(); + void slotCallFunction( QListViewItem* item ); + void slotApplicationRegistered(const QCString &); + void slotApplicationUnregistered(const QCString &); + void slotFillApplications(); + void slotCopy(); + void slotMode(); + void slotReload(); + private: + void fillObjects( DCOPBrowserItem*, const char* app ); + void fillFunctions( DCOPBrowserItem*, const char* app, const char* obj ); + + bool getParameters + ( + const QString & unNormalisedSignature, + QString & normalisedSignature, + QStringList & types, + QStringList & names + ); + + bool demarshal(QCString & replyType, QDataStream & reply, QListBox *theList); + + DCOPClient * dcopClient; + KAction * exeaction; + KSelectAction * langmode; + kdcopview * mainView; + QVBoxLayout * mainLayout; +}; + + + +#endif diff --git a/kde.pamd b/kde.pamd new file mode 100644 index 000000000..d137b2457 --- /dev/null +++ b/kde.pamd @@ -0,0 +1,7 @@ +#%PAM-1.0 +auth required /lib/security/pam_pwdb.so shadow nullok +auth required /lib/security/pam_nologin.so +account required /lib/security/pam_pwdb.so +password required /lib/security/pam_cracklib.so +password required /lib/security/pam_pwdb.so shadow nullok use_authtok +session required /lib/security/pam_pwdb.so diff --git a/kde3 b/kde3 new file mode 100644 index 000000000..a99dcf461 --- /dev/null +++ b/kde3 @@ -0,0 +1,9 @@ +#!/bin/sh +# +# Script for launching KDE3 applications from outside of the KDE3 desktop +# +# Modify this to match your specific needs, such as setting up needed env. variables, +# and make sure this script is in $PATH (e.g. make a symlink if necessary). +# + +exec "$@" diff --git a/kdebase.lsm b/kdebase.lsm new file mode 100644 index 000000000..8561497ad --- /dev/null +++ b/kdebase.lsm @@ -0,0 +1,11 @@ +Begin4 +Title: kdebase +Version: 3.5.10 +Entered-date: 2008-08-26 +Description: base package of the K Desktop Environment (KDE) +Keywords: KDE X11 desktop Qt +Author: http://bugs.kde.org/ (KDE Bugtracking System) +Primary-site: http://www.kde.org/download/ +Platforms: Unix, Qt +Copying-policy: GPL, Artistic +End diff --git a/kdebugdialog/Makefile.am b/kdebugdialog/Makefile.am new file mode 100644 index 000000000..a301bd54b --- /dev/null +++ b/kdebugdialog/Makefile.am @@ -0,0 +1,16 @@ +## Makefile.am of kdebugdialog + +INCLUDES= $(all_includes) + +####### Files + +bin_PROGRAMS = kdebugdialog + +kdebugdialog_SOURCES = main.cpp kabstractdebugdialog.cpp kdebugdialog.cpp klistdebugdialog.cpp +kdebugdialog_METASOURCES = AUTO +kdebugdialog_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kdebugdialog_LDADD = $(LIB_KDEUI) + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kdebugdialog.pot + diff --git a/kdebugdialog/README b/kdebugdialog/README new file mode 100644 index 000000000..e1d239223 --- /dev/null +++ b/kdebugdialog/README @@ -0,0 +1,12 @@ +kdebugdialog +------------ + +In --fullmode, you can choose to dump debug output to a file. +But keep in mind that multiple programs may be writing to that +area (and therefore to that file), so they will always be appending +to it and never clearing it. So don't forget to empty it once in a +while! + +Your configuration will of course be stored in + $HOME/.kde/share/config/kdebugrc + diff --git a/kdebugdialog/kabstractdebugdialog.cpp b/kdebugdialog/kabstractdebugdialog.cpp new file mode 100644 index 000000000..76dca8f61 --- /dev/null +++ b/kdebugdialog/kabstractdebugdialog.cpp @@ -0,0 +1,85 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 David Faure + + 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 "kabstractdebugdialog.h" +#include +#include +#include +#include +#include +#include + +KAbstractDebugDialog::KAbstractDebugDialog( QWidget *parent, const char *name, bool modal ) + : KDialog( parent, name, modal ) +{ + pConfig = new KConfig( "kdebugrc" ); +} + +KAbstractDebugDialog::~KAbstractDebugDialog() +{ + delete pConfig; +} + +void KAbstractDebugDialog::buildButtons( QVBoxLayout * topLayout ) +{ + QHBoxLayout *hbox = new QHBoxLayout( KDialog::spacingHint() ); + topLayout->addLayout( hbox ); + pHelpButton = new KPushButton( KStdGuiItem::help(), this ); + hbox->addWidget( pHelpButton ); + hbox->addStretch(10); + QSpacerItem *spacer = new QSpacerItem(40, 0); + hbox->addItem(spacer); + pOKButton = new KPushButton( KStdGuiItem::ok(), this ); + hbox->addWidget( pOKButton ); + pApplyButton = new KPushButton( KStdGuiItem::apply(), this ); + hbox->addWidget( pApplyButton ); + pCancelButton = new KPushButton( KStdGuiItem::cancel(), this ); + hbox->addWidget( pCancelButton ); + + int w1 = pHelpButton->sizeHint().width(); + int w2 = pOKButton->sizeHint().width(); + int w3 = pCancelButton->sizeHint().width(); + int w4 = QMAX( w1, QMAX( w2, w3 ) ); + int w5 = pApplyButton->sizeHint().width(); + w4 = QMAX(w4, w5); + + pHelpButton->setFixedWidth( w4 ); + pOKButton->setFixedWidth( w4 ); + pApplyButton->setFixedWidth( w4 ); + pCancelButton->setFixedWidth( w4 ); + + connect( pHelpButton, SIGNAL( clicked() ), SLOT( slotShowHelp() ) ); + connect( pOKButton, SIGNAL( clicked() ), SLOT( accept() ) ); + connect( pApplyButton, SIGNAL( clicked() ), SLOT( slotApply() ) ); + connect( pCancelButton, SIGNAL( clicked() ), SLOT( reject() ) ); +} + +void KAbstractDebugDialog::slotShowHelp() +{ + if (kapp) + kapp->invokeHelp(); +} + +void KAbstractDebugDialog::slotApply() +{ + save(); + pConfig->sync(); +} + +#include "kabstractdebugdialog.moc" diff --git a/kdebugdialog/kabstractdebugdialog.h b/kdebugdialog/kabstractdebugdialog.h new file mode 100644 index 000000000..d31fb53aa --- /dev/null +++ b/kdebugdialog/kabstractdebugdialog.h @@ -0,0 +1,54 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 David Faure + + 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 KABSTRACTDEBUGDIALOG__H +#define KABSTRACTDEBUGDIALOG__H + +#include + +class KConfig; +class QVBoxLayout; +class KPushButton; + +class KAbstractDebugDialog : public KDialog +{ + Q_OBJECT +public: + KAbstractDebugDialog( QWidget *parent=0, const char *name=0, bool modal=true ); + + virtual ~KAbstractDebugDialog(); + + virtual void buildButtons(QVBoxLayout * topLayout); + + virtual void save() = 0; + KConfig * config() { return pConfig; } + +protected slots: + void slotShowHelp(); + void slotApply(); + +protected: + KConfig* pConfig; + KPushButton* pOKButton; + KPushButton* pCancelButton; + KPushButton* pHelpButton; + KPushButton* pApplyButton; +}; + +#endif diff --git a/kdebugdialog/kdebugdialog.cpp b/kdebugdialog/kdebugdialog.cpp new file mode 100644 index 000000000..ae0ef0eaa --- /dev/null +++ b/kdebugdialog/kdebugdialog.cpp @@ -0,0 +1,260 @@ +/* This file is part of the KDE libraries + Copyright (C) 1997 Matthias Kalle Dalheimer (kalle@kde.org) + Copyright (C) 1999 David Faure (faure@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. +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kdebugdialog.h" + +KDebugDialog::KDebugDialog( QStringList areaList, QWidget *parent, const char *name, bool modal ) + : KAbstractDebugDialog( parent, name, modal ) +{ + setCaption(i18n("Debug Settings")); + + QVBoxLayout *topLayout = new QVBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint() ); + if( topLayout == 0 ) { return; } // can this happen ? + + QLabel * tmpLabel = new QLabel( i18n("Debug area:"), this ); + tmpLabel->setFixedHeight( fontMetrics().lineSpacing() ); + topLayout->addWidget( tmpLabel ); + + // Build combo of debug areas + pDebugAreas = new QComboBox( false, this ); + pDebugAreas->setFixedHeight( pDebugAreas->sizeHint().height() ); + pDebugAreas->insertStringList( areaList ); + topLayout->addWidget( pDebugAreas ); + + QGridLayout *gbox = new QGridLayout( 2, 2, KDialog::marginHint() ); + if( gbox == 0 ) { return; } + topLayout->addLayout( gbox ); + + QStringList destList; + destList.append( i18n("File") ); + destList.append( i18n("Message Box") ); + destList.append( i18n("Shell") ); + destList.append( i18n("Syslog") ); + destList.append( i18n("None") ); + + // + // Upper left frame + // + pInfoGroup = new QGroupBox( i18n("Information"), this ); + gbox->addWidget( pInfoGroup, 0, 0 ); + QVBoxLayout *vbox = new QVBoxLayout( pInfoGroup, KDialog::spacingHint() ); + vbox->addSpacing( fontMetrics().lineSpacing() ); + pInfoLabel1 = new QLabel( i18n("Output to:"), pInfoGroup ); + vbox->addWidget( pInfoLabel1 ); + pInfoCombo = new QComboBox( false, pInfoGroup ); + connect(pInfoCombo, SIGNAL(activated(int)), + this, SLOT(slotDestinationChanged(int))); + vbox->addWidget( pInfoCombo ); + pInfoCombo->insertStringList( destList ); + pInfoLabel2 = new QLabel( i18n("Filename:"), pInfoGroup ); + vbox->addWidget( pInfoLabel2 ); + pInfoFile = new QLineEdit( pInfoGroup ); + vbox->addWidget( pInfoFile ); + /* + pInfoLabel3 = new QLabel( i18n("Show only area(s):"), pInfoGroup ); + vbox->addWidget( pInfoLabel3 ); + pInfoShow = new QLineEdit( pInfoGroup ); + vbox->addWidget( pInfoShow ); + */ + + // + // Upper right frame + // + pWarnGroup = new QGroupBox( i18n("Warning"), this ); + gbox->addWidget( pWarnGroup, 0, 1 ); + vbox = new QVBoxLayout( pWarnGroup, KDialog::spacingHint() ); + vbox->addSpacing( fontMetrics().lineSpacing() ); + pWarnLabel1 = new QLabel( i18n("Output to:"), pWarnGroup ); + vbox->addWidget( pWarnLabel1 ); + pWarnCombo = new QComboBox( false, pWarnGroup ); + connect(pWarnCombo, SIGNAL(activated(int)), + this, SLOT(slotDestinationChanged(int))); + vbox->addWidget( pWarnCombo ); + pWarnCombo->insertStringList( destList ); + pWarnLabel2 = new QLabel( i18n("Filename:"), pWarnGroup ); + vbox->addWidget( pWarnLabel2 ); + pWarnFile = new QLineEdit( pWarnGroup ); + vbox->addWidget( pWarnFile ); + /* + pWarnLabel3 = new QLabel( i18n("Show only area(s):"), pWarnGroup ); + vbox->addWidget( pWarnLabel3 ); + pWarnShow = new QLineEdit( pWarnGroup ); + vbox->addWidget( pWarnShow ); + */ + + // + // Lower left frame + // + pErrorGroup = new QGroupBox( i18n("Error"), this ); + gbox->addWidget( pErrorGroup, 1, 0 ); + vbox = new QVBoxLayout( pErrorGroup, KDialog::spacingHint() ); + vbox->addSpacing( fontMetrics().lineSpacing() ); + pErrorLabel1 = new QLabel( i18n("Output to:"), pErrorGroup ); + vbox->addWidget( pErrorLabel1 ); + pErrorCombo = new QComboBox( false, pErrorGroup ); + connect(pErrorCombo, SIGNAL(activated(int)), + this, SLOT(slotDestinationChanged(int))); + vbox->addWidget( pErrorCombo ); + pErrorCombo->insertStringList( destList ); + pErrorLabel2 = new QLabel( i18n("Filename:"), pErrorGroup ); + vbox->addWidget( pErrorLabel2 ); + pErrorFile = new QLineEdit( pErrorGroup ); + vbox->addWidget( pErrorFile ); + /* + pErrorLabel3 = new QLabel( i18n("Show only area(s):"), pErrorGroup ); + vbox->addWidget( pErrorLabel3 ); + pErrorShow = new QLineEdit( pErrorGroup ); + vbox->addWidget( pErrorShow ); + */ + + // + // Lower right frame + // + pFatalGroup = new QGroupBox( i18n("Fatal Error"), this ); + gbox->addWidget( pFatalGroup, 1, 1 ); + vbox = new QVBoxLayout( pFatalGroup, KDialog::spacingHint() ); + vbox->addSpacing( fontMetrics().lineSpacing() ); + pFatalLabel1 = new QLabel( i18n("Output to:"), pFatalGroup ); + vbox->addWidget( pFatalLabel1 ); + pFatalCombo = new QComboBox( false, pFatalGroup ); + connect(pFatalCombo, SIGNAL(activated(int)), + this, SLOT(slotDestinationChanged(int))); + vbox->addWidget( pFatalCombo ); + pFatalCombo->insertStringList( destList ); + pFatalLabel2 = new QLabel( i18n("Filename:"), pFatalGroup ); + vbox->addWidget( pFatalLabel2 ); + pFatalFile = new QLineEdit( pFatalGroup ); + vbox->addWidget( pFatalFile ); + /* + pFatalLabel3 = new QLabel( i18n("Show only area(s):"), pFatalGroup ); + vbox->addWidget( pFatalLabel3 ); + pFatalShow = new QLineEdit( pFatalGroup ); + vbox->addWidget( pFatalShow ); + */ + + + pAbortFatal = new QCheckBox( i18n("Abort on fatal errors"), this ); + topLayout->addWidget(pAbortFatal); + + topLayout->addStretch(); + KSeparator *hline = new KSeparator( KSeparator::HLine, this ); + topLayout->addWidget( hline ); + + buildButtons( topLayout ); + + connect( pDebugAreas, SIGNAL( activated( const QString &) ), + SLOT( slotDebugAreaChanged( const QString & ) ) ); + + // Get initial values ("initial" is understood by the slot) + slotDebugAreaChanged( "0 initial" ); + slotDestinationChanged(0); + + resize( 300, height() ); +} + +KDebugDialog::~KDebugDialog() +{ +} + +void KDebugDialog::slotDebugAreaChanged( const QString & text ) +{ + // Save settings from previous page + if ( text != "0 initial" ) // except on first call + save(); + + QString data = text.simplifyWhiteSpace(); + int space = data.find(" "); + if (space == -1) + kdError() << "No space:" << data << endl; + + bool longOK; + unsigned long number = data.left(space).toULong(&longOK); + if (!longOK) + kdError() << "The first part wasn't a number : " << data << endl; + + /* Fill dialog fields with values from config data */ + pConfig->setGroup( QString::number( number ) ); // Group name = debug area code + pInfoCombo->setCurrentItem( pConfig->readNumEntry( "InfoOutput", 2 ) ); + pInfoFile->setText( pConfig->readPathEntry( "InfoFilename","kdebug.dbg" ) ); + //pInfoShow->setText( pConfig->readEntry( "InfoShow" ) ); + pWarnCombo->setCurrentItem( pConfig->readNumEntry( "WarnOutput", 2 ) ); + pWarnFile->setText( pConfig->readPathEntry( "WarnFilename","kdebug.dbg" ) ); + //pWarnShow->setText( pConfig->readEntry( "WarnShow" ) ); + pErrorCombo->setCurrentItem( pConfig->readNumEntry( "ErrorOutput", 2 ) ); + pErrorFile->setText( pConfig->readPathEntry( "ErrorFilename","kdebug.dbg") ); + //pErrorShow->setText( pConfig->readEntry( "ErrorShow" ) ); + pFatalCombo->setCurrentItem( pConfig->readNumEntry( "FatalOutput", 2 ) ); + pFatalFile->setText( pConfig->readPathEntry("FatalFilename","kdebug.dbg") ); + //pFatalShow->setText( pConfig->readEntry( "FatalShow" ) ); + pAbortFatal->setChecked( pConfig->readNumEntry( "AbortFatal", 1 ) ); + slotDestinationChanged(0); +} + +void KDebugDialog::save() +{ + pConfig->writeEntry( "InfoOutput", pInfoCombo->currentItem() ); + pConfig->writePathEntry( "InfoFilename", pInfoFile->text() ); + //pConfig->writeEntry( "InfoShow", pInfoShow->text() ); + pConfig->writeEntry( "WarnOutput", pWarnCombo->currentItem() ); + pConfig->writePathEntry( "WarnFilename", pWarnFile->text() ); + //pConfig->writeEntry( "WarnShow", pWarnShow->text() ); + pConfig->writeEntry( "ErrorOutput", pErrorCombo->currentItem() ); + pConfig->writePathEntry( "ErrorFilename", pErrorFile->text() ); + //pConfig->writeEntry( "ErrorShow", pErrorShow->text() ); + pConfig->writeEntry( "FatalOutput", pFatalCombo->currentItem() ); + pConfig->writePathEntry( "FatalFilename", pFatalFile->text() ); + //pConfig->writeEntry( "FatalShow", pFatalShow->text() ); + pConfig->writeEntry( "AbortFatal", pAbortFatal->isChecked() ); + + QByteArray data; + if (!kapp->dcopClient()->send("*", "KDebug", "notifyKDebugConfigChanged()", data)) + { + kdError() << "Unable to send DCOP message" << endl; + } +} + +void KDebugDialog::slotDestinationChanged(int) { + pInfoFile->setEnabled(pInfoCombo->currentItem() == 0); + pWarnFile->setEnabled(pWarnCombo->currentItem() == 0); + pErrorFile->setEnabled(pErrorCombo->currentItem() == 0); + pFatalFile->setEnabled(pFatalCombo->currentItem() == 0); +} + +#include "kdebugdialog.moc" diff --git a/kdebugdialog/kdebugdialog.h b/kdebugdialog/kdebugdialog.h new file mode 100644 index 000000000..d0c22fbc1 --- /dev/null +++ b/kdebugdialog/kdebugdialog.h @@ -0,0 +1,93 @@ +/* This file is part of the KDE libraries + Copyright (C) 1997 Matthias Kalle Dalheimer (kalle@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 _KDEBUGDIALOG +#define _KDEBUGDIALOG + +#include "kabstractdebugdialog.h" + +class QLineEdit; +class QComboBox; +class QLabel; +class QGroupBox; +class QCheckBox; +class QPushButton; + +class KConfig; + +/** + * Control debug/warning/error/fatal output of KDE applications + * + * This dialog allows control of debugging output for all KDE apps. + * + * @author Kalle Dalheimer (kalle@kde.org) + */ +class KDebugDialog : public KAbstractDebugDialog +{ + Q_OBJECT + +public: + KDebugDialog( QStringList areaList, QWidget *parent=0, const char *name=0, bool modal=true ); + virtual ~KDebugDialog(); + + void save(); + +protected slots: + void slotDebugAreaChanged( const QString & ); + void slotDestinationChanged(int); + +private: + QComboBox* pDebugAreas; + QGroupBox* pInfoGroup; + QLabel* pInfoLabel1; + QComboBox* pInfoCombo; + QLabel* pInfoLabel2; + QLineEdit* pInfoFile; + QLabel* pInfoLabel3; + QLineEdit* pInfoShow; + QGroupBox* pWarnGroup; + QLabel* pWarnLabel1; + QComboBox* pWarnCombo; + QLabel* pWarnLabel2; + QLineEdit* pWarnFile; + QLabel* pWarnLabel3; + QLineEdit* pWarnShow; + QGroupBox* pErrorGroup; + QLabel* pErrorLabel1; + QComboBox* pErrorCombo; + QLabel* pErrorLabel2; + QLineEdit* pErrorFile; + QLabel* pErrorLabel3; + QLineEdit* pErrorShow; + QGroupBox* pFatalGroup; + QLabel* pFatalLabel1; + QComboBox* pFatalCombo; + QLabel* pFatalLabel2; + QLineEdit* pFatalFile; + QLabel* pFatalLabel3; + QLineEdit* pFatalShow; + + QCheckBox* pAbortFatal; + +private: + // Disallow assignment and copy-construction + KDebugDialog( const KDebugDialog& ); + KDebugDialog& operator= ( const KDebugDialog& ); +}; + +#endif diff --git a/kdebugdialog/klistdebugdialog.cpp b/kdebugdialog/klistdebugdialog.cpp new file mode 100644 index 000000000..8dade2895 --- /dev/null +++ b/kdebugdialog/klistdebugdialog.cpp @@ -0,0 +1,193 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 David Faure + + 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 "klistdebugdialog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +KListDebugDialog::KListDebugDialog( QStringList areaList, QWidget *parent, const char *name, bool modal ) + : KAbstractDebugDialog( parent, name, modal ), + m_areaList( areaList ) +{ + setCaption(i18n("Debug Settings")); + + QVBoxLayout *lay = new QVBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint() ); + + m_incrSearch = new KLineEdit( this ); + lay->addWidget( m_incrSearch ); + connect( m_incrSearch, SIGNAL( textChanged( const QString& ) ), + SLOT( generateCheckBoxes( const QString& ) ) ); + + QScrollView * scrollView = new QScrollView( this ); + scrollView->setResizePolicy( QScrollView::AutoOneFit ); + lay->addWidget( scrollView ); + + m_box = new QVBox( scrollView->viewport() ); + scrollView->addChild( m_box ); + + generateCheckBoxes( QString::null ); + + QHBoxLayout* selectButs = new QHBoxLayout( lay ); + QPushButton* all = new QPushButton( i18n("&Select All"), this ); + QPushButton* none = new QPushButton( i18n("&Deselect All"), this ); + selectButs->addWidget( all ); + selectButs->addWidget( none ); + + connect( all, SIGNAL( clicked() ), this, SLOT( selectAll() ) ); + connect( none, SIGNAL( clicked() ), this, SLOT( deSelectAll() ) ); + + buildButtons( lay ); + resize( 350, 400 ); +} + +void KListDebugDialog::generateCheckBoxes( const QString& filter ) +{ + QPtrListIterator cb_it ( boxes ); + for( ; cb_it.current() ; ++cb_it ) + { + if( (*cb_it)->state() != QButton::NoChange ) + m_changes.insert( (*cb_it)->name(), (*cb_it)->isChecked() ? 2 : 4 ); + } + + boxes.setAutoDelete( true ); + boxes.clear(); + boxes.setAutoDelete( false ); + + QWidget* taborder = m_incrSearch; + QStringList::Iterator it = m_areaList.begin(); + for ( ; it != m_areaList.end() ; ++it ) + { + QString data = (*it).simplifyWhiteSpace(); + if ( filter.isEmpty() || data.lower().contains( filter.lower() ) ) + { + int space = data.find(" "); + if (space == -1) + kdError() << "No space:" << data << endl; + + QString areaNumber = data.left(space); + //kdDebug() << areaNumber << endl; + QCheckBox * cb = new QCheckBox( data, m_box, areaNumber.latin1() ); + cb->show(); + boxes.append( cb ); + setTabOrder( taborder, cb ); + taborder = cb; + } + } + + load(); +} + +void KListDebugDialog::selectAll() +{ + QPtrListIterator it ( boxes ); + for ( ; it.current() ; ++it ) { + (*it)->setChecked( true ); + m_changes.insert( (*it)->name(), 2 ); + } +} + +void KListDebugDialog::deSelectAll() +{ + QPtrListIterator it ( boxes ); + for ( ; it.current() ; ++it ) { + (*it)->setChecked( false ); + m_changes.insert( (*it)->name(), 4 ); + } +} + +void KListDebugDialog::load() +{ + QPtrListIterator it ( boxes ); + for ( ; it.current() ; ++it ) + { + pConfig->setGroup( (*it)->name() ); // Group name = debug area code = cb's name + + int setting = pConfig->readNumEntry( "InfoOutput", 2 ); + // override setting if in m_changes + if( m_changes.find( (*it)->name() ) != m_changes.end() ) { + setting = m_changes[ (*it)->name() ]; + } + + switch (setting) { + case 4: // off + (*it)->setChecked(false); + break; + case 2: //shell + (*it)->setChecked(true); + break; + case 3: //syslog + case 1: //msgbox + case 0: //file + default: + (*it)->setNoChange(); + /////// Uses the triState capability of checkboxes + ////// Note: it seems some styles don't draw that correctly (BUG) + break; + } + } +} + +void KListDebugDialog::save() +{ + QPtrListIterator it ( boxes ); + for ( ; it.current() ; ++it ) + { + pConfig->setGroup( (*it)->name() ); // Group name = debug area code = cb's name + if ( (*it)->state() != QButton::NoChange ) + { + int setting = (*it)->isChecked() ? 2 : 4; + pConfig->writeEntry( "InfoOutput", setting ); + } + } + //sync done by main.cpp + + // send DCOP message to all clients + QByteArray data; + if (!kapp->dcopClient()->send("*", "KDebug", "notifyKDebugConfigChanged()", data)) + { + kdError() << "Unable to send DCOP message" << endl; + } + + m_changes.clear(); +} + +void KListDebugDialog::activateArea( QCString area, bool activate ) +{ + QPtrListIterator it ( boxes ); + for ( ; it.current() ; ++it ) + { + if ( area == (*it)->name() // debug area code = cb's name + || (*it)->text().find( QString::fromLatin1(area) ) != -1 ) // area name included in cb text + { + (*it)->setChecked( activate ); + return; + } + } +} + +#include "klistdebugdialog.moc" diff --git a/kdebugdialog/klistdebugdialog.h b/kdebugdialog/klistdebugdialog.h new file mode 100644 index 000000000..97ab73ce6 --- /dev/null +++ b/kdebugdialog/klistdebugdialog.h @@ -0,0 +1,65 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 David Faure + + 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 KLISTDEBUGDIALOG__H +#define KLISTDEBUGDIALOG__H + +#include "kabstractdebugdialog.h" +#include +#include +#include + +class QVBox; +class KLineEdit; + +/** + * Control debug output of KDE applications + * This dialog offers a reduced functionality compared to the full KDebugDialog + * class, but allows to set debug output on or off to several areas much more easily. + * + * @author David Faure + */ +class KListDebugDialog : public KAbstractDebugDialog +{ + Q_OBJECT + +public: + KListDebugDialog( QStringList areaList, QWidget *parent=0, const char *name=0, bool modal=true ); + virtual ~KListDebugDialog() {} + + void activateArea( QCString area, bool activate ); + + virtual void save(); + +protected slots: + void selectAll(); + void deSelectAll(); + + void generateCheckBoxes( const QString& filter ); + +private: + void load(); + QPtrList boxes; + QStringList m_areaList; + QVBox *m_box; + KLineEdit *m_incrSearch; + QMap m_changes; +}; + +#endif diff --git a/kdebugdialog/main.cpp b/kdebugdialog/main.cpp new file mode 100644 index 000000000..e2309d586 --- /dev/null +++ b/kdebugdialog/main.cpp @@ -0,0 +1,124 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 David Faure + + 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 "kdebugdialog.h" +#include "klistdebugdialog.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +QStringList readAreaList() +{ + QStringList lst; + lst.append( "0 (generic)" ); + + QString confAreasFile = locate( "config", "kdebug.areas" ); + QFile file( confAreasFile ); + if (!file.open(IO_ReadOnly)) { + kdWarning() << "Couldn't open " << confAreasFile << endl; + file.close(); + } + else + { + QString data; + + QTextStream *ts = new QTextStream(&file); + ts->setEncoding( QTextStream::Latin1 ); + while (!ts->eof()) { + data = ts->readLine().simplifyWhiteSpace(); + + int pos = data.find("#"); + if ( pos != -1 ) + data.truncate( pos ); + + if (data.isEmpty()) + continue; + + lst.append( data ); + } + + delete ts; + file.close(); + } + + return lst; +} + +static KCmdLineOptions options[] = +{ + { "fullmode", I18N_NOOP("Show the fully-fledged dialog instead of the default list dialog"), 0 }, + { "on ", /*I18N_NOOP TODO*/ "Turn area on", 0 }, + { "off ", /*I18N_NOOP TODO*/ "Turn area off", 0 }, + KCmdLineLastOption +}; + +int main(int argc, char ** argv) +{ + KAboutData data( "kdebugdialog", I18N_NOOP( "KDebugDialog"), + "1.0", I18N_NOOP("A dialog box for setting preferences for debug output"), + KAboutData::License_GPL, "(c) 1999-2000, David Faure "); + data.addAuthor("David Faure", I18N_NOOP("Maintainer"), "faure@kde.org"); + KCmdLineArgs::init( argc, argv, &data ); + KCmdLineArgs::addCmdLineOptions( options ); + KUniqueApplication::addCmdLineOptions(); + KUniqueApplication app; + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + QStringList areaList ( readAreaList() ); + KAbstractDebugDialog * dialog; + if (args->isSet("fullmode")) + dialog = new KDebugDialog(areaList, 0L); + else + { + KListDebugDialog * listdialog = new KListDebugDialog(areaList, 0L); + if (args->isSet("on")) + { + listdialog->activateArea( args->getOption("on"), true ); + /*listdialog->save(); + listdialog->config()->sync(); + return 0;*/ + } else if ( args->isSet("off") ) + { + listdialog->activateArea( args->getOption("off"), false ); + /*listdialog->save(); + listdialog->config()->sync(); + return 0;*/ + } + dialog = listdialog; + } + + /* Show dialog */ + int nRet = dialog->exec(); + if( nRet == QDialog::Accepted ) + { + dialog->save(); + dialog->config()->sync(); + } + else + dialog->config()->rollback( true ); + + return 0; +} diff --git a/kdeeject/Makefile.am b/kdeeject/Makefile.am new file mode 100644 index 000000000..9c4e42c8d --- /dev/null +++ b/kdeeject/Makefile.am @@ -0,0 +1 @@ +bin_SCRIPTS = kdeeject diff --git a/kdeeject/kdeeject b/kdeeject/kdeeject new file mode 100755 index 000000000..1b55b73d4 --- /dev/null +++ b/kdeeject/kdeeject @@ -0,0 +1,40 @@ +#!/bin/sh +# Script used by kdesktop to eject a removable media (CDROM/Tape/SCSI/Floppy) +# Relies on the 'eject' program, 'cdcontrol' on *BSD +# +# Copyright GPL v2 by David Faure +# +if test $# -ge 1 -a "$1" != "--help"; then + quiet=0 + if test "$1" = "-q"; then + quiet=1 + shift + fi + # Checking for stuff in the PATH is ugly with sh. + # I guess this is the reason for making this a kde app... + OS=`uname -s` + case "$OS" in + OpenBSD) + cdio -f $1 eject >/dev/null 2>&1 + ;; + *BSD) + dev=`echo $1 | sed -E -e 's#/dev/##' -e 's/([0-9])./\1/'` + cdcontrol -f $dev eject >/dev/null 2>&1 + ;; + *) + # Warning, it has to be either eject 2.0.x or >=2.1.5 + # Otherwise it doesn't work as expected (it requires a + # fstab entry for no reason). + eject $1 >/dev/null 2>&1 + ;; + esac + if test $? -eq 0; then + dcop kdesktop default refreshIcons + exit 0 + elif test $quiet -eq 0; then + kdialog --title "KDE Eject" --error "Eject $1 failed!" + fi +else + kdialog --title "KDE Eject" --msgbox "Usage: $0 where name is a device or a mountpoint." +fi +exit 1 diff --git a/kdepasswd/LICENSE.readme b/kdepasswd/LICENSE.readme new file mode 100644 index 000000000..23b7877d0 --- /dev/null +++ b/kdepasswd/LICENSE.readme @@ -0,0 +1,124 @@ +kdepasswd - a KDE front end to passwd + +Copyright (c) 1999,2000 by Geert Jansen + + The "Artistic License" + + Preamble + + The intent of this document is to state the conditions under which a + Package may be copied, such that the Copyright Holder maintains some + semblance of artistic control over the development of the package, + while giving the users of the package the right to use and + distribute the Package in a more-or-less customary fashion, plus the + right to make reasonable modifications. + + Definitions: + + * "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + * "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes of + the Copyright Holder. + + * "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + * "You" is you, if you're thinking about copying or distributing + this Package. + + * "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people + involved, and so on. (You will not be required to justify it to + the Copyright Holder, but only to the computing community at + large as a market that must bear the fee.) + + * "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + + 1. You may make and give away verbatim copies of the source form of + the Standard Version of this Package without restriction, provided + that you duplicate all of the original copyright notices and + associated disclaimers. + + 2. You may apply bug fixes, portability fixes and other + modifications derived from the Public Domain or from the Copyright + Holder. A Package modified in such a way shall still be considered + the Standard Version. + + 3. You may otherwise modify your copy of this Package in any way, + provided that you insert a prominent notice in each changed file + stating how and when you changed that file, and provided that you do + at least ONE of the following: + + a) place your modifications in the Public Domain or + otherwise make them Freely Available, such as by posting + said modifications to Usenet or an equivalent medium, or + placing the modifications on a major archive site such as + ftp.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation + or organization. + + c) rename any non-standard executables so the names do not + conflict with standard executables, which must also be + provided, and provide a separate manual page for each + non-standard executable that clearly documents how it + differs from the Standard Version. + + d) make other distribution arrangements with the Copyright + Holder. + + 4. You may distribute the programs of this Package in object code or + executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and + library files, together with instructions (in the manual + page or equivalent) on where to get the Standard Version. + + b) accompany the distribution with the machine-readable + source of the Package with your modifications. + + c) accompany any non-standard executables with their + corresponding Standard Version executables, giving the + non-standard executables non-standard names, and clearly + documenting the differences in manual pages (or + equivalent), together with instructions on where to get + the Standard Version. + + d) make other distribution arrangements with the Copyright + Holder. + + 5. You may charge a reasonable copying fee for any distribution of + this Package. You may charge any fee you choose for support of this + Package. You may not charge a fee for this Package itself. However, + you may distribute this Package in aggregate with other (possibly + commercial) programs as part of a larger (possibly commercial) + software distribution provided that you do not advertise this + Package as a product of your own. + + 6. The scripts and library files supplied as input to or produced as + output from the programs of this Package do not automatically fall + under the copyright of this Package, but belong to whomever + generated them, and may be sold commercially, and may be aggregated + with this Package. + + 7. C or perl subroutines supplied by you and linked into this + Package shall not be considered part of this Package. + + 8. The name of the Copyright Holder may not be used to endorse or + promote products derived from this software without specific prior + written permission. + + 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End + + diff --git a/kdepasswd/Makefile.am b/kdepasswd/Makefile.am new file mode 100644 index 000000000..6653bbc27 --- /dev/null +++ b/kdepasswd/Makefile.am @@ -0,0 +1,17 @@ + +SUBDIRS = kcm + +bin_PROGRAMS = kdepasswd +kdepasswd_SOURCES = kdepasswd.cpp passwd.cpp passwddlg.cpp +kdepasswd_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kdepasswd_LDADD = $(LIB_KIO) + +METASOURCES = AUTO +AM_CPPFLAGS= -I$(top_srcdir)/libkonq $(all_includes) +noinst_HEADERS = passwd.h passwddlg.h + +xdg_apps_DATA = kdepasswd.desktop + +messages: + $(XGETTEXT) $(kdepasswd_SOURCES) -o $(podir)/kdepasswd.pot + diff --git a/kdepasswd/README b/kdepasswd/README new file mode 100644 index 000000000..50bbe54fd --- /dev/null +++ b/kdepasswd/README @@ -0,0 +1,3 @@ +kdepasswd: A KDE front end to the Unix passwd command. + +Please report bugs to Geert Jansen diff --git a/kdepasswd/kcm/Makefile.am b/kdepasswd/kcm/Makefile.am new file mode 100644 index 000000000..fee3b3cd2 --- /dev/null +++ b/kdepasswd/kcm/Makefile.am @@ -0,0 +1,20 @@ +SUBDIRS = pics +kde_module_LTLIBRARIES = kcm_useraccount.la +kcm_useraccount_la_SOURCES = main_widget.ui chfnprocess.cpp \ + main.cpp chfacedlg.cpp settings.kcfgc pass.kcfgc +kcm_useraccount_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_useraccount_la_LIBADD = $(top_builddir)/libkonq/libkonq.la + +AM_CPPFLAGS = -I$(top_srcdir)/libkonq $(all_includes) + +kde_kcfg_DATA = kcm_useraccount.kcfg kcm_useraccount_pass.kcfg + +METASOURCES = AUTO + +noinst_HEADERS = main.h chfnprocess.h chfacedlg.h + +xdg_apps_DATA = kcm_useraccount.desktop + + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/useraccount.pot diff --git a/kdepasswd/kcm/README b/kdepasswd/kcm/README new file mode 100644 index 000000000..563ce7e53 --- /dev/null +++ b/kdepasswd/kcm/README @@ -0,0 +1,27 @@ + +Thu Jan 29 00:34:49 CET 2004 +Frans Englich + +KCM useraccount is a merge of the former kdebase/kcontrol/email +and kdeutils/kdepasswd/userinfo/. They existed in KDE 3.1, at least. + +As a bonus, on top of saving the stuff with KEMailSettings it tries +also to save the realname to /etc/passwd. This is done via chfn, wrapped +in ChfnProcess, chfnprocess.h - which is the place to ifdef/modify so +other systems/ychfn/whatever works. +/etc/passwd is not the primary goal, the focus is on KDE's settings. The KCM +tries to hide the implementation differences and play nice with the +user - keep that in mind. + +The "face" term is rather scary.. For example I don't think the user immediately +associate to the login image when a phrase such as this is thrown in the face: +"Your administrator has disallowed changing your face". Keep it in mind.. + +Some information which was available in userinfo is left out - the home +folder and shell info. A typical user is not interested in the info nor +knows what it means. And the advanced users already knows it. + +If further information is added, think twice if it should not be +added in a "Details..." dialog - is it useful for the majority or not? +The SMTP setting as well as UID should be moved to that dialog too, IMO. + diff --git a/kdepasswd/kcm/chfacedlg.cpp b/kdepasswd/kcm/chfacedlg.cpp new file mode 100644 index 000000000..1894ac814 --- /dev/null +++ b/kdepasswd/kcm/chfacedlg.cpp @@ -0,0 +1,188 @@ +/** + * Copyright 2003 Braden MacDonald + * Copyright 2003 Ravikiran Rajagopal + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * + * + * Please see the README + * + */ + +/** + * @file UserInfo's Dialog for changing your face. + * @author Braden MacDonald + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "chfacedlg.h" +#include "settings.h" // KConfigXT + + + +/** + * TODO: It would be nice if the widget were in a .ui + */ +ChFaceDlg::ChFaceDlg(const QString& picsdir, QWidget *parent, const char *name, bool modal) + : KDialogBase( parent, name, modal, i18n("Change your Face"), Ok|Cancel, Ok, true ) +{ + QWidget *page = new QWidget(this); + setMainWidget( page ); + + QVBoxLayout *top = new QVBoxLayout(page, 0, spacingHint()); + + QLabel *header = new QLabel( i18n("Select a new face:"), page ); + top->addWidget( header ); + + m_FacesWidget = new KIconView( page ); + m_FacesWidget->setSelectionMode( QIconView::Single ); + m_FacesWidget->setItemsMovable( false ); + m_FacesWidget->setMinimumSize( 400, 200 ); + + connect( m_FacesWidget, SIGNAL( selectionChanged( QIconViewItem * ) ), SLOT( slotFaceWidgetSelectionChanged( QIconViewItem * ) ) ); + + connect( m_FacesWidget, SIGNAL( doubleClicked( QIconViewItem *, const QPoint & ) ), SLOT( slotOk() ) ); + + top->addWidget( m_FacesWidget ); + + // Buttons to get more pics + QHBoxLayout * morePics = new QHBoxLayout( 0, 0, spacingHint() ); + QPushButton *browseBtn = new QPushButton( i18n("Custom &Image..."), page ); + connect( browseBtn, SIGNAL( clicked() ), SLOT( slotGetCustomImage() ) ); + morePics->addWidget( browseBtn ); +#if 0 + QPushButton *acquireBtn = new QPushButton( i18n("&Acquire Image..."), page ); + acquireBtn->setEnabled( false ); + morePics->addWidget( acquireBtn ); +#endif + morePics->addStretch(); + top->addLayout( morePics ); + + // Filling the icon view + QDir facesDir( picsdir ); + if ( facesDir.exists() ) + { + QStringList picslist = facesDir.entryList( QDir::Files ); + for ( QStringList::Iterator it = picslist.begin(); it != picslist.end(); ++it ) + new QIconViewItem( m_FacesWidget, (*it).section(".",0,0), QPixmap( picsdir + *it ) ); + } + facesDir.setPath( KCFGUserAccount::userFaceDir() ); + if ( facesDir.exists() ) + { + QStringList picslist = facesDir.entryList( QDir::Files ); + for ( QStringList::Iterator it = picslist.begin(); it != picslist.end(); ++it ) + new QIconViewItem( m_FacesWidget, "/"+(*it) == KCFGUserAccount::customFaceFile() ? + i18n("(Custom)") : (*it).section(".",0,0), + QPixmap( KCFGUserAccount::userFaceDir() + *it ) ); + } + + m_FacesWidget->setResizeMode( QIconView::Adjust ); + //m_FacesWidget->setGridX( FACE_PIX_SIZE - 10 ); + m_FacesWidget->arrangeItemsInGrid(); + + enableButtonOK( false ); + //connect( this, SIGNAL( okClicked() ), SLOT( slotSaveCustomImage() ) ); + + resize( 420, 400 ); +} + +void ChFaceDlg::addCustomPixmap( QString imPath, bool saveCopy ) +{ + QImage pix( imPath ); + // TODO: save pix to TMPDIR/userinfo-tmp, + // then scale and copy *that* to ~/.faces + + if (pix.isNull()) + { + KMessageBox::sorry( this, i18n("There was an error loading the image.") ); + return; + } + if ( (pix.width() > KCFGUserAccount::faceSize()) + || (pix.height() > KCFGUserAccount::faceSize()) ) + pix = pix.scale( KCFGUserAccount::faceSize(), KCFGUserAccount::faceSize(), QImage::ScaleMin );// Should be no bigger than certain size. + + if ( saveCopy ) + { + // If we should save a copy: + QDir userfaces( KCFGUserAccount::userFaceDir() ); + if ( !userfaces.exists( ) ) + userfaces.mkdir( userfaces.absPath() ); + + pix.save( userfaces.absPath() + "/.userinfo-tmp" , "PNG" ); + KonqOperations::copy( this, KonqOperations::COPY, KURL::List( KURL( userfaces.absPath() + "/.userinfo-tmp" ) ), KURL( userfaces.absPath() + "/" + QFileInfo(imPath).fileName().section(".",0,0) ) ); +#if 0 + if ( !pix.save( userfaces.absPath() + "/" + imPath , "PNG" ) ) + KMessageBox::sorry(this, i18n("There was an error saving the image:\n%1").arg( userfaces.absPath() ) ); +#endif + } + + QIconViewItem* newface = new QIconViewItem( m_FacesWidget, QFileInfo(imPath).fileName().section(".",0,0) , pix ); + newface->setKey( KCFGUserAccount::customKey() );// Add custom items to end + m_FacesWidget->ensureItemVisible( newface ); + m_FacesWidget->setCurrentItem( newface ); +} + +void ChFaceDlg::slotGetCustomImage( ) +{ + QCheckBox* checkWidget = new QCheckBox( i18n("&Save copy in custom faces folder for future use"), 0 ); + + KFileDialog *dlg = new KFileDialog( QDir::homeDirPath(), KImageIO::pattern( KImageIO::Reading ), + this, 0, true, checkWidget); + + dlg->setOperationMode( KFileDialog::Opening ); + dlg->setCaption( i18n("Choose Image") ); + dlg->setMode( KFile::File | KFile::LocalOnly ); + + KImageFilePreview *ip = new KImageFilePreview( dlg ); + dlg->setPreviewWidget( ip ); + if (dlg->exec() == QDialog::Accepted) + addCustomPixmap( dlg->selectedFile(), checkWidget->isChecked() ); + // Because we give it a parent we have to close it ourselves. + dlg->close(true); +} + +#if 0 +void ChFaceDlg::slotSaveCustomImage() +{ + if ( m_FacesWidget->currentItem()->key() == USER_CUSTOM_KEY) + { + QDir userfaces( QDir::homeDirPath() + USER_FACES_DIR ); + if ( !userfaces.exists( ) ) + userfaces.mkdir( userfaces.absPath() ); + + if ( !m_FacesWidget->currentItem()->pixmap()->save( userfaces.absPath() + USER_CUSTOM_FILE , "PNG" ) ) + KMessageBox::sorry(this, i18n("There was an error saving the image:\n%1").arg( userfaces.absPath() ) ); + } +} +#endif + +#include "chfacedlg.moc" diff --git a/kdepasswd/kcm/chfacedlg.h b/kdepasswd/kcm/chfacedlg.h new file mode 100644 index 000000000..1802ccd92 --- /dev/null +++ b/kdepasswd/kcm/chfacedlg.h @@ -0,0 +1,69 @@ +/** + * Copyright 2003 Braden MacDonald + * Copyright 2003 Ravikiran Rajagopal + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * + * + * Please see the README + * + */ + +/** + * @file UserInfo-chface: Dialog for choosing a new face for your user. + * @author Braden MacDonald + */ + +#ifndef CHFACEDLG_H +#define CHFACEDLG_H + +#include + +#include // declaration below + +enum FacePerm { adminOnly = 1, adminFirst = 2, userFirst = 3, userOnly = 4}; + +class KDialogBase; + +class ChFaceDlg : public KDialogBase +{ + Q_OBJECT +public: + + + ChFaceDlg(const QString& picsdirs, QWidget *parent=0, const char *name=0, bool modal=true); + + + QPixmap getFaceImage() const + { + if(m_FacesWidget->currentItem()) + return *(m_FacesWidget->currentItem()->pixmap()); + else + return QPixmap(); + } + +private slots: + void slotFaceWidgetSelectionChanged( QIconViewItem *item ) + { enableButtonOK( !item->pixmap()->isNull() ); } + + void slotGetCustomImage(); + //void slotSaveCustomImage(); + +private: + void addCustomPixmap( QString imPath, bool saveCopy ); + + KIconView *m_FacesWidget; +}; + +#endif // CHFACEDLG_H diff --git a/kdepasswd/kcm/chfnprocess.cpp b/kdepasswd/kcm/chfnprocess.cpp new file mode 100644 index 000000000..ec39a152a --- /dev/null +++ b/kdepasswd/kcm/chfnprocess.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright 2003 Braden MacDonald * + * Copyright 2003 Ravikiran Rajagopal * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License (version 2) as * + * published by the Free Software Foundation. * + * * + ***************************************************************************/ + +/** + * @file Change a user's 'finger' information, specifically their full name. + * derived from kdepasswd. + */ + +#include +#include + +#include + +#include +#include +#include +#include "chfnprocess.h" + + +int ChfnProcess::exec(const char *pass, const char *name) +{ + // Try to set the default locale to make the parsing of the output + // of `chfn' easier. + putenv((char*)"LC_ALL=C"); + + QCStringList args; + args += "-f"; + args += name; + int ret = PtyProcess::exec("chfn", args); + if (ret < 0) + return ChfnNotFound; + + ret = ConverseChfn(pass); + + waitForChild(); + return ret; +} + + +/* + * The actual work. + * Return values: -1 = unknown error, 0 = ok, >0 = error code. + */ +int ChfnProcess::ConverseChfn(const char *pass) +{ + int status=-1; + + QCString line; + while(1) + { + line = readLine(); + + if ( line.isEmpty() ) + continue;// discard line + + if ( line.contains( "Password: " )/*isPrompt( line, "password" )*/ ) + { + WaitSlave(); + write(m_Fd, pass, strlen(pass)); + write(m_Fd, "\n", 1); + } + + line = readLine(); // Let's see what the outcome was + + if ( line.contains( "Changing finger info" ) ) + { + // do nothing + } + else if ( line.contains( "information changed" ) ) + { + status=0; + break; + } + else if ( line.isEmpty() ) + { + status=0; + break; + } + else if ( line.contains( "Password error" ) || line.contains("Incorrect password") ) + { + status=PasswordError; + break; + } + else + { + status=MiscError; + m_Error=line; + break; + } + } + return status; +} + diff --git a/kdepasswd/kcm/chfnprocess.h b/kdepasswd/kcm/chfnprocess.h new file mode 100644 index 000000000..f8bb4e0cf --- /dev/null +++ b/kdepasswd/kcm/chfnprocess.h @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright 2003 Braden MacDonald * + * Copyright 2003 Ravikiran Rajagopal * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License (version 2) as * + * published by the Free Software Foundation. * + * * + ***************************************************************************/ + +#ifndef CHFNPROC_H +#define CHFNPROC_H + +#include +#include + +class ChfnProcess : public PtyProcess +{ +public: + + enum Errors { ChfnNotFound=1, PasswordError=2, MiscError=3 }; + + int exec(const char *pass, const char *name); + + QCString error() { return m_Error; } + +private: + int ConverseChfn(const char *pass); + + QCString m_Error; +}; + +#endif diff --git a/kdepasswd/kcm/kcm_useraccount.desktop b/kdepasswd/kcm/kcm_useraccount.desktop new file mode 100644 index 000000000..cd7064225 --- /dev/null +++ b/kdepasswd/kcm/kcm_useraccount.desktop @@ -0,0 +1,203 @@ +[Desktop Entry] +Icon=personal +Categories=Qt;KDE;X-KDE-settings-security; +X-KDE-ParentApp=kcontrol +X-KDE-Library=useraccount +Type=Application +Exec=kcmshell kcm_useraccount +Name=Password & User Account +Name[af]=Gebruiker rekening en Wagwoord +Name[ar]=كلمة المرور و حساب المستخدم +Name[be]=Пароль і ўліковы запіс карыстальніка +Name[bg]=Потребител +Name[bn]=পাসওয়ার্ড এবং ব্যবহারকারী অ্যাকাউন্ট +Name[br]=Tremenger ha gont an arveriad +Name[bs]=Šifra i korisnički račun +Name[ca]=Contrasenya i compte d'usuari +Name[cs]=Heslo a uživatelský účet +Name[csb]=Parola ë kònto brëkòwnika +Name[cy]=Cyfrinair a Chyfrif Defnyddiwr +Name[da]=Kodeord og brugerkonto +Name[de]=Passwort & Benutzerzugang +Name[el]=Κωδικός πρόσβασης & Πληροφορίες χρήστη +Name[eo]=Pasvorto kaj uzanta konto +Name[es]=Contraseña y cuenta de usuario +Name[et]=Parool ja kasutaja konto +Name[eu]=Pasahitza eta erabiltzaile kontua +Name[fa]=اسم رمز و حساب کاربری +Name[fi]=Salasanat ja käyttäjätilit +Name[fr]=Compte utilisateur et mot de passe +Name[fy]=Wachtwurd en brûkersbehear +Name[ga]=Focal Faire & Cuntas Úsáideora +Name[gl]=Contrasinal e Conta de Usuario +Name[he]=ססמה ומידע על החשבון משתמש +Name[hi]=पासवर्ड तथा उपयोक्ता खाता +Name[hr]=Lozinka i korisnički nalozi +Name[hu]=Név és jelszó +Name[is]=Lykilorð og notandaaðgangur +Name[it]=Password e account utente +Name[ja]=パスワード & ユーザアカウント +Name[ka]=მომხმარებლის ანგარიშები და პაროლები +Name[kk]=Пароль мен тіркелгі +Name[km]=ពាក្យ​សម្ងាត់ & គណនី​អ្នក​ប្រើ +Name[ko]=비밀번호와 사용자 계정 +Name[lt]=Slaptažodis ir naudotojo paskyra +Name[lv]=Paroles un lietotāju konti +Name[mk]=Лозинка и корисничка сметка +Name[ms]=Kata Laluan & Akaun Pengguna +Name[mt]=Password u kont tal-user +Name[nb]=Passord og brukerkonto +Name[nds]=Passwoort & Brukerkonto +Name[ne]=पासवर्ड र प्रयोगकर्ता खाता +Name[nl]=Wachtwoord en gebruikerbeheer +Name[nn]=Passord og brukarkonto +Name[pa]=ਉਪਭੋਗੀ ਖਾਤਾ ਅਤੇ ਗੁਪਤ-ਕੋਡ +Name[pl]=Hasło i konto użytkownika +Name[pt]=Senha e Conta do Utilizador +Name[pt_BR]=Senha & Conta do Usuário +Name[ro]=Parolă și cont utilizator +Name[ru]=Профиль пользователя +Name[rw]=Ijambobanga & Konti Ukoresha +Name[se]=Beassansánit ja geavaheaddjekontut +Name[sk]=Heslo a účet +Name[sl]=Geslo in uporabniški račun +Name[sr]=Лозинка и кориснички налог +Name[sr@Latn]=Lozinka i korisnički nalog +Name[sv]=Lösenord och användarkonto +Name[ta]=கடவுச்சொல் & பயனர் கணக்கு +Name[te]=పాస్ వర్డ్ & యూజర్ ఖాతా +Name[tg]=Гузарвожа ва номи истифодакунанда +Name[th]=รหัสผ่านและบัญชีผู้ใช้ +Name[tr]=Parola ve Kullanıcı Hesabı +Name[tt]=Sersüz & Qullanuçı Xisabı +Name[uk]=Пароль і рахунок користувача +Name[uz]=Maxfiy soʻz va foydalanuvchi hisobi +Name[uz@cyrillic]=Махфий сўз ва фойдаланувчи ҳисоби +Name[vi]=Mật khẩu & Tài khoản Người dùng +Name[wa]=Sicret et conte uzeu +Name[zh_CN]=密码和用户信息 +Name[zh_TW]=密碼與帳號資訊 +Keywords=password,email,name,organization,realname,login image,face,echo mode +Keywords[ar]=كلمة المرور,البريد الإلكتروني,الإسم,المنظمة/الشركة,الإسم الحقيقي,صورة تسجيل الدخول,الوجه,نمط الصدى +Keywords[be]=Пароль,Электроннай пошта,Імя,Назва,Арганізацыя,Сапраўднае імя,Твар,Малюнак уваходу,password,email,name,organization,realname,login image,face,echo mode +Keywords[bg]=парола, е-поща, организация, сметка, потребител, вход, включване, password, email, name, organization, realname, login image, face, echo mode +Keywords[bs]=password,email,name,organization,realname,login image,face,echo mode,šifra,e-mail,ime,organizacija,pravo ime,stvarno ime,slika,lice +Keywords[ca]=contrasenya,correu,nom,organització,nom real,imatge de connexió,aspecte,mode d'eco +Keywords[cs]=heslo,email,jméno,organizace,přihlašovací obrázek,režim odezvy +Keywords[csb]=parola,e-maila,miono,nôzwëskò,òrganizacëjô,logòwanié,brëkòwnik,miono brëkòwnika,òbrôzk,skarń,gwiôzdczi,wëskrzëniwanié parolów +Keywords[da]=kodeord,email,e-mail,organisation,rigtigt navn,login-billede,hoved, ekkotilstand +Keywords[de]=Passwort,E-Mail,Name,Organisation,Tatsächlicher Name,Login,Anmeldebild,Bild,Echomodus +Keywords[el]=κωδικός πρόσβασης;email;όνομα;οργανισμός;πραγματικό όνομα;εικόνα σύνδεσης;πρόσωπο; τρόπος εμφάνισης +Keywords[en_GB]=password,email,name,organisation,realname,login image,face,echo mode +Keywords[eo]=pasvorto,retpoŝto,nomo,organizaĵo,realnomo,salutbildo,vizaĝo,eĥo moduso +Keywords[es]=contraseña;correo electrónico;nombre;organización;nombre real;imagen de acceso;cara;modo de eco +Keywords[et]=parool;email;nimi;organisatsioon;pärisnimi;kasutaja pilt;nägu; echo režiim +Keywords[eu]=pasahitza;helb-elek;izena;erakundea;benetako izena;sarrerako irudia,aurpegia,echo modua +Keywords[fa]=اسم رمز، رایانامه، نام، سازمان، نام واقعی، تصویر ورود، چهره، حالت پژواک +Keywords[fi]=salasana,sähköposti,nimi,organisaatio,oikea nimi,kirjautumiskuva,naama,kaiutustilanus,kaiutustapa +Keywords[fr]=mot de passe,email,courrier électronique,adresse électronique,organisation,non complet,image d'identification,mode d'affichage,face +Keywords[fy]=wachtwoord,wachtwurd,e-mail,e-post,organisatie,organisaasje,naam,namme,login,aanmelden,oanmelde,afbeelding,ôfbyldings,gezicht,echo,asterisk +Keywords[ga]=focal faire,ríomhphost,ainm,eagras,fíorainm,íomhá logála isteach,aghaidh,mód macalla +Keywords[gl]=contrasinal,correo-e,nome,organización,nome real,imaxe de início,cara, modo eco +Keywords[he]=ססמאות, דוא"ל, שם, ארגון, שם אמתי,תמונת כניסה, מצב echo, password,email,name,organization,realname,login image,face,echo mode +Keywords[hr]=password,email,name,organization,realname,login image,face,echo mode,lozinka,e-pošta,naziv,ime,organizacija,pravo ime,slika prijave,lice,odzivnik +Keywords[hu]=jelszó,e-mail,név,szervezet,valódi név,bejelentkezési kép,arc,kiírási mód +Keywords[it]=password,email,nome,organizzazione,nome vero,immagine login,icona login,immagine accesso,faccia,modo echo +Keywords[ja]=パスワード;Eメール;名前;組織;本名;ログイン画像;顔;エコーモード +Keywords[km]=ពាក្យ​សម្ងាត់; អ៊ីមែល; ឈ្មោះ; អង្គការ; ឈ្មោះ​ពិត; រូបភាព​ពេល​ចូល; មុខ; របៀបបង្ហាញ +Keywords[lt]=password,email,name,organization,realname,login image,face,echo mode,slaptažodis,e. paštas,el.paštas,vardas,organizacija,tikrasis vardas,veidas +Keywords[mk]=password,email,name,organization,realname,login,image,face,echo mode,лозинка,е-пошта,електронска пошта,име,организација,вистинско име,слика за најава,лице +Keywords[nb]=passord,e-post,navn,organisasjon,fullt navn,innloggingsbilde,ansikt,ekkomodus +Keywords[nds]=Passwoort,EMail,Nettpost,Nettbreef,Organisatschoon,Naam,echte Naam,Anmellenbild,Loginbild,Gesicht,Echometood +Keywords[ne]=पासवर्ड, इमेल, नाम, सङ्गठन, वास्तविकनाम, लागइन छवि, मोहडा, प्रतिध्वनि मोड +Keywords[nl]=wachtwoord,e-mail,organisatie,naam,login,aanmelden,afbeelding,gezicht,echo,asterisk +Keywords[nn]=passord;e-post;namn;organisasjon;fullt namn;innloggingsbilete;fjes;ekkomodus +Keywords[pa]=ਗੁਪਤ-ਕੋਡ,ਈ-ਮੇਲ,ਨਾਂ,ਸੰਗਠਨ,ਅਸਲੀ ਨਾਂ,login image,face,echo mode +Keywords[pl]=hasło,e-mail,imię,nazwisko,organizacja,login,użytkownik,nazwa użytkownika,obrazek,twarz,gwiazdki,pokazywanie haseł +Keywords[pt]=senha,e-mail,nome,organização,nome real,imagem de ligação,cara,modo de eco +Keywords[pt_BR]=senha,e-mail,nome,organização,nome real,imagem de login,aparência,modo de ecoar +Keywords[ro]=parolă,email,nume,organizație,nume real,imagine de logare,față,mod ecou +Keywords[ru]=password,email,name,organization,realname,login image,face,echo mode,пароль,имя,организация,электронная почта +Keywords[se]=beassansátni,e-boasta,namma,organisašuvdna,olles namma,sisačálihangovva,amadádju,skájahanmodus +Keywords[sl]=geslo;e-pošta;ime;organizacija;pravo ime;slika prijave;prijavna slika,obraz;način odmeva +Keywords[sr]=password,email,name,organization,realname,login image,face,echo mode,лозинка,е-пошта,име,организација,ехо,режим,лице +Keywords[sr@Latn]=password,email,name,organization,realname,login image,face,echo mode,lozinka,e-pošta,ime,organizacija,eho,režim,lice +Keywords[sv]=lösenord;e-post;namn;organisation;verkligt namn;inloggningsbild;bild;ekoläge +Keywords[th]=รหัสผ่าน, อีเมล,ชื่อ,องค์กร,ชื่อจริง,ภาพสำหรับล็อกอิน,ใบหน้า,โหมดแสดงอักษร +Keywords[tr]=parola,e-posta,isim,gerçek isim,giriş resmi,yüz +Keywords[uk]=пароль,адреса електронної пошти,організація,ім'я,фотографія,зображення +Keywords[uz]=maxfiy soʻz,elektron pochta,foydalanuvchi,haqiqiy ismi,nishoncha,tashkilot, echo mode +Keywords[uz@cyrillic]=махфий сўз,электрон почта,фойдаланувчи,ҳақиқий исми,нишонча,ташкилот, echo mode +Keywords[vi]=mật khẩu,email,tên,cơ quan,tên thật,hình đăng nhập,mặt cười,chế độ báo lại +Keywords[wa]=sicret,motd di passe,emile,no,soce,vray no,imådje d' elodjaedje,face,tiesse,echo mode,mode echo +Keywords[zh_CN]=password,email,name,organization,realname,login image,face,echo mode,密码,电子邮件,姓名,组织,真实姓名,登陆图像,头像,回显 +Keywords[zh_TW]=password,email,name,organization,realname,login image,face,echo mode,密碼,電子郵件,組織,真名,登入圖片,面貌,回音模式 +Comment=User information such as password, name and email +Comment[af]=Gebruiker informasie, soos naam, wagwoord en e-pos +Comment[ar]=معلومات عن المستخدم مثل كلمة المرور ، الإسم و عنوان البريد الإلكتروني +Comment[be]=Інфармацыя аб карыстальніку, напр. пароль, імя і электронны адрас +Comment[bg]=Настройване на потребителската сметка, паролата, името и е-пощата +Comment[bn]=ব্যবহারকারী তথ্য, যথা পাসওয়ার্ড, নাম এবং ই-মেইল +Comment[br]=Titouroù diwar-benn an arveriad (tremenger, anv, chomlec'h postel) +Comment[bs]=Informacije o korisniku kao što su šifra, ime i e-mail +Comment[ca]=Informació de l'usuari com ara contrasenya, nom i correu +Comment[cs]=Informace o uživateli, jako heslo, jméno nebo email +Comment[csb]=Wëdowiédzô ò kònce brëkòwnika: parola, miono ë nôzwëskò, e-maila ëtd. +Comment[cy]=Gwybodaeth ddefnyddiwr fel cyfrinair, enw ac ebost +Comment[da]=Brugerinformation såsom kodeord, navn og e-mail +Comment[de]=Benutzerinformation wie Passwort, Name, E-Mail-Adresse +Comment[el]=Πληροφορίες χρήστη όπως ο κωδικός πρόσβασης, το όνομα και το email +Comment[eo]=Uzantaj informoj kiel pasvorto, nomo kaj retpoŝto +Comment[es]=Información del usuario como la contraseña, el nombre o el correo electrónico +Comment[et]=Kasutajainfo, nt. parool, nimi ja e-posti aadress +Comment[eu]=Erabiltzaileari buruzko informazioa; pasahitza, izena eta posta-helbidea, adibidez. +Comment[fa]=استفاده از اطلاعاتی نظیر اسم رمز، نام و رایانامه +Comment[fi]=Käyttäjien tiedot, kuten salasanat, nimet ja sähköpostiosoite +Comment[fr]=Informations sur l'utilisateur, comme le mot de passe, le nom, et l'adresse électronique +Comment[fy]=Brûkersynformaasje sa as wachtwurd, namme en e-adres +Comment[gl]=Información do usuario como contrasinal, nome e correo-e +Comment[he]=מידע אישי כגון ססמה, שם וכתובת דוא"ל +Comment[hi]=उपयोक्ता जानकारी जैसे कि पासवर्ड, नाम तथा ई-मेल +Comment[hr]=Korisnički podaci poput lozinke, imena i e-pošte +Comment[hu]=A felhasználójellemzők, például az e-mail cím vagy a jelszó beállítása +Comment[is]=Upplýsingar um notandann eins og til dæmis póstfang, lykilorð og nafn +Comment[it]=Informazioni utente come password, nome ed email +Comment[ja]=パスワード、名前、Eメールなどのユーザ情報 +Comment[ka]=ცნობები მომხმარებლების შესახებ, როგორიცაა პაროლი, სახელი და ელ-ფოსტა +Comment[kk]=Паролі, аты және эл.пошта адресі секілді пайдаланушының мәліметі +Comment[km]=ព័ត៌មាន​អ្នក​ប្រើ​ដូចជា ពាក្យ​សម្ងាត់,ឈ្មោះ និង​អ៊ីមែល +Comment[ko]=비밀번호, 이름, 전자우편 주소 같은 개인 정보 +Comment[lt]=Naudotojo informacija, tokia, kaip slaptažodis, vardas ir e. pašto adresas +Comment[lv]=Lietotāja informācija kā parole, vārds un e-pasts +Comment[mk]=Кориснички информации како лозинка, име и е-пошта +Comment[ms]=Maklumat pengguna seperti kata laluan, nama dan e-mel +Comment[mt]=Informazzjoni dwar il-user, bħal isem, password u email +Comment[nb]=Brukerinformasjon som passord, navn og e-postadresse +Comment[nds]=Brukerinformatschonen, as t.B. Passwoort, Naam un Nettpostadress +Comment[ne]=पासवर्ड, नाम, र इमेल जस्तो प्रयोगकर्ता सूचना +Comment[nl]=Gebruikerinformatie zoals wachtwoord, naam en e-mailadres +Comment[nn]=Brukarinformasjon som passord, namn og e-postadresse +Comment[pa]=ਉਪਭੋਗੀ ਜਾਣਕਾਰੀ ਜਿਵੇਂ ਕਿ ਗੁਪਤ-ਕੋਡ, ਨਾਂ ਅਤੇ ਈ-ਮੇਲ +Comment[pl]=Informacje o koncie użytkownika: hasło, imię i nazwisko, e-mail itd. +Comment[pt]=Informações do utilizador, como a senha, o nome e o e-mail +Comment[pt_BR]=Informações do usuário tais como senha, nome e e-mail +Comment[ro]=Informații despre utilizator, precum parola, numele și adresa de e-mail +Comment[ru]=Сведения о пользователе, такие как пароль, имя и e-mail +Comment[rw]=Amakuru y'ukoresha nk'ijambobanga,izina na imeli +Comment[se]=Geavaheaddjedieđut nugo beassansátni, namma ja e-boasta +Comment[sk]=Informácie o používateľovi, ako heslo, meno a e-mail +Comment[sl]=Uporabniške informacije, kot so geslo, ime in e-pošta +Comment[sr]=Информације о кориснику као што је лозинка, име и е-пошта +Comment[sr@Latn]=Informacije o korisniku kao što je lozinka, ime i e-pošta +Comment[sv]=Användarinformation som lösenord, namn och e-post +Comment[ta]=பயனர் தகவல் கடவுச்சொல்லைப் போல, பெயர் மற்றும் மிண்ணஞ்சல் +Comment[th]=ข้อมูลของผู้ใช้ เช่น รหัสผ่าน, ชื่อ และอีเมล +Comment[tr]=Parola, isim ve e-posta gibi kullanıcı bilgisi +Comment[tt]=Qullanuçı caylawı: sersüz, isem, email kebek närsälär +Comment[uk]=Інформація про користувача така як: пароль, ім'я та адреса електронної пошти +Comment[uz]=Foydalanuvchining ismi, maxfiy soʻzi va elektron pochtasi kabi maʼlumot +Comment[uz@cyrillic]=Фойдаланувчининг исми, махфий сўзи ва электрон почтаси каби маълумот +Comment[vi]=Thông tin về người dùng như mật khẩu, tên và email +Comment[wa]=Informåcion d' uzeus come les sicrets, nos et emiles +Comment[zh_CN]=像密码、姓名和电子邮件这样的用户信息 +Comment[zh_TW]=使用者資訊如密碼、名稱和電子郵件 diff --git a/kdepasswd/kcm/kcm_useraccount.kcfg b/kdepasswd/kcm/kcm_useraccount.kcfg new file mode 100644 index 000000000..7f52bff9a --- /dev/null +++ b/kdepasswd/kcm/kcm_useraccount.kcfg @@ -0,0 +1,44 @@ + + + kglobal.h + kstandarddirs.h + + + + + KGlobal::dirs()->resourceDirs("data").last() + "kdm/faces" + '/' + + + + $HOME/.faces/ + + + PreferAdmin + + + + + 64 + + + + .default.face.icon + + + + Custom.png + + + + $HOME/.face.icon + + + + Zz_custom + + + diff --git a/kdepasswd/kcm/kcm_useraccount_pass.kcfg b/kdepasswd/kcm/kcm_useraccount_pass.kcfg new file mode 100644 index 000000000..c76e4a657 --- /dev/null +++ b/kdepasswd/kcm/kcm_useraccount_pass.kcfg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + OneStar + + + diff --git a/kdepasswd/kcm/main.cpp b/kdepasswd/kcm/main.cpp new file mode 100644 index 000000000..d49304484 --- /dev/null +++ b/kdepasswd/kcm/main.cpp @@ -0,0 +1,344 @@ + +/** + * Copyright (C) 2004 Frans Englich + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * + * + * Please see the README + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" +#include "pass.h" +#include "chfnprocess.h" +#include "chfacedlg.h" +#include "main.h" + +typedef KGenericFactory Factory; +K_EXPORT_COMPONENT_FACTORY( kcm_useraccount, Factory("useraccount") ) + +KCMUserAccount::KCMUserAccount( QWidget *parent, const char *name, + const QStringList &) + : KCModule( parent, name) +{ + QVBoxLayout *topLayout = new QVBoxLayout(this); + _mw = new MainWidget(this); + topLayout->addWidget( _mw ); + + connect( _mw->btnChangeFace, SIGNAL(clicked()), SLOT(slotFaceButtonClicked())); + connect( _mw->btnChangePassword, SIGNAL(clicked()), SLOT(slotChangePassword())); + _mw->btnChangePassword->setGuiItem( KGuiItem( i18n("Change &Password..."), "password" )); + + connect( _mw->leRealname, SIGNAL(textChanged(const QString&)), SLOT(changed())); + connect( _mw->leOrganization, SIGNAL(textChanged(const QString&)), SLOT(changed())); + connect( _mw->leEmail, SIGNAL(textChanged(const QString&)), SLOT(changed())); + connect( _mw->leSMTP, SIGNAL(textChanged(const QString&)), SLOT(changed())); + + _ku = new KUser(); + _kes = new KEMailSettings(); + + _mw->lblUsername->setText( _ku->loginName() ); + _mw->lblUID->setText( QString().number(_ku->uid()) ); + + KAboutData *about = new KAboutData(I18N_NOOP("kcm_useraccount"), + I18N_NOOP("Password & User Information"), 0, 0, + KAboutData::License_GPL, + I18N_NOOP("(C) 2002, Braden MacDonald, " + "(C) 2004 Ravikiran Rajagopal")); + + about->addAuthor("Frans Englich", I18N_NOOP("Maintainer"), "frans.englich@telia.com"); + about->addAuthor("Ravikiran Rajagopal", 0, "ravi@kde.org"); + about->addAuthor("Michael H\303\244ckel", "haeckel@kde.org" ); + + about->addAuthor("Braden MacDonald", I18N_NOOP("Face editor"), "bradenm_k@shaw.ca"); + about->addAuthor("Geert Jansen", I18N_NOOP("Password changer"), "jansen@kde.org", + "http://www.stack.nl/~geertj/"); + about->addAuthor("Daniel Molkentin"); + about->addAuthor("Alex Zepeda"); + about->addAuthor("Hans Karlsson", I18N_NOOP("Icons"), "karlsson.h@home.se"); + about->addAuthor("Hermann Thomas", I18N_NOOP("Icons"), "h.thomas@gmx.de"); + setAboutData(about); + + setQuickHelp( i18n("Here you can change your personal information, which " + "will be used in mail programs and word processors, for example. You can " + "change your login password by clicking Change Password.") ); + + addConfig( KCFGPassword::self(), this ); + load(); +} + +void KCMUserAccount::slotChangePassword() +{ + KProcess *proc = new KProcess; + QString bin = KGlobal::dirs()->findExe("kdepasswd"); + if ( !bin ) + { + kdDebug() << "kcm_useraccount: kdepasswd was not found." << endl; + KMessageBox::sorry ( this, i18n( "A program error occurred: the internal " + "program 'kdepasswd' could not be found. You will " + "not be able to change your password.")); + + _mw->btnChangePassword->setEnabled(false); + delete proc; + return; + } + + *proc << bin << _ku->loginName() ; + proc->start(KProcess::DontCare); + + delete proc; + +} + + +KCMUserAccount::~KCMUserAccount() +{ + delete _ku; + delete _kes; +} + +void KCMUserAccount::load() +{ + _mw->lblUsername->setText(_ku->loginName()); + + _kes->setProfile(_kes->defaultProfileName()); + + _mw->leRealname->setText( _kes->getSetting( KEMailSettings::RealName )); + _mw->leEmail->setText( _kes->getSetting( KEMailSettings::EmailAddress )); + _mw->leOrganization->setText( _kes->getSetting( KEMailSettings::Organization )); + _mw->leSMTP->setText( _kes->getSetting( KEMailSettings::OutServer )); + + QString _userPicsDir = KCFGUserAccount::faceDir() + + KGlobal::dirs()->resourceDirs("data").last() + "kdm/faces/"; + + QString fs = KCFGUserAccount::faceSource(); + if (fs == QString::fromLatin1("UserOnly")) + _facePerm = userOnly; + else if (fs == QString::fromLatin1("PreferUser")) + _facePerm = userFirst; + else if (fs == QString::fromLatin1("PreferAdmin")) + _facePerm = adminFirst; + else + _facePerm = adminOnly; // Admin Only + + if ( _facePerm == adminFirst ) + { // If the administrator's choice takes preference + _facePixmap = QPixmap( _userPicsDir + _ku->loginName() + ".face.icon" ); + + if ( _facePixmap.isNull() ) + _facePerm = userFirst; + else + _mw->btnChangeFace->setPixmap( _facePixmap ); + } + + if ( _facePerm >= userFirst ) + { + // If the user's choice takes preference + _facePixmap = QPixmap( KCFGUserAccount::faceFile() ); + + // The user has no face, should we check for the admin's setting? + if ( _facePixmap.isNull() && _facePerm == userFirst ) + _facePixmap = QPixmap( _userPicsDir + _ku->loginName() + ".face.icon" ); + + if ( _facePixmap.isNull() ) + _facePixmap = QPixmap( _userPicsDir + KCFGUserAccount::defaultFile() ); + + _mw->btnChangeFace->setPixmap( _facePixmap ); + } + else if ( _facePerm <= adminOnly ) + { + // Admin only + _facePixmap = QPixmap( _userPicsDir + _ku->loginName() + ".face.icon" ); + if ( _facePixmap.isNull() ) + _facePixmap = QPixmap( _userPicsDir + KCFGUserAccount::defaultFile() ); + _mw->btnChangeFace->setPixmap( _facePixmap ); + } + + KCModule::load(); /* KConfigXT */ + +} + +void KCMUserAccount::save() +{ + KCModule::save(); /* KConfigXT */ + + /* Save KDE's homebrewn settings */ + _kes->setSetting( KEMailSettings::RealName, _mw->leRealname->text() ); + _kes->setSetting( KEMailSettings::EmailAddress, _mw->leEmail->text() ); + _kes->setSetting( KEMailSettings::Organization, _mw->leOrganization->text() ); + _kes->setSetting( KEMailSettings::OutServer, _mw->leSMTP->text() ); + + /* Save realname to /etc/passwd */ + if ( _mw->leRealname->isModified() ) + { + QCString password; + int ret = KPasswordDialog::getPassword( password, i18n("Please enter " + "your password in order to save your settings:")); + + if ( !ret ) + { + KMessageBox::sorry( this, i18n("You must enter " + "your password in order to change your information.")); + return; + } + + ChfnProcess *proc = new ChfnProcess(); + ret = proc->exec(password, _mw->leRealname->text().ascii() ); + if ( ret ) + { + if ( ret == ChfnProcess::PasswordError ) + KMessageBox::sorry( this, i18n("You must enter a correct password.")); + + else + { + KMessageBox::sorry( this, i18n("An error occurred and your password has " + "probably not been changed. The error " + "message was:\n%1").arg(proc->error())); + kdDebug() << "ChfnProcess->exec() failed. Error code: " << ret + << "\nOutput:" << proc->error() << endl; + } + } + + delete proc; + } + + /* Save the image */ + if( !_facePixmap.save( KCFGUserAccount::faceFile(), "PNG" )) + KMessageBox::error( this, i18n("There was an error saving the image: %1" ).arg( + KCFGUserAccount::faceFile()) ); + +} + +void KCMUserAccount::changeFace(const QPixmap &pix) +{ + if ( _facePerm < userFirst ) + return; // If the user isn't allowed to change their face, don't! + + if ( pix.isNull() ) { + KMessageBox::sorry( this, i18n("There was an error loading the image.") ); + return; + } + + _facePixmap = pix; + _mw->btnChangeFace->setPixmap( _facePixmap ); + emit changed( true ); +} + +void KCMUserAccount::slotFaceButtonClicked() +{ + if ( _facePerm < userFirst ) + { + KMessageBox::sorry( this, i18n("Your administrator has disallowed changing your image.") ); + return; + } + + ChFaceDlg* pDlg = new ChFaceDlg( KGlobal::dirs()->resourceDirs("data").last() + + "/kdm/pics/users/" ); + + if ( pDlg->exec() == QDialog::Accepted && !pDlg->getFaceImage().isNull() ) + changeFace( pDlg->getFaceImage() ); + + delete pDlg; +} + +/** + * I merged faceButtonDropEvent into this /Frans + * The function was called after checking event type and + * the code is now below that if statement + */ +bool KCMUserAccount::eventFilter(QObject *, QEvent *e) +{ + if (e->type() == QEvent::DragEnter) + { + QDragEnterEvent *ee = (QDragEnterEvent *) e; + ee->accept( KURLDrag::canDecode(ee) ); + return true; + } + + if (e->type() == QEvent::Drop) + { + if ( _facePerm < userFirst ) + { + KMessageBox::sorry( this, i18n("Your administrator " + "has disallowed changing your image.") ); + return true; + } + + KURL *url = decodeImgDrop( (QDropEvent *) e, this); + if (url) + { + QString pixPath; + KIO::NetAccess::download(*url, pixPath, this); + changeFace( QPixmap( pixPath ) ); + KIO::NetAccess::removeTempFile(pixPath); + delete url; + } + return true; + } + return false; +} + +inline KURL *KCMUserAccount::decodeImgDrop(QDropEvent *e, QWidget *wdg) +{ + KURL::List uris; + + if (KURLDrag::decode(e, uris) && (uris.count() > 0)) + { + KURL *url = new KURL(uris.first()); + + KImageIO::registerFormats(); + if( KImageIO::canRead(KImageIO::type(url->fileName())) ) + return url; + + QStringList qs = QStringList::split('\n', KImageIO::pattern()); + qs.remove(qs.begin()); + + QString msg = i18n( "%1 does not appear to be an image file.\n" + "Please use files with these extensions:\n" + "%2").arg(url->fileName()).arg(qs.join("\n")); + KMessageBox::sorry( wdg, msg); + delete url; + } + return 0; +} + +#include "main.moc" + diff --git a/kdepasswd/kcm/main.h b/kdepasswd/kcm/main.h new file mode 100644 index 000000000..2ee475bc9 --- /dev/null +++ b/kdepasswd/kcm/main.h @@ -0,0 +1,79 @@ + +/** + * Copyright (C) 2004 Frans Englich + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef MAIN_H +#define MAIN_H + +#include + +#include "main_widget.h" + +class KAboutData; +class KUser; +class KEmailSettings; +class QEvent; +class QObject; +class KURL; +class Config; + +/** + * Please see the README + */ +class KCMUserAccount : public KCModule +{ + Q_OBJECT + +public: + KCMUserAccount(QWidget* parent, const char* name = "KCMUserAccount", + const QStringList& list=QStringList()); + ~KCMUserAccount(); + + /** + * The user data is loaded from chfn(/etc/password) and then + * written back as well as to KDE's own(KEmailSettings). + * The user won't notice this(assuming they change the KDE settings via + * this KCM) and will make KDE play nice with enviroments which uses + * /etc/password. + */ + void load(); + + void save(); + + /** + * For the face button + */ + bool eventFilter(QObject *, QEvent *e); + +private slots: + void slotChangePassword(); + //void configChanged() { emit changed(true); }; + void slotFaceButtonClicked(); + +private: + void changeFace(const QPixmap& pix); + inline KURL* decodeImgDrop(QDropEvent *e, QWidget *wdg); + + KEMailSettings *_kes; + KUser *_ku; + MainWidget *_mw; + FacePerm _facePerm; + QPixmap _facePixmap; + +}; + +#endif // MAIN_H diff --git a/kdepasswd/kcm/main_widget.ui b/kdepasswd/kcm/main_widget.ui new file mode 100644 index 000000000..29adb0835 --- /dev/null +++ b/kdepasswd/kcm/main_widget.ui @@ -0,0 +1,294 @@ + +MainWidget +Frans Englich <frans.englich@telia.com> + + + MainWidget + + + + 0 + 0 + 518 + 561 + + + + KCMUserAccount + + + + unnamed + + + + btnChangeFace + + + + 0 + 0 + 0 + 0 + + + + + 74 + 74 + + + + + 74 + 74 + + + + true + + + + + + + + grpUserInformation + + + User Information + + + + unnamed + + + + lblOrganisation + + + &Organization: + + + leOrganization + + + + + leRealname + + + + + lblRealName + + + &Name: + + + leRealname + + + + + leOrganization + + + + + lblEmail + + + &Email address: + + + leEmail + + + + + leEmail + + + + + textLabel3 + + + &SMTP server: + + + leSMTP + + + + + leSMTP + + + + + lblUIDTell + + + User ID: + + + + + lblUID + + + + + + + + + + spacer3 + + + Vertical + + + Expanding + + + + 20 + 16 + + + + + + layout1 + + + + unnamed + + + + lblUsername + + + + Bitstream Charter + 14 + + + + + + + AlignVCenter + + + + + lblClickButtonInfo + + + <i>(Click the button to change your image)</i> + + + AlignVCenter + + + + + + + btnChangePassword + + + Change Password... + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 111 + 20 + + + + + + kcfg_EchoMode + + + At Password Prompt + + + false + + + false + + + false + + + 0 + + + + unnamed + + + + rdbOneStar + + + Show one star for each letter + + + + + rdbThreeStars + + + Show three stars for each letter + + + + + rdbShowPassword + + + Show nothing + + + + + + + + btnChangeFace + leRealname + leOrganization + leEmail + leSMTP + rdbOneStar + rdbThreeStars + rdbShowPassword + btnChangePassword + + + kdialog.h + + + + diff --git a/kdepasswd/kcm/pass.kcfgc b/kdepasswd/kcm/pass.kcfgc new file mode 100644 index 000000000..21b4bb781 --- /dev/null +++ b/kdepasswd/kcm/pass.kcfgc @@ -0,0 +1,5 @@ +File=kcm_useraccount_pass.kcfg +ClassName=KCFGPassword +Singleton=true +Mutators=true + diff --git a/kdepasswd/kcm/pics/Apple.png b/kdepasswd/kcm/pics/Apple.png new file mode 100644 index 000000000..b383578bb Binary files /dev/null and b/kdepasswd/kcm/pics/Apple.png differ diff --git a/kdepasswd/kcm/pics/BeachBall.png b/kdepasswd/kcm/pics/BeachBall.png new file mode 100644 index 000000000..e8c748332 Binary files /dev/null and b/kdepasswd/kcm/pics/BeachBall.png differ diff --git a/kdepasswd/kcm/pics/Blowfish.png b/kdepasswd/kcm/pics/Blowfish.png new file mode 100644 index 000000000..51cb16013 Binary files /dev/null and b/kdepasswd/kcm/pics/Blowfish.png differ diff --git a/kdepasswd/kcm/pics/Bug.png b/kdepasswd/kcm/pics/Bug.png new file mode 100644 index 000000000..b431cc138 Binary files /dev/null and b/kdepasswd/kcm/pics/Bug.png differ diff --git a/kdepasswd/kcm/pics/Butterfly.png b/kdepasswd/kcm/pics/Butterfly.png new file mode 100644 index 000000000..88012a7ed Binary files /dev/null and b/kdepasswd/kcm/pics/Butterfly.png differ diff --git a/kdepasswd/kcm/pics/CREDITS b/kdepasswd/kcm/pics/CREDITS new file mode 100644 index 000000000..ccd9126b4 --- /dev/null +++ b/kdepasswd/kcm/pics/CREDITS @@ -0,0 +1,21 @@ +Butterfly.png, Konqui.png: + KDE Graphics Team + +BeachBall.png BlueMarble1.png Flower.png Night.png Star2.png Star3.png +Star4.png Star.png Stars2.png Stars.png: + Braden MacDonald + +Apple.png Cheese.png Ghost.png Pearl.png Skull.png Blowfish.png Cow.png +Guitar.png Penguin.png Smiley.png Bug.png Daemon.png Lion.png Pig.png +Splash.png Burger.png Dog.png Man.png Scream.png Turtle.png Car.png +Elephant.png Monkey.png Shark.png Watch.png Astronaut.png Heart.png +Ring.png Rabbit.png Speakers.png UFO.png : + Hans Karlsson +License: free for commercial and noncommercial usage, distribution and +modification + +Arch.png BeachBall2.png Butterfly2.png Cactus.png Car2.png Clock.png +Dice.png Dog2.png Dragon.png Fish.png Flower2.png Flower3.png Frog.png +Kiwi.png Lava.png Pineapple.png Teddybear.png Tiger.png Tukan.png +Wind.png : + Hermann Thomas diff --git a/kdepasswd/kcm/pics/Car.png b/kdepasswd/kcm/pics/Car.png new file mode 100644 index 000000000..95ec0278f Binary files /dev/null and b/kdepasswd/kcm/pics/Car.png differ diff --git a/kdepasswd/kcm/pics/Cow.png b/kdepasswd/kcm/pics/Cow.png new file mode 100644 index 000000000..2f0ced863 Binary files /dev/null and b/kdepasswd/kcm/pics/Cow.png differ diff --git a/kdepasswd/kcm/pics/Daemon.png b/kdepasswd/kcm/pics/Daemon.png new file mode 100644 index 000000000..4bbc42a55 Binary files /dev/null and b/kdepasswd/kcm/pics/Daemon.png differ diff --git a/kdepasswd/kcm/pics/Dog.png b/kdepasswd/kcm/pics/Dog.png new file mode 100644 index 000000000..78de93340 Binary files /dev/null and b/kdepasswd/kcm/pics/Dog.png differ diff --git a/kdepasswd/kcm/pics/Elephant.png b/kdepasswd/kcm/pics/Elephant.png new file mode 100644 index 000000000..8f4b2d2aa Binary files /dev/null and b/kdepasswd/kcm/pics/Elephant.png differ diff --git a/kdepasswd/kcm/pics/Flower.png b/kdepasswd/kcm/pics/Flower.png new file mode 100644 index 000000000..d414e736c Binary files /dev/null and b/kdepasswd/kcm/pics/Flower.png differ diff --git a/kdepasswd/kcm/pics/Frog.png b/kdepasswd/kcm/pics/Frog.png new file mode 100644 index 000000000..2186975a9 Binary files /dev/null and b/kdepasswd/kcm/pics/Frog.png differ diff --git a/kdepasswd/kcm/pics/Ghost.png b/kdepasswd/kcm/pics/Ghost.png new file mode 100644 index 000000000..bf95150da Binary files /dev/null and b/kdepasswd/kcm/pics/Ghost.png differ diff --git a/kdepasswd/kcm/pics/Guitar.png b/kdepasswd/kcm/pics/Guitar.png new file mode 100644 index 000000000..6a315b0c7 Binary files /dev/null and b/kdepasswd/kcm/pics/Guitar.png differ diff --git a/kdepasswd/kcm/pics/Heart.png b/kdepasswd/kcm/pics/Heart.png new file mode 100644 index 000000000..b41a027e3 Binary files /dev/null and b/kdepasswd/kcm/pics/Heart.png differ diff --git a/kdepasswd/kcm/pics/Konqui.png b/kdepasswd/kcm/pics/Konqui.png new file mode 100644 index 000000000..4db7ae5e3 Binary files /dev/null and b/kdepasswd/kcm/pics/Konqui.png differ diff --git a/kdepasswd/kcm/pics/Lion.png b/kdepasswd/kcm/pics/Lion.png new file mode 100644 index 000000000..373b3f8c8 Binary files /dev/null and b/kdepasswd/kcm/pics/Lion.png differ diff --git a/kdepasswd/kcm/pics/Makefile.am b/kdepasswd/kcm/pics/Makefile.am new file mode 100644 index 000000000..5c1e95f75 --- /dev/null +++ b/kdepasswd/kcm/pics/Makefile.am @@ -0,0 +1,10 @@ +picsdir = $(kde_datadir)/kdm/pics/users +pics_DATA = Apple.png BeachBall.png Blowfish.png Bug.png \ + Butterfly.png Car.png Cow.png Daemon.png Dog.png Elephant.png \ + Flower.png Frog.png Ghost.png Guitar.png Heart.png Konqui.png \ + Lion.png Monkey.png Penguin.png Pig.png Rabbit.png \ + Ring.png Scream.png Shark.png Splash.png Star.png Teddybear.png \ + Turtle.png + +EXTRA_DIST = $(pics_DATA) + diff --git a/kdepasswd/kcm/pics/Monkey.png b/kdepasswd/kcm/pics/Monkey.png new file mode 100644 index 000000000..72a241006 Binary files /dev/null and b/kdepasswd/kcm/pics/Monkey.png differ diff --git a/kdepasswd/kcm/pics/Penguin.png b/kdepasswd/kcm/pics/Penguin.png new file mode 100644 index 000000000..33ed3619a Binary files /dev/null and b/kdepasswd/kcm/pics/Penguin.png differ diff --git a/kdepasswd/kcm/pics/Pig.png b/kdepasswd/kcm/pics/Pig.png new file mode 100644 index 000000000..c10a34c7f Binary files /dev/null and b/kdepasswd/kcm/pics/Pig.png differ diff --git a/kdepasswd/kcm/pics/Rabbit.png b/kdepasswd/kcm/pics/Rabbit.png new file mode 100644 index 000000000..a7c5f3f10 Binary files /dev/null and b/kdepasswd/kcm/pics/Rabbit.png differ diff --git a/kdepasswd/kcm/pics/Ring.png b/kdepasswd/kcm/pics/Ring.png new file mode 100644 index 000000000..29daf4c63 Binary files /dev/null and b/kdepasswd/kcm/pics/Ring.png differ diff --git a/kdepasswd/kcm/pics/Scream.png b/kdepasswd/kcm/pics/Scream.png new file mode 100644 index 000000000..46abbd2f8 Binary files /dev/null and b/kdepasswd/kcm/pics/Scream.png differ diff --git a/kdepasswd/kcm/pics/Shark.png b/kdepasswd/kcm/pics/Shark.png new file mode 100644 index 000000000..a11a352cb Binary files /dev/null and b/kdepasswd/kcm/pics/Shark.png differ diff --git a/kdepasswd/kcm/pics/Splash.png b/kdepasswd/kcm/pics/Splash.png new file mode 100644 index 000000000..ec8e68a18 Binary files /dev/null and b/kdepasswd/kcm/pics/Splash.png differ diff --git a/kdepasswd/kcm/pics/Star.png b/kdepasswd/kcm/pics/Star.png new file mode 100644 index 000000000..2b3988860 Binary files /dev/null and b/kdepasswd/kcm/pics/Star.png differ diff --git a/kdepasswd/kcm/pics/Teddybear.png b/kdepasswd/kcm/pics/Teddybear.png new file mode 100644 index 000000000..823adb56d Binary files /dev/null and b/kdepasswd/kcm/pics/Teddybear.png differ diff --git a/kdepasswd/kcm/pics/Turtle.png b/kdepasswd/kcm/pics/Turtle.png new file mode 100644 index 000000000..1eee29591 Binary files /dev/null and b/kdepasswd/kcm/pics/Turtle.png differ diff --git a/kdepasswd/kcm/settings.kcfgc b/kdepasswd/kcm/settings.kcfgc new file mode 100644 index 000000000..772c87a6b --- /dev/null +++ b/kdepasswd/kcm/settings.kcfgc @@ -0,0 +1,5 @@ +File=kcm_useraccount.kcfg +ClassName=KCFGUserAccount +Singleton=true +Mutators=false + diff --git a/kdepasswd/kdepasswd.cpp b/kdepasswd/kdepasswd.cpp new file mode 100644 index 000000000..c76169508 --- /dev/null +++ b/kdepasswd/kdepasswd.cpp @@ -0,0 +1,79 @@ +/* vi: ts=8 sts=4 sw=4 + * + * $Id$ + * + * This file is part of the KDE project, module kdesu. + * Copyright (C) 2000 Geert Jansen + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "passwd.h" +#include "passwddlg.h" + +static KCmdLineOptions options[] = +{ + { "+[user]", I18N_NOOP("Change password of this user"), 0 }, + KCmdLineLastOption +}; + + +int main(int argc, char **argv) +{ + KAboutData aboutData("kdepasswd", I18N_NOOP("KDE passwd"), + VERSION, I18N_NOOP("Changes a UNIX password."), + KAboutData::License_Artistic, "Copyright (c) 2000 Geert Jansen"); + aboutData.addAuthor("Geert Jansen", I18N_NOOP("Maintainer"), + "jansen@kde.org", "http://www.stack.nl/~geertj/"); + + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions(options); + KUniqueApplication::addCmdLineOptions(); + + + if (!KUniqueApplication::start()) { + kdDebug() << "kdepasswd is already running" << endl; + return 0; + } + + KUniqueApplication app; + + KUser ku; + QCString user; + bool bRoot = ku.isSuperUser(); + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->count()) + user = args->arg(0); + + /* You must be able to run "kdepasswd loginName" */ + if ( !user.isEmpty() && user!=KUser().loginName().utf8() && !bRoot) + { + KMessageBox::sorry(0, i18n("You need to be root to change the password of other users.")); + return 0; + } + + QCString oldpass; + if (!bRoot) + { + int result = KDEpasswd1Dialog::getPassword(oldpass); + if (result != KDEpasswd1Dialog::Accepted) + return 0; + } + + KDEpasswd2Dialog *dlg = new KDEpasswd2Dialog(oldpass, user); + + + dlg->exec(); + + return 0; +} + diff --git a/kdepasswd/kdepasswd.desktop b/kdepasswd/kdepasswd.desktop new file mode 100644 index 000000000..b84e05374 --- /dev/null +++ b/kdepasswd/kdepasswd.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Exec=kdepasswd +Icon=password +Type=Application +Categories=Qt;KDE;Settings; +NoDisplay=true +X-DCOP-ServiceType=Unique +Name=Change Password +Name[af]=Verander Wagwoord +Name[ar]=غيير كلمة المرور +Name[be]=Змяніць пароль +Name[bg]=Промяна на парола +Name[bn]=পাসওয়ার্ড পরিবর্তন +Name[br]=Kemmañ an Tremenger +Name[bs]=Promijenite šifru +Name[ca]=Canvia contrasenya +Name[cs]=Změna hesla +Name[csb]=Zmieni parolã +Name[cy]=Newid Cyfrinair +Name[da]=Ændr kodeord +Name[de]=Passwort ändern +Name[el]=Αλλαγή κωδικού πρόσβασης +Name[eo]=Ŝanĝi pasvorton +Name[es]=Cambiar la contraseña +Name[et]=Parooli muutmine +Name[eu]=Aldatu pasahitza +Name[fa]=تغییر اسم رمز +Name[fi]=Vaihda salasanaa +Name[fr]=Modifier le mot de passe +Name[fy]=Wachtwurd wizigje +Name[ga]=Athraigh Focal Faire +Name[gl]=Trocar Contrasinal +Name[he]=שנה ססמאות +Name[hi]=पासवर्ड बदलें +Name[hr]=Promjena lozinke +Name[hu]=Jelszóváltoztatás +Name[is]=Breyta lykilorði +Name[it]=Cambia password +Name[ja]=パスワードを変更 +Name[ka]=პაროლის შეცვლა +Name[kk]=Парольді өзгерту +Name[km]=ផ្លាស់ប្ដូរ​ពាក្យ​សម្ងាត់ +Name[ko]=비밀번호 변경 +Name[lo]=เปลี่ยนรหัสผ่าน +Name[lt]=Pakeiskite slaptažodį +Name[lv]=Mainīt paroli +Name[mk]=Измени лозинка +Name[ms]=Ubah Kata Laluan +Name[mt]=Ibdel Password +Name[nb]=Endre passord +Name[nds]=Passwoort ännern +Name[ne]=पासवर्ड परिवर्तन गर्नुहोस् +Name[nl]=Wachtwoord wijzigen +Name[nn]=Endra passord +Name[pa]=ਗੁਪਤ-ਕੋਡ ਤਬਦੀਲ +Name[pl]=Zmień hasło +Name[pt]=Mudar a Senha +Name[pt_BR]=Modificar Senha +Name[ro]=Schimbare parolă +Name[ru]=Изменить пароль +Name[rw]=Guhindura Ijambobanga +Name[se]=Rievdat beassansáni +Name[sk]=Zmena heslahesla +Name[sl]=Spremeni geslo +Name[sr]=Промени лозинку +Name[sr@Latn]=Promeni lozinku +Name[sv]=Ändra lösenord +Name[ta]=கடவுச்சொல்லை மாற்று +Name[te]=పాస్ వర్డు మార్చండి +Name[tg]=Гузарвожаҳо +Name[th]=เปลี่ยนรหัสผ่าน +Name[tr]=Parola Değiştir +Name[tt]=Sersüz Üzgärtü +Name[uk]=Зміна пароля +Name[uz]=Maxfiy soʻzni oʻzgartirish +Name[uz@cyrillic]=Махфий сўзни ўзгартириш +Name[vi]=Thay đổi Mật khẩu +Name[wa]=Candjî d' sicret +Name[zh_CN]=更改密码 +Name[zh_TW]=改變密碼 diff --git a/kdepasswd/passwd.cpp b/kdepasswd/passwd.cpp new file mode 100644 index 000000000..903b2830f --- /dev/null +++ b/kdepasswd/passwd.cpp @@ -0,0 +1,284 @@ +/* vi: ts=8 sts=4 sw=4 + * + * $Id$ + * + * This file is part of the KDE project, module kdesu. + * Copyright (C) 1999,2000 Geert Jansen + * + * passwd.cpp: Change a user's password. + */ + +#include // setenv + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include +#include "passwd.h" + + +PasswdProcess::PasswdProcess(QCString user) +{ + struct passwd *pw; + + if (user.isEmpty()) + { + pw = getpwuid(getuid()); + if (pw == 0L) + { + kdDebug(1512) << "You don't exist!\n"; + return; + } + m_User = pw->pw_name; + } else + { + pw = getpwnam(user); + if (pw == 0L) + { + kdDebug(1512) << k_lineinfo << "User " << user << "does not exist.\n"; + return; + } + m_User = user; + } + bOtherUser = (pw->pw_uid != getuid()); +} + + +PasswdProcess::~PasswdProcess() +{ +} + + +int PasswdProcess::checkCurrent(const char *oldpass) +{ + return exec(oldpass, 0L, 1); +} + + +int PasswdProcess::exec(const char *oldpass, const char *newpass, + int check) +{ + if (m_User.isEmpty()) + return -1; +// if (check) +// setTerminal(true); + + // Try to set the default locale to make the parsing of the output + // of `passwd' easier. + setenv("LANG","C", true /* override */); + + QCStringList args; + if(bOtherUser) + args += m_User; + int ret = PtyProcess::exec("passwd", args); + if (ret < 0) + { + kdDebug(1512) << k_lineinfo << "Passwd not found!\n"; + return PasswdNotFound; + } + + ret = ConversePasswd(oldpass, newpass, check); + if (ret < 0) + kdDebug(1512) << k_lineinfo << "Conversation with passwd failed. pid = " << pid() << endl; + + if ((waitForChild() != 0) && !check) + return PasswordNotGood; + + return ret; +} + + +/* + * The tricky thing is to make this work with a lot of different passwd + * implementations. We _don't_ want implementation specific routines. + * Return values: -1 = unknown error, 0 = ok, >0 = error code. + */ + +int PasswdProcess::ConversePasswd(const char *oldpass, const char *newpass, + int check) +{ + QCString line, errline; + int state = 0; + + while (state != 7) + { + line = readLine(); + if (line.isNull()) + { + return -1; + } + + if (state == 0 && isPrompt(line, "new")) + // If root is changing a user's password, + // passwd can't prompt for the original password. + // Therefore, we have to start at state=2. + state=2; + + switch (state) + { + case 0: + // Eat garbage, wait for prompt + m_Error += line+"\n"; + if (isPrompt(line, "password")) + { + WaitSlave(); + write(m_Fd, oldpass, strlen(oldpass)); + write(m_Fd, "\n", 1); + state++; + break; + } + if (m_bTerminal) + fputs(line, stdout); + break; + + case 1: case 3: case 6: + // Wait for \n + if (line.isEmpty()) + { + state++; + break; + } + // error + return -1; + + case 2: + m_Error = ""; + if( line.contains("again")) + { + m_Error = line; + kill(m_Pid, SIGKILL); + waitForChild(); + return PasswordIncorrect; + } + // Wait for second prompt. + errline = line; // use first line for error message + while (!isPrompt(line, "new")) + { + line = readLine(); + if (line.isNull()) + { + // We didn't get the new prompt so assume incorrect password. + if (m_bTerminal) + fputs(errline, stdout); + m_Error = errline; + return PasswordIncorrect; + } + } + + // we have the new prompt + if (check) + { + kill(m_Pid, SIGKILL); + waitForChild(); + return 0; + } + WaitSlave(); + write(m_Fd, newpass, strlen(newpass)); + write(m_Fd, "\n", 1); + state++; + break; + + case 4: + // Wait for third prompt + if (isPrompt(line, "re")) + { + WaitSlave(); + write(m_Fd, newpass, strlen(newpass)); + write(m_Fd, "\n", 1); + state += 2; + break; + } + // Warning or error about the new password + if (m_bTerminal) + fputs(line, stdout); + m_Error = line + "\n"; + state++; + break; + + case 5: + // Wait for either a "Reenter password" or a "Enter password" prompt + if (isPrompt(line, "re")) + { + WaitSlave(); + write(m_Fd, newpass, strlen(newpass)); + write(m_Fd, "\n", 1); + state++; + break; + } + else if (isPrompt(line, "password")) + { + kill(m_Pid, SIGKILL); + waitForChild(); + return PasswordNotGood; + } + if (m_bTerminal) + fputs(line, stdout); + m_Error += line + "\n"; + break; + } + } + + // Are we ok or do we still get an error thrown at us? + m_Error = ""; + state = 0; + while (state != 1) + { + line = readLine(); + if (line.isNull()) + { + // No more input... OK + return 0; + } + if (isPrompt(line, "password")) + { + // Uh oh, another prompt. Not good! + kill(m_Pid, SIGKILL); + waitForChild(); + return PasswordNotGood; + } + m_Error += line + "\n"; // Collect error message + } + + kdDebug(1512) << k_lineinfo << "Conversation ended successfully.\n"; + return 0; +} + + +bool PasswdProcess::isPrompt(QCString line, const char *word) +{ + unsigned i, j, colon; + unsigned int lineLength(line.length()); + for (i=0,j=0,colon=0; i + */ + +#ifndef __Passwd_h_Included__ +#define __Passwd_h_Included__ + +#include +#include + +/** + * A C++ API to passwd. + */ + +class PasswdProcess + : public PtyProcess +{ +public: + PasswdProcess(QCString user=0); + ~PasswdProcess(); + + enum Errors { PasswdNotFound=1, PasswordIncorrect, PasswordNotGood }; + + int checkCurrent(const char *oldpass); + int exec(const char *oldpass, const char *newpass, int check=0); + + QCString error() { return m_Error; } + +private: + bool isPrompt(QCString line, const char *word=0L); + int ConversePasswd(const char *oldpass, const char *newpass, + int check); + + QCString m_User, m_Error; + bool bOtherUser; +}; + + +#endif // __Passwd_h_Included__ diff --git a/kdepasswd/passwddlg.cpp b/kdepasswd/passwddlg.cpp new file mode 100644 index 000000000..5a3b48917 --- /dev/null +++ b/kdepasswd/passwddlg.cpp @@ -0,0 +1,169 @@ +/* vi: ts=8 sts=4 sw=4 + * + * $Id$ + * + * This file is part of the KDE project, module kdesu. + * Copyright (C) 2000 Geert Jansen + */ + +#include +#include + +#include "passwd.h" +#include "passwddlg.h" + + +KDEpasswd1Dialog::KDEpasswd1Dialog() + : KPasswordDialog(Password, false, 0) +{ + setCaption(i18n("Change Password")); + setPrompt(i18n("Please enter your current password:")); +} + + +KDEpasswd1Dialog::~KDEpasswd1Dialog() +{ +} + + +bool KDEpasswd1Dialog::checkPassword(const char *password) +{ + PasswdProcess proc(0); + + int ret = proc.checkCurrent(password); + switch (ret) + { + case -1: + { + QString msg = QString::fromLocal8Bit(proc.error()); + if (!msg.isEmpty()) + msg = "

      \"" + msg + "\""; + msg = "" + i18n("Conversation with 'passwd' failed.") + msg; + KMessageBox::error(this, msg); + done(Rejected); + return false; + } + + case 0: + return true; + + case PasswdProcess::PasswdNotFound: + KMessageBox::error(this, i18n("Could not find the program 'passwd'.")); + done(Rejected); + return false; + + case PasswdProcess::PasswordIncorrect: + KMessageBox::sorry(this, i18n("Incorrect password. Please try again.")); + return false; + + default: + KMessageBox::error(this, i18n("Internal error: illegal return value " + "from PasswdProcess::checkCurrent.")); + done(Rejected); + return false; + } +} + + +// static +int KDEpasswd1Dialog::getPassword(QCString &password) +{ + KDEpasswd1Dialog *dlg = new KDEpasswd1Dialog(); + int res = dlg->exec(); + if (res == Accepted) + password = dlg->password(); + delete dlg; + return res; +} + + + +KDEpasswd2Dialog::KDEpasswd2Dialog(const char *oldpass, QCString user) + : KPasswordDialog(NewPassword, false, 0) +{ + m_Pass = oldpass; + m_User = user; + + setCaption(i18n("Change Password")); + if (m_User.isEmpty()) + setPrompt(i18n("Please enter your new password:")); + else + setPrompt(i18n("Please enter the new password for user %1:").arg(m_User)); +} + + +KDEpasswd2Dialog::~KDEpasswd2Dialog() +{ +} + + +bool KDEpasswd2Dialog::checkPassword(const char *password) +{ + PasswdProcess proc(m_User); + + if (strlen(password) > 8) + { + switch(KMessageBox::warningYesNoCancel(this, + m_User.isEmpty() ? + i18n("Your password is longer than 8 characters. On some " + "systems, this can cause problems. You can truncate " + "the password to 8 characters, or leave it as it is.") : + i18n("The password is longer than 8 characters. On some " + "systems, this can cause problems. You can truncate " + "the password to 8 characters, or leave it as it is.") + , + i18n("Password Too Long"), + i18n("Truncate"), + i18n("Use as Is"), + "truncatePassword")) + { + case KMessageBox::Yes : + const_cast(password)[8] = '\000'; + break; + case KMessageBox::No : + break; + default : return false; + } + } + + int ret = proc.exec(m_Pass, password); + switch (ret) + { + case 0: + { + hide(); + QString msg = QString::fromLocal8Bit(proc.error()); + if (!msg.isEmpty()) + msg = "

      \"" + msg + "\""; + msg = "" + i18n("Your password has been changed.") + msg; + KMessageBox::information(0L, msg); + return true; + } + + case PasswdProcess::PasswordNotGood: + { + QString msg = QString::fromLocal8Bit(proc.error()); + if (!msg.isEmpty()) + msg = "

      \"" + msg + "\""; + msg = "" + i18n("Your password has not been changed.") + msg; + + // The pw change did not succeed. Print the error. + KMessageBox::sorry(this, msg); + return false; + } + + default: + QString msg = QString::fromLocal8Bit(proc.error()); + if (!msg.isEmpty()) + msg = "

      \"" + msg + "\""; + msg = "" + i18n("Conversation with 'passwd' failed.") + msg; + KMessageBox::sorry(this, msg); + done(Rejected); + return true; + } + + return true; +} + + +#include "passwddlg.moc" diff --git a/kdepasswd/passwddlg.h b/kdepasswd/passwddlg.h new file mode 100644 index 000000000..78ce4297a --- /dev/null +++ b/kdepasswd/passwddlg.h @@ -0,0 +1,49 @@ +/* vi: ts=8 sts=4 sw=4 + * + * $Id$ + * + * This file is part of the KDE project, module kdesu. + * Copyright (C) 2000 Geert Jansen + */ + +#ifndef __PasswdDlg_h_Incluced__ +#define __PasswdDlg_h_Incluced__ + +#include + +class KDEpasswd1Dialog + : public KPasswordDialog +{ + Q_OBJECT + +public: + KDEpasswd1Dialog(); + ~KDEpasswd1Dialog(); + + static int getPassword(QCString &password); + +protected: + bool checkPassword(const char *password); +}; + + +class KDEpasswd2Dialog + : public KPasswordDialog +{ + Q_OBJECT + +public: + KDEpasswd2Dialog(const char *oldpass, QCString user); + ~KDEpasswd2Dialog(); + +protected: + bool checkPassword(const char *password); + +private: + const char *m_Pass; + QCString m_User; +}; + + + +#endif // __PasswdDlg_h_Incluced__ diff --git a/kdeprint/Makefile.am b/kdeprint/Makefile.am new file mode 100644 index 000000000..81364da3d --- /dev/null +++ b/kdeprint/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = printmgr kjobviewer kprinter kdeprintfax slave kdeprint_part diff --git a/kdeprint/configure.in.in b/kdeprint/configure.in.in new file mode 100644 index 000000000..255d82a9b --- /dev/null +++ b/kdeprint/configure.in.in @@ -0,0 +1 @@ +dnl nothing special diff --git a/kdeprint/descriptions/Makefile.am b/kdeprint/descriptions/Makefile.am new file mode 100644 index 000000000..b8b0bd95a --- /dev/null +++ b/kdeprint/descriptions/Makefile.am @@ -0,0 +1,24 @@ +KDE_OPTIONS = qtonly +# Note: sortthem does not sort! (It is just a sort of uniq(1) + +INCLUDES = $(all_includes) + +EXTRA_PROGRAMS = sortthem + +sortthem_SOURCES = sortthem.cpp +sortthem_LDFLAGS = $(all_libraries) $(LIB_QT) + +printers.cpp: sortthem + : > printers.cpp + for i in `find /usr/share/cups/model -type f ! -name '*.gz'`; do perl $(srcdir)/readppd < $$i >> printers.cpp; done + for i in `find /usr/share/cups/model -type f -name '*.gz'`; do \ + gzip -cd $$i | perl $(srcdir)/readppd >> printers.cpp; done + iconv -flatin1 -tutf-8 printers.cpp | grep -v '"[-0-9][0-9]*")' > printers.new + mv printers.new printers.cpp + ./sortthem < printers.cpp | perl -n -e "print \"// xgettext: no-c-format\n\".\$$_;" > printers.new && mv printers.new $(srcdir)/printers.cpp + +messages: + $(XGETTEXT) printers.cpp -o $(podir)/../kdelibs/ppdtranslations.pot + +.PHONY: printers.cpp + diff --git a/kdeprint/descriptions/printers.cpp b/kdeprint/descriptions/printers.cpp new file mode 100644 index 000000000..274c5084b --- /dev/null +++ b/kdeprint/descriptions/printers.cpp @@ -0,0 +1,7084 @@ +// xgettext: no-c-format +i18n("Executive"); +// xgettext: no-c-format +i18n("Envelope B5"); +// xgettext: no-c-format +i18n("Envelope #10"); +// xgettext: no-c-format +i18n("Envelope DL"); +// xgettext: no-c-format +i18n("PageRegion"); +// xgettext: no-c-format +i18n("Media Source"); +// xgettext: no-c-format +i18n("Default"); +// xgettext: no-c-format +i18n("Manual Feed"); +// xgettext: no-c-format +i18n("Output Resolution"); +// xgettext: no-c-format +i18n("150 DPI"); +// xgettext: no-c-format +i18n("300 DPI"); +// xgettext: no-c-format +i18n("600 DPI"); +// xgettext: no-c-format +i18n("1200 DPI"); +// xgettext: no-c-format +i18n("2400 DPI"); +// xgettext: no-c-format +i18n("Double-Sided Printing"); +// xgettext: no-c-format +i18n("Off"); +// xgettext: no-c-format +i18n("Long Edge (Standard)"); +// xgettext: no-c-format +i18n("Short Edge (Flip)"); +// xgettext: no-c-format +i18n("US Letter"); +// xgettext: no-c-format +i18n("US Legal"); +// xgettext: no-c-format +i18n("US Executive"); +// xgettext: no-c-format +i18n("US Tabloid"); +// xgettext: no-c-format +i18n("A3"); +// xgettext: no-c-format +i18n("Media Type"); +// xgettext: no-c-format +i18n("Plain Paper"); +// xgettext: no-c-format +i18n("Bond Paper"); +// xgettext: no-c-format +i18n("Special Paper"); +// xgettext: no-c-format +i18n("Transparency"); +// xgettext: no-c-format +i18n("Glossy Paper"); +// xgettext: no-c-format +i18n("Tray"); +// xgettext: no-c-format +i18n("Envelope Feed"); +// xgettext: no-c-format +i18n("Output Mode"); +// xgettext: no-c-format +i18n("CMYK Color"); +// xgettext: no-c-format +i18n("CMY Color"); +// xgettext: no-c-format +i18n("Grayscale"); +// xgettext: no-c-format +i18n("600x300 DPI"); +// xgettext: no-c-format +i18n("CRET Color"); +// xgettext: no-c-format +i18n("Duplexer"); +// xgettext: no-c-format +i18n("Address - 1 1/8 x 3 1/2\""); +// xgettext: no-c-format +i18n("Large Address - 1 4/10 x 3 1/2\""); +// xgettext: no-c-format +i18n("Return Address - 3/4 x 2\""); +// xgettext: no-c-format +i18n("Shipping Address - 2 5/16 x 4\""); +// xgettext: no-c-format +i18n("Internet Postage 2-Part - 2 1/4 x 7 1/2\""); +// xgettext: no-c-format +i18n("Internet Postage 3-Part - 2 1/4 x 7\""); +// xgettext: no-c-format +i18n("File Folder - 9/16 x 3 7/16\""); +// xgettext: no-c-format +i18n("Hanging Folder - 9/16 x 2\""); +// xgettext: no-c-format +i18n("3.5\" Disk - 2 1/8 x 2 3/4\""); +// xgettext: no-c-format +i18n("136 DPI"); +// xgettext: no-c-format +i18n("203 DPI"); +// xgettext: no-c-format +i18n("Output Darkness"); +// xgettext: no-c-format +i18n("Normal"); +// xgettext: no-c-format +i18n("FanFoldUS"); +// xgettext: no-c-format +i18n("60 DPI"); +// xgettext: no-c-format +i18n("120x60 DPI"); +// xgettext: no-c-format +i18n("180 DPI"); +// xgettext: no-c-format +i18n("360x180 DPI"); +// xgettext: no-c-format +i18n("360 DPI"); +// xgettext: no-c-format +i18n("60x72 DPI"); +// xgettext: no-c-format +i18n("120x72 DPI"); +// xgettext: no-c-format +i18n("240x72 DPI"); +// xgettext: no-c-format +i18n("Tray 4"); +// xgettext: no-c-format +i18n("720 DPI"); +// xgettext: no-c-format +i18n("Page Size and Printing Quality"); +// xgettext: no-c-format +i18n("A4, 600x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 600x600 DPI"); +// xgettext: no-c-format +i18n("A4, 1200x600 DPI"); +// xgettext: no-c-format +i18n("B5, 600x600 DPI"); +// xgettext: no-c-format +i18n("B5, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 600x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 1200x600 DPI"); +// xgettext: no-c-format +i18n("High Grade Paper"); +// xgettext: no-c-format +i18n("Back Print Media"); +// xgettext: no-c-format +i18n("Iron-On Transfer Sheet"); +// xgettext: no-c-format +i18n("Hot OHP Media"); +// xgettext: no-c-format +i18n("Post Card"); +// xgettext: no-c-format +i18n("Thick Paper"); +// xgettext: no-c-format +i18n("Printing Mode"); +// xgettext: no-c-format +i18n("BlackOnly"); +// xgettext: no-c-format +i18n("Colour"); +// xgettext: no-c-format +i18n("HalfTone"); +// xgettext: no-c-format +i18n("NoHalfTone"); +// xgettext: no-c-format +i18n("Dithering"); +// xgettext: no-c-format +i18n("FloydSteinberg"); +// xgettext: no-c-format +i18n("NoFloydSteinberg"); +// xgettext: no-c-format +i18n("Banding"); +// xgettext: no-c-format +i18n("NoBanding"); +// xgettext: no-c-format +i18n("Colour Mode"); +// xgettext: no-c-format +i18n("CMY"); +// xgettext: no-c-format +i18n("Colour Correction Mode"); +// xgettext: no-c-format +i18n("FullBlack"); +// xgettext: no-c-format +i18n("Colour correction"); +// xgettext: no-c-format +i18n("NoColourCorrection"); +// xgettext: no-c-format +i18n("ColourCorrection"); +// xgettext: no-c-format +i18n("How often every dot is printed"); +// xgettext: no-c-format +i18n("PrintTwice"); +// xgettext: no-c-format +i18n("PrintOnce"); +// xgettext: no-c-format +i18n("Black Printing Mode"); +// xgettext: no-c-format +i18n("SolidBlack"); +// xgettext: no-c-format +i18n("MixedBlack"); +// xgettext: no-c-format +i18n("Square Dithering"); +// xgettext: no-c-format +i18n("SquareDithering"); +// xgettext: no-c-format +i18n("NoSquareDithering"); +// xgettext: no-c-format +i18n("Do Curl Correction"); +// xgettext: no-c-format +i18n("CurlCorrectionAlways"); +// xgettext: no-c-format +i18n("CurlCorrectionAfterFinal"); +// xgettext: no-c-format +i18n("Curl Correction on current pass"); +// xgettext: no-c-format +i18n("NoCurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("CurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("Colour Intensity"); +// xgettext: no-c-format +i18n("Line Feed Adjustment"); +// xgettext: no-c-format +i18n("Gamma"); +// xgettext: no-c-format +i18n("0.00"); +// xgettext: no-c-format +i18n("0.05"); +// xgettext: no-c-format +i18n("0.10"); +// xgettext: no-c-format +i18n("0.15"); +// xgettext: no-c-format +i18n("0.20"); +// xgettext: no-c-format +i18n("0.25"); +// xgettext: no-c-format +i18n("0.30"); +// xgettext: no-c-format +i18n("0.35"); +// xgettext: no-c-format +i18n("0.40"); +// xgettext: no-c-format +i18n("0.45"); +// xgettext: no-c-format +i18n("0.50"); +// xgettext: no-c-format +i18n("0.55"); +// xgettext: no-c-format +i18n("0.60"); +// xgettext: no-c-format +i18n("0.65"); +// xgettext: no-c-format +i18n("0.70"); +// xgettext: no-c-format +i18n("0.75"); +// xgettext: no-c-format +i18n("0.80"); +// xgettext: no-c-format +i18n("0.85"); +// xgettext: no-c-format +i18n("0.90"); +// xgettext: no-c-format +i18n("0.95"); +// xgettext: no-c-format +i18n("1.00"); +// xgettext: no-c-format +i18n("1.05"); +// xgettext: no-c-format +i18n("1.10"); +// xgettext: no-c-format +i18n("1.15"); +// xgettext: no-c-format +i18n("1.20"); +// xgettext: no-c-format +i18n("1.25"); +// xgettext: no-c-format +i18n("1.30"); +// xgettext: no-c-format +i18n("1.35"); +// xgettext: no-c-format +i18n("1.40"); +// xgettext: no-c-format +i18n("1.45"); +// xgettext: no-c-format +i18n("1.50"); +// xgettext: no-c-format +i18n("1.55"); +// xgettext: no-c-format +i18n("1.60"); +// xgettext: no-c-format +i18n("1.65"); +// xgettext: no-c-format +i18n("1.70"); +// xgettext: no-c-format +i18n("1.75"); +// xgettext: no-c-format +i18n("1.80"); +// xgettext: no-c-format +i18n("1.85"); +// xgettext: no-c-format +i18n("1.90"); +// xgettext: no-c-format +i18n("1.95"); +// xgettext: no-c-format +i18n("2.00"); +// xgettext: no-c-format +i18n("2.05"); +// xgettext: no-c-format +i18n("2.10"); +// xgettext: no-c-format +i18n("2.15"); +// xgettext: no-c-format +i18n("2.20"); +// xgettext: no-c-format +i18n("2.25"); +// xgettext: no-c-format +i18n("2.30"); +// xgettext: no-c-format +i18n("2.35"); +// xgettext: no-c-format +i18n("2.40"); +// xgettext: no-c-format +i18n("2.45"); +// xgettext: no-c-format +i18n("2.50"); +// xgettext: no-c-format +i18n("2.55"); +// xgettext: no-c-format +i18n("2.60"); +// xgettext: no-c-format +i18n("2.65"); +// xgettext: no-c-format +i18n("2.70"); +// xgettext: no-c-format +i18n("2.75"); +// xgettext: no-c-format +i18n("2.80"); +// xgettext: no-c-format +i18n("2.85"); +// xgettext: no-c-format +i18n("2.90"); +// xgettext: no-c-format +i18n("2.95"); +// xgettext: no-c-format +i18n("3.00"); +// xgettext: no-c-format +i18n("3.05"); +// xgettext: no-c-format +i18n("3.10"); +// xgettext: no-c-format +i18n("3.15"); +// xgettext: no-c-format +i18n("3.20"); +// xgettext: no-c-format +i18n("3.25"); +// xgettext: no-c-format +i18n("3.30"); +// xgettext: no-c-format +i18n("3.35"); +// xgettext: no-c-format +i18n("3.40"); +// xgettext: no-c-format +i18n("3.45"); +// xgettext: no-c-format +i18n("3.50"); +// xgettext: no-c-format +i18n("3.55"); +// xgettext: no-c-format +i18n("3.60"); +// xgettext: no-c-format +i18n("3.65"); +// xgettext: no-c-format +i18n("3.70"); +// xgettext: no-c-format +i18n("3.75"); +// xgettext: no-c-format +i18n("3.80"); +// xgettext: no-c-format +i18n("3.85"); +// xgettext: no-c-format +i18n("3.90"); +// xgettext: no-c-format +i18n("3.95"); +// xgettext: no-c-format +i18n("4.00"); +// xgettext: no-c-format +i18n("Horizontal (X-)Shift (in dots)"); +// xgettext: no-c-format +i18n("Vertical (Y-)Shift (in dots)"); +// xgettext: no-c-format +i18n("Next Job"); +// xgettext: no-c-format +i18n("NextJobOnSameSheet"); +// xgettext: no-c-format +i18n("NextJobOnNewSheet"); +// xgettext: no-c-format +i18n("Next Job is spot colour page"); +// xgettext: no-c-format +i18n("NextSpotColourPage"); +// xgettext: no-c-format +i18n("NextNotSpotColourPage"); +// xgettext: no-c-format +i18n("This Job is spot colour page"); +// xgettext: no-c-format +i18n("ThisSpotColourPage"); +// xgettext: no-c-format +i18n("ThisNotSpotColourPage"); +// xgettext: no-c-format +i18n("Page Size"); +// xgettext: no-c-format +i18n("B5"); +// xgettext: no-c-format +i18n("Manual"); +// xgettext: no-c-format +i18n("Automatic"); +// xgettext: no-c-format +i18n("Cardboard"); +// xgettext: no-c-format +i18n("Coated Film"); +// xgettext: no-c-format +i18n("Fine Paper"); +// xgettext: no-c-format +i18n("Iron Seal"); +// xgettext: no-c-format +i18n("OHP"); +// xgettext: no-c-format +i18n("OHP (MD 2000)"); +// xgettext: no-c-format +i18n("Rebeca Free"); +// xgettext: no-c-format +i18n("Resolution"); +// xgettext: no-c-format +i18n("1200x600 DPI"); +// xgettext: no-c-format +i18n("Color Mode"); +// xgettext: no-c-format +i18n("Colour Depth"); +// xgettext: no-c-format +i18n("Floyd Steinb. High Qual. (32 bpp)"); +// xgettext: no-c-format +i18n("Floyd Steinberg Simple (8 bpp)"); +// xgettext: no-c-format +i18n("Monochrome (1 bpp)"); +// xgettext: no-c-format +i18n("Simple Colour (4 bpp)"); +// xgettext: no-c-format +i18n("On"); +// xgettext: no-c-format +i18n("Duplex"); +// xgettext: no-c-format +i18n("DoubleSided"); +// xgettext: no-c-format +i18n("SingleSided"); +// xgettext: no-c-format +i18n("Black color saving"); +// xgettext: no-c-format +i18n("EcoBlack"); +// xgettext: no-c-format +i18n("NormalBlack"); +// xgettext: no-c-format +i18n("Black Level"); +// xgettext: no-c-format +i18n("Cyan Level"); +// xgettext: no-c-format +i18n("Magenta Level"); +// xgettext: no-c-format +i18n("Yellow Level"); +// xgettext: no-c-format +i18n("B4 (JIS)"); +// xgettext: no-c-format +i18n("B6 (JIS)"); +// xgettext: no-c-format +i18n("Envelope You 4"); +// xgettext: no-c-format +i18n("Hagaki"); +// xgettext: no-c-format +i18n("Ledger"); +// xgettext: no-c-format +i18n("Oufuku"); +// xgettext: no-c-format +i18n("600x600 DPI"); +// xgettext: no-c-format +i18n("300x300 DPI"); +// xgettext: no-c-format +i18n("3x5"); +// xgettext: no-c-format +i18n("4x6"); +// xgettext: no-c-format +i18n("5x7"); +// xgettext: no-c-format +i18n("5x8"); +// xgettext: no-c-format +i18n("6x8"); +// xgettext: no-c-format +i18n("8x10"); +// xgettext: no-c-format +i18n("8x12"); +// xgettext: no-c-format +i18n("11x14"); +// xgettext: no-c-format +i18n("13x19"); +// xgettext: no-c-format +i18n("16x20"); +// xgettext: no-c-format +i18n("16x24"); +// xgettext: no-c-format +i18n("60x60 dpi"); +// xgettext: no-c-format +i18n("60x72 dpi"); +// xgettext: no-c-format +i18n("60x180 dpi"); +// xgettext: no-c-format +i18n("60x216 dpi"); +// xgettext: no-c-format +i18n("120x60 dpi"); +// xgettext: no-c-format +i18n("120x72 dpi"); +// xgettext: no-c-format +i18n("120x180 dpi"); +// xgettext: no-c-format +i18n("120x216 dpi"); +// xgettext: no-c-format +i18n("180x60 dpi"); +// xgettext: no-c-format +i18n("180x72 dpi"); +// xgettext: no-c-format +i18n("180x180 dpi"); +// xgettext: no-c-format +i18n("180x216 dpi"); +// xgettext: no-c-format +i18n("240x60 dpi"); +// xgettext: no-c-format +i18n("240x72 dpi"); +// xgettext: no-c-format +i18n("240x180 dpi"); +// xgettext: no-c-format +i18n("240x216 dpi"); +// xgettext: no-c-format +i18n("360x60 dpi"); +// xgettext: no-c-format +i18n("360x72 dpi"); +// xgettext: no-c-format +i18n("360x180 dpi"); +// xgettext: no-c-format +i18n("360x216 dpi"); +// xgettext: no-c-format +i18n("11x17"); +// xgettext: no-c-format +i18n("Photo Paper"); +// xgettext: no-c-format +i18n("HP Premium Paper"); +// xgettext: no-c-format +i18n("Transparency Paper"); +// xgettext: no-c-format +i18n("Print Quality"); +// xgettext: no-c-format +i18n("Draft Quality"); +// xgettext: no-c-format +i18n("Normal Quality"); +// xgettext: no-c-format +i18n("Presentation Quality"); +// xgettext: no-c-format +i18n("Monochrome"); +// xgettext: no-c-format +i18n("Dithering Pixels Per Inch"); +// xgettext: no-c-format +i18n("Generic DeskJet"); +// xgettext: no-c-format +i18n("Standard Tray"); +// xgettext: no-c-format +i18n("Banner Printing"); +// xgettext: no-c-format +i18n("Envelope Feeder"); +// xgettext: no-c-format +i18n("Manual Feeder"); +// xgettext: no-c-format +i18n("Quick-Dry Glossy"); +// xgettext: no-c-format +i18n("Quick-Dry Transparency"); +// xgettext: no-c-format +i18n("Quality"); +// xgettext: no-c-format +i18n("Default Setting"); +// xgettext: no-c-format +i18n("Draft"); +// xgettext: no-c-format +i18n("Presentation"); +// xgettext: no-c-format +i18n("Ink Drying Time (sec)"); +// xgettext: no-c-format +i18n("Memory Limit (Bytes)"); +// xgettext: no-c-format +i18n("Black Levels"); +// xgettext: no-c-format +i18n("2 Levels"); +// xgettext: no-c-format +i18n("3 Levels"); +// xgettext: no-c-format +i18n("4 Levels"); +// xgettext: no-c-format +i18n("No Black"); +// xgettext: no-c-format +i18n("CMY Levels"); +// xgettext: no-c-format +i18n("No CMY"); +// xgettext: no-c-format +i18n("Printout Mode"); +// xgettext: no-c-format +i18n("Draft (Color cartridge)"); +// xgettext: no-c-format +i18n("Draft Grayscale (Black + color cartridge)"); +// xgettext: no-c-format +i18n("Normal (Color cartridge)"); +// xgettext: no-c-format +i18n("Normal Grayscale (Black + color cartridge)"); +// xgettext: no-c-format +i18n("High Quality Grayscale (Black + color cartridge)"); +// xgettext: no-c-format +i18n("Photo (Photo + color cartridge, photo paper)"); +// xgettext: no-c-format +i18n("Photo/4x6 inch index card"); +// xgettext: no-c-format +i18n("Photo with tear-off tab"); +// xgettext: no-c-format +i18n("3x5 inch index card"); +// xgettext: no-c-format +i18n("5x8 inch index card"); +// xgettext: no-c-format +i18n("A6"); +// xgettext: no-c-format +i18n("A6 with tear-off tab"); +// xgettext: no-c-format +i18n("Envelope C6"); +// xgettext: no-c-format +i18n("American Foolscap"); +// xgettext: no-c-format +i18n("Oufuku-Hagaki"); +// xgettext: no-c-format +i18n("16K"); +// xgettext: no-c-format +i18n("Executive (JIS)"); +// xgettext: no-c-format +i18n("Resolution, Quality, Ink Type, Media Type"); +// xgettext: no-c-format +i18n("Controlled by 'Printout Mode'"); +// xgettext: no-c-format +i18n("300 dpi, Color, Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Draft, Color, Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Draft, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Draft, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Photo, Photo + Color Cartr., Premium Paper"); +// xgettext: no-c-format +i18n("600x300 dpi, Best, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("Normal Color"); +// xgettext: no-c-format +i18n("Best Quality Color"); +// xgettext: no-c-format +i18n("Black and White"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color (Low Memory)"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Gray"); +// xgettext: no-c-format +i18n("Black correction (Cyan reduction)"); +// xgettext: no-c-format +i18n("Ink Reduction"); +// xgettext: no-c-format +i18n("25 %"); +// xgettext: no-c-format +i18n("50 %"); +// xgettext: no-c-format +i18n("No"); +// xgettext: no-c-format +i18n("Draft (Economy)"); +// xgettext: no-c-format +i18n("Draft Grayscale (Economy)"); +// xgettext: no-c-format +i18n("Normal Grayscale"); +// xgettext: no-c-format +i18n("High Quality"); +// xgettext: no-c-format +i18n("High Quality Grayscale"); +// xgettext: no-c-format +i18n("Photo"); +// xgettext: no-c-format +i18n("Photo Grayscale"); +// xgettext: no-c-format +i18n("C5"); +// xgettext: no-c-format +i18n("Commercial 10"); +// xgettext: no-c-format +i18n("DL"); +// xgettext: no-c-format +i18n("B5 ISO"); +// xgettext: no-c-format +i18n("B6 ISO"); +// xgettext: no-c-format +i18n("B7 ISO"); +// xgettext: no-c-format +i18n("B8 ISO"); +// xgettext: no-c-format +i18n("B9 ISO"); +// xgettext: no-c-format +i18n("B10 ISO"); +// xgettext: no-c-format +i18n("Monarch Envelope"); +// xgettext: no-c-format +i18n("Postcard"); +// xgettext: no-c-format +i18n("C7-6"); +// xgettext: no-c-format +i18n("Japanese long envelope #4"); +// xgettext: no-c-format +i18n("Hagaki Card"); +// xgettext: no-c-format +i18n("Small paperback"); +// xgettext: no-c-format +i18n("Penguin small paperback"); +// xgettext: no-c-format +i18n("A2 Invitation"); +// xgettext: no-c-format +i18n("Epson 4x6 Photo Paper"); +// xgettext: no-c-format +i18n("Japanese long envelope #3"); +// xgettext: no-c-format +i18n("B6-C4"); +// xgettext: no-c-format +i18n("Penguin large paperback"); +// xgettext: no-c-format +i18n("Crown Quarto"); +// xgettext: no-c-format +i18n("Large Crown Quarto"); +// xgettext: no-c-format +i18n("RA4"); +// xgettext: no-c-format +i18n("American foolscap"); +// xgettext: no-c-format +i18n("Bond"); +// xgettext: no-c-format +i18n("Glossy Photo"); +// xgettext: no-c-format +i18n("Transparencies"); +// xgettext: no-c-format +i18n("Ink Type"); +// xgettext: no-c-format +i18n("Color + Photo Cartridges"); +// xgettext: no-c-format +i18n("Four Color Standard"); +// xgettext: no-c-format +i18n("stpGamma"); +// xgettext: no-c-format +i18n("Density"); +// xgettext: no-c-format +i18n("0.12"); +// xgettext: no-c-format +i18n("0.14"); +// xgettext: no-c-format +i18n("0.16"); +// xgettext: no-c-format +i18n("0.18"); +// xgettext: no-c-format +i18n("0.22"); +// xgettext: no-c-format +i18n("0.24"); +// xgettext: no-c-format +i18n("0.26"); +// xgettext: no-c-format +i18n("0.28"); +// xgettext: no-c-format +i18n("0.32"); +// xgettext: no-c-format +i18n("0.34"); +// xgettext: no-c-format +i18n("0.36"); +// xgettext: no-c-format +i18n("0.38"); +// xgettext: no-c-format +i18n("0.42"); +// xgettext: no-c-format +i18n("0.44"); +// xgettext: no-c-format +i18n("0.46"); +// xgettext: no-c-format +i18n("0.48"); +// xgettext: no-c-format +i18n("0.52"); +// xgettext: no-c-format +i18n("0.54"); +// xgettext: no-c-format +i18n("0.56"); +// xgettext: no-c-format +i18n("0.58"); +// xgettext: no-c-format +i18n("0.62"); +// xgettext: no-c-format +i18n("0.64"); +// xgettext: no-c-format +i18n("0.66"); +// xgettext: no-c-format +i18n("0.68"); +// xgettext: no-c-format +i18n("0.72"); +// xgettext: no-c-format +i18n("0.74"); +// xgettext: no-c-format +i18n("0.76"); +// xgettext: no-c-format +i18n("0.78"); +// xgettext: no-c-format +i18n("0.82"); +// xgettext: no-c-format +i18n("0.84"); +// xgettext: no-c-format +i18n("0.86"); +// xgettext: no-c-format +i18n("0.88"); +// xgettext: no-c-format +i18n("0.92"); +// xgettext: no-c-format +i18n("0.94"); +// xgettext: no-c-format +i18n("0.96"); +// xgettext: no-c-format +i18n("0.98"); +// xgettext: no-c-format +i18n("1.02"); +// xgettext: no-c-format +i18n("1.04"); +// xgettext: no-c-format +i18n("1.06"); +// xgettext: no-c-format +i18n("1.08"); +// xgettext: no-c-format +i18n("1.12"); +// xgettext: no-c-format +i18n("1.14"); +// xgettext: no-c-format +i18n("1.16"); +// xgettext: no-c-format +i18n("1.18"); +// xgettext: no-c-format +i18n("1.22"); +// xgettext: no-c-format +i18n("1.24"); +// xgettext: no-c-format +i18n("1.26"); +// xgettext: no-c-format +i18n("1.28"); +// xgettext: no-c-format +i18n("1.32"); +// xgettext: no-c-format +i18n("1.34"); +// xgettext: no-c-format +i18n("1.36"); +// xgettext: no-c-format +i18n("1.38"); +// xgettext: no-c-format +i18n("1.42"); +// xgettext: no-c-format +i18n("1.44"); +// xgettext: no-c-format +i18n("1.46"); +// xgettext: no-c-format +i18n("1.48"); +// xgettext: no-c-format +i18n("1.52"); +// xgettext: no-c-format +i18n("1.54"); +// xgettext: no-c-format +i18n("1.56"); +// xgettext: no-c-format +i18n("1.58"); +// xgettext: no-c-format +i18n("1.62"); +// xgettext: no-c-format +i18n("1.64"); +// xgettext: no-c-format +i18n("1.66"); +// xgettext: no-c-format +i18n("1.68"); +// xgettext: no-c-format +i18n("1.72"); +// xgettext: no-c-format +i18n("1.74"); +// xgettext: no-c-format +i18n("1.76"); +// xgettext: no-c-format +i18n("1.78"); +// xgettext: no-c-format +i18n("1.82"); +// xgettext: no-c-format +i18n("1.84"); +// xgettext: no-c-format +i18n("1.86"); +// xgettext: no-c-format +i18n("1.88"); +// xgettext: no-c-format +i18n("1.92"); +// xgettext: no-c-format +i18n("1.94"); +// xgettext: no-c-format +i18n("1.96"); +// xgettext: no-c-format +i18n("1.98"); +// xgettext: no-c-format +i18n("stpBrightness"); +// xgettext: no-c-format +i18n("0.02"); +// xgettext: no-c-format +i18n("0.04"); +// xgettext: no-c-format +i18n("0.06"); +// xgettext: no-c-format +i18n("0.08"); +// xgettext: no-c-format +i18n("stpSaturation"); +// xgettext: no-c-format +i18n("0.0"); +// xgettext: no-c-format +i18n("0.1"); +// xgettext: no-c-format +i18n("0.2"); +// xgettext: no-c-format +i18n("0.3"); +// xgettext: no-c-format +i18n("0.4"); +// xgettext: no-c-format +i18n("0.5"); +// xgettext: no-c-format +i18n("0.6"); +// xgettext: no-c-format +i18n("0.7"); +// xgettext: no-c-format +i18n("0.8"); +// xgettext: no-c-format +i18n("0.9"); +// xgettext: no-c-format +i18n("1.0"); +// xgettext: no-c-format +i18n("1.1"); +// xgettext: no-c-format +i18n("1.2"); +// xgettext: no-c-format +i18n("1.3"); +// xgettext: no-c-format +i18n("1.4"); +// xgettext: no-c-format +i18n("1.5"); +// xgettext: no-c-format +i18n("1.6"); +// xgettext: no-c-format +i18n("1.7"); +// xgettext: no-c-format +i18n("1.8"); +// xgettext: no-c-format +i18n("1.9"); +// xgettext: no-c-format +i18n("2.0"); +// xgettext: no-c-format +i18n("2.1"); +// xgettext: no-c-format +i18n("2.2"); +// xgettext: no-c-format +i18n("2.3"); +// xgettext: no-c-format +i18n("2.4"); +// xgettext: no-c-format +i18n("2.5"); +// xgettext: no-c-format +i18n("2.6"); +// xgettext: no-c-format +i18n("2.7"); +// xgettext: no-c-format +i18n("2.8"); +// xgettext: no-c-format +i18n("2.9"); +// xgettext: no-c-format +i18n("3.0"); +// xgettext: no-c-format +i18n("3.1"); +// xgettext: no-c-format +i18n("3.2"); +// xgettext: no-c-format +i18n("3.3"); +// xgettext: no-c-format +i18n("3.4"); +// xgettext: no-c-format +i18n("3.5"); +// xgettext: no-c-format +i18n("3.6"); +// xgettext: no-c-format +i18n("3.7"); +// xgettext: no-c-format +i18n("3.8"); +// xgettext: no-c-format +i18n("3.9"); +// xgettext: no-c-format +i18n("4.0"); +// xgettext: no-c-format +i18n("4.1"); +// xgettext: no-c-format +i18n("4.2"); +// xgettext: no-c-format +i18n("4.3"); +// xgettext: no-c-format +i18n("4.4"); +// xgettext: no-c-format +i18n("4.5"); +// xgettext: no-c-format +i18n("4.6"); +// xgettext: no-c-format +i18n("4.7"); +// xgettext: no-c-format +i18n("4.8"); +// xgettext: no-c-format +i18n("4.9"); +// xgettext: no-c-format +i18n("5.0"); +// xgettext: no-c-format +i18n("5.1"); +// xgettext: no-c-format +i18n("5.2"); +// xgettext: no-c-format +i18n("5.3"); +// xgettext: no-c-format +i18n("5.4"); +// xgettext: no-c-format +i18n("5.5"); +// xgettext: no-c-format +i18n("5.6"); +// xgettext: no-c-format +i18n("5.7"); +// xgettext: no-c-format +i18n("5.8"); +// xgettext: no-c-format +i18n("5.9"); +// xgettext: no-c-format +i18n("6.0"); +// xgettext: no-c-format +i18n("6.1"); +// xgettext: no-c-format +i18n("6.2"); +// xgettext: no-c-format +i18n("6.3"); +// xgettext: no-c-format +i18n("6.4"); +// xgettext: no-c-format +i18n("6.5"); +// xgettext: no-c-format +i18n("6.6"); +// xgettext: no-c-format +i18n("6.7"); +// xgettext: no-c-format +i18n("6.8"); +// xgettext: no-c-format +i18n("6.9"); +// xgettext: no-c-format +i18n("7.0"); +// xgettext: no-c-format +i18n("7.1"); +// xgettext: no-c-format +i18n("7.2"); +// xgettext: no-c-format +i18n("7.3"); +// xgettext: no-c-format +i18n("7.4"); +// xgettext: no-c-format +i18n("7.5"); +// xgettext: no-c-format +i18n("7.6"); +// xgettext: no-c-format +i18n("7.7"); +// xgettext: no-c-format +i18n("7.8"); +// xgettext: no-c-format +i18n("7.9"); +// xgettext: no-c-format +i18n("8.0"); +// xgettext: no-c-format +i18n("8.1"); +// xgettext: no-c-format +i18n("8.2"); +// xgettext: no-c-format +i18n("8.3"); +// xgettext: no-c-format +i18n("8.4"); +// xgettext: no-c-format +i18n("8.5"); +// xgettext: no-c-format +i18n("8.6"); +// xgettext: no-c-format +i18n("8.7"); +// xgettext: no-c-format +i18n("8.8"); +// xgettext: no-c-format +i18n("8.9"); +// xgettext: no-c-format +i18n("9.0"); +// xgettext: no-c-format +i18n("Contrast Level"); +// xgettext: no-c-format +i18n("150 x 150 DPI"); +// xgettext: no-c-format +i18n("300 x 300 DPI"); +// xgettext: no-c-format +i18n("600 x 300 DPI"); +// xgettext: no-c-format +i18n("600 x 600 DPI"); +// xgettext: no-c-format +i18n("Output Type"); +// xgettext: no-c-format +i18n("Gray Scale"); +// xgettext: no-c-format +i18n("Continuous-tone photographs"); +// xgettext: no-c-format +i18n("Line art"); +// xgettext: no-c-format +i18n("Primarily solid colors or smooth gradients"); +// xgettext: no-c-format +i18n("Dither Algorithm"); +// xgettext: no-c-format +i18n("EvenTone"); +// xgettext: no-c-format +i18n("Fast"); +// xgettext: no-c-format +i18n("Raw CMYK"); +// xgettext: no-c-format +i18n("Not capable"); +// xgettext: no-c-format +i18n("Printer Default"); +// xgettext: no-c-format +i18n("GhostScript pre-filtering"); +// xgettext: no-c-format +i18n("Embed GhostScript fonts only"); +// xgettext: no-c-format +i18n("Convert to PS level 1"); +// xgettext: no-c-format +i18n("Convert to PS level 2"); +// xgettext: no-c-format +i18n("No pre-filtering"); +// xgettext: no-c-format +i18n("160x72 dpi"); +// xgettext: no-c-format +i18n("160x144 dpi"); +// xgettext: no-c-format +i18n("320x216 dpi"); +// xgettext: no-c-format +i18n("Input Slot"); +// xgettext: no-c-format +i18n("Standard"); +// xgettext: no-c-format +i18n("Printer default"); +// xgettext: no-c-format +i18n("PageSize"); +// xgettext: no-c-format +i18n("Tabloid"); +// xgettext: no-c-format +i18n("SRA4"); +// xgettext: no-c-format +i18n("C4"); +// xgettext: no-c-format +i18n("ArchA"); +// xgettext: no-c-format +i18n("European foolscap"); +// xgettext: no-c-format +i18n("Large Crown Octavo"); +// xgettext: no-c-format +i18n("Japanese Kaku envelope #4"); +// xgettext: no-c-format +i18n("ColorModel"); +// xgettext: no-c-format +i18n("Black & White"); +// xgettext: no-c-format +i18n("Back Print Film"); +// xgettext: no-c-format +i18n("Fabric Sheets"); +// xgettext: no-c-format +i18n("Envelope"); +// xgettext: no-c-format +i18n("High Resolution Paper"); +// xgettext: no-c-format +i18n("T-Shirt Transfers"); +// xgettext: no-c-format +i18n("High Gloss Film"); +// xgettext: no-c-format +i18n("Glossy Photo Paper"); +// xgettext: no-c-format +i18n("Glossy Photo Cards"); +// xgettext: no-c-format +i18n("Photo Paper Pro"); +// xgettext: no-c-format +i18n("Other"); +// xgettext: no-c-format +i18n("Auto Sheet Feeder"); +// xgettext: no-c-format +i18n("Manual with Pause"); +// xgettext: no-c-format +i18n("Manual without Pause"); +// xgettext: no-c-format +i18n("90x90 DPI"); +// xgettext: no-c-format +i18n("180x180 DPI"); +// xgettext: no-c-format +i18n("360x360 DPI"); +// xgettext: no-c-format +i18n("360x360 DPI DMT"); +// xgettext: no-c-format +i18n("720x360 DPI"); +// xgettext: no-c-format +i18n("Line Art"); +// xgettext: no-c-format +i18n("Solid Colors"); +// xgettext: no-c-format +i18n("Photograph"); +// xgettext: no-c-format +i18n("Black"); +// xgettext: no-c-format +i18n("Brightness"); +// xgettext: no-c-format +i18n("0.000"); +// xgettext: no-c-format +i18n("0.050"); +// xgettext: no-c-format +i18n("0.100"); +// xgettext: no-c-format +i18n("0.150"); +// xgettext: no-c-format +i18n("0.200"); +// xgettext: no-c-format +i18n("0.250"); +// xgettext: no-c-format +i18n("0.300"); +// xgettext: no-c-format +i18n("0.350"); +// xgettext: no-c-format +i18n("0.400"); +// xgettext: no-c-format +i18n("0.450"); +// xgettext: no-c-format +i18n("0.500"); +// xgettext: no-c-format +i18n("0.550"); +// xgettext: no-c-format +i18n("0.600"); +// xgettext: no-c-format +i18n("0.650"); +// xgettext: no-c-format +i18n("0.700"); +// xgettext: no-c-format +i18n("0.750"); +// xgettext: no-c-format +i18n("0.800"); +// xgettext: no-c-format +i18n("0.850"); +// xgettext: no-c-format +i18n("0.900"); +// xgettext: no-c-format +i18n("0.950"); +// xgettext: no-c-format +i18n("1.000"); +// xgettext: no-c-format +i18n("1.050"); +// xgettext: no-c-format +i18n("1.100"); +// xgettext: no-c-format +i18n("1.150"); +// xgettext: no-c-format +i18n("1.200"); +// xgettext: no-c-format +i18n("1.250"); +// xgettext: no-c-format +i18n("1.300"); +// xgettext: no-c-format +i18n("1.350"); +// xgettext: no-c-format +i18n("1.400"); +// xgettext: no-c-format +i18n("1.450"); +// xgettext: no-c-format +i18n("1.500"); +// xgettext: no-c-format +i18n("1.550"); +// xgettext: no-c-format +i18n("1.600"); +// xgettext: no-c-format +i18n("1.650"); +// xgettext: no-c-format +i18n("1.700"); +// xgettext: no-c-format +i18n("1.750"); +// xgettext: no-c-format +i18n("1.800"); +// xgettext: no-c-format +i18n("1.850"); +// xgettext: no-c-format +i18n("1.900"); +// xgettext: no-c-format +i18n("1.950"); +// xgettext: no-c-format +i18n("2.000"); +// xgettext: no-c-format +i18n("Contrast"); +// xgettext: no-c-format +i18n("2.050"); +// xgettext: no-c-format +i18n("2.100"); +// xgettext: no-c-format +i18n("2.150"); +// xgettext: no-c-format +i18n("2.200"); +// xgettext: no-c-format +i18n("2.250"); +// xgettext: no-c-format +i18n("2.300"); +// xgettext: no-c-format +i18n("2.350"); +// xgettext: no-c-format +i18n("2.400"); +// xgettext: no-c-format +i18n("2.450"); +// xgettext: no-c-format +i18n("2.500"); +// xgettext: no-c-format +i18n("2.550"); +// xgettext: no-c-format +i18n("2.600"); +// xgettext: no-c-format +i18n("2.650"); +// xgettext: no-c-format +i18n("2.700"); +// xgettext: no-c-format +i18n("2.750"); +// xgettext: no-c-format +i18n("2.800"); +// xgettext: no-c-format +i18n("2.850"); +// xgettext: no-c-format +i18n("2.900"); +// xgettext: no-c-format +i18n("2.950"); +// xgettext: no-c-format +i18n("3.000"); +// xgettext: no-c-format +i18n("3.050"); +// xgettext: no-c-format +i18n("3.100"); +// xgettext: no-c-format +i18n("3.150"); +// xgettext: no-c-format +i18n("3.200"); +// xgettext: no-c-format +i18n("3.250"); +// xgettext: no-c-format +i18n("3.300"); +// xgettext: no-c-format +i18n("3.350"); +// xgettext: no-c-format +i18n("3.400"); +// xgettext: no-c-format +i18n("3.450"); +// xgettext: no-c-format +i18n("3.500"); +// xgettext: no-c-format +i18n("3.550"); +// xgettext: no-c-format +i18n("3.600"); +// xgettext: no-c-format +i18n("3.650"); +// xgettext: no-c-format +i18n("3.700"); +// xgettext: no-c-format +i18n("3.750"); +// xgettext: no-c-format +i18n("3.800"); +// xgettext: no-c-format +i18n("3.850"); +// xgettext: no-c-format +i18n("3.900"); +// xgettext: no-c-format +i18n("3.950"); +// xgettext: no-c-format +i18n("4.000"); +// xgettext: no-c-format +i18n("Cyan"); +// xgettext: no-c-format +i18n("Magenta"); +// xgettext: no-c-format +i18n("Yellow"); +// xgettext: no-c-format +i18n("Saturation"); +// xgettext: no-c-format +i18n("4.050"); +// xgettext: no-c-format +i18n("4.100"); +// xgettext: no-c-format +i18n("4.150"); +// xgettext: no-c-format +i18n("4.200"); +// xgettext: no-c-format +i18n("4.250"); +// xgettext: no-c-format +i18n("4.300"); +// xgettext: no-c-format +i18n("4.350"); +// xgettext: no-c-format +i18n("4.400"); +// xgettext: no-c-format +i18n("4.450"); +// xgettext: no-c-format +i18n("4.500"); +// xgettext: no-c-format +i18n("4.550"); +// xgettext: no-c-format +i18n("4.600"); +// xgettext: no-c-format +i18n("4.650"); +// xgettext: no-c-format +i18n("4.700"); +// xgettext: no-c-format +i18n("4.750"); +// xgettext: no-c-format +i18n("4.800"); +// xgettext: no-c-format +i18n("4.850"); +// xgettext: no-c-format +i18n("4.900"); +// xgettext: no-c-format +i18n("4.950"); +// xgettext: no-c-format +i18n("5.000"); +// xgettext: no-c-format +i18n("5.050"); +// xgettext: no-c-format +i18n("5.100"); +// xgettext: no-c-format +i18n("5.150"); +// xgettext: no-c-format +i18n("5.200"); +// xgettext: no-c-format +i18n("5.250"); +// xgettext: no-c-format +i18n("5.300"); +// xgettext: no-c-format +i18n("5.350"); +// xgettext: no-c-format +i18n("5.400"); +// xgettext: no-c-format +i18n("5.450"); +// xgettext: no-c-format +i18n("5.500"); +// xgettext: no-c-format +i18n("5.550"); +// xgettext: no-c-format +i18n("5.600"); +// xgettext: no-c-format +i18n("5.650"); +// xgettext: no-c-format +i18n("5.700"); +// xgettext: no-c-format +i18n("5.750"); +// xgettext: no-c-format +i18n("5.800"); +// xgettext: no-c-format +i18n("5.850"); +// xgettext: no-c-format +i18n("5.900"); +// xgettext: no-c-format +i18n("5.950"); +// xgettext: no-c-format +i18n("6.000"); +// xgettext: no-c-format +i18n("6.050"); +// xgettext: no-c-format +i18n("6.100"); +// xgettext: no-c-format +i18n("6.150"); +// xgettext: no-c-format +i18n("6.200"); +// xgettext: no-c-format +i18n("6.250"); +// xgettext: no-c-format +i18n("6.300"); +// xgettext: no-c-format +i18n("6.350"); +// xgettext: no-c-format +i18n("6.400"); +// xgettext: no-c-format +i18n("6.450"); +// xgettext: no-c-format +i18n("6.500"); +// xgettext: no-c-format +i18n("6.550"); +// xgettext: no-c-format +i18n("6.600"); +// xgettext: no-c-format +i18n("6.650"); +// xgettext: no-c-format +i18n("6.700"); +// xgettext: no-c-format +i18n("6.750"); +// xgettext: no-c-format +i18n("6.800"); +// xgettext: no-c-format +i18n("6.850"); +// xgettext: no-c-format +i18n("6.900"); +// xgettext: no-c-format +i18n("6.950"); +// xgettext: no-c-format +i18n("7.000"); +// xgettext: no-c-format +i18n("7.050"); +// xgettext: no-c-format +i18n("7.100"); +// xgettext: no-c-format +i18n("7.150"); +// xgettext: no-c-format +i18n("7.200"); +// xgettext: no-c-format +i18n("7.250"); +// xgettext: no-c-format +i18n("7.300"); +// xgettext: no-c-format +i18n("7.350"); +// xgettext: no-c-format +i18n("7.400"); +// xgettext: no-c-format +i18n("7.450"); +// xgettext: no-c-format +i18n("7.500"); +// xgettext: no-c-format +i18n("7.550"); +// xgettext: no-c-format +i18n("7.600"); +// xgettext: no-c-format +i18n("7.650"); +// xgettext: no-c-format +i18n("7.700"); +// xgettext: no-c-format +i18n("7.750"); +// xgettext: no-c-format +i18n("7.800"); +// xgettext: no-c-format +i18n("7.850"); +// xgettext: no-c-format +i18n("7.900"); +// xgettext: no-c-format +i18n("7.950"); +// xgettext: no-c-format +i18n("8.000"); +// xgettext: no-c-format +i18n("8.050"); +// xgettext: no-c-format +i18n("8.100"); +// xgettext: no-c-format +i18n("8.150"); +// xgettext: no-c-format +i18n("8.200"); +// xgettext: no-c-format +i18n("8.250"); +// xgettext: no-c-format +i18n("8.300"); +// xgettext: no-c-format +i18n("8.350"); +// xgettext: no-c-format +i18n("8.400"); +// xgettext: no-c-format +i18n("8.450"); +// xgettext: no-c-format +i18n("8.500"); +// xgettext: no-c-format +i18n("8.550"); +// xgettext: no-c-format +i18n("8.600"); +// xgettext: no-c-format +i18n("8.650"); +// xgettext: no-c-format +i18n("8.700"); +// xgettext: no-c-format +i18n("8.750"); +// xgettext: no-c-format +i18n("8.800"); +// xgettext: no-c-format +i18n("8.850"); +// xgettext: no-c-format +i18n("8.900"); +// xgettext: no-c-format +i18n("8.950"); +// xgettext: no-c-format +i18n("9.000"); +// xgettext: no-c-format +i18n("720x720 DPI"); +// xgettext: no-c-format +i18n("1440x720 DPI"); +// xgettext: no-c-format +i18n("Photo CcMmY Color"); +// xgettext: no-c-format +i18n("Photo CcMmYK Color"); +// xgettext: no-c-format +i18n("1200x1200 DPI"); +// xgettext: no-c-format +i18n("12x18"); +// xgettext: no-c-format +i18n("Super B 13x19"); +// xgettext: no-c-format +i18n("20x24"); +// xgettext: no-c-format +i18n("20x30"); +// xgettext: no-c-format +i18n("22x30"); +// xgettext: no-c-format +i18n("24x30"); +// xgettext: no-c-format +i18n("24x36"); +// xgettext: no-c-format +i18n("30x40"); +// xgettext: no-c-format +i18n("A0"); +// xgettext: no-c-format +i18n("A1"); +// xgettext: no-c-format +i18n("A2"); +// xgettext: no-c-format +i18n("RA0"); +// xgettext: no-c-format +i18n("RA1"); +// xgettext: no-c-format +i18n("RA2"); +// xgettext: no-c-format +i18n("RA3"); +// xgettext: no-c-format +i18n("SRA0"); +// xgettext: no-c-format +i18n("SRA1"); +// xgettext: no-c-format +i18n("SRA2"); +// xgettext: no-c-format +i18n("B0 ISO"); +// xgettext: no-c-format +i18n("B1 ISO"); +// xgettext: no-c-format +i18n("B2 ISO"); +// xgettext: no-c-format +i18n("B3 ISO"); +// xgettext: no-c-format +i18n("B0 JIS"); +// xgettext: no-c-format +i18n("B1 JIS"); +// xgettext: no-c-format +i18n("B2 JIS"); +// xgettext: no-c-format +i18n("B3 JIS"); +// xgettext: no-c-format +i18n("C0"); +// xgettext: no-c-format +i18n("C1"); +// xgettext: no-c-format +i18n("C2"); +// xgettext: no-c-format +i18n("C3"); +// xgettext: no-c-format +i18n("ArchA Transverse"); +// xgettext: no-c-format +i18n("ArchB"); +// xgettext: no-c-format +i18n("ArchB Transverse"); +// xgettext: no-c-format +i18n("ArchC"); +// xgettext: no-c-format +i18n("ArchC Transverse"); +// xgettext: no-c-format +i18n("ArchD"); +// xgettext: no-c-format +i18n("ArchD Transverse"); +// xgettext: no-c-format +i18n("ArchE"); +// xgettext: no-c-format +i18n("Plain Paper Fast Load"); +// xgettext: no-c-format +i18n("Glossy Film"); +// xgettext: no-c-format +i18n("Envelopes"); +// xgettext: no-c-format +i18n("Back Light Film"); +// xgettext: no-c-format +i18n("Matte Paper"); +// xgettext: no-c-format +i18n("Inkjet Paper"); +// xgettext: no-c-format +i18n("Photo Quality Inkjet Paper"); +// xgettext: no-c-format +i18n("Premium Glossy Photo Paper"); +// xgettext: no-c-format +i18n("Premium Luster Photo Paper"); +// xgettext: no-c-format +i18n("Photo Quality Glossy Paper"); +// xgettext: no-c-format +i18n("Ilford Heavy Paper"); +// xgettext: no-c-format +i18n("ColorLife Paper"); +// xgettext: no-c-format +i18n("Roll Feed"); +// xgettext: no-c-format +i18n("360 x 90 DPI Fast Economy Draft"); +// xgettext: no-c-format +i18n("360 x 120 DPI Economy Draft"); +// xgettext: no-c-format +i18n("180 DPI Economy Draft"); +// xgettext: no-c-format +i18n("360 x 240 DPI Draft"); +// xgettext: no-c-format +i18n("360 x 180 DPI Draft"); +// xgettext: no-c-format +i18n("360 DPI Microweave"); +// xgettext: no-c-format +i18n("360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI FOL2"); +// xgettext: no-c-format +i18n("360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI MW2"); +// xgettext: no-c-format +i18n("360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI"); +// xgettext: no-c-format +i18n("720 x 360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Microweave"); +// xgettext: no-c-format +i18n("720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Four Pass"); +// xgettext: no-c-format +i18n("720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("Six Color Photo"); +// xgettext: no-c-format +i18n("Five Color Photo Composite"); +// xgettext: no-c-format +i18n("Three Color Composite"); +// xgettext: no-c-format +i18n("Quadtone"); +// xgettext: no-c-format +i18n("720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI High Quality"); +// xgettext: no-c-format +i18n("720 DPI High Quality Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("1440 x 720 DPI"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("2880 x 720 DPI"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("Roll Feed (cut each page)"); +// xgettext: no-c-format +i18n("Roll Feed (do not cut)"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Highest Quality"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI"); +// xgettext: no-c-format +i18n("Seven Color Photo"); +// xgettext: no-c-format +i18n("Two Level Grayscale"); +// xgettext: no-c-format +i18n("Cut Sheet Bin 1"); +// xgettext: no-c-format +i18n("Cut Sheet Bin 2"); +// xgettext: no-c-format +i18n("Cut Sheet Autoselect"); +// xgettext: no-c-format +i18n("Manual Selection"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Microweave"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 720 DPI FOL"); +// xgettext: no-c-format +i18n("2880 x 720 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Four Pass"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Microweave"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI FOL"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Four Pass"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Microweave"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI FOL"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Four Pass"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("Seven Color Enhanced"); +// xgettext: no-c-format +i18n("Six Color Enhanced Composite"); +// xgettext: no-c-format +i18n("Plain"); +// xgettext: no-c-format +i18n("300 DPI x 600 DPI"); +// xgettext: no-c-format +i18n("600 DPI high quality"); +// xgettext: no-c-format +i18n("600 DPI Unidirectional"); +// xgettext: no-c-format +i18n("1200 DPI high quality"); +// xgettext: no-c-format +i18n("1200 DPI highest quality"); +// xgettext: no-c-format +i18n("1200 DPI Unidirectional"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI high quality"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI highest quality"); +// xgettext: no-c-format +i18n("600x600 DPI monochrome"); +// xgettext: no-c-format +i18n("Quick-dry Photo"); +// xgettext: no-c-format +i18n("Quick-dry Transparency"); +// xgettext: no-c-format +i18n("Portable Sheet Feeder"); +// xgettext: no-c-format +i18n("Desktop Sheet Feeder"); +// xgettext: no-c-format +i18n("Color + Black Cartridges"); +// xgettext: no-c-format +i18n("Upper Tray"); +// xgettext: no-c-format +i18n("Lower Tray"); +// xgettext: no-c-format +i18n("Dual"); +// xgettext: no-c-format +i18n("Thicker Paper"); +// xgettext: no-c-format +i18n("Thin Paper"); +// xgettext: no-c-format +i18n("Toner Saving"); +// xgettext: no-c-format +i18n("High (50%)"); +// xgettext: no-c-format +i18n("Low (25%)"); +// xgettext: no-c-format +i18n("Standard printing"); +// xgettext: no-c-format +i18n("Floyd-Steinberg dithered printing"); +// xgettext: no-c-format +i18n("Tray 5"); +// xgettext: no-c-format +i18n("2400x600 DPI"); +// xgettext: no-c-format +i18n("Draft Grayscale"); +// xgettext: no-c-format +i18n("Printer Model"); +// xgettext: no-c-format +i18n("HP LaserJet II series"); +// xgettext: no-c-format +i18n("HP LaserJet III series"); +// xgettext: no-c-format +i18n("8K"); +// xgettext: no-c-format +i18n("Large Capacity Tray"); +// xgettext: no-c-format +i18n("Multi Purpose Tray"); +// xgettext: no-c-format +i18n("300 dpi, Draft, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("180x360 dpi"); +// xgettext: no-c-format +i18n("360x360 dpi"); +// xgettext: no-c-format +i18n("180 x 180 DPI"); +// xgettext: no-c-format +i18n("360 x 360 DPI"); +// xgettext: no-c-format +i18n("Plain paper"); +// xgettext: no-c-format +i18n("Bond paper"); +// xgettext: no-c-format +i18n("Media Weight"); +// xgettext: no-c-format +i18n("Normal paper"); +// xgettext: no-c-format +i18n("Thick paper"); +// xgettext: no-c-format +i18n("90 DPI"); +// xgettext: no-c-format +i18n("Ghostscript Bits Per Pixel"); +// xgettext: no-c-format +i18n("Monochrome (1bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript dithering (8bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript FS dithering (16bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (24 bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (32 bpp)"); +// xgettext: no-c-format +i18n("Color Model"); +// xgettext: no-c-format +i18n("Four-color CMYK"); +// xgettext: no-c-format +i18n("Greyscale"); +// xgettext: no-c-format +i18n("Three-color RGB"); +// xgettext: no-c-format +i18n("Colours to be used"); +// xgettext: no-c-format +i18n("Cyan only"); +// xgettext: no-c-format +i18n("Cyan, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Cyan, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Yellow, Black"); +// xgettext: no-c-format +i18n("Black only"); +// xgettext: no-c-format +i18n("Black for any colour"); +// xgettext: no-c-format +i18n("Magenta only"); +// xgettext: no-c-format +i18n("Magenta, Black"); +// xgettext: no-c-format +i18n("Magenta, Yellow"); +// xgettext: no-c-format +i18n("Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Yellow only"); +// xgettext: no-c-format +i18n("Yellow, Black"); +// xgettext: no-c-format +i18n("90 x 90 DPI"); +// xgettext: no-c-format +i18n("Resolution, Media Type"); +// xgettext: no-c-format +i18n("360x360dpi, back print film"); +// xgettext: no-c-format +i18n("360x360dpi, coated paper"); +// xgettext: no-c-format +i18n("360x360dpi, fabric sheet"); +// xgettext: no-c-format +i18n("360x360dpi, glossy paper"); +// xgettext: no-c-format +i18n("360x360dpi, high gloss film"); +// xgettext: no-c-format +i18n("360x360dpi, high resolution paper"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper, high speed"); +// xgettext: no-c-format +i18n("360x360dpi, transparency film"); +// xgettext: no-c-format +i18n("Very High Quality"); +// xgettext: no-c-format +i18n("Very High Quality Grayscale"); +// xgettext: no-c-format +i18n("720 x 720 DPI"); +// xgettext: no-c-format +i18n("360 dpi"); +// xgettext: no-c-format +i18n("720 dpi"); +// xgettext: no-c-format +i18n("Low Quality"); +// xgettext: no-c-format +i18n("720x720dpi, back print film"); +// xgettext: no-c-format +i18n("720x720dpi, coated paper"); +// xgettext: no-c-format +i18n("720x720dpi, glossy paper"); +// xgettext: no-c-format +i18n("720x720dpi, high-gloss paper"); +// xgettext: no-c-format +i18n("720x720dpi, high resolution paper"); +// xgettext: no-c-format +i18n("720x720dpi, plain paper"); +// xgettext: no-c-format +i18n("720x720dpi, transparency film"); +// xgettext: no-c-format +i18n("1200 x 600 DPI"); +// xgettext: no-c-format +i18n("Resolution, Quality, Media Type"); +// xgettext: no-c-format +i18n("600x600dpi, iron-on transfer sheets, normal quality"); +// xgettext: no-c-format +i18n("600x600dpi, plain paper, normal quality"); +// xgettext: no-c-format +i18n("600x600dpi, transparencies, normal quality"); +// xgettext: no-c-format +i18n("1200x1200dpi, glossy photo cards, high quality"); +// xgettext: no-c-format +i18n("1200x1200dpi, high gloss photo paper, high quality"); +// xgettext: no-c-format +i18n("1200x1200dpi, professional photo paper, highest quality"); +// xgettext: no-c-format +i18n("1200 x 1200 DPI"); +// xgettext: no-c-format +i18n("Number of Copies"); +// xgettext: no-c-format +i18n("REt Setting"); +// xgettext: no-c-format +i18n("Halftoning"); +// xgettext: no-c-format +i18n("HP LaserJet 4L"); +// xgettext: no-c-format +i18n("Shift output horizontally (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Shift output vertically (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Full Paint"); +// xgettext: no-c-format +i18n("FullPaint"); +// xgettext: no-c-format +i18n("PartialPaint"); +// xgettext: no-c-format +i18n("Printer's paper size"); +// xgettext: no-c-format +i18n("IgnoreSize"); +// xgettext: no-c-format +i18n("RequireSize"); +// xgettext: no-c-format +i18n("240x240 DPI"); +// xgettext: no-c-format +i18n("300x300 dpi"); +// xgettext: no-c-format +i18n("300x600 dpi"); +// xgettext: no-c-format +i18n("600x600 dpi"); +// xgettext: no-c-format +i18n("600x1200 dpi"); +// xgettext: no-c-format +i18n("1200x1200 dpi"); +// xgettext: no-c-format +i18n("Head Separation"); +// xgettext: no-c-format +i18n("300x600 DPI"); +// xgettext: no-c-format +i18n("300x1200 DPI"); +// xgettext: no-c-format +i18n("600x1200 DPI"); +// xgettext: no-c-format +i18n("1200x300 DPI"); +// xgettext: no-c-format +i18n("Photo Quality Colour (6-ink)"); +// xgettext: no-c-format +i18n("Normal Quality Colour (4-ink)"); +// xgettext: no-c-format +i18n("Bidirectional printing"); +// xgettext: no-c-format +i18n("off"); +// xgettext: no-c-format +i18n("on"); +// xgettext: no-c-format +i18n("Horz. align. betw. cartr."); +// xgettext: no-c-format +i18n("Vert. align. betw. cartr."); +// xgettext: no-c-format +i18n("Distance even/odd nozzles left cartr."); +// xgettext: no-c-format +i18n("Distance even/odd nozzles right cartr."); +// xgettext: no-c-format +i18n("Number of passes per line"); +// xgettext: no-c-format +i18n("Paper Source"); +// xgettext: no-c-format +i18n("Tray 8"); +// xgettext: no-c-format +i18n("Tray 9"); +// xgettext: no-c-format +i18n("Tray 10"); +// xgettext: no-c-format +i18n("Tray 11"); +// xgettext: no-c-format +i18n("Tray 12"); +// xgettext: no-c-format +i18n("Tray 13"); +// xgettext: no-c-format +i18n("Tray 14"); +// xgettext: no-c-format +i18n("Tray 15"); +// xgettext: no-c-format +i18n("Page Output"); +// xgettext: no-c-format +i18n("FaceUp"); +// xgettext: no-c-format +i18n("FaceDown"); +// xgettext: no-c-format +i18n("Thick Paper/Card Board"); +// xgettext: no-c-format +i18n("Toner Density"); +// xgettext: no-c-format +i18n("TonerSaving"); +// xgettext: no-c-format +i18n("Output Order"); +// xgettext: no-c-format +i18n("Collate"); +// xgettext: no-c-format +i18n("Orientation"); +// xgettext: no-c-format +i18n("Landscape"); +// xgettext: no-c-format +i18n("Portrait"); +// xgettext: no-c-format +i18n("RIT Control"); +// xgettext: no-c-format +i18n("RITOff"); +// xgettext: no-c-format +i18n("RITOn"); +// xgettext: no-c-format +i18n("Monochrome, fast"); +// xgettext: no-c-format +i18n("Monochrome, Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Head motion"); +// xgettext: no-c-format +i18n("Unidirectional"); +// xgettext: no-c-format +i18n("Bidirectional"); +// xgettext: no-c-format +i18n("Weaving"); +// xgettext: no-c-format +i18n("Microweave (Printer internal)"); +// xgettext: no-c-format +i18n("Softweave (Driver internal)"); +// xgettext: no-c-format +i18n("ESC/P2 Encoding"); +// xgettext: no-c-format +i18n("Delta Row"); +// xgettext: no-c-format +i18n("Run Length"); +// xgettext: no-c-format +i18n("Uncompressed"); +// xgettext: no-c-format +i18n("Preconfiguration file"); +// xgettext: no-c-format +i18n("stcolor"); +// xgettext: no-c-format +i18n("none"); +// xgettext: no-c-format +i18n("Initialization values for dithering"); +// xgettext: no-c-format +i18n("Uniform"); +// xgettext: no-c-format +i18n("Random"); +// xgettext: no-c-format +i18n("360 x 120 DPI"); +// xgettext: no-c-format +i18n("360 x 240 DPI"); +// xgettext: no-c-format +i18n("360 x 180 DPI"); +// xgettext: no-c-format +i18n("360 x 90 DPI"); +// xgettext: no-c-format +i18n("360x360dpi, 4-bit, PostScript halftoning, weaved"); +// xgettext: no-c-format +i18n("360x360dpi, 32-bit CMYK"); +// xgettext: no-c-format +i18n("720x720dpi, 32-bit CMYK, weaved"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, better"); +// xgettext: no-c-format +i18n("Colour, fast, CMYK"); +// xgettext: no-c-format +i18n("Colour, modif. Floyd-Steinberg, CMYK, faster"); +// xgettext: no-c-format +i18n("Colour, fast, RGB"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, RGB"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, simpler"); +// xgettext: no-c-format +i18n("Colour, Stefan-Singer algorithm, RGB"); +// xgettext: no-c-format +i18n("360 dpi, plain paper"); +// xgettext: no-c-format +i18n("720 dpi, plain paper"); +// xgettext: no-c-format +i18n("1440x720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("Resolution, Color Mode, Media Type"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("720x720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("720x720dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("1440x720dpi, inkjet paper, grayscale"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper low quality"); +// xgettext: no-c-format +i18n("360x360dpi"); +// xgettext: no-c-format +i18n("720x720dpi"); +// xgettext: no-c-format +i18n("F4"); +// xgettext: no-c-format +i18n("Government Legal"); +// xgettext: no-c-format +i18n("Government Letter"); +// xgettext: no-c-format +i18n("Half Letter"); +// xgettext: no-c-format +i18n("TonerSave"); +// xgettext: no-c-format +i18n("Dpi"); +// xgettext: no-c-format +i18n("600x300 dpi (Class600)"); +// xgettext: no-c-format +i18n("1200x600 dpi (Class1200)"); +// xgettext: no-c-format +i18n("Ritech"); +// xgettext: no-c-format +i18n("Resolution, Color Mode"); +// xgettext: no-c-format +i18n("180x180dpi, Grayscale, plain paper"); +// xgettext: no-c-format +i18n("360x360dpi, Color, plain paper"); +// xgettext: no-c-format +i18n("360x360dpi, Grayscale, plain paper"); +// xgettext: no-c-format +i18n("360x720 DPI"); +// xgettext: no-c-format +i18n("400x400 DPI"); +// xgettext: no-c-format +i18n("300 dpi, Best, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Best, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("Super B"); +// xgettext: no-c-format +i18n("Manual Feeding"); +// xgettext: no-c-format +i18n("Paper type"); +// xgettext: no-c-format +i18n("Glossy film"); +// xgettext: no-c-format +i18n("Special paper"); +// xgettext: no-c-format +i18n("Transparency film"); +// xgettext: no-c-format +i18n("Printing Quality"); +// xgettext: no-c-format +i18n("RET (Resolution Enhancement)"); +// xgettext: no-c-format +i18n("Draft (auto-detect paper type)"); +// xgettext: no-c-format +i18n("Photo (on photo paper)"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("600 dpi, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Photo, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Draft Grayscale (auto-detect paper type)"); +// xgettext: no-c-format +i18n("Normal (auto-detect paper type)"); +// xgettext: no-c-format +i18n("Normal Grayscale (auto-detect paper type)"); +// xgettext: no-c-format +i18n("High Quality (auto-detect paper type)"); +// xgettext: no-c-format +i18n("High Quality Grayscale (auto-detect paper type)"); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Binding for Double-Sided Pr."); +// xgettext: no-c-format +i18n("Long Edge"); +// xgettext: no-c-format +i18n("Short Edge"); +// xgettext: no-c-format +i18n("Auto"); +// xgettext: no-c-format +i18n("Contone (4096 colors)"); +// xgettext: no-c-format +i18n("2A"); +// xgettext: no-c-format +i18n("4A"); +// xgettext: no-c-format +i18n("Arch A"); +// xgettext: no-c-format +i18n("Arch B"); +// xgettext: no-c-format +i18n("Arch C"); +// xgettext: no-c-format +i18n("Arch D"); +// xgettext: no-c-format +i18n("Arch E"); +// xgettext: no-c-format +i18n("B0 (ISO)"); +// xgettext: no-c-format +i18n("B1 (ISO)"); +// xgettext: no-c-format +i18n("B2 (ISO)"); +// xgettext: no-c-format +i18n("B3 (ISO)"); +// xgettext: no-c-format +i18n("B4 (ISO)"); +// xgettext: no-c-format +i18n("B5 (ISO)"); +// xgettext: no-c-format +i18n("B0 (JIS)"); +// xgettext: no-c-format +i18n("B1 (JIS)"); +// xgettext: no-c-format +i18n("B2 (JIS)"); +// xgettext: no-c-format +i18n("B3 (JIS)"); +// xgettext: no-c-format +i18n("Super A"); +// xgettext: no-c-format +i18n("Tabloid Extra"); +// xgettext: no-c-format +i18n("EconoFast Mode"); +// xgettext: no-c-format +i18n("Color (Color Cartridge, for photos)"); +// xgettext: no-c-format +i18n("Color (both cartridges, for text with images)"); +// xgettext: no-c-format +i18n("Grayscale (black cartridge)"); +// xgettext: no-c-format +i18n("Dithering Algorithm"); +// xgettext: no-c-format +i18n("Floyd Steinberg (higher quality)"); +// xgettext: no-c-format +i18n("Ordered (faster)"); +// xgettext: no-c-format +i18n("Off (better quality)"); +// xgettext: no-c-format +i18n("On (faster)"); +// xgettext: no-c-format +i18n("Black ink density adjustment."); +// xgettext: no-c-format +i18n("Bottom Margin"); +// xgettext: no-c-format +i18n("Left Margin"); +// xgettext: no-c-format +i18n("Right Margin"); +// xgettext: no-c-format +i18n("Top Margin"); +// xgettext: no-c-format +i18n("X Offset"); +// xgettext: no-c-format +i18n("Y Offset"); +// xgettext: no-c-format +i18n("Gamma Correction File"); +// xgettext: no-c-format +i18n("Default (/etc/pnm2ppa.gamma)"); +// xgettext: no-c-format +i18n("Normal Quality (/etc/pnm2ppa.gamma_normal)"); +// xgettext: no-c-format +i18n("Best Quality (/etc/pnm2ppa.gamma_best)"); +// xgettext: no-c-format +i18n("None"); +// xgettext: no-c-format +i18n("GhostScript Rendering Format"); +// xgettext: no-c-format +i18n("Gamma Correction"); +// xgettext: no-c-format +i18n("Gamma Black"); +// xgettext: no-c-format +i18n("Gamma Cyan"); +// xgettext: no-c-format +i18n("Gamma Magenta"); +// xgettext: no-c-format +i18n("Gamma Yellow"); +// xgettext: no-c-format +i18n("Draft Grayscale (Black cartridge)"); +// xgettext: no-c-format +i18n("Normal Grayscale (Black cartridge)"); +// xgettext: no-c-format +i18n("High Quality Grayscale (Black cartridge)"); +// xgettext: no-c-format +i18n("600x300 dpi, Best, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Color, Full Bleed, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Color, Full Bleed, Black + Color Cartr."); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Full Bleed, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Photo (Color cartridge, on photo paper)"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("600 dpi, Photo, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Glossy"); +// xgettext: no-c-format +i18n("Paper"); +// xgettext: no-c-format +i18n("Behaviour when Toner Low"); +// xgettext: no-c-format +i18n("Output Bin"); +// xgettext: no-c-format +i18n("Upper"); +// xgettext: no-c-format +i18n("Lower"); +// xgettext: no-c-format +i18n("MP Tray"); +// xgettext: no-c-format +i18n("300 dpi, Color, Full Bleed, Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Color, Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Color, Full Bleed, Color Cartr."); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Full Bleed, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("150 dpi, Best, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Draft, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Draft, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("2400x1200 DPI"); +// xgettext: no-c-format +i18n("High Quality (Color cartridge)"); +// xgettext: no-c-format +i18n("Cover for HP DeskJet 3425"); +// xgettext: no-c-format +i18n("75x75 dpi"); +// xgettext: no-c-format +i18n("150x150 dpi"); +// xgettext: no-c-format +i18n("Black cartridge"); +// xgettext: no-c-format +i18n("Color cartridge"); +// xgettext: no-c-format +i18n("Folio"); +// xgettext: no-c-format +i18n("Normal Paper"); +// xgettext: no-c-format +i18n("Card Stock"); +// xgettext: no-c-format +i18n("Adhesive Labels"); +// xgettext: no-c-format +i18n("Pre-printed paper"); +// xgettext: no-c-format +i18n("Allow use of 'Reprint' button"); +// xgettext: no-c-format +i18n("Yes"); +// xgettext: no-c-format +i18n("Altitude Correction"); +// xgettext: no-c-format +i18n("High Altitude (Low Air Pressure)"); +// xgettext: no-c-format +i18n("Low Altitude (High Air Pressure)"); +// xgettext: no-c-format +i18n("Reprint Page after Paper Jam"); +// xgettext: no-c-format +i18n("Page Timeout"); +// xgettext: no-c-format +i18n("15 sec"); +// xgettext: no-c-format +i18n("30 sec"); +// xgettext: no-c-format +i18n("45 sec"); +// xgettext: no-c-format +i18n("Idle time to start power save mode (min)"); +// xgettext: no-c-format +i18n("5 min"); +// xgettext: no-c-format +i18n("10 min"); +// xgettext: no-c-format +i18n("15 min"); +// xgettext: no-c-format +i18n("30 min"); +// xgettext: no-c-format +i18n("45 min"); +// xgettext: no-c-format +i18n("60 min"); +// xgettext: no-c-format +i18n("Use Power Saving Mode"); +// xgettext: no-c-format +i18n("Dithering PPI"); +// xgettext: no-c-format +i18n("300 x 600 DPI"); +// xgettext: no-c-format +i18n("2400 x 1200 DPI"); +// xgettext: no-c-format +i18n("2-passes x-weaving"); +// xgettext: no-c-format +i18n("3-passes x-weaving"); +// xgettext: no-c-format +i18n("320x320 DPI"); +// xgettext: no-c-format +i18n("160x160 DPI"); +// xgettext: no-c-format +i18n("Darkness"); +// xgettext: no-c-format +i18n("Darkest"); +// xgettext: no-c-format +i18n("Lightest"); +// xgettext: no-c-format +i18n("Black toner saving"); +// xgettext: no-c-format +i18n("DeskJet"); +// xgettext: no-c-format +i18n("DeskJet 310"); +// xgettext: no-c-format +i18n("DeskJet 320"); +// xgettext: no-c-format +i18n("DeskJet 340"); +// xgettext: no-c-format +i18n("DeskJet 400"); +// xgettext: no-c-format +i18n("DeskJet 600"); +// xgettext: no-c-format +i18n("DeskJet 660C"); +// xgettext: no-c-format +i18n("DeskJet 670C"); +// xgettext: no-c-format +i18n("DeskJet 680C"); +// xgettext: no-c-format +i18n("DeskJet 690C"); +// xgettext: no-c-format +i18n("DeskJet 870C"); +// xgettext: no-c-format +i18n("DeskJet 890C"); +// xgettext: no-c-format +i18n("DeskJet 970C with Duplexer"); +// xgettext: no-c-format +i18n("DeskJet 1120C"); +// xgettext: no-c-format +i18n("DeskJet Plus"); +// xgettext: no-c-format +i18n("DeskJet Portable"); +// xgettext: no-c-format +i18n("Olivetti (Black sent after CMY)"); +// xgettext: no-c-format +i18n("Unspecified Model"); +// xgettext: no-c-format +i18n("Unspecified Old Model"); +// xgettext: no-c-format +i18n("Configure Every Page"); +// xgettext: no-c-format +i18n("Media Size"); +// xgettext: no-c-format +i18n("Letter"); +// xgettext: no-c-format +i18n("Legal"); +// xgettext: no-c-format +i18n("A4"); +// xgettext: no-c-format +i18n("PageRegion"); +// xgettext: no-c-format +i18n("Output Resolution"); +// xgettext: no-c-format +i18n("204x196 DPI"); +// xgettext: no-c-format +i18n("204x98 DPI"); +// xgettext: no-c-format +i18n("your fax for replies"); +// xgettext: no-c-format +i18n("ID"); +// xgettext: no-c-format +i18n("your fax header"); +// xgettext: no-c-format +i18n("Default"); +// xgettext: no-c-format +i18n("Resolution"); +// xgettext: no-c-format +i18n("72dpi"); +// xgettext: no-c-format +i18n("144dpi"); +// xgettext: no-c-format +i18n("300dpi"); +// xgettext: no-c-format +i18n("360dpi"); +// xgettext: no-c-format +i18n("600dpi"); +// xgettext: no-c-format +i18n("720dpi"); +// xgettext: no-c-format +i18n("1200dpi"); +// xgettext: no-c-format +i18n("1440dpi"); +// xgettext: no-c-format +i18n("2400dpi"); +// xgettext: no-c-format +i18n("PageSize"); +// xgettext: no-c-format +i18n("A0"); +// xgettext: no-c-format +i18n("A1"); +// xgettext: no-c-format +i18n("A2"); +// xgettext: no-c-format +i18n("A3"); +// xgettext: no-c-format +i18n("A5"); +// xgettext: no-c-format +i18n("A6"); +// xgettext: no-c-format +i18n("B4"); +// xgettext: no-c-format +i18n("B5"); +// xgettext: no-c-format +i18n("B6"); +// xgettext: no-c-format +i18n("US Legal"); +// xgettext: no-c-format +i18n("US Letter"); +// xgettext: no-c-format +i18n("Executive"); +// xgettext: no-c-format +i18n("Statement"); +// xgettext: no-c-format +i18n("US Tabloid"); +// xgettext: no-c-format +i18n("Ledger Landscape"); +// xgettext: no-c-format +i18n("US C"); +// xgettext: no-c-format +i18n("US D"); +// xgettext: no-c-format +i18n("US E"); +// xgettext: no-c-format +i18n("ARCH A"); +// xgettext: no-c-format +i18n("ARCH B"); +// xgettext: no-c-format +i18n("ARCH C"); +// xgettext: no-c-format +i18n("ARCH D"); +// xgettext: no-c-format +i18n("ARCH E"); +// xgettext: no-c-format +i18n("Monarch Envelope"); +// xgettext: no-c-format +i18n("DL Envelope"); +// xgettext: no-c-format +i18n("C4 Envelope"); +// xgettext: no-c-format +i18n("C5 Envelope"); +// xgettext: no-c-format +i18n("C6 Envelope"); +// xgettext: no-c-format +i18n("C10 Envelope"); +// xgettext: no-c-format +i18n("C65 Envelope"); +// xgettext: no-c-format +i18n("Folio"); +// xgettext: no-c-format +i18n("InputSlot"); +// xgettext: no-c-format +i18n("Autotray"); +// xgettext: no-c-format +i18n("Tray 2 Paper Tray"); +// xgettext: no-c-format +i18n("Installed Memory"); +// xgettext: no-c-format +i18n("Standard 16MB"); +// xgettext: no-c-format +i18n("80 MB"); +// xgettext: no-c-format +i18n("B5 (JIS)"); +// xgettext: no-c-format +i18n("Envelope 10"); +// xgettext: no-c-format +i18n("Envelope DL"); +// xgettext: no-c-format +i18n("Envelope C5"); +// xgettext: no-c-format +i18n("Envelope C6"); +// xgettext: no-c-format +i18n("Envelope Monarch"); +// xgettext: no-c-format +i18n("Envelope A2"); +// xgettext: no-c-format +i18n("4x6"); +// xgettext: no-c-format +i18n("5x8"); +// xgettext: no-c-format +i18n("A6 Card"); +// xgettext: no-c-format +i18n("Print Color as Gray"); +// xgettext: no-c-format +i18n("On"); +// xgettext: no-c-format +i18n("Off"); +// xgettext: no-c-format +i18n("Media Type"); +// xgettext: no-c-format +i18n("Plain Paper"); +// xgettext: no-c-format +i18n("HP Premium Inkjet Paper"); +// xgettext: no-c-format +i18n("HP Premium Inkjet Heavyweight Paper"); +// xgettext: no-c-format +i18n("HP Premium Transparency"); +// xgettext: no-c-format +i18n("HP Premium Photo Paper"); +// xgettext: no-c-format +i18n("HP Photo Paper"); +// xgettext: no-c-format +i18n("HP Professional Brochure Paper, Glossy"); +// xgettext: no-c-format +i18n("HP Professional Brochure Paper, Matte"); +// xgettext: no-c-format +i18n(" Paper Source"); +// xgettext: no-c-format +i18n("Tray 1"); +// xgettext: no-c-format +i18n("Tray 2"); +// xgettext: no-c-format +i18n("Manual Feed"); +// xgettext: no-c-format +i18n("HP ColorSmart"); +// xgettext: no-c-format +i18n("Automatic"); +// xgettext: no-c-format +i18n("Manual"); +// xgettext: no-c-format +i18n("Text"); +// xgettext: no-c-format +i18n("ScreenMatch(sRGB)"); +// xgettext: no-c-format +i18n("Vivid"); +// xgettext: no-c-format +i18n("Graphics"); +// xgettext: no-c-format +i18n("Image"); +// xgettext: no-c-format +i18n(" Print Quality"); +// xgettext: no-c-format +i18n("Best"); +// xgettext: no-c-format +i18n("Normal"); +// xgettext: no-c-format +i18n("Fast"); +// xgettext: no-c-format +i18n("CMYK Inks"); +// xgettext: no-c-format +i18n("FAST"); +// xgettext: no-c-format +i18n("SWOP Emulation"); +// xgettext: no-c-format +i18n("Eurostandard"); +// xgettext: no-c-format +i18n("TOYO"); +// xgettext: no-c-format +i18n("Pages per Sheet"); +// xgettext: no-c-format +i18n("1 (Portrait)"); +// xgettext: no-c-format +i18n("1 (Landscape)"); +// xgettext: no-c-format +i18n("2 (Portrait)"); +// xgettext: no-c-format +i18n("2 (Landscape)"); +// xgettext: no-c-format +i18n("4 (Portrait)"); +// xgettext: no-c-format +i18n("4 (Landscape)"); +// xgettext: no-c-format +i18n("6 (Portrait)"); +// xgettext: no-c-format +i18n("6 (Landscape)"); +// xgettext: no-c-format +i18n("9 (Portrait)"); +// xgettext: no-c-format +i18n("9 (Landscape)"); +// xgettext: no-c-format +i18n("16 (Portrait)"); +// xgettext: no-c-format +i18n("16 (Landscape)"); +// xgettext: no-c-format +i18n("Watermark"); +// xgettext: no-c-format +i18n("None"); +// xgettext: no-c-format +i18n("Company Confidential"); +// xgettext: no-c-format +i18n("Company Proprietary"); +// xgettext: no-c-format +i18n("Company Private"); +// xgettext: no-c-format +i18n("Confidential"); +// xgettext: no-c-format +i18n("Copy"); +// xgettext: no-c-format +i18n("Copyright"); +// xgettext: no-c-format +i18n("Draft"); +// xgettext: no-c-format +i18n("File Copy"); +// xgettext: no-c-format +i18n("Final"); +// xgettext: no-c-format +i18n("For Internal Use Only"); +// xgettext: no-c-format +i18n("Preliminary"); +// xgettext: no-c-format +i18n("Proof"); +// xgettext: no-c-format +i18n("Review Copy"); +// xgettext: no-c-format +i18n("Sample"); +// xgettext: no-c-format +i18n("Top Secret"); +// xgettext: no-c-format +i18n("Urgent"); +// xgettext: no-c-format +i18n("Watermark Font"); +// xgettext: no-c-format +i18n("Courier Bold"); +// xgettext: no-c-format +i18n("Times Bold"); +// xgettext: no-c-format +i18n("Helvetica Bold"); +// xgettext: no-c-format +i18n("Watermark Size"); +// xgettext: no-c-format +i18n("24 Points"); +// xgettext: no-c-format +i18n("30 Points"); +// xgettext: no-c-format +i18n("36 Points"); +// xgettext: no-c-format +i18n("42 Points"); +// xgettext: no-c-format +i18n("48 Points"); +// xgettext: no-c-format +i18n("54 Points"); +// xgettext: no-c-format +i18n("60 Points"); +// xgettext: no-c-format +i18n("66 Points"); +// xgettext: no-c-format +i18n("72 Points"); +// xgettext: no-c-format +i18n("78 Points"); +// xgettext: no-c-format +i18n("84 Points"); +// xgettext: no-c-format +i18n("90 Points"); +// xgettext: no-c-format +i18n("Watermark Angle"); +// xgettext: no-c-format +i18n("90 Degrees"); +// xgettext: no-c-format +i18n("75 Degrees"); +// xgettext: no-c-format +i18n("60 Degrees"); +// xgettext: no-c-format +i18n("45 Degrees"); +// xgettext: no-c-format +i18n("30 Degrees"); +// xgettext: no-c-format +i18n("15 Degrees"); +// xgettext: no-c-format +i18n("0 Degrees"); +// xgettext: no-c-format +i18n("-15 Degrees"); +// xgettext: no-c-format +i18n("-30 Degrees"); +// xgettext: no-c-format +i18n("-45 Degrees"); +// xgettext: no-c-format +i18n("-60 Degrees"); +// xgettext: no-c-format +i18n("-75 Degrees"); +// xgettext: no-c-format +i18n("-90 Degrees"); +// xgettext: no-c-format +i18n("Watermark Style"); +// xgettext: no-c-format +i18n("Narrow Outline"); +// xgettext: no-c-format +i18n("Medium Outline"); +// xgettext: no-c-format +i18n("Wide Outline"); +// xgettext: no-c-format +i18n("Wide Halo Outline"); +// xgettext: no-c-format +i18n("Print Watermark"); +// xgettext: no-c-format +i18n("All Pages"); +// xgettext: no-c-format +i18n("First Page Only"); +// xgettext: no-c-format +i18n("32 MB"); +// xgettext: no-c-format +i18n("48 MB"); +// xgettext: no-c-format +i18n("64 MB"); +// xgettext: no-c-format +i18n("72 MB"); +// xgettext: no-c-format +i18n("Tabloid"); +// xgettext: no-c-format +i18n("4x6 Index Card"); +// xgettext: no-c-format +i18n("5x8 Index Card"); +// xgettext: no-c-format +i18n("Super B"); +// xgettext: no-c-format +i18n("Super A3"); +// xgettext: no-c-format +i18n("Input Slot"); +// xgettext: no-c-format +i18n("Tray 3"); +// xgettext: no-c-format +i18n("Rear Manual Feed"); +// xgettext: no-c-format +i18n("True"); +// xgettext: no-c-format +i18n("False"); +// xgettext: no-c-format +i18n("HP Rapid-Dry Transparency"); +// xgettext: no-c-format +i18n("HP Transparency"); +// xgettext: no-c-format +i18n("HP Iron-on T-shirt Transfers"); +// xgettext: no-c-format +i18n("Fit to Page"); +// xgettext: no-c-format +i18n("Prompt User"); +// xgettext: no-c-format +i18n("Nearest Size and Scale"); +// xgettext: no-c-format +i18n("Nearest Size and Crop"); +// xgettext: no-c-format +i18n("Print Quality"); +// xgettext: no-c-format +i18n("EconoFast"); +// xgettext: no-c-format +i18n("Color Control"); +// xgettext: no-c-format +i18n("Enhanced Native"); +// xgettext: no-c-format +i18n("ColorSmart Business Graphics"); +// xgettext: no-c-format +i18n("No Color Adjustment"); +// xgettext: no-c-format +i18n("Pantone"); +// xgettext: no-c-format +i18n("Rendering Intent"); +// xgettext: no-c-format +i18n("Contrast"); +// xgettext: no-c-format +i18n("Colorimetric"); +// xgettext: no-c-format +i18n("Saturation"); +// xgettext: no-c-format +i18n(" -25% Lighter"); +// xgettext: no-c-format +i18n(" -20%"); +// xgettext: no-c-format +i18n(" -15%"); +// xgettext: no-c-format +i18n(" -10%"); +// xgettext: no-c-format +i18n(" -5%"); +// xgettext: no-c-format +i18n(" 0% No Change"); +// xgettext: no-c-format +i18n(" +5%"); +// xgettext: no-c-format +i18n(" +10%"); +// xgettext: no-c-format +i18n(" +15%"); +// xgettext: no-c-format +i18n(" +20%"); +// xgettext: no-c-format +i18n(" +25% Darker"); +// xgettext: no-c-format +i18n("Application Halftoning"); +// xgettext: no-c-format +i18n("Yes"); +// xgettext: no-c-format +i18n("No"); +// xgettext: no-c-format +i18n("Scale to"); +// xgettext: no-c-format +i18n("No Change"); +// xgettext: no-c-format +i18n("PPD Version"); +// xgettext: no-c-format +i18n("2.0"); +// xgettext: no-c-format +i18n("Rear Feed Unit"); +// xgettext: no-c-format +i18n("Installed"); +// xgettext: no-c-format +i18n("Not Installed"); +// xgettext: no-c-format +i18n("Memory Configuration"); +// xgettext: no-c-format +i18n("36 - 43 MB RAM"); +// xgettext: no-c-format +i18n("44 - 51 MB RAM"); +// xgettext: no-c-format +i18n("52 - 59 MB RAM"); +// xgettext: no-c-format +i18n("60 - 67 MB RAM"); +// xgettext: no-c-format +i18n(">= 68 MB RAM"); +// xgettext: no-c-format +i18n("Print as Grayscale"); +// xgettext: no-c-format +i18n("ColorSmart"); +// xgettext: no-c-format +i18n("Auto"); +// xgettext: no-c-format +i18n("Pantone"); +// xgettext: no-c-format +i18n("ColorSmart Text"); +// xgettext: no-c-format +i18n("Vivid Color"); +// xgettext: no-c-format +i18n("Match Color Across Printers"); +// xgettext: no-c-format +i18n("No Adjustment"); +// xgettext: no-c-format +i18n("ColorSmart Graphics"); +// xgettext: no-c-format +i18n("ColorSmart Photos"); +// xgettext: no-c-format +i18n("Text Halftone"); +// xgettext: no-c-format +i18n("Detail"); +// xgettext: no-c-format +i18n("Smooth"); +// xgettext: no-c-format +i18n("Basic"); +// xgettext: no-c-format +i18n("Graphics Halftone"); +// xgettext: no-c-format +i18n("Image Halftone"); +// xgettext: no-c-format +i18n("Transparency/HP Special Paper"); +// xgettext: no-c-format +i18n("Media Source"); +// xgettext: no-c-format +i18n("Auto Select"); +// xgettext: no-c-format +i18n("Front Tray"); +// xgettext: no-c-format +i18n("Rear Tray"); +// xgettext: no-c-format +i18n("Output Bin"); +// xgettext: no-c-format +i18n("Upper"); +// xgettext: no-c-format +i18n("Lower"); +// xgettext: no-c-format +i18n(" 8 - 15 MB Total RAM"); +// xgettext: no-c-format +i18n(" 16 - 23 MB Total RAM"); +// xgettext: no-c-format +i18n(" 24 - 31 MB Total RAM"); +// xgettext: no-c-format +i18n(" 32 - 39 MB Total RAM"); +// xgettext: no-c-format +i18n(" 40 - 56 MB Total RAM"); +// xgettext: no-c-format +i18n("Letter 8 1/2 x 11 in"); +// xgettext: no-c-format +i18n("Legal 8 1/2 x 14 in"); +// xgettext: no-c-format +i18n("Tabloid 11 x 17 in"); +// xgettext: no-c-format +i18n("Executive 7 1/4 x 10 1/2 in"); +// xgettext: no-c-format +i18n("A4 210 x 297 mm"); +// xgettext: no-c-format +i18n("A3 297 x 420 mm"); +// xgettext: no-c-format +i18n("Halftone"); +// xgettext: no-c-format +i18n("Cluster (Standard)"); +// xgettext: no-c-format +i18n("Scatter (Enhanced)"); +// xgettext: no-c-format +i18n("Printer's Current Setting"); +// xgettext: no-c-format +i18n("Full Color"); +// xgettext: no-c-format +i18n("Paper"); +// xgettext: no-c-format +i18n("Transparency"); +// xgettext: no-c-format +i18n("Resolution Enhancement (REt)"); +// xgettext: no-c-format +i18n("Light"); +// xgettext: no-c-format +i18n("Medium"); +// xgettext: no-c-format +i18n("Dark"); +// xgettext: no-c-format +i18n("Printer Default"); +// xgettext: no-c-format +i18n("Tray3"); +// xgettext: no-c-format +i18n("32 - 39 MB RAM"); +// xgettext: no-c-format +i18n("40 - 63 MB RAM"); +// xgettext: no-c-format +i18n("64 - 95 MB RAM"); +// xgettext: no-c-format +i18n("96 - 127 MB RAM"); +// xgettext: no-c-format +i18n("128 - 159 MB RAM"); +// xgettext: no-c-format +i18n("160 - 191 MB RAM"); +// xgettext: no-c-format +i18n(" 192 MB RAM"); +// xgettext: no-c-format +i18n("Duplex Unit (for 2-Sided Printing)"); +// xgettext: no-c-format +i18n("Envelope B5"); +// xgettext: no-c-format +i18n("Envelope #10"); +// xgettext: no-c-format +i18n("Plain"); +// xgettext: no-c-format +i18n("Preprinted"); +// xgettext: no-c-format +i18n("Letterhead"); +// xgettext: no-c-format +i18n("Glossy"); +// xgettext: no-c-format +i18n("Prepunched"); +// xgettext: no-c-format +i18n("Labels"); +// xgettext: no-c-format +i18n("Bond"); +// xgettext: no-c-format +i18n("Recycled"); +// xgettext: no-c-format +i18n("Color"); +// xgettext: no-c-format +i18n("Heavy"); +// xgettext: no-c-format +i18n("Card Stock"); +// xgettext: no-c-format +i18n("Print Finish"); +// xgettext: no-c-format +i18n("Matte"); +// xgettext: no-c-format +i18n("Paper Source"); +// xgettext: no-c-format +i18n("Tray2"); +// xgettext: no-c-format +i18n("Tray1"); +// xgettext: no-c-format +i18n("2-Sided Printing"); +// xgettext: no-c-format +i18n("Long-Edge Binding"); +// xgettext: no-c-format +i18n("Short-Edge Binding"); +// xgettext: no-c-format +i18n("SWOP"); +// xgettext: no-c-format +i18n("ColorSmart II"); +// xgettext: no-c-format +i18n("ScreenMatch(sRGB)-Detail"); +// xgettext: no-c-format +i18n("ScreenMatch(sRGB)-Smooth"); +// xgettext: no-c-format +i18n("Vivid-Detail"); +// xgettext: no-c-format +i18n("Vivid-Smooth"); +// xgettext: no-c-format +i18n("500-Sheet Paper Feeder"); +// xgettext: no-c-format +i18n("Printer Disk"); +// xgettext: no-c-format +i18n("RAM Disk"); +// xgettext: no-c-format +i18n("Hard Disk"); +// xgettext: no-c-format +i18n("32 - 63 MB RAM"); +// xgettext: no-c-format +i18n("192 - 223 MB RAM"); +// xgettext: no-c-format +i18n("224 - 256 MB RAM"); +// xgettext: no-c-format +i18n("Duplex Printing Accessory"); +// xgettext: no-c-format +i18n("Paper Matching"); +// xgettext: no-c-format +i18n("Prompt User for correct size"); +// xgettext: no-c-format +i18n("Nearest Size & Scale"); +// xgettext: no-c-format +i18n("Nearest Size & Crop"); +// xgettext: no-c-format +i18n("Job Retention"); +// xgettext: no-c-format +i18n("Quick Copy"); +// xgettext: no-c-format +i18n("Proof and Hold"); +// xgettext: no-c-format +i18n("Stored Job"); +// xgettext: no-c-format +i18n("Private Job"); +// xgettext: no-c-format +i18n("PIN (for Private Job)"); +// xgettext: no-c-format +i18n("User Specified PIN"); +// xgettext: no-c-format +i18n("User Name"); +// xgettext: no-c-format +i18n("Use file sharing name"); +// xgettext: no-c-format +i18n("Forms"); +// xgettext: no-c-format +i18n("Custom user name"); +// xgettext: no-c-format +i18n("Job Name"); +// xgettext: no-c-format +i18n("Use Document Name"); +// xgettext: no-c-format +i18n("User Specified Job Name"); +// xgettext: no-c-format +i18n("US Letter (Small)"); +// xgettext: no-c-format +i18n("US Legal (Small)"); +// xgettext: no-c-format +i18n("A4 (Small)"); +// xgettext: no-c-format +i18n("JB5"); +// xgettext: no-c-format +i18n("Env ISO B5"); +// xgettext: no-c-format +i18n("Env Comm10"); +// xgettext: no-c-format +i18n("Env C5"); +// xgettext: no-c-format +i18n("Env DL"); +// xgettext: no-c-format +i18n("Env Monarch"); +// xgettext: no-c-format +i18n("Tray 3 (Optional)"); +// xgettext: no-c-format +i18n("Glossy Finish"); +// xgettext: no-c-format +i18n("Automatic PANTONE¨ Color Calibration"); +// xgettext: no-c-format +i18n("EuroScale"); +// xgettext: no-c-format +i18n("DIC"); +// xgettext: no-c-format +i18n("Manual Text"); +// xgettext: no-c-format +i18n("Calibrated-Detail"); +// xgettext: no-c-format +i18n("Calibrated-Smooth"); +// xgettext: no-c-format +i18n("Manual Graphics"); +// xgettext: no-c-format +i18n("Manual Image"); +// xgettext: no-c-format +i18n("Watermark/Overlay"); +// xgettext: no-c-format +i18n("Overlay"); +// xgettext: no-c-format +i18n("Watermark Pages"); +// xgettext: no-c-format +i18n("All"); +// xgettext: no-c-format +i18n("First Only"); +// xgettext: no-c-format +i18n("Watermark Text"); +// xgettext: no-c-format +i18n("Custom"); +// xgettext: no-c-format +i18n("Watermark Size (points)"); +// xgettext: no-c-format +i18n("90"); +// xgettext: no-c-format +i18n("75"); +// xgettext: no-c-format +i18n("60"); +// xgettext: no-c-format +i18n("45"); +// xgettext: no-c-format +i18n("30"); +// xgettext: no-c-format +i18n("15"); +// xgettext: no-c-format +i18n("0"); +// xgettext: no-c-format +i18n("Ð15"); +// xgettext: no-c-format +i18n("Ð30"); +// xgettext: no-c-format +i18n("Ð45"); +// xgettext: no-c-format +i18n("Ð60"); +// xgettext: no-c-format +i18n("Ð75"); +// xgettext: no-c-format +i18n("Ð90"); +// xgettext: no-c-format +i18n("Thin Outline"); +// xgettext: no-c-format +i18n("Thick Outline"); +// xgettext: no-c-format +i18n("Thick Outline with Halo"); +// xgettext: no-c-format +i18n("Filled"); +// xgettext: no-c-format +i18n("Watermark Color"); +// xgettext: no-c-format +i18n("Gray"); +// xgettext: no-c-format +i18n("Red"); +// xgettext: no-c-format +i18n("Orange"); +// xgettext: no-c-format +i18n("Yellow"); +// xgettext: no-c-format +i18n("Green"); +// xgettext: no-c-format +i18n("Blue"); +// xgettext: no-c-format +i18n("Violet"); +// xgettext: no-c-format +i18n("Watermark Intensity"); +// xgettext: no-c-format +i18n("Darkest"); +// xgettext: no-c-format +i18n("Darker"); +// xgettext: no-c-format +i18n("Medium Dark"); +// xgettext: no-c-format +i18n("Medium Light"); +// xgettext: no-c-format +i18n("Lighter"); +// xgettext: no-c-format +i18n("Lightest"); +// xgettext: no-c-format +i18n("Collate"); +// xgettext: no-c-format +i18n("On (turn off in application)"); +// xgettext: no-c-format +i18n("2000 sheet input Tray 4"); +// xgettext: no-c-format +i18n("Multi-Bin Mailbox"); +// xgettext: no-c-format +i18n("Printer hard disk"); +// xgettext: no-c-format +i18n("Printer Memory"); +// xgettext: no-c-format +i18n("Multi-Bin Mailbox Mode"); +// xgettext: no-c-format +i18n("Mailbox"); +// xgettext: no-c-format +i18n("Stacking"); +// xgettext: no-c-format +i18n("Job Separation"); +// xgettext: no-c-format +i18n("Color Mode"); +// xgettext: no-c-format +i18n("CMYK"); +// xgettext: no-c-format +i18n("Grayscale"); +// xgettext: no-c-format +i18n("Duplex"); +// xgettext: no-c-format +i18n("Duplex Tumble"); +// xgettext: no-c-format +i18n("Duplex (Two-Sided)"); +// xgettext: no-c-format +i18n("One Sided"); +// xgettext: no-c-format +i18n("ColorSmartCRD Text"); +// xgettext: no-c-format +i18n("Screen Match"); +// xgettext: no-c-format +i18n("OHT"); +// xgettext: no-c-format +i18n("ColorSmartCRD Graphics"); +// xgettext: no-c-format +i18n("ColorSmartCRD Images"); +// xgettext: no-c-format +i18n("HalftoneText"); +// xgettext: no-c-format +i18n("Halftone Graphics"); +// xgettext: no-c-format +i18n("Halftone Images"); +// xgettext: no-c-format +i18n("Cardstock"); +// xgettext: no-c-format +i18n("Heavy Media >= 28lbs"); +// xgettext: no-c-format +i18n("Envelope"); +// xgettext: no-c-format +i18n("28 Lb Type1"); +// xgettext: no-c-format +i18n("28 Lb Type2"); +// xgettext: no-c-format +i18n("Media Type First"); +// xgettext: no-c-format +i18n("Media Type Rest"); +// xgettext: no-c-format +i18n("Staple"); +// xgettext: no-c-format +i18n("Manual Feed (Tray 1)"); +// xgettext: no-c-format +i18n("Tray 4"); +// xgettext: no-c-format +i18n("Paper Source First"); +// xgettext: no-c-format +i18n("Paper Source Rest"); +// xgettext: no-c-format +i18n("Output Destination"); +// xgettext: no-c-format +i18n("Top Output Bin (Face-Down)"); +// xgettext: no-c-format +i18n("Left Output Bin (Face-Up)"); +// xgettext: no-c-format +i18n("Stacker"); +// xgettext: no-c-format +i18n("Job Separator"); +// xgettext: no-c-format +i18n("Mailbox 1"); +// xgettext: no-c-format +i18n("Mailbox 2"); +// xgettext: no-c-format +i18n("Mailbox 3"); +// xgettext: no-c-format +i18n("Mailbox 4"); +// xgettext: no-c-format +i18n("Mailbox 5"); +// xgettext: no-c-format +i18n("Mailbox 6"); +// xgettext: no-c-format +i18n("Mailbox 7"); +// xgettext: no-c-format +i18n("Mailbox 8"); +// xgettext: no-c-format +i18n("Page Size"); +// xgettext: no-c-format +i18n("Exec"); +// xgettext: no-c-format +i18n("11x17"); +// xgettext: no-c-format +i18n("Com-10"); +// xgettext: no-c-format +i18n("DL"); +// xgettext: no-c-format +i18n("Monarch"); +// xgettext: no-c-format +i18n("C5"); +// xgettext: no-c-format +i18n("JIS B5"); +// xgettext: no-c-format +i18n("JPostD"); +// xgettext: no-c-format +i18n("12x18"); +// xgettext: no-c-format +i18n("9x12"); +// xgettext: no-c-format +i18n("C4"); +// xgettext: no-c-format +i18n("N-UP AND WATERMARK SETTINGS"); +// xgettext: no-c-format +i18n(""); +// xgettext: no-c-format +i18n("(None)"); +// xgettext: no-c-format +i18n("Optional Tray 2"); +// xgettext: no-c-format +i18n("Optional Tray 4"); +// xgettext: no-c-format +i18n("1000 sheet input Tray 4"); +// xgettext: no-c-format +i18n("Accessory Output Bins"); +// xgettext: no-c-format +i18n("8 Bin Mailbox (Mailbox mode)"); +// xgettext: no-c-format +i18n("8 Bin Mailbox (Stacker-Separator-Collator)"); +// xgettext: no-c-format +i18n("HP 3000-Sheet Stapler-Stacker"); +// xgettext: no-c-format +i18n("HP 3000-Sheet Stacker"); +// xgettext: no-c-format +i18n("Enabled"); +// xgettext: no-c-format +i18n("Disabled"); +// xgettext: no-c-format +i18n("Color Treatment"); +// xgettext: no-c-format +i18n("High Print Quality"); +// xgettext: no-c-format +i18n("SWOP-Coated"); +// xgettext: no-c-format +i18n("Euroscale"); +// xgettext: no-c-format +i18n("Manually Print on 2nd Side"); +// xgettext: no-c-format +i18n("Manual Images"); +// xgettext: no-c-format +i18n("Private Stored Job"); +// xgettext: no-c-format +i18n("PrinterÕs Current Setting"); +// xgettext: no-c-format +i18n("Stacker-Separator-Collator"); +// xgettext: no-c-format +i18n("Stapler"); +// xgettext: no-c-format +i18n("Bin 1"); +// xgettext: no-c-format +i18n("Bin 2"); +// xgettext: no-c-format +i18n("Bin 3"); +// xgettext: no-c-format +i18n("Bin 4"); +// xgettext: no-c-format +i18n("Bin 5"); +// xgettext: no-c-format +i18n("Bin 6"); +// xgettext: no-c-format +i18n("Bin 7"); +// xgettext: no-c-format +i18n("Bin 8"); +// xgettext: no-c-format +i18n("Stapler Option"); +// xgettext: no-c-format +i18n("1 Staple, diagonal"); +// xgettext: no-c-format +i18n("1 Staple, parallel"); +// xgettext: no-c-format +i18n("2 Staples, parallel"); +// xgettext: no-c-format +i18n("3 Staples, parallel"); +// xgettext: no-c-format +i18n("6 Staples, parallel"); +// xgettext: no-c-format +i18n("JIS B4"); +// xgettext: no-c-format +i18n("A3 (Oversize 12x18.11)"); +// xgettext: no-c-format +i18n("Executive (JIS)"); +// xgettext: no-c-format +i18n("16K"); +// xgettext: no-c-format +i18n("8K"); +// xgettext: no-c-format +i18n("Double Postcard (JIS)"); +// xgettext: no-c-format +i18n("EconoMode"); +// xgettext: no-c-format +i18n("Total Memory"); +// xgettext: no-c-format +i18n("6 - 7 MB"); +// xgettext: no-c-format +i18n("8 - 11 MB"); +// xgettext: no-c-format +i18n("12 - 19 MB"); +// xgettext: no-c-format +i18n("20 - 27 MB"); +// xgettext: no-c-format +i18n("28 - 35 MB"); +// xgettext: no-c-format +i18n("36 MB or more"); +// xgettext: no-c-format +i18n("8.5 x 13"); +// xgettext: no-c-format +i18n("Postcard (JIS)"); +// xgettext: no-c-format +i18n("B5 (ISO)"); +// xgettext: no-c-format +i18n("Tray 1 (Manual)"); +// xgettext: no-c-format +i18n("Manual Duplex"); +// xgettext: no-c-format +i18n("Odd Pages"); +// xgettext: no-c-format +i18n("Even Pages"); +// xgettext: no-c-format +i18n("Levels of Gray"); +// xgettext: no-c-format +i18n("Enhanced"); +// xgettext: no-c-format +i18n("Standard"); +// xgettext: no-c-format +i18n("Resolution Enhancement"); +// xgettext: no-c-format +i18n("Optional Lower Tray"); +// xgettext: no-c-format +i18n("Optional Envelope Feeder"); +// xgettext: no-c-format +i18n("JCLOpenUI *JCLResolution"); +// xgettext: no-c-format +i18n("Legal Frame Size"); +// xgettext: no-c-format +i18n("Com-10 Env"); +// xgettext: no-c-format +i18n("Monarch Env"); +// xgettext: no-c-format +i18n("DL Env"); +// xgettext: no-c-format +i18n("C5 Env"); +// xgettext: no-c-format +i18n("B5 Env"); +// xgettext: no-c-format +i18n("Multipurpose Tray"); +// xgettext: no-c-format +i18n("Paper Cassette"); +// xgettext: no-c-format +i18n("Lower Cassette"); +// xgettext: no-c-format +i18n("Envelope Feeder"); +// xgettext: no-c-format +i18n("Rough"); +// xgettext: no-c-format +i18n("Duplex Unit"); +// xgettext: no-c-format +i18n("Printer Hard Disk"); +// xgettext: no-c-format +i18n("Total Printer Memory"); +// xgettext: no-c-format +i18n("4 - 7 MB"); +// xgettext: no-c-format +i18n(" Tray 1"); +// xgettext: no-c-format +i18n(" Tray 1 (Manual)"); +// xgettext: no-c-format +i18n(" Tray 2"); +// xgettext: no-c-format +i18n(" Tray 3"); +// xgettext: no-c-format +i18n(" Tray 4"); +// xgettext: no-c-format +i18n(" Envelope Feeder"); +// xgettext: no-c-format +i18n("Scale Patterns"); +// xgettext: no-c-format +i18n("Off (1-Sided)"); +// xgettext: no-c-format +i18n("Flip on Long Edge (Standard)"); +// xgettext: no-c-format +i18n("Flip on Short Edge"); +// xgettext: no-c-format +i18n("User"); +// xgettext: no-c-format +i18n("FastRes 1200"); +// xgettext: no-c-format +i18n("Number of Input Trays"); +// xgettext: no-c-format +i18n(" 2"); +// xgettext: no-c-format +i18n(" 3"); +// xgettext: no-c-format +i18n(" 4"); +// xgettext: no-c-format +i18n(" 5"); +// xgettext: no-c-format +i18n(" 6"); +// xgettext: no-c-format +i18n(" 7"); +// xgettext: no-c-format +i18n(" 8"); +// xgettext: no-c-format +i18n(" 9"); +// xgettext: no-c-format +i18n("12 - 15 MB"); +// xgettext: no-c-format +i18n("16 - 19 MB"); +// xgettext: no-c-format +i18n(" Tray 5"); +// xgettext: no-c-format +i18n(" Tray 6"); +// xgettext: no-c-format +i18n(" Tray 7"); +// xgettext: no-c-format +i18n(" Tray 8"); +// xgettext: no-c-format +i18n(" Tray 9"); +// xgettext: no-c-format +i18n(" Tray 10"); +// xgettext: no-c-format +i18n("ManualFeed"); +// xgettext: no-c-format +i18n("Page Protection"); +// xgettext: no-c-format +i18n(" 2 - 3 MB Total RAM"); +// xgettext: no-c-format +i18n(" 4 - 5 MB Total RAM"); +// xgettext: no-c-format +i18n(" 6 - 9 MB Total RAM"); +// xgettext: no-c-format +i18n("10 - 14 MB Total RAM"); +// xgettext: no-c-format +i18n("15 - 26 MB Total RAM"); +// xgettext: no-c-format +i18n("Upper Tray"); +// xgettext: no-c-format +i18n("Lower Tray"); +// xgettext: no-c-format +i18n("Long Edge Binding"); +// xgettext: no-c-format +i18n("Short Edge Binding"); +// xgettext: no-c-format +i18n("Upper - Face Down"); +// xgettext: no-c-format +i18n("Lower - Face Up"); +// xgettext: no-c-format +i18n("12 - 27 MB Total RAM"); +// xgettext: no-c-format +i18n("28 - 35 MB Total RAM"); +// xgettext: no-c-format +i18n("36 - 52 MB Total RAM"); +// xgettext: no-c-format +i18n("11x17 (Oversize)"); +// xgettext: no-c-format +i18n("ISO B5 Env"); +// xgettext: no-c-format +i18n("MP Tray"); +// xgettext: no-c-format +i18n("Printer<27>s Current Setting"); +// xgettext: no-c-format +i18n("Optional Lower Cassette"); +// xgettext: no-c-format +i18n("Optional Duplex Unit"); +// xgettext: no-c-format +i18n("Long-edge Binding"); +// xgettext: no-c-format +i18n("Short-edge Binding"); +// xgettext: no-c-format +i18n("500-Sheet Tray 3"); +// xgettext: no-c-format +i18n("12 MB or more"); +// xgettext: no-c-format +i18n("Vellum"); +// xgettext: no-c-format +i18n("11x17 (Oversize 12x18.5)"); +// xgettext: no-c-format +i18n("A3 (Oversize 312x440)"); +// xgettext: no-c-format +i18n("B4 (JIS)"); +// xgettext: no-c-format +i18n("B6 (JIS)"); +// xgettext: no-c-format +i18n("Tray 1 (MultiPurpose Tray)"); +// xgettext: no-c-format +i18n("Tray 2 (Paper Cassette)"); +// xgettext: no-c-format +i18n("Letter (8 1/2 x 11 in)"); +// xgettext: no-c-format +i18n("Legal (8 1/2 x 14 in)"); +// xgettext: no-c-format +i18n("A4 (210 x 297 mm)"); +// xgettext: no-c-format +i18n("Executive (7 1/4 x 10 1/2 in)"); +// xgettext: no-c-format +i18n("A5 (148 x 210 mm)"); +// xgettext: no-c-format +i18n("Com-10 Env (4 1/8 x 9 1/2 in)"); +// xgettext: no-c-format +i18n("Monarch Env (3 7/8 x 7 1/2 in)"); +// xgettext: no-c-format +i18n("DL Env (110 x 220 mm)"); +// xgettext: no-c-format +i18n("C5 Env (162 x 229 mm)"); +// xgettext: no-c-format +i18n("B5 Env (176 x 250 mm)"); +// xgettext: no-c-format +i18n("2000-Sheet Input Tray (Tray 4)"); +// xgettext: no-c-format +i18n("28 - 43 MB Total RAM"); +// xgettext: no-c-format +i18n("44 - 59 MB Total RAM"); +// xgettext: no-c-format +i18n("60 - 75 MB Total RAM"); +// xgettext: no-c-format +i18n("76 -100 MB Total RAM"); +// xgettext: no-c-format +i18n("Double Postcard"); +// xgettext: no-c-format +i18n("Page Region"); +// xgettext: no-c-format +i18n("Top Output Bin (Face Down)"); +// xgettext: no-c-format +i18n("Left Output Bin (Face Up)"); +// xgettext: no-c-format +i18n("Stacker (Face Down)"); +// xgettext: no-c-format +i18n("Job Seperator (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 1 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 2 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 3 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 4 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 5 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 6 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 7 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 8 (Face Down)"); +// xgettext: no-c-format +i18n("Printer Resolution"); +// xgettext: no-c-format +i18n("600 dpi"); +// xgettext: no-c-format +i18n("300 dpi"); +// xgettext: no-c-format +i18n("Mailbox with Stapler"); +// xgettext: no-c-format +i18n("Mailbox with Stapler Mode"); +// xgettext: no-c-format +i18n("Job Separator (Face Down)"); +// xgettext: no-c-format +i18n("Stapler (Face Down)"); +// xgettext: no-c-format +i18n("3 MB"); +// xgettext: no-c-format +i18n("4 - 5 MB"); +// xgettext: no-c-format +i18n("6 MB or more"); +// xgettext: no-c-format +i18n("Top Bin"); +// xgettext: no-c-format +i18n("Left Bin (Face Up)"); +// xgettext: no-c-format +i18n("Stapler (max 50 Sheets)"); +// xgettext: no-c-format +i18n("Stapler Opposing (max 50)"); +// xgettext: no-c-format +i18n("Stapler (max 20 Letter or A4)"); +// xgettext: no-c-format +i18n("Collator"); +// xgettext: no-c-format +i18n("Stapling Options"); +// xgettext: no-c-format +i18n("One Staple Angled"); +// xgettext: no-c-format +i18n("One Staple"); +// xgettext: no-c-format +i18n("Two Staples"); +// xgettext: no-c-format +i18n("Three Staples"); +// xgettext: no-c-format +i18n("Six Staples"); +// xgettext: no-c-format +i18n("Administrator Defined"); +// xgettext: no-c-format +i18n("Tray 5"); +// xgettext: no-c-format +i18n("5 Bin Mailbox with Stapler"); +// xgettext: no-c-format +i18n("7 Bin Mailbox"); +// xgettext: no-c-format +i18n("8 Bin Mailbox"); +// xgettext: no-c-format +i18n("HP 3000-Sheet Stapler/Stacker"); +// xgettext: no-c-format +i18n("Standard Mailbox"); +// xgettext: no-c-format +i18n("20 - 23 MB"); +// xgettext: no-c-format +i18n("24 - 27 MB"); +// xgettext: no-c-format +i18n("11x17 (Oversize 11.7x17.7)"); +// xgettext: no-c-format +i18n("System Name (if available)"); +// xgettext: no-c-format +i18n(" 1"); +// xgettext: no-c-format +i18n("PIN digit 1 (for Private Job)"); +// xgettext: no-c-format +i18n("PIN digit 2 (for Private Job)"); +// xgettext: no-c-format +i18n("PIN digit 3 (for Private Job)"); +// xgettext: no-c-format +i18n("PIN digit 4 (for Private Job)"); +// xgettext: no-c-format +i18n("Edge-to-Edge Printing"); +// xgettext: no-c-format +i18n("32 - 39 MB"); +// xgettext: no-c-format +i18n("40 - 47 MB"); +// xgettext: no-c-format +i18n("48 - 55 MB"); +// xgettext: no-c-format +i18n("56 - 63 MB"); +// xgettext: no-c-format +i18n("64 - 71 MB"); +// xgettext: no-c-format +i18n("72 MB or more"); +// xgettext: no-c-format +i18n("Banner Printing"); +// xgettext: no-c-format +i18n("Manual Feeder"); +// xgettext: no-c-format +i18n("Standard Tray"); +// xgettext: no-c-format +i18n("Sheet Feeder"); +// xgettext: no-c-format +i18n("Bond Paper"); +// xgettext: no-c-format +i18n("Glossy Paper"); +// xgettext: no-c-format +i18n("HP Premium Paper"); +// xgettext: no-c-format +i18n("Quick-Dry Glossy"); +// xgettext: no-c-format +i18n("Quick-Dry Transparency"); +// xgettext: no-c-format +i18n("Transparency Film"); +// xgettext: no-c-format +i18n("75 DPI"); +// xgettext: no-c-format +i18n("150 DPI"); +// xgettext: no-c-format +i18n("300 DPI"); +// xgettext: no-c-format +i18n("600 DPI"); +// xgettext: no-c-format +i18n("600x300 DPI"); +// xgettext: no-c-format +i18n("Quality"); +// xgettext: no-c-format +i18n("Default Setting"); +// xgettext: no-c-format +i18n("Presentation"); +// xgettext: no-c-format +i18n("CMY"); +// xgettext: no-c-format +i18n("CMY+K"); +// xgettext: no-c-format +i18n("Model"); +// xgettext: no-c-format +i18n("DeskJet"); +// xgettext: no-c-format +i18n("DeskJet 310"); +// xgettext: no-c-format +i18n("DeskJet 320"); +// xgettext: no-c-format +i18n("DeskJet 340"); +// xgettext: no-c-format +i18n("DeskJet 400"); +// xgettext: no-c-format +i18n("DeskJet 500"); +// xgettext: no-c-format +i18n("DeskJet 500C"); +// xgettext: no-c-format +i18n("DeskJet 510"); +// xgettext: no-c-format +i18n("DeskJet 520"); +// xgettext: no-c-format +i18n("DeskJet 540"); +// xgettext: no-c-format +i18n("DeskJet 550C"); +// xgettext: no-c-format +i18n("DeskJet 560C"); +// xgettext: no-c-format +i18n("DeskJet 600"); +// xgettext: no-c-format +i18n("DeskJet 660C"); +// xgettext: no-c-format +i18n("DeskJet 670C"); +// xgettext: no-c-format +i18n("DeskJet 680C"); +// xgettext: no-c-format +i18n("DeskJet 690C"); +// xgettext: no-c-format +i18n("DeskJet 850C"); +// xgettext: no-c-format +i18n("DeskJet 855C"); +// xgettext: no-c-format +i18n("DeskJet 870C"); +// xgettext: no-c-format +i18n("DeskJet 890C"); +// xgettext: no-c-format +i18n("DeskJet 970C with Duplexer"); +// xgettext: no-c-format +i18n("DeskJet 1120C"); +// xgettext: no-c-format +i18n("DeskJet Plus"); +// xgettext: no-c-format +i18n("DeskJet Portable"); +// xgettext: no-c-format +i18n("Olivetti (Black sent after CMY)"); +// xgettext: no-c-format +i18n("Unspecified Model"); +// xgettext: no-c-format +i18n("Unspecified Old Model"); +// xgettext: no-c-format +i18n("Black Levels"); +// xgettext: no-c-format +i18n("2 Levels"); +// xgettext: no-c-format +i18n("3 Levels"); +// xgettext: no-c-format +i18n("4 Levels"); +// xgettext: no-c-format +i18n("No Black"); +// xgettext: no-c-format +i18n("CMY Levels"); +// xgettext: no-c-format +i18n("No CMY"); +// xgettext: no-c-format +i18n("Compression Method"); +// xgettext: no-c-format +i18n("Compressed Replacement Delta Row Encoding"); +// xgettext: no-c-format +i18n("Delta Row Compression"); +// xgettext: no-c-format +i18n("Runlength Encoding"); +// xgettext: no-c-format +i18n("Tagged Image File Format"); +// xgettext: no-c-format +i18n("Unencoded"); +// xgettext: no-c-format +i18n("Intensity Rendering"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Dithering"); +// xgettext: no-c-format +i18n("Half Tones"); +// xgettext: no-c-format +i18n("Printer-internal"); +// xgettext: no-c-format +i18n("Leading Edge"); +// xgettext: no-c-format +i18n("Long edge; left side of canonical page"); +// xgettext: no-c-format +i18n("Long edge; right side of canonical page"); +// xgettext: no-c-format +i18n("Short edge; bottom of canonical page"); +// xgettext: no-c-format +i18n("Short edge; top of canonical page"); +// xgettext: no-c-format +i18n("Generate only PCL with 'Configure Raster Data'"); +// xgettext: no-c-format +i18n("OnlyCRD"); +// xgettext: no-c-format +i18n("GeneralPCL"); +// xgettext: no-c-format +i18n("Print Head Passes per Line"); +// xgettext: no-c-format +i18n("1 Pass (Fastest)"); +// xgettext: no-c-format +i18n("2 Passes (50% of the dots/pass)"); +// xgettext: no-c-format +i18n("4 Passes (25% of the dots/pass)"); +// xgettext: no-c-format +i18n("PCL3GUI Language Mode"); +// xgettext: no-c-format +i18n("PCL3GUI"); +// xgettext: no-c-format +i18n("NoPCL3GUI"); +// xgettext: no-c-format +i18n("3x5"); +// xgettext: no-c-format +i18n("5x7"); +// xgettext: no-c-format +i18n("6x8"); +// xgettext: no-c-format +i18n("8x10"); +// xgettext: no-c-format +i18n("8x12"); +// xgettext: no-c-format +i18n("US A2 Invitation"); +// xgettext: no-c-format +i18n("A7"); +// xgettext: no-c-format +i18n("A8"); +// xgettext: no-c-format +i18n("A9"); +// xgettext: no-c-format +i18n("A10"); +// xgettext: no-c-format +i18n("B5 ISO"); +// xgettext: no-c-format +i18n("B5 JIS"); +// xgettext: no-c-format +i18n("B6 aka C4"); +// xgettext: no-c-format +i18n("B6 ISO"); +// xgettext: no-c-format +i18n("B6 JIS"); +// xgettext: no-c-format +i18n("B7 ISO"); +// xgettext: no-c-format +i18n("B7 JIS"); +// xgettext: no-c-format +i18n("B8 ISO"); +// xgettext: no-c-format +i18n("B8 JIS"); +// xgettext: no-c-format +i18n("B9 ISO"); +// xgettext: no-c-format +i18n("B9 JIS"); +// xgettext: no-c-format +i18n("B10 ISO"); +// xgettext: no-c-format +i18n("B10 JIS"); +// xgettext: no-c-format +i18n("C6"); +// xgettext: no-c-format +i18n("C7"); +// xgettext: no-c-format +i18n("C7 by C6"); +// xgettext: no-c-format +i18n("C8"); +// xgettext: no-c-format +i18n("C9"); +// xgettext: no-c-format +i18n("C10"); +// xgettext: no-c-format +i18n("US Commercial 10 Envelope"); +// xgettext: no-c-format +i18n("Crown Octavo"); +// xgettext: no-c-format +i18n("Crown Quarto"); +// xgettext: no-c-format +i18n("Demy Octavo"); +// xgettext: no-c-format +i18n("Epson 4x6 Photo Paper"); +// xgettext: no-c-format +i18n("American Foolscap"); +// xgettext: no-c-format +i18n("Hagaki Card"); +// xgettext: no-c-format +i18n("Half Letter"); +// xgettext: no-c-format +i18n("Large Crown Octavo"); +// xgettext: no-c-format +i18n("Large Crown Quarto"); +// xgettext: no-c-format +i18n("Japanese Long Envelope Number 3"); +// xgettext: no-c-format +i18n("Japanese Long Envelope Number 4"); +// xgettext: no-c-format +i18n("Oufuku Card"); +// xgettext: no-c-format +i18n("Penguin Small Paperback"); +// xgettext: no-c-format +i18n("Postcard"); +// xgettext: no-c-format +i18n("RA4"); +// xgettext: no-c-format +i18n("Royal Octavo"); +// xgettext: no-c-format +i18n("Small Paperback"); +// xgettext: no-c-format +i18n("Tray"); +// xgettext: no-c-format +i18n("Glossy/Photo"); +// xgettext: no-c-format +i18n("Premium"); +// xgettext: no-c-format +i18n("Quick-dry Photo"); +// xgettext: no-c-format +i18n("Quick-dry Transparency"); +// xgettext: no-c-format +i18n("Ghostscript Resolution"); +// xgettext: no-c-format +i18n("1200 DPI"); +// xgettext: no-c-format +i18n("150x150 DPI"); +// xgettext: no-c-format +i18n("300x300 DPI"); +// xgettext: no-c-format +i18n("600x600 DPI"); +// xgettext: no-c-format +i18n("Grayscale only"); +// xgettext: no-c-format +i18n("Image Type"); +// xgettext: no-c-format +i18n("Pure bw or prescreened (currently black-only)"); +// xgettext: no-c-format +i18n("Line art (color or gray scale)"); +// xgettext: no-c-format +i18n("Continuous-tone photographs (color or gray scale)"); +// xgettext: no-c-format +i18n("Primarily solid colors ro smooth gradients (color or gray scale)"); +// xgettext: no-c-format +i18n("Dithering Algorithm"); +// xgettext: no-c-format +i18n("Adaptive Hybrid"); +// xgettext: no-c-format +i18n("Adaptive Random"); +// xgettext: no-c-format +i18n("Hybrid Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Ordered"); +// xgettext: no-c-format +i18n("Random Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Very Fast"); +// xgettext: no-c-format +i18n("11x14"); +// xgettext: no-c-format +i18n("13x19"); +// xgettext: no-c-format +i18n("Arch A"); +// xgettext: no-c-format +i18n("Arch B"); +// xgettext: no-c-format +i18n("B4 ISO"); +// xgettext: no-c-format +i18n("B4 JIS"); +// xgettext: no-c-format +i18n("C3"); +// xgettext: no-c-format +i18n("Demy Quarto"); +// xgettext: no-c-format +i18n("European Foolscap"); +// xgettext: no-c-format +i18n("Japanese Kaku Envelope Number 4"); +// xgettext: no-c-format +i18n("RA3"); +// xgettext: no-c-format +i18n("Royal Quarto"); +// xgettext: no-c-format +i18n("SRA3"); +// xgettext: no-c-format +i18n("SRA4"); +// xgettext: no-c-format +i18n("Autoselect"); +// xgettext: no-c-format +i18n("Optional Source"); +// xgettext: no-c-format +i18n("Paper type"); +// xgettext: no-c-format +i18n("Bond paper"); +// xgettext: no-c-format +i18n("Glossy film"); +// xgettext: no-c-format +i18n("Plain paper"); +// xgettext: no-c-format +i18n("Special paper"); +// xgettext: no-c-format +i18n("Transparency film"); +// xgettext: no-c-format +i18n("Printing Quality"); +// xgettext: no-c-format +i18n("RET (Resolution Enhancement)"); +// xgettext: no-c-format +i18n("Manual Feeding"); +// xgettext: no-c-format +i18n("Double-Sided Printing"); +// xgettext: no-c-format +i18n("Long Edge (Standard)"); +// xgettext: no-c-format +i18n("Short Edge (Flip)"); +// xgettext: no-c-format +i18n("1200x600 DPI"); +// xgettext: no-c-format +i18n("GhostScript pre-filtering"); +// xgettext: no-c-format +i18n("Convert to PS level 1"); +// xgettext: no-c-format +i18n("Convert to PS level 2"); +// xgettext: no-c-format +i18n("No pre-filtering"); +// xgettext: no-c-format +i18n("Printer default"); +// xgettext: no-c-format +i18n("Tray 6"); +// xgettext: no-c-format +i18n("Tray 7"); +// xgettext: no-c-format +i18n("Printing Mode"); +// xgettext: no-c-format +i18n("Manual Feed of Paper"); +// xgettext: no-c-format +i18n("Binding for Double-Sided Pr."); +// xgettext: no-c-format +i18n("Long Edge"); +// xgettext: no-c-format +i18n("Short Edge"); +// xgettext: no-c-format +i18n("REt Setting"); +// xgettext: no-c-format +i18n("Density"); +// xgettext: no-c-format +i18n("Economy mode"); +// xgettext: no-c-format +i18n("Economy Mode"); +// xgettext: no-c-format +i18n("Standard Mode"); +// xgettext: no-c-format +i18n("Fast Res."); +// xgettext: no-c-format +i18n("Memory Booster Technology"); +// xgettext: no-c-format +i18n("Monochrome"); +// xgettext: no-c-format +i18n("Floyd-Steinberg dithered printing"); +// xgettext: no-c-format +i18n("Standard printing"); +// xgettext: no-c-format +i18n("Color mode"); +// xgettext: no-c-format +i18n("Contone (4096 colors)"); +// xgettext: no-c-format +i18n("Normal (8 colors)"); +// xgettext: no-c-format +i18n("16x20"); +// xgettext: no-c-format +i18n("16x24"); +// xgettext: no-c-format +i18n("Black and White"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color (Low Memory)"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Gray"); +// xgettext: no-c-format +i18n("Normal Color"); +// xgettext: no-c-format +i18n("Raster Graphics Quality"); +// xgettext: no-c-format +i18n("High"); +// xgettext: no-c-format +i18n("Black, draft quality, ink economy mode"); +// xgettext: no-c-format +i18n("Black, normal quality"); +// xgettext: no-c-format +i18n("Color, best quality, optional color correction"); +// xgettext: no-c-format +i18n("Color, best quality, black ink disabled, optional color correction"); +// xgettext: no-c-format +i18n("Color, draft quality, ink economy, fast dither, no color correction"); +// xgettext: no-c-format +i18n("Color, normal quality, optional color correction"); +// xgettext: no-c-format +i18n("Color, normal quality, black ink disabled, optional color correction"); +// xgettext: no-c-format +i18n("Do not use Color Correction"); +// xgettext: no-c-format +i18n("DisableColorCorrection"); +// xgettext: no-c-format +i18n("EnableColorCorrection"); +// xgettext: no-c-format +i18n("Choice of Ghostscript Driver"); +// xgettext: no-c-format +i18n("Attempts to choose best PNM format for document; not always reliable."); +// xgettext: no-c-format +i18n("Attempts to choose best monochrome PNM format for document; not always reliable."); +// xgettext: no-c-format +i18n("A fast monochrome format; best for B&W text and line images."); +// xgettext: no-c-format +i18n("256-shade greyscale format"); +// xgettext: no-c-format +i18n("Format for color images (includes monochrome)."); +// xgettext: no-c-format +i18n("Force left-to-right print sweeps only (reduce striping)"); +// xgettext: no-c-format +i18n("Unidirectional"); +// xgettext: no-c-format +i18n("Bidirectional"); +// xgettext: no-c-format +i18n("Ink Reduction"); +// xgettext: no-c-format +i18n("25 %"); +// xgettext: no-c-format +i18n("25 % with Gamma Correction"); +// xgettext: no-c-format +i18n("50 %"); +// xgettext: no-c-format +i18n("50 % with Gamma Correction"); +// xgettext: no-c-format +i18n("600x600 DPI monochrome"); +// xgettext: no-c-format +i18n("A6 (Post card)"); +// xgettext: no-c-format +i18n("Photo (4 x 6 in., 10 x 15 cm)"); +// xgettext: no-c-format +i18n("300 DPI Grayscale"); +// xgettext: no-c-format +i18n("300 DPI Normal"); +// xgettext: no-c-format +i18n("300 DPI Photo"); +// xgettext: no-c-format +i18n("600 DPI Photo"); +// xgettext: no-c-format +i18n("Use Postcards"); +// xgettext: no-c-format +i18n("Postcards"); +// xgettext: no-c-format +i18n("Sheets"); +// xgettext: no-c-format +i18n("Rendering type"); +// xgettext: no-c-format +i18n("Snap black to white, others to black"); +// xgettext: no-c-format +i18n("Cluster ordered dither"); +// xgettext: no-c-format +i18n("Monochrome cluster ordered dither"); +// xgettext: no-c-format +i18n("Driver does dithering"); +// xgettext: no-c-format +i18n("Error diffusion"); +// xgettext: no-c-format +i18n("Monochrome error diffusion"); +// xgettext: no-c-format +i18n("Ordered dithering"); +// xgettext: no-c-format +i18n("Monochrome ordered dithering"); +// xgettext: no-c-format +i18n("Snap to primaries"); +// xgettext: no-c-format +i18n("Best Quality Color"); +// xgettext: no-c-format +i18n("Desktop CSF"); +// xgettext: no-c-format +i18n("Desktop Sheet Feeder"); +// xgettext: no-c-format +i18n("Portable Sheet Feeder"); +// xgettext: no-c-format +i18n("Ink Type"); +// xgettext: no-c-format +i18n("Color + Black Cartridges"); +// xgettext: no-c-format +i18n("Color + Photo Cartridges"); +// xgettext: no-c-format +i18n("300 DPI Color"); +// xgettext: no-c-format +i18n("300 DPI Draft"); +// xgettext: no-c-format +i18n("On (Flip on Long Edge)"); +// xgettext: no-c-format +i18n("On (Flip on Short Edge)"); +// xgettext: no-c-format +i18n("600 DPI Normal"); +// xgettext: no-c-format +i18n("Special"); +// xgettext: no-c-format +i18n("Transparent"); +// xgettext: no-c-format +i18n("Quality Type"); +// xgettext: no-c-format +i18n("Double-sided printing"); +// xgettext: no-c-format +i18n("Behavior when Toner Low"); +// xgettext: no-c-format +i18n("Continue Printing"); +// xgettext: no-c-format +i18n("Stop Printing"); +// xgettext: no-c-format +i18n("Job Offset"); +// xgettext: no-c-format +i18n("Cassette"); +// xgettext: no-c-format +i18n("First"); +// xgettext: no-c-format +i18n("90 DPI"); +// xgettext: no-c-format +i18n("180 DPI"); +// xgettext: no-c-format +i18n("16MB RAM"); +// xgettext: no-c-format +i18n("32MB RAM"); +// xgettext: no-c-format +i18n("48MB RAM"); +// xgettext: no-c-format +i18n("64MB RAM"); +// xgettext: no-c-format +i18n("80MB RAM"); +// xgettext: no-c-format +i18n("96MB RAM"); +// xgettext: no-c-format +i18n("128MB RAM"); +// xgettext: no-c-format +i18n("144MB RAM"); +// xgettext: no-c-format +i18n("160MB RAM"); +// xgettext: no-c-format +i18n("192MB - 224MB RAM"); +// xgettext: no-c-format +i18n("256MB - 512MB RAM"); +// xgettext: no-c-format +i18n("Drawer Base"); +// xgettext: no-c-format +i18n("DB-208 (3 Trays)"); +// xgettext: no-c-format +i18n("DB-608 (2 Trays)"); +// xgettext: no-c-format +i18n("DB-208A (1 Tray)"); +// xgettext: no-c-format +i18n("Finisher Installed"); +// xgettext: no-c-format +i18n("FS-105"); +// xgettext: no-c-format +i18n("400dpi"); +// xgettext: no-c-format +i18n("Edge Smoothing"); +// xgettext: no-c-format +i18n("Text Only"); +// xgettext: no-c-format +i18n("All Objects"); +// xgettext: no-c-format +i18n("Print Density"); +// xgettext: no-c-format +i18n("Toner Save"); +// xgettext: no-c-format +i18n("OHP Transparency"); +// xgettext: no-c-format +i18n("Thin Paper"); +// xgettext: no-c-format +i18n("Thick Paper"); +// xgettext: no-c-format +i18n("Duplex Mode"); +// xgettext: no-c-format +i18n("Sort"); +// xgettext: no-c-format +i18n("Group"); +// xgettext: no-c-format +i18n("Special Modes"); +// xgettext: no-c-format +i18n("2-in-1"); +// xgettext: no-c-format +i18n("Booklet"); +// xgettext: no-c-format +i18n("Stapling"); +// xgettext: no-c-format +i18n("Single (Portrait)"); +// xgettext: no-c-format +i18n("Single (Landscape)"); +// xgettext: no-c-format +i18n("Double Side (Portrait)"); +// xgettext: no-c-format +i18n("Double Side (Landscape)"); +// xgettext: no-c-format +i18n("Double Top (Portrait)"); +// xgettext: no-c-format +i18n("Double Top (Landscape)"); +// xgettext: no-c-format +i18n("Wait Mode"); +// xgettext: no-c-format +i18n("Front Cover"); +// xgettext: no-c-format +i18n("Printed"); +// xgettext: no-c-format +i18n("Blank"); +// xgettext: no-c-format +i18n("Front Cover Tray"); +// xgettext: no-c-format +i18n("Back Cover"); +// xgettext: no-c-format +i18n("Cover Tray"); +// xgettext: no-c-format +i18n("Manual Feed (Thick)"); +// xgettext: no-c-format +i18n("Middle"); +// xgettext: no-c-format +i18n("Output Order"); +// xgettext: no-c-format +i18n("Half-letter (5 1/2 x 8 1/2 in)"); +// xgettext: no-c-format +i18n("Letter (8 1/2 x 11 in)"); +// xgettext: no-c-format +i18n("Legal (8 1/2 x 14 in)"); +// xgettext: no-c-format +i18n("Tabloid (11 x 17 in)"); +// xgettext: no-c-format +i18n("F4"); +// xgettext: no-c-format +i18n("Half-letter"); +// xgettext: no-c-format +i18n("No Finisher"); +// xgettext: no-c-format +i18n("FS-106"); +// xgettext: no-c-format +i18n("FS-108B (BookletMaker)"); +// xgettext: no-c-format +i18n("PI-108"); +// xgettext: no-c-format +i18n("Large Capacity Tray"); +// xgettext: no-c-format +i18n("Tandem Configuration"); +// xgettext: no-c-format +i18n("Fold & Stitch"); +// xgettext: no-c-format +i18n("Fold only"); +// xgettext: no-c-format +i18n("Fold & Saddle Stitch"); +// xgettext: no-c-format +i18n("Wait"); +// xgettext: no-c-format +i18n("Wait with Proof"); +// xgettext: no-c-format +i18n("Back Cover Tray"); +// xgettext: no-c-format +i18n("Tandem Printing"); +// xgettext: no-c-format +i18n("Normal Mode (Auto Select)"); +// xgettext: no-c-format +i18n("Split Mode (Auto Split)"); +// xgettext: no-c-format +i18n("Split Mode (Equal Split)"); +// xgettext: no-c-format +i18n("Print Engine Select (Printer 1)"); +// xgettext: no-c-format +i18n("Print Engine Select (Printer 2)"); +// xgettext: no-c-format +i18n("EcoPrint"); +// xgettext: no-c-format +i18n("PF-8 Paper Feeder"); +// xgettext: no-c-format +i18n("Memory"); +// xgettext: no-c-format +i18n("1MB Upgrade"); +// xgettext: no-c-format +i18n("2MB Upgrade"); +// xgettext: no-c-format +i18n("4MB Upgrade"); +// xgettext: no-c-format +i18n("300 Dots per Inch (dpi)"); +// xgettext: no-c-format +i18n("KIR"); +// xgettext: no-c-format +i18n("Envelope #6"); +// xgettext: no-c-format +i18n("Envelope #9"); +// xgettext: no-c-format +i18n("Cassette 1 (Internal)"); +// xgettext: no-c-format +i18n("Cassette 2"); +// xgettext: no-c-format +i18n("Auto Tray Switch"); +// xgettext: no-c-format +i18n("1.6.0 [08-13-99]"); +// xgettext: no-c-format +i18n("PF-16 Paper Feeder"); +// xgettext: no-c-format +i18n("8MB Upgrade"); +// xgettext: no-c-format +i18n("16MB Upgrade"); +// xgettext: no-c-format +i18n("32MB Upgrade"); +// xgettext: no-c-format +i18n("600 Dots per Inch (dpi)"); +// xgettext: no-c-format +i18n("1.6.1 [02-28-2000]"); +// xgettext: no-c-format +i18n("PF-4 Paper Feeder"); +// xgettext: no-c-format +i18n("3MB Upgrade"); +// xgettext: no-c-format +i18n("PF-17 Paper Feeder"); +// xgettext: no-c-format +i18n("Optional Disk"); +// xgettext: no-c-format +i18n("PostCard"); +// xgettext: no-c-format +i18n("DoublePostCard"); +// xgettext: no-c-format +i18n("Multi-Purpose Feeder"); +// xgettext: no-c-format +i18n("Job Spooling"); +// xgettext: no-c-format +i18n("Optional Feeder"); +// xgettext: no-c-format +i18n("PF-21 Paper Feeders"); +// xgettext: no-c-format +i18n("One"); +// xgettext: no-c-format +i18n("Two"); +// xgettext: no-c-format +i18n("Output Device"); +// xgettext: no-c-format +i18n("SO-6 Bulk Sorter"); +// xgettext: no-c-format +i18n("ST-20 Bulk Stacker"); +// xgettext: no-c-format +i18n("12MB Upgrade"); +// xgettext: no-c-format +i18n("20MB Upgrade"); +// xgettext: no-c-format +i18n("24MB Upgrade"); +// xgettext: no-c-format +i18n("36MB Upgrade"); +// xgettext: no-c-format +i18n("40MB Upgrade"); +// xgettext: no-c-format +i18n("48MB Upgrade"); +// xgettext: no-c-format +i18n("64MB Upgrade"); +// xgettext: no-c-format +i18n("Cassette 3"); +// xgettext: no-c-format +i18n("Custom 1"); +// xgettext: no-c-format +i18n("Custom 2"); +// xgettext: no-c-format +i18n("Custom 3"); +// xgettext: no-c-format +i18n("Custom 4"); +// xgettext: no-c-format +i18n("Custom 5"); +// xgettext: no-c-format +i18n("Custom 6"); +// xgettext: no-c-format +i18n("Custom 7"); +// xgettext: no-c-format +i18n("Custom 8"); +// xgettext: no-c-format +i18n("Top Tray (Face-Down)"); +// xgettext: no-c-format +i18n("Rear Tray (Face-Up)"); +// xgettext: no-c-format +i18n("Stacker Mode (Face-Down)"); +// xgettext: no-c-format +i18n("Sorter Mode (Face-Down)"); +// xgettext: no-c-format +i18n("Collator Mode (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 1 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 2 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 3 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 4 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 5 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 6 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 7 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 8 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 9 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 10 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 11 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 12 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 13 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 14 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 15 (Face-Down)"); +// xgettext: no-c-format +i18n("Duplexing"); +// xgettext: no-c-format +i18n("Temporary"); +// xgettext: no-c-format +i18n("EF-1 Envelope Feeder"); +// xgettext: no-c-format +i18n("UF-1 Universal Feeder"); +// xgettext: no-c-format +i18n("PF-7 Bulk Feeder"); +// xgettext: no-c-format +i18n("PF-5 Paper Feeders"); +// xgettext: no-c-format +i18n("HS-3 Bulk Stacker"); +// xgettext: no-c-format +i18n("Bulk Feeder"); +// xgettext: no-c-format +i18n("Universal Feeder"); +// xgettext: no-c-format +i18n("Stacker Mode (Face-Up)"); +// xgettext: no-c-format +i18n("5MB Upgrade"); +// xgettext: no-c-format +i18n("6MB Upgrade"); +// xgettext: no-c-format +i18n("9MB Upgrade"); +// xgettext: no-c-format +i18n("10MB Upgrade"); +// xgettext: no-c-format +i18n("17MB Upgrade"); +// xgettext: no-c-format +i18n("18MB Upgrade"); +// xgettext: no-c-format +i18n("33MB Upgrade"); +// xgettext: no-c-format +i18n("34MB Upgrade"); +// xgettext: no-c-format +i18n("PF-7E Bulk Feeder"); +// xgettext: no-c-format +i18n("PF-20 Paper Feeders"); +// xgettext: no-c-format +i18n("HS-3E Bulk Stacker"); +// xgettext: no-c-format +i18n("60MB Upgrade"); +// xgettext: no-c-format +i18n("1200 Dots per Inch (dpi)"); +// xgettext: no-c-format +i18n("PF-1 Paper Feeder"); +// xgettext: no-c-format +i18n("Cassette 1"); +// xgettext: no-c-format +i18n("7MB Upgrade"); +// xgettext: no-c-format +i18n("13MB Upgrade"); +// xgettext: no-c-format +i18n("PF-2 Paper Feeder"); +// xgettext: no-c-format +i18n("11x17 (Ledger)"); +// xgettext: no-c-format +i18n("Side Tray (Face-Up)"); +// xgettext: no-c-format +i18n("PF-80 Paper Feeder"); +// xgettext: no-c-format +i18n("Process Color (CMYK)"); +// xgettext: no-c-format +i18n("Quick Color (CMY)"); +// xgettext: no-c-format +i18n("Color Matching"); +// xgettext: no-c-format +i18n("Simulate Display"); +// xgettext: no-c-format +i18n("Side Tray (Face-Down)"); +// xgettext: no-c-format +i18n("Permanent"); +// xgettext: no-c-format +i18n("Barcode"); +// xgettext: no-c-format +i18n("First Page"); +// xgettext: no-c-format +i18n("Barcode ID"); +// xgettext: no-c-format +i18n("Barcode Position"); +// xgettext: no-c-format +i18n("Upper Left"); +// xgettext: no-c-format +i18n("Upper Right"); +// xgettext: no-c-format +i18n("Lower Left"); +// xgettext: no-c-format +i18n("Lower Right"); +// xgettext: no-c-format +i18n("Upper Left Vertical"); +// xgettext: no-c-format +i18n("Upper Right Vertical"); +// xgettext: no-c-format +i18n("Lower Left Vertical"); +// xgettext: no-c-format +i18n("Lower Right Vertical"); +// xgettext: no-c-format +i18n("PF-81 Paper Feeder"); +// xgettext: no-c-format +i18n("Color Correction"); +// xgettext: no-c-format +i18n("Application Corrected"); +// xgettext: no-c-format +i18n("Printer Corrected"); +// xgettext: no-c-format +i18n("Ink Simulation (CMYK)"); +// xgettext: no-c-format +i18n("Euroscale Press"); +// xgettext: no-c-format +i18n("SWOP Press"); +// xgettext: no-c-format +i18n("Monitor Simulation (RGB)"); +// xgettext: no-c-format +i18n("SMPTE240M"); +// xgettext: no-c-format +i18n("sRGB (HDTV)"); +// xgettext: no-c-format +i18n("Trinitron"); +// xgettext: no-c-format +i18n("Apple RGB"); +// xgettext: no-c-format +i18n("NTSC"); +// xgettext: no-c-format +i18n("Duplex Paper"); +// xgettext: no-c-format +i18n("Coated Paper"); +// xgettext: no-c-format +i18n("Temporary (RAM Disk)"); +// xgettext: no-c-format +i18n("Temporary (Hard Disk)"); +// xgettext: no-c-format +i18n("Permanent (Hard Disk)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (Administrator)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 1)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 2)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 3)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 4)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 5)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 6)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 7)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 8)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 9)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 10)"); +// xgettext: no-c-format +i18n("PF-26 Paper Feeders"); +// xgettext: no-c-format +i18n("PF-9 Paper Feeders"); +// xgettext: no-c-format +i18n("11MB Upgrade"); +// xgettext: no-c-format +i18n("15MB Upgrade"); +// xgettext: no-c-format +i18n("19MB Upgrade"); +// xgettext: no-c-format +i18n("23MB Upgrade"); +// xgettext: no-c-format +i18n("31MB Upgrade"); +// xgettext: no-c-format +i18n("35MB Upgrade"); +// xgettext: no-c-format +i18n("39MB Upgrade"); +// xgettext: no-c-format +i18n("47MB Upgrade"); +// xgettext: no-c-format +i18n("63MB Upgrade"); +// xgettext: no-c-format +i18n("PF-25 Paper Feeders"); +// xgettext: no-c-format +i18n("38MB Upgrade"); +// xgettext: no-c-format +i18n("PF-30 Paper Feeders"); +// xgettext: no-c-format +i18n("One (2 Cassettes)"); +// xgettext: no-c-format +i18n("Two (4 Cassettes)"); +// xgettext: no-c-format +i18n("Three (6 Cassettes)"); +// xgettext: no-c-format +i18n("SO-30 Bulk Sorter"); +// xgettext: no-c-format +i18n("ST-30 Bulk Stacker"); +// xgettext: no-c-format +i18n("DF-30 Document Finisher"); +// xgettext: no-c-format +i18n("Cassette 4"); +// xgettext: no-c-format +i18n("Cassette 5"); +// xgettext: no-c-format +i18n("Cassette 6"); +// xgettext: no-c-format +i18n("Staple Method"); +// xgettext: no-c-format +i18n("Staple Job up to 20 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 20 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 19 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 18 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 17 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 16 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 15 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 14 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 13 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 12 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 11 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 10 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 9 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 8 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 7 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 6 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 5 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 4 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 3 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 2 Sheets"); +// xgettext: no-c-format +i18n("DF-31 Document Finisher"); +// xgettext: no-c-format +i18n("44MB Upgrade"); +// xgettext: no-c-format +i18n("Lower Tray - Option"); +// xgettext: no-c-format +i18n("Envelope Feeder - Option"); +// xgettext: no-c-format +i18n("Printer Memory - Option"); +// xgettext: no-c-format +i18n("1.5 Mb Printer Memory"); +// xgettext: no-c-format +i18n("2.5 Mb Printer Memory"); +// xgettext: no-c-format +i18n("4 Mb Printer Memory"); +// xgettext: no-c-format +i18n("C9 Envelope"); +// xgettext: no-c-format +i18n("B5 Envelope"); +// xgettext: no-c-format +i18n("Manual Envelope"); +// xgettext: no-c-format +i18n("Manual Paper"); +// xgettext: no-c-format +i18n("Tray Linking"); +// xgettext: no-c-format +i18n("2 Mb Printer Memory"); +// xgettext: no-c-format +i18n("3 Mb Printer Memory"); +// xgettext: no-c-format +i18n("5+ Mb Printer Memory"); +// xgettext: no-c-format +i18n("Smoothing"); +// xgettext: no-c-format +i18n("Other Envelope"); +// xgettext: no-c-format +i18n("Duplex - Option"); +// xgettext: no-c-format +i18n("Simplex"); +// xgettext: no-c-format +i18n("Duplex - Long Edge"); +// xgettext: no-c-format +i18n("Duplex - Short Edge"); +// xgettext: no-c-format +i18n("Flash Memory Card - Option"); +// xgettext: no-c-format +i18n("Printer Hard Disk - Option"); +// xgettext: no-c-format +i18n("2 MB Printer Memory"); +// xgettext: no-c-format +i18n("4 MB Printer Memory"); +// xgettext: no-c-format +i18n("6 MB Printer Memory"); +// xgettext: no-c-format +i18n("8 MB Printer Memory"); +// xgettext: no-c-format +i18n("10 MB Printer Memory"); +// xgettext: no-c-format +i18n("12 MB Printer Memory"); +// xgettext: no-c-format +i18n("16 MB Printer Memory"); +// xgettext: no-c-format +i18n("8 Mb Printer Memory"); +// xgettext: no-c-format +i18n("12 Mb Printer Memory"); +// xgettext: no-c-format +i18n("16 Mb Printer Memory"); +// xgettext: no-c-format +i18n("Printer Software Version"); +// xgettext: no-c-format +i18n("250.0x"); +// xgettext: no-c-format +i18n("250.2x"); +// xgettext: no-c-format +i18n("360 dpi"); +// xgettext: no-c-format +i18n("High Quality"); +// xgettext: no-c-format +i18n("Bold Black"); +// xgettext: no-c-format +i18n("Screening"); +// xgettext: no-c-format +i18n("Color Balance"); +// xgettext: no-c-format +i18n("Blue Adjust"); +// xgettext: no-c-format +i18n("Line Art && Text"); +// xgettext: no-c-format +i18n("Images"); +// xgettext: no-c-format +i18n("Color Model"); +// xgettext: no-c-format +i18n("RGB"); +// xgettext: no-c-format +i18n("Image Brightness"); +// xgettext: no-c-format +i18n("+5"); +// xgettext: no-c-format +i18n("+10"); +// xgettext: no-c-format +i18n("+15"); +// xgettext: no-c-format +i18n("+20"); +// xgettext: no-c-format +i18n("+25"); +// xgettext: no-c-format +i18n("+30"); +// xgettext: no-c-format +i18n("+35"); +// xgettext: no-c-format +i18n("+40"); +// xgettext: no-c-format +i18n("+45"); +// xgettext: no-c-format +i18n("+50"); +// xgettext: no-c-format +i18n("Image Contrast"); +// xgettext: no-c-format +i18n("20 MB Printer Memory"); +// xgettext: no-c-format +i18n("32 or more MB Printer Memory"); +// xgettext: no-c-format +i18n("Pause Mode"); +// xgettext: no-c-format +i18n("ColorGrade"); +// xgettext: no-c-format +i18n("Image Diffusion"); +// xgettext: no-c-format +i18n("Oversize 11.7 x 22 in"); +// xgettext: no-c-format +i18n("Duplexer - Option"); +// xgettext: no-c-format +i18n("Tray 3 - Option"); +// xgettext: no-c-format +i18n("Feeder 2 - Option"); +// xgettext: no-c-format +i18n("1 MB Flash Memory"); +// xgettext: no-c-format +i18n("2 MB Flash Memory"); +// xgettext: no-c-format +i18n("4 MB Flash Memory"); +// xgettext: no-c-format +i18n("18 MB Printer Memory"); +// xgettext: no-c-format +i18n("24 MB Printer Memory"); +// xgettext: no-c-format +i18n("Print Darkness"); +// xgettext: no-c-format +i18n("1200 dpi"); +// xgettext: no-c-format +i18n("Feeder"); +// xgettext: no-c-format +i18n("Feeder 2"); +// xgettext: no-c-format +i18n("Tray 2 - Option"); +// xgettext: no-c-format +i18n("32 MB Printer Memory"); +// xgettext: no-c-format +i18n("64 MB Printer Memory"); +// xgettext: no-c-format +i18n("96 MB Printer Memory"); +// xgettext: no-c-format +i18n("128 MB Printer Memory"); +// xgettext: no-c-format +i18n("Toner Saver"); +// xgettext: no-c-format +i18n("Image Smoothing"); +// xgettext: no-c-format +i18n("Colored Paper"); +// xgettext: no-c-format +i18n("Custom Type 1"); +// xgettext: no-c-format +i18n("Custom Type 2"); +// xgettext: no-c-format +i18n("Custom Type 3"); +// xgettext: no-c-format +i18n("Custom Type 4"); +// xgettext: no-c-format +i18n("Port Rotation"); +// xgettext: no-c-format +i18n("Collate Copies"); +// xgettext: no-c-format +i18n("Top"); +// xgettext: no-c-format +i18n("Rear"); +// xgettext: no-c-format +i18n("Black & White"); +// xgettext: no-c-format +i18n("Display"); +// xgettext: no-c-format +i18n("1200 Image Quality"); +// xgettext: no-c-format +i18n("B5 182 x 257 mm"); +// xgettext: no-c-format +i18n("A5 148 x 210 mm"); +// xgettext: no-c-format +i18n("B4 257 x 364 mm"); +// xgettext: no-c-format +i18n("A3 297 x 419 mm"); +// xgettext: no-c-format +i18n("Universal 11.7 x 17 in"); +// xgettext: no-c-format +i18n("7 3/4 Envelope 3 7/8 x 7 1/2 in"); +// xgettext: no-c-format +i18n("9 Envelope 3 7/8 x 8 7/8 in"); +// xgettext: no-c-format +i18n("10 Envelope 4 1/8 x 9 1/2 in"); +// xgettext: no-c-format +i18n("DL Envelope 110 x 220 mm"); +// xgettext: no-c-format +i18n("C5 Envelope 162 x 229 mm"); +// xgettext: no-c-format +i18n("B5 Envelope 176 x 250 mm"); +// xgettext: no-c-format +i18n("Other Envelope 8 1/2 x 14 in"); +// xgettext: no-c-format +i18n("Universal"); +// xgettext: no-c-format +i18n("Comm10"); +// xgettext: no-c-format +i18n("ISOB5"); +// xgettext: no-c-format +i18n("Other"); +// xgettext: no-c-format +i18n("MP Feeder"); +// xgettext: no-c-format +i18n("36 MB Printer Memory"); +// xgettext: no-c-format +i18n("68 or more MB Printer Memory"); +// xgettext: no-c-format +i18n("Left Cartridge"); +// xgettext: no-c-format +i18n("Unknown Cartridge"); +// xgettext: no-c-format +i18n("Standard Black Cartridge"); +// xgettext: no-c-format +i18n("High Capacity Black Cartridge"); +// xgettext: no-c-format +i18n("Photo Cartridge"); +// xgettext: no-c-format +i18n("Right Cartridge"); +// xgettext: no-c-format +i18n("Standard Color Cartridge"); +// xgettext: no-c-format +i18n("High Capacity Color Cartridge"); +// xgettext: no-c-format +i18n("Greeting Card"); +// xgettext: no-c-format +i18n("Iron On"); +// xgettext: no-c-format +i18n("Photo Paper"); +// xgettext: no-c-format +i18n("QuickPrint"); +// xgettext: no-c-format +i18n("Universal 8 1/2 x 14 in"); +// xgettext: no-c-format +i18n("40 MB Printer Memory"); +// xgettext: no-c-format +i18n("72 or more MB Printer Memory"); +// xgettext: no-c-format +i18n("SA3 320 x 450 mm"); +// xgettext: no-c-format +i18n("Universal 12.6 x 22 in"); +// xgettext: no-c-format +i18n("SA3"); +// xgettext: no-c-format +i18n("Duplex Option - Option"); +// xgettext: no-c-format +i18n("Fax Card"); +// xgettext: no-c-format +i18n("Printer Setting"); +// xgettext: no-c-format +i18n("Black && White"); +// xgettext: no-c-format +i18n("2 Color Draft"); +// xgettext: no-c-format +i18n("Image Enhancement"); +// xgettext: no-c-format +i18n("PictureGrade"); +// xgettext: no-c-format +i18n("Custom Type 5"); +// xgettext: no-c-format +i18n("Custom Type 6"); +// xgettext: no-c-format +i18n("14 MB Printer Memory"); +// xgettext: no-c-format +i18n("28 MB Printer Memory"); +// xgettext: no-c-format +i18n("Toner Darkness"); +// xgettext: no-c-format +i18n("Printer's default"); +// xgettext: no-c-format +i18n("Tray 4 - Option"); +// xgettext: no-c-format +i18n("Tray 5 - Option"); +// xgettext: no-c-format +i18n("MP Feeder - Option"); +// xgettext: no-c-format +i18n("Number of Output Bins - Option"); +// xgettext: no-c-format +i18n("Standard Bin Only"); +// xgettext: no-c-format +i18n("1 Extra Bin"); +// xgettext: no-c-format +i18n("2 Extra Bins"); +// xgettext: no-c-format +i18n("3 Extra Bins"); +// xgettext: no-c-format +i18n("4 Extra Bins"); +// xgettext: no-c-format +i18n("5 Extra Bins"); +// xgettext: no-c-format +i18n("6 Extra Bins"); +// xgettext: no-c-format +i18n("7 Extra Bins"); +// xgettext: no-c-format +i18n("8 Extra Bins"); +// xgettext: no-c-format +i18n("9 Extra Bins"); +// xgettext: no-c-format +i18n("10 Extra Bins"); +// xgettext: no-c-format +i18n("11 Extra Bins"); +// xgettext: no-c-format +i18n("12 Extra Bins"); +// xgettext: no-c-format +i18n("13 Extra Bins"); +// xgettext: no-c-format +i18n("14 Extra Bins"); +// xgettext: no-c-format +i18n("15 Extra Bins"); +// xgettext: no-c-format +i18n("22 MB Printer Memory"); +// xgettext: no-c-format +i18n("Standard Bin"); +// xgettext: no-c-format +i18n("Bin 9"); +// xgettext: no-c-format +i18n("Bin 10"); +// xgettext: no-c-format +i18n("Bin 11"); +// xgettext: no-c-format +i18n("Bin 12"); +// xgettext: no-c-format +i18n("Bin 13"); +// xgettext: no-c-format +i18n("Bin 14"); +// xgettext: no-c-format +i18n("Bin 15"); +// xgettext: no-c-format +i18n("250-Sheet Drawer"); +// xgettext: no-c-format +i18n("500-Sheet Drawer"); +// xgettext: no-c-format +i18n("2000-Sheet Drawer"); +// xgettext: no-c-format +i18n("1 - Output Expander"); +// xgettext: no-c-format +i18n("1 - Hi-Capacity Output Expander"); +// xgettext: no-c-format +i18n("2 - 2 Output Expanders"); +// xgettext: no-c-format +i18n("2 - 1 Hi-Capacity + 1 Output Expander"); +// xgettext: no-c-format +i18n("3 - 3 Output Expanders"); +// xgettext: no-c-format +i18n("5 - 5-Bin Mailbox"); +// xgettext: no-c-format +i18n("6 - 1 Output Expander + 1 5-Bin Mailbox"); +// xgettext: no-c-format +i18n("6 - 1 5-Bin Mailbox + 1 Output Expander"); +// xgettext: no-c-format +i18n("10 - 2 5-Bin Mailboxes"); +// xgettext: no-c-format +i18n("Other Envelope 9.02 x 14 in"); +// xgettext: no-c-format +i18n("Color Registration"); +// xgettext: no-c-format +i18n("High Speed"); +// xgettext: no-c-format +i18n("Finish Quality"); +// xgettext: no-c-format +i18n("Medium Gloss"); +// xgettext: no-c-format +i18n("High Gloss"); +// xgettext: no-c-format +i18n("Low Gloss"); +// xgettext: no-c-format +i18n("Contone"); +// xgettext: no-c-format +i18n("Stochastic"); +// xgettext: no-c-format +i18n("Multipurpose Feeder"); +// xgettext: no-c-format +i18n("3 MB Printer Memory"); +// xgettext: no-c-format +i18n("Manual Feed Paper Type"); +// xgettext: no-c-format +i18n("Tray 1 Paper Type"); +// xgettext: no-c-format +i18n("Tray 2 Paper Type"); +// xgettext: no-c-format +i18n("1200 Quality"); +// xgettext: no-c-format +i18n("Paper Input Drawer - Option"); +// xgettext: no-c-format +i18n("Finisher - Option"); +// xgettext: no-c-format +i18n("Custom 11.7 x 17.7 in"); +// xgettext: no-c-format +i18n("Upper (Tray 1)"); +// xgettext: no-c-format +i18n("Lower (Tray 2)"); +// xgettext: no-c-format +i18n("Input Drawer (Tray 3)"); +// xgettext: no-c-format +i18n("No Tray Linking"); +// xgettext: no-c-format +i18n("Link Tray 1+2"); +// xgettext: no-c-format +i18n("Link Tray 1+2+3"); +// xgettext: no-c-format +i18n("Link Tray 2+3"); +// xgettext: no-c-format +i18n("Bin 0 (Top)"); +// xgettext: no-c-format +i18n("Bin 1 (Side)"); +// xgettext: no-c-format +i18n("Staple 1"); +// xgettext: no-c-format +i18n("Staple 2"); +// xgettext: no-c-format +i18n("Do Not Care"); +// xgettext: no-c-format +i18n("26 MB Printer Memory"); +// xgettext: no-c-format +i18n("Images Only"); +// xgettext: no-c-format +i18n("Entire Page"); +// xgettext: no-c-format +i18n("2500-Sheet Drawer"); +// xgettext: no-c-format +i18n("Mailbox - Option"); +// xgettext: no-c-format +i18n("Hole Punch"); +// xgettext: no-c-format +i18n("Offset Pages"); +// xgettext: no-c-format +i18n("Between Copies"); +// xgettext: no-c-format +i18n("Universal 11.69 x 17 in"); +// xgettext: no-c-format +i18n("300x1200 DPI"); +// xgettext: no-c-format +i18n("300x600 DPI"); +// xgettext: no-c-format +i18n("600x1200 DPI"); +// xgettext: no-c-format +i18n("1200x1200 DPI"); +// xgettext: no-c-format +i18n("1200x300 DPI"); +// xgettext: no-c-format +i18n("Normal Quality Color (4-ink)"); +// xgettext: no-c-format +i18n("Photo Quality Color (6-ink)"); +// xgettext: no-c-format +i18n("Bidirectional printing"); +// xgettext: no-c-format +i18n("off"); +// xgettext: no-c-format +i18n("on"); +// xgettext: no-c-format +i18n("300 dpi x 600 dpi"); +// xgettext: no-c-format +i18n("600 dpi x 600 dpi"); +// xgettext: no-c-format +i18n("1200 dpi x 600 dpi"); +// xgettext: no-c-format +i18n("Color"); +// xgettext: no-c-format +i18n("Page Drying Time"); +// xgettext: no-c-format +i18n("0 sec"); +// xgettext: no-c-format +i18n("10 sec."); +// xgettext: no-c-format +i18n("20 sec."); +// xgettext: no-c-format +i18n("30 sec."); +// xgettext: no-c-format +i18n("40 sec."); +// xgettext: no-c-format +i18n("50 sec"); +// xgettext: no-c-format +i18n("60 sec"); +// xgettext: no-c-format +i18n("300x300 dpi"); +// xgettext: no-c-format +i18n("300x600 dpi"); +// xgettext: no-c-format +i18n("600x1200 dpi"); +// xgettext: no-c-format +i18n("600x600 dpi"); +// xgettext: no-c-format +i18n("1200x1200 dpi"); +// xgettext: no-c-format +i18n("Optional Multi-Feeder"); +// xgettext: no-c-format +i18n("6 MB"); +// xgettext: no-c-format +i18n("7 MB"); +// xgettext: no-c-format +i18n("8 MB"); +// xgettext: no-c-format +i18n("10 MB"); +// xgettext: no-c-format +i18n("11 MB"); +// xgettext: no-c-format +i18n("12 MB"); +// xgettext: no-c-format +i18n("14 MB"); +// xgettext: no-c-format +i18n("18 MB"); +// xgettext: no-c-format +i18n("19 MB"); +// xgettext: no-c-format +i18n("20 MB"); +// xgettext: no-c-format +i18n("22 MB"); +// xgettext: no-c-format +i18n("26 MB"); +// xgettext: no-c-format +i18n("34 MB"); +// xgettext: no-c-format +i18n("Legal14"); +// xgettext: no-c-format +i18n("Legal13"); +// xgettext: no-c-format +i18n("Com10"); +// xgettext: no-c-format +i18n("Com9"); +// xgettext: no-c-format +i18n("Multi Feeder"); +// xgettext: no-c-format +i18n("TraySwitch"); +// xgettext: no-c-format +i18n("4 MB"); +// xgettext: no-c-format +i18n("5 MB"); +// xgettext: no-c-format +i18n("600x1200dpi"); +// xgettext: no-c-format +i18n("Multi-Feeder"); +// xgettext: no-c-format +i18n("2 MB"); +// xgettext: no-c-format +i18n("4MB"); +// xgettext: no-c-format +i18n("5MB"); +// xgettext: no-c-format +i18n("6MB"); +// xgettext: no-c-format +i18n("7MB"); +// xgettext: no-c-format +i18n("8MB"); +// xgettext: no-c-format +i18n("10MB"); +// xgettext: no-c-format +i18n("11MB"); +// xgettext: no-c-format +i18n("12MB"); +// xgettext: no-c-format +i18n("14MB"); +// xgettext: no-c-format +i18n("18MB"); +// xgettext: no-c-format +i18n("19MB"); +// xgettext: no-c-format +i18n("20MB"); +// xgettext: no-c-format +i18n("22MB"); +// xgettext: no-c-format +i18n("26MB"); +// xgettext: no-c-format +i18n("34MB"); +// xgettext: no-c-format +i18n("35MB"); +// xgettext: no-c-format +i18n("36MB"); +// xgettext: no-c-format +i18n("38MB"); +// xgettext: no-c-format +i18n("42MB"); +// xgettext: no-c-format +i18n("50MB"); +// xgettext: no-c-format +i18n("66MB"); +// xgettext: no-c-format +i18n("Env10"); +// xgettext: no-c-format +i18n("Env9"); +// xgettext: no-c-format +i18n("EnvDL"); +// xgettext: no-c-format +i18n("EnvC4"); +// xgettext: no-c-format +i18n("EnvC5"); +// xgettext: no-c-format +i18n("EnvMonarch"); +// xgettext: no-c-format +i18n("OKHalftoneMode"); +// xgettext: no-c-format +i18n("Regular"); +// xgettext: no-c-format +i18n("Photo"); +// xgettext: no-c-format +i18n("2.5 MB"); +// xgettext: no-c-format +i18n("3.5 MB"); +// xgettext: no-c-format +i18n("4.5 MB"); +// xgettext: no-c-format +i18n("6.5 MB"); +// xgettext: no-c-format +i18n("10.5 MB"); +// xgettext: no-c-format +i18n("18.5 MB"); +// xgettext: no-c-format +i18n("Post Card"); +// xgettext: no-c-format +i18n("Cardboard"); +// xgettext: no-c-format +i18n("Coated Film"); +// xgettext: no-c-format +i18n("Fine Paper"); +// xgettext: no-c-format +i18n("Iron Seal"); +// xgettext: no-c-format +i18n("OHP"); +// xgettext: no-c-format +i18n("OHP (MD 2000)"); +// xgettext: no-c-format +i18n("Rebeca Free"); +// xgettext: no-c-format +i18n("Color Depth"); +// xgettext: no-c-format +i18n("Floyd Steinb. High Qual. (32 bpp)"); +// xgettext: no-c-format +i18n("Floyd Steinberg Simple (8 bpp)"); +// xgettext: no-c-format +i18n("Monochrome (1 bpp)"); +// xgettext: no-c-format +i18n("Simple Color (4 bpp)"); +// xgettext: no-c-format +i18n("Dithering"); +// xgettext: no-c-format +i18n("DoubleSided"); +// xgettext: no-c-format +i18n("SingleSided"); +// xgettext: no-c-format +i18n("Black toner saving"); +// xgettext: no-c-format +i18n("EcoBlack"); +// xgettext: no-c-format +i18n("NormalBlack"); +// xgettext: no-c-format +i18n("60x144 dpi"); +// xgettext: no-c-format +i18n("60x72 dpi"); +// xgettext: no-c-format +i18n("120x144 dpi"); +// xgettext: no-c-format +i18n("120x72 dpi"); +// xgettext: no-c-format +i18n("240x144 dpi"); +// xgettext: no-c-format +i18n("240x72 dpi"); +// xgettext: no-c-format +i18n("60x180 dpi"); +// xgettext: no-c-format +i18n("60x216 dpi"); +// xgettext: no-c-format +i18n("60x60 dpi"); +// xgettext: no-c-format +i18n("120x180 dpi"); +// xgettext: no-c-format +i18n("120x216 dpi"); +// xgettext: no-c-format +i18n("120x60 dpi"); +// xgettext: no-c-format +i18n("180x180 dpi"); +// xgettext: no-c-format +i18n("180x216 dpi"); +// xgettext: no-c-format +i18n("180x60 dpi"); +// xgettext: no-c-format +i18n("180x72 dpi"); +// xgettext: no-c-format +i18n("240x180 dpi"); +// xgettext: no-c-format +i18n("240x216 dpi"); +// xgettext: no-c-format +i18n("240x60 dpi"); +// xgettext: no-c-format +i18n("360x180 dpi"); +// xgettext: no-c-format +i18n("360x216 dpi"); +// xgettext: no-c-format +i18n("360x60 dpi"); +// xgettext: no-c-format +i18n("360x72 dpi"); +// xgettext: no-c-format +i18n("72x72 dpi"); +// xgettext: no-c-format +i18n("144x144 dpi"); +// xgettext: no-c-format +i18n("Paper Size"); +// xgettext: no-c-format +i18n("Paper Tray"); +// xgettext: no-c-format +i18n("Paper Weight"); +// xgettext: no-c-format +i18n("Heavier paper (28lb)"); +// xgettext: no-c-format +i18n("Heaviest paper (32lb)"); +// xgettext: no-c-format +i18n("Heavy paper (24lb)"); +// xgettext: no-c-format +i18n("Light Paper (20lb)"); +// xgettext: no-c-format +i18n("Lightest Paper (16lb)"); +// xgettext: no-c-format +i18n("Darkness"); +// xgettext: no-c-format +i18n("Rendering Mode"); +// xgettext: no-c-format +i18n("Graphics Mode"); +// xgettext: no-c-format +i18n("Text Mode"); +// xgettext: no-c-format +i18n("US Executive"); +// xgettext: no-c-format +i18n("Special Paper"); +// xgettext: no-c-format +i18n("Envelope Feed"); +// xgettext: no-c-format +i18n("Output Mode"); +// xgettext: no-c-format +i18n("CMYK Color"); +// xgettext: no-c-format +i18n("CMY Color"); +// xgettext: no-c-format +i18n("CRET Color"); +// xgettext: no-c-format +i18n("Duplexer"); +// xgettext: no-c-format +i18n("Address - 1 1/8 x 3 1/2\""); +// xgettext: no-c-format +i18n("Large Address - 1 4/10 x 3 1/2\""); +// xgettext: no-c-format +i18n("Return Address - 3/4 x 2\""); +// xgettext: no-c-format +i18n("Shipping Address - 2 5/16 x 4\""); +// xgettext: no-c-format +i18n("Internet Postage 2-Part - 2 1/4 x 7 1/2\""); +// xgettext: no-c-format +i18n("Internet Postage 3-Part - 2 1/4 x 7\""); +// xgettext: no-c-format +i18n("File Folder - 9/16 x 3 7/16\""); +// xgettext: no-c-format +i18n("Hanging Folder - 9/16 x 2\""); +// xgettext: no-c-format +i18n("3.5\" Disk - 2 1/8 x 2 3/4\""); +// xgettext: no-c-format +i18n("136 DPI"); +// xgettext: no-c-format +i18n("203 DPI"); +// xgettext: no-c-format +i18n("Output Darkness"); +// xgettext: no-c-format +i18n("FanFoldUS"); +// xgettext: no-c-format +i18n("60 DPI"); +// xgettext: no-c-format +i18n("120x60 DPI"); +// xgettext: no-c-format +i18n("360x180 DPI"); +// xgettext: no-c-format +i18n("360 DPI"); +// xgettext: no-c-format +i18n("60x72 DPI"); +// xgettext: no-c-format +i18n("120x72 DPI"); +// xgettext: no-c-format +i18n("240x72 DPI"); +// xgettext: no-c-format +i18n("720 DPI"); +// xgettext: no-c-format +i18n("Page Size and Printing Quality"); +// xgettext: no-c-format +i18n("A4, 600x600 DPI"); +// xgettext: no-c-format +i18n("A4, 1200x600 DPI"); +// xgettext: no-c-format +i18n("B5, 600x600 DPI"); +// xgettext: no-c-format +i18n("B5, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 600x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 600x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Back Print Media"); +// xgettext: no-c-format +i18n("High Grade Paper"); +// xgettext: no-c-format +i18n("Iron-On Transfer Sheet"); +// xgettext: no-c-format +i18n("Hot OHP Media"); +// xgettext: no-c-format +i18n("BlackOnly"); +// xgettext: no-c-format +i18n("HalfTone"); +// xgettext: no-c-format +i18n("NoHalfTone"); +// xgettext: no-c-format +i18n("FloydSteinberg"); +// xgettext: no-c-format +i18n("NoFloydSteinberg"); +// xgettext: no-c-format +i18n("Banding"); +// xgettext: no-c-format +i18n("NoBanding"); +// xgettext: no-c-format +i18n("Color Mode"); +// xgettext: no-c-format +i18n("Do Curl Correction"); +// xgettext: no-c-format +i18n("CurlCorrectionAlways"); +// xgettext: no-c-format +i18n("CurlCorrectionAfterFinal"); +// xgettext: no-c-format +i18n("Color Correction Mode"); +// xgettext: no-c-format +i18n("FullBlack"); +// xgettext: no-c-format +i18n("Next Job"); +// xgettext: no-c-format +i18n("NextJobOnSameSheet"); +// xgettext: no-c-format +i18n("NextJobOnNewSheet"); +// xgettext: no-c-format +i18n("Next Job is spot color page"); +// xgettext: no-c-format +i18n("NextSpotColorPage"); +// xgettext: no-c-format +i18n("NextNotSpotColorPage"); +// xgettext: no-c-format +i18n("Color correction"); +// xgettext: no-c-format +i18n("NoColorCorrection"); +// xgettext: no-c-format +i18n("ColorCorrection"); +// xgettext: no-c-format +i18n("Curl Correction on current pass"); +// xgettext: no-c-format +i18n("NoCurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("CurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("How often every dot is printed"); +// xgettext: no-c-format +i18n("PrintTwice"); +// xgettext: no-c-format +i18n("PrintOnce"); +// xgettext: no-c-format +i18n("Black Printing Mode"); +// xgettext: no-c-format +i18n("SolidBlack"); +// xgettext: no-c-format +i18n("MixedBlack"); +// xgettext: no-c-format +i18n("Square Dithering"); +// xgettext: no-c-format +i18n("SquareDithering"); +// xgettext: no-c-format +i18n("NoSquareDithering"); +// xgettext: no-c-format +i18n("This Job is spot color page"); +// xgettext: no-c-format +i18n("ThisSpotColorPage"); +// xgettext: no-c-format +i18n("ThisNotSpotColorPage"); +// xgettext: no-c-format +i18n("300 DPI Normal, color and black cartr."); +// xgettext: no-c-format +i18n("300 DPI Normal, color cartr. only"); +// xgettext: no-c-format +i18n("A4, Color"); +// xgettext: no-c-format +i18n("A4, Grayscale"); +// xgettext: no-c-format +i18n("Letter, Color"); +// xgettext: no-c-format +i18n("Letter, Grayscale"); +// xgettext: no-c-format +i18n("Device"); +// xgettext: no-c-format +i18n("Link stylewriter in dev directory (set it to the appropriate device)"); +// xgettext: no-c-format +i18n("Serial Port #1 (Linux)"); +// xgettext: no-c-format +i18n("Serial Port #2 (Linux)"); +// xgettext: no-c-format +i18n("Serial Port #1 (NetBSD)"); +// xgettext: no-c-format +i18n("Serial Port #2 (NetBSD)"); +// xgettext: no-c-format +i18n("Pass output to device set by the spooler"); +// xgettext: no-c-format +i18n("Label Size"); +// xgettext: no-c-format +i18n("2.25x7.5in, 59x190mm (Lever archive - large)"); +// xgettext: no-c-format +i18n("1.4x7.5in, 38x190mm (Lever archive - small)"); +// xgettext: no-c-format +i18n("2.125x4.0in, 54x101mm (Shipping badge)"); +// xgettext: no-c-format +i18n("2.125x2.75in, 54x70mm (Diskette)"); +// xgettext: no-c-format +i18n("1.4x3.5in, 36x89mm (Large address)"); +// xgettext: no-c-format +i18n("1.125x3.5in, 28x89mm (Standard address)"); +// xgettext: no-c-format +i18n("0.5x2in, 12x50mm (Suspension file)"); +// xgettext: no-c-format +i18n("0.75x5.875in, 19x147mm (Video tape spine)"); +// xgettext: no-c-format +i18n("1.8x3.1in, 46x78mm (Video tape top)"); +// xgettext: no-c-format +i18n("Dual"); +// xgettext: no-c-format +i18n("Thicker Paper"); +// xgettext: no-c-format +i18n("Toner Saving"); +// xgettext: no-c-format +i18n("High (50%)"); +// xgettext: no-c-format +i18n("Low (25%)"); +// xgettext: no-c-format +i18n("2400x600 DPI"); +// xgettext: no-c-format +i18n("180x360 dpi"); +// xgettext: no-c-format +i18n("360x360 dpi"); +// xgettext: no-c-format +i18n("Media Weight"); +// xgettext: no-c-format +i18n("Normal paper"); +// xgettext: no-c-format +i18n("Thick paper"); +// xgettext: no-c-format +i18n("Draft Quality"); +// xgettext: no-c-format +i18n("Normal Quality"); +// xgettext: no-c-format +i18n("Ghostscript Bits Per Pixel"); +// xgettext: no-c-format +i18n("Monochrome (1bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript dithering (8bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript FS dithering (16bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (24 bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (32 bpp)"); +// xgettext: no-c-format +i18n("Mode"); +// xgettext: no-c-format +i18n("Four-color CMYK"); +// xgettext: no-c-format +i18n("Greyscale"); +// xgettext: no-c-format +i18n("Three-color RGB"); +// xgettext: no-c-format +i18n("Colors to be used"); +// xgettext: no-c-format +i18n("Cyan only"); +// xgettext: no-c-format +i18n("Cyan, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Cyan, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Yellow, Black"); +// xgettext: no-c-format +i18n("Black only"); +// xgettext: no-c-format +i18n("Black for any color"); +// xgettext: no-c-format +i18n("Magenta only"); +// xgettext: no-c-format +i18n("Magenta, Black"); +// xgettext: no-c-format +i18n("Magenta, Yellow"); +// xgettext: no-c-format +i18n("Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Yellow only"); +// xgettext: no-c-format +i18n("Yellow, Black"); +// xgettext: no-c-format +i18n("Auto Sheet Feeder"); +// xgettext: no-c-format +i18n("Manual without Pause"); +// xgettext: no-c-format +i18n("Manual with Pause"); +// xgettext: no-c-format +i18n("Back Print Film"); +// xgettext: no-c-format +i18n("Fabric Sheets"); +// xgettext: no-c-format +i18n("Glossy Photo Cards"); +// xgettext: no-c-format +i18n("Glossy Photo Paper"); +// xgettext: no-c-format +i18n("High Gloss Film"); +// xgettext: no-c-format +i18n("High Resolution Paper"); +// xgettext: no-c-format +i18n("Photo Paper Pro"); +// xgettext: no-c-format +i18n("T-Shirt Transfers"); +// xgettext: no-c-format +i18n("Black"); +// xgettext: no-c-format +i18n("1440 DPI"); +// xgettext: no-c-format +i18n("1440x720 DPI"); +// xgettext: no-c-format +i18n("180x180 DPI"); +// xgettext: no-c-format +i18n("360x360 DPI"); +// xgettext: no-c-format +i18n("720x360 DPI"); +// xgettext: no-c-format +i18n("360×360dpi, back print film"); +// xgettext: no-c-format +i18n("360×360dpi, coated paper"); +// xgettext: no-c-format +i18n("360×360dpi, fabric sheet"); +// xgettext: no-c-format +i18n("360×360dpi, glossy paper"); +// xgettext: no-c-format +i18n("360×360dpi, high gloss film"); +// xgettext: no-c-format +i18n("360×360dpi, high resolution paper"); +// xgettext: no-c-format +i18n("360×360dpi, plain paper"); +// xgettext: no-c-format +i18n("360×360dpi, plain paper, high speed"); +// xgettext: no-c-format +i18n("360×360dpi, transparency film"); +// xgettext: no-c-format +i18n("720 dpi"); +// xgettext: no-c-format +i18n("Black and Color"); +// xgettext: no-c-format +i18n("Photo and Color"); +// xgettext: no-c-format +i18n("360x360 DPI DMT"); +// xgettext: no-c-format +i18n("720x720 DPI"); +// xgettext: no-c-format +i18n("Low Quality"); +// xgettext: no-c-format +i18n("720×720dpi, back print film"); +// xgettext: no-c-format +i18n("720×720dpi, coated paper"); +// xgettext: no-c-format +i18n("720×720dpi, glossy paper"); +// xgettext: no-c-format +i18n("720×720dpi, high-gloss paper"); +// xgettext: no-c-format +i18n("720×720dpi, high resolution paper"); +// xgettext: no-c-format +i18n("720×720dpi, plain paper"); +// xgettext: no-c-format +i18n("720×720dpi, transparency film"); +// xgettext: no-c-format +i18n("Black and Photo catridges"); +// xgettext: no-c-format +i18n("600×600dpi, iron-on transfer sheets, normal quality"); +// xgettext: no-c-format +i18n("600×600dpi, plain paper, normal quality"); +// xgettext: no-c-format +i18n("600×600dpi, transparencies, normal quality"); +// xgettext: no-c-format +i18n("1200×1200dpi, glossy photo cards, high quality"); +// xgettext: no-c-format +i18n("1200×1200dpi, high gloss photo paper, high quality"); +// xgettext: no-c-format +i18n("1200×1200dpi, professional photo paper, highest quality"); +// xgettext: no-c-format +i18n("300x300 DPI DMT"); +// xgettext: no-c-format +i18n("600x600 DPI DMT"); +// xgettext: no-c-format +i18n("Monochrome, fast"); +// xgettext: no-c-format +i18n("Monochrome, Floyd-Steinberg"); +// xgettext: no-c-format +i18n("ESC/P2 Encoding"); +// xgettext: no-c-format +i18n("Delta Row"); +// xgettext: no-c-format +i18n("Run Length"); +// xgettext: no-c-format +i18n("Uncompressed"); +// xgettext: no-c-format +i18n("Preconfiguration file"); +// xgettext: no-c-format +i18n("stcolor"); +// xgettext: no-c-format +i18n("none"); +// xgettext: no-c-format +i18n("Head motion"); +// xgettext: no-c-format +i18n("Initialization values for dithering"); +// xgettext: no-c-format +i18n("Uniform"); +// xgettext: no-c-format +i18n("Random"); +// xgettext: no-c-format +i18n("Weaving"); +// xgettext: no-c-format +i18n("Microweave (Printer internal)"); +// xgettext: no-c-format +i18n("Softweave (Driver internal)"); +// xgettext: no-c-format +i18n("360×360dpi, 32-bit CMYK"); +// xgettext: no-c-format +i18n("3360×360dpi, 4-bit, PostScript halftoning, weaved"); +// xgettext: no-c-format +i18n("720×720dpi, 32-bit CMYK, weaved"); +// xgettext: no-c-format +i18n("Color, Floyd-Steinberg, CMYK, better"); +// xgettext: no-c-format +i18n("Color, fast, CMYK"); +// xgettext: no-c-format +i18n("Color, modif. Floyd-Steinberg, CMYK, faster"); +// xgettext: no-c-format +i18n("Color, fast, RGB"); +// xgettext: no-c-format +i18n("Color, Floyd-Steinberg, RGB"); +// xgettext: no-c-format +i18n("Color, Floyd-Steinberg, CMYK, simpler"); +// xgettext: no-c-format +i18n("Color, Stefan-Singer algorithm, RGB"); +// xgettext: no-c-format +i18n("Back Light Film"); +// xgettext: no-c-format +i18n("Glossy Film"); +// xgettext: no-c-format +i18n("Inkjet Paper"); +// xgettext: no-c-format +i18n("Matte Paper"); +// xgettext: no-c-format +i18n("Photo Quality Glossy Paper"); +// xgettext: no-c-format +i18n("Photo Quality Inkjet Paper"); +// xgettext: no-c-format +i18n("Plain Paper Fast Load"); +// xgettext: no-c-format +i18n("Premium Glossy Photo Paper"); +// xgettext: no-c-format +i18n("720 DPI Microweave"); +// xgettext: no-c-format +i18n("360 DPI High Quality"); +// xgettext: no-c-format +i18n("360 DPI Softweave"); +// xgettext: no-c-format +i18n("720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("720 DPI High Quality"); +// xgettext: no-c-format +i18n("720 DPI Softweave"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Emulated"); +// xgettext: no-c-format +i18n("1440 x 2880 DPI Emulated"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Softweave"); +// xgettext: no-c-format +i18n("B3 ISO"); +// xgettext: no-c-format +i18n("B3 JIS"); +// xgettext: no-c-format +i18n("RA2"); +// xgettext: no-c-format +i18n("360 dpi, plain paper"); +// xgettext: no-c-format +i18n("720 dpi, plain paper"); +// xgettext: no-c-format +i18n("1440×720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("360×360dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("720×720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("720×720dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("1440×720dpi, inkjet paper, grayscale"); +// xgettext: no-c-format +i18n("720x720dpi, plain paper"); +// xgettext: no-c-format +i18n("360×360dpi"); +// xgettext: no-c-format +i18n("720×720dpi"); +// xgettext: no-c-format +i18n("Four color CMYK printing"); +// xgettext: no-c-format +i18n("Six color CMYKcm printing"); +// xgettext: no-c-format +i18n("75x75 dpi"); +// xgettext: no-c-format +i18n("150x150 dpi"); +// xgettext: no-c-format +i18n("2-passes x-weaving"); +// xgettext: no-c-format +i18n("3-passes x-weaving"); +// xgettext: no-c-format +i18n("2400 DPI"); +// xgettext: no-c-format +i18n("Reset printer before printing"); +// xgettext: no-c-format +i18n("NoReset"); +// xgettext: no-c-format +i18n("Reset"); +// xgettext: no-c-format +i18n("Power saving mode after printing"); +// xgettext: no-c-format +i18n("PowerSaving"); +// xgettext: no-c-format +i18n("NoPowerSaving"); +// xgettext: no-c-format +i18n("Bits per R/G/B component"); +// xgettext: no-c-format +i18n("HalfLetter"); +// xgettext: no-c-format +i18n("B6-C4"); +// xgettext: no-c-format +i18n("C7-6"); +// xgettext: no-c-format +i18n("ArchA"); +// xgettext: no-c-format +i18n("flsa"); +// xgettext: no-c-format +i18n("flse"); +// xgettext: no-c-format +i18n("Small paperback"); +// xgettext: no-c-format +i18n("Penguin small paperback"); +// xgettext: no-c-format +i18n("Penguin large paperback"); +// xgettext: no-c-format +i18n("Long 3"); +// xgettext: no-c-format +i18n("Long 4"); +// xgettext: no-c-format +i18n("Kaku"); +// xgettext: no-c-format +i18n("Commercial 10"); +// xgettext: no-c-format +i18n("A2 Invitation"); +// xgettext: no-c-format +i18n("ColorModel"); +// xgettext: no-c-format +i18n("Line Art"); +// xgettext: no-c-format +i18n("Solid Tone"); +// xgettext: no-c-format +i18n("Photograph"); +// xgettext: no-c-format +i18n("MediaType"); +// xgettext: no-c-format +i18n("Transparencies"); +// xgettext: no-c-format +i18n("Dither"); +// xgettext: no-c-format +i18n("300 DPI x 600 DPI"); +// xgettext: no-c-format +i18n("600 DPI high quality"); +// xgettext: no-c-format +i18n("600 DPI Unidirectional"); +// xgettext: no-c-format +i18n("1200 DPI high quality"); +// xgettext: no-c-format +i18n("1200 DPI highest quality"); +// xgettext: no-c-format +i18n("1200 DPI Unidirectional"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI high quality"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI highest quality"); +// xgettext: no-c-format +i18n("ArchB"); +// xgettext: no-c-format +i18n("Envelopes"); +// xgettext: no-c-format +i18n("Premium Luster Photo Paper"); +// xgettext: no-c-format +i18n("180 x 120 DPI"); +// xgettext: no-c-format +i18n("180 x 120 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 x 120 DPI"); +// xgettext: no-c-format +i18n("360 x 120 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Microweave"); +// xgettext: no-c-format +i18n("360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI High Quality Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Softweave"); +// xgettext: no-c-format +i18n("720 x 360 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI High Quality Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("Roll Feed"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Softweave"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("180 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI FOL2"); +// xgettext: no-c-format +i18n("360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI MW2"); +// xgettext: no-c-format +i18n("360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Default"); +// xgettext: no-c-format +i18n("720 x 360 DPI Default Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Four Pass"); +// xgettext: no-c-format +i18n("720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("20x24"); +// xgettext: no-c-format +i18n("20x30"); +// xgettext: no-c-format +i18n("24x30"); +// xgettext: no-c-format +i18n("24x36"); +// xgettext: no-c-format +i18n("SRA2"); +// xgettext: no-c-format +i18n("B2 ISO"); +// xgettext: no-c-format +i18n("B2 JIS"); +// xgettext: no-c-format +i18n("C2"); +// xgettext: no-c-format +i18n("ArchC"); +// xgettext: no-c-format +i18n("ArchD"); +// xgettext: no-c-format +i18n("30x40"); +// xgettext: no-c-format +i18n("RA0"); +// xgettext: no-c-format +i18n("RA1"); +// xgettext: no-c-format +i18n("SRA0"); +// xgettext: no-c-format +i18n("SRA1"); +// xgettext: no-c-format +i18n("B0 ISO"); +// xgettext: no-c-format +i18n("B1 ISO"); +// xgettext: no-c-format +i18n("B0 JIS"); +// xgettext: no-c-format +i18n("B1 JIS"); +// xgettext: no-c-format +i18n("C0"); +// xgettext: no-c-format +i18n("C1"); +// xgettext: no-c-format +i18n("ArchE"); +// xgettext: no-c-format +i18n("1200 x 1200 DPI"); +// xgettext: no-c-format +i18n("1200 x 600 DPI"); +// xgettext: no-c-format +i18n("13 Inch Roll Paper"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Highest Quality"); +// xgettext: no-c-format +i18n("1440 x 720 DPI"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("150 x 150 DPI"); +// xgettext: no-c-format +i18n("180 DPI Economy Draft"); +// xgettext: no-c-format +i18n("180 x 180 DPI"); +// xgettext: no-c-format +i18n("210 mm Roll Paper"); +// xgettext: no-c-format +i18n("22 Inch Roll Paper"); +// xgettext: no-c-format +i18n("2400 x 1200 DPI"); +// xgettext: no-c-format +i18n("240x240 DPI"); +// xgettext: no-c-format +i18n("24 Inch Roll Paper"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI"); +// xgettext: no-c-format +i18n("2880 x 720 DPI"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("300 dpi, Color, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Color, Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Black & Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Photo & Color Cartr., Premium Paper"); +// xgettext: no-c-format +i18n("300 x 300 DPI"); +// xgettext: no-c-format +i18n("300 x 600 DPI"); +// xgettext: no-c-format +i18n("360×360dpi, 4-bit, PostScript halftoning, weaved"); +// xgettext: no-c-format +i18n("360 x 120 DPI Economy Draft"); +// xgettext: no-c-format +i18n("360 x 180 DPI"); +// xgettext: no-c-format +i18n("360 x 180 DPI Draft"); +// xgettext: no-c-format +i18n("360 x 240 DPI"); +// xgettext: no-c-format +i18n("360 x 240 DPI Draft"); +// xgettext: no-c-format +i18n("360 x 360 DPI"); +// xgettext: no-c-format +i18n("360x720 DPI"); +// xgettext: no-c-format +i18n("360 x 90 DPI"); +// xgettext: no-c-format +i18n("360 x 90 DPI Fast Economy Draft"); +// xgettext: no-c-format +i18n("36 Inch Roll Paper"); +// xgettext: no-c-format +i18n("3-ink color (Color ink cartridge)"); +// xgettext: no-c-format +i18n("400x400 DPI"); +// xgettext: no-c-format +i18n("44 Inch Roll Paper"); +// xgettext: no-c-format +i18n("4 Inch Roll Paper"); +// xgettext: no-c-format +i18n("4-ink color (Both ink cartridges)"); +// xgettext: no-c-format +i18n("5 Inch Roll Paper"); +// xgettext: no-c-format +i18n("600 dpi, Color, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("600 dpi, Color, Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("600 dpi, Grayscale, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("600 dpi, Photo, Black & Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("600 x 300 DPI"); +// xgettext: no-c-format +i18n("600 x 600 DPI"); +// xgettext: no-c-format +i18n("720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI"); +// xgettext: no-c-format +i18n("720 x 360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 x 720 DPI"); +// xgettext: no-c-format +i18n("89 mm Roll Paper"); +// xgettext: no-c-format +i18n("90 x 90 DPI"); +// xgettext: no-c-format +i18n("90x90 DPI"); +// xgettext: no-c-format +i18n("A4, Colour"); +// xgettext: no-c-format +i18n("Always"); +// xgettext: no-c-format +i18n("B6 (ISO)"); +// xgettext: no-c-format +i18n("Behaviour when Toner Low"); +// xgettext: no-c-format +i18n("Bidirectional Printing"); +// xgettext: no-c-format +i18n("Black and Blue (Cyan, Magenta, Black)"); +// xgettext: no-c-format +i18n("Black and Cyan"); +// xgettext: no-c-format +i18n("Black and Green (Cyan, Yellow, Black)"); +// xgettext: no-c-format +i18n("Black and Magenta"); +// xgettext: no-c-format +i18n("Black and Red (Magenta, Yellow, Black)"); +// xgettext: no-c-format +i18n("Black and Yellow"); +// xgettext: no-c-format +i18n("Black cartridge"); +// xgettext: no-c-format +i18n("Black Cartridge"); +// xgettext: no-c-format +i18n("Black correction (Cyan reduction)"); +// xgettext: no-c-format +i18n("Black for any colour"); +// xgettext: no-c-format +i18n("Black ink density adjustment."); +// xgettext: no-c-format +i18n("Black Level"); +// xgettext: no-c-format +i18n("Black Level (Black cartr. only)"); +// xgettext: no-c-format +i18n("Blue (Cyan and Magenta)"); +// xgettext: no-c-format +i18n("Bottom Margin"); +// xgettext: no-c-format +i18n("Brightness"); +// xgettext: no-c-format +i18n("Color cartridge"); +// xgettext: no-c-format +i18n("Color (Draft Quality)"); +// xgettext: no-c-format +i18n("Color (High Quality)"); +// xgettext: no-c-format +i18n("Color, normal quality, optional colour correction"); +// xgettext: no-c-format +i18n("Colour"); +// xgettext: no-c-format +i18n("Colour Cartridge"); +// xgettext: no-c-format +i18n("Colour correction"); +// xgettext: no-c-format +i18n("Colour Correction"); +// xgettext: no-c-format +i18n("ColourCorrection"); +// xgettext: no-c-format +i18n("Colour Correction Mode"); +// xgettext: no-c-format +i18n("Colour Depth"); +// xgettext: no-c-format +i18n("Colour, fast, CMYK"); +// xgettext: no-c-format +i18n("Colour, fast, RGB"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, better"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, simpler"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, RGB"); +// xgettext: no-c-format +i18n("Colour Intensity"); +// xgettext: no-c-format +i18n("Colour mode"); +// xgettext: no-c-format +i18n("Colour Mode"); +// xgettext: no-c-format +i18n("Colour, modif. Floyd-Steinberg, CMYK, faster"); +// xgettext: no-c-format +i18n("Colours one page at a time"); +// xgettext: no-c-format +i18n("Colour, Stefan-Singer algorithm, RGB"); +// xgettext: no-c-format +i18n("Colours to be printed"); +// xgettext: no-c-format +i18n("Colours to be used"); +// xgettext: no-c-format +i18n("Composed Black"); +// xgettext: no-c-format +i18n("Compressed Data Transfer"); +// xgettext: no-c-format +i18n("Continuous-tone photographs"); +// xgettext: no-c-format +i18n("Contrast Level"); +// xgettext: no-c-format +i18n("CorrectBlack"); +// xgettext: no-c-format +i18n("Curl Correction"); +// xgettext: no-c-format +i18n("Cyan"); +// xgettext: no-c-format +i18n("Cyan Level"); +// xgettext: no-c-format +i18n("Cyan Level (Colour cartr. only)"); +// xgettext: no-c-format +i18n("Default behaviour"); +// xgettext: no-c-format +i18n("Distance even/odd nozzles left cartr."); +// xgettext: no-c-format +i18n("Distance even/odd nozzles right cartr."); +// xgettext: no-c-format +i18n("Dither Algorithm"); +// xgettext: no-c-format +i18n("Dithering Pixels Per Inch"); +// xgettext: no-c-format +i18n("Dithering PPI"); +// xgettext: no-c-format +i18n("Do not care about cartridges, colours one page at a time"); +// xgettext: no-c-format +i18n("Do not care about cartridges, each line in all colours"); +// xgettext: no-c-format +i18n("DoNotOverlay"); +// xgettext: no-c-format +i18n("Driver Default"); +// xgettext: no-c-format +i18n("Each line in all colours"); +// xgettext: no-c-format +i18n("Executive, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Executive, 600x600 DPI"); +// xgettext: no-c-format +i18n("FaceDown"); +// xgettext: no-c-format +i18n("FaceUp"); +// xgettext: no-c-format +i18n("First pass of an overlayed printout"); +// xgettext: no-c-format +i18n("Five Color Photo Composite"); +// xgettext: no-c-format +i18n("Floyd-Steinberg (not recommended for MicroDry)"); +// xgettext: no-c-format +i18n("Foolscap A"); +// xgettext: no-c-format +i18n("Foolscap E"); +// xgettext: no-c-format +i18n("Four Color Standard"); +// xgettext: no-c-format +i18n("FullPaint"); +// xgettext: no-c-format +i18n("Gamma"); +// xgettext: no-c-format +i18n("Gamma Black"); +// xgettext: no-c-format +i18n("Gamma (Blue Component)"); +// xgettext: no-c-format +i18n("Gamma Correction"); +// xgettext: no-c-format +i18n("Gamma correction on saturation HSV component"); +// xgettext: no-c-format +i18n("Gamma Cyan"); +// xgettext: no-c-format +i18n("Gamma (Green Component)"); +// xgettext: no-c-format +i18n("Gamma Magenta"); +// xgettext: no-c-format +i18n("Gamma (Red Component)"); +// xgettext: no-c-format +i18n("Gamma Yellow"); +// xgettext: no-c-format +i18n("Generic DeskJet"); +// xgettext: no-c-format +i18n("Glossy finishing"); +// xgettext: no-c-format +i18n("Glossy Photo"); +// xgettext: no-c-format +i18n("Gray Scale"); +// xgettext: no-c-format +i18n("Grayscale (Black ink cartridge)"); +// xgettext: no-c-format +i18n("Green (Cyan and Yellow)"); +// xgettext: no-c-format +i18n("Hagaki"); +// xgettext: no-c-format +i18n("Halftone (recommended for general use)"); +// xgettext: no-c-format +i18n("Head Separation"); +// xgettext: no-c-format +i18n("Horiz. Alignm. betw. Cartr."); +// xgettext: no-c-format +i18n("Horizontal (X-)Shift (in dots)"); +// xgettext: no-c-format +i18n("Horz. align. betw. cartr."); +// xgettext: no-c-format +i18n("HP LaserJet 4L"); +// xgettext: no-c-format +i18n("HP LaserJet III series"); +// xgettext: no-c-format +i18n("HP LaserJet II series"); +// xgettext: no-c-format +i18n("IgnoreSize"); +// xgettext: no-c-format +i18n("Ilford Heavy Paper"); +// xgettext: no-c-format +i18n("Ink Drying Time (sec)"); +// xgettext: no-c-format +i18n("Inverse Printing"); +// xgettext: no-c-format +i18n("Japanese Kaku envelope #4"); +// xgettext: no-c-format +i18n("Japanese long envelope #3"); +// xgettext: no-c-format +i18n("Japanese long envelope #4"); +// xgettext: no-c-format +i18n("Job Type"); +// xgettext: no-c-format +i18n("KeepBlack"); +// xgettext: no-c-format +i18n("Keep pure black"); +// xgettext: no-c-format +i18n("Landscape"); +// xgettext: no-c-format +i18n("Last pass of an overlayed printout"); +// xgettext: no-c-format +i18n("Left Margin"); +// xgettext: no-c-format +i18n("Left Skip (in pixels)"); +// xgettext: no-c-format +i18n("Letter, Colour"); +// xgettext: no-c-format +i18n("Limit Error from Paper Colour Correction"); +// xgettext: no-c-format +i18n("Line Feed Adjustment"); +// xgettext: no-c-format +i18n("Magenta"); +// xgettext: no-c-format +i18n("Magenta Level"); +// xgettext: no-c-format +i18n("Magenta Level (Colour cartr. only)"); +// xgettext: no-c-format +i18n("Memory Limit (Bytes)"); +// xgettext: no-c-format +i18n("Middle pass of an overlayed printout"); +// xgettext: no-c-format +i18n("Monochrome printing, re-usable economy black cartridge"); +// xgettext: no-c-format +i18n("Monochrome printing, standard black cartridge"); +// xgettext: no-c-format +i18n("More than 4 colours, colours one page at a time"); +// xgettext: no-c-format +i18n("Never"); +// xgettext: no-c-format +i18n("Next Job is spot colour page"); +// xgettext: no-c-format +i18n("NextNotSpotColourPage"); +// xgettext: no-c-format +i18n("NextSpotColourPage"); +// xgettext: no-c-format +i18n("NoColourCorrection"); +// xgettext: no-c-format +i18n("No dithering"); +// xgettext: no-c-format +i18n("noGlossy"); +// xgettext: no-c-format +i18n("Non-Bleed"); +// xgettext: no-c-format +i18n("None (RGB --> CMY)"); +// xgettext: no-c-format +i18n("Normal Quality Colour (4-ink)"); +// xgettext: no-c-format +i18n("Number of Copies"); +// xgettext: no-c-format +i18n("Number of passes per line"); +// xgettext: no-c-format +i18n("Orientation"); +// xgettext: no-c-format +i18n("Oufuku-Hagaki"); +// xgettext: no-c-format +i18n("Output Type"); +// xgettext: no-c-format +i18n("Page Output"); +// xgettext: no-c-format +i18n("Paper Colour (Blue Component)"); +// xgettext: no-c-format +i18n("Paper Colour (Green Component)"); +// xgettext: no-c-format +i18n("Paper Colour (Red Component)"); +// xgettext: no-c-format +i18n("PartialPaint"); +// xgettext: no-c-format +i18n("Photo CcMmY Color"); +// xgettext: no-c-format +i18n("Photo CcMmYK Color"); +// xgettext: no-c-format +i18n("Photo (CMYK, gamma correction, ...)"); +// xgettext: no-c-format +i18n("Photo Full Bleed"); +// xgettext: no-c-format +i18n("Photo Quality Colour (6-ink)"); +// xgettext: no-c-format +i18n("Plain (RGB --> CMYK)"); +// xgettext: no-c-format +i18n("Portrait"); +// xgettext: no-c-format +i18n("Presentation Quality"); +// xgettext: no-c-format +i18n("Primarily solid colors or smooth gradients"); +// xgettext: no-c-format +i18n("Printer Model"); +// xgettext: no-c-format +i18n("Printer's paper size"); +// xgettext: no-c-format +i18n("Print next job over the current one"); +// xgettext: no-c-format +i18n("Printout Quality"); +// xgettext: no-c-format +i18n("Quality, Ink Type, Media Type"); +// xgettext: no-c-format +i18n("Randomization of Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Raw CMYK"); +// xgettext: no-c-format +i18n("Red (Magenta and Yellow)"); +// xgettext: no-c-format +i18n("RequireSize"); +// xgettext: no-c-format +i18n("Reset after job"); +// xgettext: no-c-format +i18n("Right Margin"); +// xgettext: no-c-format +i18n("RIT Control"); +// xgettext: no-c-format +i18n("RITOff"); +// xgettext: no-c-format +i18n("RITOn"); +// xgettext: no-c-format +i18n("Roll Paper"); +// xgettext: no-c-format +i18n("Shift output horizontally (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Shift output vertically (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Simple Colour (4 bpp)"); +// xgettext: no-c-format +i18n("Single Pass Job"); +// xgettext: no-c-format +i18n("Six Color Photo"); +// xgettext: no-c-format +i18n("Smooth Printing (BC-02 cartridge)"); +// xgettext: no-c-format +i18n("Solid Colors"); +// xgettext: no-c-format +i18n("Square (experimental, not recommended)"); +// xgettext: no-c-format +i18n("StpBrightness"); +// xgettext: no-c-format +i18n("StpGamma"); +// xgettext: no-c-format +i18n("StpSaturation"); +// xgettext: no-c-format +i18n("Super B 13x19"); +// xgettext: no-c-format +i18n("Thick Paper/Card Board"); +// xgettext: no-c-format +i18n("This Job is spot colour page"); +// xgettext: no-c-format +i18n("ThisNotSpotColourPage"); +// xgettext: no-c-format +i18n("ThisSpotColourPage"); +// xgettext: no-c-format +i18n("Three Color Composite"); +// xgettext: no-c-format +i18n("Toner Density"); +// xgettext: no-c-format +i18n("TonerSaving"); +// xgettext: no-c-format +i18n("Top Margin"); +// xgettext: no-c-format +i18n("Top Skip (in pixels)"); +// xgettext: no-c-format +i18n("Transparency Paper"); +// xgettext: no-c-format +i18n("Tray 10"); +// xgettext: no-c-format +i18n("Tray 11"); +// xgettext: no-c-format +i18n("Tray 12"); +// xgettext: no-c-format +i18n("Tray 13"); +// xgettext: no-c-format +i18n("Tray 14"); +// xgettext: no-c-format +i18n("Tray 15"); +// xgettext: no-c-format +i18n("Tray 8"); +// xgettext: no-c-format +i18n("Tray 9"); +// xgettext: no-c-format +i18n("Use multi-colour ribbon"); +// xgettext: no-c-format +i18n("UseMultiColourRibbon"); +// xgettext: no-c-format +i18n("UseStandardRibbons"); +// xgettext: no-c-format +i18n("Vert. align. betw. cartr."); +// xgettext: no-c-format +i18n("Vert. Alignm. betw. Cartr."); +// xgettext: no-c-format +i18n("Vertical (Y-)Shift (in dots)"); +// xgettext: no-c-format +i18n("X Offset"); +// xgettext: no-c-format +i18n("Yellow Level"); +// xgettext: no-c-format +i18n("Yellow Level (Colour cartr. only)"); +// xgettext: no-c-format +i18n("Y Offset"); diff --git a/kdeprint/descriptions/readppd b/kdeprint/descriptions/readppd new file mode 100755 index 000000000..2c7621a36 --- /dev/null +++ b/kdeprint/descriptions/readppd @@ -0,0 +1,83 @@ +#! /usr/bin/perl + +$inui = 0; +$tag = ""; +$linenr = 0; + +$incomdata = 0; +$aftername = 0; +$aftercomment = 0; +$commentvalue = ""; + +while ( ) +{ + $linenr = $linenr + 1; + + # *LanguageVersion: Check for English + if (/^\*LanguageVersion:\s+([\w\-]+)\s*$/) { + last if ($1 ne "English"); + } + + # *OpenUI *InputSlot/Media Source: PickOne + if ($_ =~ "^*OpenUI") { + $inui = 1; + $_ =~ s/^\*OpenUI\s*//; + $tag = $_; + $tag =~ s%:.*$%%; + $tag =~ s%/.*%%; + chomp($tag); + $_ =~ s%\s*:.*$%%; + $_ =~ s%\s*\*%%; + $_ =~ s%^[^/]*/%%; + $_ =~ s%\"%\\\"%g; + chomp($_); + print "i18n(\"", $_, "\");\n"; + next; + } + + if ($_ =~ "^*CloseUI") { + $inui = 0; + $tag = ""; + } + + if ($inui) { + if (substr($_, 0, length($tag)) eq $tag) { + $_ =~ s%\s*:.*$%%; + $_ =~ s%\*\S*\s*%%; + $_ =~ s%^[^/]*/%%; + $_ =~ s%\"%\\\"%g; + chomp($_); + print "i18n(\"", $_, "\");\n"; + } + } + + # *% COMDATA #$VAR1 = {: Start looking for 'name','comment','type' + if (/^\*\% COMDATA \#\$VAR1/) { + $incomdata = 1; + } + + # *% COMDATA # 'name': Continue looking for 'comment' + if ($incomdata && /^\*\% COMDATA \#\s*\'name\'/) { + $aftername = 1; + $aftercomment = 0; + } + + # *% COMDATA # 'comment' => '*': Continue looking for 'type' + if ($aftername && /^\*\% COMDATA \#\s*\'comment\'\s*\=\>\s*\'(.*)\'/) { + $aftername = 0; + $aftercomment = 1; + $commentvalue = $1; + } + + # *% COMDATA # 'type' => '*': + # Output comment if type is 'int', 'float' or 'string' + if ($aftercomment && /^\*\% COMDATA \#\s*\'type\'\s*\=\>\s*\'(.*)\'/) { + $aftername = 0; + $aftercomment = 0; + if ($1 eq "int" || $1 eq "float" || $1 eq "string") { + print "i18n(\"$commentvalue\");\n"; + } + } + + +} diff --git a/kdeprint/descriptions/sortthem.cpp b/kdeprint/descriptions/sortthem.cpp new file mode 100644 index 000000000..e9e49c058 --- /dev/null +++ b/kdeprint/descriptions/sortthem.cpp @@ -0,0 +1,28 @@ + + +#include +#include +#include +#include + + + +int main(int argc, char **argv) { +QStringList have; +char buf[1024]; + + + while (!feof(stdin)) { + char *cline = fgets(buf, 1000, stdin); + if (!cline) break; + if (!have.contains(cline)) { + have << cline; + fprintf(stdout, "%s", cline); + } + } + + +return 0; +} + + diff --git a/kdeprint/kdeprint_part/Makefile.am b/kdeprint/kdeprint_part/Makefile.am new file mode 100644 index 000000000..9646fab6d --- /dev/null +++ b/kdeprint/kdeprint_part/Makefile.am @@ -0,0 +1,24 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +kde_module_LTLIBRARIES = libkdeprint_part.la + +libkdeprint_part_la_SOURCES = printpart.cpp +libkdeprint_part_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +libkdeprint_part_la_LIBADD = -lkdeprint_management $(LIB_KPARTS) + +noinst_HEADERS = printpart.h + +METASOURCES = AUTO +INCLUDES = $(all_includes) + +# service +myservice_DATA = kdeprint_part.desktop +myservicedir = $(kde_servicesdir) + +# UI file +myrcfile_DATA = kdeprint_part.rc +myrcfiledir = $(kde_datadir)/kdeprint_part + +messages: rc.cpp + $(EXTRACTRC) kdeprint_part.rc >> rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kdeprint_part.pot diff --git a/kdeprint/kdeprint_part/kdeprint_part.desktop b/kdeprint/kdeprint_part/kdeprint_part.desktop new file mode 100644 index 000000000..b49f26d03 --- /dev/null +++ b/kdeprint/kdeprint_part/kdeprint_part.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Type=Service +Name=Print Management Tool +Name[af]=Drukker Bestuur Program +Name[ar]=أداة ادارة الطباعة +Name[az]=Çap Edici İdarə Vasitəsi +Name[be]=Кіраўнік друку +Name[bg]=Управление на печата +Name[bn]=মুদ্রণ ম্যানেজমেন্ট টুল +Name[br]=Ostilh mererezh moulañ +Name[bs]=Alat za upravljanje štampom +Name[ca]=Eina per a gestionar la impressió +Name[cs]=Správce tiskáren +Name[csb]=Sprôwianié wëdrëkama +Name[cy]=Erfyn Rheoli Argraffu +Name[da]=Udskriftshåndteringsværktøj +Name[de]=Druckerverwaltung +Name[el]=Εργαλείο διαχείρισης εκτυπώσεων +Name[eo]=Printadministrilo +Name[es]=Herramienta de gestión de la impresión +Name[et]=Trükkimise seadistused +Name[eu]=Inprimaketa kudeatzeko tresna +Name[fa]=ابزار مدیریت چاپ +Name[fi]=Tulostuksenhallinta +Name[fr]=Gestionnaire d'impression +Name[fy]=Helpprogramma foar printbehear +Name[ga]=Uirlis Bhainisteoireacht Priontála +Name[gl]=Ferramenta de Xestión da Impresión +Name[he]=כלי ניהול הדפסה +Name[hi]=प्रिंटर प्रबंधन औज़ार +Name[hr]=Alat za upravljanje ispisom +Name[hu]=Nyomtatáskezelő eszköz +Name[is]=Prentunartól +Name[it]=Strumento di gestione della stampa +Name[ja]=印刷マネージメントツール +Name[ka]=ბეჭდვის მართვა +Name[kk]=Басып шығаруды басқару +Name[km]=ឧបករណ៍​គ្រប់គ្រង​ការ​បោះពុម្ព +Name[ko]=휴대폰 관리 도구 +Name[lo]=ເຄື່ອງມືຈັດການພິມ +Name[lt]=Spausdinimo valdymo įrankis +Name[lv]=Drukas Menedžmenta Rīks +Name[mk]=Алатка за менаџмент на печатење +Name[mn]=Хэвлэгч удирдах хэлбэр +Name[ms]=Cetak Alat Pengurusan +Name[mt]=Għodda għall-immaniġġjar tal-printing +Name[nb]=Verktøy for utskriftsbehandling +Name[nds]=Druckers un Opgaven plegen +Name[ne]=मुद्रण व्यवस्थापन उपकरण +Name[nl]=Hulpprogramma voor printerbeheer +Name[nn]=Utskriftshandsaming +Name[nso]=Sebereka sa Taolo ya Kgatiso +Name[pa]=ਛਾਪਣ (ਪਰਿੰਟ) ਪਰਬੰਧਨ ਸੰਦ +Name[pl]=Zarządzanie wydrukiem +Name[pt]=Ferramenta de Gestão de Impressões +Name[pt_BR]=Ferramenta para Gerenciamento de Impressão +Name[ro]=Administrare tipărire +Name[ru]=Управление печатью +Name[rw]=Gucapa Igikoresho cy'Ubuyobozi +Name[se]=Čálihangieđahalli +Name[sk]=Nástroj na správu tlače +Name[sl]=Orodje za upravljanje tiskanja +Name[sr]=Алат за управљање штампом +Name[sr@Latn]=Alat za upravljanje štampom +Name[sv]=Verktyg för utskriftshantering +Name[ta]=அச்சு மேலாண்மைக் கருவி +Name[tg]=Тафсири мудирияти чоп +Name[th]=เครื่องมือจัดการงานพิมพ์ +Name[tr]=Yazdırma Yönetim Aracı +Name[tt]=Bastıru İdäneñ Qoralı +Name[uk]=Засіб керування друком +Name[uz]=Bosib chiqarishni boshqarish vositasi +Name[uz@cyrillic]=Босиб чиқаришни бошқариш воситаси +Name[ven]=Tshishumiswa tsha vhulanguli ha phirinthara +Name[vi]=Công cụ Quản lý In ấn +Name[wa]=Usteye po manaedjî l' imprimaedje +Name[xh]=Isixhobo Sophatho soshicilelo +Name[zh_CN]=打印管理工具 +Name[zh_TW]=列印管理工具 +Name[zu]=Ithuluzi Lokuphathwa Koshicilelo +MimeType=print/manager +ServiceTypes=Browser/View,KParts/ReadOnlyPart +X-KDE-Library=libkdeprint_part +Icon=printmgr +InitialPreference=12 diff --git a/kdeprint/kdeprint_part/kdeprint_part.rc b/kdeprint/kdeprint_part/kdeprint_part.rc new file mode 100644 index 000000000..bb1db8edf --- /dev/null +++ b/kdeprint/kdeprint_part/kdeprint_part.rc @@ -0,0 +1,28 @@ + + +Print Manager Toolbar + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kdeprint/kdeprint_part/printpart.cpp b/kdeprint/kdeprint_part/printpart.cpp new file mode 100644 index 000000000..535c0e7e0 --- /dev/null +++ b/kdeprint/kdeprint_part/printpart.cpp @@ -0,0 +1,81 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "printpart.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef KParts::GenericFactory PrintPartFactory; +K_EXPORT_COMPONENT_FACTORY( libkdeprint_part, PrintPartFactory ) + +PrintPart::PrintPart(QWidget *parentWidget, const char * /*widgetName*/ , + QObject *parent, const char *name, + const QStringList & /*args*/ ) +: KParts::ReadOnlyPart(parent, name) +{ + setInstance(PrintPartFactory::instance()); + instance()->iconLoader()->addAppDir("kdeprint"); + m_extension = new PrintPartExtension(this); + + m_view = new KMMainView(parentWidget, "MainView", actionCollection()); + m_view->setFocusPolicy(QWidget::ClickFocus); + m_view->enableToolbar(false); + setWidget(m_view); + + initActions(); +} + +PrintPart::~PrintPart() +{ +} + +KAboutData *PrintPart::createAboutData() +{ + return new KAboutData(I18N_NOOP("kdeprint_part"), I18N_NOOP("A Konqueror Plugin for Print Management"), "0.1"); +} + +bool PrintPart::openFile() +{ + return true; +} + +void PrintPart::initActions() +{ + setXMLFile("kdeprint_part.rc"); +} + +PrintPartExtension::PrintPartExtension(PrintPart *parent) +: KParts::BrowserExtension(parent, "PrintPartExtension") +{ +} + +PrintPartExtension::~PrintPartExtension() +{ +} + +#include "printpart.moc" diff --git a/kdeprint/kdeprint_part/printpart.h b/kdeprint/kdeprint_part/printpart.h new file mode 100644 index 000000000..afba3c277 --- /dev/null +++ b/kdeprint/kdeprint_part/printpart.h @@ -0,0 +1,59 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 PRINTPART_H +#define PRINTPART_H + +#include +#include + +class PrintPartExtension; +class KMMainView; +class KAboutData; + +class PrintPart : public KParts::ReadOnlyPart +{ + Q_OBJECT +public: + PrintPart(QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name, + const QStringList & ); + virtual ~PrintPart(); + + static KAboutData *createAboutData(); + +protected: + bool openFile(); + void initActions(); + +private: + PrintPartExtension *m_extension; + KMMainView *m_view; +}; + +class PrintPartExtension : public KParts::BrowserExtension +{ + Q_OBJECT + friend class PrintPart; +public: + PrintPartExtension(PrintPart *parent); + virtual ~PrintPartExtension(); +}; + +#endif diff --git a/kdeprint/kdeprintfax/Makefile.am b/kdeprint/kdeprintfax/Makefile.am new file mode 100644 index 000000000..c2b072049 --- /dev/null +++ b/kdeprint/kdeprintfax/Makefile.am @@ -0,0 +1,23 @@ +INCLUDES= $(all_includes) + +bin_PROGRAMS = kdeprintfax +kdeprintfax_SOURCES = main.cpp kdeprintfax.cpp faxab.cpp faxctrl.cpp confgeneral.cpp configdlg.cpp \ + conffax.cpp confsystem.cpp conffilters.cpp filterdlg.cpp defcmds.cpp +kdeprintfax_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kdeprintfax_LDADD = $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDEPRINT) -lkabc +kdeprintfax_METASOURCES = AUTO + +xdg_apps_DATA = kdeprintfax.desktop + +uidir = $(kde_datadir)/kdeprintfax +ui_DATA = kdeprintfaxui.rc faxfilters + +private_SCRIPTS = anytops +privatedir = $(kde_datadir)/kdeprintfax + +messages: rc.cpp + $(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/kdeprintfax.pot + +KDE_ICON = kdeprintfax +pic_ICON = abentry +picdir = $(kde_datadir)/kdeprintfax/icons diff --git a/kdeprint/kdeprintfax/anytops b/kdeprint/kdeprintfax/anytops new file mode 100755 index 000000000..4e67b49e9 --- /dev/null +++ b/kdeprint/kdeprintfax/anytops @@ -0,0 +1,98 @@ +#!/bin/sh + +FAXFILTERS=./faxfilters +MIMETYPE= +PAGE="letter" + +usage() { + echo "Usage: anytops [-m ] [--mime=] [-p ] [--help] " + exit $1 +} + +while true; do + case "$1" in + --help) + usage 0 + ;; + -m) + shift + FAXFILTERS="$1" + shift + ;; + --mime=*) + MIMETYPE=${1#--mime=} + shift + ;; + -p) + shift + PAGE="$1" + shift + ;; + -v) + echo "Anytops v1.0: (c) 2001, Michael Goffioul "; + echo "Small script to convert any file type into PS. Part of kdeprintfax." + exit 0 + ;; + *) + break; + ;; + esac +done + +INFILE=$1 +OUTFILE=$2 + +if [ -z "$INFILE" -o -z "$OUTFILE" -o ! -f "$INFILE" ]; then + usage 1; +fi + +if [ -z "$MIMETYPE" ]; then + MAGIC=$KDEDIR + if [ -z "$MAGIC" ]; then + MAGIC=/usr + fi + MAGIC=$MAGIC/share/mimelnk/magic + + if [ ! -f "$MAGIC" ]; then + echo "KDE magic file not found. Check your installation." + exit 1; + fi + + MIMETYPE=`file -b -m $MAGIC "$INFILE" 2> /dev/null` + MIMETYPE=${MIMETYPE%%;*} +fi + +echo "Mime type: $MIMETYPE" +MIMETYPE_BASE=`echo $MIMETYPE | cut -f 1 -d "/"` +MIMETYPE_TYPE=`echo $MIMETYPE | cut -f 2- -d "/"` + +get_command() { + while read mime command; do + mimebase=`echo $mime | cut -f 1 -d "/"` + mimefile=`echo $mime | cut -f 2- -d "/"` + if test "$mimebase" = "$MIMETYPE_BASE" || test "$mimebase" = "*"; then + if test "$mimefile" = "$MIMETYPE_TYPE" || test "$mimefile" = "*"; then + echo $command + break; + fi + fi +# PATTERN=`echo $MIMETYPE | grep $mime` +# if [ "$PATTERN" = "$MIMETYPE" ]; then +# echo $command +# break; +# fi + done +} + +COMMAND=`cat $FAXFILTERS | get_command` + +if [ -z "$COMMAND" ]; then + echo "$MIMETYPE: file type not handled" + exit 1; +fi + +echo "Command: $COMMAND" + +PAGEUP="`echo $PAGE | cut -c 1 | tr [:lower:] [:upper:]``echo $PAGE | cut -c 2-`" +EXECCOMMAND=`echo $COMMAND | sed -e "s,%in,\"$INFILE\"," -e "s,%out,\"$OUTFILE\"," -e "s,%psl,$PAGE," -e "s,%psu,$PAGEUP,"` +eval "$EXECCOMMAND" diff --git a/kdeprint/kdeprintfax/conffax.cpp b/kdeprint/kdeprintfax/conffax.cpp new file mode 100644 index 000000000..c88184595 --- /dev/null +++ b/kdeprint/kdeprintfax/conffax.cpp @@ -0,0 +1,80 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "conffax.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +ConfFax::ConfFax(QWidget *parent, const char *name) +: QWidget(parent, name) +{ + m_resolution = new QComboBox(this); + m_resolution->setMinimumHeight(25); + m_pagesize = new QComboBox(this); + m_pagesize->setMinimumHeight(25); + m_resolution->insertItem(i18n("High (204x196 dpi)")); + m_resolution->insertItem(i18n("Low (204x98 dpi)")); + m_pagesize->insertItem(i18n("A4")); + m_pagesize->insertItem(i18n("Letter")); + m_pagesize->insertItem(i18n("Legal")); + QLabel *m_resolutionlabel = new QLabel(i18n("&Resolution:"), this); + m_resolutionlabel->setBuddy(m_resolution); + QLabel *m_pagesizelabel = new QLabel(i18n("&Paper size:"), this); + m_pagesizelabel->setBuddy(m_pagesize); + + QGridLayout *l0 = new QGridLayout(this, 3, 2, 10, 10); + l0->setColStretch(1, 1); + l0->setRowStretch(2, 1); + l0->addWidget(m_resolutionlabel, 0, 0); + l0->addWidget(m_pagesizelabel, 1, 0); + l0->addWidget(m_resolution, 0, 1); + l0->addWidget(m_pagesize, 1, 1); +} + +void ConfFax::load() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Fax"); + QString v = conf->readEntry("Page", KGlobal::locale()->pageSize() == QPrinter::A4 ? "a4" : "letter"); + if (v == "letter") m_pagesize->setCurrentItem(1); + else if (v == "legal") m_pagesize->setCurrentItem(2); + else m_pagesize->setCurrentItem(0); + v = conf->readEntry("Resolution", "High"); + m_resolution->setCurrentItem((v == "Low" ? 1 : 0)); +} + +void ConfFax::save() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Fax"); + conf->writeEntry("Resolution", (m_resolution->currentItem() == 0 ? "High" : "Low")); + conf->writeEntry("Page", (m_pagesize->currentItem() == 0 ? "a4" : (m_pagesize->currentItem() == 1 ? "letter" : "legal"))); +} diff --git a/kdeprint/kdeprintfax/conffax.h b/kdeprint/kdeprintfax/conffax.h new file mode 100644 index 000000000..ffcd125ae --- /dev/null +++ b/kdeprint/kdeprintfax/conffax.h @@ -0,0 +1,40 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFFAX_H +#define CONFFAX_H + +#include + +class QComboBox; + +class ConfFax : public QWidget +{ +public: + ConfFax(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + +private: + QComboBox *m_resolution, *m_pagesize; +}; + +#endif diff --git a/kdeprint/kdeprintfax/conffilters.cpp b/kdeprint/kdeprintfax/conffilters.cpp new file mode 100644 index 000000000..ab828c582 --- /dev/null +++ b/kdeprint/kdeprintfax/conffilters.cpp @@ -0,0 +1,192 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "conffilters.h" +#include "filterdlg.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +ConfFilters::ConfFilters(QWidget *parent, const char *name) +: QWidget(parent, name) +{ + m_filters = new KListView(this); + m_filters->addColumn(i18n("Mime Type")); + m_filters->addColumn(i18n("Command")); + m_filters->setFrameStyle(QFrame::WinPanel|QFrame::Sunken); + m_filters->setLineWidth(1); + m_filters->setSorting(-1); + m_filters->header()->setStretchEnabled(true, 1); + connect(m_filters, SIGNAL(doubleClicked(QListViewItem*)), SLOT(slotChange())); + + m_add = new QPushButton(this); + m_add->setPixmap(BarIcon("filenew")); + m_remove = new QPushButton(this); + m_remove->setIconSet(BarIconSet("remove")); + m_change = new QPushButton(this); + m_change->setIconSet(BarIconSet("filter")); + m_up = new QPushButton(this); + m_up->setIconSet(BarIconSet("up")); + m_down = new QPushButton(this); + m_down->setIconSet(BarIconSet("down")); + connect(m_add, SIGNAL(clicked()), SLOT(slotAdd())); + connect(m_change, SIGNAL(clicked()), SLOT(slotChange())); + connect(m_remove, SIGNAL(clicked()), SLOT(slotRemove())); + connect(m_up, SIGNAL(clicked()), SLOT(slotUp())); + connect(m_down, SIGNAL(clicked()), SLOT(slotDown())); + QToolTip::add(m_add, i18n("Add filter")); + QToolTip::add(m_change, i18n("Modify filter")); + QToolTip::add(m_remove, i18n("Remove filter")); + QToolTip::add(m_up, i18n("Move filter up")); + QToolTip::add(m_down, i18n("Move filter down")); + + QHBoxLayout *l0 = new QHBoxLayout(this, 10, 10); + QVBoxLayout *l1 = new QVBoxLayout(0, 0, 0); + l0->addWidget(m_filters, 1); + l0->addLayout(l1, 0); + l1->addWidget(m_add); + l1->addWidget(m_change); + l1->addWidget(m_remove); + l1->addSpacing(10); + l1->addWidget(m_up); + l1->addWidget(m_down); + l1->addStretch(1); + updateButton(); + connect(m_filters, SIGNAL(selectionChanged ()),SLOT(updateButton())); +} + +void ConfFilters::load() +{ + QFile f(locate("data","kdeprintfax/faxfilters")); + if (f.exists() && f.open(IO_ReadOnly)) + { + QTextStream t(&f); + QString line; + int p(-1); + QListViewItem *item(0); + while (!t.eof()) + { + line = t.readLine().stripWhiteSpace(); + if ((p=line.find(QRegExp("\\s"))) != -1) + { + QString mime(line.left(p)), cmd(line.right(line.length()-p-1).stripWhiteSpace()); + if (!mime.isEmpty() && !cmd.isEmpty()) + item = new QListViewItem(m_filters, item, mime, cmd); + } + } + } +} + +void ConfFilters::save() +{ + QListViewItem *item = m_filters->firstChild(); + QFile f(locateLocal("data","kdeprintfax/faxfilters")); + if (f.open(IO_WriteOnly)) + { + QTextStream t(&f); + while (item) + { + t << item->text(0) << ' ' << item->text(1) << endl; + item = item->nextSibling(); + } + } +} + +void ConfFilters::slotAdd() +{ + QString mime, cmd; + if (FilterDlg::doIt(this, &mime, &cmd)) + if (!mime.isEmpty() && !cmd.isEmpty()) + { + new QListViewItem(m_filters, m_filters->currentItem(), mime, cmd); + updateButton(); + } + else + KMessageBox::error(this, i18n("Empty parameters.")); +} + +void ConfFilters::slotRemove() +{ + QListViewItem *item = m_filters->currentItem(); + if (item) + delete item; + updateButton(); +} + +void ConfFilters::slotChange() +{ + QListViewItem *item = m_filters->currentItem(); + if (item) + { + QString mime(item->text(0)), cmd(item->text(1)); + if (FilterDlg::doIt(this, &mime, &cmd)) + { + item->setText(0, mime); + item->setText(1, cmd); + } + } +} + +void ConfFilters::slotUp() +{ + QListViewItem *item = m_filters->currentItem(); + if (item && item->itemAbove()) + { + m_filters->moveItem(item, 0, item->itemAbove()->itemAbove()); + m_filters->setCurrentItem(item); + updateButton(); + } +} + +void ConfFilters::slotDown() +{ + QListViewItem *item = m_filters->currentItem(); + if (item && item->itemBelow()) + { + m_filters->moveItem(item, 0, item->itemBelow()); + m_filters->setCurrentItem(item); + updateButton(); + } +} + +void ConfFilters::updateButton() +{ + QListViewItem *item = m_filters->currentItem(); + + bool state=item && item->itemBelow(); + m_remove->setEnabled(item); + m_down->setEnabled(state); + state=item && item->itemAbove(); + m_up->setEnabled(state); + m_change->setEnabled(item); +} + +#include "conffilters.moc" diff --git a/kdeprint/kdeprintfax/conffilters.h b/kdeprint/kdeprintfax/conffilters.h new file mode 100644 index 000000000..38f564b1f --- /dev/null +++ b/kdeprint/kdeprintfax/conffilters.h @@ -0,0 +1,48 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFFILTERS_H +#define CONFFILTERS_H + +#include +#include +class KListView; + +class ConfFilters : public QWidget +{ + Q_OBJECT +public: + ConfFilters(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); +protected slots: + void slotAdd(); + void slotRemove(); + void slotChange(); + void slotUp(); + void slotDown(); + void updateButton(); +private: + KListView *m_filters; + QPushButton *m_add,*m_remove,*m_up,*m_down,*m_change; +}; + +#endif diff --git a/kdeprint/kdeprintfax/confgeneral.cpp b/kdeprint/kdeprintfax/confgeneral.cpp new file mode 100644 index 000000000..3f592e694 --- /dev/null +++ b/kdeprint/kdeprintfax/confgeneral.cpp @@ -0,0 +1,90 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "confgeneral.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +ConfGeneral::ConfGeneral(QWidget *parent, const char *name) +: QWidget(parent, name) +{ + m_name = new QLineEdit(this); + m_company = new QLineEdit(this); + m_number = new QLineEdit(this); + QLabel *m_namelabel = new QLabel(i18n("&Name:"), this); + m_namelabel->setBuddy(m_name); + QLabel *m_companylabel = new QLabel(i18n("&Company:"), this); + m_companylabel->setBuddy(m_company); + QLabel *m_numberlabel = new QLabel(i18n("N&umber:"), this); + m_numberlabel->setBuddy(m_number); + KSeparator *sep = new KSeparator( this ); + m_replace_int_char = new QCheckBox( i18n( "Replace international prefix '+' with:" ), this ); + m_replace_int_char_val = new QLineEdit( this ); + m_replace_int_char_val->setEnabled( false ); + + connect( m_replace_int_char, SIGNAL( toggled( bool ) ), m_replace_int_char_val, SLOT( setEnabled( bool ) ) ); + + QGridLayout *l0 = new QGridLayout(this, 6, 2, 10, 10); + l0->setColStretch(1, 1); + l0->setRowStretch(5, 1); + l0->addWidget(m_namelabel, 0, 0); + l0->addWidget(m_companylabel, 1, 0); + l0->addWidget(m_numberlabel, 2, 0); + l0->addWidget(m_name, 0, 1); + l0->addWidget(m_company, 1, 1); + l0->addWidget(m_number, 2, 1); + l0->addMultiCellWidget( sep, 3, 3, 0, 1 ); + QHBoxLayout *l1 = new QHBoxLayout( this, 0, 10 ); + l0->addMultiCellLayout( l1, 4, 4, 0, 1 ); + l1->addWidget( m_replace_int_char ); + l1->addWidget( m_replace_int_char_val ); +} + +void ConfGeneral::load() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Personal"); + m_name->setText(conf->readEntry("Name", getenv("USER"))); + m_number->setText(conf->readEntry("Number")); + m_company->setText(conf->readEntry("Company")); + m_replace_int_char->setChecked( conf->readBoolEntry( "ReplaceIntChar", false ) ); + m_replace_int_char_val->setText( conf->readEntry( "ReplaceIntCharVal" ) ); +} + +void ConfGeneral::save() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Personal"); + conf->writeEntry("Name", m_name->text()); + conf->writeEntry("Number", m_number->text()); + conf->writeEntry("Company", m_company->text()); + conf->writeEntry( "ReplaceIntChar", m_replace_int_char->isChecked() ); + conf->writeEntry( "ReplaceIntCharVal", m_replace_int_char_val->text() ); +} diff --git a/kdeprint/kdeprintfax/confgeneral.h b/kdeprint/kdeprintfax/confgeneral.h new file mode 100644 index 000000000..5f88106d8 --- /dev/null +++ b/kdeprint/kdeprintfax/confgeneral.h @@ -0,0 +1,43 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFGENERAL_H +#define CONFGENERAL_H + +#include + +class QLineEdit; +class QCheckBox; + +class ConfGeneral : public QWidget +{ +public: + ConfGeneral(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + +private: + QLineEdit *m_name, *m_company, *m_number; + QCheckBox *m_replace_int_char; + QLineEdit *m_replace_int_char_val; +}; + +#endif diff --git a/kdeprint/kdeprintfax/configdlg.cpp b/kdeprint/kdeprintfax/configdlg.cpp new file mode 100644 index 000000000..669d8c200 --- /dev/null +++ b/kdeprint/kdeprintfax/configdlg.cpp @@ -0,0 +1,75 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "configdlg.h" +#include "confgeneral.h" +#include "conffax.h" +#include "confsystem.h" +#include "conffilters.h" + +#include +#include +#include + +ConfigDlg::ConfigDlg(QWidget *parent, const char *name) +: KDialogBase(IconList, i18n("Configuration"), Ok|Cancel, Ok, parent, name, true) +{ + QVBox *page1 = addVBoxPage(i18n("Personal"), i18n("Personal Settings"), DesktopIcon("kdmconfig")); + m_general = new ConfGeneral(page1, "Personal"); + + QVBox *page2 = addVBoxPage(i18n("Page setup"), i18n("Page Setup"), DesktopIcon("editcopy")); + m_fax = new ConfFax(page2, "Fax"); + + QVBox *page3 = addVBoxPage(i18n("System"), i18n("Fax System Selection"), DesktopIcon("kdeprintfax")); + m_system = new ConfSystem(page3, "System"); + + QVBox *page4 = addVBoxPage(i18n("Filters"), i18n("Filters Configuration"), DesktopIcon("filter")); + m_filters = new ConfFilters(page4, "Filters"); + + resize(450, 300); +} + +void ConfigDlg::load() +{ + m_general->load(); + m_fax->load(); + m_system->load(); + m_filters->load(); +} + +void ConfigDlg::save() +{ + m_general->save(); + m_fax->save(); + m_system->save(); + m_filters->save(); +} + +bool ConfigDlg::configure(QWidget *parent) +{ + ConfigDlg dlg(parent); + dlg.load(); + if (dlg.exec()) + { + dlg.save(); + return true; + } + return false; +} diff --git a/kdeprint/kdeprintfax/configdlg.h b/kdeprint/kdeprintfax/configdlg.h new file mode 100644 index 000000000..f4bba762d --- /dev/null +++ b/kdeprint/kdeprintfax/configdlg.h @@ -0,0 +1,48 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFIGDLG_H +#define CONFIGDLG_H + +#include + +class ConfGeneral; +class ConfFax; +class ConfSystem; +class ConfFilters; + +class ConfigDlg : public KDialogBase +{ +public: + static bool configure(QWidget *parent = 0); + +protected: + ConfigDlg(QWidget *parent = 0, const char *name = 0); + void load(); + void save(); + +private: + ConfGeneral *m_general; + ConfFax *m_fax; + ConfSystem *m_system; + ConfFilters *m_filters; +}; + +#endif diff --git a/kdeprint/kdeprintfax/confsystem.cpp b/kdeprint/kdeprintfax/confsystem.cpp new file mode 100644 index 000000000..02ee7e66d --- /dev/null +++ b/kdeprint/kdeprintfax/confsystem.cpp @@ -0,0 +1,199 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "confsystem.h" +#include "defcmds.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#define EFAX_ID 0 +#define HYLAFAX_ID 1 +#define MGETTY_ID 2 +#define OTHER_ID 3 + +ConfSystem::ConfSystem(QWidget *parent, const char *name) +: QWidget(parent, name) +{ + m_system = new QComboBox(this); + m_system->insertItem("EFax"); + m_system->insertItem("HylaFax"); + m_system->insertItem("Mgetty-sendfax"); + m_system->insertItem( "Other" ); + m_command = new QLineEdit(this); + QLabel *syslabel = new QLabel(i18n("F&ax system:"), this); + QLabel *cmdlabel = new QLabel(i18n("Co&mmand:"), this); + syslabel->setBuddy(m_system); + cmdlabel->setBuddy(m_command); + connect(m_system, SIGNAL(activated(int)), SLOT(slotSystemChanged(int))); + m_current = 0; + m_system->setCurrentItem(m_current); + + QWidget *m_dummy1 = new QWidget(this), *m_dummy2 = new QWidget(this); + m_server = new QLineEdit(m_dummy1); + m_device = new QComboBox(m_dummy2); + QLabel *srvlabel = new QLabel(i18n("Fax &server (if any):"), m_dummy1); + QLabel *devlabel = new QLabel(i18n("&Fax/Modem device:"), m_dummy2); + srvlabel->setBuddy(m_server); + devlabel->setBuddy(m_device); + m_device->insertItem(i18n("Standard Modem Port")); + for (int i=0; i<10; i++) + m_device->insertItem(i18n("Serial Port #%1").arg(i)); + m_device->insertItem( i18n( "Other" ) ); + connect( m_device, SIGNAL( activated( int ) ), SLOT( slotDeviceChanged( int ) ) ); + m_device_edit = new QLineEdit( m_dummy2 ); + slotDeviceChanged( 0 ); + + KSeparator *sep = new KSeparator(this); + sep->setMinimumHeight(10); + + QVBoxLayout *l0 = new QVBoxLayout(this, 10, 10); + QGridLayout *l1 = new QGridLayout(0, 2, 2, 0, 10); + l0->addLayout(l1); + l1->setColStretch(1, 1); + l1->addWidget(syslabel, 0, 0); + l1->addWidget(cmdlabel, 1, 0); + l1->addWidget(m_system, 0, 1); + l1->addWidget(m_command, 1, 1); + l0->addWidget(sep); + l0->addWidget(m_dummy1); + l0->addWidget(m_dummy2); + l0->addStretch(1); + QHBoxLayout *l4 = new QHBoxLayout(m_dummy1, 0, 10); + l4->addWidget(srvlabel, 0); + l4->addWidget(m_server, 1); + QGridLayout *l5 = new QGridLayout( m_dummy2, 2, 2, 0, 10 ); + l5->setColStretch( 1, 1 ); + l5->addWidget(devlabel, 0, 0); + l5->addWidget(m_device, 0, 1); + l5->addWidget( m_device_edit, 1, 1 ); +} + +void ConfSystem::load() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + m_commands << conf->readPathEntry("EFax", defaultCommand(efax_default_cmd)); + m_commands << conf->readPathEntry("HylaFax", defaultCommand(hylafax_default_cmd)); + m_commands << conf->readPathEntry("Mgetty", defaultCommand(mgetty_default_cmd)); + m_commands << conf->readPathEntry( "Other", QString::null ); + QString v = conf->readEntry("System", "efax"); + if (v == "mgetty") m_current = MGETTY_ID; + else if (v == "hylafax") m_current = HYLAFAX_ID; + else if ( v == "other" ) m_current = OTHER_ID; + else m_current = EFAX_ID; + conf->setGroup("Fax"); + m_server->setText(conf->readEntry("Server", getenv("FAXSERVER"))); + v = conf->readEntry("Device", "modem"); + if (v.startsWith("ttyS")) + m_device->setCurrentItem(v.right(v.length()-4).toInt()+1); + else if ( v == "modem" ) + m_device->setCurrentItem(0); + else + { + m_device->setCurrentItem( m_device->count()-1 ); + m_device_edit->setText( "/dev/" + v ); + slotDeviceChanged( m_device->count()-1 ); + } + + m_system->setCurrentItem(m_current); + m_command->setText(m_commands[m_current]); + slotSystemChanged(m_current); +} + +void ConfSystem::save() +{ + m_commands[ m_current ] = m_command->text(); + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + if (m_commands[EFAX_ID] != defaultCommand(efax_default_cmd)) + conf->writePathEntry("EFax", m_commands[EFAX_ID]); + else + conf->deleteEntry("EFax"); + if (m_commands[HYLAFAX_ID] != defaultCommand(hylafax_default_cmd)) + conf->writePathEntry("HylaFax", m_commands[HYLAFAX_ID]); + else + conf->deleteEntry("HylaFax"); + if (m_commands[MGETTY_ID] != defaultCommand(mgetty_default_cmd)) + conf->writePathEntry("Mgetty", m_commands[MGETTY_ID]); + else + conf->deleteEntry("Mgetty"); + if ( !m_commands[ OTHER_ID ].isEmpty() ) + conf->writeEntry( "Other", m_commands[ OTHER_ID ] ); + else + conf->deleteEntry( "Other" ); + int ID = m_system->currentItem(); + switch (ID) + { + case EFAX_ID: conf->writeEntry("System", "efax"); break; + case HYLAFAX_ID: conf->writeEntry("System", "hylafax"); break; + case MGETTY_ID: conf->writeEntry("System", "mgetty"); break; + case OTHER_ID: conf->writeEntry( "System", "other" ); break; + } + conf->setGroup("Fax"); + if ( m_device->currentItem() != ( m_device->count()-1 ) ) + conf->writeEntry("Device", m_device->currentItem() == 0 ? QString("modem") : QString("ttyS%1").arg(m_device->currentItem()-1)); + else + { + QString dev = m_device_edit->text(); + // strip leading "/dev/" + if ( dev.startsWith( "/dev/" ) ) + dev = dev.mid( 5 ); + conf->writeEntry( "Device", dev ); + } + if (m_server->text().isEmpty()) + conf->deleteEntry("Server"); + else + conf->writeEntry("Server", m_server->text()); +} + +void ConfSystem::slotSystemChanged(int ID) +{ + m_commands[m_current] = m_command->text(); + m_current = ID; + if (ID == EFAX_ID) + m_device->parentWidget()->show(); + else + m_device->parentWidget()->hide(); + if (ID == HYLAFAX_ID) + m_server->parentWidget()->show(); + else + m_server->parentWidget()->hide(); + m_command->setText(m_commands[m_current]); +} + +void ConfSystem::slotDeviceChanged( int ID ) +{ + if ( ID != ( m_device->count()-1 ) ) + m_device_edit->hide(); + else + m_device_edit->show(); +} + +#include "confsystem.moc" diff --git a/kdeprint/kdeprintfax/confsystem.h b/kdeprint/kdeprintfax/confsystem.h new file mode 100644 index 000000000..202e5f7a0 --- /dev/null +++ b/kdeprint/kdeprintfax/confsystem.h @@ -0,0 +1,50 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFSYSTEM_H +#define CONFSYSTEM_H + +#include +#include + +class QLineEdit; +class QComboBox; + +class ConfSystem : public QWidget +{ + Q_OBJECT +public: + ConfSystem(QWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + +protected slots: + void slotSystemChanged(int); + void slotDeviceChanged(int); + +private: + QComboBox *m_system, *m_device; + QLineEdit *m_command, *m_server, *m_device_edit; + QStringList m_commands; + int m_current; +}; + +#endif diff --git a/kdeprint/kdeprintfax/cr16-action-abentry.png b/kdeprint/kdeprintfax/cr16-action-abentry.png new file mode 100644 index 000000000..b6b1011f3 Binary files /dev/null and b/kdeprint/kdeprintfax/cr16-action-abentry.png differ diff --git a/kdeprint/kdeprintfax/defcmds.cpp b/kdeprint/kdeprintfax/defcmds.cpp new file mode 100644 index 000000000..b9fc8beee --- /dev/null +++ b/kdeprint/kdeprintfax/defcmds.cpp @@ -0,0 +1,38 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "defcmds.h" + +#include +#include + +QString defaultCommand(const QString& cmd) +{ + QString str(cmd); + QRegExp r("%exe_(\\w+)"); + int p(-1); + if ((p=r.search(str)) != -1) + { + QString exe = KStandardDirs::findExe(r.cap(1)); + if (exe.isEmpty()) + exe = "/usr/bin/"+r.cap(1); + str.replace(p, r.matchedLength(), exe); + } + return str; +} diff --git a/kdeprint/kdeprintfax/defcmds.h b/kdeprint/kdeprintfax/defcmds.h new file mode 100644 index 000000000..6502250d3 --- /dev/null +++ b/kdeprint/kdeprintfax/defcmds.h @@ -0,0 +1,32 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef DEFCMDS_H +#define DEFCMDS_H + +#include + +#define efax_default_cmd "%exe_fax %user_{NAME=\"@@\"} %dev_{DEV=@@} PAGE=%page %from_{FROM=@@} %res_{?\?-l} send %number %files" +#define hylafax_default_cmd "%exe_sendfax %cover_{?\?-n} %server_h %res_{-m?\?-l} %subject_r %time_a %enterprise_x %comment_c %email_f %from_W %page_s -d %name_{@@@}%number %files" +#define mgetty_default_cmd "%exe_faxspool %user_F %email_f %name_D %time_t %number %files %res_{?\?-n} %cover_{?\?-C -}" + +QString defaultCommand(const QString& cmd); + +#endif diff --git a/kdeprint/kdeprintfax/faxab.cpp b/kdeprint/kdeprintfax/faxab.cpp new file mode 100644 index 000000000..28ba4e5c8 --- /dev/null +++ b/kdeprint/kdeprintfax/faxab.cpp @@ -0,0 +1,212 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "faxab.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +FaxAB::FaxAB(QWidget *parent, const char *name) +: KDialog(parent, name, true) +{ + m_list = new KListView( this ); + m_list->addColumn( i18n( "Name" ) ); + m_list->addColumn( i18n( "Fax Number" ) ); + m_list->header()->setStretchEnabled( true, 0 ); + QLabel *m_listlabel = new QLabel(i18n("Entries:"), this); + m_ok = new KPushButton(KStdGuiItem::ok(), this); + QPushButton *m_cancel = new KPushButton(KStdGuiItem::cancel(), this); + QPushButton *m_ab = new KPushButton(KGuiItem(i18n("&Edit Addressbook"), "contents"), this); + connect(m_ok, SIGNAL(clicked()), SLOT(accept())); + connect(m_cancel, SIGNAL(clicked()), SLOT(reject())); + connect(m_ab, SIGNAL(clicked()), SLOT(slotEditAb())); + m_ok->setDefault(true); + + QVBoxLayout *l0 = new QVBoxLayout(this, 10, 10); + l0->addWidget( m_listlabel ); + l0->addWidget( m_list ); + QHBoxLayout *l2 = new QHBoxLayout(0, 0, 10); + l0->addLayout(l2, 0); + l2->addWidget(m_ab, 0); + l2->addStretch(1); + l2->addWidget(m_ok, 0); + l2->addWidget(m_cancel, 0); + + KConfig *conf = KGlobal::config(); + conf->setGroup( "General" ); + QSize defsize( 400, 200 ); + resize( conf->readSizeEntry( "ABSize", &defsize ) ); + + initialize(); + connect(KABC::StdAddressBook::self(), SIGNAL(addressBookChanged(AddressBook*)), SLOT(slotAbChanged(AddressBook*))); +} + +FaxAB::~FaxAB() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup( "General" ); + conf->writeEntry( "ABSize", size() ); +} + +void FaxAB::initialize() +{ + m_entries.clear(); + m_list->clear(); + + KABC::AddressBook *bk = KABC::StdAddressBook::self(); + for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it) + { + KABC::PhoneNumber::List numbers = (*it).phoneNumbers(); + KABC::PhoneNumber::List faxNumbers; + for (QValueList::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit) + { + if (((*nit).type() & KABC::PhoneNumber::Fax) && !(*nit).number().isEmpty()) + faxNumbers << ( *nit ); + } + if (faxNumbers.count() > 0) + { + for ( KABC::PhoneNumber::List::ConstIterator nit = faxNumbers.begin(); nit != faxNumbers.end(); ++nit ) + { + FaxABEntry entry; + entry.m_number = ( *nit ); + entry.m_enterprise = ( *it ).organization(); + if ( !( *it ).formattedName().isEmpty() ) + entry.m_name = ( *it ).formattedName(); + else + { + QString key = ( *it ).familyName(); + if ( !( *it ).givenName().isEmpty() ) + { + if ( !key.isEmpty() ) + key.append( " " ); + key.append( ( *it ).givenName() ); + } + entry.m_name = key; + } + entry.m_name += ( " (" + ( *nit ).typeLabel() + ")" ); + m_entries[ entry.m_name ] = entry; + } + } + } + + if (m_entries.count() > 0) + { + for (QMap::ConstIterator it=m_entries.begin(); it!=m_entries.end(); ++it) + { + QCheckListItem *item = new QCheckListItem( m_list, it.key(), QCheckListItem::CheckBox ); + item->setText( 1, ( *it ).m_number.number() ); + item->setText( 2, ( *it ).m_enterprise ); + } + m_list->sort(); + m_ok->setEnabled(true); + } + else + m_ok->setDisabled(true); +} + +void FaxAB::slotEditAb() +{ + KRun::runCommand("kaddressbook"); +} + +void FaxAB::slotAbChanged(AddressBook*) +{ + initialize(); +} + +bool FaxAB::getEntry(QStringList& number, QStringList& name, QStringList& enterprise, QWidget *parent) +{ + FaxAB kab(parent); + if (!kab.isValid()) + { + KMessageBox::error(parent, i18n("No fax number found in your address book.")); + return false; + } + if (kab.exec()) + { + QListViewItemIterator it( kab.m_list, QListViewItemIterator::Checked ); + while ( it.current() ) + { + number << it.current()->text( 1 ); + name << it.current()->text( 0 ); + enterprise << it.current()->text( 2 ); + ++it; + } + /* + number = kab.m_fax->currentText(); + name = kab.m_name->currentText(); + if (kab.m_entries.contains(name)) + { + enterprise = kab.m_entries[name][0]; + } + */ + return true; + } + + return false; +} + +bool FaxAB::getEntryByNumber(const QString& number, QString& name, QString& enterprise) +{ + KABC::AddressBook *bk = KABC::StdAddressBook::self(); + for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it) + { + KABC::PhoneNumber::List numbers = (*it).phoneNumbers(); + QStringList filteredNumbers; + for (QValueList::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit) + { + if (((*nit).type() & KABC::PhoneNumber::Fax) ) + { + QString strippedNumber; + for (uint i = 0; i < (*nit).number().length(); ++i) + if ((*nit).number()[i].isDigit() || ( *nit ).number()[ i ] == '+') + strippedNumber.append((*nit).number()[i]); + + if ( strippedNumber == number) + { + enterprise = (*it).organization(); + name = (*it).formattedName(); + return true; + } + } + } + } + + return false; +} + +bool FaxAB::isValid() +{ + return true; + //return (m_name->count() > 0); +} + +#include "faxab.moc" diff --git a/kdeprint/kdeprintfax/faxab.h b/kdeprint/kdeprintfax/faxab.h new file mode 100644 index 000000000..c72662055 --- /dev/null +++ b/kdeprint/kdeprintfax/faxab.h @@ -0,0 +1,64 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef FAXAB_H +#define FAXAB_H + +#include +#include +#include +#include + +class KListView; +class AddressBook; +class QPushButton; + +class FaxAB : public KDialog +{ + Q_OBJECT +public: + FaxAB(QWidget *parent = 0, const char *name = 0); + ~FaxAB(); + bool isValid(); + + static bool getEntry(QStringList& number, QStringList& name, QStringList& enterprise, QWidget *parent = 0); + static bool getEntryByNumber(const QString& number, QString& name, QString& enterprise); + +protected slots: + void slotEditAb(); + void slotAbChanged(AddressBook*); + +protected: + void initialize(); + +private: + struct FaxABEntry + { + QString m_name; + KABC::PhoneNumber m_number; + QString m_enterprise; + }; + + KListView* m_list; + QMap m_entries; + QPushButton* m_ok; +}; + +#endif diff --git a/kdeprint/kdeprintfax/faxctrl.cpp b/kdeprint/kdeprintfax/faxctrl.cpp new file mode 100644 index 000000000..4cb5f3bc7 --- /dev/null +++ b/kdeprint/kdeprintfax/faxctrl.cpp @@ -0,0 +1,669 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "faxctrl.h" +#include "kdeprintfax.h" +#include "defcmds.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define quote(x) KProcess::quote(x) + +/** \brief Return a string for the page size. + * + * @param size the page size, which is actually of type @c QPrinter::PageSize + * @return a pointer to a static string for the name of the page size. + */ +char const* pageSizeText(int size) +{ + switch(size) + { + case QPrinter::A4: return "a4"; + case QPrinter::Legal: return "legal"; + case QPrinter::Letter: return "letter"; + default: return "letter"; + } +} + +/** \brief Return the default page size. + */ +static QString pageSize() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Fax"); + return conf->readEntry("Page", pageSizeText(KGlobal::locale()->pageSize())); +} + +static QString stripNumber( const QString& s ) +{ + KConfig *conf = KGlobal::config(); + conf->setGroup( "Personal" ); + + // removes any non-numeric character, except ('+','*','#') (hope it's supported by faxing tools) + QString strip_s = s; + strip_s.replace( QRegExp( "[^\\d+*#]" ), "" ); + if ( strip_s.find( '+' ) != -1 && conf->readBoolEntry( "ReplaceIntChar", false ) ) + strip_s.replace( "+", conf->readEntry( "ReplaceIntCharVal" ) ); + return strip_s; +} + +static QString tagList( int n, ... ) +{ + QString t; + + va_list ap; + va_start( ap, n ); + for ( int i=0; i%name_{iftrue??iffalse}. Either + * @em iftrue or @em iffalse can be empty (or both, but that would + * be silly). For example, if the fax software uses the + * option @c -l for low resolution, you might use %res_{??-l}, + * and if it uses high resolution, use %res_{-h??}. As an + * abbreviation, omit the trailing ?, e.g., %res_{-h}. + * + * By the way, when using multiple, adjacent question marks, + * always be careful about inadvertently using trigraphs. + * Always escape the second and subsequent question marks, to be safe. + * I suppose question marks are not the best string to use, + * but I think they work well for the end-user. + * + * @param match the string to process + * @param value the Boolean value to control the processing + * @return the new value of the tag + */ +static QString processTag( const QString& match, bool value) +{ + QString v; + int p = match.find( '_' ); + if ( p != -1 && match[ p+1 ] == '{' ) + { + // Find the ?? that separates the iftrue from the iffalse parts. + int q = match.find( "?\?", p+2 ); + if ( q == -1 ) + { + // No iffalse part + if (value) + v = match.mid( p+2 ); + // else value is false, so leave v empty. + } + else if ( value ) + // Extract only the iftrue part + v = match.mid( p+2, q-p-2 ); + else + // Extract only the iffalse part + v = match.mid( q+2, match.length()-q-3 ); + } + // Else the string is malformed: no _ or no { after the _ + // In either case, there isn't much the program can do, + // so just leave the result string empty. + + return v; +} + +static QString processTag( const QString& match, const QString& value ) +{ + QString v; + int p = match.find( '_' ); + if ( p != -1 ) + { + if ( value.isEmpty() ) + v = ""; + else + { + if ( match[ p+1 ] == '{' ) + { + v = match.mid( p+2, match.length()-p-3 ); + v.replace( "@@", quote( value ) ); + } + else + v = ( "-" + match.mid( p+1 ) + " " + quote( value ) ); + } + } + else + v = quote( value ); + return v; +} + +static bool isTag( const QString& m, const QString& t ) +{ + return ( m == t || m.startsWith( t+"_" ) ); +} + +static QString replaceTags( const QString& s, const QString& tags, KdeprintFax *fax = NULL, const KdeprintFax::FaxItem& item = KdeprintFax::FaxItem() ) +{ + // unquote variables (they will be replaced with quoted values later) + + QValueStack stack; + KConfig *conf = KGlobal::config(); + + QString cmd = s; + + bool issinglequote=false; + bool isdoublequote=false; + QRegExp re_noquote("(\\$\\(|\\)|\\(|\"|'|\\\\|`|"+tags+")"); + QRegExp re_singlequote("('|"+tags+")"); + QRegExp re_doublequote("(\\$\\(|\"|\\\\|`|"+tags+")"); + for ( int i = re_noquote.search(cmd); + i != -1; + i = (issinglequote?re_singlequote.search(cmd,i) + :isdoublequote?re_doublequote.search(cmd,i) + :re_noquote.search(cmd,i)) + ) + { + if (cmd[i]=='(') // (...) + { + // assert(isdoublequote == false) + stack.push(isdoublequote); + i++; + } + else if (cmd[i]=='$') // $(...) + { + stack.push(isdoublequote); + isdoublequote = false; + i+=2; + } + else if (cmd[i]==')') // $(...) or (...) + { + if (!stack.isEmpty()) + isdoublequote = stack.pop(); + else + qWarning("Parse error."); + i++; + } + else if (cmd[i]=='\'') + { + issinglequote=!issinglequote; + i++; + } + else if (cmd[i]=='"') + { + isdoublequote=!isdoublequote; + i++; + } + else if (cmd[i]=='\\') + i+=2; + else if (cmd[i]=='`') + { + // Replace all `...` with safer $(...) + cmd.replace (i, 1, "$("); + QRegExp re_backticks("(`|\\\\`|\\\\\\\\|\\\\\\$)"); + for ( int i2=re_backticks.search(cmd,i+2); + i2!=-1; + i2=re_backticks.search(cmd,i2) + ) + { + if (cmd[i2] == '`') + { + cmd.replace (i2, 1, ")"); + i2=cmd.length(); // leave loop + } + else + { // remove backslash and ignore following character + cmd.remove (i2, 1); + i2++; + } + } + // Leave i unchanged! We need to process "$(" + } + else + { + QString match, v; + + // get match + if (issinglequote) + match=re_singlequote.cap(); + else if (isdoublequote) + match=re_doublequote.cap(); + else + match=re_noquote.cap(); + + // substitute %variables + // settings + if ( isTag( match, "%dev" ) ) + { + conf->setGroup("Fax"); + v = processTag( match, conf->readEntry("Device", "modem") ); + + } + else if (isTag( match, "%server" )) + { + conf->setGroup( "Fax" ); + v = conf->readEntry("Server"); + if (v.isEmpty()) + v = getenv("FAXSERVER"); + if (v.isEmpty()) + v = QString::fromLatin1("localhost"); + v = processTag( match, v ); + } + else if (isTag( match, "%page" )) + { + conf->setGroup( "Fax" ); + v = processTag( match, pageSize() ); + } + else if (isTag( match, "%res" )) + { + conf->setGroup( "Fax" ); + v = processTag(match, conf->readEntry("Resolution", "High") == "High"); + } + else if (isTag( match, "%user" )) + { + conf->setGroup("Personal"); + v = processTag(match, conf->readEntry("Name", getenv("USER"))); + } + else if (isTag( match, "%from" )) + { + conf->setGroup( "Personal" ); + v = processTag(match, conf->readEntry("Number")); + } + else if (isTag( match, "%email" )) + { + KEMailSettings e; + v = processTag(match, e.getSetting(KEMailSettings::EmailAddress)); + } + // arguments + else if (isTag( match, "%number" )) + v = processTag( match, stripNumber( item.number) ); + else if (isTag( match, "%rawnumber" )) + v = processTag( match, item.number ); + else if (isTag( match, "%name" )) + v = processTag(match, item.name); + else if (isTag( match, "%comment" )) + v = processTag(match, fax->comment()); + else if (isTag( match, "%enterprise" )) + v = processTag(match, item.enterprise); + else if ( isTag( match, "%time" ) ) + v = processTag( match, fax->time() ); + else if ( isTag( match, "%subject" ) ) + v = processTag( match, fax->subject() ); + else if (isTag( match, "%cover" )) + v = processTag(match, fax->cover()); + + // %variable inside of a quote? + if (isdoublequote) + v='"'+v+'"'; + else if (issinglequote) + v="'"+v+"'"; + + cmd.replace (i, match.length(), v); + i+=v.length(); + } + } + + return cmd; +} + +FaxCtrl::FaxCtrl(QWidget *parent, const char *name) +: QObject(parent, name) +{ + m_process = new KProcess(); + m_process->setUseShell(true); + connect(m_process, SIGNAL(receivedStdout(KProcess*,char*,int)), SLOT(slotReceivedStdout(KProcess*,char*,int))); + connect(m_process, SIGNAL(receivedStderr(KProcess*,char*,int)), SLOT(slotReceivedStdout(KProcess*,char*,int))); + connect(m_process, SIGNAL(processExited(KProcess*)), SLOT(slotProcessExited(KProcess*))); + connect(this, SIGNAL(faxSent(bool)), SLOT(cleanTempFiles())); + m_logview = 0; +} + +FaxCtrl::~FaxCtrl() +{ + slotCloseLog(); + delete m_process; +} + +bool FaxCtrl::send(KdeprintFax *f) +{ + m_command = faxCommand(); + if (m_command.isEmpty()) + return false; + + // replace tags common to all fax "operations" + m_command = replaceTags( m_command, tagList( 11, "%dev", "%server", "%page", "%res", "%user", "%from", "%email", "%comment", "%time", "%subject", "%cover" ), f ); + + m_log = QString::null; + m_filteredfiles.clear(); + cleanTempFiles(); + m_files = f->files(); + m_faxlist = f->faxList(); + + addLogTitle( i18n( "Converting input files to PostScript" ) ); + filter(); + + return true; +} + +void FaxCtrl::slotReceivedStdout(KProcess*, char *buffer, int len) +{ + QCString str(buffer, len); + kdDebug() << "Received stdout: " << str << endl; + addLog(QString(str)); +} + +void FaxCtrl::slotProcessExited(KProcess*) +{ + // we exited a process: if there's still entries in m_files, this was a filter + // process, else this was the fax process + bool ok = (m_process->normalExit() && ((m_process->exitStatus() & (m_files.count() > 0 ? 0x1 : 0xFFFFFFFF)) == 0)); + if ( ok ) + { + if ( m_files.count() > 0 ) + { + // remove first element + m_files.remove(m_files.begin()); + if (m_files.count() > 0) + filter(); + else + sendFax(); + } + else if ( !m_faxlist.isEmpty() ) + sendFax(); + else + faxSent( true ); + } + else + { + emit faxSent(false); + } +} + +QString FaxCtrl::faxCommand() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + QString sys = conf->readPathEntry("System", "efax"); + QString cmd; + if (sys == "hylafax") + cmd = conf->readPathEntry("HylaFax", hylafax_default_cmd); + else if (sys == "mgetty") + cmd = conf->readPathEntry("Mgetty", mgetty_default_cmd); + else if ( sys == "other" ) + cmd = conf->readPathEntry( "Other", QString::null ); + else + cmd = conf->readPathEntry("EFax", efax_default_cmd); + if (cmd.startsWith("%exe_")) + cmd = defaultCommand(cmd); + return cmd; +} + +void FaxCtrl::sendFax() +{ + if ( m_command.find( "%files" ) != -1 ) + { + // replace %files tag + QString filestr; + for (QStringList::ConstIterator it=m_filteredfiles.begin(); it!=m_filteredfiles.end(); ++it) + filestr += (quote(*it)+" "); + m_command.replace("%files", filestr); + } + + if ( !m_faxlist.isEmpty() ) + { + KdeprintFax::FaxItem item = m_faxlist.first(); + m_faxlist.remove(m_faxlist.begin()); + + addLogTitle( i18n( "Sending fax to %1 (%2)" ).arg( item.number ).arg( item.name ) ); + + QString cmd = replaceTags( m_command, tagList( 4, "%number", "%name", "%enterprise", "%rawnumber" ), NULL, item ); + m_process->clearArguments(); + *m_process << cmd; + addLog(i18n("Sending to fax using: %1").arg(cmd)); + if (!m_process->start(KProcess::NotifyOnExit, KProcess::AllOutput)) + emit faxSent(false); + else + emit message(i18n("Sending fax to %1...").arg( item.number )); + } +} + +void FaxCtrl::filter() +{ + if (m_files.count() > 0) + { + QString mimeType = KMimeType::findByURL(KURL(m_files[0]), 0, true)->name(); + if (mimeType == "application/postscript" || mimeType == "image/tiff") + { + emit message(i18n("Skipping %1...").arg(m_files[0])); + m_filteredfiles.prepend(m_files[0]); + m_files.remove(m_files.begin()); + filter(); + } + else + { + QString tmp = locateLocal("tmp","kdeprintfax_") + kapp->randomString(8); + m_filteredfiles.prepend(tmp); + m_tempfiles.append(tmp); + m_process->clearArguments(); + *m_process << locate("data","kdeprintfax/anytops") << "-m" << KProcess::quote(locate("data","kdeprintfax/faxfilters")) + << QString::fromLatin1("--mime=%1").arg(mimeType) + << "-p" << pageSize() + << KProcess::quote(m_files[0]) << KProcess::quote(tmp); + if (!m_process->start(KProcess::NotifyOnExit, KProcess::AllOutput)) + emit faxSent(false); + else + emit message(i18n("Filtering %1...").arg(m_files[0])); + } + } + else + { + sendFax(); + } +} + +bool FaxCtrl::abort() +{ + if (m_process->isRunning()) + return m_process->kill(); + else + return false; +} + +void FaxCtrl::viewLog(QWidget *) +{ + if (!m_logview) + { + QWidget *topView = new QWidget(0, "LogView", WType_TopLevel|WStyle_DialogBorder|WDestructiveClose); + m_logview = new KTextEdit(topView); + m_logview->setTextFormat( Qt::LogText ); + m_logview->setWordWrap( QTextEdit::WidgetWidth ); + m_logview->setPaper( Qt::white ); + //m_logview->setReadOnly(true); + //m_logview->setWordWrap(QTextEdit::NoWrap); + QPushButton *m_clear = new KPushButton(KStdGuiItem::clear(), topView); + QPushButton *m_close = new KPushButton(KStdGuiItem::close(), topView); + QPushButton *m_print = new KPushButton( KStdGuiItem::print(), topView ); + QPushButton *m_save = new KPushButton( KStdGuiItem::saveAs(), topView ); + m_close->setDefault(true); + connect(m_clear, SIGNAL(clicked()), SLOT(slotClearLog())); + connect(m_close, SIGNAL(clicked()), SLOT(slotCloseLog())); + connect(m_logview, SIGNAL(destroyed()), SLOT(slotCloseLog())); + connect( m_print, SIGNAL( clicked() ), SLOT( slotPrintLog() ) ); + connect( m_save, SIGNAL( clicked() ), SLOT( slotSaveLog() ) ); + + QVBoxLayout *l0 = new QVBoxLayout(topView, 10, 10); + l0->addWidget(m_logview); + QHBoxLayout *l1 = new QHBoxLayout(0, 0, 10); + l0->addLayout(l1); + l1->addStretch(1); + l1->addWidget( m_save ); + l1->addWidget( m_print ); + l1->addWidget(m_clear); + l1->addWidget(m_close); + + m_logview->setText(m_log); + + topView->resize(450, 350); + topView->show(); + } + else + { + KWin::activateWindow(m_logview->parentWidget()->winId()); + } +} + +void FaxCtrl::addLogTitle( const QString& s ) +{ + QString t( s ); + t.prepend( '\n' ).append( '\n' ); + addLog( t, true ); +} + +void FaxCtrl::addLog(const QString& s, bool isTitle) +{ + QString t = QStyleSheet::escape(s); + if ( isTitle ) + t.prepend( "" ).append( "" ); + m_log.append( t + '\n' ); + if (m_logview) + m_logview->append(t); +} + +QString FaxCtrl::faxSystem() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + QString s = conf->readEntry("System", "efax"); + s[0] = s[0].upper(); + return s; +} + +void FaxCtrl::cleanTempFiles() +{ + for (QStringList::ConstIterator it=m_tempfiles.begin(); it!=m_tempfiles.end(); ++it) + QFile::remove(*it); + m_tempfiles.clear(); +} + +void FaxCtrl::slotClearLog() +{ + m_log = QString::null; + if (m_logview) + m_logview->clear(); +} + +void FaxCtrl::slotCloseLog() +{ + const QObject *obj = sender(); + if (m_logview) + { + QTextEdit *view = m_logview; + m_logview = 0; + if (obj && obj->inherits("QPushButton")) + delete view->parentWidget(); +kdDebug() << "slotClose()" << endl; + } +} + +void FaxCtrl::slotPrintLog() +{ + if ( m_logview ) + { + KPrinter printer; + printer.setDocName( i18n( "Fax log" ) ); + printer.setDocFileName( "faxlog" ); + if ( printer.setup( m_logview->topLevelWidget(), i18n( "Fax Log" ) ) ) + { + QPainter painter( &printer ); + QPaintDeviceMetrics metric( &printer ); + QRect body( 0, 0, metric.width(), metric.height() ), view( body ); + //QString txt = m_logview->text(); + QString txt = m_log; + + txt.replace( '\n', "
      " ); + txt.prepend( "

      " + i18n( "KDEPrint Fax Tool Log" ) + "

      " ); + + kdDebug() << "Log: " << txt << endl; + QSimpleRichText richText( txt, m_logview->font() ); + + richText.setWidth( &painter, body.width() ); + do + { + richText.draw( &painter, body.left(), body.top(), view, m_logview->colorGroup() ); + view.moveBy( 0, body.height() ); + painter.translate( 0, -body.height() ); + if ( view.top() >= richText.height() ) + break; + printer.newPage(); + } while ( true ); + } + } +} + +void FaxCtrl::slotSaveLog() +{ + if ( m_logview ) + { + QString filename = KFileDialog::getSaveFileName( QString::null, QString::null, m_logview ); + if ( !filename.isEmpty() ) + { + QFile f( filename ); + if ( f.open( IO_WriteOnly ) ) + { + QTextStream t( &f ); + t << i18n( "KDEPrint Fax Tool Log" ) << endl; + t << m_logview->text() << endl; + f.close(); + } + else + KMessageBox::error( m_logview, i18n( "Cannot open file for writing." ) ); + } + } +} + +#include "faxctrl.moc" diff --git a/kdeprint/kdeprintfax/faxctrl.h b/kdeprint/kdeprintfax/faxctrl.h new file mode 100644 index 000000000..d3d8086a9 --- /dev/null +++ b/kdeprint/kdeprintfax/faxctrl.h @@ -0,0 +1,73 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef FAXCTRL_H +#define FAXCTRL_H + +#include +#include +#include + +#include "kdeprintfax.h" + +class KProcess; +class QTextEdit; + +class FaxCtrl : public QObject +{ + Q_OBJECT +public: + FaxCtrl(QWidget *parent = 0, const char *name = 0); + ~FaxCtrl(); + + bool send(KdeprintFax *f); + bool abort(); + void viewLog(QWidget *parent = 0); + QString faxSystem(); + QString faxCommand(); + +signals: + void message(const QString&); + void faxSent(bool); + +protected slots: + void slotReceivedStdout(KProcess*, char*, int); + void slotProcessExited(KProcess*); + void cleanTempFiles(); + void slotClearLog(); + void slotCloseLog(); + void slotPrintLog(); + void slotSaveLog(); + +protected: + void filter(); + void sendFax(); + void addLog(const QString&, bool = false); + void addLogTitle( const QString& ); + +private: + KProcess *m_process; + QString m_log, m_command; + QStringList m_files, m_filteredfiles, m_tempfiles; + QTextEdit *m_logview; + KdeprintFax::FaxItemList m_faxlist; +}; + +#endif diff --git a/kdeprint/kdeprintfax/faxfilters b/kdeprint/kdeprintfax/faxfilters new file mode 100644 index 000000000..73e96a14e --- /dev/null +++ b/kdeprint/kdeprintfax/faxfilters @@ -0,0 +1,3 @@ +text/* enscript -M %psu -E -p %out %in +image/* imagetops -gray -noturn %in > %out +*/* cat %in > %out diff --git a/kdeprint/kdeprintfax/filterdlg.cpp b/kdeprint/kdeprintfax/filterdlg.cpp new file mode 100644 index 000000000..563c37a7d --- /dev/null +++ b/kdeprint/kdeprintfax/filterdlg.cpp @@ -0,0 +1,72 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "filterdlg.h" +#include "filterdlg.moc" + +#include +#include +#include + +#include + +FilterDlg::FilterDlg(QWidget *parent, const char *name) +: KDialogBase(parent, name, true, i18n("Filter Parameters"), Ok|Cancel, Ok) +{ + QWidget *w = new QWidget(this); + + m_mime = new QLineEdit(w); + m_cmd = new QLineEdit(w); + QLabel *m_mimelabel = new QLabel(i18n("MIME type:"), w); + QLabel *m_cmdlabel = new QLabel(i18n("Command:"), w); + + QGridLayout *l0 = new QGridLayout(w, 2, 2, 10, 5); + l0->setColStretch(1, 1); + l0->addWidget(m_mimelabel, 0, 0); + l0->addWidget(m_cmdlabel, 1, 0); + l0->addWidget(m_mime, 0, 1); + l0->addWidget(m_cmd, 1, 1); + + setMainWidget(w); + m_mime->setFocus(); + resize(300, 100); + connect(m_mime, SIGNAL(textChanged ( const QString & )),this, SLOT(slotTextFilterChanged())); + connect(m_cmd, SIGNAL(textChanged ( const QString & )),this, SLOT(slotTextFilterChanged())); + slotTextFilterChanged(); +} + +void FilterDlg::slotTextFilterChanged( ) +{ + enableButtonOK(!m_mime->text().isEmpty() && !m_cmd->text().isEmpty()); +} + +bool FilterDlg::doIt(QWidget *parent, QString *mime, QString *cmd) +{ + FilterDlg dlg(parent); + if (mime) dlg.m_mime->setText(*mime); + if (cmd) dlg.m_cmd->setText(*cmd); + if (dlg.exec()) + { + if (mime) *mime = dlg.m_mime->text(); + if (cmd) *cmd = dlg.m_cmd->text(); + return true; + } + return false; +} diff --git a/kdeprint/kdeprintfax/filterdlg.h b/kdeprint/kdeprintfax/filterdlg.h new file mode 100644 index 000000000..f1010a2c6 --- /dev/null +++ b/kdeprint/kdeprintfax/filterdlg.h @@ -0,0 +1,41 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef FILTERDLG_H +#define FILTERDLG_H + +#include + +class QLineEdit; + +class FilterDlg : public KDialogBase +{ + Q_OBJECT +public: + FilterDlg(QWidget *parent = 0, const char *name = 0); + + static bool doIt(QWidget *parent = 0, QString* mime = 0, QString *cmd = 0); +protected slots: + void slotTextFilterChanged(); +private: + QLineEdit *m_mime, *m_cmd; +}; + +#endif diff --git a/kdeprint/kdeprintfax/hi128-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi128-app-kdeprintfax.png new file mode 100644 index 000000000..ad29adba7 Binary files /dev/null and b/kdeprint/kdeprintfax/hi128-app-kdeprintfax.png differ diff --git a/kdeprint/kdeprintfax/hi16-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi16-app-kdeprintfax.png new file mode 100644 index 000000000..bb676f8b7 Binary files /dev/null and b/kdeprint/kdeprintfax/hi16-app-kdeprintfax.png differ diff --git a/kdeprint/kdeprintfax/hi22-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi22-app-kdeprintfax.png new file mode 100644 index 000000000..90fc64b0b Binary files /dev/null and b/kdeprint/kdeprintfax/hi22-app-kdeprintfax.png differ diff --git a/kdeprint/kdeprintfax/hi32-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi32-app-kdeprintfax.png new file mode 100644 index 000000000..7330eb41f Binary files /dev/null and b/kdeprint/kdeprintfax/hi32-app-kdeprintfax.png differ diff --git a/kdeprint/kdeprintfax/hi48-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi48-app-kdeprintfax.png new file mode 100644 index 000000000..3f58c3695 Binary files /dev/null and b/kdeprint/kdeprintfax/hi48-app-kdeprintfax.png differ diff --git a/kdeprint/kdeprintfax/hi64-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi64-app-kdeprintfax.png new file mode 100644 index 000000000..47e156d5f Binary files /dev/null and b/kdeprint/kdeprintfax/hi64-app-kdeprintfax.png differ diff --git a/kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz b/kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz new file mode 100644 index 000000000..f46fd4401 Binary files /dev/null and b/kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz differ diff --git a/kdeprint/kdeprintfax/kdeprintfax.cpp b/kdeprint/kdeprintfax/kdeprintfax.cpp new file mode 100644 index 000000000..e10416bef --- /dev/null +++ b/kdeprint/kdeprintfax/kdeprintfax.cpp @@ -0,0 +1,607 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "kdeprintfax.h" +#include "faxab.h" +#include "faxctrl.h" +#include "configdlg.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +KdeprintFax::KdeprintFax(QWidget *parent, const char *name) +: KMainWindow(parent, name) +{ + m_faxctrl = new FaxCtrl(this); + m_quitAfterSend = false; + connect(m_faxctrl, SIGNAL(message(const QString&)), SLOT(slotMessage(const QString&))); + connect(m_faxctrl, SIGNAL(faxSent(bool)), SLOT(slotFaxSent(bool))); + + QWidget *mainw = new QWidget(this); + setCentralWidget(mainw); + m_files = new KListBox(mainw); + connect( m_files, SIGNAL( currentChanged( QListBoxItem* ) ), SLOT( slotCurrentChanged() ) ); + m_upbtn = new KPushButton( mainw ); + m_upbtn->setIconSet( SmallIconSet( "up" ) ); + QToolTip::add( m_upbtn, i18n( "Move up" ) ); + connect( m_upbtn, SIGNAL( clicked() ), SLOT( slotMoveUp() ) ); + m_upbtn->setEnabled( false ); + m_downbtn = new KPushButton( mainw ); + m_downbtn->setIconSet( SmallIconSet( "down" ) ); + QToolTip::add( m_downbtn, i18n( "Move down" ) ); + connect( m_downbtn, SIGNAL( clicked() ), SLOT( slotMoveDown() ) ); + m_downbtn->setEnabled( false ); + QLabel *m_filelabel = new QLabel(i18n("F&iles:"), mainw); + m_filelabel->setBuddy(m_files); + KSeparator*m_line = new KSeparator( KSeparator::HLine, mainw); + KSeparator *m_line2 = new KSeparator( KSeparator::HLine, mainw ); + m_numbers = new KListView( mainw ); + m_numbers->addColumn( i18n("Fax Number") ); + m_numbers->addColumn( i18n("Name") ); + m_numbers->addColumn( i18n("Enterprise") ); + m_numbers->header()->setStretchEnabled( true ); + m_numbers->setSelectionMode( QListView::Extended ); + connect( m_numbers, SIGNAL( selectionChanged() ), SLOT( slotFaxSelectionChanged() ) ); + connect( m_numbers, SIGNAL( executed( QListViewItem* ) ), SLOT( slotFaxExecuted( QListViewItem* ) ) ); + m_newbtn = new KPushButton( mainw ); + m_newbtn->setPixmap( SmallIcon( "edit" ) ); + QToolTip::add( m_newbtn, i18n( "Add fax number" ) ); + connect( m_newbtn, SIGNAL( clicked() ), SLOT( slotFaxAdd() ) ); + m_abbtn = new KPushButton( mainw ); + m_abbtn->setPixmap( SmallIcon( "kaddressbook" ) ); + QToolTip::add( m_abbtn, i18n( "Add fax number from addressbook" ) ); + connect( m_abbtn, SIGNAL( clicked() ), SLOT( slotKab() ) ); + m_delbtn = new KPushButton( mainw ); + m_delbtn->setIconSet( SmallIconSet( "edittrash" ) ); + QToolTip::add( m_delbtn, i18n( "Remove fax number" ) ); + m_delbtn->setEnabled( false ); + connect( m_delbtn, SIGNAL( clicked() ), SLOT( slotFaxRemove() ) ); + QLabel *m_commentlabel = new QLabel(i18n("&Comment:"), mainw); + KSystemTray *m_tray = new KSystemTray(this); + m_tray->setPixmap(SmallIcon("kdeprintfax")); + m_tray->show(); + m_comment = new QTextEdit(mainw); +// I don't understand why anyone would want to turn off word wrap. It makes +// the text hard to read and write. It provides no benefit. Therefore, +// I commented out the next line. [Ray Lischner] +// m_comment->setWordWrap(QTextEdit::NoWrap); + m_comment->setLineWidth(1); + m_commentlabel->setBuddy(m_comment); + QLabel *m_timelabel = new QLabel(i18n("Sched&ule:"), mainw); + m_timecombo = new QComboBox(mainw); + m_timecombo->insertItem(i18n("Now")); + m_timecombo->insertItem(i18n("At Specified Time")); + m_timecombo->setCurrentItem(0); + m_timelabel->setBuddy(m_timecombo); + m_time = new QTimeEdit(mainw); + m_time->setTime(QTime::currentTime()); + m_time->setEnabled(false); + connect(m_timecombo, SIGNAL(activated(int)), SLOT(slotTimeComboActivated(int))); + m_cover = new QCheckBox(i18n("Send Co&ver Sheet"), mainw); + connect(m_cover, SIGNAL(toggled(bool)), SLOT(slotCoverToggled(bool))); + m_subject = new QLineEdit( mainw ); + QLabel *m_subjectlabel = new QLabel( i18n( "Su&bject:" ), mainw ); + m_subjectlabel->setBuddy( m_subject ); + + QGridLayout *l0 = new QGridLayout(mainw, 10, 2, 10, 5); + l0->setColStretch(1,1); + l0->addWidget(m_filelabel, 0, 0, Qt::AlignLeft|Qt::AlignTop); + QHBoxLayout *l2 = new QHBoxLayout( 0, 0, 10 ); + QVBoxLayout *l3 = new QVBoxLayout( 0, 0, 5 ); + l0->addLayout( l2, 0, 1 ); + l2->addWidget( m_files ); + l2->addLayout( l3 ); + //l3->addStretch( 1 ); + l3->addWidget( m_upbtn ); + l3->addWidget( m_downbtn ); + l3->addStretch( 1 ); + l0->addMultiCellWidget(m_line, 1, 1, 0, 1); + l0->addRowSpacing(1, 10); + QHBoxLayout *l5 = new QHBoxLayout( 0, 0, 10 ); + QVBoxLayout *l6 = new QVBoxLayout( 0, 0, 5 ); + l0->addMultiCellLayout( l5, 2, 4, 0, 1 ); + l5->addWidget( m_numbers ); + l5->addLayout( l6 ); + l6->addWidget( m_newbtn ); + l6->addWidget( m_delbtn ); + l6->addWidget( m_abbtn ); + l6->addStretch( 1 ); + l0->addMultiCellWidget( m_line2, 5, 5, 0, 1 ); + l0->addRowSpacing( 5, 10 ); + l0->addWidget( m_cover, 6, 1 ); + l0->addWidget( m_subjectlabel, 7, 0 ); + l0->addWidget( m_subject, 7, 1 ); + l0->addWidget(m_commentlabel, 8, 0, Qt::AlignTop|Qt::AlignLeft); + l0->addWidget(m_comment, 8, 1); + l0->addWidget(m_timelabel, 9, 0); + QHBoxLayout *l1 = new QHBoxLayout(0, 0, 5); + l0->addLayout(l1, 9, 1); + l1->addWidget(m_timecombo, 1); + l1->addWidget(m_time, 0); + + m_msglabel = new KSqueezedTextLabel(statusBar()); + statusBar()->addWidget(m_msglabel, 1); + statusBar()->insertFixedItem(i18n("Processing..."), 1); + statusBar()->changeItem(i18n("Idle"), 1); + statusBar()->insertFixedItem("hylafax/efax", 2); + initActions(); + setAcceptDrops(true); + setCaption(i18n("Send to Fax")); + updateState(); + + resize(550,500); + QWidget *d = kapp->desktop(); + move((d->width()-width())/2, (d->height()-height())/2); +} + +KdeprintFax::~KdeprintFax() +{ +} + +void KdeprintFax::initActions() +{ + new KAction(i18n("&Add File..."), "filenew", Qt::Key_Insert, this, SLOT(slotAdd()), actionCollection(), "file_add"); + new KAction(i18n("&Remove File"), "remove", Qt::Key_Delete, this, SLOT(slotRemove()), actionCollection(), "file_remove"); + new KAction(i18n("&Send Fax"), "connect_established", Qt::Key_Return, this, SLOT(slotFax()), actionCollection(), "fax_send"); + new KAction(i18n("A&bort"), "stop", Qt::Key_Escape, this, SLOT(slotAbort()), actionCollection(), "fax_stop"); + new KAction(i18n("A&ddress Book"), "kaddressbook", Qt::CTRL+Qt::Key_A, this, SLOT(slotKab()), actionCollection(), "fax_ab"); + new KAction(i18n("V&iew Log"), "contents", Qt::CTRL+Qt::Key_L, this, SLOT(slotViewLog()), actionCollection(), "fax_log"); + new KAction(i18n("Vi&ew File"), "filefind", Qt::CTRL+Qt::Key_O, this, SLOT(slotView()), actionCollection(), "file_view"); + new KAction( i18n( "&New Fax Recipient..." ), "edit", Qt::CTRL+Qt::Key_N, this, SLOT( slotFaxAdd() ), actionCollection(), "fax_add" ); + + KStdAction::quit(this, SLOT(slotQuit()), actionCollection()); + setStandardToolBarMenuEnabled(true); + KStdAction::showMenubar(this, SLOT(slotToggleMenuBar()), actionCollection()); + KStdAction::preferences(this, SLOT(slotConfigure()), actionCollection()); + KStdAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), +actionCollection()); + actionCollection()->action("fax_stop")->setEnabled(false); + connect(actionCollection()->action("file_remove"), SIGNAL(enabled(bool)), actionCollection()->action("file_view"), SLOT(setEnabled(bool))); + actionCollection()->action("file_remove")->setEnabled(false); + + createGUI(); +} + +void KdeprintFax::slotToggleMenuBar() +{ + if (menuBar()->isVisible()) menuBar()->hide(); + else menuBar()->show(); +} + +void KdeprintFax::slotAdd() +{ + KURL url = KFileDialog::getOpenURL(QString::null, QString::null, this); + if (!url.isEmpty()) + addURL(url); +} + +void KdeprintFax::slotRemove() +{ + if (m_files->currentItem() >= 0) + m_files->removeItem(m_files->currentItem()); + if (m_files->count() == 0) + actionCollection()->action("file_remove")->setEnabled(false); +} + +void KdeprintFax::slotView() +{ + if (m_files->currentItem() >= 0) + { + new KRun(KURL( m_files->currentText() )); + } +} + +void KdeprintFax::slotFax() +{ + if (m_files->count() == 0) + KMessageBox::error(this, i18n("No file to fax.")); + else if ( m_numbers->childCount() == 0 ) + KMessageBox::error(this, i18n("No fax number specified.")); + else if (m_faxctrl->send(this)) + { + actionCollection()->action("fax_send")->setEnabled(false); + actionCollection()->action("fax_stop")->setEnabled(true); + statusBar()->changeItem(i18n("Processing..."), 1); + } + else + KMessageBox::error(this, i18n("Unable to start Fax process.")); +} + +void KdeprintFax::slotAbort() +{ + if (!m_faxctrl->abort()) + KMessageBox::error(this, i18n("Unable to stop Fax process.")); +} + +void KdeprintFax::slotKab() +{ + QStringList number, name, enterprise; + if (FaxAB::getEntry(number, name, enterprise, this)) + { + for ( unsigned int i = 0; iinsertItem(KMimeType::pixmapForURL(url,0,KIcon::Small),target); + actionCollection()->action("file_remove")->setEnabled(true); + slotCurrentChanged(); + } + else + KMessageBox::error(this, i18n("Unable to retrieve %1.").arg(url.prettyURL())); +} + +void KdeprintFax::setPhone(QString phone) +{ + QString name, enterprise; + FaxAB::getEntryByNumber(phone, name, enterprise); + new QListViewItem( m_numbers, phone, name, enterprise ); +} + +void KdeprintFax::sendFax( bool quitAfterSend ) +{ + slotFax(); + m_quitAfterSend = quitAfterSend; +} + +void KdeprintFax::dragEnterEvent(QDragEnterEvent *e) +{ + e->accept(KURLDrag::canDecode(e)); +} + +void KdeprintFax::dropEvent(QDropEvent *e) +{ + KURL::List l; + if (KURLDrag::decode(e, l)) + { + for (KURL::List::ConstIterator it = l.begin(); it != l.end(); ++it) + addURL(*it); + } +} + +QStringList KdeprintFax::files() +{ + QStringList l; + for (uint i=0; icount(); i++) + l.append(m_files->text(i)); + return l; +} + + +int KdeprintFax::faxCount() const +{ + return m_numbers->childCount(); +} + +/* +QListViewItem* KdeprintFax::faxItem( int i ) const +{ + QListViewItem *item = m_numbers->firstChild(); + while ( i && item && item->nextSibling() ) + { + item = item->nextSibling(); + i--; + } + if ( i || !item ) + kdError() << "KdeprintFax::faxItem(" << i << ") => fax item index out of bound" << endl; + return item; +} + +QString KdeprintFax::number( int i ) const +{ + QListViewItem *item = faxItem( i ); + return ( item ? item->text( 0 ) : QString::null ); +} + +QString KdeprintFax::name( int i ) const +{ + QListViewItem *item = faxItem( i ); + return ( item ? item->text( 1 ) : QString::null ); +} + +QString KdeprintFax::enterprise( int i ) const +{ + QListViewItem *item = faxItem( i ); + return ( item ? item->text( 2 ) : QString::null ); +} +*/ + +KdeprintFax::FaxItemList KdeprintFax::faxList() const +{ + FaxItemList list; + QListViewItemIterator it( m_numbers ); + while ( it.current() ) + { + FaxItem item; + item.number = it.current()->text( 0 ); + item.name = it.current()->text( 1 ); + item.enterprise = it.current()->text( 2 ); + list << item; + ++it; + } + return list; +} + +QString KdeprintFax::comment() const +{ + return m_comment->text(); +} + +bool KdeprintFax::cover() const +{ + return m_cover->isChecked(); +} + +QString KdeprintFax::subject() const +{ + return m_subject->text(); +} + +void KdeprintFax::slotMessage(const QString& msg) +{ + m_msglabel->setText(msg); +} + +void KdeprintFax::slotFaxSent(bool status) +{ + actionCollection()->action("fax_send")->setEnabled(true); + actionCollection()->action("fax_stop")->setEnabled(false); + statusBar()->changeItem(i18n("Idle"), 1); + + if( m_quitAfterSend ) { + slotQuit(); + } + else { + if (!status) + KMessageBox::error(this, i18n("Fax error: see log message for more information.")); + slotMessage(QString::null); + } +} + +void KdeprintFax::slotViewLog() +{ + m_faxctrl->viewLog(this); +} + +void KdeprintFax::slotConfigure() +{ + if (ConfigDlg::configure(this)) + updateState(); +} + +void KdeprintFax::updateState() +{ + QString cmd = m_faxctrl->faxCommand(); + m_cover->setEnabled(cmd.find("%cover") != -1); + if ( !m_cover->isEnabled() ) + m_cover->setChecked(false); + m_comment->setEnabled(cmd.find("%comment") != -1 && m_cover->isChecked()); + //m_comment->setPaper(m_comment->isEnabled() ? colorGroup().brush(QColorGroup::Base) : colorGroup().brush(QColorGroup::Background)); + if (!m_comment->isEnabled()) + { + m_comment->setText(""); + m_comment->setPaper( colorGroup().background() ); + } + else + m_comment->setPaper( colorGroup().base() ); + /* + m_enterprise->setEnabled(cmd.find("%enterprise") != -1); + if (!m_enterprise->isEnabled()) + m_enterprise->setText(""); + */ + if (cmd.find("%time") == -1) + { + m_timecombo->setCurrentItem(0); + m_timecombo->setEnabled(false); + slotTimeComboActivated(0); + } + else + m_timecombo->setEnabled( true ); + /*m_name->setEnabled( cmd.find( "%name" ) != -1 );*/ + m_subject->setEnabled( cmd.find( "%subject" ) != -1 && m_cover->isChecked() ); + statusBar()->changeItem(m_faxctrl->faxSystem(), 2); +} + +void KdeprintFax::slotQuit() +{ + close(true); +} + +void KdeprintFax::slotTimeComboActivated(int ID) +{ + m_time->setEnabled(ID == 1); +} + +QString KdeprintFax::time() const +{ + if (!m_time->isEnabled()) + return QString::null; + return m_time->time().toString("hh:mm"); +} + +void KdeprintFax::slotMoveUp() +{ + int index = m_files->currentItem(); + if ( index > 0 ) + { + QListBoxItem *item = m_files->item( index ); + m_files->takeItem( item ); + m_files->insertItem( item, index-1 ); + m_files->setCurrentItem( index-1 ); + } +} + +void KdeprintFax::slotMoveDown() +{ + int index = m_files->currentItem(); + if ( index >= 0 && index < ( int )m_files->count()-1 ) + { + QListBoxItem *item = m_files->item( index ); + m_files->takeItem( item ); + m_files->insertItem( item, index+1 ); + m_files->setCurrentItem( index+1 ); + } +} + +/** The user or program toggled the "Cover Sheet" check box. + * Update the state of the other controls to reflect the + * new status. + */ +void KdeprintFax::slotCoverToggled(bool) +{ + updateState(); +} + +void KdeprintFax::slotCurrentChanged() +{ + int index = m_files->currentItem(); + m_upbtn->setEnabled( index > 0 ); + m_downbtn->setEnabled( index >=0 && index < ( int )m_files->count()-1 ); +} + +void KdeprintFax::slotFaxSelectionChanged() +{ + QListViewItemIterator it( m_numbers, QListViewItemIterator::Selected ); + m_delbtn->setEnabled( it.current() != NULL ); +} + +void KdeprintFax::slotFaxRemove() +{ + QListViewItemIterator it( m_numbers, QListViewItemIterator::Selected ); + QPtrList items; + items.setAutoDelete( true ); + while ( it.current() ) + { + items.append( it.current() ); + ++it; + } + items.clear(); + /* force this slot to be called, to update buttons state */ + slotFaxSelectionChanged(); +} + +void KdeprintFax::slotFaxAdd() +{ + QString number, name, enterprise; + if ( manualFaxDialog( number, name, enterprise ) ) + { + new QListViewItem( m_numbers, number, name, enterprise ); + } +} + +void KdeprintFax::slotFaxExecuted( QListViewItem *item ) +{ + if ( item ) + { + QString number = item->text( 0 ), name = item->text( 1 ), enterprise = item->text( 2 ); + if ( manualFaxDialog( number, name, enterprise ) ) + { + item->setText( 0, number ); + item->setText( 1, name ); + item->setText( 2, enterprise ); + } + } +} + +bool KdeprintFax::manualFaxDialog( QString& number, QString& name, QString& enterprise ) +{ + /* dialog construction */ + KDialogBase dlg( this, "manualFaxDialog", true, i18n( "Fax Number" ), KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true ); + QWidget *mainw = new QWidget( &dlg ); + QLabel *lab0 = new QLabel( i18n( "Enter recipient fax properties." ), mainw ); + QLabel *lab1 = new QLabel( i18n( "&Number:" ), mainw ); + QLabel *lab2 = new QLabel( i18n( "N&ame:" ), mainw ); + QLabel *lab3 = new QLabel( i18n( "&Enterprise:" ), mainw ); + QLineEdit *edit_number = new QLineEdit( number, mainw ); + QLineEdit *edit_name = new QLineEdit( name, mainw ); + QLineEdit *edit_enterprise = new QLineEdit( enterprise, mainw ); + lab1->setBuddy( edit_number ); + lab2->setBuddy( edit_name ); + lab3->setBuddy( edit_enterprise ); + QGridLayout *l0 = new QGridLayout( mainw, 5, 2, 0, 5 ); + l0->setColStretch( 1, 1 ); + l0->addMultiCellWidget( lab0, 0, 0, 0, 1 ); + l0->setRowSpacing( 1, 10 ); + l0->addWidget( lab1, 2, 0 ); + l0->addWidget( lab2, 3, 0 ); + l0->addWidget( lab3, 4, 0 ); + l0->addWidget( edit_number, 2, 1 ); + l0->addWidget( edit_name, 3, 1 ); + l0->addWidget( edit_enterprise, 4, 1 ); + dlg.setMainWidget( mainw ); + dlg.resize( 300, 10 ); + + /* dialog execution */ + while ( 1 ) + if ( dlg.exec() ) + { + if ( edit_number->text().isEmpty() ) + { + KMessageBox::error( this, i18n( "Invalid fax number." ) ); + } + else + { + number = edit_number->text(); + name = edit_name->text(); + enterprise = edit_enterprise->text(); + return true; + } + } + else + return false; +} + +#include "kdeprintfax.moc" diff --git a/kdeprint/kdeprintfax/kdeprintfax.desktop b/kdeprint/kdeprintfax/kdeprintfax.desktop new file mode 100644 index 000000000..a33f9292f --- /dev/null +++ b/kdeprint/kdeprintfax/kdeprintfax.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=KdeprintFax +Name[cy]=KdeargraffuFfacs +Name[eo]=Presfakso +Name[hi]=केडीई-प्रिंट-फ़ैक्स +Name[lo]=ອິນເຕີເນັດ +Name[ne]=Kdeprint फ्याक्स +Name[nso]=Fax ya kgatiso ya kde +Name[pa]=Kde ਫੈਕਸ ਛਾਪਣ +Name[rw]=Kde-gucapaFagisi +Name[sv]=KDE:s skriv ut fax +Name[ta]=Kdeஅச்சுபாக்ஸ் +Name[th]=KDEprintFax +Name[vi]=In và Fax của KDE +GenericName=Fax Utility +GenericName[af]=Faks Program +GenericName[ar]=أداة الفاكس +GenericName[be]=Праграма працы з факсам +GenericName[bg]=Програма за факс +GenericName[bn]=ফ্যাক্স টুল +GenericName[br]=Maveg ar faks +GenericName[bs]=Alat za faxove +GenericName[ca]=Utilitat de fax +GenericName[cs]=Faxový nástroj +GenericName[csb]=Faks +GenericName[cy]=Cyfleuster Ffacs +GenericName[da]=FAX-værktøj +GenericName[de]=Fax-Programm +GenericName[el]=Εργαλείο φαξ +GenericName[eo]=Faxutilaĵo +GenericName[es]=Aplicación de fax +GenericName[et]=Faksimise utiliit +GenericName[eu]=Fax tresna +GenericName[fa]=برنامۀ سودمند دورنگار +GenericName[fi]=Faksityökalu +GenericName[fr]=Outil de fax +GenericName[fy]=Faksprogramma +GenericName[ga]=Uirlis Facs +GenericName[gl]=Utilidade de Fax +GenericName[he]=כלי פקסים +GenericName[hi]=फ़ैक्स यूटिलिटी +GenericName[hr]=Alat za fakseve +GenericName[hu]=Faxprogram +GenericName[is]=Faxtól +GenericName[it]=Fax +GenericName[ja]=ファクスユーティリティ +GenericName[ka]=ფაქსთან სამუშაო უტილიტა +GenericName[kk]=Факс утилитасы +GenericName[km]=ឧបករណ៍​ទូរសារ +GenericName[lo]=ເຄື່ອງມືໂທລະສານ +GenericName[lt]=Pagalbinė fakso programėlė +GenericName[lv]=Faksa utilīta +GenericName[mk]=Алатка за факс +GenericName[mn]=Fax-програм +GenericName[ms]=Kemudahan Faks +GenericName[mt]=Għodda tal-faks +GenericName[nb]=Faksverktøy +GenericName[nds]=Faxwarktüüch +GenericName[ne]=फ्याक्स युटिलिटी +GenericName[nl]=Faxprogramma +GenericName[nn]=Faksverktøy +GenericName[nso]=Sebereka sa Fax +GenericName[pa]=ਫੈਕਸ ਸਹੂਲਤ +GenericName[pl]=Faks +GenericName[pt]=Utilitário de Fax +GenericName[pt_BR]=Utilitário de Fax +GenericName[ro]=Utilitar pentru FAX +GenericName[ru]=Утилита работы с факсами +GenericName[rw]=Nkemurabibazo Fagisi +GenericName[se]=Fáksenreaidu +GenericName[sk]=Faxový nástroj +GenericName[sl]=Pripomoček za faks +GenericName[sr]=Факс програм +GenericName[sr@Latn]=Faks program +GenericName[sv]=Faxverktyg +GenericName[ta]=தொலைநகலி கருவி +GenericName[tg]=Обзори дурнамо +GenericName[th]=เครื่องมือโทรสาร +GenericName[tr]=Faks Görüntüleyici +GenericName[tt]=Faks Qoralı +GenericName[uk]=Утиліта факсу +GenericName[uz]=Faks vositasi +GenericName[uz@cyrillic]=Факс воситаси +GenericName[ven]=Tshishumiswa tsha Fax +GenericName[vi]=Các tiện ích Fax +GenericName[wa]=Usteye di facs +GenericName[xh]=Uncedo lwe Fax +GenericName[zh_CN]=传真工具 +GenericName[zh_TW]=傳真工具 +GenericName[zu]=Isisebenzi se-Fax + +Type=Application +Exec=kdeprintfax -caption "%c" %i %m %u +Icon=kdeprintfax +Terminal=false +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;Utility;X-KDE-Utilities-Peripherals; diff --git a/kdeprint/kdeprintfax/kdeprintfax.h b/kdeprint/kdeprintfax/kdeprintfax.h new file mode 100644 index 000000000..795521e82 --- /dev/null +++ b/kdeprint/kdeprintfax/kdeprintfax.h @@ -0,0 +1,115 @@ +/* + * kdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef KDEPRINTFAX_H +#define KDEPRINTFAX_H + +#include +#include + +class KListBox; +class KListView; +class QLineEdit; +class QTextEdit; +class FaxCtrl; +class QCheckBox; +class QLabel; +class QTimeEdit; +class QComboBox; +class QPushButton; +class QListViewItem; + +class KdeprintFax : public KMainWindow +{ + Q_OBJECT +public: + struct FaxItem + { + QString number; + QString name; + QString enterprise; + }; + typedef QValueList FaxItemList; + typedef QValueList::ConstIterator FaxItemListIterator; + + KdeprintFax(QWidget *parent = 0, const char *name = 0); + ~KdeprintFax(); + + void addURL(KURL url); + void setPhone(QString phone); + void sendFax( bool quitAfterSend ); + QStringList files(); + int faxCount() const; + //QString number( int i = 0 ) const; + //QString name( int i = 0 ) const; + //QString enterprise( int i = 0 ) const; + FaxItemList faxList() const; + QString comment() const; + QString time() const; + QString subject() const; + bool cover() const; + +protected slots: + void slotToggleMenuBar(); + void slotKab(); + void slotAdd(); + void slotRemove(); + void slotFax(); + void slotAbort(); + void slotMessage(const QString&); + void slotFaxSent(bool); + void slotViewLog(); + void slotConfigure(); + void slotQuit(); + void slotView(); + void slotTimeComboActivated(int); + void slotMoveUp(); + void slotMoveDown(); + void slotCurrentChanged(); + void slotFaxSelectionChanged(); + void slotFaxRemove(); + void slotFaxAdd(); + void slotFaxExecuted( QListViewItem* ); + void slotCoverToggled(bool toggle); + +protected: + void initActions(); + void dragEnterEvent(QDragEnterEvent*); + void dropEvent(QDropEvent*); + void updateState(); + bool manualFaxDialog( QString& number, QString& name, QString& enterprise ); + //QListViewItem* faxItem( int i = 0 ) const; + +private: + KListBox *m_files; + KListView *m_numbers; + QLineEdit *m_subject; + QTextEdit *m_comment; + FaxCtrl *m_faxctrl; + QCheckBox *m_cover; + QLabel *m_msglabel; + QTimeEdit *m_time; + QComboBox *m_timecombo; + QPushButton *m_upbtn, *m_downbtn; + QPushButton *m_newbtn, *m_abbtn, *m_delbtn; + bool m_quitAfterSend; +}; + +#endif diff --git a/kdeprint/kdeprintfax/kdeprintfaxui.rc b/kdeprint/kdeprintfax/kdeprintfaxui.rc new file mode 100644 index 000000000..09c2be6f2 --- /dev/null +++ b/kdeprint/kdeprintfax/kdeprintfaxui.rc @@ -0,0 +1,31 @@ + + + + &File + + + + + + Fa&x + + + + + + + + + + + + + + + + + + + + + diff --git a/kdeprint/kdeprintfax/main.cpp b/kdeprint/kdeprintfax/main.cpp new file mode 100644 index 000000000..a4dd3030f --- /dev/null +++ b/kdeprint/kdeprintfax/main.cpp @@ -0,0 +1,78 @@ +/* + * kdeprintfax - a interface to fax-packages + * Copyright (C) 2001 Michael Goffioul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "kdeprintfax.h" + +#include +#include +#include +#include +#include + +QString debugFlag; +int oneShotFlag = false; + +static const char description[] = + I18N_NOOP("A small fax utility to be used with kdeprint."); +// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE + + +static KCmdLineOptions options[] = +{ + { "phone ", I18N_NOOP("Phone number to fax to"), 0 }, + { "immediate", I18N_NOOP("Send fax immediately"), 0 }, + { "batch", I18N_NOOP("Exit after sending"), 0 }, + { "+[file]", I18N_NOOP("File to fax (added to the file list)"), 0 }, + KCmdLineLastOption + // INSERT YOUR COMMANDLINE OPTIONS HERE +}; + +int main(int argc, char *argv[]) +{ + + KAboutData aboutData( "kdeprintfax", I18N_NOOP("KdeprintFax"), + "1.0", description, KAboutData::License_GPL, + "(c), 2001 Michael Goffioul", 0, "http://printing.kde.org"); + aboutData.addAuthor("Michael Goffioul",0, "kdeprint@swing.be"); + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + KApplication::addCmdLineOptions(); + + KApplication a; + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + KdeprintFax *w = new KdeprintFax; + a.setMainWidget(w); + w->show(); + for (int i=0;icount();i++) + w->addURL(args->url(i)); + + QString phone = args->getOption( "phone" ); + if( !phone.isEmpty() ) { + w->setPhone( phone ); + } + + if( args->isSet( "immediate" ) ) { + w->sendFax( args->isSet( "batch" ) ); + } + + args->clear(); + return a.exec(); +} diff --git a/kdeprint/kjobviewer/Makefile.am b/kdeprint/kjobviewer/Makefile.am new file mode 100644 index 000000000..56be89334 --- /dev/null +++ b/kdeprint/kjobviewer/Makefile.am @@ -0,0 +1,24 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +INCLUDES = $(all_includes) + +bin_PROGRAMS= +lib_LTLIBRARIES= +kdeinit_LTLIBRARIES = kjobviewer.la + +kjobviewer_la_SOURCES = kjobviewer.cpp main.cpp +kjobviewer_la_METASOURCES = AUTO +kjobviewer_la_LIBADD = -lkdeprint_management $(LIB_KDEUI) +kjobviewer_la_LDFLAGS = -module -avoid-version $(all_libraries) $(KDE_RPATH) + +noinst_HEADERS = kjobviewer.h + +KDE_ICON = kjobviewer + +rc_DATA = kjobviewerui.rc +rcdir = $(kde_datadir)/kjobviewer + +xdg_apps_DATA = kjobviewer.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kjobviewer.pot diff --git a/kdeprint/kjobviewer/hi128-app-kjobviewer.png b/kdeprint/kjobviewer/hi128-app-kjobviewer.png new file mode 100644 index 000000000..7db5f56b1 Binary files /dev/null and b/kdeprint/kjobviewer/hi128-app-kjobviewer.png differ diff --git a/kdeprint/kjobviewer/hi16-app-kjobviewer.png b/kdeprint/kjobviewer/hi16-app-kjobviewer.png new file mode 100644 index 000000000..d6defce21 Binary files /dev/null and b/kdeprint/kjobviewer/hi16-app-kjobviewer.png differ diff --git a/kdeprint/kjobviewer/hi22-app-kjobviewer.png b/kdeprint/kjobviewer/hi22-app-kjobviewer.png new file mode 100644 index 000000000..a71ee2817 Binary files /dev/null and b/kdeprint/kjobviewer/hi22-app-kjobviewer.png differ diff --git a/kdeprint/kjobviewer/hi32-app-kjobviewer.png b/kdeprint/kjobviewer/hi32-app-kjobviewer.png new file mode 100644 index 000000000..d554b554f Binary files /dev/null and b/kdeprint/kjobviewer/hi32-app-kjobviewer.png differ diff --git a/kdeprint/kjobviewer/hi48-app-kjobviewer.png b/kdeprint/kjobviewer/hi48-app-kjobviewer.png new file mode 100644 index 000000000..13adbd006 Binary files /dev/null and b/kdeprint/kjobviewer/hi48-app-kjobviewer.png differ diff --git a/kdeprint/kjobviewer/hi64-app-kjobviewer.png b/kdeprint/kjobviewer/hi64-app-kjobviewer.png new file mode 100644 index 000000000..5d22d215e Binary files /dev/null and b/kdeprint/kjobviewer/hi64-app-kjobviewer.png differ diff --git a/kdeprint/kjobviewer/hisc-app-kjobviewer.svgz b/kdeprint/kjobviewer/hisc-app-kjobviewer.svgz new file mode 100644 index 000000000..f40b4bdfa Binary files /dev/null and b/kdeprint/kjobviewer/hisc-app-kjobviewer.svgz differ diff --git a/kdeprint/kjobviewer/kjobviewer.cpp b/kdeprint/kjobviewer/kjobviewer.cpp new file mode 100644 index 000000000..12a7aef1a --- /dev/null +++ b/kdeprint/kjobviewer/kjobviewer.cpp @@ -0,0 +1,233 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "kjobviewer.h" +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class JobTray : public KSystemTray +{ +public: + JobTray(KJobViewerApp *parent, const char *name = 0) + : KSystemTray(0, name), m_app(parent) { connect( this, SIGNAL( quitSelected() ), kapp, SLOT( quit() ) ); } +protected: + void mousePressEvent(QMouseEvent*); +private: + KJobViewerApp *m_app; +}; + +void JobTray::mousePressEvent(QMouseEvent *e) +{ + if (e->button() == Qt::RightButton) + KSystemTray::mousePressEvent(e); + else if (m_app->m_views.count() > 0) + { + KPopupMenu menu; + QDictIterator it(m_app->m_views); + QPtrList list; + list.setAutoDelete(false); + for (; it.current(); ++it) + { + menu.insertItem(KWin::icon(it.current()->winId(), 16, 16), it.currentKey(), list.count()); + if (it.current()->isVisible()) + menu.setItemChecked(list.count(), true); + list.append(it.current()); + } + + if (list.count() == 1) + { + // special case, old behavior + if (list.first()->isVisible()) + list.first()->hide(); + else + list.first()->show(); + } + else + { + int choice = menu.exec(mapToGlobal(e->pos())); + if (choice != -1) + { + KMJobViewer *view = list.at(choice); + if (view->isVisible()) + KWin::activateWindow(view->winId()); + else + view->show(); + } + } + } +} + +//------------------------------------------------------------- + +KJobViewerApp::KJobViewerApp() : KUniqueApplication() +{ + m_views.setAutoDelete(true); + m_tray = 0; + m_timer = 0; +} + +KJobViewerApp::~KJobViewerApp() +{ +} + +int KJobViewerApp::newInstance() +{ + initialize(); + return 0; +} + +void KJobViewerApp::initialize() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + bool showIt = args->isSet("show"); + bool all = args->isSet("all"); + QString prname = args->getOption("d"); + KMJobViewer *view(0); + + if (!m_timer) + { + m_timer = KMTimer::self(); + connect(m_timer,SIGNAL(timeout()),SLOT(slotTimer())); + } + + if (prname.isEmpty() && all) + prname = i18n("All Printers"); + + if (prname.isEmpty()) { + KMPrinter *prt = KMManager::self()->defaultPrinter(); + if (prt) + prname = prt->printerName(); + else { + KMessageBox::error(0, i18n("There is no default printer. Start with --all to see all printers."), i18n("Print Error")); + exit(1); + return; + } + } + + if (!m_tray) + { + m_tray = new JobTray(this); + m_tray->setPixmap(m_tray->loadIcon("fileprint")); + + } + + view = m_views.find(prname); + if (!view) + { + kdDebug() << "creating new view: " << prname << endl; + view = new KMJobViewer(); + connect(view, SIGNAL(jobsShown(KMJobViewer*,bool)), SLOT(slotJobsShown(KMJobViewer*,bool))); + connect(view, SIGNAL(printerChanged(KMJobViewer*,const QString&)), SLOT(slotPrinterChanged(KMJobViewer*,const QString&))); + connect(view, SIGNAL(refreshClicked()), SLOT(slotTimer())); + connect(view, SIGNAL(viewerDestroyed(KMJobViewer*)), SLOT(slotViewerDestroyed(KMJobViewer*))); + m_views.insert(prname, view); + } + + if (showIt) + { + view->show(); + m_tray->show(); + } + view->setPrinter(prname); + + //m_timer->release(true); + m_timer->delay(10); +} + +void KJobViewerApp::slotJobsShown(KMJobViewer *view, bool hasJobs) +{ + if (!hasJobs && !view->isVisible() && !view->isSticky()) + { + kdDebug() << "removing view: " << view->printer() << endl; + // the window is hidden and doesn't have any job shown -> destroy it + // closing won't have any effect as the KMJobViewer overload closeEvent() + m_views.remove(view->printer()); + } + + if (m_views.count() > 0) + { + if (!m_tray->isVisible()) + m_tray->show(); + } + else { + KStartupInfo::appStarted(); + kapp->quit(); + } +} + +void KJobViewerApp::slotTimer() +{ + // Update printer list + KMManager::self()->printerList(true); + + // Refresh views. The first time, job list is reloaded, + // other views will simply use reloaded job list + bool trigger(true); + QDictIterator it(m_views); + for (; it.current(); ++it, trigger=false) + it.current()->refresh(trigger); +} + +void KJobViewerApp::slotPrinterChanged(KMJobViewer *view, const QString& prname) +{ + KMJobViewer *other = m_views.find(prname); + if (other) + { + if (other->isVisible()) + KWin::activateWindow(other->winId()); + else + other->show(); + } + else + { + m_views.take(view->printer()); + m_views.insert(prname, view); + view->setPrinter(prname); + } +} + +void KJobViewerApp::reload() +{ + // trigger delayed refresh in all views + m_timer->delay(10); +} + +void KJobViewerApp::slotViewerDestroyed(KMJobViewer *view) +{ + if (view) + m_views.take(view->printer()); + if (m_views.count() == 0) + kapp->quit(); +} + +#include "kjobviewer.moc" diff --git a/kdeprint/kjobviewer/kjobviewer.desktop b/kdeprint/kjobviewer/kjobviewer.desktop new file mode 100644 index 000000000..965ed49bf --- /dev/null +++ b/kdeprint/kjobviewer/kjobviewer.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Exec=kjobviewer --all --show %i %m +Icon=kjobviewer +Terminal=false +Type=Application +X-KDE-StartupNotify=true + +Name=KJobViewer +Name[bn]=কে-জব-ভিউয়ার +Name[csb]=Przezérnik pòlétów drëkera +Name[cy]=KGwelyddSwyddi +Name[ja]=K ジョブビューア +Name[nds]=Opgavenkieker +Name[ne]=KJob दर्शक +Name[pl]=Przeglądarka zadań drukowania +Name[pt_BR]=Trabalhos de Impressão +Name[ro]=Vizualizor lucrări de tipărit +Name[rw]=K-IkigaragazaUmurimo +Name[sk]=Prehliadač úloh +Name[sv]=K-jobbvisare +Name[ta]=கேபணி காட்சியாளன் +Name[tg]=Намоишгари корҳо +Name[vi]=Trình theo dõi Tác vụ In ấn +GenericName=Print Jobs +GenericName[af]=Drukker Werke +GenericName[be]=Заданні друку +GenericName[bg]=Задания за печат +GenericName[bn]=মুদ্রণ তালিকা +GenericName[bs]=Zadaci štampe +GenericName[ca]=Treballs d'impressió +GenericName[cs]=Tiskové úlohy +GenericName[csb]=Pòlétë drëkera +GenericName[cy]=Swyddi Argraffu +GenericName[da]=Udskriv job +GenericName[de]=Druckaufträge +GenericName[el]=Εργασίες εκτύπωσης +GenericName[eo]=Printtaskoj +GenericName[es]=Trabajos de impresión +GenericName[et]=Printeri tööd +GenericName[eu]=Inprimaketa lanak +GenericName[fa]=چاپ کارها +GenericName[fi]=Tulostustyöt +GenericName[fr]=Tâches d'impressions +GenericName[fy]=printtaken +GenericName[ga]=Jabanna Priontála +GenericName[gl]=Traballos de Impresión +GenericName[he]=עבודות הדפסה +GenericName[hr]=Zadaci ispisivanja +GenericName[hu]=Nyomtatási feladatok +GenericName[is]=Prentverk +GenericName[it]=Lavori di stampa +GenericName[ja]=印刷ジョブ +GenericName[ka]=ბეჭდვის დავალება +GenericName[kk]=Басып шығару тапсырмалары +GenericName[km]=ការងារ​បោះពុម្ព +GenericName[lt]=Spausdinimo užduotys +GenericName[mk]=Задачи за печатење +GenericName[ms]=Cetak Kerja +GenericName[nb]=Utskriftsjobber +GenericName[nds]=Druckopgaven +GenericName[ne]=मुद्रण कार्य +GenericName[nl]=Afdruktaken +GenericName[nn]=Utskriftsjobbar +GenericName[pa]=ਛਪਾਈ ਕੰਮ +GenericName[pl]=Zadania drukowania +GenericName[pt]=Tarefas de Impressão +GenericName[pt_BR]=Tarefas de Impressão +GenericName[ro]=Lucrări de tipărit +GenericName[ru]=Задания печати +GenericName[rw]=Gucapa Imirimo +GenericName[se]=Čálihanbarggut +GenericName[sk]=Tlačové úlohy +GenericName[sl]=Tiskalniška opravila +GenericName[sr]=Послови штампе +GenericName[sr@Latn]=Poslovi štampe +GenericName[sv]=Skrivarjobb +GenericName[ta]=அச்சுப் பணிகள் +GenericName[te]=ప్రచురణ పనులు +GenericName[tg]=Корҳои чопгар +GenericName[th]=งานพิมพ์ +GenericName[tr]=Yazdırma Görevleri +GenericName[tt]=Bastıru Eşläre +GenericName[uk]=Задачі друку +GenericName[uz]=Bosib chiqarish vazifalari +GenericName[uz@cyrillic]=Босиб чиқариш вазифалари +GenericName[vi]=Tác vụ In ấn +GenericName[wa]=Bouyes d' imprimaedje +GenericName[zh_CN]=打印任务 +GenericName[zh_TW]=列印工作 + +X-DCOP-ServiceType=Unique +Categories=Qt;KDE;Utility;X-KDE-Utilities-Peripherals; diff --git a/kdeprint/kjobviewer/kjobviewer.h b/kdeprint/kjobviewer/kjobviewer.h new file mode 100644 index 000000000..389f160a4 --- /dev/null +++ b/kdeprint/kjobviewer/kjobviewer.h @@ -0,0 +1,57 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 KJOBVIEWER_H +#define KJOBVIEWER_H + +#include +#include +#include + +class KMJobViewer; +class KMTimer; +class JobTray; + +class KJobViewerApp : public KUniqueApplication, public KPReloadObject +{ + Q_OBJECT + friend class JobTray; +public: + KJobViewerApp(); + virtual ~KJobViewerApp(); + + virtual int newInstance(); + +protected: + void initialize(); + void reload(); + +protected slots: + void slotJobsShown(KMJobViewer*, bool); + void slotTimer(); + void slotPrinterChanged(KMJobViewer*, const QString&); + void slotViewerDestroyed(KMJobViewer*); + +private: + QDict m_views; + JobTray *m_tray; + KMTimer *m_timer; +}; + +#endif diff --git a/kdeprint/kjobviewer/kjobviewerui.rc b/kdeprint/kjobviewer/kjobviewerui.rc new file mode 100644 index 000000000..83592dfc6 --- /dev/null +++ b/kdeprint/kjobviewer/kjobviewerui.rc @@ -0,0 +1,35 @@ + + + + &Jobs + + + + + + + + + F&ilter + + + + + + + + + + + + + + + + + + + + + + diff --git a/kdeprint/kjobviewer/main.cpp b/kdeprint/kjobviewer/main.cpp new file mode 100644 index 000000000..47176d743 --- /dev/null +++ b/kdeprint/kjobviewer/main.cpp @@ -0,0 +1,49 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 +#include +#include + +#include "kjobviewer.h" +#include +#include + +static KCmdLineOptions options[] = { + { "d ", I18N_NOOP("The printer for which jobs are requested"), 0 }, + { "noshow", I18N_NOOP("Show job viewer at startup"), 0}, + { "all", I18N_NOOP("Show jobs for all printers"), 0}, + KCmdLineLastOption +}; + + +extern "C" int KDE_EXPORT kdemain(int argc, char *argv[]) +{ + KAboutData aboutData("kjobviewer",I18N_NOOP("KJobViewer"),"0.1",I18N_NOOP("A print job viewer"),KAboutData::License_GPL,"(c) 2001, Michael Goffioul", 0, "http://printing.kde.org"); + aboutData.addAuthor("Michael Goffioul",0,"kdeprint@swing.be"); + KCmdLineArgs::init(argc,argv,&aboutData); + KCmdLineArgs::addCmdLineOptions(options); + KJobViewerApp::addCmdLineOptions(); + + if (!KJobViewerApp::start()) + exit(0); + + KJobViewerApp a; + return a.exec(); +} diff --git a/kdeprint/kprinter/Makefile.am b/kdeprint/kprinter/Makefile.am new file mode 100644 index 000000000..83c78cb91 --- /dev/null +++ b/kdeprint/kprinter/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +INCLUDES = $(all_includes) + +bin_PROGRAMS = +lib_LTLIBRARIES = +kdeinit_LTLIBRARIES = kprinter.la + +kprinter_la_SOURCES = main.cpp printwrapper.cpp +kprinter_la_LIBADD = -lkdeprint +kprinter_la_LDFLAGS = -module -avoid-version $(all_libraries) $(KDE_RPATH) +kprinter_la_METASOURCES = AUTO + +noinst_HEADERS = printwrapper.h + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kprinter.pot + diff --git a/kdeprint/kprinter/configure.in.in b/kdeprint/kprinter/configure.in.in new file mode 100644 index 000000000..dd0767216 --- /dev/null +++ b/kdeprint/kprinter/configure.in.in @@ -0,0 +1 @@ +AC_CHECK_FUNCS(sigset sigaction) diff --git a/kdeprint/kprinter/kprinter.desktop b/kdeprint/kprinter/kprinter.desktop new file mode 100644 index 000000000..cd4a823e5 --- /dev/null +++ b/kdeprint/kprinter/kprinter.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +Exec=kprinter +Icon=kjobviewer +Terminal=false +Type=Application +DocPath=kdeprint/index.html +X-KDE-StartupNotify=true +Name=KPrinter +Name[af]=KDrukker +Name[cy]=KArgraffydd +Name[eo]=KPrintilo +Name[fy]=Kprinter +Name[hi]=केप्रिंटर +Name[ka]=პრინტერი +Name[lo]=ເຄື່ອງພິມ - K +Name[ne]=K मुद्रक +Name[nl]=Kprinter +Name[nso]=KSegatisi +Name[pa]=ਕੇ-ਪਰਿੰਟਰ +Name[ru]=Принтер +Name[rw]=K-Mucapyi +Name[sv]=Kskrivare +Name[ta]=Kஅச்சியந்திரம் +Name[te]=కెప్రింటర్ +Name[tg]=KЧопгар +Name[th]=เครื่องพิมพ์ K +Name[tr]=KYazıcı +Name[ven]=Phirinthara ya K +Name[vi]=In ấn KDE +Name[wa]=KScrirece (KPrinter) +GenericName=Printing Tool +GenericName[af]=Drukker Program +GenericName[ar]=أداة الطباعة +GenericName[be]=Інструмент друку +GenericName[bg]=Инструмент за печат +GenericName[bn]=মুদ্রণ টুল +GenericName[br]=Ostilh moulañ +GenericName[bs]=Alat za štampu +GenericName[ca]=Eina per a imprimir +GenericName[cs]=Tiskový nástroj +GenericName[csb]=Nôrzãdze do sprôwianiô wëdrëkama +GenericName[cy]=Erfyn Argraffu +GenericName[da]=Udskriftsværktøj +GenericName[de]=Druckprogramm +GenericName[el]=Εργαλείο εκτύπωσης +GenericName[eo]=Ilo por printado +GenericName[es]=Herramienta de impresión +GenericName[et]=Trükkimise rakendus +GenericName[eu]=Imprimatzeko tresna +GenericName[fa]=ابزار چاپ +GenericName[fi]=Tulostustyökalu +GenericName[fr]=Outil d'impression +GenericName[fy]=printprogramma +GenericName[ga]=Uirlis Priontála +GenericName[gl]=Ferramenta de Impresión +GenericName[he]=כלי הדפסה +GenericName[hi]=प्रिंटर औज़ार +GenericName[hr]=Alata za ispisivanje +GenericName[hu]=Nyomtatáskezelő +GenericName[is]=Prentunartól +GenericName[it]=Strumento di stampa +GenericName[ja]=印刷ツール +GenericName[ka]=საბეჭდი უტილიტა +GenericName[kk]=Басып шығару құралы +GenericName[km]=ឧបករណ៍​បោះពុម្ព +GenericName[lo]=ເຄື່ອງມືລະບົບການພິມ์ +GenericName[lt]=Spausdinimo priemonė +GenericName[lv]=Drukāšanas Rīks +GenericName[mk]=Печатарска алатка +GenericName[mn]=Хэвлэх програм +GenericName[ms]=Alat Pencetakan +GenericName[mt]=Għodda tal-ipprintjar +GenericName[nb]=Verktøy for skriverbehandling +GenericName[nds]=Druckwarktüüch +GenericName[ne]=मुद्रण उपकरण +GenericName[nl]=Afdrukprogramma +GenericName[nn]=Utskriftsverktøy +GenericName[nso]=Sebereka sa Kgatiso +GenericName[pa]=ਛਪਾਈ (ਪਰਿੰਟਿੰਗ) ਸੰਦ +GenericName[pl]=Narzędzie do zarządzania wydrukiem +GenericName[pt]=Ferramenta de Impressão +GenericName[pt_BR]=Ferramenta de Impressão +GenericName[ro]=Utilitar de tipărire +GenericName[ru]=Утилита печати +GenericName[rw]=Igikoresho cyo Gucapa +GenericName[se]=Čálihanreaidu +GenericName[sk]=Tlačový nástroj +GenericName[sl]=Orodje za tiskanje +GenericName[sr]=Алат за штампу +GenericName[sr@Latn]=Alat za štampu +GenericName[sv]=Skrivarverktyg +GenericName[ta]=அச்சசியந்திர கருவி +GenericName[tg]=Обзори Чоп +GenericName[th]=เครื่องมือระบบการพิมพ์ +GenericName[tr]=Yazdırma Aracı +GenericName[tt]=Bastıru Qoralı +GenericName[uk]=Засіб друку +GenericName[uz]=Bosib chiqarish vositasi +GenericName[uz@cyrillic]=Босиб чиқариш воситаси +GenericName[ven]=Tshishumiswa tshau phirintha +GenericName[vi]=Công cụ In ấn +GenericName[wa]=Usteye d' imprimaedje +GenericName[xh]=Isixhobo Sokushicilela +GenericName[zh_CN]=打印工具 +GenericName[zh_TW]=列印工具 +GenericName[zu]=Ithuluzi Lokushicelela + diff --git a/kdeprint/kprinter/main.cpp b/kdeprint/kprinter/main.cpp new file mode 100644 index 000000000..1d88ace83 --- /dev/null +++ b/kdeprint/kprinter/main.cpp @@ -0,0 +1,58 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "printwrapper.h" + +#include +#include +#include +#include + +static KCmdLineOptions options[] = +{ + { "c", I18N_NOOP("Make an internal copy of the files to print"), 0}, + { "P", 0, 0 }, + { "d ", I18N_NOOP("Printer/destination to print on"), 0}, + { "J", 0, 0 }, + { "t ", I18N_NOOP("Title/Name for the print job" ), 0}, + { "#", 0, 0 }, + { "n <number>", I18N_NOOP("Number of copies"), 0 }, + { "o <option=value>", I18N_NOOP("Printer option" ), 0}, + { "j <mode>", I18N_NOOP("Job output mode (gui, console, none)" ), "gui"}, + { "system <printsys>",I18N_NOOP("Print system to use (lpd, cups)" ), 0}, + { "stdin", I18N_NOOP("Allow printing from STDIN" ), 0}, + { "nodialog", I18N_NOOP("Do not show the print dialog (print directly)"), 0}, + { "+file(s)", I18N_NOOP("Files to load" ), 0}, + KCmdLineLastOption +}; + +extern "C" int KDE_EXPORT kdemain(int argc, char *argv[]) +{ + KCmdLineArgs::init(argc,argv,"kprinter",I18N_NOOP("KPrinter"),I18N_NOOP("A printer tool for KDE" ),"0.0.1"); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + PrintWrapper *wrap = new PrintWrapper; + app.setMainWidget(wrap); + QTimer::singleShot(10,wrap,SLOT(slotPrint())); + + int result = app.exec(); + delete wrap; + + return result; +} diff --git a/kdeprint/kprinter/printwrapper.cpp b/kdeprint/kprinter/printwrapper.cpp new file mode 100644 index 000000000..a9f566c72 --- /dev/null +++ b/kdeprint/kprinter/printwrapper.cpp @@ -0,0 +1,403 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "printwrapper.h" + +#include <unistd.h> +#include <signal.h> +#include <sys/time.h> + +#include <qstring.h> +#include <qstringlist.h> +#include <stdlib.h> +#include <kmessagebox.h> +#include <qfile.h> +#include <qtimer.h> +#include <qregexp.h> +#include <qsocketnotifier.h> + +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <klocale.h> +#include <kstandarddirs.h> +#include <kio/netaccess.h> +#include <kurl.h> +#include <kdebug.h> +#include <ktempfile.h> + +#include <kprinter.h> +#include <kdeprint/kmmanager.h> +#include <kdeprint/kmprinter.h> +#include <kdeprint/kprintdialog.h> + +void signal_handler(int); +QString tempFile; +bool fromStdin = false; +char job_output = 0; // 0: dialog, 1: console, 2: none +char readchar = '\0'; +bool dataread = false; +bool docopy = false; + +void showmsgdialog(const QString& msg, int type = 0) +{ + switch (type) + { + case 0: KMessageBox::information(NULL,msg,i18n("Print Information")); break; + case 1: KMessageBox::sorry(NULL,msg,i18n("Print Warning")); break; + case 2: KMessageBox::error(NULL,msg,i18n("Print Error")); break; + } +} + +void showmsgconsole(const QString& msg, int type = 0) +{ + QString errmsg = QString::fromLatin1("%1 : ").arg((type == 0 ? i18n("Print info") : (type == 1 ? i18n("Print warning") : i18n("Print error")))); + kdDebug() << errmsg << msg << endl; +} + +void showmsg(const QString& msg, int type = 0) +{ + switch (job_output) { + case 0: showmsgdialog(msg,type); break; + case 1: showmsgconsole(msg,type); break; + default: break; + } +} + +void errormsg(const QString& msg) +{ + showmsg(msg,2); + exit(1); +} + +void signal_handler(int s) +{ + QFile::remove(tempFile); + exit(s); +} + +QString copyfile( const QString& filename ) +{ + kdDebug( 500 ) << "Copying file " << filename << endl; + QString result; + QFile f( filename ); + if ( f.open( IO_ReadOnly ) ) + { + KTempFile temp; + temp.setAutoDelete( false ); + QFile *tf = temp.file(); + if ( tf ) + { + char buffer[ 0xFFFF ]; + int b = 0; + while ( ( b = f.readBlock( buffer, 0xFFFF ) ) > 0 ) + { + if ( tf->writeBlock( buffer, b ) != b ) + break; + } + tf->close(); + if ( b > 0 ) + temp.setAutoDelete( true ); + else + { + kdDebug( 500 ) << "File copied to " << temp.name() << endl; + result = temp.name(); + } + } + else + temp.setAutoDelete( true ); + f.close(); + } + return result; +} + +//****************************************************************************************************** + +PrintWrapper::PrintWrapper() +: QWidget(), force_stdin(false), check_stdin(true) +{ +} + +void PrintWrapper::slotPrint() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + +#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) + struct sigaction action; +#endif /* HAVE_SIGACTION && !HAVE_SIGSET*/ + + // read variables from command line + QString printer = args->getOption("d"); + QString title = args->getOption("t"); + int ncopies = QString(args->getOption("n")).toInt(); + QString job_mode = args->getOption("j"); + QString system = args->getOption("system"); + QCStringList optlist = args->getOptionList("o"); + QMap<QString,QString> opts; + KURL::List files; + QStringList filestoprint; + force_stdin = args->isSet("stdin"); + docopy = args->isSet( "c" ); + bool nodialog = !(args->isSet("dialog")); + + if( isatty( 0 )) + { + kdDebug( 500 ) << "stdin is a terminal, disabling it" << endl; + check_stdin = false; + } + + // parse options + for (QCStringList::ConstIterator it=optlist.begin(); it!=optlist.end(); ++it) + { + QStringList l = QStringList::split('=',QString(*it),false); + if (l.count() >= 1) opts[l[0]] = (l.count() == 2 ? l[1] : QString::null); + } + + // read file list + for (int i=0; i<args->count(); i++) + files.append(args->url(i)); + + // some clean-up + args->clear(); + + // set default values if necessary + if (job_mode == "console") job_output = 1; + else if (job_mode == "none") job_output = 2; + else job_output = 0; + + // some checking + if ( files.count() > 0) + { + check_stdin = false; + + if( force_stdin ) + { + showmsg(i18n("A file has been specified on the command line. Printing from STDIN will be disabled."), 1); + force_stdin = false; + } + } + if (nodialog && files.count() == 0 &&!force_stdin && !check_stdin ) + { + errormsg(i18n("When using '--nodialog', you must at least specify one file to print or use the '--stdin' flag.")); + } + + if( check_stdin ) + { // check if there's any input on stdin + fd_set in; + struct timeval tm; + tm.tv_sec = 0; + tm.tv_usec = 0; + FD_ZERO( &in ); + FD_SET( 0, &in ); + if( select( 1, &in, NULL, NULL, &tm ) ) + { // we have data on stdin + if ( read( 0, &readchar, 1 ) > 0 ) + { + force_stdin = true; + check_stdin = false; + dataread = true; + kdDebug( 500 ) << "input detected on stdin" << endl; + } + else + { + force_stdin = check_stdin = false; + kdDebug( 500 ) << "stdin closed and empty" << endl; + } + } + else + kdDebug( 500 ) << "no input on stdin at startup" << endl; + } + + // force_stdin ? or also check_stdin ? + KPrinter::ApplicationType dialog_mode = (force_stdin || nodialog ? KPrinter::StandAlone : KPrinter::StandAlonePersistent); + KPrinter::setApplicationType(dialog_mode); + if (!force_stdin) + KPrinter::addStandardPage(KPrinter::FilesPage); + + KPrinter kprinter; + if (nodialog) + { + KMPrinter *prt(0); + KMManager *mgr = KMManager::self(); + + mgr->printerList(false); + if (!printer.isEmpty()) + prt = mgr->findPrinter(printer); + else + prt = mgr->defaultPrinter(); + + if (prt == 0) + errormsg(i18n("The specified printer or the default printer could not be found.")); + else if (!prt->autoConfigure(&kprinter)) + errormsg(i18n("Operation aborted.")); + } + else if (!printer.isEmpty()) + kprinter.setSearchName(printer); + kprinter.setDocName(title); + kprinter.initOptions(opts); + kprinter.setOption("kde-filelist", files.toStringList().join("@@")); + kdDebug( 500 ) << kprinter.option( "kde-filelist" ) << endl; + if (ncopies > 0) + kprinter.setNumCopies(ncopies); + + if (nodialog) + slotPrintRequested(&kprinter); + else + { + dlg = KPrintDialog::printerDialog(&kprinter, 0); + if (dlg) + { + connect(dlg, SIGNAL(printRequested(KPrinter*)), SLOT(slotPrintRequested(KPrinter*))); + if( check_stdin ) + { + notif = new QSocketNotifier( 0, QSocketNotifier::Read, this ); + connect( notif, SIGNAL( activated( int )), this, SLOT( slotGotStdin())); + kdDebug( 500 ) << "waiting for input on stdin" << endl; + } + dlg->exec(); + delete dlg; + } + else + errormsg(i18n("Unable to construct the print dialog.")); + } + + QTimer::singleShot(10,kapp,SLOT(quit())); +} + +void hack( KPrintDialog* dlg ); + +void PrintWrapper::slotGotStdin() +{ + delete notif; + if ( read( 0, &readchar, 1 ) > 0 ) + { + force_stdin = true; + check_stdin = false; + dataread = true; + dlg->enableDialogPage( 0, false ); + kdDebug( 500 ) << "got delayed input on stdin" << endl; + } +} + +void PrintWrapper::slotPrintRequested(KPrinter *kprinter) +{ + // re-initialize docName + kprinter->setDocName(QString::null); + + // download files if needed + QStringList files = QStringList::split("@@", kprinter->option("kde-filelist"), false), filestoprint; + for (QStringList::ConstIterator it=files.begin(); it!=files.end(); ++it) + { + QString tmpFile; + KURL url = KURL::fromPathOrURL(*it); + kdDebug( 500 ) << url.url() << endl; + if (KIO::NetAccess::download(url, tmpFile, this)) + { + filestoprint << tmpFile; + kprinter->setDocName(url.fileName()); + } + } + + if (filestoprint.count() > 1) + kprinter->setDocName(i18n("Multiple files (%1)").arg(filestoprint.count())); + else if (kprinter->docName().isEmpty()) + kprinter->setDocName(force_stdin ? "<STDIN>" : "KPrinter"); + if (filestoprint.count() == 0) + { + // At this point force_stdin should be true + if (!force_stdin) + errormsg(i18n("Nothing to print.")); + + // print from stdin + +# if defined(HAVE_SIGSET) + sigset(SIGHUP, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGTERM, signal_handler); +# elif defined(HAVE_SIGACTION) + memset(&action, 0, sizeof(action)); + action.sa_handler = signal_handler; + + sigaction(SIGHUP, &action, NULL); + sigaction(SIGINT, &action, NULL); + sigaction(SIGTERM, &action, NULL); +# else + signal(SIGHUP, signal_handler); + signal(SIGINT, signal_handler); + signal(SIGTERM, signal_handler); +# endif + + tempFile = locateLocal("tmp","kprinter_")+QString::number(getpid()); + filestoprint.append(tempFile); + fromStdin = true; + FILE *fout = fopen(QFile::encodeName(filestoprint[0]),"w"); + if (!fout) errormsg(i18n("Unable to open temporary file.")); + char buffer[8192]; + int s; + + // check for previously read data + if ( dataread ) + fwrite( &readchar, 1, 1, fout ); + // read stdin and write to temporary file + while ((s=fread(buffer,1,sizeof(buffer),stdin)) > 0) + fwrite(buffer,1,s,fout); + + s = ftell(fout); + fclose(fout); + if (s <= 0) + { + showmsg(i18n("Stdin is empty, no job sent."), 2); + QFile::remove(filestoprint[0]); + return; + } + } + else if ( docopy ) + { + for ( QStringList::Iterator it=filestoprint.begin(); it!=filestoprint.end(); ++it ) + { + QString tmp = copyfile( *it ); + if ( tmp.isEmpty() ) + { + errormsg( i18n( "Unable to copy file %1." ).arg( *it ) ); + return; + } + *it = tmp; + } + fromStdin = true; + } + else + fromStdin = false; + + // print all files. Remove it after if printing from + // stdin. "kprinter" shouldn't remove temp file itself, + // otherwise the temp file might get removed before the + // print process finishes. + bool ok = kprinter->printFiles(filestoprint, fromStdin); + + if (!ok) + showmsg(i18n("Error while printing files"), 2); + // Do not show this dialog anymore. Code sould be removed definitively + // if nobody complains. + /*else + { + QString msg = i18n("<nobr>File(s) sent to printer <b>%1</b>.</nobr>").arg(kprinter->printerName()); + showmsg(msg,0); + }*/ +} + +#include "printwrapper.moc" diff --git a/kdeprint/kprinter/printwrapper.h b/kdeprint/kprinter/printwrapper.h new file mode 100644 index 000000000..6c4eed45d --- /dev/null +++ b/kdeprint/kprinter/printwrapper.h @@ -0,0 +1,49 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 PRINTWRAPPER_H +#define PRINTWRAPPER_H + +#include <qwidget.h> + +class KPrinter; +class KPrintDialog; +class QSocketNotifier; + +class PrintWrapper : public QWidget +{ + Q_OBJECT +public: + PrintWrapper(); + +public slots: + void slotPrint(); + void slotPrintRequested(KPrinter*); + +private slots: + void slotGotStdin(); + +private: + bool force_stdin; + bool check_stdin; + KPrintDialog* dlg; + QSocketNotifier* notif; +}; + +#endif diff --git a/kdeprint/printmgr/Makefile.am b/kdeprint/printmgr/Makefile.am new file mode 100644 index 000000000..b10f8359e --- /dev/null +++ b/kdeprint/printmgr/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +INCLUDES = $(all_includes) + +kde_module_LTLIBRARIES = kcm_printmgr.la + +kcm_printmgr_la_SOURCES = kcmprintmgr.cpp +kcm_printmgr_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_printmgr_la_LIBADD = -lkdeprint_management + +noinst_HEADERS = kcmprintmgr.h + +KDE_ICON = printmgr + +xdg_apps_DATA = printers.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmprintmgr.pot diff --git a/kdeprint/printmgr/hi128-app-printmgr.png b/kdeprint/printmgr/hi128-app-printmgr.png new file mode 100644 index 000000000..7db5f56b1 Binary files /dev/null and b/kdeprint/printmgr/hi128-app-printmgr.png differ diff --git a/kdeprint/printmgr/hi16-app-printmgr.png b/kdeprint/printmgr/hi16-app-printmgr.png new file mode 100644 index 000000000..d6defce21 Binary files /dev/null and b/kdeprint/printmgr/hi16-app-printmgr.png differ diff --git a/kdeprint/printmgr/hi22-app-printmgr.png b/kdeprint/printmgr/hi22-app-printmgr.png new file mode 100644 index 000000000..a71ee2817 Binary files /dev/null and b/kdeprint/printmgr/hi22-app-printmgr.png differ diff --git a/kdeprint/printmgr/hi32-app-printmgr.png b/kdeprint/printmgr/hi32-app-printmgr.png new file mode 100644 index 000000000..d554b554f Binary files /dev/null and b/kdeprint/printmgr/hi32-app-printmgr.png differ diff --git a/kdeprint/printmgr/hi48-app-printmgr.png b/kdeprint/printmgr/hi48-app-printmgr.png new file mode 100644 index 000000000..13adbd006 Binary files /dev/null and b/kdeprint/printmgr/hi48-app-printmgr.png differ diff --git a/kdeprint/printmgr/hi64-app-printmgr.png b/kdeprint/printmgr/hi64-app-printmgr.png new file mode 100644 index 000000000..5d22d215e Binary files /dev/null and b/kdeprint/printmgr/hi64-app-printmgr.png differ diff --git a/kdeprint/printmgr/hisc-app-printmgr.svgz b/kdeprint/printmgr/hisc-app-printmgr.svgz new file mode 100644 index 000000000..f40b4bdfa Binary files /dev/null and b/kdeprint/printmgr/hisc-app-printmgr.svgz differ diff --git a/kdeprint/printmgr/kcmprintmgr.cpp b/kdeprint/printmgr/kcmprintmgr.cpp new file mode 100644 index 000000000..0ffe98ecc --- /dev/null +++ b/kdeprint/printmgr/kcmprintmgr.cpp @@ -0,0 +1,73 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "kcmprintmgr.h" +#include "kdeprint/kmmainview.h" + +#include <qlayout.h> + +#include <kgenericfactory.h> +#include <kaboutdata.h> +#include <kdebug.h> +#include <klocale.h> + +typedef KGenericFactory<KCMPrintMgr, QWidget> KPrintMgrFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_printmgr, KPrintMgrFactory("kcmprintmgr") ) + +KCMPrintMgr::KCMPrintMgr(QWidget *parent, const char *name, const QStringList &) +: KCModule(KPrintMgrFactory::instance(),parent,name) +{ + setButtons(KCModule::Ok); + setRootOnlyMsg( i18n( + "Print management as normal user\n" + "Some print management operations may need administrator privileges. Use the\n" + "\"Administrator Mode\" button below to start this print management tool with\n" + "administrator privileges.") ); + setUseRootOnlyMsg(false); + + m_mainview = new KMMainView(this,"MainView"); + + QVBoxLayout *main_ = new QVBoxLayout(this, 0, 0); + main_->addWidget(m_mainview); + main_->activate(); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmprintmgr"), I18N_NOOP("KDE Printing Management"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000 - 2002 Michael Goffioul")); + about->addAuthor("Michael Goffioul", 0, "kdeprint@swing.be"); + setAboutData(about); +} + +QString KCMPrintMgr::quickHelp() const +{ + return i18n("<h1>Printers</h1>The KDE printing manager is part of KDEPrint which " + "is the interface to the real print subsystem of your Operating System (OS). " + "Although it does add some additional functionality of its own to those subsystems, " + "KDEPrint depends on them for its functionality. Spooling and filtering tasks, especially, " + "are still done by your print subsystem, or the administrative tasks (adding or " + "modifying printers, setting access rights, etc.)<br/> " + "What print features KDEPrint supports is therefore heavily dependent on your chosen print " + "subsystem. For the best support in modern printing, the KDE Printing Team recommends " + "a CUPS based printing system."); +} + +KCMPrintMgr::~KCMPrintMgr() +{ +} diff --git a/kdeprint/printmgr/kcmprintmgr.h b/kdeprint/printmgr/kcmprintmgr.h new file mode 100644 index 000000000..7aa43ef58 --- /dev/null +++ b/kdeprint/printmgr/kcmprintmgr.h @@ -0,0 +1,39 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 KCMPRINTMGR_H +#define KCMPRINTMGR_H + +#include <kcmodule.h> + +class KMMainView; + +class KCMPrintMgr : public KCModule +{ +public: + KCMPrintMgr(QWidget *parent, const char *name, const QStringList &); + ~KCMPrintMgr(); + + QString quickHelp() const; + +private: + KMMainView *m_mainview; +}; + +#endif diff --git a/kdeprint/printmgr/printers.desktop b/kdeprint/printmgr/printers.desktop new file mode 100644 index 000000000..0b5d605e9 --- /dev/null +++ b/kdeprint/printmgr/printers.desktop @@ -0,0 +1,235 @@ +[Desktop Entry] +Exec=kcmshell printers +Icon=printmgr +Type=Application +DocPath=kdeprint/index.html +MimeType=print/manager; + +X-KDE-ModuleType=Library +X-KDE-Library=printmgr +X-KDE-RootOnly=true +X-KDE-HasReadOnlyMode=true + +Name=Printers +Name[af]=Drukkers +Name[ar]=الطابعات +Name[be]=Друкаркі +Name[bg]=Принтери +Name[bn]=মুদ্রণ +Name[br]=Moullerezioù +Name[bs]=Štampači +Name[ca]=Impressores +Name[cs]=Tiskárny +Name[csb]=Drëkerë +Name[cy]=Argraffyddion +Name[da]=Printere +Name[de]=Drucker +Name[el]=Εκτυπωτές +Name[eo]=Printiloj +Name[es]=Impresoras +Name[et]=Printerid +Name[eu]=Inprimagailuak +Name[fa]=چاپگرها +Name[fi]=Tulostimet +Name[fr]=Imprimantes +Name[ga]=Printéirí +Name[gl]=Impresoras +Name[he]=מדפסות +Name[hi]=प्रिंटर +Name[hr]=Pisači +Name[hu]=Nyomtató +Name[is]=Prentarar +Name[it]=Stampanti +Name[ja]=プリンタ +Name[ka]=პრინტერები +Name[kk]=Принтерлер +Name[km]=ម៉ាស៊ីន​បោះពុម្ព +Name[lo]=ເຄື່ອງພິມ - K +Name[lt]=Spausdintuvai +Name[lv]=Printeri +Name[mk]=Печатачи +Name[mn]=Хэвлэгч +Name[ms]=Pencetak +Name[nb]=Skrivere +Name[nds]=Druckers +Name[ne]=मुद्रक +Name[nn]=Skrivarar +Name[nso]=Digatisi +Name[pa]=ਪਰਿੰਟਰ +Name[pl]=Drukarki +Name[pt]=Impressoras +Name[pt_BR]=Impressoras +Name[ro]=Imprimante +Name[ru]=Принтеры +Name[rw]=Mucapyi +Name[se]=Čálánat +Name[sk]=Tlačiarne +Name[sl]=Tiskalniki +Name[sr]=Штампачи +Name[sr@Latn]=Štampači +Name[ss]=Tishiceleli +Name[sv]=Skrivare +Name[ta]=அச்சியந்திரம் +Name[te]=ప్రింటర్లు +Name[tg]=Чопгарҳо +Name[th]=เครื่องพิมพ์ +Name[tr]=Yazıcılar +Name[tt]=Basaqlar +Name[uk]=Принтери +Name[uz]=Printerlar +Name[uz@cyrillic]=Принтерлар +Name[ven]=Dziphirinthara +Name[vi]=Máy in +Name[wa]=Sicrireces +Name[xh]=Abashicileli +Name[zh_CN]=打印机 +Name[zh_TW]=印表機 +Name[zu]=Abashicileli + +Comment=Printing system configuration (printers, jobs, classes, ...) +Comment[af]=Drukker substelsel opstelling (drukkers, werke, klasse, ...) +Comment[ar]=إعداد نظام الطباعة (الطابعات, المهمات, الفئات ...) +Comment[az]=Çap Etmə sistemi quraşdırması (çap edicilər, vəzifələr, siniflər, ...) +Comment[be]=Настаўленні сістэмы друку (друкаркі, заданні, класы, ...) +Comment[bg]=Настройване на системата за печат +Comment[bn]=মুদ্রণব্যবস্থার কনফিগারেশন (printers, jobs, classes, ...) +Comment[bs]=Podešavanje sistema štampe (štampači, zadaci, klase, ...) +Comment[ca]=Configuració del sistema d'impressió (impressores, tasques, classes...) +Comment[cs]=Nastavení tiskového systému (tiskárny, úlohy, třídy, ...) +Comment[csb]=Kònfigùracëjô systemë drëkòwaniô (drëkrë, pòlétë, klasë, ...) +Comment[cy]=Ffurfweddu cysawd argraffu (argraffyddion, swyddi, dosbarthidau, ...) +Comment[da]=Printersystemindstilling (printere, job, klasser, ...) +Comment[de]=Einrichtung des Drucksystems (Drucker, Aufträge, Klassen ...) +Comment[el]=Ρύθμιση συστήματος εκτύπωσης (εκτυπωτές, εργασίες, κλάσεις, ...) +Comment[eo]=Agordo de printiloj, taskoj, klasoj,... +Comment[es]=Configuración del sistema de impresión (impresoras, trabajos, clases...) +Comment[et]=Trükkimissüsteemi seadistamine (printerid, tööd, klassid...) +Comment[eu]=Inprimaketa sistemaren konfigurazioa (inprimagailuak, lanak, claseak, ...) +Comment[fa]=پیکربندی سیستم چاپ )چاپگرها، کارها، رده‌ها و ...( +Comment[fi]=Tulostusjärjestelmän asetukset (tulostimet, työt, luokat, ...) +Comment[fr]=Configuration du système d'impression (imprimantes, travaux d'impression, classes...) +Comment[fy]=Ynstellings fan it printsysteem (printers, taken, klassen, ...) +Comment[gl]=Configuración do sistema de Impresión (impresoras, traballos, clases, ...) +Comment[he]=שינוי הגדרות מערכת ההדפסה (מדפסות, עבודות, מחלקות...) +Comment[hi]=प्रिंटर तंत्र कॉन्फ़िगरेशन (प्रिंटर,कार्य,क्लासेस...) +Comment[hr]=Konfiguriranje ispisnog sustava (pisači, zadaci, klase...) +Comment[hu]=A nyomtatási rendszer beállításai +Comment[is]=Stillingar prentkerfis KDE forrita (prentara, verk, flokka,...) +Comment[it]=Configurazione del sistema di stampa (stampanti, lavori, classi, ...) +Comment[ja]=印刷システムの設定 (プリンタ、ジョブ、クラスなど) +Comment[ka]=ბეჭდვის სისტემის კონფიგურაცია (პრინტერები, დავალებები, კლასები,...) +Comment[kk]=Басып шығару жүйесін баптау (принтерлер, тапсырмалар, кластар, ...) +Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​ប្រព័ន្ធ​បោះពុម្ព (ម៉ាស៊ីន​បោះពុម្ព ការងារ សន្ដាន...) +Comment[lo]=ປັບແຕ່ງລະບົບການພິມ (ເຄື່ອງພິມ,ງານພິມ,ຄລາສ, ...) +Comment[lt]=Spausdinimo sistemos konfigūravimas (spausdintuvai, užduotys, klasės, ...) +Comment[lv]=Drukas sistēmas konfigurācija (drukas iekārtas, darbi, klases, ...) +Comment[mk]=Конфигурација на печатарскиот систем (печатачи, задачи, класи, ...) +Comment[mn]=Хэвлэх системийн тохируулга(Хэвлэгч,Даалгавар, Ангиуд...) +Comment[ms]=Konfigurasi sistem pencetakan [pencetak, kerja, kelas, ...) +Comment[mt]=Konfigurazzjoni tas-sistema tal-ipprintjar (printers, xogħol, klassijiet, ...) +Comment[nb]=Tilpass utskriftssystemet (skrivere, jobber, klasser …) +Comment[nds]=Instellen för dat Drucksysteem (Druckers, Opgaven, Klassen, ...) +Comment[ne]=मुद्रण प्रणाली कन्फिगरेसन (मुद्रक, कार्य, बग, ...) +Comment[nl]=Configuratie van het afdruksysteem (printers, taken, klassen, ...) +Comment[nn]=Oppsett av utskriftssystem (skrivarar, jobbar, klassar, …) +Comment[nso]=Peakanyo ya system ya kgatiso (digatisi, mesomo, maemo,...) +Comment[pa]=ਪਰਿੰਟਿੰਗ ਸਿਸਟਮ ਸੰਰਚਨਾ (ਪਰਿੰਟਰ, ਕੰਮ, ਕਲਾਸ, ...) +Comment[pl]=Konfiguracja systemu drukowania (drukarki, zadania, klasy, ...) +Comment[pt]=Configuração do sistema de impressão (impressoras, tarefas, classes, ...) +Comment[pt_BR]=Configuração do sistema de impressão (impressoras, trabalhos, classes, ...) +Comment[ro]=Configurează sistemul de tipărire (imprimante, lucrări, clase) +Comment[ru]=Настройки системы печати (принтеры, задания, классы...) +Comment[rw]=Iboneza rya sisitemu y'icapa (Mucapyi,imirimo,inzego,..) +Comment[se]=Heivet čálihanvuogádaga (čálániid, barggut, luohkkát, …) +Comment[sk]=Nastavenie systému tlače (tlačiarne, úlohy, triedy, ...) +Comment[sl]=Nastavitev sistema tiskanja (tiskalniki, opravila, razredi ...) +Comment[sr]=Подешавање система за штампање (штампачи, послови, класе, ...) +Comment[sr@Latn]=Podešavanje sistema za štampanje (štampači, poslovi, klase, ...) +Comment[sv]=Anpassa skrivarsystem (skrivare, jobb, klasser...) +Comment[ta]=அச்சியந்திர சாதன வடிவமைப்பு (அச்சியந்திரங்கள், வேலைகள், பிரிவுகள், ...) +Comment[tg]= Танзимоти системаи чоп (чопгарҳо, корҳо, синфҳо ва ғайра) +Comment[th]=ปรับแต่งระบบการพิมพ์ (เครื่องพิมพ์, งานพิมพ์, คลาส, ...) +Comment[tr]=Yazdırma sistemi kurulumu (yazıcılar, işler, sınıflar, ...) +Comment[tt]=Bastıru sistemeneñ caylawı: basaqlar, eşlär, törlär kebek närsä +Comment[uk]=Налаштування системи друку (принтери, задачі, класи, ...) +Comment[uz]=Bosib chiqarish tizimini moslash (printerlar, vazifalar, sinflar...) +Comment[uz@cyrillic]=Босиб чиқариш тизимини мослаш (принтерлар, вазифалар, синфлар...) +Comment[ven]=Nzudzanyo ya maitele au phirintha (Dziphirinthara, mishumo, dzikilasi,...) +Comment[vi]=Cấu hình hệ thống in ấn (máy in, tác vụ in, lớp, ...) +Comment[wa]=Apontiaedje do sistinme d' imprimaedje (sicrireces, bouyes, classes...) +Comment[xh]=Uqwalaselo lwendlela yoshicilelo (abashicileli, imisebenzi, iintlobo, ...) +Comment[zh_CN]=打印系统配置(打印机、任务、类等等) +Comment[zh_TW]=列印系統設定 (印表機、工作、類別等等) +Comment[zu]=Inhlanganiselo yesistimu yokushicilelo (abashicileli, imisebenzi, amakilasi, ...) + +Keywords=print,printer,printing management +Keywords[af]=print,printer,printing bestuuring +Keywords[ar]=طبع, طباعة, ادارة الطابعات +Keywords[az]=çap et,çap edici,çap etmə idarəsi +Keywords[be]=Друк,Друкаваць,Друкарка,Кіраванне друкам,print,printer,printing management +Keywords[bg]=печат, принтер, отпечатване, управление, система, print, printer, printing management +Keywords[ca]=imprimir,impressora,gestió de la impressió +Keywords[cs]=tisk,tiskárna,správa tisku +Keywords[csb]=drëkùjë,drëker,sprôwianié wëdrëkama +Keywords[cy]=argraffu,argraffydd,rheoli argraffu +Keywords[da]=udskriv,printer,printerhåndtering +Keywords[de]=Druck,Druckaufträge,Druckerverwaltung +Keywords[el]=εκτύπωση,εκτυπωτής,διαχείριση εκτυπώσεων +Keywords[eo]=printo,printado,presado,presilo,presadminsitrado +Keywords[es]=imprimir,impresora,gestión de impresión +Keywords[et]=trükkimine,printer,trükkimise haldamine +Keywords[eu]=inprimatu,inprimagailua,inprimaketa kudeaketa +Keywords[fa]=چاپ، چاپگر، مدیریت چاپ +Keywords[fi]=tulostus,tulostin,tulostuksenhallinta +Keywords[fr]=impression,imprimante,système d'impression +Keywords[fy]=print,printer,printing management,printbehear,printsje +Keywords[ga]=priontáil,printéir,bainisteoireacht priontála +Keywords[gl]=imprimir,impresora,xestión de impresión +Keywords[he]=הדפסה,מדפסת,ניהול הדפסה, print,printer,printing management +Keywords[hi]=छापा,प्रिंटर,छपाई प्रबंधन +Keywords[hr]=print,printer,printing management,ispis,pisač,upravljanje ispisivanjem +Keywords[hu]=nyomtatás,nyomtató,nyomtatáskezelés +Keywords[is]=prentun,prentari,prentstjórnun +Keywords[it]=stampa,stampante,gestione stampa +Keywords[ja]=印刷, プリンタ, 印刷管理 +Keywords[km]=បោះពុម្ព,ម៉ាស៊ីន​បោះពុម្ព,គ្រប់គ្រង​ការ​បោះពុម្ព +Keywords[lo]=ພິມ,ເຄື່ອງພິມ,ຈັດການພິມ +Keywords[lt]=print,printer,printing management,spausdinti,spausdintuvas,spausdinimo tvarkymas +Keywords[lv]=druka,drukas iekārta,drukāšanas menedžments +Keywords[mk]=print,printer,printing management,печати,печатач,менаџмент на печатење +Keywords[mn]=Хэвлэх,Хэвлэгч,Хэвлэгчийн удирдлага +Keywords[ms]=cetak, pencetak, pengurusan pencetakan +Keywords[mt]=print,printer,printing management,stampar,printja,stampa,ipprintja +Keywords[nb]=utskrift,skriver,utskriftskontroll +Keywords[nds]=drucken,Drucker,Opgaav,Opgaven,Druckopgaav,Druckopgaven,Opdrag,Druckopdrag,Opdrääg,Druckopdrääg +Keywords[ne]=मुद्रण, मुद्रक, मुद्रण व्यवस्थापन +Keywords[nl]=print,printer,printing management,afdrukbeheer,afdrukken +Keywords[nn]=utskrift,skrivar,utskriftshandsaming +Keywords[nso]=taolo ya kgatiso,segatisi,kgatiso +Keywords[pa]=ਛਾਪਣ,ਪਰਿੰਟਰ,ਪਰਿੰਟ,ਪਰਿੰਟ ਮੈਨੇਜਰ +Keywords[pl]=drukuj,drukarka,zarządzanie drukowaniem +Keywords[pt]=imprimir,impressora,gestão de impressão +Keywords[pt_BR]=imprimir,impressora,gerenciamento de impressão +Keywords[ro]=tipărire,printare,imprimantă,administrare tipărire +Keywords[rw]=gucapa,mucapyi,igenzura ry'icapa +Keywords[se]=čáliheapmi,čálán,čálihangieđahalli +Keywords[sk]=tlač,tlačiareň,správa tlače +Keywords[sl]=tiskanje,tiskalnik,upravljanje tiskanja +Keywords[sr]=print,printer,printing management,штампање,штампач,управљање штампом +Keywords[sr@Latn]=print,printer,printing management,štampanje,štampač,upravljanje štampom +Keywords[sv]=skriv ut,skrivare,skrivarhantering +Keywords[ta]=அச்சு, அச்சியந்திரம்,அச்சு மேலாளர் +Keywords[th]=พิมพ์,เครื่องพิมพ์,จัดการการพิมพ์ +Keywords[tr]=yazdır,yazıcı,yazıcı yönetimi +Keywords[uk]=друк,принтер,керування друком +Keywords[uz]=printer,bosib chiqarish,bosib chiqarishni boshqarish +Keywords[uz@cyrillic]=принтер,босиб чиқариш,босиб чиқаришни бошқариш +Keywords[ven]=u phirintha,phirinthara,vhulanguli ha phirinthara +Keywords[vi]=in ấn,máy in,quản lí in ấn +Keywords[wa]=rexhe,sicrirece,manaedjmint di l' imprimaedje,imprimaedje +Keywords[xh]=shicilela,umshicileli,uphatho lokushicilela +Keywords[zh_CN]=print,printer,printing management,打印,打印机,打印管理 +Keywords[zh_TW]=print,printer,printing management,列印,印表機,列印管理 +Keywords[zu]=shicilela,umshicileli,abaphathi boshicilelo + +Categories=Qt;KDE;X-KDE-settings-hardware;Settings; diff --git a/kdeprint/slave/Makefile.am b/kdeprint/slave/Makefile.am new file mode 100644 index 000000000..b4352d4d8 --- /dev/null +++ b/kdeprint/slave/Makefile.am @@ -0,0 +1,22 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +SUBDIRS = mimetypes templates + +INCLUDES= $(all_includes) + +kde_module_LTLIBRARIES = kio_print.la + +kio_print_la_SOURCES = kio_print.cpp +kio_print_la_LIBADD = $(LIB_KIO) -lkdeprint +kio_print_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) + +METASOURCES = AUTO + +noinst_HEADERS = kio_print.h + +# Services +servicesdir = $(kde_servicesdir) +services_DATA = print.protocol printdb.protocol + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kio_print.pot diff --git a/kdeprint/slave/kio_print.cpp b/kdeprint/slave/kio_print.cpp new file mode 100644 index 000000000..6857ef2e6 --- /dev/null +++ b/kdeprint/slave/kio_print.cpp @@ -0,0 +1,920 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "kio_print.h" +#include <kdeprint/kmprinter.h> +#include <kdeprint/kmmanager.h> +#include <kdeprint/kmjobmanager.h> +#include <kdeprint/kmjob.h> +#include <kdeprint/driver.h> + +#include <qfile.h> +#include <qtextstream.h> +#include <klocale.h> +#include <kdebug.h> +#include <kinstance.h> +#include <kio/global.h> +#include <kstandarddirs.h> +#include <kiconloader.h> +#include <kmimetype.h> +#include <kio/job.h> +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <kprocess.h> +#include <ktempfile.h> +#include <qfile.h> +#include <qdom.h> + +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> + +#define PRINT_DEBUG kdDebug(7019) << "kio_print: " + +extern "C" +{ + int KDE_EXPORT kdemain(int argc, char **argv); +} + +void addAtom(KIO::UDSEntry& entry, unsigned int ID, long l, const QString& s = QString::null) +{ + KIO::UDSAtom atom; + atom.m_uds = ID; + atom.m_long = l; + atom.m_str = s; + entry.append(atom); +} + +static void createDirEntry(KIO::UDSEntry& entry, const QString& name, const QString& url, const QString& mime) +{ + entry.clear(); + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR); + addAtom(entry, KIO::UDS_ACCESS, 0500); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); + addAtom(entry, KIO::UDS_URL, 0, url); + PRINT_DEBUG << "creating dir entry url=" << url << " mimetype=" << mime << endl; + addAtom(entry, KIO::UDS_SIZE, 0); + //addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); +} + +static void createFileEntry(KIO::UDSEntry& entry, const QString& name, const QString& url, const QString& mime) +{ + entry.clear(); + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFREG); + addAtom(entry, KIO::UDS_URL, 0, url); + addAtom(entry, KIO::UDS_ACCESS, 0400); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); + addAtom(entry, KIO::UDS_SIZE, 0); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); +} + +QString buildMenu(const QStringList& items, const QStringList& links, int active) +{ + if (items.count() == 0 || items.count() != links.count()) + return QString("<td height=20 class=\"menu\"> </td>"); + + QString s; + int index = 0; + for (QStringList::ConstIterator it1=items.begin(), it2=links.begin(); it1!=items.end() && it2!=links.end(); ++it1, ++it2, index++) + { + if (index == active) + s.append("<td height=20 class=\"menuactive\">  ").append(*it1).append(" </td>"); + else + s.append("<td height=20 class=\"menu\">  <a class=\"menu\" href=\"").append(*it2).append("\">").append(*it1).append("</a> </td>"); + if ((unsigned int)index < items.count()-1) + s.append("<td height=20 class=\"menu\">|</td>"); + } + return s; +} + +QString buildOptionRow(DrBase *opt, bool f) +{ + QString s("<tr class=\"%1\"><td width=\"41%\">%1</td><td width=\"59%\">%1</td></tr>\n"); + s = s.arg(f ? "contentwhite" : "contentyellow").arg(opt->get("text")).arg(opt->prettyText()); + return s; +} + +QString buildGroupTable(DrGroup *grp, bool showHeader = true) +{ + QString s("<tr class=\"top\"><td colspan=\"2\">%1</td></tr>\n"); + if (showHeader) + s = s.arg(grp->get("text")); + else + s = QString::null; + + QPtrListIterator<DrBase> oit(grp->options()); + bool f(false); + for (; oit.current(); ++oit, f = !f) + s.append(buildOptionRow(oit.current(), f)); + + QPtrListIterator<DrGroup> git(grp->groups()); + for (; git.current(); ++git) + s.append(buildGroupTable(git.current())); + + return s; +} + +int kdemain(int argc, char **argv) +{ + KInstance instance("kio_print"); + + PRINT_DEBUG << "starting ioslave" << endl; + if (argc != 4) + { + fprintf(stderr, "Usage: kio_print protocol domain-socket1 domain-socket2\n"); + exit(-1); + } + + /* create fake KApplicatiom object, needed for job stuffs */ + KAboutData about( "kio_print", "kio_print", "fake_version", + "KDEPrint IO slave", KAboutData::License_GPL, "(c) 2003, Michael Goffioul" ); + KCmdLineArgs::init( &about ); + KApplication app; + + KIO_Print slave(argv[2], argv[3]); + slave.dispatchLoop(); + + PRINT_DEBUG << "done" << endl; + return 0; +} + +KIO_Print::KIO_Print(const QCString& pool, const QCString& app) +: KIO::SlaveBase("print", pool, app) +{ +} + +void KIO_Print::listDir(const KURL& url) +{ + if ( url.protocol() == "printdb" ) + { + listDirDB( url ); + return; + } + + QStringList path = QStringList::split('/', url.path(), false); + + PRINT_DEBUG << "listing " << url.path() << endl; + QString group = path[0].lower(); + if (path.count() == 0) + listRoot(); + else if (path.count() == 1 && group != "manager" && group != "jobs") + { + PRINT_DEBUG << "listing group " << path[0] << endl; + + int mask; + QString mimeType; + KIO::UDSEntry entry; + + if (group == "printers") + { + mask = KMPrinter::Printer; + mimeType = "print/printer"; + } + else if (group == "classes") + { + mask = KMPrinter::Class | KMPrinter::Implicit; + mimeType = "print/class"; + } + else if (group == "specials") + { + mask = KMPrinter::Special; + mimeType = "print/printer"; + } + else + { + error(KIO::ERR_DOES_NOT_EXIST, url.url()); + return; + } + + QPtrListIterator<KMPrinter> it(*(KMManager::self()->printerList())); + for (;it.current();++it) + { + if (!(it.current()->type() & mask) || !it.current()->instanceName().isEmpty()) + { + PRINT_DEBUG << "rejecting " << it.current()->name() << endl; + continue; + } + + //createFileEntry(entry, it.current()->name(), ("print:/"+path[0]+"/"+it.current()->name()), mimeType, "text/html", S_IFDIR); + createDirEntry(entry, it.current()->name(), ("print:/"+group+"/"+KURL::encode_string_no_slash(it.current()->name())), mimeType); + PRINT_DEBUG << "accepting " << it.current()->name() << endl; + listEntry(entry, false); + } + + listEntry(KIO::UDSEntry(), true); + finished(); + } + else + { + //error(KIO::ERR_UNSUPPORTED_ACTION, i18n("Unsupported path %1").arg(url.path())); + // better do nothing + listEntry(KIO::UDSEntry(), true); + totalSize(0); + finished(); + } +} + +void KIO_Print::listRoot() +{ + PRINT_DEBUG << "listing root entry" << endl; + + KIO::UDSEntry entry; + + // Classes entry + createDirEntry(entry, i18n("Classes"), "print:/classes", "print/folder"); + listEntry(entry, false); + + // Printers entry + createDirEntry(entry, i18n("Printers"), "print:/printers", "print/folder"); + listEntry(entry, false); + + // Specials entry + createDirEntry(entry, i18n("Specials"), "print:/specials", "print/folder"); + listEntry(entry, false); + + // Management entry + //createFileEntry(entry, i18n("Manager"), "print:/manager", "print/manager", QString::null, S_IFDIR); + createDirEntry(entry, i18n("Manager"), "print:/manager", "print/manager"); + listEntry(entry, false); + + // Jobs entry + createDirEntry(entry, i18n("Jobs"), "print:/jobs", "print/jobs"); + listEntry(entry, false); + + // finish + totalSize(4); + listEntry(entry, true); + finished(); +} + +void KIO_Print::listDirDB( const KURL& url ) +{ + PRINT_DEBUG << "listDirDB: " << url << endl; + + QStringList pathComps = QStringList::split( '/', url.path(), false ); + KURL remUrl; + + remUrl.setProtocol( "http" ); + remUrl.setHost( url.host() ); + remUrl.setPort( url.port() ); + remUrl.setPath( "/list-data.cgi" ); + switch ( pathComps.size() ) + { + case 0: /* list manufacturers */ + remUrl.addQueryItem( "type", "makes" ); + break; + case 1: /* list printers for the given manufacturer */ + remUrl.addQueryItem( "type", "printers" ); + remUrl.addQueryItem( "make", pathComps[ 0 ] ); + break; + case 2: /* list drivers for given printer */ + remUrl.addQueryItem( "type", "drivers" ); + remUrl.addQueryItem( "printer", pathComps[ 1 ] ); + break; + default: + error( KIO::ERR_UNSUPPORTED_ACTION, "Not implemented" ); + return; + } + remUrl.addQueryItem( "format", "xml" ); + + if ( getDBFile( remUrl ) ) + { + QDomDocument doc; + if ( doc.setContent( &m_httpBuffer, false ) ) + { + QDomNodeList l; + KIO::UDSEntry entry; + switch ( pathComps.size() ) + { + case 0: + l = doc.documentElement().elementsByTagName( "make" ); + for ( unsigned int i=0; i<l.count(); i++ ) + { + QString make = l.item( i ).toElement().text(); + KURL makeUrl = url; + makeUrl.addPath( "/" + make ); + createDirEntry( entry, make, makeUrl.url(), "print/folder" ); + listEntry( entry, false ); + PRINT_DEBUG << "make: " << make << endl; + } + break; + case 1: + l = doc.documentElement().elementsByTagName( "printer" ); + for ( unsigned int i=0; i<l.count(); i++ ) + { + QString ID, name; + for ( QDomNode n=l.item( i ).firstChild(); !n.isNull(); n=n.nextSibling() ) + { + QDomElement e = n.toElement(); + if ( e.tagName() == "id" ) + ID = e.text(); + else if ( e.tagName() == "model" ) + name = e.text(); + } + if ( !ID.isEmpty() && !name.isEmpty() ) + { + KURL printerUrl = url; + printerUrl.addPath( "/" + ID ); + createDirEntry( entry, name, printerUrl.url(), "print/printermodel" ); + listEntry( entry, false ); + PRINT_DEBUG << "printer: " << ID << endl; + } + } + break; + case 2: + l = doc.documentElement().elementsByTagName( "driver" ); + for ( unsigned int i=0; i<l.count(); i++ ) + { + QString driver = l.item( i ).toElement().text(); + KURL driverUrl = url; + driverUrl.addPath( "/" + driver ); + createFileEntry( entry, driver, driverUrl.url(), "print/driver" ); + listEntry( entry, false ); + PRINT_DEBUG << "driver: " << driver << endl; + } + break; + default: + error( KIO::ERR_UNSUPPORTED_ACTION, "Not implemented" ); + return; + } + listEntry( KIO::UDSEntry(), true ); + finished(); + } + else + { + if ( m_httpBuffer.buffer().size() == 0 ) + error( KIO::ERR_INTERNAL, i18n( "Empty data received (%1)." ).arg( url.host() ) ); + else + error( KIO::ERR_INTERNAL, i18n( "Corrupted/incomplete data or server error (%1)." ).arg( url.host() ) ); + } + } + /* + * If error occured while downloading, error has been called by + * getDBFile. No need for a "else" statement. + */ +} + +void KIO_Print::stat(const KURL& url) +{ + if ( url.protocol() == "printdb" ) + { + statDB( url ); + return; + } + + PRINT_DEBUG << "stat: " << url.url() << endl; + QStringList path = QStringList::split('/', url.encodedPathAndQuery(-1), false); + KIO::UDSEntry entry; + QString mime; + bool err(false); + + PRINT_DEBUG << "path components: " << path.join(", ") << endl; + + switch (path.count()) + { + case 0: + createDirEntry(entry, i18n("Print System"), "print:/", "print/folder"); + break; + case 1: + if (path[0].lower() == "classes") + createDirEntry(entry, i18n("Classes"), "print:/classes", "print/folder"); + else if (path[0].lower() == "printers") + createDirEntry(entry, i18n("Printers"), "print:/printers", "print/folder"); + else if (path[0].lower() == "specials") + createDirEntry(entry, i18n("Specials"), "print:/specials", "print/folder"); + else if (path[0].lower() == "manager") + createDirEntry(entry, i18n("Manager"), "print:/manager", "print/manager"); + else if (path[0].lower().startsWith("jobs")) + createFileEntry(entry, i18n("Jobs"), url.url(), "text/html"); + else + err = true; + break; + case 2: + if (path[0].lower() == "printers") + mime = "print/printer"; + else if (path[0].lower() == "classes") + mime = "print/class"; + else if (path[0].lower() == "specials") + mime = "print/printer"; + else + err = true; + createFileEntry(entry, path[1], "print:/"+path[0]+"/"+path[1], "text/html"); + break; + } + + if (!err) + { + statEntry(entry); + finished(); + } + else + error(KIO::ERR_DOES_NOT_EXIST, url.path()); +} + +void KIO_Print::statDB( const KURL& url ) +{ + PRINT_DEBUG << "statDB: " << url << endl; + KIO::UDSEntry entry; + QStringList pathComps = QStringList::split( '/', url.path(), false ); + if ( pathComps.size() == 3 ) + createFileEntry( entry, i18n( "Printer driver" ), url.url(), "print/driver" ); + else + createDirEntry( entry, i18n( "On-line printer driver database" ), url.url(), "inode/directory" ); + statEntry( entry ); + finished(); +} + +bool KIO_Print::getDBFile( const KURL& src ) +{ + PRINT_DEBUG << "downloading " << src.url() << endl; + + /* re-initialize the internal buffer */ + if ( m_httpBuffer.isOpen() ) + m_httpBuffer.close(); + m_httpError = 0; + m_httpBuffer.open( IO_WriteOnly|IO_Truncate ); // be sure to erase the existing data + + /* start the transfer job */ + KIO::TransferJob *job = KIO::get( src, false, false ); + connect( job, SIGNAL( result( KIO::Job* ) ), SLOT( slotResult( KIO::Job* ) ) ); + connect( job, SIGNAL( data( KIO::Job*, const QByteArray& ) ), SLOT( slotData( KIO::Job*, const QByteArray& ) ) ); + connect( job, SIGNAL( totalSize( KIO::Job*, KIO::filesize_t ) ), SLOT( slotTotalSize( KIO::Job*, KIO::filesize_t ) ) ); + connect( job, SIGNAL( processedSize( KIO::Job*, KIO::filesize_t ) ), SLOT( slotProcessedSize( KIO::Job*, KIO::filesize_t ) ) ); + kapp->enter_loop(); + m_httpBuffer.close(); + + /* return the result */ + if ( m_httpError != 0 ) + error( m_httpError, m_httpErrorTxt ); + return ( m_httpError == 0 ); +} + +void KIO_Print::getDB( const KURL& url ) +{ + PRINT_DEBUG << "downloading PPD file for " << url.url() << endl; + + QStringList pathComps = QStringList::split( '/', url.path(), false ); + if ( pathComps.size() != 3 ) + error( KIO::ERR_MALFORMED_URL, url.url() ); + else + { + KURL remUrl; + + remUrl.setProtocol( "http" ); + remUrl.setHost( url.host() ); + remUrl.setPath( "/ppd-o-matic.cgi" ); + remUrl.addQueryItem( "driver", pathComps[ 2 ] ); + remUrl.addQueryItem( "printer", pathComps[ 1 ] ); + + if ( getDBFile( remUrl ) ) + { + mimeType( "text/plain" ); + data( m_httpBuffer.buffer() ); + finished(); + } + /* + * no "else" statement needed, the error has + * already been emitted by the getDBFile function + */ + } +} + +void KIO_Print::slotResult( KIO::Job *j ) +{ + /* + * store slave results for later user (job gets deleted + * after this function). Store only if no other error + * occured previously (when writing to the buffer). + */ + if ( m_httpError == 0 ) + { + m_httpError = j->error(); + m_httpErrorTxt = j->errorText(); + } + kapp->exit_loop(); +} + +void KIO_Print::slotData( KIO::Job *j, const QByteArray& d ) +{ + PRINT_DEBUG << "HTTP data received (size=" << d.size() << ")" << endl; + if ( d.size() > 0 ) + { + int len = m_httpBuffer.writeBlock( d ); + if ( len == -1 || len != ( int )d.size() ) + { + m_httpError = KIO::ERR_INTERNAL; + m_httpErrorTxt = "Unable to write to the internal buffer."; + j->kill( false ); + } + } +} + +void KIO_Print::slotTotalSize( KIO::Job*, KIO::filesize_t sz ) +{ + totalSize( sz ); +} + +void KIO_Print::slotProcessedSize( KIO::Job*, KIO::filesize_t sz ) +{ + processedSize( sz ); +} + +void KIO_Print::get(const KURL& url) +{ + if ( url.protocol() == "printdb" ) + { + getDB( url ); + return; + } + + QStringList elems = QStringList::split('/', url.encodedPathAndQuery(), false); + QString group(elems[0].lower()), printer(KURL::decode_string(elems[1])), path, query; + KMPrinter *mprinter(0); + + if (group == "manager") + { + PRINT_DEBUG << "opening print management part" << endl; + + mimeType("print/manager"); + finished(); + return; + } + + PRINT_DEBUG << "getting " << url.url() << endl; + + if (group.startsWith("jobs")) + { + int p = group.find('?'); + if (p != -1) + query = group.mid(p+1); + if (!query.isEmpty() && query != "jobs" && query != "completed_jobs") + { + error(KIO::ERR_MALFORMED_URL, QString::null); + return; + } + PRINT_DEBUG << "listing jobs for all printers" << endl; + showJobs(0, query == "completed_jobs"); + return; + } + + int p = printer.find('?'); + if (p != -1) + { + query = printer.mid(p+1); + printer = printer.left(p); + } + + PRINT_DEBUG << "opening " << url.url() << endl; + PRINT_DEBUG << "extracted printer name = " << printer << endl; + + KMManager::self()->printerList(false); + mprinter = KMManager::self()->findPrinter(printer); + if (!mprinter) + path = locateData(printer.isEmpty() ? group : printer); + + if (elems.count() > 2 || (path.isEmpty() && group != "printers" && group != "classes" && group != "specials") + || (mprinter == 0 && path.isEmpty())) + { + error(KIO::ERR_DOES_NOT_EXIST, url.path()); + return; + } + + if (mprinter != 0) + { + if (!query.isEmpty() && query != "general") + { + if (query == "jobs") + showJobs(mprinter, false); + else if (query == "completed_jobs") + showJobs(mprinter, true); + else if (query == "driver") + showDriver(mprinter); + else + error(KIO::ERR_MALFORMED_URL, KURL::decode_string(elems[1])); + } + else if (group == "printers" && mprinter->isPrinter()) + showPrinterInfo(mprinter); + else if (group == "classes" && mprinter->isClass(true)) + showClassInfo(mprinter); + else if (group == "specials" && mprinter->isSpecial()) + showSpecialInfo(mprinter); + else + error(KIO::ERR_INTERNAL, i18n("Unable to determine object type for %1.").arg(printer)); + } + else if (!path.isEmpty()) + showData(path); + else + error(KIO::ERR_INTERNAL, i18n("Unable to determine source type for %1.").arg(printer)); +} + +void KIO_Print::showPrinterInfo(KMPrinter *printer) +{ + if (!KMManager::self()->completePrinter(printer)) + error(KIO::ERR_INTERNAL, i18n("Unable to retrieve printer information for %1.").arg(printer->name())); + else + { + mimeType("text/html"); + + QString content; + if (!loadTemplate(QString::fromLatin1("printer.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("printer.template")); + return; + } + + content = content + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(buildMenu(QStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), + QStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), + 0)) + .arg(QString::null) + .arg(printer->pixmap()) + .arg(printer->name()) + .arg(i18n("General Properties")) + .arg(i18n("Type")).arg(printer->isRemote() ? i18n("Remote") : i18n("Local")) + .arg(i18n("State")).arg(printer->stateString()) + .arg(i18n("Location")).arg(printer->location()) + .arg(i18n("Description")).arg(printer->description()) + .arg(i18n("URI")).arg(printer->uri().prettyURL()) + .arg(i18n("Interface (Backend)")).arg(printer->device()) + .arg(i18n("Driver")) + .arg(i18n("Manufacturer")).arg(printer->manufacturer()) + .arg(i18n("Model")).arg(printer->model()) + .arg(i18n("Driver Information")).arg(printer->driverInfo()); + + data(content.local8Bit()); + finished(); + } +} + +void KIO_Print::showClassInfo(KMPrinter *printer) +{ + if (!KMManager::self()->completePrinter(printer)) + error(KIO::ERR_INTERNAL, i18n("Unable to retrieve class information for %1.").arg(printer->name())); + else + { + mimeType("text/html"); + + QString content; + if (!loadTemplate(QString::fromLatin1("class.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("class.template")); + return; + } + + QString memberContent("<ul>\n"); + QStringList members(printer->members()); + for (QStringList::ConstIterator it=members.begin(); it!=members.end(); ++it) + { + memberContent.append(QString::fromLatin1("<li><a href=\"print:/printers/%1\">%2</a></li>\n").arg(*it).arg(*it)); + } + memberContent.append("</ul>\n"); + + QString typeContent = (printer->isImplicit() ? i18n("Implicit") : (printer->isRemote() ? i18n("Remote") : i18n("Local"))); + + content = content + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(buildMenu(QStringList::split('|', i18n("General|Active jobs|Completed jobs"), false), + QStringList::split('|', "?general|?jobs|?completed_jobs", true), + 0)) + .arg(QString::null) + .arg(printer->pixmap()) + .arg(printer->name()) + .arg(i18n("General Properties")) + .arg(i18n("Type")).arg(typeContent) + .arg(i18n("State")).arg(printer->stateString()) + .arg(i18n("Location")).arg(printer->location()) + .arg(i18n("Description")).arg(printer->description()) + .arg(i18n("URI")).arg(printer->uri().prettyURL()) + .arg(i18n("Members")).arg(memberContent); + + data(content.local8Bit()); + finished(); + } +} + +void KIO_Print::showSpecialInfo(KMPrinter *printer) +{ + mimeType("text/html"); + + QString content; + if (!loadTemplate(QString::fromLatin1("pseudo.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); + return; + } + + QString reqContent("<ul>\n"); + QStringList requirements = QStringList::split(",", printer->option("kde-special-require"), false); + for (QStringList::ConstIterator it=requirements.begin(); it!=requirements.end(); ++it) + reqContent += ("<li>" + (*it) + "</li>\n"); + reqContent.append("</ul>\n"); + + content = content + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(buildMenu(QStringList::split('|', i18n("General"), false), + QStringList::split('|', "?general", true), + 0)) + .arg(QString::null) + .arg(printer->pixmap()) + .arg(printer->name()) + .arg(i18n("General Properties")) + .arg(i18n("Location")).arg(printer->location()) + .arg(i18n("Description")).arg(printer->description()) + .arg(i18n("Requirements")).arg(reqContent) + .arg(i18n("Command Properties")) + .arg(i18n("Command")).arg("<tt>"+printer->option("kde-special-command")+"</tt>") + .arg(i18n("Use Output File")).arg(printer->option("kde-special-file") == "1" ? i18n("Yes") : i18n("No")) + .arg(i18n("Default Extension")).arg(printer->option("kde-special-extension")); + + data(content.local8Bit()); + finished(); +} + +bool KIO_Print::loadTemplate(const QString& filename, QString& buffer) +{ + QFile f(locate("data", QString::fromLatin1("kdeprint/template/")+filename)); + if (f.exists() && f.open(IO_ReadOnly)) + { + QTextStream t(&f); + buffer = t.read(); + return true; + } + else + { + buffer = QString::null; + return false; + } +} + +void KIO_Print::showData(const QString& pathname) +{ + PRINT_DEBUG << "sending data: " << pathname << endl; + QFile f(pathname); + if (f.exists() && f.open(IO_ReadOnly)) + { + QByteArray arr(f.readAll()); + mimeType(KMimeType::findByURL(KURL(pathname), 0, true, true)->name()); + data(arr); + finished(); + } + else + { + PRINT_DEBUG << "file not found" << endl; + error(KIO::ERR_DOES_NOT_EXIST, pathname); + } +} + +/** + * Locate a data in this order: + * - $KDEDIR/share/apps/kdeprint/template/ + * - as a desktop icon + */ +QString KIO_Print::locateData(const QString& item) +{ + QString path = locate("data", "kdeprint/template/"+item); + if (path.isEmpty()) + path = KGlobal::iconLoader()->iconPath(item, KIcon::Desktop, true); + return path; +} + +void KIO_Print::showJobs(KMPrinter *prt, bool completed) +{ + mimeType("text/html"); + + // Add the printer to the current list in the job manager + KMJobManager::JobType type = (completed ? KMJobManager::CompletedJobs : KMJobManager::ActiveJobs); + KMJobManager *mgr = KMJobManager::self(); + if (prt) + mgr->addPrinter(prt->printerName(), type); + else + { + QPtrListIterator<KMPrinter> pit(*(KMManager::self()->printerList())); + for (; pit.current(); ++pit) + if (pit.current()->isVirtual() || pit.current()->isSpecial()) + continue; + else + mgr->addPrinter(pit.current()->printerName(), type); + } + + QString content; + if (!loadTemplate(QString::fromLatin1("jobs.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); + return; + } + + if (prt) + { + content = content + .arg(i18n("Jobs of %1").arg(prt->printerName())) + .arg(i18n("Jobs of %1").arg(prt->printerName())) + .arg(prt->isClass () ? + buildMenu(QStringList::split('|', i18n("General|Active jobs|Completed jobs"), false), + QStringList::split('|', "?general|?jobs|?completed_jobs", true), + (completed ? 2 : 1)) : + buildMenu(QStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), + QStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), + (completed ? 3 : 2))) + .arg(QString::null) + .arg(prt->pixmap()) + .arg(prt->printerName()); + } + else + { + content = content + .arg(i18n("All jobs")) + .arg(buildMenu(QStringList::split('|', i18n("Active jobs|Completed jobs"), false), + QStringList::split('|', "?jobs|?completed_jobs", true), + (completed ? 1 : 0))) + .arg("fileprint") + .arg(i18n("All jobs")); + } + content = content.arg(i18n("ID")).arg(i18n("Owner")).arg(i18n("Printer")).arg(i18n("Name")).arg(i18n("State")); + + QString jobContent, cellContent("<td>%1</td>\n"); + QPtrListIterator<KMJob> it(mgr->jobList()); + bool flag(true); + for (; it.current(); ++it, flag = !flag) + { + jobContent.append("<tr class=\"").append(flag ? "contentyellow" : "contentwhite").append("\">\n"); + jobContent.append(cellContent.arg(it.current()->id())); + jobContent.append(cellContent.arg(it.current()->owner())); + jobContent.append(cellContent.arg(it.current()->printer())); + jobContent.append(cellContent.arg(it.current()->name())); + jobContent.append(cellContent.arg(it.current()->stateString())); + jobContent.append("</tr>\n"); + } + content = content.arg(jobContent); + + // remove the current printer to the current list in the job manager + if (prt) + mgr->removePrinter(prt->printerName(), type); + else + { + QPtrListIterator<KMPrinter> pit(*(KMManager::self()->printerList())); + for (; pit.current(); ++pit) + if (pit.current()->isVirtual() || pit.current()->isSpecial()) + continue; + else + mgr->removePrinter(pit.current()->printerName(), type); + } + + data(content.local8Bit()); + finished(); +} + +void KIO_Print::showDriver(KMPrinter *prt) +{ + mimeType("text/html"); + + QString content; + if (!loadTemplate(QString::fromLatin1("driver.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); + return; + } + + DrMain *driver = KMManager::self()->loadPrinterDriver(prt, true); + content = content + .arg(i18n("Driver of %1").arg(prt->printerName())) + .arg(i18n("Driver of %1").arg(prt->printerName())) + .arg(buildMenu(QStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), + QStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), + 1)) + .arg(QString::null) + .arg(prt->pixmap()) + .arg(prt->printerName() + " (" + (driver ? driver->get("text") : i18n("No driver found")) + ")"); + + if (driver) + content = content.arg(buildGroupTable(driver, false)); + else + content = content.arg(QString::null); + + data(content.local8Bit()); + finished(); +} + +#include "kio_print.moc" diff --git a/kdeprint/slave/kio_print.h b/kdeprint/slave/kio_print.h new file mode 100644 index 000000000..3fa20bbf1 --- /dev/null +++ b/kdeprint/slave/kio_print.h @@ -0,0 +1,70 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 KIO_PRINT_H +#define KIO_PRINT_H + +#include <kio/slavebase.h> +#include <kio/global.h> +#include <qstring.h> +#include <qbuffer.h> + +class KMPrinter; +namespace KIO { + class Job; +} + +class KIO_Print : public QObject, public KIO::SlaveBase +{ + Q_OBJECT +public: + KIO_Print(const QCString& pool, const QCString& app); + + void listDir(const KURL& url); + void get(const KURL& url); + void stat(const KURL& url); + +protected slots: + void slotResult( KIO::Job* ); + void slotData( KIO::Job*, const QByteArray& ); + void slotTotalSize( KIO::Job*, KIO::filesize_t ); + void slotProcessedSize( KIO::Job*, KIO::filesize_t ); + +private: + void listRoot(); + void listDirDB( const KURL& ); + void statDB( const KURL& ); + bool getDBFile( const KURL& ); + void getDB( const KURL& ); + void showClassInfo(KMPrinter*); + void showPrinterInfo(KMPrinter*); + void showSpecialInfo(KMPrinter*); + void showData(const QString&); + QString locateData(const QString&); + void showJobs(KMPrinter *p = 0, bool completed = false); + void showDriver(KMPrinter*); + + bool loadTemplate(const QString& filename, QString& buffer); + + QBuffer m_httpBuffer; + int m_httpError; + QString m_httpErrorTxt; +}; + +#endif diff --git a/kdeprint/slave/mimetypes/Makefile.am b/kdeprint/slave/mimetypes/Makefile.am new file mode 100644 index 000000000..9992389fe --- /dev/null +++ b/kdeprint/slave/mimetypes/Makefile.am @@ -0,0 +1,3 @@ +mimetype_DATA = folder.desktop printer.desktop class.desktop manager.desktop jobs.desktop \ + driver.desktop printermodel.desktop +mimetypedir = $(kde_mimedir)/print diff --git a/kdeprint/slave/mimetypes/class.desktop b/kdeprint/slave/mimetypes/class.desktop new file mode 100644 index 000000000..f73b3262d --- /dev/null +++ b/kdeprint/slave/mimetypes/class.desktop @@ -0,0 +1,75 @@ +[Desktop Entry] +Comment=Class of Printers +Comment[af]=Klas van Drukkers +Comment[ar]=فئة الطابعات +Comment[be]=Клас друкарак +Comment[bg]=Клас принтери +Comment[bn]=প্রিন্টার-এর ক্লাস (Class) +Comment[bs]=Klasa štampača +Comment[ca]=Classes d'impressores +Comment[cs]=Třída tiskáren +Comment[csb]=Klasë drëkerów +Comment[da]=Klasse af printere +Comment[de]=Druckerklasse +Comment[el]=Κλάση εκτυπωτών +Comment[eo]=Printiloklaso +Comment[es]=Clase de impresoras +Comment[et]=Printerite klass +Comment[eu]=Inprimagailu klasea +Comment[fa]=ردۀ چاپگرها +Comment[fi]=Tulostinten luokka +Comment[fr]=Classe d'imprimantes +Comment[fy]=Printerklassen +Comment[ga]=Aicme Printéirí +Comment[gl]=Clase de impresoras +Comment[he]=מחלקת מדפסות +Comment[hi]=प्रिंटर के वर्ग +Comment[hr]=Klase pisača +Comment[hu]=Nyomtatóosztály +Comment[is]=Flokkur prentara +Comment[it]=Classe di stampanti +Comment[ja]=プリンタクラス +Comment[ka]=პრინტერთა კლასი +Comment[kk]=Принтерлер класы +Comment[km]=សន្ដាន​ម៉ាស៊ីន​បោះពុម្ព +Comment[lt]=Spausdintuvų klasė +Comment[lv]=Drukas iekārtu klase +Comment[mk]=Класа на печатачи +Comment[ms]=Kelas Pencetak +Comment[mt]=Klassi ta' printers +Comment[nb]=Skriverklasse +Comment[nds]=Klass vun Druckers +Comment[ne]=मुद्रकको वर्ग +Comment[nl]=Printerklassen +Comment[nn]=Skrivarklasse +Comment[pa]=ਪਰਿੰਟਰਾਂ ਦਾ ਵਰਗ +Comment[pl]=Klasa drukarek +Comment[pt]=Classe de Impressoras +Comment[pt_BR]=Classes de Impressoras +Comment[ro]=Clase de imprimante +Comment[ru]=Класс принтеров +Comment[rw]=Urwego rwa Mucapyi +Comment[se]=Čálánluohkát +Comment[sk]=Trieda tlačiarní +Comment[sl]=Razred tiskalnikov +Comment[sr]=Класе штампача +Comment[sr@Latn]=Klase štampača +Comment[sv]=Klass av skrivare +Comment[ta]=அச்சியந்திரங்களின் வகை +Comment[tg]=Дараҷаи чопгарҳо +Comment[th]=คลาสของเครื่องพิมพ์ +Comment[tr]=Yazıcı Sınıfı +Comment[tt]=Basaqlar Törläre +Comment[uk]=Клас принтерів +Comment[uz]=Printerlar sinfi +Comment[uz@cyrillic]=Принтерлар синфи +Comment[vi]=Lớp Máy in +Comment[wa]=Classe des scrireces +Comment[zh_CN]=打印机类 +Comment[zh_TW]=印表機類別 +Icon=print_class +Type=MimeType +MimeType=print/class +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/mimetypes/driver.desktop b/kdeprint/slave/mimetypes/driver.desktop new file mode 100644 index 000000000..36cd08288 --- /dev/null +++ b/kdeprint/slave/mimetypes/driver.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Comment=Printer Driver +Comment[af]=Drukker Aandrywer +Comment[ar]=سائق الطابعة +Comment[be]=Драйвер друкаркі +Comment[bg]=Драйвер за принтер +Comment[bn]=প্রিন্টার ড্রাইভার +Comment[br]=Sturier ar voullerez +Comment[bs]=Drajver štampača +Comment[ca]=Control·lador d'impressora +Comment[cs]=Ovladač tiskárny +Comment[csb]=Czérownik drëkera +Comment[da]=Printerdriver +Comment[de]=Druckertreiber +Comment[el]=Οδηγός εκτυπωτή +Comment[eo]=Printila pelilo +Comment[es]=Controlador de impresora +Comment[et]=Printeri draiver +Comment[eu]=Inprimagailuaren driverra +Comment[fa]=گردانندۀ چاپگر +Comment[fi]=Tulostinajuri +Comment[fr]=Pilote d'imprimante +Comment[fy]=Printerstjoerprogramma +Comment[ga]=Tiománaí Printéara +Comment[gl]=Controlador da Impresora +Comment[he]=מנהל התקן המדפסת +Comment[hi]=प्रिंटर ड्राइवर +Comment[hr]=Upravljački program pisača +Comment[hu]=Nyomtatómeghajtó +Comment[is]=Prentrekill +Comment[it]=Driver stampante +Comment[ja]=プリンタドライバ +Comment[ka]=პრინტერის დრაივერი +Comment[kk]=Принтердің драйвері +Comment[km]=កម្មវិធី​បញ្ជា​ម៉ាស៊ីន​បោះពុម្ព +Comment[lt]=Spausdintuvo tvarkyklė +Comment[lv]=Printera draiveris +Comment[mk]=Управувач за печатач +Comment[ms]=Pemacu Pencetak +Comment[mt]=Driver tal-printer +Comment[nb]=Skriverdriver +Comment[nds]=Druckerdriever +Comment[ne]=मुद्रक यन्त्र +Comment[nl]=Printerstuurprogramma +Comment[nn]=Skrivardrivar +Comment[pa]=ਪਰਿੰਟਰ ਡਰਾਇਵਰ +Comment[pl]=Sterownik drukarki +Comment[pt]=Controlador de Impressora +Comment[pt_BR]=Driver da Impressora +Comment[ro]=Driver de imprimantă +Comment[ru]=Драйвер принтера +Comment[rw]=Musomyi ya Mucapyi +Comment[se]=Čálánstivrran +Comment[sk]=Ovládač tlačiarne +Comment[sl]=Tiskalniški gonilnik +Comment[sr]=Управљачки програм за штампач +Comment[sr@Latn]=Upravljački program za štampač +Comment[sv]=Skrivardrivrutin +Comment[ta]=அச்சியந்திர இயக்கி +Comment[tg]=Драйвери чопгар +Comment[th]=ไดรเวอร์เครื่องพิมพ์ +Comment[tr]=Yazıcı Sürücüsü +Comment[tt]=Basaq öçen Driver +Comment[uk]=Драйвер принтера +Comment[uz]=Printerning drayveri +Comment[uz@cyrillic]=Принтернинг драйвери +Comment[vi]=Trình điều khiển Máy in +Comment[wa]=Moenneu di scrirece +Comment[zh_CN]=打印机驱动程序 +Comment[zh_TW]=印表機驅動程式 +Icon=postscript +Type=MimeType +MimeType=print/driver +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/mimetypes/folder.desktop b/kdeprint/slave/mimetypes/folder.desktop new file mode 100644 index 000000000..312c863a3 --- /dev/null +++ b/kdeprint/slave/mimetypes/folder.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Comment=Print Folder +Comment[af]=Drukker Gids +Comment[ar]=مجلد الطباعة +Comment[be]=Тэчка друку +Comment[bg]=Директория на печата +Comment[bn]=মুদ্রণ ফোল্ডার +Comment[br]=Renkell moulañ +Comment[bs]=Direktorij za štampu +Comment[ca]=Carpeta d'impressió +Comment[cs]=Složka tisku +Comment[csb]=Katalog drëkòwaniô +Comment[cy]=Dogfen argraffu +Comment[da]=Udskriftsmappe +Comment[de]=Druckordner +Comment[el]=Φάκελος εκτυπώσεων +Comment[eo]=Printa dosierujo +Comment[es]=Carpeta de impresión +Comment[et]=Trükkimise kataloog +Comment[eu]=Inprimaketa karpeta +Comment[fa]=پوشۀ چاپ +Comment[fi]=Tulostuskansio +Comment[fr]=Dossier d'impression +Comment[fy]=printmap +Comment[ga]=Fillteán Priontála +Comment[gl]=Cartafol de Impresión +Comment[he]=תיקיית הדפסה +Comment[hr]=Mapa pisača +Comment[hu]=Nyomtatáskezelő-mappa +Comment[is]=Prentmappa +Comment[it]=Cartella di stampa +Comment[ja]=印刷フォルダ +Comment[ka]=საბეჭდი საქაღალდე +Comment[kk]=Басып шығару қапшығы +Comment[km]=ថត​បោះពុម្ព +Comment[ko]=홈 폴더 +Comment[lt]=Spausdinimo aplankas +Comment[mk]=Папка за печатење +Comment[ms]=Cetak Folder +Comment[nb]=Skrivermappe +Comment[nds]=Druckorner +Comment[ne]=मुद्रण फोल्डर +Comment[nl]=Afdrukmap +Comment[nn]=Skrivarmappe +Comment[pa]=ਛਪਾਈ ਫੋਲਡਰ +Comment[pl]=Folder drukowania +Comment[pt]=Pasta de Impressão +Comment[pt_BR]=Pasta de Impressão +Comment[ro]=Folder de tipărire +Comment[ru]=Папка печати +Comment[rw]=Gucapa Ububiko +Comment[se]=Čálihanmáhppa +Comment[sk]=Priečinok tlače +Comment[sl]=Tiskalniška mapa +Comment[sr]=Фасцикла за штампање +Comment[sr@Latn]=Fascikla za štampanje +Comment[sv]=Skrivarkatalog +Comment[ta]=அச்சிடும் அடைவு +Comment[tg]=Феҳристи чоп +Comment[th]=โฟลเดอร์งานพิมพ์ +Comment[tr]=Yazdırma dizinidizini +Comment[tt]=Bastıru Törgäge +Comment[uk]=Тека друку +Comment[uz]=Bosib chiqarish jildi +Comment[uz@cyrillic]=Босиб чиқариш жилди +Comment[vi]=Thư mục In ấn +Comment[wa]=Ridant d' imprimaedje +Comment[zh_CN]=打印文件夹 +Comment[zh_TW]=列印資料夾 +Icon=folder_print +Type=MimeType +MimeType=print/folder +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory diff --git a/kdeprint/slave/mimetypes/jobs.desktop b/kdeprint/slave/mimetypes/jobs.desktop new file mode 100644 index 000000000..5a92ceaa5 --- /dev/null +++ b/kdeprint/slave/mimetypes/jobs.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Comment=Print Jobs +Comment[af]=Drukker Werke +Comment[ar]=مهمات الطباعة +Comment[be]=Заданні друку +Comment[bg]=Задания за печат +Comment[bn]=মুদ্রণ তালিকা +Comment[bs]=Zadaci štampe +Comment[ca]=Tasques d'impressió +Comment[cs]=Tiskové úlohy +Comment[csb]=Pòlétë drëkòwaniô +Comment[cy]=Swyddi Argraffu +Comment[da]=Udskriftsjob +Comment[de]=Druckaufträge +Comment[el]=Εργασίες εκτύπωσης +Comment[eo]=Printaj taskoj +Comment[es]=Trabajos de impresión +Comment[et]=Trükitööd +Comment[eu]=Inprimatze lanak +Comment[fa]=چاپ کارها +Comment[fi]=Tulostustyöt +Comment[fr]=Tâches d'impression +Comment[fy]=Printtaken +Comment[ga]=Jabanna Priontála +Comment[gl]=Traballos de Impresión +Comment[he]=עבודות הדפסה +Comment[hi]=प्रिंट कार्य +Comment[hr]=Zadaci ispisivanja +Comment[hu]=Nyomtatási feladatok +Comment[is]=Prentverk +Comment[it]=Lavori di stampa +Comment[ja]=印刷ジョブ +Comment[ka]=ბეჭდვის დავალებები +Comment[kk]=Басу тапсырмалары +Comment[km]=ការងារ​បោះពុម្ព +Comment[lo]=ໂຟນເດີງານພິມ +Comment[lt]=Spausdinimo užduotys +Comment[lv]=Drukas darbi +Comment[mk]=Печатарски задачи +Comment[mn]=Хэвлэх даалгавар +Comment[ms]=Cetak Kerja +Comment[mt]=Xogħlijiet ta' pprintjar +Comment[nb]=Skriverjobber +Comment[nds]=Druckopgaven +Comment[ne]=मुद्रण कार्य +Comment[nl]=Afdruktaken +Comment[nn]=Utskriftsjobbar +Comment[nso]=Mesomo ya Kgatiso +Comment[pa]=ਪਰਿੰਟ ਕੰਮ +Comment[pl]=Zadania drukowania +Comment[pt]=Tarefas de Impressão +Comment[pt_BR]=Imprimir trabalhos +Comment[ro]=Lucrări de tipărit +Comment[ru]=Задания печати +Comment[rw]=Gucapa Imirimo +Comment[se]=Čálihanbarggut +Comment[sk]=Tlačové úlohy +Comment[sl]=Tiskalna opravila +Comment[sr]=Послови штампе +Comment[sr@Latn]=Poslovi štampe +Comment[sv]=Skrivarjobb +Comment[ta]=அச்சு வேலைகள் +Comment[te]=ప్రచురణ పనులు +Comment[tg]=Чопҳо +Comment[th]=งานพิมพ์ +Comment[tr]=Yazdırma işleri +Comment[tt]=Bastıru Eşläre +Comment[uk]=Завдання друку +Comment[uz]=Bosib chiqarish vazifalari +Comment[uz@cyrillic]=Босиб чиқариш вазифалари +Comment[ven]=Mishumo yau phirintha +Comment[vi]=Tác vụ In ấn +Comment[wa]=Bouyes d' imprimaedje +Comment[xh]=Imisebenzi Yoshicilelo +Comment[zh_CN]=打印任务 +Comment[zh_TW]=列印工作 +Comment[zu]=Imisebenzi Yokushicilela +Icon=fileprint +Type=MimeType +MimeType=print/jobs +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory + diff --git a/kdeprint/slave/mimetypes/manager.desktop b/kdeprint/slave/mimetypes/manager.desktop new file mode 100644 index 000000000..7b8cd0671 --- /dev/null +++ b/kdeprint/slave/mimetypes/manager.desktop @@ -0,0 +1,87 @@ +[Desktop Entry] +Comment=Print Management Tool +Comment[af]=Drukker Bestuur Program +Comment[ar]=أداة إدارة الطباعة +Comment[az]=Çap Edici İdarə Vasitəsi +Comment[be]=Кіраўнік друку +Comment[bg]=Програма за управление на печата +Comment[bn]=মুদ্রণ ম্যানেজমেন্ট টুল +Comment[br]=Ostilh mererezh moulañ +Comment[bs]=Alat za upravljanje štampanjem +Comment[ca]=Eina per a la gestió de la impressió +Comment[cs]=Nástroj pro správu tiskáren +Comment[csb]=Sprôwianié wëdrëkama +Comment[cy]=Erfyn rheoli argraffu +Comment[da]=Udskriftshåndteringsværktøj +Comment[de]=Dienstprogramm zur Druckerverwaltung +Comment[el]=Εργαλείο διαχείρισης εκτυπώσεων +Comment[eo]=Administrilo por printado +Comment[es]=Herramienta de gestión de la impresión +Comment[et]=Trükkimise haldur +Comment[eu]=Inprimaketak kudeatzeko tresna +Comment[fa]=ابزار مدیریت چاپ +Comment[fi]=Tulostuksenhallinta +Comment[fr]=Gestionnaire d'impression +Comment[fy]=Helpprogramma foar printerbehear +Comment[ga]=Uirlis Bhainisteoireacht Priontála +Comment[gl]=Ferramenta de Xestión das Impresións +Comment[he]=כלי ניהול הדפסה +Comment[hi]=छापा प्रबंधन औज़ार +Comment[hr]=Alat za upravljanje ispisivanjem +Comment[hu]=Nyomtatáskezelő segédprogram +Comment[is]=Prentunartól +Comment[it]=Strumento per la gestione della stampa +Comment[ja]=印刷マネージメントツール +Comment[ka]=ბეჭდვის მართვის ხელსაწყო +Comment[kk]=Басып шығаруды басқару құралы +Comment[km]=ឧបករណ៍​គ្រប់គ្រង​ការ​បោះពុម្ព +Comment[ko]=휴대폰 관리 도구 +Comment[lo]=ເຄື່ອງມືຈັດການການພິມ +Comment[lt]=Spausdinimo valdymo įrankis +Comment[lv]=Drukas Menedžmenta Rīks +Comment[mk]=Алатка за менаџмент на печатење +Comment[mn]=Хэвлэгчийн удирдлагын програм +Comment[ms]=Cetak Alat Pengurusan +Comment[mt]=Għodda għall-immaniġġjar tal-ipprintjar +Comment[nb]=Verktøy for skriverbehandling +Comment[nds]=Druckpleeg-Warktüüch +Comment[ne]=मुद्रण प्रबन्धक उपकरण +Comment[nl]=Hulpprogramma voor printerbeheer +Comment[nn]=Verktøy for utskriftshandsaming +Comment[nso]=Sebereka sa Taolo ya Kgatiso +Comment[pa]=ਪਰਿੰਟ ਪਰਬੰਧਨ ਸੰਦ +Comment[pl]=Zarządzanie wydrukiem +Comment[pt]=Ferramenta de gestão de impressão +Comment[pt_BR]=Ferramenta de Gerenciamento de Impressão +Comment[ro]=Utilitar de administrare a tipăririi +Comment[ru]=Утилита управления печатью +Comment[rw]=Igikoresho Ubuyobozi Gucapa +Comment[se]=Reaiddut čáliheami várás +Comment[sk]=Nástroj na správu tlače +Comment[sl]=Orodje za upravljanje tiskanja +Comment[sr]=Алат за управљање штампом +Comment[sr@Latn]=Alat za upravljanje štampom +Comment[sv]=Verktyg för att hantera utskrifter +Comment[ta]=அச்சு மேலாண்மை கருவி +Comment[tg]=Обзори мудирияти чоп +Comment[th]=เครื่องมือจัดการการพิมพ์ +Comment[tr]=Yazdırma Yönetim Aracı +Comment[tt]=Bastıru İdäneñ Qoralı +Comment[uk]=Засіб керування друком +Comment[uz]=Bosib chiqarishni boshqarish vositasi +Comment[uz@cyrillic]=Босиб чиқаришни бошқариш воситаси +Comment[ven]=Tshishumiswa tsha vhulanguli hau phirintha +Comment[vi]=Công cụ Quản lí In ấn +Comment[wa]=Usteye po manaedjî l' imprimaedje +Comment[xh]=Isixhobo Sophatho Sokushicilela +Comment[zh_CN]=打印管理工具 +Comment[zh_TW]=列印管理工具 +Comment[zu]=Ithuluzi Lokuphatha Ushicilelo +Icon=wizard +Type=MimeType +MimeType=print/manager +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory + diff --git a/kdeprint/slave/mimetypes/printer.desktop b/kdeprint/slave/mimetypes/printer.desktop new file mode 100644 index 000000000..905a08d34 --- /dev/null +++ b/kdeprint/slave/mimetypes/printer.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Comment=Printer +Comment[af]=Drukker +Comment[ar]=الطابعة +Comment[az]=Çap Edici +Comment[be]=Друкарка +Comment[bg]=Принтер +Comment[bn]=প্রিন্টার +Comment[br]=Moulañ +Comment[bs]=Štampač +Comment[ca]=Impressora +Comment[cs]=Tiskárna +Comment[csb]=Drëker +Comment[cy]=Argraffydd +Comment[de]=Drucker +Comment[el]=Εκτυπωτής +Comment[eo]=Printilo +Comment[es]=Impresora +Comment[eu]=Inprimagailua +Comment[fa]=چاپگر +Comment[fi]=Tulostin +Comment[fr]=Imprimante +Comment[ga]=Printéir +Comment[gl]=Impresora +Comment[he]=מדפסת +Comment[hi]=प्रिंटर +Comment[hr]=Pisač +Comment[hu]=Nyomtató +Comment[is]=Prentari +Comment[it]=Stampante +Comment[ja]=プリンタ +Comment[ka]=პრინტერი +Comment[kk]=Принтер +Comment[km]=ម៉ាស៊ីន​បោះពុម្ព +Comment[lo]=ເຄື່ອງພິມ +Comment[lt]=Spausdintuvas +Comment[lv]=Drukas Iekārta +Comment[mk]=Печатач +Comment[mn]=Хэвлэгч +Comment[ms]=Pencetak +Comment[nb]=Skriver +Comment[nds]=Drucker +Comment[ne]=मुद्रक +Comment[nn]=Skrivar +Comment[nso]=Segatisi +Comment[pa]=ਪਰਿੰਟਰ +Comment[pl]=Drukarka +Comment[pt]=Impressora +Comment[pt_BR]=Impressora +Comment[ro]=Imprimantă +Comment[ru]=Принтер +Comment[rw]=Mucapyi +Comment[se]=Čálán +Comment[sk]=Tlačiareň +Comment[sl]=Tiskalnik +Comment[sr]=Штампач +Comment[sr@Latn]=Štampač +Comment[sv]=Skrivare +Comment[ta]=அச்சியந்திரம் +Comment[te]=ప్రింటర్ +Comment[tg]=Чопгар +Comment[th]=เครื่องพิมพ์ +Comment[tr]=Yazıcı +Comment[tt]=Basaq +Comment[uk]=Принтер +Comment[uz@cyrillic]=Принтер +Comment[ven]=phirinthara +Comment[vi]=Máy in +Comment[wa]=Sicrirece +Comment[xh]=Umshicileli +Comment[zh_CN]=打印机 +Comment[zh_TW]=印表機 +Comment[zu]=Umshicileli +Icon=printer1 +Type=MimeType +MimeType=print/printer +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/mimetypes/printermodel.desktop b/kdeprint/slave/mimetypes/printermodel.desktop new file mode 100644 index 000000000..f6a471e41 --- /dev/null +++ b/kdeprint/slave/mimetypes/printermodel.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Comment=Printer Model +Comment[af]=Drukker Model +Comment[ar]=طراز الطابعة +Comment[be]=Мадэль друкаркі +Comment[bg]=Модел принтер +Comment[bn]=প্রিন্টার মডেল +Comment[br]=Gobari ar voullerez +Comment[bs]=Model štampača +Comment[ca]=Model d'impressora +Comment[cs]=Model tiskárny +Comment[csb]=Ôrt drëkera +Comment[cy]=Model Argraffydd +Comment[da]=Printermodel +Comment[de]=Druckermodell +Comment[el]=Μοντέλο εκτυπωτή +Comment[eo]=Printila modelo +Comment[es]=Modelo de impresora +Comment[et]=Printeri mudel +Comment[eu]=Inprimagailuaren modeloa +Comment[fa]=مدل چاپگر +Comment[fi]=Tulostinmalli +Comment[fr]=Modèle d'imprimante +Comment[fy]=Printermodel +Comment[ga]=Déanamh an Phrintéara +Comment[gl]=Modelo da Impresora +Comment[he]=דגם המדפסת +Comment[hi]=प्रिंटर मॉडल +Comment[hr]=Model pisača +Comment[hu]=Nyomtatótípus +Comment[is]=Prentaragerð +Comment[it]=Modello stampante +Comment[ja]=プリンタモデル +Comment[ka]=პრინტერის მოდელი +Comment[kk]=Принтер үлгісі +Comment[km]=ម៉ូដែលម៉ាស៊ីន​បោះពុម្ព +Comment[ko]=제어판 모듈 +Comment[lt]=Spausdintuvo modelis +Comment[lv]=Drukas Iekārtas modelis +Comment[mk]=Модел на печатач +Comment[ms]=Model Pencetak +Comment[mt]=Mudell tal-printer +Comment[nb]=Skrivermodell +Comment[nds]=Druckermodell +Comment[ne]=मुद्रक नमूना +Comment[nl]=Printermodel +Comment[nn]=Skrivarmodell +Comment[pa]=ਪਰਿੰਟਰ ਮਾਡਲ +Comment[pl]=Model drukarki +Comment[pt]=Modelo de Impressora +Comment[pt_BR]=Modelo de Impressora +Comment[ro]=Model de imprimantă +Comment[ru]=Модель принтера +Comment[rw]=Moderi Mucapyi +Comment[se]=Čálánmálle +Comment[sk]=Model tlačiarne +Comment[sl]=Model tiskalnika +Comment[sr]=Модел штампача +Comment[sr@Latn]=Model štampača +Comment[sv]=Skrivarmodell +Comment[ta]=அச்சியந்திர மாதிரி +Comment[tg]=Намунаи чопгар +Comment[th]=รุ่นของเครื่องพิมพ์ +Comment[tr]=Yazıcı Modeli +Comment[tt]=Basaq Töre +Comment[uk]=Модель принтера +Comment[uz]=Printerning modeli +Comment[uz@cyrillic]=Принтернинг модели +Comment[vi]=Loại Máy in +Comment[wa]=Modele del sicrirece +Comment[zh_CN]=打印机型号 +Comment[zh_TW]=印表機型號 +Icon=printer1 +Type=MimeType +MimeType=print/printermodel +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/print.protocol b/kdeprint/slave/print.protocol new file mode 100644 index 000000000..38989160b --- /dev/null +++ b/kdeprint/slave/print.protocol @@ -0,0 +1,15 @@ +[Protocol] +exec=kio_print +protocol=print +input=none +output=filesystem +listing=Name,Type,Access +reading=true +writing=false +makedir=false +deleting=false +moving=false +linking=false +Icon=postscript +DocPath=kioslave/print.html +defaultMimetype=application/octet-stream diff --git a/kdeprint/slave/printdb.protocol b/kdeprint/slave/printdb.protocol new file mode 100644 index 000000000..539edd596 --- /dev/null +++ b/kdeprint/slave/printdb.protocol @@ -0,0 +1,14 @@ +[Protocol] +exec=kio_print +protocol=printdb +input=none +output=filesystem +listing=Name,Type,Access +reading=true +writing=false +makedir=false +deleting=false +moving=false +linking=false +Icon=postscript +defaultMimetype=application/octet-stream diff --git a/kdeprint/slave/templates/Makefile.am b/kdeprint/slave/templates/Makefile.am new file mode 100644 index 000000000..7fde236a2 --- /dev/null +++ b/kdeprint/slave/templates/Makefile.am @@ -0,0 +1,31 @@ +template_DATA = class.template \ + printer.template \ + pseudo.template \ + jobs.template \ + driver.template \ + bar-bottom-left.png \ + bar-top-middle.png \ + box-bottom-middle.png \ + box-top-middle.png \ + bar-bottom-middle.png \ + bar-top-right.png \ + box-bottom-right.png \ + box-top-right.png \ + bar-bottom-right.png \ + bottom-left.png \ + box-centre-kdeprint.png \ + top-left.png \ + bar-middle-left.png \ + bottom-middle.png \ + box-middle-left.png \ + top-middle.png \ + bar-middle-right.png \ + bottom-right.png \ + box-middle-right.png \ + top-right-kdeprint.png \ + bar-top-left.png \ + box-bottom-left.png \ + box-top-left.png \ + htmlstyles.css + +templatedir = $(kde_datadir)/kdeprint/template diff --git a/kdeprint/slave/templates/bar-bottom-left.png b/kdeprint/slave/templates/bar-bottom-left.png new file mode 100644 index 000000000..30a323592 Binary files /dev/null and b/kdeprint/slave/templates/bar-bottom-left.png differ diff --git a/kdeprint/slave/templates/bar-bottom-middle.png b/kdeprint/slave/templates/bar-bottom-middle.png new file mode 100644 index 000000000..b2ebbbed5 Binary files /dev/null and b/kdeprint/slave/templates/bar-bottom-middle.png differ diff --git a/kdeprint/slave/templates/bar-bottom-right.png b/kdeprint/slave/templates/bar-bottom-right.png new file mode 100644 index 000000000..e664e1511 Binary files /dev/null and b/kdeprint/slave/templates/bar-bottom-right.png differ diff --git a/kdeprint/slave/templates/bar-middle-left.png b/kdeprint/slave/templates/bar-middle-left.png new file mode 100644 index 000000000..72fda9ec2 Binary files /dev/null and b/kdeprint/slave/templates/bar-middle-left.png differ diff --git a/kdeprint/slave/templates/bar-middle-right.png b/kdeprint/slave/templates/bar-middle-right.png new file mode 100644 index 000000000..eb8d3201c Binary files /dev/null and b/kdeprint/slave/templates/bar-middle-right.png differ diff --git a/kdeprint/slave/templates/bar-top-left.png b/kdeprint/slave/templates/bar-top-left.png new file mode 100644 index 000000000..b05fd216c Binary files /dev/null and b/kdeprint/slave/templates/bar-top-left.png differ diff --git a/kdeprint/slave/templates/bar-top-middle.png b/kdeprint/slave/templates/bar-top-middle.png new file mode 100644 index 000000000..387f81017 Binary files /dev/null and b/kdeprint/slave/templates/bar-top-middle.png differ diff --git a/kdeprint/slave/templates/bar-top-right.png b/kdeprint/slave/templates/bar-top-right.png new file mode 100644 index 000000000..a552ff91d Binary files /dev/null and b/kdeprint/slave/templates/bar-top-right.png differ diff --git a/kdeprint/slave/templates/bottom-left.png b/kdeprint/slave/templates/bottom-left.png new file mode 100644 index 000000000..78c9fece3 Binary files /dev/null and b/kdeprint/slave/templates/bottom-left.png differ diff --git a/kdeprint/slave/templates/bottom-middle.png b/kdeprint/slave/templates/bottom-middle.png new file mode 100644 index 000000000..41e52dd8a Binary files /dev/null and b/kdeprint/slave/templates/bottom-middle.png differ diff --git a/kdeprint/slave/templates/bottom-right.png b/kdeprint/slave/templates/bottom-right.png new file mode 100644 index 000000000..ef81b04a8 Binary files /dev/null and b/kdeprint/slave/templates/bottom-right.png differ diff --git a/kdeprint/slave/templates/box-bottom-left.png b/kdeprint/slave/templates/box-bottom-left.png new file mode 100644 index 000000000..650fa5743 Binary files /dev/null and b/kdeprint/slave/templates/box-bottom-left.png differ diff --git a/kdeprint/slave/templates/box-bottom-middle.png b/kdeprint/slave/templates/box-bottom-middle.png new file mode 100644 index 000000000..2bcd3ea03 Binary files /dev/null and b/kdeprint/slave/templates/box-bottom-middle.png differ diff --git a/kdeprint/slave/templates/box-bottom-right.png b/kdeprint/slave/templates/box-bottom-right.png new file mode 100644 index 000000000..975aaeed7 Binary files /dev/null and b/kdeprint/slave/templates/box-bottom-right.png differ diff --git a/kdeprint/slave/templates/box-centre-kdeprint.png b/kdeprint/slave/templates/box-centre-kdeprint.png new file mode 100644 index 000000000..97da1910e Binary files /dev/null and b/kdeprint/slave/templates/box-centre-kdeprint.png differ diff --git a/kdeprint/slave/templates/box-middle-left.png b/kdeprint/slave/templates/box-middle-left.png new file mode 100644 index 000000000..62a720178 Binary files /dev/null and b/kdeprint/slave/templates/box-middle-left.png differ diff --git a/kdeprint/slave/templates/box-middle-right.png b/kdeprint/slave/templates/box-middle-right.png new file mode 100644 index 000000000..aa94c0c90 Binary files /dev/null and b/kdeprint/slave/templates/box-middle-right.png differ diff --git a/kdeprint/slave/templates/box-top-left.png b/kdeprint/slave/templates/box-top-left.png new file mode 100644 index 000000000..34aba9195 Binary files /dev/null and b/kdeprint/slave/templates/box-top-left.png differ diff --git a/kdeprint/slave/templates/box-top-middle.png b/kdeprint/slave/templates/box-top-middle.png new file mode 100644 index 000000000..7ee2a0738 Binary files /dev/null and b/kdeprint/slave/templates/box-top-middle.png differ diff --git a/kdeprint/slave/templates/box-top-right.png b/kdeprint/slave/templates/box-top-right.png new file mode 100644 index 000000000..26d16d313 Binary files /dev/null and b/kdeprint/slave/templates/box-top-right.png differ diff --git a/kdeprint/slave/templates/class.template b/kdeprint/slave/templates/class.template new file mode 100644 index 000000000..4cbc075ab --- /dev/null +++ b/kdeprint/slave/templates/class.template @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta name="generator" content= + "HTML Tidy for Linux/x86 (vers 1st August 2004), see www.w3.org" /> + + <title>%1 + + + + + +
      +
      + +
      + +
      + +
      + +
      + %1 +
      + +
      + %1 +
      +
      + +
      +
      +
      + +
      + +
      + +
      +
      + +
      + %1 +
      + +
      +
      + +
      + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      + +
      + +
      +
      + +
      +
      +

       %1

      + + + + + + + + + +
       %1 +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      %1 %1
      %1 %1
      %1 %1
      %1 %1
      %1 %1
      +
      + +

      + +

      + + + + + + + + + +
       %1 +
      + + + + + + +
      %1
      +
      + +

      +
      + +
      +
      + +
      + +
      + +
      +
      +
      +
      + +
      +
      + +
      + +
      + +
      +
      + + diff --git a/kdeprint/slave/templates/driver.template b/kdeprint/slave/templates/driver.template new file mode 100644 index 000000000..d5c8af111 --- /dev/null +++ b/kdeprint/slave/templates/driver.template @@ -0,0 +1,133 @@ + + + + + + + + %1 + + + + + +
      +
      + +
      + +
      + +
      + +
      + %1 +
      + +
      + %1 +
      +
      + +
      +
      +
      + +
      + +
      + +
      +
      + +
      + %1 +
      + +
      +
      + +
      + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      + +
      + +
      +
      + +
      +
      +

       %1

      + + + + + +
      + + + %1 + +
      +
      + +
      +
      + +
      +
      + +
      + +
      + +
      +
      +
      +
      + +
      +
      + +
      + +
      + +
      +
      + + diff --git a/kdeprint/slave/templates/htmlstyles.css b/kdeprint/slave/templates/htmlstyles.css new file mode 100644 index 000000000..650ed76db --- /dev/null +++ b/kdeprint/slave/templates/htmlstyles.css @@ -0,0 +1,38 @@ +td.main { background-color: #505050;} +td.logo { background-color: #DDDDDD;} +td.lines { background-color: #DDDDDD; + background-image: url(lines.png);} +td.trans { background-repeat: no-repeat;} +td.end { background-image: url(lines2.png); + background-repeat: x-repeat;} +td.shadow1 { background-image: url(shadow1.png); + background-repeat: x-repeat;} +tr.top { font-family: sans-serif; + color: #ffffff; + background-color: #505050} +tr.contentyellow { font-family: sans-serif; + color: #000000; + background-color: #fff4c9} +tr.contentwhite { font-family: sans-serif; + color: #000000; + background-color: #FFFFFF} +tr.menurow {background-color: #505050; + color: #000000; + vertical-align: middle;} +td.deco {color: #ffffff; + background-color: #505050; + font-family: sans-serif; + font-size: small;} +td.menuactive {color: #ffcc00; + background-color: #777777; + font-family: sans-serif; + font-size: small;} +td.menu {color: #ffffff; + background-color: #505050; + font-family: sans-serif;} +a.menu {color: #eeeeee; + font-family: sans-serif; + font-size: small;} +a.menu:hover {color: #ffffff; + text-decoration: none;} + diff --git a/kdeprint/slave/templates/jobs.template b/kdeprint/slave/templates/jobs.template new file mode 100644 index 000000000..6c326feec --- /dev/null +++ b/kdeprint/slave/templates/jobs.template @@ -0,0 +1,140 @@ + + + + + + + + %1 + + + + + +
      +
      + +
      + +
      + +
      + +
      + %1 +
      + +
      + %1 +
      +
      + +
      +
      +
      + +
      + +
      + +
      +
      + +
      + %1 +
      + +
      +
      + +
      + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      + +
      + +
      +
      + +
      +
      +

       %1

      + + + + + +
      + + + + + + + + + + %1 + +
      %1%1%1%1%1
      +
      + +
      +
      + +
      +
      + +
      + +
      + +
      +
      +
      +
      + +
      +
      + +
      + +
      + +
      +
      + + diff --git a/kdeprint/slave/templates/printer.template b/kdeprint/slave/templates/printer.template new file mode 100644 index 000000000..44d6ba82b --- /dev/null +++ b/kdeprint/slave/templates/printer.template @@ -0,0 +1,205 @@ + + + + + + + + %1 + + + + + +
      +
      + +
      + +
      + +
      + +
      + %1 +
      + +
      + %1 +
      +
      + +
      +
      +
      + +
      + +
      + +
      +
      + +
      + %1 +
      + +
      +
      + +
      + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      + +
      + +
      +
      + +
      +
      +

       %1

      + + + + + + + + + +
       %1 +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      %1 %1
      %1 %1
      %1 %1
      %1 %1
      %1 %1
      %1 %1
      +
      + +

      + +

      + + + + + + + + + +
       %1
      + + + + + + + + + + + + + + + + + + +
      %1 %1 +
      %1 %1
      %1 %1
      +
      + +

      +
      + +
      +
      + +
      + +
      + +
      +
      +
      +
      + +
      +
      + +
      + +
      + +
      +
      + + diff --git a/kdeprint/slave/templates/pseudo.template b/kdeprint/slave/templates/pseudo.template new file mode 100644 index 000000000..d6dec46df --- /dev/null +++ b/kdeprint/slave/templates/pseudo.template @@ -0,0 +1,188 @@ + + + + + + + + %1 + + + + + +
      +
      + +
      + +
      + +
      + +
      + %1 +
      + +
      + %1 +
      +
      + +
      +
      +
      + +
      + +
      + +
      +
      + +
      + %1 +
      + +
      +
      + +
      + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      + +
      + +
      +
      + +
      +
      +

       %1

      + + + + + + + + + +
       %1 +
      + + + + + + + + + + + + + + + + + + + +
      %1 %1
      %1 %1
      %1 %1
      +
      + +

      + +

      + + + + + + + + + +
       %1
      + + + + + + + + + + + + + + + + + + +
      %1 %1 +
      %1 %1
      %1 %1
      +
      + +

      +
      + +
      +
      + +
      + +
      + +
      +
      +
      +
      + +
      +
      + +
      + +
      + +
      +
      + + diff --git a/kdeprint/slave/templates/top-left.png b/kdeprint/slave/templates/top-left.png new file mode 100644 index 000000000..d7551c0d5 Binary files /dev/null and b/kdeprint/slave/templates/top-left.png differ diff --git a/kdeprint/slave/templates/top-middle.png b/kdeprint/slave/templates/top-middle.png new file mode 100644 index 000000000..bb3fe7428 Binary files /dev/null and b/kdeprint/slave/templates/top-middle.png differ diff --git a/kdeprint/slave/templates/top-right-kdeprint.png b/kdeprint/slave/templates/top-right-kdeprint.png new file mode 100644 index 000000000..56717342c Binary files /dev/null and b/kdeprint/slave/templates/top-right-kdeprint.png differ diff --git a/kdesktop/AUTHORS b/kdesktop/AUTHORS new file mode 100644 index 000000000..05bcfd697 --- /dev/null +++ b/kdesktop/AUTHORS @@ -0,0 +1,4 @@ +Torben Weis +David Faure +Martin R. Jones +Geert Jansen diff --git a/kdesktop/DESIGN b/kdesktop/DESIGN new file mode 100644 index 000000000..e2a6a2b8b --- /dev/null +++ b/kdesktop/DESIGN @@ -0,0 +1,94 @@ +KDesktop Design Document + +Author : + David Faure, faure@kde.org + Martin R. Jones, mjones@kde.org (screensaver) + Geert Jansen, g.t.jansen@stud.tue.nl (background code) + +Last modified: 24 Oct 1999 + +Overall design of KDesktop : +============================= + +KDesktop is the program that handles the desktop icons, +the popup menus for the desktop, the mac menubar, and the +screensaver system. + +Files : +======= + +main.* : main +desktop.* : the icon container for the desktop icons +krootwm.* : right and middle mouse button popup menus, Mac menubar +bg*.*: Background renderer/manager. + +icons.* : old code, not used anymore. + We need to borrow ideas from it for positioning icons after a DnD + (in kiconcontainer so that it works with konqueror as well) + - well, only if we want dropped icons to remain where they have been + dropped :) + We also need to store the desktop icons position, like was done in kfm. + and we need to do it for konqy as well. + +KDesktopIface* : DCOP interface for kdesktop, used by kfmclient + +lock* : screen saver/locker + +Libs used by KDesktop +====================== + +kdecore, kdeui, kfile - usual stuff :) +libkio - I/O stuff, mimetypes, services, registry +libkonq - properties dialog, templates ("new") menu, dir lister, settings + +Screensaver +=========== + +The screensaver now works in a similar way to xscreensaver, i.e. a driver +(kdesktop) provides the timeout, locking, and blanking functionality, but +does no actual drawing. A separate stand-alone program capable of +drawing on a supplied window is used to do the actual fancy graphics. +xscreensaver's "hacks" will work with the KDE screensaver engine. + +This makes adding new screensavers trivial, and means one less process that +must always be running (compared to KDE 1.x). + +The screensaver is controlled via DCOP: + +KScreensaverIface::configure() Reloads the screensaver config from desktoprc. +KScreensaverIface::lock() Locks the screen immediately. +KScreensaverIface::save() Saves the screen immediately. +KScreensaverIface::isEnabled() returns true if the screensaver is enabled. +KScreensaverIface::isBlanked() returns true if the screen is currently blank. + +Backgrounds +=========== + +The new background code is in bgrender.cpp and bgmanager.cpp. Some features: + +* Support for xearth like programs. +* Can export a pixmap of the desktop background for pseudo transparency. + +Multiple monitors +================= +Two monitors showing different things (not a mirror-setup) can be configured +in X to either use one X screen, or 2 X screens. Difference is that if I +drag a window from one monitor to the other the application gets asked to +repaint itself on a 2 screen setup and a simple move of the window will be +done in memory (by XFree) if you have a 1 screen setup. + +Monitors example: + +----+ +-----+ 2 monitors, with same resolution to keep it simple. + | | | | + +----+ +-----+ + +In case of 1 screen (xinerama) + +------------+ + | + desktopGeometry == screenGeometry == 3200 x 1200 + +------------+ + +In case of 2 screen (multihead) + +----+ +-----+ + | | | | desktopGeometry = 3200 x 1200 + +----+ +-----+ screenGeometry = 1600 x 1200 (for each monitor) + diff --git a/kdesktop/KBackgroundIface.h b/kdesktop/KBackgroundIface.h new file mode 100644 index 000000000..bd2a6ba05 --- /dev/null +++ b/kdesktop/KBackgroundIface.h @@ -0,0 +1,75 @@ +/** + * DCOP interface for the background manager. + */ + +#ifndef __KBackgroundIface_h__ +#define __KBackgroundIface_h__ + +#include +#include + +class KBackgroundIface : virtual public DCOPObject +{ + K_DCOP +public: + +k_dcop: + /** Reread the configuration */ + virtual void configure() = 0; + + /** Enable/disable export of the background pixmap. */ + virtual void setExport(int xport) = 0; + + /** Returns the export desktop pixmap state. */ + virtual bool isExport() = 0; + + /** Enable/disable common desktop background. */ + virtual void setCommon(int common) = 0; + + /** Returns the common desktop background state. */ + virtual bool isCommon() = 0; + + /** Change caching behaviour. + * @param bLimit Limit cache if not equal to zero. + * @param size Cache size in kilobytes. */ + virtual void setCache(int bLimit, int size) = 0; + + /** Change the wallpaper. + * @param desk desktop number, or 0 for the current visible desktop. + * @param wallpaper The (local) path to the wallpaper. + * @param mode The tiling mode. */ + virtual void setWallpaper(int desk, QString wallpaper, int mode) = 0; + + /** Change the wallpaper. + * @param wallpaper The (local) path to the wallpaper. + * @param mode The tiling mode. */ + virtual void setWallpaper(QString wallpaper, int mode) = 0; + + /** Set color. + * @param c The color. + * @param isColorA true for foreground and false for background color. */ + virtual void setColor(const QColor &c, bool isColorA) = 0; + + /** Change the wallpaper in "multi mode". */ + virtual void changeWallpaper() = 0; + + /** Enable/disable desktop background. */ + virtual void setBackgroundEnabled(const bool enable) = 0; + + /** Return the current wallpaper for specified desk. + * @param desk desktop number, or 0 for the current visible desktop. + */ + virtual QString currentWallpaper( int desk ) = 0; + + /** Return the wallpaper list for specified desk. + * @param desk desktop number, or 0 for the current visible desktop. + */ + virtual QStringList wallpaperList(int desk) = 0; + + /** Return the wallpaper files for specified desk. + * @param desk desktop number, or 0 for the current visible desktop. + */ + virtual QStringList wallpaperFiles(int desk) = 0; +}; + +#endif // __KBackgroundIface_h__ diff --git a/kdesktop/KDesktopIface.h b/kdesktop/KDesktopIface.h new file mode 100644 index 000000000..bbd1852ab --- /dev/null +++ b/kdesktop/KDesktopIface.h @@ -0,0 +1,113 @@ + +#ifndef __KDesktopIface_h__ +#define __KDesktopIface_h__ + +#include +#include +#include + +class KDesktopIface : virtual public DCOPObject +{ + K_DCOP +public: + +k_dcop: + /** + * @internal + */ + virtual void runAutoStart() = 0; + + /** + * Re-arrange the desktop icons. + */ + virtual void rearrangeIcons() = 0; + /** + * @deprecated + */ + void rearrangeIcons( bool ) { rearrangeIcons(); } + /** + * Lineup the desktop icons. + */ + virtual void lineupIcons() = 0; + /** + * Select all icons + */ + virtual void selectAll() = 0; + /** + * Unselect all icons + */ + virtual void unselectAll() = 0; + /** + * Refresh all icons + */ + virtual void refreshIcons() = 0; + /** + * @return the urls of selected icons + */ + virtual QStringList selectedURLs() = 0; + + /** + * Re-read KDesktop's configuration + */ + virtual void configure() = 0; + /** + * Display the "Run Command" dialog (minicli) + */ + virtual void popupExecuteCommand() = 0; + /** + * Display the "Run Command" dialog (minicli) and prefill + * @since 3.4 + */ + virtual void popupExecuteCommand(const QString& command) = 0; + /** + * Get the background dcop interface (KBackgroundIface) + */ + DCOPRef background() { return DCOPRef( "kdesktop", "KBackgroundIface" ); } + /** + * Get the screensaver dcop interface (KScreensaverIface) + */ + DCOPRef screenSaver() { return DCOPRef( "kdesktop", "KScreensaverIface" ); } + /** + * Full refresh + */ + virtual void refresh() = 0; + /** + * Bye bye + */ + virtual void logout() = 0; + /** + * Returns whether KDesktop uses a virtual root. + */ + virtual bool isVRoot() = 0; + /** + * Set whether KDesktop should use a virtual root. + */ + virtual void setVRoot( bool enable )= 0; + /** + * Clears the command history and completion items + */ + virtual void clearCommandHistory() = 0; + /** + * Returns whether icons are enabled on the desktop + */ + virtual bool isIconsEnabled() = 0; + /** + * Disable icons on the desktop. + */ + virtual void setIconsEnabled( bool enable )= 0; + + /** + * Should be called by any application that wants to tell KDesktop + * to switch desktops e.g. the minipager applet on kicker. + */ + virtual void switchDesktops( int delta ) = 0; + + /** + * slot for kicker; called when the number or size of panels change the available + * space for desktop icons + */ + virtual void desktopIconsAreaChanged(const QRect &area, int screen) = 0; +}; + +#endif + diff --git a/kdesktop/KScreensaverIface.h b/kdesktop/KScreensaverIface.h new file mode 100644 index 000000000..0ed26b67a --- /dev/null +++ b/kdesktop/KScreensaverIface.h @@ -0,0 +1,49 @@ + +#ifndef __KScreensaverIface_h__ +#define __KScreensaverIface_h__ + +#include + +class KScreensaverIface : virtual public DCOPObject +{ + K_DCOP +public: + +k_dcop: + /** Lock the screen now even if the screensaver does not lock by default. */ + virtual void lock() = 0; + + /** Save the screen now. If the user has locking enabled, the screen is + * locked also. */ + virtual void save() = 0; + + /** Quit the screensaver if it is running */ + virtual void quit() = 0; + + /** Is the screensaver enabled? */ + virtual bool isEnabled() = 0; + + /** + * Enable/disable the screensaver + * returns true if the action succeeded + */ + virtual bool enable( bool e ) = 0; + + /** Is the screen currently blanked? */ + virtual bool isBlanked() = 0; + + /** Reload the screensaver configuration. */ + virtual void configure() = 0; + + /** Only blank the screen (and possibly lock). Do not use a custom + * screen saver in the interest of saving battery. + */ + virtual void setBlankOnly( bool blankOnly ) = 0; + + /*** + * @internal + */ + virtual void saverLockReady() = 0; +}; + +#endif diff --git a/kdesktop/Makefile.am b/kdesktop/Makefile.am new file mode 100644 index 000000000..0c1041f19 --- /dev/null +++ b/kdesktop/Makefile.am @@ -0,0 +1,71 @@ +## Makefile.am of kdebase/kdesktop + +INCLUDES = -I$(top_srcdir)/kcontrol/background -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(all_includes) +kdesktop_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kdesktop_la_LIBADD = libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR) + +SUBDIRS = . lock pics patterns programs init kwebdesktop + +####### Files + +bin_PROGRAMS = kcheckrunning +lib_LTLIBRARIES = +kdeinit_LTLIBRARIES = kdesktop.la +noinst_LTLIBRARIES = libkdesktopsettings.la + +libkdesktopsettings_la_LDFLAGS = $(all_libraries) -no-undefined +libkdesktopsettings_la_LIBADD = $(LIB_KDECORE) +libkdesktopsettings_la_SOURCES = kdesktopsettings.kcfgc klaunchsettings.kcfgc + +kdesktop_la_SOURCES = main.cc krootwm.cc xautolock.cc kdiconview.cc desktop.cc \ + lockeng.cc KDesktopIface.skel \ + bgmanager.cc init.cc KScreensaverIface.skel \ + minicli.cpp KBackgroundIface.skel pixmapserver.cc kcustommenu.cc \ + startupid.cpp minicli_ui.ui xautolock_diy.c xautolock_engine.c \ + kshadowengine.cpp kshadowsettings.cpp \ + kdesktopshadowsettings.cpp kfileividesktop.cpp + +include_HEADERS = KDesktopIface.h KScreensaverIface.h KBackgroundIface.h + +noinst_HEADERS = desktop.h bgmanager.h krootwm.h \ + xautolock.h lockeng.h init.h minicli.h \ + pixmapserver.h startupid.h xautolock_c.h + +kcheckrunning_SOURCES = kcheckrunning.cpp +kcheckrunning_LDFLAGS = $(all_libraries) +kcheckrunning_LDADD = $(LIB_X11) + +METASOURCES = AUTO + +####### Build rules + +# List made with: grep -l kdesktopsettings.h *[pc] | sed -e 's/\.c.*$/.lo: kdesktopsettings.h/' +bgmanager.lo: kdesktopsettings.h +desktop.lo: kdesktopsettings.h +init.lo: kdesktopsettings.h +kdesktopsettings.lo: kdesktopsettings.h +kdiconview.lo: kdesktopsettings.h +krootwm.lo: kdesktopsettings.h +lockeng.lo: kdesktopsettings.h +main.lo: kdesktopsettings.h +minicli.lo: kdesktopsettings.h + +# List made with: grep -l klaunchsettings.h *[pc] | sed -e 's/\.c.*$/.lo: klaunchsettings.h/' +desktop.lo: klaunchsettings.h +klaunchsettings.lo: klaunchsettings.h +startupid.lo: klaunchsettings.h + +messages: rc.cpp + $(EXTRACTRC) lock/*.ui >> rc.cpp + $(XGETTEXT) lock/*.cc *.cc *.cpp *.h -o $(podir)/kdesktop.pot + +menu_DATA = kdesktop_custom_menu1 kdesktop_custom_menu2 +menudir = $(kde_confdir) + +autostart_DATA = kdesktop.desktop +autostartdir = $(datadir)/autostart + +konqservice_DATA = kdesktopSetAsBackground.desktop +konqservicedir = $(kde_datadir)/konqueror/servicemenus + +kde_kcfg_DATA = kdesktop.kcfg klaunch.kcfg diff --git a/kdesktop/bgmanager.cc b/kdesktop/bgmanager.cc new file mode 100644 index 000000000..62f97cecc --- /dev/null +++ b/kdesktop/bgmanager.cc @@ -0,0 +1,811 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; tab-width 8; indent-width 4; indent-mode cstyle; + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999,2000 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#include +#include "bgrender.h" +#include "bgmanager.h" +#include "bgdefaults.h" +#include "kdesktopsettings.h" +#include "bgsettings.h" + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifndef None +#define None 0L +#endif + +#include "pixmapserver.h" + +template class QPtrVector; +template class QPtrVector; +template class QMemArray; + +static Atom prop_root; +static bool properties_inited = false; + +/**** KBackgroundManager ****/ + +KBackgroundManager::KBackgroundManager(QWidget *desktop, KWinModule* kwinModule) + : DCOPObject("KBackgroundIface") +{ + if( !properties_inited ) + { + prop_root = XInternAtom(qt_xdisplay(), "_XROOTPMAP_ID", False); + properties_inited = true; + } + m_bBgInitDone = false; + m_bEnabled = true; + + m_pDesktop = desktop; + if (desktop == 0L) + desktop = QApplication::desktop()->screen(); + + m_Renderer.resize( 1 ); + m_Cache.resize( 1 ); + + m_Serial = 0; m_Hash = 0; + m_pConfig = KGlobal::config(); + m_bExport = m_bCommon = m_bInit = false; + m_pKwinmodule = kwinModule; + m_pPixmapServer = new KPixmapServer(); + m_xrootpmap = None; + + for (unsigned i=0; ipixmap = 0L; + m_Cache[i]->hash = 0; + m_Cache[i]->exp_from = -1; + m_Renderer.insert (i, new KVirtualBGRenderer(i,m_pConfig)); + connect(m_Renderer[i], SIGNAL(imageDone(int)), SLOT(slotImageDone(int))); + m_Renderer[i]->enableTiling( true ); // optimize + } + + configure(); + + m_pTimer = new QTimer(this); + connect(m_pTimer, SIGNAL(timeout()), SLOT(slotTimeout())); + m_pTimer->start( 60000 ); + + connect(m_pKwinmodule, SIGNAL(currentDesktopChanged(int)), + SLOT(slotChangeDesktop(int))); + connect(m_pKwinmodule, SIGNAL(numberOfDesktopsChanged(int)), + SLOT(slotChangeNumberOfDesktops(int))); + +#if (QT_VERSION-0 >= 0x030200) + connect( kapp->desktop(), SIGNAL( resized( int )), SLOT( desktopResized())); // RANDR support +#endif +} + + +KBackgroundManager::~KBackgroundManager() +{ + for (unsigned i=0; ipixmap; + delete m_Cache[i]; + } +} + + +void KBackgroundManager::applyExport(bool exp) +{ + if (exp == m_bExport) + return; + + // If export mode changed from true -> false, remove all shared pixmaps. + // If it changed false -> true force a redraw because the current screen + // image might not have an associated pixmap in the cache. + if (!exp) + { + for (unsigned i=0; i true, remove all cache entries, except + // at index 0 if exports are on. + if (m_bCommon) + { + if (!m_bExport) + removeCache(0); + for (unsigned i=1; ireparseConfiguration(); + KDesktopSettings::self()->readConfig(); + + // Read individual settings + KVirtualBGRenderer *r; + for (unsigned i=0; ihash(); + r->load(i,false); + if ((r->hash() != ohash)) + removeCache(i); + } + + applyCommon(KDesktopSettings::commonDesktop()); + + bool limit = KDesktopSettings::limitCache(); + int size = KDesktopSettings::cacheSize() * 1024; + applyCache(limit, size); + + // Repaint desktop + slotChangeDesktop(0); +} + + +int KBackgroundManager::realDesktop() +{ + int desk = m_pKwinmodule->currentDesktop(); + if (desk) desk--; + return desk; +} + + +int KBackgroundManager::effectiveDesktop() +{ + return m_bCommon ? 0 : realDesktop(); +} + + +/* + * Number of desktops changed + */ +void KBackgroundManager::slotChangeNumberOfDesktops(int num) +{ + if (m_Renderer.size() == (unsigned) num) + return; + + if (m_Renderer.size() > (unsigned) num) + { + for (unsigned i=num; iisActive()) + m_Renderer[i]->stop(); + delete m_Renderer[i]; + removeCache(i); + } + for (unsigned i=num; ipixmap = 0L; + m_Cache[i]->hash = 0; + m_Cache[i]->exp_from = -1; + m_Renderer.insert(i, new KVirtualBGRenderer(i,m_pConfig)); + connect(m_Renderer[i], SIGNAL(imageDone(int)), SLOT(slotImageDone(int))); + m_Renderer[i]->enableTiling( true ); // optimize + } + } +} + +/* + * Call this when the desktop has been changed. + * Desk is in KWin convention: [1..desks], instead of [0..desks-1]. + * 0 repaints the current desktop. + */ +void KBackgroundManager::slotChangeDesktop(int desk) +{ + if (desk == 0) + desk = realDesktop(); + else + desk--; + + // Lazy initialisation of # of desktops + if ((unsigned) desk >= m_Renderer.size()) + slotChangeNumberOfDesktops( m_pKwinmodule->numberOfDesktops() ); + + int edesk = effectiveDesktop(); + m_Serial++; + + // If the background is the same: do nothing + if (m_Hash == m_Renderer[edesk]->hash()) + { + exportBackground(m_Current, desk); + return; + } + m_Renderer[edesk]->stop(); + m_Renderer[edesk]->cleanup(); + + // If we have the background already rendered: set it + for (unsigned i=0; ipixmap) + continue; + if (m_Cache[i]->hash != m_Renderer[edesk]->hash()) + continue; +// kdDebug() << "slotChangeDesktop i=" << i << endl; + setPixmap(m_Cache[i]->pixmap, m_Cache[i]->hash, i); + m_Cache[i]->atime = m_Serial; + exportBackground(i, desk); + return; + } + + // Do we have this or an identical config already running? + for (unsigned i=0; ihash() == m_Renderer[edesk]->hash()) && + (m_Renderer[i]->isActive())) + return; + } + + renderBackground(edesk); +} + + +/* + * Share a desktop pixmap. + */ +void KBackgroundManager::exportBackground(int pixmap, int desk) +{ + if (!m_bExport || (m_Cache[desk]->exp_from == pixmap)) + return; + + m_Cache[desk]->exp_from = pixmap; + m_pPixmapServer->add(KRootPixmap::pixmapName(desk+1), + m_Cache[pixmap]->pixmap); + KIPC::sendMessageAll(KIPC::BackgroundChanged, desk+1); +} + + +/* + * Paint the pixmap to the root window. + */ +void KBackgroundManager::setPixmap(KPixmap *pm, int hash, int desk) +{ + if (m_pDesktop) + { + QScrollView* sv = dynamic_cast( m_pDesktop ); + if ( sv ) { + // Qt eats repaint events in this case :-(( + sv->viewport()->update(); + } + m_pDesktop->setErasePixmap(*pm); + m_pDesktop->repaint(); + static bool root_cleared = false; + if( !root_cleared ) + { // clear the root window pixmap set by kdm + root_cleared = true; + QTimer::singleShot( 0, this, SLOT( clearRoot())); + // but make the pixmap visible until m_pDesktop is visible + QApplication::desktop()->screen()->setErasePixmap(*pm); + QApplication::desktop()->screen()->erase(); + } + } + else + { + QApplication::desktop()->screen()->setErasePixmap(*pm); + QApplication::desktop()->screen()->erase(); + } + + // and export it via Esetroot-style for gnome/GTK apps to share in the pretties + Pixmap bgPm = pm->handle(); // fetch the actual X handle to it + //kdDebug() << "Esetroot compat: setting pixmap to " << bgPm << endl; + + // don't set the ESETROOT_PMAP_ID property - that would result in possible XKillClient() + // done on kdesktop + + XChangeProperty(qt_xdisplay(), qt_xrootwin(), prop_root, XA_PIXMAP, 32, PropModeReplace, + (unsigned char *) &bgPm, 1); + m_xrootpmap = bgPm; + + m_Hash = hash; + m_Current = desk; +} + +void KBackgroundManager::clearRoot() +{ + QApplication::desktop()->screen()->setErasePixmap( QPixmap()); + QApplication::desktop()->screen()->erase(); +} + +/* + * Start the render of a desktop background. + */ +void KBackgroundManager::renderBackground(int desk) +{ + KVirtualBGRenderer *r = m_Renderer[desk]; + if (r->isActive()) + { + kdDebug() << "renderer " << desk << " already active" << endl; + return; + } + + r->start(); +} + + +/* + * This slot is called when a renderer is done. + */ +void KBackgroundManager::slotImageDone(int desk) +{ + KPixmap *pm = new KPixmap(); + KVirtualBGRenderer *r = m_Renderer[desk]; + bool do_cleanup = true; + + *pm = r->pixmap(); + // If current: paint it + bool current = (r->hash() == m_Renderer[effectiveDesktop()]->hash()); + if (current) + { + setPixmap(pm, r->hash(), desk); + if (!m_bBgInitDone) + { + m_bBgInitDone = true; + emit initDone(); + QTimer::singleShot( 30000, this, SLOT( saveImages())); + do_cleanup = false; + } + } + if (m_bExport || !m_bCommon) + addCache(pm, r->hash(), desk); + else + delete pm; + + if (current) + exportBackground(desk, realDesktop()); + + if( do_cleanup ) + { + r->saveCacheFile(); + r->cleanup(); + } +} + + +void KBackgroundManager::saveImages() +{ + for (unsigned i=0; isaveCacheFile(); + m_Renderer[i]->cleanup(); + } +} + +/* + * Size in bytes of a QPixmap. For use in the pixmap cache. + */ +int KBackgroundManager::pixmapSize(QPixmap *pm) +{ + return (pm->width() * pm->height()) * ((pm->depth() + 7) / 8); +} + + +/* + * Total size of the pixmap cache. + */ +int KBackgroundManager::cacheSize() +{ + int total = 0; + for (unsigned i=0; ipixmap) + total += pixmapSize(m_Cache[i]->pixmap); + } + return total; +} + + +/* + * Remove an entry from the pixmap cache. + */ +void KBackgroundManager::removeCache(int desk) +{ + if (m_bExport) + m_pPixmapServer->remove(KRootPixmap::pixmapName(desk+1)); + else + delete m_Cache[desk]->pixmap; + m_Cache[desk]->pixmap = 0L; + m_Cache[desk]->hash = 0; + m_Cache[desk]->exp_from = -1; + m_Cache[desk]->atime = 0; + + // Remove cache entries pointing to the removed entry + for (unsigned i=0; iexp_from == desk) + { + assert(m_bExport); + m_Cache[i]->exp_from = -1; + m_pPixmapServer->remove(KRootPixmap::pixmapName(i+1)); + } + } +} + + +/* + * Try to free up to size bytes from the cache. + */ +bool KBackgroundManager::freeCache(int size) +{ + if (m_bExport || !m_bLimitCache) + return true; + + // If it doesn't fit at all, return now. + if (size > m_CacheLimit) + return false; + + // If cache is too full, purge it (LRU) + while (size+cacheSize() > m_CacheLimit) + { + int j, min; + min = m_Serial+1; j = 0; + for (unsigned i=0; ipixmap && (m_Cache[i]->atime < min)) + { + min = m_Cache[i]->atime; + j = i; + } + } + removeCache(j); + } + return true; +} + + +/* + * Try to add a pixmap to the pixmap cache. We don't use QPixmapCache here + * because if we're exporting pixmaps, this needs special care. + */ +void KBackgroundManager::addCache(KPixmap *pm, int hash, int desk) +{ + if (m_Cache[desk]->pixmap) + removeCache(desk); + + if (m_bLimitCache && !m_bExport && !freeCache(pixmapSize(pm))) + { + // pixmap does not fit in cache + delete pm; + return; + } + + m_Cache[desk]->pixmap = pm; + m_Cache[desk]->hash = hash; + m_Cache[desk]->atime = m_Serial; + m_Cache[desk]->exp_from = -1; + exportBackground(desk, desk); +} + +/* + * Called every minute to check if we need to rerun a background program. + * or change a wallpaper. + */ +void KBackgroundManager::slotTimeout() +{ + QMemArray running(m_Renderer.size()); + running.fill(0); + + int NumDesks = m_Renderer.size(); + if (m_bCommon) + NumDesks = 1; + + int edesk = effectiveDesktop(); + + for (int i=0; ineedProgramUpdate()) + { + r->programUpdate(); + change = true; + } + + if (r->needWallpaperChange()) + { + r->changeWallpaper(); + change = true; + } + + if (change && (i == edesk)) + { + running[i] = r->hash(); + r->start(); + } + } +} + +// Return a valid desk number. +int KBackgroundManager::validateDesk(int desk) +{ + if (desk > (int)m_Renderer.size()) + slotChangeNumberOfDesktops( m_pKwinmodule->numberOfDesktops() ); + + if ( (desk <= 0) || (desk > (int)m_Renderer.size()) ) + return realDesktop(); + + return desk - 1; +} + +// DCOP exported +// Return current wallpaper for specified desk. +// 0 is for the current visible desktop. +QString KBackgroundManager::currentWallpaper(int desk) +{ + //TODO Is the behaviour of this function appropriate for multiple screens? + KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0); + + return r->currentWallpaper(); +} + +// DCOP exported +void KBackgroundManager::changeWallpaper() +{ + KVirtualBGRenderer *r = m_Renderer[effectiveDesktop()]; + + r->changeWallpaper(); + slotChangeDesktop(0); +} + +// DCOP exported +void KBackgroundManager::setExport(int _export) +{ + kdDebug() << "KBackgroundManager enabling exports.\n"; + applyExport(_export); + slotChangeDesktop(0); +} + +// DCOP exported +void KBackgroundManager::setCommon(int common) +{ + applyCommon(common); + KDesktopSettings::setCommonDesktop( m_bCommon ); + KDesktopSettings::writeConfig(); + slotChangeDesktop(0); +} + +// DCOP exported +void KBackgroundManager::setWallpaper(QString wallpaper, int mode) +{ + if (mode < 0 || mode >= KBackgroundSettings::lastWallpaperMode) { + kdDebug() << "Invalid background mode " << mode << " passed to " << k_funcinfo << "\n"; + return; + } + + //TODO Is the behaviour of this function appropriate for multiple screens? + for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i) + { + KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i); + r->stop(); + r->setWallpaperMode(mode); + r->setMultiWallpaperMode(KBackgroundSettings::NoMulti); + r->setWallpaper(wallpaper); + r->writeSettings(); + } + slotChangeDesktop(0); +} + +void KBackgroundManager::setWallpaper(QString wallpaper) +{ + //TODO Is the behaviour of this function appropriate for multiple screens? + KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(0); + int mode = r->wallpaperMode(); + if (mode == KBackgroundSettings::NoWallpaper) + mode = KBackgroundSettings::Tiled; + setWallpaper(wallpaper, mode); +} + +// DCOP exported +// Returns the filenames of all wallpaper entries for specified desk +// 0 is for current visible desktop. +QStringList KBackgroundManager::wallpaperFiles(int desk) +{ + //TODO Is the behaviour of this function appropriate for multiple screens? + KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0); + + return r->wallpaperFiles(); +} + +// DCOP exported +// Returns the list of wallpaper entries (viewable in background slide +// show window) for specified desk. 0 is for current visible desktop. +QStringList KBackgroundManager::wallpaperList(int desk) +{ + //TODO Is the behaviour of this function appropriate for multiple screens? + KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);; + + return r->wallpaperList(); +} + +// DCOP exported +void KBackgroundManager::setCache( int bLimit, int size ) +{ + applyCache( bLimit, size*1024 ); + KDesktopSettings::setLimitCache( (bool) bLimit ); + KDesktopSettings::setCacheSize( size ); + KDesktopSettings::writeConfig(); +} + +// DCOP exported +void KBackgroundManager::setWallpaper(int desk, QString wallpaper, int mode) +{ + if (mode < 0 || mode >= KBackgroundSettings::lastWallpaperMode) { + kdDebug() << "Invalid background mode " << mode << " passed to " << k_funcinfo << "\n"; + return; + } + + int sdesk = validateDesk(desk); + + //TODO Is the behaviour of this function appropriate for multiple screens? + for (unsigned i=0; i < m_Renderer[sdesk]->numRenderers(); ++i) + { + KBackgroundRenderer *r = m_Renderer[sdesk]->renderer(i); + + setCommon(false); // Force each desktop to have it's own wallpaper + + r->stop(); + r->setWallpaperMode(mode); + r->setMultiWallpaperMode(KBackgroundSettings::NoMulti); + r->setWallpaper(wallpaper); + r->writeSettings(); + } + slotChangeDesktop(sdesk); +} + +void KBackgroundManager::repaintBackground() +{ + if (m_pDesktop) + m_pDesktop->repaint(); + else + QApplication::desktop()->screen()->erase(); +} + +void KBackgroundManager::desktopResized() +{ + for (unsigned i=0; iisActive()) + r->stop(); + removeCache(i); + // make the renderer update its desktop size + r->desktopResized(); + } + m_Hash = 0; + if( m_pDesktop ) + m_pDesktop->resize( kapp->desktop()->size()); + // Repaint desktop + slotChangeDesktop(0); +} + +// DCOP exported +void KBackgroundManager::setColor(const QColor & c, bool isColorA) +{ + //TODO Is the behaviour of this function appropriate for multiple screens? + for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i) + { + KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i); + r->stop(); + + if (isColorA) + r->setColorA(c); + else + r->setColorB(c); + + int mode = r->backgroundMode(); + if (mode == KBackgroundSettings::Program) + mode = KBackgroundSettings::Flat; + + if (!isColorA && (mode == KBackgroundSettings::Flat)) + mode = KBackgroundSettings::VerticalGradient; + r->setBackgroundMode(mode); + + r->writeSettings(); + } + slotChangeDesktop(0); +} + +void KBackgroundManager::setBackgroundEnabled( const bool enable ) +{ + if (m_bEnabled == enable) + return; + + m_bEnabled= enable; + + int NumDesks = m_Renderer.size(); + if (m_bCommon) + NumDesks = 1; + + for (int i=0; isetEnabled(enable); + } + slotChangeDesktop(0); +} + +#include "bgmanager.moc" diff --git a/kdesktop/bgmanager.h b/kdesktop/bgmanager.h new file mode 100644 index 000000000..e029cf6cd --- /dev/null +++ b/kdesktop/bgmanager.h @@ -0,0 +1,126 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kdesktop. + * Copyright (C) 1999,2000 Geert Jansen + * + * You can Freely distribute this program under the GNU General Public + * License. See the file "COPYING" for the exact licensing terms. + */ + +#ifndef __BGManager_h_Included__ +#define __BGManager_h_Included__ + +#include +#include + +#include + +class KConfig; +class QTimer; +class QPixmap; +class KPopupMenu; +class KWinModule; +class KPixmap; +class KVirtualBGRenderer; +class KPixmapServer; + +/** + * Internal struct for KBackgroundManager. + */ +struct KBackgroundCacheEntry +{ + int hash; + int atime; + int exp_from; + KPixmap *pixmap; +}; + + +/** + * Background manager for KDE. This class is to be used in kdesktop. Usage is + * very simple: instantiate this class once and the desktop background will + * be painted automatically from now on. + * + * The background manager also has a DCOP interface to remotely control its + * operation. See KBackgroundIface.h for details. + */ + +class KBackgroundManager + : public QObject, + virtual public KBackgroundIface +{ + Q_OBJECT + +public: + KBackgroundManager(QWidget *desktop, KWinModule* kwinModule); + ~KBackgroundManager(); + + void configure(); + void setCommon(int); + bool isCommon() { return m_bCommon; }; + void setExport(int); + bool isExport() { return m_bExport; }; + void setCache(int, int); + void setWallpaper(int desk, QString wallpaper, int mode); + void setWallpaper(QString wallpaper, int mode); + void setWallpaper(QString wallpaper); + void changeWallpaper(); + QString currentWallpaper(int desk); + void setColor(const QColor & c, bool isColorA = true); + void setBackgroundEnabled(const bool enable); + QStringList wallpaperList(int desk); + QStringList wallpaperFiles(int desk); + +signals: + void initDone(); + +private slots: + void slotTimeout(); + void slotImageDone(int desk); + void slotChangeDesktop(int); + void slotChangeNumberOfDesktops(int); + void repaintBackground(); + void desktopResized(); + void clearRoot(); + void saveImages(); + +private: + void applyCommon(bool common); + void applyExport(bool _export); + void applyCache(bool limit, int size); + + int realDesktop(); + int effectiveDesktop(); + int validateDesk(int desk); + + void renderBackground(int desk); + void exportBackground(int pixmap, int desk); + int pixmapSize(QPixmap *pm); + int cacheSize(); + void removeCache(int desk); + bool freeCache(int size); + void addCache(KPixmap *pm, int hash, int desk); + void setPixmap(KPixmap *pm, int hash, int desk); + + bool m_bExport, m_bCommon; + bool m_bLimitCache, m_bInit; + bool m_bBgInitDone; + bool m_bEnabled; + + int m_CacheLimit; + int m_Serial, m_Hash, m_Current; + + KConfig *m_pConfig; + QWidget *m_pDesktop; + QTimer *m_pTimer; + + QPtrVector m_Renderer; + QPtrVector m_Cache; + + KWinModule *m_pKwinmodule; + KPixmapServer *m_pPixmapServer; + + unsigned long m_xrootpmap; +}; + +#endif // __BGManager_h_Included__ diff --git a/kdesktop/configure.in.in b/kdesktop/configure.in.in new file mode 100644 index 000000000..fcc161c1e --- /dev/null +++ b/kdesktop/configure.in.in @@ -0,0 +1,39 @@ +xss_save_ldflags="$LDFLAGS" +LDFLAGS="$X_LDFLAGS" + +LIB_XSS= + +AC_ARG_WITH([xscreensaver], + AC_HELP_STRING([--without-xscreensaver], [Disable XScreenSaver support (default: check)]) ) + +if test "x$with_xscreensaver" != "xno"; then + KDE_CHECK_HEADER(X11/extensions/scrnsaver.h, + [ + AC_CHECK_LIB(Xext,XScreenSaverQueryInfo, + [ + AC_DEFINE(HAVE_XSCREENSAVER, 1, [Define if you have the XScreenSaver extension]) + LIB_XSS="-lXext" + ], + [ + ld_shared_flag= + xss_save_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" + KDE_CHECK_COMPILER_FLAG(shared, [ld_shared_flag="-shared"]) + AC_CHECK_LIB(Xss,XScreenSaverQueryInfo, + [ + AC_DEFINE(HAVE_XSCREENSAVER, 1, [Define if you have the XScreenSaver extension]) + LIB_XSS="-lXss" + ], + [], + [ $ld_shared_flag $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS ]) + CXXFLAGS="$xss_save_cxxflags" + ], + [ $X_PRE_LIBS -lX11 $X_EXTRA_LIBS ]) + ], [], + [ + #include + ] ) +fi + +AC_SUBST(LIB_XSS) +LDFLAGS="$xss_save_ldflags" diff --git a/kdesktop/desktop.cc b/kdesktop/desktop.cc new file mode 100644 index 000000000..6e2b1e9c0 --- /dev/null +++ b/kdesktop/desktop.cc @@ -0,0 +1,986 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis + + 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 "desktop.h" +#include "krootwm.h" +#include "bgmanager.h" +#include "bgsettings.h" +#include "startupid.h" +#include "kdiconview.h" +#include "minicli.h" +#include "kdesktopsettings.h" +#include "klaunchsettings.h" + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// Create the equivalent of KAccelBase::connectItem +// and then remove this include and fix reconnects in initRoot() -- ellis +//#include + +extern int kdesktop_screen_number; +extern QCString kdesktop_name, kicker_name, kwin_name; + +KRootWidget::KRootWidget() : QObject() +{ + kapp->desktop()->installEventFilter(this); + kapp->desktop()->setAcceptDrops( true ); +} + +bool KRootWidget::eventFilter ( QObject *, QEvent * e ) +{ + if (e->type() == QEvent::MouseButtonPress) + { + QMouseEvent *me = static_cast(e); + KRootWm::self()->mousePressed( me->globalPos(), me->button() ); + return true; + } + else if (e->type() == QEvent::Wheel) + { + QWheelEvent *we = static_cast(e); + emit wheelRolled(we->delta()); + return true; + } + else if ( e->type() == QEvent::DragEnter ) + { + QDragEnterEvent* de = static_cast( e ); + bool b = !KGlobal::config()->isImmutable() && !KGlobal::dirs()->isRestrictedResource( "wallpaper" ); + + bool imageURL = false; + if ( KURLDrag::canDecode( de ) ) + { + KURL::List list; + KURLDrag::decode( de, list ); + KURL url = list.first(); + KMimeType::Ptr mime = KMimeType::findByURL( url ); + if ( !KImageIO::type( url.path() ).isEmpty() || + KImageIO::isSupported( mime->name(), KImageIO::Reading ) || mime->is( "image/svg+xml" ) ) + imageURL = true; + } + + b = b && ( KColorDrag::canDecode( de ) || QImageDrag::canDecode( de ) || imageURL ); + de->accept( b ); + return true; + } + else if ( e->type() == QEvent::Drop ) + { + QDropEvent* de = static_cast( e ); + if ( KColorDrag::canDecode( de ) ) + emit colorDropEvent( de ); + else if ( QImageDrag::canDecode( de ) ) + emit imageDropEvent( de ); + else if ( KURLDrag::canDecode( de ) ) { + KURL::List list; + KURLDrag::decode( de, list ); + KURL url = list.first(); + emit newWallpaper( url ); + } + return true; + } + return false; // Don't filter. +} + +// ----------------------------------------------------------------------------- +#define DEFAULT_DELETEACTION 1 + +KDesktop::WheelDirection KDesktop::m_eWheelDirection = KDesktop::m_eDefaultWheelDirection; +const char* KDesktop::m_wheelDirectionStrings[2] = { "Forward", "Reverse" }; + +KDesktop::KDesktop( bool x_root_hack, bool wait_for_kded ) : + DCOPObject( "KDesktopIface" ), + QWidget( 0L, "desktop", WResizeNoErase | ( x_root_hack ? (WStyle_Customize | WStyle_NoBorder) : 0) ), + // those two WStyle_ break kdesktop when the root-hack isn't used (no Dnd) + startup_id( NULL ), m_waitForKicker(0) +{ + m_bWaitForKded = wait_for_kded; + m_miniCli = 0; // created on demand + keys = 0; // created later + KGlobal::locale()->insertCatalogue("kdesktop"); + KGlobal::locale()->insertCatalogue("libkonq"); // needed for apps using libkonq + KGlobal::locale()->insertCatalogue("libdmctl"); + + setCaption( "KDE Desktop"); + + setAcceptDrops(true); // WStyle_Customize seems to disable that + m_pKwinmodule = new KWinModule( this ); + + kapp->dcopClient()->setNotifications(true); + kapp->dcopClient()->connectDCOPSignal(kicker_name, kicker_name, "desktopIconsAreaChanged(QRect, int)", + "KDesktopIface", "desktopIconsAreaChanged(QRect, int)", false); + + // Dont repaint on configuration changes during construction + m_bInit = true; + + // It's the child widget that gets the focus, not us + setFocusPolicy( NoFocus ); + + if ( x_root_hack ) + { + // this is a ugly hack to make Dnd work + // Matthias told me that it won't be necessary with kwin + // actually my first try with ICCCM (Dirk) :-) + unsigned long data[2]; + data[0] = (unsigned long) 1; + data[1] = (unsigned long) 0; // None; (Werner) + Atom wm_state = XInternAtom(qt_xdisplay(), "WM_STATE", False); + XChangeProperty(qt_xdisplay(), winId(), wm_state, wm_state, 32, + PropModeReplace, (unsigned char *)data, 2); + + } + + setGeometry( QApplication::desktop()->geometry() ); + lower(); + + connect( kapp, SIGNAL( shutDown() ), + this, SLOT( slotShutdown() ) ); + + connect(kapp, SIGNAL(settingsChanged(int)), + this, SLOT(slotSettingsChanged(int))); + kapp->addKipcEventMask(KIPC::SettingsChanged); + + kapp->addKipcEventMask(KIPC::IconChanged); + connect(kapp, SIGNAL(iconChanged(int)), this, SLOT(slotIconChanged(int))); + + connect(KSycoca::self(), SIGNAL(databaseChanged()), + this, SLOT(slotDatabaseChanged())); + + m_pIconView = 0; + m_pRootWidget = 0; + bgMgr = 0; + initRoot(); + + QTimer::singleShot(0, this, SLOT( slotStart() )); + +#if (QT_VERSION-0 >= 0x030200) // XRANDR support + connect( kapp->desktop(), SIGNAL( resized( int )), SLOT( desktopResized())); +#endif +} + +void +KDesktop::initRoot() +{ + Display *dpy = qt_xdisplay(); + Window root = RootWindow(dpy, kdesktop_screen_number); + XDefineCursor(dpy, root, cursor().handle()); + + m_bDesktopEnabled = KDesktopSettings::desktopEnabled(); + if ( !m_bDesktopEnabled && !m_pRootWidget ) + { + hide(); + delete bgMgr; + bgMgr = 0; + if ( m_pIconView ) + m_pIconView->saveIconPositions(); + delete m_pIconView; + m_pIconView = 0; + + { // trigger creation of QToolTipManager, it does XSelectInput() on the root window + QWidget w; + QToolTip::add( &w, "foo" ); + } + // NOTE: If mouse clicks stop working again, it's most probably something doing XSelectInput() + // on the root window after this, and setting it to some fixed value instead of adding its mask. + XWindowAttributes attrs; + XGetWindowAttributes(dpy, root, &attrs); + XSelectInput(dpy, root, attrs.your_event_mask | ButtonPressMask); + + m_pRootWidget = new KRootWidget; + connect(m_pRootWidget, SIGNAL(wheelRolled(int)), this, SLOT(slotSwitchDesktops(int))); + connect(m_pRootWidget, SIGNAL(colorDropEvent(QDropEvent*)), this, SLOT(handleColorDropEvent(QDropEvent*)) ); + connect(m_pRootWidget, SIGNAL(imageDropEvent(QDropEvent*)), this, SLOT(handleImageDropEvent(QDropEvent*)) ); + connect(m_pRootWidget, SIGNAL(newWallpaper(const KURL&)), this, SLOT(slotNewWallpaper(const KURL&)) ); + + // Geert Jansen: backgroundmanager belongs here + // TODO tell KBackgroundManager if we change widget() + bgMgr = new KBackgroundManager( m_pIconView, m_pKwinmodule ); + bgMgr->setExport(1); + connect( bgMgr, SIGNAL( initDone()), SLOT( backgroundInitDone())); + if (!m_bInit) + { + delete KRootWm::self(); + KRootWm* krootwm = new KRootWm( this ); // handler for root menu (used by kdesktop on RMB click) + keys->setSlot("Lock Session", krootwm, SLOT(slotLock())); + keys->updateConnections(); + } + } + else if (m_bDesktopEnabled && !m_pIconView) + { + delete bgMgr; + bgMgr = 0; + delete m_pRootWidget; + m_pRootWidget = 0; + m_pIconView = new KDIconView( this, 0 ); + connect( m_pIconView, SIGNAL( imageDropEvent( QDropEvent * ) ), + this, SLOT( handleImageDropEvent( QDropEvent * ) ) ); + connect( m_pIconView, SIGNAL( colorDropEvent( QDropEvent * ) ), + this, SLOT( handleColorDropEvent( QDropEvent * ) ) ); + connect( m_pIconView, SIGNAL( newWallpaper( const KURL & ) ), + this, SLOT( slotNewWallpaper( const KURL & ) ) ); + connect( m_pIconView, SIGNAL( wheelRolled( int ) ), + this, SLOT( slotSwitchDesktops( int ) ) ); + + // All the QScrollView/QWidget-specific stuff should go here, so that we can use + // another qscrollview/widget instead of the iconview and use the same code + m_pIconView->setVScrollBarMode( QScrollView::AlwaysOff ); + m_pIconView->setHScrollBarMode( QScrollView::AlwaysOff ); + m_pIconView->setDragAutoScroll( false ); + m_pIconView->setFrameStyle( QFrame::NoFrame ); + m_pIconView->viewport()->setBackgroundMode( X11ParentRelative ); + m_pIconView->setFocusPolicy( StrongFocus ); + m_pIconView->viewport()->setFocusPolicy( StrongFocus ); + m_pIconView->setGeometry( geometry() ); + m_pIconView->show(); + + // Geert Jansen: backgroundmanager belongs here + // TODO tell KBackgroundManager if we change widget() + bgMgr = new KBackgroundManager( m_pIconView, m_pKwinmodule ); + bgMgr->setExport(1); + connect( bgMgr, SIGNAL( initDone()), SLOT( backgroundInitDone())); + + // make sure it is initialized before we first call updateWorkArea() + m_pIconView->initConfig( m_bInit ); + + // set the size of the area for desktop icons placement + { + QByteArray data, result; + QDataStream arg(data, IO_WriteOnly); + arg << kdesktop_screen_number; + QCString replyType; + QRect area; + + if ( kapp->dcopClient()->call(kicker_name, kicker_name, "desktopIconsArea(int)", + data, replyType, result, false, 2000) ) + { + QDataStream res(result, IO_ReadOnly); + res >> area; + + m_pIconView->updateWorkArea(area); + } + else + if ( m_bInit ) + { + // if we failed to get the information from kicker wait a little - probably + // this is the KDE startup and kicker is simply not running yet + m_waitForKicker = new QTimer(this); + connect(m_waitForKicker, SIGNAL(timeout()), this, SLOT(slotNoKicker())); + m_waitForKicker->start(15000, true); + } + else // we are not called from the ctor, so kicker should already run + { + area = kwinModule()->workArea(kwinModule()->currentDesktop()); + m_pIconView->updateWorkArea(area); + } + } + + if (!m_bInit) + { + m_pIconView->start(); + delete KRootWm::self(); + KRootWm* krootwm = new KRootWm( this ); // handler for root menu (used by kdesktop on RMB click) + keys->setSlot("Lock Session", krootwm, SLOT(slotLock())); + keys->updateConnections(); + } + } else { + DCOPRef r( "ksmserver", "ksmserver" ); + r.send( "resumeStartup", QCString( "kdesktop" )); + } + + KWin::setType( winId(), NET::Desktop ); + KWin::setState( winId(), NET::SkipPager ); + KWin::setOnAllDesktops( winId(), true ); +} + +void KDesktop::slotNoKicker() +{ + kdDebug(1204) << "KDesktop::slotNoKicker ... kicker did not respond" << endl; + // up till now, we got no desktopIconsArea from kicker - probably + // it's not running, so use the area from KWinModule + m_pIconView->updateWorkArea(kwinModule()->workArea(kwinModule()->currentDesktop())); +} + +void +KDesktop::backgroundInitDone() +{ + //kdDebug(1204) << "KDesktop::backgroundInitDone" << endl; + // avoid flicker + if (m_bDesktopEnabled) + { + const QPixmap *bg = QApplication::desktop()->screen()->backgroundPixmap(); + if ( bg ) + m_pIconView->setErasePixmap( *bg ); + + show(); + kapp->sendPostedEvents(); + } + + DCOPRef r( "ksmserver", "ksmserver" ); + r.send( "resumeStartup", QCString( "kdesktop" )); +} + +void +KDesktop::slotStart() +{ + //kdDebug(1204) << "KDesktop::slotStart" << endl; + if (!m_bInit) return; + + // In case we started without database + KImageIO::registerFormats(); + + initConfig(); + +// if (m_bDesktopEnabled) +// { +// // We need to be visible in order to insert icons, even if the background isn't ready yet... + +// show(); +// } + + // Now we may react to configuration changes + m_bInit = false; + + if (m_pIconView) + m_pIconView->start(); + + // Global keys + keys = new KGlobalAccel( this ); + (void) new KRootWm( this ); + +#include "kdesktopbindings.cpp" + + keys->readSettings(); + keys->updateConnections(); + + connect(kapp, SIGNAL(appearanceChanged()), SLOT(slotConfigure())); + + QTimer::singleShot(300, this, SLOT( slotUpAndRunning() )); +} + +void +KDesktop::runAutoStart() +{ + // now let's execute all the stuff in the autostart folder. + // the stuff will actually be really executed when the event loop is + // entered, since KRun internally uses a QTimer + QDir dir( KGlobalSettings::autostartPath() ); + QStringList entries = dir.entryList( QDir::Files ); + QStringList::Iterator it = entries.begin(); + QStringList::Iterator end = entries.end(); + for (; it != end; ++it ) + { + // Don't execute backup files + if ( (*it).right(1) != "~" && (*it).right(4) != ".bak" && + ( (*it)[0] != '%' || (*it).right(1) != "%" ) && + ( (*it)[0] != '#' || (*it).right(1) != "#" ) ) + { + KURL url; + url.setPath( dir.absPath() + '/' + (*it) ); + (void) new KRun( url, 0, true ); + } + } +} + +// ----------------------------------------------------------------------------- + +KDesktop::~KDesktop() +{ + delete m_miniCli; + m_miniCli = 0; // see #120382 + delete bgMgr; + bgMgr = 0; + delete startup_id; +} + +// ----------------------------------------------------------------------------- + +void KDesktop::initConfig() +{ + if (m_pIconView) + m_pIconView->initConfig( m_bInit ); + + if ( keys ) + { + keys->readSettings(); + keys->updateConnections(); + } + + KLaunchSettings::self()->readConfig(); + if( !KLaunchSettings::busyCursor() ) + { + delete startup_id; + startup_id = NULL; + } + else + { + if( startup_id == NULL ) + startup_id = new StartupId; + startup_id->configure(); + } + + set_vroot = KDesktopSettings::setVRoot(); + slotSetVRoot(); // start timer + + m_bWheelSwitchesWorkspace = KDesktopSettings::wheelSwitchesWorkspace(); + + const char* forward_string = m_wheelDirectionStrings[Forward]; + m_eWheelDirection = + (KDesktopSettings::wheelDirection() == forward_string) ? Forward : Reverse; +} + +// ----------------------------------------------------------------------------- + +void KDesktop::slotExecuteCommand() +{ + // this function needs to be duplicated since it appears that one + // cannot have a 'slot' be a DCOP method. if this changes in the + // future, then 'slotExecuteCommand' and 'popupExecuteCommand' can + // merge into one slot. + popupExecuteCommand(); +} + +/* + Shows minicli + */ +void KDesktop::popupExecuteCommand() +{ + popupExecuteCommand(""); +} + +void KDesktop::popupExecuteCommand(const QString& command) +{ + if (m_bInit) + return; + + if (!kapp->authorize("run_command")) + return; + + // Created on demand + if ( !m_miniCli ) + { + m_miniCli = new Minicli( this ); + m_miniCli->adjustSize(); // for the centering below + } + + if (!command.isEmpty()) + m_miniCli->setCommand(command); + + // Move minicli to the current desktop + NETWinInfo info( qt_xdisplay(), m_miniCli->winId(), qt_xrootwin(), NET::WMDesktop ); + int currentDesktop = kwinModule()->currentDesktop(); + if ( info.desktop() != currentDesktop ) + info.setDesktop( currentDesktop ); + + if ( m_miniCli->isVisible() ) { + KWin::forceActiveWindow( m_miniCli->winId() ); + } else { + QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); + m_miniCli->move(rect.x() + (rect.width() - m_miniCli->width())/2, + rect.y() + (rect.height() - m_miniCli->height())/2); + m_miniCli->show(); // non-modal + } +} + +void KDesktop::slotSwitchUser() +{ + KRootWm::self()->slotSwitchUser(); +} + +void KDesktop::slotShowWindowList() +{ + KRootWm::self()->slotWindowList(); +} + +void KDesktop::slotShowTaskManager() +{ + //kdDebug(1204) << "Launching KSysGuard..." << endl; + KProcess* p = new KProcess; + Q_CHECK_PTR(p); + + *p << "ksysguard"; + *p << "--showprocesses"; + + p->start(KProcess::DontCare); + + delete p; +} + +// ----------------------------------------------------------------------------- + +void KDesktop::rearrangeIcons() +{ + if (m_pIconView) + m_pIconView->rearrangeIcons(); +} + +void KDesktop::lineupIcons() +{ + if (m_pIconView) + m_pIconView->lineupIcons(); +} + +void KDesktop::selectAll() +{ + if (m_pIconView) + m_pIconView->selectAll( true ); +} + +void KDesktop::unselectAll() +{ + if (m_pIconView) + m_pIconView->selectAll( false ); +} + +QStringList KDesktop::selectedURLs() +{ + if (m_pIconView) + return m_pIconView->selectedURLs(); + return QStringList(); +} + +void KDesktop::refreshIcons() +{ + if (m_pIconView) + m_pIconView->refreshIcons(); +} + +KActionCollection * KDesktop::actionCollection() +{ + if (!m_pIconView) + return 0; + return m_pIconView->actionCollection(); +} + +KURL KDesktop::url() const +{ + if (m_pIconView) + return m_pIconView->url(); + return KURL(); +} + +// ----------------------------------------------------------------------------- + +void KDesktop::slotConfigure() +{ + configure(); +} + +void KDesktop::configure() +{ + // re-read configuration and apply it + KGlobal::config()->reparseConfiguration(); + KDesktopSettings::self()->readConfig(); + + // If we have done start() already, then re-configure. + // Otherwise, start() will call initConfig anyway + if (!m_bInit) + { + initRoot(); + initConfig(); + KRootWm::self()->initConfig(); + } + + if (keys) + { + keys->readSettings(); + keys->updateConnections(); + } +} + +void KDesktop::slotSettingsChanged(int category) +{ + //kdDebug(1204) << "KDesktop::slotSettingsChanged" << endl; + if (category == KApplication::SETTINGS_PATHS) + { + kdDebug(1204) << "KDesktop::slotSettingsChanged SETTINGS_PATHS" << endl; + if (m_pIconView) + m_pIconView->recheckDesktopURL(); + } + else if (category == KApplication::SETTINGS_SHORTCUTS) + { + kdDebug(1204) << "KDesktop::slotSettingsChanged SETTINGS_SHORTCUTS" << endl; + keys->readSettings(); + keys->updateConnections(); + } +} + +void KDesktop::slotIconChanged(int group) +{ + if ( group == KIcon::Desktop ) + { + kdDebug(1204) << "KDesktop::slotIconChanged" << endl; + refresh(); + } +} + +void KDesktop::slotDatabaseChanged() +{ + //kdDebug(1204) << "KDesktop::slotDatabaseChanged" << endl; + if (m_bInit) // kded is done, now we can "start" for real + slotStart(); + if (m_pIconView && KSycoca::isChanged("mimetypes")) + m_pIconView->refreshMimeTypes(); +} + +void KDesktop::refresh() +{ + // George Staikos 3/14/01 + // This bit will just refresh the desktop and icons. Now I have code + // in KWin to do a complete refresh so this isn't really needed. + // I'll leave it in here incase the plan is changed again +#if 0 + m_bNeedRepaint |= 1; + updateWorkArea(); +#endif + kapp->dcopClient()->send( kwin_name, "", "refresh()", ""); + refreshIcons(); +} + +// ----------------------------------------------------------------------------- + +void KDesktop::slotSetVRoot() +{ + if (!m_pIconView) + return; + + if (KWin::windowInfo(winId()).mappingState() == NET::Withdrawn) { + QTimer::singleShot(100, this, SLOT(slotSetVRoot())); + return; + } + + unsigned long rw = RootWindowOfScreen(ScreenOfDisplay(qt_xdisplay(), qt_xscreen())); + unsigned long vroot_data[1] = { m_pIconView->viewport()->winId() }; + static Atom vroot = XInternAtom(qt_xdisplay(), "__SWM_VROOT", False); + + Window rootReturn, parentReturn, *children; + unsigned int numChildren; + Window top = winId(); + while (1) { + /*int ret = */XQueryTree(qt_xdisplay(), top , &rootReturn, &parentReturn, + &children, &numChildren); + if (children) + XFree((char *)children); + if (parentReturn == rw) { + break; + } else + top = parentReturn; + } + if ( set_vroot ) + XChangeProperty(qt_xdisplay(), top, vroot, XA_WINDOW, 32, + PropModeReplace, (unsigned char *)vroot_data, 1); + else + XDeleteProperty (qt_xdisplay(), top, vroot); +} + +// ----------------------------------------------------------------------------- + +void KDesktop::slotShutdown() +{ + if ( m_pIconView ) + m_pIconView->saveIconPositions(); + if ( m_miniCli ) + m_miniCli->saveConfig(); +} + +// don't hide when someone presses Alt-F4 on us +void KDesktop::closeEvent(QCloseEvent *e) +{ + e->ignore(); +} + +void KDesktop::desktopIconsAreaChanged(const QRect &area, int screen) +{ + // hurra! kicker is alive + if ( m_waitForKicker ) m_waitForKicker->stop(); + + // -2: all screens + // -1: primary screen + // else: screen number + + if (screen <= -2) + screen = kdesktop_screen_number; + else if (screen == -1) + screen = kapp->desktop()->primaryScreen(); + + // This is pretty broken, mixes Xinerama and non-Xinerama multihead + // and generally doesn't seem to be required anyway => ignore screen. + if ( /*(screen == kdesktop_screen_number) &&*/ m_pIconView ) + m_pIconView->updateWorkArea(area); +} + +void KDesktop::slotSwitchDesktops(int delta) +{ + if(m_bWheelSwitchesWorkspace && KWin::numberOfDesktops() > 1) + { + int newDesk, curDesk = KWin::currentDesktop(); + + if( (delta < 0 && m_eWheelDirection == Forward) || (delta > 0 && m_eWheelDirection == Reverse) ) + newDesk = curDesk % KWin::numberOfDesktops() + 1; + else + newDesk = ( KWin::numberOfDesktops() + curDesk - 2 ) % KWin::numberOfDesktops() + 1; + + KWin::setCurrentDesktop( newDesk ); + } +} + +void KDesktop::handleColorDropEvent(QDropEvent * e) +{ + KPopupMenu popup; + popup.insertItem(SmallIconSet("colors"),i18n("Set as Primary Background Color"), 1); + popup.insertItem(SmallIconSet("colors"),i18n("Set as Secondary Background Color"), 2); + int result = popup.exec(e->pos()); + + QColor c; + KColorDrag::decode(e, c); + switch (result) { + case 1: bgMgr->setColor(c, true); break; + case 2: bgMgr->setColor(c, false); break; + default: return; + } + bgMgr->setWallpaper(0,0); +} + +void KDesktop::handleImageDropEvent(QDropEvent * e) +{ + KPopupMenu popup; + if ( m_pIconView ) + popup.insertItem(SmallIconSet("filesave"),i18n("&Save to Desktop..."), 1); + if ( ( m_pIconView && m_pIconView->maySetWallpaper() ) || m_pRootWidget ) + popup.insertItem(SmallIconSet("background"),i18n("Set as &Wallpaper"), 2); + popup.insertSeparator(); + popup.insertItem(SmallIconSet("cancel"), i18n("&Cancel")); + int result = popup.exec(e->pos()); + + if (result == 1) + { + bool ok = true; + QString filename = KInputDialog::getText(QString::null, i18n("Enter a name for the image below:"), QString::null, &ok, m_pIconView); + + if (!ok) + { + return; + } + + if (filename.isEmpty()) + { + filename = i18n("image.png"); + } + else if (filename.right(4).lower() != ".png") + { + filename += ".png"; + } + + QImage i; + QImageDrag::decode(e, i); + KTempFile tmpFile(QString::null, filename); + i.save(tmpFile.name(), "PNG"); + // We pass 0 as parent window because passing the desktop is not a good idea + KURL src; + src.setPath( tmpFile.name() ); + KURL dest( KDIconView::desktopURL() ); + dest.addPath( filename ); + KIO::NetAccess::copy( src, dest, 0 ); + tmpFile.unlink(); + } + else if (result == 2) + { + QImage i; + QImageDrag::decode(e, i); + KTempFile tmpFile(KGlobal::dirs()->saveLocation("wallpaper"), ".png"); + i.save(tmpFile.name(), "PNG"); + kdDebug(1204) << "KDesktop::contentsDropEvent " << tmpFile.name() << endl; + bgMgr->setWallpaper(tmpFile.name()); + } +} + +void KDesktop::slotNewWallpaper(const KURL &url) +{ + // This is called when a file containing an image is dropped + // (called by KonqOperations) + if ( url.isLocalFile() ) + bgMgr->setWallpaper( url.path() ); + else + { + // Figure out extension + QString fileName = url.fileName(); + QFileInfo fileInfo( fileName ); + QString ext = fileInfo.extension(); + // Store tempfile in a place where it will still be available after a reboot + KTempFile tmpFile( KGlobal::dirs()->saveLocation("wallpaper"), "." + ext ); + KURL localURL; localURL.setPath( tmpFile.name() ); + // We pass 0 as parent window because passing the desktop is not a good idea + KIO::NetAccess::file_copy( url, localURL, -1, true /*overwrite*/ ); + bgMgr->setWallpaper( localURL.path() ); + } +} + +// for dcop interface backward compatibility +void KDesktop::logout() +{ + logout( KApplication::ShutdownConfirmDefault, + KApplication::ShutdownTypeNone ); +} + +void KDesktop::logout( KApplication::ShutdownConfirm confirm, + KApplication::ShutdownType sdtype ) +{ + if( !kapp->requestShutDown( confirm, sdtype ) ) + // this i18n string is also in kicker/applets/run/runapplet + KMessageBox::error( this, i18n("Could not log out properly.\nThe session manager cannot " + "be contacted. You can try to force a shutdown by pressing " + "Ctrl+Alt+Backspace; note, however, that your current session " + "will not be saved with a forced shutdown." ) ); +} + +void KDesktop::slotLogout() +{ + logout( KApplication::ShutdownConfirmDefault, + KApplication::ShutdownTypeDefault ); +} + +void KDesktop::slotLogoutNoCnf() +{ + logout( KApplication::ShutdownConfirmNo, + KApplication::ShutdownTypeNone ); +} + +void KDesktop::slotHaltNoCnf() +{ + logout( KApplication::ShutdownConfirmNo, + KApplication::ShutdownTypeHalt ); +} + +void KDesktop::slotRebootNoCnf() +{ + logout( KApplication::ShutdownConfirmNo, + KApplication::ShutdownTypeReboot ); +} + +void KDesktop::setVRoot( bool enable ) +{ + if ( enable == set_vroot ) + return; + + set_vroot = enable; + kdDebug(1204) << "setVRoot " << enable << endl; + KDesktopSettings::setSetVRoot( set_vroot ); + KDesktopSettings::writeConfig(); + slotSetVRoot(); +} + +void KDesktop::clearCommandHistory() +{ + if ( m_miniCli ) + m_miniCli->clearHistory(); +} + +void KDesktop::setIconsEnabled( bool enable ) +{ + if ( enable == m_bDesktopEnabled ) + return; + + m_bDesktopEnabled = enable; + kdDebug(1204) << "setIcons " << enable << endl; + KDesktopSettings::setDesktopEnabled( m_bDesktopEnabled ); + KDesktopSettings::writeConfig(); + if (!enable) { + delete m_pIconView; + m_pIconView = 0; + } + configure(); +} + +void KDesktop::desktopResized() +{ + resize(kapp->desktop()->size()); + + if ( m_pIconView ) + { + // the sequence of actions is important: + // remove all icons, resize desktop, tell kdiconview new iconsArea size + // tell kdiconview to reget all icons + m_pIconView->slotClear(); + m_pIconView->resize(kapp->desktop()->size()); + + // get new desktopIconsArea from kicker + QByteArray data, result; + QDataStream arg(data, IO_WriteOnly); + arg << kdesktop_screen_number; + QCString replyType; + QRect area; + + if ( kapp->dcopClient()->call(kicker_name, kicker_name, "desktopIconsArea(int)", + data, replyType, result, false, 2000) ) + { + QDataStream res(result, IO_ReadOnly); + res >> area; + } + else + area = kwinModule()->workArea(kwinModule()->currentDesktop()); + + m_pIconView->updateWorkArea(area); + m_pIconView->startDirLister(); + } +} + +void KDesktop::switchDesktops( int delta ) +{ + bool old = m_bWheelSwitchesWorkspace; + m_bWheelSwitchesWorkspace = true; + slotSwitchDesktops(delta); + m_bWheelSwitchesWorkspace = old; +} + +bool KDesktop::event(QEvent * e) +{ + if ( e->type() == QEvent::WindowDeactivate) + { + if (m_pIconView) + m_pIconView->clearSelection(); + } + return QWidget::event(e); +} + +#include "desktop.moc" diff --git a/kdesktop/desktop.h b/kdesktop/desktop.h new file mode 100644 index 000000000..0407fbe4f --- /dev/null +++ b/kdesktop/desktop.h @@ -0,0 +1,212 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis + + 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 __desktop_h__ +#define __desktop_h__ + +#include "KDesktopIface.h" + +#include +#include + +#include // for logout parameters + +class KURL; +class QCloseEvent; +class QDropEvent; +class QPopupMenu; +class KGlobalAccel; +class KWinModule; +class KBackgroundManager; +class QTimer; +class StartupId; +class KDIconView; +class Minicli; +class KActionCollection; + +class KRootWidget : public QObject +{ + Q_OBJECT +public: + KRootWidget(); + bool eventFilter( QObject *, QEvent * e ); +signals: + void wheelRolled( int delta ); + void colorDropEvent( QDropEvent* e ); + void imageDropEvent( QDropEvent* e ); + void newWallpaper( const KURL& url ); +}; + +/** + * KDesktop is the toplevel widget that is the desktop. + * It handles the background, the screensaver and all the rest of the global stuff. + * The icon view is a child widget of KDesktop. + */ +class KDesktop : public QWidget, virtual public KDesktopIface +{ + Q_OBJECT + +public: + + enum WheelDirection { Forward = 0, Reverse }; + + KDesktop(bool x_root_hack, bool wait_for_kded ); + ~KDesktop(); + + // Implementation of the DCOP interface + virtual void rearrangeIcons(); + virtual void lineupIcons(); + virtual void selectAll(); + virtual void unselectAll(); + virtual void refreshIcons(); + virtual QStringList selectedURLs(); + + virtual void configure(); + virtual void popupExecuteCommand(); + virtual void popupExecuteCommand(const QString& content); + virtual void refresh(); + virtual void logout(); + virtual void clearCommandHistory(); + virtual void runAutoStart(); + + virtual void switchDesktops( int delta ); + + virtual void desktopIconsAreaChanged(const QRect &area, int screen); + + void logout( KApplication::ShutdownConfirm confirm, KApplication::ShutdownType sdtype ); + + KWinModule* kwinModule() const { return m_pKwinmodule; } + + // The action collection of the active widget + KActionCollection *actionCollection(); + + // The URL (for the File/New menu) + KURL url() const; + + // ## hack ## + KDIconView *iconView() const { return m_pIconView; } + +private slots: + /** Background is ready. */ + void backgroundInitDone(); + + /** Activate the desktop. */ + void slotStart(); + + /** Activate crash recovery. */ + void slotUpAndRunning(); + + /** Reconfigures */ + void slotConfigure(); + + /** Show minicli,. the KDE command line interface */ + void slotExecuteCommand(); + + /** Show taskmanager (calls KSysGuard with --showprocesses option) */ + void slotShowTaskManager(); + + void slotShowWindowList(); + + void slotSwitchUser(); + + void slotLogout(); + void slotLogoutNoCnf(); + void slotHaltNoCnf(); + void slotRebootNoCnf(); + + /** Connected to KSycoca */ + void slotDatabaseChanged(); + + void slotShutdown(); + void slotSettingsChanged(int); + void slotIconChanged(int); + + /** set the vroot atom for e.g. xsnow */ + void slotSetVRoot(); + + /** Connected to KDIconView */ + void handleImageDropEvent( QDropEvent * ); + void handleColorDropEvent( QDropEvent * ); + void slotNewWallpaper(const KURL &url); + + /** Connected to KDIconView and KRootWidget */ + void slotSwitchDesktops(int delta); + + // when there seems to be no kicker, we have to get desktopIconsArea from kwinModule + void slotNoKicker(); + +protected: + void initConfig(); + void initRoot(); + + virtual void closeEvent(QCloseEvent *e); + + virtual bool isVRoot() { return set_vroot; } + virtual void setVRoot( bool enable ); + + virtual bool isIconsEnabled() { return m_bDesktopEnabled; } + virtual void setIconsEnabled( bool enable ); + virtual bool event ( QEvent * e ); + +private slots: + void desktopResized(); + +private: + + KGlobalAccel *keys; + + KWinModule* m_pKwinmodule; + + KBackgroundManager* bgMgr; + + KDIconView *m_pIconView; + KRootWidget *m_pRootWidget; + + Minicli *m_miniCli; + + StartupId* startup_id; + bool set_vroot; + + /** Set to true until start() has been called */ + bool m_bInit; + + /** Wait for kded to finish building database? */ + bool m_bWaitForKded; + + /** Desktop enabled / disabled **/ + bool m_bDesktopEnabled; + + /** Whether or not to switch desktops when mouse wheel is rolled */ + bool m_bWheelSwitchesWorkspace; + + QTimer *m_waitForKicker; + + /** Default mouse wheel direction (Fwd means mwheel up switches to + lower desktop) + */ + static const WheelDirection m_eDefaultWheelDirection = Forward; + + /** Mouse wheel/desktop switching direction */ + static WheelDirection m_eWheelDirection; + + /** Possible values for "kdesktoprc"->"Mouse Buttons"->"WheelDirection" */ + static const char* m_wheelDirectionStrings[2]; +}; + +#endif diff --git a/kdesktop/init.cc b/kdesktop/init.cc new file mode 100644 index 000000000..c0c2502d5 --- /dev/null +++ b/kdesktop/init.cc @@ -0,0 +1,247 @@ +/* This file is part of the KDE project + Copyright (C) 1999 David Faure + + 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. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// for multihead +extern int kdesktop_screen_number; + + +/** + * Test if a directory exists, create otherwise + * @param _name full path of the directory + * @param _showMsg show a message box if we created the dir + * @return true if the dir was just created (e.g. so that we can populate it) + */ +static bool testDir( const QString &_name ) +{ + DIR *dp; + dp = opendir( QFile::encodeName(_name) ); + if ( dp == NULL ) + { + QString m = _name; + if ( m.endsWith( "/" ) ) + m.truncate( m.length() - 1 ); + QCString path = QFile::encodeName(m); + + bool ok = ::mkdir( path, S_IRWXU ) == 0; + if ( !ok && errno == EEXIST ) { + int ret = KMessageBox::warningYesNo( 0, i18n("%1 is a file, but KDE needs it to be a directory; move it to %2.orig and create directory?").arg(m).arg(m), QString::null, i18n("Move It"), i18n("Do Not Move") ); + if ( ret == KMessageBox::Yes ) { + if ( ::rename( path, path + ".orig" ) == 0 ) { + ok = ::mkdir( path, S_IRWXU ) == 0; + } else { + // foo.orig existed already. How likely is that? + ok = false; + } + } else { + return false; + } + } + if ( !ok ) + { + KMessageBox::sorry( 0, i18n( "Could not create directory %1; check for permissions or reconfigure the desktop to use another path." ).arg( m ) ); + return false; + } + return true; + } + else // exists already + { + closedir( dp ); + return false; + } +} + +/** + * Copy a standard .directory file to a user's directory + * @param fileName destination file name + * @param dir destination directory + * @param force if false, don't copy if destination file already exists + */ +static void copyDirectoryFile(const QString &fileName, const QString& dir, bool force) +{ + if (force || !QFile::exists(dir + "/.directory")) { + QString cmd = "cp "; + cmd += KProcess::quote(locate("data", QString("kdesktop/") + fileName)); + cmd += " "; + cmd += KProcess::quote(dir+"/.directory"); + system( QFile::encodeName(cmd) ); + } +} + +static void copyFile( const QString& src, const QString& dest ) +{ + QCString cmd = "cp "; + cmd += QFile::encodeName(KProcess::quote(src)); + cmd += " "; + cmd += QFile::encodeName(KProcess::quote(dest)); + system( cmd ); +} + +static QString realDesktopPath() +{ + QString desktopPath = KGlobalSettings::desktopPath(); + if (kdesktop_screen_number != 0) { + QString dn = "Desktop"; + dn += QString::number(kdesktop_screen_number); + desktopPath.replace("Desktop", dn); + } + return desktopPath; +} + +/** + * Copy all links from DesktopLinks/ to the desktop, appropriately renamed + * (to the contents of the translated Name field) + */ +static void copyDesktopLinks() +{ + KConfig *config = kapp->config(); + config->setGroup("General"); + if (!config->readBoolEntry("CopyDesktopLinks", true)) + return; + + QStringList list = + KGlobal::dirs()->findAllResources("appdata", "DesktopLinks/*", false, true); + + QString desktopPath = realDesktopPath(); + + for (QStringList::ConstIterator it = list.begin(); it != list.end(); it++) { + KDesktopFile desk( *it ); + if (desk.readBoolEntry("Hidden")) + continue; + copyFile( *it, desktopPath ); + } +} + +/** + * @return true if this is the first time + * kdesktop is run for the current release + * WARNING : call only once !!! (second call will always return false !) + */ +static bool isNewRelease() +{ + bool bNewRelease = false; + + int versionMajor = KDesktopSettings::kDEVersionMajor(); + int versionMinor = KDesktopSettings::kDEVersionMinor(); + int versionRelease = KDesktopSettings::kDEVersionRelease(); + + if( versionMajor < KDE_VERSION_MAJOR ) + bNewRelease = true; + else if( versionMinor < KDE_VERSION_MINOR ) + bNewRelease = true; + else if( versionRelease < KDE_VERSION_RELEASE ) + bNewRelease = true; + + if( bNewRelease ) { + KDesktopSettings::setKDEVersionMajor( KDE_VERSION_MAJOR ); + KDesktopSettings::setKDEVersionMinor( KDE_VERSION_MINOR ); + KDesktopSettings::setKDEVersionRelease( KDE_VERSION_RELEASE ); + KDesktopSettings::writeConfig(); + } + + return bNewRelease; +} + +/** + * Create, if necessary, some directories in user's .kde/, + * copy default .directory files there, as well as templates files. + * Called by kdesktop on startup. + */ +void testLocalInstallation() +{ + const bool newRelease = isNewRelease(); + + const QString desktopPath = realDesktopPath(); + const bool emptyDesktop = testDir( desktopPath ); + + // Do not force copying that one (it would lose the icon positions) + copyDirectoryFile("directory.desktop", desktopPath, false); + + testDir( KGlobalSettings::autostartPath() ); + // we force the copying in case of a new release, to install new translations.... + copyDirectoryFile("directory.autostart", KGlobalSettings::autostartPath(), newRelease); + + if (emptyDesktop) + copyDesktopLinks(); + + // Take care of creating or updating trash.desktop + const QString trashDir = KGlobal::dirs()->localxdgdatadir() + "Trash"; + const bool firstTimeWithNewTrash = !QFile::exists( trashDir ); + const QString trashDesktopPath = desktopPath + "/trash.desktop"; + const bool trashDesktopExists = QFile::exists( trashDesktopPath ); + const bool installNewTrashi18n = newRelease && trashDesktopExists; // not if deleted by user + if ( emptyDesktop || firstTimeWithNewTrash || installNewTrashi18n ) { + QString oldIcon, oldEmptyIcon; + if ( trashDesktopExists ) { + KDesktopFile trashDesktop( trashDesktopPath, true ); + oldIcon = trashDesktop.readIcon(); + oldEmptyIcon = trashDesktop.readEntry( "EmptyIcon" ); + } + copyFile( locate( "data", "kdesktop/directory.trash" ), trashDesktopPath ); + if ( trashDesktopExists ) { + KDesktopFile trashDesktop( trashDesktopPath ); + trashDesktop.writeEntry( "Icon", oldIcon ); + trashDesktop.writeEntry( "EmptyIcon", oldEmptyIcon ); + trashDesktop.sync(); + } + } + + if ( firstTimeWithNewTrash ) { // migrate pre-kde-3.4 trash contents + QByteArray packedArgs; + QDataStream stream( packedArgs, IO_WriteOnly ); + stream << (int)2; + KIO::Job* job = KIO::special( "trash:/", packedArgs ); + (void)KIO::NetAccess::synchronousRun( job, 0 ); + + // OK the only thing missing is to convert the icon position... + KSimpleConfig cfg( locateLocal("appdata", "IconPositions") ); + if ( cfg.hasGroup( "IconPosition::Trash" ) && !cfg.hasGroup( "IconPosition::trash.desktop" ) ) { + const QMap entries = cfg.entryMap( "IconPosition::Trash" ); + cfg.setGroup( "IconPosition::trash.desktop" ); + for( QMap::ConstIterator it = entries.begin(); it != entries.end(); ++it ) { + cfg.writeEntry( it.key(), it.data() ); + } + } + } +} + diff --git a/kdesktop/init.h b/kdesktop/init.h new file mode 100644 index 000000000..8f23ac1b4 --- /dev/null +++ b/kdesktop/init.h @@ -0,0 +1,30 @@ +/* This file is part of the KDE project + Copyright (C) 1999 David Faure + + 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 __init_h +#define __init_h + +/** + * Create, if necessary, some directories in user's .kde/, + * copy default .directory files there, as well as templates files. + * Called by kdesktop on startup. + */ +void testLocalInstallation(); + +#endif diff --git a/kdesktop/init/Home.desktop b/kdesktop/init/Home.desktop new file mode 100644 index 000000000..7273aa057 --- /dev/null +++ b/kdesktop/init/Home.desktop @@ -0,0 +1,166 @@ +[Desktop Entry] +Name=Home +Name[af]=Tuiste +Name[ar]=المنزل +Name[az]=Başlanğıc +Name[be]=Хатняя тэчка +Name[bg]=Домашна директория +Name[bn]=ব্যক্তিগত ফোল্ডার +Name[br]=Er-gêr +Name[bs]=Početak +Name[ca]=Inici +Name[cs]=Můj adresář +Name[csb]=Dodóm +Name[cy]=Cartref +Name[da]=Hjem +Name[de]=Persönlicher Ordner +Name[el]=Προσωπικός φάκελος +Name[eo]=Hejmo +Name[es]=Personal +Name[et]=Kodu +Name[eu]=Etxea +Name[fa]=آغازه +Name[fi]=Koti +Name[fr]=Dossier personnel +Name[fy]=Thús +Name[ga]=Baile +Name[gl]=Persoal +Name[he]=בית +Name[hi]=घर +Name[hr]=Početak +Name[hu]=Saját könyvtár +Name[id]=Rumah +Name[is]=Heimasvæðið þitt +Name[ja]=ホーム +Name[ka]=სახლში +Name[kk]=Мекен +Name[km]=ផ្ទះ +Name[ko]=홈 +Name[lo]=ພື້ນທີ່ສ່ວນຕົວ +Name[lt]=Pradžia +Name[lv]=Mājas +Name[mk]=Дома +Name[mn]=Гэр +Name[ms]=Laman Utama +Name[mt]=Direttorju Personali +Name[nb]=Hjem +Name[nds]=Tohuus +Name[ne]=गृह +Name[nn]=Heim +Name[nso]=Gae +Name[oc]=Inici +Name[pa]=ਘਰ +Name[pl]=Katalog domowy +Name[pt]=Pasta Pessoal +Name[pt_BR]=Pasta do Usuário +Name[ro]=Acasă +Name[ru]=Домой +Name[rw]=Urugo +Name[se]=Ruoktu +Name[sk]=Domov +Name[sl]=Domov +Name[sr]=Домаће +Name[sr@Latn]=Domaće +Name[ss]=Ekhaya +Name[sv]=Hem +Name[ta]=தொடக்கம் +Name[te]=ఇల్లు +Name[tg]=Компютери Ман +Name[th]=พื้นที่ส่วนตัว +Name[tr]=Başlangıç +Name[tt]=Anabit +Name[uk]=Домівка +Name[uz]=Uy +Name[uz@cyrillic]=Уй +Name[ven]=Haya +Name[vi]=Nhà +Name[wa]=Måjhon +Name[xh]=Ikhaya +Name[zh_CN]=主文件夹 +Name[zh_TW]=家目錄 +Name[zu]=Ikhaya +GenericName=Personal Files +GenericName[af]=Persoonlike Lêers +GenericName[ar]=الملفات الشخصية +GenericName[az]=Şəxsi Fayllar +GenericName[be]=Персанальныя файлы +GenericName[bg]=Лични файлове +GenericName[bn]=ব্যক্তিগত ফাইলসমূহ +GenericName[br]=Restroù deoc'h +GenericName[bs]=Osobne datoteke +GenericName[ca]=Fitxers personals +GenericName[cs]=Osobní soubory +GenericName[csb]=Swòje lopczi +GenericName[cy]=Ffeiliau Personol +GenericName[da]=Personlige filer +GenericName[de]=Eigene Dateien +GenericName[el]=Προσωπικά αρχεία +GenericName[eo]=Personaj dosieroj +GenericName[es]=Archivos personales +GenericName[et]=Isiklikud failid +GenericName[eu]=Fitxategi pertsonalak +GenericName[fa]=پرونده‌های شخصی +GenericName[fi]=Omat tiedostot +GenericName[fr]=Fichiers personnels +GenericName[fy]=Persoanlike map +GenericName[ga]=Comhaid Phearsanta +GenericName[gl]=Ficheiros Persoais +GenericName[he]=קבצים אישיים +GenericName[hi]=निजी फ़ाइलें +GenericName[hr]=Osobne datoteke +GenericName[hu]=Személyes fájlok +GenericName[id]=File Pribadi +GenericName[is]=Skrárnar þínar +GenericName[it]=File personali +GenericName[ja]=個人のファイル +GenericName[ka]=პირადი საქაღალდეები +GenericName[kk]=Дербес файлдар +GenericName[km]=ឯកសារ​ផ្ទាល់​ខ្លួន +GenericName[ko]=개인적인 파일 +GenericName[lo]=ທີ່ເກັບແຟ້ມແລະເອກະສານສວ່ນຕົວຫລືອື່ນຯ +GenericName[lt]=Asmeninės bylos +GenericName[lv]=Personālie Faili +GenericName[mk]=Лични датотеки +GenericName[mn]=Өөрийн файлууд +GenericName[ms]=Fail Peribadi +GenericName[mt]=Fajls Personali +GenericName[nb]=Personlige filer +GenericName[nds]=De egen Dateien +GenericName[ne]=व्यक्तिगत फाइल +GenericName[nl]=Persoonlijke map +GenericName[nn]=Personlege filer +GenericName[nso]=Difaele tsa Botho +GenericName[oc]=FiquièRs personals +GenericName[pa]=ਨਿੱਜੀ ਫਾਇਲ਼ਾਂ +GenericName[pl]=Pliki osobiste +GenericName[pt]=Ficheiros Pessoais +GenericName[pt_BR]=Arquivos Pessoais +GenericName[ro]=Fișiere personale +GenericName[ru]=Личные файлы +GenericName[rw]=Amadosiye Yihariye +GenericName[se]=Iežat fiillat +GenericName[sk]=Osobné súbory +GenericName[sl]=Osebne datoteke +GenericName[sr]=Лични фајлови +GenericName[sr@Latn]=Lični fajlovi +GenericName[sv]=Personliga filer +GenericName[ta]=சொந்த கோப்புகள் +GenericName[te]=వ్యక్తిగత దస్త్రాలు +GenericName[tg]=Файлҳои шахсӣ +GenericName[th]=แฟ้มส่วนตัว +GenericName[tr]=Kişisel Dosyalar +GenericName[tt]=Şäxsi Biremnär +GenericName[uk]=Особисті файли +GenericName[uz]=Shaxsiy fayllar +GenericName[uz@cyrillic]=Шахсий файллар +GenericName[ven]=Dzifaela dza vhune +GenericName[vi]=Tập tin Cá nhân +GenericName[wa]=Fitchîs da vosse +GenericName[xh]=Iifayile Zobuqu +GenericName[zh_CN]=个人文件 +GenericName[zh_TW]=個人檔案 +GenericName[zu]=Amafayela Omuntu siqu +URL=$HOME +Icon=kfm_home +Type=Link +OnlyShowIn=KDE; diff --git a/kdesktop/init/Makefile.am b/kdesktop/init/Makefile.am new file mode 100644 index 000000000..8e1895bf4 --- /dev/null +++ b/kdesktop/init/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = Templates + +kdesktop_init_data_DATA = directory.trash directory.autostart directory.templates directory.desktop +kdesktop_init_datadir = $(kde_datadir)/kdesktop + +desktoplink_DATA = Home.desktop System.desktop +desktoplinkdir = $(kde_datadir)/kdesktop/DesktopLinks + diff --git a/kdesktop/init/System.desktop b/kdesktop/init/System.desktop new file mode 100644 index 000000000..1c4816b57 --- /dev/null +++ b/kdesktop/init/System.desktop @@ -0,0 +1,149 @@ +[Desktop Entry] +Name=System +Name[af]=Stelsel +Name[ar]=النظام +Name[az]=Sistem +Name[be]=Сістэма +Name[bg]=Система +Name[bn]=সিস্টেম +Name[br]=Reizhiad +Name[bs]=Sistem +Name[ca]=Sistema +Name[cs]=Systém +Name[csb]=Systema +Name[cy]=Cysawd +Name[el]=Σύστημα +Name[eo]=Sistemo +Name[es]=Sistema +Name[et]=Süsteem +Name[eu]=Sistema +Name[fa]=سیستم +Name[fi]=Järjestelmä +Name[fo]=Kervi +Name[fr]=Système +Name[fy]=Systeem +Name[ga]=Córas +Name[gl]=Sistema +Name[he]=מערכת +Name[hi]=तंत्र +Name[hr]=Sustav +Name[hu]=Rendszer +Name[id]=Sistem +Name[is]=Kerfi +Name[it]=Sistema +Name[ja]=システム +Name[ka]=სისტემა +Name[kk]=Жүйелік +Name[km]=ប្រព័ន្ធ +Name[ko]=시스템 +Name[lo]=ຈັດການລະບົບ +Name[lt]=Sistema +Name[lv]=Sistēma +Name[mk]=Систем +Name[mn]=Систем +Name[ms]=Sistem +Name[mt]=Sistema +Name[nds]=Systeem +Name[ne]=प्रणाली +Name[nl]=Systeem +Name[oc]=Sistemo +Name[pa]=ਸਿਸਟਮ +Name[pt]=Sistema +Name[pt_BR]=Sistema +Name[ro]=Sistem +Name[ru]=Система +Name[rw]=Sisitemu +Name[se]=Vuogádat +Name[sk]=Systém +Name[sl]=Sistem +Name[sr]=Систем +Name[sr@Latn]=Sistem +Name[ss]=Umshini +Name[ta]=அமைப்பு +Name[te]=వ్యవస్థ +Name[tg]=Система +Name[th]=ระบบ +Name[tr]=Sistem +Name[tt]=Sistem +Name[uk]=Система +Name[uz]=Tizim +Name[uz@cyrillic]=Тизим +Name[ven]=Maitele +Name[vi]=Hệ thống +Name[wa]=Sistinme +Name[xh]=Indlela esestyenziswayo +Name[zh_CN]=系统 +Name[zh_TW]=系統 +Name[zu]=Isistimu +GenericName=System Locations +GenericName[af]=Stelsel Liggings +GenericName[ar]=مواقع النظام +GenericName[be]=Сістэмныя месцазнаходжанні +GenericName[bg]=Системни файлове +GenericName[bn]=সিস্টেম অবস্থানসমূহ +GenericName[bs]=Sistemske lokacije +GenericName[ca]=Localitzacions del sistema +GenericName[cs]=Systémová umístění +GenericName[csb]=Systemòwé lokalizacëje +GenericName[da]=System-steder +GenericName[de]=Systemordner +GenericName[el]=Τοποθεσίες συστήματος +GenericName[eo]=Sistemaj lokoj +GenericName[es]=Ubicaciones del sistema +GenericName[et]=Süsteemi asukohad +GenericName[eu]=Sistemaren kokapenak +GenericName[fa]=محلهای سیستم +GenericName[fi]=Järjestelmän sijainti +GenericName[fr]=Emplacements systèmes +GenericName[fy]=Systeemlokaasjes +GenericName[gl]=Lugares do Sistema +GenericName[he]=מיקומי מערכת +GenericName[hi]=तंत्र स्थान +GenericName[hr]=Sistemske lokacije +GenericName[hu]=Rendszerkönyvtárak +GenericName[is]=Staðsetningar kerfis +GenericName[it]=Indirizzi di sistema +GenericName[ja]=システム場所 +GenericName[ka]=სისტემური მისამართები +GenericName[kk]=Жүйенің орналасуы +GenericName[km]=ទីតាំង​ប្រព័ន្ធ +GenericName[ko]=시스템 알림 +GenericName[lt]=Sistemos vietos +GenericName[lv]=Sistēmas vietas +GenericName[mk]=Системски локации +GenericName[ms]=Lokasi Sistem +GenericName[mt]=System Monitor +GenericName[nb]=Systemplassar +GenericName[nds]=Systeemsteden +GenericName[ne]=प्रणाली स्थान +GenericName[nl]=Systeemlocaties +GenericName[nn]=Systemplassar +GenericName[pa]=ਸਿਸਟਮ ਟਿਕਾਣੇ +GenericName[pl]=Lokalizacje systemowe +GenericName[pt]=Locais do Sistema +GenericName[pt_BR]=Localizações no Sistema +GenericName[ro]=Locații de sistem +GenericName[ru]=Системные адреса +GenericName[rw]=Ahantu ha Sisitemu +GenericName[se]=Vuogádatbáikkit +GenericName[sk]=Systémové lokácie +GenericName[sl]=Sistemske lokacije +GenericName[sr]=Системске локације +GenericName[sr@Latn]=Sistemske lokacije +GenericName[sv]=Systemplatser +GenericName[ta]=அமைப்பு இடங்கள் +GenericName[tg]=Ҷойгиршавиҳои система +GenericName[th]=ที่ตั้งของระบบ +GenericName[tr]=Sistem Konumları +GenericName[tt]=Sistem Urınlaşuları +GenericName[uk]=Системні адреси +GenericName[uz]=Tizimga tegishli manzillar +GenericName[uz@cyrillic]=Тизимга тегишли манзиллар +GenericName[vi]=Đường dẫn Hệ thống +GenericName[wa]=Plaeces do sistinme +GenericName[zh_CN]=系统定位 +GenericName[zh_TW]=系統位置 +URL=system:/ +Icon=system +Type=Link +OnlyShowIn=KDE; diff --git a/kdesktop/init/Templates/CAMERA-Device.desktop b/kdesktop/init/Templates/CAMERA-Device.desktop new file mode 100644 index 000000000..524436e35 --- /dev/null +++ b/kdesktop/init/Templates/CAMERA-Device.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=camera_mount +UnmountIcon=camera_unmount diff --git a/kdesktop/init/Templates/CDROM-Device.desktop b/kdesktop/init/Templates/CDROM-Device.desktop new file mode 100644 index 000000000..65560072f --- /dev/null +++ b/kdesktop/init/Templates/CDROM-Device.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=cdrom_mount +UnmountIcon=cdrom_unmount +Actions=Eject; +X-KDE-Priority=TopLevel +[Desktop Action Eject] +Name=Eject +Name[af]=Uitskiet +Name[ar]=أقذف +Name[az]=Çıxart +Name[be]=Вызваліць +Name[bg]=Изваждане +Name[bn]=ইজেক্ট +Name[br]=Stlepel +Name[bs]=Izbaci +Name[ca]=Expulsa +Name[cs]=Vysunout +Name[csb]=Wësënie +Name[cy]=Allfwrw +Name[da]=Skub ud +Name[de]=Auswerfen +Name[el]=Εξαγωγή +Name[eo]=Eligo +Name[es]=Expulsar +Name[et]=Väljastamine +Name[eu]=Egotzi +Name[fa]=پس زدن +Name[fi]=Poista +Name[fr]=Éjecter +Name[fy]=Utsmytknop +Name[ga]=Díchuir +Name[gl]=Expulsar +Name[he]=הוצא +Name[hi]=बाहर +Name[hr]=Izbaci +Name[hu]=Kidobás +Name[is]=Henda út +Name[it]=Espelli +Name[ja]=取り出し +Name[ka]=CD-ს ამოღება +Name[kk]=Алып-шығару +Name[km]=ច្រាន​ចេញ +Name[ko]=꺼내기 +Name[lo]=ເອົາແຜ່ນອອກ +Name[lt]=Išmesti +Name[lv]=Izņemt +Name[mk]=Извади +Name[mn]=Гаргах +Name[ms]=Lenting +Name[mt]=Iftaħ +Name[nb]=Løs ut +Name[nds]=Rutsmieten +Name[ne]=निकाल्नुहोस् +Name[nl]=Uitwerpen +Name[nn]=Løys ut +Name[nso]=Ntsha +Name[oc]=Expulsa +Name[pa]=ਬਾਹਰ ਕੱਢੋ +Name[pl]=Wysuń +Name[pt]=Ejectar +Name[pt_BR]=Ejetar +Name[ro]=Ejectează +Name[ru]=Извлечь CD +Name[rw]=Gusohora +Name[se]=Bálkes olggos +Name[sk]=Vysunúť +Name[sl]=Izvrzi +Name[sr]=Избаци +Name[sr@Latn]=Izbaci +Name[ss]=Khafuna +Name[sv]=Mata ut +Name[ta]=வெளித்தள் +Name[te]=ఎజెక్ట్ +Name[tg]=Ихроҷ +Name[th]=เอาแผ่นออก +Name[tr]=Çıkart +Name[tt]=Çığar +Name[uk]=Виштовхнути +Name[uz]=Chiqarish +Name[uz@cyrillic]=Чиқариш +Name[ven]=Bvisa +Name[vi]=Đẩy đĩa ra +Name[wa]=Fé rexhe +Name[xh]=Khuphela ngaphandle +Name[zh_CN]=弹出 +Name[zh_TW]=退出 +Name[zu]=Khipha +Exec=kdeeject %v diff --git a/kdesktop/init/Templates/CDWRITER-Device.desktop b/kdesktop/init/Templates/CDWRITER-Device.desktop new file mode 100644 index 000000000..810b71824 --- /dev/null +++ b/kdesktop/init/Templates/CDWRITER-Device.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=0 +Type=FSDevice +Icon=cdwriter_mount +UnmountIcon=cdwriter_unmount +Actions=Eject; +X-KDE-Priority=TopLevel +[Desktop Action Eject] +Name=Eject +Name[af]=Uitskiet +Name[ar]=أقذف +Name[az]=Çıxart +Name[be]=Вызваліць +Name[bg]=Изваждане +Name[bn]=ইজেক্ট +Name[br]=Stlepel +Name[bs]=Izbaci +Name[ca]=Expulsa +Name[cs]=Vysunout +Name[csb]=Wësënie +Name[cy]=Allfwrw +Name[da]=Skub ud +Name[de]=Auswerfen +Name[el]=Εξαγωγή +Name[eo]=Eligo +Name[es]=Expulsar +Name[et]=Väljastamine +Name[eu]=Egotzi +Name[fa]=پس زدن +Name[fi]=Poista +Name[fr]=Éjecter +Name[fy]=Utsmytknop +Name[ga]=Díchuir +Name[gl]=Expulsar +Name[he]=הוצא +Name[hi]=बाहर +Name[hr]=Izbaci +Name[hu]=Kidobás +Name[is]=Henda út +Name[it]=Espelli +Name[ja]=取り出し +Name[ka]=CD-ს ამოღება +Name[kk]=Алып-шығару +Name[km]=ច្រាន​ចេញ +Name[ko]=꺼내기 +Name[lo]=ເອົາແຜ່ນອອກ +Name[lt]=Išmesti +Name[lv]=Izņemt +Name[mk]=Извади +Name[mn]=Гаргах +Name[ms]=Lenting +Name[mt]=Iftaħ +Name[nb]=Løs ut +Name[nds]=Rutsmieten +Name[ne]=निकाल्नुहोस् +Name[nl]=Uitwerpen +Name[nn]=Løys ut +Name[nso]=Ntsha +Name[oc]=Expulsa +Name[pa]=ਬਾਹਰ ਕੱਢੋ +Name[pl]=Wysuń +Name[pt]=Ejectar +Name[pt_BR]=Ejetar +Name[ro]=Ejectează +Name[ru]=Извлечь CD +Name[rw]=Gusohora +Name[se]=Bálkes olggos +Name[sk]=Vysunúť +Name[sl]=Izvrzi +Name[sr]=Избаци +Name[sr@Latn]=Izbaci +Name[ss]=Khafuna +Name[sv]=Mata ut +Name[ta]=வெளித்தள் +Name[te]=ఎజెక్ట్ +Name[tg]=Ихроҷ +Name[th]=เอาแผ่นออก +Name[tr]=Çıkart +Name[tt]=Çığar +Name[uk]=Виштовхнути +Name[uz]=Chiqarish +Name[uz@cyrillic]=Чиқариш +Name[ven]=Bvisa +Name[vi]=Đẩy đĩa ra +Name[wa]=Fé rexhe +Name[xh]=Khuphela ngaphandle +Name[zh_CN]=弹出 +Name[zh_TW]=退出 +Name[zu]=Khipha +Exec=kdeeject %v diff --git a/kdesktop/init/Templates/DVDROM-Device.desktop b/kdesktop/init/Templates/DVDROM-Device.desktop new file mode 100644 index 000000000..3d46866be --- /dev/null +++ b/kdesktop/init/Templates/DVDROM-Device.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=dvd_mount +UnmountIcon=dvd_unmount +Actions=Eject; +X-KDE-Priority=TopLevel +[Desktop Action Eject] +Name=Eject +Name[af]=Uitskiet +Name[ar]=أقذف +Name[az]=Çıxart +Name[be]=Вызваліць +Name[bg]=Изваждане +Name[bn]=ইজেক্ট +Name[br]=Stlepel +Name[bs]=Izbaci +Name[ca]=Expulsa +Name[cs]=Vysunout +Name[csb]=Wësënie +Name[cy]=Allfwrw +Name[da]=Skub ud +Name[de]=Auswerfen +Name[el]=Εξαγωγή +Name[eo]=Eligo +Name[es]=Expulsar +Name[et]=Väljastamine +Name[eu]=Egotzi +Name[fa]=پس زدن +Name[fi]=Poista +Name[fr]=Éjecter +Name[fy]=Utsmytknop +Name[ga]=Díchuir +Name[gl]=Expulsar +Name[he]=הוצא +Name[hi]=बाहर +Name[hr]=Izbaci +Name[hu]=Kidobás +Name[is]=Henda út +Name[it]=Espelli +Name[ja]=取り出し +Name[ka]=CD-ს ამოღება +Name[kk]=Алып-шығару +Name[km]=ច្រាន​ចេញ +Name[ko]=꺼내기 +Name[lo]=ເອົາແຜ່ນອອກ +Name[lt]=Išmesti +Name[lv]=Izņemt +Name[mk]=Извади +Name[mn]=Гаргах +Name[ms]=Lenting +Name[mt]=Iftaħ +Name[nb]=Løs ut +Name[nds]=Rutsmieten +Name[ne]=निकाल्नुहोस् +Name[nl]=Uitwerpen +Name[nn]=Løys ut +Name[nso]=Ntsha +Name[oc]=Expulsa +Name[pa]=ਬਾਹਰ ਕੱਢੋ +Name[pl]=Wysuń +Name[pt]=Ejectar +Name[pt_BR]=Ejetar +Name[ro]=Ejectează +Name[ru]=Извлечь CD +Name[rw]=Gusohora +Name[se]=Bálkes olggos +Name[sk]=Vysunúť +Name[sl]=Izvrzi +Name[sr]=Избаци +Name[sr@Latn]=Izbaci +Name[ss]=Khafuna +Name[sv]=Mata ut +Name[ta]=வெளித்தள் +Name[te]=ఎజెక్ట్ +Name[tg]=Ихроҷ +Name[th]=เอาแผ่นออก +Name[tr]=Çıkart +Name[tt]=Çığar +Name[uk]=Виштовхнути +Name[uz]=Chiqarish +Name[uz@cyrillic]=Чиқариш +Name[ven]=Bvisa +Name[vi]=Đẩy đĩa ra +Name[wa]=Fé rexhe +Name[xh]=Khuphela ngaphandle +Name[zh_CN]=弹出 +Name[zh_TW]=退出 +Name[zu]=Khipha +Exec=kdeeject %v diff --git a/kdesktop/init/Templates/Directory.desktop b/kdesktop/init/Templates/Directory.desktop new file mode 100644 index 000000000..3ace5a6a4 --- /dev/null +++ b/kdesktop/init/Templates/Directory.desktop @@ -0,0 +1,146 @@ +[Desktop Entry] +Name=Folder... +Name[af]=Gids... +Name[ar]=المجلد... +Name[be]=Тэчка... +Name[bg]=Директория... +Name[bn]=ফোল্ডার... +Name[br]=Renkell ... +Name[bs]=Direktorij... +Name[ca]=Carpeta... +Name[cs]=Složka... +Name[csb]=Katalog... +Name[cy]=Plygell... +Name[da]=Mappe... +Name[de]=Ordner ... +Name[el]=Φάκελος... +Name[eo]=Dosierujo... +Name[es]=Carpeta... +Name[et]=Kataloog... +Name[eu]=Karpeta... +Name[fa]=پوشه... +Name[fi]=Kansio... +Name[fr]=Dossier... +Name[fy]=Map... +Name[ga]=Fillteán... +Name[gl]=Cartafol... +Name[he]=תיקייה... +Name[hi]=फ़ोल्डर... +Name[hr]=Mapa... +Name[hu]=Könyvtár... +Name[is]=Mappa... +Name[it]=Cartella... +Name[ja]=フォルダ... +Name[ka]=საქაღალდე... +Name[kk]=Қапшық... +Name[km]=ថត... +Name[ko]=폴더... +Name[lt]=Aplankas... +Name[lv]=Mape... +Name[mk]=Папка... +Name[mn]=Хавтас... +Name[mt]=Direttorju... +Name[nb]=Mappe … +Name[nds]=Orner... +Name[ne]=फोल्डर... +Name[nl]=Map... +Name[nn]=Mappe … +Name[pa]=ਫੋਲਡਰ... +Name[pl]=Katalog... +Name[pt]=Pasta... +Name[pt_BR]=Pasta... +Name[ru]=Папку... +Name[rw]=Ububiko... +Name[se]=Máhppa … +Name[sk]=Priečinok... +Name[sl]=Mapa ... +Name[sr]=Фасцикла... +Name[sr@Latn]=Fascikla... +Name[sv]=Katalog... +Name[ta]=அடைவு... +Name[tg]=Феҳрист... +Name[th]=โฟลเดอร์... +Name[tr]=Dizin... +Name[tt]=Törgäk... +Name[uk]=Тека... +Name[uz]=Jild +Name[uz@cyrillic]=Жилд +Name[vi]=Thư mục... +Name[wa]=Ridant... +Name[zh_CN]=文件夹... +Name[zh_TW]=資料夾... +Comment=Enter folder name: +Comment[af]=Voer gidsnaam in: +Comment[ar]=أدخل إسم المجلَد: +Comment[be]=Вызначце назву тэчкі: +Comment[bg]=Въведете името на директорията: +Comment[bn]=ফোল্ডারের নাম লিখুন: +Comment[br]=Roit un anv ar renkell : +Comment[bs]=Unesite naziv direktorija: +Comment[ca]=Entra el nom de la carpeta: +Comment[cs]=Zadejte název složky: +Comment[csb]=Wpiszë miono katalogù: +Comment[cy]=Mewnosodwch enw'r plygell: +Comment[da]=Indtast mappenavn: +Comment[de]=Ordnernamen eingeben: +Comment[el]=Δώστε το όνομα του φακέλου: +Comment[eo]=Enigu novan dosierujonomon: +Comment[es]=Introduzca el nombre de la carpeta: +Comment[et]=Sisesta kataloogi nimi: +Comment[eu]=Sartu karpetaren izena: +Comment[fa]=نام پوشه را وارد کنید: +Comment[fi]=Anna kansion nimi: +Comment[fr]=Donnez le nom du dossier : +Comment[fy]=Mapname ynfiere: +Comment[ga]=Iontráil ainm an fhillteáin: +Comment[gl]=Introduza o nome do cartafol: +Comment[he]=הזן שם תיקייה: +Comment[hi]=फ़ोल्डर नाम भरें: +Comment[hr]=Unesite naziv mape: +Comment[hu]=A könyvtár neve: +Comment[is]=Sláðu inn möppunafn: +Comment[it]=Immetti il nome della cartella: +Comment[ja]=フォルダ名を入力してください: +Comment[ka]=შეიყვანეთ საქაღალდის სახელი: +Comment[kk]=Қапшықты келтіріңіз: +Comment[km]=បញ្ចូល​ឈ្មោះ​ថត ៖ +Comment[ko]=폴더 이름을 입력하십시오: +Comment[lt]=Įveskite aplanko vardą: +Comment[lv]=Ievadiet mapes nosaukumu: +Comment[mk]=Внесете го името на папката: +Comment[mn]=Лавлахын нэрийг өг: +Comment[ms]=Masukkan nama folder: +Comment[mt]=Daħħal isem id-direttorju: +Comment[nb]=Nytt mappenavn: +Comment[nds]=Ornernaam ingeven: +Comment[ne]=फोल्डर नाम प्रविष्ट गर्नुहोस्: +Comment[nl]=Mapnaam invoeren: +Comment[nn]=Nytt mappenamn: +Comment[pa]=ਫੋਲਡਰ ਨਾਂ ਦਿਓ: +Comment[pl]=Podaj nazwę katalogu: +Comment[pt]=Indique o nome da pasta: +Comment[pt_BR]=Digite o nome da pasta: +Comment[ro]=Introduceți numele folderului: +Comment[ru]=Введите имя папки: +Comment[rw]=Kwinjiza izina ry'ububiko: +Comment[se]=Bija máhppanama: +Comment[sk]=Zadajte meno priečinku: +Comment[sl]=Vnesite ime mape: +Comment[sr]=Унесите име фасцикле: +Comment[sr@Latn]=Unesite ime fascikle: +Comment[sv]=Ange katalognamn: +Comment[ta]=அடைவின் பெயரை உள்ளிடு: +Comment[tg]=Номи феҳристро ворид кунед: +Comment[th]=เติมชื่อโฟลเดอร์: +Comment[tr]=Dizin adını girin: +Comment[tt]=Törgäk adın kert: +Comment[uk]=Введіть назву теки: +Comment[uz]=Jildning nomini kiriting: +Comment[uz@cyrillic]=Жилднинг номини киритинг: +Comment[vi]=Điền tên thư mục: +Comment[wa]=Dinez l' no do ridant: +Comment[zh_CN]=输入文件夹名称: +Comment[zh_TW]=輸入目錄名稱: +Type=Link +URL=.source/emptydir +Icon=folder diff --git a/kdesktop/init/Templates/Floppy.desktop b/kdesktop/init/Templates/Floppy.desktop new file mode 100644 index 000000000..ddae9a2c6 --- /dev/null +++ b/kdesktop/init/Templates/Floppy.desktop @@ -0,0 +1,78 @@ +[Desktop Action Format] +Exec=kfloppy %v +Name=Format +Name[af]=Formaat +Name[ar]=الهيئة +Name[be]=Фармат +Name[bg]=Формат +Name[bn]=ফরম্যাট +Name[br]=Furmadiñ +Name[cs]=Formát +Name[csb]=Fòrmat +Name[cy]=Fformat +Name[de]=Formatieren +Name[el]=Μορφοποίηση +Name[eo]=Formato +Name[es]=Formato +Name[et]=Vorming +Name[eu]=Formatua +Name[fa]=قالب +Name[fi]=Formatoi +Name[fy]=Formattearje +Name[ga]=Formáid +Name[gl]=Formato +Name[he]=אתחל +Name[hi]=फार्मेट +Name[hr]=Oblik +Name[hu]=Formázás +Name[is]=Snið +Name[it]=Formatta +Name[ja]=フォーマット +Name[ka]=ფორმატი +Name[kk]=Пішін +Name[km]=ទ្រង់ទ្រាយ +Name[ko]=포맷 +Name[lo]=ສູດຄະນິດສານ - K +Name[lt]=Formatas +Name[lv]=Formatēt +Name[mk]=Формат +Name[mn]=Хэлбэр +Name[nds]=Formateren +Name[ne]=ढाँचा +Name[nl]=Formatteren +Name[nso]=Thlolego +Name[pa]=ਫਾਰਮਿਟ +Name[pt]=Formatar +Name[pt_BR]=Formato +Name[ru]=Формат +Name[rw]=Imiterere +Name[se]=Formáhtta +Name[sk]=Formát +Name[sl]=Oblika +Name[sr]=Формат +Name[ss]=Sakhiwo +Name[ta]=வடிவம் +Name[te]=ఫార్మెట్ +Name[tg]=Андоза +Name[th]=รูปแบบ +Name[tr]=Biçim +Name[uk]=Формат +Name[uz]=Format qilish +Name[uz@cyrillic]=Формат қилиш +Name[ven]=Tshivhumbeo +Name[vi]=Định dạng +Name[wa]=Abwesner +Name[xh]=Ifomati +Name[zh_CN]=格式 +Name[zh_TW]=格式化 +Name[zu]=Isakhiwo + +[Desktop Entry] +Actions=Format; +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=3floppy_mount +UnmountIcon=3floppy_unmount +X-KDE-Priority=TopLevel diff --git a/kdesktop/init/Templates/HD.desktop b/kdesktop/init/Templates/HD.desktop new file mode 100644 index 000000000..78ed614dc --- /dev/null +++ b/kdesktop/init/Templates/HD.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=hdd_mount +UnmountIcon=hdd_unmount diff --git a/kdesktop/init/Templates/HTMLFile.desktop b/kdesktop/init/Templates/HTMLFile.desktop new file mode 100644 index 000000000..d2ebe33b0 --- /dev/null +++ b/kdesktop/init/Templates/HTMLFile.desktop @@ -0,0 +1,148 @@ +[Desktop Entry] +Name=HTML File... +Name[af]=HTML Lêer... +Name[ar]=ملف لغة علامات النصّ الفائق... +Name[be]=Файл HTML... +Name[bg]=HTML файл... +Name[bn]=HTML ফাইল... +Name[br]=Restr HTML ... +Name[bs]=HTML datoteka... +Name[ca]=Fitxer HTML... +Name[cs]=HTML soubor... +Name[csb]=Lopk HTML... +Name[cy]=Ffeil HTML... +Name[da]=HTML-fil... +Name[de]=HTML-Datei ... +Name[el]=Αρχείο HTML... +Name[eo]=HTML-dosiero... +Name[es]=Archivo HTML... +Name[et]=HTML-fail... +Name[eu]=HTML fitxategia... +Name[fa]=پروندۀ‌ زنگام... +Name[fi]=HTML-tiedosto... +Name[fr]=Fichier HTML... +Name[fy]=HTML-triem....... +Name[ga]=Comhad HTML... +Name[gl]=Ficheiro HTML... +Name[he]=קובץ HTML... +Name[hi]=एचटीएमएल फ़ाइल... +Name[hr]=HTML datoteka... +Name[hu]=HTML-fájl... +Name[is]=HTML skrá... +Name[it]=File HTML... +Name[ja]=HTML ファイル... +Name[ka]=HTML ფაილი... +Name[kk]=HTML файлы... +Name[km]=ឯកសារ HTML... +Name[ko]=HTML 파일 +Name[lt]=HTML byla... +Name[lv]=HTML Fails... +Name[mk]=HTML датотека... +Name[mn]=HTML-Файл... +Name[ms]=Fail HTML... +Name[mt]=Fajl HTML... +Name[nb]=HTML-fil … +Name[nds]=HTML-Datei... +Name[ne]=HTML फाइल... +Name[nl]=HTML-bestand... +Name[nn]=HTML-fil … +Name[pa]=HTML ਫਾਇਲ... +Name[pl]=Plik HTML... +Name[pt]=Ficheiro HTML... +Name[pt_BR]=Arquivo HTML... +Name[ro]=Fișier HTML... +Name[ru]=Страница HTML... +Name[rw]=Idosiye HTML... +Name[se]=HTML-fiila … +Name[sk]=Súbor HTML... +Name[sl]=Datoteka HTML ... +Name[sr]=HTML фајл... +Name[sr@Latn]=HTML fajl... +Name[sv]=HTML-fil... +Name[ta]=HTML கோப்பு... +Name[te]=హెచ్ టి ఎం ఎల్ దస్త్రం... +Name[tg]=Файли HTML... +Name[th]=แฟ้ม HTML... +Name[tr]=HTML Dosyası... +Name[tt]=HTML Birem... +Name[uk]=Файл HTML... +Name[uz]=HTML-fayli... +Name[uz@cyrillic]=HTML-файли... +Name[vi]=Tập tin HTML... +Name[wa]=Fitchî HTML... +Name[zh_CN]=HTML 文件... +Name[zh_TW]=HTML 檔案... +Comment=Enter HTML filename: +Comment[af]=Voer HTML lêernaam in: +Comment[ar]=أدخل إسم ملف لغة علامات النصّ الفائق: +Comment[be]=Вызначце назву файла HTML: +Comment[bg]=Въведете името на HTML файла: +Comment[bn]=HTML ফাইলের নাম: +Comment[br]=Roit un anv ar restr : +Comment[bs]=Unesite ime HTML datoteke: +Comment[ca]=Entra el nom del fitxer HTML: +Comment[cs]=Zadejte název HTML souboru: +Comment[csb]=Wpiszë miono lopkù HTML: +Comment[da]=Indtast HTML-filnavn: +Comment[de]=Name der HTML-Datei eingeben: +Comment[el]=Δώστε το όνομα του αρχείου HTML: +Comment[eo]=Enigu HTML-dosiernomon: +Comment[es]=Introduzca el nombre del archivo HTML: +Comment[et]=Sisesta HTML-faili nimi: +Comment[eu]=Sartu HTML fitxategiaren izena: +Comment[fa]=نام پروندۀ زنگام را وارد کنید: +Comment[fi]=Anna HTML-tiedostonimi: +Comment[fr]=Donnez le nom du fichier HTML : +Comment[fy]=Namme fan HTML-triem ynfiere: +Comment[ga]=Iontráil ainm an chomhaid HTML: +Comment[gl]=Introduza o nome do ficheiro HTML: +Comment[he]=הזן שם לקובץ ה־HTML: +Comment[hi]=एचटीएमएल फ़ाइल-नाम भरें: +Comment[hr]=Unesite naziv HTML datoteke: +Comment[hu]=A HTML-fájl neve: +Comment[is]=Sláðu inn HTML skráarnafn: +Comment[it]=Immetti nome file HTML: +Comment[ja]=HTML ファイル名を入力: +Comment[ka]=HTML ფაილის სახელი შეიყვანეთ: +Comment[kk]=HTML файлын келтіріңіз: +Comment[km]=បញ្ចូល​ឈ្មោះ​ឯកសារ HTML ៖ +Comment[ko]=HTML 파일 이름을 입력하십시오: +Comment[lt]=Įveskite HTML bylos vardą: +Comment[lv]=Ievadiet HTML faila nosaukumu: +Comment[mk]=Внесете го името на HTML датотеката: +Comment[ms]=Masukkan nama fail HTML: +Comment[mt]=Ittajpja isem ta' fajl HTML: +Comment[nb]=Skriv inn HTML-filnavn: +Comment[nds]=Naam vun de HTML-Datei ingeven: +Comment[ne]=HTML फाइलनाम प्रविष्ट गर्नुहोस्: +Comment[nl]=Naam van HTML-bestand invoeren: +Comment[nn]=Oppgje HTML-filnamn: +Comment[pa]=HTML ਫਾਇਲ ਨਾਂ ਦਿਓ: +Comment[pl]=Podaj nazwę pliku HTML: +Comment[pt]=Indique o nome do ficheiro HTML: +Comment[pt_BR]=Insira nome do arquivo HTML: +Comment[ro]=Introduceți numele fișierului HTML: +Comment[ru]=Введите имя страницы HTML: +Comment[rw]=Kwinjiza izinadosiye HTML: +Comment[se]=Bija HTML-fiilanama: +Comment[sk]=Zadajte meno súboru HTML: +Comment[sl]=Vnesite ime datoteke HTML: +Comment[sr]=Унесите име HTML фајла: +Comment[sr@Latn]=Unesite ime HTML fajla: +Comment[sv]=Ange HTML-filnamn: +Comment[ta]=HTML கோப்பு பெயரை உள்ளிடு: +Comment[te]=హెచ్ టి ఎం ఎల్ దస్త్రం పేరును వ్రాయండి: +Comment[tg]=Номи файли HTML-ро ворид кунед: +Comment[th]=เติมชื่อแฟ้ม HTML: +Comment[tr]=HTML dosyasını girin: +Comment[tt]=HTML-birem adın kert: +Comment[uk]=Введіть назву файла HTML: +Comment[uz]=HTML-faylning nomini kiriting: +Comment[uz@cyrillic]=HTML-файлнинг номини киритинг: +Comment[vi]=Điền tên tập tin HTML: +Comment[wa]=Dinez l' no do fitchî HTML: +Comment[zh_CN]=输入 HTML 文件名: +Comment[zh_TW]=輸入 HTML 檔案名稱: +Type=Link +URL=.source/HTMLFile.html +Icon=html diff --git a/kdesktop/init/Templates/HTMLFile.html b/kdesktop/init/Templates/HTMLFile.html new file mode 100644 index 000000000..c217ab3fc --- /dev/null +++ b/kdesktop/init/Templates/HTMLFile.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/kdesktop/init/Templates/MO-Device.desktop b/kdesktop/init/Templates/MO-Device.desktop new file mode 100644 index 000000000..7ad78fd18 --- /dev/null +++ b/kdesktop/init/Templates/MO-Device.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=mo_mount +UnmountIcon=mo_unmount diff --git a/kdesktop/init/Templates/Makefile.am b/kdesktop/init/Templates/Makefile.am new file mode 100644 index 000000000..b05dfcbd1 --- /dev/null +++ b/kdesktop/init/Templates/Makefile.am @@ -0,0 +1,21 @@ + +# The links (that contain translations) +templ_DATA = linkProgram.desktop \ + linkURL.desktop linkFloppy.desktop linkHD.desktop linkCDROM.desktop \ + Directory.desktop TextFile.desktop HTMLFile.desktop linkZIP.desktop \ + linkDVDROM.desktop linkCAMERA.desktop linkNFS.desktop linkCDWRITER.desktop \ + linkMO.desktop + +templdir = $(kde_templatesdir) + +# The source files (the actual templates) +sources_DATA = Program.desktop \ + URL.desktop Floppy.desktop HD.desktop CDROM-Device.desktop \ + TextFile.txt HTMLFile.html ZIP-Device.desktop DVDROM-Device.desktop \ + CAMERA-Device.desktop NFS.desktop CDWRITER-Device.desktop \ + MO-Device.desktop + +sourcesdir = $(kde_templatesdir)/.source + +install-data-hook: + $(mkinstalldirs) $(DESTDIR)$(sourcesdir)/emptydir diff --git a/kdesktop/init/Templates/NFS.desktop b/kdesktop/init/Templates/NFS.desktop new file mode 100644 index 000000000..dcfc043d4 --- /dev/null +++ b/kdesktop/init/Templates/NFS.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=nfs_mount +UnmountIcon=nfs_unmount diff --git a/kdesktop/init/Templates/Program.desktop b/kdesktop/init/Templates/Program.desktop new file mode 100644 index 000000000..263e1a155 --- /dev/null +++ b/kdesktop/init/Templates/Program.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Exec= +Icon=exec +Path= +Terminal=false +Type=Application diff --git a/kdesktop/init/Templates/TextFile.desktop b/kdesktop/init/Templates/TextFile.desktop new file mode 100644 index 000000000..3c371d42c --- /dev/null +++ b/kdesktop/init/Templates/TextFile.desktop @@ -0,0 +1,148 @@ +[Desktop Entry] +Name=Text File... +Name[af]=Teks Lêer... +Name[ar]=ملف نصي... +Name[be]=Тэкставы файл... +Name[bg]=Текстов файл... +Name[bn]=টেক্সট ফাইল... +Name[br]=Restr skrid ... +Name[bs]=Tekst datoteka... +Name[ca]=Fitxer de text... +Name[cs]=Textový soubor... +Name[csb]=Tekstowi lopk... +Name[cy]=Ffeil Testun... +Name[da]=Tekstfil... +Name[de]=Textdatei ... +Name[el]=Αρχείο κειμένου... +Name[eo]=Tekstdosiero... +Name[es]=Archivo de texto... +Name[et]=Tekstifail... +Name[eu]=Testu fitxategia... +Name[fa]=پروندۀ متنی... +Name[fi]=Tekstitiedosto... +Name[fr]=Fichier texte... +Name[fy]=Teksttriem...... +Name[ga]=Téacschomhad... +Name[gl]=Ficheiro de Texto... +Name[he]=קובץ טקסט... +Name[hi]=पाठ फ़ाइल... +Name[hr]=Tekstualna datoteka... +Name[hu]=Szöveges fájl... +Name[is]=Textaskrá... +Name[it]=File di testo... +Name[ja]=テキストファイル... +Name[ka]=ტექსტური ფაილი... +Name[kk]=Мәтін файлы... +Name[km]=ឯកសារ​អត្ថបទ... +Name[ko]=텍스트 파일... +Name[lt]=Teksto byla... +Name[lv]=Teksta Fails... +Name[mk]=Текстуална датотека... +Name[mn]=Текст файл... +Name[ms]=Fail Teks... +Name[mt]=Fajl ta' test... +Name[nb]=Tekstfil … +Name[nds]=Textdatei... +Name[ne]=पाठ फाइल... +Name[nl]=Tekstbestand... +Name[nn]=Tekstfil … +Name[pa]=ਪਾਠ ਫਾਇਲ... +Name[pl]=Plik tekstowy... +Name[pt]=Ficheiro de Texto... +Name[pt_BR]=Arquivo Texto... +Name[ro]=Fișier text... +Name[ru]=Текстовый файл... +Name[rw]= Idosiye Mwandiko... +Name[se]=Teakstafiila … +Name[sk]=Textový súbor... +Name[sl]=Besedilna datoteka ... +Name[sr]=Текстуални фајл... +Name[sr@Latn]=Tekstualni fajl... +Name[sv]=Textfil... +Name[ta]=உரைக் கோப்பு +Name[te]=వచన దస్త్రం... +Name[tg]=Файли матнӣ... +Name[th]=แฟ้มข้อความ... +Name[tr]=Metin Dosyası... +Name[tt]=Mäten Bireme... +Name[uk]=Текстовий файл... +Name[uz]=Matn fayli... +Name[uz@cyrillic]=Матн файли... +Name[vi]=Tập tin Văn bản... +Name[wa]=Fitchî tecse... +Name[zh_CN]=文本文件... +Name[zh_TW]=文字檔案... +Comment=Enter text filename: +Comment[af]=Voer teks lêernaam in: +Comment[ar]=أدخل اسم الملف النصي: +Comment[be]=Вызначце назву тэкставага файла: +Comment[bg]=Въведете име на текстовия файл: +Comment[bn]=টেক্সট ফাইলের নাম: +Comment[br]=Roit un anv ar restr skrid : +Comment[bs]=Unesite ime tekst datoteke: +Comment[ca]=Entra el nom del fitxer de text: +Comment[cs]=Zadejte název textového souboru: +Comment[csb]=Wpiszë miono tekstowégò lopkù: +Comment[da]=Indtast tekstfilnavn: +Comment[de]=Name der Textdatei eingeben: +Comment[el]=Δώστε το όνομα του αρχείου κειμένου: +Comment[eo]=Enigu la tekstodosieran nomon: +Comment[es]=Introduzca el nombre del archivo de texto: +Comment[et]=Sisesta tekstifaili nimi: +Comment[eu]=Sartu testu fitxategiaren izena +Comment[fa]=نام پروندۀ‌ متنی را وارد کنید: +Comment[fi]=Anna tekstitiedoston nimi: +Comment[fr]=Donnez le nom du fichier de texte : +Comment[fy]=Namme fan teksttriem ynfiere: +Comment[ga]=Iontráil ainm an téacschomhaid: +Comment[gl]=Introduza o nome do ficheiro de texto: +Comment[he]=הזן שם לקובץ הטקסט: +Comment[hi]=पाठ फ़ाइल-नाम भरें: +Comment[hr]=Upišite naziv tekstualne datoteke: +Comment[hu]=A szöveges fájl neve: +Comment[is]=Sláðu inn nafn á textaskrá: +Comment[it]=Immetti nome file di testo: +Comment[ja]=テキストファイル名を入力: +Comment[ka]=შეიყვანეთ ტექსტური ფაილის სახელი: +Comment[kk]=Мәтін файлын келтіріңіз: +Comment[km]=បញ្ចូល​ឈ្មោះ​ឯកសារ​អត្ថបទ ៖ +Comment[ko]=텍스트 파일 이름을 입력하십시오: +Comment[lt]=Įveskite teksto bylos vardą: +Comment[lv]=Ievadiet teksta faila nosaukumu: +Comment[mk]=Внесете го името на текстуалната датотека: +Comment[ms]=Masukkan nama fail teks: +Comment[mt]=Ittajpja isem ta' fajl b'test: +Comment[nb]=Skriv inn navnet på tekstfila: +Comment[nds]=Naam vun de Textdatei ingeven: +Comment[ne]=पाठ फाइलनाम प्रविष्ट गर्नुहोस्: +Comment[nl]=Naam van tekstbestand invoeren: +Comment[nn]=Oppgje tekstfilnamn: +Comment[pa]=ਪਾਠ ਫਾਇਲ ਨਾਂ ਦਿਓ: +Comment[pl]=Podaj nazwę pliku tekstowego: +Comment[pt]=Indique o nome do ficheiro de texto: +Comment[pt_BR]=Insira nome do arquivo de texto: +Comment[ro]=Introduceți numele fișierului text: +Comment[ru]=Введите имя тестового файла: +Comment[rw]=Kwinjiza izinadosiye mwandiko: +Comment[se]=Bija teakstafiilanama: +Comment[sk]=Zadajte meno textového súboru: +Comment[sl]=Vnesite ime besedilne datoteke: +Comment[sr]=Унесите име текстуалног фајла: +Comment[sr@Latn]=Unesite ime tekstualnog fajla: +Comment[sv]=Ange textfilnamn: +Comment[ta]=உரை கோப்பு பெயரை உள்ளிடு: +Comment[te]=వచన దస్త్రం పేరును వ్రాయండి: +Comment[tg]=Номи файли матнро ворид кунед: +Comment[th]=เติมชื่อแฟ้มข้อความ: +Comment[tr]=Metin dosya adını girin: +Comment[tt]=Mäten-birem adın kert: +Comment[uk]=Введіть назву текстового файла: +Comment[uz]=Matn faylining nomini kiriting: +Comment[uz@cyrillic]=Матн файлининг номини киритинг: +Comment[vi]=Điền tên tập tin văn bản: +Comment[wa]=Dinez l' no do fitchî tecse: +Comment[zh_CN]=输入文本文件名: +Comment[zh_TW]=輸入純文字檔案名稱: +Type=Link +URL=.source/TextFile.txt +Icon=txt diff --git a/kdesktop/init/Templates/TextFile.txt b/kdesktop/init/Templates/TextFile.txt new file mode 100644 index 000000000..8d1c8b69c --- /dev/null +++ b/kdesktop/init/Templates/TextFile.txt @@ -0,0 +1 @@ + diff --git a/kdesktop/init/Templates/URL.desktop b/kdesktop/init/Templates/URL.desktop new file mode 100644 index 000000000..968859c37 --- /dev/null +++ b/kdesktop/init/Templates/URL.desktop @@ -0,0 +1,3 @@ +[Desktop Entry] +URL= +Type=Link diff --git a/kdesktop/init/Templates/ZIP-Device.desktop b/kdesktop/init/Templates/ZIP-Device.desktop new file mode 100644 index 000000000..f51641275 --- /dev/null +++ b/kdesktop/init/Templates/ZIP-Device.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +MountPoint= +Dev= +ReadOnly=false +Type=FSDevice +Icon=zip_mount +UnmountIcon=zip_unmount +Actions=Eject; +X-KDE-Priority=TopLevel +[Desktop Action Eject] +Name=Eject +Name[af]=Uitskiet +Name[ar]=أقذف +Name[az]=Çıxart +Name[be]=Вызваліць +Name[bg]=Изваждане +Name[bn]=ইজেক্ট +Name[br]=Stlepel +Name[bs]=Izbaci +Name[ca]=Expulsa +Name[cs]=Vysunout +Name[csb]=Wësënie +Name[cy]=Allfwrw +Name[da]=Skub ud +Name[de]=Auswerfen +Name[el]=Εξαγωγή +Name[eo]=Eligo +Name[es]=Expulsar +Name[et]=Väljastamine +Name[eu]=Egotzi +Name[fa]=پس زدن +Name[fi]=Poista +Name[fr]=Éjecter +Name[fy]=Utsmytknop +Name[ga]=Díchuir +Name[gl]=Expulsar +Name[he]=הוצא +Name[hi]=बाहर +Name[hr]=Izbaci +Name[hu]=Kidobás +Name[is]=Henda út +Name[it]=Espelli +Name[ja]=取り出し +Name[ka]=CD-ს ამოღება +Name[kk]=Алып-шығару +Name[km]=ច្រាន​ចេញ +Name[ko]=꺼내기 +Name[lo]=ເອົາແຜ່ນອອກ +Name[lt]=Išmesti +Name[lv]=Izņemt +Name[mk]=Извади +Name[mn]=Гаргах +Name[ms]=Lenting +Name[mt]=Iftaħ +Name[nb]=Løs ut +Name[nds]=Rutsmieten +Name[ne]=निकाल्नुहोस् +Name[nl]=Uitwerpen +Name[nn]=Løys ut +Name[nso]=Ntsha +Name[oc]=Expulsa +Name[pa]=ਬਾਹਰ ਕੱਢੋ +Name[pl]=Wysuń +Name[pt]=Ejectar +Name[pt_BR]=Ejetar +Name[ro]=Ejectează +Name[ru]=Извлечь CD +Name[rw]=Gusohora +Name[se]=Bálkes olggos +Name[sk]=Vysunúť +Name[sl]=Izvrzi +Name[sr]=Избаци +Name[sr@Latn]=Izbaci +Name[ss]=Khafuna +Name[sv]=Mata ut +Name[ta]=வெளித்தள் +Name[te]=ఎజెక్ట్ +Name[tg]=Ихроҷ +Name[th]=เอาแผ่นออก +Name[tr]=Çıkart +Name[tt]=Çığar +Name[uk]=Виштовхнути +Name[uz]=Chiqarish +Name[uz@cyrillic]=Чиқариш +Name[ven]=Bvisa +Name[vi]=Đẩy đĩa ra +Name[wa]=Fé rexhe +Name[xh]=Khuphela ngaphandle +Name[zh_CN]=弹出 +Name[zh_TW]=退出 +Name[zu]=Khipha +Exec=kdeeject %v diff --git a/kdesktop/init/Templates/linkCAMERA.desktop b/kdesktop/init/Templates/linkCAMERA.desktop new file mode 100644 index 000000000..5d9dc9be1 --- /dev/null +++ b/kdesktop/init/Templates/linkCAMERA.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +Name=Camera Device... +Name[af]=Kamera Toestel... +Name[ar]=جهاز الكاميرا... +Name[be]=Камера... +Name[bg]=Фотоапарат... +Name[bn]=ক্যমেরা ডিভাইস... +Name[br]=Trobarzhell ar gamera ... +Name[bs]=Kamera uređaj... +Name[ca]=Dispositiu de càmera... +Name[cs]=Kamera... +Name[csb]=Òdjimkòwô kaméra... +Name[cy]=Dyfais Camera... +Name[da]=Kamera-enhed... +Name[de]=Kamera ... +Name[el]=Συσκευή κάμερας... +Name[eo]=kamero-aparato... +Name[es]=Cámara... +Name[et]=Kaameraseade +Name[eu]=Kamera... +Name[fa]=دستگاه دوربین... +Name[fi]=Kamerat... +Name[fr]=Appareil photo +Name[fy]=Kamera... +Name[ga]=Gléas Ceamara... +Name[gl]=Dispositivo de Cámara... +Name[he]=התקן מצלמה... +Name[hi]=कैमरा उपकरण... +Name[hr]=Kamera... +Name[hu]=Fényképezőgép... +Name[is]=Myndavél... +Name[it]=Dispositivo macchina fotografica... +Name[ja]=カメラデバイス... +Name[ka]=კამერის მოწყობილობა +Name[kk]=Фотокамера құрылғысы... +Name[km]=ឧបករណ៍​ម៉ាស៊ីន​ថត... +Name[ko]=카메라 장치... +Name[lt]=Kameros įrenginys... +Name[lv]=Kameras iekārta... +Name[mk]=Камера... +Name[mn]=Камерын Төхөөрөмж... +Name[ms]=Peranti Kamera... +Name[mt]=Kamera... +Name[nb]=Kameraenhet … +Name[nds]=Kamera... +Name[ne]=क्यामेरा यन्त्र... +Name[nl]=Camera... +Name[nn]=Kameraeining … +Name[pa]=ਕੈਮਰਾ ਜੰਤਰ... +Name[pl]=Aparat fotograficzny... +Name[pt]=Máquina Fotográfica... +Name[pt_BR]=Dispositivo de Câmera... +Name[ro]=Dispozitiv foto... +Name[ru]=Камера... +Name[rw]=Apareye Kamera... +Name[se]=Govvenapperáhttaovttadat … +Name[sk]=Zariadenie digitálneho fotoaparátu... +Name[sl]=Naprava kamere ... +Name[sr]=Камера... +Name[sr@Latn]=Kamera... +Name[sv]=Kameraenhet... +Name[ta]=புகைப்பட கருவி சாதனங்கள் +Name[te]=కెమెరా పరికరం... +Name[tg]=Дастгоҳи камера... +Name[th]=อุปกรณ์กล้อง... +Name[tr]=Kamera Aygıtı... +Name[tt]=kamera Cıhazı... +Name[uk]=Пристрій фотоапарата... +Name[uz]=Fotoaparat uskunasi... +Name[uz@cyrillic]=Фотоапарат ускунаси... +Name[vi]=Máy ảnh số... +Name[wa]=Éndjin camera... +Name[zh_CN]=相机设备... +Name[zh_TW]=照相機設備... +Comment=New camera +Comment[af]=Nuwe kamera +Comment[ar]=كاميرا جديدة +Comment[be]=Новая камера +Comment[bg]=Нов фотоапарат +Comment[bn]=নতুন ক্যামেরা +Comment[br]=Kamera nevez +Comment[bs]=Nova kamera +Comment[ca]=Càmera nova +Comment[cs]=Nová kamera +Comment[csb]=Nowô òdjimkòwô kaméra +Comment[cy]=Camera Newydd +Comment[da]=Nyt kamera +Comment[de]=Neue Kamera +Comment[el]=Νέα κάμερα +Comment[eo]=Nova kamero +Comment[es]=Nueva cámara +Comment[et]=Uus kaamera +Comment[eu]=Kamera berria +Comment[fa]=دوربین جدید +Comment[fi]=Uusi kamera +Comment[fr]=Nouvel appareil photo +Comment[fy]=Nije kamera +Comment[ga]=Ceamara nua +Comment[gl]=Nova cámara +Comment[he]=מצלמה חדשה +Comment[hi]=नया कैमरा +Comment[hr]=Nova kamera +Comment[hu]=Új fényképezőgép +Comment[is]=Ný myndavél +Comment[it]=Nuova macchina fotografica +Comment[ja]=新しいカメラ +Comment[ka]=ახალი კამერა +Comment[kk]=Жаңа фотокамера +Comment[km]=ម៉ាស៊ីន​ថត​ថ្មី +Comment[ko]=새 카메라 +Comment[lt]=Nauja kamera +Comment[lv]=Jauna kamera +Comment[mk]=Нова камера +Comment[mn]=Шинэ камер +Comment[ms]=Kamera baru +Comment[mt]=Kamera ġdida +Comment[nb]=Nytt kamera +Comment[nds]=Niege Kamera +Comment[ne]=नयाँ क्यामेरा +Comment[nl]=Nieuwe camera +Comment[nn]=Nytt kamera +Comment[pa]=ਨਵਾਂ ਕੈਮਰਾ +Comment[pl]=Nowy aparat fotograficzny +Comment[pt]=Nova máquina fotográfica +Comment[pt_BR]=Nova câmera +Comment[ro]=Aparat foto nou +Comment[ru]=Ссылка на устройство цифровой камеры +Comment[rw]=Kamera nshya +Comment[se]=Ođđa govvenapperáhtta +Comment[sk]=Nový digitálny fotoaparát +Comment[sl]=Nov fotoaparat +Comment[sr]=Нова камера +Comment[sr@Latn]=Nova kamera +Comment[sv]=Ny kamera +Comment[ta]=புதிய புகைப்பட கருவி +Comment[te]=కొత్త కెమెరా +Comment[tg]=Камераи нав +Comment[th]=เพิ่มกล้องใหม่ +Comment[tr]=Yeni kamera +Comment[tt]=Yaña kamera +Comment[uk]=Новий фотоапарат +Comment[uz]=Yangi fotoaparat +Comment[uz@cyrillic]=Янги фотоапарат +Comment[vi]=Tạo máy ảnh số mới +Comment[wa]=Novele camera +Comment[zh_CN]=新建相机 +Comment[zh_TW]=新增照相機 +Type=Link +URL=.source/CAMERA-Device.desktop +Icon=camera_unmount diff --git a/kdesktop/init/Templates/linkCDROM.desktop b/kdesktop/init/Templates/linkCDROM.desktop new file mode 100644 index 000000000..b895fe79b --- /dev/null +++ b/kdesktop/init/Templates/linkCDROM.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +Name=CD-ROM Device... +Name[af]=CD-ROM Toestel +Name[ar]=جهاز الأقراص المدمجة... +Name[be]=Прылада CD-ROM... +Name[bg]=CD-ROM... +Name[bn]=সিডি-রম ডিভাইস... +Name[br]=Trobarzhell CD-ROM ... +Name[bs]=CD-ROM uređaj... +Name[ca]=Dispositiu CD-ROM... +Name[cs]=Jednotka CD-ROM... +Name[csb]=Nëk CD-ROM... +Name[cy]=Dyfais CD-ROM... +Name[da]=Cd-rom-enhed... +Name[de]=CD-ROM-Laufwerk ... +Name[el]=Συσκευή CD-ROM... +Name[eo]=Lumdiskingo... +Name[es]=Unidad de CD-ROM... +Name[et]=CD-ROM seade... +Name[eu]=CD-ROM gailua... +Name[fa]=دستگاه CD-ROM... +Name[fi]=CD-ROM-laitteet... +Name[fr]=Lecteur de CD-ROM... +Name[fy]=kompaktskiifstasjon ... +Name[ga]=Gléas CD-ROM... +Name[gl]=Dispositivo de CD-ROM... +Name[he]=התקן תקליטור... +Name[hi]=सीडी-रोम उपकरण... +Name[hr]=CD/DVD-ROM uređaj... +Name[hu]=CD-meghajtó... +Name[is]=Geisladrif... +Name[it]=Dispositivo CD-ROM... +Name[ja]=CD-ROM デバイス... +Name[ka]=CD-ROM მოწყობილობა +Name[kk]=CD-ROM құрылғысы... +Name[km]=ឧបករណ៍ CD-ROM... +Name[ko]=CD-ROM 장치... +Name[lt]=CD-ROM įrenginys... +Name[lv]=CD-ROM Iekārta... +Name[mk]=CD-ROM Уред... +Name[mn]=КД-ROM төхөөрөмж... +Name[ms]=Peranti CD-ROM... +Name[mt]=CDROM... +Name[nb]=CD-ROM-enhet … +Name[nds]=CD-ROM-Reedschap... +Name[ne]=CD-ROM यन्त्र... +Name[nl]=CD-romspeler... +Name[nn]=CD-ROM-eining … +Name[pa]=CD-ROM ਜੰਤਰ... +Name[pl]=Urządzenie CD-ROM... +Name[pt]=Dispositivo de CD-ROM... +Name[pt_BR]=Dispositivo de CD-ROM... +Name[ro]=Dispozitiv CD-ROM... +Name[ru]=CD-ROM... +Name[rw]=Apareye CD-ROM... +Name[se]=CD-ROM-ovttadat … +Name[sk]=Zariadenie CD-ROM... +Name[sl]=Naprava CD-ROM ... +Name[sr]=CD/DVD-ROM уређај... +Name[sr@Latn]=CD/DVD-ROM uređaj... +Name[sv]=Cdrom-enhet... +Name[ta]=CD-ROM சாதனம்... +Name[te]=సీడి-రామ్ పరికరం... +Name[tg]=Дастгоҳи CD-ROM... +Name[th]=อุปกรณ์ซีดีรอม +Name[tr]=CD-ROM Aygıtı... +Name[tt]=CD-ROM Cıhazı... +Name[uk]=Пристрій CD-ROM... +Name[uz]=Kompakt-disk uskunasi... +Name[uz@cyrillic]=Компакт-диск ускунаси... +Name[vi]=Thiết bị đọc đĩa CD-ROM... +Name[wa]=Éndjin léjheu di plakes lazer... +Name[zh_CN]=CD-ROM 设备... +Name[zh_TW]=光碟機設備 +Comment=New CD-ROM Device +Comment[af]=Nuwe CD-ROM Toestel +Comment[ar]=جهاز أقراص مدمجة جديد +Comment[be]=Новая прылада CD-ROM +Comment[bg]=Ново устройство CD-ROM +Comment[bn]=নতুন সিডি-রম ডিভাইস +Comment[br]=Trobarzhell CD-ROM Nevez +Comment[bs]=Novi CD/DVD-ROM uređaj +Comment[ca]=Dispositiu CD-ROM nou +Comment[cs]=Nová jednotka CD-ROM +Comment[csb]=Nowi nëk CD +Comment[cy]=Dyfais CD-ROM Newydd +Comment[da]=Ny cd-rom-enhed +Comment[de]=Neues CD-ROM-Laufwerk +Comment[el]=Νέα συσκευή CD-ROM +Comment[eo]=Nova lumdiskingo... +Comment[es]=Nueva unidad de CD-ROM +Comment[et]=Uus CD-ROM seade +Comment[eu]=CD-ROM gailu berria +Comment[fa]=دستگاه CD-ROM جدید +Comment[fi]=Uusi CD/DVD-ROM -laite +Comment[fr]=Nouveau lecteur de CD-ROM +Comment[fy]=Nije kompaktskiifstasjon +Comment[ga]=Gléas nua CD-ROM +Comment[gl]=Novo Dispositivo de CD-ROM +Comment[he]=התקן תקליטור חדש +Comment[hi]=नया सीडी-रोम उपकरण +Comment[hr]=Novi CD/DVD-ROM uređaj +Comment[hu]=Új CD-meghajtó +Comment[is]=Nýtt geisladrif +Comment[it]=Nuovo dispositivo CD-ROM +Comment[ja]=新規 CD-ROM デバイス +Comment[ka]=ახალი CD-ROM მოწყობილობა +Comment[kk]=Жаңа CD-ROM құрылғысы +Comment[km]=ឧបករណ៍ CD-ROM ថ្មី +Comment[ko]=새 CD-ROM 장치 +Comment[lt]=Naujas CD-ROM įrenginys +Comment[lv]=Jauna CD-ROM Iekārta +Comment[mk]=Нов CD-ROM уред +Comment[mn]=Шинэ КД-ROM төхөөрөмж +Comment[ms]=Peranti CD-ROM Baru +Comment[mt]=CD-ROM ġdid +Comment[nb]=Ny CD-ROM-enhet +Comment[nds]=Niege CD-ROM-Reedschap +Comment[ne]=नयाँ CD-ROM यन्त्र +Comment[nl]=Nieuwe cd-romspeler +Comment[nn]=Ny CD-ROM-eining +Comment[pa]=ਨਵਾਂ CD-ROM ਜੰਤਰ +Comment[pl]=Nowe urządzenie CD-ROM +Comment[pt]=Novo Dispositivo de CD-ROM +Comment[pt_BR]=Novo dispositivo de CD-ROM +Comment[ro]=Dispozitiv CD-ROM nou +Comment[ru]=Ссылка на устройство CD-ROM +Comment[rw]=Apareye CD-ROM Nshya +Comment[se]=Ođđa CD-ROM-ovttadat +Comment[sk]=Nové zariadenie CD-ROM +Comment[sl]=Nova naprava CD-ROM +Comment[sr]=Нови CD/DVD-ROM уређај +Comment[sr@Latn]=Novi CD/DVD-ROM uređaj +Comment[sv]=Ny cdrom-enhet +Comment[ta]=புதிய CD-ROM சாதனம் +Comment[te]=కొత్త సీడి-రామ్ పరికరం +Comment[tg]=Дастгоҳи нави CD-ROM +Comment[th]=กำหนดอุปกรณ์ซีดีใหม่ +Comment[tr]=Yeni CD-ROM Aygıtı +Comment[tt]=Yaña CD-ROM Cıhazı +Comment[uk]=Новий пристрій CD-ROM +Comment[uz]=Yangi kompakt-disk uskunasi +Comment[uz@cyrillic]=Янги компакт-диск ускунаси +Comment[vi]=Tạo CD-ROM mới +Comment[wa]=Novea éndjin léjheu di plakes lazer +Comment[zh_CN]=新建 CD-ROM 设备 +Comment[zh_TW]=新光碟機設備 +Type=Link +URL=.source/CDROM-Device.desktop +Icon=cdrom_unmount diff --git a/kdesktop/init/Templates/linkCDWRITER.desktop b/kdesktop/init/Templates/linkCDWRITER.desktop new file mode 100644 index 000000000..8a080c55a --- /dev/null +++ b/kdesktop/init/Templates/linkCDWRITER.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +Name=CDWRITER Device... +Name[af]=CD Skrywer Toestel +Name[ar]=جهاز تسجيل الأقراص المدمجة... +Name[be]=Прылада CDWRITER... +Name[bg]=CDWRITER... +Name[bn]=সিডি-রাইটার ডিভাইস... +Name[br]=Trobarzhell an engraver CD ... +Name[bs]=CD pržilica... +Name[ca]=Dispositiu CDWRITER... +Name[cs]=Vypalovačka CD... +Name[csb]=Wëpôlôrz CD... +Name[cy]=Dyfais CDWRITER... +Name[da]=Cd-skriver enhed... +Name[de]=CD-Brenner ... +Name[el]=Συσκευή CDWRITER... +Name[eo]=Lumdiska skribilo... +Name[es]=Grabadora de CD... +Name[et]=CD-kirjutaja... +Name[eu]=CDWRITER gailua... +Name[fa]=دستگاه CDWRITER... +Name[fi]=CDWRITER-laite... +Name[fr]=Graveur de CD-ROM... +Name[fy]=kompaktskiifstasjon... +Name[ga]=Gléas CDWRITER... +Name[gl]=Dispositivo CDWRITER... +Name[he]=התקן צורב... +Name[hi]=सीडी-राइटर उपकरण... +Name[hr]=CD/DVD pržilica... +Name[hu]=CD-író... +Name[is]=Geisladiskaskrifari... +Name[it]=Masterizzatore... +Name[ja]=CD ライターデバイス... +Name[ka]=CDWRITER მოწყობილობა +Name[kk]=CDWRITER құрылғысы... +Name[km]=ឧបករណ៍ CDWRITER... +Name[ko]=CDWRITER 장치... +Name[lt]=CDWRITER įrenginys... +Name[lv]=CD rakstīšanas iekārta... +Name[mk]=CDWRITER Уред... +Name[mn]=КД бичигч төхөөрөмж +Name[ms]=Peranti CDWRITER... +Name[mt]=CDWRITER... +Name[nb]=CD-brenner-enhet +Name[nds]=CD-Brenner... +Name[ne]=CDWRITER यन्त्र... +Name[nl]=CD-writer... +Name[nn]=CD-brennareining … +Name[pa]=CDWRITER ਜੰਤਰ... +Name[pl]=Nagrywarka CD... +Name[pt]=Gravador de CDs... +Name[pt_BR]=Dispositivo de Gravação de CD... +Name[ro]=Dispozitiv CD-Writer... +Name[ru]=Пишущий CD-ROM... +Name[rw]=Apareye MWANDIKA-CD... +Name[se]=CDWRITER-ovttadat … +Name[sk]=Zariadenie CDWRITER... +Name[sl]=Naprava CDWRITER ... +Name[sr]=CD/DVD резач... +Name[sr@Latn]=CD/DVD rezač... +Name[sv]=Cd-brännarenhet... +Name[ta]=CDWRITER சாதனம் +Name[te]=సీడి వ్రైటర్ పరికరం... +Name[tg]=Дастгоҳи CDWRITER... +Name[th]=อุปกรณ์เขียนซีดี... +Name[tr]=CD Yazıcı Aygıtı... +Name[tt]=CD-Yazğıç Cıhazı... +Name[uk]=Пристрій CDWRITER... +Name[uz]=Kompakt-disk yozuvchi uskuna... +Name[uz@cyrillic]=Компакт-диск ёзувчи ускуна... +Name[vi]=Thiết bị ghi đĩa CD... +Name[wa]=Éndjin broûleu di plakes lazer... +Name[zh_CN]=刻录机设备... +Name[zh_TW]=光碟燒錄機設備 +Comment=New CDWRITER Device +Comment[af]=Nuwe CD Skrywer Toestel +Comment[ar]=جهاز تسجيل أقراص مدمجة جديد +Comment[be]=Новая прылада CDWRITER +Comment[bg]=Ново устройство CDWRITER +Comment[bn]=নতুন সিডি-রাইটার ডিভাইস +Comment[br]=Trobarzhell CDSKRIVER nevez +Comment[bs]=Nova CD pržilica +Comment[ca]=Dispositiu CDWRITER nou +Comment[cs]=Nová vypalovačka CD +Comment[csb]=Nowi wëpôlôrz CD +Comment[cy]=Dyfais CDWRITER Newydd +Comment[da]=Ny cd-skriver enhed +Comment[de]=Neuer CD-Brenner +Comment[el]=Νέα συσκευή CDWRITER +Comment[eo]=Nova lumdisk-skribilo +Comment[es]=Nueva grabadora de CD +Comment[et]=Uus CD-kirjutaja +Comment[eu]=CDWRITER gailu berria +Comment[fa]=دستگاه CDWRITER جدید +Comment[fi]=Uusi CDWRITER-laite +Comment[fr]=Nouveau graveur de CD-ROM +Comment[fy]=Nije kompaktskiifstasjon +Comment[ga]=Gléas CDWRITER Nua +Comment[gl]=Novo Dispositivo CDWRITER +Comment[he]=התקן צורב חדש +Comment[hi]=नया सीडी-राइटर उपकरण +Comment[hr]=Nova CD/DVD pržilica +Comment[hu]=Új CD-író +Comment[is]=Nýr geisladiskaskrifari +Comment[it]=Nuovo masterizzatore +Comment[ja]=新規 CD ライターデバイス +Comment[ka]=ახალი CDWRITER მოწყობილობა +Comment[kk]=Жаңа CDWRITER құрылғысы +Comment[km]=ឧបករណ៍ CDWRITER ថ្មី +Comment[ko]=새 CDWRITER 장치 +Comment[lt]=Naujas CDWRITER įrenginys +Comment[lv]=Jauna CD rakstīšanas iekārta +Comment[mk]=Нов CDWRITER уред +Comment[mn]=Шинэ КД бичигч төхөөрөмж +Comment[ms]=Peranti CDWRITER Baru +Comment[mt]=Apparat CDWRITER ġdid +Comment[nb]=Ny CD-brenner-enhet +Comment[nds]=Niegen CD-Brenner +Comment[ne]=नयाँ CDWRITER यन्त्र +Comment[nl]=Nieuwe CD-writer +Comment[nn]=Ny CD-brennareining +Comment[pa]=ਨਵਾਂ CDWRITER ਜੰਤਰ +Comment[pl]=Nowa nagrywarka CD +Comment[pt]=Novo Gravador de CDs +Comment[pt_BR]=Novo dispositivo de Gravação de CD +Comment[ro]=Dispozitiv CD-Writer nou +Comment[ru]=Ссылка на устройство пишущего CD-ROM +Comment[rw]=Apareye MWANDIKA-CD Nshya +Comment[se]=Ođđa CDWRITER-ovttadat +Comment[sk]=Nové zariadenie CDWRITER +Comment[sl]=Nova naprava CDWRITER +Comment[sr]=Нови CD/DVD резач +Comment[sr@Latn]=Novi CD/DVD rezač +Comment[sv]=Ny cd-brännarenhet +Comment[ta]=புது CDWRITER சாதனம் +Comment[te]=కొత్త సీడి వ్రైటర్ పరికరం +Comment[tg]=Дастгоҳ нави CDWRITER +Comment[th]=กำหนดอุปกรณ์เขียนซีดีใหม่ +Comment[tr]=Yeni CD Yazıcı Aygıtı +Comment[tt]=Yaña CD-Yazğıç Cıhazı +Comment[uk]=Новий пристрій CDWRITER +Comment[uz]=Yangi kompakt-disk yozuvchi uskuna +Comment[uz@cyrillic]=Янги компакт-диск ёзувчи ускуна +Comment[vi]=Tạo thiết bị ghi CD mới +Comment[wa]=Novea éndjin broûleu di plakes lazer +Comment[zh_CN]=新建刻录机设备 +Comment[zh_TW]=新光碟燒錄機設備 +Type=Link +URL=.source/CDWRITER-Device.desktop +Icon=cdwriter_unmount diff --git a/kdesktop/init/Templates/linkDVDROM.desktop b/kdesktop/init/Templates/linkDVDROM.desktop new file mode 100644 index 000000000..e65875b9d --- /dev/null +++ b/kdesktop/init/Templates/linkDVDROM.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +Name=DVD-ROM Device... +Name[af]=DVD-ROM Toestel +Name[ar]=جهاز قارئ أقراص رقمية مرئية... +Name[be]=Прылада DVD-ROM... +Name[bg]=DVD-ROM... +Name[bn]=ডিভিডি-রম ডিভাইস... +Name[br]=Trobarzhell DVD-ROM ... +Name[bs]=DVD-ROM uređaj... +Name[ca]=Dispositiu DVD-ROM... +Name[cs]=Jednotka DVD-ROM... +Name[csb]=Nëk DVD-ROM... +Name[cy]=Dyfais DVD-ROM... +Name[da]=Dvd-rom-enhed... +Name[de]=DVD-ROM-Laufwerk ... +Name[el]=Συσκευή DVD-ROM... +Name[eo]=DVDdiskingo... +Name[es]=Unidad de DVD-ROM... +Name[et]=DVD-ROM seade... +Name[eu]=DVD-ROM gailua... +Name[fa]=دستگاه DVD-ROM... +Name[fi]=DVD-ROM-laite +Name[fr]=Lecteur de DVD-ROM... +Name[fy]=Dûbelskiifstasjon +Name[ga]=Gléas DVD-ROM... +Name[gl]=Dispositivo DVD-ROM... +Name[he]=התקן DVD... +Name[hi]=डीवीडी-रोम उपकरण... +Name[hr]=CD/DVD-ROM uređaj... +Name[hu]=DVD-meghajtó... +Name[is]=DVD-ROM-drif... +Name[it]=Dispositivo DVD-ROM... +Name[ja]=DVD-ROM デバイス... +Name[ka]=DVD-ROM მოწყობილობა +Name[kk]=DVD-ROM құрылғысы... +Name[km]=ឧបករណ៍ DVD-ROM... +Name[ko]=DVD-ROM 장치... +Name[lt]=DVD-ROM įrenginys... +Name[lv]=DVD-ROM Iekārta... +Name[mk]=DVD-ROM Уред... +Name[mn]=DVD-ROM төхөөрөмж... +Name[ms]=Peranti DVD-ROM... +Name[mt]=DVD-ROM... +Name[nb]=DVD-ROM-enhet … +Name[nds]=DVD-ROM-Reedschap... +Name[ne]=DVD-ROM यन्त्र... +Name[nl]=DVD-romspeler... +Name[nn]=DVD-ROM-eining … +Name[pa]=DVD-ROM ਜੰਤਰ... +Name[pl]=Urządzenie DVD-ROM... +Name[pt]=Leitor de DVD-ROMs... +Name[pt_BR]=Dispositivo de DVD-ROM... +Name[ro]=Dispozitiv DVD-ROM... +Name[ru]=DVD-ROM... +Name[rw]=Apareye DVD-ROM Nshya... +Name[se]=DVD-ROM-ovttadat … +Name[sk]=Zariadenie DVD-ROM... +Name[sl]=Naprava DVD-ROM ... +Name[sr]=CD/DVD-ROM уређај... +Name[sr@Latn]=CD/DVD-ROM uređaj... +Name[sv]=Dvdrom-enhet... +Name[ta]=டிவிடிராம் சாதனம் +Name[te]=డివిడి-రామ్ పరికరం... +Name[tg]=Дастгоҳи DVD-ROM... +Name[th]=อุปกรณ์ดีวีดีรอม... +Name[tr]=CD/DVD-ROM Aygıtı... +Name[tt]=DVD-ROM Cıhazı... +Name[uk]=Пристрій DVD-ROM... +Name[uz]=DVD-ROM uskunasi... +Name[uz@cyrillic]=DVD-ROM ускунаси... +Name[vi]=Thiết bị đọc đĩa DVD-ROM... +Name[wa]=Éndjin léjheu di plakes lazer DVD... +Name[zh_CN]=DVD-ROM 设备... +Name[zh_TW]=DVD-ROM 設備... +Comment=New DVD-ROM Device +Comment[af]=Nuwe DVD-ROM Toestel +Comment[ar]=جهاز قارئ أقراص رقمية مرئية جديد +Comment[be]=Новая прылада DVD-ROM +Comment[bg]=Ново устройство DVD-ROM +Comment[bn]=নতুন ডিভিডি-রম ডিভাইস +Comment[br]=Trobarzhell DVD-ROM Nevez +Comment[bs]=Novi DVD-ROM uređaj +Comment[ca]=Dispositiu DVD-ROM nou +Comment[cs]=Nová jednotka DVD-ROM +Comment[csb]=Nowi nëk DVD-ROM +Comment[cy]=Dyfais DVD-ROM Newydd +Comment[da]=Ny dvd-rom enhed +Comment[de]=Neues DVD-ROM-Laufwerk +Comment[el]=Νέα συσκευή DVD-ROM +Comment[eo]=Nova DVDdiskingo... +Comment[es]=Nueva unidad de DVD-ROM +Comment[et]=Uus DVD-ROM seade +Comment[eu]=DVD-ROM gailu berria +Comment[fa]=دستگاه DVD-ROM جدید +Comment[fi]=Uusi DVD-ROM-laite +Comment[fr]=Nouveau lecteur de DVD-ROM +Comment[fy]=Nije dûbelskiifstasjon +Comment[ga]=Gléas nua DVD-ROM +Comment[gl]=Novo Dispositivo DVD-ROM +Comment[he]=התקן DVD חדש +Comment[hi]=नया डीवीडी-रोम उपकरण +Comment[hr]=Novi CD/DVD-ROM uređaj +Comment[hu]=Új DVD-meghajtó +Comment[is]=Nýtt DVD-ROM-drif +Comment[it]=Nuovo dispositivo DVD-ROM +Comment[ja]=新規 DVD-ROM デバイス +Comment[ka]=ახალი DVD-ROM მოწყობილობა +Comment[kk]=Жаңа DVD-ROM құрылғысы +Comment[km]=ឧបករណ៍ DVD-ROM ថ្មី +Comment[ko]=새 DVD-ROM 장치 +Comment[lt]=Naujas DVD-ROM įrenginys +Comment[lv]=Jauna DVD-ROM Iekārta +Comment[mk]=Нов DVD-ROM уред +Comment[mn]=Шинэ DVD-төхөөрөмж +Comment[ms]=Peranti DVD-ROM Baru +Comment[mt]=DVD-ROM ġdid +Comment[nb]=Ny DVD-ROM-enhet +Comment[nds]=Niege DVD-ROM-Reedschap +Comment[ne]=नयाँ DVD-ROM यन्त्र +Comment[nl]=Nieuwe DVD-romspeler +Comment[nn]=Ny DVD-ROM-eining +Comment[pa]=ਨਵਾਂ DVD-ROM ਜੰਤਰ +Comment[pl]=Nowe urządzenie DVD-ROM... +Comment[pt]=Novo leitor de DVD-ROMs +Comment[pt_BR]=Novo dispositivo de DVD-ROM +Comment[ro]=Dispozitiv DVD-ROM nou +Comment[ru]=Ссылка на устройство DVD-ROM +Comment[rw]=Apareye DVD-ROOM Nshya +Comment[se]=Ođđa DVD-ROM-ovttadat +Comment[sk]=Nové zariadenie DVD-ROM +Comment[sl]=Nova naprava DVD-ROM +Comment[sr]=Нови CD/DVD-ROM уређај +Comment[sr@Latn]=Novi CD/DVD-ROM uređaj +Comment[sv]=Ny dvdrom-enhet +Comment[ta]=புது DVD-ROM சாதனம் +Comment[te]=కొత్త డివిడి-రామ్ పరికరం +Comment[tg]=Дастгоҳи нави DVD-ROM +Comment[th]=กำหนดอุปกรณ์ซีดี/ดีวีดีรอมใหม่ +Comment[tr]=Yeni DVD-ROM Aygıtı +Comment[tt]=Yaña DVD-ROM Cıhazı +Comment[uk]=Новий пристрій DVD-ROM +Comment[uz]=Yangi DVD uskunasi +Comment[uz@cyrillic]=Янги DVD ускунаси +Comment[vi]=Tạo DVD-ROM mới +Comment[wa]=Novea éndjin léjheu di plakes lazer DVD +Comment[zh_CN]=新建 DVD-ROM 设备 +Comment[zh_TW]=新 DVD-ROM 設備 +Type=Link +URL=.source/DVDROM-Device.desktop +Icon=dvd_unmount diff --git a/kdesktop/init/Templates/linkFloppy.desktop b/kdesktop/init/Templates/linkFloppy.desktop new file mode 100644 index 000000000..2a86dd575 --- /dev/null +++ b/kdesktop/init/Templates/linkFloppy.desktop @@ -0,0 +1,158 @@ +[Desktop Entry] +Name=Floppy Device... +Name[af]=Sagteskyf Toestel... +Name[ar]=جهاز أقراص مرنة... +Name[be]=Дыскета... +Name[bg]=Флопи... +Name[bn]=ফ্লপি ডিভাইস... +Name[br]=Trobarzhell Pladennig ... +Name[bs]=Disketni uređaj... +Name[ca]=Dispositiu de disquet... +Name[cs]=Disketová jednotka... +Name[csb]=Nëk disczétków... +Name[cy]=Dyfais Disg Meddal... +Name[da]=Floppy-enhed... +Name[de]=Diskettenlaufwerk ... +Name[el]=Συσκευή δισκέτας... +Name[eo]=Disketingo... +Name[es]=Unidad de disquetes... +Name[et]=Flopiseade... +Name[eu]=Diskete gailua... +Name[fa]=دستگاه فلاپی... +Name[fi]=Levykeasema... +Name[fr]=Lecteur de disquettes... +Name[fy]=Slappe skiifstasjon... +Name[ga]=Gléas Diosca Flapach... +Name[gl]=Dispositivo de Disquete... +Name[he]=התקן תקליטון... +Name[hi]=फ़्लॉपी उपकरण... +Name[hr]=Disketni uređaj... +Name[hu]=Floppy-meghajtó... +Name[is]=Disklingadrif... +Name[it]=Dispositivo dischetti... +Name[ja]=フロッピーデバイス... +Name[ka]=დრეკადი დისკის წამყვანი +Name[kk]=Иілгіш диск... +Name[km]=ដ្រាយ​ថាស​ទន់... +Name[ko]=플로피 장치... +Name[lt]=Diskelių įrenginys... +Name[lv]=Diskešu Iekārta... +Name[mk]=Дискетна единица... +Name[mn]=Уян диск... +Name[ms]=Peranti Liut... +Name[mt]=Floppy... +Name[nb]=Diskettenhet … +Name[nds]=Diskett-Reedschap... +Name[ne]=फ्लपी यन्त्र... +Name[nl]=Diskettestation... +Name[nn]=Disketteining … +Name[pa]=ਫਲਾਪੀ ਜੰਤਰ... +Name[pl]=Stacja dyskietek... +Name[pt]=Leitor de Disquetes... +Name[pt_BR]=Dispositivo de disquete... +Name[ro]=Dispozitiv Floppy... +Name[ru]=Дисковод... +Name[rw]=Apareye Disikete... +Name[se]=Dibmaskearroovttadat … +Name[sk]=Disketová mechanika... +Name[sl]=Disketna naprava ... +Name[sr]=Флопи уређај... +Name[sr@Latn]=Flopi uređaj... +Name[sv]=Diskettenhet... +Name[ta]=நெகிழ்வட்டு சாதனம்... +Name[te]=ఫ్లాపీ పరికరం... +Name[tg]=Дастгоҳи Floppy... +Name[th]=อุปกรณ์ฟลอปปี้... +Name[tr]=Disket Aygıtı... +Name[tt]=Floppy Cıhazı... +Name[uk]=Пристрій гнучкого диска... +Name[uz]=Disket uskunasi... +Name[uz@cyrillic]=Дискет ускунаси... +Name[vi]=Ổ mềm... +Name[wa]=Éndjin léjheu di plaketes... +Name[zh_CN]=软驱设备... +Name[zh_TW]=軟碟設備... +Comment=New Floppy Device +Comment[af]=Nuwe Sagteskyf Toestel +Comment[ar]=جهاز أقراص مرنة جديد +Comment[az]=Yeni Disket Avadanlığı +Comment[be]=Новая дыскета +Comment[bg]=Ново флопи-дисково устройство +Comment[bn]=নতুন ফ্লপি ডিভাইস +Comment[br]=Trobarzhell Bladennig Nevez +Comment[bs]=Novi disketni uređaj +Comment[ca]=Dispositiu de disquet nou +Comment[cs]=Nová disketová jednotka +Comment[csb]=Nowi nëk disczétków +Comment[cy]=Dyfais Disg Meddal Newydd +Comment[da]=Ny floppy-enhed +Comment[de]=Neues Diskettenlaufwerk +Comment[el]=Νέα συσκευή δισκέτας +Comment[eo]=Nova disketa ingo +Comment[es]=Nueva unidad de disquetes +Comment[et]=Uus flopiseade +Comment[eu]=Diskete gailu berria +Comment[fa]=دستگاه فلاپی جدید +Comment[fi]=Uusi levykeasema +Comment[fr]=Nouveau lecteur de disquettes +Comment[fy]=Nije slappe skiifstasjon +Comment[ga]=Gléas nua diosca flapach +Comment[gl]=Nova Disqueteira +Comment[he]=התקן תקליטון חדש +Comment[hi]=नया फ़्लॉपी उपकरण +Comment[hr]=Novi disketni uređaj +Comment[hu]=Új floppy-meghajtó +Comment[id]=Divais Floppy baru +Comment[is]=Nýtt disklingadrif +Comment[it]=Nuovo dispositivo dischetti +Comment[ja]=新規フロッピーディスク +Comment[ka]=ახალი დრეკადი დისკის წამყვანი +Comment[kk]=Жаңа иілгіш диск құрылғысы +Comment[km]=ឧបករណ៍​ថាស​ទន់​ថ្មី +Comment[ko]=새 플로피 장치 +Comment[lo]=ກຳນົດອັຸປະກອນຟອບປີ້ໃຫມ่ +Comment[lt]=Naujas diskelių įrenginys +Comment[lv]=Jauna Diskešu iekārta +Comment[mk]=Нова дискетна единица +Comment[mn]=Шинэ уян диск хөтлөгч +Comment[ms]=Peranti Liut Baru +Comment[mt]=Apparat floppy ġdid +Comment[nb]=Ny diskettenhet +Comment[nds]=Niege Diskettreedschap +Comment[ne]=नयाँ फ्लपी यन्त्र +Comment[nl]=Nieuw diskettestation +Comment[nn]=Ny disketteining +Comment[nso]=Leano le Leswa la Floopy +Comment[oc]=Dispositiu de disquet nou +Comment[pa]=ਨਵਾਂ ਫਲਾਪੀ ਜੰਤਰ +Comment[pl]=Nowa stacja dyskietek +Comment[pt]=Novo leitor de disquetes +Comment[pt_BR]=Novo dispositivo de disquete +Comment[ro]=Dispozitiv Floppy nou +Comment[ru]=Ссылка на устройство дисковода +Comment[rw]=Apareye Disikete Nshya +Comment[se]=Ođđa dibmaskearroovttadat +Comment[sk]=Nová disketová mechanika +Comment[sl]=Nova disketna naprava +Comment[sr]=Нови флопи уређај +Comment[sr@Latn]=Novi flopi uređaj +Comment[sv]=Ny diskettenhet +Comment[ta]=புது நெகிழ்வட்டு சாதனம் +Comment[te]=కొత్త ఫ్లాపీ పరికరం +Comment[tg]=Дастгоҳи нави Floppy +Comment[th]=กำหนดอุปกรณ์ฟล็อปปีใหม่ +Comment[tr]=Yeni Disket Aygıtı +Comment[tt]=Yaña Floppy Cıhazı +Comment[uk]=Новий пристрій гнучкого диска +Comment[uz]=Yangi disket uskunasi +Comment[uz@cyrillic]=Янги дискет ускунаси +Comment[ven]=Maano maswa a Floppy +Comment[vi]=Tạo ổ mềm mới +Comment[wa]=Novea éndjin léjheu di plaketes... +Comment[xh]=Icebo Elitsha le Floppy +Comment[zh_CN]=新建软驱设备 +Comment[zh_TW]=新軟碟設備 +Comment[zu]=Ithuluzi le-Floppy elisha +Type=Link +URL=.source/Floppy.desktop +Icon=3floppy_unmount diff --git a/kdesktop/init/Templates/linkHD.desktop b/kdesktop/init/Templates/linkHD.desktop new file mode 100644 index 000000000..43a5ba482 --- /dev/null +++ b/kdesktop/init/Templates/linkHD.desktop @@ -0,0 +1,157 @@ +[Desktop Entry] +Name=Hard Disc Device... +Name[af]=Hardeskyf Toestel... +Name[ar]=جهاز القرص الصلب... +Name[be]=Раздзел жорсткага дыска... +Name[bg]=Твърд диск... +Name[bn]=হার্ড ডিস্ক ডিভাইস... +Name[br]=Trobarzhell Bladenn ... +Name[bs]=Hard disk uređaj... +Name[ca]=Dispositius de disc dur... +Name[cs]=Pevný disk... +Name[csb]=Cwiardi disk... +Name[cy]=Dyfais Disg Caled... +Name[da]=Harddisk-enhed... +Name[de]=Festplatte ... +Name[el]=Συσκευή σκληρού δίσκου... +Name[eo]=Fiksdiskingo... +Name[es]=Disco duro... +Name[et]=Kõvaketas... +Name[eu]=Diska gogorra... +Name[fa]=دستگاه دیسک سخت... +Name[fi]=Kiintolevy... +Name[fr]=Disque dur... +Name[fy]=Fêste skiif... +Name[ga]=Gléas Diosca Crua... +Name[gl]=Dispositivo de Disco Duro... +Name[he]=התקן כונן קשיח... +Name[hi]=हार्ड डिस्क उपकरण... +Name[hr]=Tvrdi disk... +Name[hu]=Merevlemez-partíció... +Name[is]=Harður diskur... +Name[it]=Disco rigido... +Name[ja]=ハードディスクデバイス... +Name[ka]=ხისტი დისკი... +Name[kk]=Қатқыл диск... +Name[km]=ឧបករណ៍​ថាស​រឹង... +Name[ko]=하드 디스크 장치... +Name[lt]=Kietojo disko įrenginys... +Name[lv]=Cietais Disks... +Name[mk]=Тврд диск... +Name[mn]=Хатуу диск... +Name[ms]=Peranti Cakera Keras... +Name[mt]=Ħard disk... +Name[nb]=Harddisk … +Name[nds]=Fastplaat... +Name[ne]=हार्डडिस्क यन्त्र... +Name[nl]=Harde Schijf... +Name[nn]=Harddisk … +Name[pa]=ਹਾਰਡ-ਡਿਸਕ ਜੰਤਰ... +Name[pl]=Twardy dysk... +Name[pt]=Disco Rígido... +Name[pt_BR]=Disco rígido... +Name[ro]=Dispozitiv Hard Disc... +Name[ru]=Жёсткий диск... +Name[rw]=Ububiko Disiki... +Name[se]=Garraskearru-ovttadat … +Name[sk]=Pevný disk... +Name[sl]=Naprava trdega diska ... +Name[sr]=Хард диск... +Name[sr@Latn]=Hard disk... +Name[sv]=Hårddisk... +Name[ta]=வட்டு +Name[te]=హార్డ్ డిస్క్ పరికరం... +Name[tg]=Дастгоҳи Диски Сахти... +Name[th]=อุปกรณ์ฮาร์ดดิสก์... +Name[tr]=Sabit Disk Aygıtı... +Name[tt]=Eçke Disk Cıhazı... +Name[uk]=Пристрій жорсткого диска... +Name[uz]=Qattiq disk uskunasi... +Name[uz@cyrillic]=Қаттиқ диск ускунаси... +Name[vi]=Ổ cứng... +Name[wa]=Éndjin di deure plake... +Name[zh_CN]=硬盘设备... +Name[zh_TW]=硬碟設備... +Comment=New Hard Disc +Comment[af]=Nuwe Hardeskyf +Comment[ar]=قرص صلب جديد +Comment[az]=Yeni Sabit Disk +Comment[be]=Новы раздзел жорсткага дыска +Comment[bg]=Нов твърд диск +Comment[bn]=নতুন হার্ড ডিস্ক +Comment[br]=Trobarzhell Bladenn Nevez +Comment[bs]=Novi hard disk +Comment[ca]=Disc dur nou +Comment[cs]=Nový pevný disk +Comment[csb]=Nowi cwiardi disk +Comment[cy]=Disg Caled Newydd +Comment[da]=Ny harddisk +Comment[de]=Neue Festplatte +Comment[el]=Νέος σκληρός δίσκος +Comment[en_GB]=New Hard Disk +Comment[eo]=Nova fiksdisko +Comment[es]=Nuevo disco duro +Comment[et]=Uus kõvaketas +Comment[eu]=Disko gogor berria +Comment[fa]=دیسک سخت جدید +Comment[fi]=Uusi kiintolevy +Comment[fr]=Nouveau disque dur +Comment[fy]=Nije Fêste skiif +Comment[ga]=Diosca crua nua +Comment[gl]=Novo Disco Duro +Comment[he]=כונן קשיח חדש +Comment[hi]=नया हार्ड डिस्क +Comment[hr]=Novi tvrdi disk +Comment[hu]=Új merevlemez-partíció +Comment[is]=Nýr harður diskur +Comment[it]=Nuovo disco rigido +Comment[ja]=新規ハードディスク +Comment[ka]=ახალი ხისტი დისკი +Comment[kk]=Жаңа қатқыл дискі +Comment[km]=ថាស​រឹង​ថ្មី +Comment[ko]=새 하드 디스크 +Comment[lo]=ກຳນົດອຸປະກອນຮາດດີສໃຫ່ມ +Comment[lt]=Naujas kietas diskas +Comment[lv]=Jauns Cietais Disks +Comment[mk]=Нов тврд диск +Comment[mn]=Шинэ хатуу диск +Comment[ms]=Cakera Keras Baru +Comment[mt]=Ħard disk ġdid +Comment[nb]=Ny harddisk +Comment[nds]=Niege Fastplaat +Comment[ne]=नयाँ हार्डडिस्क +Comment[nl]=Nieuwe harde schijf +Comment[nn]=Ny harddisk +Comment[nso]=Hard Disc ye Ntshwa +Comment[pa]=ਨਵੀਂ ਹਾਰਡ-ਡਿਸਕ +Comment[pl]=Nowy twardy dysk +Comment[pt]=Novo Disco Rígido +Comment[pt_BR]=Novo disco rígido +Comment[ro]=Hard Disc nou +Comment[ru]=Ссылка на устройство жёсткого диска +Comment[rw]=Ububiko Disiki Bushya +Comment[se]=Ođđa garraskearru +Comment[sk]=Nový pevný disk +Comment[sl]=Nov trdi disk +Comment[sr]=Нови хард диск +Comment[sr@Latn]=Novi hard disk +Comment[sv]=Ny hårddisk +Comment[ta]=புது வன் தகடு +Comment[te]=కొత్త హార్డ్ డిస్క్ +Comment[tg]=Диски Сахти нав +Comment[th]=กำหนดอุปกรณ์ฮาร์ดดิสก์ใหม่ +Comment[tr]=Yeni Sabit Disk +Comment[tt]=Yaña Qatı Disk +Comment[uk]=Новий жорсткий диск +Comment[uz]=Yangi qattiq disk uskunasi +Comment[uz@cyrillic]=Янги қаттиқ диск ускунаси +Comment[ven]=Disiki ntswa yo khwathaho +Comment[vi]=Tạo ổ cứng mới +Comment[wa]=Novea éndjin di deure plake +Comment[xh]=Hard Disc Entsha +Comment[zh_CN]=新建硬盘 +Comment[zh_TW]=新硬碟設備 +Comment[zu]=I-diski Elukhuni Entsha +Type=Link +URL=.source/HD.desktop +Icon=hdd_unmount diff --git a/kdesktop/init/Templates/linkMO.desktop b/kdesktop/init/Templates/linkMO.desktop new file mode 100644 index 000000000..44f801e5e --- /dev/null +++ b/kdesktop/init/Templates/linkMO.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +Name=MO Device... +Name[af]=MO Toestel... +Name[ar]=جهاز MO... +Name[be]=Прылада MO... +Name[bg]=MO... +Name[bn]=MO ডিভাইস... +Name[br]=Trobarzhell MO ... +Name[bs]=MO uređaj... +Name[ca]=Dispositiu MO... +Name[cs]=MO zařízení... +Name[csb]=Nëk MO... +Name[cy]=Dyfais MO... +Name[da]=MO-enhed... +Name[de]=MO-Laufwerk ... +Name[el]=Συσκευή MO... +Name[eo]=Magnetdiskingo... +Name[es]=Dispositivo de MO... +Name[et]=MO seade... +Name[eu]=MO gailua... +Name[fa]=دستگاه MO... +Name[fi]=MO-laite... +Name[fr]=Périphérique MO... +Name[fy]=Magnetyske skiif stasjon... +Name[ga]=Gléas MO... +Name[gl]=Dispositivo MO... +Name[he]=התקן MO... +Name[hi]=एमओ उपकरण... +Name[hr]=MO uređaj... +Name[hu]=Magnetooptikai eszköz... +Name[is]=MO tæki... +Name[it]=Dispositivo MO... +Name[ja]=MO デバイス... +Name[ka]=MO მოწყობილობა +Name[kk]=Магнитооптик құрылғысы... +Name[km]=ឧបករណ៍ MO... +Name[ko]=MO 장치... +Name[lt]=MO įrenginys... +Name[lv]=MO Iekārta... +Name[mk]=MO Уред... +Name[mn]=MO Төхөөрөмж... +Name[ms]=Peranti MO... +Name[mt]=Apparat MO... +Name[nb]=MO-enhet … +Name[nds]=MO-Reedschap... +Name[ne]=MO यन्त्र... +Name[nl]=MO-apparaat... +Name[nn]=MO-eining … +Name[pa]=MO ਜੰਤਰ... +Name[pl]=Napęd magnetooptyczny... +Name[pt]=Dispositivo MO... +Name[pt_BR]=Dispositivo MO... +Name[ro]=Dispozitiv MO... +Name[ru]=Магнитооптическое устройство... +Name[rw]=Apareye MO... +Name[se]=MO-ovttadat … +Name[sk]=Disk MO... +Name[sl]=MO naprava ... +Name[sr]=МО уређај... +Name[sr@Latn]=MO uređaj... +Name[sv]=Magneto-optisk enhet... +Name[ta]=MO சாதனம்... +Name[te]=ఎంఓ పరికరం... +Name[tg]=Дастгоҳи MO... +Name[th]=อุปกรณ์ MO +Name[tr]=MO Aygıtı... +Name[tt]=MO Cıhazı... +Name[uk]=Пристрій MO... +Name[uz]=MO uskunasi +Name[uz@cyrillic]=MO ускунаси +Name[vi]=Thiết bị MO... +Name[wa]=Éndjin MO... +Name[zh_CN]=MO 设备... +Name[zh_TW]=MO 設備... +Comment=New MO Device +Comment[af]=Nuwe MO Toestel +Comment[ar]=جهاز MO جديد +Comment[be]=Новая прылада MO +Comment[bg]=Ново устройство MO +Comment[bn]=নতুন MO ডিভাইস +Comment[br]=Trobarzhell MO nevez +Comment[bs]=Novi MO uređaj +Comment[ca]=Dispositiu MO nou +Comment[cs]=Nová MO mechanika +Comment[csb]=Nowi nëk MO +Comment[cy]=Dyfais MO Newydd +Comment[da]=Ny MO-enhed +Comment[de]=Neues MO-Laufwerk +Comment[el]=Νέα συσκευή MO +Comment[eo]=Nova magnetdiskingo +Comment[es]=Nuevo dispositivo de MO +Comment[et]=Uus MO seade +Comment[eu]=MO gailu berria +Comment[fa]=دستگاه MO جدید +Comment[fi]=Uusi MO-laite +Comment[fr]=Nouveau périphérique MO +Comment[fy]=Nije magnetyske skiif stasjon +Comment[ga]=Gléas MO Nua +Comment[gl]=Novo Dispositivo MO +Comment[he]=התקן MO חדש +Comment[hi]=नया एमओ उपकरण +Comment[hr]=Novi MO uređaj +Comment[hu]=Új magnetooptikai eszköz +Comment[is]=Nýtt MO tæki +Comment[it]=Nuovo dispositivo MO +Comment[ja]=新規 MO デバイス +Comment[ka]=ახალი MO მოწყობილობა +Comment[kk]=Жаңа магнитооптик құрылғысы +Comment[km]=ឧបករណ៍ MO ថ្មី +Comment[ko]=새 MO 장치 +Comment[lt]=Naujas MO įrenginys +Comment[lv]=Jauna MO iekārta +Comment[mk]=Нов MO уред +Comment[mn]=Шинэ MO төхөөрөмж +Comment[ms]=Peranti MO Baru +Comment[mt]=Apparat MO ġdid +Comment[nb]=Ny MO-enhet +Comment[nds]=Niege MO-Reedschap +Comment[ne]=नयाँ MO यन्त्र +Comment[nl]=Nieuw MO-aparaat +Comment[nn]=Ny MO-eining +Comment[pa]=ਨਵਾਂ MO ਜੰਤਰ +Comment[pl]=Nowy napęd magnetooptyczny +Comment[pt]=Novo Dispositivo MO +Comment[pt_BR]=Novo dispositivo MO +Comment[ro]=Dispozitiv MO nou +Comment[ru]=Ссылка на магнитооптическое устройство +Comment[rw]= Apareye MO Nshya +Comment[se]=Ođđa MO-ovttadat +Comment[sk]=Nové zariadenie MO +Comment[sl]=Nova MO naprava +Comment[sr]=Нови МО уређај +Comment[sr@Latn]=Novi MO uređaj +Comment[sv]=Ny magneto-optisk enhet +Comment[ta]=புது MO சாதனம் +Comment[te]=కొత్త ఎంఓ పరికరం +Comment[tg]=Дастгоҳи нави MO +Comment[th]=กำหนดอุปกรณ์ MO ใหม่ +Comment[tr]=Yeni MO Aygıtı +Comment[tt]=Yaña MO Cıhazı +Comment[uk]=Новий пристрій MO +Comment[uz]=Yangi MO uskunasi +Comment[uz@cyrillic]=Янги MO ускунаси +Comment[vi]=Tạo MO mới +Comment[wa]=Novea éndjin MO +Comment[zh_CN]=新建 MO 设备 +Comment[zh_TW]=新 MO 設備 +Type=Link +URL=.source/MO-Device.desktop +Icon=mo_unmount diff --git a/kdesktop/init/Templates/linkNFS.desktop b/kdesktop/init/Templates/linkNFS.desktop new file mode 100644 index 000000000..a7952c33f --- /dev/null +++ b/kdesktop/init/Templates/linkNFS.desktop @@ -0,0 +1,91 @@ +[Desktop Entry] +Name=NFS... +Name[ar]=نظام ملفات الشبكة (NFS)... +Name[bn]=এন-এফ-এস (NFS)... +Name[br]=NFS ... +Name[de]=NFS ... +Name[hi]=एनएफ़एस... +Name[hu]=NFS-megosztás... +Name[nb]=NFS … +Name[nn]=NFS … +Name[ru]=Диск NFS... +Name[se]=NFS … +Name[sl]=NFS ... +Name[te]=ఎన్ ఎఫ్ ఎస్... +Name[th]=การเชื่อมโยง NFS... +Comment=New NFS Link +Comment[af]=Nuwe NFS Skakel +Comment[ar]=رابط NFS جديد +Comment[be]=Новая спасылка на NFS +Comment[bg]=Нова връзка NFS +Comment[bn]=নতুন এন-এফ-এস লিঙ্ক +Comment[br]=Liamm NFS Nevez +Comment[bs]=Novi NFS link +Comment[ca]=Enllaç NFS nou +Comment[cs]=Nový NFS odkaz +Comment[csb]=Nowi lënk do NFS +Comment[cy]=Cyswllt NFS Newydd +Comment[da]=Nyt NFS-link +Comment[de]=Neue NFS-Verknüpfung +Comment[el]=Νέος δεσμός NFS +Comment[eo]=Nova NFS-ligo +Comment[es]=Nuevo enlace NFS +Comment[et]=Uus NFS viit +Comment[eu]=NFS esteka berria +Comment[fa]=پیوند NFS جدید +Comment[fi]=Uusi NFS-linkki +Comment[fr]=Nouveau lien NFS +Comment[fy]=Nije NFS-Keppeling +Comment[ga]=Nasc nua NFS +Comment[gl]=Nova Ligazón NFS +Comment[he]=קישור NFS חדש +Comment[hi]=नया एनएफ़एस लिंक +Comment[hr]=Nova NFS veza +Comment[hu]=Új NFS-link +Comment[is]=Ný NFS tenging +Comment[it]=Nuovo collegamento NFS +Comment[ja]=新規 NFS リンク +Comment[ka]=ახალი NFS ბმული +Comment[kk]=Жаңа NFS сілтемесі +Comment[km]=តំណ NFS ថ្មី +Comment[ko]=새 NFS 연결 +Comment[lt]=Nauja NFS nuoroda +Comment[lv]=Jauna NFS saite +Comment[mk]=Нова NFS врска +Comment[mn]=Шинэ NFS холбоос +Comment[ms]=Pautan NFS Baru +Comment[mt]=Link ġdid għal NFS +Comment[nb]=Ny NFS-lenke +Comment[nds]=Niegen NFS-Link +Comment[ne]=नयाँ NFS लिङ्क +Comment[nl]=Nieuwe NFS-koppeling +Comment[nn]=Ny NFS-lenkje +Comment[pa]=ਨਵਾਂ NFS ਸੰਬੰਧ +Comment[pl]=Nowy skrót do NFS... +Comment[pt]=Nova ligação NFS +Comment[pt_BR]=Novo Link NFS +Comment[ro]=Legătură NFS nouă +Comment[ru]=Ссылка на диск NFS +Comment[rw]= Ihuza NFS Rishya +Comment[se]=Ođđa NFS-liŋka +Comment[sk]=Nový odkaz NFS +Comment[sl]=Nova povezava NFS +Comment[sr]=Нова NFS веза +Comment[sr@Latn]=Nova NFS veza +Comment[sv]=Ny NFS-länk +Comment[ta]=புது NFS இணைப்பு +Comment[te]=కొత్త ఎన్ ఎఫ్ ఎస్ లింక్ +Comment[tg]=NFS-и пайванди нав +Comment[th]=สร้างการเชื่อมโยง NFS ใหม่ +Comment[tr]=Yeni NFS Bağlantısı +Comment[tt]=NFS öçen Yaña Bäy +Comment[uk]=Нове посилання NFS +Comment[uz]=NFS bilan yangi bogʻ +Comment[uz@cyrillic]=NFS билан янги боғ +Comment[vi]=Tạo liên kết NFS mới +Comment[wa]=Novea loyén NFS +Comment[zh_CN]=新建 NFS 链接 +Comment[zh_TW]=新 NFS 鏈結 +Type=Link +URL=.source/NFS.desktop +Icon=nfs_unmount diff --git a/kdesktop/init/Templates/linkProgram.desktop b/kdesktop/init/Templates/linkProgram.desktop new file mode 100644 index 000000000..867e9e380 --- /dev/null +++ b/kdesktop/init/Templates/linkProgram.desktop @@ -0,0 +1,153 @@ +[Desktop Entry] +Name=Link to Application... +Name[af]=Skakel na Program... +Name[ar]=رابط لتطبيق... +Name[be]=Спасылка на праграму... +Name[bg]=Връзка към програма... +Name[bn]=অ্যাপলিকেশন-এ লিঙ্ক... +Name[br]=Liamm ouzh un arload ... +Name[bs]=Veza do programa... +Name[ca]=Enllaç a aplicació... +Name[cs]=Odkaz na aplikaci... +Name[csb]=Lënk do programë... +Name[cy]=Cyswllt i Gymhwysiad... +Name[da]=Link til program... +Name[de]=Verknüpfung zu Programm ... +Name[el]=Δεσμός με εφαρμογή... +Name[eo]=Ligo al aplikaĵo... +Name[es]=Enlace a aplicación... +Name[et]=Viit rakendusele... +Name[eu]=Esteka aplikazioari... +Name[fa]=پیوند به کاربرد... +Name[fi]=Linkki sovellukseen... +Name[fr]=Lien vers une application... +Name[fy]=Keppeling nei tappasing... +Name[ga]=Nasc go Feidhmchlár... +Name[gl]=Ligazón a unha Aplicación... +Name[he]=קישור ליישום... +Name[hi]=अनुप्रयोग को लिंक... +Name[hr]=Veza s aplikacijom... +Name[hu]=Alkalmazásra mutató link... +Name[is]=Tengja við forrit... +Name[it]=Collegamento ad un'applicazione... +Name[ja]=アプリケーションへのリンク... +Name[ka]=პროგრამის ბმული... +Name[kk]=Қолданбаға сілтеме... +Name[km]=តំណ​ទៅ​កម្មវិធី... +Name[ko]=프로그램으로 향한 연결... +Name[lt]=Programos nuoroda... +Name[lv]=Saite uz Aplikāciju... +Name[mk]=Врска до апликација... +Name[mn]=Програмтай холбох... +Name[ms]=Paut ke Aplikasi... +Name[mt]=Link għal programm... +Name[nb]=Lenke til program … +Name[nds]=Link na'n Programm... +Name[ne]=अनुप्रयोगमा लिङ्क गर्नुहोस्... +Name[nl]=Koppeling naar toepassing... +Name[nn]=Lenkje til program … +Name[pa]=ਕਾਰਜ ਨਾਲ ਸੰਬੰਧ... +Name[pl]=Skrót do programu... +Name[pt]=Atalho para Aplicação... +Name[pt_BR]=Link para Aplicativo... +Name[ro]=Legătură către aplicație... +Name[ru]=Ссылка на приложение... +Name[rw]=Ihuza kuri Porogaramu... +Name[se]=Liŋka prográmmii … +Name[sk]=Odkaz na aplikáciu... +Name[sl]=Povezava do programa ... +Name[sr]=Веза ка програму... +Name[sr@Latn]=Veza ka programu... +Name[sv]=Länk till program... +Name[ta]=விண்ணப்பத்துக்கு இணை... +Name[tg]=Пайванд ба барномаи... +Name[th]=เชื่อมโยงไปยังแอพพลิเคชัน... +Name[tr]=Uygulamaya Bağlantı... +Name[tt]=Yazılımğa Bäy... +Name[uk]=Посилання на програму... +Name[uz]=Dastur bilan bogʻ... +Name[uz@cyrillic]=Дастур билан боғ... +Name[vi]=Liên kết tới một Chương trình... +Name[wa]=Loyén viè on programe... +Name[zh_CN]=应用程序链接... +Name[zh_TW]=應用程式連結... +Comment=New Link to Application +Comment[af]=Nuwe Skakel na Aansoek +Comment[ar]=إرتباط جديد بتطبيق +Comment[be]=Новая спасылка на праграму +Comment[bg]=Нова връзка към програма +Comment[bn]=অ্যাপলিকেশন-এ নতুন লিঙ্ক +Comment[br]=Liamm nevez ouzh un arload ... +Comment[bs]=Nova veza do programa +Comment[ca]=Nou enllaç a l'aplicació +Comment[cs]=Nový odkaz na aplikaci +Comment[csb]=Nowi lënk do programë +Comment[cy]=Cyswllt Newydd i Gymhwysiad +Comment[da]=Nyt link til program +Comment[de]=Neue Verknüpfung mit Programm +Comment[el]=Νέος δεσμός με εφαρμογή +Comment[eo]=Nova ligo al aplikaĵo +Comment[es]=Nuevo enlace a aplicación +Comment[et]=Uus viit rakendusele +Comment[eu]=Aplikazioarekiko esteka berria +Comment[fa]=پیوند جدید به کاربرد +Comment[fi]=Uusi linkki sovellukseen +Comment[fr]=Nouveau lien vers une application +Comment[fy]=Nije keppeling naar toepassing +Comment[ga]=Nasc nua go feidhmchlár +Comment[gl]=Nova Ligazón a unha Aplicación +Comment[he]=קישור חדש ליישום +Comment[hi]=अनुप्रयोग को नई लिंक +Comment[hr]=Nova veza s aplikacijom +Comment[hu]=Alkalmazásra mutató új link +Comment[is]=Nýtt tengi við forrit +Comment[it]=Nuovo collegamento ad un'applicazione +Comment[ja]=新規アプリケーションリンク +Comment[ka]=პროგრამის ახალი ბმული +Comment[kk]=Қолданбаға жаңа сілтеме +Comment[km]=តំណ​ថ្មី​ទៅ​កម្មវិធី +Comment[ko]=프로그램으로 향한 새 연결 +Comment[lo]=ສ້າງລິ້ງໄປຍັງແອບພີເຄຊັ້ນໃຫມ່ +Comment[lt]=Nauja programos nuoroda +Comment[lv]=Jauna Saite uz Aplikāciju +Comment[mk]=Нова врска до апликација +Comment[mn]=програмтай шинээр холбох +Comment[ms]=Pautan Baru ke Aplikasi +Comment[mt]=Link ġdid ġħal programm +Comment[nb]=Ny lenke til program +Comment[nds]=Niegen Link na'n Programm +Comment[ne]=अनुप्रयोगमा नयाँ लिङ्क गर्नुहोस् +Comment[nl]=Nieuwe koppeling naar toepassing +Comment[nn]=Ny lenkje til program +Comment[nso]=Kgokaganyo ye Ntshwa go Tshomiso +Comment[pa]=ਕਾਰਜ ਨਾਲ ਨਵਾਂ ਸੰਬੰਧ +Comment[pl]=Nowy skrót do programu +Comment[pt]=Novo Atalho para Aplicação +Comment[pt_BR]=Novo link para Aplicativo +Comment[ro]=Legătură nouă către aplicație +Comment[ru]=Новая ссылка на приложение +Comment[rw]=Ihuza Rishya kuri Porogaramu +Comment[se]=Ođđa liŋka prográmmii +Comment[sk]=Nový odkaz na aplikáciu +Comment[sl]=Nova povezava do programa +Comment[sr]=Нова веза ка програму +Comment[sr@Latn]=Nova veza ka programu +Comment[sv]=Ny länk till program +Comment[ta]=பயன்பாட்டுக்கான புதிய இணைப்பு +Comment[tg]=Пайванди нав ба барнома +Comment[th]=สร้างการเชื่อมโยงใหม่ไปยังแอพพลิเคชัน +Comment[tr]=Uygulamaya Yeni Bağlantı +Comment[tt]=Yazılım öçen Yaña Bäy +Comment[uk]=Нове посилання на програму +Comment[uz]=Dastur bilan yangi bogʻ +Comment[uz@cyrillic]=Дастур билан янги боғ +Comment[ven]=Thumanyo ntswa kha apulifikhesheni +Comment[vi]=Tạo liên kết mới tới một chương trình +Comment[wa]=Novea loyén viè on programe +Comment[xh]=Ikhonkco Elitsha Lwesicelo +Comment[zh_CN]=新建应用程序链接 +Comment[zh_TW]=新建應用程式連結 +Comment[zu]=Isixhumanisi esisha esiya kumyaleli +Icon=exec +Type=Link +URL=.source/Program.desktop diff --git a/kdesktop/init/Templates/linkURL.desktop b/kdesktop/init/Templates/linkURL.desktop new file mode 100644 index 000000000..df71e95c2 --- /dev/null +++ b/kdesktop/init/Templates/linkURL.desktop @@ -0,0 +1,153 @@ +[Desktop Entry] +Name=Link to Location (URL)... +Name[af]=Skakel na Ligging (URL)... +Name[ar]=رابط لموقع... +Name[be]=Спасылка на месцазнаходжанне (URL)... +Name[bg]=Връзка към адрес... +Name[bn]=ইউ-আর-এল অবস্থানে লিঙ্ক... +Name[br]=Liamm ouzh ul lec'hiadur (URL) ... +Name[bs]=Veza do lokacije (URL)... +Name[ca]=Enllaç al localitzador (URL)... +Name[cs]=Odkaz na umístění (URL)... +Name[csb]=Lënk do adresë (URL)... +Name[cy]=Cyswllt i Leoliad (URL)... +Name[da]=Internetlink (URL)... +Name[de]=Verknüpfung zu Adresse (URL) ... +Name[el]=Δεσμός με τοποθεσία (URL)... +Name[eo]=Ligo al situo (URL)... +Name[es]=Enlace a dirección (URL)... +Name[et]=Viit asukohale (URL)... +Name[eu]=Esteka kokapenari (URL)... +Name[fa]=پیوند به محل )نشانی وب(... +Name[fi]=Linkki sijaintiin (URL)... +Name[fr]=Lien vers une URL... +Name[fy]=Keppeling nei lokaasje (URL-adres)... +Name[ga]=Nasc le Suíomh (URL)... +Name[gl]=Ligazón a un Sítio (URL)... +Name[he]=קישור למיקום (URL)... +Name[hi]=स्थान (यूआरएल) को लिंक... +Name[hr]=Veza s lokacijom (URL)... +Name[hu]=Internet-cím (URL)... +Name[is]=Staðsetningartengill... +Name[it]=Collegamento ad un indirizzo (URL)... +Name[ja]=場所へのリンク (URL) +Name[ka]=ადგილმდებარეობის ბმული (URL)... +Name[kk]=URL-адреске сілтеме... +Name[km]=តំណ​ទៅ​ទីតាំង (URL)... +Name[ko]=위치로 향한 연결 (URL)... +Name[lt]=Adreso nuoroda (URL)... +Name[lv]=Saite uz Vietu (URL)... +Name[mk]=Врска до локација (URL)... +Name[mn]=Хаягтай (URL) холбох... +Name[ms]=Paut ke Aplikasi (URL)... +Name[mt]=Link għal lokazzjoni (URL)... +Name[nb]=Lenke til nettadresse (URL) … +Name[nds]=Link na'n Oort (URL)... +Name[ne]=स्थानमा लिङ्क गर्नुहोस् (यूआरएल)... +Name[nl]=Koppeling naar locatie (URL-adres)... +Name[nn]=Lenkje til nettadresse (URL) … +Name[pa]=ਸਥਿਤੀ (URL) ਨਾਲ ਸੰਬੰਧ... +Name[pl]=Skrót do adresu (URL)... +Name[pt]=Atalho para Localização (URL)... +Name[pt_BR]=Link para Localização (URL)... +Name[ro]=Legătură către locație (URL)... +Name[ru]=Адрес Интернета... +Name[rw]=Ihuza ku ndangahantu (URL)... +Name[se]=Liŋka fierpmádatčujuhussii (URL) … +Name[sk]=Odkaz na umiestnenie (URL)... +Name[sl]=Povezava do lokacije (URL) ... +Name[sr]=Веза ка локацији (URL)... +Name[sr@Latn]=Veza ka lokaciji (URL)... +Name[sv]=Länk till plats (URL)... +Name[ta]=இடத்திற்கு இணை (URL)... +Name[tg]=Пайванд ба макони (URL)... +Name[th]=เชื่อมโยงไปยังตำแหน่ง (URL)... +Name[tr]=Konuma (URL) Bağlantı... +Name[tt]=Urınlaşu öçen Bäy (URL)... +Name[uk]=Посилання до адреси (URL)... +Name[uz]=Mavzu bilan bogʻ (URL)... +Name[uz@cyrillic]=Мавзу билан боғ (URL)... +Name[vi]=Liên kết tới trang mạng (URL)... +Name[wa]=Loyén viè ene plaece (URL)... +Name[zh_CN]=到位置(URL)的链接... +Name[zh_TW]=到位置的連結(URL) +Comment=Enter link to location (URL): +Comment[af]=Invoer skakel na ligging (Url): +Comment[ar]=أدخل رابط لموقع: +Comment[be]=Вызначце спасылку на месцазнаходжанне (URL): +Comment[bg]=Въведете връзката към адреса: +Comment[bn]=লিঙ্কের অবস্থান: +Comment[br]=Roit al liamm ouzh ul lec'hiadur (URL) : +Comment[bs]=Unesite vezu do lokacije (URL): +Comment[ca]=Entreu un enllaç al localitzador (URL): +Comment[cs]=Zadejte odkaz na umístění (URL): +Comment[csb]=Nowi lënk do internetowi adresë (URL): +Comment[cy]=Mewnosodwch cyswllt i leoliad (URL): +Comment[da]=Indtast internetlink (URL): +Comment[de]=Verknüpfung mit Adresse (URL) eingeben: +Comment[el]=Δώστε δεσμό στην τοποθεσία (URL): +Comment[eo]=Enigu ligon al situo (URL): +Comment[es]=Introduzca el enlace a la dirección (URL): +Comment[et]=Sisesta viit asukohale (URL): +Comment[eu]=Sartu kokapenarekiko (URL) esteka: +Comment[fa]=پیوند به محل )نشانی وب( را وارد کنید: +Comment[fi]=Anna linkki sijaintiin (URL): +Comment[fr]=Nouveau lien vers une URL : +Comment[fy]=Keppeling nei lokaasje ynfiere (URL-adres): +Comment[ga]=Iontráil nasc le suíomh (URL): +Comment[gl]=Introduza a ligazón á localización (URL): +Comment[he]=הזן את הקישור למיקום (URL): +Comment[hi]=स्थान (यूआरएल) को लिंक भरें: +Comment[hr]=Nova veza s lokacijom (URL) +Comment[hu]=Adja meg az internet-címet (URL-t): +Comment[is]=Gefðu upp slóð að staðsetningu: +Comment[it]=Immetti collegamento all'indirizzo (URL): +Comment[ja]=新規の場所へのリンク(URL): +Comment[ka]=შეიყვანეთ პროგრამის ბმული ბმული (URL) +Comment[kk]=URL-адресін келтіріңіз: +Comment[km]=បញ្ចូល​តំណ​ទៅ​ទីតាំង (URL) ៖ +Comment[ko]=연결할 위치(URL)를 입력하십시오: +Comment[lo]=ສ້າງລິໄປຍັງຕຳແຫນ່ງ (URL) ໃຫ່ມ +Comment[lt]=Nauja adreso nuoroda (URL) +Comment[lv]=Jauna Saite uz Vietu (URL): +Comment[mk]=Внесете врска до локацијата (URL): +Comment[mn]=Холбох хаяг (URL) өгөх: +Comment[ms]=Masukkan pautan ke lokasi (URL): +Comment[mt]=Link ġdid għal lokazzjoni (URL) +Comment[nb]=Ny lenke til en nettadresse: +Comment[nds]=Link na'n Oort (URL) ingeven: +Comment[ne]=स्थानमा प्रविष्टि लिङ्क गर्नुहोस् (यूआरएल): +Comment[nl]=Koppeling naar locatie invoeren (URL-adres): +Comment[nn]=Ny lenkje til Internettadresse: +Comment[nso]=Tsenya sekgokaganyi go tulo (URL): +Comment[pa]=ਸਥਿਤੀ (URL) ਨਾਲ ਸੰਬੰਧ ਦਿਓ: +Comment[pl]=Nowy skrót do adresu internetowego (URL): +Comment[pt]=Indique o atalho para a localização (URL): +Comment[pt_BR]=Digite o link para a localização (URL): +Comment[ro]=Introduceți legătura către locație (URL): +Comment[ru]=Адрес в Интернете: +Comment[rw]=Kwinjiza ihuza ku ndangahantu (URL): +Comment[se]=Bija liŋkka fierpmádatčujuhussii (URL): +Comment[sk]=Zadajte odkaz na umiestnenie (URL): +Comment[sl]=Vnesite povezavo do mesta (URL): +Comment[sr]=Унесите везу ка локацији (URL): +Comment[sr@Latn]=Unesite vezu ka lokaciji (URL): +Comment[sv]=Ange länk till plats (URL): +Comment[ta]=இடத்திற்கான இணைப்பை உள்ளிடு (URL): +Comment[tg]=Бадарғаро ба адреси (URL) ворид кунед: +Comment[th]=สร้างการเชื่อมโยงไปยังตำแหน่ง (URL) ใหม่ +Comment[tr]=Konuma bağlantıyı girin: +Comment[tt]=Urınlaşu bäyen kertü (URL): +Comment[uk]=Введіть посилання до адреси (URL): +Comment[uz]=Mavzuga bogʻni (URL) kiriting: +Comment[uz@cyrillic]=Мавзуга боғни (URL) киритинг: +Comment[ven]=Dzhenisani vhukwamani kha fhethu (URL): +Comment[vi]=Nhập liên kết tới trang mạng: +Comment[wa]=Novea loyén viè ene plaece (URL): +Comment[xh]=Ngenisa ikhonkco kwindawo ekuyo (URL): +Comment[zh_CN]=输入到位置(URL)的链接: +Comment[zh_TW]=輸入到位置的連結(URL): +Comment[zu]=Ngenisa isixhumanisi esiya endaweni (URL): +URL=.source/URL.desktop +Type=Link +Icon=www diff --git a/kdesktop/init/Templates/linkZIP.desktop b/kdesktop/init/Templates/linkZIP.desktop new file mode 100644 index 000000000..9ef9eaee9 --- /dev/null +++ b/kdesktop/init/Templates/linkZIP.desktop @@ -0,0 +1,150 @@ +[Desktop Entry] +Name=ZIP Device... +Name[af]=ZIP Toestel... +Name[ar]=جهاز ZIP... +Name[be]=Прылада ZIP... +Name[bg]=ZIP... +Name[bn]=ZIP ডিভাইস... +Name[br]=Trobarzhell ZIP ... +Name[bs]=ZIP uređaj... +Name[ca]=Dispositiu ZIP... +Name[cs]=ZIP jednotka... +Name[csb]=Nëk ZIP... +Name[cy]=Dyfais ZIP... +Name[da]=ZIP-enhed... +Name[de]=ZIP-Laufwerk ... +Name[el]=Συσκευή ZIP... +Name[eo]=ZIP-ingo... +Name[es]=Unidad ZIP... +Name[et]=ZIP seade... +Name[eu]=ZIP gailua... +Name[fa]=دستگاه ZIP... +Name[fi]=ZIP-laite... +Name[fr]=Lecteur ZIP... +Name[fy]=ZIP-apparaat... +Name[ga]=Gléas Zip... +Name[gl]=Dispositivo Zip... +Name[he]=התקן ZIP... +Name[hi]=जिप उपकरण... +Name[hr]=ZIP uređaj... +Name[hu]=ZIP-meghajtó... +Name[is]=ZIP-drif... +Name[it]=Dispositivo ZIP... +Name[ja]=ZIP デバイス... +Name[ka]=ZIP მოწყობილობა... +Name[kk]=ZIP құрылғысы... +Name[km]=ឧបករណ៍ ZIP... +Name[ko]=ZIP 장치... +Name[lt]=ZIP įrenginys... +Name[lv]=ZIP Iekārta... +Name[mk]=ZIP Уред... +Name[mn]=ZIP Төхөөрөмж.. +Name[ms]=Peranti ZIP... +Name[mt]=Apparat ZIP +Name[nb]=ZIP-enhet … +Name[nds]=ZIP-Reedschap... +Name[ne]=ZIP यन्त्र... +Name[nl]=ZIP-apparaat... +Name[nn]=ZIP-eining … +Name[pa]=ZIP ਜੰਤਰ... +Name[pl]=Napęd ZIP... +Name[pt]=Dispositivo ZIP... +Name[pt_BR]=Dispositivo ZIP... +Name[ro]=Dispozitiv ZIP... +Name[ru]=ZIP... +Name[rw]=Apareye ZIPU... +Name[se]=ZIP-Ovttadat … +Name[sk]=Mechanika ZIP... +Name[sl]=Naprava ZIP ... +Name[sr]=ZIP Уређај... +Name[sr@Latn]=ZIP Uređaj... +Name[sv]=Zip-enhet... +Name[ta]=ZIP சாதனங்கள் +Name[te]=జిప్ పరికరం... +Name[tg]=Дастгоҳи ZIP... +Name[th]=อุปกรณ์ ZIP... +Name[tr]=ZIP Aygıtı... +Name[tt]=ZIP Cıhazı... +Name[uk]=Пристрій ZIP... +Name[uz]=ZIP uskunasi... +Name[uz@cyrillic]=ZIP ускунаси... +Name[vi]=Ổ ZIP... +Name[wa]=Éndjin léjheu di plaketes ZIP... +Name[zh_CN]=ZIP 设备... +Name[zh_TW]=ZIP 設備... +Comment=New ZIP Device +Comment[af]=Nuwe ZIP Toestel... +Comment[ar]=جهاز ZIP جديد +Comment[be]=Новая прылада ZIP +Comment[bg]=Ново устройство ZIP +Comment[bn]=নতুন ZIP ডিভাইস +Comment[br]=Trobarzhell ZIP Nevez +Comment[bs]=Novi ZIP uređaj +Comment[ca]=Dispositiu ZIP nou +Comment[cs]=Nová ZIP jednotka +Comment[csb]=Nowi nëk ZIP +Comment[cy]=Dyfais ZIP Newydd +Comment[da]=Ny ZIP-enhed +Comment[de]=Neues ZIP-Laufwerk +Comment[el]=Νέα συσκευή ZIP +Comment[eo]=Nova ZIP-ingo +Comment[es]=Nueva unidad ZIP +Comment[et]=Uus ZIP seade +Comment[eu]=ZIP gailu berria +Comment[fa]=دستگاه ZIP جدید +Comment[fi]=Uusi ZIP-laite +Comment[fr]=Nouveau lecteur ZIP +Comment[fy]=Nije ZIP-apparaat +Comment[ga]=Gléas Nua Zip +Comment[gl]=Novo Dispositivo Zip +Comment[he]=התקן ZIP חדש +Comment[hi]=नया जिप उपकरण +Comment[hr]=Novi ZIP uređaj +Comment[hu]=Új ZIP-lemezes meghajtó +Comment[is]=Nýtt ZIP-drif +Comment[it]=Nuovo dispositivo ZIP +Comment[ja]=新規 ZIP デバイス +Comment[ka]=ახალი ZIP მოწყობილობა +Comment[kk]=Жаңа ZIP құрылғысы +Comment[km]=ឧបករណ៍ ZIP ថ្មី +Comment[ko]=새 ZIP 장치 +Comment[lt]=Naujas ZIP įrenginys +Comment[lv]=Jauna ZIP iekārta +Comment[mk]=Нов ZIP уред +Comment[mn]=Шинэ ZIP Төхөөрөмж.. +Comment[ms]=Peranti ZIP Baru +Comment[mt]=Apparat ZIP ġdid +Comment[nb]=Ny ZIP-enhet +Comment[nds]=Niege ZIP-Reedschap +Comment[ne]=नयाँ ZIP यन्त्र +Comment[nl]=Nieuw ZIP-apparaat +Comment[nn]=Ny ZIP-eining +Comment[pa]=ਨਵਾਂ ZIP ਜੰਤਰ +Comment[pl]=Nowy napęd ZIP +Comment[pt]=Novo Dispositivo ZIP +Comment[pt_BR]=Novo Dispositivo ZIP +Comment[ro]=Dispozitiv ZIP nou +Comment[ru]=Ссылка на устройство ZIP +Comment[rw]=Apareye ZIP Nshya +Comment[se]=Ođđa ZIP-ovttadat … +Comment[sk]=Nové zariadenie ZIP +Comment[sl]=Nova naprava ZIP +Comment[sr]=Нови ZIP уређај +Comment[sr@Latn]=Novi ZIP uređaj +Comment[sv]=Ny Zip-enhet +Comment[ta]=புதிய ZIP சாதனம் +Comment[te]=కొత్త జిప్ పరికరం +Comment[tg]=Дастгоҳи нави ZIP +Comment[th]=กำหนดอุปกรณ์ ZIP ตัวใหม่ +Comment[tr]=Yeni ZIP Aygıtı +Comment[tt]=Yaña ZIP Cıhazı +Comment[uk]=Новий пристрій ZIP +Comment[uz]=Yangi ZIP uskunasi +Comment[uz@cyrillic]=Янги ZIP ускунаси +Comment[vi]=Tạo ổ ZIP mới +Comment[wa]=Novea éndjin léjheu di plaketes ZIP +Comment[zh_CN]=新建 ZIP 设备 +Comment[zh_TW]=新 ZIP 設備 +Type=Link +URL=.source/ZIP-Device.desktop +Icon=zip_unmount diff --git a/kdesktop/init/directory.autostart b/kdesktop/init/directory.autostart new file mode 100644 index 000000000..d63845aed --- /dev/null +++ b/kdesktop/init/directory.autostart @@ -0,0 +1,68 @@ +[Desktop Entry] +Type=Directory +Name=Autostart +Name[af]=Outomatiese begin +Name[ar]=بدء تشغيل تلقائي +Name[az]=Öz-Özünə Başlama +Name[be]=Аўтазапуск +Name[bg]=Автоматично стартиране +Name[bn]=অটো-স্টার্ট +Name[br]=Emloc'h +Name[ca]=Autoengega +Name[csb]=Aùtosztart +Name[cy]=Hunan-gychwyn +Name[el]=Αυτόματη Έναρξη +Name[eo]=Aŭtolanĉo +Name[es]=Inicio automático +Name[eu]=Autoabiatu +Name[fa]=خودآغاز +Name[fi]=Käynnistä +Name[fr]=Démarrage automatique +Name[fy]=Automatysk Begjinne +Name[ga]=Tús uathoibríoch +Name[gl]=Autoinício +Name[he]=הפעלה אוטומטית +Name[hi]=स्वतःप्रारंभ +Name[hr]=Automatsko pokretanje +Name[hu]=Automatikus indítás +Name[is]=Sjálfræsing +Name[it]=Avvio automatico +Name[ja]=自動起動 +Name[ka]=ავტოგაშვება +Name[kk]=Автобастау +Name[km]=ចាប់ផ្ដើម​ស្វ័យប្រវត្តិ +Name[lo]=ເລິ່ມອັດໂນມັດ +Name[lt]=Autostartas +Name[lv]=Autostarts +Name[mk]=Автостарт +Name[mn]=Автомат эхлэгч +Name[ms]=Automula +Name[mt]=Awto-bidu +Name[ne]=स्वत: सुरु +Name[nso]=Thomo yago Itirisa +Name[pa]=ਸਵੈ-ਚਾਲਤ +Name[pt]=Arranque +Name[pt_BR]=Inicialização Automática +Name[ru]=Автозапуск +Name[se]=Autoálggaheapmi +Name[sk]=Autoštart +Name[sl]=Samodejni zagon +Name[sr]=Аутоматско покретање +Name[sr@Latn]=Automatsko pokretanje +Name[ta]=தானாகதுவக்கு +Name[te]=స్వయంచాలన +Name[tg]=Сар кунии автоматикӣ +Name[th]=เริ่มอัตโนมัติ +Name[tr]=Otomatik Başlat +Name[tt]=Üze Cibäreläse +Name[uk]=Автостарт +Name[uz]=Avto-boshlash +Name[uz@cyrillic]=Авто-бошлаш +Name[ven]=Thoma +Name[vi]=Tự khởi động +Name[wa]=Enonde tot seu +Name[xh]=Isiqalo esizenzekelayo +Name[zh_CN]=自动启动 +Name[zh_TW]=自動啟動 +Name[zu]=Ukuqala ngokuzenzekela + diff --git a/kdesktop/init/directory.desktop b/kdesktop/init/directory.desktop new file mode 100644 index 000000000..2269e69dd --- /dev/null +++ b/kdesktop/init/directory.desktop @@ -0,0 +1,81 @@ +[Desktop Entry] +Type=Directory +BgImage= +Icon=desktop +Name=Desktop +Name[af]=Werkskerm +Name[ar]=سطح المكتب +Name[az]=Masa Üstü +Name[be]=Працоўны стол +Name[bg]=Работен плот +Name[bn]=ডেস্কটপ +Name[br]=Gorretaol +Name[bs]=Radna površina +Name[ca]=Escriptori +Name[cs]=Pracovní plocha +Name[csb]=Pùlt +Name[cy]=Penbwrdd +Name[de]=Arbeitsfläche +Name[el]=Επιφάνεια εργασίας +Name[eo]=Tabulo +Name[es]=Escritorio +Name[et]=Töölaud +Name[eu]=Mahaigaina +Name[fa]=رومیزی +Name[fi]=Työpöytä +Name[fo]=Skriviborð +Name[fr]=Bureau +Name[fy]=Buroblêd +Name[ga]=Deasc +Name[gl]=Escritorio +Name[he]=שולחן עבודה +Name[hi]=डेस्कटॉप +Name[hr]=Radna površina +Name[hsb]=Dźěłowy powjerch +Name[hu]=Munkaasztal +Name[is]=Skjáborð +Name[ja]=デスクトップ +Name[ka]=სამუშაო დაფა +Name[kk]=Жұмыс үстелі +Name[km]=ផ្ទៃតុ +Name[ko]=데스크톱 +Name[lo]=ພື້ນທີ່ເຮັດວງກ +Name[lt]=Darbastalis +Name[lv]=Darbvirsma +Name[mk]=Работна површина +Name[mn]=Ажлын тавцан +Name[ms]=Ruang Kerja +Name[nb]=Skrivebord +Name[nds]=Schriefdisch +Name[ne]=डेस्कटप +Name[nl]=Bureaublad +Name[nn]=Skrivebord +Name[oc]=BurèU +Name[pa]=ਵੇਹੜਾ +Name[pl]=Pulpit +Name[pt]=Ambiente de Trabalho +Name[pt_BR]=Área de Trabalho +Name[ru]=Рабочий стол +Name[rw]=Ibiro +Name[se]=Čállinbeavdi +Name[sk]=Plocha +Name[sl]=Namizje +Name[sr]=Радна површина +Name[sr@Latn]=Radna površina +Name[ss]=Desktop +Name[sv]=Skrivbord +Name[ta]=மேல்மேசை +Name[te]=రంగస్ఠలం +Name[tg]=Мизи корӣ +Name[th]=พื้นที่ทำงาน +Name[tr]=Masaüstü +Name[tt]=Östäl +Name[uk]=Стільниця +Name[uz]=Ish stoli +Name[uz@cyrillic]=Иш столи +Name[ven]=Desikithopo +Name[vi]=Màn hình nền +Name[wa]=Sicribanne +Name[zh_CN]=桌面 +Name[zh_TW]=桌面 + diff --git a/kdesktop/init/directory.templates b/kdesktop/init/directory.templates new file mode 100644 index 000000000..d77fa5cb6 --- /dev/null +++ b/kdesktop/init/directory.templates @@ -0,0 +1,78 @@ +[Desktop Entry] +Type=Directory +Name=Templates +Name[af]=Voorbeelde +Name[ar]=القوالب +Name[az]=Nümunələr +Name[be]=Шаблоны +Name[bg]=Шаблони +Name[bn]=টেমপ্লেট +Name[br]=Patromoù +Name[bs]=Šabloni +Name[ca]=Plantilles +Name[cs]=Šablony +Name[csb]=Mùstrë +Name[cy]=Patrymluniau +Name[da]=Skabeloner +Name[de]=Vorlagen +Name[el]=Πρότυπα +Name[eo]=Ŝablonoj +Name[es]=Plantillas +Name[et]=Mallid +Name[eu]=Txantiloiak +Name[fa]=الگوها +Name[fi]=Pohjat +Name[fr]=Modèles +Name[fy]=Sjabloanen +Name[ga]=Teimpléid +Name[gl]=Modelos +Name[he]=תבניות +Name[hi]=टैम्प्लेट्स +Name[hr]=Predlošci +Name[hu]=Sablonok +Name[is]=Snið +Name[it]=Modelli +Name[ja]=テンプレート +Name[ka]=ნიმუშები +Name[kk]=Үлгілер +Name[km]=ពុម្ព +Name[lo]=ຕົ້ນແບບ +Name[lt]=Šablonai +Name[lv]=Šabloni +Name[mk]=Шаблони +Name[mn]=Шаблом +Name[ms]=Templat +Name[mt]=Mudelli +Name[nb]=Maler +Name[nds]=Vörlagen +Name[ne]=टेम्प्लेट +Name[nl]=Sjablonen +Name[nn]=Malar +Name[nso]=Dipapiso +Name[pa]=ਨਮੂਨਾ +Name[pl]=Wzorce +Name[pt]=Modelos +Name[pt_BR]=Modelos +Name[ro]=Modele +Name[ru]=Шаблоны +Name[se]=Mállet +Name[sk]=Šablóny +Name[sl]=Predloge +Name[sr]=Шаблони +Name[sr@Latn]=Šabloni +Name[sv]=Mallar +Name[ta]=வார்ப்புருக்கள் +Name[te]=టెంప్లెటులు +Name[tg]=Намунаҳо +Name[th]=ต้นแบบ +Name[tr]=Şablonlar +Name[tt]=Ürçetmä +Name[uk]=Шаблони +Name[uz]=Namunalar +Name[uz@cyrillic]=Намуналар +Name[vi]=Tiêu bản +Name[wa]=Modeles +Name[zh_CN]=模板 +Name[zh_TW]=範本 +Name[zu]=Ama-Templates + diff --git a/kdesktop/init/directory.trash b/kdesktop/init/directory.trash new file mode 100644 index 000000000..83b69240b --- /dev/null +++ b/kdesktop/init/directory.trash @@ -0,0 +1,160 @@ +[Desktop Entry] +Type=Link +URL=trash:/ +Encoding=UTF-8 +Icon=trashcan_full +EmptyIcon=trashcan_empty +Name=Trash +Name[af]=Gemors +Name[ar]=سلة النفايات +Name[az]=Zibil +Name[be]=Сметніца +Name[bg]=Кошче +Name[bn]=আবর্জনা +Name[br]=Pod-lastez +Name[bs]=Smeće +Name[ca]=Paperera +Name[cs]=Koš +Name[csb]=Kòsz +Name[cy]=Sbwriel +Name[da]=Affald +Name[de]=Mülleimer +Name[el]=Κάδος απορριμμάτων +Name[en_GB]=Wastebin +Name[eo]=Rubujo +Name[es]=Papelera +Name[et]=Prügikast +Name[eu]=Zaborra +Name[fa]=زباله +Name[fi]=Roskakori +Name[fr]=Corbeille +Name[fy]=Jiskefet +Name[ga]=Bruscar +Name[gl]=Lixo +Name[he]=אשפה +Name[hi]=रद्दी +Name[hr]=Otpad +Name[hsb]=Papjernik +Name[hu]=Szemétkosár +Name[is]=Rusl +Name[it]=Cestino +Name[ja]=ごみ箱 +Name[ka]=ურნა +Name[kk]=Өшірілгендер +Name[km]=ធុងសំរាម +Name[lo]=ຖັງຂີ້ເຫຍື່ອ +Name[lt]=Šiukšliadėžė +Name[lv]=Miskaste +Name[mk]=Корпа +Name[mn]=Хогийн сав +Name[ms]=Sampah +Name[mt]=Skart +Name[nb]=Papirkurv +Name[nds]=Affalltünn +Name[ne]=रद्दीटोकरी +Name[nl]=Prullenbak +Name[nn]=Papirkorg +Name[nso]=Seswaraditlakala +Name[pa]=ਰੱਦੀ +Name[pl]=Kosz +Name[pt]=Lixo +Name[pt_BR]=Lixo +Name[ro]=Gunoi +Name[ru]=Корзина +Name[se]=Ruskalihtti +Name[sk]=Kôš +Name[sl]=Smeti +Name[sr]=Смеће +Name[sr@Latn]=Smeće +Name[sv]=Skräp +Name[ta]=குப்பை +Name[te]=చెత్త బుట్ట +Name[tg]=Ахлотдон +Name[th]=ถังขยะ +Name[tr]=Çöp +Name[tt]=Çüplek +Name[uk]=Смітник +Name[uz]=Chiqindilar qutisi +Name[uz@cyrillic]=Чиқиндилар қутиси +Name[ven]=Tshikha +Name[vi]=Thùng rác +Name[wa]=Batch +Name[xh]=Inkukumo +Name[zh_CN]=回收站 +Name[zh_TW]=資源回收桶 +Name[zu]=Izibi +Comment=Contains removed files +Comment[af]=Bevat verwyder lêers +Comment[ar]=تحتوي على الملفات المحذوفة +Comment[az]=Silinmiş faylları daxil edir +Comment[be]=Утрымлівае выдаленыя файлы +Comment[bg]=Изтрити файлове +Comment[bn]=মুছে ফেলা ফাইল থাকে +Comment[bs]=Sadrži izbrisane datoteke +Comment[ca]=Conté els fitxers esborrats +Comment[cs]=Obsahuje odstraněné soubory +Comment[csb]=Zamëkô w se remniãté lopczi +Comment[cy]=Yn cynnwys ffeiliau sydd wedi eu gwaredu +Comment[da]=Indeholder fjernede filer +Comment[de]=Enthält gelöschte Dateien +Comment[el]=Περιέχει σβησμένα αρχεία +Comment[eo]=Enhavas forigitajn dosierojn +Comment[es]=Contiene archivos borrados +Comment[et]=Sisaldab eemaldatud faile +Comment[eu]=Kendutako fitxategiak dauzka +Comment[fa]=شامل پرونده‌های حذف‌شده +Comment[fi]=Sisältää poistettuja tiedostoja +Comment[fr]=Contient les fichiers supprimés +Comment[fy]=Befettet fuortsmieten triemmen +Comment[gl]=Contén ficheiros borrados +Comment[he]=מכילה קבצים שהוסרו +Comment[hi]=मिटाई गई फ़ाइलों को रखता है +Comment[hr]=Sadrži izbrisane datoteke +Comment[hu]=Itt találhatók a törölt fájlok +Comment[is]=Inniheldur fjarlægðar skrár +Comment[it]=Contiene i file cestinati +Comment[ja]=削除されたファイルを保持しています +Comment[ka]=შეიცავს წაშლილ ფაილებს +Comment[kk]=Өшірілген файлдар үшін +Comment[km]=ផ្ទុក​ឯកសារ​ដែល​បាន​យកចេញ +Comment[lo]=ທີ່ສຳລັບເກັບແຟ້ມຂອງເຈົ້າທີ່ຕ້ອງການລືບ +Comment[lt]=Čia yra ištrintos bylos +Comment[lv]=Satur aizvāktos failus +Comment[mk]=Содржи отстранети датотеки +Comment[mn]=Усгагдсан файлууд агуулагдана +Comment[ms]=Mengandungi fail yang dibuang +Comment[mt]=Fih fajls mormija +Comment[nb]=Inneholder slettede filer +Comment[nds]=Dor sünd wegdaan Dateien binnen +Comment[ne]=हटाएका फाइल समावेश गर्छ +Comment[nl]=Bevat de verwijderde bestanden +Comment[nn]=Inneheld sletta filer +Comment[nso]=Ena le difaele tseo di tlositswego +Comment[pa]=ਹਟਾਈਆਂ ਫਾਇਲ਼ਾਂ ਰੱਖਦਾ ਹੈ +Comment[pl]=Zawiera usunięte pliki +Comment[pt]=Contém os ficheiros apagados +Comment[pt_BR]=Contém arquivos removidos +Comment[ro]=Conține fișiere șterse +Comment[ru]=Содержит удалённые файлы +Comment[se]=Dáppe leat bálkestuvvon fiillat +Comment[sk]=Obsahuje zmazané súbory +Comment[sl]=Vsebuje odstranjene datoteke +Comment[sr]=Садржи уклоњене фајлове +Comment[sr@Latn]=Sadrži uklonjene fajlove +Comment[sv]=Innehåller borttagna filer +Comment[ta]=நீக்கப்பட்ட கோப்புகள் உள்ளது +Comment[tg]=Файлҳои нобудшуда дорад +Comment[th]=ที่สำหรับเก็บแฟ้มที่คุณต้องการลบ +Comment[tr]=Silinmiş dosyaları içerir +Comment[tt]=Beterelgän biremnär yatu urını +Comment[uk]=Містить вилучені файли +Comment[uz]=Olib tashlangan fayllardan iborat +Comment[uz@cyrillic]=Олиб ташланган файллардан иборат +Comment[ven]=Ina faela dzo bviswaho +Comment[vi]=Chứa tập tin đã vứt +Comment[wa]=I gn a des fitchîs oistés +Comment[xh]=Iqulathe iifayile ezisusiweyo +Comment[zh_CN]=保存临时删除的文件 +Comment[zh_TW]=包含刪除的檔案 +Comment[zu]=Iqukethe amafayela agudluziwe +OnlyShowIn=KDE diff --git a/kdesktop/kcheckrunning.cpp b/kdesktop/kcheckrunning.cpp new file mode 100644 index 000000000..eaf8b9ebb --- /dev/null +++ b/kdesktop/kcheckrunning.cpp @@ -0,0 +1,29 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Lubos Lunak + + 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 + +int main() + { + Display* dpy = XOpenDisplay( NULL ); + if( dpy == NULL ) + return 1; + Atom atom = XInternAtom( dpy, "_KDE_RUNNING", False ); + return XGetSelectionOwner( dpy, atom ) != None ? 0 : 1; + } diff --git a/kdesktop/kcustommenu.cc b/kdesktop/kcustommenu.cc new file mode 100644 index 000000000..675dab098 --- /dev/null +++ b/kdesktop/kcustommenu.cc @@ -0,0 +1,111 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Waldo Bastian + + 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 +#include + +#include +#include +#include + +#include "kcustommenu.h" + +class KCustomMenu::KCustomMenuPrivate +{ +public: + QMap entryMap; +}; + +KCustomMenu::KCustomMenu(const QString &configfile, QWidget *parent) + : QPopupMenu(parent, "kcustom_menu") +{ + d = new KCustomMenuPrivate; + + KConfig cfg(configfile, true, false); + int count = cfg.readNumEntry("NrOfItems"); + for(int i = 0; i < count; i++) + { + QString entry = cfg.readEntry(QString("Item%1").arg(i+1)); + if (entry.isEmpty()) + continue; + + // Try KSycoca first. + KService::Ptr menuItem = KService::serviceByDesktopPath( entry ); + if (!menuItem) + menuItem = KService::serviceByDesktopName( entry ); + if (!menuItem) + menuItem = new KService( entry ); + + if (!menuItem->isValid()) + continue; + + insertMenuItem( menuItem, -1 ); + } + connect(this, SIGNAL(activated(int)), this, SLOT(slotActivated(int))); +} + +KCustomMenu::~KCustomMenu() +{ + delete d; +} + +void +KCustomMenu::slotActivated(int id) +{ + KService::Ptr s = d->entryMap[id]; + if (!s) + return; + kapp->startServiceByDesktopPath(s->desktopEntryPath()); +} + +// The following is copied from kicker's PanelServiceMenu +void +KCustomMenu::insertMenuItem(KService::Ptr & s, int nId, int nIndex/*= -1*/) +{ + QString serviceName = s->name(); + + // item names may contain ampersands. To avoid them being converted + // to accelators, replace them with two ampersands. + serviceName.replace("&", "&&"); + + QPixmap normal = KGlobal::instance()->iconLoader()->loadIcon(s->icon(), KIcon::Small, + 0, KIcon::DefaultState, 0L, true); + QPixmap active = KGlobal::instance()->iconLoader()->loadIcon(s->icon(), KIcon::Small, + 0, KIcon::ActiveState, 0L, true); + // make sure they are not larger than 16x16 + if (normal.width() > 16 || normal.height() > 16) { + QImage tmp = normal.convertToImage(); + tmp = tmp.smoothScale(16, 16); + normal.convertFromImage(tmp); + } + if (active.width() > 16 || active.height() > 16) { + QImage tmp = active.convertToImage(); + tmp = tmp.smoothScale(16, 16); + active.convertFromImage(tmp); + } + + QIconSet iconset; + iconset.setPixmap(normal, QIconSet::Small, QIconSet::Normal); + iconset.setPixmap(active, QIconSet::Small, QIconSet::Active); + + int newId = insertItem(iconset, serviceName, nId, nIndex); + d->entryMap.insert(newId, s); +} + +#include "kcustommenu.moc" diff --git a/kdesktop/kcustommenu.h b/kdesktop/kcustommenu.h new file mode 100644 index 000000000..3a678ae7a --- /dev/null +++ b/kdesktop/kcustommenu.h @@ -0,0 +1,56 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Waldo Bastian + + 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 __kcustommenu_h__ +#define __kcustommenu_h__ + +#include +#include + +/* + * This class provides a Popup Menu with programs that can be executed and + * that reads its configuration from a config file. + */ +class KCustomMenu : public QPopupMenu +{ + Q_OBJECT +public: + /** + * Create a custome menu described by @p configfile. + */ + KCustomMenu(const QString &configfile, QWidget *parent=0); + + /** + * Destructor + */ + ~KCustomMenu(); + +protected slots: + void slotActivated(int id); + +protected: + void insertMenuItem(KService::Ptr &s, int nId, int nIndex = -1); + +private: + class KCustomMenuPrivate; + KCustomMenuPrivate *d; +}; + + +#endif diff --git a/kdesktop/kdesktop.desktop b/kdesktop/kdesktop.desktop new file mode 100644 index 000000000..7da10e945 --- /dev/null +++ b/kdesktop/kdesktop.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Exec=kdesktop +X-DCOP-ServiceType=wait +Name=KDE Desktop +Name[af]=KDE Werkskerm +Name[ar]=سطح المكتب KDE +Name[az]=KDE Masa üstü +Name[be]=Працоўны стол KDE +Name[bn]=কে.ডি.ই. ডেস্কটপ +Name[br]=Burev KDE +Name[bs]=KDE radna površina +Name[ca]=Escriptori KDE +Name[cs]=Pracovní plocha KDE +Name[csb]=Pùlt KDE +Name[cy]=Penbwrdd KDE +Name[da]=KDE-desktop +Name[de]=KDE-Arbeitsfläche +Name[el]=Επιφάνεια εργασίας του KDE +Name[eo]=KDE Labortablo +Name[es]=Escritorio de KDE +Name[et]=KDE töölaud +Name[eu]=KDE mahaigaina +Name[fa]=رومیزی KDE +Name[fi]=KDE-työpöytä +Name[fr]=Bureau de KDE +Name[fy]=KDE Buroblêd +Name[ga]=Deasc KDE +Name[gl]=Escritório de KDE +Name[he]=שולחן העבודה של KDE +Name[hi]=केडीई डेस्कटॉप +Name[hr]=KDE radna površina +Name[hu]=Munkaasztal +Name[id]=Desktop KDE +Name[is]=KDE skjáborð +Name[it]=Desktop KDE +Name[ja]=KDE デスクトップ +Name[ka]=KDE სამუშაო დაფა +Name[kk]=KDE үстелі +Name[km]=ផ្ទៃតុ KDE +Name[ko]=데스크톱 +Name[lo]=ພື້ນທີ່ທຳງານ KDE +Name[lt]=KDE Darbastalis +Name[lv]=KDE Darbvirsma +Name[mk]=KDE Десктоп +Name[mn]=КДЭ-Ажлын тавцан +Name[ms]=Desktop KDE +Name[mt]=Desktop KDE +Name[nb]=KDE Skrivebord +Name[nds]=KDE-Schriefdisch +Name[ne]=KDE डेस्कटप +Name[nl]=KDE Bureaublad +Name[nn]=KDE-skrivebord +Name[nso]=Desktop ya KDE +Name[pa]=KDE ਵੇਹੜਾ +Name[pl]=Pulpit KDE +Name[pt]=Ecrã do KDE +Name[pt_BR]=Área de Trabalho KDE +Name[ro]=Ecran KDE +Name[ru]=Рабочий стол KDE +Name[rw]=KDE Ibiro +Name[se]=KDE-čallinbeavdi +Name[sk]=Pracovná plocha +Name[sl]=Namizje KDE +Name[sr]=KDE радна површина +Name[sr@Latn]=KDE radna površina +Name[sv]=KDE-skrivbord +Name[ta]=KDE மேல்மேசை +Name[te]=కెడిఈ రంగస్థలం +Name[tg]=Мизи Кории KDE +Name[th]=พื้นที่ทำงาน KDE +Name[tr]=KDE Masaüstü +Name[tt]=KDE Östäl +Name[uk]=Стільниця KDE +Name[uz]=KDE ish stoli +Name[uz@cyrillic]=KDE иш столи +Name[ven]=Desikithopo ya KDE +Name[vi]=Môi trường KDE +Name[wa]=Sicribanne KDE +Name[zh_CN]=KDE 桌面 +Name[zh_TW]=KDE 桌面 +Name[zu]=I-Desktop ye-KDE +Type=Service +X-KDE-StartupNotify=false +OnlyShowIn=KDE; +X-KDE-autostart-phase=0 diff --git a/kdesktop/kdesktop.kcfg b/kdesktop/kdesktop.kcfg new file mode 100644 index 000000000..597377661 --- /dev/null +++ b/kdesktop/kdesktop.kcfg @@ -0,0 +1,370 @@ + + + + + + + true + + If you want the same background settings to be applied to all desktops enable this option. + + + true + + If you want the same background settings to be applied to all screens enable this option. + + + false + + If you want to draw to each screen separately in xinerama mode enable this option. + + + false + + Enable this option if you want to limit the cache size for the background. + + + 2048 + + Here you can enter how much memory KDE should use for caching the background(s). If you have different backgrounds for the different desktops caching can make switching desktops smoother at the expense of higher memory use. + + + + + true + + Uncheck this option if you do not want to have icons on the desktop. Without icons the desktop will be somewhat faster but you will no longer be able to drag files to the desktop. + + + false + + Check this option if you want to run X11 programs that draw into the desktop such as xsnow, xpenguin or xmountain. If you have problems with applications like netscape that check the root window for running instances, disable this option. + + + true + + + + + + + false + + Check this option if you want to see your icons automatically aligned to the grid when you move them. + + + true + + + + + + + + + + + false + + You can switch between the virtual desktops by using the mouse wheel over the desktop background. + + + Forward + + + + + + + konsole + + Defines which terminal application is used. + + + + + You can choose what happens when you click the left button of your pointing device on the desktop. + + + WindowListMenu + + You can choose what happens when you click the middle button of your pointing device on the desktop. + + + DesktopMenu + + You can choose what happens when you click the right button of your pointing device on the desktop. + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + + Qt::white + + + + + + + + + true + + Check here to enable a shadow outline around the desktop font. This also improves the readability of the desktop text against backgrounds of a similar color. + + + 0,0,4.0,120.0,2,1,1,0,0,0 + + + + + + + + + false + +

      If you check this option, any files in your desktop directory that begin with a period (.) will be shown. Usually, such files contain configuration information, and remain hidden from view.

      \n

      For example, files which are named \".directory\" are plain text files which contain information for Konqueror, such as the icon to use in displaying a directory, the order in which files should be sorted, etc. You should not change or delete these files unless you know what you are doing.

      +
      + + true + + If this is enabled, icons are aligned vertically, otherwise horizontally. + + + + + Select for which types of files you want to enable preview images. + + + + 0 + + Sets the sort criterion. Possible choices are NameCaseSensitive = 0, NameCaseInsensitive = 1, Size = 2, Type = 3, Date = 4. + + + true + + Enable this to place directories in front of the sorted list, otherwise they are amongst the files. + + + false + + Check this option if you want to keep your icons from moving. + + + + + + + + + +
      + + + false + + + + + + + media/hdd_mounted,media/hdd_unmounted,media/floppy_unmounted,media/cdrom_unmounted,media/floppy5_unmounted + + The device types which you do not want to see on the desktop. + + + + + + + false + + If this option is selected, applications will not have their menu bar attached to their own window anymore. Instead, there is one menu bar at the top of the screen which shows the menus of the currently active application. You might recognize this behavior from Mac OS. + + + + + false + + If this option is selected, there is one menu bar at the top of the screen which shows the desktop menus. + + + + + false + + Enables the screen saver. + + + 300 + + Sets the seconds after which the screen saver is started. + + + true + + Usually the screen saver is suspended when display power saving kicks in, + as nothing can be seen on the screen anyway, obviously. However, some screen savers + actually perform useful computations, so it is not desirable to suspend them. + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + false + + + + + + + 5000 + + + + + + + false + + + + + + + 600 + + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 50 + + + + + + + + + + + + + + + + + + + + + + + + + KGlobalSettings::completionMode() + + + + + + + + + 30 + + + + + + + +
      diff --git a/kdesktop/kdesktopSetAsBackground.desktop b/kdesktop/kdesktopSetAsBackground.desktop new file mode 100644 index 000000000..0579fc013 --- /dev/null +++ b/kdesktop/kdesktopSetAsBackground.desktop @@ -0,0 +1,210 @@ +[Desktop Entry] +ServiceTypes=image/* +Actions=setAsBackground;tileAsBackground; +X-KDE-Submenu=Set as Background +X-KDE-Submenu[af]=Stel as agtergrond +X-KDE-Submenu[be]=Зрабіць фонавым малюнкам +X-KDE-Submenu[bg]=Установяване като фон +X-KDE-Submenu[bn]=পশ্চাদ্‌পট হিসাবে বেছে নাও +X-KDE-Submenu[bs]=Postavi kao pozadinu +X-KDE-Submenu[ca]=Estableix com a fons +X-KDE-Submenu[cs]=Nastavit jako pozadí +X-KDE-Submenu[csb]=Ùstôwi jakno spòdlé +X-KDE-Submenu[da]=Sæt som baggrund +X-KDE-Submenu[de]=Als Hintergrund setzen +X-KDE-Submenu[el]=Ορισμός ως ταπετσαρία +X-KDE-Submenu[eo]=Agordu kiel fono +X-KDE-Submenu[es]=Establecer como fondo +X-KDE-Submenu[et]=Sea taustapildiks +X-KDE-Submenu[eu]=Ezarri atzeko plano gisa +X-KDE-Submenu[fa]=تنظیم به عنوان زمینه +X-KDE-Submenu[fi]=Aseta taustakuvaksi +X-KDE-Submenu[fr]=Définir comme arrière-plan +X-KDE-Submenu[fy]=As eftergrûn brûke +X-KDE-Submenu[gl]=Pór como Fondo de Escritório +X-KDE-Submenu[he]=קבע כרקע +X-KDE-Submenu[hr]=Postavi kao pozadinu +X-KDE-Submenu[hu]=Beállítás háttérképnek +X-KDE-Submenu[is]=Setja sem bakgrunn +X-KDE-Submenu[it]=Imposta come sfondo +X-KDE-Submenu[ja]=背景としてセット +X-KDE-Submenu[kk]=Ая ретінде орнату +X-KDE-Submenu[km]=កំណត់​ជា​ផ្ទៃខាងក្រោយ +X-KDE-Submenu[lt]=Nustatyti fonu +X-KDE-Submenu[mk]=Постави како подлога +X-KDE-Submenu[nb]=Sett som bakgrunn +X-KDE-Submenu[nds]=As Achtergrund fastleggen +X-KDE-Submenu[ne]=पृष्ठभूमिको रुपमा सेट गर्छ +X-KDE-Submenu[nl]=Als achtergrond gebruiken +X-KDE-Submenu[nn]=Bruk som bakgrunn +X-KDE-Submenu[pa]=ਪਿੱਠਭੂਮੀ ਬਣਾਓ +X-KDE-Submenu[pl]=Ustaw jako tło +X-KDE-Submenu[pt]=Colocar como Fundo +X-KDE-Submenu[pt_BR]=Configurar como Plano de fundo +X-KDE-Submenu[ro]=Setează ca fundal +X-KDE-Submenu[ru]=Сделать фоновым рисунком +X-KDE-Submenu[se]=Geavat duogášgovvan +X-KDE-Submenu[sk]=Nastaviť ako pozadie +X-KDE-Submenu[sl]=Nastavi kot ozadje +X-KDE-Submenu[sr]=Постави као позадину +X-KDE-Submenu[sr@Latn]=Postavi kao pozadinu +X-KDE-Submenu[sv]=Använd som bakgrund +X-KDE-Submenu[th]=ตั้งให้เป็นพื้นหลัง +X-KDE-Submenu[tr]=Masaüstü Arkaplanı Yap +X-KDE-Submenu[uk]=Встановити як тло +X-KDE-Submenu[uz]=Ish stoliga qoʻyish +X-KDE-Submenu[uz@cyrillic]=Иш столига қўйиш +X-KDE-Submenu[vi]=Đặt làm Hình nền +X-KDE-Submenu[wa]=Mete come fond d' waitroûle +X-KDE-Submenu[zh_CN]=设为背景 +X-KDE-Submenu[zh_TW]=設為背景 + +[Desktop Action setAsBackground] +Name=Centered +Name[af]=Gesentreer +Name[ar]=مركز +Name[be]=Пасярэдзіне +Name[bg]=Центрирано +Name[bn]=মাঝামাঝি +Name[br]=Kreizennet +Name[bs]=Centrirano +Name[ca]=Centrat +Name[cs]=Na střed +Name[csb]=Na westrzódkù +Name[cy]=Canoledig +Name[da]=Centreret +Name[de]=Zentriert +Name[el]=Κεντράρισμα +Name[en_GB]=Centred +Name[eo]=Meza +Name[es]=Centrado +Name[et]=Tsentreeritud +Name[eu]=Erdiratua +Name[fa]=مرکزی +Name[fi]=Keskitetty +Name[fr]=Centré +Name[fy]=sintraal setten +Name[ga]=Láraithe +Name[gl]=Centrado +Name[he]=ממורכז +Name[hi]=बीचों-बीच +Name[hr]=Sredinom +Name[hu]=Középre igazítva +Name[is]=Miðjað +Name[it]=Centrato +Name[ja]=中央 +Name[ka]=ცენტრზე +Name[kk]=Ортаға +Name[km]=កណ្ដាល +Name[lt]=Centruota +Name[lv]=Centrēts +Name[mk]=Центриран +Name[ms]=Tengah +Name[mt]=Iċċentrat +Name[nb]=Sentrert +Name[nds]=In de Merrn +Name[ne]=केन्द्रित +Name[nl]=Gecentreerd +Name[nn]=Sentrert +Name[pa]=ਕੇਂਦਰੀ +Name[pl]=Wyśrodkowane +Name[pt]=Centrado +Name[pt_BR]=Centralizado +Name[ro]=Centrat +Name[ru]=По центру +Name[rw]=Biri hagati +Name[se]=Guovdut +Name[sk]=V strede +Name[sl]=Usrediščeno +Name[sr]=Центрирано +Name[sr@Latn]=Centrirano +Name[sv]=Centrerad +Name[ta]=மைய +Name[te]=మద్యన +Name[tg]=Марказӣ +Name[th]=จัดกลาง +Name[tr]=Uzat +Name[tt]=Üzäkläşep +Name[uk]=По центру +Name[uz]=Markazda +Name[uz@cyrillic]=Марказда +Name[vi]=Giữa +Name[wa]=Å mitan +Name[zh_CN]=居中 +Name[zh_TW]=置中 +Icon=background +Exec=dcop kdesktop KBackgroundIface setWallpaper %u 6 + +[Desktop Action tileAsBackground] +Name=Tiled +Name[af]=Geteël +Name[ar]=مبلّط +Name[be]=Расцягнутае +Name[bg]=Каскадно +Name[bn]=টাইল করা +Name[br]=Teolet +Name[bs]=Popločano +Name[ca]=Repetit +Name[cs]=Dlaždice +Name[csb]=Kachelkòwóné +Name[cy]=Teiledig +Name[da]=Fliselagt +Name[de]=Gekachelt +Name[el]=Σε παράθεση +Name[eo]=kahela +Name[es]=Mosaico +Name[et]=Paanidena +Name[eu]=Mosaikoa +Name[fa]=کاشی‌شده +Name[fi]=Vierekkäin +Name[fr]=Mosaïque +Name[fy]=Tegele +Name[ga]=Tilithe +Name[gl]=Mosaico +Name[he]=פרוש +Name[hi]=चटाई-दार +Name[hr]=Popločeno +Name[hu]=Mozaikszerűen +Name[is]=Flísað +Name[it]=Ripetuto +Name[ja]=タイル状 +Name[ka]=მოზაიკა +Name[kk]=Қатарлап +Name[km]=ក្បឿង +Name[lt]=Iškloti +Name[mk]=Поплочен +Name[ms]=Berjubin +Name[mt]=Madum +Name[nb]=Flislagt +Name[nds]=Kachelt +Name[ne]=टायल गरिएको +Name[nl]=Tegels +Name[nn]=Jamsides +Name[pa]=ਤਣਿਆ +Name[pl]=Kafelkowane +Name[pt]=Mosaico +Name[pt_BR]=Ladrilhado +Name[ro]=Mozaic +Name[ru]=Черепицей +Name[rw]=Byudukaro +Name[se]=Bálddalaga +Name[sk]=Dlaždice +Name[sl]=Razdeljeno +Name[sr]=Поређано +Name[sr@Latn]=Poređano +Name[sv]=Sida vid sida +Name[ta]=பிண்ணனி +Name[te]=పలకలుగా +Name[tg]=Тахтасангӣ +Name[th]=ปูทั้งหน้าจอ +Name[tr]=Sırala +Name[tt]=Bülengän +Name[uk]=Плиткою +Name[uz]=Kafel +Name[uz@cyrillic]=Кафель +Name[vi]=Xếp ngói +Name[wa]=A schaeyes +Name[zh_CN]=平铺 +Name[zh_TW]=拼貼 +Icon=background +Exec=dcop kdesktop KBackgroundIface setWallpaper %u 2 diff --git a/kdesktop/kdesktop_custom_menu1 b/kdesktop/kdesktop_custom_menu1 new file mode 100644 index 000000000..f0466b886 --- /dev/null +++ b/kdesktop/kdesktop_custom_menu1 @@ -0,0 +1,2 @@ +NrOfItems=1 +Item1=konsole diff --git a/kdesktop/kdesktop_custom_menu2 b/kdesktop/kdesktop_custom_menu2 new file mode 100644 index 000000000..2073a0d77 --- /dev/null +++ b/kdesktop/kdesktop_custom_menu2 @@ -0,0 +1,2 @@ +NrOfItems=1 +Item1=xterm diff --git a/kdesktop/kdesktopbindings.cpp b/kdesktop/kdesktopbindings.cpp new file mode 100644 index 000000000..c50eb7c30 --- /dev/null +++ b/kdesktop/kdesktopbindings.cpp @@ -0,0 +1,47 @@ +#ifndef NOSLOTS +# define DEF( name, key3, key4, fnSlot ) \ + keys->insert( name, i18n(name), QString::null, key3, key4, this, SLOT(fnSlot) ) +# define DEF2( name, key3, key4, receiver, slot ) \ + keys->insert( name, i18n(name), QString::null, key3, key4, receiver, slot ); +#else +# define DEF( name, key3, key4, fnSlot ) \ + keys->insert( name, i18n(name), QString::null, key3, key4 ) +# define DEF2( name, key3, key4, receiver, slot ) \ + keys->insert( name, i18n(name), QString::null, key3, key4 ) +#endif +#define WIN KKey::QtWIN + + keys->insert( "Program:kdesktop", i18n("Desktop") ); + +#ifndef NOSLOTS + if (kapp->authorize("run_command")) + { +#endif + DEF( I18N_NOOP("Run Command"), ALT+Qt::Key_F2, WIN+Qt::Key_Return, slotExecuteCommand() ); +#ifndef NOSLOTS + } +#endif + DEF( I18N_NOOP("Show Taskmanager"), CTRL+Qt::Key_Escape, WIN+CTRL+Qt::Key_Pause, slotShowTaskManager() ); + DEF( I18N_NOOP("Show Window List"), ALT+Qt::Key_F5, WIN+Qt::Key_0, slotShowWindowList() ); + DEF( I18N_NOOP("Switch User"), ALT+CTRL+Qt::Key_Insert, WIN+Qt::Key_Insert, slotSwitchUser() ); +#ifndef NOSLOTS + if (kapp->authorize("lock_screen")) + { +#endif + DEF2( I18N_NOOP("Lock Session"), ALT+CTRL+Qt::Key_L, WIN+Qt::Key_ScrollLock, KRootWm::self(), SLOT(slotLock()) ); +#ifndef NOSLOTS + } + if (kapp->authorize("logout")) + { +#endif + DEF( I18N_NOOP("Log Out"), ALT+CTRL+Qt::Key_Delete, WIN+Qt::Key_Escape, slotLogout() ); + DEF( I18N_NOOP("Log Out Without Confirmation"), ALT+CTRL+SHIFT+Qt::Key_Delete, WIN+SHIFT+Qt::Key_Escape, slotLogoutNoCnf() ); + DEF( I18N_NOOP("Halt without Confirmation"), ALT+CTRL+SHIFT+Qt::Key_PageDown, WIN+CTRL+SHIFT+Qt::Key_PageDown, slotHaltNoCnf() ); + DEF( I18N_NOOP("Reboot without Confirmation"), ALT+CTRL+SHIFT+Qt::Key_PageUp, WIN+CTRL+SHIFT+Qt::Key_PageUp, slotRebootNoCnf() ); +#ifndef NOSLOTS + } +#endif + +#undef DEF +#undef DEF2 +#undef WIN diff --git a/kdesktop/kdesktopsettings.kcfgc b/kdesktop/kdesktopsettings.kcfgc new file mode 100644 index 000000000..f3577d133 --- /dev/null +++ b/kdesktop/kdesktopsettings.kcfgc @@ -0,0 +1,4 @@ +File=kdesktop.kcfg +ClassName=KDesktopSettings +Singleton=true +Mutators=true diff --git a/kdesktop/kdesktopshadowsettings.cpp b/kdesktop/kdesktopshadowsettings.cpp new file mode 100644 index 000000000..8ebdc89a8 --- /dev/null +++ b/kdesktop/kdesktopshadowsettings.cpp @@ -0,0 +1,92 @@ +/* This file is proposed to be part of the KDE base. + * Copyright (C) 2003 Laur Ivan + * + * Many thanks to: + * - Bernardo Hung for the enhanced shadow + * algorithm (currently used) + * - Tim Jansen for the API updates and fixes. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 +#include +#include "kdesktopshadowsettings.h" + + +//#define DEBUG + +KDesktopShadowSettings::KDesktopShadowSettings(KConfig *cfg) : + KShadowSettings(), + m_textColor(QColor(255,255,255)), + _UID(0L) +{ + setConfig(cfg); +} + +KDesktopShadowSettings::~KDesktopShadowSettings() +{ +} + +/** + * + */ +void KDesktopShadowSettings::setUID(unsigned long val) +{ + if (val == 0L || val == _UID) + _UID++; + else + _UID = val; +} + +unsigned long KDesktopShadowSettings::UID() +{ + return _UID; +} + +/** + * Loads a new configuration + */ +void KDesktopShadowSettings::setConfig(KConfig *val) +{ + config = val; + + if (val == NULL) + return; + + // increment the UID so the items will rebuild their + // pixmaps + setUID(); + + config->setGroup("FMSettings"); + m_textColor = config->readColorEntry("NormalTextColor", &Qt::white); + m_bgColor = config->readColorEntry("ItemTextBackground"); + m_isEnabled = config->readBoolEntry("ShadowEnabled", true); + +#ifdef DEBUG + // debug + kdDebug(1204) << "setConfig()" << endl; +#endif + + if (config->hasKey(SHADOW_CONFIG_ENTRY)) + fromString(config->readEntry(SHADOW_CONFIG_ENTRY)); + +#ifdef DEBUG + // debug + kdDebug(1204) << " \t" << SHADOW_TEXT_COLOR << "=" << m_textColor << endl; + kdDebug(1204) << " \t" << SHADOW_TEXT_BACKGROUND << "=" << m_bgColor << endl; + kdDebug(1204) << " \t" << toString() << endl; +#endif +} diff --git a/kdesktop/kdesktopshadowsettings.h b/kdesktop/kdesktopshadowsettings.h new file mode 100644 index 000000000..7ee3b1451 --- /dev/null +++ b/kdesktop/kdesktopshadowsettings.h @@ -0,0 +1,117 @@ +/* This file is proposed to be part of the KDE base. + * Copyright (C) 2003 Laur Ivan + * + * Many thanks to: + * - Bernardo Hung for the enhanced shadow + * algorithm (currently used) + * - Tim Jansen for the API updates and fixes. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 __FX_DATA_DESKTOP +#define __FX_DATA_DESKTOP + +#include +#include +#include + +#include + +#define FX_GROUP "FX" + +#define ALGO_KEY "Shadow.Algorithm" +#define MULT_KEY "Shadow.MultiplicationFactor" +#define OPAC_KEY "Shadow.MaxOpacity" +#define OFSX_KEY "Shadow.OffsetX" +#define OFSY_KEY "Shadow.OffsetY" +#define THIK_KEY "Shadow.Thickness" +#define SELT_KEY "Shadow.SelectionType" + +/** + * This implementation of FxData will read a the default configuration + * file. The values used for shadow are frouped under "FX". + * + * The values are: + * Shadow.Algorithm: the algorithm used for making the sahdow + * Shadow.Scale the normailsation factor for veraging the sum + * Shadow.MaxOpacity the maximum allowable opacity (255 = 100%opaque) + * Shadow.OffsetX the X-coordinate offset (0 centered) + * Shadow.OffsetY the Y-coordinate offset (0 centered) + * Shadow.Thickness the shadow thickness (usually 3-5 px) + * Shadow.SelectionType the selection type - inverse video or use + * the selection colours. + * + * 06-Feb-03: Added simple UID algorithm + * + */ +class KDesktopShadowSettings : public KShadowSettings +{ + public: + /** + * Constructor + * @param cfg the configuration file + */ + KDesktopShadowSettings(KConfig *cfg = NULL); + + virtual ~KDesktopShadowSettings(); + + /** + * Sets a specific configuration file after the object's creation + * @param config new configuration object + */ + void setConfig(KConfig *); + + /** + * Returns the text color as definied in the configuraiton + * @return the text color as definied in the configuraiton + */ + QColor &textColor(){ return m_textColor; }; + + /** + * Returns the shadow color as definied in the configuraiton + * @return the shadow color as definied in the configuraiton + */ + QColor &bgColor() { return m_bgColor; }; + + /** + * Returns true if the shadow engine is enabled. + * @return true if the shadow engine is enabled. + */ + bool isEnabled() { return m_isEnabled; }; + + /** + * Returns an UID for shadow rebuilding purposes + * @return an UID for shadow rebuilding purposes + */ + unsigned long UID(); + + /** + * (Re)sets an UID for shadow rebuilding purposes + * @param the new UID (if 0/default, increments the stored UID) + */ + void setUID(unsigned long val = 0L); + + private: + KConfig *config; + QColor m_textColor; + QColor m_bgColor; + bool m_isEnabled; + + // uid of the object. Use this to determine the oportunity of a new + // rebuild. + unsigned long _UID; +}; + +#endif diff --git a/kdesktop/kdiconview.cc b/kdesktop/kdiconview.cc new file mode 100644 index 000000000..f9ca6c446 --- /dev/null +++ b/kdesktop/kdiconview.cc @@ -0,0 +1,1668 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis + Copyright (C) 2000, 2001 David Faure + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ + +#include "kdiconview.h" +#include "krootwm.h" +#include "desktop.h" +#include "kdesktopsettings.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include + +#include "kshadowengine.h" +#include "kdesktopshadowsettings.h" +#include "kfileividesktop.h" + +// for multihead +extern int kdesktop_screen_number; + +// ----------------------------------------------------------------------------- + +QRect KDIconView::desktopRect() +{ + return ( kdesktop_screen_number == 0 ) + ? QApplication::desktop()->geometry() // simple case, or xinerama + : QApplication::desktop()->screenGeometry( kdesktop_screen_number ); // multi-head +} + +// ----------------------------------------------------------------------------- + +void KDIconView::saveIconPosition(KSimpleConfig *config, int x, int y) +{ + // save the icon position in absolute coordinates + config->writeEntry("Xabs", x); + config->writeEntry("Yabs", y); + + // save also mentioning desktop size + QRect desk = desktopRect(); + QString sizeStr = QString( "_%1x%2" ).arg(desk.width()).arg(desk.height()); + + config->writeEntry("Xabs" + sizeStr, x); + config->writeEntry("Yabs" + sizeStr, y); +} + +// ----------------------------------------------------------------------------- + +void KDIconView::readIconPosition(KSimpleConfig *config, int &x, int &y) +{ + // check if we have the position for the current desktop size + QRect desk = desktopRect(); + QString sizeStr = QString( "_%1x%2" ).arg(desk.width()).arg(desk.height()); + + x = config->readNumEntry("Xabs" + sizeStr, -99999); + + if ( x != -99999 ) + y = config->readNumEntry("Yabs" + sizeStr); + else + { + // not found; use the resolution independent position + x = config->readNumEntry("Xabs", -99999); + + if ( x != -99999 ) + y = config->readNumEntry("Yabs"); + else // for compatibility, read the old iconArea-relative-position + { + // problem here: when reading a position before we know the correct + // desktopIconsArea, the relative position do not make sense + // workaround: use desktopRect() as the allowed size + + QRect desk = desktopRect(); + QString X_w = QString("X %1").arg(desk.width() ); + QString Y_h = QString("Y %1").arg(desk.height()); + + x = config->readNumEntry(X_w, -99999); + if ( x != -99999 ) x = config->readNumEntry("X"); + if ( x < 0 ) x += desk.width(); + + y = config->readNumEntry(Y_h, -99999); + if ( y != -99999 ) y = config->readNumEntry("Y"); + if ( y < 0 ) y += desk.height(); + } + } +} + +// ----------------------------------------------------------------------------- + +KDIconView::KDIconView( QWidget *parent, const char* name ) + : KonqIconViewWidget( parent, name, WResizeNoErase, true ), + m_actionCollection( this, "KDIconView::m_actionCollection" ), + m_accel( 0L ), + m_bNeedRepaint( false ), + m_bNeedSave( false ), + m_autoAlign( false ), + m_hasExistingPos( false ), + m_bEditableDesktopIcons( kapp->authorize("editable_desktop_icons") ), + m_bShowDot( false ), + m_bVertAlign( true ), + m_dirLister( 0L ), + m_mergeDirs(), + m_dotDirectory( 0L ), + m_lastDeletedIconPos(), + m_eSortCriterion( NameCaseInsensitive ), + m_bSortDirectoriesFirst( true ), + m_itemsAlwaysFirst(), + m_gotIconsArea(false) +{ + setResizeMode( Fixed ); + setIconArea( desktopRect() ); // the default is the whole desktop + + // Initialise the shadow data objects... + m_shadowEngine = new KShadowEngine(new KDesktopShadowSettings(KGlobal::config())); + + connect( QApplication::clipboard(), SIGNAL(dataChanged()), + this, SLOT(slotClipboardDataChanged()) ); + + setURL( desktopURL() ); // sets m_url + + m_desktopDirs = KGlobal::dirs()->findDirs( "appdata", "Desktop" ); + initDotDirectories(); + + connect( this, SIGNAL( executed( QIconViewItem * ) ), + SLOT( slotExecuted( QIconViewItem * ) ) ); + connect( this, SIGNAL( returnPressed( QIconViewItem * ) ), + SLOT( slotReturnPressed( QIconViewItem * ) ) ); + connect( this, SIGNAL( mouseButtonPressed(int, QIconViewItem*, const QPoint&)), + SLOT( slotMouseButtonPressed(int, QIconViewItem*, const QPoint&)) ); + connect( this, SIGNAL( mouseButtonClicked(int, QIconViewItem*, const QPoint&)), + SLOT( slotMouseButtonClickedKDesktop(int, QIconViewItem*, const QPoint&)) ); + connect( this, SIGNAL( contextMenuRequested(QIconViewItem*, const QPoint&)), + SLOT( slotContextMenuRequested(QIconViewItem*, const QPoint&)) ); + + connect( this, SIGNAL( enableAction( const char * , bool ) ), + SLOT( slotEnableAction( const char * , bool ) ) ); + + // Hack: KonqIconViewWidget::slotItemRenamed is not virtual :-( + disconnect( this, SIGNAL(itemRenamed(QIconViewItem *, const QString &)), + this, SLOT(slotItemRenamed(QIconViewItem *, const QString &)) ); + connect( this, SIGNAL(itemRenamed(QIconViewItem *, const QString &)), + this, SLOT(slotItemRenamed(QIconViewItem *, const QString &)) ); + + if (!m_bEditableDesktopIcons) + { + setItemsMovable(false); + setAcceptDrops(false); + viewport()->setAcceptDrops(false); + } +} + +KDIconView::~KDIconView() +{ + if (m_dotDirectory && !m_bEditableDesktopIcons) + m_dotDirectory->rollback(false); // Don't save positions + + delete m_dotDirectory; + delete m_dirLister; + delete m_shadowEngine; +} + +void KDIconView::initDotDirectories() +{ + QStringList dirs = m_desktopDirs; + KURL u = desktopURL(); + if (u.isLocalFile()) + dirs.prepend(u.path()); + + QString prefix = iconPositionGroupPrefix(); + QString dotFileName = locateLocal("appdata", "IconPositions"); + if (kdesktop_screen_number != 0) + dotFileName += "_Desktop" + QString::number(kdesktop_screen_number); + + if (m_dotDirectory && !m_bEditableDesktopIcons) + m_dotDirectory->rollback(false); // Don't save positions + + delete m_dotDirectory; + + m_dotDirectory = new KSimpleConfig( dotFileName ); + // If we don't allow editable desktop icons, empty m_dotDirectory + if (!m_bEditableDesktopIcons) + { + QStringList groups = m_dotDirectory->groupList(); + QStringList::ConstIterator gIt = groups.begin(); + QStringList::ConstIterator gEnd = groups.end(); + for (; gIt != gEnd; ++gIt ) + { + m_dotDirectory->deleteGroup(*gIt, true); + } + } + QRect desk = desktopRect(); + QString X_w = QString( "X %1" ).arg( desk.width() ); + QString Y_h = QString( "Y %1" ).arg( desk.height() ); + for ( QStringList::ConstIterator it = dirs.begin() ; it != dirs.end() ; ++it ) + { + kdDebug(1204) << "KDIconView::initDotDirectories found dir " << *it << endl; + QString dotFileName = *it + "/.directory"; + + if (QFile::exists(dotFileName)) + { + KSimpleConfig dotDir(dotFileName, true); // Read only + + QStringList groups = dotDir.groupList(); + QStringList::ConstIterator gIt = groups.begin(); + QStringList::ConstIterator gEnd = groups.end(); + for (; gIt != gEnd; ++gIt ) + { + if ( (*gIt).startsWith(prefix) ) + { + dotDir.setGroup( *gIt ); + m_dotDirectory->setGroup( *gIt ); + + if (!m_dotDirectory->hasKey( X_w )) + { + int x,y; + readIconPosition(&dotDir, x, y); + m_dotDirectory->writeEntry( X_w, x ); + m_dotDirectory->writeEntry( Y_h, y ); // Not persistant! + } + } + } + } + } +} + +void KDIconView::initConfig( bool init ) +{ + //kdDebug() << "initConfig " << init << endl; + + if ( !init ) { + KonqFMSettings::reparseConfiguration(); + KDesktopSettings::self()->readConfig(); + } + + KConfig * config = KGlobal::config(); + + if ( !init ) { + KDesktopShadowSettings *shadowSettings = static_cast(m_shadowEngine->shadowSettings()); + shadowSettings->setConfig(config); + } + + setMaySetWallpaper(!config->isImmutable() && !KGlobal::dirs()->isRestrictedResource("wallpaper")); + m_bShowDot = KDesktopSettings::showHidden(); + m_bVertAlign = KDesktopSettings::vertAlign(); + QStringList oldPreview = previewSettings(); + setPreviewSettings( KDesktopSettings::preview() ); + + // read arrange configuration + m_eSortCriterion = (SortCriterion)KDesktopSettings::sortCriterion(); + m_bSortDirectoriesFirst = KDesktopSettings::directoriesFirst(); + m_itemsAlwaysFirst = KDesktopSettings::alwaysFirstItems(); // Distributor plug-in + + if (KProtocolInfo::isKnownProtocol(QString::fromLatin1("media"))) + m_enableMedia=KDesktopSettings::mediaEnabled(); + else + m_enableMedia=false; + QString tmpList=KDesktopSettings::exclude(); + kdDebug(1204)<<"m_excludeList"<setShowingDotFiles( m_bShowDot ); + m_dirLister->emitChanges(); + } + + setArrangement(m_bVertAlign ? TopToBottom : LeftToRight); + + if ( KonqIconViewWidget::initConfig( init ) ) + lineupIcons(); // called if the font changed. + + setAutoArrange( false ); + + if ( previewSettings().count() ) + { + for ( QStringList::ConstIterator it = oldPreview.begin(); it != oldPreview.end(); ++it) + if ( !previewSettings().contains( *it ) ){ + kdDebug(1204) << "Disabling preview for " << *it << endl; + if ( *it == "audio/" ) + disableSoundPreviews(); + else + { + KService::Ptr serv = KService::serviceByDesktopName( *it ); + Q_ASSERT( serv != 0L ); + if ( serv ) + { + setIcons( iconSize( ), serv->property("MimeTypes").toStringList() /* revert no-longer wanted previews to icons */ ); + } + } + } + startImagePreview( QStringList(), true ); + } + else + { + stopImagePreview(); + setIcons( iconSize(), "*" /* stopImagePreview */ ); + } + + if ( !init ) + updateContents(); +} + +void KDIconView::start() +{ + // We can only start once + Q_ASSERT(!m_dirLister); + if (m_dirLister) + return; + + kdDebug(1204) << "KDIconView::start" << endl; + + // Create the directory lister + m_dirLister = new KDirLister(); + + m_bNeedSave = false; + + connect( m_dirLister, SIGNAL( clear() ), this, SLOT( slotClear() ) ); + connect( m_dirLister, SIGNAL( started(const KURL&) ), + this, SLOT( slotStarted(const KURL&) ) ); + connect( m_dirLister, SIGNAL( completed() ), this, SLOT( slotCompleted() ) ); + connect( m_dirLister, SIGNAL( newItems( const KFileItemList & ) ), + this, SLOT( slotNewItems( const KFileItemList & ) ) ); + connect( m_dirLister, SIGNAL( deleteItem( KFileItem * ) ), + this, SLOT( slotDeleteItem( KFileItem * ) ) ); + connect( m_dirLister, SIGNAL( refreshItems( const KFileItemList & ) ), + this, SLOT( slotRefreshItems( const KFileItemList & ) ) ); + + // Start the directory lister ! + m_dirLister->setShowingDotFiles( m_bShowDot ); + kapp->allowURLAction("list", KURL(), url()); + startDirLister(); + createActions(); +} + +void KDIconView::configureMedia() +{ + kdDebug(1204) << "***********KDIconView::configureMedia() " <setMimeExcludeFilter(m_excludedMedia); + m_dirLister->emitChanges(); + updateContents(); + if (m_enableMedia) + { + for (KURL::List::Iterator it1=m_mergeDirs.begin();it1!=m_mergeDirs.end();++it1) + { + if ((*it1).url()=="media:/") return; + } + m_mergeDirs.append(KURL("media:/")); + m_dirLister->openURL(KURL("media:/"),true); + } + else + { + for (KURL::List::Iterator it2=m_mergeDirs.begin();it2!=m_mergeDirs.end();++it2) + { + if ((*it2).url()=="media:/") + { + delete m_dirLister; + m_dirLister=0; + start(); +// m_mergeDirs.remove(it2); +// m_dirLister->stop("media"); + return; + } + + } + return; + } + +} + +void KDIconView::createActions() +{ + if (m_bEditableDesktopIcons) + { + KAction *undo = KStdAction::undo( KonqUndoManager::self(), SLOT( undo() ), &m_actionCollection, "undo" ); + connect( KonqUndoManager::self(), SIGNAL( undoAvailable( bool ) ), + undo, SLOT( setEnabled( bool ) ) ); + connect( KonqUndoManager::self(), SIGNAL( undoTextChanged( const QString & ) ), + undo, SLOT( setText( const QString & ) ) ); + undo->setEnabled( KonqUndoManager::self()->undoAvailable() ); + + KAction* paCut = KStdAction::cut( this, SLOT( slotCut() ), &m_actionCollection, "cut" ); + KShortcut cutShortCut = paCut->shortcut(); + cutShortCut.remove( KKey( SHIFT + Key_Delete ) ); // used for deleting files + paCut->setShortcut( cutShortCut ); + + KStdAction::copy( this, SLOT( slotCopy() ), &m_actionCollection, "copy" ); + KStdAction::paste( this, SLOT( slotPaste() ), &m_actionCollection, "paste" ); + KAction *pasteTo = KStdAction::paste( this, SLOT( slotPopupPasteTo() ), &m_actionCollection, "pasteto" ); + pasteTo->setEnabled( false ); // only enabled during popupMenu() + + KShortcut reloadShortcut = KStdAccel::shortcut(KStdAccel::Reload); + new KAction( i18n( "&Reload" ), "reload", reloadShortcut, this, SLOT( refreshIcons() ), &m_actionCollection, "reload" ); + + (void) new KAction( i18n( "&Rename" ), /*"editrename",*/ Key_F2, this, SLOT( renameSelectedItem() ), &m_actionCollection, "rename" ); + (void) new KAction( i18n( "&Properties" ), ALT+Key_Return, this, SLOT( slotProperties() ), &m_actionCollection, "properties" ); + KAction* trash = new KAction( i18n( "&Move to Trash" ), "edittrash", Key_Delete, &m_actionCollection, "trash" ); + connect( trash, SIGNAL( activated( KAction::ActivationReason, Qt::ButtonState ) ), + this, SLOT( slotTrashActivated( KAction::ActivationReason, Qt::ButtonState ) ) ); + + KConfig config("kdeglobals", true, false); + config.setGroup( "KDE" ); + (void) new KAction( i18n( "&Delete" ), "editdelete", SHIFT+Key_Delete, this, SLOT( slotDelete() ), &m_actionCollection, "del" ); + + // Initial state of the actions (cut/copy/paste/...) + slotSelectionChanged(); + //init paste action + slotClipboardDataChanged(); + } +} + +void KDIconView::rearrangeIcons( SortCriterion sc, bool bSortDirectoriesFirst ) +{ + m_eSortCriterion = sc; + m_bSortDirectoriesFirst = bSortDirectoriesFirst; + rearrangeIcons(); +} + +void KDIconView::rearrangeIcons() +{ + setupSortKeys(); + sort(); // calls arrangeItemsInGrid() which does not honor iconArea() + + if ( m_autoAlign ) + lineupIcons( m_bVertAlign ? QIconView::TopToBottom : QIconView::LeftToRight ); // also saves position + else + { + KonqIconViewWidget::lineupIcons(m_bVertAlign ? QIconView::TopToBottom : QIconView::LeftToRight); + saveIconPositions(); + } +} + +void KDIconView::lineupIcons() +{ + if ( !m_gotIconsArea ) return; + KonqIconViewWidget::lineupIcons(); + saveIconPositions(); +} + +void KDIconView::setAutoAlign( bool b ) +{ + m_autoAlign = b; + + // Auto line-up icons + if ( b ) { + lineupIcons(); + connect( this, SIGNAL( iconMoved() ), + this, SLOT( lineupIcons() ) ); + } + else { + // change maxItemWidth, because when grid-align was active, it changed this for the grid + int sz = iconSize() ? iconSize() : KGlobal::iconLoader()->currentSize( KIcon::Desktop ); + setMaxItemWidth( QMAX( QMAX( sz, previewIconSize( iconSize() ) ), KonqFMSettings::settings()->iconTextWidth() ) ); + setFont( font() ); // Force calcRect() + + disconnect( this, SIGNAL( iconMoved() ), + this, SLOT( lineupIcons() ) ); + } +} + +void KDIconView::startDirLister() +{ + // if desktop is resized before start() is called (XRandr) + if (!m_dirLister) return; + + m_dirLister->openURL( url() ); + + // Gather the list of directories to merge into the desktop + // (the main URL is desktopURL(), no need for it in the m_mergeDirs list) + m_mergeDirs.clear(); + for ( QStringList::ConstIterator it = m_desktopDirs.begin() ; it != m_desktopDirs.end() ; ++it ) + { + kdDebug(1204) << "KDIconView::desktopResized found merge dir " << *it << endl; + KURL u; + u.setPath( *it ); + m_mergeDirs.append( u ); + // And start listing this dir right now + kapp->allowURLAction("list", KURL(), u); + m_dirLister->openURL( u, true ); + } + configureMedia(); +} + +void KDIconView::lineupIcons(QIconView::Arrangement align) +{ + m_bVertAlign = ( align == QIconView::TopToBottom ); + setArrangement( m_bVertAlign ? TopToBottom : LeftToRight ); + + if ( m_autoAlign ) + { + KonqIconViewWidget::lineupIcons( align ); + saveIconPositions(); + } + else + rearrangeIcons(); // also saves the position + + KDesktopSettings::setVertAlign( m_bVertAlign ); + KDesktopSettings::writeConfig(); +} + +// Only used for DCOP +QStringList KDIconView::selectedURLs() +{ + QStringList seq; + + QIconViewItem *it = firstItem(); + for (; it; it = it->nextItem() ) + if ( it->isSelected() ) { + KFileItem *fItem = ((KFileIVI *)it)->item(); + seq.append( fItem->url().url() ); // copy the URL + } + + return seq; +} + +void KDIconView::recheckDesktopURL() +{ + // Did someone change the path to the desktop ? + kdDebug(1204) << desktopURL().url() << endl; + kdDebug(1204) << url().url() << endl; + if ( desktopURL() != url() ) + { + kdDebug(1204) << "Desktop path changed from " << url().url() << + " to " << desktopURL().url() << endl; + setURL( desktopURL() ); // sets m_url + initDotDirectories(); + m_dirLister->openURL( url() ); + } +} + +KURL KDIconView::desktopURL() +{ + // Support both paths and URLs + QString desktopPath = KGlobalSettings::desktopPath(); + if (kdesktop_screen_number != 0) { + QString dn = "Desktop"; + dn += QString::number(kdesktop_screen_number); + desktopPath.replace("Desktop", dn); + } + + KURL desktopURL; + if (desktopPath[0] == '/') + desktopURL.setPath(desktopPath); + else + desktopURL = desktopPath; + + Q_ASSERT( desktopURL.isValid() ); + if ( !desktopURL.isValid() ) { // should never happen + KURL u; + u.setPath( QDir::homeDirPath() + "/" + "Desktop" + "/" ); + return u; + } + + return desktopURL; +} + +void KDIconView::contentsMousePressEvent( QMouseEvent *e ) +{ + if (!m_dirLister) return; + //kdDebug(1204) << "KDIconView::contentsMousePressEvent" << endl; + // QIconView, as of Qt 2.2, doesn't emit mouseButtonPressed for LMB on background + if ( e->button() == LeftButton && KRootWm::self()->hasLeftButtonMenu() ) + { + QIconViewItem *item = findItem( e->pos() ); + if ( !item ) + { + // Left click menu + KRootWm::self()->mousePressed( e->globalPos(), e->button() ); + return; + } + } + KonqIconViewWidget::contentsMousePressEvent( e ); +} + +void KDIconView::mousePressEvent( QMouseEvent *e ) +{ + KRootWm::self()->mousePressed( e->globalPos(), e->button() ); +} + +void KDIconView::wheelEvent( QWheelEvent* e ) +{ + if (!m_dirLister) return; + //kdDebug(1204) << "KDIconView::wheelEvent" << endl; + + QIconViewItem *item = findItem( e->pos() ); + if ( !item ) + { + emit wheelRolled( e->delta() ); + return; + } + + KonqIconViewWidget::wheelEvent( e ); +} + +void KDIconView::slotProperties() +{ + KFileItemList selectedFiles = selectedFileItems(); + + if( selectedFiles.isEmpty() ) + return; + + (void) new KPropertiesDialog( selectedFiles ); +} + +void KDIconView::slotContextMenuRequested(QIconViewItem *_item, const QPoint& _global) +{ + if (_item) + { + ((KFileIVI*)_item)->setSelected( true ); + popupMenu( _global, selectedFileItems() ); + } +} + +void KDIconView::slotMouseButtonPressed(int _button, QIconViewItem* _item, const QPoint& _global) +{ + //kdDebug(1204) << "KDIconView::slotMouseButtonPressed" << endl; + if (!m_dirLister) return; + m_lastDeletedIconPos = QPoint(); // user action -> not renaming an icon + if(!_item) + KRootWm::self()->mousePressed( _global, _button ); +} + +void KDIconView::slotMouseButtonClickedKDesktop(int _button, QIconViewItem* _item, const QPoint&) +{ + if (!m_dirLister) return; + //kdDebug(1204) << "KDIconView::slotMouseButtonClickedKDesktop" << endl; + if ( _item && _button == MidButton ) + slotExecuted(_item); +} + +// ----------------------------------------------------------------------------- + +void KDIconView::slotReturnPressed( QIconViewItem *item ) +{ + if (item && item->isSelected()) + slotExecuted(item); +} + +// ----------------------------------------------------------------------------- + +void KDIconView::slotExecuted( QIconViewItem *item ) +{ + kapp->propagateSessionManager(); + m_lastDeletedIconPos = QPoint(); // user action -> not renaming an icon + if (item) { + visualActivate(item); + ((KFileIVI*)item)->returnPressed(); + } +} + +// ----------------------------------------------------------------------------- + +void KDIconView::slotCut() +{ + cutSelection(); +} + +// ----------------------------------------------------------------------------- + +void KDIconView::slotCopy() +{ + copySelection(); +} + +// ----------------------------------------------------------------------------- + +void KDIconView::slotPaste() +{ + KonqOperations::doPaste(this, url(), KRootWm::self()->desktopMenuPosition()); +} + +void KDIconView::slotPopupPasteTo() +{ + Q_ASSERT( !m_popupURL.isEmpty() ); + if ( !m_popupURL.isEmpty() ) + paste( m_popupURL ); +} + +/** + * The files on the desktop come from a variety of sources. + * If an attempt is made to delete a .desktop file that does + * not originate from the users own Desktop directory then + * a .desktop file with "Hidden=true" is written to the users + * own Desktop directory to hide the file. + * + * Returns true if all selected items have been deleted. + * Returns false if there are selected items remaining that + * still need to be deleted in a regular fashion. + */ +bool KDIconView::deleteGlobalDesktopFiles() +{ + KURL desktop_URL = desktopURL(); + if (!desktop_URL.isLocalFile()) + return false; // Dunno how to do this. + + QString desktopPath = desktop_URL.path(); + + bool itemsLeft = false; + QIconViewItem *it = 0; + QIconViewItem *nextIt = firstItem(); + for (; (it = nextIt); ) + { + nextIt = it->nextItem(); + if ( !it->isSelected() ) + continue; + + KFileItem *fItem = ((KFileIVI *)it)->item(); + if (fItem->url().path().startsWith(desktopPath)) + { + itemsLeft = true; + continue; // File is in users own Desktop directory + } + + if (!isDesktopFile(fItem)) + { + itemsLeft = true; + continue; // Not a .desktop file + } + + KDesktopFile df(desktopPath + fItem->url().fileName()); + df.writeEntry("Hidden", true); + df.sync(); + + delete it; + } + return !itemsLeft; +} + +void KDIconView::slotTrashActivated( KAction::ActivationReason reason, Qt::ButtonState state ) +{ + if (deleteGlobalDesktopFiles()) + return; // All items deleted + + if ( reason == KAction::PopupMenuActivation && ( state & Qt::ShiftButton ) ) + KonqOperations::del(this, KonqOperations::DEL, selectedUrls()); + else + KonqOperations::del(this, KonqOperations::TRASH, selectedUrls()); +} + +void KDIconView::slotDelete() +{ + if (deleteGlobalDesktopFiles()) + return; // All items deleted + KonqOperations::del(this, KonqOperations::DEL, selectedUrls()); +} + +// ----------------------------------------------------------------------------- + +// This method is called when right-clicking over one or more items +// Not to be confused with the global popup-menu, KRootWm, when doing RMB on the desktop +void KDIconView::popupMenu( const QPoint &_global, const KFileItemList& _items ) +{ + if (!kapp->authorize("action/kdesktop_rmb")) return; + if (!m_dirLister) return; + if ( _items.count() == 1 ) + m_popupURL = _items.getFirst()->url(); + + KAction* pasteTo = m_actionCollection.action( "pasteto" ); + if (pasteTo) + pasteTo->setEnabled( m_actionCollection.action( "paste" )->isEnabled() ); + + bool hasMediaFiles = false; + KFileItemListIterator it(_items); + for (; it.current() && !hasMediaFiles; ++it) { + hasMediaFiles = it.current()->url().protocol() == "media"; + } + + KParts::BrowserExtension::PopupFlags itemFlags = KParts::BrowserExtension::DefaultPopupItems; + if ( hasMediaFiles ) + itemFlags |= KParts::BrowserExtension::NoDeletion; + KonqPopupMenu * popupMenu = new KonqPopupMenu( KonqBookmarkManager::self(), _items, + url(), + m_actionCollection, + KRootWm::self()->newMenu(), + this, + KonqPopupMenu::ShowProperties | KonqPopupMenu::ShowNewWindow, + itemFlags ); + + popupMenu->exec( _global ); + delete popupMenu; + m_popupURL = KURL(); + if (pasteTo) + pasteTo->setEnabled( false ); +} + +void KDIconView::slotNewMenuActivated() +{ + //kdDebug(1204) << "KDIconView::slotNewMenuActivated" << endl; + // New /